[
  {
    "path": ".github/issue_label_bot.yaml",
    "content": "label-alias:\n  bug: 'kind/bug'\n  feature_request: 'kind/feature'\n  feature: 'kind/feature'\n  question: 'kind/question'\n"
  },
  {
    "path": ".github/workflows/stale.yml",
    "content": "# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.\n#\n# You can adjust the behavior by modifying this file.\n# For more information, see:\n# https://github.com/actions/stale\nname: Mark stale issues and pull requests\n\non:\n  schedule:\n  - cron: '0 0 * * *' # Run every day at midnight\n\njobs:\n  stale:\n    runs-on: ubuntu-latest\n    permissions:\n      issues: write\n      pull-requests: write\n\n    steps:\n    - uses: actions/stale@v5\n      with:\n        repo-token: ${{ secrets.GITHUB_TOKEN }}\n        days-before-stale: 90\n        days-before-close: 21\n        # The message that will be added as a comment to the issues\n        # when the stale workflow marks it automatically as stale with a label.\n        stale-issue-message: >\n          This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.\n        # The message that will be added as a comment to the issues\n        # when the stale workflow closes it automatically after being stale for too long.\n        close-issue-message: >\n          This issue has been automatically closed because it has not had recent activity. Please comment \"/reopen\" to reopen it.\n        stale-issue-label: lifecycle/stale\n        # Exclude them from being marked as stale\n        exempt-issue-labels: lifecycle/frozen,enhancement,good first issue\n        # The message that will be added as a comment to the pull requests\n        # when the stale workflow marks it automatically as stale with a label.\n        stale-pr-message: \"This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. \\n\"\n        # The message that will be added as a comment to the pull requests\n        # when the stale workflow closes it automatically after being stale for too long.\n        close-pr-message: \"This pull request has been automatically closed because it has not had recent  activity.You can reopen the PR if you want. \\n\"\n        stale-pr-label: lifecycle/stale\n        # Exclude them from being marked as stale\n        exempt-pr-labels: lifecycle/frozen,enhancement,good first issue\n        # The issues or the pull requests with a milestone will not be marked as stale automatically\n        exempt-all-milestones: true\n        # Learn more about operations: https://github.com/actions/stale#operations-per-run.\n        operations-per-run: 250\n"
  },
  {
    "path": ".gitignore",
    "content": "flymd.*\n**.pyc\n**.swp\n**/.ipynb_checkpoints\n**/.cache\n.DS_Store\n\n# IntelliJ\n.idea/\n.vscode/\n"
  },
  {
    "path": "ADOPTERS.md",
    "content": "# Adopters of Kubeflow\r\n\r\nOur adopter files list organizations that have adopted Kubeflow in some way.\r\nSharing your adoption helps build project momentum, and this benefits everyone.\r\nIt's a small contribution with a big impact!\r\n\r\nWe invite you to add your organization to these lists by raising a pull request on the relevant GitHub repository.\r\n\r\n## Adopters of Kubeflow Projects\r\n\r\nFor adopters of specific Kubeflow Projects, please refer to the respective component's repository.\r\n\r\n| Component               | Repository                                                              | Adopter List                                                                            |\r\n|-------------------------|-------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|\r\n| Kubeflow Katib          | [`kubeflow/katib`](https://github.com/kubeflow/katib)                   | [`ADOPTERS.md`](https://github.com/kubeflow/katib/blob/master/ADOPTERS.md)              |\r\n| Kubeflow MPI Operator   | [`kubeflow/mpi-operator`](https://github.com/kubeflow/mpi-operator)     | [`ADOPTERS.md`](https://github.com/kubeflow/mpi-operator/blob/master/ADOPTERS.md)       |\r\n| Kubeflow Hub            | [`kubeflow/hub`](https://github.com/kubeflow/hub)                       | [`ADOPTERS.md`](https://github.com/kubeflow/hub/blob/master/ADOPTERS.md)     |\r\n| Kubeflow Notebooks      | [`kubeflow/notebooks`](https://github.com/kubeflow/notebooks)           | [`ADOPTERS.md`](https://github.com/kubeflow/notebooks/blob/main/ADOPTERS.md)            |\r\n| Kubeflow Pipelines      | [`kubeflow/pipelines`](https://github.com/kubeflow/pipelines)           | [`ADOPTERS.md`](https://github.com/kubeflow/pipelines/blob/master/ADOPTERS.md)          |\r\n| Kubeflow Spark Operator | [`kubeflow/spark-operator`](https://github.com/kubeflow/spark-operator) | [`ADOPTERS.md`](https://github.com/kubeflow/spark-operator/blob/master/ADOPTERS.md)     |\r\n| Kubeflow Trainer        | [`kubeflow/trainer`](https://github.com/kubeflow/trainer)               | [`ADOPTERS.md`](https://github.com/kubeflow/trainer/blob/master/ADOPTERS.md)  |\r\n| KServe                  | [`kserve/kserve`](https://github.com/kserve/kserve)                     | [`ADOPTERS.md`](https://github.com/kserve/website/blob/main/docs/community/adopters.md) |\r\n\r\n## Adopters of Kubeflow Platform\r\n\r\nFor organizations that have adopted Kubeflow Platform, please add your organization to the following list.\r\n<br>\r\nPlease keep the list in alphabetical order.\r\n\r\n| Organization | Contact | Description of Use |\r\n| --- | --- | --- |\r\n| [AT&T](https://www.att.com) | [@ma-armenta](https://github.com/ma-armenta) | Kubeflow is used as the ML Platform for research and PoCs. |\r\n| [CERN](https://www.home.cern) | [@gigabyte132](https://github.com/gigabyte132) | Kubeflow is used as our main ML platform. |\r\n| [DHL Data & Analytics](https://www.linkedin.com/company/dhl-data-analytics/) | [@juliusvonkohout](https://github.com/juliusvonkohout) | Kubeflow is used as our main ML platform. |\r\n| [Jio Platforms](https://www.jio.com) | [@abdullahpathan22](https://github.com/abdullahpathan22) | Kubeflow is used as our ML platform for running AI workloads on Kubernetes for JioTV+. |\r\n| [Slalom](https://www.slalom.com/us/en/services/artificial-intelligence) | [@robcube](https://github.com/robcube) | Kubeflow is used to prototype gesture or hand-based recognition. |\r\n| [Telia](https://www.teliacompany.com/) | [@akeed](https://github.com/akeed), [@sarahberenji](https://github.com/sarahberenji), [@tarekabouzeid](https://github.com/tarekabouzeid) | Kubeflow is used as our main ML platform for on-premises analytics. |\r\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Kubeflow Community Code of Conduct\n\nKubeflow follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md).\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting\nthe [Kubeflow Steering Committee](./proposals/STEERING-COMMITTEE.md)."
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Kubeflow Contributor Guide\n\nWelcome to the Kubeflow project! We'd love to accept your patches and \ncontributions to this project. Please read the \n[contributor's guide in our docs](https://www.kubeflow.org/docs/about/contributing/).\n\nThe contributor's guide:\n\n* Shows you where to find the Developer Certificate of Origin (DCO) that you need \n  to agree to\n* Helps you get started with your first contribution to Kubeflow\n* Describes the pull request and review workflow in detail, including the\n  OWNERS files and automated workflow tool\n"
  },
  {
    "path": "INCLUSIVITY.md",
    "content": "# Kubeflow Inclusivity\n\nThis document is a guide to inclusivity for leaders involved in the Kubeflow\nproject. It describes conscious efforts and behavior patterns that contribute\nto an inclusive environment where Kubeflow members feel safe to collaborate.\n\nThe Kubeflow community is a global group of contributors with a wide variety of\nbackgrounds. As such, leaders are expected to take purposeful steps to ensure\nsustainability of the collaborative space. This is essential for project health\nand future growth. We expect all community members, and especially leaders, to practice and grow in the areas covered in this document.  \n\n## Carve out space\n\nCarve out well-defined spaces for contribution. Encourage members of the\ncommunity to engage in these spaces. Reach out to specific individuals to let\nthem know you think they would be a good fit.\n\n## Get out of the way\n\nGet out of the way when someone steps up. Give them ownership and set\nexpectations for delivery and accountability. Follow up on those expectations.\nIf you have concerns or need more information, increase the frequency of\ncommunication rather than taking over or overstepping.\n\n## Make opportunities\n\nSeek out situations that provide opportunities for members of the community.\nExamples of this include connecting event organizers with potential speakers,\nintroducing leaders to individual contributors, and inviting others to\ncollaborate. Consciously drive the creation of opportunities in areas that\ncommunity members want to grow in.\n\n## Ask members where they want to grow\n\nFind out which areas community members want to grow in. This could be in the\nform of 1:1 conversations, small groups, or weekly meetings. Ask how you can\nhelp.\n\nRather than making assumptions and assigning tasks, ask people where they want\nto contribute and help them figure out how to make the most impact. Stretch them\njust enough that they can see progress and sustained growth.\n\n## Empower members to say no\n\nMake it clear that members are empowered to turn down opportunities. Encourage\nthem to define their own boundaries and give them space to assert those\nboundaries. Communicate that it is their responsibility to balance their\ncommitments and that they will be supported in doing so. Before presenting a\nspecific opportunity to an individual, provide a disclaimer that it is\nperfectly acceptable to say no.\n\n## Encourage members to ask for what they want\n\nEncourage members of the community to make requests. That could be for\nimprovements to the product, community, or their own personal growth. Respond\nto these requests with kindness and fairness.\n\nAsk for volunteers and make time for the community to bring up topics they care\nabout.\n\n## Explicitly call out challenges\n\nName specific challenges that affect members of the community and state your\nposition on how to resolve them. Make statements such as, \"I understand how\ndifficult it must be to X,\" and \"I wish you didn't have to face such blatant\nchallenges doing Y.\" Offer advice on how to deal with them or just be there to\ncommiserate.\n\nSimply acknowledging the struggle is an act of empathy that makes it easier to\nface these challenges. This is a means of lightening the load on\nunderrepresented groups by not requiring them to shoulder these burdens\nsilently.\n\n## Give clear, specific, and actionable feedback\n\nBe proactive about providing feedback, but ask first and be kind. Include\nconcrete steps that can be taken to improve the outcome and steer clear of\ncriticism involving something that cannot be reasonably changed.\n\n## Treat everyone with respect\n\nSet an example and uphold that standard. Do not tolerate double standards or\ncasual deprecation, even in jest. Ensure that community members understand the\ngroup is open to everyone.\n\n## Follow up on complaints\n\nWhen you observe a\n[code of conduct](https://github.com/kubeflow/community/blob/master/CODE_OF_CONDUCT.md)\nviolation or become aware of one, follow through on enforcing community\nstandards. Do this with care, showing respect and kindness for everyone\ninvolved. These instances have a broader impact than just the involved parties,\nsince they set downstream expectations for the entire community.\n\nThis is a responsibility that the Kubeflow project does not take lightly, since\nit directly impacts the ability of members to feel safe in the community.\n\n## Indicators of success\n\nIt can be difficult to assess whether these efforts are effective. In many ways,\nsuccess can be invisible since it involves the prevention of conflict. A few\nindicators are:\n\n* Diverse membership across various dimensions (geographic, corporate, level of\n  experience, etc.)\n* Presence of members from frequently marginalized groups\n* Continued engagement by long-term members\n* Sentiment within the community that ideas are heard and contributions valued\n* Accountability of leaders by members\n\n## Attribution\n\nThe origins of this document are an enumeration of efforts by project cofounder\n[David Aronchick](https://github.com/aronchick). This was not a solo effort and\nincluded support from [Jeremy Lewi](https://github.com/jlewi), [Michelle Casbon](https://github.com/texasmichelle),\n[Edd Wilder-James](https://github.com/ewilderj), and other members of the team.\n\n\n"
  },
  {
    "path": "KUBEFLOW-GENERAL-TECHNICAL-REVIEW.md",
    "content": "# General Technical Review - Kubeflow / Graduation\n\n- **Project:** Kubeflow\n\n- **Project Version:** Every Kubeflow sub-project has its own version.\n\n- **Website:** https://www.kubeflow.org/\n\n- **Date Updated**: 2025-09-05\n\n- **Template Version**: v1.0\n\n- **Description**:\n\nKubeflow is the foundation of tools for AI Platforms on Kubernetes.\n\nAI platform teams can build on top of Kubeflow by using each project independently or deploying the\nentire AI reference platform to meet their specific needs. The Kubeflow AI reference platform is\ncomposable, modular, portable, and scalable, backed by an ecosystem of Kubernetes-native projects\nthat cover every stage of the\n[AI lifecycle.](https://www.kubeflow.org/docs/started/architecture/#kubeflow-projects-in-the-ai-lifecycle)\n\nWhether you’re an AI practitioner, a platform administrator, or a team of developers,\nKubeflow offers modular, scalable, and extensible tools to support your AI use cases.\n\n## What are Kubeflow Projects\n\nKubeflow is composed of multiple open source projects that address different aspects of the AI\nlifecycle. These projects are designed to be usable both independently and as part of the Kubeflow\nAI reference platform. This provides flexibility for users who may not need the full end-to-end\nAI platform capabilities but want to leverage specific functionalities, such as model training or\nmodel serving.\n\n### Kubeflow Projects in scope for CNCF Graduation\n\n- Kubeflow Spark Operator\n- Kubeflow Notebooks\n- Kubeflow Trainer\n- Kubeflow Katib\n- Kubeflow Model Registry\n- Kubeflow Pipelines\n\n## What is the Kubeflow AI Reference Platform\n\nThe Kubeflow AI reference platform refers to the full suite of Kubeflow projects bundled together\nwith additional integration and management tools. Kubeflow AI reference platform deploys the\ncomprehensive toolkit for the entire AI lifecycle. The Kubeflow AI reference platform can be\ninstalled via [Packaged Distributions](https://www.kubeflow.org/docs/started/installing-kubeflow/#packaged-distributions)\nor [Kubeflow Manifests](https://www.kubeflow.org/docs/started/installing-kubeflow/#kubeflow-manifests).\n\n## Day 0 - Planning Phase\n\n### Scope\n\n#### Describe the roadmap process\n\nKubeflow projects are managed by community members that are part of working groups.\nEach working group defines and agrees on the features for each release. The release cadence for\neach working group varies according to community agreement among the working groups.\n\nThen, all Kubeflow projects have individual roadmap files in the Git repository defining each\nrelease and available to the public. This ensures we have a standard structure for each proposed\nfeature, auditing, versioning, and transparency, since it is recorded along with the history in the Git repo.\n\nFor more information, check ROADMAP for each Kubeflow Project:\n\n- [Kubeflow Spark Operator](https://github.com/kubeflow/spark-operator/blob/master/ROADMAP.md)\n- [Kubeflow Trainer](https://github.com/kubeflow/trainer/blob/master/ROADMAP.md)\n- [Kubeflow Katib](https://github.com/kubeflow/katib/blob/master/ROADMAP.md)\n- [Kubeflow Hub](https://github.com/kubeflow/hub/blob/main/ROADMAP.md)\n- [Kubeflow Pipelines](https://github.com/kubeflow/pipelines/blob/master/ROADMAP.md)\n\nCommunity-wide changes are proposed as [Kubeflow Enhancement proposals (KEPs)](https://github.com/kubeflow/community/tree/master/proposals)\nin the `kubeflow/community` repository or in the [Kubeflow sub-projects KEPs](https://github.com/kubeflow/trainer/tree/master/docs/proposals).\n\n#### Describe the target persona or user(s) for the project\n\n1. Users: Data Scientists, ML Engineer, AI Practitioners, Data Engineers, AI Practitioners.\n2. Operators: MLOps Engineers, AIOps engineers, Platform Engineers, AI Platform Engineers.\n3. Vendors: Vendors and projects building Kubernetes based AI Platform products.\n\n#### Explain the primary use case for the project. What additional use cases are supported by the project\n\nThe goal of Kubeflow is to run Cloud Native AI workloads for every stage in AI lifecycle. By\nusing Kubeflow projects users can develop and deploy AI applications.\n\nThe primary use-cases include:\n\n- Large-scale data processing and feature engineering.\n- Distributed pre-training of foundation models.\n- Post-training and fine-tuning of LLMs.\n- Hyperparameter optimization and model tuning.\n- LLM inference and multi-host serving.\n\nAdditional Use Cases:\n\n- End-to-End GenAI pipeline building.\n- Interactive AI development.\n- Multiple users / projects with hard multi-tenancy on the same cluster.\n\n#### Explain which use cases have been identified as unsupported by the project\n\nAs Kubeflow is composed of multiple projects, each working group makes its own determinations as t\nwhat will be excluded from them. However we have an overarching theme and governance structure\n(Steering Committee) that has identified the following areas as not being a priority for all projects:\n\n- The projects are deployed in any Kubernetes (each release will specify tested versions),\n  regardless of the underlying infrastructure, independently through Kubernetes manifests leveraging\n  Kustomize and/or Helm Charts. However, the project doesn’t provide an implementation to be deployed\n  on infrastructure besides Kubernetes. - We do not officially enforce a deployment method or distribution.\n\n- Kubeflow doesn’t provide a GitOps implementation, however Kubeflow manifests can be integrated\n  into a GitOps solution. For example, Platform Engineers can create an ArgoCD Application (CRD)\n  to install and configure Kubeflow projects. by providing Kubeflow individual project manifests,\n  for example Pipelines. The GitOps application will read from the Kubeflow Pipelines manifest and\n  Argo CD will deploy the configurations in the target cluster.\n\n#### Describe the intended types of organizations who would benefit from adopting this project\n\nKubeflow is intended to be used by any organization which needs to run AI workloads on Kubernetes,\nin any of the AI lifecycle stages an organization might choose to use just one or more projects,\nsuch as Pipelines or Training. Organizations can also use all the projects from Kubeflow to increase\nthe user experience to build AI workloads. Additionally, organizations can develop their own\ncustomizations on top of the Kubeflow platform or choose to build distributions to help other\norganizations adopt a customized platform based on Kubeflow projects.\n\nAs Kubeflow maintains flexibility, organizations can choose their own path according to their needs.\n\nWe encourage adopters to be part of the adopters list in [GitHub](https://github.com/kubeflow/community/blob/master/ADOPTERS.md).\n\nExamples of organizations that use Kubeflow:\n\n- AWS\n- Red Hat\n- Capital One\n- CERN\n- Google\n- Alibaba Cloud\n- Bloomberg\n- IBM\n- Cisco\n- Huawei\n- Microsoft\n- Tencent\n- DHL Data & Analytics\n- Telia\n- Roblox\n- Toyota\n- PepsiCo\n- Volvo\n- and others…\n\n#### Describe any completed end user research and link to any reports.\n\nWe regularly undertake user research about Kubeflow and its users. Research could be done by\nworking groups, during events, or by conducting at least one study annually. We ensure these surveys\nare visible to the public and shared with the community.\n\nHere are some results from previous years.\n\n- [Kubeflow 2025 Survey](https://docs.google.com/forms/d/11cSe5vmGLrGekJISHBMfjVh_97WFGuhcvGnd0l5aNLg/edit#responses)\n- [2025:UX designers supporting Model Registry conducted a series of user sessions to understand preferred interaction patterns (link)](https://docs.google.com/forms/d/11cSe5vmGLrGekJISHBMfjVh_97WFGuhcvGnd0l5aNLg/edit#responses)\n- [Kubeflow Survey 2024](https://github.com/kubeflow/community/issues/708)\n- [Kubeflow Survey 2023](https://blog.kubeflow.org/kubeflow-user-survey-2023/)\n- [Kubeflow Survey 2022](https://blog.kubeflow.org/kubeflow-user-survey-2022/)\n\n### Usability\n\n#### How should your target personas interact with your project\n\nAI Practitioner - Kubeflow SDK, Kubeflow UIs\n\nPlatform Admins - Operator guides, installing and configuring any Kubeflow projects via Helm charts\nor Kustomize manifests predefined and available in the Kubeflow documentation from the command line.\n\n- [Getting Started guide](https://www.kubeflow.org/docs/started/introduction/).\n- [How to install Kubeflow projects](https://www.kubeflow.org/docs/started/installing-kubeflow/).\n- [How to contribute to Kubeflow](https://www.kubeflow.org/docs/about/contributing/).\n\n#### Describe the user experience (UX) and user interface (UI) of the project\n\nKubeflow user experience in each project is a collection of projects, the user experience for the\nprojects are each with their own [interfaces, APIs and SDKs](https://www.kubeflow.org/docs/started/architecture/#kubeflow-interfaces).\n\n##### Describing User Experience through SDK\n\nWe are working on a unified [Kubeflow SDK](https://github.com/kubeflow/sdk) that gives\nAI practitioners Python-native experience to interact with Kubeflow APIs.\n\nThrough Kubeflow SDK, users will be able to interact with the different projects, increasing user experience and reducing complexity.\n\n<div style=\"text-align: center;\">\n  <img\n    src=\"https://raw.githubusercontent.com/kubeflow/sdk/main/docs/images/persona_diagram.svg\"\n    width=\"600\"\n    title=\"Kubeflow SDK Personas\"\n    alt=\"Kubeflow SDK Personas\"\n  />\n</div>\n \nExample to interact with Kubeflow Trainer using Kubeflow SDK:\n\n```py\nfrom kubeflow.trainer import TrainerClient, BuiltinTrainer, TorchTuneConfig\n\n# Fine-Tune Llama 3.2\njob_id = TrainerClient().train(\n    runtime=TrainerClient().get_runtime(name=\"torchtune-llama3.2-1b\"),\n    trainer=BuiltinTrainer(\n        config=TorchTuneConfig(\n            resources_per_node={\n                \"memory\": \"200G\",\n                \"gpu\": 1,\n            },\n        )\n    ),\n)\n\n# Wait for TrainJob to complete\nTrainerClient().wait_for_job_status(job_id)\n\n# Print TrainJob logs\nprint(\"\\n\".join(TrainerClient().get_job_logs(name=job_id)))\n```\n\nExample to interact with Kubeflow Katib using Kubeflow SDK\n\n```py\nfrom kubeflow.optimizer import OptimizerClient, search\nfrom kubeflow.trainer import TrainerClient, BuiltinTrainer, TorchTuneConfig\n\nOptimizerClient().optimize(\n    objective=\"loss\",\n    mode=\"min\",\n    num_trials=5,\n    trainer=BuiltinTrainer(\n        config=TorchTuneConfig(\n            resources_per_node={\n                \"memory\": \"200G\",\n                \"gpu\": 1,\n            },\n            lr=search(\"0.1\", \"0.2\", \"lognormal\"),\n            num_epochs=search(\"4\", \"8\", \"uniform\"),\n        )\n    ),\n    runtime=TrainerClient().get_runtime(name=\"torchtune-llama3.2-1b\"),\n)\n```\n\nFind more details and examples about [Kubeflow SDK](https://github.com/kubeflow/sdk).\n\n##### Describing User Experience through APIs\n\n- Kubeflow Pipelines\n\nREST API is available under the `/pipeline/` HTTP path. For example, if you host Kubeflow at\nhttps://kubeflow.example.com, the API will be available at https://kubeflow.example.com/pipeline/.\n\nThe API is documented using swagger and examples about its usage\n[can be found here](https://www.kubeflow.org/docs/components/pipelines/reference/api/kubeflow-pipeline-api-spec/)\n\n- Kubeflow Model Registry\n\nModel Registry REST API is available under the `/api/model_registry/` HTTP path. More information\n[can be found here](https://www.kubeflow.org/docs/components/hub/reference/rest-api/)\n\nThe Model Catalog Service provides a read-only discovery service for ML models across multiple\ncatalog sources. It acts as a federated metadata aggregation layer, allowing users to search and\ndiscover models from various external catalogs through a unified REST API.\n\n##### Describing User Interfaces through web UI\n\n[Kubeflow Central Dashboard](https://www.kubeflow.org/docs/components/central-dash/overview/)\nacts as a hub for the AI platform and tools by exposing the UIs of components running in the cluster.\n\n<div style=\"text-align: center;\">\n  <img\n    src=\"https://github.com/kubeflow/website/blob/498691a0eae4bef5ae5ae7935dd367a547274f85/content/en/docs/images/dashboard/homepage.png?raw=true\"\n    width=\"600\"\n    title=\"Kubeflow Dashboard\"\n    alt=\"Kubeflow Dashboard\"\n  />\n</div>\n\nEnd users can access the Central Dashboard installed version on their organization according to\nthe user and access control setup previously by Platform Admin. Users can access Kubeflow projects\nsuch as Kubeflow Pipelines (KFP) to manage experiments, pipeline definitions, runs, and recurrent\nruns. KFP Artifacts to track artifacts produced by pipelines stored in MLMD. KFP Executions to\ntrack executions of pipeline components stored in MLMD. Kubeflow Katib experiments to manage\nAutoML experiments. Kubeflow Notebooks to manage Kubeflow Notebooks. Kubeflow TensorBoards to\nmanage TensorBoard instances. Kubeflow Volumes to manage Kubernetes PVC Volumes. Contributors page\nto manage contributors of profiles (namespaces) that you own.\n\nMore information can be found [in the Kubeflow Dashboard docs](https://www.kubeflow.org/docs/components/central-dash/overview/).\n\n#### Describe how this project integrates with other projects in a production environment\n\nAll Kubeflow projects are Kubernetes native and so fit into the wider ecosystem of Kubernetes\nbased tools. Kubeflow projects extensively use tools from the cloud native ecosystem,\nincluding, Argo Workflow, Istio, Helm, Knative, KServe, JobSet, Kueue, and other projects.\n\nSpecific components integrate with popular AI frameworks where applicable (e.g. Kubeflow Trainer\nintegrates with PyTorch and other model frameworks)\n\nThe following diagram gives an overview of the\n[Kubeflow Ecosystem](https://www.kubeflow.org/docs/started/architecture/#kubeflow-ecosystem)\nand how it relates to the wider Kubernetes AI landscapes.\n\n<div style=\"text-align: center;\">\n  <img\n    src=\"https://github.com/kubeflow/website/blob/498691a0eae4bef5ae5ae7935dd367a547274f85/content/en/docs/started/images/kubeflow-architecture.drawio.svg?raw=true\"\n    width=\"600\"\n    title=\"Kubeflow Ecosystem\"\n    alt=\"Kubeflow Ecosystem\"\n  />\n</div>\n\nSpecifically for a production environment, Kubeflow can integrate and leverage the following\nresources and projects:\n\n- Cloud Providers and underlying infrastructure\n  - Kubeflow can leverage the underlying infrastructure provided through Kubernetes, such as access\n    hardware accelerators from Intel, Nvidia, and AMD through Kubernetes Operators.\n  - Organizations can run Kubeflow projects on any Kubernetes platform and use cloud provider\n    services, such as scalability across different nodes, taking advantage of projects such as Open Cluster Management.\n- Configuration as code\n  - GitOps approach can be used to set up Kubeflow setup and configuration, for example, using\n    Argo CD to manage configuration as code in multiple clusters.\n- Security\n  - Security is becoming a key aspect, Kubeflow projects implement security best practices in\n    Kubernetes including Pod Security Standards, Network policies, RBAC. Additionally, they can\n    leverage projects such as the External Secrets Operator.\n  - Data Scientists can also use Sigstore projects to sign and validate their models to avoid type\n    of attacks such as tampering with Models to ensure the integrity and authenticity of models\n    persists during the Model Development Lifecycle.\n- Simplify User experience\n  - Organizations can simplify Data scientists' experience by scaling Platform Engineers by\n    providing software templates through Backstage to access environments quickly, leveraging\n    Kubeflow projects such as Notebooks.\n\n### Design\n\n#### Explain the design principles and best practices the project is following\n\n- Loosely Coupled and Distributable Services\n  - Built as modular, independent microservices that can scale and evolve.\n  - Services communicate through well defined APIs, enabling flexible orchestration and integration.\n- Kubernetes native with Declarative APIs and Automation\n  - Uses Kubernetes CRD for each project.\n  - Integrate natively with Kubernetes core APIs like Jobs, Pods, Deployment.\n  - Supports automated deployment, orchestration, and CI/CD workflows.\n  - Enables GitOps management for reproducible and auditable operations.\n- Portability and Platform-Agnosticism\n  - Designed to run on any Kubernetes cluster, including onprem, edge, public cloud or hybrid environments.\n  - Avoids vendor lock-in while ensuring consistent behavior across different infrastructures.\n- Observability\n  - Provides metrics, logs, and traces to monitor system performance and workflow execution.\n  - Enables debugging, performance analysis, and monitoring of workloads and processes.\n- Resilience and Availability\n  - Leverages platform features such as health checks, automatic restarts, and scaling to maintain high availability.\n  - Designed to tolerate failures and minimizing disruption to workloads.\n- Security and Multi-Tenancy\n  - Implements access control, isolation, and resource quotas to separate workloads and users.\n  - Supports secure communication and policy enforcement to maintain a safe multi-tenant environment.\n- Extensibility and Interoperability\n  - Provides APIs and runtime contracts to allow integration of new tools, frameworks, or workflows.\n  - Supports extension and customization without breaking existing functionality.\n\nKubeflow overall has strong [contributing guidelines](https://www.kubeflow.org/docs/about/contributing/)\nthat inform our development and design. Each project also provides new contributors specific\nguidance on their GitHub repositories:\n\n- [Kubeflow Spark Operator](https://github.com/kubeflow/spark-operator/blob/master/CONTRIBUTING.md)\n- [Kubeflow Notebooks](https://github.com/kubeflow/notebooks/blob/main/CONTRIBUTING.md)\n- [Kubeflow Trainer](https://github.com/kubeflow/trainer/blob/master/CONTRIBUTING.md)\n- [Kubeflow Katib](https://github.com/kubeflow/katib/blob/master/CONTRIBUTING.md)\n- [Kubeflow Model Registry](https://github.com/kubeflow/model-registry/blob/main/CONTRIBUTING.md)\n- [Kubeflow Pipelines](https://github.com/kubeflow/pipelines/blob/master/CONTRIBUTING.md)\n\nFor the new features every Kubeflow project follows\n[the KEP guidelines](https://github.com/kubeflow/community/tree/master/proposals#kep-format-to-propose-and-document-enhancements-to-kubeflow)\n\n#### Outline or link to the project’s architecture requirements\n\nWe do follow the same practices as Kubernetes for APIs, with alpha, beta, and stable status of APIs.\nDetails [are described here](https://www.kubeflow.org/docs/started/support/#component-status).\n\n#### Define any specific service dependencies the project relies on in the cluster\n\nThe following projects are required to install Kubeflow projects:\n\n- Istio, Knative, Cert-manager\n- Detailed information [can be found in the Kubeflow manifests](https://github.com/kubeflow/manifests#kubeflow-components-versions).\n\nSpecific projects have other dependencies:\n\n- Kubeflow Pipelines: Argo Workflows>=v3.1\n- Kubeflow Trainer: JobSet>=v0.8.0\n- Kubeflow Katib: MySQL>=v8.0\n- Kubeflow Model Registry: MySQL>=v8.0\n\n#### Describe how the project implements Identity and Access Management\n\nKubeflow projects use a pluggable system of IAM that connects back to Kubernetes IAM in most cases.\nAs a reference implementation, the optional Kubeflow Manifests/Dashboard components use the\nfollowing IAM systems:\n\n- [OAuth2 Proxy](https://github.com/kubeflow/manifests#oauth2-proxy)\n- [Kubeflow manifest with Dex](https://github.com/kubeflow/manifests#dex)\n\nGeneral security Talks about Kubeflow including an architectural introduction:\n\n- [KubeCon / Kubeflow Summit 2024 Lightning Talk](https://youtu.be/f7C3v0gJRVI).\n- [KubeCon 2023 Hardening Kubeflow Security for Enterprise Environments](https://youtu.be/wQaOa4Kjxs0).\n- [Kubeflow Summit 2023 Security Working Group Update](https://youtu.be/XKHVt2yxQFo).\n- [Blog Hardening Kubeflow Security for Enterprise Environments](https://blogs.vmware.com/opensource/2023/06/20/hardening-kubeflow-security-for-enterprise-environments-2/).\n\n#### Describe how the project has addressed sovereignty\n\nKubeflow’s projects can be self-hosted on any Kubernetes cluster, including air-gapped environments,\nwhich is critical for those organizations using disconnected environments. Additionally,\nKubeflow projects support multi-tenancy, which allows organizations to isolate workloads in a\nKubernetes cluster, which can be used with Network Policies to restrict isolation from different\ncomponents by ports or application name. Kubeflow projects support custom service accounts,\nallowing organizations to control how Kubeflow projects interact with the cluster by leveraging RBAC.\nFurther, Platform Administrators can decide which users in Kubernetes will have access to the\nKubeflow projects by creating different users and RBAC policies. Kubeflow Notebooks also supports\nprofiles, which allows simplifying the permission management.\n\nIn terms of data management, data sovereignty is managed by those who deploy or package the projects.\n\n#### Describe any compliance requirements addressed by the project\n\nKubeflow projects are extensible which allows users to fit their internal compliance requirements.\nAs a result, specific common compliance frameworks (SOC-2, GDPR, etc.) are the responsibility of\nend users and vendors. However, we aim to provide a strong foundation through reference architectures\nsimilar things from which to build on.\n\n#### Describe the project’s High Availability requirements\n\nThe end users can adjust the replicas. Kubeflow project controllers support leader election,\n[for example Kubeflow Trainer](https://github.com/kubeflow/trainer/blob/master/cmd/trainer-controller-manager/main.go#L80).\n\n#### Describe the project’s resource requirements, including CPU, Network and Memory\n\nThe following table shows the resource requirements for each Kubeflow project, calculated as the\nmaximum of actual usage and configured requests for CPU/memory, plus storage requirements from PVCs:\n\nThe maximum looks hefty so rather consider in general the maximum (manifest requests, average usage).\n\n| Component               | CPU (cores) | Memory (Mi) | Storage (GB) |\n| ----------------------- | ----------- | ----------- | ------------ |\n| Cert Manager            | 3m          | 130Mi       | 0GB          |\n| Dex + OAuth2-Proxy      | 3m          | 28Mi        | 0GB          |\n| Istio                   | 2300m       | 3502Mi      | 0GB          |\n| Kubeflow KServe         | 600m        | 1200Mi      | 0GB          |\n| Kubeflow Katib          | 9m          | 471Mi       | 13GB         |\n| Kubeflow Core           | 35m         | 841Mi       | 0GB          |\n| Metadata                | 78m         | 687Mi       | 30GB         |\n| Kubeflow Model Registry | 510m        | 2112Mi      | 0GB          |\n| Other                   | 20m         | 354Mi       | 6GB          |\n| Kubeflow Pipelines      | 970m        | 3552Mi      | 90GB         |\n| Kubeflow Spark Operator | 4m          | 41Mi        | 0GB          |\n| Kubeflow Trainer        | 3m          | 25Mi        | 0GB          |\n| **Total**               | **4535m**   | **12943Mi** | **139GB**    |\n\n#### Describe the project’s storage requirements, including its use of ephemeral and/or persistent storage\n\nEach project can configure storage in different ways. This is also true of the manifests which\nconfigure storage for a collection of projects.\nThis [can be seen here](https://github.com/kubeflow/manifests/pull/3091).\n\n#### Please outline the project’s API Design\n\nVarious Kubeflow projects offer APIs and Python SDKs. See the following sets of reference documentation:\n\n- [Pipelines reference docs](https://www.kubeflow.org/docs/components/pipelines/reference/)\n  for the Kubeflow Pipelines API and SDK, including the Kubeflow Pipelines domain-specific language (DSL).\n- [Kubeflow SDK](https://github.com/kubeflow/sdk)\n  to interact with Kubeflow APIs with Python-native interface.\n\n  See also [Kubeflow APIs and SDKs](https://www.kubeflow.org/docs/started/architecture/#kubeflow-apis-and-sdks).\n\nKubeflow CRDs are following Kubernetes best practices for\n[the API changes](https://kubernetes.io/docs/concepts/overview/kubernetes-api/#api-changes).\n\n#### Describe the project’s API topology and conventions\n\n[Kubeflow APIs and SDKs documentation](https://www.kubeflow.org/docs/started/architecture/#kubeflow-apis-and-sdks).\n\n#### Describe the project defaults\n\nSome defaults can be seen [in the Kubeflow manifests](https://github.com/kubeflow/manifests#installation).\n\nAdditionally, API defaults are shown in the API docs, such as:\n[Kubeflow Trainer](https://github.com/kubeflow/trainer/blob/master/pkg/apis/trainer/v1alpha1/trainjob_types.go#L128)\nor [Kubeflow Katib](https://github.com/kubeflow/katib/blob/master/pkg/apis/controller/experiments/v1beta1/experiment_types.go#L46).\n\n#### Outline any additional configurations from default to make reasonable use of the project\n\n[Kubeflow manifests guides](https://github.com/kubeflow/manifests/blob/master/README.md).\n\nSome public and listed distributions have their own ways\n[to install Kubeflow AI platform](https://www.kubeflow.org/docs/started/installing-kubeflow/#packaged-distributions)\n\n#### Describe any new or changed API types and calls—including to cloud providers—that will result from this project being enabled and used\n\nDeploying Kubeflow manifests and individual projects results in exposing new APIs and the possibility\nto call configured 3rd party APIs if integrations exist. These all have to be explicitly set by the users.\n\n#### Describe compatibility of any new or changed APIs with API servers, including the Kubernetes API server\n\nKubeflow follows the same practice for [API compatibility as Kubernetes](https://kubernetes.io/docs/concepts/overview/kubernetes-api/#api-changes).\n\n#### Describe versioning of any new or changed APIs, including how breaking changes are handled\n\nMany Kubeflow projects use Kubernetes CRDs, and for these resources follows\n[the same deprecation policy as Kubernetes](https://kubernetes.io/docs/reference/using-api/deprecation-policy/).\n\n#### Describe the project’s release processes, including major, minor and patch releases\n\nEvery Kubeflow project follow its own release lifecycle, for example\n[Kubeflow Trainer](https://github.com/kubeflow/trainer/tree/master/docs/release)\nor [Kubeflow Katib](https://github.com/kubeflow/katib/tree/master/docs/release).\n\nHowever, community also maintain [the Kubeflow AI reference platform](https://www.kubeflow.org/docs/kubeflow-platform/releases/)\nreleases which install all Kubeflow projects together for end-to-end AI platform:\n\n### Installation\n\n#### Describe how the project is installed and initialized\n\n[Kubeflow Installation guide](https://www.kubeflow.org/docs/started/installing-kubeflow/).\n\nKubeflow projects can be installed as a standalone applications or together using\nthe Kubeflow Manifests or Kubeflow Distributions (public or private).\n\n#### How does an adopter test and validate the installation\n\nDistributions can verify the installation [by following this guide](https://github.com/kubeflow/manifests?tab=readme-ov-file#installation)\nor [executing this test suites](https://github.com/kubeflow/manifests/blob/master/.github/workflows/full_kubeflow_integration_test.yaml).\n\nKubeflow projects docs also explain how platform admins should validate the installation of individual\napplications, [for example Kubeflow Trainer](https://www.kubeflow.org/docs/components/trainer/operator-guides/installation/#installing-the-kubeflow-trainer-controller-manager)\n\n### Security\n\n#### Provide a link to the project’s cloud native [security self assessment](https://tag-security.cncf.io/community/assessments/).\n\n- [Kubeflow Security Self Assessment](https://github.com/kubeflow/community/blob/master/security/self-assessment.md)\n\n#### How are you satisfying the tenets of cloud native security projects\n\n1. Make security a design requirement.\n\nKubeflow projects are built with security as a fundamental concern. Kubeflow projects follow\nKubernetes and cloud native security best practices. By leveraging Kubernetes Custom Resources\nDefinition (CRDs), Role-Based Access Control (RBAC), network policies, and pod security standards,\nKubeflow projects seamlessly integrate into cloud native secure environments. Additionally,\nKubeflow projects re-use functionality from other cloud native tools like Istio, Cert-Manager,\nKubernetes and inherit its security best practices.\n\nDefault configuration for Kubeflow projects follow best practices such as rootless containers,\nlimited privileges, etc.\n\n2. Applying secure configuration has the best user experience\n\nDefault configuration for Kubeflow projects follow best practices such as rootless containers,\nlimited privileges, etc. Users can migrate workloads to more secure configurations without breaking\nchanges, leveraging Kubernetes’ declarative model.\n\n3. Selecting insecure configuration is a conscious decision\n\nInsecure options require explicit user setup and configurations.\n\n#### Describe how each of the [cloud native principles](https://github.com/cncf/toc/blob/main/DEFINITION.md) apply to your project\n\nKubeflow uses cloud native principles by building on Kubernetes and other cloud native technologies\nwhile extending them in our composable projects.\n\nKubeflow projects use containers as a fundamental unit of task/deployment. For example,\nevery TrainJob uses separate containers to train models, allowing users to package their training\ncode along with its dependencies in a containerized environment\n\nKubeflow projects are designed to run natively on Kubernetes and define various CRDs for each\nAI workload. For example, TrainJob CR for model training or Notebook CR for interactive development.\nIt uses native Kubernetes primitives like Deployments, Services, Job, JobSet, and CRDs to\norchestrate AI workloads.\n\nKubeflow follows a loosely-coupled microservices architecture model, where each project can\nbe deployed as a standalone service and be integrated into desired AI platform on Kubernetes.\n\nKubeflow APIs are declarative and follow Kubernetes best practices. For instance,\nSparkApplication to manage Spark jobs or TrainJob to manage distributed training jobs.\n\n#### How do you recommend users alter security defaults in order to \"loosen\" the security of the project\n\nUsers can install Kubeflow Pipelines without multi-user isolation if they want to loosen the\nsecurity of deployment. Users suggested to follow the Kubeflow AI reference platform deployment\nmode to install Kubeflow Pipelines control plane\n[in multi-tenant model](https://www.kubeflow.org/docs/components/pipelines/operator-guides/multi-user/).\nIt provides isolation between Pipelines and Runs for users.\n\n#### Security Hygiene\n\n##### Describe the frameworks, practices and procedures the project uses to maintain the basic health and security of the project\n\n- **Robust CI/CD infrastructure:** Kubeflow projects have automated unit, integration, and end-to-end\n  tests that are integrated into the CI pipelines to ensure code stability and correctness of PRs.\n\n- **Dependency management:** Kubeflow projects leverage lock files like `go.mod` and `pyproject.toml`,\n  and progressing towards Software Bill of Materials (SBOM) generation.\n\n- **Release stability:** Kubeflow projects maintain release branches and release tags which allow\n  maintainers create patch releases to address bug fixes and security vulnerabilities. Also,\n  projects maintain changelogs and roadmaps to ensure traceability and transparency for all changes.\n\n- **Static and Dynamic Code Analysis:** Kubeflow projects CI integrates code linting, static,\n  and dynamic code analysis tools to enforce code quality and detect potential issues before they\n  reach production.\n\n- **Secure Defaults:** Defaults manifests and Helm charts are configured with security best practices,\n  like pod security standards, rootless containers, and enforces least privileges.\n\n- **Code Review Process:** Kubeflow projects’ maintainers follow a strong review process with peer\n  review and explicit approval before PRs being merged into the main branch.\n\n- **Open Governance:** Kubeflow follows open governance with regular public meetings and\n  communication channels to keep users aware of development and roadmap.\n\n- **Secure Image Build:** Image builds are validated through CI/CD checks to ensure they are\n  reproducible, security, and consistent.\n\nSome examples can be found here:\n\n- [Kubeflow Spark Operator](https://github.com/kubeflow/spark-operator/tree/master/.github/workflows)\n- [Kubeflow Katib](https://github.com/kubeflow/katib/tree/master/.github/workflows)\n- [Kubeflow Trainer](https://github.com/kubeflow/trainer/tree/master/.github/workflows)\n- [Kubeflow Model Registry](https://github.com/kubeflow/model-registry/tree/main/.github/workflows)\n- [Kubeflow Pipelines](https://github.com/kubeflow/pipelines/tree/master/.github/workflows)\n- [Kubeflow Manifests](https://github.com/kubeflow/manifests/blob/master/.github/workflows/full_kubeflow_integration_test.yaml)\n\n##### Describe how the project has evaluated which features will be a security risk to users if they are not maintained by the project\n\nFeatures are discussed and reviewed in the community, with security implications considered during\ndesign and code review processes. The project tracks the security health of dependencies and evaluates\nthe impact of vulnerabilities or unmaintained projects. The project identifies potential risks by\nanalyzing the attack surface, especially for features that interact with user-supplied code,\ncustom containers, user supplied models or external data sources.\n\n#### Cloud Native Threat Modeling\n\n##### Explain the least minimal privileges required by the project and reasons for additional privileges\n\nEach Kubeflow project's control plane needs to watch for its CRDs. For example, Kubeflow Trainer:\nTrainJob and ClusterTrainingRuntime, Spark Operator for SparkApplications, Katib for Experiments, etc.\nControllers have minimal privileges to orchestrate its CRDs and corresponding resources that need to be created\n\nKubeflow control plane is installed cluster-wide, and it requires RBAC to manage namespace-scoped resources.\n\nThe default controllers run with PodSecurityStandards restricted and rootless containers,\nminimizing the risk of privilege escalation.\n\nUsers who interact with Kubeflow SDK get namespace-scoped permission to interact with required\nresources. For example, users’ role for\n[Kubeflow Trainer can be found here](https://github.com/kubeflow/trainer/blob/master/manifests/overlays/kubeflow-platform/kubeflow-trainer-roles.yaml#L17).\nAll roles are aggregated in the `kubeflow-edit` cluster role after installing Kubeflow Manifests.\n\n##### Describe how the project is handling certificate rotation and mitigates any issues with certificates\n\nKubeflow projects use [cert-manager to generate and rotate certificates](https://github.com/kubeflow/manifests/tree/master/common/cert-manager).\nThose certificates are used for validation and mutation webhooks across Kubeflow projects. Cert-manager\nhandles the issuance, renewal, and rotation of these certificates automatically without downtime.\n\n##### Describe how the project is following and implementing [secure software supply chain best practices](https://project.linuxfoundation.org/hubfs/CNCF_SSCP_v1.pdf)\n\n- **Automated CI/CD infrastructure:** Kubeflow projects have automated unit, integration, and\n  end-to-end tests that are integrated into the CI pipelines to ensure code stability and reduce\n  risk of introducing vulnerabilities.\n\n- **Vulnerability Scanning:** Kubeflow uses tools for vulnerability scanning like Dependabot,\n  Trivy to identify CVEs and address known CVEs in dependencies.\n\n- **Dependency management:** Kubeflow projects leverage lock files like `go.mod` and `pyproject.toml`,\n  and progressing towards Software Bill of Materials (SBOM) generation.\n\n- **Code Review Process:** Kubeflow projects’ maintainers follow a strong review process with peer\n  review and explicit approval before PRs being merged into the main branch.\n\n- **DCO Check:** Committers are required to sign and comply with the Developer Certificate of Origin\n  (DCO) to affirm the legitimacy and authorship of their contributions.\n\n- **Branch Protection:** The project enforces branch protection rules to prevent unauthorized changes,\n  enforce status checks, require pull request reviews, and control who can push to protected branches.\n\n- **Prevent Secrets in Source Code:** Proactively prevents committing secrets to the source code\n  by using tools and GitHub workflows that detect sensitive data in PRs.\n\n- **License compliance:** Kubeflow uses\n  [the FOSSA product](https://app.fossa.com/reports/bb8e2d41-254a-4af3-9044-e7f484c34dd1)\n  provided by the CNCF to scan for license compliance on a regular and ongoing basis.\n\n## Day 1 - Installation and Deployment Phase\n\n### Project Installation and Configuration\n\n#### Describe what project installation and configuration look like\n\nEach project has its [own standalone installation guide](https://www.kubeflow.org/docs/started/installing-kubeflow/#standalone-kubeflow-components).\n\nKubeflow projects are packaged by [distributions and vendors](https://www.kubeflow.org/docs/started/installing-kubeflow/#kubeflow-platform)\ninto platform products which can be used to install our tools.\n\nWe provide optional manifests to deploy all Kubeflow projects as\n[Kubeflow AI reference platform](https://github.com/kubeflow/manifests/blob/master/README.md).\n\n### Project Enablement and Rollback\n\n#### How can this project be enabled or disabled in a live cluster? Please describe any downtime required of the control plane or nodes\n\nUsers can set the replica count to 0 in the Kubeflow projects deployment. Existing AI workloads\nshould not be impacted since it won’t be reconciled by controllers.\n\nUpdating [the Kubeflow AI Reference Platform](https://github.com/kubeflow/manifests/blob/master/README.md#upgrading-and-extending).\n\nThe installation guide described [when control plane is ready](https://www.kubeflow.org/docs/components/trainer/operator-guides/installation/#installing-the-kubeflow-trainer-controller-manager).\n\n#### Describe how enabling the project changes any default behavior of the cluster or running workloads\n\nEnable projects by scaling replica count back to 1. All running AI workloads will be reconciled again\nby controllers, and they perform the appropriate updates to the CRDs.\n\nIstio, Knative, cert-manager might interfere with existing installations.\n\n#### Describe how the project tests enablement and disablement\n\nConformance program [is work in progress](https://github.com/kubeflow/kubeflow/tree/master/conformance/1.7)\nto ensure tests across all Kubeflow projects.\n\n#### How does the project clean up any resources created, including CRDs\n\nThe Kubeflow projects control plane can be deleted by cleanup the appropriate resources,\nfor example:\n\n```sh\nkubectl delete -k https://github.com/kubeflow/trainer.git/manifests/overlays/manager?ref=v2.0.0\n```\n\nThe command will cleanup all CRDs and control plane deployment. Since Kubeflow CRDs maintain\n`ownerReference` for associated resources, all resources will be removed after deleting the\nactual CRDs. For example:\n\n```sh\nkubectl delete trainjob --all --all-namespaces\n```\n\nCheck [this guide to cleanup](https://github.com/kubeflow/manifests/blob/master/README.md#upgrading-and-extending)\nthe Kubeflow AI reference platform.\n\n### Rollout, Upgrade and Rollback Planning\n\n#### How does the project intend to provide and maintain compatibility with infrastructure and orchestration management tools like Kubernetes and with what frequency\n\nKubeflow projects publish its supported Kubernetes version for every release. The supported versions\nare evaluated and upgraded on every release. We support\n[Kubernetes 1.31+ and test on 1.32+](https://github.com/kubeflow/manifests/blob/master/tests/install_KinD_create_KinD_cluster_install_kustomize.sh)\n\n#### How the project handles rollback procedures\n\nSome projects support leader election and HA to make sure that long-running workloads are complete.\nUsers can scale up or down replicas of controllers during rollback.\n\n#### How can a rollout or rollback fail? Describe any impact to already running workloads\n\nNewer revision will not be active for many reasons including insufficient cluster resources for the\nnewer spec, invalid configuration spec. Traffic will not be switched to the new unless the newer\nrevision is ready to accept traffic. Hence, the already running workloads will not be affected\nin any case if rollout fails.\n\n#### Describe any specific metrics that should inform a rollback\n\nKubeflow projects CRDs expose status that inform about activity of AI workloads. Additionally,\ncontrollers are exposed various Prometheus metrics to indicate workload status.\n\n#### Explain how upgrades and rollbacks were tested and how the upgrade->downgrade->upgrade path was tested\n\nCurrently, it’s being manually tested by users, but automated tests are work in progress.\n\n#### Explain how the project informs users of deprecations and removals of features and APIs\n\nAll API changes are backward compatible and changes are announced in the release notes and\nchangelogs. If some APIs are deprecated, newer versions of APIs are introduced with user awareness.\nKubeflow CRDs follow Kubernetes best practices for API compatibility.\n\nFor example [Kubeflow Trainer breaking changes](https://github.com/kubeflow/trainer/blob/master/CHANGELOG.md#breaking-changes).\n\n#### Explain how the project permits utilization of alpha and beta capabilities as part of a rollout\n\nAt the moment, functionality is logged explicitly if a feature is alpha or beta. We do not have\nfeature gates. Additionally, we are working on conversion webhook that helps users with updated\nAPI versions of CRDs.\n\n## Day 2 - Day-to-Day Operations Phase\n\n### Scalability/Reliability\n\n#### Describe how the project increases the size or count of existing API objects\n\nIn general, the API object count complexity is linear in the number of users and workloads. Users\ncan list deployed Kubeflow CRDs across all namespaces.\n\nFor example, to list all TrainJob from Kubeflow Trainer run:\n\n```sh\nkubectl get trainjob --all-namespaces\n```\n\nThe core controllers and resources are constant (beyond replicating specific controllers),\nsee [the full kustomize build here](https://github.com/kubeflow/manifests?tab=readme-ov-file#install-with-a-single-command).\n\n#### Describe how the project defines Service Level Objectives (SLOs) and Service Level Indicators (SLIs)\n\nKubeflow currently doesn’t provide the SLOs and SLIs, however we follow\n[the Kubernetes SLOs](https://github.com/kubernetes/community/blob/master/sig-scalability/slos/slos.md)\n\n#### Describe any operations that will increase in time covered by existing SLIs/SLOs\n\nAs above.\n\n#### Describe the increase in resource usage in any components as a result of enabling this project, to include CPU, Memory, Storage, Throughput\n\nResources requirements for Kubeflow projects [are set here](https://github.com/kubeflow/manifests/pull/3091#issuecomment-3016609243).\n\n#### Describe which conditions enabling / using this project would result in resource exhaustion of some node resources\n\nThere are some specific issues for each project, we should list some of them (e.g. pipelines\ncontroller can have open file handler issues). Since many workloads are GPU-intensive,\nKubernetes platform admins need to ensure that nodes have enough capacity to run AI workloads with\nKubeflow projects.\n\n#### Describe the load testing that has been performed on the project and the results\n\nSome intensive load testing has been performed by Kubeflow users, for example some LLM foundation\nmodels have been trained using Kubeflow Trainer across a few hundreds GPUs. At KubeCon some users\nshare their experience of running more than 10,000 GPUs with Kubeflow Training Operator.\n\n#### Describe the recommended limits of users, requests, system resources, etc. and how they were obtained\n\nUsers on the order of hundreds are known to work. Scaling beyond hundreds of users may require an\nincrease in the requests/limits replicas of some deployments, or scaling dependencies like databases.\n\n#### Describe which resilience pattern the project uses and how, including the circuit breaker pattern\n\nKubeflow uses the Kubernetes resilience pattern to manage controllers with HA. If one replica fails, another part of the control plane takes responsibility to orchestrate workloads.\n\n### Observability Requirements\n\n#### Describe the signals the project is using or producing, including logs, metrics, profiles and traces. Please include supported formats, recommended configurations and data storage\n\nKubeflow controllers expose Prometheus metrics to report workload status. Controllers also expose\nlogs and status for platform admins to ensure stability.\n\n#### Describe how the project captures audit logging\n\nPlatform admins can leverage [Kubernetes audit](https://kubernetes.io/docs/tasks/debug/debug-cluster/audit/)\nfor Kubeflow projects.\n\n#### Describe any dashboards the project uses or implements as well as any dashboard requirements\n\n[Kubeflow Dashboard requirements](https://www.kubeflow.org/docs/components/central-dash/overview/).\n\n#### Describe how the project surfaces project resource requirements for adopters to monitor cloud and infrastructure costs, e.g. FinOps That must happen on the Kubernetes namespace level\n\nUsers are recommended to use third-party tools like Kubecost to measure cloud and infrastructure\ncost of running Kubeflow projects.\n\n#### Which parameters is the project covering to ensure the health of the application/service and its workloads\n\nMost project use Kubernetes [Liveness and Readiness probes](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/).\n\nFor example [Kubeflow Trainer controller manager](https://github.com/kubeflow/trainer/blob/master/manifests/base/manager/manager.yaml#L30-L43).\n\n#### How can an operator determine if the project is in use by workloads\n\n- Check the Pods in `kubeflow-profil`e labeled namespaces.\n- Check the CRDs in user’s namespaces\n- Check the Kubeflow Dashboard resources.\n\n#### How can someone using this project know that it is working for his instance\n\n- [Kubeflow Manifests guide](https://github.com/kubeflow/manifests#installation).\n- Run the [Kubeflow manifest test suite](https://github.com/kubeflow/manifests/blob/master/.github/workflows/full_kubeflow_integration_test.yaml)\n- Run the upstream examples, for example [Kubeflow Trainer PyTorch training](https://github.com/kubeflow/trainer/blob/master/examples/pytorch/question-answering/fine-tune-distilbert.ipynb).\n\n### Dependencies\n\n#### Describe the specific running services the project depends on in the cluster\n\nMost projects depend on Cert-Manager>=v1.16, and Istio>=v1.26\n\nSpecific projects have other dependencies:\n\n- Kubeflow Pipelines: Argo Workflows>=v3.1\n- Kubeflow Trainer: JobSet>=v0.8.0\n- Kubeflow Katib: MySQL>=v8.0\n- Kubeflow Model Registry: MySQL>=v8.0\n\nFor details, please take a look at General security Talks about Kubeflow including\n[an architectural introduction](https://github.com/kubeflow/manifests#kubeflow-components-versions).\n\n#### Describe the project’s dependency lifecycle policy\n\nWe follow Kubernetes deprecation policy for supported versions. For example, we support the\n3-4 latest versions of Kubernetes to deploy Kubeflow projects.\n\n#### How does the project incorporate and consider source composition analysis as part of its development and security hygiene? Describe how this source composition analysis (SCA) is tracked\n\nVarious static and dynamic code analysis tools are enforced as described above.\n\n#### Describe how the project implements changes based on source composition analysis (SCA) and the timescale\n\nVarious static and dynamic code analysis tools are enforced as described above.\n\n### Troubleshooting\n\n#### How does this project recover if a key component or feature becomes unavailable\n\nSpecifics depend on the Kubeflow Project (KFP, Katib, etc.). Kubeflow projects are cloud and\nKubernetes native apps, so fault tolerance is strongly tied to the health of the underlying cluster.\nIn practice user workloads sometimes have a retry policy and the Kubeflow core services should\njust recover automatically.\n\nMore details are described in the previous sections.\n\n#### Describe the known failure modes\n\nEach Kubeflow project handles failure modes differently beyond native Kubernetes fault tolerance.\nMany of them are configured at the application level in user code.\n\n### Security\n\n#### How is the project executing access control\n\nAs described above each Kubeflow projects require limited RBAC to manage its CRDs\n\n#### Cloud Native Threat Modeling\n\nDescribed in the section above.\n\n#### How does the project ensure its security reporting and response team is representative of its community diversity (organizational and individual)\n\nEvery Kubeflow project follows security guidelines.\n\n- Kubeflow Spark Operator [security policy](https://github.com/kubeflow/spark-operator/blob/master/SECURITY.md).\n- Kubeflow Notebooks [security policy](https://github.com/kubeflow/notebooks/blob/master/SECURITY.md).\n- Kubeflow Trainer [security policy](https://github.com/kubeflow/trainer/blob/master/SECURITY.md).\n- Kubeflow Katib [security policy](https://github.com/kubeflow/katib/blob/master/SECURITY.md).\n- Kubeflow Model Registry [security policy](https://github.com/kubeflow/model-registry/blob/main/SECURITY.md).\n- Kubeflow Pipelines [security policy](https://github.com/kubeflow/pipelines/blob/master/SECURITY.md).\n\n#### How does the project invite and rotate security reporting team members\n\nActive project maintainers are responsible to ensure that security reports are addressed. Each\nproject has its own security reporting and disclosure policy. For projects which use GitHub’s security\ndisclosure system, access control is managed by having write access to the relevant github repository.\n"
  },
  {
    "path": "KUBEFLOW-OUTREACH-COMMITTEE.md",
    "content": "# Kubeflow Outreach Committee (KOC)\n\nThe Kubeflow Outreach Committee (KOC) is a committee dedicated to fostering growth, engagement, and community outreach for the Kubeflow project. It will focus on activities that promote Kubeflow to new and existing users, contributors, and stakeholders while building an inclusive, vibrant, and diverse community within the broader AI/ML ecosystem.\n\nThe governance of the Kubeflow Outreach Committee will evolve as the community grows, ensuring that outreach activities remain relevant and impactful.\n\n### Charter\n\n1. Promote the vision, values, and mission of the Kubeflow project in collaboration with the KSC and WG Leads.\n2. Lead efforts to grow and engage the AI/ML community, including organizing events, producing educational materials, creating and sharing content on social media, and advocating for Kubeflow across various tech communities.\n3. Help grow the community by bringing new contributors and users to Kubeflow, particularly through accessible resources and community-building initiatives.\n4. Collaborate with other committees and working groups to align outreach efforts with the broader goals of the Kubeflow project.\n5. Encourage contributions to the Kubeflow Website and Blog, including project documentation, examples, and other educational materials.\n\n### Limitations\n\nBecause the actions of the KOC may be perceived to represent the views of the wider Kubeflow project, the KSC places the following limits and requirements on the KOC.\n\n1. The KOC may not endorse, recommend, or promote any product, service, or project except that which is directly provided by Kubeflow without approval by the KSC for each specific occasion.\n2. All material published and events organized by the KOC must be exclusively under the \"Kubeflow Community\" brand, and not that of other organizations or individuals without approval by the KSC for each specific occasion.\n3. The KOC may not enter into any partnerships or create co-branded material (including with other open-source projects) without approval by the KSC for each specific occasion.\n4. The KOC may not authorize the usage of any trademarks, any such requests must be referred to the KSC.\n5. The KOC may not enter into any contracts or other legal obligations, any such requests must be referred to the KSC.\n6. The KOC must not organize any events or gatherings without approval by the KSC for each specific occasion.\n\nIn all cases, approval by the KSC refers to the normal decision process outlined in the KSC charter. \n### Committee Structure\n\n- **Chairs**: \n    - The Kubeflow Outreach Committee will be co-chaired by established Kubeflow community members, with these Chairs being responsible for guiding the committee’s work.\n    - KOC Chairs are appointed and removed by a decision of the KSC.\n    - Importantly, chairs are the only role which may participate in decision votes.\n- **Leads**: \n    - KOC Leads will help KOC Chairs execute on their outreach strategy. For example, post to Kubeflow social media accounts, review blog posts, publish YouTube videos, help with events, or other items that fall under the KOC charter. \n    - Leads of the KOC are nominated by the KOC Chairs, and confirmed by a decision of the KSC. The KOC Chairs may remove a KOC Lead at their discretion. \n    - KOC Leads must inform the KOC Chairs of any significant actions they take.\n\nMembers of the KOC, both Chairs and Leads, must adhere to the CNCF Code of Conduct. The removal of any members for violating the CNCF Code of Conduct is also at the KSC's discretion through its normal decision process. \n\n## Committee members\n\nThe KOC may have at most three (3) Chairs and five (5) Leads. Seats on the KOC are held by an individual, not by their employer.\n\n### Limitations on Company Representation\nNo more than one Chair seat may be held by employees of the same organization (or conglomerate, in the case of companies owning each other). \n\nSeparately, no more than two Lead roles may be held by employees of the same organization (or conglomerate, in the case of companies owning each other). Additionally, no more than one Lead and one Chair can be held by employees of the same organization (or conglomerate, in the case of companies owning each other). \n\nIf employers change because of job changes, acquisitions, or other events, in a way that would be in violation of the proceeding limits, sufficient members of the committee must resign their positions until the requirements are satisfied. If it is impossible to find sufficient members to resign, all employees of that organization will be removed and the vacancies will be filled using the normal process.\n\nIn the event of a question of company membership (for example evaluating independence of corporate subsidiaries) a majority of all non-involved KSC members will decide.\n\n\n### Committee Meetings\n\nThe KOC will meet regularly (at least monthly, or as needed), and these meetings will be open to the public. Specific sensitive matters, such as code of conduct violations or confidential discussions, may be handled separately.\n\nMeeting notes will be publicly available to the community, except when privacy is required for specific discussions.\n\n### Decision Process\n\nDecisions requiring a vote include:\n\n- Nominating a new KOC Lead for KSC approval\n- Removing a KOC Lead\n- Granting or removing access to any social media account or other elevated permission\n- Proposing a new event or gathering to the KSC for approval\n- Proposing a new partnership or co-branded publication to the KSC for approval\n- Any other decisions that at least half of the chairs (rounded down) present decide requires a vote\n\nDecisions are made in meetings when a quorum of the chairs are present and may pass with at least half the chairs (rounded up) supporting it.\n\nQuorum is considered reached when at least half of the chairs (rounded up) are present.\n\nChairs of the KOC may abstain from a vote. Abstaining chairs will only be considered as contributing to quorum, in the event that a vote is called in a meeting.\n\n## Committee members\n\nSeats on the Outreach Committee are held by an individual, not by their employer.\n\nThe current membership of the committee is (listed alphabetically by first name):\n\n| Name                | Organization    | GitHub                                                     |\n| ------------------- | --------------- | ---------------------------------------------------------  |\n| Stefano Fioravanzo        | Canonical | [StefanoFioravanzo](https://github.com/StefanoFioravanzo/) |\n| Valentina Rodriguez Sosa  | Red Hat   | [varodrig](https://github.com/varodrig/)                   |  \n| Tarek Abouzeid            | Telia     | [tarekabouzeid](https://github.com/tarekabouzeid/)         |\n          \n ## Lead members\n| Name                | Organization  | GitHub                                              | Role               |\n| ------------------- | ------------- | --------------------------------------------------- | ------------------ |\n| Yash Pal |     | [yashpal2104](https://github.com/yashpal2104)   | Social Media Lead   |\n\n### Getting in Touch\n\nTo engage with the Outreach Committee, you can:\n\n1. Email the committee at `outreach@kubeflow.org` for private discussions.\n2. Open an issue in the `kubeflow/community` repository and tag `@kubeflow/outreach-committee` for attention.\n\n### Changes to the Charter\n\nChanges to the KOC charter can be proposed by any community member via a GitHub PR. Amendments will be subject to approval by a standard decision of the KSC. Proposals will be available for at least one week for community comments before a vote occurs.\n"
  },
  {
    "path": "KUBEFLOW-STEERING-COMMITTEE.md",
    "content": "# Kubeflow Steering Committee\n\nThe Kubeflow Steering Committee (KSC) is the governing body of the Kubeflow project, providing decision-making and oversight pertaining to the Kubeflow project policies, sub-organizations, and financial planning, and defines the project values and structure.\n\nThe governance of Kubeflow is an open, living document, and will continue to evolve as the community and project change.\n\n### Charter\n\n1. Define, evolve, and promote the vision, values, and mission of the Kubeflow project.\n1. Define and evolve project and group governance structures and policies, including election rules, working group policies, and project roles.\n1. Steward, control access, delegate access, and establish processes regarding all Kubeflow project resources and have the final say in the disposition of those resources.\n1. Define and evolve the scope of the Kubeflow community, including acceptance of new projects into Kubeflow.\n1. Define Kubeflow trademark policy and conformance criteria.\n1. Receive and handle reports about code of conduct violations and maintain confidentiality.\n1. Act as the final escalation point and arbitrator for any disputes, issues, clarifications, or escalations within the project scope.\n\n## Committee Meetings\n\nKSC currently meets at least bi-weekly, or as-needed. Meetings are open to the public and held online, unless they pertain to sensitive or privileged matters. Examples of such matters are:\n\n- Privacy related issues\n- Private emails to the committee\n- Code of conduct violations\n- Certain Escalations\n- Disputes between members\n- Security reports\n\nMeeting notes are available to members of the kubeflow-discuss mailing list, unless community member privacy requires otherwise. Public meetings will be recorded and the recordings made available publicly.\n\nQuestions and proposals for changes to governance are posted as issues in the kubeflow/community repo, and the KSC invites your feedback there. See [Getting in touch](#getting-in-touch) for other options.\n\n## Committee Structure\n\nKSC is composed of 5 (five) members. They are elected according to [the election policy](proposals/645-kubeflow-steering-committee-election/README.md).\nSeats on the Steering Committee are held by an individual, not by their employer.\n\n### Limitations on Company Representation\n\nNo more than one (1) seats may be held by employees of the same organization (or conglomerate, in the\ncase of companies owning each other). If the results of an election result in greater than one employee\nof the same organization, the lowest vote getters in the current election from any particular\nemployer will be removed until representation on the committee is down to one.\n\nIn the staggered election schedule, if a particular organization already has one seat among the rotation\nnot affected by the election, no candidates from that organization will be selected by the election.\nIf the organization wants to change its representation in KSC, one member from that organization\nneeds to stand down from KSC, which will trigger a \"resignation\" event as explained below.\nThere is no guarantee that vacancy created will be filled by the organization's candidate.\n\nIf employers change because of job changes, acquisitions, or other events, in a way that would yield\nmore than one seat being held by employees of the same organization, sufficient members of the committee\nmust resign until only one employee of the same employer are left. If it is impossible to find\nsufficient members to resign, all employees of that organization will be removed and new special\nelections held. In the event of a question of company membership (for example evaluating independence\nof corporate subsidiaries) a majority of all non-involved Steering Committee members will decide.\n\n### Current Committee Members\n\nThe current membership of the committee is (listed alphabetically by first name):\n\n| Name                | Organization | GitHub                                                           | Term Start | Term End   |\n| ------------------- | ------------ | ---------------------------------------------------------------- | ---------- | ---------- |\n| Andrey Velichkevich | Apple        | [andreyvelich](https://github.com/andreyvelich/)                 | 02/01/2026 | 02/01/2028 |\n| Chase Christensen   | Wiz          | [chasecadet](https://github.com/chasecadet/)                     | 02/01/2026 | 02/01/2028 |\n| Francisco Arceo     | Red Hat      | [franciscojavierarceo](https://github.com/franciscojavierarceo/) | 02/01/2025 | 02/01/2027 |\n| Julius von Kohout   | DHL          | [juliusvonkohout](https://github.com/juliusvonkohout/)           | 02/01/2025 | 02/01/2027 |\n| Mathew Wicks        | NVIDIA       | [thesuperzapper](https://github.com/thesuperzapper/)             | 02/01/2026 | 02/01/2028 |\n\n### Emeritus Committee Members\n\nThe list of emeritus members that previously served on KSC:\n\n| Name         | Organization | GitHub                                             | Term Start | Term End   |\n| ------------ | ------------ | -------------------------------------------------- | ---------- | ---------- |\n| Johnu George | Nutanix      | [johnugeorge](https://github.com/johnugeorge/)     | 02/01/2024 | 02/01/2026 |\n| Josh Bottum  | Independent  | [jbottum](https://github.com/jbottum/)             | 02/01/2024 | 02/01/2025 |\n| James Wu     | Google       | [james-jwu](https://github.com/james-jwu/)         | 02/01/2024 | 02/01/2025 |\n| Yuan Tang    | Red Hat      | [terrytangyuan](https://github.com/terrytangyuan/) | 02/01/2024 | 02/01/2026 |\n\n## Ownership Transfer\n\nKSC members hold administrative ownership of Kubeflow assets. When new members of the KSC are elected,\na GitHub issue must be created to facilitate the transfer to the incoming members.\n\nGitHub issue name:\n\n```\nTransfer Ownership to KSC 2025\n```\n\nGitHub issue content:\n\n- [ ] Update Kubeflow Steering Committee document with the new members and emeritus members.\n- [ ] Archive the current Slack channel (e.g. `#archived-ksc-2024`) and create the new Slack channel (e.g. `kubeflow-steering-committee`).\n- [ ] Schedule weekly calls with the new members.\n- [ ] Update [admins for Kubeflow GitHub org](https://github.com/kubeflow/internal-acls/blob/master/github-orgs/kubeflow/org.yaml#L7).\n- [ ] Update the [`kubeflow-steering-committee` GitHub team](https://github.com/kubeflow/internal-acls/blob/master/github-orgs/kubeflow/org.yaml).\n- [ ] Update approvers for the following OWNERS files (e.g the past members should be moved to `emeritus_approvers`):\n  - `kubeflow/kubeflow` [OWNERS file](https://github.com/kubeflow/kubeflow/blob/master/OWNERS).\n  - `kubeflow/community` [OWNERS file](https://github.com/kubeflow/community/blob/master/OWNERS).\n  - `kubeflow/internal-acls` [OWNERS file](https://github.com/kubeflow/internal-acls/blob/master/OWNERS).\n  - `kubeflow/website` [OWNERS file](https://github.com/kubeflow/website/blob/master/OWNERS).\n  - `kubeflow/blog` [OWNERS file](https://github.com/kubeflow/blog/blob/master/OWNERS).\n- [ ] Kubeflow GCP projects under `kubeflow.org` organization for ACLs and DNS management.\n  - Access for `kf-admin-cluster` GKE cluster in `kubeflow-admin` GCP project for the GitHub ACLs sync.\n  - Access for `kubeflow-dns` GCP project for the DNS management.\n- [ ] Access for Kubeflow GKE cluster `kf-ci-v1` in `kubeflow-ci` GCP project (No Organization)\n      where Prow is running.\n- [ ] Kubeflow [Google Group](https://groups.google.com/g/kubeflow-discuss).\n- [ ] Update members for [KSC Google Group](https://groups.google.com/a/kubeflow.org/g/ksc).\n- [ ] Access to Kubeflow `1password` account.\n- [ ] Kubeflow social media resources.\n  - Kubeflow [LinkedIn](https://www.linkedin.com/company/kubeflow/)\n  - Kubeflow [X](https://x.com/kubeflow).\n  - Kubeflow [Bluesky](https://bsky.app/profile/kubefloworg.bsky.social).\n  - [Kubeflow Community](https://www.youtube.com/@KubeflowCommunity) YouTube channel.\n  - [Kubeflow](https://www.youtube.com/@Kubeflow) YouTube channel.\n\n## Decision process\n\nThe steering committee desires to always reach consensus.\n\n### Normal decision process\n\nDecisions requiring a vote include:\n\n- Issuing written policy\n- Amending existing written policy\n- Accepting, or removing a Kubeflow component\n- Creating, removing, or modifying a working group\n- All spending, hiring, and contracting decisions\n- Official responses to publicly raised issues\n- Any other decisions that at least half of the members (rounded down) present decide require a vote\n\nDecisions are made in meetings when a quorum of the members are present and may pass with at least half the members (rounded up) of the committee supporting it.\n\nQuorum is considered reached when at least half of the members (rounded up) are present.  \nMembers of KSC may abstain from a vote. Abstaining members will only be considered as contributing to quorum, in the event that a vote is called in a meeting.\n\n### Special decision process\n\nIssues that impacts the KSC governance requires a special decision process. Issues include:\n\n- Changes to the KSC charter\n- KSC voting rules\n- Election rules\n\nThe issue may pass with 70% of the members (rounded up) of the committee supporting it.\n\nOne organization may cast 1 vote. Votes cast by members from the same organization are equally weighted. Example:\n\n- If KSC is made up of employees from organizations A, A, B, C, D, each vote from organization A is weighted by a factor of 0.5. The total number of votes is 4, and 3 votes (70% rounded up) is required to pass a proposal. This rule is designed to remove organization A's ability to defeat a proposal that is supported by all other KSC members.\n- Similarly, if KSC is made up of employees from organizations A, A, B, B, C, the total number of votes is 3, and 2.5 votes is required to pass a proposal.\n\n### Results\n\nThe results of the decision process are recorded and made publicly available, unless they pertain to sensitive or privileged matters. The results will include:\n\n- Description of the issue\n- Names of members who supported, opposed, and abstained from the vote.\n\n## Getting in touch\n\nThere are two ways to raise issues to the steering committee for decision:\n\n1. Emailing the steering committee at `ksc@kubeflow.org`. This is a private discussion list to which all members of the committee have access.\n1. Open an issue on a kubeflow/community repository and indicate that you would like attention from the steering committee using GitHub tag `@kubeflow/kubeflow-steering-committee`.\n\n## Changes to the charter\n\nChanges to the KSC charter may be proposed via a PR on the charter itself by a Kubeflow community member. Amendments are accepted following the [Special Decision Process](#special-decision-process) detailed above.\n\nProposals and amendments to the charter are available for at least a period of one week for comments and questions before a vote will occur.\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "MAINTAINERS.md",
    "content": "# Maintainers\n\nThis document lists the maintainers under [the Kubeflow governance model](https://www.kubeflow.org/docs/about/governance/).\n\n## Kubeflow Steering Committee\n\nThe members can be found in [the Kubeflow Steering Committee charter](KUBEFLOW-STEERING-COMMITTEE.md).\n\n## Kubeflow Outreach Committee\n\nThe members can be found in [the Kubeflow Outreach Committee charter](KUBEFLOW-OUTREACH-COMMITTEE.md).\n\n## Kubeflow Working Groups\n\nThe members can be found in [the Kubeflow Working Group list](wgs.yaml).\n\n## Kubeflow Projects Approvers and Reviewers\n\nThe Kubeflow projects approvers and reviewers can be found in the corresponding OWNERS files:\n\n- [Kubeflow Katib](https://github.com/kubeflow/katib/blob/master/OWNERS)\n- [Kubeflow Manifests](https://github.com/kubeflow/manifests/blob/master/OWNERS)\n- [Kubeflow Hub](https://github.com/kubeflow/hub/blob/main/OWNERS)\n- [Kubeflow Notebooks](https://github.com/kubeflow/notebooks/blob/main/OWNERS)\n- [Kubeflow Pipelines](https://github.com/kubeflow/pipelines/blob/master/OWNERS)\n- [Kubeflow SDK](https://github.com/kubeflow/sdk/blob/main/OWNERS)\n- [Kubeflow Spark Operator](https://github.com/kubeflow/spark-operator/blob/master/OWNERS)\n- [Kubeflow Trainer](https://github.com/kubeflow/trainer/blob/master/OWNERS)\n"
  },
  {
    "path": "Makefile",
    "content": "IMAGE_NAME=golang:1.14\nexport GO111MODULE=on\nexport GOPROXY?=https://proxy.golang.org\n\ndefault: \\\n\tgenerate \\\n\nreset-docs:\n\tgit checkout HEAD -- ./wgs/wgs.yaml ./wg-*/README.md\n\ngenerate:\n\tgo run ./generator/app.go\n\ntest:\n\tgo test -v ./generator/...\n\n.PHONY: default reset-docs generate verify test\n"
  },
  {
    "path": "OWNERS",
    "content": "approvers:\n  - andreyvelich\n  - chasecadet\n  - franciscojavierarceo\n  - juliusvonkohout\n  - thesuperzapper\n\nemeritus_approvers:\n  - james-jwu\n  - jbottum\n  - johnugeorge\n  - terrytangyuan\n"
  },
  {
    "path": "OWNERS_ALIASES",
    "content": "aliases:\n  sig-feature-store-leads:\n    - kevinstumpf\n    - pyalex\n    - woop\n  sig-onprem-leads:\n    - jtfogarty\n    - mameshini\n  wg-automl-leads:\n    - andreyvelich\n    - gaocegege\n    - johnugeorge\n  wg-data-leads:\n    - ChenYi015\n    - andreyvelich\n    - franciscojavierarceo\n    - rareddy\n    - tarilabs\n  wg-deployment-leads:\n    - PatrickXYS\n    - animeshsingh\n    - mameshini\n    - vpavlin\n    - yanniszark\n  wg-manifests-leads:\n    - juliusvonkohout\n    - kimwnasptd\n  wg-ml-experience-leads:\n    - StefanoFioravanzo\n    - andreyvelich\n    - ederign\n  wg-notebooks-leads:\n    - StefanoFioravanzo\n    - elikatsis\n    - kimwnasptd\n    - thesuperzapper\n    - yanniszark\n  wg-pipelines-leads:\n    - HumairAK\n    - chensun\n    - droctothorpe\n    - james-jwu\n    - mprahl\n    - zazulam\n  wg-serving-leads:\n    - animeshsingh\n    - cliveseldon\n    - ellistarn\n    - iamlovingit\n    - rakelkar\n    - yuzisun\n  wg-training-leads:\n    - Jeffwan\n    - andreyvelich\n    - gaocegege\n    - johnugeorge\n    - tenzen-y\n    - terrytangyuan\n## BEGIN CUSTOM CONTENT\n\n## END CUSTOM CONTENT\n"
  },
  {
    "path": "README.md",
    "content": "# Kubeflow Community\n\nWelcome to Kubeflow! We're glad to have you here.\n\n## Join us in discussions, forums, and meetings\n\nVisit the\n[community page in our docs](https://www.kubeflow.org/docs/about/community/) \nto see where you can chat with the community and share your ideas.\n\n## Code of conduct\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and maintainers pledge to making participation in our project and\nour community a harassment-free experience for everyone, regardless of age, body\nsize, disability, ethnicity, gender identity and expression, level of\nexperience, education, socio-economic status, nationality, personal appearance,\nrace, religion, or sexual identity and orientation.\n\nThe Kubeflow community is guided by our [Code of\nConduct](https://github.com/kubeflow/community/blob/master/CODE_OF_CONDUCT.md),\nwhich we encourage everybody to read before participating.\n\n## Contributing\n\nThe [contributor's guide](https://www.kubeflow.org/docs/about/contributing/) \nprovides a starting point for contributing ideas and bug fixes to the Kubeflow \nproject.\n\n## Kubeflow Brand Guidelines\n\nThe [Kubeflow Brand Guidelines](https://www.linuxfoundation.org/legal/trademark-usage) are intended to provide the community guidance on how to reference the Kubeflow trademarks.\nPlease make sure your usage of Kubeflow trademarks and logos is in compliance with the guidelines. \nIf you have any questions about the guidelines or would like to get feedback on a particular use case,\nplease reach out to ksc@kubeflow.org.\n\n## About this repository\n\n* [proposals](https://github.com/kubeflow/community/tree/master/proposals): Kubeflow design proposals\n* [how-to](https://github.com/kubeflow/community/tree/master/how-to): for documenting community and other project processes\n\n## Legal\n\nThe Linux Foundation® (TLF) has registered trademarks and uses trademarks. For a list of TLF trademarks, see [Trademark Usage](https://www.linuxfoundation.org/trademark-usage/).\n"
  },
  {
    "path": "calendar/Dockerfile",
    "content": "FROM google/cloud-sdk\n\nRUN apt-get update -y && \\\n    apt-get install -y python3-distutils\n\nRUN python3.7 -m pip install \\\n\tfire==0.3.1 \\\n\tgoogle-api-python-client==1.12.4 \\\n\tgoogle-auth-oauthlib==0.4.1 \\\n\tgoogle-cloud-secret-manager==2.0.0 \\\n\toauth2client==4.1.3 \\\t\n\tpython-dateutil==2.8.1 \\\n\tpyyaml==5.3.1 \\\n\tsix==1.15.0\n\nRUN mkdir -p /opt/kubeflow\nCOPY calendar_import.py /opt/kubeflow\n"
  },
  {
    "path": "calendar/Makefile",
    "content": "GIT_VERSION:=$(shell git describe --dirty --always)\n\nPROJECT:=kf-infra-gitops\n\nIMAGE:=gcr.io/$(PROJECT)/calendar-sync:$(GIT_VERSION)\n\n# Echo commands\nSHELL = sh -xv\n\nLATESTIMAGES=latest_image.yaml\n\nCONTEXT:=kf-autobot\n\nbuild-submit:\n\tgcloud --project=$(PROJECT) builds submit --machine-type=n1-highcpu-32 --tag=$(IMAGE) ./\n\nbuild-output:\n\tyq w -i latest_image.yaml $(PROJECT).calendar.image \\\n\t  $(IMAGE)@$(shell gcloud container images describe $(IMAGE) | yq r - image_summary.digest)\n\nset-image:\n\tcd  manifests && kustomize edit set image calendar=$(shell yq r $(LATESTIMAGES) $(PROJECT).calendar.image)\n\nupdate-image: build-submit build-output set-image\n\n\ndeploy:\n\tkustomize build manifests | kubectl --context=$(CONTEXT) apply -f -\n\n# Build the image using GCB\n# We can't use skaffold due to: https://github.com/GoogleContainerTools/skaffold/issues/3468\nbuild: build-submit build-output\n"
  },
  {
    "path": "calendar/OWNERS",
    "content": "approvers:\n  - james-jwu\n  - jtfogarty\n  - nicholas-abad\n  - yuzliu\n  - zijianjoy\n  - chensun\n"
  },
  {
    "path": "calendar/README.md",
    "content": "# Kubeflow community calendar\n\nThis is location for [Kubeflow community calendar](https://calendar.google.com/calendar/embed?src=kubeflow.org_7l5vnbn8suj2se10sen81d9428@group.calendar.google.com).\nYou can find list for all meetings in [`calendar.yaml`](calendar.yaml) file.\n\n## Add new meeting to the calendar\n\nTo add new meeting to the Kubeflow calendar follow these steps:\n\n1. Add new record to [`calendar.yaml`](calendar.yaml) with meeting parameters.\n   Information about each field you can find in the file.\n\n1. After updating the file, you have to ask anyone from [OWNERS](OWNERS) file\n   to manually run [`calendar_import.py`](../scripts/calendar_import.py) to update\n   Kubeflow calendar.\n\n1. Then you should be able to see your new meeting in the calendar.\n\n## Automating calendar_import.py\n\n`calendar_import.py` is designed to run automatically using a robot account. \n\n* We deploy it on Kubernetes\n* We run [git-sync](https://github.com/kubernetes/git-sync) in a side car to synchronize the repo to a volume mount\n* When calendar_import.py detects a change it runs the sync\n\n### Where it Runs\n\n* Project: kf-infra-gitops\n* Cluster: kf-org-admin\n* Namespace: kf-autobot\n\n* Project configs [kubeflow/community-infra/tree/master/prod/namespaces/kf-infra-gitops](https://github.com/kubeflow/community-infra/tree/master/prod/namespaces/kf-infra-gitops)\n\n\n### Credentials and Permissions\n\n* The script runs using the gsuite account `autobot@kubeflow.org`\n\n  * Password and recovery codes are stored in secret manager\n    \n    * **secret**: [projects/kf-infra-gitops/secret/kf-autobot-kubeflow-org-password](https://console.cloud.google.com/security/secret-manager/secret/autobot-kubeflow-org-password?project=kf-infra-gitops)\n\n      ```\n      gcloud --project=kf-infra-gitops secrets versions access latest --secret=\"autobot-kubeflow-org-password\"\n      ```\n\n* An OAuth2 refresh token is stored in secret manager to allow the script to run without human intervention\n\n  * **secret** [projects/kf-infra-gitops/secret/autobot-at-kubeflow-oauth](https://console.cloud.google.com/security/secret-manager/secret/autobot-at-kubeflow-oauth?project=kf-infra-gitops)\n\n\n* When `calendar_import.py` runs it uses a GSA to read the OAuth2 refresh token from secret manager and then uses it\n  to authenticate as `autorobt@kubeflow.org` to the calendar API\n\n* To update the refresh token run\n\n  ```\n  python calendar_import.py mint-credentials\n  ```\n\n  * This will direct you through the OAuth2 Web Login flow\n  * You will need to login as `autobot@kubeflow.org` using the password/recovery codes stored in secret manager\n  * The script will save the refresh token to secret manager\n  * The person running the script needs to be able to modify the secret\n\n* We can't use a Google Service Account (GSA) to directly authenticate to the calendar API \n  because the calendar API requires [Domain Delegation](https://developers.google.com/identity/protocols/oauth2/service-account)\n\n  * Without domain wide configuration the GSA can add events to the calendar but not invite attendees to the meeting\n  * Domain wide configuration is restricted to the calendar scope to minimize the damage this can do\n  * Domain wide delegation makes it very difficult to reason about the blast radius as the GSA could impersonate\n    any user\n    * The only restriction is via OAuth scopes\n\n  * By impersonating `autobot@kubeflow.org` we know automation is limited to the privileges assigned to that account.   \n\n## Before running `calendar_import.py`\n\n1. You need to be calendar admin in kubeflow.org.\n\n1. You need to join the [kubeflow-discuss google group](https://groups.google.com/g/kubeflow-discuss), because\n\n    > Tip: If you have \"View members\" access to a group and create a group event, each member receives an invitation email. If you do not have  “View members” access, the group receives an invitation. Each user must accept the invite for the event to display appear on their calendar.\n\n    Note if you are using a user@kubeflow.org email account, you should join kubeflow-discuss with this account.\n\n1. You need a Google Cloud project (not sure whether it must be in kubeflow.org).\n\n1. Go to https://console.cloud.google.com/apis/credentials, create an OAuth 2.0 Client ID choosing `Desktop app` type.\n\n1. Visit the newly created OAuth 2.0 Client ID and click \"Download JSON\" button on top.\n\n1. Move the json file to `~/secrest/kf-calendar.oauth_client.json`.\n\n1. `pip install -r scripts/requirements.txt`\n"
  },
  {
    "path": "calendar/calendar.yaml",
    "content": "# This file controls the meetings on the \"Kubeflow Community Calendar\":\n# https://calendar.google.com/calendar/embed?src=kubeflow.org_7l5vnbn8suj2se10sen81d9428@group.calendar.google.com\n\n# ==================================================================================================\n# Each list element is a map with the following keys:\n#   id:          a unique id for the meeting (TIP: increment the last id by 1)\n#   name:        name of the meeting\n#   date:        date of the first meeting \"MM/dd/YYYY\"\n#   time:        start and end time of the meeting \"hour:minuteAM/PM-hour:minuteAM/PM\"\n#   timezone:    timezone in IANA Time Zone Database format (default: 'America/Los_Angeles')\n#   frequency:   how often the meeting takes place (optional)\n#   until:       last date to repeat until \"MM/dd/YYYY\" (optional)\n#   attendees:   list of attendees (see: https://developers.google.com/calendar/v3/reference/events/insert#python)\n#   video:       a zoom or Hangouts meeting link\n#   description: the description of the meeting\n#   organizer:   the github username of the meeting organizer\n# ==================================================================================================\n\n# !!!!!!!!!!!!!!! IMPORTANT !!!!!!!!!!!!!!!\n# DO NOT REMOVE recurring meetings, set their `until` date in the past, and move them under \"legacy meetings\".\n# Otherwise, the meeting will remain in the calendar forever.\n# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n####################################################################################################\n# Current meetings\n####################################################################################################\n# - id: kf032\n#   name: Kubeflow Community Call\n#   date: 04/15/2025\n#   time: 8:00AM-8:55AM\n#   frequency: bi-weekly\n#   video: https://zoom.us/j/99152427566?pwd=S0djc1FPcXkyNUdneHg3UFR3VTcyQT09\n#   attendees:\n#     - email: kubeflow-discuss@googlegroups.com\n#   description:\n#     - |\n#       Notes & agenda: https://bit.ly/kf-meeting-notes\n\n#       Join with Zoom: https://zoom.us/j/99152427566?pwd=S0djc1FPcXkyNUdneHg3UFR3VTcyQT09\n#       Meeting ID: 991 5242 7566\n#       Passcode: 645928\n\n#       Join with Phone (USA): +1 669 900 6833 or +1 646 558 8656\n#       International numbers: https://zoom.us/zoomconference?m=Os1EjlUlpb2_XUMaQ6dX1azqMK5CkfWH\n\n#       Meeting Host Link: https://zoom.us/s/99152427566\n#   organizer: autobot@kubeflow.org\n\n# - id: kf043\n#   name: Kubeflow CNCF Graduation Call\n#   date: 04/22/2025\n#   time: 8:00AM-8:55AM\n#   frequency: bi-weekly\n#   video: https://zoom.us/j/99152427566?pwd=S0djc1FPcXkyNUdneHg3UFR3VTcyQT09\n#   attendees:\n#     - email: kubeflow-discuss@googlegroups.com\n#   description:\n#     - |\n#       Notes & agenda: https://bit.ly/kf-meeting-notes\n\n#       Join with Zoom: https://zoom.us/j/99152427566?pwd=S0djc1FPcXkyNUdneHg3UFR3VTcyQT09\n#       Meeting ID: 991 5242 7566\n#       Passcode: 645928\n\n#       Join with Phone (USA): +1 669 900 6833 or +1 646 558 8656\n#       International numbers: https://zoom.us/zoomconference?m=Os1EjlUlpb2_XUMaQ6dX1azqMK5CkfWH\n\n#       Meeting Host Link: https://zoom.us/s/99152427566\n#   organizer: autobot@kubeflow.org\n\n# - id: kf026\n#   name: Kubeflow Pipelines Community Meeting (PST AM)\n#   date: 08/19/2020\n#   time: 10:00am-10:40am\n#   frequency: bi-weekly\n#   video: https://zoom.us/j/92607298595?pwd=VlKLUbiguGkbT9oKbaoDmCxrhbRop7.1\n#   attendees:\n#     - email: kubeflow-discuss@googlegroups.com\n#     - email: kubeflow-pipelines@google.com\n#   description:\n#     - |\n#       Notes & Agenda: http://bit.ly/kfp-meeting-notes\n#       Join Zoom Meeting\n#       https://zoom.us/j/92607298595?pwd=VlKLUbiguGkbT9oKbaoDmCxrhbRop7.1\n#       Meeting ID: 926 0729 8595\n#       Passcode: 876287\n#   organizer: chensun\n\n# - id: kf035\n#   name: Kubeflow Release Team Meeting (CET, US friendly)\n#   date: 05/15/2023\n#   time: 6:00PM-7:00PM\n#   timezone: Europe/Madrid\n#   frequency: bi-weekly\n#   video: https://meet.google.com/ezk-fmxo-fvu\n#   until: 06/24/2025\n#   attendees:\n#     - email: kubeflow-discuss@googlegroups.com\n#   description:\n#     - |\n#       Notes & agenda: https://bit.ly/kf-release-team-notes\n\n#       Join with Google Meet: https://meet.google.com/ezk-fmxo-fvu\n#       Time zone: Europe/Madrid\n#       Video call link: https://meet.google.com/ezk-fmxo-fvu\n#       Or dial: (ES) +34 877 99 40 20 PIN: 889 929 201#\n#       More phone numbers: https://tel.meet/ezk-fmxo-fvu?pin=9345506892998\n#   organizer: dnplas\n\n# - id: kf036\n#   name: Kubeflow Platform Meeting (Manifests + Security WG)\n#   date: 06/01/2023\n#   time: 6:00PM-7:00PM\n#   timezone: Europe/Athens\n#   frequency: bi-weekly\n#   video: https://bit.ly/kf-wg-manifests-meet\n#   attendees:\n#     - email: kubeflow-discuss@googlegroups.com\n#   description:\n#     - |\n#       Notes & Agenda: https://bit.ly/kf-wg-manifests-notes\n#       Meeting Link: https://bit.ly/kf-wg-manifests-meet\n#       Recordings: https://bit.ly/kf-wg-manifests-drive\n#   organizer: juliusvonkohout\n\n# - id: kf037\n#   name: Kubeflow Notebooks 2.0 + WG Meeting (US + EMEA)\n#   date: 06/08/2023\n#   time: 8:00AM-8:55AM\n#   frequency: weekly\n#   video: https://zoom.us/j/96967996819?pwd=aFNkWnBTVW1TWW1iellneFYrRXJPdz09\n#   attendees:\n#     - email: kubeflow-discuss@googlegroups.com\n#   description:\n#     - |\n#       Notes & Agenda: https://bit.ly/kf-notebooks-wg-notes\n\n#       Join with Zoom: https://zoom.us/j/96967996819?pwd=aFNkWnBTVW1TWW1iellneFYrRXJPdz09\n#       Meeting ID: 969 6799 6819\n#       Passcode: 326059\n\n#       Join with Phone (USA): +1 669 900 6833 or +1 646 558 8656\n#       International numbers: https://zoom.us/zoomconference?m=Os1EjlUlpb2_XUMaQ6dX1azqMK5CkfWH\n#   organizer: kimwnasptd\n\n# - id: kf041\n#   name: KF Model Registry community meeting (US/EMEA)\n#   date: 02/19/2024\n#   time: 7:00PM-8:00PM\n#   timezone: Europe/Madrid\n#   # meeting to happen after KF Release meeting (id: kf035), hence align by using same TZ\n#   frequency: bi-weekly\n#   video: https://meet.google.com/pni-ywgg-gtt\n#   attendees:\n#     - email: kubeflow-discuss@googlegroups.com\n#   description:\n#     - |\n#       Bi-weekly recurring meeting for KF Model Registry community call\n\n#       Meeting notes: https://docs.google.com/document/d/1DmMhcae081SItH19gSqBpFtPfbkr9dFhSMCgs-JKzNo/edit?usp=sharing\n#   organizer: tarilabs\n\n# - id: kf042\n#   name: Kubeflow Spark Operator Meeting\n#   date: 03/07/2025\n#   time: 8:00AM-9:00AM\n#   frequency: bi-weekly\n#   video: https://zoom.us/j/93870602975?pwd=NWFNT2xrZU03alVTTXFBTEsvdDdMQT09\n#   attendees:\n#     - email: kubeflow-discuss@googlegroups.com\n#   description:\n#     - |\n#       Monthly recurring meeting for Kubeflow Spark Operator.\n\n#       Notes & Agenda: https://docs.google.com/document/d/1AnG6ptKLBY7O6ddyNm4SVsEbfu6jiyVyN3hDDgDUnxQ/edit?usp=sharing\n\n#       Join with Zoom: https://zoom.us/j/93870602975?pwd=NWFNT2xrZU03alVTTXFBTEsvdDdMQT09\n#       Meeting ID: 938 7060 2975\n#       Passcode: 307820\n\n#       Join with Phone (USA): +1 669 900 6833 or +1 646 558 8656\n#       International numbers: https://zoom.us/zoomconference?m=Os1EjlUlpb2_XUMaQ6dX1azqMK5CkfWH\n\n#   organizer: vara-bonthu\n\n# - id: kf038\n#   name: Kubeflow AutoML and Training WG Meeting (Asia & Europe friendly)\n#   date: 09/20/2023\n#   time: 2:00PM-3:00PM\n#   timezone: Etc/UTC\n#   frequency: every-4-weeks\n#   video: https://us04web.zoom.us/j/8394435453?pwd=SHo4QXJhdHltb043NGxnMkZmU1l0UT09\n#   attendees:\n#     - email: kubeflow-discuss@googlegroups.com\n#   description:\n#     - |\n#       Notes & Agenda: https://bit.ly/2PWVCkV\n\n#       Join Zoom Meeting https://us04web.zoom.us/j/8394435453?pwd=SHo4QXJhdHltb043NGxnMkZmU1l0UT09\n#       Meeting ID: 839 443 5453\n#       Passcode: R3ScM7\n#   organizer: andreyvelich\n\n# - id: kf039\n#   name: Kubeflow AutoML and Training WG Meeting (US friendly)\n#   date: 10/04/2023\n#   time: 5:00PM-6:00PM\n#   timezone: Etc/UTC\n#   frequency: every-4-weeks\n#   video: https://us04web.zoom.us/j/8394435453?pwd=SHo4QXJhdHltb043NGxnMkZmU1l0UT09\n#   attendees:\n#     - email: kubeflow-discuss@googlegroups.com\n#   description:\n#     - |\n#       Notes & Agenda: https://bit.ly/2PWVCkV\n\n#       Join Zoom Meeting https://us04web.zoom.us/j/8394435453?pwd=SHo4QXJhdHltb043NGxnMkZmU1l0UT09\n#       Meeting ID: 839 443 5453\n#       Passcode: R3ScM7\n#   organizer: andreyvelich\n\n####################################################################################################\n# Legacy meetings\n####################################################################################################\n- id: kf001\n  name: Kubeflow Community Call (US West/APAC)\n  date: 08/11/2020\n  time: 5:30PM-6:25PM\n  frequency: bi-weekly\n  video: https://zoom.us/j/83583392870?pwd=Q3lYQlAxbVYrdVZQNlp5cktIY2JmUT09\n  until: 09/20/2022\n  attendees:\n    - email: kubeflow-discuss@googlegroups.com\n  description:\n    - |\n      Notes & agenda: https://bit.ly/kf-meeting-notes\n\n      Join with Zoom: https://zoom.us/j/83583392870?pwd=Q3lYQlAxbVYrdVZQNlp5cktIY2JmUT09\n      Meeting ID: 835 8339 2870\n      Passcode: 499845\n\n      Join with Phone (USA): +1 669 900 6833 or +1 646 558 8656\n      International numbers: https://zoom.us/zoomconference?m=Os1EjlUlpb2_XUMaQ6dX1azqMK5CkfWH\n\n      Meeting Host Link: https://zoom.us/s/83583392870\n  organizer: autobot@kubeflow.org\n\n- id: kf033\n  name: Kubeflow Community Call (Europe/APAC)\n  date: 10/04/2022\n  time: 8:00AM-8:55AM\n  timezone: Europe/London\n  frequency: bi-weekly\n  video: https://zoom.us/j/89752932714?pwd=bWRRcEY5MUM3S3U1TmY5NGZaL1ByUT09\n  until: 12/13/2022\n  attendees:\n    - email: kubeflow-discuss@googlegroups.com\n  description:\n    - |\n      Notes & agenda: https://bit.ly/kf-meeting-notes\n\n      Join with Zoom: https://zoom.us/j/89752932714?pwd=bWRRcEY5MUM3S3U1TmY5NGZaL1ByUT09\n      Meeting ID: 897 5293 2714\n      Passcode: 055458\n\n      Join with Phone (USA): +1 669 900 6833 or +1 646 558 8656\n      International numbers: https://zoom.us/zoomconference?m=Os1EjlUlpb2_XUMaQ6dX1azqMK5CkfWH\n\n      Meeting Host Link: https://zoom.us/s/89752932714\n  organizer: autobot@kubeflow.org\n\n- id: kf005\n  name: Kubeflow Product Management Working Group\n  date: 08/20/2019\n  time: 10:00am-11:00am\n  frequency: bi-weekly\n  until: 07/14/2020\n  video: https://zoom.us/j/512655157\n  description:\n    - |\n      Meeting Logs: https://bit.ly/kf-pm-meeting-notes\n  organizer: theadactyl\n\n- id: kf006\n  name: Kubeflow Outreach\n  date: 08/27/2019\n  time: 10:00am-11:00am\n  frequency: bi-weekly\n  until: 07/14/2020\n  video: https://zoom.us/j/512655157\n  description:\n    - |\n      Meeting Logs: http://bit.ly/kf-outreach-meeting-notes\n  organizer: theadactyl\n\n- id: kf007\n  name: Google OSS Hands-on Workshop B - Kubeflow (MLOPS) @ Kubecon\n  date: 11/18/2019\n  time: 1:00pm-3:00pm\n  description:\n    - |\n      Kubecon schedule link: https://sched.co/W536\n      Requires additional registration & Fee\n  organizer: jlewi\n\n- id: kf008\n  name: Enabling Kubeflow with Enterprise-Grade Auth for On-Prem Deployments - Yannis Zarkadas, Arrikto & Krishna Durai, Cisco\n  date: 11/19/2019\n  time: 11:50am-12:25pm\n  description:\n    - |\n      Room 16AB - San Diego Convention Center Mezzanine Level\n      https://sched.co/UaY4\n  organizer: jlewi\n\n- id: kf009\n  name: \"Introducing KFServing: Serverless Model Serving on Kubernetes - Ellis Bigelow, Google & Dan Sun, Bloomberg\"\n  date: 11/19/2019\n  time: 2:25pm-3:00pm\n  description:\n    - |\n      Room 15AB - San Diego Convention Center Mezzanine Level\n      https://sched.co/UaZo\n  organizer: jlewi\n\n- id: kf010\n  name: Towards Continuous Computer Vision Model Improvement with Kubeflow - Derek Hao Hu & Yanjia Li, Snap Inc.\n  date: 11/19/2019\n  time: 3:20pm-3:55pm\n  description:\n    - |\n      Room 31ABC - San Diego Convention Center Upper Level\n      https://sched.co/Uae4\n  organizer: jlewi\n\n- id: kf011\n  name: Measuring and Optimizing Kubeflow Clusters at Lyft - Konstantin Gizdarski, Lyft & Richard Liu, Google\n  date: 11/19/2019\n  time: 4:25pm-5:00pm\n  description:\n    - |\n      Room 6C - San Diego Convention Center Upper Level\n      https://sched.co/UabJ\n  organizer: jlewi\n\n- id: kf012\n  name: \"KubeFlow’s Serverless Component: 10x Faster, a 1/10 of the Effort - Orit Nissan-Messing, Iguazio\"\n  date: 11/19/2019\n  time: 4:25pm-5:00pm\n  description:\n    - |\n      Room 6F - San Diego Convention Center Upper Level\n      https://sched.co/UaaL\n  organizer: jlewi\n\n- id: kf013\n  name: Advanced Model Inferencing Leveraging KNative, Istio and Kubeflow Serving - Animesh Singh, IBM & Clive Cox, Seldon\n  date: 11/20/2019\n  time: 10:55am-11:30am\n  description:\n    - |\n      Room 17AB - San Diego Convention Center Mezzanine Level\n      https://sched.co/UaVw\n  organizer: jlewi\n\n- id: kf014\n  name: Building and Managing a Centralized Kubeflow Platform at Spotify - Keshi Dai & Ryan Clough, Spotify\n  date: 11/20/2019\n  time: 11:50am-12:25pm\n  description:\n    - |\n      Room 29ABCD - San Diego Convention Center Upper Level\n      https://sched.co/UaWi\n  organizer: jlewi\n\n- id: kf015\n  name: \"Panel: Enterprise-grade, On-prem Kubeflow in the Financial Sector - Laura Schornack, JPMorgan Chase; Jeff Fogarty, US Bank; Josh Bottum, Arrikto; & Thea Lamkin, Google\"\n  date: 11/20/2019\n  time: 2:25pm-3:00pm\n  description:\n    - |\n      Room 14AB - San Diego Convention Center Mezzanine Level\n      https://sched.co/UaYA\n  organizer: jlewi\n\n- id: kf016\n  name: \"Kubeflow: Multi-Tenant, Self-Serve, Accelerated Platform for Practitioners - Kam Kasravi, Intel & Kunming Qu, Google\"\n  date: 11/20/2019\n  time: 3:20pm-3:55pm\n  description:\n    - |\n      Room 17AB - San Diego Convention Center Mezzanine Level\n      https://sched.co/UaaI\n  organizer: jlewi\n\n- id: kf017\n  name: \"Realizing End to End Reproducible Machine Learning on Kubernetes - Suneeta Mall, Nearmap\"\n  date: 11/20/2019\n  time: 4:25pm-5:00pm\n  description:\n    - |\n      Room 16AB - San Diego Convention Center Mezzanine Level\n      https://sched.co/UacQ\n  organizer: jlewi\n\n- id: kf018\n  name: \"Tutorial: From Notebook to Kubeflow Pipelines: An End-to-End Data Science Workflow - Michelle Casbon, Google, Stefano Fioravanzo, Fondazione Bruno Kessler, & Ilias Katsakioris, Arrikto (Limited Available Seating; First-Come, First-Served Basis)\"\n  date: 11/21/2019\n  time: 2:25pm-3:55pm\n  description:\n    - |\n      Room 28ABCDE - San Diego Convention Center Upper Level\n      https://sched.co/UaaL\n  organizer: jlewi\n\n- id: kf019\n  name: \"Building a Medical AI with Kubernetes and Kubeflow - Jeremie Vallee, Babylon Health\"\n  date: 11/21/2019\n  time: 3:20pm-3:55pm\n  description:\n    - |\n      Room 11AB - San Diego Convention Center Upper Level\n      https://sched.co/UaWf\n  organizer: jlewi\n\n- id: kf020\n  name: \"KubeDirector - Deploying Complex Stateful Applications on Kubernetes - Joel Baxter & Thomas Phelan, Hewlett Packard Enterprise\"\n  date: 11/21/2019\n  time: 4:25pm-5:00pm\n  description:\n    - |\n      Ballroom Sec 20CD - San Diego Convention Center Upper Level\n      https://sched.co/UaaF\n  organizer: jlewi\n\n- id: kf021\n  name: \"GPU as a Service Over K8s: Drive Productivity and Increase Utilization - Yaron Haviv, Iguazio\"\n  date: 11/21/2019\n  time: 4:25pm-5:00pm\n  description:\n    - |\n      Room 17AB - San Diego Convention Center Mezzanine Level\n      https://sched.co/UaYt\n  organizer: jlewi\n\n- id: kf022\n  name: \"Supercharge Kubeflow Performance on GPU Clusters - Meenakshi Kaushik & Neelima Mukiri, Cisco\"\n  date: 11/21/2019\n  time: 5:20pm-5:55pm\n  description:\n    - |\n      Room 11AB - San Diego Convention Center Upper Level\n      https://sched.co/Uada\n  organizer: jlewi\n\n- id: kf023\n  name: \"Book Signing for Oreilly's Kubeflow Operations Guide\"\n  date: 11/20/2019\n  time: 10:30am-11:30am\n  description:\n    - |\n      San Diego Convention Center – Sails Pavilion – O'Reilly Booth–S25\n  organizer: jpatanooga\n\n- id: kf029\n  name: Kubeflow Feature Store SIG Meeting (US/Asia friendly)\n  date: 11/25/2020\n  time: 6:00pm-6:30pm\n  frequency: monthly\n  until: 07/01/2023\n  attendees:\n    - email: kubeflow-discuss@googlegroups.com\n  description:\n    - |\n      Notes & Agenda: https://docs.google.com/document/d/1GHi-NFHmDA2TnH1pDrs4O7OyIQdZRtKatGAdedxte4w\n      Zoom: Provided in meeting notes\n  organizer: woop\n\n- id: kf034\n  name: Kubeflow Security Team Call (US West/APAC)\n  date: 12/19/2023\n  time: 7:30AM-8:00AM\n  frequency: bi-weekly\n  video: https://us06web.zoom.us/j/87118537300?pwd=NG5ibWN0N2YxUGR5Y2NXSXRiN0FGZz09\n  until: 06/04/2024\n  attendees:\n    - email: kubeflow-discuss@googlegroups.com\n    - email: akgraner@gmail.com\n    - email: juliusvonkohout@gmail.com\n    - email: kimonas.sotirchos@canonical.com\n    - email: joshbottum@gmail.com\n  description:\n    - |\n      Notes & agenda: https://docs.google.com/document/d/1xGkg9GuO2OjvYhdONJFbSrpF66UKhtYonczttJoTv3s/edit?usp=sharing\n\n      Join with Zoom: https://us06web.zoom.us/j/87118537300?pwd=NG5ibWN0N2YxUGR5Y2NXSXRiN0FGZz09\n\n      Meeting ID: 871 1853 7300\n      Passcode: 273734\n\n      If you want to be manually added to the invite link, please reach out to Amber Graner (akgraner)\n  organizer: akgraner\n\n- id: kf025\n  name: Kubeflow Pipelines Community Meeting (PST PM)\n  date: 08/05/2020\n  time: 5:30pm-6:10pm\n  frequency: every-4-weeks\n  video: https://meet.google.com/jkr-dupp-wwm\n  until: 07/03/2024\n  attendees:\n    - email: kubeflow-discuss@googlegroups.com\n    - email: kubeflow-pipelines@google.com\n  description:\n    - |\n      Notes & Agenda: http://bit.ly/kfp-meeting-notes\n      Join at: https://meet.google.com/jkr-dupp-wwm\n  organizer: chensun\n\n- id: kf040\n  name: Kubeflow Notebooks WG Meeting (US + APAC)\n  date: 01/25/2024\n  time: 4:00PM-4:55PM\n  frequency: bi-weekly\n  video: https://zoom.us/j/95919259449?pwd=VGRNTm05VzRnZlIwN3lJRklsZmdqZz09\n  until: 09/13/2024\n  attendees:\n    - email: kubeflow-discuss@googlegroups.com\n  description:\n    - |\n      Notes & Agenda: https://bit.ly/kf-notebooks-wg-notes\n\n      Join with Zoom: https://zoom.us/j/95919259449?pwd=VGRNTm05VzRnZlIwN3lJRklsZmdqZz09\n      Meeting ID: 959 1925 9449\n      Passcode: 066005\n\n      Join with Phone (USA): +1 669 900 6833 or +1 646 558 8656\n      International numbers: https://zoom.us/zoomconference?m=Os1EjlUlpb2_XUMaQ6dX1azqMK5CkfWH\n  organizer: thesuperzapper\n"
  },
  {
    "path": "calendar/calendar_import.py",
    "content": "\"\"\"\nImports meetings in 'caldendar/calendar.yaml' to the Kubeflow Community Calendar\nFor modifications please refer to the Google Calendar Python API:\nhttps://developers.google.com/resources/api-libraries/documentation/calendar/v3/python/latest/calendar_v3.events.html#insert\n\nRequires the following packages: oauth2client, pyyaml, google-api-python-client\n\nUses a service account -- the calendar must be shared with the service account\nemail and given permission: \"Make changes to events\"\n  * Using a service account requires domain wide delegation in order to\n    add attendees to meetings\n\n\nReferences:\n  https://developers.google.com/calendar/quickstart/python\n    * Shows the web app flow\n  https://developers.google.com/calendar/auth\n\"\"\"\nfrom datetime import datetime\nfrom dateutil import parser as date_parser\nimport fire\nimport logging\nimport os\nimport subprocess\nimport time\nimport yaml\nimport googleapiclient.errors\nfrom google.oauth2 import credentials\nfrom google.api_core import exceptions as google_exceptions\nfrom googleapiclient.discovery import build\nfrom google_auth_oauthlib import flow\nfrom google.cloud import secretmanager\nfrom google.auth.transport import requests\nfrom oauth2client import service_account\nfrom pathlib import Path\nimport pickle\nimport json\n\n# The public address of the kubeflow.org calendar\nCALENDAR_ID = 'kubeflow.org_7l5vnbn8suj2se10sen81d9428@group.calendar.google.com'\n\nSCOPES = ['https://www.googleapis.com/auth/calendar.events']\n\n# The default GCP project and name of a secret in secret manager\n# containing the oauth credentials for autobot@kubeflow.org.\nDEFAULT_PROJECT = \"kf-infra-gitops\"\nDEFAULT_SECRET = \"autobot-at-kubeflow-oauth\"\n\ndef update_meeting(service, meeting):\n  date = meeting['date']\n  time_start, time_end = meeting['time'].split('-')\n  day_of_week = datetime.strptime(\"{} {}\".format(date, time_start), '%m/%d/%Y %I:%M%p').strftime('%A').upper()[0:2]\n  start_datetime = datetime.strptime(\"{} {}\".format(date, time_start), '%m/%d/%Y %I:%M%p').strftime('%Y-%m-%dT%H:%M:%S%z')\n  end_datetime = datetime.strptime(\"{} {}\".format(date, time_end), '%m/%d/%Y %I:%M%p').strftime('%Y-%m-%dT%H:%M:%S%z')\n  timezone = meeting.get(\"timezone\", \"America/Los_Angeles\")\n\n  event = {\n    'summary': meeting['name'],\n    'id': meeting['id'],\n    'location': meeting.get(\"video\"),\n    'description': meeting['description'],\n          'start': {\n              'dateTime': start_datetime,\n              'timeZone': timezone,\n              },\n            'end': {\n              'dateTime': end_datetime,\n              'timeZone': timezone,\n              },\n            'guestsCanSeeOtherGuests': 'false',\n            'reminders': {\n              'useDefault': False,\n                    'overrides': [\n                  {'method': 'popup', 'minutes': 10},\n                ],\n                },\n            \"creator\": {\n                    \"displayName\": \"Kubeflow\",\n                \"email\": \"kubeflow-discuss@googlegroups.com\",\n              },\n                  \"organizer\": {\n                \"displayName\": meeting['organizer'],\n              },\n  }\n\n\n  if meeting.get(\"frequency\"):\n    rec = 'RRULE:FREQ={};BYDAY={}'.format(meeting['frequency'].upper(), day_of_week)\n\n    if meeting['frequency'] == \"bi-weekly\":\n      rec += ';INTERVAL=2'\n      rec = rec.replace('BI-WEEKLY', 'WEEKLY')\n    elif meeting['frequency'] == \"every-4-weeks\":\n      rec += ';INTERVAL=4'\n      rec = rec.replace('EVERY-4-WEEKS', 'WEEKLY')\n    elif meeting['frequency'] == \"monthly\":\n      # In monthly meetings start date defines week number\n      # e.g. if start date is 09/09/2020 meetings are on every 2nd Wednesday\n      start_datetime = datetime.strptime(\"{} {}\".format(date, time_start), '%m/%d/%Y %I:%M%p')\n      week_number = start_datetime.isocalendar()[1] - start_datetime.replace(day=1).isocalendar()[1] + 1\n      rec = rec.replace(day_of_week, \"{}{}\".format(week_number, day_of_week))\n\n    if meeting.get(\"until\"):\n      until_day = date_parser.parse(meeting.get(\"until\"))\n      until_time = date_parser.parse(end_datetime)\n      until = datetime.combine(until_day.date(), until_time.time())\n      # TODO(jlewi): Do we need to include a time zone correction?\n      rec += \";UNTIL=\" + until.strftime(\"%Y%m%dT%H%M%SZ\")\n    event[\"recurrence\"] = [rec]\n\n  if meeting.get(\"attendees\"):\n    event[\"attendees\"] = meeting[\"attendees\"]\n\n  try:\n    event = service.events().insert(calendarId=CALENDAR_ID, body=event).execute()\n    logging.info(\"Created Event: {}\".format(meeting['name'][:100]))\n    logging.info(event.get('htmlLink'))\n  except googleapiclient.errors.HttpError as e:\n    content = json.loads(e.content)\n\n    if (content.get(\"error\", {}).get(\"code\") ==\n        requests.requests.codes.CONFLICT):\n      # It already exists so issue an update instead\n      event = service.events().update(calendarId=CALENDAR_ID, eventId=meeting['id'],\n                                      body=event).execute()\n      logging.info(\"Updated Event: {}\".format(meeting['name'][:100]))\n      logging.info(event.get('htmlLink'))\n    else:\n      logging.error(\"Exception occurred trying to insert event:\\n%s\",\n                    content)\n  except Exception as e:\n    logging.error(\"Error occurred creating the event: \", e)\n\ndef get_user_credentials(oauth_client_secret=None,\n                         credentials_file=None):\n  \"\"\"Obtain user credentials through the web flow.\n\n  oauth_client_secret: Path to the json file containing an OAuth client id\n        for an OAuth application to use the Calendar API. Only required if\n        not using a service account\n\n  credentials_file: Where to save the credentials\n\n  credentials_secret:\n  \"\"\"\n  home = str(Path.home())\n  config_dir = os.path.join(home, \".config\", \"kubeflow\", \"calendar_import\")\n  if not os.path.exists(config_dir):\n    os.makedirs(config_dir)\n\n  # File to store credentials\n  # Only used with the personal login flow.\n  if not credentials_file:\n    credentials_file = os.path.join(config_dir, \"credentials.json\")\n\n  # TODO(jlewi): Don't hardcode this\n  if not oauth_client_secret:\n    raise ValueError(\"An oauth_client_secret is required when using end user \"\n                     \"credentials\")\n  creds = None\n\n  # The file token.pickle stores the user's access and refresh tokens, and is\n  # created automatically when the authorization flow completes for the first\n  # time.\n  if os.path.exists(credentials_file):\n    creds = credentials.Credentials.from_authorized_user_file(credentials_file)\n\n  # If there are no (valid) credentials available, let the user log in.\n  if not creds:\n    web_flow = flow.InstalledAppFlow.from_client_secrets_file(oauth_client_secret,\n                                                              SCOPES)\n    creds = web_flow.run_local_server(port=0)\n\n    # Save the credentials for the next run\n    with open(credentials_file, 'w') as token:\n      token.write(creds.to_json())\n\n  if creds.expired and creds.refresh_token:\n    creds.refresh(requests.Request())\n\n  return creds\n\ndef _get_default_config():\n  this_file = __file__\n  repo_root = os.path.abspath(os.path.join(os.path.dirname(this_file), \"..\"))\n  config = os.path.join(repo_root, \"calendar/calendar.yaml\")\n  return config\n\ndef create_secret(client, project, secret):\n  \"\"\"\n  Create a new secret with the given name. A secret is a logical wrapper\n  around a collection of secret versions. Secret versions hold the actual\n  secret material.\n  \"\"\"\n\n\n  # Build the resource name of the parent project.\n  parent = f\"projects/{project}\"\n\n  # Create the secret.\n  try:\n    response = client.create_secret(\n        request={\n            \"parent\": parent,\n              \"secret_id\": secret,\n              \"secret\": {\"replication\": {\"automatic\": {}}},\n          }\n      )\n  except google_exceptions.AlreadyExists:\n    logging.info(\"Secret already exists\")\n    return\n\n  # Print the new secret name.\n  logging.info(\"Created secret: {response.name}\")\n\ndef load_secret(client, project, secret):\n  path = client.secret_path(project, secret)\n\n  name = f\"{path}/versions/latest\"\n  logging.info(f\"Fetching secret {name}\")\n  # Access the secret version.\n  response = client.access_secret_version(request={\"name\": name})\n\n  # Print the secret payload.\n  #\n  # WARNING: Do not print the secret in a production environment - this\n  # snippet is showing how to access the secret material.\n  payload = response.payload.data.decode(\"UTF-8\")\n  return payload\n\ndef sync_calendar(config, creds):\n  service = build('calendar', 'v3', credentials=creds)\n\n  logging.info(\"Loading calendar data from %s\", config)\n  with open(config) as cal:\n    meetings = yaml.safe_load(cal)\n\n    for meeting in meetings:\n      try:\n        update_meeting(service, meeting)\n      except Exception as e:\n        logging.error(\"Could not update meeting %s; Error:\\n%s\",\n                      meeting.get(\"id\"), e)\n        continue\n\n\nclass CalendarUpdater:\n  \"\"\"Class to update the calendar\"\"\"\n\n  @staticmethod\n  def sync(config=None, oauth_client_secret=None):\n    \"\"\"Sync the events in the YAML file to the calendar\n\n    Args:\n      config: Path to the YAML file containing the calendar data.\n      oauth_client_secret: Path to the json file containing an OAuth client id\n        for an OAuth application to use the Calendar API. Only required if\n        not using a service account\n    \"\"\"\n    # Since we are using the Google calendar API which isn't a Google Cloud API\n    # we can't use Google Cloud Platform Default Application credentials.\n    # There are two modes we want to support\n    # 1. Running locally using a personal account\n    # 2. Running in a cluster using a service account\n    # TODO(jlewi): Can we use Workload Identity with the calendar API or do\n    # we have to use a service account\n    creds = None\n\n    if config is None:\n      config = _get_default_config()\n      logging.info(\"config file not set resorting to default default\")\n\n    if os.environ.get(\"GOOGLE_APPLICATION_CREDENTIALS\"):\n      logging.info(\"GOOGLE_APPLICATION_CREDENTIALS is set using service \"\n                   \"account\")\n      # TODO(jlewi): How do we obtain credentials with a service account?\n      SERVICE_ACCOUNT_FILE = os.environ.get('GOOGLE_APPLICATION_CREDENTIALS')\n      creds = service_account.ServiceAccountCredentials.from_json_keyfile_name(\n        SERVICE_ACCOUNT_FILE, SCOPES)\n\n      creds = creds.create_delegated(\"autobot@kubeflow.org\")\n    else:\n      creds = get_user_credentials(oauth_client_secret=oauth_client_secret)\n\n    sync_calendar(config, creds)\n\n  @staticmethod\n  def periodic_sync(config=None, project=DEFAULT_PROJECT,\n                    secret=DEFAULT_SECRET, period_seconds=15):\n    \"\"\"Run the sync periodically at the desired interval.\n\n    The sync only runs when the commit changes\n\n    Args:\n      config: Path to the YAML file containing the calendar config\n      project: The GCP project containing the secret containing OAuth\n        credentials for the bot account to run as\n      secret: The name of the secret in GCP secret manager\n      period_seconds: How frequently to check for changes to the file.\n        This should be pretty frequent since the sync only runs when changes\n        are detected.\n    \"\"\"\n    last_tag = None\n\n    if not config:\n      logging.info(\"Using default config file\")\n      config = _get_default_config()\n\n    logging.info(\"Config: %s\", config)\n    git_dir = os.path.dirname(config)\n\n    client = secretmanager.SecretManagerServiceClient()\n\n    secret_contents = load_secret(client, project, secret)\n    creds_json = json.loads(secret_contents)\n    creds = credentials.Credentials.from_authorized_user_info(creds_json)\n\n    while True:\n      # This is a bit of a hack. When relying on a side car (e.g. git-sync)\n      # to synchronize the config the file may not be available when the\n      # script first runs because the git sync hasn't completed yet.\n      if not os.path.exists(config):\n        logging.error(\"Config %s doesn't exist\")\n        time.sleep(period_seconds)\n        continue\n\n      latest = subprocess.check_output([\"git\", \"describe\", \"--dirty\",\n                                        \"--always\"], cwd=git_dir)\n      latest = latest.strip()\n\n      logging.info(\"Current tag=%s; last run=%s\", latest, last_tag)\n\n      if latest != last_tag:\n        logging.info(\"Running sync\")\n        sync_calendar(config, creds)\n      else:\n        logging.info(\"No changes; not syncing\")\n\n      last_tag = latest\n      time.sleep(period_seconds)\n\n  @staticmethod\n  def mint_credentials(project, secret, oauth_client_secret):\n    \"\"\"Mint credentials for a particular user:\n\n    The purpose of this command is to persist OAuth credentials for a\n    desktop app to a file:\n    https://developers.google.com/identity/protocols/oauth2/native-app\n\n    The purpose of this is to allow impersonating a bot account for\n    the purpose of automation.\n\n    Args:\n      project: GCP project to store the secret in\n      secret: The id of a secret in GCP secret manager to save the secret\n        to.\n      oauth_client_secret: Path to the json file containing an OAuth client id\n        for an OAuth application to use the Calendar API. Only required if\n        not using a service account\n    \"\"\"\n\n    # Create the Secret Manager client.\n    client = secretmanager.SecretManagerServiceClient()\n\n    create_secret(client, project, secret)\n\n    # Build the resource name of the parent secret.\n    parent = client.secret_path(project, secret)\n\n    # Go through the webflow\n    web_flow = flow.InstalledAppFlow.from_client_secrets_file(oauth_client_secret,\n                                                                SCOPES)\n    creds = web_flow.run_local_server(port=0)\n\n    # Convert the string payload into a bytes. This step can be omitted if you\n    # pass in bytes instead of a str for the payload argument.\n    payload = creds.to_json().encode(\"UTF-8\")\n\n    # Add the secret version.\n    response = client.add_secret_version(\n        request={\"parent\": parent, \"payload\": {\"data\": payload}}\n      )\n\n    # Print the new secret version name.\n    logging.info(\"Added secret version: {}\".format(response.name))\n\nif __name__ == \"__main__\":\n  logging.basicConfig(level=logging.INFO,\n                      format=('%(levelname)s|%(asctime)s'\n                                '|%(pathname)s|%(lineno)d| %(message)s'),\n                        datefmt='%Y-%m-%dT%H:%M:%S',\n                      )\n  logging.getLogger().setLevel(logging.INFO)\n  fire.Fire(CalendarUpdater)\n\n"
  },
  {
    "path": "calendar/latest_image.yaml",
    "content": "image: hello\nkf-infra-gitops:\n  calendar:\n    image: gcr.io/kf-infra-gitops/calendar-sync:2b76aca-dirty@sha256:49b7b067a354d6cdb898707eeb2a258405ce0e64e17b8b76f440a6d0b80defc2\n"
  },
  {
    "path": "calendar/manifests/deployment.yaml",
    "content": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: calendar-sync\n  labels:\n    app: calendar-sync\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: calendar-sync\n  template:\n    metadata:\n      labels:\n        app: calendar-sync\n    spec:\n      containers:\n      - name: calendar-sync\n        image: calendar\n        command:\n          - python3.7\n          - /opt/kubeflow/calendar_import.py\n          - periodic-sync\n          - --config=/data/community.git/calendar/calendar.yaml\n        volumeMounts:\n        - name: data\n          mountPath: /data\n      - name: sync\n        image: k8s.gcr.io/git-sync:v3.1.6\n        args:\n        - --repo=https://github.com/kubeflow/community.git\n        - --branch=master\n        - --root=/data\n        # In seconds\n        - --wait=30\n        volumeMounts:\n        - name: data\n          mountPath: /data\n      serviceAccount: kf-autobot\n      volumes:\n        - name: data\n          emptyDir: {}"
  },
  {
    "path": "calendar/manifests/kustomization.yaml",
    "content": "apiVersion: kustomize.config.k8s.io/v1beta1\nkind: Kustomization\nnamespace: kf-autobot\nresources:\n- deployment.yaml\n- service-account.yaml\nimages:\n- digest: sha256:49b7b067a354d6cdb898707eeb2a258405ce0e64e17b8b76f440a6d0b80defc2\n  name: calendar\n  newName: gcr.io/kf-infra-gitops/calendar-sync:2b76aca-dirty\n"
  },
  {
    "path": "calendar/manifests/service-account.yaml",
    "content": "apiVersion: v1\nkind: ServiceAccount\nmetadata:\n  annotations:    \n    iam.gke.io/gcp-service-account: kf-autobot@kf-infra-gitops.iam.gserviceaccount.com  \n  name: kf-autobot\n"
  },
  {
    "path": "dco-signoff-hook/README.md",
    "content": "# Signing off commits\n\nTo automatically sign off on every commit, copy the [prepare-commit-msg](prepare-commit-msg) file to the `.git/hooks` directory in your repo or if you already have such a hook, merge the contents into your existing hook.\nYou can also configure it globally (for every repo on your machine) by copying the [prepare-commit-msg](prepare-commit-msg) file to the `${HOME}/.git-template/hooks` directory.\n\nYou can also sign off your contributions manually by doing ONE of the following:\n* Use `git commit -s ...` with each commit to add the sign-off or\n* Manually add a `Signed-off-by: Your Name <your.email@example.com>` to each commit message; please note that Name and Email of sign-off must match the commit's Author, in other words the `user.name` and `user.email` of the git configuration used when creating the commit. Using `git commit -s ...` does this automatically.\n\nThe email address must match your primary GitHub email. You do NOT need cryptographic (e.g. gpg) signing.\n* Use `git commit -s --amend ...` to add a sign-off to the latest commit or\n* Use `git rebase HEAD~N --signoff` to sign-off on the last `N` commits, if you forgot.\n\n*Note*: Some projects will provide specific configuration to ensure all commits are signed-off. Please check the project's documentation for more details."
  },
  {
    "path": "dco-signoff-hook/prepare-commit-msg",
    "content": "#!/bin/sh\n\nNAME=$(git config user.name)\nEMAIL=$(git config user.email)\n\nif [ -z \"$NAME\" ]; then\n    echo \"empty git config user.name\"\n    exit 1\nfi\n\nif [ -z \"$EMAIL\" ]; then\n    echo \"empty git config user.email\"\n    exit 1\nfi\n\ngit interpret-trailers --if-exists doNothing --trailer \\\n    \"Signed-off-by: $NAME <$EMAIL>\" \\\n    --in-place \"$1\""
  },
  {
    "path": "devstats/Dockerfile.devstats",
    "content": "# Dockerfile for devstats\n# Based on https://github.com/cncf/devstats/blob/master/INSTALL_UBUNTU17.md\nFROM golang:1.11.5\n\nRUN apt-get update -y && \\\n\tapt-get install -y apt-transport-https \\\n\tgit psmisc jsonlint yamllint gcc\n\nRUN mkdir -p /go/src \n\nENV GOPATH /go\n\nRUN cd ${GOPATH}/src && \\\n\tgit clone https://github.com/cncf/devstats.git devstats\n\nRUN go get -u github.com/golang/lint/golint && \\\n  go get golang.org/x/tools/cmd/goimports\n\nRUN go get github.com/jgautheron/goconst/cmd/goconst && \\\n\tgo get github.com/jgautheron/usedexports\n\nRUN go get github.com/kisielk/errcheck && \\\n\tgo get github.com/lib/pq\n\nRUN go get golang.org/x/text/transform && \\\n\tgo get golang.org/x/text/unicode/norm\n\nRUN go get github.com/google/go-github/github && \\\n\tgo get golang.org/x/oauth2\n\nRUN go get gopkg.in/yaml.v2 && \\\n\tgo get github.com/mattn/go-sqlite3\n\n\n# Add /go/src/devstats to the path so that all the binaries will be on the path.\n# This is needed by the devstats binary.\nENV PATH $PATH:/etc/gha2db:/${GOPATH}/bin\n\n# Commit c905db8106d057f70a694ecd1276c9e32290152f is master on 02/14.\n# Recommendation from Devstats folks was to us master.\nRUN cd ${GOPATH}/src/devstats && \\\n\tgit checkout c905db8106d057f70a694ecd1276c9e32290152f && \\\n\tmake\n\nRUN  cd ${GOPATH}/src/devstats && \\\n\t make install\n\n# TODO(jlewi): Do we need to fix the userid of postgres so we can run as that user?\n\n# Create postgres user and group with fixed userid and groupid so we can run container as that user.\n# \nRUN groupadd -g 1000 postgres && \\\n\tuseradd -r -u 1000 -g postgres --create-home --shell=/bin/bash postgres\n\n# Install postgress\n#\n# This is based on \n# https://github.com/docker-library/postgres/blob/master\nRUN apt-get install -y postgresql-client postgresql sudo gosu\n\n# Install emacs\nRUN apt-get install -y emacs\n\n# Install Ruby this is used by gitdm\n# We set the environment because of this issue\n# https://stackoverflow.com/questions/17031651/invalid-byte-sequence-in-us-ascii-argument-error-when-i-run-rake-dbseed-in-ra\nENV RUBYOPT \"-KU -E utf-8:utf-8\"\n\nRUN apt-get install -y ruby gem\nRUN gem install bundle pry octokit\n\n# Keep this in sync with whatever package apt installs; maybe we should pin apt-install?\nENV PG_MAJOR 9.6\n\n# make the sample config easier to munge (and \"correct by default\")\nRUN mv -v \"/usr/share/postgresql/$PG_MAJOR/postgresql.conf.sample\" /usr/share/postgresql/ \\\n\t&& ln -sv ../postgresql.conf.sample \"/usr/share/postgresql/$PG_MAJOR/\" \\\n\t&& sed -ri \"s!^#?(listen_addresses)\\s*=\\s*\\S+.*!\\1 = '*'!\" /usr/share/postgresql/postgresql.conf.sample\n\nRUN mkdir -p /var/run/postgresql && chown -R postgres:postgres /var/run/postgresql && chmod 2777 /var/run/postgresql\n\nENV PATH $PATH:/usr/lib/postgresql/$PG_MAJOR/bin\n\nRUN mkdir -p /home/\nCOPY postgre-docker-entrypoint.sh /usr/local/bin/\nRUN chmod a+x /usr/local/bin/postgre-docker-entrypoint.sh\n\n# Add postgres to the sudoers group because some of the devstats scripts require it\nRUN adduser postgres sudo\n\nRUN addgroup --gid 472 grafana && \\\n\tadduser -u 472 --gid=472 grafana\n\n# Workaround for https://github.com/cncf/devstats/issues/166\n# devstats code assumes projects.yaml will be et /etc/gha2db\n# but we will mount it from NFS\n# \nRUN rm -rf /etc/gha2db && \\\n\tln -sf /mount/data/src/git_kubeflow-community/devstats/config /etc/gha2db\n\n# TODO(jlewi): Per the instructions for devstats we should increase the number of default connections for postgres\n"
  },
  {
    "path": "devstats/Makefile",
    "content": "# Copyright 2017 The Kubernetes Authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# Requirements:\n#   https://github.com/mattrobenolt/jinja2-cli\n#   pip install jinja2-clie\n# Update the Airflow deployment\n\nIMG = gcr.io/devstats/devstats\n\nTAG := $(shell date +v%Y%m%d)-$(shell git describe --tags --always --dirty)-$(shell git diff | sha256sum | cut -c -6)\nDIR := ${CURDIR}\n\npush: build\n\tgcloud docker -- push $(IMG):latest\n\tgcloud docker -- push $(IMG):$(TAG)\n\n# To build without the cache set the environment variable\n# export DOCKER_BUILD_OPTS=--no-cache\nbuild:\n\tdocker build ${DOCKER_BUILD_OPTS} -f Dockerfile.devstats -t $(IMG):$(TAG) .\n\tdocker tag $(IMG):$(TAG) $(IMG):latest\n\t@echo Built $(IMG):$(TAG) and tagged with latest\n"
  },
  {
    "path": "devstats/README.md",
    "content": "# Devstats\n\nInstructions for deploying [cncf/devstats](https://github.com/cncf/devstats).\n\n\n## Deploying on Kubernetes\n\nWe currently use\n\n```\nPROJECT=devstats\nZONE=us-east1-d\nCLUSTER=devstats\nNAMESPACE=devstats\n```\n\n### Setup the project with deployment manager.\n\n```\ngcloud deployment-manager --project=${PROJECT} deployments create devstats --config=devstats.yaml\ngcloud deployment-manager --project=${PROJECT} deployments create devstats-gcfs --config=gcfs.yaml\n```\n\nThis will create the resources\n\n\t* GKE Cluster\n\t* Static IP address for ingress\n\t* A Cloud NFS file store\n\n```\ngcloud --project=${PROJECT} compute addresses list\n```\n\n* We use Cloud NFS to store grafana and postgres data. This way its easily accessible on multiple pods\n\n### Create PVC for NVC\n\n* Modify `k8s_manifests/nfs_pvc.yaml`\n\n  * Set IP address to ip address of cloud NFS\n  * Set namespace to namespace of your components\n\n### Setup DNS\n\nTODO(https://github.com/kubeflow/community/issues/228): Change host to devstats.kubeflow.org.\nWe used the name devstats2.kubeflow.org while we setup a new instance running in the devstats project.\nOnce its up and working we should turn down the existing instance in kubeflow-ci and change the hostname.\n\n```\nIPADDRESS=<..address from above...>\nHOST=devstats\ngcloud --project=kubeflow-dns dns record-sets transaction start -z=kubefloworg\ngcloud --project=kubeflow-dns dns record-sets transaction add -z=kubefloworg \\\n    --name=\"${HOST}.kubeflow.org.\" \\\n   --type=A \\\n   --ttl=300 \"${IPADDRESS}\"\ngcloud --project=kubeflow-dns dns record-sets transaction execute -z=kubefloworg\n```\n\n\t* This uses domain kubeflow.org which is managed by Cloud DNS zone kubefloworg\n\n\n### Create a secret with a GITHUB OAuth token\n\nThis token is only for rate quota so it doesn't need access to any services.\n\nkubectl create secret generic github-oauth --from-literal=github-oauth=${GITHUB_TOKEN}\n\n\n### Create a secret for the Grafana admin password\n\n```\nGRAFANA_PASSWORD=`< /dev/urandom tr -dc A-Za-z0-9 | head -c14; echo`\nkubectl create secret generic grafana --from-literal=admin_password=${GRAFANA_PASSWORD}\n```\n\nIf you need the password to login\n\n```\nkubectl get secrets grafana -o json | jq -r .data.admin_password | base64 -d  && echo\n```\n\n** Important** Once created the password is stored in the database so changing \nthe secret won't change the password.\n\n\n### Setup Devstats config Files\n\nSee config/README.md\n\n### Create the K8s resources\n\n```\nkubectl apply -f k8s_manifest/nfs_pvc.yaml\nkubectl apply -f k8s_manifest/cli_home_pvc.yaml\nks apply devstats2 -c cert-manager\nks apply devstats2 -c devstats\n```\n\n* The postgres and grafana containers will likely be crashing because we need to \n  setup the disk.\n\n### How it all works\n\n* Postgres has 3 databases\n \n  * **postgres** This database is created by `postgre-docker-entrypoint`\n    * I don't think this is used by devstats.\n    * psql needs to connect to a database even when psql is being used to create/delete other\n      databases. So we connect to the postgres database when executing commands to create/delete\n      the **kubeflow** and **devstats** dbs.\n  * **kubeflow** This is the DB where devstats data is actually stored.\n  * **devstats** This DB is used for logs    \n\n* List of environment variables used by [devstats code](https://github.com/cncf/devstats/blob/23ee872591a77f25c8832e0e46e0289cf22697a0/context.go)\n\n\n* Grafana dashboards and datasources are defined in YAML files\n\n  * These are stored in source control and checked out into a NFS volume.\n\n### Setup Postgres\n\n1. We use the `devstats-cli-0` container to modify the NFS share; start a shell inside the container\n   using the `kubectl` command below and then proceed to run the other steps in the container.\n\n\n\t```\n\tkubectl exec -ti devstatsdb-0 -c postgres /bin/bash\n\t```\n\n\n1. Checkout the various source repositories onto NFS to get the scripts\n\n   ```\n   mkdir /mount/data/src\n   cd /mount/data/src\n   git clone https://github.com/kubeflow/community.git git_kubeflow-community\n   ```\n\n1. Run the following script to set permissions on the NFS share\n\n   ```\n   /mount/data/src/git_kubeflow-community/devstats/scripts/setup_nfs.sh\n   ```\n\n1. Set up the home directory for postgres in the CLI container\n\n   ```\n   /mount/data/src/git_kubeflow-community/devstats/scripts/setup_postgres_home.sh\n   ```\n\n   * We use a home diretory backed by PD in CLI so we need to do a onetime setup\n\n1. Copy some binaries referenced by the scripts\n\n   ```\n   cd /mount/data/src/git_kubeflow-community/devstats/config\n   ./copy_devstats_binaries.sh \n   ```\n\n   * TODO(jlewi): We should file a bug to get the devstats scripts updated to just assume the binaries are on the\n     path.  I hink if we don't set GHA2DB_LOCAL it will use path.\n\n1. Verify you can connect to the default database\n\n   ```\n   psql -U postgres -d postgres -c \"SELECT * FROM pg_catalog.pg_tables order by tablename;\"\n   ```\n\n   * The database postgres is created by the startup script `postgre-docker-entrypoint.sh`\n   * The kubeflow database won't exist at this point which is why we test using hte default database\n\n1. Verify you can connect to the database and run queries.\n\n   ```\n   sudo -E -u postgres psql -d postgres -U postgres -c \"SELECT * FROM pg_catalog.pg_tables order by tablename;\"\n   ```\n\n   * If this doesn't work there might be a problem with the environment variables telling psql how to connect to the DB\n   * If this doesn't succeed most of the commands run by the scripts won't work.\n\n1. Initialize the devstats DB\n\n   ```\n   cd /mount/data/src/git_kubeflow-community/devstats/config\n   PGUSER=postgres PGDATABASE=postgres PG_PASS=${PG_PASS} PG_PASS_RO=${PG_PASS} PG_PASS_TEAM=kubeflow ./devel/init_database.sh\n   ```\n\n   * We need to override `PGUSER` and `PGDATABASE` when running this command because the `kubeflow` database\n     doesn't exist it. \n\n   * So we connect to postgres using the database `postgres` and user `postgres` created by the `postgres` container\n     on startup\n\n   * Verify the devstats database exists\n\n   \t ```\n   \t psql -U postgres -d postgres -c 'select * from pg_database;'\n   \t ```\n   \n   \t * devstats should be one of the listed databases.\n\n   * The devststats db is used for logs\n\n1. Create the Kubeflow database\n\n   ```\n   cd /mount/data/src/git_kubeflow-community/devstats/config\n   PGUSER=postgres PGDATABASE=postgres PROJ=kubeflow PROJDB=kubeflow PDB=1 TSDB=1 SKIPTEMP=1 ./devel/create_databases.sh\n   ```\n\n   * This step creates the database table and backfills it based on the start date in `projects.yaml`\n\n   * Since the kubeflow database doesn't exist yet we override `PGUSER` and `PGDATABASE` so that we \n     connect to the postgres database in order to create the kubeflow database\n\n   * Verify the **kubeflow** database exists\n\n     ```\n     psql -c 'select * from pg_database;'\n     ```\n\n     * **kubeflow** should be one of the databases\n\n   * Check the `gha_*` tables were created\n\n\n   \t ```\n   \t psql -d kubeflow -c \"SELECT * FROM pg_catalog.pg_tables order by tablename;\"\n\t schemaname     |               tablename               | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity \n\t --------------------+---------------------------------------+------------+------------+------------+----------+-------------+-------------\n \t public             | gha_actors                            | gha_admin  |            | t          | f        | f           | f\n \t public             | gha_actors_affiliations               | gha_admin  |            | t          | f        | f           | f\n \t public             | gha_actors_emails                     | gha_admin  |            | t          | f        | f           | f\n \t public             | gha_actors_names                      | gha_admin  |            | t          | f        | f           | f\n   \t ...\n   \t ```\n\n   * Note that the tables containing metrics won't be created until later when we run `devstats`.\n\n   * `import_affs.sh` crashes see https://github.com/cncf/devstats/issues/166\n\n   \t  * This step is related to importing user affiliations to generate company statistics\n   \t  * For now I just skipped it and ran the next step manually\n\n   \t  \t```\n   \t  \tGHA2DB_PROJECT=kubeflow PG_DB=kubeflow GHA2DB_LOCAL=1 ./vars \n   \t  \t```\n\n1. Create tags\n\n   ```\n   cd /mount/data/src/git_kubeflow-community/devstats/config\n   ./shared/tags.sh \n   ```\n\n1. Run the following to create the annotations\n\n   ```\n   cd /mount/data/src/git_kubeflow-community/devstats/config\n   ./annotations\n   ```\n\n   * This creates the time range selectors based on tags. So we need to run it along with previous step periodically\n     to get new tags.\n\n   * Verify that the table `tquick_ranges` now exists.\n\n     ```\n     psql -d kubeflow -c \"SELECT * FROM pg_catalog.pg_tables where tablename='tquick_ranges';\"\n     ```\n\n   * TODO(https://github.com/kubeflow/community/issues/230): Do we need to run this regularly?\n\n1. Run devstats \n\n   ```\n   cd /mount/data/src/git_kubeflow-community/devstats/config\n   devstats\n   ```\n\n   * This should synchronize data and I think create metric and timeseries tables\n   * It checks out source for repos so it can get tags\n   * It should also be run as a cron job.\n\n1. Known issues\n\n    * Looks like the relation `tcountries` wasn't created and some tables use this see https://github.com/kubeflow/community/issues/231\n\n## Grafana\n\nTo access the admin ui port-forward to port `3000` and use the default admin account\nwhich has username admin and password admin.\n\n```\nkubectl port-forward service/grafana 3000:3000\n```\n\nDashboards are defined in `devstats/grafana/dashboards/kubeflow/`\n\nThese are checked out from git onto the NFS volume mounted on all pods.\n\n\n### Troublehoosting Postgres\n\nCheck the databases using the following query\n\n```\npsql -c 'select * from pg_database;'\n```\n\n  * Do the DB's **devstats** and **kubeflow** exist?\n\n\n\nCheck Kubeflow tables exist\n\n```\npsql -c -d kubeflow -c  'SELECT * FROM pg_catalog.pg_tables order by tablename;'\n```\n\n\t* There should be a bunch of tables named `gha_*`\n\n\n### Loading data into the db\n\nUse the gha2db program that is part of cncf/devstats\n\nIf we run devstats regularly that will syncronize the latest changes.\nTo backfill some range you can run gha2b directly\n\n```\n./gha2db 2018-04-16 00 2018-04-17 00 kubeflow\n```\n\n\t* Change the date range to the range you want\n\nYou can run this on K8s as a job by doing\n\n```\nks param set backfill end_day 2018-01-01\nks param set backfill end_day 2018-04-17\nks apply default -c backfill\n```\n\n### Sync data\n\nWe use a cron job to run `devstats` regularly to pull in the latest data.\n\n```\nks apply ${ENV} -c syncronjob\n```\n\n### Example running a query\n\nAfter the backfill job completes you can run the following to verify data is in the SQL DB.\n\nRun in the devstats-cli-0 container\n\n```\n./runq util_sql/top_unknowns.sql {{ago}} '1 month' {{lim}} 10\n\n```\n\n## Miscellaneous\n\nUsing psql from the CLI container (although you can also run from the postgre container and then you don't have to do a remote connect)\n\n```\npsql -h ${PG_HOST} -U gha_admin -d gha\n```\n\nList tables\n\n```\nSELECT * FROM pg_catalog.pg_tables order by tablename;\n```\n\nA simple query to look at events\n\n```\nselect created_at, type from gha_events;\n```\n\n### Company Affilitations\n\nWe need to create a json file containing company affiliations for each user in order to get company stats.\n\nThese instructions are based on [sync.md](https://github.com/cncf/gitdm/blob/master/SYNC.md)\n\nAll commands should be run in the `devstats-cli-0` pod.\n\n1. Make sure the repos are checked out on NFS\n\n   * Directory is set in ${GHA2DB_REPOS_DIR}\n\n   * To manually update\n\n     ```\n     cd /mount/data/src/git_kubeflow-community/devstats/config\n\t GHA2DB_PROCESS_REPOS=1 ./get_repos\n     ```\n\n1. Generate a list of all repos and the command to generate the repo log\n\n   ```\n    cd /mount/data/src/git_kubeflow-community/devstats/config\n\tGHA2DB_PROCESS_REPOS=1 GHA2DB_EXTERNAL_INFO=1 ./get_repos\n   ```\n\n1. Update `/mount/data/src/git_cncf-gitdm/src/repos.txt` with the list of repos outputted by the previous command\n\n1. Setup gitdm\n\n   ```\n   cd /mount/data/src/git_cncf-gitdm/src\n   gem install pry\n   gem install octokit\n   ```\n\n   * TODO(jlewi): Should we do gem install in the image?\n\n1. Generate a git log.\n\n   ```\n   ./all_repos_log.sh /mount/data/devstats_repos/kubeflow/*\n   ```\n\n   * This should create a git log `/mount/data/src/git_cncf-gitdm/src/git.log`\n\n 1. To run cncf/gitdm on a generated git.log file do: \n\n    ```\n \tcd /mount/data/src/git_cncf-gitdm/src \n \t./cncfdm.py -i git.log -r \"^vendor/|/vendor/|^Godeps/\" -R -n -b ./ -t -z -d -D -A -U -u -o all.txt -x all.csv -a all_affs.csv > all.out \t\n    ```\n 1. Generate actors\n\n    ```\n    cd /mount/data/src/git_kubeflow-community/devstats\n    bash -x ./scripts/generate_actors.sh /mount/data/src/git_cncf-gitdm/src/actors.txt \n    ```\n\n    * TODO(jlewi): Should we store the actors file someplace other than git_cncf-gitdm? We currently put it there\n      because all the gitdm scripts make assumptions about the locations of the files\n\n \n 1. Create a secret containing \n\n    * A GitHub OAuth API token\n      * Can use the same token as before\n    * A GitHub OAuth client secret\n    * A GitHub client id\n\n    ```\n    kubectl create secret generic gitdm-github-oauth --from-literal=oauth=${GITDM_GITHUB_OAUTH_TOKEN} --from-literal=client_id=${GITDM_GITHUB_CLIENT_ID}  --from-literal=client_secret=${GITDM_GITHUB_CLIENT_SECRET}\n    ```\n 1. Pull GitHub users\n\n    ```   \n    cd /mount/data/src/git_cncf-gitdm/src/\n    echo [] > github_users.json\n    ruby ghusers.rb\n\t./encode_emails.rb github_users.json temp\n\tmv temp github_users.json\n    ```\n    * Ensure repos.txt doesn't include any repos that shouldn't count as contributors\n    \t* In particular ensure [kubeflow/homebrew-cask](https://github.com/kubeflow/homebrew-cask) and \n    \t  [homebrew-core](https://github.com/kubeflow/homebrew-core) are excluded\n    * TODO(jlewi): I'm not sure we want to zero out github_users.json on each successive run\n    \t* I think we only wanted to do that once because github_users.json was originally for the CNCF projects\n    \t* ghusers.rb has to make API requests for each user so if we don't cache results we hit API limits.\n    * ghusers.rb appears to crash if github_users.json doesn't exist and doesn't have at least a json list\n \t* See also these [instructions](https://github.com/cncf/gitdm/blob/master/README.md#github-users-can-be-pulled-using-octokit-gihub-api)\n\n \t* The processing of repos.txt is very brittle\n \t  * I had to modify the code ala Ran into https://github.com/cncf/gitdm/issues/104 \n \t  * I also had to remove the quotes around the repo names\n\n \t* TODO(jlewi): Could we just use ghusesrs.sh? The reason I didn't was because it didn't seem to handle things\n \t  like the file github_users.json not existing\n\n 1.  Update github_users.json\n\n     ```\n     cd /mount/data/src/git_cncf-gitdm/src/\n     ./enhance_json.sh\n     ```\n\n     * Output is\n       ```\n\n\t  Found 1, not found 420 from 425 additional actors\n      Processed 425 users, enchanced: 306, not found in CSV: 4, unknowns not found in JSON: 13614.\n      ```\n\n     * I think this script sets affiliation field in `github_users.json`\n\n     * Check in `github_users.json` to `kubeflow/community/devststats/data`\n       * This makes it easy for people to check their affiliation.\n\n1. See https://github.com/cncf/gitdm/blob/master/SYNC.md; there are a whole bunhch of steps that seem like they might be semi optional\n\n   * TODO(jlewi): We should create a script or something to run all the steps.\n\n1. Import affiliations\n\n   ```\n   cd /mount/data/src/git_kubeflow-community/devstats/config\n   ./import_affs /mount/data/src/git_cncf-gitdm/src/github_users.json \n\t2019-02-20 21:40:30 kubeflow/import_affs: Processing non-empty: 566 names, 707 emails lists and 116 affiliations lists\n\t2019-02-20 21:40:30 kubeflow/import_affs: Empty/Not found: names: 142, emails: 0, affiliations: 612\n\t2019-02-20 21:40:32 kubeflow/import_affs: 566 non-empty names, added actors: 0, updated actors: 314\n\t2019-02-20 21:40:34 kubeflow/import_affs: 707 emails lists, added actors: 0, all emails: 735\n\t2019-02-20 21:40:35 kubeflow/import_affs: 566 names lists, all names: 566\n\t2019-02-20 21:40:35 kubeflow/import_affs: 116 affiliations, unique: 112, non-unique: 4, all user-company connections: 153\n\t2019-02-20 21:40:35 kubeflow/import_affs: Processed 64 companies\n\t2019-02-20 21:40:36 kubeflow/import_affs: Processed 153 affiliations, added 0 actors, cache hit: 153, miss: 0\n\t2019-02-20 21:40:36 kubeflow/import_affs: Non-acquired companies: checked all regexp: 64, cache hit: 153\n\t2019-02-20 21:40:36 kubeflow/import_affs: Time: 5.621040111s\n   ```\n\n   * Verify there are companies\n\n     ```\n     psql -c \"select * from gha_companies;\"\n     ```\n\n1. If affiliations are changed on a deployed setup, run\n\n    ```\n    cd /mount/data/src/git_kubeflow-community/devstats/config\n    ./shared/reinit.sh\n    ```\n    This will regenerate the precomputed data for grafana without altering GH tables data.    \n\n1. TODO: Do we need to run devstats to compute various metrics?\n\n### Deleting the Kubeflow database\n\nIf you want to delete the kubeflow database in the devstats cli pod run\n\n```\npsql -d postgres -c \"drop database kubeflow\"\n```\n\n* We need to set -d and change to a database other than kubeflow because we can't delete the current database\n\n"
  },
  {
    "path": "devstats/config/INSTALL_UBUNTU18.md",
    "content": "# devstats installation on Ubuntu\n\nPrerequisites:\n- Ubuntu 18.04.\n- [golang](https://golang.org).\n    - `apt-get update`\n    - `sudo locale-gen \"en_US.UTF-8\"`\n    - Add to `/etc/environment`:\n    ```\n    LC_ALL=en_US.UTF-8\n    LANG=en_US.UTF-8\n    ```\n    - Check if language/locale settings are ok: `perl -e exit`.\n    - `apt install golang` - this installs Go 1.10.1.\n    - `apt install git psmisc jsonlint yamllint gcc`\n    - `mkdir /data; mkdir /data/dev`\n1. Configure Go:\n    - For example add to `~/.bash_profile`:\n     ```\n     GOPATH=/data/dev; export GOPATH\n     PATH=$PATH:$GOPATH/bin; export PATH\n     ```\n    - Logout and login again.\n    - [golint](https://github.com/golang/lint): `go get -u github.com/golang/lint/golint`\n    - [goimports](https://godoc.org/golang.org/x/tools/cmd/goimports): `go get -u golang.org/x/tools/cmd/goimports`\n    - [goconst](https://github.com/jgautheron/goconst): `go get -u github.com/jgautheron/goconst/cmd/goconst`\n    - [usedexports](https://github.com/jgautheron/usedexports): `go get -u github.com/jgautheron/usedexports`\n    - [errcheck](https://github.com/kisielk/errcheck): `go get -u github.com/kisielk/errcheck`\n    - If you want to use ElasticSearch output: [elastic](https://github.com/olivere/elastic): `go get -u github.com/olivere/elastic`.\n2. Go to `$GOPATH/src/` and clone devstats there:\n    - `git clone https://github.com/cncf/devstats.git`, cd `devstats`\n    - Set reuse TCP connections: `./cron/net_tcp_config.sh`\n4. Go to devstats directory, so you are in `~/dev/go/src/devstats` directory and compile binaries:\n    - `make`\n5. If compiled sucessfully then execute test coverage that doesn't need databases:\n    - `make test`\n    - Tests should pass.\n6. Install binaries & metrics:\n    - `sudo make install` or `make install` as root.\n7. Install Postgres database ([link](https://gist.github.com/sgnl/609557ebacd3378f3b72)):\n    - `apt install postgresql`.\n    - `devstats` repo directory must be available for postgres user. `chmod -R ugo+r /data/`.\n    - `sudo -i -u postgres`, `psql` and as root `sudo -u postgres psql` to test installation.\n    - Postgres only allows local connections by default so it is secure, we don't need to disable external connections:\n    - Config file is: `/etc/postgresql/10/main/pg_hba.conf`, instructions to enable external connections (not recommended): `http://www.thegeekstuff.com/2014/02/enable-remote-postgresql-connection/?utm_source=tuicool`\n    - Set bigger maximum number of connections, at least 4x number of your CPU cores or more: `/etc/postgresql/10/main/postgresql.conf`. Default is 100. `max_connections = 300`.\n    - You can also set `shared_buffers = ...` to something like 25% of your RAM. This is optional.\n    - `service postgresql restart`\n    - `swapoff -a` and remove any swap from `/etc/fstab`.\n8. Clone `devstats-example`. It demonstrates DevStats setup for a `github.com/homebrew` org.\n    - `git clone https://github.com/cncf/devstats-example.git`, cd `devstats`\n    - See `SETUP_OTHER_PROJECT.md` to see how to enable DevStats on your own project.\n9. Install Grafana.\n    - Go to: `https://grafana.com/grafana/download`. Prefer newest nightly build for your arch.\n    - `wget https://s3-us-west-2.amazonaws.com/grafana-releases/master/grafana_5.x.x_amd64.deb`.\n    - `sudo dpkg -i grafana_5.x.x_amd64.deb`\n    - `service grafana-server stop` - stop default Grafana, we only need it as a source of configuration, binaries etc.\n10. Run automatic deploy\n    - `PG_PASS=... PG_PASS_RO=... PG_PASS_TEAM=... ./deploy.sh`.\n    - You can also take a look at DevStats' `ADDING_NEW_PROJECT.md` file for more info about setting up new projects.\n    - You should end up with Grafana running on port 3001 on your server's IP: `http://X.Y.Z.V:3001`.\n    - This deployment uses `147.75.105.130:3001`.\n11. Configure Grafana\n    - Login as \"admin/admin\" to `http://X.Y.Z.V:3001`, change password to something more secure.\n    - Choose \"Add data source\" or Configuration -> data sources, then add PostgreSQL DB with those settings:\n    - Name \"psql\", Type \"PostgreSQL\", host \"127.0.0.1:5432\", database \"your_project\" (`homebrew` in this case), user \"ro_user\" (this is the select-only user for psql), password you used for `PG_PASS_RO`, ssl-mode \"disabled\".\n    - Run `devel/put_all_charts.sh`, then go to Home -> Manage: select \"Dashboards\" dashboard, and click star icon to make it favorite.\n    - Go to Configuration -> Preferences, change Organization name to \"Your project\" - this will allow anonymous access, change \"Home dashboard\" to \"Dashboards\".\n    - Go to User -> Preferences and and set Home dashboard to \"Dashboards\" (you can only choose from favorites).\n    - Sign out and ten remove `/login` part from the redirected URL. You should be able to access dashboards as an anonymous user.\n    - If all is fine, cleanup local Grafana DB copies: `Run `devel/put_all_charts_cleanup.sh`.\n    - If you have modified dashboards on the Grafana UI, download them as JSONs: `./devel/get_all_sqlite_jsons.sh`.\n    - cp devstats.sh $GOPATH/bin/\n    - You can use `crontab` file as an example of enabling hourly cron sync: `crontab -e`\n"
  },
  {
    "path": "devstats/config/README.md",
    "content": "A fork of https://github.com/cncf/devstats-example\n\n* This directory contains the config files for Kubeflow\n* It is based on https://github.com/cncf/devstats-example and then modified\n\t* There are probably still references that need to be udpated\n* Key files\n\n  * **projects.yaml** - Defines the project\n  * **grafana/dashboards** - Dashboards and grafana config\n\n## Here's how we created this\n\n1. We follow [Setup other project](https://github.com/cncf/devstats-example/blob/master/SETUP_OTHER_PROJECT.md)\n\n1. We copied it to this directory\n\n1. Copy over dashaboards\n\n   * I used the `knative` dashboards in cncf/devstats at commit 3c419a61ad130c80c7f1b7a5058eb0fd792b4201 (current devstats master)\n     rather than the homebrew ones in devstats-example\n\n     * The latter seemed outdated see https://github.com/cncf/devstats-example/issues/7\n     * I picked knative because I think it was added fairly recently and probably isn't doing special things like kubernetes\n\n   * Run the following script to update the dashboards\n\n     ```\n     ${GIT_KUBEFLOW_COMMUNITY}/devstats/modify_dashboards.sh ${GIT_DEVSTATS_EXAMPLE_FORK}/grafana/dashboards/kubeflow\n     ```\n\n1. Run `the following script to add the -E command to sudo commands\n   \n   ```\n   ./scripts/modify_devstats_scripts.sh ./config/devel/\n   ```\n1. Copy over metrics from cncf/devstats\n\n   * We don't use cncf/devstats-examples because it has fewer metrics\n\n   * Copy `cncf/devstats/metrics/shared` to `metrics/shared`\n   * Copy `cncf/devstats/metrics/knative` to `metrics/kubeflow`\n\n   \t * Modify metrics/kubeflow to replace references to `knative` with `kubeflow`\n\n1. Copy scripts/homebrew to scripts/kubeflow\n\n   * Update repo_groups.sql\n\n1. Copy the K8s dashboards https://github.com/cncf/devstats/tree/master/grafana/dashboards/kubernetes\n   to `ks-app/components/grafana/dashboards/`\n\n1. Run ` modify_dashboards.sh` to update all references to knative to kubeflow\n\n1. Modified projects.yaml to define a Kubeflow project"
  },
  {
    "path": "devstats/config/SETUP_OTHER_PROJECT.md",
    "content": "# Setup you own project\n\nThis example deployment uses Homebrew project. To run DevStats on the other project do:\n\n- In all steps: note that you have a lower-case project name `homebrew` and full name `Homebrew` (for example used as Grafana Org name etc).\n- Update `grafana.sh`, vim: `s/homebrew/your_project/g`.\n- Update `projects.yaml` to contain your new project data.\n- Update `devel/deploy_all.sh` search for `omebrew` and replace with your project. \n- Update `devel/get_all_sqlite_jsons.sh`, `devel/put_all_charts.sh`, `devel/add_single_metric_all.sh`, `devel/create_psql_user.sh`.\n- Update `crontab`, change DB backup name from `homebrew` to `your_project` and uncomment if you need automatic backups.\n- Rename `homebrew` folder to `your_project` and update `your_project/psql.sh`.\n- Rename `grafana/img/homebrew*` to `grafana/img/your_project*` (provide your own SVG and PNG).\n- Rename `grafana/homebrew` to `grafana/your_project` and update files in this directory.\n- Rename `grafana/dashboards/homebrew` to `grafana/dashboards/your_project` and update files in this directory.\n- Rename `metrics/homebrew` to `metrics/your_project` and update `metrics/your_project/vars.yaml`.\n- Rename `scripts/homebrew` to `scripts/your_project` and update `repo_groups.sql` in this directory.\n"
  },
  {
    "path": "devstats/config/copy_devstats_binaries.sh",
    "content": "#!/bin/bash\nbinaries=\"structure runq gha2db calc_metric gha2db_sync import_affs annotations tags webhook devstats get_repos merge_dbs replacer vars ghapi2db columns hide_data website_data sync_issues devstats_api_server gha2es sqlitedb\"\nfor f in $binaries\ndo\n  cp $GOPATH/bin/$f ./ || exit 1\ndone\necho \"DevStats binaries copied.\"\n"
  },
  {
    "path": "devstats/config/cron/net_tcp_config.sh",
    "content": "#!/bin/bash\n/sbin/sysctl net.ipv4.tcp_tw_reuse=1\n"
  },
  {
    "path": "devstats/config/crontab",
    "content": "7 * * * * PATH=$PATH:/data/dev/bin net_tcp_config.sh\n8 * * * * PATH=$PATH:/data/dev/bin DEVSTATS_DIR=\"/data/dev/src/devstats-example\" PG_PASS=... devstats.sh 2>> /tmp/devstats.err 1>> /tmp/devstats.log\n#45 3 * * * PATH=$PATH:/data/dev/bin cron_db_backup.sh homebrew 2>> /tmp/backup.err 1>> /tmp/backup.log\n"
  },
  {
    "path": "devstats/config/deploy.sh",
    "content": "#!/bin/bash\nmkdir /var/www 2>/dev/null\nmkdir /var/www/html 2>/dev/null\n./copy_devstats_binaries.sh || exit 1\ncp cron/net_tcp_config.sh devel/sync_lock.sh devel/sync_unlock.sh $GOPATH/bin/ || exit 2\nINIT=1 EXTERNAL=1 GHA2DB_GHAPISKIP=1 SKIPTEMP=1 ./devel/deploy_all.sh || exit 3\necho 'Deploy succeeded'\n"
  },
  {
    "path": "devstats/config/devel/add_single_metric.sh",
    "content": "#!/bin/bash\nif [ -z \"${PG_DB}\" ]\nthen\n  echo \"You need to set PG_DB environment variable to run this script\"\n  exit 1\nfi\nfunction finish {\n    sync_unlock.sh\n}\nif [ -z \"$TRAP\" ]\nthen\n  sync_lock.sh || exit -1\n  trap finish EXIT\n  export TRAP=1\nfi\nGHA2DB_CMDDEBUG=1 GHA2DB_RESETTSDB=1 GHA2DB_METRICS_YAML=devel/test_metrics.yaml GHA2DB_TAGS_YAML=devel/test_tags.yaml GHA2DB_LOCAL=1 ./gha2db_sync\n"
  },
  {
    "path": "devstats/config/devel/add_single_metric_all.sh",
    "content": "#!/bin/bash\nif [ -z \"${PG_PASS}\" ]\nthen\n  echo \"You need to set PG_PASS environment variable to run this script\"\n  exit 1\nfi\nfunction finish {\n    sync_unlock.sh\n}\nif [ -z \"$TRAP\" ]\nthen\n  sync_lock.sh || exit -1\n  trap finish EXIT\n  export TRAP=1\nfi\nif [ -z \"$ONLY\" ]\nthen\n  all=\"kubeflow\"\nelse\n  all=$ONLY\nfi\nfor proj in $all\ndo\n  db=$proj\n  GHA2DB_PROJECT=$proj PG_DB=$db ./devel/add_single_metric.sh || exit 2\ndone\n\necho 'OK'\n"
  },
  {
    "path": "devstats/config/devel/create_databases.sh",
    "content": "#!/bin/bash\n# PDB=1 (will generate Postgres DB)\n# TSDB=1 (will generate TS DB)\n# PDROP=1 (will drop & create Postgres DB)\n# GET=1 (will use Postgres DB backup from $HOST_SRC)\nlim=70\nset -x -o pipefail\nif [ -z \"$PG_PASS\" ]\nthen\n  echo \"$0: You need to set PG_PASS environment variable to run this script\"\n  exit 1\nfi\nif ( [ -z \"$PROJ\" ] || [ -z \"$PROJDB\" ] )\nthen\n  echo \"$0: You need to set PROJ, PROJDB environment variables to run this script\"\n  exit 2\nfi\nfunction finish {\n    rm -rf \"$PROJDB.dump\" >/dev/null 2>&1\n    sync_unlock.sh\n}\nif [ -z \"$TRAP\" ]\nthen\n  sync_lock.sh || exit -1\n  trap finish EXIT\n  export TRAP=1\nfi\nif [ ! -z \"$PDB\" ]\nthen\n  exists=`sudo -E -u postgres psql -tAc \"select 1 from pg_database WHERE datname = '$PROJDB'\"` || exit 3\n  if ( [ ! -z \"$PDROP\" ] && [ \"$exists\" = \"1\" ] )\n  then\n    echo \"dropping postgres database $PROJDB\"\n    sudo -E -u postgres psql -c \"select pg_terminate_backend(pid) from pg_stat_activity where datname = '$PROJDB'\" || exit 4\n    sudo -E -u postgres psql -c \"drop database $PROJDB\" || exit 5\n  fi\n  exists=`sudo -E -u postgres psql -tAc \"select 1 from pg_database WHERE datname = '$PROJDB'\"` || exit 6\n  if [ ! \"$exists\" = \"1\" ]\n  then\n    echo \"creating postgres database $PROJDB\"\n    sudo -E -u postgres psql -c \"create database $PROJDB\" || exit 7\n    sudo -E -u postgres psql -c \"grant all privileges on database \\\"$PROJDB\\\" to gha_admin\" || exit 8\n    sudo -E -u postgres psql \"$PROJDB\" -c \"create extension if not exists pgcrypto\" || exit 23\n    if [ ! -z \"$GET\" ]\n    then\n      echo \"attempt to fetch postgres database $PROJDB from backup\"\n      wget \"https://$HOST_SRC/$PROJDB.dump\" || exit 9\n      sudo -E -u postgres pg_restore -d \"$PROJDB\" \"$PROJDB.dump\" || exit 10\n      rm -f \"$PROJDB.dump\" || exit 11\n      echo 'dropping and recreating postgres variables'\n      sudo -E -u postgres psql \"$PROJDB\" -c \"delete from gha_vars\" || exit 12\n      GHA2DB_PROJECT=\"$PROJ\" PG_DB=\"$PROJDB\" GHA2DB_LOCAL=1 ./vars || exit 13\n      GOT=1\n    else\n      echo \"generating postgres database $PROJDB\"\n      GHA2DB_MGETC=y ./$PROJ/psql.sh || exit 14\n      ./devel/ro_user_grants.sh \"$PROJDB\" || exit 15\n      ./devel/psql_user_grants.sh \"devstats_team\" \"$PROJDB\" || exit 16\n      dbcreated=1\n      cron_db_backup.sh \"$PROJDB\" || exit 17\n    fi\n  else\n    echo \"postgres database $PROJDB already exists\"\n  fi\nelse\n  echo \"postgres database $PROJDB generation skipped\"\nfi\nif [ ! -z \"$TSDB\" ]\nthen\n  exists=`sudo -E -u postgres psql -tAc \"select 1 from pg_database WHERE datname = '$PROJDB'\"` || exit 3\n  if [ ! \"$exists\" = \"1\" ]\n  then\n    echo \"$0: '$PROJDB' must exist to initialize TSDB\"\n    exit 21\n  fi\n  exists=`sudo -E -u postgres psql \"$PROJDB\" -tAc \"select to_regclass('sevents_h')\"` || exit 22\n  if [ \"$exists\" = \"sevents_h\" ]\n  then\n    echo \"time series data already exists in $PROJDB\"\n  else\n    echo \"generating TSDB database $PROJDB\"\n    if [ -f \"./$proj/reinit.sh\" ]\n    then\n      ./$PROJ/reinit.sh || exit 18\n    else\n      GHA2DB_PROJECT=$PROJ PG_DB=$PROJDB ./shared/reinit.sh || exit 19\n    fi\n    REINIT=1\n  fi\n  if [ ! -z \"$GOT\" ]\n  then\n    GHA2DB_PROJECT=\"$PROJ\" PG_DB=\"$PROJDB\" ./gha2db_sync || exit 20\n  fi\n  if [ ! -z \"$REINIT\" ]\n  then\n    cron_db_backup.sh \"$PROJDB\" || exit 24\n  fi\nelse\n  echo \"TS database $PROJDB generation skipped\"\nfi\necho \"$0: $PROJ finished\"\n"
  },
  {
    "path": "devstats/config/devel/create_grafana.sh",
    "content": "#!/bin/bash\n# GGET=1 (Get grafana.db from the $HOST_SRC server)\n# STOP=1 (Stops running grafana-server instance)\n# RM=1 (only with STOP, get rid of all grafana data before proceeding)\n# IMPJSONS=1 (will import all jsons defined for given project using sqlitedb tool), if used with GGET - it will first fetch from server and then import\n# EXTERNAL=1 (will expose Grafana to outside world: will bind to 0.0.0.0 instead of 127.0.0.1, useful when no Apache proxy + SSL is enabled)\nset -o pipefail\nif ( [ -z \"$PG_PASS\" ] || [ -z \"$PORT\" ] || [ -z \"$GA\" ] || [ -z \"$ICON\" ] || [ -z \"$ORGNAME\" ] || [ -z \"$PROJ\" ] || [ -z \"$PROJDB\" ] || [ -z \"$GRAFSUFF\" ] )\nthen\n  echo \"$0: You need to set PG_PASS, PROJ, PROJDB, PORT, GA, ICON, ORGNAME, GRAFSUFF environment variable to run this script\"\n  exit 1\nfi\nfunction finish {\n    sync_unlock.sh\n}\nif [ -z \"$TRAP\" ]\nthen\n  sync_lock.sh || exit -1\n  trap finish EXIT\n  export TRAP=1\nfi\n\nhost=`hostname`\nif [ \"$GA\" = \"-\" ]\nthen\n  ga=\";\"\nelse\n  ga=\"google_analytics_ua_id = $GA\"\nfi\n\nif [ ! -z \"$EXTERNAL\" ]\nthen\n  bind=\"0.0.0.0\"\nelse\n  bind=\"127.0.0.1\"\nfi\n\nif [ -z \"$ARTWORK\" ]\nthen\n  ARTWORK=\"$HOME/dev/cncf/artwork\"\nfi\n\npid=`ps -axu | grep grafana-server | grep $GRAFSUFF | awk '{print $2}'`\nif [ ! -z \"$STOP\" ]\nthen\n  echo \"stopping $PROJ grafana server instance\"\n  if [ ! -z \"$pid\" ]\n  then\n    echo \"stopping pid $pid\"\n    kill $pid\n  else\n    echo \"grafana-server $PROJ not running\"\n  fi\n  if [ ! -z \"$RM\" ]\n  then\n    echo \"shreding $PROJ grafana\"\n    rm -rf \"/usr/share/grafana.$GRAFSUFF/\" 2>/dev/null\n    rm -rf \"/var/lib/grafana.$GRAFSUFF/\" 2>/dev/null\n    rm -rf \"/etc/grafana.$GRAFSUFF/\" 2>/dev/null\n  fi\nfi\n\npid=`ps -axu | grep grafana-server | grep $GRAFSUFF | awk '{print $2}'`\nif [ ! -z \"$pid\" ]\nthen\n  echo \"$PROJ grafana-server is running, exiting\"\n  exit 0\nfi\n\nif [ ! -d \"$GRAF_USRSHARE.$GRAFSUFF/\" ]\nthen\n  echo \"copying /usr/share/grafana.$GRAFSUFF/\"\n  cp -R \"$GRAF_USRSHARE\" \"/usr/share/grafana.$GRAFSUFF/\" || exit 3\n  if [ ! \"$ICON\" = \"-\" ]\n  then\n    wd=`pwd`\n    cd \"$ARTWORK\" || exit 4\n    git pull || exit 5\n    cd $wd || exit 6\n    icontype=`./devel/get_icon_type.sh \"$PROJ\"` || exit 7\n    cp \"$ARTWORK/$ICON/icon/$icontype/$ICON-icon-$icontype.svg\" \"/usr/share/grafana.$GRAFSUFF/public/img/grafana_icon.svg\" || exit 8\n    cp \"$ARTWORK/$ICON/icon/$icontype/$ICON-icon-$icontype.svg\" \"/usr/share/grafana.$GRAFSUFF/public/img/grafana_com_auth_icon.svg\" || exit 9\n    cp \"$ARTWORK/$ICON/icon/$icontype/$ICON-icon-$icontype.svg\" \"/usr/share/grafana.$GRAFSUFF/public/img/grafana_net_logo.svg\" || exit 10\n    cp \"$ARTWORK/$ICON/icon/$icontype/$ICON-icon-$icontype.svg\" \"/usr/share/grafana.$GRAFSUFF/public/img/grafana_mask_icon.svg\" || exit 11\n    convert \"$ARTWORK/$ICON/icon/$icontype/$ICON-icon-$icontype.png\" -resize 80x80 \"/var/www/html/img/$PROJ-icon-color.png\" || exit 12\n    cp \"$ARTWORK/$ICON/icon/$icontype/$ICON-icon-$icontype.svg\" \"/var/www/html/img/$PROJ-icon-color.svg\" || exit 13\n    if [ ! -f \"grafana/img/$GRAFSUFF.svg\" ]\n    then\n      cp \"$ARTWORK/$ICON/icon/$icontype/$ICON-icon-$icontype.svg\" \"grafana/img/$GRAFSUFF.svg\" || exit 14\n    fi\n    if [ ! -f \"grafana/img/${GRAFSUFF}32.png\" ]\n    then\n      convert \"$ARTWORK/$ICON/icon/$icontype/$ICON-icon-$icontype.png\" -resize 32x32 \"grafana/img/${GRAFSUFF}32.png\" || exit 15\n    fi\n  fi\n  GRAFANA_DATA=\"/usr/share/grafana.$GRAFSUFF/\" ./grafana/$PROJ/change_title_and_icons.sh || exit 16\nfi\n\nif [ ! -d \"/var/lib/grafana.$GRAFSUFF/\" ]\nthen\n  echo \"copying /var/lib/grafana.$GRAFSUFF/\"\n  cp -R \"$GRAF_VARLIB\" \"/var/lib/grafana.$GRAFSUFF/\" || exit 17\nfi\n  \nif ( [ ! -f \"/var/lib/grafana.$GRAFSUFF/grafana.db\" ] && [ ! -z \"$GGET\" ] )\nthen\n  echo \"attempt to fetch grafana database $GRAFSUFF from the test server\"\n  wget \"https://$HOST_SRC/grafana.$GRAFSUFF.db\" || exit 18\n  mv \"grafana.$GRAFSUFF.db\" \"/var/lib/grafana.$GRAFSUFF/grafana.db\" || exit 19\nfi\n\nif [ ! -d \"/etc/grafana.$GRAFSUFF/\" ]\nthen\n  echo \"copying /etc/grafana.$GRAFSUFF/\"\n  cp -R \"$GRAF_ETC\" \"/etc/grafana.$GRAFSUFF\"/ || exit 20\n  cfile=\"/etc/grafana.$GRAFSUFF/grafana.ini\"\n  cp ./grafana/etc/grafana.ini.example \"$cfile\" || exit 21\n  MODE=ss FROM='{{project}}' TO=\"$PROJ\" replacer \"$cfile\" || exit 22\n  MODE=ss FROM='{{url}}' TO=\"$host\" replacer \"$cfile\" || exit 23\n  MODE=ss FROM='{{bind}}' TO=\"$bind\" replacer \"$cfile\" || exit 24\n  MODE=ss FROM='{{port}}' TO=\"$PORT\" replacer \"$cfile\" || exit 25\n  MODE=ss FROM=';google_analytics_ua_id =' TO=\"-\" replacer \"$cfile\" || exit 27\n  MODE=ss FROM='{{ga}}' TO=\"$ga\" replacer \"$cfile\" || exit 28\n  MODE=ss FROM='{{test}}' TO=\"-\" replacer \"$cfile\" || exit 29\n  MODE=ss FROM='{{org}}' TO=\"$ORGNAME\" replacer \"$cfile\" || exit 32\nfi\n\npid=`ps -axu | grep grafana-server | grep $GRAFSUFF | awk '{print $2}'`\nif [ -z \"$pid\" ]\nthen\n  echo \"starting $PROJ grafana-server\"\n  ./grafana/$PROJ/grafana_start.sh &\n  echo \"started\"\nfi\n\nif [ ! -z \"$IMPJSONS\" ]\nthen\n  while [ ! -f \"/var/lib/grafana.$PROJ/grafana.db\" ]\n  do\n    echo \"Waiting for /var/lib/grafana.$PROJ/grafana.db to be created\"\n    sleep 1\n  done\n  sleep 1\n  GRAFANA=$GRAFSUFF NOCOPY=1 ./devel/import_jsons_to_sqlite.sh ./grafana/dashboards/$PROJ/* || exit 37\nfi\necho \"$0: $PROJ finished\"\n"
  },
  {
    "path": "devstats/config/devel/create_psql_user.sh",
    "content": "#!/bin/bash\nif [ -z \"${PG_PASS}\" ]\nthen\n  echo \"$0: You need to set PG_PASS environment variable to run this script\"\n  exit 1\nfi\n\nif [ -z \"$1\" ]\nthen\n  echo \"$0: user name required\"\n  exit 1\nfi\n\nif [ -z \"$ONLY\" ]\nthen\n  all=\"kubeflow devstats\"\nelse\n  all=$ONLY\nfi\n\ncp ./util_sql/drop_psql_user.sql /tmp/drop_user.sql || exit 1\nFROM=\"{{user}}\" TO=\"$1\" MODE=ss ./replacer /tmp/drop_user.sql || exit 1\n\nif [ ! -z \"$DROP\" ]\nthen\n  echo \"Drop from public\"\n  sudo -E -u postgres psql < /tmp/drop_user.sql || exit 1\n  for proj in $all\n  do\n    echo \"Drop from $proj\"\n    sudo -E -u postgres psql \"$proj\" < /tmp/drop_user.sql || exit 1\n  done\nfi\n\nif [ ! -z \"$NOCREATE\" ]\nthen\n  echo \"Skipping create\"\n  exit 0\nfi\n\necho \"Create role\"\nsudo -E -u postgres psql -c \"create user \\\"$1\\\" with password '$PG_PASS'\" || exit 1\n\nfor proj in $all\ndo\n  echo \"Grants $proj\"\n  ./devel/psql_user_grants.sh \"$1\" \"$proj\" || exit 2\ndone\necho 'OK'\n"
  },
  {
    "path": "devstats/config/devel/deploy_all.sh",
    "content": "#!/bin/bash\n# ARTWORK\n# GET=1 (attempt to fetch Postgres database and Grafana database from the test server)\n# INIT=1 (needs PG_PASS_RO, PG_PASS_TEAM, initialize from no postgres database state, creates postgres logs database and users)\n# SKIPVARS=1 (if set it will skip final Postgres vars regeneration)\nset -o pipefail\nexec > >(tee run.log)\nexec 2> >(tee errors.txt)\nif [ -z \"$PG_PASS\" ]\nthen\n  echo \"$0: You need to set PG_PASS environment variable to run this script\"\n  exit 1\nfi\nif ( [ ! -z \"$INIT\" ] && ( [ -z \"$PG_PASS_RO\" ] || [ -z \"$PG_PASS_TEAM\" ] ) )\nthen\n  echo \"$0: You need to set PG_PASS_RO, PG_PASS_TEAM when using INIT\"\n  exit 1\nfi\n\nGRAF_USRSHARE=\"/usr/share/grafana\"\nGRAF_VARLIB=\"/var/lib/grafana\"\nGRAF_ETC=\"/etc/grafana\"\nexport GRAF_USRSHARE\nexport GRAF_VARLIB\nexport GRAF_ETC\n\nhost=`hostname`\nfunction finish {\n    sync_unlock.sh\n    rm -f /tmp/deploy.wip 2>/dev/null\n}\nif [ -z \"$TRAP\" ]\nthen\n  sync_lock.sh || exit -1\n  trap finish EXIT\n  export TRAP=1\n  > /tmp/deploy.wip\nfi\n\nif [ ! -z \"$INIT\" ]\nthen\n  ./devel/init_database.sh || exit 1\nfi\n\nPROJ=kubeflow PROJDB=kubeflow PROJREPO=\"kubeflow/kubeflow\" ORGNAME=\"kubeflow\" PORT=3001 ICON=\"-\" GRAFSUFF=kubeflow GA=\"-\" ./devel/deploy_proj.sh || exit 2\n\nif [ -z \"$SKIPVARS\" ]\nthen\n  ./devel/vars_all.sh || exit 3\nfi\necho \"$0: All deployments finished\"\n"
  },
  {
    "path": "devstats/config/devel/deploy_proj.sh",
    "content": "#!/bin/bash\n# GET=1 (attempt to fetch Postgres database and Grafana database from the test server)\n# SKIPDBS=1 (entirely skip project's database operations)\n# SKIPADDALL=1 (skip adding/merging to allprj)\n# SKIPGRAFANA=1 (skip all grafana related stuff)\nset -o pipefail\nif [ -z \"$PG_PASS\" ]\nthen\n  echo \"$0: You need to set PG_PASS environment variable to run this script\"\n  exit 1\nfi\nif ( [ -z \"$PROJ\" ] || [ -z \"$PROJDB\" ] || [ -z \"$PROJREPO\" ] || [ -z \"$PORT\" ] || [ -z \"$GA\" ] || [ -z \"$ICON\" ] || [ -z \"$ORGNAME\" ] || [ -z \"$GRAFSUFF\" ] )\nthen\n  echo \"$0: You need to set PROJ, PROJDB, PROJREPO, PORT, GA, ICON, ORGNAME, GRAFSUFF environment variables to run this script\"\n  exit 2\nfi\nfunction finish {\n    sync_unlock.sh\n    rm -f /tmp/deploy.wip 2>/dev/null\n}\nif [ -z \"$TRAP\" ]\nthen\n  sync_lock.sh || exit -1\n  trap finish EXIT\n  export TRAP=1\n  > /tmp/deploy.wip\nfi\necho \"$0: $PROJ deploy started\"\nif [ -z \"$SKIPDBS\" ]\nthen\n  PDB=1 TSDB=1 ./devel/create_databases.sh || exit 3\nfi\nif [ -z \"$SKIPGRAFANA\" ]\nthen\n  ./devel/create_grafana.sh || exit 5\nfi\necho \"$0: $PROJ deploy finished\"\n"
  },
  {
    "path": "devstats/config/devel/drop_psql_db.sh",
    "content": "#!/bin/bash\nif [ -z \"$1\" ]\nthen\n  echo \"$0: you need to provide db name\"\n  exit 1\nfi\nsudo -E -u postgres psql -c \"select pg_terminate_backend(pid) from pg_stat_activity where datname = '$1'\"\nsudo -E -u postgres psql -c \"drop database $1\"\n"
  },
  {
    "path": "devstats/config/devel/drop_ts_tables.sh",
    "content": "#!/bin/bash\nif [ -z \"$1\" ]\nthen\n  echo \"$0: need database name argument\"\n  exit 1\nfi\nproj=$1\ntables=`sudo -E -u postgres psql $proj -qAntc '\\dt' | cut -d\\| -f2`\nfor table in $tables\ndo\n  base=${table:0:1}\n  if ( [ \"$base\" = \"t\" ] || [ \"$base\" = \"s\" ] )\n  then\n    sudo -E -u postgres psql $proj -c \"drop table $table\" || exit 1\n    echo \"dropped $table\"\n  fi\ndone\n"
  },
  {
    "path": "devstats/config/devel/drop_tsdb_affs_tables.sh",
    "content": "#!/bin/bash\nif [ -z \"$1\" ]\nthen\n  echo \"$0: need database name argument\"\n  exit 1\nfi\nproj=$1\n# snum_stats scompany_activity shcom* shpr_comps* ssex ssexcum scountries scountriescum\n# sudo -E -u postgres psql $proj -c \"drop table snum_stats\" || exit 1\n# sudo -E -u postgres psql $proj -c \"drop table scompany_activity\" || exit 2\n# sudo -E -u postgres psql $proj -c \"drop table ssex\" || exit 3\n# sudo -E -u postgres psql $proj -c \"drop table ssexcum\" || exit 4\n# sudo -E -u postgres psql $proj -c \"drop table scountries\" || exit 5\n# sudo -E -u postgres psql $proj -c \"drop table scountriescum\" || exit 6\ntables=`sudo -E -u postgres psql $proj -qAntc '\\dt' | cut -d\\| -f2`\nfor table in $tables\ndo\n  base1=${table:0:5}\n  base2=${table:0:10}\n  if ( [ \"$base1\" = \"shcom\" ] || [ \"$base2\" = \"shpr_comps\" ] )\n  then\n    sudo -E -u postgres psql $proj -c \"drop table $table\" || exit 1\n    echo \"dropped $table\"\n  fi\ndone\n"
  },
  {
    "path": "devstats/config/devel/get_all_sqlite_jsons.sh",
    "content": "#!/bin/bash\nif [ -z \"$ONLY\" ]\nthen\n  all=\"kubeflow\"\nelse\n  all=$ONLY\nfi\nmkdir sqlite 1>/dev/null 2>/dev/null\ntouch sqlite/touch\nfor proj in $all\ndo\n    db=$proj\n    rm -f sqlite/* 2>/dev/null\n    touch sqlite/touch\n    ./sqlitedb /var/lib/grafana.$db/grafana.db || exit 1\n    rm -f grafana/dashboards/$proj/*.json || exit 2\n    mv sqlite/*.json grafana/dashboards/$proj/ || exit 3\ndone\necho 'OK'\n"
  },
  {
    "path": "devstats/config/devel/get_from_sqlite.sh",
    "content": "#!/bin/bash\nif [ -z \"$GRAFANA\" ]\nthen\n  echo \"$0: you need to set GRAFANA env variable\"\n  exit 1\nfi\nif [ -z \"$1\" ]\nthen\n  echo \"$0: you need to provide at least one dashboard JSON\"\n  exit 2\nfi\ncp \"/var/lib/grafana.$GRAFANA/grafana.db\" a.db || exit 3\nfunction finish {\n    rm -f a.db* 2>/dev/null\n}\ntrap finish EXIT\n./sqlitedb a.db $* || exit 4\n./devel/update_from_sqlite.sh\n"
  },
  {
    "path": "devstats/config/devel/get_icon_type.sh",
    "content": "#!/bin/bash\nif [ -z \"$1\" ]\nthen\n  echo \"$0: requires project name parameter\"\n  exit 1\nfi\ndeclare -A icontypes\nicontypes=( \n  [\"cncf\"]=\"color\"\n)\nicontype=${icontypes[$1]}\nif [ -z \"$icontype\" ]\nthen\n  echo \"$0: project $1 is not defined\"\n  exit 1\nfi\necho $icontype\n"
  },
  {
    "path": "devstats/config/devel/grafana_start.sh",
    "content": "#!/bin/bash\nif [ -z \"$1\" ]\nthen\n  echo \"$0: you need to provide grafana name\"\n  exit 1\nfi\n./devel/grafana_stop.sh $1 || exit 1\ncd /usr/share/grafana.$1\ngrafana-server -config /etc/grafana.$1/grafana.ini cfg:default.paths.data=/var/lib/grafana.$1 1>/var/log/grafana.$1.log 2>&1 &\n"
  },
  {
    "path": "devstats/config/devel/grafana_stop.sh",
    "content": "#!/bin/sh\nif [ -z \"$1\" ]\nthen\n  echo \"$0: you need to provide grafana name\"\n  exit 1\nfi\npid=`ps -axu | grep grafana-server | grep $1 | awk '{print $2}'`\necho \"stopping $1 grafana server instance\"\nif [ ! -z \"$pid\" ]\nthen\n  echo \"stopping pid $pid\"\n  kill $pid\nelse\n  echo \"grafana-server $1 not running\"\nfi\n"
  },
  {
    "path": "devstats/config/devel/import_jsons_to_sqlite.sh",
    "content": "#!/bin/bash\nif [ -z \"$GRAFANA\" ]\nthen\n  echo \"$0: you need to set GRAFANA env variable (Grafana suffix). For example k8s, all, prometheus etc.\"\n  exit 1\nfi\nif [ -z \"$1\" ]\nthen\n  echo \"$0: you need to provide at least one json to import\"\n  exit 2\nfi\ncp /var/lib/grafana.$GRAFANA/grafana.db ./grafana.$GRAFANA.db || exit 4\n./sqlitedb ./grafana.$GRAFANA.db $* || exit 5\n./devel/grafana_stop.sh $GRAFANA || exit 6\ncp ./grafana.$GRAFANA.db /var/lib/grafana.$GRAFANA/grafana.db || exit 7\n./devel/grafana_start.sh $GRAFANA || exit 8\necho \"OK, if all is fine delete grafana.$GRAFANA.db.* db backup files and *.was json backup files\".\necho \"Otherwise use grafana.$GRAFANA.db.* backup file to restore previous Grafana DB.\"\n"
  },
  {
    "path": "devstats/config/devel/init_database.sh",
    "content": "#!/bin/bash\n# UDROP=1 attempt to drop users\n# LDROP=1 attempt to drop devstats database\nset -x -o pipefail\nif ( [ -z \"$PG_PASS\" ] || [ -z \"$PG_PASS_RO\" ] || [ -z \"$PG_PASS_TEAM\" ] )\nthen\n  echo \"$0: You need to set PG_PASS, PG_PASS_RO, PG_PASS_TEAM when using INIT\"\n  exit 1\nfi\nfunction finish {\n    sync_unlock.sh\n}\nif [ -z \"$TRAP\" ]\nthen\n  sync_lock.sh || exit -1\n  trap finish EXIT\n  export TRAP=1\nfi\n\necho \"$0 start\"\n\nif [ ! -z \"$UDROP\" ]\nthen\n  echo \"dropping users\"\n  ONLY=devstats DROP=1 NOCREATE=1 devel/create_psql_user.sh gha_admin || exit 1\n  ONLY=devstats DROP=1 NOCREATE=1 devel/create_psql_user.sh ro_user || exit 2\n  ONLY=devstats DROP=1 NOCREATE=1 devel/create_psql_user.sh devstats_team || exit 3\n  echo \"dropping done\"\nfi\n\nexists=`sudo -E -u postgres psql -tAc \"select 1 from pg_database WHERE datname = 'devstats'\"` || exit 4\nif ( [ ! -z \"$LDROP\" ] && [ \"$exists\" = \"1\" ] )\nthen\n  echo \"dropping postgres database devstats (logs)\"\n  sudo -E -u postgres psql -c \"select pg_terminate_backend(pid) from pg_stat_activity where datname = 'devstats'\" || exit 5\n  sudo -E -u postgres psql -c \"drop database devstats\" || exit 6\nfi\n\nif [ ! -z \"$NOCREATE\" ]\nthen\n  echo \"skipping create\"\n  exit 0\nfi\n\nexists=`sudo -E -u postgres psql -tAc \"select 1 from pg_database WHERE datname = 'devstats'\"` || exit 7\nif [ ! \"$exists\" = \"1\" ]\nthen\n  echo \"creating postgres database devstats (logs)\"\n  sudo -E -u postgres psql -c \"create database devstats\" || exit 8\n  sudo -E -u postgres psql -c \"create user gha_admin with password '$PG_PASS'\" || exit 9\n  sudo -E -u postgres psql -c \"create user ro_user with password '$PG_PASS_RO'\" || exit 10\n  sudo -E -u postgres psql -c \"create user devstats_team with password '$PG_PASS_TEAM'\" || exit 11\n  sudo -E -u postgres psql -c \"grant all privileges on database \\\"devstats\\\" to gha_admin\" || exit 12\n  sudo -E -u postgres psql -c \"alter user gha_admin createdb\" || exit 13\n  sudo -E -u postgres psql devstats < ./util_sql/devstats_log_table.sql || exit 14\n  ./devel/ro_user_grants.sh devstats || exit 15\n  ./devel/psql_user_grants.sh \"devstats_team\" \"devstats\" || exit 16\nelse\n  echo \"postgres database devstats (logs) already exists\"\nfi\n\necho \"$0 OK\"\n"
  },
  {
    "path": "devstats/config/devel/mass_replace.sh",
    "content": "#!/bin/bash\n# Examples:\n# MODE=rr FROM=`cat input` TO=`cat output` FILES=`find abc/ -type f -not -iname 'something.txt'` ./devel/mass_replace.sh\n# MODE=ss FROM=`cat input` TO=`cat output` FILES=`ls grafana/dashboards/{all,cncf,cni,containerd,coredns,envoy,fluentd,grpc,jaeger,linkerd,kubernetes,notary,opencontainers,opentracing,prometheus,rkt,rook,tuf,vitess}/*` ./devel/mass_replace.sh\n# MODE=ss0 FROM=CNCF TO='[[full_name]]' FILES=`find grafana/dashboards/cncf/ -type f -not -iname dashboards.json` ./devel/mass_replace.sh\n# MODE=ss FROM='      \"title\": \"' TO='      \"title\": \"[[full_name]] ' FILES=`find grafana/dashboards/cncf/ -name \"top_commenters.json\" -or -name \"project_statistics.json\" -or -name \"companies_summary.json\" -or -name \"prs_authors_companies_histogram.json\" -or -name \"developers_summary.json\" -or -name \"prs_authors_histogram.json\"` ./devel/mass_replace.sh\n# MODE=rs0 FROM='(?m)^.*\"uid\": \"\\w+\",\\n' TO='-' ./replacer input.json\n# MODE=rr0 FROM='(?m)(^.*)\"uid\": \"(\\w+)\",' TO='$1\"uid\": \"placeholder\",' ./replacer input.json\n# MODE=rr FROM='(?m);;;(.*)$' TO=';;;$1 # {{repo_groups}}' FILES=`find metrics/ -iname \"gaps.yaml\"` ./devel/mass_replace.sh\nif [ -z \"${FROM}\" ]\nthen\n  echo \"You need to set FROM, example FROM=abc TO=xyz FILES='f1 f2' $0\"\n  exit 1\nfi\nif [ -z \"${TO}\" ]\nthen\n  echo \"You need to set TO, example FROM=abc TO=xyz FILES='f1 f2' $0\"\n  exit 2\nfi\nif [ -z \"${FILES}\" ]\nthen\n  echo \"You need to set FILES, example FROM=abc TO=xyz FILES='f1 f2' $0\"\n  exit 3\nfi\nfor f in ${FILES}\ndo\n  ./replacer $f || exit 4\ndone\necho 'OK'\n"
  },
  {
    "path": "devstats/config/devel/net_tcp_config.sh",
    "content": "#!/bin/bash\n/sbin/sysctl net.ipv4.tcp_tw_reuse=1\n"
  },
  {
    "path": "devstats/config/devel/psql_user_grants.sh",
    "content": "#!/bin/bash\nif [ -z \"$1\" ]\nthen\n  echo \"$0: need user name argument\"\n  exit 1\nfi\nif [ -z \"$2\" ]\nthen\n  echo \"$0: need database name argument\"\n  exit 1\nfi\nproj=$2\nsudo -E -u postgres psql -c \"grant connect on database \\\"$proj\\\" to \\\"$1\\\"\" || exit 1\nsudo -E -u postgres psql -c \"grant usage on schema \\\"public\\\" to \\\"$1\\\"\" || exit 1\ntables=`sudo -E -u postgres psql $proj -qAntc '\\dt' | cut -d\\| -f2`\nfor table in $tables\ndo\n  echo -n \"$proj: $table \"\n  sudo -E -u postgres psql $proj -c \"grant select on $table to \\\"$1\\\"\" || exit 1\ndone\n"
  },
  {
    "path": "devstats/config/devel/put_all_charts.sh",
    "content": "#!/bin/bash\nif [ -z \"$ONLY\" ]\nthen\n  all=\"kubeflow\"\nelse\n  all=$ONLY\nfi\nfor proj in $all\ndo\n    suff=$proj\n    NOCOPY=1 GRAFANA=$suff devel/import_jsons_to_sqlite.sh grafana/dashboards/$proj/*.json || exit 2\ndone\necho 'OK'\n"
  },
  {
    "path": "devstats/config/devel/put_all_charts_cleanup.sh",
    "content": "#!/bin/bash\nrm grafana.*.db*\nfind . -iname \"*.was\" -exec rm -f \"{}\" \\;\n"
  },
  {
    "path": "devstats/config/devel/restore_db.sh",
    "content": "#!/bin/bash\n# FROMBACKUP: if set, it will use /var/www/html/$1.dump as a restore source\n# TEMPRENAME: restore to $1_temp and then drop $1 and rename $1_temp to $1 (a lot less $1 downtime but more disk usage)\nif [ -z \"$1\" ]\nthen\n  echo \"$0: you need to provide database name\"\n  echo \"When running manually please copy/link /var/www/html/dbname.dump to current directory and remove after restore\"\n  exit 1\nfi\n\nif [ ! -z \"$FROMBACKUP\" ]\nthen\n  ln /var/www/html/$1.dump $1.dump || exit 1\nfi\n\nif [ -z \"$TEMPRENAME\" ]\nthen\n  ./devel/drop_psql_db.sh $1\n  echo \"Creating $1\"\n  sudo -E -u postgres createdb $1 || exit 2\n  sudo -E -u postgres pg_restore -d $1 $1.dump || exit 3\n  echo \"Created $1\"\nelse\n  tdb=\"$1_temp\"\n  ./devel/drop_psql_db.sh $tdb\n  echo \"Creating $tdb\"\n  sudo -E -u postgres createdb $tdb || exit 4\n  sudo -E -u postgres pg_restore -d $tdb $1.dump || exit 5\n  echo \"Created $tdb\"\n  ./devel/drop_psql_db.sh $1\n  echo \"Renaming $tdb to $1\"\n  sudo -E -u postgres postgres -c \"select pg_terminate_backend(pid) from pg_stat_activity where datname = '$tdb'\" || exit 6\n  sudo -E -u postgres postgres -c \"alter database \\\"$tdb\\\" rename to \\\"$1\\\"\" || exit 7\n  echo \"Renamed $tdb to $1\"\nfi\n\nif [ ! -z \"$FROMBACKUP\" ]\nthen\n  rm $1.dump || exit 8\nfi\n"
  },
  {
    "path": "devstats/config/devel/ro_user_grants.sh",
    "content": "#!/bin/bash\nif [ -z \"$1\" ]\nthen\n  echo \"$0: need database name argument\"\n  exit 1\nfi\nproj=$1\ntables=`sudo -E -u postgres psql $proj -qAntc '\\dt' | cut -d\\| -f2`\nfor table in $tables\ndo\n  echo -n \"$proj: $table \"\n  sudo -E -u postgres psql $proj -c \"grant select on $table to ro_user\" || exit 1\ndone\n"
  },
  {
    "path": "devstats/config/devel/sync_lock.sh",
    "content": "#!/bin/bash\nif [ -f \"/tmp/deploy.wip\" ]\nthen\n  echo \"another deploy process is running, exiting\"\n  exit 1\nfi\nwait_for_command.sh devstats 600 || exit 2\ncronctl.sh devstats off || exit 3\ncronctl.sh devstats.sh off || exit 4\nif [ -z \"$FROM_WEBHOOK\" ]\nthen\n  wait_for_command.sh webhook 600 || exit 5\n  cronctl.sh webhook off || exit 6\n  killall webhook\nfi\necho 'All sync and deploy jobs stopped and disabled'\n"
  },
  {
    "path": "devstats/config/devel/sync_unlock.sh",
    "content": "#!/bin/bash\ncronctl.sh devstats on || exit 1\ncronctl.sh devstats.sh on || exit 2\nif [ -z \"$FROM_WEBHOOK\" ]\nthen\n  cronctl.sh webhook on || exit 3\nfi\necho 'All sync and deploy jobs enabled'\n"
  },
  {
    "path": "devstats/config/devel/test_metrics.yaml",
    "content": "---\nmetrics:\n  - name: GitHub events\n    series_name_or_func: multi_row_single_column\n    sql: event_types\n    periods: h,d,w,m,q,y\n    aggregate: 1,7,24\n    skip: h7,w7,m7,q7,y7,d24,w24,m24,q24,y24\n    multi_value: true\n"
  },
  {
    "path": "devstats/config/devel/test_tags.yaml",
    "content": "---\ntags:\n  - name: GitHub event types\n    sql: event_types_tags\n    series_name: event_types\n    name_tag: event_type_name\n    value_tag: event_type_value\n"
  },
  {
    "path": "devstats/config/devel/update_from_sqlite.sh",
    "content": "#!/bin/bash\nfor f in `find . -name \"*.was\"`\ndo\n    f2=${f%.*}\n    mv \"$f\" \"$f2\" || exit 1\ndone\necho 'OK'\n"
  },
  {
    "path": "devstats/config/devel/vars_all.sh",
    "content": "#!/bin/bash\nif [ -z \"${PG_PASS}\" ]\nthen\n  echo \"You need to set PG_PASS environment variable to run this script\"\n  exit 1\nfi\nif [ -z \"$ONLY\" ]\nthen\n  all=\"homebrew\"\nelse\n  all=$ONLY\nfi\nfor proj in $all\ndo\n    db=$proj\n    if [ \"$proj\" = \"kubernetes\" ]\n    then\n      db=\"gha\"\n    elif [ \"$proj\" = \"all\" ]\n    then\n      db=\"allprj\"\n    fi\n    echo \"Project: $proj, PDB: $db\"\n    sudo -E -u postgres psql \"$db\" -c \"delete from gha_vars\" || exit 1\n    GHA2DB_LOCAL=1 GHA2DB_PROJECT=$proj PG_DB=$db ./vars || exit 2\ndone\necho 'OK'\n"
  },
  {
    "path": "devstats/config/devstats.sh",
    "content": "#!/bin/bash\nif [ -z \"$DEVSTATS_DIR\" ]\nthen\n  echo \"$0: you need to set DEVSTATS_DIR\"\n  exit 1\n fi\ncd \"$DEVSTATS_DIR\"\n./run.sh || exit 1\n"
  },
  {
    "path": "devstats/config/docs/annotations.md",
    "content": "# Annotations\n\n- Most dashboards use Grafana's annotations query.\n- For example search for `\"annotations\": {` [here](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/reviewers-repository-groups.json).\n- It uses TSDB data from `annotations` series: `select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)`.\n- `$timeFilter` is managed by Grafana internally and evaluates to current dashboard date range.\n- Each project's annotations are computed using data from *annotation_regexp* [definition](https://github.com/cncf/devstats/blob/master/projects.yaml) (search for `annotation_regexp:`).\n- `main_repo` defines GitHub repository (project can have and usually have multiple GitHub repos) to get annotations from.\n- `annotation_regexp` defines RegExp patter to fetch annotations.\n- Final annotation list will be a list of tags from `main_repo` that matches `annotation_regexp`.\n- Tags are processed by using [git_tags.sh](https://github.com/cncf/devstats/blob/master/git/git_tags.sh) script on a given reposiory.\n- Annotations are automatically created using [annotations tool](https://github.com/cncf/devstats/blob/master/cmd/annotations/annotations.go).\n- You can force regenerate annotations using `{{projectname}}/annotations.sh` script. For Kubernetes it will be [kubernetes/annotations.sh](https://github.com/cncf/devstats/blob/master/kubernetes/annotations.sh).\n- You can also clear all annotations using [devel/clear_all_annotations.sh](https://github.com/cncf/devstats/blob/master/devel/clear_all_annotations.sh) script and generate all annotations using [devel/add_all_annotations.sh](https://github.com/cncf/devstats/blob/master/devel/add_all_annotations.sh) script.\n- Pass `ONLY='proj1 proj2'` to limit to the selected list of projects.\n- When computing annotations some special series are created:\n- `sannotations` it conatins all tag names & dates matching `main_repo` and `annotation_regexp` + CNCF join date (if set, search for `join_date:` [here](https://github.com/cncf/devstats/blob/master/projects.yaml))\n- Example values (for Kubernetes):\n```\ngha=# select * from sannotations ;\n       time         | period |       title        |             description             \n--------------------+--------+--------------------+-------------------------------------\n2014-09-09 04:00:00 |        | v0.2               | Release Kubernetes v0.2\n(...)\n2016-07-01 19:00:00 |        | v1.3.0             | Kubernetes official release v1.3.0\n(...)\n2018-03-26 16:00:00 |        | v1.10.0            | Kubernetes official release v1.10.0\n2014-06-01 00:00:00 |        | Project start date | 2014-06-01 - project starts\n2016-03-10 00:00:00 |        | CNCF join date     | 2016-03-10 - joined CNCF\n```\n- `quick_ranges` this series contain data between proceeding annotations. For example if you have annotations for v1.0 = 2014-01-01, v2.0 = 2015-01-01 and v3.0 = 2016-01-01, it will create ranges: `v1.0 - v2.0` (2014-01-01 - 2015-01-01), `v2.0 - v3.0` (2015-01-01 - 2016-01-01), `v3.0 - now` (2016-01-01 - now).\n- So if you have 10 annotations it will create `a_0_1`, `a_1_2`, `a_2_3`, .., `a_8_9`, `a_9_n`.\n- It will also create special periods: last day, last week, last month, last quarter, last year, last 10 days, last decade (10 years).\n- Some of those period have fixed length, not changing in time (all of then not ending now - past ones), those periods will only be calculated once and special marker will be set in the `gha_computed` table to avoid calculating them multiple times.\n- This flag (skip past calculation) is the default flag, unless we're full regenerating data, search for `ctx.ResetTSDB` [here](https://github.com/cncf/devstats/blob/master/cmd/gha2db_sync/gha2db_sync.go).\n- Example quick ranges (for Kubernetes):\n```\ngha=# select * from tquick_ranges ;\n       time         |                quick_ranges_data                 | quick_ranges_suffix |  quick_ranges_name  \n--------------------+--------------------------------------------------+---------------------+---------------------\n2014-01-01 00:00:00 | d;1 day;;                                        | d                   | Last day\n2014-01-01 01:00:00 | w;1 week;;                                       | w                   | Last week\n2014-01-01 02:00:00 | d10;10 days;;                                    | d10                 | Last 10 days\n2014-01-01 03:00:00 | m;1 month;;                                      | m                   | Last month\n2014-01-01 04:00:00 | q;3 months;;                                     | q                   | Last quarter\n2014-01-01 05:00:00 | y;1 year;;                                       | y                   | Last year\n2014-01-01 06:00:00 | y10;10 years;;                                   | y10                 | Last decade\n2014-01-02 03:00:00 | a_20_21;;2015-07-11 04:02:31;2015-09-25 23:41:40 | a_20_21             | v1.0.0 - v1.1.0\n2014-01-02 04:00:00 | a_21_22;;2015-09-25 23:41:40;2016-03-16 22:01:03 | a_21_22             | v1.1.0 - v1.2.0\n2014-01-02 05:00:00 | a_22_23;;2016-03-16 22:01:03;2016-07-01 19:19:06 | a_22_23             | v1.2.0 - v1.3.0\n2014-01-02 06:00:00 | a_23_24;;2016-07-01 19:19:06;2016-09-26 18:09:47 | a_23_24             | v1.3.0 - v1.4.0\n2014-01-02 07:00:00 | a_24_25;;2016-09-26 18:09:47;2016-12-12 23:29:43 | a_24_25             | v1.4.0 - v1.5.0\n2014-01-02 08:00:00 | a_25_26;;2016-12-12 23:29:43;2017-03-28 16:23:06 | a_25_26             | v1.5.0 - v1.6.0\n2014-01-02 09:00:00 | a_26_27;;2017-03-28 16:23:06;2017-06-29 22:53:16 | a_26_27             | v1.6.0 - v1.7.0\n2014-01-02 10:00:00 | a_27_28;;2017-06-29 22:53:16;2017-09-28 22:13:57 | a_27_28             | v1.7.0 - v1.8.0\n2014-01-02 11:00:00 | a_28_29;;2017-09-28 22:13:57;2017-12-15 20:53:13 | a_28_29             | v1.8.0 - v1.9.0\n2014-01-02 12:00:00 | a_29_30;;2017-12-15 20:53:13;2018-03-26 16:41:58 | a_29_30             | v1.9.0 - v1.10.0\n2014-01-02 13:00:00 | a_30_n;;2018-03-26 16:41:58;2018-05-18 00:00:00  | a_30_n              | v1.10.0 - now\n2014-01-02 14:00:00 | c_b;;2014-06-01 00:00:00;2016-03-10 00:00:00     | c_b                 | Before joining CNCF\n2014-01-02 15:00:00 | c_n;;2016-03-10 00:00:00;2018-05-18 00:00:00     | c_n                 | Since joining CNCF\n```\n- `gha_computed` this table hold which metrics were already computed, example values (part of Kubernetes values):\n```\ngha=# select * from gha_computed limit 3;\n           metric             |         dt          \n------------------------------+---------------------\nkubernetes/hist_approvers.sql | 2014-09-09 04:10:43\nkubernetes/hist_approvers.sql | 2014-09-19 21:18:55\nkubernetes/hist_approvers.sql | 2014-10-15 20:29:51\n```\n- Key is `metric` - metric file name and `dt` that holds `date from` for calculated period. Checking and setting `computed` state happens [here](https://github.com/cncf/devstats/blob/master/cmd/calc_metric/calc_metric.go), search for `isAlreadyComputed`, `setAlreadyComputed`.\n- Period calculation (this is also for charts not only histograms) is determined [here](https://github.com/cncf/devstats/blob/master/time.go), search for `ComputePeriodAtThisDate`. Possible period values are: `h,d,w,m,q,y,hN,dN,wN,mN,qN,yN,anno_x_y,anno_x_now,cncf_before,cncf_now`: h..y -mean hour..year, hN, N > 1, means some aggregation of h..y, anno_x_y (x >= 0, y > x) mean past quick range, anno_x_now (x >=0) mean last quick range.\n- `main_repo` and `annotation_regexp` can be empty (like for 'All' project [here](https://github.com/cncf/devstats/blob/master/projects.yaml). Depending on CNCF join date presence you will see single annotation or none then.\n"
  },
  {
    "path": "devstats/config/docs/dashboards/dashboards.md",
    "content": "<h1 id=\"-full_name-home-dashboard\">[[full_name]] Home dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Postgres <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/events.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/[[proj_name]]/metrics.yaml\" target=\"_blank\">series definition</a> (search for <code>name: GitHub activity</code>).</li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[proj_name]]/dashboards.json\" target=\"_blank\">JSON</a>.</li>\n<li>Developer <a href=\"https://github.com/cncf/devstats/blob/master/docs/dashboards/dashboards_devel.md\" target=\"_blank\">documentation</a>.</li>\n<li>Direct <a href=\"https://[[url_prefix]].[[hostname]]\" target=\"_blank\">link</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>First we&#39;re displaying links to all CNCF projects defined.</li>\n<li>Next we&#39;re showing current project&#39;s hourly activity - this is the number of all GitHub events that happened for [[full_name]] project hourly.</li>\n<li>This also includes bots activity (most other dashboards skip bot activity).</li>\n<li>Next we&#39;re showing HTML panel that shows all CNCF projects icons and links.</li>\n<li>Next there is a dashboard that shows a list of all dashboards defined for [[full_name]] project.</li>\n</ul>\n\n"
  },
  {
    "path": "devstats/config/docs/dashboards/dashboards_devel.md",
    "content": "# Home dashboard\n\nLinks:\n- Postgres SQL file: [events.sql](https://github.com/cncf/devstats/blob/master/metrics/shared/events.sql).\n- TSDB series definition: [metrics.yaml](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml) (search for `sql: events`).\n- Grafana dashboard JSON: [dashboards.json](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/dashboards.json).\n- User documentation: [dashboards.md](https://github.com/cncf/devstats/blob/master/docs/dashboards/dashboards.md).\n- Production version: [view](https://k8s.devstats.cncf.io/d/12/dashboards?refresh=15m&orgId=1).\n- Test version: [view](https://k8s.teststats.cncf.io/d/12/dashboards?refresh=15m&orgId=1).\n\n# Description\n\n- First we're displaying links to all CNCF projects defined. Links are defined [here](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/dashboards.json#L91-L270).\n- Next we're showing current project's hourly activity:\n  - We're quering `gha_events` table to get the total number of GitHub events.\n  - For more information about `gha_events` table please check: [gha_events.md](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events.md).\n  - We're summing events hourly.\n  - This is a small project activity chart, we're not excluding bots activity here (most other dashboards excludes bot activity).\n  - Each row returns single value, we're only groupoing hourly here, so TSDB series name is given [directly](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml) as `events_h`.\n- Next we're showing HTML panel that shows all CNCF projects icons and links. Its contents comes from Postgres `[[projects]]` variable\n- Next there is a dashboard that shows a list of all dashboards defined for the current project (Kubernetes in this case).\n- Next we're showing dashboard docuemntaion. Its contents comes from Postgres `[[docs]]` variable\n\n# Time series\n\nMetric usage is defined in metric.yaml as follows:\n```\nseries_name_or_func: events_h\nsql: events\nperiods: h\n```\n- It means that we should call Postgres metric [events.sql](https://github.com/cncf/devstats/blob/master/metrics/shared/events.sql).\n- We will save: series name `events_h`, query returns just single value for a given hour.\n- Grafana query is here: [dashboards.json](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/dashboards.json#L324): `SELECT \\\"value\\\" FROM \\\"events_h\\\" WHERE $timeFilter`.\n- `$timeFiler` value comes from Grafana date range selector. It is handled by Grafana internally.\n- This series is always calculated [last](https://github.com/cncf/devstats/blob/master/context.go#L222), and it is [queried](https://github.com/cncf/devstats/blob/master/cmd/gha2db_sync/gha2db_sync.go#L314) to see last hour calculated when doing a hourly sync.\n- Releases comes from Grafana annotations: [dashboards.json](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/dashboards.json#L69-L82).\n- For more details about annotations check [here](https://github.com/cncf/devstats/blob/master/docs/annotations.md).\n- Project name is customized per project, it uses `[[full_name]]` template variable [definition](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/dashboards.json#L528-L547) and is [used as project name](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/dashboards.json#L344).\n- Dashboard's CNCF projects list with icons and links comes from `[[projects]]` Postgres template variable defined [here](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/dashboards.json#L468-#L487).\n- Its definition is [here](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/pdb_vars.yaml#L9-L15).\n- It uses this [HTML partial](https://github.com/cncf/devstats/blob/master/partials/projects.html) replacing `[[hostname]]` with then current host name.\n- Dashboard's documentation comes from `[[docs]]` Postgres template variable defined [here](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/dashboards.json#L488-#L507).\n- Its definition is [here](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/pdb_vars.yaml#L16-L25).\n- It uses this [HTML](https://github.com/cncf/devstats/blob/master/docs/dashboards/dashboards.md) replacing `[[hostname]]` with then current host name and `[[full_name]]` with Kubernetes.\n- It also replaces `[[proj_name]]` with contents of environment variable `GHA2DB_PROJECT`, using `$GHA2DB_PROJECT` syntax.\n- It also replaces `[[url_prefix]]` with direct string `k8s`, using syntax `:k8s`.\n- Per project variables are defined using `vars` tools, more info [here](https://github.com/cncf/devstats/blob/master/docs/vars.md).\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/blocked_prs.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] Blocked PRs by repository group dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/prs_blocked.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>prs_blocked</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/blocked-prs-repository-groups.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows number of PRs that were blocked due to various reasons at given point of time.</li>\n<li>It shows PRs that were created during the selected periods.</li>\n<li>Chart shows number of all PRs and PRs blocked due to missing: <code>approved</code> or <code>lgtm</code> labels.</li>\n<li>It also list PRs blocked due to <code>release-note-label-needed</code> or <code>needs-ok-to-test</code> or <code>do-not-merge*</code> labels.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>Selecting period (for example week) means that dashboard will show PRs blocked in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/bot_commands.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] Bot commands repository group dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/bot_commands.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>bot_commands</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/bot-commands-repository-groups.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows how many times given bot commands were used.</li>\n<li>Bot commands set is defined (hardcoded) in the metric sql, they start with <code>/</code>.</li>\n<li>Drop-down commands values come from <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/bot_commands_tags.sql\" target=\"_blank\">this</a> file. You can select either all or a subset of all commands to display.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>Selecting period (for example week) means that dashboard will show bot commands used in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots when displaying bots commands usage, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n<li>This means that, for example, if somebody uses wrong/non-existing bot command, bot will answer with correct usage, so it will put bot command in the comment. This activity is ignored.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/companies_table.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] Companies table dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/project_company_stats.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>project_company_stats</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/companies-table.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows various GitHub metrics and aggregate them by actors companies.</li>\n<li>Contributor is defined as somebody who made a review, comment, commit, created PR or issue.</li>\n<li>Contribution is a review, comment, commit, issue or PR.</li>\n<li>You can select last day, month, week etc. range or date range between releases, for example <code>v1.9 - v1.10</code>.</li>\n<li>We are skipping bots when calculating statistics, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n<li>We are determining user's company affiliation from <a href=\"https://github.com/cncf/devstats/blob/master/github_users.json\" target=\"_blank\">this file</a>, which is imported from <code>cncf/gitdm</code>.</li>\n</ul>\n\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/company_stats.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] Company statistics by repository groups dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/company_activity.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>company_activity</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/company-statistics-by-repository-group.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows various companies metrics.</li>\n<li>Contributor is defined as somebody who made a review, comment, commit, created PR or issue.</li>\n<li>Contribution is a review, comment, commit, issue or PR.</li>\n<li>All activity counts all GitHub events.</li>\n<li>You can select all companies or choose some subset of them.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>We are showing to 70 most active companies in the drop-down list.</li>\n<li>Selecting period (for example week) means that dashboard will show statistics in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots when calculating statistics, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n<li>We are determining user's company affiliation from <a href=\"https://github.com/cncf/devstats/blob/master/github_users.json\" target=\"_blank\">this file</a>, which is imported from <code>cncf/gitdm</code>.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/contributing_companies.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] Companies contributing in repository groups dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/num_stats.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>num_stats</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/companies-contributing-in-repository-groups.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows how many companies and developers are contributing in a given repository group.</li>\n<li>By contributor we mean someone who made a review, comment, commit, created issue or PR, reviwed PR, commented on issue or PR.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>Selecting period (for example week) means that dashboard will show data in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n<li>We are determining user's company affiliation from <a href=\"https://github.com/cncf/devstats/blob/master/github_users.json\" target=\"_blank\">this file</a>, which is imported from <code>cncf/gitdm</code>.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/developer_stats.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] Developer Activity Counts by Repository Group dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Main metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/project_developer_stats.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Approves metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/hist_approvers.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Reviews metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/hist_reviewers.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>Developer activity</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/developer-activity-counts-by-repository-group.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows various developer metrics.</li>\n<li>Approve is defined when someone adds <code>/approve</code> comment.</li>\n<li>Review is defined when someone adds <code>/approve</code> or <code>/lgtm</code> comment or adds <code>approved</code> or <code>lgtm</code> label or adds PR review comment.</li>\n<li>You can select last day, month, week etc. range or date range between releases, for example <code>v1.9 - v1.10</code>.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>You can select country from a drop-down or summary for all countries.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots when calculating statistics, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/episodic_issues.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] New And Episodic Issue Creators dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>New issues metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/new_issues.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Episodic issues metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/episodic_issues.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>New and episodic issue</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/new-and-episodic-issue-creators.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows statistics about new and episodic issues and issue creators.</li>\n<li>New issue creator is someone who haven't created any issue before given period.</li>\n<li>New issue is an issue created by new issue creator</li>\n<li>Episodic issue creator is someone who haven't created any issue in 3 months before given project and haven't created more than 12 issues overall.</li>\n<li>Episodic issue is an issue created by episodic issue creator.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>Selecting period (for example week) means that dashboard will calculate statistics in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/episodic_prs.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] New And Episodic PR Contributors dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>New PRs metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/new_contributors.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Episodic PRs metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/episodic_contributors.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>New and episodic PR</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/new-and-episodic-pr-contributors.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows statistics about new and episodic PRs and contributors (PR creators).</li>\n<li>New contributor (PR creator) is someone who haven't created any PR before given period.</li>\n<li>New PR is a PR created by new contributor</li>\n<li>Episodic contributor (PR creator) is someone who haven't created any PR in 3 months before given project and haven't created more than 12 PRs overall.</li>\n<li>Episodic PR is a PR created by episodic contributor.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>Selecting period (for example week) means that dashboard will calculate statistics in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/gh_stats_commits.md",
    "content": "<h1 id=\"kubernetes-ghstats-dashboard\">[[full_name]] GitHub stats dashboard (commits)</h1>\n<p>Links:</p>\n<ul>\n<li>Repository groups version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repo_groups.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Repositories version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repos.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>github_stats_by_repo</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository-group.json\" target=\"_blank\">JSON</a> (repository groups version).</li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository.json\" target=\"_blank\">JSON</a> (repositories version).</li>\n<li>Developer <a href=\"https://github.com/cncf/devstats/blob/master/docs/dashboards/kubernetes/ghstats_devel.md\" target=\"_blank\">documentation</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This documentations only refers to <code>Commits</code> statistic.</li>\n<li>This dashboard shows the number of commits (by counting distinct commit's SHAs) for a selected repository or repository group.</li>\n<li>You can select multiple repositories or repository groups to stack them.</li>\n<li>You can filter by repository or repository group and period.</li>\n<li>Selecting period (for example week) means that dahsboard will count commits in this period.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots when calculating number of commits, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/gh_stats_iclosed.md",
    "content": "<h1 id=\"kubernetes-ghstats-dashboard\">[[full_name]] GitHub stats dashboard (issues closed)</h1>\n<p>Links:</p>\n<ul>\n<li>Repository groups version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repo_groups.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Repositories version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repos.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>github_stats_by_repo</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository-group.json\" target=\"_blank\">JSON</a> (repository groups version).</li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository.json\" target=\"_blank\">JSON</a> (repositories version).</li>\n<li>Developer <a href=\"https://github.com/cncf/devstats/blob/master/docs/dashboards/kubernetes/ghstats_devel.md\" target=\"_blank\">documentation</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This documentations only refers to <code>Issues closed</code> statistic.</li>\n<li>This dashboard shows the number of issues closed for a selected repository or repository group.</li>\n<li>You can select multiple repositories or repository groups to stack them.</li>\n<li>You can filter by repository or repository group and period.</li>\n<li>Selecting period (for example week) means that dahsboard will count issues closed in this period.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots when calculating number of issues, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/gh_stats_icommenters.md",
    "content": "<h1 id=\"kubernetes-ghstats-dashboard\">[[full_name]] GitHub stats dashboard (Issue commenters)</h1>\n<p>Links:</p>\n<ul>\n<li>Repository groups version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repo_groups.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Repositories version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repos.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>github_stats_by_repo</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository-group.json\" target=\"_blank\">JSON</a> (repository groups version).</li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository.json\" target=\"_blank\">JSON</a> (repositories version).</li>\n<li>Developer <a href=\"https://github.com/cncf/devstats/blob/master/docs/dashboards/kubernetes/ghstats_devel.md\" target=\"_blank\">documentation</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This documentations only refers to <code>Issue commenters</code> statistic.</li>\n<li>This dashboard shows the number of distinct issue commenters for a selected repository or repository group.</li>\n<li>You can select multiple repositories or repository groups to stack them.</li>\n<li>You can filter by repository or repository group and period.</li>\n<li>Selecting period (for example week) means that dahsboard will distinct issue commenters in this period.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots when calculating number of commenters, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/gh_stats_icomments.md",
    "content": "<h1 id=\"kubernetes-ghstats-dashboard\">[[full_name]] GitHub stats dashboard (Issue comments)</h1>\n<p>Links:</p>\n<ul>\n<li>Repository groups version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repo_groups.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Repositories version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repos.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>github_stats_by_repo</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository-group.json\" target=\"_blank\">JSON</a> (repository groups version).</li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository.json\" target=\"_blank\">JSON</a> (repositories version).</li>\n<li>Developer <a href=\"https://github.com/cncf/devstats/blob/master/docs/dashboards/kubernetes/ghstats_devel.md\" target=\"_blank\">documentation</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This documentations only refers to <code>Issue comments</code> statistic.</li>\n<li>This dashboard shows the number of issue comments for a selected repository or repository group.</li>\n<li>You can select multiple repositories or repository groups to stack them.</li>\n<li>You can filter by repository or repository group and period.</li>\n<li>Selecting period (for example week) means that dahsboard will count issue comments in this period.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots when calculating number of comments, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/gh_stats_iopened.md",
    "content": "<h1 id=\"kubernetes-ghstats-dashboard\">[[full_name]] GitHub stats dashboard (issues opened)</h1>\n<p>Links:</p>\n<ul>\n<li>Repository groups version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repo_groups.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Repositories version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repos.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>github_stats_by_repo</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository-group.json\" target=\"_blank\">JSON</a> (repository groups version).</li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository.json\" target=\"_blank\">JSON</a> (repositories version).</li>\n<li>Developer <a href=\"https://github.com/cncf/devstats/blob/master/docs/dashboards/kubernetes/ghstats_devel.md\" target=\"_blank\">documentation</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This documentations only refers to <code>Issues opened</code> statistic.</li>\n<li>This dashboard shows the number of issues opened for a selected repository or repository group.</li>\n<li>You can select multiple repositories or repository groups to stack them.</li>\n<li>You can filter by repository or repository group and period.</li>\n<li>Selecting period (for example week) means that dahsboard will count issues opened in this period.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots when calculating number of issues, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/gh_stats_prclosed.md",
    "content": "<h1 id=\"kubernetes-ghstats-dashboard\">[[full_name]] GitHub stats dashboard (PRs closed)</h1>\n<p>Links:</p>\n<ul>\n<li>Repository groups version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repo_groups.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Repositories version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repos.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>github_stats_by_repo</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository-group.json\" target=\"_blank\">JSON</a> (repository groups version).</li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository.json\" target=\"_blank\">JSON</a> (repositories version).</li>\n<li>Developer <a href=\"https://github.com/cncf/devstats/blob/master/docs/dashboards/kubernetes/ghstats_devel.md\" target=\"_blank\">documentation</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This documentations only refers to <code>PRs closed</code> statistic.</li>\n<li>This dashboard shows the number of PRs closed for a selected repository or repository group.</li>\n<li>You can select multiple repositories or repository groups to stack them.</li>\n<li>You can filter by repository or repository group and period.</li>\n<li>Selecting period (for example week) means that dahsboard will count PRs closed in this period.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots when calculating number of PRs, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/gh_stats_prcommenters.md",
    "content": "<h1 id=\"kubernetes-ghstats-dashboard\">[[full_name]] GitHub stats dashboard (PR commenters)</h1>\n<p>Links:</p>\n<ul>\n<li>Repository groups version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repo_groups.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Repositories version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repos.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>github_stats_by_repo</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository-group.json\" target=\"_blank\">JSON</a> (repository groups version).</li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository.json\" target=\"_blank\">JSON</a> (repositories version).</li>\n<li>Developer <a href=\"https://github.com/cncf/devstats/blob/master/docs/dashboards/kubernetes/ghstats_devel.md\" target=\"_blank\">documentation</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This documentations only refers to <code>PR commenters</code> statistic.</li>\n<li>This dashboard shows the number of distinct PR commenters for a selected repository or repository group.</li>\n<li>You can select multiple repositories or repository groups to stack them.</li>\n<li>You can filter by repository or repository group and period.</li>\n<li>Selecting period (for example week) means that dahsboard will distinct PR commenters in this period.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots when calculating number of commenters, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/gh_stats_prcomments.md",
    "content": "<h1 id=\"kubernetes-ghstats-dashboard\">[[full_name]] GitHub stats dashboard (PR comments)</h1>\n<p>Links:</p>\n<ul>\n<li>Repository groups version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repo_groups.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Repositories version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repos.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>github_stats_by_repo</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository-group.json\" target=\"_blank\">JSON</a> (repository groups version).</li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository.json\" target=\"_blank\">JSON</a> (repositories version).</li>\n<li>Developer <a href=\"https://github.com/cncf/devstats/blob/master/docs/dashboards/kubernetes/ghstats_devel.md\" target=\"_blank\">documentation</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This documentations only refers to <code>PR comments</code> statistic.</li>\n<li>This dashboard shows the number of PR comments for a selected repository or repository group.</li>\n<li>You can select multiple repositories or repository groups to stack them.</li>\n<li>You can filter by repository or repository group and period.</li>\n<li>Selecting period (for example week) means that dahsboard will count PR comments in this period.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots when calculating number of comments, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/gh_stats_prmerged.md",
    "content": "<h1 id=\"kubernetes-ghstats-dashboard\">[[full_name]] GitHub stats dashboard (PRs merged)</h1>\n<p>Links:</p>\n<ul>\n<li>Repository groups version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repo_groups.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Repositories version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repos.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>github_stats_by_repo</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository-group.json\" target=\"_blank\">JSON</a> (repository groups version).</li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository.json\" target=\"_blank\">JSON</a> (repositories version).</li>\n<li>Developer <a href=\"https://github.com/cncf/devstats/blob/master/docs/dashboards/kubernetes/ghstats_devel.md\" target=\"_blank\">documentation</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This documentations only refers to <code>PRs merged</code> statistic.</li>\n<li>This dashboard shows the number of PRs merged for a selected repository or repository group.</li>\n<li>You can select multiple repositories or repository groups to stack them.</li>\n<li>You can filter by repository or repository group and period.</li>\n<li>Selecting period (for example week) means that dahsboard will count PRs merged in this period.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots when calculating number of PRs, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/gh_stats_propened.md",
    "content": "<h1 id=\"kubernetes-ghstats-dashboard\">[[full_name]] GitHub stats dashboard (PRs opened)</h1>\n<p>Links:</p>\n<ul>\n<li>Repository groups version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repo_groups.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Repositories version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repos.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>github_stats_by_repo</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository-group.json\" target=\"_blank\">JSON</a> (repository groups version).</li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository.json\" target=\"_blank\">JSON</a> (repositories version).</li>\n<li>Developer <a href=\"https://github.com/cncf/devstats/blob/master/docs/dashboards/kubernetes/ghstats_devel.md\" target=\"_blank\">documentation</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This documentations only refers to <code>PRs opened</code> statistic.</li>\n<li>This dashboard shows the number of PRs opened for a selected repository or repository group.</li>\n<li>You can select multiple repositories or repository groups to stack them.</li>\n<li>You can filter by repository or repository group and period.</li>\n<li>Selecting period (for example week) means that dahsboard will count PRs opened in this period.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots when calculating number of PRs, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/gh_stats_reviewers.md",
    "content": "<h1 id=\"kubernetes-ghstats-dashboard\">[[full_name]] GitHub stats dashboard (reviewers)</h1>\n<p>Links:</p>\n<ul>\n<li>Repository groups version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repo_groups.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Repositories version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repos.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>github_stats_by_repo</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository-group.json\" target=\"_blank\">JSON</a> (repository groups version).</li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository.json\" target=\"_blank\">JSON</a> (repositories version).</li>\n<li>Developer <a href=\"https://github.com/cncf/devstats/blob/master/docs/dashboards/kubernetes/ghstats_devel.md\" target=\"_blank\">documentation</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This documentations only refers to <code>Reviewers</code> statistic.</li>\n<li>This dashboard shows the number of reviewers for a selected repository or repository group.</li>\n<li>You can select multiple repositories or repository groups to stack them.</li>\n<li>Reviewer is defined as someone who added pull request review comment(s) or added <code>/lgtm</code> or <code>/approve</code> text or added <code>lgtm</code> or <code>approve</code> label.</li>\n<li>You can filter by repository or repository group and period.</li>\n<li>Selecting period (for example week) means that dahsboard will count distinct users who made a review in this periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots when calculating number of reviewers, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/ghstats_devel.md",
    "content": "# Kubernetes GitHub stats dashboard\n\nLinks:\n- Postgres SQL file: [github_stats_by_repos.sql](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repos.sql).\n- Postgres SQL file: [github_stats_by_repo_groups.sql](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repo_groups.sql).\n- Time series definition: [metrics.yaml](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml) (search for `github_stats_by_repo`).\n- Grafana dashboard JSON: [github-stats-by-repository.json](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository.json).\n- Grafana dashboard JSON: [github-stats-by-repository-group.json](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository-group.json).\n- Production version: [view stats by repos](https://k8s.devstats.cncf.io/d/49/github-stats-by-repository?orgId=1), [view stats by repo groups](https://k8s.devstats.cncf.io/d/48/github-stats-by-repository-group?orgId=1).\n- Test version: [view stats by repos](https://k8s.teststats.cncf.io/d/49/github-stats-by-repository?orgId=1), [view stats by repo groups](https://k8s.teststats.cncf.io/d/48/github-stats-by-repository-group?orgId=1).\n\n# Description\n\n- This metric calculates various stats: Commits, Issues closed, Issues opened, PRs opened, PRs merged, PRs closed, PR comments, PR commenters, Issue comments, Issue commenters, Reviewers\n- For commits we're counting distinct SHAs from `gha_commits table. See [docs/tables/gha_commits.md](https://github.com/cncf/devstats/blob/master/docs/tables/gha_commits.md).\n- For issues opened and closed we're counding distinct issue ids from `gha_issues` table opened or closed in a gived date range. See [docs/tables/gha_issues.md](https://github.com/cncf/devstats/blob/master/docs/tables/gha_issues.md).\n- For PRs opened, merged closed we're counding distinct PR ids from `gha_pull_requests` table opened or closed in a gived date range. See [docs/tables/gha_pull_requests.md](https://github.com/cncf/devstats/blob/master/docs/tables/gha_pull_requests.md).\n- For PRs comments and commenters we're counting comments or distict comments authors. They happen on `gha_issues` table with `is_pull_request = true` filter.\n- For issues comments and commenters we're counting comments or distict comments authors. They happen on `gha_issues` table with `is_pull_request = false` filter.\n- For reviewers metric we're quering `gha_texts` table. It contains all 'texts' from all Kubernetes repositories.\n- For more information about `gha_texts` table please check: [docs/tables/gha_texts.md](https://github.com/cncf/devstats/blob/master/docs/tables/gha_texts.md).\n- We're using 'matching' which contains all event IDs that contain `/lgtm` or `/approve` (no case sensitive) in a separate line (there can be more lines before and/or after this line).\n- The exact psql regexp is: `(?i)(?:^|\\n|\\r)\\s*/(?:lgtm|approve)\\s*(?:\\n|\\r|$)`.\n- We're only looking for texts created between `{{from}}` and `{{to}}` dates. Values for `from` and `to` will be replaced with final periods described later.\n- We are counting actors who added text matching given regexp.\n- Then we're creating 'reviews' object (used by `with` clause) that contains all event IDs (`gha_events`) that belong to GitHub event type: `PullRequestReviewCommentEvent`.\n- For more information about `gha_events` table please check: [docs/tables/gha_event.md](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events.md).\n- Then comes the final select which returns multiple rows for either repositories or repository groups.\n- Each row returns single value, so the metric type is: `multi_row_single_column`.\n- Each row is in the format column 1: `gh_stats_repo_groups_reviewers,RepoGroupName`, column 2: `NumberOfReviewersInThisRepoGroup`. This is for repo groups version.\n- Each row is in the format column 1: `gh_stats_repos_reviewers,RepoName`, column 2: `NumberOfReviewersInThisRepo`. This is for repos version.\n- There are other rows with data for other stats. For example `gh_stats_repo_groups_commits,RepoGroupName` etc.\n- Value for each repository group or repository is calculated as a number of distinct actor logins.\n- We are checking that author is not a bot (see [excluding bots](https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md))\n- We are counting actors who added `lgtm` or `approve` label in a given period (`gha_issues_events_labels` table).\n- For more information about `gha_issues_events_labels` table please check: [docs/tables/gha_issues_events_labels.md](https://github.com/cncf/devstats/blob/master/docs/tables/gha_issues_events_labels.md).\n- We are counting actors who added PR review comment (event type `PullRequestReviewCommentEvent`).\n- Event belong to a given repository group or repository.\n- For repository group definition check: [repository groups](https://github.com/cncf/devstats/blob/master/docs/repository_groups.md) (table `gha_events` and commit files for file level granularity repo groups).\n- For more information about `gha_repos` table please check: [docs/tables/gha_repos.md](https://github.com/cncf/devstats/blob/master/docs/tables/gha_repos.md).\n\n# Periods and time series\n\nMetric usage is defined in metric.yaml as follows:\n```\n  - name: Github Stats by Repository Group\n    series_name_or_func: multi_row_single_column\n    sql: github_stats_by_repo_groups\n    periods: h,d,w,m,q,y\n    aggregate: 1,7,24\n    skip: h7,w7,m7,q7,y7,d24,w24,m24,q24,y24\n    multi_value: true\n    merge_series: gh_stats_rgrp\n  - name: Github Stats by Repository\n    series_name_or_func: multi_row_single_column\n    sql: github_stats_by_repos\n    periods: h,d,w,m,q,y\n    aggregate: 1,7,24\n    skip: h7,w7,m7,q7,y7,d24,w24,m24,q24,y24\n    multi_value: true\n    merge_series: gh_stats_r\n```\n- It means that we should call Postgres metric [github_stats_by_repo_groups.sql](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repo_groups.sql) and [github_stats_by_repos.sql](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/github_stats_by_repos.sql).\n- We should expect multiple rows each with 2 columns: 1st defines output series name, 2nd defines value.\n- We're using `merge_series: name` which means first column will contain multivalued series definition. It is comma `,` separated. Series name comes first, and then series value name. Series name will come to `series` column in TSDB.\n- For example 1st column: `'gh_stats_repo_groups_reviewers,Kubernetes'`, 2nd column: `20.0` will create series named `gh_stats_rgrp_reviewers` with column `Kubernetes` with value `20.0`.\n- This SQLs calculate many metrics in addition to reviewers, general series name will be `gh_stats_rgrp_{{stat}}` and `gh_stats_r_{{stat}}`, we're only describing `{{stat}} = reviewers` case in this documentation.\n- See [here](https://github.com/cncf/devstats/blob/master/docs/periods.md) for periods definitions.\n- The final series name would be (for repo groups version): `gh_stats_rgrp_[[stat]]` and column names from `[[repogroup]]`.\n- Value of `period` column will be from d,w,m,q,y,d7 and `[[repogroup]]` will be from 'all,apps,contrib,kubernetes,...', see [repository groups](https://github.com/cncf/devstats/blob/master/docs/repository_groups.md) for details.\n- The final series name would be (for repos version): `gh_stats_r_[[stat]]`, and column names from `[[repo]]` that will be from one of the Kubernetes projects repo name (with special characters changed to `_`, for example `kubernetes_kubernetes`).\n- Repo group name and repo name returned by Postgres SQL is normalized (downcased, removed special chars etc.) to be usable as a series name [here](https://github.com/cncf/devstats/blob/master/cmd/calc_metric/calc_metric.go#L112) using [this](https://github.com/cncf/devstats/blob/master/unicode.go#L23).\n- Final query is [here](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository.json) or [there](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/github-stats-by-repository-group.json), search for `gh_stats_repo`.\n- `$timeFiler` value comes from Grafana date range selector. It is handled by Grafana internally.\n- `[[period]]` comes from variable definition in dashboard JSON, search for `\"period\"`. It is saved in `period` column for each series.\n- `[[repogroup]]` or `[[repo]]` comes from Grafana variable that uses tags values, search for `repos` or `repogroups`.\n- For repos we're using repo [aliases](https://github.com/cncf/devstats/blob/master/docs/repository_aliases.md) to avoid duplicating renamed repositories.\n- To see more details about repository group tags, and all other tags check [tags.md](https://github.com/cncf/devstats/blob/master/docs/tags.md).\n- Releases comes from Grafana annotations: search for `annotations` in the dashboard JSON.\n- For more details about annotations check [here](https://github.com/cncf/devstats/blob/master/docs/annotations.md).\n- Project name is customized per project, it uses `[[full_name]]` template variable.\n- Per project variables are defined using `vars` tools, more info [here](https://github.com/cncf/devstats/blob/master/docs/vars.md).\n- Grafana documentation for this dashboard depends on `Statistic` selection, variable `[[stat]]` is used to display documentation for a given statistic.\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/issues_age.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] Issues age by SIG and repository groups dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/issues_age.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>issues_age</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/issues-age-by-sig-and-repository-groups.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows the chart of how many issues were open in selected periods and what was the median issue open to close time.</li>\n<li>Issue SIG is determined by <code>sig/*</code> labels. You can also select summary for all issues by choosing <code>All</code> SIG.</li>\n<li>Issue kind is determined by <code>kind/*</code> labels. You can also select summary for all issues by choosing <code>All</code> kind.</li>\n<li>Issue priority is determined by <code>priority/*</code> labels. You can also select summary for all issues by choosing <code>All</code> priority.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>Selecting period (for example week) means that dashboard will show number of open issues and median close time in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/issues_opened_closed.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] Issues Opened/Closed by SIG dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Opened issues metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/labels_sig_kind.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Closed issues metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/labels_sig_kind_closed.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>Issues opened</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/issues-opened-closed-by-sig.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows the chart of how many issues were opened and closed in selected periods.</li>\n<li>You can filter by SIG and kind.</li>\n<li>Issue SIG is determined by <code>sig/*</code> labels. You can also select summary for all issues by choosing <code>All</code> SIG.</li>\n<li>Issue kind is determined by <code>kind/*</code> labels. You can also select summary for all issues by choosing <code>All</code> kind.</li>\n<li>Selecting period (for example week) means that dashboard will show number of issues in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/pr_approval.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] PRs approval repository groups dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/prs_state.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>prs_state</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/prs-approval-repository-groups.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows number of approved and awaiting approval non-closed PRs modifed in given periods.</li>\n<li>Non-closed PR is a PR that is either open or merged.</li>\n<li>Approved PR is a PR that is either merged or open and have <code>approved</code> or <code>lgtm</code> label.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>Selecting period (for example week) means that dashboard will show data for PRs modified in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/pr_approve_to_merge.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] PR Time to Approve and Merge dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/time_metrics.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>time_metrics</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/pr-time-to-approve-and-merge.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard show median and 85th percentile time for merged PRs from open to LGTM, approve and merge.</li>\n<li>LGTM happens when <code>lgtm</code> label is added on a PR.</li>\n<li>Approve happens when <code>approved</code> label is added on a PR.</li>\n<li>Open to LGTM time is defined as time from open to LGTM when LGTM is present or from open to approve when approve is present or from open to merge if neither lgtm nor approve is present.</li>\n<li>It means that adding approved label when there is no lgtm label means LGTM too. Merging PR without approve or lgtm labels also means LGTM.</li>\n<li>LGTM to approve is defined as time from LGTM to approve when approve is present or from lgtm to merge if there is no approved label. If there is no LGTM this is zero.</li>\n<li>It means that merging PR means approving it.</li>\n<li>Approve to merge is defined as time from approve to merge if approved label is present. It is zero otherwise.</li>\n<li>You can filter by PR size. PR size is defined by <code>size/*</code> label. You can select All to get all PRs.</li>\n<li>You can select PRs with a specific <code>kind/*</code> label or summary for all of them.</li>\n<li>You can filter by API change. PR belongs to API change yes when it has <code>kind/api-change</code> label. You can select All to get all PRs.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>Selecting period (for example week) means that dashboard will data for PRs created in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/pr_authors.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] PRs authors repository groups dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/prs_authors.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>prs_authors</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/prs-authors-repository-groups.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows the number of unique PRs authors who created PRs in given periods.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>Selecting period (for example week) means that dashboard will show number of PR creators in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/pr_comments.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] PR comments dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/pr_comments.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>pr_comments</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/pr-comments.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows median, 85th and 95th percentices of number of comments on PRs created in given periods.</li>\n<li>Selecting period (for example week) means that dashboard will show number of comments created in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/pr_labels.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] PR labels repository groups dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/prs_labels.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>prs_labels</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/prs-labels-repository-groups.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard how many PRs have/had a specified label(s) in a given repository group(s) at given point in time.</li>\n<li>List of labels is hardcoded. It contains PR merge blocker labels.</li>\n<li>You can select any of labels from given set or choose <code>All labels combined</code>.</li>\n<li>You can select single repository group or summary for all of them <code>All repos combined</code>.</li>\n<li>There are multiple charts that show summaries for all repo groups and/or for all labels.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/pr_reviews_by_contributor.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] PR Reviews by Contributor dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/reviews_per_user.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>reviews_per_user</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/pr-reviews-by-contributor.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows number of reviews and lgtms for most active reviewers.</li>\n<li>LGTM means user added <code>/lgtm</code> comment or <code>lgtm</code> label.</li>\n<li>Review means user added PR review comment.</li>\n<li>You can select reviewer from the reviewers drop-down, it shows top active reviewers from last 3 months.</li>\n<li>To find top active reviewers we sum number of reviews and lgtms per user.</li>\n<li>You can select single repository or summary for all of them.</li>\n<li>You can filter by period and choose multiple reviewers to stack their data.</li>\n<li>Selecting period (for example week) means that dashboard will show reviews and lgtms in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>We are skipping bots when calculating number of commenters, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/pr_time_to_engagement.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] PR Time to Engagment dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/first_non_author_activity.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>first_non_author_activity</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/pr-time-to-engagment.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows median, 15th and 85th percentices of time from creation to first non-author activity on issues and PRs created in given periods.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>You can select PRs with a specific <code>kind/*</code> label or summary for all of them.</li>\n<li>Selecting period (for example week) means that dashboard will data for PRs and issues created in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/pr_workload.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] PR Workload per SIG dashboards (chart and table)</h1>\n<p>Links:</p>\n<ul>\n<li>Chart version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/pr_workload.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Table version metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/pr_workload_table.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>pr_workload</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/pr-workload-per-sig-chart.json\" target=\"_blank\">JSON</a> (chart version).</li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/pr-workload-per-sig-table.json\" target=\"_blank\">JSON</a> (table version).</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>Those dashboards show PR workload for SIGs</li>\n<li>Chart version allows to see absolute and relative PR worklod as line charts, stacked charts and stacked percent charts.</li>\n<li>Chart version also allows to see chart of SIG PRs and SIG reviewers. You can select list of SIGs to display.</li>\n<li>Table version allows to see absolute and relative PR workload per SIG and number of PRs and reviewers for given SIGs.</li>\n<li>Table version also allows to choose period to display metric, like last month, year, particular release etc.</li>\n<li>For chart version we're counting PRs that were opened at given point in time (not closed, not merged).</li>\n<li>For table version we're counting PRs taht were open at the period's end (for last week it is now), for v1.9 - v1.10 it is v1.10</li>\n<li>PR size comes from <code>size/*</code> labels. Different sizes, have different weights.</li>\n<li>xs: 0.25, small, s: 0.5, large, l: 2, xl: 4, xxl: 8. All other size labels (or no size label) have weight 1.</li>\n<li>PR belongs to SIG by using <code>sig/*</code> labels. List of SIGs to display in drop-down comes from all <code>sig/*</code> labels.</li>\n<li>Absolute PR workload is a weighted sum of all PRs for a given SIG using size labels as weights.</li>\n<li>Relative PR workload for given SIG is absolute PR workload divided by number of reviewers for given SIG.</li>\n<li>Number of reviewers is calculated in last month preceeding given point in time for chart version.</li>\n<li>For table version we're conting reviewers in a selected period.</li>\n<li>Reviewer is somebody who added <code>/lgtm</code> or <code>/approve</code> text or <code>lgtm</code> or <code>approve</code> label.</li>\n<li>We are skipping bots when calculating statistics, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/project_stats.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] Overall Project Statistics dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Main metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/project_stats.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>project_stats</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/overall-project-statistics.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows various project metrics.</li>\n<li>Contributor is defined as somebody who made a commit or created PR or issue.</li>\n<li>Pusher is somebody who pushed the commit into the repository, committer is somebody who made/authored a commit/PR pushed by the pusher, this can be the same person or not.</li>\n<li>You can select last day, month, week etc. range or date range between releases, for example <code>v1.9 - v1.10</code>.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots when calculating statistics, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/prs_age.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] Open PR Age By Repository Group dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/prs_age.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>prs_age</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/open-pr-age-by-repository-group.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows the chart of how many PRs were open in selected periods and what was the median PR open to merge time.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>You can select PRs with a specific <code>kind/*</code> label or summary for all of them.</li>\n<li>Selecting period (for example week) means that dashboard will show number of open PRs and median open to merge time in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/sig_mentions.md",
    "content": "<h1 id=\"kubernetes-sig-mentions-dashboard\">[[full_name]] SIG mentions dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Postgres <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/sig_mentions.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml#L246-L252\" target=\"_blank\">series definition</a>.</li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/sig_mentions.json\" target=\"_blank\">JSON</a>.</li>\n<li>Developer <a href=\"https://github.com/cncf/devstats/blob/master/docs/dashboards/kubernetes/sig_mentions_devel.md\" target=\"_blank\">documentation</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows stacked number of various SIG mentions.</li>\n<li>We are getting SIG from all <strong>texts</strong>.</li>\n<li>To find a SIG we&#39;re looking for texts like this <code>@kubernetes/sig-SIG-kind</code>, where kind can be: <em>bug, feature-request, pr-review, api-review, misc, proposal, design-proposal, test-failure</em>.</li>\n<li>For example <code>@kubernetes/sig-cluster-lifecycle-pr-review</code> will evaluate to <code>cluster-lifecycle</code>.</li>\n<li>Kind part is optional, so <code>@kubernetes/sig-node</code> will evaluate to <code>node</code>.</li>\n<li>There can be other texts before and after the SIG, so <code>Hi there @kubernetes/sig-apps-feature-request, I want to ...</code> will evaluate to <code>apps</code>.</li>\n<li>For exact <code>regexp</code> used, please check developer <a href=\"https://github.com/cncf/devstats/blob/master/docs/dashboards/kubernetes/sig_mentions_devel.md\" target=\"_blank\">documentation</a>.</li>\n<li><strong>Texts</strong> means comments, commit messages, issue titles, issue texts, PR titles, PR texts, PR review texts.</li>\n<li>You can filter by period and SIG(s).</li>\n<li>Selecting period (for example week) means that dahsboard will count SIG mentions in these periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>This dashboard allows to select multiple SIG, it contains special &#39;All&#39; value to display all SIGs.</li>\n<li>We&#39;re also excluding bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a>.</li>\n</ul>\n\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/sig_mentions_devel.md",
    "content": "# SIG mentions dashboard\n\nLinks:\n- Postgres SQL file: [sig_mentions.sql](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/sig_mentions.sql).\n- Series definition: [metrics.yaml](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml#L246-L252).\n- Grafana dashboard JSON: [sig_mentions.json](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/sig_mentions.json).\n- User documentation: [sig_mentions.md](https://github.com/cncf/devstats/blob/master/docs/dashboards/kubernetes/sig_mentions.md).\n- Production version: [view](https://k8s.devstats.cncf.io/d/41/sig-mentions?orgId=1).\n- Test version: [view](https://k8s.teststats.cncf.io/d/41/sig-mentions?orgId=1).\n\n# Description\n\n- We're quering `gha_texts` table. It contains all 'texts' from all Kubernetes repositories.\n- For more information about `gha_texts` table please check: [docs/tables/gha_texts.md](https://github.com/cncf/devstats/blob/master/docs/tables/gha_texts.md).\n- We're counting distinct GitHub events (text related events: issue/PR/commit comments, PR reviews, issue/PR body texts, titles) that contain any SIG reference.\n- We're groupping this by SIG.\n- Regexp to match SIG is: `(?i)(?:^|\\s)+(@kubernetes/sig-[\\w\\d-]+)(?:-bug|-feature-request|-pr-review|-api-review|-misc|-proposal|-design-proposal|-test-failure)s?(?:$|[^\\w\\d-]+)` with `(?i)(?:^|\\s)+(@kubernetes/sig-[\\w\\d-]*[\\w\\d]+)(?:$|[^\\w\\d-]+)` fallback.\n- Example sig mentions: `@kubernetes/sig-node-bug`, `@Kubernetes/sig-apps`.\n- We're only looking for texts created between `{{from}}` and `{{to}}` dates. Values for `from` and `to` will be replaced with final periods described later.\n- We're also excluding bots activity (see [excluding bots](https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md))\n- Each row returns single value, so the metric type is: `multi_row_single_column`.\n- Each row is in the format column 1: `sig_mentions_texts,SIGName`, column 2: `NumberOfSIGMentions`.\n- This metric uses `multi_value: true`, so each SIG is saved under different column name in a TSDB series.\n\n# Periods and time series\n\nMetric usage is defined in metric.yaml as follows:\n```\nseries_name_or_func: multi_row_single_column\nsql: sig_mentions\nperiods: d,w,m,q,y\naggregate: 1,7\nskip: w7,m7,q7,y7\nmulti_value: true\n```\n- It means that we should call Postgres metric [sig_mentions.sql](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/sig_mentions.sql).\n- We should expect multiple rows each with 2 columns: 1st defines output series name, 2nd defines value.\n- See [here](https://github.com/cncf/devstats/blob/master/docs/periods.md) for periods definitions.\n- The final series name would be: `sig_mentions_texts_[[period]]`. Where `[[period]]` will be from d,w,m,q,y,d7.\n- Each of those series (for example `sig_mentions_texts_d7`) will contain multiple columns (each column represent single SIG) with time series data.\n- Final query is here: [sig_mentions.json](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/sig_mentions.json#L117): `SELECT /^[[sigs]]$/ FROM \\\"sig_mentions_texts_[[period]]\\\" WHERE $timeFilter`.\n- `$timeFiler` value comes from Grafana date range selector. It is handled by Grafana internally.\n- `[[period]]` comes from Variable definition in dashboard JSON: [sig_mentions.json](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/sig_mentions.json#L184-L225).\n- `[[sigs]]` comes from Variable definition in dashboard JSON: [sig_mentions.json](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/sig_mentions.json#L230-L248).\n- Note that this is a multi value select and reqexp part `/^[[sigs]]$/` means that we want to see all values currently selected from the drop-down.\n- SIGs come from the tags: `SHOW TAG VALUES WITH KEY = sig_mentions_texts_name`, this tag is defined here: [tags.yaml](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/tags.yaml#L44).\n- For more informations about tags check [here](https://github.com/cncf/devstats/blob/master/docs/tags.md).\n- Releases comes from Grafana annotations: [sig_mentions.json](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/sig_mentions.json#L43-L55).\n- For more details about annotations check [here](https://github.com/cncf/devstats/blob/master/docs/annotations.md).\n- Project name is customized per project, it uses `[[full_name]]` template variable [definition](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/sig_mentions.json#L251-L268) and is [used as project name](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/sig_mentions.json#L54).\n- Per project variables are defined using `vars` tools, more info [here](https://github.com/cncf/devstats/blob/master/docs/vars.md).\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/sig_milestones.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] open issues/PRs by milestone and repository dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Open issues metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/open_issues_sigs_milestones.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Open PRs metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/open_prs_sigs_milestones.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>sigs_milestones</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/open-issues-prs-by-milestone-and-repository.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>Dashboard shows number of open issues and PRs for given SIG and milestone.</li>\n<li>It shows number of issues/PRs that were open at given point in time.</li>\n<li>It detects issue/PR SIG by <code>sig/*</code> labels. You can also select all SIGs.</li>\n<li>You can filter by specific milestone or select all milestones.</li>\n<li>You can filter by specific repository or select all repositories.</li>\n<li>Milestone and labels set is determined from last issue/PR comment before or at given point in time.</li>\n<li>We're using special dedicated tool that uses GitHub API to get newest issue/PR state because labels/milestones are usually updated by k8s-bot after the comment (in reaction to comment's command).</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/kubernetes/stars_and_forks.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] Stars and Forks by Repository dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/watchers.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>watchers</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/stars-and-forks-by-repository.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows number of stargazers, forks and open issues for a given repository.</li>\n<li>Selecting period (for example week) means that dashboard will show maximum value in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/activity.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] activity repository groups dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/activity_repo_groups.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>activity_repo_groups</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/activity-repository-groups.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows summary of all GitHub events happening on a given repository group or all of them.</li>\n<li>Selecting period (for example week) means that dashboard will show activity in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/commits.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] commits repository groups dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/commits_repo_groups.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>commits_repo_groups</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/commits-repository-groups.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows summary of all GitHub commits on a given project repository group or all of them.</li>\n<li>Selecting period (for example week) means that dashboard will show commits in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bot commits (for example bot merge commits), see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/community_stats.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] community stats dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/watchers.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>watchers</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/community-stats.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows forks, stars and open issues charts for a given repository</li>\n<li>Selecting period (for example week) means that dashboard will show maximum value in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/companies_stats.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] companies stats dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/company_activity.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>company_activity</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/companies-stats.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows various companies statistics.</li>\n<li>Contributor is defined as somebody who made a review, comment, commit, created PR or issue.</li>\n<li>Contribution is a review, comment, commit, issue or PR.</li>\n<li>You can select statistic from the metrics drop down (All activity means all events registered by GitHub).</li>\n<li>You can select single repository group or summary statistics for all of them combined.</li>\n<li>You can select multiple companies or all of them in a multi select dowp down.</li>\n<li>We are showing to 70 most active companies in the drop-down list.</li>\n<li>Selecting period (for example week) means that dashboard will show data in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n<li>We are determining user's company affiliation from <a href=\"https://github.com/cncf/devstats/blob/master/github_users.json\" target=\"_blank\">this file</a>, which is imported from <code>cncf/gitdm</code>.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/companies_summary.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] companies summary dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/project_company_stats.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>project_company_stats</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/companies-summary.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows various GitHub metrics and aggregate them by actors companies.</li>\n<li>Contributor is defined as somebody who made a review, comment, commit, created PR or issue.</li>\n<li>Contribution is a review, comment, commit, issue or PR.</li>\n<li>You can select last day, month, week etc. range or date range between releases, for example <code>v1.9 - v1.10</code>.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n<li>We are determining user's company affiliation from <a href=\"https://github.com/cncf/devstats/blob/master/github_users.json\" target=\"_blank\">this file</a>, which is imported from <code>cncf/gitdm</code>.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/company_prs.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] company PRs in repository groups dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/company_prs.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>company_prs</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/company-prs-in-repository-groups.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows how many PRs were open by given company's developer in given repository groups</li>\n<li>You can select one, two or more companies or All to select all of them.</li>\n<li>You can select one, two or more repository groups or All to select all fo tem.</li>\n<li>You can select last day, month, week etc. range or date range between releases, for example <code>v1.9 - v1.10</code>.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are determining user's company affiliation from <a href=\"https://github.com/cncf/devstats/blob/master/github_users.json\" target=\"_blank\">this file</a>, which is imported from <code>cncf/gitdm</code>.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/contributing_companies.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] contributing companies dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/num_stats.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>num_stats</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/contributing-companies.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows how many companies and developers are contributing in a given repository group.</li>\n<li>By contributor we mean someone who made a review, comment, commit, created issue or PR, reviwed PR, commented on issue or PR.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>Selecting period (for example week) means that dashboard will show data in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n<li>We are determining user's company affiliation from <a href=\"https://github.com/cncf/devstats/blob/master/github_users.json\" target=\"_blank\">this file</a>, which is imported from <code>cncf/gitdm</code>.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/countries_stats.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] countries stats dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/countries.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Cumulative metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/countries_cum.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Committers metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/committers_countries.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Committers cumulative metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/committers_countries_cum.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>countries</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/countries-stats.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows countries statistics (cumulative and in given periods).</li>\n<li>Contributor is defined as somebody who made a review, comment, commit, created PR or issue.</li>\n<li>Contribution is a review, comment, commit, issue or PR.</li>\n<li>We are determining contributor's country by using GitHub localization and searching for a country using <a href=\"http://www.geonames.org\" target=\"_blank\">geonames</a> database.</li>\n<li>You can select single repository group or summary statistics for all of them combined.</li>\n<li>You can choose to display contributors, contributions, users, actvity, committers, commits etc.</li>\n<li>You can select cumulative statistics or statistics in given periods.</li>\n<li>Selecting period (for example week) means that dashboard will show data in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/dashboards.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] stub dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/stub.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>stub</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/stub.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>stub</li>\n<li>Selecting period (for example week) means that dashboard will stub in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/developers_summary.md",
    "content": "<h1 id=\"kubernetes-dashboard\">[[full_name]] Developer Activity Counts by Repository Group dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Main metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/project_developer_stats.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Approves metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/hist_approvers.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Reviews metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/hist_reviewers.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>Developer activity</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/developer-activity-counts-by-repository-group.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows various developer metrics.</li>\n<li>You can select last day, month, week etc. range or date range between releases, for example <code>v1.9 - v1.10</code>.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>You can select country from a drop-down or summary for all countries.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots when calculating statistics, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/gender_stats.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] gender stats dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/gender.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Cumulative metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/gender_cum.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Committers metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/committers_gender.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Committers cumulative metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/committers_gender_cum.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>gender</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/gender-stats.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows gender statistics (cumulative and in given periods).</li>\n<li>Contributor is defined as somebody who made a review, comment, commit, created PR or issue.</li>\n<li>Contribution is a review, comment, commit, issue or PR.</li>\n<li>We are determining contributor's gender by using GitHub localization and user name to query <a href=\"https://store.genderize.io\" target=\"_blank\">genderize.io</a> for gender for a given country and name.</li>\n<li>You can select single repository group or summary statistics for all of them combined.</li>\n<li>You can choose to display contributors, contributions, users, actvity, committers, commits etc.</li>\n<li>You can select cumulative statistics or statistics in given periods.</li>\n<li>Selecting period (for example week) means that dashboard will show data in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/github_events_docs_html.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] GitHub events dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/event_types.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>event_types</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/github-events.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows summary of all GitHub events groupped by event type.</li>\n<li>Selecting period (for example week) means that dashboard will show events in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/issues.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] issues repository group dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/issues_opened.sql\" target=\"_blank\">SQL file</a> (issues opened).</li>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/issues_closed.sql\" target=\"_blank\">SQL file</a> (issues closed).</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>Issues repository group</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/issues-repository-group.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows the number of issues opened and closed in a given periods.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>Selecting period (for example week) means that dashboard will show data in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/issues_age.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] issues age dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/issues_age.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>issues_age</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/issues-age.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows median time to close issues opened in selected periods and average number of closed issues opened in those periods.</li>\n<li>Selecting period (for example week) means that dashboard will calculate data for issues opened in those periods.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>You can select all issues or issues with a specific priority.</li>\n<li>Issue priority is defined as a label <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/labels_priorities_tags_with_all.sql\" target=\"_blank\">here</a>.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/new_and_episodic_issues.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] new and episodic issue creators dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>New issues metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/new_issues.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Episodic issues metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/episodic_issues.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>New and episodic issue creators</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/new-and-episodic-issue-creators.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows statistics about new and episodic issues and issue creators.</li>\n<li>New issue creator is someone who haven't created any issue before given period.</li>\n<li>New issue is an issue created by new issue creator</li>\n<li>Episodic issue creator is someone who haven't created any issue in 3 months before given project and haven't created more than 12 issues overall.</li>\n<li>Episodic issue is an issue created by episodic issue creator.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>Selecting period (for example week) means that dashboard will calculate statistics in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/new_and_episodic_prs.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] new and episodic PR contributors dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>New contributors metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/new_contributors.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>Episodic contributors metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/episodic_contributors.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>New and episodic PR contributors</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/new-and-episodic-pr-contributors.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows statistics about new and episodic PRs and contributors (PR creators).</li>\n<li>New contributor (PR creator) is someone who haven't created any PR before given period.</li>\n<li>New PR is a PR created by new contributor</li>\n<li>Episodic contributor (PR creator) is someone who haven't created any PR in 3 months before given project and haven't created more than 12 PRs overall.</li>\n<li>Episodic PR is a PR created by episodic contributor.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>Selecting period (for example week) means that dashboard will calculate statistics in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/new_contributors.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] new contributors table dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>New contributors metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/new_contributors_data.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>New contributors table</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/new-contributors-table.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows statistics about new PR contributors.</li>\n<li>New contributor (PR creator) is someone whose PR was merged for the first time.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>You can select date range to show new contributors for this period.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/new_prs.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] new PRs dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/new_prs.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>new_prs</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/new-prs.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows the number of new PRs opened in a given repository group or in all repository groups.</li>\n<li>Selecting period (for example week) means that dashboard will count opened PRs in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/non_author_activity.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] first non-author activity dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/first_non_author_activity.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>first_non_author_activity</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/first-non-author-activity.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows median, 15th and 85th percentiles of time before issue creation and first non-author activity on the issue.</li>\n<li>You can choose repository group (or all of them) and aggregation period.</li>\n<li>Selecting period (for example week) means that dashboard will calculate percentiles in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/opened_to_merged.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] opened to merged dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/opened_to_merged.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>opened_to_merged</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/opened-to-merged.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows median, 15th and 85th percentiles of the time from open to merge for PRs opened in given periods.</li>\n<li>Selecting period (for example week) means that dashboard will calculate percentiles in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/pr_authors.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] PRs authors histogram dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/hist_pr_authors.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>hist_pr_authors</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/prs-authors-histogram.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows number of PRs created by contributors in the selected period.</li>\n<li>You can select last day, month, week etc. range or date range between releases, for example <code>v1.9 - v1.10</code>.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/pr_comments.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] PR comments dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/pr_comments.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>pr_comments</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/pr-comments.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows median, 85th and 95th percentiles of the number of comments on PRs.</li>\n<li>Selecting period (for example week) means that dashboard will calculate percentiles in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/pr_companies.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] PRs authors companies histogram dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/hist_pr_companies.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>hist_pr_companies</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/prs-authors-companies-histogram.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows number of PRs created by contributors groupped by company in the selected period.</li>\n<li>You can select last day, month, week etc. range or date range between releases, for example <code>v1.9 - v1.10</code>.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n<li>We are determining user's company affiliation from <a href=\"https://github.com/cncf/devstats/blob/master/github_users.json\" target=\"_blank\">this file</a>, which is imported from <code>cncf/gitdm</code>.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/project_health.md",
    "content": "<h1 id=\"dashboard-header\">Project health dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Projects health metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/projects_health.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>Projects health</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/project-health.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows various projects health metrics.</li>\n<li>You can select a project from the drop-down.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/projects_health.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] projects health dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Projects health metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/projects_health.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>Projects health</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/projects-health.json\" target=\"_blank\">JSON</a>.</li>\n<li>HTML <a href=\"https://github.com/cncf/devstats/blob/master/partials/projects_health.html\" target=\"_blank\">partial</a> used to generate table view.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows various projects health metrics.</li>\n<li>It uses <a href=\"https://github.com/cncf/devstats/blob/master/cmd/vars/vars.go\" target=\"_blank\">vars</a> program to generate a final HTML view.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/projects_stats.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] project statistics dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Main metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/project_stats.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>project_stats</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/project-statistics.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows various project metrics.</li>\n<li>Contributor is defined as somebody who made a review, comment, commit or created PR or issue.</li>\n<li>Pusher is somebody who pushed the commit into the repository, committer is somebody who made/authored a commit/PR pushed by the pusher, this can be the same person or not.</li>\n<li>You can select last day, month, week etc. range or date range between releases, for example <code>v1.9 - v1.10</code>.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots when calculating statistics, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/prs_age.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] PRs age dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/prs_age.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>prs_age</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/prs-age.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows number of PRs opened in given periods and median age of those PRs.</li>\n<li>PR age is defined as time from open to either merge or now (for non-merged PRs).</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>Selecting period (for example week) means that dashboard will calculate data in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/prs_approval.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] PRs approval dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/prs_state.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>prs_state</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/prs-approval.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows the number of approved PRs and the number of PRs awaiting approval.</li>\n<li>It counts PRs modified in given periods, approved PR is a PR that is either merged or open and have <code>/approve</code> or <code>/lgtm</code> comment.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>Selecting period (for example week) means that dashboard will calculate PRs in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/prs_authors_chart.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] PRs authors dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/prs_authors.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>prs_authors</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/prs-authors.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows the number of unique PR authors created in given periods.</li>\n<li>Selecting period (for example week) means that dashboard will calculate authors in those periods.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/prs_merged.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] PRs merged repository groups dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/prs_merged_groups.sql\" target=\"_blank\">SQL file</a> (repo groups).</li>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/all_prs_merged.sql\" target=\"_blank\">SQL file</a> (all PRs merged).</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>prs_merged_groups</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/prs-merged-repository-groups.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows number of PRs merged in given periods in selected repository groups.</li>\n<li>One panel shows stacked number of PRs merged in selected repositories. Second panel shows chart for all PRs merged in all repository groups.</li>\n<li>Selecting period (for example week) means that dashboard will show PRs merged in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/repo_commenters.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] repository commenters dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/repo_commenters.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>repo_commenters</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/repository-commenters.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows the number of unique commenters on a given repository group or all of them combined.</li>\n<li>Selecting period (for example week) means that dashboard will show unique commenters in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/repo_comments.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] repository comments dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/repo_comments.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>repo_comments</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/repository-comments.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows number of comments for a selected repository group or for all of them combined.</li>\n<li>Selecting period (for example week) means that dashboard will show comments in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/stub.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] stub dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/stub.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>stub</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/stub.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>stub</li>\n<li>Selecting period (for example week) means that dashboard will stub in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/time_metrics.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] time metrics dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/time_metrics.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>time_metrics</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/time-metrics.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows median and 85th percentile of open to merge time for PRs created in given periods.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>Selecting period (for example week) means that dashboard will calculate PRs open to merge time in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/top_commenters.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] top commenters dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/hist_commenters.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>hist_commenters</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/top-commenters.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard show most active commenters in the selected period.</li>\n<li>You can select last day, month, week etc. range or date range between releases, for example <code>v1.9 - v1.10</code>.</li>\n<li>You can select single repository group or summary for all of them.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/tzs_stats.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] time zones stats dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>1st metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/tz.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>2nd metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/committers_tz.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>tz</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/timezones-stats.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows timezones statistics.</li>\n<li>We're showing histograms over time (called heatmap), color is used to show higher/lower counts for given TZ offsets and dates.</li>\n<li>Contributor is defined as somebody who made a review, comment, commit, created PR or issue.</li>\n<li>Contribution is a review, comment, commit, issue or PR.</li>\n<li>We are determining contributor's timezone by using GitHub localization and searching for a timezone using <a href=\"http://www.geonames.org\" target=\"_blank\">geonames</a> database.</li>\n<li>You can select single repository group or summary statistics for all of them combined.</li>\n<li>You can choose to display contributors, contributions, users, actvity, committers, commits etc.</li>\n<li>Selecting period (for example week) means that dashboard will show data in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/user_reviews.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] user reviews dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/reviews_per_user.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>reviews_per_user</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/user-reviews.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows number of PR reviews most active reviewers.</li>\n<li>Review means user added PR review comment.</li>\n<li>You can select reviewer from the reviewers drop-down, it shows top active reviewers from last 3 months.</li>\n<li>To find top active reviewers we sum number of reviews per user.</li>\n<li>You can select single repository or summary for all of them.</li>\n<li>You can filter by period and choose multiple reviewers to stack their data.</li>\n<li>Selecting period (for example week) means that dashboard will show reviews in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/dashboards/shared/users_stats.md",
    "content": "<h1 id=\"dashboard-header\">[[full_name]] users stats dashboard</h1>\n<p>Links:</p>\n<ul>\n<li>Metric <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/user_activity.sql\" target=\"_blank\">SQL file</a>.</li>\n<li>TSDB <a href=\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\" target=\"_blank\">series definition</a>. Search for <code>user_activity</code></li>\n<li>Grafana dashboard <a href=\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/[[lower_name]]/users-stats.json\" target=\"_blank\">JSON</a>.</li>\n</ul>\n<h1 id=\"description\">Description</h1>\n<ul>\n<li>This dashboard shows various user statistics.</li>\n<li>Contributor is defined as somebody who made a review, comment, commit, created PR or issue.</li>\n<li>Contribution is a review, comment, commit, issue or PR.</li>\n<li>You can select statistic from the metrics drop down (All activity means all events registered by GitHub).</li>\n<li>You can select single repository group or summary statistics for all of them combined.</li>\n<li>You can select multiple users or all of them in a multi select dowp down.</li>\n<li>We are showing to 70 most active users in the drop-down list.</li>\n<li>Selecting period (for example week) means that dashboard will show data in those periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/periods.md\" target=\"_blank\">here</a> for more informations about periods.</li>\n<li>See <a href=\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\" target=\"_blank\">here</a> for more informations about repository groups.</li>\n<li>We are skipping bots activity, see <a href=\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\" target=\"_blank\">excluding bots</a> for details.</li>\n</ul>\n"
  },
  {
    "path": "devstats/config/docs/excluding_bots.md",
    "content": "# Excluding bots\n\n- You can put excluding bots partial `{{exclude_bots}}` anywhere in the metric SQL.\n- You should put exclude bots partial inside parentheses like for example: `(lower(actor_login) {{exclude_bots}})`.\n- `{{exclude_bots}}` will be replaced with the contents of the [util_sql/exclude_bots.sql](https://github.com/cncf/devstats/blob/master/util_sql/exclude_bots.sql).\n- Currently is is defined as: `not like all(array['googlebot', 'coveralls', 'rktbot', 'coreosbot', 'web-flow', 'k8s-%', '%-bot', '%-robot', 'bot-%', 'robot-%', '%[bot]%', '%-jenkins', '%-ci%bot', '%-testing', 'codecov-%'])`.\n- Most actor related metrics use this.\n"
  },
  {
    "path": "devstats/config/docs/github.md",
    "content": "# GitHub (GHAPI) datasource details\n\n- You need to have `/etc/github/oauth` file created on your server, this file should contain OAuth token.\n- If you want to use multiple tokens, create `/etc/github/oauths` file that contain list of comma separated OAuth keys.\n- Without this file you are limited to 60 API calls, see [GitHub info](https://developer.github.com/v3/#rate-limiting).\n- You can force using unauthorized acces by setting environment variable `GHA2DB_GITHUB_OAUTH` to `-` - this is not recommended.\n- When using OAuth file, you are allowed to use 5000 API points/hour.\n"
  },
  {
    "path": "devstats/config/docs/periods.md",
    "content": "# DevStats metrics periods definitions\n\n- Periods can be: h,d,w,m,q,y which means we should calculate this SQL for every hour, day, week, month, quarter and year since start of a given project.\n- That means about 34K+ hour ranges, 1400+ days, 210 weeks, 48 months, 12 quarter, 4 years (for Kubernetes project example as of Mar 2018).\n- `{{from}}` and `{{to}}` will be replaced with those daily, weekly, .., yearly ranges.\n- Aggregate (any positive integer) for example 1,7 means that we should calculate moving averages for 1 and 7.\n- Aggregate 1 means nothing - just calculate value.\n- Aggregate 7 means that we should calculate d7, w7, m7, q7 and y7 periods. d7 means that we're calculate period with 7 days length, but iterating 1 day each time. For example 1-8 May, then 2-9 May, then 3-10 May and so on.\n- Skip: w7, m7, q7, y7 means that we should exclude those periods, so we will only have d7 left. That means we're calculating d,w,m,q,y,d7 periods. d7 is very useful, becasue it contains all 7 week days (so values are similar) but we're progressing one day instead of 7 days.\n- d7 = '7 Days MA' = '7 days moving average'.\n- h24 = '24 Hours MA' = '24 hours moving avegage'.\n- Note that moving averages can give non-intuitive values, for example let's say there were 10 issues in 7 days. 7 Days MA will give you value 10/7 = 1.42857... which doesnt look like a correct Issue number. But this means avg 1.49 issue/day in 7 Days moving average period.\n\n# DevStats metrics ranges definitions\n\n- Ranges allow selecting date range for table based dashboards.\n- There are two types or ranges:\n  - `Last [range]`, where `[range]` is: day, week, month etc.\n  - `[annotation1]` - `[annotation2]`, where `[annotation]` is a particular release/tag defined on the project main repo, it allows selecting ranges between one annotation and next one.\n- See [this](https://github.com/cncf/devstats/blob/master/docs/annotations.md) for more informations about annotations.\n"
  },
  {
    "path": "devstats/config/docs/repository_aliases.md",
    "content": "# DevStats repository aliases\n\n- Repository alias is usually defined as the most recent name of a given repository.\n- GitHub identifies repositories by `id`. Sometimes repositories are renamed. In those cases we will have multiple repos with the same `id` but different name.\n- Usually alias refers to most recent repo name plus eventually some special names for multiple repositories (can be defined per project), but usually all of repos from the same alias has the same `id`.\n- See [example](https://github.com/cncf/devstats/blob/master/scripts/prometheus/repo_groups.sql#L1-L20) to see typical repository aliases definition.\n- More info about `gha_repos` table [here](https://github.com/cncf/devstats/blob/master/docs/tables/gha_repos.md).\n- This is the query that updates repository aliases every hour (most projects use this to keep repository alias pointing to most up-to-date repo name):\n```\nupdate\n  gha_repos r\nset\n  alias = coalesce((\n    select i.name\n    from\n      gha_repos i,\n      gha_events e\n    where\n      i.id = r.id\n      and e.repo_id = r.id\n    order by\n      e.created_at desc\n    limit 1\n  ), name)\n;\n```\n"
  },
  {
    "path": "devstats/config/docs/repository_groups.md",
    "content": "# Repository groups\n\n- Most project use 'repository groups' to group data under them.\n- It is usually defined on the repository level, which means that for example 3 repositories belong to 'repository group 1', and some 2 others belong to 'repository group 2'.\n- They can also be defined on the file level, meaning that some files from some repos can belong to a one repository group, while others belong to the other repository group.\n- Only Kubernetes project uses 'file level granularity' repository groups definitions.\n- For Kubernetes they are defined in main postgres script: [kubernetes/psql.sh](https://github.com/cncf/devstats/blob/master/kubernetes/psql.sh#L13).\n- It uses [kubernetes/setup_repo_groups.sh](https://github.com/cncf/devstats/blob/master/kubernetes/setup_repo_groups.sh).\n- It finally executes this SQL script: [scripts/kubernetes/repo_groups.sql](https://github.com/cncf/devstats/blob/master/scripts/kubernetes/repo_groups.sql).\n- It defines repository groups for given repository names.\n- The file level granularity part is: [kubernetes/psql.sh](https://github.com/cncf/devstats/blob/master/kubernetes/psql.sh#L14).\n- This setup postprocessing scripts:\n- One is [kubernetes/setup_scripts.sh](https://github.com/cncf/devstats/blob/master/kubernetes/setup_scripts.sh#L5-L6) which adds postprocess script:\n- [util_sql/repo_groups_postprocess_script.sql](https://github.com/cncf/devstats/blob/master/util_sql/repo_groups_postprocess_script.sql) which finally executes: [util_sql/postprocess_repo_groups.sql](https://github.com/cncf/devstats/blob/master/util_sql/postprocess_repo_groups.sql) every hour.\n- This SQL updates `gha_events_commits_files` table (see table info [here](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events_commits_files.md)) by setting repository group based on file path, for example:\n- These [lines](https://github.com/cncf/devstats/blob/master/util_sql/postprocess_repo_groups.sql#L10-L12) are setting repo group based on full path including repo name, and they set different repo group than defined for `kubernetes/kubernetes` (`Cluster lifecycle` instead of `Kubernetes`).\n- These [lines](https://github.com/cncf/devstats/blob/master/util_sql/postprocess_repo_groups.sql#L23-L34) are setting repo group based on PR review comments on specific files in specific repository (also overriding `Kubernetes` with `Cluster lifecycle`).\n- Another is [kubernetes/setup_scripts.sh](https://github.com/cncf/devstats/blob/master/kubernetes/setup_scripts.sh#L7-L8) which adds postprocess script (this is used in all projects, not only K8s):\n- [util_sql/repo_groups_postprocess_script_from_repos.sql](https://github.com/cncf/devstats/blob/master/util_sql/repo_groups_postprocess_script_from_repos.sql) which finally executes: [util_sql/postprocess_repo_groups_from_repos.sql](https://github.com/cncf/devstats/blob/master/util_sql/postprocess_repo_groups_from_repos.sql).\n```\nupdate\n  gha_events_commits_files ecf\nset\n  repo_group = r.repo_group\nfrom\n  gha_repos r\nwhere\n  r.name = ecf.dup_repo_name\n  and r.repo_group is not null\n  and ecf.repo_group is null;\n```\n- It updates `gha_events_commits_files` table (see table info [here](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events_commits_files.md)) setting the same repo group as given file's repository's repo group when file's repoository's repo group is defined and when file's repo group is not yet defined.\n- Important part is to update only where commit's file's repo group [is not yet set](https://github.com/cncf/devstats/blob/master/util_sql/postprocess_repo_groups_from_repos.sql#L11) and only when commit's file's repository has [repo group set](https://github.com/cncf/devstats/blob/master/util_sql/postprocess_repo_groups_from_repos.sql#L10).\n- Generally all postprocess scripts that run every hour are defined in the table `gha_postprocess_scripts` (see table info [here](https://github.com/cncf/devstats/blob/master/docs/tables/gha_postprocess_scripts.md)), currently: repo groups, labels, texts, PRs, issues.\n- More info about `gha_repos` table [here](https://github.com/cncf/devstats/blob/master/docs/tables/gha_repos.md).\n\n# Other projects\n- Non Kubernetes projects are not setting `util_sql/repo_groups_postprocess_script.sql`, for example Prometheus uses [this](https://github.com/cncf/devstats/blob/master/prometheus/setup_scripts.sh). Note missing [util_sql/postprocess_repo_groups.sql](https://github.com/cncf/devstats/blob/master/util_sql/postprocess_repo_groups.sql) part.\n- It only adds [util_sql/repo_groups_postprocess_script_from_repos.sql](https://github.com/cncf/devstats/blob/master/util_sql/repo_groups_postprocess_script_from_repos.sql), which executes [util_sql/postprocess_repo_groups_from_repos.sql](https://github.com/cncf/devstats/blob/master/util_sql/postprocess_repo_groups_from_repos.sql).\n- So it only updates `gha_events_commits_file` table with repository group as defined by commit's file's repository (if defined).\n"
  },
  {
    "path": "devstats/config/docs/tables/const_table.md",
    "content": "# Const table\n\n- Tables marked as `const` are not changing in time.\n- Their values are inserted once and are not updated anymore.\n- Such tables does not contain reference to GitHub event.\n"
  },
  {
    "path": "devstats/config/docs/tables/gha_actors.md",
    "content": "# `gha_actors` table\n\n- This table holds all GitHub actors (actor can be contributor, forker, commenter etc.)\n- This is a const table, values are inserted once and doesn't change, see [const table](https://github.com/cncf/devstats/blob/master/docs/tables/const_table.md).\n- Actors are created during standard GitHub archives import from JSON [here](https://github.com/cncf/devstats/blob/master/cmd/gha2db/gha2db.go#L20-L31).\n- Actors imported from GHA have no name (only id and login), name can be updated by import affiliations tool.\n- They can also be added by import affiliation tool [here](https://github.com/cncf/devstats/blob/master/cmd/import_affs/import_affs.go#L101-L108) or updated [here](https://github.com/cncf/devstats/blob/master/cmd/import_affs/import_affs.go#L199-L201).\n- It contains about 77K records as of Feb 2018.\n- It is created here: [structure.go](https://github.com/cncf/devstats/blob/master/structure.go#L60-L76).\n- You can see its SQL structure here: [structure.sql](https://github.com/cncf/devstats/blob/master/structure.sql#L41-L45).\n- Its primary key is `id`.\n- Values from this table are often duplicated in other tables (to speedup processing) as `dup_actor_id`, `dup_actor_login`.\n\n# Columns\n\n- `id`: actor ID, if > 0 then it comes from GitHub, if < 0 - created artificially (pre-2015 GitHub actors had no ID).\n- `login`: actor's GitHub login (you can access profile via `https://github.com/login`).\n- `name`: actors name, there is no `name` defined in GitHub archives JSONs, if this value is set - it means it was updated by the affiliations import tool (or entire actor entry comes from affiliations import tool).\n"
  },
  {
    "path": "devstats/config/docs/tables/gha_comments.md",
    "content": "# `gha_comments` table\n\n- This is a table that holds GitHub comments state at a given point in time (`event_id` refers to [gha_events](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events.md)).\n- It contains issue and PR comments, PR review comments and commit comments.\n- This is a variable table, for details check [variable table](https://github.com/cncf/devstats/blob/master/docs/tables/variable_table.md).\n- It contains about 138K records (Mar 2018 state). There is usually only one event/comment. In rare cases we have review comments on an exiting comment.\n- Its primary key is `(event_id, id)`.\n\n# Columns\n\nMost important columns are:\n- `id`: GitHub Comment ID.\n- `event_id`: GitHub event ID, see [gha_events](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events.md).\n- `body`: Comment text.\n- `created_at`: Comment creation date.\n- `updated_at`: Comment update date. Note that this table holds Comment state in time, comment can be modified, so updated_at will change.\n- `user_id`: GitHub user ID who added comment.\n- `commit_id`: If this is a commit comment, this contains commit SHA, see [gha_commits](https://github.com/cncf/devstats/blob/master/docs/tables/gha_commits.md).\n- `position`: Position in file, can be null.\n- `path`: File path if this is a commit comment, can be null.\n"
  },
  {
    "path": "devstats/config/docs/tables/gha_commits.md",
    "content": "# `gha_commits` table\n\n- This table contains commits data.\n- This is a variable table, for details check [variable table](https://github.com/cncf/devstats/blob/master/docs/tables/variable_table.md).\n- Commits are created during the standard GitHub archives import from JSON [here (pre-2015 format)](https://github.com/cncf/devstats/blob/master/cmd/gha2db/gha2db.go#L910-L926) and [here (current format)](https://github.com/cncf/devstats/blob/master/cmd/gha2db/gha2db.go#L1162-L1178).\n- Commit contain actor name (not login) as reported by `git commit`, so it can be difficult to map to a real actor (somebody can have non-standard name on a local computer), but we also have a GitHub login of actor who made a `git push` to a GitHub repository.\n- Usually the same person makes commit and push, so this maps \"good enough\" - we can also search for actor name, but only actors imported by affiliations tool have a name, for details see [actors table](https://github.com/cncf/devstats/blob/master/docs/tables/gha_actors.md).\n- It contains about 209K records as of Feb 2018, 148K distinct commit SHAs. It means that there are about 209/148 = 1.41 events/commit. So about 41% of commits are referenced more than once.\n- It is created here: [structure.go](https://github.com/cncf/devstats/blob/master/structure.go#L265-L295).\n- You can see its SQL structure here: [structure.sql](https://github.com/cncf/devstats/blob/master/structure.sql#L159-L171).\n- Its primary key is `(sha, event_id)`.\n- Values from this table are often duplicated in other tables (to speedup processing) as `dup_actor_id`, `dup_actor_login`.\n\n# Columns\n\n- `sha`: commits unique SHA.\n- `event_id`: GitHub event ID refering to this commit.\n- `author_name`: Author name as provided by commiter when doing `git commit`. This is *NOT* a GitHub login.\n- `encrypted_email`: Author email encrypted by GitHub, for example `76f8b7dc8ef32a26553fcbdb25b75cb20f767b8e@gmail.com`.\n- `message`: Commit message.\n- `is_distinct`: boolean true/false.\n- `author_id`: commit author, can be null.\n- `committer_id`: committer, can be null.\n- `author_email`: commit author email, can be empty.\n- `committer_name`: committer name, can be empty.\n- `committer_email`: committer email, can be empty.\n- `dup_author_login`: commit author login, can be empty.\n- `dup_committer_login`: committer login, can be empty.\n\n# Duplicates from [gha_events](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events.md) table\n\nThose columns duplicate value from a GitHub event refering to this column `event_id`.\n- `dup_actor_id`: event's actor ID.\n- `dup_actor_login`: event's GitHub login (actor who pushed this commit).\n- `dup_repo_id`: event's GitHub repository ID.\n- `dup_repo_name`: event's GitHub's repository name (note that repository name can change in thime, while repository ID is not changing).\n- `dup_type`: event's type like PushEvent, PullRequestEvent, ...\n- `dup_created_at`: event's creation date.\n"
  },
  {
    "path": "devstats/config/docs/tables/gha_commits_files.md",
    "content": "# `gha_commits_files` table\n\n- This table holds commit's files (added, removed, modified etc.)\n- We're listing all yet unprocessed commits using [util_sql/list_unprocessed_commits.sql](https://github.com/cncf/devstats/blob/master/util_sql/list_unprocessed_commits.sql) [here](https://github.com/cncf/devstats/blob/master/cmd/get_repos/get_repos.go#L468-L495).\n- Commit's files are created by `git` datasource using [git_files.sh](https://github.com/cncf/devstats/blob/master/git/git_files.sh) [here](https://github.com/cncf/devstats/blob/master/cmd/get_repos/get_repos.go#L356-L441).\n- This generates data for this table.\n- Some commits has no files modifed, they're marked as `skip commits` and their SHAs are put in `gha_skip_commits` table, info [here](https://github.com/cncf/devstats/blob/master/docs/tables/gha_skip_commits.md).\n- It adds new commit's files every hour by running [get_repos tool](https://github.com/cncf/devstats/blob/master/cmd/get_repos/get_repos.go).\n- This is a special table, not created by any GitHub archive (GHA) event. Its purpose is to hold all commits' files.\n- This is a const table, values are inserted once and doesn't change, see [const table](https://github.com/cncf/devstats/blob/master/docs/tables/const_table.md).\n- It contains about 534K records as of Feb 2018.\n- It is created here: [structure.go](https://github.com/cncf/devstats/blob/master/structure.go#L965-L978).\n- You can see its SQL structure here: [structure.sql](https://github.com/cncf/devstats/blob/master/structure.sql#L180-L185).\n- Its primary key is `(sha, path)`.\n\n# Columns\n\n- `sha`: commit SHA.\n- `path`: file path, it doesn't include repo name, so can be something like `dir/file.ext`.\n- `size`: file size at commit's date.\n- `dt`: commit's date.\n"
  },
  {
    "path": "devstats/config/docs/tables/gha_events.md",
    "content": "# `gha_events` table\n\n- This is the main GHA (GitHub archives) table. It represents single event.\n- Each GHA JSON contains single GitHub event, and singe GHA hour archive file and a bunch (about 80k) JSONS (events) that happened this hour (I mean events on all GitHup repos, not only Kubernetes).\n- This table holds all GitHub events. Other tables defined as [variable](https://github.com/cncf/devstats/blob/master/docs/tables/variable_table.md) have `event_id` as a part of their primary key.\n- This is a const table, values are inserted once and doesn't change, see [const table](https://github.com/cncf/devstats/blob/master/docs/tables/const_table.md).\n- Events are created during standard GitHub archives import from JSON [here (pre-2015 format)](https://github.com/cncf/devstats/blob/master/cmd/gha2db/gha2db.go#L791-L809) or [here (current format)](https://github.com/cncf/devstats/blob/master/cmd/gha2db/gha2db.go#L1056-L1074).\n- Old (pre-20150 GitHub events have no ID, it is generated artificially [here](https://github.com/cncf/devstats/blob/master/cmd/gha2db/gha2db.go#L1355), old format ID are < 0.\n- For details about pre-2015 and current format check [analysis](https://github.com/cncf/devstats/tree/master/analysis), per-2015 data is prefixed with `old_`, current format is prefixed with `new_`. Example old and new JSONs [here](https://github.com/cncf/devstats/tree/master/jsons).\n- It contains about 1.8M records as of Feb 2018.\n- It is created here: [structure.go](https://github.com/cncf/devstats/blob/master/structure.go#L23-L40).\n- You can see its SQL structure here: [structure.sql](https://github.com/cncf/devstats/blob/master/structure.sql#L205-L216).\n- Its primary key is `id`.\n- Values from this table are often duplicated in other tables (to speedup processing) as `dup_type`, `dup_created_at`.\n- [ghaapi2db](https://github.com/cncf/devstats/tree/master/cmd/ghapi2db/ghapi2db.go) tool is creating events of type `ArtificialEvent` when it detects that some issue/PR has wrong labels set or wrong milestone.\n- It happens when somebody changes label and/or milestone without commenting on the issue, or after commenting. Change label/milestone is not creating any GitHub event, so the final issue/PR state can be wrong.\n- Each GitHub event have single (1:1) entry in [gha_payloads](https://github.com/cncf/devstats/blob/master/docs/tables/gha_payloads.md) table.\n\n# Columns\n\n- `id`: GitHub event ID.\n- `type`: GitHub event type, can be: PullRequestReviewCommentEvent, MemberEvent, PushEvent, ReleaseEvent, CreateEvent, GollumEvent, TeamAddEvent, DeleteEvent, PublicEvent, ForkEvent, PullRequestEvent, IssuesEvent, WatchEvent, IssueCommentEvent, CommitCommentEvent.\n- `actor_id`: GitHub actor ID (actor who created this event).\n- `repo_id`: GitHub repository ID.\n- `public`: Is this event public? Always `true` because private events are not gathered by GHA (GitHub Archives).\n- `created_at`: Event creation date.\n- `org_id`: GitHub organization ID. Can be null.\n- `forkee_id`: This is a old repository ID (for per-2015 events, for current format it is null).\n- `dup_actor_login`: Duplicated GitHub actor login (from [gha_actors](https://github.com/cncf/devstats/blob/master/docs/tables/gha_actors.md) table).\n- `dup_repo_name`: Duplicated GitHub repository name (note that repository name can change in time, but repository ID remains the same, see [gha_repos](https://github.com/cncf/devstats/blob/master/docs/tables/gha_repos.md) table).\n"
  },
  {
    "path": "devstats/config/docs/tables/gha_events_commits_files.md",
    "content": "# `gha_events_commits_files` table\n\n- This table holds commit's files connected with GitHub event additional data.\n- It uses `gha_skip_commits` table, info [here](https://github.com/cncf/devstats/blob/master/docs/tables/gha_skip_commits.md) as an input.\n- Events commits files are generated using [util_sql/create_events_commits.sql](https://github.com/cncf/devstats/blob/master/util_sql/create_events_commits.sql) [here](https://github.com/cncf/devstats/blob/master/cmd/get_repos/get_repos.go#L566-L592).\n- It adds new event's commit's files every hour, creating full files paths that include repository name.\n- It needs postprocessing that is defined in a standard project's setup script. It is updated in postprocess every hour.\n- Setup scripts is called by main Postgres init script, for Kubernetes it is: [kubernetes/psql.sh](https://github.com/cncf/devstats/blob/master/kubernetes/psql.sh#L14)).\n- It runs [kubernetes/setup_scripts.sh](https://github.com/cncf/devstats/blob/master/kubernetes/setup_scripts.sh#L6-L8). This is `{{projectname}}/setup_scripts.sh` for other projects.\n- SQL script [util_sql/postprocess_repo_groups.sql](https://github.com/cncf/devstats/blob/master/util_sql/postprocess_repo_groups.sql) is scheduled to run every hour by: [util_sql/repo_groups_postprocess_script.sql](https://github.com/cncf/devstats/blob/master/util_sql/repo_groups_postprocess_script.sql).\n- SQL script [util_sql/postprocess_repo_groups_from_repos.sql](https://github.com/cncf/devstats/blob/master/util_sql/postprocess_repo_groups_from_repos.sql) is scheduled to run every hour by: [util_sql/repo_groups_postprocess_script_from_repos.sql](https://github.com/cncf/devstats/blob/master/util_sql/repo_groups_postprocess_script_from_repos.sql).\n- Those scripts first try to update commit event file's repository group first using file level granularity (1st script) and then fall back to repo level granularity (2nd script).\n- They are called by [this code](https://github.com/cncf/devstats/blob/master/structure.go#L1162-L1187) that uses [gha_postprocess_scripts](https://github.com/cncf/devstats/blob/master/docs/tables/gha_postprocess_scripts.md) table to get postprocess scripts to run. One of them, defined above creates entries for `gha_issues_events_labels` table every hour.\n- This is a special table, not created by any GitHub archive (GHA) event. Its purpose is to hold all commits' files connected with events data.\n- It contains about 1.2M records as of Feb 2018.\n- It is created here: [structure.go](https://github.com/cncf/devstats/blob/master/structure.go#L979-L998).\n- You can see its SQL structure here: [structure.sql](https://github.com/cncf/devstats/blob/master/structure.sql#L225-L235).\n- Its primary key is `(sha, event_id, path)`.\n\n# Columns\n\n- `sha`: commit SHA.\n- `event_id`: GitHub event ID that refers to this commit file.\n- `path`: full path generated as repo's path (like org/repo) and file's path (like dir/file.ext) --> `org/repo/dir/file.ext`.\n- `size`: file size at commit's date.\n- `dt`: commit's date.\n- `repo_group`: repository group - this is updated every hour based on commit's file's repository's repo group and (possibly for Kubernetes) file level granularity repository groups definitions, see [repo groups](https://github.com/cncf/devstats/blob/master/docs/repository_groups.md).\n- `dup_repo_id`:  GitHub repository ID of given commit's file\n- `dup_repo_name`: GitHub repository name, please note that repo name can change in time, but repo ID remains the same. Full path can contain historical repo names.\n- `dup_type`: GitHub event type, can be: PullRequestReviewCommentEvent, MemberEvent, PushEvent, ReleaseEvent, CreateEvent, GollumEvent, TeamAddEvent, DeleteEvent, PublicEvent, ForkEvent, PullRequestEvent, IssuesEvent, WatchEvent, IssueCommentEvent, CommitCommentEvent.\n- `dup_created_at`: GitHub event's creation date.\n- Columns starting with `dup_` are copied from `gha_events` table entry, info [here](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events.md).\n"
  },
  {
    "path": "devstats/config/docs/tables/gha_issues.md",
    "content": "# `gha_issues` table\n\n- This is a table that holds GitHub issue state at a given point in time (`event_id` refers to [gha_events](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events.md)).\n- This is a variable table, for details check [variable table](https://github.com/cncf/devstats/blob/master/docs/tables/variable_table.md).\n- [ghaapi2db](https://github.com/cncf/devstats/tree/master/cmd/ghapi2db/ghapi2db.go) tool is creating new issue state entries (artificial) when it detects that some issue/PR has wrong labels set or wrong milestone.\n- It happens when somebody changes label and/or milestone without commenting on the issue, or after commenting. Change label/milestone is not creating any GitHub event, so the final issue/PR state can be wrong.\n- It contains about 1.2M records but only 115K distinct issue IDs (Mar 2018 state) - this means that there are about 10 events per issue on average.\n- Its primary key is `(event_id, id)`.\n- There is a special [compute table](https://github.com/cncf/devstats/blob/master/docs/tables/gha_issues_pull_requests.md) that connects Issues with PRs.\n\n# Columns\n\nMost important columns are:\n- `id`: GitHub Issue ID.\n- `event_id`: GitHub event ID, see [gha_events](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events.md).\n- `body`: issue text.\n- `created_at`: Issue creation date.\n- `closed_at`: Issue close date. Note that this table holds Issue state in time, so for some event this date will be null, for some other it will be set. If issue was closed/opened multiple times - all historical close dates will be stored here.\n- `milestone_id`: Milestone ID, see [gha_milestones](https://github.com/cncf/devstats/blob/master/docs/tables/gha_milestones.md).\n- `number`: Issue number - this is an unique number within single repository.\n- `state`: `open` or `closed` at given GitHub event `event_id` date.\n- `title`: Issue title.\n- `user_id`: GitHub user ID performing action on the issue.\n- `assignee_id`: Assigned GitHub user, can be null.\n- `is_pull_request`: true - this is a PR, false - this is an Issue. PRs are stored on this table too, but they have an additional record in [gha_pull_requests](https://github.com/cncf/devstats/blob/master/docs/tables/gha_pull_requests.md).\n"
  },
  {
    "path": "devstats/config/docs/tables/gha_issues_events_labels.md",
    "content": "# `gha_issues_events_labels` table\n\n- This is a compute table, that contains shortcuts to issues labels connected with events (for metrics speedup).\n- It contains many duplicated columns to allow queries on this single table instead of joins.\n- It needs postprocessing that is defined in a standard project's setup script. It is updated in postprocess every hour.\n- Setup scripts is called by main Postgres init script, for Kubernetes it is: [kubernetes/psql.sh](https://github.com/cncf/devstats/blob/master/kubernetes/psql.sh#L14)).\n- It runs [kubernetes/setup_scripts.sh](https://github.com/cncf/devstats/blob/master/kubernetes/setup_scripts.sh#L4). This is `{{projectname}}/setup_scripts.sh` for other projects.\n- SQL script [util_sql/postprocess_labels.sql](https://github.com/cncf/devstats/blob/master/util_sql/postprocess_labels.sql) is scheduled to run every hour by: [util_sql/default_postprocess_scripts.sql](https://github.com/cncf/devstats/blob/master/util_sql/default_postprocess_scripts.sql#L2).\n- It is called by [this code](https://github.com/cncf/devstats/blob/master/structure.go#L1162-L1187) that uses [gha_postprocess_scripts](https://github.com/cncf/devstats/blob/master/docs/tables/gha_postprocess_scripts.md) table to get postprocess scripts to run. One of them, defined above creates entries for `gha_issues_events_labels` table every hour.\n- It contains about 3.6M records as of Feb 2018.\n- It is created here: [structure.go](https://github.com/cncf/devstats/blob/master/structure.go#L1077-L1096).\n- You can see its SQL structure here: [structure.sql](https://github.com/cncf/devstats/blob/master/structure.sql#L333-L345).\n- Its primary key is `(issue_id, label_id, event_id)`.\n- It contains data from [labels](https://github.com/cncf/devstats/blob/master/docs/tables/gha_labels.md), [issue_labels](https://github.com/cncf/devstats/blob/master/docs/tables/gha_issues_labels.md) tables.\n\n# Columns\n\n- `event_id`: GitHub event ID. This ID is artificially generated for pre-2015 events.\n- `issue_id`: GitHub issue ID. See [gha_issues](https://github.com/cncf/devstats/blob/master/docs/tables/gha_issues.md) table.\n- `label_id`: GitHub label ID (can be < 0 for pre-2015 labels). See [gha_labels](https://github.com/cncf/devstats/blob/master/docs/tables/gha_labels.md).\n- `label_name`: Label name duplicate from [gha_labels](https://github.com/cncf/devstats/blob/master/docs/tables/gha_gha_labels.md) table.\n- `created_at`: Event creation date, comes from [gha_events](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events.md).\n- `actor_id`: Event's actor name.\n- `actor_login`: Event's actor login (this comes from [gha_issues_labels](https://github.com/cncf/devstats/blob/master/docs/tables/gha_issues_labels.md) <- [gha_events](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events.md) <- [gha_actors](https://github.com/cncf/devstats/blob/master/docs/tables/gha_actors.md).\n- `repo_id`: GitHub repository ID (from [gha_events](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events.md)).\n- `repo_name`: GitHub repository name (note that repository name can change in time, while repository ID cannot).\n- `type`: GitHub event type - see [gha_events](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events.md) for details.\n- `issue_number`: Issue number (this is usually a small number that is unique withing given repository).\n"
  },
  {
    "path": "devstats/config/docs/tables/gha_issues_labels.md",
    "content": "# `gha_issues_labels` table\n\n- This is a table that holds labels set on an issue/PR in a given moment in time.\n- GitHub is not generating any events when label set on an issue/PR changes (adding, removing labels).\n- When next event (like issue comment) on that issue happens (which can happen a month later) this table will contain new labels set.\n- This is a variable table, for details check [variable table](https://github.com/cncf/devstats/blob/master/docs/tables/variable_table.md).\n- It contains about 3.7M records as of Mar 2018.\n- [ghaapi2db](https://github.com/cncf/devstats/tree/master/cmd/ghapi2db/ghapi2db.go) tool is creating new labels set entries when it detects that some issue/PR has wrong labels set or wrong milestone.\n- It happens when somebody changes label and/or milestone without commenting on the issue, or after commenting. Change label/milestone is not creating any GitHub event, so the final issue/PR state can be wrong.\n- It is created here: [structure.go](https://github.com/cncf/devstats/blob/master/structure.go#L533-L554).\n- You can see its SQL structure here: [structure.sql](https://github.com/cncf/devstats/blob/master/structure.sql#L354-L366).\n- Its primary key is `(event_id, issue_id, label_id)`.\n\n# Columns\n\nColumns starting with `dup_` are duplicated from other tables, to speedup processing and allow saving joins.\n- `issue_id`: Issue ID, see [gha_issues](https://github.com/cncf/devstats/blob/master/docs/tables/gha_issues.md).\n- `event_id`: GitHub event ID, see [gha_events](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events.md).\n- `label_id`: Label ID, see [gha_labels](https://github.com/cncf/devstats/blob/master/docs/tables/gha_labels.md).\n- `dup_actor_id`: GitHub actor ID (GitHub event creator - usually issue comment creator, not necesarilly someone who addded/removed label), see [gha_actors](https://github.com/cncf/devstats/blob/master/docs/tables/gha_actors.md).\n- `dup_actor_login`: Duplicated GitHub actor login (from [gha_actors](https://github.com/cncf/devstats/blob/master/docs/tables/gha_actors.md) table).\n- `dup_repo_id`: GitHub repository ID, see [gha_repos](https://github.com/cncf/devstats/blob/master/docs/tables/gha_repos.md).\n- `dup_repo_name`: Duplicated GitHub repository name (note that repository name can change in time, but repository ID remains the same, see [gha_repos](https://github.com/cncf/devstats/blob/master/docs/tables/gha_repos.md) table).\n- `dup_type`: GitHub event type, can be: PullRequestReviewCommentEvent, MemberEvent, PushEvent, ReleaseEvent, CreateEvent, GollumEvent, TeamAddEvent, DeleteEvent, PublicEvent, ForkEvent, PullRequestEvent, IssuesEvent, WatchEvent, IssueCommentEvent, CommitCommentEvent.\n- `dup_created_at`: Event creation date.\n- `dup_issue_number`: Issue number, see [gha_issues](https://github.com/cncf/devstats/blob/master/docs/tables/gha_issues.md).\n- `dup_label_name`: Label name, see [gha_labels](https://github.com/cncf/devstats/blob/master/docs/tables/gha_labels.md).\n"
  },
  {
    "path": "devstats/config/docs/tables/gha_issues_pull_requests.md",
    "content": "# `gha_issues_pull_requests` table\n\n- This is a compute table, that contains data to connect issues with PRs.\n- It contains issue ID, PR ID and shared number (PR & Issue).\n- It contains duplicated columns to allow queries on this single table instead of joins.\n- It needs postprocessing that is defined in a standard project's setup script. It is updated in postprocess every hour.\n- Setup scripts is called by main Postgres init script, for Kubernetes it is: [kubernetes/psql.sh](https://github.com/cncf/devstats/blob/master/kubernetes/psql.sh#L14)).\n- It runs [kubernetes/setup_scripts.sh](https://github.com/cncf/devstats/blob/master/kubernetes/setup_scripts.sh#L4). This is `{{projectname}}/setup_scripts.sh` for other projects.\n- SQL script [util_sql/postprocess_issues_prs.sql](https://github.com/cncf/devstats/blob/master/util_sql/postprocess_issues_prs.sql) is scheduled to run every hour by: [util_sql/default_postprocess_scripts.sql](https://github.com/cncf/devstats/blob/master/util_sql/default_postprocess_scripts.sql#L3).\n- It is called by [this code](https://github.com/cncf/devstats/blob/master/structure.go#L1162-L1187) that uses [gha_postprocess_scripts](https://github.com/cncf/devstats/blob/master/docs/tables/gha_postprocess_scripts.md) table to get postprocess scripts to run. One of them, defined above creates entries for `gha_issues_events_labels` table every hour.\n- It contains about 69k records as of Mar 2018.\n- It is created here: [structure.go](https://github.com/cncf/devstats/blob/master/structure.go#L1135-L1149).\n- You can see its SQL structure here: [structure.sql](https://github.com/cncf/devstats/blob/master/structure.sql#L375-L382).\n- It has no primary kay, it only connects Issues with PRs.\n- It contains data from [issues](https://github.com/cncf/devstats/blob/master/docs/tables/gha_issues.md), [PRs](https://github.com/cncf/devstats/blob/master/docs/tables/gha_pull_requests.md) tables.\n- When adding a project to an existing database that contains merge result from multiple projects, you need to manually remove eventual duplicates using: [./devel/remove_db_dups.sh](https://github.com/cncf/devstats/blob/master/devel/remove_db_dups.sh), as suggested by [cmd/merge_dbs/merge_dbs.go](https://github.com/cncf/devstats/blob/master/cmd/merge_dbs/merge_dbs.go#L197).\n\n# Columns\n\n- `issue_id`: GitHub issue ID. See [gha_issues](https://github.com/cncf/devstats/blob/master/docs/tables/gha_issues.md) table.\n- `pull_request_id`: GitHub Pull Request ID. See [gha_pull_requests](https://github.com/cncf/devstats/blob/master/docs/tables/gha_pull_requests.md) table.\n- `number`: This is both Issue and PRs number. You can use #number in GitHub to refer to PR/Issue.\n- `repo_id`: GitHub repository ID (from [gha_events](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events.md)).\n- `repo_name`: GitHub repository name (note that repository name can change in time, while repository ID cannot).\n- `created_at`: Event creation date, comes from [gha_events](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events.md).\n"
  },
  {
    "path": "devstats/config/docs/tables/gha_labels.md",
    "content": "# `gha_labels` table\n\n- This table holds GitHub labels.\n- This is a const table, values are inserted once and doesn't change, see [const table](https://github.com/cncf/devstats/blob/master/docs/tables/const_table.md).\n- Labels are created during standard GitHub archives import from JSON [here](https://github.com/cncf/devstats/blob/master/cmd/gha2db/gha2db.go#L1277-L1282).\n- In pre-2015 events labels [have no ID](https://github.com/cncf/devstats/blob/master/cmd/gha2db/gha2db.go#L1272).\n- For any label found in JSON payload we're searching for existing label using name & color. If label is not found, it receives [artificial negative ID](https://github.com/cncf/devstats/blob/master/cmd/gha2db/gha2db.go#L282), see [here](https://github.com/cncf/devstats/blob/master/cmd/gha2db/gha2db.go#L263-L285).\n- It contains about 2.6k records as of Mar 2018.\n- It is created here: [structure.go](https://github.com/cncf/devstats/blob/master/structure.go#L515-L531).\n- You can see its SQL structure here: [structure.sql](https://github.com/cncf/devstats/blob/master/structure.sql#L391-L396).\n- Its primary key is `(id)`.\n- Values from this table are sometimes duplicated in other tables (to speedup processing) as `dup_label_name`, `dup_label_id` or `label_id`.\n\n# Columns\n\n- `id`: GitHub label ID.\n- `name`: GitHub label name.\n- `color`: Color as 6 hex digits: RRGGBB, R,G,B from {0, 1, 2, .., 9, a, b, c, d, f}.\n- `is_default`: Not used, can be null. True - label is default, False/null - label is not default.\n"
  },
  {
    "path": "devstats/config/docs/tables/gha_milestones.md",
    "content": "# `gha_milestones` table\n\n- This is a table that holds GitHub milestone state at a given point in time (`event_id` refers to [gha_events](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events.md)).\n- This is a variable table, for details check [variable table](https://github.com/cncf/devstats/blob/master/docs/tables/variable_table.md).\n- It contains about 265K records but only 351 distinct milestone IDs (Mar 2018 state) - this means that there are about 750 events per milestone on average.\n- Its primary key is `(event_id, id)`.\n\n# Columns\n\nMost important columns are:\n- `id`: GitHub milestone ID.\n- `event_id`: GitHub event ID, see [gha_events](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events.md).\n- `description`: milestone description.\n- `created_at`: Milestone creation date.\n- `closed_at`: Milestone close date. Note that this table holds milestone state in time, so for some event this date will be null, for some other it will be set.\n- `due_at`: Milestone due date. Note that this table holds milestone state in time, so  this date can change in time (for example when milestone due date is moved to next month etc.).\n- `number`: Milestone number.\n- `state`: `open` or `closed` at given GitHub event `event_id` date.\n- `title`: Milestone title.\n- `creator_id`: GitHub user ID who created this milestone.\n- `closed_issues`: number of issues closed for this milestone at given point of time `event_id`.\n- `open_issues`: number of open issues for this milestone at given point of time `event_id`.\n"
  },
  {
    "path": "devstats/config/docs/tables/gha_orgs.md",
    "content": "# `gha_orgs` table\n\n- This table holds GitHub organizations.\n- This is a const table, values are inserted once and doesn't change, see [const table](https://github.com/cncf/devstats/blob/master/docs/tables/const_table.md).\n- Orgs are created during standard GitHub archives import from JSON [here](https://github.com/cncf/devstats/blob/master/cmd/gha2db/gha2db.go#L47-L60).\n- Org name can change name in time (probably?), but organization ID remains the same in this case.\n- It contains 6 records as of Mar 2018.\n- It is created here: [structure.go](https://github.com/cncf/devstats/blob/master/structure.go#L171-L181).\n- You can see its SQL structure here: [structure.sql](https://github.com/cncf/devstats/blob/master/structure.sql#L472-L475).\n- Its primary key is `id`.\n\n# Columns\n\n- `id`: GitHub organization ID.\n- `login`: GitHub organization login: it can be organization name (like `kubernetes`) or GitHub user name.\n"
  },
  {
    "path": "devstats/config/docs/tables/gha_payloads.md",
    "content": "# `gha_payloads` table\n\n- This is the main GHA (GitHub archives), every GitHub event contain payload. This event ID is this table's primary key `event_id`.\n- This table serves to connect various payload structures for different event types - like connect Issue with Comment for Issue Comment event etc.\n- This is a const table, values are inserted once and doesn't change, see [const table](https://github.com/cncf/devstats/blob/master/docs/tables/const_table.md).\n- Payloads are created during standard GitHub archives import from JSON [here (pre-2015 format)](https://github.com/cncf/devstats/blob/master/cmd/gha2db/gha2db.go#L839) or [here (current format)](https://github.com/cncf/devstats/blob/master/cmd/gha2db/gha2db.go#L1105).\n- Old (pre-20150 GitHub events have no ID, it is generated artificially [here](https://github.com/cncf/devstats/blob/master/cmd/gha2db/gha2db.go#L1355), old format ID are < 0.\n- It contains about 1.8M records as of Feb 2018.\n- It is created here: [structure.go](https://github.com/cncf/devstats/blob/master/structure.go#L188-L236).\n- You can see its SQL structure here: [structure.sql](https://github.com/cncf/devstats/blob/master/structure.sql#L504-L529).\n- [ghaapi2db](https://github.com/cncf/devstats/tree/master/cmd/ghapi2db/ghapi2db.go) tool is creating events of type `ArtificialEvent` when it detects that some issue/PR has wrong labels set or wrong milestone.\n- It happens when somebody changes label and/or milestone without commenting on the issue, or after commenting. Change label/milestone is not creating any GitHub event, so the final issue/PR state can be wrong.\n- Artificial event's payloads are created too.\n- Its primary key is GitHub event ID `event_id`.\n- Each payload have single (1:1) entry in [gha_events](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events.md) table.\n\n# Columns\n\nMost important columns are (most of them are only filled for a specific event type, so most can be null - with the exception of `event_id` and those starting with `dup_` which are copied from [gha_actors](https://github.com/cncf/devstats/blob/master/docs/tables/gha_actors.md), [gha_repos](https://github.com/cncf/devstats/blob/master/docs/tables/gha_repos.md) and [gha_events](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events.md)):\n- `event_id`: GitHub event ID.\n- `dup_type`: GitHub event type, can be: PullRequestReviewCommentEvent, MemberEvent, PushEvent, ReleaseEvent, CreateEvent, GollumEvent, TeamAddEvent, DeleteEvent, PublicEvent, ForkEvent, PullRequestEvent, IssuesEvent, WatchEvent, IssueCommentEvent, CommitCommentEvent.\n- `head`: HEAD branch SHA.\n- `action`: Action type, defined for some event types, can be null or `created`, `published`, `labeled`, `closed`, `opened`, `started`, `reopened`, `added`.\n- `issue_id`: Issue ID (for Issue related events), see [gha_issues](https://github.com/cncf/devstats/blob/master/docs/tables/gha_issues.md).\n- `pull_request_id`: Pull Request ID (for PR related events), see [gha_pull_requests](https://github.com/cncf/devstats/blob/master/docs/tables/gha_pull_requests.md).\n- `comment_id`: Comment ID (for comment related events), see [gha_comments](https://github.com/cncf/devstats/blob/master/docs/tables/gha_comments.md).\n- `number`: Issue number (only for Issues related event types) this is an unique number within single repository.\n- `forkee_id`: Forkee ID (not used in any dashbord yet, so no docs yet) - `gha_forkee` table, see [structure.go](https://github.com/cncf/devstats/blob/master/structure.go).\n- `release_id`: Release ID (not used in any dashbord yet, so no docs yet) - `gha_releases` table, see [structure.go](https://github.com/cncf/devstats/blob/master/structure.go).\n- `commit`: Commit's SHA, see [gha_commits](https://github.com/cncf/devstats/blob/master/docs/tables/gha_commits.md).\n- `dup_actor_id`: GitHub actor ID (actor who created this event).\n- `dup_actor_login`: Duplicated GitHub actor login (from [gha_actors](https://github.com/cncf/devstats/blob/master/docs/tables/gha_actors.md) table).\n- `dup_repo_id`: GitHub repository ID.\n- `dup_repo_name`: Duplicated GitHub repository name (note that repository name can change in time, but repository ID remains the same, see [gha_repos](https://github.com/cncf/devstats/blob/master/docs/tables/gha_repos.md) table).\n- `dup_created_at`: Event creation date.\n"
  },
  {
    "path": "devstats/config/docs/tables/gha_postprocess_scripts.md",
    "content": "# `gha_postprocess_scripts` table\n\n- This is a special table, not created by any GitHub archive (GHA) event.\n- It contains informations about which scripts should be executed every hour after data from GitHub archives is fetched for the next hour.\n- Records in this table are inserted once, as a part of `{{project_name}}/psql.sh` (for Kubernetes it is [kubernetes/psql.sh](https://github.com/cncf/devstats/blob/master/kubernetes/psql.sh#L14)).\n- For every project `{{project_name}}/setup_scripts.sh` is used to add records to this table (for Kubernetes it is [kubernetes/setup_scripts.sh](https://github.com/cncf/devstats/blob/master/kubernetes/setup_scripts.sh)).\n- It contains just few records (5 for Kubernetes, 4 for other projects).\n- It is created here: [structure.go](https://github.com/cncf/devstats/blob/master/structure.go#L1031-L1043).\n- You can see its SQL structure here: [structure.sql](https://github.com/cncf/devstats/blob/master/structure.sql#L538-L541).\n- This table is used to create/update values in [gha_issues_events_labels](https://github.com/cncf/devstats/blob/master/docs/tables/gha_issues_events_labels.md), [gha_texts](https://github.com/cncf/devstats/blob/master/docs/tables/gha_texts.md), [gha_events_commits_files](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events_commits_files.md), [gha_issues_pull_requests](https://github.com/cncf/devstats/blob/master/docs/tables/gha_issues_pull_requests.md).\n- This table is used by [this code](https://github.com/cncf/devstats/blob/master/structure.go#L1162-L1187) get postprocess scripts to run.\n- Default postprocess scripts are defined by [kubernetes/setup_scripts.sh](https://github.com/cncf/devstats/blob/master/kubernetes/setup_scripts.sh#L4). This is `{{projectname}}/setup_scripts.sh` for other projects.\n- Its primary key is `(ord, path)`.\n\n# Columns\n\n- `ord`: Ordinal number used to decide order of scripts to run.\n- `path`: Script path, for example `util_sql/postprocess_repo_groups.sql`.\n"
  },
  {
    "path": "devstats/config/docs/tables/gha_pull_requests.md",
    "content": "# `gha_pull_requests` table\n\n- This is a table that holds GitHub PR state at a given point in time (`event_id` refers to [gha_events](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events.md)).\n- This is a variable table, for details check [variable table](https://github.com/cncf/devstats/blob/master/docs/tables/variable_table.md).\n- It contains about 403K records but only 76K distinct PR IDs (Mar 2018 state) - this means that there are about 5-6 events per PR on average.\n- Its primary key is `(event_id, id)`.\n- There is a special [compute table](https://github.com/cncf/devstats/blob/master/docs/tables/gha_issues_pull_requests.md) that connects Issues with PRs.\n\n# Columns\n\nMost important columns are:\n- `id`: GitHub Pull Request ID.\n- `event_id`: GitHub event ID, see [gha_events](https://github.com/cncf/devstats/blob/master/docs/tables/gha_events.md).\n- `body`: PR text.\n- `created_at`: PR creation date.\n- `closed_at`: PR close date. Note that this table holds PR state in time, so for some event this date will be null, for some other it will be set.\n- `merged_at`: PR merge date (can be null for all events). Note that this table holds PR state in time, so for some event this date will be null, for some other it will be set.\n- `user_id`: GitHub user ID performing action on the issue.\n- `milestone_id`: Milestone ID, see [gha_milestones](https://github.com/cncf/devstats/blob/master/docs/tables/gha_milestones.md).\n- `number`: PR number - this is an unique number within single repository. There will be an entry in [gha_issues_pull_requests](https://github.com/cncf/devstats/blob/master/docs/tables/gha_issues_pull_requests.md) and [gha_issues](https://github.com/cncf/devstats/blob/master/docs/tables/gha_issues.md) with the same `number` and `repo_id` - PRs are stored on that tables too.\n- `state`: `open` or `closed` at given GitHub event `event_id` date.\n- `merged`: PR merged state at given `event_id` time, can be true (merged) or false, null (not merged).\n- `merged_by_id`: GitHub user who merged this PR or null.\n- `merge_commit_sha`: SHA of a merge commit, if merged, see [gha_commits](https://github.com/cncf/devstats/blob/master/docs/tables/gha_commits.md).\n- `title`: Issue title.\n- `assignee_id`: Assigned GitHub user, can be null.\n- `base_sha`: PRs base branch SHA, see [gha_commits](https://github.com/cncf/devstats/blob/master/docs/tables/gha_commits.md).\n- `head_sha`: PRs SHA, see [gha_commits](https://github.com/cncf/devstats/blob/master/docs/tables/gha_commits.md).\n"
  },
  {
    "path": "devstats/config/docs/tables/gha_repos.md",
    "content": "# `gha_repos` table\n\n- This table holds GitHub repositories.\n- This is a const table, values are inserted once and doesn't change, see [const table](https://github.com/cncf/devstats/blob/master/docs/tables/const_table.md).\n- Repos are created during standard GitHub archives import from JSON [here](https://github.com/cncf/devstats/blob/master/cmd/gha2db/gha2db.go#L34-L44).\n- Repo can change name in time, but repo ID remains the same in this case.\n- Repositories have special groupping columns: `alias` and `repo_group`. Alias can be used to group the same repo (different names in time but the same ID) under the same `alias`.\n- Usually alias refers to most recent repo name plus eventually some special names for multiple repositories (can be defined per project), but usually all of repos from the same alias has the same `id`.\n- See [example](https://github.com/cncf/devstats/blob/master/scripts/prometheus/repo_groups.sql#L1-L20) to see typical repository aliases definition.\n- `repo_group` is used in many dashboards to grroup similar repositories under some special name. Repository groups are setup once by `{{project_name}}/setup_repo_groups.sh`.\n- For Kubernetes it is: [kubernetes/psql.sh](https://github.com/cncf/devstats/blob/master/kubernetes/psql.sh#L13)). It calls [kubernetes/setup_repo_groups.sh](https://github.com/cncf/devstats/blob/master/kubernetes/setup_repo_groups.sh)\n- This in turn executes SQL script: [scripts/kubernetes/repo_groups.sql](https://github.com/cncf/devstats/blob/master/scripts/kubernetes/repo_groups.sql). Each project can have its own project-specific aliases/repo groups definitions.\n- It contains 135 records as of Mar 2018.\n- It is created here: [structure.go](https://github.com/cncf/devstats/blob/master/structure.go#L137-L157).\n- You can see its SQL structure here: [structure.sql](https://github.com/cncf/devstats/blob/master/structure.sql#L665-L672).\n- Its primary key is `(id, name)`.\n- Values from this table are often duplicated in other tables (to speedup processing) as `dup_repo_id`, `dup_repo_name`.\n\n# Columns\n\n- `id`: GitHub repository ID.\n- `name`: GitHub repository name, can change in time, but ID remains the same then.\n- `org_id`: GitHub organization ID (can be null) see [gha_orgs](https://github.com/cncf/devstats/blob/master/docs/tables/gha_orgs.md).\n- `org_login`: GitHub organization name duplicated from `gha_orgs` table (can be null). This can be organization name or GitHub username.\n- `repo_group`: Artificial column, updated by specific per-project scripts.\n- `alias`: Artificial column, updated by specific per-project scripts. Usually used to keep the same name for the same repo, for entire repo name change history.\n"
  },
  {
    "path": "devstats/config/docs/tables/gha_skip_commits.md",
    "content": "# `gha_skip_commits` table\n\n- Table is used to store invalid SHAs, to skip processing them again.\n- This is a const table, values are inserted once and doesn't change, see [const table](https://github.com/cncf/devstats/blob/master/docs/tables/const_table.md).\n- We're listing all yet unprocessed commits using [util_sql/list_unprocessed_commits.sql](https://github.com/cncf/devstats/blob/master/util_sql/list_unprocessed_commits.sql) [here](https://github.com/cncf/devstats/blob/master/cmd/get_repos/get_repos.go#L468-L495).\n- More details about commits processing [here](https://github.com/cncf/devstats/blob/master/docs/tables/gha_commits_files.md).\n- Some commits are merge commits (skipped) or have no files modifed, or only refer to files that are marked to skip, or cannot be found etc. Their SHAs are put in this table. This is a part of commits sync that happens every hour.\n- Files that are skipped are defined per project with `files_skip_pattern`, see yaml definition [here](https://github.com/cncf/devstats/blob/master/gha.go#L26).\n- For Kubernetes it is defined [here](https://github.com/cncf/devstats/blob/master/projects.yaml#L13). Exclude regexp is `(^|/)_?(vendor|Godeps|_workspace)/` - it tries to exclude any work done on external packages. \n- To see code that excludes commit files, search for `filesSkipPattern` [mostly here](https://github.com/cncf/devstats/blob/master/cmd/get_repos/get_repos.go#L405) and [here](https://github.com/cncf/devstats/blob/master/cmd/get_repos/get_repos.go#L527-L537).\n- If commit has no files after filtering excluded ones, its SHA is added to `gha_skip_commits` table.\n- This is a special table, not created by any GitHub archive (GHA) event.\n- It contains about 264K records as of Feb 2018.\n- It is created here: [structure.go](https://github.com/cncf/devstats/blob/master/structure.go#L1000-L1009).\n- You can see its SQL structure here: [structure.sql](https://github.com/cncf/devstats/blob/master/structure.sql#L681-L683).\n- Its primary key is `sha`.\n\n# Columns\n\n- `sha`: commit SHA.\n- `dt`: date when this commit was marked as skipped.\n"
  },
  {
    "path": "devstats/config/docs/tables/gha_texts.md",
    "content": "# `gha_texts` table\n\n- This is a special table, not created by any GitHub archive (GHA) event. Its purpose is to hold all texts entered by all actors on all Kubernetes repos.\n- It contains about 4.6M records as of Feb 2018.\n- It is created here: [structure.go](https://github.com/cncf/devstats/blob/master/structure.go#L1046-L1073).\n- You can see its SQL structure here: [structure.sql](https://github.com/cncf/devstats/blob/master/structure.sql#L726-L735).\n- This table is updated every hour via [util_sql/postprocess_texts.sql](https://github.com/cncf/devstats/blob/master/util_sql/postprocess_texts.sql).\n- It is called by [this code](https://github.com/cncf/devstats/blob/master/structure.go#L1162-L1187) that uses [gha_postprocess_scripts](https://github.com/cncf/devstats/blob/master/docs/tables/gha_postprocess_scripts.md) table to get postprocess scripts to run. One of them, defined above creates entries for `gha_texts` table every hour.\n- It adds all new comments, commit messages, issue titles, issue texts, PR titles, PR texts since last hour.\n- See documentation for [issues](https://github.com/cncf/devstats/blob/master/docs/tables/gha_issues.md), [PRs](https://github.com/cncf/devstats/blob/master/docs/tables/gha_pull_requests.md) and [commits](https://github.com/cncf/devstats/blob/master/docs/tables/gha_commits.md) tables.\n- This SQL script is scheduled to run every hour by: [util_sql/default_postprocess_scripts.sql](https://github.com/cncf/devstats/blob/master/util_sql/default_postprocess_scripts.sql#L1).\n- Default postprocess scripts are defined by [kubernetes/setup_scripts.sh](https://github.com/cncf/devstats/blob/master/kubernetes/setup_scripts.sh#L4). This is `{{projectname}}/setup_scripts.sh` for other projects.\n- Setup scripts is called by main Postgres init script, for kubernetes it is: [kubernetes/psql.sh](https://github.com/cncf/devstats/blob/master/kubernetes/psql.sh#L14).\n- This is a part of standard when adding new project, for adding new project please see: [adding new project](https://github.com/cncf/devstats/blob/master/ADDING_NEW_PROJECT.md).\n- When adding a project to an existing database that contains merge result from multiple projects, you need to manually remove eventual duplicates using: [./devel/remove_db_dups.sh](https://github.com/cncf/devstats/blob/master/devel/remove_db_dups.sh), as suggested by [cmd/merge_dbs/merge_dbs.go](https://github.com/cncf/devstats/blob/master/cmd/merge_dbs/merge_dbs.go#L197).\n- Informations about creating project that is a merge of other multiple projects can be found in [adding new project](https://github.com/cncf/devstats/blob/master/ADDING_NEW_PROJECT.md).\n- Its primary key isn't `event_id`, because it adds both title and body of issues and commits.\n\n# Columns\n\n- `event_id`: GitHub event ID. This ID is artificially generated for pre-2015 events.\n- `body`: text, can be very long.\n- `created_at`: date of the corresponding GitHub event.\n- `actor_id`: actor ID responsible for this text. Refers to [gha_actors](https://github.com/cncf/devstats/blob/master/docs/tables/gha_actors.md) table.\n- `actor_login`: actor GitHub login responsible for this text. Refers to [gha_actors](https://github.com/cncf/devstats/blob/master/docs/tables/gha_actors.md) table.\n- `repo_id`: GitHub repository ID where this text was added. Refers to [gha_repos](https://github.com/cncf/devstats/blob/master/docs/tables/gha_repos.md) table.\n- `repo_name`: GitHub repository name where this text was added. please not that repository names can change in time, but ID remains the same.\n- `type`: GitHub event type, can be: PullRequestReviewCommentEvent, MemberEvent, PushEvent, ReleaseEvent, CreateEvent, GollumEvent, TeamAddEvent, DeleteEvent, PublicEvent, ForkEvent, PullRequestEvent, IssuesEvent, WatchEvent, IssueCommentEvent, CommitCommentEvent.\n"
  },
  {
    "path": "devstats/config/docs/tables/gha_vars.md",
    "content": "# `gha_vars` table\n\n- This is a special table that holds PostgreS variables defined by [pdb_vars](https://github.com/cncf/devstats/blob/master/cmd/prb_vars/pdb_vars.go) tool.\n- More info about `pdb_vars` tool [here](https://github.com/cncf/devstats/blob/master/docs/vars.md).\n- Key is `name`, values are various columns starting with `value_` - different types are supported.\n- Per project variables can be defined [here](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/pdb_vars.yaml) (kubernetes example).\n- Its primary key is `name`. Max length is 100 characters.\n\n# Columns\n\n- `name`: Variable name. Max var name length is 100 characters.\n- `value_i`: Integer value. Bigint.\n- `value_f`: Float value. Double precision.\n- `value_s`: String value. Unlimited length.\n- `value_dt`: Datetime value. \n"
  },
  {
    "path": "devstats/config/docs/tables/variable_table.md",
    "content": "# Variable table\n\n- Data in those tables can change between GitHub events, and `event_id` is a part of this tables primary key.\n- They represent different state of a given object at the time of a given GitHub event `event_id`.\n- For example PRs/Issues can change labels, be closed/merged/reopened, repositories can have different numbers of stars, forks, watchers etc.\n"
  },
  {
    "path": "devstats/config/docs/tags.md",
    "content": "# Tags\n\n- You can use tags to define drop-down values (variables) in Grafana dashboards.\n- Some drop-downs can be hardcoded, without using tags, for example `Period` drop-down is usually hardcoded and has the same values as in [metrics.yaml](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/metrics.yaml).\n- The same values means Grafana's variable JSON has the same period definitions as defined by `period`, `aggregate` and `skip` properties of a given metric in `metrics.yaml`.\n- Sometimes we need drop-down values to be fetched from the database.\n- All tags are defined per project in `tags.yaml` file, for example for Kubernetes it is [metrics/kubernetes/tags.yaml](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/tags.yaml).\n- For example for \"Repository\" group we can use `repogroup_name` uses [tag](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/tags.yaml).\n- Then we can create `repogroup` which uses `repogroup_name` defined above.\n- One tag returns unprocessed names like `A,A b c, d/e/f` the other returns normalized like `a,a_b_c,d_e_f` which can be used as series name. Example above shows drop down values with unprocessed names, but uses hidden variable that returns current selection normalized for series name in Grafana's data query.\n- They both use SQL defined [here](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/tags.yaml) to get vales from Postgres: [metrics/kubernetes/repo_groups_tags_with_all.sql](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/repo_groups_tags_with_all.sql).\n- Postgres SQLs that returns data for tags has `tags` in their name, for example `Companies` drop-down tags: [metric/kubernetes/companies_tags.sql](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/companies_tags.sql).\n- Some tags use `{{lim}}` template value, this is the number of tag values to return (for most items it is limited to 69), see template evaluation [cmd/tags/tags.go](https://github.com/cncf/devstats/blob/master/cmd/tags/tags.go).\n- There is also a special `os_hostname` tag that evaluates to current machine's hostname, it is calculated [here](https://github.com/cncf/devstats/blob/master/cmd/tags/tags.go).\n- It can be used to generate links to current host name (production or test), you can use [Grafana variable that uses tag](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/dashboards.json#L421-L438) to use it as link basename, like [here](https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubernetes/dashboards.json#L84).\n- Hostname tag is always available on all projects.\n"
  },
  {
    "path": "devstats/config/docs/vars.md",
    "content": "# Postgres variables\n\n- Results are saved to [gha_vars](https://github.com/cncf/devstats/blob/master/docs/tables/gha_vars.md) table.\n- Key is `name`, values are various columns starting with `value_` - different types are supported.\n- Per project variables can be defined [here](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/vars.yaml) (kubernetes example).\n- This is `metrics/{{project_name}}/vars.yaml` for other projects.\n- They use `vars` [tool](https://github.com/cncf/devstats/blob/master/cmd/vars/vars.go), called [here](https://github.com/cncf/devstats/blob/master/kubernetes/psql.sh#L26) (Kubernetes) or [here](https://github.com/cncf/devstats/blob/master/prometheus/psql.sh#L22) (Prometheus).\n- `vars` can also be used for defining per project variables using OS commands results.\n- To use command result just provide `command: [your_command, arg1, ..., argN]` in `vars.yaml` file. It will overwrite value if command result is non-empty.\n- It can use previous variables by defining `replaces: [[from1, to1], .., [fromN, toN]]`.\n- If `from` is `fromN` and `to` is `toN` - then it will replace `[[fromN]]` with:\n  - Already defined variable contents `toN` if no special charactes before variable name are used.\n  - Environment variable `toN` if used special syntax `$toN`.\n  - Direct string value `toN` if used special syntax `:toN`.\n- If `from` starts with `:`, `:from` - then it will replace `from` directly, instead of `[[from]]`. This allows replace any text, not only template variables.\n- Any replacement `f` -> `t` made creates additional variable `f` with value `t` that can be used in next replacements or next variables.\n- All those options are used [here](https://github.com/cncf/devstats/blob/master/metrics/kubernetes/vars.yaml), [here](https://github.com/cncf/devstats/blob/master/metrics/prometheus/vars.yaml) or [there](https://github.com/cncf/devstats/blob/master/metrics/opencontainers/vars.yaml).\n- We can even create conditional partial (conditional on variable name, in this case `hostname`). See this:\n```\n  - [hostname, os_hostname]\n  #- [hostname, ':devstats.cncf.io']\n  - [':testsrv=teststats.cncf.io ', ':']\n  - [': teststats.cncf.io=testsrv', ':']\n  - [':testsrv=', ':<!-- ']\n  - [':=testsrv', ': -->']\n  - [':prodsrv=devstats.cncf.io ', ':']\n  - [': devstats.cncf.io=prodsrv', ':']\n  - [':prodsrv=', ':<!-- ']\n  - [':=prodsrv', ': -->']\n```\n- Assume we already have `os_hostname` variable which contains current hostname.\n- In first line we replace all `[[hostname]]` with current host name.\n- Second line is commented out, but here we're replacing `[[hostname]]` with hardcoded value. We can comment out 1st line and uncomment 2nd to test how it would work on a specific hostname.\n- We can use 'test server' markers: `testsrv=[[hostname]] ` and ` [[hostname]]=testsrv` to mark beginning and end of content that will only be inserted when `hostname = 'teststats.cncf.io'`.\n- We can use 'production server' markers: `prodsrv=[[hostname]] ` and ` [[hostname]]=prodsrv` to mark beginning and end of content that will only be inserted when `hostname = 'devstats.cncf.io'`.\n- See home dashboard projects [panel](https://github.com/cncf/devstats/blob/master/partials/projects.html) for example usage.\n- This works like this:\n  - Text `testsrv=[[hostname]]` is first replaced with the current hostname, for example: `testsrv=teststats.cncf.io` on the test server.\n  - Then we have a direct replacement (marek by replacements starting with `:`) 'testsrv=teststats.cncf.io ' -> '', so finally entire `testsrv=[[hostname]]` is cleared.\n  - Similar story happens with `[[hostname]]=testsrv`.\n  - That makes content between those markers directly available.\n  - Now let's assume we are on the production server, so `hostname=devstats.cncf.io`.\n  - Text `testsrv=[[hostname]]` is first replaced with the current hostname, for example: `testsrv=devstats.cncf.io` on the test server.\n  - There is no direct replacement for `:testsrv=devstats.cncf.io` (there only is `:prodsrv=devstats.cncf.io` with this hostname).\n  - But there is replacement for nonmatching `testsrv` part: `':testsrv=', ':<!-- '`, so finally `testsrv=[[hostname]]` -> `testsrv=devstats.cncf.io` -> `<!-- devstats.cncf.io`.\n  - Similar: `[[hostname]]=testsrv` -> `devstats.cncf.io=testsrv` -> `devstats.cncf.io -->`, using `':=testsrv', ': -->'`.\n- So finally `testsrv=[[hostname]]` is cleared on the test server and evaluates to `<!-- devstats.cncf.io` on the production.\n- `[[hostname]]=testsrv` is cleared on the test server and evaluates to `devstats.cncf.io -->` on the production.\n- `prodsrv=[[hostname]]` is cleared on the production server and evaluates to `<!-- teststats.cncf.io` on the test.\n- `[[hostname]]=prodsrv` is cleared on the production server and evaluates to `teststats.cncf.io -->` on the test.\n"
  },
  {
    "path": "devstats/config/find.sh",
    "content": "#!/bin/bash\nif [ -z \"$1\" ]\nthen\n  echo \"You need to provide path as first arument\"\n  exit 1\nfi\nif [ -z \"$2\" ]\nthen\n  echo \"You need to provide file name pattern as a first argument\"\n  exit 1\nfi\nif [ -z \"$3\" ]\nthen\n  echo \"You need to provide regexp pattern to search for as a second argument\"\n  exit 1\nfi\nfind \"$1\" -type f -iname \"$2\" -not -name \"out\" -not -path '*.git/*' -exec grep -EHIn \"$3\" \"{}\" \\; | tee -a out\n"
  },
  {
    "path": "devstats/config/git/git_files.sh",
    "content": "#!/bin/bash\nif [ -z \"$1\" ]\nthen\n  echo \"Arguments required: path sha, none given\"\n  exit 1\nfi\nif [ -z \"$2\" ]\nthen\n  echo \"Arguments required: path sha, only path given\"\n  exit 2\nfi\n\ncd \"$1\" || exit 3\ngit show -s --format=%ct \"$2\" || exit 4\n#files=`git diff-tree --no-commit-id --name-only -M8 -m -r \"$2\"` || exit 5\n#files=`git diff-tree --no-commit-id --name-only -r \"$2\"` || exit 5\nfiles=`git diff-tree --no-commit-id --name-only -M7 -r \"$2\"` || exit 5\nfor file in $files\ndo\n    file_and_size=`git ls-tree -r -l \"$2\" \"$file\" | awk '{print $5 \"♂♀\" $4}'`\n    if [ -z \"$file_and_size\" ]\n    then\n      echo \"$file♂♀-1\"\n    else\n      echo \"$file_and_size\"\n    fi\ndone\n"
  },
  {
    "path": "devstats/config/git/git_reset_pull.sh",
    "content": "#!/bin/bash\nif [ -z \"$1\" ]\nthen\n  echo \"Argument required: path to call git-reset and the git-pull\"\n  exit 1\nfi\n\ncd \"$1\" || exit 2\ngit fetch origin || exit 3\ngit reset --hard origin/master || exit 4\ngit pull || exit 5\n"
  },
  {
    "path": "devstats/config/git/git_tags.sh",
    "content": "#!/bin/bash\nif [ -z \"$1\" ]\nthen\n  echo \"Argument required: repo path\"\n  exit 1\nfi\n\ncd \"$1\" || exit 3\ngit tag -l --format=\"%(refname:short)♂♀%(creatordate:unix)♂♀%(subject)\"\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/activity-repository-groups.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] Release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1529598229586,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": true,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": null,\n      \"description\": \"[[full_name]] GitHub activity in given repository group\",\n      \"fill\": 3,\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 2,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"sort\": \"total\",\n        \"sortDesc\": true,\n        \"total\": true,\n        \"values\": true\n      },\n      \"lines\": false,\n      \"linewidth\": 0,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": true,\n      \"steppedLine\": true,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"notused\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT /^[[repogroups]]$/ FROM \\\"repo_group_activity_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  ${repogroups:csv}\\nfrom\\n  sact\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"[[full_name]] GitHub activity in repository groups ([[repogroups]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": null,\n          \"format\": \"short\",\n          \"label\": \"GitHub activity\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": null,\n      \"description\": \"[[full_name]] GitHub activity in given repository group\",\n      \"fill\": 3,\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 21\n      },\n      \"id\": 4,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"sort\": \"total\",\n        \"sortDesc\": true,\n        \"total\": true,\n        \"values\": true\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"notused\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT /^[[repogroups]]$/ FROM \\\"repo_group_activity_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  ${repogroups:csv}\\nfrom\\n  sact\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"[[full_name]] GitHub activity in repository groups ([[repogroups]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": null,\n          \"format\": \"short\",\n          \"label\": \"GitHub activity\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": false\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": true,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": null,\n      \"description\": \"[[full_name]] GitHub activity in given repository group\",\n      \"fill\": 3,\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 42\n      },\n      \"id\": 3,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"sort\": \"total\",\n        \"sortDesc\": true,\n        \"total\": true,\n        \"values\": true\n      },\n      \"lines\": false,\n      \"linewidth\": 0,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": true,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": true,\n      \"steppedLine\": true,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"notused\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT /^[[repogroups]]$/ FROM \\\"repo_group_activity_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  ${repogroups:csv}\\nfrom\\n  sact\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"[[full_name]] GitHub activity in repository groups ([[repogroups]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": \"GitHub activity\",\n          \"logBase\": 1,\n          \"max\": \"100\",\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 63\n      },\n      \"id\": 1,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"24 Hours MA\",\n          \"value\": \"h24\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Hour\",\n            \"value\": \"h\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"24 Hours MA\",\n            \"value\": \"h24\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Day\",\n            \"value\": \"d\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"h,d,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": true,\n        \"label\": \"Repository group\",\n        \"multi\": true,\n        \"name\": \"repogroups\",\n        \"options\": [],\n        \"query\": \"select '\\\"' || repo_group_name || '\\\"' from trepo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'activity_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-30d\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Activity repository groups\",\n  \"uid\": \"1\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/commits-repository-groups.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] Release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1529598246392,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": true,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": null,\n      \"description\": \"[[full_name]] commits in given repository group\",\n      \"fill\": 3,\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 2,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"sort\": \"total\",\n        \"sortDesc\": true,\n        \"total\": true,\n        \"values\": true\n      },\n      \"lines\": false,\n      \"linewidth\": 0,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": true,\n      \"steppedLine\": true,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"notused\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT /^[[repogroups]]$/ FROM \\\"repo_group_commits_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  ${repogroups:csv}\\nfrom\\n  scommits\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"[[full_name]] commits in repository groups ([[repogroups]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": null,\n          \"format\": \"short\",\n          \"label\": \"Commits\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": null,\n      \"description\": \"[[full_name]] commits in given repository group\",\n      \"fill\": 3,\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 21\n      },\n      \"id\": 4,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"sort\": \"total\",\n        \"sortDesc\": true,\n        \"total\": true,\n        \"values\": true\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"notused\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT /^[[repogroups]]$/ FROM \\\"repo_group_commits_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  ${repogroups:csv}\\nfrom\\n  scommits\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"[[full_name]] commits in repository groups ([[repogroups]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": null,\n          \"format\": \"short\",\n          \"label\": \"Commits\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": false\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": true,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": null,\n      \"description\": \"[[full_name]] commits in given repository group\",\n      \"fill\": 3,\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 42\n      },\n      \"id\": 3,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"sort\": \"total\",\n        \"sortDesc\": true,\n        \"total\": true,\n        \"values\": true\n      },\n      \"lines\": false,\n      \"linewidth\": 0,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": true,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": true,\n      \"steppedLine\": true,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"notused\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT /^[[repogroups]]$/ FROM \\\"repo_group_commits_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  ${repogroups:csv}\\nfrom\\n  scommits\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"[[full_name]] commits in repository groups ([[repogroups]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": \"Commits\",\n          \"logBase\": 1,\n          \"max\": \"100\",\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 63\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"24 Hours MA\",\n          \"value\": \"h24\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Hour\",\n            \"value\": \"h\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"24 Hours MA\",\n            \"value\": \"h24\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Day\",\n            \"value\": \"d\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"h,d,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": true,\n        \"label\": \"Repository group\",\n        \"multi\": true,\n        \"name\": \"repogroups\",\n        \"options\": [],\n        \"query\": \"select '\\\"' || repo_group_name || '\\\"' from trepo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'commits_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-30d\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Commits repository groups\",\n  \"uid\": \"2\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/community-stats.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674465307,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 0,\n      \"description\": \"Community stats ([[repo_name]], [[period]])\",\n      \"fill\": 0,\n      \"gridPos\": {\n        \"h\": 22,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 1,\n      \"legend\": {\n        \"alignAsTable\": false,\n        \"avg\": true,\n        \"current\": true,\n        \"hideEmpty\": false,\n        \"hideZero\": false,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"links\": [],\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pointradius\": 1,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [\n        {\n          \"alias\": \"Stargazers\",\n          \"yaxis\": 1\n        },\n        {\n          \"alias\": \"Forks\",\n          \"yaxis\": 2\n        },\n        {\n          \"alias\": \"Open issues\",\n          \"yaxis\": 2\n        }\n      ],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"hide\": false,\n          \"measurement\": \"reviewers_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"autogen\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"autogen\\\".\\\"contrib_[[repogroup]]_watchers_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Stargazers\\\"\\nfrom\\n  swatchers\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'watch[[repo]]watch'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"hide\": false,\n          \"measurement\": \"reviewers_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"autogen\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"autogen\\\".\\\"contrib_[[repogroup]]_forks_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Forks\\\"\\nfrom\\n  swatchers\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'watch[[repo]]forks'\\norder by\\n  time\",\n          \"refId\": \"B\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"hide\": false,\n          \"measurement\": \"reviewers_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"autogen\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"autogen\\\".\\\"contrib_[[repogroup]]_open_issues_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Open issues\\\"\\nfrom\\n  swatchers\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'watch[[repo]]opiss'\\norder by\\n  time\",\n          \"refId\": \"C\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Community stats ([[repo_name]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"transparent\": true,\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": [\n          \"total\"\n        ]\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": \"Stargazers\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"none\",\n          \"label\": \"Forks, Open issues\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"Kubeflow\",\n          \"value\": \"Kubeflow\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"7 Days MA\",\n          \"value\": \"d7\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Day\",\n            \"value\": \"d\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"d,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"kubeflow/serving\",\n          \"value\": \"kubeflow/serving\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository\",\n        \"multi\": false,\n        \"name\": \"repo_name\",\n        \"options\": [],\n        \"query\": \"select top_repo_names_name from ttop_repo_names order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 1,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"kubeflowserving\",\n          \"value\": \"kubeflowserving\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repo\",\n        \"options\": [],\n        \"query\": \"select top_repo_names_value from ttop_repo_names where top_repo_names_name = '[[repo_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"<h1 id=\\\"dashboard-header\\\">Kubeflow community stats dashboard</h1>\\n<p>Links:</p>\\n<ul>\\n<li>Metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/watchers.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>TSDB <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\\\" target=\\\"_blank\\\">series definition</a>. Search for <code>watchers</code></li>\\n<li>Grafana dashboard <a href=\\\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubeflow/community-stats.json\\\" target=\\\"_blank\\\">JSON</a>.</li>\\n</ul>\\n<h1 id=\\\"description\\\">Description</h1>\\n<ul>\\n<li>This dashboard shows forks, stars and open issues charts for a given repository</li>\\n<li>Selecting period (for example week) means that dashboard will show maximum value in those periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/periods.md\\\" target=\\\"_blank\\\">here</a> for more informations about periods.</li>\\n</ul>\",\n          \"value\": \"<h1 id=\\\"dashboard-header\\\">Kubeflow community stats dashboard</h1>\\n<p>Links:</p>\\n<ul>\\n<li>Metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/watchers.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>TSDB <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\\\" target=\\\"_blank\\\">series definition</a>. Search for <code>watchers</code></li>\\n<li>Grafana dashboard <a href=\\\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubeflow/community-stats.json\\\" target=\\\"_blank\\\">JSON</a>.</li>\\n</ul>\\n<h1 id=\\\"description\\\">Description</h1>\\n<ul>\\n<li>This dashboard shows forks, stars and open issues charts for a given repository</li>\\n<li>Selecting period (for example week) means that dashboard will show maximum value in those periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/periods.md\\\" target=\\\"_blank\\\">here</a> for more informations about periods.</li>\\n</ul>\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'community_stats_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Community stats\",\n  \"uid\": \"3\",\n  \"version\": 3\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/companies-stats.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"limit\": 100,\n        \"name\": \"Annotations & Alerts\",\n        \"showIn\": 0,\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674550153,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 2,\n      \"description\": \"Measures company [[metric]]. Independent means developers working on their own.\",\n      \"fill\": 6,\n      \"gridPos\": {\n        \"h\": 17,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 1,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"hideEmpty\": false,\n        \"hideZero\": false,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"sideWidth\": null,\n        \"sort\": \"avg\",\n        \"sortDesc\": true,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": true,\n      \"linewidth\": 0,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [\n        {\n          \"alias\": \"All\",\n          \"bars\": false,\n          \"fill\": 0,\n          \"lines\": true,\n          \"linewidth\": 1,\n          \"stack\": false,\n          \"yaxis\": 2\n        }\n      ],\n      \"spaceLength\": 10,\n      \"stack\": true,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"sig_federation_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT /^[[companies]]$/ FROM \\\"company_[[repogroup]]_[[metric]]_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  ${companies:csv}\\nfrom\\n  scompany_activity\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'company[[repogroup]][[metric]]'\\norder by\\n  time\",\n          \"refId\": \"B\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Companies [[metric]] metric ([[repogroup_name]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"transparent\": true,\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": \"Per company\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"decimals\": null,\n          \"format\": \"short\",\n          \"label\": \"All\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 2,\n      \"description\": \"Measures company [[metric]]. Independent means developers working on their own.\",\n      \"fill\": 6,\n      \"gridPos\": {\n        \"h\": 16,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 17\n      },\n      \"id\": 2,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"hideEmpty\": false,\n        \"hideZero\": false,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"sideWidth\": null,\n        \"sort\": \"avg\",\n        \"sortDesc\": true,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": true,\n      \"linewidth\": 0,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": true,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": true,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"sig_federation_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT /^[[companies]]$/ FROM \\\"company_[[repogroup]]_[[metric]]_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  ${companies:csv}\\nfrom\\n  scompany_activity\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'company[[repogroup]][[metric]]'\\norder by\\n  time\",\n          \"refId\": \"B\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Companies [[metric]] metric ([[repogroup_name]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"transparent\": true,\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": \"100\",\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"decimals\": null,\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": \"100\",\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 12,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 33\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"companies\",\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"7 Days MA\",\n          \"value\": \"d7\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Day\",\n            \"value\": \"d\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"d,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"All activity\",\n          \"value\": \"activity\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Metric\",\n        \"multi\": false,\n        \"name\": \"metric\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"All activity\",\n            \"value\": \"activity\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Active authors\",\n            \"value\": \"authors\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Issues created\",\n            \"value\": \"issues\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Pull requests created\",\n            \"value\": \"prs\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Commits\",\n            \"value\": \"commits\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Commiters\",\n            \"value\": \"committers\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Pushes\",\n            \"value\": \"pushes\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Pushers\",\n            \"value\": \"pushers\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"Contributions\",\n            \"value\": \"contributions\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Contributors\",\n            \"value\": \"contributors\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Comments\",\n            \"value\": \"comments\"\n          }\n        ],\n        \"query\": \"activity,authors,issues,prs,commits,committers,pushers,pushes,comments,contributions,contributors\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": true,\n        \"label\": \"Companies\",\n        \"multi\": true,\n        \"name\": \"companies\",\n        \"options\": [],\n        \"query\": \"select '\\\"' || companies_name || '\\\"' from tcompanies order by time asc\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'companies_stats_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Companies stats\",\n  \"uid\": \"4\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/companies-summary.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1529598249217,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"columns\": [],\n      \"datasource\": \"psql\",\n      \"description\": \"\",\n      \"fontSize\": \"90%\",\n      \"gridPos\": {\n        \"h\": 22,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"hideTimeOverride\": true,\n      \"id\": 1,\n      \"links\": [],\n      \"pageSize\": 1000,\n      \"scroll\": true,\n      \"showHeader\": true,\n      \"sort\": {\n        \"col\": 1,\n        \"desc\": true\n      },\n      \"styles\": [\n        {\n          \"alias\": \"Time\",\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": null,\n          \"pattern\": \"Time\",\n          \"type\": \"hidden\"\n        },\n        {\n          \"alias\": \"Company\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": 2,\n          \"pattern\": \"name\",\n          \"preserveFormat\": false,\n          \"thresholds\": [],\n          \"type\": \"string\",\n          \"unit\": \"short\"\n        },\n        {\n          \"alias\": \"Number\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": 0,\n          \"pattern\": \"value\",\n          \"thresholds\": [],\n          \"type\": \"number\",\n          \"unit\": \"none\"\n        },\n        {\n          \"alias\": \"\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"decimals\": 0,\n          \"pattern\": \"/.*/\",\n          \"thresholds\": [],\n          \"type\": \"number\",\n          \"unit\": \"short\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"name\\\", \\\"value\\\" FROM \\\"project_company_stats_[[metric]]_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select name, value from \\\"shcom\\\" where series = 'hcom[[metric]]' and period = '[[period]]'\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"table\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"title\": \"[[full_name]] Companies statistics ([[metric]], Range: [[period_name]]), bots excluded\",\n      \"transform\": \"table\",\n      \"transparent\": false,\n      \"type\": \"table\"\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\",\n    \"companies\",\n    \"table\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"OCI\",\n          \"value\": \"OCI\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"Last decade\",\n          \"value\": \"Last decade\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Range\",\n        \"multi\": false,\n        \"name\": \"period_name\",\n        \"options\": [],\n        \"query\": \"select quick_ranges_name from tquick_ranges order by time\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"selected\": true,\n          \"tags\": [],\n          \"text\": \"Contributions\",\n          \"value\": \"contributions\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Metric\",\n        \"multi\": false,\n        \"name\": \"metric\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Commenters\",\n            \"value\": \"commenters\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Comments\",\n            \"value\": \"comments\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Commit commenters\",\n            \"value\": \"commitcommenters\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Commits\",\n            \"value\": \"commits\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Committers\",\n            \"value\": \"committers\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Pushers\",\n            \"value\": \"pushers\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"GitHub events\",\n            \"value\": \"events\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Forkers\",\n            \"value\": \"forkers\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Issue commenters\",\n            \"value\": \"issuecommenters\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Issues\",\n            \"value\": \"issues\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"PR authors\",\n            \"value\": \"prcreators\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"PR reviewers\",\n            \"value\": \"prreviewers\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Pull requests\",\n            \"value\": \"prs\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Contributing in repositories\",\n            \"value\": \"repositories\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Contributors\",\n            \"value\": \"contributors\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"Contributions\",\n            \"value\": \"contributions\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Watchers\",\n            \"value\": \"watchers\"\n          }\n        ],\n        \"query\": \"commenters,comments,commitcommenters,commits,committers,pushers,events,forkers,issuecommenters,issues,prcreators,prreviewers,prs,repositories,watchers\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"y10\",\n          \"value\": \"y10\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [],\n        \"query\": \"select quick_ranges_suffix from tquick_ranges where quick_ranges_name = '[[period_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'companies_summary_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-5y\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"hidden\": true,\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Companies summary\",\n  \"uid\": \"5\",\n  \"version\": 3\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/company-prs-in-repository-groups.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1547454421924,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"columns\": [],\n      \"datasource\": \"psql\",\n      \"description\": \"Shows company PRs in the given repository groups\",\n      \"fontSize\": \"80%\",\n      \"gridPos\": {\n        \"h\": 22,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"hideTimeOverride\": true,\n      \"id\": 1,\n      \"links\": [],\n      \"pageSize\": 200,\n      \"scroll\": true,\n      \"showHeader\": true,\n      \"sort\": {\n        \"col\": 4,\n        \"desc\": true\n      },\n      \"styles\": [\n        {\n          \"alias\": \"Time\",\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": null,\n          \"pattern\": \"Time\",\n          \"type\": \"hidden\"\n        },\n        {\n          \"alias\": \"\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": 0,\n          \"mappingType\": 1,\n          \"pattern\": \"Opened PRs\",\n          \"thresholds\": [],\n          \"type\": \"number\",\n          \"unit\": \"none\"\n        },\n        {\n          \"alias\": \"\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"decimals\": 2,\n          \"pattern\": \"/.*/\",\n          \"thresholds\": [],\n          \"type\": \"number\",\n          \"unit\": \"none\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"name\\\", \\\"value\\\" FROM \\\"top_commenters_[[repogroup]]_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  split_part(name, '$$$', 2) as \\\"Company\\\",\\n  split_part(name, '$$$', 1) as \\\"Repository group\\\",\\n  split_part(name, '$$$', 3) as \\\"GitHub ID\\\",\\n  split_part(name, '$$$', 4) as \\\"User names\\\",\\n  value as \\\"Opened PRs\\\"\\nfrom\\n  scompany_prs\\nwhere\\n  period = '[[period]]'\\n  and ('[[repogroups:csv]]' = 'null' or split_part(name, '$$$', 1) in ([[repogroups]]))\\n  and ('[[companies:csv]]' = 'null' or split_part(name, '$$$', 2) in ([[companies]]))\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"table\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"title\": \"[[full_name]] company PRs (Range: [[period_name]])\",\n      \"transform\": \"table\",\n      \"transparent\": false,\n      \"type\": \"table\"\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\",\n    \"table\",\n    \"companies\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"Last decade\",\n          \"value\": \"Last decade\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Range\",\n        \"multi\": false,\n        \"name\": \"period_name\",\n        \"options\": [],\n        \"query\": \"select quick_ranges_name from tquick_ranges order by time\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"y10\",\n          \"value\": \"y10\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [],\n        \"query\": \"select quick_ranges_suffix from tquick_ranges where quick_ranges_name = '[[period_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": \"null\",\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"All\",\n          \"value\": [\n            \"$__all\"\n          ]\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": true,\n        \"label\": \"Repository groups\",\n        \"multi\": true,\n        \"name\": \"repogroups\",\n        \"options\": [],\n        \"query\": \"select repo_group_name from trepo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"CNCF\",\n          \"value\": \"CNCF\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"isNone\": true,\n          \"text\": \"None\",\n          \"value\": \"\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'company_prs_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": \"null\",\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"All\",\n          \"value\": [\n            \"$__all\"\n          ]\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": true,\n        \"label\": \"Companies\",\n        \"multi\": true,\n        \"name\": \"companies\",\n        \"options\": [],\n        \"query\": \"select companies_name from tcompanies order by time asc\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-5y\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"hidden\": true,\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Company PRs in repository groups\",\n  \"uid\": \"55\",\n  \"version\": 7\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/contributing-companies.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674572024,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 0,\n      \"description\": \"\",\n      \"fill\": 1,\n      \"gridPos\": {\n        \"h\": 22,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 1,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"hideEmpty\": false,\n        \"hideZero\": false,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"links\": [],\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pointradius\": 1,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [\n        {\n          \"alias\": \"Number of contributing developers\",\n          \"yaxis\": 2\n        }\n      ],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"Number of contributing companies\",\n          \"dsType\": \"influxdb\",\n          \"groupBy\": [],\n          \"hide\": false,\n          \"measurement\": \"reviewers_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"autogen\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"autogen\\\".\\\"num_stats_[[repogroup]]_companies_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Number of contributing companies\\\"\\nfrom\\n  snum_stats\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'nstats[[repogroup]]comps'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"Number of contributing developers\",\n          \"dsType\": \"influxdb\",\n          \"groupBy\": [],\n          \"hide\": false,\n          \"measurement\": \"reviewers_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"autogen\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"autogen\\\".\\\"num_stats_[[repogroup]]_developers_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Number of contributing developers\\\"\\nfrom\\n  snum_stats\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'nstats[[repogroup]]devs'\\norder by\\n  time\",\n          \"refId\": \"B\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Contributing companies and developers ([[repogroup_name]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"transparent\": true,\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": [\n          \"total\"\n        ]\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": \"Companies\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"none\",\n          \"label\": \"Developers\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"companies\",\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"28 Days MA\",\n          \"value\": \"d28\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"28 Days MA\",\n            \"value\": \"d28\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          }\n        ],\n        \"query\": \"d7,d28,w,m,q\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'contributing_companies_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Contributing companies\",\n  \"uid\": \"7\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/countries-stats.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] Release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674583427,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": true,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": null,\n      \"description\": \"[[full_name]] [[metric]] countries stats ([[repogroup_name]])\",\n      \"fill\": 3,\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 2,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"sort\": \"avg\",\n        \"sortDesc\": true,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": false,\n      \"linewidth\": 0,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": true,\n      \"steppedLine\": true,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"notused\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  ${countries:csv}\\nfrom\\n  s[[cum]]\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = '[[cum]][[repogroup]][[metric]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"[[full_name]] [[metric]] countries stats ([[repogroup_name]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": null,\n          \"format\": \"short\",\n          \"label\": \"Value\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": null,\n      \"description\": \"[[full_name]] [[metric]] countries stats ([[repogroup_name]])\",\n      \"fill\": 3,\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 21\n      },\n      \"id\": 4,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"sort\": \"avg\",\n        \"sortDesc\": true,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"notused\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  ${countries:csv}\\nfrom\\n  s[[cum]]\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = '[[cum]][[repogroup]][[metric]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"[[full_name]] [[metric]] countries stats ([[repogroup_name]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": null,\n          \"format\": \"short\",\n          \"label\": \"Value\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": false\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": true,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": null,\n      \"description\": \"[[full_name]] [[metric]] countries stats ([[repogroup_name]])\",\n      \"fill\": 3,\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 42\n      },\n      \"id\": 3,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"sort\": \"avg\",\n        \"sortDesc\": true,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": false,\n      \"linewidth\": 0,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": true,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": true,\n      \"steppedLine\": true,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"notused\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  ${countries:csv}\\nfrom\\n  s[[cum]]\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = '[[cum]][[repogroup]][[metric]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"[[full_name]] [[metric]] countries stats ([[repogroup_name]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": null,\n          \"format\": \"short\",\n          \"label\": \"Value\",\n          \"logBase\": 1,\n          \"max\": \"100\",\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 13,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 63\n      },\n      \"id\": 1,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"Kubeflow\",\n          \"value\": \"Kubeflow\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"Week\",\n          \"value\": \"Week\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period_name\",\n        \"options\": [],\n        \"query\": \"select split_part(cumperiod_name, '/', 2) from tcumperiods where cumperiod_name like '[[cum]]/%';\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {\n          \"text\": \"All\",\n          \"value\": \"$__all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": true,\n        \"label\": \"Countries\",\n        \"multi\": true,\n        \"name\": \"countries\",\n        \"options\": [],\n        \"query\": \"select '\\\"' || country_name || '\\\"' from tcountries order by time asc\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"All\",\n          \"value\": \"All\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"all\",\n          \"value\": \"all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"selected\": true,\n          \"tags\": [],\n          \"text\": \"Committers\",\n          \"value\": \"rcommitters\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Metric\",\n        \"multi\": false,\n        \"name\": \"metric\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Contributions\",\n            \"value\": \"contributions\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Contributors\",\n            \"value\": \"contributors\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Users\",\n            \"value\": \"users\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Activity\",\n            \"value\": \"events\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Pushers\",\n            \"value\": \"committers\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Pushes\",\n            \"value\": \"commits\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"Committers\",\n            \"value\": \"rcommitters\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Commits\",\n            \"value\": \"rcommits\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"PR creators\",\n            \"value\": \"prcreators\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"PRs\",\n            \"value\": \"prs\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Issue creators\",\n            \"value\": \"issuecreators\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Issues\",\n            \"value\": \"issues\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Commenters\",\n            \"value\": \"commenters\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Comments\",\n            \"value\": \"comments\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Reviewers\",\n            \"value\": \"reviewers\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Reviews\",\n            \"value\": \"reviews\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Watchers\",\n            \"value\": \"watchers\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Watches\",\n            \"value\": \"watches\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Forkers\",\n            \"value\": \"forkers\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Forks\",\n            \"value\": \"forks\"\n          }\n        ],\n        \"query\": \"contributions,contributors,users,events,committers,commits,rcommitters,rcommits,prcreators,prs,issuecreators,issues,commenters,comments,reviewers,reviews,watchers,watches,forkers,forks\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"selected\": true,\n          \"text\": \"No\",\n          \"value\": \"countries\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Cumulative\",\n        \"multi\": false,\n        \"name\": \"cum\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Yes\",\n            \"value\": \"countriescum\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"No\",\n            \"value\": \"countries\"\n          }\n        ],\n        \"query\": \"countries,countriescum\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"<h1 id=\\\"dashboard-header\\\">Kubeflow countries stats dashboard</h1>\\n<p>Links:</p>\\n<ul>\\n<li>Metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/countries.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>Cumulative metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/countries_cum.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>Committers metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/committers_countries.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>Committers cumulative metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/committers_countries_cum.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>TSDB <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\\\" target=\\\"_blank\\\">series definition</a>. Search for <code>countries</code></li>\\n<li>Grafana dashboard <a href=\\\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubeflow/countries-stats.json\\\" target=\\\"_blank\\\">JSON</a>.</li>\\n</ul>\\n<h1 id=\\\"description\\\">Description</h1>\\n<ul>\\n<li>This dashboard shows countries statistics (cumulative and in given periods).</li>\\n<li>Contributor is defined as somebody who made a review, comment, commit, created PR or issue.</li>\\n<li>Contribution is a review, comment, commit, issue or PR.</li>\\n<li>We are determining contributor's country by using GitHub localization and searching for a country using <a href=\\\"http://www.geonames.org\\\" target=\\\"_blank\\\">geonames</a> database.</li>\\n<li>You can select single repository group or summary statistics for all of them combined.</li>\\n<li>You can choose to display contributors, contributions, users, actvity, committers, commits etc.</li>\\n<li>You can select cumulative statistics or statistics in given periods.</li>\\n<li>Selecting period (for example week) means that dashboard will show data in those periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/periods.md\\\" target=\\\"_blank\\\">here</a> for more informations about periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\\\" target=\\\"_blank\\\">here</a> for more informations about repository groups.</li>\\n<li>We are skipping bots activity, see <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\\\" target=\\\"_blank\\\">excluding bots</a> for details.</li>\\n</ul>\",\n          \"value\": \"<h1 id=\\\"dashboard-header\\\">Kubeflow countries stats dashboard</h1>\\n<p>Links:</p>\\n<ul>\\n<li>Metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/countries.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>Cumulative metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/countries_cum.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>Committers metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/committers_countries.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>Committers cumulative metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/committers_countries_cum.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>TSDB <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\\\" target=\\\"_blank\\\">series definition</a>. Search for <code>countries</code></li>\\n<li>Grafana dashboard <a href=\\\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubeflow/countries-stats.json\\\" target=\\\"_blank\\\">JSON</a>.</li>\\n</ul>\\n<h1 id=\\\"description\\\">Description</h1>\\n<ul>\\n<li>This dashboard shows countries statistics (cumulative and in given periods).</li>\\n<li>Contributor is defined as somebody who made a review, comment, commit, created PR or issue.</li>\\n<li>Contribution is a review, comment, commit, issue or PR.</li>\\n<li>We are determining contributor's country by using GitHub localization and searching for a country using <a href=\\\"http://www.geonames.org\\\" target=\\\"_blank\\\">geonames</a> database.</li>\\n<li>You can select single repository group or summary statistics for all of them combined.</li>\\n<li>You can choose to display contributors, contributions, users, actvity, committers, commits etc.</li>\\n<li>You can select cumulative statistics or statistics in given periods.</li>\\n<li>Selecting period (for example week) means that dashboard will show data in those periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/periods.md\\\" target=\\\"_blank\\\">here</a> for more informations about periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\\\" target=\\\"_blank\\\">here</a> for more informations about repository groups.</li>\\n<li>We are skipping bots activity, see <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\\\" target=\\\"_blank\\\">excluding bots</a> for details.</li>\\n</ul>\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'countries_stats_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"w\",\n          \"value\": \"w\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [],\n        \"query\": \"select split_part(cumperiod_name, '/', 3) from tcumperiods where cumperiod_name like '[[cum]]/[[period_name]]/%';\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now-1M\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Countries stats\",\n  \"uid\": \"50\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/dashboards.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"description\": \"Home dashboard\",\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1539254495588,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 0,\n      \"description\": \"Numbers of GitHub events in all repositories hourly\",\n      \"fill\": 5,\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 20,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 2,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": false,\n        \"show\": true,\n        \"total\": true,\n        \"values\": true\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"links\": [\n        {\n          \"title\": \"DevStats GitHub repository\",\n          \"type\": \"absolute\",\n          \"url\": \"https://github.com/cncf/devstats\"\n        }\n      ],\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pointradius\": 1,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": true,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"events_h\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Number of GitHub events hourly\\\"\\nfrom\\n  sevents_h\\nwhere\\n  $__timeFilter(time)\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Hourly [[full_name]] activity on GitHub\",\n      \"tooltip\": {\n        \"shared\": false,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"transparent\": true,\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": [\n          \"total\"\n        ]\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": \"Activity\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"content\": \"<head>\\n</head>\\nPlease report any bugs by opening an issue on <a href=\\\"https://github.com/cncf/devstats\\\">https://github.com/cncf/devstats</a>\",\n      \"description\": \"\",\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 4,\n        \"x\": 20,\n        \"y\": 0\n      },\n      \"height\": 220,\n      \"id\": 1,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"\",\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"description\": \"https://github.com/cncf/devstats\",\n      \"folderId\": 0,\n      \"gridPos\": {\n        \"h\": 33,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 6\n      },\n      \"headings\": false,\n      \"id\": 4,\n      \"limit\": 50,\n      \"links\": [\n        {\n          \"title\": \"devstats\",\n          \"type\": \"absolute\",\n          \"url\": \"https://github.com/cncf/devstats\"\n        }\n      ],\n      \"query\": \"\",\n      \"recent\": false,\n      \"search\": true,\n      \"starred\": false,\n      \"tags\": [\n        \"dashboard\",\n        \"kubeflow\"\n      ],\n      \"title\": \"All [[full_name]] Dashboards\",\n      \"transparent\": false,\n      \"type\": \"dashlist\"\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 37\n      },\n      \"id\": 6,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": \"15m\",\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"home\",\n    \"all\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'dashboards_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"teststats.cncf.io\",\n          \"value\": \"teststats.cncf.io\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"hostname\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'os_hostname'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-7d\",\n    \"to\": \"now-1h\"\n  },\n  \"timepicker\": {\n    \"nowDelay\": \"1h\",\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Dashboards\",\n  \"uid\": \"8\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/developers-summary.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1539936949403,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"columns\": [],\n      \"datasource\": \"psql\",\n      \"description\": \"\",\n      \"fontSize\": \"90%\",\n      \"gridPos\": {\n        \"h\": 22,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"hideTimeOverride\": true,\n      \"id\": 1,\n      \"links\": [],\n      \"pageSize\": 1000,\n      \"scroll\": true,\n      \"showHeader\": true,\n      \"sort\": {\n        \"col\": 1,\n        \"desc\": true\n      },\n      \"styles\": [\n        {\n          \"alias\": \"Time\",\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": null,\n          \"pattern\": \"Time\",\n          \"type\": \"hidden\"\n        },\n        {\n          \"alias\": \"GitHub login\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": 2,\n          \"pattern\": \"name\",\n          \"preserveFormat\": false,\n          \"thresholds\": [],\n          \"type\": \"string\",\n          \"unit\": \"short\"\n        },\n        {\n          \"alias\": \"Number\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": 0,\n          \"pattern\": \"value\",\n          \"thresholds\": [],\n          \"type\": \"number\",\n          \"unit\": \"none\"\n        },\n        {\n          \"alias\": \"\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"decimals\": 0,\n          \"pattern\": \"/.*/\",\n          \"thresholds\": [],\n          \"type\": \"number\",\n          \"unit\": \"short\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"name\\\", \\\"value\\\" FROM \\\"developers_hist_[[metric]]_[[repogroup]]_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select name, value from shdev where series = 'hdev_[[metric]][[repogroup]][[country]]' and period = '[[period]]'\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"table\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"title\": \"[[full_name]] Developers statistics ([[metric]], Range: [[period_name]], Repository group: [[repogroup_name]]), bots excluded\",\n      \"transform\": \"table\",\n      \"transparent\": false,\n      \"type\": \"table\"\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 3,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\",\n    \"repogroups\",\n    \"table\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"selected\": true,\n          \"text\": \"Last decade\",\n          \"value\": \"Last decade\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Range\",\n        \"multi\": false,\n        \"name\": \"period_name\",\n        \"options\": [],\n        \"query\": \"select quick_ranges_name from tquick_ranges order by time\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"selected\": false,\n          \"tags\": [],\n          \"text\": \"Contributions\",\n          \"value\": \"contributions\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Metric\",\n        \"multi\": false,\n        \"name\": \"metric\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Comments\",\n            \"value\": \"comments\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Commit comments\",\n            \"value\": \"commit_comments\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Commits\",\n            \"value\": \"commits\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"GitHub events\",\n            \"value\": \"events\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"GitHub pushes\",\n            \"value\": \"pushes\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Issue comments\",\n            \"value\": \"issue_comments\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Issues\",\n            \"value\": \"issues\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"PRs\",\n            \"value\": \"prs\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Review comments\",\n            \"value\": \"review_comments\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"Contributions\",\n            \"value\": \"contributions\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Active repositories\",\n            \"value\": \"active_repos\"\n          }\n        ],\n        \"query\": \"comments,commit_comments,commits,events,pushes,contributions,issue_comments,issues,prs,review_comments,active_repos\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"y10\",\n          \"value\": \"y10\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [],\n        \"query\": \"select quick_ranges_suffix from tquick_ranges where quick_ranges_name = '[[period_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"selected\": true,\n          \"text\": \"All\",\n          \"value\": \"All\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"all\",\n          \"value\": \"all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'developers_summary_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"all\",\n          \"value\": \"all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"country\",\n        \"options\": [],\n        \"query\": \"select sub.value from (select country_value as value, 0 as ord from tcountries where country_name = '[[country_name]]' union select 'all', 1 as ord) sub order by sub.ord limit 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": \"all\",\n        \"current\": {\n          \"selected\": true,\n          \"text\": \"All\",\n          \"value\": \"All\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Country\",\n        \"multi\": false,\n        \"name\": \"country_name\",\n        \"options\": [],\n        \"query\": \"select 'All' union select country_name from tcountries order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-5y\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"hidden\": true,\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Developers summary\",\n  \"uid\": \"9\",\n  \"version\": 10\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/first-non-author-activity.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674618482,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 2,\n      \"description\": \"Time before any comments or activities from someone other than the author\",\n      \"fill\": 0,\n      \"gridPos\": {\n        \"h\": 13,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 2,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"links\": [],\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [\n        {\n          \"alias\": \"15th percentile time opened to merged (in hours)\"\n        }\n      ],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"non_author_[[repogroup]]_percentile_85_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"85th percentile time\\\"\\nfrom\\n  sfirst_non_author\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'non_auth[[repogroup]]p85'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"non_author_[[repogroup]]_median_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Median time\\\"\\nfrom\\n  sfirst_non_author\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'non_auth[[repogroup]]med'\\norder by\\n  time\",\n          \"refId\": \"B\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"non_author_[[repogroup]]_percentile_15_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"15th percentile time\\\"\\nfrom\\n  sfirst_non_author\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'non_auth[[repogroup]]p15'\\norder by\\n  time\",\n          \"refId\": \"C\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Time before any comments or activities from someone other than the author ([[repogroup_name]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"h\",\n          \"label\": \"\",\n          \"logBase\": 2,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"columns\": [],\n      \"datasource\": \"psql\",\n      \"description\": \"Time to first non-author activity\",\n      \"fontSize\": \"90%\",\n      \"gridPos\": {\n        \"h\": 11,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 13\n      },\n      \"id\": 3,\n      \"links\": [],\n      \"pageSize\": 10,\n      \"scroll\": true,\n      \"showHeader\": true,\n      \"sort\": {\n        \"col\": 0,\n        \"desc\": true\n      },\n      \"styles\": [\n        {\n          \"alias\": \"Time\",\n          \"dateFormat\": \"MM/DD/YYYY\",\n          \"pattern\": \"Time\",\n          \"type\": \"date\"\n        },\n        {\n          \"alias\": \"\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"decimals\": 2,\n          \"pattern\": \"/.*/\",\n          \"thresholds\": [],\n          \"type\": \"number\",\n          \"unit\": \"short\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"descr\\\" FROM \\\"non_author_[[repogroup]]_percentile_15_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time as \\\"Time\\\",\\n  descr as \\\"15th percentile\\\"\\nfrom\\n  sfirst_non_author\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'non_auth[[repogroup]]p15'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"descr\\\" FROM \\\"non_author_[[repogroup]]_median_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time as \\\"Time\\\",\\n  descr as \\\"Median\\\"\\nfrom\\n  sfirst_non_author\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'non_auth[[repogroup]]med'\\norder by\\n  time\",\n          \"refId\": \"B\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"descr\\\" FROM \\\"non_author_[[repogroup]]_percentile_85_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time as \\\"Time\\\",\\n  descr as \\\"85th percentile\\\"\\nfrom\\n  sfirst_non_author\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'non_auth[[repogroup]]p85'\\norder by\\n  time\",\n          \"refId\": \"C\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"title\": \"Time to first non-author activity ([[repogroup]], [[period]])\",\n      \"transform\": \"table\",\n      \"type\": \"table\"\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 24\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"7 Days MA\",\n          \"value\": \"d7\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"d7,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'non_author_activity_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now-2w\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"First non-author activity\",\n  \"uid\": \"10\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/gender-stats.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] Release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674634078,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": true,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": null,\n      \"description\": \"[[full_name]] [[metric]] gender stats ([[repogroup_name]])\",\n      \"fill\": 3,\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 2,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"sort\": \"avg\",\n        \"sortDesc\": false,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": false,\n      \"linewidth\": 0,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": true,\n      \"steppedLine\": true,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"notused\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  ${genders:csv}\\nfrom\\n  s[[cum]]\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = '[[cum]][[repogroup]][[metric]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"[[full_name]] [[metric]] gender stats ([[repogroup_name]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": null,\n          \"format\": \"short\",\n          \"label\": \"Value\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": null,\n      \"description\": \"[[full_name]] [[metric]] gender stats ([[repogroup_name]])\",\n      \"fill\": 3,\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 21\n      },\n      \"id\": 4,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"sort\": \"avg\",\n        \"sortDesc\": false,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"notused\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  ${genders:csv}\\nfrom\\n  s[[cum]]\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = '[[cum]][[repogroup]][[metric]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"[[full_name]] [[metric]] gender stats ([[repogroup_name]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": null,\n          \"format\": \"short\",\n          \"label\": \"Value\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": false\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": true,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": null,\n      \"description\": \"[[full_name]] [[metric]] gender stats ([[repogroup_name]])\",\n      \"fill\": 3,\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 42\n      },\n      \"id\": 3,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"sort\": \"avg\",\n        \"sortDesc\": false,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": false,\n      \"linewidth\": 0,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": true,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": true,\n      \"steppedLine\": true,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"notused\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  ${genders:csv}\\nfrom\\n  s[[cum]]\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = '[[cum]][[repogroup]][[metric]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"[[full_name]] [[metric]] gender stats ([[repogroup_name]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": null,\n          \"format\": \"short\",\n          \"label\": \"Value\",\n          \"logBase\": 1,\n          \"max\": \"100\",\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 13,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 63\n      },\n      \"id\": 1,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"All CNCF\",\n          \"value\": \"All CNCF\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"Quarter\",\n          \"value\": \"Quarter\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period_name\",\n        \"options\": [],\n        \"query\": \"select split_part(cumperiod_name, '/', 2) from tcumperiods where cumperiod_name like '[[cum]]/%';\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {\n          \"selected\": true,\n          \"text\": \"All\",\n          \"value\": \"$__all\"\n        },\n        \"hide\": 0,\n        \"includeAll\": true,\n        \"label\": \"Gender\",\n        \"multi\": true,\n        \"name\": \"genders\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"All\",\n            \"value\": \"$__all\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Male\",\n            \"value\": \"\\\"Male\\\"\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Female\",\n            \"value\": \"\\\"Female\\\"\"\n          }\n        ],\n        \"query\": \"\\\"Male\\\",\\\"Female\\\"\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"selected\": true,\n          \"text\": \"All\",\n          \"value\": \"All\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"all\",\n          \"value\": \"all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"selected\": true,\n          \"text\": \"Committers\",\n          \"value\": \"rcommitters\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Metric\",\n        \"multi\": false,\n        \"name\": \"metric\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Contributions\",\n            \"value\": \"contributions\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Contributors\",\n            \"value\": \"contributors\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Users\",\n            \"value\": \"users\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Activity\",\n            \"value\": \"events\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Pushers\",\n            \"value\": \"committers\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Pushes\",\n            \"value\": \"commits\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"Committers\",\n            \"value\": \"rcommitters\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Commits\",\n            \"value\": \"rcommits\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"PR creators\",\n            \"value\": \"prcreators\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"PRs\",\n            \"value\": \"prs\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Issue creators\",\n            \"value\": \"issuecreators\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Issues\",\n            \"value\": \"issues\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Commenters\",\n            \"value\": \"commenters\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Comments\",\n            \"value\": \"comments\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Reviewers\",\n            \"value\": \"reviewers\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Reviews\",\n            \"value\": \"reviews\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Watchers\",\n            \"value\": \"watchers\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Watches\",\n            \"value\": \"watches\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Forkers\",\n            \"value\": \"forkers\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Forks\",\n            \"value\": \"forks\"\n          }\n        ],\n        \"query\": \"contributions,contributors,users,events,committers,commits,rcommitters,rcommits,prcreators,prs,issuecreators,issues,commenters,comments,reviewers,reviews,watchers,watches,forkers,forks\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"selected\": true,\n          \"text\": \"No\",\n          \"value\": \"sex\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Cumulative\",\n        \"multi\": false,\n        \"name\": \"cum\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Yes\",\n            \"value\": \"sexcum\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"No\",\n            \"value\": \"sex\"\n          }\n        ],\n        \"query\": \"sex,sexcum\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"<h1 id=\\\"dashboard-header\\\">All CNCF gender stats dashboard</h1>\\n<p>Links:</p>\\n<ul>\\n<li>Metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/gender.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>Cumulative metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/gender_cum.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>TSDB <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\\\" target=\\\"_blank\\\">series definition</a>. Search for <code>gender</code></li>\\n<li>Grafana dashboard <a href=\\\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/all/gender-stats.json\\\" target=\\\"_blank\\\">JSON</a>.</li>\\n</ul>\\n<h1 id=\\\"description\\\">Description</h1>\\n<ul>\\n<li>This dashboard shows contributor gender statistics (cumulative and in given periods).</li>\\n<li>Contributor is defined as somebody who made a review, comment, commit, created PR or issue.</li>\\n<li>Contribution is a review, comment, commit, issue or PR.</li>\\n<li>We are determining contributor's gender by using GitHub localization and user name to query <a href=\\\"https://store.genderize.io\\\" target=\\\"_blank\\\">genderize.io</a> for gender for a given country and name.</li>\\n<li>You can select single repository group or summary statistics for all of them combined.</li>\\n<li>You can choose to display contributors or contributions.</li>\\n<li>You can select cumulative statistics or statistics in given periods.</li>\\n<li>Selecting period (for example week) means that dashboard will show data in those periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/periods.md\\\" target=\\\"_blank\\\">here</a> for more informations about periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\\\" target=\\\"_blank\\\">here</a> for more informations about repository groups.</li>\\n<li>We are skipping bots activity, see <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\\\" target=\\\"_blank\\\">excluding bots</a> for details.</li>\\n</ul>\",\n          \"value\": \"<h1 id=\\\"dashboard-header\\\">All CNCF gender stats dashboard</h1>\\n<p>Links:</p>\\n<ul>\\n<li>Metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/gender.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>Cumulative metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/gender_cum.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>TSDB <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\\\" target=\\\"_blank\\\">series definition</a>. Search for <code>gender</code></li>\\n<li>Grafana dashboard <a href=\\\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/all/gender-stats.json\\\" target=\\\"_blank\\\">JSON</a>.</li>\\n</ul>\\n<h1 id=\\\"description\\\">Description</h1>\\n<ul>\\n<li>This dashboard shows contributor gender statistics (cumulative and in given periods).</li>\\n<li>Contributor is defined as somebody who made a review, comment, commit, created PR or issue.</li>\\n<li>Contribution is a review, comment, commit, issue or PR.</li>\\n<li>We are determining contributor's gender by using GitHub localization and user name to query <a href=\\\"https://store.genderize.io\\\" target=\\\"_blank\\\">genderize.io</a> for gender for a given country and name.</li>\\n<li>You can select single repository group or summary statistics for all of them combined.</li>\\n<li>You can choose to display contributors or contributions.</li>\\n<li>You can select cumulative statistics or statistics in given periods.</li>\\n<li>Selecting period (for example week) means that dashboard will show data in those periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/periods.md\\\" target=\\\"_blank\\\">here</a> for more informations about periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\\\" target=\\\"_blank\\\">here</a> for more informations about repository groups.</li>\\n<li>We are skipping bots activity, see <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\\\" target=\\\"_blank\\\">excluding bots</a> for details.</li>\\n</ul>\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'gender_stats_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"q\",\n          \"value\": \"q\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [],\n        \"query\": \"select split_part(cumperiod_name, '/', 3) from tcumperiods where cumperiod_name like '[[cum]]/[[period_name]]/%';\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Gender stats\",\n  \"uid\": \"49\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/github-events.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] Release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1533024842622,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": true,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": null,\n      \"description\": \"[[full_name]] GitHub events\",\n      \"fill\": 3,\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 2,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"sort\": \"total\",\n        \"sortDesc\": true,\n        \"total\": true,\n        \"values\": true\n      },\n      \"lines\": false,\n      \"linewidth\": 0,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": true,\n      \"steppedLine\": true,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"notused\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT /^[[repogroups]]$/ FROM \\\"repo_group_activity_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  ${types:csv}\\nfrom\\n  sevent_types\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"[[full_name]] GitHub events ([[types]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": null,\n          \"format\": \"short\",\n          \"label\": \"GitHub events\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": null,\n      \"description\": \"[[full_name]] GitHub events\",\n      \"fill\": 3,\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 21\n      },\n      \"id\": 4,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"sort\": \"total\",\n        \"sortDesc\": true,\n        \"total\": true,\n        \"values\": true\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"notused\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT /^[[repogroups]]$/ FROM \\\"repo_group_activity_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  ${types:csv}\\nfrom\\n  sevent_types\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"[[full_name]] GitHub events ([[types]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": null,\n          \"format\": \"short\",\n          \"label\": \"GitHub events\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": false\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": true,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": null,\n      \"description\": \"[[full_name]] GitHub events\",\n      \"fill\": 3,\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 42\n      },\n      \"id\": 3,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"sort\": \"total\",\n        \"sortDesc\": true,\n        \"total\": true,\n        \"values\": true\n      },\n      \"lines\": false,\n      \"linewidth\": 0,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": true,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": true,\n      \"steppedLine\": true,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"notused\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT /^[[repogroups]]$/ FROM \\\"repo_group_activity_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  ${types:csv}\\nfrom\\n  sevent_types\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"[[full_name]] GitHub events ([[types]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": null,\n          \"format\": \"short\",\n          \"label\": \"GitHub events\",\n          \"logBase\": 1,\n          \"max\": \"100\",\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 63\n      },\n      \"id\": 1,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"24 Hours MA\",\n          \"value\": \"h24\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Hour\",\n            \"value\": \"h\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"24 Hours MA\",\n            \"value\": \"h24\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Day\",\n            \"value\": \"d\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"h,d,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {\n          \"text\": \"All\",\n          \"value\": \"$__all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": true,\n        \"label\": \"Event type\",\n        \"multi\": true,\n        \"name\": \"types\",\n        \"options\": [],\n        \"query\": \"select '\\\"' || event_type_name || '\\\"' from tevent_types order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'github_events_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-30d\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"GitHub events\",\n  \"uid\": \"47\",\n  \"version\": 3\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/issues-age.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] release\",\n        \"type\": \"alert\"\n      },\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"limit\": 100,\n        \"name\": \"Annotations & Alerts\",\n        \"showIn\": 0,\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674670933,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"cacheTimeout\": null,\n      \"colorBackground\": false,\n      \"colorValue\": false,\n      \"colors\": [\n        \"rgba(245, 54, 54, 0.9)\",\n        \"rgba(237, 129, 40, 0.89)\",\n        \"rgba(50, 172, 45, 0.97)\"\n      ],\n      \"datasource\": \"psql\",\n      \"description\": \"Current median closing time for recent issues.\",\n      \"format\": \"none\",\n      \"gauge\": {\n        \"maxValue\": 100,\n        \"minValue\": 0,\n        \"show\": false,\n        \"thresholdLabels\": false,\n        \"thresholdMarkers\": true\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 14,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 2,\n      \"interval\": null,\n      \"links\": [],\n      \"mappingType\": 1,\n      \"mappingTypes\": [\n        {\n          \"name\": \"value to text\",\n          \"value\": 1\n        },\n        {\n          \"name\": \"range to text\",\n          \"value\": 2\n        }\n      ],\n      \"maxDataPoints\": 100,\n      \"nullPointMode\": \"connected\",\n      \"nullText\": null,\n      \"postfix\": \"\",\n      \"postfixFontSize\": \"50%\",\n      \"prefix\": \"\",\n      \"prefixFontSize\": \"50%\",\n      \"rangeMaps\": [\n        {\n          \"from\": \"null\",\n          \"text\": \"N/A\",\n          \"to\": \"null\"\n        }\n      ],\n      \"sparkline\": {\n        \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n        \"full\": false,\n        \"lineColor\": \"rgb(31, 120, 193)\",\n        \"show\": false\n      },\n      \"tableColumn\": \"descr\",\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"descr\\\" FROM \\\"autogen\\\".\\\"issues_age_[[repogroup]]_[[prio]]_median_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  descr\\nfrom\\n  sissues_age\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'iage[[repogroup]][[prio]]m'\\norder by\\n  time desc\\nlimit 1\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": \"\",\n      \"title\": \"Current median time to close for issues created last [[period]] for repository group [[repogroup_name]], Priority: [[prio_name]]\",\n      \"type\": \"singlestat\",\n      \"valueFontSize\": \"50%\",\n      \"valueMaps\": [\n        {\n          \"op\": \"=\",\n          \"text\": \"N/A\",\n          \"value\": \"null\"\n        }\n      ],\n      \"valueName\": \"current\"\n    },\n    {\n      \"cacheTimeout\": null,\n      \"colorBackground\": false,\n      \"colorValue\": false,\n      \"colors\": [\n        \"rgba(245, 54, 54, 0.9)\",\n        \"rgba(237, 129, 40, 0.89)\",\n        \"rgba(50, 172, 45, 0.97)\"\n      ],\n      \"datasource\": \"psql\",\n      \"description\": \"Number of closed issues opened recently\",\n      \"format\": \"none\",\n      \"gauge\": {\n        \"maxValue\": 100,\n        \"minValue\": 0,\n        \"show\": false,\n        \"thresholdLabels\": false,\n        \"thresholdMarkers\": true\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 10,\n        \"x\": 14,\n        \"y\": 0\n      },\n      \"id\": 4,\n      \"interval\": null,\n      \"links\": [],\n      \"mappingType\": 1,\n      \"mappingTypes\": [\n        {\n          \"name\": \"value to text\",\n          \"value\": 1\n        },\n        {\n          \"name\": \"range to text\",\n          \"value\": 2\n        }\n      ],\n      \"maxDataPoints\": 100,\n      \"nullPointMode\": \"connected\",\n      \"nullText\": null,\n      \"postfix\": \"\",\n      \"postfixFontSize\": \"50%\",\n      \"prefix\": \"\",\n      \"prefixFontSize\": \"50%\",\n      \"rangeMaps\": [\n        {\n          \"from\": \"null\",\n          \"text\": \"N/A\",\n          \"to\": \"null\"\n        }\n      ],\n      \"sparkline\": {\n        \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n        \"full\": false,\n        \"lineColor\": \"rgb(31, 120, 193)\",\n        \"show\": false\n      },\n      \"tableColumn\": \"descr\",\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"autogen\\\".\\\"issues_age_[[repogroup]]_[[prio]]_number_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time, value\\nfrom\\n  sissues_age\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'iage[[repogroup]][[prio]]n'\\norder by\\n  time desc\\nlimit 1\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": \"\",\n      \"title\": \"Number of closed issues opened last [[period]] for repository group [[repogroup_name]], Priority: [[prio_name]]\",\n      \"type\": \"singlestat\",\n      \"valueFontSize\": \"50%\",\n      \"valueMaps\": [\n        {\n          \"op\": \"=\",\n          \"text\": \"N/A\",\n          \"value\": \"null\"\n        }\n      ],\n      \"valueName\": \"current\"\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 2,\n      \"description\": \"Median time to close and number of issues created in [[repogroup]] repository group.\",\n      \"fill\": 3,\n      \"gridPos\": {\n        \"h\": 13,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 3\n      },\n      \"id\": 1,\n      \"legend\": {\n        \"alignAsTable\": false,\n        \"avg\": true,\n        \"current\": true,\n        \"hideEmpty\": false,\n        \"hideZero\": false,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": false,\n        \"show\": true,\n        \"sideWidth\": null,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": false,\n      \"linewidth\": 0,\n      \"links\": [],\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pointradius\": 1,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [\n        {\n          \"alias\": \"Median time to close issue\",\n          \"fill\": 2,\n          \"lines\": true,\n          \"linewidth\": 0,\n          \"yaxis\": 1\n        },\n        {\n          \"alias\": \"Average number of issues opened\",\n          \"fill\": 0,\n          \"lines\": true,\n          \"linewidth\": 1,\n          \"yaxis\": 2\n        }\n      ],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"hide\": false,\n          \"measurement\": \"reviewers_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"autogen\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"autogen\\\".\\\"issues_age_[[repogroup]]_[[prio]]_number_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Average number of issues opened\\\"\\nfrom\\n  sissues_age\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'iage[[repogroup]][[prio]]n'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"hide\": false,\n          \"measurement\": \"reviewers_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"autogen\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"autogen\\\".\\\"issues_age_[[repogroup]]_[[prio]]_median_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Median time to close issue\\\"\\nfrom\\n  sissues_age\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'iage[[repogroup]][[prio]]m'\\norder by\\n  time\",\n          \"refId\": \"B\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Number/Median time to close of Issues in [[repogroup_name]] repository group ([[period]]), Priority: [[prio_name]]\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"transparent\": false,\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": [\n          \"total\"\n        ]\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": null,\n          \"format\": \"h\",\n          \"label\": \"Median issue close time\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"decimals\": null,\n          \"format\": \"short\",\n          \"label\": \"Average issues opened\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"columns\": [],\n      \"datasource\": \"psql\",\n      \"description\": \"Median time to close and the number​ of issues created in [[repogroup]] repository group.\",\n      \"fontSize\": \"90%\",\n      \"gridPos\": {\n        \"h\": 11,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 16\n      },\n      \"id\": 3,\n      \"links\": [],\n      \"pageSize\": 10,\n      \"scroll\": true,\n      \"showHeader\": true,\n      \"sort\": {\n        \"col\": 0,\n        \"desc\": true\n      },\n      \"styles\": [\n        {\n          \"alias\": \"Time\",\n          \"dateFormat\": \"MM/DD/YYYY\",\n          \"pattern\": \"Time\",\n          \"type\": \"date\"\n        },\n        {\n          \"alias\": \"\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"decimals\": 2,\n          \"pattern\": \"/.*/\",\n          \"thresholds\": [],\n          \"type\": \"number\",\n          \"unit\": \"short\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"descr\\\" FROM \\\"autogen\\\".\\\"issues_age_[[repogroup]]_[[prio]]_median_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time as \\\"Time\\\",\\n  descr as \\\"Median time to close issue\\\"\\nfrom\\n  sissues_age\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'iage[[repogroup]][[prio]]m'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"autogen\\\".\\\"issues_age_[[repogroup]]_[[prio]]_number_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time as \\\"Time\\\",\\n  value as \\\"Average number of issues opened\\\"\\nfrom\\n  sissues_age\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'iage[[repogroup]][[prio]]n'\\norder by\\n  time\",\n          \"refId\": \"B\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"title\": \"Number/Median time to close of Issues in [[repogroup_name]] repository group ([[period]]), Priority: [[prio_name]]\",\n      \"transform\": \"table\",\n      \"transparent\": false,\n      \"type\": \"table\"\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 27\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"Spinnaker\",\n          \"value\": \"Spinnaker\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"7 Days MA\",\n          \"value\": \"d7\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Day\",\n            \"value\": \"d\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"d,d7,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"All\",\n          \"value\": \"All\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"all\",\n          \"value\": \"all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"All\",\n          \"value\": \"All\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Priority\",\n        \"multi\": false,\n        \"name\": \"prio_name\",\n        \"options\": [],\n        \"query\": \"select priority_labels_name_with_all from tpriority_labels_with_all order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {\n          \"text\": \"all\",\n          \"value\": \"all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"Priority\",\n        \"multi\": false,\n        \"name\": \"prio\",\n        \"options\": [],\n        \"query\": \"select priority_labels_value_with_all from tpriority_labels_with_all where priority_labels_name_with_all = '[[prio_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"<h1 id=\\\"dashboard-header\\\">Spinnaker issues age dashboard</h1>\\n<p>Links:</p>\\n<ul>\\n<li>Metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/issues_age.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>TSDB <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\\\" target=\\\"_blank\\\">series definition</a>. Search for <code>issues_age</code></li>\\n<li>Grafana dashboard <a href=\\\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/spinnaker/issues-age.json\\\" target=\\\"_blank\\\">JSON</a>.</li>\\n</ul>\\n<h1 id=\\\"description\\\">Description</h1>\\n<ul>\\n<li>This dashboard shows median time to close issues opened in selected periods and average number of closed issues opened in those periods.</li>\\n<li>Selecting period (for example week) means that dashboard will calculate data for issues opened in those periods.</li>\\n<li>You can select single repository group or summary for all of them.</li>\\n<li>You can select all issues or issues with a specific priority.</li>\\n<li>Issue priority is defined as a label <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/labels_priorities_tags_with_all.sql\\\" target=\\\"_blank\\\">here</a>.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/periods.md\\\" target=\\\"_blank\\\">here</a> for more informations about periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\\\" target=\\\"_blank\\\">here</a> for more informations about repository groups.</li>\\n</ul>\",\n          \"value\": \"<h1 id=\\\"dashboard-header\\\">Spinnaker issues age dashboard</h1>\\n<p>Links:</p>\\n<ul>\\n<li>Metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/issues_age.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>TSDB <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\\\" target=\\\"_blank\\\">series definition</a>. Search for <code>issues_age</code></li>\\n<li>Grafana dashboard <a href=\\\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/spinnaker/issues-age.json\\\" target=\\\"_blank\\\">JSON</a>.</li>\\n</ul>\\n<h1 id=\\\"description\\\">Description</h1>\\n<ul>\\n<li>This dashboard shows median time to close issues opened in selected periods and average number of closed issues opened in those periods.</li>\\n<li>Selecting period (for example week) means that dashboard will calculate data for issues opened in those periods.</li>\\n<li>You can select single repository group or summary for all of them.</li>\\n<li>You can select all issues or issues with a specific priority.</li>\\n<li>Issue priority is defined as a label <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/labels_priorities_tags_with_all.sql\\\" target=\\\"_blank\\\">here</a>.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/periods.md\\\" target=\\\"_blank\\\">here</a> for more informations about periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\\\" target=\\\"_blank\\\">here</a> for more informations about repository groups.</li>\\n</ul>\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'issues_age_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now-1w\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Issues age\",\n  \"uid\": \"11\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/issues-repository-group.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674685828,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": true,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 2,\n      \"description\": \"Show Issues opened/closed for given repository group\",\n      \"fill\": 1,\n      \"gridPos\": {\n        \"h\": 18,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 3,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"hideEmpty\": false,\n        \"hideZero\": false,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": false,\n        \"show\": true,\n        \"sort\": \"avg\",\n        \"sortDesc\": true,\n        \"total\": true,\n        \"values\": true\n      },\n      \"lines\": false,\n      \"linewidth\": 1,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": true,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"sig_federation_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT /^[[repogroup]]$/ FROM \\\"issues_opened_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  \\\"[[repogroup]]\\\" as \\\"Issues opened\\\"\\nfrom\\n  siopened\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"sig_federation_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT /^[[repogroup]]$/ FROM \\\"issues_closed_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  \\\"[[repogroup]]\\\" as \\\"Issues closed\\\"\\nfrom\\n  siclosed\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"B\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Issues Repository group: [[repogroup_name]] ([[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"transparent\": true,\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": [\n          \"total\"\n        ]\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": \"Issues\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 18\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"7 Days MA\",\n          \"value\": \"d7\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Day\",\n            \"value\": \"d\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"d,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'issues_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Issues repository group\",\n  \"uid\": \"12\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/new-and-episodic-issue-creators.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674703674,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 0,\n      \"description\": \"Displays number of new/episodic PRs and number of new/episodic PRs authors.\\nThe episodic author is defined as someone who hasn't created PRs in the last 3 months and no more than 12 PRs overall.\",\n      \"fill\": 1,\n      \"gridPos\": {\n        \"h\": 22,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 1,\n      \"legend\": {\n        \"alignAsTable\": false,\n        \"avg\": true,\n        \"current\": true,\n        \"hideEmpty\": false,\n        \"hideZero\": false,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"links\": [],\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pointradius\": 1,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [\n        {\n          \"alias\": \"New contributors\",\n          \"yaxis\": 2\n        },\n        {\n          \"alias\": \"Episodic contributors\",\n          \"yaxis\": 2\n        }\n      ],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"hide\": false,\n          \"measurement\": \"reviewers_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"autogen\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"new_contributors_[[repogroup]]_prs_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Number of issues from new contributors\\\"\\nfrom\\n  snew_issues\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'new_iss[[repogroup]]iss'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"hide\": false,\n          \"measurement\": \"reviewers_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"autogen\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"new_contributors_[[repogroup]]_contributors_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"New issue creators\\\"\\nfrom\\n  snew_issues\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'new_iss[[repogroup]]contrib'\\norder by\\n  time\",\n          \"refId\": \"B\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"hide\": false,\n          \"measurement\": \"reviewers_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"autogen\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"episodic_contributors_[[repogroup]]_prs_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Number of issues from episodic contributors\\\"\\nfrom\\n  sepisodic_issues\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'epis_iss[[repogroup]]iss'\\norder by\\n  time\",\n          \"refId\": \"C\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"hide\": false,\n          \"measurement\": \"reviewers_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"autogen\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"episodic_contributors_[[repogroup]]_contributors_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Episodic issue creators\\\"\\nfrom\\n  sepisodic_issues\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'epis_iss[[repogroup]]contrib'\\norder by\\n  time\",\n          \"refId\": \"D\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"New/episodic contributors/contributions ([[repogroup_name]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"transparent\": true,\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": [\n          \"total\"\n        ]\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": \"PRs\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"none\",\n          \"label\": \"PR authors\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 11,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\",\n    \"PRs\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"28 Days MA\",\n          \"value\": \"d28\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"28 Days MA\",\n            \"value\": \"d28\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"d,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 1,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'new_and_episodic_issues_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now-1M\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"New and episodic issue creators\",\n  \"uid\": \"13\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/new-and-episodic-pr-contributors.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674726561,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 0,\n      \"description\": \"Displays the number of new/episodic issues and the number of new/episodic issues authors.\\nThe episodic author is defined as someone who hasn't created issue in the last 3 months and no more than 12 issues overall.\",\n      \"fill\": 1,\n      \"gridPos\": {\n        \"h\": 22,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 1,\n      \"legend\": {\n        \"alignAsTable\": false,\n        \"avg\": true,\n        \"current\": true,\n        \"hideEmpty\": false,\n        \"hideZero\": false,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"links\": [],\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pointradius\": 1,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [\n        {\n          \"alias\": \"New issue creators\",\n          \"yaxis\": 2\n        },\n        {\n          \"alias\": \"Episodic issue creators\",\n          \"yaxis\": 2\n        }\n      ],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"hide\": false,\n          \"measurement\": \"reviewers_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"autogen\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"new_issues_[[repogroup]]_issues_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Number of PRs from new contributors\\\"\\nfrom\\n  snew_contributors\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'new_contrib[[repogroup]]prs'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"hide\": false,\n          \"measurement\": \"reviewers_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"autogen\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"new_issues_[[repogroup]]_contributors_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"New contributors\\\"\\nfrom\\n  snew_contributors\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'new_contrib[[repogroup]]contrib'\\norder by\\n  time\",\n          \"refId\": \"B\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"hide\": false,\n          \"measurement\": \"reviewers_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"autogen\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"episodic_issues_[[repogroup]]_issues_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Number of PRs from episodic contributors\\\"\\nfrom\\n  sepisodic_contributors\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'epis_contrib[[repogroup]]prs'\\norder by\\n  time\",\n          \"refId\": \"C\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"hide\": false,\n          \"measurement\": \"reviewers_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"autogen\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"episodic_issues_[[repogroup]]_contributors_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Episodic contributors\\\"\\nfrom\\n  sepisodic_contributors\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'epis_contrib[[repogroup]]contrib'\\norder by\\n  time\",\n          \"refId\": \"D\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"New/episodic issues ([[repogroup_name]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"transparent\": true,\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": [\n          \"total\"\n        ]\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": \"Issues\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"none\",\n          \"label\": \"Issue creators\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 11,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\",\n    \"issues\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"28 Days MA\",\n          \"value\": \"d28\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"28 Days MA\",\n            \"value\": \"d28\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"d,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 1,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'new_and_episodic_prs_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now-1M\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"New and episodic PR contributors\",\n  \"uid\": \"14\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/new-contributors-table.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1541500383578,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"columns\": [],\n      \"datasource\": \"psql\",\n      \"description\": \"\",\n      \"fontSize\": \"90%\",\n      \"gridPos\": {\n        \"h\": 25,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"hideTimeOverride\": false,\n      \"id\": 1,\n      \"links\": [],\n      \"pageSize\": 30,\n      \"scroll\": true,\n      \"showHeader\": true,\n      \"sort\": {\n        \"col\": 1,\n        \"desc\": false\n      },\n      \"styles\": [\n        {\n          \"alias\": \"Contributor\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": 2,\n          \"pattern\": \"str\",\n          \"preserveFormat\": false,\n          \"thresholds\": [],\n          \"type\": \"string\",\n          \"unit\": \"short\"\n        },\n        {\n          \"alias\": \"First contribution\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"dateFormat\": \"MM/DD/YY h:mm:ss a\",\n          \"decimals\": 0,\n          \"pattern\": \"dt\",\n          \"thresholds\": [],\n          \"type\": \"date\",\n          \"unit\": \"none\"\n        },\n        {\n          \"alias\": \"\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": 2,\n          \"mappingType\": 1,\n          \"pattern\": \"\",\n          \"thresholds\": [],\n          \"type\": \"number\",\n          \"unit\": \"short\"\n        },\n        {\n          \"alias\": \"\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"decimals\": 0,\n          \"pattern\": \"/.*/\",\n          \"thresholds\": [],\n          \"type\": \"number\",\n          \"unit\": \"short\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select str, dt from \\\"snew_contributors_data\\\" where $__timeFilter(dt) and series = 'ncd[[repogroup]]' and period = 'h'\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"table\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"[[full_name]] New contributors table (Repository group [[repogroup_name]])\",\n      \"transform\": \"table\",\n      \"transparent\": false,\n      \"type\": \"table\"\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 25\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\",\n    \"table\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"All\",\n          \"value\": \"All\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"all\",\n          \"value\": \"all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"isNone\": true,\n          \"text\": \"None\",\n          \"value\": \"\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'new_contributors_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-1M\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"hidden\": false,\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"New contributors table\",\n  \"uid\": \"52\",\n  \"version\": 4\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/new-prs.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674748840,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": true,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 0,\n      \"description\": \"Number of new pull requests created in [[repogroup]] repository group.\",\n      \"fill\": 1,\n      \"gridPos\": {\n        \"h\": 22,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 1,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"hideEmpty\": false,\n        \"hideZero\": false,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": false,\n        \"show\": true,\n        \"total\": true,\n        \"values\": true\n      },\n      \"lines\": false,\n      \"linewidth\": 1,\n      \"links\": [],\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"hide\": false,\n          \"measurement\": \"reviewers_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"autogen\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"autogen\\\".\\\"new_prs_[[repogroup]]_[[period]][[aggregate]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"[[repogroup_name]]\\\"\\nfrom\\n  snew_prs\\nwhere\\n  $__timeFilter(time)\\n  and series = 'new_prs[[repogroup]]'\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"New PRs created in [[repogroup_name]] repository group ([[period]])\",\n      \"tooltip\": {\n        \"shared\": false,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"transparent\": false,\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": [\n          \"total\"\n        ]\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": \"New PRs\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"7 Days MA\",\n          \"value\": \"d7\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Day\",\n            \"value\": \"d\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"d,d7,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'new_prs_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"New PRs\",\n  \"uid\": \"dVM-cCCkk\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/opened-to-merged.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674759421,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 2,\n      \"description\": \"Median, 15th and 85th percentile of number of hours from open to merging for PR\",\n      \"fill\": 0,\n      \"gridPos\": {\n        \"h\": 13,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 2,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"links\": [],\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [\n        {\n          \"alias\": \"15th percentile time opened to merged (in hours)\",\n          \"yaxis\": 2\n        }\n      ],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"opened_to_merged_[[repogroup]]_percentile_85_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"85th percentile time opened to merged (in hours)\\\"\\nfrom\\n  sopened_to_merged\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'open2merge[[repogroup]]p85'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"opened_to_merged_[[repogroup]]_median_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Median time opened to merged (in hours)\\\"\\nfrom\\n  sopened_to_merged\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'open2merge[[repogroup]]med'\\norder by\\n  time\",\n          \"refId\": \"B\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"opened_to_merged_[[repogroup]]_percentile_15_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"15th percentile time opened to merged (in hours)\\\"\\nfrom\\n  sopened_to_merged\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'open2merge[[repogroup]]p15'\\norder by\\n  time\",\n          \"refId\": \"C\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Time from open to merge ([[repogroup_name]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"h\",\n          \"label\": \"Opened to merged (median & 85th percentile)\",\n          \"logBase\": 10,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"Opened to merged (15th percentile)\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"columns\": [],\n      \"datasource\": \"psql\",\n      \"description\": \"Time PRs from open to merge\",\n      \"fontSize\": \"90%\",\n      \"gridPos\": {\n        \"h\": 11,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 13\n      },\n      \"id\": 3,\n      \"links\": [],\n      \"pageSize\": 10,\n      \"scroll\": true,\n      \"showHeader\": true,\n      \"sort\": {\n        \"col\": 0,\n        \"desc\": true\n      },\n      \"styles\": [\n        {\n          \"alias\": \"Time\",\n          \"dateFormat\": \"MM/DD/YYYY\",\n          \"pattern\": \"Time\",\n          \"type\": \"date\"\n        },\n        {\n          \"alias\": \"\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"decimals\": 2,\n          \"pattern\": \"/.*/\",\n          \"thresholds\": [],\n          \"type\": \"number\",\n          \"unit\": \"short\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"descr\\\" FROM \\\"opened_to_merged_[[repogroup]]_percentile_15_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time as \\\"Time\\\",\\n  descr as \\\"Median\\\"\\nfrom\\n  sopened_to_merged\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'open2merge[[repogroup]]med'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"descr\\\" FROM \\\"opened_to_merged_[[repogroup]]_median_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time as \\\"Time\\\",\\n  descr as \\\"15th percentile\\\"\\nfrom\\n  sopened_to_merged\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'open2merge[[repogroup]]p15'\\norder by\\n  time\",\n          \"refId\": \"B\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"descr\\\" FROM \\\"opened_to_merged_[[repogroup]]_percentile_85_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time as \\\"Time\\\",\\n  descr as \\\"85th percentile\\\"\\nfrom\\n  sopened_to_merged\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'open2merge[[repogroup]]p85'\\norder by\\n  time\",\n          \"refId\": \"C\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"title\": \"Time from open to merge ([[repogroup_name]], [[period]])\",\n      \"transform\": \"table\",\n      \"type\": \"table\"\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 24\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"7 Days MA\",\n          \"value\": \"d7\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"d7,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'opened_to_merged_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now-1w\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Opened to merged\",\n  \"uid\": \"16\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/pr-comments.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674773028,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": true,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 0,\n      \"description\": \"Median and 85th, 95th percentile of comments for PRs created in given period\",\n      \"fill\": 1,\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 2,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": false,\n      \"linewidth\": 1,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"pr_comments_percentile_95_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"95th percentile for number of comments on PRs\\\"\\nfrom\\n  spr_comms_p95\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"pr_comments_percentile_85_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"85th percentile for number of comments on PRs\\\"\\nfrom\\n  spr_comms_p85\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"B\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"pr_comments_median_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Median for number of comments on PRs\\\"\\nfrom\\n  spr_comms_med\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"C\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Median and 85th, 95th percentile of number of comments for PRs ([[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": [\n          \"avg\"\n        ]\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": \"Comments\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"none\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 21\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"Kubeflow\",\n          \"value\": \"Kubeflow\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"Week\",\n          \"value\": \"w\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Day\",\n            \"value\": \"d\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"d,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"<h1 id=\\\"dashboard-header\\\">Kubeflow PR comments dashboard</h1>\\n<p>Links:</p>\\n<ul>\\n<li>Metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/pr_comments.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>TSDB <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\\\" target=\\\"_blank\\\">series definition</a>. Search for <code>pr_comments</code></li>\\n<li>Grafana dashboard <a href=\\\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubeflow/pr-comments.json\\\" target=\\\"_blank\\\">JSON</a>.</li>\\n</ul>\\n<h1 id=\\\"description\\\">Description</h1>\\n<ul>\\n<li>This dashboard shows median, 85th and 95th percentiles of the number of comments on PRs.</li>\\n<li>Selecting period (for example week) means that dashboard will calculate percentiles in those periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/periods.md\\\" target=\\\"_blank\\\">here</a> for more informations about periods.</li>\\n<li>We are skipping bots activity, see <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\\\" target=\\\"_blank\\\">excluding bots</a> for details.</li>\\n</ul>\",\n          \"value\": \"<h1 id=\\\"dashboard-header\\\">Kubeflow PR comments dashboard</h1>\\n<p>Links:</p>\\n<ul>\\n<li>Metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/pr_comments.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>TSDB <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\\\" target=\\\"_blank\\\">series definition</a>. Search for <code>pr_comments</code></li>\\n<li>Grafana dashboard <a href=\\\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubeflow/pr-comments.json\\\" target=\\\"_blank\\\">JSON</a>.</li>\\n</ul>\\n<h1 id=\\\"description\\\">Description</h1>\\n<ul>\\n<li>This dashboard shows median, 85th and 95th percentiles of the number of comments on PRs.</li>\\n<li>Selecting period (for example week) means that dashboard will calculate percentiles in those periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/periods.md\\\" target=\\\"_blank\\\">here</a> for more informations about periods.</li>\\n<li>We are skipping bots activity, see <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\\\" target=\\\"_blank\\\">excluding bots</a> for details.</li>\\n</ul>\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'pr_comments_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"PR comments\",\n  \"uid\": \"17\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/project-statistics.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1529598271770,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"columns\": [],\n      \"datasource\": \"psql\",\n      \"description\": \"\",\n      \"fontSize\": \"90%\",\n      \"gridPos\": {\n        \"h\": 22,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"hideTimeOverride\": true,\n      \"id\": 1,\n      \"links\": [],\n      \"pageSize\": 20,\n      \"scroll\": true,\n      \"showHeader\": true,\n      \"sort\": {\n        \"col\": 0,\n        \"desc\": true\n      },\n      \"styles\": [\n        {\n          \"alias\": \"Time\",\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": null,\n          \"pattern\": \"Time\",\n          \"type\": \"hidden\"\n        },\n        {\n          \"alias\": \"Metric name\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": 2,\n          \"pattern\": \"name\",\n          \"preserveFormat\": false,\n          \"thresholds\": [],\n          \"type\": \"string\",\n          \"unit\": \"short\"\n        },\n        {\n          \"alias\": \"Metric value\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": 0,\n          \"pattern\": \"value\",\n          \"thresholds\": [],\n          \"type\": \"number\",\n          \"unit\": \"none\"\n        },\n        {\n          \"alias\": \"\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"decimals\": 0,\n          \"pattern\": \"/.*/\",\n          \"thresholds\": [],\n          \"type\": \"number\",\n          \"unit\": \"short\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"name\\\", \\\"value\\\" FROM \\\"project_stats_[[repogroup]]_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select name, value from \\\"spstat\\\" where series = 'pstat[[repogroup]]' and period = '[[period]]'\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"table\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"title\": \"[[full_name]] Project statistics (Repository group [[repogroup_name]], Range: [[period_name]]), bots excluded\",\n      \"transform\": \"table\",\n      \"transparent\": false,\n      \"type\": \"table\"\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\",\n    \"table\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"OCI\",\n          \"value\": \"OCI\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"Last decade\",\n          \"value\": \"Last decade\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Range\",\n        \"multi\": false,\n        \"name\": \"period_name\",\n        \"options\": [],\n        \"query\": \"select quick_ranges_name from tquick_ranges order by time\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"y10\",\n          \"value\": \"y10\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [],\n        \"query\": \"select quick_ranges_suffix from tquick_ranges where quick_ranges_name = '[[period_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"All\",\n          \"value\": \"All\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"all\",\n          \"value\": \"all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'projects_stats_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-5y\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"hidden\": true,\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Project statistics\",\n  \"uid\": \"18\",\n  \"version\": 3\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/prs-age.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674815323,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"cacheTimeout\": null,\n      \"colorBackground\": false,\n      \"colorValue\": false,\n      \"colors\": [\n        \"rgba(245, 54, 54, 0.9)\",\n        \"rgba(237, 129, 40, 0.89)\",\n        \"rgba(50, 172, 45, 0.97)\"\n      ],\n      \"datasource\": \"psql\",\n      \"description\": \"Current median age of opened PRs.\",\n      \"format\": \"none\",\n      \"gauge\": {\n        \"maxValue\": 100,\n        \"minValue\": 0,\n        \"show\": false,\n        \"thresholdLabels\": false,\n        \"thresholdMarkers\": true\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 14,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 2,\n      \"interval\": null,\n      \"links\": [],\n      \"mappingType\": 1,\n      \"mappingTypes\": [\n        {\n          \"name\": \"value to text\",\n          \"value\": 1\n        },\n        {\n          \"name\": \"range to text\",\n          \"value\": 2\n        }\n      ],\n      \"maxDataPoints\": 100,\n      \"nullPointMode\": \"connected\",\n      \"nullText\": null,\n      \"postfix\": \"\",\n      \"postfixFontSize\": \"50%\",\n      \"prefix\": \"\",\n      \"prefixFontSize\": \"50%\",\n      \"rangeMaps\": [\n        {\n          \"from\": \"null\",\n          \"text\": \"N/A\",\n          \"to\": \"null\"\n        }\n      ],\n      \"sparkline\": {\n        \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n        \"full\": false,\n        \"lineColor\": \"rgb(31, 120, 193)\",\n        \"show\": false\n      },\n      \"tableColumn\": \"descr\",\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"descr\\\" FROM \\\"autogen\\\".\\\"prs_age_[[repogroup]]_median_[[period]][[aggregate]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  descr\\nfrom\\n  sprs_age\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'prs_age[[repogroup]]m'\\norder by\\n  time desc\\nlimit 1\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": \"\",\n      \"title\": \"Current median age of opened PRs in [[repogroup_name]] repository group ([[period]])\",\n      \"type\": \"singlestat\",\n      \"valueFontSize\": \"50%\",\n      \"valueMaps\": [\n        {\n          \"op\": \"=\",\n          \"text\": \"N/A\",\n          \"value\": \"null\"\n        }\n      ],\n      \"valueName\": \"current\"\n    },\n    {\n      \"cacheTimeout\": null,\n      \"colorBackground\": false,\n      \"colorValue\": false,\n      \"colors\": [\n        \"rgba(245, 54, 54, 0.9)\",\n        \"rgba(237, 129, 40, 0.89)\",\n        \"rgba(50, 172, 45, 0.97)\"\n      ],\n      \"datasource\": \"psql\",\n      \"description\": \"Current average number of opened PRs.\",\n      \"format\": \"none\",\n      \"gauge\": {\n        \"maxValue\": 100,\n        \"minValue\": 0,\n        \"show\": false,\n        \"thresholdLabels\": false,\n        \"thresholdMarkers\": true\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 10,\n        \"x\": 14,\n        \"y\": 0\n      },\n      \"id\": 4,\n      \"interval\": null,\n      \"links\": [],\n      \"mappingType\": 1,\n      \"mappingTypes\": [\n        {\n          \"name\": \"value to text\",\n          \"value\": 1\n        },\n        {\n          \"name\": \"range to text\",\n          \"value\": 2\n        }\n      ],\n      \"maxDataPoints\": 100,\n      \"nullPointMode\": \"connected\",\n      \"nullText\": null,\n      \"postfix\": \"\",\n      \"postfixFontSize\": \"50%\",\n      \"prefix\": \"\",\n      \"prefixFontSize\": \"50%\",\n      \"rangeMaps\": [\n        {\n          \"from\": \"null\",\n          \"text\": \"N/A\",\n          \"to\": \"null\"\n        }\n      ],\n      \"sparkline\": {\n        \"fillColor\": \"rgba(31, 118, 189, 0.18)\",\n        \"full\": false,\n        \"lineColor\": \"rgb(31, 120, 193)\",\n        \"show\": false\n      },\n      \"tableColumn\": \"descr\",\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"autogen\\\".\\\"prs_age_[[repogroup]]_number_[[period]][[aggregate]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time, value\\nfrom\\n  sprs_age\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'prs_age[[repogroup]]n'\\norder by\\n  time desc\\nlimit 1\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": \"\",\n      \"title\": \"Current average number of opened PRs in [[repogroup_name]] repository group ([[period]])\",\n      \"type\": \"singlestat\",\n      \"valueFontSize\": \"50%\",\n      \"valueMaps\": [\n        {\n          \"op\": \"=\",\n          \"text\": \"N/A\",\n          \"value\": \"null\"\n        }\n      ],\n      \"valueName\": \"current\"\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 2,\n      \"description\": \"Median age and number of pull requests created in [[repogroup]] repository group.\",\n      \"fill\": 3,\n      \"gridPos\": {\n        \"h\": 13,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 3\n      },\n      \"id\": 1,\n      \"legend\": {\n        \"alignAsTable\": false,\n        \"avg\": true,\n        \"current\": true,\n        \"hideEmpty\": false,\n        \"hideZero\": false,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": false,\n        \"show\": true,\n        \"sideWidth\": null,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": false,\n      \"linewidth\": 0,\n      \"links\": [],\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pointradius\": 1,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [\n        {\n          \"alias\": \"Median age of opened PRs\",\n          \"fill\": 2,\n          \"lines\": true,\n          \"linewidth\": 0,\n          \"yaxis\": 1\n        },\n        {\n          \"alias\": \"Average number of PRs opened\",\n          \"fill\": 0,\n          \"lines\": true,\n          \"linewidth\": 1,\n          \"yaxis\": 2\n        }\n      ],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"hide\": false,\n          \"measurement\": \"reviewers_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"autogen\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"autogen\\\".\\\"prs_age_[[repogroup]]_number_[[period]][[aggregate]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Average number of PRs opened\\\"\\nfrom\\n  sprs_age\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'prs_age[[repogroup]]n'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"hide\": false,\n          \"measurement\": \"reviewers_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"autogen\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"autogen\\\".\\\"prs_age_[[repogroup]]_median_[[period]][[aggregate]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Median age of opened PRs\\\"\\nfrom\\n  sprs_age\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'prs_age[[repogroup]]m'\\norder by\\n  time\",\n          \"refId\": \"B\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Number/Age of Pull requests in [[repogroup_name]] repository group ([[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"transparent\": false,\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": [\n          \"total\"\n        ]\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"h\",\n          \"label\": \"Median PRs age\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"Average opened PRs number\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"columns\": [],\n      \"datasource\": \"psql\",\n      \"description\": \"Median age and number of pull requests created in [[repogroup]] repository group.\",\n      \"fontSize\": \"90%\",\n      \"gridPos\": {\n        \"h\": 11,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 16\n      },\n      \"id\": 3,\n      \"links\": [],\n      \"pageSize\": 10,\n      \"scroll\": true,\n      \"showHeader\": true,\n      \"sort\": {\n        \"col\": 0,\n        \"desc\": true\n      },\n      \"styles\": [\n        {\n          \"alias\": \"Time\",\n          \"dateFormat\": \"MM/DD/YYYY\",\n          \"pattern\": \"Time\",\n          \"type\": \"date\"\n        },\n        {\n          \"alias\": \"\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"decimals\": 2,\n          \"pattern\": \"/.*/\",\n          \"thresholds\": [],\n          \"type\": \"number\",\n          \"unit\": \"short\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"descr\\\" FROM \\\"autogen\\\".\\\"prs_age_[[repogroup]]_median_[[period]][[aggregate]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time as \\\"Time\\\",\\n  descr as \\\"Median opened PRs age\\\"\\nfrom\\n  sprs_age\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'prs_age[[repogroup]]m'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"autogen\\\".\\\"prs_age_[[repogroup]]_number_[[period]][[aggregate]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time as \\\"Time\\\",\\n  value as \\\"Average number of opened PRs\\\"\\nfrom\\n  sprs_age\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'prs_age[[repogroup]]n'\\norder by\\n  time\",\n          \"refId\": \"B\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"title\": \"Number/Age of Pull requests in [[repogroup_name]] repository group ([[period]])\",\n      \"transform\": \"table\",\n      \"transparent\": false,\n      \"type\": \"table\"\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 27\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"7 Days MA\",\n          \"value\": \"d7\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Day\",\n            \"value\": \"d\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"d,d7,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"All\",\n          \"value\": \"All\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"all\",\n          \"value\": \"all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'prs_age_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now-1w\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"PRs age\",\n  \"uid\": \"19\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/prs-approval.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674829778,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 2,\n      \"description\": \"Number of PRs\",\n      \"fill\": 5,\n      \"gridPos\": {\n        \"h\": 22,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 2,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": false,\n        \"show\": true,\n        \"sort\": \"avg\",\n        \"sortDesc\": true,\n        \"total\": true,\n        \"values\": true\n      },\n      \"lines\": true,\n      \"linewidth\": 0,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": true,\n      \"steppedLine\": true,\n      \"targets\": [\n        {\n          \"alias\": \"Approved\",\n          \"dsType\": \"influxdb\",\n          \"groupBy\": [],\n          \"measurement\": \"\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT /^[[repogroup]]$/ FROM \\\"prs_approve_state_approved_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  \\\"[[repogroup]]\\\" as \\\"Approved\\\"\\nfrom\\n  spr_apprappr\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"Awaiting approval\",\n          \"dsType\": \"influxdb\",\n          \"groupBy\": [],\n          \"measurement\": \"\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT /^[[repogroup]]$/ FROM \\\"prs_approve_state_awaiting_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  \\\"[[repogroup]]\\\" as \\\"Awaiting approval\\\"\\nfrom\\n  spr_apprwait\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"B\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"PRs approved and awaiting approval ([[repogroup]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": \"Pull requests\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"7 Days MA\",\n          \"value\": \"d7\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"d,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'prs_approval_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"PRs approval\",\n  \"uid\": \"20\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/prs-authors-companies-histogram.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1529598275115,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"columns\": [],\n      \"datasource\": \"psql\",\n      \"description\": \"Shows PRs authors companies\",\n      \"fontSize\": \"90%\",\n      \"gridPos\": {\n        \"h\": 22,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"hideTimeOverride\": true,\n      \"id\": 1,\n      \"links\": [],\n      \"pageSize\": 1000,\n      \"scroll\": true,\n      \"showHeader\": true,\n      \"sort\": {\n        \"col\": 1,\n        \"desc\": true\n      },\n      \"styles\": [\n        {\n          \"alias\": \"Time\",\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": null,\n          \"pattern\": \"Time\",\n          \"type\": \"hidden\"\n        },\n        {\n          \"alias\": \"Company\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": 2,\n          \"pattern\": \"name\",\n          \"preserveFormat\": false,\n          \"thresholds\": [],\n          \"type\": \"string\",\n          \"unit\": \"short\"\n        },\n        {\n          \"alias\": \"Opened PRs\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": 0,\n          \"pattern\": \"value\",\n          \"thresholds\": [],\n          \"type\": \"number\",\n          \"unit\": \"none\"\n        },\n        {\n          \"alias\": \"\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"decimals\": 2,\n          \"pattern\": \"/.*/\",\n          \"thresholds\": [],\n          \"type\": \"number\",\n          \"unit\": \"short\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"name\\\", \\\"value\\\" FROM \\\"hist_pr_companies_[[repogroup]]_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select name, value from \\\"shpr_comps\\\" where series = 'hpr_comps[[repogroup]]' and period = '[[period]]'\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"table\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"title\": \"[[full_name]] PRs authors companies (Repository group: [[repogroup_name]], Range: [[period_name]])\",\n      \"transform\": \"table\",\n      \"transparent\": false,\n      \"type\": \"table\"\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"companies\",\n    \"dashboard\",\n    \"kubeflow\",\n    \"table\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"OCI\",\n          \"value\": \"OCI\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"Last decade\",\n          \"value\": \"Last decade\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Range\",\n        \"multi\": false,\n        \"name\": \"period_name\",\n        \"options\": [],\n        \"query\": \"select quick_ranges_name from tquick_ranges order by time\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"y10\",\n          \"value\": \"y10\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [],\n        \"query\": \"select quick_ranges_suffix from tquick_ranges where quick_ranges_name = '[[period_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"All\",\n          \"value\": \"All\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"all\",\n          \"value\": \"all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'pr_companies_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-5y\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"hidden\": true,\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"PRs authors companies histogram\",\n  \"uid\": \"22\",\n  \"version\": 3\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/prs-authors-histogram.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1529598388542,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"columns\": [],\n      \"datasource\": \"psql\",\n      \"description\": \"Shows PRs authors\",\n      \"fontSize\": \"90%\",\n      \"gridPos\": {\n        \"h\": 22,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"hideTimeOverride\": true,\n      \"id\": 1,\n      \"links\": [],\n      \"pageSize\": 1000,\n      \"scroll\": true,\n      \"showHeader\": true,\n      \"sort\": {\n        \"col\": 1,\n        \"desc\": true\n      },\n      \"styles\": [\n        {\n          \"alias\": \"Time\",\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": null,\n          \"pattern\": \"Time\",\n          \"type\": \"hidden\"\n        },\n        {\n          \"alias\": \"Developer\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": 2,\n          \"pattern\": \"name\",\n          \"preserveFormat\": false,\n          \"thresholds\": [],\n          \"type\": \"string\",\n          \"unit\": \"short\"\n        },\n        {\n          \"alias\": \"Opened PRs\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": 0,\n          \"pattern\": \"value\",\n          \"thresholds\": [],\n          \"type\": \"number\",\n          \"unit\": \"none\"\n        },\n        {\n          \"alias\": \"\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"decimals\": 2,\n          \"pattern\": \"/.*/\",\n          \"thresholds\": [],\n          \"type\": \"number\",\n          \"unit\": \"short\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"name\\\", \\\"value\\\" FROM \\\"hist_pr_authors_[[repogroup]]_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select name, value from \\\"shpr_auth\\\" where series = 'hpr_auth[[repogroup]]' and period = '[[period]]'\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"table\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"title\": \"[[full_name]] PRs authors (Repository group: [[repogroup_name]], Range: [[period_name]])\",\n      \"transform\": \"table\",\n      \"transparent\": false,\n      \"type\": \"table\"\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\",\n    \"table\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"OCI\",\n          \"value\": \"OCI\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"Last decade\",\n          \"value\": \"Last decade\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Range\",\n        \"multi\": false,\n        \"name\": \"period_name\",\n        \"options\": [],\n        \"query\": \"select quick_ranges_name from tquick_ranges order by time\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"y10\",\n          \"value\": \"y10\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [],\n        \"query\": \"select quick_ranges_suffix from tquick_ranges where quick_ranges_name = '[[period_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"All\",\n          \"value\": \"All\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"all\",\n          \"value\": \"all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'pr_authors_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-5y\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"hidden\": true,\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"PRs authors histogram\",\n  \"uid\": \"23\",\n  \"version\": 4\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/prs-authors.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674847952,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": true,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 0,\n      \"description\": \"Number of unique PR authors in [[repogroup_name]] repository group.\",\n      \"fill\": 1,\n      \"gridPos\": {\n        \"h\": 22,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 1,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"hideEmpty\": false,\n        \"hideZero\": false,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": false,\n        \"show\": true,\n        \"total\": true,\n        \"values\": true\n      },\n      \"lines\": false,\n      \"linewidth\": 1,\n      \"links\": [],\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"hide\": false,\n          \"measurement\": \"reviewers_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"autogen\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"autogen\\\".\\\"prs_authors_[[repogroup]]_[[period]][[aggregate]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Unique PR authors\\\"\\nfrom\\n  spr_auth\\nwhere\\n  $__timeFilter(time)\\n  and series = 'pr_auth[[repogroup]]'\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Number of unique PRs authors in [[repogroup_name]] repository group ([[period]])\",\n      \"tooltip\": {\n        \"shared\": false,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"transparent\": false,\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": [\n          \"total\"\n        ]\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": \"Unique PRs authors\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"7 Days MA\",\n          \"value\": \"d7\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Day\",\n            \"value\": \"d\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"d,d7,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"All\",\n          \"value\": \"All\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"all\",\n          \"value\": \"all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'prs_authors_chart_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"PRs authors\",\n  \"uid\": \"21\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/prs-merged-repository-groups.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674878510,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": true,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 0,\n      \"description\": \"Number of PRs merged in given repository group\",\n      \"fill\": 3,\n      \"gridPos\": {\n        \"h\": 15,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 2,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"sort\": \"avg\",\n        \"sortDesc\": true,\n        \"total\": true,\n        \"values\": true\n      },\n      \"lines\": false,\n      \"linewidth\": 0,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": true,\n      \"steppedLine\": true,\n      \"targets\": [\n        {\n          \"alias\": \"$col\",\n          \"dsType\": \"influxdb\",\n          \"groupBy\": [],\n          \"measurement\": \"notused\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT /^[[repogroups]]$/ FROM \\\"group_prs_merged_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  ${repogroups:csv}\\nfrom\\n  sgrp_pr_merg\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"PRs merged per repository groups ([[repogroups]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": \"Pull requests merged\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": true,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 0,\n      \"description\": \"PRs merged in all [[full_name]] repositories\",\n      \"fill\": 5,\n      \"gridPos\": {\n        \"h\": 12,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 15\n      },\n      \"id\": 3,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"total\": true,\n        \"values\": true\n      },\n      \"lines\": false,\n      \"linewidth\": 1,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"PRs merged\",\n          \"dsType\": \"influxdb\",\n          \"groupBy\": [],\n          \"measurement\": \"all_prs_merged_h\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"all_prs_merged_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  \\\"value\\\" as \\\"All PRs merged\\\"\\nfrom\\n  sall_prs_merged\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"PRs merged in all [[full_name]] repositories ([[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": \"PRs merged\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 27\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"7 Days MA\",\n          \"value\": \"d7\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Day\",\n            \"value\": \"d\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"d,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": true,\n        \"label\": \"Repository group\",\n        \"multi\": true,\n        \"name\": \"repogroups\",\n        \"options\": [],\n        \"query\": \"select '\\\"' || repo_group_name || '\\\"' from trepo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'prs_merged_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"PRs merged repository groups\",\n  \"uid\": \"24\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/repository-commenters.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674890062,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": true,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 0,\n      \"description\": \"Number of unique commenters.\",\n      \"fill\": 1,\n      \"gridPos\": {\n        \"h\": 22,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 1,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"hideEmpty\": false,\n        \"hideZero\": false,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": false,\n      \"linewidth\": 1,\n      \"links\": [],\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"hide\": false,\n          \"measurement\": \"reviewers_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"autogen\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"autogen\\\".\\\"repo_commenters_[[repogroup]]_[[period]][[aggregate]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Unique commenters\\\"\\nfrom\\n  srcommenters\\nwhere\\n  $__timeFilter(time)\\n  and series = 'rcommenters[[repogroup]]'\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"[[repogroup_name]] unique commenters ([[period]])\",\n      \"tooltip\": {\n        \"shared\": false,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"transparent\": false,\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": [\n          \"total\"\n        ]\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": \"Unique commenters\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"7 Days MA\",\n          \"value\": \"d7\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Day\",\n            \"value\": \"d\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"d,d7,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"All\",\n          \"value\": \"All\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"all\",\n          \"value\": \"all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"Prometheus\",\n          \"value\": \"Prometheus\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'repo_commenters_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Repository commenters\",\n  \"uid\": \"25\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/repository-comments.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674899220,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": true,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 0,\n      \"description\": \"Number of comments for [[repogroup]] repository group.\",\n      \"fill\": 1,\n      \"gridPos\": {\n        \"h\": 22,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 1,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"hideEmpty\": false,\n        \"hideZero\": false,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": false,\n      \"linewidth\": 1,\n      \"links\": [],\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"hide\": false,\n          \"measurement\": \"reviewers_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"autogen\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"autogen\\\".\\\"repo_comments_[[repogroup]]_[[period]][[aggregate]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Comments\\\"\\nfrom\\n  srcomments\\nwhere\\n  $__timeFilter(time)\\n  and series = 'rcomments[[repogroup]]'\\n  and period = '[[period]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"[[repogroup_name]] comments ([[period]])\",\n      \"tooltip\": {\n        \"shared\": false,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"transparent\": false,\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": [\n          \"total\"\n        ]\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": \"Comments\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"7 Days MA\",\n          \"value\": \"d7\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Day\",\n            \"value\": \"d\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"d,d7,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"All\",\n          \"value\": \"All\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"all\",\n          \"value\": \"all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"Prometheus\",\n          \"value\": \"Prometheus\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'repo_comments_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Repository comments\",\n  \"uid\": \"26\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/time-metrics.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674908632,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 2,\n      \"description\": \"Time from open to merge.\",\n      \"fill\": 1,\n      \"gridPos\": {\n        \"h\": 13,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 8,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"links\": [],\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": true,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"time_metrics_[[repogroup]]_median_open_to_merge_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"Median time from open to merge (in hours)\\\"\\nfrom\\n  stime_metrics\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'tmet[[repogroup]]med'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Median time PRs from open to merge (Repository group [[repogroup_name]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": [\n          \"avg\"\n        ]\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"h\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"none\",\n          \"label\": \"\",\n          \"logBase\": 10,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 2,\n      \"description\": \"Time from open to merge.\",\n      \"fill\": 1,\n      \"gridPos\": {\n        \"h\": 13,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 0\n      },\n      \"id\": 9,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"links\": [],\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": true,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"value\\\" FROM \\\"time_metrics_[[repogroup]]_percentile_85_open_to_merge_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  value as \\\"85th percentile time from open to merge (in hours)\\\"\\nfrom\\n  stime_metrics\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'tmet[[repogroup]]p85'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"85th percentile time PRs from open to merge for (Repository group: [[repogroup_name]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": [\n          \"avg\"\n        ]\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"h\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"none\",\n          \"label\": \"\",\n          \"logBase\": 10,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"columns\": [],\n      \"datasource\": \"psql\",\n      \"description\": \"Time PRs from open to merge\",\n      \"fontSize\": \"80%\",\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 13\n      },\n      \"id\": 10,\n      \"links\": [],\n      \"pageSize\": 10,\n      \"scroll\": true,\n      \"showHeader\": true,\n      \"sort\": {\n        \"col\": 0,\n        \"desc\": true\n      },\n      \"styles\": [\n        {\n          \"alias\": \"Time\",\n          \"dateFormat\": \"MM/DD/YYYY\",\n          \"pattern\": \"Time\",\n          \"type\": \"date\"\n        },\n        {\n          \"alias\": \"\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"decimals\": 2,\n          \"pattern\": \"/.*/\",\n          \"thresholds\": [],\n          \"type\": \"number\",\n          \"unit\": \"short\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"descr\\\" FROM \\\"time_metrics_[[repogroup]]_median_open_to_merge_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time as \\\"Time\\\",\\n  descr as \\\"Median open to merge\\\"\\nfrom\\n  stime_metrics\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'tmet[[repogroup]]med'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        },\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"descr\\\" FROM \\\"time_metrics_[[repogroup]]_percentile_85_open_to_merge_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time as \\\"Time\\\",\\n  descr as \\\"85th percentile open to merge\\\"\\nfrom\\n  stime_metrics\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'tmet[[repogroup]]p85'\\norder by\\n  time\",\n          \"refId\": \"D\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"title\": \"Time PRs from open to merge (Repository group[[repogroup_name]], [[period]])\",\n      \"transform\": \"table\",\n      \"type\": \"table\"\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 23\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"7 Days MA\",\n          \"value\": \"d7\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Day\",\n            \"value\": \"d\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"d,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"All\",\n          \"value\": \"All\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"all\",\n          \"value\": \"all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"Prometheus\",\n          \"value\": \"Prometheus\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'time_metrics_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now-1w\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Time metrics\",\n  \"uid\": \"27\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/timezones-stats.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] Release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674925456,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"cards\": {\n        \"cardPadding\": null,\n        \"cardRound\": null\n      },\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateSpectral\",\n        \"exponent\": 0.5,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"tsbuckets\",\n      \"datasource\": \"psql\",\n      \"description\": \"[[full_name]] [[metric]] time zones stats ([[repogroup_name]])\",\n      \"gridPos\": {\n        \"h\": 20,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"heatmap\": {},\n      \"highlightCards\": true,\n      \"id\": 3,\n      \"legend\": {\n        \"show\": true\n      },\n      \"links\": [],\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"format\": \"time_series\",\n          \"rawSql\": \"select\\n  time,\\n  ${tzs:csv}\\nfrom\\n  stz\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'tz[[repogroup]][[metric]]'\\norder by\\n  time\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"[[full_name]] [[metric]] time zones stats ([[repogroup_name]])\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"tooltipDecimals\": 0,\n      \"transparent\": true,\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"xBucketNumber\": null,\n      \"xBucketSize\": null,\n      \"yAxis\": {\n        \"decimals\": 0,\n        \"format\": \"none\",\n        \"logBase\": 1,\n        \"max\": null,\n        \"min\": null,\n        \"show\": true,\n        \"splitFactor\": null\n      },\n      \"yBucketBound\": \"auto\",\n      \"yBucketNumber\": null,\n      \"yBucketSize\": null\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 12,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 20\n      },\n      \"id\": 1,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"Kubeflow\",\n          \"value\": \"Kubeflow\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"selected\": true,\n          \"tags\": [],\n          \"text\": \"Day\",\n          \"value\": \"d\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Hour\",\n            \"value\": \"h\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"Day\",\n            \"value\": \"d\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"d,d7,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {\n          \"text\": \"All\",\n          \"value\": \"$__all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": true,\n        \"label\": \"Time zones\",\n        \"multi\": true,\n        \"name\": \"tzs\",\n        \"options\": [],\n        \"query\": \"select '\\\"' || tz_offset || '\\\"' from ttz_offsets order by time asc\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"All\",\n          \"value\": \"All\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"all\",\n          \"value\": \"all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"selected\": true,\n          \"tags\": [],\n          \"text\": \"Contributors\",\n          \"value\": \"contributors\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Metric\",\n        \"multi\": false,\n        \"name\": \"metric\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Contributions\",\n            \"value\": \"contributions\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"Contributors\",\n            \"value\": \"contributors\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Users\",\n            \"value\": \"users\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Activity\",\n            \"value\": \"events\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Pushers\",\n            \"value\": \"committers\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Pushes\",\n            \"value\": \"commits\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Committers\",\n            \"value\": \"rcommitters\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Commits\",\n            \"value\": \"rcommits\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"PR creators\",\n            \"value\": \"prcreators\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"PRs\",\n            \"value\": \"prs\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Issue creators\",\n            \"value\": \"issuecreators\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Issues\",\n            \"value\": \"issues\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Commenters\",\n            \"value\": \"commenters\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Comments\",\n            \"value\": \"comments\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Reviewers\",\n            \"value\": \"reviewers\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Reviews\",\n            \"value\": \"reviews\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Watchers\",\n            \"value\": \"watchers\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Watches\",\n            \"value\": \"watches\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Forkers\",\n            \"value\": \"forkers\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Forks\",\n            \"value\": \"forks\"\n          }\n        ],\n        \"query\": \"contributions,contributors,users,events,committers,commits,rcommitters,rcommits,prcreators,prs,issuecreators,issues,commenters,comments,reviewers,reviews,watchers,watches,forkers,forks\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"<h1 id=\\\"dashboard-header\\\">Kubeflow time zones stats dashboard</h1>\\n<p>Links:</p>\\n<ul>\\n<li>1st metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/tz.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>2nd metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/committers_tz.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>TSDB <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\\\" target=\\\"_blank\\\">series definition</a>. Search for <code>tz</code></li>\\n<li>Grafana dashboard <a href=\\\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubeflow/timezones-stats.json\\\" target=\\\"_blank\\\">JSON</a>.</li>\\n</ul>\\n<h1 id=\\\"description\\\">Description</h1>\\n<ul>\\n<li>This dashboard shows timezones statistics.</li>\\n<li>We're showing histograms over time (called heatmap), color is used to show higher/lower counts for given TZ offsets and dates.</li>\\n<li>Contributor is defined as somebody who made a review, comment, commit, created PR or issue.</li>\\n<li>Contribution is a review, comment, commit, issue or PR.</li>\\n<li>We are determining contributor's timezone by using GitHub localization and searching for a timezone using <a href=\\\"http://www.geonames.org\\\" target=\\\"_blank\\\">geonames</a> database.</li>\\n<li>You can select single repository group or summary statistics for all of them combined.</li>\\n<li>You can choose to display contributors, contributions, users, actvity, committers, commits etc.</li>\\n<li>Selecting period (for example week) means that dashboard will show data in those periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/periods.md\\\" target=\\\"_blank\\\">here</a> for more informations about periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\\\" target=\\\"_blank\\\">here</a> for more informations about repository groups.</li>\\n<li>We are skipping bots activity, see <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\\\" target=\\\"_blank\\\">excluding bots</a> for details.</li>\\n</ul>\",\n          \"value\": \"<h1 id=\\\"dashboard-header\\\">Kubeflow time zones stats dashboard</h1>\\n<p>Links:</p>\\n<ul>\\n<li>1st metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/tz.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>2nd metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/committers_tz.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>TSDB <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\\\" target=\\\"_blank\\\">series definition</a>. Search for <code>tz</code></li>\\n<li>Grafana dashboard <a href=\\\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubeflow/timezones-stats.json\\\" target=\\\"_blank\\\">JSON</a>.</li>\\n</ul>\\n<h1 id=\\\"description\\\">Description</h1>\\n<ul>\\n<li>This dashboard shows timezones statistics.</li>\\n<li>We're showing histograms over time (called heatmap), color is used to show higher/lower counts for given TZ offsets and dates.</li>\\n<li>Contributor is defined as somebody who made a review, comment, commit, created PR or issue.</li>\\n<li>Contribution is a review, comment, commit, issue or PR.</li>\\n<li>We are determining contributor's timezone by using GitHub localization and searching for a timezone using <a href=\\\"http://www.geonames.org\\\" target=\\\"_blank\\\">geonames</a> database.</li>\\n<li>You can select single repository group or summary statistics for all of them combined.</li>\\n<li>You can choose to display contributors, contributions, users, actvity, committers, commits etc.</li>\\n<li>Selecting period (for example week) means that dashboard will show data in those periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/periods.md\\\" target=\\\"_blank\\\">here</a> for more informations about periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\\\" target=\\\"_blank\\\">here</a> for more informations about repository groups.</li>\\n<li>We are skipping bots activity, see <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\\\" target=\\\"_blank\\\">excluding bots</a> for details.</li>\\n</ul>\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'tzs_stats_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Timezones stats\",\n  \"uid\": \"51\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/top-commenters.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1529598285400,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"columns\": [],\n      \"datasource\": \"psql\",\n      \"description\": \"Shows most active commenters\",\n      \"fontSize\": \"90%\",\n      \"gridPos\": {\n        \"h\": 22,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"hideTimeOverride\": true,\n      \"id\": 1,\n      \"links\": [],\n      \"pageSize\": 1000,\n      \"scroll\": true,\n      \"showHeader\": true,\n      \"sort\": {\n        \"col\": 1,\n        \"desc\": true\n      },\n      \"styles\": [\n        {\n          \"alias\": \"Time\",\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": null,\n          \"pattern\": \"Time\",\n          \"type\": \"hidden\"\n        },\n        {\n          \"alias\": \"Developer\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": 2,\n          \"pattern\": \"name\",\n          \"preserveFormat\": false,\n          \"thresholds\": [],\n          \"type\": \"string\",\n          \"unit\": \"short\"\n        },\n        {\n          \"alias\": \"Comments\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"dateFormat\": \"YYYY-MM-DD HH:mm:ss\",\n          \"decimals\": 0,\n          \"pattern\": \"value\",\n          \"thresholds\": [],\n          \"type\": \"number\",\n          \"unit\": \"none\"\n        },\n        {\n          \"alias\": \"\",\n          \"colorMode\": null,\n          \"colors\": [\n            \"rgba(245, 54, 54, 0.9)\",\n            \"rgba(237, 129, 40, 0.89)\",\n            \"rgba(50, 172, 45, 0.97)\"\n          ],\n          \"decimals\": 2,\n          \"pattern\": \"/.*/\",\n          \"thresholds\": [],\n          \"type\": \"number\",\n          \"unit\": \"short\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"table\",\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT \\\"name\\\", \\\"value\\\" FROM \\\"top_commenters_[[repogroup]]_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select name, value from \\\"shtop_commenters\\\" where series = 'htop_commenters[[repogroup]]' and period = '[[period]]'\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"table\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"title\": \"[[full_name]] Top commenters ([[repogroup_name]], Range: [[period_name]])\",\n      \"transform\": \"table\",\n      \"transparent\": false,\n      \"type\": \"table\"\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\",\n    \"table\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"Last decade\",\n          \"value\": \"Last decade\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Range\",\n        \"multi\": false,\n        \"name\": \"period_name\",\n        \"options\": [],\n        \"query\": \"select quick_ranges_name from tquick_ranges order by time\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"y10\",\n          \"value\": \"y10\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [],\n        \"query\": \"select quick_ranges_suffix from tquick_ranges where quick_ranges_name = '[[period_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"All\",\n          \"value\": \"All\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"all\",\n          \"value\": \"all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"Prometheus\",\n          \"value\": \"Prometheus\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {},\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'top_commenters_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-5y\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"hidden\": true,\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Top commenters\",\n  \"uid\": \"28\",\n  \"version\": 3\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/user-reviews.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543674984757,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": true,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": null,\n      \"description\": \"Shows review counts for given users and repository.\",\n      \"fill\": 1,\n      \"gridPos\": {\n        \"h\": 22,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"hideTimeOverride\": false,\n      \"id\": 1,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"hideEmpty\": false,\n        \"hideZero\": false,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"sideWidth\": null,\n        \"sort\": \"avg\",\n        \"sortDesc\": true,\n        \"total\": true,\n        \"values\": true\n      },\n      \"lines\": false,\n      \"linewidth\": 1,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": true,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"sig_federation_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"SELECT /^[[reviewers]]$/ FROM \\\"reviews_per_user_[[repo]]_[[period]]\\\" WHERE $timeFilter\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  ${reviewers:csv}\\nfrom\\n  suser_reviews\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'rev_per_usr[[repo]]'\\norder by\\n  time\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Reviews per user/repo ([[repo_name]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"transparent\": true,\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": [\n          \"total\"\n        ]\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": \"Number of PR review comments\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"7 Days MA\",\n          \"value\": \"d7\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Day\",\n            \"value\": \"d\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"d,w,d7,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"All\",\n          \"value\": \"All\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository\",\n        \"multi\": false,\n        \"name\": \"repo_name\",\n        \"options\": [],\n        \"query\": \"select top_repos_name_with_all from ttop_repos_with_all order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"all\",\n          \"value\": \"all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repo\",\n        \"options\": [],\n        \"query\": \"select top_repos_value_with_all from ttop_repos_with_all where top_repos_name_with_all = '[[repo_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {\n          \"selected\": false,\n          \"tags\": [],\n          \"text\": \"\\\"mattmoor\\\" + \\\"bobcatfish\\\" + \\\"n3wscott\\\" + \\\"adrcunha\\\" + \\\"pivotal-nader-ziada\\\" + \\\"evankanderson\\\" + \\\"vaikas-google\\\" + \\\"grantr\\\" + \\\"adamharwayne\\\" + \\\"ImJasonH\\\" + \\\"srinivashegde86\\\" + \\\"shashwathi\\\" + \\\"markusthoemmes\\\" + \\\"tejal29\\\" + \\\"matzew\\\" + \\\"tcnghia\\\" + \\\"scothis\\\" + \\\"Harwayne\\\" + \\\"mdemirhan\\\" + \\\"josephburnett\\\" + \\\"lichuqiang\\\" + \\\"vdemeester\\\" + \\\"jessiezcc\\\" + \\\"imikushin\\\" + \\\"radufa\\\" + \\\"RichieEscarez\\\" + \\\"neosab\\\" + \\\"dushyanthsc\\\" + \\\"samodell\\\"\",\n          \"value\": [\n            \"\\\"mattmoor\\\"\",\n            \"\\\"bobcatfish\\\"\",\n            \"\\\"n3wscott\\\"\",\n            \"\\\"adrcunha\\\"\",\n            \"\\\"pivotal-nader-ziada\\\"\",\n            \"\\\"evankanderson\\\"\",\n            \"\\\"vaikas-google\\\"\",\n            \"\\\"grantr\\\"\",\n            \"\\\"adamharwayne\\\"\",\n            \"\\\"ImJasonH\\\"\",\n            \"\\\"srinivashegde86\\\"\",\n            \"\\\"shashwathi\\\"\",\n            \"\\\"markusthoemmes\\\"\",\n            \"\\\"tejal29\\\"\",\n            \"\\\"matzew\\\"\",\n            \"\\\"tcnghia\\\"\",\n            \"\\\"scothis\\\"\",\n            \"\\\"Harwayne\\\"\",\n            \"\\\"mdemirhan\\\"\",\n            \"\\\"josephburnett\\\"\",\n            \"\\\"lichuqiang\\\"\",\n            \"\\\"vdemeester\\\"\",\n            \"\\\"jessiezcc\\\"\",\n            \"\\\"imikushin\\\"\",\n            \"\\\"radufa\\\"\",\n            \"\\\"RichieEscarez\\\"\",\n            \"\\\"neosab\\\"\",\n            \"\\\"dushyanthsc\\\"\",\n            \"\\\"samodell\\\"\"\n          ]\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Reviewer\",\n        \"multi\": true,\n        \"name\": \"reviewers\",\n        \"options\": [],\n        \"query\": \"select '\\\"' || reviewers_name || '\\\"' from treviewers\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"Kubeflow\",\n          \"value\": \"Kubeflow\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"<h1 id=\\\"dashboard-header\\\">Kubeflow user reviews dashboard</h1>\\n<p>Links:</p>\\n<ul>\\n<li>Metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/reviews_per_user.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>TSDB <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\\\" target=\\\"_blank\\\">series definition</a>. Search for <code>reviews_per_user</code></li>\\n<li>Grafana dashboard <a href=\\\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubeflow/user-reviews.json\\\" target=\\\"_blank\\\">JSON</a>.</li>\\n</ul>\\n<h1 id=\\\"description\\\">Description</h1>\\n<ul>\\n<li>This dashboard shows number of PR reviews most active reviewers.</li>\\n<li>Review means user added PR review comment.</li>\\n<li>You can select reviewer from the reviewers drop-down, it shows top active reviewers from last 3 months.</li>\\n<li>To find top active reviewers we sum number of reviews per user.</li>\\n<li>You can select single repository or summary for all of them.</li>\\n<li>You can filter by period and choose multiple reviewers to stack their data.</li>\\n<li>Selecting period (for example week) means that dashboard will show reviews in those periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/periods.md\\\" target=\\\"_blank\\\">here</a> for more informations about periods.</li>\\n</ul>\",\n          \"value\": \"<h1 id=\\\"dashboard-header\\\">Kubeflow user reviews dashboard</h1>\\n<p>Links:</p>\\n<ul>\\n<li>Metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/reviews_per_user.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>TSDB <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\\\" target=\\\"_blank\\\">series definition</a>. Search for <code>reviews_per_user</code></li>\\n<li>Grafana dashboard <a href=\\\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/kubeflow/user-reviews.json\\\" target=\\\"_blank\\\">JSON</a>.</li>\\n</ul>\\n<h1 id=\\\"description\\\">Description</h1>\\n<ul>\\n<li>This dashboard shows number of PR reviews most active reviewers.</li>\\n<li>Review means user added PR review comment.</li>\\n<li>You can select reviewer from the reviewers drop-down, it shows top active reviewers from last 3 months.</li>\\n<li>To find top active reviewers we sum number of reviews per user.</li>\\n<li>You can select single repository or summary for all of them.</li>\\n<li>You can filter by period and choose multiple reviewers to stack their data.</li>\\n<li>Selecting period (for example week) means that dashboard will show reviews in those periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/periods.md\\\" target=\\\"_blank\\\">here</a> for more informations about periods.</li>\\n</ul>\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'user_reviews_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"User reviews\",\n  \"uid\": \"46\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/dashboards/kubeflow/users-stats.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": \"-- Grafana --\",\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"limit\": 100,\n        \"name\": \"Annotations & Alerts\",\n        \"showIn\": 0,\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": \"psql\",\n        \"enable\": true,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Releases\",\n        \"query\": \"SELECT title, description from annotations WHERE $timeFilter order by time asc\",\n        \"rawQuery\": \"select extract(epoch from time) AS time, title as text, description as tags from sannotations where $__timeFilter(time)\",\n        \"showIn\": 0,\n        \"tagsColumn\": \"title,description\",\n        \"textColumn\": \"\",\n        \"titleColumn\": \"[[full_name]] release\",\n        \"type\": \"alert\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"gnetId\": null,\n  \"graphTooltip\": 0,\n  \"iteration\": 1543675027757,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 2,\n      \"description\": \"Measures user [[metric]].\",\n      \"fill\": 6,\n      \"gridPos\": {\n        \"h\": 17,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 1,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"hideEmpty\": false,\n        \"hideZero\": false,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"sideWidth\": null,\n        \"sort\": \"avg\",\n        \"sortDesc\": true,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": true,\n      \"linewidth\": 0,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": false,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [\n        {\n          \"alias\": \"All\",\n          \"bars\": false,\n          \"fill\": 0,\n          \"lines\": true,\n          \"linewidth\": 1,\n          \"stack\": false,\n          \"yaxis\": 2\n        }\n      ],\n      \"spaceLength\": 10,\n      \"stack\": true,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"sig_federation_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  ${users:csv}\\nfrom\\n  suser_activity\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'user[[repogroup]][[metric]]'\\norder by\\n  time\",\n          \"refId\": \"B\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Users [[metric]] metric ([[repogroup_name]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"transparent\": true,\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": \"Value\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"decimals\": null,\n          \"format\": \"short\",\n          \"label\": \"All\",\n          \"logBase\": 1,\n          \"max\": null,\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": \"psql\",\n      \"decimals\": 2,\n      \"description\": \"Measures user [[metric]].\",\n      \"fill\": 6,\n      \"gridPos\": {\n        \"h\": 16,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 17\n      },\n      \"id\": 2,\n      \"legend\": {\n        \"alignAsTable\": true,\n        \"avg\": true,\n        \"current\": true,\n        \"hideEmpty\": false,\n        \"hideZero\": false,\n        \"max\": true,\n        \"min\": true,\n        \"rightSide\": true,\n        \"show\": true,\n        \"sideWidth\": null,\n        \"sort\": \"avg\",\n        \"sortDesc\": true,\n        \"total\": false,\n        \"values\": true\n      },\n      \"lines\": true,\n      \"linewidth\": 0,\n      \"links\": [],\n      \"nullPointMode\": \"null as zero\",\n      \"percentage\": true,\n      \"pointradius\": 5,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": true,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"alias\": \"\",\n          \"dsType\": \"influxdb\",\n          \"format\": \"time_series\",\n          \"groupBy\": [],\n          \"measurement\": \"sig_federation_d\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"query\": \"\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n  time,\\n  ${users:csv}\\nfrom\\n  suser_activity\\nwhere\\n  $__timeFilter(time)\\n  and period = '[[period]]'\\n  and series = 'user[[repogroup]][[metric]]'\\norder by\\n  time\",\n          \"refId\": \"B\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"value\"\n                ],\n                \"type\": \"field\"\n              }\n            ]\n          ],\n          \"tags\": []\n        }\n      ],\n      \"thresholds\": [],\n      \"timeFrom\": null,\n      \"timeShift\": null,\n      \"title\": \"Users [[metric]] metric ([[repogroup_name]], [[period]])\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 2,\n        \"value_type\": \"individual\"\n      },\n      \"transparent\": true,\n      \"type\": \"graph\",\n      \"xaxis\": {\n        \"buckets\": null,\n        \"mode\": \"time\",\n        \"name\": null,\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": \"100\",\n          \"min\": \"0\",\n          \"show\": true\n        },\n        {\n          \"decimals\": null,\n          \"format\": \"short\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"max\": \"100\",\n          \"min\": \"0\",\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"content\": \"[[docs]]\",\n      \"gridPos\": {\n        \"h\": 11,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 33\n      },\n      \"id\": 11,\n      \"links\": [],\n      \"mode\": \"html\",\n      \"title\": \"Dashboard documentation\",\n      \"type\": \"text\"\n    }\n  ],\n  \"schemaVersion\": 16,\n  \"style\": \"dark\",\n  \"tags\": [\n    \"dashboard\",\n    \"kubeflow\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"CNCF\",\n          \"value\": \"CNCF\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"full_name\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'full_name'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"Week\",\n          \"value\": \"w\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"multi\": false,\n        \"name\": \"period\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"Hour\",\n            \"value\": \"h\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"24 Hours MA\",\n            \"value\": \"h24\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Day\",\n            \"value\": \"d\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"7 Days MA\",\n            \"value\": \"d7\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"Week\",\n            \"value\": \"w\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Month\",\n            \"value\": \"m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Quarter\",\n            \"value\": \"q\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Year\",\n            \"value\": \"y\"\n          }\n        ],\n        \"query\": \"d,w,m,q,y\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"tags\": [],\n          \"text\": \"Contributions\",\n          \"value\": \"contributions\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Metric\",\n        \"multi\": false,\n        \"name\": \"metric\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"All activity\",\n            \"value\": \"activity\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Issues created\",\n            \"value\": \"issues\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Pull requests created\",\n            \"value\": \"prs\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Commits made\",\n            \"value\": \"commits\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Pushes made\",\n            \"value\": \"pushes\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"Contributions\",\n            \"value\": \"contributions\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"Added comments\",\n            \"value\": \"comments\"\n          }\n        ],\n        \"query\": \"activity,issues,prs,pushes,commits,contributions,comments\",\n        \"skipUrlSync\": false,\n        \"type\": \"custom\"\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"All\",\n          \"value\": \"All\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Repository group\",\n        \"multi\": false,\n        \"name\": \"repogroup_name\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_name from tall_repo_groups order by 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"all\",\n          \"value\": \"all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"\",\n        \"multi\": false,\n        \"name\": \"repogroup\",\n        \"options\": [],\n        \"query\": \"select all_repo_group_value from tall_repo_groups where all_repo_group_name = '[[repogroup_name]]'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": \"\",\n        \"current\": {\n          \"text\": \"All\",\n          \"value\": \"$__all\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 0,\n        \"includeAll\": true,\n        \"label\": \"Users\",\n        \"multi\": true,\n        \"name\": \"users\",\n        \"options\": [],\n        \"query\": \"select '\\\"' || users_name || '\\\"' from tusers order by time asc\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      },\n      {\n        \"allValue\": null,\n        \"current\": {\n          \"text\": \"<h1 id=\\\"dashboard-header\\\">CNCF users stats dashboard</h1>\\n<p>Links:</p>\\n<ul>\\n<li>Metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/user_activity.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>TSDB <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\\\" target=\\\"_blank\\\">series definition</a>. Search for <code>user_activity</code></li>\\n<li>Grafana dashboard <a href=\\\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/cncf/users-stats.json\\\" target=\\\"_blank\\\">JSON</a>.</li>\\n</ul>\\n<h1 id=\\\"description\\\">Description</h1>\\n<ul>\\n<li>This dashboard shows various user statistics.</li>\\n<li>Contributor is defined as somebody who made a review, comment, commit, created PR or issue.</li>\\n<li>Contribution is a review, comment, commit, issue or PR.</li>\\n<li>You can select statistic from the metrics drop down (All activity means all events registered by GitHub).</li>\\n<li>You can select single repository group or summary statistics for all of them combined.</li>\\n<li>You can select multiple users or all of them in a multi select dowp down.</li>\\n<li>We are showing to 70 most active users in the drop-down list.</li>\\n<li>Selecting period (for example week) means that dashboard will show data in those periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/periods.md\\\" target=\\\"_blank\\\">here</a> for more informations about periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\\\" target=\\\"_blank\\\">here</a> for more informations about repository groups.</li>\\n<li>We are skipping bots activity, see <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\\\" target=\\\"_blank\\\">excluding bots</a> for details.</li>\\n</ul>\",\n          \"value\": \"<h1 id=\\\"dashboard-header\\\">CNCF users stats dashboard</h1>\\n<p>Links:</p>\\n<ul>\\n<li>Metric <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/user_activity.sql\\\" target=\\\"_blank\\\">SQL file</a>.</li>\\n<li>TSDB <a href=\\\"https://github.com/cncf/devstats/blob/master/metrics/shared/metrics.yaml\\\" target=\\\"_blank\\\">series definition</a>. Search for <code>user_activity</code></li>\\n<li>Grafana dashboard <a href=\\\"https://github.com/cncf/devstats/blob/master/grafana/dashboards/cncf/users-stats.json\\\" target=\\\"_blank\\\">JSON</a>.</li>\\n</ul>\\n<h1 id=\\\"description\\\">Description</h1>\\n<ul>\\n<li>This dashboard shows various user statistics.</li>\\n<li>Contributor is defined as somebody who made a review, comment, commit, created PR or issue.</li>\\n<li>Contribution is a review, comment, commit, issue or PR.</li>\\n<li>You can select statistic from the metrics drop down (All activity means all events registered by GitHub).</li>\\n<li>You can select single repository group or summary statistics for all of them combined.</li>\\n<li>You can select multiple users or all of them in a multi select dowp down.</li>\\n<li>We are showing to 70 most active users in the drop-down list.</li>\\n<li>Selecting period (for example week) means that dashboard will show data in those periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/periods.md\\\" target=\\\"_blank\\\">here</a> for more informations about periods.</li>\\n<li>See <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/repository_groups.md\\\" target=\\\"_blank\\\">here</a> for more informations about repository groups.</li>\\n<li>We are skipping bots activity, see <a href=\\\"https://github.com/cncf/devstats/blob/master/docs/excluding_bots.md\\\" target=\\\"_blank\\\">excluding bots</a> for details.</li>\\n</ul>\"\n        },\n        \"datasource\": \"psql\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": null,\n        \"multi\": false,\n        \"name\": \"docs\",\n        \"options\": [],\n        \"query\": \"select value_s from gha_vars where name = 'users_stats_docs_html'\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": true,\n        \"sort\": 0,\n        \"tagValuesQuery\": \"\",\n        \"tags\": [],\n        \"tagsQuery\": \"\",\n        \"type\": \"query\",\n        \"useTags\": false\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Users stats\",\n  \"uid\": \"48\",\n  \"version\": 2\n}\n"
  },
  {
    "path": "devstats/config/grafana/etc/grafana.ini.example",
    "content": "##################### Grafana Configuration Example #####################\n#\n# Everything has defaults so you only need to uncomment things you want to\n# change\n\n# possible values : production, development\n; app_mode = production\n\n# instance name, defaults to HOSTNAME environment variable value or hostname if HOSTNAME var is empty\n; instance_name = ${HOSTNAME}\ninstance_name = {{project}}.{{url}}\n\n#################################### Paths ####################################\n[paths]\n# Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used)\n#\n;data = /var/lib/grafana\n#\n# Directory where grafana can store logs\n#\n;logs = /var/log/grafana\n#\n# Directory where grafana will automatically scan and look for plugins\n#\n;plugins = /var/lib/grafana/plugins\n\n#\n#################################### Server ####################################\n[server]\n# Protocol (http, https, socket)\n;protocol = http\n\n# The ip address to bind to, empty will bind to all interfaces\nhttp_addr = {{bind}}\n\n# The http port to use\nhttp_port = {{port}}\n\n# The public facing domain name used to access grafana from a browser\n;domain = localhost\n\n# Redirect to correct domain if host header does not match domain\n# Prevents DNS rebinding attacks\n;enforce_domain = false\n\n# The full public facing url you use in browser, used for redirects and emails\n# If you use reverse proxy and sub path specify full url (with sub path)\n;root_url = http://localhost:3000\n\n# Log web requests\n;router_logging = false\n\n# the path relative working path\n;static_root_path = public\n\n# enable gzip\n;enable_gzip = false\n\n# https certs & key file\n;cert_file =\n;cert_key =\n\n# Unix socket path\n;socket =\n\n#################################### Database ####################################\n[database]\n# You can configure the database connection by specifying type, host, name, user and password\n# as seperate properties or as on string using the url propertie.\n\n# Either \"mysql\", \"postgres\" or \"sqlite3\", it's your choice\n;type = sqlite3\n;host = 127.0.0.1:3306\n;name = grafana\n;user = root\n# If the password contains # or ; you have to wrap it with trippel quotes. Ex \"\"\"#password;\"\"\"\n;password =\n\n# Use either URL or the previous fields to configure the database\n# Example: mysql://user:secret@host:port/database\n;url =\n\n# For \"postgres\" only, either \"disable\", \"require\" or \"verify-full\"\n;ssl_mode = disable\n\n# For \"sqlite3\" only, path relative to data_path setting\n;path = grafana.db\n\n# Max idle conn setting default is 2\n;max_idle_conn = 2\n\n# Max conn setting default is 0 (mean not set)\n;max_open_conn =\n\n# Set to true to log the sql calls and execution times.\nlog_queries =\n\n#################################### Session ####################################\n[session]\n# Either \"memory\", \"file\", \"redis\", \"mysql\", \"postgres\", default is \"file\"\n;provider = file\n\n# Provider config options\n# memory: not have any config yet\n# file: session dir path, is relative to grafana data_path\n# redis: config like redis server e.g. `addr=127.0.0.1:6379,pool_size=100,db=grafana`\n# mysql: go-sql-driver/mysql dsn config string, e.g. `user:password@tcp(127.0.0.1:3306)/database_name`\n# postgres: user=a password=b host=localhost port=5432 dbname=c sslmode=disable\n;provider_config = sessions\n\n# Session cookie name\n;cookie_name = grafana_sess\ncookie_name = {{project}}_grafana_sess{{test}}\n\n# If you use session in https only, default is false\n;cookie_secure = false\n\n# Session life time, default is 86400\n;session_life_time = 86400\n\n#################################### Data proxy ###########################\n[dataproxy]\n\n# This enables data proxy logging, default is false\n;logging = false\n\n\n#################################### Analytics ####################################\n[analytics]\n# Server reporting, sends usage counters to stats.grafana.org every 24 hours.\n# No ip addresses are being tracked, only simple counters to track\n# running instances, dashboard and error counts. It is very helpful to us.\n# Change this option to false to disable reporting.\n;reporting_enabled = true\n\n# Set to false to disable all checks to https://grafana.net\n# for new vesions (grafana itself and plugins), check is used\n# in some UI views to notify that grafana or plugin update exists\n# This option does not cause any auto updates, nor send any information\n# only a GET request to http://grafana.com to get latest versions\n;check_for_updates = true\n\n# Google Analytics universal tracking code, only enabled if you specify an id here\n;google_analytics_ua_id =\n{{ga}}\n\n#################################### Security ####################################\n[security]\n# default admin user, created on startup\n;admin_user = admin\n\n# default admin password, can be changed before first start of grafana,  or in profile settings\n;admin_password = admin\n\n# used for signing\n;secret_key = SW2YcwTIb9zpOOhoPsMm\n\n# Auto-login remember days\n;login_remember_days = 7\n;cookie_username = grafana_user\n;cookie_remember_name = grafana_remember\ncookie_username = {{project}}_grafana_user{{test}}\ncookie_remember_name = {{project}}_grafana_remember{{test}}\n\n# disable gravatar profile images\n;disable_gravatar = false\n\n# data source proxy whitelist (ip_or_domain:port separated by spaces)\n;data_source_proxy_whitelist =\n\n[snapshots]\n# snapshot sharing options\n;external_enabled = true\n;external_snapshot_url = https://snapshots-origin.raintank.io\n;external_snapshot_name = Publish to snapshot.raintank.io\n\n# remove expired snapshot\n;snapshot_remove_expired = true\n\n# remove snapshots after 90 days\n;snapshot_TTL_days = 90\n\n#################################### Users ####################################\n[users]\n# disable user signup / registration\n;allow_sign_up = true\n\n# Allow non admin users to create organizations\n;allow_org_create = true\n\n# Set to true to automatically assign new users to the default organization (id 1)\n;auto_assign_org = true\n\n# Default role new users will be automatically assigned (if disabled above is set to true)\n;auto_assign_org_role = Viewer\n\n# Background text for the user field on the login page\n;login_hint = email or username\n\n# Default UI theme (\"dark\" or \"light\")\n;default_theme = dark\n\n# External user management, these options affect the organization users view\n;external_manage_link_url =\n;external_manage_link_name =\n;external_manage_info =\n\n# Read Only Editor role\nviewers_can_edit = true\n\n[auth]\n# Set to true to disable (hide) the login form, useful if you use OAuth, defaults to false\n;disable_login_form = false\n\n# Set to true to disable the signout link in the side menu. useful if you use auth.proxy, defaults to false\n;disable_signout_menu = false\n\n#################################### Anonymous Auth ##########################\n[auth.anonymous]\n# enable anonymous access\nenabled = true\n\n# specify organization name that should be used for unauthenticated users\norg_name = {{org}}\n\n# specify role for unauthenticated users\norg_role = Viewer\n\n#################################### Github Auth ##########################\n[auth.github]\n;enabled = false\n;allow_sign_up = true\n;client_id = some_id\n;client_secret = some_secret\n;scopes = user:email,read:org\n;auth_url = https://github.com/login/oauth/authorize\n;token_url = https://github.com/login/oauth/access_token\n;api_url = https://api.github.com/user\n;team_ids =\n;allowed_organizations =\n\n#################################### Google Auth ##########################\n[auth.google]\n;enabled = false\n;allow_sign_up = true\n;client_id = some_client_id\n;client_secret = some_client_secret\n;scopes = https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email\n;auth_url = https://accounts.google.com/o/oauth2/auth\n;token_url = https://accounts.google.com/o/oauth2/token\n;api_url = https://www.googleapis.com/oauth2/v1/userinfo\n;allowed_domains =\n\n#################################### Generic OAuth ##########################\n[auth.generic_oauth]\n;enabled = false\n;name = OAuth\n;allow_sign_up = true\n;client_id = some_id\n;client_secret = some_secret\n;scopes = user:email,read:org\n;auth_url = https://foo.bar/login/oauth/authorize\n;token_url = https://foo.bar/login/oauth/access_token\n;api_url = https://foo.bar/user\n;team_ids =\n;allowed_organizations =\n\n#################################### Grafana.com Auth ####################\n[auth.grafana_com]\n;enabled = false\n;allow_sign_up = true\n;client_id = some_id\n;client_secret = some_secret\n;scopes = user:email\n;allowed_organizations =\n\n#################################### Auth Proxy ##########################\n[auth.proxy]\n;enabled = false\n;header_name = X-WEBAUTH-USER\n;header_property = username\n;auto_sign_up = true\n;ldap_sync_ttl = 60\n;whitelist = 192.168.1.1, 192.168.2.1\n\n#################################### Basic Auth ##########################\n[auth.basic]\n;enabled = true\n\n#################################### Auth LDAP ##########################\n[auth.ldap]\n;enabled = false\n;config_file = /etc/grafana/ldap.toml\n;allow_sign_up = true\n\n#################################### SMTP / Emailing ##########################\n[smtp]\n;enabled = false\n;host = localhost:25\n;user =\n# If the password contains # or ; you have to wrap it with trippel quotes. Ex \"\"\"#password;\"\"\"\n;password =\n;cert_file =\n;key_file =\n;skip_verify = false\n;from_address = admin@grafana.localhost\n;from_name = Grafana\n# EHLO identity in SMTP dialog (defaults to instance_name)\n;ehlo_identity = dashboard.example.com\n\n[emails]\n;welcome_email_on_sign_up = false\n\n#################################### Logging ##########################\n[log]\n# Either \"console\", \"file\", \"syslog\". Default is console and  file\n# Use space to separate multiple modes, e.g. \"console file\"\n;mode = console file\n\n# Either \"debug\", \"info\", \"warn\", \"error\", \"critical\", default is \"info\"\n;level = info\n\n# optional settings to set different levels for specific loggers. Ex filters = sqlstore:debug\n;filters =\n\n\n# For \"console\" mode only\n[log.console]\n;level =\n\n# log line format, valid options are text, console and json\n;format = console\n\n# For \"file\" mode only\n[log.file]\n;level =\n\n# log line format, valid options are text, console and json\n;format = text\n\n# This enables automated log rotate(switch of following options), default is true\n;log_rotate = true\n\n# Max line number of single file, default is 1000000\n;max_lines = 1000000\n\n# Max size shift of single file, default is 28 means 1 << 28, 256MB\n;max_size_shift = 28\n\n# Segment log daily, default is true\n;daily_rotate = true\n\n# Expired days of log file(delete after max days), default is 7\n;max_days = 7\n\n[log.syslog]\n;level =\n\n# log line format, valid options are text, console and json\n;format = text\n\n# Syslog network type and address. This can be udp, tcp, or unix. If left blank, the default unix endpoints will be used.\n;network =\n;address =\n\n# Syslog facility. user, daemon and local0 through local7 are valid.\n;facility =\n\n# Syslog tag. By default, the process' argv[0] is used.\n;tag =\n\n\n;#################################### Dashboard JSON files ##########################\n[dashboards.json]\n;enabled = false\n;path = /var/lib/grafana/dashboards\n\n#################################### Alerting ############################\n[alerting]\n# Disable alerting engine & UI features\n;enabled = true\n# Makes it possible to turn off alert rule execution but alerting UI is visible\n;execute_alerts = true\n\n#################################### Internal Grafana Metrics ##########################\n# Metrics available at HTTP API Url /api/metrics\n[metrics]\n# Disable / Enable internal metrics\n;enabled           = true\n\n# Publish interval\n;interval_seconds  = 10\n\n# Send internal metrics to Graphite\n[metrics.graphite]\n# Enable by setting the address setting (ex localhost:2003)\n;address =\n;prefix = prod.grafana.%(instance_name)s.\n\n#################################### Distributed tracing ############\n[tracing.jaeger]\n# Enable by setting the address sending traces to jaeger (ex localhost:6831)\n;address = localhost:6831\n# Tag that will always be included in when creating new spans. ex (tag1:value1,tag2:value2)\n;always_included_tag = tag1:value1\n# Type specifies the type of the sampler: const, probabilistic, rateLimiting, or remote\n;sampler_type = const\n# jaeger samplerconfig param\n# for \"const\" sampler, 0 or 1 for always false/true respectively\n# for \"probabilistic\" sampler, a probability between 0 and 1\n# for \"rateLimiting\" sampler, the number of spans per second\n# for \"remote\" sampler, param is the same as for \"probabilistic\"\n# and indicates the initial sampling rate before the actual one\n# is received from the mothership\n;sampler_param = 1\n\n#################################### Grafana.com integration  ##########################\n# Url used to to import dashboards directly from Grafana.com\n[grafana_com]\n;url = https://grafana.com\n\n#################################### External image storage ##########################\n[external_image_storage]\n# Used for uploading images to public servers so they can be included in slack/email messages.\n# you can choose between (s3, webdav, gcs)\n;provider =\n\n[external_image_storage.s3]\n;bucket =\n;region =\n;path =\n;access_key =\n;secret_key =\n\n[external_image_storage.webdav]\n;url =\n;public_url =\n;username =\n;password =\n\n[external_image_storage.gcs]\n;key_file =\n;bucket =\n"
  },
  {
    "path": "devstats/config/grafana/kubeflow/change_title_and_icons.sh",
    "content": "#!/bin/bash\n# GRAFANA_DATA=/usr/share/grafana.homebrew/\nfor f in `find ${GRAFANA_DATA} -type f -exec grep -l \"'Grafana - '\" \"{}\" \\; | sort | uniq`\ndo\n  ls -l \"$f\"\n  vim -c \"%s/'Grafana - '/'Homebrew - '/g|wq\" \"$f\"\ndone\nfor f in `find ${GRAFANA_DATA} -type f -exec grep -l '\"Grafana - \"' \"{}\" \\; | sort | uniq`\ndo\n  ls -l \"$f\"\n  vim -c '%s/\"Grafana - \"/\"Homebrew - \"/g|wq' \"$f\"\ndone\ncp -n ${GRAFANA_DATA}/public/img/grafana_icon.svg ${GRAFANA_DATA}/public/img/grafana_icon.svg.bak\ncp grafana/img/homebrew.svg ${GRAFANA_DATA}/public/img/grafana_icon.svg || exit 1\ncp -n ${GRAFANA_DATA}/public/img/grafana_com_auth_icon.svg ${GRAFANA_DATA}/public/img/grafana_com_auth_icon.svg.bak\ncp grafana/img/homebrew.svg ${GRAFANA_DATA}/public/img/grafana_com_auth_icon.svg || exit 1\ncp -n ${GRAFANA_DATA}/public/img/grafana_net_logo.svg ${GRAFANA_DATA}/public/img/grafana_net_logo.svg.svg.bak\ncp grafana/img/homebrew.svg ${GRAFANA_DATA}/public/img/grafana_net_logo.svg || exit 1\ncp -n ${GRAFANA_DATA}/public/img/fav32.png ${GRAFANA_DATA}/public/img/fav32.png.bak\ncp grafana/img/homebrew32.png ${GRAFANA_DATA}/public/img/fav32.png || exit 1\necho 'OK'\n"
  },
  {
    "path": "devstats/config/grafana/kubeflow/grafana_start.sh",
    "content": "#!/bin/bash\ncd /usr/share/grafana.homebrew\ngrafana-server -config /etc/grafana.homebrew/grafana.ini cfg:default.paths.data=/var/lib/grafana.homebrew 1>/var/log/grafana.homebrew.log 2>&1\n"
  },
  {
    "path": "devstats/config/grafana/provisioning/dashboards/providers.yaml",
    "content": "# See http://docs.grafana.org/administration/provisioning/#dashboards\n#\n# Grafana allows us to povide a YAML file that configures where\n# to load dashboards from. We specify a config that will allow us to\n# load dashboards from a volume\napiVersion: 1\n\nproviders:\n- name: 'default'\n  orgId: 1\n  folder: ''\n  type: file\n  disableDeletion: false\n  # Don't want dashboards to be editable because changes will be overwritten.\n  editable: false\n  options:\n    # This should point to a volume. containing the dashboards    \n    path: /mount/data/src/git_kubeflow-community/devstats/config/grafana/dashboards/kubeflow"
  },
  {
    "path": "devstats/config/grafana/provisioning/datasources/datasource.yaml",
    "content": "# config file version\napiVersion: 1\n\n# list of datasources to insert/update depending\n# what's available in the database\ndatasources:\n  # <string, required> name of the datasource. Required\n  # name should match the value defined in the dasbhoard \n- name: psql\n  # <string, required> datasource type. Required\n  type: postgres\n  # <string, required> access mode. proxy or direct (Server or Browser in the UI). Required\n  access: direct\n  # <int> org id. will default to orgId 1 if not specified\n  orgId: 1\n  # <string> url\n  url: devstatsdb-0.devstatsdb.devstats.svc.cluster.local\n  # <string> database password, if used\n  # <string> database user, if used\n  user: gha_admin\n  # <string> database name, if used\n  database: kubeflow\n  secureJsonData:\n    password: \"password\"\n  jsonData:\n    sslmode: \"disable\" # disable/require/verify-ca/verify-full\n    maxOpenConns: 0         # Grafana v5.4+\n    maxIdleConns: 2         # Grafana v5.4+\n    connMaxLifetime: 14400  # Grafana v5.4+\n    postgresVersion: 903 # 903=9.3, 904=9.4, 905=9.5, 906=9.6, 1000=10\n    timescaledb: false\n\n# "
  },
  {
    "path": "devstats/config/grafana.sh",
    "content": "#!/bin/bash\ncd /usr/share/grafana.homebrew\ngrafana-server -config /etc/grafana.homebrew/grafana.ini cfg:default.paths.data=/var/lib/grafana.homebrew 1>/var/log/grafana.homebrew.log 2>&1\n"
  },
  {
    "path": "devstats/config/hide/hide.csv",
    "content": "sha1\n"
  },
  {
    "path": "devstats/config/kubeflow/psql.sh",
    "content": "#!/bin/bash\nfunction finish {\n    sync_unlock.sh\n}\nif [ -z \"$TRAP\" ]\nthen\n  sync_lock.sh || exit -1\n  trap finish EXIT\n  export TRAP=1\nfi\nset -o pipefail\n> errors.txt\n> run.log\nGHA2DB_PROJECT=kubeflow PG_DB=kubeflow GHA2DB_LOCAL=1 ./structure 2>>errors.txt | tee -a run.log || exit 1\nsudo -E -u postgres psql kubeflow -c \"create extension if not exists pgcrypto\" || exit 1\n./devel/ro_user_grants.sh kubeflow || exit 2\nGHA2DB_PROJECT=kubeflow PG_DB=kubeflow GHA2DB_LOCAL=1 ./gha2db 2018-01-01 0 today now kubeflow 2>>errors.txt | tee -a run.log || exit 3\nGHA2DB_PROJECT=kubeflow PG_DB=kubeflow GHA2DB_LOCAL=1 GHA2DB_MGETC=y GHA2DB_SKIPTABLE=1 GHA2DB_INDEX=1 ./structure 2>>errors.txt | tee -a run.log || exit 4\nGHA2DB_PROJECT=kubeflow PG_DB=kubeflow ./shared/setup_repo_groups.sh 2>>errors.txt | tee -a run.log || exit 5\nGHA2DB_PROJECT=kubeflow PG_DB=kubeflow ./shared/setup_scripts.sh 2>>errors.txt | tee -a run.log || exit 6\nGHA2DB_PROJECT=kubeflow PG_DB=kubeflow ./shared/get_repos.sh 2>>errors.txt | tee -a run.log || exit 7\nGHA2DB_PROJECT=kubeflow PG_DB=kubeflow ./shared/import_affs.sh 2>>errors.txt | tee -a run.log || exit 8\nGHA2DB_PROJECT=kubeflow PG_DB=kubeflow GHA2DB_LOCAL=1 ./vars || exit 9\n"
  },
  {
    "path": "devstats/config/metrics/kubeflow/sync_vars.yaml",
    "content": "---\n"
  },
  {
    "path": "devstats/config/metrics/kubeflow/vars.yaml",
    "content": "---\nvars:\n  - name: os_hostname\n    type: s\n    command: [hostname]\n  - name: full_name\n    type: s\n    value: Kubeflow\n  - name: lower_name\n    type: s\n    value: kubeflow\n  - name: projects_partial_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}partials/projects.html'\n    replaces:\n      - [hostname, os_hostname]\n      #- [hostname, ':devstats.cncf.io']\n      - [':testsrv=teststats.cncf.io ', ':']\n      - [': teststats.cncf.io=testsrv', ':']\n      - [':testsrv=', ':<!-- ']\n      - [':=testsrv', ': -->']\n      - [':prodsrv=devstats.cncf.io ', ':']\n      - [': devstats.cncf.io=prodsrv', ':']\n      - [':prodsrv=', ':<!-- ']\n      - [':=prodsrv', ': -->']\n  - name: activity_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/activity.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: commits_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/commits.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: community_stats_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/community_stats.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: companies_stats_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/companies_stats.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: companies_summary_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/companies_summary.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: contributing_companies_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/contributing_companies.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: developers_summary_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/developers_summary.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: non_author_activity_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/non_author_activity.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: issues_age_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/issues_age.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: issues_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/issues.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: new_and_episodic_issues_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/new_and_episodic_issues.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: new_and_episodic_prs_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/new_and_episodic_prs.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: new_prs_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/new_prs.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: opened_to_merged_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/opened_to_merged.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: pr_comments_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/pr_comments.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: projects_stats_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/projects_stats.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: prs_age_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/prs_age.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: prs_approval_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/prs_approval.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: pr_companies_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/pr_companies.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: pr_authors_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/pr_authors.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: prs_authors_chart_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/prs_authors_chart.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: prs_merged_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/prs_merged.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: repo_commenters_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/repo_commenters.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: repo_comments_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/repo_comments.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: time_metrics_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/time_metrics.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: top_commenters_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/top_commenters.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: user_reviews_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/user_reviews.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: github_events_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/github_events_docs_html.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: users_stats_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/users_stats.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: gender_stats_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/gender_stats.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: countries_stats_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/countries_stats.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: tzs_stats_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/tzs_stats.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: new_contributors_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/new_contributors.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: company_prs_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/shared/company_prs.md'\n    replaces:\n      - [full_name, full_name]\n      - [lower_name, lower_name]\n  - name: dashboards_docs_html\n    type: s\n    command:\n      - cat\n      - '{{datadir}}docs/dashboards/dashboards.md'\n    replaces:\n      - [hostname, os_hostname]\n      - [full_name, full_name]\n      - [proj_name, $GHA2DB_PROJECT]\n      - [url_prefix, proj_name]\n"
  },
  {
    "path": "devstats/config/metrics/shared/activity_repo_groups.sql",
    "content": "select\n  sub.repo_group,\n  round(count(distinct sub.id) / {{n}}, 2) as activity\nfrom (\n  select 'act,' || coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    ev.id\n  from\n    gha_repos r,\n    gha_events ev\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = ev.id\n  where\n    r.name = ev.dup_repo_name\n    and ev.created_at >= '{{from}}'\n    and ev.created_at < '{{to}}'\n    and (lower(ev.dup_actor_login) {{exclude_bots}})\n  ) sub\nwhere\n  sub.repo_group is not null\ngroup by\n  sub.repo_group\norder by\n  activity desc,\n  repo_group asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/all_prs_merged.sql",
    "content": "select\n  round(count(distinct id) / {{n}}, 2) as merge_count\nfrom\n  gha_pull_requests\nwhere\n  merged_at is not null\n  and merged_at >= '{{from}}'\n  and merged_at < '{{to}}'\n"
  },
  {
    "path": "devstats/config/metrics/shared/columns.yaml",
    "content": "---\ncolumns:\n  - table_regexp: '^s(act|commits|grp_pr_merg)$'\n    tag: trepo_groups\n    column: repo_group_name\n  - table_regexp: '^scompany_activity$'\n    tag: tcompanies\n    column: companies_name\n  - table_regexp: '^suser_activity$'\n    tag: tusers\n    column: users_name\n  - table_regexp: '^suser_reviews$'\n    tag: treviewers\n    column: reviewers_name\n  - table_regexp: '^si(open|clos)ed$'\n    tag: tall_repo_groups\n    column: all_repo_group_value\n  - table_regexp: '^spr_appr'\n    tag: tall_repo_groups\n    column: all_repo_group_value\n  - table_regexp: '^sevent_types$'\n    tag: tevent_types\n    column: event_type_name\n  - table_regexp: '^scountries'\n    tag: tcountries\n    column: country_name\n  - table_regexp: '^stz$'\n    tag: ttz_offsets\n    column: tz_offset\n"
  },
  {
    "path": "devstats/config/metrics/shared/columns_affs.yaml",
    "content": "---\ncolumns:\n  - table_regexp: '^scompany_activity$'\n    tag: tcompanies\n    column: companies_name\n  - table_regexp: '^scountries'\n    tag: tcountries\n    column: country_name\n  - table_regexp: '^stz$'\n    tag: ttz_offsets\n    column: tz_offset\n"
  },
  {
    "path": "devstats/config/metrics/shared/commits_repo_groups.sql",
    "content": "select\n  sub.repo_group,\n  round(count(distinct sub.sha) / {{n}}, 2) as commits\nfrom (\n  select 'commits,' || coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    r.name = c.dup_repo_name\n    and c.dup_created_at >= '{{from}}'\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_actor_login) {{exclude_bots}})\n  ) sub\nwhere\n  sub.repo_group is not null\ngroup by\n  sub.repo_group\norder by\n  commits desc,\n  repo_group asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/committers_countries.sql",
    "content": "with commits_data as (\n  select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.dup_actor_id as actor_id\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.dup_created_at >= '{{from}}'\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_actor_login) {{exclude_bots}})\n  union select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.author_id as actor_id\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.author_id is not null\n    and c.dup_created_at >= '{{from}}'\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_author_login) {{exclude_bots}})\n  union select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.committer_id as actor_id\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.committer_id is not null\n    and c.dup_created_at >= '{{from}}'\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_committer_login) {{exclude_bots}})\n)\nselect\n  concat(inn.type, ';', inn.country_name, '`', inn.repo_group, ';rcommitters,rcommits') as name,\n  inn.rcommitters,\n  inn.rcommits\nfrom (\n  select 'countries' as type,\n    a.country_name,\n    'all' as repo_group,\n    count(distinct c.actor_id) as rcommitters,\n    count(distinct c.sha) as rcommits\n  from\n    commits_data c,\n    gha_actors a\n  where\n    (lower(a.login) {{exclude_bots}})\n    and a.id = c.actor_id\n    and a.country_name is not null\n    and a.country_name != ''\n  group by\n    a.country_name\n  union select 'countries' as type,\n    a.country_name,\n    c.repo_group,\n    count(distinct c.actor_id) as rcommitters,\n    count(distinct c.sha) as rcommits\n  from\n    commits_data c,\n    gha_actors a\n  where\n    (lower(a.login) {{exclude_bots}})\n    and a.id = c.actor_id\n    and a.country_name is not null\n    and a.country_name != ''\n  group by\n    a.country_name,\n    c.repo_group\n) inn\nwhere\n  inn.repo_group is not null \norder by\n  name\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/committers_countries_cum.sql",
    "content": "with commits_data as (\n  select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.dup_actor_id as actor_id\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_actor_login) {{exclude_bots}})\n  union select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.author_id as actor_id\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.author_id is not null\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_author_login) {{exclude_bots}})\n  union select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.committer_id as actor_id\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.committer_id is not null\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_committer_login) {{exclude_bots}})\n)\nselect\n  concat(inn.type, ';', inn.country_name, '`', inn.repo_group, ';rcommitters,rcommits') as name,\n  inn.rcommitters,\n  inn.rcommits\nfrom (\n  select 'countriescum' as type,\n    a.country_name,\n    'all' as repo_group,\n    count(distinct c.actor_id) as rcommitters,\n    count(distinct c.sha) as rcommits\n  from\n    commits_data c,\n    gha_actors a\n  where\n    (lower(a.login) {{exclude_bots}})\n    and a.id = c.actor_id\n    and a.country_name is not null\n    and a.country_name != ''\n  group by\n    a.country_name\n  union select 'countriescum' as type,\n    a.country_name,\n    c.repo_group,\n    count(distinct c.actor_id) as rcommitters,\n    count(distinct c.sha) as rcommits\n  from\n    commits_data c,\n    gha_actors a\n  where\n    (lower(a.login) {{exclude_bots}})\n    and a.id = c.actor_id\n    and a.country_name is not null\n    and a.country_name != ''\n  group by\n    a.country_name,\n    c.repo_group\n) inn\nwhere\n  inn.repo_group is not null \norder by\n  name\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/committers_gender.sql",
    "content": "with commits_data as (\n  select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.dup_actor_id as actor_id\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.dup_created_at >= '{{from}}'\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_actor_login) {{exclude_bots}})\n  union select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.author_id as actor_id\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.author_id is not null\n    and c.dup_created_at >= '{{from}}'\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_author_login) {{exclude_bots}})\n  union select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.committer_id as actor_id\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.committer_id is not null\n    and c.dup_created_at >= '{{from}}'\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_committer_login) {{exclude_bots}})\n)\nselect\n  concat(inn.type, ';', case inn.sex when 'm' then 'Male' when 'f' then 'Female' end, '`', inn.repo_group, ';rcommitters,rcommits') as name,\n  inn.rcommitters,\n  inn.rcommits\nfrom (\n  select 'sex' as type,\n    a.sex,\n    'all' as repo_group,\n    count(distinct a.login) as rcommitters,\n    count(distinct c.sha) as rcommits\n  from\n    gha_actors a,\n    commits_data c\n  where\n    c.actor_id = a.id\n    and a.sex is not null\n    and a.sex != ''\n    and a.sex_prob >= 0.7\n  group by\n    a.sex\n  union select 'sex' as type,\n    a.sex,\n    c.repo_group,\n    count(distinct a.login) as rcommitters,\n    count(distinct c.sha) as rcommits\n  from\n    gha_actors a,\n    commits_data c\n  where\n    c.actor_id = a.id\n    and a.sex is not null\n    and a.sex != ''\n    and a.sex_prob >= 0.7\n  group by\n    a.sex,\n    c.repo_group\n) inn\nwhere\n  inn.repo_group is not null \norder by\n  name\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/committers_gender_cum.sql",
    "content": "with commits_data as (\n  select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.dup_actor_id as actor_id\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_actor_login) {{exclude_bots}})\n  union select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.author_id as actor_id\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.author_id is not null\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_author_login) {{exclude_bots}})\n  union select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.committer_id as actor_id\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.committer_id is not null\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_committer_login) {{exclude_bots}})\n)\nselect\n  concat(inn.type, ';', case inn.sex when 'm' then 'Male' when 'f' then 'Female' end, '`', inn.repo_group, ';rcommitters,rcommits') as name,\n  inn.rcommitters,\n  inn.rcommits\nfrom (\n  select 'sexcum' as type,\n    a.sex,\n    'all' as repo_group,\n    count(distinct a.login) as rcommitters,\n    count(distinct c.sha) as rcommits\n  from\n    gha_actors a,\n    commits_data c\n  where\n    c.actor_id = a.id\n    and a.sex is not null\n    and a.sex != ''\n    and a.sex_prob >= 0.7\n  group by\n    a.sex\n  union select 'sexcum' as type,\n    a.sex,\n    c.repo_group,\n    count(distinct a.login) as rcommitters,\n    count(distinct c.sha) as rcommits\n  from\n    gha_actors a,\n    commits_data c\n  where\n    c.actor_id = a.id\n    and a.sex is not null\n    and a.sex != ''\n    and a.sex_prob >= 0.7\n  group by\n    a.sex,\n    c.repo_group\n) inn\nwhere\n  inn.repo_group is not null \norder by\n  name\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/committers_tz.sql",
    "content": "with commits_data as (\n  select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.dup_actor_id as actor_id\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.dup_created_at >= '{{from}}'\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_actor_login) {{exclude_bots}})\n  union select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.author_id as actor_id\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.author_id is not null\n    and c.dup_created_at >= '{{from}}'\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_author_login) {{exclude_bots}})\n  union select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.committer_id as actor_id\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.committer_id is not null\n    and c.dup_created_at >= '{{from}}'\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_committer_login) {{exclude_bots}})\n), tz_data as (\n  select a.tz_offset,\n    'all' as repo_group,\n    count(distinct a.login) as rcommitters,\n    count(distinct c.sha) as rcommits\n  from\n    gha_actors a,\n    commits_data c\n  where\n    c.actor_id = a.id\n    and a.tz_offset is not null\n  group by\n    a.tz_offset\n  union select a.tz_offset,\n    c.repo_group,\n    count(distinct a.login) as rcommitters,\n    count(distinct c.sha) as rcommits\n  from\n    gha_actors a,\n    commits_data c\n  where\n    c.actor_id = a.id\n    and a.tz_offset is not null\n  group by\n    a.tz_offset,\n    c.repo_group\n)\nselect\n  'tz;' || round(tz_offset / 60.0, 1) || '`' || repo_group || ';rcommitters,rcommits' as name,\n  rcommitters,\n  rcommits\nfrom\n  tz_data\nwhere\n  repo_group is not null\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/companies_tags.sql",
    "content": "select\n  -- string_agg(sub.name, ',') from (\n  sub.name from (\n  select c.name as name,\n    count(distinct e.actor_id) as acnt,\n    count(distinct e.id) as ecnt\n  from\n    gha_companies c,\n    gha_actors_affiliations aa,\n    gha_events e\n  where\n    aa.company_name = c.name\n    and e.actor_id = aa.actor_id\n    and c.name not in (\n      '(Unknown)'\n    )\n    and e.type in (\n      'PullRequestReviewCommentEvent', 'PushEvent', 'PullRequestEvent',\n      'IssuesEvent', 'IssueCommentEvent', 'CommitCommentEvent'\n    )\n    and e.created_at > now() - '3 years'::interval\n    and (lower(e.dup_actor_login) {{exclude_bots}})\n    and c.name != ''\n  group by\n    c.name\n  union select 'None' as name,\n    0 as acnt,\n    0 as ecnt\n  order by\n    acnt desc,\n    ecnt desc,\n    name asc\n  limit {{lim}}\n) sub\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/company_activity.sql",
    "content": "select\n  concat('company;', sub.company, '`', sub.repo_group, ';activity,authors,issues,prs,pushers,pushes,comments,contributions,contributors'),\n  round(sub.activity / {{n}}, 2) as activity,\n  sub.authors,\n  round(sub.issues / {{n}}, 2) as issues,\n  round(sub.prs / {{n}}, 2) as prs,\n  sub.pushers,\n  round(sub.pushes / {{n}}, 2) as pushes,\n  round((sub.review_comments + sub.issue_comments + sub.commit_comments) / {{n}}, 2) as comments,\n  round((sub.review_comments + sub.issue_comments + sub.commit_comments + sub.pushes + sub.issues + sub.prs) / {{n}}, 2) as contributions,\n  sub.contributors\nfrom (\n  select affs.company_name as company,\n    'all' as repo_group,\n    count(distinct ev.id) as activity,\n    count(distinct ev.actor_id) as authors,\n    count(distinct ev.actor_id) filter(where ev.type = 'PushEvent') as pushers,\n    count(distinct ev.actor_id) filter (where ev.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributors,\n    count(distinct ev.id) filter(where ev.type = 'IssuesEvent') as issues,\n    count(distinct ev.id) filter(where ev.type = 'PullRequestEvent') as prs,\n    count(distinct ev.id) filter(where ev.type = 'PushEvent') as pushes,\n    count(distinct ev.id) filter(where ev.type = 'PullRequestReviewCommentEvent') as review_comments,\n    count(distinct ev.id) filter(where ev.type = 'IssueCommentEvent') as issue_comments,\n    count(distinct ev.id) filter(where ev.type = 'CommitCommentEvent') as commit_comments\n  from\n    gha_events ev,\n    gha_actors_affiliations affs\n  where\n    ev.actor_id = affs.actor_id\n    and affs.dt_from <= ev.created_at\n    and affs.dt_to > ev.created_at\n    and ev.created_at >= '{{from}}'\n    and ev.created_at < '{{to}}'\n    and (lower(ev.dup_actor_login) {{exclude_bots}})\n    and affs.company_name in (select companies_name from tcompanies)\n    and affs.company_name != ''\n  group by\n    affs.company_name\n  union select affs.company_name as company,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    count(distinct ev.id) as activity,\n    count(distinct ev.actor_id) as authors,\n    count(distinct ev.actor_id) filter(where ev.type = 'PushEvent') as pushers,\n    count(distinct ev.actor_id) filter (where ev.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributors,\n    count(distinct ev.id) filter(where ev.type = 'IssuesEvent') as issues,\n    count(distinct ev.id) filter(where ev.type = 'PullRequestEvent') as prs,\n    count(distinct ev.id) filter(where ev.type = 'PushEvent') as pushes,\n    count(distinct ev.id) filter(where ev.type = 'PullRequestReviewCommentEvent') as review_comments,\n    count(distinct ev.id) filter(where ev.type = 'IssueCommentEvent') as issue_comments,\n    count(distinct ev.id) filter(where ev.type = 'CommitCommentEvent') as commit_comments\n  from\n    gha_actors_affiliations affs,\n    gha_repos r,\n    gha_events ev\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = ev.id\n  where\n    r.id = ev.repo_id\n    and ev.actor_id = affs.actor_id\n    and affs.dt_from <= ev.created_at\n    and affs.dt_to > ev.created_at\n    and ev.created_at >= '{{from}}'\n    and ev.created_at < '{{to}}'\n    and (lower(ev.dup_actor_login) {{exclude_bots}})\n    and affs.company_name in (select companies_name from tcompanies)\n    and affs.company_name != ''\n  group by\n    affs.company_name,\n    coalesce(ecf.repo_group, r.repo_group)\n  union select 'All' as company,\n    'all' as repo_group,\n    count(distinct ev.id) as activity,\n    count(distinct ev.actor_id) as authors,\n    count(distinct ev.actor_id) filter(where ev.type = 'PushEvent') as pushers,\n    count(distinct ev.actor_id) filter (where ev.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributors,\n    count(distinct ev.id) filter(where ev.type = 'IssuesEvent') as issues,\n    count(distinct ev.id) filter(where ev.type = 'PullRequestEvent') as prs,\n    count(distinct ev.id) filter(where ev.type = 'PushEvent') as pushes,\n    count(distinct ev.id) filter(where ev.type = 'PullRequestReviewCommentEvent') as review_comments,\n    count(distinct ev.id) filter(where ev.type = 'IssueCommentEvent') as issue_comments,\n    count(distinct ev.id) filter(where ev.type = 'CommitCommentEvent') as commit_comments\n  from\n    gha_events ev\n  where\n    ev.created_at >= '{{from}}'\n    and ev.created_at < '{{to}}'\n    and (lower(ev.dup_actor_login) {{exclude_bots}})\n  union select 'All' as company,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    count(distinct ev.id) as activity,\n    count(distinct ev.actor_id) as authors,\n    count(distinct ev.actor_id) filter(where ev.type = 'PushEvent') as pushers,\n    count(distinct ev.actor_id) filter (where ev.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributors,\n    count(distinct ev.id) filter(where ev.type = 'IssuesEvent') as issues,\n    count(distinct ev.id) filter(where ev.type = 'PullRequestEvent') as prs,\n    count(distinct ev.id) filter(where ev.type = 'PushEvent') as pushes,\n    count(distinct ev.id) filter(where ev.type = 'PullRequestReviewCommentEvent') as review_comments,\n    count(distinct ev.id) filter(where ev.type = 'IssueCommentEvent') as issue_comments,\n    count(distinct ev.id) filter(where ev.type = 'CommitCommentEvent') as commit_comments\n  from\n    gha_repos r,\n    gha_events ev\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = ev.id\n  where\n    r.id = ev.repo_id\n    and ev.created_at >= '{{from}}'\n    and ev.created_at < '{{to}}'\n    and (lower(ev.dup_actor_login) {{exclude_bots}})\n  group by\n    coalesce(ecf.repo_group, r.repo_group)\n  order by\n    authors desc,\n    activity desc,\n    company asc\n  ) sub\nwhere\n  sub.repo_group is not null\n  and sub.authors > 0\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/company_activity_commits.sql",
    "content": "with company_commits_data as (\n  select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.dup_actor_id as actor_id,\n    af.company_name as company\n  from\n    gha_repos r,\n    gha_actors_affiliations af,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.dup_actor_id = af.actor_id\n    and af.dt_from <= c.dup_created_at\n    and af.dt_to > c.dup_created_at\n    and c.dup_created_at >= '{{from}}'\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_actor_login) {{exclude_bots}})\n    and af.company_name != ''\n    and af.company_name in (select companies_name from tcompanies)\n  union select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.author_id as actor_id,\n    af.company_name as company\n  from\n    gha_repos r,\n    gha_actors_affiliations af,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.author_id is not null\n    and c.author_id = af.actor_id\n    and af.dt_from <= c.dup_created_at\n    and af.dt_to > c.dup_created_at\n    and c.dup_created_at >= '{{from}}'\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_author_login) {{exclude_bots}})\n    and af.company_name != ''\n    and af.company_name in (select companies_name from tcompanies)\n  union select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.committer_id as actor_id,\n    af.company_name as company\n  from\n    gha_repos r,\n    gha_actors_affiliations af,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.committer_id is not null\n    and c.committer_id = af.actor_id\n    and af.dt_from <= c.dup_created_at\n    and af.dt_to > c.dup_created_at\n    and c.dup_created_at >= '{{from}}'\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_committer_login) {{exclude_bots}})\n    and af.company_name != ''\n    and af.company_name in (select companies_name from tcompanies)\n), commits_data as (\n  select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.dup_actor_id as actor_id\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.dup_created_at >= '{{from}}'\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_actor_login) {{exclude_bots}})\n  union select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.author_id as actor_id\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.author_id is not null\n    and c.dup_created_at >= '{{from}}'\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_author_login) {{exclude_bots}})\n  union select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.committer_id as actor_id\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.committer_id is not null\n    and c.dup_created_at >= '{{from}}'\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_committer_login) {{exclude_bots}})\n)\nselect\n  concat('company;', sub.company, '`', sub.repo_group, ';committers,commits'),\n  sub.committers,\n  round(sub.commits / {{n}}, 2) as commits\nfrom (\n  select company,\n    'all' as repo_group,\n    count(distinct sha) as commits,\n    count(distinct actor_id) as committers\n  from\n    company_commits_data\n  group by\n    company\n  union select company,\n    repo_group,\n    count(distinct sha) as commits,\n    count(distinct actor_id) as committers\n  from\n    company_commits_data\n  group by\n    company,\n    repo_group\n  union select 'All' as company,\n    'all' as repo_group,\n    count(distinct sha) as commits,\n    count(distinct actor_id) as committers\n  from\n    commits_data\n  union select 'All' as company,\n    repo_group,\n    count(distinct sha) as commits,\n    count(distinct actor_id) as committers\n  from\n    commits_data\n  group by\n    repo_group\n  ) sub\nwhere\n  sub.repo_group is not null\n  and sub.committers > 0\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/company_prs.sql",
    "content": "select\n  sub.repo || '$$$' || sub.company || '$$$' || sub.github_id || '$$$' || sub.author_names || '$$$' || sub.author_emails as data,\n  sub.PRs as value\nfrom (\n  select\n    r.repo_group as repo,\n    aa.company_name as company,\n    a.login as github_id,\n    coalesce(string_agg(distinct an.name, ', '), '-') as author_names,\n    coalesce(string_agg(distinct ae.email, ', '), '-') as author_emails,\n    count(distinct pr.id) as PRs\n  from\n    gha_pull_requests pr,\n    gha_actors_affiliations aa,\n    gha_repos r,\n    gha_actors a,\n    gha_actors_names an,\n    gha_actors_emails ae\n  where\n    aa.actor_id = pr.user_id\n    and an.actor_id = a.id\n    and ae.actor_id = a.id\n    and aa.actor_id = a.id\n    and aa.dt_from <= pr.created_at\n    and aa.dt_to > pr.created_at\n    and pr.dup_repo_id = r.id\n    and aa.company_name != ''\n    and aa.company_name in (select companies_name from tcompanies)\n    and r.repo_group is not null\n    and {{period:pr.created_at}}\n    and (lower(pr.dup_actor_login) {{exclude_bots}})\n  group by\n    company,\n    repo,\n    github_id\n  ) sub\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/countries.sql",
    "content": "select\n  concat(inn.type, ';', inn.country_name, '`', inn.repo_group, ';contributors,contributions,users,events,committers,commits,prcreators,prs,issuecreators,issues,commenters,comments,reviewers,reviews,watchers,watches,forkers,forks') as name,\n  inn.contributors,\n  inn.contributions,\n  inn.users,\n  inn.events,\n  inn.committers,\n  inn.commits,\n  inn.prcreators,\n  inn.prs,\n  inn.issuecreators,\n  inn.issues,\n  inn.commenters,\n  inn.comments,\n  inn.reviewers,\n  inn.reviews,\n  inn.watchers,\n  inn.watches,\n  inn.forkers,\n  inn.forks\nfrom (\n  select 'countries' as type,\n    a.country_name,\n    'all' as repo_group,\n    count(distinct e.actor_id) filter (where e.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributors,\n    count(distinct e.id) filter (where e.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributions,\n    count(distinct e.actor_id) as users,\n    count(distinct e.id) as events,\n    count(distinct e.actor_id) filter (where e.type = 'PushEvent') as committers,\n    count(distinct e.id) filter (where e.type = 'PushEvent') as commits,\n    count(distinct e.actor_id) filter (where e.type = 'PullRequestEvent') as prcreators,\n    count(distinct e.id) filter (where e.type = 'PullRequestEvent') as prs,\n    count(distinct e.actor_id) filter (where e.type = 'IssuesEvent') as issuecreators,\n    count(distinct e.id) filter (where e.type = 'IssuesEvent') as issues,\n    count(distinct e.actor_id) filter (where e.type in ('CommitCommentEvent', 'IssueCommentEvent')) as commenters,\n    count(distinct e.id) filter (where e.type in ('CommitCommentEvent', 'IssueCommentEvent')) as comments,\n    count(distinct e.actor_id) filter (where e.type = 'PullRequestReviewCommentEvent') as reviewers,\n    count(distinct e.id) filter (where e.type = 'PullRequestReviewCommentEvent') as reviews,\n    count(distinct e.actor_id) filter (where e.type = 'WatchEvent') as watchers,\n    count(distinct e.id) filter (where e.type = 'WatchEvent') as watches,\n    count(distinct e.actor_id) filter (where e.type = 'ForkEvent') as forkers,\n    count(distinct e.id) filter (where e.type = 'ForkEvent') as forks\n  from\n    gha_events e,\n    gha_actors a\n  where\n    (lower(a.login) {{exclude_bots}})\n    and a.id = e.actor_id\n    and a.country_name is not null\n    and a.country_name != ''\n    and e.created_at >= '{{from}}'\n    and e.created_at < '{{to}}'\n  group by\n    a.country_name\n  union select 'countries' as type,\n    a.country_name,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    count(distinct e.actor_id) filter (where e.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributors,\n    count(distinct e.id) filter (where e.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributions,\n    count(distinct e.actor_id) as users,\n    count(distinct e.id) as events,\n    count(distinct e.actor_id) filter (where e.type = 'PushEvent') as committers,\n    count(distinct e.id) filter (where e.type = 'PushEvent') as commits,\n    count(distinct e.actor_id) filter (where e.type = 'PullRequestEvent') as prcreators,\n    count(distinct e.id) filter (where e.type = 'PullRequestEvent') as prs,\n    count(distinct e.actor_id) filter (where e.type = 'IssuesEvent') as issuecreators,\n    count(distinct e.id) filter (where e.type = 'IssuesEvent') as issues,\n    count(distinct e.actor_id) filter (where e.type in ('CommitCommentEvent', 'IssueCommentEvent')) as commenters,\n    count(distinct e.id) filter (where e.type in ('CommitCommentEvent', 'IssueCommentEvent')) as comments,\n    count(distinct e.actor_id) filter (where e.type = 'PullRequestReviewCommentEvent') as reviewers,\n    count(distinct e.id) filter (where e.type = 'PullRequestReviewCommentEvent') as reviews,\n    count(distinct e.actor_id) filter (where e.type = 'WatchEvent') as watchers,\n    count(distinct e.id) filter (where e.type = 'WatchEvent') as watches,\n    count(distinct e.actor_id) filter (where e.type = 'ForkEvent') as forkers,\n    count(distinct e.id) filter (where e.type = 'ForkEvent') as forks\n  from\n    gha_repos r,\n    gha_actors a,\n    gha_events e\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = e.id\n  where\n    r.id = e.repo_id\n    and (lower(a.login) {{exclude_bots}})\n    and a.id = e.actor_id\n    and a.country_name is not null\n    and a.country_name != ''\n    and e.created_at >= '{{from}}'\n    and e.created_at < '{{to}}'\n  group by\n    a.country_name,\n    coalesce(ecf.repo_group, r.repo_group)\n) inn\nwhere\n  inn.repo_group is not null \norder by\n  name\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/countries_cum.sql",
    "content": "select\n  concat(inn.type, ';', inn.country_name, '`', inn.repo_group, ';contributors,contributions,users,events,committers,commits,prcreators,prs,issuecreators,issues,commenters,comments,reviewers,reviews,watchers,watches,forkers,forks') as name,\n  inn.contributors,\n  inn.contributions,\n  inn.users,\n  inn.events,\n  inn.committers,\n  inn.commits,\n  inn.prcreators,\n  inn.prs,\n  inn.issuecreators,\n  inn.issues,\n  inn.commenters,\n  inn.comments,\n  inn.reviewers,\n  inn.reviews,\n  inn.watchers,\n  inn.watches,\n  inn.forkers,\n  inn.forks\nfrom (\n  select 'countriescum' as type,\n    a.country_name,\n    'all' as repo_group,\n    count(distinct e.actor_id) filter (where e.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributors,\n    count(distinct e.id) filter (where e.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributions,\n    count(distinct e.actor_id) as users,\n    count(distinct e.id) as events,\n    count(distinct e.actor_id) filter (where e.type = 'PushEvent') as committers,\n    count(distinct e.id) filter (where e.type = 'PushEvent') as commits,\n    count(distinct e.actor_id) filter (where e.type = 'PullRequestEvent') as prcreators,\n    count(distinct e.id) filter (where e.type = 'PullRequestEvent') as prs,\n    count(distinct e.actor_id) filter (where e.type = 'IssuesEvent') as issuecreators,\n    count(distinct e.id) filter (where e.type = 'IssuesEvent') as issues,\n    count(distinct e.actor_id) filter (where e.type in ('CommitCommentEvent', 'IssueCommentEvent')) as commenters,\n    count(distinct e.id) filter (where e.type in ('CommitCommentEvent', 'IssueCommentEvent')) as comments,\n    count(distinct e.actor_id) filter (where e.type = 'PullRequestReviewCommentEvent') as reviewers,\n    count(distinct e.id) filter (where e.type = 'PullRequestReviewCommentEvent') as reviews,\n    count(distinct e.actor_id) filter (where e.type = 'WatchEvent') as watchers,\n    count(distinct e.id) filter (where e.type = 'WatchEvent') as watches,\n    count(distinct e.actor_id) filter (where e.type = 'ForkEvent') as forkers,\n    count(distinct e.id) filter (where e.type = 'ForkEvent') as forks\n  from\n    gha_events e,\n    gha_actors a\n  where\n    (lower(a.login) {{exclude_bots}})\n    and a.id = e.actor_id\n    and a.country_name is not null\n    and a.country_name != ''\n    and e.created_at < '{{to}}'\n  group by\n    a.country_name\n  union select 'countriescum' as type,\n    a.country_name,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    count(distinct e.actor_id) filter (where e.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributors,\n    count(distinct e.id) filter (where e.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributions,\n    count(distinct e.actor_id) as users,\n    count(distinct e.id) as events,\n    count(distinct e.actor_id) filter (where e.type = 'PushEvent') as committers,\n    count(distinct e.id) filter (where e.type = 'PushEvent') as commits,\n    count(distinct e.actor_id) filter (where e.type = 'PullRequestEvent') as prcreators,\n    count(distinct e.id) filter (where e.type = 'PullRequestEvent') as prs,\n    count(distinct e.actor_id) filter (where e.type = 'IssuesEvent') as issuecreators,\n    count(distinct e.id) filter (where e.type = 'IssuesEvent') as issues,\n    count(distinct e.actor_id) filter (where e.type in ('CommitCommentEvent', 'IssueCommentEvent')) as commenters,\n    count(distinct e.id) filter (where e.type in ('CommitCommentEvent', 'IssueCommentEvent')) as comments,\n    count(distinct e.actor_id) filter (where e.type = 'PullRequestReviewCommentEvent') as reviewers,\n    count(distinct e.id) filter (where e.type = 'PullRequestReviewCommentEvent') as reviews,\n    count(distinct e.actor_id) filter (where e.type = 'WatchEvent') as watchers,\n    count(distinct e.id) filter (where e.type = 'WatchEvent') as watches,\n    count(distinct e.actor_id) filter (where e.type = 'ForkEvent') as forkers,\n    count(distinct e.id) filter (where e.type = 'ForkEvent') as forks\n  from\n    gha_repos r,\n    gha_actors a,\n    gha_events e\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = e.id\n  where\n    r.id = e.repo_id\n    and (lower(a.login) {{exclude_bots}})\n    and a.id = e.actor_id\n    and a.country_name is not null\n    and a.country_name != ''\n    and e.created_at < '{{to}}'\n  group by\n    a.country_name,\n    coalesce(ecf.repo_group, r.repo_group)\n) inn\nwhere\n  inn.repo_group is not null \norder by\n  name\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/countries_tags.sql",
    "content": "select\n  distinct country_name\nfrom\n  gha_actors\nwhere\n  country_name is not null\n  and country_name != ''\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/cumulative_periods.sql",
    "content": "select\n  *\nfrom (\n  values\n    ('sex/Week/w'),\n    ('sex/Month/m'),\n    ('sex/Quarter/q'),\n    ('sex/Year/y'),\n    ('sexcum/Month/m'),\n    ('countries/Week/w'),\n    ('countries/Month/m'),\n    ('countries/Quarter/q'),\n    ('countries/Year/y'),\n    ('countriescum/Month/m')\n  ) as temp(cat)\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/episodic_contributors.sql",
    "content": "with prev as (\n  select distinct user_id\n  from\n    gha_pull_requests\n  where\n    created_at >= date '{{from}}' - '3 months'::interval\n    and created_at < '{{from}}'\n), prev_cnt as (\n  select user_id, count(distinct id) as cnt\n  from\n    gha_pull_requests\n  where\n    created_at < '{{from}}'\n  group by\n    user_id\n)\nselect\n  'epis_contrib;All;contrib,prs' as name,\n  round(count(distinct pr.user_id) / {{n}}, 2) as contributors,\n  round(count(distinct pr.id) / {{n}}, 2) as prs\nfrom\n  gha_pull_requests pr\nleft join\n  prev_cnt pc\non\n  pc.user_id = pr.user_id\nwhere\n  pr.created_at >= '{{from}}'\n  and pr.created_at < '{{to}}'\n  and pr.user_id not in (select user_id from prev)\n  and (pc.user_id is null or pc.cnt <= 12)\nunion select sub.name,\n  round(count(distinct sub.user_id) / {{n}}, 2) as contributors,\n  round(count(distinct sub.id) / {{n}}, 2) as prs\nfrom (\n    select 'epis_contrib;' || coalesce(ecf.repo_group, r.repo_group) || ';contrib,prs' as name,\n    pr.user_id,\n    pr.id\n  from\n    gha_repos r,\n    gha_pull_requests pr\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = pr.event_id\n  left join\n    prev_cnt pc\n  on\n    pc.user_id = pr.user_id\n  where\n    pr.dup_repo_id = r.id\n    and pr.created_at >= '{{from}}'\n    and pr.created_at < '{{to}}'\n    and pr.user_id not in (select user_id from prev)\n    and (pc.user_id is null or pc.cnt <= 12)\n  ) sub\nwhere\n  sub.name is not null\ngroup by\n  sub.name\norder by\n  prs desc,\n  name asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/episodic_issues.sql",
    "content": "with prev as (\n  select distinct user_id\n  from\n    gha_issues\n  where\n    created_at >= date '{{from}}' - '3 months'::interval\n    and created_at < '{{from}}'\n    and is_pull_request = false\n), prev_cnt as (\n  select user_id, count(distinct id) as cnt\n  from\n    gha_issues\n  where\n    created_at < '{{from}}'\n    and is_pull_request = false\n  group by\n    user_id\n)\nselect\n  'epis_iss;All;contrib,iss' as name,\n  round(count(distinct i.user_id) / {{n}}, 2) as contributors,\n  round(count(distinct i.id) / {{n}}, 2) as issues\nfrom\n  gha_issues i\nleft join\n  prev_cnt pc\non\n  pc.user_id = i.user_id\nwhere\n  i.is_pull_request = false\n  and i.created_at >= '{{from}}'\n  and i.created_at < '{{to}}'\n  and i.user_id not in (select user_id from prev)\n  and (pc.user_id is null or pc.cnt <= 12)\nunion select sub.name,\n  round(count(distinct sub.user_id) / {{n}}, 2) as contributors,\n  round(count(distinct sub.id) / {{n}}, 2) as issues\nfrom (\n    select 'epis_iss;' || coalesce(ecf.repo_group, r.repo_group) || ';contrib,iss' as name,\n    i.user_id,\n    i.id\n  from\n    gha_repos r,\n    gha_issues i\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = i.event_id\n  left join\n    prev_cnt pc\n  on\n    pc.user_id = i.user_id\n  where\n    i.dup_repo_id = r.id\n    and i.is_pull_request = false\n    and i.created_at >= '{{from}}'\n    and i.created_at < '{{to}}'\n    and i.user_id not in (select user_id from prev)\n    and (pc.user_id is null or pc.cnt <= 12)\n  ) sub\nwhere\n  sub.name is not null\ngroup by\n  sub.name\norder by\n  issues desc,\n  name asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/es_periods_tags.sql",
    "content": "select\n  'h' as devstats_period,\n  '1h' as es_period_name\nunion select 'h24', '1h'\nunion select 'd', '1d'\nunion select 'd7', '1d'\nunion select 'd10', '1d'\nunion select 'd28', '1d'\nunion select 'w', '1w'\nunion select 'm', '1m'\nunion select 'q', '1q'\nunion select 'y', '1y'\nunion select 'y10', '1y'\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/event_types.sql",
    "content": "select\n  'event_types,' || type,\n  round(count(id) / {{n}}, 2) as n\nfrom\n  gha_events\nwhere\n  created_at >= '{{from}}'\n  and created_at < '{{to}}'\ngroup by\n  type\norder by\n  n desc,\n  type asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/event_types_tags.sql",
    "content": "select\n  sel.type\nfrom (\n  select type,\n    count(id) as cnt\n  from\n    gha_events\n  group by\n    type\n  order by\n    cnt desc,\n    type asc\n  limit {{lim}}\n  ) sel\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/events.sql",
    "content": "select\n  count(id) as count\nfrom\n  gha_events\nwhere\n  created_at >= '{{from}}'\n  and created_at < '{{to}}'\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/first_non_author_activity.sql",
    "content": "with issues as (\n  select distinct id,\n    user_id,\n    created_at\n  from\n    gha_issues\n  where\n    is_pull_request = true\n    and created_at >= '{{from}}'\n    and created_at < '{{to}}'\n), prs as (\n  select distinct id,\n    user_id,\n    created_at\n  from\n    gha_pull_requests\n  where\n    created_at >= '{{from}}'\n    and created_at < '{{to}}'\n), tdiffs as (\n  select extract(epoch from i2.updated_at - i.created_at) / 3600 as diff,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group\n  from\n    issues i,\n    gha_repos r,\n    gha_issues i2\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = i2.event_id\n  where\n    i.id = i2.id\n    and r.name = i2.dup_repo_name\n    and (lower(i2.dup_actor_login) {{exclude_bots}})\n    and i2.event_id in (\n      select event_id\n      from\n        gha_issues sub\n      where\n        sub.dup_actor_id != i.user_id\n        and sub.id = i.id\n        and sub.updated_at > i.created_at + '30 seconds'::interval\n        and sub.dup_type like '%Event'\n      order by\n        sub.updated_at asc\n      limit 1\n    )\n  union select extract(epoch from p2.updated_at - p.created_at) / 3600 as diff,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group\n  from\n    prs p,\n    gha_repos r,\n    gha_pull_requests p2\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = p2.event_id\n  where\n    p.id = p2.id\n    and r.name = p2.dup_repo_name\n    and (lower(p2.dup_actor_login) {{exclude_bots}})\n    and p2.event_id in (\n      select event_id\n      from\n        gha_pull_requests sub\n      where\n        sub.dup_actor_id != p.user_id\n        and sub.id = p.id\n        and sub.updated_at > p.created_at + '30 seconds'::interval\n        and sub.dup_type like '%Event'\n      order by\n        sub.updated_at asc\n      limit 1\n    )\n)\nselect\n  'non_auth;All;p15,med,p85' as name,\n  percentile_disc(0.15) within group (order by diff asc) as non_author_15_percentile,\n  percentile_disc(0.5) within group (order by diff asc) as non_author_median,\n  percentile_disc(0.85) within group (order by diff asc) as non_author_85_percentile\nfrom\n  tdiffs\nunion select 'non_auth;' || repo_group || ';p15,med,p85' as name,\n  percentile_disc(0.15) within group (order by diff asc) as non_author_15_percentile,\n  percentile_disc(0.5) within group (order by diff asc) as non_author_median,\n  percentile_disc(0.85) within group (order by diff asc) as non_author_85_percentile\nfrom\n  tdiffs\nwhere\n  repo_group is not null\ngroup by\n  repo_group\norder by\n  non_author_median desc,\n  name asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/gender.sql",
    "content": "select\n  concat(inn.type, ';', case inn.sex when 'm' then 'Male' when 'f' then 'Female' end, '`', inn.repo_group, ';contributors,contributions,users,events,committers,commits,prcreators,prs,issuecreators,issues,commenters,comments,reviewers,reviews,watchers,watches,forkers,forks') as name,\n  inn.contributors,\n  inn.contributions,\n  inn.users,\n  inn.events,\n  inn.committers,\n  inn.commits,\n  inn.prcreators,\n  inn.prs,\n  inn.issuecreators,\n  inn.issues,\n  inn.commenters,\n  inn.comments,\n  inn.reviewers,\n  inn.reviews,\n  inn.watchers,\n  inn.watches,\n  inn.forkers,\n  inn.forks\nfrom (\n  select 'sex' as type,\n    a.sex,\n    'all' as repo_group,\n    count(distinct e.actor_id) filter (where e.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributors,\n    count(distinct e.id) filter (where e.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributions,\n    count(distinct e.actor_id) as users,\n    count(distinct e.id) as events,\n    count(distinct e.actor_id) filter (where e.type = 'PushEvent') as committers,\n    count(distinct e.id) filter (where e.type = 'PushEvent') as commits,\n    count(distinct e.actor_id) filter (where e.type = 'PullRequestEvent') as prcreators,\n    count(distinct e.id) filter (where e.type = 'PullRequestEvent') as prs,\n    count(distinct e.actor_id) filter (where e.type = 'IssuesEvent') as issuecreators,\n    count(distinct e.id) filter (where e.type = 'IssuesEvent') as issues,\n    count(distinct e.actor_id) filter (where e.type in ('CommitCommentEvent', 'IssueCommentEvent')) as commenters,\n    count(distinct e.id) filter (where e.type in ('CommitCommentEvent', 'IssueCommentEvent')) as comments,\n    count(distinct e.actor_id) filter (where e.type = 'PullRequestReviewCommentEvent') as reviewers,\n    count(distinct e.id) filter (where e.type = 'PullRequestReviewCommentEvent') as reviews,\n    count(distinct e.actor_id) filter (where e.type = 'WatchEvent') as watchers,\n    count(distinct e.id) filter (where e.type = 'WatchEvent') as watches,\n    count(distinct e.actor_id) filter (where e.type = 'ForkEvent') as forkers,\n    count(distinct e.id) filter (where e.type = 'ForkEvent') as forks\n  from\n    gha_events e,\n    gha_actors a\n  where\n    (lower(a.login) {{exclude_bots}})\n    and a.id = e.actor_id\n    and a.sex is not null\n    and a.sex != ''\n    and a.sex_prob >= 0.7\n    and e.created_at >= '{{from}}'\n    and e.created_at < '{{to}}'\n  group by\n    a.sex\n  union select 'sex' as type,\n    a.sex,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    count(distinct e.actor_id) filter (where e.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributors,\n    count(distinct e.id) filter (where e.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributions,\n    count(distinct e.actor_id) as users,\n    count(distinct e.id) as events,\n    count(distinct e.actor_id) filter (where e.type = 'PushEvent') as committers,\n    count(distinct e.id) filter (where e.type = 'PushEvent') as commits,\n    count(distinct e.actor_id) filter (where e.type = 'PullRequestEvent') as prcreators,\n    count(distinct e.id) filter (where e.type = 'PullRequestEvent') as prs,\n    count(distinct e.actor_id) filter (where e.type = 'IssuesEvent') as issuecreators,\n    count(distinct e.id) filter (where e.type = 'IssuesEvent') as issues,\n    count(distinct e.actor_id) filter (where e.type in ('CommitCommentEvent', 'IssueCommentEvent')) as commenters,\n    count(distinct e.id) filter (where e.type in ('CommitCommentEvent', 'IssueCommentEvent')) as comments,\n    count(distinct e.actor_id) filter (where e.type = 'PullRequestReviewCommentEvent') as reviewers,\n    count(distinct e.id) filter (where e.type = 'PullRequestReviewCommentEvent') as reviews,\n    count(distinct e.actor_id) filter (where e.type = 'WatchEvent') as watchers,\n    count(distinct e.id) filter (where e.type = 'WatchEvent') as watches,\n    count(distinct e.actor_id) filter (where e.type = 'ForkEvent') as forkers,\n    count(distinct e.id) filter (where e.type = 'ForkEvent') as forks\n  from\n    gha_repos r,\n    gha_actors a,\n    gha_events e\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = e.id\n  where\n    r.id = e.repo_id\n    and (lower(a.login) {{exclude_bots}})\n    and a.id = e.actor_id\n    and a.sex is not null\n    and a.sex != ''\n    and a.sex_prob >= 0.7\n    and e.created_at >= '{{from}}'\n    and e.created_at < '{{to}}'\n  group by\n    a.sex,\n    coalesce(ecf.repo_group, r.repo_group)\n) inn\nwhere\n  inn.repo_group is not null \norder by\n  name\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/gender_cum.sql",
    "content": "select\n  concat(inn.type, ';', case inn.sex when 'm' then 'Male' when 'f' then 'Female' end, '`', inn.repo_group, ';contributors,contributions,users,events,committers,commits,prcreators,prs,issuecreators,issues,commenters,comments,reviewers,reviews,watchers,watches,forkers,forks') as name,\n  inn.contributors,\n  inn.contributions,\n  inn.users,\n  inn.events,\n  inn.committers,\n  inn.commits,\n  inn.prcreators,\n  inn.prs,\n  inn.issuecreators,\n  inn.issues,\n  inn.commenters,\n  inn.comments,\n  inn.reviewers,\n  inn.reviews,\n  inn.watchers,\n  inn.watches,\n  inn.forkers,\n  inn.forks\nfrom (\n  select 'sexcum' as type,\n    a.sex,\n    'all' as repo_group,\n    count(distinct e.actor_id) filter (where e.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributors,\n    count(distinct e.id) filter (where e.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributions,\n    count(distinct e.actor_id) as users,\n    count(distinct e.id) as events,\n    count(distinct e.actor_id) filter (where e.type = 'PushEvent') as committers,\n    count(distinct e.id) filter (where e.type = 'PushEvent') as commits,\n    count(distinct e.actor_id) filter (where e.type = 'PullRequestEvent') as prcreators,\n    count(distinct e.id) filter (where e.type = 'PullRequestEvent') as prs,\n    count(distinct e.actor_id) filter (where e.type = 'IssuesEvent') as issuecreators,\n    count(distinct e.id) filter (where e.type = 'IssuesEvent') as issues,\n    count(distinct e.actor_id) filter (where e.type in ('CommitCommentEvent', 'IssueCommentEvent')) as commenters,\n    count(distinct e.id) filter (where e.type in ('CommitCommentEvent', 'IssueCommentEvent')) as comments,\n    count(distinct e.actor_id) filter (where e.type = 'PullRequestReviewCommentEvent') as reviewers,\n    count(distinct e.id) filter (where e.type = 'PullRequestReviewCommentEvent') as reviews,\n    count(distinct e.actor_id) filter (where e.type = 'WatchEvent') as watchers,\n    count(distinct e.id) filter (where e.type = 'WatchEvent') as watches,\n    count(distinct e.actor_id) filter (where e.type = 'ForkEvent') as forkers,\n    count(distinct e.id) filter (where e.type = 'ForkEvent') as forks\n  from\n    gha_events e,\n    gha_actors a\n  where\n    (lower(a.login) {{exclude_bots}})\n    and a.id = e.actor_id\n    and a.sex is not null\n    and a.sex != ''\n    and a.sex_prob >= 0.7\n    and e.created_at < '{{to}}'\n  group by\n    a.sex\n  union select 'sexcum' as type,\n    a.sex,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    count(distinct e.actor_id) filter (where e.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributors,\n    count(distinct e.id) filter (where e.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributions,\n    count(distinct e.actor_id) as users,\n    count(distinct e.id) as events,\n    count(distinct e.actor_id) filter (where e.type = 'PushEvent') as committers,\n    count(distinct e.id) filter (where e.type = 'PushEvent') as commits,\n    count(distinct e.actor_id) filter (where e.type = 'PullRequestEvent') as prcreators,\n    count(distinct e.id) filter (where e.type = 'PullRequestEvent') as prs,\n    count(distinct e.actor_id) filter (where e.type = 'IssuesEvent') as issuecreators,\n    count(distinct e.id) filter (where e.type = 'IssuesEvent') as issues,\n    count(distinct e.actor_id) filter (where e.type in ('CommitCommentEvent', 'IssueCommentEvent')) as commenters,\n    count(distinct e.id) filter (where e.type in ('CommitCommentEvent', 'IssueCommentEvent')) as comments,\n    count(distinct e.actor_id) filter (where e.type = 'PullRequestReviewCommentEvent') as reviewers,\n    count(distinct e.id) filter (where e.type = 'PullRequestReviewCommentEvent') as reviews,\n    count(distinct e.actor_id) filter (where e.type = 'WatchEvent') as watchers,\n    count(distinct e.id) filter (where e.type = 'WatchEvent') as watches,\n    count(distinct e.actor_id) filter (where e.type = 'ForkEvent') as forkers,\n    count(distinct e.id) filter (where e.type = 'ForkEvent') as forks\n  from\n    gha_repos r,\n    gha_actors a,\n    gha_events e\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = e.id\n  where\n    r.id = e.repo_id\n    and (lower(a.login) {{exclude_bots}})\n    and a.id = e.actor_id\n    and a.sex is not null\n    and a.sex != ''\n    and a.sex_prob >= 0.7\n    and e.created_at < '{{to}}'\n  group by\n    a.sex,\n    coalesce(ecf.repo_group, r.repo_group)\n) inn\nwhere\n  inn.repo_group is not null \norder by\n  name\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/hist_commenters.sql",
    "content": "select\n  sub.repo_group,\n  sub.actor,\n  count(distinct sub.id) as comments\nfrom (\n  select 'htop_commenters,' || coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    t.dup_actor_login as actor,\n    t.id\n  from\n    gha_repos r,\n    gha_comments t\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = t.event_id\n  where\n    {{period:t.created_at}}\n    and t.dup_repo_id = r.id\n    and (lower(t.dup_actor_login) {{exclude_bots}})\n  ) sub\nwhere\n  sub.repo_group is not null\ngroup by\n  sub.actor,\n  sub.repo_group\nhaving\n  count(distinct sub.id) >= 1\nunion select 'htop_commenters,All' as repo_group,\n  dup_actor_login as actor,\n  count(distinct id) as comments\nfrom\n  gha_comments\nwhere\n  {{period:created_at}}\n  and (lower(dup_actor_login) {{exclude_bots}})\ngroup by\n  dup_actor_login\nhaving\n  count(distinct id) >= 1\norder by\n  comments desc,\n  repo_group asc,\n  actor asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/hist_pr_authors.sql",
    "content": "select\n  sub.repo_group,\n  sub.actor,\n  count(distinct sub.id) as prs\nfrom (\n  select 'hpr_auth,' || coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    pr.dup_actor_login as actor,\n    pr.id\n  from\n    gha_repos r,\n    gha_pull_requests pr\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = pr.event_id\n  where\n    {{period:pr.created_at}}\n    and pr.dup_repo_id = r.id\n    and (lower(pr.dup_actor_login) {{exclude_bots}})\n  ) sub\nwhere\n  sub.repo_group is not null\ngroup by\n  sub.repo_group,\n  sub.actor\nhaving\n  count(distinct sub.id) >= 1\nunion select 'hpr_auth,All' as repo_group,\n  dup_actor_login as actor,\n  count(distinct id) as prs\nfrom\n  gha_pull_requests\nwhere\n  {{period:created_at}}\n  and (lower(dup_actor_login) {{exclude_bots}})\ngroup by\n  dup_actor_login\nhaving\n  count(distinct id) >= 1\norder by\n  prs desc,\n  repo_group asc,\n  actor asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/hist_pr_companies.sql",
    "content": "select\n  sub.repo_group,\n  sub.company,\n  count(distinct sub.id) as prs\nfrom (\n  select 'hpr_comps,' || coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    a.company_name as company,\n    pr.id\n  from\n    gha_repos r,\n    gha_actors_affiliations a,\n    gha_pull_requests pr\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = pr.event_id\n  where\n    pr.dup_actor_id = a.actor_id\n    and a.dt_from <= pr.created_at\n    and a.dt_to > pr.created_at\n    and {{period:pr.created_at}}\n    and pr.dup_repo_id = r.id\n    and (lower(pr.dup_actor_login) {{exclude_bots}})\n    and a.company_name != ''\n  ) sub\nwhere\n  sub.repo_group is not null\ngroup by\n  sub.repo_group,\n  sub.company\nhaving\n  count(distinct sub.id) >= 1\nunion select 'hpr_comps,All' as repo_group,\n  a.company_name as company,\n  count(distinct pr.id) as prs\nfrom\n  gha_pull_requests pr,\n  gha_actors_affiliations a\nwhere\n  pr.dup_actor_id = a.actor_id\n  and a.dt_from <= pr.created_at\n  and a.dt_to > pr.created_at\n  and {{period:pr.created_at}}\n  and (lower(pr.dup_actor_login) {{exclude_bots}})\n  and a.company_name != ''\ngroup by\n  a.company_name\nhaving\n  count(distinct pr.id) >= 1\norder by\n  prs desc,\n  repo_group asc,\n  company asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/issues_age.sql",
    "content": "with issues as (\n  select i.id,\n    r.repo_group,\n    i.created_at,\n    i.closed_at as closed_at\n  from\n    gha_repos r,\n    gha_issues i\n  where\n    i.is_pull_request = false\n    and i.closed_at is not null\n    and r.name = i.dup_repo_name\n    and i.created_at >= '{{from}}'\n    and i.created_at < '{{to}}'\n    and i.event_id = (\n      select n.event_id from gha_issues n where n.id = i.id order by n.updated_at desc limit 1\n    )\n), labels as (\n  select distinct issue_id,\n    dup_label_name as name\n  from\n    gha_issues_labels\n  where\n    dup_created_at >= '{{from}}'\n    and dup_created_at < '{{to}}'\n    and dup_label_name like 'priority/%'\n    and issue_id in (\n      select id from issues\n    )\n), tdiffs as (\n  select id, repo_group, extract(epoch from closed_at - created_at) / 3600 as age\n  from\n    issues\n)\nselect\n  'iage;All_All;n,m' as name,\n  round(count(distinct t.id) / {{n}}, 2) as num,\n  percentile_disc(0.5) within group (order by t.age asc) as age_median\nfrom\n  tdiffs t\nunion select 'iage;' || t.repo_group || '_All;n,m' as name,\n  round(count(distinct t.id) / {{n}}, 2) as num,\n  percentile_disc(0.5) within group (order by t.age asc) as age_median\nfrom\n  tdiffs t\nwhere\n  t.repo_group is not null\ngroup by\n  t.repo_group\nunion select 'iage;All_' || substring(prio.name from 10) || ';n,m' as name,\n  round(count(distinct t.id) / {{n}}, 2) as num,\n  percentile_disc(0.5) within group (order by t.age asc) as age_median\nfrom\n  tdiffs t,\n  labels prio\nwhere\n  prio.issue_id = t.id\n  and prio.name like 'priority/%'\ngroup by\n  prio.name\nunion select 'iage;' || t.repo_group || '_' || substring(prio.name from 10) || ';n,m' as name,\n  round(count(distinct t.id) / {{n}}, 2) as num,\n  percentile_disc(0.5) within group (order by t.age asc) as age_median\nfrom\n  tdiffs t,\n  labels prio\nwhere\n  t.repo_group is not null\n  and prio.issue_id = t.id\n  and prio.name like 'priority/%'\ngroup by\n  t.repo_group,\n  prio.name\norder by\n  age_median asc,\n  name asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/issues_closed.sql",
    "content": "select\n  'iclosed,All' as name,\n  round(count(distinct id) / {{n}}, 2) as cnt\nfrom\n  gha_issues\nwhere\n  closed_at >= '{{from}}'\n  and closed_at < '{{to}}'\nunion select 'iclosed,' || r.repo_group as name,\n  round(count(distinct i.id) / {{n}}, 2) as cnt\nfrom\n  gha_issues i,\n  gha_repos r\nwhere\n  i.dup_repo_id = r.id\n  and r.repo_group is not null\n  and i.closed_at >= '{{from}}'\n  and i.closed_at < '{{to}}'\ngroup by\n  r.repo_group\norder by\n  cnt desc,\n  name asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/issues_opened.sql",
    "content": "select\n  'iopened,All' as name,\n  round(count(distinct id) / {{n}}, 2) as cnt\nfrom\n  gha_issues\nwhere\n  created_at >= '{{from}}'\n  and created_at < '{{to}}'\nunion select 'iopened,' || r.repo_group as name,\n  round(count(distinct i.id) / {{n}}, 2) as cnt\nfrom\n  gha_issues i,\n  gha_repos r\nwhere\n  i.dup_repo_id = r.id\n  and r.repo_group is not null\n  and i.created_at >= '{{from}}'\n  and i.created_at < '{{to}}'\ngroup by\n  r.repo_group\norder by\n  cnt desc,\n  name asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/labels_priorities_tags_with_all.sql",
    "content": "select\n  sub.prio\nfrom (\n  select sel.prio as prio,\n    count(distinct issue_id) as cnt\n  from (\n    select distinct issue_id,\n      substring(dup_label_name from '(?i)priority/(.*)') as prio\n    from\n      gha_issues_labels\n    ) sel\n  where\n    sel.prio is not null\n  group by\n    prio\n  order by\n    cnt desc,\n    prio asc\n  limit {{lim}}\n) sub\nunion select 'All'\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/metrics.yaml",
    "content": "---\nmetrics:\n  - name: User reviews\n    series_name_or_func: multi_row_single_column\n    sql: reviews_per_user\n    periods: d,w,m,q,y\n    aggregate: 1,7\n    skip: w7,m7,q7,y7\n    multi_value: true\n    merge_series: user_reviews\n  - name: Activity repo groups\n    series_name_or_func: multi_row_single_column\n    sql: activity_repo_groups\n    periods: h,d,w,m,q,y\n    aggregate: 1,7,24\n    skip: h7,w7,m7,q7,y7,d24,w24,m24,q24,y24\n    multi_value: true\n  - name: Commits repo groups\n    series_name_or_func: multi_row_single_column\n    sql: commits_repo_groups\n    periods: h,d,w,m,q,y\n    aggregate: 1,7,24\n    skip: h7,w7,m7,q7,y7,d24,w24,m24,q24,y24\n    multi_value: true\n  - name: GitHub events\n    series_name_or_func: multi_row_single_column\n    sql: event_types\n    periods: h,d,w,m,q,y\n    aggregate: 1,7,24\n    skip: h7,w7,m7,q7,y7,d24,w24,m24,q24,y24\n    multi_value: true\n  - name: All PRs merged\n    series_name_or_func: all_prs_merged\n    sql: all_prs_merged\n    periods: h,d,w,m,q,y\n    aggregate: 1,7,24\n    skip: h7,w7,m7,q7,y7,d24,w24,m24,q24,y24\n  - name: Opened to merged\n    series_name_or_func: multi_row_multi_column\n    sql: opened_to_merged\n    periods: d,w,m,q,y\n    aggregate: 1,7\n    skip: d,w7,m7,q7,y7\n    desc: time_diff_as_string\n    merge_series: opened_to_merged\n  - name: Time metrics\n    series_name_or_func: multi_row_multi_column\n    sql: time_metrics\n    periods: d,w,m,q,y\n    aggregate: 1,7\n    skip: w7,m7,q7,y7\n    desc: time_diff_as_string\n    merge_series: time_metrics\n  - name: First non-author activity\n    series_name_or_func: multi_row_multi_column\n    sql: first_non_author_activity\n    periods: d,w,m,q,y\n    aggregate: 1,7\n    skip: d,w7,m7,q7,y7\n    desc: time_diff_as_string\n    merge_series: first_non_author\n  - name: PRs age\n    series_name_or_func: multi_row_multi_column\n    sql: prs_age\n    periods: d,w,m,q,y\n    aggregate: 1,7\n    skip: w7,m7,q7,y7\n    desc: time_diff_as_string\n    merge_series: prs_age\n  - name: Issues age\n    series_name_or_func: multi_row_multi_column\n    sql: issues_age\n    periods: d,w,m,q,y\n    aggregate: 1,7\n    skip: w7,m7,q7,y7\n    desc: time_diff_as_string\n    merge_series: issues_age\n  - name: PR comments\n    series_name_or_func: single_row_multi_column\n    sql: pr_comments\n    periods: d,w,m,q,y\n    aggregate: 1,7\n    skip: w7,m7,q7,y7\n  - name: Community stats\n    series_name_or_func: multi_row_multi_column\n    sql: watchers\n    periods: d,w,m,q,y\n    aggregate: 1,7\n    skip: w7,m7,q7,y7\n    merge_series: watchers\n  - name: Issues repository group\n    series_name_or_func: multi_row_single_column\n    sql: issues_opened\n    periods: d,w,m,q,y\n    aggregate: 1,7\n    skip: w7,m7,q7,y7\n    multi_value: true\n    escape_value_name: true\n  - name: Issues repository group\n    series_name_or_func: multi_row_single_column\n    sql: issues_closed\n    periods: d,w,m,q,y\n    aggregate: 1,7\n    skip: w7,m7,q7,y7\n    multi_value: true\n    escape_value_name: true\n  - name: Top commenters\n    histogram: true\n    annotations_ranges: true\n    series_name_or_func: multi_row_single_column\n    sql: hist_commenters\n    merge_series: htop_commenters\n  - name: PRs authors histogram\n    histogram: true\n    annotations_ranges: true\n    series_name_or_func: multi_row_single_column\n    sql: hist_pr_authors\n    merge_series: hpr_auth\n  - name: PRs authors companies histogram\n    histogram: true\n    annotations_ranges: true\n    series_name_or_func: multi_row_single_column\n    sql: hist_pr_companies\n    merge_series: hpr_comps\n  - name: Project statistics\n    histogram: true\n    annotations_ranges: true\n    series_name_or_func: multi_row_single_column\n    sql: project_stats\n    merge_series: pstat\n  - name: Companies summary\n    sql: project_company_stats\n    series_name_or_func: multi_row_single_column\n    histogram: true\n    annotations_ranges: true\n    merge_series: hcom\n  - name: Developer summary\n    sql: project_developer_stats\n    series_name_or_func: multi_row_single_column\n    histogram: true\n    annotations_ranges: true\n    merge_series: hdev\n  - name: Repository comments\n    series_name_or_func: multi_row_single_column\n    sql: repo_comments\n    periods: d,w,m,q,y\n    aggregate: 1,7\n    skip: w7,m7,q7,y7\n    merge_series: rcomments\n  - name: Repository commenters\n    series_name_or_func: multi_row_single_column\n    sql: repo_commenters\n    periods: d,w,m,q,y\n    aggregate: 1,7\n    skip: w7,m7,q7,y7\n    merge_series: rcommenters\n  - name: New PRs\n    series_name_or_func: multi_row_single_column\n    sql: new_prs\n    periods: d,w,m,q,y\n    aggregate: 1,7\n    skip: w7,m7,q7,y7\n    merge_series: new_prs\n  - name: PRs authors\n    series_name_or_func: multi_row_single_column\n    sql: prs_authors\n    periods: d,w,m,q,y\n    aggregate: 1,7\n    skip: w7,m7,q7,y7\n    merge_series: pr_auth\n  - name: PRs merged repository groups\n    series_name_or_func: multi_row_single_column\n    sql: prs_merged_groups\n    periods: d,w,m,q,y\n    aggregate: 1,7\n    skip: w7,m7,q7,y7\n    multi_value: true\n  - name: PRs approval\n    series_name_or_func: multi_row_multi_column\n    sql: prs_state\n    periods: d,w,m,q,y\n    aggregate: 1,7\n    skip: d,w7,m7,q7,y7\n    multi_value: true\n    escape_value_name: true\n  - name: Companies stats\n    series_name_or_func: multi_row_multi_column\n    sql: company_activity\n    periods: d,w,m,q,y\n    aggregate: 1,7\n    skip: w7,m7,q7,y7\n    multi_value: true\n    merge_series: company_activity\n  - name: Companies stats\n    series_name_or_func: multi_row_multi_column\n    sql: company_activity_commits\n    periods: d,w,m,q,y\n    aggregate: 1,7\n    skip: w7,m7,q7,y7\n    multi_value: true\n    merge_series: company_activity\n  - name: Number of companies and developers contributing\n    series_name_or_func: multi_row_multi_column\n    sql: num_stats\n    periods: d,w,m,q\n    aggregate: 1,7,28\n    skip: d,w7,m7,q7,w28,m28,q28\n    merge_series: num_stats\n  - name: New and episodic PR contributors\n    series_name_or_func: multi_row_multi_column\n    sql: new_contributors\n    periods: d,w,m,q,y\n    aggregate: 1,28\n    skip: d,w28,m28,q28,y28\n    merge_series: new_contributors\n  - name: New and episodic PR contributors\n    series_name_or_func: multi_row_multi_column\n    sql: episodic_contributors\n    periods: d,w,m,q,y\n    aggregate: 1,28\n    skip: d,w28,m28,q28,y28\n    merge_series: episodic_contributors\n  - name: New and episodic issue creators\n    series_name_or_func: multi_row_multi_column\n    sql: new_issues\n    periods: d,w,m,q,y\n    aggregate: 1,28\n    skip: d,w28,m28,q28,y28\n    merge_series: new_issues\n  - name: New and episodic issue creators\n    series_name_or_func: multi_row_multi_column\n    sql: episodic_issues\n    periods: d,w,m,q,y\n    aggregate: 1,28\n    skip: d,w28,m28,q28,y28\n    merge_series: episodic_issues\n  - name: Users stats\n    series_name_or_func: multi_row_multi_column\n    sql: user_activity\n    periods: h,d,w,m,q,y\n    aggregate: 1,7,24\n    skip: h7,w7,m7,q7,y7,d24,w24,m24,q24,y24\n    multi_value: true\n    merge_series: user_activity\n  - name: Users stats\n    series_name_or_func: multi_row_multi_column\n    sql: user_activity_commits\n    periods: h,d,w,m,q,y\n    aggregate: 1,7,24\n    skip: h7,w7,m7,q7,y7,d24,w24,m24,q24,y24\n    multi_value: true\n    merge_series: user_activity\n  - name: Gender stats\n    series_name_or_func: multi_row_multi_column\n    sql: gender\n    periods: w,m,q,y\n    multi_value: true\n    merge_series: sex\n  - name: Gender stats cumulative\n    series_name_or_func: multi_row_multi_column\n    sql: gender_cum\n    periods: m\n    multi_value: true\n    merge_series: sexcum\n  - name: Countries stats\n    series_name_or_func: multi_row_multi_column\n    sql: countries\n    periods: w,m,q,y\n    multi_value: true\n    merge_series: countries\n  - name: Countries stats cumulative\n    series_name_or_func: multi_row_multi_column\n    sql: countries_cum\n    periods: m\n    multi_value: true\n    merge_series: countriescum\n  - name: Gender stats (committers)\n    series_name_or_func: multi_row_multi_column\n    sql: committers_gender\n    periods: w,m,q,y\n    multi_value: true\n    merge_series: sex\n  - name: Gender stats cumulative (committers)\n    series_name_or_func: multi_row_multi_column\n    sql: committers_gender_cum\n    periods: m\n    multi_value: true\n    merge_series: sexcum\n  - name: Countries stats (committers)\n    series_name_or_func: multi_row_multi_column\n    sql: committers_countries\n    periods: w,m,q,y\n    multi_value: true\n    merge_series: countries\n  - name: Countries stats cumulative (committers)\n    series_name_or_func: multi_row_multi_column\n    sql: committers_countries_cum\n    periods: m\n    multi_value: true\n    merge_series: countriescum\n  - name: Timezone stats\n    series_name_or_func: multi_row_multi_column\n    sql: tz\n    periods: h,d,w,m,q,y\n    aggregate: 1,7\n    skip: h7,w7,m7,q7,y7\n    multi_value: true\n    merge_series: tz\n  - name: Timezone stats (committers)\n    series_name_or_func: multi_row_multi_column\n    sql: committers_tz\n    periods: h,d,w,m,q,y\n    aggregate: 1,7\n    skip: h7,w7,m7,q7,y7\n    multi_value: true\n    merge_series: tz\n  - name: New contributors table\n    series_name_or_func: multi_row_single_column\n    sql: new_contributors_data\n    custom_data: true\n    merge_series: new_contributors_data\n    periods: h\n  - name: Company PRs in repository groups\n    sql: company_prs\n    series_name_or_func: company_prs\n    histogram: true\n    annotations_ranges: true\n  - name: GitHub activity\n    series_name_or_func: events_h\n    sql: events\n    periods: h\n"
  },
  {
    "path": "devstats/config/metrics/shared/metrics_affs.yaml",
    "content": "---\nmetrics:\n  - name: Companies stats & velocity\n    series_name_or_func: multi_row_multi_column\n    sql: company_activity\n    periods: d,w,m,q,y\n    aggregate: 1,7\n    skip: w7,m7,q7,y7\n    multi_value: true\n    merge_series: company_activity\n  - name: Companies stats\n    series_name_or_func: multi_row_multi_column\n    sql: company_activity_commits\n    periods: d,w,m,q,y\n    aggregate: 1,7\n    skip: w7,m7,q7,y7\n    multi_value: true\n    merge_series: company_activity\n  - name: PRs authors companies histogram\n    histogram: true\n    annotations_ranges: true\n    series_name_or_func: multi_row_single_column\n    sql: hist_pr_companies\n    merge_series: hpr_comps\n  - name: Number of companies and developers contributing\n    series_name_or_func: multi_row_multi_column\n    sql: num_stats\n    periods: d,w,m,q\n    aggregate: 1,7,28\n    skip: d,w7,m7,q7,w28,m28,q28\n    merge_series: num_stats\n  - name: Company summaries\n    sql: project_company_stats\n    series_name_or_func: multi_row_single_column\n    histogram: true\n    annotations_ranges: true\n    merge_series: hcom\n  - name: Gender stats\n    series_name_or_func: multi_row_multi_column\n    sql: gender\n    periods: w,m,q,y\n    multi_value: true\n    merge_series: sex\n  - name: Gender stats cumulative\n    series_name_or_func: multi_row_multi_column\n    sql: gender_cum\n    periods: m\n    multi_value: true\n    merge_series: sexcum\n  - name: Countries stats\n    series_name_or_func: multi_row_multi_column\n    sql: countries\n    periods: w,m,q,y\n    multi_value: true\n    merge_series: countries\n  - name: Countries stats cumulative\n    series_name_or_func: multi_row_multi_column\n    sql: countries_cum\n    periods: m\n    multi_value: true\n    merge_series: countriescum\n  - name: Gender stats (committers)\n    series_name_or_func: multi_row_multi_column\n    sql: committers_gender\n    periods: w,m,q,y\n    multi_value: true\n    merge_series: sex\n  - name: Gender stats cumulative (committers)\n    series_name_or_func: multi_row_multi_column\n    sql: committers_gender_cum\n    periods: m\n    multi_value: true\n    merge_series: sexcum\n  - name: Countries stats (committers)\n    series_name_or_func: multi_row_multi_column\n    sql: committers_countries\n    periods: w,m,q,y\n    multi_value: true\n    merge_series: countries\n  - name: Countries stats cumulative (committers)\n    series_name_or_func: multi_row_multi_column\n    sql: committers_countries_cum\n    periods: m\n    multi_value: true\n    merge_series: countriescum\n  - name: Timezone stats\n    series_name_or_func: multi_row_multi_column\n    sql: tz\n    periods: h,d,w,m,q,y\n    aggregate: 1,7\n    skip: h7,w7,m7,q7,y7\n    multi_value: true\n    merge_series: tz\n  - name: Timezone stats (committers)\n    series_name_or_func: multi_row_multi_column\n    sql: committers_tz\n    periods: h,d,w,m,q,y\n    aggregate: 1,7\n    skip: h7,w7,m7,q7,y7\n    multi_value: true\n    merge_series: tz\n  - name: Company PRs in repository groups\n    sql: company_prs\n    series_name_or_func: company_prs\n    histogram: true\n    annotations_ranges: true\n"
  },
  {
    "path": "devstats/config/metrics/shared/new_contributors.sql",
    "content": "with prev as (\n  select distinct user_id\n  from\n    gha_pull_requests\n  where\n    created_at < '{{from}}'\n)\nselect\n  'new_contrib;All;contrib,prs' as name,\n  round(count(distinct user_id) / {{n}}, 2) as contributors,\n  round(count(distinct id) / {{n}}, 2) as prs\nfrom\n  gha_pull_requests\nwhere\n  created_at >= '{{from}}'\n  and created_at < '{{to}}'\n  and user_id not in (select user_id from prev)\nunion select sub.name,\n  round(count(distinct sub.user_id) / {{n}}, 2) as contributors,\n  round(count(distinct sub.id) / {{n}}, 2) as prs\nfrom (\n    select 'new_contrib;' || coalesce(ecf.repo_group, r.repo_group) || ';contrib,prs' as name,\n    pr.user_id,\n    pr.id\n  from\n    gha_repos r,\n    gha_pull_requests pr\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = pr.event_id\n  where\n    pr.dup_repo_id = r.id\n    and pr.created_at >= '{{from}}'\n    and pr.created_at < '{{to}}'\n    and pr.user_id not in (select user_id from prev)\n  ) sub\nwhere\n  sub.name is not null\ngroup by\n  sub.name\norder by\n  prs desc,\n  name asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/new_contributors_data.sql",
    "content": "with prev as (\n  select distinct user_id\n  from\n    gha_pull_requests\n  where\n    merged = true\n    and merged_at < '{{from}}'\n    and (lower(dup_actor_login) {{exclude_bots}})\n), contributors as (\n  select distinct pr.user_id,\n    first_value(pr.merged_at) over prs_by_merged_at as merged_at,\n    first_value(pr.dup_repo_id) over prs_by_merged_at as repo_id,\n    first_value(pr.dup_repo_name) over prs_by_merged_at as repo_name,\n    first_value(pr.event_id) over prs_by_merged_at as event_id\n  from\n    gha_pull_requests pr\n  where\n    pr.merged = true\n    and pr.merged_at >= '{{from}}'\n    and pr.merged_at < '{{to}}'\n    and pr.user_id not in (select user_id from prev)\n    and (lower(pr.dup_actor_login) {{exclude_bots}})\n  window\n    prs_by_merged_at as (\n      partition by pr.user_id\n      order by\n        pr.merged_at asc,\n        pr.event_id asc\n      range between unbounded preceding\n      and current row\n    )\n)\nselect\n  'ncd,All' as metric,\n  c.merged_at,\n  0.0 as value,\n  case a.name is null when true then a.login else case a.name when '' then a.login else a.name || ' (' || a.login || ')' end end as contributor\nfrom\n  contributors c,\n  gha_actors a\nwhere\n  c.user_id = a.id\nunion select 'ncd,' || coalesce(ecf.repo_group, r.repo_group) as metric,\n  c.merged_at,\n  0.0 as value,\n  case a.name is null when true then a.login else case a.name when '' then a.login else a.name || ' (' || a.login || ')' end end as contributor\nfrom\n  gha_actors a,\n  gha_repos r,\n  contributors c\nleft join\n  gha_events_commits_files ecf\non\n  ecf.event_id = c.event_id\nwhere\n  c.user_id = a.id\n  and c.repo_id = r.id\n  and c.repo_name = r.name\n  and r.repo_group is not null\norder by\n  metric asc,\n  merged_at asc,\n  contributor asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/new_issues.sql",
    "content": "with prev as (\n  select distinct user_id\n  from\n    gha_issues\n  where\n    created_at < '{{from}}'\n    and is_pull_request = false\n)\nselect\n  'new_iss;All;contrib,iss' as name,\n  round(count(distinct user_id) / {{n}}, 2) as contributors,\n  round(count(distinct id) / {{n}}, 2) as issues\nfrom\n  gha_issues\nwhere\n  is_pull_request = false\n  and created_at >= '{{from}}'\n  and created_at < '{{to}}'\n  and user_id not in (select user_id from prev)\nunion select sub.name,\n  round(count(distinct sub.user_id) / {{n}}, 2) as contributors,\n  round(count(distinct sub.id) / {{n}}, 2) as issues\nfrom (\n    select 'new_iss;' || coalesce(ecf.repo_group, r.repo_group) || ';contrib,iss' as name,\n    i.user_id,\n    i.id\n  from\n    gha_repos r,\n    gha_issues i\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = i.event_id\n  where\n    i.dup_repo_id = r.id\n    and i.is_pull_request = false\n    and i.created_at >= '{{from}}'\n    and i.created_at < '{{to}}'\n    and i.user_id not in (select user_id from prev)\n  ) sub\nwhere\n  sub.name is not null\ngroup by\n  sub.name\norder by\n  issues desc,\n  name asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/new_prs.sql",
    "content": "select\n  'new_prs,All' as repo_group,\n  round(count(distinct id) / {{n}}, 2) as new\nfrom\n  gha_pull_requests\nwhere\n  created_at >= '{{from}}'\n  and created_at < '{{to}}'\nunion select 'new_prs,' || r.repo_group as repo_group,\n  round(count(distinct pr.id) / {{n}}, 2) as new\nfrom\n  gha_pull_requests pr,\n  gha_repos r\nwhere\n  pr.dup_repo_id = r.id\n  and r.repo_group is not null\n  and pr.created_at >= '{{from}}'\n  and pr.created_at < '{{to}}'\ngroup by\n  r.repo_group\norder by\n  new desc,\n  repo_group asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/num_stats.sql",
    "content": "select\n  'nstats;All;comps,devs,unks' as name,\n  count(distinct affs.company_name) as n_companies,\n  count(distinct ev.actor_id) as n_authors,\n  count(distinct ev.actor_id) filter (where affs.company_name is null) as n_unknown_authors\nfrom\n  gha_events ev\nleft join\n  gha_actors_affiliations affs\non\n  ev.actor_id = affs.actor_id\n  and affs.dt_from <= ev.created_at\n  and affs.dt_to > ev.created_at\n  and affs.company_name != ''\nwhere\n  ev.created_at >= '{{from}}'\n  and ev.created_at < '{{to}}'\n  and ev.type in (\n    'PullRequestReviewCommentEvent', 'PushEvent', 'PullRequestEvent',\n    'IssuesEvent', 'IssueCommentEvent', 'CommitCommentEvent'\n  )\nunion select 'nstats;' || r.repo_group || ';comps,devs,unks' as name,\n  count(distinct affs.company_name) as n_companies,\n  count(distinct ev.actor_id) as n_authors,\n  count(distinct ev.actor_id) filter (where affs.company_name is null) as n_unknown_authors\nfrom\n  gha_repos r,\n  gha_events ev\nleft join\n  gha_actors_affiliations affs\non\n  ev.actor_id = affs.actor_id\n  and affs.dt_from <= ev.created_at\n  and affs.dt_to > ev.created_at\n  and affs.company_name != ''\nwhere\n  r.name = ev.dup_repo_name\n  and r.repo_group is not null\n  and ev.created_at >= '{{from}}'\n  and ev.created_at < '{{to}}'\n  and ev.type in (\n    'PullRequestReviewCommentEvent', 'PushEvent', 'PullRequestEvent',\n    'IssuesEvent', 'IssueCommentEvent', 'CommitCommentEvent'\n    'PushEvent'\n  )\ngroup by\n  r.repo_group\norder by\n  n_companies desc,\n  n_authors desc,\n  name asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/opened_to_merged.sql",
    "content": "with prs as (\n  select pr.created_at, pr.merged_at\n  from\n    gha_pull_requests pr\n  where\n    pr.merged_at is not null\n    and pr.created_at >= '{{from}}'\n    and pr.created_at < '{{to}}'\n    and pr.event_id = (\n      select i.event_id from gha_pull_requests i where i.id = pr.id order by i.updated_at desc limit 1\n    )\n), prs_groups as (\n  select r.repo_group,\n    pr.created_at,\n    pr.merged_at as merged_at\n  from\n    gha_pull_requests pr,\n    gha_repos r\n  where\n    r.id = pr.dup_repo_id\n    and r.repo_group is not null\n    and pr.merged_at is not null\n    and pr.created_at >= '{{from}}'\n    and pr.created_at < '{{to}}'\n    and pr.event_id = (\n      select i.event_id from gha_pull_requests i where i.id = pr.id order by i.updated_at desc limit 1\n    )\n), tdiffs as (\n  select extract(epoch from merged_at - created_at) / 3600 as open_to_merge\n  from\n    prs\n), tdiffs_groups as (\n  select repo_group, extract(epoch from merged_at - created_at) / 3600 as open_to_merge\n  from\n    prs_groups\n)\nselect\n  'open2merge;All;p15,med,p85' as name,\n  percentile_disc(0.15) within group (order by open_to_merge asc) as open_to_merge_15_percentile,\n  percentile_disc(0.5) within group (order by open_to_merge asc) as open_to_merge_median,\n  percentile_disc(0.85) within group (order by open_to_merge asc) as open_to_merge_85_percentile\nfrom\n  tdiffs\nunion select 'open2merge;' || repo_group || ';p15,med,p85' as name,\n  percentile_disc(0.15) within group (order by open_to_merge asc) as open_to_merge_15_percentile,\n  percentile_disc(0.5) within group (order by open_to_merge asc) as open_to_merge_median,\n  percentile_disc(0.85) within group (order by open_to_merge asc) as open_to_merge_85_percentile\nfrom\n  tdiffs_groups\ngroup by\n  repo_group\norder by\n  open_to_merge_median desc,\n  name asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/pr_comments.sql",
    "content": "with pr_comments as (\n  select pl.pull_request_id as pr,\n    count(distinct pl.comment_id) as cnt\n  from\n    gha_payloads pl,\n    gha_pull_requests pr\n  where\n    pl.pull_request_id = pr.id\n    and pl.comment_id is not null\n    and pr.created_at >= '{{from}}'\n    and pr.created_at < '{{to}}'\n    and (lower(pr.dup_actor_login) {{exclude_bots}})\n  group by\n    pl.pull_request_id\n)\nselect\n  'pr_comms_med,pr_comms_p85,pr_comms_p95' as name,\n  percentile_disc(0.5) within group (order by cnt asc) as median,\n  percentile_disc(0.85) within group (order by cnt asc) as perentile_85,\n  percentile_disc(0.95) within group (order by cnt asc) as perentile_95\nfrom\n  pr_comments\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/project_company_stats.sql",
    "content": "with company_commits_data as (\n  select c.dup_repo_id as repo_id,\n    c.sha,\n    c.dup_actor_id as actor_id,\n    af.company_name as company\n  from\n    gha_commits c,\n    gha_actors_affiliations af\n  where\n    c.dup_actor_id = af.actor_id\n    and af.dt_from <= c.dup_created_at\n    and af.dt_to > c.dup_created_at\n    and {{period:c.dup_created_at}}\n    and (lower(c.dup_actor_login) {{exclude_bots}})\n    and af.company_name != ''\n  union select c.dup_repo_id as repo_id,\n    c.sha,\n    c.author_id as actor_id,\n    af.company_name as company\n  from\n    gha_commits c,\n    gha_actors_affiliations af\n  where\n    c.author_id is not null\n    and c.author_id = af.actor_id\n    and af.dt_from <= c.dup_created_at\n    and af.dt_to > c.dup_created_at\n    and {{period:c.dup_created_at}}\n    and (lower(c.dup_author_login) {{exclude_bots}})\n    and af.company_name != ''\n  union select c.dup_repo_id as repo_id,\n    c.sha,\n    c.committer_id as actor_id,\n    af.company_name as company\n  from\n    gha_commits c,\n    gha_actors_affiliations af\n  where\n    c.committer_id is not null\n    and c.committer_id = af.actor_id\n    and af.dt_from <= c.dup_created_at\n    and af.dt_to > c.dup_created_at\n    and {{period:c.dup_created_at}}\n    and (lower(c.dup_committer_login) {{exclude_bots}})\n    and af.company_name != ''\n), commits_data as (\n  select c.dup_repo_id as repo_id,\n    c.sha,\n    c.dup_actor_id as actor_id\n  from\n    gha_commits c\n  where\n    {{period:c.dup_created_at}}\n    and (lower(c.dup_actor_login) {{exclude_bots}})\n  union select c.dup_repo_id as repo_id,\n    c.sha,\n    c.author_id as actor_id\n  from\n    gha_commits c\n  where\n    c.author_id is not null\n    and {{period:c.dup_created_at}}\n    and (lower(c.dup_author_login) {{exclude_bots}})\n  union select c.dup_repo_id as repo_id,\n    c.sha,\n    c.committer_id as actor_id\n  from\n    gha_commits c\n  where\n    c.committer_id is not null\n    and {{period:c.dup_created_at}}\n    and (lower(c.dup_committer_login) {{exclude_bots}})\n)\nselect \n  'hcom,' || sub.metric as metric,\n  sub.company as name,\n  sub.value as value\nfrom (\n  select 'Commits' as metric,\n    company,\n    count(distinct sha) as value\n  from\n    company_commits_data\n  group by\n    company\n  union select 'Committers' as metric,\n    company,\n    count(distinct actor_id) as value\n  from\n    company_commits_data\n  group by\n    company\n  union select case e.type\n      when 'IssuesEvent' then 'Issue creators'\n      when 'PullRequestEvent' then 'PR creators'\n      when 'PushEvent' then 'Pushers'\n      when 'PullRequestReviewCommentEvent' then 'PR reviewers'\n      when 'IssueCommentEvent' then 'Issue commenters'\n      when 'CommitCommentEvent' then 'Commit commenters'\n      when 'WatchEvent' then 'Watchers'\n      when 'ForkEvent' then 'Forkers'\n    end as metric,\n    af.company_name as company,\n    count(distinct e.actor_id) as value\n  from\n    gha_events e,\n    gha_actors_affiliations af\n  where\n    e.actor_id = af.actor_id\n    and af.dt_from <= e.created_at\n    and af.dt_to > e.created_at\n    and e.type in (\n      'IssuesEvent', 'PullRequestEvent', 'PushEvent',\n      'PullRequestReviewCommentEvent', 'IssueCommentEvent',\n      'CommitCommentEvent', 'ForkEvent', 'WatchEvent'\n    )\n    and {{period:e.created_at}}\n    and (lower(e.dup_actor_login) {{exclude_bots}})\n    and af.company_name != ''\n  group by\n    e.type,\n    af.company_name\n  union select 'Contributors' as metric,\n    af.company_name as company,\n    count(distinct e.actor_id) as value\n  from\n    gha_events e,\n    gha_actors_affiliations af\n  where\n    e.actor_id = af.actor_id\n    and af.dt_from <= e.created_at\n    and af.dt_to > e.created_at\n    and e.type in (\n      'PushEvent', 'PullRequestEvent', 'IssuesEvent',\n      'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent'\n    )\n    and {{period:e.created_at}}\n    and (lower(e.dup_actor_login) {{exclude_bots}})\n    and af.company_name != ''\n  group by\n    af.company_name\n  union select 'Contributions' as metric,\n    af.company_name as company,\n    count(distinct e.id) as value\n  from\n    gha_events e,\n    gha_actors_affiliations af\n  where\n    e.actor_id = af.actor_id\n    and af.dt_from <= e.created_at\n    and af.dt_to > e.created_at\n    and e.type in (\n      'PushEvent', 'PullRequestEvent', 'IssuesEvent',\n      'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent'\n    )\n    and {{period:e.created_at}}\n    and (lower(e.dup_actor_login) {{exclude_bots}})\n    and af.company_name != ''\n  group by\n    af.company_name\n  union select 'Repositories' as metric,\n    af.company_name as company,\n    count(distinct e.repo_id) as value\n  from\n    gha_events e,\n    gha_actors_affiliations af\n  where\n    e.actor_id = af.actor_id\n    and af.dt_from <= e.created_at\n    and af.dt_to > e.created_at\n    and {{period:e.created_at}}\n    and (lower(e.dup_actor_login) {{exclude_bots}})\n    and af.company_name != ''\n  group by\n    af.company_name\n  union select 'Comments' as metric,\n    af.company_name as company,\n    count(distinct c.id) as value\n  from\n    gha_comments c,\n    gha_actors_affiliations af\n  where\n    c.user_id = af.actor_id\n    and af.dt_from <= c.created_at\n    and af.dt_to > c.created_at\n    and {{period:c.created_at}}\n    and (lower(c.dup_user_login) {{exclude_bots}})\n    and af.company_name != ''\n  group by\n    af.company_name\n  union select 'Commenters' as metric,\n    af.company_name as company,\n    count(distinct c.user_id) as value\n  from\n    gha_comments c,\n    gha_actors_affiliations af\n  where\n    c.user_id = af.actor_id\n    and af.dt_from <= c.created_at\n    and af.dt_to > c.created_at\n    and {{period:c.created_at}}\n    and (lower(c.dup_user_login) {{exclude_bots}})\n    and af.company_name != ''\n  group by\n    af.company_name\n  union select 'Issues' as metric,\n    af.company_name as company,\n    count(distinct i.id) as value\n  from\n    gha_issues i,\n    gha_actors_affiliations af\n  where\n    i.user_id = af.actor_id\n    and af.dt_from <= i.created_at\n    and af.dt_to > i.created_at\n    and {{period:i.created_at}}\n    and i.is_pull_request = false\n    and (lower(i.dup_user_login) {{exclude_bots}})\n    and af.company_name != ''\n  group by\n    af.company_name\n  union select 'PRs' as metric,\n    af.company_name as company,\n    count(distinct i.id) as value\n  from\n    gha_issues i,\n    gha_actors_affiliations af\n  where\n    i.user_id = af.actor_id\n    and af.dt_from <= i.created_at\n    and af.dt_to > i.created_at\n    and {{period:i.created_at}}\n    and i.is_pull_request = true\n    and (lower(i.dup_user_login) {{exclude_bots}})\n    and af.company_name != ''\n  group by\n    af.company_name\n  union select 'Events' as metric,\n    af.company_name as company,\n    count(e.id) as value\n  from\n    gha_events e,\n    gha_actors_affiliations af\n  where\n    e.actor_id = af.actor_id\n    and af.dt_from <= e.created_at\n    and af.dt_to > e.created_at\n    and {{period:e.created_at}}\n    and (lower(e.dup_actor_login) {{exclude_bots}})\n    and af.company_name != ''\n  group by\n    af.company_name\n  union select 'Commits' as metric,\n    'All',\n    count(distinct sha) as value\n  from\n    commits_data\n  union select 'Committers' as metric,\n    'All',\n    count(distinct actor_id) as value\n  from\n    commits_data\n  union select case e.type\n      when 'IssuesEvent' then 'Issue creators'\n      when 'PullRequestEvent' then 'PR creators'\n      when 'PushEvent' then 'Pushers'\n      when 'PullRequestReviewCommentEvent' then 'PR reviewers'\n      when 'IssueCommentEvent' then 'Issue commenters'\n      when 'CommitCommentEvent' then 'Commit commenters'\n      when 'WatchEvent' then 'Watchers'\n      when 'ForkEvent' then 'Forkers'\n    end as metric,\n    'All' as company,\n    count(distinct e.actor_id) as value\n  from\n    gha_events e\n  where\n    e.type in (\n      'IssuesEvent', 'PullRequestEvent', 'PushEvent',\n      'PullRequestReviewCommentEvent', 'IssueCommentEvent',\n      'CommitCommentEvent', 'ForkEvent', 'WatchEvent'\n    )\n    and {{period:e.created_at}}\n    and (lower(e.dup_actor_login) {{exclude_bots}})\n  group by\n    e.type\n  union select 'Contributors' as metric,\n    'All' as company,\n    count(distinct e.actor_id) as value\n  from\n    gha_events e\n  where\n    e.type in (\n      'PushEvent', 'PullRequestEvent', 'IssuesEvent',\n      'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent'\n    )\n    and {{period:e.created_at}}\n    and (lower(e.dup_actor_login) {{exclude_bots}})\n  union select 'Contributions' as metric,\n    'All' as company,\n    count(distinct e.id) as value\n  from\n    gha_events e\n  where\n    e.type in (\n      'PushEvent', 'PullRequestEvent', 'IssuesEvent',\n      'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent'\n    )\n    and {{period:e.created_at}}\n    and (lower(e.dup_actor_login) {{exclude_bots}})\n  union select 'Repositories' as metric,\n    'All' as company,\n    count(distinct e.repo_id) as value\n  from\n    gha_events e\n  where\n    {{period:e.created_at}}\n    and (lower(e.dup_actor_login) {{exclude_bots}})\n  union select 'Comments' as metric,\n    'All' as company,\n    count(distinct c.id) as value\n  from\n    gha_comments c\n  where\n    {{period:c.created_at}}\n    and (lower(c.dup_user_login) {{exclude_bots}})\n  union select 'Commenters' as metric,\n    'All' as company,\n    count(distinct c.user_id) as value\n  from\n    gha_comments c\n  where\n    {{period:c.created_at}}\n    and (lower(c.dup_user_login) {{exclude_bots}})\n  union select 'Issues' as metric,\n    'All' as company,\n    count(distinct i.id) as value\n  from\n    gha_issues i\n  where\n    {{period:i.created_at}}\n    and i.is_pull_request = false\n    and (lower(i.dup_user_login) {{exclude_bots}})\n  union select 'PRs' as metric,\n    'All' as company,\n    count(distinct i.id) as value\n  from\n    gha_issues i\n  where\n    {{period:i.created_at}}\n    and i.is_pull_request = true\n    and (lower(i.dup_user_login) {{exclude_bots}})\n  union select 'Events' as metric,\n    'All' as company,\n    count(e.id) as value\n  from\n    gha_events e\n  where\n    {{period:e.created_at}}\n    and (lower(e.dup_actor_login) {{exclude_bots}})\n  ) sub\nwhere\n  (sub.metric = 'Commenters' and sub.value >= 3)\n  or (sub.metric = 'Comments' and sub.value >= 5)\n  or (sub.metric = 'Events' and sub.value >= 10)\n  or (sub.metric = 'Forkers' and sub.value > 1)\n  or (sub.metric = 'Issue commenters' and sub.value > 1)\n  or (sub.metric = 'Issue creators' and sub.value > 1)\n  or (sub.metric = 'Issues' and sub.value > 1)\n  or (sub.metric = 'PR creators' and sub.value > 1)\n  or (sub.metric = 'PR reviewers' and sub.value > 1)\n  or (sub.metric = 'PRs' and sub.value > 1)\n  or (sub.metric = 'Repositories' and sub.value > 1)\n  or (sub.metric = 'Watchers' and sub.value > 2)\n  or (sub.metric in (\n    'Commit commenters',\n    'Commits',\n    'Committers',\n    'Pushers',\n    'Contributors',\n    'Contributions'\n    )\n  )\norder by\n  metric asc,\n  value desc,\n  name asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/project_developer_stats.sql",
    "content": "with commits_data as (\n  select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.dup_actor_id as actor_id,\n    c.dup_actor_login as actor_login\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and {{period:c.dup_created_at}}\n    and (lower(c.dup_actor_login) {{exclude_bots}})\n  union select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.author_id as actor_id,\n    c.dup_author_login as actor_login\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.author_id is not null\n    and {{period:c.dup_created_at}}\n    and (lower(c.dup_author_login) {{exclude_bots}})\n  union select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.committer_id as actor_id,\n    c.dup_committer_login as actor_login\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.committer_id is not null\n    and {{period:c.dup_created_at}}\n    and (lower(c.dup_committer_login) {{exclude_bots}})\n)\nselect \n  'hdev_' || sub.metric || ',All_All' as metric,\n  sub.author as name,\n  sub.value as value\nfrom (\n  select 'commits' as metric,\n    actor_login as author,\n    count(distinct sha) as value\n  from\n    commits_data\n  group by\n    actor_login\n  union select case type\n      when 'PushEvent' then 'pushes'\n      when 'PullRequestReviewCommentEvent' then 'review_comments'\n      when 'IssueCommentEvent' then 'issue_comments'\n      when 'CommitCommentEvent' then 'commit_comments'\n    end as metric,\n    dup_actor_login as author,\n    count(id) as value\n  from\n    gha_events\n  where\n    type in (\n      'PushEvent', 'PullRequestReviewCommentEvent',\n      'IssueCommentEvent', 'CommitCommentEvent'\n    )\n    and {{period:created_at}}\n    and (lower(dup_actor_login) {{exclude_bots}})\n  group by\n    type,\n    dup_actor_login\n  union select 'contributions' as metric,\n    dup_actor_login as author,\n    count(id) as value\n  from\n    gha_events\n  where\n    type in (\n      'PushEvent', 'PullRequestEvent', 'IssuesEvent',\n      'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent'\n    )\n    and {{period:created_at}}\n    and (lower(dup_actor_login) {{exclude_bots}})\n  group by\n    dup_actor_login\n  union select 'active_repos' as metric,\n    dup_actor_login as author,\n    count(distinct repo_id) as value\n  from\n    gha_events\n  where\n    {{period:created_at}}\n    and (lower(dup_actor_login) {{exclude_bots}})\n  group by\n    dup_actor_login\n  union select 'comments' as metric,\n    dup_user_login as author,\n    count(distinct id) as value\n  from\n    gha_comments\n  where\n    {{period:created_at}}\n    and (lower(dup_user_login) {{exclude_bots}})\n  group by\n    dup_user_login\n  union select 'issues' as metric,\n    dup_user_login as author,\n    count(distinct id) as value\n  from\n    gha_issues\n  where\n    {{period:created_at}}\n    and is_pull_request = false\n    and (lower(dup_user_login) {{exclude_bots}})\n  group by\n    dup_user_login\n  union select 'prs' as metric,\n    dup_user_login as author,\n    count(distinct id) as value\n  from\n    gha_issues\n  where\n    {{period:created_at}}\n    and is_pull_request = true\n    and (lower(dup_user_login) {{exclude_bots}})\n  group by\n    dup_user_login\n  union select 'events' as metric,\n    dup_actor_login as author,\n    count(id) as value\n  from\n    gha_events\n  where\n    {{period:created_at}}\n    and (lower(dup_actor_login) {{exclude_bots}})\n  group by\n    dup_actor_login\n  ) sub\nwhere\n  (sub.metric = 'events' and sub.value >= 100)\n  or (sub.metric = 'active_repos' and sub.value > 2)\n  or (sub.metric = 'contributions' and sub.value > 5)\n  or (sub.metric = 'commit_comments' and sub.value > 5)\n  or (sub.metric = 'comments' and sub.value > 10)\n  or (sub.metric = 'issue_comments' and sub.value > 5)\n  or (sub.metric = 'review_comments' and sub.value > 5)\n  or (sub.metric in (\n    'commits',\n    'pushes',\n    'issues',\n    'prs'\n  )\n)\nunion select 'hdev_' || sub.metric || ',' || sub.repo_group || '_All' as metric,\n  sub.author as name,\n  sub.value as value\nfrom (\n  select 'commits' as metric,\n    repo_group,\n    actor_login as author,\n    count(distinct sha) as value\n  from\n    commits_data\n  where\n    repo_group is not null\n  group by\n    repo_group,\n    actor_login\n  union select case sub.type\n      when 'PushEvent' then 'pushes'\n      when 'PullRequestReviewCommentEvent' then 'review_comments'\n      when 'IssueCommentEvent' then 'issue_comments'\n      when 'CommitCommentEvent' then 'commit_comments'\n    end as metric,\n    sub.repo_group,\n    sub.author,\n    count(distinct sub.id) as value\n  from (\n    select coalesce(ecf.repo_group, r.repo_group) as repo_group,\n      e.type,\n      e.dup_actor_login as author,\n      e.id\n    from\n      gha_repos r,\n      gha_events e\n    left join\n      gha_events_commits_files ecf\n    on\n      ecf.event_id = e.id\n    where\n      r.name = e.dup_repo_name\n      and e.type in (\n        'PushEvent', 'PullRequestReviewCommentEvent',\n        'IssueCommentEvent', 'CommitCommentEvent'\n      )\n      and {{period:e.created_at}}\n      and (lower(e.dup_actor_login) {{exclude_bots}})\n  ) sub\n  where\n    sub.repo_group is not null\n  group by\n    sub.repo_group,\n    sub.type,\n    sub.author\n  union select 'contributions' as metric,\n    sub.repo_group,\n    sub.author,\n    count(distinct sub.id) as value\n  from (\n    select coalesce(ecf.repo_group, r.repo_group) as repo_group,\n      e.dup_actor_login as author,\n      e.id\n    from\n      gha_repos r,\n      gha_events e\n    left join\n      gha_events_commits_files ecf\n    on\n      ecf.event_id = e.id\n    where\n      r.name = e.dup_repo_name\n      and e.type in (\n        'PushEvent', 'PullRequestEvent', 'IssuesEvent',\n        'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent'\n      )\n      and {{period:e.created_at}}\n      and (lower(e.dup_actor_login) {{exclude_bots}})\n  ) sub\n  where\n    sub.repo_group is not null\n  group by\n    sub.repo_group,\n    sub.author\n  union select 'active_repos' as metric,\n    sub.repo_group,\n    sub.author,\n    count(distinct sub.repo_id) as value\n  from (\n    select coalesce(ecf.repo_group, r.repo_group) as repo_group,\n      e.dup_actor_login as author,\n      e.repo_id\n    from\n      gha_repos r,\n      gha_events e\n    left join\n      gha_events_commits_files ecf\n    on\n      ecf.event_id = e.id\n    where\n      r.name = e.dup_repo_name\n      and {{period:e.created_at}}\n      and (lower(e.dup_actor_login) {{exclude_bots}})\n  ) sub\n  where\n    sub.repo_group is not null\n  group by\n    sub.repo_group,\n    sub.author\n  union select 'comments' as metric,\n    sub.repo_group,\n    sub.author,\n    count(distinct sub.id) as value\n  from (\n    select coalesce(ecf.repo_group, r.repo_group) as repo_group,\n      c.dup_user_login as author,\n      c.id\n    from\n      gha_repos r,\n      gha_comments c\n    left join\n      gha_events_commits_files ecf\n    on\n      ecf.event_id = c.event_id\n    where\n      c.dup_repo_name = r.name\n      and {{period:c.created_at}}\n      and (lower(c.dup_user_login) {{exclude_bots}})\n  ) sub\n  where\n    sub.repo_group is not null\n  group by\n    sub.author,\n    sub.repo_group\n  union select case sub.is_pull_request\n      when true then 'prs'\n      else 'issues'\n    end as metric,\n    sub.repo_group,\n    sub.author,\n    count(distinct sub.id) as value\n  from (\n    select coalesce(ecf.repo_group, r.repo_group) as repo_group,\n      i.dup_user_login as author,\n      i.id,\n      i.is_pull_request\n    from\n      gha_repos r,\n      gha_issues i\n    left join\n      gha_events_commits_files ecf\n    on\n      ecf.event_id = i.event_id\n    where\n    i.dup_repo_name = r.name\n    and {{period:i.created_at}}\n    and (lower(i.dup_user_login) {{exclude_bots}})\n  ) sub\n  where\n    sub.repo_group is not null\n  group by\n    sub.repo_group,\n    sub.is_pull_request,\n    sub.author\n  union select 'events' as metric,\n    sub.repo_group,\n    sub.author,\n    count(distinct sub.id) as value\n  from (\n    select coalesce(ecf.repo_group, r.repo_group) as repo_group,\n      e.dup_actor_login as author,\n      e.id\n    from\n      gha_repos r,\n      gha_events e\n    left join\n      gha_events_commits_files ecf\n    on\n      ecf.event_id = e.id\n    where\n      r.name = e.dup_repo_name\n      and {{period:e.created_at}}\n      and (lower(e.dup_actor_login) {{exclude_bots}})\n  ) sub\n  where\n    sub.repo_group is not null\n  group by\n    sub.repo_group,\n    sub.author\n  ) sub\nunion select 'hdev_' || sub.metric || ',All_' || sub.country as metric,\n  sub.author as name,\n  sub.value as value\nfrom (\n  select 'commits' as metric,\n    a.country_name as country,\n    a.login as author,\n    count(distinct c.sha) as value\n  from\n    commits_data c,\n    gha_actors a\n  where\n    c.actor_id = a.id\n    and a.country_name is not null\n  group by\n    a.country_name,\n    a.login\n  union select case e.type\n      when 'PushEvent' then 'pushes'\n      when 'PullRequestReviewCommentEvent' then 'review_comments'\n      when 'IssueCommentEvent' then 'issue_comments'\n      when 'CommitCommentEvent' then 'commit_comments'\n    end as metric,\n    a.country_name as country,\n    a.login as author,\n    count(distinct e.id) as value\n  from\n    gha_events e,\n    gha_actors a\n  where\n    (e.actor_id = a.id or e.dup_actor_login = a.login)\n    and e.type in (\n      'PushEvent', 'PullRequestReviewCommentEvent',\n      'IssueCommentEvent', 'CommitCommentEvent'\n    )\n    and {{period:e.created_at}}\n    and (lower(a.login) {{exclude_bots}})\n    and a.country_name is not null\n  group by\n    e.type,\n    a.country_name,\n    a.login\n  union select 'contributions' as metric,\n    a.country_name as country,\n    a.login as author,\n    count(distinct e.id) as value\n  from\n    gha_events e,\n    gha_actors a\n  where\n    (e.actor_id = a.id or e.dup_actor_login = a.login)\n    and e.type in (\n      'PushEvent', 'PullRequestEvent', 'IssuesEvent',\n      'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent'\n    )\n    and {{period:e.created_at}}\n    and (lower(a.login) {{exclude_bots}})\n    and a.country_name is not null\n  group by\n    a.country_name,\n    a.login\n  union select 'active_repos' as metric,\n    a.country_name as country,\n    a.login as author,\n    count(distinct e.repo_id) as value\n  from\n    gha_events e,\n    gha_actors a\n  where\n    (e.actor_id = a.id or e.dup_actor_login = a.login)\n    and {{period:e.created_at}}\n    and (lower(a.login) {{exclude_bots}})\n    and a.country_name is not null\n  group by\n    a.country_name,\n    a.login\n  union select 'comments' as metric,\n    a.country_name as country,\n    a.login as author,\n    count(distinct c.id) as value\n  from\n    gha_comments c,\n    gha_actors a\n  where\n    (c.user_id = a.id or c.dup_user_login = a.login)\n    and {{period:c.created_at}}\n    and (lower(a.login) {{exclude_bots}})\n    and a.country_name is not null\n  group by\n    a.country_name,\n    a.login\n  union select 'issues' as metric,\n    a.country_name as country,\n    a.login as author,\n    count(distinct i.id) as value\n  from\n    gha_issues i,\n    gha_actors a\n  where\n    (i.user_id = a.id or i.dup_user_login = a.login)\n    and {{period:i.created_at}}\n    and i.is_pull_request = false\n    and (lower(a.login) {{exclude_bots}})\n    and a.country_name is not null\n  group by\n    a.country_name,\n    a.login\n  union select 'prs' as metric,\n    a.country_name as country,\n    a.login as author,\n    count(distinct pr.id) as value\n  from\n    gha_issues pr,\n    gha_actors a\n  where\n    (pr.user_id = a.id or pr.dup_user_login = a.login)\n    and {{period:pr.created_at}}\n    and pr.is_pull_request = true\n    and (lower(a.login) {{exclude_bots}})\n    and a.country_name is not null\n  group by\n    a.country_name,\n    a.login\n  union select 'events' as metric,\n    a.country_name as country,\n    a.login as author,\n    count(distinct e.id) as value\n  from\n    gha_events e,\n    gha_actors a\n  where\n    (e.actor_id = a.id or e.dup_actor_login = a.login)\n    and {{period:e.created_at}}\n    and (lower(a.login) {{exclude_bots}})\n    and a.country_name is not null\n  group by\n    a.country_name,\n    a.login\n  ) sub\nwhere\n  (sub.metric = 'events' and sub.value >= 30)\n  or (sub.metric = 'active_repos' and sub.value > 2)\n  or (sub.metric = 'contributions' and sub.value > 5)\n  or (sub.metric = 'commit_comments' and sub.value > 5)\n  or (sub.metric = 'comments' and sub.value > 10)\n  or (sub.metric = 'issue_comments' and sub.value > 5)\n  or (sub.metric = 'review_comments' and sub.value > 5)\n  or (sub.metric in (\n    'commits',\n    'pushes',\n    'issues',\n    'prs'\n  )\n)\nunion select 'hdev_' || sub.metric || ',' || sub.repo_group || '_' || sub.country as metric,\n  sub.author as name,\n  sub.value as value\nfrom (\n  select 'commits' as metric,\n    c.repo_group,\n    a.country_name as country,\n    a.login as author,\n    count(distinct c.sha) as value\n  from\n    commits_data c,\n    gha_actors a\n  where\n    c.actor_id = a.id\n    and a.country_name is not null\n    and c.repo_group is not null\n  group by\n    c.repo_group,\n    a.country_name,\n    a.login\n  union select case sub.type\n      when 'PushEvent' then 'pushes'\n      when 'PullRequestReviewCommentEvent' then 'review_comments'\n      when 'IssueCommentEvent' then 'issue_comments'\n      when 'CommitCommentEvent' then 'commit_comments'\n    end as metric,\n    sub.repo_group,\n    sub.country,\n    sub.author,\n    count(distinct sub.id) as value\n  from (\n    select coalesce(ecf.repo_group, r.repo_group) as repo_group,\n      e.type,\n      a.country_name as country,\n      a.login as author,\n      e.id\n    from\n      gha_actors a,\n      gha_repos r,\n      gha_events e\n    left join\n      gha_events_commits_files ecf\n    on\n      ecf.event_id = e.id\n    where\n      r.name = e.dup_repo_name\n      and (e.actor_id = a.id or e.dup_actor_login = a.login)\n      and e.type in (\n        'PushEvent', 'PullRequestReviewCommentEvent',\n        'IssueCommentEvent', 'CommitCommentEvent'\n      )\n      and {{period:e.created_at}}\n      and (lower(a.login) {{exclude_bots}})\n  ) sub\n  where\n    sub.repo_group is not null\n    and sub.country is not null\n  group by\n    sub.repo_group,\n    sub.type,\n    sub.country,\n    sub.author\n  union select 'contributions' as metric,\n    sub.repo_group,\n    sub.country,\n    sub.author,\n    count(distinct sub.id) as value\n  from (\n    select coalesce(ecf.repo_group, r.repo_group) as repo_group,\n      a.country_name as country,\n      a.login as author,\n      e.id\n    from\n      gha_actors a,\n      gha_repos r,\n      gha_events e\n    left join\n      gha_events_commits_files ecf\n    on\n      ecf.event_id = e.id\n    where\n      r.name = e.dup_repo_name\n      and (e.actor_id = a.id or e.dup_actor_login = a.login)\n      and e.type in (\n        'PushEvent', 'PullRequestEvent', 'IssuesEvent',\n        'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent'\n      )\n      and {{period:e.created_at}}\n      and (lower(a.login) {{exclude_bots}})\n  ) sub\n  where\n    sub.repo_group is not null\n    and sub.country is not null\n  group by\n    sub.repo_group,\n    sub.country,\n    sub.author\n  union select 'active_repos' as metric,\n    sub.repo_group,\n    sub.country,\n    sub.author,\n    count(distinct sub.repo_id) as value\n  from (\n    select coalesce(ecf.repo_group, r.repo_group) as repo_group,\n      a.country_name as country,\n      a.login as author,\n      e.repo_id\n    from\n      gha_actors a,\n      gha_repos r,\n      gha_events e\n    left join\n      gha_events_commits_files ecf\n    on\n      ecf.event_id = e.id\n    where\n      r.name = e.dup_repo_name\n      and (e.actor_id = a.id or e.dup_actor_login = a.login)\n      and {{period:e.created_at}}\n      and (lower(a.login) {{exclude_bots}})\n  ) sub\n  where\n    sub.repo_group is not null\n    and sub.country is not null\n  group by\n    sub.repo_group,\n    sub.country,\n    sub.author\n  union select 'comments' as metric,\n    sub.repo_group,\n    sub.country,\n    sub.author,\n    count(distinct sub.id) as value\n  from (\n    select coalesce(ecf.repo_group, r.repo_group) as repo_group,\n      a.country_name as country,\n      a.login as author,\n      c.id\n    from\n      gha_actors a,\n      gha_repos r,\n      gha_comments c\n    left join\n      gha_events_commits_files ecf\n    on\n      ecf.event_id = c.event_id\n    where\n      c.dup_repo_name = r.name\n      and (c.user_id = a.id or c.dup_user_login = a.login)\n      and {{period:c.created_at}}\n      and (lower(a.login) {{exclude_bots}})\n  ) sub\n  where\n    sub.repo_group is not null\n    and sub.country is not null\n  group by\n    sub.repo_group,\n    sub.country,\n    sub.author\n  union select case sub.is_pull_request\n      when true then 'prs'\n      else 'issues'\n    end as metric,\n    sub.repo_group,\n    sub.country,\n    sub.author,\n    count(distinct sub.id) as value\n  from (\n    select coalesce(ecf.repo_group, r.repo_group) as repo_group,\n      a.country_name as country,\n      a.login as author,\n      i.id,\n      i.is_pull_request\n    from\n      gha_actors a,\n      gha_repos r,\n      gha_issues i\n    left join\n      gha_events_commits_files ecf\n    on\n      ecf.event_id = i.event_id\n    where\n      i.dup_repo_name = r.name\n      and (i.user_id = a.id or i.dup_user_login = a.login)\n      and {{period:i.created_at}}\n      and (lower(a.login) {{exclude_bots}})\n  ) sub\n  where\n    sub.repo_group is not null\n    and sub.country is not null\n  group by\n    sub.is_pull_request,\n    sub.repo_group,\n    sub.country,\n    sub.author\n  union select 'events' as metric,\n    sub.repo_group,\n    sub.country,\n    sub.author,\n    count(distinct sub.id) as value\n  from (\n    select coalesce(ecf.repo_group, r.repo_group) as repo_group,\n      a.country_name as country,\n      a.login as author,\n      e.id\n    from\n      gha_actors a,\n      gha_repos r,\n      gha_events e\n    left join\n      gha_events_commits_files ecf\n    on\n      ecf.event_id = e.id\n    where\n      r.name = e.dup_repo_name\n      and (e.actor_id = a.id or e.dup_actor_login = a.login)\n      and {{period:e.created_at}}\n      and (lower(e.dup_actor_login) {{exclude_bots}})\n  ) sub\n  where\n    sub.repo_group is not null\n    and sub.country is not null\n  group by\n    sub.repo_group,\n    sub.country,\n    sub.author\n  ) sub\nwhere\n  (sub.metric = 'events' and sub.value >= 10)\n  or (sub.metric = 'active_repos' and sub.value > 1)\n  or (sub.metric = 'contributions' and sub.value > 2)\n  or (sub.metric = 'commit_comments' and sub.value > 2)\n  or (sub.metric = 'comments' and sub.value > 5)\n  or (sub.metric = 'issue_comments' and sub.value > 2)\n  or (sub.metric = 'review_comments' and sub.value > 2)\n  or (sub.metric in (\n    'commits',\n    'pushes',\n    'issues',\n    'prs'\n  )\n)\norder by\n  metric asc,\n  value desc,\n  name asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/project_stats.sql",
    "content": "with commits_data as (\n  select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.dup_actor_id as actor_id\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and {{period:c.dup_created_at}}\n    and (lower(c.dup_actor_login) {{exclude_bots}})\n  union select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.author_id as actor_id\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.author_id is not null\n    and {{period:c.dup_created_at}}\n    and (lower(c.dup_author_login) {{exclude_bots}})\n  union select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.committer_id as actor_id\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.committer_id is not null\n    and {{period:c.dup_created_at}}\n    and (lower(c.dup_committer_login) {{exclude_bots}})\n)\nselect\n  sub.repo_group,\n  'Contributors' as name,\n  count(distinct sub.actor) as value\nfrom (\n  select 'pstat,' || coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    e.dup_actor_login as actor\n  from\n    gha_repos r,\n    gha_events e\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = e.id\n  where\n    {{period:e.created_at}}\n    and e.repo_id = r.id\n    and (lower(e.dup_actor_login) {{exclude_bots}})\n    and e.type in (\n      'PushEvent', 'PullRequestEvent', 'IssuesEvent',\n      'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent'\n    )\n  ) sub\nwhere\n  sub.repo_group is not null\ngroup by\n  sub.repo_group\nunion select 'pstat,All' as repo_group,\n  'Contributors' as name,\n  count(distinct dup_actor_login) as value\nfrom\n  gha_events\nwhere\n  {{period:created_at}}\n  and (lower(dup_actor_login) {{exclude_bots}})\n  and type in (\n    'PushEvent', 'PullRequestEvent', 'IssuesEvent',\n    'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent'\n  )\nunion select\n  sub.repo_group,\n  'Contributions' as name,\n  count(distinct sub.id) as value\nfrom (\n  select 'pstat,' || coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    e.id\n  from\n    gha_repos r,\n    gha_events e\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = e.id\n  where\n    {{period:e.created_at}}\n    and e.repo_id = r.id\n    and (lower(e.dup_actor_login) {{exclude_bots}})\n    and e.type in (\n      'PushEvent', 'PullRequestEvent', 'IssuesEvent',\n      'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent'\n    )\n  ) sub\nwhere\n  sub.repo_group is not null\ngroup by\n  sub.repo_group\nunion select 'pstat,All' as repo_group,\n  'Contributions' as name,\n  count(distinct id) as value\nfrom\n  gha_events\nwhere\n  {{period:created_at}}\n  and (lower(dup_actor_login) {{exclude_bots}})\n  and type in (\n    'PushEvent', 'PullRequestEvent', 'IssuesEvent',\n    'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent'\n  )\nunion select\n  sub.repo_group,\n  'Pushes' as name,\n  count(distinct sub.id) as value\nfrom (\n  select 'pstat,' || coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    e.id\n  from\n    gha_repos r,\n    gha_events e\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = e.id\n  where\n    {{period:e.created_at}}\n    and e.repo_id = r.id\n    and (lower(e.dup_actor_login) {{exclude_bots}})\n    and e.type = 'PushEvent'\n  ) sub\nwhere\n  sub.repo_group is not null\ngroup by\n  sub.repo_group\nunion select 'pstat,All' as repo_group,\n  'Pushes' as name,\n  count(distinct id) as value\nfrom\n  gha_events\nwhere\n  {{period:created_at}}\n  and (lower(dup_actor_login) {{exclude_bots}})\n  and type = 'PushEvent'\nunion select 'pstat,' || c.repo_group as repo_group,\n  'Commits' as name,\n  count(distinct c.sha) as value\nfrom\n  commits_data c\nwhere\n  c.repo_group is not null\ngroup by\n  c.repo_group\nunion select 'pstat,All' as repo_group,\n  'Commits' as name,\n  count(distinct c.sha) as value\nfrom\n  commits_data c\nunion select 'pstat,' || c.repo_group as repo_group,\n  'Committers' as name,\n  count(distinct c.actor_id) as value\nfrom\n  commits_data c\nwhere\n  c.repo_group is not null\ngroup by\n  c.repo_group\nunion select 'pstat,All' as repo_group,\n  'Committers' as name,\n  count(distinct c.actor_id) as value\nfrom\n  commits_data c\nunion select sub.repo_group,\n  case sub.type\n    when 'IssuesEvent' then 'Issue creators'\n    when 'PullRequestEvent' then 'PR creators'\n    when 'PushEvent' then 'Pushers'\n    when 'PullRequestReviewCommentEvent' then 'PR reviewers'\n    when 'IssueCommentEvent' then 'Issue commenters'\n    when 'CommitCommentEvent' then 'Commit commenters'\n    when 'WatchEvent' then 'Watchers'\n    when 'ForkEvent' then 'Forkers'\n  end as name,\n  count(distinct sub.actor_id) as value\nfrom (\n  select 'pstat,' || coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    e.type,\n    e.actor_id\n  from\n    gha_repos r,\n    gha_events e\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = e.id\n  where\n    e.type in (\n      'IssuesEvent', 'PullRequestEvent', 'PushEvent',\n      'PullRequestReviewCommentEvent', 'IssueCommentEvent',\n      'CommitCommentEvent', 'ForkEvent', 'WatchEvent'\n    )\n    and {{period:e.created_at}}\n    and e.repo_id = r.id\n    and (lower(e.dup_actor_login) {{exclude_bots}})\n  ) sub\nwhere\n  sub.repo_group is not null\ngroup by\n  sub.repo_group,\n  sub.type\nunion select 'pstat,All' as repo_group,\n  case type \n    when 'IssuesEvent' then 'Issue creators'\n    when 'PullRequestEvent' then 'PR creators'\n    when 'PushEvent' then 'Pushers'\n    when 'PullRequestReviewCommentEvent' then 'PR reviewers'\n    when 'IssueCommentEvent' then 'Issue commenters'\n    when 'CommitCommentEvent' then 'Commit commenters'\n    when 'WatchEvent' then 'Watchers'\n    when 'ForkEvent' then 'Forkers'\n  end as name,\n  count(distinct actor_id) as value\nfrom\n  gha_events\nwhere\n  type in (\n    'IssuesEvent', 'PullRequestEvent', 'PushEvent',\n    'PullRequestReviewCommentEvent', 'IssueCommentEvent',\n    'CommitCommentEvent', 'ForkEvent', 'WatchEvent'\n  )\n  and {{period:created_at}}\n  and (lower(dup_actor_login) {{exclude_bots}})\ngroup by\n  type\nunion select 'pstat,' || r.repo_group as repo_group,\n  'Repositories' as name,\n  count(distinct e.repo_id) as value\nfrom\n  gha_events e,\n  gha_repos r\nwhere\n  {{period:e.created_at}}\n  and e.repo_id = r.id\n  and r.repo_group is not null\ngroup by\n  r.repo_group\nunion select 'pstat,All' as repo_group,\n  'Repositories' as name,\n  count(distinct repo_id) as value\nfrom\n  gha_events\nwhere\n  {{period:created_at}}\nunion select sub.repo_group,\n  'Comments' as name,\n  count(distinct sub.id) as value\nfrom (\n  select 'pstat,' || coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.id\n  from\n    gha_repos r,\n    gha_comments c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    {{period:c.created_at}}\n    and c.dup_repo_id = r.id\n    and (lower(c.dup_user_login) {{exclude_bots}})\n  ) sub\nwhere\n  sub.repo_group is not null\ngroup by\n  sub.repo_group\nunion select 'pstat,All' as repo_group,\n  'Comments' as name,\n  count(distinct id) as value\nfrom\n  gha_comments\nwhere\n  {{period:created_at}}\n  and (lower(dup_user_login) {{exclude_bots}})\nunion select sub.repo_group,\n  'Commenters' as name,\n  count(distinct sub.user_id) as value\nfrom (\n  select 'pstat,' || coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.user_id\n  from\n    gha_repos r,\n    gha_comments c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    {{period:c.created_at}}\n    and c.dup_repo_id = r.id\n    and (lower(c.dup_user_login) {{exclude_bots}})\n  ) sub\nwhere\n  sub.repo_group is not null\ngroup by\n  sub.repo_group\nunion select 'pstat,All' as repo_group,\n  'Commenters' as name,\n  count(distinct user_id) as value\nfrom\n  gha_comments\nwhere\n  {{period:created_at}}\n  and (lower(dup_user_login) {{exclude_bots}})\nunion select sub.repo_group,\n  'Issues' as name,\n  count(distinct sub.id) as value\nfrom (\n  select 'pstat,' || coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    i.id\n  from\n    gha_repos r,\n    gha_issues i\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = i.event_id\n  where\n    {{period:i.created_at}}\n    and i.dup_repo_id = r.id\n    and i.is_pull_request = false\n    and (lower(i.dup_user_login) {{exclude_bots}})\n  ) sub\nwhere\n  sub.repo_group is not null\ngroup by\n  sub.repo_group\nunion select 'pstat,All' as repo_group,\n  'Issues' as name,\n  count(distinct id) as value\nfrom\n  gha_issues\nwhere\n  {{period:created_at}}\n  and is_pull_request = false\n  and (lower(dup_user_login) {{exclude_bots}})\nunion select sub.repo_group,\n  'PRs' as name,\n  count(distinct sub.id) as value\nfrom (\n  select 'pstat,' || coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    i.id\n  from\n    gha_repos r,\n    gha_issues i\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = i.event_id\n  where\n    {{period:i.created_at}}\n    and i.dup_repo_id = r.id\n    and i.is_pull_request = true\n    and (lower(i.dup_user_login) {{exclude_bots}})\n ) sub\nwhere\n  sub.repo_group is not null\ngroup by\n  sub.repo_group\nunion select 'pstat,All' as repo_group,\n  'PRs' as name,\n  count(distinct id) as value\nfrom\n  gha_issues\nwhere\n  {{period:created_at}}\n  and is_pull_request = true\n  and (lower(dup_user_login) {{exclude_bots}})\nunion select sub.repo_group,\n  'Events' as name,\n  count(sub.id) as value\nfrom (\n  select 'pstat,' || coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    e.id\n  from\n    gha_repos r,\n    gha_events e\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = e.id\n  where\n    {{period:e.created_at}}\n    and e.repo_id = r.id\n    and (lower(e.dup_actor_login) {{exclude_bots}})\n  ) sub\nwhere\n  sub.repo_group is not null\ngroup by\n  sub.repo_group\nunion select 'pstat,All' as repo_group,\n  'Events' as name,\n  count(id) as value\nfrom\n  gha_events\nwhere\n  {{period:created_at}}\n  and (lower(dup_actor_login) {{exclude_bots}})\norder by\n  name asc,\n  value desc,\n  repo_group asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/projects_health.sql",
    "content": "with projects as (\n  select distinct period as project,\n    repo,\n    last_value(time) over projects_by_time as last_release_date,\n    last_value(title) over projects_by_time as last_release_tag,\n    last_value(description) over projects_by_time as last_release_desc\n  from\n    sannotations_shared\n  where\n    title != 'CNCF join date'\n  window\n    projects_by_time as (\n      partition by period\n      order by\n        time asc\n      range between current row\n      and unbounded following\n    )\n), contributors as (\n  select r.repo_group,\n    count(distinct e.actor_id) as contrib12,\n    count(distinct e.actor_id) filter (where e.created_at >= now() - '6 months'::interval) as contrib6,\n    count(distinct e.actor_id) filter (where e.created_at >= now() - '3 months'::interval) as contrib3,\n    count(distinct e.actor_id) filter (where e.created_at >= now() - '6 months'::interval and e.created_at < now() - '3 months'::interval) as contribp3\n  from (\n      select repo_id,\n        created_at,\n        actor_id\n      from\n        gha_events\n      where\n        type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')\n        and created_at >= now() - '1 year'::interval\n        and (lower(dup_actor_login) {{exclude_bots}})\n      union select dup_repo_id as repo_id,\n        dup_created_at as created_at,\n        author_id as actor_id\n      from\n        gha_commits\n      where\n        dup_author_login is not null\n        and dup_created_at >= now() - '1 year'::interval\n        and (lower(dup_author_login) {{exclude_bots}})\n      union select dup_repo_id as repo_id,\n        dup_created_at as created_at,\n        committer_id as actor_id\n      from\n        gha_commits\n      where\n        dup_committer_login is not null\n        and dup_created_at >= now() - '1 year'::interval\n        and (lower(dup_committer_login) {{exclude_bots}})\n    ) e,\n    gha_repos r\n  where\n    r.repo_group is not null\n    and r.id = e.repo_id\n  group by\n    r.repo_group\n), prev12_contributors as (\n  select distinct r.repo_group,\n    e.actor_id\n  from (\n      select repo_id,\n        actor_id\n      from\n        gha_events\n      where\n        type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')\n        and created_at < now() - '1 year'::interval\n        and (lower(dup_actor_login) {{exclude_bots}})\n      union select dup_repo_id as repo_id,\n        author_id as actor_id\n      from\n        gha_commits\n      where\n        dup_author_login is not null\n        and dup_created_at < now() - '1 year'::interval\n        and (lower(dup_author_login) {{exclude_bots}})\n      union select dup_repo_id as repo_id,\n        committer_id as actor_id\n      from\n        gha_commits\n      where\n        dup_committer_login is not null\n        and dup_created_at < now() - '1 year'::interval\n        and (lower(dup_committer_login) {{exclude_bots}})\n    ) e,\n    gha_repos r\n  where\n    r.repo_group is not null\n    and r.id = e.repo_id\n  group by\n    r.repo_group,\n    e.actor_id\n), prev6_contributors as (\n  select distinct r.repo_group,\n    e.actor_id\n  from (\n      select repo_id,\n        actor_id\n      from\n        gha_events\n      where\n        type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')\n        and created_at < now() - '6 months'::interval\n        and (lower(dup_actor_login) {{exclude_bots}})\n      union select dup_repo_id as repo_id,\n        author_id as actor_id\n      from\n        gha_commits\n      where\n        dup_author_login is not null\n        and dup_created_at < now() - '6 months'::interval\n        and (lower(dup_author_login) {{exclude_bots}})\n      union select dup_repo_id as repo_id,\n        committer_id as actor_id\n      from\n        gha_commits\n      where\n        dup_committer_login is not null\n        and dup_created_at < now() - '6 months'::interval\n        and (lower(dup_committer_login) {{exclude_bots}})\n    ) e,\n    gha_repos r\n  where\n    r.repo_group is not null\n    and r.id = e.repo_id\n  group by\n    r.repo_group,\n    e.actor_id\n), prev3_contributors as (\n  select distinct r.repo_group,\n    e.actor_id\n  from (\n      select repo_id,\n        actor_id\n      from\n        gha_events\n      where\n        type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')\n        and created_at < now() - '3 months'::interval\n        and (lower(dup_actor_login) {{exclude_bots}})\n      union select dup_repo_id as repo_id,\n        author_id as actor_id\n      from\n        gha_commits\n      where\n        dup_author_login is not null\n        and dup_created_at < now() - '3 months'::interval\n        and (lower(dup_author_login) {{exclude_bots}})\n      union select dup_repo_id as repo_id,\n        committer_id as actor_id\n      from\n        gha_commits\n      where\n        dup_committer_login is not null\n        and dup_created_at < now() - '3 months'::interval\n        and (lower(dup_committer_login) {{exclude_bots}})\n    ) e,\n    gha_repos r\n  where\n    r.repo_group is not null\n    and r.id = e.repo_id\n  group by\n    r.repo_group,\n    e.actor_id\n), new12_contributors as (\n  select r.repo_group,\n    count(distinct e.actor_id) as ncontrib12\n  from (\n      select repo_id,\n        actor_id\n      from\n        gha_events\n      where\n        type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')\n        and created_at >= now() - '1 year'::interval\n        and (lower(dup_actor_login) {{exclude_bots}})\n      union select dup_repo_id as repo_id,\n        author_id as actor_id\n      from\n        gha_commits\n      where\n        dup_author_login is not null\n        and dup_created_at >= now() - '1 year'::interval\n        and (lower(dup_author_login) {{exclude_bots}})\n      union select dup_repo_id as repo_id,\n        committer_id as actor_id\n      from\n        gha_commits\n      where\n        dup_committer_login is not null\n        and dup_created_at >= now() - '1 year'::interval\n        and (lower(dup_committer_login) {{exclude_bots}})\n    ) e\n  join\n    gha_repos r\n  on\n    r.id = e.repo_id\n    and r.repo_group is not null\n  left join\n    prev12_contributors pc\n  on\n    r.repo_group = pc.repo_group\n    and e.actor_id = pc.actor_id\n  where\n    pc.actor_id is null\n  group by\n    r.repo_group\n), new6_contributors as (\n  select r.repo_group,\n    count(distinct e.actor_id) as ncontrib6,\n    count(distinct e.actor_id) filter (where e.created_at < now() - '3 months'::interval) as ncontribp3\n  from (\n      select repo_id,\n        created_at,\n        actor_id\n      from\n        gha_events\n      where\n        type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')\n        and created_at >= now() - '6 months'::interval\n        and (lower(dup_actor_login) {{exclude_bots}})\n      union select dup_repo_id as repo_id,\n        dup_created_at as created_at,\n        author_id as actor_id\n      from\n        gha_commits\n      where\n        dup_author_login is not null\n        and dup_created_at >= now() - '6 months'::interval\n        and (lower(dup_author_login) {{exclude_bots}})\n      union select dup_repo_id as repo_id,\n        dup_created_at as created_at,\n        committer_id as actor_id\n      from\n        gha_commits\n      where\n        dup_committer_login is not null\n        and dup_created_at >= now() - '6 months'::interval\n        and (lower(dup_committer_login) {{exclude_bots}})\n    ) e\n  join\n    gha_repos r\n  on\n    r.id = e.repo_id\n    and r.repo_group is not null\n  left join\n    prev6_contributors pc\n  on\n    r.repo_group = pc.repo_group\n    and e.actor_id = pc.actor_id\n  where\n    pc.actor_id is null\n  group by\n    r.repo_group\n), new3_contributors as (\n  select r.repo_group,\n    count(distinct e.actor_id) as ncontrib3\n  from (\n      select repo_id,\n        actor_id\n      from\n        gha_events\n      where\n        type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')\n        and created_at >= now() - '3 months'::interval\n        and (lower(dup_actor_login) {{exclude_bots}})\n      union select dup_repo_id as repo_id,\n        author_id as actor_id\n      from\n        gha_commits\n      where\n        dup_author_login is not null\n        and dup_created_at >= now() - '3 months'::interval\n        and (lower(dup_author_login) {{exclude_bots}})\n      union select dup_repo_id as repo_id,\n        committer_id as actor_id\n      from\n        gha_commits\n      where\n        dup_committer_login is not null\n        and dup_created_at >= now() - '3 months'::interval\n        and (lower(dup_committer_login) {{exclude_bots}})\n    ) e\n  join\n    gha_repos r\n  on\n    r.id = e.repo_id\n    and r.repo_group is not null\n  left join\n    prev3_contributors pc\n  on\n    r.repo_group = pc.repo_group\n    and e.actor_id = pc.actor_id\n  where\n    pc.actor_id is null\n  group by\n    r.repo_group\n), commits as (\n  select r.repo_group,\n    count(distinct e.sha) as comm12,\n    count(distinct e.sha) filter (where e.created_at >= now() - '6 months'::interval) as comm6,\n    count(distinct e.sha) filter (where e.created_at >= now() - '3 months'::interval) as comm3,\n    count(distinct e.sha) filter (where e.created_at >= now() - '6 months'::interval and e.created_at < now() - '3 months'::interval) as commp3,\n    count(distinct e.actor_id) as acomm12,\n    count(distinct e.actor_id) filter (where e.created_at >= now() - '6 months'::interval) as acomm6,\n    count(distinct e.actor_id) filter (where e.created_at >= now() - '3 months'::interval) as acomm3,\n    count(distinct e.actor_id) filter (where e.created_at >= now() - '6 months'::interval and e.created_at < now() - '3 months'::interval) as acommp3\n  from (\n      select dup_repo_id as repo_id,\n        sha,\n        dup_created_at as created_at,\n        dup_actor_id as actor_id\n      from\n        gha_commits\n      where\n        dup_created_at >= now() - '1 year'::interval\n        and (lower(dup_actor_login) {{exclude_bots}})\n      union select dup_repo_id as repo_id,\n        sha,\n        dup_created_at as created_at,\n        author_id as actor_id\n      from\n        gha_commits\n      where\n        dup_author_login is not null\n        and dup_created_at >= now() - '1 year'::interval\n        and (lower(dup_author_login) {{exclude_bots}})\n      union select dup_repo_id as repo_id,\n        sha,\n        dup_created_at as created_at,\n        committer_id as actor_id\n      from\n        gha_commits\n      where\n        dup_committer_login is not null\n        and dup_created_at >= now() - '1 year'::interval\n        and (lower(dup_committer_login) {{exclude_bots}})\n    ) e,\n    gha_repos r\n  where\n    r.repo_group is not null\n    and r.id = e.repo_id\n  group by\n    r.repo_group\n), prs_opened as (\n  select r.repo_group,\n    count(distinct pr.id) as pr12,\n    count(distinct pr.id) filter (where pr.created_at >= now() - '6 months'::interval) as pr6,\n    count(distinct pr.id) filter (where pr.created_at >= now() - '3 months'::interval) as pr3,\n    count(distinct pr.id) filter (where pr.created_at >= now() - '6 months'::interval and pr.created_at < now() - '3 months'::interval) as prp3\n  from\n    gha_pull_requests pr,\n    gha_repos r\n  where\n    r.repo_group is not null\n    and r.id = pr.dup_repo_id\n    and pr.created_at >= now() - '1 year'::interval\n  group by\n    r.repo_group\n), prs_closed as (\n  select r.repo_group,\n    count(distinct pr.id) as pr12,\n    count(distinct pr.id) filter (where pr.closed_at >= now() - '6 months'::interval) as pr6,\n    count(distinct pr.id) filter (where pr.closed_at >= now() - '3 months'::interval) as pr3,\n    count(distinct pr.id) filter (where pr.closed_at >= now() - '6 months'::interval and pr.closed_at < now() - '3 months'::interval) as prp3\n  from\n    gha_pull_requests pr,\n    gha_repos r\n  where\n    r.repo_group is not null\n    and pr.closed_at is not null\n    and r.id = pr.dup_repo_id\n    and pr.closed_at >= now() - '1 year'::interval\n  group by\n    r.repo_group\n), prs_merged as (\n  select r.repo_group,\n    count(distinct pr.id) as pr12,\n    count(distinct pr.id) filter (where pr.merged_at >= now() - '6 months'::interval) as pr6,\n    count(distinct pr.id) filter (where pr.merged_at >= now() - '3 months'::interval) as pr3,\n    count(distinct pr.id) filter (where pr.merged_at >= now() - '6 months'::interval and pr.merged_at < now() - '3 months'::interval) as prp3\n  from\n    gha_pull_requests pr,\n    gha_repos r\n  where\n    r.repo_group is not null\n    and pr.merged_at is not null\n    and r.id = pr.dup_repo_id\n    and pr.merged_at >= now() - '1 year'::interval\n  group by\n    r.repo_group\n), issues_opened as (\n  select r.repo_group,\n    count(distinct i.id) as i12,\n    count(distinct i.id) filter (where i.created_at >= now() - '6 months'::interval) as i6,\n    count(distinct i.id) filter (where i.created_at >= now() - '3 months'::interval) as i3,\n    count(distinct i.id) filter (where i.created_at >= now() - '6 months'::interval and i.created_at < now() - '3 months'::interval) as ip3\n  from\n    gha_issues i,\n    gha_repos r\n  where\n    r.repo_group is not null\n    and i.is_pull_request = false\n    and r.id = i.dup_repo_id\n    and i.created_at >= now() - '1 year'::interval\n  group by\n    r.repo_group\n), issues_closed as (\n  select r.repo_group,\n    count(distinct i.id) as i12,\n    count(distinct i.id) filter (where i.closed_at >= now() - '6 months'::interval) as i6,\n    count(distinct i.id) filter (where i.closed_at >= now() - '3 months'::interval) as i3,\n    count(distinct i.id) filter (where i.closed_at >= now() - '6 months'::interval and i.closed_at < now() - '3 months'::interval) as ip3\n  from\n    gha_issues i,\n    gha_repos r\n  where\n    r.repo_group is not null\n    and i.is_pull_request = false\n    and i.closed_at is not null\n    and r.id = i.dup_repo_id\n    and i.closed_at >= now() - '1 year'::interval\n  group by\n    r.repo_group\n), issue_ratio as (\n  select io.repo_group,\n    case ic.i3 when 0 then -1.0 else io.i3::float / ic.i3::float end as r3,\n    case ic.ip3 when 0 then -1.0 else io.ip3::float / ic.ip3::float end as rp3\n  from\n    issues_opened io,\n    issues_closed ic\n  where\n    io.repo_group = ic.repo_group\n), recent_issues as (\n  select distinct id,\n    user_id,\n    created_at\n  from\n    gha_issues\n  where\n    created_at >= now() - '6 months'::interval\n), tdiffs as (\n  select i2.updated_at - i.created_at as diff,\n    r.repo_group\n  from\n    recent_issues i,\n    gha_repos r,\n    gha_issues i2\n  where\n    i.id = i2.id\n    and r.name = i2.dup_repo_name\n    and (lower(i2.dup_actor_login) {{exclude_bots}})\n    and i2.event_id in (\n      select event_id\n      from\n        gha_issues sub\n      where\n        sub.dup_actor_id != i.user_id\n        and sub.id = i.id\n        and sub.updated_at > i.created_at + '30 seconds'::interval\n        and sub.dup_type like '%Event'\n      order by\n        sub.updated_at asc\n      limit 1\n    )\n), react_time as (\n  select repo_group,\n    percentile_disc(0.15) within group (order by diff asc) as p15,\n    percentile_disc(0.5) within group (order by diff asc) as med,\n    percentile_disc(0.85) within group (order by diff asc) as p85\n  from\n    tdiffs\n  where\n    repo_group is not null\n  group by\n    repo_group\n), pr_ratio as (\n  select po.repo_group,\n    case pc.pr3 when 0 then -1.0 else po.pr3::float / pc.pr3::float end as r3,\n    case pc.prp3 when 0 then -1.0 else po.prp3::float / pc.prp3::float end as rp3\n  from\n    prs_opened po,\n    prs_closed pc\n  where\n    po.repo_group = pc.repo_group\n), commits_counts as (\n  select r.repo_group,\n    count(distinct e.sha) as n12,\n    count(distinct e.sha) filter (where e.dup_created_at >= now() - '3 months'::interval) as n3\n  from\n    gha_commits e,\n    gha_repos r\n  where\n    r.repo_group is not null\n    and r.id = e.dup_repo_id\n    and e.dup_created_at >= now() - '1 year'::interval\n    and (\n      (lower(e.dup_actor_login) {{exclude_bots}})\n      or (lower(e.dup_author_login) {{exclude_bots}})\n      or (lower(e.dup_committer_login) {{exclude_bots}})\n    )\n  group by\n    r.repo_group\n), known_commits_actors_counts as (\n  select r.repo_group,\n    count(distinct e.sha) as n12,\n    count(distinct e.sha) filter (where e.created_at >= now() - '3 months'::interval) as n3\n  from (\n      select dup_repo_id as repo_id,\n        sha,\n        dup_created_at as created_at,\n        dup_actor_id as actor_id\n      from\n        gha_commits\n      where\n        (lower(dup_actor_login) {{exclude_bots}})\n        and dup_created_at >= now() - '1 year'::interval\n    ) e,\n    gha_repos r,\n    gha_actors_affiliations a\n  where\n    r.repo_group is not null\n    and a.company_name != ''\n    and a.company_name != 'NotFound'\n    and a.company_name != '(Unknown)'\n    and r.id = e.repo_id\n    and e.actor_id = a.actor_id\n    and a.dt_from <= e.created_at\n    and a.dt_to > e.created_at\n  group by\n    r.repo_group\n), known_commits_authors_counts as (\n  select r.repo_group,\n    count(distinct e.sha) as n12,\n    count(distinct e.sha) filter (where e.created_at >= now() - '3 months'::interval) as n3\n  from (\n      select dup_repo_id as repo_id,\n        sha,\n        dup_created_at as created_at,\n        author_id as actor_id\n      from\n        gha_commits\n      where\n        dup_author_login is not null\n        and (lower(dup_author_login) {{exclude_bots}})\n        and dup_created_at >= now() - '1 year'::interval\n    ) e,\n    gha_repos r,\n    gha_actors_affiliations a\n  where\n    r.repo_group is not null\n    and a.company_name != ''\n    and a.company_name != 'NotFound'\n    and a.company_name != '(Unknown)'\n    and r.id = e.repo_id\n    and e.actor_id = a.actor_id\n    and a.dt_from <= e.created_at\n    and a.dt_to > e.created_at\n  group by\n    r.repo_group\n), known_commits_committers_counts as (\n  select r.repo_group,\n    count(distinct e.sha) as n12,\n    count(distinct e.sha) filter (where e.created_at >= now() - '3 months'::interval) as n3\n  from (\n      select dup_repo_id as repo_id,\n        sha,\n        dup_created_at as created_at,\n        committer_id as actor_id\n      from\n        gha_commits\n      where\n        dup_committer_login is not null\n        and (lower(dup_committer_login) {{exclude_bots}})\n        and dup_created_at >= now() - '1 year'::interval\n    ) e,\n    gha_repos r,\n    gha_actors_affiliations a\n  where\n    r.repo_group is not null\n    and a.company_name != ''\n    and a.company_name != 'NotFound'\n    and a.company_name != '(Unknown)'\n    and r.id = e.repo_id\n    and e.actor_id = a.actor_id\n    and a.dt_from <= e.created_at\n    and a.dt_to > e.created_at\n  group by\n    r.repo_group\n), company_commits_actors_counts as (\n  select r.repo_group,\n    a.company_name,\n    count(distinct e.sha) as n12,\n    count(distinct e.sha) filter (where e.created_at >= now() - '3 months'::interval) as n3\n  from (\n      select dup_repo_id as repo_id,\n        sha,\n        dup_created_at as created_at,\n        dup_actor_id as actor_id\n      from\n        gha_commits\n      where\n        (lower(dup_actor_login) {{exclude_bots}})\n        and dup_created_at >= now() - '1 year'::interval\n    ) e,\n    gha_repos r,\n    gha_actors_affiliations a\n  where\n    r.repo_group is not null\n    and a.company_name != ''\n    and r.id = e.repo_id\n    and e.actor_id = a.actor_id\n    and a.dt_from <= e.created_at\n    and a.dt_to > e.created_at\n  group by\n    r.repo_group,\n    a.company_name\n), company_commits_authors_counts as (\n  select r.repo_group,\n    a.company_name,\n    count(distinct e.sha) as n12,\n    count(distinct e.sha) filter (where e.created_at >= now() - '3 months'::interval) as n3\n  from (\n      select dup_repo_id as repo_id,\n        sha,\n        dup_created_at as created_at,\n        author_id as actor_id\n      from\n        gha_commits\n      where\n        dup_author_login is not null\n        and (lower(dup_author_login) {{exclude_bots}})\n        and dup_created_at >= now() - '1 year'::interval\n    ) e,\n    gha_repos r,\n    gha_actors_affiliations a\n  where\n    r.repo_group is not null\n    and a.company_name != ''\n    and r.id = e.repo_id\n    and e.actor_id = a.actor_id\n    and a.dt_from <= e.created_at\n    and a.dt_to > e.created_at\n  group by\n    r.repo_group,\n    a.company_name\n), company_commits_committers_counts as (\n  select r.repo_group,\n    a.company_name,\n    count(distinct e.sha) as n12,\n    count(distinct e.sha) filter (where e.created_at >= now() - '3 months'::interval) as n3\n  from (\n      select dup_repo_id as repo_id,\n        sha,\n        dup_created_at as created_at,\n        committer_id as actor_id\n      from\n        gha_commits\n      where\n        dup_committer_login is not null\n        and (lower(dup_committer_login) {{exclude_bots}})\n        and dup_created_at >= now() - '1 year'::interval\n    ) e,\n    gha_repos r,\n    gha_actors_affiliations a\n  where\n    r.repo_group is not null\n    and a.company_name != ''\n    and r.id = e.repo_id\n    and e.actor_id = a.actor_id\n    and a.dt_from <= e.created_at\n    and a.dt_to > e.created_at\n  group by\n    r.repo_group,\n    a.company_name\n), top_all_actors_3 as (\n  select i.repo_group,\n    case i.a > 0 when true then round((i.c::numeric / i.a::numeric) * 100.0, 2)::text || '% ' || i.cname else '-' end as top\n  from (\n    select distinct c.repo_group,\n      first_value(c.n3) over companies_by_commits as c,\n      first_value(a.n3) over companies_by_commits as a,\n      first_value(c.company_name) over companies_by_commits as cname\n    from\n      commits_counts a,\n      company_commits_actors_counts c\n    where\n      a.repo_group = c.repo_group\n    window\n      companies_by_commits as (\n        partition by c.repo_group\n        order by\n          c.n3 desc\n        range between unbounded preceding\n        and current row\n      )\n  ) i\n), top_known_actors_3 as (\n  select i.repo_group,\n    case i.k > 0 when true then round((i.c::numeric / i.k::numeric) * 100.0, 2)::text || '% ' || i.cname else '-' end as top\n  from (\n    select distinct c.repo_group,\n      first_value(c.n3) over companies_by_commits as c,\n      first_value(k.n3) over companies_by_commits as k,\n      first_value(c.company_name) over companies_by_commits as cname\n    from\n      known_commits_actors_counts k,\n      company_commits_actors_counts c\n    where\n      k.repo_group = c.repo_group\n    window\n      companies_by_commits as (\n        partition by c.repo_group\n        order by\n          c.n3 desc\n        range between unbounded preceding\n        and current row\n      )\n  ) i\n), top_all_authors_3 as (\n  select i.repo_group,\n    case i.a > 0 when true then round((i.c::numeric / i.a::numeric) * 100.0, 2)::text || '% ' || i.cname else '-' end as top\n  from (\n    select distinct c.repo_group,\n      first_value(c.n3) over companies_by_commits as c,\n      first_value(a.n3) over companies_by_commits as a,\n      first_value(c.company_name) over companies_by_commits as cname\n    from\n      commits_counts a,\n      company_commits_authors_counts c\n    where\n      a.repo_group = c.repo_group\n    window\n      companies_by_commits as (\n        partition by c.repo_group\n        order by\n          c.n3 desc\n        range between unbounded preceding\n        and current row\n      )\n  ) i\n), top_known_authors_3 as (\n  select i.repo_group,\n    case i.k > 0 when true then round((i.c::numeric / i.k::numeric) * 100.0, 2)::text || '% ' || i.cname else '-' end as top\n  from (\n    select distinct c.repo_group,\n      first_value(c.n3) over companies_by_commits as c,\n      first_value(k.n3) over companies_by_commits as k,\n      first_value(c.company_name) over companies_by_commits as cname\n    from\n      known_commits_authors_counts k,\n      company_commits_authors_counts c\n    where\n      k.repo_group = c.repo_group\n    window\n      companies_by_commits as (\n        partition by c.repo_group\n        order by\n          c.n3 desc\n        range between unbounded preceding\n        and current row\n      )\n  ) i\n), top_all_committers_3 as (\n  select i.repo_group,\n    case i.a > 0 when true then round((i.c::numeric / i.a::numeric) * 100.0, 2)::text || '% ' || i.cname else '-' end as top\n  from (\n    select distinct c.repo_group,\n      first_value(c.n3) over companies_by_commits as c,\n      first_value(a.n3) over companies_by_commits as a,\n      first_value(c.company_name) over companies_by_commits as cname\n    from\n      commits_counts a,\n      company_commits_committers_counts c\n    where\n      a.repo_group = c.repo_group\n    window\n      companies_by_commits as (\n        partition by c.repo_group\n        order by\n          c.n3 desc\n        range between unbounded preceding\n        and current row\n      )\n  ) i\n), top_known_committers_3 as (\n  select i.repo_group,\n    case i.k > 0 when true then round((i.c::numeric / i.k::numeric) * 100.0, 2)::text || '% ' || i.cname else '-' end as top\n  from (\n    select distinct c.repo_group,\n      first_value(c.n3) over companies_by_commits as c,\n      first_value(k.n3) over companies_by_commits as k,\n      first_value(c.company_name) over companies_by_commits as cname\n    from\n      known_commits_committers_counts k,\n      company_commits_committers_counts c\n    where\n      k.repo_group = c.repo_group\n    window\n      companies_by_commits as (\n        partition by c.repo_group\n        order by\n          c.n3 desc\n        range between unbounded preceding\n        and current row\n      )\n  ) i\n), top_all_actors_12 as (\n  select i.repo_group,\n    case i.a > 0 when true then round((i.c::numeric / i.a::numeric) * 100.0, 2)::text || '% ' || i.cname else '-' end as top\n  from (\n    select distinct c.repo_group,\n      first_value(c.n12) over companies_by_commits as c,\n      first_value(a.n12) over companies_by_commits as a,\n      first_value(c.company_name) over companies_by_commits as cname\n    from\n      commits_counts a,\n      company_commits_actors_counts c\n    where\n      a.repo_group = c.repo_group\n    window\n      companies_by_commits as (\n        partition by c.repo_group\n        order by\n          c.n12 desc\n        range between unbounded preceding\n        and current row\n      )\n  ) i\n), top_known_actors_12 as (\n  select i.repo_group,\n    case i.k > 0 when true then round((i.c::numeric / i.k::numeric) * 100.0, 2)::text || '% ' || i.cname else '-' end as top\n  from (\n    select distinct c.repo_group,\n      first_value(c.n12) over companies_by_commits as c,\n      first_value(k.n12) over companies_by_commits as k,\n      first_value(c.company_name) over companies_by_commits as cname\n    from\n      known_commits_actors_counts k,\n      company_commits_actors_counts c\n    where\n      k.repo_group = c.repo_group\n    window\n      companies_by_commits as (\n        partition by c.repo_group\n        order by\n          c.n12 desc\n        range between unbounded preceding\n        and current row\n      )\n  ) i\n), top_all_authors_12 as (\n  select i.repo_group,\n    case i.a > 0 when true then round((i.c::numeric / i.a::numeric) * 100.0, 2)::text || '% ' || i.cname else '-' end as top\n  from (\n    select distinct c.repo_group,\n      first_value(c.n12) over companies_by_commits as c,\n      first_value(a.n12) over companies_by_commits as a,\n      first_value(c.company_name) over companies_by_commits as cname\n    from\n      commits_counts a,\n      company_commits_authors_counts c\n    where\n      a.repo_group = c.repo_group\n    window\n      companies_by_commits as (\n        partition by c.repo_group\n        order by\n          c.n12 desc\n        range between unbounded preceding\n        and current row\n      )\n  ) i\n), top_known_authors_12 as (\n  select i.repo_group,\n    case i.k > 0 when true then round((i.c::numeric / i.k::numeric) * 100.0, 2)::text || '% ' || i.cname else '-' end as top\n  from (\n    select distinct c.repo_group,\n      first_value(c.n12) over companies_by_commits as c,\n      first_value(k.n12) over companies_by_commits as k,\n      first_value(c.company_name) over companies_by_commits as cname\n    from\n      known_commits_authors_counts k,\n      company_commits_authors_counts c\n    where\n      k.repo_group = c.repo_group\n    window\n      companies_by_commits as (\n        partition by c.repo_group\n        order by\n          c.n12 desc\n        range between unbounded preceding\n        and current row\n      )\n  ) i\n), top_all_committers_12 as (\n  select i.repo_group,\n    case i.a > 0 when true then round((i.c::numeric / i.a::numeric) * 100.0, 2)::text || '% ' || i.cname else '-' end as top\n  from (\n    select distinct c.repo_group,\n      first_value(c.n12) over companies_by_commits as c,\n      first_value(a.n12) over companies_by_commits as a,\n      first_value(c.company_name) over companies_by_commits as cname\n    from\n      commits_counts a,\n      company_commits_committers_counts c\n    where\n      a.repo_group = c.repo_group\n    window\n      companies_by_commits as (\n        partition by c.repo_group\n        order by\n          c.n12 desc\n        range between unbounded preceding\n        and current row\n      )\n  ) i\n), top_known_committers_12 as (\n  select i.repo_group,\n    case i.k > 0 when true then round((i.c::numeric / i.k::numeric) * 100.0, 2)::text || '% ' || i.cname else '-' end as top\n  from (\n    select distinct c.repo_group,\n      first_value(c.n12) over companies_by_commits as c,\n      first_value(k.n12) over companies_by_commits as k,\n      first_value(c.company_name) over companies_by_commits as cname\n    from\n      known_commits_committers_counts k,\n      company_commits_committers_counts c\n    where\n      k.repo_group = c.repo_group\n    window\n      companies_by_commits as (\n        partition by c.repo_group\n        order by\n          c.n12 desc\n        range between unbounded preceding\n        and current row\n      )\n  ) i\n), repo_groups as (\n  select distinct repo_group\n  from\n    gha_repos\n  where\n    repo_group is not null\n)\nselect\n  'phealth,' || project || ',ltag' as name,\n  'Releases: Last release',\n  last_release_date,\n  0.0,\n  last_release_tag\nfrom\n  projects\nunion select\n  'phealth,' || project || ',ldate' as name,\n  'Releases: Last release date',\n  last_release_date,\n  0.0,\n  to_char(last_release_date, 'MM/DD/YYYY')\nfrom\n  projects\nunion select\n  'phealth,' || project || ',ldesc' as name,\n  'Releases: Last release description',\n  last_release_date,\n  0.0,\n  last_release_desc\nfrom\n  projects\nunion select 'phealth,' || r.repo_group || ',lcomm' as name,\n  'Commits: Last commit date',\n  max(c.dup_created_at),\n  0.0,\n  to_char(max(c.dup_created_at), 'MM/DD/YYYY HH12:MI:SS pm')\nfrom\n  gha_commits c,\n  gha_repos r\nwhere\n  c.dup_repo_id = r.id\n  and r.repo_group is not null\ngroup by\n  r.repo_group\nunion select 'phealth,' || r.repo_group || ',lcommd' as name,\n  'Commits: Days since last commit',\n  max(c.dup_created_at),\n  0.0,\n  DATE_PART('day', now() - max(c.dup_created_at))::text || ' days'\nfrom\n  gha_commits c,\n  gha_repos r\nwhere\n  c.dup_repo_id = r.id\n  and r.repo_group is not null\ngroup by\n  r.repo_group\nunion select 'phealth,' || repo_group || ',acomm3' as name,\n  'Committers: Number of committers in the last 3 months',\n  now(),\n  0.0,\n  acomm3::text\nfrom\n  commits\nunion select 'phealth,' || repo_group || ',acomm6' as name,\n  'Committers: Number of committers in the last 6 months',\n  now(),\n  0.0,\n  acomm6::text\nfrom\n  commits\nunion select 'phealth,' || repo_group || ',acomm12' as name,\n  'Committers: Number of committers in the last 12 months',\n  now(),\n  0.0,\n  acomm12::text\nfrom\n  commits\nunion select 'phealth,' || repo_group || ',acommp3' as name,\n  'Committers: Number of committers in the last 3 months (previous 3 months)',\n  now(),\n  0.0,\n  acommp3::text\nfrom\n  commits\nunion select 'phealth,' || repo_group || ',acomm' as name,\n  'Committers: Number of committers in the last 3 months vs. previous 3 months',\n  now(),\n  0.0,\n  case acomm3 > acommp3 when true then 'Up' else case acomm3 < acommp3 when true then 'Down' else 'Flat' end end\nfrom\n  commits\nunion select 'phealth,' || repo_group || ',comm3' as name,\n  'Commits: Number of commits in the last 3 months',\n  now(),\n  0.0,\n  comm3::text\nfrom\n  commits\nunion select 'phealth,' || repo_group || ',comm6' as name,\n  'Commits: Number of commits in the last 6 months',\n  now(),\n  0.0,\n  comm6::text\nfrom\n  commits\nunion select 'phealth,' || repo_group || ',comm12' as name,\n  'Commits: Number of commits in the last 12 months',\n  now(),\n  0.0,\n  comm12::text\nfrom\n  commits\nunion select 'phealth,' || repo_group || ',commp3' as name,\n  'Commits: Number of commits in the last 3 months (previous 3 months)',\n  now(),\n  0.0,\n  commp3::text\nfrom\n  commits\nunion select 'phealth,' || repo_group || ',comm' as name,\n  'Commits: Number of commits in the last 3 months vs. previous 3 months',\n  now(),\n  0.0,\n  case comm3 > commp3 when true then 'Up' else case comm3 < commp3 when true then 'Down' else 'Flat' end end\nfrom\n  commits\nunion select 'phealth,' || repo_group || ',contr3' as name,\n  'Contributors: Number of contributors in the last 3 months',\n  now(),\n  0.0,\n  contrib3::text\nfrom\n  contributors\nunion select 'phealth,' || repo_group || ',contr6' as name,\n  'Contributors: Number of contributors in the last 6 months',\n  now(),\n  0.0,\n  contrib6::text\nfrom\n  contributors\nunion select 'phealth,' || repo_group || ',contr12' as name,\n  'Contributors: Number of contributors in the last 12 months',\n  now(),\n  0.0,\n  contrib12::text\nfrom\n  contributors\nunion select 'phealth,' || repo_group || ',contrp3' as name,\n  'Contributors: Number of contributors in the last 3 months (previous 3 months)',\n  now(),\n  0.0,\n  contribp3::text\nfrom\n  contributors\nunion select 'phealth,' || repo_group || ',contr' as name,\n  'Contributors: Number of contributors in the last 3 months vs. previous 3 months',\n  now(),\n  0.0,\n  case contrib3 > contribp3 when true then 'Up' else case contrib3 < contribp3 when true then 'Down' else 'Flat' end end\nfrom\n  contributors\nunion select 'phealth,' || repo_group || ',opr3' as name,\n  'PRs: Number of PRs opened in the last 3 months',\n  now(),\n  0.0,\n  pr3::text\nfrom\n  prs_opened\nunion select 'phealth,' || repo_group || ',opr6' as name,\n  'PRs: Number of PRs opened in the last 6 months',\n  now(),\n  0.0,\n  pr6::text\nfrom\n  prs_opened\nunion select 'phealth,' || repo_group || ',opr12' as name,\n  'PRs: Number of PRs opened in the last 12 months',\n  now(),\n  0.0,\n  pr12::text\nfrom\n  prs_opened\nunion select 'phealth,' || repo_group || ',oprp3' as name,\n  'PRs: Number of PRs opened in the last 3 months (previous 3 months)',\n  now(),\n  0.0,\n  prp3::text\nfrom\n  prs_opened\nunion select 'phealth,' || repo_group || ',opr' as name,\n  'PRs: Number of PRs opened in the last 3 months vs. previous 3 months',\n  now(),\n  0.0,\n  case pr3 > prp3 when true then 'Up' else case pr3 < prp3 when true then 'Down' else 'Flat' end end\nfrom\n  prs_opened\nunion select 'phealth,' || repo_group || ',cpr3' as name,\n  'PRs: Number of PRs closed in the last 3 months',\n  now(),\n  0.0,\n  pr3::text\nfrom\n  prs_closed\nunion select 'phealth,' || repo_group || ',cpr6' as name,\n  'PRs: Number of PRs closed in the last 6 months',\n  now(),\n  0.0,\n  pr6::text\nfrom\n  prs_closed\nunion select 'phealth,' || repo_group || ',cpr12' as name,\n  'PRs: Number of PRs closed in the last 12 months',\n  now(),\n  0.0,\n  pr12::text\nfrom\n  prs_closed\nunion select 'phealth,' || repo_group || ',cprp3' as name,\n  'PRs: Number of PRs closed in the last 3 months (previous 3 months)',\n  now(),\n  0.0,\n  prp3::text\nfrom\n  prs_closed\nunion select 'phealth,' || repo_group || ',cpr' as name,\n  'PRs: Number of PRs closed in the last 3 months vs. previous 3 months',\n  now(),\n  0.0,\n  case pr3 > prp3 when true then 'Up' else case pr3 < prp3 when true then 'Down' else 'Flat' end end\nfrom\n  prs_closed\nunion select 'phealth,' || repo_group || ',mpr3' as name,\n  'PRs: Number of PRs merged in the last 3 months',\n  now(),\n  0.0,\n  pr3::text\nfrom\n  prs_merged\nunion select 'phealth,' || repo_group || ',mpr6' as name,\n  'PRs: Number of PRs merged in the last 6 months',\n  now(),\n  0.0,\n  pr6::text\nfrom\n  prs_merged\nunion select 'phealth,' || repo_group || ',mpr12' as name,\n  'PRs: Number of PRs merged in the last 12 months',\n  now(),\n  0.0,\n  pr12::text\nfrom\n  prs_merged\nunion select 'phealth,' || repo_group || ',mprp3' as name,\n  'PRs: Number of PRs merged in the last 3 months (previous 3 months)',\n  now(),\n  0.0,\n  prp3::text\nfrom\n  prs_merged\nunion select 'phealth,' || repo_group || ',mpr' as name,\n  'PRs: Number of PRs merged in the last 3 months vs. previous 3 months',\n  now(),\n  0.0,\n  case pr3 > prp3 when true then 'Up' else case pr3 < prp3 when true then 'Down' else 'Flat' end end\nfrom\n  prs_merged\nunion select 'phealth,' || repo_group || ',ip15' as name,\n  'Issues: 15th percentile of time to respond to issues',\n  now(),\n  0.0,\n  p15::text\nfrom\n  react_time\nunion select 'phealth,' || repo_group || ',imed' as name,\n  'Issues: Median time to respond to issues',\n  now(),\n  0.0,\n  med::text\nfrom\n  react_time\nunion select 'phealth,' || repo_group || ',ip85' as name,\n  'Issues: 85th percentile of time to respond to issues',\n  now(),\n  0.0,\n  p85::text\nfrom\n  react_time\nunion select 'phealth,' || repo_group || ',pro2c' as name,\n  'PRs: Opened to closed rate in the last 3 months vs. previous 3 months',\n  now(),\n  0.0,\n  case r3 < 0 or rp3 < 0 when true then '-' else case r3 > rp3 when true then 'Up' else case r3 < rp3 when true then 'Down' else 'Flat' end end end\nfrom\n  pr_ratio\nunion select 'phealth,' || po.repo_group || ',pro2c3' as name,\n  'PRs: Opened to closed rate in the last 3 months',\n  now(),\n  0.0,\n  case pc.pr3 when 0 then '-' else round(po.pr3::numeric / pc.pr3::numeric, 2)::text end\nfrom\n  prs_opened po,\n  prs_closed pc\nwhere\n  po.repo_group = pc.repo_group\nunion select 'phealth,' || po.repo_group || ',pro2cp3' as name,\n  'PRs: Opened to closed rate in the last 3 months (previous 3 months)',\n  now(),\n  0.0,\n  case pc.prp3 when 0 then '-' else round(po.prp3::numeric / pc.prp3::numeric, 2)::text end\nfrom\n  prs_opened po,\n  prs_closed pc\nwhere\n  po.repo_group = pc.repo_group\nunion select 'phealth,' || po.repo_group || ',pro2c6' as name,\n  'PRs: Opened to closed rate in the last 6 months',\n  now(),\n  0.0,\n  case pc.pr6 when 0 then '-' else round(po.pr6::numeric / pc.pr6::numeric, 2)::text end\nfrom\n  prs_opened po,\n  prs_closed pc\nwhere\n  po.repo_group = pc.repo_group\nunion select 'phealth,' || po.repo_group || ',pro2c12' as name,\n  'PRs: Opened to closed rate in the last 12 months',\n  now(),\n  0.0,\n  case pc.pr12 when 0 then '-' else round(po.pr12::numeric / pc.pr12::numeric, 2)::text end\nfrom\n  prs_opened po,\n  prs_closed pc\nwhere\n  po.repo_group = pc.repo_group\nunion select 'phealth,' || repo_group || ',oi3' as name,\n  'Issues: Number of issues opened in the last 3 months',\n  now(),\n  0.0,\n  i3::text\nfrom\n  issues_opened\nunion select 'phealth,' || repo_group || ',oi6' as name,\n  'Issues: Number of issues opened in the last 6 months',\n  now(),\n  0.0,\n  i6::text\nfrom\n  issues_opened\nunion select 'phealth,' || repo_group || ',oi12' as name,\n  'Issues: Number of issues opened in the last 12 months',\n  now(),\n  0.0,\n  i12::text\nfrom\n  issues_opened\nunion select 'phealth,' || repo_group || ',oip3' as name,\n  'Issues: Number of issues opened in the last 3 months (previous 3 months)',\n  now(),\n  0.0,\n  ip3::text\nfrom\n  issues_opened\nunion select 'phealth,' || repo_group || ',oi' as name,\n  'Issues: Number of issues opened in the last 3 months vs. previous 3 months',\n  now(),\n  0.0,\n  case i3 > ip3 when true then 'Up' else case i3 < ip3 when true then 'Down' else 'Flat' end end\nfrom\n  issues_opened\nunion select 'phealth,' || repo_group || ',ci3' as name,\n  'Issues: Number of issues closed in the last 3 months',\n  now(),\n  0.0,\n  i3::text\nfrom\n  issues_closed\nunion select 'phealth,' || repo_group || ',ci6' as name,\n  'Issues: Number of issues closed in the last 6 months',\n  now(),\n  0.0,\n  i6::text\nfrom\n  issues_closed\nunion select 'phealth,' || repo_group || ',ci12' as name,\n  'Issues: Number of issues closed in the last 12 months',\n  now(),\n  0.0,\n  i12::text\nfrom\n  issues_closed\nunion select 'phealth,' || repo_group || ',cip3' as name,\n  'Issues: Number of issues closed in the last 3 months (previous 3 months)',\n  now(),\n  0.0,\n  ip3::text\nfrom\n  issues_closed\nunion select 'phealth,' || repo_group || ',ci' as name,\n  'Issues: Number of issues closed in the last 3 months vs. previous 3 months',\n  now(),\n  0.0,\n  case i3 > ip3 when true then 'Up' else case i3 < ip3 when true then 'Down' else 'Flat' end end\nfrom\n  issues_closed\nunion select 'phealth,' || repo_group || ',io2c' as name,\n  'Issues: Opened to closed rate in the last 3 months vs. previous 3 months',\n  now(),\n  0.0,\n  case r3 < 0 or rp3 < 0 when true then '-' else case r3 > rp3 when true then 'Up' else case r3 < rp3 when true then 'Down' else 'Flat' end end end\nfrom\n  issue_ratio\nunion select 'phealth,' || io.repo_group || ',io2c3' as name,\n  'Issues: Opened to closed rate in the last 3 months',\n  now(),\n  0.0,\n  case ic.i3 when 0 then '-' else round(io.i3::numeric / ic.i3::numeric, 2)::text end\nfrom\n  issues_opened io,\n  issues_closed ic\nwhere\n  io.repo_group = ic.repo_group\nunion select 'phealth,' || io.repo_group || ',io2cp3' as name,\n  'Issues: Opened to closed rate in the last 3 months (previous 3 months)',\n  now(),\n  0.0,\n  case ic.ip3 when 0 then '-' else round(io.ip3::numeric / ic.ip3::numeric, 2)::text end\nfrom\n  issues_opened io,\n  issues_closed ic\nwhere\n  io.repo_group = ic.repo_group\nunion select 'phealth,' || io.repo_group || ',io2c6' as name,\n  'Issues: Opened to closed rate in the last 6 months',\n  now(),\n  0.0,\n  case ic.i6 when 0 then '-' else round(io.i6::numeric / ic.i6::numeric, 2)::text end\nfrom\n  issues_opened io,\n  issues_closed ic\nwhere\n  io.repo_group = ic.repo_group\nunion select 'phealth,' || io.repo_group || ',io2c12' as name,\n  'Issues: Opened to closed rate in the last 12 months',\n  now(),\n  0.0,\n  case ic.i12 when 0 then '-' else round(io.i12::numeric / ic.i12::numeric, 2)::text end\nfrom\n  issues_opened io,\n  issues_closed ic\nwhere\n  io.repo_group = ic.repo_group\nunion select 'phealth,' || repo_group || ',ncontr3' as name,\n  'Contributors: Number of new contributors in the last 3 months',\n  now(),\n  0.0,\n  ncontrib3::text\nfrom\n  new3_contributors\nunion select 'phealth,' || repo_group || ',ncontr6' as name,\n  'Contributors: Number of new contributors in the last 6 months',\n  now(),\n  0.0,\n  ncontrib6::text\nfrom\n  new6_contributors\nunion select 'phealth,' || repo_group || ',ncontr12' as name,\n  'Contributors: Number of new contributors in the last 12 months',\n  now(),\n  0.0,\n  ncontrib12::text\nfrom\n  new12_contributors\nunion select 'phealth,' || repo_group || ',ncontrp3' as name,\n  'Contributors: Number of new contributors in the last 3 months (last 3 months)',\n  now(),\n  0.0,\n  ncontribp3::text\nfrom\n  new6_contributors\nunion select 'phealth,' || n.repo_group || ',ncontr' as name,\n  'Contributors: Number of new contributors in the last 3 months vs. last 3 months',\n  now(),\n  0.0,\n  case n.ncontrib3 > p.ncontribp3 when true then 'Up' else case n.ncontrib3 < p.ncontribp3 when true then 'Down' else 'Flat' end end\nfrom\n  new3_contributors n,\n  new6_contributors p\nwhere\n  n.repo_group = p.repo_group\nunion select 'phealth,' || rg.repo_group || ',topcompknact3' as name,\n  'Companies: Percent of known commits pushers from top committing company (last 3 months)',\n  now(),\n  0.0,\n  coalesce(t.top, '-')\nfrom\n  repo_groups rg\nleft join\n  top_known_actors_3 t\non\n  rg.repo_group = t.repo_group\nunion select 'phealth,' || rg.repo_group || ',topcompallact3' as name,\n  'Companies: Percent of all commits pushers from top committing company (last 3 months)',\n  now(),\n  0.0,\n  coalesce(t.top, '-')\nfrom\n  repo_groups rg\nleft join\n  top_all_actors_3 t\non\n  rg.repo_group = t.repo_group\nunion select 'phealth,' || rg.repo_group || ',topcompknauth3' as name,\n  'Companies: Percent of known commits authors from top committing company (last 3 months)',\n  now(),\n  0.0,\n  coalesce(t.top, '-')\nfrom\n  repo_groups rg\nleft join\n  top_known_authors_3 t\non\n  rg.repo_group = t.repo_group\nunion select 'phealth,' || rg.repo_group || ',topcompallauth3' as name,\n  'Companies: Percent of all commits authors from top committing company (last 3 months)',\n  now(),\n  0.0,\n  coalesce(t.top, '-')\nfrom\n  repo_groups rg\nleft join\n  top_all_authors_3 t\non\n  rg.repo_group = t.repo_group\nunion select 'phealth,' || rg.repo_group || ',topcompkncom3' as name,\n  'Companies: Percent of known commits from top committing company (previous 3 months)',\n  now(),\n  0.0,\n  coalesce(t.top, '-')\nfrom\n  repo_groups rg\nleft join\n  top_known_committers_3 t\non\n  rg.repo_group = t.repo_group\nunion select 'phealth,' || rg.repo_group || ',topcompallcom3' as name,\n  'Companies: Percent of all commits from top committing company (previous 3 months)',\n  now(),\n  0.0,\n  coalesce(t.top, '-')\nfrom\n  repo_groups rg\nleft join\n  top_all_committers_3 t\non\n  rg.repo_group = t.repo_group\nunion select 'phealth,' || rg.repo_group || ',topcompknact12' as name,\n  'Companies: Percent of known commits pushers from top committing company (last year)',\n  now(),\n  0.0,\n  coalesce(t.top, '-')\nfrom\n  repo_groups rg\nleft join\n  top_known_actors_12 t\non\n  rg.repo_group = t.repo_group\nunion select 'phealth,' || rg.repo_group || ',topcompallact12' as name,\n  'Companies: Percent of all commits pushers from top committing company (last year)',\n  now(),\n  0.0,\n  coalesce(t.top, '-')\nfrom\n  repo_groups rg\nleft join\n  top_all_actors_12 t\non\n  rg.repo_group = t.repo_group\nunion select 'phealth,' || rg.repo_group || ',topcompknauth12' as name,\n  'Companies: Percent of known commits authors from top committing company (last year)',\n  now(),\n  0.0,\n  coalesce(t.top, '-')\nfrom\n  repo_groups rg\nleft join\n  top_known_authors_12 t\non\n  rg.repo_group = t.repo_group\nunion select 'phealth,' || rg.repo_group || ',topcompallauth12' as name,\n  'Companies: Percent of all commits authors from top committing company (last year)',\n  now(),\n  0.0,\n  coalesce(t.top, '-')\nfrom\n  repo_groups rg\nleft join\n  top_all_authors_12 t\non\n  rg.repo_group = t.repo_group\nunion select 'phealth,' || rg.repo_group || ',topcompkncom12' as name,\n  'Companies: Percent of known commits from top committing company (last year)',\n  now(),\n  0.0,\n  coalesce(t.top, '-')\nfrom\n  repo_groups rg\nleft join\n  top_known_committers_12 t\non\n  rg.repo_group = t.repo_group\nunion select 'phealth,' || rg.repo_group || ',topcompallcom12' as name,\n  'Companies: Percent of all commits from top committing company (last year)',\n  now(),\n  0.0,\n  coalesce(t.top, '-')\nfrom\n  repo_groups rg\nleft join\n  top_all_committers_12 t\non\n  rg.repo_group = t.repo_group\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/prs_age.sql",
    "content": "with prs as (\n  select pr.id,\n    pr.created_at,\n    pr.merged_at\n  from\n    gha_pull_requests pr\n  where\n    pr.created_at >= '{{from}}'\n    and pr.created_at < '{{to}}'\n    and pr.event_id = (\n      select i.event_id from gha_pull_requests i where i.id = pr.id order by i.updated_at desc limit 1\n    )\n    and (\n      pr.closed_at is null\n      or (\n        pr.closed_at is not null\n        and pr.merged_at is not null\n      )\n    )\n), prs_groups as (\n  select r.repo_group,\n    pr.id,\n    pr.created_at,\n    pr.merged_at as merged_at\n  from\n    gha_pull_requests pr,\n    gha_repos r\n  where\n    r.id = pr.dup_repo_id\n    and r.repo_group is not null\n    and pr.created_at >= '{{from}}'\n    and pr.created_at < '{{to}}'\n    and pr.event_id = (\n      select i.event_id from gha_pull_requests i where i.id = pr.id order by i.updated_at desc limit 1\n    )\n    and (\n      pr.closed_at is null\n      or (\n        pr.closed_at is not null\n        and pr.merged_at is not null\n      )\n    )\n), tdiffs as (\n  select id, extract(epoch from coalesce(merged_at - created_at, now() - created_at)) / 3600 as age\n  from\n    prs\n), tdiffs_groups as (\n  select repo_group, id, extract(epoch from coalesce(merged_at - created_at, now() - created_at)) / 3600 as age\n  from\n    prs_groups\n)\nselect\n  'prs_age;All;n,m' as name,\n  round(count(distinct id) / {{n}}, 2) as num,\n  percentile_disc(0.5) within group (order by age asc) as age_median\nfrom\n  tdiffs\nunion select 'prs_age;' || repo_group || ';n,m' as name,\n  round(count(distinct id) / {{n}}, 2) as num,\n  percentile_disc(0.5) within group (order by age asc) as age_median\nfrom\n  tdiffs_groups\ngroup by\n  repo_group\norder by\n  num desc,\n  name asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/prs_authors.sql",
    "content": "select\n  'pr_auth,All' as repo_group,\n  round(count(distinct dup_actor_login) / {{n}}, 2) as authors\nfrom\n  gha_pull_requests\nwhere\n  created_at >= '{{from}}'\n  and created_at < '{{to}}'\n  and (lower(dup_actor_login) {{exclude_bots}})\nunion select sub.repo_group,\n  round(count(distinct sub.actor) / {{n}}, 2) as authors\nfrom (\n  select 'pr_auth,' || coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    pr.dup_actor_login as actor\n  from\n    gha_repos r,\n    gha_pull_requests pr\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = pr.event_id\n  where\n    pr.dup_repo_id = r.id\n    and pr.created_at >= '{{from}}'\n    and pr.created_at < '{{to}}'\n    and (lower(pr.dup_actor_login) {{exclude_bots}})\n ) sub\nwhere\n  sub.repo_group is not null\ngroup by\n  sub.repo_group\norder by\n  authors desc,\n  repo_group asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/prs_merged_groups.sql",
    "content": "select\n  sub.repo_group,\n  round(count(distinct sub.id) / {{n}}, 2) as merge_count\nfrom (\n  select 'grp_pr_merg,' || coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    pr.id\n  from\n    gha_repos r,\n    gha_pull_requests pr\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = pr.event_id\n  where\n    r.name = pr.dup_repo_name\n    and pr.merged_at is not null\n    and pr.merged_at >= '{{from}}'\n    and pr.merged_at < '{{to}}'\n  ) sub\nwhere\n  sub.repo_group is not null\ngroup by\n  sub.repo_group\norder by\n  merge_count desc,\n  repo_group asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/prs_state.sql",
    "content": "with all_prs as (\n  select distinct i.id,\n    i.dup_repo_name\n  from\n    gha_issues i,\n    gha_issues_pull_requests ipr,\n    gha_pull_requests pr\n  where\n    ipr.issue_id = i.id\n    and ipr.pull_request_id = pr.id\n    and i.number = pr.number\n    and i.dup_repo_id = pr.dup_repo_id\n    and i.is_pull_request = true\n    and i.updated_at >= '{{from}}'\n    and i.updated_at < '{{to}}'\n    and (\n      pr.merged_at is not null\n      or pr.closed_at is null\n    )\n), approved_prs as (\n  select distinct i.id,\n    i.dup_repo_name\n  from\n    gha_issues i,\n    gha_comments c,\n    gha_issues_pull_requests ipr,\n    gha_pull_requests pr\n  where\n    ipr.issue_id = i.id\n    and ipr.pull_request_id = pr.id\n    and i.number = pr.number\n    and i.dup_repo_id = pr.dup_repo_id\n    and i.event_id = c.event_id\n    and i.is_pull_request = true\n    and i.updated_at >= '{{from}}'\n    and i.updated_at < '{{to}}'\n    and (\n      pr.merged_at is not null\n      or (\n        pr.closed_at is null\n        and substring(c.body from '(?i)(?:^|\\n|\\r)\\s*/(approve|lgtm)\\s*(?:\\n|\\r|$)') is not null\n    )\n  )\n)\nselect\n  'pr_appr;All;appr,wait' as name,\n  round(count(distinct prs.id) filter (where a.id is not null) / {{n}}, 2) as approved,\n  round(count(distinct prs.id) filter (where a.id is null) / {{n}}, 2) as awaiting\nfrom\n  all_prs prs\nleft join \n  approved_prs a\non\n  prs.id = a.id\nunion select 'pr_appr;' || r.repo_group ||';appr,wait' as name,\n  round(count(distinct prs.id) filter (where a.id is not null) / {{n}}, 2) as approved,\n  round(count(distinct prs.id) filter (where a.id is null) / {{n}}, 2) as awaiting\nfrom\n  gha_repos r\njoin\n  all_prs prs\non\n  prs.dup_repo_name = r.name\n  and r.repo_group is not null\nleft join \n  approved_prs a\non\n  prs.id = a.id\ngroup by\n  r.repo_group\norder by\n  approved desc,\n  awaiting desc,\n  name asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/repo_commenters.sql",
    "content": "select\n  'rcommenters,All' as repo_group,\n  round(count(distinct actor_login) / {{n}}, 2) as result\nfrom\n  gha_texts\nwhere\n  created_at >= '{{from}}'\n  and created_at < '{{to}}'\n  and (lower(actor_login) {{exclude_bots}})\nunion select sub.repo_group,\n  round(count(distinct sub.actor_login) / {{n}}, 2) as result\nfrom (\n  select 'rcommenters,' || coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    t.actor_login\n  from\n    gha_repos r,\n    gha_texts t\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = t.event_id\n  where\n    r.id = t.repo_id\n    and t.created_at >= '{{from}}'\n    and t.created_at < '{{to}}'\n    and (lower(t.actor_login) {{exclude_bots}})\n  ) sub\nwhere\n  sub.repo_group is not null\ngroup by\n  sub.repo_group\norder by\n  result desc,\n  repo_group asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/repo_comments.sql",
    "content": "select\n  'rcomments,All' as repo_group,\n  round(count(distinct id) / {{n}}, 2) as result\nfrom\n  gha_comments\nwhere\n  created_at >= '{{from}}'\n  and created_at < '{{to}}'\n  and (lower(dup_actor_login) {{exclude_bots}})\nunion select sub.repo_group,\n  round(count(distinct sub.id) / {{n}}, 2) as result\nfrom (\n  select 'rcomments,' || coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    t.id\n  from\n    gha_repos r,\n    gha_comments t\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = t.event_id\n  where\n    r.id = t.dup_repo_id\n    and t.created_at >= '{{from}}'\n    and t.created_at < '{{to}}'\n    and (lower(t.dup_actor_login) {{exclude_bots}})\n  ) sub\nwhere\n  sub.repo_group is not null\ngroup by\n  sub.repo_group\norder by\n  result desc,\n  repo_group asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/repo_groups_tags.sql",
    "content": "select\n  sel.repo_group\nfrom (\n  select r.repo_group,\n    count(distinct e.id) as cnt\n  from\n    gha_repos r,\n    gha_events e\n  where\n    e.repo_id = r.id\n    and r.repo_group is not null\n  group by\n    r.repo_group\n  order by\n    cnt desc,\n    r.repo_group asc\n  limit {{lim}}\n  ) sel\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/repo_groups_tags_with_all.sql",
    "content": "select\n  sel.repo_group\nfrom (\n  select r.repo_group,\n    count(distinct e.id) as cnt\n  from\n    gha_repos r,\n    gha_events e\n  where\n    e.repo_id = r.id\n    and r.repo_group is not null\n  group by\n    r.repo_group\n  order by\n    cnt desc,\n    r.repo_group asc\n  limit {{lim}}\n  ) sel\nunion select 'All'\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/reviewers_tags.sql",
    "content": "with lgtm_texts as (\n  select distinct event_id\n  from\n    gha_texts\n  where\n    substring(body from '(?i)(?:^|\\n|\\r)\\s*/(?:lgtm)\\s*(?:\\n|\\r|$)') is not null\n    and (lower(actor_login) {{exclude_bots}})\n    and created_at > now() - '3 months'::interval\n)\nselect\n  sub.dup_actor_login\nfrom (\n  select distinct dup_actor_login,\n    count(id) as events\n  from\n    gha_events\n  where\n    (lower(dup_actor_login) {{exclude_bots}})\n    and created_at > now() - '3 months'::interval\n    and (\n      type = 'PullRequestReviewCommentEvent'\n      or id in (\n        select min(event_id)\n        from\n          gha_issues_events_labels\n        where\n          label_name = 'lgtm'\n          and created_at > now() - '3 months'::interval\n        group by\n          issue_id\n        union select event_id from lgtm_texts\n      )\n    )\n  group by\n    dup_actor_login\n  union select 'none', 0\n) sub\norder by\n  sub.events desc\nlimit {{lim}}\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/reviews_per_user.sql",
    "content": "select\n  concat('rev_per_usr,', dup_actor_login, '`All') as repo_user,\n  round(count(id) / {{n}}, 2) as result\nfrom\n  gha_events\nwhere\n  created_at >= '{{from}}'\n  and created_at < '{{to}}'\n  and type in ('PullRequestReviewCommentEvent')\n  and dup_actor_login in (select reviewers_name from treviewers)\ngroup by\n  dup_actor_login\nunion select 'rev_per_usr,' || concat(dup_actor_login, '`', dup_repo_name) as repo_user,\n  round(count(id) / {{n}}, 2) as result\nfrom\n  gha_events\nwhere\n  type in ('PullRequestReviewCommentEvent')\n  and created_at >= '{{from}}'\n  and created_at < '{{to}}'\n  and dup_actor_login in (select reviewers_name from treviewers)\ngroup by\n  repo_user\norder by\n  result desc,\n  repo_user asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/tags.yaml",
    "content": "---\ntags:\n  - name: Repository groups including All\n    sql: repo_groups_tags_with_all\n    series_name: all_repo_groups\n    name_tag: all_repo_group_name\n    value_tag: all_repo_group_value\n  - name: Repository groups without All\n    sql: repo_groups_tags\n    series_name: repo_groups\n    name_tag: repo_group_name\n    value_tag: repo_group_value\n  - name: Companies\n    sql: companies_tags\n    series_name: companies\n    name_tag: companies_name\n  - name: Priority labels with all\n    sql: labels_priorities_tags_with_all\n    series_name: priority_labels_with_all\n    name_tag: priority_labels_name_with_all\n    value_tag: priority_labels_value_with_all\n  - name: Reviewers\n    sql: reviewers_tags\n    series_name: reviewers\n    name_tag: reviewers_name\n  - name: Repository aliases (top N)\n    sql: top_repo_aliases_tags\n    series_name: top_repo_names\n    name_tag: top_repo_names_name\n    value_tag: top_repo_names_value\n  - name: Repository names (top N + All)\n    sql: top_repos_tags_with_all\n    series_name: top_repos_with_all\n    name_tag: top_repos_name_with_all\n    value_tag: top_repos_value_with_all\n  - name: GitHub event types\n    sql: event_types_tags\n    series_name: event_types\n    name_tag: event_type_name\n    value_tag: event_type_value\n  - name: Users\n    sql: users_tags\n    series_name: users\n    name_tag: users_name\n  - name: Country names\n    sql: countries_tags\n    series_name: countries\n    name_tag: country_name\n    value_tag: country_value\n  - name: Cumulative periods\n    sql: cumulative_periods\n    series_name: cumperiods\n    name_tag: cumperiod_name\n  - name: Timezone offsets\n    sql: tz_offset_tags\n    series_name: tz_offsets\n    name_tag: tz_offset\n  - name: Elasticsearch periods\n    sql: es_periods_tags\n    series_name: es_periods\n    name_tag: devstats_period\n    other_tags:\n      es_period: [es_period_name, f]\n"
  },
  {
    "path": "devstats/config/metrics/shared/tags_affs.yaml",
    "content": "---\ntags:\n  - name: Companies\n    sql: companies_tags\n    series_name: companies\n    name_tag: companies_name\n  - name: Country names\n    sql: countries_tags\n    series_name: countries\n    name_tag: country_name\n  - name: Timezone offsets\n    sql: tz_offset_tags\n    series_name: tz_offsets\n    name_tag: tz_offset\n"
  },
  {
    "path": "devstats/config/metrics/shared/time_metrics.sql",
    "content": "with prs as (\n  select ipr.issue_id, pr.created_at, pr.merged_at as merged_at\n  from\n    gha_issues_pull_requests ipr,\n    gha_pull_requests pr\n  where\n    pr.id = ipr.pull_request_id\n    and pr.merged_at is not null\n    and pr.created_at >= '{{from}}'\n    and pr.created_at < '{{to}}'\n    and pr.event_id = (\n      select i.event_id from gha_pull_requests i where i.id = pr.id order by i.updated_at desc limit 1\n    )\n), prs_groups as (\n  select r.repo_group,\n    ipr.issue_id,\n    pr.created_at,\n    pr.merged_at as merged_at\n  from\n    gha_issues_pull_requests ipr,\n    gha_pull_requests pr,\n    gha_repos r\n  where\n    r.id = ipr.repo_id\n    and r.repo_group is not null\n    and pr.id = ipr.pull_request_id\n    and pr.merged_at is not null\n    and pr.created_at >= '{{from}}'\n    and pr.created_at < '{{to}}'\n    and pr.event_id = (\n      select i.event_id from gha_pull_requests i where i.id = pr.id order by i.updated_at desc limit 1\n    )\n), tdiffs as (\n  select extract(epoch from merged_at - created_at) / 3600 as open_to_merge\n  from\n    prs\n), tdiffs_groups as (\n  select repo_group,\n    extract(epoch from merged_at - created_at) / 3600 as open_to_merge\n  from\n    prs_groups\n)\nselect\n  'tmet;All;med,p85' as name,\n  greatest(percentile_disc(0.5) within group (order by open_to_merge asc), 0) as m_o2m,\n  greatest(percentile_disc(0.85) within group (order by open_to_merge asc), 0) as pc_o2m\nfrom\n  tdiffs\nunion select 'tmet;' || repo_group || ';med,p85' as name,\n  greatest(percentile_disc(0.5) within group (order by open_to_merge asc), 0) as m_o2m,\n  greatest(percentile_disc(0.85) within group (order by open_to_merge asc), 0) as pc_o2m\nfrom\n  tdiffs_groups\ngroup by\n  repo_group\norder by\n  name asc\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/top_repo_aliases_tags.sql",
    "content": "select\n  -- string_agg(sub.name, ',')\n  sub.name\nfrom (\n  select distinct r.alias as name,\n    count(distinct e.id) as cnt\n  from\n    gha_repos r,\n    gha_events e\n  where\n    e.repo_id = r.id\n    and r.alias is not null\n  group by\n    r.alias\n  order by\n    cnt desc,\n    alias asc\n  limit {{lim}}\n) sub\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/top_repos_tags_with_all.sql",
    "content": "select\n  'All'\nunion select sub.name\nfrom (\n  select distinct r.name,\n    count(distinct e.id) as cnt\n  from\n    gha_repos r,\n    gha_events e\n  where\n    e.repo_id = r.id\n  group by\n    r.name\n  order by\n    cnt desc,\n    name asc\n  limit {{lim}}\n) sub\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/tz.sql",
    "content": "with data as (\n  select a.tz_offset,\n    'all' as repo_group,\n    count(distinct e.actor_id) filter (where e.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributors,\n    count(distinct e.id) filter (where e.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributions,\n    count(distinct e.actor_id) as users,\n    count(distinct e.id) as events,\n    count(distinct e.actor_id) filter (where e.type = 'PushEvent') as committers,\n    count(distinct e.id) filter (where e.type = 'PushEvent') as commits,\n    count(distinct e.actor_id) filter (where e.type = 'PullRequestEvent') as prcreators,\n    count(distinct e.id) filter (where e.type = 'PullRequestEvent') as prs,\n    count(distinct e.actor_id) filter (where e.type = 'IssuesEvent') as issuecreators,\n    count(distinct e.id) filter (where e.type = 'IssuesEvent') as issues,\n    count(distinct e.actor_id) filter (where e.type in ('CommitCommentEvent', 'IssueCommentEvent')) as commenters,\n    count(distinct e.id) filter (where e.type in ('CommitCommentEvent', 'IssueCommentEvent')) as comments,\n    count(distinct e.actor_id) filter (where e.type = 'PullRequestReviewCommentEvent') as reviewers,\n    count(distinct e.id) filter (where e.type = 'PullRequestReviewCommentEvent') as reviews,\n    count(distinct e.actor_id) filter (where e.type = 'WatchEvent') as watchers,\n    count(distinct e.id) filter (where e.type = 'WatchEvent') as watches,\n    count(distinct e.actor_id) filter (where e.type = 'ForkEvent') as forkers,\n    count(distinct e.id) filter (where e.type = 'ForkEvent') as forks\n  from\n    gha_events e,\n    gha_actors a\n  where\n    (lower(a.login) {{exclude_bots}})\n    and a.id = e.actor_id\n    and a.tz_offset is not null\n    and e.created_at >= '{{from}}'\n    and e.created_at < '{{to}}'\n  group by\n    a.tz_offset\n  union select a.tz_offset,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    count(distinct e.actor_id) filter (where e.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributors,\n    count(distinct e.id) filter (where e.type in ('IssuesEvent', 'PullRequestEvent', 'PushEvent', 'CommitCommentEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent')) as contributions,\n    count(distinct e.actor_id) as users,\n    count(distinct e.id) as events,\n    count(distinct e.actor_id) filter (where e.type = 'PushEvent') as committers,\n    count(distinct e.id) filter (where e.type = 'PushEvent') as commits,\n    count(distinct e.actor_id) filter (where e.type = 'PullRequestEvent') as prcreators,\n    count(distinct e.id) filter (where e.type = 'PullRequestEvent') as prs,\n    count(distinct e.actor_id) filter (where e.type = 'IssuesEvent') as issuecreators,\n    count(distinct e.id) filter (where e.type = 'IssuesEvent') as issues,\n    count(distinct e.actor_id) filter (where e.type in ('CommitCommentEvent', 'IssueCommentEvent')) as commenters,\n    count(distinct e.id) filter (where e.type in ('CommitCommentEvent', 'IssueCommentEvent')) as comments,\n    count(distinct e.actor_id) filter (where e.type = 'PullRequestReviewCommentEvent') as reviewers,\n    count(distinct e.id) filter (where e.type = 'PullRequestReviewCommentEvent') as reviews,\n    count(distinct e.actor_id) filter (where e.type = 'WatchEvent') as watchers,\n    count(distinct e.id) filter (where e.type = 'WatchEvent') as watches,\n    count(distinct e.actor_id) filter (where e.type = 'ForkEvent') as forkers,\n    count(distinct e.id) filter (where e.type = 'ForkEvent') as forks\n  from\n    gha_repos r,\n    gha_actors a,\n    gha_events e\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = e.id\n  where\n    r.id = e.repo_id\n    and (lower(a.login) {{exclude_bots}})\n    and a.id = e.actor_id\n    and a.tz_offset is not null\n    and e.created_at >= '{{from}}'\n    and e.created_at < '{{to}}'\n  group by\n    a.tz_offset,\n    coalesce(ecf.repo_group, r.repo_group)\n)\nselect\n  'tz;' || round(tz_offset / 60.0, 1) || '`' || repo_group || ';contributors,contributions,users,events,committers,commits,prcreators,prs,issuecreators,issues,commenters,comments,reviewers,reviews,watchers,watches,forkers,forks' as name,\n  contributors,\n  contributions,\n  users,\n  events,\n  committers,\n  commits,\n  prcreators,\n  prs,\n  issuecreators,\n  issues,\n  commenters,\n  comments,\n  reviewers,\n  reviews,\n  watchers,\n  watches,\n  forkers,\n  forks\nfrom\n  data\nwhere\n  repo_group is not null\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/tz_offset_tags.sql",
    "content": "select\n  distinct round(tz_offset / 60.0, 1)\nfrom\n  gha_actors\nwhere\n  tz_offset is not null\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/user_activity.sql",
    "content": "select\n  concat('user;', sub.cuser, '`', sub.repo_group, ';activity,issues,prs,pushes,comments,contributions'),\n  round(sub.activity / {{n}}, 2) as activity,\n  round(sub.issues / {{n}}, 2) as issues,\n  round(sub.prs / {{n}}, 2) as prs,\n  round(sub.pushes / {{n}}, 2) as pushes,\n  round((sub.review_comments + sub.issue_comments + sub.commit_comments) / {{n}}, 2) as comments,\n  round((sub.review_comments + sub.issue_comments + sub.commit_comments + sub.pushes + sub.issues + sub.prs) / {{n}}, 2) as contributions\nfrom (\n  select dup_actor_login as cuser,\n    'all' as repo_group,\n    count(id) as activity,\n    count(id) filter(where type = 'IssuesEvent') as issues,\n    count(id) filter(where type = 'PullRequestEvent') as prs,\n    count(id) filter(where type = 'PushEvent') as pushes,\n    count(id) filter(where type = 'PullRequestReviewCommentEvent') as review_comments,\n    count(id) filter(where type = 'IssueCommentEvent') as issue_comments,\n    count(id) filter(where type = 'CommitCommentEvent') as commit_comments\n  from\n    gha_events\n  where\n    created_at >= '{{from}}'\n    and created_at < '{{to}}'\n    and (lower(dup_actor_login) {{exclude_bots}})\n    and dup_actor_login in (select users_name from tusers)\n  group by\n    dup_actor_login\n  union select ev.dup_actor_login as cuser,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    count(distinct ev.id) as activity,\n    count(distinct ev.id) filter(where ev.type = 'IssuesEvent') as issues,\n    count(distinct ev.id) filter(where ev.type = 'PullRequestEvent') as prs,\n    count(distinct ev.id) filter(where ev.type = 'PushEvent') as pushes,\n    count(distinct ev.id) filter(where ev.type = 'PullRequestReviewCommentEvent') as review_comments,\n    count(distinct ev.id) filter(where ev.type = 'IssueCommentEvent') as issue_comments,\n    count(distinct ev.id) filter(where ev.type = 'CommitCommentEvent') as commit_comments\n  from\n    gha_repos r,\n    gha_events ev\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = ev.id\n  where\n    r.id = ev.repo_id\n    and ev.created_at >= '{{from}}'\n    and ev.created_at < '{{to}}'\n    and (lower(ev.dup_actor_login) {{exclude_bots}})\n    and ev.dup_actor_login in (select users_name from tusers)\n  group by\n    ev.dup_actor_login,\n    coalesce(ecf.repo_group, r.repo_group)\n  union select 'All' as cuser,\n    'all' as repo_group,\n    count(id) as activity,\n    count(id) filter(where type = 'IssuesEvent') as issues,\n    count(id) filter(where type = 'PullRequestEvent') as prs,\n    count(id) filter(where type = 'PushEvent') as pushes,\n    count(id) filter(where type = 'PullRequestReviewCommentEvent') as review_comments,\n    count(id) filter(where type = 'IssueCommentEvent') as issue_comments,\n    count(id) filter(where type = 'CommitCommentEvent') as commit_comments\n  from\n    gha_events\n  where\n    created_at >= '{{from}}'\n    and created_at < '{{to}}'\n    and (lower(dup_actor_login) {{exclude_bots}})\n  union select 'All' as cuser,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    count(distinct ev.id) as activity,\n    count(distinct ev.id) filter(where ev.type = 'IssuesEvent') as issues,\n    count(distinct ev.id) filter(where ev.type = 'PullRequestEvent') as prs,\n    count(distinct ev.id) filter(where ev.type = 'PushEvent') as pushes,\n    count(distinct ev.id) filter(where ev.type = 'PullRequestReviewCommentEvent') as review_comments,\n    count(distinct ev.id) filter(where ev.type = 'IssueCommentEvent') as issue_comments,\n    count(distinct ev.id) filter(where ev.type = 'CommitCommentEvent') as commit_comments\n  from\n    gha_repos r,\n    gha_events ev\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = ev.id\n  where\n    r.id = ev.repo_id\n    and ev.created_at >= '{{from}}'\n    and ev.created_at < '{{to}}'\n    and (lower(ev.dup_actor_login) {{exclude_bots}})\n  group by\n    coalesce(ecf.repo_group, r.repo_group)\n  order by\n    activity desc,\n    cuser asc\n  ) sub\nwhere\n  sub.repo_group is not null\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/user_activity_commits.sql",
    "content": "with commits_data as (\n  select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.dup_actor_id as actor_id,\n    c.dup_actor_login as actor_login\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.dup_created_at >= '{{from}}'\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_actor_login) {{exclude_bots}})\n    and c.dup_actor_login in (select users_name from tusers)\n  union select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.author_id as actor_id,\n    c.dup_author_login as actor_login\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.author_id is not null\n    and c.dup_created_at >= '{{from}}'\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_author_login) {{exclude_bots}})\n    and c.dup_author_login in (select users_name from tusers)\n  union select c.dup_repo_id as repo_id,\n    coalesce(ecf.repo_group, r.repo_group) as repo_group,\n    c.sha,\n    c.committer_id as actor_id,\n    c.dup_committer_login as actor_login\n  from\n    gha_repos r,\n    gha_commits c\n  left join\n    gha_events_commits_files ecf\n  on\n    ecf.event_id = c.event_id\n  where\n    c.dup_repo_id = r.id\n    and c.committer_id is not null\n    and c.dup_created_at >= '{{from}}'\n    and c.dup_created_at < '{{to}}'\n    and (lower(c.dup_committer_login) {{exclude_bots}})\n    and c.dup_committer_login in (select users_name from tusers)\n)\nselect\n  concat('user;', sub.cuser, '`', sub.repo_group, ';commits'),\n  round(sub.commits / {{n}}, 2) as commits\nfrom (\n  select actor_login as cuser,\n    'all' as repo_group,\n    count(distinct sha) as commits\n  from\n    commits_data\n  group by\n    actor_login\n  union select actor_login as cuser,\n    repo_group,\n    count(distinct sha) as commits\n  from\n    commits_data\n  group by\n    actor_login,\n    repo_group\n  union select 'All' as cuser,\n    'all' as repo_group,\n    count(distinct sha) as commits\n  from\n    commits_data\n  union select 'All' as cuser,\n    repo_group,\n    count(distinct sha) as commits\n  from\n    commits_data\n  group by\n    repo_group\n  ) sub\nwhere\n  sub.repo_group is not null\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/users_tags.sql",
    "content": "select\n  i.name\nfrom (\n  select\n    -- string_agg(sub.name, ',') from (\n    0 as ord,\n    sub.name as name\n  from (\n    select dup_actor_login as name,\n      count(distinct id) as ecnt\n    from\n      gha_events\n    where\n      type in (\n        'PullRequestReviewCommentEvent', 'PushEvent', 'PullRequestEvent',\n        'IssuesEvent', 'IssueCommentEvent', 'CommitCommentEvent'\n      )\n      and created_at > now() - '3 months'::interval\n      and (lower(dup_actor_login) {{exclude_bots}})\n    group by\n      dup_actor_login\n    order by\n      ecnt desc,\n      name asc\n    limit {{lim}}\n    ) sub\n  union select 1 as ord,\n    'None' as name\n) i\norder by\n  i.ord asc\nlimit {{lim}}\n;\n"
  },
  {
    "path": "devstats/config/metrics/shared/watchers.sql",
    "content": "select\n  'watch;' || r.alias || ';watch,forks,opiss' as name,\n  max(f.watchers) as watchers,\n  max(f.forks) as forks,\n  max(f.open_issues) as open_issues\nfrom\n  gha_forkees f,\n  gha_repos r\nwhere\n  r.name = f.full_name\n  and f.updated_at >= '{{from}}'\n  and f.updated_at < '{{to}}'\n  and r.alias is not null\n  and (\n    f.watchers > 0\n    or f.forks > 0\n    or f.open_issues > 0\n  )\ngroup by\n  r.alias\norder by\n  watchers desc,\n  forks desc,\n  open_issues desc,\n  name asc\n;\n"
  },
  {
    "path": "devstats/config/partials/projects.html",
    "content": "<head>\n<style>\ntable, tr, td {\n  border: none !important;\n}\ntd, th {\n  text-align: center;\n}\nimg.cncf-proj {\n  min-width: 80px;\n}\ntd.cncf-sep {\n  border-right: 1px solid white !important;\n  border-left: 1px solid white !important;\n  border-top: 1px solid white !important;\n  font-weight: bold;\n}\ntd.cncf-br {\n  border-right: 1px solid white !important;\n}\ntd.cncf-bl {\n  border-left: 1px solid white !important;\n}\ntd.cncf-bt {\n  border-top: 1px solid white !important;\n}\ntd.cncf-bb {\n  border-bottom: 1px solid white !important;\n}\n</style>\n</head>\n<h2>DevStats projects:</h2>\n<table>\n    <tr>\n        <td colspan=\"4\" class=\"cncf-sep\">Graduated</td>\n        <td colspan=\"6\" class=\"cncf-sep\">Incubating</td>\n    </tr>\n    <tr>\n        <td class=\"cncf-bl\"><a href=\"https://k8s.[[hostname]]\" target=\"_blank\">Kubernetes</a></td>\n        <td><a href=\"https://prometheus.[[hostname]]\" target=\"_blank\">Prometheus</a></td>\n        <td><a href=\"https://envoy.[[hostname]]\" target=\"_blank\">Envoy</a></td>\n        <td class=\"cncf-br\"><a href=\"https://coredns.[[hostname]]\" target=\"_blank\">CoreDNS</a></td>\n        <td class=\"cncf-bl\"><a href=\"https://opentracing.[[hostname]]\" target=\"_blank\">OpenTracing</a></td>\n        <td><a href=\"https://fluentd.[[hostname]]\" target=\"_blank\">Fluentd</a></td>\n        <td><a href=\"https://grpc.[[hostname]]\" target=\"_blank\">gRPC</a></td>\n        <td><a href=\"https://containerd.[[hostname]]\" target=\"_blank\">containerd</a></td>\n        <td><a href=\"https://rkt.[[hostname]]\" target=\"_blank\">rkt</a></td>\n        <td class=\"cncf-br\"><a href=\"https://cni.[[hostname]]\" target=\"_blank\">CNI</a></td>\n    </tr>\n    <tr>\n        <td class=\"cncf-bb cncf-bl\"><a href=\"https://k8s.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/kubernetes-icon-color.svg\" alt=\"Kubernetes\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"d><a href=\"https://prometheus.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/prometheus-icon-color.svg\" alt=\"Prometheus\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://envoy.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/envoy-icon-color.svg\" alt=\"Envoy\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb cncf-br\"><a href=\"https://coredns.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/coredns-icon-color.svg\" alt=\"CoreDNS\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb cncf-bl\"><a href=\"https://opentracing.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/opentracing-icon-color.svg\" alt=\"OpenTracing\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://fluentd.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/fluentd-icon-color.svg\" alt=\"Fluentd\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://grpc.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/grpc-icon-color.svg\" alt=\"gRPC\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://containerd.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/containerd-icon-color.svg\" alt=\"containerd\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://rkt.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/rkt-icon-color.svg\" alt=\"rkt\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb cncf-br\"><a href=\"https://cni.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/cni-icon-color.svg\" alt=\"CNI\" height=\"80\" width=\"80\" /></a></td>\n    </tr>\n    <tr>\n        <td colspan=\"10\" class=\"cncf-sep\">Incubating</td>\n    </tr>\n    <tr>\n        <td class=\"cncf-bl\"><a href=\"https://jaeger.[[hostname]]\" target=\"_blank\">Jaeger</a></td>\n        <td><a href=\"https://notary.[[hostname]]\" target=\"_blank\">Notary</a></td>\n        <td><a href=\"https://tuf.[[hostname]]\" target=\"_blank\">TUF</a></td>\n        <td><a href=\"https://vitess.[[hostname]]\" target=\"_blank\">Vitess</a></td>\n        <td><a href=\"https://nats.[[hostname]]\" target=\"_blank\">NATS</a></td>\n        <td><a href=\"https://linkerd.[[hostname]]\" target=\"_blank\">Linkerd</a></td>\n        <td><a href=\"https://helm.[[hostname]]\" target=\"_blank\">Helm</a></td>\n        <td><a href=\"https://rook.[[hostname]]\" target=\"_blank\">Rook</a></td>\n        <td><a href=\"https://harbor.[[hostname]]\" target=\"_blank\">Harbor</a></td>\n        <td class=\"cncf-br\"><a href=\"https://etcd.[[hostname]]\" target=\"_blank\">etcd</a></td>\n    </tr>\n    <tr>\n        <td class=\"cncf-bb cncf-bl\"><a href=\"https://jaeger.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/jaeger-icon-color.svg\" alt=\"Jaeger\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://notary.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/notary-icon-color.svg\" alt=\"Notary\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://tuf.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/tuf-icon-color.svg\" alt=\"TUF\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://vitess.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/vitess-icon-color.svg\" alt=\"Vitess\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://nats.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/nats-icon-color.svg\" alt=\"NATS\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://linkerd.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/linkerd-icon-color.svg\" alt=\"Linkerd\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://helm.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/helm-icon-color.svg\" alt=\"Helm\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://rook.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/rook-icon-color.svg\" alt=\"Rook\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://harbor.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/harbor-icon-color.svg\" alt=\"Harbor\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb cncf-br\"><a href=\"https://etcd.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/etcd-icon-color.svg\" alt=\"etcd\" height=\"80\" width=\"80\" /></a></td>\n    </tr>\n    <tr>\n        <td colspan=\"10\" class=\"cncf-sep\">Sandbox</td>\n    </tr>\n    <tr>\n        <td class=\"cncf-bl\"><a href=\"https://opa.[[hostname]]\" target=\"_blank\">OPA</a></td>\n        <td><a href=\"https://spiffe.[[hostname]]\" target=\"_blank\">SPIFFE</a></td>\n        <td><a href=\"https://spire.[[hostname]]\" target=\"_blank\">SPIRE</a></td>\n        <td><a href=\"https://cloudevents.[[hostname]]\" target=\"_blank\">CloudEvents</a></td>\n        <td><a href=\"https://telepresence.[[hostname]]\" target=\"_blank\">Telepresence</a></td>\n        <td><a href=\"https://openmetrics.[[hostname]]\" target=\"_blank\">OpenMetrics</a></td>\n        <td><a href=\"https://tikv.[[hostname]]\" target=\"_blank\">TiKV</a></td>\n        <td><a href=\"https://cortex.[[hostname]]\" target=\"_blank\">Cortex</a></td>\n        <td><a href=\"https://buildpacks.[[hostname]]\" target=\"_blank\">Buildpacks</a></td>\n        <td class=\"cncf-br\"><a href=\"https://falco.[[hostname]]\" target=\"_blank\">Falco</a></td>\n    </tr>\n    <tr>\n        <td class=\"cncf-bb cncf-bl\"><a href=\"https://opa.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/opa-icon-color.svg\" alt=\"OPA\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://spiffe.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/spiffe-icon-color.svg\" alt=\"SPIFFE\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://spire.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/spire-icon-color.svg\" alt=\"SPIRE\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://cloudevents.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/cloudevents-icon-color.svg\" alt=\"CloudEvents\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://telepresence.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/telepresence-icon-color.svg\" alt=\"Telepresence\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://openmetrics.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/openmetrics-icon-color.svg\" alt=\"OpenMetrics\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://tikv.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/tikv-icon-color.svg\" alt=\"TiKV\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://cortex.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/cortex-icon-color.svg\" alt=\"Cortex\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://buildpacks.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/buildpacks-icon-color.svg\" alt=\"Buildpacks\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb cncf-br\"><a href=\"https://falco.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/falco-icon-color.svg\" alt=\"Falco\" height=\"80\" width=\"80\" /></a></td>\n    </tr>\n    <tr>\n        <td colspan=\"2\" class=\"cncf-sep\">Sandbox</td>\n        testsrv=[[hostname]] <td colspan=\"2\" class=\"cncf-sep\">CNCF</td> [[hostname]]=testsrv\n        testsrv=[[hostname]] <td colspan=\"4\" class=\"cncf-sep\">Other</td> [[hostname]]=testsrv\n        prodsrv=[[hostname]] <td colspan=\"1\" class=\"cncf-sep\">CNCF</td> [[hostname]]=prodsrv\n    </tr>\n    <tr>\n        <td class=\"cncf-bl\"><a href=\"https://dragonfly.[[hostname]]\" target=\"_blank\">Dragonfly</a></td>\n        <td class=\"cncf-br\"><a href=\"https://virtualkubelet.[[hostname]]\" target=\"_blank\">Virtual Kubelet</a></td>\n        testsrv=[[hostname]] <td class=\"cncf-bl\"><a href=\"https://all.[[hostname]]\" target=\"_blank\">All CNCF</a></td> [[hostname]]=testsrv\n        testsrv=[[hostname]] <td class=\"cncf-br\"><a href=\"https://cncf.[[hostname]]\" target=\"_blank\">CNCF</a></td> [[hostname]]=testsrv\n        testsrv=[[hostname]] <td><a href=\"https://opencontainers.[[hostname]]\" target=\"_blank\">OCI</a></td> [[hostname]]=testsrv\n        testsrv=[[hostname]] <td><a href=\"https://istio.[[hostname]]\" target=\"_blank\">Istio</a></td> [[hostname]]=testsrv\n        testsrv=[[hostname]] <td><a href=\"https://spinnaker.[[hostname]]\" target=\"_blank\">Spinnaker</a></td> [[hostname]]=testsrv\n        testsrv=[[hostname]] <td class=\"cncf-br\"><a href=\"https://knative.[[hostname]]\" target=\"_blank\">Knative</a></td> [[hostname]]=testsrv\n        prodsrv=[[hostname]] <td class=\"cncf-bl cncf-br\"><a href=\"https://all.[[hostname]]\" target=\"_blank\">All CNCF</a></td> [[hostname]]=prodsrv\n    </tr>\n    <tr>\n        <td class=\"cncf-bb cncf-bl\"><a href=\"https://dragonfly.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/dragonfly-icon-color.svg\" alt=\"Dragonfly\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb cncf-br\"><a href=\"https://virtualkubelet.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/virtualkubelet-icon-color.svg\" alt=\"Virtual Kubelet\" height=\"80\" width=\"80\" /></a></td>\n        testsrv=[[hostname]] <td class=\"cncf-bb cncf-bl\"><a href=\"https://all.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/all-icon-color.svg\" alt=\"All\" height=\"80\" width=\"80\" /></a></td> [[hostname]]=testsrv\n        testsrv=[[hostname]] <td class=\"cncf-bb cncf-br\"><a href=\"https://cncf.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/cncf-icon-color.svg\" alt=\"CNCF\" height=\"80\" width=\"80\" /></a></td> [[hostname]]=testsrv\n        testsrv=[[hostname]] <td class=\"cncf-bb\"><a href=\"https://opencontainers.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/opencontainers-icon-color.svg\" alt=\"OCI\" height=\"80\" width=\"80\" /></a></td> [[hostname]]=testsrv\n        testsrv=[[hostname]] <td class=\"cncf-bb\"><a href=\"https://istio.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/istio-icon-color.svg\" alt=\"Istio\" height=\"80\" width=\"80\" /></a></td> [[hostname]]=testsrv\n        testsrv=[[hostname]] <td class=\"cncf-bb\"><a href=\"https://spinnaker.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/spinnaker-icon-color.svg\" alt=\"Spinnaker\" height=\"80\" width=\"80\" /></a></td> [[hostname]]=testsrv\n        testsrv=[[hostname]] <td class=\"cncf-bb cncf-br\"><a href=\"https://knative.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/knative-icon-color.svg\" alt=\"Knative\" height=\"80\" width=\"80\" /></a></td> [[hostname]]=testsrv\n        prodsrv=[[hostname]] <td class=\"cncf-bb cncf-br cncf-bl\"><a href=\"https://all.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/all-icon-color.svg\" alt=\"All\" height=\"80\" width=\"80\" /></a></td> [[hostname]]=prodsrv\n    </tr>\n</table>\n"
  },
  {
    "path": "devstats/config/partials/projects_health.html",
    "content": "<head>\n<style>\ntable {\n  border: none !important;\n}\ntr, td {\n  border: none !important;\n}\ndiv.container {\n  overflow-x:scroll;\n  min-width: 99%;\n}\ntd, th {\n  text-align: center;\n  text-size: small;\n}\nimg.cncf-proj {\n  min-width: 60px;\n  max-width: 60px;\n}\ntd.cncf-sep {\n  border-right: 1px solid white !important;\n  border-left: 1px solid white !important;\n  border-top: 1px solid white !important;\n  font-weight: bold;\n}\ntd.cncf-br {\n  border-right: 1px solid white !important;\n}\ntd.cncf-bl {\n  border-left: 1px solid white !important;\n}\ntd.cncf-bt {\n  border-top: 1px solid white !important;\n}\ntd.cncf-bb {\n  border-bottom: 1px solid white !important;\n}\ntr:nth-child(odd) {color: #eec;}\ntr:nth-child(even) {color: #ddd;}\ntr:first-child {color: #fff; background: #000;}\ntr:nth-child(2) {color: #fff; background: #000;}\ntr:nth-child(3) {color: #fff; background: #000;}\ncol:nth-child(even) {background: #282828;}\ncol:first-child {background: #000;}\ncol:last-child {background: #000;}\n\n</style>\n</head>\n<div class=\"container\">\n<table>\n    <colgroup>\n    loop:0:start<col>loop:0:end\n    testsrv=[[hostname]] <col><col> [[hostname]]=testsrv\n    </colgroup>\n    <tr>\n        <td class=\"cncf-sep\">Metric</td>\n        <td colspan=\"4\" class=\"cncf-sep\">Graduated</td>\n        <td colspan=\"16\" class=\"cncf-sep\">Incubating</td>\n        <td colspan=\"12\" class=\"cncf-sep\">Sandbox</td>\n        testsrv=[[hostname]] <td colspan=\"1\" class=\"cncf-sep\">CNCF</td> [[hostname]]=testsrv\n        testsrv=[[skip]] <td colspan=\"4\" class=\"cncf-sep\">Other</td> [[skip]]=testsrv\n        <td class=\"cncf-sep\">Metric</td>\n    </tr>\n    <tr>\n        <td class=\"cncf-bl cncf-br\"></td>\n        <td class=\"cncf-bl\"><a href=\"https://k8s.[[hostname]]\" target=\"_blank\">Kubernetes</a></td>\n        <td><a href=\"https://prometheus.[[hostname]]\" target=\"_blank\">Prometheus</a></td>\n        <td><a href=\"https://envoy.[[hostname]]\" target=\"_blank\">Envoy</a></td>\n        <td class=\"cncf-br\"><a href=\"https://coredns.[[hostname]]\" target=\"_blank\">CoreDNS</a></td>\n        <td class=\"cncf-bl\"><a href=\"https://opentracing.[[hostname]]\" target=\"_blank\">OpenTracing</a></td>\n        <td><a href=\"https://fluentd.[[hostname]]\" target=\"_blank\">Fluentd</a></td>\n        <td><a href=\"https://grpc.[[hostname]]\" target=\"_blank\">gRPC</a></td>\n        <td><a href=\"https://containerd.[[hostname]]\" target=\"_blank\">containerd</a></td>\n        <td><a href=\"https://rkt.[[hostname]]\" target=\"_blank\">rkt</a></td>\n        <td><a href=\"https://cni.[[hostname]]\" target=\"_blank\">CNI</a></td>\n        <td><a href=\"https://jaeger.[[hostname]]\" target=\"_blank\">Jaeger</a></td>\n        <td><a href=\"https://notary.[[hostname]]\" target=\"_blank\">Notary</a></td>\n        <td><a href=\"https://tuf.[[hostname]]\" target=\"_blank\">TUF</a></td>\n        <td><a href=\"https://vitess.[[hostname]]\" target=\"_blank\">Vitess</a></td>\n        <td><a href=\"https://nats.[[hostname]]\" target=\"_blank\">NATS</a></td>\n        <td><a href=\"https://linkerd.[[hostname]]\" target=\"_blank\">Linkerd</a></td>\n        <td><a href=\"https://helm.[[hostname]]\" target=\"_blank\">Helm</a></td>\n        <td><a href=\"https://rook.[[hostname]]\" target=\"_blank\">Rook</a></td>\n        <td><a href=\"https://harbor.[[hostname]]\" target=\"_blank\">Harbor</a></td>\n        <td class=\"cncf-br\"><a href=\"https://etcd.[[hostname]]\" target=\"_blank\">etcd</a></td> \n        <td class=\"cncf-bl\"><a href=\"https://opa.[[hostname]]\" target=\"_blank\">OPA</a></td>\n        <td><a href=\"https://spiffe.[[hostname]]\" target=\"_blank\">SPIFFE</a></td>\n        <td><a href=\"https://spire.[[hostname]]\" target=\"_blank\">SPIRE</a></td>\n        <td><a href=\"https://cloudevents.[[hostname]]\" target=\"_blank\">CloudEvents</a></td>\n        <td><a href=\"https://telepresence.[[hostname]]\" target=\"_blank\">Telepresence</a></td>\n        <td><a href=\"https://openmetrics.[[hostname]]\" target=\"_blank\">OpenMetrics</a></td>\n        <td><a href=\"https://tikv.[[hostname]]\" target=\"_blank\">TiKV</a></td>\n        <td><a href=\"https://cortex.[[hostname]]\" target=\"_blank\">Cortex</a></td>\n        <td><a href=\"https://buildpacks.[[hostname]]\" target=\"_blank\">Buildpacks</a></td>\n        <td><a href=\"https://falco.[[hostname]]\" target=\"_blank\">Falco</a></td>\n        <td><a href=\"https://dragonfly.[[hostname]]\" target=\"_blank\">Dragonfly</a></td>\n        <td class=\"cncf-br\"><a href=\"https://virtualkubelet.[[hostname]]\" target=\"_blank\">Virtual Kubelet</a></td>\n        testsrv=[[hostname]] <td class=\"cncf-bl cncf-br\"><a href=\"https://cncf.[[hostname]]\" target=\"_blank\">CNCF</a></td> [[hostname]]=testsrv\n        testsrv=[[skip]] <td class=\"cncf-bl\"><a href=\"https://opencontainers.[[skip]]\" target=\"_blank\">OCI</a></td> [[skip]]=testsrv\n        testsrv=[[skip]] <td><a href=\"https://istio.[[skip]]\" target=\"_blank\">Istio</a></td> [[skip]]=testsrv\n        testsrv=[[skip]] <td><a href=\"https://spinnaker.[[skip]]\" target=\"_blank\">Spinnaker</a></td> [[skip]]=testsrv\n        testsrv=[[skip]] <td class=\"cncf-br\"><a href=\"https://knative.[[skip]]\" target=\"_blank\">Knative</a></td> [[skip]]=testsrv\n        <td class=\"cncf-bl cncf-br\"></td>\n    </tr>\n    <tr>\n        <td class=\"cncf-bb cncf-bl cncf-br\"></td>\n        <td class=\"cncf-bb cncf-bl\"><a href=\"https://k8s.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/kubernetes-icon-color.svg\" alt=\"Kubernetes\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"d><a href=\"https://prometheus.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/prometheus-icon-color.svg\" alt=\"Prometheus\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://envoy.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/envoy-icon-color.svg\" alt=\"Envoy\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb cncf-br\"><a href=\"https://coredns.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/core-dns-icon-color.svg\" alt=\"CoreDNS\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb cncf-bl\"><a href=\"https://opentracing.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/opentracing-icon-color.svg\" alt=\"OpenTracing\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://fluentd.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/fluentd-icon-color.svg\" alt=\"Fluentd\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://grpc.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/grpc-icon-color.svg\" alt=\"gRPC\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://containerd.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/containerd-icon-color.svg\" alt=\"containerd\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://rkt.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/rkt-icon-color.svg\" alt=\"rkt\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://cni.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/cni-icon-color.svg\" alt=\"CNI\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://jaeger.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/jaeger-icon-color.svg\" alt=\"Jaeger\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://notary.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/notary-icon-color.svg\" alt=\"Notary\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://tuf.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/tuf-icon-color.svg\" alt=\"TUF\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://vitess.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/vitess-icon-color.svg\" alt=\"Vitess\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://nats.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/nats-icon-color.svg\" alt=\"NATS\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://linkerd.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/linkerd-icon-color.svg\" alt=\"Linkerd\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://helm.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/helm-icon-color.svg\" alt=\"Helm\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://rook.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/rook-icon-color.svg\" alt=\"Rook\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://harbor.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/harbor-icon-color.svg\" alt=\"Harbor\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb cncf-br\"><a href=\"https://etcd.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/etcd-icon-color.svg\" alt=\"etcd\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb cncf-bl\"><a href=\"https://opa.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/opa-icon-color.svg\" alt=\"OPA\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://spiffe.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/spiffe-icon-color.svg\" alt=\"SPIFFE\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://spire.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/spire-icon-color.svg\" alt=\"SPIRE\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://cloudevents.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/cloudevents-icon-color.svg\" alt=\"CloudEvents\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://telepresence.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/telepresence-icon-color.svg\" alt=\"Telepresence\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://openmetrics.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/openmetrics-icon-color.svg\" alt=\"OpenMetrics\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://tikv.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/tikv-icon-color.svg\" alt=\"TiKV\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://cortex.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/cortex-icon-color.svg\" alt=\"Cortex\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://buildpacks.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/buildpacks-icon-color.svg\" alt=\"Buildpacks\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://falco.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/falco-icon-color.svg\" alt=\"Falco\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb\"><a href=\"https://dragonfly.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/dragonfly-icon-color.svg\" alt=\"Dragonfly\" height=\"80\" width=\"80\" /></a></td>\n        <td class=\"cncf-bb cncf-br\"><a href=\"https://virtualkubelet.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/virtualkubelet-icon-color.svg\" alt=\"Virtual Kubelet\" height=\"80\" width=\"80\" /></a></td>\n        testsrv=[[hostname]] <td class=\"cncf-bb cncf-bl cncf-br\"><a href=\"https://cncf.[[hostname]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[hostname]]/img/cncf-icon-color.svg\" alt=\"CNCF\" height=\"80\" width=\"80\" /></a></td> [[hostname]]=testsrv\n        testsrv=[[skip]] <td class=\"cncf-bb cncf-bl\"><a href=\"https://opencontainers.[[skip]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[skip]]/img/opencontainers-icon-color.svg\" alt=\"OCI\" height=\"80\" width=\"80\" /></a></td> [[skip]]=testsrv\n        testsrv=[[skip]] <td class=\"cncf-bb\"><a href=\"https://istio.[[skip]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[skip]]/img/istio-icon-color.svg\" alt=\"Istio\" height=\"80\" width=\"80\" /></a></td> [[skip]]=testsrv\n        testsrv=[[skip]] <td class=\"cncf-bb\"><a href=\"https://spinnaker.[[skip]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[skip]]/img/spinnaker-icon-color.svg\" alt=\"Spinnaker\" height=\"80\" width=\"80\" /></a></td> [[skip]]=testsrv\n        testsrv=[[skip]] <td class=\"cncf-bb cncf-br\"><a href=\"https://knative.[[skip]]\" target=\"_blank\"><img class=\"cncf-proj\" src=\"https://[[skip]]/img/knative-icon-color.svg\" alt=\"Knative\" height=\"80\" width=\"80\" /></a></td> [[skip]]=testsrv\n        <td class=\"cncf-bb cncf-bl cncf-br\"></td>\n    </tr>\n    loop:1:start\n    <tr>\n        <td style=\"white-space:nowrap;text-align:left;\" class=\"cncf-bb cncf-bl cncf-br\">metrics:series:phealthkubernetes:loop:1:i:1</td>\n        <td class=\"cncf-bb cncf-bl\">metrics:series:phealthkubernetes:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthprometheus:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthenvoy:loop:1:i:2</td>\n        <td class=\"cncf-bb cncf-br\">metrics:series:phealthcoredns:loop:1:i:2</td>\n        <td class=\"cncf-bb cncf-bl\">metrics:series:phealthopentracing:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthfluentd:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthgrpc:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthcontainerd:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthrkt:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthcni:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthjaeger:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthnotary:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthtuf:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthvitess:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthnats:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthlinkerd:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthhelm:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthrook:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthharbor:loop:1:i:2</td>\n        <td class=\"cncf-bb cncf-br\">metrics:series:phealthetcd:loop:1:i:2</td>\n        <td class=\"cncf-bb cncf-bl\">metrics:series:phealthopa:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthspiffe:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthspire:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthcloudevents:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthtelepresence:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthopenmetrics:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthtikv:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthcortex:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthbuildpacks:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthfalco:loop:1:i:2</td>\n        <td class=\"cncf-bb\">metrics:series:phealthdragonfly:loop:1:i:2</td>\n        <td class=\"cncf-bb cncf-br\">metrics:series:phealthvirtualkubelet:loop:1:i:2</td>\n        testsrv=[[hostname]] <td class=\"cncf-bb cncf-bl cncf-br\">metrics:series:phealthcncf:loop:1:i:2</td> [[hostname]]=testsrv\n        testsrv=[[skip]] <td class=\"cncf-bb cncf-bl\">metrics:series:phealthopencontainers:loop:1:i:2</td> [[skip]]=testsrv\n        testsrv=[[skip]] <td class=\"cncf-bb\">metrics:series:phealthistio:loop:1:i:2</td> [[skip]]=testsrv\n        testsrv=[[skip]] <td class=\"cncf-bb\">metrics:series:phealthspinnaker:loop:1:i:2</td> [[skip]]=testsrv\n        testsrv=[[skip]] <td class=\"cncf-bb cncf-br\">metrics:series:phealthknative:loop:1:i:2</td> [[skip]]=testsrv\n        <td style=\"white-space:nowrap;text-align:left;\" class=\"cncf-bb cncf-bl cncf-br\">metrics:series:phealthkubernetes:loop:1:i:1</td>\n    </tr>\n    loop:1:end\n</table>\n</div>\n"
  },
  {
    "path": "devstats/config/projects.yaml",
    "content": "---\nprojects:\n  kubeflow:\n    order: 1\n    name: kubeflow\n    status: \"-\"\n    command_line:\n      - \"kubeflow\"\n    start_date: 2018-01-01T00:00:00Z\n    join_date: null\n    psql_db: kubeflow\n    main_repo: kubeflow/kubeflow\n    annotation_regexp: '^v((0\\.\\d+)|(\\d+\\.\\d+\\.0))$'\n    files_skip_pattern: '(^|/)_?(vendor|Godeps|_workspace)/'\n    env:\n      GHA2DB_EXCLUDE_REPOS:\n        \"kubeflow/homebrew-cask,kubeflow/homebrew-core\""
  },
  {
    "path": "devstats/config/run.sh",
    "content": "#!/bin/bash\nGHA2DB_GHAPISKIP=1 GHA2DB_LOCAL=1 ./devstats || exit 1\n"
  },
  {
    "path": "devstats/config/scripts/clean_affiliations.sql",
    "content": "delete from gha_actors_emails;\ndelete from gha_actors_affiliations;\ndelete from gha_companies;\nupdate gha_actors set name = null;\n"
  },
  {
    "path": "devstats/config/scripts/kubeflow/repo_groups.sql",
    "content": "-- Based on\n-- https://github.com/cncf/devstats/blob/ce383e8fd9bf05fbd3b08968e6704a2e6ccbdedf/scripts/all/repo_groups.sql\n--\n--# This script is used by devstats to group repositories.\n--# It updates the table gha_repos \n\n-- Clear current repo groups (taken from merge of all other projects)\nupdate\n  gha_repos\nset\n  repo_group = null,\n  alias = null\n;\n\n-- Kubernetes\nupdate\n  gha_repos\nset\n  repo_group = 'kubeflow',\n  alias = 'kubeflow'\nwhere  \n  not name in ('kubeflow/homebrew-cask', \n  \t\t\t   'kubeflow/homebrew-core')\n;\n"
  },
  {
    "path": "devstats/config/shared/get_repos.sh",
    "content": "#!/bin/bash\nif ( [ -z \"$PG_PASS\" ] || [ -z \"$PG_DB\" ] || [ -z \"$GHA2DB_PROJECT\" ] )\nthen\n  echo \"$0: you need to set GHA2DB_PROJECT, PG_DB and PG_PASS env variables to use this script\"\n  exit 1\nfi\nGHA2DB_PROJECTS_OVERRIDE=\"+$GHA2DB_PROJECT\" GHA2DB_LOCAL=1 GHA2DB_PROCESS_COMMITS=1 GHA2DB_PROCESS_REPOS=1 GHA2DB_EXTERNAL_INFO=1 GHA2DB_PROJECTS_COMMITS=\"$GHA2DB_PROJECT\" ./get_repos\n"
  },
  {
    "path": "devstats/config/shared/import_affs.sh",
    "content": "#!/bin/bash\nif ( [ -z \"$GHA2DB_PROJECT\" ] || [ -z \"$PG_DB\" ] || [ -z \"$PG_PASS\" ] )\nthen\n  echo \"$0: you need to set GHA2DB_PROJECT, PG_DB, PG_PASS env variables to use this script\"\n  exit 1\nfi\nfunction finish {\n    sync_unlock.sh\n}\nif [ -z \"$TRAP\" ]\nthen\n  sync_lock.sh || exit -1\n  trap finish EXIT\n  export TRAP=1\nfi\nGHA2DB_LOCAL=1 ./runq scripts/clean_affiliations.sql || exit 1\nGHA2DB_LOCAL=1 ./import_affs github_users.json || exit 2\nGHA2DB_LOCAL=1 ./runq util_sql/update_country_names.sql || exit 3\nGHA2DB_TAGS_YAML=metrics/$GHA2DB_PROJECT/tags_affs.yaml GHA2DB_LOCAL=1 ./tags\n"
  },
  {
    "path": "devstats/config/shared/reinit.sh",
    "content": "#!/bin/bash\n# SKIPTEMP=1 skip regenerating data into temporary database and use current database directly\nset -x\nif ( [ -z \"$GHA2DB_PROJECT\" ] || [ -z \"$PG_DB\" ] || [ -z \"$PG_PASS\" ] )\nthen\n  echo \"$0: you need to set GHA2DB_PROJECT, PG_DB, PG_PASS env variables to use this script\"\n  exit 1\nfi\nfunction finish {\n    sync_unlock.sh\n}\nif [ -z \"$TRAP\" ]\nthen\n  sync_lock.sh || exit -1\n  trap finish EXIT\n  export TRAP=1\nfi\nif [ ! -z \"$SKIPTEMP\" ]\nthen\n  ./devel/drop_ts_tables.sh \"$PG_DB\" || exit 2\n  sudo -E -u postgres psql \"$PG_DB\" -c \"delete from gha_vars\" || exit 3\n  sudo -E -u postgres psql \"$PG_DB\" -c \"delete from gha_computed\" || exit 4\n  GHA2DB_LOCAL=1 ./vars || exit 5\n  GHA2DB_CMDDEBUG=1 GHA2DB_RESETTSDB=1 GHA2DB_LOCAL=1 ./gha2db_sync || exit 6\nelse\n  db=$PG_DB\n  tdb=\"${PG_DB}_temp\"\n  sudo -E -u postgres pg_dump -Fc $db -f /tmp/$tdb.dump || exit 7\n  mv /tmp/$tdb.dump . || exit 8\n  ./devel/restore_db.sh $tdb || exit 9\n  ./devel/drop_ts_tables.sh $tdb || exit 10\n  sudo -E -u postgres psql $tdb -c \"delete from gha_vars\" || exit 11\n  sudo -E -u postgres psql $tdb -c \"delete from gha_computed\" || exit 12\n  GHA2DB_LOCAL=1 PG_DB=$tdb ./vars || exit 13\n  GHA2DB_CMDDEBUG=1 GHA2DB_RESETTSDB=1 GHA2DB_LOCAL=1 PG_DB=$tdb ./gha2db_sync || exit 14\n  ./devel/drop_psql_db.sh $db || exit 15\n  sudo -E -u postgres psql -c \"select pg_terminate_backend(pid) from pg_stat_activity where datname = '$tdb'\" || exit 16\n  sudo -E -u postgres psql -c \"alter database \\\"$tdb\\\" rename to \\\"$db\\\"\" || exit 17\n  rm -f $tdb.dump || exit 18\nfi\n"
  },
  {
    "path": "devstats/config/shared/setup_repo_groups.sh",
    "content": "#!/bin/bash\nif ( [ -z \"$GHA2DB_PROJECT\" ] || [ -z \"$PG_DB\" ] || [ -z \"$PG_PASS\" ] )\nthen\n  echo \"$0: you need to set GHA2DB_PROJECT, PG_DB and PG_PASS env variables to use this script\"\n  exit 1\nfi\nproj=$GHA2DB_PROJECT\necho \"Setting up $proj repository groups\"\n./runq \"scripts/$proj/repo_groups.sql\"\n"
  },
  {
    "path": "devstats/config/shared/setup_scripts.sh",
    "content": "#!/bin/bash\nif ( [ -z \"$GHA2DB_PROJECT\" ] || [ -z \"$PG_DB\" ] || [ -z \"$PG_PASS\" ] )\nthen\n  echo \"$0: you need to set GHA2DB_PROJECT, PG_DB and PG_PASS env variables to use this script\"\n  exit 1\nfi\nproj=$GHA2DB_PROJECT\necho \"Setting up $proj repository groups sync script\"\nsudo -E -u postgres psql $PG_DB -c \"insert into gha_postprocess_scripts(ord, path) select 0, 'scripts/$proj/repo_groups.sql' on conflict do nothing\"\necho \"Setting $proj up default postprocess scripts\"\n./runq util_sql/default_postprocess_scripts.sql\necho \"Setting $proj up repository groups postprocess script\"\n./runq util_sql/repo_groups_postprocess_script_from_repos.sql\n"
  },
  {
    "path": "devstats/config/shared/sync.sh",
    "content": "#!/bin/bash\nif ( [ -z \"$GHA2DB_PROJECT\" ] || [ -z \"$PG_DB\" ] || [ -z \"$PG_PASS\" ] )\nthen\n  echo \"$0: you need to set GHA2DB_PROJECT, PG_DB, PG_PASS env variables to use this script\"\n  exit 1\nfi\nfunction finish {\n    sync_unlock.sh\n}\nif [ -z \"$TRAP\" ]\nthen\n  sync_lock.sh || exit -1\n  trap finish EXIT\n  export TRAP=1\nfi\nGHA2DB_LOCAL=1 ./gha2db_sync\n"
  },
  {
    "path": "devstats/config/shared/tags.sh",
    "content": "#!/bin/bash\nif ( [ -z \"$GHA2DB_PROJECT\" ] || [ -z \"$PG_DB\" ] || [ -z \"$PG_PASS\" ] )\nthen\n  echo \"$0: you need to set GHA2DB_PROJECT, PG_DB, PG_PASS env variables to use this script\"\n  exit 1\nfi\nfunction finish {\n    sync_unlock.sh\n}\nif [ -z \"$TRAP\" ]\nthen\n  sync_lock.sh || exit -1\n  trap finish EXIT\n  export TRAP=1\nfi\nGHA2DB_LOCAL=1 ./tags\n"
  },
  {
    "path": "devstats/config/sqlite/touch",
    "content": ""
  },
  {
    "path": "devstats/config/util_sql/country_codes.sql",
    "content": "insert into gha_countries(code, name) values('af', 'Afghanistan') on conflict do nothing;\ninsert into gha_countries(code, name) values('ax', 'Åland Islands') on conflict do nothing;\ninsert into gha_countries(code, name) values('al', 'Albania') on conflict do nothing;\ninsert into gha_countries(code, name) values('dz', 'Algeria') on conflict do nothing;\ninsert into gha_countries(code, name) values('as', 'American Samoa') on conflict do nothing;\ninsert into gha_countries(code, name) values('ad', 'Andorra') on conflict do nothing;\ninsert into gha_countries(code, name) values('ao', 'Angola') on conflict do nothing;\ninsert into gha_countries(code, name) values('ai', 'Anguilla') on conflict do nothing;\ninsert into gha_countries(code, name) values('aq', 'Antarctica') on conflict do nothing;\ninsert into gha_countries(code, name) values('ag', 'Antigua and Barbuda') on conflict do nothing;\ninsert into gha_countries(code, name) values('ar', 'Argentina') on conflict do nothing;\ninsert into gha_countries(code, name) values('am', 'Armenia') on conflict do nothing;\ninsert into gha_countries(code, name) values('aw', 'Aruba') on conflict do nothing;\ninsert into gha_countries(code, name) values('au', 'Australia') on conflict do nothing;\ninsert into gha_countries(code, name) values('at', 'Austria') on conflict do nothing;\ninsert into gha_countries(code, name) values('az', 'Azerbaijan') on conflict do nothing;\ninsert into gha_countries(code, name) values('bs', 'Bahamas') on conflict do nothing;\ninsert into gha_countries(code, name) values('bh', 'Bahrain') on conflict do nothing;\ninsert into gha_countries(code, name) values('bd', 'Bangladesh') on conflict do nothing;\ninsert into gha_countries(code, name) values('bb', 'Barbados') on conflict do nothing;\ninsert into gha_countries(code, name) values('by', 'Belarus') on conflict do nothing;\ninsert into gha_countries(code, name) values('be', 'Belgium') on conflict do nothing;\ninsert into gha_countries(code, name) values('bz', 'Belize') on conflict do nothing;\ninsert into gha_countries(code, name) values('bj', 'Benin') on conflict do nothing;\ninsert into gha_countries(code, name) values('bm', 'Bermuda') on conflict do nothing;\ninsert into gha_countries(code, name) values('bt', 'Bhutan') on conflict do nothing;\ninsert into gha_countries(code, name) values('bo', 'Bolivia, Plurinational State of') on conflict do nothing;\ninsert into gha_countries(code, name) values('bq', 'Bonaire, Sint Eustatius and Saba') on conflict do nothing;\ninsert into gha_countries(code, name) values('ba', 'Bosnia and Herzegovina') on conflict do nothing;\ninsert into gha_countries(code, name) values('bw', 'Botswana') on conflict do nothing;\ninsert into gha_countries(code, name) values('bv', 'Bouvet Island') on conflict do nothing;\ninsert into gha_countries(code, name) values('br', 'Brazil') on conflict do nothing;\ninsert into gha_countries(code, name) values('io', 'British Indian Ocean Territory') on conflict do nothing;\ninsert into gha_countries(code, name) values('bn', 'Brunei Darussalam') on conflict do nothing;\ninsert into gha_countries(code, name) values('bg', 'Bulgaria') on conflict do nothing;\ninsert into gha_countries(code, name) values('bf', 'Burkina Faso') on conflict do nothing;\ninsert into gha_countries(code, name) values('bi', 'Burundi') on conflict do nothing;\ninsert into gha_countries(code, name) values('kh', 'Cambodia') on conflict do nothing;\ninsert into gha_countries(code, name) values('cm', 'Cameroon') on conflict do nothing;\ninsert into gha_countries(code, name) values('ca', 'Canada') on conflict do nothing;\ninsert into gha_countries(code, name) values('cv', 'Cape Verde') on conflict do nothing;\ninsert into gha_countries(code, name) values('ky', 'Cayman Islands') on conflict do nothing;\ninsert into gha_countries(code, name) values('cf', 'Central African Republic') on conflict do nothing;\ninsert into gha_countries(code, name) values('td', 'Chad') on conflict do nothing;\ninsert into gha_countries(code, name) values('cl', 'Chile') on conflict do nothing;\ninsert into gha_countries(code, name) values('cn', 'China') on conflict do nothing;\ninsert into gha_countries(code, name) values('cx', 'Christmas Island') on conflict do nothing;\ninsert into gha_countries(code, name) values('cc', 'Cocos (Keeling) Islands') on conflict do nothing;\ninsert into gha_countries(code, name) values('co', 'Colombia') on conflict do nothing;\ninsert into gha_countries(code, name) values('km', 'Comoros') on conflict do nothing;\ninsert into gha_countries(code, name) values('cg', 'Congo') on conflict do nothing;\ninsert into gha_countries(code, name) values('cd', 'Congo, the Democratic Republic of the') on conflict do nothing;\ninsert into gha_countries(code, name) values('ck', 'Cook Islands') on conflict do nothing;\ninsert into gha_countries(code, name) values('cr', 'Costa Rica') on conflict do nothing;\ninsert into gha_countries(code, name) values('ci', 'Côte D''ivoire') on conflict do nothing;\ninsert into gha_countries(code, name) values('hr', 'Croatia') on conflict do nothing;\ninsert into gha_countries(code, name) values('cu', 'Cuba') on conflict do nothing;\ninsert into gha_countries(code, name) values('cw', 'Curaçao') on conflict do nothing;\ninsert into gha_countries(code, name) values('cy', 'Cyprus') on conflict do nothing;\ninsert into gha_countries(code, name) values('cz', 'Czech Republic') on conflict do nothing;\ninsert into gha_countries(code, name) values('dk', 'Denmark') on conflict do nothing;\ninsert into gha_countries(code, name) values('dj', 'Djibouti') on conflict do nothing;\ninsert into gha_countries(code, name) values('dm', 'Dominica') on conflict do nothing;\ninsert into gha_countries(code, name) values('do', 'Dominican Republic') on conflict do nothing;\ninsert into gha_countries(code, name) values('ec', 'Ecuador') on conflict do nothing;\ninsert into gha_countries(code, name) values('eg', 'Egypt') on conflict do nothing;\ninsert into gha_countries(code, name) values('sv', 'El Salvador') on conflict do nothing;\ninsert into gha_countries(code, name) values('gq', 'Equatorial Guinea') on conflict do nothing;\ninsert into gha_countries(code, name) values('er', 'Eritrea') on conflict do nothing;\ninsert into gha_countries(code, name) values('ee', 'Estonia') on conflict do nothing;\ninsert into gha_countries(code, name) values('et', 'Ethiopia') on conflict do nothing;\ninsert into gha_countries(code, name) values('fk', 'Falkland Islands (Malvinas)') on conflict do nothing;\ninsert into gha_countries(code, name) values('fo', 'Faroe Islands') on conflict do nothing;\ninsert into gha_countries(code, name) values('fj', 'Fiji') on conflict do nothing;\ninsert into gha_countries(code, name) values('fi', 'Finland') on conflict do nothing;\ninsert into gha_countries(code, name) values('fr', 'France') on conflict do nothing;\ninsert into gha_countries(code, name) values('gf', 'French Guiana') on conflict do nothing;\ninsert into gha_countries(code, name) values('pf', 'French Polynesia') on conflict do nothing;\ninsert into gha_countries(code, name) values('tf', 'French Southern Territories') on conflict do nothing;\ninsert into gha_countries(code, name) values('ga', 'Gabon') on conflict do nothing;\ninsert into gha_countries(code, name) values('gm', 'Gambia') on conflict do nothing;\ninsert into gha_countries(code, name) values('ge', 'Georgia') on conflict do nothing;\ninsert into gha_countries(code, name) values('de', 'Germany') on conflict do nothing;\ninsert into gha_countries(code, name) values('gh', 'Ghana') on conflict do nothing;\ninsert into gha_countries(code, name) values('gi', 'Gibraltar') on conflict do nothing;\ninsert into gha_countries(code, name) values('gr', 'Greece') on conflict do nothing;\ninsert into gha_countries(code, name) values('gl', 'Greenland') on conflict do nothing;\ninsert into gha_countries(code, name) values('gd', 'Grenada') on conflict do nothing;\ninsert into gha_countries(code, name) values('gp', 'Guadeloupe') on conflict do nothing;\ninsert into gha_countries(code, name) values('gu', 'Guam') on conflict do nothing;\ninsert into gha_countries(code, name) values('gt', 'Guatemala') on conflict do nothing;\ninsert into gha_countries(code, name) values('gg', 'Guernsey') on conflict do nothing;\ninsert into gha_countries(code, name) values('gn', 'Guinea') on conflict do nothing;\ninsert into gha_countries(code, name) values('gw', 'Guinea-Bissau') on conflict do nothing;\ninsert into gha_countries(code, name) values('gy', 'Guyana') on conflict do nothing;\ninsert into gha_countries(code, name) values('ht', 'Haiti') on conflict do nothing;\ninsert into gha_countries(code, name) values('hm', 'Heard Island and Mcdonald Islands') on conflict do nothing;\ninsert into gha_countries(code, name) values('va', 'Holy See (Vatican City State)') on conflict do nothing;\ninsert into gha_countries(code, name) values('hn', 'Honduras') on conflict do nothing;\ninsert into gha_countries(code, name) values('hk', 'Hong Kong') on conflict do nothing;\ninsert into gha_countries(code, name) values('hu', 'Hungary') on conflict do nothing;\ninsert into gha_countries(code, name) values('is', 'Iceland') on conflict do nothing;\ninsert into gha_countries(code, name) values('in', 'India') on conflict do nothing;\ninsert into gha_countries(code, name) values('id', 'Indonesia') on conflict do nothing;\ninsert into gha_countries(code, name) values('ir', 'Iran, Islamic Republic of') on conflict do nothing;\ninsert into gha_countries(code, name) values('iq', 'Iraq') on conflict do nothing;\ninsert into gha_countries(code, name) values('ie', 'Ireland') on conflict do nothing;\ninsert into gha_countries(code, name) values('im', 'Isle of Man') on conflict do nothing;\ninsert into gha_countries(code, name) values('il', 'Israel') on conflict do nothing;\ninsert into gha_countries(code, name) values('it', 'Italy') on conflict do nothing;\ninsert into gha_countries(code, name) values('jm', 'Jamaica') on conflict do nothing;\ninsert into gha_countries(code, name) values('jp', 'Japan') on conflict do nothing;\ninsert into gha_countries(code, name) values('je', 'Jersey') on conflict do nothing;\ninsert into gha_countries(code, name) values('jo', 'Jordan') on conflict do nothing;\ninsert into gha_countries(code, name) values('kz', 'Kazakhstan') on conflict do nothing;\ninsert into gha_countries(code, name) values('ke', 'Kenya') on conflict do nothing;\ninsert into gha_countries(code, name) values('ki', 'Kiribati') on conflict do nothing;\ninsert into gha_countries(code, name) values('kp', 'Korea, Democratic People''s Republic of') on conflict do nothing;\ninsert into gha_countries(code, name) values('kr', 'Korea, Republic of') on conflict do nothing;\ninsert into gha_countries(code, name) values('kw', 'Kuwait') on conflict do nothing;\ninsert into gha_countries(code, name) values('kg', 'Kyrgyzstan') on conflict do nothing;\ninsert into gha_countries(code, name) values('la', 'Lao People''s Democratic Republic') on conflict do nothing;\ninsert into gha_countries(code, name) values('lv', 'Latvia') on conflict do nothing;\ninsert into gha_countries(code, name) values('lb', 'Lebanon') on conflict do nothing;\ninsert into gha_countries(code, name) values('ls', 'Lesotho') on conflict do nothing;\ninsert into gha_countries(code, name) values('lr', 'Liberia') on conflict do nothing;\ninsert into gha_countries(code, name) values('ly', 'Libya') on conflict do nothing;\ninsert into gha_countries(code, name) values('li', 'Liechtenstein') on conflict do nothing;\ninsert into gha_countries(code, name) values('lt', 'Lithuania') on conflict do nothing;\ninsert into gha_countries(code, name) values('lu', 'Luxembourg') on conflict do nothing;\ninsert into gha_countries(code, name) values('mo', 'Macao') on conflict do nothing;\ninsert into gha_countries(code, name) values('mk', 'Macedonia, the Former Yugoslav Republic of') on conflict do nothing;\ninsert into gha_countries(code, name) values('mg', 'Madagascar') on conflict do nothing;\ninsert into gha_countries(code, name) values('mw', 'Malawi') on conflict do nothing;\ninsert into gha_countries(code, name) values('my', 'Malaysia') on conflict do nothing;\ninsert into gha_countries(code, name) values('mv', 'Maldives') on conflict do nothing;\ninsert into gha_countries(code, name) values('ml', 'Mali') on conflict do nothing;\ninsert into gha_countries(code, name) values('mt', 'Malta') on conflict do nothing;\ninsert into gha_countries(code, name) values('mh', 'Marshall Islands') on conflict do nothing;\ninsert into gha_countries(code, name) values('mq', 'Martinique') on conflict do nothing;\ninsert into gha_countries(code, name) values('mr', 'Mauritania') on conflict do nothing;\ninsert into gha_countries(code, name) values('mu', 'Mauritius') on conflict do nothing;\ninsert into gha_countries(code, name) values('yt', 'Mayotte') on conflict do nothing;\ninsert into gha_countries(code, name) values('mx', 'Mexico') on conflict do nothing;\ninsert into gha_countries(code, name) values('fm', 'Micronesia, Federated States of') on conflict do nothing;\ninsert into gha_countries(code, name) values('md', 'Moldova, Republic of') on conflict do nothing;\ninsert into gha_countries(code, name) values('mc', 'Monaco') on conflict do nothing;\ninsert into gha_countries(code, name) values('mn', 'Mongolia') on conflict do nothing;\ninsert into gha_countries(code, name) values('me', 'Montenegro') on conflict do nothing;\ninsert into gha_countries(code, name) values('ms', 'Montserrat') on conflict do nothing;\ninsert into gha_countries(code, name) values('ma', 'Morocco') on conflict do nothing;\ninsert into gha_countries(code, name) values('mz', 'Mozambique') on conflict do nothing;\ninsert into gha_countries(code, name) values('mm', 'Myanmar') on conflict do nothing;\ninsert into gha_countries(code, name) values('na', 'Namibia') on conflict do nothing;\ninsert into gha_countries(code, name) values('nr', 'Nauru') on conflict do nothing;\ninsert into gha_countries(code, name) values('np', 'Nepal') on conflict do nothing;\ninsert into gha_countries(code, name) values('nl', 'Netherlands') on conflict do nothing;\ninsert into gha_countries(code, name) values('nc', 'New Caledonia') on conflict do nothing;\ninsert into gha_countries(code, name) values('nz', 'New Zealand') on conflict do nothing;\ninsert into gha_countries(code, name) values('ni', 'Nicaragua') on conflict do nothing;\ninsert into gha_countries(code, name) values('ne', 'Niger') on conflict do nothing;\ninsert into gha_countries(code, name) values('ng', 'Nigeria') on conflict do nothing;\ninsert into gha_countries(code, name) values('nu', 'Niue') on conflict do nothing;\ninsert into gha_countries(code, name) values('nf', 'Norfolk Island') on conflict do nothing;\ninsert into gha_countries(code, name) values('mp', 'Northern Mariana Islands') on conflict do nothing;\ninsert into gha_countries(code, name) values('no', 'Norway') on conflict do nothing;\ninsert into gha_countries(code, name) values('om', 'Oman') on conflict do nothing;\ninsert into gha_countries(code, name) values('pk', 'Pakistan') on conflict do nothing;\ninsert into gha_countries(code, name) values('pw', 'Palau') on conflict do nothing;\ninsert into gha_countries(code, name) values('ps', 'Palestine, State of') on conflict do nothing;\ninsert into gha_countries(code, name) values('pa', 'Panama') on conflict do nothing;\ninsert into gha_countries(code, name) values('pg', 'Papua New Guinea') on conflict do nothing;\ninsert into gha_countries(code, name) values('py', 'Paraguay') on conflict do nothing;\ninsert into gha_countries(code, name) values('pe', 'Peru') on conflict do nothing;\ninsert into gha_countries(code, name) values('ph', 'Philippines') on conflict do nothing;\ninsert into gha_countries(code, name) values('pn', 'Pitcairn') on conflict do nothing;\ninsert into gha_countries(code, name) values('pl', 'Poland') on conflict do nothing;\ninsert into gha_countries(code, name) values('pt', 'Portugal') on conflict do nothing;\ninsert into gha_countries(code, name) values('pr', 'Puerto Rico') on conflict do nothing;\ninsert into gha_countries(code, name) values('qa', 'Qatar') on conflict do nothing;\ninsert into gha_countries(code, name) values('re', 'Réunion') on conflict do nothing;\ninsert into gha_countries(code, name) values('ro', 'Romania') on conflict do nothing;\ninsert into gha_countries(code, name) values('ru', 'Russian Federation') on conflict do nothing;\ninsert into gha_countries(code, name) values('rw', 'Rwanda') on conflict do nothing;\ninsert into gha_countries(code, name) values('bl', 'Saint Barthélemy') on conflict do nothing;\ninsert into gha_countries(code, name) values('sh', 'Saint Helena, Ascension and Tristan da Cunha') on conflict do nothing;\ninsert into gha_countries(code, name) values('kn', 'Saint Kitts and Nevis') on conflict do nothing;\ninsert into gha_countries(code, name) values('lc', 'Saint Lucia') on conflict do nothing;\ninsert into gha_countries(code, name) values('mf', 'Saint Martin (French Part)') on conflict do nothing;\ninsert into gha_countries(code, name) values('pm', 'Saint Pierre and Miquelon') on conflict do nothing;\ninsert into gha_countries(code, name) values('vc', 'Saint Vincent and the Grenadines') on conflict do nothing;\ninsert into gha_countries(code, name) values('ws', 'Samoa') on conflict do nothing;\ninsert into gha_countries(code, name) values('sm', 'San Marino') on conflict do nothing;\ninsert into gha_countries(code, name) values('st', 'Sao Tome and Principe') on conflict do nothing;\ninsert into gha_countries(code, name) values('sa', 'Saudi Arabia') on conflict do nothing;\ninsert into gha_countries(code, name) values('sn', 'Senegal') on conflict do nothing;\ninsert into gha_countries(code, name) values('rs', 'Serbia') on conflict do nothing;\ninsert into gha_countries(code, name) values('sc', 'Seychelles') on conflict do nothing;\ninsert into gha_countries(code, name) values('sl', 'Sierra Leone') on conflict do nothing;\ninsert into gha_countries(code, name) values('sg', 'Singapore') on conflict do nothing;\ninsert into gha_countries(code, name) values('sx', 'Sint Maarten (Dutch Part)') on conflict do nothing;\ninsert into gha_countries(code, name) values('sk', 'Slovakia') on conflict do nothing;\ninsert into gha_countries(code, name) values('si', 'Slovenia') on conflict do nothing;\ninsert into gha_countries(code, name) values('sb', 'Solomon Islands') on conflict do nothing;\ninsert into gha_countries(code, name) values('so', 'Somalia') on conflict do nothing;\ninsert into gha_countries(code, name) values('za', 'South Africa') on conflict do nothing;\ninsert into gha_countries(code, name) values('gs', 'South Georgia and the South Sandwich Islands') on conflict do nothing;\ninsert into gha_countries(code, name) values('ss', 'South Sudan') on conflict do nothing;\ninsert into gha_countries(code, name) values('es', 'Spain') on conflict do nothing;\ninsert into gha_countries(code, name) values('lk', 'Sri Lanka') on conflict do nothing;\ninsert into gha_countries(code, name) values('sd', 'Sudan') on conflict do nothing;\ninsert into gha_countries(code, name) values('sr', 'Suriname') on conflict do nothing;\ninsert into gha_countries(code, name) values('sj', 'Svalbard and Jan Mayen') on conflict do nothing;\ninsert into gha_countries(code, name) values('sz', 'Swaziland') on conflict do nothing;\ninsert into gha_countries(code, name) values('se', 'Sweden') on conflict do nothing;\ninsert into gha_countries(code, name) values('ch', 'Switzerland') on conflict do nothing;\ninsert into gha_countries(code, name) values('sy', 'Syrian Arab Republic') on conflict do nothing;\ninsert into gha_countries(code, name) values('tw', 'Taiwan, Province of China') on conflict do nothing;\ninsert into gha_countries(code, name) values('tj', 'Tajikistan') on conflict do nothing;\ninsert into gha_countries(code, name) values('tz', 'Tanzania, United Republic of') on conflict do nothing;\ninsert into gha_countries(code, name) values('th', 'Thailand') on conflict do nothing;\ninsert into gha_countries(code, name) values('tl', 'Timor-Leste') on conflict do nothing;\ninsert into gha_countries(code, name) values('tg', 'Togo') on conflict do nothing;\ninsert into gha_countries(code, name) values('tk', 'Tokelau') on conflict do nothing;\ninsert into gha_countries(code, name) values('to', 'Tonga') on conflict do nothing;\ninsert into gha_countries(code, name) values('tt', 'Trinidad and Tobago') on conflict do nothing;\ninsert into gha_countries(code, name) values('tn', 'Tunisia') on conflict do nothing;\ninsert into gha_countries(code, name) values('tr', 'Turkey') on conflict do nothing;\ninsert into gha_countries(code, name) values('tm', 'Turkmenistan') on conflict do nothing;\ninsert into gha_countries(code, name) values('tc', 'Turks and Caicos Islands') on conflict do nothing;\ninsert into gha_countries(code, name) values('tv', 'Tuvalu') on conflict do nothing;\ninsert into gha_countries(code, name) values('ug', 'Uganda') on conflict do nothing;\ninsert into gha_countries(code, name) values('ua', 'Ukraine') on conflict do nothing;\ninsert into gha_countries(code, name) values('ae', 'United Arab Emirates') on conflict do nothing;\ninsert into gha_countries(code, name) values('gb', 'United Kingdom') on conflict do nothing;\ninsert into gha_countries(code, name) values('us', 'United States') on conflict do nothing;\ninsert into gha_countries(code, name) values('um', 'United States Minor Outlying Islands') on conflict do nothing;\ninsert into gha_countries(code, name) values('uy', 'Uruguay') on conflict do nothing;\ninsert into gha_countries(code, name) values('uz', 'Uzbekistan') on conflict do nothing;\ninsert into gha_countries(code, name) values('vu', 'Vanuatu') on conflict do nothing;\ninsert into gha_countries(code, name) values('ve', 'Venezuela, Bolivarian Republic of') on conflict do nothing;\ninsert into gha_countries(code, name) values('vn', 'Viet Nam') on conflict do nothing;\ninsert into gha_countries(code, name) values('vg', 'Virgin Islands, British') on conflict do nothing;\ninsert into gha_countries(code, name) values('vi', 'Virgin Islands, U.S.') on conflict do nothing;\ninsert into gha_countries(code, name) values('wf', 'Wallis and Futuna') on conflict do nothing;\ninsert into gha_countries(code, name) values('eh', 'Western Sahara') on conflict do nothing;\ninsert into gha_countries(code, name) values('ye', 'Yemen') on conflict do nothing;\ninsert into gha_countries(code, name) values('zm', 'Zambia') on conflict do nothing;\ninsert into gha_countries(code, name) values('zw', 'Zimbabwe') on conflict do nothing;\ninsert into gha_countries(code, name) values('cs', 'Serbia and Montenegro') on conflict do nothing;\n"
  },
  {
    "path": "devstats/config/util_sql/create_events_commits.sql",
    "content": "insert into gha_events_commits_files(\n  sha,\n  event_id,\n  path,\n  dt,\n  size,\n  dup_repo_id,\n  dup_repo_name,\n  dup_type,\n  dup_created_at\n)\nselect\n  distinct sub.sha,\n  sub.event_id,\n  sub.path,\n  sub.dt,\n  sub.size,\n  sub.dup_repo_id,\n  sub.dup_repo_name,\n  sub.dup_type,\n  sub.dup_created_at\nfrom (\n  select cf.sha,\n    c.event_id,\n    c.dup_repo_name || '/' || cf.path as path,\n    cf.dt,\n    cf.size,\n    c.dup_repo_id,\n    c.dup_repo_name,\n    c.dup_type,\n    c.dup_created_at\n  from\n    gha_comments c,\n    gha_commits_files cf\n  where\n    c.commit_id = cf.sha\n    -- or c.original_commit_id = cf.sha\n  union select cf.sha,\n    c.event_id,\n    c.dup_repo_name || '/' || cf.path as path,\n    cf.dt,\n    cf.size,\n    c.dup_repo_id,\n    c.dup_repo_name,\n    c.dup_type,\n    c.dup_created_at\n  from\n    gha_commits c,\n    gha_commits_files cf\n  where\n    c.sha = cf.sha\n  union select cf.sha,\n    p.event_id,\n    p.dup_repo_name || '/' || cf.path as path,\n    cf.dt,\n    cf.size,\n    p.dup_repo_id,\n    p.dup_repo_name,\n    p.dup_type,\n    p.dup_created_at\n  from\n    gha_pages p,\n    gha_commits_files cf\n  where\n    p.sha = cf.sha\n  union select cf.sha,\n    pl.event_id,\n    pl.dup_repo_name || '/' || cf.path as path,\n    cf.dt,\n    cf.size,\n    pl.dup_repo_id,\n    pl.dup_repo_name,\n    pl.dup_type,\n    pl.dup_created_at\n  from\n    gha_payloads pl,\n    gha_commits_files cf\n  where\n    pl.dup_type in ('PushEvent')\n    and (\n      pl.head = cf.sha\n      or pl.commit = cf.sha\n    )\n  union select cf.sha,\n    pr.event_id,\n    pr.dup_repo_name || '/' || cf.path as path,\n    cf.dt,\n    cf.size,\n    pr.dup_repo_id,\n    pr.dup_repo_name,\n    pr.dup_type,\n    pr.dup_created_at\n  from\n    gha_pull_requests pr,\n    gha_commits_files cf\n  where\n    pr.dup_type in ('PullRequestReviewCommentEvent', 'PullRequestEvent')\n    and (\n      pr.head_sha = cf.sha\n      or pr.merge_commit_sha = cf.sha\n    )\n  ) sub\nleft join gha_events_commits_files ecf\non\n  sub.sha = ecf.sha\n  and sub.path = ecf.path\n  and sub.event_id = ecf.event_id\nwhere\n  ecf.sha is null\n;\n"
  },
  {
    "path": "devstats/config/util_sql/default_postprocess_scripts.sql",
    "content": "insert into gha_postprocess_scripts(ord, path) select 1, 'util_sql/postprocess_texts.sql' on conflict do nothing;\ninsert into gha_postprocess_scripts(ord, path) select 2, 'util_sql/postprocess_labels.sql' on conflict do nothing;\ninsert into gha_postprocess_scripts(ord, path) select 3, 'util_sql/postprocess_issues_prs.sql' on conflict do nothing;\n"
  },
  {
    "path": "devstats/config/util_sql/devstats_log_table.sql",
    "content": "CREATE TABLE gha_logs (\n    id integer NOT NULL,\n    dt timestamp without time zone DEFAULT now(),\n    msg text,\n    prog character varying(32) not null default '',\n    proj character varying(32) not null,\n    run_dt timestamp without time zone not null\n);\nALTER TABLE gha_logs OWNER TO gha_admin;\nCREATE SEQUENCE gha_logs_id_seq\n    START WITH 1\n    INCREMENT BY 1\n    NO MINVALUE\n    NO MAXVALUE\n    CACHE 1;\nALTER TABLE gha_logs_id_seq OWNER TO gha_admin;\nALTER SEQUENCE gha_logs_id_seq OWNED BY gha_logs.id;\nALTER TABLE ONLY gha_logs ALTER COLUMN id SET DEFAULT nextval('gha_logs_id_seq'::regclass);\nCREATE INDEX logs_dt_idx ON gha_logs USING btree (dt);\nCREATE INDEX logs_id_idx ON gha_logs USING btree (id);\n"
  },
  {
    "path": "devstats/config/util_sql/drop_psql_user.sql",
    "content": "REVOKE ALL ON ALL TABLES IN SCHEMA public FROM \"{{user}}\";\nREVOKE ALL ON ALL SEQUENCES IN SCHEMA public FROM \"{{user}}\";\nREVOKE ALL ON ALL FUNCTIONS IN SCHEMA public FROM \"{{user}}\";\nREASSIGN OWNED BY \"{{user}}\" TO postgres;\nDROP OWNED BY \"{{user}}\";\nDROP USER \"{{user}}\";\n"
  },
  {
    "path": "devstats/config/util_sql/drop_ro_user.sql",
    "content": "REVOKE ALL ON ALL TABLES IN SCHEMA public FROM ro_user;\nREVOKE ALL ON ALL SEQUENCES IN SCHEMA public FROM ro_user;\nREVOKE ALL ON ALL FUNCTIONS IN SCHEMA public FROM ro_user;\nREASSIGN OWNED BY ro_user TO postgres;\nDROP OWNED BY ro_user;\nDROP USER ro_user;\n"
  },
  {
    "path": "devstats/config/util_sql/exclude_bots.sql",
    "content": "not like all(array['devstats-sync', 'googlebot', 'coveralls', 'rktbot', 'coreosbot', 'web-flow', 'openstack-gerrit', 'prometheus-roobot', 'k8s-%', '%-bot', '%-robot', 'bot-%', 'robot-%', '%[bot]%', '%-jenkins', '%-ci%bot', '%-testing', 'codecov-%', '%clabot%', '%cla-bot%'])\n"
  },
  {
    "path": "devstats/config/util_sql/list_unprocessed_commits.sql",
    "content": "select\n  distinct sub.sha, sub.repo\nfrom (\n  select distinct commit_id as sha, dup_repo_name as repo from gha_comments\n  union select distinct original_commit_id as sha, dup_repo_name as repo from gha_comments where original_commit_id is not null\n  union select distinct sha, dup_repo_name as repo from gha_commits\n  union select distinct sha, dup_repo_name as repo from gha_pages\n  union select distinct head as sha, dup_repo_name as repo from gha_payloads\n  union select distinct befor as sha, dup_repo_name as repo from gha_payloads\n  union select distinct commit as sha, dup_repo_name as repo from gha_payloads where commit is not null\n  union select distinct base_sha as sha, dup_repo_name as repo from gha_pull_requests\n  union select distinct head_sha as sha, dup_repo_name as repo from gha_pull_requests\n  union select distinct merge_commit_sha as sha, dup_repo_name as repo from gha_pull_requests where merge_commit_sha is not null\n  ) sub\nleft join gha_skip_commits sc on sub.sha = sc.sha\nleft join gha_commits_files cf on sub.sha = cf.sha\nwhere\n  sc.sha is null\n  and cf.sha is null\n  and sub.sha is not null\n  and sub.sha <> ''\n  and sub.repo like '%/%'\n;\n"
  },
  {
    "path": "devstats/config/util_sql/postprocess_issues_prs.sql",
    "content": "with issue as (\n  select\n    coalesce(max(issue_id), -9223372036854775808) as max_id\n  from\n    gha_issues_pull_requests\n), pr as (\n  select\n    coalesce(max(pull_request_id), -9223372036854775808) as max_id\n  from\n    gha_issues_pull_requests\n)\ninsert into gha_issues_pull_requests(\n  issue_id, pull_request_id, number, repo_id, repo_name, created_at\n)\nselect\n  distinct i.id, pr.id, i.number, i.dup_repo_id, i.dup_repo_name, pr.created_at\nfrom\n  gha_issues i,\n  gha_pull_requests pr\nwhere\n  i.number = pr.number\n  and i.dup_repo_id = pr.dup_repo_id\n  and i.id > (\n    select max_id from issue\n  )\n  and pr.id > (\n    select max_id from pr\n  )\n;\n"
  },
  {
    "path": "devstats/config/util_sql/postprocess_labels.sql",
    "content": "with var as (\n  select\n    coalesce(max(event_id), -9223372036854775808) as max_event_id,\n    0 as opt\n  from\n    gha_issues_events_labels\n  where\n    type like '%Event'\n  union select coalesce(max(event_id), 281474976710657) as max_event_id,\n    1 as opt\n  from\n    gha_issues_events_labels\n  where\n    type not like '%Event'\n    and type != 'sync'\n  union select coalesce(max(event_id), 329900000000000) as max_event_id,\n    2 as opt\n  from\n    gha_issues_events_labels\n  where\n    type = 'sync'\n)\ninsert into gha_issues_events_labels(\n  issue_id, event_id, label_id, label_name, created_at,\n  repo_id, repo_name, actor_id, actor_login, type, issue_number\n)\nselect\n  il.issue_id, il.event_id, lb.id, lb.name, il.dup_created_at,\n  il.dup_repo_id, il.dup_repo_name, il.dup_actor_id, il.dup_actor_login, il.dup_type, il.dup_issue_number\nfrom\n  gha_issues_labels il,\n  gha_labels lb\nwhere\n  il.label_id = lb.id\n  and (\n    (\n      il.event_id > (\n        select max_event_id from var where opt = 0\n      )\n      and il.event_id < 281474976710657\n    )\n    or (\n      il.event_id > (\n        select max_event_id from var where opt = 1\n      )\n      and il.event_id >= 281474976710657\n      and il.event_id < 329900000000000\n    )\n    or (\n      il.event_id > (\n        select max_event_id from var where opt = 2\n      )\n      and il.event_id >= 329900000000000\n    )\n  )\n;\n"
  },
  {
    "path": "devstats/config/util_sql/postprocess_repo_groups_from_repos.sql",
    "content": "-- Finally update repo_group from repository definition (where it is not yet set from files paths)\nupdate\n  gha_events_commits_files ecf\nset\n  repo_group = r.repo_group\nfrom\n  gha_repos r\nwhere\n  r.name = ecf.dup_repo_name\n  and r.repo_group is not null\n  and ecf.repo_group is null\n;\n\n"
  },
  {
    "path": "devstats/config/util_sql/postprocess_texts.sql",
    "content": "with var as (\n  select\n    coalesce(max(event_id), -9223372036854775808) as max_event_id,\n    0 as opt\n  from\n    gha_texts\n  where\n    type like '%Event'\n  union select coalesce(max(event_id), 281474976710657) as max_event_id,\n    1 as opt\n  from\n    gha_texts\n  where\n    type not like '%Event'\n    and type != 'sync'\n  union select coalesce(max(event_id), 329900000000000) as max_event_id,\n    2 as opt\n  from\n    gha_texts\n  where\n    type = 'sync'\n)\ninsert into gha_texts(\n  event_id, body, created_at, repo_id, repo_name, actor_id, actor_login, type\n) \nselect\n  event_id, body, created_at, dup_repo_id, dup_repo_name, dup_actor_id, dup_actor_login, dup_type\nfrom\n  gha_comments \nwhere\n  body != ''\n  and (\n    (\n      event_id > (\n        select max_event_id from var where opt = 0\n      )\n      and event_id < 281474976710657\n    )\n    or (\n      event_id > (\n        select max_event_id from var where opt = 1\n      )\n      and event_id >= 281474976710657\n      and event_id < 329900000000000\n    )\n    or (\n      event_id > (\n        select max_event_id from var where opt = 2\n      )\n      and event_id >= 329900000000000\n    )\n  )\nunion select\n  event_id, message, dup_created_at, dup_repo_id, dup_repo_name, dup_actor_id, dup_actor_login, dup_type\nfrom\n  gha_commits\nwhere\n  message != ''\n  and (\n    (\n      event_id > (\n        select max_event_id from var where opt = 0\n      )\n      and event_id < 281474976710657\n    )\n    or (\n      event_id > (\n        select max_event_id from var where opt = 1\n      )\n      and event_id >= 281474976710657\n      and event_id < 329900000000000\n    )\n    or (\n      event_id > (\n        select max_event_id from var where opt = 2\n      )\n      and event_id >= 329900000000000\n    )\n  )\nunion select\n  event_id, title, created_at, dup_repo_id, dup_repo_name, dup_actor_id, dup_actor_login, dup_type\nfrom\n  gha_issues\nwhere\n  title != ''\n  and (\n    (\n      event_id > (\n        select max_event_id from var where opt = 0\n      )\n      and event_id < 281474976710657\n    )\n    or (\n      event_id > (\n        select max_event_id from var where opt = 1\n      )\n      and event_id >= 281474976710657\n      and event_id < 329900000000000\n    )\n    or (\n      event_id > (\n        select max_event_id from var where opt = 2\n      )\n      and event_id >= 329900000000000\n    )\n  )\nunion select\n  event_id, body, created_at, dup_repo_id, dup_repo_name, dup_actor_id, dup_actor_login, dup_type\nfrom\n  gha_issues\nwhere\n  body != ''\n  and (\n    (\n      event_id > (\n        select max_event_id from var where opt = 0\n      )\n      and event_id < 281474976710657\n    )\n    or (\n      event_id > (\n        select max_event_id from var where opt = 1\n      )\n      and event_id >= 281474976710657\n      and event_id < 329900000000000\n    )\n    or (\n      event_id > (\n        select max_event_id from var where opt = 2\n      )\n      and event_id >= 329900000000000\n    )\n  )\nunion select \n  event_id, title, created_at, dup_repo_id, dup_repo_name, dup_actor_id, dup_actor_login, dup_type\nfrom\n  gha_pull_requests\nwhere\n  title != ''\n  and (\n    (\n      event_id > (\n        select max_event_id from var where opt = 0\n      )\n      and event_id < 281474976710657\n    )\n    or (\n      event_id > (\n        select max_event_id from var where opt = 1\n      )\n      and event_id >= 281474976710657\n      and event_id < 329900000000000\n    )\n    or (\n      event_id > (\n        select max_event_id from var where opt = 2\n      )\n      and event_id >= 329900000000000\n    )\n  )\nunion select\n  event_id, body, created_at, dup_repo_id, dup_repo_name, dup_actor_id, dup_actor_login, dup_type\nfrom\n  gha_pull_requests\nwhere\n  body != ''\n  and (\n    (\n      event_id > (\n        select max_event_id from var where opt = 0\n      )\n      and event_id < 281474976710657\n    )\n    or (\n      event_id > (\n        select max_event_id from var where opt = 1\n      )\n      and event_id >= 281474976710657\n      and event_id < 329900000000000\n    )\n    or (\n      event_id > (\n        select max_event_id from var where opt = 2\n      )\n      and event_id >= 329900000000000\n    )\n  )\n;\n"
  },
  {
    "path": "devstats/config/util_sql/repo_groups_postprocess_script_from_repos.sql",
    "content": "insert into gha_postprocess_scripts(ord, path) select 5, 'util_sql/postprocess_repo_groups_from_repos.sql' on conflict do nothing;\n\n"
  },
  {
    "path": "devstats/config/util_sql/update_country_names.sql",
    "content": "update\n  gha_actors a\nset\n  country_name = (\n    select name\n    from\n      gha_countries\n    where\n      code = a.country_id\n  )\nwhere\n  country_id is not null\n  and country_id != ''\n;\n"
  },
  {
    "path": "devstats/data/github_users.json",
    "content": "[\n  {\n    \"login\": \"k8s-ci-robot\",\n    \"id\": 20407524,\n    \"node_id\": \"MDQ6VXNlcjIwNDA3NTI0\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/20407524?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/k8s-ci-robot\",\n    \"html_url\": \"https://github.com/k8s-ci-robot\",\n    \"followers_url\": \"https://api.github.com/users/k8s-ci-robot/followers\",\n    \"following_url\": \"https://api.github.com/users/k8s-ci-robot/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/k8s-ci-robot/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/k8s-ci-robot/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/k8s-ci-robot/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/k8s-ci-robot/orgs\",\n    \"repos_url\": \"https://api.github.com/users/k8s-ci-robot/repos\",\n    \"events_url\": \"https://api.github.com/users/k8s-ci-robot/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/k8s-ci-robot/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Kubernetes Prow Robot\",\n    \"company\": null,\n    \"blog\": \"https://github.com/kubernetes/test-infra/tree/master/prow#bots-home\",\n    \"location\": \"The Cloud\",\n    \"email\": \"k8s-ci-robot!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"I run your tests, add your labels, and merge your code.\",\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 82,\n    \"following\": 0,\n    \"created_at\": \"2016-07-11 21:15:57 UTC\",\n    \"updated_at\": \"2019-01-11 23:21:32 UTC\",\n    \"commits\": 2611\n  },\n  {\n    \"login\": \"jlewi\",\n    \"id\": 777219,\n    \"node_id\": \"MDQ6VXNlcjc3NzIxOQ==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/777219?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jlewi\",\n    \"html_url\": \"https://github.com/jlewi\",\n    \"followers_url\": \"https://api.github.com/users/jlewi/followers\",\n    \"following_url\": \"https://api.github.com/users/jlewi/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jlewi/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jlewi/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jlewi/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jlewi/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jlewi/repos\",\n    \"events_url\": \"https://api.github.com/users/jlewi/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jlewi/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jeremy Lewi\",\n    \"company\": \"Google\",\n    \"blog\": \"https://github.com/google/kubeflow\",\n    \"location\": \"San Francisco Bay Area\",\n    \"email\": \"jeremy!lewi.us\",\n    \"hireable\": null,\n    \"bio\": \"I'm the lead engineer at Google.\\r\\nfor Kubeflow.\\r\\n\\r\\nkubeflow.slack.com id: Jeremy Lewi\\r\\n\\r\\nPrior to that I worked on Cloud Machine Learning Engine and Dataflow\",\n    \"public_repos\": 51,\n    \"public_gists\": 52,\n    \"followers\": 135,\n    \"following\": 1,\n    \"created_at\": \"2011-05-09 16:09:56 UTC\",\n    \"updated_at\": \"2019-02-17 02:30:33 UTC\",\n    \"commits\": 532,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"jlewi\",\n    \"id\": 777219,\n    \"node_id\": \"MDQ6VXNlcjc3NzIxOQ==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/777219?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jlewi\",\n    \"html_url\": \"https://github.com/jlewi\",\n    \"followers_url\": \"https://api.github.com/users/jlewi/followers\",\n    \"following_url\": \"https://api.github.com/users/jlewi/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jlewi/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jlewi/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jlewi/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jlewi/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jlewi/repos\",\n    \"events_url\": \"https://api.github.com/users/jlewi/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jlewi/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jeremy Lewi\",\n    \"company\": \"Google\",\n    \"blog\": \"https://github.com/google/kubeflow\",\n    \"location\": \"San Francisco Bay Area\",\n    \"email\": \"jeremy+github!lewi.us\",\n    \"hireable\": null,\n    \"bio\": \"I'm the lead engineer at Google.\\r\\nfor Kubeflow.\\r\\n\\r\\nkubeflow.slack.com id: Jeremy Lewi\\r\\n\\r\\nPrior to that I worked on Cloud Machine Learning Engine and Dataflow\",\n    \"public_repos\": 51,\n    \"public_gists\": 52,\n    \"followers\": 135,\n    \"following\": 1,\n    \"created_at\": \"2011-05-09 16:09:56 UTC\",\n    \"updated_at\": \"2019-02-17 02:30:33 UTC\",\n    \"commits\": 198\n  },\n  {\n    \"login\": \"gaocegege\",\n    \"id\": 5100735,\n    \"node_id\": \"MDQ6VXNlcjUxMDA3MzU=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/5100735?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/gaocegege\",\n    \"html_url\": \"https://github.com/gaocegege\",\n    \"followers_url\": \"https://api.github.com/users/gaocegege/followers\",\n    \"following_url\": \"https://api.github.com/users/gaocegege/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/gaocegege/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/gaocegege/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/gaocegege/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/gaocegege/orgs\",\n    \"repos_url\": \"https://api.github.com/users/gaocegege/repos\",\n    \"events_url\": \"https://api.github.com/users/gaocegege/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/gaocegege/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ce Gao\",\n    \"company\": \"!caicloud\",\n    \"blog\": \"http://gaocegege.com\",\n    \"location\": \"Shanghai, China\",\n    \"email\": \"ce.gao!outlook.com\",\n    \"hireable\": null,\n    \"bio\": \"!arrowrowe's former roommate,\\r\\n!xuruowei's boyfriend,\\r\\n!kubeflow @coala maintainer, \\r\\n!SJTU-SE F12, B16\",\n    \"public_repos\": 214,\n    \"public_gists\": 23,\n    \"followers\": 910,\n    \"following\": 787,\n    \"created_at\": \"2013-07-27 03:42:37 UTC\",\n    \"updated_at\": \"2019-01-31 03:01:50 UTC\",\n    \"commits\": 180,\n    \"affiliation\": \"TouchPal\"\n  },\n  {\n    \"login\": \"lluunn\",\n    \"id\": 32310205,\n    \"node_id\": \"MDQ6VXNlcjMyMzEwMjA1\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/32310205?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/lluunn\",\n    \"html_url\": \"https://github.com/lluunn\",\n    \"followers_url\": \"https://api.github.com/users/lluunn/followers\",\n    \"following_url\": \"https://api.github.com/users/lluunn/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/lluunn/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/lluunn/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/lluunn/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/lluunn/orgs\",\n    \"repos_url\": \"https://api.github.com/users/lluunn/repos\",\n    \"events_url\": \"https://api.github.com/users/lluunn/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/lluunn/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Lun-Kai Hsu\",\n    \"company\": \"Google\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"lunkai!google.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 16,\n    \"public_gists\": 2,\n    \"followers\": 11,\n    \"following\": 12,\n    \"created_at\": \"2017-09-26 19:08:27 UTC\",\n    \"updated_at\": \"2019-01-14 04:01:01 UTC\",\n    \"commits\": 155,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"IronPan\",\n    \"id\": 2348602,\n    \"node_id\": \"MDQ6VXNlcjIzNDg2MDI=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/2348602?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/IronPan\",\n    \"html_url\": \"https://github.com/IronPan\",\n    \"followers_url\": \"https://api.github.com/users/IronPan/followers\",\n    \"following_url\": \"https://api.github.com/users/IronPan/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/IronPan/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/IronPan/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/IronPan/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/IronPan/orgs\",\n    \"repos_url\": \"https://api.github.com/users/IronPan/repos\",\n    \"events_url\": \"https://api.github.com/users/IronPan/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/IronPan/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"IronPan\",\n    \"company\": \"!google\",\n    \"blog\": \"https://www.linkedin.com/in/panyang/\",\n    \"location\": null,\n    \"email\": \"yangpa!google.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 17,\n    \"public_gists\": 3,\n    \"followers\": 9,\n    \"following\": 0,\n    \"created_at\": \"2012-09-14 18:31:21 UTC\",\n    \"updated_at\": \"2019-02-14 17:42:46 UTC\",\n    \"commits\": 136,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"cliveseldon\",\n    \"id\": 10563075,\n    \"node_id\": \"MDQ6VXNlcjEwNTYzMDc1\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/10563075?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/cliveseldon\",\n    \"html_url\": \"https://github.com/cliveseldon\",\n    \"followers_url\": \"https://api.github.com/users/cliveseldon/followers\",\n    \"following_url\": \"https://api.github.com/users/cliveseldon/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/cliveseldon/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/cliveseldon/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/cliveseldon/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/cliveseldon/orgs\",\n    \"repos_url\": \"https://api.github.com/users/cliveseldon/repos\",\n    \"events_url\": \"https://api.github.com/users/cliveseldon/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/cliveseldon/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"cc!seldon.io\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 21,\n    \"public_gists\": 0,\n    \"followers\": 12,\n    \"following\": 0,\n    \"created_at\": \"2015-01-16 15:21:27 UTC\",\n    \"updated_at\": \"2019-01-13 14:34:26 UTC\",\n    \"commits\": 135,\n    \"affiliation\": \"Seldon\"\n  },\n  {\n    \"login\": \"YujiOshima\",\n    \"id\": 10014831,\n    \"node_id\": \"MDQ6VXNlcjEwMDE0ODMx\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/10014831?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/YujiOshima\",\n    \"html_url\": \"https://github.com/YujiOshima\",\n    \"followers_url\": \"https://api.github.com/users/YujiOshima/followers\",\n    \"following_url\": \"https://api.github.com/users/YujiOshima/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/YujiOshima/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/YujiOshima/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/YujiOshima/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/YujiOshima/orgs\",\n    \"repos_url\": \"https://api.github.com/users/YujiOshima/repos\",\n    \"events_url\": \"https://api.github.com/users/YujiOshima/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/YujiOshima/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"oshima\",\n    \"company\": \"NTT Laboratories\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"yuji.oshima0x3fd!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 36,\n    \"public_gists\": 0,\n    \"followers\": 22,\n    \"following\": 0,\n    \"created_at\": \"2014-12-01 00:38:14 UTC\",\n    \"updated_at\": \"2019-02-18 08:45:46 UTC\",\n    \"commits\": 131,\n    \"affiliation\": \"NTT\"\n  },\n  {\n    \"login\": \"kunmingg\",\n    \"id\": 37601826,\n    \"node_id\": \"MDQ6VXNlcjM3NjAxODI2\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/37601826?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/kunmingg\",\n    \"html_url\": \"https://github.com/kunmingg\",\n    \"followers_url\": \"https://api.github.com/users/kunmingg/followers\",\n    \"following_url\": \"https://api.github.com/users/kunmingg/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/kunmingg/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/kunmingg/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/kunmingg/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/kunmingg/orgs\",\n    \"repos_url\": \"https://api.github.com/users/kunmingg/repos\",\n    \"events_url\": \"https://api.github.com/users/kunmingg/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/kunmingg/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Kunming Qu\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"37601826+kunmingg!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 8,\n    \"public_gists\": 0,\n    \"followers\": 5,\n    \"following\": 0,\n    \"created_at\": \"2018-03-20 23:54:33 UTC\",\n    \"updated_at\": \"2018-06-22 20:44:05 UTC\",\n    \"commits\": 126\n  },\n  {\n    \"login\": \"richardsliu\",\n    \"id\": 39319471,\n    \"node_id\": \"MDQ6VXNlcjM5MzE5NDcx\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/39319471?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/richardsliu\",\n    \"html_url\": \"https://github.com/richardsliu\",\n    \"followers_url\": \"https://api.github.com/users/richardsliu/followers\",\n    \"following_url\": \"https://api.github.com/users/richardsliu/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/richardsliu/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/richardsliu/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/richardsliu/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/richardsliu/orgs\",\n    \"repos_url\": \"https://api.github.com/users/richardsliu/repos\",\n    \"events_url\": \"https://api.github.com/users/richardsliu/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/richardsliu/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Richard Liu\",\n    \"company\": \"Google\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"39319471+richardsliu!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 13,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2018-05-16 00:01:40 UTC\",\n    \"updated_at\": \"2019-01-18 22:30:46 UTC\",\n    \"commits\": 101\n  },\n  {\n    \"login\": \"johnugeorge\",\n    \"id\": 2171903,\n    \"node_id\": \"MDQ6VXNlcjIxNzE5MDM=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/2171903?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/johnugeorge\",\n    \"html_url\": \"https://github.com/johnugeorge\",\n    \"followers_url\": \"https://api.github.com/users/johnugeorge/followers\",\n    \"following_url\": \"https://api.github.com/users/johnugeorge/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/johnugeorge/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/johnugeorge/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/johnugeorge/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/johnugeorge/orgs\",\n    \"repos_url\": \"https://api.github.com/users/johnugeorge/repos\",\n    \"events_url\": \"https://api.github.com/users/johnugeorge/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/johnugeorge/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Johnu George\",\n    \"company\": \"!CiscoAI \",\n    \"blog\": \"\",\n    \"location\": \"Bangalore\",\n    \"email\": \"johnugeorge109!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"Thinking distributed\",\n    \"public_repos\": 20,\n    \"public_gists\": 1,\n    \"followers\": 12,\n    \"following\": 2,\n    \"created_at\": \"2012-08-17 21:13:43 UTC\",\n    \"updated_at\": \"2019-02-07 11:00:45 UTC\",\n    \"commits\": 92,\n    \"affiliation\": \"Cisco\"\n  },\n  {\n    \"login\": \"vicaire\",\n    \"id\": 25757005,\n    \"node_id\": \"MDQ6VXNlcjI1NzU3MDA1\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/25757005?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/vicaire\",\n    \"html_url\": \"https://github.com/vicaire\",\n    \"followers_url\": \"https://api.github.com/users/vicaire/followers\",\n    \"following_url\": \"https://api.github.com/users/vicaire/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/vicaire/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/vicaire/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/vicaire/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/vicaire/orgs\",\n    \"repos_url\": \"https://api.github.com/users/vicaire/repos\",\n    \"events_url\": \"https://api.github.com/users/vicaire/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/vicaire/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Pascal Vicaire\",\n    \"company\": \"!google \",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"25757005+vicaire!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 18,\n    \"following\": 0,\n    \"created_at\": \"2017-02-14 00:10:32 UTC\",\n    \"updated_at\": \"2019-01-09 09:06:26 UTC\",\n    \"commits\": 73\n  },\n  {\n    \"login\": \"cheyang\",\n    \"id\": 3724388,\n    \"node_id\": \"MDQ6VXNlcjM3MjQzODg=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/3724388?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/cheyang\",\n    \"html_url\": \"https://github.com/cheyang\",\n    \"followers_url\": \"https://api.github.com/users/cheyang/followers\",\n    \"following_url\": \"https://api.github.com/users/cheyang/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/cheyang/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/cheyang/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/cheyang/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/cheyang/orgs\",\n    \"repos_url\": \"https://api.github.com/users/cheyang/repos\",\n    \"events_url\": \"https://api.github.com/users/cheyang/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/cheyang/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"cheyang\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"cheyang!163.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 107,\n    \"public_gists\": 15,\n    \"followers\": 52,\n    \"following\": 85,\n    \"created_at\": \"2013-02-28 06:15:03 UTC\",\n    \"updated_at\": \"2018-12-20 02:28:41 UTC\",\n    \"commits\": 68,\n    \"affiliation\": \"Net EASE\"\n  },\n  {\n    \"login\": \"yebrahim\",\n    \"id\": 1424661,\n    \"node_id\": \"MDQ6VXNlcjE0MjQ2NjE=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/1424661?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/yebrahim\",\n    \"html_url\": \"https://github.com/yebrahim\",\n    \"followers_url\": \"https://api.github.com/users/yebrahim/followers\",\n    \"following_url\": \"https://api.github.com/users/yebrahim/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/yebrahim/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/yebrahim/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/yebrahim/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/yebrahim/orgs\",\n    \"repos_url\": \"https://api.github.com/users/yebrahim/repos\",\n    \"events_url\": \"https://api.github.com/users/yebrahim/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/yebrahim/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Yasser Elsayed\",\n    \"company\": \"!google \",\n    \"blog\": \"\",\n    \"location\": \"Kirkland, WA\",\n    \"email\": \"yebrahim!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 39,\n    \"public_gists\": 3,\n    \"followers\": 15,\n    \"following\": 0,\n    \"created_at\": \"2012-02-09 22:55:05 UTC\",\n    \"updated_at\": \"2019-02-07 15:28:37 UTC\",\n    \"commits\": 61\n  },\n  {\n    \"login\": \"texasmichelle\",\n    \"id\": 7597993,\n    \"node_id\": \"MDQ6VXNlcjc1OTc5OTM=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7597993?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/texasmichelle\",\n    \"html_url\": \"https://github.com/texasmichelle\",\n    \"followers_url\": \"https://api.github.com/users/texasmichelle/followers\",\n    \"following_url\": \"https://api.github.com/users/texasmichelle/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/texasmichelle/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/texasmichelle/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/texasmichelle/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/texasmichelle/orgs\",\n    \"repos_url\": \"https://api.github.com/users/texasmichelle/repos\",\n    \"events_url\": \"https://api.github.com/users/texasmichelle/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/texasmichelle/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Michelle Casbon\",\n    \"company\": \"Google\",\n    \"blog\": \"\",\n    \"location\": \"San Francisco, CA\",\n    \"email\": \"texasmichelle!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 17,\n    \"public_gists\": 0,\n    \"followers\": 29,\n    \"following\": 6,\n    \"created_at\": \"2014-05-16 01:08:12 UTC\",\n    \"updated_at\": \"2019-02-05 04:36:40 UTC\",\n    \"commits\": 58,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"pdmack\",\n    \"id\": 2380545,\n    \"node_id\": \"MDQ6VXNlcjIzODA1NDU=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/2380545?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/pdmack\",\n    \"html_url\": \"https://github.com/pdmack\",\n    \"followers_url\": \"https://api.github.com/users/pdmack/followers\",\n    \"following_url\": \"https://api.github.com/users/pdmack/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/pdmack/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/pdmack/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/pdmack/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/pdmack/orgs\",\n    \"repos_url\": \"https://api.github.com/users/pdmack/repos\",\n    \"events_url\": \"https://api.github.com/users/pdmack/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/pdmack/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Pete MacKinnon\",\n    \"company\": \"Red Hat @kubeflow @openshift @radanalyticsio @AICoE\",\n    \"blog\": \"\",\n    \"location\": \"Raleigh NC\",\n    \"email\": \"pmackinn!redhat.com\",\n    \"hireable\": null,\n    \"bio\": \"Recovering distributed computing engineer. Creative software mechanic.\",\n    \"public_repos\": 77,\n    \"public_gists\": 11,\n    \"followers\": 12,\n    \"following\": 0,\n    \"created_at\": \"2012-09-19 19:32:59 UTC\",\n    \"updated_at\": \"2019-02-05 18:50:28 UTC\",\n    \"commits\": 57,\n    \"affiliation\": \"Red Hat\"\n  },\n  {\n    \"login\": \"Ark-kun\",\n    \"id\": 1829149,\n    \"node_id\": \"MDQ6VXNlcjE4MjkxNDk=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1829149?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Ark-kun\",\n    \"html_url\": \"https://github.com/Ark-kun\",\n    \"followers_url\": \"https://api.github.com/users/Ark-kun/followers\",\n    \"following_url\": \"https://api.github.com/users/Ark-kun/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Ark-kun/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Ark-kun/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Ark-kun/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Ark-kun/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Ark-kun/repos\",\n    \"events_url\": \"https://api.github.com/users/Ark-kun/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Ark-kun/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Alexey Volkov\",\n    \"company\": \"!google\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"alexey.volkov!ark-kun.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 26,\n    \"public_gists\": 4,\n    \"followers\": 10,\n    \"following\": 6,\n    \"created_at\": \"2012-06-08 02:41:47 UTC\",\n    \"updated_at\": \"2019-02-11 15:34:52 UTC\",\n    \"commits\": 57\n  },\n  {\n    \"login\": \"sarahmaddox\",\n    \"id\": 6138251,\n    \"node_id\": \"MDQ6VXNlcjYxMzgyNTE=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/6138251?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/sarahmaddox\",\n    \"html_url\": \"https://github.com/sarahmaddox\",\n    \"followers_url\": \"https://api.github.com/users/sarahmaddox/followers\",\n    \"following_url\": \"https://api.github.com/users/sarahmaddox/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/sarahmaddox/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/sarahmaddox/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/sarahmaddox/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/sarahmaddox/orgs\",\n    \"repos_url\": \"https://api.github.com/users/sarahmaddox/repos\",\n    \"events_url\": \"https://api.github.com/users/sarahmaddox/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/sarahmaddox/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Sarah Maddox\",\n    \"company\": \"Google\",\n    \"blog\": \"http://ffeathers.wordpress.com\",\n    \"location\": \"Sydney, Australia\",\n    \"email\": \"sarahmaddox!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Technical writer at Google\",\n    \"public_repos\": 27,\n    \"public_gists\": 0,\n    \"followers\": 121,\n    \"following\": 0,\n    \"created_at\": \"2013-12-08 23:56:04 UTC\",\n    \"updated_at\": \"2019-02-20 02:43:03 UTC\",\n    \"commits\": 55\n  },\n  {\n    \"login\": \"balajismaniam\",\n    \"id\": 4707353,\n    \"node_id\": \"MDQ6VXNlcjQ3MDczNTM=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/4707353?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/balajismaniam\",\n    \"html_url\": \"https://github.com/balajismaniam\",\n    \"followers_url\": \"https://api.github.com/users/balajismaniam/followers\",\n    \"following_url\": \"https://api.github.com/users/balajismaniam/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/balajismaniam/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/balajismaniam/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/balajismaniam/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/balajismaniam/orgs\",\n    \"repos_url\": \"https://api.github.com/users/balajismaniam/repos\",\n    \"events_url\": \"https://api.github.com/users/balajismaniam/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/balajismaniam/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Balaji Subramaniam\",\n    \"company\": \"Intel\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"balaji.warft!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 12,\n    \"public_gists\": 9,\n    \"followers\": 51,\n    \"following\": 0,\n    \"created_at\": \"2013-06-15 21:35:24 UTC\",\n    \"updated_at\": \"2019-01-24 20:03:39 UTC\",\n    \"commits\": 55,\n    \"affiliation\": \"Independent < 2016-04-01, Intel\"\n  },\n  {\n    \"login\": \"xyhuang\",\n    \"id\": 5247283,\n    \"node_id\": \"MDQ6VXNlcjUyNDcyODM=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/5247283?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/xyhuang\",\n    \"html_url\": \"https://github.com/xyhuang\",\n    \"followers_url\": \"https://api.github.com/users/xyhuang/followers\",\n    \"following_url\": \"https://api.github.com/users/xyhuang/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/xyhuang/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/xyhuang/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/xyhuang/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/xyhuang/orgs\",\n    \"repos_url\": \"https://api.github.com/users/xyhuang/repos\",\n    \"events_url\": \"https://api.github.com/users/xyhuang/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/xyhuang/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Xinyuan Huang\",\n    \"company\": \"!CiscoAI \",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"xyhuang!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 20,\n    \"public_gists\": 0,\n    \"followers\": 7,\n    \"following\": 0,\n    \"created_at\": \"2013-08-16 20:40:47 UTC\",\n    \"updated_at\": \"2019-01-18 00:42:57 UTC\",\n    \"commits\": 55\n  },\n  {\n    \"login\": \"hougangliu\",\n    \"id\": 10126721,\n    \"node_id\": \"MDQ6VXNlcjEwMTI2NzIx\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/10126721?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/hougangliu\",\n    \"html_url\": \"https://github.com/hougangliu\",\n    \"followers_url\": \"https://api.github.com/users/hougangliu/followers\",\n    \"following_url\": \"https://api.github.com/users/hougangliu/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/hougangliu/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/hougangliu/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/hougangliu/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/hougangliu/orgs\",\n    \"repos_url\": \"https://api.github.com/users/hougangliu/repos\",\n    \"events_url\": \"https://api.github.com/users/hougangliu/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/hougangliu/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Hougang Liu\",\n    \"company\": \"!IBM\",\n    \"blog\": \"\",\n    \"location\": \"Xi'an China\",\n    \"email\": \"liuhgxa!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 17,\n    \"public_gists\": 0,\n    \"followers\": 3,\n    \"following\": 6,\n    \"created_at\": \"2014-12-09 08:14:00 UTC\",\n    \"updated_at\": \"2019-02-13 13:15:44 UTC\",\n    \"commits\": 54,\n    \"affiliation\": \"IBM\"\n  },\n  {\n    \"login\": \"kkasravi\",\n    \"id\": 146453,\n    \"node_id\": \"MDQ6VXNlcjE0NjQ1Mw==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/146453?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/kkasravi\",\n    \"html_url\": \"https://github.com/kkasravi\",\n    \"followers_url\": \"https://api.github.com/users/kkasravi/followers\",\n    \"following_url\": \"https://api.github.com/users/kkasravi/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/kkasravi/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/kkasravi/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/kkasravi/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/kkasravi/orgs\",\n    \"repos_url\": \"https://api.github.com/users/kkasravi/repos\",\n    \"events_url\": \"https://api.github.com/users/kkasravi/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/kkasravi/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Kam Kasravi\",\n    \"company\": \"Intel\",\n    \"blog\": \"\",\n    \"location\": \"San Jose\",\n    \"email\": \"kamkasravi!yahoo.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 101,\n    \"public_gists\": 0,\n    \"followers\": 35,\n    \"following\": 1,\n    \"created_at\": \"2009-10-29 19:23:42 UTC\",\n    \"updated_at\": \"2019-01-07 18:42:38 UTC\",\n    \"commits\": 52\n  },\n  {\n    \"login\": \"gaoning777\",\n    \"id\": 3826739,\n    \"node_id\": \"MDQ6VXNlcjM4MjY3Mzk=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/3826739?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/gaoning777\",\n    \"html_url\": \"https://github.com/gaoning777\",\n    \"followers_url\": \"https://api.github.com/users/gaoning777/followers\",\n    \"following_url\": \"https://api.github.com/users/gaoning777/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/gaoning777/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/gaoning777/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/gaoning777/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/gaoning777/orgs\",\n    \"repos_url\": \"https://api.github.com/users/gaoning777/repos\",\n    \"events_url\": \"https://api.github.com/users/gaoning777/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/gaoning777/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ning\",\n    \"company\": \"Google\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"gaoning777!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"Google Cloud AI Platform\",\n    \"public_repos\": 11,\n    \"public_gists\": 0,\n    \"followers\": 10,\n    \"following\": 4,\n    \"created_at\": \"2013-03-10 22:52:11 UTC\",\n    \"updated_at\": \"2019-02-14 21:25:42 UTC\",\n    \"commits\": 50\n  },\n  {\n    \"login\": \"rileyjbauer\",\n    \"id\": 34456002,\n    \"node_id\": \"MDQ6VXNlcjM0NDU2MDAy\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/34456002?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/rileyjbauer\",\n    \"html_url\": \"https://github.com/rileyjbauer\",\n    \"followers_url\": \"https://api.github.com/users/rileyjbauer/followers\",\n    \"following_url\": \"https://api.github.com/users/rileyjbauer/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/rileyjbauer/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/rileyjbauer/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/rileyjbauer/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/rileyjbauer/orgs\",\n    \"repos_url\": \"https://api.github.com/users/rileyjbauer/repos\",\n    \"events_url\": \"https://api.github.com/users/rileyjbauer/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/rileyjbauer/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Riley Bauer\",\n    \"company\": \"!google \",\n    \"blog\": \"\",\n    \"location\": \"Seattle, WA\",\n    \"email\": \"34456002+rileyjbauer!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 4,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2017-12-11 18:35:24 UTC\",\n    \"updated_at\": \"2019-01-29 18:43:21 UTC\",\n    \"commits\": 44\n  },\n  {\n    \"login\": \"wbuchwalter\",\n    \"id\": 3621290,\n    \"node_id\": \"MDQ6VXNlcjM2MjEyOTA=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/3621290?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/wbuchwalter\",\n    \"html_url\": \"https://github.com/wbuchwalter\",\n    \"followers_url\": \"https://api.github.com/users/wbuchwalter/followers\",\n    \"following_url\": \"https://api.github.com/users/wbuchwalter/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/wbuchwalter/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/wbuchwalter/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/wbuchwalter/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/wbuchwalter/orgs\",\n    \"repos_url\": \"https://api.github.com/users/wbuchwalter/repos\",\n    \"events_url\": \"https://api.github.com/users/wbuchwalter/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/wbuchwalter/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"William Buchwalter\",\n    \"company\": \"Microsoft\",\n    \"blog\": \"https://twitter.com/wbuchw\",\n    \"location\": \"Montréal, Canada\",\n    \"email\": \"wbuchwalter!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 92,\n    \"public_gists\": 48,\n    \"followers\": 103,\n    \"following\": 32,\n    \"created_at\": \"2013-02-18 00:29:38 UTC\",\n    \"updated_at\": \"2019-01-29 03:03:42 UTC\",\n    \"commits\": 43,\n    \"affiliation\": \"Microsoft\"\n  },\n  {\n    \"login\": \"abhi-g\",\n    \"id\": 11774566,\n    \"node_id\": \"MDQ6VXNlcjExNzc0NTY2\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/11774566?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/abhi-g\",\n    \"html_url\": \"https://github.com/abhi-g\",\n    \"followers_url\": \"https://api.github.com/users/abhi-g/followers\",\n    \"following_url\": \"https://api.github.com/users/abhi-g/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/abhi-g/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/abhi-g/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/abhi-g/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/abhi-g/orgs\",\n    \"repos_url\": \"https://api.github.com/users/abhi-g/repos\",\n    \"events_url\": \"https://api.github.com/users/abhi-g/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/abhi-g/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Abhishek Gupta\",\n    \"company\": \"Google\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"abhi.gupta!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"Engineering @ Google\",\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2015-04-02 16:53:43 UTC\",\n    \"updated_at\": \"2019-01-30 17:44:21 UTC\",\n    \"commits\": 41\n  },\n  {\n    \"login\": \"jose5918\",\n    \"id\": 4869572,\n    \"node_id\": \"MDQ6VXNlcjQ4Njk1NzI=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/4869572?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jose5918\",\n    \"html_url\": \"https://github.com/jose5918\",\n    \"followers_url\": \"https://api.github.com/users/jose5918/followers\",\n    \"following_url\": \"https://api.github.com/users/jose5918/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jose5918/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jose5918/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jose5918/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jose5918/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jose5918/repos\",\n    \"events_url\": \"https://api.github.com/users/jose5918/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jose5918/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jose Aguirre\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"jose5918!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 29,\n    \"public_gists\": 1,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2013-06-28 15:42:13 UTC\",\n    \"updated_at\": \"2018-12-03 22:16:51 UTC\",\n    \"commits\": 37,\n    \"affiliation\": \"Capital One\"\n  },\n  {\n    \"login\": \"r2d4\",\n    \"id\": 896032,\n    \"node_id\": \"MDQ6VXNlcjg5NjAzMg==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/896032?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/r2d4\",\n    \"html_url\": \"https://github.com/r2d4\",\n    \"followers_url\": \"https://api.github.com/users/r2d4/followers\",\n    \"following_url\": \"https://api.github.com/users/r2d4/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/r2d4/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/r2d4/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/r2d4/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/r2d4/orgs\",\n    \"repos_url\": \"https://api.github.com/users/r2d4/repos\",\n    \"events_url\": \"https://api.github.com/users/r2d4/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/r2d4/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Matt Rickard\",\n    \"company\": \"!Google\",\n    \"blog\": \"matt-rickard.com\",\n    \"location\": \"San Francisco\",\n    \"email\": \"m!rickard.email\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 68,\n    \"public_gists\": 7,\n    \"followers\": 138,\n    \"following\": 9,\n    \"created_at\": \"2011-07-05 15:58:59 UTC\",\n    \"updated_at\": \"2019-01-22 23:30:36 UTC\",\n    \"commits\": 34,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"everpeace\",\n    \"id\": 608782,\n    \"node_id\": \"MDQ6VXNlcjYwODc4Mg==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/608782?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/everpeace\",\n    \"html_url\": \"https://github.com/everpeace\",\n    \"followers_url\": \"https://api.github.com/users/everpeace/followers\",\n    \"following_url\": \"https://api.github.com/users/everpeace/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/everpeace/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/everpeace/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/everpeace/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/everpeace/orgs\",\n    \"repos_url\": \"https://api.github.com/users/everpeace/repos\",\n    \"events_url\": \"https://api.github.com/users/everpeace/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/everpeace/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Shingo Omura\",\n    \"company\": \"Preferred Networks, Inc.\",\n    \"blog\": \"http://everpeace.github.com\",\n    \"location\": \"Tokyo, JAPAN\",\n    \"email\": \"everpeace!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 184,\n    \"public_gists\": 17,\n    \"followers\": 200,\n    \"following\": 50,\n    \"created_at\": \"2011-02-09 13:22:11 UTC\",\n    \"updated_at\": \"2018-12-18 14:45:14 UTC\",\n    \"commits\": 32,\n    \"affiliation\": \"O'Reilly Media\"\n  },\n  {\n    \"login\": \"qimingj\",\n    \"id\": 13439553,\n    \"node_id\": \"MDQ6VXNlcjEzNDM5NTUz\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/13439553?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/qimingj\",\n    \"html_url\": \"https://github.com/qimingj\",\n    \"followers_url\": \"https://api.github.com/users/qimingj/followers\",\n    \"following_url\": \"https://api.github.com/users/qimingj/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/qimingj/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/qimingj/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/qimingj/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/qimingj/orgs\",\n    \"repos_url\": \"https://api.github.com/users/qimingj/repos\",\n    \"events_url\": \"https://api.github.com/users/qimingj/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/qimingj/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"qimingj!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 7,\n    \"public_gists\": 0,\n    \"followers\": 9,\n    \"following\": 0,\n    \"created_at\": \"2015-07-21 18:21:31 UTC\",\n    \"updated_at\": \"2018-10-09 02:35:30 UTC\",\n    \"commits\": 32\n  },\n  {\n    \"login\": \"rongou\",\n    \"id\": 497101,\n    \"node_id\": \"MDQ6VXNlcjQ5NzEwMQ==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/497101?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/rongou\",\n    \"html_url\": \"https://github.com/rongou\",\n    \"followers_url\": \"https://api.github.com/users/rongou/followers\",\n    \"following_url\": \"https://api.github.com/users/rongou/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/rongou/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/rongou/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/rongou/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/rongou/orgs\",\n    \"repos_url\": \"https://api.github.com/users/rongou/repos\",\n    \"events_url\": \"https://api.github.com/users/rongou/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/rongou/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Rong Ou\",\n    \"company\": \"!NVIDIA\",\n    \"blog\": \"\",\n    \"location\": \"Palo Alto, CA\",\n    \"email\": \"rong.ou!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"AI Infrastructure @NVIDIA. Formerly @google.\",\n    \"public_repos\": 21,\n    \"public_gists\": 1,\n    \"followers\": 25,\n    \"following\": 2,\n    \"created_at\": \"2010-11-25 22:10:03 UTC\",\n    \"updated_at\": \"2019-02-06 15:26:53 UTC\",\n    \"commits\": 31\n  },\n  {\n    \"login\": \"andreyvelich\",\n    \"id\": 31112157,\n    \"node_id\": \"MDQ6VXNlcjMxMTEyMTU3\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/31112157?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/andreyvelich\",\n    \"html_url\": \"https://github.com/andreyvelich\",\n    \"followers_url\": \"https://api.github.com/users/andreyvelich/followers\",\n    \"following_url\": \"https://api.github.com/users/andreyvelich/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/andreyvelich/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/andreyvelich/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/andreyvelich/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/andreyvelich/orgs\",\n    \"repos_url\": \"https://api.github.com/users/andreyvelich/repos\",\n    \"events_url\": \"https://api.github.com/users/andreyvelich/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/andreyvelich/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Andrey Velichkevich\",\n    \"company\": \"!Cisco\",\n    \"blog\": \"https://www.linkedin.com/in/andrey-velichkevich/\",\n    \"location\": \"San Jose\",\n    \"email\": \"andrey.velichkevich!gmail.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 14,\n    \"public_gists\": 3,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2017-08-17 20:28:56 UTC\",\n    \"updated_at\": \"2019-02-16 00:43:26 UTC\",\n    \"commits\": 29\n  },\n  {\n    \"login\": \"hongye-sun\",\n    \"id\": 43763191,\n    \"node_id\": \"MDQ6VXNlcjQzNzYzMTkx\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/43763191?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/hongye-sun\",\n    \"html_url\": \"https://github.com/hongye-sun\",\n    \"followers_url\": \"https://api.github.com/users/hongye-sun/followers\",\n    \"following_url\": \"https://api.github.com/users/hongye-sun/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/hongye-sun/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/hongye-sun/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/hongye-sun/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/hongye-sun/orgs\",\n    \"repos_url\": \"https://api.github.com/users/hongye-sun/repos\",\n    \"events_url\": \"https://api.github.com/users/hongye-sun/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/hongye-sun/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"43763191+hongye-sun!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 3,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-10-01 20:11:13 UTC\",\n    \"updated_at\": \"2019-02-01 17:40:03 UTC\",\n    \"commits\": 27\n  },\n  {\n    \"login\": \"puneith\",\n    \"id\": 8098778,\n    \"node_id\": \"MDQ6VXNlcjgwOTg3Nzg=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/8098778?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/puneith\",\n    \"html_url\": \"https://github.com/puneith\",\n    \"followers_url\": \"https://api.github.com/users/puneith/followers\",\n    \"following_url\": \"https://api.github.com/users/puneith/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/puneith/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/puneith/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/puneith/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/puneith/orgs\",\n    \"repos_url\": \"https://api.github.com/users/puneith/repos\",\n    \"events_url\": \"https://api.github.com/users/puneith/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/puneith/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Puneith Kaul\",\n    \"company\": \"!google \",\n    \"blog\": \"\",\n    \"location\": \"Mt. View, California\",\n    \"email\": \"puneith!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 25,\n    \"public_gists\": 0,\n    \"followers\": 49,\n    \"following\": 0,\n    \"created_at\": \"2014-07-08 05:31:28 UTC\",\n    \"updated_at\": \"2019-01-31 16:06:25 UTC\",\n    \"commits\": 26,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"elsonrodriguez\",\n    \"id\": 193030,\n    \"node_id\": \"MDQ6VXNlcjE5MzAzMA==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/193030?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/elsonrodriguez\",\n    \"html_url\": \"https://github.com/elsonrodriguez\",\n    \"followers_url\": \"https://api.github.com/users/elsonrodriguez/followers\",\n    \"following_url\": \"https://api.github.com/users/elsonrodriguez/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/elsonrodriguez/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/elsonrodriguez/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/elsonrodriguez/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/elsonrodriguez/orgs\",\n    \"repos_url\": \"https://api.github.com/users/elsonrodriguez/repos\",\n    \"events_url\": \"https://api.github.com/users/elsonrodriguez/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/elsonrodriguez/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Elson Rodriguez\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"elson.rodriguez!gmail.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 63,\n    \"public_gists\": 37,\n    \"followers\": 69,\n    \"following\": 13,\n    \"created_at\": \"2010-01-30 20:58:23 UTC\",\n    \"updated_at\": \"2018-11-07 06:17:43 UTC\",\n    \"commits\": 25,\n    \"affiliation\": \"DP LLC < 2015-04-01, Rentrak < 2016-02-01, Intel\"\n  },\n  {\n    \"login\": \"toshiiw\",\n    \"id\": 5827631,\n    \"node_id\": \"MDQ6VXNlcjU4Mjc2MzE=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/5827631?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/toshiiw\",\n    \"html_url\": \"https://github.com/toshiiw\",\n    \"followers_url\": \"https://api.github.com/users/toshiiw/followers\",\n    \"following_url\": \"https://api.github.com/users/toshiiw/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/toshiiw/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/toshiiw/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/toshiiw/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/toshiiw/orgs\",\n    \"repos_url\": \"https://api.github.com/users/toshiiw/repos\",\n    \"events_url\": \"https://api.github.com/users/toshiiw/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/toshiiw/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"IWAMOTO Toshihiro\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"iwamoto!valinux.co.jp\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 8,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2013-11-01 01:17:55 UTC\",\n    \"updated_at\": \"2019-02-14 01:10:15 UTC\",\n    \"commits\": 24,\n    \"affiliation\": \"VA Linux\"\n  },\n  {\n    \"login\": \"swiftdiaries\",\n    \"id\": 23024031,\n    \"node_id\": \"MDQ6VXNlcjIzMDI0MDMx\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/23024031?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/swiftdiaries\",\n    \"html_url\": \"https://github.com/swiftdiaries\",\n    \"followers_url\": \"https://api.github.com/users/swiftdiaries/followers\",\n    \"following_url\": \"https://api.github.com/users/swiftdiaries/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/swiftdiaries/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/swiftdiaries/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/swiftdiaries/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/swiftdiaries/orgs\",\n    \"repos_url\": \"https://api.github.com/users/swiftdiaries/repos\",\n    \"events_url\": \"https://api.github.com/users/swiftdiaries/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/swiftdiaries/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Adhita Selvaraj\",\n    \"company\": \"!CiscoAI \",\n    \"blog\": \"\",\n    \"location\": \"San Jose\",\n    \"email\": \"adhita94!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"Working on kubeflow @cisco. Kubernetes, GPUs, Deep Learning <3. \",\n    \"public_repos\": 78,\n    \"public_gists\": 6,\n    \"followers\": 14,\n    \"following\": 118,\n    \"created_at\": \"2016-10-24 06:13:02 UTC\",\n    \"updated_at\": \"2019-02-19 16:20:37 UTC\",\n    \"commits\": 23,\n    \"affiliation\": \"Independent < 2015-07-01, Bhumi < 2016-07-01, Cisco\"\n  },\n  {\n    \"login\": \"gabrielwen\",\n    \"id\": 4784270,\n    \"node_id\": \"MDQ6VXNlcjQ3ODQyNzA=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/4784270?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/gabrielwen\",\n    \"html_url\": \"https://github.com/gabrielwen\",\n    \"followers_url\": \"https://api.github.com/users/gabrielwen/followers\",\n    \"following_url\": \"https://api.github.com/users/gabrielwen/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/gabrielwen/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/gabrielwen/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/gabrielwen/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/gabrielwen/orgs\",\n    \"repos_url\": \"https://api.github.com/users/gabrielwen/repos\",\n    \"events_url\": \"https://api.github.com/users/gabrielwen/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/gabrielwen/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Hung-Ting Wen\",\n    \"company\": \"google inc\",\n    \"blog\": \"\",\n    \"location\": \"San Francisco Bay Area\",\n    \"email\": \"gabrielwen!google.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 14,\n    \"public_gists\": 0,\n    \"followers\": 4,\n    \"following\": 3,\n    \"created_at\": \"2013-06-23 08:54:39 UTC\",\n    \"updated_at\": \"2019-01-07 21:52:08 UTC\",\n    \"commits\": 22,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"neuromage\",\n    \"id\": 206520,\n    \"node_id\": \"MDQ6VXNlcjIwNjUyMA==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/206520?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/neuromage\",\n    \"html_url\": \"https://github.com/neuromage\",\n    \"followers_url\": \"https://api.github.com/users/neuromage/followers\",\n    \"following_url\": \"https://api.github.com/users/neuromage/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/neuromage/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/neuromage/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/neuromage/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/neuromage/orgs\",\n    \"repos_url\": \"https://api.github.com/users/neuromage/repos\",\n    \"events_url\": \"https://api.github.com/users/neuromage/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/neuromage/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ajay Gopinathan\",\n    \"company\": \"!Google\",\n    \"blog\": \"http://ajay.gopinathan.net\",\n    \"location\": \"Kirkland, WA\",\n    \"email\": \"ajay!gopinathan.net\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 14,\n    \"public_gists\": 1,\n    \"followers\": 3,\n    \"following\": 1,\n    \"created_at\": \"2010-02-19 05:59:40 UTC\",\n    \"updated_at\": \"2019-02-19 03:36:29 UTC\",\n    \"commits\": 22\n  },\n  {\n    \"login\": \"ashahba\",\n    \"id\": 12436063,\n    \"node_id\": \"MDQ6VXNlcjEyNDM2MDYz\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/12436063?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ashahba\",\n    \"html_url\": \"https://github.com/ashahba\",\n    \"followers_url\": \"https://api.github.com/users/ashahba/followers\",\n    \"following_url\": \"https://api.github.com/users/ashahba/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ashahba/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ashahba/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ashahba/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ashahba/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ashahba/repos\",\n    \"events_url\": \"https://api.github.com/users/ashahba/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ashahba/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Abolfazl Shahbazi\",\n    \"company\": \"Intel\",\n    \"blog\": \"\",\n    \"location\": \"Portland, OR\",\n    \"email\": \"ashahba!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"AI on Cloud engineer\",\n    \"public_repos\": 33,\n    \"public_gists\": 0,\n    \"followers\": 32,\n    \"following\": 7,\n    \"created_at\": \"2015-05-13 21:43:25 UTC\",\n    \"updated_at\": \"2019-02-05 16:58:49 UTC\",\n    \"commits\": 21,\n    \"affiliation\": \"Intel\"\n  },\n  {\n    \"login\": \"Jimexist\",\n    \"id\": 622789,\n    \"node_id\": \"MDQ6VXNlcjYyMjc4OQ==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/622789?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Jimexist\",\n    \"html_url\": \"https://github.com/Jimexist\",\n    \"followers_url\": \"https://api.github.com/users/Jimexist/followers\",\n    \"following_url\": \"https://api.github.com/users/Jimexist/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Jimexist/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Jimexist/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Jimexist/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Jimexist/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Jimexist/repos\",\n    \"events_url\": \"https://api.github.com/users/Jimexist/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Jimexist/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jiayu Liu\",\n    \"company\": \"!airbnb \",\n    \"blog\": \"http://jimexist.github.io\",\n    \"location\": \"Beijing\",\n    \"email\": \"jimexist!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Fullstack engineer @airbnb \",\n    \"public_repos\": 143,\n    \"public_gists\": 42,\n    \"followers\": 68,\n    \"following\": 94,\n    \"created_at\": \"2011-02-17 07:16:53 UTC\",\n    \"updated_at\": \"2019-02-14 14:25:39 UTC\",\n    \"commits\": 21\n  },\n  {\n    \"login\": \"Ajay191191\",\n    \"id\": 1080409,\n    \"node_id\": \"MDQ6VXNlcjEwODA0MDk=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1080409?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Ajay191191\",\n    \"html_url\": \"https://github.com/Ajay191191\",\n    \"followers_url\": \"https://api.github.com/users/Ajay191191/followers\",\n    \"following_url\": \"https://api.github.com/users/Ajay191191/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Ajay191191/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Ajay191191/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Ajay191191/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Ajay191191/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Ajay191191/repos\",\n    \"events_url\": \"https://api.github.com/users/Ajay191191/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Ajay191191/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ajay Deshpande\",\n    \"company\": \"!IntelAI @NervanaSystems \",\n    \"blog\": \"https://linkedin.com/in/Ajay191191\",\n    \"location\": \"San Diego, CA\",\n    \"email\": \"ajay191191!gmail.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 27,\n    \"public_gists\": 2,\n    \"followers\": 17,\n    \"following\": 7,\n    \"created_at\": \"2011-09-26 11:40:27 UTC\",\n    \"updated_at\": \"2019-01-24 00:29:53 UTC\",\n    \"commits\": 20\n  },\n  {\n    \"login\": \"Ark-kun\",\n    \"id\": 1829149,\n    \"node_id\": \"MDQ6VXNlcjE4MjkxNDk=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1829149?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Ark-kun\",\n    \"html_url\": \"https://github.com/Ark-kun\",\n    \"followers_url\": \"https://api.github.com/users/Ark-kun/followers\",\n    \"following_url\": \"https://api.github.com/users/Ark-kun/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Ark-kun/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Ark-kun/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Ark-kun/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Ark-kun/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Ark-kun/repos\",\n    \"events_url\": \"https://api.github.com/users/Ark-kun/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Ark-kun/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Alexey Volkov\",\n    \"company\": \"!google\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"leha_volkov!mail.ru\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 26,\n    \"public_gists\": 4,\n    \"followers\": 10,\n    \"following\": 6,\n    \"created_at\": \"2012-06-08 02:41:47 UTC\",\n    \"updated_at\": \"2019-02-11 15:34:52 UTC\",\n    \"commits\": 20\n  },\n  {\n    \"login\": \"carmark\",\n    \"id\": 1132167,\n    \"node_id\": \"MDQ6VXNlcjExMzIxNjc=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1132167?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/carmark\",\n    \"html_url\": \"https://github.com/carmark\",\n    \"followers_url\": \"https://api.github.com/users/carmark/followers\",\n    \"following_url\": \"https://api.github.com/users/carmark/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/carmark/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/carmark/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/carmark/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/carmark/orgs\",\n    \"repos_url\": \"https://api.github.com/users/carmark/repos\",\n    \"events_url\": \"https://api.github.com/users/carmark/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/carmark/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Lei Xue\",\n    \"company\": \"Momenta\",\n    \"blog\": \"\",\n    \"location\": \"Beijing, China\",\n    \"email\": \"carmark.dlut!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 46,\n    \"public_gists\": 39,\n    \"followers\": 50,\n    \"following\": 11,\n    \"created_at\": \"2011-10-17 01:28:45 UTC\",\n    \"updated_at\": \"2019-01-17 01:48:37 UTC\",\n    \"commits\": 19,\n    \"affiliation\": \"Oracle\"\n  },\n  {\n    \"login\": \"aronchick\",\n    \"id\": 51317,\n    \"node_id\": \"MDQ6VXNlcjUxMzE3\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/51317?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/aronchick\",\n    \"html_url\": \"https://github.com/aronchick\",\n    \"followers_url\": \"https://api.github.com/users/aronchick/followers\",\n    \"following_url\": \"https://api.github.com/users/aronchick/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/aronchick/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/aronchick/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/aronchick/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/aronchick/orgs\",\n    \"repos_url\": \"https://api.github.com/users/aronchick/repos\",\n    \"events_url\": \"https://api.github.com/users/aronchick/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/aronchick/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"David Aronchick\",\n    \"company\": \"Microsoft\",\n    \"blog\": \"http://www.ironyuppie.com\",\n    \"location\": \"Seattle, WA\",\n    \"email\": \"aronchick!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"Very loud. Builds stuff at Azure.\",\n    \"public_repos\": 24,\n    \"public_gists\": 1,\n    \"followers\": 37,\n    \"following\": 2,\n    \"created_at\": \"2009-02-03 05:08:34 UTC\",\n    \"updated_at\": \"2019-01-23 18:15:16 UTC\",\n    \"commits\": 19,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"ScorpioCPH\",\n    \"id\": 5319646,\n    \"node_id\": \"MDQ6VXNlcjUzMTk2NDY=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/5319646?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ScorpioCPH\",\n    \"html_url\": \"https://github.com/ScorpioCPH\",\n    \"followers_url\": \"https://api.github.com/users/ScorpioCPH/followers\",\n    \"following_url\": \"https://api.github.com/users/ScorpioCPH/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ScorpioCPH/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ScorpioCPH/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ScorpioCPH/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ScorpioCPH/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ScorpioCPH/repos\",\n    \"events_url\": \"https://api.github.com/users/ScorpioCPH/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ScorpioCPH/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Penghao Cen\",\n    \"company\": \"!alipay\",\n    \"blog\": \"\",\n    \"location\": \"Hangzhou\",\n    \"email\": \"cenph!caicloud.io\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 49,\n    \"public_gists\": 0,\n    \"followers\": 36,\n    \"following\": 84,\n    \"created_at\": \"2013-08-27 09:03:34 UTC\",\n    \"updated_at\": \"2019-02-05 23:30:31 UTC\",\n    \"commits\": 18,\n    \"affiliation\": \"Caicloud\"\n  },\n  {\n    \"login\": \"foxish\",\n    \"id\": 906471,\n    \"node_id\": \"MDQ6VXNlcjkwNjQ3MQ==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/906471?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/foxish\",\n    \"html_url\": \"https://github.com/foxish\",\n    \"followers_url\": \"https://api.github.com/users/foxish/followers\",\n    \"following_url\": \"https://api.github.com/users/foxish/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/foxish/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/foxish/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/foxish/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/foxish/orgs\",\n    \"repos_url\": \"https://api.github.com/users/foxish/repos\",\n    \"events_url\": \"https://api.github.com/users/foxish/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/foxish/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Anirudh Ramanathan\",\n    \"company\": \"!rockset\",\n    \"blog\": \"http://foxish.me\",\n    \"location\": \"San Mateo, CA\",\n    \"email\": \"ramanathana!google.com\",\n    \"hireable\": null,\n    \"bio\": \"Software Engineer\",\n    \"public_repos\": 102,\n    \"public_gists\": 41,\n    \"followers\": 142,\n    \"following\": 70,\n    \"created_at\": \"2011-07-10 20:25:59 UTC\",\n    \"updated_at\": \"2018-12-31 05:45:03 UTC\",\n    \"commits\": 18,\n    \"affiliation\": \"Independent < 2016-06-01, CNCF\"\n  },\n  {\n    \"login\": \"ChanYiLin\",\n    \"id\": 7100904,\n    \"node_id\": \"MDQ6VXNlcjcxMDA5MDQ=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7100904?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ChanYiLin\",\n    \"html_url\": \"https://github.com/ChanYiLin\",\n    \"followers_url\": \"https://api.github.com/users/ChanYiLin/followers\",\n    \"following_url\": \"https://api.github.com/users/ChanYiLin/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ChanYiLin/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ChanYiLin/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ChanYiLin/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ChanYiLin/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ChanYiLin/repos\",\n    \"events_url\": \"https://api.github.com/users/ChanYiLin/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ChanYiLin/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jack\",\n    \"company\": \"LSA Lab, CS, NTHU\",\n    \"blog\": \"https://www.linkedin.com/in/jack-lin-a43506a2/\",\n    \"location\": \"Taiwan\",\n    \"email\": \"j5111261112!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"!Kubeflow member and Kubeflow/tf-operator reviewer\",\n    \"public_repos\": 22,\n    \"public_gists\": 1,\n    \"followers\": 10,\n    \"following\": 19,\n    \"created_at\": \"2014-03-29 14:09:44 UTC\",\n    \"updated_at\": \"2019-01-14 21:20:36 UTC\",\n    \"commits\": 17,\n    \"affiliation\": \"Independent < 2017-07-01, Gemini Open Cloud < 2017-12-01, Dell\"\n  },\n  {\n    \"login\": \"terrytangyuan\",\n    \"id\": 4269898,\n    \"node_id\": \"MDQ6VXNlcjQyNjk4OTg=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/4269898?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/terrytangyuan\",\n    \"html_url\": \"https://github.com/terrytangyuan\",\n    \"followers_url\": \"https://api.github.com/users/terrytangyuan/followers\",\n    \"following_url\": \"https://api.github.com/users/terrytangyuan/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/terrytangyuan/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/terrytangyuan/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/terrytangyuan/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/terrytangyuan/orgs\",\n    \"repos_url\": \"https://api.github.com/users/terrytangyuan/repos\",\n    \"events_url\": \"https://api.github.com/users/terrytangyuan/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/terrytangyuan/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Yuan (Terry) Tang\",\n    \"company\": \"Ant Financial\",\n    \"blog\": \"https://terrytangyuan.github.io/about/\",\n    \"location\": \"West Lafayette, IN\",\n    \"email\": \"terrytangyuan!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"唐源 | Committer of TensorFlow, XGBoost, and Apache MXNet | Author of numerous open source softwares | The more you give, the more you receive\",\n    \"public_repos\": 47,\n    \"public_gists\": 1,\n    \"followers\": 1398,\n    \"following\": 85,\n    \"created_at\": \"2013-04-27 02:01:53 UTC\",\n    \"updated_at\": \"2019-02-07 23:39:57 UTC\",\n    \"commits\": 17\n  },\n  {\n    \"login\": \"xiaozhouX\",\n    \"id\": 2825438,\n    \"node_id\": \"MDQ6VXNlcjI4MjU0Mzg=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/2825438?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/xiaozhouX\",\n    \"html_url\": \"https://github.com/xiaozhouX\",\n    \"followers_url\": \"https://api.github.com/users/xiaozhouX/followers\",\n    \"following_url\": \"https://api.github.com/users/xiaozhouX/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/xiaozhouX/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/xiaozhouX/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/xiaozhouX/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/xiaozhouX/orgs\",\n    \"repos_url\": \"https://api.github.com/users/xiaozhouX/repos\",\n    \"events_url\": \"https://api.github.com/users/xiaozhouX/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/xiaozhouX/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Beijing\",\n    \"email\": \"allenfromchina!163.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 23,\n    \"public_gists\": 0,\n    \"followers\": 10,\n    \"following\": 43,\n    \"created_at\": \"2012-11-18 05:53:24 UTC\",\n    \"updated_at\": \"2019-02-20 02:42:51 UTC\",\n    \"commits\": 16,\n    \"affiliation\": \"Net EASE\"\n  },\n  {\n    \"login\": \"Jeffwan\",\n    \"id\": 4739316,\n    \"node_id\": \"MDQ6VXNlcjQ3MzkzMTY=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/4739316?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Jeffwan\",\n    \"html_url\": \"https://github.com/Jeffwan\",\n    \"followers_url\": \"https://api.github.com/users/Jeffwan/followers\",\n    \"following_url\": \"https://api.github.com/users/Jeffwan/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Jeffwan/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Jeffwan/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Jeffwan/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Jeffwan/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Jeffwan/repos\",\n    \"events_url\": \"https://api.github.com/users/Jeffwan/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Jeffwan/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jiaxin Shan\",\n    \"company\": \"aws\",\n    \"blog\": \"\",\n    \"location\": \"Seattle, WA\",\n    \"email\": \"seedjeffwan!gmail.com\",\n    \"hireable\": true,\n    \"bio\": \"Software Engineer @ Amazon Elastic Kubernetes OSS\",\n    \"public_repos\": 35,\n    \"public_gists\": 210,\n    \"followers\": 39,\n    \"following\": 80,\n    \"created_at\": \"2013-06-19 14:36:54 UTC\",\n    \"updated_at\": \"2019-02-04 11:11:23 UTC\",\n    \"commits\": 15\n  },\n  {\n    \"login\": \"vishh\",\n    \"id\": 7063592,\n    \"node_id\": \"MDQ6VXNlcjcwNjM1OTI=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/7063592?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/vishh\",\n    \"html_url\": \"https://github.com/vishh\",\n    \"followers_url\": \"https://api.github.com/users/vishh/followers\",\n    \"following_url\": \"https://api.github.com/users/vishh/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/vishh/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/vishh/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/vishh/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/vishh/orgs\",\n    \"repos_url\": \"https://api.github.com/users/vishh/repos\",\n    \"events_url\": \"https://api.github.com/users/vishh/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/vishh/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Vish Kannan\",\n    \"company\": \"Google\",\n    \"blog\": \"\",\n    \"location\": \"Mountain View\",\n    \"email\": \"vishnuk!google.com\",\n    \"hireable\": null,\n    \"bio\": \"Systems programmer, Yoga Instructor, FOSS enthusiast, @GoogleCloudPlatform \",\n    \"public_repos\": 43,\n    \"public_gists\": 5,\n    \"followers\": 173,\n    \"following\": 3,\n    \"created_at\": \"2014-03-25 21:52:40 UTC\",\n    \"updated_at\": \"2019-01-16 19:09:14 UTC\",\n    \"commits\": 15,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"Akado2009\",\n    \"id\": 10945651,\n    \"node_id\": \"MDQ6VXNlcjEwOTQ1NjUx\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/10945651?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Akado2009\",\n    \"html_url\": \"https://github.com/Akado2009\",\n    \"followers_url\": \"https://api.github.com/users/Akado2009/followers\",\n    \"following_url\": \"https://api.github.com/users/Akado2009/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Akado2009/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Akado2009/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Akado2009/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Akado2009/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Akado2009/repos\",\n    \"events_url\": \"https://api.github.com/users/Akado2009/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Akado2009/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": \"Cisco\",\n    \"blog\": \"https://www.linkedin.com/in/kirill-prosvirov-774958118\",\n    \"location\": null,\n    \"email\": \"prosvirov.k!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 33,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 3,\n    \"created_at\": \"2015-02-10 18:02:35 UTC\",\n    \"updated_at\": \"2019-02-20 01:12:57 UTC\",\n    \"commits\": 13\n  },\n  {\n    \"login\": \"dsdinter\",\n    \"id\": 5182206,\n    \"node_id\": \"MDQ6VXNlcjUxODIyMDY=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/5182206?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dsdinter\",\n    \"html_url\": \"https://github.com/dsdinter\",\n    \"followers_url\": \"https://api.github.com/users/dsdinter/followers\",\n    \"following_url\": \"https://api.github.com/users/dsdinter/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dsdinter/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dsdinter/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dsdinter/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dsdinter/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dsdinter/repos\",\n    \"events_url\": \"https://api.github.com/users/dsdinter/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dsdinter/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"David Sabater Dinter\",\n    \"company\": \"!Google\",\n    \"blog\": \"http://www.knowtobe.com\",\n    \"location\": \"London\",\n    \"email\": \"dsdinter!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Engineer at Google Cloud Platform. Delivering complex Big Data and Advanced analytics solutions.\",\n    \"public_repos\": 62,\n    \"public_gists\": 1,\n    \"followers\": 18,\n    \"following\": 26,\n    \"created_at\": \"2013-08-07 13:05:18 UTC\",\n    \"updated_at\": \"2019-02-04 10:45:09 UTC\",\n    \"commits\": 13\n  },\n  {\n    \"login\": \"amsaha\",\n    \"id\": 2220322,\n    \"node_id\": \"MDQ6VXNlcjIyMjAzMjI=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/2220322?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/amsaha\",\n    \"html_url\": \"https://github.com/amsaha\",\n    \"followers_url\": \"https://api.github.com/users/amsaha/followers\",\n    \"following_url\": \"https://api.github.com/users/amsaha/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/amsaha/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/amsaha/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/amsaha/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/amsaha/orgs\",\n    \"repos_url\": \"https://api.github.com/users/amsaha/repos\",\n    \"events_url\": \"https://api.github.com/users/amsaha/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/amsaha/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Amit Saha\",\n    \"company\": \"Cisco @CiscoAI @CiscoSystems @CiscoZeus \",\n    \"blog\": \"http://amsaha.bitbucket.io/\",\n    \"location\": \"Bangalore\",\n    \"email\": \"amisaha!cisco.com\",\n    \"hireable\": null,\n    \"bio\": \"http://www.linkedin.com/in/amsaha\",\n    \"public_repos\": 20,\n    \"public_gists\": 0,\n    \"followers\": 4,\n    \"following\": 0,\n    \"created_at\": \"2012-08-26 03:25:27 UTC\",\n    \"updated_at\": \"2019-02-03 16:29:22 UTC\",\n    \"commits\": 13,\n    \"affiliation\": \"Cisco\"\n  },\n  {\n    \"login\": \"texasmichelle\",\n    \"id\": 7597993,\n    \"node_id\": \"MDQ6VXNlcjc1OTc5OTM=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7597993?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/texasmichelle\",\n    \"html_url\": \"https://github.com/texasmichelle\",\n    \"followers_url\": \"https://api.github.com/users/texasmichelle/followers\",\n    \"following_url\": \"https://api.github.com/users/texasmichelle/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/texasmichelle/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/texasmichelle/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/texasmichelle/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/texasmichelle/orgs\",\n    \"repos_url\": \"https://api.github.com/users/texasmichelle/repos\",\n    \"events_url\": \"https://api.github.com/users/texasmichelle/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/texasmichelle/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Michelle Casbon\",\n    \"company\": \"Google\",\n    \"blog\": \"\",\n    \"location\": \"San Francisco, CA\",\n    \"email\": \"texasmichelle!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 17,\n    \"public_gists\": 0,\n    \"followers\": 29,\n    \"following\": 6,\n    \"created_at\": \"2014-05-16 01:08:12 UTC\",\n    \"updated_at\": \"2019-02-05 04:36:40 UTC\",\n    \"commits\": 13\n  },\n  {\n    \"login\": \"yupbank\",\n    \"id\": 741544,\n    \"node_id\": \"MDQ6VXNlcjc0MTU0NA==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/741544?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/yupbank\",\n    \"html_url\": \"https://github.com/yupbank\",\n    \"followers_url\": \"https://api.github.com/users/yupbank/followers\",\n    \"following_url\": \"https://api.github.com/users/yupbank/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/yupbank/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/yupbank/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/yupbank/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/yupbank/orgs\",\n    \"repos_url\": \"https://api.github.com/users/yupbank/repos\",\n    \"events_url\": \"https://api.github.com/users/yupbank/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/yupbank/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Peng Yu\",\n    \"company\": \"!Shopify \",\n    \"blog\": \"\",\n    \"location\": \"Montreal\",\n    \"email\": \"yupbank!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"★  PRO\",\n    \"public_repos\": 145,\n    \"public_gists\": 5,\n    \"followers\": 73,\n    \"following\": 448,\n    \"created_at\": \"2011-04-20 14:34:05 UTC\",\n    \"updated_at\": \"2019-02-18 14:42:02 UTC\",\n    \"commits\": 12\n  },\n  {\n    \"login\": \"richardsliu\",\n    \"id\": 39319471,\n    \"node_id\": \"MDQ6VXNlcjM5MzE5NDcx\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/39319471?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/richardsliu\",\n    \"html_url\": \"https://github.com/richardsliu\",\n    \"followers_url\": \"https://api.github.com/users/richardsliu/followers\",\n    \"following_url\": \"https://api.github.com/users/richardsliu/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/richardsliu/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/richardsliu/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/richardsliu/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/richardsliu/orgs\",\n    \"repos_url\": \"https://api.github.com/users/richardsliu/repos\",\n    \"events_url\": \"https://api.github.com/users/richardsliu/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/richardsliu/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Richard Liu\",\n    \"company\": \"Google\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ricliu!google.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 13,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2018-05-16 00:01:40 UTC\",\n    \"updated_at\": \"2019-01-18 22:30:46 UTC\",\n    \"commits\": 12,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"ytetra\",\n    \"id\": 42131278,\n    \"node_id\": \"MDQ6VXNlcjQyMTMxMjc4\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/42131278?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ytetra\",\n    \"html_url\": \"https://github.com/ytetra\",\n    \"followers_url\": \"https://api.github.com/users/ytetra/followers\",\n    \"following_url\": \"https://api.github.com/users/ytetra/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ytetra/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ytetra/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ytetra/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ytetra/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ytetra/repos\",\n    \"events_url\": \"https://api.github.com/users/ytetra/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ytetra/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"42131278+ytetra!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-08-06 05:23:08 UTC\",\n    \"updated_at\": \"2018-12-13 08:52:18 UTC\",\n    \"commits\": 12\n  },\n  {\n    \"login\": \"zjj2wry\",\n    \"id\": 18045633,\n    \"node_id\": \"MDQ6VXNlcjE4MDQ1NjMz\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/18045633?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/zjj2wry\",\n    \"html_url\": \"https://github.com/zjj2wry\",\n    \"followers_url\": \"https://api.github.com/users/zjj2wry/followers\",\n    \"following_url\": \"https://api.github.com/users/zjj2wry/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/zjj2wry/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/zjj2wry/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/zjj2wry/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/zjj2wry/orgs\",\n    \"repos_url\": \"https://api.github.com/users/zjj2wry/repos\",\n    \"events_url\": \"https://api.github.com/users/zjj2wry/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/zjj2wry/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jiajin Zheng\",\n    \"company\": \"!caicloud \",\n    \"blog\": \"https://zjj2wry.github.io/\",\n    \"location\": \"中国杭州\",\n    \"email\": \"zhengjiajin!caicloud.io\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 138,\n    \"public_gists\": 1,\n    \"followers\": 61,\n    \"following\": 36,\n    \"created_at\": \"2016-03-24 06:56:34 UTC\",\n    \"updated_at\": \"2019-02-11 05:42:57 UTC\",\n    \"commits\": 12,\n    \"affiliation\": \"Caicloud\"\n  },\n  {\n    \"login\": \"KingOnTheStar\",\n    \"id\": 28749806,\n    \"node_id\": \"MDQ6VXNlcjI4NzQ5ODA2\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/28749806?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/KingOnTheStar\",\n    \"html_url\": \"https://github.com/KingOnTheStar\",\n    \"followers_url\": \"https://api.github.com/users/KingOnTheStar/followers\",\n    \"following_url\": \"https://api.github.com/users/KingOnTheStar/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/KingOnTheStar/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/KingOnTheStar/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/KingOnTheStar/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/KingOnTheStar/orgs\",\n    \"repos_url\": \"https://api.github.com/users/KingOnTheStar/repos\",\n    \"events_url\": \"https://api.github.com/users/KingOnTheStar/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/KingOnTheStar/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ruiheng Yang\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"yangruiheng1!126.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 8,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2017-05-17 06:57:53 UTC\",\n    \"updated_at\": \"2019-02-16 04:26:24 UTC\",\n    \"commits\": 12\n  },\n  {\n    \"login\": \"wsxiaozhang\",\n    \"id\": 4995375,\n    \"node_id\": \"MDQ6VXNlcjQ5OTUzNzU=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/4995375?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/wsxiaozhang\",\n    \"html_url\": \"https://github.com/wsxiaozhang\",\n    \"followers_url\": \"https://api.github.com/users/wsxiaozhang/followers\",\n    \"following_url\": \"https://api.github.com/users/wsxiaozhang/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/wsxiaozhang/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/wsxiaozhang/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/wsxiaozhang/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/wsxiaozhang/orgs\",\n    \"repos_url\": \"https://api.github.com/users/wsxiaozhang/repos\",\n    \"events_url\": \"https://api.github.com/users/wsxiaozhang/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/wsxiaozhang/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Kai Zhang\",\n    \"company\": \"Alibaba.com\",\n    \"blog\": \"\",\n    \"location\": \"Beijing, China\",\n    \"email\": \"wsxiaozhang!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 34,\n    \"public_gists\": 0,\n    \"followers\": 8,\n    \"following\": 2,\n    \"created_at\": \"2013-07-12 07:34:20 UTC\",\n    \"updated_at\": \"2019-01-14 03:18:10 UTC\",\n    \"commits\": 11,\n    \"affiliation\": \"Alibaba\"\n  },\n  {\n    \"login\": \"willingc\",\n    \"id\": 2680980,\n    \"node_id\": \"MDQ6VXNlcjI2ODA5ODA=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/2680980?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/willingc\",\n    \"html_url\": \"https://github.com/willingc\",\n    \"followers_url\": \"https://api.github.com/users/willingc/followers\",\n    \"following_url\": \"https://api.github.com/users/willingc/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/willingc/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/willingc/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/willingc/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/willingc/orgs\",\n    \"repos_url\": \"https://api.github.com/users/willingc/repos\",\n    \"events_url\": \"https://api.github.com/users/willingc/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/willingc/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Carol Willing\",\n    \"company\": \"Willing Consulting\",\n    \"blog\": \"https://www.willingconsulting.com\",\n    \"location\": \"San Diego\",\n    \"email\": \"carolcode!willingconsulting.com\",\n    \"hireable\": null,\n    \"bio\": \"Project Jupyter, nteract, and CPython core developer\\r\\n\\r\\n!jupyter | @jupyterhub | @ipython | @nteract | @pysplash\",\n    \"public_repos\": 673,\n    \"public_gists\": 62,\n    \"followers\": 498,\n    \"following\": 250,\n    \"created_at\": \"2012-10-30 05:07:14 UTC\",\n    \"updated_at\": \"2019-02-20 17:56:12 UTC\",\n    \"commits\": 11\n  },\n  {\n    \"login\": \"jiezhang\",\n    \"id\": 37601164,\n    \"node_id\": \"MDQ6VXNlcjM3NjAxMTY0\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/37601164?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jiezhang\",\n    \"html_url\": \"https://github.com/jiezhang\",\n    \"followers_url\": \"https://api.github.com/users/jiezhang/followers\",\n    \"following_url\": \"https://api.github.com/users/jiezhang/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jiezhang/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jiezhang/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jiezhang/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jiezhang/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jiezhang/repos\",\n    \"events_url\": \"https://api.github.com/users/jiezhang/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jiezhang/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jie Zhang\",\n    \"company\": \"!uber \",\n    \"blog\": \"\",\n    \"location\": \"Seattle\",\n    \"email\": \"jiez!uber.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 3,\n    \"public_gists\": 0,\n    \"followers\": 3,\n    \"following\": 0,\n    \"created_at\": \"2018-03-20 23:16:16 UTC\",\n    \"updated_at\": \"2018-12-22 20:27:43 UTC\",\n    \"commits\": 11\n  },\n  {\n    \"login\": \"IronPan\",\n    \"id\": 2348602,\n    \"node_id\": \"MDQ6VXNlcjIzNDg2MDI=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/2348602?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/IronPan\",\n    \"html_url\": \"https://github.com/IronPan\",\n    \"followers_url\": \"https://api.github.com/users/IronPan/followers\",\n    \"following_url\": \"https://api.github.com/users/IronPan/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/IronPan/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/IronPan/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/IronPan/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/IronPan/orgs\",\n    \"repos_url\": \"https://api.github.com/users/IronPan/repos\",\n    \"events_url\": \"https://api.github.com/users/IronPan/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/IronPan/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"IronPan\",\n    \"company\": \"!google\",\n    \"blog\": \"https://www.linkedin.com/in/panyang/\",\n    \"location\": null,\n    \"email\": \"panyang06231989!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 17,\n    \"public_gists\": 3,\n    \"followers\": 9,\n    \"following\": 0,\n    \"created_at\": \"2012-09-14 18:31:21 UTC\",\n    \"updated_at\": \"2019-02-14 17:42:46 UTC\",\n    \"commits\": 10,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"yixinshi\",\n    \"id\": 29932260,\n    \"node_id\": \"MDQ6VXNlcjI5OTMyMjYw\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/29932260?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/yixinshi\",\n    \"html_url\": \"https://github.com/yixinshi\",\n    \"followers_url\": \"https://api.github.com/users/yixinshi/followers\",\n    \"following_url\": \"https://api.github.com/users/yixinshi/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/yixinshi/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/yixinshi/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/yixinshi/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/yixinshi/orgs\",\n    \"repos_url\": \"https://api.github.com/users/yixinshi/repos\",\n    \"events_url\": \"https://api.github.com/users/yixinshi/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/yixinshi/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Sam Shi\",\n    \"company\": \"Google Cloud Machine Learning\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"yixinshi!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 7,\n    \"public_gists\": 1,\n    \"followers\": 1,\n    \"following\": 3,\n    \"created_at\": \"2017-07-05 22:06:27 UTC\",\n    \"updated_at\": \"2019-02-08 05:46:33 UTC\",\n    \"commits\": 9\n  },\n  {\n    \"login\": \"gaocegege\",\n    \"id\": 5100735,\n    \"node_id\": \"MDQ6VXNlcjUxMDA3MzU=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/5100735?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/gaocegege\",\n    \"html_url\": \"https://github.com/gaocegege\",\n    \"followers_url\": \"https://api.github.com/users/gaocegege/followers\",\n    \"following_url\": \"https://api.github.com/users/gaocegege/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/gaocegege/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/gaocegege/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/gaocegege/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/gaocegege/orgs\",\n    \"repos_url\": \"https://api.github.com/users/gaocegege/repos\",\n    \"events_url\": \"https://api.github.com/users/gaocegege/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/gaocegege/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ce Gao\",\n    \"company\": \"!caicloud\",\n    \"blog\": \"http://gaocegege.com\",\n    \"location\": \"Shanghai, China\",\n    \"email\": \"gaoce!caicloud.io\",\n    \"hireable\": null,\n    \"bio\": \"!arrowrowe's former roommate,\\r\\n!xuruowei's boyfriend,\\r\\n!kubeflow @coala maintainer, \\r\\n!SJTU-SE F12, B16\",\n    \"public_repos\": 214,\n    \"public_gists\": 23,\n    \"followers\": 910,\n    \"following\": 787,\n    \"created_at\": \"2013-07-27 03:42:37 UTC\",\n    \"updated_at\": \"2019-01-31 03:01:50 UTC\",\n    \"commits\": 9,\n    \"affiliation\": \"Caicloud\"\n  },\n  {\n    \"login\": \"zhenghuiwang\",\n    \"id\": 8263977,\n    \"node_id\": \"MDQ6VXNlcjgyNjM5Nzc=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/8263977?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/zhenghuiwang\",\n    \"html_url\": \"https://github.com/zhenghuiwang\",\n    \"followers_url\": \"https://api.github.com/users/zhenghuiwang/followers\",\n    \"following_url\": \"https://api.github.com/users/zhenghuiwang/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/zhenghuiwang/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/zhenghuiwang/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/zhenghuiwang/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/zhenghuiwang/orgs\",\n    \"repos_url\": \"https://api.github.com/users/zhenghuiwang/repos\",\n    \"events_url\": \"https://api.github.com/users/zhenghuiwang/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/zhenghuiwang/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Zhenghui Wang\",\n    \"company\": \"Google\",\n    \"blog\": \"\",\n    \"location\": \"United States\",\n    \"email\": \"zhenghuiwang!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 11,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2014-07-25 04:51:43 UTC\",\n    \"updated_at\": \"2019-01-24 01:58:09 UTC\",\n    \"commits\": 9\n  },\n  {\n    \"login\": \"nanliu\",\n    \"id\": 323624,\n    \"node_id\": \"MDQ6VXNlcjMyMzYyNA==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/323624?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/nanliu\",\n    \"html_url\": \"https://github.com/nanliu\",\n    \"followers_url\": \"https://api.github.com/users/nanliu/followers\",\n    \"following_url\": \"https://api.github.com/users/nanliu/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/nanliu/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/nanliu/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/nanliu/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/nanliu/orgs\",\n    \"repos_url\": \"https://api.github.com/users/nanliu/repos\",\n    \"events_url\": \"https://api.github.com/users/nanliu/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/nanliu/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Nan Liu\",\n    \"company\": \"Mastercard\",\n    \"blog\": \"\",\n    \"location\": \"Portland, OR\",\n    \"email\": \"nan.liu!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 257,\n    \"public_gists\": 21,\n    \"followers\": 89,\n    \"following\": 38,\n    \"created_at\": \"2010-07-05 20:40:36 UTC\",\n    \"updated_at\": \"2019-01-29 03:37:47 UTC\",\n    \"commits\": 9\n  },\n  {\n    \"login\": \"stpabhi\",\n    \"id\": 1401100,\n    \"node_id\": \"MDQ6VXNlcjE0MDExMDA=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/1401100?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/stpabhi\",\n    \"html_url\": \"https://github.com/stpabhi\",\n    \"followers_url\": \"https://api.github.com/users/stpabhi/followers\",\n    \"following_url\": \"https://api.github.com/users/stpabhi/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/stpabhi/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/stpabhi/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/stpabhi/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/stpabhi/orgs\",\n    \"repos_url\": \"https://api.github.com/users/stpabhi/repos\",\n    \"events_url\": \"https://api.github.com/users/stpabhi/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/stpabhi/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Abhilash Pallerlamudi\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Palo Alto, CA\",\n    \"email\": \"stp.abhi!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 13,\n    \"public_gists\": 0,\n    \"followers\": 5,\n    \"following\": 0,\n    \"created_at\": \"2012-02-02 09:11:23 UTC\",\n    \"updated_at\": \"2019-01-30 15:26:50 UTC\",\n    \"commits\": 9,\n    \"affiliation\": \"Independent < 2015-01-01, Data Deity < 2016-07-01, Visa\"\n  },\n  {\n    \"login\": \"gyliu513\",\n    \"id\": 4461983,\n    \"node_id\": \"MDQ6VXNlcjQ0NjE5ODM=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/4461983?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/gyliu513\",\n    \"html_url\": \"https://github.com/gyliu513\",\n    \"followers_url\": \"https://api.github.com/users/gyliu513/followers\",\n    \"following_url\": \"https://api.github.com/users/gyliu513/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/gyliu513/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/gyliu513/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/gyliu513/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/gyliu513/orgs\",\n    \"repos_url\": \"https://api.github.com/users/gyliu513/repos\",\n    \"events_url\": \"https://api.github.com/users/gyliu513/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/gyliu513/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Guang Ya Liu\",\n    \"company\": \"!IBM\",\n    \"blog\": \"\",\n    \"location\": \"Xi'an\",\n    \"email\": \"gyliu513!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"!Kubernetes Member, @istio Maintainer, @Mesos Committer & PMC Member, Member - IBM Academy of Technology, Former @OpenStack Magnum Core Member\",\n    \"public_repos\": 201,\n    \"public_gists\": 16,\n    \"followers\": 226,\n    \"following\": 4,\n    \"created_at\": \"2013-05-18 02:39:16 UTC\",\n    \"updated_at\": \"2019-02-04 15:37:48 UTC\",\n    \"commits\": 8,\n    \"affiliation\": \"IBM\"\n  },\n  {\n    \"login\": \"ewilderj\",\n    \"id\": 9475,\n    \"node_id\": \"MDQ6VXNlcjk0NzU=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/9475?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ewilderj\",\n    \"html_url\": \"https://github.com/ewilderj\",\n    \"followers_url\": \"https://api.github.com/users/ewilderj/followers\",\n    \"following_url\": \"https://api.github.com/users/ewilderj/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ewilderj/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ewilderj/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ewilderj/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ewilderj/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ewilderj/repos\",\n    \"events_url\": \"https://api.github.com/users/ewilderj/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ewilderj/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Edd Wilder-James\",\n    \"company\": \"!google \",\n    \"blog\": \"http://ewj.me/\",\n    \"location\": \"California, US\",\n    \"email\": \"edd!me.com\",\n    \"hireable\": null,\n    \"bio\": \"Open source strategy @Google @TensorFlow @Kubeflow\",\n    \"public_repos\": 19,\n    \"public_gists\": 6,\n    \"followers\": 87,\n    \"following\": 5,\n    \"created_at\": \"2008-05-06 15:10:56 UTC\",\n    \"updated_at\": \"2019-01-23 20:08:59 UTC\",\n    \"commits\": 8,\n    \"affiliation\": \"Apple\"\n  },\n  {\n    \"login\": \"ddutta\",\n    \"id\": 877050,\n    \"node_id\": \"MDQ6VXNlcjg3NzA1MA==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/877050?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ddutta\",\n    \"html_url\": \"https://github.com/ddutta\",\n    \"followers_url\": \"https://api.github.com/users/ddutta/followers\",\n    \"following_url\": \"https://api.github.com/users/ddutta/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ddutta/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ddutta/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ddutta/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ddutta/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ddutta/repos\",\n    \"events_url\": \"https://api.github.com/users/ddutta/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ddutta/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Debo~ Dutta\",\n    \"company\": \"!CiscoAI \",\n    \"blog\": \"facebook.com/ddutta\",\n    \"location\": \"Santa Clara\",\n    \"email\": \"877050+ddutta!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 34,\n    \"public_gists\": 1,\n    \"followers\": 22,\n    \"following\": 4,\n    \"created_at\": \"2011-06-26 17:29:07 UTC\",\n    \"updated_at\": \"2019-01-16 19:50:52 UTC\",\n    \"commits\": 8\n  },\n  {\n    \"login\": \"salmanazarr\",\n    \"id\": 3909933,\n    \"node_id\": \"MDQ6VXNlcjM5MDk5MzM=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/3909933?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/salmanazarr\",\n    \"html_url\": \"https://github.com/salmanazarr\",\n    \"followers_url\": \"https://api.github.com/users/salmanazarr/followers\",\n    \"following_url\": \"https://api.github.com/users/salmanazarr/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/salmanazarr/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/salmanazarr/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/salmanazarr/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/salmanazarr/orgs\",\n    \"repos_url\": \"https://api.github.com/users/salmanazarr/repos\",\n    \"events_url\": \"https://api.github.com/users/salmanazarr/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/salmanazarr/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Sanyam Kapoor\",\n    \"company\": null,\n    \"blog\": \"https://www.sanyamkapoor.com\",\n    \"location\": \"New York\",\n    \"email\": \"sanyamkapoor!google.com\",\n    \"hireable\": true,\n    \"bio\": \"building posteriors, one sample at a time.\",\n    \"public_repos\": 70,\n    \"public_gists\": 5,\n    \"followers\": 66,\n    \"following\": 43,\n    \"created_at\": \"2013-03-19 13:14:18 UTC\",\n    \"updated_at\": \"2019-02-11 15:41:35 UTC\",\n    \"commits\": 8,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"ojarjur\",\n    \"id\": 3039877,\n    \"node_id\": \"MDQ6VXNlcjMwMzk4Nzc=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/3039877?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ojarjur\",\n    \"html_url\": \"https://github.com/ojarjur\",\n    \"followers_url\": \"https://api.github.com/users/ojarjur/followers\",\n    \"following_url\": \"https://api.github.com/users/ojarjur/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ojarjur/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ojarjur/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ojarjur/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ojarjur/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ojarjur/repos\",\n    \"events_url\": \"https://api.github.com/users/ojarjur/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ojarjur/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Omar Jarjur\",\n    \"company\": null,\n    \"blog\": \"https://plus.google.com/106453369970830778453\",\n    \"location\": null,\n    \"email\": \"ojarjur!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Software developer working on developer tools\",\n    \"public_repos\": 19,\n    \"public_gists\": 4,\n    \"followers\": 30,\n    \"following\": 10,\n    \"created_at\": \"2012-12-14 05:34:57 UTC\",\n    \"updated_at\": \"2019-02-17 01:10:38 UTC\",\n    \"commits\": 8\n  },\n  {\n    \"login\": \"gaoning777\",\n    \"id\": 3826739,\n    \"node_id\": \"MDQ6VXNlcjM4MjY3Mzk=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/3826739?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/gaoning777\",\n    \"html_url\": \"https://github.com/gaoning777\",\n    \"followers_url\": \"https://api.github.com/users/gaoning777/followers\",\n    \"following_url\": \"https://api.github.com/users/gaoning777/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/gaoning777/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/gaoning777/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/gaoning777/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/gaoning777/orgs\",\n    \"repos_url\": \"https://api.github.com/users/gaoning777/repos\",\n    \"events_url\": \"https://api.github.com/users/gaoning777/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/gaoning777/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ning\",\n    \"company\": \"Google\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ngao!google.com\",\n    \"hireable\": null,\n    \"bio\": \"Google Cloud AI Platform\",\n    \"public_repos\": 11,\n    \"public_gists\": 0,\n    \"followers\": 10,\n    \"following\": 4,\n    \"created_at\": \"2013-03-10 22:52:11 UTC\",\n    \"updated_at\": \"2019-02-14 21:25:42 UTC\",\n    \"commits\": 8,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"willb\",\n    \"id\": 1161,\n    \"node_id\": \"MDQ6VXNlcjExNjE=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/1161?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/willb\",\n    \"html_url\": \"https://github.com/willb\",\n    \"followers_url\": \"https://api.github.com/users/willb/followers\",\n    \"following_url\": \"https://api.github.com/users/willb/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/willb/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/willb/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/willb/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/willb/orgs\",\n    \"repos_url\": \"https://api.github.com/users/willb/repos\",\n    \"events_url\": \"https://api.github.com/users/willb/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/willb/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Will Benton\",\n    \"company\": \"Red Hat, Inc.\",\n    \"blog\": \"https://chapeau.freevariable.com\",\n    \"location\": \"Madison, WI\",\n    \"email\": \"self!willbenton.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 146,\n    \"public_gists\": 75,\n    \"followers\": 65,\n    \"following\": 17,\n    \"created_at\": \"2008-02-27 19:58:52 UTC\",\n    \"updated_at\": \"2019-02-09 18:52:26 UTC\",\n    \"commits\": 7\n  },\n  {\n    \"login\": \"DjangoPeng\",\n    \"id\": 16943353,\n    \"node_id\": \"MDQ6VXNlcjE2OTQzMzUz\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/16943353?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/DjangoPeng\",\n    \"html_url\": \"https://github.com/DjangoPeng\",\n    \"followers_url\": \"https://api.github.com/users/DjangoPeng/followers\",\n    \"following_url\": \"https://api.github.com/users/DjangoPeng/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/DjangoPeng/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/DjangoPeng/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/DjangoPeng/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/DjangoPeng/orgs\",\n    \"repos_url\": \"https://api.github.com/users/DjangoPeng/repos\",\n    \"events_url\": \"https://api.github.com/users/DjangoPeng/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/DjangoPeng/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jingtian Peng\",\n    \"company\": null,\n    \"blog\": \"https://cn.linkedin.com/in/jingtianp\",\n    \"location\": \"Shanghai, China\",\n    \"email\": \"pjt73651!gmail.com\",\n    \"hireable\": true,\n    \"bio\": \"Google Developer Expert.\\r\\nKubeflow Maintainer.\\r\\nTensorFlow Contributor.\\r\\nAuthor of TensorFlow in Depth(2018)\",\n    \"public_repos\": 32,\n    \"public_gists\": 2,\n    \"followers\": 1209,\n    \"following\": 10,\n    \"created_at\": \"2016-01-28 18:17:08 UTC\",\n    \"updated_at\": \"2019-02-02 23:30:04 UTC\",\n    \"commits\": 7,\n    \"affiliation\": \"Huawei\"\n  },\n  {\n    \"login\": \"u2takey\",\n    \"id\": 2763612,\n    \"node_id\": \"MDQ6VXNlcjI3NjM2MTI=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/2763612?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/u2takey\",\n    \"html_url\": \"https://github.com/u2takey\",\n    \"followers_url\": \"https://api.github.com/users/u2takey/followers\",\n    \"following_url\": \"https://api.github.com/users/u2takey/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/u2takey/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/u2takey/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/u2takey/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/u2takey/orgs\",\n    \"repos_url\": \"https://api.github.com/users/u2takey/repos\",\n    \"events_url\": \"https://api.github.com/users/u2takey/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/u2takey/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"leiiwang\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"china\",\n    \"email\": \"u2takey!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"____     ____      ___    _   ___  _______    ___    _______  _   ___\\r\\n           /    |   /    |    |   |  | | |   |\",\n    \"public_repos\": 68,\n    \"public_gists\": 3,\n    \"followers\": 7,\n    \"following\": 3,\n    \"created_at\": \"2012-11-10 03:24:51 UTC\",\n    \"updated_at\": \"2019-02-16 15:27:21 UTC\",\n    \"commits\": 7,\n    \"affiliation\": \"Qiniu\"\n  },\n  {\n    \"login\": \"ScorpioCPH\",\n    \"id\": 5319646,\n    \"node_id\": \"MDQ6VXNlcjUzMTk2NDY=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/5319646?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ScorpioCPH\",\n    \"html_url\": \"https://github.com/ScorpioCPH\",\n    \"followers_url\": \"https://api.github.com/users/ScorpioCPH/followers\",\n    \"following_url\": \"https://api.github.com/users/ScorpioCPH/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ScorpioCPH/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ScorpioCPH/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ScorpioCPH/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ScorpioCPH/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ScorpioCPH/repos\",\n    \"events_url\": \"https://api.github.com/users/ScorpioCPH/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ScorpioCPH/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Penghao Cen\",\n    \"company\": \"!alipay\",\n    \"blog\": \"\",\n    \"location\": \"Hangzhou\",\n    \"email\": \"scorpiocph!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 49,\n    \"public_gists\": 0,\n    \"followers\": 36,\n    \"following\": 84,\n    \"created_at\": \"2013-08-27 09:03:34 UTC\",\n    \"updated_at\": \"2019-02-05 23:30:31 UTC\",\n    \"commits\": 6,\n    \"affiliation\": \"Alibaba\"\n  },\n  {\n    \"login\": \"hamelsmu\",\n    \"id\": 1483922,\n    \"node_id\": \"MDQ6VXNlcjE0ODM5MjI=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/1483922?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/hamelsmu\",\n    \"html_url\": \"https://github.com/hamelsmu\",\n    \"followers_url\": \"https://api.github.com/users/hamelsmu/followers\",\n    \"following_url\": \"https://api.github.com/users/hamelsmu/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/hamelsmu/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/hamelsmu/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/hamelsmu/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/hamelsmu/orgs\",\n    \"repos_url\": \"https://api.github.com/users/hamelsmu/repos\",\n    \"events_url\": \"https://api.github.com/users/hamelsmu/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/hamelsmu/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": true,\n    \"name\": \"Hamel Husain\",\n    \"company\": \"!github \",\n    \"blog\": \"http://hamel.io\",\n    \"location\": \"Portland, OR\",\n    \"email\": \"hamelsmu!github.com\",\n    \"hireable\": true,\n    \"bio\": \"Staff Machine Learning Engineer \\r\\n\\r\\nCurrently @github \\r\\nPreviously @airbnb, @datarobot\",\n    \"public_repos\": 66,\n    \"public_gists\": 17,\n    \"followers\": 283,\n    \"following\": 43,\n    \"created_at\": \"2012-02-29 02:56:50 UTC\",\n    \"updated_at\": \"2019-02-20 16:55:54 UTC\",\n    \"commits\": 6\n  },\n  {\n    \"login\": \"ewilderj\",\n    \"id\": 9475,\n    \"node_id\": \"MDQ6VXNlcjk0NzU=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/9475?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ewilderj\",\n    \"html_url\": \"https://github.com/ewilderj\",\n    \"followers_url\": \"https://api.github.com/users/ewilderj/followers\",\n    \"following_url\": \"https://api.github.com/users/ewilderj/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ewilderj/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ewilderj/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ewilderj/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ewilderj/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ewilderj/repos\",\n    \"events_url\": \"https://api.github.com/users/ewilderj/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ewilderj/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Edd Wilder-James\",\n    \"company\": \"!google \",\n    \"blog\": \"http://ewj.me/\",\n    \"location\": \"California, US\",\n    \"email\": \"ewj!google.com\",\n    \"hireable\": null,\n    \"bio\": \"Open source strategy @Google @TensorFlow @Kubeflow\",\n    \"public_repos\": 19,\n    \"public_gists\": 6,\n    \"followers\": 87,\n    \"following\": 5,\n    \"created_at\": \"2008-05-06 15:10:56 UTC\",\n    \"updated_at\": \"2019-01-23 20:08:59 UTC\",\n    \"commits\": 6,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"svalleru\",\n    \"id\": 1657324,\n    \"node_id\": \"MDQ6VXNlcjE2NTczMjQ=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1657324?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/svalleru\",\n    \"html_url\": \"https://github.com/svalleru\",\n    \"followers_url\": \"https://api.github.com/users/svalleru/followers\",\n    \"following_url\": \"https://api.github.com/users/svalleru/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/svalleru/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/svalleru/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/svalleru/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/svalleru/orgs\",\n    \"repos_url\": \"https://api.github.com/users/svalleru/repos\",\n    \"events_url\": \"https://api.github.com/users/svalleru/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/svalleru/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Shan Valleru\",\n    \"company\": \"LinkedIn, FindSimilarMovies.com\",\n    \"blog\": \"http://svalle.ru\",\n    \"location\": \"San Francisco\",\n    \"email\": \"svalleru!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 77,\n    \"public_gists\": 25,\n    \"followers\": 6,\n    \"following\": 3,\n    \"created_at\": \"2012-04-18 23:17:49 UTC\",\n    \"updated_at\": \"2019-02-11 22:25:27 UTC\",\n    \"commits\": 6\n  },\n  {\n    \"login\": \"jinchihe\",\n    \"id\": 13673199,\n    \"node_id\": \"MDQ6VXNlcjEzNjczMTk5\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/13673199?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jinchihe\",\n    \"html_url\": \"https://github.com/jinchihe\",\n    \"followers_url\": \"https://api.github.com/users/jinchihe/followers\",\n    \"following_url\": \"https://api.github.com/users/jinchihe/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jinchihe/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jinchihe/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jinchihe/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jinchihe/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jinchihe/repos\",\n    \"events_url\": \"https://api.github.com/users/jinchihe/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jinchihe/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jin Chi He\",\n    \"company\": \"IBM\",\n    \"blog\": \"\",\n    \"location\": \"Xi'an\",\n    \"email\": \"hejinchi!cn.ibm.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 20,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2015-08-06 06:09:26 UTC\",\n    \"updated_at\": \"2019-01-29 15:21:07 UTC\",\n    \"commits\": 6,\n    \"affiliation\": \"IBM\"\n  },\n  {\n    \"login\": \"lkpdn\",\n    \"id\": 17020294,\n    \"node_id\": \"MDQ6VXNlcjE3MDIwMjk0\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/17020294?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/lkpdn\",\n    \"html_url\": \"https://github.com/lkpdn\",\n    \"followers_url\": \"https://api.github.com/users/lkpdn/followers\",\n    \"following_url\": \"https://api.github.com/users/lkpdn/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/lkpdn/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/lkpdn/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/lkpdn/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/lkpdn/orgs\",\n    \"repos_url\": \"https://api.github.com/users/lkpdn/repos\",\n    \"events_url\": \"https://api.github.com/users/lkpdn/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/lkpdn/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Koichiro Den\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Tokyo, Japan\",\n    \"email\": \"17020294+lkpdn!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 47,\n    \"public_gists\": 0,\n    \"followers\": 4,\n    \"following\": 4,\n    \"created_at\": \"2016-02-02 06:34:22 UTC\",\n    \"updated_at\": \"2019-01-18 23:30:00 UTC\",\n    \"commits\": 6\n  },\n  {\n    \"login\": \"mayankjuneja\",\n    \"id\": 1075715,\n    \"node_id\": \"MDQ6VXNlcjEwNzU3MTU=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1075715?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mayankjuneja\",\n    \"html_url\": \"https://github.com/mayankjuneja\",\n    \"followers_url\": \"https://api.github.com/users/mayankjuneja/followers\",\n    \"following_url\": \"https://api.github.com/users/mayankjuneja/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mayankjuneja/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mayankjuneja/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mayankjuneja/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mayankjuneja/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mayankjuneja/repos\",\n    \"events_url\": \"https://api.github.com/users/mayankjuneja/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mayankjuneja/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Mayank Juneja\",\n    \"company\": null,\n    \"blog\": \"http://researchweb.iiit.ac.in/~mayank.juneja\",\n    \"location\": null,\n    \"email\": \"mayankjuneja1!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"Lyft\",\n    \"public_repos\": 12,\n    \"public_gists\": 2,\n    \"followers\": 7,\n    \"following\": 0,\n    \"created_at\": \"2011-09-24 04:48:47 UTC\",\n    \"updated_at\": \"2019-02-19 16:40:56 UTC\",\n    \"commits\": 6\n  },\n  {\n    \"login\": \"vinaykakade\",\n    \"id\": 10574123,\n    \"node_id\": \"MDQ6VXNlcjEwNTc0MTIz\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/10574123?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/vinaykakade\",\n    \"html_url\": \"https://github.com/vinaykakade\",\n    \"followers_url\": \"https://api.github.com/users/vinaykakade/followers\",\n    \"following_url\": \"https://api.github.com/users/vinaykakade/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/vinaykakade/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/vinaykakade/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/vinaykakade/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/vinaykakade/orgs\",\n    \"repos_url\": \"https://api.github.com/users/vinaykakade/repos\",\n    \"events_url\": \"https://api.github.com/users/vinaykakade/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/vinaykakade/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Vinay Kakade\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"vkakade!lyft.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2015-01-17 15:01:36 UTC\",\n    \"updated_at\": \"2018-10-15 06:31:13 UTC\",\n    \"commits\": 6\n  },\n  {\n    \"login\": \"TimZaman\",\n    \"id\": 7721540,\n    \"node_id\": \"MDQ6VXNlcjc3MjE1NDA=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/7721540?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/TimZaman\",\n    \"html_url\": \"https://github.com/TimZaman\",\n    \"followers_url\": \"https://api.github.com/users/TimZaman/followers\",\n    \"following_url\": \"https://api.github.com/users/TimZaman/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/TimZaman/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/TimZaman/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/TimZaman/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/TimZaman/orgs\",\n    \"repos_url\": \"https://api.github.com/users/TimZaman/repos\",\n    \"events_url\": \"https://api.github.com/users/TimZaman/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/TimZaman/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Tim Zaman\",\n    \"company\": \"!NVIDIA \",\n    \"blog\": \"www.timzaman.com\",\n    \"location\": \"Mountain View\",\n    \"email\": \"timbobel!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"ai infra\",\n    \"public_repos\": 23,\n    \"public_gists\": 1,\n    \"followers\": 100,\n    \"following\": 6,\n    \"created_at\": \"2014-05-28 07:42:10 UTC\",\n    \"updated_at\": \"2019-01-17 08:55:30 UTC\",\n    \"commits\": 6\n  },\n  {\n    \"login\": \"moon03432\",\n    \"id\": 11847340,\n    \"node_id\": \"MDQ6VXNlcjExODQ3MzQw\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/11847340?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/moon03432\",\n    \"html_url\": \"https://github.com/moon03432\",\n    \"followers_url\": \"https://api.github.com/users/moon03432/followers\",\n    \"following_url\": \"https://api.github.com/users/moon03432/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/moon03432/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/moon03432/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/moon03432/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/moon03432/orgs\",\n    \"repos_url\": \"https://api.github.com/users/moon03432/repos\",\n    \"events_url\": \"https://api.github.com/users/moon03432/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/moon03432/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Yue Huang\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"shanghai\",\n    \"email\": \"yue.huang.enst!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 20,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 4,\n    \"created_at\": \"2015-04-08 04:48:11 UTC\",\n    \"updated_at\": \"2019-01-25 04:04:03 UTC\",\n    \"commits\": 6\n  },\n  {\n    \"login\": \"jian-he\",\n    \"id\": 3662775,\n    \"node_id\": \"MDQ6VXNlcjM2NjI3NzU=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/3662775?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jian-he\",\n    \"html_url\": \"https://github.com/jian-he\",\n    \"followers_url\": \"https://api.github.com/users/jian-he/followers\",\n    \"following_url\": \"https://api.github.com/users/jian-he/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jian-he/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jian-he/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jian-he/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jian-he/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jian-he/repos\",\n    \"events_url\": \"https://api.github.com/users/jian-he/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jian-he/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jian He\",\n    \"company\": \"!Alibaba\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"jianhe788!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"Now at Alibaba, previously at  Hortonworks\\r\\n\",\n    \"public_repos\": 15,\n    \"public_gists\": 0,\n    \"followers\": 18,\n    \"following\": 0,\n    \"created_at\": \"2013-02-21 19:34:51 UTC\",\n    \"updated_at\": \"2019-02-01 07:37:48 UTC\",\n    \"commits\": 6\n  },\n  {\n    \"login\": \"codeflitting\",\n    \"id\": 6194419,\n    \"node_id\": \"MDQ6VXNlcjYxOTQ0MTk=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/6194419?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/codeflitting\",\n    \"html_url\": \"https://github.com/codeflitting\",\n    \"followers_url\": \"https://api.github.com/users/codeflitting/followers\",\n    \"following_url\": \"https://api.github.com/users/codeflitting/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/codeflitting/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/codeflitting/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/codeflitting/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/codeflitting/orgs\",\n    \"repos_url\": \"https://api.github.com/users/codeflitting/repos\",\n    \"events_url\": \"https://api.github.com/users/codeflitting/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/codeflitting/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Pengyu Chen\",\n    \"company\": \"!caicloud \",\n    \"blog\": \"www.codeflitting.com\",\n    \"location\": \"杭州\",\n    \"email\": \"codeflitting!gmail.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 20,\n    \"public_gists\": 4,\n    \"followers\": 3,\n    \"following\": 7,\n    \"created_at\": \"2013-12-16 06:04:03 UTC\",\n    \"updated_at\": \"2019-02-18 02:23:19 UTC\",\n    \"commits\": 6\n  },\n  {\n    \"login\": \"mitake\",\n    \"id\": 1173955,\n    \"node_id\": \"MDQ6VXNlcjExNzM5NTU=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/1173955?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mitake\",\n    \"html_url\": \"https://github.com/mitake\",\n    \"followers_url\": \"https://api.github.com/users/mitake/followers\",\n    \"following_url\": \"https://api.github.com/users/mitake/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mitake/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mitake/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mitake/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mitake/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mitake/repos\",\n    \"events_url\": \"https://api.github.com/users/mitake/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mitake/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Hitoshi Mitake\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"mitake.hitoshi!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 55,\n    \"public_gists\": 14,\n    \"followers\": 80,\n    \"following\": 0,\n    \"created_at\": \"2011-11-05 06:55:16 UTC\",\n    \"updated_at\": \"2018-12-30 14:39:40 UTC\",\n    \"commits\": 6,\n    \"affiliation\": \"NTT < 2018-06-01, Independent\"\n  },\n  {\n    \"login\": \"danisla\",\n    \"id\": 323725,\n    \"node_id\": \"MDQ6VXNlcjMyMzcyNQ==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/323725?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/danisla\",\n    \"html_url\": \"https://github.com/danisla\",\n    \"followers_url\": \"https://api.github.com/users/danisla/followers\",\n    \"following_url\": \"https://api.github.com/users/danisla/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/danisla/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/danisla/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/danisla/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/danisla/orgs\",\n    \"repos_url\": \"https://api.github.com/users/danisla/repos\",\n    \"events_url\": \"https://api.github.com/users/danisla/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/danisla/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Dan Isla\",\n    \"company\": \"Google\",\n    \"blog\": \"\",\n    \"location\": \"Irvine, CA\",\n    \"email\": \"dan.isla!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 109,\n    \"public_gists\": 10,\n    \"followers\": 37,\n    \"following\": 0,\n    \"created_at\": \"2010-07-05 23:37:55 UTC\",\n    \"updated_at\": \"2019-02-15 19:08:57 UTC\",\n    \"commits\": 6,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"osswangxining\",\n    \"id\": 10258572,\n    \"node_id\": \"MDQ6VXNlcjEwMjU4NTcy\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/10258572?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/osswangxining\",\n    \"html_url\": \"https://github.com/osswangxining\",\n    \"followers_url\": \"https://api.github.com/users/osswangxining/followers\",\n    \"following_url\": \"https://api.github.com/users/osswangxining/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/osswangxining/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/osswangxining/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/osswangxining/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/osswangxining/orgs\",\n    \"repos_url\": \"https://api.github.com/users/osswangxining/repos\",\n    \"events_url\": \"https://api.github.com/users/osswangxining/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/osswangxining/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Xi Ning Wang\",\n    \"company\": \"Alibaba Cloud\",\n    \"blog\": \"https://osswangxining.github.io\",\n    \"location\": \"Bei Jing\",\n    \"email\": \"osswangxining!163.com\",\n    \"hireable\": true,\n    \"bio\": \"https://osswangxining.github.io\",\n    \"public_repos\": 115,\n    \"public_gists\": 0,\n    \"followers\": 30,\n    \"following\": 11,\n    \"created_at\": \"2014-12-21 08:11:10 UTC\",\n    \"updated_at\": \"2019-01-11 16:21:18 UTC\",\n    \"commits\": 5,\n    \"affiliation\": \"Net EASE\"\n  },\n  {\n    \"login\": \"mrkm4ntr\",\n    \"id\": 6421289,\n    \"node_id\": \"MDQ6VXNlcjY0MjEyODk=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/6421289?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mrkm4ntr\",\n    \"html_url\": \"https://github.com/mrkm4ntr\",\n    \"followers_url\": \"https://api.github.com/users/mrkm4ntr/followers\",\n    \"following_url\": \"https://api.github.com/users/mrkm4ntr/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mrkm4ntr/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mrkm4ntr/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mrkm4ntr/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mrkm4ntr/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mrkm4ntr/repos\",\n    \"events_url\": \"https://api.github.com/users/mrkm4ntr/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mrkm4ntr/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Shintaro Murakami\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"mrkm4ntr!gmail.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 40,\n    \"public_gists\": 2,\n    \"followers\": 13,\n    \"following\": 3,\n    \"created_at\": \"2014-01-16 16:13:52 UTC\",\n    \"updated_at\": \"2018-12-19 12:56:36 UTC\",\n    \"commits\": 5\n  },\n  {\n    \"login\": \"xieydd\",\n    \"id\": 20329697,\n    \"node_id\": \"MDQ6VXNlcjIwMzI5Njk3\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/20329697?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/xieydd\",\n    \"html_url\": \"https://github.com/xieydd\",\n    \"followers_url\": \"https://api.github.com/users/xieydd/followers\",\n    \"following_url\": \"https://api.github.com/users/xieydd/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/xieydd/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/xieydd/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/xieydd/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/xieydd/orgs\",\n    \"repos_url\": \"https://api.github.com/users/xieydd/repos\",\n    \"events_url\": \"https://api.github.com/users/xieydd/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/xieydd/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"xieydd\",\n    \"company\": \"!Unisound @unisound-ail\",\n    \"blog\": \"https://xieydd.github.io/\",\n    \"location\": \"ShangHai,China\",\n    \"email\": \"xieydd!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"AI Infra , Contributor of Cloud Native and DeepLearning\",\n    \"public_repos\": 147,\n    \"public_gists\": 0,\n    \"followers\": 19,\n    \"following\": 75,\n    \"created_at\": \"2016-07-07 01:34:40 UTC\",\n    \"updated_at\": \"2019-01-03 03:30:08 UTC\",\n    \"commits\": 5\n  },\n  {\n    \"login\": \"soolaugust\",\n    \"id\": 10558124,\n    \"node_id\": \"MDQ6VXNlcjEwNTU4MTI0\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/10558124?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/soolaugust\",\n    \"html_url\": \"https://github.com/soolaugust\",\n    \"followers_url\": \"https://api.github.com/users/soolaugust/followers\",\n    \"following_url\": \"https://api.github.com/users/soolaugust/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/soolaugust/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/soolaugust/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/soolaugust/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/soolaugust/orgs\",\n    \"repos_url\": \"https://api.github.com/users/soolaugust/repos\",\n    \"events_url\": \"https://api.github.com/users/soolaugust/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/soolaugust/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"soolaugust\",\n    \"company\": null,\n    \"blog\": \"soolaugust.github.io\",\n    \"location\": \"China\",\n    \"email\": \"soolaugust!gmail.com\",\n    \"hireable\": true,\n    \"bio\": \"Trust codes. Trust fact.\",\n    \"public_repos\": 14,\n    \"public_gists\": 4,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2015-01-16 07:03:25 UTC\",\n    \"updated_at\": \"2019-02-15 15:09:26 UTC\",\n    \"commits\": 5\n  },\n  {\n    \"login\": \"sambaiz\",\n    \"id\": 1692572,\n    \"node_id\": \"MDQ6VXNlcjE2OTI1NzI=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1692572?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/sambaiz\",\n    \"html_url\": \"https://github.com/sambaiz\",\n    \"followers_url\": \"https://api.github.com/users/sambaiz/followers\",\n    \"following_url\": \"https://api.github.com/users/sambaiz/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/sambaiz/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/sambaiz/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/sambaiz/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/sambaiz/orgs\",\n    \"repos_url\": \"https://api.github.com/users/sambaiz/repos\",\n    \"events_url\": \"https://api.github.com/users/sambaiz/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/sambaiz/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Taiki Sakamoto\",\n    \"company\": null,\n    \"blog\": \"https://www.sambaiz.net\",\n    \"location\": \"Tokyo\",\n    \"email\": \"godgourd!gmail.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 63,\n    \"public_gists\": 29,\n    \"followers\": 26,\n    \"following\": 1,\n    \"created_at\": \"2012-04-30 13:55:15 UTC\",\n    \"updated_at\": \"2018-09-24 02:56:41 UTC\",\n    \"commits\": 5\n  },\n  {\n    \"login\": \"ramdootp\",\n    \"id\": 25822222,\n    \"node_id\": \"MDQ6VXNlcjI1ODIyMjIy\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/25822222?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ramdootp\",\n    \"html_url\": \"https://github.com/ramdootp\",\n    \"followers_url\": \"https://api.github.com/users/ramdootp/followers\",\n    \"following_url\": \"https://api.github.com/users/ramdootp/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ramdootp/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ramdootp/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ramdootp/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ramdootp/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ramdootp/repos\",\n    \"events_url\": \"https://api.github.com/users/ramdootp/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ramdootp/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": \"!CiscoAI \",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ramdoot!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2017-02-16 14:18:29 UTC\",\n    \"updated_at\": \"2019-02-18 16:05:48 UTC\",\n    \"commits\": 5\n  },\n  {\n    \"login\": \"jzp1025\",\n    \"id\": 18008646,\n    \"node_id\": \"MDQ6VXNlcjE4MDA4NjQ2\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/18008646?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jzp1025\",\n    \"html_url\": \"https://github.com/jzp1025\",\n    \"followers_url\": \"https://api.github.com/users/jzp1025/followers\",\n    \"following_url\": \"https://api.github.com/users/jzp1025/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jzp1025/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jzp1025/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jzp1025/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jzp1025/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jzp1025/repos\",\n    \"events_url\": \"https://api.github.com/users/jzp1025/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jzp1025/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Zongpei Jiang\",\n    \"company\": \"Tsinghua\",\n    \"blog\": \"\",\n    \"location\": \"Beijing China\",\n    \"email\": \"609827646!qq.com\",\n    \"hireable\": null,\n    \"bio\": \"Tusimple HPC Intern\",\n    \"public_repos\": 13,\n    \"public_gists\": 0,\n    \"followers\": 9,\n    \"following\": 1,\n    \"created_at\": \"2016-03-22 13:54:12 UTC\",\n    \"updated_at\": \"2019-02-18 09:03:38 UTC\",\n    \"commits\": 5\n  },\n  {\n    \"login\": \"suleisl2000\",\n    \"id\": 28015432,\n    \"node_id\": \"MDQ6VXNlcjI4MDE1NDMy\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/28015432?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/suleisl2000\",\n    \"html_url\": \"https://github.com/suleisl2000\",\n    \"followers_url\": \"https://api.github.com/users/suleisl2000/followers\",\n    \"following_url\": \"https://api.github.com/users/suleisl2000/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/suleisl2000/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/suleisl2000/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/suleisl2000/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/suleisl2000/orgs\",\n    \"repos_url\": \"https://api.github.com/users/suleisl2000/repos\",\n    \"events_url\": \"https://api.github.com/users/suleisl2000/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/suleisl2000/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Lei Su\",\n    \"company\": \"TuSimple\",\n    \"blog\": \"\",\n    \"location\": \"Beijing\",\n    \"email\": \"suleisl2000!hotmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 31,\n    \"public_gists\": 0,\n    \"followers\": 5,\n    \"following\": 0,\n    \"created_at\": \"2017-04-25 16:47:10 UTC\",\n    \"updated_at\": \"2019-02-19 06:54:02 UTC\",\n    \"commits\": 5,\n    \"affiliation\": \"IBM < 2017-05-01, TuSimple\"\n  },\n  {\n    \"login\": \"cwbeitel\",\n    \"id\": 2348401,\n    \"node_id\": \"MDQ6VXNlcjIzNDg0MDE=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/2348401?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/cwbeitel\",\n    \"html_url\": \"https://github.com/cwbeitel\",\n    \"followers_url\": \"https://api.github.com/users/cwbeitel/followers\",\n    \"following_url\": \"https://api.github.com/users/cwbeitel/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/cwbeitel/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/cwbeitel/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/cwbeitel/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/cwbeitel/orgs\",\n    \"repos_url\": \"https://api.github.com/users/cwbeitel/repos\",\n    \"events_url\": \"https://api.github.com/users/cwbeitel/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/cwbeitel/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Christopher Beitel\",\n    \"company\": \"University of California, San Francisco\",\n    \"blog\": \"\",\n    \"location\": \"Berkeley, CA\",\n    \"email\": \"cwbeitel!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Director of ML Research at UCSF Neuroscape and Project Clarify\",\n    \"public_repos\": 17,\n    \"public_gists\": 12,\n    \"followers\": 9,\n    \"following\": 3,\n    \"created_at\": \"2012-09-14 17:50:41 UTC\",\n    \"updated_at\": \"2019-02-11 20:26:07 UTC\",\n    \"commits\": 5\n  },\n  {\n    \"login\": \"eLco\",\n    \"id\": 281106,\n    \"node_id\": \"MDQ6VXNlcjI4MTEwNg==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/281106?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/eLco\",\n    \"html_url\": \"https://github.com/eLco\",\n    \"followers_url\": \"https://api.github.com/users/eLco/followers\",\n    \"following_url\": \"https://api.github.com/users/eLco/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/eLco/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/eLco/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/eLco/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/eLco/orgs\",\n    \"repos_url\": \"https://api.github.com/users/eLco/repos\",\n    \"events_url\": \"https://api.github.com/users/eLco/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/eLco/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Oleg Shepetjuk\",\n    \"company\": \"!agilestacks \",\n    \"blog\": \"\",\n    \"location\": \"Riga, Latvia\",\n    \"email\": \"oleg!agilestacks.com\",\n    \"hireable\": null,\n    \"bio\": \"Senioro SRE for AgileStacks\",\n    \"public_repos\": 8,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2010-05-19 07:11:17 UTC\",\n    \"updated_at\": \"2019-02-05 11:55:29 UTC\",\n    \"commits\": 5\n  },\n  {\n    \"login\": \"xychu\",\n    \"id\": 936394,\n    \"node_id\": \"MDQ6VXNlcjkzNjM5NA==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/936394?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/xychu\",\n    \"html_url\": \"https://github.com/xychu\",\n    \"followers_url\": \"https://api.github.com/users/xychu/followers\",\n    \"following_url\": \"https://api.github.com/users/xychu/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/xychu/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/xychu/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/xychu/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/xychu/orgs\",\n    \"repos_url\": \"https://api.github.com/users/xychu/repos\",\n    \"events_url\": \"https://api.github.com/users/xychu/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/xychu/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Chu Xiangyang\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"xychu2008!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 37,\n    \"public_gists\": 0,\n    \"followers\": 10,\n    \"following\": 7,\n    \"created_at\": \"2011-07-25 02:47:27 UTC\",\n    \"updated_at\": \"2019-01-14 08:48:37 UTC\",\n    \"commits\": 5,\n    \"affiliation\": \"Red Hat\"\n  },\n  {\n    \"login\": \"libbyandhelen\",\n    \"id\": 19221298,\n    \"node_id\": \"MDQ6VXNlcjE5MjIxMjk4\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/19221298?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/libbyandhelen\",\n    \"html_url\": \"https://github.com/libbyandhelen\",\n    \"followers_url\": \"https://api.github.com/users/libbyandhelen/followers\",\n    \"following_url\": \"https://api.github.com/users/libbyandhelen/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/libbyandhelen/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/libbyandhelen/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/libbyandhelen/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/libbyandhelen/orgs\",\n    \"repos_url\": \"https://api.github.com/users/libbyandhelen/repos\",\n    \"events_url\": \"https://api.github.com/users/libbyandhelen/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/libbyandhelen/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Yingbo Zhang\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"libbyandhelen!163.com\",\n    \"hireable\": null,\n    \"bio\": \"Undergraduate Student at CUHK\",\n    \"public_repos\": 11,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2016-05-06 08:29:22 UTC\",\n    \"updated_at\": \"2019-02-18 13:49:48 UTC\",\n    \"commits\": 5,\n    \"affiliation\": \"Net EASE\"\n  },\n  {\n    \"login\": \"holdenk\",\n    \"id\": 59893,\n    \"node_id\": \"MDQ6VXNlcjU5ODkz\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/59893?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/holdenk\",\n    \"html_url\": \"https://github.com/holdenk\",\n    \"followers_url\": \"https://api.github.com/users/holdenk/followers\",\n    \"following_url\": \"https://api.github.com/users/holdenk/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/holdenk/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/holdenk/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/holdenk/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/holdenk/orgs\",\n    \"repos_url\": \"https://api.github.com/users/holdenk/repos\",\n    \"events_url\": \"https://api.github.com/users/holdenk/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/holdenk/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Holden Karau\",\n    \"company\": \"Developer Advocate @Google\",\n    \"blog\": \"http://www.holdenkarau.com/resume.pdf?q=github\",\n    \"location\": \"San Francisco, CA, USA\",\n    \"email\": \"holden!pigscanfly.ca\",\n    \"hireable\": true,\n    \"bio\": \"Holden Karau is transgender Canadian, and an active open source contributor. She is a Spark committer and co-author of learning Spark and High Performance Spark\",\n    \"public_repos\": 191,\n    \"public_gists\": 8,\n    \"followers\": 1566,\n    \"following\": 12,\n    \"created_at\": \"2009-03-03 23:47:48 UTC\",\n    \"updated_at\": \"2019-02-18 00:41:02 UTC\",\n    \"commits\": 5\n  },\n  {\n    \"login\": \"sozercan\",\n    \"id\": 852750,\n    \"node_id\": \"MDQ6VXNlcjg1Mjc1MA==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/852750?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/sozercan\",\n    \"html_url\": \"https://github.com/sozercan\",\n    \"followers_url\": \"https://api.github.com/users/sozercan/followers\",\n    \"following_url\": \"https://api.github.com/users/sozercan/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/sozercan/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/sozercan/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/sozercan/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/sozercan/orgs\",\n    \"repos_url\": \"https://api.github.com/users/sozercan/repos\",\n    \"events_url\": \"https://api.github.com/users/sozercan/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/sozercan/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Sertaç Özercan\",\n    \"company\": \"!Microsoft\",\n    \"blog\": \"\",\n    \"location\": \"San Francisco, CA\",\n    \"email\": \"sozercan!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"👋 Software Engineer @Microsoft @Azure\",\n    \"public_repos\": 109,\n    \"public_gists\": 13,\n    \"followers\": 87,\n    \"following\": 151,\n    \"created_at\": \"2011-06-15 21:30:49 UTC\",\n    \"updated_at\": \"2019-02-09 00:36:06 UTC\",\n    \"commits\": 5\n  },\n  {\n    \"login\": \"cclauss\",\n    \"id\": 3709715,\n    \"node_id\": \"MDQ6VXNlcjM3MDk3MTU=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/3709715?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/cclauss\",\n    \"html_url\": \"https://github.com/cclauss\",\n    \"followers_url\": \"https://api.github.com/users/cclauss/followers\",\n    \"following_url\": \"https://api.github.com/users/cclauss/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/cclauss/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/cclauss/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/cclauss/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/cclauss/orgs\",\n    \"repos_url\": \"https://api.github.com/users/cclauss/repos\",\n    \"events_url\": \"https://api.github.com/users/cclauss/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/cclauss/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"https://www.patreon.com/cclauss\",\n    \"location\": \"Switzerland\",\n    \"email\": \"cclauss!me.com\",\n    \"hireable\": true,\n    \"bio\": \"Working hard to find and fix bugs in software and to ensure that Python code is properly ported to Python 3.  Building related tools and automated systems.\",\n    \"public_repos\": 1892,\n    \"public_gists\": 34,\n    \"followers\": 247,\n    \"following\": 43,\n    \"created_at\": \"2013-02-26 21:56:38 UTC\",\n    \"updated_at\": \"2019-02-20 14:23:58 UTC\",\n    \"commits\": 5,\n    \"affiliation\": \"Apple\"\n  },\n  {\n    \"login\": \"rongou\",\n    \"id\": 497101,\n    \"node_id\": \"MDQ6VXNlcjQ5NzEwMQ==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/497101?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/rongou\",\n    \"html_url\": \"https://github.com/rongou\",\n    \"followers_url\": \"https://api.github.com/users/rongou/followers\",\n    \"following_url\": \"https://api.github.com/users/rongou/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/rongou/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/rongou/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/rongou/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/rongou/orgs\",\n    \"repos_url\": \"https://api.github.com/users/rongou/repos\",\n    \"events_url\": \"https://api.github.com/users/rongou/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/rongou/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Rong Ou\",\n    \"company\": \"!NVIDIA\",\n    \"blog\": \"\",\n    \"location\": \"Palo Alto, CA\",\n    \"email\": \"rou!nvidia.com\",\n    \"hireable\": null,\n    \"bio\": \"AI Infrastructure @NVIDIA. Formerly @google.\",\n    \"public_repos\": 21,\n    \"public_gists\": 1,\n    \"followers\": 25,\n    \"following\": 2,\n    \"created_at\": \"2010-11-25 22:10:03 UTC\",\n    \"updated_at\": \"2019-02-06 15:26:53 UTC\",\n    \"commits\": 5,\n    \"affiliation\": \"NVidia\"\n  },\n  {\n    \"login\": \"qimingj\",\n    \"id\": 13439553,\n    \"node_id\": \"MDQ6VXNlcjEzNDM5NTUz\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/13439553?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/qimingj\",\n    \"html_url\": \"https://github.com/qimingj\",\n    \"followers_url\": \"https://api.github.com/users/qimingj/followers\",\n    \"following_url\": \"https://api.github.com/users/qimingj/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/qimingj/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/qimingj/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/qimingj/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/qimingj/orgs\",\n    \"repos_url\": \"https://api.github.com/users/qimingj/repos\",\n    \"events_url\": \"https://api.github.com/users/qimingj/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/qimingj/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"qimingj!google.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 7,\n    \"public_gists\": 0,\n    \"followers\": 9,\n    \"following\": 0,\n    \"created_at\": \"2015-07-21 18:21:31 UTC\",\n    \"updated_at\": \"2018-10-09 02:35:30 UTC\",\n    \"commits\": 5,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"ioandr\",\n    \"id\": 14974598,\n    \"node_id\": \"MDQ6VXNlcjE0OTc0NTk4\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/14974598?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ioandr\",\n    \"html_url\": \"https://github.com/ioandr\",\n    \"followers_url\": \"https://api.github.com/users/ioandr/followers\",\n    \"following_url\": \"https://api.github.com/users/ioandr/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ioandr/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ioandr/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ioandr/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ioandr/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ioandr/repos\",\n    \"events_url\": \"https://api.github.com/users/ioandr/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ioandr/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ioannis Androulidakis\",\n    \"company\": \"!Arrikto\",\n    \"blog\": \"https://www.linkedin.com/in/ioannis-androulidakis/\",\n    \"location\": \"Athens, Greece\",\n    \"email\": \"androulidakis.ioannis!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"Software Engineer\",\n    \"public_repos\": 11,\n    \"public_gists\": 0,\n    \"followers\": 10,\n    \"following\": 55,\n    \"created_at\": \"2015-10-05 08:45:13 UTC\",\n    \"updated_at\": \"2019-02-18 00:24:28 UTC\",\n    \"commits\": 4\n  },\n  {\n    \"login\": \"andreyvelich\",\n    \"id\": 31112157,\n    \"node_id\": \"MDQ6VXNlcjMxMTEyMTU3\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/31112157?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/andreyvelich\",\n    \"html_url\": \"https://github.com/andreyvelich\",\n    \"followers_url\": \"https://api.github.com/users/andreyvelich/followers\",\n    \"following_url\": \"https://api.github.com/users/andreyvelich/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/andreyvelich/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/andreyvelich/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/andreyvelich/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/andreyvelich/orgs\",\n    \"repos_url\": \"https://api.github.com/users/andreyvelich/repos\",\n    \"events_url\": \"https://api.github.com/users/andreyvelich/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/andreyvelich/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Andrey Velichkevich\",\n    \"company\": \"!Cisco\",\n    \"blog\": \"https://www.linkedin.com/in/andrey-velichkevich/\",\n    \"location\": \"San Jose\",\n    \"email\": \"31112157+andreyvelich!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 14,\n    \"public_gists\": 3,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2017-08-17 20:28:56 UTC\",\n    \"updated_at\": \"2019-02-16 00:43:26 UTC\",\n    \"commits\": 4\n  },\n  {\n    \"login\": \"ddysher\",\n    \"id\": 2191361,\n    \"node_id\": \"MDQ6VXNlcjIxOTEzNjE=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/2191361?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ddysher\",\n    \"html_url\": \"https://github.com/ddysher\",\n    \"followers_url\": \"https://api.github.com/users/ddysher/followers\",\n    \"following_url\": \"https://api.github.com/users/ddysher/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ddysher/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ddysher/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ddysher/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ddysher/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ddysher/repos\",\n    \"events_url\": \"https://api.github.com/users/ddysher/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ddysher/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Deyuan Deng\",\n    \"company\": \"!caicloud \",\n    \"blog\": \"https://caicloud.io\",\n    \"location\": \"Hangzhou, China\",\n    \"email\": \"deyuan!caicloud.io\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 45,\n    \"public_gists\": 1,\n    \"followers\": 103,\n    \"following\": 52,\n    \"created_at\": \"2012-08-21 18:08:02 UTC\",\n    \"updated_at\": \"2019-02-12 15:33:16 UTC\",\n    \"commits\": 4,\n    \"affiliation\": \"Google < 2015-07-25, Caicloud\"\n  },\n  {\n    \"login\": \"govindKAG\",\n    \"id\": 15324401,\n    \"node_id\": \"MDQ6VXNlcjE1MzI0NDAx\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/15324401?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/govindKAG\",\n    \"html_url\": \"https://github.com/govindKAG\",\n    \"followers_url\": \"https://api.github.com/users/govindKAG/followers\",\n    \"following_url\": \"https://api.github.com/users/govindKAG/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/govindKAG/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/govindKAG/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/govindKAG/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/govindKAG/orgs\",\n    \"repos_url\": \"https://api.github.com/users/govindKAG/repos\",\n    \"events_url\": \"https://api.github.com/users/govindKAG/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/govindKAG/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"govind cs\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"govindsomalal7!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 33,\n    \"public_gists\": 4,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2015-10-26 12:41:06 UTC\",\n    \"updated_at\": \"2019-01-16 14:29:27 UTC\",\n    \"commits\": 4\n  },\n  {\n    \"login\": \"CraigSterrett\",\n    \"id\": 17069368,\n    \"node_id\": \"MDQ6VXNlcjE3MDY5MzY4\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/17069368?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/CraigSterrett\",\n    \"html_url\": \"https://github.com/CraigSterrett\",\n    \"followers_url\": \"https://api.github.com/users/CraigSterrett/followers\",\n    \"following_url\": \"https://api.github.com/users/CraigSterrett/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/CraigSterrett/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/CraigSterrett/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/CraigSterrett/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/CraigSterrett/orgs\",\n    \"repos_url\": \"https://api.github.com/users/CraigSterrett/repos\",\n    \"events_url\": \"https://api.github.com/users/CraigSterrett/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/CraigSterrett/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"craig.sterrett!intel.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 3,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2016-02-04 16:49:40 UTC\",\n    \"updated_at\": \"2019-02-15 18:54:48 UTC\",\n    \"commits\": 4,\n    \"affiliation\": \"Intel\"\n  },\n  {\n    \"login\": \"DanSanche\",\n    \"id\": 3914119,\n    \"node_id\": \"MDQ6VXNlcjM5MTQxMTk=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/3914119?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/DanSanche\",\n    \"html_url\": \"https://github.com/DanSanche\",\n    \"followers_url\": \"https://api.github.com/users/DanSanche/followers\",\n    \"following_url\": \"https://api.github.com/users/DanSanche/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/DanSanche/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/DanSanche/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/DanSanche/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/DanSanche/orgs\",\n    \"repos_url\": \"https://api.github.com/users/DanSanche/repos\",\n    \"events_url\": \"https://api.github.com/users/DanSanche/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/DanSanche/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Daniel Sanche\",\n    \"company\": \"!google \",\n    \"blog\": \"\",\n    \"location\": \"Seattle, WA\",\n    \"email\": \"d.sanche14!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 29,\n    \"public_gists\": 14,\n    \"followers\": 25,\n    \"following\": 1,\n    \"created_at\": \"2013-03-19 21:03:29 UTC\",\n    \"updated_at\": \"2019-01-31 05:43:19 UTC\",\n    \"commits\": 4\n  },\n  {\n    \"login\": \"wukong1992\",\n    \"id\": 13702081,\n    \"node_id\": \"MDQ6VXNlcjEzNzAyMDgx\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/13702081?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/wukong1992\",\n    \"html_url\": \"https://github.com/wukong1992\",\n    \"followers_url\": \"https://api.github.com/users/wukong1992/followers\",\n    \"following_url\": \"https://api.github.com/users/wukong1992/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/wukong1992/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/wukong1992/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/wukong1992/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/wukong1992/orgs\",\n    \"repos_url\": \"https://api.github.com/users/wukong1992/repos\",\n    \"events_url\": \"https://api.github.com/users/wukong1992/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/wukong1992/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"wukong1992!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 2,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2015-08-08 02:20:36 UTC\",\n    \"updated_at\": \"2018-10-22 06:31:31 UTC\",\n    \"commits\": 4\n  },\n  {\n    \"login\": \"gaocegege\",\n    \"id\": 5100735,\n    \"node_id\": \"MDQ6VXNlcjUxMDA3MzU=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/5100735?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/gaocegege\",\n    \"html_url\": \"https://github.com/gaocegege\",\n    \"followers_url\": \"https://api.github.com/users/gaocegege/followers\",\n    \"following_url\": \"https://api.github.com/users/gaocegege/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/gaocegege/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/gaocegege/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/gaocegege/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/gaocegege/orgs\",\n    \"repos_url\": \"https://api.github.com/users/gaocegege/repos\",\n    \"events_url\": \"https://api.github.com/users/gaocegege/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/gaocegege/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ce Gao\",\n    \"company\": \"!caicloud\",\n    \"blog\": \"http://gaocegege.com\",\n    \"location\": \"Shanghai, China\",\n    \"email\": \"5100735+gaocegege!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"!arrowrowe's former roommate,\\r\\n!xuruowei's boyfriend,\\r\\n!kubeflow @coala maintainer, \\r\\n!SJTU-SE F12, B16\",\n    \"public_repos\": 214,\n    \"public_gists\": 23,\n    \"followers\": 910,\n    \"following\": 787,\n    \"created_at\": \"2013-07-27 03:42:37 UTC\",\n    \"updated_at\": \"2019-01-31 03:01:50 UTC\",\n    \"commits\": 4\n  },\n  {\n    \"login\": \"jinchihe\",\n    \"id\": 13673199,\n    \"node_id\": \"MDQ6VXNlcjEzNjczMTk5\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/13673199?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jinchihe\",\n    \"html_url\": \"https://github.com/jinchihe\",\n    \"followers_url\": \"https://api.github.com/users/jinchihe/followers\",\n    \"following_url\": \"https://api.github.com/users/jinchihe/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jinchihe/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jinchihe/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jinchihe/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jinchihe/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jinchihe/repos\",\n    \"events_url\": \"https://api.github.com/users/jinchihe/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jinchihe/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jin Chi He\",\n    \"company\": \"IBM\",\n    \"blog\": \"\",\n    \"location\": \"Xi'an\",\n    \"email\": \"hejinchi258!163.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 20,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2015-08-06 06:09:26 UTC\",\n    \"updated_at\": \"2019-01-29 15:21:07 UTC\",\n    \"commits\": 4,\n    \"affiliation\": \"Net EASE\"\n  },\n  {\n    \"login\": \"kimwnasptd\",\n    \"id\": 11134742,\n    \"node_id\": \"MDQ6VXNlcjExMTM0NzQy\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/11134742?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/kimwnasptd\",\n    \"html_url\": \"https://github.com/kimwnasptd\",\n    \"followers_url\": \"https://api.github.com/users/kimwnasptd/followers\",\n    \"following_url\": \"https://api.github.com/users/kimwnasptd/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/kimwnasptd/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/kimwnasptd/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/kimwnasptd/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/kimwnasptd/orgs\",\n    \"repos_url\": \"https://api.github.com/users/kimwnasptd/repos\",\n    \"events_url\": \"https://api.github.com/users/kimwnasptd/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/kimwnasptd/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Kimonas Sotirchos\",\n    \"company\": \"!arrikto\",\n    \"blog\": \"\",\n    \"location\": \"Athens\",\n    \"email\": \"kimwnasptd!arrikto.com\",\n    \"hireable\": true,\n    \"bio\": \"A Computer Science student at NTUA who likes to tinker with things.\",\n    \"public_repos\": 9,\n    \"public_gists\": 0,\n    \"followers\": 6,\n    \"following\": 8,\n    \"created_at\": \"2015-02-21 12:28:21 UTC\",\n    \"updated_at\": \"2019-02-04 22:01:49 UTC\",\n    \"commits\": 4\n  },\n  {\n    \"login\": \"avdaredevil\",\n    \"id\": 5303018,\n    \"node_id\": \"MDQ6VXNlcjUzMDMwMTg=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/5303018?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/avdaredevil\",\n    \"html_url\": \"https://github.com/avdaredevil\",\n    \"followers_url\": \"https://api.github.com/users/avdaredevil/followers\",\n    \"following_url\": \"https://api.github.com/users/avdaredevil/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/avdaredevil/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/avdaredevil/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/avdaredevil/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/avdaredevil/orgs\",\n    \"repos_url\": \"https://api.github.com/users/avdaredevil/repos\",\n    \"events_url\": \"https://api.github.com/users/avdaredevil/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/avdaredevil/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Apoorv Verma [AP]\",\n    \"company\": \"!google, Zelco Solutions\",\n    \"blog\": \"https://www.linkedin.com/in/apoorvverma/\",\n    \"location\": \"Greater New York City Area!\",\n    \"email\": \"avdaredevil!gmail.com\",\n    \"hireable\": true,\n    \"bio\": \"A script a day keeps the complacency away\",\n    \"public_repos\": 36,\n    \"public_gists\": 0,\n    \"followers\": 77,\n    \"following\": 35,\n    \"created_at\": \"2013-08-24 20:30:42 UTC\",\n    \"updated_at\": \"2019-02-14 23:28:21 UTC\",\n    \"commits\": 4\n  },\n  {\n    \"login\": \"wackxu\",\n    \"id\": 30396467,\n    \"node_id\": \"MDQ6VXNlcjMwMzk2NDY3\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/30396467?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/wackxu\",\n    \"html_url\": \"https://github.com/wackxu\",\n    \"followers_url\": \"https://api.github.com/users/wackxu/followers\",\n    \"following_url\": \"https://api.github.com/users/wackxu/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/wackxu/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/wackxu/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/wackxu/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/wackxu/orgs\",\n    \"repos_url\": \"https://api.github.com/users/wackxu/repos\",\n    \"events_url\": \"https://api.github.com/users/wackxu/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/wackxu/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"XsWack\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"xushiwei5!huawei.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 49,\n    \"public_gists\": 0,\n    \"followers\": 8,\n    \"following\": 9,\n    \"created_at\": \"2017-07-24 01:37:39 UTC\",\n    \"updated_at\": \"2019-01-17 03:39:22 UTC\",\n    \"commits\": 4,\n    \"affiliation\": \"Huawei\"\n  },\n  {\n    \"login\": \"lovejoy\",\n    \"id\": 469764,\n    \"node_id\": \"MDQ6VXNlcjQ2OTc2NA==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/469764?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/lovejoy\",\n    \"html_url\": \"https://github.com/lovejoy\",\n    \"followers_url\": \"https://api.github.com/users/lovejoy/followers\",\n    \"following_url\": \"https://api.github.com/users/lovejoy/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/lovejoy/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/lovejoy/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/lovejoy/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/lovejoy/orgs\",\n    \"repos_url\": \"https://api.github.com/users/lovejoy/repos\",\n    \"events_url\": \"https://api.github.com/users/lovejoy/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/lovejoy/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"lovejoy\",\n    \"company\": \"JD.COM\",\n    \"blog\": \"https://blog.spider.im\",\n    \"location\": \"Nanjing,China\",\n    \"email\": \"lyq.0617!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"https://www.youtube.com/watch?v=O7giGgi9TOY\",\n    \"public_repos\": 50,\n    \"public_gists\": 17,\n    \"followers\": 20,\n    \"following\": 38,\n    \"created_at\": \"2010-11-06 05:02:57 UTC\",\n    \"updated_at\": \"2019-01-29 04:15:56 UTC\",\n    \"commits\": 4,\n    \"affiliation\": \"Jd.Com\"\n  },\n  {\n    \"login\": \"ynqa\",\n    \"id\": 6745370,\n    \"node_id\": \"MDQ6VXNlcjY3NDUzNzA=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/6745370?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ynqa\",\n    \"html_url\": \"https://github.com/ynqa\",\n    \"followers_url\": \"https://api.github.com/users/ynqa/followers\",\n    \"following_url\": \"https://api.github.com/users/ynqa/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ynqa/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ynqa/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ynqa/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ynqa/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ynqa/repos\",\n    \"events_url\": \"https://api.github.com/users/ynqa/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ynqa/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"¯\\\\_(ツ)_/¯\",\n    \"company\": null,\n    \"blog\": \"https://twitter.com/yn_9a\",\n    \"location\": \"Japan\",\n    \"email\": \"un.pensiero.vano!gmail.com\",\n    \"hireable\": true,\n    \"bio\": \"http://yn9a.com\",\n    \"public_repos\": 27,\n    \"public_gists\": 0,\n    \"followers\": 25,\n    \"following\": 0,\n    \"created_at\": \"2014-02-21 07:02:47 UTC\",\n    \"updated_at\": \"2019-01-17 06:34:07 UTC\",\n    \"commits\": 4\n  },\n  {\n    \"login\": \"edlee2121\",\n    \"id\": 13398326,\n    \"node_id\": \"MDQ6VXNlcjEzMzk4MzI2\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/13398326?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/edlee2121\",\n    \"html_url\": \"https://github.com/edlee2121\",\n    \"followers_url\": \"https://api.github.com/users/edlee2121/followers\",\n    \"following_url\": \"https://api.github.com/users/edlee2121/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/edlee2121/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/edlee2121/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/edlee2121/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/edlee2121/orgs\",\n    \"repos_url\": \"https://api.github.com/users/edlee2121/repos\",\n    \"events_url\": \"https://api.github.com/users/edlee2121/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/edlee2121/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ed Lee\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"edlee2121!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 15,\n    \"public_gists\": 1,\n    \"followers\": 6,\n    \"following\": 5,\n    \"created_at\": \"2015-07-18 22:38:11 UTC\",\n    \"updated_at\": \"2018-12-01 06:52:54 UTC\",\n    \"commits\": 3\n  },\n  {\n    \"login\": \"garganubhav\",\n    \"id\": 19604023,\n    \"node_id\": \"MDQ6VXNlcjE5NjA0MDIz\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/19604023?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/garganubhav\",\n    \"html_url\": \"https://github.com/garganubhav\",\n    \"followers_url\": \"https://api.github.com/users/garganubhav/followers\",\n    \"following_url\": \"https://api.github.com/users/garganubhav/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/garganubhav/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/garganubhav/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/garganubhav/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/garganubhav/orgs\",\n    \"repos_url\": \"https://api.github.com/users/garganubhav/repos\",\n    \"events_url\": \"https://api.github.com/users/garganubhav/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/garganubhav/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Anubhav Garg\",\n    \"company\": \"!cisco\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"anubhavgarg5!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 5,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2016-05-27 06:23:56 UTC\",\n    \"updated_at\": \"2019-02-17 02:14:03 UTC\",\n    \"commits\": 3\n  },\n  {\n    \"login\": \"carmine\",\n    \"id\": 318852,\n    \"node_id\": \"MDQ6VXNlcjMxODg1Mg==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/318852?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/carmine\",\n    \"html_url\": \"https://github.com/carmine\",\n    \"followers_url\": \"https://api.github.com/users/carmine/followers\",\n    \"following_url\": \"https://api.github.com/users/carmine/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/carmine/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/carmine/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/carmine/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/carmine/orgs\",\n    \"repos_url\": \"https://api.github.com/users/carmine/repos\",\n    \"events_url\": \"https://api.github.com/users/carmine/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/carmine/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Carmine Rimi\",\n    \"company\": \"Canonical\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"carmine.rimi!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 50,\n    \"public_gists\": 5,\n    \"followers\": 18,\n    \"following\": 8,\n    \"created_at\": \"2010-06-30 14:06:31 UTC\",\n    \"updated_at\": \"2019-02-12 18:23:41 UTC\",\n    \"commits\": 3\n  },\n  {\n    \"login\": \"fisache\",\n    \"id\": 15536270,\n    \"node_id\": \"MDQ6VXNlcjE1NTM2Mjcw\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/15536270?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/fisache\",\n    \"html_url\": \"https://github.com/fisache\",\n    \"followers_url\": \"https://api.github.com/users/fisache/followers\",\n    \"following_url\": \"https://api.github.com/users/fisache/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/fisache/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/fisache/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/fisache/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/fisache/orgs\",\n    \"repos_url\": \"https://api.github.com/users/fisache/repos\",\n    \"events_url\": \"https://api.github.com/users/fisache/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/fisache/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Inki Hwang\",\n    \"company\": \"Samsung Electronics\",\n    \"blog\": \"\",\n    \"location\": \"Seoul, South Korea\",\n    \"email\": \"hwang031451!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \":)\",\n    \"public_repos\": 92,\n    \"public_gists\": 19,\n    \"followers\": 17,\n    \"following\": 21,\n    \"created_at\": \"2015-11-01 07:15:58 UTC\",\n    \"updated_at\": \"2019-02-18 08:45:14 UTC\",\n    \"commits\": 3\n  },\n  {\n    \"login\": \"Svendegroote91\",\n    \"id\": 33965133,\n    \"node_id\": \"MDQ6VXNlcjMzOTY1MTMz\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/33965133?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Svendegroote91\",\n    \"html_url\": \"https://github.com/Svendegroote91\",\n    \"followers_url\": \"https://api.github.com/users/Svendegroote91/followers\",\n    \"following_url\": \"https://api.github.com/users/Svendegroote91/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Svendegroote91/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Svendegroote91/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Svendegroote91/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Svendegroote91/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Svendegroote91/repos\",\n    \"events_url\": \"https://api.github.com/users/Svendegroote91/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Svendegroote91/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"33965133+svendegroote91!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 2,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2017-11-24 18:00:25 UTC\",\n    \"updated_at\": \"2019-02-10 11:52:14 UTC\",\n    \"commits\": 3\n  },\n  {\n    \"login\": \"karthikv2k\",\n    \"id\": 627808,\n    \"node_id\": \"MDQ6VXNlcjYyNzgwOA==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/627808?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/karthikv2k\",\n    \"html_url\": \"https://github.com/karthikv2k\",\n    \"followers_url\": \"https://api.github.com/users/karthikv2k/followers\",\n    \"following_url\": \"https://api.github.com/users/karthikv2k/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/karthikv2k/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/karthikv2k/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/karthikv2k/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/karthikv2k/orgs\",\n    \"repos_url\": \"https://api.github.com/users/karthikv2k/repos\",\n    \"events_url\": \"https://api.github.com/users/karthikv2k/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/karthikv2k/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Karthik Ramasamy\",\n    \"company\": \"!google \",\n    \"blog\": \"\",\n    \"location\": \"Mountain View\",\n    \"email\": \"karthikv2k!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 25,\n    \"public_gists\": 0,\n    \"followers\": 8,\n    \"following\": 3,\n    \"created_at\": \"2011-02-20 02:13:11 UTC\",\n    \"updated_at\": \"2019-02-12 15:09:44 UTC\",\n    \"commits\": 3\n  },\n  {\n    \"login\": \"Oblynx\",\n    \"id\": 5130925,\n    \"node_id\": \"MDQ6VXNlcjUxMzA5MjU=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/5130925?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Oblynx\",\n    \"html_url\": \"https://github.com/Oblynx\",\n    \"followers_url\": \"https://api.github.com/users/Oblynx/followers\",\n    \"following_url\": \"https://api.github.com/users/Oblynx/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Oblynx/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Oblynx/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Oblynx/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Oblynx/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Oblynx/repos\",\n    \"events_url\": \"https://api.github.com/users/Oblynx/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Oblynx/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Konstantinos Samaras-Tsakiris\",\n    \"company\": \"CERN\",\n    \"blog\": \"\",\n    \"location\": \"Geneva\",\n    \"email\": \"ksamtsak!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 20,\n    \"public_gists\": 0,\n    \"followers\": 15,\n    \"following\": 7,\n    \"created_at\": \"2013-07-31 16:29:03 UTC\",\n    \"updated_at\": \"2019-02-11 15:45:30 UTC\",\n    \"commits\": 3\n  },\n  {\n    \"login\": \"ldcastell\",\n    \"id\": 16139975,\n    \"node_id\": \"MDQ6VXNlcjE2MTM5OTc1\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/16139975?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ldcastell\",\n    \"html_url\": \"https://github.com/ldcastell\",\n    \"followers_url\": \"https://api.github.com/users/ldcastell/followers\",\n    \"following_url\": \"https://api.github.com/users/ldcastell/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ldcastell/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ldcastell/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ldcastell/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ldcastell/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ldcastell/repos\",\n    \"events_url\": \"https://api.github.com/users/ldcastell/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ldcastell/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Daniel Castellanos\",\n    \"company\": \"!intel \",\n    \"blog\": \"\",\n    \"location\": \"Hillsboro, OR\",\n    \"email\": \"daniel.castellanos0289!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"I'm a Software Engineer who enjoys building new solutions that are easy to use and scale. front-end, backend, you name it :) \",\n    \"public_repos\": 8,\n    \"public_gists\": 3,\n    \"followers\": 7,\n    \"following\": 7,\n    \"created_at\": \"2015-12-03 18:31:43 UTC\",\n    \"updated_at\": \"2019-01-28 17:44:56 UTC\",\n    \"commits\": 3,\n    \"affiliation\": \"Intel\"\n  },\n  {\n    \"login\": \"royxue\",\n    \"id\": 4725561,\n    \"node_id\": \"MDQ6VXNlcjQ3MjU1NjE=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/4725561?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/royxue\",\n    \"html_url\": \"https://github.com/royxue\",\n    \"followers_url\": \"https://api.github.com/users/royxue/followers\",\n    \"following_url\": \"https://api.github.com/users/royxue/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/royxue/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/royxue/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/royxue/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/royxue/orgs\",\n    \"repos_url\": \"https://api.github.com/users/royxue/repos\",\n    \"events_url\": \"https://api.github.com/users/royxue/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/royxue/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Roy Xue\",\n    \"company\": null,\n    \"blog\": \"http://royxue.me/\",\n    \"location\": \"Palo Alto, CA, US\",\n    \"email\": \"xljroy!gmail.com\",\n    \"hireable\": true,\n    \"bio\": \"Man in RED\",\n    \"public_repos\": 97,\n    \"public_gists\": 8,\n    \"followers\": 68,\n    \"following\": 55,\n    \"created_at\": \"2013-06-18 06:10:29 UTC\",\n    \"updated_at\": \"2019-02-08 15:32:14 UTC\",\n    \"commits\": 3\n  },\n  {\n    \"login\": \"Maerville\",\n    \"id\": 6892557,\n    \"node_id\": \"MDQ6VXNlcjY4OTI1NTc=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/6892557?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Maerville\",\n    \"html_url\": \"https://github.com/Maerville\",\n    \"followers_url\": \"https://api.github.com/users/Maerville/followers\",\n    \"following_url\": \"https://api.github.com/users/Maerville/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Maerville/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Maerville/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Maerville/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Maerville/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Maerville/repos\",\n    \"events_url\": \"https://api.github.com/users/Maerville/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Maerville/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"maerville!ya.ru\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 8,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 2,\n    \"created_at\": \"2014-03-08 16:07:57 UTC\",\n    \"updated_at\": \"2018-12-27 11:27:33 UTC\",\n    \"commits\": 3\n  },\n  {\n    \"login\": \"sudeshsh\",\n    \"id\": 29582829,\n    \"node_id\": \"MDQ6VXNlcjI5NTgyODI5\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/29582829?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/sudeshsh\",\n    \"html_url\": \"https://github.com/sudeshsh\",\n    \"followers_url\": \"https://api.github.com/users/sudeshsh/followers\",\n    \"following_url\": \"https://api.github.com/users/sudeshsh/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/sudeshsh/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/sudeshsh/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/sudeshsh/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/sudeshsh/orgs\",\n    \"repos_url\": \"https://api.github.com/users/sudeshsh/repos\",\n    \"events_url\": \"https://api.github.com/users/sudeshsh/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/sudeshsh/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"San Jose\",\n    \"email\": \"sudesh.shinde!intel.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 1,\n    \"created_at\": \"2017-06-20 20:05:38 UTC\",\n    \"updated_at\": \"2019-01-15 22:47:10 UTC\",\n    \"commits\": 3,\n    \"affiliation\": \"Intel\"\n  },\n  {\n    \"login\": \"mhbuehler\",\n    \"id\": 7599217,\n    \"node_id\": \"MDQ6VXNlcjc1OTkyMTc=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/7599217?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mhbuehler\",\n    \"html_url\": \"https://github.com/mhbuehler\",\n    \"followers_url\": \"https://api.github.com/users/mhbuehler/followers\",\n    \"following_url\": \"https://api.github.com/users/mhbuehler/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mhbuehler/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mhbuehler/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mhbuehler/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mhbuehler/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mhbuehler/repos\",\n    \"events_url\": \"https://api.github.com/users/mhbuehler/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mhbuehler/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Melanie Buehler\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Portland, Oregon\",\n    \"email\": \"mhbuehler!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 3,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2014-05-16 04:29:49 UTC\",\n    \"updated_at\": \"2018-11-11 06:51:49 UTC\",\n    \"commits\": 3\n  },\n  {\n    \"login\": \"vanpelt\",\n    \"id\": 17,\n    \"node_id\": \"MDQ6VXNlcjE3\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/17?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/vanpelt\",\n    \"html_url\": \"https://github.com/vanpelt\",\n    \"followers_url\": \"https://api.github.com/users/vanpelt/followers\",\n    \"following_url\": \"https://api.github.com/users/vanpelt/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/vanpelt/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/vanpelt/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/vanpelt/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/vanpelt/orgs\",\n    \"repos_url\": \"https://api.github.com/users/vanpelt/repos\",\n    \"events_url\": \"https://api.github.com/users/vanpelt/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/vanpelt/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Chris Van Pelt\",\n    \"company\": \"crowdflower.com\",\n    \"blog\": \"vandev.com\",\n    \"location\": \"San Francisco\",\n    \"email\": \"vanpelt!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 48,\n    \"public_gists\": 48,\n    \"followers\": 75,\n    \"following\": 15,\n    \"created_at\": \"2008-01-13 05:57:18 UTC\",\n    \"updated_at\": \"2019-02-15 03:54:33 UTC\",\n    \"commits\": 3\n  },\n  {\n    \"login\": \"lluunn\",\n    \"id\": 32310205,\n    \"node_id\": \"MDQ6VXNlcjMyMzEwMjA1\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/32310205?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/lluunn\",\n    \"html_url\": \"https://github.com/lluunn\",\n    \"followers_url\": \"https://api.github.com/users/lluunn/followers\",\n    \"following_url\": \"https://api.github.com/users/lluunn/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/lluunn/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/lluunn/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/lluunn/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/lluunn/orgs\",\n    \"repos_url\": \"https://api.github.com/users/lluunn/repos\",\n    \"events_url\": \"https://api.github.com/users/lluunn/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/lluunn/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Lun-Kai Hsu\",\n    \"company\": \"Google\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"32310205+lluunn!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 16,\n    \"public_gists\": 2,\n    \"followers\": 11,\n    \"following\": 12,\n    \"created_at\": \"2017-09-26 19:08:27 UTC\",\n    \"updated_at\": \"2019-01-14 04:01:01 UTC\",\n    \"commits\": 3\n  },\n  {\n    \"login\": \"chenzhiwei\",\n    \"id\": 672668,\n    \"node_id\": \"MDQ6VXNlcjY3MjY2OA==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/672668?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/chenzhiwei\",\n    \"html_url\": \"https://github.com/chenzhiwei\",\n    \"followers_url\": \"https://api.github.com/users/chenzhiwei/followers\",\n    \"following_url\": \"https://api.github.com/users/chenzhiwei/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/chenzhiwei/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/chenzhiwei/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/chenzhiwei/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/chenzhiwei/orgs\",\n    \"repos_url\": \"https://api.github.com/users/chenzhiwei/repos\",\n    \"events_url\": \"https://api.github.com/users/chenzhiwei/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/chenzhiwei/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Chen Zhiwei\",\n    \"company\": \"!IBM\",\n    \"blog\": \"https://chenzhiwei.cn\",\n    \"location\": \"Xi'an, China\",\n    \"email\": \"zhiweik!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"Where there is a SHELL there is a way.\",\n    \"public_repos\": 49,\n    \"public_gists\": 1,\n    \"followers\": 134,\n    \"following\": 8,\n    \"created_at\": \"2011-03-16 09:14:37 UTC\",\n    \"updated_at\": \"2019-02-04 15:28:13 UTC\",\n    \"commits\": 3,\n    \"affiliation\": \"IBM\"\n  },\n  {\n    \"login\": \"ccding\",\n    \"id\": 1221778,\n    \"node_id\": \"MDQ6VXNlcjEyMjE3Nzg=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1221778?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ccding\",\n    \"html_url\": \"https://github.com/ccding\",\n    \"followers_url\": \"https://api.github.com/users/ccding/followers\",\n    \"following_url\": \"https://api.github.com/users/ccding/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ccding/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ccding/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ccding/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ccding/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ccding/repos\",\n    \"events_url\": \"https://api.github.com/users/ccding/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ccding/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Cong Ding\",\n    \"company\": \"Cornell\",\n    \"blog\": \"https://cding.org\",\n    \"location\": \"Ithaca, NY\",\n    \"email\": \"tuxding!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"Tux!9#, rawtux!\",\n    \"public_repos\": 12,\n    \"public_gists\": 2,\n    \"followers\": 117,\n    \"following\": 67,\n    \"created_at\": \"2011-11-26 11:33:41 UTC\",\n    \"updated_at\": \"2019-01-17 16:49:17 UTC\",\n    \"commits\": 3,\n    \"affiliation\": \"Independent < 2015-05-01, Google < 2015-08-01, Independent < 2016-05-01, Two Sigma < 2016-08-01, Independent < 2018-05-01, Alibaba < 2018-08-01, Independent\"\n  },\n  {\n    \"login\": \"yph152\",\n    \"id\": 20721597,\n    \"node_id\": \"MDQ6VXNlcjIwNzIxNTk3\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/20721597?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/yph152\",\n    \"html_url\": \"https://github.com/yph152\",\n    \"followers_url\": \"https://api.github.com/users/yph152/followers\",\n    \"following_url\": \"https://api.github.com/users/yph152/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/yph152/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/yph152/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/yph152/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/yph152/orgs\",\n    \"repos_url\": \"https://api.github.com/users/yph152/repos\",\n    \"events_url\": \"https://api.github.com/users/yph152/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/yph152/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Penghui Yan\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"1846523352!qq.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 18,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2016-07-29 09:12:02 UTC\",\n    \"updated_at\": \"2019-02-14 08:08:46 UTC\",\n    \"commits\": 3\n  },\n  {\n    \"login\": \"wgliang\",\n    \"id\": 8739301,\n    \"node_id\": \"MDQ6VXNlcjg3MzkzMDE=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/8739301?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/wgliang\",\n    \"html_url\": \"https://github.com/wgliang\",\n    \"followers_url\": \"https://api.github.com/users/wgliang/followers\",\n    \"following_url\": \"https://api.github.com/users/wgliang/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/wgliang/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/wgliang/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/wgliang/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/wgliang/orgs\",\n    \"repos_url\": \"https://api.github.com/users/wgliang/repos\",\n    \"events_url\": \"https://api.github.com/users/wgliang/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/wgliang/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Leon Wang\",\n    \"company\": \"!kubernetes @meituan-dianping\",\n    \"blog\": \"http://wgliang.github.io/\",\n    \"location\": \"Beijing\",\n    \"email\": \"iamwgliang!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"member of @kubernetes ⎈ \\r\\nauthor of @goreporter.\",\n    \"public_repos\": 58,\n    \"public_gists\": 0,\n    \"followers\": 197,\n    \"following\": 63,\n    \"created_at\": \"2014-09-11 16:16:36 UTC\",\n    \"updated_at\": \"2019-01-30 15:39:11 UTC\",\n    \"commits\": 3,\n    \"affiliation\": \"Meituan-Dianping\"\n  },\n  {\n    \"login\": \"mqliang\",\n    \"id\": 12423751,\n    \"node_id\": \"MDQ6VXNlcjEyNDIzNzUx\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/12423751?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mqliang\",\n    \"html_url\": \"https://github.com/mqliang\",\n    \"followers_url\": \"https://api.github.com/users/mqliang/followers\",\n    \"following_url\": \"https://api.github.com/users/mqliang/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mqliang/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mqliang/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mqliang/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mqliang/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mqliang/repos\",\n    \"events_url\": \"https://api.github.com/users/mqliang/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mqliang/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Liang Mingqiang\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Hangzhou city, Zhejiang Province, China\",\n    \"email\": \"secret.mqliang!gmail.com\",\n    \"hireable\": true,\n    \"bio\": \"I do not consider myself yet to have taken hold of it. But one thing I do: Forgetting what is behind and straining toward what is ahead.\",\n    \"public_repos\": 17,\n    \"public_gists\": 0,\n    \"followers\": 61,\n    \"following\": 90,\n    \"created_at\": \"2015-05-13 06:07:08 UTC\",\n    \"updated_at\": \"2019-02-12 23:26:47 UTC\",\n    \"commits\": 3,\n    \"affiliation\": \"Net EASE < 2015-10-30, Caicloud < 2017-04-01, Independent\"\n  },\n  {\n    \"login\": \"IMBurbank\",\n    \"id\": 21133719,\n    \"node_id\": \"MDQ6VXNlcjIxMTMzNzE5\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/21133719?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/IMBurbank\",\n    \"html_url\": \"https://github.com/IMBurbank\",\n    \"followers_url\": \"https://api.github.com/users/IMBurbank/followers\",\n    \"following_url\": \"https://api.github.com/users/IMBurbank/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/IMBurbank/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/IMBurbank/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/IMBurbank/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/IMBurbank/orgs\",\n    \"repos_url\": \"https://api.github.com/users/IMBurbank/repos\",\n    \"events_url\": \"https://api.github.com/users/IMBurbank/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/IMBurbank/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Isaac Burbank\",\n    \"company\": null,\n    \"blog\": \"https://www.isaacburbank.com/\",\n    \"location\": \"Denver, CO\",\n    \"email\": \"bassmanburbank!gmail.com\",\n    \"hireable\": true,\n    \"bio\": \"Engineer - Data Scientist\",\n    \"public_repos\": 37,\n    \"public_gists\": 9,\n    \"followers\": 4,\n    \"following\": 0,\n    \"created_at\": \"2016-08-19 22:49:17 UTC\",\n    \"updated_at\": \"2018-11-17 02:59:25 UTC\",\n    \"commits\": 3\n  },\n  {\n    \"login\": \"TheJaySmith\",\n    \"id\": 7904755,\n    \"node_id\": \"MDQ6VXNlcjc5MDQ3NTU=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7904755?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/TheJaySmith\",\n    \"html_url\": \"https://github.com/TheJaySmith\",\n    \"followers_url\": \"https://api.github.com/users/TheJaySmith/followers\",\n    \"following_url\": \"https://api.github.com/users/TheJaySmith/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/TheJaySmith/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/TheJaySmith/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/TheJaySmith/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/TheJaySmith/orgs\",\n    \"repos_url\": \"https://api.github.com/users/TheJaySmith/repos\",\n    \"events_url\": \"https://api.github.com/users/TheJaySmith/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/TheJaySmith/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jay Smith\",\n    \"company\": null,\n    \"blog\": \"thejaysmith.com\",\n    \"location\": \"San Francisco, CA\",\n    \"email\": \"js!thejaysmith.com\",\n    \"hireable\": null,\n    \"bio\": \"Cloud Customer Engineer\\r\\nKubernetes Enthusiast\",\n    \"public_repos\": 30,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 8,\n    \"created_at\": \"2014-06-16 17:02:17 UTC\",\n    \"updated_at\": \"2019-01-25 22:52:06 UTC\",\n    \"commits\": 3\n  },\n  {\n    \"login\": \"wmuizelaar\",\n    \"id\": 4037588,\n    \"node_id\": \"MDQ6VXNlcjQwMzc1ODg=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/4037588?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/wmuizelaar\",\n    \"html_url\": \"https://github.com/wmuizelaar\",\n    \"followers_url\": \"https://api.github.com/users/wmuizelaar/followers\",\n    \"following_url\": \"https://api.github.com/users/wmuizelaar/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/wmuizelaar/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/wmuizelaar/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/wmuizelaar/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/wmuizelaar/orgs\",\n    \"repos_url\": \"https://api.github.com/users/wmuizelaar/repos\",\n    \"events_url\": \"https://api.github.com/users/wmuizelaar/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/wmuizelaar/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Wietse Muizelaar\",\n    \"company\": \"!bolcom \",\n    \"blog\": \"http://www.bol.com/\",\n    \"location\": \"Hilversum, The Netherlands\",\n    \"email\": \"wmuizelaar!bol.com\",\n    \"hireable\": null,\n    \"bio\": \"Sysadmin working for @bolcom \",\n    \"public_repos\": 11,\n    \"public_gists\": 5,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2013-04-02 14:01:56 UTC\",\n    \"updated_at\": \"2019-01-07 14:00:25 UTC\",\n    \"commits\": 3\n  },\n  {\n    \"login\": \"raddaoui\",\n    \"id\": 16418855,\n    \"node_id\": \"MDQ6VXNlcjE2NDE4ODU1\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/16418855?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/raddaoui\",\n    \"html_url\": \"https://github.com/raddaoui\",\n    \"followers_url\": \"https://api.github.com/users/raddaoui/followers\",\n    \"following_url\": \"https://api.github.com/users/raddaoui/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/raddaoui/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/raddaoui/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/raddaoui/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/raddaoui/orgs\",\n    \"repos_url\": \"https://api.github.com/users/raddaoui/repos\",\n    \"events_url\": \"https://api.github.com/users/raddaoui/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/raddaoui/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ala Raddaoui\",\n    \"company\": \"Sada Systems\",\n    \"blog\": \"https://github.com/raddaoui\",\n    \"location\": \"Palo Alto, CA\",\n    \"email\": \"raddaouiala!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"big fan of football and open source, smart and cloud native solutions.\",\n    \"public_repos\": 33,\n    \"public_gists\": 7,\n    \"followers\": 18,\n    \"following\": 6,\n    \"created_at\": \"2015-12-23 21:28:13 UTC\",\n    \"updated_at\": \"2019-02-04 03:22:14 UTC\",\n    \"commits\": 3\n  },\n  {\n    \"login\": \"fxue\",\n    \"id\": 8238961,\n    \"node_id\": \"MDQ6VXNlcjgyMzg5NjE=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/8238961?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/fxue\",\n    \"html_url\": \"https://github.com/fxue\",\n    \"followers_url\": \"https://api.github.com/users/fxue/followers\",\n    \"following_url\": \"https://api.github.com/users/fxue/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/fxue/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/fxue/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/fxue/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/fxue/orgs\",\n    \"repos_url\": \"https://api.github.com/users/fxue/repos\",\n    \"events_url\": \"https://api.github.com/users/fxue/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/fxue/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Fei Xue\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"United States\",\n    \"email\": \"fayexuexue!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 12,\n    \"public_gists\": 0,\n    \"followers\": 9,\n    \"following\": 2,\n    \"created_at\": \"2014-07-22 19:56:23 UTC\",\n    \"updated_at\": \"2018-11-28 20:46:31 UTC\",\n    \"commits\": 3\n  },\n  {\n    \"login\": \"dtrawins\",\n    \"id\": 20400806,\n    \"node_id\": \"MDQ6VXNlcjIwNDAwODA2\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/20400806?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dtrawins\",\n    \"html_url\": \"https://github.com/dtrawins\",\n    \"followers_url\": \"https://api.github.com/users/dtrawins/followers\",\n    \"following_url\": \"https://api.github.com/users/dtrawins/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dtrawins/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dtrawins/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dtrawins/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dtrawins/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dtrawins/repos\",\n    \"events_url\": \"https://api.github.com/users/dtrawins/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dtrawins/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Trawinski, Dariusz\",\n    \"company\": \"Intel\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"dariusz.trawinski!intel.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 5,\n    \"public_gists\": 0,\n    \"followers\": 3,\n    \"following\": 0,\n    \"created_at\": \"2016-07-11 14:04:54 UTC\",\n    \"updated_at\": \"2019-02-07 11:50:14 UTC\",\n    \"commits\": 3,\n    \"affiliation\": \"Intel\"\n  },\n  {\n    \"login\": \"ajayalfred\",\n    \"id\": 2425179,\n    \"node_id\": \"MDQ6VXNlcjI0MjUxNzk=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/2425179?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ajayalfred\",\n    \"html_url\": \"https://github.com/ajayalfred\",\n    \"followers_url\": \"https://api.github.com/users/ajayalfred/followers\",\n    \"following_url\": \"https://api.github.com/users/ajayalfred/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ajayalfred/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ajayalfred/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ajayalfred/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ajayalfred/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ajayalfred/repos\",\n    \"events_url\": \"https://api.github.com/users/ajayalfred/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ajayalfred/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ajay Alfred\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ajayalfred07!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 3,\n    \"following\": 0,\n    \"created_at\": \"2012-09-26 02:57:08 UTC\",\n    \"updated_at\": \"2019-02-04 22:07:45 UTC\",\n    \"commits\": 3\n  },\n  {\n    \"login\": \"kubeflow-pipeline-bot\",\n    \"id\": 44688125,\n    \"node_id\": \"MDQ6VXNlcjQ0Njg4MTI1\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/44688125?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/kubeflow-pipeline-bot\",\n    \"html_url\": \"https://github.com/kubeflow-pipeline-bot\",\n    \"followers_url\": \"https://api.github.com/users/kubeflow-pipeline-bot/followers\",\n    \"following_url\": \"https://api.github.com/users/kubeflow-pipeline-bot/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/kubeflow-pipeline-bot/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/kubeflow-pipeline-bot/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/kubeflow-pipeline-bot/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/kubeflow-pipeline-bot/orgs\",\n    \"repos_url\": \"https://api.github.com/users/kubeflow-pipeline-bot/repos\",\n    \"events_url\": \"https://api.github.com/users/kubeflow-pipeline-bot/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/kubeflow-pipeline-bot/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"kubeflow-pipeline-bot!google.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-11-02 01:09:03 UTC\",\n    \"updated_at\": \"2018-11-02 01:09:03 UTC\",\n    \"commits\": 3,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"tripti-singhal\",\n    \"id\": 35977510,\n    \"node_id\": \"MDQ6VXNlcjM1OTc3NTEw\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/35977510?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/tripti-singhal\",\n    \"html_url\": \"https://github.com/tripti-singhal\",\n    \"followers_url\": \"https://api.github.com/users/tripti-singhal/followers\",\n    \"following_url\": \"https://api.github.com/users/tripti-singhal/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/tripti-singhal/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/tripti-singhal/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/tripti-singhal/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/tripti-singhal/orgs\",\n    \"repos_url\": \"https://api.github.com/users/tripti-singhal/repos\",\n    \"events_url\": \"https://api.github.com/users/tripti-singhal/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/tripti-singhal/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"35977510+tripti-singhal!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 4,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2018-01-30 22:23:31 UTC\",\n    \"updated_at\": \"2018-10-09 07:09:25 UTC\",\n    \"commits\": 3\n  },\n  {\n    \"login\": \"chaoleili\",\n    \"id\": 7269821,\n    \"node_id\": \"MDQ6VXNlcjcyNjk4MjE=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/7269821?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/chaoleili\",\n    \"html_url\": \"https://github.com/chaoleili\",\n    \"followers_url\": \"https://api.github.com/users/chaoleili/followers\",\n    \"following_url\": \"https://api.github.com/users/chaoleili/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/chaoleili/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/chaoleili/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/chaoleili/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/chaoleili/orgs\",\n    \"repos_url\": \"https://api.github.com/users/chaoleili/repos\",\n    \"events_url\": \"https://api.github.com/users/chaoleili/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/chaoleili/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Chester Li\",\n    \"company\": \"JD.com\",\n    \"blog\": \"\",\n    \"location\": \"Beijing, China\",\n    \"email\": \"chaoleili2!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"Get busy living, or get busy dying\",\n    \"public_repos\": 21,\n    \"public_gists\": 0,\n    \"followers\": 3,\n    \"following\": 6,\n    \"created_at\": \"2014-04-12 04:24:37 UTC\",\n    \"updated_at\": \"2019-01-18 11:48:58 UTC\",\n    \"commits\": 2,\n    \"affiliation\": \"Jd.Com\"\n  },\n  {\n    \"login\": \"denverdino\",\n    \"id\": 409721,\n    \"node_id\": \"MDQ6VXNlcjQwOTcyMQ==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/409721?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/denverdino\",\n    \"html_url\": \"https://github.com/denverdino\",\n    \"followers_url\": \"https://api.github.com/users/denverdino/followers\",\n    \"following_url\": \"https://api.github.com/users/denverdino/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/denverdino/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/denverdino/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/denverdino/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/denverdino/orgs\",\n    \"repos_url\": \"https://api.github.com/users/denverdino/repos\",\n    \"events_url\": \"https://api.github.com/users/denverdino/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/denverdino/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Li Yi\",\n    \"company\": \"Alibaba Cloud\",\n    \"blog\": \"\",\n    \"location\": \"Beijing, China\",\n    \"email\": \"denverdino!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 85,\n    \"public_gists\": 0,\n    \"followers\": 203,\n    \"following\": 17,\n    \"created_at\": \"2010-09-21 11:58:19 UTC\",\n    \"updated_at\": \"2019-01-04 14:33:27 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"GarnettWang\",\n    \"id\": 23478460,\n    \"node_id\": \"MDQ6VXNlcjIzNDc4NDYw\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/23478460?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/GarnettWang\",\n    \"html_url\": \"https://github.com/GarnettWang\",\n    \"followers_url\": \"https://api.github.com/users/GarnettWang/followers\",\n    \"following_url\": \"https://api.github.com/users/GarnettWang/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/GarnettWang/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/GarnettWang/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/GarnettWang/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/GarnettWang/orgs\",\n    \"repos_url\": \"https://api.github.com/users/GarnettWang/repos\",\n    \"events_url\": \"https://api.github.com/users/GarnettWang/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/GarnettWang/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"xidianwangtao!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 11,\n    \"public_gists\": 0,\n    \"followers\": 5,\n    \"following\": 0,\n    \"created_at\": \"2016-11-15 13:24:56 UTC\",\n    \"updated_at\": \"2019-02-18 11:29:45 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"ankushagarwal\",\n    \"id\": 796949,\n    \"node_id\": \"MDQ6VXNlcjc5Njk0OQ==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/796949?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ankushagarwal\",\n    \"html_url\": \"https://github.com/ankushagarwal\",\n    \"followers_url\": \"https://api.github.com/users/ankushagarwal/followers\",\n    \"following_url\": \"https://api.github.com/users/ankushagarwal/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ankushagarwal/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ankushagarwal/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ankushagarwal/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ankushagarwal/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ankushagarwal/repos\",\n    \"events_url\": \"https://api.github.com/users/ankushagarwal/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ankushagarwal/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ankush Agarwal\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"San Francisco\",\n    \"email\": \"ankushagarwal11!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 69,\n    \"public_gists\": 10,\n    \"followers\": 87,\n    \"following\": 46,\n    \"created_at\": \"2011-05-18 22:50:10 UTC\",\n    \"updated_at\": \"2019-02-18 15:27:30 UTC\",\n    \"commits\": 2,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"netankit\",\n    \"id\": 953463,\n    \"node_id\": \"MDQ6VXNlcjk1MzQ2Mw==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/953463?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/netankit\",\n    \"html_url\": \"https://github.com/netankit\",\n    \"followers_url\": \"https://api.github.com/users/netankit/followers\",\n    \"following_url\": \"https://api.github.com/users/netankit/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/netankit/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/netankit/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/netankit/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/netankit/orgs\",\n    \"repos_url\": \"https://api.github.com/users/netankit/repos\",\n    \"events_url\": \"https://api.github.com/users/netankit/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/netankit/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ankit Bahuguna\",\n    \"company\": \"Technische Universität München & Teradata Inc.\",\n    \"blog\": \"de.linkedin.com/in/ankitbahuguna\",\n    \"location\": \"Munich, Germany\",\n    \"email\": \"netankit!gmail.com\",\n    \"hireable\": true,\n    \"bio\": \"Deep Learning, Machine Learning and Information Retreival @ Cliqz GmbH (Mozilla & Hubert Burda Media).\\r\\nWork Git: https://github.com/ankit-cliqz\",\n    \"public_repos\": 95,\n    \"public_gists\": 2,\n    \"followers\": 31,\n    \"following\": 33,\n    \"created_at\": \"2011-08-02 07:27:36 UTC\",\n    \"updated_at\": \"2018-12-17 10:08:13 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"jwwandy\",\n    \"id\": 16611538,\n    \"node_id\": \"MDQ6VXNlcjE2NjExNTM4\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/16611538?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jwwandy\",\n    \"html_url\": \"https://github.com/jwwandy\",\n    \"followers_url\": \"https://api.github.com/users/jwwandy/followers\",\n    \"following_url\": \"https://api.github.com/users/jwwandy/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jwwandy/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jwwandy/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jwwandy/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jwwandy/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jwwandy/repos\",\n    \"events_url\": \"https://api.github.com/users/jwwandy/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jwwandy/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Andy Wei\",\n    \"company\": \"!UmboCV @ColdeGarage \",\n    \"blog\": \"\",\n    \"location\": \"Taipei, Taiwan\",\n    \"email\": \"jwwandy!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"Computer Vision; Deep Learning; Python\",\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 3,\n    \"following\": 0,\n    \"created_at\": \"2016-01-08 14:55:34 UTC\",\n    \"updated_at\": \"2019-02-15 15:57:26 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"DeeperMind\",\n    \"id\": 22840378,\n    \"node_id\": \"MDQ6VXNlcjIyODQwMzc4\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/22840378?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/DeeperMind\",\n    \"html_url\": \"https://github.com/DeeperMind\",\n    \"followers_url\": \"https://api.github.com/users/DeeperMind/followers\",\n    \"following_url\": \"https://api.github.com/users/DeeperMind/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/DeeperMind/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/DeeperMind/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/DeeperMind/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/DeeperMind/orgs\",\n    \"repos_url\": \"https://api.github.com/users/DeeperMind/repos\",\n    \"events_url\": \"https://api.github.com/users/DeeperMind/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/DeeperMind/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jinan Zhou\",\n    \"company\": \"Cisco\",\n    \"blog\": \"\",\n    \"location\": \"San Jose\",\n    \"email\": \"1155077043!link.cuhk.edu.hk\",\n    \"hireable\": null,\n    \"bio\": \"A computer science student at CUHK with a great affection for life.\",\n    \"public_repos\": 10,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2016-10-14 14:44:48 UTC\",\n    \"updated_at\": \"2019-02-11 23:12:00 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"songole\",\n    \"id\": 6665462,\n    \"node_id\": \"MDQ6VXNlcjY2NjU0NjI=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/6665462?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/songole\",\n    \"html_url\": \"https://github.com/songole\",\n    \"followers_url\": \"https://api.github.com/users/songole/followers\",\n    \"following_url\": \"https://api.github.com/users/songole/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/songole/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/songole/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/songole/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/songole/orgs\",\n    \"repos_url\": \"https://api.github.com/users/songole/repos\",\n    \"events_url\": \"https://api.github.com/users/songole/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/songole/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Subrahmanyam Ongole\",\n    \"company\": \"One Convergence\",\n    \"blog\": \"\",\n    \"location\": \"San Jose, CA\",\n    \"email\": \"songole!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 2,\n    \"created_at\": \"2014-02-12 20:21:16 UTC\",\n    \"updated_at\": \"2019-02-01 15:31:24 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"amygdala\",\n    \"id\": 115093,\n    \"node_id\": \"MDQ6VXNlcjExNTA5Mw==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/115093?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/amygdala\",\n    \"html_url\": \"https://github.com/amygdala\",\n    \"followers_url\": \"https://api.github.com/users/amygdala/followers\",\n    \"following_url\": \"https://api.github.com/users/amygdala/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/amygdala/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/amygdala/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/amygdala/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/amygdala/orgs\",\n    \"repos_url\": \"https://api.github.com/users/amygdala/repos\",\n    \"events_url\": \"https://api.github.com/users/amygdala/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/amygdala/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Amy\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"amy!infosleuth.net\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 47,\n    \"public_gists\": 15,\n    \"followers\": 145,\n    \"following\": 0,\n    \"created_at\": \"2009-08-13 20:50:34 UTC\",\n    \"updated_at\": \"2019-02-01 22:30:28 UTC\",\n    \"commits\": 2,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"hyperbolic2346\",\n    \"id\": 3506308,\n    \"node_id\": \"MDQ6VXNlcjM1MDYzMDg=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/3506308?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/hyperbolic2346\",\n    \"html_url\": \"https://github.com/hyperbolic2346\",\n    \"followers_url\": \"https://api.github.com/users/hyperbolic2346/followers\",\n    \"following_url\": \"https://api.github.com/users/hyperbolic2346/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/hyperbolic2346/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/hyperbolic2346/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/hyperbolic2346/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/hyperbolic2346/orgs\",\n    \"repos_url\": \"https://api.github.com/users/hyperbolic2346/repos\",\n    \"events_url\": \"https://api.github.com/users/hyperbolic2346/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/hyperbolic2346/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Mike Wilson\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Asheville, NC\",\n    \"email\": \"hyperbolic2346!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 49,\n    \"public_gists\": 1,\n    \"followers\": 8,\n    \"following\": 0,\n    \"created_at\": \"2013-02-07 23:23:39 UTC\",\n    \"updated_at\": \"2019-02-19 00:58:21 UTC\",\n    \"commits\": 2,\n    \"affiliation\": \"Independent\"\n  },\n  {\n    \"login\": \"azmikamis\",\n    \"id\": 3969324,\n    \"node_id\": \"MDQ6VXNlcjM5NjkzMjQ=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/3969324?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/azmikamis\",\n    \"html_url\": \"https://github.com/azmikamis\",\n    \"followers_url\": \"https://api.github.com/users/azmikamis/followers\",\n    \"following_url\": \"https://api.github.com/users/azmikamis/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/azmikamis/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/azmikamis/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/azmikamis/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/azmikamis/orgs\",\n    \"repos_url\": \"https://api.github.com/users/azmikamis/repos\",\n    \"events_url\": \"https://api.github.com/users/azmikamis/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/azmikamis/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Azmi Kamis\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Singapore\",\n    \"email\": \"azmikamis!outlook.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 171,\n    \"public_gists\": 8,\n    \"followers\": 3,\n    \"following\": 17,\n    \"created_at\": \"2013-03-25 23:10:57 UTC\",\n    \"updated_at\": \"2019-01-24 04:13:58 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"julienstroheker\",\n    \"id\": 8661347,\n    \"node_id\": \"MDQ6VXNlcjg2NjEzNDc=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/8661347?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/julienstroheker\",\n    \"html_url\": \"https://github.com/julienstroheker\",\n    \"followers_url\": \"https://api.github.com/users/julienstroheker/followers\",\n    \"following_url\": \"https://api.github.com/users/julienstroheker/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/julienstroheker/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/julienstroheker/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/julienstroheker/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/julienstroheker/orgs\",\n    \"repos_url\": \"https://api.github.com/users/julienstroheker/repos\",\n    \"events_url\": \"https://api.github.com/users/julienstroheker/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/julienstroheker/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Julien Stroheker\",\n    \"company\": \"Microsoft\",\n    \"blog\": \"http://blog.jstroheker.com\",\n    \"location\": null,\n    \"email\": \"julienstroheker!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"[===]\",\n    \"public_repos\": 75,\n    \"public_gists\": 3,\n    \"followers\": 55,\n    \"following\": 41,\n    \"created_at\": \"2014-09-04 22:26:25 UTC\",\n    \"updated_at\": \"2019-02-08 23:30:18 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"rpasricha\",\n    \"id\": 11918837,\n    \"node_id\": \"MDQ6VXNlcjExOTE4ODM3\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/11918837?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/rpasricha\",\n    \"html_url\": \"https://github.com/rpasricha\",\n    \"followers_url\": \"https://api.github.com/users/rpasricha/followers\",\n    \"following_url\": \"https://api.github.com/users/rpasricha/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/rpasricha/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/rpasricha/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/rpasricha/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/rpasricha/orgs\",\n    \"repos_url\": \"https://api.github.com/users/rpasricha/repos\",\n    \"events_url\": \"https://api.github.com/users/rpasricha/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/rpasricha/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Rajiv Pasricha\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"rpasricha!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 9,\n    \"public_gists\": 0,\n    \"followers\": 11,\n    \"following\": 0,\n    \"created_at\": \"2015-04-13 04:52:05 UTC\",\n    \"updated_at\": \"2019-02-06 19:05:18 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"lkpdn\",\n    \"id\": 17020294,\n    \"node_id\": \"MDQ6VXNlcjE3MDIwMjk0\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/17020294?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/lkpdn\",\n    \"html_url\": \"https://github.com/lkpdn\",\n    \"followers_url\": \"https://api.github.com/users/lkpdn/followers\",\n    \"following_url\": \"https://api.github.com/users/lkpdn/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/lkpdn/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/lkpdn/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/lkpdn/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/lkpdn/orgs\",\n    \"repos_url\": \"https://api.github.com/users/lkpdn/repos\",\n    \"events_url\": \"https://api.github.com/users/lkpdn/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/lkpdn/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Koichiro Den\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Tokyo, Japan\",\n    \"email\": \"den.not.denmark!gmail.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 47,\n    \"public_gists\": 0,\n    \"followers\": 4,\n    \"following\": 4,\n    \"created_at\": \"2016-02-02 06:34:22 UTC\",\n    \"updated_at\": \"2019-01-18 23:30:00 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"kkohtaka\",\n    \"id\": 234269,\n    \"node_id\": \"MDQ6VXNlcjIzNDI2OQ==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/234269?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/kkohtaka\",\n    \"html_url\": \"https://github.com/kkohtaka\",\n    \"followers_url\": \"https://api.github.com/users/kkohtaka/followers\",\n    \"following_url\": \"https://api.github.com/users/kkohtaka/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/kkohtaka/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/kkohtaka/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/kkohtaka/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/kkohtaka/orgs\",\n    \"repos_url\": \"https://api.github.com/users/kkohtaka/repos\",\n    \"events_url\": \"https://api.github.com/users/kkohtaka/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/kkohtaka/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Kazumasa Kohtaka\",\n    \"company\": \"Z Lab Corporation\",\n    \"blog\": \"\",\n    \"location\": \"Minato-ku, Tokyo, Japan\",\n    \"email\": \"kkohtaka!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 71,\n    \"public_gists\": 10,\n    \"followers\": 7,\n    \"following\": 2,\n    \"created_at\": \"2010-03-31 16:39:26 UTC\",\n    \"updated_at\": \"2019-01-28 15:09:11 UTC\",\n    \"commits\": 2,\n    \"affiliation\": \"Z Lab\"\n  },\n  {\n    \"login\": \"hnakagawa\",\n    \"id\": 1500738,\n    \"node_id\": \"MDQ6VXNlcjE1MDA3Mzg=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/1500738?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/hnakagawa\",\n    \"html_url\": \"https://github.com/hnakagawa\",\n    \"followers_url\": \"https://api.github.com/users/hnakagawa/followers\",\n    \"following_url\": \"https://api.github.com/users/hnakagawa/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/hnakagawa/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/hnakagawa/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/hnakagawa/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/hnakagawa/orgs\",\n    \"repos_url\": \"https://api.github.com/users/hnakagawa/repos\",\n    \"events_url\": \"https://api.github.com/users/hnakagawa/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/hnakagawa/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Hirofumi Nakagawa\",\n    \"company\": \"Mercari Inc.\",\n    \"blog\": \"\",\n    \"location\": \"Tokyo, Japan\",\n    \"email\": \"nklabs!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 18,\n    \"public_gists\": 16,\n    \"followers\": 45,\n    \"following\": 24,\n    \"created_at\": \"2012-03-04 22:52:49 UTC\",\n    \"updated_at\": \"2019-01-25 18:16:43 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"shibuiwilliam\",\n    \"id\": 23517545,\n    \"node_id\": \"MDQ6VXNlcjIzNTE3NTQ1\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/23517545?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/shibuiwilliam\",\n    \"html_url\": \"https://github.com/shibuiwilliam\",\n    \"followers_url\": \"https://api.github.com/users/shibuiwilliam/followers\",\n    \"following_url\": \"https://api.github.com/users/shibuiwilliam/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/shibuiwilliam/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/shibuiwilliam/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/shibuiwilliam/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/shibuiwilliam/orgs\",\n    \"repos_url\": \"https://api.github.com/users/shibuiwilliam/repos\",\n    \"events_url\": \"https://api.github.com/users/shibuiwilliam/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/shibuiwilliam/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"shibuiwilliam\",\n    \"company\": null,\n    \"blog\": \"http://qiita.com/cvusk\",\n    \"location\": null,\n    \"email\": \"shibuiyusuke!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"Technical engineer for cloud computing, container and deep learning. MENSA.\",\n    \"public_repos\": 40,\n    \"public_gists\": 2,\n    \"followers\": 28,\n    \"following\": 17,\n    \"created_at\": \"2016-11-17 06:43:09 UTC\",\n    \"updated_at\": \"2019-02-14 07:07:06 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"mitake\",\n    \"id\": 1173955,\n    \"node_id\": \"MDQ6VXNlcjExNzM5NTU=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/1173955?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mitake\",\n    \"html_url\": \"https://github.com/mitake\",\n    \"followers_url\": \"https://api.github.com/users/mitake/followers\",\n    \"following_url\": \"https://api.github.com/users/mitake/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mitake/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mitake/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mitake/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mitake/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mitake/repos\",\n    \"events_url\": \"https://api.github.com/users/mitake/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mitake/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Hitoshi Mitake\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"h.mitake!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 55,\n    \"public_gists\": 14,\n    \"followers\": 80,\n    \"following\": 0,\n    \"created_at\": \"2011-11-05 06:55:16 UTC\",\n    \"updated_at\": \"2018-12-30 14:39:40 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"DeeperMind\",\n    \"id\": 22840378,\n    \"node_id\": \"MDQ6VXNlcjIyODQwMzc4\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/22840378?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/DeeperMind\",\n    \"html_url\": \"https://github.com/DeeperMind\",\n    \"followers_url\": \"https://api.github.com/users/DeeperMind/followers\",\n    \"following_url\": \"https://api.github.com/users/DeeperMind/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/DeeperMind/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/DeeperMind/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/DeeperMind/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/DeeperMind/orgs\",\n    \"repos_url\": \"https://api.github.com/users/DeeperMind/repos\",\n    \"events_url\": \"https://api.github.com/users/DeeperMind/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/DeeperMind/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jinan Zhou\",\n    \"company\": \"Cisco\",\n    \"blog\": \"\",\n    \"location\": \"San Jose\",\n    \"email\": \"deeper-mind!outlook.com\",\n    \"hireable\": null,\n    \"bio\": \"A computer science student at CUHK with a great affection for life.\",\n    \"public_repos\": 10,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2016-10-14 14:44:48 UTC\",\n    \"updated_at\": \"2019-02-11 23:12:00 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"alexandraj777\",\n    \"id\": 913838,\n    \"node_id\": \"MDQ6VXNlcjkxMzgzOA==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/913838?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/alexandraj777\",\n    \"html_url\": \"https://github.com/alexandraj777\",\n    \"followers_url\": \"https://api.github.com/users/alexandraj777/followers\",\n    \"following_url\": \"https://api.github.com/users/alexandraj777/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/alexandraj777/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/alexandraj777/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/alexandraj777/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/alexandraj777/orgs\",\n    \"repos_url\": \"https://api.github.com/users/alexandraj777/repos\",\n    \"events_url\": \"https://api.github.com/users/alexandraj777/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/alexandraj777/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Alexandra Johnson\",\n    \"company\": \"!SigOpt \",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"alexandraj777!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Tech lead for the Platform Team @sigopt \",\n    \"public_repos\": 8,\n    \"public_gists\": 3,\n    \"followers\": 52,\n    \"following\": 2,\n    \"created_at\": \"2011-07-13 22:57:27 UTC\",\n    \"updated_at\": \"2019-02-12 21:46:46 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"ellis-bigelow\",\n    \"id\": 2585992,\n    \"node_id\": \"MDQ6VXNlcjI1ODU5OTI=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/2585992?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ellis-bigelow\",\n    \"html_url\": \"https://github.com/ellis-bigelow\",\n    \"followers_url\": \"https://api.github.com/users/ellis-bigelow/followers\",\n    \"following_url\": \"https://api.github.com/users/ellis-bigelow/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ellis-bigelow/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ellis-bigelow/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ellis-bigelow/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ellis-bigelow/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ellis-bigelow/repos\",\n    \"events_url\": \"https://api.github.com/users/ellis-bigelow/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ellis-bigelow/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ellis Bigelow\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ellisbigelow!google.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 8,\n    \"public_gists\": 0,\n    \"followers\": 7,\n    \"following\": 2,\n    \"created_at\": \"2012-10-18 03:20:05 UTC\",\n    \"updated_at\": \"2019-02-03 23:30:01 UTC\",\n    \"commits\": 2,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"mpvartak\",\n    \"id\": 5740227,\n    \"node_id\": \"MDQ6VXNlcjU3NDAyMjc=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/5740227?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mpvartak\",\n    \"html_url\": \"https://github.com/mpvartak\",\n    \"followers_url\": \"https://api.github.com/users/mpvartak/followers\",\n    \"following_url\": \"https://api.github.com/users/mpvartak/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mpvartak/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mpvartak/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mpvartak/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mpvartak/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mpvartak/repos\",\n    \"events_url\": \"https://api.github.com/users/mpvartak/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mpvartak/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"mpvartak!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 4,\n    \"public_gists\": 0,\n    \"followers\": 7,\n    \"following\": 0,\n    \"created_at\": \"2013-10-21 18:31:29 UTC\",\n    \"updated_at\": \"2019-01-05 02:07:45 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"zabbasi\",\n    \"id\": 9967553,\n    \"node_id\": \"MDQ6VXNlcjk5Njc1NTM=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/9967553?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/zabbasi\",\n    \"html_url\": \"https://github.com/zabbasi\",\n    \"followers_url\": \"https://api.github.com/users/zabbasi/followers\",\n    \"following_url\": \"https://api.github.com/users/zabbasi/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/zabbasi/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/zabbasi/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/zabbasi/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/zabbasi/orgs\",\n    \"repos_url\": \"https://api.github.com/users/zabbasi/repos\",\n    \"events_url\": \"https://api.github.com/users/zabbasi/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/zabbasi/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"z.abbasi!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 2,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2014-11-26 20:14:17 UTC\",\n    \"updated_at\": \"2019-02-13 19:50:39 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"jetmuffin\",\n    \"id\": 4486005,\n    \"node_id\": \"MDQ6VXNlcjQ0ODYwMDU=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/4486005?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jetmuffin\",\n    \"html_url\": \"https://github.com/jetmuffin\",\n    \"followers_url\": \"https://api.github.com/users/jetmuffin/followers\",\n    \"following_url\": \"https://api.github.com/users/jetmuffin/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jetmuffin/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jetmuffin/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jetmuffin/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jetmuffin/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jetmuffin/repos\",\n    \"events_url\": \"https://api.github.com/users/jetmuffin/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jetmuffin/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jeff Chen\",\n    \"company\": \"Nanjing University\",\n    \"blog\": \"http://jetmuffin.com\",\n    \"location\": \"Nanjing\",\n    \"email\": \"mofeng.cj!alibaba-inc.com\",\n    \"hireable\": null,\n    \"bio\": \"Master student of Nanjing University.\",\n    \"public_repos\": 72,\n    \"public_gists\": 0,\n    \"followers\": 40,\n    \"following\": 46,\n    \"created_at\": \"2013-05-21 05:48:15 UTC\",\n    \"updated_at\": \"2019-02-20 15:32:02 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"zacharyzhao\",\n    \"id\": 13870117,\n    \"node_id\": \"MDQ6VXNlcjEzODcwMTE3\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/13870117?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/zacharyzhao\",\n    \"html_url\": \"https://github.com/zacharyzhao\",\n    \"followers_url\": \"https://api.github.com/users/zacharyzhao/followers\",\n    \"following_url\": \"https://api.github.com/users/zacharyzhao/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/zacharyzhao/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/zacharyzhao/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/zacharyzhao/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/zacharyzhao/orgs\",\n    \"repos_url\": \"https://api.github.com/users/zacharyzhao/repos\",\n    \"events_url\": \"https://api.github.com/users/zacharyzhao/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/zacharyzhao/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Zachary Zhao\",\n    \"company\": null,\n    \"blog\": \"https://zach.tips\",\n    \"location\": \"Beijing, China\",\n    \"email\": \"zacharyzhao!yahoo.com\",\n    \"hireable\": null,\n    \"bio\": \"AI Infrastructure @ JD.COM\",\n    \"public_repos\": 15,\n    \"public_gists\": 1,\n    \"followers\": 35,\n    \"following\": 58,\n    \"created_at\": \"2015-08-19 13:19:09 UTC\",\n    \"updated_at\": \"2019-02-14 07:50:42 UTC\",\n    \"commits\": 2,\n    \"affiliation\": \"Jd.Com\"\n  },\n  {\n    \"login\": \"tmckayus\",\n    \"id\": 1172537,\n    \"node_id\": \"MDQ6VXNlcjExNzI1Mzc=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1172537?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/tmckayus\",\n    \"html_url\": \"https://github.com/tmckayus\",\n    \"followers_url\": \"https://api.github.com/users/tmckayus/followers\",\n    \"following_url\": \"https://api.github.com/users/tmckayus/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/tmckayus/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/tmckayus/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/tmckayus/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/tmckayus/orgs\",\n    \"repos_url\": \"https://api.github.com/users/tmckayus/repos\",\n    \"events_url\": \"https://api.github.com/users/tmckayus/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/tmckayus/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Trevor McKay\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"tmckay!redhat.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 41,\n    \"public_gists\": 0,\n    \"followers\": 4,\n    \"following\": 0,\n    \"created_at\": \"2011-11-04 14:25:17 UTC\",\n    \"updated_at\": \"2018-11-29 21:52:33 UTC\",\n    \"commits\": 2,\n    \"affiliation\": \"Red Hat\"\n  },\n  {\n    \"login\": \"mindprince\",\n    \"id\": 695290,\n    \"node_id\": \"MDQ6VXNlcjY5NTI5MA==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/695290?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mindprince\",\n    \"html_url\": \"https://github.com/mindprince\",\n    \"followers_url\": \"https://api.github.com/users/mindprince/followers\",\n    \"following_url\": \"https://api.github.com/users/mindprince/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mindprince/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mindprince/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mindprince/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mindprince/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mindprince/repos\",\n    \"events_url\": \"https://api.github.com/users/mindprince/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mindprince/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Rohit Agarwal\",\n    \"company\": \"!Google \",\n    \"blog\": \"https://notes.mindprince.in\",\n    \"location\": \"San Francisco Bay Area\",\n    \"email\": \"mindprince!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 44,\n    \"public_gists\": 5,\n    \"followers\": 62,\n    \"following\": 0,\n    \"created_at\": \"2011-03-28 15:10:21 UTC\",\n    \"updated_at\": \"2019-01-14 08:31:18 UTC\",\n    \"commits\": 2,\n    \"affiliation\": \"Qubole < 2016-02-01, CloudFlare < 2017-04-01, Google\"\n  },\n  {\n    \"login\": \"AK-ayush\",\n    \"id\": 11587734,\n    \"node_id\": \"MDQ6VXNlcjExNTg3NzM0\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/11587734?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/AK-ayush\",\n    \"html_url\": \"https://github.com/AK-ayush\",\n    \"followers_url\": \"https://api.github.com/users/AK-ayush/followers\",\n    \"following_url\": \"https://api.github.com/users/AK-ayush/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/AK-ayush/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/AK-ayush/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/AK-ayush/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/AK-ayush/orgs\",\n    \"repos_url\": \"https://api.github.com/users/AK-ayush/repos\",\n    \"events_url\": \"https://api.github.com/users/AK-ayush/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/AK-ayush/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ayush Kumar\",\n    \"company\": \"!WalmartLabs\",\n    \"blog\": \"https://www.linkedin.com/in/kayush206/\",\n    \"location\": \"Bangalore, India\",\n    \"email\": \"ayushkumar!protonmail.com\",\n    \"hireable\": true,\n    \"bio\": \"Graduated in CS major from @IITGuwahati in 2017. Looking for opportunities in the field of machine learning.\",\n    \"public_repos\": 20,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 10,\n    \"created_at\": \"2015-03-21 16:54:57 UTC\",\n    \"updated_at\": \"2018-12-31 00:58:19 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"rc-zhang\",\n    \"id\": 37483462,\n    \"node_id\": \"MDQ6VXNlcjM3NDgzNDYy\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/37483462?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/rc-zhang\",\n    \"html_url\": \"https://github.com/rc-zhang\",\n    \"followers_url\": \"https://api.github.com/users/rc-zhang/followers\",\n    \"following_url\": \"https://api.github.com/users/rc-zhang/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/rc-zhang/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/rc-zhang/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/rc-zhang/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/rc-zhang/orgs\",\n    \"repos_url\": \"https://api.github.com/users/rc-zhang/repos\",\n    \"events_url\": \"https://api.github.com/users/rc-zhang/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/rc-zhang/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"rczcmu!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 1,\n    \"created_at\": \"2018-03-17 18:15:10 UTC\",\n    \"updated_at\": \"2018-05-01 21:33:34 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"yuvipanda\",\n    \"id\": 30430,\n    \"node_id\": \"MDQ6VXNlcjMwNDMw\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/30430?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/yuvipanda\",\n    \"html_url\": \"https://github.com/yuvipanda\",\n    \"followers_url\": \"https://api.github.com/users/yuvipanda/followers\",\n    \"following_url\": \"https://api.github.com/users/yuvipanda/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/yuvipanda/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/yuvipanda/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/yuvipanda/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/yuvipanda/orgs\",\n    \"repos_url\": \"https://api.github.com/users/yuvipanda/repos\",\n    \"events_url\": \"https://api.github.com/users/yuvipanda/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/yuvipanda/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Yuvi Panda\",\n    \"company\": null,\n    \"blog\": \"http://yuvi.in/\",\n    \"location\": \"Berkeley\",\n    \"email\": \"yuvipanda!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 337,\n    \"public_gists\": 126,\n    \"followers\": 546,\n    \"following\": 75,\n    \"created_at\": \"2008-10-22 17:57:53 UTC\",\n    \"updated_at\": \"2019-02-02 01:34:52 UTC\",\n    \"commits\": 2,\n    \"affiliation\": \"Wikimedia Foundation\"\n  },\n  {\n    \"login\": \"leoncamel\",\n    \"id\": 218590,\n    \"node_id\": \"MDQ6VXNlcjIxODU5MA==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/218590?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/leoncamel\",\n    \"html_url\": \"https://github.com/leoncamel\",\n    \"followers_url\": \"https://api.github.com/users/leoncamel/followers\",\n    \"following_url\": \"https://api.github.com/users/leoncamel/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/leoncamel/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/leoncamel/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/leoncamel/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/leoncamel/orgs\",\n    \"repos_url\": \"https://api.github.com/users/leoncamel/repos\",\n    \"events_url\": \"https://api.github.com/users/leoncamel/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/leoncamel/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Xiaolin Zhang\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Beijing\",\n    \"email\": \"leoncamel!gmail.com\",\n    \"hireable\": true,\n    \"bio\": \"A father, and a Software Engineer.\",\n    \"public_repos\": 58,\n    \"public_gists\": 15,\n    \"followers\": 16,\n    \"following\": 66,\n    \"created_at\": \"2010-03-08 20:35:04 UTC\",\n    \"updated_at\": \"2019-02-02 10:39:17 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"deadeyegoodwin\",\n    \"id\": 5104484,\n    \"node_id\": \"MDQ6VXNlcjUxMDQ0ODQ=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/5104484?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/deadeyegoodwin\",\n    \"html_url\": \"https://github.com/deadeyegoodwin\",\n    \"followers_url\": \"https://api.github.com/users/deadeyegoodwin/followers\",\n    \"following_url\": \"https://api.github.com/users/deadeyegoodwin/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/deadeyegoodwin/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/deadeyegoodwin/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/deadeyegoodwin/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/deadeyegoodwin/orgs\",\n    \"repos_url\": \"https://api.github.com/users/deadeyegoodwin/repos\",\n    \"events_url\": \"https://api.github.com/users/deadeyegoodwin/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/deadeyegoodwin/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": \"NVIDIA\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"davidg!nvidia.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 3,\n    \"public_gists\": 0,\n    \"followers\": 4,\n    \"following\": 0,\n    \"created_at\": \"2013-07-27 22:09:45 UTC\",\n    \"updated_at\": \"2018-12-26 06:06:21 UTC\",\n    \"commits\": 2,\n    \"affiliation\": \"NVidia\"\n  },\n  {\n    \"login\": \"kflynn\",\n    \"id\": 1126180,\n    \"node_id\": \"MDQ6VXNlcjExMjYxODA=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1126180?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/kflynn\",\n    \"html_url\": \"https://github.com/kflynn\",\n    \"followers_url\": \"https://api.github.com/users/kflynn/followers\",\n    \"following_url\": \"https://api.github.com/users/kflynn/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/kflynn/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/kflynn/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/kflynn/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/kflynn/orgs\",\n    \"repos_url\": \"https://api.github.com/users/kflynn/repos\",\n    \"events_url\": \"https://api.github.com/users/kflynn/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/kflynn/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Flynn\",\n    \"company\": \"!datawire // Kodachi 6·14, LLC\",\n    \"blog\": \"\",\n    \"location\": \"New England or travelling\",\n    \"email\": \"kflynn!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 16,\n    \"public_gists\": 2,\n    \"followers\": 18,\n    \"following\": 1,\n    \"created_at\": \"2011-10-13 16:39:06 UTC\",\n    \"updated_at\": \"2018-12-18 14:46:43 UTC\",\n    \"commits\": 2,\n    \"affiliation\": \"Datawire\"\n  },\n  {\n    \"login\": \"lqj679ssn\",\n    \"id\": 15080633,\n    \"node_id\": \"MDQ6VXNlcjE1MDgwNjMz\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/15080633?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/lqj679ssn\",\n    \"html_url\": \"https://github.com/lqj679ssn\",\n    \"followers_url\": \"https://api.github.com/users/lqj679ssn/followers\",\n    \"following_url\": \"https://api.github.com/users/lqj679ssn/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/lqj679ssn/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/lqj679ssn/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/lqj679ssn/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/lqj679ssn/orgs\",\n    \"repos_url\": \"https://api.github.com/users/lqj679ssn/repos\",\n    \"events_url\": \"https://api.github.com/users/lqj679ssn/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/lqj679ssn/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Adel\",\n    \"company\": \"!CiscoZeus \",\n    \"blog\": \"\",\n    \"location\": \"San Jose\",\n    \"email\": \"i!6-79.cn\",\n    \"hireable\": null,\n    \"bio\": \"ZJUer & Future Singer\",\n    \"public_repos\": 50,\n    \"public_gists\": 0,\n    \"followers\": 11,\n    \"following\": 5,\n    \"created_at\": \"2015-10-11 23:58:23 UTC\",\n    \"updated_at\": \"2018-10-18 04:05:23 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"ankushagarwal\",\n    \"id\": 796949,\n    \"node_id\": \"MDQ6VXNlcjc5Njk0OQ==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/796949?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ankushagarwal\",\n    \"html_url\": \"https://github.com/ankushagarwal\",\n    \"followers_url\": \"https://api.github.com/users/ankushagarwal/followers\",\n    \"following_url\": \"https://api.github.com/users/ankushagarwal/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ankushagarwal/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ankushagarwal/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ankushagarwal/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ankushagarwal/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ankushagarwal/repos\",\n    \"events_url\": \"https://api.github.com/users/ankushagarwal/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ankushagarwal/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ankush Agarwal\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"San Francisco\",\n    \"email\": \"ankushagarwal!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 69,\n    \"public_gists\": 10,\n    \"followers\": 87,\n    \"following\": 46,\n    \"created_at\": \"2011-05-18 22:50:10 UTC\",\n    \"updated_at\": \"2019-02-18 15:27:30 UTC\",\n    \"commits\": 2,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"zmhassan\",\n    \"id\": 1269759,\n    \"node_id\": \"MDQ6VXNlcjEyNjk3NTk=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/1269759?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/zmhassan\",\n    \"html_url\": \"https://github.com/zmhassan\",\n    \"followers_url\": \"https://api.github.com/users/zmhassan/followers\",\n    \"following_url\": \"https://api.github.com/users/zmhassan/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/zmhassan/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/zmhassan/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/zmhassan/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/zmhassan/orgs\",\n    \"repos_url\": \"https://api.github.com/users/zmhassan/repos\",\n    \"events_url\": \"https://api.github.com/users/zmhassan/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/zmhassan/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Zak Hassan\",\n    \"company\": \"Red Hat Inc.\",\n    \"blog\": \"https://zakhassan.ca/\",\n    \"location\": \"Toronto, Canada\",\n    \"email\": \"zak.hassan1010!gmail.com\",\n    \"hireable\": true,\n    \"bio\": \"Senior Software Engineer, Center Of Excellence for AI / ML - CTO Office  @ Red Hat\",\n    \"public_repos\": 102,\n    \"public_gists\": 18,\n    \"followers\": 22,\n    \"following\": 8,\n    \"created_at\": \"2011-12-17 15:31:35 UTC\",\n    \"updated_at\": \"2019-02-19 17:52:45 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"Youki\",\n    \"id\": 1643282,\n    \"node_id\": \"MDQ6VXNlcjE2NDMyODI=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/1643282?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Youki\",\n    \"html_url\": \"https://github.com/Youki\",\n    \"followers_url\": \"https://api.github.com/users/Youki/followers\",\n    \"following_url\": \"https://api.github.com/users/Youki/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Youki/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Youki/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Youki/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Youki/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Youki/repos\",\n    \"events_url\": \"https://api.github.com/users/Youki/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Youki/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Yaboo Oyabu\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"yaboo!google.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 4,\n    \"public_gists\": 2,\n    \"followers\": 9,\n    \"following\": 4,\n    \"created_at\": \"2012-04-14 15:33:13 UTC\",\n    \"updated_at\": \"2019-02-12 02:12:11 UTC\",\n    \"commits\": 2,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"cbreuel\",\n    \"id\": 816312,\n    \"node_id\": \"MDQ6VXNlcjgxNjMxMg==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/816312?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/cbreuel\",\n    \"html_url\": \"https://github.com/cbreuel\",\n    \"followers_url\": \"https://api.github.com/users/cbreuel/followers\",\n    \"following_url\": \"https://api.github.com/users/cbreuel/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/cbreuel/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/cbreuel/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/cbreuel/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/cbreuel/orgs\",\n    \"repos_url\": \"https://api.github.com/users/cbreuel/repos\",\n    \"events_url\": \"https://api.github.com/users/cbreuel/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/cbreuel/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Cristiano Breuel\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"cristiano.breuel!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 9,\n    \"public_gists\": 4,\n    \"followers\": 6,\n    \"following\": 1,\n    \"created_at\": \"2011-05-28 21:30:53 UTC\",\n    \"updated_at\": \"2019-02-19 20:06:13 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"vicaire\",\n    \"id\": 25757005,\n    \"node_id\": \"MDQ6VXNlcjI1NzU3MDA1\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/25757005?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/vicaire\",\n    \"html_url\": \"https://github.com/vicaire\",\n    \"followers_url\": \"https://api.github.com/users/vicaire/followers\",\n    \"following_url\": \"https://api.github.com/users/vicaire/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/vicaire/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/vicaire/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/vicaire/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/vicaire/orgs\",\n    \"repos_url\": \"https://api.github.com/users/vicaire/repos\",\n    \"events_url\": \"https://api.github.com/users/vicaire/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/vicaire/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Pascal Vicaire\",\n    \"company\": \"!google \",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"vicaire!google.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 18,\n    \"following\": 0,\n    \"created_at\": \"2017-02-14 00:10:32 UTC\",\n    \"updated_at\": \"2019-01-09 09:06:26 UTC\",\n    \"commits\": 2,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"paveldournov\",\n    \"id\": 4884947,\n    \"node_id\": \"MDQ6VXNlcjQ4ODQ5NDc=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/4884947?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/paveldournov\",\n    \"html_url\": \"https://github.com/paveldournov\",\n    \"followers_url\": \"https://api.github.com/users/paveldournov/followers\",\n    \"following_url\": \"https://api.github.com/users/paveldournov/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/paveldournov/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/paveldournov/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/paveldournov/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/paveldournov/orgs\",\n    \"repos_url\": \"https://api.github.com/users/paveldournov/repos\",\n    \"events_url\": \"https://api.github.com/users/paveldournov/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/paveldournov/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Pavel Dournov\",\n    \"company\": \"Google\",\n    \"blog\": \"\",\n    \"location\": \"Seattle, WA\",\n    \"email\": \"paveld!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 6,\n    \"public_gists\": 1,\n    \"followers\": 6,\n    \"following\": 13,\n    \"created_at\": \"2013-06-29 17:44:09 UTC\",\n    \"updated_at\": \"2019-02-17 00:23:12 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"Arhell\",\n    \"id\": 26163841,\n    \"node_id\": \"MDQ6VXNlcjI2MTYzODQx\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/26163841?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Arhell\",\n    \"html_url\": \"https://github.com/Arhell\",\n    \"followers_url\": \"https://api.github.com/users/Arhell/followers\",\n    \"following_url\": \"https://api.github.com/users/Arhell/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Arhell/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Arhell/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Arhell/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Arhell/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Arhell/repos\",\n    \"events_url\": \"https://api.github.com/users/Arhell/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Arhell/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ihor Sychevskyi\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"26163841+arhell!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 18,\n    \"public_gists\": 2,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2017-03-03 11:21:13 UTC\",\n    \"updated_at\": \"2019-02-13 01:50:50 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"lqj679ssn\",\n    \"id\": 15080633,\n    \"node_id\": \"MDQ6VXNlcjE1MDgwNjMz\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/15080633?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/lqj679ssn\",\n    \"html_url\": \"https://github.com/lqj679ssn\",\n    \"followers_url\": \"https://api.github.com/users/lqj679ssn/followers\",\n    \"following_url\": \"https://api.github.com/users/lqj679ssn/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/lqj679ssn/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/lqj679ssn/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/lqj679ssn/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/lqj679ssn/orgs\",\n    \"repos_url\": \"https://api.github.com/users/lqj679ssn/repos\",\n    \"events_url\": \"https://api.github.com/users/lqj679ssn/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/lqj679ssn/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Adel\",\n    \"company\": \"!CiscoZeus \",\n    \"blog\": \"\",\n    \"location\": \"San Jose\",\n    \"email\": \"lqj679ssn!qq.com\",\n    \"hireable\": null,\n    \"bio\": \"ZJUer & Future Singer\",\n    \"public_repos\": 50,\n    \"public_gists\": 0,\n    \"followers\": 11,\n    \"following\": 5,\n    \"created_at\": \"2015-10-11 23:58:23 UTC\",\n    \"updated_at\": \"2018-10-18 04:05:23 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"yylin1\",\n    \"id\": 39441918,\n    \"node_id\": \"MDQ6VXNlcjM5NDQxOTE4\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/39441918?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/yylin1\",\n    \"html_url\": \"https://github.com/yylin1\",\n    \"followers_url\": \"https://api.github.com/users/yylin1/followers\",\n    \"following_url\": \"https://api.github.com/users/yylin1/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/yylin1/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/yylin1/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/yylin1/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/yylin1/orgs\",\n    \"repos_url\": \"https://api.github.com/users/yylin1/repos\",\n    \"events_url\": \"https://api.github.com/users/yylin1/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/yylin1/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"YiYang Lin\",\n    \"company\": \"AI Lab, CS, PU\",\n    \"blog\": \"https://yylin1.github.io\",\n    \"location\": \"Taoyuan, Taiwan\",\n    \"email\": \"frank.yylin!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"M.S student in PU.\\r\\n\",\n    \"public_repos\": 53,\n    \"public_gists\": 5,\n    \"followers\": 16,\n    \"following\": 58,\n    \"created_at\": \"2018-05-19 17:29:17 UTC\",\n    \"updated_at\": \"2019-02-18 00:17:41 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"rummens\",\n    \"id\": 31141785,\n    \"node_id\": \"MDQ6VXNlcjMxMTQxNzg1\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/31141785?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/rummens\",\n    \"html_url\": \"https://github.com/rummens\",\n    \"followers_url\": \"https://api.github.com/users/rummens/followers\",\n    \"following_url\": \"https://api.github.com/users/rummens/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/rummens/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/rummens/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/rummens/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/rummens/orgs\",\n    \"repos_url\": \"https://api.github.com/users/rummens/repos\",\n    \"events_url\": \"https://api.github.com/users/rummens/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/rummens/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"31141785+rummens!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 2,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2017-08-18 19:15:22 UTC\",\n    \"updated_at\": \"2019-02-04 16:59:10 UTC\",\n    \"commits\": 2\n  },\n  {\n    \"login\": \"banbanpeppa\",\n    \"id\": 13099283,\n    \"node_id\": \"MDQ6VXNlcjEzMDk5Mjgz\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/13099283?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/banbanpeppa\",\n    \"html_url\": \"https://github.com/banbanpeppa\",\n    \"followers_url\": \"https://api.github.com/users/banbanpeppa/followers\",\n    \"following_url\": \"https://api.github.com/users/banbanpeppa/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/banbanpeppa/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/banbanpeppa/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/banbanpeppa/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/banbanpeppa/orgs\",\n    \"repos_url\": \"https://api.github.com/users/banbanpeppa/repos\",\n    \"events_url\": \"https://api.github.com/users/banbanpeppa/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/banbanpeppa/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Zhi Ling Chen\",\n    \"company\": \"South China University of Technology\",\n    \"blog\": \"https://banbanpeppa.github.io/\",\n    \"location\": \"Guangdong，China\",\n    \"email\": \"1262098118!qq.com\",\n    \"hireable\": null,\n    \"bio\": \"inner peace\",\n    \"public_repos\": 43,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 4,\n    \"created_at\": \"2015-06-29 08:51:14 UTC\",\n    \"updated_at\": \"2019-02-18 02:51:50 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"xiechengsheng\",\n    \"id\": 15869774,\n    \"node_id\": \"MDQ6VXNlcjE1ODY5Nzc0\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/15869774?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/xiechengsheng\",\n    \"html_url\": \"https://github.com/xiechengsheng\",\n    \"followers_url\": \"https://api.github.com/users/xiechengsheng/followers\",\n    \"following_url\": \"https://api.github.com/users/xiechengsheng/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/xiechengsheng/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/xiechengsheng/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/xiechengsheng/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/xiechengsheng/orgs\",\n    \"repos_url\": \"https://api.github.com/users/xiechengsheng/repos\",\n    \"events_url\": \"https://api.github.com/users/xiechengsheng/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/xiechengsheng/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Xie.CS\",\n    \"company\": \"WHUT/HUST\",\n    \"blog\": \"https://xiechengsheng.github.io/\",\n    \"location\": \"WuHan China\",\n    \"email\": \"xie1995!whut.edu.cn\",\n    \"hireable\": null,\n    \"bio\": \"focus on cloud native\",\n    \"public_repos\": 52,\n    \"public_gists\": 0,\n    \"followers\": 24,\n    \"following\": 72,\n    \"created_at\": \"2015-11-16 11:10:58 UTC\",\n    \"updated_at\": \"2019-02-13 10:54:57 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"binblee\",\n    \"id\": 2278563,\n    \"node_id\": \"MDQ6VXNlcjIyNzg1NjM=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/2278563?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/binblee\",\n    \"html_url\": \"https://github.com/binblee\",\n    \"followers_url\": \"https://api.github.com/users/binblee/followers\",\n    \"following_url\": \"https://api.github.com/users/binblee/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/binblee/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/binblee/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/binblee/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/binblee/orgs\",\n    \"repos_url\": \"https://api.github.com/users/binblee/repos\",\n    \"events_url\": \"https://api.github.com/users/binblee/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/binblee/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Bin Li\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"binblee!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Alibaba Cloud\",\n    \"public_repos\": 69,\n    \"public_gists\": 1,\n    \"followers\": 33,\n    \"following\": 9,\n    \"created_at\": \"2012-09-04 15:12:21 UTC\",\n    \"updated_at\": \"2019-01-14 03:35:54 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"disktnk\",\n    \"id\": 414255,\n    \"node_id\": \"MDQ6VXNlcjQxNDI1NQ==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/414255?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/disktnk\",\n    \"html_url\": \"https://github.com/disktnk\",\n    \"followers_url\": \"https://api.github.com/users/disktnk/followers\",\n    \"following_url\": \"https://api.github.com/users/disktnk/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/disktnk/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/disktnk/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/disktnk/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/disktnk/orgs\",\n    \"repos_url\": \"https://api.github.com/users/disktnk/repos\",\n    \"events_url\": \"https://api.github.com/users/disktnk/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/disktnk/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"disktnk\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Tokyo\",\n    \"email\": \"duaipp!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 37,\n    \"public_gists\": 25,\n    \"followers\": 13,\n    \"following\": 0,\n    \"created_at\": \"2010-09-24 10:50:55 UTC\",\n    \"updated_at\": \"2019-02-12 09:48:51 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"suensummit\",\n    \"id\": 5906989,\n    \"node_id\": \"MDQ6VXNlcjU5MDY5ODk=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/5906989?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/suensummit\",\n    \"html_url\": \"https://github.com/suensummit\",\n    \"followers_url\": \"https://api.github.com/users/suensummit/followers\",\n    \"following_url\": \"https://api.github.com/users/suensummit/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/suensummit/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/suensummit/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/suensummit/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/suensummit/orgs\",\n    \"repos_url\": \"https://api.github.com/users/suensummit/repos\",\n    \"events_url\": \"https://api.github.com/users/suensummit/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/suensummit/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Summit Suen\",\n    \"company\": null,\n    \"blog\": \"https://www.linkedin.com/in/suensummit\",\n    \"location\": \"127.0.0.1\",\n    \"email\": \"suensummit!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Data Scientist, Full Stack Developer, Open Source/Data Enthusiast. Also a Sabermetrics Evangelist. \\r\\nCo-Organizer of @TaiwanRUserGroup \",\n    \"public_repos\": 301,\n    \"public_gists\": 9,\n    \"followers\": 118,\n    \"following\": 876,\n    \"created_at\": \"2013-11-11 07:16:59 UTC\",\n    \"updated_at\": \"2019-02-01 15:30:45 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"stevencasey\",\n    \"id\": 265229,\n    \"node_id\": \"MDQ6VXNlcjI2NTIyOQ==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/265229?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/stevencasey\",\n    \"html_url\": \"https://github.com/stevencasey\",\n    \"followers_url\": \"https://api.github.com/users/stevencasey/followers\",\n    \"following_url\": \"https://api.github.com/users/stevencasey/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/stevencasey/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/stevencasey/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/stevencasey/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/stevencasey/orgs\",\n    \"repos_url\": \"https://api.github.com/users/stevencasey/repos\",\n    \"events_url\": \"https://api.github.com/users/stevencasey/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/stevencasey/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"steven casey\",\n    \"company\": null,\n    \"blog\": \"http://twitter.com/stevencasey\",\n    \"location\": \"Palo Alto, California\",\n    \"email\": \"265229+stevencasey!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 43,\n    \"public_gists\": 7,\n    \"followers\": 6,\n    \"following\": 11,\n    \"created_at\": \"2010-05-05 08:04:47 UTC\",\n    \"updated_at\": \"2019-01-09 16:44:51 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"jpza\",\n    \"id\": 4052728,\n    \"node_id\": \"MDQ6VXNlcjQwNTI3Mjg=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/4052728?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jpza\",\n    \"html_url\": \"https://github.com/jpza\",\n    \"followers_url\": \"https://api.github.com/users/jpza/followers\",\n    \"following_url\": \"https://api.github.com/users/jpza/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jpza/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jpza/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jpza/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jpza/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jpza/repos\",\n    \"events_url\": \"https://api.github.com/users/jpza/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jpza/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Justin\",\n    \"company\": null,\n    \"blog\": \"https://jpza.github.io\",\n    \"location\": \"New York\",\n    \"email\": \"jgpotts.ny!gmail.com\",\n    \"hireable\": true,\n    \"bio\": \"Gopher (golang)/Python coder. Focus on distributed systems and backend engineering. \\r\\n\\r\\nfor {}\",\n    \"public_repos\": 17,\n    \"public_gists\": 4,\n    \"followers\": 10,\n    \"following\": 50,\n    \"created_at\": \"2013-04-03 20:30:02 UTC\",\n    \"updated_at\": \"2019-02-20 14:21:44 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"bharaththiruveedula\",\n    \"id\": 1144919,\n    \"node_id\": \"MDQ6VXNlcjExNDQ5MTk=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1144919?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/bharaththiruveedula\",\n    \"html_url\": \"https://github.com/bharaththiruveedula\",\n    \"followers_url\": \"https://api.github.com/users/bharaththiruveedula/followers\",\n    \"following_url\": \"https://api.github.com/users/bharaththiruveedula/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/bharaththiruveedula/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/bharaththiruveedula/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/bharaththiruveedula/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/bharaththiruveedula/orgs\",\n    \"repos_url\": \"https://api.github.com/users/bharaththiruveedula/repos\",\n    \"events_url\": \"https://api.github.com/users/bharaththiruveedula/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/bharaththiruveedula/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Bharath\",\n    \"company\": null,\n    \"blog\": \"http://tbharath.in\",\n    \"location\": \"Hyderabad, India\",\n    \"email\": \"bharath_ves!hotmail.com\",\n    \"hireable\": true,\n    \"bio\": \"Open Source Enthusiast. Core reviewer for couple of projects in OpenStack\",\n    \"public_repos\": 58,\n    \"public_gists\": 6,\n    \"followers\": 31,\n    \"following\": 154,\n    \"created_at\": \"2011-10-22 12:35:23 UTC\",\n    \"updated_at\": \"2019-02-17 02:16:23 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Tata < 2015-08-06, Imaginea\"\n  },\n  {\n    \"login\": \"jinxingwang\",\n    \"id\": 9031973,\n    \"node_id\": \"MDQ6VXNlcjkwMzE5NzM=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/9031973?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jinxingwang\",\n    \"html_url\": \"https://github.com/jinxingwang\",\n    \"followers_url\": \"https://api.github.com/users/jinxingwang/followers\",\n    \"following_url\": \"https://api.github.com/users/jinxingwang/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jinxingwang/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jinxingwang/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jinxingwang/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jinxingwang/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jinxingwang/repos\",\n    \"events_url\": \"https://api.github.com/users/jinxingwang/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jinxingwang/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"jinxingwang\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"wjx101220!hotmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 13,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 1,\n    \"created_at\": \"2014-10-06 05:49:18 UTC\",\n    \"updated_at\": \"2018-08-31 20:38:31 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"bgpatel\",\n    \"id\": 21226727,\n    \"node_id\": \"MDQ6VXNlcjIxMjI2NzI3\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/21226727?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/bgpatel\",\n    \"html_url\": \"https://github.com/bgpatel\",\n    \"followers_url\": \"https://api.github.com/users/bgpatel/followers\",\n    \"following_url\": \"https://api.github.com/users/bgpatel/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/bgpatel/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/bgpatel/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/bgpatel/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/bgpatel/orgs\",\n    \"repos_url\": \"https://api.github.com/users/bgpatel/repos\",\n    \"events_url\": \"https://api.github.com/users/bgpatel/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/bgpatel/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"bhavesh_a_patel!dell.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 2,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2016-08-24 18:51:50 UTC\",\n    \"updated_at\": \"2019-01-30 21:36:54 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Dell\"\n  },\n  {\n    \"login\": \"ahousley\",\n    \"id\": 1098355,\n    \"node_id\": \"MDQ6VXNlcjEwOTgzNTU=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/1098355?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ahousley\",\n    \"html_url\": \"https://github.com/ahousley\",\n    \"followers_url\": \"https://api.github.com/users/ahousley/followers\",\n    \"following_url\": \"https://api.github.com/users/ahousley/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ahousley/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ahousley/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ahousley/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ahousley/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ahousley/repos\",\n    \"events_url\": \"https://api.github.com/users/ahousley/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ahousley/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Alex Housley\",\n    \"company\": \"Seldon\",\n    \"blog\": \"http://seldon.io\",\n    \"location\": \"London\",\n    \"email\": \"alex!rummblelabs.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 5,\n    \"public_gists\": 0,\n    \"followers\": 72,\n    \"following\": 365,\n    \"created_at\": \"2011-10-03 09:44:17 UTC\",\n    \"updated_at\": \"2019-02-13 17:23:13 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"hannibalhuang\",\n    \"id\": 535354,\n    \"node_id\": \"MDQ6VXNlcjUzNTM1NA==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/535354?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/hannibalhuang\",\n    \"html_url\": \"https://github.com/hannibalhuang\",\n    \"followers_url\": \"https://api.github.com/users/hannibalhuang/followers\",\n    \"following_url\": \"https://api.github.com/users/hannibalhuang/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/hannibalhuang/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/hannibalhuang/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/hannibalhuang/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/hannibalhuang/orgs\",\n    \"repos_url\": \"https://api.github.com/users/hannibalhuang/repos\",\n    \"events_url\": \"https://api.github.com/users/hannibalhuang/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/hannibalhuang/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Zhipeng Huang\",\n    \"company\": \"Huawei\",\n    \"blog\": \"\",\n    \"location\": \"Shenzhen\",\n    \"email\": \"huangzhipeng!huawei.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 36,\n    \"public_gists\": 5,\n    \"followers\": 57,\n    \"following\": 5,\n    \"created_at\": \"2010-12-24 07:03:29 UTC\",\n    \"updated_at\": \"2019-01-20 14:31:13 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Huawei\"\n  },\n  {\n    \"login\": \"kris-nova\",\n    \"id\": 13757818,\n    \"node_id\": \"MDQ6VXNlcjEzNzU3ODE4\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/13757818?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/kris-nova\",\n    \"html_url\": \"https://github.com/kris-nova\",\n    \"followers_url\": \"https://api.github.com/users/kris-nova/followers\",\n    \"following_url\": \"https://api.github.com/users/kris-nova/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/kris-nova/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/kris-nova/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/kris-nova/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/kris-nova/orgs\",\n    \"repos_url\": \"https://api.github.com/users/kris-nova/repos\",\n    \"events_url\": \"https://api.github.com/users/kris-nova/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/kris-nova/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Kris Nova\",\n    \"company\": \"VMware\",\n    \"blog\": \"https://twitter.com/krisnova\",\n    \"location\": \"literally on a mountain\",\n    \"email\": \"kris!nivenly.com\",\n    \"hireable\": true,\n    \"bio\": \"Queer transgender engineer writes shitty software and people like it. \",\n    \"public_repos\": 250,\n    \"public_gists\": 18,\n    \"followers\": 856,\n    \"following\": 24,\n    \"created_at\": \"2015-08-12 01:59:14 UTC\",\n    \"updated_at\": \"2019-02-11 16:21:55 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Heptio < 2018-12-11, VMware\"\n  },\n  {\n    \"login\": \"mhausenblas\",\n    \"id\": 52594,\n    \"node_id\": \"MDQ6VXNlcjUyNTk0\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/52594?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mhausenblas\",\n    \"html_url\": \"https://github.com/mhausenblas\",\n    \"followers_url\": \"https://api.github.com/users/mhausenblas/followers\",\n    \"following_url\": \"https://api.github.com/users/mhausenblas/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mhausenblas/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mhausenblas/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mhausenblas/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mhausenblas/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mhausenblas/repos\",\n    \"events_url\": \"https://api.github.com/users/mhausenblas/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mhausenblas/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Michael Hausenblas\",\n    \"company\": \"!openshift\",\n    \"blog\": \"http://mhausenblas.info\",\n    \"location\": \"Galway, Ireland\",\n    \"email\": \"michael.hausenblas!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"Distributed Systems Jester  \\r\\n\\r\\n#kubernetes #cloudnative #golang\",\n    \"public_repos\": 165,\n    \"public_gists\": 57,\n    \"followers\": 564,\n    \"following\": 0,\n    \"created_at\": \"2009-02-07 16:07:32 UTC\",\n    \"updated_at\": \"2019-02-12 08:26:25 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"MapR < 2015-04-01, Mesosphere < 2017-03-01, Red Hat\"\n  },\n  {\n    \"login\": \"richarddli\",\n    \"id\": 10065494,\n    \"node_id\": \"MDQ6VXNlcjEwMDY1NDk0\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/10065494?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/richarddli\",\n    \"html_url\": \"https://github.com/richarddli\",\n    \"followers_url\": \"https://api.github.com/users/richarddli/followers\",\n    \"following_url\": \"https://api.github.com/users/richarddli/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/richarddli/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/richarddli/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/richarddli/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/richarddli/orgs\",\n    \"repos_url\": \"https://api.github.com/users/richarddli/repos\",\n    \"events_url\": \"https://api.github.com/users/richarddli/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/richarddli/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Richard Li\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"richard!datawire.io\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 11,\n    \"public_gists\": 15,\n    \"followers\": 23,\n    \"following\": 1,\n    \"created_at\": \"2014-12-03 19:14:07 UTC\",\n    \"updated_at\": \"2018-12-21 19:40:11 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Datawire\"\n  },\n  {\n    \"login\": \"dwhitena\",\n    \"id\": 4524535,\n    \"node_id\": \"MDQ6VXNlcjQ1MjQ1MzU=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/4524535?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dwhitena\",\n    \"html_url\": \"https://github.com/dwhitena\",\n    \"followers_url\": \"https://api.github.com/users/dwhitena/followers\",\n    \"following_url\": \"https://api.github.com/users/dwhitena/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dwhitena/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dwhitena/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dwhitena/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dwhitena/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dwhitena/repos\",\n    \"events_url\": \"https://api.github.com/users/dwhitena/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dwhitena/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Daniel Whitenack\",\n    \"company\": null,\n    \"blog\": \"http://datadan.io\",\n    \"location\": \"Lafayette, IN\",\n    \"email\": \"whitenack.daniel!gmail.com\",\n    \"hireable\": true,\n    \"bio\": \"data scientist, gopher, physicist\",\n    \"public_repos\": 72,\n    \"public_gists\": 2,\n    \"followers\": 351,\n    \"following\": 6,\n    \"created_at\": \"2013-05-25 04:12:32 UTC\",\n    \"updated_at\": \"2019-01-30 13:07:30 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"monadic\",\n    \"id\": 34526,\n    \"node_id\": \"MDQ6VXNlcjM0NTI2\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/34526?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/monadic\",\n    \"html_url\": \"https://github.com/monadic\",\n    \"followers_url\": \"https://api.github.com/users/monadic/followers\",\n    \"following_url\": \"https://api.github.com/users/monadic/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/monadic/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/monadic/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/monadic/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/monadic/orgs\",\n    \"repos_url\": \"https://api.github.com/users/monadic/repos\",\n    \"events_url\": \"https://api.github.com/users/monadic/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/monadic/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"alexis richardson\",\n    \"company\": \"Weaveworks\",\n    \"blog\": \"http://weave.works\",\n    \"location\": \"the containers\",\n    \"email\": \"alexis.richardson!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 3,\n    \"public_gists\": 1,\n    \"followers\": 79,\n    \"following\": 411,\n    \"created_at\": \"2008-11-14 21:40:21 UTC\",\n    \"updated_at\": \"2019-02-04 15:21:19 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Weaveworks\"\n  },\n  {\n    \"login\": \"erikerlandson\",\n    \"id\": 259898,\n    \"node_id\": \"MDQ6VXNlcjI1OTg5OA==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/259898?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/erikerlandson\",\n    \"html_url\": \"https://github.com/erikerlandson\",\n    \"followers_url\": \"https://api.github.com/users/erikerlandson/followers\",\n    \"following_url\": \"https://api.github.com/users/erikerlandson/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/erikerlandson/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/erikerlandson/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/erikerlandson/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/erikerlandson/orgs\",\n    \"repos_url\": \"https://api.github.com/users/erikerlandson/repos\",\n    \"events_url\": \"https://api.github.com/users/erikerlandson/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/erikerlandson/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Erik Erlandson\",\n    \"company\": \"Red Hat\",\n    \"blog\": \"http://erikerlandson.github.io/\",\n    \"location\": \"Tempe, AZ\",\n    \"email\": \"eje!redhat.com\",\n    \"hireable\": null,\n    \"bio\": \"Blog: http://erikerlandson.github.io/\\r\\nTwitter: @manyangled\\r\\n\",\n    \"public_repos\": 83,\n    \"public_gists\": 95,\n    \"followers\": 78,\n    \"following\": 2,\n    \"created_at\": \"2010-04-29 18:42:42 UTC\",\n    \"updated_at\": \"2019-02-18 23:45:26 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Red Hat\"\n  },\n  {\n    \"login\": \"windkit\",\n    \"id\": 360884,\n    \"node_id\": \"MDQ6VXNlcjM2MDg4NA==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/360884?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/windkit\",\n    \"html_url\": \"https://github.com/windkit\",\n    \"followers_url\": \"https://api.github.com/users/windkit/followers\",\n    \"following_url\": \"https://api.github.com/users/windkit/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/windkit/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/windkit/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/windkit/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/windkit/orgs\",\n    \"repos_url\": \"https://api.github.com/users/windkit/repos\",\n    \"events_url\": \"https://api.github.com/users/windkit/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/windkit/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Windkit Li\",\n    \"company\": null,\n    \"blog\": \"https://twitter.com/windkithk\",\n    \"location\": null,\n    \"email\": \"windkithk!gmail.com\",\n    \"hireable\": true,\n    \"bio\": \"System Optimizer.\\r\\nLove distributed system and performance tuning.\",\n    \"public_repos\": 50,\n    \"public_gists\": 5,\n    \"followers\": 5,\n    \"following\": 0,\n    \"created_at\": \"2010-08-11 12:42:52 UTC\",\n    \"updated_at\": \"2019-02-01 00:31:10 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"hackintoshrao\",\n    \"id\": 2609511,\n    \"node_id\": \"MDQ6VXNlcjI2MDk1MTE=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/2609511?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/hackintoshrao\",\n    \"html_url\": \"https://github.com/hackintoshrao\",\n    \"followers_url\": \"https://api.github.com/users/hackintoshrao/followers\",\n    \"following_url\": \"https://api.github.com/users/hackintoshrao/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/hackintoshrao/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/hackintoshrao/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/hackintoshrao/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/hackintoshrao/orgs\",\n    \"repos_url\": \"https://api.github.com/users/hackintoshrao/repos\",\n    \"events_url\": \"https://api.github.com/users/hackintoshrao/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/hackintoshrao/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Karthic Rao\",\n    \"company\": \"!Kredoai \",\n    \"blog\": \"http://hackintoshrao.com/\",\n    \"location\": \"Bangalore\",\n    \"email\": \"kartronics85!gmail.com\",\n    \"hireable\": true,\n    \"bio\": \"Code with Love, Learn with Passion, Feel the music, Live like a hacker. \",\n    \"public_repos\": 148,\n    \"public_gists\": 179,\n    \"followers\": 101,\n    \"following\": 56,\n    \"created_at\": \"2012-10-21 00:18:30 UTC\",\n    \"updated_at\": \"2019-01-15 23:30:22 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"dizcology\",\n    \"id\": 7587635,\n    \"node_id\": \"MDQ6VXNlcjc1ODc2MzU=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7587635?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dizcology\",\n    \"html_url\": \"https://github.com/dizcology\",\n    \"followers_url\": \"https://api.github.com/users/dizcology/followers\",\n    \"following_url\": \"https://api.github.com/users/dizcology/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dizcology/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dizcology/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dizcology/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dizcology/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dizcology/repos\",\n    \"events_url\": \"https://api.github.com/users/dizcology/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dizcology/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Yu-Han Liu\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"dizcology!hotmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 42,\n    \"public_gists\": 1,\n    \"followers\": 24,\n    \"following\": 6,\n    \"created_at\": \"2014-05-15 02:28:17 UTC\",\n    \"updated_at\": \"2018-09-12 16:13:09 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"potix2\",\n    \"id\": 93571,\n    \"node_id\": \"MDQ6VXNlcjkzNTcx\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/93571?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/potix2\",\n    \"html_url\": \"https://github.com/potix2\",\n    \"followers_url\": \"https://api.github.com/users/potix2/followers\",\n    \"following_url\": \"https://api.github.com/users/potix2/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/potix2/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/potix2/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/potix2/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/potix2/orgs\",\n    \"repos_url\": \"https://api.github.com/users/potix2/repos\",\n    \"events_url\": \"https://api.github.com/users/potix2/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/potix2/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Katsunori Kanda\",\n    \"company\": null,\n    \"blog\": \"http://potix2.blogspot.com/\",\n    \"location\": \"Tokyo, Japan\",\n    \"email\": \"potix2!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 70,\n    \"public_gists\": 68,\n    \"followers\": 34,\n    \"following\": 65,\n    \"created_at\": \"2009-06-09 13:47:18 UTC\",\n    \"updated_at\": \"2019-01-24 10:30:39 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"ldcastell\",\n    \"id\": 16139975,\n    \"node_id\": \"MDQ6VXNlcjE2MTM5OTc1\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/16139975?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ldcastell\",\n    \"html_url\": \"https://github.com/ldcastell\",\n    \"followers_url\": \"https://api.github.com/users/ldcastell/followers\",\n    \"following_url\": \"https://api.github.com/users/ldcastell/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ldcastell/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ldcastell/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ldcastell/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ldcastell/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ldcastell/repos\",\n    \"events_url\": \"https://api.github.com/users/ldcastell/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ldcastell/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Daniel Castellanos\",\n    \"company\": \"!intel \",\n    \"blog\": \"\",\n    \"location\": \"Hillsboro, OR\",\n    \"email\": \"luis.daniel.castellanos!intel.com\",\n    \"hireable\": null,\n    \"bio\": \"I'm a Software Engineer who enjoys building new solutions that are easy to use and scale. front-end, backend, you name it :) \",\n    \"public_repos\": 8,\n    \"public_gists\": 3,\n    \"followers\": 7,\n    \"following\": 7,\n    \"created_at\": \"2015-12-03 18:31:43 UTC\",\n    \"updated_at\": \"2019-01-28 17:44:56 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Intel\"\n  },\n  {\n    \"login\": \"hamelsmu\",\n    \"id\": 1483922,\n    \"node_id\": \"MDQ6VXNlcjE0ODM5MjI=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/1483922?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/hamelsmu\",\n    \"html_url\": \"https://github.com/hamelsmu\",\n    \"followers_url\": \"https://api.github.com/users/hamelsmu/followers\",\n    \"following_url\": \"https://api.github.com/users/hamelsmu/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/hamelsmu/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/hamelsmu/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/hamelsmu/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/hamelsmu/orgs\",\n    \"repos_url\": \"https://api.github.com/users/hamelsmu/repos\",\n    \"events_url\": \"https://api.github.com/users/hamelsmu/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/hamelsmu/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": true,\n    \"name\": \"Hamel Husain\",\n    \"company\": \"!github \",\n    \"blog\": \"http://hamel.io\",\n    \"location\": \"Portland, OR\",\n    \"email\": \"hamel.husain!gmail.com\",\n    \"hireable\": true,\n    \"bio\": \"Staff Machine Learning Engineer \\r\\n\\r\\nCurrently @github \\r\\nPreviously @airbnb, @datarobot\",\n    \"public_repos\": 66,\n    \"public_gists\": 17,\n    \"followers\": 283,\n    \"following\": 43,\n    \"created_at\": \"2012-02-29 02:56:50 UTC\",\n    \"updated_at\": \"2019-02-20 16:55:54 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"ggodreau\",\n    \"id\": 13398839,\n    \"node_id\": \"MDQ6VXNlcjEzMzk4ODM5\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/13398839?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ggodreau\",\n    \"html_url\": \"https://github.com/ggodreau\",\n    \"followers_url\": \"https://api.github.com/users/ggodreau/followers\",\n    \"following_url\": \"https://api.github.com/users/ggodreau/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ggodreau/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ggodreau/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ggodreau/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ggodreau/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ggodreau/repos\",\n    \"events_url\": \"https://api.github.com/users/ggodreau/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ggodreau/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Gregory Godreau\",\n    \"company\": \"!generalassembly @maishelf \",\n    \"blog\": \"https://godreau.xyz\",\n    \"location\": \"Austin, TX\",\n    \"email\": \"godreau!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"branch like bamboo​ /\\r\\nI merge zeros and ones /\\r\\nI got bags of code /\\r\\nand I push it by the tons\",\n    \"public_repos\": 124,\n    \"public_gists\": 12,\n    \"followers\": 12,\n    \"following\": 24,\n    \"created_at\": \"2015-07-19 00:06:20 UTC\",\n    \"updated_at\": \"2019-02-18 00:22:27 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"scttl\",\n    \"id\": 30309,\n    \"node_id\": \"MDQ6VXNlcjMwMzA5\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/30309?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/scttl\",\n    \"html_url\": \"https://github.com/scttl\",\n    \"followers_url\": \"https://api.github.com/users/scttl/followers\",\n    \"following_url\": \"https://api.github.com/users/scttl/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/scttl/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/scttl/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/scttl/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/scttl/orgs\",\n    \"repos_url\": \"https://api.github.com/users/scttl/repos\",\n    \"events_url\": \"https://api.github.com/users/scttl/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/scttl/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Scott Leishman\",\n    \"company\": null,\n    \"blog\": \"http://sct.tl\",\n    \"location\": \"San Diego, CA\",\n    \"email\": \"scott.leishman!gmail.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 17,\n    \"public_gists\": 4,\n    \"followers\": 33,\n    \"following\": 6,\n    \"created_at\": \"2008-10-22 04:48:15 UTC\",\n    \"updated_at\": \"2019-01-10 06:25:06 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"warmchang\",\n    \"id\": 13084624,\n    \"node_id\": \"MDQ6VXNlcjEzMDg0NjI0\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/13084624?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/warmchang\",\n    \"html_url\": \"https://github.com/warmchang\",\n    \"followers_url\": \"https://api.github.com/users/warmchang/followers\",\n    \"following_url\": \"https://api.github.com/users/warmchang/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/warmchang/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/warmchang/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/warmchang/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/warmchang/orgs\",\n    \"repos_url\": \"https://api.github.com/users/warmchang/repos\",\n    \"events_url\": \"https://api.github.com/users/warmchang/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/warmchang/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"William Zhang\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"ShangHai, China\",\n    \"email\": \"warmchang!outlook.com\",\n    \"hireable\": null,\n    \"bio\": \"Hello World!\",\n    \"public_repos\": 105,\n    \"public_gists\": 0,\n    \"followers\": 25,\n    \"following\": 121,\n    \"created_at\": \"2015-06-28 08:20:34 UTC\",\n    \"updated_at\": \"2019-02-18 15:46:49 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Huawei < 2010-03-08, ZTE\"\n  },\n  {\n    \"login\": \"nqn\",\n    \"id\": 897374,\n    \"node_id\": \"MDQ6VXNlcjg5NzM3NA==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/897374?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/nqn\",\n    \"html_url\": \"https://github.com/nqn\",\n    \"followers_url\": \"https://api.github.com/users/nqn/followers\",\n    \"following_url\": \"https://api.github.com/users/nqn/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/nqn/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/nqn/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/nqn/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/nqn/orgs\",\n    \"repos_url\": \"https://api.github.com/users/nqn/repos\",\n    \"events_url\": \"https://api.github.com/users/nqn/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/nqn/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Niklas Nielsen\",\n    \"company\": \"Intel\",\n    \"blog\": \"\",\n    \"location\": \"San Francisco, CA\",\n    \"email\": \"niklas.nielsen!intel.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 46,\n    \"public_gists\": 49,\n    \"followers\": 46,\n    \"following\": 25,\n    \"created_at\": \"2011-07-06 05:05:43 UTC\",\n    \"updated_at\": \"2019-02-12 05:09:37 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Intel\"\n  },\n  {\n    \"login\": \"dmsuehir\",\n    \"id\": 13952606,\n    \"node_id\": \"MDQ6VXNlcjEzOTUyNjA2\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/13952606?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dmsuehir\",\n    \"html_url\": \"https://github.com/dmsuehir\",\n    \"followers_url\": \"https://api.github.com/users/dmsuehir/followers\",\n    \"following_url\": \"https://api.github.com/users/dmsuehir/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dmsuehir/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dmsuehir/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dmsuehir/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dmsuehir/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dmsuehir/repos\",\n    \"events_url\": \"https://api.github.com/users/dmsuehir/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dmsuehir/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Dina Suehiro Jones\",\n    \"company\": \"Intel Corporation\",\n    \"blog\": \"\",\n    \"location\": \"Portland, OR\",\n    \"email\": \"dina.m.suehiro!intel.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 23,\n    \"public_gists\": 0,\n    \"followers\": 6,\n    \"following\": 0,\n    \"created_at\": \"2015-08-24 22:18:40 UTC\",\n    \"updated_at\": \"2019-01-30 22:03:01 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Intel\"\n  },\n  {\n    \"login\": \"Ajay191191\",\n    \"id\": 1080409,\n    \"node_id\": \"MDQ6VXNlcjEwODA0MDk=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1080409?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Ajay191191\",\n    \"html_url\": \"https://github.com/Ajay191191\",\n    \"followers_url\": \"https://api.github.com/users/Ajay191191/followers\",\n    \"following_url\": \"https://api.github.com/users/Ajay191191/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Ajay191191/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Ajay191191/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Ajay191191/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Ajay191191/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Ajay191191/repos\",\n    \"events_url\": \"https://api.github.com/users/Ajay191191/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Ajay191191/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ajay Deshpande\",\n    \"company\": \"!IntelAI @NervanaSystems \",\n    \"blog\": \"https://linkedin.com/in/Ajay191191\",\n    \"location\": \"San Diego, CA\",\n    \"email\": \"ajay.deshpande!intel.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 27,\n    \"public_gists\": 2,\n    \"followers\": 17,\n    \"following\": 7,\n    \"created_at\": \"2011-09-26 11:40:27 UTC\",\n    \"updated_at\": \"2019-01-24 00:29:53 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"anjalisood\",\n    \"id\": 11275079,\n    \"node_id\": \"MDQ6VXNlcjExMjc1MDc5\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/11275079?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/anjalisood\",\n    \"html_url\": \"https://github.com/anjalisood\",\n    \"followers_url\": \"https://api.github.com/users/anjalisood/followers\",\n    \"following_url\": \"https://api.github.com/users/anjalisood/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/anjalisood/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/anjalisood/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/anjalisood/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/anjalisood/orgs\",\n    \"repos_url\": \"https://api.github.com/users/anjalisood/repos\",\n    \"events_url\": \"https://api.github.com/users/anjalisood/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/anjalisood/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Anjali Sood\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"United States\",\n    \"email\": \"anjalisood!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 7,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 1,\n    \"created_at\": \"2015-03-02 16:49:36 UTC\",\n    \"updated_at\": \"2018-12-28 19:44:38 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"hamedhsn\",\n    \"id\": 4147327,\n    \"node_id\": \"MDQ6VXNlcjQxNDczMjc=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/4147327?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/hamedhsn\",\n    \"html_url\": \"https://github.com/hamedhsn\",\n    \"followers_url\": \"https://api.github.com/users/hamedhsn/followers\",\n    \"following_url\": \"https://api.github.com/users/hamedhsn/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/hamedhsn/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/hamedhsn/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/hamedhsn/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/hamedhsn/orgs\",\n    \"repos_url\": \"https://api.github.com/users/hamedhsn/repos\",\n    \"events_url\": \"https://api.github.com/users/hamedhsn/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/hamedhsn/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Hamed\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"hamedhsn!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 20,\n    \"public_gists\": 3,\n    \"followers\": 2,\n    \"following\": 1,\n    \"created_at\": \"2013-04-13 18:06:21 UTC\",\n    \"updated_at\": \"2019-01-11 00:20:57 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"ashahab\",\n    \"id\": 690493,\n    \"node_id\": \"MDQ6VXNlcjY5MDQ5Mw==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/690493?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ashahab\",\n    \"html_url\": \"https://github.com/ashahab\",\n    \"followers_url\": \"https://api.github.com/users/ashahab/followers\",\n    \"following_url\": \"https://api.github.com/users/ashahab/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ashahab/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ashahab/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ashahab/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ashahab/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ashahab/repos\",\n    \"events_url\": \"https://api.github.com/users/ashahab/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ashahab/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Abin Shahab\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ashahab!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 18,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2011-03-25 14:46:51 UTC\",\n    \"updated_at\": \"2018-12-13 15:58:01 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"bikramnehra\",\n    \"id\": 3319602,\n    \"node_id\": \"MDQ6VXNlcjMzMTk2MDI=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/3319602?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/bikramnehra\",\n    \"html_url\": \"https://github.com/bikramnehra\",\n    \"followers_url\": \"https://api.github.com/users/bikramnehra/followers\",\n    \"following_url\": \"https://api.github.com/users/bikramnehra/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/bikramnehra/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/bikramnehra/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/bikramnehra/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/bikramnehra/orgs\",\n    \"repos_url\": \"https://api.github.com/users/bikramnehra/repos\",\n    \"events_url\": \"https://api.github.com/users/bikramnehra/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/bikramnehra/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Bikramdeep Singh\",\n    \"company\": \"!SUSE\",\n    \"blog\": \"\",\n    \"location\": \"Vancouver B.C\",\n    \"email\": \"bikramdeep.singh!suse.com\",\n    \"hireable\": true,\n    \"bio\": \"Code. Cloud. Coffee.\",\n    \"public_repos\": 19,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 1,\n    \"created_at\": \"2013-01-20 08:36:08 UTC\",\n    \"updated_at\": \"2019-02-10 21:57:42 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"SUSE\"\n  },\n  {\n    \"login\": \"zhilingc\",\n    \"id\": 15104168,\n    \"node_id\": \"MDQ6VXNlcjE1MTA0MTY4\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/15104168?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/zhilingc\",\n    \"html_url\": \"https://github.com/zhilingc\",\n    \"followers_url\": \"https://api.github.com/users/zhilingc/followers\",\n    \"following_url\": \"https://api.github.com/users/zhilingc/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/zhilingc/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/zhilingc/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/zhilingc/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/zhilingc/orgs\",\n    \"repos_url\": \"https://api.github.com/users/zhilingc/repos\",\n    \"events_url\": \"https://api.github.com/users/zhilingc/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/zhilingc/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Chen Zhiling\",\n    \"company\": \"!gojekindonesia \",\n    \"blog\": \"\",\n    \"location\": \"Singapore\",\n    \"email\": \"chnzhlng!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"Doing stuff\",\n    \"public_repos\": 12,\n    \"public_gists\": 0,\n    \"followers\": 8,\n    \"following\": 10,\n    \"created_at\": \"2015-10-13 09:56:56 UTC\",\n    \"updated_at\": \"2019-01-31 07:30:57 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"cbockman\",\n    \"id\": 4667922,\n    \"node_id\": \"MDQ6VXNlcjQ2Njc5MjI=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/4667922?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/cbockman\",\n    \"html_url\": \"https://github.com/cbockman\",\n    \"followers_url\": \"https://api.github.com/users/cbockman/followers\",\n    \"following_url\": \"https://api.github.com/users/cbockman/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/cbockman/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/cbockman/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/cbockman/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/cbockman/orgs\",\n    \"repos_url\": \"https://api.github.com/users/cbockman/repos\",\n    \"events_url\": \"https://api.github.com/users/cbockman/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/cbockman/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"c.bockman!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 17,\n    \"public_gists\": 0,\n    \"followers\": 3,\n    \"following\": 0,\n    \"created_at\": \"2013-06-11 06:53:32 UTC\",\n    \"updated_at\": \"2019-02-11 22:38:09 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"haitch\",\n    \"id\": 1167635,\n    \"node_id\": \"MDQ6VXNlcjExNjc2MzU=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/1167635?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/haitch\",\n    \"html_url\": \"https://github.com/haitch\",\n    \"followers_url\": \"https://api.github.com/users/haitch/followers\",\n    \"following_url\": \"https://api.github.com/users/haitch/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/haitch/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/haitch/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/haitch/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/haitch/orgs\",\n    \"repos_url\": \"https://api.github.com/users/haitch/repos\",\n    \"events_url\": \"https://api.github.com/users/haitch/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/haitch/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Haitao Chen\",\n    \"company\": \"Microsoft\",\n    \"blog\": \"\",\n    \"location\": \"Redmond\",\n    \"email\": \"haitch!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 14,\n    \"public_gists\": 4,\n    \"followers\": 13,\n    \"following\": 72,\n    \"created_at\": \"2011-11-02 15:19:40 UTC\",\n    \"updated_at\": \"2019-01-10 21:38:25 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Microsoft\"\n  },\n  {\n    \"login\": \"lienhua34\",\n    \"id\": 1691680,\n    \"node_id\": \"MDQ6VXNlcjE2OTE2ODA=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/1691680?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/lienhua34\",\n    \"html_url\": \"https://github.com/lienhua34\",\n    \"followers_url\": \"https://api.github.com/users/lienhua34/followers\",\n    \"following_url\": \"https://api.github.com/users/lienhua34/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/lienhua34/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/lienhua34/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/lienhua34/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/lienhua34/orgs\",\n    \"repos_url\": \"https://api.github.com/users/lienhua34/repos\",\n    \"events_url\": \"https://api.github.com/users/lienhua34/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/lienhua34/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Enhua Li\",\n    \"company\": \"!netease\",\n    \"blog\": \"\",\n    \"location\": \"Hangzhou, Zhejiang, China\",\n    \"email\": \"lienhua34!163.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 9,\n    \"public_gists\": 0,\n    \"followers\": 25,\n    \"following\": 33,\n    \"created_at\": \"2012-04-30 06:55:54 UTC\",\n    \"updated_at\": \"2019-01-17 15:08:16 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Net EASE\"\n  },\n  {\n    \"login\": \"loadwiki\",\n    \"id\": 4597033,\n    \"node_id\": \"MDQ6VXNlcjQ1OTcwMzM=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/4597033?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/loadwiki\",\n    \"html_url\": \"https://github.com/loadwiki\",\n    \"followers_url\": \"https://api.github.com/users/loadwiki/followers\",\n    \"following_url\": \"https://api.github.com/users/loadwiki/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/loadwiki/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/loadwiki/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/loadwiki/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/loadwiki/orgs\",\n    \"repos_url\": \"https://api.github.com/users/loadwiki/repos\",\n    \"events_url\": \"https://api.github.com/users/loadwiki/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/loadwiki/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"load\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"shanghai/nanjing\",\n    \"email\": \"chutianqianli!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"Veteran of data storage.  \\r\\nNewbie in ML/CV.\",\n    \"public_repos\": 9,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 6,\n    \"created_at\": \"2013-06-03 03:49:29 UTC\",\n    \"updated_at\": \"2019-02-08 10:34:32 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"wangzewang\",\n    \"id\": 16834522,\n    \"node_id\": \"MDQ6VXNlcjE2ODM0NTIy\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/16834522?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/wangzewang\",\n    \"html_url\": \"https://github.com/wangzewang\",\n    \"followers_url\": \"https://api.github.com/users/wangzewang/followers\",\n    \"following_url\": \"https://api.github.com/users/wangzewang/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/wangzewang/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/wangzewang/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/wangzewang/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/wangzewang/orgs\",\n    \"repos_url\": \"https://api.github.com/users/wangzewang/repos\",\n    \"events_url\": \"https://api.github.com/users/wangzewang/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/wangzewang/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Zewang Wang\",\n    \"company\": \" @starcloud-ai \",\n    \"blog\": \"https://zewang.wang\",\n    \"location\": \"Beijing, China\",\n    \"email\": \"wangzewang!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"xiaowangwang  ~。~\",\n    \"public_repos\": 5,\n    \"public_gists\": 2,\n    \"followers\": 8,\n    \"following\": 63,\n    \"created_at\": \"2016-01-22 09:25:20 UTC\",\n    \"updated_at\": \"2019-02-19 09:53:54 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"DeliangFan\",\n    \"id\": 8185735,\n    \"node_id\": \"MDQ6VXNlcjgxODU3MzU=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/8185735?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/DeliangFan\",\n    \"html_url\": \"https://github.com/DeliangFan\",\n    \"followers_url\": \"https://api.github.com/users/DeliangFan/followers\",\n    \"following_url\": \"https://api.github.com/users/DeliangFan/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/DeliangFan/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/DeliangFan/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/DeliangFan/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/DeliangFan/orgs\",\n    \"repos_url\": \"https://api.github.com/users/DeliangFan/repos\",\n    \"events_url\": \"https://api.github.com/users/DeliangFan/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/DeliangFan/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"vanderliang!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 10,\n    \"public_gists\": 0,\n    \"followers\": 9,\n    \"following\": 4,\n    \"created_at\": \"2014-07-17 01:17:01 UTC\",\n    \"updated_at\": \"2019-01-22 07:10:34 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"HP < 2015-10-31, Letv Cloud Computing < 2015-11-13, HPE\"\n  },\n  {\n    \"login\": \"cndaimin\",\n    \"id\": 4527219,\n    \"node_id\": \"MDQ6VXNlcjQ1MjcyMTk=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/4527219?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/cndaimin\",\n    \"html_url\": \"https://github.com/cndaimin\",\n    \"followers_url\": \"https://api.github.com/users/cndaimin/followers\",\n    \"following_url\": \"https://api.github.com/users/cndaimin/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/cndaimin/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/cndaimin/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/cndaimin/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/cndaimin/orgs\",\n    \"repos_url\": \"https://api.github.com/users/cndaimin/repos\",\n    \"events_url\": \"https://api.github.com/users/cndaimin/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/cndaimin/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"daimin\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"HangZhou, China\",\n    \"email\": \"daimin!outlook.com\",\n    \"hireable\": null,\n    \"bio\": \"Tell a little about yourself\",\n    \"public_repos\": 7,\n    \"public_gists\": 2,\n    \"followers\": 1,\n    \"following\": 6,\n    \"created_at\": \"2013-05-25 14:11:10 UTC\",\n    \"updated_at\": \"2019-01-09 06:38:08 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"rexxar-liang\",\n    \"id\": 11643580,\n    \"node_id\": \"MDQ6VXNlcjExNjQzNTgw\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/11643580?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/rexxar-liang\",\n    \"html_url\": \"https://github.com/rexxar-liang\",\n    \"followers_url\": \"https://api.github.com/users/rexxar-liang/followers\",\n    \"following_url\": \"https://api.github.com/users/rexxar-liang/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/rexxar-liang/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/rexxar-liang/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/rexxar-liang/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/rexxar-liang/orgs\",\n    \"repos_url\": \"https://api.github.com/users/rexxar-liang/repos\",\n    \"events_url\": \"https://api.github.com/users/rexxar-liang/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/rexxar-liang/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Rexxar Liang\",\n    \"company\": \"Huawei\",\n    \"blog\": \"\",\n    \"location\": \"410 JiangHong Rd, BinJiang Dist,HangZhou,China\",\n    \"email\": \"rexxar.liang!huawei.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 15,\n    \"public_gists\": 0,\n    \"followers\": 4,\n    \"following\": 4,\n    \"created_at\": \"2015-03-25 07:18:10 UTC\",\n    \"updated_at\": \"2019-01-31 01:24:12 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Huawei\"\n  },\n  {\n    \"login\": \"Muzry\",\n    \"id\": 12268678,\n    \"node_id\": \"MDQ6VXNlcjEyMjY4Njc4\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/12268678?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Muzry\",\n    \"html_url\": \"https://github.com/Muzry\",\n    \"followers_url\": \"https://api.github.com/users/Muzry/followers\",\n    \"following_url\": \"https://api.github.com/users/Muzry/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Muzry/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Muzry/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Muzry/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Muzry/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Muzry/repos\",\n    \"events_url\": \"https://api.github.com/users/Muzry/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Muzry/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Dan Li\",\n    \"company\": \"Caicloud\",\n    \"blog\": \"\",\n    \"location\": \"HangZhou, Zhejiang, China\",\n    \"email\": \"lidan!caicloud.io\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 12,\n    \"public_gists\": 0,\n    \"followers\": 15,\n    \"following\": 18,\n    \"created_at\": \"2015-05-06 07:33:36 UTC\",\n    \"updated_at\": \"2019-01-11 06:29:01 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Caicloud\"\n  },\n  {\n    \"login\": \"jiaxuanzhou\",\n    \"id\": 7779565,\n    \"node_id\": \"MDQ6VXNlcjc3Nzk1NjU=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7779565?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jiaxuanzhou\",\n    \"html_url\": \"https://github.com/jiaxuanzhou\",\n    \"followers_url\": \"https://api.github.com/users/jiaxuanzhou/followers\",\n    \"following_url\": \"https://api.github.com/users/jiaxuanzhou/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jiaxuanzhou/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jiaxuanzhou/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jiaxuanzhou/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jiaxuanzhou/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jiaxuanzhou/repos\",\n    \"events_url\": \"https://api.github.com/users/jiaxuanzhou/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jiaxuanzhou/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"jiaxuan zhou\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"hangzhou\",\n    \"email\": \"a3721659a!hotmail.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 52,\n    \"public_gists\": 0,\n    \"followers\": 10,\n    \"following\": 9,\n    \"created_at\": \"2014-06-03 10:25:31 UTC\",\n    \"updated_at\": \"2019-01-21 09:41:20 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"ntenenz\",\n    \"id\": 8411908,\n    \"node_id\": \"MDQ6VXNlcjg0MTE5MDg=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/8411908?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ntenenz\",\n    \"html_url\": \"https://github.com/ntenenz\",\n    \"followers_url\": \"https://api.github.com/users/ntenenz/followers\",\n    \"following_url\": \"https://api.github.com/users/ntenenz/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ntenenz/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ntenenz/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ntenenz/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ntenenz/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ntenenz/repos\",\n    \"events_url\": \"https://api.github.com/users/ntenenz/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ntenenz/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Neil Tenenholtz\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ntenenz!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Director of Machine Learning @clindatsci | ex @fitbit, @harvard PhD\",\n    \"public_repos\": 3,\n    \"public_gists\": 2,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2014-08-11 01:40:59 UTC\",\n    \"updated_at\": \"2018-12-04 06:11:02 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"0olwzo0\",\n    \"id\": 4743515,\n    \"node_id\": \"MDQ6VXNlcjQ3NDM1MTU=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/4743515?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/0olwzo0\",\n    \"html_url\": \"https://github.com/0olwzo0\",\n    \"followers_url\": \"https://api.github.com/users/0olwzo0/followers\",\n    \"following_url\": \"https://api.github.com/users/0olwzo0/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/0olwzo0/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/0olwzo0/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/0olwzo0/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/0olwzo0/orgs\",\n    \"repos_url\": \"https://api.github.com/users/0olwzo0/repos\",\n    \"events_url\": \"https://api.github.com/users/0olwzo0/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/0olwzo0/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": \"Google\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"wenzhel!google.com\",\n    \"hireable\": null,\n    \"bio\": \"Software Engineer!Google Cloud Machine Learning Engine \",\n    \"public_repos\": 8,\n    \"public_gists\": 0,\n    \"followers\": 20,\n    \"following\": 0,\n    \"created_at\": \"2013-06-20 01:11:22 UTC\",\n    \"updated_at\": \"2019-01-30 15:28:50 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"sdf611097\",\n    \"id\": 7991672,\n    \"node_id\": \"MDQ6VXNlcjc5OTE2NzI=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7991672?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/sdf611097\",\n    \"html_url\": \"https://github.com/sdf611097\",\n    \"followers_url\": \"https://api.github.com/users/sdf611097/followers\",\n    \"following_url\": \"https://api.github.com/users/sdf611097/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/sdf611097/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/sdf611097/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/sdf611097/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/sdf611097/orgs\",\n    \"repos_url\": \"https://api.github.com/users/sdf611097/repos\",\n    \"events_url\": \"https://api.github.com/users/sdf611097/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/sdf611097/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"ChunTing Lin\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"sdf611097!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 21,\n    \"public_gists\": 2,\n    \"followers\": 4,\n    \"following\": 0,\n    \"created_at\": \"2014-06-26 02:31:17 UTC\",\n    \"updated_at\": \"2019-02-18 09:59:48 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"ConnorDoyle\",\n    \"id\": 379372,\n    \"node_id\": \"MDQ6VXNlcjM3OTM3Mg==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/379372?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ConnorDoyle\",\n    \"html_url\": \"https://github.com/ConnorDoyle\",\n    \"followers_url\": \"https://api.github.com/users/ConnorDoyle/followers\",\n    \"following_url\": \"https://api.github.com/users/ConnorDoyle/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ConnorDoyle/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ConnorDoyle/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ConnorDoyle/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ConnorDoyle/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ConnorDoyle/repos\",\n    \"events_url\": \"https://api.github.com/users/ConnorDoyle/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ConnorDoyle/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Connor Doyle\",\n    \"company\": \"Intel Corporation\",\n    \"blog\": \"http://topology.io\",\n    \"location\": \"San Francisco, CA\",\n    \"email\": \"connordoyle!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 63,\n    \"public_gists\": 43,\n    \"followers\": 109,\n    \"following\": 145,\n    \"created_at\": \"2010-08-28 23:28:50 UTC\",\n    \"updated_at\": \"2019-02-16 02:46:22 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Mesosphere < 2015-10-01, Intel\"\n  },\n  {\n    \"login\": \"yeya24\",\n    \"id\": 25150124,\n    \"node_id\": \"MDQ6VXNlcjI1MTUwMTI0\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/25150124?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/yeya24\",\n    \"html_url\": \"https://github.com/yeya24\",\n    \"followers_url\": \"https://api.github.com/users/yeya24/followers\",\n    \"following_url\": \"https://api.github.com/users/yeya24/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/yeya24/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/yeya24/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/yeya24/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/yeya24/orgs\",\n    \"repos_url\": \"https://api.github.com/users/yeya24/repos\",\n    \"events_url\": \"https://api.github.com/users/yeya24/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/yeya24/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"yeya24\",\n    \"company\": \"!DaoCloud \",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ben.ye!daocloud.io\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 42,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 69,\n    \"created_at\": \"2017-01-16 11:10:02 UTC\",\n    \"updated_at\": \"2019-02-13 12:40:00 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"DaoCloud\"\n  },\n  {\n    \"login\": \"ElizabethSvit\",\n    \"id\": 9437376,\n    \"node_id\": \"MDQ6VXNlcjk0MzczNzY=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/9437376?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ElizabethSvit\",\n    \"html_url\": \"https://github.com/ElizabethSvit\",\n    \"followers_url\": \"https://api.github.com/users/ElizabethSvit/followers\",\n    \"following_url\": \"https://api.github.com/users/ElizabethSvit/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ElizabethSvit/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ElizabethSvit/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ElizabethSvit/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ElizabethSvit/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ElizabethSvit/repos\",\n    \"events_url\": \"https://api.github.com/users/ElizabethSvit/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ElizabethSvit/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"eisvitanko!edu.hse.ru\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 21,\n    \"public_gists\": 1,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2014-10-28 19:35:51 UTC\",\n    \"updated_at\": \"2019-02-01 15:34:26 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"owoshch\",\n    \"id\": 22987333,\n    \"node_id\": \"MDQ6VXNlcjIyOTg3MzMz\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/22987333?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/owoshch\",\n    \"html_url\": \"https://github.com/owoshch\",\n    \"followers_url\": \"https://api.github.com/users/owoshch/followers\",\n    \"following_url\": \"https://api.github.com/users/owoshch/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/owoshch/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/owoshch/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/owoshch/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/owoshch/orgs\",\n    \"repos_url\": \"https://api.github.com/users/owoshch/repos\",\n    \"events_url\": \"https://api.github.com/users/owoshch/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/owoshch/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Fedor Kitashov\",\n    \"company\": \"Cisco\",\n    \"blog\": \"linkedin.com/in/kitashov\",\n    \"location\": \"San Jose, CA\",\n    \"email\": \"fedor.kitashov!phystech.edu\",\n    \"hireable\": null,\n    \"bio\": \"Junior Computer Vision Research Engineer at Mail.Ru Group.\\r\\nApplied Math and Physics at Moscow Institute of Physics and Technology\",\n    \"public_repos\": 21,\n    \"public_gists\": 0,\n    \"followers\": 9,\n    \"following\": 6,\n    \"created_at\": \"2016-10-21 19:37:28 UTC\",\n    \"updated_at\": \"2019-02-04 16:20:42 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"xyhuang\",\n    \"id\": 5247283,\n    \"node_id\": \"MDQ6VXNlcjUyNDcyODM=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/5247283?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/xyhuang\",\n    \"html_url\": \"https://github.com/xyhuang\",\n    \"followers_url\": \"https://api.github.com/users/xyhuang/followers\",\n    \"following_url\": \"https://api.github.com/users/xyhuang/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/xyhuang/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/xyhuang/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/xyhuang/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/xyhuang/orgs\",\n    \"repos_url\": \"https://api.github.com/users/xyhuang/repos\",\n    \"events_url\": \"https://api.github.com/users/xyhuang/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/xyhuang/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Xinyuan Huang\",\n    \"company\": \"!CiscoAI \",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"huangxy0101!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 20,\n    \"public_gists\": 0,\n    \"followers\": 7,\n    \"following\": 0,\n    \"created_at\": \"2013-08-16 20:40:47 UTC\",\n    \"updated_at\": \"2019-01-18 00:42:57 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"wydwww\",\n    \"id\": 14849130,\n    \"node_id\": \"MDQ6VXNlcjE0ODQ5MTMw\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/14849130?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/wydwww\",\n    \"html_url\": \"https://github.com/wydwww\",\n    \"followers_url\": \"https://api.github.com/users/wydwww/followers\",\n    \"following_url\": \"https://api.github.com/users/wydwww/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/wydwww/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/wydwww/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/wydwww/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/wydwww/orgs\",\n    \"repos_url\": \"https://api.github.com/users/wydwww/repos\",\n    \"events_url\": \"https://api.github.com/users/wydwww/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/wydwww/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"wi\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Hong Kong\",\n    \"email\": \"wydwww!outlook.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 20,\n    \"public_gists\": 2,\n    \"followers\": 33,\n    \"following\": 92,\n    \"created_at\": \"2015-09-26 11:24:15 UTC\",\n    \"updated_at\": \"2019-02-19 10:46:01 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"kow3ns\",\n    \"id\": 11380896,\n    \"node_id\": \"MDQ6VXNlcjExMzgwODk2\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/11380896?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/kow3ns\",\n    \"html_url\": \"https://github.com/kow3ns\",\n    \"followers_url\": \"https://api.github.com/users/kow3ns/followers\",\n    \"following_url\": \"https://api.github.com/users/kow3ns/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/kow3ns/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/kow3ns/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/kow3ns/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/kow3ns/orgs\",\n    \"repos_url\": \"https://api.github.com/users/kow3ns/repos\",\n    \"events_url\": \"https://api.github.com/users/kow3ns/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/kow3ns/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Kenneth Owens\",\n    \"company\": \"Google\",\n    \"blog\": \"\",\n    \"location\": \"San Francisco, CA\",\n    \"email\": \"kowens0826!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 16,\n    \"public_gists\": 0,\n    \"followers\": 66,\n    \"following\": 0,\n    \"created_at\": \"2015-03-08 22:43:21 UTC\",\n    \"updated_at\": \"2019-01-24 19:37:27 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Comcast Cable < 2015-10-01, Mesosphere < 2016-10-01, Google\"\n  },\n  {\n    \"login\": \"suigh\",\n    \"id\": 35104315,\n    \"node_id\": \"MDQ6VXNlcjM1MTA0MzE1\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/35104315?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/suigh\",\n    \"html_url\": \"https://github.com/suigh\",\n    \"followers_url\": \"https://api.github.com/users/suigh/followers\",\n    \"following_url\": \"https://api.github.com/users/suigh/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/suigh/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/suigh/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/suigh/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/suigh/orgs\",\n    \"repos_url\": \"https://api.github.com/users/suigh/repos\",\n    \"events_url\": \"https://api.github.com/users/suigh/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/suigh/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"suigh\",\n    \"company\": \"IBM\",\n    \"blog\": \"\",\n    \"location\": \"Earth\",\n    \"email\": \"suigh!cn.ibm.com\",\n    \"hireable\": null,\n    \"bio\": \"Try to make the world better.\",\n    \"public_repos\": 5,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-01-04 13:45:32 UTC\",\n    \"updated_at\": \"2019-02-18 07:12:58 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"IBM\"\n  },\n  {\n    \"login\": \"doodlesbykumbi\",\n    \"id\": 8653164,\n    \"node_id\": \"MDQ6VXNlcjg2NTMxNjQ=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/8653164?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/doodlesbykumbi\",\n    \"html_url\": \"https://github.com/doodlesbykumbi\",\n    \"followers_url\": \"https://api.github.com/users/doodlesbykumbi/followers\",\n    \"following_url\": \"https://api.github.com/users/doodlesbykumbi/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/doodlesbykumbi/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/doodlesbykumbi/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/doodlesbykumbi/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/doodlesbykumbi/orgs\",\n    \"repos_url\": \"https://api.github.com/users/doodlesbykumbi/repos\",\n    \"events_url\": \"https://api.github.com/users/doodlesbykumbi/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/doodlesbykumbi/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Kumbirai Tanekha\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"kumbirai.tanekha!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 11,\n    \"public_gists\": 8,\n    \"followers\": 6,\n    \"following\": 12,\n    \"created_at\": \"2014-09-04 08:19:47 UTC\",\n    \"updated_at\": \"2019-02-14 04:31:36 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"wangkeqiang123\",\n    \"id\": 26537702,\n    \"node_id\": \"MDQ6VXNlcjI2NTM3NzAy\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/26537702?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/wangkeqiang123\",\n    \"html_url\": \"https://github.com/wangkeqiang123\",\n    \"followers_url\": \"https://api.github.com/users/wangkeqiang123/followers\",\n    \"following_url\": \"https://api.github.com/users/wangkeqiang123/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/wangkeqiang123/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/wangkeqiang123/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/wangkeqiang123/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/wangkeqiang123/orgs\",\n    \"repos_url\": \"https://api.github.com/users/wangkeqiang123/repos\",\n    \"events_url\": \"https://api.github.com/users/wangkeqiang123/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/wangkeqiang123/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Carter Wang\",\n    \"company\": \"zte\",\n    \"blog\": \"\",\n    \"location\": \"shanghai\",\n    \"email\": \"wcocacola!sina.com\",\n    \"hireable\": null,\n    \"bio\": \"focus on kubernetes/kubeflow\",\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 3,\n    \"following\": 4,\n    \"created_at\": \"2017-03-20 07:42:12 UTC\",\n    \"updated_at\": \"2018-12-17 15:59:23 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Sina\"\n  },\n  {\n    \"login\": \"rogaha\",\n    \"id\": 4483394,\n    \"node_id\": \"MDQ6VXNlcjQ0ODMzOTQ=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/4483394?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/rogaha\",\n    \"html_url\": \"https://github.com/rogaha\",\n    \"followers_url\": \"https://api.github.com/users/rogaha/followers\",\n    \"following_url\": \"https://api.github.com/users/rogaha/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/rogaha/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/rogaha/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/rogaha/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/rogaha/orgs\",\n    \"repos_url\": \"https://api.github.com/users/rogaha/repos\",\n    \"events_url\": \"https://api.github.com/users/rogaha/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/rogaha/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Roberto Gandolfo Hashioka\",\n    \"company\": \"Docker, Inc\",\n    \"blog\": \"\",\n    \"location\": \"San Francisco, CA\",\n    \"email\": \"roberto.hashioka!docker.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 80,\n    \"public_gists\": 44,\n    \"followers\": 49,\n    \"following\": 4,\n    \"created_at\": \"2013-05-20 22:13:21 UTC\",\n    \"updated_at\": \"2018-12-14 05:53:08 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Docker\"\n  },\n  {\n    \"login\": \"fdasilva59\",\n    \"id\": 10959153,\n    \"node_id\": \"MDQ6VXNlcjEwOTU5MTUz\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/10959153?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/fdasilva59\",\n    \"html_url\": \"https://github.com/fdasilva59\",\n    \"followers_url\": \"https://api.github.com/users/fdasilva59/followers\",\n    \"following_url\": \"https://api.github.com/users/fdasilva59/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/fdasilva59/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/fdasilva59/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/fdasilva59/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/fdasilva59/orgs\",\n    \"repos_url\": \"https://api.github.com/users/fdasilva59/repos\",\n    \"events_url\": \"https://api.github.com/users/fdasilva59/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/fdasilva59/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Fabien Da Silva\",\n    \"company\": null,\n    \"blog\": \"https://twitter.com/fdasilva59fr\",\n    \"location\": \"Lille, France\",\n    \"email\": \"fdasilva59!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Expert, Manager at Worldline (All views are mine) | #Innovation #AI  #DeepLearning #MachineLearning #DataScience #Tensorflow #Keras #Python\",\n    \"public_repos\": 16,\n    \"public_gists\": 1,\n    \"followers\": 2,\n    \"following\": 4,\n    \"created_at\": \"2015-02-11 13:05:09 UTC\",\n    \"updated_at\": \"2019-01-24 12:10:53 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"connected-bsamadi\",\n    \"id\": 42982115,\n    \"node_id\": \"MDQ6VXNlcjQyOTgyMTE1\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/42982115?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/connected-bsamadi\",\n    \"html_url\": \"https://github.com/connected-bsamadi\",\n    \"followers_url\": \"https://api.github.com/users/connected-bsamadi/followers\",\n    \"following_url\": \"https://api.github.com/users/connected-bsamadi/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/connected-bsamadi/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/connected-bsamadi/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/connected-bsamadi/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/connected-bsamadi/orgs\",\n    \"repos_url\": \"https://api.github.com/users/connected-bsamadi/repos\",\n    \"events_url\": \"https://api.github.com/users/connected-bsamadi/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/connected-bsamadi/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Behzad Samadi\",\n    \"company\": \"!connected-io\",\n    \"blog\": \"http://www.mechatronics3d.com/\",\n    \"location\": \"Toronto\",\n    \"email\": \"42982115+connected-bsamadi!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Research Software Engineer\",\n    \"public_repos\": 11,\n    \"public_gists\": 10,\n    \"followers\": 2,\n    \"following\": 4,\n    \"created_at\": \"2018-09-04 20:43:13 UTC\",\n    \"updated_at\": \"2018-11-12 02:53:41 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"hmizuma\",\n    \"id\": 3846303,\n    \"node_id\": \"MDQ6VXNlcjM4NDYzMDM=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/3846303?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/hmizuma\",\n    \"html_url\": \"https://github.com/hmizuma\",\n    \"followers_url\": \"https://api.github.com/users/hmizuma/followers\",\n    \"following_url\": \"https://api.github.com/users/hmizuma/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/hmizuma/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/hmizuma/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/hmizuma/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/hmizuma/orgs\",\n    \"repos_url\": \"https://api.github.com/users/hmizuma/repos\",\n    \"events_url\": \"https://api.github.com/users/hmizuma/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/hmizuma/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"hiroki.mizuma!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 5,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2013-03-12 19:26:52 UTC\",\n    \"updated_at\": \"2018-12-07 01:28:44 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"pvsousalima\",\n    \"id\": 1810178,\n    \"node_id\": \"MDQ6VXNlcjE4MTAxNzg=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1810178?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/pvsousalima\",\n    \"html_url\": \"https://github.com/pvsousalima\",\n    \"followers_url\": \"https://api.github.com/users/pvsousalima/followers\",\n    \"following_url\": \"https://api.github.com/users/pvsousalima/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/pvsousalima/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/pvsousalima/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/pvsousalima/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/pvsousalima/orgs\",\n    \"repos_url\": \"https://api.github.com/users/pvsousalima/repos\",\n    \"events_url\": \"https://api.github.com/users/pvsousalima/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/pvsousalima/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Pedro Victor de Sousa Lima\",\n    \"company\": null,\n    \"blog\": \"github.com/pvsousalima\",\n    \"location\": null,\n    \"email\": \"pvsousalima!gmail.com\",\n    \"hireable\": true,\n    \"bio\": \"Backend Developer\",\n    \"public_repos\": 38,\n    \"public_gists\": 18,\n    \"followers\": 35,\n    \"following\": 33,\n    \"created_at\": \"2012-06-02 16:45:48 UTC\",\n    \"updated_at\": \"2019-02-11 02:53:23 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"gindeleo\",\n    \"id\": 17741889,\n    \"node_id\": \"MDQ6VXNlcjE3NzQxODg5\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/17741889?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/gindeleo\",\n    \"html_url\": \"https://github.com/gindeleo\",\n    \"followers_url\": \"https://api.github.com/users/gindeleo/followers\",\n    \"following_url\": \"https://api.github.com/users/gindeleo/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/gindeleo/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/gindeleo/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/gindeleo/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/gindeleo/orgs\",\n    \"repos_url\": \"https://api.github.com/users/gindeleo/repos\",\n    \"events_url\": \"https://api.github.com/users/gindeleo/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/gindeleo/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Oliver Gindele\",\n    \"company\": \"Datatonic\",\n    \"blog\": \"\",\n    \"location\": \"London\",\n    \"email\": \"schindler3333!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 7,\n    \"public_gists\": 0,\n    \"followers\": 4,\n    \"following\": 2,\n    \"created_at\": \"2016-03-09 10:37:52 UTC\",\n    \"updated_at\": \"2019-01-25 15:56:28 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"fyuan1316\",\n    \"id\": 42265657,\n    \"node_id\": \"MDQ6VXNlcjQyMjY1NjU3\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/42265657?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/fyuan1316\",\n    \"html_url\": \"https://github.com/fyuan1316\",\n    \"followers_url\": \"https://api.github.com/users/fyuan1316/followers\",\n    \"following_url\": \"https://api.github.com/users/fyuan1316/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/fyuan1316/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/fyuan1316/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/fyuan1316/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/fyuan1316/orgs\",\n    \"repos_url\": \"https://api.github.com/users/fyuan1316/repos\",\n    \"events_url\": \"https://api.github.com/users/fyuan1316/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/fyuan1316/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"fyuan1316\",\n    \"company\": \"alauda.io\",\n    \"blog\": \"\",\n    \"location\": \"beijing, china\",\n    \"email\": \"yuanfang!alauda.io\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 11,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-08-10 08:04:07 UTC\",\n    \"updated_at\": \"2019-02-01 03:06:39 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"pymia\",\n    \"id\": 3637352,\n    \"node_id\": \"MDQ6VXNlcjM2MzczNTI=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/3637352?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/pymia\",\n    \"html_url\": \"https://github.com/pymia\",\n    \"followers_url\": \"https://api.github.com/users/pymia/followers\",\n    \"following_url\": \"https://api.github.com/users/pymia/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/pymia/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/pymia/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/pymia/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/pymia/orgs\",\n    \"repos_url\": \"https://api.github.com/users/pymia/repos\",\n    \"events_url\": \"https://api.github.com/users/pymia/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/pymia/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Mia // Huai-Wen Chang\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"mia5419!gmail.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 56,\n    \"public_gists\": 0,\n    \"followers\": 18,\n    \"following\": 31,\n    \"created_at\": \"2013-02-19 13:59:49 UTC\",\n    \"updated_at\": \"2019-02-08 10:28:45 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"jainprachi2506\",\n    \"id\": 7157450,\n    \"node_id\": \"MDQ6VXNlcjcxNTc0NTA=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/7157450?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jainprachi2506\",\n    \"html_url\": \"https://github.com/jainprachi2506\",\n    \"followers_url\": \"https://api.github.com/users/jainprachi2506/followers\",\n    \"following_url\": \"https://api.github.com/users/jainprachi2506/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jainprachi2506/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jainprachi2506/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jainprachi2506/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jainprachi2506/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jainprachi2506/repos\",\n    \"events_url\": \"https://api.github.com/users/jainprachi2506/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jainprachi2506/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Prachi Jain\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"jainprachi.55!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 5,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2014-04-04 01:40:18 UTC\",\n    \"updated_at\": \"2018-12-21 02:43:50 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"idealhack\",\n    \"id\": 408385,\n    \"node_id\": \"MDQ6VXNlcjQwODM4NQ==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/408385?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/idealhack\",\n    \"html_url\": \"https://github.com/idealhack\",\n    \"followers_url\": \"https://api.github.com/users/idealhack/followers\",\n    \"following_url\": \"https://api.github.com/users/idealhack/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/idealhack/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/idealhack/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/idealhack/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/idealhack/orgs\",\n    \"repos_url\": \"https://api.github.com/users/idealhack/repos\",\n    \"events_url\": \"https://api.github.com/users/idealhack/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/idealhack/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Yang Li\",\n    \"company\": null,\n    \"blog\": \"https://idealhack.com/about\",\n    \"location\": \"Hangzhou, China\",\n    \"email\": \"idealhack!gmail.com\",\n    \"hireable\": true,\n    \"bio\": \"working on @kubernetes and @theplant, English/Chinese, he/him\",\n    \"public_repos\": 58,\n    \"public_gists\": 16,\n    \"followers\": 104,\n    \"following\": 50,\n    \"created_at\": \"2010-09-20 14:20:34 UTC\",\n    \"updated_at\": \"2019-02-13 16:09:31 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"idealhack\"\n  },\n  {\n    \"login\": \"theofpa\",\n    \"id\": 668063,\n    \"node_id\": \"MDQ6VXNlcjY2ODA2Mw==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/668063?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/theofpa\",\n    \"html_url\": \"https://github.com/theofpa\",\n    \"followers_url\": \"https://api.github.com/users/theofpa/followers\",\n    \"following_url\": \"https://api.github.com/users/theofpa/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/theofpa/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/theofpa/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/theofpa/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/theofpa/orgs\",\n    \"repos_url\": \"https://api.github.com/users/theofpa/repos\",\n    \"events_url\": \"https://api.github.com/users/theofpa/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/theofpa/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Theofilos Papapanagiotou\",\n    \"company\": null,\n    \"blog\": \"http://theofpa.github.io\",\n    \"location\": \"Amsterdam, Netherlands\",\n    \"email\": \"theofilos!ieee.org\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 66,\n    \"public_gists\": 3,\n    \"followers\": 57,\n    \"following\": 42,\n    \"created_at\": \"2011-03-14 06:51:03 UTC\",\n    \"updated_at\": \"2019-02-13 15:26:53 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"IEEE\"\n  },\n  {\n    \"login\": \"suneeta-mall\",\n    \"id\": 25972660,\n    \"node_id\": \"MDQ6VXNlcjI1OTcyNjYw\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/25972660?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/suneeta-mall\",\n    \"html_url\": \"https://github.com/suneeta-mall\",\n    \"followers_url\": \"https://api.github.com/users/suneeta-mall/followers\",\n    \"following_url\": \"https://api.github.com/users/suneeta-mall/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/suneeta-mall/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/suneeta-mall/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/suneeta-mall/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/suneeta-mall/orgs\",\n    \"repos_url\": \"https://api.github.com/users/suneeta-mall/repos\",\n    \"events_url\": \"https://api.github.com/users/suneeta-mall/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/suneeta-mall/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Suneeta Mall\",\n    \"company\": \"!nearmap \",\n    \"blog\": \"\",\n    \"location\": \"Sydney\",\n    \"email\": \"suneeta.mall!nearmap.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 19,\n    \"public_gists\": 1,\n    \"followers\": 0,\n    \"following\": 1,\n    \"created_at\": \"2017-02-23 05:23:23 UTC\",\n    \"updated_at\": \"2019-01-21 01:11:45 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"parano\",\n    \"id\": 489344,\n    \"node_id\": \"MDQ6VXNlcjQ4OTM0NA==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/489344?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/parano\",\n    \"html_url\": \"https://github.com/parano\",\n    \"followers_url\": \"https://api.github.com/users/parano/followers\",\n    \"following_url\": \"https://api.github.com/users/parano/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/parano/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/parano/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/parano/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/parano/orgs\",\n    \"repos_url\": \"https://api.github.com/users/parano/repos\",\n    \"events_url\": \"https://api.github.com/users/parano/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/parano/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Chaoyu\",\n    \"company\": null,\n    \"blog\": \"https://www.linkedin.com/in/parano\",\n    \"location\": \"San Francisco, CA\",\n    \"email\": \"paranoyang!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"Co-founder at @atalaya-io - Product Design, Machine Learning and everything in between. Previously @databricks, @uwmhcid\\r\\n\",\n    \"public_repos\": 21,\n    \"public_gists\": 16,\n    \"followers\": 141,\n    \"following\": 53,\n    \"created_at\": \"2010-11-20 04:07:09 UTC\",\n    \"updated_at\": \"2019-02-19 08:34:24 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"ykevinc\",\n    \"id\": 1500936,\n    \"node_id\": \"MDQ6VXNlcjE1MDA5MzY=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/1500936?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ykevinc\",\n    \"html_url\": \"https://github.com/ykevinc\",\n    \"followers_url\": \"https://api.github.com/users/ykevinc/followers\",\n    \"following_url\": \"https://api.github.com/users/ykevinc/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ykevinc/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ykevinc/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ykevinc/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ykevinc/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ykevinc/repos\",\n    \"events_url\": \"https://api.github.com/users/ykevinc/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ykevinc/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"San Francisco, CA\",\n    \"email\": \"ykevinc!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 20,\n    \"public_gists\": 0,\n    \"followers\": 5,\n    \"following\": 7,\n    \"created_at\": \"2012-03-05 00:33:38 UTC\",\n    \"updated_at\": \"2019-02-19 19:32:09 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"ogre0403\",\n    \"id\": 9261760,\n    \"node_id\": \"MDQ6VXNlcjkyNjE3NjA=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/9261760?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ogre0403\",\n    \"html_url\": \"https://github.com/ogre0403\",\n    \"followers_url\": \"https://api.github.com/users/ogre0403/followers\",\n    \"following_url\": \"https://api.github.com/users/ogre0403/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ogre0403/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ogre0403/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ogre0403/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ogre0403/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ogre0403/repos\",\n    \"events_url\": \"https://api.github.com/users/ogre0403/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ogre0403/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ogre0403!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 83,\n    \"public_gists\": 3,\n    \"followers\": 23,\n    \"following\": 3,\n    \"created_at\": \"2014-10-16 03:53:20 UTC\",\n    \"updated_at\": \"2018-12-17 07:19:02 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"gangliao\",\n    \"id\": 3071933,\n    \"node_id\": \"MDQ6VXNlcjMwNzE5MzM=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/3071933?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/gangliao\",\n    \"html_url\": \"https://github.com/gangliao\",\n    \"followers_url\": \"https://api.github.com/users/gangliao/followers\",\n    \"following_url\": \"https://api.github.com/users/gangliao/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/gangliao/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/gangliao/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/gangliao/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/gangliao/orgs\",\n    \"repos_url\": \"https://api.github.com/users/gangliao/repos\",\n    \"events_url\": \"https://api.github.com/users/gangliao/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/gangliao/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"gangliao.me\",\n    \"location\": \"College Park, MD\",\n    \"email\": \"gangliao!gatech.edu\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 48,\n    \"public_gists\": 18,\n    \"followers\": 104,\n    \"following\": 2,\n    \"created_at\": \"2012-12-18 12:12:56 UTC\",\n    \"updated_at\": \"2019-02-11 15:39:03 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"jmsmkn\",\n    \"id\": 12661555,\n    \"node_id\": \"MDQ6VXNlcjEyNjYxNTU1\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/12661555?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jmsmkn\",\n    \"html_url\": \"https://github.com/jmsmkn\",\n    \"followers_url\": \"https://api.github.com/users/jmsmkn/followers\",\n    \"following_url\": \"https://api.github.com/users/jmsmkn/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jmsmkn/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jmsmkn/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jmsmkn/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jmsmkn/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jmsmkn/repos\",\n    \"events_url\": \"https://api.github.com/users/jmsmkn/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jmsmkn/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"James\",\n    \"company\": \"!DIAGNijmegen \",\n    \"blog\": \"https://www.jmsmkn.com\",\n    \"location\": \"The Netherlands\",\n    \"email\": \"jamesmeakin!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 25,\n    \"public_gists\": 0,\n    \"followers\": 3,\n    \"following\": 3,\n    \"created_at\": \"2015-05-29 15:23:17 UTC\",\n    \"updated_at\": \"2019-01-21 19:38:21 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"abkosar\",\n    \"id\": 18401396,\n    \"node_id\": \"MDQ6VXNlcjE4NDAxMzk2\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/18401396?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/abkosar\",\n    \"html_url\": \"https://github.com/abkosar\",\n    \"followers_url\": \"https://api.github.com/users/abkosar/followers\",\n    \"following_url\": \"https://api.github.com/users/abkosar/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/abkosar/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/abkosar/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/abkosar/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/abkosar/orgs\",\n    \"repos_url\": \"https://api.github.com/users/abkosar/repos\",\n    \"events_url\": \"https://api.github.com/users/abkosar/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/abkosar/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Arda Kosar\",\n    \"company\": \"Publicis Worldwide\",\n    \"blog\": \"nycdatascience.com/blog/author/ardakosar\",\n    \"location\": \"New York, NY\",\n    \"email\": \"berkaykosar!sabanciuniv.edu\",\n    \"hireable\": true,\n    \"bio\": \"I am a Senior Data Scientist at Publicis Worldwide. I am a continuous learner and a machine learning enthusiast. \",\n    \"public_repos\": 10,\n    \"public_gists\": 1,\n    \"followers\": 3,\n    \"following\": 7,\n    \"created_at\": \"2016-04-11 15:28:34 UTC\",\n    \"updated_at\": \"2019-02-09 04:45:14 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"mattf\",\n    \"id\": 112653,\n    \"node_id\": \"MDQ6VXNlcjExMjY1Mw==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/112653?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mattf\",\n    \"html_url\": \"https://github.com/mattf\",\n    \"followers_url\": \"https://api.github.com/users/mattf/followers\",\n    \"following_url\": \"https://api.github.com/users/mattf/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mattf/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mattf/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mattf/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mattf/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mattf/repos\",\n    \"events_url\": \"https://api.github.com/users/mattf/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mattf/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Matthew Farrellee\",\n    \"company\": null,\n    \"blog\": \"http://spinningmatt.wordpress.com/\",\n    \"location\": null,\n    \"email\": \"matt!redhat.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 62,\n    \"public_gists\": 21,\n    \"followers\": 26,\n    \"following\": 0,\n    \"created_at\": \"2009-08-06 19:39:42 UTC\",\n    \"updated_at\": \"2018-12-18 13:17:05 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Red Hat\"\n  },\n  {\n    \"login\": \"jonas\",\n    \"id\": 8417,\n    \"node_id\": \"MDQ6VXNlcjg0MTc=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/8417?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jonas\",\n    \"html_url\": \"https://github.com/jonas\",\n    \"followers_url\": \"https://api.github.com/users/jonas/followers\",\n    \"following_url\": \"https://api.github.com/users/jonas/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jonas/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jonas/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jonas/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jonas/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jonas/repos\",\n    \"events_url\": \"https://api.github.com/users/jonas/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jonas/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jonas Fonseca\",\n    \"company\": \"!ElementAI \",\n    \"blog\": \"\",\n    \"location\": \"Montréal\",\n    \"email\": \"jonas.fonseca!gmail.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 105,\n    \"public_gists\": 17,\n    \"followers\": 186,\n    \"following\": 9,\n    \"created_at\": \"2008-04-24 22:25:34 UTC\",\n    \"updated_at\": \"2019-01-21 15:26:03 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Mediative\"\n  },\n  {\n    \"login\": \"s1113950\",\n    \"id\": 8314343,\n    \"node_id\": \"MDQ6VXNlcjgzMTQzNDM=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/8314343?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/s1113950\",\n    \"html_url\": \"https://github.com/s1113950\",\n    \"followers_url\": \"https://api.github.com/users/s1113950/followers\",\n    \"following_url\": \"https://api.github.com/users/s1113950/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/s1113950/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/s1113950/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/s1113950/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/s1113950/orgs\",\n    \"repos_url\": \"https://api.github.com/users/s1113950/repos\",\n    \"events_url\": \"https://api.github.com/users/s1113950/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/s1113950/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Steven Robertson\",\n    \"company\": \"!IntelAI @NervanaSystems \",\n    \"blog\": \"\",\n    \"location\": \"San Diego\",\n    \"email\": \"srtrumpetaggie!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"Engineer at IntelAI (formerly Nervana)\",\n    \"public_repos\": 12,\n    \"public_gists\": 3,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2014-07-30 21:44:06 UTC\",\n    \"updated_at\": \"2019-01-10 00:41:42 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"sfabel\",\n    \"id\": 1530330,\n    \"node_id\": \"MDQ6VXNlcjE1MzAzMzA=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1530330?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/sfabel\",\n    \"html_url\": \"https://github.com/sfabel\",\n    \"followers_url\": \"https://api.github.com/users/sfabel/followers\",\n    \"following_url\": \"https://api.github.com/users/sfabel/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/sfabel/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/sfabel/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/sfabel/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/sfabel/orgs\",\n    \"repos_url\": \"https://api.github.com/users/sfabel/repos\",\n    \"events_url\": \"https://api.github.com/users/sfabel/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/sfabel/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Stephan Fabel\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"stephan.fabel!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 12,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2012-03-12 19:55:24 UTC\",\n    \"updated_at\": \"2019-01-15 20:30:17 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"dogopupper\",\n    \"id\": 32516090,\n    \"node_id\": \"MDQ6VXNlcjMyNTE2MDkw\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/32516090?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dogopupper\",\n    \"html_url\": \"https://github.com/dogopupper\",\n    \"followers_url\": \"https://api.github.com/users/dogopupper/followers\",\n    \"following_url\": \"https://api.github.com/users/dogopupper/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dogopupper/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dogopupper/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dogopupper/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dogopupper/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dogopupper/repos\",\n    \"events_url\": \"https://api.github.com/users/dogopupper/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dogopupper/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"32516090+dogopupper!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"arf\",\n    \"public_repos\": 30,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 4,\n    \"created_at\": \"2017-10-04 13:30:57 UTC\",\n    \"updated_at\": \"2019-01-11 02:10:27 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"barney-s\",\n    \"id\": 6457279,\n    \"node_id\": \"MDQ6VXNlcjY0NTcyNzk=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/6457279?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/barney-s\",\n    \"html_url\": \"https://github.com/barney-s\",\n    \"followers_url\": \"https://api.github.com/users/barney-s/followers\",\n    \"following_url\": \"https://api.github.com/users/barney-s/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/barney-s/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/barney-s/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/barney-s/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/barney-s/orgs\",\n    \"repos_url\": \"https://api.github.com/users/barney-s/repos\",\n    \"events_url\": \"https://api.github.com/users/barney-s/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/barney-s/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"bharanidharan!me.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 40,\n    \"public_gists\": 1,\n    \"followers\": 20,\n    \"following\": 0,\n    \"created_at\": \"2014-01-21 05:27:41 UTC\",\n    \"updated_at\": \"2019-02-07 06:36:12 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Apple\"\n  },\n  {\n    \"login\": \"genome21\",\n    \"id\": 1147229,\n    \"node_id\": \"MDQ6VXNlcjExNDcyMjk=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/1147229?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/genome21\",\n    \"html_url\": \"https://github.com/genome21\",\n    \"followers_url\": \"https://api.github.com/users/genome21/followers\",\n    \"following_url\": \"https://api.github.com/users/genome21/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/genome21/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/genome21/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/genome21/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/genome21/orgs\",\n    \"repos_url\": \"https://api.github.com/users/genome21/repos\",\n    \"events_url\": \"https://api.github.com/users/genome21/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/genome21/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Robert Wilkins III\",\n    \"company\": null,\n    \"blog\": \"www.linkedin.com/in/robertwilkinsiii\",\n    \"location\": \"Oklahoma City, OK, US\",\n    \"email\": \"1147229+genome21!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 54,\n    \"public_gists\": 2,\n    \"followers\": 7,\n    \"following\": 23,\n    \"created_at\": \"2011-10-24 01:52:04 UTC\",\n    \"updated_at\": \"2019-01-25 15:26:56 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"pmangg\",\n    \"id\": 270844,\n    \"node_id\": \"MDQ6VXNlcjI3MDg0NA==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/270844?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/pmangg\",\n    \"html_url\": \"https://github.com/pmangg\",\n    \"followers_url\": \"https://api.github.com/users/pmangg/followers\",\n    \"following_url\": \"https://api.github.com/users/pmangg/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/pmangg/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/pmangg/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/pmangg/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/pmangg/orgs\",\n    \"repos_url\": \"https://api.github.com/users/pmangg/repos\",\n    \"events_url\": \"https://api.github.com/users/pmangg/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/pmangg/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Putra Manggala\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Montreal, Canada\",\n    \"email\": \"pmangg!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 125,\n    \"public_gists\": 5,\n    \"followers\": 24,\n    \"following\": 26,\n    \"created_at\": \"2010-05-07 23:09:12 UTC\",\n    \"updated_at\": \"2019-02-02 22:04:26 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"amitkumarj441\",\n    \"id\": 14039450,\n    \"node_id\": \"MDQ6VXNlcjE0MDM5NDUw\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/14039450?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/amitkumarj441\",\n    \"html_url\": \"https://github.com/amitkumarj441\",\n    \"followers_url\": \"https://api.github.com/users/amitkumarj441/followers\",\n    \"following_url\": \"https://api.github.com/users/amitkumarj441/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/amitkumarj441/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/amitkumarj441/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/amitkumarj441/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/amitkumarj441/orgs\",\n    \"repos_url\": \"https://api.github.com/users/amitkumarj441/repos\",\n    \"events_url\": \"https://api.github.com/users/amitkumarj441/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/amitkumarj441/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Amit Kumar Jaiswal\",\n    \"company\": \"University of Bedfordshire\",\n    \"blog\": \"http://amitkumarj441.github.io\",\n    \"location\": \"London, England\",\n    \"email\": \"amitkumarj441!gmail.com\",\n    \"hireable\": true,\n    \"bio\": \"PhD Researcher @ University of Bedfordshire | @Kaggle Competitions Expert\",\n    \"public_repos\": 428,\n    \"public_gists\": 29,\n    \"followers\": 137,\n    \"following\": 77,\n    \"created_at\": \"2015-08-30 10:22:23 UTC\",\n    \"updated_at\": \"2019-02-16 14:43:10 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Wipro\"\n  },\n  {\n    \"login\": \"darthsuogles\",\n    \"id\": 499458,\n    \"node_id\": \"MDQ6VXNlcjQ5OTQ1OA==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/499458?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/darthsuogles\",\n    \"html_url\": \"https://github.com/darthsuogles\",\n    \"followers_url\": \"https://api.github.com/users/darthsuogles/followers\",\n    \"following_url\": \"https://api.github.com/users/darthsuogles/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/darthsuogles/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/darthsuogles/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/darthsuogles/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/darthsuogles/orgs\",\n    \"repos_url\": \"https://api.github.com/users/darthsuogles/repos\",\n    \"events_url\": \"https://api.github.com/users/darthsuogles/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/darthsuogles/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Philip Yang\",\n    \"company\": \"!phissenschaft\",\n    \"blog\": \"\",\n    \"location\": \"San Francisco Bay Area\",\n    \"email\": \"darthsuogles!gmail.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 75,\n    \"public_gists\": 23,\n    \"followers\": 19,\n    \"following\": 55,\n    \"created_at\": \"2010-11-27 22:22:08 UTC\",\n    \"updated_at\": \"2018-12-10 02:05:13 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"dimpavloff\",\n    \"id\": 1078697,\n    \"node_id\": \"MDQ6VXNlcjEwNzg2OTc=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1078697?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dimpavloff\",\n    \"html_url\": \"https://github.com/dimpavloff\",\n    \"followers_url\": \"https://api.github.com/users/dimpavloff/followers\",\n    \"following_url\": \"https://api.github.com/users/dimpavloff/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dimpavloff/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dimpavloff/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dimpavloff/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dimpavloff/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dimpavloff/repos\",\n    \"events_url\": \"https://api.github.com/users/dimpavloff/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dimpavloff/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Dimitar\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"dimpavloff!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 10,\n    \"public_gists\": 0,\n    \"followers\": 7,\n    \"following\": 9,\n    \"created_at\": \"2011-09-25 18:50:20 UTC\",\n    \"updated_at\": \"2018-07-30 19:09:09 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"yue9944882\",\n    \"id\": 12049380,\n    \"node_id\": \"MDQ6VXNlcjEyMDQ5Mzgw\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/12049380?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/yue9944882\",\n    \"html_url\": \"https://github.com/yue9944882\",\n    \"followers_url\": \"https://api.github.com/users/yue9944882/followers\",\n    \"following_url\": \"https://api.github.com/users/yue9944882/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/yue9944882/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/yue9944882/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/yue9944882/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/yue9944882/orgs\",\n    \"repos_url\": \"https://api.github.com/users/yue9944882/repos\",\n    \"events_url\": \"https://api.github.com/users/yue9944882/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/yue9944882/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Kim Min\",\n    \"company\": \"!alipay\",\n    \"blog\": \"\",\n    \"location\": \"Shanghai\",\n    \"email\": \"291271447!qq.com\",\n    \"hireable\": true,\n    \"bio\": \"Meow\",\n    \"public_repos\": 68,\n    \"public_gists\": 4,\n    \"followers\": 92,\n    \"following\": 31,\n    \"created_at\": \"2015-04-21 11:17:19 UTC\",\n    \"updated_at\": \"2019-02-11 17:16:44 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Independent < 2015-11-01, Ctrip.com < 2016-05-01, Microsoft < 2016-11-01, Xiaohongshu < 2018-06-01, Ant Financial\"\n  },\n  {\n    \"login\": \"iankoulski\",\n    \"id\": 5885177,\n    \"node_id\": \"MDQ6VXNlcjU4ODUxNzc=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/5885177?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/iankoulski\",\n    \"html_url\": \"https://github.com/iankoulski\",\n    \"followers_url\": \"https://api.github.com/users/iankoulski/followers\",\n    \"following_url\": \"https://api.github.com/users/iankoulski/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/iankoulski/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/iankoulski/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/iankoulski/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/iankoulski/orgs\",\n    \"repos_url\": \"https://api.github.com/users/iankoulski/repos\",\n    \"events_url\": \"https://api.github.com/users/iankoulski/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/iankoulski/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Alex Iankoulski\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"alex_iankoulski!yahoo.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 20,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2013-11-08 03:33:39 UTC\",\n    \"updated_at\": \"2019-02-19 19:28:35 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"philtremblay\",\n    \"id\": 6697943,\n    \"node_id\": \"MDQ6VXNlcjY2OTc5NDM=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/6697943?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/philtremblay\",\n    \"html_url\": \"https://github.com/philtremblay\",\n    \"followers_url\": \"https://api.github.com/users/philtremblay/followers\",\n    \"following_url\": \"https://api.github.com/users/philtremblay/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/philtremblay/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/philtremblay/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/philtremblay/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/philtremblay/orgs\",\n    \"repos_url\": \"https://api.github.com/users/philtremblay/repos\",\n    \"events_url\": \"https://api.github.com/users/philtremblay/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/philtremblay/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Phil Tremblay\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ptremblay!cloudops.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 25,\n    \"public_gists\": 0,\n    \"followers\": 4,\n    \"following\": 9,\n    \"created_at\": \"2014-02-16 18:07:38 UTC\",\n    \"updated_at\": \"2019-02-09 21:56:05 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"tnthornton\",\n    \"id\": 2375126,\n    \"node_id\": \"MDQ6VXNlcjIzNzUxMjY=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/2375126?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/tnthornton\",\n    \"html_url\": \"https://github.com/tnthornton\",\n    \"followers_url\": \"https://api.github.com/users/tnthornton/followers\",\n    \"following_url\": \"https://api.github.com/users/tnthornton/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/tnthornton/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/tnthornton/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/tnthornton/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/tnthornton/orgs\",\n    \"repos_url\": \"https://api.github.com/users/tnthornton/repos\",\n    \"events_url\": \"https://api.github.com/users/tnthornton/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/tnthornton/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Taylor Thornton\",\n    \"company\": \"!puppetlabs \",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"thornton.tn!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 8,\n    \"public_gists\": 1,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2012-09-19 02:21:19 UTC\",\n    \"updated_at\": \"2019-01-19 03:25:13 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"pbrzostowski\",\n    \"id\": 5380912,\n    \"node_id\": \"MDQ6VXNlcjUzODA5MTI=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/5380912?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/pbrzostowski\",\n    \"html_url\": \"https://github.com/pbrzostowski\",\n    \"followers_url\": \"https://api.github.com/users/pbrzostowski/followers\",\n    \"following_url\": \"https://api.github.com/users/pbrzostowski/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/pbrzostowski/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/pbrzostowski/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/pbrzostowski/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/pbrzostowski/orgs\",\n    \"repos_url\": \"https://api.github.com/users/pbrzostowski/repos\",\n    \"events_url\": \"https://api.github.com/users/pbrzostowski/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/pbrzostowski/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Poland, Warsaw\",\n    \"email\": \"5380912+pbrzostowski!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 7,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 2,\n    \"created_at\": \"2013-09-04 09:56:11 UTC\",\n    \"updated_at\": \"2018-12-18 08:41:47 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"agemocui\",\n    \"id\": 950785,\n    \"node_id\": \"MDQ6VXNlcjk1MDc4NQ==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/950785?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/agemocui\",\n    \"html_url\": \"https://github.com/agemocui\",\n    \"followers_url\": \"https://api.github.com/users/agemocui/followers\",\n    \"following_url\": \"https://api.github.com/users/agemocui/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/agemocui/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/agemocui/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/agemocui/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/agemocui/orgs\",\n    \"repos_url\": \"https://api.github.com/users/agemocui/repos\",\n    \"events_url\": \"https://api.github.com/users/agemocui/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/agemocui/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Agemo Cui\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"agemocui!qq.com\",\n    \"hireable\": null,\n    \"bio\": \"The sky is the limit.\",\n    \"public_repos\": 4,\n    \"public_gists\": 1,\n    \"followers\": 8,\n    \"following\": 6,\n    \"created_at\": \"2011-08-01 02:23:23 UTC\",\n    \"updated_at\": \"2019-02-04 00:48:59 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"jcastill\",\n    \"id\": 1980307,\n    \"node_id\": \"MDQ6VXNlcjE5ODAzMDc=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1980307?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jcastill\",\n    \"html_url\": \"https://github.com/jcastill\",\n    \"followers_url\": \"https://api.github.com/users/jcastill/followers\",\n    \"following_url\": \"https://api.github.com/users/jcastill/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jcastill/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jcastill/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jcastill/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jcastill/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jcastill/repos\",\n    \"events_url\": \"https://api.github.com/users/jcastill/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jcastill/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jose Castillo\",\n    \"company\": \"Red Hat\",\n    \"blog\": \"\",\n    \"location\": \"London\",\n    \"email\": \"jose.mfcastillo!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 11,\n    \"public_gists\": 0,\n    \"followers\": 4,\n    \"following\": 4,\n    \"created_at\": \"2012-07-15 19:56:14 UTC\",\n    \"updated_at\": \"2019-02-20 07:32:52 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"lakshmanok\",\n    \"id\": 1742823,\n    \"node_id\": \"MDQ6VXNlcjE3NDI4MjM=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/1742823?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/lakshmanok\",\n    \"html_url\": \"https://github.com/lakshmanok\",\n    \"followers_url\": \"https://api.github.com/users/lakshmanok/followers\",\n    \"following_url\": \"https://api.github.com/users/lakshmanok/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/lakshmanok/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/lakshmanok/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/lakshmanok/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/lakshmanok/orgs\",\n    \"repos_url\": \"https://api.github.com/users/lakshmanok/repos\",\n    \"events_url\": \"https://api.github.com/users/lakshmanok/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/lakshmanok/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"A4q5PMrDW1d+vkfDYmdoLZOcKFKhZHgRZazKmBiqgKE=\",\n    \"company\": \"!google \",\n    \"blog\": \"http://www.vlakshman.com/\",\n    \"location\": \"Seattle, WA\",\n    \"email\": \"lak!vlakshman.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 17,\n    \"public_gists\": 29,\n    \"followers\": 122,\n    \"following\": 0,\n    \"created_at\": \"2012-05-15 16:17:45 UTC\",\n    \"updated_at\": \"2019-01-11 21:22:27 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"Ark-kun\",\n    \"id\": 1829149,\n    \"node_id\": \"MDQ6VXNlcjE4MjkxNDk=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1829149?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Ark-kun\",\n    \"html_url\": \"https://github.com/Ark-kun\",\n    \"followers_url\": \"https://api.github.com/users/Ark-kun/followers\",\n    \"following_url\": \"https://api.github.com/users/Ark-kun/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Ark-kun/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Ark-kun/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Ark-kun/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Ark-kun/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Ark-kun/repos\",\n    \"events_url\": \"https://api.github.com/users/Ark-kun/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Ark-kun/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Alexey Volkov\",\n    \"company\": \"!google\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"avolkov!google.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 26,\n    \"public_gists\": 4,\n    \"followers\": 10,\n    \"following\": 6,\n    \"created_at\": \"2012-06-08 02:41:47 UTC\",\n    \"updated_at\": \"2019-02-11 15:34:52 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"ohmystack\",\n    \"id\": 2697228,\n    \"node_id\": \"MDQ6VXNlcjI2OTcyMjg=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/2697228?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ohmystack\",\n    \"html_url\": \"https://github.com/ohmystack\",\n    \"followers_url\": \"https://api.github.com/users/ohmystack/followers\",\n    \"following_url\": \"https://api.github.com/users/ohmystack/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ohmystack/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ohmystack/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ohmystack/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ohmystack/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ohmystack/repos\",\n    \"events_url\": \"https://api.github.com/users/ohmystack/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ohmystack/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"JiangJun\",\n    \"company\": \"!alipay\",\n    \"blog\": \"http://ohmystack.com\",\n    \"location\": \"Hangzhou, China\",\n    \"email\": \"jiangjun1990!gmail.com\",\n    \"hireable\": true,\n    \"bio\": \"Kubernetes, TensorFlow, OpenStack\",\n    \"public_repos\": 26,\n    \"public_gists\": 15,\n    \"followers\": 86,\n    \"following\": 44,\n    \"created_at\": \"2012-11-01 07:57:28 UTC\",\n    \"updated_at\": \"2019-02-07 07:52:26 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"eleme\"\n  },\n  {\n    \"login\": \"elviraux\",\n    \"id\": 5718779,\n    \"node_id\": \"MDQ6VXNlcjU3MTg3Nzk=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/5718779?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/elviraux\",\n    \"html_url\": \"https://github.com/elviraux\",\n    \"followers_url\": \"https://api.github.com/users/elviraux/followers\",\n    \"following_url\": \"https://api.github.com/users/elviraux/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/elviraux/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/elviraux/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/elviraux/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/elviraux/orgs\",\n    \"repos_url\": \"https://api.github.com/users/elviraux/repos\",\n    \"events_url\": \"https://api.github.com/users/elviraux/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/elviraux/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Elvira\",\n    \"company\": \"Cisco\",\n    \"blog\": \"elviraux.github.io\",\n    \"location\": \"SF Bay Area\",\n    \"email\": \"edzhurae!cisco.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 24,\n    \"public_gists\": 1,\n    \"followers\": 13,\n    \"following\": 9,\n    \"created_at\": \"2013-10-18 14:05:06 UTC\",\n    \"updated_at\": \"2019-01-17 17:31:13 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Cisco\"\n  },\n  {\n    \"login\": \"animeshsingh\",\n    \"id\": 3631320,\n    \"node_id\": \"MDQ6VXNlcjM2MzEzMjA=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/3631320?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/animeshsingh\",\n    \"html_url\": \"https://github.com/animeshsingh\",\n    \"followers_url\": \"https://api.github.com/users/animeshsingh/followers\",\n    \"following_url\": \"https://api.github.com/users/animeshsingh/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/animeshsingh/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/animeshsingh/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/animeshsingh/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/animeshsingh/orgs\",\n    \"repos_url\": \"https://api.github.com/users/animeshsingh/repos\",\n    \"events_url\": \"https://api.github.com/users/animeshsingh/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/animeshsingh/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Animesh Singh\",\n    \"company\": null,\n    \"blog\": \"https://twitter.com/AnimeshSingh\",\n    \"location\": null,\n    \"email\": \"singhan!us.ibm.com\",\n    \"hireable\": null,\n    \"bio\": \"IBMer, Artificial Intelligence, Machine Learning, Deep Learning, Kubernetes, Istio, Serverless\",\n    \"public_repos\": 33,\n    \"public_gists\": 0,\n    \"followers\": 31,\n    \"following\": 15,\n    \"created_at\": \"2013-02-18 23:31:46 UTC\",\n    \"updated_at\": \"2019-01-30 00:16:05 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"IBM\"\n  },\n  {\n    \"login\": \"ltomes\",\n    \"id\": 4184677,\n    \"node_id\": \"MDQ6VXNlcjQxODQ2Nzc=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/4184677?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ltomes\",\n    \"html_url\": \"https://github.com/ltomes\",\n    \"followers_url\": \"https://api.github.com/users/ltomes/followers\",\n    \"following_url\": \"https://api.github.com/users/ltomes/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ltomes/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ltomes/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ltomes/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ltomes/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ltomes/repos\",\n    \"events_url\": \"https://api.github.com/users/ltomes/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ltomes/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Levi Tomes\",\n    \"company\": null,\n    \"blog\": \"https://github.com/agosto-levitomes\",\n    \"location\": \"Minneapolis\",\n    \"email\": \"4184677+ltomes!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"https://bitbucket.org/ltomes\",\n    \"public_repos\": 33,\n    \"public_gists\": 0,\n    \"followers\": 5,\n    \"following\": 5,\n    \"created_at\": \"2013-04-17 19:31:30 UTC\",\n    \"updated_at\": \"2019-02-14 15:58:21 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"kairen\",\n    \"id\": 4667563,\n    \"node_id\": \"MDQ6VXNlcjQ2Njc1NjM=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/4667563?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/kairen\",\n    \"html_url\": \"https://github.com/kairen\",\n    \"followers_url\": \"https://api.github.com/users/kairen/followers\",\n    \"following_url\": \"https://api.github.com/users/kairen/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/kairen/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/kairen/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/kairen/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/kairen/orgs\",\n    \"repos_url\": \"https://api.github.com/users/kairen/repos\",\n    \"events_url\": \"https://api.github.com/users/kairen/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/kairen/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Kyle Bai\",\n    \"company\": \"inwinSTACK\",\n    \"blog\": \"https://k2r2bai.com/\",\n    \"location\": \"New Taipei, Taiwan\",\n    \"email\": \"k2r2.bai!gmail.com\",\n    \"hireable\": null,\n    \"bio\": \"A software engineer at @inwinstack. Love @kubernetes !!\",\n    \"public_repos\": 85,\n    \"public_gists\": 7,\n    \"followers\": 246,\n    \"following\": 97,\n    \"created_at\": \"2013-06-11 05:49:41 UTC\",\n    \"updated_at\": \"2019-02-20 11:08:08 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"inwinSTACK\"\n  },\n  {\n    \"login\": \"BenHall\",\n    \"id\": 82614,\n    \"node_id\": \"MDQ6VXNlcjgyNjE0\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/82614?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/BenHall\",\n    \"html_url\": \"https://github.com/BenHall\",\n    \"followers_url\": \"https://api.github.com/users/BenHall/followers\",\n    \"following_url\": \"https://api.github.com/users/BenHall/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/BenHall/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/BenHall/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/BenHall/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/BenHall/orgs\",\n    \"repos_url\": \"https://api.github.com/users/BenHall/repos\",\n    \"events_url\": \"https://api.github.com/users/BenHall/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/BenHall/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ben Hall\",\n    \"company\": \"Ocelot Uproar\",\n    \"blog\": \"http://blog.benhall.me.uk\",\n    \"location\": \"London\",\n    \"email\": \"ben!benhall.me.uk\",\n    \"hireable\": true,\n    \"bio\": \"Founder of Ocelot Uproar (!ocelotuproar), creator of Katacoda.com (!katacoda). Blog at http://blog.benhall.me.uk\",\n    \"public_repos\": 235,\n    \"public_gists\": 117,\n    \"followers\": 287,\n    \"following\": 44,\n    \"created_at\": \"2009-05-09 01:19:04 UTC\",\n    \"updated_at\": \"2019-02-15 09:55:49 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Ben Hall\"\n  },\n  {\n    \"login\": \"jbottum\",\n    \"id\": 10553232,\n    \"node_id\": \"MDQ6VXNlcjEwNTUzMjMy\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/10553232?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jbottum\",\n    \"html_url\": \"https://github.com/jbottum\",\n    \"followers_url\": \"https://api.github.com/users/jbottum/followers\",\n    \"following_url\": \"https://api.github.com/users/jbottum/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jbottum/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jbottum/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jbottum/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jbottum/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jbottum/repos\",\n    \"events_url\": \"https://api.github.com/users/jbottum/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jbottum/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"joshbottum!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 3,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2015-01-15 21:38:55 UTC\",\n    \"updated_at\": \"2018-12-02 16:48:25 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"silenceshell\",\n    \"id\": 8861610,\n    \"node_id\": \"MDQ6VXNlcjg4NjE2MTA=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/8861610?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/silenceshell\",\n    \"html_url\": \"https://github.com/silenceshell\",\n    \"followers_url\": \"https://api.github.com/users/silenceshell/followers\",\n    \"following_url\": \"https://api.github.com/users/silenceshell/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/silenceshell/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/silenceshell/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/silenceshell/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/silenceshell/orgs\",\n    \"repos_url\": \"https://api.github.com/users/silenceshell/repos\",\n    \"events_url\": \"https://api.github.com/users/silenceshell/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/silenceshell/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"silenceshell\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Hangzhou\",\n    \"email\": \"me!ieevee.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 44,\n    \"public_gists\": 7,\n    \"followers\": 40,\n    \"following\": 22,\n    \"created_at\": \"2014-09-22 13:23:51 UTC\",\n    \"updated_at\": \"2019-02-19 14:20:52 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"dthomson25\",\n    \"id\": 8616845,\n    \"node_id\": \"MDQ6VXNlcjg2MTY4NDU=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/8616845?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dthomson25\",\n    \"html_url\": \"https://github.com/dthomson25\",\n    \"followers_url\": \"https://api.github.com/users/dthomson25/followers\",\n    \"following_url\": \"https://api.github.com/users/dthomson25/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dthomson25/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dthomson25/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dthomson25/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dthomson25/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dthomson25/repos\",\n    \"events_url\": \"https://api.github.com/users/dthomson25/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dthomson25/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"dthomson25!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 21,\n    \"public_gists\": 1,\n    \"followers\": 2,\n    \"following\": 1,\n    \"created_at\": \"2014-09-01 15:32:51 UTC\",\n    \"updated_at\": \"2019-02-12 22:27:04 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"davidstack\",\n    \"id\": 5036200,\n    \"node_id\": \"MDQ6VXNlcjUwMzYyMDA=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/5036200?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/davidstack\",\n    \"html_url\": \"https://github.com/davidstack\",\n    \"followers_url\": \"https://api.github.com/users/davidstack/followers\",\n    \"following_url\": \"https://api.github.com/users/davidstack/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/davidstack/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/davidstack/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/davidstack/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/davidstack/orgs\",\n    \"repos_url\": \"https://api.github.com/users/davidstack/repos\",\n    \"events_url\": \"https://api.github.com/users/davidstack/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/davidstack/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Damon Wang\",\n    \"company\": null,\n    \"blog\": \"http://www.damonyi.cc/\",\n    \"location\": \"Jinan shandong\",\n    \"email\": \"wangdk789!163.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 67,\n    \"public_gists\": 1,\n    \"followers\": 7,\n    \"following\": 26,\n    \"created_at\": \"2013-07-18 04:08:34 UTC\",\n    \"updated_at\": \"2018-12-04 07:57:21 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Net EASE\"\n  },\n  {\n    \"login\": \"zeb-stephen-downs\",\n    \"id\": 40479546,\n    \"node_id\": \"MDQ6VXNlcjQwNDc5NTQ2\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/40479546?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/zeb-stephen-downs\",\n    \"html_url\": \"https://github.com/zeb-stephen-downs\",\n    \"followers_url\": \"https://api.github.com/users/zeb-stephen-downs/followers\",\n    \"following_url\": \"https://api.github.com/users/zeb-stephen-downs/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/zeb-stephen-downs/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/zeb-stephen-downs/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/zeb-stephen-downs/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/zeb-stephen-downs/orgs\",\n    \"repos_url\": \"https://api.github.com/users/zeb-stephen-downs/repos\",\n    \"events_url\": \"https://api.github.com/users/zeb-stephen-downs/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/zeb-stephen-downs/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Zeb Stephen Downs\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Casar, NC\",\n    \"email\": \"40479546+zeb-stephen-downs!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Old School Hacker, Autodidact, Fervent Advocate of Strong and Modern Security in Production, Gamer\",\n    \"public_repos\": 31,\n    \"public_gists\": 2,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2018-06-22 01:49:16 UTC\",\n    \"updated_at\": \"2019-02-04 17:21:58 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"ai4life\",\n    \"id\": 26662371,\n    \"node_id\": \"MDQ6VXNlcjI2NjYyMzcx\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/26662371?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ai4life\",\n    \"html_url\": \"https://github.com/ai4life\",\n    \"followers_url\": \"https://api.github.com/users/ai4life/followers\",\n    \"following_url\": \"https://api.github.com/users/ai4life/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ai4life/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ai4life/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ai4life/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ai4life/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ai4life/repos\",\n    \"events_url\": \"https://api.github.com/users/ai4life/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ai4life/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"benkapp!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 4,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2017-03-24 22:55:48 UTC\",\n    \"updated_at\": \"2018-09-03 05:11:07 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"EdanSneh\",\n    \"id\": 14003534,\n    \"node_id\": \"MDQ6VXNlcjE0MDAzNTM0\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/14003534?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/EdanSneh\",\n    \"html_url\": \"https://github.com/EdanSneh\",\n    \"followers_url\": \"https://api.github.com/users/EdanSneh/followers\",\n    \"following_url\": \"https://api.github.com/users/EdanSneh/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/EdanSneh/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/EdanSneh/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/EdanSneh/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/EdanSneh/orgs\",\n    \"repos_url\": \"https://api.github.com/users/EdanSneh/repos\",\n    \"events_url\": \"https://api.github.com/users/EdanSneh/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/EdanSneh/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Edan Sneh\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"edan.sneh!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 34,\n    \"public_gists\": 0,\n    \"followers\": 6,\n    \"following\": 7,\n    \"created_at\": \"2015-08-27 17:56:15 UTC\",\n    \"updated_at\": \"2019-02-18 15:48:12 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Independent\"\n  },\n  {\n    \"login\": \"aVideogamer\",\n    \"id\": 42468940,\n    \"node_id\": \"MDQ6VXNlcjQyNDY4OTQw\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/42468940?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/aVideogamer\",\n    \"html_url\": \"https://github.com/aVideogamer\",\n    \"followers_url\": \"https://api.github.com/users/aVideogamer/followers\",\n    \"following_url\": \"https://api.github.com/users/aVideogamer/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/aVideogamer/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/aVideogamer/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/aVideogamer/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/aVideogamer/orgs\",\n    \"repos_url\": \"https://api.github.com/users/aVideogamer/repos\",\n    \"events_url\": \"https://api.github.com/users/aVideogamer/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/aVideogamer/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"andreamarkus.gentile!studenti.unimi.it\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 5,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-08-17 11:48:34 UTC\",\n    \"updated_at\": \"2019-02-18 16:34:35 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"hepwori\",\n    \"id\": 869320,\n    \"node_id\": \"MDQ6VXNlcjg2OTMyMA==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/869320?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/hepwori\",\n    \"html_url\": \"https://github.com/hepwori\",\n    \"followers_url\": \"https://api.github.com/users/hepwori/followers\",\n    \"following_url\": \"https://api.github.com/users/hepwori/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/hepwori/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/hepwori/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/hepwori/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/hepwori/orgs\",\n    \"repos_url\": \"https://api.github.com/users/hepwori/repos\",\n    \"events_url\": \"https://api.github.com/users/hepwori/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/hepwori/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Isaac Hepworth\",\n    \"company\": null,\n    \"blog\": \"http://isaa.ch\",\n    \"location\": \"San Francisco, CA\",\n    \"email\": \"isaac!stripe.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 9,\n    \"public_gists\": 3,\n    \"followers\": 28,\n    \"following\": 0,\n    \"created_at\": \"2011-06-23 03:15:49 UTC\",\n    \"updated_at\": \"2018-12-11 05:21:17 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"kikko\",\n    \"id\": 144372,\n    \"node_id\": \"MDQ6VXNlcjE0NDM3Mg==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/144372?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/kikko\",\n    \"html_url\": \"https://github.com/kikko\",\n    \"followers_url\": \"https://api.github.com/users/kikko/followers\",\n    \"following_url\": \"https://api.github.com/users/kikko/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/kikko/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/kikko/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/kikko/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/kikko/orgs\",\n    \"repos_url\": \"https://api.github.com/users/kikko/repos\",\n    \"events_url\": \"https://api.github.com/users/kikko/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/kikko/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Cyril Diagne\",\n    \"company\": null,\n    \"blog\": \"http://cyrildiagne.com\",\n    \"location\": \"Paris - France\",\n    \"email\": \"diagne.cyril!gmail.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 55,\n    \"public_gists\": 27,\n    \"followers\": 178,\n    \"following\": 76,\n    \"created_at\": \"2009-10-25 10:39:50 UTC\",\n    \"updated_at\": \"2019-02-09 09:25:07 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"mk-nickyang\",\n    \"id\": 29244509,\n    \"node_id\": \"MDQ6VXNlcjI5MjQ0NTA5\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/29244509?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mk-nickyang\",\n    \"html_url\": \"https://github.com/mk-nickyang\",\n    \"followers_url\": \"https://api.github.com/users/mk-nickyang/followers\",\n    \"following_url\": \"https://api.github.com/users/mk-nickyang/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mk-nickyang/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mk-nickyang/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mk-nickyang/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mk-nickyang/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mk-nickyang/repos\",\n    \"events_url\": \"https://api.github.com/users/mk-nickyang/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mk-nickyang/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"nickY\",\n    \"company\": \"!MaxKelsen \",\n    \"blog\": \"https://maxkelsen.com/\",\n    \"location\": \"Brisbane\",\n    \"email\": \"nick.yang!maxkelsen.com\",\n    \"hireable\": null,\n    \"bio\": \"Kappa\",\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 1,\n    \"created_at\": \"2017-06-07 04:27:20 UTC\",\n    \"updated_at\": \"2019-02-07 02:33:13 UTC\",\n    \"commits\": 1\n  },\n  {\n    \"login\": \"frederick0329\",\n    \"id\": 3983652,\n    \"node_id\": \"MDQ6VXNlcjM5ODM2NTI=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/3983652?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/frederick0329\",\n    \"html_url\": \"https://github.com/frederick0329\",\n    \"followers_url\": \"https://api.github.com/users/frederick0329/followers\",\n    \"following_url\": \"https://api.github.com/users/frederick0329/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/frederick0329/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/frederick0329/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/frederick0329/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/frederick0329/orgs\",\n    \"repos_url\": \"https://api.github.com/users/frederick0329/repos\",\n    \"events_url\": \"https://api.github.com/users/frederick0329/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/frederick0329/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Frederick Liu\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"frederickliu!google.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 16,\n    \"public_gists\": 0,\n    \"followers\": 6,\n    \"following\": 1,\n    \"created_at\": \"2013-03-27 09:37:52 UTC\",\n    \"updated_at\": \"2019-01-08 04:43:52 UTC\",\n    \"commits\": 1,\n    \"affiliation\": \"Google\"\n  },\n  {\n    \"login\": \"0snug0\",\n    \"id\": 2829722,\n    \"node_id\": \"MDQ6VXNlcjI4Mjk3MjI=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/2829722?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/0snug0\",\n    \"html_url\": \"https://github.com/0snug0\",\n    \"followers_url\": \"https://api.github.com/users/0snug0/followers\",\n    \"following_url\": \"https://api.github.com/users/0snug0/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/0snug0/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/0snug0/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/0snug0/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/0snug0/orgs\",\n    \"repos_url\": \"https://api.github.com/users/0snug0/repos\",\n    \"events_url\": \"https://api.github.com/users/0snug0/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/0snug0/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Eric\",\n    \"company\": \"@GoogleCloudPlatform  \",\n    \"blog\": \"\",\n    \"location\": \"San Francisco, CA\",\n    \"email\": \"0snug0!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Customer Engineer Specialist, AppDev | \\r\\nGoogle Cloud Platform |\\r\\nKubernetes, GKE, Serverless\",\n    \"public_repos\": 20,\n    \"public_gists\": 2,\n    \"followers\": 4,\n    \"following\": 3,\n    \"created_at\": \"2012-11-18 22:42:29 UTC\",\n    \"updated_at\": \"2018-12-14 04:55:51 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"13567436138\",\n    \"id\": 31508490,\n    \"node_id\": \"MDQ6VXNlcjMxNTA4NDkw\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/31508490?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/13567436138\",\n    \"html_url\": \"https://github.com/13567436138\",\n    \"followers_url\": \"https://api.github.com/users/13567436138/followers\",\n    \"following_url\": \"https://api.github.com/users/13567436138/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/13567436138/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/13567436138/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/13567436138/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/13567436138/orgs\",\n    \"repos_url\": \"https://api.github.com/users/13567436138/repos\",\n    \"events_url\": \"https://api.github.com/users/13567436138/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/13567436138/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"huangxiaoping\",\n    \"company\": null,\n    \"blog\": \"blog.csdn.net/hxpjava1\",\n    \"location\": \"china\",\n    \"email\": \"13567436138!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"engneer\",\n    \"public_repos\": 73,\n    \"public_gists\": 1,\n    \"followers\": 6,\n    \"following\": 19,\n    \"created_at\": \"2017-08-31 11:31:03 UTC\",\n    \"updated_at\": \"2019-01-23 07:45:00 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"372046933\",\n    \"id\": 1251167,\n    \"node_id\": \"MDQ6VXNlcjEyNTExNjc=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/1251167?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/372046933\",\n    \"html_url\": \"https://github.com/372046933\",\n    \"followers_url\": \"https://api.github.com/users/372046933/followers\",\n    \"following_url\": \"https://api.github.com/users/372046933/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/372046933/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/372046933/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/372046933/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/372046933/orgs\",\n    \"repos_url\": \"https://api.github.com/users/372046933/repos\",\n    \"events_url\": \"https://api.github.com/users/372046933/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/372046933/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"372046933!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 14,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 1,\n    \"created_at\": \"2011-12-09 01:36:42 UTC\",\n    \"updated_at\": \"2018-10-09 09:16:49 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"AdrianLsk\",\n    \"id\": 4333307,\n    \"node_id\": \"MDQ6VXNlcjQzMzMzMDc=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/4333307?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/AdrianLsk\",\n    \"html_url\": \"https://github.com/AdrianLsk\",\n    \"followers_url\": \"https://api.github.com/users/AdrianLsk/followers\",\n    \"following_url\": \"https://api.github.com/users/AdrianLsk/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/AdrianLsk/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/AdrianLsk/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/AdrianLsk/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/AdrianLsk/orgs\",\n    \"repos_url\": \"https://api.github.com/users/AdrianLsk/repos\",\n    \"events_url\": \"https://api.github.com/users/AdrianLsk/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/AdrianLsk/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Adrian Lisko\",\n    \"company\": \"@HealthplusAI \",\n    \"blog\": \"https://nl.linkedin.com/in/liskoadrian\",\n    \"location\": \"Amsterdam\",\n    \"email\": \"AdrianLsk!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 69,\n    \"public_gists\": 11,\n    \"followers\": 4,\n    \"following\": 7,\n    \"created_at\": \"2013-05-03 17:12:26 UTC\",\n    \"updated_at\": \"2018-09-25 21:52:30 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"AkihiroSuda\",\n    \"id\": 9248427,\n    \"node_id\": \"MDQ6VXNlcjkyNDg0Mjc=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/9248427?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/AkihiroSuda\",\n    \"html_url\": \"https://github.com/AkihiroSuda\",\n    \"followers_url\": \"https://api.github.com/users/AkihiroSuda/followers\",\n    \"following_url\": \"https://api.github.com/users/AkihiroSuda/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/AkihiroSuda/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/AkihiroSuda/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/AkihiroSuda/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/AkihiroSuda/orgs\",\n    \"repos_url\": \"https://api.github.com/users/AkihiroSuda/repos\",\n    \"events_url\": \"https://api.github.com/users/AkihiroSuda/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/AkihiroSuda/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Akihiro Suda\",\n    \"company\": \"NTT\",\n    \"blog\": \"https://akihirosuda.github.io/\",\n    \"location\": \"Tokyo, Japan\",\n    \"email\": \"AkihiroSuda!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Moby  (former Docker Engine), BuildKit, and containerd maintainer.\\r\\n\\r\\nhttps://twitter.com/_AkihiroSuda_ (\\\"akihirosuda\\\" is not my Twitter account)\",\n    \"public_repos\": 140,\n    \"public_gists\": 11,\n    \"followers\": 239,\n    \"following\": 0,\n    \"created_at\": \"2014-10-15 08:07:00 UTC\",\n    \"updated_at\": \"2019-02-06 03:37:28 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"AlexanderCHarrington\",\n    \"id\": 18198868,\n    \"node_id\": \"MDQ6VXNlcjE4MTk4ODY4\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/18198868?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/AlexanderCHarrington\",\n    \"html_url\": \"https://github.com/AlexanderCHarrington\",\n    \"followers_url\": \"https://api.github.com/users/AlexanderCHarrington/followers\",\n    \"following_url\": \"https://api.github.com/users/AlexanderCHarrington/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/AlexanderCHarrington/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/AlexanderCHarrington/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/AlexanderCHarrington/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/AlexanderCHarrington/orgs\",\n    \"repos_url\": \"https://api.github.com/users/AlexanderCHarrington/repos\",\n    \"events_url\": \"https://api.github.com/users/AlexanderCHarrington/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/AlexanderCHarrington/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"AlexanderCHarrington!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 1,\n    \"created_at\": \"2016-03-31 21:26:38 UTC\",\n    \"updated_at\": \"2019-01-23 16:34:10 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"AnberLu\",\n    \"id\": 15904680,\n    \"node_id\": \"MDQ6VXNlcjE1OTA0Njgw\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/15904680?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/AnberLu\",\n    \"html_url\": \"https://github.com/AnberLu\",\n    \"followers_url\": \"https://api.github.com/users/AnberLu/followers\",\n    \"following_url\": \"https://api.github.com/users/AnberLu/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/AnberLu/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/AnberLu/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/AnberLu/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/AnberLu/orgs\",\n    \"repos_url\": \"https://api.github.com/users/AnberLu/repos\",\n    \"events_url\": \"https://api.github.com/users/AnberLu/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/AnberLu/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"AnberLu\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"AnberLu!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"we see the future\",\n    \"public_repos\": 62,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 5,\n    \"created_at\": \"2015-11-18 08:49:44 UTC\",\n    \"updated_at\": \"2019-02-12 07:24:17 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"AndriiNeverov\",\n    \"id\": 30669047,\n    \"node_id\": \"MDQ6VXNlcjMwNjY5MDQ3\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/30669047?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/AndriiNeverov\",\n    \"html_url\": \"https://github.com/AndriiNeverov\",\n    \"followers_url\": \"https://api.github.com/users/AndriiNeverov/followers\",\n    \"following_url\": \"https://api.github.com/users/AndriiNeverov/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/AndriiNeverov/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/AndriiNeverov/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/AndriiNeverov/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/AndriiNeverov/orgs\",\n    \"repos_url\": \"https://api.github.com/users/AndriiNeverov/repos\",\n    \"events_url\": \"https://api.github.com/users/AndriiNeverov/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/AndriiNeverov/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Andrii Neverov\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"San Francisco Bay Area\",\n    \"email\": \"AndriiNeverov!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Interested in Data Science, Machine Learning, Robotics and creating startups.\",\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 1,\n    \"created_at\": \"2017-08-02 19:56:25 UTC\",\n    \"updated_at\": \"2018-06-20 05:02:20 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"Ankk98\",\n    \"id\": 24476799,\n    \"node_id\": \"MDQ6VXNlcjI0NDc2Nzk5\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/24476799?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Ankk98\",\n    \"html_url\": \"https://github.com/Ankk98\",\n    \"followers_url\": \"https://api.github.com/users/Ankk98/followers\",\n    \"following_url\": \"https://api.github.com/users/Ankk98/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Ankk98/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Ankk98/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Ankk98/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Ankk98/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Ankk98/repos\",\n    \"events_url\": \"https://api.github.com/users/Ankk98/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Ankk98/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ankit Khandelwal\",\n    \"company\": null,\n    \"blog\": \"ankk98.github.io\",\n    \"location\": \"Noida\",\n    \"email\": \"Ankk98!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Passionately Curious  ||  Mozilla Campus Captain\",\n    \"public_repos\": 55,\n    \"public_gists\": 0,\n    \"followers\": 28,\n    \"following\": 78,\n    \"created_at\": \"2016-12-09 13:05:47 UTC\",\n    \"updated_at\": \"2019-01-23 15:59:07 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"BenTheElder\",\n    \"id\": 917931,\n    \"node_id\": \"MDQ6VXNlcjkxNzkzMQ==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/917931?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/BenTheElder\",\n    \"html_url\": \"https://github.com/BenTheElder\",\n    \"followers_url\": \"https://api.github.com/users/BenTheElder/followers\",\n    \"following_url\": \"https://api.github.com/users/BenTheElder/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/BenTheElder/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/BenTheElder/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/BenTheElder/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/BenTheElder/orgs\",\n    \"repos_url\": \"https://api.github.com/users/BenTheElder/repos\",\n    \"events_url\": \"https://api.github.com/users/BenTheElder/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/BenTheElder/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Benjamin Elder\",\n    \"company\": \"@Google \",\n    \"blog\": \"https://bentheelder.io/\",\n    \"location\": \"Sunnyvale, CA\",\n    \"email\": \"BenTheElder!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"@kubernetes release team, SIG Testing. kubernetes/test-infra maintainer. https://sigs.k8s.io/kind creator 🤗\",\n    \"public_repos\": 43,\n    \"public_gists\": 9,\n    \"followers\": 100,\n    \"following\": 10,\n    \"created_at\": \"2011-07-15 15:26:58 UTC\",\n    \"updated_at\": \"2019-01-12 00:01:36 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"Boimkimi\",\n    \"id\": 39964728,\n    \"node_id\": \"MDQ6VXNlcjM5OTY0NzI4\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/39964728?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Boimkimi\",\n    \"html_url\": \"https://github.com/Boimkimi\",\n    \"followers_url\": \"https://api.github.com/users/Boimkimi/followers\",\n    \"following_url\": \"https://api.github.com/users/Boimkimi/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Boimkimi/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Boimkimi/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Boimkimi/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Boimkimi/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Boimkimi/repos\",\n    \"events_url\": \"https://api.github.com/users/Boimkimi/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Boimkimi/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"Boimkimi!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-06-05 17:36:23 UTC\",\n    \"updated_at\": \"2018-06-05 17:36:23 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"CSP197\",\n    \"id\": 16367956,\n    \"node_id\": \"MDQ6VXNlcjE2MzY3OTU2\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/16367956?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/CSP197\",\n    \"html_url\": \"https://github.com/CSP197\",\n    \"followers_url\": \"https://api.github.com/users/CSP197/followers\",\n    \"following_url\": \"https://api.github.com/users/CSP197/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/CSP197/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/CSP197/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/CSP197/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/CSP197/orgs\",\n    \"repos_url\": \"https://api.github.com/users/CSP197/repos\",\n    \"events_url\": \"https://api.github.com/users/CSP197/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/CSP197/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"CSP\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"San Francisco Bay Area\",\n    \"email\": \"CSP197!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 50,\n    \"public_gists\": 1,\n    \"followers\": 0,\n    \"following\": 19,\n    \"created_at\": \"2015-12-20 05:28:29 UTC\",\n    \"updated_at\": \"2019-02-20 06:53:45 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"Cas-pian\",\n    \"id\": 5690854,\n    \"node_id\": \"MDQ6VXNlcjU2OTA4NTQ=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/5690854?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Cas-pian\",\n    \"html_url\": \"https://github.com/Cas-pian\",\n    \"followers_url\": \"https://api.github.com/users/Cas-pian/followers\",\n    \"following_url\": \"https://api.github.com/users/Cas-pian/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Cas-pian/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Cas-pian/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Cas-pian/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Cas-pian/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Cas-pian/repos\",\n    \"events_url\": \"https://api.github.com/users/Cas-pian/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Cas-pian/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Caspian\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"Cas-pian!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 2,\n    \"created_at\": \"2013-10-15 12:01:44 UTC\",\n    \"updated_at\": \"2019-01-04 10:32:04 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"Chaos-Ju\",\n    \"id\": 31558609,\n    \"node_id\": \"MDQ6VXNlcjMxNTU4NjA5\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/31558609?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Chaos-Ju\",\n    \"html_url\": \"https://github.com/Chaos-Ju\",\n    \"followers_url\": \"https://api.github.com/users/Chaos-Ju/followers\",\n    \"following_url\": \"https://api.github.com/users/Chaos-Ju/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Chaos-Ju/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Chaos-Ju/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Chaos-Ju/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Chaos-Ju/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Chaos-Ju/repos\",\n    \"events_url\": \"https://api.github.com/users/Chaos-Ju/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Chaos-Ju/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"ChaosJu\",\n    \"company\": \"Sina\",\n    \"blog\": \"\",\n    \"location\": \"BeiJing\",\n    \"email\": \"Chaos-Ju!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"采菊东篱下，悠然现南山！\",\n    \"public_repos\": 24,\n    \"public_gists\": 0,\n    \"followers\": 3,\n    \"following\": 0,\n    \"created_at\": \"2017-09-02 04:17:21 UTC\",\n    \"updated_at\": \"2018-10-29 01:55:22 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"DanCech\",\n    \"id\": 1443603,\n    \"node_id\": \"MDQ6VXNlcjE0NDM2MDM=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1443603?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/DanCech\",\n    \"html_url\": \"https://github.com/DanCech\",\n    \"followers_url\": \"https://api.github.com/users/DanCech/followers\",\n    \"following_url\": \"https://api.github.com/users/DanCech/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/DanCech/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/DanCech/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/DanCech/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/DanCech/orgs\",\n    \"repos_url\": \"https://api.github.com/users/DanCech/repos\",\n    \"events_url\": \"https://api.github.com/users/DanCech/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/DanCech/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Dan Cech\",\n    \"company\": null,\n    \"blog\": \"http://www.aussiedan.com\",\n    \"location\": \"New York\",\n    \"email\": \"DanCech!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 22,\n    \"public_gists\": 6,\n    \"followers\": 30,\n    \"following\": 13,\n    \"created_at\": \"2012-02-16 15:26:37 UTC\",\n    \"updated_at\": \"2018-12-31 13:10:21 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"DmitryBe\",\n    \"id\": 16871293,\n    \"node_id\": \"MDQ6VXNlcjE2ODcxMjkz\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/16871293?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/DmitryBe\",\n    \"html_url\": \"https://github.com/DmitryBe\",\n    \"followers_url\": \"https://api.github.com/users/DmitryBe/followers\",\n    \"following_url\": \"https://api.github.com/users/DmitryBe/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/DmitryBe/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/DmitryBe/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/DmitryBe/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/DmitryBe/orgs\",\n    \"repos_url\": \"https://api.github.com/users/DmitryBe/repos\",\n    \"events_url\": \"https://api.github.com/users/DmitryBe/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/DmitryBe/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Dmitry B\",\n    \"company\": \"Grab\",\n    \"blog\": \"https://twitter.com/ificha\",\n    \"location\": \"Singapore\",\n    \"email\": \"DmitryBe!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"big data, distributed systems, machine learning and AI\",\n    \"public_repos\": 17,\n    \"public_gists\": 28,\n    \"followers\": 10,\n    \"following\": 3,\n    \"created_at\": \"2016-01-25 02:01:00 UTC\",\n    \"updated_at\": \"2019-02-10 13:03:46 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"Dylan-Rich\",\n    \"id\": 34040184,\n    \"node_id\": \"MDQ6VXNlcjM0MDQwMTg0\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/34040184?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Dylan-Rich\",\n    \"html_url\": \"https://github.com/Dylan-Rich\",\n    \"followers_url\": \"https://api.github.com/users/Dylan-Rich/followers\",\n    \"following_url\": \"https://api.github.com/users/Dylan-Rich/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Dylan-Rich/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Dylan-Rich/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Dylan-Rich/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Dylan-Rich/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Dylan-Rich/repos\",\n    \"events_url\": \"https://api.github.com/users/Dylan-Rich/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Dylan-Rich/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Dylan Rich\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"Dylan-Rich!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2017-11-27 19:09:26 UTC\",\n    \"updated_at\": \"2018-12-20 16:43:59 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"EdwardZhang88\",\n    \"id\": 28944236,\n    \"node_id\": \"MDQ6VXNlcjI4OTQ0MjM2\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/28944236?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/EdwardZhang88\",\n    \"html_url\": \"https://github.com/EdwardZhang88\",\n    \"followers_url\": \"https://api.github.com/users/EdwardZhang88/followers\",\n    \"following_url\": \"https://api.github.com/users/EdwardZhang88/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/EdwardZhang88/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/EdwardZhang88/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/EdwardZhang88/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/EdwardZhang88/orgs\",\n    \"repos_url\": \"https://api.github.com/users/EdwardZhang88/repos\",\n    \"events_url\": \"https://api.github.com/users/EdwardZhang88/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/EdwardZhang88/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"JUN ZHANG\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"EdwardZhang88!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 16,\n    \"public_gists\": 0,\n    \"followers\": 4,\n    \"following\": 9,\n    \"created_at\": \"2017-05-25 05:58:35 UTC\",\n    \"updated_at\": \"2019-01-09 01:05:09 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"EdwinZzy\",\n    \"id\": 45752229,\n    \"node_id\": \"MDQ6VXNlcjQ1NzUyMjI5\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/45752229?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/EdwinZzy\",\n    \"html_url\": \"https://github.com/EdwinZzy\",\n    \"followers_url\": \"https://api.github.com/users/EdwinZzy/followers\",\n    \"following_url\": \"https://api.github.com/users/EdwinZzy/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/EdwinZzy/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/EdwinZzy/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/EdwinZzy/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/EdwinZzy/orgs\",\n    \"repos_url\": \"https://api.github.com/users/EdwinZzy/repos\",\n    \"events_url\": \"https://api.github.com/users/EdwinZzy/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/EdwinZzy/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"EdwinZzy!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 8,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-12-10 07:36:40 UTC\",\n    \"updated_at\": \"2018-12-31 03:39:49 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"Ema93sh\",\n    \"id\": 2040234,\n    \"node_id\": \"MDQ6VXNlcjIwNDAyMzQ=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/2040234?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Ema93sh\",\n    \"html_url\": \"https://github.com/Ema93sh\",\n    \"followers_url\": \"https://api.github.com/users/Ema93sh/followers\",\n    \"following_url\": \"https://api.github.com/users/Ema93sh/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Ema93sh/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Ema93sh/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Ema93sh/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Ema93sh/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Ema93sh/repos\",\n    \"events_url\": \"https://api.github.com/users/Ema93sh/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Ema93sh/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Magesh kumar\",\n    \"company\": \"@pivotal \",\n    \"blog\": \"mageshkumar.com\",\n    \"location\": \"San Francisco\",\n    \"email\": \"Ema93sh!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Functional Programmer, Pivotal Labs, Ex-@ThoughtWorks\",\n    \"public_repos\": 24,\n    \"public_gists\": 1,\n    \"followers\": 11,\n    \"following\": 19,\n    \"created_at\": \"2012-07-25 12:15:07 UTC\",\n    \"updated_at\": \"2019-02-15 21:41:00 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"Eric-Zhang1990\",\n    \"id\": 24602893,\n    \"node_id\": \"MDQ6VXNlcjI0NjAyODkz\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/24602893?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Eric-Zhang1990\",\n    \"html_url\": \"https://github.com/Eric-Zhang1990\",\n    \"followers_url\": \"https://api.github.com/users/Eric-Zhang1990/followers\",\n    \"following_url\": \"https://api.github.com/users/Eric-Zhang1990/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Eric-Zhang1990/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Eric-Zhang1990/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Eric-Zhang1990/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Eric-Zhang1990/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Eric-Zhang1990/repos\",\n    \"events_url\": \"https://api.github.com/users/Eric-Zhang1990/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Eric-Zhang1990/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Eric Zhang\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"Eric-Zhang1990!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"I have graduated from Huazhong University of Science and Technology as a graduate student. My major research areas are image processing, Deep Learning.\",\n    \"public_repos\": 100,\n    \"public_gists\": 1,\n    \"followers\": 1,\n    \"following\": 16,\n    \"created_at\": \"2016-12-16 07:53:49 UTC\",\n    \"updated_at\": \"2019-01-07 02:01:24 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"Farrellow\",\n    \"id\": 10371524,\n    \"node_id\": \"MDQ6VXNlcjEwMzcxNTI0\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/10371524?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Farrellow\",\n    \"html_url\": \"https://github.com/Farrellow\",\n    \"followers_url\": \"https://api.github.com/users/Farrellow/followers\",\n    \"following_url\": \"https://api.github.com/users/Farrellow/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Farrellow/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Farrellow/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Farrellow/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Farrellow/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Farrellow/repos\",\n    \"events_url\": \"https://api.github.com/users/Farrellow/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Farrellow/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Farrell\",\n    \"company\": \"meitu\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"Farrellow!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 9,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 8,\n    \"created_at\": \"2015-01-02 11:43:40 UTC\",\n    \"updated_at\": \"2019-01-12 12:30:16 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"gabrielwen\",\n    \"id\": 4784270,\n    \"node_id\": \"MDQ6VXNlcjQ3ODQyNzA=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/4784270?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/gabrielwen\",\n    \"html_url\": \"https://github.com/gabrielwen\",\n    \"followers_url\": \"https://api.github.com/users/gabrielwen/followers\",\n    \"following_url\": \"https://api.github.com/users/gabrielwen/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/gabrielwen/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/gabrielwen/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/gabrielwen/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/gabrielwen/orgs\",\n    \"repos_url\": \"https://api.github.com/users/gabrielwen/repos\",\n    \"events_url\": \"https://api.github.com/users/gabrielwen/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/gabrielwen/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Hung-Ting Wen\",\n    \"company\": \"google inc\",\n    \"blog\": \"\",\n    \"location\": \"San Francisco Bay Area\",\n    \"email\": \"GabrielWen!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 14,\n    \"public_gists\": 0,\n    \"followers\": 4,\n    \"following\": 3,\n    \"created_at\": \"2013-06-23 08:54:39 UTC\",\n    \"updated_at\": \"2019-01-07 21:52:08 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"GabrielWen\",\n    \"id\": 4784270,\n    \"node_id\": \"MDQ6VXNlcjQ3ODQyNzA=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/4784270?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/gabrielwen\",\n    \"html_url\": \"https://github.com/gabrielwen\",\n    \"followers_url\": \"https://api.github.com/users/gabrielwen/followers\",\n    \"following_url\": \"https://api.github.com/users/gabrielwen/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/gabrielwen/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/gabrielwen/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/gabrielwen/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/gabrielwen/orgs\",\n    \"repos_url\": \"https://api.github.com/users/gabrielwen/repos\",\n    \"events_url\": \"https://api.github.com/users/gabrielwen/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/gabrielwen/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Hung-Ting Wen\",\n    \"company\": \"google inc\",\n    \"blog\": \"\",\n    \"location\": \"San Francisco Bay Area\",\n    \"email\": \"GabrielWen!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 14,\n    \"public_gists\": 0,\n    \"followers\": 4,\n    \"following\": 3,\n    \"created_at\": \"2013-06-23 08:54:39 UTC\",\n    \"updated_at\": \"2019-01-07 21:52:08 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"Gajendran27\",\n    \"id\": 5867694,\n    \"node_id\": \"MDQ6VXNlcjU4Njc2OTQ=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/5867694?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Gajendran27\",\n    \"html_url\": \"https://github.com/Gajendran27\",\n    \"followers_url\": \"https://api.github.com/users/Gajendran27/followers\",\n    \"following_url\": \"https://api.github.com/users/Gajendran27/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Gajendran27/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Gajendran27/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Gajendran27/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Gajendran27/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Gajendran27/repos\",\n    \"events_url\": \"https://api.github.com/users/Gajendran27/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Gajendran27/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"Gajendran27!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 10,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 1,\n    \"created_at\": \"2013-11-06 08:02:23 UTC\",\n    \"updated_at\": \"2019-02-12 05:51:29 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"GdMacmillan\",\n    \"id\": 20383590,\n    \"node_id\": \"MDQ6VXNlcjIwMzgzNTkw\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/20383590?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/GdMacmillan\",\n    \"html_url\": \"https://github.com/GdMacmillan\",\n    \"followers_url\": \"https://api.github.com/users/GdMacmillan/followers\",\n    \"following_url\": \"https://api.github.com/users/GdMacmillan/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/GdMacmillan/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/GdMacmillan/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/GdMacmillan/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/GdMacmillan/orgs\",\n    \"repos_url\": \"https://api.github.com/users/GdMacmillan/repos\",\n    \"events_url\": \"https://api.github.com/users/GdMacmillan/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/GdMacmillan/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Gordon MacMillan\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Denver, CO\",\n    \"email\": \"GdMacmillan!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 40,\n    \"public_gists\": 0,\n    \"followers\": 7,\n    \"following\": 14,\n    \"created_at\": \"2016-07-10 14:23:10 UTC\",\n    \"updated_at\": \"2019-02-11 20:00:05 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"Harishkrishna17\",\n    \"id\": 23051095,\n    \"node_id\": \"MDQ6VXNlcjIzMDUxMDk1\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/23051095?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Harishkrishna17\",\n    \"html_url\": \"https://github.com/Harishkrishna17\",\n    \"followers_url\": \"https://api.github.com/users/Harishkrishna17/followers\",\n    \"following_url\": \"https://api.github.com/users/Harishkrishna17/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Harishkrishna17/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Harishkrishna17/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Harishkrishna17/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Harishkrishna17/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Harishkrishna17/repos\",\n    \"events_url\": \"https://api.github.com/users/Harishkrishna17/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Harishkrishna17/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"Harishkrishna17!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 30,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2016-10-25 09:23:59 UTC\",\n    \"updated_at\": \"2018-12-09 09:29:33 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"Hirosora\",\n    \"id\": 21101168,\n    \"node_id\": \"MDQ6VXNlcjIxMTAxMTY4\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/21101168?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Hirosora\",\n    \"html_url\": \"https://github.com/Hirosora\",\n    \"followers_url\": \"https://api.github.com/users/Hirosora/followers\",\n    \"following_url\": \"https://api.github.com/users/Hirosora/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Hirosora/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Hirosora/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Hirosora/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Hirosora/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Hirosora/repos\",\n    \"events_url\": \"https://api.github.com/users/Hirosora/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Hirosora/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Zhang Haotian\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"Hirosora!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 2,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 1,\n    \"created_at\": \"2016-08-18 10:02:56 UTC\",\n    \"updated_at\": \"2019-02-14 10:35:12 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"Itfly\",\n    \"id\": 3993505,\n    \"node_id\": \"MDQ6VXNlcjM5OTM1MDU=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/3993505?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Itfly\",\n    \"html_url\": \"https://github.com/Itfly\",\n    \"followers_url\": \"https://api.github.com/users/Itfly/followers\",\n    \"following_url\": \"https://api.github.com/users/Itfly/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Itfly/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Itfly/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Itfly/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Itfly/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Itfly/repos\",\n    \"events_url\": \"https://api.github.com/users/Itfly/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Itfly/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"Itfly!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 51,\n    \"public_gists\": 2,\n    \"followers\": 1,\n    \"following\": 1,\n    \"created_at\": \"2013-03-28 08:17:06 UTC\",\n    \"updated_at\": \"2018-11-01 07:55:23 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"JCzz\",\n    \"id\": 1861398,\n    \"node_id\": \"MDQ6VXNlcjE4NjEzOTg=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/1861398?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/JCzz\",\n    \"html_url\": \"https://github.com/JCzz\",\n    \"followers_url\": \"https://api.github.com/users/JCzz/followers\",\n    \"following_url\": \"https://api.github.com/users/JCzz/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/JCzz/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/JCzz/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/JCzz/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/JCzz/orgs\",\n    \"repos_url\": \"https://api.github.com/users/JCzz/repos\",\n    \"events_url\": \"https://api.github.com/users/JCzz/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/JCzz/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"JCzz!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 7,\n    \"public_gists\": 1,\n    \"followers\": 0,\n    \"following\": 2,\n    \"created_at\": \"2012-06-18 07:54:07 UTC\",\n    \"updated_at\": \"2019-01-17 08:43:45 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jetmuffin\",\n    \"id\": 4486005,\n    \"node_id\": \"MDQ6VXNlcjQ0ODYwMDU=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/4486005?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jetmuffin\",\n    \"html_url\": \"https://github.com/jetmuffin\",\n    \"followers_url\": \"https://api.github.com/users/jetmuffin/followers\",\n    \"following_url\": \"https://api.github.com/users/jetmuffin/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jetmuffin/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jetmuffin/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jetmuffin/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jetmuffin/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jetmuffin/repos\",\n    \"events_url\": \"https://api.github.com/users/jetmuffin/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jetmuffin/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jeff Chen\",\n    \"company\": \"Nanjing University\",\n    \"blog\": \"http://jetmuffin.com\",\n    \"location\": \"Nanjing\",\n    \"email\": \"JetMuffin!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Master student of Nanjing University.\",\n    \"public_repos\": 72,\n    \"public_gists\": 0,\n    \"followers\": 40,\n    \"following\": 46,\n    \"created_at\": \"2013-05-21 05:48:15 UTC\",\n    \"updated_at\": \"2019-02-20 15:32:02 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"JetMuffin\",\n    \"id\": 4486005,\n    \"node_id\": \"MDQ6VXNlcjQ0ODYwMDU=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/4486005?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jetmuffin\",\n    \"html_url\": \"https://github.com/jetmuffin\",\n    \"followers_url\": \"https://api.github.com/users/jetmuffin/followers\",\n    \"following_url\": \"https://api.github.com/users/jetmuffin/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jetmuffin/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jetmuffin/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jetmuffin/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jetmuffin/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jetmuffin/repos\",\n    \"events_url\": \"https://api.github.com/users/jetmuffin/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jetmuffin/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jeff Chen\",\n    \"company\": \"Nanjing University\",\n    \"blog\": \"http://jetmuffin.com\",\n    \"location\": \"Nanjing\",\n    \"email\": \"JetMuffin!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Master student of Nanjing University.\",\n    \"public_repos\": 72,\n    \"public_gists\": 0,\n    \"followers\": 40,\n    \"following\": 46,\n    \"created_at\": \"2013-05-21 05:48:15 UTC\",\n    \"updated_at\": \"2019-02-20 15:32:02 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"JoeyZwicker\",\n    \"id\": 1795008,\n    \"node_id\": \"MDQ6VXNlcjE3OTUwMDg=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1795008?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/JoeyZwicker\",\n    \"html_url\": \"https://github.com/JoeyZwicker\",\n    \"followers_url\": \"https://api.github.com/users/JoeyZwicker/followers\",\n    \"following_url\": \"https://api.github.com/users/JoeyZwicker/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/JoeyZwicker/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/JoeyZwicker/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/JoeyZwicker/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/JoeyZwicker/orgs\",\n    \"repos_url\": \"https://api.github.com/users/JoeyZwicker/repos\",\n    \"events_url\": \"https://api.github.com/users/JoeyZwicker/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/JoeyZwicker/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Joey Zwicker\",\n    \"company\": \"Pachyderm\",\n    \"blog\": \"\",\n    \"location\": \"United States\",\n    \"email\": \"JoeyZwicker!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Founder @ Pachyderm. Previously RethinkDB.\",\n    \"public_repos\": 3,\n    \"public_gists\": 0,\n    \"followers\": 50,\n    \"following\": 0,\n    \"created_at\": \"2012-05-30 19:17:11 UTC\",\n    \"updated_at\": \"2018-08-17 15:15:32 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"KaranKhirsariya\",\n    \"id\": 20911016,\n    \"node_id\": \"MDQ6VXNlcjIwOTExMDE2\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/20911016?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/KaranKhirsariya\",\n    \"html_url\": \"https://github.com/KaranKhirsariya\",\n    \"followers_url\": \"https://api.github.com/users/KaranKhirsariya/followers\",\n    \"following_url\": \"https://api.github.com/users/KaranKhirsariya/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/KaranKhirsariya/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/KaranKhirsariya/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/KaranKhirsariya/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/KaranKhirsariya/orgs\",\n    \"repos_url\": \"https://api.github.com/users/KaranKhirsariya/repos\",\n    \"events_url\": \"https://api.github.com/users/KaranKhirsariya/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/KaranKhirsariya/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Karan Khirsariya\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"India\",\n    \"email\": \"KaranKhirsariya!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 3,\n    \"created_at\": \"2016-08-08 17:42:05 UTC\",\n    \"updated_at\": \"2019-02-15 21:18:53 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"LisaFC\",\n    \"id\": 10744406,\n    \"node_id\": \"MDQ6VXNlcjEwNzQ0NDA2\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/10744406?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/LisaFC\",\n    \"html_url\": \"https://github.com/LisaFC\",\n    \"followers_url\": \"https://api.github.com/users/LisaFC/followers\",\n    \"following_url\": \"https://api.github.com/users/LisaFC/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/LisaFC/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/LisaFC/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/LisaFC/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/LisaFC/orgs\",\n    \"repos_url\": \"https://api.github.com/users/LisaFC/repos\",\n    \"events_url\": \"https://api.github.com/users/LisaFC/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/LisaFC/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Dublin\",\n    \"email\": \"LisaFC!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 23,\n    \"public_gists\": 0,\n    \"followers\": 7,\n    \"following\": 0,\n    \"created_at\": \"2015-01-28 16:35:13 UTC\",\n    \"updated_at\": \"2019-01-08 16:20:25 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"Luxas98\",\n    \"id\": 10009271,\n    \"node_id\": \"MDQ6VXNlcjEwMDA5Mjcx\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/10009271?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Luxas98\",\n    \"html_url\": \"https://github.com/Luxas98\",\n    \"followers_url\": \"https://api.github.com/users/Luxas98/followers\",\n    \"following_url\": \"https://api.github.com/users/Luxas98/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Luxas98/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Luxas98/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Luxas98/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Luxas98/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Luxas98/repos\",\n    \"events_url\": \"https://api.github.com/users/Luxas98/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Luxas98/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Lukas Chripko\",\n    \"company\": \"@HealthplusAI \",\n    \"blog\": \"healthplus.ai\",\n    \"location\": \"Amsterdam, Netherlands\",\n    \"email\": \"Luxas98!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 11,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2014-11-30 13:07:09 UTC\",\n    \"updated_at\": \"2019-01-24 20:56:00 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"Mack-y\",\n    \"id\": 42059538,\n    \"node_id\": \"MDQ6VXNlcjQyMDU5NTM4\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/42059538?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Mack-y\",\n    \"html_url\": \"https://github.com/Mack-y\",\n    \"followers_url\": \"https://api.github.com/users/Mack-y/followers\",\n    \"following_url\": \"https://api.github.com/users/Mack-y/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Mack-y/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Mack-y/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Mack-y/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Mack-y/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Mack-y/repos\",\n    \"events_url\": \"https://api.github.com/users/Mack-y/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Mack-y/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"Mack-y!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-08-03 07:48:32 UTC\",\n    \"updated_at\": \"2018-08-03 09:07:37 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"MatthiasHertel\",\n    \"id\": 8426566,\n    \"node_id\": \"MDQ6VXNlcjg0MjY1NjY=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/8426566?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/MatthiasHertel\",\n    \"html_url\": \"https://github.com/MatthiasHertel\",\n    \"followers_url\": \"https://api.github.com/users/MatthiasHertel/followers\",\n    \"following_url\": \"https://api.github.com/users/MatthiasHertel/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/MatthiasHertel/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/MatthiasHertel/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/MatthiasHertel/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/MatthiasHertel/orgs\",\n    \"repos_url\": \"https://api.github.com/users/MatthiasHertel/repos\",\n    \"events_url\": \"https://api.github.com/users/MatthiasHertel/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/MatthiasHertel/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Matthias Hertel\",\n    \"company\": null,\n    \"blog\": \"http://www.mhertel.de\",\n    \"location\": null,\n    \"email\": \"MatthiasHertel!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 28,\n    \"public_gists\": 0,\n    \"followers\": 17,\n    \"following\": 80,\n    \"created_at\": \"2014-08-12 10:10:57 UTC\",\n    \"updated_at\": \"2019-02-19 10:47:07 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"MichaelJiangPlus\",\n    \"id\": 13777168,\n    \"node_id\": \"MDQ6VXNlcjEzNzc3MTY4\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/13777168?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/MichaelJiangPlus\",\n    \"html_url\": \"https://github.com/MichaelJiangPlus\",\n    \"followers_url\": \"https://api.github.com/users/MichaelJiangPlus/followers\",\n    \"following_url\": \"https://api.github.com/users/MichaelJiangPlus/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/MichaelJiangPlus/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/MichaelJiangPlus/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/MichaelJiangPlus/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/MichaelJiangPlus/orgs\",\n    \"repos_url\": \"https://api.github.com/users/MichaelJiangPlus/repos\",\n    \"events_url\": \"https://api.github.com/users/MichaelJiangPlus/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/MichaelJiangPlus/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"MichaelJiang\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"MichaelJiangPlus!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 24,\n    \"public_gists\": 0,\n    \"followers\": 5,\n    \"following\": 6,\n    \"created_at\": \"2015-08-13 06:24:32 UTC\",\n    \"updated_at\": \"2019-01-09 12:52:19 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"Nick-Harvey\",\n    \"id\": 641094,\n    \"node_id\": \"MDQ6VXNlcjY0MTA5NA==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/641094?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Nick-Harvey\",\n    \"html_url\": \"https://github.com/Nick-Harvey\",\n    \"followers_url\": \"https://api.github.com/users/Nick-Harvey/followers\",\n    \"following_url\": \"https://api.github.com/users/Nick-Harvey/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Nick-Harvey/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Nick-Harvey/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Nick-Harvey/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Nick-Harvey/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Nick-Harvey/repos\",\n    \"events_url\": \"https://api.github.com/users/Nick-Harvey/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Nick-Harvey/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Nick Harvey\",\n    \"company\": \"Pachyderm\",\n    \"blog\": \"\",\n    \"location\": \"Raleigh NC\",\n    \"email\": \"Nick-Harvey!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 65,\n    \"public_gists\": 16,\n    \"followers\": 13,\n    \"following\": 5,\n    \"created_at\": \"2011-02-27 17:51:13 UTC\",\n    \"updated_at\": \"2019-01-31 17:28:50 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"nidhidamodaran\",\n    \"id\": 16361733,\n    \"node_id\": \"MDQ6VXNlcjE2MzYxNzMz\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/16361733?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/nidhidamodaran\",\n    \"html_url\": \"https://github.com/nidhidamodaran\",\n    \"followers_url\": \"https://api.github.com/users/nidhidamodaran/followers\",\n    \"following_url\": \"https://api.github.com/users/nidhidamodaran/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/nidhidamodaran/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/nidhidamodaran/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/nidhidamodaran/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/nidhidamodaran/orgs\",\n    \"repos_url\": \"https://api.github.com/users/nidhidamodaran/repos\",\n    \"events_url\": \"https://api.github.com/users/nidhidamodaran/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/nidhidamodaran/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Nidhi Damodaran \",\n    \"company\": \"@oneconvergence \",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"Nidhidamodaran!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2015-12-19 12:36:41 UTC\",\n    \"updated_at\": \"2019-02-20 13:05:27 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"Nidhidamodaran\",\n    \"id\": 16361733,\n    \"node_id\": \"MDQ6VXNlcjE2MzYxNzMz\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/16361733?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/nidhidamodaran\",\n    \"html_url\": \"https://github.com/nidhidamodaran\",\n    \"followers_url\": \"https://api.github.com/users/nidhidamodaran/followers\",\n    \"following_url\": \"https://api.github.com/users/nidhidamodaran/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/nidhidamodaran/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/nidhidamodaran/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/nidhidamodaran/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/nidhidamodaran/orgs\",\n    \"repos_url\": \"https://api.github.com/users/nidhidamodaran/repos\",\n    \"events_url\": \"https://api.github.com/users/nidhidamodaran/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/nidhidamodaran/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Nidhi Damodaran \",\n    \"company\": \"@oneconvergence \",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"Nidhidamodaran!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2015-12-19 12:36:41 UTC\",\n    \"updated_at\": \"2019-02-20 13:05:27 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"NikhilKanda\",\n    \"id\": 45870915,\n    \"node_id\": \"MDQ6VXNlcjQ1ODcwOTE1\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/45870915?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/NikhilKanda\",\n    \"html_url\": \"https://github.com/NikhilKanda\",\n    \"followers_url\": \"https://api.github.com/users/NikhilKanda/followers\",\n    \"following_url\": \"https://api.github.com/users/NikhilKanda/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/NikhilKanda/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/NikhilKanda/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/NikhilKanda/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/NikhilKanda/orgs\",\n    \"repos_url\": \"https://api.github.com/users/NikhilKanda/repos\",\n    \"events_url\": \"https://api.github.com/users/NikhilKanda/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/NikhilKanda/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Nikhil Kanda\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"NikhilKanda!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-12-14 08:48:22 UTC\",\n    \"updated_at\": \"2018-12-27 07:21:19 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"OonjuoO\",\n    \"id\": 16017096,\n    \"node_id\": \"MDQ6VXNlcjE2MDE3MDk2\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/16017096?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/OonjuoO\",\n    \"html_url\": \"https://github.com/OonjuoO\",\n    \"followers_url\": \"https://api.github.com/users/OonjuoO/followers\",\n    \"following_url\": \"https://api.github.com/users/OonjuoO/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/OonjuoO/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/OonjuoO/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/OonjuoO/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/OonjuoO/orgs\",\n    \"repos_url\": \"https://api.github.com/users/OonjuoO/repos\",\n    \"events_url\": \"https://api.github.com/users/OonjuoO/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/OonjuoO/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"ZHENGYING ZHANG\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"OonjuoO!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 8,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 3,\n    \"created_at\": \"2015-11-25 13:03:56 UTC\",\n    \"updated_at\": \"2019-01-03 14:16:43 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"PhilippeBarb\",\n    \"id\": 43236730,\n    \"node_id\": \"MDQ6VXNlcjQzMjM2NzMw\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/43236730?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/PhilippeBarb\",\n    \"html_url\": \"https://github.com/PhilippeBarb\",\n    \"followers_url\": \"https://api.github.com/users/PhilippeBarb/followers\",\n    \"following_url\": \"https://api.github.com/users/PhilippeBarb/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/PhilippeBarb/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/PhilippeBarb/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/PhilippeBarb/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/PhilippeBarb/orgs\",\n    \"repos_url\": \"https://api.github.com/users/PhilippeBarb/repos\",\n    \"events_url\": \"https://api.github.com/users/PhilippeBarb/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/PhilippeBarb/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"PhilippeBarb!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-09-13 10:03:19 UTC\",\n    \"updated_at\": \"2018-09-13 10:03:19 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"Raiyan111\",\n    \"id\": 44014470,\n    \"node_id\": \"MDQ6VXNlcjQ0MDE0NDcw\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/44014470?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Raiyan111\",\n    \"html_url\": \"https://github.com/Raiyan111\",\n    \"followers_url\": \"https://api.github.com/users/Raiyan111/followers\",\n    \"following_url\": \"https://api.github.com/users/Raiyan111/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Raiyan111/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Raiyan111/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Raiyan111/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Raiyan111/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Raiyan111/repos\",\n    \"events_url\": \"https://api.github.com/users/Raiyan111/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Raiyan111/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"Raiyan111!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-10-10 04:43:56 UTC\",\n    \"updated_at\": \"2018-10-14 22:20:25 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"RenaudWasTaken\",\n    \"id\": 2519571,\n    \"node_id\": \"MDQ6VXNlcjI1MTk1NzE=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/2519571?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/RenaudWasTaken\",\n    \"html_url\": \"https://github.com/RenaudWasTaken\",\n    \"followers_url\": \"https://api.github.com/users/RenaudWasTaken/followers\",\n    \"following_url\": \"https://api.github.com/users/RenaudWasTaken/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/RenaudWasTaken/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/RenaudWasTaken/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/RenaudWasTaken/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/RenaudWasTaken/orgs\",\n    \"repos_url\": \"https://api.github.com/users/RenaudWasTaken/repos\",\n    \"events_url\": \"https://api.github.com/users/RenaudWasTaken/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/RenaudWasTaken/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Renaud Gaubert\",\n    \"company\": \"Nvidia\",\n    \"blog\": \"\",\n    \"location\": \"Paris\",\n    \"email\": \"RenaudWasTaken!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Working on GPU integration in containers and orchestration engines\",\n    \"public_repos\": 14,\n    \"public_gists\": 0,\n    \"followers\": 39,\n    \"following\": 1,\n    \"created_at\": \"2012-10-09 11:40:05 UTC\",\n    \"updated_at\": \"2019-01-06 00:38:28 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"SeanNaren\",\n    \"id\": 6707363,\n    \"node_id\": \"MDQ6VXNlcjY3MDczNjM=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/6707363?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/SeanNaren\",\n    \"html_url\": \"https://github.com/SeanNaren\",\n    \"followers_url\": \"https://api.github.com/users/SeanNaren/followers\",\n    \"following_url\": \"https://api.github.com/users/SeanNaren/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/SeanNaren/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/SeanNaren/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/SeanNaren/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/SeanNaren/orgs\",\n    \"repos_url\": \"https://api.github.com/users/SeanNaren/repos\",\n    \"events_url\": \"https://api.github.com/users/SeanNaren/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/SeanNaren/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Sean Naren\",\n    \"company\": \"@digitalreasoning\",\n    \"blog\": \"\",\n    \"location\": \"London, UK\",\n    \"email\": \"SeanNaren!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 8,\n    \"public_gists\": 2,\n    \"followers\": 190,\n    \"following\": 38,\n    \"created_at\": \"2014-02-17 17:15:09 UTC\",\n    \"updated_at\": \"2019-01-25 21:39:42 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"ShahNewazKhan\",\n    \"id\": 3241700,\n    \"node_id\": \"MDQ6VXNlcjMyNDE3MDA=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/3241700?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ShahNewazKhan\",\n    \"html_url\": \"https://github.com/ShahNewazKhan\",\n    \"followers_url\": \"https://api.github.com/users/ShahNewazKhan/followers\",\n    \"following_url\": \"https://api.github.com/users/ShahNewazKhan/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ShahNewazKhan/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ShahNewazKhan/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ShahNewazKhan/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ShahNewazKhan/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ShahNewazKhan/repos\",\n    \"events_url\": \"https://api.github.com/users/ShahNewazKhan/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ShahNewazKhan/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Shah Newaz Khan\",\n    \"company\": null,\n    \"blog\": \"http://shahnewazkhan.ca/portfolio\",\n    \"location\": \"Vancouver\",\n    \"email\": \"ShahNewazKhan!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 45,\n    \"public_gists\": 0,\n    \"followers\": 4,\n    \"following\": 1,\n    \"created_at\": \"2013-01-11 05:53:43 UTC\",\n    \"updated_at\": \"2019-02-18 09:08:29 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"ShaswataJash\",\n    \"id\": 29448766,\n    \"node_id\": \"MDQ6VXNlcjI5NDQ4NzY2\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/29448766?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ShaswataJash\",\n    \"html_url\": \"https://github.com/ShaswataJash\",\n    \"followers_url\": \"https://api.github.com/users/ShaswataJash/followers\",\n    \"following_url\": \"https://api.github.com/users/ShaswataJash/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ShaswataJash/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ShaswataJash/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ShaswataJash/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ShaswataJash/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ShaswataJash/repos\",\n    \"events_url\": \"https://api.github.com/users/ShaswataJash/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ShaswataJash/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Shaswata Jash\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ShaswataJash!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2017-06-15 06:27:52 UTC\",\n    \"updated_at\": \"2019-02-02 06:48:59 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"Silentphantom62\",\n    \"id\": 38120935,\n    \"node_id\": \"MDQ6VXNlcjM4MTIwOTM1\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/38120935?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Silentphantom62\",\n    \"html_url\": \"https://github.com/Silentphantom62\",\n    \"followers_url\": \"https://api.github.com/users/Silentphantom62/followers\",\n    \"following_url\": \"https://api.github.com/users/Silentphantom62/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Silentphantom62/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Silentphantom62/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Silentphantom62/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Silentphantom62/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Silentphantom62/repos\",\n    \"events_url\": \"https://api.github.com/users/Silentphantom62/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Silentphantom62/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"Silentphantom62!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 2,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-04-06 02:25:28 UTC\",\n    \"updated_at\": \"2019-01-02 06:07:13 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"SinaChavoshi\",\n    \"id\": 20114005,\n    \"node_id\": \"MDQ6VXNlcjIwMTE0MDA1\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/20114005?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/SinaChavoshi\",\n    \"html_url\": \"https://github.com/SinaChavoshi\",\n    \"followers_url\": \"https://api.github.com/users/SinaChavoshi/followers\",\n    \"following_url\": \"https://api.github.com/users/SinaChavoshi/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/SinaChavoshi/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/SinaChavoshi/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/SinaChavoshi/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/SinaChavoshi/orgs\",\n    \"repos_url\": \"https://api.github.com/users/SinaChavoshi/repos\",\n    \"events_url\": \"https://api.github.com/users/SinaChavoshi/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/SinaChavoshi/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"sina chavoshi\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Washington state\",\n    \"email\": \"SinaChavoshi!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2016-06-23 16:53:56 UTC\",\n    \"updated_at\": \"2019-01-07 20:24:41 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"Smlight\",\n    \"id\": 3436211,\n    \"node_id\": \"MDQ6VXNlcjM0MzYyMTE=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/3436211?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Smlight\",\n    \"html_url\": \"https://github.com/Smlight\",\n    \"followers_url\": \"https://api.github.com/users/Smlight/followers\",\n    \"following_url\": \"https://api.github.com/users/Smlight/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Smlight/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Smlight/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Smlight/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Smlight/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Smlight/repos\",\n    \"events_url\": \"https://api.github.com/users/Smlight/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Smlight/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Andy Zheng\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Nanjing, Jiangsu\",\n    \"email\": \"Smlight!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"2015/09- Major in Computer Science at Hohai University\",\n    \"public_repos\": 10,\n    \"public_gists\": 0,\n    \"followers\": 24,\n    \"following\": 25,\n    \"created_at\": \"2013-01-31 08:26:33 UTC\",\n    \"updated_at\": \"2019-02-16 02:12:38 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"staugust\",\n    \"id\": 795370,\n    \"node_id\": \"MDQ6VXNlcjc5NTM3MA==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/795370?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/staugust\",\n    \"html_url\": \"https://github.com/staugust\",\n    \"followers_url\": \"https://api.github.com/users/staugust/followers\",\n    \"following_url\": \"https://api.github.com/users/staugust/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/staugust/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/staugust/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/staugust/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/staugust/orgs\",\n    \"repos_url\": \"https://api.github.com/users/staugust/repos\",\n    \"events_url\": \"https://api.github.com/users/staugust/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/staugust/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Augusto Yao\",\n    \"company\": \"SkyData\",\n    \"blog\": \"\",\n    \"location\": \"Nanjing\",\n    \"email\": \"StAugust!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 40,\n    \"public_gists\": 0,\n    \"followers\": 4,\n    \"following\": 3,\n    \"created_at\": \"2011-05-18 09:01:08 UTC\",\n    \"updated_at\": \"2018-12-13 02:17:11 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"StAugust\",\n    \"id\": 795370,\n    \"node_id\": \"MDQ6VXNlcjc5NTM3MA==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/795370?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/staugust\",\n    \"html_url\": \"https://github.com/staugust\",\n    \"followers_url\": \"https://api.github.com/users/staugust/followers\",\n    \"following_url\": \"https://api.github.com/users/staugust/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/staugust/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/staugust/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/staugust/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/staugust/orgs\",\n    \"repos_url\": \"https://api.github.com/users/staugust/repos\",\n    \"events_url\": \"https://api.github.com/users/staugust/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/staugust/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Augusto Yao\",\n    \"company\": \"SkyData\",\n    \"blog\": \"\",\n    \"location\": \"Nanjing\",\n    \"email\": \"StAugust!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 40,\n    \"public_gists\": 0,\n    \"followers\": 4,\n    \"following\": 3,\n    \"created_at\": \"2011-05-18 09:01:08 UTC\",\n    \"updated_at\": \"2018-12-13 02:17:11 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"StefanoFioravanzo\",\n    \"id\": 3354305,\n    \"node_id\": \"MDQ6VXNlcjMzNTQzMDU=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/3354305?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/StefanoFioravanzo\",\n    \"html_url\": \"https://github.com/StefanoFioravanzo\",\n    \"followers_url\": \"https://api.github.com/users/StefanoFioravanzo/followers\",\n    \"following_url\": \"https://api.github.com/users/StefanoFioravanzo/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/StefanoFioravanzo/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/StefanoFioravanzo/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/StefanoFioravanzo/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/StefanoFioravanzo/orgs\",\n    \"repos_url\": \"https://api.github.com/users/StefanoFioravanzo/repos\",\n    \"events_url\": \"https://api.github.com/users/StefanoFioravanzo/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/StefanoFioravanzo/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"StefanoFioravanzo\",\n    \"company\": \"Fondazione Bruno Kessler\",\n    \"blog\": \"https://mpba.fbk.eu\",\n    \"location\": \"@MPBA\",\n    \"email\": \"StefanoFioravanzo!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Tech Researcher @fbk \\\"Predictive Models for Biomedicine and Environment\\\" Lab @MPBA\",\n    \"public_repos\": 13,\n    \"public_gists\": 0,\n    \"followers\": 8,\n    \"following\": 0,\n    \"created_at\": \"2013-01-23 13:36:16 UTC\",\n    \"updated_at\": \"2019-02-18 14:48:59 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"Suozz\",\n    \"id\": 29419237,\n    \"node_id\": \"MDQ6VXNlcjI5NDE5MjM3\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/29419237?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Suozz\",\n    \"html_url\": \"https://github.com/Suozz\",\n    \"followers_url\": \"https://api.github.com/users/Suozz/followers\",\n    \"following_url\": \"https://api.github.com/users/Suozz/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Suozz/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Suozz/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Suozz/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Suozz/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Suozz/repos\",\n    \"events_url\": \"https://api.github.com/users/Suozz/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Suozz/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"Suozz!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 4,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2017-06-14 03:09:00 UTC\",\n    \"updated_at\": \"2019-02-15 03:30:19 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"TimCookny\",\n    \"id\": 46811841,\n    \"node_id\": \"MDQ6VXNlcjQ2ODExODQx\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/46811841?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/TimCookny\",\n    \"html_url\": \"https://github.com/TimCookny\",\n    \"followers_url\": \"https://api.github.com/users/TimCookny/followers\",\n    \"following_url\": \"https://api.github.com/users/TimCookny/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/TimCookny/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/TimCookny/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/TimCookny/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/TimCookny/orgs\",\n    \"repos_url\": \"https://api.github.com/users/TimCookny/repos\",\n    \"events_url\": \"https://api.github.com/users/TimCookny/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/TimCookny/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"TimCookny!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2019-01-18 09:30:30 UTC\",\n    \"updated_at\": \"2019-01-18 09:31:44 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"ToddMorrill\",\n    \"id\": 12600692,\n    \"node_id\": \"MDQ6VXNlcjEyNjAwNjky\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/12600692?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ToddMorrill\",\n    \"html_url\": \"https://github.com/ToddMorrill\",\n    \"followers_url\": \"https://api.github.com/users/ToddMorrill/followers\",\n    \"following_url\": \"https://api.github.com/users/ToddMorrill/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ToddMorrill/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ToddMorrill/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ToddMorrill/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ToddMorrill/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ToddMorrill/repos\",\n    \"events_url\": \"https://api.github.com/users/ToddMorrill/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ToddMorrill/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Todd Morrill\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ToddMorrill!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"https://toddmorrill.github.io/\",\n    \"public_repos\": 11,\n    \"public_gists\": 0,\n    \"followers\": 5,\n    \"following\": 1,\n    \"created_at\": \"2015-05-25 19:55:13 UTC\",\n    \"updated_at\": \"2019-02-01 04:21:08 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"TomReidNZ\",\n    \"id\": 20975110,\n    \"node_id\": \"MDQ6VXNlcjIwOTc1MTEw\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/20975110?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/TomReidNZ\",\n    \"html_url\": \"https://github.com/TomReidNZ\",\n    \"followers_url\": \"https://api.github.com/users/TomReidNZ/followers\",\n    \"following_url\": \"https://api.github.com/users/TomReidNZ/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/TomReidNZ/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/TomReidNZ/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/TomReidNZ/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/TomReidNZ/orgs\",\n    \"repos_url\": \"https://api.github.com/users/TomReidNZ/repos\",\n    \"events_url\": \"https://api.github.com/users/TomReidNZ/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/TomReidNZ/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Tom Reid\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Wellington, New Zealand\",\n    \"email\": \"TomReidNZ!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Hello\",\n    \"public_repos\": 5,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 3,\n    \"created_at\": \"2016-08-11 17:13:32 UTC\",\n    \"updated_at\": \"2019-01-23 15:54:40 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"Tomcli\",\n    \"id\": 10889249,\n    \"node_id\": \"MDQ6VXNlcjEwODg5MjQ5\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/10889249?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/Tomcli\",\n    \"html_url\": \"https://github.com/Tomcli\",\n    \"followers_url\": \"https://api.github.com/users/Tomcli/followers\",\n    \"following_url\": \"https://api.github.com/users/Tomcli/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/Tomcli/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/Tomcli/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/Tomcli/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/Tomcli/orgs\",\n    \"repos_url\": \"https://api.github.com/users/Tomcli/repos\",\n    \"events_url\": \"https://api.github.com/users/Tomcli/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/Tomcli/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Tommy Li\",\n    \"company\": \"@IBM - @CODAIT\",\n    \"blog\": \"https://www.linkedin.com/in/tommy-li415\",\n    \"location\": \"San Francisco, CA\",\n    \"email\": \"Tomcli!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Strongly interested in Cloud, Containers, Serverless, and Machine Learning.\",\n    \"public_repos\": 85,\n    \"public_gists\": 0,\n    \"followers\": 17,\n    \"following\": 6,\n    \"created_at\": \"2015-02-06 22:03:09 UTC\",\n    \"updated_at\": \"2019-01-25 15:38:41 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"TravisBuddy\",\n    \"id\": 33237381,\n    \"node_id\": \"MDQ6VXNlcjMzMjM3Mzgx\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/33237381?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/TravisBuddy\",\n    \"html_url\": \"https://github.com/TravisBuddy\",\n    \"followers_url\": \"https://api.github.com/users/TravisBuddy/followers\",\n    \"following_url\": \"https://api.github.com/users/TravisBuddy/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/TravisBuddy/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/TravisBuddy/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/TravisBuddy/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/TravisBuddy/orgs\",\n    \"repos_url\": \"https://api.github.com/users/TravisBuddy/repos\",\n    \"events_url\": \"https://api.github.com/users/TravisBuddy/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/TravisBuddy/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Travis Buddy\",\n    \"company\": \"@bluzi\",\n    \"blog\": \"https://www.travisbuddy.com/\",\n    \"location\": null,\n    \"email\": \"TravisBuddy!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 35,\n    \"public_gists\": 0,\n    \"followers\": 8,\n    \"following\": 1,\n    \"created_at\": \"2017-10-30 22:18:53 UTC\",\n    \"updated_at\": \"2018-11-02 21:47:29 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"WyattGorman\",\n    \"id\": 444043,\n    \"node_id\": \"MDQ6VXNlcjQ0NDA0Mw==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/444043?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/WyattGorman\",\n    \"html_url\": \"https://github.com/WyattGorman\",\n    \"followers_url\": \"https://api.github.com/users/WyattGorman/followers\",\n    \"following_url\": \"https://api.github.com/users/WyattGorman/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/WyattGorman/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/WyattGorman/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/WyattGorman/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/WyattGorman/orgs\",\n    \"repos_url\": \"https://api.github.com/users/WyattGorman/repos\",\n    \"events_url\": \"https://api.github.com/users/WyattGorman/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/WyattGorman/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Wyatt Gorman\",\n    \"company\": \"@GoogleCloudPlatform \",\n    \"blog\": \"wyattgorman.com\",\n    \"location\": null,\n    \"email\": \"WyattGorman!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"HPC Specialist at Google\",\n    \"public_repos\": 4,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2010-10-18 14:08:32 UTC\",\n    \"updated_at\": \"2019-02-08 15:11:20 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"YogeshSomawar\",\n    \"id\": 18458865,\n    \"node_id\": \"MDQ6VXNlcjE4NDU4ODY1\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/18458865?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/YogeshSomawar\",\n    \"html_url\": \"https://github.com/YogeshSomawar\",\n    \"followers_url\": \"https://api.github.com/users/YogeshSomawar/followers\",\n    \"following_url\": \"https://api.github.com/users/YogeshSomawar/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/YogeshSomawar/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/YogeshSomawar/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/YogeshSomawar/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/YogeshSomawar/orgs\",\n    \"repos_url\": \"https://api.github.com/users/YogeshSomawar/repos\",\n    \"events_url\": \"https://api.github.com/users/YogeshSomawar/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/YogeshSomawar/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"YogeshSomawar!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 8,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2016-04-14 08:11:47 UTC\",\n    \"updated_at\": \"2019-02-02 08:16:28 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"aaron-prindle\",\n    \"id\": 1951658,\n    \"node_id\": \"MDQ6VXNlcjE5NTE2NTg=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1951658?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/aaron-prindle\",\n    \"html_url\": \"https://github.com/aaron-prindle\",\n    \"followers_url\": \"https://api.github.com/users/aaron-prindle/followers\",\n    \"following_url\": \"https://api.github.com/users/aaron-prindle/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/aaron-prindle/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/aaron-prindle/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/aaron-prindle/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/aaron-prindle/orgs\",\n    \"repos_url\": \"https://api.github.com/users/aaron-prindle/repos\",\n    \"events_url\": \"https://api.github.com/users/aaron-prindle/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/aaron-prindle/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Aaron Prindle\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"United States\",\n    \"email\": \"aaron-prindle!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 56,\n    \"public_gists\": 51,\n    \"followers\": 19,\n    \"following\": 28,\n    \"created_at\": \"2012-07-10 18:10:54 UTC\",\n    \"updated_at\": \"2019-02-11 16:56:12 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"aganesan94\",\n    \"id\": 7484026,\n    \"node_id\": \"MDQ6VXNlcjc0ODQwMjY=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/7484026?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/aganesan94\",\n    \"html_url\": \"https://github.com/aganesan94\",\n    \"followers_url\": \"https://api.github.com/users/aganesan94/followers\",\n    \"following_url\": \"https://api.github.com/users/aganesan94/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/aganesan94/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/aganesan94/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/aganesan94/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/aganesan94/orgs\",\n    \"repos_url\": \"https://api.github.com/users/aganesan94/repos\",\n    \"events_url\": \"https://api.github.com/users/aganesan94/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/aganesan94/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Arun Ganesan\",\n    \"company\": \"Educational Testing Service\",\n    \"blog\": \"https://www.linkedin.com/in/arunpganesan\",\n    \"location\": \"Princeton, NJ\",\n    \"email\": \"aganesan94!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 22,\n    \"public_gists\": 4,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2014-05-05 02:06:34 UTC\",\n    \"updated_at\": \"2019-02-18 04:40:54 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"aichiludan\",\n    \"id\": 35359494,\n    \"node_id\": \"MDQ6VXNlcjM1MzU5NDk0\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/35359494?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/aichiludan\",\n    \"html_url\": \"https://github.com/aichiludan\",\n    \"followers_url\": \"https://api.github.com/users/aichiludan/followers\",\n    \"following_url\": \"https://api.github.com/users/aichiludan/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/aichiludan/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/aichiludan/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/aichiludan/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/aichiludan/orgs\",\n    \"repos_url\": \"https://api.github.com/users/aichiludan/repos\",\n    \"events_url\": \"https://api.github.com/users/aichiludan/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/aichiludan/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"aichiludan!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-01-12 05:15:45 UTC\",\n    \"updated_at\": \"2018-06-24 06:23:36 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"aisensiy\",\n    \"id\": 661860,\n    \"node_id\": \"MDQ6VXNlcjY2MTg2MA==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/661860?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/aisensiy\",\n    \"html_url\": \"https://github.com/aisensiy\",\n    \"followers_url\": \"https://api.github.com/users/aisensiy/followers\",\n    \"following_url\": \"https://api.github.com/users/aisensiy/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/aisensiy/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/aisensiy/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/aisensiy/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/aisensiy/orgs\",\n    \"repos_url\": \"https://api.github.com/users/aisensiy/repos\",\n    \"events_url\": \"https://api.github.com/users/aisensiy/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/aisensiy/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"aisensiy\",\n    \"company\": null,\n    \"blog\": \"https://aisensiy.github.io\",\n    \"location\": null,\n    \"email\": \"aisensiy!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 214,\n    \"public_gists\": 18,\n    \"followers\": 43,\n    \"following\": 40,\n    \"created_at\": \"2011-03-10 12:15:52 UTC\",\n    \"updated_at\": \"2019-01-28 13:42:19 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"ajayakumar-jayaraj\",\n    \"id\": 32649250,\n    \"node_id\": \"MDQ6VXNlcjMyNjQ5MjUw\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/32649250?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ajayakumar-jayaraj\",\n    \"html_url\": \"https://github.com/ajayakumar-jayaraj\",\n    \"followers_url\": \"https://api.github.com/users/ajayakumar-jayaraj/followers\",\n    \"following_url\": \"https://api.github.com/users/ajayakumar-jayaraj/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ajayakumar-jayaraj/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ajayakumar-jayaraj/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ajayakumar-jayaraj/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ajayakumar-jayaraj/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ajayakumar-jayaraj/repos\",\n    \"events_url\": \"https://api.github.com/users/ajayakumar-jayaraj/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ajayakumar-jayaraj/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ajayakumar-jayaraj!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2017-10-09 17:44:23 UTC\",\n    \"updated_at\": \"2019-01-03 22:05:09 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"akranga\",\n    \"id\": 5764667,\n    \"node_id\": \"MDQ6VXNlcjU3NjQ2Njc=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/5764667?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/akranga\",\n    \"html_url\": \"https://github.com/akranga\",\n    \"followers_url\": \"https://api.github.com/users/akranga/followers\",\n    \"following_url\": \"https://api.github.com/users/akranga/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/akranga/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/akranga/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/akranga/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/akranga/orgs\",\n    \"repos_url\": \"https://api.github.com/users/akranga/repos\",\n    \"events_url\": \"https://api.github.com/users/akranga/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/akranga/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Antons Kranga\",\n    \"company\": \"Agile Stacks\",\n    \"blog\": \"http://lv.linkedin.com/in/antonskranga\",\n    \"location\": \"Latvia\",\n    \"email\": \"akranga!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Director of Engineering at AgileStacks Inc.\",\n    \"public_repos\": 37,\n    \"public_gists\": 0,\n    \"followers\": 23,\n    \"following\": 8,\n    \"created_at\": \"2013-10-24 10:53:52 UTC\",\n    \"updated_at\": \"2019-01-01 10:37:50 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"akshaydtada\",\n    \"id\": 31499576,\n    \"node_id\": \"MDQ6VXNlcjMxNDk5NTc2\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/31499576?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/akshaydtada\",\n    \"html_url\": \"https://github.com/akshaydtada\",\n    \"followers_url\": \"https://api.github.com/users/akshaydtada/followers\",\n    \"following_url\": \"https://api.github.com/users/akshaydtada/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/akshaydtada/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/akshaydtada/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/akshaydtada/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/akshaydtada/orgs\",\n    \"repos_url\": \"https://api.github.com/users/akshaydtada/repos\",\n    \"events_url\": \"https://api.github.com/users/akshaydtada/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/akshaydtada/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"akshaydtada!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2017-08-31 05:16:51 UTC\",\n    \"updated_at\": \"2018-03-06 06:02:19 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"alan-krumholz\",\n    \"id\": 21314745,\n    \"node_id\": \"MDQ6VXNlcjIxMzE0NzQ1\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/21314745?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/alan-krumholz\",\n    \"html_url\": \"https://github.com/alan-krumholz\",\n    \"followers_url\": \"https://api.github.com/users/alan-krumholz/followers\",\n    \"following_url\": \"https://api.github.com/users/alan-krumholz/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/alan-krumholz/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/alan-krumholz/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/alan-krumholz/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/alan-krumholz/orgs\",\n    \"repos_url\": \"https://api.github.com/users/alan-krumholz/repos\",\n    \"events_url\": \"https://api.github.com/users/alan-krumholz/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/alan-krumholz/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"alan-krumholz!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 2,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2016-08-29 16:12:08 UTC\",\n    \"updated_at\": \"2019-01-11 17:49:36 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"alecglassford\",\n    \"id\": 1772874,\n    \"node_id\": \"MDQ6VXNlcjE3NzI4NzQ=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1772874?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/alecglassford\",\n    \"html_url\": \"https://github.com/alecglassford\",\n    \"followers_url\": \"https://api.github.com/users/alecglassford/followers\",\n    \"following_url\": \"https://api.github.com/users/alecglassford/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/alecglassford/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/alecglassford/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/alecglassford/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/alecglassford/orgs\",\n    \"repos_url\": \"https://api.github.com/users/alecglassford/repos\",\n    \"events_url\": \"https://api.github.com/users/alecglassford/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/alecglassford/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Alec Glassford\",\n    \"company\": null,\n    \"blog\": \"https://alecglassford.com\",\n    \"location\": \"Seattle\",\n    \"email\": \"alecglassford!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Journalist, technologist. Interested in finding + telling engaging stories (sometimes with computers).\",\n    \"public_repos\": 53,\n    \"public_gists\": 8,\n    \"followers\": 15,\n    \"following\": 33,\n    \"created_at\": \"2012-05-24 06:18:45 UTC\",\n    \"updated_at\": \"2019-02-16 15:26:56 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"alex-slynko\",\n    \"id\": 4385389,\n    \"node_id\": \"MDQ6VXNlcjQzODUzODk=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/4385389?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/alex-slynko\",\n    \"html_url\": \"https://github.com/alex-slynko\",\n    \"followers_url\": \"https://api.github.com/users/alex-slynko/followers\",\n    \"following_url\": \"https://api.github.com/users/alex-slynko/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/alex-slynko/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/alex-slynko/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/alex-slynko/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/alex-slynko/orgs\",\n    \"repos_url\": \"https://api.github.com/users/alex-slynko/repos\",\n    \"events_url\": \"https://api.github.com/users/alex-slynko/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/alex-slynko/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Oleksandr Slynko\",\n    \"company\": \"@pivotal-cf \",\n    \"blog\": \"htttp://slynko.wordpress.com\",\n    \"location\": \"Ireland\",\n    \"email\": \"alex-slynko!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Working at @pivotal on @cloudfoundry \",\n    \"public_repos\": 112,\n    \"public_gists\": 3,\n    \"followers\": 17,\n    \"following\": 17,\n    \"created_at\": \"2013-05-09 09:20:04 UTC\",\n    \"updated_at\": \"2019-02-12 09:35:35 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"alexmt\",\n    \"id\": 426437,\n    \"node_id\": \"MDQ6VXNlcjQyNjQzNw==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/426437?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/alexmt\",\n    \"html_url\": \"https://github.com/alexmt\",\n    \"followers_url\": \"https://api.github.com/users/alexmt/followers\",\n    \"following_url\": \"https://api.github.com/users/alexmt/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/alexmt/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/alexmt/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/alexmt/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/alexmt/orgs\",\n    \"repos_url\": \"https://api.github.com/users/alexmt/repos\",\n    \"events_url\": \"https://api.github.com/users/alexmt/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/alexmt/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Alexander Matyushentsev\",\n    \"company\": \"Intuit\",\n    \"blog\": \"http://amatyushentsev.com\",\n    \"location\": \"Santa Clara, CA\",\n    \"email\": \"alexmt!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 50,\n    \"public_gists\": 4,\n    \"followers\": 13,\n    \"following\": 2,\n    \"created_at\": \"2010-10-04 12:59:22 UTC\",\n    \"updated_at\": \"2019-02-20 18:35:12 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"alsrgv\",\n    \"id\": 16640218,\n    \"node_id\": \"MDQ6VXNlcjE2NjQwMjE4\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/16640218?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/alsrgv\",\n    \"html_url\": \"https://github.com/alsrgv\",\n    \"followers_url\": \"https://api.github.com/users/alsrgv/followers\",\n    \"following_url\": \"https://api.github.com/users/alsrgv/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/alsrgv/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/alsrgv/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/alsrgv/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/alsrgv/orgs\",\n    \"repos_url\": \"https://api.github.com/users/alsrgv/repos\",\n    \"events_url\": \"https://api.github.com/users/alsrgv/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/alsrgv/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Alex Sergeev\",\n    \"company\": \"@uber \",\n    \"blog\": \"https://www.linkedin.com/in/alsrgv/\",\n    \"location\": \"United States\",\n    \"email\": \"alsrgv!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 11,\n    \"public_gists\": 11,\n    \"followers\": 83,\n    \"following\": 3,\n    \"created_at\": \"2016-01-11 01:46:17 UTC\",\n    \"updated_at\": \"2019-02-06 07:19:05 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"alvisememo\",\n    \"id\": 16248427,\n    \"node_id\": \"MDQ6VXNlcjE2MjQ4NDI3\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/16248427?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/alvisememo\",\n    \"html_url\": \"https://github.com/alvisememo\",\n    \"followers_url\": \"https://api.github.com/users/alvisememo/followers\",\n    \"following_url\": \"https://api.github.com/users/alvisememo/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/alvisememo/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/alvisememo/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/alvisememo/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/alvisememo/orgs\",\n    \"repos_url\": \"https://api.github.com/users/alvisememo/repos\",\n    \"events_url\": \"https://api.github.com/users/alvisememo/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/alvisememo/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"https://alvisememo.github.io/\",\n    \"location\": \"Mountain View\",\n    \"email\": \"alvisememo!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 2,\n    \"created_at\": \"2015-12-11 00:58:39 UTC\",\n    \"updated_at\": \"2019-02-07 18:46:27 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"alzindiq\",\n    \"id\": 787601,\n    \"node_id\": \"MDQ6VXNlcjc4NzYwMQ==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/787601?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/alzindiq\",\n    \"html_url\": \"https://github.com/alzindiq\",\n    \"followers_url\": \"https://api.github.com/users/alzindiq/followers\",\n    \"following_url\": \"https://api.github.com/users/alzindiq/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/alzindiq/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/alzindiq/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/alzindiq/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/alzindiq/orgs\",\n    \"repos_url\": \"https://api.github.com/users/alzindiq/repos\",\n    \"events_url\": \"https://api.github.com/users/alzindiq/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/alzindiq/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"alzindiq\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"alzindiq!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 10,\n    \"public_gists\": 1,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2011-05-14 10:03:02 UTC\",\n    \"updated_at\": \"2018-12-29 17:39:49 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"amalow\",\n    \"id\": 13263909,\n    \"node_id\": \"MDQ6VXNlcjEzMjYzOTA5\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/13263909?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/amalow\",\n    \"html_url\": \"https://github.com/amalow\",\n    \"followers_url\": \"https://api.github.com/users/amalow/followers\",\n    \"following_url\": \"https://api.github.com/users/amalow/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/amalow/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/amalow/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/amalow/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/amalow/orgs\",\n    \"repos_url\": \"https://api.github.com/users/amalow/repos\",\n    \"events_url\": \"https://api.github.com/users/amalow/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/amalow/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Adam Malowiecki\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Tokyo, Japan\",\n    \"email\": \"amalow!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Interested in distributed systems, ML, functional programming\",\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 7,\n    \"following\": 2,\n    \"created_at\": \"2015-07-09 23:09:42 UTC\",\n    \"updated_at\": \"2019-01-17 04:55:00 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"amalts\",\n    \"id\": 7593826,\n    \"node_id\": \"MDQ6VXNlcjc1OTM4MjY=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/7593826?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/amalts\",\n    \"html_url\": \"https://github.com/amalts\",\n    \"followers_url\": \"https://api.github.com/users/amalts/followers\",\n    \"following_url\": \"https://api.github.com/users/amalts/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/amalts/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/amalts/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/amalts/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/amalts/orgs\",\n    \"repos_url\": \"https://api.github.com/users/amalts/repos\",\n    \"events_url\": \"https://api.github.com/users/amalts/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/amalts/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Amal T S\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"amalts!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 5,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 12,\n    \"created_at\": \"2014-05-15 15:31:59 UTC\",\n    \"updated_at\": \"2019-02-05 04:33:17 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"amq\",\n    \"id\": 4178389,\n    \"node_id\": \"MDQ6VXNlcjQxNzgzODk=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/4178389?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/amq\",\n    \"html_url\": \"https://github.com/amq\",\n    \"followers_url\": \"https://api.github.com/users/amq/followers\",\n    \"following_url\": \"https://api.github.com/users/amq/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/amq/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/amq/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/amq/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/amq/orgs\",\n    \"repos_url\": \"https://api.github.com/users/amq/repos\",\n    \"events_url\": \"https://api.github.com/users/amq/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/amq/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"amq!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 51,\n    \"public_gists\": 8,\n    \"followers\": 25,\n    \"following\": 3,\n    \"created_at\": \"2013-04-17 06:49:06 UTC\",\n    \"updated_at\": \"2019-02-18 19:11:59 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"analyticalmonk\",\n    \"id\": 4419448,\n    \"node_id\": \"MDQ6VXNlcjQ0MTk0NDg=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/4419448?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/analyticalmonk\",\n    \"html_url\": \"https://github.com/analyticalmonk\",\n    \"followers_url\": \"https://api.github.com/users/analyticalmonk/followers\",\n    \"following_url\": \"https://api.github.com/users/analyticalmonk/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/analyticalmonk/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/analyticalmonk/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/analyticalmonk/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/analyticalmonk/orgs\",\n    \"repos_url\": \"https://api.github.com/users/analyticalmonk/repos\",\n    \"events_url\": \"https://api.github.com/users/analyticalmonk/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/analyticalmonk/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Akash Tandon\",\n    \"company\": \"@socialcopsdev\",\n    \"blog\": \"akashtandon.com\",\n    \"location\": \"India\",\n    \"email\": \"analyticalmonk!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Hacks data @socialcopsdev -\\r\\n2xGSoC @rstats-gsoc. -\\r\\nAims to develop the I in A.I. \\r\\n:bulb: :heavy_plus_sign:  :computer:\",\n    \"public_repos\": 75,\n    \"public_gists\": 3,\n    \"followers\": 154,\n    \"following\": 43,\n    \"created_at\": \"2013-05-13 17:06:40 UTC\",\n    \"updated_at\": \"2019-01-27 16:43:57 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"andrewferlitsch\",\n    \"id\": 22892904,\n    \"node_id\": \"MDQ6VXNlcjIyODkyOTA0\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/22892904?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/andrewferlitsch\",\n    \"html_url\": \"https://github.com/andrewferlitsch\",\n    \"followers_url\": \"https://api.github.com/users/andrewferlitsch/followers\",\n    \"following_url\": \"https://api.github.com/users/andrewferlitsch/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/andrewferlitsch/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/andrewferlitsch/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/andrewferlitsch/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/andrewferlitsch/orgs\",\n    \"repos_url\": \"https://api.github.com/users/andrewferlitsch/repos\",\n    \"events_url\": \"https://api.github.com/users/andrewferlitsch/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/andrewferlitsch/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Andrew Ferlitsch\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Vancouver, WA\",\n    \"email\": \"andrewferlitsch!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 10,\n    \"public_gists\": 0,\n    \"followers\": 28,\n    \"following\": 0,\n    \"created_at\": \"2016-10-17 16:34:33 UTC\",\n    \"updated_at\": \"2019-02-10 01:17:13 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"andrewgdavis\",\n    \"id\": 11682851,\n    \"node_id\": \"MDQ6VXNlcjExNjgyODUx\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/11682851?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/andrewgdavis\",\n    \"html_url\": \"https://github.com/andrewgdavis\",\n    \"followers_url\": \"https://api.github.com/users/andrewgdavis/followers\",\n    \"following_url\": \"https://api.github.com/users/andrewgdavis/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/andrewgdavis/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/andrewgdavis/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/andrewgdavis/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/andrewgdavis/orgs\",\n    \"repos_url\": \"https://api.github.com/users/andrewgdavis/repos\",\n    \"events_url\": \"https://api.github.com/users/andrewgdavis/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/andrewgdavis/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"andrewgdavis!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 8,\n    \"public_gists\": 2,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2015-03-27 16:24:07 UTC\",\n    \"updated_at\": \"2019-01-11 18:34:03 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"andrewsykim\",\n    \"id\": 12699319,\n    \"node_id\": \"MDQ6VXNlcjEyNjk5MzE5\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/12699319?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/andrewsykim\",\n    \"html_url\": \"https://github.com/andrewsykim\",\n    \"followers_url\": \"https://api.github.com/users/andrewsykim/followers\",\n    \"following_url\": \"https://api.github.com/users/andrewsykim/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/andrewsykim/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/andrewsykim/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/andrewsykim/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/andrewsykim/orgs\",\n    \"repos_url\": \"https://api.github.com/users/andrewsykim/repos\",\n    \"events_url\": \"https://api.github.com/users/andrewsykim/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/andrewsykim/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Andrew Sy Kim\",\n    \"company\": \"@VMware\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"andrewsykim!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Open Source at VMware | Working on Kubernetes\",\n    \"public_repos\": 37,\n    \"public_gists\": 5,\n    \"followers\": 101,\n    \"following\": 4,\n    \"created_at\": \"2015-06-01 15:52:39 UTC\",\n    \"updated_at\": \"2019-02-01 02:45:32 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"andyk\",\n    \"id\": 228998,\n    \"node_id\": \"MDQ6VXNlcjIyODk5OA==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/228998?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/andyk\",\n    \"html_url\": \"https://github.com/andyk\",\n    \"followers_url\": \"https://api.github.com/users/andyk/followers\",\n    \"following_url\": \"https://api.github.com/users/andyk/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/andyk/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/andyk/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/andyk/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/andyk/orgs\",\n    \"repos_url\": \"https://api.github.com/users/andyk/repos\",\n    \"events_url\": \"https://api.github.com/users/andyk/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/andyk/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Andy Konwinski\",\n    \"company\": \"UC Berkeley\",\n    \"blog\": \"andykonwinski.com\",\n    \"location\": \"Berkeley CA\",\n    \"email\": \"andyk!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 22,\n    \"public_gists\": 0,\n    \"followers\": 200,\n    \"following\": 7,\n    \"created_at\": \"2010-03-23 21:39:53 UTC\",\n    \"updated_at\": \"2019-02-19 20:28:14 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"anilreddyv\",\n    \"id\": 6536927,\n    \"node_id\": \"MDQ6VXNlcjY1MzY5Mjc=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/6536927?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/anilreddyv\",\n    \"html_url\": \"https://github.com/anilreddyv\",\n    \"followers_url\": \"https://api.github.com/users/anilreddyv/followers\",\n    \"following_url\": \"https://api.github.com/users/anilreddyv/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/anilreddyv/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/anilreddyv/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/anilreddyv/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/anilreddyv/orgs\",\n    \"repos_url\": \"https://api.github.com/users/anilreddyv/repos\",\n    \"events_url\": \"https://api.github.com/users/anilreddyv/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/anilreddyv/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"anilreddyv!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 8,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2014-01-29 17:09:10 UTC\",\n    \"updated_at\": \"2019-02-13 12:29:43 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"anj-s\",\n    \"id\": 32556631,\n    \"node_id\": \"MDQ6VXNlcjMyNTU2NjMx\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/32556631?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/anj-s\",\n    \"html_url\": \"https://github.com/anj-s\",\n    \"followers_url\": \"https://api.github.com/users/anj-s/followers\",\n    \"following_url\": \"https://api.github.com/users/anj-s/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/anj-s/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/anj-s/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/anj-s/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/anj-s/orgs\",\n    \"repos_url\": \"https://api.github.com/users/anj-s/repos\",\n    \"events_url\": \"https://api.github.com/users/anj-s/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/anj-s/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"anj-s!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 4,\n    \"public_gists\": 2,\n    \"followers\": 71,\n    \"following\": 0,\n    \"created_at\": \"2017-10-05 22:18:32 UTC\",\n    \"updated_at\": \"2018-09-17 05:10:44 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"answer3y\",\n    \"id\": 5847972,\n    \"node_id\": \"MDQ6VXNlcjU4NDc5NzI=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/5847972?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/answer3y\",\n    \"html_url\": \"https://github.com/answer3y\",\n    \"followers_url\": \"https://api.github.com/users/answer3y/followers\",\n    \"following_url\": \"https://api.github.com/users/answer3y/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/answer3y/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/answer3y/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/answer3y/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/answer3y/orgs\",\n    \"repos_url\": \"https://api.github.com/users/answer3y/repos\",\n    \"events_url\": \"https://api.github.com/users/answer3y/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/answer3y/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"answer3y!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 10,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2013-11-04 05:14:27 UTC\",\n    \"updated_at\": \"2018-11-02 02:26:15 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"ant31\",\n    \"id\": 1044332,\n    \"node_id\": \"MDQ6VXNlcjEwNDQzMzI=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/1044332?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ant31\",\n    \"html_url\": \"https://github.com/ant31\",\n    \"followers_url\": \"https://api.github.com/users/ant31/followers\",\n    \"following_url\": \"https://api.github.com/users/ant31/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ant31/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ant31/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ant31/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ant31/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ant31/repos\",\n    \"events_url\": \"https://api.github.com/users/ant31/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ant31/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Antoine Legrand\",\n    \"company\": \"@coreos \",\n    \"blog\": \"\",\n    \"location\": \"Berlin\",\n    \"email\": \"ant31!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 55,\n    \"public_gists\": 8,\n    \"followers\": 85,\n    \"following\": 17,\n    \"created_at\": \"2011-09-12 12:57:22 UTC\",\n    \"updated_at\": \"2019-02-14 15:21:44 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"antigenius0910\",\n    \"id\": 5915590,\n    \"node_id\": \"MDQ6VXNlcjU5MTU1OTA=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/5915590?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/antigenius0910\",\n    \"html_url\": \"https://github.com/antigenius0910\",\n    \"followers_url\": \"https://api.github.com/users/antigenius0910/followers\",\n    \"following_url\": \"https://api.github.com/users/antigenius0910/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/antigenius0910/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/antigenius0910/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/antigenius0910/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/antigenius0910/orgs\",\n    \"repos_url\": \"https://api.github.com/users/antigenius0910/repos\",\n    \"events_url\": \"https://api.github.com/users/antigenius0910/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/antigenius0910/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"yen\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Austin\",\n    \"email\": \"antigenius0910!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Choose a problem to solve, not an idea to build.\",\n    \"public_repos\": 30,\n    \"public_gists\": 3,\n    \"followers\": 2,\n    \"following\": 8,\n    \"created_at\": \"2013-11-12 03:21:03 UTC\",\n    \"updated_at\": \"2019-02-01 17:40:54 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"apurva3000\",\n    \"id\": 6124928,\n    \"node_id\": \"MDQ6VXNlcjYxMjQ5Mjg=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/6124928?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/apurva3000\",\n    \"html_url\": \"https://github.com/apurva3000\",\n    \"followers_url\": \"https://api.github.com/users/apurva3000/followers\",\n    \"following_url\": \"https://api.github.com/users/apurva3000/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/apurva3000/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/apurva3000/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/apurva3000/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/apurva3000/orgs\",\n    \"repos_url\": \"https://api.github.com/users/apurva3000/repos\",\n    \"events_url\": \"https://api.github.com/users/apurva3000/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/apurva3000/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Apurva Nandan\",\n    \"company\": null,\n    \"blog\": \"apurva3000.github.io/techblog\",\n    \"location\": \"Helsinki, Finland\",\n    \"email\": \"apurva3000!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 19,\n    \"public_gists\": 0,\n    \"followers\": 5,\n    \"following\": 4,\n    \"created_at\": \"2013-12-06 18:11:45 UTC\",\n    \"updated_at\": \"2019-01-24 10:42:23 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"arinto\",\n    \"id\": 1780348,\n    \"node_id\": \"MDQ6VXNlcjE3ODAzNDg=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1780348?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/arinto\",\n    \"html_url\": \"https://github.com/arinto\",\n    \"followers_url\": \"https://api.github.com/users/arinto/followers\",\n    \"following_url\": \"https://api.github.com/users/arinto/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/arinto/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/arinto/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/arinto/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/arinto/orgs\",\n    \"repos_url\": \"https://api.github.com/users/arinto/repos\",\n    \"events_url\": \"https://api.github.com/users/arinto/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/arinto/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Arinto Murdopo\",\n    \"company\": \"@traveloka && @tvlk-data\",\n    \"blog\": \"www.otnira.com\",\n    \"location\": \"Singapore, Singapore\",\n    \"email\": \"arinto!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Muslim | Engineer @ Traveloka | Distributed Systems | Singapore \",\n    \"public_repos\": 43,\n    \"public_gists\": 11,\n    \"followers\": 33,\n    \"following\": 62,\n    \"created_at\": \"2012-05-26 08:49:53 UTC\",\n    \"updated_at\": \"2019-02-19 02:33:38 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"arllanos\",\n    \"id\": 4430885,\n    \"node_id\": \"MDQ6VXNlcjQ0MzA4ODU=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/4430885?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/arllanos\",\n    \"html_url\": \"https://github.com/arllanos\",\n    \"followers_url\": \"https://api.github.com/users/arllanos/followers\",\n    \"following_url\": \"https://api.github.com/users/arllanos/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/arllanos/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/arllanos/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/arllanos/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/arllanos/orgs\",\n    \"repos_url\": \"https://api.github.com/users/arllanos/repos\",\n    \"events_url\": \"https://api.github.com/users/arllanos/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/arllanos/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"arllanos!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 4,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2013-05-14 19:16:58 UTC\",\n    \"updated_at\": \"2019-01-07 18:48:33 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"armandmcqueen\",\n    \"id\": 13806811,\n    \"node_id\": \"MDQ6VXNlcjEzODA2ODEx\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/13806811?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/armandmcqueen\",\n    \"html_url\": \"https://github.com/armandmcqueen\",\n    \"followers_url\": \"https://api.github.com/users/armandmcqueen/followers\",\n    \"following_url\": \"https://api.github.com/users/armandmcqueen/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/armandmcqueen/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/armandmcqueen/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/armandmcqueen/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/armandmcqueen/orgs\",\n    \"repos_url\": \"https://api.github.com/users/armandmcqueen/repos\",\n    \"events_url\": \"https://api.github.com/users/armandmcqueen/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/armandmcqueen/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"armandmcqueen!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 11,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2015-08-15 06:23:08 UTC\",\n    \"updated_at\": \"2019-01-26 22:13:41 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"arun-gupta\",\n    \"id\": 113947,\n    \"node_id\": \"MDQ6VXNlcjExMzk0Nw==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/113947?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/arun-gupta\",\n    \"html_url\": \"https://github.com/arun-gupta\",\n    \"followers_url\": \"https://api.github.com/users/arun-gupta/followers\",\n    \"following_url\": \"https://api.github.com/users/arun-gupta/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/arun-gupta/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/arun-gupta/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/arun-gupta/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/arun-gupta/orgs\",\n    \"repos_url\": \"https://api.github.com/users/arun-gupta/repos\",\n    \"events_url\": \"https://api.github.com/users/arun-gupta/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/arun-gupta/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Arun Gupta\",\n    \"company\": \"Amazon Web Services\",\n    \"blog\": \"http://blog.arungupta.me\",\n    \"location\": \"San Jose, CA\",\n    \"email\": \"arun-gupta!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Java Champion, Docker Captain, JavaOne Rockstar, JUG Leader, Minecraft Modder, NetBeans Dream Teamer, Devoxx4Kids, Works at AWS\",\n    \"public_repos\": 143,\n    \"public_gists\": 78,\n    \"followers\": 2569,\n    \"following\": 0,\n    \"created_at\": \"2009-08-10 21:39:25 UTC\",\n    \"updated_at\": \"2019-02-06 20:07:12 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"asaydin\",\n    \"id\": 5859763,\n    \"node_id\": \"MDQ6VXNlcjU4NTk3NjM=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/5859763?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/asaydin\",\n    \"html_url\": \"https://github.com/asaydin\",\n    \"followers_url\": \"https://api.github.com/users/asaydin/followers\",\n    \"following_url\": \"https://api.github.com/users/asaydin/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/asaydin/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/asaydin/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/asaydin/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/asaydin/orgs\",\n    \"repos_url\": \"https://api.github.com/users/asaydin/repos\",\n    \"events_url\": \"https://api.github.com/users/asaydin/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/asaydin/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ali Selman Aydin\",\n    \"company\": \"Stony Brook University\",\n    \"blog\": \"http://aliselmanaydin.com\",\n    \"location\": \"Stony Brook, NY\",\n    \"email\": \"asaydin!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 20,\n    \"public_gists\": 0,\n    \"followers\": 18,\n    \"following\": 26,\n    \"created_at\": \"2013-11-05 12:10:17 UTC\",\n    \"updated_at\": \"2019-01-22 15:38:37 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"asdfsx\",\n    \"id\": 2292716,\n    \"node_id\": \"MDQ6VXNlcjIyOTI3MTY=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/2292716?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/asdfsx\",\n    \"html_url\": \"https://github.com/asdfsx\",\n    \"followers_url\": \"https://api.github.com/users/asdfsx/followers\",\n    \"following_url\": \"https://api.github.com/users/asdfsx/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/asdfsx/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/asdfsx/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/asdfsx/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/asdfsx/orgs\",\n    \"repos_url\": \"https://api.github.com/users/asdfsx/repos\",\n    \"events_url\": \"https://api.github.com/users/asdfsx/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/asdfsx/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"sam.sun\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"asdfsx!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 78,\n    \"public_gists\": 3,\n    \"followers\": 8,\n    \"following\": 38,\n    \"created_at\": \"2012-09-06 15:03:46 UTC\",\n    \"updated_at\": \"2019-01-28 06:57:02 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"ashishML\",\n    \"id\": 44034689,\n    \"node_id\": \"MDQ6VXNlcjQ0MDM0Njg5\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/44034689?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ashishML\",\n    \"html_url\": \"https://github.com/ashishML\",\n    \"followers_url\": \"https://api.github.com/users/ashishML/followers\",\n    \"following_url\": \"https://api.github.com/users/ashishML/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ashishML/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ashishML/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ashishML/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ashishML/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ashishML/repos\",\n    \"events_url\": \"https://api.github.com/users/ashishML/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ashishML/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ashishML!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2018-10-10 17:17:32 UTC\",\n    \"updated_at\": \"2019-02-08 18:55:15 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"ashokramadass\",\n    \"id\": 23348003,\n    \"node_id\": \"MDQ6VXNlcjIzMzQ4MDAz\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/23348003?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ashokramadass\",\n    \"html_url\": \"https://github.com/ashokramadass\",\n    \"followers_url\": \"https://api.github.com/users/ashokramadass/followers\",\n    \"following_url\": \"https://api.github.com/users/ashokramadass/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ashokramadass/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ashokramadass/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ashokramadass/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ashokramadass/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ashokramadass/repos\",\n    \"events_url\": \"https://api.github.com/users/ashokramadass/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ashokramadass/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ashok Ramadass\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ashokramadass!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 7,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 1,\n    \"created_at\": \"2016-11-08 23:53:39 UTC\",\n    \"updated_at\": \"2019-01-07 15:07:48 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"bajacondor\",\n    \"id\": 8441393,\n    \"node_id\": \"MDQ6VXNlcjg0NDEzOTM=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/8441393?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/bajacondor\",\n    \"html_url\": \"https://github.com/bajacondor\",\n    \"followers_url\": \"https://api.github.com/users/bajacondor/followers\",\n    \"following_url\": \"https://api.github.com/users/bajacondor/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/bajacondor/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/bajacondor/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/bajacondor/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/bajacondor/orgs\",\n    \"repos_url\": \"https://api.github.com/users/bajacondor/repos\",\n    \"events_url\": \"https://api.github.com/users/bajacondor/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/bajacondor/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"David Schile\",\n    \"company\": \"Nordstrom\",\n    \"blog\": \"\",\n    \"location\": \"Seattle, WA\",\n    \"email\": \"bajacondor!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 15,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2014-08-13 18:37:26 UTC\",\n    \"updated_at\": \"2018-11-13 04:13:47 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"bbarn3y\",\n    \"id\": 8375284,\n    \"node_id\": \"MDQ6VXNlcjgzNzUyODQ=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/8375284?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/bbarn3y\",\n    \"html_url\": \"https://github.com/bbarn3y\",\n    \"followers_url\": \"https://api.github.com/users/bbarn3y/followers\",\n    \"following_url\": \"https://api.github.com/users/bbarn3y/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/bbarn3y/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/bbarn3y/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/bbarn3y/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/bbarn3y/orgs\",\n    \"repos_url\": \"https://api.github.com/users/bbarn3y/repos\",\n    \"events_url\": \"https://api.github.com/users/bbarn3y/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/bbarn3y/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"bbarn3y!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 2,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2014-08-06 14:24:38 UTC\",\n    \"updated_at\": \"2019-01-07 17:41:31 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"bbarnes52\",\n    \"id\": 5430846,\n    \"node_id\": \"MDQ6VXNlcjU0MzA4NDY=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/5430846?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/bbarnes52\",\n    \"html_url\": \"https://github.com/bbarnes52\",\n    \"followers_url\": \"https://api.github.com/users/bbarnes52/followers\",\n    \"following_url\": \"https://api.github.com/users/bbarnes52/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/bbarnes52/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/bbarnes52/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/bbarnes52/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/bbarnes52/orgs\",\n    \"repos_url\": \"https://api.github.com/users/bbarnes52/repos\",\n    \"events_url\": \"https://api.github.com/users/bbarnes52/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/bbarnes52/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"bbarnes52!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 27,\n    \"public_gists\": 0,\n    \"followers\": 5,\n    \"following\": 0,\n    \"created_at\": \"2013-09-10 21:37:33 UTC\",\n    \"updated_at\": \"2019-02-19 22:01:13 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"benhamner\",\n    \"id\": 582878,\n    \"node_id\": \"MDQ6VXNlcjU4Mjg3OA==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/582878?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/benhamner\",\n    \"html_url\": \"https://github.com/benhamner\",\n    \"followers_url\": \"https://api.github.com/users/benhamner/followers\",\n    \"following_url\": \"https://api.github.com/users/benhamner/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/benhamner/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/benhamner/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/benhamner/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/benhamner/orgs\",\n    \"repos_url\": \"https://api.github.com/users/benhamner/repos\",\n    \"events_url\": \"https://api.github.com/users/benhamner/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/benhamner/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ben Hamner\",\n    \"company\": \"Kaggle\",\n    \"blog\": \"twitter.com/benhamner\",\n    \"location\": \"San Francisco, CA\",\n    \"email\": \"benhamner!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Co-founder and CTO of Kaggle\",\n    \"public_repos\": 75,\n    \"public_gists\": 1,\n    \"followers\": 1090,\n    \"following\": 21,\n    \"created_at\": \"2011-01-25 15:25:19 UTC\",\n    \"updated_at\": \"2018-10-31 23:59:28 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"benjaminhuo\",\n    \"id\": 18525465,\n    \"node_id\": \"MDQ6VXNlcjE4NTI1NDY1\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/18525465?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/benjaminhuo\",\n    \"html_url\": \"https://github.com/benjaminhuo\",\n    \"followers_url\": \"https://api.github.com/users/benjaminhuo/followers\",\n    \"following_url\": \"https://api.github.com/users/benjaminhuo/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/benjaminhuo/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/benjaminhuo/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/benjaminhuo/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/benjaminhuo/orgs\",\n    \"repos_url\": \"https://api.github.com/users/benjaminhuo/repos\",\n    \"events_url\": \"https://api.github.com/users/benjaminhuo/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/benjaminhuo/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Benjamin Huo\",\n    \"company\": \"@yunify @QingCloudAppcenter @openpitrix \",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"benjaminhuo!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 8,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 1,\n    \"created_at\": \"2016-04-18 07:11:01 UTC\",\n    \"updated_at\": \"2018-12-04 14:47:50 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"bhack\",\n    \"id\": 1710528,\n    \"node_id\": \"MDQ6VXNlcjE3MTA1Mjg=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1710528?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/bhack\",\n    \"html_url\": \"https://github.com/bhack\",\n    \"followers_url\": \"https://api.github.com/users/bhack/followers\",\n    \"following_url\": \"https://api.github.com/users/bhack/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/bhack/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/bhack/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/bhack/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/bhack/orgs\",\n    \"repos_url\": \"https://api.github.com/users/bhack/repos\",\n    \"events_url\": \"https://api.github.com/users/bhack/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/bhack/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"bhack!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 37,\n    \"public_gists\": 4,\n    \"followers\": 80,\n    \"following\": 29,\n    \"created_at\": \"2012-05-06 12:17:54 UTC\",\n    \"updated_at\": \"2018-11-17 04:01:10 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"bjones325\",\n    \"id\": 3990412,\n    \"node_id\": \"MDQ6VXNlcjM5OTA0MTI=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/3990412?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/bjones325\",\n    \"html_url\": \"https://github.com/bjones325\",\n    \"followers_url\": \"https://api.github.com/users/bjones325/followers\",\n    \"following_url\": \"https://api.github.com/users/bjones325/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/bjones325/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/bjones325/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/bjones325/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/bjones325/orgs\",\n    \"repos_url\": \"https://api.github.com/users/bjones325/repos\",\n    \"events_url\": \"https://api.github.com/users/bjones325/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/bjones325/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Blake Jones\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Atlanta, GA\",\n    \"email\": \"bjones325!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 4,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2013-03-28 00:33:27 UTC\",\n    \"updated_at\": \"2019-01-10 00:32:00 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"bkungfoo\",\n    \"id\": 3732627,\n    \"node_id\": \"MDQ6VXNlcjM3MzI2Mjc=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/3732627?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/bkungfoo\",\n    \"html_url\": \"https://github.com/bkungfoo\",\n    \"followers_url\": \"https://api.github.com/users/bkungfoo/followers\",\n    \"following_url\": \"https://api.github.com/users/bkungfoo/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/bkungfoo/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/bkungfoo/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/bkungfoo/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/bkungfoo/orgs\",\n    \"repos_url\": \"https://api.github.com/users/bkungfoo/repos\",\n    \"events_url\": \"https://api.github.com/users/bkungfoo/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/bkungfoo/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Brian Foo\",\n    \"company\": \"@google \",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"bkungfoo!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 9,\n    \"public_gists\": 0,\n    \"followers\": 5,\n    \"following\": 0,\n    \"created_at\": \"2013-03-01 00:09:50 UTC\",\n    \"updated_at\": \"2018-06-12 18:47:04 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"bleachzk\",\n    \"id\": 5548534,\n    \"node_id\": \"MDQ6VXNlcjU1NDg1MzQ=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/5548534?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/bleachzk\",\n    \"html_url\": \"https://github.com/bleachzk\",\n    \"followers_url\": \"https://api.github.com/users/bleachzk/followers\",\n    \"following_url\": \"https://api.github.com/users/bleachzk/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/bleachzk/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/bleachzk/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/bleachzk/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/bleachzk/orgs\",\n    \"repos_url\": \"https://api.github.com/users/bleachzk/repos\",\n    \"events_url\": \"https://api.github.com/users/bleachzk/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/bleachzk/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"bleachzk!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 34,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2013-09-26 09:57:55 UTC\",\n    \"updated_at\": \"2019-02-15 06:48:43 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"blsaws\",\n    \"id\": 218833,\n    \"node_id\": \"MDQ6VXNlcjIxODgzMw==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/218833?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/blsaws\",\n    \"html_url\": \"https://github.com/blsaws\",\n    \"followers_url\": \"https://api.github.com/users/blsaws/followers\",\n    \"following_url\": \"https://api.github.com/users/blsaws/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/blsaws/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/blsaws/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/blsaws/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/blsaws/orgs\",\n    \"repos_url\": \"https://api.github.com/users/blsaws/repos\",\n    \"events_url\": \"https://api.github.com/users/blsaws/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/blsaws/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"http://bkaj.net\",\n    \"location\": null,\n    \"email\": \"blsaws!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 26,\n    \"public_gists\": 0,\n    \"followers\": 9,\n    \"following\": 0,\n    \"created_at\": \"2010-03-09 04:56:28 UTC\",\n    \"updated_at\": \"2019-02-17 04:23:04 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"bmenn\",\n    \"id\": 5544669,\n    \"node_id\": \"MDQ6VXNlcjU1NDQ2Njk=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/5544669?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/bmenn\",\n    \"html_url\": \"https://github.com/bmenn\",\n    \"followers_url\": \"https://api.github.com/users/bmenn/followers\",\n    \"following_url\": \"https://api.github.com/users/bmenn/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/bmenn/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/bmenn/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/bmenn/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/bmenn/orgs\",\n    \"repos_url\": \"https://api.github.com/users/bmenn/repos\",\n    \"events_url\": \"https://api.github.com/users/bmenn/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/bmenn/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Bryant Menn\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"bmenn!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 25,\n    \"public_gists\": 0,\n    \"followers\": 4,\n    \"following\": 0,\n    \"created_at\": \"2013-09-25 20:59:29 UTC\",\n    \"updated_at\": \"2018-12-31 04:40:39 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"bmv3cg\",\n    \"id\": 45137259,\n    \"node_id\": \"MDQ6VXNlcjQ1MTM3MjU5\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/45137259?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/bmv3cg\",\n    \"html_url\": \"https://github.com/bmv3cg\",\n    \"followers_url\": \"https://api.github.com/users/bmv3cg/followers\",\n    \"following_url\": \"https://api.github.com/users/bmv3cg/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/bmv3cg/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/bmv3cg/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/bmv3cg/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/bmv3cg/orgs\",\n    \"repos_url\": \"https://api.github.com/users/bmv3cg/repos\",\n    \"events_url\": \"https://api.github.com/users/bmv3cg/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/bmv3cg/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"bmv3cg!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 13,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-11-18 05:52:01 UTC\",\n    \"updated_at\": \"2018-12-31 13:58:31 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"boersmamarcel\",\n    \"id\": 437773,\n    \"node_id\": \"MDQ6VXNlcjQzNzc3Mw==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/437773?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/boersmamarcel\",\n    \"html_url\": \"https://github.com/boersmamarcel\",\n    \"followers_url\": \"https://api.github.com/users/boersmamarcel/followers\",\n    \"following_url\": \"https://api.github.com/users/boersmamarcel/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/boersmamarcel/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/boersmamarcel/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/boersmamarcel/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/boersmamarcel/orgs\",\n    \"repos_url\": \"https://api.github.com/users/boersmamarcel/repos\",\n    \"events_url\": \"https://api.github.com/users/boersmamarcel/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/boersmamarcel/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Marcel Boersma\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"The Netherlands\",\n    \"email\": \"boersmamarcel!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 32,\n    \"public_gists\": 7,\n    \"followers\": 12,\n    \"following\": 10,\n    \"created_at\": \"2010-10-13 09:57:35 UTC\",\n    \"updated_at\": \"2019-02-15 20:54:53 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"bricef\",\n    \"id\": 250051,\n    \"node_id\": \"MDQ6VXNlcjI1MDA1MQ==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/250051?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/bricef\",\n    \"html_url\": \"https://github.com/bricef\",\n    \"followers_url\": \"https://api.github.com/users/bricef/followers\",\n    \"following_url\": \"https://api.github.com/users/bricef/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/bricef/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/bricef/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/bricef/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/bricef/orgs\",\n    \"repos_url\": \"https://api.github.com/users/bricef/repos\",\n    \"events_url\": \"https://api.github.com/users/bricef/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/bricef/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Brice Fernandes\",\n    \"company\": null,\n    \"blog\": \"http://www.fractallambda.com\",\n    \"location\": \"London, UK\",\n    \"email\": \"bricef!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 78,\n    \"public_gists\": 48,\n    \"followers\": 219,\n    \"following\": 34,\n    \"created_at\": \"2010-04-22 17:29:28 UTC\",\n    \"updated_at\": \"2019-01-18 16:33:29 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"brucechin\",\n    \"id\": 17612067,\n    \"node_id\": \"MDQ6VXNlcjE3NjEyMDY3\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/17612067?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/brucechin\",\n    \"html_url\": \"https://github.com/brucechin\",\n    \"followers_url\": \"https://api.github.com/users/brucechin/followers\",\n    \"following_url\": \"https://api.github.com/users/brucechin/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/brucechin/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/brucechin/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/brucechin/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/brucechin/orgs\",\n    \"repos_url\": \"https://api.github.com/users/brucechin/repos\",\n    \"events_url\": \"https://api.github.com/users/brucechin/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/brucechin/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Lianke Qin\",\n    \"company\": \"Alibaba->Alipay->OceanBase Team\",\n    \"blog\": \"\",\n    \"location\": \"Shanghai/Beijing\",\n    \"email\": \"brucechin!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Shanghai Jiao Tong University \\r\\nSE undergrad. Looking for 19 fall Ph.D program in distributed storage / database system and its security concerns\\r\\n\",\n    \"public_repos\": 38,\n    \"public_gists\": 0,\n    \"followers\": 46,\n    \"following\": 114,\n    \"created_at\": \"2016-03-03 08:38:58 UTC\",\n    \"updated_at\": \"2019-02-08 15:47:40 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"bryanl\",\n    \"id\": 240,\n    \"node_id\": \"MDQ6VXNlcjI0MA==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/240?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/bryanl\",\n    \"html_url\": \"https://github.com/bryanl\",\n    \"followers_url\": \"https://api.github.com/users/bryanl/followers\",\n    \"following_url\": \"https://api.github.com/users/bryanl/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/bryanl/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/bryanl/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/bryanl/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/bryanl/orgs\",\n    \"repos_url\": \"https://api.github.com/users/bryanl/repos\",\n    \"events_url\": \"https://api.github.com/users/bryanl/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/bryanl/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Bryan Liles\",\n    \"company\": null,\n    \"blog\": \"http://smartic.us\",\n    \"location\": \"Baltimore, MD\",\n    \"email\": \"bryanl!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"I write software and I like computrers and I don't like spell check\",\n    \"public_repos\": 185,\n    \"public_gists\": 287,\n    \"followers\": 323,\n    \"following\": 7,\n    \"created_at\": \"2008-02-13 18:25:53 UTC\",\n    \"updated_at\": \"2019-01-30 23:12:43 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"byronyi\",\n    \"id\": 2613663,\n    \"node_id\": \"MDQ6VXNlcjI2MTM2NjM=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/2613663?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/byronyi\",\n    \"html_url\": \"https://github.com/byronyi\",\n    \"followers_url\": \"https://api.github.com/users/byronyi/followers\",\n    \"following_url\": \"https://api.github.com/users/byronyi/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/byronyi/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/byronyi/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/byronyi/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/byronyi/orgs\",\n    \"repos_url\": \"https://api.github.com/users/byronyi/repos\",\n    \"events_url\": \"https://api.github.com/users/byronyi/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/byronyi/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Bairen Yi\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Beijing\",\n    \"email\": \"byronyi!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 8,\n    \"public_gists\": 63,\n    \"followers\": 65,\n    \"following\": 160,\n    \"created_at\": \"2012-10-21 16:20:52 UTC\",\n    \"updated_at\": \"2019-02-11 18:46:12 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"(Unknown)\"\n  },\n  {\n    \"login\": \"caijimin\",\n    \"id\": 131171,\n    \"node_id\": \"MDQ6VXNlcjEzMTE3MQ==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/131171?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/caijimin\",\n    \"html_url\": \"https://github.com/caijimin\",\n    \"followers_url\": \"https://api.github.com/users/caijimin/followers\",\n    \"following_url\": \"https://api.github.com/users/caijimin/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/caijimin/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/caijimin/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/caijimin/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/caijimin/orgs\",\n    \"repos_url\": \"https://api.github.com/users/caijimin/repos\",\n    \"events_url\": \"https://api.github.com/users/caijimin/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/caijimin/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Cai Jimin\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Beijing\",\n    \"email\": \"caijimin!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 5,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2009-09-25 10:29:03 UTC\",\n    \"updated_at\": \"2019-02-19 02:08:46 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"carmat88\",\n    \"id\": 26251075,\n    \"node_id\": \"MDQ6VXNlcjI2MjUxMDc1\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/26251075?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/carmat88\",\n    \"html_url\": \"https://github.com/carmat88\",\n    \"followers_url\": \"https://api.github.com/users/carmat88/followers\",\n    \"following_url\": \"https://api.github.com/users/carmat88/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/carmat88/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/carmat88/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/carmat88/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/carmat88/orgs\",\n    \"repos_url\": \"https://api.github.com/users/carmat88/repos\",\n    \"events_url\": \"https://api.github.com/users/carmat88/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/carmat88/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"carmat88\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"carmat88!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2017-03-07 13:06:15 UTC\",\n    \"updated_at\": \"2019-02-11 13:29:41 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"cchung100m\",\n    \"id\": 6762509,\n    \"node_id\": \"MDQ6VXNlcjY3NjI1MDk=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/6762509?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/cchung100m\",\n    \"html_url\": \"https://github.com/cchung100m\",\n    \"followers_url\": \"https://api.github.com/users/cchung100m/followers\",\n    \"following_url\": \"https://api.github.com/users/cchung100m/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/cchung100m/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/cchung100m/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/cchung100m/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/cchung100m/orgs\",\n    \"repos_url\": \"https://api.github.com/users/cchung100m/repos\",\n    \"events_url\": \"https://api.github.com/users/cchung100m/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/cchung100m/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Neil Chien\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"cchung100m!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 10,\n    \"public_gists\": 1,\n    \"followers\": 2,\n    \"following\": 11,\n    \"created_at\": \"2014-02-23 11:30:41 UTC\",\n    \"updated_at\": \"2019-02-13 15:33:09 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"cfregly\",\n    \"id\": 1438064,\n    \"node_id\": \"MDQ6VXNlcjE0MzgwNjQ=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1438064?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/cfregly\",\n    \"html_url\": \"https://github.com/cfregly\",\n    \"followers_url\": \"https://api.github.com/users/cfregly/followers\",\n    \"following_url\": \"https://api.github.com/users/cfregly/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/cfregly/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/cfregly/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/cfregly/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/cfregly/orgs\",\n    \"repos_url\": \"https://api.github.com/users/cfregly/repos\",\n    \"events_url\": \"https://api.github.com/users/cfregly/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/cfregly/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Chris Fregly\",\n    \"company\": \"PipelineAI\",\n    \"blog\": \"http://pipeline.ai\",\n    \"location\": \"San Francisco, CA\",\n    \"email\": \"cfregly!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Founder & CEO @PipelineAI, Apache Spark Contributor, Advanced Spark TensorFlow Meetup Founder, High Performance Tensorflow Author, ex-Netflix, Databricks\",\n    \"public_repos\": 171,\n    \"public_gists\": 1,\n    \"followers\": 472,\n    \"following\": 228,\n    \"created_at\": \"2012-02-14 21:49:34 UTC\",\n    \"updated_at\": \"2019-02-20 00:41:20 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"charlesa101\",\n    \"id\": 445532,\n    \"node_id\": \"MDQ6VXNlcjQ0NTUzMg==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/445532?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/charlesa101\",\n    \"html_url\": \"https://github.com/charlesa101\",\n    \"followers_url\": \"https://api.github.com/users/charlesa101/followers\",\n    \"following_url\": \"https://api.github.com/users/charlesa101/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/charlesa101/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/charlesa101/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/charlesa101/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/charlesa101/orgs\",\n    \"repos_url\": \"https://api.github.com/users/charlesa101/repos\",\n    \"events_url\": \"https://api.github.com/users/charlesa101/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/charlesa101/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"charles adetiloye\",\n    \"company\": \"MavenCode\",\n    \"blog\": \"mavencode.com\",\n    \"location\": \"Texas\",\n    \"email\": \"charlesa101!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 58,\n    \"public_gists\": 14,\n    \"followers\": 15,\n    \"following\": 57,\n    \"created_at\": \"2010-10-19 14:47:40 UTC\",\n    \"updated_at\": \"2019-02-12 16:39:15 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"chennupushkar\",\n    \"id\": 26375467,\n    \"node_id\": \"MDQ6VXNlcjI2Mzc1NDY3\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/26375467?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/chennupushkar\",\n    \"html_url\": \"https://github.com/chennupushkar\",\n    \"followers_url\": \"https://api.github.com/users/chennupushkar/followers\",\n    \"following_url\": \"https://api.github.com/users/chennupushkar/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/chennupushkar/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/chennupushkar/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/chennupushkar/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/chennupushkar/orgs\",\n    \"repos_url\": \"https://api.github.com/users/chennupushkar/repos\",\n    \"events_url\": \"https://api.github.com/users/chennupushkar/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/chennupushkar/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Pushkar Chennu\",\n    \"company\": \"Mr\",\n    \"blog\": \"\",\n    \"location\": \"Santa Clara\",\n    \"email\": \"chennupushkar!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"BigData, Hadoop, Google Cloud Platform\",\n    \"public_repos\": 2,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2017-03-13 07:16:43 UTC\",\n    \"updated_at\": \"2019-01-14 19:52:10 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"chrisheecho\",\n    \"id\": 10987336,\n    \"node_id\": \"MDQ6VXNlcjEwOTg3MzM2\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/10987336?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/chrisheecho\",\n    \"html_url\": \"https://github.com/chrisheecho\",\n    \"followers_url\": \"https://api.github.com/users/chrisheecho/followers\",\n    \"following_url\": \"https://api.github.com/users/chrisheecho/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/chrisheecho/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/chrisheecho/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/chrisheecho/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/chrisheecho/orgs\",\n    \"repos_url\": \"https://api.github.com/users/chrisheecho/repos\",\n    \"events_url\": \"https://api.github.com/users/chrisheecho/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/chrisheecho/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"chrisheecho!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 8,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2015-02-13 04:18:12 UTC\",\n    \"updated_at\": \"2019-02-18 01:50:13 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"cjwagner\",\n    \"id\": 5334145,\n    \"node_id\": \"MDQ6VXNlcjUzMzQxNDU=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/5334145?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/cjwagner\",\n    \"html_url\": \"https://github.com/cjwagner\",\n    \"followers_url\": \"https://api.github.com/users/cjwagner/followers\",\n    \"following_url\": \"https://api.github.com/users/cjwagner/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/cjwagner/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/cjwagner/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/cjwagner/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/cjwagner/orgs\",\n    \"repos_url\": \"https://api.github.com/users/cjwagner/repos\",\n    \"events_url\": \"https://api.github.com/users/cjwagner/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/cjwagner/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Cole Wagner\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"cjwagner!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 16,\n    \"public_gists\": 0,\n    \"followers\": 35,\n    \"following\": 2,\n    \"created_at\": \"2013-08-28 23:13:28 UTC\",\n    \"updated_at\": \"2019-02-13 19:59:33 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"clkao\",\n    \"id\": 69736,\n    \"node_id\": \"MDQ6VXNlcjY5NzM2\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/69736?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/clkao\",\n    \"html_url\": \"https://github.com/clkao\",\n    \"followers_url\": \"https://api.github.com/users/clkao/followers\",\n    \"following_url\": \"https://api.github.com/users/clkao/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/clkao/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/clkao/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/clkao/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/clkao/orgs\",\n    \"repos_url\": \"https://api.github.com/users/clkao/repos\",\n    \"events_url\": \"https://api.github.com/users/clkao/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/clkao/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Chia-liang Kao\",\n    \"company\": null,\n    \"blog\": \"www.clkao.org\",\n    \"location\": \"Taipei, Taiwan\",\n    \"email\": \"clkao!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 263,\n    \"public_gists\": 76,\n    \"followers\": 517,\n    \"following\": 74,\n    \"created_at\": \"2009-04-02 10:07:27 UTC\",\n    \"updated_at\": \"2019-01-22 15:30:53 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"cpedrinaci\",\n    \"id\": 30415,\n    \"node_id\": \"MDQ6VXNlcjMwNDE1\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/30415?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/cpedrinaci\",\n    \"html_url\": \"https://github.com/cpedrinaci\",\n    \"followers_url\": \"https://api.github.com/users/cpedrinaci/followers\",\n    \"following_url\": \"https://api.github.com/users/cpedrinaci/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/cpedrinaci/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/cpedrinaci/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/cpedrinaci/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/cpedrinaci/orgs\",\n    \"repos_url\": \"https://api.github.com/users/cpedrinaci/repos\",\n    \"events_url\": \"https://api.github.com/users/cpedrinaci/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/cpedrinaci/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Carlos Pedrinaci\",\n    \"company\": null,\n    \"blog\": \"http://www.cpedrinaci.net\",\n    \"location\": \"Milton Keynes, UK\",\n    \"email\": \"cpedrinaci!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 2,\n    \"public_gists\": 1,\n    \"followers\": 19,\n    \"following\": 1,\n    \"created_at\": \"2008-10-22 16:22:41 UTC\",\n    \"updated_at\": \"2019-01-07 22:54:42 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"cquptEthan\",\n    \"id\": 6701612,\n    \"node_id\": \"MDQ6VXNlcjY3MDE2MTI=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/6701612?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/cquptEthan\",\n    \"html_url\": \"https://github.com/cquptEthan\",\n    \"followers_url\": \"https://api.github.com/users/cquptEthan/followers\",\n    \"following_url\": \"https://api.github.com/users/cquptEthan/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/cquptEthan/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/cquptEthan/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/cquptEthan/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/cquptEthan/orgs\",\n    \"repos_url\": \"https://api.github.com/users/cquptEthan/repos\",\n    \"events_url\": \"https://api.github.com/users/cquptEthan/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/cquptEthan/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ethan\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Chongqing, China\",\n    \"email\": \"cquptEthan!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 33,\n    \"public_gists\": 0,\n    \"followers\": 4,\n    \"following\": 10,\n    \"created_at\": \"2014-02-17 05:45:44 UTC\",\n    \"updated_at\": \"2018-10-17 16:07:39 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"crmne\",\n    \"id\": 106617,\n    \"node_id\": \"MDQ6VXNlcjEwNjYxNw==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/106617?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/crmne\",\n    \"html_url\": \"https://github.com/crmne\",\n    \"followers_url\": \"https://api.github.com/users/crmne/followers\",\n    \"following_url\": \"https://api.github.com/users/crmne/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/crmne/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/crmne/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/crmne/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/crmne/orgs\",\n    \"repos_url\": \"https://api.github.com/users/crmne/repos\",\n    \"events_url\": \"https://api.github.com/users/crmne/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/crmne/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Carmine Paolino\",\n    \"company\": \"@olx-global\",\n    \"blog\": \"http://paolino.me\",\n    \"location\": \"Berlin, Germany\",\n    \"email\": \"crmne!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Data Scientist at OLX Group\",\n    \"public_repos\": 57,\n    \"public_gists\": 24,\n    \"followers\": 30,\n    \"following\": 34,\n    \"created_at\": \"2009-07-19 19:50:10 UTC\",\n    \"updated_at\": \"2019-02-07 15:26:17 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"crobby\",\n    \"id\": 889317,\n    \"node_id\": \"MDQ6VXNlcjg4OTMxNw==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/889317?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/crobby\",\n    \"html_url\": \"https://github.com/crobby\",\n    \"followers_url\": \"https://api.github.com/users/crobby/followers\",\n    \"following_url\": \"https://api.github.com/users/crobby/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/crobby/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/crobby/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/crobby/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/crobby/orgs\",\n    \"repos_url\": \"https://api.github.com/users/crobby/repos\",\n    \"events_url\": \"https://api.github.com/users/crobby/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/crobby/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Chad Roberts\",\n    \"company\": \"Red Hat\",\n    \"blog\": \"\",\n    \"location\": \"Flushing, Michigan, USA\",\n    \"email\": \"crobby!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"I live in the woods.  I emerge for conferences or curling.\",\n    \"public_repos\": 63,\n    \"public_gists\": 9,\n    \"followers\": 7,\n    \"following\": 1,\n    \"created_at\": \"2011-07-01 19:09:19 UTC\",\n    \"updated_at\": \"2018-12-03 14:33:46 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"cruxyoung\",\n    \"id\": 14368415,\n    \"node_id\": \"MDQ6VXNlcjE0MzY4NDE1\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/14368415?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/cruxyoung\",\n    \"html_url\": \"https://github.com/cruxyoung\",\n    \"followers_url\": \"https://api.github.com/users/cruxyoung/followers\",\n    \"following_url\": \"https://api.github.com/users/cruxyoung/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/cruxyoung/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/cruxyoung/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/cruxyoung/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/cruxyoung/orgs\",\n    \"repos_url\": \"https://api.github.com/users/cruxyoung/repos\",\n    \"events_url\": \"https://api.github.com/users/cruxyoung/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/cruxyoung/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"cruxyoung!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 46,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 4,\n    \"created_at\": \"2015-09-20 07:47:08 UTC\",\n    \"updated_at\": \"2019-02-11 16:24:45 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"crwilcox\",\n    \"id\": 638797,\n    \"node_id\": \"MDQ6VXNlcjYzODc5Nw==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/638797?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/crwilcox\",\n    \"html_url\": \"https://github.com/crwilcox\",\n    \"followers_url\": \"https://api.github.com/users/crwilcox/followers\",\n    \"following_url\": \"https://api.github.com/users/crwilcox/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/crwilcox/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/crwilcox/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/crwilcox/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/crwilcox/orgs\",\n    \"repos_url\": \"https://api.github.com/users/crwilcox/repos\",\n    \"events_url\": \"https://api.github.com/users/crwilcox/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/crwilcox/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Christopher Wilcox\",\n    \"company\": \"Google\",\n    \"blog\": \"http://crwilcox.com\",\n    \"location\": \"Seattle, WA\",\n    \"email\": \"crwilcox!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Software Developer @Google.\\r\\nPython and sometimes Node.js.\\r\\nHe/Him.\",\n    \"public_repos\": 42,\n    \"public_gists\": 6,\n    \"followers\": 53,\n    \"following\": 12,\n    \"created_at\": \"2011-02-25 22:14:35 UTC\",\n    \"updated_at\": \"2019-02-20 17:26:05 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"cvenets\",\n    \"id\": 1746055,\n    \"node_id\": \"MDQ6VXNlcjE3NDYwNTU=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/1746055?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/cvenets\",\n    \"html_url\": \"https://github.com/cvenets\",\n    \"followers_url\": \"https://api.github.com/users/cvenets/followers\",\n    \"following_url\": \"https://api.github.com/users/cvenets/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/cvenets/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/cvenets/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/cvenets/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/cvenets/orgs\",\n    \"repos_url\": \"https://api.github.com/users/cvenets/repos\",\n    \"events_url\": \"https://api.github.com/users/cvenets/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/cvenets/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Constantinos Venetsanopoulos\",\n    \"company\": \"@Arrikto \",\n    \"blog\": \"www.arrikto.com\",\n    \"location\": \"Palo Alto, CA & Athens, Greece\",\n    \"email\": \"cvenets!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Founder & CEO, @arrikto Inc.\",\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2012-05-16 15:00:04 UTC\",\n    \"updated_at\": \"2019-02-15 01:00:29 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"cy89\",\n    \"id\": 29663194,\n    \"node_id\": \"MDQ6VXNlcjI5NjYzMTk0\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/29663194?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/cy89\",\n    \"html_url\": \"https://github.com/cy89\",\n    \"followers_url\": \"https://api.github.com/users/cy89/followers\",\n    \"following_url\": \"https://api.github.com/users/cy89/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/cy89/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/cy89/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/cy89/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/cy89/orgs\",\n    \"repos_url\": \"https://api.github.com/users/cy89/repos\",\n    \"events_url\": \"https://api.github.com/users/cy89/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/cy89/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Cliff Young\",\n    \"company\": \"@google \",\n    \"blog\": \"\",\n    \"location\": \"Bay Area, CA\",\n    \"email\": \"cy89!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"I'm a computer scientist with a particular interest in special-purpose computing systems. I'm a member of the Google Brain team. \",\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 26,\n    \"following\": 0,\n    \"created_at\": \"2017-06-23 17:03:46 UTC\",\n    \"updated_at\": \"2018-06-15 20:49:17 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"cyphar\",\n    \"id\": 2888411,\n    \"node_id\": \"MDQ6VXNlcjI4ODg0MTE=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/2888411?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/cyphar\",\n    \"html_url\": \"https://github.com/cyphar\",\n    \"followers_url\": \"https://api.github.com/users/cyphar/followers\",\n    \"following_url\": \"https://api.github.com/users/cyphar/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/cyphar/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/cyphar/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/cyphar/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/cyphar/orgs\",\n    \"repos_url\": \"https://api.github.com/users/cyphar/repos\",\n    \"events_url\": \"https://api.github.com/users/cyphar/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/cyphar/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Aleksa Sarai [see §317C(6)]\",\n    \"company\": \"@SUSE Linux GmbH\",\n    \"blog\": \"https://www.cyphar.com\",\n    \"location\": \"Oceania (circa 1984)\",\n    \"email\": \"cyphar!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Backdoors are courtesy of the Australian Government. \\\"designated communications provider\\\" under Telecommunications Act 1997 (§317C(6)).\",\n    \"public_repos\": 110,\n    \"public_gists\": 6,\n    \"followers\": 357,\n    \"following\": 13,\n    \"created_at\": \"2012-11-26 03:14:17 UTC\",\n    \"updated_at\": \"2019-01-29 06:08:25 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"dailong\",\n    \"id\": 5086821,\n    \"node_id\": \"MDQ6VXNlcjUwODY4MjE=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/5086821?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dailong\",\n    \"html_url\": \"https://github.com/dailong\",\n    \"followers_url\": \"https://api.github.com/users/dailong/followers\",\n    \"following_url\": \"https://api.github.com/users/dailong/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dailong/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dailong/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dailong/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dailong/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dailong/repos\",\n    \"events_url\": \"https://api.github.com/users/dailong/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dailong/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"dailong\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"北京\",\n    \"email\": \"dailong!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 218,\n    \"public_gists\": 1,\n    \"followers\": 4,\n    \"following\": 21,\n    \"created_at\": \"2013-07-25 06:00:02 UTC\",\n    \"updated_at\": \"2019-02-13 07:25:56 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"dakoner\",\n    \"id\": 8090176,\n    \"node_id\": \"MDQ6VXNlcjgwOTAxNzY=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/8090176?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dakoner\",\n    \"html_url\": \"https://github.com/dakoner\",\n    \"followers_url\": \"https://api.github.com/users/dakoner/followers\",\n    \"following_url\": \"https://api.github.com/users/dakoner/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dakoner/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dakoner/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dakoner/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dakoner/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dakoner/repos\",\n    \"events_url\": \"https://api.github.com/users/dakoner/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dakoner/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"dakoner!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 39,\n    \"public_gists\": 0,\n    \"followers\": 9,\n    \"following\": 0,\n    \"created_at\": \"2014-07-07 13:00:26 UTC\",\n    \"updated_at\": \"2019-01-19 18:23:51 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"danijar\",\n    \"id\": 2111293,\n    \"node_id\": \"MDQ6VXNlcjIxMTEyOTM=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/2111293?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/danijar\",\n    \"html_url\": \"https://github.com/danijar\",\n    \"followers_url\": \"https://api.github.com/users/danijar/followers\",\n    \"following_url\": \"https://api.github.com/users/danijar/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/danijar/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/danijar/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/danijar/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/danijar/orgs\",\n    \"repos_url\": \"https://api.github.com/users/danijar/repos\",\n    \"events_url\": \"https://api.github.com/users/danijar/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/danijar/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Danijar Hafner\",\n    \"company\": \"Google Brain & PhD Toronto\",\n    \"blog\": \"https://danijar.com\",\n    \"location\": \"Toronto, Canada\",\n    \"email\": \"danijar!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Researcher aiming to build intelligent machines based on concepts of the human brain.\",\n    \"public_repos\": 59,\n    \"public_gists\": 22,\n    \"followers\": 568,\n    \"following\": 36,\n    \"created_at\": \"2012-08-07 17:06:11 UTC\",\n    \"updated_at\": \"2019-01-22 15:31:47 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"dformoso\",\n    \"id\": 2955131,\n    \"node_id\": \"MDQ6VXNlcjI5NTUxMzE=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/2955131?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dformoso\",\n    \"html_url\": \"https://github.com/dformoso\",\n    \"followers_url\": \"https://api.github.com/users/dformoso/followers\",\n    \"following_url\": \"https://api.github.com/users/dformoso/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dformoso/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dformoso/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dformoso/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dformoso/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dformoso/repos\",\n    \"events_url\": \"https://api.github.com/users/dformoso/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dformoso/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Daniel Formoso\",\n    \"company\": \"Google\",\n    \"blog\": \"https://www.linkedin.com/in/danielmartinezformoso/\",\n    \"location\": \"Sydney, Australia\",\n    \"email\": \"dformoso!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Scaled Customer Engineer at Google\",\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 430,\n    \"following\": 1,\n    \"created_at\": \"2012-12-03 20:15:38 UTC\",\n    \"updated_at\": \"2019-02-14 10:13:00 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"dharmeshkakadia\",\n    \"id\": 2123078,\n    \"node_id\": \"MDQ6VXNlcjIxMjMwNzg=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/2123078?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dharmeshkakadia\",\n    \"html_url\": \"https://github.com/dharmeshkakadia\",\n    \"followers_url\": \"https://api.github.com/users/dharmeshkakadia/followers\",\n    \"following_url\": \"https://api.github.com/users/dharmeshkakadia/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dharmeshkakadia/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dharmeshkakadia/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dharmeshkakadia/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dharmeshkakadia/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dharmeshkakadia/repos\",\n    \"events_url\": \"https://api.github.com/users/dharmeshkakadia/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dharmeshkakadia/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Dharmesh Kakadia\",\n    \"company\": \"@Microsoft\",\n    \"blog\": \"bit.ly/mesosbook\",\n    \"location\": null,\n    \"email\": \"dharmeshkakadia!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 143,\n    \"public_gists\": 42,\n    \"followers\": 111,\n    \"following\": 39,\n    \"created_at\": \"2012-08-09 11:44:56 UTC\",\n    \"updated_at\": \"2019-02-19 17:15:52 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"dhirschfeld\",\n    \"id\": 881019,\n    \"node_id\": \"MDQ6VXNlcjg4MTAxOQ==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/881019?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dhirschfeld\",\n    \"html_url\": \"https://github.com/dhirschfeld\",\n    \"followers_url\": \"https://api.github.com/users/dhirschfeld/followers\",\n    \"following_url\": \"https://api.github.com/users/dhirschfeld/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dhirschfeld/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dhirschfeld/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dhirschfeld/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dhirschfeld/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dhirschfeld/repos\",\n    \"events_url\": \"https://api.github.com/users/dhirschfeld/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dhirschfeld/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Dave Hirschfeld\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Australia\",\n    \"email\": \"dhirschfeld!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 79,\n    \"public_gists\": 12,\n    \"followers\": 18,\n    \"following\": 1,\n    \"created_at\": \"2011-06-28 09:47:46 UTC\",\n    \"updated_at\": \"2019-01-23 03:57:44 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"dimm0\",\n    \"id\": 1425007,\n    \"node_id\": \"MDQ6VXNlcjE0MjUwMDc=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/1425007?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dimm0\",\n    \"html_url\": \"https://github.com/dimm0\",\n    \"followers_url\": \"https://api.github.com/users/dimm0/followers\",\n    \"following_url\": \"https://api.github.com/users/dimm0/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dimm0/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dimm0/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dimm0/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dimm0/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dimm0/repos\",\n    \"events_url\": \"https://api.github.com/users/dimm0/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dimm0/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Dmitry Mishin\",\n    \"company\": \"San Diego Supercomputer Center\",\n    \"blog\": \"\",\n    \"location\": \"San Diego, CA\",\n    \"email\": \"dimm0!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 10,\n    \"public_gists\": 10,\n    \"followers\": 9,\n    \"following\": 1,\n    \"created_at\": \"2012-02-10 01:50:36 UTC\",\n    \"updated_at\": \"2019-02-12 22:22:38 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"dlorenc\",\n    \"id\": 1714486,\n    \"node_id\": \"MDQ6VXNlcjE3MTQ0ODY=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1714486?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dlorenc\",\n    \"html_url\": \"https://github.com/dlorenc\",\n    \"followers_url\": \"https://api.github.com/users/dlorenc/followers\",\n    \"following_url\": \"https://api.github.com/users/dlorenc/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dlorenc/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dlorenc/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dlorenc/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dlorenc/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dlorenc/repos\",\n    \"events_url\": \"https://api.github.com/users/dlorenc/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dlorenc/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"dlorenc!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 96,\n    \"public_gists\": 7,\n    \"followers\": 77,\n    \"following\": 0,\n    \"created_at\": \"2012-05-07 19:30:18 UTC\",\n    \"updated_at\": \"2019-02-11 15:51:21 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"dmrub\",\n    \"id\": 2951866,\n    \"node_id\": \"MDQ6VXNlcjI5NTE4NjY=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/2951866?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dmrub\",\n    \"html_url\": \"https://github.com/dmrub\",\n    \"followers_url\": \"https://api.github.com/users/dmrub/followers\",\n    \"following_url\": \"https://api.github.com/users/dmrub/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dmrub/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dmrub/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dmrub/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dmrub/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dmrub/repos\",\n    \"events_url\": \"https://api.github.com/users/dmrub/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dmrub/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Dmitri Rubinstein\",\n    \"company\": \"DFKI\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"dmrub!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 75,\n    \"public_gists\": 3,\n    \"followers\": 4,\n    \"following\": 0,\n    \"created_at\": \"2012-12-03 12:52:42 UTC\",\n    \"updated_at\": \"2018-09-24 12:32:30 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"dpaks\",\n    \"id\": 6995187,\n    \"node_id\": \"MDQ6VXNlcjY5OTUxODc=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/6995187?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dpaks\",\n    \"html_url\": \"https://github.com/dpaks\",\n    \"followers_url\": \"https://api.github.com/users/dpaks/followers\",\n    \"following_url\": \"https://api.github.com/users/dpaks/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dpaks/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dpaks/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dpaks/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dpaks/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dpaks/repos\",\n    \"events_url\": \"https://api.github.com/users/dpaks/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dpaks/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Deepak S\",\n    \"company\": \"@oneconvergence \",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"dpaks!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 8,\n    \"public_gists\": 2,\n    \"followers\": 1,\n    \"following\": 1,\n    \"created_at\": \"2014-03-19 05:53:32 UTC\",\n    \"updated_at\": \"2019-02-18 05:58:28 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"dredwilliams\",\n    \"id\": 9169365,\n    \"node_id\": \"MDQ6VXNlcjkxNjkzNjU=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/9169365?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dredwilliams\",\n    \"html_url\": \"https://github.com/dredwilliams\",\n    \"followers_url\": \"https://api.github.com/users/dredwilliams/followers\",\n    \"following_url\": \"https://api.github.com/users/dredwilliams/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dredwilliams/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dredwilliams/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dredwilliams/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dredwilliams/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dredwilliams/repos\",\n    \"events_url\": \"https://api.github.com/users/dredwilliams/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dredwilliams/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ed Williams\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"dredwilliams!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 2,\n    \"created_at\": \"2014-10-12 22:02:54 UTC\",\n    \"updated_at\": \"2019-01-13 17:02:17 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"dtaniwaki\",\n    \"id\": 1162120,\n    \"node_id\": \"MDQ6VXNlcjExNjIxMjA=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1162120?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dtaniwaki\",\n    \"html_url\": \"https://github.com/dtaniwaki\",\n    \"followers_url\": \"https://api.github.com/users/dtaniwaki/followers\",\n    \"following_url\": \"https://api.github.com/users/dtaniwaki/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dtaniwaki/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dtaniwaki/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dtaniwaki/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dtaniwaki/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dtaniwaki/repos\",\n    \"events_url\": \"https://api.github.com/users/dtaniwaki/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dtaniwaki/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Daisuke Taniwaki\",\n    \"company\": \"@pfnet  \",\n    \"blog\": \"https://dtaniwaki.github.io/\",\n    \"location\": \"Tokyo\",\n    \"email\": \"dtaniwaki!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"I'm a full stack developer who mainly writes Python and Scala. I also have experiences of Ruby, Node.js C/C++, and frontend.\",\n    \"public_repos\": 163,\n    \"public_gists\": 17,\n    \"followers\": 69,\n    \"following\": 26,\n    \"created_at\": \"2011-10-31 10:12:21 UTC\",\n    \"updated_at\": \"2018-12-28 06:44:08 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"durandom\",\n    \"id\": 161888,\n    \"node_id\": \"MDQ6VXNlcjE2MTg4OA==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/161888?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/durandom\",\n    \"html_url\": \"https://github.com/durandom\",\n    \"followers_url\": \"https://api.github.com/users/durandom/followers\",\n    \"following_url\": \"https://api.github.com/users/durandom/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/durandom/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/durandom/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/durandom/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/durandom/orgs\",\n    \"repos_url\": \"https://api.github.com/users/durandom/repos\",\n    \"events_url\": \"https://api.github.com/users/durandom/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/durandom/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Marcel Hild\",\n    \"company\": \"Red Hat\",\n    \"blog\": \"http://durandom.de\",\n    \"location\": \"Kiel, Germany\",\n    \"email\": \"durandom!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"old school opensource hacker and daemon zombie slayer at @b4mad and Red Hat's @AICoE CTO Office\",\n    \"public_repos\": 107,\n    \"public_gists\": 13,\n    \"followers\": 20,\n    \"following\": 3,\n    \"created_at\": \"2009-12-04 13:09:02 UTC\",\n    \"updated_at\": \"2019-02-17 17:53:58 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"dvdbisong\",\n    \"id\": 7509742,\n    \"node_id\": \"MDQ6VXNlcjc1MDk3NDI=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/7509742?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dvdbisong\",\n    \"html_url\": \"https://github.com/dvdbisong\",\n    \"followers_url\": \"https://api.github.com/users/dvdbisong/followers\",\n    \"following_url\": \"https://api.github.com/users/dvdbisong/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dvdbisong/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dvdbisong/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dvdbisong/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dvdbisong/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dvdbisong/repos\",\n    \"events_url\": \"https://api.github.com/users/dvdbisong/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dvdbisong/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ekaba Bisong\",\n    \"company\": \"@pythian \",\n    \"blog\": \"https://ekababisong.org/\",\n    \"location\": \"Ottawa, Canada\",\n    \"email\": \"dvdbisong!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Learning Systems (encompassing learning automata and reinforcement learning), Machine Learning, and Deep Learning\",\n    \"public_repos\": 17,\n    \"public_gists\": 0,\n    \"followers\": 106,\n    \"following\": 0,\n    \"created_at\": \"2014-05-07 08:13:08 UTC\",\n    \"updated_at\": \"2019-02-17 00:25:12 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"dweitzman\",\n    \"id\": 100598,\n    \"node_id\": \"MDQ6VXNlcjEwMDU5OA==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/100598?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dweitzman\",\n    \"html_url\": \"https://github.com/dweitzman\",\n    \"followers_url\": \"https://api.github.com/users/dweitzman/followers\",\n    \"following_url\": \"https://api.github.com/users/dweitzman/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dweitzman/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dweitzman/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dweitzman/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dweitzman/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dweitzman/repos\",\n    \"events_url\": \"https://api.github.com/users/dweitzman/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dweitzman/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"David Weitzman\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"dweitzman!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 9,\n    \"public_gists\": 1,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2009-07-01 07:09:56 UTC\",\n    \"updated_at\": \"2019-02-15 19:20:36 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"dwightjl\",\n    \"id\": 8083094,\n    \"node_id\": \"MDQ6VXNlcjgwODMwOTQ=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/8083094?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dwightjl\",\n    \"html_url\": \"https://github.com/dwightjl\",\n    \"followers_url\": \"https://api.github.com/users/dwightjl/followers\",\n    \"following_url\": \"https://api.github.com/users/dwightjl/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dwightjl/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dwightjl/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dwightjl/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dwightjl/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dwightjl/repos\",\n    \"events_url\": \"https://api.github.com/users/dwightjl/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dwightjl/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Dwight J Lyle\",\n    \"company\": \"Google\",\n    \"blog\": \"http://cloud.google.com\",\n    \"location\": \"Kirkland, WA\",\n    \"email\": \"dwightjl!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2014-07-06 19:14:46 UTC\",\n    \"updated_at\": \"2019-02-01 03:24:47 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"dynamicwebpaige\",\n    \"id\": 3712347,\n    \"node_id\": \"MDQ6VXNlcjM3MTIzNDc=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/3712347?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dynamicwebpaige\",\n    \"html_url\": \"https://github.com/dynamicwebpaige\",\n    \"followers_url\": \"https://api.github.com/users/dynamicwebpaige/followers\",\n    \"following_url\": \"https://api.github.com/users/dynamicwebpaige/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dynamicwebpaige/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dynamicwebpaige/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dynamicwebpaige/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dynamicwebpaige/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dynamicwebpaige/repos\",\n    \"events_url\": \"https://api.github.com/users/dynamicwebpaige/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dynamicwebpaige/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Paige Bailey\",\n    \"company\": \"Google\",\n    \"blog\": \"http://paigevie.ws\",\n    \"location\": \"Mountain View, CA\",\n    \"email\": \"dynamicwebpaige!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"✨🧠 @TensorFlow Mom. Developer Advocate for @Google. I help you predict the future with computers. 👩‍💻\",\n    \"public_repos\": 85,\n    \"public_gists\": 0,\n    \"followers\": 530,\n    \"following\": 134,\n    \"created_at\": \"2013-02-27 04:18:46 UTC\",\n    \"updated_at\": \"2019-01-09 17:50:14 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"dzungductran\",\n    \"id\": 1693317,\n    \"node_id\": \"MDQ6VXNlcjE2OTMzMTc=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1693317?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/dzungductran\",\n    \"html_url\": \"https://github.com/dzungductran\",\n    \"followers_url\": \"https://api.github.com/users/dzungductran/followers\",\n    \"following_url\": \"https://api.github.com/users/dzungductran/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/dzungductran/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/dzungductran/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/dzungductran/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/dzungductran/orgs\",\n    \"repos_url\": \"https://api.github.com/users/dzungductran/repos\",\n    \"events_url\": \"https://api.github.com/users/dzungductran/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/dzungductran/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Dzung\",\n    \"company\": \"Intel corporation\",\n    \"blog\": \"https://www.linkedin.com/in/dzungductran\",\n    \"location\": null,\n    \"email\": \"dzungductran!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 3,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2012-04-30 17:56:22 UTC\",\n    \"updated_at\": \"2019-01-25 18:33:24 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"ediphy-azorab\",\n    \"id\": 32453740,\n    \"node_id\": \"MDQ6VXNlcjMyNDUzNzQw\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/32453740?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ediphy-azorab\",\n    \"html_url\": \"https://github.com/ediphy-azorab\",\n    \"followers_url\": \"https://api.github.com/users/ediphy-azorab/followers\",\n    \"following_url\": \"https://api.github.com/users/ediphy-azorab/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ediphy-azorab/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ediphy-azorab/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ediphy-azorab/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ediphy-azorab/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ediphy-azorab/repos\",\n    \"events_url\": \"https://api.github.com/users/ediphy-azorab/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ediphy-azorab/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ediphy-azorab!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 4,\n    \"public_gists\": 2,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2017-10-02 11:17:31 UTC\",\n    \"updated_at\": \"2019-02-08 16:24:13 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"edwardspc\",\n    \"id\": 145758,\n    \"node_id\": \"MDQ6VXNlcjE0NTc1OA==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/145758?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/edwardspc\",\n    \"html_url\": \"https://github.com/edwardspc\",\n    \"followers_url\": \"https://api.github.com/users/edwardspc/followers\",\n    \"following_url\": \"https://api.github.com/users/edwardspc/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/edwardspc/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/edwardspc/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/edwardspc/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/edwardspc/orgs\",\n    \"repos_url\": \"https://api.github.com/users/edwardspc/repos\",\n    \"events_url\": \"https://api.github.com/users/edwardspc/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/edwardspc/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Edward Pacheco\",\n    \"company\": \"PESC/UFRJ\",\n    \"blog\": \"https://sites.google.com/site/edwardspc/\",\n    \"location\": \"Rio de Janeiro\",\n    \"email\": \"edwardspc!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 15,\n    \"public_gists\": 4,\n    \"followers\": 2,\n    \"following\": 1,\n    \"created_at\": \"2009-10-28 12:28:00 UTC\",\n    \"updated_at\": \"2018-12-06 15:21:43 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"elmiko\",\n    \"id\": 190649,\n    \"node_id\": \"MDQ6VXNlcjE5MDY0OQ==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/190649?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/elmiko\",\n    \"html_url\": \"https://github.com/elmiko\",\n    \"followers_url\": \"https://api.github.com/users/elmiko/followers\",\n    \"following_url\": \"https://api.github.com/users/elmiko/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/elmiko/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/elmiko/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/elmiko/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/elmiko/orgs\",\n    \"repos_url\": \"https://api.github.com/users/elmiko/repos\",\n    \"events_url\": \"https://api.github.com/users/elmiko/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/elmiko/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"michael mccune\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"the D\",\n    \"email\": \"elmiko!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"lover of open source and late night coding\",\n    \"public_repos\": 97,\n    \"public_gists\": 6,\n    \"followers\": 46,\n    \"following\": 10,\n    \"created_at\": \"2010-01-27 04:16:11 UTC\",\n    \"updated_at\": \"2018-06-03 17:01:23 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"elyase\",\n    \"id\": 1175888,\n    \"node_id\": \"MDQ6VXNlcjExNzU4ODg=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/1175888?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/elyase\",\n    \"html_url\": \"https://github.com/elyase\",\n    \"followers_url\": \"https://api.github.com/users/elyase/followers\",\n    \"following_url\": \"https://api.github.com/users/elyase/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/elyase/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/elyase/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/elyase/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/elyase/orgs\",\n    \"repos_url\": \"https://api.github.com/users/elyase/repos\",\n    \"events_url\": \"https://api.github.com/users/elyase/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/elyase/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Yaser Martinez Palenzuela\",\n    \"company\": null,\n    \"blog\": \"http://yasermartinez.com/blog/\",\n    \"location\": null,\n    \"email\": \"elyase!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 42,\n    \"public_gists\": 50,\n    \"followers\": 35,\n    \"following\": 4,\n    \"created_at\": \"2011-11-06 13:52:44 UTC\",\n    \"updated_at\": \"2019-01-21 21:26:41 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"enisoc\",\n    \"id\": 6733629,\n    \"node_id\": \"MDQ6VXNlcjY3MzM2Mjk=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/6733629?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/enisoc\",\n    \"html_url\": \"https://github.com/enisoc\",\n    \"followers_url\": \"https://api.github.com/users/enisoc/followers\",\n    \"following_url\": \"https://api.github.com/users/enisoc/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/enisoc/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/enisoc/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/enisoc/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/enisoc/orgs\",\n    \"repos_url\": \"https://api.github.com/users/enisoc/repos\",\n    \"events_url\": \"https://api.github.com/users/enisoc/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/enisoc/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Anthony Yeh\",\n    \"company\": \"@google\",\n    \"blog\": \"\",\n    \"location\": \"Santa Clara, CA\",\n    \"email\": \"enisoc!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Software engineer working on @kubernetes and @vitessio.\",\n    \"public_repos\": 25,\n    \"public_gists\": 11,\n    \"followers\": 122,\n    \"following\": 0,\n    \"created_at\": \"2014-02-20 03:41:34 UTC\",\n    \"updated_at\": \"2019-01-22 18:44:18 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"epa095\",\n    \"id\": 1576438,\n    \"node_id\": \"MDQ6VXNlcjE1NzY0Mzg=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1576438?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/epa095\",\n    \"html_url\": \"https://github.com/epa095\",\n    \"followers_url\": \"https://api.github.com/users/epa095/followers\",\n    \"following_url\": \"https://api.github.com/users/epa095/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/epa095/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/epa095/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/epa095/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/epa095/orgs\",\n    \"repos_url\": \"https://api.github.com/users/epa095/repos\",\n    \"events_url\": \"https://api.github.com/users/epa095/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/epa095/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Erik Parmann\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Bergen\",\n    \"email\": \"epa095!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 15,\n    \"public_gists\": 2,\n    \"followers\": 10,\n    \"following\": 0,\n    \"created_at\": \"2012-03-26 14:24:09 UTC\",\n    \"updated_at\": \"2018-12-12 12:51:48 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"erkolson\",\n    \"id\": 9535472,\n    \"node_id\": \"MDQ6VXNlcjk1MzU0NzI=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/9535472?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/erkolson\",\n    \"html_url\": \"https://github.com/erkolson\",\n    \"followers_url\": \"https://api.github.com/users/erkolson/followers\",\n    \"following_url\": \"https://api.github.com/users/erkolson/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/erkolson/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/erkolson/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/erkolson/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/erkolson/orgs\",\n    \"repos_url\": \"https://api.github.com/users/erkolson/repos\",\n    \"events_url\": \"https://api.github.com/users/erkolson/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/erkolson/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Erik\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Atlanta\",\n    \"email\": \"erkolson!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Building enterprise infrastructure with Google Kubernetes Engine\",\n    \"public_repos\": 38,\n    \"public_gists\": 5,\n    \"followers\": 4,\n    \"following\": 7,\n    \"created_at\": \"2014-11-03 17:33:14 UTC\",\n    \"updated_at\": \"2019-01-29 20:10:59 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"ernestmartinez\",\n    \"id\": 28981612,\n    \"node_id\": \"MDQ6VXNlcjI4OTgxNjEy\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/28981612?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ernestmartinez\",\n    \"html_url\": \"https://github.com/ernestmartinez\",\n    \"followers_url\": \"https://api.github.com/users/ernestmartinez/followers\",\n    \"following_url\": \"https://api.github.com/users/ernestmartinez/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ernestmartinez/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ernestmartinez/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ernestmartinez/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ernestmartinez/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ernestmartinez/repos\",\n    \"events_url\": \"https://api.github.com/users/ernestmartinez/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ernestmartinez/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ernestmartinez!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2017-05-26 12:27:03 UTC\",\n    \"updated_at\": \"2018-08-01 13:47:24 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"errordeveloper\",\n    \"id\": 251467,\n    \"node_id\": \"MDQ6VXNlcjI1MTQ2Nw==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/251467?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/errordeveloper\",\n    \"html_url\": \"https://github.com/errordeveloper\",\n    \"followers_url\": \"https://api.github.com/users/errordeveloper/followers\",\n    \"following_url\": \"https://api.github.com/users/errordeveloper/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/errordeveloper/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/errordeveloper/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/errordeveloper/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/errordeveloper/orgs\",\n    \"repos_url\": \"https://api.github.com/users/errordeveloper/repos\",\n    \"events_url\": \"https://api.github.com/users/errordeveloper/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/errordeveloper/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ilya Dmitrichenko\",\n    \"company\": \"@Weaveworks\",\n    \"blog\": \"https://twitter.com/errordeveloper\",\n    \"location\": \"London, UK\",\n    \"email\": \"errordeveloper!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Ilya is a software engineer at Weaveworks, focused on making @Kubernetes work for people.\",\n    \"public_repos\": 240,\n    \"public_gists\": 83,\n    \"followers\": 351,\n    \"following\": 1312,\n    \"created_at\": \"2010-04-24 14:31:14 UTC\",\n    \"updated_at\": \"2019-02-20 15:26:32 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"estelleaf\",\n    \"id\": 23723647,\n    \"node_id\": \"MDQ6VXNlcjIzNzIzNjQ3\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/23723647?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/estelleaf\",\n    \"html_url\": \"https://github.com/estelleaf\",\n    \"followers_url\": \"https://api.github.com/users/estelleaf/followers\",\n    \"following_url\": \"https://api.github.com/users/estelleaf/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/estelleaf/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/estelleaf/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/estelleaf/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/estelleaf/orgs\",\n    \"repos_url\": \"https://api.github.com/users/estelleaf/repos\",\n    \"events_url\": \"https://api.github.com/users/estelleaf/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/estelleaf/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"estelleaf!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 7,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2016-11-24 14:44:02 UTC\",\n    \"updated_at\": \"2018-08-27 10:33:52 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"eternity1984\",\n    \"id\": 34591767,\n    \"node_id\": \"MDQ6VXNlcjM0NTkxNzY3\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/34591767?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/eternity1984\",\n    \"html_url\": \"https://github.com/eternity1984\",\n    \"followers_url\": \"https://api.github.com/users/eternity1984/followers\",\n    \"following_url\": \"https://api.github.com/users/eternity1984/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/eternity1984/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/eternity1984/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/eternity1984/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/eternity1984/orgs\",\n    \"repos_url\": \"https://api.github.com/users/eternity1984/repos\",\n    \"events_url\": \"https://api.github.com/users/eternity1984/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/eternity1984/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Yu Inoue\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Osaka, Japan\",\n    \"email\": \"eternity1984!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 4,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2017-12-16 04:25:15 UTC\",\n    \"updated_at\": \"2018-10-11 06:32:59 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"etheleon\",\n    \"id\": 2868858,\n    \"node_id\": \"MDQ6VXNlcjI4Njg4NTg=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/2868858?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/etheleon\",\n    \"html_url\": \"https://github.com/etheleon\",\n    \"followers_url\": \"https://api.github.com/users/etheleon/followers\",\n    \"following_url\": \"https://api.github.com/users/etheleon/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/etheleon/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/etheleon/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/etheleon/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/etheleon/orgs\",\n    \"repos_url\": \"https://api.github.com/users/etheleon/repos\",\n    \"events_url\": \"https://api.github.com/users/etheleon/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/etheleon/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"etheleon\",\n    \"company\": \"@honestbee @fundMyLife\",\n    \"blog\": \"https://etheleon.github.io\",\n    \"location\": \"Singapore\",\n    \"email\": \"etheleon!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Use to be Data Janitor, now its just Data Chef\",\n    \"public_repos\": 174,\n    \"public_gists\": 14,\n    \"followers\": 28,\n    \"following\": 54,\n    \"created_at\": \"2012-11-23 06:07:57 UTC\",\n    \"updated_at\": \"2019-02-20 07:06:24 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"evandekieft\",\n    \"id\": 558265,\n    \"node_id\": \"MDQ6VXNlcjU1ODI2NQ==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/558265?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/evandekieft\",\n    \"html_url\": \"https://github.com/evandekieft\",\n    \"followers_url\": \"https://api.github.com/users/evandekieft/followers\",\n    \"following_url\": \"https://api.github.com/users/evandekieft/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/evandekieft/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/evandekieft/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/evandekieft/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/evandekieft/orgs\",\n    \"repos_url\": \"https://api.github.com/users/evandekieft/repos\",\n    \"events_url\": \"https://api.github.com/users/evandekieft/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/evandekieft/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Erik Vandekieft\",\n    \"company\": \"Lyft\",\n    \"blog\": \"\",\n    \"location\": \"San Francisco, CA\",\n    \"email\": \"evandekieft!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 3,\n    \"public_gists\": 2,\n    \"followers\": 12,\n    \"following\": 0,\n    \"created_at\": \"2011-01-11 22:05:26 UTC\",\n    \"updated_at\": \"2018-12-23 00:40:14 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"falcocoris\",\n    \"id\": 42202254,\n    \"node_id\": \"MDQ6VXNlcjQyMjAyMjU0\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/42202254?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/falcocoris\",\n    \"html_url\": \"https://github.com/falcocoris\",\n    \"followers_url\": \"https://api.github.com/users/falcocoris/followers\",\n    \"following_url\": \"https://api.github.com/users/falcocoris/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/falcocoris/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/falcocoris/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/falcocoris/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/falcocoris/orgs\",\n    \"repos_url\": \"https://api.github.com/users/falcocoris/repos\",\n    \"events_url\": \"https://api.github.com/users/falcocoris/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/falcocoris/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"falcocoris!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"lost my previous account to a company mail i can't use anymore..\",\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-08-08 08:13:46 UTC\",\n    \"updated_at\": \"2018-08-08 08:18:05 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"fatkun\",\n    \"id\": 226237,\n    \"node_id\": \"MDQ6VXNlcjIyNjIzNw==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/226237?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/fatkun\",\n    \"html_url\": \"https://github.com/fatkun\",\n    \"followers_url\": \"https://api.github.com/users/fatkun/followers\",\n    \"following_url\": \"https://api.github.com/users/fatkun/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/fatkun/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/fatkun/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/fatkun/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/fatkun/orgs\",\n    \"repos_url\": \"https://api.github.com/users/fatkun/repos\",\n    \"events_url\": \"https://api.github.com/users/fatkun/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/fatkun/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"fatkun\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Guangzhou China\",\n    \"email\": \"fatkun!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 15,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 1,\n    \"created_at\": \"2010-03-19 15:36:50 UTC\",\n    \"updated_at\": \"2019-01-13 02:27:18 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"fboylu\",\n    \"id\": 11618557,\n    \"node_id\": \"MDQ6VXNlcjExNjE4NTU3\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/11618557?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/fboylu\",\n    \"html_url\": \"https://github.com/fboylu\",\n    \"followers_url\": \"https://api.github.com/users/fboylu/followers\",\n    \"following_url\": \"https://api.github.com/users/fboylu/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/fboylu/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/fboylu/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/fboylu/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/fboylu/orgs\",\n    \"repos_url\": \"https://api.github.com/users/fboylu/repos\",\n    \"events_url\": \"https://api.github.com/users/fboylu/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/fboylu/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Fidan Boylu Uz, PhD\",\n    \"company\": \"Microsoft Corporation\",\n    \"blog\": \"\",\n    \"location\": \"USA\",\n    \"email\": \"fboylu!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 9,\n    \"public_gists\": 0,\n    \"followers\": 29,\n    \"following\": 0,\n    \"created_at\": \"2015-03-23 18:54:25 UTC\",\n    \"updated_at\": \"2019-02-05 21:02:24 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"fejta\",\n    \"id\": 940341,\n    \"node_id\": \"MDQ6VXNlcjk0MDM0MQ==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/940341?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/fejta\",\n    \"html_url\": \"https://github.com/fejta\",\n    \"followers_url\": \"https://api.github.com/users/fejta/followers\",\n    \"following_url\": \"https://api.github.com/users/fejta/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/fejta/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/fejta/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/fejta/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/fejta/orgs\",\n    \"repos_url\": \"https://api.github.com/users/fejta/repos\",\n    \"events_url\": \"https://api.github.com/users/fejta/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/fejta/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Erick Fejta\",\n    \"company\": \"Google\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"fejta!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 16,\n    \"public_gists\": 0,\n    \"followers\": 66,\n    \"following\": 7,\n    \"created_at\": \"2011-07-26 18:47:31 UTC\",\n    \"updated_at\": \"2019-01-11 18:28:39 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"flx42\",\n    \"id\": 3645581,\n    \"node_id\": \"MDQ6VXNlcjM2NDU1ODE=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/3645581?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/flx42\",\n    \"html_url\": \"https://github.com/flx42\",\n    \"followers_url\": \"https://api.github.com/users/flx42/followers\",\n    \"following_url\": \"https://api.github.com/users/flx42/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/flx42/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/flx42/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/flx42/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/flx42/orgs\",\n    \"repos_url\": \"https://api.github.com/users/flx42/repos\",\n    \"events_url\": \"https://api.github.com/users/flx42/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/flx42/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Felix Abecassis\",\n    \"company\": \"NVIDIA\",\n    \"blog\": \"\",\n    \"location\": \"Santa Clara, California\",\n    \"email\": \"flx42!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \":fr:\\r\\n\",\n    \"public_repos\": 38,\n    \"public_gists\": 2,\n    \"followers\": 194,\n    \"following\": 6,\n    \"created_at\": \"2013-02-20 08:47:15 UTC\",\n    \"updated_at\": \"2019-02-03 08:16:21 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"galv\",\n    \"id\": 4767568,\n    \"node_id\": \"MDQ6VXNlcjQ3Njc1Njg=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/4767568?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/galv\",\n    \"html_url\": \"https://github.com/galv\",\n    \"followers_url\": \"https://api.github.com/users/galv/followers\",\n    \"following_url\": \"https://api.github.com/users/galv/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/galv/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/galv/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/galv/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/galv/orgs\",\n    \"repos_url\": \"https://api.github.com/users/galv/repos\",\n    \"events_url\": \"https://api.github.com/users/galv/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/galv/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Daniel Galvez\",\n    \"company\": null,\n    \"blog\": \"http://danielgalvez.me\",\n    \"location\": \"Mountain View, CA\",\n    \"email\": \"galv!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"I like speech recognition and dependent types.\",\n    \"public_repos\": 44,\n    \"public_gists\": 1,\n    \"followers\": 29,\n    \"following\": 6,\n    \"created_at\": \"2013-06-22 00:59:19 UTC\",\n    \"updated_at\": \"2019-01-22 15:36:19 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"gautamkmr\",\n    \"id\": 3092152,\n    \"node_id\": \"MDQ6VXNlcjMwOTIxNTI=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/3092152?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/gautamkmr\",\n    \"html_url\": \"https://github.com/gautamkmr\",\n    \"followers_url\": \"https://api.github.com/users/gautamkmr/followers\",\n    \"following_url\": \"https://api.github.com/users/gautamkmr/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/gautamkmr/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/gautamkmr/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/gautamkmr/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/gautamkmr/orgs\",\n    \"repos_url\": \"https://api.github.com/users/gautamkmr/repos\",\n    \"events_url\": \"https://api.github.com/users/gautamkmr/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/gautamkmr/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Gautam Kumar\",\n    \"company\": null,\n    \"blog\": \"http://gautamhome.webs.com/\",\n    \"location\": \"Stony Brook, NY\",\n    \"email\": \"gautamkmr!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"A nascent learner \",\n    \"public_repos\": 149,\n    \"public_gists\": 2,\n    \"followers\": 25,\n    \"following\": 321,\n    \"created_at\": \"2012-12-20 18:48:59 UTC\",\n    \"updated_at\": \"2018-11-15 21:13:41 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"gfursin\",\n    \"id\": 7384805,\n    \"node_id\": \"MDQ6VXNlcjczODQ4MDU=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/7384805?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/gfursin\",\n    \"html_url\": \"https://github.com/gfursin\",\n    \"followers_url\": \"https://api.github.com/users/gfursin/followers\",\n    \"following_url\": \"https://api.github.com/users/gfursin/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/gfursin/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/gfursin/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/gfursin/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/gfursin/orgs\",\n    \"repos_url\": \"https://api.github.com/users/gfursin/repos\",\n    \"events_url\": \"https://api.github.com/users/gfursin/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/gfursin/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Grigori Fursin\",\n    \"company\": \"cTuning foundation & dividiti\",\n    \"blog\": \"http://fursin.net/research.html\",\n    \"location\": \"Paris, London, New York\",\n    \"email\": \"gfursin!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"On a lifelong mission to fix science and accelerate AI, ML, quantum and computer systems R&D to solve the world's most challenging problems!\",\n    \"public_repos\": 17,\n    \"public_gists\": 0,\n    \"followers\": 29,\n    \"following\": 1,\n    \"created_at\": \"2014-04-23 13:43:10 UTC\",\n    \"updated_at\": \"2019-02-18 12:20:47 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"ggaaooppeenngg\",\n    \"id\": 4769989,\n    \"node_id\": \"MDQ6VXNlcjQ3Njk5ODk=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/4769989?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ggaaooppeenngg\",\n    \"html_url\": \"https://github.com/ggaaooppeenngg\",\n    \"followers_url\": \"https://api.github.com/users/ggaaooppeenngg/followers\",\n    \"following_url\": \"https://api.github.com/users/ggaaooppeenngg/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ggaaooppeenngg/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ggaaooppeenngg/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ggaaooppeenngg/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ggaaooppeenngg/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ggaaooppeenngg/repos\",\n    \"events_url\": \"https://api.github.com/users/ggaaooppeenngg/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ggaaooppeenngg/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Peng Gao\",\n    \"company\": \"@Kesci \",\n    \"blog\": \"https://ggaaooppeenngg.github.io/\",\n    \"location\": \"ShangHai\",\n    \"email\": \"ggaaooppeenngg!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"making simple and reliable software\",\n    \"public_repos\": 49,\n    \"public_gists\": 14,\n    \"followers\": 96,\n    \"following\": 23,\n    \"created_at\": \"2013-06-22 05:27:20 UTC\",\n    \"updated_at\": \"2019-01-17 02:57:05 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"giogit\",\n    \"id\": 900571,\n    \"node_id\": \"MDQ6VXNlcjkwMDU3MQ==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/900571?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/giogit\",\n    \"html_url\": \"https://github.com/giogit\",\n    \"followers_url\": \"https://api.github.com/users/giogit/followers\",\n    \"following_url\": \"https://api.github.com/users/giogit/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/giogit/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/giogit/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/giogit/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/giogit/orgs\",\n    \"repos_url\": \"https://api.github.com/users/giogit/repos\",\n    \"events_url\": \"https://api.github.com/users/giogit/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/giogit/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"giogit!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2011-07-07 13:26:14 UTC\",\n    \"updated_at\": \"2018-09-10 14:57:18 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"gogasca\",\n    \"id\": 30065079,\n    \"node_id\": \"MDQ6VXNlcjMwMDY1MDc5\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/30065079?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/gogasca\",\n    \"html_url\": \"https://github.com/gogasca\",\n    \"followers_url\": \"https://api.github.com/users/gogasca/followers\",\n    \"following_url\": \"https://api.github.com/users/gogasca/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/gogasca/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/gogasca/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/gogasca/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/gogasca/orgs\",\n    \"repos_url\": \"https://api.github.com/users/gogasca/repos\",\n    \"events_url\": \"https://api.github.com/users/gogasca/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/gogasca/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Gonzalo Gasca Meza\",\n    \"company\": \"Google\",\n    \"blog\": \"\",\n    \"location\": \"California\",\n    \"email\": \"gogasca!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 16,\n    \"public_gists\": 3,\n    \"followers\": 5,\n    \"following\": 0,\n    \"created_at\": \"2017-07-11 03:37:33 UTC\",\n    \"updated_at\": \"2019-02-10 00:41:30 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"gogeof\",\n    \"id\": 13129099,\n    \"node_id\": \"MDQ6VXNlcjEzMTI5MDk5\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/13129099?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/gogeof\",\n    \"html_url\": \"https://github.com/gogeof\",\n    \"followers_url\": \"https://api.github.com/users/gogeof/followers\",\n    \"following_url\": \"https://api.github.com/users/gogeof/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/gogeof/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/gogeof/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/gogeof/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/gogeof/orgs\",\n    \"repos_url\": \"https://api.github.com/users/gogeof/repos\",\n    \"events_url\": \"https://api.github.com/users/gogeof/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/gogeof/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Miancai Li\",\n    \"company\": null,\n    \"blog\": \"https://gogeof.github.io\",\n    \"location\": \"China Shenzhen\",\n    \"email\": \"gogeof!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Believe that open source helps humans\",\n    \"public_repos\": 42,\n    \"public_gists\": 0,\n    \"followers\": 6,\n    \"following\": 11,\n    \"created_at\": \"2015-07-01 04:16:28 UTC\",\n    \"updated_at\": \"2019-02-14 06:43:24 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"gpfvic\",\n    \"id\": 1178928,\n    \"node_id\": \"MDQ6VXNlcjExNzg5Mjg=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1178928?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/gpfvic\",\n    \"html_url\": \"https://github.com/gpfvic\",\n    \"followers_url\": \"https://api.github.com/users/gpfvic/followers\",\n    \"following_url\": \"https://api.github.com/users/gpfvic/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/gpfvic/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/gpfvic/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/gpfvic/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/gpfvic/orgs\",\n    \"repos_url\": \"https://api.github.com/users/gpfvic/repos\",\n    \"events_url\": \"https://api.github.com/users/gpfvic/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/gpfvic/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Pengfei Gao\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"gpfvic!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 64,\n    \"public_gists\": 2,\n    \"followers\": 8,\n    \"following\": 5,\n    \"created_at\": \"2011-11-07 20:28:20 UTC\",\n    \"updated_at\": \"2018-12-29 10:46:54 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"gprashanthkumar\",\n    \"id\": 6303265,\n    \"node_id\": \"MDQ6VXNlcjYzMDMyNjU=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/6303265?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/gprashanthkumar\",\n    \"html_url\": \"https://github.com/gprashanthkumar\",\n    \"followers_url\": \"https://api.github.com/users/gprashanthkumar/followers\",\n    \"following_url\": \"https://api.github.com/users/gprashanthkumar/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/gprashanthkumar/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/gprashanthkumar/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/gprashanthkumar/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/gprashanthkumar/orgs\",\n    \"repos_url\": \"https://api.github.com/users/gprashanthkumar/repos\",\n    \"events_url\": \"https://api.github.com/users/gprashanthkumar/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/gprashanthkumar/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Prashanth\",\n    \"company\": \"MWebWare Software Services\",\n    \"blog\": \"www.mwebware.com\",\n    \"location\": \"Hyderabasd\",\n    \"email\": \"gprashanthkumar!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Program Manager at a Medical Software Development Company.\",\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2014-01-02 13:09:27 UTC\",\n    \"updated_at\": \"2019-01-16 16:23:08 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"gracechristina\",\n    \"id\": 19769340,\n    \"node_id\": \"MDQ6VXNlcjE5NzY5MzQw\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/19769340?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/gracechristina\",\n    \"html_url\": \"https://github.com/gracechristina\",\n    \"followers_url\": \"https://api.github.com/users/gracechristina/followers\",\n    \"following_url\": \"https://api.github.com/users/gracechristina/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/gracechristina/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/gracechristina/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/gracechristina/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/gracechristina/orgs\",\n    \"repos_url\": \"https://api.github.com/users/gracechristina/repos\",\n    \"events_url\": \"https://api.github.com/users/gracechristina/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/gracechristina/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"gracechristina!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 17,\n    \"public_gists\": 1,\n    \"followers\": 1,\n    \"following\": 1,\n    \"created_at\": \"2016-06-06 03:41:23 UTC\",\n    \"updated_at\": \"2019-02-14 05:28:15 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"gsunner\",\n    \"id\": 8726172,\n    \"node_id\": \"MDQ6VXNlcjg3MjYxNzI=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/8726172?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/gsunner\",\n    \"html_url\": \"https://github.com/gsunner\",\n    \"followers_url\": \"https://api.github.com/users/gsunner/followers\",\n    \"following_url\": \"https://api.github.com/users/gsunner/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/gsunner/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/gsunner/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/gsunner/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/gsunner/orgs\",\n    \"repos_url\": \"https://api.github.com/users/gsunner/repos\",\n    \"events_url\": \"https://api.github.com/users/gsunner/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/gsunner/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Gurminder Sunner\",\n    \"company\": \"Seldon\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"gsunner!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 7,\n    \"public_gists\": 0,\n    \"followers\": 6,\n    \"following\": 0,\n    \"created_at\": \"2014-09-10 17:05:30 UTC\",\n    \"updated_at\": \"2019-02-04 13:58:10 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"gundeti\",\n    \"id\": 5632184,\n    \"node_id\": \"MDQ6VXNlcjU2MzIxODQ=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/5632184?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/gundeti\",\n    \"html_url\": \"https://github.com/gundeti\",\n    \"followers_url\": \"https://api.github.com/users/gundeti/followers\",\n    \"following_url\": \"https://api.github.com/users/gundeti/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/gundeti/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/gundeti/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/gundeti/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/gundeti/orgs\",\n    \"repos_url\": \"https://api.github.com/users/gundeti/repos\",\n    \"events_url\": \"https://api.github.com/users/gundeti/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/gundeti/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"gundeti!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 12,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2013-10-07 19:42:34 UTC\",\n    \"updated_at\": \"2019-01-06 00:09:21 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"gxfun\",\n    \"id\": 28553467,\n    \"node_id\": \"MDQ6VXNlcjI4NTUzNDY3\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/28553467?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/gxfun\",\n    \"html_url\": \"https://github.com/gxfun\",\n    \"followers_url\": \"https://api.github.com/users/gxfun/followers\",\n    \"following_url\": \"https://api.github.com/users/gxfun/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/gxfun/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/gxfun/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/gxfun/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/gxfun/orgs\",\n    \"repos_url\": \"https://api.github.com/users/gxfun/repos\",\n    \"events_url\": \"https://api.github.com/users/gxfun/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/gxfun/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"gxfun!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 19,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 1,\n    \"created_at\": \"2017-05-09 03:38:39 UTC\",\n    \"updated_at\": \"2019-01-10 06:44:55 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"hackenzheng\",\n    \"id\": 16522546,\n    \"node_id\": \"MDQ6VXNlcjE2NTIyNTQ2\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/16522546?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/hackenzheng\",\n    \"html_url\": \"https://github.com/hackenzheng\",\n    \"followers_url\": \"https://api.github.com/users/hackenzheng/followers\",\n    \"following_url\": \"https://api.github.com/users/hackenzheng/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/hackenzheng/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/hackenzheng/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/hackenzheng/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/hackenzheng/orgs\",\n    \"repos_url\": \"https://api.github.com/users/hackenzheng/repos\",\n    \"events_url\": \"https://api.github.com/users/hackenzheng/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/hackenzheng/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"hacken\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"hackenzheng!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 5,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 6,\n    \"created_at\": \"2016-01-03 03:27:29 UTC\",\n    \"updated_at\": \"2019-02-15 13:29:28 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"happyhuman\",\n    \"id\": 3443249,\n    \"node_id\": \"MDQ6VXNlcjM0NDMyNDk=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/3443249?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/happyhuman\",\n    \"html_url\": \"https://github.com/happyhuman\",\n    \"followers_url\": \"https://api.github.com/users/happyhuman/followers\",\n    \"following_url\": \"https://api.github.com/users/happyhuman/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/happyhuman/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/happyhuman/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/happyhuman/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/happyhuman/orgs\",\n    \"repos_url\": \"https://api.github.com/users/happyhuman/repos\",\n    \"events_url\": \"https://api.github.com/users/happyhuman/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/happyhuman/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Shahin\",\n    \"company\": null,\n    \"blog\": \"www.shahin.us\",\n    \"location\": \"Mountain View, CA\",\n    \"email\": \"happyhuman!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 2,\n    \"public_gists\": 1,\n    \"followers\": 2,\n    \"following\": 2,\n    \"created_at\": \"2013-01-31 23:20:24 UTC\",\n    \"updated_at\": \"2019-01-31 19:24:41 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"hbarrington\",\n    \"id\": 447636,\n    \"node_id\": \"MDQ6VXNlcjQ0NzYzNg==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/447636?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/hbarrington\",\n    \"html_url\": \"https://github.com/hbarrington\",\n    \"followers_url\": \"https://api.github.com/users/hbarrington/followers\",\n    \"following_url\": \"https://api.github.com/users/hbarrington/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/hbarrington/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/hbarrington/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/hbarrington/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/hbarrington/orgs\",\n    \"repos_url\": \"https://api.github.com/users/hbarrington/repos\",\n    \"events_url\": \"https://api.github.com/users/hbarrington/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/hbarrington/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Hunter Barrington\",\n    \"company\": \"Bestgate Engineering\",\n    \"blog\": \"\",\n    \"location\": \"Baltimore, MD / Washington DC\",\n    \"email\": \"hbarrington!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 16,\n    \"public_gists\": 8,\n    \"followers\": 14,\n    \"following\": 34,\n    \"created_at\": \"2010-10-20 23:51:44 UTC\",\n    \"updated_at\": \"2019-01-31 20:38:08 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"hexerei\",\n    \"id\": 452961,\n    \"node_id\": \"MDQ6VXNlcjQ1Mjk2MQ==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/452961?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/hexerei\",\n    \"html_url\": \"https://github.com/hexerei\",\n    \"followers_url\": \"https://api.github.com/users/hexerei/followers\",\n    \"following_url\": \"https://api.github.com/users/hexerei/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/hexerei/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/hexerei/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/hexerei/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/hexerei/orgs\",\n    \"repos_url\": \"https://api.github.com/users/hexerei/repos\",\n    \"events_url\": \"https://api.github.com/users/hexerei/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/hexerei/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Daniel Vorhauer\",\n    \"company\": \"hexerei software creations\",\n    \"blog\": \"http://www.hexerei-software.de\",\n    \"location\": \"Germany\",\n    \"email\": \"hexerei!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Hacking computers since the 80's - programming languages, frameworks and devices - my world is machine learning, artificial intelligence, robotics and BigData\",\n    \"public_repos\": 8,\n    \"public_gists\": 5,\n    \"followers\": 3,\n    \"following\": 2,\n    \"created_at\": \"2010-10-25 11:58:59 UTC\",\n    \"updated_at\": \"2019-01-03 14:56:41 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"hholst80\",\n    \"id\": 6200749,\n    \"node_id\": \"MDQ6VXNlcjYyMDA3NDk=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/6200749?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/hholst80\",\n    \"html_url\": \"https://github.com/hholst80\",\n    \"followers_url\": \"https://api.github.com/users/hholst80/followers\",\n    \"following_url\": \"https://api.github.com/users/hholst80/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/hholst80/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/hholst80/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/hholst80/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/hholst80/orgs\",\n    \"repos_url\": \"https://api.github.com/users/hholst80/repos\",\n    \"events_url\": \"https://api.github.com/users/hholst80/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/hholst80/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Henrik Holst\",\n    \"company\": null,\n    \"blog\": \"http://www.matmech.com/\",\n    \"location\": \"Sweden\",\n    \"email\": \"hholst80!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 37,\n    \"public_gists\": 7,\n    \"followers\": 6,\n    \"following\": 4,\n    \"created_at\": \"2013-12-16 21:36:46 UTC\",\n    \"updated_at\": \"2019-02-14 16:39:21 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"hubertg1122\",\n    \"id\": 42930998,\n    \"node_id\": \"MDQ6VXNlcjQyOTMwOTk4\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/42930998?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/hubertg1122\",\n    \"html_url\": \"https://github.com/hubertg1122\",\n    \"followers_url\": \"https://api.github.com/users/hubertg1122/followers\",\n    \"following_url\": \"https://api.github.com/users/hubertg1122/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/hubertg1122/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/hubertg1122/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/hubertg1122/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/hubertg1122/orgs\",\n    \"repos_url\": \"https://api.github.com/users/hubertg1122/repos\",\n    \"events_url\": \"https://api.github.com/users/hubertg1122/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/hubertg1122/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"hubertg1122!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-09-03 08:43:17 UTC\",\n    \"updated_at\": \"2019-02-04 17:28:53 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"hylick\",\n    \"id\": 800825,\n    \"node_id\": \"MDQ6VXNlcjgwMDgyNQ==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/800825?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/hylick\",\n    \"html_url\": \"https://github.com/hylick\",\n    \"followers_url\": \"https://api.github.com/users/hylick/followers\",\n    \"following_url\": \"https://api.github.com/users/hylick/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/hylick/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/hylick/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/hylick/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/hylick/orgs\",\n    \"repos_url\": \"https://api.github.com/users/hylick/repos\",\n    \"events_url\": \"https://api.github.com/users/hylick/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/hylick/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Anthony Hylick\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"hylick!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 5,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 2,\n    \"created_at\": \"2011-05-20 16:38:02 UTC\",\n    \"updated_at\": \"2018-09-24 20:36:05 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"hyzhak\",\n    \"id\": 184706,\n    \"node_id\": \"MDQ6VXNlcjE4NDcwNg==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/184706?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/hyzhak\",\n    \"html_url\": \"https://github.com/hyzhak\",\n    \"followers_url\": \"https://api.github.com/users/hyzhak/followers\",\n    \"following_url\": \"https://api.github.com/users/hyzhak/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/hyzhak/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/hyzhak/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/hyzhak/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/hyzhak/orgs\",\n    \"repos_url\": \"https://api.github.com/users/hyzhak/repos\",\n    \"events_url\": \"https://api.github.com/users/hyzhak/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/hyzhak/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Eugene Krevenets\",\n    \"company\": \"Jakijak\",\n    \"blog\": \"https://hyzhak.github.io\",\n    \"location\": \"Tivat, Montenegro\",\n    \"email\": \"hyzhak!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Full stack developer with math and ML background. \",\n    \"public_repos\": 142,\n    \"public_gists\": 42,\n    \"followers\": 68,\n    \"following\": 51,\n    \"created_at\": \"2010-01-18 15:53:49 UTC\",\n    \"updated_at\": \"2019-01-24 15:26:16 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"idibidiart\",\n    \"id\": 1288823,\n    \"node_id\": \"MDQ6VXNlcjEyODg4MjM=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/1288823?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/idibidiart\",\n    \"html_url\": \"https://github.com/idibidiart\",\n    \"followers_url\": \"https://api.github.com/users/idibidiart/followers\",\n    \"following_url\": \"https://api.github.com/users/idibidiart/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/idibidiart/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/idibidiart/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/idibidiart/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/idibidiart/orgs\",\n    \"repos_url\": \"https://api.github.com/users/idibidiart/repos\",\n    \"events_url\": \"https://api.github.com/users/idibidiart/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/idibidiart/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"idibidiart!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 165,\n    \"public_gists\": 43,\n    \"followers\": 51,\n    \"following\": 14,\n    \"created_at\": \"2011-12-27 18:30:47 UTC\",\n    \"updated_at\": \"2019-02-05 23:30:15 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"idvoretskyi\",\n    \"id\": 118459,\n    \"node_id\": \"MDQ6VXNlcjExODQ1OQ==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/118459?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/idvoretskyi\",\n    \"html_url\": \"https://github.com/idvoretskyi\",\n    \"followers_url\": \"https://api.github.com/users/idvoretskyi/followers\",\n    \"following_url\": \"https://api.github.com/users/idvoretskyi/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/idvoretskyi/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/idvoretskyi/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/idvoretskyi/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/idvoretskyi/orgs\",\n    \"repos_url\": \"https://api.github.com/users/idvoretskyi/repos\",\n    \"events_url\": \"https://api.github.com/users/idvoretskyi/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/idvoretskyi/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ihor Dvoretskyi\",\n    \"company\": \"@cncf @kubernetes \",\n    \"blog\": \"twitter.com/idvoretskyi\",\n    \"location\": null,\n    \"email\": \"idvoretskyi!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 71,\n    \"public_gists\": 32,\n    \"followers\": 150,\n    \"following\": 47,\n    \"created_at\": \"2009-08-23 05:51:11 UTC\",\n    \"updated_at\": \"2019-02-08 16:07:42 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"ifilonenko\",\n    \"id\": 4926714,\n    \"node_id\": \"MDQ6VXNlcjQ5MjY3MTQ=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/4926714?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ifilonenko\",\n    \"html_url\": \"https://github.com/ifilonenko\",\n    \"followers_url\": \"https://api.github.com/users/ifilonenko/followers\",\n    \"following_url\": \"https://api.github.com/users/ifilonenko/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ifilonenko/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ifilonenko/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ifilonenko/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ifilonenko/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ifilonenko/repos\",\n    \"events_url\": \"https://api.github.com/users/ifilonenko/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ifilonenko/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ilan Filonenko\",\n    \"company\": \"Bloomberg LP @bloomberg\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ifilonenko!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Systems and ML\",\n    \"public_repos\": 62,\n    \"public_gists\": 3,\n    \"followers\": 37,\n    \"following\": 87,\n    \"created_at\": \"2013-07-03 03:53:00 UTC\",\n    \"updated_at\": \"2019-02-02 22:44:44 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"iftachsc\",\n    \"id\": 28829551,\n    \"node_id\": \"MDQ6VXNlcjI4ODI5NTUx\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/28829551?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/iftachsc\",\n    \"html_url\": \"https://github.com/iftachsc\",\n    \"followers_url\": \"https://api.github.com/users/iftachsc/followers\",\n    \"following_url\": \"https://api.github.com/users/iftachsc/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/iftachsc/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/iftachsc/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/iftachsc/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/iftachsc/orgs\",\n    \"repos_url\": \"https://api.github.com/users/iftachsc/repos\",\n    \"events_url\": \"https://api.github.com/users/iftachsc/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/iftachsc/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Iftach Schonbaum\",\n    \"company\": \"CloudZone\",\n    \"blog\": \"http://cloudzone.io\",\n    \"location\": \"Tel Aviv, Israel\",\n    \"email\": \"iftachsc!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Been a developer for 5 years around Node, Scala, Java & now\\r\\nDevOps Engineer and team leader for 2 years at CloudZone (cloudzone.io)\",\n    \"public_repos\": 21,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2017-05-20 18:28:47 UTC\",\n    \"updated_at\": \"2019-02-18 19:28:52 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"ilchemla\",\n    \"id\": 16705918,\n    \"node_id\": \"MDQ6VXNlcjE2NzA1OTE4\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/16705918?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ilchemla\",\n    \"html_url\": \"https://github.com/ilchemla\",\n    \"followers_url\": \"https://api.github.com/users/ilchemla/followers\",\n    \"following_url\": \"https://api.github.com/users/ilchemla/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ilchemla/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ilchemla/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ilchemla/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ilchemla/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ilchemla/repos\",\n    \"events_url\": \"https://api.github.com/users/ilchemla/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ilchemla/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ilan\",\n    \"company\": \"@Visualead \",\n    \"blog\": \"http://twitter.com/ilchemla\",\n    \"location\": null,\n    \"email\": \"ilchemla!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Team Leader @Alibaba Israel\",\n    \"public_repos\": 4,\n    \"public_gists\": 1,\n    \"followers\": 5,\n    \"following\": 4,\n    \"created_at\": \"2016-01-14 15:53:20 UTC\",\n    \"updated_at\": \"2019-02-07 09:04:02 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"iliastsi\",\n    \"id\": 1261016,\n    \"node_id\": \"MDQ6VXNlcjEyNjEwMTY=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/1261016?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/iliastsi\",\n    \"html_url\": \"https://github.com/iliastsi\",\n    \"followers_url\": \"https://api.github.com/users/iliastsi/followers\",\n    \"following_url\": \"https://api.github.com/users/iliastsi/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/iliastsi/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/iliastsi/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/iliastsi/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/iliastsi/orgs\",\n    \"repos_url\": \"https://api.github.com/users/iliastsi/repos\",\n    \"events_url\": \"https://api.github.com/users/iliastsi/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/iliastsi/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ilias Tsitsimpis\",\n    \"company\": \"@Arrikto\",\n    \"blog\": \"\",\n    \"location\": \"Greece\",\n    \"email\": \"iliastsi!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 25,\n    \"public_gists\": 0,\n    \"followers\": 17,\n    \"following\": 10,\n    \"created_at\": \"2011-12-13 18:19:18 UTC\",\n    \"updated_at\": \"2019-01-21 21:03:19 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"inc0\",\n    \"id\": 697528,\n    \"node_id\": \"MDQ6VXNlcjY5NzUyOA==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/697528?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/inc0\",\n    \"html_url\": \"https://github.com/inc0\",\n    \"followers_url\": \"https://api.github.com/users/inc0/followers\",\n    \"following_url\": \"https://api.github.com/users/inc0/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/inc0/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/inc0/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/inc0/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/inc0/orgs\",\n    \"repos_url\": \"https://api.github.com/users/inc0/repos\",\n    \"events_url\": \"https://api.github.com/users/inc0/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/inc0/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": true,\n    \"name\": \"Michał Jastrzębski\",\n    \"company\": \"GitHub\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"inc0!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"I break stuff for living. Cloud enginseer\",\n    \"public_repos\": 61,\n    \"public_gists\": 2,\n    \"followers\": 26,\n    \"following\": 1,\n    \"created_at\": \"2011-03-29 15:35:14 UTC\",\n    \"updated_at\": \"2019-02-01 15:26:35 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"irhawks\",\n    \"id\": 5540014,\n    \"node_id\": \"MDQ6VXNlcjU1NDAwMTQ=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/5540014?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/irhawks\",\n    \"html_url\": \"https://github.com/irhawks\",\n    \"followers_url\": \"https://api.github.com/users/irhawks/followers\",\n    \"following_url\": \"https://api.github.com/users/irhawks/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/irhawks/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/irhawks/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/irhawks/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/irhawks/orgs\",\n    \"repos_url\": \"https://api.github.com/users/irhawks/repos\",\n    \"events_url\": \"https://api.github.com/users/irhawks/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/irhawks/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"irhawks!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 54,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 2,\n    \"created_at\": \"2013-09-25 13:24:38 UTC\",\n    \"updated_at\": \"2018-12-15 14:23:43 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"iyera\",\n    \"id\": 523359,\n    \"node_id\": \"MDQ6VXNlcjUyMzM1OQ==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/523359?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/iyera\",\n    \"html_url\": \"https://github.com/iyera\",\n    \"followers_url\": \"https://api.github.com/users/iyera/followers\",\n    \"following_url\": \"https://api.github.com/users/iyera/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/iyera/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/iyera/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/iyera/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/iyera/orgs\",\n    \"repos_url\": \"https://api.github.com/users/iyera/repos\",\n    \"events_url\": \"https://api.github.com/users/iyera/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/iyera/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Anand\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"iyera!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 4,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2010-12-14 21:48:24 UTC\",\n    \"updated_at\": \"2018-08-02 00:56:19 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jaKjH101\",\n    \"id\": 45080506,\n    \"node_id\": \"MDQ6VXNlcjQ1MDgwNTA2\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/45080506?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jaKjH101\",\n    \"html_url\": \"https://github.com/jaKjH101\",\n    \"followers_url\": \"https://api.github.com/users/jaKjH101/followers\",\n    \"following_url\": \"https://api.github.com/users/jaKjH101/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jaKjH101/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jaKjH101/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jaKjH101/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jaKjH101/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jaKjH101/repos\",\n    \"events_url\": \"https://api.github.com/users/jaKjH101/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jaKjH101/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"jaKjH101!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 11,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-11-15 20:43:19 UTC\",\n    \"updated_at\": \"2018-11-15 21:04:36 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jamborta\",\n    \"id\": 4638229,\n    \"node_id\": \"MDQ6VXNlcjQ2MzgyMjk=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/4638229?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jamborta\",\n    \"html_url\": \"https://github.com/jamborta\",\n    \"followers_url\": \"https://api.github.com/users/jamborta/followers\",\n    \"following_url\": \"https://api.github.com/users/jamborta/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jamborta/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jamborta/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jamborta/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jamborta/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jamborta/repos\",\n    \"events_url\": \"https://api.github.com/users/jamborta/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jamborta/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"jamborta!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 18,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 4,\n    \"created_at\": \"2013-06-07 08:12:33 UTC\",\n    \"updated_at\": \"2019-02-19 18:25:36 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"janvdvegt\",\n    \"id\": 12046878,\n    \"node_id\": \"MDQ6VXNlcjEyMDQ2ODc4\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/12046878?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/janvdvegt\",\n    \"html_url\": \"https://github.com/janvdvegt\",\n    \"followers_url\": \"https://api.github.com/users/janvdvegt/followers\",\n    \"following_url\": \"https://api.github.com/users/janvdvegt/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/janvdvegt/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/janvdvegt/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/janvdvegt/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/janvdvegt/orgs\",\n    \"repos_url\": \"https://api.github.com/users/janvdvegt/repos\",\n    \"events_url\": \"https://api.github.com/users/janvdvegt/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/janvdvegt/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"janvdvegt!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 14,\n    \"public_gists\": 0,\n    \"followers\": 9,\n    \"following\": 0,\n    \"created_at\": \"2015-04-21 08:21:30 UTC\",\n    \"updated_at\": \"2019-02-10 16:02:10 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jasongrout\",\n    \"id\": 192614,\n    \"node_id\": \"MDQ6VXNlcjE5MjYxNA==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/192614?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jasongrout\",\n    \"html_url\": \"https://github.com/jasongrout\",\n    \"followers_url\": \"https://api.github.com/users/jasongrout/followers\",\n    \"following_url\": \"https://api.github.com/users/jasongrout/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jasongrout/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jasongrout/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jasongrout/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jasongrout/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jasongrout/repos\",\n    \"events_url\": \"https://api.github.com/users/jasongrout/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jasongrout/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jason Grout\",\n    \"company\": \"@bloomberg\",\n    \"blog\": \"http://jasongrout.org\",\n    \"location\": null,\n    \"email\": \"jasongrout!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"I work on Jupyter and other software at Bloomberg. Previously, I was a math professor at Drake University.\",\n    \"public_repos\": 151,\n    \"public_gists\": 67,\n    \"followers\": 283,\n    \"following\": 19,\n    \"created_at\": \"2010-01-29 23:19:39 UTC\",\n    \"updated_at\": \"2019-02-07 15:26:29 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jax79sg\",\n    \"id\": 2820927,\n    \"node_id\": \"MDQ6VXNlcjI4MjA5Mjc=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/2820927?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jax79sg\",\n    \"html_url\": \"https://github.com/jax79sg\",\n    \"followers_url\": \"https://api.github.com/users/jax79sg/followers\",\n    \"following_url\": \"https://api.github.com/users/jax79sg/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jax79sg/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jax79sg/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jax79sg/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jax79sg/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jax79sg/repos\",\n    \"events_url\": \"https://api.github.com/users/jax79sg/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jax79sg/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Kah Siong Tan\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"jax79sg!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Dip (Electronics, Comp & Comms) in 1999,  BEng (Computer Engineering) in 2005, Worked till 2016, now back in school for MSc Web Science & Big Data Analytics.\",\n    \"public_repos\": 18,\n    \"public_gists\": 1,\n    \"followers\": 4,\n    \"following\": 0,\n    \"created_at\": \"2012-11-17 11:51:34 UTC\",\n    \"updated_at\": \"2019-01-29 03:18:06 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jayunit100\",\n    \"id\": 826111,\n    \"node_id\": \"MDQ6VXNlcjgyNjExMQ==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/826111?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jayunit100\",\n    \"html_url\": \"https://github.com/jayunit100\",\n    \"followers_url\": \"https://api.github.com/users/jayunit100/followers\",\n    \"following_url\": \"https://api.github.com/users/jayunit100/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jayunit100/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jayunit100/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jayunit100/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jayunit100/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jayunit100/repos\",\n    \"events_url\": \"https://api.github.com/users/jayunit100/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jayunit100/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"jay vyas\",\n    \"company\": \"Blackduck software\",\n    \"blog\": \"http://jayunit100.blogspot.com\",\n    \"location\": \"01742\",\n    \"email\": \"jayunit100!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Cloud Native Engineering Mansplainer @ Synopsys Inc. Ex-Red Hat Bioinformatics, Peerindex,  Red \",\n    \"public_repos\": 173,\n    \"public_gists\": 164,\n    \"followers\": 77,\n    \"following\": 63,\n    \"created_at\": \"2011-06-02 19:58:05 UTC\",\n    \"updated_at\": \"2019-02-19 06:13:13 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jberkus\",\n    \"id\": 115146,\n    \"node_id\": \"MDQ6VXNlcjExNTE0Ng==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/115146?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jberkus\",\n    \"html_url\": \"https://github.com/jberkus\",\n    \"followers_url\": \"https://api.github.com/users/jberkus/followers\",\n    \"following_url\": \"https://api.github.com/users/jberkus/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jberkus/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jberkus/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jberkus/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jberkus/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jberkus/repos\",\n    \"events_url\": \"https://api.github.com/users/jberkus/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jberkus/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Josh Berkus\",\n    \"company\": \"Red Hat\",\n    \"blog\": \"http://jberkus.github.io\",\n    \"location\": \"Portland, OR\",\n    \"email\": \"jberkus!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Twitter: @fuzzychef\\r\\nKubernetes Slack: jberkus\\r\\nIRC.freenode.net: jberkus\",\n    \"public_repos\": 59,\n    \"public_gists\": 48,\n    \"followers\": 194,\n    \"following\": 4,\n    \"created_at\": \"2009-08-14 00:14:40 UTC\",\n    \"updated_at\": \"2019-01-07 19:48:49 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jckwon\",\n    \"id\": 20151966,\n    \"node_id\": \"MDQ6VXNlcjIwMTUxOTY2\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/20151966?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jckwon\",\n    \"html_url\": \"https://github.com/jckwon\",\n    \"followers_url\": \"https://api.github.com/users/jckwon/followers\",\n    \"following_url\": \"https://api.github.com/users/jckwon/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jckwon/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jckwon/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jckwon/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jckwon/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jckwon/repos\",\n    \"events_url\": \"https://api.github.com/users/jckwon/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jckwon/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"jckwon!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 2,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 2,\n    \"created_at\": \"2016-06-26 12:46:49 UTC\",\n    \"updated_at\": \"2018-05-10 11:16:37 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jcurlier\",\n    \"id\": 2846867,\n    \"node_id\": \"MDQ6VXNlcjI4NDY4Njc=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/2846867?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jcurlier\",\n    \"html_url\": \"https://github.com/jcurlier\",\n    \"followers_url\": \"https://api.github.com/users/jcurlier/followers\",\n    \"following_url\": \"https://api.github.com/users/jcurlier/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jcurlier/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jcurlier/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jcurlier/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jcurlier/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jcurlier/repos\",\n    \"events_url\": \"https://api.github.com/users/jcurlier/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jcurlier/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jerome Curlier\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"San Francisco\",\n    \"email\": \"jcurlier!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Entrepeneur, rocket scientist, fullstack developer, domainer and dad\",\n    \"public_repos\": 15,\n    \"public_gists\": 1,\n    \"followers\": 5,\n    \"following\": 0,\n    \"created_at\": \"2012-11-20 18:51:56 UTC\",\n    \"updated_at\": \"2019-02-20 04:05:47 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jdoliner\",\n    \"id\": 43867,\n    \"node_id\": \"MDQ6VXNlcjQzODY3\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/43867?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jdoliner\",\n    \"html_url\": \"https://github.com/jdoliner\",\n    \"followers_url\": \"https://api.github.com/users/jdoliner/followers\",\n    \"following_url\": \"https://api.github.com/users/jdoliner/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jdoliner/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jdoliner/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jdoliner/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jdoliner/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jdoliner/repos\",\n    \"events_url\": \"https://api.github.com/users/jdoliner/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jdoliner/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Joe Doliner\",\n    \"company\": \"Pachyderm\",\n    \"blog\": \"http://joedoliner.com\",\n    \"location\": \"PH.SF.CA\",\n    \"email\": \"jdoliner!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Co-founder, CEO @pachyderm.\\r\\nFirst engineer @rethinkdb.\",\n    \"public_repos\": 21,\n    \"public_gists\": 54,\n    \"followers\": 146,\n    \"following\": 49,\n    \"created_at\": \"2009-01-03 01:17:06 UTC\",\n    \"updated_at\": \"2018-12-23 18:59:59 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jdplatt\",\n    \"id\": 15080339,\n    \"node_id\": \"MDQ6VXNlcjE1MDgwMzM5\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/15080339?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jdplatt\",\n    \"html_url\": \"https://github.com/jdplatt\",\n    \"followers_url\": \"https://api.github.com/users/jdplatt/followers\",\n    \"following_url\": \"https://api.github.com/users/jdplatt/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jdplatt/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jdplatt/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jdplatt/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jdplatt/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jdplatt/repos\",\n    \"events_url\": \"https://api.github.com/users/jdplatt/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jdplatt/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"jdplatt!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2015-10-11 23:05:55 UTC\",\n    \"updated_at\": \"2019-02-19 21:28:13 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jdstrand\",\n    \"id\": 1663079,\n    \"node_id\": \"MDQ6VXNlcjE2NjMwNzk=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1663079?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jdstrand\",\n    \"html_url\": \"https://github.com/jdstrand\",\n    \"followers_url\": \"https://api.github.com/users/jdstrand/followers\",\n    \"following_url\": \"https://api.github.com/users/jdstrand/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jdstrand/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jdstrand/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jdstrand/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jdstrand/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jdstrand/repos\",\n    \"events_url\": \"https://api.github.com/users/jdstrand/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jdstrand/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"jdstrand!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 9,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2012-04-20 14:24:58 UTC\",\n    \"updated_at\": \"2019-02-18 17:06:11 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jeremievallee\",\n    \"id\": 10242666,\n    \"node_id\": \"MDQ6VXNlcjEwMjQyNjY2\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/10242666?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jeremievallee\",\n    \"html_url\": \"https://github.com/jeremievallee\",\n    \"followers_url\": \"https://api.github.com/users/jeremievallee/followers\",\n    \"following_url\": \"https://api.github.com/users/jeremievallee/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jeremievallee/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jeremievallee/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jeremievallee/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jeremievallee/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jeremievallee/repos\",\n    \"events_url\": \"https://api.github.com/users/jeremievallee/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jeremievallee/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jeremie Vallee\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"London\",\n    \"email\": \"jeremievallee!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"DevOps - Infrastructure Engineer in London\",\n    \"public_repos\": 12,\n    \"public_gists\": 5,\n    \"followers\": 12,\n    \"following\": 0,\n    \"created_at\": \"2014-12-19 11:09:46 UTC\",\n    \"updated_at\": \"2019-02-20 01:18:14 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jessesuen\",\n    \"id\": 12677113,\n    \"node_id\": \"MDQ6VXNlcjEyNjc3MTEz\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/12677113?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jessesuen\",\n    \"html_url\": \"https://github.com/jessesuen\",\n    \"followers_url\": \"https://api.github.com/users/jessesuen/followers\",\n    \"following_url\": \"https://api.github.com/users/jessesuen/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jessesuen/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jessesuen/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jessesuen/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jessesuen/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jessesuen/repos\",\n    \"events_url\": \"https://api.github.com/users/jessesuen/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jessesuen/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jesse Suen\",\n    \"company\": \"Intuit\",\n    \"blog\": \"\",\n    \"location\": \"Mountain View, CA\",\n    \"email\": \"jessesuen!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Working on argoproj.io\",\n    \"public_repos\": 26,\n    \"public_gists\": 2,\n    \"followers\": 32,\n    \"following\": 1,\n    \"created_at\": \"2015-05-30 21:27:18 UTC\",\n    \"updated_at\": \"2019-01-30 22:03:38 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jiaanguo\",\n    \"id\": 16428388,\n    \"node_id\": \"MDQ6VXNlcjE2NDI4Mzg4\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/16428388?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jiaanguo\",\n    \"html_url\": \"https://github.com/jiaanguo\",\n    \"followers_url\": \"https://api.github.com/users/jiaanguo/followers\",\n    \"following_url\": \"https://api.github.com/users/jiaanguo/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jiaanguo/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jiaanguo/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jiaanguo/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jiaanguo/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jiaanguo/repos\",\n    \"events_url\": \"https://api.github.com/users/jiaanguo/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jiaanguo/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"0x7bc77a\",\n    \"company\": \"University of Sydney\",\n    \"blog\": \"\",\n    \"location\": \"Sydney\",\n    \"email\": \"jiaanguo!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 8,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 5,\n    \"created_at\": \"2015-12-24 14:34:42 UTC\",\n    \"updated_at\": \"2019-01-30 05:16:34 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jimmy-huang\",\n    \"id\": 1037247,\n    \"node_id\": \"MDQ6VXNlcjEwMzcyNDc=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1037247?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jimmy-huang\",\n    \"html_url\": \"https://github.com/jimmy-huang\",\n    \"followers_url\": \"https://api.github.com/users/jimmy-huang/followers\",\n    \"following_url\": \"https://api.github.com/users/jimmy-huang/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jimmy-huang/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jimmy-huang/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jimmy-huang/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jimmy-huang/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jimmy-huang/repos\",\n    \"events_url\": \"https://api.github.com/users/jimmy-huang/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jimmy-huang/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jimmy Huang\",\n    \"company\": \"Intel Corporation\",\n    \"blog\": \"\",\n    \"location\": \"Hillsboro, OR\",\n    \"email\": \"jimmy-huang!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 5,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2011-09-08 23:47:38 UTC\",\n    \"updated_at\": \"2019-01-16 20:58:56 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jimspohrer\",\n    \"id\": 26313195,\n    \"node_id\": \"MDQ6VXNlcjI2MzEzMTk1\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/26313195?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jimspohrer\",\n    \"html_url\": \"https://github.com/jimspohrer\",\n    \"followers_url\": \"https://api.github.com/users/jimspohrer/followers\",\n    \"following_url\": \"https://api.github.com/users/jimspohrer/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jimspohrer/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jimspohrer/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jimspohrer/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jimspohrer/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jimspohrer/repos\",\n    \"events_url\": \"https://api.github.com/users/jimspohrer/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jimspohrer/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jim Spohrer\",\n    \"company\": \"IBM\",\n    \"blog\": \"http://service-science.info/archives/2233\",\n    \"location\": \"San Jose, CA\",\n    \"email\": \"jimspohrer!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Director, Cognitive Opentech Group (COG)\",\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 6,\n    \"following\": 9,\n    \"created_at\": \"2017-03-09 22:31:07 UTC\",\n    \"updated_at\": \"2019-02-12 00:37:01 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jinzhejz\",\n    \"id\": 29649831,\n    \"node_id\": \"MDQ6VXNlcjI5NjQ5ODMx\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/29649831?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jinzhejz\",\n    \"html_url\": \"https://github.com/jinzhejz\",\n    \"followers_url\": \"https://api.github.com/users/jinzhejz/followers\",\n    \"following_url\": \"https://api.github.com/users/jinzhejz/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jinzhejz/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jinzhejz/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jinzhejz/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jinzhejz/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jinzhejz/repos\",\n    \"events_url\": \"https://api.github.com/users/jinzhejz/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jinzhejz/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Zhe Jin\",\n    \"company\": \"IBM\",\n    \"blog\": \"\",\n    \"location\": \"Beijing China\",\n    \"email\": \"jinzhejz!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 4,\n    \"public_gists\": 0,\n    \"followers\": 6,\n    \"following\": 1,\n    \"created_at\": \"2017-06-23 06:15:17 UTC\",\n    \"updated_at\": \"2019-01-21 08:23:36 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jjayadeep06\",\n    \"id\": 27731142,\n    \"node_id\": \"MDQ6VXNlcjI3NzMxMTQy\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/27731142?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jjayadeep06\",\n    \"html_url\": \"https://github.com/jjayadeep06\",\n    \"followers_url\": \"https://api.github.com/users/jjayadeep06/followers\",\n    \"following_url\": \"https://api.github.com/users/jjayadeep06/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jjayadeep06/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jjayadeep06/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jjayadeep06/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jjayadeep06/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jjayadeep06/repos\",\n    \"events_url\": \"https://api.github.com/users/jjayadeep06/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jjayadeep06/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"jjayadeep06!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 5,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2017-04-18 14:04:29 UTC\",\n    \"updated_at\": \"2018-12-10 03:31:18 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jkeen871\",\n    \"id\": 8370294,\n    \"node_id\": \"MDQ6VXNlcjgzNzAyOTQ=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/8370294?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jkeen871\",\n    \"html_url\": \"https://github.com/jkeen871\",\n    \"followers_url\": \"https://api.github.com/users/jkeen871/followers\",\n    \"following_url\": \"https://api.github.com/users/jkeen871/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jkeen871/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jkeen871/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jkeen871/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jkeen871/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jkeen871/repos\",\n    \"events_url\": \"https://api.github.com/users/jkeen871/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jkeen871/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"jkeen871!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 5,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2014-08-06 04:09:07 UTC\",\n    \"updated_at\": \"2019-02-19 21:04:14 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jklaise\",\n    \"id\": 13080878,\n    \"node_id\": \"MDQ6VXNlcjEzMDgwODc4\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/13080878?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jklaise\",\n    \"html_url\": \"https://github.com/jklaise\",\n    \"followers_url\": \"https://api.github.com/users/jklaise/followers\",\n    \"following_url\": \"https://api.github.com/users/jklaise/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jklaise/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jklaise/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jklaise/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jklaise/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jklaise/repos\",\n    \"events_url\": \"https://api.github.com/users/jklaise/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jklaise/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Janis Klaise\",\n    \"company\": null,\n    \"blog\": \"http://www.janisklaise.com\",\n    \"location\": \"United Kingdom\",\n    \"email\": \"jklaise!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 16,\n    \"public_gists\": 1,\n    \"followers\": 4,\n    \"following\": 9,\n    \"created_at\": \"2015-06-27 21:15:03 UTC\",\n    \"updated_at\": \"2019-02-12 22:16:18 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jlzhao27\",\n    \"id\": 1727691,\n    \"node_id\": \"MDQ6VXNlcjE3Mjc2OTE=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/1727691?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jlzhao27\",\n    \"html_url\": \"https://github.com/jlzhao27\",\n    \"followers_url\": \"https://api.github.com/users/jlzhao27/followers\",\n    \"following_url\": \"https://api.github.com/users/jlzhao27/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jlzhao27/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jlzhao27/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jlzhao27/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jlzhao27/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jlzhao27/repos\",\n    \"events_url\": \"https://api.github.com/users/jlzhao27/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jlzhao27/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jason Zhao\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Palo Alto, CA\",\n    \"email\": \"jlzhao27!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 11,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2012-05-10 19:21:41 UTC\",\n    \"updated_at\": \"2019-01-30 22:09:55 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"joeliedtke\",\n    \"id\": 11788735,\n    \"node_id\": \"MDQ6VXNlcjExNzg4NzM1\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/11788735?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/joeliedtke\",\n    \"html_url\": \"https://github.com/joeliedtke\",\n    \"followers_url\": \"https://api.github.com/users/joeliedtke/followers\",\n    \"following_url\": \"https://api.github.com/users/joeliedtke/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/joeliedtke/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/joeliedtke/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/joeliedtke/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/joeliedtke/orgs\",\n    \"repos_url\": \"https://api.github.com/users/joeliedtke/repos\",\n    \"events_url\": \"https://api.github.com/users/joeliedtke/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/joeliedtke/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Joe Liedtke\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Seattle, WA\",\n    \"email\": \"joeliedtke!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2015-04-03 17:50:31 UTC\",\n    \"updated_at\": \"2018-11-16 04:40:37 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"john-cr\",\n    \"id\": 22200481,\n    \"node_id\": \"MDQ6VXNlcjIyMjAwNDgx\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/22200481?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/john-cr\",\n    \"html_url\": \"https://github.com/john-cr\",\n    \"followers_url\": \"https://api.github.com/users/john-cr/followers\",\n    \"following_url\": \"https://api.github.com/users/john-cr/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/john-cr/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/john-cr/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/john-cr/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/john-cr/orgs\",\n    \"repos_url\": \"https://api.github.com/users/john-cr/repos\",\n    \"events_url\": \"https://api.github.com/users/john-cr/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/john-cr/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"john-cr!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2016-09-14 16:48:24 UTC\",\n    \"updated_at\": \"2019-02-15 16:46:53 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jokerwenxiao\",\n    \"id\": 3971265,\n    \"node_id\": \"MDQ6VXNlcjM5NzEyNjU=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/3971265?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jokerwenxiao\",\n    \"html_url\": \"https://github.com/jokerwenxiao\",\n    \"followers_url\": \"https://api.github.com/users/jokerwenxiao/followers\",\n    \"following_url\": \"https://api.github.com/users/jokerwenxiao/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jokerwenxiao/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jokerwenxiao/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jokerwenxiao/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jokerwenxiao/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jokerwenxiao/repos\",\n    \"events_url\": \"https://api.github.com/users/jokerwenxiao/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jokerwenxiao/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"jokerwenxiao!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 17,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 2,\n    \"created_at\": \"2013-03-26 05:00:40 UTC\",\n    \"updated_at\": \"2018-10-10 03:59:54 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jonf78\",\n    \"id\": 43207285,\n    \"node_id\": \"MDQ6VXNlcjQzMjA3Mjg1\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/43207285?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jonf78\",\n    \"html_url\": \"https://github.com/jonf78\",\n    \"followers_url\": \"https://api.github.com/users/jonf78/followers\",\n    \"following_url\": \"https://api.github.com/users/jonf78/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jonf78/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jonf78/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jonf78/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jonf78/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jonf78/repos\",\n    \"events_url\": \"https://api.github.com/users/jonf78/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jonf78/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"jonf78!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-09-12 12:09:53 UTC\",\n    \"updated_at\": \"2019-02-12 13:34:07 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"josepalafox\",\n    \"id\": 1505000,\n    \"node_id\": \"MDQ6VXNlcjE1MDUwMDA=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/1505000?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/josepalafox\",\n    \"html_url\": \"https://github.com/josepalafox\",\n    \"followers_url\": \"https://api.github.com/users/josepalafox/followers\",\n    \"following_url\": \"https://api.github.com/users/josepalafox/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/josepalafox/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/josepalafox/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/josepalafox/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/josepalafox/orgs\",\n    \"repos_url\": \"https://api.github.com/users/josepalafox/repos\",\n    \"events_url\": \"https://api.github.com/users/josepalafox/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/josepalafox/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jose Palafox\",\n    \"company\": \"Intel\",\n    \"blog\": \"http://www.intel.com\",\n    \"location\": \"San Francisco\",\n    \"email\": \"josepalafox!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 16,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2012-03-06 00:21:49 UTC\",\n    \"updated_at\": \"2019-02-08 07:16:16 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jrabary\",\n    \"id\": 1025387,\n    \"node_id\": \"MDQ6VXNlcjEwMjUzODc=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1025387?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jrabary\",\n    \"html_url\": \"https://github.com/jrabary\",\n    \"followers_url\": \"https://api.github.com/users/jrabary/followers\",\n    \"following_url\": \"https://api.github.com/users/jrabary/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jrabary/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jrabary/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jrabary/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jrabary/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jrabary/repos\",\n    \"events_url\": \"https://api.github.com/users/jrabary/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jrabary/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jaonary Rabarisoa\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"jrabary!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 134,\n    \"public_gists\": 13,\n    \"followers\": 11,\n    \"following\": 11,\n    \"created_at\": \"2011-09-04 13:23:44 UTC\",\n    \"updated_at\": \"2019-01-05 09:53:07 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jramos\",\n    \"id\": 22294,\n    \"node_id\": \"MDQ6VXNlcjIyMjk0\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/22294?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jramos\",\n    \"html_url\": \"https://github.com/jramos\",\n    \"followers_url\": \"https://api.github.com/users/jramos/followers\",\n    \"following_url\": \"https://api.github.com/users/jramos/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jramos/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jramos/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jramos/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jramos/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jramos/repos\",\n    \"events_url\": \"https://api.github.com/users/jramos/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jramos/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Justin Ramos\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"San Francisco, CA\",\n    \"email\": \"jramos!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"i build things\",\n    \"public_repos\": 93,\n    \"public_gists\": 8,\n    \"followers\": 15,\n    \"following\": 25,\n    \"created_at\": \"2008-08-28 04:45:54 UTC\",\n    \"updated_at\": \"2019-02-14 10:02:37 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jtfogarty\",\n    \"id\": 6708730,\n    \"node_id\": \"MDQ6VXNlcjY3MDg3MzA=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/6708730?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jtfogarty\",\n    \"html_url\": \"https://github.com/jtfogarty\",\n    \"followers_url\": \"https://api.github.com/users/jtfogarty/followers\",\n    \"following_url\": \"https://api.github.com/users/jtfogarty/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jtfogarty/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jtfogarty/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jtfogarty/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jtfogarty/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jtfogarty/repos\",\n    \"events_url\": \"https://api.github.com/users/jtfogarty/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jtfogarty/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Jeff Fogarty\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"United States\",\n    \"email\": \"jtfogarty!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 22,\n    \"public_gists\": 21,\n    \"followers\": 1,\n    \"following\": 4,\n    \"created_at\": \"2014-02-17 20:06:30 UTC\",\n    \"updated_at\": \"2018-12-20 17:24:01 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"juan-sv\",\n    \"id\": 37421419,\n    \"node_id\": \"MDQ6VXNlcjM3NDIxNDE5\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/37421419?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/juan-sv\",\n    \"html_url\": \"https://github.com/juan-sv\",\n    \"followers_url\": \"https://api.github.com/users/juan-sv/followers\",\n    \"following_url\": \"https://api.github.com/users/juan-sv/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/juan-sv/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/juan-sv/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/juan-sv/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/juan-sv/orgs\",\n    \"repos_url\": \"https://api.github.com/users/juan-sv/repos\",\n    \"events_url\": \"https://api.github.com/users/juan-sv/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/juan-sv/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"juan-sv!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-03-15 21:10:55 UTC\",\n    \"updated_at\": \"2019-02-01 14:40:01 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"juandiegopalomino\",\n    \"id\": 10430635,\n    \"node_id\": \"MDQ6VXNlcjEwNDMwNjM1\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/10430635?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/juandiegopalomino\",\n    \"html_url\": \"https://github.com/juandiegopalomino\",\n    \"followers_url\": \"https://api.github.com/users/juandiegopalomino/followers\",\n    \"following_url\": \"https://api.github.com/users/juandiegopalomino/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/juandiegopalomino/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/juandiegopalomino/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/juandiegopalomino/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/juandiegopalomino/orgs\",\n    \"repos_url\": \"https://api.github.com/users/juandiegopalomino/repos\",\n    \"events_url\": \"https://api.github.com/users/juandiegopalomino/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/juandiegopalomino/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Juan Diego Palomino\",\n    \"company\": \"@orbitalinsight \",\n    \"blog\": \"\",\n    \"location\": \"Mountain View, California\",\n    \"email\": \"juandiegopalomino!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Software Engineer\",\n    \"public_repos\": 3,\n    \"public_gists\": 1,\n    \"followers\": 4,\n    \"following\": 14,\n    \"created_at\": \"2015-01-07 05:27:03 UTC\",\n    \"updated_at\": \"2019-02-10 05:51:34 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"junggeh\",\n    \"id\": 6116814,\n    \"node_id\": \"MDQ6VXNlcjYxMTY4MTQ=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/6116814?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/junggeh\",\n    \"html_url\": \"https://github.com/junggeh\",\n    \"followers_url\": \"https://api.github.com/users/junggeh/followers\",\n    \"following_url\": \"https://api.github.com/users/junggeh/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/junggeh/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/junggeh/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/junggeh/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/junggeh/orgs\",\n    \"repos_url\": \"https://api.github.com/users/junggeh/repos\",\n    \"events_url\": \"https://api.github.com/users/junggeh/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/junggeh/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"junggeh!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2013-12-05 18:54:00 UTC\",\n    \"updated_at\": \"2019-01-14 06:22:41 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"justincormack\",\n    \"id\": 482364,\n    \"node_id\": \"MDQ6VXNlcjQ4MjM2NA==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/482364?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/justincormack\",\n    \"html_url\": \"https://github.com/justincormack\",\n    \"followers_url\": \"https://api.github.com/users/justincormack/followers\",\n    \"following_url\": \"https://api.github.com/users/justincormack/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/justincormack/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/justincormack/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/justincormack/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/justincormack/orgs\",\n    \"repos_url\": \"https://api.github.com/users/justincormack/repos\",\n    \"events_url\": \"https://api.github.com/users/justincormack/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/justincormack/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Justin Cormack\",\n    \"company\": \"@docker\",\n    \"blog\": \"https://www.cloudatomiclab.com/\",\n    \"location\": \"Cambridge, UK\",\n    \"email\": \"justincormack!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Engineer at Docker\",\n    \"public_repos\": 196,\n    \"public_gists\": 28,\n    \"followers\": 445,\n    \"following\": 16,\n    \"created_at\": \"2010-11-15 15:02:38 UTC\",\n    \"updated_at\": \"2019-02-05 12:10:11 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"jzf2101\",\n    \"id\": 1373035,\n    \"node_id\": \"MDQ6VXNlcjEzNzMwMzU=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1373035?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/jzf2101\",\n    \"html_url\": \"https://github.com/jzf2101\",\n    \"followers_url\": \"https://api.github.com/users/jzf2101/followers\",\n    \"following_url\": \"https://api.github.com/users/jzf2101/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/jzf2101/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/jzf2101/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/jzf2101/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/jzf2101/orgs\",\n    \"repos_url\": \"https://api.github.com/users/jzf2101/repos\",\n    \"events_url\": \"https://api.github.com/users/jzf2101/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/jzf2101/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"J Forde\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"jzf2101!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 54,\n    \"public_gists\": 2,\n    \"followers\": 53,\n    \"following\": 10,\n    \"created_at\": \"2012-01-24 00:01:13 UTC\",\n    \"updated_at\": \"2019-01-10 21:32:10 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"k82cn\",\n    \"id\": 18107181,\n    \"node_id\": \"MDQ6VXNlcjE4MTA3MTgx\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/18107181?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/k82cn\",\n    \"html_url\": \"https://github.com/k82cn\",\n    \"followers_url\": \"https://api.github.com/users/k82cn/followers\",\n    \"following_url\": \"https://api.github.com/users/k82cn/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/k82cn/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/k82cn/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/k82cn/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/k82cn/orgs\",\n    \"repos_url\": \"https://api.github.com/users/k82cn/repos\",\n    \"events_url\": \"https://api.github.com/users/k82cn/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/k82cn/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Klaus Ma\",\n    \"company\": \"@huawei-paas\",\n    \"blog\": \"http://klaus1982.cn\",\n    \"location\": \"Beijing China\",\n    \"email\": \"k82cn!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Kubernetes Maintainer, co-leader of sig-scheduling;\\r\\nex-IBMer, ex-Baiduer\",\n    \"public_repos\": 66,\n    \"public_gists\": 6,\n    \"followers\": 176,\n    \"following\": 6,\n    \"created_at\": \"2016-03-28 01:44:17 UTC\",\n    \"updated_at\": \"2019-02-20 09:38:46 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"kaiwaehner\",\n    \"id\": 813987,\n    \"node_id\": \"MDQ6VXNlcjgxMzk4Nw==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/813987?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/kaiwaehner\",\n    \"html_url\": \"https://github.com/kaiwaehner\",\n    \"followers_url\": \"https://api.github.com/users/kaiwaehner/followers\",\n    \"following_url\": \"https://api.github.com/users/kaiwaehner/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/kaiwaehner/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/kaiwaehner/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/kaiwaehner/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/kaiwaehner/orgs\",\n    \"repos_url\": \"https://api.github.com/users/kaiwaehner/repos\",\n    \"events_url\": \"https://api.github.com/users/kaiwaehner/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/kaiwaehner/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Kai Waehner\",\n    \"company\": \"Confluent\",\n    \"blog\": \"www.kai-waehner.de\",\n    \"location\": \"Munich, Germany\",\n    \"email\": \"kaiwaehner!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Kai Wähner works as Technolgy Evangelist at Confluent. He is regular speaker at international IT conferences. References: www.kai-waehner.de\",\n    \"public_repos\": 58,\n    \"public_gists\": 12,\n    \"followers\": 152,\n    \"following\": 0,\n    \"created_at\": \"2011-05-27 10:14:06 UTC\",\n    \"updated_at\": \"2019-02-14 15:08:19 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"karlmutch\",\n    \"id\": 1184005,\n    \"node_id\": \"MDQ6VXNlcjExODQwMDU=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/1184005?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/karlmutch\",\n    \"html_url\": \"https://github.com/karlmutch\",\n    \"followers_url\": \"https://api.github.com/users/karlmutch/followers\",\n    \"following_url\": \"https://api.github.com/users/karlmutch/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/karlmutch/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/karlmutch/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/karlmutch/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/karlmutch/orgs\",\n    \"repos_url\": \"https://api.github.com/users/karlmutch/repos\",\n    \"events_url\": \"https://api.github.com/users/karlmutch/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/karlmutch/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Karl Mutch\",\n    \"company\": \"@SentientTechnologies \",\n    \"blog\": \"http://sentient.ai\",\n    \"location\": \"San Francisco, CA\",\n    \"email\": \"karlmutch!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Working in Go on multiple large scale distributed systems for AI platforms, and applications.\",\n    \"public_repos\": 219,\n    \"public_gists\": 22,\n    \"followers\": 12,\n    \"following\": 0,\n    \"created_at\": \"2011-11-09 17:20:01 UTC\",\n    \"updated_at\": \"2019-02-10 23:30:20 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"karthikvadla\",\n    \"id\": 16564109,\n    \"node_id\": \"MDQ6VXNlcjE2NTY0MTA5\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/16564109?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/karthikvadla\",\n    \"html_url\": \"https://github.com/karthikvadla\",\n    \"followers_url\": \"https://api.github.com/users/karthikvadla/followers\",\n    \"following_url\": \"https://api.github.com/users/karthikvadla/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/karthikvadla/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/karthikvadla/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/karthikvadla/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/karthikvadla/orgs\",\n    \"repos_url\": \"https://api.github.com/users/karthikvadla/repos\",\n    \"events_url\": \"https://api.github.com/users/karthikvadla/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/karthikvadla/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Karthik Vadla\",\n    \"company\": \"Intel Corporation\",\n    \"blog\": \"https://www.linkedin.com/in/karthikvadla\",\n    \"location\": \"Portland\",\n    \"email\": \"karthikvadla!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Working as a Cloud Software Engineer in Artificial Intelligence Products Group(AIPG) at Intel Corporation. \",\n    \"public_repos\": 9,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 3,\n    \"created_at\": \"2016-01-05 19:06:16 UTC\",\n    \"updated_at\": \"2019-02-05 18:06:47 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"katherinez22\",\n    \"id\": 4474686,\n    \"node_id\": \"MDQ6VXNlcjQ0NzQ2ODY=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/4474686?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/katherinez22\",\n    \"html_url\": \"https://github.com/katherinez22\",\n    \"followers_url\": \"https://api.github.com/users/katherinez22/followers\",\n    \"following_url\": \"https://api.github.com/users/katherinez22/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/katherinez22/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/katherinez22/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/katherinez22/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/katherinez22/orgs\",\n    \"repos_url\": \"https://api.github.com/users/katherinez22/repos\",\n    \"events_url\": \"https://api.github.com/users/katherinez22/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/katherinez22/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Katherine Zhao\",\n    \"company\": \"Google\",\n    \"blog\": \"http://www.linkedin.com/in/katherinezhao22/\",\n    \"location\": \"Mountain View, CA\",\n    \"email\": \"katherinez22!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 10,\n    \"public_gists\": 0,\n    \"followers\": 10,\n    \"following\": 3,\n    \"created_at\": \"2013-05-20 01:55:16 UTC\",\n    \"updated_at\": \"2019-02-11 15:43:22 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"katsiapis\",\n    \"id\": 22107882,\n    \"node_id\": \"MDQ6VXNlcjIyMTA3ODgy\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/22107882?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/katsiapis\",\n    \"html_url\": \"https://github.com/katsiapis\",\n    \"followers_url\": \"https://api.github.com/users/katsiapis/followers\",\n    \"following_url\": \"https://api.github.com/users/katsiapis/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/katsiapis/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/katsiapis/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/katsiapis/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/katsiapis/orgs\",\n    \"repos_url\": \"https://api.github.com/users/katsiapis/repos\",\n    \"events_url\": \"https://api.github.com/users/katsiapis/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/katsiapis/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Konstantinos Katsiapis\",\n    \"company\": \"@GoogleCloudPlatform @google \",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"katsiapis!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 3,\n    \"public_gists\": 0,\n    \"followers\": 26,\n    \"following\": 0,\n    \"created_at\": \"2016-09-09 22:10:44 UTC\",\n    \"updated_at\": \"2019-01-18 06:47:39 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"kavemun\",\n    \"id\": 24541650,\n    \"node_id\": \"MDQ6VXNlcjI0NTQxNjUw\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/24541650?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/kavemun\",\n    \"html_url\": \"https://github.com/kavemun\",\n    \"followers_url\": \"https://api.github.com/users/kavemun/followers\",\n    \"following_url\": \"https://api.github.com/users/kavemun/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/kavemun/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/kavemun/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/kavemun/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/kavemun/orgs\",\n    \"repos_url\": \"https://api.github.com/users/kavemun/repos\",\n    \"events_url\": \"https://api.github.com/users/kavemun/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/kavemun/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Kah Mun\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"kavemun!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 15,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 2,\n    \"created_at\": \"2016-12-13 08:52:19 UTC\",\n    \"updated_at\": \"2018-11-07 12:49:52 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"kbmanseau\",\n    \"id\": 22695969,\n    \"node_id\": \"MDQ6VXNlcjIyNjk1OTY5\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/22695969?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/kbmanseau\",\n    \"html_url\": \"https://github.com/kbmanseau\",\n    \"followers_url\": \"https://api.github.com/users/kbmanseau/followers\",\n    \"following_url\": \"https://api.github.com/users/kbmanseau/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/kbmanseau/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/kbmanseau/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/kbmanseau/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/kbmanseau/orgs\",\n    \"repos_url\": \"https://api.github.com/users/kbmanseau/repos\",\n    \"events_url\": \"https://api.github.com/users/kbmanseau/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/kbmanseau/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"kbmanseau!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 3,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2016-10-08 02:25:07 UTC\",\n    \"updated_at\": \"2018-12-19 15:07:45 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"khsibr\",\n    \"id\": 1479225,\n    \"node_id\": \"MDQ6VXNlcjE0NzkyMjU=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1479225?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/khsibr\",\n    \"html_url\": \"https://github.com/khsibr\",\n    \"followers_url\": \"https://api.github.com/users/khsibr/followers\",\n    \"following_url\": \"https://api.github.com/users/khsibr/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/khsibr/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/khsibr/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/khsibr/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/khsibr/orgs\",\n    \"repos_url\": \"https://api.github.com/users/khsibr/repos\",\n    \"events_url\": \"https://api.github.com/users/khsibr/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/khsibr/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ryadh Khsib\",\n    \"company\": \"PI Systems\",\n    \"blog\": \"\",\n    \"location\": \"London\",\n    \"email\": \"khsibr!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Polyglot developer / Data hacker\",\n    \"public_repos\": 12,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 14,\n    \"created_at\": \"2012-02-27 18:07:23 UTC\",\n    \"updated_at\": \"2019-02-18 21:55:22 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"kinglion811\",\n    \"id\": 6119243,\n    \"node_id\": \"MDQ6VXNlcjYxMTkyNDM=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/6119243?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/kinglion811\",\n    \"html_url\": \"https://github.com/kinglion811\",\n    \"followers_url\": \"https://api.github.com/users/kinglion811/followers\",\n    \"following_url\": \"https://api.github.com/users/kinglion811/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/kinglion811/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/kinglion811/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/kinglion811/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/kinglion811/orgs\",\n    \"repos_url\": \"https://api.github.com/users/kinglion811/repos\",\n    \"events_url\": \"https://api.github.com/users/kinglion811/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/kinglion811/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"xianghong.li\",\n    \"company\": \"zhongnanhai\",\n    \"blog\": \"http://www.gov.cn/\",\n    \"location\": \"beijing\",\n    \"email\": \"kinglion811!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 17,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 10,\n    \"created_at\": \"2013-12-06 02:25:00 UTC\",\n    \"updated_at\": \"2018-11-15 10:09:47 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"kozhukalov\",\n    \"id\": 457504,\n    \"node_id\": \"MDQ6VXNlcjQ1NzUwNA==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/457504?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/kozhukalov\",\n    \"html_url\": \"https://github.com/kozhukalov\",\n    \"followers_url\": \"https://api.github.com/users/kozhukalov/followers\",\n    \"following_url\": \"https://api.github.com/users/kozhukalov/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/kozhukalov/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/kozhukalov/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/kozhukalov/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/kozhukalov/orgs\",\n    \"repos_url\": \"https://api.github.com/users/kozhukalov/repos\",\n    \"events_url\": \"https://api.github.com/users/kozhukalov/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/kozhukalov/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Vladimir Kozhukalov\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"kozhukalov!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 20,\n    \"public_gists\": 0,\n    \"followers\": 12,\n    \"following\": 17,\n    \"created_at\": \"2010-10-28 06:13:28 UTC\",\n    \"updated_at\": \"2018-06-13 07:44:01 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"krishnadurai\",\n    \"id\": 6263389,\n    \"node_id\": \"MDQ6VXNlcjYyNjMzODk=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/6263389?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/krishnadurai\",\n    \"html_url\": \"https://github.com/krishnadurai\",\n    \"followers_url\": \"https://api.github.com/users/krishnadurai/followers\",\n    \"following_url\": \"https://api.github.com/users/krishnadurai/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/krishnadurai/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/krishnadurai/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/krishnadurai/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/krishnadurai/orgs\",\n    \"repos_url\": \"https://api.github.com/users/krishnadurai/repos\",\n    \"events_url\": \"https://api.github.com/users/krishnadurai/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/krishnadurai/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Krishna Durai\",\n    \"company\": \"CiscoAI\",\n    \"blog\": \"\",\n    \"location\": \"Bangalore, India\",\n    \"email\": \"krishnadurai!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 10,\n    \"public_gists\": 0,\n    \"followers\": 5,\n    \"following\": 0,\n    \"created_at\": \"2013-12-26 08:15:03 UTC\",\n    \"updated_at\": \"2019-02-15 13:14:32 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"krishnakarra\",\n    \"id\": 43756117,\n    \"node_id\": \"MDQ6VXNlcjQzNzU2MTE3\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/43756117?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/krishnakarra\",\n    \"html_url\": \"https://github.com/krishnakarra\",\n    \"followers_url\": \"https://api.github.com/users/krishnakarra/followers\",\n    \"following_url\": \"https://api.github.com/users/krishnakarra/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/krishnakarra/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/krishnakarra/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/krishnakarra/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/krishnakarra/orgs\",\n    \"repos_url\": \"https://api.github.com/users/krishnakarra/repos\",\n    \"events_url\": \"https://api.github.com/users/krishnakarra/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/krishnakarra/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"krishna\",\n    \"company\": \"@descarteslabs \",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"krishnakarra!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-10-01 15:53:00 UTC\",\n    \"updated_at\": \"2019-02-19 21:02:03 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"krzyzacy\",\n    \"id\": 1108148,\n    \"node_id\": \"MDQ6VXNlcjExMDgxNDg=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/1108148?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/krzyzacy\",\n    \"html_url\": \"https://github.com/krzyzacy\",\n    \"followers_url\": \"https://api.github.com/users/krzyzacy/followers\",\n    \"following_url\": \"https://api.github.com/users/krzyzacy/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/krzyzacy/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/krzyzacy/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/krzyzacy/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/krzyzacy/orgs\",\n    \"repos_url\": \"https://api.github.com/users/krzyzacy/repos\",\n    \"events_url\": \"https://api.github.com/users/krzyzacy/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/krzyzacy/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Sen Lu\",\n    \"company\": \"@Google\",\n    \"blog\": \"\",\n    \"location\": \"Sunnyvale, CA\",\n    \"email\": \"krzyzacy!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Kubernetes test-infra maintainer\",\n    \"public_repos\": 37,\n    \"public_gists\": 0,\n    \"followers\": 52,\n    \"following\": 21,\n    \"created_at\": \"2011-10-06 17:29:19 UTC\",\n    \"updated_at\": \"2019-02-13 23:21:30 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"kstory8\",\n    \"id\": 10334951,\n    \"node_id\": \"MDQ6VXNlcjEwMzM0OTUx\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/10334951?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/kstory8\",\n    \"html_url\": \"https://github.com/kstory8\",\n    \"followers_url\": \"https://api.github.com/users/kstory8/followers\",\n    \"following_url\": \"https://api.github.com/users/kstory8/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/kstory8/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/kstory8/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/kstory8/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/kstory8/orgs\",\n    \"repos_url\": \"https://api.github.com/users/kstory8/repos\",\n    \"events_url\": \"https://api.github.com/users/kstory8/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/kstory8/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Kyle Story\",\n    \"company\": \"@descarteslabs \",\n    \"blog\": \"\",\n    \"location\": \"United States\",\n    \"email\": \"kstory8!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 16,\n    \"public_gists\": 0,\n    \"followers\": 3,\n    \"following\": 0,\n    \"created_at\": \"2014-12-29 02:22:14 UTC\",\n    \"updated_at\": \"2019-02-12 22:35:00 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"ktsakalozos\",\n    \"id\": 11489452,\n    \"node_id\": \"MDQ6VXNlcjExNDg5NDUy\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/11489452?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ktsakalozos\",\n    \"html_url\": \"https://github.com/ktsakalozos\",\n    \"followers_url\": \"https://api.github.com/users/ktsakalozos/followers\",\n    \"following_url\": \"https://api.github.com/users/ktsakalozos/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ktsakalozos/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ktsakalozos/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ktsakalozos/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ktsakalozos/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ktsakalozos/repos\",\n    \"events_url\": \"https://api.github.com/users/ktsakalozos/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ktsakalozos/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Konstantinos Tsakalozos\",\n    \"company\": \"Canonical\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ktsakalozos!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 132,\n    \"public_gists\": 3,\n    \"followers\": 19,\n    \"following\": 5,\n    \"created_at\": \"2015-03-15 16:23:06 UTC\",\n    \"updated_at\": \"2019-02-19 12:18:25 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"kunpengprod\",\n    \"id\": 35949142,\n    \"node_id\": \"MDQ6VXNlcjM1OTQ5MTQy\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/35949142?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/kunpengprod\",\n    \"html_url\": \"https://github.com/kunpengprod\",\n    \"followers_url\": \"https://api.github.com/users/kunpengprod/followers\",\n    \"following_url\": \"https://api.github.com/users/kunpengprod/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/kunpengprod/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/kunpengprod/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/kunpengprod/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/kunpengprod/orgs\",\n    \"repos_url\": \"https://api.github.com/users/kunpengprod/repos\",\n    \"events_url\": \"https://api.github.com/users/kunpengprod/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/kunpengprod/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"kunpengprod!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-01-30 05:57:01 UTC\",\n    \"updated_at\": \"2019-02-11 10:03:53 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"lachie83\",\n    \"id\": 6912984,\n    \"node_id\": \"MDQ6VXNlcjY5MTI5ODQ=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/6912984?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/lachie83\",\n    \"html_url\": \"https://github.com/lachie83\",\n    \"followers_url\": \"https://api.github.com/users/lachie83/followers\",\n    \"following_url\": \"https://api.github.com/users/lachie83/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/lachie83/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/lachie83/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/lachie83/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/lachie83/orgs\",\n    \"repos_url\": \"https://api.github.com/users/lachie83/repos\",\n    \"events_url\": \"https://api.github.com/users/lachie83/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/lachie83/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Lachlan Evenson\",\n    \"company\": \"@Azure @Microsoft \",\n    \"blog\": \"youtube.com/lachlanevenson\",\n    \"location\": \"San Francisco\",\n    \"email\": \"lachie83!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Cloud builder\",\n    \"public_repos\": 103,\n    \"public_gists\": 6,\n    \"followers\": 217,\n    \"following\": 7,\n    \"created_at\": \"2014-03-10 23:14:33 UTC\",\n    \"updated_at\": \"2019-02-19 16:35:57 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"laurentgrangeau\",\n    \"id\": 4910715,\n    \"node_id\": \"MDQ6VXNlcjQ5MTA3MTU=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/4910715?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/laurentgrangeau\",\n    \"html_url\": \"https://github.com/laurentgrangeau\",\n    \"followers_url\": \"https://api.github.com/users/laurentgrangeau/followers\",\n    \"following_url\": \"https://api.github.com/users/laurentgrangeau/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/laurentgrangeau/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/laurentgrangeau/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/laurentgrangeau/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/laurentgrangeau/orgs\",\n    \"repos_url\": \"https://api.github.com/users/laurentgrangeau/repos\",\n    \"events_url\": \"https://api.github.com/users/laurentgrangeau/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/laurentgrangeau/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Laurent Grangeau\",\n    \"company\": null,\n    \"blog\": \"http://www.laurentgrangeau.fr\",\n    \"location\": \"Paris, France\",\n    \"email\": \"laurentgrangeau!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 71,\n    \"public_gists\": 1,\n    \"followers\": 17,\n    \"following\": 3,\n    \"created_at\": \"2013-07-01 19:22:00 UTC\",\n    \"updated_at\": \"2019-02-19 16:24:04 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"lawdpls\",\n    \"id\": 17814466,\n    \"node_id\": \"MDQ6VXNlcjE3ODE0NDY2\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/17814466?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/lawdpls\",\n    \"html_url\": \"https://github.com/lawdpls\",\n    \"followers_url\": \"https://api.github.com/users/lawdpls/followers\",\n    \"following_url\": \"https://api.github.com/users/lawdpls/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/lawdpls/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/lawdpls/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/lawdpls/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/lawdpls/orgs\",\n    \"repos_url\": \"https://api.github.com/users/lawdpls/repos\",\n    \"events_url\": \"https://api.github.com/users/lawdpls/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/lawdpls/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Shijian Li\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"lawdpls!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2016-03-13 17:48:56 UTC\",\n    \"updated_at\": \"2018-09-15 13:42:43 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"ldd91\",\n    \"id\": 29392150,\n    \"node_id\": \"MDQ6VXNlcjI5MzkyMTUw\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/29392150?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ldd91\",\n    \"html_url\": \"https://github.com/ldd91\",\n    \"followers_url\": \"https://api.github.com/users/ldd91/followers\",\n    \"following_url\": \"https://api.github.com/users/ldd91/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ldd91/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ldd91/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ldd91/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ldd91/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ldd91/repos\",\n    \"events_url\": \"https://api.github.com/users/ldd91/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ldd91/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": \"@Unisound\",\n    \"blog\": \"\",\n    \"location\": \"Xiamen China \",\n    \"email\": \"ldd91!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 4,\n    \"created_at\": \"2017-06-13 03:40:03 UTC\",\n    \"updated_at\": \"2018-12-11 07:26:44 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"leigh-johnson\",\n    \"id\": 2601819,\n    \"node_id\": \"MDQ6VXNlcjI2MDE4MTk=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/2601819?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/leigh-johnson\",\n    \"html_url\": \"https://github.com/leigh-johnson\",\n    \"followers_url\": \"https://api.github.com/users/leigh-johnson/followers\",\n    \"following_url\": \"https://api.github.com/users/leigh-johnson/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/leigh-johnson/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/leigh-johnson/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/leigh-johnson/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/leigh-johnson/orgs\",\n    \"repos_url\": \"https://api.github.com/users/leigh-johnson/repos\",\n    \"events_url\": \"https://api.github.com/users/leigh-johnson/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/leigh-johnson/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Leigh Johnson\",\n    \"company\": null,\n    \"blog\": \"leighjohnson.me\",\n    \"location\": \"San Francisco\",\n    \"email\": \"leigh-johnson!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 63,\n    \"public_gists\": 27,\n    \"followers\": 45,\n    \"following\": 40,\n    \"created_at\": \"2012-10-19 19:02:18 UTC\",\n    \"updated_at\": \"2019-01-15 20:13:49 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"leomzhong\",\n    \"id\": 5668272,\n    \"node_id\": \"MDQ6VXNlcjU2NjgyNzI=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/5668272?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/leomzhong\",\n    \"html_url\": \"https://github.com/leomzhong\",\n    \"followers_url\": \"https://api.github.com/users/leomzhong/followers\",\n    \"following_url\": \"https://api.github.com/users/leomzhong/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/leomzhong/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/leomzhong/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/leomzhong/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/leomzhong/orgs\",\n    \"repos_url\": \"https://api.github.com/users/leomzhong/repos\",\n    \"events_url\": \"https://api.github.com/users/leomzhong/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/leomzhong/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ming Zhong\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"leomzhong!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"CloudAI / Logs Infra at Google\",\n    \"public_repos\": 9,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 2,\n    \"created_at\": \"2013-10-12 00:23:25 UTC\",\n    \"updated_at\": \"2018-10-30 18:37:49 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"lfourie\",\n    \"id\": 6267306,\n    \"node_id\": \"MDQ6VXNlcjYyNjczMDY=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/6267306?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/lfourie\",\n    \"html_url\": \"https://github.com/lfourie\",\n    \"followers_url\": \"https://api.github.com/users/lfourie/followers\",\n    \"following_url\": \"https://api.github.com/users/lfourie/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/lfourie/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/lfourie/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/lfourie/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/lfourie/orgs\",\n    \"repos_url\": \"https://api.github.com/users/lfourie/repos\",\n    \"events_url\": \"https://api.github.com/users/lfourie/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/lfourie/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Louis Fourie\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"lfourie!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 9,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2013-12-26 22:57:04 UTC\",\n    \"updated_at\": \"2018-06-20 21:27:52 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"liudongqing\",\n    \"id\": 318296,\n    \"node_id\": \"MDQ6VXNlcjMxODI5Ng==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/318296?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/liudongqing\",\n    \"html_url\": \"https://github.com/liudongqing\",\n    \"followers_url\": \"https://api.github.com/users/liudongqing/followers\",\n    \"following_url\": \"https://api.github.com/users/liudongqing/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/liudongqing/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/liudongqing/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/liudongqing/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/liudongqing/orgs\",\n    \"repos_url\": \"https://api.github.com/users/liudongqing/repos\",\n    \"events_url\": \"https://api.github.com/users/liudongqing/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/liudongqing/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Liu Dongqing\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Beijing, China\",\n    \"email\": \"liudongqing!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 24,\n    \"public_gists\": 1,\n    \"followers\": 15,\n    \"following\": 56,\n    \"created_at\": \"2010-06-30 03:09:48 UTC\",\n    \"updated_at\": \"2019-02-14 04:01:50 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"liyinan926\",\n    \"id\": 3709137,\n    \"node_id\": \"MDQ6VXNlcjM3MDkxMzc=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/3709137?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/liyinan926\",\n    \"html_url\": \"https://github.com/liyinan926\",\n    \"followers_url\": \"https://api.github.com/users/liyinan926/followers\",\n    \"following_url\": \"https://api.github.com/users/liyinan926/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/liyinan926/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/liyinan926/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/liyinan926/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/liyinan926/orgs\",\n    \"repos_url\": \"https://api.github.com/users/liyinan926/repos\",\n    \"events_url\": \"https://api.github.com/users/liyinan926/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/liyinan926/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Yinan Li\",\n    \"company\": \"@Google @GoogleCloudPlatform \",\n    \"blog\": \"\",\n    \"location\": \"Sunnyvale, CA\",\n    \"email\": \"liyinan926!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Software Engineer @Google focusing on data processing on Kubernetes. Apache Spark committer.\",\n    \"public_repos\": 17,\n    \"public_gists\": 2,\n    \"followers\": 77,\n    \"following\": 0,\n    \"created_at\": \"2013-02-26 20:49:51 UTC\",\n    \"updated_at\": \"2019-02-04 21:12:14 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"lizzy220\",\n    \"id\": 16430130,\n    \"node_id\": \"MDQ6VXNlcjE2NDMwMTMw\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/16430130?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/lizzy220\",\n    \"html_url\": \"https://github.com/lizzy220\",\n    \"followers_url\": \"https://api.github.com/users/lizzy220/followers\",\n    \"following_url\": \"https://api.github.com/users/lizzy220/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/lizzy220/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/lizzy220/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/lizzy220/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/lizzy220/orgs\",\n    \"repos_url\": \"https://api.github.com/users/lizzy220/repos\",\n    \"events_url\": \"https://api.github.com/users/lizzy220/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/lizzy220/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Yangyang Tang\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"lizzy220!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 7,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2015-12-24 17:24:26 UTC\",\n    \"updated_at\": \"2019-02-19 06:18:58 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"llegolas\",\n    \"id\": 37660621,\n    \"node_id\": \"MDQ6VXNlcjM3NjYwNjIx\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/37660621?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/llegolas\",\n    \"html_url\": \"https://github.com/llegolas\",\n    \"followers_url\": \"https://api.github.com/users/llegolas/followers\",\n    \"following_url\": \"https://api.github.com/users/llegolas/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/llegolas/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/llegolas/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/llegolas/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/llegolas/orgs\",\n    \"repos_url\": \"https://api.github.com/users/llegolas/repos\",\n    \"events_url\": \"https://api.github.com/users/llegolas/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/llegolas/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"llegolas!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-03-22 12:24:52 UTC\",\n    \"updated_at\": \"2019-01-30 15:42:35 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"lp-pl\",\n    \"id\": 10861802,\n    \"node_id\": \"MDQ6VXNlcjEwODYxODAy\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/10861802?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/lp-pl\",\n    \"html_url\": \"https://github.com/lp-pl\",\n    \"followers_url\": \"https://api.github.com/users/lp-pl/followers\",\n    \"following_url\": \"https://api.github.com/users/lp-pl/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/lp-pl/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/lp-pl/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/lp-pl/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/lp-pl/orgs\",\n    \"repos_url\": \"https://api.github.com/users/lp-pl/repos\",\n    \"events_url\": \"https://api.github.com/users/lp-pl/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/lp-pl/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"lipeng\",\n    \"company\": \"Shandong Academy of Sciences\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"lp-pl!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"AI&K8S\",\n    \"public_repos\": 4,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 4,\n    \"created_at\": \"2015-02-05 07:10:30 UTC\",\n    \"updated_at\": \"2018-11-16 14:13:31 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"lresende\",\n    \"id\": 382917,\n    \"node_id\": \"MDQ6VXNlcjM4MjkxNw==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/382917?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/lresende\",\n    \"html_url\": \"https://github.com/lresende\",\n    \"followers_url\": \"https://api.github.com/users/lresende/followers\",\n    \"following_url\": \"https://api.github.com/users/lresende/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/lresende/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/lresende/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/lresende/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/lresende/orgs\",\n    \"repos_url\": \"https://api.github.com/users/lresende/repos\",\n    \"events_url\": \"https://api.github.com/users/lresende/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/lresende/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Luciano Resende\",\n    \"company\": \"IBM - CODAIT\",\n    \"blog\": \"http://lresende.blogspot.com\",\n    \"location\": \"San Francisco Bay Area\",\n    \"email\": \"lresende!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Opensource AI Platform Architect at IBM contributing to OSS for over 10 years.Currently contributing to various @apache big data and @jupyter ecosystem projects\",\n    \"public_repos\": 75,\n    \"public_gists\": 1,\n    \"followers\": 120,\n    \"following\": 132,\n    \"created_at\": \"2010-09-01 04:48:15 UTC\",\n    \"updated_at\": \"2019-01-05 15:39:24 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"lukaszgryglicki\",\n    \"id\": 2469783,\n    \"node_id\": \"MDQ6VXNlcjI0Njk3ODM=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/2469783?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/lukaszgryglicki\",\n    \"html_url\": \"https://github.com/lukaszgryglicki\",\n    \"followers_url\": \"https://api.github.com/users/lukaszgryglicki/followers\",\n    \"following_url\": \"https://api.github.com/users/lukaszgryglicki/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/lukaszgryglicki/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/lukaszgryglicki/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/lukaszgryglicki/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/lukaszgryglicki/orgs\",\n    \"repos_url\": \"https://api.github.com/users/lukaszgryglicki/repos\",\n    \"events_url\": \"https://api.github.com/users/lukaszgryglicki/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/lukaszgryglicki/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Łukasz Gryglicki\",\n    \"company\": \"@cncf @linuxfoundation @kubernetes\",\n    \"blog\": \"https://www.linkedin.com/in/lukasz-gryglicki-89a6a678/\",\n    \"location\": \"Mińsk Mazowiecki, Poland\",\n    \"email\": \"lukaszgryglicki!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Senior Developer @cncf, @linuxfoundation, @kubernetes\\r\\nInterested in Go, C, Ruby, RoR, Python, Rust, SQL, JavaScript, PHP, C++, Obj-C, Assembly\",\n    \"public_repos\": 37,\n    \"public_gists\": 26,\n    \"followers\": 33,\n    \"following\": 6,\n    \"created_at\": \"2012-10-02 07:03:43 UTC\",\n    \"updated_at\": \"2019-02-19 05:45:37 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"lxl910915\",\n    \"id\": 8842010,\n    \"node_id\": \"MDQ6VXNlcjg4NDIwMTA=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/8842010?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/lxl910915\",\n    \"html_url\": \"https://github.com/lxl910915\",\n    \"followers_url\": \"https://api.github.com/users/lxl910915/followers\",\n    \"following_url\": \"https://api.github.com/users/lxl910915/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/lxl910915/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/lxl910915/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/lxl910915/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/lxl910915/orgs\",\n    \"repos_url\": \"https://api.github.com/users/lxl910915/repos\",\n    \"events_url\": \"https://api.github.com/users/lxl910915/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/lxl910915/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"xiaolun.li\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"shanghai\",\n    \"email\": \"lxl910915!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Software Engineer, lxl910915@163.com\",\n    \"public_repos\": 23,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 1,\n    \"created_at\": \"2014-09-20 11:05:51 UTC\",\n    \"updated_at\": \"2019-01-20 06:26:54 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"ma2331550908\",\n    \"id\": 8001249,\n    \"node_id\": \"MDQ6VXNlcjgwMDEyNDk=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/8001249?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ma2331550908\",\n    \"html_url\": \"https://github.com/ma2331550908\",\n    \"followers_url\": \"https://api.github.com/users/ma2331550908/followers\",\n    \"following_url\": \"https://api.github.com/users/ma2331550908/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ma2331550908/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ma2331550908/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ma2331550908/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ma2331550908/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ma2331550908/repos\",\n    \"events_url\": \"https://api.github.com/users/ma2331550908/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ma2331550908/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"qingjie\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ma2331550908!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"ML K8s\",\n    \"public_repos\": 33,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 5,\n    \"created_at\": \"2014-06-27 01:41:34 UTC\",\n    \"updated_at\": \"2019-02-01 12:45:29 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"madfrog\",\n    \"id\": 1551169,\n    \"node_id\": \"MDQ6VXNlcjE1NTExNjk=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/1551169?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/madfrog\",\n    \"html_url\": \"https://github.com/madfrog\",\n    \"followers_url\": \"https://api.github.com/users/madfrog/followers\",\n    \"following_url\": \"https://api.github.com/users/madfrog/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/madfrog/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/madfrog/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/madfrog/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/madfrog/orgs\",\n    \"repos_url\": \"https://api.github.com/users/madfrog/repos\",\n    \"events_url\": \"https://api.github.com/users/madfrog/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/madfrog/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"madfrog\",\n    \"company\": \"whu\",\n    \"blog\": \"\",\n    \"location\": \"shenzhen\",\n    \"email\": \"madfrog!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 13,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 1,\n    \"created_at\": \"2012-03-19 01:27:06 UTC\",\n    \"updated_at\": \"2019-02-02 07:42:05 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"magick93\",\n    \"id\": 2173213,\n    \"node_id\": \"MDQ6VXNlcjIxNzMyMTM=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/2173213?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/magick93\",\n    \"html_url\": \"https://github.com/magick93\",\n    \"followers_url\": \"https://api.github.com/users/magick93/followers\",\n    \"following_url\": \"https://api.github.com/users/magick93/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/magick93/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/magick93/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/magick93/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/magick93/orgs\",\n    \"repos_url\": \"https://api.github.com/users/magick93/repos\",\n    \"events_url\": \"https://api.github.com/users/magick93/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/magick93/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"magick93!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 16,\n    \"public_gists\": 24,\n    \"followers\": 17,\n    \"following\": 127,\n    \"created_at\": \"2012-08-18 04:00:46 UTC\",\n    \"updated_at\": \"2019-02-19 02:46:29 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"magreiner\",\n    \"id\": 1618305,\n    \"node_id\": \"MDQ6VXNlcjE2MTgzMDU=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/1618305?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/magreiner\",\n    \"html_url\": \"https://github.com/magreiner\",\n    \"followers_url\": \"https://api.github.com/users/magreiner/followers\",\n    \"following_url\": \"https://api.github.com/users/magreiner/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/magreiner/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/magreiner/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/magreiner/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/magreiner/orgs\",\n    \"repos_url\": \"https://api.github.com/users/magreiner/repos\",\n    \"events_url\": \"https://api.github.com/users/magreiner/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/magreiner/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Matthias Greiner\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"magreiner!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 3,\n    \"following\": 4,\n    \"created_at\": \"2012-04-06 10:35:40 UTC\",\n    \"updated_at\": \"2019-02-11 15:33:56 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"majidaldo\",\n    \"id\": 3588248,\n    \"node_id\": \"MDQ6VXNlcjM1ODgyNDg=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/3588248?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/majidaldo\",\n    \"html_url\": \"https://github.com/majidaldo\",\n    \"followers_url\": \"https://api.github.com/users/majidaldo/followers\",\n    \"following_url\": \"https://api.github.com/users/majidaldo/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/majidaldo/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/majidaldo/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/majidaldo/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/majidaldo/orgs\",\n    \"repos_url\": \"https://api.github.com/users/majidaldo/repos\",\n    \"events_url\": \"https://api.github.com/users/majidaldo/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/majidaldo/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Majid alDosari\",\n    \"company\": null,\n    \"blog\": \"http://about.me/majidaldosari\",\n    \"location\": null,\n    \"email\": \"majidaldo!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 50,\n    \"public_gists\": 2,\n    \"followers\": 10,\n    \"following\": 0,\n    \"created_at\": \"2013-02-13 21:13:44 UTC\",\n    \"updated_at\": \"2019-02-13 17:30:26 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"mameshini\",\n    \"id\": 6588364,\n    \"node_id\": \"MDQ6VXNlcjY1ODgzNjQ=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/6588364?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mameshini\",\n    \"html_url\": \"https://github.com/mameshini\",\n    \"followers_url\": \"https://api.github.com/users/mameshini/followers\",\n    \"following_url\": \"https://api.github.com/users/mameshini/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mameshini/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mameshini/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mameshini/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mameshini/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mameshini/repos\",\n    \"events_url\": \"https://api.github.com/users/mameshini/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mameshini/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Igor Mameshin\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"San Diego, CA\",\n    \"email\": \"mameshini!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 7,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2014-02-04 20:09:17 UTC\",\n    \"updated_at\": \"2019-01-30 22:47:29 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"marcoceppi\",\n    \"id\": 70613,\n    \"node_id\": \"MDQ6VXNlcjcwNjEz\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/70613?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/marcoceppi\",\n    \"html_url\": \"https://github.com/marcoceppi\",\n    \"followers_url\": \"https://api.github.com/users/marcoceppi/followers\",\n    \"following_url\": \"https://api.github.com/users/marcoceppi/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/marcoceppi/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/marcoceppi/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/marcoceppi/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/marcoceppi/orgs\",\n    \"repos_url\": \"https://api.github.com/users/marcoceppi/repos\",\n    \"events_url\": \"https://api.github.com/users/marcoceppi/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/marcoceppi/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Marco Ceppi\",\n    \"company\": null,\n    \"blog\": \"http://marcoceppi.com/\",\n    \"location\": \"Vienna, VA\",\n    \"email\": \"marcoceppi!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Co-founder @Unplottable    \\r\\nDevOps @SilphRoad         \\r\\nWorks @Vapor-Ware\",\n    \"public_repos\": 227,\n    \"public_gists\": 107,\n    \"followers\": 147,\n    \"following\": 21,\n    \"created_at\": \"2009-04-05 04:39:17 UTC\",\n    \"updated_at\": \"2019-02-11 11:18:16 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"marcoleewow\",\n    \"id\": 22629621,\n    \"node_id\": \"MDQ6VXNlcjIyNjI5NjIx\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/22629621?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/marcoleewow\",\n    \"html_url\": \"https://github.com/marcoleewow\",\n    \"followers_url\": \"https://api.github.com/users/marcoleewow/followers\",\n    \"following_url\": \"https://api.github.com/users/marcoleewow/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/marcoleewow/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/marcoleewow/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/marcoleewow/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/marcoleewow/orgs\",\n    \"repos_url\": \"https://api.github.com/users/marcoleewow/repos\",\n    \"events_url\": \"https://api.github.com/users/marcoleewow/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/marcoleewow/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Marco Lee\",\n    \"company\": \"@GoodNotes \",\n    \"blog\": \"goodnotesapp.com\",\n    \"location\": \"Hong Kong\",\n    \"email\": \"marcoleewow!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Deep learning enthusiast.\\r\\n\\r\\nResearch mathematician at @GoodNotes.\",\n    \"public_repos\": 23,\n    \"public_gists\": 5,\n    \"followers\": 8,\n    \"following\": 3,\n    \"created_at\": \"2016-10-05 02:55:51 UTC\",\n    \"updated_at\": \"2018-12-05 08:04:27 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"martin-laurent\",\n    \"id\": 17744754,\n    \"node_id\": \"MDQ6VXNlcjE3NzQ0NzU0\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/17744754?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/martin-laurent\",\n    \"html_url\": \"https://github.com/martin-laurent\",\n    \"followers_url\": \"https://api.github.com/users/martin-laurent/followers\",\n    \"following_url\": \"https://api.github.com/users/martin-laurent/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/martin-laurent/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/martin-laurent/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/martin-laurent/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/martin-laurent/orgs\",\n    \"repos_url\": \"https://api.github.com/users/martin-laurent/repos\",\n    \"events_url\": \"https://api.github.com/users/martin-laurent/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/martin-laurent/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Martin Laurent\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"New York City\",\n    \"email\": \"martin-laurent!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 1,\n    \"created_at\": \"2016-03-09 13:36:02 UTC\",\n    \"updated_at\": \"2019-01-07 17:30:09 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"masroorhasan\",\n    \"id\": 802678,\n    \"node_id\": \"MDQ6VXNlcjgwMjY3OA==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/802678?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/masroorhasan\",\n    \"html_url\": \"https://github.com/masroorhasan\",\n    \"followers_url\": \"https://api.github.com/users/masroorhasan/followers\",\n    \"following_url\": \"https://api.github.com/users/masroorhasan/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/masroorhasan/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/masroorhasan/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/masroorhasan/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/masroorhasan/orgs\",\n    \"repos_url\": \"https://api.github.com/users/masroorhasan/repos\",\n    \"events_url\": \"https://api.github.com/users/masroorhasan/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/masroorhasan/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Masroor Hasan\",\n    \"company\": \"@muxinc \",\n    \"blog\": \"\",\n    \"location\": \"San Francisco, CA\",\n    \"email\": \"masroorhasan!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 19,\n    \"public_gists\": 20,\n    \"followers\": 20,\n    \"following\": 12,\n    \"created_at\": \"2011-05-21 21:45:32 UTC\",\n    \"updated_at\": \"2019-02-13 19:09:22 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"mattdornfeld\",\n    \"id\": 4313686,\n    \"node_id\": \"MDQ6VXNlcjQzMTM2ODY=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/4313686?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mattdornfeld\",\n    \"html_url\": \"https://github.com/mattdornfeld\",\n    \"followers_url\": \"https://api.github.com/users/mattdornfeld/followers\",\n    \"following_url\": \"https://api.github.com/users/mattdornfeld/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mattdornfeld/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mattdornfeld/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mattdornfeld/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mattdornfeld/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mattdornfeld/repos\",\n    \"events_url\": \"https://api.github.com/users/mattdornfeld/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mattdornfeld/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Matthew Dornfeld\",\n    \"company\": \"Capital One\",\n    \"blog\": \"\",\n    \"location\": \"New York, NY\",\n    \"email\": \"mattdornfeld!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 15,\n    \"public_gists\": 1,\n    \"followers\": 5,\n    \"following\": 4,\n    \"created_at\": \"2013-05-01 16:59:52 UTC\",\n    \"updated_at\": \"2019-01-26 17:33:00 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"matthen\",\n    \"id\": 1408110,\n    \"node_id\": \"MDQ6VXNlcjE0MDgxMTA=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1408110?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/matthen\",\n    \"html_url\": \"https://github.com/matthen\",\n    \"followers_url\": \"https://api.github.com/users/matthen/followers\",\n    \"following_url\": \"https://api.github.com/users/matthen/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/matthen/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/matthen/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/matthen/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/matthen/orgs\",\n    \"repos_url\": \"https://api.github.com/users/matthen/repos\",\n    \"events_url\": \"https://api.github.com/users/matthen/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/matthen/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Matt Henderson\",\n    \"company\": null,\n    \"blog\": \"http://www.matthen.com/\",\n    \"location\": null,\n    \"email\": \"matthen!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 9,\n    \"public_gists\": 0,\n    \"followers\": 9,\n    \"following\": 1,\n    \"created_at\": \"2012-02-04 14:24:01 UTC\",\n    \"updated_at\": \"2019-02-19 11:59:21 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"maver1ck\",\n    \"id\": 4006010,\n    \"node_id\": \"MDQ6VXNlcjQwMDYwMTA=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/4006010?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/maver1ck\",\n    \"html_url\": \"https://github.com/maver1ck\",\n    \"followers_url\": \"https://api.github.com/users/maver1ck/followers\",\n    \"following_url\": \"https://api.github.com/users/maver1ck/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/maver1ck/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/maver1ck/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/maver1ck/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/maver1ck/orgs\",\n    \"repos_url\": \"https://api.github.com/users/maver1ck/repos\",\n    \"events_url\": \"https://api.github.com/users/maver1ck/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/maver1ck/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Maciej Bryński\",\n    \"company\": \"@xcaliber-tech \",\n    \"blog\": \"\",\n    \"location\": \"Katowice\",\n    \"email\": \"maver1ck!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 36,\n    \"public_gists\": 1,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2013-03-29 14:22:07 UTC\",\n    \"updated_at\": \"2019-01-16 18:51:12 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"mayakacz\",\n    \"id\": 15946341,\n    \"node_id\": \"MDQ6VXNlcjE1OTQ2MzQx\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/15946341?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mayakacz\",\n    \"html_url\": \"https://github.com/mayakacz\",\n    \"followers_url\": \"https://api.github.com/users/mayakacz/followers\",\n    \"following_url\": \"https://api.github.com/users/mayakacz/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mayakacz/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mayakacz/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mayakacz/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mayakacz/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mayakacz/repos\",\n    \"events_url\": \"https://api.github.com/users/mayakacz/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mayakacz/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Maya Kaczorowski\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"mayakacz!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 5,\n    \"public_gists\": 0,\n    \"followers\": 11,\n    \"following\": 0,\n    \"created_at\": \"2015-11-20 17:25:58 UTC\",\n    \"updated_at\": \"2019-01-29 02:00:03 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"mbelang\",\n    \"id\": 5888932,\n    \"node_id\": \"MDQ6VXNlcjU4ODg5MzI=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/5888932?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mbelang\",\n    \"html_url\": \"https://github.com/mbelang\",\n    \"followers_url\": \"https://api.github.com/users/mbelang/followers\",\n    \"following_url\": \"https://api.github.com/users/mbelang/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mbelang/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mbelang/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mbelang/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mbelang/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mbelang/repos\",\n    \"events_url\": \"https://api.github.com/users/mbelang/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mbelang/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Maxime Belanger\",\n    \"company\": \"Dialogue.co\",\n    \"blog\": \"https://dialogue.co\",\n    \"location\": \"Montreal Canada\",\n    \"email\": \"mbelang!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 14,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 1,\n    \"created_at\": \"2013-11-08 14:02:19 UTC\",\n    \"updated_at\": \"2019-02-06 16:11:40 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"megawidget\",\n    \"id\": 562245,\n    \"node_id\": \"MDQ6VXNlcjU2MjI0NQ==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/562245?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/megawidget\",\n    \"html_url\": \"https://github.com/megawidget\",\n    \"followers_url\": \"https://api.github.com/users/megawidget/followers\",\n    \"following_url\": \"https://api.github.com/users/megawidget/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/megawidget/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/megawidget/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/megawidget/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/megawidget/orgs\",\n    \"repos_url\": \"https://api.github.com/users/megawidget/repos\",\n    \"events_url\": \"https://api.github.com/users/megawidget/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/megawidget/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Igor Kaplounenko\",\n    \"company\": \"@NervanaSystems \",\n    \"blog\": \"http://lostinprobabilityspace.blogspot.com\",\n    \"location\": \"Burlingame, CA\",\n    \"email\": \"megawidget!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"I now have full access to your systems.\",\n    \"public_repos\": 32,\n    \"public_gists\": 0,\n    \"followers\": 7,\n    \"following\": 0,\n    \"created_at\": \"2011-01-13 08:24:33 UTC\",\n    \"updated_at\": \"2018-12-03 22:01:33 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"mengxi-ascent\",\n    \"id\": 41312220,\n    \"node_id\": \"MDQ6VXNlcjQxMzEyMjIw\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/41312220?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mengxi-ascent\",\n    \"html_url\": \"https://github.com/mengxi-ascent\",\n    \"followers_url\": \"https://api.github.com/users/mengxi-ascent/followers\",\n    \"following_url\": \"https://api.github.com/users/mengxi-ascent/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mengxi-ascent/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mengxi-ascent/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mengxi-ascent/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mengxi-ascent/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mengxi-ascent/repos\",\n    \"events_url\": \"https://api.github.com/users/mengxi-ascent/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mengxi-ascent/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"mengxi-ascent!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 2,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2018-07-17 01:35:52 UTC\",\n    \"updated_at\": \"2019-02-20 07:32:27 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"metrofun\",\n    \"id\": 946519,\n    \"node_id\": \"MDQ6VXNlcjk0NjUxOQ==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/946519?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/metrofun\",\n    \"html_url\": \"https://github.com/metrofun\",\n    \"followers_url\": \"https://api.github.com/users/metrofun/followers\",\n    \"following_url\": \"https://api.github.com/users/metrofun/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/metrofun/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/metrofun/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/metrofun/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/metrofun/orgs\",\n    \"repos_url\": \"https://api.github.com/users/metrofun/repos\",\n    \"events_url\": \"https://api.github.com/users/metrofun/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/metrofun/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Dmytrii S.\",\n    \"company\": \"Daimler*/Amazon/Nokia/Yandex\",\n    \"blog\": \"http://mlreview.com\",\n    \"location\": \"Berlin\",\n    \"email\": \"metrofun!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 58,\n    \"public_gists\": 6,\n    \"followers\": 26,\n    \"following\": 9,\n    \"created_at\": \"2011-07-29 10:36:57 UTC\",\n    \"updated_at\": \"2019-02-19 15:57:54 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"mgyong\",\n    \"id\": 2178001,\n    \"node_id\": \"MDQ6VXNlcjIxNzgwMDE=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/2178001?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mgyong\",\n    \"html_url\": \"https://github.com/mgyong\",\n    \"followers_url\": \"https://api.github.com/users/mgyong/followers\",\n    \"following_url\": \"https://api.github.com/users/mgyong/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mgyong/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mgyong/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mgyong/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mgyong/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mgyong/repos\",\n    \"events_url\": \"https://api.github.com/users/mgyong/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mgyong/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"mgyong!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 17,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 2,\n    \"created_at\": \"2012-08-19 09:12:38 UTC\",\n    \"updated_at\": \"2018-12-26 19:18:38 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"mickeyh\",\n    \"id\": 1190882,\n    \"node_id\": \"MDQ6VXNlcjExOTA4ODI=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1190882?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mickeyh\",\n    \"html_url\": \"https://github.com/mickeyh\",\n    \"followers_url\": \"https://api.github.com/users/mickeyh/followers\",\n    \"following_url\": \"https://api.github.com/users/mickeyh/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mickeyh/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mickeyh/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mickeyh/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mickeyh/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mickeyh/repos\",\n    \"events_url\": \"https://api.github.com/users/mickeyh/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mickeyh/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"mickeyh!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 14,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2011-11-12 20:54:44 UTC\",\n    \"updated_at\": \"2018-11-21 06:03:00 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"mikereeves\",\n    \"id\": 6353162,\n    \"node_id\": \"MDQ6VXNlcjYzNTMxNjI=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/6353162?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mikereeves\",\n    \"html_url\": \"https://github.com/mikereeves\",\n    \"followers_url\": \"https://api.github.com/users/mikereeves/followers\",\n    \"following_url\": \"https://api.github.com/users/mikereeves/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mikereeves/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mikereeves/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mikereeves/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mikereeves/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mikereeves/repos\",\n    \"events_url\": \"https://api.github.com/users/mikereeves/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mikereeves/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Mike Reeves\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"mikereeves!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 11,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2014-01-08 20:42:13 UTC\",\n    \"updated_at\": \"2018-10-18 12:53:50 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"mikevoets\",\n    \"id\": 4422159,\n    \"node_id\": \"MDQ6VXNlcjQ0MjIxNTk=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/4422159?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mikevoets\",\n    \"html_url\": \"https://github.com/mikevoets\",\n    \"followers_url\": \"https://api.github.com/users/mikevoets/followers\",\n    \"following_url\": \"https://api.github.com/users/mikevoets/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mikevoets/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mikevoets/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mikevoets/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mikevoets/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mikevoets/repos\",\n    \"events_url\": \"https://api.github.com/users/mikevoets/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mikevoets/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Mike Voets\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Sydney, Australia\",\n    \"email\": \"mikevoets!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Digital nomad\",\n    \"public_repos\": 13,\n    \"public_gists\": 1,\n    \"followers\": 22,\n    \"following\": 26,\n    \"created_at\": \"2013-05-13 23:05:10 UTC\",\n    \"updated_at\": \"2019-02-13 12:02:10 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"mikezuniga\",\n    \"id\": 1145658,\n    \"node_id\": \"MDQ6VXNlcjExNDU2NTg=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1145658?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mikezuniga\",\n    \"html_url\": \"https://github.com/mikezuniga\",\n    \"followers_url\": \"https://api.github.com/users/mikezuniga/followers\",\n    \"following_url\": \"https://api.github.com/users/mikezuniga/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mikezuniga/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mikezuniga/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mikezuniga/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mikezuniga/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mikezuniga/repos\",\n    \"events_url\": \"https://api.github.com/users/mikezuniga/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mikezuniga/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Miguel Zuniga\",\n    \"company\": null,\n    \"blog\": \"http://www.miguelzuniga.com\",\n    \"location\": null,\n    \"email\": \"mikezuniga!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 18,\n    \"public_gists\": 3,\n    \"followers\": 4,\n    \"following\": 2,\n    \"created_at\": \"2011-10-22 22:22:10 UTC\",\n    \"updated_at\": \"2018-11-14 21:02:59 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"mingweiLIU\",\n    \"id\": 11702952,\n    \"node_id\": \"MDQ6VXNlcjExNzAyOTUy\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/11702952?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mingweiLIU\",\n    \"html_url\": \"https://github.com/mingweiLIU\",\n    \"followers_url\": \"https://api.github.com/users/mingweiLIU/followers\",\n    \"following_url\": \"https://api.github.com/users/mingweiLIU/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mingweiLIU/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mingweiLIU/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mingweiLIU/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mingweiLIU/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mingweiLIU/repos\",\n    \"events_url\": \"https://api.github.com/users/mingweiLIU/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mingweiLIU/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"mingweiLIU!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 4,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 1,\n    \"created_at\": \"2015-03-29 05:06:07 UTC\",\n    \"updated_at\": \"2019-02-20 01:27:35 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"minrk\",\n    \"id\": 151929,\n    \"node_id\": \"MDQ6VXNlcjE1MTkyOQ==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/151929?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/minrk\",\n    \"html_url\": \"https://github.com/minrk\",\n    \"followers_url\": \"https://api.github.com/users/minrk/followers\",\n    \"following_url\": \"https://api.github.com/users/minrk/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/minrk/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/minrk/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/minrk/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/minrk/orgs\",\n    \"repos_url\": \"https://api.github.com/users/minrk/repos\",\n    \"events_url\": \"https://api.github.com/users/minrk/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/minrk/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Min RK\",\n    \"company\": \"Simula Research Laboratory\",\n    \"blog\": \"https://twitter.com/minrk\",\n    \"location\": \"Oslo, Norway\",\n    \"email\": \"minrk!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"IPython, Jupyter, etc.\",\n    \"public_repos\": 553,\n    \"public_gists\": 470,\n    \"followers\": 771,\n    \"following\": 11,\n    \"created_at\": \"2009-11-11 19:19:11 UTC\",\n    \"updated_at\": \"2019-02-11 15:26:47 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"mmatiaschek\",\n    \"id\": 3010105,\n    \"node_id\": \"MDQ6VXNlcjMwMTAxMDU=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/3010105?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mmatiaschek\",\n    \"html_url\": \"https://github.com/mmatiaschek\",\n    \"followers_url\": \"https://api.github.com/users/mmatiaschek/followers\",\n    \"following_url\": \"https://api.github.com/users/mmatiaschek/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mmatiaschek/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mmatiaschek/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mmatiaschek/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mmatiaschek/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mmatiaschek/repos\",\n    \"events_url\": \"https://api.github.com/users/mmatiaschek/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mmatiaschek/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Markus Matiaschek\",\n    \"company\": \"@Welthungerhilfe \",\n    \"blog\": \"\",\n    \"location\": \"Würzburg, Germany\",\n    \"email\": \"mmatiaschek!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 14,\n    \"public_gists\": 2,\n    \"followers\": 12,\n    \"following\": 28,\n    \"created_at\": \"2012-12-10 18:47:48 UTC\",\n    \"updated_at\": \"2019-02-20 12:56:28 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"mongoose54\",\n    \"id\": 277391,\n    \"node_id\": \"MDQ6VXNlcjI3NzM5MQ==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/277391?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mongoose54\",\n    \"html_url\": \"https://github.com/mongoose54\",\n    \"followers_url\": \"https://api.github.com/users/mongoose54/followers\",\n    \"following_url\": \"https://api.github.com/users/mongoose54/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mongoose54/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mongoose54/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mongoose54/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mongoose54/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mongoose54/repos\",\n    \"events_url\": \"https://api.github.com/users/mongoose54/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mongoose54/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Alex\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"mongoose54!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 9,\n    \"public_gists\": 13,\n    \"followers\": 4,\n    \"following\": 3,\n    \"created_at\": \"2010-05-15 01:37:01 UTC\",\n    \"updated_at\": \"2019-01-14 19:11:50 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"monkey3199\",\n    \"id\": 22064624,\n    \"node_id\": \"MDQ6VXNlcjIyMDY0NjI0\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/22064624?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/monkey3199\",\n    \"html_url\": \"https://github.com/monkey3199\",\n    \"followers_url\": \"https://api.github.com/users/monkey3199/followers\",\n    \"following_url\": \"https://api.github.com/users/monkey3199/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/monkey3199/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/monkey3199/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/monkey3199/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/monkey3199/orgs\",\n    \"repos_url\": \"https://api.github.com/users/monkey3199/repos\",\n    \"events_url\": \"https://api.github.com/users/monkey3199/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/monkey3199/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"monkey3199\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"monkey3199!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 10,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2016-09-08 00:30:24 UTC\",\n    \"updated_at\": \"2019-02-12 09:07:19 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"mparkhe\",\n    \"id\": 6900999,\n    \"node_id\": \"MDQ6VXNlcjY5MDA5OTk=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/6900999?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mparkhe\",\n    \"html_url\": \"https://github.com/mparkhe\",\n    \"followers_url\": \"https://api.github.com/users/mparkhe/followers\",\n    \"following_url\": \"https://api.github.com/users/mparkhe/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mparkhe/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mparkhe/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mparkhe/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mparkhe/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mparkhe/repos\",\n    \"events_url\": \"https://api.github.com/users/mparkhe/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mparkhe/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Mani Parkhe\",\n    \"company\": \"@databricks \",\n    \"blog\": \"http://www.linkedin.com/in/maniparkhe\",\n    \"location\": \"Almaden Valley\",\n    \"email\": \"mparkhe!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"ML/AI Platform Engineer @ Databricks.\",\n    \"public_repos\": 3,\n    \"public_gists\": 0,\n    \"followers\": 7,\n    \"following\": 3,\n    \"created_at\": \"2014-03-09 20:54:53 UTC\",\n    \"updated_at\": \"2019-02-12 19:35:56 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"mro-aaskandani\",\n    \"id\": 42589872,\n    \"node_id\": \"MDQ6VXNlcjQyNTg5ODcy\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/42589872?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mro-aaskandani\",\n    \"html_url\": \"https://github.com/mro-aaskandani\",\n    \"followers_url\": \"https://api.github.com/users/mro-aaskandani/followers\",\n    \"following_url\": \"https://api.github.com/users/mro-aaskandani/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mro-aaskandani/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mro-aaskandani/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mro-aaskandani/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mro-aaskandani/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mro-aaskandani/repos\",\n    \"events_url\": \"https://api.github.com/users/mro-aaskandani/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mro-aaskandani/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Amir Skandani\",\n    \"company\": \"@marathonoil.com\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"mro-aaskandani!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 2,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-08-21 21:12:23 UTC\",\n    \"updated_at\": \"2018-11-13 21:33:19 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"mukulikak\",\n    \"id\": 25306803,\n    \"node_id\": \"MDQ6VXNlcjI1MzA2ODAz\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/25306803?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/mukulikak\",\n    \"html_url\": \"https://github.com/mukulikak\",\n    \"followers_url\": \"https://api.github.com/users/mukulikak/followers\",\n    \"following_url\": \"https://api.github.com/users/mukulikak/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/mukulikak/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/mukulikak/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/mukulikak/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/mukulikak/orgs\",\n    \"repos_url\": \"https://api.github.com/users/mukulikak/repos\",\n    \"events_url\": \"https://api.github.com/users/mukulikak/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/mukulikak/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Mukulikak\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"mukulikak!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 14,\n    \"public_gists\": 0,\n    \"followers\": 4,\n    \"following\": 1,\n    \"created_at\": \"2017-01-23 19:20:38 UTC\",\n    \"updated_at\": \"2019-01-24 18:34:56 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"myqq0000\",\n    \"id\": 19700709,\n    \"node_id\": \"MDQ6VXNlcjE5NzAwNzA5\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/19700709?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/myqq0000\",\n    \"html_url\": \"https://github.com/myqq0000\",\n    \"followers_url\": \"https://api.github.com/users/myqq0000/followers\",\n    \"following_url\": \"https://api.github.com/users/myqq0000/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/myqq0000/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/myqq0000/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/myqq0000/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/myqq0000/orgs\",\n    \"repos_url\": \"https://api.github.com/users/myqq0000/repos\",\n    \"events_url\": \"https://api.github.com/users/myqq0000/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/myqq0000/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"myqq0000!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 11,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 2,\n    \"created_at\": \"2016-06-02 03:09:30 UTC\",\n    \"updated_at\": \"2019-01-04 11:22:55 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"naeemkhan12\",\n    \"id\": 15648371,\n    \"node_id\": \"MDQ6VXNlcjE1NjQ4Mzcx\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/15648371?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/naeemkhan12\",\n    \"html_url\": \"https://github.com/naeemkhan12\",\n    \"followers_url\": \"https://api.github.com/users/naeemkhan12/followers\",\n    \"following_url\": \"https://api.github.com/users/naeemkhan12/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/naeemkhan12/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/naeemkhan12/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/naeemkhan12/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/naeemkhan12/orgs\",\n    \"repos_url\": \"https://api.github.com/users/naeemkhan12/repos\",\n    \"events_url\": \"https://api.github.com/users/naeemkhan12/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/naeemkhan12/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Naeem Rashid\",\n    \"company\": null,\n    \"blog\": \"https://www.linkedin.com/in/naeem-rashid-618373121/\",\n    \"location\": \"/bin\",\n    \"email\": \"naeemkhan12!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Student of Computer Science\",\n    \"public_repos\": 53,\n    \"public_gists\": 3,\n    \"followers\": 12,\n    \"following\": 19,\n    \"created_at\": \"2015-11-04 09:25:18 UTC\",\n    \"updated_at\": \"2019-01-30 15:55:07 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"nareshganesan\",\n    \"id\": 2455106,\n    \"node_id\": \"MDQ6VXNlcjI0NTUxMDY=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/2455106?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/nareshganesan\",\n    \"html_url\": \"https://github.com/nareshganesan\",\n    \"followers_url\": \"https://api.github.com/users/nareshganesan/followers\",\n    \"following_url\": \"https://api.github.com/users/nareshganesan/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/nareshganesan/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/nareshganesan/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/nareshganesan/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/nareshganesan/orgs\",\n    \"repos_url\": \"https://api.github.com/users/nareshganesan/repos\",\n    \"events_url\": \"https://api.github.com/users/nareshganesan/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/nareshganesan/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Naresh\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"nareshganesan!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 32,\n    \"public_gists\": 32,\n    \"followers\": 15,\n    \"following\": 21,\n    \"created_at\": \"2012-09-30 01:21:04 UTC\",\n    \"updated_at\": \"2019-02-12 20:17:38 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"naz19\",\n    \"id\": 9148374,\n    \"node_id\": \"MDQ6VXNlcjkxNDgzNzQ=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/9148374?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/naz19\",\n    \"html_url\": \"https://github.com/naz19\",\n    \"followers_url\": \"https://api.github.com/users/naz19/followers\",\n    \"following_url\": \"https://api.github.com/users/naz19/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/naz19/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/naz19/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/naz19/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/naz19/orgs\",\n    \"repos_url\": \"https://api.github.com/users/naz19/repos\",\n    \"events_url\": \"https://api.github.com/users/naz19/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/naz19/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Nazeer Hussain Shaik\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"naz19!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 7,\n    \"public_gists\": 3,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2014-10-11 07:07:07 UTC\",\n    \"updated_at\": \"2018-12-08 05:34:26 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"nephenthe\",\n    \"id\": 965406,\n    \"node_id\": \"MDQ6VXNlcjk2NTQwNg==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/965406?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/nephenthe\",\n    \"html_url\": \"https://github.com/nephenthe\",\n    \"followers_url\": \"https://api.github.com/users/nephenthe/followers\",\n    \"following_url\": \"https://api.github.com/users/nephenthe/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/nephenthe/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/nephenthe/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/nephenthe/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/nephenthe/orgs\",\n    \"repos_url\": \"https://api.github.com/users/nephenthe/repos\",\n    \"events_url\": \"https://api.github.com/users/nephenthe/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/nephenthe/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Oana Sandu\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"nephenthe!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 3,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 1,\n    \"created_at\": \"2011-08-08 03:13:17 UTC\",\n    \"updated_at\": \"2019-02-16 01:38:54 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"nfelt\",\n    \"id\": 710113,\n    \"node_id\": \"MDQ6VXNlcjcxMDExMw==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/710113?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/nfelt\",\n    \"html_url\": \"https://github.com/nfelt\",\n    \"followers_url\": \"https://api.github.com/users/nfelt/followers\",\n    \"following_url\": \"https://api.github.com/users/nfelt/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/nfelt/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/nfelt/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/nfelt/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/nfelt/orgs\",\n    \"repos_url\": \"https://api.github.com/users/nfelt/repos\",\n    \"events_url\": \"https://api.github.com/users/nfelt/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/nfelt/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Nick Felt\",\n    \"company\": \"Google\",\n    \"blog\": \"\",\n    \"location\": \"Stanford, California\",\n    \"email\": \"nfelt!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 4,\n    \"public_gists\": 0,\n    \"followers\": 41,\n    \"following\": 1,\n    \"created_at\": \"2011-04-05 06:50:34 UTC\",\n    \"updated_at\": \"2019-01-30 17:26:45 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"nickchase\",\n    \"id\": 4008386,\n    \"node_id\": \"MDQ6VXNlcjQwMDgzODY=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/4008386?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/nickchase\",\n    \"html_url\": \"https://github.com/nickchase\",\n    \"followers_url\": \"https://api.github.com/users/nickchase/followers\",\n    \"following_url\": \"https://api.github.com/users/nickchase/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/nickchase/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/nickchase/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/nickchase/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/nickchase/orgs\",\n    \"repos_url\": \"https://api.github.com/users/nickchase/repos\",\n    \"events_url\": \"https://api.github.com/users/nickchase/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/nickchase/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"nickchase!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 27,\n    \"public_gists\": 5,\n    \"followers\": 4,\n    \"following\": 0,\n    \"created_at\": \"2013-03-29 19:47:06 UTC\",\n    \"updated_at\": \"2019-01-04 01:34:05 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"nikan1996\",\n    \"id\": 16970090,\n    \"node_id\": \"MDQ6VXNlcjE2OTcwMDkw\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/16970090?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/nikan1996\",\n    \"html_url\": \"https://github.com/nikan1996\",\n    \"followers_url\": \"https://api.github.com/users/nikan1996/followers\",\n    \"following_url\": \"https://api.github.com/users/nikan1996/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/nikan1996/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/nikan1996/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/nikan1996/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/nikan1996/orgs\",\n    \"repos_url\": \"https://api.github.com/users/nikan1996/repos\",\n    \"events_url\": \"https://api.github.com/users/nikan1996/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/nikan1996/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ni kan\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"HangZhou, China\",\n    \"email\": \"nikan1996!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Art is life.\\r\\nTwitter: @5Kehua\",\n    \"public_repos\": 43,\n    \"public_gists\": 0,\n    \"followers\": 5,\n    \"following\": 4,\n    \"created_at\": \"2016-01-30 06:52:19 UTC\",\n    \"updated_at\": \"2019-02-01 20:13:29 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"nikhilsharma93\",\n    \"id\": 15410503,\n    \"node_id\": \"MDQ6VXNlcjE1NDEwNTAz\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/15410503?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/nikhilsharma93\",\n    \"html_url\": \"https://github.com/nikhilsharma93\",\n    \"followers_url\": \"https://api.github.com/users/nikhilsharma93/followers\",\n    \"following_url\": \"https://api.github.com/users/nikhilsharma93/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/nikhilsharma93/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/nikhilsharma93/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/nikhilsharma93/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/nikhilsharma93/orgs\",\n    \"repos_url\": \"https://api.github.com/users/nikhilsharma93/repos\",\n    \"events_url\": \"https://api.github.com/users/nikhilsharma93/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/nikhilsharma93/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Nikhil Sharma\",\n    \"company\": \"@PrecisionHawk \",\n    \"blog\": \"https://www.linkedin.com/in/nikhilsharma12/\",\n    \"location\": null,\n    \"email\": \"nikhilsharma93!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Machine Learning @DescartesLabs\",\n    \"public_repos\": 11,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2015-10-30 07:03:47 UTC\",\n    \"updated_at\": \"2019-01-11 17:09:13 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"nilanjana2015\",\n    \"id\": 32740551,\n    \"node_id\": \"MDQ6VXNlcjMyNzQwNTUx\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/32740551?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/nilanjana2015\",\n    \"html_url\": \"https://github.com/nilanjana2015\",\n    \"followers_url\": \"https://api.github.com/users/nilanjana2015/followers\",\n    \"following_url\": \"https://api.github.com/users/nilanjana2015/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/nilanjana2015/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/nilanjana2015/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/nilanjana2015/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/nilanjana2015/orgs\",\n    \"repos_url\": \"https://api.github.com/users/nilanjana2015/repos\",\n    \"events_url\": \"https://api.github.com/users/nilanjana2015/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/nilanjana2015/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Nilanjana\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Bengaluru\",\n    \"email\": \"nilanjana2015!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"A data scientist by Passion\",\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 2,\n    \"created_at\": \"2017-10-12 13:58:36 UTC\",\n    \"updated_at\": \"2018-05-30 00:39:50 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"nishi-t\",\n    \"id\": 3439324,\n    \"node_id\": \"MDQ6VXNlcjM0MzkzMjQ=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/3439324?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/nishi-t\",\n    \"html_url\": \"https://github.com/nishi-t\",\n    \"followers_url\": \"https://api.github.com/users/nishi-t/followers\",\n    \"following_url\": \"https://api.github.com/users/nishi-t/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/nishi-t/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/nishi-t/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/nishi-t/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/nishi-t/orgs\",\n    \"repos_url\": \"https://api.github.com/users/nishi-t/repos\",\n    \"events_url\": \"https://api.github.com/users/nishi-t/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/nishi-t/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Tatsuya Nishiyama\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Japan\",\n    \"email\": \"nishi-t!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 4,\n    \"public_gists\": 10,\n    \"followers\": 14,\n    \"following\": 14,\n    \"created_at\": \"2013-01-31 15:04:52 UTC\",\n    \"updated_at\": \"2019-01-28 10:21:29 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"nkashy1\",\n    \"id\": 8016073,\n    \"node_id\": \"MDQ6VXNlcjgwMTYwNzM=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/8016073?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/nkashy1\",\n    \"html_url\": \"https://github.com/nkashy1\",\n    \"followers_url\": \"https://api.github.com/users/nkashy1/followers\",\n    \"following_url\": \"https://api.github.com/users/nkashy1/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/nkashy1/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/nkashy1/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/nkashy1/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/nkashy1/orgs\",\n    \"repos_url\": \"https://api.github.com/users/nkashy1/repos\",\n    \"events_url\": \"https://api.github.com/users/nkashy1/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/nkashy1/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Neeraj Kashyap\",\n    \"company\": \"@doc-ai \",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"nkashy1!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Blockhead\",\n    \"public_repos\": 48,\n    \"public_gists\": 5,\n    \"followers\": 10,\n    \"following\": 1,\n    \"created_at\": \"2014-06-29 01:48:20 UTC\",\n    \"updated_at\": \"2019-02-20 17:37:35 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"nkpng2k\",\n    \"id\": 29209863,\n    \"node_id\": \"MDQ6VXNlcjI5MjA5ODYz\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/29209863?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/nkpng2k\",\n    \"html_url\": \"https://github.com/nkpng2k\",\n    \"followers_url\": \"https://api.github.com/users/nkpng2k/followers\",\n    \"following_url\": \"https://api.github.com/users/nkpng2k/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/nkpng2k/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/nkpng2k/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/nkpng2k/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/nkpng2k/orgs\",\n    \"repos_url\": \"https://api.github.com/users/nkpng2k/repos\",\n    \"events_url\": \"https://api.github.com/users/nkpng2k/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/nkpng2k/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Nick Png\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"nkpng2k!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 15,\n    \"public_gists\": 1,\n    \"followers\": 4,\n    \"following\": 0,\n    \"created_at\": \"2017-06-05 18:18:26 UTC\",\n    \"updated_at\": \"2019-01-31 23:51:56 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"nosmatch\",\n    \"id\": 4558656,\n    \"node_id\": \"MDQ6VXNlcjQ1NTg2NTY=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/4558656?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/nosmatch\",\n    \"html_url\": \"https://github.com/nosmatch\",\n    \"followers_url\": \"https://api.github.com/users/nosmatch/followers\",\n    \"following_url\": \"https://api.github.com/users/nosmatch/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/nosmatch/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/nosmatch/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/nosmatch/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/nosmatch/orgs\",\n    \"repos_url\": \"https://api.github.com/users/nosmatch/repos\",\n    \"events_url\": \"https://api.github.com/users/nosmatch/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/nosmatch/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"nosmatch\",\n    \"company\": \"mgj\",\n    \"blog\": \"\",\n    \"location\": \"杭州\",\n    \"email\": \"nosmatch!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 32,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 5,\n    \"created_at\": \"2013-05-29 10:10:00 UTC\",\n    \"updated_at\": \"2019-02-01 07:24:36 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"ofaz\",\n    \"id\": 31719294,\n    \"node_id\": \"MDQ6VXNlcjMxNzE5Mjk0\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/31719294?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ofaz\",\n    \"html_url\": \"https://github.com/ofaz\",\n    \"followers_url\": \"https://api.github.com/users/ofaz/followers\",\n    \"following_url\": \"https://api.github.com/users/ofaz/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ofaz/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ofaz/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ofaz/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ofaz/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ofaz/repos\",\n    \"events_url\": \"https://api.github.com/users/ofaz/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ofaz/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ofaz!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 2,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 4,\n    \"created_at\": \"2017-09-07 04:00:32 UTC\",\n    \"updated_at\": \"2018-11-15 02:12:46 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"omartin2010\",\n    \"id\": 11371870,\n    \"node_id\": \"MDQ6VXNlcjExMzcxODcw\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/11371870?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/omartin2010\",\n    \"html_url\": \"https://github.com/omartin2010\",\n    \"followers_url\": \"https://api.github.com/users/omartin2010/followers\",\n    \"following_url\": \"https://api.github.com/users/omartin2010/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/omartin2010/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/omartin2010/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/omartin2010/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/omartin2010/orgs\",\n    \"repos_url\": \"https://api.github.com/users/omartin2010/repos\",\n    \"events_url\": \"https://api.github.com/users/omartin2010/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/omartin2010/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Olivier Martin\",\n    \"company\": \"Microsoft\",\n    \"blog\": \"http://www.microsoft.com\",\n    \"location\": \"Montreal, Canada\",\n    \"email\": \"omartin2010!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 12,\n    \"public_gists\": 0,\n    \"followers\": 10,\n    \"following\": 4,\n    \"created_at\": \"2015-03-08 04:33:50 UTC\",\n    \"updated_at\": \"2019-02-19 18:34:52 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"oquere\",\n    \"id\": 44177645,\n    \"node_id\": \"MDQ6VXNlcjQ0MTc3NjQ1\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/44177645?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/oquere\",\n    \"html_url\": \"https://github.com/oquere\",\n    \"followers_url\": \"https://api.github.com/users/oquere/followers\",\n    \"following_url\": \"https://api.github.com/users/oquere/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/oquere/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/oquere/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/oquere/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/oquere/orgs\",\n    \"repos_url\": \"https://api.github.com/users/oquere/repos\",\n    \"events_url\": \"https://api.github.com/users/oquere/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/oquere/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"oquere!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-10-15 19:36:17 UTC\",\n    \"updated_at\": \"2018-10-15 19:36:17 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"ornew\",\n    \"id\": 19766770,\n    \"node_id\": \"MDQ6VXNlcjE5NzY2Nzcw\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/19766770?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ornew\",\n    \"html_url\": \"https://github.com/ornew\",\n    \"followers_url\": \"https://api.github.com/users/ornew/followers\",\n    \"following_url\": \"https://api.github.com/users/ornew/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ornew/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ornew/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ornew/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ornew/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ornew/repos\",\n    \"events_url\": \"https://api.github.com/users/ornew/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ornew/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Arata Furukawa\",\n    \"company\": null,\n    \"blog\": \"http://ornew.net/\",\n    \"location\": \"Tokyo, Japan\",\n    \"email\": \"ornew!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 30,\n    \"public_gists\": 1,\n    \"followers\": 9,\n    \"following\": 4,\n    \"created_at\": \"2016-06-05 23:44:00 UTC\",\n    \"updated_at\": \"2019-02-14 04:42:00 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"oshev\",\n    \"id\": 2318534,\n    \"node_id\": \"MDQ6VXNlcjIzMTg1MzQ=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/2318534?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/oshev\",\n    \"html_url\": \"https://github.com/oshev\",\n    \"followers_url\": \"https://api.github.com/users/oshev/followers\",\n    \"following_url\": \"https://api.github.com/users/oshev/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/oshev/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/oshev/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/oshev/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/oshev/orgs\",\n    \"repos_url\": \"https://api.github.com/users/oshev/repos\",\n    \"events_url\": \"https://api.github.com/users/oshev/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/oshev/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Oleg Shevelyov\",\n    \"company\": \"@Oracle\",\n    \"blog\": \"\",\n    \"location\": \"London, UK\",\n    \"email\": \"oshev!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Seasoned Data Scientist / Machine Learning Engineer\",\n    \"public_repos\": 8,\n    \"public_gists\": 0,\n    \"followers\": 4,\n    \"following\": 6,\n    \"created_at\": \"2012-09-10 15:54:19 UTC\",\n    \"updated_at\": \"2018-12-30 14:56:29 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"oskar-j\",\n    \"id\": 4602830,\n    \"node_id\": \"MDQ6VXNlcjQ2MDI4MzA=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/4602830?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/oskar-j\",\n    \"html_url\": \"https://github.com/oskar-j\",\n    \"followers_url\": \"https://api.github.com/users/oskar-j/followers\",\n    \"following_url\": \"https://api.github.com/users/oskar-j/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/oskar-j/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/oskar-j/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/oskar-j/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/oskar-j/orgs\",\n    \"repos_url\": \"https://api.github.com/users/oskar-j/repos\",\n    \"events_url\": \"https://api.github.com/users/oskar-j/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/oskar-j/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Oskar Jarczyk\",\n    \"company\": \"@deepbi\",\n    \"blog\": \"http://www.datageek.pl\",\n    \"location\": \"Warsaw\",\n    \"email\": \"oskar-j!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Data scientist & computer programmer\",\n    \"public_repos\": 32,\n    \"public_gists\": 20,\n    \"followers\": 23,\n    \"following\": 38,\n    \"created_at\": \"2013-06-03 16:39:11 UTC\",\n    \"updated_at\": \"2019-02-18 09:09:17 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"pantelis\",\n    \"id\": 508740,\n    \"node_id\": \"MDQ6VXNlcjUwODc0MA==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/508740?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/pantelis\",\n    \"html_url\": \"https://github.com/pantelis\",\n    \"followers_url\": \"https://api.github.com/users/pantelis/followers\",\n    \"following_url\": \"https://api.github.com/users/pantelis/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/pantelis/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/pantelis/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/pantelis/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/pantelis/orgs\",\n    \"repos_url\": \"https://api.github.com/users/pantelis/repos\",\n    \"events_url\": \"https://api.github.com/users/pantelis/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/pantelis/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Pantelis Monogioudis\",\n    \"company\": \"NOKIA Bell Labs\",\n    \"blog\": \"https://www.linkedin.com/in/pantelis\",\n    \"location\": \"Randolph, NJ, USA\",\n    \"email\": \"pantelis!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"I follow the Moskva\\r\\nDown to Gorky Park\\r\\nlistening to the wind of change.\",\n    \"public_repos\": 57,\n    \"public_gists\": 14,\n    \"followers\": 12,\n    \"following\": 10,\n    \"created_at\": \"2010-12-04 00:27:03 UTC\",\n    \"updated_at\": \"2019-01-08 21:05:44 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"patricia92fa\",\n    \"id\": 15168633,\n    \"node_id\": \"MDQ6VXNlcjE1MTY4NjMz\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/15168633?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/patricia92fa\",\n    \"html_url\": \"https://github.com/patricia92fa\",\n    \"followers_url\": \"https://api.github.com/users/patricia92fa/followers\",\n    \"following_url\": \"https://api.github.com/users/patricia92fa/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/patricia92fa/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/patricia92fa/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/patricia92fa/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/patricia92fa/orgs\",\n    \"repos_url\": \"https://api.github.com/users/patricia92fa/repos\",\n    \"events_url\": \"https://api.github.com/users/patricia92fa/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/patricia92fa/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Patricia F.\",\n    \"company\": null,\n    \"blog\": \"https://www.linkedin.com/in/patriciaferreiro/\",\n    \"location\": \"Barcelona\",\n    \"email\": \"patricia92fa!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Passionate learner and language lover. Building Big Data pipelines on Kubernetes.\",\n    \"public_repos\": 19,\n    \"public_gists\": 0,\n    \"followers\": 3,\n    \"following\": 4,\n    \"created_at\": \"2015-10-17 08:12:30 UTC\",\n    \"updated_at\": \"2019-01-08 17:18:49 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"patzhang\",\n    \"id\": 1183059,\n    \"node_id\": \"MDQ6VXNlcjExODMwNTk=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1183059?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/patzhang\",\n    \"html_url\": \"https://github.com/patzhang\",\n    \"followers_url\": \"https://api.github.com/users/patzhang/followers\",\n    \"following_url\": \"https://api.github.com/users/patzhang/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/patzhang/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/patzhang/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/patzhang/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/patzhang/orgs\",\n    \"repos_url\": \"https://api.github.com/users/patzhang/repos\",\n    \"events_url\": \"https://api.github.com/users/patzhang/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/patzhang/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Patrick Zhang\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"patzhang!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Keep learning and building things.\",\n    \"public_repos\": 35,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 28,\n    \"created_at\": \"2011-11-09 10:09:54 UTC\",\n    \"updated_at\": \"2019-02-10 20:14:07 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"pdcoded\",\n    \"id\": 9830931,\n    \"node_id\": \"MDQ6VXNlcjk4MzA5MzE=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/9830931?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/pdcoded\",\n    \"html_url\": \"https://github.com/pdcoded\",\n    \"followers_url\": \"https://api.github.com/users/pdcoded/followers\",\n    \"following_url\": \"https://api.github.com/users/pdcoded/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/pdcoded/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/pdcoded/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/pdcoded/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/pdcoded/orgs\",\n    \"repos_url\": \"https://api.github.com/users/pdcoded/repos\",\n    \"events_url\": \"https://api.github.com/users/pdcoded/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/pdcoded/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Prabhudatta Das\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Mumbai\",\n    \"email\": \"pdcoded!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Senior Machine Learning Engineer.Love building great data driven products/solving critical problems using Deep Learning.\",\n    \"public_repos\": 38,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 3,\n    \"created_at\": \"2014-11-18 21:40:37 UTC\",\n    \"updated_at\": \"2019-02-13 23:30:24 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"phatlast96\",\n    \"id\": 10504024,\n    \"node_id\": \"MDQ6VXNlcjEwNTA0MDI0\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/10504024?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/phatlast96\",\n    \"html_url\": \"https://github.com/phatlast96\",\n    \"followers_url\": \"https://api.github.com/users/phatlast96/followers\",\n    \"following_url\": \"https://api.github.com/users/phatlast96/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/phatlast96/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/phatlast96/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/phatlast96/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/phatlast96/orgs\",\n    \"repos_url\": \"https://api.github.com/users/phatlast96/repos\",\n    \"events_url\": \"https://api.github.com/users/phatlast96/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/phatlast96/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Phat Tan Pham\",\n    \"company\": \"Veritas Technologies LLC\",\n    \"blog\": \"https://www.linkedin.com/in/phamphat\",\n    \"location\": \"California, United States\",\n    \"email\": \"phatlast96!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"UC Berkeley '18 - I am always eager to learn more about mobile app development and computer vision.\",\n    \"public_repos\": 16,\n    \"public_gists\": 0,\n    \"followers\": 3,\n    \"following\": 10,\n    \"created_at\": \"2015-01-12 19:03:10 UTC\",\n    \"updated_at\": \"2019-02-11 16:09:43 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"pineking\",\n    \"id\": 72760,\n    \"node_id\": \"MDQ6VXNlcjcyNzYw\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/72760?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/pineking\",\n    \"html_url\": \"https://github.com/pineking\",\n    \"followers_url\": \"https://api.github.com/users/pineking/followers\",\n    \"following_url\": \"https://api.github.com/users/pineking/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/pineking/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/pineking/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/pineking/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/pineking/orgs\",\n    \"repos_url\": \"https://api.github.com/users/pineking/repos\",\n    \"events_url\": \"https://api.github.com/users/pineking/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/pineking/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Qingsong Liu\",\n    \"company\": \"@Unisound @unisound-ail \",\n    \"blog\": \"\",\n    \"location\": \"China\",\n    \"email\": \"pineking!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 80,\n    \"public_gists\": 1,\n    \"followers\": 33,\n    \"following\": 14,\n    \"created_at\": \"2009-04-11 16:20:04 UTC\",\n    \"updated_at\": \"2019-02-18 15:20:15 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"pkamath\",\n    \"id\": 2417956,\n    \"node_id\": \"MDQ6VXNlcjI0MTc5NTY=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/2417956?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/pkamath\",\n    \"html_url\": \"https://github.com/pkamath\",\n    \"followers_url\": \"https://api.github.com/users/pkamath/followers\",\n    \"following_url\": \"https://api.github.com/users/pkamath/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/pkamath/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/pkamath/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/pkamath/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/pkamath/orgs\",\n    \"repos_url\": \"https://api.github.com/users/pkamath/repos\",\n    \"events_url\": \"https://api.github.com/users/pkamath/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/pkamath/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Utham Kamath\",\n    \"company\": null,\n    \"blog\": \"pkamath.com\",\n    \"location\": \"San Jose, CA\",\n    \"email\": \"pkamath!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 3,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2012-09-25 06:41:19 UTC\",\n    \"updated_at\": \"2019-01-13 22:55:44 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"plombardi89\",\n    \"id\": 893096,\n    \"node_id\": \"MDQ6VXNlcjg5MzA5Ng==\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/893096?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/plombardi89\",\n    \"html_url\": \"https://github.com/plombardi89\",\n    \"followers_url\": \"https://api.github.com/users/plombardi89/followers\",\n    \"following_url\": \"https://api.github.com/users/plombardi89/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/plombardi89/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/plombardi89/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/plombardi89/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/plombardi89/orgs\",\n    \"repos_url\": \"https://api.github.com/users/plombardi89/repos\",\n    \"events_url\": \"https://api.github.com/users/plombardi89/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/plombardi89/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Philip Lombardi\",\n    \"company\": \"Datawire.io\",\n    \"blog\": \"\",\n    \"location\": \"Boston, MA\",\n    \"email\": \"plombardi89!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Reticulating Splines @datawire \",\n    \"public_repos\": 41,\n    \"public_gists\": 11,\n    \"followers\": 5,\n    \"following\": 1,\n    \"created_at\": \"2011-07-04 08:55:56 UTC\",\n    \"updated_at\": \"2019-01-05 05:04:38 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"post2web\",\n    \"id\": 187587,\n    \"node_id\": \"MDQ6VXNlcjE4NzU4Nw==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/187587?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/post2web\",\n    \"html_url\": \"https://github.com/post2web\",\n    \"followers_url\": \"https://api.github.com/users/post2web/followers\",\n    \"following_url\": \"https://api.github.com/users/post2web/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/post2web/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/post2web/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/post2web/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/post2web/orgs\",\n    \"repos_url\": \"https://api.github.com/users/post2web/repos\",\n    \"events_url\": \"https://api.github.com/users/post2web/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/post2web/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ivelin Angelov\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Mountain View, CA\",\n    \"email\": \"post2web!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"ML Engineer\",\n    \"public_repos\": 20,\n    \"public_gists\": 25,\n    \"followers\": 5,\n    \"following\": 0,\n    \"created_at\": \"2010-01-22 10:29:10 UTC\",\n    \"updated_at\": \"2019-01-18 05:56:28 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"prateek1192\",\n    \"id\": 4374438,\n    \"node_id\": \"MDQ6VXNlcjQzNzQ0Mzg=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/4374438?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/prateek1192\",\n    \"html_url\": \"https://github.com/prateek1192\",\n    \"followers_url\": \"https://api.github.com/users/prateek1192/followers\",\n    \"following_url\": \"https://api.github.com/users/prateek1192/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/prateek1192/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/prateek1192/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/prateek1192/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/prateek1192/orgs\",\n    \"repos_url\": \"https://api.github.com/users/prateek1192/repos\",\n    \"events_url\": \"https://api.github.com/users/prateek1192/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/prateek1192/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"prateek1192!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 21,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 3,\n    \"created_at\": \"2013-05-08 08:26:40 UTC\",\n    \"updated_at\": \"2019-02-04 15:37:37 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"psyhtest\",\n    \"id\": 6597818,\n    \"node_id\": \"MDQ6VXNlcjY1OTc4MTg=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/6597818?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/psyhtest\",\n    \"html_url\": \"https://github.com/psyhtest\",\n    \"followers_url\": \"https://api.github.com/users/psyhtest/followers\",\n    \"following_url\": \"https://api.github.com/users/psyhtest/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/psyhtest/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/psyhtest/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/psyhtest/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/psyhtest/orgs\",\n    \"repos_url\": \"https://api.github.com/users/psyhtest/repos\",\n    \"events_url\": \"https://api.github.com/users/psyhtest/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/psyhtest/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Anton Lokhmotov\",\n    \"company\": \"dividiti\",\n    \"blog\": \"http://uk.linkedin.com/in/lokhmotov\",\n    \"location\": \"Cambridge, UK\",\n    \"email\": \"psyhtest!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 3,\n    \"public_gists\": 0,\n    \"followers\": 25,\n    \"following\": 15,\n    \"created_at\": \"2014-02-05 18:46:46 UTC\",\n    \"updated_at\": \"2019-02-19 07:02:01 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"pvellanki\",\n    \"id\": 8160576,\n    \"node_id\": \"MDQ6VXNlcjgxNjA1NzY=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/8160576?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/pvellanki\",\n    \"html_url\": \"https://github.com/pvellanki\",\n    \"followers_url\": \"https://api.github.com/users/pvellanki/followers\",\n    \"following_url\": \"https://api.github.com/users/pvellanki/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/pvellanki/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/pvellanki/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/pvellanki/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/pvellanki/orgs\",\n    \"repos_url\": \"https://api.github.com/users/pvellanki/repos\",\n    \"events_url\": \"https://api.github.com/users/pvellanki/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/pvellanki/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Prasad Vellanki\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"pvellanki!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 2,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2014-07-14 17:18:01 UTC\",\n    \"updated_at\": \"2019-02-14 07:01:49 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"rabierp\",\n    \"id\": 4229551,\n    \"node_id\": \"MDQ6VXNlcjQyMjk1NTE=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/4229551?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/rabierp\",\n    \"html_url\": \"https://github.com/rabierp\",\n    \"followers_url\": \"https://api.github.com/users/rabierp/followers\",\n    \"following_url\": \"https://api.github.com/users/rabierp/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/rabierp/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/rabierp/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/rabierp/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/rabierp/orgs\",\n    \"repos_url\": \"https://api.github.com/users/rabierp/repos\",\n    \"events_url\": \"https://api.github.com/users/rabierp/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/rabierp/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"prabier\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"rabierp!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 7,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 2,\n    \"created_at\": \"2013-04-22 23:33:31 UTC\",\n    \"updated_at\": \"2018-12-24 11:46:04 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"rakelkar\",\n    \"id\": 3418501,\n    \"node_id\": \"MDQ6VXNlcjM0MTg1MDE=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/3418501?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/rakelkar\",\n    \"html_url\": \"https://github.com/rakelkar\",\n    \"followers_url\": \"https://api.github.com/users/rakelkar/followers\",\n    \"following_url\": \"https://api.github.com/users/rakelkar/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/rakelkar/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/rakelkar/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/rakelkar/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/rakelkar/orgs\",\n    \"repos_url\": \"https://api.github.com/users/rakelkar/repos\",\n    \"events_url\": \"https://api.github.com/users/rakelkar/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/rakelkar/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": \"@microsoft\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"rakelkar!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 30,\n    \"public_gists\": 5,\n    \"followers\": 8,\n    \"following\": 2,\n    \"created_at\": \"2013-01-29 16:00:13 UTC\",\n    \"updated_at\": \"2019-02-12 15:29:26 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"rand\",\n    \"id\": 2835,\n    \"node_id\": \"MDQ6VXNlcjI4MzU=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/2835?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/rand\",\n    \"html_url\": \"https://github.com/rand\",\n    \"followers_url\": \"https://api.github.com/users/rand/followers\",\n    \"following_url\": \"https://api.github.com/users/rand/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/rand/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/rand/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/rand/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/rand/orgs\",\n    \"repos_url\": \"https://api.github.com/users/rand/repos\",\n    \"events_url\": \"https://api.github.com/users/rand/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/rand/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": true,\n    \"name\": \"Rand Fitzpatrick\",\n    \"company\": \"@github \",\n    \"blog\": \"tensoroverflow.com\",\n    \"location\": \"Denver, CO\",\n    \"email\": \"rand!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"algebraist. acrobat. archer.\\r\\nproduct architect.\",\n    \"public_repos\": 69,\n    \"public_gists\": 7,\n    \"followers\": 41,\n    \"following\": 43,\n    \"created_at\": \"2008-03-11 16:58:14 UTC\",\n    \"updated_at\": \"2019-02-12 13:45:24 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"randxie\",\n    \"id\": 10520307,\n    \"node_id\": \"MDQ6VXNlcjEwNTIwMzA3\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/10520307?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/randxie\",\n    \"html_url\": \"https://github.com/randxie\",\n    \"followers_url\": \"https://api.github.com/users/randxie/followers\",\n    \"following_url\": \"https://api.github.com/users/randxie/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/randxie/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/randxie/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/randxie/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/randxie/orgs\",\n    \"repos_url\": \"https://api.github.com/users/randxie/repos\",\n    \"events_url\": \"https://api.github.com/users/randxie/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/randxie/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Rand Xie\",\n    \"company\": null,\n    \"blog\": \"https://randxie.github.io/\",\n    \"location\": null,\n    \"email\": \"randxie!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Programmer and Kaggler; Excited about combining physical knowledge and machine learning models; Try to open the black box of deep learning models.\",\n    \"public_repos\": 111,\n    \"public_gists\": 0,\n    \"followers\": 75,\n    \"following\": 224,\n    \"created_at\": \"2015-01-13 19:05:43 UTC\",\n    \"updated_at\": \"2019-02-18 23:53:41 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"rayymlai\",\n    \"id\": 4731001,\n    \"node_id\": \"MDQ6VXNlcjQ3MzEwMDE=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/4731001?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/rayymlai\",\n    \"html_url\": \"https://github.com/rayymlai\",\n    \"followers_url\": \"https://api.github.com/users/rayymlai/followers\",\n    \"following_url\": \"https://api.github.com/users/rayymlai/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/rayymlai/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/rayymlai/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/rayymlai/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/rayymlai/orgs\",\n    \"repos_url\": \"https://api.github.com/users/rayymlai/repos\",\n    \"events_url\": \"https://api.github.com/users/rayymlai/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/rayymlai/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ray Lai\",\n    \"company\": \"TwoTurningPoints\",\n    \"blog\": \"\",\n    \"location\": \"Palo Alto\",\n    \"email\": \"rayymlai!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 7,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 2,\n    \"created_at\": \"2013-06-18 18:05:58 UTC\",\n    \"updated_at\": \"2019-02-07 18:03:25 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"rbq\",\n    \"id\": 68766,\n    \"node_id\": \"MDQ6VXNlcjY4NzY2\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/68766?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/rbq\",\n    \"html_url\": \"https://github.com/rbq\",\n    \"followers_url\": \"https://api.github.com/users/rbq/followers\",\n    \"following_url\": \"https://api.github.com/users/rbq/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/rbq/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/rbq/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/rbq/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/rbq/orgs\",\n    \"repos_url\": \"https://api.github.com/users/rbq/repos\",\n    \"events_url\": \"https://api.github.com/users/rbq/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/rbq/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Germany, NRW\",\n    \"email\": \"rbq!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 34,\n    \"public_gists\": 8,\n    \"followers\": 15,\n    \"following\": 33,\n    \"created_at\": \"2009-03-31 01:08:51 UTC\",\n    \"updated_at\": \"2019-02-16 21:04:14 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"rhc54\",\n    \"id\": 2440928,\n    \"node_id\": \"MDQ6VXNlcjI0NDA5Mjg=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/2440928?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/rhc54\",\n    \"html_url\": \"https://github.com/rhc54\",\n    \"followers_url\": \"https://api.github.com/users/rhc54/followers\",\n    \"following_url\": \"https://api.github.com/users/rhc54/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/rhc54/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/rhc54/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/rhc54/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/rhc54/orgs\",\n    \"repos_url\": \"https://api.github.com/users/rhc54/repos\",\n    \"events_url\": \"https://api.github.com/users/rhc54/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/rhc54/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ralph Castain\",\n    \"company\": \"Intel\",\n    \"blog\": \"https://pmix.org\",\n    \"location\": null,\n    \"email\": \"rhc54!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 11,\n    \"public_gists\": 4,\n    \"followers\": 15,\n    \"following\": 0,\n    \"created_at\": \"2012-09-27 23:04:30 UTC\",\n    \"updated_at\": \"2019-02-05 15:27:58 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"ritazh\",\n    \"id\": 1856066,\n    \"node_id\": \"MDQ6VXNlcjE4NTYwNjY=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/1856066?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ritazh\",\n    \"html_url\": \"https://github.com/ritazh\",\n    \"followers_url\": \"https://api.github.com/users/ritazh/followers\",\n    \"following_url\": \"https://api.github.com/users/ritazh/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ritazh/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ritazh/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ritazh/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ritazh/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ritazh/repos\",\n    \"events_url\": \"https://api.github.com/users/ritazh/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ritazh/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Rita Zhang\",\n    \"company\": \"Microsoft\",\n    \"blog\": \"https://ritazh.com\",\n    \"location\": \"San Francisco\",\n    \"email\": \"ritazh!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"☕️  Need more coffee ☕️  :woman_technologist: \",\n    \"public_repos\": 115,\n    \"public_gists\": 6,\n    \"followers\": 394,\n    \"following\": 36,\n    \"created_at\": \"2012-06-16 06:03:54 UTC\",\n    \"updated_at\": \"2018-04-30 00:38:25 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"rky0930\",\n    \"id\": 5013450,\n    \"node_id\": \"MDQ6VXNlcjUwMTM0NTA=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/5013450?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/rky0930\",\n    \"html_url\": \"https://github.com/rky0930\",\n    \"followers_url\": \"https://api.github.com/users/rky0930/followers\",\n    \"following_url\": \"https://api.github.com/users/rky0930/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/rky0930/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/rky0930/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/rky0930/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/rky0930/orgs\",\n    \"repos_url\": \"https://api.github.com/users/rky0930/repos\",\n    \"events_url\": \"https://api.github.com/users/rky0930/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/rky0930/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"GYOUNG-YOON RYOO\",\n    \"company\": \"Neurodigm\",\n    \"blog\": \"\",\n    \"location\": \"Seoul\",\n    \"email\": \"rky0930!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 8,\n    \"public_gists\": 2,\n    \"followers\": 13,\n    \"following\": 52,\n    \"created_at\": \"2013-07-15 13:36:11 UTC\",\n    \"updated_at\": \"2019-02-19 14:14:10 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"rnkhouse\",\n    \"id\": 3238963,\n    \"node_id\": \"MDQ6VXNlcjMyMzg5NjM=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/3238963?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/rnkhouse\",\n    \"html_url\": \"https://github.com/rnkhouse\",\n    \"followers_url\": \"https://api.github.com/users/rnkhouse/followers\",\n    \"following_url\": \"https://api.github.com/users/rnkhouse/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/rnkhouse/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/rnkhouse/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/rnkhouse/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/rnkhouse/orgs\",\n    \"repos_url\": \"https://api.github.com/users/rnkhouse/repos\",\n    \"events_url\": \"https://api.github.com/users/rnkhouse/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/rnkhouse/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"rnkhouse!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 15,\n    \"public_gists\": 20,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2013-01-10 21:44:13 UTC\",\n    \"updated_at\": \"2018-10-11 21:44:15 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"robertstarmer\",\n    \"id\": 1497671,\n    \"node_id\": \"MDQ6VXNlcjE0OTc2NzE=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1497671?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/robertstarmer\",\n    \"html_url\": \"https://github.com/robertstarmer\",\n    \"followers_url\": \"https://api.github.com/users/robertstarmer/followers\",\n    \"following_url\": \"https://api.github.com/users/robertstarmer/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/robertstarmer/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/robertstarmer/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/robertstarmer/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/robertstarmer/orgs\",\n    \"repos_url\": \"https://api.github.com/users/robertstarmer/repos\",\n    \"events_url\": \"https://api.github.com/users/robertstarmer/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/robertstarmer/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Robert Starmer\",\n    \"company\": \"Kumulus Technologies\",\n    \"blog\": \"https://kumul.us\",\n    \"location\": \"San Jose, CA, USA\",\n    \"email\": \"robertstarmer!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Robert is a Founder and the CTO at @kumulustech, a San Francisco CA based cloud systems and dev/ops consultancy.\",\n    \"public_repos\": 65,\n    \"public_gists\": 27,\n    \"followers\": 18,\n    \"following\": 0,\n    \"created_at\": \"2012-03-03 21:05:11 UTC\",\n    \"updated_at\": \"2019-02-14 01:44:51 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"rohitsroch\",\n    \"id\": 24658811,\n    \"node_id\": \"MDQ6VXNlcjI0NjU4ODEx\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/24658811?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/rohitsroch\",\n    \"html_url\": \"https://github.com/rohitsroch\",\n    \"followers_url\": \"https://api.github.com/users/rohitsroch/followers\",\n    \"following_url\": \"https://api.github.com/users/rohitsroch/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/rohitsroch/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/rohitsroch/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/rohitsroch/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/rohitsroch/orgs\",\n    \"repos_url\": \"https://api.github.com/users/rohitsroch/repos\",\n    \"events_url\": \"https://api.github.com/users/rohitsroch/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/rohitsroch/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Rohit\",\n    \"company\": \"@quantiphi\",\n    \"blog\": \"www.rohitdeveloper.in\",\n    \"location\": \"IIT Roorkee ,India\",\n    \"email\": \"rohitsroch!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Machine Learning enthusiastic &\\r\\nSoftware Developer, @quantiphi\",\n    \"public_repos\": 14,\n    \"public_gists\": 1,\n    \"followers\": 2,\n    \"following\": 4,\n    \"created_at\": \"2016-12-19 19:29:37 UTC\",\n    \"updated_at\": \"2019-01-28 10:55:09 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"rostam-github\",\n    \"id\": 40585490,\n    \"node_id\": \"MDQ6VXNlcjQwNTg1NDkw\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/40585490?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/rostam-github\",\n    \"html_url\": \"https://github.com/rostam-github\",\n    \"followers_url\": \"https://api.github.com/users/rostam-github/followers\",\n    \"following_url\": \"https://api.github.com/users/rostam-github/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/rostam-github/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/rostam-github/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/rostam-github/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/rostam-github/orgs\",\n    \"repos_url\": \"https://api.github.com/users/rostam-github/repos\",\n    \"events_url\": \"https://api.github.com/users/rostam-github/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/rostam-github/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"rostam-github!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 2,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-06-26 01:56:43 UTC\",\n    \"updated_at\": \"2019-01-09 19:18:23 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"rsepassi\",\n    \"id\": 1115739,\n    \"node_id\": \"MDQ6VXNlcjExMTU3Mzk=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/1115739?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/rsepassi\",\n    \"html_url\": \"https://github.com/rsepassi\",\n    \"followers_url\": \"https://api.github.com/users/rsepassi/followers\",\n    \"following_url\": \"https://api.github.com/users/rsepassi/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/rsepassi/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/rsepassi/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/rsepassi/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/rsepassi/orgs\",\n    \"repos_url\": \"https://api.github.com/users/rsepassi/repos\",\n    \"events_url\": \"https://api.github.com/users/rsepassi/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/rsepassi/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ryan Sepassi\",\n    \"company\": \"@google\",\n    \"blog\": \"\",\n    \"location\": \"Palo Alto\",\n    \"email\": \"rsepassi!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Senior Research Engineer, @google Brain\",\n    \"public_repos\": 19,\n    \"public_gists\": 13,\n    \"followers\": 152,\n    \"following\": 4,\n    \"created_at\": \"2011-10-10 08:21:51 UTC\",\n    \"updated_at\": \"2019-02-16 23:30:10 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"rtroutinz\",\n    \"id\": 40308151,\n    \"node_id\": \"MDQ6VXNlcjQwMzA4MTUx\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/40308151?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/rtroutinz\",\n    \"html_url\": \"https://github.com/rtroutinz\",\n    \"followers_url\": \"https://api.github.com/users/rtroutinz/followers\",\n    \"following_url\": \"https://api.github.com/users/rtroutinz/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/rtroutinz/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/rtroutinz/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/rtroutinz/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/rtroutinz/orgs\",\n    \"repos_url\": \"https://api.github.com/users/rtroutinz/repos\",\n    \"events_url\": \"https://api.github.com/users/rtroutinz/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/rtroutinz/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Robert J Trout\",\n    \"company\": \"Trout Insurance Services, Inc.\",\n    \"blog\": \"www.troutins.com\",\n    \"location\": \"Kingsport, TN\",\n    \"email\": \"rtroutinz!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-06-15 23:50:07 UTC\",\n    \"updated_at\": \"2018-06-18 15:47:20 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"sachin-ac\",\n    \"id\": 16529843,\n    \"node_id\": \"MDQ6VXNlcjE2NTI5ODQz\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/16529843?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/sachin-ac\",\n    \"html_url\": \"https://github.com/sachin-ac\",\n    \"followers_url\": \"https://api.github.com/users/sachin-ac/followers\",\n    \"following_url\": \"https://api.github.com/users/sachin-ac/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/sachin-ac/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/sachin-ac/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/sachin-ac/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/sachin-ac/orgs\",\n    \"repos_url\": \"https://api.github.com/users/sachin-ac/repos\",\n    \"events_url\": \"https://api.github.com/users/sachin-ac/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/sachin-ac/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"sachin-ac!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 3,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2016-01-03 21:25:49 UTC\",\n    \"updated_at\": \"2019-02-15 23:20:06 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"sagravat\",\n    \"id\": 450385,\n    \"node_id\": \"MDQ6VXNlcjQ1MDM4NQ==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/450385?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/sagravat\",\n    \"html_url\": \"https://github.com/sagravat\",\n    \"followers_url\": \"https://api.github.com/users/sagravat/followers\",\n    \"following_url\": \"https://api.github.com/users/sagravat/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/sagravat/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/sagravat/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/sagravat/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/sagravat/orgs\",\n    \"repos_url\": \"https://api.github.com/users/sagravat/repos\",\n    \"events_url\": \"https://api.github.com/users/sagravat/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/sagravat/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"sagravat!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 16,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2010-10-22 22:41:12 UTC\",\n    \"updated_at\": \"2019-02-13 02:31:46 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"saiakhil2012\",\n    \"id\": 5494067,\n    \"node_id\": \"MDQ6VXNlcjU0OTQwNjc=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/5494067?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/saiakhil2012\",\n    \"html_url\": \"https://github.com/saiakhil2012\",\n    \"followers_url\": \"https://api.github.com/users/saiakhil2012/followers\",\n    \"following_url\": \"https://api.github.com/users/saiakhil2012/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/saiakhil2012/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/saiakhil2012/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/saiakhil2012/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/saiakhil2012/orgs\",\n    \"repos_url\": \"https://api.github.com/users/saiakhil2012/repos\",\n    \"events_url\": \"https://api.github.com/users/saiakhil2012/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/saiakhil2012/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Malepati Bala Siva Sai Akhil\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"saiakhil2012!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2013-09-19 12:38:39 UTC\",\n    \"updated_at\": \"2019-02-01 15:30:18 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"samuelmi2\",\n    \"id\": 41701116,\n    \"node_id\": \"MDQ6VXNlcjQxNzAxMTE2\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/41701116?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/samuelmi2\",\n    \"html_url\": \"https://github.com/samuelmi2\",\n    \"followers_url\": \"https://api.github.com/users/samuelmi2/followers\",\n    \"following_url\": \"https://api.github.com/users/samuelmi2/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/samuelmi2/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/samuelmi2/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/samuelmi2/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/samuelmi2/orgs\",\n    \"repos_url\": \"https://api.github.com/users/samuelmi2/repos\",\n    \"events_url\": \"https://api.github.com/users/samuelmi2/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/samuelmi2/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"samuelmi2!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 7,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-07-25 17:57:14 UTC\",\n    \"updated_at\": \"2018-08-10 16:57:58 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"sandeep-krishnamurthy\",\n    \"id\": 3403674,\n    \"node_id\": \"MDQ6VXNlcjM0MDM2NzQ=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/3403674?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/sandeep-krishnamurthy\",\n    \"html_url\": \"https://github.com/sandeep-krishnamurthy\",\n    \"followers_url\": \"https://api.github.com/users/sandeep-krishnamurthy/followers\",\n    \"following_url\": \"https://api.github.com/users/sandeep-krishnamurthy/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/sandeep-krishnamurthy/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/sandeep-krishnamurthy/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/sandeep-krishnamurthy/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/sandeep-krishnamurthy/orgs\",\n    \"repos_url\": \"https://api.github.com/users/sandeep-krishnamurthy/repos\",\n    \"events_url\": \"https://api.github.com/users/sandeep-krishnamurthy/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/sandeep-krishnamurthy/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Sandeep Krishnamurthy\",\n    \"company\": \"Amazon Web Services - Machine Learning\",\n    \"blog\": \"\",\n    \"location\": \"San Francisco\",\n    \"email\": \"sandeep-krishnamurthy!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 46,\n    \"public_gists\": 1,\n    \"followers\": 57,\n    \"following\": 30,\n    \"created_at\": \"2013-01-28 08:20:16 UTC\",\n    \"updated_at\": \"2019-02-12 23:36:51 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"sasvaritoni\",\n    \"id\": 33866885,\n    \"node_id\": \"MDQ6VXNlcjMzODY2ODg1\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/33866885?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/sasvaritoni\",\n    \"html_url\": \"https://github.com/sasvaritoni\",\n    \"followers_url\": \"https://api.github.com/users/sasvaritoni/followers\",\n    \"following_url\": \"https://api.github.com/users/sasvaritoni/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/sasvaritoni/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/sasvaritoni/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/sasvaritoni/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/sasvaritoni/orgs\",\n    \"repos_url\": \"https://api.github.com/users/sasvaritoni/repos\",\n    \"events_url\": \"https://api.github.com/users/sasvaritoni/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/sasvaritoni/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"sasvaritoni!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2017-11-21 12:30:23 UTC\",\n    \"updated_at\": \"2018-12-05 01:51:30 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"sathiez\",\n    \"id\": 42836206,\n    \"node_id\": \"MDQ6VXNlcjQyODM2MjA2\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/42836206?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/sathiez\",\n    \"html_url\": \"https://github.com/sathiez\",\n    \"followers_url\": \"https://api.github.com/users/sathiez/followers\",\n    \"following_url\": \"https://api.github.com/users/sathiez/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/sathiez/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/sathiez/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/sathiez/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/sathiez/orgs\",\n    \"repos_url\": \"https://api.github.com/users/sathiez/repos\",\n    \"events_url\": \"https://api.github.com/users/sathiez/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/sathiez/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"sathiez!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-08-30 11:06:28 UTC\",\n    \"updated_at\": \"2019-01-13 17:51:48 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"scotttam\",\n    \"id\": 27426,\n    \"node_id\": \"MDQ6VXNlcjI3NDI2\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/27426?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/scotttam\",\n    \"html_url\": \"https://github.com/scotttam\",\n    \"followers_url\": \"https://api.github.com/users/scotttam/followers\",\n    \"following_url\": \"https://api.github.com/users/scotttam/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/scotttam/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/scotttam/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/scotttam/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/scotttam/orgs\",\n    \"repos_url\": \"https://api.github.com/users/scotttam/repos\",\n    \"events_url\": \"https://api.github.com/users/scotttam/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/scotttam/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Scott Tamosunas\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Portland, OR\",\n    \"email\": \"scotttam!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 14,\n    \"public_gists\": 16,\n    \"followers\": 10,\n    \"following\": 12,\n    \"created_at\": \"2008-10-03 15:27:45 UTC\",\n    \"updated_at\": \"2019-01-25 20:23:09 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"sdeoras\",\n    \"id\": 16372009,\n    \"node_id\": \"MDQ6VXNlcjE2MzcyMDA5\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/16372009?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/sdeoras\",\n    \"html_url\": \"https://github.com/sdeoras\",\n    \"followers_url\": \"https://api.github.com/users/sdeoras/followers\",\n    \"following_url\": \"https://api.github.com/users/sdeoras/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/sdeoras/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/sdeoras/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/sdeoras/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/sdeoras/orgs\",\n    \"repos_url\": \"https://api.github.com/users/sdeoras/repos\",\n    \"events_url\": \"https://api.github.com/users/sdeoras/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/sdeoras/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Saurabh Deoras\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"San Francisco Bay Area\",\n    \"email\": \"sdeoras!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 46,\n    \"public_gists\": 1,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2015-12-20 14:10:47 UTC\",\n    \"updated_at\": \"2019-02-19 12:59:11 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"seattleplus\",\n    \"id\": 1703399,\n    \"node_id\": \"MDQ6VXNlcjE3MDMzOTk=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1703399?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/seattleplus\",\n    \"html_url\": \"https://github.com/seattleplus\",\n    \"followers_url\": \"https://api.github.com/users/seattleplus/followers\",\n    \"following_url\": \"https://api.github.com/users/seattleplus/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/seattleplus/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/seattleplus/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/seattleplus/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/seattleplus/orgs\",\n    \"repos_url\": \"https://api.github.com/users/seattleplus/repos\",\n    \"events_url\": \"https://api.github.com/users/seattleplus/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/seattleplus/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Dean Hildebrand\",\n    \"company\": \"Google\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"seattleplus!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Technical Director, Office of the CTO, Google Cloud\",\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2012-05-03 18:13:03 UTC\",\n    \"updated_at\": \"2018-04-27 18:59:45 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"seekyiyi\",\n    \"id\": 20635249,\n    \"node_id\": \"MDQ6VXNlcjIwNjM1MjQ5\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/20635249?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/seekyiyi\",\n    \"html_url\": \"https://github.com/seekyiyi\",\n    \"followers_url\": \"https://api.github.com/users/seekyiyi/followers\",\n    \"following_url\": \"https://api.github.com/users/seekyiyi/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/seekyiyi/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/seekyiyi/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/seekyiyi/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/seekyiyi/orgs\",\n    \"repos_url\": \"https://api.github.com/users/seekyiyi/repos\",\n    \"events_url\": \"https://api.github.com/users/seekyiyi/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/seekyiyi/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"yiyang\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"seekyiyi!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 33,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 6,\n    \"created_at\": \"2016-07-25 05:35:32 UTC\",\n    \"updated_at\": \"2018-11-21 08:46:35 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"sevensees\",\n    \"id\": 4256175,\n    \"node_id\": \"MDQ6VXNlcjQyNTYxNzU=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/4256175?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/sevensees\",\n    \"html_url\": \"https://github.com/sevensees\",\n    \"followers_url\": \"https://api.github.com/users/sevensees/followers\",\n    \"following_url\": \"https://api.github.com/users/sevensees/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/sevensees/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/sevensees/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/sevensees/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/sevensees/orgs\",\n    \"repos_url\": \"https://api.github.com/users/sevensees/repos\",\n    \"events_url\": \"https://api.github.com/users/sevensees/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/sevensees/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"unknown\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"sevensees!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 3,\n    \"public_gists\": 2,\n    \"followers\": 6,\n    \"following\": 21,\n    \"created_at\": \"2013-04-25 14:10:54 UTC\",\n    \"updated_at\": \"2019-01-17 07:45:42 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"shimpel\",\n    \"id\": 43265059,\n    \"node_id\": \"MDQ6VXNlcjQzMjY1MDU5\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/43265059?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/shimpel\",\n    \"html_url\": \"https://github.com/shimpel\",\n    \"followers_url\": \"https://api.github.com/users/shimpel/followers\",\n    \"following_url\": \"https://api.github.com/users/shimpel/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/shimpel/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/shimpel/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/shimpel/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/shimpel/orgs\",\n    \"repos_url\": \"https://api.github.com/users/shimpel/repos\",\n    \"events_url\": \"https://api.github.com/users/shimpel/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/shimpel/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"shimpel!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-09-14 08:02:08 UTC\",\n    \"updated_at\": \"2018-12-05 23:22:09 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"shinytang6\",\n    \"id\": 22241503,\n    \"node_id\": \"MDQ6VXNlcjIyMjQxNTAz\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/22241503?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/shinytang6\",\n    \"html_url\": \"https://github.com/shinytang6\",\n    \"followers_url\": \"https://api.github.com/users/shinytang6/followers\",\n    \"following_url\": \"https://api.github.com/users/shinytang6/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/shinytang6/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/shinytang6/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/shinytang6/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/shinytang6/orgs\",\n    \"repos_url\": \"https://api.github.com/users/shinytang6/repos\",\n    \"events_url\": \"https://api.github.com/users/shinytang6/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/shinytang6/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Liang Tang\",\n    \"company\": \"Shanghai Jiao Tong University\",\n    \"blog\": \"\",\n    \"location\": \"Shanghai, China\",\n    \"email\": \"shinytang6!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 64,\n    \"public_gists\": 0,\n    \"followers\": 42,\n    \"following\": 24,\n    \"created_at\": \"2016-09-16 15:52:29 UTC\",\n    \"updated_at\": \"2019-02-11 16:50:12 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"sijieamoy\",\n    \"id\": 3463757,\n    \"node_id\": \"MDQ6VXNlcjM0NjM3NTc=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/3463757?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/sijieamoy\",\n    \"html_url\": \"https://github.com/sijieamoy\",\n    \"followers_url\": \"https://api.github.com/users/sijieamoy/followers\",\n    \"following_url\": \"https://api.github.com/users/sijieamoy/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/sijieamoy/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/sijieamoy/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/sijieamoy/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/sijieamoy/orgs\",\n    \"repos_url\": \"https://api.github.com/users/sijieamoy/repos\",\n    \"events_url\": \"https://api.github.com/users/sijieamoy/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/sijieamoy/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": \"@google\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"sijieamoy!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"UX Designer @google\",\n    \"public_repos\": 3,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2013-02-03 14:40:09 UTC\",\n    \"updated_at\": \"2018-12-21 19:35:17 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"smartnose\",\n    \"id\": 7807664,\n    \"node_id\": \"MDQ6VXNlcjc4MDc2NjQ=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/7807664?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/smartnose\",\n    \"html_url\": \"https://github.com/smartnose\",\n    \"followers_url\": \"https://api.github.com/users/smartnose/followers\",\n    \"following_url\": \"https://api.github.com/users/smartnose/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/smartnose/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/smartnose/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/smartnose/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/smartnose/orgs\",\n    \"repos_url\": \"https://api.github.com/users/smartnose/repos\",\n    \"events_url\": \"https://api.github.com/users/smartnose/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/smartnose/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Wei (Wayne) Liu\",\n    \"company\": \"@zillow \",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"smartnose!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"I do machine learning at large scale. \",\n    \"public_repos\": 42,\n    \"public_gists\": 4,\n    \"followers\": 2,\n    \"following\": 11,\n    \"created_at\": \"2014-06-05 16:49:27 UTC\",\n    \"updated_at\": \"2019-02-07 19:15:16 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"soumith\",\n    \"id\": 1310570,\n    \"node_id\": \"MDQ6VXNlcjEzMTA1NzA=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1310570?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/soumith\",\n    \"html_url\": \"https://github.com/soumith\",\n    \"followers_url\": \"https://api.github.com/users/soumith/followers\",\n    \"following_url\": \"https://api.github.com/users/soumith/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/soumith/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/soumith/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/soumith/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/soumith/orgs\",\n    \"repos_url\": \"https://api.github.com/users/soumith/repos\",\n    \"events_url\": \"https://api.github.com/users/soumith/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/soumith/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Soumith Chintala\",\n    \"company\": \"Facebook AI Research\",\n    \"blog\": \"http://soumith.ch\",\n    \"location\": \"New York, USA\",\n    \"email\": \"soumith!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"/\\\\︿╱\\\\ ___________________________\\r\\n\\\\0_ 0 /╱\\\\╱  _____________________\\r\\n\\\\▁︹_/\\r\\n\",\n    \"public_repos\": 146,\n    \"public_gists\": 69,\n    \"followers\": 7224,\n    \"following\": 412,\n    \"created_at\": \"2012-01-06 23:20:12 UTC\",\n    \"updated_at\": \"2019-02-20 21:24:26 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"soyuutaku\",\n    \"id\": 506278,\n    \"node_id\": \"MDQ6VXNlcjUwNjI3OA==\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/506278?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/soyuutaku\",\n    \"html_url\": \"https://github.com/soyuutaku\",\n    \"followers_url\": \"https://api.github.com/users/soyuutaku/followers\",\n    \"following_url\": \"https://api.github.com/users/soyuutaku/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/soyuutaku/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/soyuutaku/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/soyuutaku/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/soyuutaku/orgs\",\n    \"repos_url\": \"https://api.github.com/users/soyuutaku/repos\",\n    \"events_url\": \"https://api.github.com/users/soyuutaku/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/soyuutaku/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Nordy\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"soyuutaku!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 1,\n    \"public_gists\": 1,\n    \"followers\": 1,\n    \"following\": 1,\n    \"created_at\": \"2010-12-02 08:37:27 UTC\",\n    \"updated_at\": \"2019-01-29 14:44:33 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"squillace\",\n    \"id\": 1422718,\n    \"node_id\": \"MDQ6VXNlcjE0MjI3MTg=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1422718?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/squillace\",\n    \"html_url\": \"https://github.com/squillace\",\n    \"followers_url\": \"https://api.github.com/users/squillace/followers\",\n    \"following_url\": \"https://api.github.com/users/squillace/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/squillace/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/squillace/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/squillace/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/squillace/orgs\",\n    \"repos_url\": \"https://api.github.com/users/squillace/repos\",\n    \"events_url\": \"https://api.github.com/users/squillace/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/squillace/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ralph Squillace\",\n    \"company\": \"Microsoft\",\n    \"blog\": \"http://blogs.msdn.com/ralph.squillace\",\n    \"location\": \"San Francisco, Paris, Seattle\",\n    \"email\": \"squillace!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 137,\n    \"public_gists\": 7,\n    \"followers\": 50,\n    \"following\": 2,\n    \"created_at\": \"2012-02-09 11:25:22 UTC\",\n    \"updated_at\": \"2019-02-20 03:45:09 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"sreenivasmrpivot\",\n    \"id\": 26660575,\n    \"node_id\": \"MDQ6VXNlcjI2NjYwNTc1\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/26660575?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/sreenivasmrpivot\",\n    \"html_url\": \"https://github.com/sreenivasmrpivot\",\n    \"followers_url\": \"https://api.github.com/users/sreenivasmrpivot/followers\",\n    \"following_url\": \"https://api.github.com/users/sreenivasmrpivot/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/sreenivasmrpivot/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/sreenivasmrpivot/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/sreenivasmrpivot/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/sreenivasmrpivot/orgs\",\n    \"repos_url\": \"https://api.github.com/users/sreenivasmrpivot/repos\",\n    \"events_url\": \"https://api.github.com/users/sreenivasmrpivot/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/sreenivasmrpivot/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"sreenivasmrpivot!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 11,\n    \"public_gists\": 1,\n    \"followers\": 1,\n    \"following\": 3,\n    \"created_at\": \"2017-03-24 20:29:58 UTC\",\n    \"updated_at\": \"2019-02-19 16:47:33 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"sriharikarnam\",\n    \"id\": 25496668,\n    \"node_id\": \"MDQ6VXNlcjI1NDk2NjY4\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/25496668?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/sriharikarnam\",\n    \"html_url\": \"https://github.com/sriharikarnam\",\n    \"followers_url\": \"https://api.github.com/users/sriharikarnam/followers\",\n    \"following_url\": \"https://api.github.com/users/sriharikarnam/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/sriharikarnam/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/sriharikarnam/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/sriharikarnam/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/sriharikarnam/orgs\",\n    \"repos_url\": \"https://api.github.com/users/sriharikarnam/repos\",\n    \"events_url\": \"https://api.github.com/users/sriharikarnam/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/sriharikarnam/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"sriharikarnam!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 17,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 2,\n    \"created_at\": \"2017-02-02 03:03:46 UTC\",\n    \"updated_at\": \"2019-02-18 11:46:02 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"ssabnis\",\n    \"id\": 1276281,\n    \"node_id\": \"MDQ6VXNlcjEyNzYyODE=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1276281?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ssabnis\",\n    \"html_url\": \"https://github.com/ssabnis\",\n    \"followers_url\": \"https://api.github.com/users/ssabnis/followers\",\n    \"following_url\": \"https://api.github.com/users/ssabnis/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ssabnis/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ssabnis/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ssabnis/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ssabnis/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ssabnis/repos\",\n    \"events_url\": \"https://api.github.com/users/ssabnis/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ssabnis/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"San Francisco CA\",\n    \"email\": \"ssabnis!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Big Data Architect and Data Science. Startup Adviser. Technology Evangelist. \",\n    \"public_repos\": 5,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 3,\n    \"created_at\": \"2011-12-20 21:56:25 UTC\",\n    \"updated_at\": \"2019-01-13 21:11:34 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"sshrdp\",\n    \"id\": 1256036,\n    \"node_id\": \"MDQ6VXNlcjEyNTYwMzY=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1256036?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/sshrdp\",\n    \"html_url\": \"https://github.com/sshrdp\",\n    \"followers_url\": \"https://api.github.com/users/sshrdp/followers\",\n    \"following_url\": \"https://api.github.com/users/sshrdp/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/sshrdp/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/sshrdp/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/sshrdp/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/sshrdp/orgs\",\n    \"repos_url\": \"https://api.github.com/users/sshrdp/repos\",\n    \"events_url\": \"https://api.github.com/users/sshrdp/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/sshrdp/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Soroush Radpour\",\n    \"company\": \"Google Inc\",\n    \"blog\": \"\",\n    \"location\": \"United States\",\n    \"email\": \"sshrdp!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 3,\n    \"public_gists\": 1,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2011-12-11 21:19:22 UTC\",\n    \"updated_at\": \"2018-10-30 05:06:04 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"subramp\",\n    \"id\": 8655802,\n    \"node_id\": \"MDQ6VXNlcjg2NTU4MDI=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/8655802?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/subramp\",\n    \"html_url\": \"https://github.com/subramp\",\n    \"followers_url\": \"https://api.github.com/users/subramp/followers\",\n    \"following_url\": \"https://api.github.com/users/subramp/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/subramp/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/subramp/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/subramp/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/subramp/orgs\",\n    \"repos_url\": \"https://api.github.com/users/subramp/repos\",\n    \"events_url\": \"https://api.github.com/users/subramp/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/subramp/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Subramonia 'Prasad'\",\n    \"company\": \"@Symantec\",\n    \"blog\": \"\",\n    \"location\": \"Los Angeles, CA\",\n    \"email\": \"subramp!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 7,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 12,\n    \"created_at\": \"2014-09-04 13:02:20 UTC\",\n    \"updated_at\": \"2019-02-06 05:45:06 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"sucanthudu\",\n    \"id\": 20656395,\n    \"node_id\": \"MDQ6VXNlcjIwNjU2Mzk1\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/20656395?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/sucanthudu\",\n    \"html_url\": \"https://github.com/sucanthudu\",\n    \"followers_url\": \"https://api.github.com/users/sucanthudu/followers\",\n    \"following_url\": \"https://api.github.com/users/sucanthudu/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/sucanthudu/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/sucanthudu/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/sucanthudu/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/sucanthudu/orgs\",\n    \"repos_url\": \"https://api.github.com/users/sucanthudu/repos\",\n    \"events_url\": \"https://api.github.com/users/sucanthudu/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/sucanthudu/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"sucanthudu!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 3,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 1,\n    \"created_at\": \"2016-07-26 06:16:40 UTC\",\n    \"updated_at\": \"2019-02-05 13:21:48 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"suibinz\",\n    \"id\": 3422339,\n    \"node_id\": \"MDQ6VXNlcjM0MjIzMzk=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/3422339?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/suibinz\",\n    \"html_url\": \"https://github.com/suibinz\",\n    \"followers_url\": \"https://api.github.com/users/suibinz/followers\",\n    \"following_url\": \"https://api.github.com/users/suibinz/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/suibinz/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/suibinz/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/suibinz/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/suibinz/orgs\",\n    \"repos_url\": \"https://api.github.com/users/suibinz/repos\",\n    \"events_url\": \"https://api.github.com/users/suibinz/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/suibinz/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"BenZ\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"suibinz!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 15,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2013-01-30 00:24:24 UTC\",\n    \"updated_at\": \"2019-02-12 06:23:09 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"surabhikannan\",\n    \"id\": 3788815,\n    \"node_id\": \"MDQ6VXNlcjM3ODg4MTU=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/3788815?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/surabhikannan\",\n    \"html_url\": \"https://github.com/surabhikannan\",\n    \"followers_url\": \"https://api.github.com/users/surabhikannan/followers\",\n    \"following_url\": \"https://api.github.com/users/surabhikannan/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/surabhikannan/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/surabhikannan/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/surabhikannan/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/surabhikannan/orgs\",\n    \"repos_url\": \"https://api.github.com/users/surabhikannan/repos\",\n    \"events_url\": \"https://api.github.com/users/surabhikannan/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/surabhikannan/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Surabhi Kannan\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"surabhikannan!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 2,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2013-03-06 15:50:33 UTC\",\n    \"updated_at\": \"2019-01-07 07:24:39 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"switchfootsid\",\n    \"id\": 12080934,\n    \"node_id\": \"MDQ6VXNlcjEyMDgwOTM0\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/12080934?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/switchfootsid\",\n    \"html_url\": \"https://github.com/switchfootsid\",\n    \"followers_url\": \"https://api.github.com/users/switchfootsid/followers\",\n    \"following_url\": \"https://api.github.com/users/switchfootsid/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/switchfootsid/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/switchfootsid/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/switchfootsid/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/switchfootsid/orgs\",\n    \"repos_url\": \"https://api.github.com/users/switchfootsid/repos\",\n    \"events_url\": \"https://api.github.com/users/switchfootsid/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/switchfootsid/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Siddharth Kotwal\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Germany\",\n    \"email\": \"switchfootsid!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Fascinated by learning algorithms and cognitive biases.\",\n    \"public_repos\": 93,\n    \"public_gists\": 0,\n    \"followers\": 3,\n    \"following\": 11,\n    \"created_at\": \"2015-04-23 08:08:37 UTC\",\n    \"updated_at\": \"2019-02-17 23:41:44 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"sylus\",\n    \"id\": 984304,\n    \"node_id\": \"MDQ6VXNlcjk4NDMwNA==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/984304?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/sylus\",\n    \"html_url\": \"https://github.com/sylus\",\n    \"followers_url\": \"https://api.github.com/users/sylus/followers\",\n    \"following_url\": \"https://api.github.com/users/sylus/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/sylus/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/sylus/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/sylus/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/sylus/orgs\",\n    \"repos_url\": \"https://api.github.com/users/sylus/repos\",\n    \"events_url\": \"https://api.github.com/users/sylus/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/sylus/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"William H\",\n    \"company\": \"Statistics Canada\",\n    \"blog\": \"sylus.ca\",\n    \"location\": \"Ottawa\",\n    \"email\": \"sylus!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Open Source advocate working for the Government of Canada. Passions include Kubernetes, Containers and Go.\",\n    \"public_repos\": 92,\n    \"public_gists\": 17,\n    \"followers\": 68,\n    \"following\": 41,\n    \"created_at\": \"2011-08-16 18:44:43 UTC\",\n    \"updated_at\": \"2019-02-13 21:41:19 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"syvlabs\",\n    \"id\": 11819007,\n    \"node_id\": \"MDQ6VXNlcjExODE5MDA3\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/11819007?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/syvlabs\",\n    \"html_url\": \"https://github.com/syvlabs\",\n    \"followers_url\": \"https://api.github.com/users/syvlabs/followers\",\n    \"following_url\": \"https://api.github.com/users/syvlabs/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/syvlabs/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/syvlabs/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/syvlabs/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/syvlabs/orgs\",\n    \"repos_url\": \"https://api.github.com/users/syvlabs/repos\",\n    \"events_url\": \"https://api.github.com/users/syvlabs/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/syvlabs/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"iman\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"syvlabs!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 17,\n    \"public_gists\": 2,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2015-04-06 14:32:54 UTC\",\n    \"updated_at\": \"2019-01-31 07:47:49 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"tech509201941\",\n    \"id\": 26794734,\n    \"node_id\": \"MDQ6VXNlcjI2Nzk0NzM0\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/26794734?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/tech509201941\",\n    \"html_url\": \"https://github.com/tech509201941\",\n    \"followers_url\": \"https://api.github.com/users/tech509201941/followers\",\n    \"following_url\": \"https://api.github.com/users/tech509201941/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/tech509201941/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/tech509201941/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/tech509201941/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/tech509201941/orgs\",\n    \"repos_url\": \"https://api.github.com/users/tech509201941/repos\",\n    \"events_url\": \"https://api.github.com/users/tech509201941/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/tech509201941/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"tech509201941!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 1,\n    \"created_at\": \"2017-03-30 13:33:23 UTC\",\n    \"updated_at\": \"2018-08-29 13:49:28 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"techgnosis\",\n    \"id\": 9045962,\n    \"node_id\": \"MDQ6VXNlcjkwNDU5NjI=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/9045962?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/techgnosis\",\n    \"html_url\": \"https://github.com/techgnosis\",\n    \"followers_url\": \"https://api.github.com/users/techgnosis/followers\",\n    \"following_url\": \"https://api.github.com/users/techgnosis/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/techgnosis/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/techgnosis/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/techgnosis/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/techgnosis/orgs\",\n    \"repos_url\": \"https://api.github.com/users/techgnosis/repos\",\n    \"events_url\": \"https://api.github.com/users/techgnosis/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/techgnosis/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"James Musselwhite\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Seattle, WA\",\n    \"email\": \"techgnosis!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 13,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 2,\n    \"created_at\": \"2014-10-07 04:01:05 UTC\",\n    \"updated_at\": \"2019-02-02 22:30:58 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"terrykong\",\n    \"id\": 7576060,\n    \"node_id\": \"MDQ6VXNlcjc1NzYwNjA=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/7576060?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/terrykong\",\n    \"html_url\": \"https://github.com/terrykong\",\n    \"followers_url\": \"https://api.github.com/users/terrykong/followers\",\n    \"following_url\": \"https://api.github.com/users/terrykong/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/terrykong/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/terrykong/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/terrykong/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/terrykong/orgs\",\n    \"repos_url\": \"https://api.github.com/users/terrykong/repos\",\n    \"events_url\": \"https://api.github.com/users/terrykong/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/terrykong/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Terry Kong\",\n    \"company\": \"Stanford University\",\n    \"blog\": \"\",\n    \"location\": \"Stanford, CA\",\n    \"email\": \"terrykong!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 15,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 1,\n    \"created_at\": \"2014-05-14 02:11:12 UTC\",\n    \"updated_at\": \"2018-12-12 20:39:51 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"testphys\",\n    \"id\": 16897577,\n    \"node_id\": \"MDQ6VXNlcjE2ODk3NTc3\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/16897577?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/testphys\",\n    \"html_url\": \"https://github.com/testphys\",\n    \"followers_url\": \"https://api.github.com/users/testphys/followers\",\n    \"following_url\": \"https://api.github.com/users/testphys/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/testphys/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/testphys/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/testphys/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/testphys/orgs\",\n    \"repos_url\": \"https://api.github.com/users/testphys/repos\",\n    \"events_url\": \"https://api.github.com/users/testphys/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/testphys/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"André Betz\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Seoul\",\n    \"email\": \"testphys!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"former string theorist.\",\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 7,\n    \"following\": 4,\n    \"created_at\": \"2016-01-26 11:35:39 UTC\",\n    \"updated_at\": \"2018-10-12 08:40:26 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"thomasSve\",\n    \"id\": 3381606,\n    \"node_id\": \"MDQ6VXNlcjMzODE2MDY=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/3381606?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/thomasSve\",\n    \"html_url\": \"https://github.com/thomasSve\",\n    \"followers_url\": \"https://api.github.com/users/thomasSve/followers\",\n    \"following_url\": \"https://api.github.com/users/thomasSve/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/thomasSve/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/thomasSve/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/thomasSve/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/thomasSve/orgs\",\n    \"repos_url\": \"https://api.github.com/users/thomasSve/repos\",\n    \"events_url\": \"https://api.github.com/users/thomasSve/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/thomasSve/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Thomas Astad Sve\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"thomasSve!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 14,\n    \"public_gists\": 0,\n    \"followers\": 8,\n    \"following\": 2,\n    \"created_at\": \"2013-01-25 13:16:28 UTC\",\n    \"updated_at\": \"2019-02-20 15:30:00 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"thomasfricke\",\n    \"id\": 466374,\n    \"node_id\": \"MDQ6VXNlcjQ2NjM3NA==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/466374?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/thomasfricke\",\n    \"html_url\": \"https://github.com/thomasfricke\",\n    \"followers_url\": \"https://api.github.com/users/thomasfricke/followers\",\n    \"following_url\": \"https://api.github.com/users/thomasfricke/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/thomasfricke/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/thomasfricke/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/thomasfricke/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/thomasfricke/orgs\",\n    \"repos_url\": \"https://api.github.com/users/thomasfricke/repos\",\n    \"events_url\": \"https://api.github.com/users/thomasfricke/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/thomasfricke/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Thomas Fricke\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"thomasfricke!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 9,\n    \"public_gists\": 0,\n    \"followers\": 14,\n    \"following\": 1,\n    \"created_at\": \"2010-11-03 20:24:42 UTC\",\n    \"updated_at\": \"2018-09-04 14:08:33 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"tidylobster\",\n    \"id\": 7824882,\n    \"node_id\": \"MDQ6VXNlcjc4MjQ4ODI=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/7824882?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/tidylobster\",\n    \"html_url\": \"https://github.com/tidylobster\",\n    \"followers_url\": \"https://api.github.com/users/tidylobster/followers\",\n    \"following_url\": \"https://api.github.com/users/tidylobster/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/tidylobster/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/tidylobster/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/tidylobster/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/tidylobster/orgs\",\n    \"repos_url\": \"https://api.github.com/users/tidylobster/repos\",\n    \"events_url\": \"https://api.github.com/users/tidylobster/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/tidylobster/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Ilnur Garifullin\",\n    \"company\": \"Hydrosphere.io\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"tidylobster!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Knows how to ops. \",\n    \"public_repos\": 5,\n    \"public_gists\": 22,\n    \"followers\": 8,\n    \"following\": 5,\n    \"created_at\": \"2014-06-07 14:23:38 UTC\",\n    \"updated_at\": \"2019-01-26 13:45:22 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"timbuktuu\",\n    \"id\": 3590232,\n    \"node_id\": \"MDQ6VXNlcjM1OTAyMzI=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/3590232?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/timbuktuu\",\n    \"html_url\": \"https://github.com/timbuktuu\",\n    \"followers_url\": \"https://api.github.com/users/timbuktuu/followers\",\n    \"following_url\": \"https://api.github.com/users/timbuktuu/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/timbuktuu/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/timbuktuu/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/timbuktuu/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/timbuktuu/orgs\",\n    \"repos_url\": \"https://api.github.com/users/timbuktuu/repos\",\n    \"events_url\": \"https://api.github.com/users/timbuktuu/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/timbuktuu/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Tim Kelton\",\n    \"company\": \"Descartes Labs\",\n    \"blog\": \"http://www.descarteslabs.com\",\n    \"location\": null,\n    \"email\": \"timbuktuu!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 4,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2013-02-14 03:25:06 UTC\",\n    \"updated_at\": \"2019-02-18 18:50:37 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"tingweiwu\",\n    \"id\": 29671725,\n    \"node_id\": \"MDQ6VXNlcjI5NjcxNzI1\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/29671725?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/tingweiwu\",\n    \"html_url\": \"https://github.com/tingweiwu\",\n    \"followers_url\": \"https://api.github.com/users/tingweiwu/followers\",\n    \"following_url\": \"https://api.github.com/users/tingweiwu/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/tingweiwu/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/tingweiwu/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/tingweiwu/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/tingweiwu/orgs\",\n    \"repos_url\": \"https://api.github.com/users/tingweiwu/repos\",\n    \"events_url\": \"https://api.github.com/users/tingweiwu/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/tingweiwu/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"lanyangyang\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"tingweiwu!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 37,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2017-06-24 06:50:13 UTC\",\n    \"updated_at\": \"2018-12-21 19:25:04 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"tjingrant\",\n    \"id\": 6410074,\n    \"node_id\": \"MDQ6VXNlcjY0MTAwNzQ=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/6410074?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/tjingrant\",\n    \"html_url\": \"https://github.com/tjingrant\",\n    \"followers_url\": \"https://api.github.com/users/tjingrant/followers\",\n    \"following_url\": \"https://api.github.com/users/tjingrant/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/tjingrant/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/tjingrant/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/tjingrant/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/tjingrant/orgs\",\n    \"repos_url\": \"https://api.github.com/users/tjingrant/repos\",\n    \"events_url\": \"https://api.github.com/users/tjingrant/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/tjingrant/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Tian Jin\",\n    \"company\": \"IBM Research\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"tjingrant!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Advanced Compiler Technologies Group @ IBM Research\",\n    \"public_repos\": 33,\n    \"public_gists\": 3,\n    \"followers\": 24,\n    \"following\": 9,\n    \"created_at\": \"2014-01-15 14:04:37 UTC\",\n    \"updated_at\": \"2019-02-20 15:02:05 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"tlkh\",\n    \"id\": 5409617,\n    \"node_id\": \"MDQ6VXNlcjU0MDk2MTc=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/5409617?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/tlkh\",\n    \"html_url\": \"https://github.com/tlkh\",\n    \"followers_url\": \"https://api.github.com/users/tlkh/followers\",\n    \"following_url\": \"https://api.github.com/users/tlkh/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/tlkh/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/tlkh/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/tlkh/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/tlkh/orgs\",\n    \"repos_url\": \"https://api.github.com/users/tlkh/repos\",\n    \"events_url\": \"https://api.github.com/users/tlkh/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/tlkh/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Timothy Liu\",\n    \"company\": \"Singapore University of Technology and Design\",\n    \"blog\": \"https://tlkh.design/\",\n    \"location\": \"Singapore\",\n    \"email\": \"tlkh!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"I do code stuff. NVIDIA × SUTD\",\n    \"public_repos\": 65,\n    \"public_gists\": 1,\n    \"followers\": 69,\n    \"following\": 99,\n    \"created_at\": \"2013-09-08 02:53:55 UTC\",\n    \"updated_at\": \"2019-02-18 07:38:10 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"tomstockton\",\n    \"id\": 1309226,\n    \"node_id\": \"MDQ6VXNlcjEzMDkyMjY=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1309226?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/tomstockton\",\n    \"html_url\": \"https://github.com/tomstockton\",\n    \"followers_url\": \"https://api.github.com/users/tomstockton/followers\",\n    \"following_url\": \"https://api.github.com/users/tomstockton/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/tomstockton/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/tomstockton/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/tomstockton/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/tomstockton/orgs\",\n    \"repos_url\": \"https://api.github.com/users/tomstockton/repos\",\n    \"events_url\": \"https://api.github.com/users/tomstockton/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/tomstockton/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Tom Stockton\",\n    \"company\": \"Vicuna Solutions\",\n    \"blog\": \"http://www.vicunasolutions.co.uk\",\n    \"location\": \"Manchester, England\",\n    \"email\": \"tomstockton!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 29,\n    \"public_gists\": 2,\n    \"followers\": 6,\n    \"following\": 4,\n    \"created_at\": \"2012-01-06 11:44:31 UTC\",\n    \"updated_at\": \"2019-01-15 23:26:33 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"tremblerz\",\n    \"id\": 10557215,\n    \"node_id\": \"MDQ6VXNlcjEwNTU3MjE1\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/10557215?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/tremblerz\",\n    \"html_url\": \"https://github.com/tremblerz\",\n    \"followers_url\": \"https://api.github.com/users/tremblerz/followers\",\n    \"following_url\": \"https://api.github.com/users/tremblerz/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/tremblerz/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/tremblerz/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/tremblerz/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/tremblerz/orgs\",\n    \"repos_url\": \"https://api.github.com/users/tremblerz/repos\",\n    \"events_url\": \"https://api.github.com/users/tremblerz/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/tremblerz/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Abhishek Singh\",\n    \"company\": \"Cisco @CiscoAI\",\n    \"blog\": \"tremblerz.github.io\",\n    \"location\": \"Sricity, India\",\n    \"email\": \"tremblerz!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 35,\n    \"public_gists\": 14,\n    \"followers\": 22,\n    \"following\": 0,\n    \"created_at\": \"2015-01-16 05:15:13 UTC\",\n    \"updated_at\": \"2019-02-09 03:32:35 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"true-source\",\n    \"id\": 12036454,\n    \"node_id\": \"MDQ6VXNlcjEyMDM2NDU0\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/12036454?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/true-source\",\n    \"html_url\": \"https://github.com/true-source\",\n    \"followers_url\": \"https://api.github.com/users/true-source/followers\",\n    \"following_url\": \"https://api.github.com/users/true-source/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/true-source/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/true-source/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/true-source/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/true-source/orgs\",\n    \"repos_url\": \"https://api.github.com/users/true-source/repos\",\n    \"events_url\": \"https://api.github.com/users/true-source/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/true-source/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Christie Jacob\",\n    \"company\": \"ePushpakEV\",\n    \"blog\": \"\",\n    \"location\": \"Kochi ,kerala\",\n    \"email\": \"true-source!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Into ai(ml),computer vision,science.\",\n    \"public_repos\": 22,\n    \"public_gists\": 0,\n    \"followers\": 13,\n    \"following\": 7,\n    \"created_at\": \"2015-04-20 16:04:16 UTC\",\n    \"updated_at\": \"2018-11-18 11:53:49 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"ustcyue\",\n    \"id\": 2103334,\n    \"node_id\": \"MDQ6VXNlcjIxMDMzMzQ=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/2103334?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ustcyue\",\n    \"html_url\": \"https://github.com/ustcyue\",\n    \"followers_url\": \"https://api.github.com/users/ustcyue/followers\",\n    \"following_url\": \"https://api.github.com/users/ustcyue/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ustcyue/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ustcyue/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ustcyue/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ustcyue/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ustcyue/repos\",\n    \"events_url\": \"https://api.github.com/users/ustcyue/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ustcyue/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Xiaoning Yue\",\n    \"company\": \"grab\",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ustcyue!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 16,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2012-08-06 12:59:19 UTC\",\n    \"updated_at\": \"2019-02-18 03:55:15 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"vditya\",\n    \"id\": 4925099,\n    \"node_id\": \"MDQ6VXNlcjQ5MjUwOTk=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/4925099?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/vditya\",\n    \"html_url\": \"https://github.com/vditya\",\n    \"followers_url\": \"https://api.github.com/users/vditya/followers\",\n    \"following_url\": \"https://api.github.com/users/vditya/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/vditya/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/vditya/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/vditya/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/vditya/orgs\",\n    \"repos_url\": \"https://api.github.com/users/vditya/repos\",\n    \"events_url\": \"https://api.github.com/users/vditya/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/vditya/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"vditya!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 3,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2013-07-02 22:37:05 UTC\",\n    \"updated_at\": \"2018-12-06 23:16:20 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"veliborfrobas\",\n    \"id\": 41189840,\n    \"node_id\": \"MDQ6VXNlcjQxMTg5ODQw\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/41189840?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/veliborfrobas\",\n    \"html_url\": \"https://github.com/veliborfrobas\",\n    \"followers_url\": \"https://api.github.com/users/veliborfrobas/followers\",\n    \"following_url\": \"https://api.github.com/users/veliborfrobas/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/veliborfrobas/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/veliborfrobas/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/veliborfrobas/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/veliborfrobas/orgs\",\n    \"repos_url\": \"https://api.github.com/users/veliborfrobas/repos\",\n    \"events_url\": \"https://api.github.com/users/veliborfrobas/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/veliborfrobas/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"veliborfrobas!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-07-13 10:22:34 UTC\",\n    \"updated_at\": \"2018-07-13 10:22:34 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"vfontama\",\n    \"id\": 37591676,\n    \"node_id\": \"MDQ6VXNlcjM3NTkxNjc2\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/37591676?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/vfontama\",\n    \"html_url\": \"https://github.com/vfontama\",\n    \"followers_url\": \"https://api.github.com/users/vfontama/followers\",\n    \"following_url\": \"https://api.github.com/users/vfontama/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/vfontama/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/vfontama/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/vfontama/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/vfontama/orgs\",\n    \"repos_url\": \"https://api.github.com/users/vfontama/repos\",\n    \"events_url\": \"https://api.github.com/users/vfontama/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/vfontama/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"vfontama!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 0,\n    \"public_gists\": 0,\n    \"followers\": 1,\n    \"following\": 0,\n    \"created_at\": \"2018-03-20 17:05:41 UTC\",\n    \"updated_at\": \"2019-02-05 18:00:57 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"vielmetti\",\n    \"id\": 35047,\n    \"node_id\": \"MDQ6VXNlcjM1MDQ3\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/35047?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/vielmetti\",\n    \"html_url\": \"https://github.com/vielmetti\",\n    \"followers_url\": \"https://api.github.com/users/vielmetti/followers\",\n    \"following_url\": \"https://api.github.com/users/vielmetti/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/vielmetti/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/vielmetti/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/vielmetti/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/vielmetti/orgs\",\n    \"repos_url\": \"https://api.github.com/users/vielmetti/repos\",\n    \"events_url\": \"https://api.github.com/users/vielmetti/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/vielmetti/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Edward Vielmetti\",\n    \"company\": \"@packethost @packet-labs \",\n    \"blog\": \"https://www.packet.net/about/ed-vielmetti/\",\n    \"location\": \"Ann Arbor, MI\",\n    \"email\": \"vielmetti!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Special projects director at Packet; amateur radio operator W8EMV.  Works on Arm. #arm64 #aarch64 #armservers\",\n    \"public_repos\": 88,\n    \"public_gists\": 81,\n    \"followers\": 117,\n    \"following\": 332,\n    \"created_at\": \"2008-11-17 20:14:24 UTC\",\n    \"updated_at\": \"2019-02-15 10:30:02 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"vivekbhadouria\",\n    \"id\": 4207469,\n    \"node_id\": \"MDQ6VXNlcjQyMDc0Njk=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/4207469?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/vivekbhadouria\",\n    \"html_url\": \"https://github.com/vivekbhadouria\",\n    \"followers_url\": \"https://api.github.com/users/vivekbhadouria/followers\",\n    \"following_url\": \"https://api.github.com/users/vivekbhadouria/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/vivekbhadouria/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/vivekbhadouria/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/vivekbhadouria/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/vivekbhadouria/orgs\",\n    \"repos_url\": \"https://api.github.com/users/vivekbhadouria/repos\",\n    \"events_url\": \"https://api.github.com/users/vivekbhadouria/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/vivekbhadouria/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Vivek\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Lucknow\",\n    \"email\": \"vivekbhadouria!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2013-04-20 04:44:51 UTC\",\n    \"updated_at\": \"2018-04-18 04:55:20 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"vkoukis\",\n    \"id\": 1746057,\n    \"node_id\": \"MDQ6VXNlcjE3NDYwNTc=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/1746057?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/vkoukis\",\n    \"html_url\": \"https://github.com/vkoukis\",\n    \"followers_url\": \"https://api.github.com/users/vkoukis/followers\",\n    \"following_url\": \"https://api.github.com/users/vkoukis/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/vkoukis/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/vkoukis/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/vkoukis/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/vkoukis/orgs\",\n    \"repos_url\": \"https://api.github.com/users/vkoukis/repos\",\n    \"events_url\": \"https://api.github.com/users/vkoukis/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/vkoukis/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Vangelis Koukis\",\n    \"company\": \"@arrikto\",\n    \"blog\": \"https://gr.linkedin.com/in/vangelis-koukis-48290911\",\n    \"location\": null,\n    \"email\": \"vkoukis!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 27,\n    \"following\": 0,\n    \"created_at\": \"2012-05-16 15:00:46 UTC\",\n    \"updated_at\": \"2018-11-07 22:54:45 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"vmarkovtsev\",\n    \"id\": 2793551,\n    \"node_id\": \"MDQ6VXNlcjI3OTM1NTE=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/2793551?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/vmarkovtsev\",\n    \"html_url\": \"https://github.com/vmarkovtsev\",\n    \"followers_url\": \"https://api.github.com/users/vmarkovtsev/followers\",\n    \"following_url\": \"https://api.github.com/users/vmarkovtsev/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/vmarkovtsev/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/vmarkovtsev/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/vmarkovtsev/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/vmarkovtsev/orgs\",\n    \"repos_url\": \"https://api.github.com/users/vmarkovtsev/repos\",\n    \"events_url\": \"https://api.github.com/users/vmarkovtsev/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/vmarkovtsev/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Vadim Markovtsev\",\n    \"company\": \"@src-d \",\n    \"blog\": \"twitter.com/vadimlearning\",\n    \"location\": \"Madrid\",\n    \"email\": \"vmarkovtsev!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Former system programmer, now passionate ML engineer.\\r\\nGoogle Developer Expert in ML.\\r\\nlinkedin.com/in/vmarkovtsev\\r\\ndata.world/vmarkovtsev\",\n    \"public_repos\": 182,\n    \"public_gists\": 10,\n    \"followers\": 279,\n    \"following\": 3,\n    \"created_at\": \"2012-11-14 06:39:09 UTC\",\n    \"updated_at\": \"2019-02-18 15:30:36 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"walterhuangio\",\n    \"id\": 13756727,\n    \"node_id\": \"MDQ6VXNlcjEzNzU2NzI3\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/13756727?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/walterhuangio\",\n    \"html_url\": \"https://github.com/walterhuangio\",\n    \"followers_url\": \"https://api.github.com/users/walterhuangio/followers\",\n    \"following_url\": \"https://api.github.com/users/walterhuangio/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/walterhuangio/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/walterhuangio/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/walterhuangio/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/walterhuangio/orgs\",\n    \"repos_url\": \"https://api.github.com/users/walterhuangio/repos\",\n    \"events_url\": \"https://api.github.com/users/walterhuangio/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/walterhuangio/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Walter Huang\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"walterhuangio!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Love coding, love my family.\",\n    \"public_repos\": 14,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 0,\n    \"created_at\": \"2015-08-11 23:59:14 UTC\",\n    \"updated_at\": \"2019-02-06 22:38:27 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"wfchair\",\n    \"id\": 38781231,\n    \"node_id\": \"MDQ6VXNlcjM4NzgxMjMx\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/38781231?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/wfchair\",\n    \"html_url\": \"https://github.com/wfchair\",\n    \"followers_url\": \"https://api.github.com/users/wfchair/followers\",\n    \"following_url\": \"https://api.github.com/users/wfchair/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/wfchair/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/wfchair/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/wfchair/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/wfchair/orgs\",\n    \"repos_url\": \"https://api.github.com/users/wfchair/repos\",\n    \"events_url\": \"https://api.github.com/users/wfchair/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/wfchair/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"wfchair!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 1,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2018-04-27 08:28:43 UTC\",\n    \"updated_at\": \"2019-01-13 15:05:24 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"wjimenez5271\",\n    \"id\": 322834,\n    \"node_id\": \"MDQ6VXNlcjMyMjgzNA==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/322834?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/wjimenez5271\",\n    \"html_url\": \"https://github.com/wjimenez5271\",\n    \"followers_url\": \"https://api.github.com/users/wjimenez5271/followers\",\n    \"following_url\": \"https://api.github.com/users/wjimenez5271/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/wjimenez5271/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/wjimenez5271/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/wjimenez5271/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/wjimenez5271/orgs\",\n    \"repos_url\": \"https://api.github.com/users/wjimenez5271/repos\",\n    \"events_url\": \"https://api.github.com/users/wjimenez5271/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/wjimenez5271/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"William Jimenez\",\n    \"company\": \"@PrimerAI \",\n    \"blog\": \"https://twitter.com/wjimenez5271\",\n    \"location\": \"Sunnyvale, CA\",\n    \"email\": \"wjimenez5271!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 77,\n    \"public_gists\": 22,\n    \"followers\": 14,\n    \"following\": 18,\n    \"created_at\": \"2010-07-05 01:34:04 UTC\",\n    \"updated_at\": \"2019-01-09 18:22:57 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"woop\",\n    \"id\": 6728866,\n    \"node_id\": \"MDQ6VXNlcjY3Mjg4NjY=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/6728866?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/woop\",\n    \"html_url\": \"https://github.com/woop\",\n    \"followers_url\": \"https://api.github.com/users/woop/followers\",\n    \"following_url\": \"https://api.github.com/users/woop/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/woop/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/woop/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/woop/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/woop/orgs\",\n    \"repos_url\": \"https://api.github.com/users/woop/repos\",\n    \"events_url\": \"https://api.github.com/users/woop/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/woop/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Willem Pienaar\",\n    \"company\": \"GOJEK\",\n    \"blog\": \"\",\n    \"location\": \"Singapore\",\n    \"email\": \"woop!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 13,\n    \"public_gists\": 0,\n    \"followers\": 19,\n    \"following\": 1,\n    \"created_at\": \"2014-02-19 16:15:17 UTC\",\n    \"updated_at\": \"2019-02-19 12:11:26 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"wskinner\",\n    \"id\": 1054197,\n    \"node_id\": \"MDQ6VXNlcjEwNTQxOTc=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/1054197?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/wskinner\",\n    \"html_url\": \"https://github.com/wskinner\",\n    \"followers_url\": \"https://api.github.com/users/wskinner/followers\",\n    \"following_url\": \"https://api.github.com/users/wskinner/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/wskinner/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/wskinner/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/wskinner/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/wskinner/orgs\",\n    \"repos_url\": \"https://api.github.com/users/wskinner/repos\",\n    \"events_url\": \"https://api.github.com/users/wskinner/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/wskinner/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Will Skinner\",\n    \"company\": null,\n    \"blog\": \"http://willskinner.me\",\n    \"location\": \"San Francisco\",\n    \"email\": \"wskinner!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Founder @ Engine ML\\r\\nhttp://willskinner.me\\r\\nhttp://engineml.com\",\n    \"public_repos\": 17,\n    \"public_gists\": 4,\n    \"followers\": 6,\n    \"following\": 0,\n    \"created_at\": \"2011-09-15 20:00:16 UTC\",\n    \"updated_at\": \"2018-08-23 18:33:55 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"xigang\",\n    \"id\": 3377677,\n    \"node_id\": \"MDQ6VXNlcjMzNzc2Nzc=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/3377677?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/xigang\",\n    \"html_url\": \"https://github.com/xigang\",\n    \"followers_url\": \"https://api.github.com/users/xigang/followers\",\n    \"following_url\": \"https://api.github.com/users/xigang/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/xigang/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/xigang/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/xigang/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/xigang/orgs\",\n    \"repos_url\": \"https://api.github.com/users/xigang/repos\",\n    \"events_url\": \"https://api.github.com/users/xigang/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/xigang/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Xigang Wang\",\n    \"company\": \"Qihoo 360\",\n    \"blog\": \"https://xigang.github.io/\",\n    \"location\": \"Beijing,China\",\n    \"email\": \"xigang!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 38,\n    \"public_gists\": 50,\n    \"followers\": 10,\n    \"following\": 37,\n    \"created_at\": \"2013-01-25 05:03:05 UTC\",\n    \"updated_at\": \"2018-12-31 12:58:33 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"xinzhangcmu\",\n    \"id\": 11807517,\n    \"node_id\": \"MDQ6VXNlcjExODA3NTE3\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/11807517?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/xinzhangcmu\",\n    \"html_url\": \"https://github.com/xinzhangcmu\",\n    \"followers_url\": \"https://api.github.com/users/xinzhangcmu/followers\",\n    \"following_url\": \"https://api.github.com/users/xinzhangcmu/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/xinzhangcmu/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/xinzhangcmu/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/xinzhangcmu/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/xinzhangcmu/orgs\",\n    \"repos_url\": \"https://api.github.com/users/xinzhangcmu/repos\",\n    \"events_url\": \"https://api.github.com/users/xinzhangcmu/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/xinzhangcmu/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Xin Zhang\",\n    \"company\": \"@caicloud \",\n    \"blog\": \"caicloud.io\",\n    \"location\": \"Hangzhou, China\",\n    \"email\": \"xinzhangcmu!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Co-founder of Caicloud, using Kubernetes and deep learning to build personalized cloud services; previously an ex-Googler with a CS PhD from CMU\",\n    \"public_repos\": 9,\n    \"public_gists\": 0,\n    \"followers\": 34,\n    \"following\": 0,\n    \"created_at\": \"2015-04-05 15:24:33 UTC\",\n    \"updated_at\": \"2019-02-14 05:21:31 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"xqqcoder\",\n    \"id\": 31360881,\n    \"node_id\": \"MDQ6VXNlcjMxMzYwODgx\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/31360881?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/xqqcoder\",\n    \"html_url\": \"https://github.com/xqqcoder\",\n    \"followers_url\": \"https://api.github.com/users/xqqcoder/followers\",\n    \"following_url\": \"https://api.github.com/users/xqqcoder/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/xqqcoder/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/xqqcoder/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/xqqcoder/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/xqqcoder/orgs\",\n    \"repos_url\": \"https://api.github.com/users/xqqcoder/repos\",\n    \"events_url\": \"https://api.github.com/users/xqqcoder/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/xqqcoder/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"xqqcoder!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 2,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 1,\n    \"created_at\": \"2017-08-26 01:36:20 UTC\",\n    \"updated_at\": \"2018-12-30 10:07:36 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"xuchenCN\",\n    \"id\": 2757089,\n    \"node_id\": \"MDQ6VXNlcjI3NTcwODk=\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/2757089?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/xuchenCN\",\n    \"html_url\": \"https://github.com/xuchenCN\",\n    \"followers_url\": \"https://api.github.com/users/xuchenCN/followers\",\n    \"following_url\": \"https://api.github.com/users/xuchenCN/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/xuchenCN/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/xuchenCN/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/xuchenCN/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/xuchenCN/orgs\",\n    \"repos_url\": \"https://api.github.com/users/xuchenCN/repos\",\n    \"events_url\": \"https://api.github.com/users/xuchenCN/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/xuchenCN/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"xuchen\",\n    \"company\": \"Lenovo\",\n    \"blog\": \"\",\n    \"location\": \"Beijing\",\n    \"email\": \"xuchenCN!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 33,\n    \"public_gists\": 0,\n    \"followers\": 12,\n    \"following\": 15,\n    \"created_at\": \"2012-11-09 07:37:35 UTC\",\n    \"updated_at\": \"2019-01-17 00:29:09 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"yanspirit\",\n    \"id\": 1797120,\n    \"node_id\": \"MDQ6VXNlcjE3OTcxMjA=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/1797120?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/yanspirit\",\n    \"html_url\": \"https://github.com/yanspirit\",\n    \"followers_url\": \"https://api.github.com/users/yanspirit/followers\",\n    \"following_url\": \"https://api.github.com/users/yanspirit/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/yanspirit/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/yanspirit/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/yanspirit/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/yanspirit/orgs\",\n    \"repos_url\": \"https://api.github.com/users/yanspirit/repos\",\n    \"events_url\": \"https://api.github.com/users/yanspirit/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/yanspirit/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"yanspirit!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 19,\n    \"public_gists\": 0,\n    \"followers\": 3,\n    \"following\": 8,\n    \"created_at\": \"2012-05-31 03:23:35 UTC\",\n    \"updated_at\": \"2018-09-07 02:39:37 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"yeahydq\",\n    \"id\": 18577463,\n    \"node_id\": \"MDQ6VXNlcjE4NTc3NDYz\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/18577463?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/yeahydq\",\n    \"html_url\": \"https://github.com/yeahydq\",\n    \"followers_url\": \"https://api.github.com/users/yeahydq/followers\",\n    \"following_url\": \"https://api.github.com/users/yeahydq/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/yeahydq/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/yeahydq/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/yeahydq/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/yeahydq/orgs\",\n    \"repos_url\": \"https://api.github.com/users/yeahydq/repos\",\n    \"events_url\": \"https://api.github.com/users/yeahydq/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/yeahydq/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"yeahydq!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 54,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 0,\n    \"created_at\": \"2016-04-20 15:01:20 UTC\",\n    \"updated_at\": \"2019-02-13 15:31:11 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"yehiyam\",\n    \"id\": 6139491,\n    \"node_id\": \"MDQ6VXNlcjYxMzk0OTE=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/6139491?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/yehiyam\",\n    \"html_url\": \"https://github.com/yehiyam\",\n    \"followers_url\": \"https://api.github.com/users/yehiyam/followers\",\n    \"following_url\": \"https://api.github.com/users/yehiyam/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/yehiyam/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/yehiyam/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/yehiyam/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/yehiyam/orgs\",\n    \"repos_url\": \"https://api.github.com/users/yehiyam/repos\",\n    \"events_url\": \"https://api.github.com/users/yehiyam/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/yehiyam/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"yehiyam!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 43,\n    \"public_gists\": 2,\n    \"followers\": 3,\n    \"following\": 0,\n    \"created_at\": \"2013-12-09 04:41:27 UTC\",\n    \"updated_at\": \"2019-02-19 20:24:15 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"yizhexu\",\n    \"id\": 7387309,\n    \"node_id\": \"MDQ6VXNlcjczODczMDk=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/7387309?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/yizhexu\",\n    \"html_url\": \"https://github.com/yizhexu\",\n    \"followers_url\": \"https://api.github.com/users/yizhexu/followers\",\n    \"following_url\": \"https://api.github.com/users/yizhexu/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/yizhexu/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/yizhexu/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/yizhexu/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/yizhexu/orgs\",\n    \"repos_url\": \"https://api.github.com/users/yizhexu/repos\",\n    \"events_url\": \"https://api.github.com/users/yizhexu/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/yizhexu/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Yizhe Xu\",\n    \"company\": null,\n    \"blog\": \"yizhexu.com\",\n    \"location\": null,\n    \"email\": \"yizhexu!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 9,\n    \"public_gists\": 1,\n    \"followers\": 4,\n    \"following\": 5,\n    \"created_at\": \"2014-04-23 17:57:15 UTC\",\n    \"updated_at\": \"2019-02-18 21:29:37 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"yncxcw\",\n    \"id\": 7780675,\n    \"node_id\": \"MDQ6VXNlcjc3ODA2NzU=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/7780675?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/yncxcw\",\n    \"html_url\": \"https://github.com/yncxcw\",\n    \"followers_url\": \"https://api.github.com/users/yncxcw/followers\",\n    \"following_url\": \"https://api.github.com/users/yncxcw/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/yncxcw/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/yncxcw/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/yncxcw/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/yncxcw/orgs\",\n    \"repos_url\": \"https://api.github.com/users/yncxcw/repos\",\n    \"events_url\": \"https://api.github.com/users/yncxcw/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/yncxcw/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"yncxcw!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"System researcher, focus on distributed systems, Linux kernel and system architectures\",\n    \"public_repos\": 55,\n    \"public_gists\": 0,\n    \"followers\": 28,\n    \"following\": 52,\n    \"created_at\": \"2014-06-03 12:37:55 UTC\",\n    \"updated_at\": \"2019-02-01 20:53:30 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"yongwen\",\n    \"id\": 495715,\n    \"node_id\": \"MDQ6VXNlcjQ5NTcxNQ==\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/495715?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/yongwen\",\n    \"html_url\": \"https://github.com/yongwen\",\n    \"followers_url\": \"https://api.github.com/users/yongwen/followers\",\n    \"following_url\": \"https://api.github.com/users/yongwen/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/yongwen/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/yongwen/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/yongwen/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/yongwen/orgs\",\n    \"repos_url\": \"https://api.github.com/users/yongwen/repos\",\n    \"events_url\": \"https://api.github.com/users/yongwen/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/yongwen/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Yongwen Xu\",\n    \"company\": \"Pinterest\",\n    \"blog\": \"\",\n    \"location\": \"San Francisco\",\n    \"email\": \"yongwen!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 37,\n    \"public_gists\": 0,\n    \"followers\": 25,\n    \"following\": 0,\n    \"created_at\": \"2010-11-24 23:25:05 UTC\",\n    \"updated_at\": \"2019-02-11 06:25:21 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"yuefengz\",\n    \"id\": 1647833,\n    \"node_id\": \"MDQ6VXNlcjE2NDc4MzM=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1647833?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/yuefengz\",\n    \"html_url\": \"https://github.com/yuefengz\",\n    \"followers_url\": \"https://api.github.com/users/yuefengz/followers\",\n    \"following_url\": \"https://api.github.com/users/yuefengz/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/yuefengz/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/yuefengz/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/yuefengz/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/yuefengz/orgs\",\n    \"repos_url\": \"https://api.github.com/users/yuefengz/repos\",\n    \"events_url\": \"https://api.github.com/users/yuefengz/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/yuefengz/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Yuefeng Zhou\",\n    \"company\": \"Google\",\n    \"blog\": \"\",\n    \"location\": \"Mountain View, CA\",\n    \"email\": \"yuefengz!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 5,\n    \"public_gists\": 0,\n    \"followers\": 159,\n    \"following\": 22,\n    \"created_at\": \"2012-04-16 11:30:23 UTC\",\n    \"updated_at\": \"2018-11-19 23:59:34 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"ywskycn\",\n    \"id\": 1824905,\n    \"node_id\": \"MDQ6VXNlcjE4MjQ5MDU=\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1824905?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/ywskycn\",\n    \"html_url\": \"https://github.com/ywskycn\",\n    \"followers_url\": \"https://api.github.com/users/ywskycn/followers\",\n    \"following_url\": \"https://api.github.com/users/ywskycn/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/ywskycn/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/ywskycn/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/ywskycn/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/ywskycn/orgs\",\n    \"repos_url\": \"https://api.github.com/users/ywskycn/repos\",\n    \"events_url\": \"https://api.github.com/users/ywskycn/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/ywskycn/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"WeiYan\",\n    \"company\": \"@alipay \",\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"ywskycn!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": \"Apache Hadoop Committer\",\n    \"public_repos\": 13,\n    \"public_gists\": 1,\n    \"followers\": 9,\n    \"following\": 1,\n    \"created_at\": \"2012-06-06 22:19:32 UTC\",\n    \"updated_at\": \"2019-02-19 05:26:13 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"zachgrayio\",\n    \"id\": 10119797,\n    \"node_id\": \"MDQ6VXNlcjEwMTE5Nzk3\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/10119797?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/zachgrayio\",\n    \"html_url\": \"https://github.com/zachgrayio\",\n    \"followers_url\": \"https://api.github.com/users/zachgrayio/followers\",\n    \"following_url\": \"https://api.github.com/users/zachgrayio/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/zachgrayio/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/zachgrayio/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/zachgrayio/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/zachgrayio/orgs\",\n    \"repos_url\": \"https://api.github.com/users/zachgrayio/repos\",\n    \"events_url\": \"https://api.github.com/users/zachgrayio/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/zachgrayio/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Zach Gray\",\n    \"company\": \"Scal.io\",\n    \"blog\": \"http://zachgray.io\",\n    \"location\": \"San Francisco\",\n    \"email\": \"zachgrayio!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": null,\n    \"public_repos\": 20,\n    \"public_gists\": 3,\n    \"followers\": 24,\n    \"following\": 14,\n    \"created_at\": \"2014-12-08 18:11:52 UTC\",\n    \"updated_at\": \"2019-01-13 08:42:12 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"zchunhai\",\n    \"id\": 14309137,\n    \"node_id\": \"MDQ6VXNlcjE0MzA5MTM3\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/14309137?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/zchunhai\",\n    \"html_url\": \"https://github.com/zchunhai\",\n    \"followers_url\": \"https://api.github.com/users/zchunhai/followers\",\n    \"following_url\": \"https://api.github.com/users/zchunhai/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/zchunhai/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/zchunhai/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/zchunhai/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/zchunhai/orgs\",\n    \"repos_url\": \"https://api.github.com/users/zchunhai/repos\",\n    \"events_url\": \"https://api.github.com/users/zchunhai/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/zchunhai/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Chunhai Zhang\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"zchunhai!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 6,\n    \"public_gists\": 0,\n    \"followers\": 3,\n    \"following\": 5,\n    \"created_at\": \"2015-09-16 08:23:24 UTC\",\n    \"updated_at\": \"2019-01-23 08:12:49 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"zehni\",\n    \"id\": 11148928,\n    \"node_id\": \"MDQ6VXNlcjExMTQ4OTI4\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/11148928?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/zehni\",\n    \"html_url\": \"https://github.com/zehni\",\n    \"followers_url\": \"https://api.github.com/users/zehni/followers\",\n    \"following_url\": \"https://api.github.com/users/zehni/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/zehni/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/zehni/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/zehni/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/zehni/orgs\",\n    \"repos_url\": \"https://api.github.com/users/zehni/repos\",\n    \"events_url\": \"https://api.github.com/users/zehni/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/zehni/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Zehni khairullah\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"Netherlands\",\n    \"email\": \"zehni!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"Computer Science: Data Science Master Student at Leiden University. Data Scientist/ Full Stack Developer \",\n    \"public_repos\": 4,\n    \"public_gists\": 0,\n    \"followers\": 12,\n    \"following\": 18,\n    \"created_at\": \"2015-02-22 18:02:07 UTC\",\n    \"updated_at\": \"2019-02-03 13:49:21 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"zionwu\",\n    \"id\": 1213386,\n    \"node_id\": \"MDQ6VXNlcjEyMTMzODY=\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/1213386?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/zionwu\",\n    \"html_url\": \"https://github.com/zionwu\",\n    \"followers_url\": \"https://api.github.com/users/zionwu/followers\",\n    \"following_url\": \"https://api.github.com/users/zionwu/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/zionwu/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/zionwu/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/zionwu/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/zionwu/orgs\",\n    \"repos_url\": \"https://api.github.com/users/zionwu/repos\",\n    \"events_url\": \"https://api.github.com/users/zionwu/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/zionwu/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Zion Wu\",\n    \"company\": null,\n    \"blog\": \"zionwu.github.io\",\n    \"location\": \"Shenzhen\",\n    \"email\": \"zionwu!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 65,\n    \"public_gists\": 4,\n    \"followers\": 22,\n    \"following\": 30,\n    \"created_at\": \"2011-11-22 16:21:34 UTC\",\n    \"updated_at\": \"2019-01-24 02:02:21 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"zlcnju\",\n    \"id\": 16498267,\n    \"node_id\": \"MDQ6VXNlcjE2NDk4MjY3\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/16498267?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/zlcnju\",\n    \"html_url\": \"https://github.com/zlcnju\",\n    \"followers_url\": \"https://api.github.com/users/zlcnju/followers\",\n    \"following_url\": \"https://api.github.com/users/zlcnju/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/zlcnju/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/zlcnju/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/zlcnju/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/zlcnju/orgs\",\n    \"repos_url\": \"https://api.github.com/users/zlcnju/repos\",\n    \"events_url\": \"https://api.github.com/users/zlcnju/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/zlcnju/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"zlcnju!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 9,\n    \"public_gists\": 0,\n    \"followers\": 3,\n    \"following\": 3,\n    \"created_at\": \"2015-12-31 07:44:41 UTC\",\n    \"updated_at\": \"2019-02-18 15:52:00 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"zmoon111\",\n    \"id\": 252567,\n    \"node_id\": \"MDQ6VXNlcjI1MjU2Nw==\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/252567?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/zmoon111\",\n    \"html_url\": \"https://github.com/zmoon111\",\n    \"followers_url\": \"https://api.github.com/users/zmoon111/followers\",\n    \"following_url\": \"https://api.github.com/users/zmoon111/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/zmoon111/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/zmoon111/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/zmoon111/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/zmoon111/orgs\",\n    \"repos_url\": \"https://api.github.com/users/zmoon111/repos\",\n    \"events_url\": \"https://api.github.com/users/zmoon111/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/zmoon111/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"zhaoming\",\n    \"company\": \"horizon-robotics\",\n    \"blog\": \"http://www.jianshu.com/users/c68ba2575e94/latest_articles\",\n    \"location\": \"beijing\",\n    \"email\": \"zmoon111!users.noreply.github.com\",\n    \"hireable\": true,\n    \"bio\": \"rd\",\n    \"public_repos\": 541,\n    \"public_gists\": 2,\n    \"followers\": 14,\n    \"following\": 11,\n    \"created_at\": \"2010-04-26 06:55:11 UTC\",\n    \"updated_at\": \"2019-01-17 11:10:31 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"zoux86\",\n    \"id\": 14087435,\n    \"node_id\": \"MDQ6VXNlcjE0MDg3NDM1\",\n    \"avatar_url\": \"https://avatars1.githubusercontent.com/u/14087435?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/zoux86\",\n    \"html_url\": \"https://github.com/zoux86\",\n    \"followers_url\": \"https://api.github.com/users/zoux86/followers\",\n    \"following_url\": \"https://api.github.com/users/zoux86/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/zoux86/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/zoux86/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/zoux86/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/zoux86/orgs\",\n    \"repos_url\": \"https://api.github.com/users/zoux86/repos\",\n    \"events_url\": \"https://api.github.com/users/zoux86/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/zoux86/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"zoux\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"zoux86!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 10,\n    \"public_gists\": 0,\n    \"followers\": 0,\n    \"following\": 2,\n    \"created_at\": \"2015-09-02 06:33:54 UTC\",\n    \"updated_at\": \"2019-01-23 02:25:05 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"zuowang\",\n    \"id\": 10447352,\n    \"node_id\": \"MDQ6VXNlcjEwNDQ3MzUy\",\n    \"avatar_url\": \"https://avatars2.githubusercontent.com/u/10447352?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/zuowang\",\n    \"html_url\": \"https://github.com/zuowang\",\n    \"followers_url\": \"https://api.github.com/users/zuowang/followers\",\n    \"following_url\": \"https://api.github.com/users/zuowang/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/zuowang/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/zuowang/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/zuowang/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/zuowang/orgs\",\n    \"repos_url\": \"https://api.github.com/users/zuowang/repos\",\n    \"events_url\": \"https://api.github.com/users/zuowang/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/zuowang/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Zuo Wang\",\n    \"company\": \"Intel\",\n    \"blog\": \"zuowang.ml\",\n    \"location\": \"Shanghai\",\n    \"email\": \"zuowang!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 105,\n    \"public_gists\": 5,\n    \"followers\": 119,\n    \"following\": 0,\n    \"created_at\": \"2015-01-08 08:55:29 UTC\",\n    \"updated_at\": \"2018-10-30 05:35:36 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"zxsimple\",\n    \"id\": 10580990,\n    \"node_id\": \"MDQ6VXNlcjEwNTgwOTkw\",\n    \"avatar_url\": \"https://avatars0.githubusercontent.com/u/10580990?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/zxsimple\",\n    \"html_url\": \"https://github.com/zxsimple\",\n    \"followers_url\": \"https://api.github.com/users/zxsimple/followers\",\n    \"following_url\": \"https://api.github.com/users/zxsimple/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/zxsimple/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/zxsimple/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/zxsimple/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/zxsimple/orgs\",\n    \"repos_url\": \"https://api.github.com/users/zxsimple/repos\",\n    \"events_url\": \"https://api.github.com/users/zxsimple/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/zxsimple/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": \"Sanders\",\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": \"China\",\n    \"email\": \"zxsimple!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 23,\n    \"public_gists\": 0,\n    \"followers\": 2,\n    \"following\": 32,\n    \"created_at\": \"2015-01-18 06:40:20 UTC\",\n    \"updated_at\": \"2019-01-30 08:39:38 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  },\n  {\n    \"login\": \"zyxcambridge\",\n    \"id\": 1818981,\n    \"node_id\": \"MDQ6VXNlcjE4MTg5ODE=\",\n    \"avatar_url\": \"https://avatars3.githubusercontent.com/u/1818981?v=4\",\n    \"gravatar_id\": \"\",\n    \"url\": \"https://api.github.com/users/zyxcambridge\",\n    \"html_url\": \"https://github.com/zyxcambridge\",\n    \"followers_url\": \"https://api.github.com/users/zyxcambridge/followers\",\n    \"following_url\": \"https://api.github.com/users/zyxcambridge/following{/other_user}\",\n    \"gists_url\": \"https://api.github.com/users/zyxcambridge/gists{/gist_id}\",\n    \"starred_url\": \"https://api.github.com/users/zyxcambridge/starred{/owner}{/repo}\",\n    \"subscriptions_url\": \"https://api.github.com/users/zyxcambridge/subscriptions\",\n    \"organizations_url\": \"https://api.github.com/users/zyxcambridge/orgs\",\n    \"repos_url\": \"https://api.github.com/users/zyxcambridge/repos\",\n    \"events_url\": \"https://api.github.com/users/zyxcambridge/events{/privacy}\",\n    \"received_events_url\": \"https://api.github.com/users/zyxcambridge/received_events\",\n    \"type\": \"User\",\n    \"site_admin\": false,\n    \"name\": null,\n    \"company\": null,\n    \"blog\": \"\",\n    \"location\": null,\n    \"email\": \"zyxcambridge!users.noreply.github.com\",\n    \"hireable\": null,\n    \"bio\": null,\n    \"public_repos\": 57,\n    \"public_gists\": 1,\n    \"followers\": 19,\n    \"following\": 24,\n    \"created_at\": \"2012-06-05 11:33:23 UTC\",\n    \"updated_at\": \"2019-02-04 05:01:12 UTC\",\n    \"commits\": 0,\n    \"affiliation\": \"?\"\n  }\n]"
  },
  {
    "path": "devstats/deploy-config/devstats.jinja",
    "content": "{#\nCopyright 2018 Kubeflow Authors All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n    http://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n#}\n\n\n{% set NAME_PREFIX = env['deployment'] + '-' + env['name'] %}\n\n{% set CLUSTER_NAME = NAME_PREFIX %}\n{% set CPU_POOL = NAME_PREFIX + '-cpu-pool-' + properties['pool-version'] %}\n{% set VM_OAUTH_SCOPES = ['https://www.googleapis.com/auth/logging.write', \n                          'https://www.googleapis.com/auth/monitoring',\n                          'https://www.googleapis.com/auth/devstorage.read_only'] %}\n\n{% macro diskName(diskObj) -%}{{ env[\"deployment\"]}}-{{ diskObj[\"name\"] }}{%- endmacro %}\n\nresources:\n# Reserve a static IP.\n- name: devstats\n  type: compute.v1.globalAddress\n  properties:\n    project: {{ properties['project'] }}\n    name: {{ CLUSTER_NAME }}\n    description: \"Static IP for the devstats server.\"\n- name: {{ CLUSTER_NAME }}\n  {% if properties['gkeApiVersion'] == 'v1beta1' %}\n  type: gcp-types/container-v1beta1:projects.locations.clusters\n  {% else %}\n  type: container.v1.cluster\n  {% endif %}\n  properties:\n    parent: projects/{{ env['project'] }}/locations/{{ properties['zone'] }}\n    zone: {{ properties['zone'] }}\n    cluster:\n      name: {{ CLUSTER_NAME }}\n      initialClusterVersion: \"{{ properties['cluster-version'] }}\"\n      {% if properties['gkeApiVersion'] == 'v1beta1' %}\n      # We need 1.10.2 to support Stackdriver GKE.\n      loggingService: logging.googleapis.com/kubernetes\n      monitoringService: monitoring.googleapis.com/kubernetes\n      podSecurityPolicyConfig:\n        enabled: {{ properties['securityConfig']['podSecurityPolicy'] }}\n      {% endif %}\n      {% if properties['securityConfig']['privatecluster'] %}\n      ipAllocationPolicy:\n        createSubnetwork: true\n        useIpAliases: true\n      privateClusterConfig:\n        masterIpv4CidrBlock: {{ properties['securityConfig']['masterIpv4CidrBlock'] }}\n        enablePrivateNodes: true\n      masterAuthorizedNetworksConfig:\n        enabled: {{ properties['securityConfig']['masterAuthorizedNetworksConfigEnabled'] }}\n        {% if properties['securityConfig']['masterAuthorizedNetworksConfigEnabled'] %}\n        cidrBlocks:\n          {{ properties['securityConfig']['masterAuthorizedNetworksConfigCidr'] }}\n        {% endif %}\n      {% endif %}\n      nodePools:\n      - name: default-pool\n        initialNodeCount: {{ properties['cpu-pool-initialNodeCount'] }}\n        autoscaling:\n          enabled: {{ properties['cpu-pool-enable-autoscaling'] }}\n          {% if properties['cpu-pool-enable-autoscaling'] %}\n          minNodeCount: {{ properties['cpu-pool-min-nodes'] }}\n          maxNodeCount: {{ properties['cpu-pool-max-nodes'] }}\n          {% endif %}\n        config:\n          {% if properties['securityConfig']['secureNodeMetadata'] %}\n          workloadMetadataConfig:\n            nodeMetadata: SECURE\n          {% endif %}\n          machineType: n1-standard-8\n          oauthScopes: {{ VM_OAUTH_SCOPES }}\n"
  },
  {
    "path": "devstats/deploy-config/devstats.yaml",
    "content": "# Copyright 2018 Kubeflow authors All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n# This is the Google Cloud Deployment Manager config for deploying\n# Devstats on our dev project.\n#\nimports:\n- path: devstats.jinja\n\nresources:\n- name: devstats\n  type: devstats.jinja\n  properties:\n    # You need to use a zone with Broadwell because that's what TFServing requires.\n    zone: us-central1-a\n    # \"1.X\": picks the highest valid patch+gke.N patch in the 1.X version\n    # https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1/projects.zones.clusters\n    cluster-version: \"1.11\"\n    # Set this to v1beta1 to use beta features such as private clusterss\n    # and the Kubernetes stackdriver agents.\n    gkeApiVersion: v1beta1\n    # An arbitrary string appending to name of nodepools\n    # bump this if you want to modify the node pools.\n    # This will cause existing node pools to be deleted and new ones to be created.\n    # Use prefix v so it will be treated as a string.\n    pool-version: v1\n    # Two is small enough to fit within default quota.\n    cpu-pool-initialNodeCount: 2\n    gpu-pool-initialNodeCount: 0\n    # Autoscaling parameters\n    cpu-pool-enable-autoscaling: true\n    cpu-pool-min-nodes: 0\n    cpu-pool-max-nodes: 10\n    securityConfig:\n      # Use private IPs to make this more secure.\n      privatecluster: false\n      # masterIpv4CidrBlock for private clusters, if enabled\n      # Use v1beta1 api\n      masterIpv4CidrBlock: 172.16.0.16/28\n      # Protect worker node metadata from pods\n      # Use v1beta1 api\n      secureNodeMetadata: false\n      # Whether to enable Pod Security Policy Admission Controller\n      # Use v1beta1 api\n      podSecurityPolicy: false\n      masterAuthorizedNetworksConfigEnabled: false\n      masterAuthorizedNetworksConfigCidr:\n      - cidrBlock: 1.2.3.4/32"
  },
  {
    "path": "devstats/deploy-config/gcfs.yaml",
    "content": "# Modify this instance to create a GCFS file store.\n# 1. Change the zone to the desired zone\n# 2. Change the instanceId to the desired id\n# 3. Change network if needed \n# 4. Change the capacity if desired.\nresources:\n- name: filestore\n  type: gcp-types/file-v1beta1:projects.locations.instances\n  properties:\n    parent: projects/devstats/locations/us-central1-a\n    # Any name of the instance would do\n    instanceId: devstats-nfs\n    tier: STANDARD\n    description: Filestore for Kubeflow devstats\n    networks:\n    - network: default\n    fileShares:\n    - name: kubeflow\n      capacityGb: 1024"
  },
  {
    "path": "devstats/k8s_manifests/cli_home_pvc.yaml",
    "content": "---\n# Create a PVC to use for the home directory of the CLI. This way data will be persistent across restarts.\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: cli-home\n  namespace: devstats\nspec:\n  accessModes:\n  - ReadWriteOnce\n  resources:\n    requests:\n      storage: 50Gi"
  },
  {
    "path": "devstats/k8s_manifests/nfs_pvc.yaml",
    "content": "---\napiVersion: v1\nkind: PersistentVolume\nmetadata:\n  name: devstats-nfs\n  namespace: devstats\nspec:\n  accessModes:\n  - ReadWriteMany\n  capacity:\n    storage: 1000Gi\n  nfs:\n    # This should be the name of the fileshare in cloud filestore\n    path: /kubeflow\n    server: 10.23.251.218\n  persistentVolumeReclaimPolicy: Retain\n  storageClassName: nfs-storage\n---\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: devstats-nfs\n  namespace: devstats\nspec:\n  accessModes:\n  - ReadWriteMany\n  resources:\n    requests:\n      storage: 50Gi\n  storageClassName: nfs-storage\n  volumeName: devstats-nfs"
  },
  {
    "path": "devstats/ks-app/.ksonnet/registries/incubator/40285d8a14f1ac5787e405e1023cf0c07f6aa28c.yaml",
    "content": "apiVersion: 0.1.0\ngitVersion:\n  commitSha: 40285d8a14f1ac5787e405e1023cf0c07f6aa28c\n  refSpec: master\nkind: ksonnet.io/registry\nlibraries:\n  apache:\n    path: apache\n    version: master\n  efk:\n    path: efk\n    version: master\n  mariadb:\n    path: mariadb\n    version: master\n  memcached:\n    path: memcached\n    version: master\n  mongodb:\n    path: mongodb\n    version: master\n  mysql:\n    path: mysql\n    version: master\n  nginx:\n    path: nginx\n    version: master\n  node:\n    path: node\n    version: master\n  postgres:\n    path: postgres\n    version: master\n  redis:\n    path: redis\n    version: master\n  tomcat:\n    path: tomcat\n    version: master\n"
  },
  {
    "path": "devstats/ks-app/.ksonnet/registries/kubeflow/e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289.yaml",
    "content": "apiVersion: 0.1.0\ngitVersion:\n  commitSha: e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289\n  refSpec: master\nkind: ksonnet.io/registry\nlibraries:\n  argo:\n    path: argo\n    version: master\n  core:\n    path: core\n    version: master\n  new-package-stub:\n    path: new-package-stub\n    version: master\n  openmpi:\n    path: openmpi\n    version: master\n  pachyderm:\n    path: pachyderm\n    version: master\n  pytorch-job:\n    path: pytorch-job\n    version: master\n  tf-job:\n    path: tf-job\n    version: master\n  tf-serving:\n    path: tf-serving\n    version: master\n"
  },
  {
    "path": "devstats/ks-app/app.yaml",
    "content": "apiVersion: 0.3.0\nenvironments:\n  devstats2:\n    destination:\n      namespace: devstats\n      server: https://35.193.107.91\n    k8sVersion: v1.11.6\n    path: devstats2\nkind: ksonnet.io/app\nlibraries:\n  kubeflow/core:\n    name: core\n    registry: kubeflow\n    version: e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289\nname: ks-app\nregistries:\n  incubator:\n    protocol: github\n    uri: github.com/ksonnet/parts/tree/master/incubator\n  kubeflow:\n    protocol: github\n    uri: github.com/kubeflow/kubeflow/tree/master/kubeflow\nversion: 0.0.1\n"
  },
  {
    "path": "devstats/ks-app/components/backfill.jsonnet",
    "content": "local env = std.extVar(\"__ksonnet/environments\");\nlocal params = std.extVar(\"__ksonnet/params\").components[\"backfill\"];\nlocal k = import \"k.libsonnet\";\nlocal devstatsLib = import \"devstats-parts.libsonnet\";\n\nstd.prune(k.core.v1.list.new(devstatsLib.backfilljob(params, env)))\n"
  },
  {
    "path": "devstats/ks-app/components/cert-manager.jsonnet",
    "content": "local env = std.extVar(\"__ksonnet/environments\");\nlocal params = std.extVar(\"__ksonnet/params\").components[\"cert-manager\"];\nlocal k = import \"k.libsonnet\";\nlocal certManager = import \"kubeflow/core/cert-manager.libsonnet\";\n\n// updatedParams uses the environment namespace if\n// the namespace parameter is not explicitly set\nlocal updatedParams = params {\n  namespace: if params.namespace == \"null\" then env.namespace else params.namespace,\n};\n\ncertManager.parts(updatedParams.namespace).certManagerParts(params.acmeEmail, params.acmeUrl)\n"
  },
  {
    "path": "devstats/ks-app/components/devstats-parts.libsonnet",
    "content": "{\n  // The base directory where projects.yaml etc... can be found.\n  // This should be a directory in a git repo that is cloned onto an NFS mounted volume.\n  local configRepoRoot = \"/mount/data/src/git_kubeflow-community/devstats/config\",\n\n  local nfsMountPath = \"/mount/data\",\n  \n  // Volumes and volumeMounts for nfs\n  local volumeMounts = [\n    {\n      mountPath: nfsMountPath,\n      name: \"nfs\",\n    },\n    {\n      mountPath: \"/etc/github\",\n      name: \"gitdm-github-oauth\",\n    },\n  ],\n\n  local volumes = [\n    {\n      name: \"nfs\",\n      persistentVolumeClaim: {\n        claimName: \"devstats-nfs\",\n      },\n    },\n    {\n      name: \"gitdm-github-oauth\",\n      secret: {\n        secretName: \"gitdm-github-oauth\",\n      },\n    },\n  ],\n\n  // Prototypes\n  all(params, env)::\n    // The devstats DB is one of two postgress databases that we need. Its used for logs and other information.\n\n    $.parts(params, env).postgreDb(\"devstatsdb\", \"devstats-postgres\") +\n    [\n      $.parts(params, env).cli,\n      $.parts(params, env).grafanaIngress,\n      $.parts(params, env).certificate,\n      $.parts(params, env).grafanaService,\n      $.parts(params, env).grafanaDeploy,\n      $.parts(params, env).grafanaServiceAccount,\n    ],\n\n  backfilljob(params, env)::\n    [$.parts(params, env).backFillJob],\n\n  syncCronJob(params, env)::\n    [$.parts(params, env).syncCronJob],\n\n  parts(params, env):: {\n    local namespace = env.namespace,\n\n    local devstatsImage = \"gcr.io/devstats/devstats:v20190217-ed3e9c1-dirty-fdc649\",\n    local devStatsDbName = \"devstatsdb\",\n\n    // Where to mount the projects config map\n    local projectsMountPoint = \"/etc/projects-volume\",\n\n    local fqdn = params.fqdn,\n\n    // Environment variables to be set on various pods.\n    // These control the devstats tools\n    local devstatsEnv = [\n      // The devstats scripts use variables with prefix \"PG_\"\n      {\n        name: \"PG_HOST\",\n        value: devStatsDbName + \"-0.\" + devStatsDbName + \".\" + namespace + \".svc.cluster.local\",\n      },\n      {\n        name: \"PG_DB\",\n        value: \"kubeflow\",\n      },\n      {\n        name: \"PG_PASS\",\n        value: \"password\",\n      },\n      {\n        name: \"PG_PASS_ROLE\",\n        value: \"ro_user\",\n      },\n      // Postgres uses slightly different variable names\n      // https://www.postgresql.org/docs/9.5/libpq-envars.html\n      // Keep these in sync with PG_values.\n      {\n        name: \"PGHOST\",\n        value: devStatsDbName + \"-0.\" + devStatsDbName + \".\" + namespace + \".svc.cluster.local\",\n      },\n      {\n        name: \"PGDATABASE\",\n        value: \"kubeflow\",\n      },\n      {\n        name: \"PGUSER\",\n        value: \"gha_admin\",\n      },\n      {\n        name: \"PGPASSWORD\",\n        value: \"password\",\n      },\n      // More environment variables used by devstats scripts\n      {\n        // TODO(jlewi): Is this supposed to match the name in projects.yaml?\n        name: \"GHA2DB_PROJECT\",\n        value: \"kubeflow\",\n      },\n      {\n        // Location of projects.yaml file. This will be mounted from NFS\n        name: \"GHA2DB_PROJECTS_YAML\",\n        value: \"projects.yaml\",\n      },\n      {\n        // The directory where ./get_repos will check out Kubeflow repos to\n        // We put this on NFS so its resilient.\n        name: \"GHA2DB_REPOS_DIR\",\n        value: nfsMountPath + \"/devstats_repos\",\n      },\n      {\n        // TODO(jlewi): We could probably use the other secret that contains the client id and secret in addition to oauth.\n        name: \"GHA2DB_GITHUB_OAUTH\",\n        valueFrom: {\n          secretKeyRef: {\n            name: \"github-oauth\",\n            key: \"github-oauth\",\n          },\n        },\n      },\n      # We set the environment because of this issue\n      # https://stackoverflow.com/questions/17031651/invalid-byte-sequence-in-us-ascii-argument-error-when-i-run-rake-dbseed-in-ra\n      { \n        name: \"RUBYOPT\",\n        value: \"-KU -E utf-8:utf-8\",\n      },\n    ],\n\n    // Create components for a postgre database.\n    postgreDb(name, diskName):: [\n      // Service\n      {\n        apiVersion: \"v1\",\n        kind: \"Service\",\n        metadata: {\n          labels: {\n            app: name,\n          },\n          name: name,\n          namespace: namespace,\n        },\n        spec: {\n          clusterIP: \"None\",\n          ports: [\n            {\n              port: 5432,\n            },\n          ],\n          selector: {\n            app: name,\n          },\n        },\n      },  // service\n\n      // Stateful set\n      {\n        apiVersion: \"apps/v1\",\n        kind: \"StatefulSet\",\n        metadata: {\n          name: name,\n          namespace: namespace,\n        },\n        spec: {\n          replicas: 1,\n          selector: {\n            matchLabels: {\n              app: name,\n            },\n          },\n          serviceName: name,\n          template: {\n            metadata: {\n              labels: {\n                app: name,\n              },\n            },\n            spec: {\n              containers: [\n                // The postgres container DB.\n                {\n                  env: [\n                    // POSTGRES_USER\" and \"POSTGRES_PASSWORD\" are  used\n                    // by the startup script postgre-docker-entrypoint.sh.\n                    //\n                    // Looks like post gres uses different values; see\n                    // https://www.postgresql.org/docs/9.5/libpq-envars.html.\n                    {\n                      name: \"POSTGRES_USER\",\n                      value: \"postgres\",\n                    },\n                    {\n                      name: \"POSTGRES_PASSWORD\",\n                      value: \"password\",\n                    },\n                    {\n                      // This is the default DB; it is created on container startup if it doesn't\n                      // exist by postgre-docker-entrypint.\n                      // I(jlewi@) think postgres might need some sort of default DB to exist.\n                      // But this is not the DB used with Kubeflow.\n                      // That db is named kubeflow.\n                      name: \"POSTGRES_DB\",\n                      value: \"postgres\",\n                    },\n                    // https://www.postgresql.org/docs/9.0/app-postgres.html\n                    {\n                      name: \"PGDATA\",\n                      value: \"/mount/data/postgresql/\",\n                    },\n                  ],\n                  image: devstatsImage,\n                  name: \"postgres\",\n                  command: [\n                    \"/usr/local/bin/postgre-docker-entrypoint.sh\",\n                    \"postgres\",\n                  ],\n                  ports: [\n                    {\n                      containerPort: 5432,\n                    },\n                  ],\n                  securityContext: {\n                    // Run as the postgres user and group.\n                    // Keep in sync with the values used in the container.\n                    runAsUser: 1000,\n                    runAsGrou: 1000,\n                  },\n                  volumeMounts: volumeMounts,\n                },  // Postgres container\n              ],  // containers\n              volumes: volumes,\n            },\n          },\n        },\n      },  //stateful set\n    ],  // postgreDb\n\n    // Create a pod running as a stateful set that we can use\n    // to execute commands manually.\n    //\n    // We use a PVC for /home so that data will persist across reboots.\n    cli:: {\n      apiVersion: \"apps/v1\",\n      kind: \"StatefulSet\",\n      metadata: {\n        name: \"devstats-cli\",\n        namespace: namespace,\n        labels: {\n          app: \"devstats-cli\",\n        },\n      },\n      spec: {\n        replicas: 1,\n        selector: {\n          matchLabels: {\n            app: \"devstats-cli\",\n          },\n        },\n        template: {\n          metadata: {\n            labels: {\n              app: \"devstats-cli\",\n            },\n          },\n          spec: {\n            containers: [\n              {\n                command: [\n                  \"tail\",\n                  \"-f\",\n                  \"/dev/null\",\n                ],\n                env: devstatsEnv,\n                image: devstatsImage,\n                name: \"devstats\",\n                workingDir: configRepoRoot,\n                volumeMounts: [\n                  {\n                    mountPath: \"/home\",\n                    name: \"cli-home\",\n                  },\n                ] + volumeMounts,\n              },\n            ],\n            terminationGracePeriodSeconds: 10,\n            volumes: volumes + [\n              // Use a PD for /home.\n              {\n                name: \"cli-home\",\n                persistentVolumeClaim: {\n                  claimName: \"cli-home\",\n                },\n              },\n            ],\n          },\n        },\n      },\n    },  // cli\n\n    // A K8s job to backfill\n    backFillJob:: {\n      apiVersion: \"batch/v1\",\n      kind: \"Job\",\n      metadata: {\n        name: \"backfill-job\",\n        namespace: namespace,\n      },\n      spec: {\n        template: {\n          spec: {\n            containers: [\n              {\n                command: [\n                  \"gha2db\",\n                  params.start_day,\n                  \"00\",\n                  params.end_day,\n                  \"23\",\n                  \"kubeflow\",\n                ],\n                env: devstatsEnv,\n                image: devstatsImage,\n                name: \"devstats\",\n                volumeMounts: volumeMounts,\n              },\n            ],\n            restartPolicy: \"OnFailure\",\n            terminationGracePeriodSeconds: 10,\n            volumes: volumes,\n          },\n        },  // template\n      },\n    },  // backFillJob\n\n    // A K8s cron job to sync the DB.\n    syncCronJob:: {\n      apiVersion: \"batch/v1beta1\",\n      kind: \"CronJob\",\n      metadata: {\n        name: \"devstats-sync\",\n        namespace: namespace,\n      },\n      spec: {\n        schedule: \"@hourly\",\n        jobTemplate: {\n          spec: {\n            template: {\n              spec: {\n                containers: [\n                  {\n                    command: [\n                      \"devstats\",\n                    ],\n                    env: devstatsEnv,\n                    image: devstatsImage,\n                    name: \"devstats\",\n                    workingDir: configRepoRoot,\n                    volumeMounts: volumeMounts,\n                  },\n                ],\n                restartPolicy: \"OnFailure\",\n                terminationGracePeriodSeconds: 10,\n                volumes: volumes,\n              },\n            },\n          },\n        },  // template\n      },\n    },  // syncCronJob\n\n    certificate:: {\n      apiVersion: \"certmanager.k8s.io/v1alpha1\",\n      kind: \"Certificate\",\n      metadata: {\n        name: params.tlsSecretName,\n        namespace: namespace,\n      },\n\n      spec: {\n        secretName: params.tlsSecretName,\n        issuerRef: {\n          name: params.issuer,\n        },\n        commonName: params.fqdn,\n        dnsNames: [\n          params.fqdn,\n        ],\n        acme: {\n          config: [\n            {\n              http01: {\n                ingress: \"grafana\",\n              },\n              domains: [\n                params.fqdn,\n              ],\n            },\n          ],\n        },\n      },\n    },  // certificate\n\n    grafanaIngress:: {\n      apiVersion: \"extensions/v1beta1\",\n      kind: \"Ingress\",\n      metadata: {\n        name: \"grafana\",\n        namespace: namespace,\n        annotations: {\n          \"kubernetes.io/ingress.global-static-ip-name\": \"devstats\",\n          \"kubernetes.io/tls-acme\": \"true\",\n          // TODO(jlewi): We should automatically redirect users\n          // to the https site. We could do this by using a custom default\n          // backend.\n        },\n      },\n      spec: {\n        rules: [\n          {\n            host: params.fqdn,\n            http: {\n              paths: [\n                {\n                  backend: {\n                    serviceName: \"grafana\",\n                    servicePort: 3000,\n                  },\n                  path: \"/*\",\n                },\n              ],\n            },\n          },\n        ],\n        tls: [\n          {\n            hosts: [\n              params.fqdn,\n            ],\n            secretName: params.tlsSecretName,\n          },\n        ],\n      },\n    },  // ingress\n\n    grafanaService:: {\n      apiVersion: \"v1\",\n      kind: \"Service\",\n      metadata: {\n        name: \"grafana\",\n        namespace: namespace,\n      },\n      spec: {\n        ports: [\n          {\n            name: \"http\",\n            port: 3000,\n            protocol: \"TCP\",\n          },\n        ],\n        selector: {\n          app: \"grafana\",\n        },\n        type: \"NodePort\",\n      },\n    },\n\n    grafanaDeploy:: {\n      apiVersion: \"extensions/v1beta1\",\n      kind: \"Deployment\",\n      metadata: {\n        name: \"grafana\",\n        namespace: namespace,\n      },\n      spec: {\n        replicas: 1,\n        template: {\n          metadata: {\n            labels: {\n              app: \"grafana\",\n            },\n          },\n          spec: {\n            containers: [\n              {\n                env: [\n                  // TODO(jlewi): Grafana allows data sources to be managed from\n                  // YAML files; we should do that so it doesn't have to be configured\n                  // via UI. http://docs.grafana.org/administration/provisioning/#datasources\n\n                  // Grafana allows all values in the .ini file to be\n                  // overwritten by environment variables.\n                  // see http://docs.grafana.org/administration/provisioning/\n                  //\n                  // Override the location used for data so we can use a location\n                  // that corresponds to a PD.\n                  {\n                    name: \"GF_PATHS_DATA\",\n                    value: \"/mount/data/grafana\",\n                  },\n\n                  // Override the location used for provisioning so we\n                  // can provide the sources via a configmap.\n                  // See http://docs.grafana.org/administration/provisioning/#dashboards\n                  {\n                    name: \"GF_PATHS_PROVISIONING\",\n                    // Should be a directory containing providers.yaml\n                    value: configRepoRoot + \"/grafana/provisioning\",\n                  },\n\n                  // Override the admin password\n                  {\n                    name: \"GF_SECURITY_ADMIN_PASSWORD\",\n                    valueFrom: {\n                      secretKeyRef: {\n                        name: \"grafana\",\n                        key: \"admin_password\",\n                      },\n                    },\n                  },\n\n                  // Allow anyonmous access\n                  {\n                    name: \"GF_AUTH_ANONYMOUS_ENABLED\",\n                    value: \"true\",\n                  },\n                ],\n                image: \"grafana/grafana\",\n                imagePullPolicy: \"IfNotPresent\",\n                name: \"grafana\",\n                ports: [\n                  {\n                    containerPort: 3000,\n                  },\n                ],\n                volumeMounts: volumeMounts,\n              },  // grafana\n            ],  // containers\n            volumes: volumes,\n          },\n        },\n      },\n    },  // grafanaDeploy\n\n    grafanaServiceAccount: {\n      apiVersion: \"v1\",\n      kind: \"ServiceAccount\",\n      metadata: {\n        name: \"grafana\",\n        namespace: namespace,\n      },\n    },\n  },  // parts\n}\n"
  },
  {
    "path": "devstats/ks-app/components/devstats.jsonnet",
    "content": "local env = std.extVar(\"__ksonnet/environments\");\nlocal params = std.extVar(\"__ksonnet/params\").components.devstats;\nlocal k = import \"k.libsonnet\";\nlocal devstatsLib = import \"devstats-parts.libsonnet\";\nstd.prune(k.core.v1.list.new(devstatsLib.all(params, env)))\n"
  },
  {
    "path": "devstats/ks-app/components/params.libsonnet",
    "content": "{\n  global: {},\n  components: {\n    // Component-level parameters, defined initially from 'ks prototype use ...'\n    // Each object below should correspond to a component in the components/ directory\n    backfill: {\n      end_day: '2019-05-12',\n      start_day: '2018-01-01',\n    },\n    devstats: {\n      fqdn: 'devstats.kubeflow.org',\n      issuer: 'letsencrypt-prod',\n      tlsSecretName: 'grafana-tls',\n    },\n    \"cert-manager\": {\n      acmeEmail: 'jlewi@google.com',\n      acmeUrl: 'https://acme-v01.api.letsencrypt.org/directory',\n      name: 'cert-manager',\n      namespace: 'null',\n    },\n  },\n}"
  },
  {
    "path": "devstats/ks-app/components/syncronjob.jsonnet",
    "content": "local env = std.extVar(\"__ksonnet/environments\");\nlocal params = std.extVar(\"__ksonnet/params\").components[\"synccronjob\"];\nlocal k = import \"k.libsonnet\";\nlocal devstatsLib = import \"devstats-parts.libsonnet\";\n\nstd.prune(k.core.v1.list.new(devstatsLib.syncCronJob(params, env)))\n"
  },
  {
    "path": "devstats/ks-app/environments/base.libsonnet",
    "content": "local components = std.extVar(\"__ksonnet/components\");\ncomponents + {\n  // Insert user-specified overrides here.\n}\n"
  },
  {
    "path": "devstats/ks-app/environments/devstats2/globals.libsonnet",
    "content": "{\n}"
  },
  {
    "path": "devstats/ks-app/environments/devstats2/main.jsonnet",
    "content": "local base = import \"base.libsonnet\";\n// uncomment if you reference ksonnet-lib\n// local k = import \"k.libsonnet\";\n// local deployment = k.apps.v1beta2.deployment;\n\nbase + {\n  // Insert user-specified overrides here. For example if a component is named \\\"nginx-deployment\\\", you might have something like:\\n\")\n  // \"nginx-deployment\"+: deployment.mixin.metadata.withLabels({foo: \"bar\"})\n}\n"
  },
  {
    "path": "devstats/ks-app/environments/devstats2/params.libsonnet",
    "content": "local params = std.extVar(\"__ksonnet/params\");\nlocal globals = import \"globals.libsonnet\";\nlocal envParams = params + {\n  components +: {\n    // Insert component parameter overrides here. Ex:\n    // guestbook +: {\n    //   name: \"guestbook-dev\",\n    //   replicas: params.global.replicas,\n    // },\n  },\n};\n\n{\n  components: {\n    [x]: envParams.components[x] + globals, for x in std.objectFields(envParams.components)\n  },\n}\n"
  },
  {
    "path": "devstats/ks-app/lib/ksonnet-lib/v1.11.6/k.libsonnet",
    "content": "local k8s = import 'k8s.libsonnet';\nlocal fn = {\n  mapContainers(f):: {\n    local podContainers = super.spec.template.spec.containers,\n    spec+: {\n      template+: {\n        spec+: {\n          containers: std.map(f, podContainers),\n        },\n      },\n    },\n  },\n  mapContainersWithName(names, f)::\n    local nameSet = if std.type(names) == 'array' then std.set(names) else std.set([names]);\n    local inNameSet(name) = std.length(std.setInter(nameSet, std.set([name]))) > 0;\n\n    self.mapContainers(function(c) if std.objectHas(c, 'name') && inNameSet(c.name) then f(c) else c),\n};\n\nk8s + {\n  apps:: k8s.apps + {\n    v1:: k8s.apps.v1 + {\n      daemonSet:: k8s.apps.v1.daemonSet + {\n        mapContainers(f):: fn.mapContainers(f),\n        mapContainersWithName(names, f):: fn.mapContainersWithName(names, f),\n      },\n      deployment:: k8s.apps.v1.deployment + {\n        mapContainers(f):: fn.mapContainers(f),\n        mapContainersWithName(names, f):: fn.mapContainersWithName(names, f),\n      },\n      replicaSet:: k8s.apps.v1.replicaSet + {\n        mapContainers(f):: fn.mapContainers(f),\n        mapContainersWithName(names, f):: fn.mapContainersWithName(names, f),\n      },\n      statefulSet:: k8s.apps.v1.statefulSet + {\n        mapContainers(f):: fn.mapContainers(f),\n        mapContainersWithName(names, f):: fn.mapContainersWithName(names, f),\n      },\n    },\n    v1beta1:: k8s.apps.v1beta1 + {\n      deployment:: k8s.apps.v1beta1.deployment + {\n        mapContainers(f):: fn.mapContainers(f),\n        mapContainersWithName(names, f):: fn.mapContainersWithName(names, f),\n      },\n      statefulSet:: k8s.apps.v1beta1.statefulSet + {\n        mapContainers(f):: fn.mapContainers(f),\n        mapContainersWithName(names, f):: fn.mapContainersWithName(names, f),\n      },\n    },\n    v1beta2:: k8s.apps.v1beta2 + {\n      daemonSet:: k8s.apps.v1beta2.daemonSet + {\n        mapContainers(f):: fn.mapContainers(f),\n        mapContainersWithName(names, f):: fn.mapContainersWithName(names, f),\n      },\n      deployment:: k8s.apps.v1beta2.deployment + {\n        mapContainers(f):: fn.mapContainers(f),\n        mapContainersWithName(names, f):: fn.mapContainersWithName(names, f),\n      },\n      replicaSet:: k8s.apps.v1beta2.replicaSet + {\n        mapContainers(f):: fn.mapContainers(f),\n        mapContainersWithName(names, f):: fn.mapContainersWithName(names, f),\n      },\n      statefulSet:: k8s.apps.v1beta2.statefulSet + {\n        mapContainers(f):: fn.mapContainers(f),\n        mapContainersWithName(names, f):: fn.mapContainersWithName(names, f),\n      },\n    },\n  },\n  batch:: k8s.batch + {\n    v1:: k8s.batch.v1 + {\n      job:: k8s.batch.v1.job + {\n        mapContainers(f):: fn.mapContainers(f),\n        mapContainersWithName(names, f):: fn.mapContainersWithName(names, f),\n      },\n    },\n    v1beta1:: k8s.batch.v1beta1 + {\n      cronJob:: k8s.batch.v1beta1.cronJob + {\n        mapContainers(f):: fn.mapContainers(f),\n        mapContainersWithName(names, f):: fn.mapContainersWithName(names, f),\n      },\n    },\n    v2alpha1:: k8s.batch.v2alpha1 + {\n      cronJob:: k8s.batch.v2alpha1.cronJob + {\n        mapContainers(f):: fn.mapContainers(f),\n        mapContainersWithName(names, f):: fn.mapContainersWithName(names, f),\n      },\n    },\n  },\n  core:: k8s.core + {\n    v1:: k8s.core.v1 + {\n      list:: {\n        new(items):: {\n          apiVersion: 'v1',\n        } + {\n          kind: 'List',\n        } + self.items(items),\n        items(items):: if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n      },\n      pod:: k8s.core.v1.pod + {\n        mapContainers(f):: fn.mapContainers(f),\n        mapContainersWithName(names, f):: fn.mapContainersWithName(names, f),\n      },\n      podTemplate:: k8s.core.v1.podTemplate + {\n        mapContainers(f):: fn.mapContainers(f),\n        mapContainersWithName(names, f):: fn.mapContainersWithName(names, f),\n      },\n      replicationController:: k8s.core.v1.replicationController + {\n        mapContainers(f):: fn.mapContainers(f),\n        mapContainersWithName(names, f):: fn.mapContainersWithName(names, f),\n      },\n    },\n  },\n  extensions:: k8s.extensions + {\n    v1beta1:: k8s.extensions.v1beta1 + {\n      daemonSet:: k8s.extensions.v1beta1.daemonSet + {\n        mapContainers(f):: fn.mapContainers(f),\n        mapContainersWithName(names, f):: fn.mapContainersWithName(names, f),\n      },\n      deployment:: k8s.extensions.v1beta1.deployment + {\n        mapContainers(f):: fn.mapContainers(f),\n        mapContainersWithName(names, f):: fn.mapContainersWithName(names, f),\n      },\n      replicaSet:: k8s.extensions.v1beta1.replicaSet + {\n        mapContainers(f):: fn.mapContainers(f),\n        mapContainersWithName(names, f):: fn.mapContainersWithName(names, f),\n      },\n    },\n  },\n}"
  },
  {
    "path": "devstats/ks-app/lib/ksonnet-lib/v1.11.6/k8s.libsonnet",
    "content": "{\n  __ksonnet: {\n    checksum: 'd210684fc2c30056dd2db4ce1dec8398b69998354d9f47e698c4db264c1621cc',\n    kubernetesVersion: '1.11.6',\n  },\n  admissionregistration:: {\n    v1alpha1:: {\n      local apiVersion = { apiVersion: 'admissionregistration.k8s.io/v1alpha1' },\n      // InitializerConfiguration describes the configuration of initializers.\n      initializerConfiguration:: {\n        local kind = { kind: 'InitializerConfiguration' },\n        new():: apiVersion + kind,\n        // Initializers is a list of resources and their default initializers Order-sensitive. When merging multiple InitializerConfigurations, we sort the initializers from different InitializerConfigurations by the name of the InitializerConfigurations; the order of the initializers from the same InitializerConfiguration is preserved.\n        withInitializers(initializers):: self + if std.type(initializers) == 'array' then { initializers: initializers } else { initializers: [initializers] },\n        // Initializers is a list of resources and their default initializers Order-sensitive. When merging multiple InitializerConfigurations, we sort the initializers from different InitializerConfigurations by the name of the InitializerConfigurations; the order of the initializers from the same InitializerConfiguration is preserved.\n        withInitializersMixin(initializers):: self + if std.type(initializers) == 'array' then { initializers+: initializers } else { initializers+: [initializers] },\n        initializersType:: hidden.admissionregistration.v1alpha1.initializer,\n        mixin:: {\n          // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n    },\n    v1beta1:: {\n      local apiVersion = { apiVersion: 'admissionregistration.k8s.io/v1beta1' },\n      // MutatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and may change the object.\n      mutatingWebhookConfiguration:: {\n        local kind = { kind: 'MutatingWebhookConfiguration' },\n        new():: apiVersion + kind,\n        // Webhooks is a list of webhooks and the affected resources and operations.\n        withWebhooks(webhooks):: self + if std.type(webhooks) == 'array' then { webhooks: webhooks } else { webhooks: [webhooks] },\n        // Webhooks is a list of webhooks and the affected resources and operations.\n        withWebhooksMixin(webhooks):: self + if std.type(webhooks) == 'array' then { webhooks+: webhooks } else { webhooks+: [webhooks] },\n        webhooksType:: hidden.admissionregistration.v1beta1.webhook,\n        mixin:: {\n          // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // ValidatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and object without changing it.\n      validatingWebhookConfiguration:: {\n        local kind = { kind: 'ValidatingWebhookConfiguration' },\n        new():: apiVersion + kind,\n        // Webhooks is a list of webhooks and the affected resources and operations.\n        withWebhooks(webhooks):: self + if std.type(webhooks) == 'array' then { webhooks: webhooks } else { webhooks: [webhooks] },\n        // Webhooks is a list of webhooks and the affected resources and operations.\n        withWebhooksMixin(webhooks):: self + if std.type(webhooks) == 'array' then { webhooks+: webhooks } else { webhooks+: [webhooks] },\n        webhooksType:: hidden.admissionregistration.v1beta1.webhook,\n        mixin:: {\n          // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n    },\n  },\n  apiextensions:: {\n    v1beta1:: {\n      local apiVersion = { apiVersion: 'apiextensions.k8s.io/v1beta1' },\n      // CustomResourceDefinition represents a resource that should be exposed on the API server.  Its name MUST be in the format <.spec.name>.<.spec.group>.\n      customResourceDefinition:: {\n        local kind = { kind: 'CustomResourceDefinition' },\n        new():: apiVersion + kind,\n        mixin:: {\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec describes how the user wants the resources to appear\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // AdditionalPrinterColumns are additional columns shown e.g. in kubectl next to the name. Defaults to a created-at column.\n            withAdditionalPrinterColumns(additionalPrinterColumns):: self + if std.type(additionalPrinterColumns) == 'array' then __specMixin({ additionalPrinterColumns: additionalPrinterColumns }) else __specMixin({ additionalPrinterColumns: [additionalPrinterColumns] }),\n            // AdditionalPrinterColumns are additional columns shown e.g. in kubectl next to the name. Defaults to a created-at column.\n            withAdditionalPrinterColumnsMixin(additionalPrinterColumns):: self + if std.type(additionalPrinterColumns) == 'array' then __specMixin({ additionalPrinterColumns+: additionalPrinterColumns }) else __specMixin({ additionalPrinterColumns+: [additionalPrinterColumns] }),\n            additionalPrinterColumnsType:: hidden.apiextensions.v1beta1.customResourceColumnDefinition,\n            // Group is the group this resource belongs in\n            withGroup(group):: self + __specMixin({ group: group }),\n            // Names are the names used to describe this custom resource\n            names:: {\n              local __namesMixin(names) = __specMixin({ names+: names }),\n              mixinInstance(names):: __namesMixin(names),\n              // Categories is a list of grouped resources custom resources belong to (e.g. 'all')\n              withCategories(categories):: self + if std.type(categories) == 'array' then __namesMixin({ categories: categories }) else __namesMixin({ categories: [categories] }),\n              // Categories is a list of grouped resources custom resources belong to (e.g. 'all')\n              withCategoriesMixin(categories):: self + if std.type(categories) == 'array' then __namesMixin({ categories+: categories }) else __namesMixin({ categories+: [categories] }),\n              // Kind is the serialized kind of the resource.  It is normally CamelCase and singular.\n              withKind(kind):: self + __namesMixin({ kind: kind }),\n              // ListKind is the serialized kind of the list for this resource.  Defaults to <kind>List.\n              withListKind(listKind):: self + __namesMixin({ listKind: listKind }),\n              // Plural is the plural name of the resource to serve.  It must match the name of the CustomResourceDefinition-registration too: plural.group and it must be all lowercase.\n              withPlural(plural):: self + __namesMixin({ plural: plural }),\n              // ShortNames are short names for the resource.  It must be all lowercase.\n              withShortNames(shortNames):: self + if std.type(shortNames) == 'array' then __namesMixin({ shortNames: shortNames }) else __namesMixin({ shortNames: [shortNames] }),\n              // ShortNames are short names for the resource.  It must be all lowercase.\n              withShortNamesMixin(shortNames):: self + if std.type(shortNames) == 'array' then __namesMixin({ shortNames+: shortNames }) else __namesMixin({ shortNames+: [shortNames] }),\n              // Singular is the singular name of the resource.  It must be all lowercase  Defaults to lowercased <kind>\n              withSingular(singular):: self + __namesMixin({ singular: singular }),\n            },\n            namesType:: hidden.apiextensions.v1beta1.customResourceDefinitionNames,\n            // Scope indicates whether this resource is cluster or namespace scoped.  Default is namespaced\n            withScope(scope):: self + __specMixin({ scope: scope }),\n            // Subresources describes the subresources for CustomResources\n            subresources:: {\n              local __subresourcesMixin(subresources) = __specMixin({ subresources+: subresources }),\n              mixinInstance(subresources):: __subresourcesMixin(subresources),\n              // Scale denotes the scale subresource for CustomResources\n              scale:: {\n                local __scaleMixin(scale) = __subresourcesMixin({ scale+: scale }),\n                mixinInstance(scale):: __scaleMixin(scale),\n                // LabelSelectorPath defines the JSON path inside of a CustomResource that corresponds to Scale.Status.Selector. Only JSON paths without the array notation are allowed. Must be a JSON Path under .status. Must be set to work with HPA. If there is no value under the given path in the CustomResource, the status label selector value in the /scale subresource will default to the empty string.\n                withLabelSelectorPath(labelSelectorPath):: self + __scaleMixin({ labelSelectorPath: labelSelectorPath }),\n                // SpecReplicasPath defines the JSON path inside of a CustomResource that corresponds to Scale.Spec.Replicas. Only JSON paths without the array notation are allowed. Must be a JSON Path under .spec. If there is no value under the given path in the CustomResource, the /scale subresource will return an error on GET.\n                withSpecReplicasPath(specReplicasPath):: self + __scaleMixin({ specReplicasPath: specReplicasPath }),\n                // StatusReplicasPath defines the JSON path inside of a CustomResource that corresponds to Scale.Status.Replicas. Only JSON paths without the array notation are allowed. Must be a JSON Path under .status. If there is no value under the given path in the CustomResource, the status replica value in the /scale subresource will default to 0.\n                withStatusReplicasPath(statusReplicasPath):: self + __scaleMixin({ statusReplicasPath: statusReplicasPath }),\n              },\n              scaleType:: hidden.apiextensions.v1beta1.customResourceSubresourceScale,\n            },\n            subresourcesType:: hidden.apiextensions.v1beta1.customResourceSubresources,\n            // Validation describes the validation methods for CustomResources\n            validation:: {\n              local __validationMixin(validation) = __specMixin({ validation+: validation }),\n              mixinInstance(validation):: __validationMixin(validation),\n              // OpenAPIV3Schema is the OpenAPI v3 schema to be validated against.\n              withOpenApiV3Schema(openApiV3Schema):: self + __validationMixin({ openAPIV3Schema: openApiV3Schema }),\n              // OpenAPIV3Schema is the OpenAPI v3 schema to be validated against.\n              withOpenApiV3SchemaMixin(openApiV3Schema):: self + __validationMixin({ openAPIV3Schema+: openApiV3Schema }),\n              openAPIV3SchemaType:: hidden.apiextensions.v1beta1.jsonSchemaProps,\n            },\n            validationType:: hidden.apiextensions.v1beta1.customResourceValidation,\n            // Version is the version this resource belongs in Should be always first item in Versions field if provided. Optional, but at least one of Version or Versions must be set. Deprecated: Please use `Versions`.\n            withVersion(version):: self + __specMixin({ version: version }),\n            // Versions is the list of all supported versions for this resource. If Version field is provided, this field is optional. Validation: All versions must use the same validation schema for now. i.e., top level Validation field is applied to all of these versions. Order: The version name will be used to compute the order. If the version string is \"kube-like\", it will sort above non \"kube-like\" version strings, which are ordered lexicographically. \"Kube-like\" versions start with a \"v\", then are followed by a number (the major version), then optionally the string \"alpha\" or \"beta\" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.\n            withVersions(versions):: self + if std.type(versions) == 'array' then __specMixin({ versions: versions }) else __specMixin({ versions: [versions] }),\n            // Versions is the list of all supported versions for this resource. If Version field is provided, this field is optional. Validation: All versions must use the same validation schema for now. i.e., top level Validation field is applied to all of these versions. Order: The version name will be used to compute the order. If the version string is \"kube-like\", it will sort above non \"kube-like\" version strings, which are ordered lexicographically. \"Kube-like\" versions start with a \"v\", then are followed by a number (the major version), then optionally the string \"alpha\" or \"beta\" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.\n            withVersionsMixin(versions):: self + if std.type(versions) == 'array' then __specMixin({ versions+: versions }) else __specMixin({ versions+: [versions] }),\n            versionsType:: hidden.apiextensions.v1beta1.customResourceDefinitionVersion,\n          },\n          specType:: hidden.apiextensions.v1beta1.customResourceDefinitionSpec,\n        },\n      },\n    },\n  },\n  apiregistration:: {\n    v1:: {\n      local apiVersion = { apiVersion: 'apiregistration.k8s.io/v1' },\n      // APIService represents a server for a particular GroupVersion. Name must be \"version.group\".\n      apiService:: {\n        local kind = { kind: 'APIService' },\n        new():: apiVersion + kind,\n        mixin:: {\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec contains information for locating and communicating with a server\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate.\n            withCaBundle(caBundle):: self + __specMixin({ caBundle: caBundle }),\n            // Group is the API group name this server hosts\n            withGroup(group):: self + __specMixin({ group: group }),\n            // GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object.  (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s\n            withGroupPriorityMinimum(groupPriorityMinimum):: self + __specMixin({ groupPriorityMinimum: groupPriorityMinimum }),\n            // InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged.  You should use the CABundle instead.\n            withInsecureSkipTlsVerify(insecureSkipTlsVerify):: self + __specMixin({ insecureSkipTLSVerify: insecureSkipTlsVerify }),\n            // Service is a reference to the service for this API server.  It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled.\n            service:: {\n              local __serviceMixin(service) = __specMixin({ service+: service }),\n              mixinInstance(service):: __serviceMixin(service),\n              // Name is the name of the service\n              withName(name):: self + __serviceMixin({ name: name }),\n              // Namespace is the namespace of the service\n              withNamespace(namespace):: self + __serviceMixin({ namespace: namespace }),\n            },\n            serviceType:: hidden.apiregistration.v1.serviceReference,\n            // Version is the API version this server hosts.  For example, \"v1\"\n            withVersion(version):: self + __specMixin({ version: version }),\n            // VersionPriority controls the ordering of this API version inside of its group.  Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). Since it's inside of a group, the number can be small, probably in the 10s. In case of equal version priorities, the version string will be used to compute the order inside a group. If the version string is \"kube-like\", it will sort above non \"kube-like\" version strings, which are ordered lexicographically. \"Kube-like\" versions start with a \"v\", then are followed by a number (the major version), then optionally the string \"alpha\" or \"beta\" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.\n            withVersionPriority(versionPriority):: self + __specMixin({ versionPriority: versionPriority }),\n          },\n          specType:: hidden.apiregistration.v1.apiServiceSpec,\n        },\n      },\n    },\n    v1beta1:: {\n      local apiVersion = { apiVersion: 'apiregistration.k8s.io/v1beta1' },\n      // APIService represents a server for a particular GroupVersion. Name must be \"version.group\".\n      apiService:: {\n        local kind = { kind: 'APIService' },\n        new():: apiVersion + kind,\n        mixin:: {\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec contains information for locating and communicating with a server\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate.\n            withCaBundle(caBundle):: self + __specMixin({ caBundle: caBundle }),\n            // Group is the API group name this server hosts\n            withGroup(group):: self + __specMixin({ group: group }),\n            // GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object.  (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s\n            withGroupPriorityMinimum(groupPriorityMinimum):: self + __specMixin({ groupPriorityMinimum: groupPriorityMinimum }),\n            // InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged.  You should use the CABundle instead.\n            withInsecureSkipTlsVerify(insecureSkipTlsVerify):: self + __specMixin({ insecureSkipTLSVerify: insecureSkipTlsVerify }),\n            // Service is a reference to the service for this API server.  It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled.\n            service:: {\n              local __serviceMixin(service) = __specMixin({ service+: service }),\n              mixinInstance(service):: __serviceMixin(service),\n              // Name is the name of the service\n              withName(name):: self + __serviceMixin({ name: name }),\n              // Namespace is the namespace of the service\n              withNamespace(namespace):: self + __serviceMixin({ namespace: namespace }),\n            },\n            serviceType:: hidden.apiregistration.v1beta1.serviceReference,\n            // Version is the API version this server hosts.  For example, \"v1\"\n            withVersion(version):: self + __specMixin({ version: version }),\n            // VersionPriority controls the ordering of this API version inside of its group.  Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). Since it's inside of a group, the number can be small, probably in the 10s. In case of equal version priorities, the version string will be used to compute the order inside a group. If the version string is \"kube-like\", it will sort above non \"kube-like\" version strings, which are ordered lexicographically. \"Kube-like\" versions start with a \"v\", then are followed by a number (the major version), then optionally the string \"alpha\" or \"beta\" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.\n            withVersionPriority(versionPriority):: self + __specMixin({ versionPriority: versionPriority }),\n          },\n          specType:: hidden.apiregistration.v1beta1.apiServiceSpec,\n        },\n      },\n    },\n  },\n  apps:: {\n    v1:: {\n      local apiVersion = { apiVersion: 'apps/v1' },\n      // ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.\n      controllerRevision:: {\n        local kind = { kind: 'ControllerRevision' },\n        new():: apiVersion + kind,\n        // Revision indicates the revision of the state represented by Data.\n        withRevision(revision):: self + { revision: revision },\n        mixin:: {\n          // Data is the serialized representation of the state.\n          data:: {\n            local __dataMixin(data) = { data+: data },\n            mixinInstance(data):: __dataMixin(data),\n            // Raw is the underlying serialization of this object.\n            withRaw(raw):: self + __dataMixin({ Raw: raw }),\n          },\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // DaemonSet represents the configuration of a daemon set.\n      daemonSet:: {\n        local kind = { kind: 'DaemonSet' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).\n            withMinReadySeconds(minReadySeconds):: self + __specMixin({ minReadySeconds: minReadySeconds }),\n            // The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.\n            withRevisionHistoryLimit(revisionHistoryLimit):: self + __specMixin({ revisionHistoryLimit: revisionHistoryLimit }),\n            // A label query over pods that are managed by the daemon set. Must match in order to be controlled. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\n            template:: {\n              local __templateMixin(template) = __specMixin({ template+: template }),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n            // An update strategy to replace existing DaemonSet pods with new pods.\n            updateStrategy:: {\n              local __updateStrategyMixin(updateStrategy) = __specMixin({ updateStrategy+: updateStrategy }),\n              mixinInstance(updateStrategy):: __updateStrategyMixin(updateStrategy),\n              // Rolling update config params. Present only if type = \"RollingUpdate\".\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __updateStrategyMixin({ rollingUpdate+: rollingUpdate }),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.\n                withMaxUnavailable(maxUnavailable):: self + __rollingUpdateMixin({ maxUnavailable: maxUnavailable }),\n              },\n              rollingUpdateType:: hidden.apps.v1.rollingUpdateDaemonSet,\n              // Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is RollingUpdate.\n              withType(type):: self + __updateStrategyMixin({ type: type }),\n            },\n            updateStrategyType:: hidden.apps.v1.daemonSetUpdateStrategy,\n          },\n          specType:: hidden.apps.v1.daemonSetSpec,\n        },\n      },\n      // Deployment enables declarative updates for Pods and ReplicaSets.\n      deployment:: {\n        local kind = { kind: 'Deployment' },\n        new(name='', replicas=1, containers='', podLabels={ app: 'name' }):: apiVersion + kind + self.mixin.metadata.withName(name) + self.mixin.spec.withReplicas(replicas) + self.mixin.spec.template.metadata.withLabels(podLabels) + self.mixin.spec.template.spec.withContainers(containers),\n        mixin:: {\n          // Standard object metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Specification of the desired behavior of the Deployment.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n            withMinReadySeconds(minReadySeconds):: self + __specMixin({ minReadySeconds: minReadySeconds }),\n            // Indicates that the deployment is paused.\n            withPaused(paused):: self + __specMixin({ paused: paused }),\n            // The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.\n            withProgressDeadlineSeconds(progressDeadlineSeconds):: self + __specMixin({ progressDeadlineSeconds: progressDeadlineSeconds }),\n            // Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.\n            withReplicas(replicas):: self + __specMixin({ replicas: replicas }),\n            // The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.\n            withRevisionHistoryLimit(revisionHistoryLimit):: self + __specMixin({ revisionHistoryLimit: revisionHistoryLimit }),\n            // Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. It must match the pod template's labels.\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // The deployment strategy to use to replace existing pods with new ones.\n            strategy:: {\n              local __strategyMixin(strategy) = __specMixin({ strategy+: strategy }),\n              mixinInstance(strategy):: __strategyMixin(strategy),\n              // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __strategyMixin({ rollingUpdate+: rollingUpdate }),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.\n                withMaxSurge(maxSurge):: self + __rollingUpdateMixin({ maxSurge: maxSurge }),\n                // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n                withMaxUnavailable(maxUnavailable):: self + __rollingUpdateMixin({ maxUnavailable: maxUnavailable }),\n              },\n              rollingUpdateType:: hidden.apps.v1.rollingUpdateDeployment,\n              // Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.\n              withType(type):: self + __strategyMixin({ type: type }),\n            },\n            strategyType:: hidden.apps.v1.deploymentStrategy,\n            // Template describes the pods that will be created.\n            template:: {\n              local __templateMixin(template) = __specMixin({ template+: template }),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n          specType:: hidden.apps.v1.deploymentSpec,\n        },\n      },\n      // ReplicaSet ensures that a specified number of pod replicas are running at any given time.\n      replicaSet:: {\n        local kind = { kind: 'ReplicaSet' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n            withMinReadySeconds(minReadySeconds):: self + __specMixin({ minReadySeconds: minReadySeconds }),\n            // Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller\n            withReplicas(replicas):: self + __specMixin({ replicas: replicas }),\n            // Selector is a label query over pods that should match the replica count. Label keys and values that must match in order to be controlled by this replica set. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\n            template:: {\n              local __templateMixin(template) = __specMixin({ template+: template }),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n          specType:: hidden.apps.v1.replicaSetSpec,\n        },\n      },\n      // StatefulSet represents a set of pods with consistent identities. Identities are defined as:\n      // - Network: A single stable DNS and hostname.\n      // - Storage: As many VolumeClaims as requested.\n      // The StatefulSet guarantees that a given network identity will always map to the same storage identity.\n      statefulSet:: {\n        local kind = { kind: 'StatefulSet' },\n        new(name='', replicas=1, containers='', volumeClaims='', podLabels={ app: 'name' }):: apiVersion + kind + self.mixin.metadata.withName(name) + self.mixin.spec.withReplicas(replicas).withVolumeClaimTemplates(volumeClaims) + self.mixin.spec.template.metadata.withLabels(podLabels) + self.mixin.spec.template.spec.withContainers(containers),\n        mixin:: {\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the desired identities of pods in this set.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.\n            withPodManagementPolicy(podManagementPolicy):: self + __specMixin({ podManagementPolicy: podManagementPolicy }),\n            // replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.\n            withReplicas(replicas):: self + __specMixin({ replicas: replicas }),\n            // revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.\n            withRevisionHistoryLimit(revisionHistoryLimit):: self + __specMixin({ revisionHistoryLimit: revisionHistoryLimit }),\n            // selector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.\n            withServiceName(serviceName):: self + __specMixin({ serviceName: serviceName }),\n            // template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.\n            template:: {\n              local __templateMixin(template) = __specMixin({ template+: template }),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n            // updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.\n            updateStrategy:: {\n              local __updateStrategyMixin(updateStrategy) = __specMixin({ updateStrategy+: updateStrategy }),\n              mixinInstance(updateStrategy):: __updateStrategyMixin(updateStrategy),\n              // RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __updateStrategyMixin({ rollingUpdate+: rollingUpdate }),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.\n                withPartition(partition):: self + __rollingUpdateMixin({ partition: partition }),\n              },\n              rollingUpdateType:: hidden.apps.v1.rollingUpdateStatefulSetStrategy,\n              // Type indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.\n              withType(type):: self + __updateStrategyMixin({ type: type }),\n            },\n            updateStrategyType:: hidden.apps.v1.statefulSetUpdateStrategy,\n            // volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.\n            withVolumeClaimTemplates(volumeClaimTemplates):: self + if std.type(volumeClaimTemplates) == 'array' then __specMixin({ volumeClaimTemplates: volumeClaimTemplates }) else __specMixin({ volumeClaimTemplates: [volumeClaimTemplates] }),\n            // volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.\n            withVolumeClaimTemplatesMixin(volumeClaimTemplates):: self + if std.type(volumeClaimTemplates) == 'array' then __specMixin({ volumeClaimTemplates+: volumeClaimTemplates }) else __specMixin({ volumeClaimTemplates+: [volumeClaimTemplates] }),\n            volumeClaimTemplatesType:: hidden.core.v1.persistentVolumeClaim,\n          },\n          specType:: hidden.apps.v1.statefulSetSpec,\n        },\n      },\n    },\n    v1beta1:: {\n      local apiVersion = { apiVersion: 'apps/v1beta1' },\n      // DEPRECATED - This group version of ControllerRevision is deprecated by apps/v1beta2/ControllerRevision. See the release notes for more information. ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.\n      controllerRevision:: {\n        local kind = { kind: 'ControllerRevision' },\n        new():: apiVersion + kind,\n        // Revision indicates the revision of the state represented by Data.\n        withRevision(revision):: self + { revision: revision },\n        mixin:: {\n          // Data is the serialized representation of the state.\n          data:: {\n            local __dataMixin(data) = { data+: data },\n            mixinInstance(data):: __dataMixin(data),\n            // Raw is the underlying serialization of this object.\n            withRaw(raw):: self + __dataMixin({ Raw: raw }),\n          },\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // DEPRECATED - This group version of Deployment is deprecated by apps/v1beta2/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.\n      deployment:: {\n        local kind = { kind: 'Deployment' },\n        new(name='', replicas=1, containers='', podLabels={ app: 'name' }):: apiVersion + kind + self.mixin.metadata.withName(name) + self.mixin.spec.withReplicas(replicas) + self.mixin.spec.template.metadata.withLabels(podLabels) + self.mixin.spec.template.spec.withContainers(containers),\n        mixin:: {\n          // Standard object metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Specification of the desired behavior of the Deployment.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n            withMinReadySeconds(minReadySeconds):: self + __specMixin({ minReadySeconds: minReadySeconds }),\n            // Indicates that the deployment is paused.\n            withPaused(paused):: self + __specMixin({ paused: paused }),\n            // The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.\n            withProgressDeadlineSeconds(progressDeadlineSeconds):: self + __specMixin({ progressDeadlineSeconds: progressDeadlineSeconds }),\n            // Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.\n            withReplicas(replicas):: self + __specMixin({ replicas: replicas }),\n            // The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 2.\n            withRevisionHistoryLimit(revisionHistoryLimit):: self + __specMixin({ revisionHistoryLimit: revisionHistoryLimit }),\n            // DEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done.\n            rollbackTo:: {\n              local __rollbackToMixin(rollbackTo) = __specMixin({ rollbackTo+: rollbackTo }),\n              mixinInstance(rollbackTo):: __rollbackToMixin(rollbackTo),\n              // The revision to rollback to. If set to 0, rollback to the last revision.\n              withRevision(revision):: self + __rollbackToMixin({ revision: revision }),\n            },\n            rollbackToType:: hidden.apps.v1beta1.rollbackConfig,\n            // Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // The deployment strategy to use to replace existing pods with new ones.\n            strategy:: {\n              local __strategyMixin(strategy) = __specMixin({ strategy+: strategy }),\n              mixinInstance(strategy):: __strategyMixin(strategy),\n              // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __strategyMixin({ rollingUpdate+: rollingUpdate }),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\n                withMaxSurge(maxSurge):: self + __rollingUpdateMixin({ maxSurge: maxSurge }),\n                // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n                withMaxUnavailable(maxUnavailable):: self + __rollingUpdateMixin({ maxUnavailable: maxUnavailable }),\n              },\n              rollingUpdateType:: hidden.apps.v1beta1.rollingUpdateDeployment,\n              // Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.\n              withType(type):: self + __strategyMixin({ type: type }),\n            },\n            strategyType:: hidden.apps.v1beta1.deploymentStrategy,\n            // Template describes the pods that will be created.\n            template:: {\n              local __templateMixin(template) = __specMixin({ template+: template }),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n          specType:: hidden.apps.v1beta1.deploymentSpec,\n        },\n      },\n      // DEPRECATED. DeploymentRollback stores the information required to rollback a deployment.\n      deploymentRollback:: {\n        local kind = { kind: 'DeploymentRollback' },\n        new(name=''):: apiVersion + kind + self.withName(name),\n        // Required: This must match the Name of a deployment.\n        withName(name):: self + { name: name },\n        // The annotations to be updated to a deployment\n        withUpdatedAnnotations(updatedAnnotations):: self + { updatedAnnotations: updatedAnnotations },\n        // The annotations to be updated to a deployment\n        withUpdatedAnnotationsMixin(updatedAnnotations):: self + { updatedAnnotations+: updatedAnnotations },\n        mixin:: {\n          // The config of this deployment rollback.\n          rollbackTo:: {\n            local __rollbackToMixin(rollbackTo) = { rollbackTo+: rollbackTo },\n            mixinInstance(rollbackTo):: __rollbackToMixin(rollbackTo),\n            // The revision to rollback to. If set to 0, rollback to the last revision.\n            withRevision(revision):: self + __rollbackToMixin({ revision: revision }),\n          },\n          rollbackToType:: hidden.apps.v1beta1.rollbackConfig,\n        },\n      },\n      // Scale represents a scaling request for a resource.\n      scale:: {\n        local kind = { kind: 'Scale' },\n        new(replicas=1):: apiVersion + kind + self.mixin.spec.withReplicas(replicas),\n        mixin:: {\n          // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // desired number of instances for the scaled object.\n            withReplicas(replicas):: self + __specMixin({ replicas: replicas }),\n          },\n          specType:: hidden.apps.v1beta1.scaleSpec,\n        },\n      },\n      // DEPRECATED - This group version of StatefulSet is deprecated by apps/v1beta2/StatefulSet. See the release notes for more information. StatefulSet represents a set of pods with consistent identities. Identities are defined as:\n      // - Network: A single stable DNS and hostname.\n      // - Storage: As many VolumeClaims as requested.\n      // The StatefulSet guarantees that a given network identity will always map to the same storage identity.\n      statefulSet:: {\n        local kind = { kind: 'StatefulSet' },\n        new(name='', replicas=1, containers='', volumeClaims='', podLabels={ app: 'name' }):: apiVersion + kind + self.mixin.metadata.withName(name) + self.mixin.spec.withReplicas(replicas).withVolumeClaimTemplates(volumeClaims) + self.mixin.spec.template.metadata.withLabels(podLabels) + self.mixin.spec.template.spec.withContainers(containers),\n        mixin:: {\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the desired identities of pods in this set.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.\n            withPodManagementPolicy(podManagementPolicy):: self + __specMixin({ podManagementPolicy: podManagementPolicy }),\n            // replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.\n            withReplicas(replicas):: self + __specMixin({ replicas: replicas }),\n            // revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.\n            withRevisionHistoryLimit(revisionHistoryLimit):: self + __specMixin({ revisionHistoryLimit: revisionHistoryLimit }),\n            // selector is a label query over pods that should match the replica count. If empty, defaulted to labels on the pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.\n            withServiceName(serviceName):: self + __specMixin({ serviceName: serviceName }),\n            // template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.\n            template:: {\n              local __templateMixin(template) = __specMixin({ template+: template }),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n            // updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.\n            updateStrategy:: {\n              local __updateStrategyMixin(updateStrategy) = __specMixin({ updateStrategy+: updateStrategy }),\n              mixinInstance(updateStrategy):: __updateStrategyMixin(updateStrategy),\n              // RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __updateStrategyMixin({ rollingUpdate+: rollingUpdate }),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // Partition indicates the ordinal at which the StatefulSet should be partitioned.\n                withPartition(partition):: self + __rollingUpdateMixin({ partition: partition }),\n              },\n              rollingUpdateType:: hidden.apps.v1beta1.rollingUpdateStatefulSetStrategy,\n              // Type indicates the type of the StatefulSetUpdateStrategy.\n              withType(type):: self + __updateStrategyMixin({ type: type }),\n            },\n            updateStrategyType:: hidden.apps.v1beta1.statefulSetUpdateStrategy,\n            // volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.\n            withVolumeClaimTemplates(volumeClaimTemplates):: self + if std.type(volumeClaimTemplates) == 'array' then __specMixin({ volumeClaimTemplates: volumeClaimTemplates }) else __specMixin({ volumeClaimTemplates: [volumeClaimTemplates] }),\n            // volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.\n            withVolumeClaimTemplatesMixin(volumeClaimTemplates):: self + if std.type(volumeClaimTemplates) == 'array' then __specMixin({ volumeClaimTemplates+: volumeClaimTemplates }) else __specMixin({ volumeClaimTemplates+: [volumeClaimTemplates] }),\n            volumeClaimTemplatesType:: hidden.core.v1.persistentVolumeClaim,\n          },\n          specType:: hidden.apps.v1beta1.statefulSetSpec,\n        },\n      },\n    },\n    v1beta2:: {\n      local apiVersion = { apiVersion: 'apps/v1beta2' },\n      // DEPRECATED - This group version of ControllerRevision is deprecated by apps/v1/ControllerRevision. See the release notes for more information. ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.\n      controllerRevision:: {\n        local kind = { kind: 'ControllerRevision' },\n        new():: apiVersion + kind,\n        // Revision indicates the revision of the state represented by Data.\n        withRevision(revision):: self + { revision: revision },\n        mixin:: {\n          // Data is the serialized representation of the state.\n          data:: {\n            local __dataMixin(data) = { data+: data },\n            mixinInstance(data):: __dataMixin(data),\n            // Raw is the underlying serialization of this object.\n            withRaw(raw):: self + __dataMixin({ Raw: raw }),\n          },\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // DEPRECATED - This group version of DaemonSet is deprecated by apps/v1/DaemonSet. See the release notes for more information. DaemonSet represents the configuration of a daemon set.\n      daemonSet:: {\n        local kind = { kind: 'DaemonSet' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).\n            withMinReadySeconds(minReadySeconds):: self + __specMixin({ minReadySeconds: minReadySeconds }),\n            // The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.\n            withRevisionHistoryLimit(revisionHistoryLimit):: self + __specMixin({ revisionHistoryLimit: revisionHistoryLimit }),\n            // A label query over pods that are managed by the daemon set. Must match in order to be controlled. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\n            template:: {\n              local __templateMixin(template) = __specMixin({ template+: template }),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n            // An update strategy to replace existing DaemonSet pods with new pods.\n            updateStrategy:: {\n              local __updateStrategyMixin(updateStrategy) = __specMixin({ updateStrategy+: updateStrategy }),\n              mixinInstance(updateStrategy):: __updateStrategyMixin(updateStrategy),\n              // Rolling update config params. Present only if type = \"RollingUpdate\".\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __updateStrategyMixin({ rollingUpdate+: rollingUpdate }),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.\n                withMaxUnavailable(maxUnavailable):: self + __rollingUpdateMixin({ maxUnavailable: maxUnavailable }),\n              },\n              rollingUpdateType:: hidden.apps.v1beta2.rollingUpdateDaemonSet,\n              // Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is RollingUpdate.\n              withType(type):: self + __updateStrategyMixin({ type: type }),\n            },\n            updateStrategyType:: hidden.apps.v1beta2.daemonSetUpdateStrategy,\n          },\n          specType:: hidden.apps.v1beta2.daemonSetSpec,\n        },\n      },\n      // DEPRECATED - This group version of Deployment is deprecated by apps/v1/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.\n      deployment:: {\n        local kind = { kind: 'Deployment' },\n        new(name='', replicas=1, containers='', podLabels={ app: 'name' }):: apiVersion + kind + self.mixin.metadata.withName(name) + self.mixin.spec.withReplicas(replicas) + self.mixin.spec.template.metadata.withLabels(podLabels) + self.mixin.spec.template.spec.withContainers(containers),\n        mixin:: {\n          // Standard object metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Specification of the desired behavior of the Deployment.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n            withMinReadySeconds(minReadySeconds):: self + __specMixin({ minReadySeconds: minReadySeconds }),\n            // Indicates that the deployment is paused.\n            withPaused(paused):: self + __specMixin({ paused: paused }),\n            // The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.\n            withProgressDeadlineSeconds(progressDeadlineSeconds):: self + __specMixin({ progressDeadlineSeconds: progressDeadlineSeconds }),\n            // Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.\n            withReplicas(replicas):: self + __specMixin({ replicas: replicas }),\n            // The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.\n            withRevisionHistoryLimit(revisionHistoryLimit):: self + __specMixin({ revisionHistoryLimit: revisionHistoryLimit }),\n            // Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. It must match the pod template's labels.\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // The deployment strategy to use to replace existing pods with new ones.\n            strategy:: {\n              local __strategyMixin(strategy) = __specMixin({ strategy+: strategy }),\n              mixinInstance(strategy):: __strategyMixin(strategy),\n              // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __strategyMixin({ rollingUpdate+: rollingUpdate }),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\n                withMaxSurge(maxSurge):: self + __rollingUpdateMixin({ maxSurge: maxSurge }),\n                // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n                withMaxUnavailable(maxUnavailable):: self + __rollingUpdateMixin({ maxUnavailable: maxUnavailable }),\n              },\n              rollingUpdateType:: hidden.apps.v1beta2.rollingUpdateDeployment,\n              // Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.\n              withType(type):: self + __strategyMixin({ type: type }),\n            },\n            strategyType:: hidden.apps.v1beta2.deploymentStrategy,\n            // Template describes the pods that will be created.\n            template:: {\n              local __templateMixin(template) = __specMixin({ template+: template }),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n          specType:: hidden.apps.v1beta2.deploymentSpec,\n        },\n      },\n      // DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.\n      replicaSet:: {\n        local kind = { kind: 'ReplicaSet' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n            withMinReadySeconds(minReadySeconds):: self + __specMixin({ minReadySeconds: minReadySeconds }),\n            // Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller\n            withReplicas(replicas):: self + __specMixin({ replicas: replicas }),\n            // Selector is a label query over pods that should match the replica count. Label keys and values that must match in order to be controlled by this replica set. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\n            template:: {\n              local __templateMixin(template) = __specMixin({ template+: template }),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n          specType:: hidden.apps.v1beta2.replicaSetSpec,\n        },\n      },\n      // Scale represents a scaling request for a resource.\n      scale:: {\n        local kind = { kind: 'Scale' },\n        new(replicas=1):: apiVersion + kind + self.mixin.spec.withReplicas(replicas),\n        mixin:: {\n          // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // desired number of instances for the scaled object.\n            withReplicas(replicas):: self + __specMixin({ replicas: replicas }),\n          },\n          specType:: hidden.apps.v1beta2.scaleSpec,\n        },\n      },\n      // DEPRECATED - This group version of StatefulSet is deprecated by apps/v1/StatefulSet. See the release notes for more information. StatefulSet represents a set of pods with consistent identities. Identities are defined as:\n      // - Network: A single stable DNS and hostname.\n      // - Storage: As many VolumeClaims as requested.\n      // The StatefulSet guarantees that a given network identity will always map to the same storage identity.\n      statefulSet:: {\n        local kind = { kind: 'StatefulSet' },\n        new(name='', replicas=1, containers='', volumeClaims='', podLabels={ app: 'name' }):: apiVersion + kind + self.mixin.metadata.withName(name) + self.mixin.spec.withReplicas(replicas).withVolumeClaimTemplates(volumeClaims) + self.mixin.spec.template.metadata.withLabels(podLabels) + self.mixin.spec.template.spec.withContainers(containers),\n        mixin:: {\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the desired identities of pods in this set.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.\n            withPodManagementPolicy(podManagementPolicy):: self + __specMixin({ podManagementPolicy: podManagementPolicy }),\n            // replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.\n            withReplicas(replicas):: self + __specMixin({ replicas: replicas }),\n            // revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.\n            withRevisionHistoryLimit(revisionHistoryLimit):: self + __specMixin({ revisionHistoryLimit: revisionHistoryLimit }),\n            // selector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.\n            withServiceName(serviceName):: self + __specMixin({ serviceName: serviceName }),\n            // template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.\n            template:: {\n              local __templateMixin(template) = __specMixin({ template+: template }),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n            // updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.\n            updateStrategy:: {\n              local __updateStrategyMixin(updateStrategy) = __specMixin({ updateStrategy+: updateStrategy }),\n              mixinInstance(updateStrategy):: __updateStrategyMixin(updateStrategy),\n              // RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __updateStrategyMixin({ rollingUpdate+: rollingUpdate }),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.\n                withPartition(partition):: self + __rollingUpdateMixin({ partition: partition }),\n              },\n              rollingUpdateType:: hidden.apps.v1beta2.rollingUpdateStatefulSetStrategy,\n              // Type indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.\n              withType(type):: self + __updateStrategyMixin({ type: type }),\n            },\n            updateStrategyType:: hidden.apps.v1beta2.statefulSetUpdateStrategy,\n            // volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.\n            withVolumeClaimTemplates(volumeClaimTemplates):: self + if std.type(volumeClaimTemplates) == 'array' then __specMixin({ volumeClaimTemplates: volumeClaimTemplates }) else __specMixin({ volumeClaimTemplates: [volumeClaimTemplates] }),\n            // volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.\n            withVolumeClaimTemplatesMixin(volumeClaimTemplates):: self + if std.type(volumeClaimTemplates) == 'array' then __specMixin({ volumeClaimTemplates+: volumeClaimTemplates }) else __specMixin({ volumeClaimTemplates+: [volumeClaimTemplates] }),\n            volumeClaimTemplatesType:: hidden.core.v1.persistentVolumeClaim,\n          },\n          specType:: hidden.apps.v1beta2.statefulSetSpec,\n        },\n      },\n    },\n  },\n  authentication:: {\n    v1:: {\n      local apiVersion = { apiVersion: 'authentication.k8s.io/v1' },\n      // TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver.\n      tokenReview:: {\n        local kind = { kind: 'TokenReview' },\n        new(token=''):: apiVersion + kind + self.mixin.spec.withToken(token),\n        mixin:: {\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec holds information about the request being evaluated\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Token is the opaque bearer token.\n            withToken(token):: self + __specMixin({ token: token }),\n          },\n          specType:: hidden.authentication.v1.tokenReviewSpec,\n        },\n      },\n    },\n    v1beta1:: {\n      local apiVersion = { apiVersion: 'authentication.k8s.io/v1beta1' },\n      // TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver.\n      tokenReview:: {\n        local kind = { kind: 'TokenReview' },\n        new(token=''):: apiVersion + kind + self.mixin.spec.withToken(token),\n        mixin:: {\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec holds information about the request being evaluated\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Token is the opaque bearer token.\n            withToken(token):: self + __specMixin({ token: token }),\n          },\n          specType:: hidden.authentication.v1beta1.tokenReviewSpec,\n        },\n      },\n    },\n  },\n  authorization:: {\n    v1:: {\n      local apiVersion = { apiVersion: 'authorization.k8s.io/v1' },\n      // LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking.\n      localSubjectAccessReview:: {\n        local kind = { kind: 'LocalSubjectAccessReview' },\n        new():: apiVersion + kind,\n        mixin:: {\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace you made the request against.  If empty, it is defaulted.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n            withExtra(extra):: self + __specMixin({ extra: extra }),\n            // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n            withExtraMixin(extra):: self + __specMixin({ extra+: extra }),\n            // Groups is the groups you're testing for.\n            withGroups(groups):: self + if std.type(groups) == 'array' then __specMixin({ groups: groups }) else __specMixin({ groups: [groups] }),\n            // Groups is the groups you're testing for.\n            withGroupsMixin(groups):: self + if std.type(groups) == 'array' then __specMixin({ groups+: groups }) else __specMixin({ groups+: [groups] }),\n            // NonResourceAttributes describes information for a non-resource access request\n            nonResourceAttributes:: {\n              local __nonResourceAttributesMixin(nonResourceAttributes) = __specMixin({ nonResourceAttributes+: nonResourceAttributes }),\n              mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes),\n              // Path is the URL path of the request\n              withPath(path):: self + __nonResourceAttributesMixin({ path: path }),\n              // Verb is the standard HTTP verb\n              withVerb(verb):: self + __nonResourceAttributesMixin({ verb: verb }),\n            },\n            nonResourceAttributesType:: hidden.authorization.v1.nonResourceAttributes,\n            // ResourceAuthorizationAttributes describes information for a resource access request\n            resourceAttributes:: {\n              local __resourceAttributesMixin(resourceAttributes) = __specMixin({ resourceAttributes+: resourceAttributes }),\n              mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes),\n              // Group is the API Group of the Resource.  \"*\" means all.\n              withGroup(group):: self + __resourceAttributesMixin({ group: group }),\n              // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n              withName(name):: self + __resourceAttributesMixin({ name: name }),\n              // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n              withNamespace(namespace):: self + __resourceAttributesMixin({ namespace: namespace }),\n              // Resource is one of the existing resource types.  \"*\" means all.\n              withResource(resource):: self + __resourceAttributesMixin({ resource: resource }),\n              // Subresource is one of the existing resource types.  \"\" means none.\n              withSubresource(subresource):: self + __resourceAttributesMixin({ subresource: subresource }),\n              // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n              withVerb(verb):: self + __resourceAttributesMixin({ verb: verb }),\n              // Version is the API Version of the Resource.  \"*\" means all.\n              withVersion(version):: self + __resourceAttributesMixin({ version: version }),\n            },\n            resourceAttributesType:: hidden.authorization.v1.resourceAttributes,\n            // UID information about the requesting user.\n            withUid(uid):: self + __specMixin({ uid: uid }),\n            // User is the user you're testing for. If you specify \"User\" but not \"Groups\", then is it interpreted as \"What if User were not a member of any groups\n            withUser(user):: self + __specMixin({ user: user }),\n          },\n          specType:: hidden.authorization.v1.subjectAccessReviewSpec,\n        },\n      },\n      // SelfSubjectAccessReview checks whether or the current user can perform an action.  Not filling in a spec.namespace means \"in all namespaces\".  Self is a special case, because users should always be able to check whether they can perform an action\n      selfSubjectAccessReview:: {\n        local kind = { kind: 'SelfSubjectAccessReview' },\n        new():: apiVersion + kind,\n        mixin:: {\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec holds information about the request being evaluated.  user and groups must be empty\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // NonResourceAttributes describes information for a non-resource access request\n            nonResourceAttributes:: {\n              local __nonResourceAttributesMixin(nonResourceAttributes) = __specMixin({ nonResourceAttributes+: nonResourceAttributes }),\n              mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes),\n              // Path is the URL path of the request\n              withPath(path):: self + __nonResourceAttributesMixin({ path: path }),\n              // Verb is the standard HTTP verb\n              withVerb(verb):: self + __nonResourceAttributesMixin({ verb: verb }),\n            },\n            nonResourceAttributesType:: hidden.authorization.v1.nonResourceAttributes,\n            // ResourceAuthorizationAttributes describes information for a resource access request\n            resourceAttributes:: {\n              local __resourceAttributesMixin(resourceAttributes) = __specMixin({ resourceAttributes+: resourceAttributes }),\n              mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes),\n              // Group is the API Group of the Resource.  \"*\" means all.\n              withGroup(group):: self + __resourceAttributesMixin({ group: group }),\n              // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n              withName(name):: self + __resourceAttributesMixin({ name: name }),\n              // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n              withNamespace(namespace):: self + __resourceAttributesMixin({ namespace: namespace }),\n              // Resource is one of the existing resource types.  \"*\" means all.\n              withResource(resource):: self + __resourceAttributesMixin({ resource: resource }),\n              // Subresource is one of the existing resource types.  \"\" means none.\n              withSubresource(subresource):: self + __resourceAttributesMixin({ subresource: subresource }),\n              // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n              withVerb(verb):: self + __resourceAttributesMixin({ verb: verb }),\n              // Version is the API Version of the Resource.  \"*\" means all.\n              withVersion(version):: self + __resourceAttributesMixin({ version: version }),\n            },\n            resourceAttributesType:: hidden.authorization.v1.resourceAttributes,\n          },\n          specType:: hidden.authorization.v1.selfSubjectAccessReviewSpec,\n        },\n      },\n      // SelfSubjectRulesReview enumerates the set of actions the current user can perform within a namespace. The returned list of actions may be incomplete depending on the server's authorization mode, and any errors experienced during the evaluation. SelfSubjectRulesReview should be used by UIs to show/hide actions, or to quickly let an end user reason about their permissions. It should NOT Be used by external systems to drive authorization decisions as this raises confused deputy, cache lifetime/revocation, and correctness concerns. SubjectAccessReview, and LocalAccessReview are the correct way to defer authorization decisions to the API server.\n      selfSubjectRulesReview:: {\n        local kind = { kind: 'SelfSubjectRulesReview' },\n        new():: apiVersion + kind,\n        mixin:: {\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec holds information about the request being evaluated.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Namespace to evaluate rules for. Required.\n            withNamespace(namespace):: self + __specMixin({ namespace: namespace }),\n          },\n          specType:: hidden.authorization.v1.selfSubjectRulesReviewSpec,\n        },\n      },\n      // SubjectAccessReview checks whether or not a user or group can perform an action.\n      subjectAccessReview:: {\n        local kind = { kind: 'SubjectAccessReview' },\n        new():: apiVersion + kind,\n        mixin:: {\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec holds information about the request being evaluated\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n            withExtra(extra):: self + __specMixin({ extra: extra }),\n            // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n            withExtraMixin(extra):: self + __specMixin({ extra+: extra }),\n            // Groups is the groups you're testing for.\n            withGroups(groups):: self + if std.type(groups) == 'array' then __specMixin({ groups: groups }) else __specMixin({ groups: [groups] }),\n            // Groups is the groups you're testing for.\n            withGroupsMixin(groups):: self + if std.type(groups) == 'array' then __specMixin({ groups+: groups }) else __specMixin({ groups+: [groups] }),\n            // NonResourceAttributes describes information for a non-resource access request\n            nonResourceAttributes:: {\n              local __nonResourceAttributesMixin(nonResourceAttributes) = __specMixin({ nonResourceAttributes+: nonResourceAttributes }),\n              mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes),\n              // Path is the URL path of the request\n              withPath(path):: self + __nonResourceAttributesMixin({ path: path }),\n              // Verb is the standard HTTP verb\n              withVerb(verb):: self + __nonResourceAttributesMixin({ verb: verb }),\n            },\n            nonResourceAttributesType:: hidden.authorization.v1.nonResourceAttributes,\n            // ResourceAuthorizationAttributes describes information for a resource access request\n            resourceAttributes:: {\n              local __resourceAttributesMixin(resourceAttributes) = __specMixin({ resourceAttributes+: resourceAttributes }),\n              mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes),\n              // Group is the API Group of the Resource.  \"*\" means all.\n              withGroup(group):: self + __resourceAttributesMixin({ group: group }),\n              // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n              withName(name):: self + __resourceAttributesMixin({ name: name }),\n              // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n              withNamespace(namespace):: self + __resourceAttributesMixin({ namespace: namespace }),\n              // Resource is one of the existing resource types.  \"*\" means all.\n              withResource(resource):: self + __resourceAttributesMixin({ resource: resource }),\n              // Subresource is one of the existing resource types.  \"\" means none.\n              withSubresource(subresource):: self + __resourceAttributesMixin({ subresource: subresource }),\n              // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n              withVerb(verb):: self + __resourceAttributesMixin({ verb: verb }),\n              // Version is the API Version of the Resource.  \"*\" means all.\n              withVersion(version):: self + __resourceAttributesMixin({ version: version }),\n            },\n            resourceAttributesType:: hidden.authorization.v1.resourceAttributes,\n            // UID information about the requesting user.\n            withUid(uid):: self + __specMixin({ uid: uid }),\n            // User is the user you're testing for. If you specify \"User\" but not \"Groups\", then is it interpreted as \"What if User were not a member of any groups\n            withUser(user):: self + __specMixin({ user: user }),\n          },\n          specType:: hidden.authorization.v1.subjectAccessReviewSpec,\n        },\n      },\n    },\n    v1beta1:: {\n      local apiVersion = { apiVersion: 'authorization.k8s.io/v1beta1' },\n      // LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking.\n      localSubjectAccessReview:: {\n        local kind = { kind: 'LocalSubjectAccessReview' },\n        new():: apiVersion + kind,\n        mixin:: {\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace you made the request against.  If empty, it is defaulted.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n            withExtra(extra):: self + __specMixin({ extra: extra }),\n            // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n            withExtraMixin(extra):: self + __specMixin({ extra+: extra }),\n            // Groups is the groups you're testing for.\n            withGroup(group):: self + if std.type(group) == 'array' then __specMixin({ group: group }) else __specMixin({ group: [group] }),\n            // Groups is the groups you're testing for.\n            withGroupMixin(group):: self + if std.type(group) == 'array' then __specMixin({ group+: group }) else __specMixin({ group+: [group] }),\n            // NonResourceAttributes describes information for a non-resource access request\n            nonResourceAttributes:: {\n              local __nonResourceAttributesMixin(nonResourceAttributes) = __specMixin({ nonResourceAttributes+: nonResourceAttributes }),\n              mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes),\n              // Path is the URL path of the request\n              withPath(path):: self + __nonResourceAttributesMixin({ path: path }),\n              // Verb is the standard HTTP verb\n              withVerb(verb):: self + __nonResourceAttributesMixin({ verb: verb }),\n            },\n            nonResourceAttributesType:: hidden.authorization.v1beta1.nonResourceAttributes,\n            // ResourceAuthorizationAttributes describes information for a resource access request\n            resourceAttributes:: {\n              local __resourceAttributesMixin(resourceAttributes) = __specMixin({ resourceAttributes+: resourceAttributes }),\n              mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes),\n              // Group is the API Group of the Resource.  \"*\" means all.\n              withGroup(group):: self + __resourceAttributesMixin({ group: group }),\n              // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n              withName(name):: self + __resourceAttributesMixin({ name: name }),\n              // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n              withNamespace(namespace):: self + __resourceAttributesMixin({ namespace: namespace }),\n              // Resource is one of the existing resource types.  \"*\" means all.\n              withResource(resource):: self + __resourceAttributesMixin({ resource: resource }),\n              // Subresource is one of the existing resource types.  \"\" means none.\n              withSubresource(subresource):: self + __resourceAttributesMixin({ subresource: subresource }),\n              // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n              withVerb(verb):: self + __resourceAttributesMixin({ verb: verb }),\n              // Version is the API Version of the Resource.  \"*\" means all.\n              withVersion(version):: self + __resourceAttributesMixin({ version: version }),\n            },\n            resourceAttributesType:: hidden.authorization.v1beta1.resourceAttributes,\n            // UID information about the requesting user.\n            withUid(uid):: self + __specMixin({ uid: uid }),\n            // User is the user you're testing for. If you specify \"User\" but not \"Group\", then is it interpreted as \"What if User were not a member of any groups\n            withUser(user):: self + __specMixin({ user: user }),\n          },\n          specType:: hidden.authorization.v1beta1.subjectAccessReviewSpec,\n        },\n      },\n      // SelfSubjectAccessReview checks whether or the current user can perform an action.  Not filling in a spec.namespace means \"in all namespaces\".  Self is a special case, because users should always be able to check whether they can perform an action\n      selfSubjectAccessReview:: {\n        local kind = { kind: 'SelfSubjectAccessReview' },\n        new():: apiVersion + kind,\n        mixin:: {\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec holds information about the request being evaluated.  user and groups must be empty\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // NonResourceAttributes describes information for a non-resource access request\n            nonResourceAttributes:: {\n              local __nonResourceAttributesMixin(nonResourceAttributes) = __specMixin({ nonResourceAttributes+: nonResourceAttributes }),\n              mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes),\n              // Path is the URL path of the request\n              withPath(path):: self + __nonResourceAttributesMixin({ path: path }),\n              // Verb is the standard HTTP verb\n              withVerb(verb):: self + __nonResourceAttributesMixin({ verb: verb }),\n            },\n            nonResourceAttributesType:: hidden.authorization.v1beta1.nonResourceAttributes,\n            // ResourceAuthorizationAttributes describes information for a resource access request\n            resourceAttributes:: {\n              local __resourceAttributesMixin(resourceAttributes) = __specMixin({ resourceAttributes+: resourceAttributes }),\n              mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes),\n              // Group is the API Group of the Resource.  \"*\" means all.\n              withGroup(group):: self + __resourceAttributesMixin({ group: group }),\n              // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n              withName(name):: self + __resourceAttributesMixin({ name: name }),\n              // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n              withNamespace(namespace):: self + __resourceAttributesMixin({ namespace: namespace }),\n              // Resource is one of the existing resource types.  \"*\" means all.\n              withResource(resource):: self + __resourceAttributesMixin({ resource: resource }),\n              // Subresource is one of the existing resource types.  \"\" means none.\n              withSubresource(subresource):: self + __resourceAttributesMixin({ subresource: subresource }),\n              // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n              withVerb(verb):: self + __resourceAttributesMixin({ verb: verb }),\n              // Version is the API Version of the Resource.  \"*\" means all.\n              withVersion(version):: self + __resourceAttributesMixin({ version: version }),\n            },\n            resourceAttributesType:: hidden.authorization.v1beta1.resourceAttributes,\n          },\n          specType:: hidden.authorization.v1beta1.selfSubjectAccessReviewSpec,\n        },\n      },\n      // SelfSubjectRulesReview enumerates the set of actions the current user can perform within a namespace. The returned list of actions may be incomplete depending on the server's authorization mode, and any errors experienced during the evaluation. SelfSubjectRulesReview should be used by UIs to show/hide actions, or to quickly let an end user reason about their permissions. It should NOT Be used by external systems to drive authorization decisions as this raises confused deputy, cache lifetime/revocation, and correctness concerns. SubjectAccessReview, and LocalAccessReview are the correct way to defer authorization decisions to the API server.\n      selfSubjectRulesReview:: {\n        local kind = { kind: 'SelfSubjectRulesReview' },\n        new():: apiVersion + kind,\n        mixin:: {\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec holds information about the request being evaluated.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Namespace to evaluate rules for. Required.\n            withNamespace(namespace):: self + __specMixin({ namespace: namespace }),\n          },\n          specType:: hidden.authorization.v1beta1.selfSubjectRulesReviewSpec,\n        },\n      },\n      // SubjectAccessReview checks whether or not a user or group can perform an action.\n      subjectAccessReview:: {\n        local kind = { kind: 'SubjectAccessReview' },\n        new():: apiVersion + kind,\n        mixin:: {\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec holds information about the request being evaluated\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n            withExtra(extra):: self + __specMixin({ extra: extra }),\n            // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n            withExtraMixin(extra):: self + __specMixin({ extra+: extra }),\n            // Groups is the groups you're testing for.\n            withGroup(group):: self + if std.type(group) == 'array' then __specMixin({ group: group }) else __specMixin({ group: [group] }),\n            // Groups is the groups you're testing for.\n            withGroupMixin(group):: self + if std.type(group) == 'array' then __specMixin({ group+: group }) else __specMixin({ group+: [group] }),\n            // NonResourceAttributes describes information for a non-resource access request\n            nonResourceAttributes:: {\n              local __nonResourceAttributesMixin(nonResourceAttributes) = __specMixin({ nonResourceAttributes+: nonResourceAttributes }),\n              mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes),\n              // Path is the URL path of the request\n              withPath(path):: self + __nonResourceAttributesMixin({ path: path }),\n              // Verb is the standard HTTP verb\n              withVerb(verb):: self + __nonResourceAttributesMixin({ verb: verb }),\n            },\n            nonResourceAttributesType:: hidden.authorization.v1beta1.nonResourceAttributes,\n            // ResourceAuthorizationAttributes describes information for a resource access request\n            resourceAttributes:: {\n              local __resourceAttributesMixin(resourceAttributes) = __specMixin({ resourceAttributes+: resourceAttributes }),\n              mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes),\n              // Group is the API Group of the Resource.  \"*\" means all.\n              withGroup(group):: self + __resourceAttributesMixin({ group: group }),\n              // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n              withName(name):: self + __resourceAttributesMixin({ name: name }),\n              // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n              withNamespace(namespace):: self + __resourceAttributesMixin({ namespace: namespace }),\n              // Resource is one of the existing resource types.  \"*\" means all.\n              withResource(resource):: self + __resourceAttributesMixin({ resource: resource }),\n              // Subresource is one of the existing resource types.  \"\" means none.\n              withSubresource(subresource):: self + __resourceAttributesMixin({ subresource: subresource }),\n              // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n              withVerb(verb):: self + __resourceAttributesMixin({ verb: verb }),\n              // Version is the API Version of the Resource.  \"*\" means all.\n              withVersion(version):: self + __resourceAttributesMixin({ version: version }),\n            },\n            resourceAttributesType:: hidden.authorization.v1beta1.resourceAttributes,\n            // UID information about the requesting user.\n            withUid(uid):: self + __specMixin({ uid: uid }),\n            // User is the user you're testing for. If you specify \"User\" but not \"Group\", then is it interpreted as \"What if User were not a member of any groups\n            withUser(user):: self + __specMixin({ user: user }),\n          },\n          specType:: hidden.authorization.v1beta1.subjectAccessReviewSpec,\n        },\n      },\n    },\n  },\n  autoscaling:: {\n    v1:: {\n      local apiVersion = { apiVersion: 'autoscaling/v1' },\n      // configuration of a horizontal pod autoscaler.\n      horizontalPodAutoscaler:: {\n        local kind = { kind: 'HorizontalPodAutoscaler' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // behaviour of autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // upper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas.\n            withMaxReplicas(maxReplicas):: self + __specMixin({ maxReplicas: maxReplicas }),\n            // lower limit for the number of pods that can be set by the autoscaler, default 1.\n            withMinReplicas(minReplicas):: self + __specMixin({ minReplicas: minReplicas }),\n            // reference to scaled resource; horizontal pod autoscaler will learn the current resource consumption and will set the desired number of pods by using its Scale subresource.\n            scaleTargetRef:: {\n              local __scaleTargetRefMixin(scaleTargetRef) = __specMixin({ scaleTargetRef+: scaleTargetRef }),\n              mixinInstance(scaleTargetRef):: __scaleTargetRefMixin(scaleTargetRef),\n              // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"\n              withKind(kind):: self + __scaleTargetRefMixin({ kind: kind }),\n              // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\n              withName(name):: self + __scaleTargetRefMixin({ name: name }),\n            },\n            scaleTargetRefType:: hidden.autoscaling.v1.crossVersionObjectReference,\n            // target average CPU utilization (represented as a percentage of requested CPU) over all the pods; if not specified the default autoscaling policy will be used.\n            withTargetCpuUtilizationPercentage(targetCpuUtilizationPercentage):: self + __specMixin({ targetCPUUtilizationPercentage: targetCpuUtilizationPercentage }),\n          },\n          specType:: hidden.autoscaling.v1.horizontalPodAutoscalerSpec,\n        },\n      },\n      // Scale represents a scaling request for a resource.\n      scale:: {\n        local kind = { kind: 'Scale' },\n        new(replicas=1):: apiVersion + kind + self.mixin.spec.withReplicas(replicas),\n        mixin:: {\n          // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // desired number of instances for the scaled object.\n            withReplicas(replicas):: self + __specMixin({ replicas: replicas }),\n          },\n          specType:: hidden.autoscaling.v1.scaleSpec,\n        },\n      },\n    },\n    v2beta1:: {\n      local apiVersion = { apiVersion: 'autoscaling/v2beta1' },\n      // HorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified.\n      horizontalPodAutoscaler:: {\n        local kind = { kind: 'HorizontalPodAutoscaler' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas.\n            withMaxReplicas(maxReplicas):: self + __specMixin({ maxReplicas: maxReplicas }),\n            // metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used).  The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods.  Ergo, metrics used must decrease as the pod count is increased, and vice-versa.  See the individual metric source types for more information about how each type of metric must respond.\n            withMetrics(metrics):: self + if std.type(metrics) == 'array' then __specMixin({ metrics: metrics }) else __specMixin({ metrics: [metrics] }),\n            // metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used).  The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods.  Ergo, metrics used must decrease as the pod count is increased, and vice-versa.  See the individual metric source types for more information about how each type of metric must respond.\n            withMetricsMixin(metrics):: self + if std.type(metrics) == 'array' then __specMixin({ metrics+: metrics }) else __specMixin({ metrics+: [metrics] }),\n            metricsType:: hidden.autoscaling.v2beta1.metricSpec,\n            // minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod.\n            withMinReplicas(minReplicas):: self + __specMixin({ minReplicas: minReplicas }),\n            // scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count.\n            scaleTargetRef:: {\n              local __scaleTargetRefMixin(scaleTargetRef) = __specMixin({ scaleTargetRef+: scaleTargetRef }),\n              mixinInstance(scaleTargetRef):: __scaleTargetRefMixin(scaleTargetRef),\n              // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"\n              withKind(kind):: self + __scaleTargetRefMixin({ kind: kind }),\n              // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\n              withName(name):: self + __scaleTargetRefMixin({ name: name }),\n            },\n            scaleTargetRefType:: hidden.autoscaling.v2beta1.crossVersionObjectReference,\n          },\n          specType:: hidden.autoscaling.v2beta1.horizontalPodAutoscalerSpec,\n        },\n      },\n    },\n  },\n  batch:: {\n    v1:: {\n      local apiVersion = { apiVersion: 'batch/v1' },\n      // Job represents the configuration of a single job.\n      job:: {\n        local kind = { kind: 'Job' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Specification of the desired behavior of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer\n            withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n            // Specifies the number of retries before marking this job failed. Defaults to 6\n            withBackoffLimit(backoffLimit):: self + __specMixin({ backoffLimit: backoffLimit }),\n            // Specifies the desired number of successfully finished pods the job should be run with.  Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value.  Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n            withCompletions(completions):: self + __specMixin({ completions: completions }),\n            // manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template.  When true, the user is responsible for picking unique labels and specifying the selector.  Failure to pick a unique label may cause this and other jobs to not function correctly.  However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector\n            withManualSelector(manualSelector):: self + __specMixin({ manualSelector: manualSelector }),\n            // Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n            withParallelism(parallelism):: self + __specMixin({ parallelism: parallelism }),\n            // A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n            template:: {\n              local __templateMixin(template) = __specMixin({ template+: template }),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n          specType:: hidden.batch.v1.jobSpec,\n        },\n      },\n    },\n    v1beta1:: {\n      local apiVersion = { apiVersion: 'batch/v1beta1' },\n      // CronJob represents the configuration of a single cron job.\n      cronJob:: {\n        local kind = { kind: 'CronJob' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Specifies how to treat concurrent executions of a Job. Valid values are: - \"Allow\" (default): allows CronJobs to run concurrently; - \"Forbid\": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - \"Replace\": cancels currently running job and replaces it with a new one\n            withConcurrencyPolicy(concurrencyPolicy):: self + __specMixin({ concurrencyPolicy: concurrencyPolicy }),\n            // The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.\n            withFailedJobsHistoryLimit(failedJobsHistoryLimit):: self + __specMixin({ failedJobsHistoryLimit: failedJobsHistoryLimit }),\n            // Specifies the job that will be created when executing a CronJob.\n            jobTemplate:: {\n              local __jobTemplateMixin(jobTemplate) = __specMixin({ jobTemplate+: jobTemplate }),\n              mixinInstance(jobTemplate):: __jobTemplateMixin(jobTemplate),\n              // Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __jobTemplateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __jobTemplateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // Specifies the number of retries before marking this job failed. Defaults to 6\n                withBackoffLimit(backoffLimit):: self + __specMixin({ backoffLimit: backoffLimit }),\n                // Specifies the desired number of successfully finished pods the job should be run with.  Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value.  Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n                withCompletions(completions):: self + __specMixin({ completions: completions }),\n                // manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template.  When true, the user is responsible for picking unique labels and specifying the selector.  Failure to pick a unique label may cause this and other jobs to not function correctly.  However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector\n                withManualSelector(manualSelector):: self + __specMixin({ manualSelector: manualSelector }),\n                // Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n                withParallelism(parallelism):: self + __specMixin({ parallelism: parallelism }),\n                // A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n                selector:: {\n                  local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n                  mixinInstance(selector):: __selectorMixin(selector),\n                  // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                  withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n                  // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                  withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n                  matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n                  // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                  withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n                  // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                  withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n                },\n                selectorType:: hidden.meta.v1.labelSelector,\n                // Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n                template:: {\n                  local __templateMixin(template) = __specMixin({ template+: template }),\n                  mixinInstance(template):: __templateMixin(template),\n                  // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n                  metadata:: {\n                    local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                    mixinInstance(metadata):: __metadataMixin(metadata),\n                    // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                    withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                    // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                    withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                    // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                    withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                    // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                    withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                    // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                    withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                    // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                    //\n                    // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                    //\n                    // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                    withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                    // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                    //\n                    // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                    initializers:: {\n                      local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                      mixinInstance(initializers):: __initializersMixin(initializers),\n                      // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                      withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                      // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                      withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                      pendingType:: hidden.meta.v1.initializer,\n                    },\n                    initializersType:: hidden.meta.v1.initializers,\n                    // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                    withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                    // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                    withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                    // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                    withName(name):: self + __metadataMixin({ name: name }),\n                    // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                    //\n                    // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                    withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                    // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                    withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                    // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                    withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                    ownerReferencesType:: hidden.meta.v1.ownerReference,\n                  },\n                  metadataType:: hidden.meta.v1.objectMeta,\n                  // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n                  spec:: {\n                    local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                    mixinInstance(spec):: __specMixin(spec),\n                    // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                    withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                    // If specified, the pod's scheduling constraints\n                    affinity:: {\n                      local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                      mixinInstance(affinity):: __affinityMixin(affinity),\n                      // Describes node affinity scheduling rules for the pod.\n                      nodeAffinity:: {\n                        local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                        mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                        // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                        requiredDuringSchedulingIgnoredDuringExecution:: {\n                          local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                          mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                          // Required. A list of node selector terms. The terms are ORed.\n                          withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                          // Required. A list of node selector terms. The terms are ORed.\n                          withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                          nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                        },\n                        requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                      },\n                      nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                      // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                      podAffinity:: {\n                        local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                        mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                        // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                        // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                        requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                      },\n                      podAffinityType:: hidden.core.v1.podAffinity,\n                      // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                      podAntiAffinity:: {\n                        local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                        mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                        // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                        // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                        requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                      },\n                      podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                    },\n                    affinityType:: hidden.core.v1.affinity,\n                    // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                    withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                    // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                    withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                    // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                    withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                    containersType:: hidden.core.v1.container,\n                    // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                    dnsConfig:: {\n                      local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                      mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                      // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                      withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                      // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                      withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                      // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                      withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                      // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                      withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                      optionsType:: hidden.core.v1.podDnsConfigOption,\n                      // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                      withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                      // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                      withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                    },\n                    dnsConfigType:: hidden.core.v1.podDnsConfig,\n                    // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                    withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                    // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                    withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                    // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                    withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                    hostAliasesType:: hidden.core.v1.hostAlias,\n                    // Use the host's ipc namespace. Optional: Default to false.\n                    withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                    // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                    withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                    // Use the host's pid namespace. Optional: Default to false.\n                    withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                    // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                    withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                    // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                    withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                    // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                    withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                    imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                    // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                    withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                    // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                    withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                    initContainersType:: hidden.core.v1.container,\n                    // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                    withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                    // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                    withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                    // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                    withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                    // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                    withPriority(priority):: self + __specMixin({ priority: priority }),\n                    // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                    withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                    // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                    withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                    // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                    withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                    readinessGatesType:: hidden.core.v1.podReadinessGate,\n                    // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                    withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                    // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                    withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                    // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                    securityContext:: {\n                      local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                      mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                      // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                      //\n                      // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                      //\n                      // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                      withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                      // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                      withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                      // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                      withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                      // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                      withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                      // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                      seLinuxOptions:: {\n                        local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                        mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                        // Level is SELinux level label that applies to the container.\n                        withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                        // Role is a SELinux role label that applies to the container.\n                        withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                        // Type is a SELinux type label that applies to the container.\n                        withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                        // User is a SELinux user label that applies to the container.\n                        withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                      },\n                      seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                      // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                      withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                      // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                      withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                      // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                      withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                      // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                      withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                      sysctlsType:: hidden.core.v1.sysctl,\n                    },\n                    securityContextType:: hidden.core.v1.podSecurityContext,\n                    // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                    withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                    // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                    withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                    // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                    withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                    // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                    withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                    // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                    withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                    // If specified, the pod's tolerations.\n                    withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                    // If specified, the pod's tolerations.\n                    withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                    tolerationsType:: hidden.core.v1.toleration,\n                    // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                    withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                    // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                    withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                    volumesType:: hidden.core.v1.volume,\n                  },\n                  specType:: hidden.core.v1.podSpec,\n                },\n                templateType:: hidden.core.v1.podTemplateSpec,\n              },\n              specType:: hidden.batch.v1.jobSpec,\n            },\n            jobTemplateType:: hidden.batch.v1beta1.jobTemplateSpec,\n            // The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.\n            withSchedule(schedule):: self + __specMixin({ schedule: schedule }),\n            // Optional deadline in seconds for starting the job if it misses scheduled time for any reason.  Missed jobs executions will be counted as failed ones.\n            withStartingDeadlineSeconds(startingDeadlineSeconds):: self + __specMixin({ startingDeadlineSeconds: startingDeadlineSeconds }),\n            // The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 3.\n            withSuccessfulJobsHistoryLimit(successfulJobsHistoryLimit):: self + __specMixin({ successfulJobsHistoryLimit: successfulJobsHistoryLimit }),\n            // This flag tells the controller to suspend subsequent executions, it does not apply to already started executions.  Defaults to false.\n            withSuspend(suspend):: self + __specMixin({ suspend: suspend }),\n          },\n          specType:: hidden.batch.v1beta1.cronJobSpec,\n        },\n      },\n    },\n    v2alpha1:: {\n      local apiVersion = { apiVersion: 'batch/v2alpha1' },\n      // CronJob represents the configuration of a single cron job.\n      cronJob:: {\n        local kind = { kind: 'CronJob' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Specifies how to treat concurrent executions of a Job. Valid values are: - \"Allow\" (default): allows CronJobs to run concurrently; - \"Forbid\": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - \"Replace\": cancels currently running job and replaces it with a new one\n            withConcurrencyPolicy(concurrencyPolicy):: self + __specMixin({ concurrencyPolicy: concurrencyPolicy }),\n            // The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.\n            withFailedJobsHistoryLimit(failedJobsHistoryLimit):: self + __specMixin({ failedJobsHistoryLimit: failedJobsHistoryLimit }),\n            // Specifies the job that will be created when executing a CronJob.\n            jobTemplate:: {\n              local __jobTemplateMixin(jobTemplate) = __specMixin({ jobTemplate+: jobTemplate }),\n              mixinInstance(jobTemplate):: __jobTemplateMixin(jobTemplate),\n              // Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __jobTemplateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __jobTemplateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // Specifies the number of retries before marking this job failed. Defaults to 6\n                withBackoffLimit(backoffLimit):: self + __specMixin({ backoffLimit: backoffLimit }),\n                // Specifies the desired number of successfully finished pods the job should be run with.  Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value.  Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n                withCompletions(completions):: self + __specMixin({ completions: completions }),\n                // manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template.  When true, the user is responsible for picking unique labels and specifying the selector.  Failure to pick a unique label may cause this and other jobs to not function correctly.  However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector\n                withManualSelector(manualSelector):: self + __specMixin({ manualSelector: manualSelector }),\n                // Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n                withParallelism(parallelism):: self + __specMixin({ parallelism: parallelism }),\n                // A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n                selector:: {\n                  local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n                  mixinInstance(selector):: __selectorMixin(selector),\n                  // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                  withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n                  // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                  withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n                  matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n                  // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                  withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n                  // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                  withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n                },\n                selectorType:: hidden.meta.v1.labelSelector,\n                // Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n                template:: {\n                  local __templateMixin(template) = __specMixin({ template+: template }),\n                  mixinInstance(template):: __templateMixin(template),\n                  // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n                  metadata:: {\n                    local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                    mixinInstance(metadata):: __metadataMixin(metadata),\n                    // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                    withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                    // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                    withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                    // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                    withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                    // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                    withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                    // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                    withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                    // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                    //\n                    // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                    //\n                    // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                    withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                    // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                    //\n                    // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                    initializers:: {\n                      local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                      mixinInstance(initializers):: __initializersMixin(initializers),\n                      // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                      withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                      // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                      withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                      pendingType:: hidden.meta.v1.initializer,\n                    },\n                    initializersType:: hidden.meta.v1.initializers,\n                    // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                    withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                    // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                    withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                    // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                    withName(name):: self + __metadataMixin({ name: name }),\n                    // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                    //\n                    // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                    withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                    // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                    withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                    // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                    withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                    ownerReferencesType:: hidden.meta.v1.ownerReference,\n                  },\n                  metadataType:: hidden.meta.v1.objectMeta,\n                  // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n                  spec:: {\n                    local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                    mixinInstance(spec):: __specMixin(spec),\n                    // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                    withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                    // If specified, the pod's scheduling constraints\n                    affinity:: {\n                      local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                      mixinInstance(affinity):: __affinityMixin(affinity),\n                      // Describes node affinity scheduling rules for the pod.\n                      nodeAffinity:: {\n                        local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                        mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                        // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                        requiredDuringSchedulingIgnoredDuringExecution:: {\n                          local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                          mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                          // Required. A list of node selector terms. The terms are ORed.\n                          withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                          // Required. A list of node selector terms. The terms are ORed.\n                          withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                          nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                        },\n                        requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                      },\n                      nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                      // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                      podAffinity:: {\n                        local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                        mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                        // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                        // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                        requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                      },\n                      podAffinityType:: hidden.core.v1.podAffinity,\n                      // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                      podAntiAffinity:: {\n                        local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                        mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                        // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                        // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                        requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                      },\n                      podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                    },\n                    affinityType:: hidden.core.v1.affinity,\n                    // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                    withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                    // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                    withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                    // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                    withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                    containersType:: hidden.core.v1.container,\n                    // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                    dnsConfig:: {\n                      local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                      mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                      // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                      withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                      // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                      withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                      // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                      withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                      // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                      withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                      optionsType:: hidden.core.v1.podDnsConfigOption,\n                      // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                      withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                      // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                      withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                    },\n                    dnsConfigType:: hidden.core.v1.podDnsConfig,\n                    // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                    withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                    // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                    withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                    // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                    withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                    hostAliasesType:: hidden.core.v1.hostAlias,\n                    // Use the host's ipc namespace. Optional: Default to false.\n                    withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                    // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                    withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                    // Use the host's pid namespace. Optional: Default to false.\n                    withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                    // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                    withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                    // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                    withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                    // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                    withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                    imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                    // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                    withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                    // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                    withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                    initContainersType:: hidden.core.v1.container,\n                    // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                    withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                    // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                    withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                    // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                    withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                    // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                    withPriority(priority):: self + __specMixin({ priority: priority }),\n                    // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                    withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                    // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                    withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                    // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                    withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                    readinessGatesType:: hidden.core.v1.podReadinessGate,\n                    // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                    withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                    // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                    withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                    // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                    securityContext:: {\n                      local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                      mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                      // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                      //\n                      // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                      //\n                      // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                      withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                      // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                      withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                      // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                      withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                      // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                      withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                      // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                      seLinuxOptions:: {\n                        local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                        mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                        // Level is SELinux level label that applies to the container.\n                        withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                        // Role is a SELinux role label that applies to the container.\n                        withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                        // Type is a SELinux type label that applies to the container.\n                        withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                        // User is a SELinux user label that applies to the container.\n                        withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                      },\n                      seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                      // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                      withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                      // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                      withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                      // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                      withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                      // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                      withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                      sysctlsType:: hidden.core.v1.sysctl,\n                    },\n                    securityContextType:: hidden.core.v1.podSecurityContext,\n                    // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                    withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                    // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                    withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                    // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                    withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                    // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                    withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                    // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                    withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                    // If specified, the pod's tolerations.\n                    withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                    // If specified, the pod's tolerations.\n                    withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                    tolerationsType:: hidden.core.v1.toleration,\n                    // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                    withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                    // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                    withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                    volumesType:: hidden.core.v1.volume,\n                  },\n                  specType:: hidden.core.v1.podSpec,\n                },\n                templateType:: hidden.core.v1.podTemplateSpec,\n              },\n              specType:: hidden.batch.v1.jobSpec,\n            },\n            jobTemplateType:: hidden.batch.v2alpha1.jobTemplateSpec,\n            // The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.\n            withSchedule(schedule):: self + __specMixin({ schedule: schedule }),\n            // Optional deadline in seconds for starting the job if it misses scheduled time for any reason.  Missed jobs executions will be counted as failed ones.\n            withStartingDeadlineSeconds(startingDeadlineSeconds):: self + __specMixin({ startingDeadlineSeconds: startingDeadlineSeconds }),\n            // The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.\n            withSuccessfulJobsHistoryLimit(successfulJobsHistoryLimit):: self + __specMixin({ successfulJobsHistoryLimit: successfulJobsHistoryLimit }),\n            // This flag tells the controller to suspend subsequent executions, it does not apply to already started executions.  Defaults to false.\n            withSuspend(suspend):: self + __specMixin({ suspend: suspend }),\n          },\n          specType:: hidden.batch.v2alpha1.cronJobSpec,\n        },\n      },\n    },\n  },\n  certificates:: {\n    v1beta1:: {\n      local apiVersion = { apiVersion: 'certificates.k8s.io/v1beta1' },\n      // Describes a certificate signing request\n      certificateSigningRequest:: {\n        local kind = { kind: 'CertificateSigningRequest' },\n        new():: apiVersion + kind,\n        mixin:: {\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // The certificate request itself and any additional information.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Extra information about the requesting user. See user.Info interface for details.\n            withExtra(extra):: self + __specMixin({ extra: extra }),\n            // Extra information about the requesting user. See user.Info interface for details.\n            withExtraMixin(extra):: self + __specMixin({ extra+: extra }),\n            // Group information about the requesting user. See user.Info interface for details.\n            withGroups(groups):: self + if std.type(groups) == 'array' then __specMixin({ groups: groups }) else __specMixin({ groups: [groups] }),\n            // Group information about the requesting user. See user.Info interface for details.\n            withGroupsMixin(groups):: self + if std.type(groups) == 'array' then __specMixin({ groups+: groups }) else __specMixin({ groups+: [groups] }),\n            // Base64-encoded PKCS#10 CSR data\n            withRequest(request):: self + __specMixin({ request: request }),\n            // UID information about the requesting user. See user.Info interface for details.\n            withUid(uid):: self + __specMixin({ uid: uid }),\n            // allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3\n            // https://tools.ietf.org/html/rfc5280#section-4.2.1.12\n            withUsages(usages):: self + if std.type(usages) == 'array' then __specMixin({ usages: usages }) else __specMixin({ usages: [usages] }),\n            // allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3\n            // https://tools.ietf.org/html/rfc5280#section-4.2.1.12\n            withUsagesMixin(usages):: self + if std.type(usages) == 'array' then __specMixin({ usages+: usages }) else __specMixin({ usages+: [usages] }),\n            // Information about the requesting user. See user.Info interface for details.\n            withUsername(username):: self + __specMixin({ username: username }),\n          },\n          specType:: hidden.certificates.v1beta1.certificateSigningRequestSpec,\n        },\n      },\n    },\n  },\n  core:: {\n    v1:: {\n      local apiVersion = { apiVersion: 'v1' },\n      // Binding ties one object to another; for example, a pod is bound to a node by a scheduler. Deprecated in 1.7, please use the bindings subresource of pods instead.\n      binding:: {\n        local kind = { kind: 'Binding' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // The target object that you want to bind to the standard object.\n          target:: {\n            local __targetMixin(target) = { target+: target },\n            mixinInstance(target):: __targetMixin(target),\n            // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\n            withFieldPath(fieldPath):: self + __targetMixin({ fieldPath: fieldPath }),\n            // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n            withName(name):: self + __targetMixin({ name: name }),\n            // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n            withNamespace(namespace):: self + __targetMixin({ namespace: namespace }),\n            // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n            withResourceVersion(resourceVersion):: self + __targetMixin({ resourceVersion: resourceVersion }),\n            // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n            withUid(uid):: self + __targetMixin({ uid: uid }),\n          },\n          targetType:: hidden.core.v1.objectReference,\n        },\n      },\n      // ConfigMap holds configuration data for pods to consume.\n      configMap:: {\n        local kind = { kind: 'ConfigMap' },\n        new(name='', data=''):: apiVersion + kind + self.withData(data) + self.mixin.metadata.withName(name),\n        // BinaryData contains the binary data. Each key must consist of alphanumeric characters, '-', '_' or '.'. BinaryData can contain byte sequences that are not in the UTF-8 range. The keys stored in BinaryData must not overlap with the ones in the Data field, this is enforced during validation process. Using this field will require 1.10+ apiserver and kubelet.\n        withBinaryData(binaryData):: self + { binaryData: binaryData },\n        // BinaryData contains the binary data. Each key must consist of alphanumeric characters, '-', '_' or '.'. BinaryData can contain byte sequences that are not in the UTF-8 range. The keys stored in BinaryData must not overlap with the ones in the Data field, this is enforced during validation process. Using this field will require 1.10+ apiserver and kubelet.\n        withBinaryDataMixin(binaryData):: self + { binaryData+: binaryData },\n        // Data contains the configuration data. Each key must consist of alphanumeric characters, '-', '_' or '.'. Values with non-UTF-8 byte sequences must use the BinaryData field. The keys stored in Data must not overlap with the keys in the BinaryData field, this is enforced during validation process.\n        withData(data):: self + { data: data },\n        // Data contains the configuration data. Each key must consist of alphanumeric characters, '-', '_' or '.'. Values with non-UTF-8 byte sequences must use the BinaryData field. The keys stored in Data must not overlap with the keys in the BinaryData field, this is enforced during validation process.\n        withDataMixin(data):: self + { data+: data },\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // Endpoints is a collection of endpoints that implement the actual service. Example:\n      // Name: \"mysvc\",\n      // Subsets: [\n      // {\n      // Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n      // Ports: [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n      // },\n      // {\n      // Addresses: [{\"ip\": \"10.10.3.3\"}],\n      // Ports: [{\"name\": \"a\", \"port\": 93}, {\"name\": \"b\", \"port\": 76}]\n      // },\n      // ]\n      endpoints:: {\n        local kind = { kind: 'Endpoints' },\n        new():: apiVersion + kind,\n        // The set of all endpoints is the union of all subsets. Addresses are placed into subsets according to the IPs they share. A single address with multiple ports, some of which are ready and some of which are not (because they come from different containers) will result in the address being displayed in different subsets for the different ports. No address will appear in both Addresses and NotReadyAddresses in the same subset. Sets of addresses and ports that comprise a service.\n        withSubsets(subsets):: self + if std.type(subsets) == 'array' then { subsets: subsets } else { subsets: [subsets] },\n        // The set of all endpoints is the union of all subsets. Addresses are placed into subsets according to the IPs they share. A single address with multiple ports, some of which are ready and some of which are not (because they come from different containers) will result in the address being displayed in different subsets for the different ports. No address will appear in both Addresses and NotReadyAddresses in the same subset. Sets of addresses and ports that comprise a service.\n        withSubsetsMixin(subsets):: self + if std.type(subsets) == 'array' then { subsets+: subsets } else { subsets+: [subsets] },\n        subsetsType:: hidden.core.v1.endpointSubset,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // Event is a report of an event somewhere in the cluster.\n      event:: {\n        local kind = { kind: 'Event' },\n        new():: apiVersion + kind,\n        // What action was taken/failed regarding to the Regarding object.\n        withAction(action):: self + { action: action },\n        // The number of times this event has occurred.\n        withCount(count):: self + { count: count },\n        // Time when this Event was first observed.\n        withEventTime(eventTime):: self + { eventTime: eventTime },\n        // The time at which the event was first recorded. (Time of server receipt is in TypeMeta.)\n        withFirstTimestamp(firstTimestamp):: self + { firstTimestamp: firstTimestamp },\n        // The time at which the most recent occurrence of this event was recorded.\n        withLastTimestamp(lastTimestamp):: self + { lastTimestamp: lastTimestamp },\n        // A human-readable description of the status of this operation.\n        withMessage(message):: self + { message: message },\n        // This should be a short, machine understandable string that gives the reason for the transition into the object's current status.\n        withReason(reason):: self + { reason: reason },\n        // Name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`.\n        withReportingComponent(reportingComponent):: self + { reportingComponent: reportingComponent },\n        // ID of the controller instance, e.g. `kubelet-xyzf`.\n        withReportingInstance(reportingInstance):: self + { reportingInstance: reportingInstance },\n        // Type of this event (Normal, Warning), new types could be added in the future\n        withType(type):: self + { type: type },\n        mixin:: {\n          // The object that this event is about.\n          involvedObject:: {\n            local __involvedObjectMixin(involvedObject) = { involvedObject+: involvedObject },\n            mixinInstance(involvedObject):: __involvedObjectMixin(involvedObject),\n            // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\n            withFieldPath(fieldPath):: self + __involvedObjectMixin({ fieldPath: fieldPath }),\n            // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n            withName(name):: self + __involvedObjectMixin({ name: name }),\n            // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n            withNamespace(namespace):: self + __involvedObjectMixin({ namespace: namespace }),\n            // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n            withResourceVersion(resourceVersion):: self + __involvedObjectMixin({ resourceVersion: resourceVersion }),\n            // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n            withUid(uid):: self + __involvedObjectMixin({ uid: uid }),\n          },\n          involvedObjectType:: hidden.core.v1.objectReference,\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Optional secondary object for more complex actions.\n          related:: {\n            local __relatedMixin(related) = { related+: related },\n            mixinInstance(related):: __relatedMixin(related),\n            // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\n            withFieldPath(fieldPath):: self + __relatedMixin({ fieldPath: fieldPath }),\n            // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n            withName(name):: self + __relatedMixin({ name: name }),\n            // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n            withNamespace(namespace):: self + __relatedMixin({ namespace: namespace }),\n            // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n            withResourceVersion(resourceVersion):: self + __relatedMixin({ resourceVersion: resourceVersion }),\n            // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n            withUid(uid):: self + __relatedMixin({ uid: uid }),\n          },\n          relatedType:: hidden.core.v1.objectReference,\n          // Data about the Event series this event represents or nil if it's a singleton Event.\n          series:: {\n            local __seriesMixin(series) = { series+: series },\n            mixinInstance(series):: __seriesMixin(series),\n            // Number of occurrences in this series up to the last heartbeat time\n            withCount(count):: self + __seriesMixin({ count: count }),\n            // Time of the last occurrence observed\n            withLastObservedTime(lastObservedTime):: self + __seriesMixin({ lastObservedTime: lastObservedTime }),\n            // State of this Series: Ongoing or Finished\n            withState(state):: self + __seriesMixin({ state: state }),\n          },\n          seriesType:: hidden.core.v1.eventSeries,\n          // The component reporting this event. Should be a short machine understandable string.\n          source:: {\n            local __sourceMixin(source) = { source+: source },\n            mixinInstance(source):: __sourceMixin(source),\n            // Component from which the event is generated.\n            withComponent(component):: self + __sourceMixin({ component: component }),\n            // Node name on which the event is generated.\n            withHost(host):: self + __sourceMixin({ host: host }),\n          },\n          sourceType:: hidden.core.v1.eventSource,\n        },\n      },\n      // LimitRange sets resource usage limits for each kind of resource in a Namespace.\n      limitRange:: {\n        local kind = { kind: 'LimitRange' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the limits enforced. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Limits is the list of LimitRangeItem objects that are enforced.\n            withLimits(limits):: self + if std.type(limits) == 'array' then __specMixin({ limits: limits }) else __specMixin({ limits: [limits] }),\n            // Limits is the list of LimitRangeItem objects that are enforced.\n            withLimitsMixin(limits):: self + if std.type(limits) == 'array' then __specMixin({ limits+: limits }) else __specMixin({ limits+: [limits] }),\n            limitsType:: hidden.core.v1.limitRangeItem,\n          },\n          specType:: hidden.core.v1.limitRangeSpec,\n        },\n      },\n      // Namespace provides a scope for Names. Use of multiple namespaces is optional.\n      namespace:: {\n        local kind = { kind: 'Namespace' },\n        new(name=''):: apiVersion + kind + self.mixin.metadata.withName(name),\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the behavior of the Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __specMixin({ finalizers: finalizers }) else __specMixin({ finalizers: [finalizers] }),\n            // Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __specMixin({ finalizers+: finalizers }) else __specMixin({ finalizers+: [finalizers] }),\n          },\n          specType:: hidden.core.v1.namespaceSpec,\n        },\n      },\n      // Node is a worker node in Kubernetes. Each node will have a unique identifier in the cache (i.e. in etcd).\n      node:: {\n        local kind = { kind: 'Node' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the behavior of a node. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // If specified, the source to get node configuration from The DynamicKubeletConfig feature gate must be enabled for the Kubelet to use this field\n            configSource:: {\n              local __configSourceMixin(configSource) = __specMixin({ configSource+: configSource }),\n              mixinInstance(configSource):: __configSourceMixin(configSource),\n              // ConfigMap is a reference to a Node's ConfigMap\n              configMap:: {\n                local __configMapMixin(configMap) = __configSourceMixin({ configMap+: configMap }),\n                mixinInstance(configMap):: __configMapMixin(configMap),\n                // KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure This field is required in all cases.\n                withKubeletConfigKey(kubeletConfigKey):: self + __configMapMixin({ kubeletConfigKey: kubeletConfigKey }),\n                // Name is the metadata.name of the referenced ConfigMap. This field is required in all cases.\n                withName(name):: self + __configMapMixin({ name: name }),\n                // Namespace is the metadata.namespace of the referenced ConfigMap. This field is required in all cases.\n                withNamespace(namespace):: self + __configMapMixin({ namespace: namespace }),\n                // ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\n                withResourceVersion(resourceVersion):: self + __configMapMixin({ resourceVersion: resourceVersion }),\n                // UID is the metadata.UID of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\n                withUid(uid):: self + __configMapMixin({ uid: uid }),\n              },\n              configMapType:: hidden.core.v1.configMapNodeConfigSource,\n            },\n            configSourceType:: hidden.core.v1.nodeConfigSource,\n            // Deprecated. Not all kubelets will set this field. Remove field after 1.13. see: https://issues.k8s.io/61966\n            withExternalId(externalId):: self + __specMixin({ externalID: externalId }),\n            // PodCIDR represents the pod IP range assigned to the node.\n            withPodCidr(podCidr):: self + __specMixin({ podCIDR: podCidr }),\n            // ID of the node assigned by the cloud provider in the format: <ProviderName>://<ProviderSpecificNodeID>\n            withProviderId(providerId):: self + __specMixin({ providerID: providerId }),\n            // If specified, the node's taints.\n            withTaints(taints):: self + if std.type(taints) == 'array' then __specMixin({ taints: taints }) else __specMixin({ taints: [taints] }),\n            // If specified, the node's taints.\n            withTaintsMixin(taints):: self + if std.type(taints) == 'array' then __specMixin({ taints+: taints }) else __specMixin({ taints+: [taints] }),\n            taintsType:: hidden.core.v1.taint,\n            // Unschedulable controls node schedulability of new pods. By default, node is schedulable. More info: https://kubernetes.io/docs/concepts/nodes/node/#manual-node-administration\n            withUnschedulable(unschedulable):: self + __specMixin({ unschedulable: unschedulable }),\n          },\n          specType:: hidden.core.v1.nodeSpec,\n        },\n      },\n      // PersistentVolume (PV) is a storage resource provisioned by an administrator. It is analogous to a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes\n      persistentVolume:: {\n        local kind = { kind: 'PersistentVolume' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines a specification of a persistent volume owned by the cluster. Provisioned by an administrator. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes\n            withAccessModes(accessModes):: self + if std.type(accessModes) == 'array' then __specMixin({ accessModes: accessModes }) else __specMixin({ accessModes: [accessModes] }),\n            // AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes\n            withAccessModesMixin(accessModes):: self + if std.type(accessModes) == 'array' then __specMixin({ accessModes+: accessModes }) else __specMixin({ accessModes+: [accessModes] }),\n            // AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n            awsElasticBlockStore:: {\n              local __awsElasticBlockStoreMixin(awsElasticBlockStore) = __specMixin({ awsElasticBlockStore+: awsElasticBlockStore }),\n              mixinInstance(awsElasticBlockStore):: __awsElasticBlockStoreMixin(awsElasticBlockStore),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n              withFsType(fsType):: self + __awsElasticBlockStoreMixin({ fsType: fsType }),\n              // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty).\n              withPartition(partition):: self + __awsElasticBlockStoreMixin({ partition: partition }),\n              // Specify \"true\" to force and set the ReadOnly property in VolumeMounts to \"true\". If omitted, the default is \"false\". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n              withReadOnly(readOnly):: self + __awsElasticBlockStoreMixin({ readOnly: readOnly }),\n              // Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n              withVolumeId(volumeId):: self + __awsElasticBlockStoreMixin({ volumeID: volumeId }),\n            },\n            awsElasticBlockStoreType:: hidden.core.v1.awsElasticBlockStoreVolumeSource,\n            // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.\n            azureDisk:: {\n              local __azureDiskMixin(azureDisk) = __specMixin({ azureDisk+: azureDisk }),\n              mixinInstance(azureDisk):: __azureDiskMixin(azureDisk),\n              // Host Caching mode: None, Read Only, Read Write.\n              withCachingMode(cachingMode):: self + __azureDiskMixin({ cachingMode: cachingMode }),\n              // The Name of the data disk in the blob storage\n              withDiskName(diskName):: self + __azureDiskMixin({ diskName: diskName }),\n              // The URI the data disk in the blob storage\n              withDiskUri(diskUri):: self + __azureDiskMixin({ diskURI: diskUri }),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __azureDiskMixin({ fsType: fsType }),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __azureDiskMixin({ readOnly: readOnly }),\n            },\n            azureDiskType:: hidden.core.v1.azureDiskVolumeSource,\n            // AzureFile represents an Azure File Service mount on the host and bind mount to the pod.\n            azureFile:: {\n              local __azureFileMixin(azureFile) = __specMixin({ azureFile+: azureFile }),\n              mixinInstance(azureFile):: __azureFileMixin(azureFile),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __azureFileMixin({ readOnly: readOnly }),\n              // the name of secret that contains Azure Storage Account Name and Key\n              withSecretName(secretName):: self + __azureFileMixin({ secretName: secretName }),\n              // the namespace of the secret that contains Azure Storage Account Name and Key default is the same as the Pod\n              withSecretNamespace(secretNamespace):: self + __azureFileMixin({ secretNamespace: secretNamespace }),\n              // Share Name\n              withShareName(shareName):: self + __azureFileMixin({ shareName: shareName }),\n            },\n            azureFileType:: hidden.core.v1.azureFilePersistentVolumeSource,\n            // A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity\n            withCapacity(capacity):: self + __specMixin({ capacity: capacity }),\n            // A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity\n            withCapacityMixin(capacity):: self + __specMixin({ capacity+: capacity }),\n            // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime\n            cephfs:: {\n              local __cephfsMixin(cephfs) = __specMixin({ cephfs+: cephfs }),\n              mixinInstance(cephfs):: __cephfsMixin(cephfs),\n              // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withMonitors(monitors):: self + if std.type(monitors) == 'array' then __cephfsMixin({ monitors: monitors }) else __cephfsMixin({ monitors: [monitors] }),\n              // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withMonitorsMixin(monitors):: self + if std.type(monitors) == 'array' then __cephfsMixin({ monitors+: monitors }) else __cephfsMixin({ monitors+: [monitors] }),\n              // Optional: Used as the mounted root, rather than the full Ceph tree, default is /\n              withPath(path):: self + __cephfsMixin({ path: path }),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withReadOnly(readOnly):: self + __cephfsMixin({ readOnly: readOnly }),\n              // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withSecretFile(secretFile):: self + __cephfsMixin({ secretFile: secretFile }),\n              // Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __cephfsMixin({ secretRef+: secretRef }),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name is unique within a namespace to reference a secret resource.\n                withName(name):: self + __secretRefMixin({ name: name }),\n                // Namespace defines the space within which the secret name must be unique.\n                withNamespace(namespace):: self + __secretRefMixin({ namespace: namespace }),\n              },\n              secretRefType:: hidden.core.v1.secretReference,\n              // Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withUser(user):: self + __cephfsMixin({ user: user }),\n            },\n            cephfsType:: hidden.core.v1.cephFsPersistentVolumeSource,\n            // Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n            cinder:: {\n              local __cinderMixin(cinder) = __specMixin({ cinder+: cinder }),\n              mixinInstance(cinder):: __cinderMixin(cinder),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n              withFsType(fsType):: self + __cinderMixin({ fsType: fsType }),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n              withReadOnly(readOnly):: self + __cinderMixin({ readOnly: readOnly }),\n              // Optional: points to a secret object containing parameters used to connect to OpenStack.\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __cinderMixin({ secretRef+: secretRef }),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name is unique within a namespace to reference a secret resource.\n                withName(name):: self + __secretRefMixin({ name: name }),\n                // Namespace defines the space within which the secret name must be unique.\n                withNamespace(namespace):: self + __secretRefMixin({ namespace: namespace }),\n              },\n              secretRefType:: hidden.core.v1.secretReference,\n              // volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n              withVolumeId(volumeId):: self + __cinderMixin({ volumeID: volumeId }),\n            },\n            cinderType:: hidden.core.v1.cinderPersistentVolumeSource,\n            // ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding\n            claimRef:: {\n              local __claimRefMixin(claimRef) = __specMixin({ claimRef+: claimRef }),\n              mixinInstance(claimRef):: __claimRefMixin(claimRef),\n              // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\n              withFieldPath(fieldPath):: self + __claimRefMixin({ fieldPath: fieldPath }),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __claimRefMixin({ name: name }),\n              // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n              withNamespace(namespace):: self + __claimRefMixin({ namespace: namespace }),\n              // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n              withResourceVersion(resourceVersion):: self + __claimRefMixin({ resourceVersion: resourceVersion }),\n              // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n              withUid(uid):: self + __claimRefMixin({ uid: uid }),\n            },\n            claimRefType:: hidden.core.v1.objectReference,\n            // CSI represents storage that handled by an external CSI driver (Beta feature).\n            csi:: {\n              local __csiMixin(csi) = __specMixin({ csi+: csi }),\n              mixinInstance(csi):: __csiMixin(csi),\n              // ControllerPublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerPublishVolume and ControllerUnpublishVolume calls. This field is optional, and  may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.\n              controllerPublishSecretRef:: {\n                local __controllerPublishSecretRefMixin(controllerPublishSecretRef) = __csiMixin({ controllerPublishSecretRef+: controllerPublishSecretRef }),\n                mixinInstance(controllerPublishSecretRef):: __controllerPublishSecretRefMixin(controllerPublishSecretRef),\n                // Name is unique within a namespace to reference a secret resource.\n                withName(name):: self + __controllerPublishSecretRefMixin({ name: name }),\n                // Namespace defines the space within which the secret name must be unique.\n                withNamespace(namespace):: self + __controllerPublishSecretRefMixin({ namespace: namespace }),\n              },\n              controllerPublishSecretRefType:: hidden.core.v1.secretReference,\n              // Driver is the name of the driver to use for this volume. Required.\n              withDriver(driver):: self + __csiMixin({ driver: driver }),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\".\n              withFsType(fsType):: self + __csiMixin({ fsType: fsType }),\n              // NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and  may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.\n              nodePublishSecretRef:: {\n                local __nodePublishSecretRefMixin(nodePublishSecretRef) = __csiMixin({ nodePublishSecretRef+: nodePublishSecretRef }),\n                mixinInstance(nodePublishSecretRef):: __nodePublishSecretRefMixin(nodePublishSecretRef),\n                // Name is unique within a namespace to reference a secret resource.\n                withName(name):: self + __nodePublishSecretRefMixin({ name: name }),\n                // Namespace defines the space within which the secret name must be unique.\n                withNamespace(namespace):: self + __nodePublishSecretRefMixin({ namespace: namespace }),\n              },\n              nodePublishSecretRefType:: hidden.core.v1.secretReference,\n              // NodeStageSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodeStageVolume and NodeStageVolume and NodeUnstageVolume calls. This field is optional, and  may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.\n              nodeStageSecretRef:: {\n                local __nodeStageSecretRefMixin(nodeStageSecretRef) = __csiMixin({ nodeStageSecretRef+: nodeStageSecretRef }),\n                mixinInstance(nodeStageSecretRef):: __nodeStageSecretRefMixin(nodeStageSecretRef),\n                // Name is unique within a namespace to reference a secret resource.\n                withName(name):: self + __nodeStageSecretRefMixin({ name: name }),\n                // Namespace defines the space within which the secret name must be unique.\n                withNamespace(namespace):: self + __nodeStageSecretRefMixin({ namespace: namespace }),\n              },\n              nodeStageSecretRefType:: hidden.core.v1.secretReference,\n              // Optional: The value to pass to ControllerPublishVolumeRequest. Defaults to false (read/write).\n              withReadOnly(readOnly):: self + __csiMixin({ readOnly: readOnly }),\n              // Attributes of the volume to publish.\n              withVolumeAttributes(volumeAttributes):: self + __csiMixin({ volumeAttributes: volumeAttributes }),\n              // Attributes of the volume to publish.\n              withVolumeAttributesMixin(volumeAttributes):: self + __csiMixin({ volumeAttributes+: volumeAttributes }),\n              // VolumeHandle is the unique volume name returned by the CSI volume plugin’s CreateVolume to refer to the volume on all subsequent calls. Required.\n              withVolumeHandle(volumeHandle):: self + __csiMixin({ volumeHandle: volumeHandle }),\n            },\n            csiType:: hidden.core.v1.csiPersistentVolumeSource,\n            // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.\n            fc:: {\n              local __fcMixin(fc) = __specMixin({ fc+: fc }),\n              mixinInstance(fc):: __fcMixin(fc),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __fcMixin({ fsType: fsType }),\n              // Optional: FC target lun number\n              withLun(lun):: self + __fcMixin({ lun: lun }),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __fcMixin({ readOnly: readOnly }),\n              // Optional: FC target worldwide names (WWNs)\n              withTargetWwns(targetWwns):: self + if std.type(targetWwns) == 'array' then __fcMixin({ targetWWNs: targetWwns }) else __fcMixin({ targetWWNs: [targetWwns] }),\n              // Optional: FC target worldwide names (WWNs)\n              withTargetWwnsMixin(targetWwns):: self + if std.type(targetWwns) == 'array' then __fcMixin({ targetWWNs+: targetWwns }) else __fcMixin({ targetWWNs+: [targetWwns] }),\n              // Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.\n              withWwids(wwids):: self + if std.type(wwids) == 'array' then __fcMixin({ wwids: wwids }) else __fcMixin({ wwids: [wwids] }),\n              // Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.\n              withWwidsMixin(wwids):: self + if std.type(wwids) == 'array' then __fcMixin({ wwids+: wwids }) else __fcMixin({ wwids+: [wwids] }),\n            },\n            fcType:: hidden.core.v1.fcVolumeSource,\n            // FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.\n            flexVolume:: {\n              local __flexVolumeMixin(flexVolume) = __specMixin({ flexVolume+: flexVolume }),\n              mixinInstance(flexVolume):: __flexVolumeMixin(flexVolume),\n              // Driver is the name of the driver to use for this volume.\n              withDriver(driver):: self + __flexVolumeMixin({ driver: driver }),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.\n              withFsType(fsType):: self + __flexVolumeMixin({ fsType: fsType }),\n              // Optional: Extra command options if any.\n              withOptions(options):: self + __flexVolumeMixin({ options: options }),\n              // Optional: Extra command options if any.\n              withOptionsMixin(options):: self + __flexVolumeMixin({ options+: options }),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __flexVolumeMixin({ readOnly: readOnly }),\n              // Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __flexVolumeMixin({ secretRef+: secretRef }),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name is unique within a namespace to reference a secret resource.\n                withName(name):: self + __secretRefMixin({ name: name }),\n                // Namespace defines the space within which the secret name must be unique.\n                withNamespace(namespace):: self + __secretRefMixin({ namespace: namespace }),\n              },\n              secretRefType:: hidden.core.v1.secretReference,\n            },\n            flexVolumeType:: hidden.core.v1.flexPersistentVolumeSource,\n            // Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running\n            flocker:: {\n              local __flockerMixin(flocker) = __specMixin({ flocker+: flocker }),\n              mixinInstance(flocker):: __flockerMixin(flocker),\n              // Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated\n              withDatasetName(datasetName):: self + __flockerMixin({ datasetName: datasetName }),\n              // UUID of the dataset. This is unique identifier of a Flocker dataset\n              withDatasetUuid(datasetUuid):: self + __flockerMixin({ datasetUUID: datasetUuid }),\n            },\n            flockerType:: hidden.core.v1.flockerVolumeSource,\n            // GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n            gcePersistentDisk:: {\n              local __gcePersistentDiskMixin(gcePersistentDisk) = __specMixin({ gcePersistentDisk+: gcePersistentDisk }),\n              mixinInstance(gcePersistentDisk):: __gcePersistentDiskMixin(gcePersistentDisk),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withFsType(fsType):: self + __gcePersistentDiskMixin({ fsType: fsType }),\n              // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withPartition(partition):: self + __gcePersistentDiskMixin({ partition: partition }),\n              // Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withPdName(pdName):: self + __gcePersistentDiskMixin({ pdName: pdName }),\n              // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withReadOnly(readOnly):: self + __gcePersistentDiskMixin({ readOnly: readOnly }),\n            },\n            gcePersistentDiskType:: hidden.core.v1.gcePersistentDiskVolumeSource,\n            // Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md\n            glusterfs:: {\n              local __glusterfsMixin(glusterfs) = __specMixin({ glusterfs+: glusterfs }),\n              mixinInstance(glusterfs):: __glusterfsMixin(glusterfs),\n              // EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n              withEndpoints(endpoints):: self + __glusterfsMixin({ endpoints: endpoints }),\n              // Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n              withPath(path):: self + __glusterfsMixin({ path: path }),\n              // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n              withReadOnly(readOnly):: self + __glusterfsMixin({ readOnly: readOnly }),\n            },\n            glusterfsType:: hidden.core.v1.glusterfsVolumeSource,\n            // HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\n            hostPath:: {\n              local __hostPathMixin(hostPath) = __specMixin({ hostPath+: hostPath }),\n              mixinInstance(hostPath):: __hostPathMixin(hostPath),\n              // Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\n              withPath(path):: self + __hostPathMixin({ path: path }),\n              // Type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\n              withType(type):: self + __hostPathMixin({ type: type }),\n            },\n            hostPathType:: hidden.core.v1.hostPathVolumeSource,\n            // ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin.\n            iscsi:: {\n              local __iscsiMixin(iscsi) = __specMixin({ iscsi+: iscsi }),\n              mixinInstance(iscsi):: __iscsiMixin(iscsi),\n              // whether support iSCSI Discovery CHAP authentication\n              withChapAuthDiscovery(chapAuthDiscovery):: self + __iscsiMixin({ chapAuthDiscovery: chapAuthDiscovery }),\n              // whether support iSCSI Session CHAP authentication\n              withChapAuthSession(chapAuthSession):: self + __iscsiMixin({ chapAuthSession: chapAuthSession }),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi\n              withFsType(fsType):: self + __iscsiMixin({ fsType: fsType }),\n              // Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface <target portal>:<volume name> will be created for the connection.\n              withInitiatorName(initiatorName):: self + __iscsiMixin({ initiatorName: initiatorName }),\n              // Target iSCSI Qualified Name.\n              withIqn(iqn):: self + __iscsiMixin({ iqn: iqn }),\n              // iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).\n              withIscsiInterface(iscsiInterface):: self + __iscsiMixin({ iscsiInterface: iscsiInterface }),\n              // iSCSI Target Lun number.\n              withLun(lun):: self + __iscsiMixin({ lun: lun }),\n              // iSCSI Target Portal List. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n              withPortals(portals):: self + if std.type(portals) == 'array' then __iscsiMixin({ portals: portals }) else __iscsiMixin({ portals: [portals] }),\n              // iSCSI Target Portal List. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n              withPortalsMixin(portals):: self + if std.type(portals) == 'array' then __iscsiMixin({ portals+: portals }) else __iscsiMixin({ portals+: [portals] }),\n              // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.\n              withReadOnly(readOnly):: self + __iscsiMixin({ readOnly: readOnly }),\n              // CHAP Secret for iSCSI target and initiator authentication\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __iscsiMixin({ secretRef+: secretRef }),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name is unique within a namespace to reference a secret resource.\n                withName(name):: self + __secretRefMixin({ name: name }),\n                // Namespace defines the space within which the secret name must be unique.\n                withNamespace(namespace):: self + __secretRefMixin({ namespace: namespace }),\n              },\n              secretRefType:: hidden.core.v1.secretReference,\n              // iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n              withTargetPortal(targetPortal):: self + __iscsiMixin({ targetPortal: targetPortal }),\n            },\n            iscsiType:: hidden.core.v1.iscsiPersistentVolumeSource,\n            // Local represents directly-attached storage with node affinity\n            localStorage:: {\n              local __localStorageMixin(localStorage) = __specMixin({ localStorage+: localStorage }),\n              mixinInstance(localStorage):: __localStorageMixin(localStorage),\n              // The full path to the volume on the node. It can be either a directory or block device (disk, partition, ...). Directories can be represented only by PersistentVolume with VolumeMode=Filesystem. Block devices can be represented only by VolumeMode=Block, which also requires the BlockVolume alpha feature gate to be enabled.\n              withPath(path):: self + __localStorageMixin({ path: path }),\n            },\n            localType:: hidden.core.v1.localVolumeSource,\n            // A list of mount options, e.g. [\"ro\", \"soft\"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options\n            withMountOptions(mountOptions):: self + if std.type(mountOptions) == 'array' then __specMixin({ mountOptions: mountOptions }) else __specMixin({ mountOptions: [mountOptions] }),\n            // A list of mount options, e.g. [\"ro\", \"soft\"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options\n            withMountOptionsMixin(mountOptions):: self + if std.type(mountOptions) == 'array' then __specMixin({ mountOptions+: mountOptions }) else __specMixin({ mountOptions+: [mountOptions] }),\n            // NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n            nfs:: {\n              local __nfsMixin(nfs) = __specMixin({ nfs+: nfs }),\n              mixinInstance(nfs):: __nfsMixin(nfs),\n              // Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n              withPath(path):: self + __nfsMixin({ path: path }),\n              // ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n              withReadOnly(readOnly):: self + __nfsMixin({ readOnly: readOnly }),\n              // Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n              withServer(server):: self + __nfsMixin({ server: server }),\n            },\n            nfsType:: hidden.core.v1.nfsVolumeSource,\n            // NodeAffinity defines constraints that limit what nodes this volume can be accessed from. This field influences the scheduling of pods that use this volume.\n            nodeAffinity:: {\n              local __nodeAffinityMixin(nodeAffinity) = __specMixin({ nodeAffinity+: nodeAffinity }),\n              mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n              // Required specifies hard node constraints that must be met.\n              required:: {\n                local __requiredMixin(required) = __nodeAffinityMixin({ required+: required }),\n                mixinInstance(required):: __requiredMixin(required),\n                // Required. A list of node selector terms. The terms are ORed.\n                withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                // Required. A list of node selector terms. The terms are ORed.\n                withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n              },\n              requiredType:: hidden.core.v1.nodeSelector,\n            },\n            nodeAffinityType:: hidden.core.v1.volumeNodeAffinity,\n            // What happens to a persistent volume when released from its claim. Valid options are Retain (default for manually created PersistentVolumes), Delete (default for dynamically provisioned PersistentVolumes), and Recycle (deprecated). Recycle must be supported by the volume plugin underlying this PersistentVolume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming\n            withPersistentVolumeReclaimPolicy(persistentVolumeReclaimPolicy):: self + __specMixin({ persistentVolumeReclaimPolicy: persistentVolumeReclaimPolicy }),\n            // PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine\n            photonPersistentDisk:: {\n              local __photonPersistentDiskMixin(photonPersistentDisk) = __specMixin({ photonPersistentDisk+: photonPersistentDisk }),\n              mixinInstance(photonPersistentDisk):: __photonPersistentDiskMixin(photonPersistentDisk),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __photonPersistentDiskMixin({ fsType: fsType }),\n              // ID that identifies Photon Controller persistent disk\n              withPdId(pdId):: self + __photonPersistentDiskMixin({ pdID: pdId }),\n            },\n            photonPersistentDiskType:: hidden.core.v1.photonPersistentDiskVolumeSource,\n            // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine\n            portworxVolume:: {\n              local __portworxVolumeMixin(portworxVolume) = __specMixin({ portworxVolume+: portworxVolume }),\n              mixinInstance(portworxVolume):: __portworxVolumeMixin(portworxVolume),\n              // FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __portworxVolumeMixin({ fsType: fsType }),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __portworxVolumeMixin({ readOnly: readOnly }),\n              // VolumeID uniquely identifies a Portworx volume\n              withVolumeId(volumeId):: self + __portworxVolumeMixin({ volumeID: volumeId }),\n            },\n            portworxVolumeType:: hidden.core.v1.portworxVolumeSource,\n            // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime\n            quobyte:: {\n              local __quobyteMixin(quobyte) = __specMixin({ quobyte+: quobyte }),\n              mixinInstance(quobyte):: __quobyteMixin(quobyte),\n              // Group to map volume access to Default is no group\n              withGroup(group):: self + __quobyteMixin({ group: group }),\n              // ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.\n              withReadOnly(readOnly):: self + __quobyteMixin({ readOnly: readOnly }),\n              // Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes\n              withRegistry(registry):: self + __quobyteMixin({ registry: registry }),\n              // User to map volume access to Defaults to serivceaccount user\n              withUser(user):: self + __quobyteMixin({ user: user }),\n              // Volume is a string that references an already created Quobyte volume by name.\n              withVolume(volume):: self + __quobyteMixin({ volume: volume }),\n            },\n            quobyteType:: hidden.core.v1.quobyteVolumeSource,\n            // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md\n            rbd:: {\n              local __rbdMixin(rbd) = __specMixin({ rbd+: rbd }),\n              mixinInstance(rbd):: __rbdMixin(rbd),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd\n              withFsType(fsType):: self + __rbdMixin({ fsType: fsType }),\n              // The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withImage(image):: self + __rbdMixin({ image: image }),\n              // Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withKeyring(keyring):: self + __rbdMixin({ keyring: keyring }),\n              // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withMonitors(monitors):: self + if std.type(monitors) == 'array' then __rbdMixin({ monitors: monitors }) else __rbdMixin({ monitors: [monitors] }),\n              // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withMonitorsMixin(monitors):: self + if std.type(monitors) == 'array' then __rbdMixin({ monitors+: monitors }) else __rbdMixin({ monitors+: [monitors] }),\n              // The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withPool(pool):: self + __rbdMixin({ pool: pool }),\n              // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withReadOnly(readOnly):: self + __rbdMixin({ readOnly: readOnly }),\n              // SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __rbdMixin({ secretRef+: secretRef }),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name is unique within a namespace to reference a secret resource.\n                withName(name):: self + __secretRefMixin({ name: name }),\n                // Namespace defines the space within which the secret name must be unique.\n                withNamespace(namespace):: self + __secretRefMixin({ namespace: namespace }),\n              },\n              secretRefType:: hidden.core.v1.secretReference,\n              // The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withUser(user):: self + __rbdMixin({ user: user }),\n            },\n            rbdType:: hidden.core.v1.rbdPersistentVolumeSource,\n            // ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.\n            scaleIo:: {\n              local __scaleIoMixin(scaleIo) = __specMixin({ scaleIo+: scaleIo }),\n              mixinInstance(scaleIo):: __scaleIoMixin(scaleIo),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __scaleIoMixin({ fsType: fsType }),\n              // The host address of the ScaleIO API Gateway.\n              withGateway(gateway):: self + __scaleIoMixin({ gateway: gateway }),\n              // The name of the ScaleIO Protection Domain for the configured storage.\n              withProtectionDomain(protectionDomain):: self + __scaleIoMixin({ protectionDomain: protectionDomain }),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __scaleIoMixin({ readOnly: readOnly }),\n              // SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __scaleIoMixin({ secretRef+: secretRef }),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name is unique within a namespace to reference a secret resource.\n                withName(name):: self + __secretRefMixin({ name: name }),\n                // Namespace defines the space within which the secret name must be unique.\n                withNamespace(namespace):: self + __secretRefMixin({ namespace: namespace }),\n              },\n              secretRefType:: hidden.core.v1.secretReference,\n              // Flag to enable/disable SSL communication with Gateway, default false\n              withSslEnabled(sslEnabled):: self + __scaleIoMixin({ sslEnabled: sslEnabled }),\n              // Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned.\n              withStorageMode(storageMode):: self + __scaleIoMixin({ storageMode: storageMode }),\n              // The ScaleIO Storage Pool associated with the protection domain.\n              withStoragePool(storagePool):: self + __scaleIoMixin({ storagePool: storagePool }),\n              // The name of the storage system as configured in ScaleIO.\n              withSystem(system):: self + __scaleIoMixin({ system: system }),\n              // The name of a volume already created in the ScaleIO system that is associated with this volume source.\n              withVolumeName(volumeName):: self + __scaleIoMixin({ volumeName: volumeName }),\n            },\n            scaleIOType:: hidden.core.v1.scaleIoPersistentVolumeSource,\n            // Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.\n            withStorageClassName(storageClassName):: self + __specMixin({ storageClassName: storageClassName }),\n            // StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md\n            storageos:: {\n              local __storageosMixin(storageos) = __specMixin({ storageos+: storageos }),\n              mixinInstance(storageos):: __storageosMixin(storageos),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __storageosMixin({ fsType: fsType }),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __storageosMixin({ readOnly: readOnly }),\n              // SecretRef specifies the secret to use for obtaining the StorageOS API credentials.  If not specified, default values will be attempted.\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __storageosMixin({ secretRef+: secretRef }),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\n                withFieldPath(fieldPath):: self + __secretRefMixin({ fieldPath: fieldPath }),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({ name: name }),\n                // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n                withNamespace(namespace):: self + __secretRefMixin({ namespace: namespace }),\n                // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n                withResourceVersion(resourceVersion):: self + __secretRefMixin({ resourceVersion: resourceVersion }),\n                // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n                withUid(uid):: self + __secretRefMixin({ uid: uid }),\n              },\n              secretRefType:: hidden.core.v1.objectReference,\n              // VolumeName is the human-readable name of the StorageOS volume.  Volume names are only unique within a namespace.\n              withVolumeName(volumeName):: self + __storageosMixin({ volumeName: volumeName }),\n              // VolumeNamespace specifies the scope of the volume within StorageOS.  If no namespace is specified then the Pod's namespace will be used.  This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.\n              withVolumeNamespace(volumeNamespace):: self + __storageosMixin({ volumeNamespace: volumeNamespace }),\n            },\n            storageosType:: hidden.core.v1.storageOsPersistentVolumeSource,\n            // volumeMode defines if a volume is intended to be used with a formatted filesystem or to remain in raw block state. Value of Filesystem is implied when not included in spec. This is an alpha feature and may change in the future.\n            withVolumeMode(volumeMode):: self + __specMixin({ volumeMode: volumeMode }),\n            // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine\n            vsphereVolume:: {\n              local __vsphereVolumeMixin(vsphereVolume) = __specMixin({ vsphereVolume+: vsphereVolume }),\n              mixinInstance(vsphereVolume):: __vsphereVolumeMixin(vsphereVolume),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __vsphereVolumeMixin({ fsType: fsType }),\n              // Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.\n              withStoragePolicyId(storagePolicyId):: self + __vsphereVolumeMixin({ storagePolicyID: storagePolicyId }),\n              // Storage Policy Based Management (SPBM) profile name.\n              withStoragePolicyName(storagePolicyName):: self + __vsphereVolumeMixin({ storagePolicyName: storagePolicyName }),\n              // Path that identifies vSphere volume vmdk\n              withVolumePath(volumePath):: self + __vsphereVolumeMixin({ volumePath: volumePath }),\n            },\n            vsphereVolumeType:: hidden.core.v1.vsphereVirtualDiskVolumeSource,\n          },\n          specType:: hidden.core.v1.persistentVolumeSpec,\n        },\n      },\n      // PersistentVolumeClaim is a user's request for and claim to a persistent volume\n      persistentVolumeClaim:: {\n        local kind = { kind: 'PersistentVolumeClaim' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the desired characteristics of a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1\n            withAccessModes(accessModes):: self + if std.type(accessModes) == 'array' then __specMixin({ accessModes: accessModes }) else __specMixin({ accessModes: [accessModes] }),\n            // AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1\n            withAccessModesMixin(accessModes):: self + if std.type(accessModes) == 'array' then __specMixin({ accessModes+: accessModes }) else __specMixin({ accessModes+: [accessModes] }),\n            // Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources\n            resources:: {\n              local __resourcesMixin(resources) = __specMixin({ resources+: resources }),\n              mixinInstance(resources):: __resourcesMixin(resources),\n              // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withLimits(limits):: self + __resourcesMixin({ limits: limits }),\n              // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withLimitsMixin(limits):: self + __resourcesMixin({ limits+: limits }),\n              // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withRequests(requests):: self + __resourcesMixin({ requests: requests }),\n              // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withRequestsMixin(requests):: self + __resourcesMixin({ requests+: requests }),\n            },\n            resourcesType:: hidden.core.v1.resourceRequirements,\n            // A label query over volumes to consider for binding.\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1\n            withStorageClassName(storageClassName):: self + __specMixin({ storageClassName: storageClassName }),\n            // volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec. This is an alpha feature and may change in the future.\n            withVolumeMode(volumeMode):: self + __specMixin({ volumeMode: volumeMode }),\n            // VolumeName is the binding reference to the PersistentVolume backing this claim.\n            withVolumeName(volumeName):: self + __specMixin({ volumeName: volumeName }),\n          },\n          specType:: hidden.core.v1.persistentVolumeClaimSpec,\n        },\n      },\n      // Pod is a collection of containers that can run on a host. This resource is created by clients and scheduled onto hosts.\n      pod:: {\n        local kind = { kind: 'Pod' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n            withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n            // If specified, the pod's scheduling constraints\n            affinity:: {\n              local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n              mixinInstance(affinity):: __affinityMixin(affinity),\n              // Describes node affinity scheduling rules for the pod.\n              nodeAffinity:: {\n                local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                requiredDuringSchedulingIgnoredDuringExecution:: {\n                  local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                  mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                  // Required. A list of node selector terms. The terms are ORed.\n                  withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                  // Required. A list of node selector terms. The terms are ORed.\n                  withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                  nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                },\n                requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n              },\n              nodeAffinityType:: hidden.core.v1.nodeAffinity,\n              // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n              podAffinity:: {\n                local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n              },\n              podAffinityType:: hidden.core.v1.podAffinity,\n              // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n              podAntiAffinity:: {\n                local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n              },\n              podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n            },\n            affinityType:: hidden.core.v1.affinity,\n            // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n            withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n            // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n            withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n            // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n            withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n            containersType:: hidden.core.v1.container,\n            // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n            dnsConfig:: {\n              local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n              mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n              // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n              withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n              // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n              withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n              // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n              withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n              // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n              withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n              optionsType:: hidden.core.v1.podDnsConfigOption,\n              // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n              withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n              // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n              withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n            },\n            dnsConfigType:: hidden.core.v1.podDnsConfig,\n            // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n            withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n            // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n            withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n            // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n            withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n            hostAliasesType:: hidden.core.v1.hostAlias,\n            // Use the host's ipc namespace. Optional: Default to false.\n            withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n            // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n            withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n            // Use the host's pid namespace. Optional: Default to false.\n            withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n            // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n            withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n            // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n            withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n            // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n            withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n            imagePullSecretsType:: hidden.core.v1.localObjectReference,\n            // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n            withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n            // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n            withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n            initContainersType:: hidden.core.v1.container,\n            // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n            withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n            // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n            withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n            // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n            withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n            // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n            withPriority(priority):: self + __specMixin({ priority: priority }),\n            // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n            withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n            // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n            withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n            // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n            withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n            readinessGatesType:: hidden.core.v1.podReadinessGate,\n            // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n            withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n            // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n            withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n            // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n            securityContext:: {\n              local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n              mixinInstance(securityContext):: __securityContextMixin(securityContext),\n              // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n              //\n              // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n              //\n              // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n              withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n              // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n              withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n              // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n              withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n              // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n              withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n              // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n              seLinuxOptions:: {\n                local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                // Level is SELinux level label that applies to the container.\n                withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                // Role is a SELinux role label that applies to the container.\n                withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                // Type is a SELinux type label that applies to the container.\n                withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                // User is a SELinux user label that applies to the container.\n                withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n              },\n              seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n              // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n              withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n              // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n              withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n              // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n              withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n              // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n              withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n              sysctlsType:: hidden.core.v1.sysctl,\n            },\n            securityContextType:: hidden.core.v1.podSecurityContext,\n            // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n            withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n            // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n            withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n            // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n            withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n            // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n            withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n            // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n            withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n            // If specified, the pod's tolerations.\n            withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n            // If specified, the pod's tolerations.\n            withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n            tolerationsType:: hidden.core.v1.toleration,\n            // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n            withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n            // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n            withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n            volumesType:: hidden.core.v1.volume,\n          },\n          specType:: hidden.core.v1.podSpec,\n        },\n      },\n      // PodTemplate describes a template for creating copies of a predefined pod.\n      podTemplate:: {\n        local kind = { kind: 'PodTemplate' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Template defines the pods that will be created from this pod template. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          template:: {\n            local __templateMixin(template) = { template+: template },\n            mixinInstance(template):: __templateMixin(template),\n            // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n            metadata:: {\n              local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n              mixinInstance(metadata):: __metadataMixin(metadata),\n              // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n              withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n              // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n              withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n              // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n              withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n              // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n              withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n              // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n              withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n              // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n              //\n              // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n              //\n              // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n              withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n              // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n              //\n              // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n              initializers:: {\n                local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                mixinInstance(initializers):: __initializersMixin(initializers),\n                // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                pendingType:: hidden.meta.v1.initializer,\n              },\n              initializersType:: hidden.meta.v1.initializers,\n              // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n              withLabels(labels):: self + __metadataMixin({ labels: labels }),\n              // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n              withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n              // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n              withName(name):: self + __metadataMixin({ name: name }),\n              // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n              //\n              // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n              withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n              // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n              withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n              // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n              withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n              ownerReferencesType:: hidden.meta.v1.ownerReference,\n            },\n            metadataType:: hidden.meta.v1.objectMeta,\n            // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n            spec:: {\n              local __specMixin(spec) = __templateMixin({ spec+: spec }),\n              mixinInstance(spec):: __specMixin(spec),\n              // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n              withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n              // If specified, the pod's scheduling constraints\n              affinity:: {\n                local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                mixinInstance(affinity):: __affinityMixin(affinity),\n                // Describes node affinity scheduling rules for the pod.\n                nodeAffinity:: {\n                  local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                  mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                  preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                  // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                  requiredDuringSchedulingIgnoredDuringExecution:: {\n                    local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                    mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                    // Required. A list of node selector terms. The terms are ORed.\n                    withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                    // Required. A list of node selector terms. The terms are ORed.\n                    withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                    nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                  },\n                  requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                },\n                nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                podAffinity:: {\n                  local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                  mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                  preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                  // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                  withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                  // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                  withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                  requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                },\n                podAffinityType:: hidden.core.v1.podAffinity,\n                // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                podAntiAffinity:: {\n                  local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                  mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                  preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                  // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                  withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                  // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                  withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                  requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                },\n                podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n              },\n              affinityType:: hidden.core.v1.affinity,\n              // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n              withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n              // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n              withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n              // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n              withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n              containersType:: hidden.core.v1.container,\n              // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n              dnsConfig:: {\n                local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                optionsType:: hidden.core.v1.podDnsConfigOption,\n                // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n              },\n              dnsConfigType:: hidden.core.v1.podDnsConfig,\n              // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n              withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n              // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n              withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n              // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n              withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n              hostAliasesType:: hidden.core.v1.hostAlias,\n              // Use the host's ipc namespace. Optional: Default to false.\n              withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n              // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n              withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n              // Use the host's pid namespace. Optional: Default to false.\n              withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n              // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n              withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n              // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n              withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n              // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n              withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n              imagePullSecretsType:: hidden.core.v1.localObjectReference,\n              // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n              withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n              // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n              withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n              initContainersType:: hidden.core.v1.container,\n              // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n              withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n              // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n              withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n              // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n              withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n              // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n              withPriority(priority):: self + __specMixin({ priority: priority }),\n              // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n              withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n              // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n              withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n              // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n              withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n              readinessGatesType:: hidden.core.v1.podReadinessGate,\n              // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n              withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n              // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n              withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n              // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n              securityContext:: {\n                local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                //\n                // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                //\n                // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                seLinuxOptions:: {\n                  local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                  mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                  // Level is SELinux level label that applies to the container.\n                  withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                  // Role is a SELinux role label that applies to the container.\n                  withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                  // Type is a SELinux type label that applies to the container.\n                  withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                  // User is a SELinux user label that applies to the container.\n                  withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                },\n                seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                sysctlsType:: hidden.core.v1.sysctl,\n              },\n              securityContextType:: hidden.core.v1.podSecurityContext,\n              // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n              withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n              // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n              withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n              // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n              withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n              // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n              withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n              // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n              withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n              // If specified, the pod's tolerations.\n              withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n              // If specified, the pod's tolerations.\n              withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n              tolerationsType:: hidden.core.v1.toleration,\n              // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n              withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n              // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n              withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n              volumesType:: hidden.core.v1.volume,\n            },\n            specType:: hidden.core.v1.podSpec,\n          },\n          templateType:: hidden.core.v1.podTemplateSpec,\n        },\n      },\n      // ReplicationController represents the configuration of a replication controller.\n      replicationController:: {\n        local kind = { kind: 'ReplicationController' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // If the Labels of a ReplicationController are empty, they are defaulted to be the same as the Pod(s) that the replication controller manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the specification of the desired behavior of the replication controller. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n            withMinReadySeconds(minReadySeconds):: self + __specMixin({ minReadySeconds: minReadySeconds }),\n            // Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller\n            withReplicas(replicas):: self + __specMixin({ replicas: replicas }),\n            // Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            withSelector(selector):: self + __specMixin({ selector: selector }),\n            // Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            withSelectorMixin(selector):: self + __specMixin({ selector+: selector }),\n            // Template is the object that describes the pod that will be created if insufficient replicas are detected. This takes precedence over a TemplateRef. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\n            template:: {\n              local __templateMixin(template) = __specMixin({ template+: template }),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n          specType:: hidden.core.v1.replicationControllerSpec,\n        },\n      },\n      // ResourceQuota sets aggregate quota restrictions enforced per namespace\n      resourceQuota:: {\n        local kind = { kind: 'ResourceQuota' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the desired quota. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // hard is the set of desired hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/\n            withHard(hard):: self + __specMixin({ hard: hard }),\n            // hard is the set of desired hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/\n            withHardMixin(hard):: self + __specMixin({ hard+: hard }),\n            // scopeSelector is also a collection of filters like scopes that must match each object tracked by a quota but expressed using ScopeSelectorOperator in combination with possible values. For a resource to match, both scopes AND scopeSelector (if specified in spec), must be matched.\n            scopeSelector:: {\n              local __scopeSelectorMixin(scopeSelector) = __specMixin({ scopeSelector+: scopeSelector }),\n              mixinInstance(scopeSelector):: __scopeSelectorMixin(scopeSelector),\n              // A list of scope selector requirements by scope of the resources.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __scopeSelectorMixin({ matchExpressions: matchExpressions }) else __scopeSelectorMixin({ matchExpressions: [matchExpressions] }),\n              // A list of scope selector requirements by scope of the resources.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __scopeSelectorMixin({ matchExpressions+: matchExpressions }) else __scopeSelectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.core.v1.scopedResourceSelectorRequirement,\n            },\n            scopeSelectorType:: hidden.core.v1.scopeSelector,\n            // A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects.\n            withScopes(scopes):: self + if std.type(scopes) == 'array' then __specMixin({ scopes: scopes }) else __specMixin({ scopes: [scopes] }),\n            // A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects.\n            withScopesMixin(scopes):: self + if std.type(scopes) == 'array' then __specMixin({ scopes+: scopes }) else __specMixin({ scopes+: [scopes] }),\n          },\n          specType:: hidden.core.v1.resourceQuotaSpec,\n        },\n      },\n      // Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes.\n      secret:: {\n        local kind = { kind: 'Secret' },\n        new(name='', data='', type='Opaque'):: apiVersion + kind + self.withData(data).withType(type) + self.mixin.metadata.withName(name),\n        // Data contains the secret data. Each key must consist of alphanumeric characters, '-', '_' or '.'. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4\n        withData(data):: self + { data: data },\n        // Data contains the secret data. Each key must consist of alphanumeric characters, '-', '_' or '.'. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4\n        withDataMixin(data):: self + { data+: data },\n        // stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API.\n        withStringData(stringData):: self + { stringData: stringData },\n        // stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API.\n        withStringDataMixin(stringData):: self + { stringData+: stringData },\n        // Used to facilitate programmatic handling of secret data.\n        withType(type):: self + { type: type },\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // Service is a named abstraction of software service (for example, mysql) consisting of local port (for example 3306) that the proxy listens on, and the selector that determines which pods will answer requests sent through the proxy.\n      service:: {\n        local kind = { kind: 'Service' },\n        new(name='', selector='', ports=''):: apiVersion + kind + self.mixin.metadata.withName(name) + self.mixin.spec.withPorts(ports).withSelector(selector),\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the behavior of a service. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // clusterIP is the IP address of the service and is usually assigned randomly by the master. If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail. This field can not be changed through updates. Valid values are \"None\", empty string (\"\"), or a valid IP address. \"None\" can be specified for headless services when proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\n            withClusterIp(clusterIp):: self + __specMixin({ clusterIP: clusterIp }),\n            // externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service.  These IPs are not managed by Kubernetes.  The user is responsible for ensuring that traffic arrives at a node with this IP.  A common example is external load-balancers that are not part of the Kubernetes system.\n            withExternalIps(externalIps):: self + if std.type(externalIps) == 'array' then __specMixin({ externalIPs: externalIps }) else __specMixin({ externalIPs: [externalIps] }),\n            // externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service.  These IPs are not managed by Kubernetes.  The user is responsible for ensuring that traffic arrives at a node with this IP.  A common example is external load-balancers that are not part of the Kubernetes system.\n            withExternalIpsMixin(externalIps):: self + if std.type(externalIps) == 'array' then __specMixin({ externalIPs+: externalIps }) else __specMixin({ externalIPs+: [externalIps] }),\n            // externalName is the external reference that kubedns or equivalent will return as a CNAME record for this service. No proxying will be involved. Must be a valid RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) and requires Type to be ExternalName.\n            withExternalName(externalName):: self + __specMixin({ externalName: externalName }),\n            // externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. \"Local\" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. \"Cluster\" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading.\n            withExternalTrafficPolicy(externalTrafficPolicy):: self + __specMixin({ externalTrafficPolicy: externalTrafficPolicy }),\n            // healthCheckNodePort specifies the healthcheck nodePort for the service. If not specified, HealthCheckNodePort is created by the service api backend with the allocated nodePort. Will use user-specified nodePort value if specified by the client. Only effects when Type is set to LoadBalancer and ExternalTrafficPolicy is set to Local.\n            withHealthCheckNodePort(healthCheckNodePort):: self + __specMixin({ healthCheckNodePort: healthCheckNodePort }),\n            // Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.\n            withLoadBalancerIp(loadBalancerIp):: self + __specMixin({ loadBalancerIP: loadBalancerIp }),\n            // If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature.\" More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/\n            withLoadBalancerSourceRanges(loadBalancerSourceRanges):: self + if std.type(loadBalancerSourceRanges) == 'array' then __specMixin({ loadBalancerSourceRanges: loadBalancerSourceRanges }) else __specMixin({ loadBalancerSourceRanges: [loadBalancerSourceRanges] }),\n            // If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature.\" More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/\n            withLoadBalancerSourceRangesMixin(loadBalancerSourceRanges):: self + if std.type(loadBalancerSourceRanges) == 'array' then __specMixin({ loadBalancerSourceRanges+: loadBalancerSourceRanges }) else __specMixin({ loadBalancerSourceRanges+: [loadBalancerSourceRanges] }),\n            // The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\n            withPorts(ports):: self + if std.type(ports) == 'array' then __specMixin({ ports: ports }) else __specMixin({ ports: [ports] }),\n            // The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\n            withPortsMixin(ports):: self + if std.type(ports) == 'array' then __specMixin({ ports+: ports }) else __specMixin({ ports+: [ports] }),\n            portsType:: hidden.core.v1.servicePort,\n            // publishNotReadyAddresses, when set to true, indicates that DNS implementations must publish the notReadyAddresses of subsets for the Endpoints associated with the Service. The default value is false. The primary use case for setting this field is to use a StatefulSet's Headless Service to propagate SRV records for its Pods without respect to their readiness for purpose of peer discovery.\n            withPublishNotReadyAddresses(publishNotReadyAddresses):: self + __specMixin({ publishNotReadyAddresses: publishNotReadyAddresses }),\n            // Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/\n            withSelector(selector):: self + __specMixin({ selector: selector }),\n            // Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/\n            withSelectorMixin(selector):: self + __specMixin({ selector+: selector }),\n            // Supports \"ClientIP\" and \"None\". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\n            withSessionAffinity(sessionAffinity):: self + __specMixin({ sessionAffinity: sessionAffinity }),\n            // sessionAffinityConfig contains the configurations of session affinity.\n            sessionAffinityConfig:: {\n              local __sessionAffinityConfigMixin(sessionAffinityConfig) = __specMixin({ sessionAffinityConfig+: sessionAffinityConfig }),\n              mixinInstance(sessionAffinityConfig):: __sessionAffinityConfigMixin(sessionAffinityConfig),\n              // clientIP contains the configurations of Client IP based session affinity.\n              clientIp:: {\n                local __clientIpMixin(clientIp) = __sessionAffinityConfigMixin({ clientIp+: clientIp }),\n                mixinInstance(clientIp):: __clientIpMixin(clientIp),\n                // timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be >0 && <=86400(for 1 day) if ServiceAffinity == \"ClientIP\". Default value is 10800(for 3 hours).\n                withTimeoutSeconds(timeoutSeconds):: self + __clientIpMixin({ timeoutSeconds: timeoutSeconds }),\n              },\n              clientIPType:: hidden.core.v1.clientIpConfig,\n            },\n            sessionAffinityConfigType:: hidden.core.v1.sessionAffinityConfig,\n            // type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. \"ExternalName\" maps to the specified externalName. \"ClusterIP\" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object. If clusterIP is \"None\", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a stable IP. \"NodePort\" builds on ClusterIP and allocates a port on every node which routes to the clusterIP. \"LoadBalancer\" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types\n            withType(type):: self + __specMixin({ type: type }),\n          },\n          specType:: hidden.core.v1.serviceSpec,\n        },\n      },\n      // ServiceAccount binds together: * a name, understood by users, and perhaps by peripheral systems, for an identity * a principal that can be authenticated and authorized * a set of secrets\n      serviceAccount:: {\n        local kind = { kind: 'ServiceAccount' },\n        new(name=''):: apiVersion + kind + self.mixin.metadata.withName(name),\n        // AutomountServiceAccountToken indicates whether pods running as this service account should have an API token automatically mounted. Can be overridden at the pod level.\n        withAutomountServiceAccountToken(automountServiceAccountToken):: self + { automountServiceAccountToken: automountServiceAccountToken },\n        // ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod\n        withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then { imagePullSecrets: imagePullSecrets } else { imagePullSecrets: [imagePullSecrets] },\n        // ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod\n        withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then { imagePullSecrets+: imagePullSecrets } else { imagePullSecrets+: [imagePullSecrets] },\n        imagePullSecretsType:: hidden.core.v1.localObjectReference,\n        // Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. More info: https://kubernetes.io/docs/concepts/configuration/secret\n        withSecrets(secrets):: self + if std.type(secrets) == 'array' then { secrets: secrets } else { secrets: [secrets] },\n        // Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. More info: https://kubernetes.io/docs/concepts/configuration/secret\n        withSecretsMixin(secrets):: self + if std.type(secrets) == 'array' then { secrets+: secrets } else { secrets+: [secrets] },\n        secretsType:: hidden.core.v1.objectReference,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n    },\n  },\n  events:: {\n    v1beta1:: {\n      local apiVersion = { apiVersion: 'events.k8s.io/v1beta1' },\n      // Event is a report of an event somewhere in the cluster. It generally denotes some state change in the system.\n      event:: {\n        local kind = { kind: 'Event' },\n        new():: apiVersion + kind,\n        // What action was taken/failed regarding to the regarding object.\n        withAction(action):: self + { action: action },\n        // Deprecated field assuring backward compatibility with core.v1 Event type\n        withDeprecatedCount(deprecatedCount):: self + { deprecatedCount: deprecatedCount },\n        // Deprecated field assuring backward compatibility with core.v1 Event type\n        withDeprecatedFirstTimestamp(deprecatedFirstTimestamp):: self + { deprecatedFirstTimestamp: deprecatedFirstTimestamp },\n        // Deprecated field assuring backward compatibility with core.v1 Event type\n        withDeprecatedLastTimestamp(deprecatedLastTimestamp):: self + { deprecatedLastTimestamp: deprecatedLastTimestamp },\n        // Required. Time when this Event was first observed.\n        withEventTime(eventTime):: self + { eventTime: eventTime },\n        // Optional. A human-readable description of the status of this operation. Maximal length of the note is 1kB, but libraries should be prepared to handle values up to 64kB.\n        withNote(note):: self + { note: note },\n        // Why the action was taken.\n        withReason(reason):: self + { reason: reason },\n        // Name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`.\n        withReportingController(reportingController):: self + { reportingController: reportingController },\n        // ID of the controller instance, e.g. `kubelet-xyzf`.\n        withReportingInstance(reportingInstance):: self + { reportingInstance: reportingInstance },\n        // Type of this event (Normal, Warning), new types could be added in the future.\n        withType(type):: self + { type: type },\n        mixin:: {\n          // Deprecated field assuring backward compatibility with core.v1 Event type\n          deprecatedSource:: {\n            local __deprecatedSourceMixin(deprecatedSource) = { deprecatedSource+: deprecatedSource },\n            mixinInstance(deprecatedSource):: __deprecatedSourceMixin(deprecatedSource),\n            // Component from which the event is generated.\n            withComponent(component):: self + __deprecatedSourceMixin({ component: component }),\n            // Node name on which the event is generated.\n            withHost(host):: self + __deprecatedSourceMixin({ host: host }),\n          },\n          deprecatedSourceType:: hidden.core.v1.eventSource,\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // The object this Event is about. In most cases it's an Object reporting controller implements. E.g. ReplicaSetController implements ReplicaSets and this event is emitted because it acts on some changes in a ReplicaSet object.\n          regarding:: {\n            local __regardingMixin(regarding) = { regarding+: regarding },\n            mixinInstance(regarding):: __regardingMixin(regarding),\n            // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\n            withFieldPath(fieldPath):: self + __regardingMixin({ fieldPath: fieldPath }),\n            // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n            withName(name):: self + __regardingMixin({ name: name }),\n            // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n            withNamespace(namespace):: self + __regardingMixin({ namespace: namespace }),\n            // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n            withResourceVersion(resourceVersion):: self + __regardingMixin({ resourceVersion: resourceVersion }),\n            // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n            withUid(uid):: self + __regardingMixin({ uid: uid }),\n          },\n          regardingType:: hidden.core.v1.objectReference,\n          // Optional secondary object for more complex actions. E.g. when regarding object triggers a creation or deletion of related object.\n          related:: {\n            local __relatedMixin(related) = { related+: related },\n            mixinInstance(related):: __relatedMixin(related),\n            // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\n            withFieldPath(fieldPath):: self + __relatedMixin({ fieldPath: fieldPath }),\n            // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n            withName(name):: self + __relatedMixin({ name: name }),\n            // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n            withNamespace(namespace):: self + __relatedMixin({ namespace: namespace }),\n            // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n            withResourceVersion(resourceVersion):: self + __relatedMixin({ resourceVersion: resourceVersion }),\n            // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n            withUid(uid):: self + __relatedMixin({ uid: uid }),\n          },\n          relatedType:: hidden.core.v1.objectReference,\n          // Data about the Event series this event represents or nil if it's a singleton Event.\n          series:: {\n            local __seriesMixin(series) = { series+: series },\n            mixinInstance(series):: __seriesMixin(series),\n            // Number of occurrences in this series up to the last heartbeat time\n            withCount(count):: self + __seriesMixin({ count: count }),\n            // Time when last Event from the series was seen before last heartbeat.\n            withLastObservedTime(lastObservedTime):: self + __seriesMixin({ lastObservedTime: lastObservedTime }),\n            // Information whether this series is ongoing or finished.\n            withState(state):: self + __seriesMixin({ state: state }),\n          },\n          seriesType:: hidden.events.v1beta1.eventSeries,\n        },\n      },\n    },\n  },\n  extensions:: {\n    v1beta1:: {\n      local apiVersion = { apiVersion: 'extensions/v1beta1' },\n      // DEPRECATED - This group version of DaemonSet is deprecated by apps/v1beta2/DaemonSet. See the release notes for more information. DaemonSet represents the configuration of a daemon set.\n      daemonSet:: {\n        local kind = { kind: 'DaemonSet' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).\n            withMinReadySeconds(minReadySeconds):: self + __specMixin({ minReadySeconds: minReadySeconds }),\n            // The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.\n            withRevisionHistoryLimit(revisionHistoryLimit):: self + __specMixin({ revisionHistoryLimit: revisionHistoryLimit }),\n            // A label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\n            template:: {\n              local __templateMixin(template) = __specMixin({ template+: template }),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n            // DEPRECATED. A sequence number representing a specific generation of the template. Populated by the system. It can be set only during the creation.\n            withTemplateGeneration(templateGeneration):: self + __specMixin({ templateGeneration: templateGeneration }),\n            // An update strategy to replace existing DaemonSet pods with new pods.\n            updateStrategy:: {\n              local __updateStrategyMixin(updateStrategy) = __specMixin({ updateStrategy+: updateStrategy }),\n              mixinInstance(updateStrategy):: __updateStrategyMixin(updateStrategy),\n              // Rolling update config params. Present only if type = \"RollingUpdate\".\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __updateStrategyMixin({ rollingUpdate+: rollingUpdate }),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.\n                withMaxUnavailable(maxUnavailable):: self + __rollingUpdateMixin({ maxUnavailable: maxUnavailable }),\n              },\n              rollingUpdateType:: hidden.extensions.v1beta1.rollingUpdateDaemonSet,\n              // Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is OnDelete.\n              withType(type):: self + __updateStrategyMixin({ type: type }),\n            },\n            updateStrategyType:: hidden.extensions.v1beta1.daemonSetUpdateStrategy,\n          },\n          specType:: hidden.extensions.v1beta1.daemonSetSpec,\n        },\n      },\n      // DEPRECATED - This group version of Deployment is deprecated by apps/v1beta2/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.\n      deployment:: {\n        local kind = { kind: 'Deployment' },\n        new(name='', replicas=1, containers='', podLabels={ app: 'name' }):: apiVersion + kind + self.mixin.metadata.withName(name) + self.mixin.spec.withReplicas(replicas) + self.mixin.spec.template.metadata.withLabels(podLabels) + self.mixin.spec.template.spec.withContainers(containers),\n        mixin:: {\n          // Standard object metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Specification of the desired behavior of the Deployment.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n            withMinReadySeconds(minReadySeconds):: self + __specMixin({ minReadySeconds: minReadySeconds }),\n            // Indicates that the deployment is paused and will not be processed by the deployment controller.\n            withPaused(paused):: self + __specMixin({ paused: paused }),\n            // The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. This is not set by default.\n            withProgressDeadlineSeconds(progressDeadlineSeconds):: self + __specMixin({ progressDeadlineSeconds: progressDeadlineSeconds }),\n            // Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.\n            withReplicas(replicas):: self + __specMixin({ replicas: replicas }),\n            // The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified.\n            withRevisionHistoryLimit(revisionHistoryLimit):: self + __specMixin({ revisionHistoryLimit: revisionHistoryLimit }),\n            // DEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done.\n            rollbackTo:: {\n              local __rollbackToMixin(rollbackTo) = __specMixin({ rollbackTo+: rollbackTo }),\n              mixinInstance(rollbackTo):: __rollbackToMixin(rollbackTo),\n              // The revision to rollback to. If set to 0, rollback to the last revision.\n              withRevision(revision):: self + __rollbackToMixin({ revision: revision }),\n            },\n            rollbackToType:: hidden.extensions.v1beta1.rollbackConfig,\n            // Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // The deployment strategy to use to replace existing pods with new ones.\n            strategy:: {\n              local __strategyMixin(strategy) = __specMixin({ strategy+: strategy }),\n              mixinInstance(strategy):: __strategyMixin(strategy),\n              // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __strategyMixin({ rollingUpdate+: rollingUpdate }),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\n                withMaxSurge(maxSurge):: self + __rollingUpdateMixin({ maxSurge: maxSurge }),\n                // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n                withMaxUnavailable(maxUnavailable):: self + __rollingUpdateMixin({ maxUnavailable: maxUnavailable }),\n              },\n              rollingUpdateType:: hidden.extensions.v1beta1.rollingUpdateDeployment,\n              // Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.\n              withType(type):: self + __strategyMixin({ type: type }),\n            },\n            strategyType:: hidden.extensions.v1beta1.deploymentStrategy,\n            // Template describes the pods that will be created.\n            template:: {\n              local __templateMixin(template) = __specMixin({ template+: template }),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n          specType:: hidden.extensions.v1beta1.deploymentSpec,\n        },\n      },\n      // DEPRECATED. DeploymentRollback stores the information required to rollback a deployment.\n      deploymentRollback:: {\n        local kind = { kind: 'DeploymentRollback' },\n        new(name=''):: apiVersion + kind + self.withName(name),\n        // Required: This must match the Name of a deployment.\n        withName(name):: self + { name: name },\n        // The annotations to be updated to a deployment\n        withUpdatedAnnotations(updatedAnnotations):: self + { updatedAnnotations: updatedAnnotations },\n        // The annotations to be updated to a deployment\n        withUpdatedAnnotationsMixin(updatedAnnotations):: self + { updatedAnnotations+: updatedAnnotations },\n        mixin:: {\n          // The config of this deployment rollback.\n          rollbackTo:: {\n            local __rollbackToMixin(rollbackTo) = { rollbackTo+: rollbackTo },\n            mixinInstance(rollbackTo):: __rollbackToMixin(rollbackTo),\n            // The revision to rollback to. If set to 0, rollback to the last revision.\n            withRevision(revision):: self + __rollbackToMixin({ revision: revision }),\n          },\n          rollbackToType:: hidden.extensions.v1beta1.rollbackConfig,\n        },\n      },\n      // Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc.\n      ingress:: {\n        local kind = { kind: 'Ingress' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // A default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default.\n            backend:: {\n              local __backendMixin(backend) = __specMixin({ backend+: backend }),\n              mixinInstance(backend):: __backendMixin(backend),\n              // Specifies the name of the referenced service.\n              withServiceName(serviceName):: self + __backendMixin({ serviceName: serviceName }),\n              // Specifies the port of the referenced service.\n              withServicePort(servicePort):: self + __backendMixin({ servicePort: servicePort }),\n            },\n            backendType:: hidden.extensions.v1beta1.ingressBackend,\n            // A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.\n            withRules(rules):: self + if std.type(rules) == 'array' then __specMixin({ rules: rules }) else __specMixin({ rules: [rules] }),\n            // A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.\n            withRulesMixin(rules):: self + if std.type(rules) == 'array' then __specMixin({ rules+: rules }) else __specMixin({ rules+: [rules] }),\n            rulesType:: hidden.extensions.v1beta1.ingressRule,\n            // TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.\n            withTls(tls):: self + if std.type(tls) == 'array' then __specMixin({ tls: tls }) else __specMixin({ tls: [tls] }),\n            // TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.\n            withTlsMixin(tls):: self + if std.type(tls) == 'array' then __specMixin({ tls+: tls }) else __specMixin({ tls+: [tls] }),\n            tlsType:: hidden.extensions.v1beta1.ingressTls,\n          },\n          specType:: hidden.extensions.v1beta1.ingressSpec,\n        },\n      },\n      // DEPRECATED 1.9 - This group version of NetworkPolicy is deprecated by networking/v1/NetworkPolicy. NetworkPolicy describes what network traffic is allowed for a set of Pods\n      networkPolicy:: {\n        local kind = { kind: 'NetworkPolicy' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Specification of the desired behavior for this NetworkPolicy.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8\n            withEgress(egress):: self + if std.type(egress) == 'array' then __specMixin({ egress: egress }) else __specMixin({ egress: [egress] }),\n            // List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8\n            withEgressMixin(egress):: self + if std.type(egress) == 'array' then __specMixin({ egress+: egress }) else __specMixin({ egress+: [egress] }),\n            egressType:: hidden.extensions.v1beta1.networkPolicyEgressRule,\n            // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default).\n            withIngress(ingress):: self + if std.type(ingress) == 'array' then __specMixin({ ingress: ingress }) else __specMixin({ ingress: [ingress] }),\n            // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default).\n            withIngressMixin(ingress):: self + if std.type(ingress) == 'array' then __specMixin({ ingress+: ingress }) else __specMixin({ ingress+: [ingress] }),\n            ingressType:: hidden.extensions.v1beta1.networkPolicyIngressRule,\n            // Selects the pods to which this NetworkPolicy object applies.  The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods.  In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.\n            podSelector:: {\n              local __podSelectorMixin(podSelector) = __specMixin({ podSelector+: podSelector }),\n              mixinInstance(podSelector):: __podSelectorMixin(podSelector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __podSelectorMixin({ matchExpressions: matchExpressions }) else __podSelectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __podSelectorMixin({ matchExpressions+: matchExpressions }) else __podSelectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __podSelectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __podSelectorMixin({ matchLabels+: matchLabels }),\n            },\n            podSelectorType:: hidden.meta.v1.labelSelector,\n            // List of rule types that the NetworkPolicy relates to. Valid options are Ingress, Egress, or Ingress,Egress. If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8\n            withPolicyTypes(policyTypes):: self + if std.type(policyTypes) == 'array' then __specMixin({ policyTypes: policyTypes }) else __specMixin({ policyTypes: [policyTypes] }),\n            // List of rule types that the NetworkPolicy relates to. Valid options are Ingress, Egress, or Ingress,Egress. If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8\n            withPolicyTypesMixin(policyTypes):: self + if std.type(policyTypes) == 'array' then __specMixin({ policyTypes+: policyTypes }) else __specMixin({ policyTypes+: [policyTypes] }),\n          },\n          specType:: hidden.extensions.v1beta1.networkPolicySpec,\n        },\n      },\n      // PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container. Deprecated: use PodSecurityPolicy from policy API Group instead.\n      podSecurityPolicy:: {\n        local kind = { kind: 'PodSecurityPolicy' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // spec defines the policy enforced.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // allowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.\n            withAllowPrivilegeEscalation(allowPrivilegeEscalation):: self + __specMixin({ allowPrivilegeEscalation: allowPrivilegeEscalation }),\n            // allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.\n            withAllowedCapabilities(allowedCapabilities):: self + if std.type(allowedCapabilities) == 'array' then __specMixin({ allowedCapabilities: allowedCapabilities }) else __specMixin({ allowedCapabilities: [allowedCapabilities] }),\n            // allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.\n            withAllowedCapabilitiesMixin(allowedCapabilities):: self + if std.type(allowedCapabilities) == 'array' then __specMixin({ allowedCapabilities+: allowedCapabilities }) else __specMixin({ allowedCapabilities+: [allowedCapabilities] }),\n            // allowedFlexVolumes is a whitelist of allowed Flexvolumes.  Empty or nil indicates that all Flexvolumes may be used.  This parameter is effective only when the usage of the Flexvolumes is allowed in the \"volumes\" field.\n            withAllowedFlexVolumes(allowedFlexVolumes):: self + if std.type(allowedFlexVolumes) == 'array' then __specMixin({ allowedFlexVolumes: allowedFlexVolumes }) else __specMixin({ allowedFlexVolumes: [allowedFlexVolumes] }),\n            // allowedFlexVolumes is a whitelist of allowed Flexvolumes.  Empty or nil indicates that all Flexvolumes may be used.  This parameter is effective only when the usage of the Flexvolumes is allowed in the \"volumes\" field.\n            withAllowedFlexVolumesMixin(allowedFlexVolumes):: self + if std.type(allowedFlexVolumes) == 'array' then __specMixin({ allowedFlexVolumes+: allowedFlexVolumes }) else __specMixin({ allowedFlexVolumes+: [allowedFlexVolumes] }),\n            allowedFlexVolumesType:: hidden.extensions.v1beta1.allowedFlexVolume,\n            // allowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.\n            withAllowedHostPaths(allowedHostPaths):: self + if std.type(allowedHostPaths) == 'array' then __specMixin({ allowedHostPaths: allowedHostPaths }) else __specMixin({ allowedHostPaths: [allowedHostPaths] }),\n            // allowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.\n            withAllowedHostPathsMixin(allowedHostPaths):: self + if std.type(allowedHostPaths) == 'array' then __specMixin({ allowedHostPaths+: allowedHostPaths }) else __specMixin({ allowedHostPaths+: [allowedHostPaths] }),\n            allowedHostPathsType:: hidden.extensions.v1beta1.allowedHostPath,\n            // allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection.\n            //\n            // Examples: e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows \"foo.bar\", \"foo.baz\", etc.\n            withAllowedUnsafeSysctls(allowedUnsafeSysctls):: self + if std.type(allowedUnsafeSysctls) == 'array' then __specMixin({ allowedUnsafeSysctls: allowedUnsafeSysctls }) else __specMixin({ allowedUnsafeSysctls: [allowedUnsafeSysctls] }),\n            // allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection.\n            //\n            // Examples: e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows \"foo.bar\", \"foo.baz\", etc.\n            withAllowedUnsafeSysctlsMixin(allowedUnsafeSysctls):: self + if std.type(allowedUnsafeSysctls) == 'array' then __specMixin({ allowedUnsafeSysctls+: allowedUnsafeSysctls }) else __specMixin({ allowedUnsafeSysctls+: [allowedUnsafeSysctls] }),\n            // defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability.  You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.\n            withDefaultAddCapabilities(defaultAddCapabilities):: self + if std.type(defaultAddCapabilities) == 'array' then __specMixin({ defaultAddCapabilities: defaultAddCapabilities }) else __specMixin({ defaultAddCapabilities: [defaultAddCapabilities] }),\n            // defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability.  You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.\n            withDefaultAddCapabilitiesMixin(defaultAddCapabilities):: self + if std.type(defaultAddCapabilities) == 'array' then __specMixin({ defaultAddCapabilities+: defaultAddCapabilities }) else __specMixin({ defaultAddCapabilities+: [defaultAddCapabilities] }),\n            // defaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.\n            withDefaultAllowPrivilegeEscalation(defaultAllowPrivilegeEscalation):: self + __specMixin({ defaultAllowPrivilegeEscalation: defaultAllowPrivilegeEscalation }),\n            // forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\n            //\n            // Examples: e.g. \"foo/*\" forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", \"foo.baz\", etc.\n            withForbiddenSysctls(forbiddenSysctls):: self + if std.type(forbiddenSysctls) == 'array' then __specMixin({ forbiddenSysctls: forbiddenSysctls }) else __specMixin({ forbiddenSysctls: [forbiddenSysctls] }),\n            // forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\n            //\n            // Examples: e.g. \"foo/*\" forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", \"foo.baz\", etc.\n            withForbiddenSysctlsMixin(forbiddenSysctls):: self + if std.type(forbiddenSysctls) == 'array' then __specMixin({ forbiddenSysctls+: forbiddenSysctls }) else __specMixin({ forbiddenSysctls+: [forbiddenSysctls] }),\n            // fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.\n            fsGroup:: {\n              local __fsGroupMixin(fsGroup) = __specMixin({ fsGroup+: fsGroup }),\n              mixinInstance(fsGroup):: __fsGroupMixin(fsGroup),\n              // ranges are the allowed ranges of fs groups.  If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.\n              withRanges(ranges):: self + if std.type(ranges) == 'array' then __fsGroupMixin({ ranges: ranges }) else __fsGroupMixin({ ranges: [ranges] }),\n              // ranges are the allowed ranges of fs groups.  If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.\n              withRangesMixin(ranges):: self + if std.type(ranges) == 'array' then __fsGroupMixin({ ranges+: ranges }) else __fsGroupMixin({ ranges+: [ranges] }),\n              rangesType:: hidden.extensions.v1beta1.idRange,\n              // rule is the strategy that will dictate what FSGroup is used in the SecurityContext.\n              withRule(rule):: self + __fsGroupMixin({ rule: rule }),\n            },\n            fsGroupType:: hidden.extensions.v1beta1.fsGroupStrategyOptions,\n            // hostIPC determines if the policy allows the use of HostIPC in the pod spec.\n            withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n            // hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.\n            withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n            // hostPID determines if the policy allows the use of HostPID in the pod spec.\n            withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n            // hostPorts determines which host port ranges are allowed to be exposed.\n            withHostPorts(hostPorts):: self + if std.type(hostPorts) == 'array' then __specMixin({ hostPorts: hostPorts }) else __specMixin({ hostPorts: [hostPorts] }),\n            // hostPorts determines which host port ranges are allowed to be exposed.\n            withHostPortsMixin(hostPorts):: self + if std.type(hostPorts) == 'array' then __specMixin({ hostPorts+: hostPorts }) else __specMixin({ hostPorts+: [hostPorts] }),\n            hostPortsType:: hidden.extensions.v1beta1.hostPortRange,\n            // privileged determines if a pod can request to be run as privileged.\n            withPrivileged(privileged):: self + __specMixin({ privileged: privileged }),\n            // readOnlyRootFilesystem when set to true will force containers to run with a read only root file system.  If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.\n            withReadOnlyRootFilesystem(readOnlyRootFilesystem):: self + __specMixin({ readOnlyRootFilesystem: readOnlyRootFilesystem }),\n            // requiredDropCapabilities are the capabilities that will be dropped from the container.  These are required to be dropped and cannot be added.\n            withRequiredDropCapabilities(requiredDropCapabilities):: self + if std.type(requiredDropCapabilities) == 'array' then __specMixin({ requiredDropCapabilities: requiredDropCapabilities }) else __specMixin({ requiredDropCapabilities: [requiredDropCapabilities] }),\n            // requiredDropCapabilities are the capabilities that will be dropped from the container.  These are required to be dropped and cannot be added.\n            withRequiredDropCapabilitiesMixin(requiredDropCapabilities):: self + if std.type(requiredDropCapabilities) == 'array' then __specMixin({ requiredDropCapabilities+: requiredDropCapabilities }) else __specMixin({ requiredDropCapabilities+: [requiredDropCapabilities] }),\n            // runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.\n            runAsUser:: {\n              local __runAsUserMixin(runAsUser) = __specMixin({ runAsUser+: runAsUser }),\n              mixinInstance(runAsUser):: __runAsUserMixin(runAsUser),\n              // ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.\n              withRanges(ranges):: self + if std.type(ranges) == 'array' then __runAsUserMixin({ ranges: ranges }) else __runAsUserMixin({ ranges: [ranges] }),\n              // ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.\n              withRangesMixin(ranges):: self + if std.type(ranges) == 'array' then __runAsUserMixin({ ranges+: ranges }) else __runAsUserMixin({ ranges+: [ranges] }),\n              rangesType:: hidden.extensions.v1beta1.idRange,\n              // rule is the strategy that will dictate the allowable RunAsUser values that may be set.\n              withRule(rule):: self + __runAsUserMixin({ rule: rule }),\n            },\n            runAsUserType:: hidden.extensions.v1beta1.runAsUserStrategyOptions,\n            // seLinux is the strategy that will dictate the allowable labels that may be set.\n            seLinux:: {\n              local __seLinuxMixin(seLinux) = __specMixin({ seLinux+: seLinux }),\n              mixinInstance(seLinux):: __seLinuxMixin(seLinux),\n              // rule is the strategy that will dictate the allowable labels that may be set.\n              withRule(rule):: self + __seLinuxMixin({ rule: rule }),\n              // seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/\n              seLinuxOptions:: {\n                local __seLinuxOptionsMixin(seLinuxOptions) = __seLinuxMixin({ seLinuxOptions+: seLinuxOptions }),\n                mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                // Level is SELinux level label that applies to the container.\n                withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                // Role is a SELinux role label that applies to the container.\n                withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                // Type is a SELinux type label that applies to the container.\n                withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                // User is a SELinux user label that applies to the container.\n                withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n              },\n              seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n            },\n            seLinuxType:: hidden.extensions.v1beta1.seLinuxStrategyOptions,\n            // supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.\n            supplementalGroups:: {\n              local __supplementalGroupsMixin(supplementalGroups) = __specMixin({ supplementalGroups+: supplementalGroups }),\n              mixinInstance(supplementalGroups):: __supplementalGroupsMixin(supplementalGroups),\n              // ranges are the allowed ranges of supplemental groups.  If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.\n              withRanges(ranges):: self + if std.type(ranges) == 'array' then __supplementalGroupsMixin({ ranges: ranges }) else __supplementalGroupsMixin({ ranges: [ranges] }),\n              // ranges are the allowed ranges of supplemental groups.  If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.\n              withRangesMixin(ranges):: self + if std.type(ranges) == 'array' then __supplementalGroupsMixin({ ranges+: ranges }) else __supplementalGroupsMixin({ ranges+: [ranges] }),\n              rangesType:: hidden.extensions.v1beta1.idRange,\n              // rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.\n              withRule(rule):: self + __supplementalGroupsMixin({ rule: rule }),\n            },\n            supplementalGroupsType:: hidden.extensions.v1beta1.supplementalGroupsStrategyOptions,\n            // volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.\n            withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n            // volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.\n            withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n          },\n          specType:: hidden.extensions.v1beta1.podSecurityPolicySpec,\n        },\n      },\n      // DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1beta2/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.\n      replicaSet:: {\n        local kind = { kind: 'ReplicaSet' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n            withMinReadySeconds(minReadySeconds):: self + __specMixin({ minReadySeconds: minReadySeconds }),\n            // Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller\n            withReplicas(replicas):: self + __specMixin({ replicas: replicas }),\n            // Selector is a label query over pods that should match the replica count. If the selector is empty, it is defaulted to the labels present on the pod template. Label keys and values that must match in order to be controlled by this replica set. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\n            template:: {\n              local __templateMixin(template) = __specMixin({ template+: template }),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n          specType:: hidden.extensions.v1beta1.replicaSetSpec,\n        },\n      },\n      // represents a scaling request for a resource.\n      scale:: {\n        local kind = { kind: 'Scale' },\n        new(replicas=1):: apiVersion + kind + self.mixin.spec.withReplicas(replicas),\n        mixin:: {\n          // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // desired number of instances for the scaled object.\n            withReplicas(replicas):: self + __specMixin({ replicas: replicas }),\n          },\n          specType:: hidden.extensions.v1beta1.scaleSpec,\n        },\n      },\n    },\n  },\n  meta:: {\n    v1:: {\n      local apiVersion = { apiVersion: 'rbac.authorization.k8s.io/v1' },\n      // Patch is provided to give a concrete name and type to the Kubernetes PATCH request body.\n      role:: {\n        local kind = { kind: 'Role' },\n        new():: apiVersion + kind,\n        mixin:: {},\n      },\n    },\n  },\n  networking:: {\n    v1:: {\n      local apiVersion = { apiVersion: 'networking.k8s.io/v1' },\n      // NetworkPolicy describes what network traffic is allowed for a set of Pods\n      networkPolicy:: {\n        local kind = { kind: 'NetworkPolicy' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Specification of the desired behavior for this NetworkPolicy.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8\n            withEgress(egress):: self + if std.type(egress) == 'array' then __specMixin({ egress: egress }) else __specMixin({ egress: [egress] }),\n            // List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8\n            withEgressMixin(egress):: self + if std.type(egress) == 'array' then __specMixin({ egress+: egress }) else __specMixin({ egress+: [egress] }),\n            egressType:: hidden.networking.v1.networkPolicyEgressRule,\n            // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default)\n            withIngress(ingress):: self + if std.type(ingress) == 'array' then __specMixin({ ingress: ingress }) else __specMixin({ ingress: [ingress] }),\n            // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default)\n            withIngressMixin(ingress):: self + if std.type(ingress) == 'array' then __specMixin({ ingress+: ingress }) else __specMixin({ ingress+: [ingress] }),\n            ingressType:: hidden.networking.v1.networkPolicyIngressRule,\n            // Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.\n            podSelector:: {\n              local __podSelectorMixin(podSelector) = __specMixin({ podSelector+: podSelector }),\n              mixinInstance(podSelector):: __podSelectorMixin(podSelector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __podSelectorMixin({ matchExpressions: matchExpressions }) else __podSelectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __podSelectorMixin({ matchExpressions+: matchExpressions }) else __podSelectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __podSelectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __podSelectorMixin({ matchLabels+: matchLabels }),\n            },\n            podSelectorType:: hidden.meta.v1.labelSelector,\n            // List of rule types that the NetworkPolicy relates to. Valid options are Ingress, Egress, or Ingress,Egress. If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8\n            withPolicyTypes(policyTypes):: self + if std.type(policyTypes) == 'array' then __specMixin({ policyTypes: policyTypes }) else __specMixin({ policyTypes: [policyTypes] }),\n            // List of rule types that the NetworkPolicy relates to. Valid options are Ingress, Egress, or Ingress,Egress. If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8\n            withPolicyTypesMixin(policyTypes):: self + if std.type(policyTypes) == 'array' then __specMixin({ policyTypes+: policyTypes }) else __specMixin({ policyTypes+: [policyTypes] }),\n          },\n          specType:: hidden.networking.v1.networkPolicySpec,\n        },\n      },\n    },\n  },\n  policy:: {\n    v1beta1:: {\n      local apiVersion = { apiVersion: 'policy/v1beta1' },\n      // Eviction evicts a pod from its node subject to certain policies and safety constraints. This is a subresource of Pod.  A request to cause such an eviction is created by POSTing to .../pods/<pod name>/evictions.\n      eviction:: {\n        local kind = { kind: 'Eviction' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // DeleteOptions may be provided\n          deleteOptions:: {\n            local __deleteOptionsMixin(deleteOptions) = { deleteOptions+: deleteOptions },\n            mixinInstance(deleteOptions):: __deleteOptionsMixin(deleteOptions),\n            // The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\n            withGracePeriodSeconds(gracePeriodSeconds):: self + __deleteOptionsMixin({ gracePeriodSeconds: gracePeriodSeconds }),\n            // Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\n            withOrphanDependents(orphanDependents):: self + __deleteOptionsMixin({ orphanDependents: orphanDependents }),\n            // Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.\n            preconditions:: {\n              local __preconditionsMixin(preconditions) = __deleteOptionsMixin({ preconditions+: preconditions }),\n              mixinInstance(preconditions):: __preconditionsMixin(preconditions),\n              // Specifies the target UID.\n              withUid(uid):: self + __preconditionsMixin({ uid: uid }),\n            },\n            preconditionsType:: hidden.meta.v1.preconditions,\n            // Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\n            withPropagationPolicy(propagationPolicy):: self + __deleteOptionsMixin({ propagationPolicy: propagationPolicy }),\n          },\n          deleteOptionsType:: hidden.meta.v1.deleteOptions,\n          // ObjectMeta describes the pod that is being evicted.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods\n      podDisruptionBudget:: {\n        local kind = { kind: 'PodDisruptionBudget' },\n        new():: apiVersion + kind,\n        mixin:: {\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Specification of the desired behavior of the PodDisruptionBudget.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // An eviction is allowed if at most \"maxUnavailable\" pods selected by \"selector\" are unavailable after the eviction, i.e. even in absence of the evicted pod. For example, one can prevent all voluntary evictions by specifying 0. This is a mutually exclusive setting with \"minAvailable\".\n            withMaxUnavailable(maxUnavailable):: self + __specMixin({ maxUnavailable: maxUnavailable }),\n            // An eviction is allowed if at least \"minAvailable\" pods selected by \"selector\" will still be available after the eviction, i.e. even in the absence of the evicted pod.  So for example you can prevent all voluntary evictions by specifying \"100%\".\n            withMinAvailable(minAvailable):: self + __specMixin({ minAvailable: minAvailable }),\n            // Label query over pods whose evictions are managed by the disruption budget.\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n          },\n          specType:: hidden.policy.v1beta1.podDisruptionBudgetSpec,\n        },\n      },\n      // PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container.\n      podSecurityPolicy:: {\n        local kind = { kind: 'PodSecurityPolicy' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // spec defines the policy enforced.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // allowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.\n            withAllowPrivilegeEscalation(allowPrivilegeEscalation):: self + __specMixin({ allowPrivilegeEscalation: allowPrivilegeEscalation }),\n            // allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.\n            withAllowedCapabilities(allowedCapabilities):: self + if std.type(allowedCapabilities) == 'array' then __specMixin({ allowedCapabilities: allowedCapabilities }) else __specMixin({ allowedCapabilities: [allowedCapabilities] }),\n            // allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.\n            withAllowedCapabilitiesMixin(allowedCapabilities):: self + if std.type(allowedCapabilities) == 'array' then __specMixin({ allowedCapabilities+: allowedCapabilities }) else __specMixin({ allowedCapabilities+: [allowedCapabilities] }),\n            // allowedFlexVolumes is a whitelist of allowed Flexvolumes.  Empty or nil indicates that all Flexvolumes may be used.  This parameter is effective only when the usage of the Flexvolumes is allowed in the \"volumes\" field.\n            withAllowedFlexVolumes(allowedFlexVolumes):: self + if std.type(allowedFlexVolumes) == 'array' then __specMixin({ allowedFlexVolumes: allowedFlexVolumes }) else __specMixin({ allowedFlexVolumes: [allowedFlexVolumes] }),\n            // allowedFlexVolumes is a whitelist of allowed Flexvolumes.  Empty or nil indicates that all Flexvolumes may be used.  This parameter is effective only when the usage of the Flexvolumes is allowed in the \"volumes\" field.\n            withAllowedFlexVolumesMixin(allowedFlexVolumes):: self + if std.type(allowedFlexVolumes) == 'array' then __specMixin({ allowedFlexVolumes+: allowedFlexVolumes }) else __specMixin({ allowedFlexVolumes+: [allowedFlexVolumes] }),\n            allowedFlexVolumesType:: hidden.policy.v1beta1.allowedFlexVolume,\n            // allowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.\n            withAllowedHostPaths(allowedHostPaths):: self + if std.type(allowedHostPaths) == 'array' then __specMixin({ allowedHostPaths: allowedHostPaths }) else __specMixin({ allowedHostPaths: [allowedHostPaths] }),\n            // allowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.\n            withAllowedHostPathsMixin(allowedHostPaths):: self + if std.type(allowedHostPaths) == 'array' then __specMixin({ allowedHostPaths+: allowedHostPaths }) else __specMixin({ allowedHostPaths+: [allowedHostPaths] }),\n            allowedHostPathsType:: hidden.policy.v1beta1.allowedHostPath,\n            // allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection.\n            //\n            // Examples: e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows \"foo.bar\", \"foo.baz\", etc.\n            withAllowedUnsafeSysctls(allowedUnsafeSysctls):: self + if std.type(allowedUnsafeSysctls) == 'array' then __specMixin({ allowedUnsafeSysctls: allowedUnsafeSysctls }) else __specMixin({ allowedUnsafeSysctls: [allowedUnsafeSysctls] }),\n            // allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection.\n            //\n            // Examples: e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows \"foo.bar\", \"foo.baz\", etc.\n            withAllowedUnsafeSysctlsMixin(allowedUnsafeSysctls):: self + if std.type(allowedUnsafeSysctls) == 'array' then __specMixin({ allowedUnsafeSysctls+: allowedUnsafeSysctls }) else __specMixin({ allowedUnsafeSysctls+: [allowedUnsafeSysctls] }),\n            // defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability.  You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.\n            withDefaultAddCapabilities(defaultAddCapabilities):: self + if std.type(defaultAddCapabilities) == 'array' then __specMixin({ defaultAddCapabilities: defaultAddCapabilities }) else __specMixin({ defaultAddCapabilities: [defaultAddCapabilities] }),\n            // defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability.  You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.\n            withDefaultAddCapabilitiesMixin(defaultAddCapabilities):: self + if std.type(defaultAddCapabilities) == 'array' then __specMixin({ defaultAddCapabilities+: defaultAddCapabilities }) else __specMixin({ defaultAddCapabilities+: [defaultAddCapabilities] }),\n            // defaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.\n            withDefaultAllowPrivilegeEscalation(defaultAllowPrivilegeEscalation):: self + __specMixin({ defaultAllowPrivilegeEscalation: defaultAllowPrivilegeEscalation }),\n            // forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\n            //\n            // Examples: e.g. \"foo/*\" forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", \"foo.baz\", etc.\n            withForbiddenSysctls(forbiddenSysctls):: self + if std.type(forbiddenSysctls) == 'array' then __specMixin({ forbiddenSysctls: forbiddenSysctls }) else __specMixin({ forbiddenSysctls: [forbiddenSysctls] }),\n            // forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\n            //\n            // Examples: e.g. \"foo/*\" forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", \"foo.baz\", etc.\n            withForbiddenSysctlsMixin(forbiddenSysctls):: self + if std.type(forbiddenSysctls) == 'array' then __specMixin({ forbiddenSysctls+: forbiddenSysctls }) else __specMixin({ forbiddenSysctls+: [forbiddenSysctls] }),\n            // fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.\n            fsGroup:: {\n              local __fsGroupMixin(fsGroup) = __specMixin({ fsGroup+: fsGroup }),\n              mixinInstance(fsGroup):: __fsGroupMixin(fsGroup),\n              // ranges are the allowed ranges of fs groups.  If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.\n              withRanges(ranges):: self + if std.type(ranges) == 'array' then __fsGroupMixin({ ranges: ranges }) else __fsGroupMixin({ ranges: [ranges] }),\n              // ranges are the allowed ranges of fs groups.  If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.\n              withRangesMixin(ranges):: self + if std.type(ranges) == 'array' then __fsGroupMixin({ ranges+: ranges }) else __fsGroupMixin({ ranges+: [ranges] }),\n              rangesType:: hidden.policy.v1beta1.idRange,\n              // rule is the strategy that will dictate what FSGroup is used in the SecurityContext.\n              withRule(rule):: self + __fsGroupMixin({ rule: rule }),\n            },\n            fsGroupType:: hidden.policy.v1beta1.fsGroupStrategyOptions,\n            // hostIPC determines if the policy allows the use of HostIPC in the pod spec.\n            withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n            // hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.\n            withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n            // hostPID determines if the policy allows the use of HostPID in the pod spec.\n            withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n            // hostPorts determines which host port ranges are allowed to be exposed.\n            withHostPorts(hostPorts):: self + if std.type(hostPorts) == 'array' then __specMixin({ hostPorts: hostPorts }) else __specMixin({ hostPorts: [hostPorts] }),\n            // hostPorts determines which host port ranges are allowed to be exposed.\n            withHostPortsMixin(hostPorts):: self + if std.type(hostPorts) == 'array' then __specMixin({ hostPorts+: hostPorts }) else __specMixin({ hostPorts+: [hostPorts] }),\n            hostPortsType:: hidden.policy.v1beta1.hostPortRange,\n            // privileged determines if a pod can request to be run as privileged.\n            withPrivileged(privileged):: self + __specMixin({ privileged: privileged }),\n            // readOnlyRootFilesystem when set to true will force containers to run with a read only root file system.  If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.\n            withReadOnlyRootFilesystem(readOnlyRootFilesystem):: self + __specMixin({ readOnlyRootFilesystem: readOnlyRootFilesystem }),\n            // requiredDropCapabilities are the capabilities that will be dropped from the container.  These are required to be dropped and cannot be added.\n            withRequiredDropCapabilities(requiredDropCapabilities):: self + if std.type(requiredDropCapabilities) == 'array' then __specMixin({ requiredDropCapabilities: requiredDropCapabilities }) else __specMixin({ requiredDropCapabilities: [requiredDropCapabilities] }),\n            // requiredDropCapabilities are the capabilities that will be dropped from the container.  These are required to be dropped and cannot be added.\n            withRequiredDropCapabilitiesMixin(requiredDropCapabilities):: self + if std.type(requiredDropCapabilities) == 'array' then __specMixin({ requiredDropCapabilities+: requiredDropCapabilities }) else __specMixin({ requiredDropCapabilities+: [requiredDropCapabilities] }),\n            // runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.\n            runAsUser:: {\n              local __runAsUserMixin(runAsUser) = __specMixin({ runAsUser+: runAsUser }),\n              mixinInstance(runAsUser):: __runAsUserMixin(runAsUser),\n              // ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.\n              withRanges(ranges):: self + if std.type(ranges) == 'array' then __runAsUserMixin({ ranges: ranges }) else __runAsUserMixin({ ranges: [ranges] }),\n              // ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.\n              withRangesMixin(ranges):: self + if std.type(ranges) == 'array' then __runAsUserMixin({ ranges+: ranges }) else __runAsUserMixin({ ranges+: [ranges] }),\n              rangesType:: hidden.policy.v1beta1.idRange,\n              // rule is the strategy that will dictate the allowable RunAsUser values that may be set.\n              withRule(rule):: self + __runAsUserMixin({ rule: rule }),\n            },\n            runAsUserType:: hidden.policy.v1beta1.runAsUserStrategyOptions,\n            // seLinux is the strategy that will dictate the allowable labels that may be set.\n            seLinux:: {\n              local __seLinuxMixin(seLinux) = __specMixin({ seLinux+: seLinux }),\n              mixinInstance(seLinux):: __seLinuxMixin(seLinux),\n              // rule is the strategy that will dictate the allowable labels that may be set.\n              withRule(rule):: self + __seLinuxMixin({ rule: rule }),\n              // seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/\n              seLinuxOptions:: {\n                local __seLinuxOptionsMixin(seLinuxOptions) = __seLinuxMixin({ seLinuxOptions+: seLinuxOptions }),\n                mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                // Level is SELinux level label that applies to the container.\n                withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                // Role is a SELinux role label that applies to the container.\n                withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                // Type is a SELinux type label that applies to the container.\n                withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                // User is a SELinux user label that applies to the container.\n                withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n              },\n              seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n            },\n            seLinuxType:: hidden.policy.v1beta1.seLinuxStrategyOptions,\n            // supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.\n            supplementalGroups:: {\n              local __supplementalGroupsMixin(supplementalGroups) = __specMixin({ supplementalGroups+: supplementalGroups }),\n              mixinInstance(supplementalGroups):: __supplementalGroupsMixin(supplementalGroups),\n              // ranges are the allowed ranges of supplemental groups.  If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.\n              withRanges(ranges):: self + if std.type(ranges) == 'array' then __supplementalGroupsMixin({ ranges: ranges }) else __supplementalGroupsMixin({ ranges: [ranges] }),\n              // ranges are the allowed ranges of supplemental groups.  If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.\n              withRangesMixin(ranges):: self + if std.type(ranges) == 'array' then __supplementalGroupsMixin({ ranges+: ranges }) else __supplementalGroupsMixin({ ranges+: [ranges] }),\n              rangesType:: hidden.policy.v1beta1.idRange,\n              // rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.\n              withRule(rule):: self + __supplementalGroupsMixin({ rule: rule }),\n            },\n            supplementalGroupsType:: hidden.policy.v1beta1.supplementalGroupsStrategyOptions,\n            // volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.\n            withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n            // volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.\n            withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n          },\n          specType:: hidden.policy.v1beta1.podSecurityPolicySpec,\n        },\n      },\n    },\n  },\n  rbac:: {\n    v1:: {\n      local apiVersion = { apiVersion: 'rbac.authorization.k8s.io/v1' },\n      // ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.\n      clusterRole:: {\n        local kind = { kind: 'ClusterRole' },\n        new():: apiVersion + kind,\n        // Rules holds all the PolicyRules for this ClusterRole\n        withRules(rules):: self + if std.type(rules) == 'array' then { rules: rules } else { rules: [rules] },\n        // Rules holds all the PolicyRules for this ClusterRole\n        withRulesMixin(rules):: self + if std.type(rules) == 'array' then { rules+: rules } else { rules+: [rules] },\n        rulesType:: hidden.rbac.v1.policyRule,\n        mixin:: {\n          // AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller.\n          aggregationRule:: {\n            local __aggregationRuleMixin(aggregationRule) = { aggregationRule+: aggregationRule },\n            mixinInstance(aggregationRule):: __aggregationRuleMixin(aggregationRule),\n            // ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added\n            withClusterRoleSelectors(clusterRoleSelectors):: self + if std.type(clusterRoleSelectors) == 'array' then __aggregationRuleMixin({ clusterRoleSelectors: clusterRoleSelectors }) else __aggregationRuleMixin({ clusterRoleSelectors: [clusterRoleSelectors] }),\n            // ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added\n            withClusterRoleSelectorsMixin(clusterRoleSelectors):: self + if std.type(clusterRoleSelectors) == 'array' then __aggregationRuleMixin({ clusterRoleSelectors+: clusterRoleSelectors }) else __aggregationRuleMixin({ clusterRoleSelectors+: [clusterRoleSelectors] }),\n            clusterRoleSelectorsType:: hidden.meta.v1.labelSelector,\n          },\n          aggregationRuleType:: hidden.rbac.v1.aggregationRule,\n          // Standard object's metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // ClusterRoleBinding references a ClusterRole, but not contain it.  It can reference a ClusterRole in the global namespace, and adds who information via Subject.\n      clusterRoleBinding:: {\n        local kind = { kind: 'ClusterRoleBinding' },\n        new():: apiVersion + kind,\n        // Subjects holds references to the objects the role applies to.\n        withSubjects(subjects):: self + if std.type(subjects) == 'array' then { subjects: subjects } else { subjects: [subjects] },\n        // Subjects holds references to the objects the role applies to.\n        withSubjectsMixin(subjects):: self + if std.type(subjects) == 'array' then { subjects+: subjects } else { subjects+: [subjects] },\n        subjectsType:: hidden.rbac.v1.subject,\n        mixin:: {\n          // Standard object's metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.\n          roleRef:: {\n            local __roleRefMixin(roleRef) = { roleRef+: roleRef },\n            mixinInstance(roleRef):: __roleRefMixin(roleRef),\n            // APIGroup is the group for the resource being referenced\n            withApiGroup(apiGroup):: self + __roleRefMixin({ apiGroup: apiGroup }),\n            // Kind is the type of resource being referenced\n            withKind(kind):: self + __roleRefMixin({ kind: kind }),\n            // Name is the name of resource being referenced\n            withName(name):: self + __roleRefMixin({ name: name }),\n          },\n          roleRefType:: hidden.rbac.v1.roleRef,\n        },\n      },\n      // Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.\n      role:: {\n        local kind = { kind: 'Role' },\n        new():: apiVersion + kind,\n        // Rules holds all the PolicyRules for this Role\n        withRules(rules):: self + if std.type(rules) == 'array' then { rules: rules } else { rules: [rules] },\n        // Rules holds all the PolicyRules for this Role\n        withRulesMixin(rules):: self + if std.type(rules) == 'array' then { rules+: rules } else { rules+: [rules] },\n        rulesType:: hidden.rbac.v1.policyRule,\n        mixin:: {\n          // Standard object's metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // RoleBinding references a role, but does not contain it.  It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in.  RoleBindings in a given namespace only have effect in that namespace.\n      roleBinding:: {\n        local kind = { kind: 'RoleBinding' },\n        new():: apiVersion + kind,\n        // Subjects holds references to the objects the role applies to.\n        withSubjects(subjects):: self + if std.type(subjects) == 'array' then { subjects: subjects } else { subjects: [subjects] },\n        // Subjects holds references to the objects the role applies to.\n        withSubjectsMixin(subjects):: self + if std.type(subjects) == 'array' then { subjects+: subjects } else { subjects+: [subjects] },\n        subjectsType:: hidden.rbac.v1.subject,\n        mixin:: {\n          // Standard object's metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.\n          roleRef:: {\n            local __roleRefMixin(roleRef) = { roleRef+: roleRef },\n            mixinInstance(roleRef):: __roleRefMixin(roleRef),\n            // APIGroup is the group for the resource being referenced\n            withApiGroup(apiGroup):: self + __roleRefMixin({ apiGroup: apiGroup }),\n            // Kind is the type of resource being referenced\n            withKind(kind):: self + __roleRefMixin({ kind: kind }),\n            // Name is the name of resource being referenced\n            withName(name):: self + __roleRefMixin({ name: name }),\n          },\n          roleRefType:: hidden.rbac.v1.roleRef,\n        },\n      },\n    },\n    v1alpha1:: {\n      local apiVersion = { apiVersion: 'rbac.authorization.k8s.io/v1alpha1' },\n      // ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.\n      clusterRole:: {\n        local kind = { kind: 'ClusterRole' },\n        new():: apiVersion + kind,\n        // Rules holds all the PolicyRules for this ClusterRole\n        withRules(rules):: self + if std.type(rules) == 'array' then { rules: rules } else { rules: [rules] },\n        // Rules holds all the PolicyRules for this ClusterRole\n        withRulesMixin(rules):: self + if std.type(rules) == 'array' then { rules+: rules } else { rules+: [rules] },\n        rulesType:: hidden.rbac.v1alpha1.policyRule,\n        mixin:: {\n          // AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller.\n          aggregationRule:: {\n            local __aggregationRuleMixin(aggregationRule) = { aggregationRule+: aggregationRule },\n            mixinInstance(aggregationRule):: __aggregationRuleMixin(aggregationRule),\n            // ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added\n            withClusterRoleSelectors(clusterRoleSelectors):: self + if std.type(clusterRoleSelectors) == 'array' then __aggregationRuleMixin({ clusterRoleSelectors: clusterRoleSelectors }) else __aggregationRuleMixin({ clusterRoleSelectors: [clusterRoleSelectors] }),\n            // ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added\n            withClusterRoleSelectorsMixin(clusterRoleSelectors):: self + if std.type(clusterRoleSelectors) == 'array' then __aggregationRuleMixin({ clusterRoleSelectors+: clusterRoleSelectors }) else __aggregationRuleMixin({ clusterRoleSelectors+: [clusterRoleSelectors] }),\n            clusterRoleSelectorsType:: hidden.meta.v1.labelSelector,\n          },\n          aggregationRuleType:: hidden.rbac.v1alpha1.aggregationRule,\n          // Standard object's metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // ClusterRoleBinding references a ClusterRole, but not contain it.  It can reference a ClusterRole in the global namespace, and adds who information via Subject.\n      clusterRoleBinding:: {\n        local kind = { kind: 'ClusterRoleBinding' },\n        new():: apiVersion + kind,\n        // Subjects holds references to the objects the role applies to.\n        withSubjects(subjects):: self + if std.type(subjects) == 'array' then { subjects: subjects } else { subjects: [subjects] },\n        // Subjects holds references to the objects the role applies to.\n        withSubjectsMixin(subjects):: self + if std.type(subjects) == 'array' then { subjects+: subjects } else { subjects+: [subjects] },\n        subjectsType:: hidden.rbac.v1alpha1.subject,\n        mixin:: {\n          // Standard object's metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.\n          roleRef:: {\n            local __roleRefMixin(roleRef) = { roleRef+: roleRef },\n            mixinInstance(roleRef):: __roleRefMixin(roleRef),\n            // APIGroup is the group for the resource being referenced\n            withApiGroup(apiGroup):: self + __roleRefMixin({ apiGroup: apiGroup }),\n            // Kind is the type of resource being referenced\n            withKind(kind):: self + __roleRefMixin({ kind: kind }),\n            // Name is the name of resource being referenced\n            withName(name):: self + __roleRefMixin({ name: name }),\n          },\n          roleRefType:: hidden.rbac.v1alpha1.roleRef,\n        },\n      },\n      // Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.\n      role:: {\n        local kind = { kind: 'Role' },\n        new():: apiVersion + kind,\n        // Rules holds all the PolicyRules for this Role\n        withRules(rules):: self + if std.type(rules) == 'array' then { rules: rules } else { rules: [rules] },\n        // Rules holds all the PolicyRules for this Role\n        withRulesMixin(rules):: self + if std.type(rules) == 'array' then { rules+: rules } else { rules+: [rules] },\n        rulesType:: hidden.rbac.v1alpha1.policyRule,\n        mixin:: {\n          // Standard object's metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // RoleBinding references a role, but does not contain it.  It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in.  RoleBindings in a given namespace only have effect in that namespace.\n      roleBinding:: {\n        local kind = { kind: 'RoleBinding' },\n        new():: apiVersion + kind,\n        // Subjects holds references to the objects the role applies to.\n        withSubjects(subjects):: self + if std.type(subjects) == 'array' then { subjects: subjects } else { subjects: [subjects] },\n        // Subjects holds references to the objects the role applies to.\n        withSubjectsMixin(subjects):: self + if std.type(subjects) == 'array' then { subjects+: subjects } else { subjects+: [subjects] },\n        subjectsType:: hidden.rbac.v1alpha1.subject,\n        mixin:: {\n          // Standard object's metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.\n          roleRef:: {\n            local __roleRefMixin(roleRef) = { roleRef+: roleRef },\n            mixinInstance(roleRef):: __roleRefMixin(roleRef),\n            // APIGroup is the group for the resource being referenced\n            withApiGroup(apiGroup):: self + __roleRefMixin({ apiGroup: apiGroup }),\n            // Kind is the type of resource being referenced\n            withKind(kind):: self + __roleRefMixin({ kind: kind }),\n            // Name is the name of resource being referenced\n            withName(name):: self + __roleRefMixin({ name: name }),\n          },\n          roleRefType:: hidden.rbac.v1alpha1.roleRef,\n        },\n      },\n    },\n    v1beta1:: {\n      local apiVersion = { apiVersion: 'rbac.authorization.k8s.io/v1beta1' },\n      // ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.\n      clusterRole:: {\n        local kind = { kind: 'ClusterRole' },\n        new():: apiVersion + kind,\n        // Rules holds all the PolicyRules for this ClusterRole\n        withRules(rules):: self + if std.type(rules) == 'array' then { rules: rules } else { rules: [rules] },\n        // Rules holds all the PolicyRules for this ClusterRole\n        withRulesMixin(rules):: self + if std.type(rules) == 'array' then { rules+: rules } else { rules+: [rules] },\n        rulesType:: hidden.rbac.v1beta1.policyRule,\n        mixin:: {\n          // AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller.\n          aggregationRule:: {\n            local __aggregationRuleMixin(aggregationRule) = { aggregationRule+: aggregationRule },\n            mixinInstance(aggregationRule):: __aggregationRuleMixin(aggregationRule),\n            // ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added\n            withClusterRoleSelectors(clusterRoleSelectors):: self + if std.type(clusterRoleSelectors) == 'array' then __aggregationRuleMixin({ clusterRoleSelectors: clusterRoleSelectors }) else __aggregationRuleMixin({ clusterRoleSelectors: [clusterRoleSelectors] }),\n            // ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added\n            withClusterRoleSelectorsMixin(clusterRoleSelectors):: self + if std.type(clusterRoleSelectors) == 'array' then __aggregationRuleMixin({ clusterRoleSelectors+: clusterRoleSelectors }) else __aggregationRuleMixin({ clusterRoleSelectors+: [clusterRoleSelectors] }),\n            clusterRoleSelectorsType:: hidden.meta.v1.labelSelector,\n          },\n          aggregationRuleType:: hidden.rbac.v1beta1.aggregationRule,\n          // Standard object's metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // ClusterRoleBinding references a ClusterRole, but not contain it.  It can reference a ClusterRole in the global namespace, and adds who information via Subject.\n      clusterRoleBinding:: {\n        local kind = { kind: 'ClusterRoleBinding' },\n        new():: apiVersion + kind,\n        // Subjects holds references to the objects the role applies to.\n        withSubjects(subjects):: self + if std.type(subjects) == 'array' then { subjects: subjects } else { subjects: [subjects] },\n        // Subjects holds references to the objects the role applies to.\n        withSubjectsMixin(subjects):: self + if std.type(subjects) == 'array' then { subjects+: subjects } else { subjects+: [subjects] },\n        subjectsType:: hidden.rbac.v1beta1.subject,\n        mixin:: {\n          // Standard object's metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.\n          roleRef:: {\n            local __roleRefMixin(roleRef) = { roleRef+: roleRef },\n            mixinInstance(roleRef):: __roleRefMixin(roleRef),\n            // APIGroup is the group for the resource being referenced\n            withApiGroup(apiGroup):: self + __roleRefMixin({ apiGroup: apiGroup }),\n            // Kind is the type of resource being referenced\n            withKind(kind):: self + __roleRefMixin({ kind: kind }),\n            // Name is the name of resource being referenced\n            withName(name):: self + __roleRefMixin({ name: name }),\n          },\n          roleRefType:: hidden.rbac.v1beta1.roleRef,\n        },\n      },\n      // Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.\n      role:: {\n        local kind = { kind: 'Role' },\n        new():: apiVersion + kind,\n        // Rules holds all the PolicyRules for this Role\n        withRules(rules):: self + if std.type(rules) == 'array' then { rules: rules } else { rules: [rules] },\n        // Rules holds all the PolicyRules for this Role\n        withRulesMixin(rules):: self + if std.type(rules) == 'array' then { rules+: rules } else { rules+: [rules] },\n        rulesType:: hidden.rbac.v1beta1.policyRule,\n        mixin:: {\n          // Standard object's metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // RoleBinding references a role, but does not contain it.  It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in.  RoleBindings in a given namespace only have effect in that namespace.\n      roleBinding:: {\n        local kind = { kind: 'RoleBinding' },\n        new():: apiVersion + kind,\n        // Subjects holds references to the objects the role applies to.\n        withSubjects(subjects):: self + if std.type(subjects) == 'array' then { subjects: subjects } else { subjects: [subjects] },\n        // Subjects holds references to the objects the role applies to.\n        withSubjectsMixin(subjects):: self + if std.type(subjects) == 'array' then { subjects+: subjects } else { subjects+: [subjects] },\n        subjectsType:: hidden.rbac.v1beta1.subject,\n        mixin:: {\n          // Standard object's metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.\n          roleRef:: {\n            local __roleRefMixin(roleRef) = { roleRef+: roleRef },\n            mixinInstance(roleRef):: __roleRefMixin(roleRef),\n            // APIGroup is the group for the resource being referenced\n            withApiGroup(apiGroup):: self + __roleRefMixin({ apiGroup: apiGroup }),\n            // Kind is the type of resource being referenced\n            withKind(kind):: self + __roleRefMixin({ kind: kind }),\n            // Name is the name of resource being referenced\n            withName(name):: self + __roleRefMixin({ name: name }),\n          },\n          roleRefType:: hidden.rbac.v1beta1.roleRef,\n        },\n      },\n    },\n  },\n  scheduling:: {\n    v1alpha1:: {\n      local apiVersion = { apiVersion: 'scheduling.k8s.io/v1alpha1' },\n      // PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.\n      priorityClass:: {\n        local kind = { kind: 'PriorityClass' },\n        new():: apiVersion + kind,\n        // description is an arbitrary string that usually provides guidelines on when this priority class should be used.\n        withDescription(description):: self + { description: description },\n        // globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.\n        withGlobalDefault(globalDefault):: self + { globalDefault: globalDefault },\n        // The value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.\n        withValue(value):: self + { value: value },\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n    },\n    v1beta1:: {\n      local apiVersion = { apiVersion: 'scheduling.k8s.io/v1beta1' },\n      // PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.\n      priorityClass:: {\n        local kind = { kind: 'PriorityClass' },\n        new():: apiVersion + kind,\n        // description is an arbitrary string that usually provides guidelines on when this priority class should be used.\n        withDescription(description):: self + { description: description },\n        // globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.\n        withGlobalDefault(globalDefault):: self + { globalDefault: globalDefault },\n        // The value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.\n        withValue(value):: self + { value: value },\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n    },\n  },\n  settings:: {\n    v1alpha1:: {\n      local apiVersion = { apiVersion: 'settings.k8s.io/v1alpha1' },\n      // PodPreset is a policy resource that defines additional runtime requirements for a Pod.\n      podPreset:: {\n        local kind = { kind: 'PodPreset' },\n        new():: apiVersion + kind,\n        mixin:: {\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Env defines the collection of EnvVar to inject into containers.\n            withEnv(env):: self + if std.type(env) == 'array' then __specMixin({ env: env }) else __specMixin({ env: [env] }),\n            // Env defines the collection of EnvVar to inject into containers.\n            withEnvMixin(env):: self + if std.type(env) == 'array' then __specMixin({ env+: env }) else __specMixin({ env+: [env] }),\n            envType:: hidden.core.v1.envVar,\n            // EnvFrom defines the collection of EnvFromSource to inject into containers.\n            withEnvFrom(envFrom):: self + if std.type(envFrom) == 'array' then __specMixin({ envFrom: envFrom }) else __specMixin({ envFrom: [envFrom] }),\n            // EnvFrom defines the collection of EnvFromSource to inject into containers.\n            withEnvFromMixin(envFrom):: self + if std.type(envFrom) == 'array' then __specMixin({ envFrom+: envFrom }) else __specMixin({ envFrom+: [envFrom] }),\n            envFromType:: hidden.core.v1.envFromSource,\n            // Selector is a label query over a set of resources, in this case pods. Required.\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // VolumeMounts defines the collection of VolumeMount to inject into containers.\n            withVolumeMounts(volumeMounts):: self + if std.type(volumeMounts) == 'array' then __specMixin({ volumeMounts: volumeMounts }) else __specMixin({ volumeMounts: [volumeMounts] }),\n            // VolumeMounts defines the collection of VolumeMount to inject into containers.\n            withVolumeMountsMixin(volumeMounts):: self + if std.type(volumeMounts) == 'array' then __specMixin({ volumeMounts+: volumeMounts }) else __specMixin({ volumeMounts+: [volumeMounts] }),\n            volumeMountsType:: hidden.core.v1.volumeMount,\n            // Volumes defines the collection of Volume to inject into the pod.\n            withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n            // Volumes defines the collection of Volume to inject into the pod.\n            withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n            volumesType:: hidden.core.v1.volume,\n          },\n          specType:: hidden.settings.v1alpha1.podPresetSpec,\n        },\n      },\n    },\n  },\n  storage:: {\n    v1:: {\n      local apiVersion = { apiVersion: 'storage.k8s.io/v1' },\n      // StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n      //\n      // StorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.\n      storageClass:: {\n        local kind = { kind: 'StorageClass' },\n        new():: apiVersion + kind,\n        // AllowVolumeExpansion shows whether the storage class allow volume expand\n        withAllowVolumeExpansion(allowVolumeExpansion):: self + { allowVolumeExpansion: allowVolumeExpansion },\n        // Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is alpha-level and is only honored by servers that enable the DynamicProvisioningScheduling feature.\n        withAllowedTopologies(allowedTopologies):: self + if std.type(allowedTopologies) == 'array' then { allowedTopologies: allowedTopologies } else { allowedTopologies: [allowedTopologies] },\n        // Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is alpha-level and is only honored by servers that enable the DynamicProvisioningScheduling feature.\n        withAllowedTopologiesMixin(allowedTopologies):: self + if std.type(allowedTopologies) == 'array' then { allowedTopologies+: allowedTopologies } else { allowedTopologies+: [allowedTopologies] },\n        allowedTopologiesType:: hidden.core.v1.topologySelectorTerm,\n        // Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\"ro\", \"soft\"]. Not validated - mount of the PVs will simply fail if one is invalid.\n        withMountOptions(mountOptions):: self + if std.type(mountOptions) == 'array' then { mountOptions: mountOptions } else { mountOptions: [mountOptions] },\n        // Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\"ro\", \"soft\"]. Not validated - mount of the PVs will simply fail if one is invalid.\n        withMountOptionsMixin(mountOptions):: self + if std.type(mountOptions) == 'array' then { mountOptions+: mountOptions } else { mountOptions+: [mountOptions] },\n        // Parameters holds the parameters for the provisioner that should create volumes of this storage class.\n        withParameters(parameters):: self + { parameters: parameters },\n        // Parameters holds the parameters for the provisioner that should create volumes of this storage class.\n        withParametersMixin(parameters):: self + { parameters+: parameters },\n        // Provisioner indicates the type of the provisioner.\n        withProvisioner(provisioner):: self + { provisioner: provisioner },\n        // Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.\n        withReclaimPolicy(reclaimPolicy):: self + { reclaimPolicy: reclaimPolicy },\n        // VolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound.  When unset, VolumeBindingImmediate is used. This field is alpha-level and is only honored by servers that enable the VolumeScheduling feature.\n        withVolumeBindingMode(volumeBindingMode):: self + { volumeBindingMode: volumeBindingMode },\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n    },\n    v1alpha1:: {\n      local apiVersion = { apiVersion: 'storage.k8s.io/v1alpha1' },\n      // VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node.\n      //\n      // VolumeAttachment objects are non-namespaced.\n      volumeAttachment:: {\n        local kind = { kind: 'VolumeAttachment' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().\n            withAttacher(attacher):: self + __specMixin({ attacher: attacher }),\n            // The node that the volume should be attached to.\n            withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n            // Source represents the volume that should be attached.\n            source:: {\n              local __sourceMixin(source) = __specMixin({ source+: source }),\n              mixinInstance(source):: __sourceMixin(source),\n              // Name of the persistent volume to attach.\n              withPersistentVolumeName(persistentVolumeName):: self + __sourceMixin({ persistentVolumeName: persistentVolumeName }),\n            },\n            sourceType:: hidden.storage.v1alpha1.volumeAttachmentSource,\n          },\n          specType:: hidden.storage.v1alpha1.volumeAttachmentSpec,\n        },\n      },\n    },\n    v1beta1:: {\n      local apiVersion = { apiVersion: 'storage.k8s.io/v1beta1' },\n      // StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n      //\n      // StorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.\n      storageClass:: {\n        local kind = { kind: 'StorageClass' },\n        new():: apiVersion + kind,\n        // AllowVolumeExpansion shows whether the storage class allow volume expand\n        withAllowVolumeExpansion(allowVolumeExpansion):: self + { allowVolumeExpansion: allowVolumeExpansion },\n        // Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is alpha-level and is only honored by servers that enable the DynamicProvisioningScheduling feature.\n        withAllowedTopologies(allowedTopologies):: self + if std.type(allowedTopologies) == 'array' then { allowedTopologies: allowedTopologies } else { allowedTopologies: [allowedTopologies] },\n        // Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is alpha-level and is only honored by servers that enable the DynamicProvisioningScheduling feature.\n        withAllowedTopologiesMixin(allowedTopologies):: self + if std.type(allowedTopologies) == 'array' then { allowedTopologies+: allowedTopologies } else { allowedTopologies+: [allowedTopologies] },\n        allowedTopologiesType:: hidden.core.v1.topologySelectorTerm,\n        // Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\"ro\", \"soft\"]. Not validated - mount of the PVs will simply fail if one is invalid.\n        withMountOptions(mountOptions):: self + if std.type(mountOptions) == 'array' then { mountOptions: mountOptions } else { mountOptions: [mountOptions] },\n        // Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\"ro\", \"soft\"]. Not validated - mount of the PVs will simply fail if one is invalid.\n        withMountOptionsMixin(mountOptions):: self + if std.type(mountOptions) == 'array' then { mountOptions+: mountOptions } else { mountOptions+: [mountOptions] },\n        // Parameters holds the parameters for the provisioner that should create volumes of this storage class.\n        withParameters(parameters):: self + { parameters: parameters },\n        // Parameters holds the parameters for the provisioner that should create volumes of this storage class.\n        withParametersMixin(parameters):: self + { parameters+: parameters },\n        // Provisioner indicates the type of the provisioner.\n        withProvisioner(provisioner):: self + { provisioner: provisioner },\n        // Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.\n        withReclaimPolicy(reclaimPolicy):: self + { reclaimPolicy: reclaimPolicy },\n        // VolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound.  When unset, VolumeBindingImmediate is used. This field is alpha-level and is only honored by servers that enable the VolumeScheduling feature.\n        withVolumeBindingMode(volumeBindingMode):: self + { volumeBindingMode: volumeBindingMode },\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node.\n      //\n      // VolumeAttachment objects are non-namespaced.\n      volumeAttachment:: {\n        local kind = { kind: 'VolumeAttachment' },\n        new():: apiVersion + kind,\n        mixin:: {\n          // Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = { metadata+: metadata },\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({ labels: labels }),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({ name: name }),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n            // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n            withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n            ownerReferencesType:: hidden.meta.v1.ownerReference,\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system.\n          spec:: {\n            local __specMixin(spec) = { spec+: spec },\n            mixinInstance(spec):: __specMixin(spec),\n            // Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().\n            withAttacher(attacher):: self + __specMixin({ attacher: attacher }),\n            // The node that the volume should be attached to.\n            withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n            // Source represents the volume that should be attached.\n            source:: {\n              local __sourceMixin(source) = __specMixin({ source+: source }),\n              mixinInstance(source):: __sourceMixin(source),\n              // Name of the persistent volume to attach.\n              withPersistentVolumeName(persistentVolumeName):: self + __sourceMixin({ persistentVolumeName: persistentVolumeName }),\n            },\n            sourceType:: hidden.storage.v1beta1.volumeAttachmentSource,\n          },\n          specType:: hidden.storage.v1beta1.volumeAttachmentSpec,\n        },\n      },\n    },\n  },\n  local hidden = {\n    admissionregistration:: {\n      v1alpha1:: {\n        local apiVersion = { apiVersion: 'admissionregistration/v1alpha1' },\n        // Initializer describes the name and the failure policy of an initializer, and what resources it applies to.\n        initializer:: {\n          new():: {},\n          // Name is the identifier of the initializer. It will be added to the object that needs to be initialized. Name should be fully qualified, e.g., alwayspullimages.kubernetes.io, where \"alwayspullimages\" is the name of the webhook, and kubernetes.io is the name of the organization. Required\n          withName(name):: self + { name: name },\n          // Rules describes what resources/subresources the initializer cares about. The initializer cares about an operation if it matches _any_ Rule. Rule.Resources must not include subresources.\n          withRules(rules):: self + if std.type(rules) == 'array' then { rules: rules } else { rules: [rules] },\n          // Rules describes what resources/subresources the initializer cares about. The initializer cares about an operation if it matches _any_ Rule. Rule.Resources must not include subresources.\n          withRulesMixin(rules):: self + if std.type(rules) == 'array' then { rules+: rules } else { rules+: [rules] },\n          rulesType:: hidden.admissionregistration.v1alpha1.rule,\n          mixin:: {},\n        },\n        // InitializerConfigurationList is a list of InitializerConfiguration.\n        initializerConfigurationList:: {\n          new():: {},\n          // List of InitializerConfiguration.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // List of InitializerConfiguration.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.admissionregistration.v1alpha1.initializerConfiguration,\n          mixin:: {},\n        },\n        // Rule is a tuple of APIGroups, APIVersion, and Resources.It is recommended to make sure that all the tuple expansions are valid.\n        rule:: {\n          new():: {},\n          // APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.\n          withApiGroups(apiGroups):: self + if std.type(apiGroups) == 'array' then { apiGroups: apiGroups } else { apiGroups: [apiGroups] },\n          // APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.\n          withApiGroupsMixin(apiGroups):: self + if std.type(apiGroups) == 'array' then { apiGroups+: apiGroups } else { apiGroups+: [apiGroups] },\n          // APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.\n          withApiVersions(apiVersions):: self + if std.type(apiVersions) == 'array' then { apiVersions: apiVersions } else { apiVersions: [apiVersions] },\n          // APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.\n          withApiVersionsMixin(apiVersions):: self + if std.type(apiVersions) == 'array' then { apiVersions+: apiVersions } else { apiVersions+: [apiVersions] },\n          // Resources is a list of resources this rule applies to.\n          //\n          // For example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\n          //\n          // If wildcard is present, the validation rule will ensure resources do not overlap with each other.\n          //\n          // Depending on the enclosing object, subresources might not be allowed. Required.\n          withResources(resources):: self + if std.type(resources) == 'array' then { resources: resources } else { resources: [resources] },\n          // Resources is a list of resources this rule applies to.\n          //\n          // For example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\n          //\n          // If wildcard is present, the validation rule will ensure resources do not overlap with each other.\n          //\n          // Depending on the enclosing object, subresources might not be allowed. Required.\n          withResourcesMixin(resources):: self + if std.type(resources) == 'array' then { resources+: resources } else { resources+: [resources] },\n          mixin:: {},\n        },\n      },\n      v1beta1:: {\n        local apiVersion = { apiVersion: 'admissionregistration/v1beta1' },\n        // MutatingWebhookConfigurationList is a list of MutatingWebhookConfiguration.\n        mutatingWebhookConfigurationList:: {\n          new():: {},\n          // List of MutatingWebhookConfiguration.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // List of MutatingWebhookConfiguration.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.admissionregistration.v1beta1.mutatingWebhookConfiguration,\n          mixin:: {},\n        },\n        // RuleWithOperations is a tuple of Operations and Resources. It is recommended to make sure that all the tuple expansions are valid.\n        ruleWithOperations:: {\n          new():: {},\n          // APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.\n          withApiGroups(apiGroups):: self + if std.type(apiGroups) == 'array' then { apiGroups: apiGroups } else { apiGroups: [apiGroups] },\n          // APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.\n          withApiGroupsMixin(apiGroups):: self + if std.type(apiGroups) == 'array' then { apiGroups+: apiGroups } else { apiGroups+: [apiGroups] },\n          // APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.\n          withApiVersions(apiVersions):: self + if std.type(apiVersions) == 'array' then { apiVersions: apiVersions } else { apiVersions: [apiVersions] },\n          // APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.\n          withApiVersionsMixin(apiVersions):: self + if std.type(apiVersions) == 'array' then { apiVersions+: apiVersions } else { apiVersions+: [apiVersions] },\n          // Operations is the operations the admission hook cares about - CREATE, UPDATE, or * for all operations. If '*' is present, the length of the slice must be one. Required.\n          withOperations(operations):: self + if std.type(operations) == 'array' then { operations: operations } else { operations: [operations] },\n          // Operations is the operations the admission hook cares about - CREATE, UPDATE, or * for all operations. If '*' is present, the length of the slice must be one. Required.\n          withOperationsMixin(operations):: self + if std.type(operations) == 'array' then { operations+: operations } else { operations+: [operations] },\n          // Resources is a list of resources this rule applies to.\n          //\n          // For example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\n          //\n          // If wildcard is present, the validation rule will ensure resources do not overlap with each other.\n          //\n          // Depending on the enclosing object, subresources might not be allowed. Required.\n          withResources(resources):: self + if std.type(resources) == 'array' then { resources: resources } else { resources: [resources] },\n          // Resources is a list of resources this rule applies to.\n          //\n          // For example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\n          //\n          // If wildcard is present, the validation rule will ensure resources do not overlap with each other.\n          //\n          // Depending on the enclosing object, subresources might not be allowed. Required.\n          withResourcesMixin(resources):: self + if std.type(resources) == 'array' then { resources+: resources } else { resources+: [resources] },\n          mixin:: {},\n        },\n        // ServiceReference holds a reference to Service.legacy.k8s.io\n        serviceReference:: {\n          new():: {},\n          // `name` is the name of the service. Required\n          withName(name):: self + { name: name },\n          // `namespace` is the namespace of the service. Required\n          withNamespace(namespace):: self + { namespace: namespace },\n          // `path` is an optional URL path which will be sent in any request to this service.\n          withPath(path):: self + { path: path },\n          mixin:: {},\n        },\n        // ValidatingWebhookConfigurationList is a list of ValidatingWebhookConfiguration.\n        validatingWebhookConfigurationList:: {\n          new():: {},\n          // List of ValidatingWebhookConfiguration.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // List of ValidatingWebhookConfiguration.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.admissionregistration.v1beta1.validatingWebhookConfiguration,\n          mixin:: {},\n        },\n        // Webhook describes an admission webhook and the resources and operations it applies to.\n        webhook:: {\n          new():: {},\n          // FailurePolicy defines how unrecognized errors from the admission endpoint are handled - allowed values are Ignore or Fail. Defaults to Ignore.\n          withFailurePolicy(failurePolicy):: self + { failurePolicy: failurePolicy },\n          // The name of the admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where \"imagepolicy\" is the name of the webhook, and kubernetes.io is the name of the organization. Required.\n          withName(name):: self + { name: name },\n          // Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule. However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks from putting the cluster in a state which cannot be recovered from without completely disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects.\n          withRules(rules):: self + if std.type(rules) == 'array' then { rules: rules } else { rules: [rules] },\n          // Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule. However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks from putting the cluster in a state which cannot be recovered from without completely disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects.\n          withRulesMixin(rules):: self + if std.type(rules) == 'array' then { rules+: rules } else { rules+: [rules] },\n          rulesType:: hidden.admissionregistration.v1beta1.ruleWithOperations,\n          mixin:: {\n            // ClientConfig defines how to communicate with the hook. Required\n            clientConfig:: {\n              local __clientConfigMixin(clientConfig) = { clientConfig+: clientConfig },\n              mixinInstance(clientConfig):: __clientConfigMixin(clientConfig),\n              // `caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. Required.\n              withCaBundle(caBundle):: self + __clientConfigMixin({ caBundle: caBundle }),\n              // `service` is a reference to the service for this webhook. Either `service` or `url` must be specified.\n              //\n              // If the webhook is running within the cluster, then you should use `service`.\n              //\n              // Port 443 will be used if it is open, otherwise it is an error.\n              service:: {\n                local __serviceMixin(service) = __clientConfigMixin({ service+: service }),\n                mixinInstance(service):: __serviceMixin(service),\n                // `name` is the name of the service. Required\n                withName(name):: self + __serviceMixin({ name: name }),\n                // `namespace` is the namespace of the service. Required\n                withNamespace(namespace):: self + __serviceMixin({ namespace: namespace }),\n                // `path` is an optional URL path which will be sent in any request to this service.\n                withPath(path):: self + __serviceMixin({ path: path }),\n              },\n              serviceType:: hidden.admissionregistration.v1beta1.serviceReference,\n              // `url` gives the location of the webhook, in standard URL form (`[scheme://]host:port/path`). Exactly one of `url` or `service` must be specified.\n              //\n              // The `host` should not refer to a service running in the cluster; use the `service` field instead. The host might be resolved via external DNS in some apiservers (e.g., `kube-apiserver` cannot resolve in-cluster DNS as that would be a layering violation). `host` may also be an IP address.\n              //\n              // Please note that using `localhost` or `127.0.0.1` as a `host` is risky unless you take great care to run this webhook on all hosts which run an apiserver which might need to make calls to this webhook. Such installs are likely to be non-portable, i.e., not easy to turn up in a new cluster.\n              //\n              // The scheme must be \"https\"; the URL must begin with \"https://\".\n              //\n              // A path is optional, and if present may be any string permissible in a URL. You may use the path to pass an arbitrary string to the webhook, for example, a cluster identifier.\n              //\n              // Attempting to use a user or basic auth e.g. \"user:password@\" is not allowed. Fragments (\"#...\") and query parameters (\"?...\") are not allowed, either.\n              withUrl(url):: self + __clientConfigMixin({ url: url }),\n            },\n            clientConfigType:: hidden.admissionregistration.v1beta1.webhookClientConfig,\n            // NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels. If the object is another cluster scoped resource, it never skips the webhook.\n            //\n            // For example, to run the webhook on any objects whose namespace is not associated with \"runlevel\" of \"0\" or \"1\";  you will set the selector as follows: \"namespaceSelector\": {\n            // \"matchExpressions\": [\n            // {\n            // \"key\": \"runlevel\",\n            // \"operator\": \"NotIn\",\n            // \"values\": [\n            // \"0\",\n            // \"1\"\n            // ]\n            // }\n            // ]\n            // }\n            //\n            // If instead you want to only run the webhook on any objects whose namespace is associated with the \"environment\" of \"prod\" or \"staging\"; you will set the selector as follows: \"namespaceSelector\": {\n            // \"matchExpressions\": [\n            // {\n            // \"key\": \"environment\",\n            // \"operator\": \"In\",\n            // \"values\": [\n            // \"prod\",\n            // \"staging\"\n            // ]\n            // }\n            // ]\n            // }\n            //\n            // See https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ for more examples of label selectors.\n            //\n            // Default to the empty LabelSelector, which matches everything.\n            namespaceSelector:: {\n              local __namespaceSelectorMixin(namespaceSelector) = { namespaceSelector+: namespaceSelector },\n              mixinInstance(namespaceSelector):: __namespaceSelectorMixin(namespaceSelector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __namespaceSelectorMixin({ matchExpressions: matchExpressions }) else __namespaceSelectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __namespaceSelectorMixin({ matchExpressions+: matchExpressions }) else __namespaceSelectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __namespaceSelectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __namespaceSelectorMixin({ matchLabels+: matchLabels }),\n            },\n            namespaceSelectorType:: hidden.meta.v1.labelSelector,\n          },\n        },\n        // WebhookClientConfig contains the information to make a TLS connection with the webhook\n        webhookClientConfig:: {\n          new():: {},\n          // `caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. Required.\n          withCaBundle(caBundle):: self + { caBundle: caBundle },\n          // `url` gives the location of the webhook, in standard URL form (`[scheme://]host:port/path`). Exactly one of `url` or `service` must be specified.\n          //\n          // The `host` should not refer to a service running in the cluster; use the `service` field instead. The host might be resolved via external DNS in some apiservers (e.g., `kube-apiserver` cannot resolve in-cluster DNS as that would be a layering violation). `host` may also be an IP address.\n          //\n          // Please note that using `localhost` or `127.0.0.1` as a `host` is risky unless you take great care to run this webhook on all hosts which run an apiserver which might need to make calls to this webhook. Such installs are likely to be non-portable, i.e., not easy to turn up in a new cluster.\n          //\n          // The scheme must be \"https\"; the URL must begin with \"https://\".\n          //\n          // A path is optional, and if present may be any string permissible in a URL. You may use the path to pass an arbitrary string to the webhook, for example, a cluster identifier.\n          //\n          // Attempting to use a user or basic auth e.g. \"user:password@\" is not allowed. Fragments (\"#...\") and query parameters (\"?...\") are not allowed, either.\n          withUrl(url):: self + { url: url },\n          mixin:: {\n            // `service` is a reference to the service for this webhook. Either `service` or `url` must be specified.\n            //\n            // If the webhook is running within the cluster, then you should use `service`.\n            //\n            // Port 443 will be used if it is open, otherwise it is an error.\n            service:: {\n              local __serviceMixin(service) = { service+: service },\n              mixinInstance(service):: __serviceMixin(service),\n              // `name` is the name of the service. Required\n              withName(name):: self + __serviceMixin({ name: name }),\n              // `namespace` is the namespace of the service. Required\n              withNamespace(namespace):: self + __serviceMixin({ namespace: namespace }),\n              // `path` is an optional URL path which will be sent in any request to this service.\n              withPath(path):: self + __serviceMixin({ path: path }),\n            },\n            serviceType:: hidden.admissionregistration.v1beta1.serviceReference,\n          },\n        },\n      },\n    },\n    apiextensions:: {\n      v1beta1:: {\n        local apiVersion = { apiVersion: 'apiextensions/v1beta1' },\n        // CustomResourceColumnDefinition specifies a column for server side printing.\n        customResourceColumnDefinition:: {\n          new():: {},\n          // JSONPath is a simple JSON path, i.e. with array notation.\n          withJsonPath(jsonPath):: self + { JSONPath: jsonPath },\n          // description is a human readable description of this column.\n          withDescription(description):: self + { description: description },\n          // format is an optional OpenAPI type definition for this column. The 'name' format is applied to the primary identifier column to assist in clients identifying column is the resource name. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.\n          withFormat(format):: self + { format: format },\n          // name is a human readable name for the column.\n          withName(name):: self + { name: name },\n          // priority is an integer defining the relative importance of this column compared to others. Lower numbers are considered higher priority. Columns that may be omitted in limited space scenarios should be given a higher priority.\n          withPriority(priority):: self + { priority: priority },\n          // type is an OpenAPI type definition for this column. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // CustomResourceDefinitionCondition contains details for the current condition of this pod.\n        customResourceDefinitionCondition:: {\n          new():: {},\n          // Last time the condition transitioned from one status to another.\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // Human-readable message indicating details about last transition.\n          withMessage(message):: self + { message: message },\n          // Unique, one-word, CamelCase reason for the condition's last transition.\n          withReason(reason):: self + { reason: reason },\n          // Status is the status of the condition. Can be True, False, Unknown.\n          withStatus(status):: self + { status: status },\n          // Type is the type of the condition.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // CustomResourceDefinitionList is a list of CustomResourceDefinition objects.\n        customResourceDefinitionList:: {\n          new():: {},\n          // Items individual CustomResourceDefinitions\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items individual CustomResourceDefinitions\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.apiextensions.v1beta1.customResourceDefinition,\n          mixin:: {},\n        },\n        // CustomResourceDefinitionNames indicates the names to serve this CustomResourceDefinition\n        customResourceDefinitionNames:: {\n          new():: {},\n          // Categories is a list of grouped resources custom resources belong to (e.g. 'all')\n          withCategories(categories):: self + if std.type(categories) == 'array' then { categories: categories } else { categories: [categories] },\n          // Categories is a list of grouped resources custom resources belong to (e.g. 'all')\n          withCategoriesMixin(categories):: self + if std.type(categories) == 'array' then { categories+: categories } else { categories+: [categories] },\n          // Kind is the serialized kind of the resource.  It is normally CamelCase and singular.\n          withKind(kind):: self + { kind: kind },\n          // ListKind is the serialized kind of the list for this resource.  Defaults to <kind>List.\n          withListKind(listKind):: self + { listKind: listKind },\n          // Plural is the plural name of the resource to serve.  It must match the name of the CustomResourceDefinition-registration too: plural.group and it must be all lowercase.\n          withPlural(plural):: self + { plural: plural },\n          // ShortNames are short names for the resource.  It must be all lowercase.\n          withShortNames(shortNames):: self + if std.type(shortNames) == 'array' then { shortNames: shortNames } else { shortNames: [shortNames] },\n          // ShortNames are short names for the resource.  It must be all lowercase.\n          withShortNamesMixin(shortNames):: self + if std.type(shortNames) == 'array' then { shortNames+: shortNames } else { shortNames+: [shortNames] },\n          // Singular is the singular name of the resource.  It must be all lowercase  Defaults to lowercased <kind>\n          withSingular(singular):: self + { singular: singular },\n          mixin:: {},\n        },\n        // CustomResourceDefinitionSpec describes how a user wants their resource to appear\n        customResourceDefinitionSpec:: {\n          new():: {},\n          // AdditionalPrinterColumns are additional columns shown e.g. in kubectl next to the name. Defaults to a created-at column.\n          withAdditionalPrinterColumns(additionalPrinterColumns):: self + if std.type(additionalPrinterColumns) == 'array' then { additionalPrinterColumns: additionalPrinterColumns } else { additionalPrinterColumns: [additionalPrinterColumns] },\n          // AdditionalPrinterColumns are additional columns shown e.g. in kubectl next to the name. Defaults to a created-at column.\n          withAdditionalPrinterColumnsMixin(additionalPrinterColumns):: self + if std.type(additionalPrinterColumns) == 'array' then { additionalPrinterColumns+: additionalPrinterColumns } else { additionalPrinterColumns+: [additionalPrinterColumns] },\n          additionalPrinterColumnsType:: hidden.apiextensions.v1beta1.customResourceColumnDefinition,\n          // Group is the group this resource belongs in\n          withGroup(group):: self + { group: group },\n          // Scope indicates whether this resource is cluster or namespace scoped.  Default is namespaced\n          withScope(scope):: self + { scope: scope },\n          // Version is the version this resource belongs in Should be always first item in Versions field if provided. Optional, but at least one of Version or Versions must be set. Deprecated: Please use `Versions`.\n          withVersion(version):: self + { version: version },\n          // Versions is the list of all supported versions for this resource. If Version field is provided, this field is optional. Validation: All versions must use the same validation schema for now. i.e., top level Validation field is applied to all of these versions. Order: The version name will be used to compute the order. If the version string is \"kube-like\", it will sort above non \"kube-like\" version strings, which are ordered lexicographically. \"Kube-like\" versions start with a \"v\", then are followed by a number (the major version), then optionally the string \"alpha\" or \"beta\" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.\n          withVersions(versions):: self + if std.type(versions) == 'array' then { versions: versions } else { versions: [versions] },\n          // Versions is the list of all supported versions for this resource. If Version field is provided, this field is optional. Validation: All versions must use the same validation schema for now. i.e., top level Validation field is applied to all of these versions. Order: The version name will be used to compute the order. If the version string is \"kube-like\", it will sort above non \"kube-like\" version strings, which are ordered lexicographically. \"Kube-like\" versions start with a \"v\", then are followed by a number (the major version), then optionally the string \"alpha\" or \"beta\" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.\n          withVersionsMixin(versions):: self + if std.type(versions) == 'array' then { versions+: versions } else { versions+: [versions] },\n          versionsType:: hidden.apiextensions.v1beta1.customResourceDefinitionVersion,\n          mixin:: {\n            // Names are the names used to describe this custom resource\n            names:: {\n              local __namesMixin(names) = { names+: names },\n              mixinInstance(names):: __namesMixin(names),\n              // Categories is a list of grouped resources custom resources belong to (e.g. 'all')\n              withCategories(categories):: self + if std.type(categories) == 'array' then __namesMixin({ categories: categories }) else __namesMixin({ categories: [categories] }),\n              // Categories is a list of grouped resources custom resources belong to (e.g. 'all')\n              withCategoriesMixin(categories):: self + if std.type(categories) == 'array' then __namesMixin({ categories+: categories }) else __namesMixin({ categories+: [categories] }),\n              // Kind is the serialized kind of the resource.  It is normally CamelCase and singular.\n              withKind(kind):: self + __namesMixin({ kind: kind }),\n              // ListKind is the serialized kind of the list for this resource.  Defaults to <kind>List.\n              withListKind(listKind):: self + __namesMixin({ listKind: listKind }),\n              // Plural is the plural name of the resource to serve.  It must match the name of the CustomResourceDefinition-registration too: plural.group and it must be all lowercase.\n              withPlural(plural):: self + __namesMixin({ plural: plural }),\n              // ShortNames are short names for the resource.  It must be all lowercase.\n              withShortNames(shortNames):: self + if std.type(shortNames) == 'array' then __namesMixin({ shortNames: shortNames }) else __namesMixin({ shortNames: [shortNames] }),\n              // ShortNames are short names for the resource.  It must be all lowercase.\n              withShortNamesMixin(shortNames):: self + if std.type(shortNames) == 'array' then __namesMixin({ shortNames+: shortNames }) else __namesMixin({ shortNames+: [shortNames] }),\n              // Singular is the singular name of the resource.  It must be all lowercase  Defaults to lowercased <kind>\n              withSingular(singular):: self + __namesMixin({ singular: singular }),\n            },\n            namesType:: hidden.apiextensions.v1beta1.customResourceDefinitionNames,\n            // Subresources describes the subresources for CustomResources\n            subresources:: {\n              local __subresourcesMixin(subresources) = { subresources+: subresources },\n              mixinInstance(subresources):: __subresourcesMixin(subresources),\n              // Scale denotes the scale subresource for CustomResources\n              scale:: {\n                local __scaleMixin(scale) = __subresourcesMixin({ scale+: scale }),\n                mixinInstance(scale):: __scaleMixin(scale),\n                // LabelSelectorPath defines the JSON path inside of a CustomResource that corresponds to Scale.Status.Selector. Only JSON paths without the array notation are allowed. Must be a JSON Path under .status. Must be set to work with HPA. If there is no value under the given path in the CustomResource, the status label selector value in the /scale subresource will default to the empty string.\n                withLabelSelectorPath(labelSelectorPath):: self + __scaleMixin({ labelSelectorPath: labelSelectorPath }),\n                // SpecReplicasPath defines the JSON path inside of a CustomResource that corresponds to Scale.Spec.Replicas. Only JSON paths without the array notation are allowed. Must be a JSON Path under .spec. If there is no value under the given path in the CustomResource, the /scale subresource will return an error on GET.\n                withSpecReplicasPath(specReplicasPath):: self + __scaleMixin({ specReplicasPath: specReplicasPath }),\n                // StatusReplicasPath defines the JSON path inside of a CustomResource that corresponds to Scale.Status.Replicas. Only JSON paths without the array notation are allowed. Must be a JSON Path under .status. If there is no value under the given path in the CustomResource, the status replica value in the /scale subresource will default to 0.\n                withStatusReplicasPath(statusReplicasPath):: self + __scaleMixin({ statusReplicasPath: statusReplicasPath }),\n              },\n              scaleType:: hidden.apiextensions.v1beta1.customResourceSubresourceScale,\n            },\n            subresourcesType:: hidden.apiextensions.v1beta1.customResourceSubresources,\n            // Validation describes the validation methods for CustomResources\n            validation:: {\n              local __validationMixin(validation) = { validation+: validation },\n              mixinInstance(validation):: __validationMixin(validation),\n              // OpenAPIV3Schema is the OpenAPI v3 schema to be validated against.\n              withOpenApiV3Schema(openApiV3Schema):: self + __validationMixin({ openAPIV3Schema: openApiV3Schema }),\n              // OpenAPIV3Schema is the OpenAPI v3 schema to be validated against.\n              withOpenApiV3SchemaMixin(openApiV3Schema):: self + __validationMixin({ openAPIV3Schema+: openApiV3Schema }),\n              openAPIV3SchemaType:: hidden.apiextensions.v1beta1.jsonSchemaProps,\n            },\n            validationType:: hidden.apiextensions.v1beta1.customResourceValidation,\n          },\n        },\n        // CustomResourceDefinitionStatus indicates the state of the CustomResourceDefinition\n        customResourceDefinitionStatus:: {\n          new():: {},\n          // Conditions indicate state for particular aspects of a CustomResourceDefinition\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // Conditions indicate state for particular aspects of a CustomResourceDefinition\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.apiextensions.v1beta1.customResourceDefinitionCondition,\n          // StoredVersions are all versions of CustomResources that were ever persisted. Tracking these versions allows a migration path for stored versions in etcd. The field is mutable so the migration controller can first finish a migration to another version (i.e. that no old objects are left in the storage), and then remove the rest of the versions from this list. None of the versions in this list can be removed from the spec.Versions field.\n          withStoredVersions(storedVersions):: self + if std.type(storedVersions) == 'array' then { storedVersions: storedVersions } else { storedVersions: [storedVersions] },\n          // StoredVersions are all versions of CustomResources that were ever persisted. Tracking these versions allows a migration path for stored versions in etcd. The field is mutable so the migration controller can first finish a migration to another version (i.e. that no old objects are left in the storage), and then remove the rest of the versions from this list. None of the versions in this list can be removed from the spec.Versions field.\n          withStoredVersionsMixin(storedVersions):: self + if std.type(storedVersions) == 'array' then { storedVersions+: storedVersions } else { storedVersions+: [storedVersions] },\n          mixin:: {\n            // AcceptedNames are the names that are actually being used to serve discovery They may be different than the names in spec.\n            acceptedNames:: {\n              local __acceptedNamesMixin(acceptedNames) = { acceptedNames+: acceptedNames },\n              mixinInstance(acceptedNames):: __acceptedNamesMixin(acceptedNames),\n              // Categories is a list of grouped resources custom resources belong to (e.g. 'all')\n              withCategories(categories):: self + if std.type(categories) == 'array' then __acceptedNamesMixin({ categories: categories }) else __acceptedNamesMixin({ categories: [categories] }),\n              // Categories is a list of grouped resources custom resources belong to (e.g. 'all')\n              withCategoriesMixin(categories):: self + if std.type(categories) == 'array' then __acceptedNamesMixin({ categories+: categories }) else __acceptedNamesMixin({ categories+: [categories] }),\n              // Kind is the serialized kind of the resource.  It is normally CamelCase and singular.\n              withKind(kind):: self + __acceptedNamesMixin({ kind: kind }),\n              // ListKind is the serialized kind of the list for this resource.  Defaults to <kind>List.\n              withListKind(listKind):: self + __acceptedNamesMixin({ listKind: listKind }),\n              // Plural is the plural name of the resource to serve.  It must match the name of the CustomResourceDefinition-registration too: plural.group and it must be all lowercase.\n              withPlural(plural):: self + __acceptedNamesMixin({ plural: plural }),\n              // ShortNames are short names for the resource.  It must be all lowercase.\n              withShortNames(shortNames):: self + if std.type(shortNames) == 'array' then __acceptedNamesMixin({ shortNames: shortNames }) else __acceptedNamesMixin({ shortNames: [shortNames] }),\n              // ShortNames are short names for the resource.  It must be all lowercase.\n              withShortNamesMixin(shortNames):: self + if std.type(shortNames) == 'array' then __acceptedNamesMixin({ shortNames+: shortNames }) else __acceptedNamesMixin({ shortNames+: [shortNames] }),\n              // Singular is the singular name of the resource.  It must be all lowercase  Defaults to lowercased <kind>\n              withSingular(singular):: self + __acceptedNamesMixin({ singular: singular }),\n            },\n            acceptedNamesType:: hidden.apiextensions.v1beta1.customResourceDefinitionNames,\n          },\n        },\n        customResourceDefinitionVersion:: {\n          new():: {},\n          // Name is the version name, e.g. “v1”, “v2beta1”, etc.\n          withName(name):: self + { name: name },\n          // Served is a flag enabling/disabling this version from being served via REST APIs\n          withServed(served):: self + { served: served },\n          // Storage flags the version as storage version. There must be exactly one flagged as storage version.\n          withStorage(storage):: self + { storage: storage },\n          mixin:: {},\n        },\n        // CustomResourceSubresourceScale defines how to serve the scale subresource for CustomResources.\n        customResourceSubresourceScale:: {\n          new():: {},\n          // LabelSelectorPath defines the JSON path inside of a CustomResource that corresponds to Scale.Status.Selector. Only JSON paths without the array notation are allowed. Must be a JSON Path under .status. Must be set to work with HPA. If there is no value under the given path in the CustomResource, the status label selector value in the /scale subresource will default to the empty string.\n          withLabelSelectorPath(labelSelectorPath):: self + { labelSelectorPath: labelSelectorPath },\n          // SpecReplicasPath defines the JSON path inside of a CustomResource that corresponds to Scale.Spec.Replicas. Only JSON paths without the array notation are allowed. Must be a JSON Path under .spec. If there is no value under the given path in the CustomResource, the /scale subresource will return an error on GET.\n          withSpecReplicasPath(specReplicasPath):: self + { specReplicasPath: specReplicasPath },\n          // StatusReplicasPath defines the JSON path inside of a CustomResource that corresponds to Scale.Status.Replicas. Only JSON paths without the array notation are allowed. Must be a JSON Path under .status. If there is no value under the given path in the CustomResource, the status replica value in the /scale subresource will default to 0.\n          withStatusReplicasPath(statusReplicasPath):: self + { statusReplicasPath: statusReplicasPath },\n          mixin:: {},\n        },\n        // CustomResourceSubresourceStatus defines how to serve the status subresource for CustomResources. Status is represented by the `.status` JSON path inside of a CustomResource. When set, * exposes a /status subresource for the custom resource * PUT requests to the /status subresource take a custom resource object, and ignore changes to anything except the status stanza * PUT/POST/PATCH requests to the custom resource ignore changes to the status stanza\n        customResourceSubresourceStatus:: {\n          new():: {},\n          mixin:: {},\n        },\n        // CustomResourceSubresources defines the status and scale subresources for CustomResources.\n        customResourceSubresources:: {\n          new():: {},\n          mixin:: {\n            // Scale denotes the scale subresource for CustomResources\n            scale:: {\n              local __scaleMixin(scale) = { scale+: scale },\n              mixinInstance(scale):: __scaleMixin(scale),\n              // LabelSelectorPath defines the JSON path inside of a CustomResource that corresponds to Scale.Status.Selector. Only JSON paths without the array notation are allowed. Must be a JSON Path under .status. Must be set to work with HPA. If there is no value under the given path in the CustomResource, the status label selector value in the /scale subresource will default to the empty string.\n              withLabelSelectorPath(labelSelectorPath):: self + __scaleMixin({ labelSelectorPath: labelSelectorPath }),\n              // SpecReplicasPath defines the JSON path inside of a CustomResource that corresponds to Scale.Spec.Replicas. Only JSON paths without the array notation are allowed. Must be a JSON Path under .spec. If there is no value under the given path in the CustomResource, the /scale subresource will return an error on GET.\n              withSpecReplicasPath(specReplicasPath):: self + __scaleMixin({ specReplicasPath: specReplicasPath }),\n              // StatusReplicasPath defines the JSON path inside of a CustomResource that corresponds to Scale.Status.Replicas. Only JSON paths without the array notation are allowed. Must be a JSON Path under .status. If there is no value under the given path in the CustomResource, the status replica value in the /scale subresource will default to 0.\n              withStatusReplicasPath(statusReplicasPath):: self + __scaleMixin({ statusReplicasPath: statusReplicasPath }),\n            },\n            scaleType:: hidden.apiextensions.v1beta1.customResourceSubresourceScale,\n          },\n        },\n        // CustomResourceValidation is a list of validation methods for CustomResources.\n        customResourceValidation:: {\n          new():: {},\n          // OpenAPIV3Schema is the OpenAPI v3 schema to be validated against.\n          withOpenApiV3Schema(openApiV3Schema):: self + { openAPIV3Schema: openApiV3Schema },\n          // OpenAPIV3Schema is the OpenAPI v3 schema to be validated against.\n          withOpenApiV3SchemaMixin(openApiV3Schema):: self + { openAPIV3Schema+: openApiV3Schema },\n          openAPIV3SchemaType:: hidden.apiextensions.v1beta1.jsonSchemaProps,\n          mixin:: {},\n        },\n        // ExternalDocumentation allows referencing an external resource for extended documentation.\n        externalDocumentation:: {\n          new():: {},\n          withDescription(description):: self + { description: description },\n          withUrl(url):: self + { url: url },\n          mixin:: {},\n        },\n        // JSON represents any valid JSON value. These types are supported: bool, int64, float64, string, []interface{}, map[string]interface{} and nil.\n        json:: {\n          new():: {},\n          mixin:: {},\n        },\n        // JSONSchemaProps is a JSON-Schema following Specification Draft 4 (http://json-schema.org/).\n        jsonSchemaProps:: {\n          new():: {},\n          withDollarRef(dollarRef):: self + { \"$ref\": dollarRef },\n          withDollarSchema(dollarSchema):: self + { \"$schema\": dollarSchema },\n          withAllOf(allOf):: self + if std.type(allOf) == 'array' then { allOf: allOf } else { allOf: [allOf] },\n          withAllOfMixin(allOf):: self + if std.type(allOf) == 'array' then { allOf+: allOf } else { allOf+: [allOf] },\n          allOfType:: hidden.apiextensions.v1beta1.jsonSchemaProps,\n          withAnyOf(anyOf):: self + if std.type(anyOf) == 'array' then { anyOf: anyOf } else { anyOf: [anyOf] },\n          withAnyOfMixin(anyOf):: self + if std.type(anyOf) == 'array' then { anyOf+: anyOf } else { anyOf+: [anyOf] },\n          anyOfType:: hidden.apiextensions.v1beta1.jsonSchemaProps,\n          withDefinitions(definitions):: self + { definitions: definitions },\n          withDefinitionsMixin(definitions):: self + { definitions+: definitions },\n          withDependencies(dependencies):: self + { dependencies: dependencies },\n          withDependenciesMixin(dependencies):: self + { dependencies+: dependencies },\n          withDescription(description):: self + { description: description },\n          withEnum(enum):: self + if std.type(enum) == 'array' then { enum: enum } else { enum: [enum] },\n          withEnumMixin(enum):: self + if std.type(enum) == 'array' then { enum+: enum } else { enum+: [enum] },\n          enumType:: hidden.apiextensions.v1beta1.json,\n          withExclusiveMaximum(exclusiveMaximum):: self + { exclusiveMaximum: exclusiveMaximum },\n          withExclusiveMinimum(exclusiveMinimum):: self + { exclusiveMinimum: exclusiveMinimum },\n          withFormat(format):: self + { format: format },\n          withId(id):: self + { id: id },\n          withMaxItems(maxItems):: self + { maxItems: maxItems },\n          withMaxLength(maxLength):: self + { maxLength: maxLength },\n          withMaxProperties(maxProperties):: self + { maxProperties: maxProperties },\n          withMaximum(maximum):: self + { maximum: maximum },\n          withMinItems(minItems):: self + { minItems: minItems },\n          withMinLength(minLength):: self + { minLength: minLength },\n          withMinProperties(minProperties):: self + { minProperties: minProperties },\n          withMinimum(minimum):: self + { minimum: minimum },\n          withMultipleOf(multipleOf):: self + { multipleOf: multipleOf },\n          withNot(not):: self + { not: not },\n          withNotMixin(not):: self + { not+: not },\n          notType:: hidden.apiextensions.v1beta1.jsonSchemaProps,\n          withOneOf(oneOf):: self + if std.type(oneOf) == 'array' then { oneOf: oneOf } else { oneOf: [oneOf] },\n          withOneOfMixin(oneOf):: self + if std.type(oneOf) == 'array' then { oneOf+: oneOf } else { oneOf+: [oneOf] },\n          oneOfType:: hidden.apiextensions.v1beta1.jsonSchemaProps,\n          withPattern(pattern):: self + { pattern: pattern },\n          withPatternProperties(patternProperties):: self + { patternProperties: patternProperties },\n          withPatternPropertiesMixin(patternProperties):: self + { patternProperties+: patternProperties },\n          withProperties(properties):: self + { properties: properties },\n          withPropertiesMixin(properties):: self + { properties+: properties },\n          withRequired(required):: self + if std.type(required) == 'array' then { required: required } else { required: [required] },\n          withRequiredMixin(required):: self + if std.type(required) == 'array' then { required+: required } else { required+: [required] },\n          withTitle(title):: self + { title: title },\n          withType(type):: self + { type: type },\n          withUniqueItems(uniqueItems):: self + { uniqueItems: uniqueItems },\n          mixin:: {\n            additionalItems:: {\n              local __additionalItemsMixin(additionalItems) = { additionalItems+: additionalItems },\n              mixinInstance(additionalItems):: __additionalItemsMixin(additionalItems),\n            },\n            additionalItemsType:: hidden.apiextensions.v1beta1.jsonSchemaPropsOrBool,\n            additionalProperties:: {\n              local __additionalPropertiesMixin(additionalProperties) = { additionalProperties+: additionalProperties },\n              mixinInstance(additionalProperties):: __additionalPropertiesMixin(additionalProperties),\n            },\n            additionalPropertiesType:: hidden.apiextensions.v1beta1.jsonSchemaPropsOrBool,\n            default:: {\n              local __defaultMixin(default) = { default+: default },\n              mixinInstance(default):: __defaultMixin(default),\n            },\n            defaultType:: hidden.apiextensions.v1beta1.json,\n            example:: {\n              local __exampleMixin(example) = { example+: example },\n              mixinInstance(example):: __exampleMixin(example),\n            },\n            exampleType:: hidden.apiextensions.v1beta1.json,\n            externalDocs:: {\n              local __externalDocsMixin(externalDocs) = { externalDocs+: externalDocs },\n              mixinInstance(externalDocs):: __externalDocsMixin(externalDocs),\n              withDescription(description):: self + __externalDocsMixin({ description: description }),\n              withUrl(url):: self + __externalDocsMixin({ url: url }),\n            },\n            externalDocsType:: hidden.apiextensions.v1beta1.externalDocumentation,\n            items:: {\n              local __itemsMixin(items) = { items+: items },\n              mixinInstance(items):: __itemsMixin(items),\n            },\n            itemsType:: hidden.apiextensions.v1beta1.jsonSchemaPropsOrArray,\n          },\n        },\n        // JSONSchemaPropsOrArray represents a value that can either be a JSONSchemaProps or an array of JSONSchemaProps. Mainly here for serialization purposes.\n        jsonSchemaPropsOrArray:: {\n          new():: {},\n          mixin:: {},\n        },\n        // JSONSchemaPropsOrBool represents JSONSchemaProps or a boolean value. Defaults to true for the boolean property.\n        jsonSchemaPropsOrBool:: {\n          new():: {},\n          mixin:: {},\n        },\n        // JSONSchemaPropsOrStringArray represents a JSONSchemaProps or a string array.\n        jsonSchemaPropsOrStringArray:: {\n          new():: {},\n          mixin:: {},\n        },\n      },\n    },\n    apiregistration:: {\n      v1:: {\n        local apiVersion = { apiVersion: 'apiregistration/v1' },\n        apiServiceCondition:: {\n          new():: {},\n          // Last time the condition transitioned from one status to another.\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // Human-readable message indicating details about last transition.\n          withMessage(message):: self + { message: message },\n          // Unique, one-word, CamelCase reason for the condition's last transition.\n          withReason(reason):: self + { reason: reason },\n          // Status is the status of the condition. Can be True, False, Unknown.\n          withStatus(status):: self + { status: status },\n          // Type is the type of the condition.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // APIServiceList is a list of APIService objects.\n        apiServiceList:: {\n          new():: {},\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.apiregistration.v1.apiService,\n          mixin:: {},\n        },\n        // APIServiceSpec contains information for locating and communicating with a server. Only https is supported, though you are able to disable certificate verification.\n        apiServiceSpec:: {\n          new():: {},\n          // CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate.\n          withCaBundle(caBundle):: self + { caBundle: caBundle },\n          // Group is the API group name this server hosts\n          withGroup(group):: self + { group: group },\n          // GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object.  (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s\n          withGroupPriorityMinimum(groupPriorityMinimum):: self + { groupPriorityMinimum: groupPriorityMinimum },\n          // InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged.  You should use the CABundle instead.\n          withInsecureSkipTlsVerify(insecureSkipTlsVerify):: self + { insecureSkipTLSVerify: insecureSkipTlsVerify },\n          // Version is the API version this server hosts.  For example, \"v1\"\n          withVersion(version):: self + { version: version },\n          // VersionPriority controls the ordering of this API version inside of its group.  Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). Since it's inside of a group, the number can be small, probably in the 10s. In case of equal version priorities, the version string will be used to compute the order inside a group. If the version string is \"kube-like\", it will sort above non \"kube-like\" version strings, which are ordered lexicographically. \"Kube-like\" versions start with a \"v\", then are followed by a number (the major version), then optionally the string \"alpha\" or \"beta\" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.\n          withVersionPriority(versionPriority):: self + { versionPriority: versionPriority },\n          mixin:: {\n            // Service is a reference to the service for this API server.  It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled.\n            service:: {\n              local __serviceMixin(service) = { service+: service },\n              mixinInstance(service):: __serviceMixin(service),\n              // Name is the name of the service\n              withName(name):: self + __serviceMixin({ name: name }),\n              // Namespace is the namespace of the service\n              withNamespace(namespace):: self + __serviceMixin({ namespace: namespace }),\n            },\n            serviceType:: hidden.apiregistration.v1.serviceReference,\n          },\n        },\n        // APIServiceStatus contains derived information about an API server\n        apiServiceStatus:: {\n          new():: {},\n          // Current service state of apiService.\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // Current service state of apiService.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.apiregistration.v1.apiServiceCondition,\n          mixin:: {},\n        },\n        // ServiceReference holds a reference to Service.legacy.k8s.io\n        serviceReference:: {\n          new():: {},\n          // Name is the name of the service\n          withName(name):: self + { name: name },\n          // Namespace is the namespace of the service\n          withNamespace(namespace):: self + { namespace: namespace },\n          mixin:: {},\n        },\n      },\n      v1beta1:: {\n        local apiVersion = { apiVersion: 'apiregistration/v1beta1' },\n        apiServiceCondition:: {\n          new():: {},\n          // Last time the condition transitioned from one status to another.\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // Human-readable message indicating details about last transition.\n          withMessage(message):: self + { message: message },\n          // Unique, one-word, CamelCase reason for the condition's last transition.\n          withReason(reason):: self + { reason: reason },\n          // Status is the status of the condition. Can be True, False, Unknown.\n          withStatus(status):: self + { status: status },\n          // Type is the type of the condition.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // APIServiceList is a list of APIService objects.\n        apiServiceList:: {\n          new():: {},\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.apiregistration.v1beta1.apiService,\n          mixin:: {},\n        },\n        // APIServiceSpec contains information for locating and communicating with a server. Only https is supported, though you are able to disable certificate verification.\n        apiServiceSpec:: {\n          new():: {},\n          // CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate.\n          withCaBundle(caBundle):: self + { caBundle: caBundle },\n          // Group is the API group name this server hosts\n          withGroup(group):: self + { group: group },\n          // GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object.  (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s\n          withGroupPriorityMinimum(groupPriorityMinimum):: self + { groupPriorityMinimum: groupPriorityMinimum },\n          // InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged.  You should use the CABundle instead.\n          withInsecureSkipTlsVerify(insecureSkipTlsVerify):: self + { insecureSkipTLSVerify: insecureSkipTlsVerify },\n          // Version is the API version this server hosts.  For example, \"v1\"\n          withVersion(version):: self + { version: version },\n          // VersionPriority controls the ordering of this API version inside of its group.  Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). Since it's inside of a group, the number can be small, probably in the 10s. In case of equal version priorities, the version string will be used to compute the order inside a group. If the version string is \"kube-like\", it will sort above non \"kube-like\" version strings, which are ordered lexicographically. \"Kube-like\" versions start with a \"v\", then are followed by a number (the major version), then optionally the string \"alpha\" or \"beta\" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.\n          withVersionPriority(versionPriority):: self + { versionPriority: versionPriority },\n          mixin:: {\n            // Service is a reference to the service for this API server.  It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled.\n            service:: {\n              local __serviceMixin(service) = { service+: service },\n              mixinInstance(service):: __serviceMixin(service),\n              // Name is the name of the service\n              withName(name):: self + __serviceMixin({ name: name }),\n              // Namespace is the namespace of the service\n              withNamespace(namespace):: self + __serviceMixin({ namespace: namespace }),\n            },\n            serviceType:: hidden.apiregistration.v1beta1.serviceReference,\n          },\n        },\n        // APIServiceStatus contains derived information about an API server\n        apiServiceStatus:: {\n          new():: {},\n          // Current service state of apiService.\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // Current service state of apiService.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.apiregistration.v1beta1.apiServiceCondition,\n          mixin:: {},\n        },\n        // ServiceReference holds a reference to Service.legacy.k8s.io\n        serviceReference:: {\n          new():: {},\n          // Name is the name of the service\n          withName(name):: self + { name: name },\n          // Namespace is the namespace of the service\n          withNamespace(namespace):: self + { namespace: namespace },\n          mixin:: {},\n        },\n      },\n    },\n    apps:: {\n      v1:: {\n        local apiVersion = { apiVersion: 'apps/v1' },\n        // ControllerRevisionList is a resource containing a list of ControllerRevision objects.\n        controllerRevisionList:: {\n          new():: {},\n          // Items is the list of ControllerRevisions\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is the list of ControllerRevisions\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.apps.v1.controllerRevision,\n          mixin:: {},\n        },\n        // DaemonSetCondition describes the state of a DaemonSet at a certain point.\n        daemonSetCondition:: {\n          new():: {},\n          // Last time the condition transitioned from one status to another.\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // A human readable message indicating details about the transition.\n          withMessage(message):: self + { message: message },\n          // The reason for the condition's last transition.\n          withReason(reason):: self + { reason: reason },\n          // Status of the condition, one of True, False, Unknown.\n          withStatus(status):: self + { status: status },\n          // Type of DaemonSet condition.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // DaemonSetList is a collection of daemon sets.\n        daemonSetList:: {\n          new():: {},\n          // A list of daemon sets.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // A list of daemon sets.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.apps.v1.daemonSet,\n          mixin:: {},\n        },\n        // DaemonSetSpec is the specification of a daemon set.\n        daemonSetSpec:: {\n          new():: {},\n          // The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).\n          withMinReadySeconds(minReadySeconds):: self + { minReadySeconds: minReadySeconds },\n          // The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.\n          withRevisionHistoryLimit(revisionHistoryLimit):: self + { revisionHistoryLimit: revisionHistoryLimit },\n          mixin:: {\n            // A label query over pods that are managed by the daemon set. Must match in order to be controlled. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = { selector+: selector },\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\n            template:: {\n              local __templateMixin(template) = { template+: template },\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n            // An update strategy to replace existing DaemonSet pods with new pods.\n            updateStrategy:: {\n              local __updateStrategyMixin(updateStrategy) = { updateStrategy+: updateStrategy },\n              mixinInstance(updateStrategy):: __updateStrategyMixin(updateStrategy),\n              // Rolling update config params. Present only if type = \"RollingUpdate\".\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __updateStrategyMixin({ rollingUpdate+: rollingUpdate }),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.\n                withMaxUnavailable(maxUnavailable):: self + __rollingUpdateMixin({ maxUnavailable: maxUnavailable }),\n              },\n              rollingUpdateType:: hidden.apps.v1.rollingUpdateDaemonSet,\n              // Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is RollingUpdate.\n              withType(type):: self + __updateStrategyMixin({ type: type }),\n            },\n            updateStrategyType:: hidden.apps.v1.daemonSetUpdateStrategy,\n          },\n        },\n        // DaemonSetStatus represents the current status of a daemon set.\n        daemonSetStatus:: {\n          new():: {},\n          // Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.\n          withCollisionCount(collisionCount):: self + { collisionCount: collisionCount },\n          // Represents the latest available observations of a DaemonSet's current state.\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // Represents the latest available observations of a DaemonSet's current state.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.apps.v1.daemonSetCondition,\n          // The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\n          withCurrentNumberScheduled(currentNumberScheduled):: self + { currentNumberScheduled: currentNumberScheduled },\n          // The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\n          withDesiredNumberScheduled(desiredNumberScheduled):: self + { desiredNumberScheduled: desiredNumberScheduled },\n          // The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)\n          withNumberAvailable(numberAvailable):: self + { numberAvailable: numberAvailable },\n          // The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\n          withNumberMisscheduled(numberMisscheduled):: self + { numberMisscheduled: numberMisscheduled },\n          // The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.\n          withNumberReady(numberReady):: self + { numberReady: numberReady },\n          // The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)\n          withNumberUnavailable(numberUnavailable):: self + { numberUnavailable: numberUnavailable },\n          // The most recent generation observed by the daemon set controller.\n          withObservedGeneration(observedGeneration):: self + { observedGeneration: observedGeneration },\n          // The total number of nodes that are running updated daemon pod\n          withUpdatedNumberScheduled(updatedNumberScheduled):: self + { updatedNumberScheduled: updatedNumberScheduled },\n          mixin:: {},\n        },\n        // DaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet.\n        daemonSetUpdateStrategy:: {\n          new():: {},\n          // Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is RollingUpdate.\n          withType(type):: self + { type: type },\n          mixin:: {\n            // Rolling update config params. Present only if type = \"RollingUpdate\".\n            rollingUpdate:: {\n              local __rollingUpdateMixin(rollingUpdate) = { rollingUpdate+: rollingUpdate },\n              mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n              // The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.\n              withMaxUnavailable(maxUnavailable):: self + __rollingUpdateMixin({ maxUnavailable: maxUnavailable }),\n            },\n            rollingUpdateType:: hidden.apps.v1.rollingUpdateDaemonSet,\n          },\n        },\n        // DeploymentCondition describes the state of a deployment at a certain point.\n        deploymentCondition:: {\n          new():: {},\n          // Last time the condition transitioned from one status to another.\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // The last time this condition was updated.\n          withLastUpdateTime(lastUpdateTime):: self + { lastUpdateTime: lastUpdateTime },\n          // A human readable message indicating details about the transition.\n          withMessage(message):: self + { message: message },\n          // The reason for the condition's last transition.\n          withReason(reason):: self + { reason: reason },\n          // Status of the condition, one of True, False, Unknown.\n          withStatus(status):: self + { status: status },\n          // Type of deployment condition.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // DeploymentList is a list of Deployments.\n        deploymentList:: {\n          new(items=''):: self.withItems(items),\n          // Items is the list of Deployments.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is the list of Deployments.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.apps.v1.deployment,\n          mixin:: {},\n        },\n        // DeploymentSpec is the specification of the desired behavior of the Deployment.\n        deploymentSpec:: {\n          new():: {},\n          // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n          withMinReadySeconds(minReadySeconds):: self + { minReadySeconds: minReadySeconds },\n          // Indicates that the deployment is paused.\n          withPaused(paused):: self + { paused: paused },\n          // The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.\n          withProgressDeadlineSeconds(progressDeadlineSeconds):: self + { progressDeadlineSeconds: progressDeadlineSeconds },\n          // Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.\n          withReplicas(replicas):: self + { replicas: replicas },\n          // The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.\n          withRevisionHistoryLimit(revisionHistoryLimit):: self + { revisionHistoryLimit: revisionHistoryLimit },\n          mixin:: {\n            // Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. It must match the pod template's labels.\n            selector:: {\n              local __selectorMixin(selector) = { selector+: selector },\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // The deployment strategy to use to replace existing pods with new ones.\n            strategy:: {\n              local __strategyMixin(strategy) = { strategy+: strategy },\n              mixinInstance(strategy):: __strategyMixin(strategy),\n              // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __strategyMixin({ rollingUpdate+: rollingUpdate }),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.\n                withMaxSurge(maxSurge):: self + __rollingUpdateMixin({ maxSurge: maxSurge }),\n                // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n                withMaxUnavailable(maxUnavailable):: self + __rollingUpdateMixin({ maxUnavailable: maxUnavailable }),\n              },\n              rollingUpdateType:: hidden.apps.v1.rollingUpdateDeployment,\n              // Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.\n              withType(type):: self + __strategyMixin({ type: type }),\n            },\n            strategyType:: hidden.apps.v1.deploymentStrategy,\n            // Template describes the pods that will be created.\n            template:: {\n              local __templateMixin(template) = { template+: template },\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n        },\n        // DeploymentStatus is the most recently observed status of the Deployment.\n        deploymentStatus:: {\n          new():: {},\n          // Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.\n          withAvailableReplicas(availableReplicas):: self + { availableReplicas: availableReplicas },\n          // Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.\n          withCollisionCount(collisionCount):: self + { collisionCount: collisionCount },\n          // Represents the latest available observations of a deployment's current state.\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // Represents the latest available observations of a deployment's current state.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.apps.v1.deploymentCondition,\n          // The generation observed by the deployment controller.\n          withObservedGeneration(observedGeneration):: self + { observedGeneration: observedGeneration },\n          // Total number of ready pods targeted by this deployment.\n          withReadyReplicas(readyReplicas):: self + { readyReplicas: readyReplicas },\n          // Total number of non-terminated pods targeted by this deployment (their labels match the selector).\n          withReplicas(replicas):: self + { replicas: replicas },\n          // Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.\n          withUnavailableReplicas(unavailableReplicas):: self + { unavailableReplicas: unavailableReplicas },\n          // Total number of non-terminated pods targeted by this deployment that have the desired template spec.\n          withUpdatedReplicas(updatedReplicas):: self + { updatedReplicas: updatedReplicas },\n          mixin:: {},\n        },\n        // DeploymentStrategy describes how to replace existing pods with new ones.\n        deploymentStrategy:: {\n          new():: {},\n          // Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.\n          withType(type):: self + { type: type },\n          mixin:: {\n            // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\n            rollingUpdate:: {\n              local __rollingUpdateMixin(rollingUpdate) = { rollingUpdate+: rollingUpdate },\n              mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n              // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.\n              withMaxSurge(maxSurge):: self + __rollingUpdateMixin({ maxSurge: maxSurge }),\n              // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n              withMaxUnavailable(maxUnavailable):: self + __rollingUpdateMixin({ maxUnavailable: maxUnavailable }),\n            },\n            rollingUpdateType:: hidden.apps.v1.rollingUpdateDeployment,\n          },\n        },\n        // ReplicaSetCondition describes the state of a replica set at a certain point.\n        replicaSetCondition:: {\n          new():: {},\n          // The last time the condition transitioned from one status to another.\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // A human readable message indicating details about the transition.\n          withMessage(message):: self + { message: message },\n          // The reason for the condition's last transition.\n          withReason(reason):: self + { reason: reason },\n          // Status of the condition, one of True, False, Unknown.\n          withStatus(status):: self + { status: status },\n          // Type of replica set condition.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // ReplicaSetList is a collection of ReplicaSets.\n        replicaSetList:: {\n          new():: {},\n          // List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.apps.v1.replicaSet,\n          mixin:: {},\n        },\n        // ReplicaSetSpec is the specification of a ReplicaSet.\n        replicaSetSpec:: {\n          new():: {},\n          // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n          withMinReadySeconds(minReadySeconds):: self + { minReadySeconds: minReadySeconds },\n          // Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller\n          withReplicas(replicas):: self + { replicas: replicas },\n          mixin:: {\n            // Selector is a label query over pods that should match the replica count. Label keys and values that must match in order to be controlled by this replica set. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = { selector+: selector },\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\n            template:: {\n              local __templateMixin(template) = { template+: template },\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n        },\n        // ReplicaSetStatus represents the current status of a ReplicaSet.\n        replicaSetStatus:: {\n          new():: {},\n          // The number of available replicas (ready for at least minReadySeconds) for this replica set.\n          withAvailableReplicas(availableReplicas):: self + { availableReplicas: availableReplicas },\n          // Represents the latest available observations of a replica set's current state.\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // Represents the latest available observations of a replica set's current state.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.apps.v1.replicaSetCondition,\n          // The number of pods that have labels matching the labels of the pod template of the replicaset.\n          withFullyLabeledReplicas(fullyLabeledReplicas):: self + { fullyLabeledReplicas: fullyLabeledReplicas },\n          // ObservedGeneration reflects the generation of the most recently observed ReplicaSet.\n          withObservedGeneration(observedGeneration):: self + { observedGeneration: observedGeneration },\n          // The number of ready replicas for this replica set.\n          withReadyReplicas(readyReplicas):: self + { readyReplicas: readyReplicas },\n          // Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller\n          withReplicas(replicas):: self + { replicas: replicas },\n          mixin:: {},\n        },\n        // Spec to control the desired behavior of daemon set rolling update.\n        rollingUpdateDaemonSet:: {\n          new():: {},\n          // The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.\n          withMaxUnavailable(maxUnavailable):: self + { maxUnavailable: maxUnavailable },\n          mixin:: {},\n        },\n        // Spec to control the desired behavior of rolling update.\n        rollingUpdateDeployment:: {\n          new():: {},\n          // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.\n          withMaxSurge(maxSurge):: self + { maxSurge: maxSurge },\n          // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n          withMaxUnavailable(maxUnavailable):: self + { maxUnavailable: maxUnavailable },\n          mixin:: {},\n        },\n        // RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.\n        rollingUpdateStatefulSetStrategy:: {\n          new():: {},\n          // Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.\n          withPartition(partition):: self + { partition: partition },\n          mixin:: {},\n        },\n        // StatefulSetCondition describes the state of a statefulset at a certain point.\n        statefulSetCondition:: {\n          new():: {},\n          // Last time the condition transitioned from one status to another.\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // A human readable message indicating details about the transition.\n          withMessage(message):: self + { message: message },\n          // The reason for the condition's last transition.\n          withReason(reason):: self + { reason: reason },\n          // Status of the condition, one of True, False, Unknown.\n          withStatus(status):: self + { status: status },\n          // Type of statefulset condition.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // StatefulSetList is a collection of StatefulSets.\n        statefulSetList:: {\n          new(items=''):: self.withItems(items),\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.apps.v1.statefulSet,\n          mixin:: {},\n        },\n        // A StatefulSetSpec is the specification of a StatefulSet.\n        statefulSetSpec:: {\n          new():: {},\n          // podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.\n          withPodManagementPolicy(podManagementPolicy):: self + { podManagementPolicy: podManagementPolicy },\n          // replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.\n          withReplicas(replicas):: self + { replicas: replicas },\n          // revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.\n          withRevisionHistoryLimit(revisionHistoryLimit):: self + { revisionHistoryLimit: revisionHistoryLimit },\n          // serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.\n          withServiceName(serviceName):: self + { serviceName: serviceName },\n          // volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.\n          withVolumeClaimTemplates(volumeClaimTemplates):: self + if std.type(volumeClaimTemplates) == 'array' then { volumeClaimTemplates: volumeClaimTemplates } else { volumeClaimTemplates: [volumeClaimTemplates] },\n          // volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.\n          withVolumeClaimTemplatesMixin(volumeClaimTemplates):: self + if std.type(volumeClaimTemplates) == 'array' then { volumeClaimTemplates+: volumeClaimTemplates } else { volumeClaimTemplates+: [volumeClaimTemplates] },\n          volumeClaimTemplatesType:: hidden.core.v1.persistentVolumeClaim,\n          mixin:: {\n            // selector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = { selector+: selector },\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.\n            template:: {\n              local __templateMixin(template) = { template+: template },\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n            // updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.\n            updateStrategy:: {\n              local __updateStrategyMixin(updateStrategy) = { updateStrategy+: updateStrategy },\n              mixinInstance(updateStrategy):: __updateStrategyMixin(updateStrategy),\n              // RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __updateStrategyMixin({ rollingUpdate+: rollingUpdate }),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.\n                withPartition(partition):: self + __rollingUpdateMixin({ partition: partition }),\n              },\n              rollingUpdateType:: hidden.apps.v1.rollingUpdateStatefulSetStrategy,\n              // Type indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.\n              withType(type):: self + __updateStrategyMixin({ type: type }),\n            },\n            updateStrategyType:: hidden.apps.v1.statefulSetUpdateStrategy,\n          },\n        },\n        // StatefulSetStatus represents the current state of a StatefulSet.\n        statefulSetStatus:: {\n          new():: {},\n          // collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.\n          withCollisionCount(collisionCount):: self + { collisionCount: collisionCount },\n          // Represents the latest available observations of a statefulset's current state.\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // Represents the latest available observations of a statefulset's current state.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.apps.v1.statefulSetCondition,\n          // currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.\n          withCurrentReplicas(currentReplicas):: self + { currentReplicas: currentReplicas },\n          // currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).\n          withCurrentRevision(currentRevision):: self + { currentRevision: currentRevision },\n          // observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.\n          withObservedGeneration(observedGeneration):: self + { observedGeneration: observedGeneration },\n          // readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.\n          withReadyReplicas(readyReplicas):: self + { readyReplicas: readyReplicas },\n          // replicas is the number of Pods created by the StatefulSet controller.\n          withReplicas(replicas):: self + { replicas: replicas },\n          // updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)\n          withUpdateRevision(updateRevision):: self + { updateRevision: updateRevision },\n          // updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.\n          withUpdatedReplicas(updatedReplicas):: self + { updatedReplicas: updatedReplicas },\n          mixin:: {},\n        },\n        // StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.\n        statefulSetUpdateStrategy:: {\n          new():: {},\n          // Type indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.\n          withType(type):: self + { type: type },\n          mixin:: {\n            // RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.\n            rollingUpdate:: {\n              local __rollingUpdateMixin(rollingUpdate) = { rollingUpdate+: rollingUpdate },\n              mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n              // Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.\n              withPartition(partition):: self + __rollingUpdateMixin({ partition: partition }),\n            },\n            rollingUpdateType:: hidden.apps.v1.rollingUpdateStatefulSetStrategy,\n          },\n        },\n      },\n      v1beta1:: {\n        local apiVersion = { apiVersion: 'apps/v1beta1' },\n        // ControllerRevisionList is a resource containing a list of ControllerRevision objects.\n        controllerRevisionList:: {\n          new():: {},\n          // Items is the list of ControllerRevisions\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is the list of ControllerRevisions\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.apps.v1beta1.controllerRevision,\n          mixin:: {},\n        },\n        // DeploymentCondition describes the state of a deployment at a certain point.\n        deploymentCondition:: {\n          new():: {},\n          // Last time the condition transitioned from one status to another.\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // The last time this condition was updated.\n          withLastUpdateTime(lastUpdateTime):: self + { lastUpdateTime: lastUpdateTime },\n          // A human readable message indicating details about the transition.\n          withMessage(message):: self + { message: message },\n          // The reason for the condition's last transition.\n          withReason(reason):: self + { reason: reason },\n          // Status of the condition, one of True, False, Unknown.\n          withStatus(status):: self + { status: status },\n          // Type of deployment condition.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // DeploymentList is a list of Deployments.\n        deploymentList:: {\n          new(items=''):: self.withItems(items),\n          // Items is the list of Deployments.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is the list of Deployments.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.apps.v1beta1.deployment,\n          mixin:: {},\n        },\n        // DeploymentSpec is the specification of the desired behavior of the Deployment.\n        deploymentSpec:: {\n          new():: {},\n          // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n          withMinReadySeconds(minReadySeconds):: self + { minReadySeconds: minReadySeconds },\n          // Indicates that the deployment is paused.\n          withPaused(paused):: self + { paused: paused },\n          // The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.\n          withProgressDeadlineSeconds(progressDeadlineSeconds):: self + { progressDeadlineSeconds: progressDeadlineSeconds },\n          // Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.\n          withReplicas(replicas):: self + { replicas: replicas },\n          // The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 2.\n          withRevisionHistoryLimit(revisionHistoryLimit):: self + { revisionHistoryLimit: revisionHistoryLimit },\n          mixin:: {\n            // DEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done.\n            rollbackTo:: {\n              local __rollbackToMixin(rollbackTo) = { rollbackTo+: rollbackTo },\n              mixinInstance(rollbackTo):: __rollbackToMixin(rollbackTo),\n              // The revision to rollback to. If set to 0, rollback to the last revision.\n              withRevision(revision):: self + __rollbackToMixin({ revision: revision }),\n            },\n            rollbackToType:: hidden.apps.v1beta1.rollbackConfig,\n            // Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.\n            selector:: {\n              local __selectorMixin(selector) = { selector+: selector },\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // The deployment strategy to use to replace existing pods with new ones.\n            strategy:: {\n              local __strategyMixin(strategy) = { strategy+: strategy },\n              mixinInstance(strategy):: __strategyMixin(strategy),\n              // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __strategyMixin({ rollingUpdate+: rollingUpdate }),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\n                withMaxSurge(maxSurge):: self + __rollingUpdateMixin({ maxSurge: maxSurge }),\n                // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n                withMaxUnavailable(maxUnavailable):: self + __rollingUpdateMixin({ maxUnavailable: maxUnavailable }),\n              },\n              rollingUpdateType:: hidden.apps.v1beta1.rollingUpdateDeployment,\n              // Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.\n              withType(type):: self + __strategyMixin({ type: type }),\n            },\n            strategyType:: hidden.apps.v1beta1.deploymentStrategy,\n            // Template describes the pods that will be created.\n            template:: {\n              local __templateMixin(template) = { template+: template },\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n        },\n        // DeploymentStatus is the most recently observed status of the Deployment.\n        deploymentStatus:: {\n          new():: {},\n          // Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.\n          withAvailableReplicas(availableReplicas):: self + { availableReplicas: availableReplicas },\n          // Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.\n          withCollisionCount(collisionCount):: self + { collisionCount: collisionCount },\n          // Represents the latest available observations of a deployment's current state.\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // Represents the latest available observations of a deployment's current state.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.apps.v1beta1.deploymentCondition,\n          // The generation observed by the deployment controller.\n          withObservedGeneration(observedGeneration):: self + { observedGeneration: observedGeneration },\n          // Total number of ready pods targeted by this deployment.\n          withReadyReplicas(readyReplicas):: self + { readyReplicas: readyReplicas },\n          // Total number of non-terminated pods targeted by this deployment (their labels match the selector).\n          withReplicas(replicas):: self + { replicas: replicas },\n          // Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.\n          withUnavailableReplicas(unavailableReplicas):: self + { unavailableReplicas: unavailableReplicas },\n          // Total number of non-terminated pods targeted by this deployment that have the desired template spec.\n          withUpdatedReplicas(updatedReplicas):: self + { updatedReplicas: updatedReplicas },\n          mixin:: {},\n        },\n        // DeploymentStrategy describes how to replace existing pods with new ones.\n        deploymentStrategy:: {\n          new():: {},\n          // Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.\n          withType(type):: self + { type: type },\n          mixin:: {\n            // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\n            rollingUpdate:: {\n              local __rollingUpdateMixin(rollingUpdate) = { rollingUpdate+: rollingUpdate },\n              mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n              // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\n              withMaxSurge(maxSurge):: self + __rollingUpdateMixin({ maxSurge: maxSurge }),\n              // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n              withMaxUnavailable(maxUnavailable):: self + __rollingUpdateMixin({ maxUnavailable: maxUnavailable }),\n            },\n            rollingUpdateType:: hidden.apps.v1beta1.rollingUpdateDeployment,\n          },\n        },\n        // DEPRECATED.\n        rollbackConfig:: {\n          new():: {},\n          // The revision to rollback to. If set to 0, rollback to the last revision.\n          withRevision(revision):: self + { revision: revision },\n          mixin:: {},\n        },\n        // Spec to control the desired behavior of rolling update.\n        rollingUpdateDeployment:: {\n          new():: {},\n          // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\n          withMaxSurge(maxSurge):: self + { maxSurge: maxSurge },\n          // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n          withMaxUnavailable(maxUnavailable):: self + { maxUnavailable: maxUnavailable },\n          mixin:: {},\n        },\n        // RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.\n        rollingUpdateStatefulSetStrategy:: {\n          new():: {},\n          // Partition indicates the ordinal at which the StatefulSet should be partitioned.\n          withPartition(partition):: self + { partition: partition },\n          mixin:: {},\n        },\n        // ScaleSpec describes the attributes of a scale subresource\n        scaleSpec:: {\n          new():: {},\n          // desired number of instances for the scaled object.\n          withReplicas(replicas):: self + { replicas: replicas },\n          mixin:: {},\n        },\n        // ScaleStatus represents the current status of a scale subresource.\n        scaleStatus:: {\n          new():: {},\n          // actual number of observed instances of the scaled object.\n          withReplicas(replicas):: self + { replicas: replicas },\n          // label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors\n          withSelector(selector):: self + { selector: selector },\n          // label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors\n          withSelectorMixin(selector):: self + { selector+: selector },\n          // label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n          withTargetSelector(targetSelector):: self + { targetSelector: targetSelector },\n          mixin:: {},\n        },\n        // StatefulSetCondition describes the state of a statefulset at a certain point.\n        statefulSetCondition:: {\n          new():: {},\n          // Last time the condition transitioned from one status to another.\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // A human readable message indicating details about the transition.\n          withMessage(message):: self + { message: message },\n          // The reason for the condition's last transition.\n          withReason(reason):: self + { reason: reason },\n          // Status of the condition, one of True, False, Unknown.\n          withStatus(status):: self + { status: status },\n          // Type of statefulset condition.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // StatefulSetList is a collection of StatefulSets.\n        statefulSetList:: {\n          new(items=''):: self.withItems(items),\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.apps.v1beta1.statefulSet,\n          mixin:: {},\n        },\n        // A StatefulSetSpec is the specification of a StatefulSet.\n        statefulSetSpec:: {\n          new():: {},\n          // podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.\n          withPodManagementPolicy(podManagementPolicy):: self + { podManagementPolicy: podManagementPolicy },\n          // replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.\n          withReplicas(replicas):: self + { replicas: replicas },\n          // revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.\n          withRevisionHistoryLimit(revisionHistoryLimit):: self + { revisionHistoryLimit: revisionHistoryLimit },\n          // serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.\n          withServiceName(serviceName):: self + { serviceName: serviceName },\n          // volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.\n          withVolumeClaimTemplates(volumeClaimTemplates):: self + if std.type(volumeClaimTemplates) == 'array' then { volumeClaimTemplates: volumeClaimTemplates } else { volumeClaimTemplates: [volumeClaimTemplates] },\n          // volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.\n          withVolumeClaimTemplatesMixin(volumeClaimTemplates):: self + if std.type(volumeClaimTemplates) == 'array' then { volumeClaimTemplates+: volumeClaimTemplates } else { volumeClaimTemplates+: [volumeClaimTemplates] },\n          volumeClaimTemplatesType:: hidden.core.v1.persistentVolumeClaim,\n          mixin:: {\n            // selector is a label query over pods that should match the replica count. If empty, defaulted to labels on the pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = { selector+: selector },\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.\n            template:: {\n              local __templateMixin(template) = { template+: template },\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n            // updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.\n            updateStrategy:: {\n              local __updateStrategyMixin(updateStrategy) = { updateStrategy+: updateStrategy },\n              mixinInstance(updateStrategy):: __updateStrategyMixin(updateStrategy),\n              // RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __updateStrategyMixin({ rollingUpdate+: rollingUpdate }),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // Partition indicates the ordinal at which the StatefulSet should be partitioned.\n                withPartition(partition):: self + __rollingUpdateMixin({ partition: partition }),\n              },\n              rollingUpdateType:: hidden.apps.v1beta1.rollingUpdateStatefulSetStrategy,\n              // Type indicates the type of the StatefulSetUpdateStrategy.\n              withType(type):: self + __updateStrategyMixin({ type: type }),\n            },\n            updateStrategyType:: hidden.apps.v1beta1.statefulSetUpdateStrategy,\n          },\n        },\n        // StatefulSetStatus represents the current state of a StatefulSet.\n        statefulSetStatus:: {\n          new():: {},\n          // collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.\n          withCollisionCount(collisionCount):: self + { collisionCount: collisionCount },\n          // Represents the latest available observations of a statefulset's current state.\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // Represents the latest available observations of a statefulset's current state.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.apps.v1beta1.statefulSetCondition,\n          // currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.\n          withCurrentReplicas(currentReplicas):: self + { currentReplicas: currentReplicas },\n          // currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).\n          withCurrentRevision(currentRevision):: self + { currentRevision: currentRevision },\n          // observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.\n          withObservedGeneration(observedGeneration):: self + { observedGeneration: observedGeneration },\n          // readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.\n          withReadyReplicas(readyReplicas):: self + { readyReplicas: readyReplicas },\n          // replicas is the number of Pods created by the StatefulSet controller.\n          withReplicas(replicas):: self + { replicas: replicas },\n          // updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)\n          withUpdateRevision(updateRevision):: self + { updateRevision: updateRevision },\n          // updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.\n          withUpdatedReplicas(updatedReplicas):: self + { updatedReplicas: updatedReplicas },\n          mixin:: {},\n        },\n        // StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.\n        statefulSetUpdateStrategy:: {\n          new():: {},\n          // Type indicates the type of the StatefulSetUpdateStrategy.\n          withType(type):: self + { type: type },\n          mixin:: {\n            // RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.\n            rollingUpdate:: {\n              local __rollingUpdateMixin(rollingUpdate) = { rollingUpdate+: rollingUpdate },\n              mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n              // Partition indicates the ordinal at which the StatefulSet should be partitioned.\n              withPartition(partition):: self + __rollingUpdateMixin({ partition: partition }),\n            },\n            rollingUpdateType:: hidden.apps.v1beta1.rollingUpdateStatefulSetStrategy,\n          },\n        },\n      },\n      v1beta2:: {\n        local apiVersion = { apiVersion: 'apps/v1beta2' },\n        // ControllerRevisionList is a resource containing a list of ControllerRevision objects.\n        controllerRevisionList:: {\n          new():: {},\n          // Items is the list of ControllerRevisions\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is the list of ControllerRevisions\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.apps.v1beta2.controllerRevision,\n          mixin:: {},\n        },\n        // DaemonSetCondition describes the state of a DaemonSet at a certain point.\n        daemonSetCondition:: {\n          new():: {},\n          // Last time the condition transitioned from one status to another.\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // A human readable message indicating details about the transition.\n          withMessage(message):: self + { message: message },\n          // The reason for the condition's last transition.\n          withReason(reason):: self + { reason: reason },\n          // Status of the condition, one of True, False, Unknown.\n          withStatus(status):: self + { status: status },\n          // Type of DaemonSet condition.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // DaemonSetList is a collection of daemon sets.\n        daemonSetList:: {\n          new():: {},\n          // A list of daemon sets.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // A list of daemon sets.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.apps.v1beta2.daemonSet,\n          mixin:: {},\n        },\n        // DaemonSetSpec is the specification of a daemon set.\n        daemonSetSpec:: {\n          new():: {},\n          // The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).\n          withMinReadySeconds(minReadySeconds):: self + { minReadySeconds: minReadySeconds },\n          // The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.\n          withRevisionHistoryLimit(revisionHistoryLimit):: self + { revisionHistoryLimit: revisionHistoryLimit },\n          mixin:: {\n            // A label query over pods that are managed by the daemon set. Must match in order to be controlled. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = { selector+: selector },\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\n            template:: {\n              local __templateMixin(template) = { template+: template },\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n            // An update strategy to replace existing DaemonSet pods with new pods.\n            updateStrategy:: {\n              local __updateStrategyMixin(updateStrategy) = { updateStrategy+: updateStrategy },\n              mixinInstance(updateStrategy):: __updateStrategyMixin(updateStrategy),\n              // Rolling update config params. Present only if type = \"RollingUpdate\".\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __updateStrategyMixin({ rollingUpdate+: rollingUpdate }),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.\n                withMaxUnavailable(maxUnavailable):: self + __rollingUpdateMixin({ maxUnavailable: maxUnavailable }),\n              },\n              rollingUpdateType:: hidden.apps.v1beta2.rollingUpdateDaemonSet,\n              // Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is RollingUpdate.\n              withType(type):: self + __updateStrategyMixin({ type: type }),\n            },\n            updateStrategyType:: hidden.apps.v1beta2.daemonSetUpdateStrategy,\n          },\n        },\n        // DaemonSetStatus represents the current status of a daemon set.\n        daemonSetStatus:: {\n          new():: {},\n          // Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.\n          withCollisionCount(collisionCount):: self + { collisionCount: collisionCount },\n          // Represents the latest available observations of a DaemonSet's current state.\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // Represents the latest available observations of a DaemonSet's current state.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.apps.v1beta2.daemonSetCondition,\n          // The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\n          withCurrentNumberScheduled(currentNumberScheduled):: self + { currentNumberScheduled: currentNumberScheduled },\n          // The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\n          withDesiredNumberScheduled(desiredNumberScheduled):: self + { desiredNumberScheduled: desiredNumberScheduled },\n          // The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)\n          withNumberAvailable(numberAvailable):: self + { numberAvailable: numberAvailable },\n          // The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\n          withNumberMisscheduled(numberMisscheduled):: self + { numberMisscheduled: numberMisscheduled },\n          // The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.\n          withNumberReady(numberReady):: self + { numberReady: numberReady },\n          // The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)\n          withNumberUnavailable(numberUnavailable):: self + { numberUnavailable: numberUnavailable },\n          // The most recent generation observed by the daemon set controller.\n          withObservedGeneration(observedGeneration):: self + { observedGeneration: observedGeneration },\n          // The total number of nodes that are running updated daemon pod\n          withUpdatedNumberScheduled(updatedNumberScheduled):: self + { updatedNumberScheduled: updatedNumberScheduled },\n          mixin:: {},\n        },\n        // DaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet.\n        daemonSetUpdateStrategy:: {\n          new():: {},\n          // Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is RollingUpdate.\n          withType(type):: self + { type: type },\n          mixin:: {\n            // Rolling update config params. Present only if type = \"RollingUpdate\".\n            rollingUpdate:: {\n              local __rollingUpdateMixin(rollingUpdate) = { rollingUpdate+: rollingUpdate },\n              mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n              // The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.\n              withMaxUnavailable(maxUnavailable):: self + __rollingUpdateMixin({ maxUnavailable: maxUnavailable }),\n            },\n            rollingUpdateType:: hidden.apps.v1beta2.rollingUpdateDaemonSet,\n          },\n        },\n        // DeploymentCondition describes the state of a deployment at a certain point.\n        deploymentCondition:: {\n          new():: {},\n          // Last time the condition transitioned from one status to another.\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // The last time this condition was updated.\n          withLastUpdateTime(lastUpdateTime):: self + { lastUpdateTime: lastUpdateTime },\n          // A human readable message indicating details about the transition.\n          withMessage(message):: self + { message: message },\n          // The reason for the condition's last transition.\n          withReason(reason):: self + { reason: reason },\n          // Status of the condition, one of True, False, Unknown.\n          withStatus(status):: self + { status: status },\n          // Type of deployment condition.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // DeploymentList is a list of Deployments.\n        deploymentList:: {\n          new(items=''):: self.withItems(items),\n          // Items is the list of Deployments.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is the list of Deployments.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.apps.v1beta2.deployment,\n          mixin:: {},\n        },\n        // DeploymentSpec is the specification of the desired behavior of the Deployment.\n        deploymentSpec:: {\n          new():: {},\n          // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n          withMinReadySeconds(minReadySeconds):: self + { minReadySeconds: minReadySeconds },\n          // Indicates that the deployment is paused.\n          withPaused(paused):: self + { paused: paused },\n          // The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.\n          withProgressDeadlineSeconds(progressDeadlineSeconds):: self + { progressDeadlineSeconds: progressDeadlineSeconds },\n          // Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.\n          withReplicas(replicas):: self + { replicas: replicas },\n          // The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.\n          withRevisionHistoryLimit(revisionHistoryLimit):: self + { revisionHistoryLimit: revisionHistoryLimit },\n          mixin:: {\n            // Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. It must match the pod template's labels.\n            selector:: {\n              local __selectorMixin(selector) = { selector+: selector },\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // The deployment strategy to use to replace existing pods with new ones.\n            strategy:: {\n              local __strategyMixin(strategy) = { strategy+: strategy },\n              mixinInstance(strategy):: __strategyMixin(strategy),\n              // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __strategyMixin({ rollingUpdate+: rollingUpdate }),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\n                withMaxSurge(maxSurge):: self + __rollingUpdateMixin({ maxSurge: maxSurge }),\n                // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n                withMaxUnavailable(maxUnavailable):: self + __rollingUpdateMixin({ maxUnavailable: maxUnavailable }),\n              },\n              rollingUpdateType:: hidden.apps.v1beta2.rollingUpdateDeployment,\n              // Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.\n              withType(type):: self + __strategyMixin({ type: type }),\n            },\n            strategyType:: hidden.apps.v1beta2.deploymentStrategy,\n            // Template describes the pods that will be created.\n            template:: {\n              local __templateMixin(template) = { template+: template },\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n        },\n        // DeploymentStatus is the most recently observed status of the Deployment.\n        deploymentStatus:: {\n          new():: {},\n          // Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.\n          withAvailableReplicas(availableReplicas):: self + { availableReplicas: availableReplicas },\n          // Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.\n          withCollisionCount(collisionCount):: self + { collisionCount: collisionCount },\n          // Represents the latest available observations of a deployment's current state.\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // Represents the latest available observations of a deployment's current state.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.apps.v1beta2.deploymentCondition,\n          // The generation observed by the deployment controller.\n          withObservedGeneration(observedGeneration):: self + { observedGeneration: observedGeneration },\n          // Total number of ready pods targeted by this deployment.\n          withReadyReplicas(readyReplicas):: self + { readyReplicas: readyReplicas },\n          // Total number of non-terminated pods targeted by this deployment (their labels match the selector).\n          withReplicas(replicas):: self + { replicas: replicas },\n          // Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.\n          withUnavailableReplicas(unavailableReplicas):: self + { unavailableReplicas: unavailableReplicas },\n          // Total number of non-terminated pods targeted by this deployment that have the desired template spec.\n          withUpdatedReplicas(updatedReplicas):: self + { updatedReplicas: updatedReplicas },\n          mixin:: {},\n        },\n        // DeploymentStrategy describes how to replace existing pods with new ones.\n        deploymentStrategy:: {\n          new():: {},\n          // Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.\n          withType(type):: self + { type: type },\n          mixin:: {\n            // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\n            rollingUpdate:: {\n              local __rollingUpdateMixin(rollingUpdate) = { rollingUpdate+: rollingUpdate },\n              mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n              // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\n              withMaxSurge(maxSurge):: self + __rollingUpdateMixin({ maxSurge: maxSurge }),\n              // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n              withMaxUnavailable(maxUnavailable):: self + __rollingUpdateMixin({ maxUnavailable: maxUnavailable }),\n            },\n            rollingUpdateType:: hidden.apps.v1beta2.rollingUpdateDeployment,\n          },\n        },\n        // ReplicaSetCondition describes the state of a replica set at a certain point.\n        replicaSetCondition:: {\n          new():: {},\n          // The last time the condition transitioned from one status to another.\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // A human readable message indicating details about the transition.\n          withMessage(message):: self + { message: message },\n          // The reason for the condition's last transition.\n          withReason(reason):: self + { reason: reason },\n          // Status of the condition, one of True, False, Unknown.\n          withStatus(status):: self + { status: status },\n          // Type of replica set condition.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // ReplicaSetList is a collection of ReplicaSets.\n        replicaSetList:: {\n          new():: {},\n          // List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.apps.v1beta2.replicaSet,\n          mixin:: {},\n        },\n        // ReplicaSetSpec is the specification of a ReplicaSet.\n        replicaSetSpec:: {\n          new():: {},\n          // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n          withMinReadySeconds(minReadySeconds):: self + { minReadySeconds: minReadySeconds },\n          // Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller\n          withReplicas(replicas):: self + { replicas: replicas },\n          mixin:: {\n            // Selector is a label query over pods that should match the replica count. Label keys and values that must match in order to be controlled by this replica set. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = { selector+: selector },\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\n            template:: {\n              local __templateMixin(template) = { template+: template },\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n        },\n        // ReplicaSetStatus represents the current status of a ReplicaSet.\n        replicaSetStatus:: {\n          new():: {},\n          // The number of available replicas (ready for at least minReadySeconds) for this replica set.\n          withAvailableReplicas(availableReplicas):: self + { availableReplicas: availableReplicas },\n          // Represents the latest available observations of a replica set's current state.\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // Represents the latest available observations of a replica set's current state.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.apps.v1beta2.replicaSetCondition,\n          // The number of pods that have labels matching the labels of the pod template of the replicaset.\n          withFullyLabeledReplicas(fullyLabeledReplicas):: self + { fullyLabeledReplicas: fullyLabeledReplicas },\n          // ObservedGeneration reflects the generation of the most recently observed ReplicaSet.\n          withObservedGeneration(observedGeneration):: self + { observedGeneration: observedGeneration },\n          // The number of ready replicas for this replica set.\n          withReadyReplicas(readyReplicas):: self + { readyReplicas: readyReplicas },\n          // Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller\n          withReplicas(replicas):: self + { replicas: replicas },\n          mixin:: {},\n        },\n        // Spec to control the desired behavior of daemon set rolling update.\n        rollingUpdateDaemonSet:: {\n          new():: {},\n          // The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.\n          withMaxUnavailable(maxUnavailable):: self + { maxUnavailable: maxUnavailable },\n          mixin:: {},\n        },\n        // Spec to control the desired behavior of rolling update.\n        rollingUpdateDeployment:: {\n          new():: {},\n          // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\n          withMaxSurge(maxSurge):: self + { maxSurge: maxSurge },\n          // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n          withMaxUnavailable(maxUnavailable):: self + { maxUnavailable: maxUnavailable },\n          mixin:: {},\n        },\n        // RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.\n        rollingUpdateStatefulSetStrategy:: {\n          new():: {},\n          // Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.\n          withPartition(partition):: self + { partition: partition },\n          mixin:: {},\n        },\n        // ScaleSpec describes the attributes of a scale subresource\n        scaleSpec:: {\n          new():: {},\n          // desired number of instances for the scaled object.\n          withReplicas(replicas):: self + { replicas: replicas },\n          mixin:: {},\n        },\n        // ScaleStatus represents the current status of a scale subresource.\n        scaleStatus:: {\n          new():: {},\n          // actual number of observed instances of the scaled object.\n          withReplicas(replicas):: self + { replicas: replicas },\n          // label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors\n          withSelector(selector):: self + { selector: selector },\n          // label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors\n          withSelectorMixin(selector):: self + { selector+: selector },\n          // label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n          withTargetSelector(targetSelector):: self + { targetSelector: targetSelector },\n          mixin:: {},\n        },\n        // StatefulSetCondition describes the state of a statefulset at a certain point.\n        statefulSetCondition:: {\n          new():: {},\n          // Last time the condition transitioned from one status to another.\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // A human readable message indicating details about the transition.\n          withMessage(message):: self + { message: message },\n          // The reason for the condition's last transition.\n          withReason(reason):: self + { reason: reason },\n          // Status of the condition, one of True, False, Unknown.\n          withStatus(status):: self + { status: status },\n          // Type of statefulset condition.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // StatefulSetList is a collection of StatefulSets.\n        statefulSetList:: {\n          new(items=''):: self.withItems(items),\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.apps.v1beta2.statefulSet,\n          mixin:: {},\n        },\n        // A StatefulSetSpec is the specification of a StatefulSet.\n        statefulSetSpec:: {\n          new():: {},\n          // podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.\n          withPodManagementPolicy(podManagementPolicy):: self + { podManagementPolicy: podManagementPolicy },\n          // replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.\n          withReplicas(replicas):: self + { replicas: replicas },\n          // revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.\n          withRevisionHistoryLimit(revisionHistoryLimit):: self + { revisionHistoryLimit: revisionHistoryLimit },\n          // serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.\n          withServiceName(serviceName):: self + { serviceName: serviceName },\n          // volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.\n          withVolumeClaimTemplates(volumeClaimTemplates):: self + if std.type(volumeClaimTemplates) == 'array' then { volumeClaimTemplates: volumeClaimTemplates } else { volumeClaimTemplates: [volumeClaimTemplates] },\n          // volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.\n          withVolumeClaimTemplatesMixin(volumeClaimTemplates):: self + if std.type(volumeClaimTemplates) == 'array' then { volumeClaimTemplates+: volumeClaimTemplates } else { volumeClaimTemplates+: [volumeClaimTemplates] },\n          volumeClaimTemplatesType:: hidden.core.v1.persistentVolumeClaim,\n          mixin:: {\n            // selector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = { selector+: selector },\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.\n            template:: {\n              local __templateMixin(template) = { template+: template },\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n            // updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.\n            updateStrategy:: {\n              local __updateStrategyMixin(updateStrategy) = { updateStrategy+: updateStrategy },\n              mixinInstance(updateStrategy):: __updateStrategyMixin(updateStrategy),\n              // RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __updateStrategyMixin({ rollingUpdate+: rollingUpdate }),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.\n                withPartition(partition):: self + __rollingUpdateMixin({ partition: partition }),\n              },\n              rollingUpdateType:: hidden.apps.v1beta2.rollingUpdateStatefulSetStrategy,\n              // Type indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.\n              withType(type):: self + __updateStrategyMixin({ type: type }),\n            },\n            updateStrategyType:: hidden.apps.v1beta2.statefulSetUpdateStrategy,\n          },\n        },\n        // StatefulSetStatus represents the current state of a StatefulSet.\n        statefulSetStatus:: {\n          new():: {},\n          // collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.\n          withCollisionCount(collisionCount):: self + { collisionCount: collisionCount },\n          // Represents the latest available observations of a statefulset's current state.\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // Represents the latest available observations of a statefulset's current state.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.apps.v1beta2.statefulSetCondition,\n          // currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.\n          withCurrentReplicas(currentReplicas):: self + { currentReplicas: currentReplicas },\n          // currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).\n          withCurrentRevision(currentRevision):: self + { currentRevision: currentRevision },\n          // observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.\n          withObservedGeneration(observedGeneration):: self + { observedGeneration: observedGeneration },\n          // readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.\n          withReadyReplicas(readyReplicas):: self + { readyReplicas: readyReplicas },\n          // replicas is the number of Pods created by the StatefulSet controller.\n          withReplicas(replicas):: self + { replicas: replicas },\n          // updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)\n          withUpdateRevision(updateRevision):: self + { updateRevision: updateRevision },\n          // updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.\n          withUpdatedReplicas(updatedReplicas):: self + { updatedReplicas: updatedReplicas },\n          mixin:: {},\n        },\n        // StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.\n        statefulSetUpdateStrategy:: {\n          new():: {},\n          // Type indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.\n          withType(type):: self + { type: type },\n          mixin:: {\n            // RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.\n            rollingUpdate:: {\n              local __rollingUpdateMixin(rollingUpdate) = { rollingUpdate+: rollingUpdate },\n              mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n              // Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.\n              withPartition(partition):: self + __rollingUpdateMixin({ partition: partition }),\n            },\n            rollingUpdateType:: hidden.apps.v1beta2.rollingUpdateStatefulSetStrategy,\n          },\n        },\n      },\n    },\n    authentication:: {\n      v1:: {\n        local apiVersion = { apiVersion: 'authentication/v1' },\n        // TokenReviewSpec is a description of the token authentication request.\n        tokenReviewSpec:: {\n          new():: {},\n          // Token is the opaque bearer token.\n          withToken(token):: self + { token: token },\n          mixin:: {},\n        },\n        // TokenReviewStatus is the result of the token authentication request.\n        tokenReviewStatus:: {\n          new():: {},\n          // Authenticated indicates that the token was associated with a known user.\n          withAuthenticated(authenticated):: self + { authenticated: authenticated },\n          // Error indicates that the token couldn't be checked\n          withErrorParam(errorParam):: self + { \"error\": errorParam },\n          mixin:: {\n            // User is the UserInfo associated with the provided token.\n            user:: {\n              local __userMixin(user) = { user+: user },\n              mixinInstance(user):: __userMixin(user),\n              // Any additional information provided by the authenticator.\n              withExtra(extra):: self + __userMixin({ extra: extra }),\n              // Any additional information provided by the authenticator.\n              withExtraMixin(extra):: self + __userMixin({ extra+: extra }),\n              // The names of groups this user is a part of.\n              withGroups(groups):: self + if std.type(groups) == 'array' then __userMixin({ groups: groups }) else __userMixin({ groups: [groups] }),\n              // The names of groups this user is a part of.\n              withGroupsMixin(groups):: self + if std.type(groups) == 'array' then __userMixin({ groups+: groups }) else __userMixin({ groups+: [groups] }),\n              // A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.\n              withUid(uid):: self + __userMixin({ uid: uid }),\n              // The name that uniquely identifies this user among all active users.\n              withUsername(username):: self + __userMixin({ username: username }),\n            },\n            userType:: hidden.authentication.v1.userInfo,\n          },\n        },\n        // UserInfo holds the information about the user needed to implement the user.Info interface.\n        userInfo:: {\n          new():: {},\n          // Any additional information provided by the authenticator.\n          withExtra(extra):: self + { extra: extra },\n          // Any additional information provided by the authenticator.\n          withExtraMixin(extra):: self + { extra+: extra },\n          // The names of groups this user is a part of.\n          withGroups(groups):: self + if std.type(groups) == 'array' then { groups: groups } else { groups: [groups] },\n          // The names of groups this user is a part of.\n          withGroupsMixin(groups):: self + if std.type(groups) == 'array' then { groups+: groups } else { groups+: [groups] },\n          // A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.\n          withUid(uid):: self + { uid: uid },\n          // The name that uniquely identifies this user among all active users.\n          withUsername(username):: self + { username: username },\n          mixin:: {},\n        },\n      },\n      v1beta1:: {\n        local apiVersion = { apiVersion: 'authentication/v1beta1' },\n        // TokenReviewSpec is a description of the token authentication request.\n        tokenReviewSpec:: {\n          new():: {},\n          // Token is the opaque bearer token.\n          withToken(token):: self + { token: token },\n          mixin:: {},\n        },\n        // TokenReviewStatus is the result of the token authentication request.\n        tokenReviewStatus:: {\n          new():: {},\n          // Authenticated indicates that the token was associated with a known user.\n          withAuthenticated(authenticated):: self + { authenticated: authenticated },\n          // Error indicates that the token couldn't be checked\n          withErrorParam(errorParam):: self + { \"error\": errorParam },\n          mixin:: {\n            // User is the UserInfo associated with the provided token.\n            user:: {\n              local __userMixin(user) = { user+: user },\n              mixinInstance(user):: __userMixin(user),\n              // Any additional information provided by the authenticator.\n              withExtra(extra):: self + __userMixin({ extra: extra }),\n              // Any additional information provided by the authenticator.\n              withExtraMixin(extra):: self + __userMixin({ extra+: extra }),\n              // The names of groups this user is a part of.\n              withGroups(groups):: self + if std.type(groups) == 'array' then __userMixin({ groups: groups }) else __userMixin({ groups: [groups] }),\n              // The names of groups this user is a part of.\n              withGroupsMixin(groups):: self + if std.type(groups) == 'array' then __userMixin({ groups+: groups }) else __userMixin({ groups+: [groups] }),\n              // A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.\n              withUid(uid):: self + __userMixin({ uid: uid }),\n              // The name that uniquely identifies this user among all active users.\n              withUsername(username):: self + __userMixin({ username: username }),\n            },\n            userType:: hidden.authentication.v1beta1.userInfo,\n          },\n        },\n        // UserInfo holds the information about the user needed to implement the user.Info interface.\n        userInfo:: {\n          new():: {},\n          // Any additional information provided by the authenticator.\n          withExtra(extra):: self + { extra: extra },\n          // Any additional information provided by the authenticator.\n          withExtraMixin(extra):: self + { extra+: extra },\n          // The names of groups this user is a part of.\n          withGroups(groups):: self + if std.type(groups) == 'array' then { groups: groups } else { groups: [groups] },\n          // The names of groups this user is a part of.\n          withGroupsMixin(groups):: self + if std.type(groups) == 'array' then { groups+: groups } else { groups+: [groups] },\n          // A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.\n          withUid(uid):: self + { uid: uid },\n          // The name that uniquely identifies this user among all active users.\n          withUsername(username):: self + { username: username },\n          mixin:: {},\n        },\n      },\n    },\n    authorization:: {\n      v1:: {\n        local apiVersion = { apiVersion: 'authorization/v1' },\n        // NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface\n        nonResourceAttributes:: {\n          new():: {},\n          // Path is the URL path of the request\n          withPath(path):: self + { path: path },\n          // Verb is the standard HTTP verb\n          withVerb(verb):: self + { verb: verb },\n          mixin:: {},\n        },\n        // NonResourceRule holds information that describes a rule for the non-resource\n        nonResourceRule:: {\n          new():: {},\n          // NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full, final step in the path.  \"*\" means all.\n          withNonResourceUrls(nonResourceUrls):: self + if std.type(nonResourceUrls) == 'array' then { nonResourceURLs: nonResourceUrls } else { nonResourceURLs: [nonResourceUrls] },\n          // NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full, final step in the path.  \"*\" means all.\n          withNonResourceUrlsMixin(nonResourceUrls):: self + if std.type(nonResourceUrls) == 'array' then { nonResourceURLs+: nonResourceUrls } else { nonResourceURLs+: [nonResourceUrls] },\n          // Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  \"*\" means all.\n          withVerbs(verbs):: self + if std.type(verbs) == 'array' then { verbs: verbs } else { verbs: [verbs] },\n          // Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  \"*\" means all.\n          withVerbsMixin(verbs):: self + if std.type(verbs) == 'array' then { verbs+: verbs } else { verbs+: [verbs] },\n          mixin:: {},\n        },\n        // ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface\n        resourceAttributes:: {\n          new():: {},\n          // Group is the API Group of the Resource.  \"*\" means all.\n          withGroup(group):: self + { group: group },\n          // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n          withName(name):: self + { name: name },\n          // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n          withNamespace(namespace):: self + { namespace: namespace },\n          // Resource is one of the existing resource types.  \"*\" means all.\n          withResource(resource):: self + { resource: resource },\n          // Subresource is one of the existing resource types.  \"\" means none.\n          withSubresource(subresource):: self + { subresource: subresource },\n          // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n          withVerb(verb):: self + { verb: verb },\n          // Version is the API Version of the Resource.  \"*\" means all.\n          withVersion(version):: self + { version: version },\n          mixin:: {},\n        },\n        // ResourceRule is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.\n        resourceRule:: {\n          new():: {},\n          // APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.  \"*\" means all.\n          withApiGroups(apiGroups):: self + if std.type(apiGroups) == 'array' then { apiGroups: apiGroups } else { apiGroups: [apiGroups] },\n          // APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.  \"*\" means all.\n          withApiGroupsMixin(apiGroups):: self + if std.type(apiGroups) == 'array' then { apiGroups+: apiGroups } else { apiGroups+: [apiGroups] },\n          // ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  \"*\" means all.\n          withResourceNames(resourceNames):: self + if std.type(resourceNames) == 'array' then { resourceNames: resourceNames } else { resourceNames: [resourceNames] },\n          // ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  \"*\" means all.\n          withResourceNamesMixin(resourceNames):: self + if std.type(resourceNames) == 'array' then { resourceNames+: resourceNames } else { resourceNames+: [resourceNames] },\n          // Resources is a list of resources this rule applies to.  \"*\" means all in the specified apiGroups.\n          // \"*/foo\" represents the subresource 'foo' for all resources in the specified apiGroups.\n          withResources(resources):: self + if std.type(resources) == 'array' then { resources: resources } else { resources: [resources] },\n          // Resources is a list of resources this rule applies to.  \"*\" means all in the specified apiGroups.\n          // \"*/foo\" represents the subresource 'foo' for all resources in the specified apiGroups.\n          withResourcesMixin(resources):: self + if std.type(resources) == 'array' then { resources+: resources } else { resources+: [resources] },\n          // Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n          withVerbs(verbs):: self + if std.type(verbs) == 'array' then { verbs: verbs } else { verbs: [verbs] },\n          // Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n          withVerbsMixin(verbs):: self + if std.type(verbs) == 'array' then { verbs+: verbs } else { verbs+: [verbs] },\n          mixin:: {},\n        },\n        // SelfSubjectAccessReviewSpec is a description of the access request.  Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set\n        selfSubjectAccessReviewSpec:: {\n          new():: {},\n          mixin:: {\n            // NonResourceAttributes describes information for a non-resource access request\n            nonResourceAttributes:: {\n              local __nonResourceAttributesMixin(nonResourceAttributes) = { nonResourceAttributes+: nonResourceAttributes },\n              mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes),\n              // Path is the URL path of the request\n              withPath(path):: self + __nonResourceAttributesMixin({ path: path }),\n              // Verb is the standard HTTP verb\n              withVerb(verb):: self + __nonResourceAttributesMixin({ verb: verb }),\n            },\n            nonResourceAttributesType:: hidden.authorization.v1.nonResourceAttributes,\n            // ResourceAuthorizationAttributes describes information for a resource access request\n            resourceAttributes:: {\n              local __resourceAttributesMixin(resourceAttributes) = { resourceAttributes+: resourceAttributes },\n              mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes),\n              // Group is the API Group of the Resource.  \"*\" means all.\n              withGroup(group):: self + __resourceAttributesMixin({ group: group }),\n              // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n              withName(name):: self + __resourceAttributesMixin({ name: name }),\n              // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n              withNamespace(namespace):: self + __resourceAttributesMixin({ namespace: namespace }),\n              // Resource is one of the existing resource types.  \"*\" means all.\n              withResource(resource):: self + __resourceAttributesMixin({ resource: resource }),\n              // Subresource is one of the existing resource types.  \"\" means none.\n              withSubresource(subresource):: self + __resourceAttributesMixin({ subresource: subresource }),\n              // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n              withVerb(verb):: self + __resourceAttributesMixin({ verb: verb }),\n              // Version is the API Version of the Resource.  \"*\" means all.\n              withVersion(version):: self + __resourceAttributesMixin({ version: version }),\n            },\n            resourceAttributesType:: hidden.authorization.v1.resourceAttributes,\n          },\n        },\n        selfSubjectRulesReviewSpec:: {\n          new():: {},\n          // Namespace to evaluate rules for. Required.\n          withNamespace(namespace):: self + { namespace: namespace },\n          mixin:: {},\n        },\n        // SubjectAccessReviewSpec is a description of the access request.  Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set\n        subjectAccessReviewSpec:: {\n          new():: {},\n          // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n          withExtra(extra):: self + { extra: extra },\n          // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n          withExtraMixin(extra):: self + { extra+: extra },\n          // Groups is the groups you're testing for.\n          withGroups(groups):: self + if std.type(groups) == 'array' then { groups: groups } else { groups: [groups] },\n          // Groups is the groups you're testing for.\n          withGroupsMixin(groups):: self + if std.type(groups) == 'array' then { groups+: groups } else { groups+: [groups] },\n          // UID information about the requesting user.\n          withUid(uid):: self + { uid: uid },\n          // User is the user you're testing for. If you specify \"User\" but not \"Groups\", then is it interpreted as \"What if User were not a member of any groups\n          withUser(user):: self + { user: user },\n          mixin:: {\n            // NonResourceAttributes describes information for a non-resource access request\n            nonResourceAttributes:: {\n              local __nonResourceAttributesMixin(nonResourceAttributes) = { nonResourceAttributes+: nonResourceAttributes },\n              mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes),\n              // Path is the URL path of the request\n              withPath(path):: self + __nonResourceAttributesMixin({ path: path }),\n              // Verb is the standard HTTP verb\n              withVerb(verb):: self + __nonResourceAttributesMixin({ verb: verb }),\n            },\n            nonResourceAttributesType:: hidden.authorization.v1.nonResourceAttributes,\n            // ResourceAuthorizationAttributes describes information for a resource access request\n            resourceAttributes:: {\n              local __resourceAttributesMixin(resourceAttributes) = { resourceAttributes+: resourceAttributes },\n              mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes),\n              // Group is the API Group of the Resource.  \"*\" means all.\n              withGroup(group):: self + __resourceAttributesMixin({ group: group }),\n              // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n              withName(name):: self + __resourceAttributesMixin({ name: name }),\n              // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n              withNamespace(namespace):: self + __resourceAttributesMixin({ namespace: namespace }),\n              // Resource is one of the existing resource types.  \"*\" means all.\n              withResource(resource):: self + __resourceAttributesMixin({ resource: resource }),\n              // Subresource is one of the existing resource types.  \"\" means none.\n              withSubresource(subresource):: self + __resourceAttributesMixin({ subresource: subresource }),\n              // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n              withVerb(verb):: self + __resourceAttributesMixin({ verb: verb }),\n              // Version is the API Version of the Resource.  \"*\" means all.\n              withVersion(version):: self + __resourceAttributesMixin({ version: version }),\n            },\n            resourceAttributesType:: hidden.authorization.v1.resourceAttributes,\n          },\n        },\n        // SubjectAccessReviewStatus\n        subjectAccessReviewStatus:: {\n          new():: {},\n          // Allowed is required. True if the action would be allowed, false otherwise.\n          withAllowed(allowed):: self + { allowed: allowed },\n          // Denied is optional. True if the action would be denied, otherwise false. If both allowed is false and denied is false, then the authorizer has no opinion on whether to authorize the action. Denied may not be true if Allowed is true.\n          withDenied(denied):: self + { denied: denied },\n          // EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.\n          withEvaluationError(evaluationError):: self + { evaluationError: evaluationError },\n          // Reason is optional.  It indicates why a request was allowed or denied.\n          withReason(reason):: self + { reason: reason },\n          mixin:: {},\n        },\n        // SubjectRulesReviewStatus contains the result of a rules check. This check can be incomplete depending on the set of authorizers the server is configured with and any errors experienced during evaluation. Because authorization rules are additive, if a rule appears in a list it's safe to assume the subject has that permission, even if that list is incomplete.\n        subjectRulesReviewStatus:: {\n          new():: {},\n          // EvaluationError can appear in combination with Rules. It indicates an error occurred during rule evaluation, such as an authorizer that doesn't support rule evaluation, and that ResourceRules and/or NonResourceRules may be incomplete.\n          withEvaluationError(evaluationError):: self + { evaluationError: evaluationError },\n          // Incomplete is true when the rules returned by this call are incomplete. This is most commonly encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.\n          withIncomplete(incomplete):: self + { incomplete: incomplete },\n          // NonResourceRules is the list of actions the subject is allowed to perform on non-resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.\n          withNonResourceRules(nonResourceRules):: self + if std.type(nonResourceRules) == 'array' then { nonResourceRules: nonResourceRules } else { nonResourceRules: [nonResourceRules] },\n          // NonResourceRules is the list of actions the subject is allowed to perform on non-resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.\n          withNonResourceRulesMixin(nonResourceRules):: self + if std.type(nonResourceRules) == 'array' then { nonResourceRules+: nonResourceRules } else { nonResourceRules+: [nonResourceRules] },\n          nonResourceRulesType:: hidden.authorization.v1.nonResourceRule,\n          // ResourceRules is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.\n          withResourceRules(resourceRules):: self + if std.type(resourceRules) == 'array' then { resourceRules: resourceRules } else { resourceRules: [resourceRules] },\n          // ResourceRules is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.\n          withResourceRulesMixin(resourceRules):: self + if std.type(resourceRules) == 'array' then { resourceRules+: resourceRules } else { resourceRules+: [resourceRules] },\n          resourceRulesType:: hidden.authorization.v1.resourceRule,\n          mixin:: {},\n        },\n      },\n      v1beta1:: {\n        local apiVersion = { apiVersion: 'authorization/v1beta1' },\n        // NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface\n        nonResourceAttributes:: {\n          new():: {},\n          // Path is the URL path of the request\n          withPath(path):: self + { path: path },\n          // Verb is the standard HTTP verb\n          withVerb(verb):: self + { verb: verb },\n          mixin:: {},\n        },\n        // NonResourceRule holds information that describes a rule for the non-resource\n        nonResourceRule:: {\n          new():: {},\n          // NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full, final step in the path.  \"*\" means all.\n          withNonResourceUrls(nonResourceUrls):: self + if std.type(nonResourceUrls) == 'array' then { nonResourceURLs: nonResourceUrls } else { nonResourceURLs: [nonResourceUrls] },\n          // NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full, final step in the path.  \"*\" means all.\n          withNonResourceUrlsMixin(nonResourceUrls):: self + if std.type(nonResourceUrls) == 'array' then { nonResourceURLs+: nonResourceUrls } else { nonResourceURLs+: [nonResourceUrls] },\n          // Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  \"*\" means all.\n          withVerbs(verbs):: self + if std.type(verbs) == 'array' then { verbs: verbs } else { verbs: [verbs] },\n          // Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  \"*\" means all.\n          withVerbsMixin(verbs):: self + if std.type(verbs) == 'array' then { verbs+: verbs } else { verbs+: [verbs] },\n          mixin:: {},\n        },\n        // ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface\n        resourceAttributes:: {\n          new():: {},\n          // Group is the API Group of the Resource.  \"*\" means all.\n          withGroup(group):: self + { group: group },\n          // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n          withName(name):: self + { name: name },\n          // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n          withNamespace(namespace):: self + { namespace: namespace },\n          // Resource is one of the existing resource types.  \"*\" means all.\n          withResource(resource):: self + { resource: resource },\n          // Subresource is one of the existing resource types.  \"\" means none.\n          withSubresource(subresource):: self + { subresource: subresource },\n          // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n          withVerb(verb):: self + { verb: verb },\n          // Version is the API Version of the Resource.  \"*\" means all.\n          withVersion(version):: self + { version: version },\n          mixin:: {},\n        },\n        // ResourceRule is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.\n        resourceRule:: {\n          new():: {},\n          // APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.  \"*\" means all.\n          withApiGroups(apiGroups):: self + if std.type(apiGroups) == 'array' then { apiGroups: apiGroups } else { apiGroups: [apiGroups] },\n          // APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.  \"*\" means all.\n          withApiGroupsMixin(apiGroups):: self + if std.type(apiGroups) == 'array' then { apiGroups+: apiGroups } else { apiGroups+: [apiGroups] },\n          // ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  \"*\" means all.\n          withResourceNames(resourceNames):: self + if std.type(resourceNames) == 'array' then { resourceNames: resourceNames } else { resourceNames: [resourceNames] },\n          // ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  \"*\" means all.\n          withResourceNamesMixin(resourceNames):: self + if std.type(resourceNames) == 'array' then { resourceNames+: resourceNames } else { resourceNames+: [resourceNames] },\n          // Resources is a list of resources this rule applies to.  \"*\" means all in the specified apiGroups.\n          // \"*/foo\" represents the subresource 'foo' for all resources in the specified apiGroups.\n          withResources(resources):: self + if std.type(resources) == 'array' then { resources: resources } else { resources: [resources] },\n          // Resources is a list of resources this rule applies to.  \"*\" means all in the specified apiGroups.\n          // \"*/foo\" represents the subresource 'foo' for all resources in the specified apiGroups.\n          withResourcesMixin(resources):: self + if std.type(resources) == 'array' then { resources+: resources } else { resources+: [resources] },\n          // Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n          withVerbs(verbs):: self + if std.type(verbs) == 'array' then { verbs: verbs } else { verbs: [verbs] },\n          // Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n          withVerbsMixin(verbs):: self + if std.type(verbs) == 'array' then { verbs+: verbs } else { verbs+: [verbs] },\n          mixin:: {},\n        },\n        // SelfSubjectAccessReviewSpec is a description of the access request.  Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set\n        selfSubjectAccessReviewSpec:: {\n          new():: {},\n          mixin:: {\n            // NonResourceAttributes describes information for a non-resource access request\n            nonResourceAttributes:: {\n              local __nonResourceAttributesMixin(nonResourceAttributes) = { nonResourceAttributes+: nonResourceAttributes },\n              mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes),\n              // Path is the URL path of the request\n              withPath(path):: self + __nonResourceAttributesMixin({ path: path }),\n              // Verb is the standard HTTP verb\n              withVerb(verb):: self + __nonResourceAttributesMixin({ verb: verb }),\n            },\n            nonResourceAttributesType:: hidden.authorization.v1beta1.nonResourceAttributes,\n            // ResourceAuthorizationAttributes describes information for a resource access request\n            resourceAttributes:: {\n              local __resourceAttributesMixin(resourceAttributes) = { resourceAttributes+: resourceAttributes },\n              mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes),\n              // Group is the API Group of the Resource.  \"*\" means all.\n              withGroup(group):: self + __resourceAttributesMixin({ group: group }),\n              // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n              withName(name):: self + __resourceAttributesMixin({ name: name }),\n              // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n              withNamespace(namespace):: self + __resourceAttributesMixin({ namespace: namespace }),\n              // Resource is one of the existing resource types.  \"*\" means all.\n              withResource(resource):: self + __resourceAttributesMixin({ resource: resource }),\n              // Subresource is one of the existing resource types.  \"\" means none.\n              withSubresource(subresource):: self + __resourceAttributesMixin({ subresource: subresource }),\n              // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n              withVerb(verb):: self + __resourceAttributesMixin({ verb: verb }),\n              // Version is the API Version of the Resource.  \"*\" means all.\n              withVersion(version):: self + __resourceAttributesMixin({ version: version }),\n            },\n            resourceAttributesType:: hidden.authorization.v1beta1.resourceAttributes,\n          },\n        },\n        selfSubjectRulesReviewSpec:: {\n          new():: {},\n          // Namespace to evaluate rules for. Required.\n          withNamespace(namespace):: self + { namespace: namespace },\n          mixin:: {},\n        },\n        // SubjectAccessReviewSpec is a description of the access request.  Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set\n        subjectAccessReviewSpec:: {\n          new():: {},\n          // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n          withExtra(extra):: self + { extra: extra },\n          // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n          withExtraMixin(extra):: self + { extra+: extra },\n          // Groups is the groups you're testing for.\n          withGroup(group):: self + if std.type(group) == 'array' then { group: group } else { group: [group] },\n          // Groups is the groups you're testing for.\n          withGroupMixin(group):: self + if std.type(group) == 'array' then { group+: group } else { group+: [group] },\n          // UID information about the requesting user.\n          withUid(uid):: self + { uid: uid },\n          // User is the user you're testing for. If you specify \"User\" but not \"Group\", then is it interpreted as \"What if User were not a member of any groups\n          withUser(user):: self + { user: user },\n          mixin:: {\n            // NonResourceAttributes describes information for a non-resource access request\n            nonResourceAttributes:: {\n              local __nonResourceAttributesMixin(nonResourceAttributes) = { nonResourceAttributes+: nonResourceAttributes },\n              mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes),\n              // Path is the URL path of the request\n              withPath(path):: self + __nonResourceAttributesMixin({ path: path }),\n              // Verb is the standard HTTP verb\n              withVerb(verb):: self + __nonResourceAttributesMixin({ verb: verb }),\n            },\n            nonResourceAttributesType:: hidden.authorization.v1beta1.nonResourceAttributes,\n            // ResourceAuthorizationAttributes describes information for a resource access request\n            resourceAttributes:: {\n              local __resourceAttributesMixin(resourceAttributes) = { resourceAttributes+: resourceAttributes },\n              mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes),\n              // Group is the API Group of the Resource.  \"*\" means all.\n              withGroup(group):: self + __resourceAttributesMixin({ group: group }),\n              // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n              withName(name):: self + __resourceAttributesMixin({ name: name }),\n              // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n              withNamespace(namespace):: self + __resourceAttributesMixin({ namespace: namespace }),\n              // Resource is one of the existing resource types.  \"*\" means all.\n              withResource(resource):: self + __resourceAttributesMixin({ resource: resource }),\n              // Subresource is one of the existing resource types.  \"\" means none.\n              withSubresource(subresource):: self + __resourceAttributesMixin({ subresource: subresource }),\n              // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n              withVerb(verb):: self + __resourceAttributesMixin({ verb: verb }),\n              // Version is the API Version of the Resource.  \"*\" means all.\n              withVersion(version):: self + __resourceAttributesMixin({ version: version }),\n            },\n            resourceAttributesType:: hidden.authorization.v1beta1.resourceAttributes,\n          },\n        },\n        // SubjectAccessReviewStatus\n        subjectAccessReviewStatus:: {\n          new():: {},\n          // Allowed is required. True if the action would be allowed, false otherwise.\n          withAllowed(allowed):: self + { allowed: allowed },\n          // Denied is optional. True if the action would be denied, otherwise false. If both allowed is false and denied is false, then the authorizer has no opinion on whether to authorize the action. Denied may not be true if Allowed is true.\n          withDenied(denied):: self + { denied: denied },\n          // EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.\n          withEvaluationError(evaluationError):: self + { evaluationError: evaluationError },\n          // Reason is optional.  It indicates why a request was allowed or denied.\n          withReason(reason):: self + { reason: reason },\n          mixin:: {},\n        },\n        // SubjectRulesReviewStatus contains the result of a rules check. This check can be incomplete depending on the set of authorizers the server is configured with and any errors experienced during evaluation. Because authorization rules are additive, if a rule appears in a list it's safe to assume the subject has that permission, even if that list is incomplete.\n        subjectRulesReviewStatus:: {\n          new():: {},\n          // EvaluationError can appear in combination with Rules. It indicates an error occurred during rule evaluation, such as an authorizer that doesn't support rule evaluation, and that ResourceRules and/or NonResourceRules may be incomplete.\n          withEvaluationError(evaluationError):: self + { evaluationError: evaluationError },\n          // Incomplete is true when the rules returned by this call are incomplete. This is most commonly encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.\n          withIncomplete(incomplete):: self + { incomplete: incomplete },\n          // NonResourceRules is the list of actions the subject is allowed to perform on non-resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.\n          withNonResourceRules(nonResourceRules):: self + if std.type(nonResourceRules) == 'array' then { nonResourceRules: nonResourceRules } else { nonResourceRules: [nonResourceRules] },\n          // NonResourceRules is the list of actions the subject is allowed to perform on non-resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.\n          withNonResourceRulesMixin(nonResourceRules):: self + if std.type(nonResourceRules) == 'array' then { nonResourceRules+: nonResourceRules } else { nonResourceRules+: [nonResourceRules] },\n          nonResourceRulesType:: hidden.authorization.v1beta1.nonResourceRule,\n          // ResourceRules is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.\n          withResourceRules(resourceRules):: self + if std.type(resourceRules) == 'array' then { resourceRules: resourceRules } else { resourceRules: [resourceRules] },\n          // ResourceRules is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.\n          withResourceRulesMixin(resourceRules):: self + if std.type(resourceRules) == 'array' then { resourceRules+: resourceRules } else { resourceRules+: [resourceRules] },\n          resourceRulesType:: hidden.authorization.v1beta1.resourceRule,\n          mixin:: {},\n        },\n      },\n    },\n    autoscaling:: {\n      v1:: {\n        local apiVersion = { apiVersion: 'autoscaling/v1' },\n        // CrossVersionObjectReference contains enough information to let you identify the referred resource.\n        crossVersionObjectReference:: {\n          new():: {},\n          // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"\n          withKind(kind):: self + { kind: kind },\n          // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\n          withName(name):: self + { name: name },\n          mixin:: {},\n        },\n        // list of horizontal pod autoscaler objects.\n        horizontalPodAutoscalerList:: {\n          new(items=''):: self.withItems(items),\n          // list of horizontal pod autoscaler objects.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // list of horizontal pod autoscaler objects.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.autoscaling.v1.horizontalPodAutoscaler,\n          mixin:: {},\n        },\n        // specification of a horizontal pod autoscaler.\n        horizontalPodAutoscalerSpec:: {\n          new():: {},\n          // upper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas.\n          withMaxReplicas(maxReplicas):: self + { maxReplicas: maxReplicas },\n          // lower limit for the number of pods that can be set by the autoscaler, default 1.\n          withMinReplicas(minReplicas):: self + { minReplicas: minReplicas },\n          // target average CPU utilization (represented as a percentage of requested CPU) over all the pods; if not specified the default autoscaling policy will be used.\n          withTargetCpuUtilizationPercentage(targetCpuUtilizationPercentage):: self + { targetCPUUtilizationPercentage: targetCpuUtilizationPercentage },\n          mixin:: {\n            // reference to scaled resource; horizontal pod autoscaler will learn the current resource consumption and will set the desired number of pods by using its Scale subresource.\n            scaleTargetRef:: {\n              local __scaleTargetRefMixin(scaleTargetRef) = { scaleTargetRef+: scaleTargetRef },\n              mixinInstance(scaleTargetRef):: __scaleTargetRefMixin(scaleTargetRef),\n              // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"\n              withKind(kind):: self + __scaleTargetRefMixin({ kind: kind }),\n              // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\n              withName(name):: self + __scaleTargetRefMixin({ name: name }),\n            },\n            scaleTargetRefType:: hidden.autoscaling.v1.crossVersionObjectReference,\n          },\n        },\n        // current status of a horizontal pod autoscaler\n        horizontalPodAutoscalerStatus:: {\n          new():: {},\n          // current average CPU utilization over all pods, represented as a percentage of requested CPU, e.g. 70 means that an average pod is using now 70% of its requested CPU.\n          withCurrentCpuUtilizationPercentage(currentCpuUtilizationPercentage):: self + { currentCPUUtilizationPercentage: currentCpuUtilizationPercentage },\n          // current number of replicas of pods managed by this autoscaler.\n          withCurrentReplicas(currentReplicas):: self + { currentReplicas: currentReplicas },\n          // desired number of replicas of pods managed by this autoscaler.\n          withDesiredReplicas(desiredReplicas):: self + { desiredReplicas: desiredReplicas },\n          // last time the HorizontalPodAutoscaler scaled the number of pods; used by the autoscaler to control how often the number of pods is changed.\n          withLastScaleTime(lastScaleTime):: self + { lastScaleTime: lastScaleTime },\n          // most recent generation observed by this autoscaler.\n          withObservedGeneration(observedGeneration):: self + { observedGeneration: observedGeneration },\n          mixin:: {},\n        },\n        // ScaleSpec describes the attributes of a scale subresource.\n        scaleSpec:: {\n          new():: {},\n          // desired number of instances for the scaled object.\n          withReplicas(replicas):: self + { replicas: replicas },\n          mixin:: {},\n        },\n        // ScaleStatus represents the current status of a scale subresource.\n        scaleStatus:: {\n          new():: {},\n          // actual number of observed instances of the scaled object.\n          withReplicas(replicas):: self + { replicas: replicas },\n          // label query over pods that should match the replicas count. This is same as the label selector but in the string format to avoid introspection by clients. The string will be in the same format as the query-param syntax. More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors\n          withSelector(selector):: self + { selector: selector },\n          mixin:: {},\n        },\n      },\n      v2beta1:: {\n        local apiVersion = { apiVersion: 'autoscaling/v2beta1' },\n        // CrossVersionObjectReference contains enough information to let you identify the referred resource.\n        crossVersionObjectReference:: {\n          new():: {},\n          // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"\n          withKind(kind):: self + { kind: kind },\n          // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\n          withName(name):: self + { name: name },\n          mixin:: {},\n        },\n        // ExternalMetricSource indicates how to scale on a metric not associated with any Kubernetes object (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster). Exactly one \"target\" type should be set.\n        externalMetricSource:: {\n          new():: {},\n          // metricName is the name of the metric in question.\n          withMetricName(metricName):: self + { metricName: metricName },\n          mixin:: {\n            // metricSelector is used to identify a specific time series within a given metric.\n            metricSelector:: {\n              local __metricSelectorMixin(metricSelector) = { metricSelector+: metricSelector },\n              mixinInstance(metricSelector):: __metricSelectorMixin(metricSelector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __metricSelectorMixin({ matchExpressions: matchExpressions }) else __metricSelectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __metricSelectorMixin({ matchExpressions+: matchExpressions }) else __metricSelectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __metricSelectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __metricSelectorMixin({ matchLabels+: matchLabels }),\n            },\n            metricSelectorType:: hidden.meta.v1.labelSelector,\n            // targetAverageValue is the target per-pod value of global metric (as a quantity). Mutually exclusive with TargetValue.\n            targetAverageValue:: {\n              local __targetAverageValueMixin(targetAverageValue) = { targetAverageValue+: targetAverageValue },\n              mixinInstance(targetAverageValue):: __targetAverageValueMixin(targetAverageValue),\n            },\n            targetAverageValueType:: hidden.core.resource.quantity,\n            // targetValue is the target value of the metric (as a quantity). Mutually exclusive with TargetAverageValue.\n            targetValue:: {\n              local __targetValueMixin(targetValue) = { targetValue+: targetValue },\n              mixinInstance(targetValue):: __targetValueMixin(targetValue),\n            },\n            targetValueType:: hidden.core.resource.quantity,\n          },\n        },\n        // ExternalMetricStatus indicates the current value of a global metric not associated with any Kubernetes object.\n        externalMetricStatus:: {\n          new():: {},\n          // metricName is the name of a metric used for autoscaling in metric system.\n          withMetricName(metricName):: self + { metricName: metricName },\n          mixin:: {\n            // currentAverageValue is the current value of metric averaged over autoscaled pods.\n            currentAverageValue:: {\n              local __currentAverageValueMixin(currentAverageValue) = { currentAverageValue+: currentAverageValue },\n              mixinInstance(currentAverageValue):: __currentAverageValueMixin(currentAverageValue),\n            },\n            currentAverageValueType:: hidden.core.resource.quantity,\n            // currentValue is the current value of the metric (as a quantity)\n            currentValue:: {\n              local __currentValueMixin(currentValue) = { currentValue+: currentValue },\n              mixinInstance(currentValue):: __currentValueMixin(currentValue),\n            },\n            currentValueType:: hidden.core.resource.quantity,\n            // metricSelector is used to identify a specific time series within a given metric.\n            metricSelector:: {\n              local __metricSelectorMixin(metricSelector) = { metricSelector+: metricSelector },\n              mixinInstance(metricSelector):: __metricSelectorMixin(metricSelector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __metricSelectorMixin({ matchExpressions: matchExpressions }) else __metricSelectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __metricSelectorMixin({ matchExpressions+: matchExpressions }) else __metricSelectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __metricSelectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __metricSelectorMixin({ matchLabels+: matchLabels }),\n            },\n            metricSelectorType:: hidden.meta.v1.labelSelector,\n          },\n        },\n        // HorizontalPodAutoscalerCondition describes the state of a HorizontalPodAutoscaler at a certain point.\n        horizontalPodAutoscalerCondition:: {\n          new():: {},\n          // lastTransitionTime is the last time the condition transitioned from one status to another\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // message is a human-readable explanation containing details about the transition\n          withMessage(message):: self + { message: message },\n          // reason is the reason for the condition's last transition.\n          withReason(reason):: self + { reason: reason },\n          // status is the status of the condition (True, False, Unknown)\n          withStatus(status):: self + { status: status },\n          // type describes the current condition\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // HorizontalPodAutoscaler is a list of horizontal pod autoscaler objects.\n        horizontalPodAutoscalerList:: {\n          new(items=''):: self.withItems(items),\n          // items is the list of horizontal pod autoscaler objects.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // items is the list of horizontal pod autoscaler objects.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.autoscaling.v2beta1.horizontalPodAutoscaler,\n          mixin:: {},\n        },\n        // HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler.\n        horizontalPodAutoscalerSpec:: {\n          new():: {},\n          // maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas.\n          withMaxReplicas(maxReplicas):: self + { maxReplicas: maxReplicas },\n          // metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used).  The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods.  Ergo, metrics used must decrease as the pod count is increased, and vice-versa.  See the individual metric source types for more information about how each type of metric must respond.\n          withMetrics(metrics):: self + if std.type(metrics) == 'array' then { metrics: metrics } else { metrics: [metrics] },\n          // metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used).  The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods.  Ergo, metrics used must decrease as the pod count is increased, and vice-versa.  See the individual metric source types for more information about how each type of metric must respond.\n          withMetricsMixin(metrics):: self + if std.type(metrics) == 'array' then { metrics+: metrics } else { metrics+: [metrics] },\n          metricsType:: hidden.autoscaling.v2beta1.metricSpec,\n          // minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod.\n          withMinReplicas(minReplicas):: self + { minReplicas: minReplicas },\n          mixin:: {\n            // scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count.\n            scaleTargetRef:: {\n              local __scaleTargetRefMixin(scaleTargetRef) = { scaleTargetRef+: scaleTargetRef },\n              mixinInstance(scaleTargetRef):: __scaleTargetRefMixin(scaleTargetRef),\n              // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"\n              withKind(kind):: self + __scaleTargetRefMixin({ kind: kind }),\n              // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\n              withName(name):: self + __scaleTargetRefMixin({ name: name }),\n            },\n            scaleTargetRefType:: hidden.autoscaling.v2beta1.crossVersionObjectReference,\n          },\n        },\n        // HorizontalPodAutoscalerStatus describes the current status of a horizontal pod autoscaler.\n        horizontalPodAutoscalerStatus:: {\n          new():: {},\n          // conditions is the set of conditions required for this autoscaler to scale its target, and indicates whether or not those conditions are met.\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // conditions is the set of conditions required for this autoscaler to scale its target, and indicates whether or not those conditions are met.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.autoscaling.v2beta1.horizontalPodAutoscalerCondition,\n          // currentMetrics is the last read state of the metrics used by this autoscaler.\n          withCurrentMetrics(currentMetrics):: self + if std.type(currentMetrics) == 'array' then { currentMetrics: currentMetrics } else { currentMetrics: [currentMetrics] },\n          // currentMetrics is the last read state of the metrics used by this autoscaler.\n          withCurrentMetricsMixin(currentMetrics):: self + if std.type(currentMetrics) == 'array' then { currentMetrics+: currentMetrics } else { currentMetrics+: [currentMetrics] },\n          currentMetricsType:: hidden.autoscaling.v2beta1.metricStatus,\n          // currentReplicas is current number of replicas of pods managed by this autoscaler, as last seen by the autoscaler.\n          withCurrentReplicas(currentReplicas):: self + { currentReplicas: currentReplicas },\n          // desiredReplicas is the desired number of replicas of pods managed by this autoscaler, as last calculated by the autoscaler.\n          withDesiredReplicas(desiredReplicas):: self + { desiredReplicas: desiredReplicas },\n          // lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods, used by the autoscaler to control how often the number of pods is changed.\n          withLastScaleTime(lastScaleTime):: self + { lastScaleTime: lastScaleTime },\n          // observedGeneration is the most recent generation observed by this autoscaler.\n          withObservedGeneration(observedGeneration):: self + { observedGeneration: observedGeneration },\n          mixin:: {},\n        },\n        // MetricSpec specifies how to scale based on a single metric (only `type` and one other matching field should be set at once).\n        metricSpec:: {\n          new():: {},\n          // type is the type of metric source.  It should be one of \"Object\", \"Pods\" or \"Resource\", each mapping to a matching field in the object.\n          withType(type):: self + { type: type },\n          mixin:: {\n            // external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).\n            external:: {\n              local __externalMixin(external) = { external+: external },\n              mixinInstance(external):: __externalMixin(external),\n              // metricName is the name of the metric in question.\n              withMetricName(metricName):: self + __externalMixin({ metricName: metricName }),\n              // metricSelector is used to identify a specific time series within a given metric.\n              metricSelector:: {\n                local __metricSelectorMixin(metricSelector) = __externalMixin({ metricSelector+: metricSelector }),\n                mixinInstance(metricSelector):: __metricSelectorMixin(metricSelector),\n                // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __metricSelectorMixin({ matchExpressions: matchExpressions }) else __metricSelectorMixin({ matchExpressions: [matchExpressions] }),\n                // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __metricSelectorMixin({ matchExpressions+: matchExpressions }) else __metricSelectorMixin({ matchExpressions+: [matchExpressions] }),\n                matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n                // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                withMatchLabels(matchLabels):: self + __metricSelectorMixin({ matchLabels: matchLabels }),\n                // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                withMatchLabelsMixin(matchLabels):: self + __metricSelectorMixin({ matchLabels+: matchLabels }),\n              },\n              metricSelectorType:: hidden.meta.v1.labelSelector,\n              // targetAverageValue is the target per-pod value of global metric (as a quantity). Mutually exclusive with TargetValue.\n              targetAverageValue:: {\n                local __targetAverageValueMixin(targetAverageValue) = __externalMixin({ targetAverageValue+: targetAverageValue }),\n                mixinInstance(targetAverageValue):: __targetAverageValueMixin(targetAverageValue),\n              },\n              targetAverageValueType:: hidden.core.resource.quantity,\n              // targetValue is the target value of the metric (as a quantity). Mutually exclusive with TargetAverageValue.\n              targetValue:: {\n                local __targetValueMixin(targetValue) = __externalMixin({ targetValue+: targetValue }),\n                mixinInstance(targetValue):: __targetValueMixin(targetValue),\n              },\n              targetValueType:: hidden.core.resource.quantity,\n            },\n            externalType:: hidden.autoscaling.v2beta1.externalMetricSource,\n            // object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).\n            object:: {\n              local __objectMixin(object) = { object+: object },\n              mixinInstance(object):: __objectMixin(object),\n              // metricName is the name of the metric in question.\n              withMetricName(metricName):: self + __objectMixin({ metricName: metricName }),\n              // target is the described Kubernetes object.\n              target:: {\n                local __targetMixin(target) = __objectMixin({ target+: target }),\n                mixinInstance(target):: __targetMixin(target),\n                // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"\n                withKind(kind):: self + __targetMixin({ kind: kind }),\n                // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __targetMixin({ name: name }),\n              },\n              targetType:: hidden.autoscaling.v2beta1.crossVersionObjectReference,\n              // targetValue is the target value of the metric (as a quantity).\n              targetValue:: {\n                local __targetValueMixin(targetValue) = __objectMixin({ targetValue+: targetValue }),\n                mixinInstance(targetValue):: __targetValueMixin(targetValue),\n              },\n              targetValueType:: hidden.core.resource.quantity,\n            },\n            objectType:: hidden.autoscaling.v2beta1.objectMetricSource,\n            // pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second).  The values will be averaged together before being compared to the target value.\n            pods:: {\n              local __podsMixin(pods) = { pods+: pods },\n              mixinInstance(pods):: __podsMixin(pods),\n              // metricName is the name of the metric in question\n              withMetricName(metricName):: self + __podsMixin({ metricName: metricName }),\n              // targetAverageValue is the target value of the average of the metric across all relevant pods (as a quantity)\n              targetAverageValue:: {\n                local __targetAverageValueMixin(targetAverageValue) = __podsMixin({ targetAverageValue+: targetAverageValue }),\n                mixinInstance(targetAverageValue):: __targetAverageValueMixin(targetAverageValue),\n              },\n              targetAverageValueType:: hidden.core.resource.quantity,\n            },\n            podsType:: hidden.autoscaling.v2beta1.podsMetricSource,\n            // resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.\n            resource:: {\n              local __resourceMixin(resource) = { resource+: resource },\n              mixinInstance(resource):: __resourceMixin(resource),\n              // name is the name of the resource in question.\n              withName(name):: self + __resourceMixin({ name: name }),\n              // targetAverageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.\n              withTargetAverageUtilization(targetAverageUtilization):: self + __resourceMixin({ targetAverageUtilization: targetAverageUtilization }),\n              // targetAverageValue is the target value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type.\n              targetAverageValue:: {\n                local __targetAverageValueMixin(targetAverageValue) = __resourceMixin({ targetAverageValue+: targetAverageValue }),\n                mixinInstance(targetAverageValue):: __targetAverageValueMixin(targetAverageValue),\n              },\n              targetAverageValueType:: hidden.core.resource.quantity,\n            },\n            resourceType:: hidden.autoscaling.v2beta1.resourceMetricSource,\n          },\n        },\n        // MetricStatus describes the last-read state of a single metric.\n        metricStatus:: {\n          new():: {},\n          // type is the type of metric source.  It will be one of \"Object\", \"Pods\" or \"Resource\", each corresponds to a matching field in the object.\n          withType(type):: self + { type: type },\n          mixin:: {\n            // external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).\n            external:: {\n              local __externalMixin(external) = { external+: external },\n              mixinInstance(external):: __externalMixin(external),\n              // currentAverageValue is the current value of metric averaged over autoscaled pods.\n              currentAverageValue:: {\n                local __currentAverageValueMixin(currentAverageValue) = __externalMixin({ currentAverageValue+: currentAverageValue }),\n                mixinInstance(currentAverageValue):: __currentAverageValueMixin(currentAverageValue),\n              },\n              currentAverageValueType:: hidden.core.resource.quantity,\n              // currentValue is the current value of the metric (as a quantity)\n              currentValue:: {\n                local __currentValueMixin(currentValue) = __externalMixin({ currentValue+: currentValue }),\n                mixinInstance(currentValue):: __currentValueMixin(currentValue),\n              },\n              currentValueType:: hidden.core.resource.quantity,\n              // metricName is the name of a metric used for autoscaling in metric system.\n              withMetricName(metricName):: self + __externalMixin({ metricName: metricName }),\n              // metricSelector is used to identify a specific time series within a given metric.\n              metricSelector:: {\n                local __metricSelectorMixin(metricSelector) = __externalMixin({ metricSelector+: metricSelector }),\n                mixinInstance(metricSelector):: __metricSelectorMixin(metricSelector),\n                // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __metricSelectorMixin({ matchExpressions: matchExpressions }) else __metricSelectorMixin({ matchExpressions: [matchExpressions] }),\n                // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __metricSelectorMixin({ matchExpressions+: matchExpressions }) else __metricSelectorMixin({ matchExpressions+: [matchExpressions] }),\n                matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n                // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                withMatchLabels(matchLabels):: self + __metricSelectorMixin({ matchLabels: matchLabels }),\n                // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                withMatchLabelsMixin(matchLabels):: self + __metricSelectorMixin({ matchLabels+: matchLabels }),\n              },\n              metricSelectorType:: hidden.meta.v1.labelSelector,\n            },\n            externalType:: hidden.autoscaling.v2beta1.externalMetricStatus,\n            // object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).\n            object:: {\n              local __objectMixin(object) = { object+: object },\n              mixinInstance(object):: __objectMixin(object),\n              // currentValue is the current value of the metric (as a quantity).\n              currentValue:: {\n                local __currentValueMixin(currentValue) = __objectMixin({ currentValue+: currentValue }),\n                mixinInstance(currentValue):: __currentValueMixin(currentValue),\n              },\n              currentValueType:: hidden.core.resource.quantity,\n              // metricName is the name of the metric in question.\n              withMetricName(metricName):: self + __objectMixin({ metricName: metricName }),\n              // target is the described Kubernetes object.\n              target:: {\n                local __targetMixin(target) = __objectMixin({ target+: target }),\n                mixinInstance(target):: __targetMixin(target),\n                // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"\n                withKind(kind):: self + __targetMixin({ kind: kind }),\n                // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __targetMixin({ name: name }),\n              },\n              targetType:: hidden.autoscaling.v2beta1.crossVersionObjectReference,\n            },\n            objectType:: hidden.autoscaling.v2beta1.objectMetricStatus,\n            // pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second).  The values will be averaged together before being compared to the target value.\n            pods:: {\n              local __podsMixin(pods) = { pods+: pods },\n              mixinInstance(pods):: __podsMixin(pods),\n              // currentAverageValue is the current value of the average of the metric across all relevant pods (as a quantity)\n              currentAverageValue:: {\n                local __currentAverageValueMixin(currentAverageValue) = __podsMixin({ currentAverageValue+: currentAverageValue }),\n                mixinInstance(currentAverageValue):: __currentAverageValueMixin(currentAverageValue),\n              },\n              currentAverageValueType:: hidden.core.resource.quantity,\n              // metricName is the name of the metric in question\n              withMetricName(metricName):: self + __podsMixin({ metricName: metricName }),\n            },\n            podsType:: hidden.autoscaling.v2beta1.podsMetricStatus,\n            // resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.\n            resource:: {\n              local __resourceMixin(resource) = { resource+: resource },\n              mixinInstance(resource):: __resourceMixin(resource),\n              // currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.  It will only be present if `targetAverageValue` was set in the corresponding metric specification.\n              withCurrentAverageUtilization(currentAverageUtilization):: self + __resourceMixin({ currentAverageUtilization: currentAverageUtilization }),\n              // currentAverageValue is the current value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type. It will always be set, regardless of the corresponding metric specification.\n              currentAverageValue:: {\n                local __currentAverageValueMixin(currentAverageValue) = __resourceMixin({ currentAverageValue+: currentAverageValue }),\n                mixinInstance(currentAverageValue):: __currentAverageValueMixin(currentAverageValue),\n              },\n              currentAverageValueType:: hidden.core.resource.quantity,\n              // name is the name of the resource in question.\n              withName(name):: self + __resourceMixin({ name: name }),\n            },\n            resourceType:: hidden.autoscaling.v2beta1.resourceMetricStatus,\n          },\n        },\n        // ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).\n        objectMetricSource:: {\n          new():: {},\n          // metricName is the name of the metric in question.\n          withMetricName(metricName):: self + { metricName: metricName },\n          mixin:: {\n            // target is the described Kubernetes object.\n            target:: {\n              local __targetMixin(target) = { target+: target },\n              mixinInstance(target):: __targetMixin(target),\n              // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"\n              withKind(kind):: self + __targetMixin({ kind: kind }),\n              // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\n              withName(name):: self + __targetMixin({ name: name }),\n            },\n            targetType:: hidden.autoscaling.v2beta1.crossVersionObjectReference,\n            // targetValue is the target value of the metric (as a quantity).\n            targetValue:: {\n              local __targetValueMixin(targetValue) = { targetValue+: targetValue },\n              mixinInstance(targetValue):: __targetValueMixin(targetValue),\n            },\n            targetValueType:: hidden.core.resource.quantity,\n          },\n        },\n        // ObjectMetricStatus indicates the current value of a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).\n        objectMetricStatus:: {\n          new():: {},\n          // metricName is the name of the metric in question.\n          withMetricName(metricName):: self + { metricName: metricName },\n          mixin:: {\n            // currentValue is the current value of the metric (as a quantity).\n            currentValue:: {\n              local __currentValueMixin(currentValue) = { currentValue+: currentValue },\n              mixinInstance(currentValue):: __currentValueMixin(currentValue),\n            },\n            currentValueType:: hidden.core.resource.quantity,\n            // target is the described Kubernetes object.\n            target:: {\n              local __targetMixin(target) = { target+: target },\n              mixinInstance(target):: __targetMixin(target),\n              // Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"\n              withKind(kind):: self + __targetMixin({ kind: kind }),\n              // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\n              withName(name):: self + __targetMixin({ name: name }),\n            },\n            targetType:: hidden.autoscaling.v2beta1.crossVersionObjectReference,\n          },\n        },\n        // PodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.\n        podsMetricSource:: {\n          new():: {},\n          // metricName is the name of the metric in question\n          withMetricName(metricName):: self + { metricName: metricName },\n          mixin:: {\n            // targetAverageValue is the target value of the average of the metric across all relevant pods (as a quantity)\n            targetAverageValue:: {\n              local __targetAverageValueMixin(targetAverageValue) = { targetAverageValue+: targetAverageValue },\n              mixinInstance(targetAverageValue):: __targetAverageValueMixin(targetAverageValue),\n            },\n            targetAverageValueType:: hidden.core.resource.quantity,\n          },\n        },\n        // PodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second).\n        podsMetricStatus:: {\n          new():: {},\n          // metricName is the name of the metric in question\n          withMetricName(metricName):: self + { metricName: metricName },\n          mixin:: {\n            // currentAverageValue is the current value of the average of the metric across all relevant pods (as a quantity)\n            currentAverageValue:: {\n              local __currentAverageValueMixin(currentAverageValue) = { currentAverageValue+: currentAverageValue },\n              mixinInstance(currentAverageValue):: __currentAverageValueMixin(currentAverageValue),\n            },\n            currentAverageValueType:: hidden.core.resource.quantity,\n          },\n        },\n        // ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory).  The values will be averaged together before being compared to the target.  Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.  Only one \"target\" type should be set.\n        resourceMetricSource:: {\n          new():: {},\n          // name is the name of the resource in question.\n          withName(name):: self + { name: name },\n          // targetAverageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.\n          withTargetAverageUtilization(targetAverageUtilization):: self + { targetAverageUtilization: targetAverageUtilization },\n          mixin:: {\n            // targetAverageValue is the target value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type.\n            targetAverageValue:: {\n              local __targetAverageValueMixin(targetAverageValue) = { targetAverageValue+: targetAverageValue },\n              mixinInstance(targetAverageValue):: __targetAverageValueMixin(targetAverageValue),\n            },\n            targetAverageValueType:: hidden.core.resource.quantity,\n          },\n        },\n        // ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory).  Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.\n        resourceMetricStatus:: {\n          new():: {},\n          // currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.  It will only be present if `targetAverageValue` was set in the corresponding metric specification.\n          withCurrentAverageUtilization(currentAverageUtilization):: self + { currentAverageUtilization: currentAverageUtilization },\n          // name is the name of the resource in question.\n          withName(name):: self + { name: name },\n          mixin:: {\n            // currentAverageValue is the current value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type. It will always be set, regardless of the corresponding metric specification.\n            currentAverageValue:: {\n              local __currentAverageValueMixin(currentAverageValue) = { currentAverageValue+: currentAverageValue },\n              mixinInstance(currentAverageValue):: __currentAverageValueMixin(currentAverageValue),\n            },\n            currentAverageValueType:: hidden.core.resource.quantity,\n          },\n        },\n      },\n    },\n    batch:: {\n      v1:: {\n        local apiVersion = { apiVersion: 'batch/v1' },\n        // JobCondition describes current state of a job.\n        jobCondition:: {\n          new():: {},\n          // Last time the condition was checked.\n          withLastProbeTime(lastProbeTime):: self + { lastProbeTime: lastProbeTime },\n          // Last time the condition transit from one status to another.\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // Human readable message indicating details about last transition.\n          withMessage(message):: self + { message: message },\n          // (brief) reason for the condition's last transition.\n          withReason(reason):: self + { reason: reason },\n          // Status of the condition, one of True, False, Unknown.\n          withStatus(status):: self + { status: status },\n          // Type of job condition, Complete or Failed.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // JobList is a collection of jobs.\n        jobList:: {\n          new(items=''):: self.withItems(items),\n          // items is the list of Jobs.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // items is the list of Jobs.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.batch.v1.job,\n          mixin:: {},\n        },\n        // JobSpec describes how the job execution will look like.\n        jobSpec:: {\n          new():: {},\n          // Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer\n          withActiveDeadlineSeconds(activeDeadlineSeconds):: self + { activeDeadlineSeconds: activeDeadlineSeconds },\n          // Specifies the number of retries before marking this job failed. Defaults to 6\n          withBackoffLimit(backoffLimit):: self + { backoffLimit: backoffLimit },\n          // Specifies the desired number of successfully finished pods the job should be run with.  Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value.  Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n          withCompletions(completions):: self + { completions: completions },\n          // manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template.  When true, the user is responsible for picking unique labels and specifying the selector.  Failure to pick a unique label may cause this and other jobs to not function correctly.  However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector\n          withManualSelector(manualSelector):: self + { manualSelector: manualSelector },\n          // Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n          withParallelism(parallelism):: self + { parallelism: parallelism },\n          mixin:: {\n            // A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = { selector+: selector },\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n            template:: {\n              local __templateMixin(template) = { template+: template },\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n        },\n        // JobStatus represents the current state of a Job.\n        jobStatus:: {\n          new():: {},\n          // The number of actively running pods.\n          withActive(active):: self + { active: active },\n          // Represents time when the job was completed. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.\n          withCompletionTime(completionTime):: self + { completionTime: completionTime },\n          // The latest available observations of an object's current state. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // The latest available observations of an object's current state. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.batch.v1.jobCondition,\n          // The number of pods which reached phase Failed.\n          withFailed(failed):: self + { failed: failed },\n          // Represents time when the job was acknowledged by the job controller. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.\n          withStartTime(startTime):: self + { startTime: startTime },\n          // The number of pods which reached phase Succeeded.\n          withSucceeded(succeeded):: self + { succeeded: succeeded },\n          mixin:: {},\n        },\n      },\n      v1beta1:: {\n        local apiVersion = { apiVersion: 'batch/v1beta1' },\n        // CronJobList is a collection of cron jobs.\n        cronJobList:: {\n          new(items=''):: self.withItems(items),\n          // items is the list of CronJobs.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // items is the list of CronJobs.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.batch.v1beta1.cronJob,\n          mixin:: {},\n        },\n        // CronJobSpec describes how the job execution will look like and when it will actually run.\n        cronJobSpec:: {\n          new():: {},\n          // Specifies how to treat concurrent executions of a Job. Valid values are: - \"Allow\" (default): allows CronJobs to run concurrently; - \"Forbid\": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - \"Replace\": cancels currently running job and replaces it with a new one\n          withConcurrencyPolicy(concurrencyPolicy):: self + { concurrencyPolicy: concurrencyPolicy },\n          // The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.\n          withFailedJobsHistoryLimit(failedJobsHistoryLimit):: self + { failedJobsHistoryLimit: failedJobsHistoryLimit },\n          // The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.\n          withSchedule(schedule):: self + { schedule: schedule },\n          // Optional deadline in seconds for starting the job if it misses scheduled time for any reason.  Missed jobs executions will be counted as failed ones.\n          withStartingDeadlineSeconds(startingDeadlineSeconds):: self + { startingDeadlineSeconds: startingDeadlineSeconds },\n          // The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 3.\n          withSuccessfulJobsHistoryLimit(successfulJobsHistoryLimit):: self + { successfulJobsHistoryLimit: successfulJobsHistoryLimit },\n          // This flag tells the controller to suspend subsequent executions, it does not apply to already started executions.  Defaults to false.\n          withSuspend(suspend):: self + { suspend: suspend },\n          mixin:: {\n            // Specifies the job that will be created when executing a CronJob.\n            jobTemplate:: {\n              local __jobTemplateMixin(jobTemplate) = { jobTemplate+: jobTemplate },\n              mixinInstance(jobTemplate):: __jobTemplateMixin(jobTemplate),\n              // Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __jobTemplateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __jobTemplateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // Specifies the number of retries before marking this job failed. Defaults to 6\n                withBackoffLimit(backoffLimit):: self + __specMixin({ backoffLimit: backoffLimit }),\n                // Specifies the desired number of successfully finished pods the job should be run with.  Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value.  Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n                withCompletions(completions):: self + __specMixin({ completions: completions }),\n                // manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template.  When true, the user is responsible for picking unique labels and specifying the selector.  Failure to pick a unique label may cause this and other jobs to not function correctly.  However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector\n                withManualSelector(manualSelector):: self + __specMixin({ manualSelector: manualSelector }),\n                // Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n                withParallelism(parallelism):: self + __specMixin({ parallelism: parallelism }),\n                // A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n                selector:: {\n                  local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n                  mixinInstance(selector):: __selectorMixin(selector),\n                  // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                  withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n                  // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                  withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n                  matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n                  // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                  withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n                  // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                  withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n                },\n                selectorType:: hidden.meta.v1.labelSelector,\n                // Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n                template:: {\n                  local __templateMixin(template) = __specMixin({ template+: template }),\n                  mixinInstance(template):: __templateMixin(template),\n                  // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n                  metadata:: {\n                    local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                    mixinInstance(metadata):: __metadataMixin(metadata),\n                    // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                    withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                    // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                    withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                    // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                    withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                    // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                    withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                    // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                    withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                    // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                    //\n                    // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                    //\n                    // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                    withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                    // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                    //\n                    // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                    initializers:: {\n                      local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                      mixinInstance(initializers):: __initializersMixin(initializers),\n                      // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                      withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                      // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                      withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                      pendingType:: hidden.meta.v1.initializer,\n                    },\n                    initializersType:: hidden.meta.v1.initializers,\n                    // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                    withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                    // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                    withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                    // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                    withName(name):: self + __metadataMixin({ name: name }),\n                    // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                    //\n                    // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                    withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                    // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                    withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                    // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                    withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                    ownerReferencesType:: hidden.meta.v1.ownerReference,\n                  },\n                  metadataType:: hidden.meta.v1.objectMeta,\n                  // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n                  spec:: {\n                    local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                    mixinInstance(spec):: __specMixin(spec),\n                    // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                    withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                    // If specified, the pod's scheduling constraints\n                    affinity:: {\n                      local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                      mixinInstance(affinity):: __affinityMixin(affinity),\n                      // Describes node affinity scheduling rules for the pod.\n                      nodeAffinity:: {\n                        local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                        mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                        // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                        requiredDuringSchedulingIgnoredDuringExecution:: {\n                          local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                          mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                          // Required. A list of node selector terms. The terms are ORed.\n                          withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                          // Required. A list of node selector terms. The terms are ORed.\n                          withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                          nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                        },\n                        requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                      },\n                      nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                      // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                      podAffinity:: {\n                        local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                        mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                        // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                        // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                        requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                      },\n                      podAffinityType:: hidden.core.v1.podAffinity,\n                      // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                      podAntiAffinity:: {\n                        local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                        mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                        // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                        // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                        requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                      },\n                      podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                    },\n                    affinityType:: hidden.core.v1.affinity,\n                    // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                    withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                    // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                    withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                    // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                    withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                    containersType:: hidden.core.v1.container,\n                    // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                    dnsConfig:: {\n                      local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                      mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                      // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                      withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                      // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                      withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                      // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                      withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                      // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                      withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                      optionsType:: hidden.core.v1.podDnsConfigOption,\n                      // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                      withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                      // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                      withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                    },\n                    dnsConfigType:: hidden.core.v1.podDnsConfig,\n                    // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                    withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                    // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                    withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                    // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                    withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                    hostAliasesType:: hidden.core.v1.hostAlias,\n                    // Use the host's ipc namespace. Optional: Default to false.\n                    withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                    // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                    withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                    // Use the host's pid namespace. Optional: Default to false.\n                    withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                    // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                    withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                    // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                    withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                    // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                    withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                    imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                    // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                    withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                    // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                    withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                    initContainersType:: hidden.core.v1.container,\n                    // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                    withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                    // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                    withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                    // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                    withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                    // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                    withPriority(priority):: self + __specMixin({ priority: priority }),\n                    // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                    withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                    // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                    withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                    // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                    withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                    readinessGatesType:: hidden.core.v1.podReadinessGate,\n                    // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                    withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                    // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                    withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                    // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                    securityContext:: {\n                      local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                      mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                      // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                      //\n                      // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                      //\n                      // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                      withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                      // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                      withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                      // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                      withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                      // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                      withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                      // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                      seLinuxOptions:: {\n                        local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                        mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                        // Level is SELinux level label that applies to the container.\n                        withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                        // Role is a SELinux role label that applies to the container.\n                        withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                        // Type is a SELinux type label that applies to the container.\n                        withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                        // User is a SELinux user label that applies to the container.\n                        withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                      },\n                      seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                      // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                      withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                      // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                      withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                      // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                      withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                      // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                      withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                      sysctlsType:: hidden.core.v1.sysctl,\n                    },\n                    securityContextType:: hidden.core.v1.podSecurityContext,\n                    // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                    withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                    // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                    withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                    // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                    withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                    // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                    withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                    // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                    withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                    // If specified, the pod's tolerations.\n                    withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                    // If specified, the pod's tolerations.\n                    withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                    tolerationsType:: hidden.core.v1.toleration,\n                    // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                    withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                    // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                    withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                    volumesType:: hidden.core.v1.volume,\n                  },\n                  specType:: hidden.core.v1.podSpec,\n                },\n                templateType:: hidden.core.v1.podTemplateSpec,\n              },\n              specType:: hidden.batch.v1.jobSpec,\n            },\n            jobTemplateType:: hidden.batch.v1beta1.jobTemplateSpec,\n          },\n        },\n        // CronJobStatus represents the current state of a cron job.\n        cronJobStatus:: {\n          new():: {},\n          // A list of pointers to currently running jobs.\n          withActive(active):: self + if std.type(active) == 'array' then { active: active } else { active: [active] },\n          // A list of pointers to currently running jobs.\n          withActiveMixin(active):: self + if std.type(active) == 'array' then { active+: active } else { active+: [active] },\n          activeType:: hidden.core.v1.objectReference,\n          // Information when was the last time the job was successfully scheduled.\n          withLastScheduleTime(lastScheduleTime):: self + { lastScheduleTime: lastScheduleTime },\n          mixin:: {},\n        },\n        // JobTemplateSpec describes the data a Job should have when created from a template\n        jobTemplateSpec:: {\n          new():: {},\n          mixin:: {\n            // Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n            metadata:: {\n              local __metadataMixin(metadata) = { metadata+: metadata },\n              mixinInstance(metadata):: __metadataMixin(metadata),\n              // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n              withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n              // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n              withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n              // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n              withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n              // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n              withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n              // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n              withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n              // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n              //\n              // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n              //\n              // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n              withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n              // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n              //\n              // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n              initializers:: {\n                local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                mixinInstance(initializers):: __initializersMixin(initializers),\n                // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                pendingType:: hidden.meta.v1.initializer,\n              },\n              initializersType:: hidden.meta.v1.initializers,\n              // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n              withLabels(labels):: self + __metadataMixin({ labels: labels }),\n              // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n              withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n              // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n              withName(name):: self + __metadataMixin({ name: name }),\n              // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n              //\n              // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n              withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n              // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n              withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n              // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n              withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n              ownerReferencesType:: hidden.meta.v1.ownerReference,\n            },\n            metadataType:: hidden.meta.v1.objectMeta,\n            // Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n            spec:: {\n              local __specMixin(spec) = { spec+: spec },\n              mixinInstance(spec):: __specMixin(spec),\n              // Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer\n              withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n              // Specifies the number of retries before marking this job failed. Defaults to 6\n              withBackoffLimit(backoffLimit):: self + __specMixin({ backoffLimit: backoffLimit }),\n              // Specifies the desired number of successfully finished pods the job should be run with.  Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value.  Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n              withCompletions(completions):: self + __specMixin({ completions: completions }),\n              // manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template.  When true, the user is responsible for picking unique labels and specifying the selector.  Failure to pick a unique label may cause this and other jobs to not function correctly.  However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector\n              withManualSelector(manualSelector):: self + __specMixin({ manualSelector: manualSelector }),\n              // Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n              withParallelism(parallelism):: self + __specMixin({ parallelism: parallelism }),\n              // A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n              selector:: {\n                local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n                mixinInstance(selector):: __selectorMixin(selector),\n                // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n                // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n                matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n                // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n                // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n              },\n              selectorType:: hidden.meta.v1.labelSelector,\n              // Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n              template:: {\n                local __templateMixin(template) = __specMixin({ template+: template }),\n                mixinInstance(template):: __templateMixin(template),\n                // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n                metadata:: {\n                  local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                  mixinInstance(metadata):: __metadataMixin(metadata),\n                  // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                  withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                  // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                  withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                  // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                  withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                  // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                  withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                  // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                  withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                  // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                  //\n                  // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                  //\n                  // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                  withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                  // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                  //\n                  // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                  initializers:: {\n                    local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                    mixinInstance(initializers):: __initializersMixin(initializers),\n                    // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                    withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                    // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                    withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                    pendingType:: hidden.meta.v1.initializer,\n                  },\n                  initializersType:: hidden.meta.v1.initializers,\n                  // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                  withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                  // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                  withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                  // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                  withName(name):: self + __metadataMixin({ name: name }),\n                  // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                  //\n                  // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                  withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                  // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                  withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                  // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                  withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                  ownerReferencesType:: hidden.meta.v1.ownerReference,\n                },\n                metadataType:: hidden.meta.v1.objectMeta,\n                // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n                spec:: {\n                  local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                  mixinInstance(spec):: __specMixin(spec),\n                  // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                  withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                  // If specified, the pod's scheduling constraints\n                  affinity:: {\n                    local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                    mixinInstance(affinity):: __affinityMixin(affinity),\n                    // Describes node affinity scheduling rules for the pod.\n                    nodeAffinity:: {\n                      local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                      mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                      // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                      withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                      // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                      withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                      preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                      // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                      requiredDuringSchedulingIgnoredDuringExecution:: {\n                        local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                        mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                        // Required. A list of node selector terms. The terms are ORed.\n                        withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                        // Required. A list of node selector terms. The terms are ORed.\n                        withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                        nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                      },\n                      requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                    },\n                    nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                    // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                    podAffinity:: {\n                      local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                      mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                      // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                      withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                      // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                      withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                      preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                      // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                      withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                      // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                      withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                      requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                    },\n                    podAffinityType:: hidden.core.v1.podAffinity,\n                    // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                    podAntiAffinity:: {\n                      local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                      mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                      // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                      withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                      // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                      withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                      preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                      // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                      withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                      // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                      withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                      requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                    },\n                    podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                  },\n                  affinityType:: hidden.core.v1.affinity,\n                  // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                  withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                  // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                  withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                  // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                  withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                  containersType:: hidden.core.v1.container,\n                  // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                  dnsConfig:: {\n                    local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                    mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                    // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                    withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                    // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                    withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                    // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                    withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                    // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                    withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                    optionsType:: hidden.core.v1.podDnsConfigOption,\n                    // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                    withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                    // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                    withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                  },\n                  dnsConfigType:: hidden.core.v1.podDnsConfig,\n                  // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                  withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                  // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                  withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                  // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                  withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                  hostAliasesType:: hidden.core.v1.hostAlias,\n                  // Use the host's ipc namespace. Optional: Default to false.\n                  withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                  // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                  withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                  // Use the host's pid namespace. Optional: Default to false.\n                  withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                  // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                  withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                  // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                  withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                  // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                  withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                  imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                  // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                  withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                  // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                  withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                  initContainersType:: hidden.core.v1.container,\n                  // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                  withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                  // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                  withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                  // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                  withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                  // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                  withPriority(priority):: self + __specMixin({ priority: priority }),\n                  // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                  withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                  // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                  withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                  // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                  withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                  readinessGatesType:: hidden.core.v1.podReadinessGate,\n                  // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                  withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                  // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                  withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                  // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                  securityContext:: {\n                    local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                    mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                    // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                    //\n                    // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                    //\n                    // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                    withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                    // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                    withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                    // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                    withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                    // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                    withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                    // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                    seLinuxOptions:: {\n                      local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                      mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                      // Level is SELinux level label that applies to the container.\n                      withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                      // Role is a SELinux role label that applies to the container.\n                      withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                      // Type is a SELinux type label that applies to the container.\n                      withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                      // User is a SELinux user label that applies to the container.\n                      withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                    },\n                    seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                    // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                    withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                    // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                    withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                    // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                    withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                    // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                    withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                    sysctlsType:: hidden.core.v1.sysctl,\n                  },\n                  securityContextType:: hidden.core.v1.podSecurityContext,\n                  // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                  withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                  // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                  withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                  // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                  withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                  // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                  withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                  // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                  withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                  // If specified, the pod's tolerations.\n                  withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                  // If specified, the pod's tolerations.\n                  withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                  tolerationsType:: hidden.core.v1.toleration,\n                  // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                  withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                  // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                  withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                  volumesType:: hidden.core.v1.volume,\n                },\n                specType:: hidden.core.v1.podSpec,\n              },\n              templateType:: hidden.core.v1.podTemplateSpec,\n            },\n            specType:: hidden.batch.v1.jobSpec,\n          },\n        },\n      },\n      v2alpha1:: {\n        local apiVersion = { apiVersion: 'batch/v2alpha1' },\n        // CronJobList is a collection of cron jobs.\n        cronJobList:: {\n          new(items=''):: self.withItems(items),\n          // items is the list of CronJobs.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // items is the list of CronJobs.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.batch.v2alpha1.cronJob,\n          mixin:: {},\n        },\n        // CronJobSpec describes how the job execution will look like and when it will actually run.\n        cronJobSpec:: {\n          new():: {},\n          // Specifies how to treat concurrent executions of a Job. Valid values are: - \"Allow\" (default): allows CronJobs to run concurrently; - \"Forbid\": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - \"Replace\": cancels currently running job and replaces it with a new one\n          withConcurrencyPolicy(concurrencyPolicy):: self + { concurrencyPolicy: concurrencyPolicy },\n          // The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.\n          withFailedJobsHistoryLimit(failedJobsHistoryLimit):: self + { failedJobsHistoryLimit: failedJobsHistoryLimit },\n          // The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.\n          withSchedule(schedule):: self + { schedule: schedule },\n          // Optional deadline in seconds for starting the job if it misses scheduled time for any reason.  Missed jobs executions will be counted as failed ones.\n          withStartingDeadlineSeconds(startingDeadlineSeconds):: self + { startingDeadlineSeconds: startingDeadlineSeconds },\n          // The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.\n          withSuccessfulJobsHistoryLimit(successfulJobsHistoryLimit):: self + { successfulJobsHistoryLimit: successfulJobsHistoryLimit },\n          // This flag tells the controller to suspend subsequent executions, it does not apply to already started executions.  Defaults to false.\n          withSuspend(suspend):: self + { suspend: suspend },\n          mixin:: {\n            // Specifies the job that will be created when executing a CronJob.\n            jobTemplate:: {\n              local __jobTemplateMixin(jobTemplate) = { jobTemplate+: jobTemplate },\n              mixinInstance(jobTemplate):: __jobTemplateMixin(jobTemplate),\n              // Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __jobTemplateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __jobTemplateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // Specifies the number of retries before marking this job failed. Defaults to 6\n                withBackoffLimit(backoffLimit):: self + __specMixin({ backoffLimit: backoffLimit }),\n                // Specifies the desired number of successfully finished pods the job should be run with.  Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value.  Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n                withCompletions(completions):: self + __specMixin({ completions: completions }),\n                // manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template.  When true, the user is responsible for picking unique labels and specifying the selector.  Failure to pick a unique label may cause this and other jobs to not function correctly.  However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector\n                withManualSelector(manualSelector):: self + __specMixin({ manualSelector: manualSelector }),\n                // Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n                withParallelism(parallelism):: self + __specMixin({ parallelism: parallelism }),\n                // A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n                selector:: {\n                  local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n                  mixinInstance(selector):: __selectorMixin(selector),\n                  // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                  withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n                  // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                  withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n                  matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n                  // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                  withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n                  // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                  withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n                },\n                selectorType:: hidden.meta.v1.labelSelector,\n                // Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n                template:: {\n                  local __templateMixin(template) = __specMixin({ template+: template }),\n                  mixinInstance(template):: __templateMixin(template),\n                  // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n                  metadata:: {\n                    local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                    mixinInstance(metadata):: __metadataMixin(metadata),\n                    // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                    withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                    // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                    withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                    // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                    withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                    // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                    withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                    // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                    withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                    // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                    //\n                    // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                    //\n                    // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                    withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                    // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                    //\n                    // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                    initializers:: {\n                      local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                      mixinInstance(initializers):: __initializersMixin(initializers),\n                      // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                      withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                      // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                      withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                      pendingType:: hidden.meta.v1.initializer,\n                    },\n                    initializersType:: hidden.meta.v1.initializers,\n                    // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                    withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                    // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                    withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                    // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                    withName(name):: self + __metadataMixin({ name: name }),\n                    // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                    //\n                    // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                    withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                    // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                    withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                    // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                    withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                    ownerReferencesType:: hidden.meta.v1.ownerReference,\n                  },\n                  metadataType:: hidden.meta.v1.objectMeta,\n                  // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n                  spec:: {\n                    local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                    mixinInstance(spec):: __specMixin(spec),\n                    // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                    withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                    // If specified, the pod's scheduling constraints\n                    affinity:: {\n                      local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                      mixinInstance(affinity):: __affinityMixin(affinity),\n                      // Describes node affinity scheduling rules for the pod.\n                      nodeAffinity:: {\n                        local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                        mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                        // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                        requiredDuringSchedulingIgnoredDuringExecution:: {\n                          local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                          mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                          // Required. A list of node selector terms. The terms are ORed.\n                          withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                          // Required. A list of node selector terms. The terms are ORed.\n                          withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                          nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                        },\n                        requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                      },\n                      nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                      // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                      podAffinity:: {\n                        local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                        mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                        // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                        // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                        requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                      },\n                      podAffinityType:: hidden.core.v1.podAffinity,\n                      // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                      podAntiAffinity:: {\n                        local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                        mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                        preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                        // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                        // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                        requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                      },\n                      podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                    },\n                    affinityType:: hidden.core.v1.affinity,\n                    // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                    withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                    // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                    withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                    // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                    withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                    containersType:: hidden.core.v1.container,\n                    // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                    dnsConfig:: {\n                      local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                      mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                      // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                      withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                      // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                      withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                      // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                      withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                      // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                      withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                      optionsType:: hidden.core.v1.podDnsConfigOption,\n                      // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                      withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                      // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                      withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                    },\n                    dnsConfigType:: hidden.core.v1.podDnsConfig,\n                    // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                    withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                    // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                    withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                    // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                    withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                    hostAliasesType:: hidden.core.v1.hostAlias,\n                    // Use the host's ipc namespace. Optional: Default to false.\n                    withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                    // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                    withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                    // Use the host's pid namespace. Optional: Default to false.\n                    withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                    // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                    withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                    // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                    withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                    // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                    withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                    imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                    // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                    withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                    // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                    withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                    initContainersType:: hidden.core.v1.container,\n                    // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                    withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                    // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                    withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                    // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                    withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                    // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                    withPriority(priority):: self + __specMixin({ priority: priority }),\n                    // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                    withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                    // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                    withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                    // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                    withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                    readinessGatesType:: hidden.core.v1.podReadinessGate,\n                    // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                    withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                    // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                    withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                    // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                    securityContext:: {\n                      local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                      mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                      // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                      //\n                      // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                      //\n                      // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                      withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                      // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                      withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                      // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                      withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                      // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                      withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                      // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                      seLinuxOptions:: {\n                        local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                        mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                        // Level is SELinux level label that applies to the container.\n                        withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                        // Role is a SELinux role label that applies to the container.\n                        withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                        // Type is a SELinux type label that applies to the container.\n                        withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                        // User is a SELinux user label that applies to the container.\n                        withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                      },\n                      seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                      // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                      withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                      // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                      withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                      // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                      withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                      // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                      withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                      sysctlsType:: hidden.core.v1.sysctl,\n                    },\n                    securityContextType:: hidden.core.v1.podSecurityContext,\n                    // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                    withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                    // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                    withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                    // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                    withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                    // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                    withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                    // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                    withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                    // If specified, the pod's tolerations.\n                    withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                    // If specified, the pod's tolerations.\n                    withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                    tolerationsType:: hidden.core.v1.toleration,\n                    // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                    withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                    // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                    withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                    volumesType:: hidden.core.v1.volume,\n                  },\n                  specType:: hidden.core.v1.podSpec,\n                },\n                templateType:: hidden.core.v1.podTemplateSpec,\n              },\n              specType:: hidden.batch.v1.jobSpec,\n            },\n            jobTemplateType:: hidden.batch.v2alpha1.jobTemplateSpec,\n          },\n        },\n        // CronJobStatus represents the current state of a cron job.\n        cronJobStatus:: {\n          new():: {},\n          // A list of pointers to currently running jobs.\n          withActive(active):: self + if std.type(active) == 'array' then { active: active } else { active: [active] },\n          // A list of pointers to currently running jobs.\n          withActiveMixin(active):: self + if std.type(active) == 'array' then { active+: active } else { active+: [active] },\n          activeType:: hidden.core.v1.objectReference,\n          // Information when was the last time the job was successfully scheduled.\n          withLastScheduleTime(lastScheduleTime):: self + { lastScheduleTime: lastScheduleTime },\n          mixin:: {},\n        },\n        // JobTemplateSpec describes the data a Job should have when created from a template\n        jobTemplateSpec:: {\n          new():: {},\n          mixin:: {\n            // Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n            metadata:: {\n              local __metadataMixin(metadata) = { metadata+: metadata },\n              mixinInstance(metadata):: __metadataMixin(metadata),\n              // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n              withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n              // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n              withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n              // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n              withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n              // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n              withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n              // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n              withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n              // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n              //\n              // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n              //\n              // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n              withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n              // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n              //\n              // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n              initializers:: {\n                local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                mixinInstance(initializers):: __initializersMixin(initializers),\n                // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                pendingType:: hidden.meta.v1.initializer,\n              },\n              initializersType:: hidden.meta.v1.initializers,\n              // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n              withLabels(labels):: self + __metadataMixin({ labels: labels }),\n              // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n              withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n              // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n              withName(name):: self + __metadataMixin({ name: name }),\n              // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n              //\n              // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n              withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n              // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n              withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n              // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n              withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n              ownerReferencesType:: hidden.meta.v1.ownerReference,\n            },\n            metadataType:: hidden.meta.v1.objectMeta,\n            // Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n            spec:: {\n              local __specMixin(spec) = { spec+: spec },\n              mixinInstance(spec):: __specMixin(spec),\n              // Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer\n              withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n              // Specifies the number of retries before marking this job failed. Defaults to 6\n              withBackoffLimit(backoffLimit):: self + __specMixin({ backoffLimit: backoffLimit }),\n              // Specifies the desired number of successfully finished pods the job should be run with.  Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value.  Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n              withCompletions(completions):: self + __specMixin({ completions: completions }),\n              // manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template.  When true, the user is responsible for picking unique labels and specifying the selector.  Failure to pick a unique label may cause this and other jobs to not function correctly.  However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector\n              withManualSelector(manualSelector):: self + __specMixin({ manualSelector: manualSelector }),\n              // Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n              withParallelism(parallelism):: self + __specMixin({ parallelism: parallelism }),\n              // A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n              selector:: {\n                local __selectorMixin(selector) = __specMixin({ selector+: selector }),\n                mixinInstance(selector):: __selectorMixin(selector),\n                // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n                // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n                matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n                // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n                // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n              },\n              selectorType:: hidden.meta.v1.labelSelector,\n              // Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n              template:: {\n                local __templateMixin(template) = __specMixin({ template+: template }),\n                mixinInstance(template):: __templateMixin(template),\n                // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n                metadata:: {\n                  local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                  mixinInstance(metadata):: __metadataMixin(metadata),\n                  // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                  withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                  // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                  withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                  // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                  withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                  // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                  withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                  // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                  withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                  // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                  //\n                  // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                  //\n                  // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                  withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                  // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                  //\n                  // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                  initializers:: {\n                    local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                    mixinInstance(initializers):: __initializersMixin(initializers),\n                    // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                    withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                    // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                    withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                    pendingType:: hidden.meta.v1.initializer,\n                  },\n                  initializersType:: hidden.meta.v1.initializers,\n                  // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                  withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                  // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                  withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                  // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                  withName(name):: self + __metadataMixin({ name: name }),\n                  // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                  //\n                  // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                  withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                  // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                  withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                  // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                  withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                  ownerReferencesType:: hidden.meta.v1.ownerReference,\n                },\n                metadataType:: hidden.meta.v1.objectMeta,\n                // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n                spec:: {\n                  local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                  mixinInstance(spec):: __specMixin(spec),\n                  // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                  withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                  // If specified, the pod's scheduling constraints\n                  affinity:: {\n                    local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                    mixinInstance(affinity):: __affinityMixin(affinity),\n                    // Describes node affinity scheduling rules for the pod.\n                    nodeAffinity:: {\n                      local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                      mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                      // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                      withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                      // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                      withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                      preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                      // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                      requiredDuringSchedulingIgnoredDuringExecution:: {\n                        local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                        mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                        // Required. A list of node selector terms. The terms are ORed.\n                        withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                        // Required. A list of node selector terms. The terms are ORed.\n                        withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                        nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                      },\n                      requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                    },\n                    nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                    // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                    podAffinity:: {\n                      local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                      mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                      // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                      withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                      // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                      withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                      preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                      // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                      withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                      // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                      withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                      requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                    },\n                    podAffinityType:: hidden.core.v1.podAffinity,\n                    // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                    podAntiAffinity:: {\n                      local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                      mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                      // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                      withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                      // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                      withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                      preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                      // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                      withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                      // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                      withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                      requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                    },\n                    podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                  },\n                  affinityType:: hidden.core.v1.affinity,\n                  // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                  withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                  // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                  withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                  // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                  withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                  containersType:: hidden.core.v1.container,\n                  // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                  dnsConfig:: {\n                    local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                    mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                    // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                    withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                    // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                    withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                    // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                    withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                    // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                    withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                    optionsType:: hidden.core.v1.podDnsConfigOption,\n                    // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                    withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                    // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                    withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                  },\n                  dnsConfigType:: hidden.core.v1.podDnsConfig,\n                  // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                  withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                  // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                  withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                  // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                  withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                  hostAliasesType:: hidden.core.v1.hostAlias,\n                  // Use the host's ipc namespace. Optional: Default to false.\n                  withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                  // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                  withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                  // Use the host's pid namespace. Optional: Default to false.\n                  withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                  // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                  withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                  // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                  withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                  // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                  withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                  imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                  // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                  withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                  // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                  withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                  initContainersType:: hidden.core.v1.container,\n                  // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                  withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                  // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                  withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                  // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                  withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                  // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                  withPriority(priority):: self + __specMixin({ priority: priority }),\n                  // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                  withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                  // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                  withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                  // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                  withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                  readinessGatesType:: hidden.core.v1.podReadinessGate,\n                  // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                  withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                  // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                  withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                  // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                  securityContext:: {\n                    local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                    mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                    // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                    //\n                    // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                    //\n                    // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                    withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                    // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                    withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                    // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                    withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                    // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                    withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                    // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                    seLinuxOptions:: {\n                      local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                      mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                      // Level is SELinux level label that applies to the container.\n                      withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                      // Role is a SELinux role label that applies to the container.\n                      withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                      // Type is a SELinux type label that applies to the container.\n                      withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                      // User is a SELinux user label that applies to the container.\n                      withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                    },\n                    seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                    // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                    withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                    // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                    withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                    // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                    withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                    // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                    withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                    sysctlsType:: hidden.core.v1.sysctl,\n                  },\n                  securityContextType:: hidden.core.v1.podSecurityContext,\n                  // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                  withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                  // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                  withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                  // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                  withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                  // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                  withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                  // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                  withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                  // If specified, the pod's tolerations.\n                  withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                  // If specified, the pod's tolerations.\n                  withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                  tolerationsType:: hidden.core.v1.toleration,\n                  // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                  withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                  // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                  withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                  volumesType:: hidden.core.v1.volume,\n                },\n                specType:: hidden.core.v1.podSpec,\n              },\n              templateType:: hidden.core.v1.podTemplateSpec,\n            },\n            specType:: hidden.batch.v1.jobSpec,\n          },\n        },\n      },\n    },\n    certificates:: {\n      v1beta1:: {\n        local apiVersion = { apiVersion: 'certificates/v1beta1' },\n        certificateSigningRequestCondition:: {\n          new():: {},\n          // timestamp for the last update to this condition\n          withLastUpdateTime(lastUpdateTime):: self + { lastUpdateTime: lastUpdateTime },\n          // human readable message with details about the request state\n          withMessage(message):: self + { message: message },\n          // brief reason for the request state\n          withReason(reason):: self + { reason: reason },\n          // request approval state, currently Approved or Denied.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        certificateSigningRequestList:: {\n          new(items=''):: self.withItems(items),\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.certificates.v1beta1.certificateSigningRequest,\n          mixin:: {},\n        },\n        // This information is immutable after the request is created. Only the Request and Usages fields can be set on creation, other fields are derived by Kubernetes and cannot be modified by users.\n        certificateSigningRequestSpec:: {\n          new():: {},\n          // Extra information about the requesting user. See user.Info interface for details.\n          withExtra(extra):: self + { extra: extra },\n          // Extra information about the requesting user. See user.Info interface for details.\n          withExtraMixin(extra):: self + { extra+: extra },\n          // Group information about the requesting user. See user.Info interface for details.\n          withGroups(groups):: self + if std.type(groups) == 'array' then { groups: groups } else { groups: [groups] },\n          // Group information about the requesting user. See user.Info interface for details.\n          withGroupsMixin(groups):: self + if std.type(groups) == 'array' then { groups+: groups } else { groups+: [groups] },\n          // Base64-encoded PKCS#10 CSR data\n          withRequest(request):: self + { request: request },\n          // UID information about the requesting user. See user.Info interface for details.\n          withUid(uid):: self + { uid: uid },\n          // allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3\n          // https://tools.ietf.org/html/rfc5280#section-4.2.1.12\n          withUsages(usages):: self + if std.type(usages) == 'array' then { usages: usages } else { usages: [usages] },\n          // allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3\n          // https://tools.ietf.org/html/rfc5280#section-4.2.1.12\n          withUsagesMixin(usages):: self + if std.type(usages) == 'array' then { usages+: usages } else { usages+: [usages] },\n          // Information about the requesting user. See user.Info interface for details.\n          withUsername(username):: self + { username: username },\n          mixin:: {},\n        },\n        certificateSigningRequestStatus:: {\n          new():: {},\n          // If request was approved, the controller will place the issued certificate here.\n          withCertificate(certificate):: self + { certificate: certificate },\n          // Conditions applied to the request, such as approval or denial.\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // Conditions applied to the request, such as approval or denial.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.certificates.v1beta1.certificateSigningRequestCondition,\n          mixin:: {},\n        },\n      },\n    },\n    core:: {\n      intstr:: {\n        local apiVersion = { apiVersion: 'intstr' },\n        // IntOrString is a type that can hold an int32 or a string.  When used in JSON or YAML marshalling and unmarshalling, it produces or consumes the inner type.  This allows you to have, for example, a JSON field that can accept a name or number.\n        intOrString:: {\n          new():: {},\n          mixin:: {},\n        },\n      },\n      resource:: {\n        local apiVersion = { apiVersion: 'resource' },\n        // Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and Int64() accessors.\n        //\n        // The serialization format is:\n        //\n        // <quantity>        ::= <signedNumber><suffix>\n        // (Note that <suffix> may be empty, from the \"\" case in <decimalSI>.)\n        // <digit>           ::= 0 | 1 | ... | 9 <digits>          ::= <digit> | <digit><digits> <number>          ::= <digits> | <digits>.<digits> | <digits>. | .<digits> <sign>            ::= \"+\" | \"-\" <signedNumber>    ::= <number> | <sign><number> <suffix>          ::= <binarySI> | <decimalExponent> | <decimalSI> <binarySI>        ::= Ki | Mi | Gi | Ti | Pi | Ei\n        // (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n        // <decimalSI>       ::= m | \"\" | k | M | G | T | P | E\n        // (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n        // <decimalExponent> ::= \"e\" <signedNumber> | \"E\" <signedNumber>\n        //\n        // No matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n        //\n        // When a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n        //\n        // Before serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n        // a. No precision is lost\n        // b. No fractional digits will be emitted\n        // c. The exponent (or suffix) is as large as possible.\n        // The sign will be omitted unless the number is negative.\n        //\n        // Examples:\n        // 1.5 will be serialized as \"1500m\"\n        // 1.5Gi will be serialized as \"1536Mi\"\n        //\n        // NOTE: We reserve the right to amend this canonical format, perhaps to\n        // allow 1.5 to be canonical.\n        // or after March 2015.\n        //\n        // Note that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n        //\n        // Non-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n        //\n        // This format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.\n        quantity:: {\n          new():: {},\n          mixin:: {},\n        },\n      },\n      v1:: {\n        local apiVersion = { apiVersion: 'v1' },\n        // Affinity is a group of affinity scheduling rules.\n        affinity:: {\n          new():: {},\n          mixin:: {\n            // Describes node affinity scheduling rules for the pod.\n            nodeAffinity:: {\n              local __nodeAffinityMixin(nodeAffinity) = { nodeAffinity+: nodeAffinity },\n              mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n              // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n              withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n              // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n              withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n              preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n              // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n              requiredDuringSchedulingIgnoredDuringExecution:: {\n                local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                // Required. A list of node selector terms. The terms are ORed.\n                withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                // Required. A list of node selector terms. The terms are ORed.\n                withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n              },\n              requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n            },\n            nodeAffinityType:: hidden.core.v1.nodeAffinity,\n            // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n            podAffinity:: {\n              local __podAffinityMixin(podAffinity) = { podAffinity+: podAffinity },\n              mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n              // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n              withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n              // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n              withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n              preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n              // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n              withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n              // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n              withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n              requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n            },\n            podAffinityType:: hidden.core.v1.podAffinity,\n            // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n            podAntiAffinity:: {\n              local __podAntiAffinityMixin(podAntiAffinity) = { podAntiAffinity+: podAntiAffinity },\n              mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n              // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n              withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n              // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n              withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n              preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n              // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n              withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n              // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n              withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n              requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n            },\n            podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n          },\n        },\n        // AttachedVolume describes a volume attached to a node\n        attachedVolume:: {\n          new():: {},\n          // DevicePath represents the device path where the volume should be available\n          withDevicePath(devicePath):: self + { devicePath: devicePath },\n          // Name of the attached volume\n          withName(name):: self + { name: name },\n          mixin:: {},\n        },\n        // Represents a Persistent Disk resource in AWS.\n        //\n        // An AWS EBS disk must exist before mounting to a container. The disk must also be in the same AWS zone as the kubelet. An AWS EBS disk can only be mounted as read/write once. AWS EBS volumes support ownership management and SELinux relabeling.\n        awsElasticBlockStoreVolumeSource:: {\n          new():: {},\n          // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n          withFsType(fsType):: self + { fsType: fsType },\n          // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty).\n          withPartition(partition):: self + { partition: partition },\n          // Specify \"true\" to force and set the ReadOnly property in VolumeMounts to \"true\". If omitted, the default is \"false\". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          // Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n          withVolumeId(volumeId):: self + { volumeID: volumeId },\n          mixin:: {},\n        },\n        // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.\n        azureDiskVolumeSource:: {\n          new():: {},\n          // Host Caching mode: None, Read Only, Read Write.\n          withCachingMode(cachingMode):: self + { cachingMode: cachingMode },\n          // The Name of the data disk in the blob storage\n          withDiskName(diskName):: self + { diskName: diskName },\n          // The URI the data disk in the blob storage\n          withDiskUri(diskUri):: self + { diskURI: diskUri },\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n          withFsType(fsType):: self + { fsType: fsType },\n          // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          mixin:: {},\n        },\n        // AzureFile represents an Azure File Service mount on the host and bind mount to the pod.\n        azureFilePersistentVolumeSource:: {\n          new():: {},\n          // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          // the name of secret that contains Azure Storage Account Name and Key\n          withSecretName(secretName):: self + { secretName: secretName },\n          // the namespace of the secret that contains Azure Storage Account Name and Key default is the same as the Pod\n          withSecretNamespace(secretNamespace):: self + { secretNamespace: secretNamespace },\n          // Share Name\n          withShareName(shareName):: self + { shareName: shareName },\n          mixin:: {},\n        },\n        // AzureFile represents an Azure File Service mount on the host and bind mount to the pod.\n        azureFileVolumeSource:: {\n          new():: {},\n          // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          // the name of secret that contains Azure Storage Account Name and Key\n          withSecretName(secretName):: self + { secretName: secretName },\n          // Share Name\n          withShareName(shareName):: self + { shareName: shareName },\n          mixin:: {},\n        },\n        // Adds and removes POSIX capabilities from running containers.\n        capabilities:: {\n          new():: {},\n          // Added capabilities\n          withAdd(add):: self + if std.type(add) == 'array' then { add: add } else { add: [add] },\n          // Added capabilities\n          withAddMixin(add):: self + if std.type(add) == 'array' then { add+: add } else { add+: [add] },\n          // Removed capabilities\n          withDrop(drop):: self + if std.type(drop) == 'array' then { drop: drop } else { drop: [drop] },\n          // Removed capabilities\n          withDropMixin(drop):: self + if std.type(drop) == 'array' then { drop+: drop } else { drop+: [drop] },\n          mixin:: {},\n        },\n        // Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.\n        cephFsPersistentVolumeSource:: {\n          new():: {},\n          // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n          withMonitors(monitors):: self + if std.type(monitors) == 'array' then { monitors: monitors } else { monitors: [monitors] },\n          // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n          withMonitorsMixin(monitors):: self + if std.type(monitors) == 'array' then { monitors+: monitors } else { monitors+: [monitors] },\n          // Optional: Used as the mounted root, rather than the full Ceph tree, default is /\n          withPath(path):: self + { path: path },\n          // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n          withSecretFile(secretFile):: self + { secretFile: secretFile },\n          // Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n          withUser(user):: self + { user: user },\n          mixin:: {\n            // Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n            secretRef:: {\n              local __secretRefMixin(secretRef) = { secretRef+: secretRef },\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // Name is unique within a namespace to reference a secret resource.\n              withName(name):: self + __secretRefMixin({ name: name }),\n              // Namespace defines the space within which the secret name must be unique.\n              withNamespace(namespace):: self + __secretRefMixin({ namespace: namespace }),\n            },\n            secretRefType:: hidden.core.v1.secretReference,\n          },\n        },\n        // Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.\n        cephFsVolumeSource:: {\n          new():: {},\n          // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n          withMonitors(monitors):: self + if std.type(monitors) == 'array' then { monitors: monitors } else { monitors: [monitors] },\n          // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n          withMonitorsMixin(monitors):: self + if std.type(monitors) == 'array' then { monitors+: monitors } else { monitors+: [monitors] },\n          // Optional: Used as the mounted root, rather than the full Ceph tree, default is /\n          withPath(path):: self + { path: path },\n          // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n          withSecretFile(secretFile):: self + { secretFile: secretFile },\n          // Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n          withUser(user):: self + { user: user },\n          mixin:: {\n            // Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n            secretRef:: {\n              local __secretRefMixin(secretRef) = { secretRef+: secretRef },\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __secretRefMixin({ name: name }),\n            },\n            secretRefType:: hidden.core.v1.localObjectReference,\n          },\n        },\n        // Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.\n        cinderPersistentVolumeSource:: {\n          new():: {},\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n          withFsType(fsType):: self + { fsType: fsType },\n          // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          // volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n          withVolumeId(volumeId):: self + { volumeID: volumeId },\n          mixin:: {\n            // Optional: points to a secret object containing parameters used to connect to OpenStack.\n            secretRef:: {\n              local __secretRefMixin(secretRef) = { secretRef+: secretRef },\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // Name is unique within a namespace to reference a secret resource.\n              withName(name):: self + __secretRefMixin({ name: name }),\n              // Namespace defines the space within which the secret name must be unique.\n              withNamespace(namespace):: self + __secretRefMixin({ namespace: namespace }),\n            },\n            secretRefType:: hidden.core.v1.secretReference,\n          },\n        },\n        // Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.\n        cinderVolumeSource:: {\n          new():: {},\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n          withFsType(fsType):: self + { fsType: fsType },\n          // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          // volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n          withVolumeId(volumeId):: self + { volumeID: volumeId },\n          mixin:: {\n            // Optional: points to a secret object containing parameters used to connect to OpenStack.\n            secretRef:: {\n              local __secretRefMixin(secretRef) = { secretRef+: secretRef },\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __secretRefMixin({ name: name }),\n            },\n            secretRefType:: hidden.core.v1.localObjectReference,\n          },\n        },\n        // ClientIPConfig represents the configurations of Client IP based session affinity.\n        clientIpConfig:: {\n          new():: {},\n          // timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be >0 && <=86400(for 1 day) if ServiceAffinity == \"ClientIP\". Default value is 10800(for 3 hours).\n          withTimeoutSeconds(timeoutSeconds):: self + { timeoutSeconds: timeoutSeconds },\n          mixin:: {},\n        },\n        // Information about the condition of a component.\n        componentCondition:: {\n          new():: {},\n          // Condition error code for a component. For example, a health check error code.\n          withErrorParam(errorParam):: self + { \"error\": errorParam },\n          // Message about the condition for a component. For example, information about a health check.\n          withMessage(message):: self + { message: message },\n          // Status of the condition for a component. Valid values for \"Healthy\": \"True\", \"False\", or \"Unknown\".\n          withStatus(status):: self + { status: status },\n          // Type of condition for a component. Valid value: \"Healthy\"\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // ComponentStatus (and ComponentStatusList) holds the cluster validation info.\n        componentStatus:: {\n          new():: {},\n          // List of component conditions observed\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // List of component conditions observed\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.core.v1.componentCondition,\n          mixin:: {\n            // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n            metadata:: {\n              local __metadataMixin(metadata) = { metadata+: metadata },\n              mixinInstance(metadata):: __metadataMixin(metadata),\n              // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n              withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n              // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n              withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n              // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n              withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n              // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n              withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n              // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n              withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n              // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n              //\n              // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n              //\n              // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n              withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n              // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n              //\n              // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n              initializers:: {\n                local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                mixinInstance(initializers):: __initializersMixin(initializers),\n                // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                pendingType:: hidden.meta.v1.initializer,\n              },\n              initializersType:: hidden.meta.v1.initializers,\n              // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n              withLabels(labels):: self + __metadataMixin({ labels: labels }),\n              // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n              withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n              // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n              withName(name):: self + __metadataMixin({ name: name }),\n              // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n              //\n              // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n              withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n              // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n              withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n              // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n              withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n              ownerReferencesType:: hidden.meta.v1.ownerReference,\n            },\n            metadataType:: hidden.meta.v1.objectMeta,\n          },\n        },\n        // Status of all the conditions for the component as a list of ComponentStatus objects.\n        componentStatusList:: {\n          new():: {},\n          // List of ComponentStatus objects.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // List of ComponentStatus objects.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.componentStatus,\n          mixin:: {},\n        },\n        // ConfigMapEnvSource selects a ConfigMap to populate the environment variables with.\n        //\n        // The contents of the target ConfigMap's Data field will represent the key-value pairs as environment variables.\n        configMapEnvSource:: {\n          new():: {},\n          // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n          withName(name):: self + { name: name },\n          // Specify whether the ConfigMap must be defined\n          withOptional(optional):: self + { optional: optional },\n          mixin:: {},\n        },\n        // Selects a key from a ConfigMap.\n        configMapKeySelector:: {\n          new():: {},\n          // The key to select.\n          withKey(key):: self + { key: key },\n          // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n          withName(name):: self + { name: name },\n          // Specify whether the ConfigMap or it's key must be defined\n          withOptional(optional):: self + { optional: optional },\n          mixin:: {},\n        },\n        // ConfigMapList is a resource containing a list of ConfigMap objects.\n        configMapList:: {\n          new(items=''):: self.withItems(items),\n          // Items is the list of ConfigMaps.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is the list of ConfigMaps.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.configMap,\n          mixin:: {},\n        },\n        // ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node.\n        configMapNodeConfigSource:: {\n          new():: {},\n          // KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure This field is required in all cases.\n          withKubeletConfigKey(kubeletConfigKey):: self + { kubeletConfigKey: kubeletConfigKey },\n          // Name is the metadata.name of the referenced ConfigMap. This field is required in all cases.\n          withName(name):: self + { name: name },\n          // Namespace is the metadata.namespace of the referenced ConfigMap. This field is required in all cases.\n          withNamespace(namespace):: self + { namespace: namespace },\n          // ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\n          withResourceVersion(resourceVersion):: self + { resourceVersion: resourceVersion },\n          // UID is the metadata.UID of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\n          withUid(uid):: self + { uid: uid },\n          mixin:: {},\n        },\n        // Adapts a ConfigMap into a projected volume.\n        //\n        // The contents of the target ConfigMap's Data field will be presented in a projected volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. Note that this is identical to a configmap volume source without the default mode.\n        configMapProjection:: {\n          new():: {},\n          // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.keyToPath,\n          // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n          withName(name):: self + { name: name },\n          // Specify whether the ConfigMap or it's keys must be defined\n          withOptional(optional):: self + { optional: optional },\n          mixin:: {},\n        },\n        // Adapts a ConfigMap into a volume.\n        //\n        // The contents of the target ConfigMap's Data field will be presented in a volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. ConfigMap volumes support ownership management and SELinux relabeling.\n        configMapVolumeSource:: {\n          new():: {},\n          // Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n          withDefaultMode(defaultMode):: self + { defaultMode: defaultMode },\n          // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.keyToPath,\n          // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n          withName(name):: self + { name: name },\n          // Specify whether the ConfigMap or it's keys must be defined\n          withOptional(optional):: self + { optional: optional },\n          mixin:: {},\n        },\n        // A single application container that you want to run within a pod.\n        container:: {\n          new(name='', image=''):: self.withImage(image).withName(name),\n          // Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\n          withArgs(args):: self + if std.type(args) == 'array' then { args: args } else { args: [args] },\n          // Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\n          withArgsMixin(args):: self + if std.type(args) == 'array' then { args+: args } else { args+: [args] },\n          // Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\n          withCommand(command):: self + if std.type(command) == 'array' then { command: command } else { command: [command] },\n          // Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\n          withCommandMixin(command):: self + if std.type(command) == 'array' then { command+: command } else { command+: [command] },\n          // List of environment variables to set in the container. Cannot be updated.\n          withEnv(env):: self + if std.type(env) == 'array' then { env: env } else { env: [env] },\n          // List of environment variables to set in the container. Cannot be updated.\n          withEnvMixin(env):: self + if std.type(env) == 'array' then { env+: env } else { env+: [env] },\n          envType:: hidden.core.v1.envVar,\n          // List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.\n          withEnvFrom(envFrom):: self + if std.type(envFrom) == 'array' then { envFrom: envFrom } else { envFrom: [envFrom] },\n          // List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.\n          withEnvFromMixin(envFrom):: self + if std.type(envFrom) == 'array' then { envFrom+: envFrom } else { envFrom+: [envFrom] },\n          envFromType:: hidden.core.v1.envFromSource,\n          // Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images This field is optional to allow higher level config management to default or override container images in workload controllers like Deployments and StatefulSets.\n          withImage(image):: self + { image: image },\n          // Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images\n          withImagePullPolicy(imagePullPolicy):: self + { imagePullPolicy: imagePullPolicy },\n          // Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated.\n          withName(name):: self + { name: name },\n          // List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default \"0.0.0.0\" address inside a container will be accessible from the network. Cannot be updated.\n          withPorts(ports):: self + if std.type(ports) == 'array' then { ports: ports } else { ports: [ports] },\n          // List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default \"0.0.0.0\" address inside a container will be accessible from the network. Cannot be updated.\n          withPortsMixin(ports):: self + if std.type(ports) == 'array' then { ports+: ports } else { ports+: [ports] },\n          portsType:: hidden.core.v1.containerPort,\n          // Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false.\n          withStdin(stdin):: self + { stdin: stdin },\n          // Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false\n          withStdinOnce(stdinOnce):: self + { stdinOnce: stdinOnce },\n          // Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.\n          withTerminationMessagePath(terminationMessagePath):: self + { terminationMessagePath: terminationMessagePath },\n          // Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.\n          withTerminationMessagePolicy(terminationMessagePolicy):: self + { terminationMessagePolicy: terminationMessagePolicy },\n          // Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false.\n          withTty(tty):: self + { tty: tty },\n          // volumeDevices is the list of block devices to be used by the container. This is an alpha feature and may change in the future.\n          withVolumeDevices(volumeDevices):: self + if std.type(volumeDevices) == 'array' then { volumeDevices: volumeDevices } else { volumeDevices: [volumeDevices] },\n          // volumeDevices is the list of block devices to be used by the container. This is an alpha feature and may change in the future.\n          withVolumeDevicesMixin(volumeDevices):: self + if std.type(volumeDevices) == 'array' then { volumeDevices+: volumeDevices } else { volumeDevices+: [volumeDevices] },\n          volumeDevicesType:: hidden.core.v1.volumeDevice,\n          // Pod volumes to mount into the container's filesystem. Cannot be updated.\n          withVolumeMounts(volumeMounts):: self + if std.type(volumeMounts) == 'array' then { volumeMounts: volumeMounts } else { volumeMounts: [volumeMounts] },\n          // Pod volumes to mount into the container's filesystem. Cannot be updated.\n          withVolumeMountsMixin(volumeMounts):: self + if std.type(volumeMounts) == 'array' then { volumeMounts+: volumeMounts } else { volumeMounts+: [volumeMounts] },\n          volumeMountsType:: hidden.core.v1.volumeMount,\n          // Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image. Cannot be updated.\n          withWorkingDir(workingDir):: self + { workingDir: workingDir },\n          mixin:: {\n            // Actions that the management system should take in response to container lifecycle events. Cannot be updated.\n            lifecycle:: {\n              local __lifecycleMixin(lifecycle) = { lifecycle+: lifecycle },\n              mixinInstance(lifecycle):: __lifecycleMixin(lifecycle),\n              // PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks\n              postStart:: {\n                local __postStartMixin(postStart) = __lifecycleMixin({ postStart+: postStart }),\n                mixinInstance(postStart):: __postStartMixin(postStart),\n                // One and only one of the following should be specified. Exec specifies the action to take.\n                exec:: {\n                  local __execMixin(exec) = __postStartMixin({ exec+: exec }),\n                  mixinInstance(exec):: __execMixin(exec),\n                  // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                  withCommand(command):: self + if std.type(command) == 'array' then __execMixin({ command: command }) else __execMixin({ command: [command] }),\n                  // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                  withCommandMixin(command):: self + if std.type(command) == 'array' then __execMixin({ command+: command }) else __execMixin({ command+: [command] }),\n                },\n                execType:: hidden.core.v1.execAction,\n                // HTTPGet specifies the http request to perform.\n                httpGet:: {\n                  local __httpGetMixin(httpGet) = __postStartMixin({ httpGet+: httpGet }),\n                  mixinInstance(httpGet):: __httpGetMixin(httpGet),\n                  // Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.\n                  withHost(host):: self + __httpGetMixin({ host: host }),\n                  // Custom headers to set in the request. HTTP allows repeated headers.\n                  withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == 'array' then __httpGetMixin({ httpHeaders: httpHeaders }) else __httpGetMixin({ httpHeaders: [httpHeaders] }),\n                  // Custom headers to set in the request. HTTP allows repeated headers.\n                  withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == 'array' then __httpGetMixin({ httpHeaders+: httpHeaders }) else __httpGetMixin({ httpHeaders+: [httpHeaders] }),\n                  httpHeadersType:: hidden.core.v1.httpHeader,\n                  // Path to access on the HTTP server.\n                  withPath(path):: self + __httpGetMixin({ path: path }),\n                  // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                  withPort(port):: self + __httpGetMixin({ port: port }),\n                  // Scheme to use for connecting to the host. Defaults to HTTP.\n                  withScheme(scheme):: self + __httpGetMixin({ scheme: scheme }),\n                },\n                httpGetType:: hidden.core.v1.httpGetAction,\n                // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported\n                tcpSocket:: {\n                  local __tcpSocketMixin(tcpSocket) = __postStartMixin({ tcpSocket+: tcpSocket }),\n                  mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket),\n                  // Optional: Host name to connect to, defaults to the pod IP.\n                  withHost(host):: self + __tcpSocketMixin({ host: host }),\n                  // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                  withPort(port):: self + __tcpSocketMixin({ port: port }),\n                },\n                tcpSocketType:: hidden.core.v1.tcpSocketAction,\n              },\n              postStartType:: hidden.core.v1.handler,\n              // PreStop is called immediately before a container is terminated. The container is terminated after the handler completes. The reason for termination is passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks\n              preStop:: {\n                local __preStopMixin(preStop) = __lifecycleMixin({ preStop+: preStop }),\n                mixinInstance(preStop):: __preStopMixin(preStop),\n                // One and only one of the following should be specified. Exec specifies the action to take.\n                exec:: {\n                  local __execMixin(exec) = __preStopMixin({ exec+: exec }),\n                  mixinInstance(exec):: __execMixin(exec),\n                  // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                  withCommand(command):: self + if std.type(command) == 'array' then __execMixin({ command: command }) else __execMixin({ command: [command] }),\n                  // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                  withCommandMixin(command):: self + if std.type(command) == 'array' then __execMixin({ command+: command }) else __execMixin({ command+: [command] }),\n                },\n                execType:: hidden.core.v1.execAction,\n                // HTTPGet specifies the http request to perform.\n                httpGet:: {\n                  local __httpGetMixin(httpGet) = __preStopMixin({ httpGet+: httpGet }),\n                  mixinInstance(httpGet):: __httpGetMixin(httpGet),\n                  // Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.\n                  withHost(host):: self + __httpGetMixin({ host: host }),\n                  // Custom headers to set in the request. HTTP allows repeated headers.\n                  withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == 'array' then __httpGetMixin({ httpHeaders: httpHeaders }) else __httpGetMixin({ httpHeaders: [httpHeaders] }),\n                  // Custom headers to set in the request. HTTP allows repeated headers.\n                  withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == 'array' then __httpGetMixin({ httpHeaders+: httpHeaders }) else __httpGetMixin({ httpHeaders+: [httpHeaders] }),\n                  httpHeadersType:: hidden.core.v1.httpHeader,\n                  // Path to access on the HTTP server.\n                  withPath(path):: self + __httpGetMixin({ path: path }),\n                  // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                  withPort(port):: self + __httpGetMixin({ port: port }),\n                  // Scheme to use for connecting to the host. Defaults to HTTP.\n                  withScheme(scheme):: self + __httpGetMixin({ scheme: scheme }),\n                },\n                httpGetType:: hidden.core.v1.httpGetAction,\n                // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported\n                tcpSocket:: {\n                  local __tcpSocketMixin(tcpSocket) = __preStopMixin({ tcpSocket+: tcpSocket }),\n                  mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket),\n                  // Optional: Host name to connect to, defaults to the pod IP.\n                  withHost(host):: self + __tcpSocketMixin({ host: host }),\n                  // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                  withPort(port):: self + __tcpSocketMixin({ port: port }),\n                },\n                tcpSocketType:: hidden.core.v1.tcpSocketAction,\n              },\n              preStopType:: hidden.core.v1.handler,\n            },\n            lifecycleType:: hidden.core.v1.lifecycle,\n            // Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\n            livenessProbe:: {\n              local __livenessProbeMixin(livenessProbe) = { livenessProbe+: livenessProbe },\n              mixinInstance(livenessProbe):: __livenessProbeMixin(livenessProbe),\n              // One and only one of the following should be specified. Exec specifies the action to take.\n              exec:: {\n                local __execMixin(exec) = __livenessProbeMixin({ exec+: exec }),\n                mixinInstance(exec):: __execMixin(exec),\n                // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                withCommand(command):: self + if std.type(command) == 'array' then __execMixin({ command: command }) else __execMixin({ command: [command] }),\n                // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                withCommandMixin(command):: self + if std.type(command) == 'array' then __execMixin({ command+: command }) else __execMixin({ command+: [command] }),\n              },\n              execType:: hidden.core.v1.execAction,\n              // Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.\n              withFailureThreshold(failureThreshold):: self + __livenessProbeMixin({ failureThreshold: failureThreshold }),\n              // HTTPGet specifies the http request to perform.\n              httpGet:: {\n                local __httpGetMixin(httpGet) = __livenessProbeMixin({ httpGet+: httpGet }),\n                mixinInstance(httpGet):: __httpGetMixin(httpGet),\n                // Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.\n                withHost(host):: self + __httpGetMixin({ host: host }),\n                // Custom headers to set in the request. HTTP allows repeated headers.\n                withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == 'array' then __httpGetMixin({ httpHeaders: httpHeaders }) else __httpGetMixin({ httpHeaders: [httpHeaders] }),\n                // Custom headers to set in the request. HTTP allows repeated headers.\n                withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == 'array' then __httpGetMixin({ httpHeaders+: httpHeaders }) else __httpGetMixin({ httpHeaders+: [httpHeaders] }),\n                httpHeadersType:: hidden.core.v1.httpHeader,\n                // Path to access on the HTTP server.\n                withPath(path):: self + __httpGetMixin({ path: path }),\n                // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                withPort(port):: self + __httpGetMixin({ port: port }),\n                // Scheme to use for connecting to the host. Defaults to HTTP.\n                withScheme(scheme):: self + __httpGetMixin({ scheme: scheme }),\n              },\n              httpGetType:: hidden.core.v1.httpGetAction,\n              // Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\n              withInitialDelaySeconds(initialDelaySeconds):: self + __livenessProbeMixin({ initialDelaySeconds: initialDelaySeconds }),\n              // How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.\n              withPeriodSeconds(periodSeconds):: self + __livenessProbeMixin({ periodSeconds: periodSeconds }),\n              // Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.\n              withSuccessThreshold(successThreshold):: self + __livenessProbeMixin({ successThreshold: successThreshold }),\n              // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported\n              tcpSocket:: {\n                local __tcpSocketMixin(tcpSocket) = __livenessProbeMixin({ tcpSocket+: tcpSocket }),\n                mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket),\n                // Optional: Host name to connect to, defaults to the pod IP.\n                withHost(host):: self + __tcpSocketMixin({ host: host }),\n                // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                withPort(port):: self + __tcpSocketMixin({ port: port }),\n              },\n              tcpSocketType:: hidden.core.v1.tcpSocketAction,\n              // Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\n              withTimeoutSeconds(timeoutSeconds):: self + __livenessProbeMixin({ timeoutSeconds: timeoutSeconds }),\n            },\n            livenessProbeType:: hidden.core.v1.probe,\n            // Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\n            readinessProbe:: {\n              local __readinessProbeMixin(readinessProbe) = { readinessProbe+: readinessProbe },\n              mixinInstance(readinessProbe):: __readinessProbeMixin(readinessProbe),\n              // One and only one of the following should be specified. Exec specifies the action to take.\n              exec:: {\n                local __execMixin(exec) = __readinessProbeMixin({ exec+: exec }),\n                mixinInstance(exec):: __execMixin(exec),\n                // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                withCommand(command):: self + if std.type(command) == 'array' then __execMixin({ command: command }) else __execMixin({ command: [command] }),\n                // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                withCommandMixin(command):: self + if std.type(command) == 'array' then __execMixin({ command+: command }) else __execMixin({ command+: [command] }),\n              },\n              execType:: hidden.core.v1.execAction,\n              // Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.\n              withFailureThreshold(failureThreshold):: self + __readinessProbeMixin({ failureThreshold: failureThreshold }),\n              // HTTPGet specifies the http request to perform.\n              httpGet:: {\n                local __httpGetMixin(httpGet) = __readinessProbeMixin({ httpGet+: httpGet }),\n                mixinInstance(httpGet):: __httpGetMixin(httpGet),\n                // Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.\n                withHost(host):: self + __httpGetMixin({ host: host }),\n                // Custom headers to set in the request. HTTP allows repeated headers.\n                withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == 'array' then __httpGetMixin({ httpHeaders: httpHeaders }) else __httpGetMixin({ httpHeaders: [httpHeaders] }),\n                // Custom headers to set in the request. HTTP allows repeated headers.\n                withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == 'array' then __httpGetMixin({ httpHeaders+: httpHeaders }) else __httpGetMixin({ httpHeaders+: [httpHeaders] }),\n                httpHeadersType:: hidden.core.v1.httpHeader,\n                // Path to access on the HTTP server.\n                withPath(path):: self + __httpGetMixin({ path: path }),\n                // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                withPort(port):: self + __httpGetMixin({ port: port }),\n                // Scheme to use for connecting to the host. Defaults to HTTP.\n                withScheme(scheme):: self + __httpGetMixin({ scheme: scheme }),\n              },\n              httpGetType:: hidden.core.v1.httpGetAction,\n              // Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\n              withInitialDelaySeconds(initialDelaySeconds):: self + __readinessProbeMixin({ initialDelaySeconds: initialDelaySeconds }),\n              // How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.\n              withPeriodSeconds(periodSeconds):: self + __readinessProbeMixin({ periodSeconds: periodSeconds }),\n              // Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.\n              withSuccessThreshold(successThreshold):: self + __readinessProbeMixin({ successThreshold: successThreshold }),\n              // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported\n              tcpSocket:: {\n                local __tcpSocketMixin(tcpSocket) = __readinessProbeMixin({ tcpSocket+: tcpSocket }),\n                mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket),\n                // Optional: Host name to connect to, defaults to the pod IP.\n                withHost(host):: self + __tcpSocketMixin({ host: host }),\n                // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                withPort(port):: self + __tcpSocketMixin({ port: port }),\n              },\n              tcpSocketType:: hidden.core.v1.tcpSocketAction,\n              // Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\n              withTimeoutSeconds(timeoutSeconds):: self + __readinessProbeMixin({ timeoutSeconds: timeoutSeconds }),\n            },\n            readinessProbeType:: hidden.core.v1.probe,\n            // Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources\n            resources:: {\n              local __resourcesMixin(resources) = { resources+: resources },\n              mixinInstance(resources):: __resourcesMixin(resources),\n              // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withLimits(limits):: self + __resourcesMixin({ limits: limits }),\n              // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withLimitsMixin(limits):: self + __resourcesMixin({ limits+: limits }),\n              // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withRequests(requests):: self + __resourcesMixin({ requests: requests }),\n              // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withRequestsMixin(requests):: self + __resourcesMixin({ requests+: requests }),\n            },\n            resourcesType:: hidden.core.v1.resourceRequirements,\n            // Security options the pod should run with. More info: https://kubernetes.io/docs/concepts/policy/security-context/ More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/\n            securityContext:: {\n              local __securityContextMixin(securityContext) = { securityContext+: securityContext },\n              mixinInstance(securityContext):: __securityContextMixin(securityContext),\n              // AllowPrivilegeEscalation controls whether a process can gain more privileges than its parent process. This bool directly controls if the no_new_privs flag will be set on the container process. AllowPrivilegeEscalation is true always when the container is: 1) run as Privileged 2) has CAP_SYS_ADMIN\n              withAllowPrivilegeEscalation(allowPrivilegeEscalation):: self + __securityContextMixin({ allowPrivilegeEscalation: allowPrivilegeEscalation }),\n              // The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime.\n              capabilities:: {\n                local __capabilitiesMixin(capabilities) = __securityContextMixin({ capabilities+: capabilities }),\n                mixinInstance(capabilities):: __capabilitiesMixin(capabilities),\n                // Added capabilities\n                withAdd(add):: self + if std.type(add) == 'array' then __capabilitiesMixin({ add: add }) else __capabilitiesMixin({ add: [add] }),\n                // Added capabilities\n                withAddMixin(add):: self + if std.type(add) == 'array' then __capabilitiesMixin({ add+: add }) else __capabilitiesMixin({ add+: [add] }),\n                // Removed capabilities\n                withDrop(drop):: self + if std.type(drop) == 'array' then __capabilitiesMixin({ drop: drop }) else __capabilitiesMixin({ drop: [drop] }),\n                // Removed capabilities\n                withDropMixin(drop):: self + if std.type(drop) == 'array' then __capabilitiesMixin({ drop+: drop }) else __capabilitiesMixin({ drop+: [drop] }),\n              },\n              capabilitiesType:: hidden.core.v1.capabilities,\n              // Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false.\n              withPrivileged(privileged):: self + __securityContextMixin({ privileged: privileged }),\n              // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n              withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n              // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n              withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n              // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n              withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n              // The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n              seLinuxOptions:: {\n                local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                // Level is SELinux level label that applies to the container.\n                withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                // Role is a SELinux role label that applies to the container.\n                withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                // Type is a SELinux type label that applies to the container.\n                withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                // User is a SELinux user label that applies to the container.\n                withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n              },\n              seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n            },\n            securityContextType:: hidden.core.v1.securityContext,\n          },\n        },\n        // Describe a container image\n        containerImage:: {\n          new():: {},\n          // Names by which this image is known. e.g. [\"k8s.gcr.io/hyperkube:v1.0.7\", \"dockerhub.io/google_containers/hyperkube:v1.0.7\"]\n          withNames(names):: self + if std.type(names) == 'array' then { names: names } else { names: [names] },\n          // Names by which this image is known. e.g. [\"k8s.gcr.io/hyperkube:v1.0.7\", \"dockerhub.io/google_containers/hyperkube:v1.0.7\"]\n          withNamesMixin(names):: self + if std.type(names) == 'array' then { names+: names } else { names+: [names] },\n          // The size of the image in bytes.\n          withSizeBytes(sizeBytes):: self + { sizeBytes: sizeBytes },\n          mixin:: {},\n        },\n        // ContainerPort represents a network port in a single container.\n        containerPort:: {\n          new(containerPort=''):: self.withContainerPort(containerPort),\n          newNamed(containerPort='', name=''):: self.withContainerPort(containerPort).withName(name),\n          // Number of port to expose on the pod's IP address. This must be a valid port number, 0 < x < 65536.\n          withContainerPort(containerPort):: self + { containerPort: containerPort },\n          // What host IP to bind the external port to.\n          withHostIp(hostIp):: self + { hostIP: hostIp },\n          // Number of port to expose on the host. If specified, this must be a valid port number, 0 < x < 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this.\n          withHostPort(hostPort):: self + { hostPort: hostPort },\n          // If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.\n          withName(name):: self + { name: name },\n          // Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".\n          withProtocol(protocol):: self + { protocol: protocol },\n          mixin:: {},\n        },\n        // ContainerState holds a possible state of container. Only one of its members may be specified. If none of them is specified, the default one is ContainerStateWaiting.\n        containerState:: {\n          new():: {},\n          mixin:: {\n            // Details about a running container\n            running:: {\n              local __runningMixin(running) = { running+: running },\n              mixinInstance(running):: __runningMixin(running),\n              // Time at which the container was last (re-)started\n              withStartedAt(startedAt):: self + __runningMixin({ startedAt: startedAt }),\n            },\n            runningType:: hidden.core.v1.containerStateRunning,\n            // Details about a terminated container\n            terminated:: {\n              local __terminatedMixin(terminated) = { terminated+: terminated },\n              mixinInstance(terminated):: __terminatedMixin(terminated),\n              // Container's ID in the format 'docker://<container_id>'\n              withContainerId(containerId):: self + __terminatedMixin({ containerID: containerId }),\n              // Exit status from the last termination of the container\n              withExitCode(exitCode):: self + __terminatedMixin({ exitCode: exitCode }),\n              // Time at which the container last terminated\n              withFinishedAt(finishedAt):: self + __terminatedMixin({ finishedAt: finishedAt }),\n              // Message regarding the last termination of the container\n              withMessage(message):: self + __terminatedMixin({ message: message }),\n              // (brief) reason from the last termination of the container\n              withReason(reason):: self + __terminatedMixin({ reason: reason }),\n              // Signal from the last termination of the container\n              withSignal(signal):: self + __terminatedMixin({ signal: signal }),\n              // Time at which previous execution of the container started\n              withStartedAt(startedAt):: self + __terminatedMixin({ startedAt: startedAt }),\n            },\n            terminatedType:: hidden.core.v1.containerStateTerminated,\n            // Details about a waiting container\n            waiting:: {\n              local __waitingMixin(waiting) = { waiting+: waiting },\n              mixinInstance(waiting):: __waitingMixin(waiting),\n              // Message regarding why the container is not yet running.\n              withMessage(message):: self + __waitingMixin({ message: message }),\n              // (brief) reason the container is not yet running.\n              withReason(reason):: self + __waitingMixin({ reason: reason }),\n            },\n            waitingType:: hidden.core.v1.containerStateWaiting,\n          },\n        },\n        // ContainerStateRunning is a running state of a container.\n        containerStateRunning:: {\n          new():: {},\n          // Time at which the container was last (re-)started\n          withStartedAt(startedAt):: self + { startedAt: startedAt },\n          mixin:: {},\n        },\n        // ContainerStateTerminated is a terminated state of a container.\n        containerStateTerminated:: {\n          new():: {},\n          // Container's ID in the format 'docker://<container_id>'\n          withContainerId(containerId):: self + { containerID: containerId },\n          // Exit status from the last termination of the container\n          withExitCode(exitCode):: self + { exitCode: exitCode },\n          // Time at which the container last terminated\n          withFinishedAt(finishedAt):: self + { finishedAt: finishedAt },\n          // Message regarding the last termination of the container\n          withMessage(message):: self + { message: message },\n          // (brief) reason from the last termination of the container\n          withReason(reason):: self + { reason: reason },\n          // Signal from the last termination of the container\n          withSignal(signal):: self + { signal: signal },\n          // Time at which previous execution of the container started\n          withStartedAt(startedAt):: self + { startedAt: startedAt },\n          mixin:: {},\n        },\n        // ContainerStateWaiting is a waiting state of a container.\n        containerStateWaiting:: {\n          new():: {},\n          // Message regarding why the container is not yet running.\n          withMessage(message):: self + { message: message },\n          // (brief) reason the container is not yet running.\n          withReason(reason):: self + { reason: reason },\n          mixin:: {},\n        },\n        // ContainerStatus contains details for the current status of this container.\n        containerStatus:: {\n          new():: {},\n          // Container's ID in the format 'docker://<container_id>'.\n          withContainerId(containerId):: self + { containerID: containerId },\n          // The image the container is running. More info: https://kubernetes.io/docs/concepts/containers/images\n          withImage(image):: self + { image: image },\n          // ImageID of the container's image.\n          withImageId(imageId):: self + { imageID: imageId },\n          // This must be a DNS_LABEL. Each container in a pod must have a unique name. Cannot be updated.\n          withName(name):: self + { name: name },\n          // Specifies whether the container has passed its readiness probe.\n          withReady(ready):: self + { ready: ready },\n          // The number of times the container has been restarted, currently based on the number of dead containers that have not yet been removed. Note that this is calculated from dead containers. But those containers are subject to garbage collection. This value will get capped at 5 by GC.\n          withRestartCount(restartCount):: self + { restartCount: restartCount },\n          mixin:: {\n            // Details about the container's last termination condition.\n            lastState:: {\n              local __lastStateMixin(lastState) = { lastState+: lastState },\n              mixinInstance(lastState):: __lastStateMixin(lastState),\n              // Details about a running container\n              running:: {\n                local __runningMixin(running) = __lastStateMixin({ running+: running }),\n                mixinInstance(running):: __runningMixin(running),\n                // Time at which the container was last (re-)started\n                withStartedAt(startedAt):: self + __runningMixin({ startedAt: startedAt }),\n              },\n              runningType:: hidden.core.v1.containerStateRunning,\n              // Details about a terminated container\n              terminated:: {\n                local __terminatedMixin(terminated) = __lastStateMixin({ terminated+: terminated }),\n                mixinInstance(terminated):: __terminatedMixin(terminated),\n                // Container's ID in the format 'docker://<container_id>'\n                withContainerId(containerId):: self + __terminatedMixin({ containerID: containerId }),\n                // Exit status from the last termination of the container\n                withExitCode(exitCode):: self + __terminatedMixin({ exitCode: exitCode }),\n                // Time at which the container last terminated\n                withFinishedAt(finishedAt):: self + __terminatedMixin({ finishedAt: finishedAt }),\n                // Message regarding the last termination of the container\n                withMessage(message):: self + __terminatedMixin({ message: message }),\n                // (brief) reason from the last termination of the container\n                withReason(reason):: self + __terminatedMixin({ reason: reason }),\n                // Signal from the last termination of the container\n                withSignal(signal):: self + __terminatedMixin({ signal: signal }),\n                // Time at which previous execution of the container started\n                withStartedAt(startedAt):: self + __terminatedMixin({ startedAt: startedAt }),\n              },\n              terminatedType:: hidden.core.v1.containerStateTerminated,\n              // Details about a waiting container\n              waiting:: {\n                local __waitingMixin(waiting) = __lastStateMixin({ waiting+: waiting }),\n                mixinInstance(waiting):: __waitingMixin(waiting),\n                // Message regarding why the container is not yet running.\n                withMessage(message):: self + __waitingMixin({ message: message }),\n                // (brief) reason the container is not yet running.\n                withReason(reason):: self + __waitingMixin({ reason: reason }),\n              },\n              waitingType:: hidden.core.v1.containerStateWaiting,\n            },\n            lastStateType:: hidden.core.v1.containerState,\n            // Details about the container's current condition.\n            state:: {\n              local __stateMixin(state) = { state+: state },\n              mixinInstance(state):: __stateMixin(state),\n              // Details about a running container\n              running:: {\n                local __runningMixin(running) = __stateMixin({ running+: running }),\n                mixinInstance(running):: __runningMixin(running),\n                // Time at which the container was last (re-)started\n                withStartedAt(startedAt):: self + __runningMixin({ startedAt: startedAt }),\n              },\n              runningType:: hidden.core.v1.containerStateRunning,\n              // Details about a terminated container\n              terminated:: {\n                local __terminatedMixin(terminated) = __stateMixin({ terminated+: terminated }),\n                mixinInstance(terminated):: __terminatedMixin(terminated),\n                // Container's ID in the format 'docker://<container_id>'\n                withContainerId(containerId):: self + __terminatedMixin({ containerID: containerId }),\n                // Exit status from the last termination of the container\n                withExitCode(exitCode):: self + __terminatedMixin({ exitCode: exitCode }),\n                // Time at which the container last terminated\n                withFinishedAt(finishedAt):: self + __terminatedMixin({ finishedAt: finishedAt }),\n                // Message regarding the last termination of the container\n                withMessage(message):: self + __terminatedMixin({ message: message }),\n                // (brief) reason from the last termination of the container\n                withReason(reason):: self + __terminatedMixin({ reason: reason }),\n                // Signal from the last termination of the container\n                withSignal(signal):: self + __terminatedMixin({ signal: signal }),\n                // Time at which previous execution of the container started\n                withStartedAt(startedAt):: self + __terminatedMixin({ startedAt: startedAt }),\n              },\n              terminatedType:: hidden.core.v1.containerStateTerminated,\n              // Details about a waiting container\n              waiting:: {\n                local __waitingMixin(waiting) = __stateMixin({ waiting+: waiting }),\n                mixinInstance(waiting):: __waitingMixin(waiting),\n                // Message regarding why the container is not yet running.\n                withMessage(message):: self + __waitingMixin({ message: message }),\n                // (brief) reason the container is not yet running.\n                withReason(reason):: self + __waitingMixin({ reason: reason }),\n              },\n              waitingType:: hidden.core.v1.containerStateWaiting,\n            },\n            stateType:: hidden.core.v1.containerState,\n          },\n        },\n        // Represents storage that is managed by an external CSI volume driver (Beta feature)\n        csiPersistentVolumeSource:: {\n          new():: {},\n          // Driver is the name of the driver to use for this volume. Required.\n          withDriver(driver):: self + { driver: driver },\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\".\n          withFsType(fsType):: self + { fsType: fsType },\n          // Optional: The value to pass to ControllerPublishVolumeRequest. Defaults to false (read/write).\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          // Attributes of the volume to publish.\n          withVolumeAttributes(volumeAttributes):: self + { volumeAttributes: volumeAttributes },\n          // Attributes of the volume to publish.\n          withVolumeAttributesMixin(volumeAttributes):: self + { volumeAttributes+: volumeAttributes },\n          // VolumeHandle is the unique volume name returned by the CSI volume plugin’s CreateVolume to refer to the volume on all subsequent calls. Required.\n          withVolumeHandle(volumeHandle):: self + { volumeHandle: volumeHandle },\n          mixin:: {\n            // ControllerPublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerPublishVolume and ControllerUnpublishVolume calls. This field is optional, and  may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.\n            controllerPublishSecretRef:: {\n              local __controllerPublishSecretRefMixin(controllerPublishSecretRef) = { controllerPublishSecretRef+: controllerPublishSecretRef },\n              mixinInstance(controllerPublishSecretRef):: __controllerPublishSecretRefMixin(controllerPublishSecretRef),\n              // Name is unique within a namespace to reference a secret resource.\n              withName(name):: self + __controllerPublishSecretRefMixin({ name: name }),\n              // Namespace defines the space within which the secret name must be unique.\n              withNamespace(namespace):: self + __controllerPublishSecretRefMixin({ namespace: namespace }),\n            },\n            controllerPublishSecretRefType:: hidden.core.v1.secretReference,\n            // NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and  may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.\n            nodePublishSecretRef:: {\n              local __nodePublishSecretRefMixin(nodePublishSecretRef) = { nodePublishSecretRef+: nodePublishSecretRef },\n              mixinInstance(nodePublishSecretRef):: __nodePublishSecretRefMixin(nodePublishSecretRef),\n              // Name is unique within a namespace to reference a secret resource.\n              withName(name):: self + __nodePublishSecretRefMixin({ name: name }),\n              // Namespace defines the space within which the secret name must be unique.\n              withNamespace(namespace):: self + __nodePublishSecretRefMixin({ namespace: namespace }),\n            },\n            nodePublishSecretRefType:: hidden.core.v1.secretReference,\n            // NodeStageSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodeStageVolume and NodeStageVolume and NodeUnstageVolume calls. This field is optional, and  may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.\n            nodeStageSecretRef:: {\n              local __nodeStageSecretRefMixin(nodeStageSecretRef) = { nodeStageSecretRef+: nodeStageSecretRef },\n              mixinInstance(nodeStageSecretRef):: __nodeStageSecretRefMixin(nodeStageSecretRef),\n              // Name is unique within a namespace to reference a secret resource.\n              withName(name):: self + __nodeStageSecretRefMixin({ name: name }),\n              // Namespace defines the space within which the secret name must be unique.\n              withNamespace(namespace):: self + __nodeStageSecretRefMixin({ namespace: namespace }),\n            },\n            nodeStageSecretRefType:: hidden.core.v1.secretReference,\n          },\n        },\n        // DaemonEndpoint contains information about a single Daemon endpoint.\n        daemonEndpoint:: {\n          new():: {},\n          // Port number of the given endpoint.\n          withPort(port):: self + { Port: port },\n          mixin:: {},\n        },\n        // Represents downward API info for projecting into a projected volume. Note that this is identical to a downwardAPI volume source without the default mode.\n        downwardApiProjection:: {\n          new():: {},\n          // Items is a list of DownwardAPIVolume file\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is a list of DownwardAPIVolume file\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.downwardApiVolumeFile,\n          mixin:: {},\n        },\n        // DownwardAPIVolumeFile represents information to create the file containing the pod field\n        downwardApiVolumeFile:: {\n          new():: {},\n          // Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n          withMode(mode):: self + { mode: mode },\n          // Required: Path is  the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'\n          withPath(path):: self + { path: path },\n          mixin:: {\n            // Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.\n            fieldRef:: {\n              local __fieldRefMixin(fieldRef) = { fieldRef+: fieldRef },\n              mixinInstance(fieldRef):: __fieldRefMixin(fieldRef),\n              // Path of the field to select in the specified API version.\n              withFieldPath(fieldPath):: self + __fieldRefMixin({ fieldPath: fieldPath }),\n            },\n            fieldRefType:: hidden.core.v1.objectFieldSelector,\n            // Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.\n            resourceFieldRef:: {\n              local __resourceFieldRefMixin(resourceFieldRef) = { resourceFieldRef+: resourceFieldRef },\n              mixinInstance(resourceFieldRef):: __resourceFieldRefMixin(resourceFieldRef),\n              // Container name: required for volumes, optional for env vars\n              withContainerName(containerName):: self + __resourceFieldRefMixin({ containerName: containerName }),\n              // Specifies the output format of the exposed resources, defaults to \"1\"\n              divisor:: {\n                local __divisorMixin(divisor) = __resourceFieldRefMixin({ divisor+: divisor }),\n                mixinInstance(divisor):: __divisorMixin(divisor),\n              },\n              divisorType:: hidden.core.resource.quantity,\n              // Required: resource to select\n              withResource(resource):: self + __resourceFieldRefMixin({ resource: resource }),\n            },\n            resourceFieldRefType:: hidden.core.v1.resourceFieldSelector,\n          },\n        },\n        // DownwardAPIVolumeSource represents a volume containing downward API info. Downward API volumes support ownership management and SELinux relabeling.\n        downwardApiVolumeSource:: {\n          new():: {},\n          // Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n          withDefaultMode(defaultMode):: self + { defaultMode: defaultMode },\n          // Items is a list of downward API volume file\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is a list of downward API volume file\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.downwardApiVolumeFile,\n          mixin:: {},\n        },\n        // Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.\n        emptyDirVolumeSource:: {\n          new():: {},\n          // What type of storage medium should back this directory. The default is \"\" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir\n          withMedium(medium):: self + { medium: medium },\n          mixin:: {\n            // Total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir\n            sizeLimit:: {\n              local __sizeLimitMixin(sizeLimit) = { sizeLimit+: sizeLimit },\n              mixinInstance(sizeLimit):: __sizeLimitMixin(sizeLimit),\n            },\n            sizeLimitType:: hidden.core.resource.quantity,\n          },\n        },\n        // EndpointAddress is a tuple that describes single IP address.\n        endpointAddress:: {\n          new():: {},\n          // The Hostname of this endpoint\n          withHostname(hostname):: self + { hostname: hostname },\n          // The IP of this endpoint. May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16), or link-local multicast ((224.0.0.0/24). IPv6 is also accepted but not fully supported on all platforms. Also, certain kubernetes components, like kube-proxy, are not IPv6 ready.\n          withIp(ip):: self + { ip: ip },\n          // Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node.\n          withNodeName(nodeName):: self + { nodeName: nodeName },\n          mixin:: {\n            // Reference to object providing the endpoint.\n            targetRef:: {\n              local __targetRefMixin(targetRef) = { targetRef+: targetRef },\n              mixinInstance(targetRef):: __targetRefMixin(targetRef),\n              // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\n              withFieldPath(fieldPath):: self + __targetRefMixin({ fieldPath: fieldPath }),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __targetRefMixin({ name: name }),\n              // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n              withNamespace(namespace):: self + __targetRefMixin({ namespace: namespace }),\n              // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n              withResourceVersion(resourceVersion):: self + __targetRefMixin({ resourceVersion: resourceVersion }),\n              // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n              withUid(uid):: self + __targetRefMixin({ uid: uid }),\n            },\n            targetRefType:: hidden.core.v1.objectReference,\n          },\n        },\n        // EndpointPort is a tuple that describes a single port.\n        endpointPort:: {\n          new():: {},\n          // The name of this port (corresponds to ServicePort.Name). Must be a DNS_LABEL. Optional only if one port is defined.\n          withName(name):: self + { name: name },\n          // The port number of the endpoint.\n          withPort(port):: self + { port: port },\n          // The IP protocol for this port. Must be UDP or TCP. Default is TCP.\n          withProtocol(protocol):: self + { protocol: protocol },\n          mixin:: {},\n        },\n        // EndpointSubset is a group of addresses with a common set of ports. The expanded set of endpoints is the Cartesian product of Addresses x Ports. For example, given:\n        // {\n        // Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n        // Ports:     [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n        // }\n        // The resulting set of endpoints can be viewed as:\n        // a: [ 10.10.1.1:8675, 10.10.2.2:8675 ],\n        // b: [ 10.10.1.1:309, 10.10.2.2:309 ]\n        endpointSubset:: {\n          new():: {},\n          // IP addresses which offer the related ports that are marked as ready. These endpoints should be considered safe for load balancers and clients to utilize.\n          withAddresses(addresses):: self + if std.type(addresses) == 'array' then { addresses: addresses } else { addresses: [addresses] },\n          // IP addresses which offer the related ports that are marked as ready. These endpoints should be considered safe for load balancers and clients to utilize.\n          withAddressesMixin(addresses):: self + if std.type(addresses) == 'array' then { addresses+: addresses } else { addresses+: [addresses] },\n          addressesType:: hidden.core.v1.endpointAddress,\n          // IP addresses which offer the related ports but are not currently marked as ready because they have not yet finished starting, have recently failed a readiness check, or have recently failed a liveness check.\n          withNotReadyAddresses(notReadyAddresses):: self + if std.type(notReadyAddresses) == 'array' then { notReadyAddresses: notReadyAddresses } else { notReadyAddresses: [notReadyAddresses] },\n          // IP addresses which offer the related ports but are not currently marked as ready because they have not yet finished starting, have recently failed a readiness check, or have recently failed a liveness check.\n          withNotReadyAddressesMixin(notReadyAddresses):: self + if std.type(notReadyAddresses) == 'array' then { notReadyAddresses+: notReadyAddresses } else { notReadyAddresses+: [notReadyAddresses] },\n          notReadyAddressesType:: hidden.core.v1.endpointAddress,\n          // Port numbers available on the related IP addresses.\n          withPorts(ports):: self + if std.type(ports) == 'array' then { ports: ports } else { ports: [ports] },\n          // Port numbers available on the related IP addresses.\n          withPortsMixin(ports):: self + if std.type(ports) == 'array' then { ports+: ports } else { ports+: [ports] },\n          portsType:: hidden.core.v1.endpointPort,\n          mixin:: {},\n        },\n        // EndpointsList is a list of endpoints.\n        endpointsList:: {\n          new(items=''):: self.withItems(items),\n          // List of endpoints.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // List of endpoints.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.endpoints,\n          mixin:: {},\n        },\n        // EnvFromSource represents the source of a set of ConfigMaps\n        envFromSource:: {\n          new():: {},\n          // An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.\n          withPrefix(prefix):: self + { prefix: prefix },\n          mixin:: {\n            // The ConfigMap to select from\n            configMapRef:: {\n              local __configMapRefMixin(configMapRef) = { configMapRef+: configMapRef },\n              mixinInstance(configMapRef):: __configMapRefMixin(configMapRef),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __configMapRefMixin({ name: name }),\n              // Specify whether the ConfigMap must be defined\n              withOptional(optional):: self + __configMapRefMixin({ optional: optional }),\n            },\n            configMapRefType:: hidden.core.v1.configMapEnvSource,\n            // The Secret to select from\n            secretRef:: {\n              local __secretRefMixin(secretRef) = { secretRef+: secretRef },\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __secretRefMixin({ name: name }),\n              // Specify whether the Secret must be defined\n              withOptional(optional):: self + __secretRefMixin({ optional: optional }),\n            },\n            secretRefType:: hidden.core.v1.secretEnvSource,\n          },\n        },\n        // EnvVar represents an environment variable present in a Container.\n        envVar:: {\n          new(name='', value=''):: self.withName(name).withValue(value),\n          fromSecretRef(name='', secretRefName='', secretRefKey=''):: self.withName(name) + self.mixin.valueFrom.secretKeyRef.withKey(secretRefKey).withName(secretRefName),\n          fromFieldPath(name='', fieldPath=''):: self.withName(name) + self.mixin.valueFrom.fieldRef.withFieldPath(fieldPath),\n          // Name of the environment variable. Must be a C_IDENTIFIER.\n          withName(name):: self + { name: name },\n          // Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to \"\".\n          withValue(value):: self + { value: value },\n          mixin:: {\n            // Source for the environment variable's value. Cannot be used if value is not empty.\n            valueFrom:: {\n              local __valueFromMixin(valueFrom) = { valueFrom+: valueFrom },\n              mixinInstance(valueFrom):: __valueFromMixin(valueFrom),\n              // Selects a key of a ConfigMap.\n              configMapKeyRef:: {\n                local __configMapKeyRefMixin(configMapKeyRef) = __valueFromMixin({ configMapKeyRef+: configMapKeyRef }),\n                mixinInstance(configMapKeyRef):: __configMapKeyRefMixin(configMapKeyRef),\n                // The key to select.\n                withKey(key):: self + __configMapKeyRefMixin({ key: key }),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __configMapKeyRefMixin({ name: name }),\n                // Specify whether the ConfigMap or it's key must be defined\n                withOptional(optional):: self + __configMapKeyRefMixin({ optional: optional }),\n              },\n              configMapKeyRefType:: hidden.core.v1.configMapKeySelector,\n              // Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP.\n              fieldRef:: {\n                local __fieldRefMixin(fieldRef) = __valueFromMixin({ fieldRef+: fieldRef }),\n                mixinInstance(fieldRef):: __fieldRefMixin(fieldRef),\n                // Path of the field to select in the specified API version.\n                withFieldPath(fieldPath):: self + __fieldRefMixin({ fieldPath: fieldPath }),\n              },\n              fieldRefType:: hidden.core.v1.objectFieldSelector,\n              // Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.\n              resourceFieldRef:: {\n                local __resourceFieldRefMixin(resourceFieldRef) = __valueFromMixin({ resourceFieldRef+: resourceFieldRef }),\n                mixinInstance(resourceFieldRef):: __resourceFieldRefMixin(resourceFieldRef),\n                // Container name: required for volumes, optional for env vars\n                withContainerName(containerName):: self + __resourceFieldRefMixin({ containerName: containerName }),\n                // Specifies the output format of the exposed resources, defaults to \"1\"\n                divisor:: {\n                  local __divisorMixin(divisor) = __resourceFieldRefMixin({ divisor+: divisor }),\n                  mixinInstance(divisor):: __divisorMixin(divisor),\n                },\n                divisorType:: hidden.core.resource.quantity,\n                // Required: resource to select\n                withResource(resource):: self + __resourceFieldRefMixin({ resource: resource }),\n              },\n              resourceFieldRefType:: hidden.core.v1.resourceFieldSelector,\n              // Selects a key of a secret in the pod's namespace\n              secretKeyRef:: {\n                local __secretKeyRefMixin(secretKeyRef) = __valueFromMixin({ secretKeyRef+: secretKeyRef }),\n                mixinInstance(secretKeyRef):: __secretKeyRefMixin(secretKeyRef),\n                // The key of the secret to select from.  Must be a valid secret key.\n                withKey(key):: self + __secretKeyRefMixin({ key: key }),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretKeyRefMixin({ name: name }),\n                // Specify whether the Secret or it's key must be defined\n                withOptional(optional):: self + __secretKeyRefMixin({ optional: optional }),\n              },\n              secretKeyRefType:: hidden.core.v1.secretKeySelector,\n            },\n            valueFromType:: hidden.core.v1.envVarSource,\n          },\n        },\n        // EnvVarSource represents a source for the value of an EnvVar.\n        envVarSource:: {\n          new():: {},\n          mixin:: {\n            // Selects a key of a ConfigMap.\n            configMapKeyRef:: {\n              local __configMapKeyRefMixin(configMapKeyRef) = { configMapKeyRef+: configMapKeyRef },\n              mixinInstance(configMapKeyRef):: __configMapKeyRefMixin(configMapKeyRef),\n              // The key to select.\n              withKey(key):: self + __configMapKeyRefMixin({ key: key }),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __configMapKeyRefMixin({ name: name }),\n              // Specify whether the ConfigMap or it's key must be defined\n              withOptional(optional):: self + __configMapKeyRefMixin({ optional: optional }),\n            },\n            configMapKeyRefType:: hidden.core.v1.configMapKeySelector,\n            // Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP.\n            fieldRef:: {\n              local __fieldRefMixin(fieldRef) = { fieldRef+: fieldRef },\n              mixinInstance(fieldRef):: __fieldRefMixin(fieldRef),\n              // Path of the field to select in the specified API version.\n              withFieldPath(fieldPath):: self + __fieldRefMixin({ fieldPath: fieldPath }),\n            },\n            fieldRefType:: hidden.core.v1.objectFieldSelector,\n            // Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.\n            resourceFieldRef:: {\n              local __resourceFieldRefMixin(resourceFieldRef) = { resourceFieldRef+: resourceFieldRef },\n              mixinInstance(resourceFieldRef):: __resourceFieldRefMixin(resourceFieldRef),\n              // Container name: required for volumes, optional for env vars\n              withContainerName(containerName):: self + __resourceFieldRefMixin({ containerName: containerName }),\n              // Specifies the output format of the exposed resources, defaults to \"1\"\n              divisor:: {\n                local __divisorMixin(divisor) = __resourceFieldRefMixin({ divisor+: divisor }),\n                mixinInstance(divisor):: __divisorMixin(divisor),\n              },\n              divisorType:: hidden.core.resource.quantity,\n              // Required: resource to select\n              withResource(resource):: self + __resourceFieldRefMixin({ resource: resource }),\n            },\n            resourceFieldRefType:: hidden.core.v1.resourceFieldSelector,\n            // Selects a key of a secret in the pod's namespace\n            secretKeyRef:: {\n              local __secretKeyRefMixin(secretKeyRef) = { secretKeyRef+: secretKeyRef },\n              mixinInstance(secretKeyRef):: __secretKeyRefMixin(secretKeyRef),\n              // The key of the secret to select from.  Must be a valid secret key.\n              withKey(key):: self + __secretKeyRefMixin({ key: key }),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __secretKeyRefMixin({ name: name }),\n              // Specify whether the Secret or it's key must be defined\n              withOptional(optional):: self + __secretKeyRefMixin({ optional: optional }),\n            },\n            secretKeyRefType:: hidden.core.v1.secretKeySelector,\n          },\n        },\n        // EventList is a list of events.\n        eventList:: {\n          new(items=''):: self.withItems(items),\n          // List of events\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // List of events\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.event,\n          mixin:: {},\n        },\n        // EventSeries contain information on series of events, i.e. thing that was/is happening continuously for some time.\n        eventSeries:: {\n          new():: {},\n          // Number of occurrences in this series up to the last heartbeat time\n          withCount(count):: self + { count: count },\n          // Time of the last occurrence observed\n          withLastObservedTime(lastObservedTime):: self + { lastObservedTime: lastObservedTime },\n          // State of this Series: Ongoing or Finished\n          withState(state):: self + { state: state },\n          mixin:: {},\n        },\n        // EventSource contains information for an event.\n        eventSource:: {\n          new():: {},\n          // Component from which the event is generated.\n          withComponent(component):: self + { component: component },\n          // Node name on which the event is generated.\n          withHost(host):: self + { host: host },\n          mixin:: {},\n        },\n        // ExecAction describes a \"run in container\" action.\n        execAction:: {\n          new():: {},\n          // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n          withCommand(command):: self + if std.type(command) == 'array' then { command: command } else { command: [command] },\n          // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n          withCommandMixin(command):: self + if std.type(command) == 'array' then { command+: command } else { command+: [command] },\n          mixin:: {},\n        },\n        // Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.\n        fcVolumeSource:: {\n          new():: {},\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n          withFsType(fsType):: self + { fsType: fsType },\n          // Optional: FC target lun number\n          withLun(lun):: self + { lun: lun },\n          // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          // Optional: FC target worldwide names (WWNs)\n          withTargetWwns(targetWwns):: self + if std.type(targetWwns) == 'array' then { targetWWNs: targetWwns } else { targetWWNs: [targetWwns] },\n          // Optional: FC target worldwide names (WWNs)\n          withTargetWwnsMixin(targetWwns):: self + if std.type(targetWwns) == 'array' then { targetWWNs+: targetWwns } else { targetWWNs+: [targetWwns] },\n          // Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.\n          withWwids(wwids):: self + if std.type(wwids) == 'array' then { wwids: wwids } else { wwids: [wwids] },\n          // Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.\n          withWwidsMixin(wwids):: self + if std.type(wwids) == 'array' then { wwids+: wwids } else { wwids+: [wwids] },\n          mixin:: {},\n        },\n        // FlexPersistentVolumeSource represents a generic persistent volume resource that is provisioned/attached using an exec based plugin.\n        flexPersistentVolumeSource:: {\n          new():: {},\n          // Driver is the name of the driver to use for this volume.\n          withDriver(driver):: self + { driver: driver },\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.\n          withFsType(fsType):: self + { fsType: fsType },\n          // Optional: Extra command options if any.\n          withOptions(options):: self + { options: options },\n          // Optional: Extra command options if any.\n          withOptionsMixin(options):: self + { options+: options },\n          // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          mixin:: {\n            // Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.\n            secretRef:: {\n              local __secretRefMixin(secretRef) = { secretRef+: secretRef },\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // Name is unique within a namespace to reference a secret resource.\n              withName(name):: self + __secretRefMixin({ name: name }),\n              // Namespace defines the space within which the secret name must be unique.\n              withNamespace(namespace):: self + __secretRefMixin({ namespace: namespace }),\n            },\n            secretRefType:: hidden.core.v1.secretReference,\n          },\n        },\n        // FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.\n        flexVolumeSource:: {\n          new():: {},\n          // Driver is the name of the driver to use for this volume.\n          withDriver(driver):: self + { driver: driver },\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.\n          withFsType(fsType):: self + { fsType: fsType },\n          // Optional: Extra command options if any.\n          withOptions(options):: self + { options: options },\n          // Optional: Extra command options if any.\n          withOptionsMixin(options):: self + { options+: options },\n          // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          mixin:: {\n            // Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.\n            secretRef:: {\n              local __secretRefMixin(secretRef) = { secretRef+: secretRef },\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __secretRefMixin({ name: name }),\n            },\n            secretRefType:: hidden.core.v1.localObjectReference,\n          },\n        },\n        // Represents a Flocker volume mounted by the Flocker agent. One and only one of datasetName and datasetUUID should be set. Flocker volumes do not support ownership management or SELinux relabeling.\n        flockerVolumeSource:: {\n          new():: {},\n          // Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated\n          withDatasetName(datasetName):: self + { datasetName: datasetName },\n          // UUID of the dataset. This is unique identifier of a Flocker dataset\n          withDatasetUuid(datasetUuid):: self + { datasetUUID: datasetUuid },\n          mixin:: {},\n        },\n        // Represents a Persistent Disk resource in Google Compute Engine.\n        //\n        // A GCE PD must exist before mounting to a container. The disk must also be in the same GCE project and zone as the kubelet. A GCE PD can only be mounted as read/write once or read-only many times. GCE PDs support ownership management and SELinux relabeling.\n        gcePersistentDiskVolumeSource:: {\n          new():: {},\n          // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n          withFsType(fsType):: self + { fsType: fsType },\n          // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n          withPartition(partition):: self + { partition: partition },\n          // Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n          withPdName(pdName):: self + { pdName: pdName },\n          // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          mixin:: {},\n        },\n        // Represents a volume that is populated with the contents of a git repository. Git repo volumes do not support ownership management. Git repo volumes support SELinux relabeling.\n        //\n        // DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container.\n        gitRepoVolumeSource:: {\n          new():: {},\n          // Target directory name. Must not contain or start with '..'.  If '.' is supplied, the volume directory will be the git repository.  Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name.\n          withDirectory(directory):: self + { directory: directory },\n          // Repository URL\n          withRepository(repository):: self + { repository: repository },\n          // Commit hash for the specified revision.\n          withRevision(revision):: self + { revision: revision },\n          mixin:: {},\n        },\n        // Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.\n        glusterfsVolumeSource:: {\n          new():: {},\n          // EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n          withEndpoints(endpoints):: self + { endpoints: endpoints },\n          // Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n          withPath(path):: self + { path: path },\n          // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          mixin:: {},\n        },\n        // Handler defines a specific action that should be taken\n        handler:: {\n          new():: {},\n          mixin:: {\n            // One and only one of the following should be specified. Exec specifies the action to take.\n            exec:: {\n              local __execMixin(exec) = { exec+: exec },\n              mixinInstance(exec):: __execMixin(exec),\n              // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n              withCommand(command):: self + if std.type(command) == 'array' then __execMixin({ command: command }) else __execMixin({ command: [command] }),\n              // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n              withCommandMixin(command):: self + if std.type(command) == 'array' then __execMixin({ command+: command }) else __execMixin({ command+: [command] }),\n            },\n            execType:: hidden.core.v1.execAction,\n            // HTTPGet specifies the http request to perform.\n            httpGet:: {\n              local __httpGetMixin(httpGet) = { httpGet+: httpGet },\n              mixinInstance(httpGet):: __httpGetMixin(httpGet),\n              // Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.\n              withHost(host):: self + __httpGetMixin({ host: host }),\n              // Custom headers to set in the request. HTTP allows repeated headers.\n              withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == 'array' then __httpGetMixin({ httpHeaders: httpHeaders }) else __httpGetMixin({ httpHeaders: [httpHeaders] }),\n              // Custom headers to set in the request. HTTP allows repeated headers.\n              withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == 'array' then __httpGetMixin({ httpHeaders+: httpHeaders }) else __httpGetMixin({ httpHeaders+: [httpHeaders] }),\n              httpHeadersType:: hidden.core.v1.httpHeader,\n              // Path to access on the HTTP server.\n              withPath(path):: self + __httpGetMixin({ path: path }),\n              // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n              withPort(port):: self + __httpGetMixin({ port: port }),\n              // Scheme to use for connecting to the host. Defaults to HTTP.\n              withScheme(scheme):: self + __httpGetMixin({ scheme: scheme }),\n            },\n            httpGetType:: hidden.core.v1.httpGetAction,\n            // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported\n            tcpSocket:: {\n              local __tcpSocketMixin(tcpSocket) = { tcpSocket+: tcpSocket },\n              mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket),\n              // Optional: Host name to connect to, defaults to the pod IP.\n              withHost(host):: self + __tcpSocketMixin({ host: host }),\n              // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n              withPort(port):: self + __tcpSocketMixin({ port: port }),\n            },\n            tcpSocketType:: hidden.core.v1.tcpSocketAction,\n          },\n        },\n        // HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod's hosts file.\n        hostAlias:: {\n          new():: {},\n          // Hostnames for the above IP address.\n          withHostnames(hostnames):: self + if std.type(hostnames) == 'array' then { hostnames: hostnames } else { hostnames: [hostnames] },\n          // Hostnames for the above IP address.\n          withHostnamesMixin(hostnames):: self + if std.type(hostnames) == 'array' then { hostnames+: hostnames } else { hostnames+: [hostnames] },\n          // IP address of the host file entry.\n          withIp(ip):: self + { ip: ip },\n          mixin:: {},\n        },\n        // Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.\n        hostPathVolumeSource:: {\n          new():: {},\n          // Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\n          withPath(path):: self + { path: path },\n          // Type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // HTTPGetAction describes an action based on HTTP Get requests.\n        httpGetAction:: {\n          new():: {},\n          // Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.\n          withHost(host):: self + { host: host },\n          // Custom headers to set in the request. HTTP allows repeated headers.\n          withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == 'array' then { httpHeaders: httpHeaders } else { httpHeaders: [httpHeaders] },\n          // Custom headers to set in the request. HTTP allows repeated headers.\n          withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == 'array' then { httpHeaders+: httpHeaders } else { httpHeaders+: [httpHeaders] },\n          httpHeadersType:: hidden.core.v1.httpHeader,\n          // Path to access on the HTTP server.\n          withPath(path):: self + { path: path },\n          // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n          withPort(port):: self + { port: port },\n          // Scheme to use for connecting to the host. Defaults to HTTP.\n          withScheme(scheme):: self + { scheme: scheme },\n          mixin:: {},\n        },\n        // HTTPHeader describes a custom header to be used in HTTP probes\n        httpHeader:: {\n          new():: {},\n          // The header field name\n          withName(name):: self + { name: name },\n          // The header field value\n          withValue(value):: self + { value: value },\n          mixin:: {},\n        },\n        // ISCSIPersistentVolumeSource represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.\n        iscsiPersistentVolumeSource:: {\n          new():: {},\n          // whether support iSCSI Discovery CHAP authentication\n          withChapAuthDiscovery(chapAuthDiscovery):: self + { chapAuthDiscovery: chapAuthDiscovery },\n          // whether support iSCSI Session CHAP authentication\n          withChapAuthSession(chapAuthSession):: self + { chapAuthSession: chapAuthSession },\n          // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi\n          withFsType(fsType):: self + { fsType: fsType },\n          // Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface <target portal>:<volume name> will be created for the connection.\n          withInitiatorName(initiatorName):: self + { initiatorName: initiatorName },\n          // Target iSCSI Qualified Name.\n          withIqn(iqn):: self + { iqn: iqn },\n          // iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).\n          withIscsiInterface(iscsiInterface):: self + { iscsiInterface: iscsiInterface },\n          // iSCSI Target Lun number.\n          withLun(lun):: self + { lun: lun },\n          // iSCSI Target Portal List. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n          withPortals(portals):: self + if std.type(portals) == 'array' then { portals: portals } else { portals: [portals] },\n          // iSCSI Target Portal List. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n          withPortalsMixin(portals):: self + if std.type(portals) == 'array' then { portals+: portals } else { portals+: [portals] },\n          // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          // iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n          withTargetPortal(targetPortal):: self + { targetPortal: targetPortal },\n          mixin:: {\n            // CHAP Secret for iSCSI target and initiator authentication\n            secretRef:: {\n              local __secretRefMixin(secretRef) = { secretRef+: secretRef },\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // Name is unique within a namespace to reference a secret resource.\n              withName(name):: self + __secretRefMixin({ name: name }),\n              // Namespace defines the space within which the secret name must be unique.\n              withNamespace(namespace):: self + __secretRefMixin({ namespace: namespace }),\n            },\n            secretRefType:: hidden.core.v1.secretReference,\n          },\n        },\n        // Represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.\n        iscsiVolumeSource:: {\n          new():: {},\n          // whether support iSCSI Discovery CHAP authentication\n          withChapAuthDiscovery(chapAuthDiscovery):: self + { chapAuthDiscovery: chapAuthDiscovery },\n          // whether support iSCSI Session CHAP authentication\n          withChapAuthSession(chapAuthSession):: self + { chapAuthSession: chapAuthSession },\n          // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi\n          withFsType(fsType):: self + { fsType: fsType },\n          // Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface <target portal>:<volume name> will be created for the connection.\n          withInitiatorName(initiatorName):: self + { initiatorName: initiatorName },\n          // Target iSCSI Qualified Name.\n          withIqn(iqn):: self + { iqn: iqn },\n          // iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).\n          withIscsiInterface(iscsiInterface):: self + { iscsiInterface: iscsiInterface },\n          // iSCSI Target Lun number.\n          withLun(lun):: self + { lun: lun },\n          // iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n          withPortals(portals):: self + if std.type(portals) == 'array' then { portals: portals } else { portals: [portals] },\n          // iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n          withPortalsMixin(portals):: self + if std.type(portals) == 'array' then { portals+: portals } else { portals+: [portals] },\n          // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          // iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n          withTargetPortal(targetPortal):: self + { targetPortal: targetPortal },\n          mixin:: {\n            // CHAP Secret for iSCSI target and initiator authentication\n            secretRef:: {\n              local __secretRefMixin(secretRef) = { secretRef+: secretRef },\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __secretRefMixin({ name: name }),\n            },\n            secretRefType:: hidden.core.v1.localObjectReference,\n          },\n        },\n        // Maps a string key to a path within a volume.\n        keyToPath:: {\n          new(key='', path=''):: self.withKey(key).withPath(path),\n          // The key to project.\n          withKey(key):: self + { key: key },\n          // Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n          withMode(mode):: self + { mode: mode },\n          // The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'.\n          withPath(path):: self + { path: path },\n          mixin:: {},\n        },\n        // Lifecycle describes actions that the management system should take in response to container lifecycle events. For the PostStart and PreStop lifecycle handlers, management of the container blocks until the action is complete, unless the container process fails, in which case the handler is aborted.\n        lifecycle:: {\n          new():: {},\n          mixin:: {\n            // PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks\n            postStart:: {\n              local __postStartMixin(postStart) = { postStart+: postStart },\n              mixinInstance(postStart):: __postStartMixin(postStart),\n              // One and only one of the following should be specified. Exec specifies the action to take.\n              exec:: {\n                local __execMixin(exec) = __postStartMixin({ exec+: exec }),\n                mixinInstance(exec):: __execMixin(exec),\n                // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                withCommand(command):: self + if std.type(command) == 'array' then __execMixin({ command: command }) else __execMixin({ command: [command] }),\n                // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                withCommandMixin(command):: self + if std.type(command) == 'array' then __execMixin({ command+: command }) else __execMixin({ command+: [command] }),\n              },\n              execType:: hidden.core.v1.execAction,\n              // HTTPGet specifies the http request to perform.\n              httpGet:: {\n                local __httpGetMixin(httpGet) = __postStartMixin({ httpGet+: httpGet }),\n                mixinInstance(httpGet):: __httpGetMixin(httpGet),\n                // Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.\n                withHost(host):: self + __httpGetMixin({ host: host }),\n                // Custom headers to set in the request. HTTP allows repeated headers.\n                withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == 'array' then __httpGetMixin({ httpHeaders: httpHeaders }) else __httpGetMixin({ httpHeaders: [httpHeaders] }),\n                // Custom headers to set in the request. HTTP allows repeated headers.\n                withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == 'array' then __httpGetMixin({ httpHeaders+: httpHeaders }) else __httpGetMixin({ httpHeaders+: [httpHeaders] }),\n                httpHeadersType:: hidden.core.v1.httpHeader,\n                // Path to access on the HTTP server.\n                withPath(path):: self + __httpGetMixin({ path: path }),\n                // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                withPort(port):: self + __httpGetMixin({ port: port }),\n                // Scheme to use for connecting to the host. Defaults to HTTP.\n                withScheme(scheme):: self + __httpGetMixin({ scheme: scheme }),\n              },\n              httpGetType:: hidden.core.v1.httpGetAction,\n              // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported\n              tcpSocket:: {\n                local __tcpSocketMixin(tcpSocket) = __postStartMixin({ tcpSocket+: tcpSocket }),\n                mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket),\n                // Optional: Host name to connect to, defaults to the pod IP.\n                withHost(host):: self + __tcpSocketMixin({ host: host }),\n                // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                withPort(port):: self + __tcpSocketMixin({ port: port }),\n              },\n              tcpSocketType:: hidden.core.v1.tcpSocketAction,\n            },\n            postStartType:: hidden.core.v1.handler,\n            // PreStop is called immediately before a container is terminated. The container is terminated after the handler completes. The reason for termination is passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks\n            preStop:: {\n              local __preStopMixin(preStop) = { preStop+: preStop },\n              mixinInstance(preStop):: __preStopMixin(preStop),\n              // One and only one of the following should be specified. Exec specifies the action to take.\n              exec:: {\n                local __execMixin(exec) = __preStopMixin({ exec+: exec }),\n                mixinInstance(exec):: __execMixin(exec),\n                // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                withCommand(command):: self + if std.type(command) == 'array' then __execMixin({ command: command }) else __execMixin({ command: [command] }),\n                // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                withCommandMixin(command):: self + if std.type(command) == 'array' then __execMixin({ command+: command }) else __execMixin({ command+: [command] }),\n              },\n              execType:: hidden.core.v1.execAction,\n              // HTTPGet specifies the http request to perform.\n              httpGet:: {\n                local __httpGetMixin(httpGet) = __preStopMixin({ httpGet+: httpGet }),\n                mixinInstance(httpGet):: __httpGetMixin(httpGet),\n                // Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.\n                withHost(host):: self + __httpGetMixin({ host: host }),\n                // Custom headers to set in the request. HTTP allows repeated headers.\n                withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == 'array' then __httpGetMixin({ httpHeaders: httpHeaders }) else __httpGetMixin({ httpHeaders: [httpHeaders] }),\n                // Custom headers to set in the request. HTTP allows repeated headers.\n                withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == 'array' then __httpGetMixin({ httpHeaders+: httpHeaders }) else __httpGetMixin({ httpHeaders+: [httpHeaders] }),\n                httpHeadersType:: hidden.core.v1.httpHeader,\n                // Path to access on the HTTP server.\n                withPath(path):: self + __httpGetMixin({ path: path }),\n                // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                withPort(port):: self + __httpGetMixin({ port: port }),\n                // Scheme to use for connecting to the host. Defaults to HTTP.\n                withScheme(scheme):: self + __httpGetMixin({ scheme: scheme }),\n              },\n              httpGetType:: hidden.core.v1.httpGetAction,\n              // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported\n              tcpSocket:: {\n                local __tcpSocketMixin(tcpSocket) = __preStopMixin({ tcpSocket+: tcpSocket }),\n                mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket),\n                // Optional: Host name to connect to, defaults to the pod IP.\n                withHost(host):: self + __tcpSocketMixin({ host: host }),\n                // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                withPort(port):: self + __tcpSocketMixin({ port: port }),\n              },\n              tcpSocketType:: hidden.core.v1.tcpSocketAction,\n            },\n            preStopType:: hidden.core.v1.handler,\n          },\n        },\n        // LimitRangeItem defines a min/max usage limit for any resource that matches on kind.\n        limitRangeItem:: {\n          new():: {},\n          // Default resource requirement limit value by resource name if resource limit is omitted.\n          withDefault(default):: self + { default: default },\n          // Default resource requirement limit value by resource name if resource limit is omitted.\n          withDefaultMixin(default):: self + { default+: default },\n          // DefaultRequest is the default resource requirement request value by resource name if resource request is omitted.\n          withDefaultRequest(defaultRequest):: self + { defaultRequest: defaultRequest },\n          // DefaultRequest is the default resource requirement request value by resource name if resource request is omitted.\n          withDefaultRequestMixin(defaultRequest):: self + { defaultRequest+: defaultRequest },\n          // Max usage constraints on this kind by resource name.\n          withMax(max):: self + { max: max },\n          // Max usage constraints on this kind by resource name.\n          withMaxMixin(max):: self + { max+: max },\n          // MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource.\n          withMaxLimitRequestRatio(maxLimitRequestRatio):: self + { maxLimitRequestRatio: maxLimitRequestRatio },\n          // MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource.\n          withMaxLimitRequestRatioMixin(maxLimitRequestRatio):: self + { maxLimitRequestRatio+: maxLimitRequestRatio },\n          // Min usage constraints on this kind by resource name.\n          withMin(min):: self + { min: min },\n          // Min usage constraints on this kind by resource name.\n          withMinMixin(min):: self + { min+: min },\n          // Type of resource that this limit applies to.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // LimitRangeList is a list of LimitRange items.\n        limitRangeList:: {\n          new(items=''):: self.withItems(items),\n          // Items is a list of LimitRange objects. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is a list of LimitRange objects. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.limitRange,\n          mixin:: {},\n        },\n        // LimitRangeSpec defines a min/max usage limit for resources that match on kind.\n        limitRangeSpec:: {\n          new():: {},\n          // Limits is the list of LimitRangeItem objects that are enforced.\n          withLimits(limits):: self + if std.type(limits) == 'array' then { limits: limits } else { limits: [limits] },\n          // Limits is the list of LimitRangeItem objects that are enforced.\n          withLimitsMixin(limits):: self + if std.type(limits) == 'array' then { limits+: limits } else { limits+: [limits] },\n          limitsType:: hidden.core.v1.limitRangeItem,\n          mixin:: {},\n        },\n        // LoadBalancerIngress represents the status of a load-balancer ingress point: traffic intended for the service should be sent to an ingress point.\n        loadBalancerIngress:: {\n          new():: {},\n          // Hostname is set for load-balancer ingress points that are DNS based (typically AWS load-balancers)\n          withHostname(hostname):: self + { hostname: hostname },\n          // IP is set for load-balancer ingress points that are IP based (typically GCE or OpenStack load-balancers)\n          withIp(ip):: self + { ip: ip },\n          mixin:: {},\n        },\n        // LoadBalancerStatus represents the status of a load-balancer.\n        loadBalancerStatus:: {\n          new():: {},\n          // Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.\n          withIngress(ingress):: self + if std.type(ingress) == 'array' then { ingress: ingress } else { ingress: [ingress] },\n          // Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.\n          withIngressMixin(ingress):: self + if std.type(ingress) == 'array' then { ingress+: ingress } else { ingress+: [ingress] },\n          ingressType:: hidden.core.v1.loadBalancerIngress,\n          mixin:: {},\n        },\n        // LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.\n        localObjectReference:: {\n          new():: {},\n          // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n          withName(name):: self + { name: name },\n          mixin:: {},\n        },\n        // Local represents directly-attached storage with node affinity (Beta feature)\n        localVolumeSource:: {\n          new():: {},\n          // The full path to the volume on the node. It can be either a directory or block device (disk, partition, ...). Directories can be represented only by PersistentVolume with VolumeMode=Filesystem. Block devices can be represented only by VolumeMode=Block, which also requires the BlockVolume alpha feature gate to be enabled.\n          withPath(path):: self + { path: path },\n          mixin:: {},\n        },\n        // NamespaceList is a list of Namespaces.\n        namespaceList:: {\n          new(items=''):: self.withItems(items),\n          // Items is the list of Namespace objects in the list. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is the list of Namespace objects in the list. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.namespace,\n          mixin:: {},\n        },\n        // NamespaceSpec describes the attributes on a Namespace.\n        namespaceSpec:: {\n          new():: {},\n          // Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/\n          withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then { finalizers: finalizers } else { finalizers: [finalizers] },\n          // Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/\n          withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then { finalizers+: finalizers } else { finalizers+: [finalizers] },\n          mixin:: {},\n        },\n        // NamespaceStatus is information about the current status of a Namespace.\n        namespaceStatus:: {\n          new():: {},\n          // Phase is the current lifecycle phase of the namespace. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/\n          withPhase(phase):: self + { phase: phase },\n          mixin:: {},\n        },\n        // Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling.\n        nfsVolumeSource:: {\n          new():: {},\n          // Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n          withPath(path):: self + { path: path },\n          // ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          // Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n          withServer(server):: self + { server: server },\n          mixin:: {},\n        },\n        // NodeAddress contains information for the node's address.\n        nodeAddress:: {\n          new():: {},\n          // The node address.\n          withAddress(address):: self + { address: address },\n          // Node address type, one of Hostname, ExternalIP or InternalIP.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // Node affinity is a group of node affinity scheduling rules.\n        nodeAffinity:: {\n          new():: {},\n          // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n          withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then { preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution } else { preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] },\n          // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n          withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then { preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution } else { preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] },\n          preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n          mixin:: {\n            // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n            requiredDuringSchedulingIgnoredDuringExecution:: {\n              local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = { requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution },\n              mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n              // Required. A list of node selector terms. The terms are ORed.\n              withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n              // Required. A list of node selector terms. The terms are ORed.\n              withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n              nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n            },\n            requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n          },\n        },\n        // NodeCondition contains condition information for a node.\n        nodeCondition:: {\n          new():: {},\n          // Last time we got an update on a given condition.\n          withLastHeartbeatTime(lastHeartbeatTime):: self + { lastHeartbeatTime: lastHeartbeatTime },\n          // Last time the condition transit from one status to another.\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // Human readable message indicating details about last transition.\n          withMessage(message):: self + { message: message },\n          // (brief) reason for the condition's last transition.\n          withReason(reason):: self + { reason: reason },\n          // Status of the condition, one of True, False, Unknown.\n          withStatus(status):: self + { status: status },\n          // Type of node condition.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil.\n        nodeConfigSource:: {\n          new():: {},\n          mixin:: {\n            // ConfigMap is a reference to a Node's ConfigMap\n            configMap:: {\n              local __configMapMixin(configMap) = { configMap+: configMap },\n              mixinInstance(configMap):: __configMapMixin(configMap),\n              // KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure This field is required in all cases.\n              withKubeletConfigKey(kubeletConfigKey):: self + __configMapMixin({ kubeletConfigKey: kubeletConfigKey }),\n              // Name is the metadata.name of the referenced ConfigMap. This field is required in all cases.\n              withName(name):: self + __configMapMixin({ name: name }),\n              // Namespace is the metadata.namespace of the referenced ConfigMap. This field is required in all cases.\n              withNamespace(namespace):: self + __configMapMixin({ namespace: namespace }),\n              // ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\n              withResourceVersion(resourceVersion):: self + __configMapMixin({ resourceVersion: resourceVersion }),\n              // UID is the metadata.UID of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\n              withUid(uid):: self + __configMapMixin({ uid: uid }),\n            },\n            configMapType:: hidden.core.v1.configMapNodeConfigSource,\n          },\n        },\n        // NodeConfigStatus describes the status of the config assigned by Node.Spec.ConfigSource.\n        nodeConfigStatus:: {\n          new():: {},\n          // Error describes any problems reconciling the Spec.ConfigSource to the Active config. Errors may occur, for example, attempting to checkpoint Spec.ConfigSource to the local Assigned record, attempting to checkpoint the payload associated with Spec.ConfigSource, attempting to load or validate the Assigned config, etc. Errors may occur at different points while syncing config. Earlier errors (e.g. download or checkpointing errors) will not result in a rollback to LastKnownGood, and may resolve across Kubelet retries. Later errors (e.g. loading or validating a checkpointed config) will result in a rollback to LastKnownGood. In the latter case, it is usually possible to resolve the error by fixing the config assigned in Spec.ConfigSource. You can find additional information for debugging by searching the error message in the Kubelet log. Error is a human-readable description of the error state; machines can check whether or not Error is empty, but should not rely on the stability of the Error text across Kubelet versions.\n          withErrorParam(errorParam):: self + { \"error\": errorParam },\n          mixin:: {\n            // Active reports the checkpointed config the node is actively using. Active will represent either the current version of the Assigned config, or the current LastKnownGood config, depending on whether attempting to use the Assigned config results in an error.\n            active:: {\n              local __activeMixin(active) = { active+: active },\n              mixinInstance(active):: __activeMixin(active),\n              // ConfigMap is a reference to a Node's ConfigMap\n              configMap:: {\n                local __configMapMixin(configMap) = __activeMixin({ configMap+: configMap }),\n                mixinInstance(configMap):: __configMapMixin(configMap),\n                // KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure This field is required in all cases.\n                withKubeletConfigKey(kubeletConfigKey):: self + __configMapMixin({ kubeletConfigKey: kubeletConfigKey }),\n                // Name is the metadata.name of the referenced ConfigMap. This field is required in all cases.\n                withName(name):: self + __configMapMixin({ name: name }),\n                // Namespace is the metadata.namespace of the referenced ConfigMap. This field is required in all cases.\n                withNamespace(namespace):: self + __configMapMixin({ namespace: namespace }),\n                // ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\n                withResourceVersion(resourceVersion):: self + __configMapMixin({ resourceVersion: resourceVersion }),\n                // UID is the metadata.UID of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\n                withUid(uid):: self + __configMapMixin({ uid: uid }),\n              },\n              configMapType:: hidden.core.v1.configMapNodeConfigSource,\n            },\n            activeType:: hidden.core.v1.nodeConfigSource,\n            // Assigned reports the checkpointed config the node will try to use. When Node.Spec.ConfigSource is updated, the node checkpoints the associated config payload to local disk, along with a record indicating intended config. The node refers to this record to choose its config checkpoint, and reports this record in Assigned. Assigned only updates in the status after the record has been checkpointed to disk. When the Kubelet is restarted, it tries to make the Assigned config the Active config by loading and validating the checkpointed payload identified by Assigned.\n            assigned:: {\n              local __assignedMixin(assigned) = { assigned+: assigned },\n              mixinInstance(assigned):: __assignedMixin(assigned),\n              // ConfigMap is a reference to a Node's ConfigMap\n              configMap:: {\n                local __configMapMixin(configMap) = __assignedMixin({ configMap+: configMap }),\n                mixinInstance(configMap):: __configMapMixin(configMap),\n                // KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure This field is required in all cases.\n                withKubeletConfigKey(kubeletConfigKey):: self + __configMapMixin({ kubeletConfigKey: kubeletConfigKey }),\n                // Name is the metadata.name of the referenced ConfigMap. This field is required in all cases.\n                withName(name):: self + __configMapMixin({ name: name }),\n                // Namespace is the metadata.namespace of the referenced ConfigMap. This field is required in all cases.\n                withNamespace(namespace):: self + __configMapMixin({ namespace: namespace }),\n                // ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\n                withResourceVersion(resourceVersion):: self + __configMapMixin({ resourceVersion: resourceVersion }),\n                // UID is the metadata.UID of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\n                withUid(uid):: self + __configMapMixin({ uid: uid }),\n              },\n              configMapType:: hidden.core.v1.configMapNodeConfigSource,\n            },\n            assignedType:: hidden.core.v1.nodeConfigSource,\n            // LastKnownGood reports the checkpointed config the node will fall back to when it encounters an error attempting to use the Assigned config. The Assigned config becomes the LastKnownGood config when the node determines that the Assigned config is stable and correct. This is currently implemented as a 10-minute soak period starting when the local record of Assigned config is updated. If the Assigned config is Active at the end of this period, it becomes the LastKnownGood. Note that if Spec.ConfigSource is reset to nil (use local defaults), the LastKnownGood is also immediately reset to nil, because the local default config is always assumed good. You should not make assumptions about the node's method of determining config stability and correctness, as this may change or become configurable in the future.\n            lastKnownGood:: {\n              local __lastKnownGoodMixin(lastKnownGood) = { lastKnownGood+: lastKnownGood },\n              mixinInstance(lastKnownGood):: __lastKnownGoodMixin(lastKnownGood),\n              // ConfigMap is a reference to a Node's ConfigMap\n              configMap:: {\n                local __configMapMixin(configMap) = __lastKnownGoodMixin({ configMap+: configMap }),\n                mixinInstance(configMap):: __configMapMixin(configMap),\n                // KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure This field is required in all cases.\n                withKubeletConfigKey(kubeletConfigKey):: self + __configMapMixin({ kubeletConfigKey: kubeletConfigKey }),\n                // Name is the metadata.name of the referenced ConfigMap. This field is required in all cases.\n                withName(name):: self + __configMapMixin({ name: name }),\n                // Namespace is the metadata.namespace of the referenced ConfigMap. This field is required in all cases.\n                withNamespace(namespace):: self + __configMapMixin({ namespace: namespace }),\n                // ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\n                withResourceVersion(resourceVersion):: self + __configMapMixin({ resourceVersion: resourceVersion }),\n                // UID is the metadata.UID of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\n                withUid(uid):: self + __configMapMixin({ uid: uid }),\n              },\n              configMapType:: hidden.core.v1.configMapNodeConfigSource,\n            },\n            lastKnownGoodType:: hidden.core.v1.nodeConfigSource,\n          },\n        },\n        // NodeDaemonEndpoints lists ports opened by daemons running on the Node.\n        nodeDaemonEndpoints:: {\n          new():: {},\n          mixin:: {\n            // Endpoint on which Kubelet is listening.\n            kubeletEndpoint:: {\n              local __kubeletEndpointMixin(kubeletEndpoint) = { kubeletEndpoint+: kubeletEndpoint },\n              mixinInstance(kubeletEndpoint):: __kubeletEndpointMixin(kubeletEndpoint),\n              // Port number of the given endpoint.\n              withPort(port):: self + __kubeletEndpointMixin({ Port: port }),\n            },\n            kubeletEndpointType:: hidden.core.v1.daemonEndpoint,\n          },\n        },\n        // NodeList is the whole list of all Nodes which have been registered with master.\n        nodeList:: {\n          new(items=''):: self.withItems(items),\n          // List of nodes\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // List of nodes\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.node,\n          mixin:: {},\n        },\n        // A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.\n        nodeSelector:: {\n          new():: {},\n          // Required. A list of node selector terms. The terms are ORed.\n          withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then { nodeSelectorTerms: nodeSelectorTerms } else { nodeSelectorTerms: [nodeSelectorTerms] },\n          // Required. A list of node selector terms. The terms are ORed.\n          withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then { nodeSelectorTerms+: nodeSelectorTerms } else { nodeSelectorTerms+: [nodeSelectorTerms] },\n          nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n          mixin:: {},\n        },\n        // A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.\n        nodeSelectorRequirement:: {\n          new():: {},\n          // The label key that the selector applies to.\n          withKey(key):: self + { key: key },\n          // Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.\n          withOperator(operator):: self + { operator: operator },\n          // An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.\n          withValues(values):: self + if std.type(values) == 'array' then { values: values } else { values: [values] },\n          // An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.\n          withValuesMixin(values):: self + if std.type(values) == 'array' then { values+: values } else { values+: [values] },\n          mixin:: {},\n        },\n        // A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.\n        nodeSelectorTerm:: {\n          new():: {},\n          // A list of node selector requirements by node's labels.\n          withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then { matchExpressions: matchExpressions } else { matchExpressions: [matchExpressions] },\n          // A list of node selector requirements by node's labels.\n          withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then { matchExpressions+: matchExpressions } else { matchExpressions+: [matchExpressions] },\n          matchExpressionsType:: hidden.core.v1.nodeSelectorRequirement,\n          // A list of node selector requirements by node's fields.\n          withMatchFields(matchFields):: self + if std.type(matchFields) == 'array' then { matchFields: matchFields } else { matchFields: [matchFields] },\n          // A list of node selector requirements by node's fields.\n          withMatchFieldsMixin(matchFields):: self + if std.type(matchFields) == 'array' then { matchFields+: matchFields } else { matchFields+: [matchFields] },\n          matchFieldsType:: hidden.core.v1.nodeSelectorRequirement,\n          mixin:: {},\n        },\n        // NodeSpec describes the attributes that a node is created with.\n        nodeSpec:: {\n          new():: {},\n          // Deprecated. Not all kubelets will set this field. Remove field after 1.13. see: https://issues.k8s.io/61966\n          withExternalId(externalId):: self + { externalID: externalId },\n          // PodCIDR represents the pod IP range assigned to the node.\n          withPodCidr(podCidr):: self + { podCIDR: podCidr },\n          // ID of the node assigned by the cloud provider in the format: <ProviderName>://<ProviderSpecificNodeID>\n          withProviderId(providerId):: self + { providerID: providerId },\n          // If specified, the node's taints.\n          withTaints(taints):: self + if std.type(taints) == 'array' then { taints: taints } else { taints: [taints] },\n          // If specified, the node's taints.\n          withTaintsMixin(taints):: self + if std.type(taints) == 'array' then { taints+: taints } else { taints+: [taints] },\n          taintsType:: hidden.core.v1.taint,\n          // Unschedulable controls node schedulability of new pods. By default, node is schedulable. More info: https://kubernetes.io/docs/concepts/nodes/node/#manual-node-administration\n          withUnschedulable(unschedulable):: self + { unschedulable: unschedulable },\n          mixin:: {\n            // If specified, the source to get node configuration from The DynamicKubeletConfig feature gate must be enabled for the Kubelet to use this field\n            configSource:: {\n              local __configSourceMixin(configSource) = { configSource+: configSource },\n              mixinInstance(configSource):: __configSourceMixin(configSource),\n              // ConfigMap is a reference to a Node's ConfigMap\n              configMap:: {\n                local __configMapMixin(configMap) = __configSourceMixin({ configMap+: configMap }),\n                mixinInstance(configMap):: __configMapMixin(configMap),\n                // KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure This field is required in all cases.\n                withKubeletConfigKey(kubeletConfigKey):: self + __configMapMixin({ kubeletConfigKey: kubeletConfigKey }),\n                // Name is the metadata.name of the referenced ConfigMap. This field is required in all cases.\n                withName(name):: self + __configMapMixin({ name: name }),\n                // Namespace is the metadata.namespace of the referenced ConfigMap. This field is required in all cases.\n                withNamespace(namespace):: self + __configMapMixin({ namespace: namespace }),\n                // ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\n                withResourceVersion(resourceVersion):: self + __configMapMixin({ resourceVersion: resourceVersion }),\n                // UID is the metadata.UID of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\n                withUid(uid):: self + __configMapMixin({ uid: uid }),\n              },\n              configMapType:: hidden.core.v1.configMapNodeConfigSource,\n            },\n            configSourceType:: hidden.core.v1.nodeConfigSource,\n          },\n        },\n        // NodeStatus is information about the current status of a node.\n        nodeStatus:: {\n          new():: {},\n          // List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses\n          withAddresses(addresses):: self + if std.type(addresses) == 'array' then { addresses: addresses } else { addresses: [addresses] },\n          // List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses\n          withAddressesMixin(addresses):: self + if std.type(addresses) == 'array' then { addresses+: addresses } else { addresses+: [addresses] },\n          addressesType:: hidden.core.v1.nodeAddress,\n          // Allocatable represents the resources of a node that are available for scheduling. Defaults to Capacity.\n          withAllocatable(allocatable):: self + { allocatable: allocatable },\n          // Allocatable represents the resources of a node that are available for scheduling. Defaults to Capacity.\n          withAllocatableMixin(allocatable):: self + { allocatable+: allocatable },\n          // Capacity represents the total resources of a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity\n          withCapacity(capacity):: self + { capacity: capacity },\n          // Capacity represents the total resources of a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity\n          withCapacityMixin(capacity):: self + { capacity+: capacity },\n          // Conditions is an array of current observed node conditions. More info: https://kubernetes.io/docs/concepts/nodes/node/#condition\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // Conditions is an array of current observed node conditions. More info: https://kubernetes.io/docs/concepts/nodes/node/#condition\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.core.v1.nodeCondition,\n          // List of container images on this node\n          withImages(images):: self + if std.type(images) == 'array' then { images: images } else { images: [images] },\n          // List of container images on this node\n          withImagesMixin(images):: self + if std.type(images) == 'array' then { images+: images } else { images+: [images] },\n          imagesType:: hidden.core.v1.containerImage,\n          // NodePhase is the recently observed lifecycle phase of the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#phase The field is never populated, and now is deprecated.\n          withPhase(phase):: self + { phase: phase },\n          // List of volumes that are attached to the node.\n          withVolumesAttached(volumesAttached):: self + if std.type(volumesAttached) == 'array' then { volumesAttached: volumesAttached } else { volumesAttached: [volumesAttached] },\n          // List of volumes that are attached to the node.\n          withVolumesAttachedMixin(volumesAttached):: self + if std.type(volumesAttached) == 'array' then { volumesAttached+: volumesAttached } else { volumesAttached+: [volumesAttached] },\n          volumesAttachedType:: hidden.core.v1.attachedVolume,\n          // List of attachable volumes in use (mounted) by the node.\n          withVolumesInUse(volumesInUse):: self + if std.type(volumesInUse) == 'array' then { volumesInUse: volumesInUse } else { volumesInUse: [volumesInUse] },\n          // List of attachable volumes in use (mounted) by the node.\n          withVolumesInUseMixin(volumesInUse):: self + if std.type(volumesInUse) == 'array' then { volumesInUse+: volumesInUse } else { volumesInUse+: [volumesInUse] },\n          mixin:: {\n            // Status of the config assigned to the node via the dynamic Kubelet config feature.\n            config:: {\n              local __configMixin(config) = { config+: config },\n              mixinInstance(config):: __configMixin(config),\n              // Active reports the checkpointed config the node is actively using. Active will represent either the current version of the Assigned config, or the current LastKnownGood config, depending on whether attempting to use the Assigned config results in an error.\n              active:: {\n                local __activeMixin(active) = __configMixin({ active+: active }),\n                mixinInstance(active):: __activeMixin(active),\n                // ConfigMap is a reference to a Node's ConfigMap\n                configMap:: {\n                  local __configMapMixin(configMap) = __activeMixin({ configMap+: configMap }),\n                  mixinInstance(configMap):: __configMapMixin(configMap),\n                  // KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure This field is required in all cases.\n                  withKubeletConfigKey(kubeletConfigKey):: self + __configMapMixin({ kubeletConfigKey: kubeletConfigKey }),\n                  // Name is the metadata.name of the referenced ConfigMap. This field is required in all cases.\n                  withName(name):: self + __configMapMixin({ name: name }),\n                  // Namespace is the metadata.namespace of the referenced ConfigMap. This field is required in all cases.\n                  withNamespace(namespace):: self + __configMapMixin({ namespace: namespace }),\n                  // ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\n                  withResourceVersion(resourceVersion):: self + __configMapMixin({ resourceVersion: resourceVersion }),\n                  // UID is the metadata.UID of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\n                  withUid(uid):: self + __configMapMixin({ uid: uid }),\n                },\n                configMapType:: hidden.core.v1.configMapNodeConfigSource,\n              },\n              activeType:: hidden.core.v1.nodeConfigSource,\n              // Assigned reports the checkpointed config the node will try to use. When Node.Spec.ConfigSource is updated, the node checkpoints the associated config payload to local disk, along with a record indicating intended config. The node refers to this record to choose its config checkpoint, and reports this record in Assigned. Assigned only updates in the status after the record has been checkpointed to disk. When the Kubelet is restarted, it tries to make the Assigned config the Active config by loading and validating the checkpointed payload identified by Assigned.\n              assigned:: {\n                local __assignedMixin(assigned) = __configMixin({ assigned+: assigned }),\n                mixinInstance(assigned):: __assignedMixin(assigned),\n                // ConfigMap is a reference to a Node's ConfigMap\n                configMap:: {\n                  local __configMapMixin(configMap) = __assignedMixin({ configMap+: configMap }),\n                  mixinInstance(configMap):: __configMapMixin(configMap),\n                  // KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure This field is required in all cases.\n                  withKubeletConfigKey(kubeletConfigKey):: self + __configMapMixin({ kubeletConfigKey: kubeletConfigKey }),\n                  // Name is the metadata.name of the referenced ConfigMap. This field is required in all cases.\n                  withName(name):: self + __configMapMixin({ name: name }),\n                  // Namespace is the metadata.namespace of the referenced ConfigMap. This field is required in all cases.\n                  withNamespace(namespace):: self + __configMapMixin({ namespace: namespace }),\n                  // ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\n                  withResourceVersion(resourceVersion):: self + __configMapMixin({ resourceVersion: resourceVersion }),\n                  // UID is the metadata.UID of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\n                  withUid(uid):: self + __configMapMixin({ uid: uid }),\n                },\n                configMapType:: hidden.core.v1.configMapNodeConfigSource,\n              },\n              assignedType:: hidden.core.v1.nodeConfigSource,\n              // Error describes any problems reconciling the Spec.ConfigSource to the Active config. Errors may occur, for example, attempting to checkpoint Spec.ConfigSource to the local Assigned record, attempting to checkpoint the payload associated with Spec.ConfigSource, attempting to load or validate the Assigned config, etc. Errors may occur at different points while syncing config. Earlier errors (e.g. download or checkpointing errors) will not result in a rollback to LastKnownGood, and may resolve across Kubelet retries. Later errors (e.g. loading or validating a checkpointed config) will result in a rollback to LastKnownGood. In the latter case, it is usually possible to resolve the error by fixing the config assigned in Spec.ConfigSource. You can find additional information for debugging by searching the error message in the Kubelet log. Error is a human-readable description of the error state; machines can check whether or not Error is empty, but should not rely on the stability of the Error text across Kubelet versions.\n              withErrorParam(errorParam):: self + __configMixin({ \"error\": errorParam }),\n              // LastKnownGood reports the checkpointed config the node will fall back to when it encounters an error attempting to use the Assigned config. The Assigned config becomes the LastKnownGood config when the node determines that the Assigned config is stable and correct. This is currently implemented as a 10-minute soak period starting when the local record of Assigned config is updated. If the Assigned config is Active at the end of this period, it becomes the LastKnownGood. Note that if Spec.ConfigSource is reset to nil (use local defaults), the LastKnownGood is also immediately reset to nil, because the local default config is always assumed good. You should not make assumptions about the node's method of determining config stability and correctness, as this may change or become configurable in the future.\n              lastKnownGood:: {\n                local __lastKnownGoodMixin(lastKnownGood) = __configMixin({ lastKnownGood+: lastKnownGood }),\n                mixinInstance(lastKnownGood):: __lastKnownGoodMixin(lastKnownGood),\n                // ConfigMap is a reference to a Node's ConfigMap\n                configMap:: {\n                  local __configMapMixin(configMap) = __lastKnownGoodMixin({ configMap+: configMap }),\n                  mixinInstance(configMap):: __configMapMixin(configMap),\n                  // KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure This field is required in all cases.\n                  withKubeletConfigKey(kubeletConfigKey):: self + __configMapMixin({ kubeletConfigKey: kubeletConfigKey }),\n                  // Name is the metadata.name of the referenced ConfigMap. This field is required in all cases.\n                  withName(name):: self + __configMapMixin({ name: name }),\n                  // Namespace is the metadata.namespace of the referenced ConfigMap. This field is required in all cases.\n                  withNamespace(namespace):: self + __configMapMixin({ namespace: namespace }),\n                  // ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\n                  withResourceVersion(resourceVersion):: self + __configMapMixin({ resourceVersion: resourceVersion }),\n                  // UID is the metadata.UID of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\n                  withUid(uid):: self + __configMapMixin({ uid: uid }),\n                },\n                configMapType:: hidden.core.v1.configMapNodeConfigSource,\n              },\n              lastKnownGoodType:: hidden.core.v1.nodeConfigSource,\n            },\n            configType:: hidden.core.v1.nodeConfigStatus,\n            // Endpoints of daemons running on the Node.\n            daemonEndpoints:: {\n              local __daemonEndpointsMixin(daemonEndpoints) = { daemonEndpoints+: daemonEndpoints },\n              mixinInstance(daemonEndpoints):: __daemonEndpointsMixin(daemonEndpoints),\n              // Endpoint on which Kubelet is listening.\n              kubeletEndpoint:: {\n                local __kubeletEndpointMixin(kubeletEndpoint) = __daemonEndpointsMixin({ kubeletEndpoint+: kubeletEndpoint }),\n                mixinInstance(kubeletEndpoint):: __kubeletEndpointMixin(kubeletEndpoint),\n                // Port number of the given endpoint.\n                withPort(port):: self + __kubeletEndpointMixin({ Port: port }),\n              },\n              kubeletEndpointType:: hidden.core.v1.daemonEndpoint,\n            },\n            daemonEndpointsType:: hidden.core.v1.nodeDaemonEndpoints,\n            // Set of ids/uuids to uniquely identify the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#info\n            nodeInfo:: {\n              local __nodeInfoMixin(nodeInfo) = { nodeInfo+: nodeInfo },\n              mixinInstance(nodeInfo):: __nodeInfoMixin(nodeInfo),\n              // The Architecture reported by the node\n              withArchitecture(architecture):: self + __nodeInfoMixin({ architecture: architecture }),\n              // Boot ID reported by the node.\n              withBootId(bootId):: self + __nodeInfoMixin({ bootID: bootId }),\n              // ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0).\n              withContainerRuntimeVersion(containerRuntimeVersion):: self + __nodeInfoMixin({ containerRuntimeVersion: containerRuntimeVersion }),\n              // Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64).\n              withKernelVersion(kernelVersion):: self + __nodeInfoMixin({ kernelVersion: kernelVersion }),\n              // KubeProxy Version reported by the node.\n              withKubeProxyVersion(kubeProxyVersion):: self + __nodeInfoMixin({ kubeProxyVersion: kubeProxyVersion }),\n              // Kubelet Version reported by the node.\n              withKubeletVersion(kubeletVersion):: self + __nodeInfoMixin({ kubeletVersion: kubeletVersion }),\n              // MachineID reported by the node. For unique machine identification in the cluster this field is preferred. Learn more from man(5) machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html\n              withMachineId(machineId):: self + __nodeInfoMixin({ machineID: machineId }),\n              // The Operating System reported by the node\n              withOperatingSystem(operatingSystem):: self + __nodeInfoMixin({ operatingSystem: operatingSystem }),\n              // OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)).\n              withOsImage(osImage):: self + __nodeInfoMixin({ osImage: osImage }),\n              // SystemUUID reported by the node. For unique machine identification MachineID is preferred. This field is specific to Red Hat hosts https://access.redhat.com/documentation/en-US/Red_Hat_Subscription_Management/1/html/RHSM/getting-system-uuid.html\n              withSystemUuid(systemUuid):: self + __nodeInfoMixin({ systemUUID: systemUuid }),\n            },\n            nodeInfoType:: hidden.core.v1.nodeSystemInfo,\n          },\n        },\n        // NodeSystemInfo is a set of ids/uuids to uniquely identify the node.\n        nodeSystemInfo:: {\n          new():: {},\n          // The Architecture reported by the node\n          withArchitecture(architecture):: self + { architecture: architecture },\n          // Boot ID reported by the node.\n          withBootId(bootId):: self + { bootID: bootId },\n          // ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0).\n          withContainerRuntimeVersion(containerRuntimeVersion):: self + { containerRuntimeVersion: containerRuntimeVersion },\n          // Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64).\n          withKernelVersion(kernelVersion):: self + { kernelVersion: kernelVersion },\n          // KubeProxy Version reported by the node.\n          withKubeProxyVersion(kubeProxyVersion):: self + { kubeProxyVersion: kubeProxyVersion },\n          // Kubelet Version reported by the node.\n          withKubeletVersion(kubeletVersion):: self + { kubeletVersion: kubeletVersion },\n          // MachineID reported by the node. For unique machine identification in the cluster this field is preferred. Learn more from man(5) machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html\n          withMachineId(machineId):: self + { machineID: machineId },\n          // The Operating System reported by the node\n          withOperatingSystem(operatingSystem):: self + { operatingSystem: operatingSystem },\n          // OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)).\n          withOsImage(osImage):: self + { osImage: osImage },\n          // SystemUUID reported by the node. For unique machine identification MachineID is preferred. This field is specific to Red Hat hosts https://access.redhat.com/documentation/en-US/Red_Hat_Subscription_Management/1/html/RHSM/getting-system-uuid.html\n          withSystemUuid(systemUuid):: self + { systemUUID: systemUuid },\n          mixin:: {},\n        },\n        // ObjectFieldSelector selects an APIVersioned field of an object.\n        objectFieldSelector:: {\n          new():: {},\n          // Path of the field to select in the specified API version.\n          withFieldPath(fieldPath):: self + { fieldPath: fieldPath },\n          mixin:: {},\n        },\n        // ObjectReference contains enough information to let you inspect or modify the referred object.\n        objectReference:: {\n          new():: {},\n          // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\n          withFieldPath(fieldPath):: self + { fieldPath: fieldPath },\n          // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n          withName(name):: self + { name: name },\n          // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n          withNamespace(namespace):: self + { namespace: namespace },\n          // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n          withResourceVersion(resourceVersion):: self + { resourceVersion: resourceVersion },\n          // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n          withUid(uid):: self + { uid: uid },\n          mixin:: {},\n        },\n        // PersistentVolumeClaimCondition contails details about state of pvc\n        persistentVolumeClaimCondition:: {\n          new():: {},\n          // Last time we probed the condition.\n          withLastProbeTime(lastProbeTime):: self + { lastProbeTime: lastProbeTime },\n          // Last time the condition transitioned from one status to another.\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // Human-readable message indicating details about last transition.\n          withMessage(message):: self + { message: message },\n          // Unique, this should be a short, machine understandable string that gives the reason for condition's last transition. If it reports \"ResizeStarted\" that means the underlying persistent volume is being resized.\n          withReason(reason):: self + { reason: reason },\n          withStatus(status):: self + { status: status },\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // PersistentVolumeClaimList is a list of PersistentVolumeClaim items.\n        persistentVolumeClaimList:: {\n          new(items=''):: self.withItems(items),\n          // A list of persistent volume claims. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // A list of persistent volume claims. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.persistentVolumeClaim,\n          mixin:: {},\n        },\n        // PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes\n        persistentVolumeClaimSpec:: {\n          new():: {},\n          // AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1\n          withAccessModes(accessModes):: self + if std.type(accessModes) == 'array' then { accessModes: accessModes } else { accessModes: [accessModes] },\n          // AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1\n          withAccessModesMixin(accessModes):: self + if std.type(accessModes) == 'array' then { accessModes+: accessModes } else { accessModes+: [accessModes] },\n          // Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1\n          withStorageClassName(storageClassName):: self + { storageClassName: storageClassName },\n          // volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec. This is an alpha feature and may change in the future.\n          withVolumeMode(volumeMode):: self + { volumeMode: volumeMode },\n          // VolumeName is the binding reference to the PersistentVolume backing this claim.\n          withVolumeName(volumeName):: self + { volumeName: volumeName },\n          mixin:: {\n            // Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources\n            resources:: {\n              local __resourcesMixin(resources) = { resources+: resources },\n              mixinInstance(resources):: __resourcesMixin(resources),\n              // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withLimits(limits):: self + __resourcesMixin({ limits: limits }),\n              // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withLimitsMixin(limits):: self + __resourcesMixin({ limits+: limits }),\n              // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withRequests(requests):: self + __resourcesMixin({ requests: requests }),\n              // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withRequestsMixin(requests):: self + __resourcesMixin({ requests+: requests }),\n            },\n            resourcesType:: hidden.core.v1.resourceRequirements,\n            // A label query over volumes to consider for binding.\n            selector:: {\n              local __selectorMixin(selector) = { selector+: selector },\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n          },\n        },\n        // PersistentVolumeClaimStatus is the current status of a persistent volume claim.\n        persistentVolumeClaimStatus:: {\n          new():: {},\n          // AccessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1\n          withAccessModes(accessModes):: self + if std.type(accessModes) == 'array' then { accessModes: accessModes } else { accessModes: [accessModes] },\n          // AccessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1\n          withAccessModesMixin(accessModes):: self + if std.type(accessModes) == 'array' then { accessModes+: accessModes } else { accessModes+: [accessModes] },\n          // Represents the actual resources of the underlying volume.\n          withCapacity(capacity):: self + { capacity: capacity },\n          // Represents the actual resources of the underlying volume.\n          withCapacityMixin(capacity):: self + { capacity+: capacity },\n          // Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'.\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.core.v1.persistentVolumeClaimCondition,\n          // Phase represents the current phase of PersistentVolumeClaim.\n          withPhase(phase):: self + { phase: phase },\n          mixin:: {},\n        },\n        // PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. This volume finds the bound PV and mounts that volume for the pod. A PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another type of volume that is owned by someone else (the system).\n        persistentVolumeClaimVolumeSource:: {\n          new():: {},\n          // ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\n          withClaimName(claimName):: self + { claimName: claimName },\n          // Will force the ReadOnly setting in VolumeMounts. Default false.\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          mixin:: {},\n        },\n        // PersistentVolumeList is a list of PersistentVolume items.\n        persistentVolumeList:: {\n          new(items=''):: self.withItems(items),\n          // List of persistent volumes. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // List of persistent volumes. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.persistentVolume,\n          mixin:: {},\n        },\n        // PersistentVolumeSpec is the specification of a persistent volume.\n        persistentVolumeSpec:: {\n          new():: {},\n          // AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes\n          withAccessModes(accessModes):: self + if std.type(accessModes) == 'array' then { accessModes: accessModes } else { accessModes: [accessModes] },\n          // AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes\n          withAccessModesMixin(accessModes):: self + if std.type(accessModes) == 'array' then { accessModes+: accessModes } else { accessModes+: [accessModes] },\n          // A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity\n          withCapacity(capacity):: self + { capacity: capacity },\n          // A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity\n          withCapacityMixin(capacity):: self + { capacity+: capacity },\n          // A list of mount options, e.g. [\"ro\", \"soft\"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options\n          withMountOptions(mountOptions):: self + if std.type(mountOptions) == 'array' then { mountOptions: mountOptions } else { mountOptions: [mountOptions] },\n          // A list of mount options, e.g. [\"ro\", \"soft\"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options\n          withMountOptionsMixin(mountOptions):: self + if std.type(mountOptions) == 'array' then { mountOptions+: mountOptions } else { mountOptions+: [mountOptions] },\n          // What happens to a persistent volume when released from its claim. Valid options are Retain (default for manually created PersistentVolumes), Delete (default for dynamically provisioned PersistentVolumes), and Recycle (deprecated). Recycle must be supported by the volume plugin underlying this PersistentVolume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming\n          withPersistentVolumeReclaimPolicy(persistentVolumeReclaimPolicy):: self + { persistentVolumeReclaimPolicy: persistentVolumeReclaimPolicy },\n          // Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.\n          withStorageClassName(storageClassName):: self + { storageClassName: storageClassName },\n          // volumeMode defines if a volume is intended to be used with a formatted filesystem or to remain in raw block state. Value of Filesystem is implied when not included in spec. This is an alpha feature and may change in the future.\n          withVolumeMode(volumeMode):: self + { volumeMode: volumeMode },\n          mixin:: {\n            // AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n            awsElasticBlockStore:: {\n              local __awsElasticBlockStoreMixin(awsElasticBlockStore) = { awsElasticBlockStore+: awsElasticBlockStore },\n              mixinInstance(awsElasticBlockStore):: __awsElasticBlockStoreMixin(awsElasticBlockStore),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n              withFsType(fsType):: self + __awsElasticBlockStoreMixin({ fsType: fsType }),\n              // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty).\n              withPartition(partition):: self + __awsElasticBlockStoreMixin({ partition: partition }),\n              // Specify \"true\" to force and set the ReadOnly property in VolumeMounts to \"true\". If omitted, the default is \"false\". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n              withReadOnly(readOnly):: self + __awsElasticBlockStoreMixin({ readOnly: readOnly }),\n              // Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n              withVolumeId(volumeId):: self + __awsElasticBlockStoreMixin({ volumeID: volumeId }),\n            },\n            awsElasticBlockStoreType:: hidden.core.v1.awsElasticBlockStoreVolumeSource,\n            // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.\n            azureDisk:: {\n              local __azureDiskMixin(azureDisk) = { azureDisk+: azureDisk },\n              mixinInstance(azureDisk):: __azureDiskMixin(azureDisk),\n              // Host Caching mode: None, Read Only, Read Write.\n              withCachingMode(cachingMode):: self + __azureDiskMixin({ cachingMode: cachingMode }),\n              // The Name of the data disk in the blob storage\n              withDiskName(diskName):: self + __azureDiskMixin({ diskName: diskName }),\n              // The URI the data disk in the blob storage\n              withDiskUri(diskUri):: self + __azureDiskMixin({ diskURI: diskUri }),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __azureDiskMixin({ fsType: fsType }),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __azureDiskMixin({ readOnly: readOnly }),\n            },\n            azureDiskType:: hidden.core.v1.azureDiskVolumeSource,\n            // AzureFile represents an Azure File Service mount on the host and bind mount to the pod.\n            azureFile:: {\n              local __azureFileMixin(azureFile) = { azureFile+: azureFile },\n              mixinInstance(azureFile):: __azureFileMixin(azureFile),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __azureFileMixin({ readOnly: readOnly }),\n              // the name of secret that contains Azure Storage Account Name and Key\n              withSecretName(secretName):: self + __azureFileMixin({ secretName: secretName }),\n              // the namespace of the secret that contains Azure Storage Account Name and Key default is the same as the Pod\n              withSecretNamespace(secretNamespace):: self + __azureFileMixin({ secretNamespace: secretNamespace }),\n              // Share Name\n              withShareName(shareName):: self + __azureFileMixin({ shareName: shareName }),\n            },\n            azureFileType:: hidden.core.v1.azureFilePersistentVolumeSource,\n            // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime\n            cephfs:: {\n              local __cephfsMixin(cephfs) = { cephfs+: cephfs },\n              mixinInstance(cephfs):: __cephfsMixin(cephfs),\n              // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withMonitors(monitors):: self + if std.type(monitors) == 'array' then __cephfsMixin({ monitors: monitors }) else __cephfsMixin({ monitors: [monitors] }),\n              // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withMonitorsMixin(monitors):: self + if std.type(monitors) == 'array' then __cephfsMixin({ monitors+: monitors }) else __cephfsMixin({ monitors+: [monitors] }),\n              // Optional: Used as the mounted root, rather than the full Ceph tree, default is /\n              withPath(path):: self + __cephfsMixin({ path: path }),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withReadOnly(readOnly):: self + __cephfsMixin({ readOnly: readOnly }),\n              // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withSecretFile(secretFile):: self + __cephfsMixin({ secretFile: secretFile }),\n              // Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __cephfsMixin({ secretRef+: secretRef }),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name is unique within a namespace to reference a secret resource.\n                withName(name):: self + __secretRefMixin({ name: name }),\n                // Namespace defines the space within which the secret name must be unique.\n                withNamespace(namespace):: self + __secretRefMixin({ namespace: namespace }),\n              },\n              secretRefType:: hidden.core.v1.secretReference,\n              // Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withUser(user):: self + __cephfsMixin({ user: user }),\n            },\n            cephfsType:: hidden.core.v1.cephFsPersistentVolumeSource,\n            // Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n            cinder:: {\n              local __cinderMixin(cinder) = { cinder+: cinder },\n              mixinInstance(cinder):: __cinderMixin(cinder),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n              withFsType(fsType):: self + __cinderMixin({ fsType: fsType }),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n              withReadOnly(readOnly):: self + __cinderMixin({ readOnly: readOnly }),\n              // Optional: points to a secret object containing parameters used to connect to OpenStack.\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __cinderMixin({ secretRef+: secretRef }),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name is unique within a namespace to reference a secret resource.\n                withName(name):: self + __secretRefMixin({ name: name }),\n                // Namespace defines the space within which the secret name must be unique.\n                withNamespace(namespace):: self + __secretRefMixin({ namespace: namespace }),\n              },\n              secretRefType:: hidden.core.v1.secretReference,\n              // volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n              withVolumeId(volumeId):: self + __cinderMixin({ volumeID: volumeId }),\n            },\n            cinderType:: hidden.core.v1.cinderPersistentVolumeSource,\n            // ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding\n            claimRef:: {\n              local __claimRefMixin(claimRef) = { claimRef+: claimRef },\n              mixinInstance(claimRef):: __claimRefMixin(claimRef),\n              // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\n              withFieldPath(fieldPath):: self + __claimRefMixin({ fieldPath: fieldPath }),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __claimRefMixin({ name: name }),\n              // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n              withNamespace(namespace):: self + __claimRefMixin({ namespace: namespace }),\n              // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n              withResourceVersion(resourceVersion):: self + __claimRefMixin({ resourceVersion: resourceVersion }),\n              // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n              withUid(uid):: self + __claimRefMixin({ uid: uid }),\n            },\n            claimRefType:: hidden.core.v1.objectReference,\n            // CSI represents storage that handled by an external CSI driver (Beta feature).\n            csi:: {\n              local __csiMixin(csi) = { csi+: csi },\n              mixinInstance(csi):: __csiMixin(csi),\n              // ControllerPublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerPublishVolume and ControllerUnpublishVolume calls. This field is optional, and  may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.\n              controllerPublishSecretRef:: {\n                local __controllerPublishSecretRefMixin(controllerPublishSecretRef) = __csiMixin({ controllerPublishSecretRef+: controllerPublishSecretRef }),\n                mixinInstance(controllerPublishSecretRef):: __controllerPublishSecretRefMixin(controllerPublishSecretRef),\n                // Name is unique within a namespace to reference a secret resource.\n                withName(name):: self + __controllerPublishSecretRefMixin({ name: name }),\n                // Namespace defines the space within which the secret name must be unique.\n                withNamespace(namespace):: self + __controllerPublishSecretRefMixin({ namespace: namespace }),\n              },\n              controllerPublishSecretRefType:: hidden.core.v1.secretReference,\n              // Driver is the name of the driver to use for this volume. Required.\n              withDriver(driver):: self + __csiMixin({ driver: driver }),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\".\n              withFsType(fsType):: self + __csiMixin({ fsType: fsType }),\n              // NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and  may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.\n              nodePublishSecretRef:: {\n                local __nodePublishSecretRefMixin(nodePublishSecretRef) = __csiMixin({ nodePublishSecretRef+: nodePublishSecretRef }),\n                mixinInstance(nodePublishSecretRef):: __nodePublishSecretRefMixin(nodePublishSecretRef),\n                // Name is unique within a namespace to reference a secret resource.\n                withName(name):: self + __nodePublishSecretRefMixin({ name: name }),\n                // Namespace defines the space within which the secret name must be unique.\n                withNamespace(namespace):: self + __nodePublishSecretRefMixin({ namespace: namespace }),\n              },\n              nodePublishSecretRefType:: hidden.core.v1.secretReference,\n              // NodeStageSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodeStageVolume and NodeStageVolume and NodeUnstageVolume calls. This field is optional, and  may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.\n              nodeStageSecretRef:: {\n                local __nodeStageSecretRefMixin(nodeStageSecretRef) = __csiMixin({ nodeStageSecretRef+: nodeStageSecretRef }),\n                mixinInstance(nodeStageSecretRef):: __nodeStageSecretRefMixin(nodeStageSecretRef),\n                // Name is unique within a namespace to reference a secret resource.\n                withName(name):: self + __nodeStageSecretRefMixin({ name: name }),\n                // Namespace defines the space within which the secret name must be unique.\n                withNamespace(namespace):: self + __nodeStageSecretRefMixin({ namespace: namespace }),\n              },\n              nodeStageSecretRefType:: hidden.core.v1.secretReference,\n              // Optional: The value to pass to ControllerPublishVolumeRequest. Defaults to false (read/write).\n              withReadOnly(readOnly):: self + __csiMixin({ readOnly: readOnly }),\n              // Attributes of the volume to publish.\n              withVolumeAttributes(volumeAttributes):: self + __csiMixin({ volumeAttributes: volumeAttributes }),\n              // Attributes of the volume to publish.\n              withVolumeAttributesMixin(volumeAttributes):: self + __csiMixin({ volumeAttributes+: volumeAttributes }),\n              // VolumeHandle is the unique volume name returned by the CSI volume plugin’s CreateVolume to refer to the volume on all subsequent calls. Required.\n              withVolumeHandle(volumeHandle):: self + __csiMixin({ volumeHandle: volumeHandle }),\n            },\n            csiType:: hidden.core.v1.csiPersistentVolumeSource,\n            // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.\n            fc:: {\n              local __fcMixin(fc) = { fc+: fc },\n              mixinInstance(fc):: __fcMixin(fc),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __fcMixin({ fsType: fsType }),\n              // Optional: FC target lun number\n              withLun(lun):: self + __fcMixin({ lun: lun }),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __fcMixin({ readOnly: readOnly }),\n              // Optional: FC target worldwide names (WWNs)\n              withTargetWwns(targetWwns):: self + if std.type(targetWwns) == 'array' then __fcMixin({ targetWWNs: targetWwns }) else __fcMixin({ targetWWNs: [targetWwns] }),\n              // Optional: FC target worldwide names (WWNs)\n              withTargetWwnsMixin(targetWwns):: self + if std.type(targetWwns) == 'array' then __fcMixin({ targetWWNs+: targetWwns }) else __fcMixin({ targetWWNs+: [targetWwns] }),\n              // Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.\n              withWwids(wwids):: self + if std.type(wwids) == 'array' then __fcMixin({ wwids: wwids }) else __fcMixin({ wwids: [wwids] }),\n              // Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.\n              withWwidsMixin(wwids):: self + if std.type(wwids) == 'array' then __fcMixin({ wwids+: wwids }) else __fcMixin({ wwids+: [wwids] }),\n            },\n            fcType:: hidden.core.v1.fcVolumeSource,\n            // FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.\n            flexVolume:: {\n              local __flexVolumeMixin(flexVolume) = { flexVolume+: flexVolume },\n              mixinInstance(flexVolume):: __flexVolumeMixin(flexVolume),\n              // Driver is the name of the driver to use for this volume.\n              withDriver(driver):: self + __flexVolumeMixin({ driver: driver }),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.\n              withFsType(fsType):: self + __flexVolumeMixin({ fsType: fsType }),\n              // Optional: Extra command options if any.\n              withOptions(options):: self + __flexVolumeMixin({ options: options }),\n              // Optional: Extra command options if any.\n              withOptionsMixin(options):: self + __flexVolumeMixin({ options+: options }),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __flexVolumeMixin({ readOnly: readOnly }),\n              // Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __flexVolumeMixin({ secretRef+: secretRef }),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name is unique within a namespace to reference a secret resource.\n                withName(name):: self + __secretRefMixin({ name: name }),\n                // Namespace defines the space within which the secret name must be unique.\n                withNamespace(namespace):: self + __secretRefMixin({ namespace: namespace }),\n              },\n              secretRefType:: hidden.core.v1.secretReference,\n            },\n            flexVolumeType:: hidden.core.v1.flexPersistentVolumeSource,\n            // Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running\n            flocker:: {\n              local __flockerMixin(flocker) = { flocker+: flocker },\n              mixinInstance(flocker):: __flockerMixin(flocker),\n              // Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated\n              withDatasetName(datasetName):: self + __flockerMixin({ datasetName: datasetName }),\n              // UUID of the dataset. This is unique identifier of a Flocker dataset\n              withDatasetUuid(datasetUuid):: self + __flockerMixin({ datasetUUID: datasetUuid }),\n            },\n            flockerType:: hidden.core.v1.flockerVolumeSource,\n            // GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n            gcePersistentDisk:: {\n              local __gcePersistentDiskMixin(gcePersistentDisk) = { gcePersistentDisk+: gcePersistentDisk },\n              mixinInstance(gcePersistentDisk):: __gcePersistentDiskMixin(gcePersistentDisk),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withFsType(fsType):: self + __gcePersistentDiskMixin({ fsType: fsType }),\n              // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withPartition(partition):: self + __gcePersistentDiskMixin({ partition: partition }),\n              // Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withPdName(pdName):: self + __gcePersistentDiskMixin({ pdName: pdName }),\n              // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withReadOnly(readOnly):: self + __gcePersistentDiskMixin({ readOnly: readOnly }),\n            },\n            gcePersistentDiskType:: hidden.core.v1.gcePersistentDiskVolumeSource,\n            // Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md\n            glusterfs:: {\n              local __glusterfsMixin(glusterfs) = { glusterfs+: glusterfs },\n              mixinInstance(glusterfs):: __glusterfsMixin(glusterfs),\n              // EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n              withEndpoints(endpoints):: self + __glusterfsMixin({ endpoints: endpoints }),\n              // Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n              withPath(path):: self + __glusterfsMixin({ path: path }),\n              // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n              withReadOnly(readOnly):: self + __glusterfsMixin({ readOnly: readOnly }),\n            },\n            glusterfsType:: hidden.core.v1.glusterfsVolumeSource,\n            // HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\n            hostPath:: {\n              local __hostPathMixin(hostPath) = { hostPath+: hostPath },\n              mixinInstance(hostPath):: __hostPathMixin(hostPath),\n              // Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\n              withPath(path):: self + __hostPathMixin({ path: path }),\n              // Type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\n              withType(type):: self + __hostPathMixin({ type: type }),\n            },\n            hostPathType:: hidden.core.v1.hostPathVolumeSource,\n            // ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin.\n            iscsi:: {\n              local __iscsiMixin(iscsi) = { iscsi+: iscsi },\n              mixinInstance(iscsi):: __iscsiMixin(iscsi),\n              // whether support iSCSI Discovery CHAP authentication\n              withChapAuthDiscovery(chapAuthDiscovery):: self + __iscsiMixin({ chapAuthDiscovery: chapAuthDiscovery }),\n              // whether support iSCSI Session CHAP authentication\n              withChapAuthSession(chapAuthSession):: self + __iscsiMixin({ chapAuthSession: chapAuthSession }),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi\n              withFsType(fsType):: self + __iscsiMixin({ fsType: fsType }),\n              // Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface <target portal>:<volume name> will be created for the connection.\n              withInitiatorName(initiatorName):: self + __iscsiMixin({ initiatorName: initiatorName }),\n              // Target iSCSI Qualified Name.\n              withIqn(iqn):: self + __iscsiMixin({ iqn: iqn }),\n              // iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).\n              withIscsiInterface(iscsiInterface):: self + __iscsiMixin({ iscsiInterface: iscsiInterface }),\n              // iSCSI Target Lun number.\n              withLun(lun):: self + __iscsiMixin({ lun: lun }),\n              // iSCSI Target Portal List. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n              withPortals(portals):: self + if std.type(portals) == 'array' then __iscsiMixin({ portals: portals }) else __iscsiMixin({ portals: [portals] }),\n              // iSCSI Target Portal List. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n              withPortalsMixin(portals):: self + if std.type(portals) == 'array' then __iscsiMixin({ portals+: portals }) else __iscsiMixin({ portals+: [portals] }),\n              // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.\n              withReadOnly(readOnly):: self + __iscsiMixin({ readOnly: readOnly }),\n              // CHAP Secret for iSCSI target and initiator authentication\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __iscsiMixin({ secretRef+: secretRef }),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name is unique within a namespace to reference a secret resource.\n                withName(name):: self + __secretRefMixin({ name: name }),\n                // Namespace defines the space within which the secret name must be unique.\n                withNamespace(namespace):: self + __secretRefMixin({ namespace: namespace }),\n              },\n              secretRefType:: hidden.core.v1.secretReference,\n              // iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n              withTargetPortal(targetPortal):: self + __iscsiMixin({ targetPortal: targetPortal }),\n            },\n            iscsiType:: hidden.core.v1.iscsiPersistentVolumeSource,\n            // Local represents directly-attached storage with node affinity\n            localStorage:: {\n              local __localStorageMixin(localStorage) = { localStorage+: localStorage },\n              mixinInstance(localStorage):: __localStorageMixin(localStorage),\n              // The full path to the volume on the node. It can be either a directory or block device (disk, partition, ...). Directories can be represented only by PersistentVolume with VolumeMode=Filesystem. Block devices can be represented only by VolumeMode=Block, which also requires the BlockVolume alpha feature gate to be enabled.\n              withPath(path):: self + __localStorageMixin({ path: path }),\n            },\n            localType:: hidden.core.v1.localVolumeSource,\n            // NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n            nfs:: {\n              local __nfsMixin(nfs) = { nfs+: nfs },\n              mixinInstance(nfs):: __nfsMixin(nfs),\n              // Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n              withPath(path):: self + __nfsMixin({ path: path }),\n              // ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n              withReadOnly(readOnly):: self + __nfsMixin({ readOnly: readOnly }),\n              // Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n              withServer(server):: self + __nfsMixin({ server: server }),\n            },\n            nfsType:: hidden.core.v1.nfsVolumeSource,\n            // NodeAffinity defines constraints that limit what nodes this volume can be accessed from. This field influences the scheduling of pods that use this volume.\n            nodeAffinity:: {\n              local __nodeAffinityMixin(nodeAffinity) = { nodeAffinity+: nodeAffinity },\n              mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n              // Required specifies hard node constraints that must be met.\n              required:: {\n                local __requiredMixin(required) = __nodeAffinityMixin({ required+: required }),\n                mixinInstance(required):: __requiredMixin(required),\n                // Required. A list of node selector terms. The terms are ORed.\n                withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                // Required. A list of node selector terms. The terms are ORed.\n                withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n              },\n              requiredType:: hidden.core.v1.nodeSelector,\n            },\n            nodeAffinityType:: hidden.core.v1.volumeNodeAffinity,\n            // PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine\n            photonPersistentDisk:: {\n              local __photonPersistentDiskMixin(photonPersistentDisk) = { photonPersistentDisk+: photonPersistentDisk },\n              mixinInstance(photonPersistentDisk):: __photonPersistentDiskMixin(photonPersistentDisk),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __photonPersistentDiskMixin({ fsType: fsType }),\n              // ID that identifies Photon Controller persistent disk\n              withPdId(pdId):: self + __photonPersistentDiskMixin({ pdID: pdId }),\n            },\n            photonPersistentDiskType:: hidden.core.v1.photonPersistentDiskVolumeSource,\n            // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine\n            portworxVolume:: {\n              local __portworxVolumeMixin(portworxVolume) = { portworxVolume+: portworxVolume },\n              mixinInstance(portworxVolume):: __portworxVolumeMixin(portworxVolume),\n              // FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __portworxVolumeMixin({ fsType: fsType }),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __portworxVolumeMixin({ readOnly: readOnly }),\n              // VolumeID uniquely identifies a Portworx volume\n              withVolumeId(volumeId):: self + __portworxVolumeMixin({ volumeID: volumeId }),\n            },\n            portworxVolumeType:: hidden.core.v1.portworxVolumeSource,\n            // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime\n            quobyte:: {\n              local __quobyteMixin(quobyte) = { quobyte+: quobyte },\n              mixinInstance(quobyte):: __quobyteMixin(quobyte),\n              // Group to map volume access to Default is no group\n              withGroup(group):: self + __quobyteMixin({ group: group }),\n              // ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.\n              withReadOnly(readOnly):: self + __quobyteMixin({ readOnly: readOnly }),\n              // Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes\n              withRegistry(registry):: self + __quobyteMixin({ registry: registry }),\n              // User to map volume access to Defaults to serivceaccount user\n              withUser(user):: self + __quobyteMixin({ user: user }),\n              // Volume is a string that references an already created Quobyte volume by name.\n              withVolume(volume):: self + __quobyteMixin({ volume: volume }),\n            },\n            quobyteType:: hidden.core.v1.quobyteVolumeSource,\n            // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md\n            rbd:: {\n              local __rbdMixin(rbd) = { rbd+: rbd },\n              mixinInstance(rbd):: __rbdMixin(rbd),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd\n              withFsType(fsType):: self + __rbdMixin({ fsType: fsType }),\n              // The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withImage(image):: self + __rbdMixin({ image: image }),\n              // Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withKeyring(keyring):: self + __rbdMixin({ keyring: keyring }),\n              // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withMonitors(monitors):: self + if std.type(monitors) == 'array' then __rbdMixin({ monitors: monitors }) else __rbdMixin({ monitors: [monitors] }),\n              // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withMonitorsMixin(monitors):: self + if std.type(monitors) == 'array' then __rbdMixin({ monitors+: monitors }) else __rbdMixin({ monitors+: [monitors] }),\n              // The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withPool(pool):: self + __rbdMixin({ pool: pool }),\n              // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withReadOnly(readOnly):: self + __rbdMixin({ readOnly: readOnly }),\n              // SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __rbdMixin({ secretRef+: secretRef }),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name is unique within a namespace to reference a secret resource.\n                withName(name):: self + __secretRefMixin({ name: name }),\n                // Namespace defines the space within which the secret name must be unique.\n                withNamespace(namespace):: self + __secretRefMixin({ namespace: namespace }),\n              },\n              secretRefType:: hidden.core.v1.secretReference,\n              // The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withUser(user):: self + __rbdMixin({ user: user }),\n            },\n            rbdType:: hidden.core.v1.rbdPersistentVolumeSource,\n            // ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.\n            scaleIo:: {\n              local __scaleIoMixin(scaleIo) = { scaleIo+: scaleIo },\n              mixinInstance(scaleIo):: __scaleIoMixin(scaleIo),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __scaleIoMixin({ fsType: fsType }),\n              // The host address of the ScaleIO API Gateway.\n              withGateway(gateway):: self + __scaleIoMixin({ gateway: gateway }),\n              // The name of the ScaleIO Protection Domain for the configured storage.\n              withProtectionDomain(protectionDomain):: self + __scaleIoMixin({ protectionDomain: protectionDomain }),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __scaleIoMixin({ readOnly: readOnly }),\n              // SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __scaleIoMixin({ secretRef+: secretRef }),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name is unique within a namespace to reference a secret resource.\n                withName(name):: self + __secretRefMixin({ name: name }),\n                // Namespace defines the space within which the secret name must be unique.\n                withNamespace(namespace):: self + __secretRefMixin({ namespace: namespace }),\n              },\n              secretRefType:: hidden.core.v1.secretReference,\n              // Flag to enable/disable SSL communication with Gateway, default false\n              withSslEnabled(sslEnabled):: self + __scaleIoMixin({ sslEnabled: sslEnabled }),\n              // Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned.\n              withStorageMode(storageMode):: self + __scaleIoMixin({ storageMode: storageMode }),\n              // The ScaleIO Storage Pool associated with the protection domain.\n              withStoragePool(storagePool):: self + __scaleIoMixin({ storagePool: storagePool }),\n              // The name of the storage system as configured in ScaleIO.\n              withSystem(system):: self + __scaleIoMixin({ system: system }),\n              // The name of a volume already created in the ScaleIO system that is associated with this volume source.\n              withVolumeName(volumeName):: self + __scaleIoMixin({ volumeName: volumeName }),\n            },\n            scaleIOType:: hidden.core.v1.scaleIoPersistentVolumeSource,\n            // StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md\n            storageos:: {\n              local __storageosMixin(storageos) = { storageos+: storageos },\n              mixinInstance(storageos):: __storageosMixin(storageos),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __storageosMixin({ fsType: fsType }),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __storageosMixin({ readOnly: readOnly }),\n              // SecretRef specifies the secret to use for obtaining the StorageOS API credentials.  If not specified, default values will be attempted.\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __storageosMixin({ secretRef+: secretRef }),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\n                withFieldPath(fieldPath):: self + __secretRefMixin({ fieldPath: fieldPath }),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({ name: name }),\n                // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n                withNamespace(namespace):: self + __secretRefMixin({ namespace: namespace }),\n                // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n                withResourceVersion(resourceVersion):: self + __secretRefMixin({ resourceVersion: resourceVersion }),\n                // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n                withUid(uid):: self + __secretRefMixin({ uid: uid }),\n              },\n              secretRefType:: hidden.core.v1.objectReference,\n              // VolumeName is the human-readable name of the StorageOS volume.  Volume names are only unique within a namespace.\n              withVolumeName(volumeName):: self + __storageosMixin({ volumeName: volumeName }),\n              // VolumeNamespace specifies the scope of the volume within StorageOS.  If no namespace is specified then the Pod's namespace will be used.  This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.\n              withVolumeNamespace(volumeNamespace):: self + __storageosMixin({ volumeNamespace: volumeNamespace }),\n            },\n            storageosType:: hidden.core.v1.storageOsPersistentVolumeSource,\n            // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine\n            vsphereVolume:: {\n              local __vsphereVolumeMixin(vsphereVolume) = { vsphereVolume+: vsphereVolume },\n              mixinInstance(vsphereVolume):: __vsphereVolumeMixin(vsphereVolume),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __vsphereVolumeMixin({ fsType: fsType }),\n              // Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.\n              withStoragePolicyId(storagePolicyId):: self + __vsphereVolumeMixin({ storagePolicyID: storagePolicyId }),\n              // Storage Policy Based Management (SPBM) profile name.\n              withStoragePolicyName(storagePolicyName):: self + __vsphereVolumeMixin({ storagePolicyName: storagePolicyName }),\n              // Path that identifies vSphere volume vmdk\n              withVolumePath(volumePath):: self + __vsphereVolumeMixin({ volumePath: volumePath }),\n            },\n            vsphereVolumeType:: hidden.core.v1.vsphereVirtualDiskVolumeSource,\n          },\n        },\n        // PersistentVolumeStatus is the current status of a persistent volume.\n        persistentVolumeStatus:: {\n          new():: {},\n          // A human-readable message indicating details about why the volume is in this state.\n          withMessage(message):: self + { message: message },\n          // Phase indicates if a volume is available, bound to a claim, or released by a claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase\n          withPhase(phase):: self + { phase: phase },\n          // Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.\n          withReason(reason):: self + { reason: reason },\n          mixin:: {},\n        },\n        // Represents a Photon Controller persistent disk resource.\n        photonPersistentDiskVolumeSource:: {\n          new():: {},\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n          withFsType(fsType):: self + { fsType: fsType },\n          // ID that identifies Photon Controller persistent disk\n          withPdId(pdId):: self + { pdID: pdId },\n          mixin:: {},\n        },\n        // Pod affinity is a group of inter pod affinity scheduling rules.\n        podAffinity:: {\n          new():: {},\n          // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n          withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then { preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution } else { preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] },\n          // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n          withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then { preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution } else { preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] },\n          preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n          // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n          withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then { requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution } else { requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] },\n          // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n          withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then { requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution } else { requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] },\n          requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n          mixin:: {},\n        },\n        // Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key <topologyKey> matches that of any node on which a pod of the set of pods is running\n        podAffinityTerm:: {\n          new():: {},\n          // namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"\n          withNamespaces(namespaces):: self + if std.type(namespaces) == 'array' then { namespaces: namespaces } else { namespaces: [namespaces] },\n          // namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"\n          withNamespacesMixin(namespaces):: self + if std.type(namespaces) == 'array' then { namespaces+: namespaces } else { namespaces+: [namespaces] },\n          // This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.\n          withTopologyKey(topologyKey):: self + { topologyKey: topologyKey },\n          mixin:: {\n            // A label query over a set of resources, in this case pods.\n            labelSelector:: {\n              local __labelSelectorMixin(labelSelector) = { labelSelector+: labelSelector },\n              mixinInstance(labelSelector):: __labelSelectorMixin(labelSelector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __labelSelectorMixin({ matchExpressions: matchExpressions }) else __labelSelectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __labelSelectorMixin({ matchExpressions+: matchExpressions }) else __labelSelectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __labelSelectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __labelSelectorMixin({ matchLabels+: matchLabels }),\n            },\n            labelSelectorType:: hidden.meta.v1.labelSelector,\n          },\n        },\n        // Pod anti affinity is a group of inter pod anti affinity scheduling rules.\n        podAntiAffinity:: {\n          new():: {},\n          // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n          withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then { preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution } else { preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] },\n          // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n          withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then { preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution } else { preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] },\n          preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n          // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n          withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then { requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution } else { requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] },\n          // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n          withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then { requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution } else { requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] },\n          requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n          mixin:: {},\n        },\n        // PodCondition contains details for the current condition of this pod.\n        podCondition:: {\n          new():: {},\n          // Last time we probed the condition.\n          withLastProbeTime(lastProbeTime):: self + { lastProbeTime: lastProbeTime },\n          // Last time the condition transitioned from one status to another.\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // Human-readable message indicating details about last transition.\n          withMessage(message):: self + { message: message },\n          // Unique, one-word, CamelCase reason for the condition's last transition.\n          withReason(reason):: self + { reason: reason },\n          // Status is the status of the condition. Can be True, False, Unknown. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions\n          withStatus(status):: self + { status: status },\n          // Type is the type of the condition. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.\n        podDnsConfig:: {\n          new():: {},\n          // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n          withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then { nameservers: nameservers } else { nameservers: [nameservers] },\n          // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n          withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then { nameservers+: nameservers } else { nameservers+: [nameservers] },\n          // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n          withOptions(options):: self + if std.type(options) == 'array' then { options: options } else { options: [options] },\n          // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n          withOptionsMixin(options):: self + if std.type(options) == 'array' then { options+: options } else { options+: [options] },\n          optionsType:: hidden.core.v1.podDnsConfigOption,\n          // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n          withSearches(searches):: self + if std.type(searches) == 'array' then { searches: searches } else { searches: [searches] },\n          // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n          withSearchesMixin(searches):: self + if std.type(searches) == 'array' then { searches+: searches } else { searches+: [searches] },\n          mixin:: {},\n        },\n        // PodDNSConfigOption defines DNS resolver options of a pod.\n        podDnsConfigOption:: {\n          new():: {},\n          // Required.\n          withName(name):: self + { name: name },\n          withValue(value):: self + { value: value },\n          mixin:: {},\n        },\n        // PodList is a list of Pods.\n        podList:: {\n          new(items=''):: self.withItems(items),\n          // List of pods. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // List of pods. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.pod,\n          mixin:: {},\n        },\n        // PodReadinessGate contains the reference to a pod condition\n        podReadinessGate:: {\n          new():: {},\n          // ConditionType refers to a condition in the pod's condition list with matching type.\n          withConditionType(conditionType):: self + { conditionType: conditionType },\n          mixin:: {},\n        },\n        // PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext.  Field values of container.securityContext take precedence over field values of PodSecurityContext.\n        podSecurityContext:: {\n          new():: {},\n          // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n          //\n          // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n          //\n          // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n          withFsGroup(fsGroup):: self + { fsGroup: fsGroup },\n          // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n          withRunAsGroup(runAsGroup):: self + { runAsGroup: runAsGroup },\n          // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n          withRunAsNonRoot(runAsNonRoot):: self + { runAsNonRoot: runAsNonRoot },\n          // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n          withRunAsUser(runAsUser):: self + { runAsUser: runAsUser },\n          // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n          withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then { supplementalGroups: supplementalGroups } else { supplementalGroups: [supplementalGroups] },\n          // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n          withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then { supplementalGroups+: supplementalGroups } else { supplementalGroups+: [supplementalGroups] },\n          // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n          withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then { sysctls: sysctls } else { sysctls: [sysctls] },\n          // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n          withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then { sysctls+: sysctls } else { sysctls+: [sysctls] },\n          sysctlsType:: hidden.core.v1.sysctl,\n          mixin:: {\n            // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n            seLinuxOptions:: {\n              local __seLinuxOptionsMixin(seLinuxOptions) = { seLinuxOptions+: seLinuxOptions },\n              mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n              // Level is SELinux level label that applies to the container.\n              withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n              // Role is a SELinux role label that applies to the container.\n              withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n              // Type is a SELinux type label that applies to the container.\n              withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n              // User is a SELinux user label that applies to the container.\n              withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n            },\n            seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n          },\n        },\n        // PodSpec is a description of a pod.\n        podSpec:: {\n          new():: {},\n          // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n          withActiveDeadlineSeconds(activeDeadlineSeconds):: self + { activeDeadlineSeconds: activeDeadlineSeconds },\n          // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n          withAutomountServiceAccountToken(automountServiceAccountToken):: self + { automountServiceAccountToken: automountServiceAccountToken },\n          // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n          withContainers(containers):: self + if std.type(containers) == 'array' then { containers: containers } else { containers: [containers] },\n          // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n          withContainersMixin(containers):: self + if std.type(containers) == 'array' then { containers+: containers } else { containers+: [containers] },\n          containersType:: hidden.core.v1.container,\n          // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n          withDnsPolicy(dnsPolicy):: self + { dnsPolicy: dnsPolicy },\n          // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n          withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then { hostAliases: hostAliases } else { hostAliases: [hostAliases] },\n          // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n          withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then { hostAliases+: hostAliases } else { hostAliases+: [hostAliases] },\n          hostAliasesType:: hidden.core.v1.hostAlias,\n          // Use the host's ipc namespace. Optional: Default to false.\n          withHostIpc(hostIpc):: self + { hostIPC: hostIpc },\n          // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n          withHostNetwork(hostNetwork):: self + { hostNetwork: hostNetwork },\n          // Use the host's pid namespace. Optional: Default to false.\n          withHostPid(hostPid):: self + { hostPID: hostPid },\n          // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n          withHostname(hostname):: self + { hostname: hostname },\n          // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n          withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then { imagePullSecrets: imagePullSecrets } else { imagePullSecrets: [imagePullSecrets] },\n          // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n          withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then { imagePullSecrets+: imagePullSecrets } else { imagePullSecrets+: [imagePullSecrets] },\n          imagePullSecretsType:: hidden.core.v1.localObjectReference,\n          // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n          withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then { initContainers: initContainers } else { initContainers: [initContainers] },\n          // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n          withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then { initContainers+: initContainers } else { initContainers+: [initContainers] },\n          initContainersType:: hidden.core.v1.container,\n          // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n          withNodeName(nodeName):: self + { nodeName: nodeName },\n          // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n          withNodeSelector(nodeSelector):: self + { nodeSelector: nodeSelector },\n          // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n          withNodeSelectorMixin(nodeSelector):: self + { nodeSelector+: nodeSelector },\n          // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n          withPriority(priority):: self + { priority: priority },\n          // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n          withPriorityClassName(priorityClassName):: self + { priorityClassName: priorityClassName },\n          // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n          withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then { readinessGates: readinessGates } else { readinessGates: [readinessGates] },\n          // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n          withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then { readinessGates+: readinessGates } else { readinessGates+: [readinessGates] },\n          readinessGatesType:: hidden.core.v1.podReadinessGate,\n          // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n          withRestartPolicy(restartPolicy):: self + { restartPolicy: restartPolicy },\n          // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n          withSchedulerName(schedulerName):: self + { schedulerName: schedulerName },\n          // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n          withServiceAccount(serviceAccount):: self + { serviceAccount: serviceAccount },\n          // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n          withServiceAccountName(serviceAccountName):: self + { serviceAccountName: serviceAccountName },\n          // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n          withShareProcessNamespace(shareProcessNamespace):: self + { shareProcessNamespace: shareProcessNamespace },\n          // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n          withSubdomain(subdomain):: self + { subdomain: subdomain },\n          // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n          withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + { terminationGracePeriodSeconds: terminationGracePeriodSeconds },\n          // If specified, the pod's tolerations.\n          withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then { tolerations: tolerations } else { tolerations: [tolerations] },\n          // If specified, the pod's tolerations.\n          withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then { tolerations+: tolerations } else { tolerations+: [tolerations] },\n          tolerationsType:: hidden.core.v1.toleration,\n          // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n          withVolumes(volumes):: self + if std.type(volumes) == 'array' then { volumes: volumes } else { volumes: [volumes] },\n          // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n          withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then { volumes+: volumes } else { volumes+: [volumes] },\n          volumesType:: hidden.core.v1.volume,\n          mixin:: {\n            // If specified, the pod's scheduling constraints\n            affinity:: {\n              local __affinityMixin(affinity) = { affinity+: affinity },\n              mixinInstance(affinity):: __affinityMixin(affinity),\n              // Describes node affinity scheduling rules for the pod.\n              nodeAffinity:: {\n                local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                requiredDuringSchedulingIgnoredDuringExecution:: {\n                  local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                  mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                  // Required. A list of node selector terms. The terms are ORed.\n                  withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                  // Required. A list of node selector terms. The terms are ORed.\n                  withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                  nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                },\n                requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n              },\n              nodeAffinityType:: hidden.core.v1.nodeAffinity,\n              // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n              podAffinity:: {\n                local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n              },\n              podAffinityType:: hidden.core.v1.podAffinity,\n              // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n              podAntiAffinity:: {\n                local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n              },\n              podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n            },\n            affinityType:: hidden.core.v1.affinity,\n            // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n            dnsConfig:: {\n              local __dnsConfigMixin(dnsConfig) = { dnsConfig+: dnsConfig },\n              mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n              // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n              withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n              // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n              withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n              // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n              withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n              // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n              withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n              optionsType:: hidden.core.v1.podDnsConfigOption,\n              // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n              withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n              // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n              withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n            },\n            dnsConfigType:: hidden.core.v1.podDnsConfig,\n            // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n            securityContext:: {\n              local __securityContextMixin(securityContext) = { securityContext+: securityContext },\n              mixinInstance(securityContext):: __securityContextMixin(securityContext),\n              // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n              //\n              // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n              //\n              // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n              withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n              // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n              withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n              // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n              withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n              // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n              withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n              // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n              seLinuxOptions:: {\n                local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                // Level is SELinux level label that applies to the container.\n                withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                // Role is a SELinux role label that applies to the container.\n                withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                // Type is a SELinux type label that applies to the container.\n                withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                // User is a SELinux user label that applies to the container.\n                withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n              },\n              seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n              // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n              withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n              // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n              withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n              // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n              withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n              // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n              withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n              sysctlsType:: hidden.core.v1.sysctl,\n            },\n            securityContextType:: hidden.core.v1.podSecurityContext,\n          },\n        },\n        // PodStatus represents information about the status of a pod. Status may trail the actual state of a system, especially if the node that hosts the pod cannot contact the control plane.\n        podStatus:: {\n          new():: {},\n          // Current service state of pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // Current service state of pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.core.v1.podCondition,\n          // The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status\n          withContainerStatuses(containerStatuses):: self + if std.type(containerStatuses) == 'array' then { containerStatuses: containerStatuses } else { containerStatuses: [containerStatuses] },\n          // The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status\n          withContainerStatusesMixin(containerStatuses):: self + if std.type(containerStatuses) == 'array' then { containerStatuses+: containerStatuses } else { containerStatuses+: [containerStatuses] },\n          containerStatusesType:: hidden.core.v1.containerStatus,\n          // IP address of the host to which the pod is assigned. Empty if not yet scheduled.\n          withHostIp(hostIp):: self + { hostIP: hostIp },\n          // The list has one entry per init container in the manifest. The most recent successful init container will have ready = true, the most recently started container will have startTime set. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status\n          withInitContainerStatuses(initContainerStatuses):: self + if std.type(initContainerStatuses) == 'array' then { initContainerStatuses: initContainerStatuses } else { initContainerStatuses: [initContainerStatuses] },\n          // The list has one entry per init container in the manifest. The most recent successful init container will have ready = true, the most recently started container will have startTime set. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status\n          withInitContainerStatusesMixin(initContainerStatuses):: self + if std.type(initContainerStatuses) == 'array' then { initContainerStatuses+: initContainerStatuses } else { initContainerStatuses+: [initContainerStatuses] },\n          initContainerStatusesType:: hidden.core.v1.containerStatus,\n          // A human readable message indicating details about why the pod is in this condition.\n          withMessage(message):: self + { message: message },\n          // nominatedNodeName is set only when this pod preempts other pods on the node, but it cannot be scheduled right away as preemption victims receive their graceful termination periods. This field does not guarantee that the pod will be scheduled on this node. Scheduler may decide to place the pod elsewhere if other nodes become available sooner. Scheduler may also decide to give the resources on this node to a higher priority pod that is created after preemption. As a result, this field may be different than PodSpec.nodeName when the pod is scheduled.\n          withNominatedNodeName(nominatedNodeName):: self + { nominatedNodeName: nominatedNodeName },\n          // The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle. The conditions array, the reason and message fields, and the individual container status arrays contain more detail about the pod's status. There are five possible phase values:\n          //\n          // Pending: The pod has been accepted by the Kubernetes system, but one or more of the container images has not been created. This includes time before being scheduled as well as time spent downloading images over the network, which could take a while. Running: The pod has been bound to a node, and all of the containers have been created. At least one container is still running, or is in the process of starting or restarting. Succeeded: All containers in the pod have terminated in success, and will not be restarted. Failed: All containers in the pod have terminated, and at least one container has terminated in failure. The container either exited with non-zero status or was terminated by the system. Unknown: For some reason the state of the pod could not be obtained, typically due to an error in communicating with the host of the pod.\n          //\n          // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase\n          withPhase(phase):: self + { phase: phase },\n          // IP address allocated to the pod. Routable at least within the cluster. Empty if not yet allocated.\n          withPodIp(podIp):: self + { podIP: podIp },\n          // The Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md\n          withQosClass(qosClass):: self + { qosClass: qosClass },\n          // A brief CamelCase message indicating details about why the pod is in this state. e.g. 'Evicted'\n          withReason(reason):: self + { reason: reason },\n          // RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod.\n          withStartTime(startTime):: self + { startTime: startTime },\n          mixin:: {},\n        },\n        // PodTemplateList is a list of PodTemplates.\n        podTemplateList:: {\n          new(items=''):: self.withItems(items),\n          // List of pod templates\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // List of pod templates\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.podTemplate,\n          mixin:: {},\n        },\n        // PodTemplateSpec describes the data a pod should have when created from a template\n        podTemplateSpec:: {\n          new():: {},\n          mixin:: {\n            // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n            metadata:: {\n              local __metadataMixin(metadata) = { metadata+: metadata },\n              mixinInstance(metadata):: __metadataMixin(metadata),\n              // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n              withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n              // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n              withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n              // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n              withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n              // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n              withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n              // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n              withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n              // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n              //\n              // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n              //\n              // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n              withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n              // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n              //\n              // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n              initializers:: {\n                local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                mixinInstance(initializers):: __initializersMixin(initializers),\n                // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                pendingType:: hidden.meta.v1.initializer,\n              },\n              initializersType:: hidden.meta.v1.initializers,\n              // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n              withLabels(labels):: self + __metadataMixin({ labels: labels }),\n              // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n              withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n              // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n              withName(name):: self + __metadataMixin({ name: name }),\n              // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n              //\n              // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n              withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n              // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n              withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n              // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n              withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n              ownerReferencesType:: hidden.meta.v1.ownerReference,\n            },\n            metadataType:: hidden.meta.v1.objectMeta,\n            // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n            spec:: {\n              local __specMixin(spec) = { spec+: spec },\n              mixinInstance(spec):: __specMixin(spec),\n              // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n              withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n              // If specified, the pod's scheduling constraints\n              affinity:: {\n                local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                mixinInstance(affinity):: __affinityMixin(affinity),\n                // Describes node affinity scheduling rules for the pod.\n                nodeAffinity:: {\n                  local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                  mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                  preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                  // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                  requiredDuringSchedulingIgnoredDuringExecution:: {\n                    local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                    mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                    // Required. A list of node selector terms. The terms are ORed.\n                    withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                    // Required. A list of node selector terms. The terms are ORed.\n                    withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                    nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                  },\n                  requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                },\n                nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                podAffinity:: {\n                  local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                  mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                  preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                  // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                  withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                  // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                  withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                  requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                },\n                podAffinityType:: hidden.core.v1.podAffinity,\n                // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                podAntiAffinity:: {\n                  local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                  mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                  preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                  // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                  withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                  // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                  withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                  requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                },\n                podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n              },\n              affinityType:: hidden.core.v1.affinity,\n              // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n              withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n              // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n              withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n              // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n              withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n              containersType:: hidden.core.v1.container,\n              // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n              dnsConfig:: {\n                local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                optionsType:: hidden.core.v1.podDnsConfigOption,\n                // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n              },\n              dnsConfigType:: hidden.core.v1.podDnsConfig,\n              // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n              withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n              // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n              withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n              // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n              withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n              hostAliasesType:: hidden.core.v1.hostAlias,\n              // Use the host's ipc namespace. Optional: Default to false.\n              withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n              // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n              withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n              // Use the host's pid namespace. Optional: Default to false.\n              withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n              // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n              withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n              // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n              withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n              // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n              withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n              imagePullSecretsType:: hidden.core.v1.localObjectReference,\n              // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n              withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n              // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n              withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n              initContainersType:: hidden.core.v1.container,\n              // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n              withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n              // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n              withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n              // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n              withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n              // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n              withPriority(priority):: self + __specMixin({ priority: priority }),\n              // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n              withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n              // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n              withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n              // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n              withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n              readinessGatesType:: hidden.core.v1.podReadinessGate,\n              // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n              withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n              // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n              withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n              // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n              securityContext:: {\n                local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                //\n                // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                //\n                // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                seLinuxOptions:: {\n                  local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                  mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                  // Level is SELinux level label that applies to the container.\n                  withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                  // Role is a SELinux role label that applies to the container.\n                  withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                  // Type is a SELinux type label that applies to the container.\n                  withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                  // User is a SELinux user label that applies to the container.\n                  withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                },\n                seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                sysctlsType:: hidden.core.v1.sysctl,\n              },\n              securityContextType:: hidden.core.v1.podSecurityContext,\n              // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n              withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n              // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n              withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n              // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n              withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n              // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n              withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n              // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n              withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n              // If specified, the pod's tolerations.\n              withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n              // If specified, the pod's tolerations.\n              withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n              tolerationsType:: hidden.core.v1.toleration,\n              // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n              withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n              // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n              withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n              volumesType:: hidden.core.v1.volume,\n            },\n            specType:: hidden.core.v1.podSpec,\n          },\n        },\n        // PortworxVolumeSource represents a Portworx volume resource.\n        portworxVolumeSource:: {\n          new():: {},\n          // FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified.\n          withFsType(fsType):: self + { fsType: fsType },\n          // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          // VolumeID uniquely identifies a Portworx volume\n          withVolumeId(volumeId):: self + { volumeID: volumeId },\n          mixin:: {},\n        },\n        // An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).\n        preferredSchedulingTerm:: {\n          new():: {},\n          // Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.\n          withWeight(weight):: self + { weight: weight },\n          mixin:: {\n            // A node selector term, associated with the corresponding weight.\n            preference:: {\n              local __preferenceMixin(preference) = { preference+: preference },\n              mixinInstance(preference):: __preferenceMixin(preference),\n              // A list of node selector requirements by node's labels.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __preferenceMixin({ matchExpressions: matchExpressions }) else __preferenceMixin({ matchExpressions: [matchExpressions] }),\n              // A list of node selector requirements by node's labels.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __preferenceMixin({ matchExpressions+: matchExpressions }) else __preferenceMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.core.v1.nodeSelectorRequirement,\n              // A list of node selector requirements by node's fields.\n              withMatchFields(matchFields):: self + if std.type(matchFields) == 'array' then __preferenceMixin({ matchFields: matchFields }) else __preferenceMixin({ matchFields: [matchFields] }),\n              // A list of node selector requirements by node's fields.\n              withMatchFieldsMixin(matchFields):: self + if std.type(matchFields) == 'array' then __preferenceMixin({ matchFields+: matchFields }) else __preferenceMixin({ matchFields+: [matchFields] }),\n              matchFieldsType:: hidden.core.v1.nodeSelectorRequirement,\n            },\n            preferenceType:: hidden.core.v1.nodeSelectorTerm,\n          },\n        },\n        // Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.\n        probe:: {\n          new():: {},\n          // Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.\n          withFailureThreshold(failureThreshold):: self + { failureThreshold: failureThreshold },\n          // Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\n          withInitialDelaySeconds(initialDelaySeconds):: self + { initialDelaySeconds: initialDelaySeconds },\n          // How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.\n          withPeriodSeconds(periodSeconds):: self + { periodSeconds: periodSeconds },\n          // Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.\n          withSuccessThreshold(successThreshold):: self + { successThreshold: successThreshold },\n          // Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\n          withTimeoutSeconds(timeoutSeconds):: self + { timeoutSeconds: timeoutSeconds },\n          mixin:: {\n            // One and only one of the following should be specified. Exec specifies the action to take.\n            exec:: {\n              local __execMixin(exec) = { exec+: exec },\n              mixinInstance(exec):: __execMixin(exec),\n              // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n              withCommand(command):: self + if std.type(command) == 'array' then __execMixin({ command: command }) else __execMixin({ command: [command] }),\n              // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n              withCommandMixin(command):: self + if std.type(command) == 'array' then __execMixin({ command+: command }) else __execMixin({ command+: [command] }),\n            },\n            execType:: hidden.core.v1.execAction,\n            // HTTPGet specifies the http request to perform.\n            httpGet:: {\n              local __httpGetMixin(httpGet) = { httpGet+: httpGet },\n              mixinInstance(httpGet):: __httpGetMixin(httpGet),\n              // Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.\n              withHost(host):: self + __httpGetMixin({ host: host }),\n              // Custom headers to set in the request. HTTP allows repeated headers.\n              withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == 'array' then __httpGetMixin({ httpHeaders: httpHeaders }) else __httpGetMixin({ httpHeaders: [httpHeaders] }),\n              // Custom headers to set in the request. HTTP allows repeated headers.\n              withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == 'array' then __httpGetMixin({ httpHeaders+: httpHeaders }) else __httpGetMixin({ httpHeaders+: [httpHeaders] }),\n              httpHeadersType:: hidden.core.v1.httpHeader,\n              // Path to access on the HTTP server.\n              withPath(path):: self + __httpGetMixin({ path: path }),\n              // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n              withPort(port):: self + __httpGetMixin({ port: port }),\n              // Scheme to use for connecting to the host. Defaults to HTTP.\n              withScheme(scheme):: self + __httpGetMixin({ scheme: scheme }),\n            },\n            httpGetType:: hidden.core.v1.httpGetAction,\n            // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported\n            tcpSocket:: {\n              local __tcpSocketMixin(tcpSocket) = { tcpSocket+: tcpSocket },\n              mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket),\n              // Optional: Host name to connect to, defaults to the pod IP.\n              withHost(host):: self + __tcpSocketMixin({ host: host }),\n              // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n              withPort(port):: self + __tcpSocketMixin({ port: port }),\n            },\n            tcpSocketType:: hidden.core.v1.tcpSocketAction,\n          },\n        },\n        // Represents a projected volume source\n        projectedVolumeSource:: {\n          new():: {},\n          // Mode bits to use on created files by default. Must be a value between 0 and 0777. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n          withDefaultMode(defaultMode):: self + { defaultMode: defaultMode },\n          // list of volume projections\n          withSources(sources):: self + if std.type(sources) == 'array' then { sources: sources } else { sources: [sources] },\n          // list of volume projections\n          withSourcesMixin(sources):: self + if std.type(sources) == 'array' then { sources+: sources } else { sources+: [sources] },\n          sourcesType:: hidden.core.v1.volumeProjection,\n          mixin:: {},\n        },\n        // Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling.\n        quobyteVolumeSource:: {\n          new():: {},\n          // Group to map volume access to Default is no group\n          withGroup(group):: self + { group: group },\n          // ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          // Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes\n          withRegistry(registry):: self + { registry: registry },\n          // User to map volume access to Defaults to serivceaccount user\n          withUser(user):: self + { user: user },\n          // Volume is a string that references an already created Quobyte volume by name.\n          withVolume(volume):: self + { volume: volume },\n          mixin:: {},\n        },\n        // Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.\n        rbdPersistentVolumeSource:: {\n          new():: {},\n          // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd\n          withFsType(fsType):: self + { fsType: fsType },\n          // The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n          withImage(image):: self + { image: image },\n          // Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n          withKeyring(keyring):: self + { keyring: keyring },\n          // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n          withMonitors(monitors):: self + if std.type(monitors) == 'array' then { monitors: monitors } else { monitors: [monitors] },\n          // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n          withMonitorsMixin(monitors):: self + if std.type(monitors) == 'array' then { monitors+: monitors } else { monitors+: [monitors] },\n          // The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n          withPool(pool):: self + { pool: pool },\n          // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          // The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n          withUser(user):: self + { user: user },\n          mixin:: {\n            // SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n            secretRef:: {\n              local __secretRefMixin(secretRef) = { secretRef+: secretRef },\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // Name is unique within a namespace to reference a secret resource.\n              withName(name):: self + __secretRefMixin({ name: name }),\n              // Namespace defines the space within which the secret name must be unique.\n              withNamespace(namespace):: self + __secretRefMixin({ namespace: namespace }),\n            },\n            secretRefType:: hidden.core.v1.secretReference,\n          },\n        },\n        // Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.\n        rbdVolumeSource:: {\n          new():: {},\n          // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd\n          withFsType(fsType):: self + { fsType: fsType },\n          // The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n          withImage(image):: self + { image: image },\n          // Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n          withKeyring(keyring):: self + { keyring: keyring },\n          // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n          withMonitors(monitors):: self + if std.type(monitors) == 'array' then { monitors: monitors } else { monitors: [monitors] },\n          // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n          withMonitorsMixin(monitors):: self + if std.type(monitors) == 'array' then { monitors+: monitors } else { monitors+: [monitors] },\n          // The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n          withPool(pool):: self + { pool: pool },\n          // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          // The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n          withUser(user):: self + { user: user },\n          mixin:: {\n            // SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n            secretRef:: {\n              local __secretRefMixin(secretRef) = { secretRef+: secretRef },\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __secretRefMixin({ name: name }),\n            },\n            secretRefType:: hidden.core.v1.localObjectReference,\n          },\n        },\n        // ReplicationControllerCondition describes the state of a replication controller at a certain point.\n        replicationControllerCondition:: {\n          new():: {},\n          // The last time the condition transitioned from one status to another.\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // A human readable message indicating details about the transition.\n          withMessage(message):: self + { message: message },\n          // The reason for the condition's last transition.\n          withReason(reason):: self + { reason: reason },\n          // Status of the condition, one of True, False, Unknown.\n          withStatus(status):: self + { status: status },\n          // Type of replication controller condition.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // ReplicationControllerList is a collection of replication controllers.\n        replicationControllerList:: {\n          new(items=''):: self.withItems(items),\n          // List of replication controllers. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // List of replication controllers. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.replicationController,\n          mixin:: {},\n        },\n        // ReplicationControllerSpec is the specification of a replication controller.\n        replicationControllerSpec:: {\n          new():: {},\n          // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n          withMinReadySeconds(minReadySeconds):: self + { minReadySeconds: minReadySeconds },\n          // Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller\n          withReplicas(replicas):: self + { replicas: replicas },\n          // Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n          withSelector(selector):: self + { selector: selector },\n          // Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n          withSelectorMixin(selector):: self + { selector+: selector },\n          mixin:: {\n            // Template is the object that describes the pod that will be created if insufficient replicas are detected. This takes precedence over a TemplateRef. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\n            template:: {\n              local __templateMixin(template) = { template+: template },\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n        },\n        // ReplicationControllerStatus represents the current status of a replication controller.\n        replicationControllerStatus:: {\n          new():: {},\n          // The number of available replicas (ready for at least minReadySeconds) for this replication controller.\n          withAvailableReplicas(availableReplicas):: self + { availableReplicas: availableReplicas },\n          // Represents the latest available observations of a replication controller's current state.\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // Represents the latest available observations of a replication controller's current state.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.core.v1.replicationControllerCondition,\n          // The number of pods that have labels matching the labels of the pod template of the replication controller.\n          withFullyLabeledReplicas(fullyLabeledReplicas):: self + { fullyLabeledReplicas: fullyLabeledReplicas },\n          // ObservedGeneration reflects the generation of the most recently observed replication controller.\n          withObservedGeneration(observedGeneration):: self + { observedGeneration: observedGeneration },\n          // The number of ready replicas for this replication controller.\n          withReadyReplicas(readyReplicas):: self + { readyReplicas: readyReplicas },\n          // Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller\n          withReplicas(replicas):: self + { replicas: replicas },\n          mixin:: {},\n        },\n        // ResourceFieldSelector represents container resources (cpu, memory) and their output format\n        resourceFieldSelector:: {\n          new():: {},\n          // Container name: required for volumes, optional for env vars\n          withContainerName(containerName):: self + { containerName: containerName },\n          // Required: resource to select\n          withResource(resource):: self + { resource: resource },\n          mixin:: {\n            // Specifies the output format of the exposed resources, defaults to \"1\"\n            divisor:: {\n              local __divisorMixin(divisor) = { divisor+: divisor },\n              mixinInstance(divisor):: __divisorMixin(divisor),\n            },\n            divisorType:: hidden.core.resource.quantity,\n          },\n        },\n        // ResourceQuotaList is a list of ResourceQuota items.\n        resourceQuotaList:: {\n          new(items=''):: self.withItems(items),\n          // Items is a list of ResourceQuota objects. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is a list of ResourceQuota objects. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.resourceQuota,\n          mixin:: {},\n        },\n        // ResourceQuotaSpec defines the desired hard limits to enforce for Quota.\n        resourceQuotaSpec:: {\n          new():: {},\n          // hard is the set of desired hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/\n          withHard(hard):: self + { hard: hard },\n          // hard is the set of desired hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/\n          withHardMixin(hard):: self + { hard+: hard },\n          // A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects.\n          withScopes(scopes):: self + if std.type(scopes) == 'array' then { scopes: scopes } else { scopes: [scopes] },\n          // A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects.\n          withScopesMixin(scopes):: self + if std.type(scopes) == 'array' then { scopes+: scopes } else { scopes+: [scopes] },\n          mixin:: {\n            // scopeSelector is also a collection of filters like scopes that must match each object tracked by a quota but expressed using ScopeSelectorOperator in combination with possible values. For a resource to match, both scopes AND scopeSelector (if specified in spec), must be matched.\n            scopeSelector:: {\n              local __scopeSelectorMixin(scopeSelector) = { scopeSelector+: scopeSelector },\n              mixinInstance(scopeSelector):: __scopeSelectorMixin(scopeSelector),\n              // A list of scope selector requirements by scope of the resources.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __scopeSelectorMixin({ matchExpressions: matchExpressions }) else __scopeSelectorMixin({ matchExpressions: [matchExpressions] }),\n              // A list of scope selector requirements by scope of the resources.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __scopeSelectorMixin({ matchExpressions+: matchExpressions }) else __scopeSelectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.core.v1.scopedResourceSelectorRequirement,\n            },\n            scopeSelectorType:: hidden.core.v1.scopeSelector,\n          },\n        },\n        // ResourceQuotaStatus defines the enforced hard limits and observed use.\n        resourceQuotaStatus:: {\n          new():: {},\n          // Hard is the set of enforced hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/\n          withHard(hard):: self + { hard: hard },\n          // Hard is the set of enforced hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/\n          withHardMixin(hard):: self + { hard+: hard },\n          // Used is the current observed total usage of the resource in the namespace.\n          withUsed(used):: self + { used: used },\n          // Used is the current observed total usage of the resource in the namespace.\n          withUsedMixin(used):: self + { used+: used },\n          mixin:: {},\n        },\n        // ResourceRequirements describes the compute resource requirements.\n        resourceRequirements:: {\n          new():: {},\n          // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n          withLimits(limits):: self + { limits: limits },\n          // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n          withLimitsMixin(limits):: self + { limits+: limits },\n          // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n          withRequests(requests):: self + { requests: requests },\n          // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n          withRequestsMixin(requests):: self + { requests+: requests },\n          mixin:: {},\n        },\n        // ScaleIOPersistentVolumeSource represents a persistent ScaleIO volume\n        scaleIoPersistentVolumeSource:: {\n          new():: {},\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n          withFsType(fsType):: self + { fsType: fsType },\n          // The host address of the ScaleIO API Gateway.\n          withGateway(gateway):: self + { gateway: gateway },\n          // The name of the ScaleIO Protection Domain for the configured storage.\n          withProtectionDomain(protectionDomain):: self + { protectionDomain: protectionDomain },\n          // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          // Flag to enable/disable SSL communication with Gateway, default false\n          withSslEnabled(sslEnabled):: self + { sslEnabled: sslEnabled },\n          // Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned.\n          withStorageMode(storageMode):: self + { storageMode: storageMode },\n          // The ScaleIO Storage Pool associated with the protection domain.\n          withStoragePool(storagePool):: self + { storagePool: storagePool },\n          // The name of the storage system as configured in ScaleIO.\n          withSystem(system):: self + { system: system },\n          // The name of a volume already created in the ScaleIO system that is associated with this volume source.\n          withVolumeName(volumeName):: self + { volumeName: volumeName },\n          mixin:: {\n            // SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.\n            secretRef:: {\n              local __secretRefMixin(secretRef) = { secretRef+: secretRef },\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // Name is unique within a namespace to reference a secret resource.\n              withName(name):: self + __secretRefMixin({ name: name }),\n              // Namespace defines the space within which the secret name must be unique.\n              withNamespace(namespace):: self + __secretRefMixin({ namespace: namespace }),\n            },\n            secretRefType:: hidden.core.v1.secretReference,\n          },\n        },\n        // ScaleIOVolumeSource represents a persistent ScaleIO volume\n        scaleIoVolumeSource:: {\n          new():: {},\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n          withFsType(fsType):: self + { fsType: fsType },\n          // The host address of the ScaleIO API Gateway.\n          withGateway(gateway):: self + { gateway: gateway },\n          // The name of the ScaleIO Protection Domain for the configured storage.\n          withProtectionDomain(protectionDomain):: self + { protectionDomain: protectionDomain },\n          // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          // Flag to enable/disable SSL communication with Gateway, default false\n          withSslEnabled(sslEnabled):: self + { sslEnabled: sslEnabled },\n          // Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned.\n          withStorageMode(storageMode):: self + { storageMode: storageMode },\n          // The ScaleIO Storage Pool associated with the protection domain.\n          withStoragePool(storagePool):: self + { storagePool: storagePool },\n          // The name of the storage system as configured in ScaleIO.\n          withSystem(system):: self + { system: system },\n          // The name of a volume already created in the ScaleIO system that is associated with this volume source.\n          withVolumeName(volumeName):: self + { volumeName: volumeName },\n          mixin:: {\n            // SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.\n            secretRef:: {\n              local __secretRefMixin(secretRef) = { secretRef+: secretRef },\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __secretRefMixin({ name: name }),\n            },\n            secretRefType:: hidden.core.v1.localObjectReference,\n          },\n        },\n        // A scope selector represents the AND of the selectors represented by the scoped-resource selector requirements.\n        scopeSelector:: {\n          new():: {},\n          // A list of scope selector requirements by scope of the resources.\n          withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then { matchExpressions: matchExpressions } else { matchExpressions: [matchExpressions] },\n          // A list of scope selector requirements by scope of the resources.\n          withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then { matchExpressions+: matchExpressions } else { matchExpressions+: [matchExpressions] },\n          matchExpressionsType:: hidden.core.v1.scopedResourceSelectorRequirement,\n          mixin:: {},\n        },\n        // A scoped-resource selector requirement is a selector that contains values, a scope name, and an operator that relates the scope name and values.\n        scopedResourceSelectorRequirement:: {\n          new():: {},\n          // Represents a scope's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist.\n          withOperator(operator):: self + { operator: operator },\n          // The name of the scope that the selector applies to.\n          withScopeName(scopeName):: self + { scopeName: scopeName },\n          // An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.\n          withValues(values):: self + if std.type(values) == 'array' then { values: values } else { values: [values] },\n          // An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.\n          withValuesMixin(values):: self + if std.type(values) == 'array' then { values+: values } else { values+: [values] },\n          mixin:: {},\n        },\n        // SELinuxOptions are the labels to be applied to the container\n        seLinuxOptions:: {\n          new():: {},\n          // Level is SELinux level label that applies to the container.\n          withLevel(level):: self + { level: level },\n          // Role is a SELinux role label that applies to the container.\n          withRole(role):: self + { role: role },\n          // Type is a SELinux type label that applies to the container.\n          withType(type):: self + { type: type },\n          // User is a SELinux user label that applies to the container.\n          withUser(user):: self + { user: user },\n          mixin:: {},\n        },\n        // SecretEnvSource selects a Secret to populate the environment variables with.\n        //\n        // The contents of the target Secret's Data field will represent the key-value pairs as environment variables.\n        secretEnvSource:: {\n          new():: {},\n          // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n          withName(name):: self + { name: name },\n          // Specify whether the Secret must be defined\n          withOptional(optional):: self + { optional: optional },\n          mixin:: {},\n        },\n        // SecretKeySelector selects a key of a Secret.\n        secretKeySelector:: {\n          new():: {},\n          // The key of the secret to select from.  Must be a valid secret key.\n          withKey(key):: self + { key: key },\n          // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n          withName(name):: self + { name: name },\n          // Specify whether the Secret or it's key must be defined\n          withOptional(optional):: self + { optional: optional },\n          mixin:: {},\n        },\n        // SecretList is a list of Secret.\n        secretList:: {\n          new(items=''):: self.withItems(items),\n          // Items is a list of secret objects. More info: https://kubernetes.io/docs/concepts/configuration/secret\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is a list of secret objects. More info: https://kubernetes.io/docs/concepts/configuration/secret\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.secret,\n          mixin:: {},\n        },\n        // Adapts a secret into a projected volume.\n        //\n        // The contents of the target Secret's Data field will be presented in a projected volume as files using the keys in the Data field as the file names. Note that this is identical to a secret volume source without the default mode.\n        secretProjection:: {\n          new():: {},\n          // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.keyToPath,\n          // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n          withName(name):: self + { name: name },\n          // Specify whether the Secret or its key must be defined\n          withOptional(optional):: self + { optional: optional },\n          mixin:: {},\n        },\n        // SecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace\n        secretReference:: {\n          new():: {},\n          // Name is unique within a namespace to reference a secret resource.\n          withName(name):: self + { name: name },\n          // Namespace defines the space within which the secret name must be unique.\n          withNamespace(namespace):: self + { namespace: namespace },\n          mixin:: {},\n        },\n        // Adapts a Secret into a volume.\n        //\n        // The contents of the target Secret's Data field will be presented in a volume as files using the keys in the Data field as the file names. Secret volumes support ownership management and SELinux relabeling.\n        secretVolumeSource:: {\n          new():: {},\n          // Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n          withDefaultMode(defaultMode):: self + { defaultMode: defaultMode },\n          // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.keyToPath,\n          // Specify whether the Secret or it's keys must be defined\n          withOptional(optional):: self + { optional: optional },\n          // Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret\n          withSecretName(secretName):: self + { secretName: secretName },\n          mixin:: {},\n        },\n        // SecurityContext holds security configuration that will be applied to a container. Some fields are present in both SecurityContext and PodSecurityContext.  When both are set, the values in SecurityContext take precedence.\n        securityContext:: {\n          new():: {},\n          // AllowPrivilegeEscalation controls whether a process can gain more privileges than its parent process. This bool directly controls if the no_new_privs flag will be set on the container process. AllowPrivilegeEscalation is true always when the container is: 1) run as Privileged 2) has CAP_SYS_ADMIN\n          withAllowPrivilegeEscalation(allowPrivilegeEscalation):: self + { allowPrivilegeEscalation: allowPrivilegeEscalation },\n          // Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false.\n          withPrivileged(privileged):: self + { privileged: privileged },\n          // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n          withRunAsGroup(runAsGroup):: self + { runAsGroup: runAsGroup },\n          // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n          withRunAsNonRoot(runAsNonRoot):: self + { runAsNonRoot: runAsNonRoot },\n          // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n          withRunAsUser(runAsUser):: self + { runAsUser: runAsUser },\n          mixin:: {\n            // The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime.\n            capabilities:: {\n              local __capabilitiesMixin(capabilities) = { capabilities+: capabilities },\n              mixinInstance(capabilities):: __capabilitiesMixin(capabilities),\n              // Added capabilities\n              withAdd(add):: self + if std.type(add) == 'array' then __capabilitiesMixin({ add: add }) else __capabilitiesMixin({ add: [add] }),\n              // Added capabilities\n              withAddMixin(add):: self + if std.type(add) == 'array' then __capabilitiesMixin({ add+: add }) else __capabilitiesMixin({ add+: [add] }),\n              // Removed capabilities\n              withDrop(drop):: self + if std.type(drop) == 'array' then __capabilitiesMixin({ drop: drop }) else __capabilitiesMixin({ drop: [drop] }),\n              // Removed capabilities\n              withDropMixin(drop):: self + if std.type(drop) == 'array' then __capabilitiesMixin({ drop+: drop }) else __capabilitiesMixin({ drop+: [drop] }),\n            },\n            capabilitiesType:: hidden.core.v1.capabilities,\n            // The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n            seLinuxOptions:: {\n              local __seLinuxOptionsMixin(seLinuxOptions) = { seLinuxOptions+: seLinuxOptions },\n              mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n              // Level is SELinux level label that applies to the container.\n              withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n              // Role is a SELinux role label that applies to the container.\n              withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n              // Type is a SELinux type label that applies to the container.\n              withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n              // User is a SELinux user label that applies to the container.\n              withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n            },\n            seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n          },\n        },\n        // ServiceAccountList is a list of ServiceAccount objects\n        serviceAccountList:: {\n          new(items=''):: self.withItems(items),\n          // List of ServiceAccounts. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // List of ServiceAccounts. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.serviceAccount,\n          mixin:: {},\n        },\n        // ServiceAccountTokenProjection represents a projected service account token volume. This projection can be used to insert a service account token into the pods runtime filesystem for use against APIs (Kubernetes API Server or otherwise).\n        serviceAccountTokenProjection:: {\n          new():: {},\n          // Audience is the intended audience of the token. A recipient of a token must identify itself with an identifier specified in the audience of the token, and otherwise should reject the token. The audience defaults to the identifier of the apiserver.\n          withAudience(audience):: self + { audience: audience },\n          // ExpirationSeconds is the requested duration of validity of the service account token. As the token approaches expiration, the kubelet volume plugin will proactively rotate the service account token. The kubelet will start trying to rotate the token if the token is older than 80 percent of its time to live or if the token is older than 24 hours.Defaults to 1 hour and must be at least 10 minutes.\n          withExpirationSeconds(expirationSeconds):: self + { expirationSeconds: expirationSeconds },\n          // Path is the path relative to the mount point of the file to project the token into.\n          withPath(path):: self + { path: path },\n          mixin:: {},\n        },\n        // ServiceList holds a list of services.\n        serviceList:: {\n          new(items=''):: self.withItems(items),\n          // List of services\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // List of services\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.core.v1.service,\n          mixin:: {},\n        },\n        // ServicePort contains information on service's port.\n        servicePort:: {\n          new(port='', targetPort=''):: self.withPort(port).withTargetPort(targetPort),\n          newNamed(name='', port='', targetPort=''):: self.withName(name).withPort(port).withTargetPort(targetPort),\n          // The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. This maps to the 'Name' field in EndpointPort objects. Optional if only one ServicePort is defined on this service.\n          withName(name):: self + { name: name },\n          // The port on each node on which this service is exposed when type=NodePort or LoadBalancer. Usually assigned by the system. If specified, it will be allocated to the service if unused or else creation of the service will fail. Default is to auto-allocate a port if the ServiceType of this Service requires one. More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport\n          withNodePort(nodePort):: self + { nodePort: nodePort },\n          // The port that will be exposed by this service.\n          withPort(port):: self + { port: port },\n          // The IP protocol for this port. Supports \"TCP\" and \"UDP\". Default is TCP.\n          withProtocol(protocol):: self + { protocol: protocol },\n          // Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod's container ports. If this is not specified, the value of the 'port' field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the 'port' field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service\n          withTargetPort(targetPort):: self + { targetPort: targetPort },\n          mixin:: {},\n        },\n        // ServiceSpec describes the attributes that a user creates on a service.\n        serviceSpec:: {\n          new():: {},\n          // clusterIP is the IP address of the service and is usually assigned randomly by the master. If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail. This field can not be changed through updates. Valid values are \"None\", empty string (\"\"), or a valid IP address. \"None\" can be specified for headless services when proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\n          withClusterIp(clusterIp):: self + { clusterIP: clusterIp },\n          // externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service.  These IPs are not managed by Kubernetes.  The user is responsible for ensuring that traffic arrives at a node with this IP.  A common example is external load-balancers that are not part of the Kubernetes system.\n          withExternalIps(externalIps):: self + if std.type(externalIps) == 'array' then { externalIPs: externalIps } else { externalIPs: [externalIps] },\n          // externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service.  These IPs are not managed by Kubernetes.  The user is responsible for ensuring that traffic arrives at a node with this IP.  A common example is external load-balancers that are not part of the Kubernetes system.\n          withExternalIpsMixin(externalIps):: self + if std.type(externalIps) == 'array' then { externalIPs+: externalIps } else { externalIPs+: [externalIps] },\n          // externalName is the external reference that kubedns or equivalent will return as a CNAME record for this service. No proxying will be involved. Must be a valid RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) and requires Type to be ExternalName.\n          withExternalName(externalName):: self + { externalName: externalName },\n          // externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. \"Local\" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. \"Cluster\" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading.\n          withExternalTrafficPolicy(externalTrafficPolicy):: self + { externalTrafficPolicy: externalTrafficPolicy },\n          // healthCheckNodePort specifies the healthcheck nodePort for the service. If not specified, HealthCheckNodePort is created by the service api backend with the allocated nodePort. Will use user-specified nodePort value if specified by the client. Only effects when Type is set to LoadBalancer and ExternalTrafficPolicy is set to Local.\n          withHealthCheckNodePort(healthCheckNodePort):: self + { healthCheckNodePort: healthCheckNodePort },\n          // Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.\n          withLoadBalancerIp(loadBalancerIp):: self + { loadBalancerIP: loadBalancerIp },\n          // If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature.\" More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/\n          withLoadBalancerSourceRanges(loadBalancerSourceRanges):: self + if std.type(loadBalancerSourceRanges) == 'array' then { loadBalancerSourceRanges: loadBalancerSourceRanges } else { loadBalancerSourceRanges: [loadBalancerSourceRanges] },\n          // If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature.\" More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/\n          withLoadBalancerSourceRangesMixin(loadBalancerSourceRanges):: self + if std.type(loadBalancerSourceRanges) == 'array' then { loadBalancerSourceRanges+: loadBalancerSourceRanges } else { loadBalancerSourceRanges+: [loadBalancerSourceRanges] },\n          // The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\n          withPorts(ports):: self + if std.type(ports) == 'array' then { ports: ports } else { ports: [ports] },\n          // The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\n          withPortsMixin(ports):: self + if std.type(ports) == 'array' then { ports+: ports } else { ports+: [ports] },\n          portsType:: hidden.core.v1.servicePort,\n          // publishNotReadyAddresses, when set to true, indicates that DNS implementations must publish the notReadyAddresses of subsets for the Endpoints associated with the Service. The default value is false. The primary use case for setting this field is to use a StatefulSet's Headless Service to propagate SRV records for its Pods without respect to their readiness for purpose of peer discovery.\n          withPublishNotReadyAddresses(publishNotReadyAddresses):: self + { publishNotReadyAddresses: publishNotReadyAddresses },\n          // Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/\n          withSelector(selector):: self + { selector: selector },\n          // Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/\n          withSelectorMixin(selector):: self + { selector+: selector },\n          // Supports \"ClientIP\" and \"None\". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\n          withSessionAffinity(sessionAffinity):: self + { sessionAffinity: sessionAffinity },\n          // type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. \"ExternalName\" maps to the specified externalName. \"ClusterIP\" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object. If clusterIP is \"None\", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a stable IP. \"NodePort\" builds on ClusterIP and allocates a port on every node which routes to the clusterIP. \"LoadBalancer\" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types\n          withType(type):: self + { type: type },\n          mixin:: {\n            // sessionAffinityConfig contains the configurations of session affinity.\n            sessionAffinityConfig:: {\n              local __sessionAffinityConfigMixin(sessionAffinityConfig) = { sessionAffinityConfig+: sessionAffinityConfig },\n              mixinInstance(sessionAffinityConfig):: __sessionAffinityConfigMixin(sessionAffinityConfig),\n              // clientIP contains the configurations of Client IP based session affinity.\n              clientIp:: {\n                local __clientIpMixin(clientIp) = __sessionAffinityConfigMixin({ clientIp+: clientIp }),\n                mixinInstance(clientIp):: __clientIpMixin(clientIp),\n                // timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be >0 && <=86400(for 1 day) if ServiceAffinity == \"ClientIP\". Default value is 10800(for 3 hours).\n                withTimeoutSeconds(timeoutSeconds):: self + __clientIpMixin({ timeoutSeconds: timeoutSeconds }),\n              },\n              clientIPType:: hidden.core.v1.clientIpConfig,\n            },\n            sessionAffinityConfigType:: hidden.core.v1.sessionAffinityConfig,\n          },\n        },\n        // ServiceStatus represents the current status of a service.\n        serviceStatus:: {\n          new():: {},\n          mixin:: {\n            // LoadBalancer contains the current status of the load-balancer, if one is present.\n            loadBalancer:: {\n              local __loadBalancerMixin(loadBalancer) = { loadBalancer+: loadBalancer },\n              mixinInstance(loadBalancer):: __loadBalancerMixin(loadBalancer),\n              // Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.\n              withIngress(ingress):: self + if std.type(ingress) == 'array' then __loadBalancerMixin({ ingress: ingress }) else __loadBalancerMixin({ ingress: [ingress] }),\n              // Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.\n              withIngressMixin(ingress):: self + if std.type(ingress) == 'array' then __loadBalancerMixin({ ingress+: ingress }) else __loadBalancerMixin({ ingress+: [ingress] }),\n              ingressType:: hidden.core.v1.loadBalancerIngress,\n            },\n            loadBalancerType:: hidden.core.v1.loadBalancerStatus,\n          },\n        },\n        // SessionAffinityConfig represents the configurations of session affinity.\n        sessionAffinityConfig:: {\n          new():: {},\n          mixin:: {\n            // clientIP contains the configurations of Client IP based session affinity.\n            clientIp:: {\n              local __clientIpMixin(clientIp) = { clientIp+: clientIp },\n              mixinInstance(clientIp):: __clientIpMixin(clientIp),\n              // timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be >0 && <=86400(for 1 day) if ServiceAffinity == \"ClientIP\". Default value is 10800(for 3 hours).\n              withTimeoutSeconds(timeoutSeconds):: self + __clientIpMixin({ timeoutSeconds: timeoutSeconds }),\n            },\n            clientIPType:: hidden.core.v1.clientIpConfig,\n          },\n        },\n        // Represents a StorageOS persistent volume resource.\n        storageOsPersistentVolumeSource:: {\n          new():: {},\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n          withFsType(fsType):: self + { fsType: fsType },\n          // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          // VolumeName is the human-readable name of the StorageOS volume.  Volume names are only unique within a namespace.\n          withVolumeName(volumeName):: self + { volumeName: volumeName },\n          // VolumeNamespace specifies the scope of the volume within StorageOS.  If no namespace is specified then the Pod's namespace will be used.  This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.\n          withVolumeNamespace(volumeNamespace):: self + { volumeNamespace: volumeNamespace },\n          mixin:: {\n            // SecretRef specifies the secret to use for obtaining the StorageOS API credentials.  If not specified, default values will be attempted.\n            secretRef:: {\n              local __secretRefMixin(secretRef) = { secretRef+: secretRef },\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\n              withFieldPath(fieldPath):: self + __secretRefMixin({ fieldPath: fieldPath }),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __secretRefMixin({ name: name }),\n              // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n              withNamespace(namespace):: self + __secretRefMixin({ namespace: namespace }),\n              // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n              withResourceVersion(resourceVersion):: self + __secretRefMixin({ resourceVersion: resourceVersion }),\n              // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n              withUid(uid):: self + __secretRefMixin({ uid: uid }),\n            },\n            secretRefType:: hidden.core.v1.objectReference,\n          },\n        },\n        // Represents a StorageOS persistent volume resource.\n        storageOsVolumeSource:: {\n          new():: {},\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n          withFsType(fsType):: self + { fsType: fsType },\n          // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          // VolumeName is the human-readable name of the StorageOS volume.  Volume names are only unique within a namespace.\n          withVolumeName(volumeName):: self + { volumeName: volumeName },\n          // VolumeNamespace specifies the scope of the volume within StorageOS.  If no namespace is specified then the Pod's namespace will be used.  This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.\n          withVolumeNamespace(volumeNamespace):: self + { volumeNamespace: volumeNamespace },\n          mixin:: {\n            // SecretRef specifies the secret to use for obtaining the StorageOS API credentials.  If not specified, default values will be attempted.\n            secretRef:: {\n              local __secretRefMixin(secretRef) = { secretRef+: secretRef },\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __secretRefMixin({ name: name }),\n            },\n            secretRefType:: hidden.core.v1.localObjectReference,\n          },\n        },\n        // Sysctl defines a kernel parameter to be set\n        sysctl:: {\n          new():: {},\n          // Name of a property to set\n          withName(name):: self + { name: name },\n          // Value of a property to set\n          withValue(value):: self + { value: value },\n          mixin:: {},\n        },\n        // The node this Taint is attached to has the \"effect\" on any pod that does not tolerate the Taint.\n        taint:: {\n          new():: {},\n          // Required. The effect of the taint on pods that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute.\n          withEffect(effect):: self + { effect: effect },\n          // Required. The taint key to be applied to a node.\n          withKey(key):: self + { key: key },\n          // TimeAdded represents the time at which the taint was added. It is only written for NoExecute taints.\n          withTimeAdded(timeAdded):: self + { timeAdded: timeAdded },\n          // Required. The taint value corresponding to the taint key.\n          withValue(value):: self + { value: value },\n          mixin:: {},\n        },\n        // TCPSocketAction describes an action based on opening a socket\n        tcpSocketAction:: {\n          new():: {},\n          // Optional: Host name to connect to, defaults to the pod IP.\n          withHost(host):: self + { host: host },\n          // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n          withPort(port):: self + { port: port },\n          mixin:: {},\n        },\n        // The pod this Toleration is attached to tolerates any taint that matches the triple <key,value,effect> using the matching operator <operator>.\n        toleration:: {\n          new():: {},\n          // Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.\n          withEffect(effect):: self + { effect: effect },\n          // Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.\n          withKey(key):: self + { key: key },\n          // Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.\n          withOperator(operator):: self + { operator: operator },\n          // TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.\n          withTolerationSeconds(tolerationSeconds):: self + { tolerationSeconds: tolerationSeconds },\n          // Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.\n          withValue(value):: self + { value: value },\n          mixin:: {},\n        },\n        // A topology selector requirement is a selector that matches given label. This is an alpha feature and may change in the future.\n        topologySelectorLabelRequirement:: {\n          new():: {},\n          // The label key that the selector applies to.\n          withKey(key):: self + { key: key },\n          // An array of string values. One value must match the label to be selected. Each entry in Values is ORed.\n          withValues(values):: self + if std.type(values) == 'array' then { values: values } else { values: [values] },\n          // An array of string values. One value must match the label to be selected. Each entry in Values is ORed.\n          withValuesMixin(values):: self + if std.type(values) == 'array' then { values+: values } else { values+: [values] },\n          mixin:: {},\n        },\n        // A topology selector term represents the result of label queries. A null or empty topology selector term matches no objects. The requirements of them are ANDed. It provides a subset of functionality as NodeSelectorTerm. This is an alpha feature and may change in the future.\n        topologySelectorTerm:: {\n          new():: {},\n          // A list of topology selector requirements by labels.\n          withMatchLabelExpressions(matchLabelExpressions):: self + if std.type(matchLabelExpressions) == 'array' then { matchLabelExpressions: matchLabelExpressions } else { matchLabelExpressions: [matchLabelExpressions] },\n          // A list of topology selector requirements by labels.\n          withMatchLabelExpressionsMixin(matchLabelExpressions):: self + if std.type(matchLabelExpressions) == 'array' then { matchLabelExpressions+: matchLabelExpressions } else { matchLabelExpressions+: [matchLabelExpressions] },\n          matchLabelExpressionsType:: hidden.core.v1.topologySelectorLabelRequirement,\n          mixin:: {},\n        },\n        // Volume represents a named volume in a pod that may be accessed by any container in the pod.\n        volume:: {\n          fromConfigMap(name='', configMapName='', configMapItems=''):: self.withName(name) + self.mixin.configMap.withItems(configMapItems).withName(configMapName),\n          fromEmptyDir(name='', emptyDir={}):: self.withName(name) + self.mixin.emptyDir.mixinInstance(emptyDir),\n          fromPersistentVolumeClaim(name='', emptyDir=''):: self.withName(name) + self.mixin.persistentVolumeClaim.withClaimName(emptyDir),\n          fromHostPath(name='', hostPath=''):: self.withName(name) + self.mixin.hostPath.withPath(hostPath),\n          fromSecret(name='', secretName=''):: self.withName(name) + self.mixin.secret.withSecretName(secretName),\n          // Volume's name. Must be a DNS_LABEL and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n          withName(name):: self + { name: name },\n          mixin:: {\n            // AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n            awsElasticBlockStore:: {\n              local __awsElasticBlockStoreMixin(awsElasticBlockStore) = { awsElasticBlockStore+: awsElasticBlockStore },\n              mixinInstance(awsElasticBlockStore):: __awsElasticBlockStoreMixin(awsElasticBlockStore),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n              withFsType(fsType):: self + __awsElasticBlockStoreMixin({ fsType: fsType }),\n              // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty).\n              withPartition(partition):: self + __awsElasticBlockStoreMixin({ partition: partition }),\n              // Specify \"true\" to force and set the ReadOnly property in VolumeMounts to \"true\". If omitted, the default is \"false\". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n              withReadOnly(readOnly):: self + __awsElasticBlockStoreMixin({ readOnly: readOnly }),\n              // Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n              withVolumeId(volumeId):: self + __awsElasticBlockStoreMixin({ volumeID: volumeId }),\n            },\n            awsElasticBlockStoreType:: hidden.core.v1.awsElasticBlockStoreVolumeSource,\n            // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.\n            azureDisk:: {\n              local __azureDiskMixin(azureDisk) = { azureDisk+: azureDisk },\n              mixinInstance(azureDisk):: __azureDiskMixin(azureDisk),\n              // Host Caching mode: None, Read Only, Read Write.\n              withCachingMode(cachingMode):: self + __azureDiskMixin({ cachingMode: cachingMode }),\n              // The Name of the data disk in the blob storage\n              withDiskName(diskName):: self + __azureDiskMixin({ diskName: diskName }),\n              // The URI the data disk in the blob storage\n              withDiskUri(diskUri):: self + __azureDiskMixin({ diskURI: diskUri }),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __azureDiskMixin({ fsType: fsType }),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __azureDiskMixin({ readOnly: readOnly }),\n            },\n            azureDiskType:: hidden.core.v1.azureDiskVolumeSource,\n            // AzureFile represents an Azure File Service mount on the host and bind mount to the pod.\n            azureFile:: {\n              local __azureFileMixin(azureFile) = { azureFile+: azureFile },\n              mixinInstance(azureFile):: __azureFileMixin(azureFile),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __azureFileMixin({ readOnly: readOnly }),\n              // the name of secret that contains Azure Storage Account Name and Key\n              withSecretName(secretName):: self + __azureFileMixin({ secretName: secretName }),\n              // Share Name\n              withShareName(shareName):: self + __azureFileMixin({ shareName: shareName }),\n            },\n            azureFileType:: hidden.core.v1.azureFileVolumeSource,\n            // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime\n            cephfs:: {\n              local __cephfsMixin(cephfs) = { cephfs+: cephfs },\n              mixinInstance(cephfs):: __cephfsMixin(cephfs),\n              // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withMonitors(monitors):: self + if std.type(monitors) == 'array' then __cephfsMixin({ monitors: monitors }) else __cephfsMixin({ monitors: [monitors] }),\n              // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withMonitorsMixin(monitors):: self + if std.type(monitors) == 'array' then __cephfsMixin({ monitors+: monitors }) else __cephfsMixin({ monitors+: [monitors] }),\n              // Optional: Used as the mounted root, rather than the full Ceph tree, default is /\n              withPath(path):: self + __cephfsMixin({ path: path }),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withReadOnly(readOnly):: self + __cephfsMixin({ readOnly: readOnly }),\n              // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withSecretFile(secretFile):: self + __cephfsMixin({ secretFile: secretFile }),\n              // Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __cephfsMixin({ secretRef+: secretRef }),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({ name: name }),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n              // Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withUser(user):: self + __cephfsMixin({ user: user }),\n            },\n            cephfsType:: hidden.core.v1.cephFsVolumeSource,\n            // Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n            cinder:: {\n              local __cinderMixin(cinder) = { cinder+: cinder },\n              mixinInstance(cinder):: __cinderMixin(cinder),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n              withFsType(fsType):: self + __cinderMixin({ fsType: fsType }),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n              withReadOnly(readOnly):: self + __cinderMixin({ readOnly: readOnly }),\n              // Optional: points to a secret object containing parameters used to connect to OpenStack.\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __cinderMixin({ secretRef+: secretRef }),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({ name: name }),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n              // volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n              withVolumeId(volumeId):: self + __cinderMixin({ volumeID: volumeId }),\n            },\n            cinderType:: hidden.core.v1.cinderVolumeSource,\n            // ConfigMap represents a configMap that should populate this volume\n            configMap:: {\n              local __configMapMixin(configMap) = { configMap+: configMap },\n              mixinInstance(configMap):: __configMapMixin(configMap),\n              // Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n              withDefaultMode(defaultMode):: self + __configMapMixin({ defaultMode: defaultMode }),\n              // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n              withItems(items):: self + if std.type(items) == 'array' then __configMapMixin({ items: items }) else __configMapMixin({ items: [items] }),\n              // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n              withItemsMixin(items):: self + if std.type(items) == 'array' then __configMapMixin({ items+: items }) else __configMapMixin({ items+: [items] }),\n              itemsType:: hidden.core.v1.keyToPath,\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __configMapMixin({ name: name }),\n              // Specify whether the ConfigMap or it's keys must be defined\n              withOptional(optional):: self + __configMapMixin({ optional: optional }),\n            },\n            configMapType:: hidden.core.v1.configMapVolumeSource,\n            // DownwardAPI represents downward API about the pod that should populate this volume\n            downwardApi:: {\n              local __downwardApiMixin(downwardApi) = { downwardApi+: downwardApi },\n              mixinInstance(downwardApi):: __downwardApiMixin(downwardApi),\n              // Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n              withDefaultMode(defaultMode):: self + __downwardApiMixin({ defaultMode: defaultMode }),\n              // Items is a list of downward API volume file\n              withItems(items):: self + if std.type(items) == 'array' then __downwardApiMixin({ items: items }) else __downwardApiMixin({ items: [items] }),\n              // Items is a list of downward API volume file\n              withItemsMixin(items):: self + if std.type(items) == 'array' then __downwardApiMixin({ items+: items }) else __downwardApiMixin({ items+: [items] }),\n              itemsType:: hidden.core.v1.downwardApiVolumeFile,\n            },\n            downwardAPIType:: hidden.core.v1.downwardApiVolumeSource,\n            // EmptyDir represents a temporary directory that shares a pod's lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir\n            emptyDir:: {\n              local __emptyDirMixin(emptyDir) = { emptyDir+: emptyDir },\n              mixinInstance(emptyDir):: __emptyDirMixin(emptyDir),\n              // What type of storage medium should back this directory. The default is \"\" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir\n              withMedium(medium):: self + __emptyDirMixin({ medium: medium }),\n              // Total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir\n              sizeLimit:: {\n                local __sizeLimitMixin(sizeLimit) = __emptyDirMixin({ sizeLimit+: sizeLimit }),\n                mixinInstance(sizeLimit):: __sizeLimitMixin(sizeLimit),\n              },\n              sizeLimitType:: hidden.core.resource.quantity,\n            },\n            emptyDirType:: hidden.core.v1.emptyDirVolumeSource,\n            // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.\n            fc:: {\n              local __fcMixin(fc) = { fc+: fc },\n              mixinInstance(fc):: __fcMixin(fc),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __fcMixin({ fsType: fsType }),\n              // Optional: FC target lun number\n              withLun(lun):: self + __fcMixin({ lun: lun }),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __fcMixin({ readOnly: readOnly }),\n              // Optional: FC target worldwide names (WWNs)\n              withTargetWwns(targetWwns):: self + if std.type(targetWwns) == 'array' then __fcMixin({ targetWWNs: targetWwns }) else __fcMixin({ targetWWNs: [targetWwns] }),\n              // Optional: FC target worldwide names (WWNs)\n              withTargetWwnsMixin(targetWwns):: self + if std.type(targetWwns) == 'array' then __fcMixin({ targetWWNs+: targetWwns }) else __fcMixin({ targetWWNs+: [targetWwns] }),\n              // Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.\n              withWwids(wwids):: self + if std.type(wwids) == 'array' then __fcMixin({ wwids: wwids }) else __fcMixin({ wwids: [wwids] }),\n              // Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.\n              withWwidsMixin(wwids):: self + if std.type(wwids) == 'array' then __fcMixin({ wwids+: wwids }) else __fcMixin({ wwids+: [wwids] }),\n            },\n            fcType:: hidden.core.v1.fcVolumeSource,\n            // FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.\n            flexVolume:: {\n              local __flexVolumeMixin(flexVolume) = { flexVolume+: flexVolume },\n              mixinInstance(flexVolume):: __flexVolumeMixin(flexVolume),\n              // Driver is the name of the driver to use for this volume.\n              withDriver(driver):: self + __flexVolumeMixin({ driver: driver }),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.\n              withFsType(fsType):: self + __flexVolumeMixin({ fsType: fsType }),\n              // Optional: Extra command options if any.\n              withOptions(options):: self + __flexVolumeMixin({ options: options }),\n              // Optional: Extra command options if any.\n              withOptionsMixin(options):: self + __flexVolumeMixin({ options+: options }),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __flexVolumeMixin({ readOnly: readOnly }),\n              // Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __flexVolumeMixin({ secretRef+: secretRef }),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({ name: name }),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n            },\n            flexVolumeType:: hidden.core.v1.flexVolumeSource,\n            // Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running\n            flocker:: {\n              local __flockerMixin(flocker) = { flocker+: flocker },\n              mixinInstance(flocker):: __flockerMixin(flocker),\n              // Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated\n              withDatasetName(datasetName):: self + __flockerMixin({ datasetName: datasetName }),\n              // UUID of the dataset. This is unique identifier of a Flocker dataset\n              withDatasetUuid(datasetUuid):: self + __flockerMixin({ datasetUUID: datasetUuid }),\n            },\n            flockerType:: hidden.core.v1.flockerVolumeSource,\n            // GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n            gcePersistentDisk:: {\n              local __gcePersistentDiskMixin(gcePersistentDisk) = { gcePersistentDisk+: gcePersistentDisk },\n              mixinInstance(gcePersistentDisk):: __gcePersistentDiskMixin(gcePersistentDisk),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withFsType(fsType):: self + __gcePersistentDiskMixin({ fsType: fsType }),\n              // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withPartition(partition):: self + __gcePersistentDiskMixin({ partition: partition }),\n              // Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withPdName(pdName):: self + __gcePersistentDiskMixin({ pdName: pdName }),\n              // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withReadOnly(readOnly):: self + __gcePersistentDiskMixin({ readOnly: readOnly }),\n            },\n            gcePersistentDiskType:: hidden.core.v1.gcePersistentDiskVolumeSource,\n            // GitRepo represents a git repository at a particular revision. DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container.\n            gitRepo:: {\n              local __gitRepoMixin(gitRepo) = { gitRepo+: gitRepo },\n              mixinInstance(gitRepo):: __gitRepoMixin(gitRepo),\n              // Target directory name. Must not contain or start with '..'.  If '.' is supplied, the volume directory will be the git repository.  Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name.\n              withDirectory(directory):: self + __gitRepoMixin({ directory: directory }),\n              // Repository URL\n              withRepository(repository):: self + __gitRepoMixin({ repository: repository }),\n              // Commit hash for the specified revision.\n              withRevision(revision):: self + __gitRepoMixin({ revision: revision }),\n            },\n            gitRepoType:: hidden.core.v1.gitRepoVolumeSource,\n            // Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md\n            glusterfs:: {\n              local __glusterfsMixin(glusterfs) = { glusterfs+: glusterfs },\n              mixinInstance(glusterfs):: __glusterfsMixin(glusterfs),\n              // EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n              withEndpoints(endpoints):: self + __glusterfsMixin({ endpoints: endpoints }),\n              // Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n              withPath(path):: self + __glusterfsMixin({ path: path }),\n              // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n              withReadOnly(readOnly):: self + __glusterfsMixin({ readOnly: readOnly }),\n            },\n            glusterfsType:: hidden.core.v1.glusterfsVolumeSource,\n            // HostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\n            hostPath:: {\n              local __hostPathMixin(hostPath) = { hostPath+: hostPath },\n              mixinInstance(hostPath):: __hostPathMixin(hostPath),\n              // Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\n              withPath(path):: self + __hostPathMixin({ path: path }),\n              // Type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\n              withType(type):: self + __hostPathMixin({ type: type }),\n            },\n            hostPathType:: hidden.core.v1.hostPathVolumeSource,\n            // ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://releases.k8s.io/HEAD/examples/volumes/iscsi/README.md\n            iscsi:: {\n              local __iscsiMixin(iscsi) = { iscsi+: iscsi },\n              mixinInstance(iscsi):: __iscsiMixin(iscsi),\n              // whether support iSCSI Discovery CHAP authentication\n              withChapAuthDiscovery(chapAuthDiscovery):: self + __iscsiMixin({ chapAuthDiscovery: chapAuthDiscovery }),\n              // whether support iSCSI Session CHAP authentication\n              withChapAuthSession(chapAuthSession):: self + __iscsiMixin({ chapAuthSession: chapAuthSession }),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi\n              withFsType(fsType):: self + __iscsiMixin({ fsType: fsType }),\n              // Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface <target portal>:<volume name> will be created for the connection.\n              withInitiatorName(initiatorName):: self + __iscsiMixin({ initiatorName: initiatorName }),\n              // Target iSCSI Qualified Name.\n              withIqn(iqn):: self + __iscsiMixin({ iqn: iqn }),\n              // iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).\n              withIscsiInterface(iscsiInterface):: self + __iscsiMixin({ iscsiInterface: iscsiInterface }),\n              // iSCSI Target Lun number.\n              withLun(lun):: self + __iscsiMixin({ lun: lun }),\n              // iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n              withPortals(portals):: self + if std.type(portals) == 'array' then __iscsiMixin({ portals: portals }) else __iscsiMixin({ portals: [portals] }),\n              // iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n              withPortalsMixin(portals):: self + if std.type(portals) == 'array' then __iscsiMixin({ portals+: portals }) else __iscsiMixin({ portals+: [portals] }),\n              // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.\n              withReadOnly(readOnly):: self + __iscsiMixin({ readOnly: readOnly }),\n              // CHAP Secret for iSCSI target and initiator authentication\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __iscsiMixin({ secretRef+: secretRef }),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({ name: name }),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n              // iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n              withTargetPortal(targetPortal):: self + __iscsiMixin({ targetPortal: targetPortal }),\n            },\n            iscsiType:: hidden.core.v1.iscsiVolumeSource,\n            // NFS represents an NFS mount on the host that shares a pod's lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n            nfs:: {\n              local __nfsMixin(nfs) = { nfs+: nfs },\n              mixinInstance(nfs):: __nfsMixin(nfs),\n              // Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n              withPath(path):: self + __nfsMixin({ path: path }),\n              // ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n              withReadOnly(readOnly):: self + __nfsMixin({ readOnly: readOnly }),\n              // Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n              withServer(server):: self + __nfsMixin({ server: server }),\n            },\n            nfsType:: hidden.core.v1.nfsVolumeSource,\n            // PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\n            persistentVolumeClaim:: {\n              local __persistentVolumeClaimMixin(persistentVolumeClaim) = { persistentVolumeClaim+: persistentVolumeClaim },\n              mixinInstance(persistentVolumeClaim):: __persistentVolumeClaimMixin(persistentVolumeClaim),\n              // ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\n              withClaimName(claimName):: self + __persistentVolumeClaimMixin({ claimName: claimName }),\n              // Will force the ReadOnly setting in VolumeMounts. Default false.\n              withReadOnly(readOnly):: self + __persistentVolumeClaimMixin({ readOnly: readOnly }),\n            },\n            persistentVolumeClaimType:: hidden.core.v1.persistentVolumeClaimVolumeSource,\n            // PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine\n            photonPersistentDisk:: {\n              local __photonPersistentDiskMixin(photonPersistentDisk) = { photonPersistentDisk+: photonPersistentDisk },\n              mixinInstance(photonPersistentDisk):: __photonPersistentDiskMixin(photonPersistentDisk),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __photonPersistentDiskMixin({ fsType: fsType }),\n              // ID that identifies Photon Controller persistent disk\n              withPdId(pdId):: self + __photonPersistentDiskMixin({ pdID: pdId }),\n            },\n            photonPersistentDiskType:: hidden.core.v1.photonPersistentDiskVolumeSource,\n            // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine\n            portworxVolume:: {\n              local __portworxVolumeMixin(portworxVolume) = { portworxVolume+: portworxVolume },\n              mixinInstance(portworxVolume):: __portworxVolumeMixin(portworxVolume),\n              // FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __portworxVolumeMixin({ fsType: fsType }),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __portworxVolumeMixin({ readOnly: readOnly }),\n              // VolumeID uniquely identifies a Portworx volume\n              withVolumeId(volumeId):: self + __portworxVolumeMixin({ volumeID: volumeId }),\n            },\n            portworxVolumeType:: hidden.core.v1.portworxVolumeSource,\n            // Items for all in one resources secrets, configmaps, and downward API\n            projected:: {\n              local __projectedMixin(projected) = { projected+: projected },\n              mixinInstance(projected):: __projectedMixin(projected),\n              // Mode bits to use on created files by default. Must be a value between 0 and 0777. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n              withDefaultMode(defaultMode):: self + __projectedMixin({ defaultMode: defaultMode }),\n              // list of volume projections\n              withSources(sources):: self + if std.type(sources) == 'array' then __projectedMixin({ sources: sources }) else __projectedMixin({ sources: [sources] }),\n              // list of volume projections\n              withSourcesMixin(sources):: self + if std.type(sources) == 'array' then __projectedMixin({ sources+: sources }) else __projectedMixin({ sources+: [sources] }),\n              sourcesType:: hidden.core.v1.volumeProjection,\n            },\n            projectedType:: hidden.core.v1.projectedVolumeSource,\n            // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime\n            quobyte:: {\n              local __quobyteMixin(quobyte) = { quobyte+: quobyte },\n              mixinInstance(quobyte):: __quobyteMixin(quobyte),\n              // Group to map volume access to Default is no group\n              withGroup(group):: self + __quobyteMixin({ group: group }),\n              // ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.\n              withReadOnly(readOnly):: self + __quobyteMixin({ readOnly: readOnly }),\n              // Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes\n              withRegistry(registry):: self + __quobyteMixin({ registry: registry }),\n              // User to map volume access to Defaults to serivceaccount user\n              withUser(user):: self + __quobyteMixin({ user: user }),\n              // Volume is a string that references an already created Quobyte volume by name.\n              withVolume(volume):: self + __quobyteMixin({ volume: volume }),\n            },\n            quobyteType:: hidden.core.v1.quobyteVolumeSource,\n            // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md\n            rbd:: {\n              local __rbdMixin(rbd) = { rbd+: rbd },\n              mixinInstance(rbd):: __rbdMixin(rbd),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd\n              withFsType(fsType):: self + __rbdMixin({ fsType: fsType }),\n              // The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withImage(image):: self + __rbdMixin({ image: image }),\n              // Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withKeyring(keyring):: self + __rbdMixin({ keyring: keyring }),\n              // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withMonitors(monitors):: self + if std.type(monitors) == 'array' then __rbdMixin({ monitors: monitors }) else __rbdMixin({ monitors: [monitors] }),\n              // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withMonitorsMixin(monitors):: self + if std.type(monitors) == 'array' then __rbdMixin({ monitors+: monitors }) else __rbdMixin({ monitors+: [monitors] }),\n              // The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withPool(pool):: self + __rbdMixin({ pool: pool }),\n              // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withReadOnly(readOnly):: self + __rbdMixin({ readOnly: readOnly }),\n              // SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __rbdMixin({ secretRef+: secretRef }),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({ name: name }),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n              // The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withUser(user):: self + __rbdMixin({ user: user }),\n            },\n            rbdType:: hidden.core.v1.rbdVolumeSource,\n            // ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.\n            scaleIo:: {\n              local __scaleIoMixin(scaleIo) = { scaleIo+: scaleIo },\n              mixinInstance(scaleIo):: __scaleIoMixin(scaleIo),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __scaleIoMixin({ fsType: fsType }),\n              // The host address of the ScaleIO API Gateway.\n              withGateway(gateway):: self + __scaleIoMixin({ gateway: gateway }),\n              // The name of the ScaleIO Protection Domain for the configured storage.\n              withProtectionDomain(protectionDomain):: self + __scaleIoMixin({ protectionDomain: protectionDomain }),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __scaleIoMixin({ readOnly: readOnly }),\n              // SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __scaleIoMixin({ secretRef+: secretRef }),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({ name: name }),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n              // Flag to enable/disable SSL communication with Gateway, default false\n              withSslEnabled(sslEnabled):: self + __scaleIoMixin({ sslEnabled: sslEnabled }),\n              // Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned.\n              withStorageMode(storageMode):: self + __scaleIoMixin({ storageMode: storageMode }),\n              // The ScaleIO Storage Pool associated with the protection domain.\n              withStoragePool(storagePool):: self + __scaleIoMixin({ storagePool: storagePool }),\n              // The name of the storage system as configured in ScaleIO.\n              withSystem(system):: self + __scaleIoMixin({ system: system }),\n              // The name of a volume already created in the ScaleIO system that is associated with this volume source.\n              withVolumeName(volumeName):: self + __scaleIoMixin({ volumeName: volumeName }),\n            },\n            scaleIOType:: hidden.core.v1.scaleIoVolumeSource,\n            // Secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret\n            secret:: {\n              local __secretMixin(secret) = { secret+: secret },\n              mixinInstance(secret):: __secretMixin(secret),\n              // Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n              withDefaultMode(defaultMode):: self + __secretMixin({ defaultMode: defaultMode }),\n              // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n              withItems(items):: self + if std.type(items) == 'array' then __secretMixin({ items: items }) else __secretMixin({ items: [items] }),\n              // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n              withItemsMixin(items):: self + if std.type(items) == 'array' then __secretMixin({ items+: items }) else __secretMixin({ items+: [items] }),\n              itemsType:: hidden.core.v1.keyToPath,\n              // Specify whether the Secret or it's keys must be defined\n              withOptional(optional):: self + __secretMixin({ optional: optional }),\n              // Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret\n              withSecretName(secretName):: self + __secretMixin({ secretName: secretName }),\n            },\n            secretType:: hidden.core.v1.secretVolumeSource,\n            // StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.\n            storageos:: {\n              local __storageosMixin(storageos) = { storageos+: storageos },\n              mixinInstance(storageos):: __storageosMixin(storageos),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __storageosMixin({ fsType: fsType }),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __storageosMixin({ readOnly: readOnly }),\n              // SecretRef specifies the secret to use for obtaining the StorageOS API credentials.  If not specified, default values will be attempted.\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __storageosMixin({ secretRef+: secretRef }),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({ name: name }),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n              // VolumeName is the human-readable name of the StorageOS volume.  Volume names are only unique within a namespace.\n              withVolumeName(volumeName):: self + __storageosMixin({ volumeName: volumeName }),\n              // VolumeNamespace specifies the scope of the volume within StorageOS.  If no namespace is specified then the Pod's namespace will be used.  This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.\n              withVolumeNamespace(volumeNamespace):: self + __storageosMixin({ volumeNamespace: volumeNamespace }),\n            },\n            storageosType:: hidden.core.v1.storageOsVolumeSource,\n            // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine\n            vsphereVolume:: {\n              local __vsphereVolumeMixin(vsphereVolume) = { vsphereVolume+: vsphereVolume },\n              mixinInstance(vsphereVolume):: __vsphereVolumeMixin(vsphereVolume),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __vsphereVolumeMixin({ fsType: fsType }),\n              // Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.\n              withStoragePolicyId(storagePolicyId):: self + __vsphereVolumeMixin({ storagePolicyID: storagePolicyId }),\n              // Storage Policy Based Management (SPBM) profile name.\n              withStoragePolicyName(storagePolicyName):: self + __vsphereVolumeMixin({ storagePolicyName: storagePolicyName }),\n              // Path that identifies vSphere volume vmdk\n              withVolumePath(volumePath):: self + __vsphereVolumeMixin({ volumePath: volumePath }),\n            },\n            vsphereVolumeType:: hidden.core.v1.vsphereVirtualDiskVolumeSource,\n          },\n        },\n        // volumeDevice describes a mapping of a raw block device within a container.\n        volumeDevice:: {\n          new():: {},\n          // devicePath is the path inside of the container that the device will be mapped to.\n          withDevicePath(devicePath):: self + { devicePath: devicePath },\n          // name must match the name of a persistentVolumeClaim in the pod\n          withName(name):: self + { name: name },\n          mixin:: {},\n        },\n        // VolumeMount describes a mounting of a Volume within a container.\n        volumeMount:: {\n          new(name='', mountPath='', readOnly=false):: self.withMountPath(mountPath).withName(name).withReadOnly(readOnly),\n          // Path within the container at which the volume should be mounted.  Must not contain ':'.\n          withMountPath(mountPath):: self + { mountPath: mountPath },\n          // mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10.\n          withMountPropagation(mountPropagation):: self + { mountPropagation: mountPropagation },\n          // This must match the Name of a Volume.\n          withName(name):: self + { name: name },\n          // Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false.\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          // Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root).\n          withSubPath(subPath):: self + { subPath: subPath },\n          mixin:: {},\n        },\n        // VolumeNodeAffinity defines constraints that limit what nodes this volume can be accessed from.\n        volumeNodeAffinity:: {\n          new():: {},\n          mixin:: {\n            // Required specifies hard node constraints that must be met.\n            required:: {\n              local __requiredMixin(required) = { required+: required },\n              mixinInstance(required):: __requiredMixin(required),\n              // Required. A list of node selector terms. The terms are ORed.\n              withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n              // Required. A list of node selector terms. The terms are ORed.\n              withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n              nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n            },\n            requiredType:: hidden.core.v1.nodeSelector,\n          },\n        },\n        // Projection that may be projected along with other supported volume types\n        volumeProjection:: {\n          new():: {},\n          mixin:: {\n            // information about the configMap data to project\n            configMap:: {\n              local __configMapMixin(configMap) = { configMap+: configMap },\n              mixinInstance(configMap):: __configMapMixin(configMap),\n              // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n              withItems(items):: self + if std.type(items) == 'array' then __configMapMixin({ items: items }) else __configMapMixin({ items: [items] }),\n              // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n              withItemsMixin(items):: self + if std.type(items) == 'array' then __configMapMixin({ items+: items }) else __configMapMixin({ items+: [items] }),\n              itemsType:: hidden.core.v1.keyToPath,\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __configMapMixin({ name: name }),\n              // Specify whether the ConfigMap or it's keys must be defined\n              withOptional(optional):: self + __configMapMixin({ optional: optional }),\n            },\n            configMapType:: hidden.core.v1.configMapProjection,\n            // information about the downwardAPI data to project\n            downwardApi:: {\n              local __downwardApiMixin(downwardApi) = { downwardApi+: downwardApi },\n              mixinInstance(downwardApi):: __downwardApiMixin(downwardApi),\n              // Items is a list of DownwardAPIVolume file\n              withItems(items):: self + if std.type(items) == 'array' then __downwardApiMixin({ items: items }) else __downwardApiMixin({ items: [items] }),\n              // Items is a list of DownwardAPIVolume file\n              withItemsMixin(items):: self + if std.type(items) == 'array' then __downwardApiMixin({ items+: items }) else __downwardApiMixin({ items+: [items] }),\n              itemsType:: hidden.core.v1.downwardApiVolumeFile,\n            },\n            downwardAPIType:: hidden.core.v1.downwardApiProjection,\n            // information about the secret data to project\n            secret:: {\n              local __secretMixin(secret) = { secret+: secret },\n              mixinInstance(secret):: __secretMixin(secret),\n              // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n              withItems(items):: self + if std.type(items) == 'array' then __secretMixin({ items: items }) else __secretMixin({ items: [items] }),\n              // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n              withItemsMixin(items):: self + if std.type(items) == 'array' then __secretMixin({ items+: items }) else __secretMixin({ items+: [items] }),\n              itemsType:: hidden.core.v1.keyToPath,\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __secretMixin({ name: name }),\n              // Specify whether the Secret or its key must be defined\n              withOptional(optional):: self + __secretMixin({ optional: optional }),\n            },\n            secretType:: hidden.core.v1.secretProjection,\n            // information about the serviceAccountToken data to project\n            serviceAccountToken:: {\n              local __serviceAccountTokenMixin(serviceAccountToken) = { serviceAccountToken+: serviceAccountToken },\n              mixinInstance(serviceAccountToken):: __serviceAccountTokenMixin(serviceAccountToken),\n              // Audience is the intended audience of the token. A recipient of a token must identify itself with an identifier specified in the audience of the token, and otherwise should reject the token. The audience defaults to the identifier of the apiserver.\n              withAudience(audience):: self + __serviceAccountTokenMixin({ audience: audience }),\n              // ExpirationSeconds is the requested duration of validity of the service account token. As the token approaches expiration, the kubelet volume plugin will proactively rotate the service account token. The kubelet will start trying to rotate the token if the token is older than 80 percent of its time to live or if the token is older than 24 hours.Defaults to 1 hour and must be at least 10 minutes.\n              withExpirationSeconds(expirationSeconds):: self + __serviceAccountTokenMixin({ expirationSeconds: expirationSeconds }),\n              // Path is the path relative to the mount point of the file to project the token into.\n              withPath(path):: self + __serviceAccountTokenMixin({ path: path }),\n            },\n            serviceAccountTokenType:: hidden.core.v1.serviceAccountTokenProjection,\n          },\n        },\n        // Represents a vSphere volume resource.\n        vsphereVirtualDiskVolumeSource:: {\n          new():: {},\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n          withFsType(fsType):: self + { fsType: fsType },\n          // Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.\n          withStoragePolicyId(storagePolicyId):: self + { storagePolicyID: storagePolicyId },\n          // Storage Policy Based Management (SPBM) profile name.\n          withStoragePolicyName(storagePolicyName):: self + { storagePolicyName: storagePolicyName },\n          // Path that identifies vSphere volume vmdk\n          withVolumePath(volumePath):: self + { volumePath: volumePath },\n          mixin:: {},\n        },\n        // The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)\n        weightedPodAffinityTerm:: {\n          new():: {},\n          // weight associated with matching the corresponding podAffinityTerm, in the range 1-100.\n          withWeight(weight):: self + { weight: weight },\n          mixin:: {\n            // Required. A pod affinity term, associated with the corresponding weight.\n            podAffinityTerm:: {\n              local __podAffinityTermMixin(podAffinityTerm) = { podAffinityTerm+: podAffinityTerm },\n              mixinInstance(podAffinityTerm):: __podAffinityTermMixin(podAffinityTerm),\n              // A label query over a set of resources, in this case pods.\n              labelSelector:: {\n                local __labelSelectorMixin(labelSelector) = __podAffinityTermMixin({ labelSelector+: labelSelector }),\n                mixinInstance(labelSelector):: __labelSelectorMixin(labelSelector),\n                // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __labelSelectorMixin({ matchExpressions: matchExpressions }) else __labelSelectorMixin({ matchExpressions: [matchExpressions] }),\n                // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __labelSelectorMixin({ matchExpressions+: matchExpressions }) else __labelSelectorMixin({ matchExpressions+: [matchExpressions] }),\n                matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n                // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                withMatchLabels(matchLabels):: self + __labelSelectorMixin({ matchLabels: matchLabels }),\n                // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                withMatchLabelsMixin(matchLabels):: self + __labelSelectorMixin({ matchLabels+: matchLabels }),\n              },\n              labelSelectorType:: hidden.meta.v1.labelSelector,\n              // namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"\n              withNamespaces(namespaces):: self + if std.type(namespaces) == 'array' then __podAffinityTermMixin({ namespaces: namespaces }) else __podAffinityTermMixin({ namespaces: [namespaces] }),\n              // namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"\n              withNamespacesMixin(namespaces):: self + if std.type(namespaces) == 'array' then __podAffinityTermMixin({ namespaces+: namespaces }) else __podAffinityTermMixin({ namespaces+: [namespaces] }),\n              // This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.\n              withTopologyKey(topologyKey):: self + __podAffinityTermMixin({ topologyKey: topologyKey }),\n            },\n            podAffinityTermType:: hidden.core.v1.podAffinityTerm,\n          },\n        },\n      },\n    },\n    events:: {\n      v1beta1:: {\n        local apiVersion = { apiVersion: 'events/v1beta1' },\n        // EventList is a list of Event objects.\n        eventList:: {\n          new():: {},\n          // Items is a list of schema objects.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is a list of schema objects.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.events.v1beta1.event,\n          mixin:: {},\n        },\n        // EventSeries contain information on series of events, i.e. thing that was/is happening continuously for some time.\n        eventSeries:: {\n          new():: {},\n          // Number of occurrences in this series up to the last heartbeat time\n          withCount(count):: self + { count: count },\n          // Time when last Event from the series was seen before last heartbeat.\n          withLastObservedTime(lastObservedTime):: self + { lastObservedTime: lastObservedTime },\n          // Information whether this series is ongoing or finished.\n          withState(state):: self + { state: state },\n          mixin:: {},\n        },\n      },\n    },\n    extensions:: {\n      v1beta1:: {\n        local apiVersion = { apiVersion: 'extensions/v1beta1' },\n        // AllowedFlexVolume represents a single Flexvolume that is allowed to be used. Deprecated: use AllowedFlexVolume from policy API Group instead.\n        allowedFlexVolume:: {\n          new():: {},\n          // driver is the name of the Flexvolume driver.\n          withDriver(driver):: self + { driver: driver },\n          mixin:: {},\n        },\n        // AllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined. Deprecated: use AllowedHostPath from policy API Group instead.\n        allowedHostPath:: {\n          new():: {},\n          // pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n          //\n          // Examples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`\n          withPathPrefix(pathPrefix):: self + { pathPrefix: pathPrefix },\n          // when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          mixin:: {},\n        },\n        // DaemonSetCondition describes the state of a DaemonSet at a certain point.\n        daemonSetCondition:: {\n          new():: {},\n          // Last time the condition transitioned from one status to another.\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // A human readable message indicating details about the transition.\n          withMessage(message):: self + { message: message },\n          // The reason for the condition's last transition.\n          withReason(reason):: self + { reason: reason },\n          // Status of the condition, one of True, False, Unknown.\n          withStatus(status):: self + { status: status },\n          // Type of DaemonSet condition.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // DaemonSetList is a collection of daemon sets.\n        daemonSetList:: {\n          new():: {},\n          // A list of daemon sets.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // A list of daemon sets.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.extensions.v1beta1.daemonSet,\n          mixin:: {},\n        },\n        // DaemonSetSpec is the specification of a daemon set.\n        daemonSetSpec:: {\n          new():: {},\n          // The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).\n          withMinReadySeconds(minReadySeconds):: self + { minReadySeconds: minReadySeconds },\n          // The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.\n          withRevisionHistoryLimit(revisionHistoryLimit):: self + { revisionHistoryLimit: revisionHistoryLimit },\n          // DEPRECATED. A sequence number representing a specific generation of the template. Populated by the system. It can be set only during the creation.\n          withTemplateGeneration(templateGeneration):: self + { templateGeneration: templateGeneration },\n          mixin:: {\n            // A label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = { selector+: selector },\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\n            template:: {\n              local __templateMixin(template) = { template+: template },\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n            // An update strategy to replace existing DaemonSet pods with new pods.\n            updateStrategy:: {\n              local __updateStrategyMixin(updateStrategy) = { updateStrategy+: updateStrategy },\n              mixinInstance(updateStrategy):: __updateStrategyMixin(updateStrategy),\n              // Rolling update config params. Present only if type = \"RollingUpdate\".\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __updateStrategyMixin({ rollingUpdate+: rollingUpdate }),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.\n                withMaxUnavailable(maxUnavailable):: self + __rollingUpdateMixin({ maxUnavailable: maxUnavailable }),\n              },\n              rollingUpdateType:: hidden.extensions.v1beta1.rollingUpdateDaemonSet,\n              // Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is OnDelete.\n              withType(type):: self + __updateStrategyMixin({ type: type }),\n            },\n            updateStrategyType:: hidden.extensions.v1beta1.daemonSetUpdateStrategy,\n          },\n        },\n        // DaemonSetStatus represents the current status of a daemon set.\n        daemonSetStatus:: {\n          new():: {},\n          // Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.\n          withCollisionCount(collisionCount):: self + { collisionCount: collisionCount },\n          // Represents the latest available observations of a DaemonSet's current state.\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // Represents the latest available observations of a DaemonSet's current state.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.extensions.v1beta1.daemonSetCondition,\n          // The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\n          withCurrentNumberScheduled(currentNumberScheduled):: self + { currentNumberScheduled: currentNumberScheduled },\n          // The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\n          withDesiredNumberScheduled(desiredNumberScheduled):: self + { desiredNumberScheduled: desiredNumberScheduled },\n          // The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)\n          withNumberAvailable(numberAvailable):: self + { numberAvailable: numberAvailable },\n          // The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\n          withNumberMisscheduled(numberMisscheduled):: self + { numberMisscheduled: numberMisscheduled },\n          // The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.\n          withNumberReady(numberReady):: self + { numberReady: numberReady },\n          // The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)\n          withNumberUnavailable(numberUnavailable):: self + { numberUnavailable: numberUnavailable },\n          // The most recent generation observed by the daemon set controller.\n          withObservedGeneration(observedGeneration):: self + { observedGeneration: observedGeneration },\n          // The total number of nodes that are running updated daemon pod\n          withUpdatedNumberScheduled(updatedNumberScheduled):: self + { updatedNumberScheduled: updatedNumberScheduled },\n          mixin:: {},\n        },\n        daemonSetUpdateStrategy:: {\n          new():: {},\n          // Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is OnDelete.\n          withType(type):: self + { type: type },\n          mixin:: {\n            // Rolling update config params. Present only if type = \"RollingUpdate\".\n            rollingUpdate:: {\n              local __rollingUpdateMixin(rollingUpdate) = { rollingUpdate+: rollingUpdate },\n              mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n              // The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.\n              withMaxUnavailable(maxUnavailable):: self + __rollingUpdateMixin({ maxUnavailable: maxUnavailable }),\n            },\n            rollingUpdateType:: hidden.extensions.v1beta1.rollingUpdateDaemonSet,\n          },\n        },\n        // DeploymentCondition describes the state of a deployment at a certain point.\n        deploymentCondition:: {\n          new():: {},\n          // Last time the condition transitioned from one status to another.\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // The last time this condition was updated.\n          withLastUpdateTime(lastUpdateTime):: self + { lastUpdateTime: lastUpdateTime },\n          // A human readable message indicating details about the transition.\n          withMessage(message):: self + { message: message },\n          // The reason for the condition's last transition.\n          withReason(reason):: self + { reason: reason },\n          // Status of the condition, one of True, False, Unknown.\n          withStatus(status):: self + { status: status },\n          // Type of deployment condition.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // DeploymentList is a list of Deployments.\n        deploymentList:: {\n          new(items=''):: self.withItems(items),\n          // Items is the list of Deployments.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is the list of Deployments.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.extensions.v1beta1.deployment,\n          mixin:: {},\n        },\n        // DeploymentSpec is the specification of the desired behavior of the Deployment.\n        deploymentSpec:: {\n          new():: {},\n          // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n          withMinReadySeconds(minReadySeconds):: self + { minReadySeconds: minReadySeconds },\n          // Indicates that the deployment is paused and will not be processed by the deployment controller.\n          withPaused(paused):: self + { paused: paused },\n          // The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. This is not set by default.\n          withProgressDeadlineSeconds(progressDeadlineSeconds):: self + { progressDeadlineSeconds: progressDeadlineSeconds },\n          // Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.\n          withReplicas(replicas):: self + { replicas: replicas },\n          // The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified.\n          withRevisionHistoryLimit(revisionHistoryLimit):: self + { revisionHistoryLimit: revisionHistoryLimit },\n          mixin:: {\n            // DEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done.\n            rollbackTo:: {\n              local __rollbackToMixin(rollbackTo) = { rollbackTo+: rollbackTo },\n              mixinInstance(rollbackTo):: __rollbackToMixin(rollbackTo),\n              // The revision to rollback to. If set to 0, rollback to the last revision.\n              withRevision(revision):: self + __rollbackToMixin({ revision: revision }),\n            },\n            rollbackToType:: hidden.extensions.v1beta1.rollbackConfig,\n            // Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.\n            selector:: {\n              local __selectorMixin(selector) = { selector+: selector },\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // The deployment strategy to use to replace existing pods with new ones.\n            strategy:: {\n              local __strategyMixin(strategy) = { strategy+: strategy },\n              mixinInstance(strategy):: __strategyMixin(strategy),\n              // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __strategyMixin({ rollingUpdate+: rollingUpdate }),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\n                withMaxSurge(maxSurge):: self + __rollingUpdateMixin({ maxSurge: maxSurge }),\n                // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n                withMaxUnavailable(maxUnavailable):: self + __rollingUpdateMixin({ maxUnavailable: maxUnavailable }),\n              },\n              rollingUpdateType:: hidden.extensions.v1beta1.rollingUpdateDeployment,\n              // Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.\n              withType(type):: self + __strategyMixin({ type: type }),\n            },\n            strategyType:: hidden.extensions.v1beta1.deploymentStrategy,\n            // Template describes the pods that will be created.\n            template:: {\n              local __templateMixin(template) = { template+: template },\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n        },\n        // DeploymentStatus is the most recently observed status of the Deployment.\n        deploymentStatus:: {\n          new():: {},\n          // Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.\n          withAvailableReplicas(availableReplicas):: self + { availableReplicas: availableReplicas },\n          // Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.\n          withCollisionCount(collisionCount):: self + { collisionCount: collisionCount },\n          // Represents the latest available observations of a deployment's current state.\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // Represents the latest available observations of a deployment's current state.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.extensions.v1beta1.deploymentCondition,\n          // The generation observed by the deployment controller.\n          withObservedGeneration(observedGeneration):: self + { observedGeneration: observedGeneration },\n          // Total number of ready pods targeted by this deployment.\n          withReadyReplicas(readyReplicas):: self + { readyReplicas: readyReplicas },\n          // Total number of non-terminated pods targeted by this deployment (their labels match the selector).\n          withReplicas(replicas):: self + { replicas: replicas },\n          // Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.\n          withUnavailableReplicas(unavailableReplicas):: self + { unavailableReplicas: unavailableReplicas },\n          // Total number of non-terminated pods targeted by this deployment that have the desired template spec.\n          withUpdatedReplicas(updatedReplicas):: self + { updatedReplicas: updatedReplicas },\n          mixin:: {},\n        },\n        // DeploymentStrategy describes how to replace existing pods with new ones.\n        deploymentStrategy:: {\n          new():: {},\n          // Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.\n          withType(type):: self + { type: type },\n          mixin:: {\n            // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\n            rollingUpdate:: {\n              local __rollingUpdateMixin(rollingUpdate) = { rollingUpdate+: rollingUpdate },\n              mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n              // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\n              withMaxSurge(maxSurge):: self + __rollingUpdateMixin({ maxSurge: maxSurge }),\n              // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n              withMaxUnavailable(maxUnavailable):: self + __rollingUpdateMixin({ maxUnavailable: maxUnavailable }),\n            },\n            rollingUpdateType:: hidden.extensions.v1beta1.rollingUpdateDeployment,\n          },\n        },\n        // FSGroupStrategyOptions defines the strategy type and options used to create the strategy. Deprecated: use FSGroupStrategyOptions from policy API Group instead.\n        fsGroupStrategyOptions:: {\n          new():: {},\n          // ranges are the allowed ranges of fs groups.  If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.\n          withRanges(ranges):: self + if std.type(ranges) == 'array' then { ranges: ranges } else { ranges: [ranges] },\n          // ranges are the allowed ranges of fs groups.  If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.\n          withRangesMixin(ranges):: self + if std.type(ranges) == 'array' then { ranges+: ranges } else { ranges+: [ranges] },\n          rangesType:: hidden.extensions.v1beta1.idRange,\n          // rule is the strategy that will dictate what FSGroup is used in the SecurityContext.\n          withRule(rule):: self + { rule: rule },\n          mixin:: {},\n        },\n        // HostPortRange defines a range of host ports that will be enabled by a policy for pods to use.  It requires both the start and end to be defined. Deprecated: use HostPortRange from policy API Group instead.\n        hostPortRange:: {\n          new():: {},\n          // max is the end of the range, inclusive.\n          withMax(max):: self + { max: max },\n          // min is the start of the range, inclusive.\n          withMin(min):: self + { min: min },\n          mixin:: {},\n        },\n        // HTTPIngressPath associates a path regex with a backend. Incoming urls matching the path are forwarded to the backend.\n        httpIngressPath:: {\n          new():: {},\n          // Path is an extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional \"path\" part of a URL as defined by RFC 3986. Paths must begin with a '/'. If unspecified, the path defaults to a catch all sending traffic to the backend.\n          withPath(path):: self + { path: path },\n          mixin:: {\n            // Backend defines the referenced service endpoint to which the traffic will be forwarded to.\n            backend:: {\n              local __backendMixin(backend) = { backend+: backend },\n              mixinInstance(backend):: __backendMixin(backend),\n              // Specifies the name of the referenced service.\n              withServiceName(serviceName):: self + __backendMixin({ serviceName: serviceName }),\n              // Specifies the port of the referenced service.\n              withServicePort(servicePort):: self + __backendMixin({ servicePort: servicePort }),\n            },\n            backendType:: hidden.extensions.v1beta1.ingressBackend,\n          },\n        },\n        // HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http://<host>/<path>?<searchpart> -> backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'.\n        httpIngressRuleValue:: {\n          new():: {},\n          // A collection of paths that map requests to backends.\n          withPaths(paths):: self + if std.type(paths) == 'array' then { paths: paths } else { paths: [paths] },\n          // A collection of paths that map requests to backends.\n          withPathsMixin(paths):: self + if std.type(paths) == 'array' then { paths+: paths } else { paths+: [paths] },\n          pathsType:: hidden.extensions.v1beta1.httpIngressPath,\n          mixin:: {},\n        },\n        // IDRange provides a min/max of an allowed range of IDs. Deprecated: use IDRange from policy API Group instead.\n        idRange:: {\n          new():: {},\n          // max is the end of the range, inclusive.\n          withMax(max):: self + { max: max },\n          // min is the start of the range, inclusive.\n          withMin(min):: self + { min: min },\n          mixin:: {},\n        },\n        // IngressBackend describes all endpoints for a given service and port.\n        ingressBackend:: {\n          new():: {},\n          // Specifies the name of the referenced service.\n          withServiceName(serviceName):: self + { serviceName: serviceName },\n          // Specifies the port of the referenced service.\n          withServicePort(servicePort):: self + { servicePort: servicePort },\n          mixin:: {},\n        },\n        // IngressList is a collection of Ingress.\n        ingressList:: {\n          new():: {},\n          // Items is the list of Ingress.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is the list of Ingress.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.extensions.v1beta1.ingress,\n          mixin:: {},\n        },\n        // IngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue.\n        ingressRule:: {\n          new():: {},\n          // Host is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the \"host\" part of the URI as defined in the RFC: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the\n          // IP in the Spec of the parent Ingress.\n          // 2. The `:` delimiter is not respected because ports are not allowed.\n          // Currently the port of an Ingress is implicitly :80 for http and\n          // :443 for https.\n          // Both these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.\n          withHost(host):: self + { host: host },\n          mixin:: {\n            http:: {\n              local __httpMixin(http) = { http+: http },\n              mixinInstance(http):: __httpMixin(http),\n              // A collection of paths that map requests to backends.\n              withPaths(paths):: self + if std.type(paths) == 'array' then __httpMixin({ paths: paths }) else __httpMixin({ paths: [paths] }),\n              // A collection of paths that map requests to backends.\n              withPathsMixin(paths):: self + if std.type(paths) == 'array' then __httpMixin({ paths+: paths }) else __httpMixin({ paths+: [paths] }),\n              pathsType:: hidden.extensions.v1beta1.httpIngressPath,\n            },\n            httpType:: hidden.extensions.v1beta1.httpIngressRuleValue,\n          },\n        },\n        // IngressSpec describes the Ingress the user wishes to exist.\n        ingressSpec:: {\n          new():: {},\n          // A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.\n          withRules(rules):: self + if std.type(rules) == 'array' then { rules: rules } else { rules: [rules] },\n          // A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.\n          withRulesMixin(rules):: self + if std.type(rules) == 'array' then { rules+: rules } else { rules+: [rules] },\n          rulesType:: hidden.extensions.v1beta1.ingressRule,\n          // TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.\n          withTls(tls):: self + if std.type(tls) == 'array' then { tls: tls } else { tls: [tls] },\n          // TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.\n          withTlsMixin(tls):: self + if std.type(tls) == 'array' then { tls+: tls } else { tls+: [tls] },\n          tlsType:: hidden.extensions.v1beta1.ingressTls,\n          mixin:: {\n            // A default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default.\n            backend:: {\n              local __backendMixin(backend) = { backend+: backend },\n              mixinInstance(backend):: __backendMixin(backend),\n              // Specifies the name of the referenced service.\n              withServiceName(serviceName):: self + __backendMixin({ serviceName: serviceName }),\n              // Specifies the port of the referenced service.\n              withServicePort(servicePort):: self + __backendMixin({ servicePort: servicePort }),\n            },\n            backendType:: hidden.extensions.v1beta1.ingressBackend,\n          },\n        },\n        // IngressStatus describe the current state of the Ingress.\n        ingressStatus:: {\n          new():: {},\n          mixin:: {\n            // LoadBalancer contains the current status of the load-balancer.\n            loadBalancer:: {\n              local __loadBalancerMixin(loadBalancer) = { loadBalancer+: loadBalancer },\n              mixinInstance(loadBalancer):: __loadBalancerMixin(loadBalancer),\n              // Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.\n              withIngress(ingress):: self + if std.type(ingress) == 'array' then __loadBalancerMixin({ ingress: ingress }) else __loadBalancerMixin({ ingress: [ingress] }),\n              // Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.\n              withIngressMixin(ingress):: self + if std.type(ingress) == 'array' then __loadBalancerMixin({ ingress+: ingress }) else __loadBalancerMixin({ ingress+: [ingress] }),\n              ingressType:: hidden.core.v1.loadBalancerIngress,\n            },\n            loadBalancerType:: hidden.core.v1.loadBalancerStatus,\n          },\n        },\n        // IngressTLS describes the transport layer security associated with an Ingress.\n        ingressTls:: {\n          new():: {},\n          // Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.\n          withHosts(hosts):: self + if std.type(hosts) == 'array' then { hosts: hosts } else { hosts: [hosts] },\n          // Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.\n          withHostsMixin(hosts):: self + if std.type(hosts) == 'array' then { hosts+: hosts } else { hosts+: [hosts] },\n          // SecretName is the name of the secret used to terminate SSL traffic on 443. Field is left optional to allow SSL routing based on SNI hostname alone. If the SNI host in a listener conflicts with the \"Host\" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing.\n          withSecretName(secretName):: self + { secretName: secretName },\n          mixin:: {},\n        },\n        // DEPRECATED 1.9 - This group version of IPBlock is deprecated by networking/v1/IPBlock. IPBlock describes a particular CIDR (Ex. \"192.168.1.1/24\") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.\n        ipBlock:: {\n          new():: {},\n          // CIDR is a string representing the IP Block Valid examples are \"192.168.1.1/24\"\n          withCidr(cidr):: self + { cidr: cidr },\n          // Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" Except values will be rejected if they are outside the CIDR range\n          withExcept(except):: self + if std.type(except) == 'array' then { except: except } else { except: [except] },\n          // Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" Except values will be rejected if they are outside the CIDR range\n          withExceptMixin(except):: self + if std.type(except) == 'array' then { except+: except } else { except+: [except] },\n          mixin:: {},\n        },\n        // DEPRECATED 1.9 - This group version of NetworkPolicyEgressRule is deprecated by networking/v1/NetworkPolicyEgressRule. NetworkPolicyEgressRule describes a particular set of traffic that is allowed out of pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and to. This type is beta-level in 1.8\n        networkPolicyEgressRule:: {\n          new():: {},\n          // List of destination ports for outgoing traffic. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.\n          withPorts(ports):: self + if std.type(ports) == 'array' then { ports: ports } else { ports: [ports] },\n          // List of destination ports for outgoing traffic. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.\n          withPortsMixin(ports):: self + if std.type(ports) == 'array' then { ports+: ports } else { ports+: [ports] },\n          portsType:: hidden.extensions.v1beta1.networkPolicyPort,\n          // List of destinations for outgoing traffic of pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all destinations (traffic not restricted by destination). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the to list.\n          withTo(to):: self + if std.type(to) == 'array' then { to: to } else { to: [to] },\n          // List of destinations for outgoing traffic of pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all destinations (traffic not restricted by destination). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the to list.\n          withToMixin(to):: self + if std.type(to) == 'array' then { to+: to } else { to+: [to] },\n          toType:: hidden.extensions.v1beta1.networkPolicyPeer,\n          mixin:: {},\n        },\n        // DEPRECATED 1.9 - This group version of NetworkPolicyIngressRule is deprecated by networking/v1/NetworkPolicyIngressRule. This NetworkPolicyIngressRule matches traffic if and only if the traffic matches both ports AND from.\n        networkPolicyIngressRule:: {\n          new():: {},\n          // List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.\n          withFrom(from):: self + if std.type(from) == 'array' then { from: from } else { from: [from] },\n          // List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.\n          withFromMixin(from):: self + if std.type(from) == 'array' then { from+: from } else { from+: [from] },\n          fromType:: hidden.extensions.v1beta1.networkPolicyPeer,\n          // List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.\n          withPorts(ports):: self + if std.type(ports) == 'array' then { ports: ports } else { ports: [ports] },\n          // List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.\n          withPortsMixin(ports):: self + if std.type(ports) == 'array' then { ports+: ports } else { ports+: [ports] },\n          portsType:: hidden.extensions.v1beta1.networkPolicyPort,\n          mixin:: {},\n        },\n        // DEPRECATED 1.9 - This group version of NetworkPolicyList is deprecated by networking/v1/NetworkPolicyList. Network Policy List is a list of NetworkPolicy objects.\n        networkPolicyList:: {\n          new():: {},\n          // Items is a list of schema objects.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is a list of schema objects.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.extensions.v1beta1.networkPolicy,\n          mixin:: {},\n        },\n        // DEPRECATED 1.9 - This group version of NetworkPolicyPeer is deprecated by networking/v1/NetworkPolicyPeer.\n        networkPolicyPeer:: {\n          new():: {},\n          mixin:: {\n            // IPBlock defines policy on a particular IPBlock. If this field is set then neither of the other fields can be.\n            ipBlock:: {\n              local __ipBlockMixin(ipBlock) = { ipBlock+: ipBlock },\n              mixinInstance(ipBlock):: __ipBlockMixin(ipBlock),\n              // CIDR is a string representing the IP Block Valid examples are \"192.168.1.1/24\"\n              withCidr(cidr):: self + __ipBlockMixin({ cidr: cidr }),\n              // Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" Except values will be rejected if they are outside the CIDR range\n              withExcept(except):: self + if std.type(except) == 'array' then __ipBlockMixin({ except: except }) else __ipBlockMixin({ except: [except] }),\n              // Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" Except values will be rejected if they are outside the CIDR range\n              withExceptMixin(except):: self + if std.type(except) == 'array' then __ipBlockMixin({ except+: except }) else __ipBlockMixin({ except+: [except] }),\n            },\n            ipBlockType:: hidden.extensions.v1beta1.ipBlock,\n            // Selects Namespaces using cluster-scoped labels. This field follows standard label selector semantics; if present but empty, it selects all namespaces.\n            //\n            // If PodSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects all Pods in the Namespaces selected by NamespaceSelector.\n            namespaceSelector:: {\n              local __namespaceSelectorMixin(namespaceSelector) = { namespaceSelector+: namespaceSelector },\n              mixinInstance(namespaceSelector):: __namespaceSelectorMixin(namespaceSelector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __namespaceSelectorMixin({ matchExpressions: matchExpressions }) else __namespaceSelectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __namespaceSelectorMixin({ matchExpressions+: matchExpressions }) else __namespaceSelectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __namespaceSelectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __namespaceSelectorMixin({ matchLabels+: matchLabels }),\n            },\n            namespaceSelectorType:: hidden.meta.v1.labelSelector,\n            // This is a label selector which selects Pods. This field follows standard label selector semantics; if present but empty, it selects all pods.\n            //\n            // If NamespaceSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects the Pods matching PodSelector in the policy's own Namespace.\n            podSelector:: {\n              local __podSelectorMixin(podSelector) = { podSelector+: podSelector },\n              mixinInstance(podSelector):: __podSelectorMixin(podSelector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __podSelectorMixin({ matchExpressions: matchExpressions }) else __podSelectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __podSelectorMixin({ matchExpressions+: matchExpressions }) else __podSelectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __podSelectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __podSelectorMixin({ matchLabels+: matchLabels }),\n            },\n            podSelectorType:: hidden.meta.v1.labelSelector,\n          },\n        },\n        // DEPRECATED 1.9 - This group version of NetworkPolicyPort is deprecated by networking/v1/NetworkPolicyPort.\n        networkPolicyPort:: {\n          new():: {},\n          // If specified, the port on the given protocol.  This can either be a numerical or named port on a pod.  If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.\n          withPort(port):: self + { port: port },\n          // Optional.  The protocol (TCP or UDP) which traffic must match. If not specified, this field defaults to TCP.\n          withProtocol(protocol):: self + { protocol: protocol },\n          mixin:: {},\n        },\n        // DEPRECATED 1.9 - This group version of NetworkPolicySpec is deprecated by networking/v1/NetworkPolicySpec.\n        networkPolicySpec:: {\n          new():: {},\n          // List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8\n          withEgress(egress):: self + if std.type(egress) == 'array' then { egress: egress } else { egress: [egress] },\n          // List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8\n          withEgressMixin(egress):: self + if std.type(egress) == 'array' then { egress+: egress } else { egress+: [egress] },\n          egressType:: hidden.extensions.v1beta1.networkPolicyEgressRule,\n          // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default).\n          withIngress(ingress):: self + if std.type(ingress) == 'array' then { ingress: ingress } else { ingress: [ingress] },\n          // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default).\n          withIngressMixin(ingress):: self + if std.type(ingress) == 'array' then { ingress+: ingress } else { ingress+: [ingress] },\n          ingressType:: hidden.extensions.v1beta1.networkPolicyIngressRule,\n          // List of rule types that the NetworkPolicy relates to. Valid options are Ingress, Egress, or Ingress,Egress. If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8\n          withPolicyTypes(policyTypes):: self + if std.type(policyTypes) == 'array' then { policyTypes: policyTypes } else { policyTypes: [policyTypes] },\n          // List of rule types that the NetworkPolicy relates to. Valid options are Ingress, Egress, or Ingress,Egress. If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8\n          withPolicyTypesMixin(policyTypes):: self + if std.type(policyTypes) == 'array' then { policyTypes+: policyTypes } else { policyTypes+: [policyTypes] },\n          mixin:: {\n            // Selects the pods to which this NetworkPolicy object applies.  The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods.  In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.\n            podSelector:: {\n              local __podSelectorMixin(podSelector) = { podSelector+: podSelector },\n              mixinInstance(podSelector):: __podSelectorMixin(podSelector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __podSelectorMixin({ matchExpressions: matchExpressions }) else __podSelectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __podSelectorMixin({ matchExpressions+: matchExpressions }) else __podSelectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __podSelectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __podSelectorMixin({ matchLabels+: matchLabels }),\n            },\n            podSelectorType:: hidden.meta.v1.labelSelector,\n          },\n        },\n        // PodSecurityPolicyList is a list of PodSecurityPolicy objects. Deprecated: use PodSecurityPolicyList from policy API Group instead.\n        podSecurityPolicyList:: {\n          new():: {},\n          // items is a list of schema objects.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // items is a list of schema objects.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.extensions.v1beta1.podSecurityPolicy,\n          mixin:: {},\n        },\n        // PodSecurityPolicySpec defines the policy enforced. Deprecated: use PodSecurityPolicySpec from policy API Group instead.\n        podSecurityPolicySpec:: {\n          new():: {},\n          // allowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.\n          withAllowPrivilegeEscalation(allowPrivilegeEscalation):: self + { allowPrivilegeEscalation: allowPrivilegeEscalation },\n          // allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.\n          withAllowedCapabilities(allowedCapabilities):: self + if std.type(allowedCapabilities) == 'array' then { allowedCapabilities: allowedCapabilities } else { allowedCapabilities: [allowedCapabilities] },\n          // allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.\n          withAllowedCapabilitiesMixin(allowedCapabilities):: self + if std.type(allowedCapabilities) == 'array' then { allowedCapabilities+: allowedCapabilities } else { allowedCapabilities+: [allowedCapabilities] },\n          // allowedFlexVolumes is a whitelist of allowed Flexvolumes.  Empty or nil indicates that all Flexvolumes may be used.  This parameter is effective only when the usage of the Flexvolumes is allowed in the \"volumes\" field.\n          withAllowedFlexVolumes(allowedFlexVolumes):: self + if std.type(allowedFlexVolumes) == 'array' then { allowedFlexVolumes: allowedFlexVolumes } else { allowedFlexVolumes: [allowedFlexVolumes] },\n          // allowedFlexVolumes is a whitelist of allowed Flexvolumes.  Empty or nil indicates that all Flexvolumes may be used.  This parameter is effective only when the usage of the Flexvolumes is allowed in the \"volumes\" field.\n          withAllowedFlexVolumesMixin(allowedFlexVolumes):: self + if std.type(allowedFlexVolumes) == 'array' then { allowedFlexVolumes+: allowedFlexVolumes } else { allowedFlexVolumes+: [allowedFlexVolumes] },\n          allowedFlexVolumesType:: hidden.extensions.v1beta1.allowedFlexVolume,\n          // allowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.\n          withAllowedHostPaths(allowedHostPaths):: self + if std.type(allowedHostPaths) == 'array' then { allowedHostPaths: allowedHostPaths } else { allowedHostPaths: [allowedHostPaths] },\n          // allowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.\n          withAllowedHostPathsMixin(allowedHostPaths):: self + if std.type(allowedHostPaths) == 'array' then { allowedHostPaths+: allowedHostPaths } else { allowedHostPaths+: [allowedHostPaths] },\n          allowedHostPathsType:: hidden.extensions.v1beta1.allowedHostPath,\n          // allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection.\n          //\n          // Examples: e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows \"foo.bar\", \"foo.baz\", etc.\n          withAllowedUnsafeSysctls(allowedUnsafeSysctls):: self + if std.type(allowedUnsafeSysctls) == 'array' then { allowedUnsafeSysctls: allowedUnsafeSysctls } else { allowedUnsafeSysctls: [allowedUnsafeSysctls] },\n          // allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection.\n          //\n          // Examples: e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows \"foo.bar\", \"foo.baz\", etc.\n          withAllowedUnsafeSysctlsMixin(allowedUnsafeSysctls):: self + if std.type(allowedUnsafeSysctls) == 'array' then { allowedUnsafeSysctls+: allowedUnsafeSysctls } else { allowedUnsafeSysctls+: [allowedUnsafeSysctls] },\n          // defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability.  You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.\n          withDefaultAddCapabilities(defaultAddCapabilities):: self + if std.type(defaultAddCapabilities) == 'array' then { defaultAddCapabilities: defaultAddCapabilities } else { defaultAddCapabilities: [defaultAddCapabilities] },\n          // defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability.  You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.\n          withDefaultAddCapabilitiesMixin(defaultAddCapabilities):: self + if std.type(defaultAddCapabilities) == 'array' then { defaultAddCapabilities+: defaultAddCapabilities } else { defaultAddCapabilities+: [defaultAddCapabilities] },\n          // defaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.\n          withDefaultAllowPrivilegeEscalation(defaultAllowPrivilegeEscalation):: self + { defaultAllowPrivilegeEscalation: defaultAllowPrivilegeEscalation },\n          // forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\n          //\n          // Examples: e.g. \"foo/*\" forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", \"foo.baz\", etc.\n          withForbiddenSysctls(forbiddenSysctls):: self + if std.type(forbiddenSysctls) == 'array' then { forbiddenSysctls: forbiddenSysctls } else { forbiddenSysctls: [forbiddenSysctls] },\n          // forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\n          //\n          // Examples: e.g. \"foo/*\" forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", \"foo.baz\", etc.\n          withForbiddenSysctlsMixin(forbiddenSysctls):: self + if std.type(forbiddenSysctls) == 'array' then { forbiddenSysctls+: forbiddenSysctls } else { forbiddenSysctls+: [forbiddenSysctls] },\n          // hostIPC determines if the policy allows the use of HostIPC in the pod spec.\n          withHostIpc(hostIpc):: self + { hostIPC: hostIpc },\n          // hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.\n          withHostNetwork(hostNetwork):: self + { hostNetwork: hostNetwork },\n          // hostPID determines if the policy allows the use of HostPID in the pod spec.\n          withHostPid(hostPid):: self + { hostPID: hostPid },\n          // hostPorts determines which host port ranges are allowed to be exposed.\n          withHostPorts(hostPorts):: self + if std.type(hostPorts) == 'array' then { hostPorts: hostPorts } else { hostPorts: [hostPorts] },\n          // hostPorts determines which host port ranges are allowed to be exposed.\n          withHostPortsMixin(hostPorts):: self + if std.type(hostPorts) == 'array' then { hostPorts+: hostPorts } else { hostPorts+: [hostPorts] },\n          hostPortsType:: hidden.extensions.v1beta1.hostPortRange,\n          // privileged determines if a pod can request to be run as privileged.\n          withPrivileged(privileged):: self + { privileged: privileged },\n          // readOnlyRootFilesystem when set to true will force containers to run with a read only root file system.  If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.\n          withReadOnlyRootFilesystem(readOnlyRootFilesystem):: self + { readOnlyRootFilesystem: readOnlyRootFilesystem },\n          // requiredDropCapabilities are the capabilities that will be dropped from the container.  These are required to be dropped and cannot be added.\n          withRequiredDropCapabilities(requiredDropCapabilities):: self + if std.type(requiredDropCapabilities) == 'array' then { requiredDropCapabilities: requiredDropCapabilities } else { requiredDropCapabilities: [requiredDropCapabilities] },\n          // requiredDropCapabilities are the capabilities that will be dropped from the container.  These are required to be dropped and cannot be added.\n          withRequiredDropCapabilitiesMixin(requiredDropCapabilities):: self + if std.type(requiredDropCapabilities) == 'array' then { requiredDropCapabilities+: requiredDropCapabilities } else { requiredDropCapabilities+: [requiredDropCapabilities] },\n          // volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.\n          withVolumes(volumes):: self + if std.type(volumes) == 'array' then { volumes: volumes } else { volumes: [volumes] },\n          // volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.\n          withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then { volumes+: volumes } else { volumes+: [volumes] },\n          mixin:: {\n            // fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.\n            fsGroup:: {\n              local __fsGroupMixin(fsGroup) = { fsGroup+: fsGroup },\n              mixinInstance(fsGroup):: __fsGroupMixin(fsGroup),\n              // ranges are the allowed ranges of fs groups.  If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.\n              withRanges(ranges):: self + if std.type(ranges) == 'array' then __fsGroupMixin({ ranges: ranges }) else __fsGroupMixin({ ranges: [ranges] }),\n              // ranges are the allowed ranges of fs groups.  If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.\n              withRangesMixin(ranges):: self + if std.type(ranges) == 'array' then __fsGroupMixin({ ranges+: ranges }) else __fsGroupMixin({ ranges+: [ranges] }),\n              rangesType:: hidden.extensions.v1beta1.idRange,\n              // rule is the strategy that will dictate what FSGroup is used in the SecurityContext.\n              withRule(rule):: self + __fsGroupMixin({ rule: rule }),\n            },\n            fsGroupType:: hidden.extensions.v1beta1.fsGroupStrategyOptions,\n            // runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.\n            runAsUser:: {\n              local __runAsUserMixin(runAsUser) = { runAsUser+: runAsUser },\n              mixinInstance(runAsUser):: __runAsUserMixin(runAsUser),\n              // ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.\n              withRanges(ranges):: self + if std.type(ranges) == 'array' then __runAsUserMixin({ ranges: ranges }) else __runAsUserMixin({ ranges: [ranges] }),\n              // ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.\n              withRangesMixin(ranges):: self + if std.type(ranges) == 'array' then __runAsUserMixin({ ranges+: ranges }) else __runAsUserMixin({ ranges+: [ranges] }),\n              rangesType:: hidden.extensions.v1beta1.idRange,\n              // rule is the strategy that will dictate the allowable RunAsUser values that may be set.\n              withRule(rule):: self + __runAsUserMixin({ rule: rule }),\n            },\n            runAsUserType:: hidden.extensions.v1beta1.runAsUserStrategyOptions,\n            // seLinux is the strategy that will dictate the allowable labels that may be set.\n            seLinux:: {\n              local __seLinuxMixin(seLinux) = { seLinux+: seLinux },\n              mixinInstance(seLinux):: __seLinuxMixin(seLinux),\n              // rule is the strategy that will dictate the allowable labels that may be set.\n              withRule(rule):: self + __seLinuxMixin({ rule: rule }),\n              // seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/\n              seLinuxOptions:: {\n                local __seLinuxOptionsMixin(seLinuxOptions) = __seLinuxMixin({ seLinuxOptions+: seLinuxOptions }),\n                mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                // Level is SELinux level label that applies to the container.\n                withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                // Role is a SELinux role label that applies to the container.\n                withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                // Type is a SELinux type label that applies to the container.\n                withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                // User is a SELinux user label that applies to the container.\n                withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n              },\n              seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n            },\n            seLinuxType:: hidden.extensions.v1beta1.seLinuxStrategyOptions,\n            // supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.\n            supplementalGroups:: {\n              local __supplementalGroupsMixin(supplementalGroups) = { supplementalGroups+: supplementalGroups },\n              mixinInstance(supplementalGroups):: __supplementalGroupsMixin(supplementalGroups),\n              // ranges are the allowed ranges of supplemental groups.  If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.\n              withRanges(ranges):: self + if std.type(ranges) == 'array' then __supplementalGroupsMixin({ ranges: ranges }) else __supplementalGroupsMixin({ ranges: [ranges] }),\n              // ranges are the allowed ranges of supplemental groups.  If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.\n              withRangesMixin(ranges):: self + if std.type(ranges) == 'array' then __supplementalGroupsMixin({ ranges+: ranges }) else __supplementalGroupsMixin({ ranges+: [ranges] }),\n              rangesType:: hidden.extensions.v1beta1.idRange,\n              // rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.\n              withRule(rule):: self + __supplementalGroupsMixin({ rule: rule }),\n            },\n            supplementalGroupsType:: hidden.extensions.v1beta1.supplementalGroupsStrategyOptions,\n          },\n        },\n        // ReplicaSetCondition describes the state of a replica set at a certain point.\n        replicaSetCondition:: {\n          new():: {},\n          // The last time the condition transitioned from one status to another.\n          withLastTransitionTime(lastTransitionTime):: self + { lastTransitionTime: lastTransitionTime },\n          // A human readable message indicating details about the transition.\n          withMessage(message):: self + { message: message },\n          // The reason for the condition's last transition.\n          withReason(reason):: self + { reason: reason },\n          // Status of the condition, one of True, False, Unknown.\n          withStatus(status):: self + { status: status },\n          // Type of replica set condition.\n          withType(type):: self + { type: type },\n          mixin:: {},\n        },\n        // ReplicaSetList is a collection of ReplicaSets.\n        replicaSetList:: {\n          new():: {},\n          // List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.extensions.v1beta1.replicaSet,\n          mixin:: {},\n        },\n        // ReplicaSetSpec is the specification of a ReplicaSet.\n        replicaSetSpec:: {\n          new():: {},\n          // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n          withMinReadySeconds(minReadySeconds):: self + { minReadySeconds: minReadySeconds },\n          // Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller\n          withReplicas(replicas):: self + { replicas: replicas },\n          mixin:: {\n            // Selector is a label query over pods that should match the replica count. If the selector is empty, it is defaulted to the labels present on the pod template. Label keys and values that must match in order to be controlled by this replica set. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = { selector+: selector },\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\n            template:: {\n              local __templateMixin(template) = { template+: template },\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({ metadata+: metadata }),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({ annotations: annotations }),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({ annotations+: annotations }),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({ clusterName: clusterName }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers: finalizers }) else __metadataMixin({ finalizers: [finalizers] }),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then __metadataMixin({ finalizers+: finalizers }) else __metadataMixin({ finalizers+: [finalizers] }),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({ generateName: generateName }),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({ initializers+: initializers }),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n                  pendingType:: hidden.meta.v1.initializer,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({ labels: labels }),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({ labels+: labels }),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({ name: name }),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({ namespace: namespace }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences: ownerReferences }) else __metadataMixin({ ownerReferences: [ownerReferences] }),\n                // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n                withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then __metadataMixin({ ownerReferences+: ownerReferences }) else __metadataMixin({ ownerReferences+: [ownerReferences] }),\n                ownerReferencesType:: hidden.meta.v1.ownerReference,\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({ spec+: spec }),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({ activeDeadlineSeconds: activeDeadlineSeconds }),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({ affinity+: affinity }),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({ nodeAffinity+: nodeAffinity }),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __nodeAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms: [nodeSelectorTerms] }),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == 'array' then __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: nodeSelectorTerms }) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({ nodeSelectorTerms+: [nodeSelectorTerms] }),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({ podAffinity+: podAffinity }),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({ podAntiAffinity+: podAntiAffinity }),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution] }),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    // If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == 'array' then __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution }) else __podAntiAffinityMixin({ requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution] }),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({ automountServiceAccountToken: automountServiceAccountToken }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers: containers }) else __specMixin({ containers: [containers] }),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == 'array' then __specMixin({ containers+: containers }) else __specMixin({ containers+: [containers] }),\n                containersType:: hidden.core.v1.container,\n                // Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\n                dnsConfig:: {\n                  local __dnsConfigMixin(dnsConfig) = __specMixin({ dnsConfig+: dnsConfig }),\n                  mixinInstance(dnsConfig):: __dnsConfigMixin(dnsConfig),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameservers(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers: nameservers }) else __dnsConfigMixin({ nameservers: [nameservers] }),\n                  // A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\n                  withNameserversMixin(nameservers):: self + if std.type(nameservers) == 'array' then __dnsConfigMixin({ nameservers+: nameservers }) else __dnsConfigMixin({ nameservers+: [nameservers] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptions(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options: options }) else __dnsConfigMixin({ options: [options] }),\n                  // A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\n                  withOptionsMixin(options):: self + if std.type(options) == 'array' then __dnsConfigMixin({ options+: options }) else __dnsConfigMixin({ options+: [options] }),\n                  optionsType:: hidden.core.v1.podDnsConfigOption,\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearches(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches: searches }) else __dnsConfigMixin({ searches: [searches] }),\n                  // A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\n                  withSearchesMixin(searches):: self + if std.type(searches) == 'array' then __dnsConfigMixin({ searches+: searches }) else __dnsConfigMixin({ searches+: [searches] }),\n                },\n                dnsConfigType:: hidden.core.v1.podDnsConfig,\n                // Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({ dnsPolicy: dnsPolicy }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases: hostAliases }) else __specMixin({ hostAliases: [hostAliases] }),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == 'array' then __specMixin({ hostAliases+: hostAliases }) else __specMixin({ hostAliases+: [hostAliases] }),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({ hostIPC: hostIpc }),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({ hostNetwork: hostNetwork }),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({ hostPID: hostPid }),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({ hostname: hostname }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets: imagePullSecrets }) else __specMixin({ imagePullSecrets: [imagePullSecrets] }),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == 'array' then __specMixin({ imagePullSecrets+: imagePullSecrets }) else __specMixin({ imagePullSecrets+: [imagePullSecrets] }),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers: initContainers }) else __specMixin({ initContainers: [initContainers] }),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == 'array' then __specMixin({ initContainers+: initContainers }) else __specMixin({ initContainers+: [initContainers] }),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({ nodeName: nodeName }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({ nodeSelector: nodeSelector }),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({ nodeSelector+: nodeSelector }),\n                // The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\n                withPriority(priority):: self + __specMixin({ priority: priority }),\n                // If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\n                withPriorityClassName(priorityClassName):: self + __specMixin({ priorityClassName: priorityClassName }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGates(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates: readinessGates }) else __specMixin({ readinessGates: [readinessGates] }),\n                // If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\n                withReadinessGatesMixin(readinessGates):: self + if std.type(readinessGates) == 'array' then __specMixin({ readinessGates+: readinessGates }) else __specMixin({ readinessGates+: [readinessGates] }),\n                readinessGatesType:: hidden.core.v1.podReadinessGate,\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({ restartPolicy: restartPolicy }),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({ schedulerName: schedulerName }),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({ securityContext+: securityContext }),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({ fsGroup: fsGroup }),\n                  // The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsGroup(runAsGroup):: self + __securityContextMixin({ runAsGroup: runAsGroup }),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({ runAsNonRoot: runAsNonRoot }),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({ runAsUser: runAsUser }),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({ seLinuxOptions+: seLinuxOptions }),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups: supplementalGroups }) else __securityContextMixin({ supplementalGroups: [supplementalGroups] }),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == 'array' then __securityContextMixin({ supplementalGroups+: supplementalGroups }) else __securityContextMixin({ supplementalGroups+: [supplementalGroups] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctls(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls: sysctls }) else __securityContextMixin({ sysctls: [sysctls] }),\n                  // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\n                  withSysctlsMixin(sysctls):: self + if std.type(sysctls) == 'array' then __securityContextMixin({ sysctls+: sysctls }) else __securityContextMixin({ sysctls+: [sysctls] }),\n                  sysctlsType:: hidden.core.v1.sysctl,\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({ serviceAccount: serviceAccount }),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({ serviceAccountName: serviceAccountName }),\n                // Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\n                withShareProcessNamespace(shareProcessNamespace):: self + __specMixin({ shareProcessNamespace: shareProcessNamespace }),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({ subdomain: subdomain }),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({ terminationGracePeriodSeconds: terminationGracePeriodSeconds }),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations: tolerations }) else __specMixin({ tolerations: [tolerations] }),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == 'array' then __specMixin({ tolerations+: tolerations }) else __specMixin({ tolerations+: [tolerations] }),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes: volumes }) else __specMixin({ volumes: [volumes] }),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then __specMixin({ volumes+: volumes }) else __specMixin({ volumes+: [volumes] }),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n        },\n        // ReplicaSetStatus represents the current status of a ReplicaSet.\n        replicaSetStatus:: {\n          new():: {},\n          // The number of available replicas (ready for at least minReadySeconds) for this replica set.\n          withAvailableReplicas(availableReplicas):: self + { availableReplicas: availableReplicas },\n          // Represents the latest available observations of a replica set's current state.\n          withConditions(conditions):: self + if std.type(conditions) == 'array' then { conditions: conditions } else { conditions: [conditions] },\n          // Represents the latest available observations of a replica set's current state.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == 'array' then { conditions+: conditions } else { conditions+: [conditions] },\n          conditionsType:: hidden.extensions.v1beta1.replicaSetCondition,\n          // The number of pods that have labels matching the labels of the pod template of the replicaset.\n          withFullyLabeledReplicas(fullyLabeledReplicas):: self + { fullyLabeledReplicas: fullyLabeledReplicas },\n          // ObservedGeneration reflects the generation of the most recently observed ReplicaSet.\n          withObservedGeneration(observedGeneration):: self + { observedGeneration: observedGeneration },\n          // The number of ready replicas for this replica set.\n          withReadyReplicas(readyReplicas):: self + { readyReplicas: readyReplicas },\n          // Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller\n          withReplicas(replicas):: self + { replicas: replicas },\n          mixin:: {},\n        },\n        // DEPRECATED.\n        rollbackConfig:: {\n          new():: {},\n          // The revision to rollback to. If set to 0, rollback to the last revision.\n          withRevision(revision):: self + { revision: revision },\n          mixin:: {},\n        },\n        // Spec to control the desired behavior of daemon set rolling update.\n        rollingUpdateDaemonSet:: {\n          new():: {},\n          // The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.\n          withMaxUnavailable(maxUnavailable):: self + { maxUnavailable: maxUnavailable },\n          mixin:: {},\n        },\n        // Spec to control the desired behavior of rolling update.\n        rollingUpdateDeployment:: {\n          new():: {},\n          // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\n          withMaxSurge(maxSurge):: self + { maxSurge: maxSurge },\n          // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n          withMaxUnavailable(maxUnavailable):: self + { maxUnavailable: maxUnavailable },\n          mixin:: {},\n        },\n        // RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use RunAsUserStrategyOptions from policy API Group instead.\n        runAsUserStrategyOptions:: {\n          new():: {},\n          // ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.\n          withRanges(ranges):: self + if std.type(ranges) == 'array' then { ranges: ranges } else { ranges: [ranges] },\n          // ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.\n          withRangesMixin(ranges):: self + if std.type(ranges) == 'array' then { ranges+: ranges } else { ranges+: [ranges] },\n          rangesType:: hidden.extensions.v1beta1.idRange,\n          // rule is the strategy that will dictate the allowable RunAsUser values that may be set.\n          withRule(rule):: self + { rule: rule },\n          mixin:: {},\n        },\n        // describes the attributes of a scale subresource\n        scaleSpec:: {\n          new():: {},\n          // desired number of instances for the scaled object.\n          withReplicas(replicas):: self + { replicas: replicas },\n          mixin:: {},\n        },\n        // represents the current status of a scale subresource.\n        scaleStatus:: {\n          new():: {},\n          // actual number of observed instances of the scaled object.\n          withReplicas(replicas):: self + { replicas: replicas },\n          // label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors\n          withSelector(selector):: self + { selector: selector },\n          // label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors\n          withSelectorMixin(selector):: self + { selector+: selector },\n          // label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n          withTargetSelector(targetSelector):: self + { targetSelector: targetSelector },\n          mixin:: {},\n        },\n        // SELinuxStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use SELinuxStrategyOptions from policy API Group instead.\n        seLinuxStrategyOptions:: {\n          new():: {},\n          // rule is the strategy that will dictate the allowable labels that may be set.\n          withRule(rule):: self + { rule: rule },\n          mixin:: {\n            // seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/\n            seLinuxOptions:: {\n              local __seLinuxOptionsMixin(seLinuxOptions) = { seLinuxOptions+: seLinuxOptions },\n              mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n              // Level is SELinux level label that applies to the container.\n              withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n              // Role is a SELinux role label that applies to the container.\n              withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n              // Type is a SELinux type label that applies to the container.\n              withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n              // User is a SELinux user label that applies to the container.\n              withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n            },\n            seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n          },\n        },\n        // SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy. Deprecated: use SupplementalGroupsStrategyOptions from policy API Group instead.\n        supplementalGroupsStrategyOptions:: {\n          new():: {},\n          // ranges are the allowed ranges of supplemental groups.  If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.\n          withRanges(ranges):: self + if std.type(ranges) == 'array' then { ranges: ranges } else { ranges: [ranges] },\n          // ranges are the allowed ranges of supplemental groups.  If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.\n          withRangesMixin(ranges):: self + if std.type(ranges) == 'array' then { ranges+: ranges } else { ranges+: [ranges] },\n          rangesType:: hidden.extensions.v1beta1.idRange,\n          // rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.\n          withRule(rule):: self + { rule: rule },\n          mixin:: {},\n        },\n      },\n    },\n    meta:: {\n      v1:: {\n        local apiVersion = { apiVersion: 'meta/v1' },\n        // APIGroup contains the name, the supported versions, and the preferred version of a group.\n        apiGroup:: {\n          new():: {},\n          // name is the name of the group.\n          withName(name):: self + { name: name },\n          // a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.\n          withServerAddressByClientCidrs(serverAddressByClientCidrs):: self + if std.type(serverAddressByClientCidrs) == 'array' then { serverAddressByClientCIDRs: serverAddressByClientCidrs } else { serverAddressByClientCIDRs: [serverAddressByClientCidrs] },\n          // a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.\n          withServerAddressByClientCidrsMixin(serverAddressByClientCidrs):: self + if std.type(serverAddressByClientCidrs) == 'array' then { serverAddressByClientCIDRs+: serverAddressByClientCidrs } else { serverAddressByClientCIDRs+: [serverAddressByClientCidrs] },\n          serverAddressByClientCIDRsType:: hidden.meta.v1.serverAddressByClientCidr,\n          // versions are the versions supported in this group.\n          withVersions(versions):: self + if std.type(versions) == 'array' then { versions: versions } else { versions: [versions] },\n          // versions are the versions supported in this group.\n          withVersionsMixin(versions):: self + if std.type(versions) == 'array' then { versions+: versions } else { versions+: [versions] },\n          versionsType:: hidden.meta.v1.groupVersionForDiscovery,\n          mixin:: {\n            // preferredVersion is the version preferred by the API server, which probably is the storage version.\n            preferredVersion:: {\n              local __preferredVersionMixin(preferredVersion) = { preferredVersion+: preferredVersion },\n              mixinInstance(preferredVersion):: __preferredVersionMixin(preferredVersion),\n              // groupVersion specifies the API group and version in the form \"group/version\"\n              withGroupVersion(groupVersion):: self + __preferredVersionMixin({ groupVersion: groupVersion }),\n              // version specifies the version in the form of \"version\". This is to save the clients the trouble of splitting the GroupVersion.\n              withVersion(version):: self + __preferredVersionMixin({ version: version }),\n            },\n            preferredVersionType:: hidden.meta.v1.groupVersionForDiscovery,\n          },\n        },\n        // APIGroupList is a list of APIGroup, to allow clients to discover the API at /apis.\n        apiGroupList:: {\n          new():: {},\n          // groups is a list of APIGroup.\n          withGroups(groups):: self + if std.type(groups) == 'array' then { groups: groups } else { groups: [groups] },\n          // groups is a list of APIGroup.\n          withGroupsMixin(groups):: self + if std.type(groups) == 'array' then { groups+: groups } else { groups+: [groups] },\n          groupsType:: hidden.meta.v1.apiGroup,\n          mixin:: {},\n        },\n        // APIResource specifies the name of a resource and whether it is namespaced.\n        apiResource:: {\n          new():: {},\n          // categories is a list of the grouped resources this resource belongs to (e.g. 'all')\n          withCategories(categories):: self + if std.type(categories) == 'array' then { categories: categories } else { categories: [categories] },\n          // categories is a list of the grouped resources this resource belongs to (e.g. 'all')\n          withCategoriesMixin(categories):: self + if std.type(categories) == 'array' then { categories+: categories } else { categories+: [categories] },\n          // group is the preferred group of the resource.  Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale\".\n          withGroup(group):: self + { group: group },\n          // kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo')\n          withKind(kind):: self + { kind: kind },\n          // name is the plural name of the resource.\n          withName(name):: self + { name: name },\n          // namespaced indicates if a resource is namespaced or not.\n          withNamespaced(namespaced):: self + { namespaced: namespaced },\n          // shortNames is a list of suggested short names of the resource.\n          withShortNames(shortNames):: self + if std.type(shortNames) == 'array' then { shortNames: shortNames } else { shortNames: [shortNames] },\n          // shortNames is a list of suggested short names of the resource.\n          withShortNamesMixin(shortNames):: self + if std.type(shortNames) == 'array' then { shortNames+: shortNames } else { shortNames+: [shortNames] },\n          // singularName is the singular name of the resource.  This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.\n          withSingularName(singularName):: self + { singularName: singularName },\n          // verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)\n          withVerbs(verbs):: self + if std.type(verbs) == 'array' then { verbs: verbs } else { verbs: [verbs] },\n          // verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)\n          withVerbsMixin(verbs):: self + if std.type(verbs) == 'array' then { verbs+: verbs } else { verbs+: [verbs] },\n          // version is the preferred version of the resource.  Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)\".\n          withVersion(version):: self + { version: version },\n          mixin:: {},\n        },\n        // APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.\n        apiResourceList:: {\n          new():: {},\n          // groupVersion is the group and version this APIResourceList is for.\n          withGroupVersion(groupVersion):: self + { groupVersion: groupVersion },\n          // resources contains the name of the resources and if they are namespaced.\n          withResources(resources):: self + if std.type(resources) == 'array' then { resources: resources } else { resources: [resources] },\n          // resources contains the name of the resources and if they are namespaced.\n          withResourcesMixin(resources):: self + if std.type(resources) == 'array' then { resources+: resources } else { resources+: [resources] },\n          resourcesType:: hidden.meta.v1.apiResource,\n          mixin:: {},\n        },\n        // APIVersions lists the versions that are available, to allow clients to discover the API at /api, which is the root path of the legacy v1 API.\n        apiVersions:: {\n          new():: {},\n          // a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.\n          withServerAddressByClientCidrs(serverAddressByClientCidrs):: self + if std.type(serverAddressByClientCidrs) == 'array' then { serverAddressByClientCIDRs: serverAddressByClientCidrs } else { serverAddressByClientCIDRs: [serverAddressByClientCidrs] },\n          // a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.\n          withServerAddressByClientCidrsMixin(serverAddressByClientCidrs):: self + if std.type(serverAddressByClientCidrs) == 'array' then { serverAddressByClientCIDRs+: serverAddressByClientCidrs } else { serverAddressByClientCIDRs+: [serverAddressByClientCidrs] },\n          serverAddressByClientCIDRsType:: hidden.meta.v1.serverAddressByClientCidr,\n          // versions are the api versions that are available.\n          withVersions(versions):: self + if std.type(versions) == 'array' then { versions: versions } else { versions: [versions] },\n          // versions are the api versions that are available.\n          withVersionsMixin(versions):: self + if std.type(versions) == 'array' then { versions+: versions } else { versions+: [versions] },\n          mixin:: {},\n        },\n        // DeleteOptions may be provided when deleting an API object.\n        deleteOptions:: {\n          new():: {},\n          // The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\n          withGracePeriodSeconds(gracePeriodSeconds):: self + { gracePeriodSeconds: gracePeriodSeconds },\n          // Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\n          withOrphanDependents(orphanDependents):: self + { orphanDependents: orphanDependents },\n          // Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\n          withPropagationPolicy(propagationPolicy):: self + { propagationPolicy: propagationPolicy },\n          mixin:: {\n            // Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.\n            preconditions:: {\n              local __preconditionsMixin(preconditions) = { preconditions+: preconditions },\n              mixinInstance(preconditions):: __preconditionsMixin(preconditions),\n              // Specifies the target UID.\n              withUid(uid):: self + __preconditionsMixin({ uid: uid }),\n            },\n            preconditionsType:: hidden.meta.v1.preconditions,\n          },\n        },\n        // GroupVersion contains the \"group/version\" and \"version\" string of a version. It is made a struct to keep extensibility.\n        groupVersionForDiscovery:: {\n          new():: {},\n          // groupVersion specifies the API group and version in the form \"group/version\"\n          withGroupVersion(groupVersion):: self + { groupVersion: groupVersion },\n          // version specifies the version in the form of \"version\". This is to save the clients the trouble of splitting the GroupVersion.\n          withVersion(version):: self + { version: version },\n          mixin:: {},\n        },\n        // Initializer is information about an initializer that has not yet completed.\n        initializer:: {\n          new():: {},\n          // name of the process that is responsible for initializing this object.\n          withName(name):: self + { name: name },\n          mixin:: {},\n        },\n        // Initializers tracks the progress of initialization.\n        initializers:: {\n          new():: {},\n          // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n          withPending(pending):: self + if std.type(pending) == 'array' then { pending: pending } else { pending: [pending] },\n          // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n          withPendingMixin(pending):: self + if std.type(pending) == 'array' then { pending+: pending } else { pending+: [pending] },\n          pendingType:: hidden.meta.v1.initializer,\n          mixin:: {},\n        },\n        // A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.\n        labelSelector:: {\n          new():: {},\n          // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n          withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then { matchExpressions: matchExpressions } else { matchExpressions: [matchExpressions] },\n          // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n          withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then { matchExpressions+: matchExpressions } else { matchExpressions+: [matchExpressions] },\n          matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n          // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n          withMatchLabels(matchLabels):: self + { matchLabels: matchLabels },\n          // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n          withMatchLabelsMixin(matchLabels):: self + { matchLabels+: matchLabels },\n          mixin:: {},\n        },\n        // A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.\n        labelSelectorRequirement:: {\n          new():: {},\n          // key is the label key that the selector applies to.\n          withKey(key):: self + { key: key },\n          // operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.\n          withOperator(operator):: self + { operator: operator },\n          // values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.\n          withValues(values):: self + if std.type(values) == 'array' then { values: values } else { values: [values] },\n          // values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.\n          withValuesMixin(values):: self + if std.type(values) == 'array' then { values+: values } else { values+: [values] },\n          mixin:: {},\n        },\n        // ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.\n        listMeta:: {\n          new():: {},\n          // continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response.\n          withContinue(continue):: self + { continue: continue },\n          mixin:: {},\n        },\n        // MicroTime is version of Time with microsecond level precision.\n        microTime:: {\n          new():: {},\n          mixin:: {},\n        },\n        // ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.\n        objectMeta:: {\n          new():: {},\n          // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n          withAnnotations(annotations):: self + { annotations: annotations },\n          // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n          withAnnotationsMixin(annotations):: self + { annotations+: annotations },\n          // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n          withClusterName(clusterName):: self + { clusterName: clusterName },\n          // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n          withFinalizers(finalizers):: self + if std.type(finalizers) == 'array' then { finalizers: finalizers } else { finalizers: [finalizers] },\n          // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n          withFinalizersMixin(finalizers):: self + if std.type(finalizers) == 'array' then { finalizers+: finalizers } else { finalizers+: [finalizers] },\n          // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n          //\n          // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n          //\n          // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n          withGenerateName(generateName):: self + { generateName: generateName },\n          // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n          withLabels(labels):: self + { labels: labels },\n          // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n          withLabelsMixin(labels):: self + { labels+: labels },\n          // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n          withName(name):: self + { name: name },\n          // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n          //\n          // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n          withNamespace(namespace):: self + { namespace: namespace },\n          // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n          withOwnerReferences(ownerReferences):: self + if std.type(ownerReferences) == 'array' then { ownerReferences: ownerReferences } else { ownerReferences: [ownerReferences] },\n          // List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\n          withOwnerReferencesMixin(ownerReferences):: self + if std.type(ownerReferences) == 'array' then { ownerReferences+: ownerReferences } else { ownerReferences+: [ownerReferences] },\n          ownerReferencesType:: hidden.meta.v1.ownerReference,\n          mixin:: {\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = { initializers+: initializers },\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending: pending }) else __initializersMixin({ pending: [pending] }),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == 'array' then __initializersMixin({ pending+: pending }) else __initializersMixin({ pending+: [pending] }),\n              pendingType:: hidden.meta.v1.initializer,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n          },\n        },\n        // OwnerReference contains enough information to let you identify an owning object. Currently, an owning object must be in the same namespace, so there is no namespace field.\n        ownerReference:: {\n          new():: {},\n          // API version of the referent.\n          withApiVersion(apiVersion):: self + { apiVersion: apiVersion },\n          // If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.\n          withBlockOwnerDeletion(blockOwnerDeletion):: self + { blockOwnerDeletion: blockOwnerDeletion },\n          // If true, this reference points to the managing controller.\n          withController(controller):: self + { controller: controller },\n          // Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\n          withKind(kind):: self + { kind: kind },\n          // Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n          withName(name):: self + { name: name },\n          // UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n          withUid(uid):: self + { uid: uid },\n          mixin:: {},\n        },\n        // Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.\n        preconditions:: {\n          new():: {},\n          // Specifies the target UID.\n          withUid(uid):: self + { uid: uid },\n          mixin:: {},\n        },\n        // ServerAddressByClientCIDR helps the client to determine the server address that they should use, depending on the clientCIDR that they match.\n        serverAddressByClientCidr:: {\n          new():: {},\n          // The CIDR with which clients can match their IP to figure out the server address that they should use.\n          withClientCidr(clientCidr):: self + { clientCIDR: clientCidr },\n          // Address of this server, suitable for a client that matches the above CIDR. This can be a hostname, hostname:port, IP or IP:port.\n          withServerAddress(serverAddress):: self + { serverAddress: serverAddress },\n          mixin:: {},\n        },\n        // Status is a return value for calls that don't return other objects.\n        status:: {\n          new():: {},\n          // Suggested HTTP return code for this status, 0 if not set.\n          withCode(code):: self + { code: code },\n          // A human-readable description of the status of this operation.\n          withMessage(message):: self + { message: message },\n          // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n          withReason(reason):: self + { reason: reason },\n          mixin:: {\n            // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n            details:: {\n              local __detailsMixin(details) = { details+: details },\n              mixinInstance(details):: __detailsMixin(details),\n              // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n              withCauses(causes):: self + if std.type(causes) == 'array' then __detailsMixin({ causes: causes }) else __detailsMixin({ causes: [causes] }),\n              // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n              withCausesMixin(causes):: self + if std.type(causes) == 'array' then __detailsMixin({ causes+: causes }) else __detailsMixin({ causes+: [causes] }),\n              causesType:: hidden.meta.v1.statusCause,\n              // The group attribute of the resource associated with the status StatusReason.\n              withGroup(group):: self + __detailsMixin({ group: group }),\n              // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n              withName(name):: self + __detailsMixin({ name: name }),\n              // If specified, the time in seconds before the operation should be retried. Some errors may indicate the client must take an alternate action - for those errors this field may indicate how long to wait before taking the alternate action.\n              withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({ retryAfterSeconds: retryAfterSeconds }),\n              // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n              withUid(uid):: self + __detailsMixin({ uid: uid }),\n            },\n            detailsType:: hidden.meta.v1.statusDetails,\n          },\n        },\n        // StatusCause provides more information about an api.Status failure, including cases when multiple errors are encountered.\n        statusCause:: {\n          new():: {},\n          // The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed.  Fields may appear more than once in an array of causes due to fields having multiple errors. Optional.\n          //\n          // Examples:\n          // \"name\" - the field \"name\" on the current resource\n          // \"items[0].name\" - the field \"name\" on the first array entry in \"items\"\n          withField(field):: self + { field: field },\n          // A human-readable description of the cause of the error.  This field may be presented as-is to a reader.\n          withMessage(message):: self + { message: message },\n          // A machine-readable description of the cause of the error. If this value is empty there is no information available.\n          withReason(reason):: self + { reason: reason },\n          mixin:: {},\n        },\n        // StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.\n        statusDetails:: {\n          new():: {},\n          // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n          withCauses(causes):: self + if std.type(causes) == 'array' then { causes: causes } else { causes: [causes] },\n          // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n          withCausesMixin(causes):: self + if std.type(causes) == 'array' then { causes+: causes } else { causes+: [causes] },\n          causesType:: hidden.meta.v1.statusCause,\n          // The group attribute of the resource associated with the status StatusReason.\n          withGroup(group):: self + { group: group },\n          // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n          withName(name):: self + { name: name },\n          // If specified, the time in seconds before the operation should be retried. Some errors may indicate the client must take an alternate action - for those errors this field may indicate how long to wait before taking the alternate action.\n          withRetryAfterSeconds(retryAfterSeconds):: self + { retryAfterSeconds: retryAfterSeconds },\n          // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n          withUid(uid):: self + { uid: uid },\n          mixin:: {},\n        },\n        // Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON.  Wrappers are provided for many of the factory methods that the time package offers.\n        time:: {\n          new():: {},\n          mixin:: {},\n        },\n        // Event represents a single event to a watched resource.\n        watchEvent:: {\n          new():: {},\n          withType(type):: self + { type: type },\n          mixin:: {\n            // Object is:\n            // * If Type is Added or Modified: the new state of the object.\n            // * If Type is Deleted: the state of the object immediately before deletion.\n            // * If Type is Error: *Status is recommended; other types may make sense\n            // depending on context.\n            object:: {\n              local __objectMixin(object) = { object+: object },\n              mixinInstance(object):: __objectMixin(object),\n              // Raw is the underlying serialization of this object.\n              withRaw(raw):: self + __objectMixin({ Raw: raw }),\n            },\n          },\n        },\n      },\n    },\n    networking:: {\n      v1:: {\n        local apiVersion = { apiVersion: 'networking/v1' },\n        // IPBlock describes a particular CIDR (Ex. \"192.168.1.1/24\") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.\n        ipBlock:: {\n          new():: {},\n          // CIDR is a string representing the IP Block Valid examples are \"192.168.1.1/24\"\n          withCidr(cidr):: self + { cidr: cidr },\n          // Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" Except values will be rejected if they are outside the CIDR range\n          withExcept(except):: self + if std.type(except) == 'array' then { except: except } else { except: [except] },\n          // Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" Except values will be rejected if they are outside the CIDR range\n          withExceptMixin(except):: self + if std.type(except) == 'array' then { except+: except } else { except+: [except] },\n          mixin:: {},\n        },\n        // NetworkPolicyEgressRule describes a particular set of traffic that is allowed out of pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and to. This type is beta-level in 1.8\n        networkPolicyEgressRule:: {\n          new():: {},\n          // List of destination ports for outgoing traffic. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.\n          withPorts(ports):: self + if std.type(ports) == 'array' then { ports: ports } else { ports: [ports] },\n          // List of destination ports for outgoing traffic. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.\n          withPortsMixin(ports):: self + if std.type(ports) == 'array' then { ports+: ports } else { ports+: [ports] },\n          portsType:: hidden.networking.v1.networkPolicyPort,\n          // List of destinations for outgoing traffic of pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all destinations (traffic not restricted by destination). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the to list.\n          withTo(to):: self + if std.type(to) == 'array' then { to: to } else { to: [to] },\n          // List of destinations for outgoing traffic of pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all destinations (traffic not restricted by destination). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the to list.\n          withToMixin(to):: self + if std.type(to) == 'array' then { to+: to } else { to+: [to] },\n          toType:: hidden.networking.v1.networkPolicyPeer,\n          mixin:: {},\n        },\n        // NetworkPolicyIngressRule describes a particular set of traffic that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and from.\n        networkPolicyIngressRule:: {\n          new():: {},\n          // List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.\n          withFrom(from):: self + if std.type(from) == 'array' then { from: from } else { from: [from] },\n          // List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.\n          withFromMixin(from):: self + if std.type(from) == 'array' then { from+: from } else { from+: [from] },\n          fromType:: hidden.networking.v1.networkPolicyPeer,\n          // List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.\n          withPorts(ports):: self + if std.type(ports) == 'array' then { ports: ports } else { ports: [ports] },\n          // List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.\n          withPortsMixin(ports):: self + if std.type(ports) == 'array' then { ports+: ports } else { ports+: [ports] },\n          portsType:: hidden.networking.v1.networkPolicyPort,\n          mixin:: {},\n        },\n        // NetworkPolicyList is a list of NetworkPolicy objects.\n        networkPolicyList:: {\n          new():: {},\n          // Items is a list of schema objects.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is a list of schema objects.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.networking.v1.networkPolicy,\n          mixin:: {},\n        },\n        // NetworkPolicyPeer describes a peer to allow traffic from. Only certain combinations of fields are allowed\n        networkPolicyPeer:: {\n          new():: {},\n          mixin:: {\n            // IPBlock defines policy on a particular IPBlock. If this field is set then neither of the other fields can be.\n            ipBlock:: {\n              local __ipBlockMixin(ipBlock) = { ipBlock+: ipBlock },\n              mixinInstance(ipBlock):: __ipBlockMixin(ipBlock),\n              // CIDR is a string representing the IP Block Valid examples are \"192.168.1.1/24\"\n              withCidr(cidr):: self + __ipBlockMixin({ cidr: cidr }),\n              // Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" Except values will be rejected if they are outside the CIDR range\n              withExcept(except):: self + if std.type(except) == 'array' then __ipBlockMixin({ except: except }) else __ipBlockMixin({ except: [except] }),\n              // Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" Except values will be rejected if they are outside the CIDR range\n              withExceptMixin(except):: self + if std.type(except) == 'array' then __ipBlockMixin({ except+: except }) else __ipBlockMixin({ except+: [except] }),\n            },\n            ipBlockType:: hidden.networking.v1.ipBlock,\n            // Selects Namespaces using cluster-scoped labels. This field follows standard label selector semantics; if present but empty, it selects all namespaces.\n            //\n            // If PodSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects all Pods in the Namespaces selected by NamespaceSelector.\n            namespaceSelector:: {\n              local __namespaceSelectorMixin(namespaceSelector) = { namespaceSelector+: namespaceSelector },\n              mixinInstance(namespaceSelector):: __namespaceSelectorMixin(namespaceSelector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __namespaceSelectorMixin({ matchExpressions: matchExpressions }) else __namespaceSelectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __namespaceSelectorMixin({ matchExpressions+: matchExpressions }) else __namespaceSelectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __namespaceSelectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __namespaceSelectorMixin({ matchLabels+: matchLabels }),\n            },\n            namespaceSelectorType:: hidden.meta.v1.labelSelector,\n            // This is a label selector which selects Pods. This field follows standard label selector semantics; if present but empty, it selects all pods.\n            //\n            // If NamespaceSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects the Pods matching PodSelector in the policy's own Namespace.\n            podSelector:: {\n              local __podSelectorMixin(podSelector) = { podSelector+: podSelector },\n              mixinInstance(podSelector):: __podSelectorMixin(podSelector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __podSelectorMixin({ matchExpressions: matchExpressions }) else __podSelectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __podSelectorMixin({ matchExpressions+: matchExpressions }) else __podSelectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __podSelectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __podSelectorMixin({ matchLabels+: matchLabels }),\n            },\n            podSelectorType:: hidden.meta.v1.labelSelector,\n          },\n        },\n        // NetworkPolicyPort describes a port to allow traffic on\n        networkPolicyPort:: {\n          new():: {},\n          // The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers.\n          withPort(port):: self + { port: port },\n          // The protocol (TCP or UDP) which traffic must match. If not specified, this field defaults to TCP.\n          withProtocol(protocol):: self + { protocol: protocol },\n          mixin:: {},\n        },\n        // NetworkPolicySpec provides the specification of a NetworkPolicy\n        networkPolicySpec:: {\n          new():: {},\n          // List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8\n          withEgress(egress):: self + if std.type(egress) == 'array' then { egress: egress } else { egress: [egress] },\n          // List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8\n          withEgressMixin(egress):: self + if std.type(egress) == 'array' then { egress+: egress } else { egress+: [egress] },\n          egressType:: hidden.networking.v1.networkPolicyEgressRule,\n          // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default)\n          withIngress(ingress):: self + if std.type(ingress) == 'array' then { ingress: ingress } else { ingress: [ingress] },\n          // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default)\n          withIngressMixin(ingress):: self + if std.type(ingress) == 'array' then { ingress+: ingress } else { ingress+: [ingress] },\n          ingressType:: hidden.networking.v1.networkPolicyIngressRule,\n          // List of rule types that the NetworkPolicy relates to. Valid options are Ingress, Egress, or Ingress,Egress. If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8\n          withPolicyTypes(policyTypes):: self + if std.type(policyTypes) == 'array' then { policyTypes: policyTypes } else { policyTypes: [policyTypes] },\n          // List of rule types that the NetworkPolicy relates to. Valid options are Ingress, Egress, or Ingress,Egress. If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8\n          withPolicyTypesMixin(policyTypes):: self + if std.type(policyTypes) == 'array' then { policyTypes+: policyTypes } else { policyTypes+: [policyTypes] },\n          mixin:: {\n            // Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.\n            podSelector:: {\n              local __podSelectorMixin(podSelector) = { podSelector+: podSelector },\n              mixinInstance(podSelector):: __podSelectorMixin(podSelector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __podSelectorMixin({ matchExpressions: matchExpressions }) else __podSelectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __podSelectorMixin({ matchExpressions+: matchExpressions }) else __podSelectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __podSelectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __podSelectorMixin({ matchLabels+: matchLabels }),\n            },\n            podSelectorType:: hidden.meta.v1.labelSelector,\n          },\n        },\n      },\n    },\n    policy:: {\n      v1beta1:: {\n        local apiVersion = { apiVersion: 'policy/v1beta1' },\n        // AllowedFlexVolume represents a single Flexvolume that is allowed to be used.\n        allowedFlexVolume:: {\n          new():: {},\n          // driver is the name of the Flexvolume driver.\n          withDriver(driver):: self + { driver: driver },\n          mixin:: {},\n        },\n        // AllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined.\n        allowedHostPath:: {\n          new():: {},\n          // pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n          //\n          // Examples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`\n          withPathPrefix(pathPrefix):: self + { pathPrefix: pathPrefix },\n          // when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.\n          withReadOnly(readOnly):: self + { readOnly: readOnly },\n          mixin:: {},\n        },\n        // FSGroupStrategyOptions defines the strategy type and options used to create the strategy.\n        fsGroupStrategyOptions:: {\n          new():: {},\n          // ranges are the allowed ranges of fs groups.  If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.\n          withRanges(ranges):: self + if std.type(ranges) == 'array' then { ranges: ranges } else { ranges: [ranges] },\n          // ranges are the allowed ranges of fs groups.  If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.\n          withRangesMixin(ranges):: self + if std.type(ranges) == 'array' then { ranges+: ranges } else { ranges+: [ranges] },\n          rangesType:: hidden.policy.v1beta1.idRange,\n          // rule is the strategy that will dictate what FSGroup is used in the SecurityContext.\n          withRule(rule):: self + { rule: rule },\n          mixin:: {},\n        },\n        // HostPortRange defines a range of host ports that will be enabled by a policy for pods to use.  It requires both the start and end to be defined.\n        hostPortRange:: {\n          new():: {},\n          // max is the end of the range, inclusive.\n          withMax(max):: self + { max: max },\n          // min is the start of the range, inclusive.\n          withMin(min):: self + { min: min },\n          mixin:: {},\n        },\n        // IDRange provides a min/max of an allowed range of IDs.\n        idRange:: {\n          new():: {},\n          // max is the end of the range, inclusive.\n          withMax(max):: self + { max: max },\n          // min is the start of the range, inclusive.\n          withMin(min):: self + { min: min },\n          mixin:: {},\n        },\n        // PodDisruptionBudgetList is a collection of PodDisruptionBudgets.\n        podDisruptionBudgetList:: {\n          new():: {},\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.policy.v1beta1.podDisruptionBudget,\n          mixin:: {},\n        },\n        // PodDisruptionBudgetSpec is a description of a PodDisruptionBudget.\n        podDisruptionBudgetSpec:: {\n          new():: {},\n          // An eviction is allowed if at most \"maxUnavailable\" pods selected by \"selector\" are unavailable after the eviction, i.e. even in absence of the evicted pod. For example, one can prevent all voluntary evictions by specifying 0. This is a mutually exclusive setting with \"minAvailable\".\n          withMaxUnavailable(maxUnavailable):: self + { maxUnavailable: maxUnavailable },\n          // An eviction is allowed if at least \"minAvailable\" pods selected by \"selector\" will still be available after the eviction, i.e. even in the absence of the evicted pod.  So for example you can prevent all voluntary evictions by specifying \"100%\".\n          withMinAvailable(minAvailable):: self + { minAvailable: minAvailable },\n          mixin:: {\n            // Label query over pods whose evictions are managed by the disruption budget.\n            selector:: {\n              local __selectorMixin(selector) = { selector+: selector },\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n          },\n        },\n        // PodDisruptionBudgetStatus represents information about the status of a PodDisruptionBudget. Status may trail the actual state of a system.\n        podDisruptionBudgetStatus:: {\n          new():: {},\n          // current number of healthy pods\n          withCurrentHealthy(currentHealthy):: self + { currentHealthy: currentHealthy },\n          // minimum desired number of healthy pods\n          withDesiredHealthy(desiredHealthy):: self + { desiredHealthy: desiredHealthy },\n          // DisruptedPods contains information about pods whose eviction was processed by the API server eviction subresource handler but has not yet been observed by the PodDisruptionBudget controller. A pod will be in this map from the time when the API server processed the eviction request to the time when the pod is seen by PDB controller as having been marked for deletion (or after a timeout). The key in the map is the name of the pod and the value is the time when the API server processed the eviction request. If the deletion didn't occur and a pod is still there it will be removed from the list automatically by PodDisruptionBudget controller after some time. If everything goes smooth this map should be empty for the most of the time. Large number of entries in the map may indicate problems with pod deletions.\n          withDisruptedPods(disruptedPods):: self + { disruptedPods: disruptedPods },\n          // DisruptedPods contains information about pods whose eviction was processed by the API server eviction subresource handler but has not yet been observed by the PodDisruptionBudget controller. A pod will be in this map from the time when the API server processed the eviction request to the time when the pod is seen by PDB controller as having been marked for deletion (or after a timeout). The key in the map is the name of the pod and the value is the time when the API server processed the eviction request. If the deletion didn't occur and a pod is still there it will be removed from the list automatically by PodDisruptionBudget controller after some time. If everything goes smooth this map should be empty for the most of the time. Large number of entries in the map may indicate problems with pod deletions.\n          withDisruptedPodsMixin(disruptedPods):: self + { disruptedPods+: disruptedPods },\n          // Number of pod disruptions that are currently allowed.\n          withDisruptionsAllowed(disruptionsAllowed):: self + { disruptionsAllowed: disruptionsAllowed },\n          // total number of pods counted by this disruption budget\n          withExpectedPods(expectedPods):: self + { expectedPods: expectedPods },\n          // Most recent generation observed when updating this PDB status. PodDisruptionsAllowed and other status informatio is valid only if observedGeneration equals to PDB's object generation.\n          withObservedGeneration(observedGeneration):: self + { observedGeneration: observedGeneration },\n          mixin:: {},\n        },\n        // PodSecurityPolicyList is a list of PodSecurityPolicy objects.\n        podSecurityPolicyList:: {\n          new():: {},\n          // items is a list of schema objects.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // items is a list of schema objects.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.policy.v1beta1.podSecurityPolicy,\n          mixin:: {},\n        },\n        // PodSecurityPolicySpec defines the policy enforced.\n        podSecurityPolicySpec:: {\n          new():: {},\n          // allowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.\n          withAllowPrivilegeEscalation(allowPrivilegeEscalation):: self + { allowPrivilegeEscalation: allowPrivilegeEscalation },\n          // allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.\n          withAllowedCapabilities(allowedCapabilities):: self + if std.type(allowedCapabilities) == 'array' then { allowedCapabilities: allowedCapabilities } else { allowedCapabilities: [allowedCapabilities] },\n          // allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.\n          withAllowedCapabilitiesMixin(allowedCapabilities):: self + if std.type(allowedCapabilities) == 'array' then { allowedCapabilities+: allowedCapabilities } else { allowedCapabilities+: [allowedCapabilities] },\n          // allowedFlexVolumes is a whitelist of allowed Flexvolumes.  Empty or nil indicates that all Flexvolumes may be used.  This parameter is effective only when the usage of the Flexvolumes is allowed in the \"volumes\" field.\n          withAllowedFlexVolumes(allowedFlexVolumes):: self + if std.type(allowedFlexVolumes) == 'array' then { allowedFlexVolumes: allowedFlexVolumes } else { allowedFlexVolumes: [allowedFlexVolumes] },\n          // allowedFlexVolumes is a whitelist of allowed Flexvolumes.  Empty or nil indicates that all Flexvolumes may be used.  This parameter is effective only when the usage of the Flexvolumes is allowed in the \"volumes\" field.\n          withAllowedFlexVolumesMixin(allowedFlexVolumes):: self + if std.type(allowedFlexVolumes) == 'array' then { allowedFlexVolumes+: allowedFlexVolumes } else { allowedFlexVolumes+: [allowedFlexVolumes] },\n          allowedFlexVolumesType:: hidden.policy.v1beta1.allowedFlexVolume,\n          // allowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.\n          withAllowedHostPaths(allowedHostPaths):: self + if std.type(allowedHostPaths) == 'array' then { allowedHostPaths: allowedHostPaths } else { allowedHostPaths: [allowedHostPaths] },\n          // allowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.\n          withAllowedHostPathsMixin(allowedHostPaths):: self + if std.type(allowedHostPaths) == 'array' then { allowedHostPaths+: allowedHostPaths } else { allowedHostPaths+: [allowedHostPaths] },\n          allowedHostPathsType:: hidden.policy.v1beta1.allowedHostPath,\n          // allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection.\n          //\n          // Examples: e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows \"foo.bar\", \"foo.baz\", etc.\n          withAllowedUnsafeSysctls(allowedUnsafeSysctls):: self + if std.type(allowedUnsafeSysctls) == 'array' then { allowedUnsafeSysctls: allowedUnsafeSysctls } else { allowedUnsafeSysctls: [allowedUnsafeSysctls] },\n          // allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection.\n          //\n          // Examples: e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows \"foo.bar\", \"foo.baz\", etc.\n          withAllowedUnsafeSysctlsMixin(allowedUnsafeSysctls):: self + if std.type(allowedUnsafeSysctls) == 'array' then { allowedUnsafeSysctls+: allowedUnsafeSysctls } else { allowedUnsafeSysctls+: [allowedUnsafeSysctls] },\n          // defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability.  You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.\n          withDefaultAddCapabilities(defaultAddCapabilities):: self + if std.type(defaultAddCapabilities) == 'array' then { defaultAddCapabilities: defaultAddCapabilities } else { defaultAddCapabilities: [defaultAddCapabilities] },\n          // defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability.  You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.\n          withDefaultAddCapabilitiesMixin(defaultAddCapabilities):: self + if std.type(defaultAddCapabilities) == 'array' then { defaultAddCapabilities+: defaultAddCapabilities } else { defaultAddCapabilities+: [defaultAddCapabilities] },\n          // defaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.\n          withDefaultAllowPrivilegeEscalation(defaultAllowPrivilegeEscalation):: self + { defaultAllowPrivilegeEscalation: defaultAllowPrivilegeEscalation },\n          // forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\n          //\n          // Examples: e.g. \"foo/*\" forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", \"foo.baz\", etc.\n          withForbiddenSysctls(forbiddenSysctls):: self + if std.type(forbiddenSysctls) == 'array' then { forbiddenSysctls: forbiddenSysctls } else { forbiddenSysctls: [forbiddenSysctls] },\n          // forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\n          //\n          // Examples: e.g. \"foo/*\" forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", \"foo.baz\", etc.\n          withForbiddenSysctlsMixin(forbiddenSysctls):: self + if std.type(forbiddenSysctls) == 'array' then { forbiddenSysctls+: forbiddenSysctls } else { forbiddenSysctls+: [forbiddenSysctls] },\n          // hostIPC determines if the policy allows the use of HostIPC in the pod spec.\n          withHostIpc(hostIpc):: self + { hostIPC: hostIpc },\n          // hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.\n          withHostNetwork(hostNetwork):: self + { hostNetwork: hostNetwork },\n          // hostPID determines if the policy allows the use of HostPID in the pod spec.\n          withHostPid(hostPid):: self + { hostPID: hostPid },\n          // hostPorts determines which host port ranges are allowed to be exposed.\n          withHostPorts(hostPorts):: self + if std.type(hostPorts) == 'array' then { hostPorts: hostPorts } else { hostPorts: [hostPorts] },\n          // hostPorts determines which host port ranges are allowed to be exposed.\n          withHostPortsMixin(hostPorts):: self + if std.type(hostPorts) == 'array' then { hostPorts+: hostPorts } else { hostPorts+: [hostPorts] },\n          hostPortsType:: hidden.policy.v1beta1.hostPortRange,\n          // privileged determines if a pod can request to be run as privileged.\n          withPrivileged(privileged):: self + { privileged: privileged },\n          // readOnlyRootFilesystem when set to true will force containers to run with a read only root file system.  If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.\n          withReadOnlyRootFilesystem(readOnlyRootFilesystem):: self + { readOnlyRootFilesystem: readOnlyRootFilesystem },\n          // requiredDropCapabilities are the capabilities that will be dropped from the container.  These are required to be dropped and cannot be added.\n          withRequiredDropCapabilities(requiredDropCapabilities):: self + if std.type(requiredDropCapabilities) == 'array' then { requiredDropCapabilities: requiredDropCapabilities } else { requiredDropCapabilities: [requiredDropCapabilities] },\n          // requiredDropCapabilities are the capabilities that will be dropped from the container.  These are required to be dropped and cannot be added.\n          withRequiredDropCapabilitiesMixin(requiredDropCapabilities):: self + if std.type(requiredDropCapabilities) == 'array' then { requiredDropCapabilities+: requiredDropCapabilities } else { requiredDropCapabilities+: [requiredDropCapabilities] },\n          // volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.\n          withVolumes(volumes):: self + if std.type(volumes) == 'array' then { volumes: volumes } else { volumes: [volumes] },\n          // volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.\n          withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then { volumes+: volumes } else { volumes+: [volumes] },\n          mixin:: {\n            // fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.\n            fsGroup:: {\n              local __fsGroupMixin(fsGroup) = { fsGroup+: fsGroup },\n              mixinInstance(fsGroup):: __fsGroupMixin(fsGroup),\n              // ranges are the allowed ranges of fs groups.  If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.\n              withRanges(ranges):: self + if std.type(ranges) == 'array' then __fsGroupMixin({ ranges: ranges }) else __fsGroupMixin({ ranges: [ranges] }),\n              // ranges are the allowed ranges of fs groups.  If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.\n              withRangesMixin(ranges):: self + if std.type(ranges) == 'array' then __fsGroupMixin({ ranges+: ranges }) else __fsGroupMixin({ ranges+: [ranges] }),\n              rangesType:: hidden.policy.v1beta1.idRange,\n              // rule is the strategy that will dictate what FSGroup is used in the SecurityContext.\n              withRule(rule):: self + __fsGroupMixin({ rule: rule }),\n            },\n            fsGroupType:: hidden.policy.v1beta1.fsGroupStrategyOptions,\n            // runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.\n            runAsUser:: {\n              local __runAsUserMixin(runAsUser) = { runAsUser+: runAsUser },\n              mixinInstance(runAsUser):: __runAsUserMixin(runAsUser),\n              // ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.\n              withRanges(ranges):: self + if std.type(ranges) == 'array' then __runAsUserMixin({ ranges: ranges }) else __runAsUserMixin({ ranges: [ranges] }),\n              // ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.\n              withRangesMixin(ranges):: self + if std.type(ranges) == 'array' then __runAsUserMixin({ ranges+: ranges }) else __runAsUserMixin({ ranges+: [ranges] }),\n              rangesType:: hidden.policy.v1beta1.idRange,\n              // rule is the strategy that will dictate the allowable RunAsUser values that may be set.\n              withRule(rule):: self + __runAsUserMixin({ rule: rule }),\n            },\n            runAsUserType:: hidden.policy.v1beta1.runAsUserStrategyOptions,\n            // seLinux is the strategy that will dictate the allowable labels that may be set.\n            seLinux:: {\n              local __seLinuxMixin(seLinux) = { seLinux+: seLinux },\n              mixinInstance(seLinux):: __seLinuxMixin(seLinux),\n              // rule is the strategy that will dictate the allowable labels that may be set.\n              withRule(rule):: self + __seLinuxMixin({ rule: rule }),\n              // seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/\n              seLinuxOptions:: {\n                local __seLinuxOptionsMixin(seLinuxOptions) = __seLinuxMixin({ seLinuxOptions+: seLinuxOptions }),\n                mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                // Level is SELinux level label that applies to the container.\n                withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n                // Role is a SELinux role label that applies to the container.\n                withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n                // Type is a SELinux type label that applies to the container.\n                withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n                // User is a SELinux user label that applies to the container.\n                withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n              },\n              seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n            },\n            seLinuxType:: hidden.policy.v1beta1.seLinuxStrategyOptions,\n            // supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.\n            supplementalGroups:: {\n              local __supplementalGroupsMixin(supplementalGroups) = { supplementalGroups+: supplementalGroups },\n              mixinInstance(supplementalGroups):: __supplementalGroupsMixin(supplementalGroups),\n              // ranges are the allowed ranges of supplemental groups.  If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.\n              withRanges(ranges):: self + if std.type(ranges) == 'array' then __supplementalGroupsMixin({ ranges: ranges }) else __supplementalGroupsMixin({ ranges: [ranges] }),\n              // ranges are the allowed ranges of supplemental groups.  If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.\n              withRangesMixin(ranges):: self + if std.type(ranges) == 'array' then __supplementalGroupsMixin({ ranges+: ranges }) else __supplementalGroupsMixin({ ranges+: [ranges] }),\n              rangesType:: hidden.policy.v1beta1.idRange,\n              // rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.\n              withRule(rule):: self + __supplementalGroupsMixin({ rule: rule }),\n            },\n            supplementalGroupsType:: hidden.policy.v1beta1.supplementalGroupsStrategyOptions,\n          },\n        },\n        // RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy.\n        runAsUserStrategyOptions:: {\n          new():: {},\n          // ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.\n          withRanges(ranges):: self + if std.type(ranges) == 'array' then { ranges: ranges } else { ranges: [ranges] },\n          // ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.\n          withRangesMixin(ranges):: self + if std.type(ranges) == 'array' then { ranges+: ranges } else { ranges+: [ranges] },\n          rangesType:: hidden.policy.v1beta1.idRange,\n          // rule is the strategy that will dictate the allowable RunAsUser values that may be set.\n          withRule(rule):: self + { rule: rule },\n          mixin:: {},\n        },\n        // SELinuxStrategyOptions defines the strategy type and any options used to create the strategy.\n        seLinuxStrategyOptions:: {\n          new():: {},\n          // rule is the strategy that will dictate the allowable labels that may be set.\n          withRule(rule):: self + { rule: rule },\n          mixin:: {\n            // seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/\n            seLinuxOptions:: {\n              local __seLinuxOptionsMixin(seLinuxOptions) = { seLinuxOptions+: seLinuxOptions },\n              mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n              // Level is SELinux level label that applies to the container.\n              withLevel(level):: self + __seLinuxOptionsMixin({ level: level }),\n              // Role is a SELinux role label that applies to the container.\n              withRole(role):: self + __seLinuxOptionsMixin({ role: role }),\n              // Type is a SELinux type label that applies to the container.\n              withType(type):: self + __seLinuxOptionsMixin({ type: type }),\n              // User is a SELinux user label that applies to the container.\n              withUser(user):: self + __seLinuxOptionsMixin({ user: user }),\n            },\n            seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n          },\n        },\n        // SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy.\n        supplementalGroupsStrategyOptions:: {\n          new():: {},\n          // ranges are the allowed ranges of supplemental groups.  If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.\n          withRanges(ranges):: self + if std.type(ranges) == 'array' then { ranges: ranges } else { ranges: [ranges] },\n          // ranges are the allowed ranges of supplemental groups.  If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.\n          withRangesMixin(ranges):: self + if std.type(ranges) == 'array' then { ranges+: ranges } else { ranges+: [ranges] },\n          rangesType:: hidden.policy.v1beta1.idRange,\n          // rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.\n          withRule(rule):: self + { rule: rule },\n          mixin:: {},\n        },\n      },\n    },\n    rbac:: {\n      v1:: {\n        local apiVersion = { apiVersion: 'rbac/v1' },\n        // AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole\n        aggregationRule:: {\n          new():: {},\n          // ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added\n          withClusterRoleSelectors(clusterRoleSelectors):: self + if std.type(clusterRoleSelectors) == 'array' then { clusterRoleSelectors: clusterRoleSelectors } else { clusterRoleSelectors: [clusterRoleSelectors] },\n          // ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added\n          withClusterRoleSelectorsMixin(clusterRoleSelectors):: self + if std.type(clusterRoleSelectors) == 'array' then { clusterRoleSelectors+: clusterRoleSelectors } else { clusterRoleSelectors+: [clusterRoleSelectors] },\n          clusterRoleSelectorsType:: hidden.meta.v1.labelSelector,\n          mixin:: {},\n        },\n        // ClusterRoleBindingList is a collection of ClusterRoleBindings\n        clusterRoleBindingList:: {\n          new():: {},\n          // Items is a list of ClusterRoleBindings\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is a list of ClusterRoleBindings\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.rbac.v1.clusterRoleBinding,\n          mixin:: {},\n        },\n        // ClusterRoleList is a collection of ClusterRoles\n        clusterRoleList:: {\n          new():: {},\n          // Items is a list of ClusterRoles\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is a list of ClusterRoles\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.rbac.v1.clusterRole,\n          mixin:: {},\n        },\n        // PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.\n        policyRule:: {\n          new():: {},\n          // APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.\n          withApiGroups(apiGroups):: self + if std.type(apiGroups) == 'array' then { apiGroups: apiGroups } else { apiGroups: [apiGroups] },\n          // APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.\n          withApiGroupsMixin(apiGroups):: self + if std.type(apiGroups) == 'array' then { apiGroups+: apiGroups } else { apiGroups+: [apiGroups] },\n          // NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"),  but not both.\n          withNonResourceUrls(nonResourceUrls):: self + if std.type(nonResourceUrls) == 'array' then { nonResourceURLs: nonResourceUrls } else { nonResourceURLs: [nonResourceUrls] },\n          // NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"),  but not both.\n          withNonResourceUrlsMixin(nonResourceUrls):: self + if std.type(nonResourceUrls) == 'array' then { nonResourceURLs+: nonResourceUrls } else { nonResourceURLs+: [nonResourceUrls] },\n          // ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.\n          withResourceNames(resourceNames):: self + if std.type(resourceNames) == 'array' then { resourceNames: resourceNames } else { resourceNames: [resourceNames] },\n          // ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.\n          withResourceNamesMixin(resourceNames):: self + if std.type(resourceNames) == 'array' then { resourceNames+: resourceNames } else { resourceNames+: [resourceNames] },\n          // Resources is a list of resources this rule applies to.  ResourceAll represents all resources.\n          withResources(resources):: self + if std.type(resources) == 'array' then { resources: resources } else { resources: [resources] },\n          // Resources is a list of resources this rule applies to.  ResourceAll represents all resources.\n          withResourcesMixin(resources):: self + if std.type(resources) == 'array' then { resources+: resources } else { resources+: [resources] },\n          // Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule.  VerbAll represents all kinds.\n          withVerbs(verbs):: self + if std.type(verbs) == 'array' then { verbs: verbs } else { verbs: [verbs] },\n          // Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule.  VerbAll represents all kinds.\n          withVerbsMixin(verbs):: self + if std.type(verbs) == 'array' then { verbs+: verbs } else { verbs+: [verbs] },\n          mixin:: {},\n        },\n        // RoleBindingList is a collection of RoleBindings\n        roleBindingList:: {\n          new():: {},\n          // Items is a list of RoleBindings\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is a list of RoleBindings\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.rbac.v1.roleBinding,\n          mixin:: {},\n        },\n        // RoleList is a collection of Roles\n        roleList:: {\n          new():: {},\n          // Items is a list of Roles\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is a list of Roles\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.rbac.v1.role,\n          mixin:: {},\n        },\n        // RoleRef contains information that points to the role being used\n        roleRef:: {\n          new():: {},\n          // APIGroup is the group for the resource being referenced\n          withApiGroup(apiGroup):: self + { apiGroup: apiGroup },\n          // Kind is the type of resource being referenced\n          withKind(kind):: self + { kind: kind },\n          // Name is the name of resource being referenced\n          withName(name):: self + { name: name },\n          mixin:: {},\n        },\n        // Subject contains a reference to the object or user identities a role binding applies to.  This can either hold a direct API object reference, or a value for non-objects such as user and group names.\n        subject:: {\n          new():: {},\n          // APIGroup holds the API group of the referenced subject. Defaults to \"\" for ServiceAccount subjects. Defaults to \"rbac.authorization.k8s.io\" for User and Group subjects.\n          withApiGroup(apiGroup):: self + { apiGroup: apiGroup },\n          // Kind of object being referenced. Values defined by this API group are \"User\", \"Group\", and \"ServiceAccount\". If the Authorizer does not recognized the kind value, the Authorizer should report an error.\n          withKind(kind):: self + { kind: kind },\n          // Name of the object being referenced.\n          withName(name):: self + { name: name },\n          // Namespace of the referenced object.  If the object kind is non-namespace, such as \"User\" or \"Group\", and this value is not empty the Authorizer should report an error.\n          withNamespace(namespace):: self + { namespace: namespace },\n          mixin:: {},\n        },\n      },\n      v1alpha1:: {\n        local apiVersion = { apiVersion: 'rbac/v1alpha1' },\n        // AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole\n        aggregationRule:: {\n          new():: {},\n          // ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added\n          withClusterRoleSelectors(clusterRoleSelectors):: self + if std.type(clusterRoleSelectors) == 'array' then { clusterRoleSelectors: clusterRoleSelectors } else { clusterRoleSelectors: [clusterRoleSelectors] },\n          // ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added\n          withClusterRoleSelectorsMixin(clusterRoleSelectors):: self + if std.type(clusterRoleSelectors) == 'array' then { clusterRoleSelectors+: clusterRoleSelectors } else { clusterRoleSelectors+: [clusterRoleSelectors] },\n          clusterRoleSelectorsType:: hidden.meta.v1.labelSelector,\n          mixin:: {},\n        },\n        // ClusterRoleBindingList is a collection of ClusterRoleBindings\n        clusterRoleBindingList:: {\n          new():: {},\n          // Items is a list of ClusterRoleBindings\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is a list of ClusterRoleBindings\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.rbac.v1alpha1.clusterRoleBinding,\n          mixin:: {},\n        },\n        // ClusterRoleList is a collection of ClusterRoles\n        clusterRoleList:: {\n          new():: {},\n          // Items is a list of ClusterRoles\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is a list of ClusterRoles\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.rbac.v1alpha1.clusterRole,\n          mixin:: {},\n        },\n        // PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.\n        policyRule:: {\n          new():: {},\n          // APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.\n          withApiGroups(apiGroups):: self + if std.type(apiGroups) == 'array' then { apiGroups: apiGroups } else { apiGroups: [apiGroups] },\n          // APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.\n          withApiGroupsMixin(apiGroups):: self + if std.type(apiGroups) == 'array' then { apiGroups+: apiGroups } else { apiGroups+: [apiGroups] },\n          // NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full, final step in the path This name is intentionally different than the internal type so that the DefaultConvert works nicely and because the ordering may be different. Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"),  but not both.\n          withNonResourceUrls(nonResourceUrls):: self + if std.type(nonResourceUrls) == 'array' then { nonResourceURLs: nonResourceUrls } else { nonResourceURLs: [nonResourceUrls] },\n          // NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full, final step in the path This name is intentionally different than the internal type so that the DefaultConvert works nicely and because the ordering may be different. Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"),  but not both.\n          withNonResourceUrlsMixin(nonResourceUrls):: self + if std.type(nonResourceUrls) == 'array' then { nonResourceURLs+: nonResourceUrls } else { nonResourceURLs+: [nonResourceUrls] },\n          // ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.\n          withResourceNames(resourceNames):: self + if std.type(resourceNames) == 'array' then { resourceNames: resourceNames } else { resourceNames: [resourceNames] },\n          // ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.\n          withResourceNamesMixin(resourceNames):: self + if std.type(resourceNames) == 'array' then { resourceNames+: resourceNames } else { resourceNames+: [resourceNames] },\n          // Resources is a list of resources this rule applies to.  ResourceAll represents all resources.\n          withResources(resources):: self + if std.type(resources) == 'array' then { resources: resources } else { resources: [resources] },\n          // Resources is a list of resources this rule applies to.  ResourceAll represents all resources.\n          withResourcesMixin(resources):: self + if std.type(resources) == 'array' then { resources+: resources } else { resources+: [resources] },\n          // Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule.  VerbAll represents all kinds.\n          withVerbs(verbs):: self + if std.type(verbs) == 'array' then { verbs: verbs } else { verbs: [verbs] },\n          // Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule.  VerbAll represents all kinds.\n          withVerbsMixin(verbs):: self + if std.type(verbs) == 'array' then { verbs+: verbs } else { verbs+: [verbs] },\n          mixin:: {},\n        },\n        // RoleBindingList is a collection of RoleBindings\n        roleBindingList:: {\n          new():: {},\n          // Items is a list of RoleBindings\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is a list of RoleBindings\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.rbac.v1alpha1.roleBinding,\n          mixin:: {},\n        },\n        // RoleList is a collection of Roles\n        roleList:: {\n          new():: {},\n          // Items is a list of Roles\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is a list of Roles\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.rbac.v1alpha1.role,\n          mixin:: {},\n        },\n        // RoleRef contains information that points to the role being used\n        roleRef:: {\n          new():: {},\n          // APIGroup is the group for the resource being referenced\n          withApiGroup(apiGroup):: self + { apiGroup: apiGroup },\n          // Kind is the type of resource being referenced\n          withKind(kind):: self + { kind: kind },\n          // Name is the name of resource being referenced\n          withName(name):: self + { name: name },\n          mixin:: {},\n        },\n        // Subject contains a reference to the object or user identities a role binding applies to.  This can either hold a direct API object reference, or a value for non-objects such as user and group names.\n        subject:: {\n          new():: {},\n          // Kind of object being referenced. Values defined by this API group are \"User\", \"Group\", and \"ServiceAccount\". If the Authorizer does not recognized the kind value, the Authorizer should report an error.\n          withKind(kind):: self + { kind: kind },\n          // Name of the object being referenced.\n          withName(name):: self + { name: name },\n          // Namespace of the referenced object.  If the object kind is non-namespace, such as \"User\" or \"Group\", and this value is not empty the Authorizer should report an error.\n          withNamespace(namespace):: self + { namespace: namespace },\n          mixin:: {},\n        },\n      },\n      v1beta1:: {\n        local apiVersion = { apiVersion: 'rbac/v1beta1' },\n        // AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole\n        aggregationRule:: {\n          new():: {},\n          // ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added\n          withClusterRoleSelectors(clusterRoleSelectors):: self + if std.type(clusterRoleSelectors) == 'array' then { clusterRoleSelectors: clusterRoleSelectors } else { clusterRoleSelectors: [clusterRoleSelectors] },\n          // ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added\n          withClusterRoleSelectorsMixin(clusterRoleSelectors):: self + if std.type(clusterRoleSelectors) == 'array' then { clusterRoleSelectors+: clusterRoleSelectors } else { clusterRoleSelectors+: [clusterRoleSelectors] },\n          clusterRoleSelectorsType:: hidden.meta.v1.labelSelector,\n          mixin:: {},\n        },\n        // ClusterRoleBindingList is a collection of ClusterRoleBindings\n        clusterRoleBindingList:: {\n          new():: {},\n          // Items is a list of ClusterRoleBindings\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is a list of ClusterRoleBindings\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.rbac.v1beta1.clusterRoleBinding,\n          mixin:: {},\n        },\n        // ClusterRoleList is a collection of ClusterRoles\n        clusterRoleList:: {\n          new():: {},\n          // Items is a list of ClusterRoles\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is a list of ClusterRoles\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.rbac.v1beta1.clusterRole,\n          mixin:: {},\n        },\n        // PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.\n        policyRule:: {\n          new():: {},\n          // APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.\n          withApiGroups(apiGroups):: self + if std.type(apiGroups) == 'array' then { apiGroups: apiGroups } else { apiGroups: [apiGroups] },\n          // APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.\n          withApiGroupsMixin(apiGroups):: self + if std.type(apiGroups) == 'array' then { apiGroups+: apiGroups } else { apiGroups+: [apiGroups] },\n          // NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"),  but not both.\n          withNonResourceUrls(nonResourceUrls):: self + if std.type(nonResourceUrls) == 'array' then { nonResourceURLs: nonResourceUrls } else { nonResourceURLs: [nonResourceUrls] },\n          // NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"),  but not both.\n          withNonResourceUrlsMixin(nonResourceUrls):: self + if std.type(nonResourceUrls) == 'array' then { nonResourceURLs+: nonResourceUrls } else { nonResourceURLs+: [nonResourceUrls] },\n          // ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.\n          withResourceNames(resourceNames):: self + if std.type(resourceNames) == 'array' then { resourceNames: resourceNames } else { resourceNames: [resourceNames] },\n          // ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.\n          withResourceNamesMixin(resourceNames):: self + if std.type(resourceNames) == 'array' then { resourceNames+: resourceNames } else { resourceNames+: [resourceNames] },\n          // Resources is a list of resources this rule applies to.  '*' represents all resources in the specified apiGroups. '*/foo' represents the subresource 'foo' for all resources in the specified apiGroups.\n          withResources(resources):: self + if std.type(resources) == 'array' then { resources: resources } else { resources: [resources] },\n          // Resources is a list of resources this rule applies to.  '*' represents all resources in the specified apiGroups. '*/foo' represents the subresource 'foo' for all resources in the specified apiGroups.\n          withResourcesMixin(resources):: self + if std.type(resources) == 'array' then { resources+: resources } else { resources+: [resources] },\n          // Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule.  VerbAll represents all kinds.\n          withVerbs(verbs):: self + if std.type(verbs) == 'array' then { verbs: verbs } else { verbs: [verbs] },\n          // Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule.  VerbAll represents all kinds.\n          withVerbsMixin(verbs):: self + if std.type(verbs) == 'array' then { verbs+: verbs } else { verbs+: [verbs] },\n          mixin:: {},\n        },\n        // RoleBindingList is a collection of RoleBindings\n        roleBindingList:: {\n          new():: {},\n          // Items is a list of RoleBindings\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is a list of RoleBindings\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.rbac.v1beta1.roleBinding,\n          mixin:: {},\n        },\n        // RoleList is a collection of Roles\n        roleList:: {\n          new():: {},\n          // Items is a list of Roles\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is a list of Roles\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.rbac.v1beta1.role,\n          mixin:: {},\n        },\n        // RoleRef contains information that points to the role being used\n        roleRef:: {\n          new():: {},\n          // APIGroup is the group for the resource being referenced\n          withApiGroup(apiGroup):: self + { apiGroup: apiGroup },\n          // Kind is the type of resource being referenced\n          withKind(kind):: self + { kind: kind },\n          // Name is the name of resource being referenced\n          withName(name):: self + { name: name },\n          mixin:: {},\n        },\n        // Subject contains a reference to the object or user identities a role binding applies to.  This can either hold a direct API object reference, or a value for non-objects such as user and group names.\n        subject:: {\n          new():: {},\n          // APIGroup holds the API group of the referenced subject. Defaults to \"\" for ServiceAccount subjects. Defaults to \"rbac.authorization.k8s.io\" for User and Group subjects.\n          withApiGroup(apiGroup):: self + { apiGroup: apiGroup },\n          // Kind of object being referenced. Values defined by this API group are \"User\", \"Group\", and \"ServiceAccount\". If the Authorizer does not recognized the kind value, the Authorizer should report an error.\n          withKind(kind):: self + { kind: kind },\n          // Name of the object being referenced.\n          withName(name):: self + { name: name },\n          // Namespace of the referenced object.  If the object kind is non-namespace, such as \"User\" or \"Group\", and this value is not empty the Authorizer should report an error.\n          withNamespace(namespace):: self + { namespace: namespace },\n          mixin:: {},\n        },\n      },\n    },\n    scheduling:: {\n      v1alpha1:: {\n        local apiVersion = { apiVersion: 'scheduling/v1alpha1' },\n        // PriorityClassList is a collection of priority classes.\n        priorityClassList:: {\n          new():: {},\n          // items is the list of PriorityClasses\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // items is the list of PriorityClasses\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.scheduling.v1alpha1.priorityClass,\n          mixin:: {},\n        },\n      },\n      v1beta1:: {\n        local apiVersion = { apiVersion: 'scheduling/v1beta1' },\n        // PriorityClassList is a collection of priority classes.\n        priorityClassList:: {\n          new():: {},\n          // items is the list of PriorityClasses\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // items is the list of PriorityClasses\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.scheduling.v1beta1.priorityClass,\n          mixin:: {},\n        },\n      },\n    },\n    settings:: {\n      v1alpha1:: {\n        local apiVersion = { apiVersion: 'settings/v1alpha1' },\n        // PodPresetList is a list of PodPreset objects.\n        podPresetList:: {\n          new():: {},\n          // Items is a list of schema objects.\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is a list of schema objects.\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.settings.v1alpha1.podPreset,\n          mixin:: {},\n        },\n        // PodPresetSpec is a description of a pod preset.\n        podPresetSpec:: {\n          new():: {},\n          // Env defines the collection of EnvVar to inject into containers.\n          withEnv(env):: self + if std.type(env) == 'array' then { env: env } else { env: [env] },\n          // Env defines the collection of EnvVar to inject into containers.\n          withEnvMixin(env):: self + if std.type(env) == 'array' then { env+: env } else { env+: [env] },\n          envType:: hidden.core.v1.envVar,\n          // EnvFrom defines the collection of EnvFromSource to inject into containers.\n          withEnvFrom(envFrom):: self + if std.type(envFrom) == 'array' then { envFrom: envFrom } else { envFrom: [envFrom] },\n          // EnvFrom defines the collection of EnvFromSource to inject into containers.\n          withEnvFromMixin(envFrom):: self + if std.type(envFrom) == 'array' then { envFrom+: envFrom } else { envFrom+: [envFrom] },\n          envFromType:: hidden.core.v1.envFromSource,\n          // VolumeMounts defines the collection of VolumeMount to inject into containers.\n          withVolumeMounts(volumeMounts):: self + if std.type(volumeMounts) == 'array' then { volumeMounts: volumeMounts } else { volumeMounts: [volumeMounts] },\n          // VolumeMounts defines the collection of VolumeMount to inject into containers.\n          withVolumeMountsMixin(volumeMounts):: self + if std.type(volumeMounts) == 'array' then { volumeMounts+: volumeMounts } else { volumeMounts+: [volumeMounts] },\n          volumeMountsType:: hidden.core.v1.volumeMount,\n          // Volumes defines the collection of Volume to inject into the pod.\n          withVolumes(volumes):: self + if std.type(volumes) == 'array' then { volumes: volumes } else { volumes: [volumes] },\n          // Volumes defines the collection of Volume to inject into the pod.\n          withVolumesMixin(volumes):: self + if std.type(volumes) == 'array' then { volumes+: volumes } else { volumes+: [volumes] },\n          volumesType:: hidden.core.v1.volume,\n          mixin:: {\n            // Selector is a label query over a set of resources, in this case pods. Required.\n            selector:: {\n              local __selectorMixin(selector) = { selector+: selector },\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions: matchExpressions }) else __selectorMixin({ matchExpressions: [matchExpressions] }),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == 'array' then __selectorMixin({ matchExpressions+: matchExpressions }) else __selectorMixin({ matchExpressions+: [matchExpressions] }),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({ matchLabels: matchLabels }),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({ matchLabels+: matchLabels }),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n          },\n        },\n      },\n    },\n    storage:: {\n      v1:: {\n        local apiVersion = { apiVersion: 'storage/v1' },\n        // StorageClassList is a collection of storage classes.\n        storageClassList:: {\n          new():: {},\n          // Items is the list of StorageClasses\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is the list of StorageClasses\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.storage.v1.storageClass,\n          mixin:: {},\n        },\n      },\n      v1alpha1:: {\n        local apiVersion = { apiVersion: 'storage/v1alpha1' },\n        // VolumeAttachmentList is a collection of VolumeAttachment objects.\n        volumeAttachmentList:: {\n          new():: {},\n          // Items is the list of VolumeAttachments\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is the list of VolumeAttachments\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.storage.v1alpha1.volumeAttachment,\n          mixin:: {},\n        },\n        // VolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.\n        volumeAttachmentSource:: {\n          new():: {},\n          // Name of the persistent volume to attach.\n          withPersistentVolumeName(persistentVolumeName):: self + { persistentVolumeName: persistentVolumeName },\n          mixin:: {},\n        },\n        // VolumeAttachmentSpec is the specification of a VolumeAttachment request.\n        volumeAttachmentSpec:: {\n          new():: {},\n          // Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().\n          withAttacher(attacher):: self + { attacher: attacher },\n          // The node that the volume should be attached to.\n          withNodeName(nodeName):: self + { nodeName: nodeName },\n          mixin:: {\n            // Source represents the volume that should be attached.\n            source:: {\n              local __sourceMixin(source) = { source+: source },\n              mixinInstance(source):: __sourceMixin(source),\n              // Name of the persistent volume to attach.\n              withPersistentVolumeName(persistentVolumeName):: self + __sourceMixin({ persistentVolumeName: persistentVolumeName }),\n            },\n            sourceType:: hidden.storage.v1alpha1.volumeAttachmentSource,\n          },\n        },\n        // VolumeAttachmentStatus is the status of a VolumeAttachment request.\n        volumeAttachmentStatus:: {\n          new():: {},\n          // Indicates the volume is successfully attached. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.\n          withAttached(attached):: self + { attached: attached },\n          // Upon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.\n          withAttachmentMetadata(attachmentMetadata):: self + { attachmentMetadata: attachmentMetadata },\n          // Upon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.\n          withAttachmentMetadataMixin(attachmentMetadata):: self + { attachmentMetadata+: attachmentMetadata },\n          mixin:: {\n            // The last error encountered during attach operation, if any. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.\n            attachError:: {\n              local __attachErrorMixin(attachError) = { attachError+: attachError },\n              mixinInstance(attachError):: __attachErrorMixin(attachError),\n              // String detailing the error encountered during Attach or Detach operation. This string maybe logged, so it should not contain sensitive information.\n              withMessage(message):: self + __attachErrorMixin({ message: message }),\n              // Time the error was encountered.\n              withTime(time):: self + __attachErrorMixin({ time: time }),\n            },\n            attachErrorType:: hidden.storage.v1alpha1.volumeError,\n            // The last error encountered during detach operation, if any. This field must only be set by the entity completing the detach operation, i.e. the external-attacher.\n            detachError:: {\n              local __detachErrorMixin(detachError) = { detachError+: detachError },\n              mixinInstance(detachError):: __detachErrorMixin(detachError),\n              // String detailing the error encountered during Attach or Detach operation. This string maybe logged, so it should not contain sensitive information.\n              withMessage(message):: self + __detachErrorMixin({ message: message }),\n              // Time the error was encountered.\n              withTime(time):: self + __detachErrorMixin({ time: time }),\n            },\n            detachErrorType:: hidden.storage.v1alpha1.volumeError,\n          },\n        },\n        // VolumeError captures an error encountered during a volume operation.\n        volumeError:: {\n          new():: {},\n          // String detailing the error encountered during Attach or Detach operation. This string maybe logged, so it should not contain sensitive information.\n          withMessage(message):: self + { message: message },\n          // Time the error was encountered.\n          withTime(time):: self + { time: time },\n          mixin:: {},\n        },\n      },\n      v1beta1:: {\n        local apiVersion = { apiVersion: 'storage/v1beta1' },\n        // StorageClassList is a collection of storage classes.\n        storageClassList:: {\n          new():: {},\n          // Items is the list of StorageClasses\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is the list of StorageClasses\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.storage.v1beta1.storageClass,\n          mixin:: {},\n        },\n        // VolumeAttachmentList is a collection of VolumeAttachment objects.\n        volumeAttachmentList:: {\n          new():: {},\n          // Items is the list of VolumeAttachments\n          withItems(items):: self + if std.type(items) == 'array' then { items: items } else { items: [items] },\n          // Items is the list of VolumeAttachments\n          withItemsMixin(items):: self + if std.type(items) == 'array' then { items+: items } else { items+: [items] },\n          itemsType:: hidden.storage.v1beta1.volumeAttachment,\n          mixin:: {},\n        },\n        // VolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.\n        volumeAttachmentSource:: {\n          new():: {},\n          // Name of the persistent volume to attach.\n          withPersistentVolumeName(persistentVolumeName):: self + { persistentVolumeName: persistentVolumeName },\n          mixin:: {},\n        },\n        // VolumeAttachmentSpec is the specification of a VolumeAttachment request.\n        volumeAttachmentSpec:: {\n          new():: {},\n          // Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().\n          withAttacher(attacher):: self + { attacher: attacher },\n          // The node that the volume should be attached to.\n          withNodeName(nodeName):: self + { nodeName: nodeName },\n          mixin:: {\n            // Source represents the volume that should be attached.\n            source:: {\n              local __sourceMixin(source) = { source+: source },\n              mixinInstance(source):: __sourceMixin(source),\n              // Name of the persistent volume to attach.\n              withPersistentVolumeName(persistentVolumeName):: self + __sourceMixin({ persistentVolumeName: persistentVolumeName }),\n            },\n            sourceType:: hidden.storage.v1beta1.volumeAttachmentSource,\n          },\n        },\n        // VolumeAttachmentStatus is the status of a VolumeAttachment request.\n        volumeAttachmentStatus:: {\n          new():: {},\n          // Indicates the volume is successfully attached. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.\n          withAttached(attached):: self + { attached: attached },\n          // Upon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.\n          withAttachmentMetadata(attachmentMetadata):: self + { attachmentMetadata: attachmentMetadata },\n          // Upon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.\n          withAttachmentMetadataMixin(attachmentMetadata):: self + { attachmentMetadata+: attachmentMetadata },\n          mixin:: {\n            // The last error encountered during attach operation, if any. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.\n            attachError:: {\n              local __attachErrorMixin(attachError) = { attachError+: attachError },\n              mixinInstance(attachError):: __attachErrorMixin(attachError),\n              // String detailing the error encountered during Attach or Detach operation. This string maybe logged, so it should not contain sensitive information.\n              withMessage(message):: self + __attachErrorMixin({ message: message }),\n              // Time the error was encountered.\n              withTime(time):: self + __attachErrorMixin({ time: time }),\n            },\n            attachErrorType:: hidden.storage.v1beta1.volumeError,\n            // The last error encountered during detach operation, if any. This field must only be set by the entity completing the detach operation, i.e. the external-attacher.\n            detachError:: {\n              local __detachErrorMixin(detachError) = { detachError+: detachError },\n              mixinInstance(detachError):: __detachErrorMixin(detachError),\n              // String detailing the error encountered during Attach or Detach operation. This string maybe logged, so it should not contain sensitive information.\n              withMessage(message):: self + __detachErrorMixin({ message: message }),\n              // Time the error was encountered.\n              withTime(time):: self + __detachErrorMixin({ time: time }),\n            },\n            detachErrorType:: hidden.storage.v1beta1.volumeError,\n          },\n        },\n        // VolumeError captures an error encountered during a volume operation.\n        volumeError:: {\n          new():: {},\n          // String detailing the error encountered during Attach or Detach operation. This string maybe logged, so it should not contain sensitive information.\n          withMessage(message):: self + { message: message },\n          // Time the error was encountered.\n          withTime(time):: self + { time: time },\n          mixin:: {},\n        },\n      },\n    },\n  },\n}"
  },
  {
    "path": "devstats/ks-app/lib/ksonnet-lib/v1.11.6/swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n   \"title\": \"Kubernetes\",\n   \"version\": \"v1.11.6\"\n  },\n  \"paths\": {\n   \"/api/\": {\n    \"get\": {\n     \"description\": \"get available API versions\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core\"\n     ],\n     \"operationId\": \"getCoreAPIVersions\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIVersions\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/api/v1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"getCoreV1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/api/v1/componentstatuses\": {\n    \"get\": {\n     \"description\": \"list objects of kind ComponentStatus\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1ComponentStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ComponentStatusList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ComponentStatus\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/componentstatuses/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ComponentStatus\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1ComponentStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ComponentStatus\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ComponentStatus\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ComponentStatus\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/configmaps\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ConfigMap\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1ConfigMapForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMapList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ConfigMap\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/endpoints\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Endpoints\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1EndpointsForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.EndpointsList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Endpoints\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/events\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1EventForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.EventList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Event\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/limitranges\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind LimitRange\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1LimitRangeForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.LimitRangeList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"LimitRange\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Namespace\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1Namespace\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.NamespaceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Namespace\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Namespace\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1Namespace\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Namespace\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Namespace\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Namespace\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Namespace\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Namespace\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/bindings\": {\n    \"post\": {\n     \"description\": \"create a Binding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Binding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Binding\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Binding\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Binding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Binding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/configmaps\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ConfigMap\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedConfigMap\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMapList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ConfigMap\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ConfigMap\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedConfigMap\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMap\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMap\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMap\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMap\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ConfigMap\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ConfigMap\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedConfigMap\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ConfigMap\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/configmaps/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ConfigMap\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedConfigMap\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMap\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ConfigMap\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ConfigMap\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedConfigMap\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMap\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMap\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMap\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ConfigMap\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ConfigMap\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedConfigMap\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ConfigMap\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ConfigMap\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedConfigMap\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMap\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ConfigMap\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ConfigMap\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/endpoints\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Endpoints\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedEndpoints\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.EndpointsList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Endpoints\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create Endpoints\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedEndpoints\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Endpoints\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Endpoints\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Endpoints\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Endpoints\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Endpoints\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Endpoints\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedEndpoints\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Endpoints\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/endpoints/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Endpoints\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedEndpoints\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Endpoints\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Endpoints\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Endpoints\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedEndpoints\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Endpoints\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Endpoints\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Endpoints\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Endpoints\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete Endpoints\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedEndpoints\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Endpoints\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Endpoints\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedEndpoints\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Endpoints\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Endpoints\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Endpoints\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/events\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedEvent\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.EventList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Event\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create an Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedEvent\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Event\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Event\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Event\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Event\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Event\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedEvent\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Event\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/events/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedEvent\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Event\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Event\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedEvent\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Event\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Event\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Event\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Event\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete an Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedEvent\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Event\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Event\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedEvent\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Event\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Event\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Event\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/limitranges\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind LimitRange\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedLimitRange\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.LimitRangeList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"LimitRange\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a LimitRange\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedLimitRange\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.LimitRange\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.LimitRange\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.LimitRange\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.LimitRange\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"LimitRange\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of LimitRange\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedLimitRange\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"LimitRange\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/limitranges/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified LimitRange\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedLimitRange\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.LimitRange\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"LimitRange\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified LimitRange\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedLimitRange\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.LimitRange\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.LimitRange\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.LimitRange\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"LimitRange\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a LimitRange\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedLimitRange\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"LimitRange\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified LimitRange\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedLimitRange\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.LimitRange\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"LimitRange\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the LimitRange\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/persistentvolumeclaims\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedPersistentVolumeClaim\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolumeClaim\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedPersistentVolumeClaim\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolumeClaim\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedPersistentVolumeClaim\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolumeClaim\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedPersistentVolumeClaim\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolumeClaim\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedPersistentVolumeClaim\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolumeClaim\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedPersistentVolumeClaim\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolumeClaim\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified PersistentVolumeClaim\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedPersistentVolumeClaim\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolumeClaim\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PersistentVolumeClaim\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedPersistentVolumeClaimStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolumeClaim\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedPersistentVolumeClaimStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolumeClaim\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified PersistentVolumeClaim\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedPersistentVolumeClaimStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolumeClaim\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PersistentVolumeClaim\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedPod\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedPod\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Pod\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Pod\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Pod\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Pod\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedPod\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedPod\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Pod\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedPod\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Pod\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Pod\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Pod\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedPod\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Pod\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedPod\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Pod\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Pod\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods/{name}/attach\": {\n    \"get\": {\n     \"description\": \"connect GET requests to attach of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1GetNamespacedPodAttach\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"connect POST requests to attach of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PostNamespacedPodAttach\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The container in which to execute the command. Defaults to only container if there is only one container in the pod.\",\n      \"name\": \"container\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Pod\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Stderr if true indicates that stderr is to be redirected for the attach call. Defaults to true.\",\n      \"name\": \"stderr\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Stdin if true, redirects the standard input stream of the pod for this call. Defaults to false.\",\n      \"name\": \"stdin\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Stdout if true indicates that stdout is to be redirected for the attach call. Defaults to true.\",\n      \"name\": \"stdout\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"TTY if true indicates that a tty will be allocated for the attach call. This is passed through the container runtime so the tty is allocated on the worker node by the container runtime. Defaults to false.\",\n      \"name\": \"tty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods/{name}/binding\": {\n    \"post\": {\n     \"description\": \"create binding of a Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedPodBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Binding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Binding\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Binding\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Binding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Binding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Binding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods/{name}/eviction\": {\n    \"post\": {\n     \"description\": \"create eviction of a Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedPodEviction\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.Eviction\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.Eviction\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.Eviction\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.Eviction\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"Eviction\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Eviction\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods/{name}/exec\": {\n    \"get\": {\n     \"description\": \"connect GET requests to exec of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1GetNamespacedPodExec\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"connect POST requests to exec of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PostNamespacedPodExec\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"Command is the remote command to execute. argv array. Not executed within a shell.\",\n      \"name\": \"command\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"Container in which to execute the command. Defaults to only container if there is only one container in the pod.\",\n      \"name\": \"container\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Pod\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Redirect the standard error stream of the pod for this call. Defaults to true.\",\n      \"name\": \"stderr\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Redirect the standard input stream of the pod for this call. Defaults to false.\",\n      \"name\": \"stdin\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Redirect the standard output stream of the pod for this call. Defaults to true.\",\n      \"name\": \"stdout\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"TTY if true indicates that a tty will be allocated for the exec call. Defaults to false.\",\n      \"name\": \"tty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods/{name}/log\": {\n    \"get\": {\n     \"description\": \"read log of the specified Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"text/plain\",\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedPodLog\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The container for which to stream logs. Defaults to only container if there is one container in the pod.\",\n      \"name\": \"container\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Follow the log stream of the pod. Defaults to false.\",\n      \"name\": \"follow\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"If set, the number of bytes to read from the server before terminating the log output. This may not display a complete final line of logging, and may return slightly more or slightly less than the specified limit.\",\n      \"name\": \"limitBytes\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Pod\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Return previous terminated container logs. Defaults to false.\",\n      \"name\": \"previous\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"A relative time in seconds before the current time from which to show logs. If this value precedes the time a pod was started, only logs since the pod start will be returned. If this value is in the future, no logs will be returned. Only one of sinceSeconds or sinceTime may be specified.\",\n      \"name\": \"sinceSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"If set, the number of lines from the end of the logs to show. If not specified, logs are shown from the creation of the container or sinceSeconds or sinceTime\",\n      \"name\": \"tailLines\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line of log output. Defaults to false.\",\n      \"name\": \"timestamps\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods/{name}/portforward\": {\n    \"get\": {\n     \"description\": \"connect GET requests to portforward of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1GetNamespacedPodPortforward\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"connect POST requests to portforward of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PostNamespacedPodPortforward\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Pod\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"List of ports to forward Required when using WebSockets\",\n      \"name\": \"ports\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods/{name}/proxy\": {\n    \"get\": {\n     \"description\": \"connect GET requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1GetNamespacedPodProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"connect PUT requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PutNamespacedPodProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"connect POST requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PostNamespacedPodProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"connect DELETE requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1DeleteNamespacedPodProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"options\": {\n     \"description\": \"connect OPTIONS requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1OptionsNamespacedPodProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"head\": {\n     \"description\": \"connect HEAD requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1HeadNamespacedPodProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"connect PATCH requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PatchNamespacedPodProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Pod\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"Path is the URL path to use for the current proxy request to pod.\",\n      \"name\": \"path\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods/{name}/proxy/{path}\": {\n    \"get\": {\n     \"description\": \"connect GET requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1GetNamespacedPodProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"connect PUT requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PutNamespacedPodProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"connect POST requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PostNamespacedPodProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"connect DELETE requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1DeleteNamespacedPodProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"options\": {\n     \"description\": \"connect OPTIONS requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1OptionsNamespacedPodProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"head\": {\n     \"description\": \"connect HEAD requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1HeadNamespacedPodProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"connect PATCH requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PatchNamespacedPodProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Pod\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"path to the resource\",\n      \"name\": \"path\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"Path is the URL path to use for the current proxy request to pod.\",\n      \"name\": \"path\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedPodStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Pod\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedPodStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Pod\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Pod\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Pod\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified Pod\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedPodStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Pod\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Pod\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/podtemplates\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PodTemplate\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedPodTemplate\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplateList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PodTemplate\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a PodTemplate\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedPodTemplate\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplate\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplate\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplate\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplate\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PodTemplate\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of PodTemplate\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedPodTemplate\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PodTemplate\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/podtemplates/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified PodTemplate\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedPodTemplate\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplate\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PodTemplate\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified PodTemplate\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedPodTemplate\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplate\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplate\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplate\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PodTemplate\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a PodTemplate\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedPodTemplate\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PodTemplate\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified PodTemplate\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedPodTemplate\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplate\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PodTemplate\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PodTemplate\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/replicationcontrollers\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedReplicationController\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationControllerList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ReplicationController\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedReplicationController\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationController\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationController\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationController\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationController\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ReplicationController\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedReplicationController\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ReplicationController\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/replicationcontrollers/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedReplicationController\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationController\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ReplicationController\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedReplicationController\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationController\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationController\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationController\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ReplicationController\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedReplicationController\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ReplicationController\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ReplicationController\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedReplicationController\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationController\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ReplicationController\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ReplicationController\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/replicationcontrollers/{name}/scale\": {\n    \"get\": {\n     \"description\": \"read scale of the specified ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedReplicationControllerScale\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace scale of the specified ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedReplicationControllerScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.Scale\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.Scale\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update scale of the specified ReplicationController\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedReplicationControllerScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Scale\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/replicationcontrollers/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedReplicationControllerStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationController\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ReplicationController\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedReplicationControllerStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationController\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationController\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationController\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ReplicationController\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified ReplicationController\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedReplicationControllerStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationController\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ReplicationController\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ReplicationController\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/resourcequotas\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedResourceQuota\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuotaList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ResourceQuota\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedResourceQuota\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuota\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuota\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuota\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuota\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ResourceQuota\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedResourceQuota\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ResourceQuota\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/resourcequotas/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedResourceQuota\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuota\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ResourceQuota\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedResourceQuota\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuota\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuota\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuota\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ResourceQuota\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedResourceQuota\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ResourceQuota\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ResourceQuota\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedResourceQuota\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuota\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ResourceQuota\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ResourceQuota\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/resourcequotas/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedResourceQuotaStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuota\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ResourceQuota\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedResourceQuotaStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuota\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuota\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuota\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ResourceQuota\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified ResourceQuota\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedResourceQuotaStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuota\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ResourceQuota\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ResourceQuota\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/secrets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Secret\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedSecret\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecretList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Secret\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Secret\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedSecret\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Secret\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Secret\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Secret\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Secret\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Secret\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Secret\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedSecret\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Secret\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/secrets/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Secret\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedSecret\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Secret\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Secret\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Secret\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedSecret\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Secret\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Secret\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Secret\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Secret\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Secret\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedSecret\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Secret\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Secret\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedSecret\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Secret\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Secret\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Secret\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/serviceaccounts\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ServiceAccount\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedServiceAccount\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceAccountList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ServiceAccount\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ServiceAccount\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedServiceAccount\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceAccount\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceAccount\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceAccount\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceAccount\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ServiceAccount\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ServiceAccount\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedServiceAccount\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ServiceAccount\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/serviceaccounts/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ServiceAccount\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedServiceAccount\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceAccount\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ServiceAccount\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ServiceAccount\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedServiceAccount\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceAccount\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceAccount\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceAccount\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ServiceAccount\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ServiceAccount\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedServiceAccount\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ServiceAccount\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ServiceAccount\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedServiceAccount\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceAccount\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ServiceAccount\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ServiceAccount\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/services\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedService\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedService\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Service\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Service\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Service\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Service\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/services/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedService\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Service\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedService\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Service\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Service\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Service\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedService\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Service\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedService\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Service\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Service\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/services/{name}/proxy\": {\n    \"get\": {\n     \"description\": \"connect GET requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1GetNamespacedServiceProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"connect PUT requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PutNamespacedServiceProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"connect POST requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PostNamespacedServiceProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"connect DELETE requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1DeleteNamespacedServiceProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"options\": {\n     \"description\": \"connect OPTIONS requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1OptionsNamespacedServiceProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"head\": {\n     \"description\": \"connect HEAD requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1HeadNamespacedServiceProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"connect PATCH requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PatchNamespacedServiceProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Service\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"Path is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.\",\n      \"name\": \"path\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/services/{name}/proxy/{path}\": {\n    \"get\": {\n     \"description\": \"connect GET requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1GetNamespacedServiceProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"connect PUT requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PutNamespacedServiceProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"connect POST requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PostNamespacedServiceProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"connect DELETE requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1DeleteNamespacedServiceProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"options\": {\n     \"description\": \"connect OPTIONS requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1OptionsNamespacedServiceProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"head\": {\n     \"description\": \"connect HEAD requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1HeadNamespacedServiceProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"connect PATCH requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PatchNamespacedServiceProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Service\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"path to the resource\",\n      \"name\": \"path\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"Path is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.\",\n      \"name\": \"path\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/services/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedServiceStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Service\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedServiceStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Service\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Service\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Service\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified Service\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedServiceStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Service\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Service\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Namespace\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1Namespace\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Namespace\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Namespace\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Namespace\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1Namespace\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Namespace\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Namespace\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Namespace\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Namespace\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Namespace\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1Namespace\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Namespace\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Namespace\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1Namespace\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Namespace\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Namespace\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Namespace\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{name}/finalize\": {\n    \"put\": {\n     \"description\": \"replace finalize of the specified Namespace\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespaceFinalize\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Namespace\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Namespace\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Namespace\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Namespace\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Namespace\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified Namespace\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespaceStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Namespace\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Namespace\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified Namespace\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespaceStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Namespace\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Namespace\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Namespace\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Namespace\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified Namespace\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespaceStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Namespace\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Namespace\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Namespace\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/nodes\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1Node\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1Node\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Node\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Node\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Node\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Node\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNode\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/nodes/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1Node\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Node\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1Node\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Node\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Node\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Node\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1Node\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Node\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1Node\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Node\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Node\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/nodes/{name}/proxy\": {\n    \"get\": {\n     \"description\": \"connect GET requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1GetNodeProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"connect PUT requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PutNodeProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"connect POST requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PostNodeProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"connect DELETE requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1DeleteNodeProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"options\": {\n     \"description\": \"connect OPTIONS requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1OptionsNodeProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"head\": {\n     \"description\": \"connect HEAD requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1HeadNodeProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"connect PATCH requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PatchNodeProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Node\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"Path is the URL path to use for the current proxy request to node.\",\n      \"name\": \"path\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/nodes/{name}/proxy/{path}\": {\n    \"get\": {\n     \"description\": \"connect GET requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1GetNodeProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"connect PUT requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PutNodeProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"connect POST requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PostNodeProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"connect DELETE requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1DeleteNodeProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"options\": {\n     \"description\": \"connect OPTIONS requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1OptionsNodeProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"head\": {\n     \"description\": \"connect HEAD requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1HeadNodeProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"connect PATCH requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PatchNodeProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Node\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"path to the resource\",\n      \"name\": \"path\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"Path is the URL path to use for the current proxy request to node.\",\n      \"name\": \"path\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/nodes/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NodeStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Node\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NodeStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Node\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Node\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Node\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified Node\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NodeStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.Node\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Node\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/persistentvolumeclaims\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1PersistentVolumeClaimForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolumeClaim\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/persistentvolumes\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PersistentVolume\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1PersistentVolume\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolume\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a PersistentVolume\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1PersistentVolume\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolume\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolume\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolume\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolume\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolume\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of PersistentVolume\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionPersistentVolume\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolume\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/persistentvolumes/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified PersistentVolume\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1PersistentVolume\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolume\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolume\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified PersistentVolume\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1PersistentVolume\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolume\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolume\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolume\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolume\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a PersistentVolume\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1PersistentVolume\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolume\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified PersistentVolume\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1PersistentVolume\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolume\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolume\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PersistentVolume\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/persistentvolumes/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified PersistentVolume\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1PersistentVolumeStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolume\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolume\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified PersistentVolume\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1PersistentVolumeStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolume\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolume\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolume\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolume\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified PersistentVolume\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1PersistentVolumeStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolume\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolume\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PersistentVolume\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/pods\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1PodForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/podtemplates\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PodTemplate\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1PodTemplateForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplateList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PodTemplate\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/replicationcontrollers\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1ReplicationControllerForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationControllerList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ReplicationController\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/resourcequotas\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1ResourceQuotaForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuotaList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ResourceQuota\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/secrets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Secret\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1SecretForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecretList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Secret\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/serviceaccounts\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ServiceAccount\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1ServiceAccountForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceAccountList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ServiceAccount\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/services\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1ServiceForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/configmaps\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ConfigMap\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1ConfigMapListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ConfigMap\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/endpoints\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Endpoints\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1EndpointsListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Endpoints\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/events\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1EventListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Event\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/limitranges\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of LimitRange\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1LimitRangeListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"LimitRange\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Namespace\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespaceList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Namespace\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/configmaps\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ConfigMap\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedConfigMapList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ConfigMap\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/configmaps/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ConfigMap\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedConfigMap\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ConfigMap\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ConfigMap\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/endpoints\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Endpoints\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedEndpointsList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Endpoints\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/endpoints/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Endpoints\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedEndpoints\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Endpoints\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Endpoints\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/events\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedEventList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Event\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/events/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedEvent\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Event\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Event\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/limitranges\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of LimitRange\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedLimitRangeList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"LimitRange\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/limitranges/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind LimitRange\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedLimitRange\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"LimitRange\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the LimitRange\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/persistentvolumeclaims\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedPersistentVolumeClaimList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolumeClaim\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/persistentvolumeclaims/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedPersistentVolumeClaim\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolumeClaim\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PersistentVolumeClaim\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/pods\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedPodList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/pods/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedPod\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Pod\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/podtemplates\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PodTemplate\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedPodTemplateList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PodTemplate\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/podtemplates/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind PodTemplate\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedPodTemplate\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PodTemplate\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PodTemplate\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/replicationcontrollers\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedReplicationControllerList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ReplicationController\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/replicationcontrollers/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedReplicationController\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ReplicationController\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ReplicationController\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/resourcequotas\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedResourceQuotaList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ResourceQuota\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/resourcequotas/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedResourceQuota\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ResourceQuota\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ResourceQuota\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/secrets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Secret\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedSecretList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Secret\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/secrets/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Secret\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedSecret\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Secret\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Secret\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/serviceaccounts\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ServiceAccount\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedServiceAccountList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ServiceAccount\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/serviceaccounts/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ServiceAccount\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedServiceAccount\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ServiceAccount\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ServiceAccount\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/services\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedServiceList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/services/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedService\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Service\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Namespace\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1Namespace\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Namespace\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Namespace\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/nodes\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NodeList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/nodes/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1Node\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Node\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/persistentvolumeclaims\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1PersistentVolumeClaimListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolumeClaim\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/persistentvolumes\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PersistentVolume\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1PersistentVolumeList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolume\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/persistentvolumes/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind PersistentVolume\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1PersistentVolume\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolume\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PersistentVolume\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/pods\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1PodListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/podtemplates\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PodTemplate\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1PodTemplateListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"PodTemplate\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/replicationcontrollers\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1ReplicationControllerListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ReplicationController\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/resourcequotas\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1ResourceQuotaListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ResourceQuota\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/secrets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Secret\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1SecretListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Secret\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/serviceaccounts\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ServiceAccount\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1ServiceAccountListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"ServiceAccount\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/services\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1ServiceListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/\": {\n    \"get\": {\n     \"description\": \"get available API versions\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apis\"\n     ],\n     \"operationId\": \"getAPIVersions\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroupList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/admissionregistration.k8s.io/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration\"\n     ],\n     \"operationId\": \"getAdmissionregistrationAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/admissionregistration.k8s.io/v1alpha1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"getAdmissionregistrationV1alpha1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/admissionregistration.k8s.io/v1alpha1/initializerconfigurations\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind InitializerConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"listAdmissionregistrationV1alpha1InitializerConfiguration\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1alpha1.InitializerConfigurationList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"InitializerConfiguration\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create an InitializerConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"createAdmissionregistrationV1alpha1InitializerConfiguration\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1alpha1.InitializerConfiguration\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1alpha1.InitializerConfiguration\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1alpha1.InitializerConfiguration\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1alpha1.InitializerConfiguration\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"InitializerConfiguration\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of InitializerConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"deleteAdmissionregistrationV1alpha1CollectionInitializerConfiguration\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"InitializerConfiguration\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/admissionregistration.k8s.io/v1alpha1/initializerconfigurations/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified InitializerConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"readAdmissionregistrationV1alpha1InitializerConfiguration\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1alpha1.InitializerConfiguration\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"InitializerConfiguration\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified InitializerConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"replaceAdmissionregistrationV1alpha1InitializerConfiguration\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1alpha1.InitializerConfiguration\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1alpha1.InitializerConfiguration\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1alpha1.InitializerConfiguration\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"InitializerConfiguration\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete an InitializerConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"deleteAdmissionregistrationV1alpha1InitializerConfiguration\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"InitializerConfiguration\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified InitializerConfiguration\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"patchAdmissionregistrationV1alpha1InitializerConfiguration\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1alpha1.InitializerConfiguration\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"InitializerConfiguration\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the InitializerConfiguration\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/admissionregistration.k8s.io/v1alpha1/watch/initializerconfigurations\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of InitializerConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"watchAdmissionregistrationV1alpha1InitializerConfigurationList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"InitializerConfiguration\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/admissionregistration.k8s.io/v1alpha1/watch/initializerconfigurations/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind InitializerConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"watchAdmissionregistrationV1alpha1InitializerConfiguration\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"InitializerConfiguration\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the InitializerConfiguration\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/admissionregistration.k8s.io/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1beta1\"\n     ],\n     \"operationId\": \"getAdmissionregistrationV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/admissionregistration.k8s.io/v1beta1/mutatingwebhookconfigurations\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind MutatingWebhookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1beta1\"\n     ],\n     \"operationId\": \"listAdmissionregistrationV1beta1MutatingWebhookConfiguration\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfigurationList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"MutatingWebhookConfiguration\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a MutatingWebhookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1beta1\"\n     ],\n     \"operationId\": \"createAdmissionregistrationV1beta1MutatingWebhookConfiguration\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"MutatingWebhookConfiguration\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of MutatingWebhookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1beta1\"\n     ],\n     \"operationId\": \"deleteAdmissionregistrationV1beta1CollectionMutatingWebhookConfiguration\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"MutatingWebhookConfiguration\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/admissionregistration.k8s.io/v1beta1/mutatingwebhookconfigurations/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified MutatingWebhookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1beta1\"\n     ],\n     \"operationId\": \"readAdmissionregistrationV1beta1MutatingWebhookConfiguration\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"MutatingWebhookConfiguration\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified MutatingWebhookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1beta1\"\n     ],\n     \"operationId\": \"replaceAdmissionregistrationV1beta1MutatingWebhookConfiguration\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"MutatingWebhookConfiguration\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a MutatingWebhookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1beta1\"\n     ],\n     \"operationId\": \"deleteAdmissionregistrationV1beta1MutatingWebhookConfiguration\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"MutatingWebhookConfiguration\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified MutatingWebhookConfiguration\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1beta1\"\n     ],\n     \"operationId\": \"patchAdmissionregistrationV1beta1MutatingWebhookConfiguration\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"MutatingWebhookConfiguration\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the MutatingWebhookConfiguration\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/admissionregistration.k8s.io/v1beta1/validatingwebhookconfigurations\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ValidatingWebhookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1beta1\"\n     ],\n     \"operationId\": \"listAdmissionregistrationV1beta1ValidatingWebhookConfiguration\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfigurationList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"ValidatingWebhookConfiguration\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ValidatingWebhookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1beta1\"\n     ],\n     \"operationId\": \"createAdmissionregistrationV1beta1ValidatingWebhookConfiguration\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"ValidatingWebhookConfiguration\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ValidatingWebhookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1beta1\"\n     ],\n     \"operationId\": \"deleteAdmissionregistrationV1beta1CollectionValidatingWebhookConfiguration\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"ValidatingWebhookConfiguration\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/admissionregistration.k8s.io/v1beta1/validatingwebhookconfigurations/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ValidatingWebhookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1beta1\"\n     ],\n     \"operationId\": \"readAdmissionregistrationV1beta1ValidatingWebhookConfiguration\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"ValidatingWebhookConfiguration\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ValidatingWebhookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1beta1\"\n     ],\n     \"operationId\": \"replaceAdmissionregistrationV1beta1ValidatingWebhookConfiguration\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"ValidatingWebhookConfiguration\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ValidatingWebhookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1beta1\"\n     ],\n     \"operationId\": \"deleteAdmissionregistrationV1beta1ValidatingWebhookConfiguration\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"ValidatingWebhookConfiguration\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ValidatingWebhookConfiguration\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1beta1\"\n     ],\n     \"operationId\": \"patchAdmissionregistrationV1beta1ValidatingWebhookConfiguration\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"ValidatingWebhookConfiguration\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ValidatingWebhookConfiguration\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/admissionregistration.k8s.io/v1beta1/watch/mutatingwebhookconfigurations\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of MutatingWebhookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1beta1\"\n     ],\n     \"operationId\": \"watchAdmissionregistrationV1beta1MutatingWebhookConfigurationList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"MutatingWebhookConfiguration\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/admissionregistration.k8s.io/v1beta1/watch/mutatingwebhookconfigurations/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind MutatingWebhookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1beta1\"\n     ],\n     \"operationId\": \"watchAdmissionregistrationV1beta1MutatingWebhookConfiguration\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"MutatingWebhookConfiguration\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the MutatingWebhookConfiguration\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/admissionregistration.k8s.io/v1beta1/watch/validatingwebhookconfigurations\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ValidatingWebhookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1beta1\"\n     ],\n     \"operationId\": \"watchAdmissionregistrationV1beta1ValidatingWebhookConfigurationList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"ValidatingWebhookConfiguration\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/admissionregistration.k8s.io/v1beta1/watch/validatingwebhookconfigurations/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ValidatingWebhookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1beta1\"\n     ],\n     \"operationId\": \"watchAdmissionregistrationV1beta1ValidatingWebhookConfiguration\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"ValidatingWebhookConfiguration\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ValidatingWebhookConfiguration\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apiextensions.k8s.io/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiextensions\"\n     ],\n     \"operationId\": \"getApiextensionsAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/apiextensions.k8s.io/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiextensions_v1beta1\"\n     ],\n     \"operationId\": \"getApiextensionsV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind CustomResourceDefinition\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiextensions_v1beta1\"\n     ],\n     \"operationId\": \"listApiextensionsV1beta1CustomResourceDefinition\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiextensions.k8s.io\",\n      \"kind\": \"CustomResourceDefinition\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a CustomResourceDefinition\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiextensions_v1beta1\"\n     ],\n     \"operationId\": \"createApiextensionsV1beta1CustomResourceDefinition\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiextensions.k8s.io\",\n      \"kind\": \"CustomResourceDefinition\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of CustomResourceDefinition\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiextensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteApiextensionsV1beta1CollectionCustomResourceDefinition\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiextensions.k8s.io\",\n      \"kind\": \"CustomResourceDefinition\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified CustomResourceDefinition\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiextensions_v1beta1\"\n     ],\n     \"operationId\": \"readApiextensionsV1beta1CustomResourceDefinition\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiextensions.k8s.io\",\n      \"kind\": \"CustomResourceDefinition\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified CustomResourceDefinition\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiextensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceApiextensionsV1beta1CustomResourceDefinition\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiextensions.k8s.io\",\n      \"kind\": \"CustomResourceDefinition\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a CustomResourceDefinition\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiextensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteApiextensionsV1beta1CustomResourceDefinition\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiextensions.k8s.io\",\n      \"kind\": \"CustomResourceDefinition\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified CustomResourceDefinition\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiextensions_v1beta1\"\n     ],\n     \"operationId\": \"patchApiextensionsV1beta1CustomResourceDefinition\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiextensions.k8s.io\",\n      \"kind\": \"CustomResourceDefinition\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the CustomResourceDefinition\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified CustomResourceDefinition\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiextensions_v1beta1\"\n     ],\n     \"operationId\": \"readApiextensionsV1beta1CustomResourceDefinitionStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiextensions.k8s.io\",\n      \"kind\": \"CustomResourceDefinition\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified CustomResourceDefinition\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiextensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceApiextensionsV1beta1CustomResourceDefinitionStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiextensions.k8s.io\",\n      \"kind\": \"CustomResourceDefinition\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified CustomResourceDefinition\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiextensions_v1beta1\"\n     ],\n     \"operationId\": \"patchApiextensionsV1beta1CustomResourceDefinitionStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiextensions.k8s.io\",\n      \"kind\": \"CustomResourceDefinition\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the CustomResourceDefinition\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apiextensions.k8s.io/v1beta1/watch/customresourcedefinitions\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of CustomResourceDefinition\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiextensions_v1beta1\"\n     ],\n     \"operationId\": \"watchApiextensionsV1beta1CustomResourceDefinitionList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiextensions.k8s.io\",\n      \"kind\": \"CustomResourceDefinition\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apiextensions.k8s.io/v1beta1/watch/customresourcedefinitions/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind CustomResourceDefinition\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiextensions_v1beta1\"\n     ],\n     \"operationId\": \"watchApiextensionsV1beta1CustomResourceDefinition\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiextensions.k8s.io\",\n      \"kind\": \"CustomResourceDefinition\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the CustomResourceDefinition\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apiregistration.k8s.io/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration\"\n     ],\n     \"operationId\": \"getApiregistrationAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/apiregistration.k8s.io/v1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1\"\n     ],\n     \"operationId\": \"getApiregistrationV1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/apiregistration.k8s.io/v1/apiservices\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1\"\n     ],\n     \"operationId\": \"listApiregistrationV1APIService\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create an APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1\"\n     ],\n     \"operationId\": \"createApiregistrationV1APIService\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1\"\n     ],\n     \"operationId\": \"deleteApiregistrationV1CollectionAPIService\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apiregistration.k8s.io/v1/apiservices/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1\"\n     ],\n     \"operationId\": \"readApiregistrationV1APIService\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1\"\n     ],\n     \"operationId\": \"replaceApiregistrationV1APIService\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete an APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1\"\n     ],\n     \"operationId\": \"deleteApiregistrationV1APIService\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified APIService\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1\"\n     ],\n     \"operationId\": \"patchApiregistrationV1APIService\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the APIService\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apiregistration.k8s.io/v1/apiservices/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1\"\n     ],\n     \"operationId\": \"readApiregistrationV1APIServiceStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1\"\n     ],\n     \"operationId\": \"replaceApiregistrationV1APIServiceStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified APIService\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1\"\n     ],\n     \"operationId\": \"patchApiregistrationV1APIServiceStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the APIService\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apiregistration.k8s.io/v1/watch/apiservices\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1\"\n     ],\n     \"operationId\": \"watchApiregistrationV1APIServiceList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apiregistration.k8s.io/v1/watch/apiservices/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1\"\n     ],\n     \"operationId\": \"watchApiregistrationV1APIService\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the APIService\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apiregistration.k8s.io/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"getApiregistrationV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/apiregistration.k8s.io/v1beta1/apiservices\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"listApiregistrationV1beta1APIService\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create an APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"createApiregistrationV1beta1APIService\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"deleteApiregistrationV1beta1CollectionAPIService\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apiregistration.k8s.io/v1beta1/apiservices/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"readApiregistrationV1beta1APIService\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"replaceApiregistrationV1beta1APIService\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete an APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"deleteApiregistrationV1beta1APIService\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified APIService\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"patchApiregistrationV1beta1APIService\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the APIService\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apiregistration.k8s.io/v1beta1/apiservices/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"readApiregistrationV1beta1APIServiceStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"replaceApiregistrationV1beta1APIServiceStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified APIService\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"patchApiregistrationV1beta1APIServiceStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the APIService\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apiregistration.k8s.io/v1beta1/watch/apiservices\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"watchApiregistrationV1beta1APIServiceList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apiregistration.k8s.io/v1beta1/watch/apiservices/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"watchApiregistrationV1beta1APIService\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the APIService\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps\"\n     ],\n     \"operationId\": \"getAppsAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/apps/v1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"getAppsV1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/apps/v1/controllerrevisions\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"listAppsV1ControllerRevisionForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ControllerRevisionList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/daemonsets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"listAppsV1DaemonSetForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DaemonSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/deployments\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"listAppsV1DeploymentForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DeploymentList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/namespaces/{namespace}/controllerrevisions\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"listAppsV1NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ControllerRevisionList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"createAppsV1NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ControllerRevision\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ControllerRevision\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ControllerRevision\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ControllerRevision\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"deleteAppsV1CollectionNamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/namespaces/{namespace}/controllerrevisions/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"readAppsV1NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ControllerRevision\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"replaceAppsV1NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ControllerRevision\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ControllerRevision\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ControllerRevision\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"deleteAppsV1NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ControllerRevision\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"patchAppsV1NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ControllerRevision\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ControllerRevision\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/namespaces/{namespace}/daemonsets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"listAppsV1NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DaemonSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"createAppsV1NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DaemonSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DaemonSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DaemonSet\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"deleteAppsV1CollectionNamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/namespaces/{namespace}/daemonsets/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"readAppsV1NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"replaceAppsV1NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DaemonSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DaemonSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"deleteAppsV1NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified DaemonSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"patchAppsV1NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the DaemonSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/namespaces/{namespace}/daemonsets/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"readAppsV1NamespacedDaemonSetStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"replaceAppsV1NamespacedDaemonSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DaemonSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DaemonSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified DaemonSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"patchAppsV1NamespacedDaemonSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the DaemonSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/namespaces/{namespace}/deployments\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"listAppsV1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DeploymentList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"createAppsV1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.Deployment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.Deployment\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.Deployment\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"deleteAppsV1CollectionNamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/namespaces/{namespace}/deployments/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"readAppsV1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"replaceAppsV1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.Deployment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.Deployment\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"deleteAppsV1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Deployment\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"patchAppsV1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Deployment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/namespaces/{namespace}/deployments/{name}/scale\": {\n    \"get\": {\n     \"description\": \"read scale of the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"readAppsV1NamespacedDeploymentScale\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace scale of the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"replaceAppsV1NamespacedDeploymentScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.Scale\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.Scale\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update scale of the specified Deployment\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"patchAppsV1NamespacedDeploymentScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Scale\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/namespaces/{namespace}/deployments/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"readAppsV1NamespacedDeploymentStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"replaceAppsV1NamespacedDeploymentStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.Deployment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.Deployment\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified Deployment\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"patchAppsV1NamespacedDeploymentStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Deployment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/namespaces/{namespace}/replicasets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"listAppsV1NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ReplicaSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"createAppsV1NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ReplicaSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ReplicaSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ReplicaSet\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"deleteAppsV1CollectionNamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/namespaces/{namespace}/replicasets/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"readAppsV1NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"replaceAppsV1NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ReplicaSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ReplicaSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"deleteAppsV1NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ReplicaSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"patchAppsV1NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ReplicaSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/namespaces/{namespace}/replicasets/{name}/scale\": {\n    \"get\": {\n     \"description\": \"read scale of the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"readAppsV1NamespacedReplicaSetScale\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace scale of the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"replaceAppsV1NamespacedReplicaSetScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.Scale\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.Scale\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update scale of the specified ReplicaSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"patchAppsV1NamespacedReplicaSetScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Scale\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/namespaces/{namespace}/replicasets/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"readAppsV1NamespacedReplicaSetStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"replaceAppsV1NamespacedReplicaSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ReplicaSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ReplicaSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified ReplicaSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"patchAppsV1NamespacedReplicaSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ReplicaSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/namespaces/{namespace}/statefulsets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"listAppsV1NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.StatefulSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"createAppsV1NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.StatefulSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.StatefulSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.StatefulSet\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"deleteAppsV1CollectionNamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/namespaces/{namespace}/statefulsets/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"readAppsV1NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"replaceAppsV1NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.StatefulSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.StatefulSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"deleteAppsV1NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified StatefulSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"patchAppsV1NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the StatefulSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/scale\": {\n    \"get\": {\n     \"description\": \"read scale of the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"readAppsV1NamespacedStatefulSetScale\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace scale of the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"replaceAppsV1NamespacedStatefulSetScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.Scale\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.Scale\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update scale of the specified StatefulSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"patchAppsV1NamespacedStatefulSetScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Scale\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"readAppsV1NamespacedStatefulSetStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"replaceAppsV1NamespacedStatefulSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.StatefulSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.StatefulSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified StatefulSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"patchAppsV1NamespacedStatefulSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the StatefulSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/replicasets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"listAppsV1ReplicaSetForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ReplicaSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/statefulsets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"listAppsV1StatefulSetForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1.StatefulSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/watch/controllerrevisions\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"watchAppsV1ControllerRevisionListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/watch/daemonsets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"watchAppsV1DaemonSetListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/watch/deployments\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"watchAppsV1DeploymentListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/watch/namespaces/{namespace}/controllerrevisions\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"watchAppsV1NamespacedControllerRevisionList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/watch/namespaces/{namespace}/controllerrevisions/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"watchAppsV1NamespacedControllerRevision\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ControllerRevision\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/watch/namespaces/{namespace}/daemonsets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"watchAppsV1NamespacedDaemonSetList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/watch/namespaces/{namespace}/daemonsets/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"watchAppsV1NamespacedDaemonSet\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the DaemonSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/watch/namespaces/{namespace}/deployments\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"watchAppsV1NamespacedDeploymentList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/watch/namespaces/{namespace}/deployments/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"watchAppsV1NamespacedDeployment\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Deployment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/watch/namespaces/{namespace}/replicasets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"watchAppsV1NamespacedReplicaSetList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/watch/namespaces/{namespace}/replicasets/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"watchAppsV1NamespacedReplicaSet\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ReplicaSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/watch/namespaces/{namespace}/statefulsets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"watchAppsV1NamespacedStatefulSetList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/watch/namespaces/{namespace}/statefulsets/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"watchAppsV1NamespacedStatefulSet\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the StatefulSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/watch/replicasets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"watchAppsV1ReplicaSetListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1/watch/statefulsets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1\"\n     ],\n     \"operationId\": \"watchAppsV1StatefulSetListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"getAppsV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/apps/v1beta1/controllerrevisions\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"listAppsV1beta1ControllerRevisionForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevisionList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/deployments\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"listAppsV1beta1DeploymentForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.DeploymentList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/namespaces/{namespace}/controllerrevisions\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"listAppsV1beta1NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevisionList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"createAppsV1beta1NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"deleteAppsV1beta1CollectionNamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/namespaces/{namespace}/controllerrevisions/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"readAppsV1beta1NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"replaceAppsV1beta1NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"deleteAppsV1beta1NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ControllerRevision\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"patchAppsV1beta1NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ControllerRevision\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/namespaces/{namespace}/deployments\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"listAppsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.DeploymentList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"createAppsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Deployment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Deployment\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Deployment\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"deleteAppsV1beta1CollectionNamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"readAppsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"replaceAppsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Deployment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Deployment\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"deleteAppsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Deployment\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"patchAppsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Deployment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/rollback\": {\n    \"post\": {\n     \"description\": \"create rollback of a Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"createAppsV1beta1NamespacedDeploymentRollback\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.DeploymentRollback\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.DeploymentRollback\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.DeploymentRollback\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.DeploymentRollback\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DeploymentRollback\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the DeploymentRollback\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/scale\": {\n    \"get\": {\n     \"description\": \"read scale of the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"readAppsV1beta1NamespacedDeploymentScale\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace scale of the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"replaceAppsV1beta1NamespacedDeploymentScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Scale\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Scale\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update scale of the specified Deployment\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"patchAppsV1beta1NamespacedDeploymentScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Scale\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"readAppsV1beta1NamespacedDeploymentStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"replaceAppsV1beta1NamespacedDeploymentStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Deployment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Deployment\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified Deployment\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"patchAppsV1beta1NamespacedDeploymentStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Deployment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/namespaces/{namespace}/statefulsets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"listAppsV1beta1NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"createAppsV1beta1NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"deleteAppsV1beta1CollectionNamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"readAppsV1beta1NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"replaceAppsV1beta1NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"deleteAppsV1beta1NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified StatefulSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"patchAppsV1beta1NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the StatefulSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}/scale\": {\n    \"get\": {\n     \"description\": \"read scale of the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"readAppsV1beta1NamespacedStatefulSetScale\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace scale of the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"replaceAppsV1beta1NamespacedStatefulSetScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Scale\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Scale\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update scale of the specified StatefulSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"patchAppsV1beta1NamespacedStatefulSetScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Scale\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"readAppsV1beta1NamespacedStatefulSetStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"replaceAppsV1beta1NamespacedStatefulSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified StatefulSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"patchAppsV1beta1NamespacedStatefulSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the StatefulSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/statefulsets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"listAppsV1beta1StatefulSetForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/watch/controllerrevisions\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"watchAppsV1beta1ControllerRevisionListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/watch/deployments\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"watchAppsV1beta1DeploymentListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/watch/namespaces/{namespace}/controllerrevisions\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"watchAppsV1beta1NamespacedControllerRevisionList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/watch/namespaces/{namespace}/controllerrevisions/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"watchAppsV1beta1NamespacedControllerRevision\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ControllerRevision\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/watch/namespaces/{namespace}/deployments\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"watchAppsV1beta1NamespacedDeploymentList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/watch/namespaces/{namespace}/deployments/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"watchAppsV1beta1NamespacedDeployment\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Deployment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/watch/namespaces/{namespace}/statefulsets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"watchAppsV1beta1NamespacedStatefulSetList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/watch/namespaces/{namespace}/statefulsets/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"watchAppsV1beta1NamespacedStatefulSet\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the StatefulSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/watch/statefulsets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"watchAppsV1beta1StatefulSetListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"getAppsV1beta2APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/apps/v1beta2/controllerrevisions\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"listAppsV1beta2ControllerRevisionForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevisionList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/daemonsets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"listAppsV1beta2DaemonSetForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DaemonSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/deployments\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"listAppsV1beta2DeploymentForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DeploymentList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/namespaces/{namespace}/controllerrevisions\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"listAppsV1beta2NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevisionList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"createAppsV1beta2NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"deleteAppsV1beta2CollectionNamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/namespaces/{namespace}/controllerrevisions/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"readAppsV1beta2NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"replaceAppsV1beta2NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"deleteAppsV1beta2NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ControllerRevision\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"patchAppsV1beta2NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ControllerRevision\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/namespaces/{namespace}/daemonsets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"listAppsV1beta2NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DaemonSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"createAppsV1beta2NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"deleteAppsV1beta2CollectionNamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/namespaces/{namespace}/daemonsets/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"readAppsV1beta2NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"replaceAppsV1beta2NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"deleteAppsV1beta2NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified DaemonSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"patchAppsV1beta2NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the DaemonSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/namespaces/{namespace}/daemonsets/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"readAppsV1beta2NamespacedDaemonSetStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"replaceAppsV1beta2NamespacedDaemonSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified DaemonSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"patchAppsV1beta2NamespacedDaemonSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the DaemonSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/namespaces/{namespace}/deployments\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"listAppsV1beta2NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DeploymentList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"createAppsV1beta2NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Deployment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Deployment\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Deployment\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"deleteAppsV1beta2CollectionNamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/namespaces/{namespace}/deployments/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"readAppsV1beta2NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"replaceAppsV1beta2NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Deployment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Deployment\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"deleteAppsV1beta2NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Deployment\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"patchAppsV1beta2NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Deployment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/namespaces/{namespace}/deployments/{name}/scale\": {\n    \"get\": {\n     \"description\": \"read scale of the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"readAppsV1beta2NamespacedDeploymentScale\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace scale of the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"replaceAppsV1beta2NamespacedDeploymentScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Scale\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Scale\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update scale of the specified Deployment\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"patchAppsV1beta2NamespacedDeploymentScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Scale\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/namespaces/{namespace}/deployments/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"readAppsV1beta2NamespacedDeploymentStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"replaceAppsV1beta2NamespacedDeploymentStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Deployment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Deployment\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified Deployment\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"patchAppsV1beta2NamespacedDeploymentStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Deployment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/namespaces/{namespace}/replicasets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"listAppsV1beta2NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"createAppsV1beta2NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"deleteAppsV1beta2CollectionNamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"readAppsV1beta2NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"replaceAppsV1beta2NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"deleteAppsV1beta2NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ReplicaSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"patchAppsV1beta2NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ReplicaSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name}/scale\": {\n    \"get\": {\n     \"description\": \"read scale of the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"readAppsV1beta2NamespacedReplicaSetScale\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace scale of the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"replaceAppsV1beta2NamespacedReplicaSetScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Scale\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Scale\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update scale of the specified ReplicaSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"patchAppsV1beta2NamespacedReplicaSetScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Scale\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/namespaces/{namespace}/replicasets/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"readAppsV1beta2NamespacedReplicaSetStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"replaceAppsV1beta2NamespacedReplicaSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified ReplicaSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"patchAppsV1beta2NamespacedReplicaSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ReplicaSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/namespaces/{namespace}/statefulsets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"listAppsV1beta2NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.StatefulSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"createAppsV1beta2NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"deleteAppsV1beta2CollectionNamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"readAppsV1beta2NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"replaceAppsV1beta2NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"deleteAppsV1beta2NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified StatefulSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"patchAppsV1beta2NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the StatefulSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name}/scale\": {\n    \"get\": {\n     \"description\": \"read scale of the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"readAppsV1beta2NamespacedStatefulSetScale\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace scale of the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"replaceAppsV1beta2NamespacedStatefulSetScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Scale\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Scale\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update scale of the specified StatefulSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"patchAppsV1beta2NamespacedStatefulSetScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Scale\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/namespaces/{namespace}/statefulsets/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"readAppsV1beta2NamespacedStatefulSetStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"replaceAppsV1beta2NamespacedStatefulSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified StatefulSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"patchAppsV1beta2NamespacedStatefulSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the StatefulSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/replicasets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"listAppsV1beta2ReplicaSetForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/statefulsets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"listAppsV1beta2StatefulSetForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.StatefulSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/watch/controllerrevisions\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"watchAppsV1beta2ControllerRevisionListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/watch/daemonsets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"watchAppsV1beta2DaemonSetListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/watch/deployments\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"watchAppsV1beta2DeploymentListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/watch/namespaces/{namespace}/controllerrevisions\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"watchAppsV1beta2NamespacedControllerRevisionList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/watch/namespaces/{namespace}/controllerrevisions/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"watchAppsV1beta2NamespacedControllerRevision\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ControllerRevision\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/watch/namespaces/{namespace}/daemonsets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"watchAppsV1beta2NamespacedDaemonSetList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/watch/namespaces/{namespace}/daemonsets/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"watchAppsV1beta2NamespacedDaemonSet\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the DaemonSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/watch/namespaces/{namespace}/deployments\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"watchAppsV1beta2NamespacedDeploymentList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/watch/namespaces/{namespace}/deployments/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"watchAppsV1beta2NamespacedDeployment\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Deployment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/watch/namespaces/{namespace}/replicasets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"watchAppsV1beta2NamespacedReplicaSetList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/watch/namespaces/{namespace}/replicasets/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"watchAppsV1beta2NamespacedReplicaSet\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ReplicaSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/watch/namespaces/{namespace}/statefulsets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"watchAppsV1beta2NamespacedStatefulSetList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/watch/namespaces/{namespace}/statefulsets/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"watchAppsV1beta2NamespacedStatefulSet\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the StatefulSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/watch/replicasets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"watchAppsV1beta2ReplicaSetListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta2/watch/statefulsets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta2\"\n     ],\n     \"operationId\": \"watchAppsV1beta2StatefulSetListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta2\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/authentication.k8s.io/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authentication\"\n     ],\n     \"operationId\": \"getAuthenticationAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/authentication.k8s.io/v1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authentication_v1\"\n     ],\n     \"operationId\": \"getAuthenticationV1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/authentication.k8s.io/v1/tokenreviews\": {\n    \"post\": {\n     \"description\": \"create a TokenReview\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authentication_v1\"\n     ],\n     \"operationId\": \"createAuthenticationV1TokenReview\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authentication.v1.TokenReview\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authentication.v1.TokenReview\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authentication.v1.TokenReview\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authentication.v1.TokenReview\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"authentication.k8s.io\",\n      \"kind\": \"TokenReview\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/authentication.k8s.io/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authentication_v1beta1\"\n     ],\n     \"operationId\": \"getAuthenticationV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/authentication.k8s.io/v1beta1/tokenreviews\": {\n    \"post\": {\n     \"description\": \"create a TokenReview\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authentication_v1beta1\"\n     ],\n     \"operationId\": \"createAuthenticationV1beta1TokenReview\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authentication.v1beta1.TokenReview\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authentication.v1beta1.TokenReview\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authentication.v1beta1.TokenReview\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authentication.v1beta1.TokenReview\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"authentication.k8s.io\",\n      \"kind\": \"TokenReview\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/authorization.k8s.io/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authorization\"\n     ],\n     \"operationId\": \"getAuthorizationAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/authorization.k8s.io/v1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authorization_v1\"\n     ],\n     \"operationId\": \"getAuthorizationV1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/authorization.k8s.io/v1/namespaces/{namespace}/localsubjectaccessreviews\": {\n    \"post\": {\n     \"description\": \"create a LocalSubjectAccessReview\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authorization_v1\"\n     ],\n     \"operationId\": \"createAuthorizationV1NamespacedLocalSubjectAccessReview\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.LocalSubjectAccessReview\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.LocalSubjectAccessReview\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.LocalSubjectAccessReview\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.LocalSubjectAccessReview\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"authorization.k8s.io\",\n      \"kind\": \"LocalSubjectAccessReview\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/authorization.k8s.io/v1/selfsubjectaccessreviews\": {\n    \"post\": {\n     \"description\": \"create a SelfSubjectAccessReview\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authorization_v1\"\n     ],\n     \"operationId\": \"createAuthorizationV1SelfSubjectAccessReview\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReview\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReview\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReview\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReview\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"authorization.k8s.io\",\n      \"kind\": \"SelfSubjectAccessReview\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/authorization.k8s.io/v1/selfsubjectrulesreviews\": {\n    \"post\": {\n     \"description\": \"create a SelfSubjectRulesReview\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authorization_v1\"\n     ],\n     \"operationId\": \"createAuthorizationV1SelfSubjectRulesReview\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SelfSubjectRulesReview\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SelfSubjectRulesReview\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SelfSubjectRulesReview\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SelfSubjectRulesReview\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"authorization.k8s.io\",\n      \"kind\": \"SelfSubjectRulesReview\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/authorization.k8s.io/v1/subjectaccessreviews\": {\n    \"post\": {\n     \"description\": \"create a SubjectAccessReview\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authorization_v1\"\n     ],\n     \"operationId\": \"createAuthorizationV1SubjectAccessReview\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SubjectAccessReview\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SubjectAccessReview\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SubjectAccessReview\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SubjectAccessReview\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"authorization.k8s.io\",\n      \"kind\": \"SubjectAccessReview\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/authorization.k8s.io/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authorization_v1beta1\"\n     ],\n     \"operationId\": \"getAuthorizationV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/authorization.k8s.io/v1beta1/namespaces/{namespace}/localsubjectaccessreviews\": {\n    \"post\": {\n     \"description\": \"create a LocalSubjectAccessReview\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authorization_v1beta1\"\n     ],\n     \"operationId\": \"createAuthorizationV1beta1NamespacedLocalSubjectAccessReview\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.LocalSubjectAccessReview\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.LocalSubjectAccessReview\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.LocalSubjectAccessReview\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.LocalSubjectAccessReview\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"authorization.k8s.io\",\n      \"kind\": \"LocalSubjectAccessReview\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/authorization.k8s.io/v1beta1/selfsubjectaccessreviews\": {\n    \"post\": {\n     \"description\": \"create a SelfSubjectAccessReview\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authorization_v1beta1\"\n     ],\n     \"operationId\": \"createAuthorizationV1beta1SelfSubjectAccessReview\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SelfSubjectAccessReview\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SelfSubjectAccessReview\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SelfSubjectAccessReview\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SelfSubjectAccessReview\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"authorization.k8s.io\",\n      \"kind\": \"SelfSubjectAccessReview\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/authorization.k8s.io/v1beta1/selfsubjectrulesreviews\": {\n    \"post\": {\n     \"description\": \"create a SelfSubjectRulesReview\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authorization_v1beta1\"\n     ],\n     \"operationId\": \"createAuthorizationV1beta1SelfSubjectRulesReview\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SelfSubjectRulesReview\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SelfSubjectRulesReview\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SelfSubjectRulesReview\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SelfSubjectRulesReview\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"authorization.k8s.io\",\n      \"kind\": \"SelfSubjectRulesReview\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/authorization.k8s.io/v1beta1/subjectaccessreviews\": {\n    \"post\": {\n     \"description\": \"create a SubjectAccessReview\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authorization_v1beta1\"\n     ],\n     \"operationId\": \"createAuthorizationV1beta1SubjectAccessReview\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SubjectAccessReview\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SubjectAccessReview\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SubjectAccessReview\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SubjectAccessReview\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"authorization.k8s.io\",\n      \"kind\": \"SubjectAccessReview\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling\"\n     ],\n     \"operationId\": \"getAutoscalingAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/autoscaling/v1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"getAutoscalingV1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/autoscaling/v1/horizontalpodautoscalers\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"listAutoscalingV1HorizontalPodAutoscalerForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"listAutoscalingV1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"createAutoscalingV1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"deleteAutoscalingV1CollectionNamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"readAutoscalingV1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"replaceAutoscalingV1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"deleteAutoscalingV1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"patchAutoscalingV1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the HorizontalPodAutoscaler\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"readAutoscalingV1NamespacedHorizontalPodAutoscalerStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"replaceAutoscalingV1NamespacedHorizontalPodAutoscalerStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"patchAutoscalingV1NamespacedHorizontalPodAutoscalerStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the HorizontalPodAutoscaler\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v1/watch/horizontalpodautoscalers\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"watchAutoscalingV1HorizontalPodAutoscalerListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v1/watch/namespaces/{namespace}/horizontalpodautoscalers\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"watchAutoscalingV1NamespacedHorizontalPodAutoscalerList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v1/watch/namespaces/{namespace}/horizontalpodautoscalers/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"watchAutoscalingV1NamespacedHorizontalPodAutoscaler\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the HorizontalPodAutoscaler\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v2beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2beta1\"\n     ],\n     \"operationId\": \"getAutoscalingV2beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/autoscaling/v2beta1/horizontalpodautoscalers\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2beta1\"\n     ],\n     \"operationId\": \"listAutoscalingV2beta1HorizontalPodAutoscalerForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v2beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v2beta1/namespaces/{namespace}/horizontalpodautoscalers\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2beta1\"\n     ],\n     \"operationId\": \"listAutoscalingV2beta1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v2beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2beta1\"\n     ],\n     \"operationId\": \"createAutoscalingV2beta1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v2beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2beta1\"\n     ],\n     \"operationId\": \"deleteAutoscalingV2beta1CollectionNamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v2beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v2beta1/namespaces/{namespace}/horizontalpodautoscalers/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2beta1\"\n     ],\n     \"operationId\": \"readAutoscalingV2beta1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v2beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2beta1\"\n     ],\n     \"operationId\": \"replaceAutoscalingV2beta1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v2beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2beta1\"\n     ],\n     \"operationId\": \"deleteAutoscalingV2beta1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v2beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2beta1\"\n     ],\n     \"operationId\": \"patchAutoscalingV2beta1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v2beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the HorizontalPodAutoscaler\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v2beta1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2beta1\"\n     ],\n     \"operationId\": \"readAutoscalingV2beta1NamespacedHorizontalPodAutoscalerStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v2beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2beta1\"\n     ],\n     \"operationId\": \"replaceAutoscalingV2beta1NamespacedHorizontalPodAutoscalerStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v2beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2beta1\"\n     ],\n     \"operationId\": \"patchAutoscalingV2beta1NamespacedHorizontalPodAutoscalerStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v2beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the HorizontalPodAutoscaler\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v2beta1/watch/horizontalpodautoscalers\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2beta1\"\n     ],\n     \"operationId\": \"watchAutoscalingV2beta1HorizontalPodAutoscalerListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v2beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v2beta1/watch/namespaces/{namespace}/horizontalpodautoscalers\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2beta1\"\n     ],\n     \"operationId\": \"watchAutoscalingV2beta1NamespacedHorizontalPodAutoscalerList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v2beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v2beta1/watch/namespaces/{namespace}/horizontalpodautoscalers/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2beta1\"\n     ],\n     \"operationId\": \"watchAutoscalingV2beta1NamespacedHorizontalPodAutoscaler\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v2beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the HorizontalPodAutoscaler\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch\"\n     ],\n     \"operationId\": \"getBatchAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/batch/v1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"getBatchV1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/batch/v1/jobs\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"listBatchV1JobForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1.JobList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"Job\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v1/namespaces/{namespace}/jobs\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"listBatchV1NamespacedJob\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1.JobList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"Job\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"createBatchV1NamespacedJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1.Job\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1.Job\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1.Job\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1.Job\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"Job\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"deleteBatchV1CollectionNamespacedJob\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"Job\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v1/namespaces/{namespace}/jobs/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"readBatchV1NamespacedJob\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1.Job\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"Job\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"replaceBatchV1NamespacedJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1.Job\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1.Job\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1.Job\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"Job\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"deleteBatchV1NamespacedJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"Job\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Job\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"patchBatchV1NamespacedJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1.Job\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"Job\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Job\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v1/namespaces/{namespace}/jobs/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"readBatchV1NamespacedJobStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1.Job\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"Job\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"replaceBatchV1NamespacedJobStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1.Job\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1.Job\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1.Job\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"Job\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified Job\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"patchBatchV1NamespacedJobStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1.Job\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"Job\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Job\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v1/watch/jobs\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"watchBatchV1JobListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"Job\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v1/watch/namespaces/{namespace}/jobs\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"watchBatchV1NamespacedJobList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"Job\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v1/watch/namespaces/{namespace}/jobs/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"watchBatchV1NamespacedJob\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"Job\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Job\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1beta1\"\n     ],\n     \"operationId\": \"getBatchV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/batch/v1beta1/cronjobs\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1beta1\"\n     ],\n     \"operationId\": \"listBatchV1beta1CronJobForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1beta1.CronJobList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v1beta1/namespaces/{namespace}/cronjobs\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1beta1\"\n     ],\n     \"operationId\": \"listBatchV1beta1NamespacedCronJob\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1beta1.CronJobList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1beta1\"\n     ],\n     \"operationId\": \"createBatchV1beta1NamespacedCronJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1beta1.CronJob\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1beta1.CronJob\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1beta1.CronJob\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1beta1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1beta1\"\n     ],\n     \"operationId\": \"deleteBatchV1beta1CollectionNamespacedCronJob\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v1beta1/namespaces/{namespace}/cronjobs/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1beta1\"\n     ],\n     \"operationId\": \"readBatchV1beta1NamespacedCronJob\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1beta1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1beta1\"\n     ],\n     \"operationId\": \"replaceBatchV1beta1NamespacedCronJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1beta1.CronJob\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1beta1.CronJob\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1beta1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1beta1\"\n     ],\n     \"operationId\": \"deleteBatchV1beta1NamespacedCronJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified CronJob\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1beta1\"\n     ],\n     \"operationId\": \"patchBatchV1beta1NamespacedCronJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1beta1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the CronJob\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v1beta1/namespaces/{namespace}/cronjobs/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1beta1\"\n     ],\n     \"operationId\": \"readBatchV1beta1NamespacedCronJobStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1beta1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1beta1\"\n     ],\n     \"operationId\": \"replaceBatchV1beta1NamespacedCronJobStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1beta1.CronJob\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1beta1.CronJob\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1beta1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified CronJob\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1beta1\"\n     ],\n     \"operationId\": \"patchBatchV1beta1NamespacedCronJobStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v1beta1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the CronJob\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v1beta1/watch/cronjobs\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1beta1\"\n     ],\n     \"operationId\": \"watchBatchV1beta1CronJobListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v1beta1/watch/namespaces/{namespace}/cronjobs\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1beta1\"\n     ],\n     \"operationId\": \"watchBatchV1beta1NamespacedCronJobList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v1beta1/watch/namespaces/{namespace}/cronjobs/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1beta1\"\n     ],\n     \"operationId\": \"watchBatchV1beta1NamespacedCronJob\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the CronJob\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v2alpha1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"getBatchV2alpha1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/batch/v2alpha1/cronjobs\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"listBatchV2alpha1CronJobForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJobList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v2alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v2alpha1/namespaces/{namespace}/cronjobs\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"listBatchV2alpha1NamespacedCronJob\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJobList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v2alpha1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"createBatchV2alpha1NamespacedCronJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJob\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v2alpha1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"deleteBatchV2alpha1CollectionNamespacedCronJob\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v2alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v2alpha1/namespaces/{namespace}/cronjobs/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"readBatchV2alpha1NamespacedCronJob\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v2alpha1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"replaceBatchV2alpha1NamespacedCronJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJob\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v2alpha1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"deleteBatchV2alpha1NamespacedCronJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v2alpha1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified CronJob\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"patchBatchV2alpha1NamespacedCronJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v2alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the CronJob\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v2alpha1/namespaces/{namespace}/cronjobs/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"readBatchV2alpha1NamespacedCronJobStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v2alpha1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"replaceBatchV2alpha1NamespacedCronJobStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJob\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v2alpha1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified CronJob\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"patchBatchV2alpha1NamespacedCronJobStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v2alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the CronJob\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v2alpha1/watch/cronjobs\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"watchBatchV2alpha1CronJobListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v2alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v2alpha1/watch/namespaces/{namespace}/cronjobs\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"watchBatchV2alpha1NamespacedCronJobList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v2alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v2alpha1/watch/namespaces/{namespace}/cronjobs/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"watchBatchV2alpha1NamespacedCronJob\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v2alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the CronJob\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/certificates.k8s.io/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates\"\n     ],\n     \"operationId\": \"getCertificatesAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/certificates.k8s.io/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"getCertificatesV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/certificates.k8s.io/v1beta1/certificatesigningrequests\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind CertificateSigningRequest\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"listCertificatesV1beta1CertificateSigningRequest\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"kind\": \"CertificateSigningRequest\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a CertificateSigningRequest\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"createCertificatesV1beta1CertificateSigningRequest\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"kind\": \"CertificateSigningRequest\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of CertificateSigningRequest\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"deleteCertificatesV1beta1CollectionCertificateSigningRequest\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"kind\": \"CertificateSigningRequest\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified CertificateSigningRequest\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"readCertificatesV1beta1CertificateSigningRequest\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"kind\": \"CertificateSigningRequest\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified CertificateSigningRequest\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"replaceCertificatesV1beta1CertificateSigningRequest\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"kind\": \"CertificateSigningRequest\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a CertificateSigningRequest\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"deleteCertificatesV1beta1CertificateSigningRequest\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"kind\": \"CertificateSigningRequest\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified CertificateSigningRequest\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"patchCertificatesV1beta1CertificateSigningRequest\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"kind\": \"CertificateSigningRequest\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the CertificateSigningRequest\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name}/approval\": {\n    \"put\": {\n     \"description\": \"replace approval of the specified CertificateSigningRequest\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"replaceCertificatesV1beta1CertificateSigningRequestApproval\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"kind\": \"CertificateSigningRequest\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the CertificateSigningRequest\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified CertificateSigningRequest\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"readCertificatesV1beta1CertificateSigningRequestStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"kind\": \"CertificateSigningRequest\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified CertificateSigningRequest\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"replaceCertificatesV1beta1CertificateSigningRequestStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"kind\": \"CertificateSigningRequest\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified CertificateSigningRequest\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"patchCertificatesV1beta1CertificateSigningRequestStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"kind\": \"CertificateSigningRequest\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the CertificateSigningRequest\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/certificates.k8s.io/v1beta1/watch/certificatesigningrequests\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of CertificateSigningRequest\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"watchCertificatesV1beta1CertificateSigningRequestList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"kind\": \"CertificateSigningRequest\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/certificates.k8s.io/v1beta1/watch/certificatesigningrequests/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind CertificateSigningRequest\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"watchCertificatesV1beta1CertificateSigningRequest\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"kind\": \"CertificateSigningRequest\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the CertificateSigningRequest\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/events.k8s.io/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"events\"\n     ],\n     \"operationId\": \"getEventsAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/events.k8s.io/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"events_v1beta1\"\n     ],\n     \"operationId\": \"getEventsV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/events.k8s.io/v1beta1/events\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"events_v1beta1\"\n     ],\n     \"operationId\": \"listEventsV1beta1EventForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.events.v1beta1.EventList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"events.k8s.io\",\n      \"kind\": \"Event\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/events.k8s.io/v1beta1/namespaces/{namespace}/events\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"events_v1beta1\"\n     ],\n     \"operationId\": \"listEventsV1beta1NamespacedEvent\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.events.v1beta1.EventList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"events.k8s.io\",\n      \"kind\": \"Event\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create an Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"events_v1beta1\"\n     ],\n     \"operationId\": \"createEventsV1beta1NamespacedEvent\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.events.v1beta1.Event\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.events.v1beta1.Event\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.events.v1beta1.Event\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.events.v1beta1.Event\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"events.k8s.io\",\n      \"kind\": \"Event\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"events_v1beta1\"\n     ],\n     \"operationId\": \"deleteEventsV1beta1CollectionNamespacedEvent\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"events.k8s.io\",\n      \"kind\": \"Event\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/events.k8s.io/v1beta1/namespaces/{namespace}/events/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"events_v1beta1\"\n     ],\n     \"operationId\": \"readEventsV1beta1NamespacedEvent\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.events.v1beta1.Event\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"events.k8s.io\",\n      \"kind\": \"Event\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"events_v1beta1\"\n     ],\n     \"operationId\": \"replaceEventsV1beta1NamespacedEvent\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.events.v1beta1.Event\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.events.v1beta1.Event\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.events.v1beta1.Event\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"events.k8s.io\",\n      \"kind\": \"Event\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete an Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"events_v1beta1\"\n     ],\n     \"operationId\": \"deleteEventsV1beta1NamespacedEvent\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"events.k8s.io\",\n      \"kind\": \"Event\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Event\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"events_v1beta1\"\n     ],\n     \"operationId\": \"patchEventsV1beta1NamespacedEvent\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.events.v1beta1.Event\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"events.k8s.io\",\n      \"kind\": \"Event\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Event\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/events.k8s.io/v1beta1/watch/events\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"events_v1beta1\"\n     ],\n     \"operationId\": \"watchEventsV1beta1EventListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"events.k8s.io\",\n      \"kind\": \"Event\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/events.k8s.io/v1beta1/watch/namespaces/{namespace}/events\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"events_v1beta1\"\n     ],\n     \"operationId\": \"watchEventsV1beta1NamespacedEventList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"events.k8s.io\",\n      \"kind\": \"Event\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/events.k8s.io/v1beta1/watch/namespaces/{namespace}/events/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"events_v1beta1\"\n     ],\n     \"operationId\": \"watchEventsV1beta1NamespacedEvent\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"events.k8s.io\",\n      \"kind\": \"Event\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Event\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions\"\n     ],\n     \"operationId\": \"getExtensionsAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/extensions/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"getExtensionsV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/extensions/v1beta1/daemonsets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1DaemonSetForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/deployments\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1DeploymentForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/ingresses\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1IngressForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.IngressList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Ingress\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/daemonsets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"createExtensionsV1beta1NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1CollectionNamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified DaemonSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the DaemonSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedDaemonSetStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedDaemonSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified DaemonSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedDaemonSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the DaemonSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/deployments\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"createExtensionsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Deployment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Deployment\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Deployment\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1CollectionNamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Deployment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Deployment\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Deployment\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Deployment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/rollback\": {\n    \"post\": {\n     \"description\": \"create rollback of a Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"createExtensionsV1beta1NamespacedDeploymentRollback\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentRollback\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentRollback\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentRollback\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentRollback\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"DeploymentRollback\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the DeploymentRollback\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/scale\": {\n    \"get\": {\n     \"description\": \"read scale of the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedDeploymentScale\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace scale of the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedDeploymentScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Scale\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Scale\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update scale of the specified Deployment\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedDeploymentScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Scale\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedDeploymentStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedDeploymentStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Deployment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Deployment\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified Deployment\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedDeploymentStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Deployment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/ingresses\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1NamespacedIngress\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.IngressList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Ingress\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create an Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"createExtensionsV1beta1NamespacedIngress\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Ingress\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Ingress\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Ingress\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Ingress\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Ingress\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1CollectionNamespacedIngress\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Ingress\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedIngress\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Ingress\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Ingress\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedIngress\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Ingress\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Ingress\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Ingress\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Ingress\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete an Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1NamespacedIngress\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Ingress\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Ingress\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedIngress\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Ingress\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Ingress\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Ingress\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedIngressStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Ingress\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Ingress\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedIngressStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Ingress\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Ingress\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Ingress\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Ingress\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified Ingress\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedIngressStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Ingress\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Ingress\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Ingress\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/networkpolicies\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"createExtensionsV1beta1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1CollectionNamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/networkpolicies/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified NetworkPolicy\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the NetworkPolicy\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/replicasets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"createExtensionsV1beta1NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1CollectionNamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ReplicaSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ReplicaSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/scale\": {\n    \"get\": {\n     \"description\": \"read scale of the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedReplicaSetScale\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace scale of the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedReplicaSetScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Scale\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Scale\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update scale of the specified ReplicaSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedReplicaSetScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Scale\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedReplicaSetStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedReplicaSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified ReplicaSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedReplicaSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ReplicaSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/replicationcontrollers/{name}/scale\": {\n    \"get\": {\n     \"description\": \"read scale of the specified ReplicationControllerDummy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedReplicationControllerDummyScale\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace scale of the specified ReplicationControllerDummy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedReplicationControllerDummyScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Scale\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Scale\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update scale of the specified ReplicationControllerDummy\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedReplicationControllerDummyScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Scale\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/networkpolicies\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1NetworkPolicyForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/podsecuritypolicies\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1PodSecurityPolicy\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicyList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"PodSecurityPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"createExtensionsV1beta1PodSecurityPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"PodSecurityPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1CollectionPodSecurityPolicy\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"PodSecurityPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/podsecuritypolicies/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1PodSecurityPolicy\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"PodSecurityPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1PodSecurityPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"PodSecurityPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1PodSecurityPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"PodSecurityPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified PodSecurityPolicy\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1PodSecurityPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"PodSecurityPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PodSecurityPolicy\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/replicasets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1ReplicaSetForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/daemonsets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1DaemonSetListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/deployments\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1DeploymentListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/ingresses\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1IngressListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Ingress\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/namespaces/{namespace}/daemonsets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NamespacedDaemonSetList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/namespaces/{namespace}/daemonsets/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NamespacedDaemonSet\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the DaemonSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/namespaces/{namespace}/deployments\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NamespacedDeploymentList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/namespaces/{namespace}/deployments/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NamespacedDeployment\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Deployment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/namespaces/{namespace}/ingresses\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NamespacedIngressList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Ingress\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/namespaces/{namespace}/ingresses/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NamespacedIngress\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"Ingress\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Ingress\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/namespaces/{namespace}/networkpolicies\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NamespacedNetworkPolicyList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/namespaces/{namespace}/networkpolicies/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NamespacedNetworkPolicy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the NetworkPolicy\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/namespaces/{namespace}/replicasets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NamespacedReplicaSetList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/namespaces/{namespace}/replicasets/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NamespacedReplicaSet\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ReplicaSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/networkpolicies\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NetworkPolicyListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/podsecuritypolicies\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1PodSecurityPolicyList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"PodSecurityPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/podsecuritypolicies/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1PodSecurityPolicy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"PodSecurityPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PodSecurityPolicy\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/replicasets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1ReplicaSetListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/networking.k8s.io/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking\"\n     ],\n     \"operationId\": \"getNetworkingAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/networking.k8s.io/v1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"getNetworkingV1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"listNetworkingV1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicyList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"createNetworkingV1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicy\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicy\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicy\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"deleteNetworkingV1CollectionNamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"readNetworkingV1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"replaceNetworkingV1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicy\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicy\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"deleteNetworkingV1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified NetworkPolicy\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"patchNetworkingV1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the NetworkPolicy\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/networking.k8s.io/v1/networkpolicies\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"listNetworkingV1NetworkPolicyForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicyList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/networking.k8s.io/v1/watch/namespaces/{namespace}/networkpolicies\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"watchNetworkingV1NamespacedNetworkPolicyList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/networking.k8s.io/v1/watch/namespaces/{namespace}/networkpolicies/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"watchNetworkingV1NamespacedNetworkPolicy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the NetworkPolicy\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/networking.k8s.io/v1/watch/networkpolicies\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"watchNetworkingV1NetworkPolicyListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/policy/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy\"\n     ],\n     \"operationId\": \"getPolicyAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/policy/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"getPolicyV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"listPolicyV1beta1NamespacedPodDisruptionBudget\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodDisruptionBudget\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"createPolicyV1beta1NamespacedPodDisruptionBudget\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodDisruptionBudget\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"deletePolicyV1beta1CollectionNamespacedPodDisruptionBudget\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodDisruptionBudget\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"readPolicyV1beta1NamespacedPodDisruptionBudget\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodDisruptionBudget\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"replacePolicyV1beta1NamespacedPodDisruptionBudget\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodDisruptionBudget\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"deletePolicyV1beta1NamespacedPodDisruptionBudget\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodDisruptionBudget\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified PodDisruptionBudget\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"patchPolicyV1beta1NamespacedPodDisruptionBudget\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodDisruptionBudget\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PodDisruptionBudget\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"readPolicyV1beta1NamespacedPodDisruptionBudgetStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodDisruptionBudget\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"replacePolicyV1beta1NamespacedPodDisruptionBudgetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodDisruptionBudget\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified PodDisruptionBudget\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"patchPolicyV1beta1NamespacedPodDisruptionBudgetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodDisruptionBudget\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PodDisruptionBudget\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/policy/v1beta1/poddisruptionbudgets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"listPolicyV1beta1PodDisruptionBudgetForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodDisruptionBudget\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/policy/v1beta1/podsecuritypolicies\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"listPolicyV1beta1PodSecurityPolicy\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicyList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodSecurityPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"createPolicyV1beta1PodSecurityPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodSecurityPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"deletePolicyV1beta1CollectionPodSecurityPolicy\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodSecurityPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/policy/v1beta1/podsecuritypolicies/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"readPolicyV1beta1PodSecurityPolicy\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodSecurityPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"replacePolicyV1beta1PodSecurityPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodSecurityPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"deletePolicyV1beta1PodSecurityPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodSecurityPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified PodSecurityPolicy\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"patchPolicyV1beta1PodSecurityPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodSecurityPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PodSecurityPolicy\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/policy/v1beta1/watch/namespaces/{namespace}/poddisruptionbudgets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"watchPolicyV1beta1NamespacedPodDisruptionBudgetList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodDisruptionBudget\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/policy/v1beta1/watch/namespaces/{namespace}/poddisruptionbudgets/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"watchPolicyV1beta1NamespacedPodDisruptionBudget\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodDisruptionBudget\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PodDisruptionBudget\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/policy/v1beta1/watch/poddisruptionbudgets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"watchPolicyV1beta1PodDisruptionBudgetListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodDisruptionBudget\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/policy/v1beta1/watch/podsecuritypolicies\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"watchPolicyV1beta1PodSecurityPolicyList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodSecurityPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/policy/v1beta1/watch/podsecuritypolicies/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"watchPolicyV1beta1PodSecurityPolicy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"kind\": \"PodSecurityPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PodSecurityPolicy\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization\"\n     ],\n     \"operationId\": \"getRbacAuthorizationAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/rbac.authorization.k8s.io/v1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"getRbacAuthorizationV1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/rbac.authorization.k8s.io/v1/clusterrolebindings\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBindingList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"createRbacAuthorizationV1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1CollectionClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1/clusterrolebindings/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"readRbacAuthorizationV1ClusterRoleBinding\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"replaceRbacAuthorizationV1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ClusterRoleBinding\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"patchRbacAuthorizationV1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ClusterRoleBinding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1/clusterroles\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1ClusterRole\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRoleList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"createRbacAuthorizationV1ClusterRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRole\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRole\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRole\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRole\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1CollectionClusterRole\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1/clusterroles/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"readRbacAuthorizationV1ClusterRole\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRole\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"replaceRbacAuthorizationV1ClusterRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRole\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRole\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRole\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1ClusterRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ClusterRole\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"patchRbacAuthorizationV1ClusterRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRole\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ClusterRole\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.RoleBindingList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"createRbacAuthorizationV1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.RoleBinding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.RoleBinding\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.RoleBinding\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.RoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1CollectionNamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"readRbacAuthorizationV1NamespacedRoleBinding\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.RoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"replaceRbacAuthorizationV1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.RoleBinding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.RoleBinding\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.RoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified RoleBinding\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"patchRbacAuthorizationV1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.RoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the RoleBinding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.RoleList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"createRbacAuthorizationV1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.Role\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.Role\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.Role\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.Role\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1CollectionNamespacedRole\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"readRbacAuthorizationV1NamespacedRole\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.Role\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"replaceRbacAuthorizationV1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.Role\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.Role\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.Role\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Role\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"patchRbacAuthorizationV1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.Role\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Role\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1/rolebindings\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1RoleBindingForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.RoleBindingList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1/roles\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1RoleForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.RoleList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1/watch/clusterrolebindings\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1ClusterRoleBindingList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1/watch/clusterrolebindings/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1ClusterRoleBinding\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ClusterRoleBinding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1/watch/clusterroles\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1ClusterRoleList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1/watch/clusterroles/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1ClusterRole\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ClusterRole\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/rolebindings\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1NamespacedRoleBindingList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/rolebindings/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1NamespacedRoleBinding\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the RoleBinding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/roles\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1NamespacedRoleList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1/watch/namespaces/{namespace}/roles/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1NamespacedRole\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Role\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1/watch/rolebindings\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1RoleBindingListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1/watch/roles\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1RoleListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"getRbacAuthorizationV1alpha1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/clusterrolebindings\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1alpha1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRoleBindingList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"createRbacAuthorizationV1alpha1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRoleBinding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRoleBinding\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRoleBinding\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1alpha1CollectionClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/clusterrolebindings/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"readRbacAuthorizationV1alpha1ClusterRoleBinding\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"replaceRbacAuthorizationV1alpha1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRoleBinding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRoleBinding\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1alpha1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ClusterRoleBinding\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"patchRbacAuthorizationV1alpha1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ClusterRoleBinding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/clusterroles\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1alpha1ClusterRole\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRoleList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"createRbacAuthorizationV1alpha1ClusterRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRole\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRole\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRole\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRole\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1alpha1CollectionClusterRole\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/clusterroles/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"readRbacAuthorizationV1alpha1ClusterRole\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRole\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"replaceRbacAuthorizationV1alpha1ClusterRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRole\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRole\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRole\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1alpha1ClusterRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ClusterRole\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"patchRbacAuthorizationV1alpha1ClusterRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRole\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ClusterRole\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/rolebindings\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1alpha1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.RoleBindingList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"createRbacAuthorizationV1alpha1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.RoleBinding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.RoleBinding\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.RoleBinding\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.RoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1alpha1CollectionNamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/rolebindings/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"readRbacAuthorizationV1alpha1NamespacedRoleBinding\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.RoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"replaceRbacAuthorizationV1alpha1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.RoleBinding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.RoleBinding\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.RoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1alpha1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified RoleBinding\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"patchRbacAuthorizationV1alpha1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.RoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the RoleBinding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/roles\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1alpha1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.RoleList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"createRbacAuthorizationV1alpha1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.Role\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.Role\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.Role\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.Role\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1alpha1CollectionNamespacedRole\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/roles/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"readRbacAuthorizationV1alpha1NamespacedRole\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.Role\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"replaceRbacAuthorizationV1alpha1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.Role\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.Role\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.Role\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1alpha1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Role\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"patchRbacAuthorizationV1alpha1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.Role\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Role\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/rolebindings\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1alpha1RoleBindingForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.RoleBindingList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/roles\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1alpha1RoleForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.RoleList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/watch/clusterrolebindings\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1alpha1ClusterRoleBindingList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/watch/clusterrolebindings/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1alpha1ClusterRoleBinding\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ClusterRoleBinding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/watch/clusterroles\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1alpha1ClusterRoleList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/watch/clusterroles/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1alpha1ClusterRole\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ClusterRole\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/watch/namespaces/{namespace}/rolebindings\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1alpha1NamespacedRoleBindingList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/watch/namespaces/{namespace}/rolebindings/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1alpha1NamespacedRoleBinding\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the RoleBinding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/watch/namespaces/{namespace}/roles\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1alpha1NamespacedRoleList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/watch/namespaces/{namespace}/roles/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1alpha1NamespacedRole\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Role\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/watch/rolebindings\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1alpha1RoleBindingListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/watch/roles\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1alpha1RoleListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"getRbacAuthorizationV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindings\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1beta1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBindingList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"createRbacAuthorizationV1beta1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1beta1CollectionClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindings/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"readRbacAuthorizationV1beta1ClusterRoleBinding\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"replaceRbacAuthorizationV1beta1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1beta1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ClusterRoleBinding\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"patchRbacAuthorizationV1beta1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ClusterRoleBinding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/clusterroles\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1beta1ClusterRole\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"createRbacAuthorizationV1beta1ClusterRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1beta1CollectionClusterRole\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/clusterroles/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"readRbacAuthorizationV1beta1ClusterRole\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"replaceRbacAuthorizationV1beta1ClusterRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1beta1ClusterRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ClusterRole\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"patchRbacAuthorizationV1beta1ClusterRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ClusterRole\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolebindings\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1beta1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.RoleBindingList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"createRbacAuthorizationV1beta1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1beta1CollectionNamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolebindings/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"readRbacAuthorizationV1beta1NamespacedRoleBinding\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"replaceRbacAuthorizationV1beta1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1beta1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified RoleBinding\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"patchRbacAuthorizationV1beta1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the RoleBinding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/roles\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1beta1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.RoleList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"createRbacAuthorizationV1beta1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.Role\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.Role\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.Role\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.Role\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1beta1CollectionNamespacedRole\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/roles/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"readRbacAuthorizationV1beta1NamespacedRole\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.Role\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"replaceRbacAuthorizationV1beta1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.Role\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.Role\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.Role\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1beta1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Role\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"patchRbacAuthorizationV1beta1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.Role\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Role\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/rolebindings\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1beta1RoleBindingForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.RoleBindingList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/roles\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1beta1RoleForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.RoleList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterrolebindings\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1beta1ClusterRoleBindingList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterrolebindings/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1beta1ClusterRoleBinding\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ClusterRoleBinding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterroles\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1beta1ClusterRoleList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterroles/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1beta1ClusterRole\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ClusterRole\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/rolebindings\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1beta1NamespacedRoleBindingList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/rolebindings/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1beta1NamespacedRoleBinding\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the RoleBinding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/roles\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1beta1NamespacedRoleList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/roles/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1beta1NamespacedRole\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Role\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/watch/rolebindings\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1beta1RoleBindingListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/watch/roles\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1beta1RoleListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/scheduling.k8s.io/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"scheduling\"\n     ],\n     \"operationId\": \"getSchedulingAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/scheduling.k8s.io/v1alpha1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"scheduling_v1alpha1\"\n     ],\n     \"operationId\": \"getSchedulingV1alpha1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/scheduling.k8s.io/v1alpha1/priorityclasses\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PriorityClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"scheduling_v1alpha1\"\n     ],\n     \"operationId\": \"listSchedulingV1alpha1PriorityClass\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1alpha1.PriorityClassList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClass\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a PriorityClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"scheduling_v1alpha1\"\n     ],\n     \"operationId\": \"createSchedulingV1alpha1PriorityClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1alpha1.PriorityClass\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1alpha1.PriorityClass\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1alpha1.PriorityClass\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1alpha1.PriorityClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClass\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of PriorityClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"scheduling_v1alpha1\"\n     ],\n     \"operationId\": \"deleteSchedulingV1alpha1CollectionPriorityClass\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClass\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/scheduling.k8s.io/v1alpha1/priorityclasses/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified PriorityClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"scheduling_v1alpha1\"\n     ],\n     \"operationId\": \"readSchedulingV1alpha1PriorityClass\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1alpha1.PriorityClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClass\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified PriorityClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"scheduling_v1alpha1\"\n     ],\n     \"operationId\": \"replaceSchedulingV1alpha1PriorityClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1alpha1.PriorityClass\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1alpha1.PriorityClass\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1alpha1.PriorityClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClass\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a PriorityClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"scheduling_v1alpha1\"\n     ],\n     \"operationId\": \"deleteSchedulingV1alpha1PriorityClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClass\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified PriorityClass\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"scheduling_v1alpha1\"\n     ],\n     \"operationId\": \"patchSchedulingV1alpha1PriorityClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1alpha1.PriorityClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClass\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PriorityClass\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/scheduling.k8s.io/v1alpha1/watch/priorityclasses\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PriorityClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"scheduling_v1alpha1\"\n     ],\n     \"operationId\": \"watchSchedulingV1alpha1PriorityClassList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClass\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/scheduling.k8s.io/v1alpha1/watch/priorityclasses/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind PriorityClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"scheduling_v1alpha1\"\n     ],\n     \"operationId\": \"watchSchedulingV1alpha1PriorityClass\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClass\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PriorityClass\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/scheduling.k8s.io/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"scheduling_v1beta1\"\n     ],\n     \"operationId\": \"getSchedulingV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/scheduling.k8s.io/v1beta1/priorityclasses\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PriorityClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"scheduling_v1beta1\"\n     ],\n     \"operationId\": \"listSchedulingV1beta1PriorityClass\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClassList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClass\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a PriorityClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"scheduling_v1beta1\"\n     ],\n     \"operationId\": \"createSchedulingV1beta1PriorityClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClass\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of PriorityClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"scheduling_v1beta1\"\n     ],\n     \"operationId\": \"deleteSchedulingV1beta1CollectionPriorityClass\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClass\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/scheduling.k8s.io/v1beta1/priorityclasses/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified PriorityClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"scheduling_v1beta1\"\n     ],\n     \"operationId\": \"readSchedulingV1beta1PriorityClass\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClass\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified PriorityClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"scheduling_v1beta1\"\n     ],\n     \"operationId\": \"replaceSchedulingV1beta1PriorityClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClass\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a PriorityClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"scheduling_v1beta1\"\n     ],\n     \"operationId\": \"deleteSchedulingV1beta1PriorityClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClass\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified PriorityClass\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"scheduling_v1beta1\"\n     ],\n     \"operationId\": \"patchSchedulingV1beta1PriorityClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClass\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PriorityClass\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/scheduling.k8s.io/v1beta1/watch/priorityclasses\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PriorityClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"scheduling_v1beta1\"\n     ],\n     \"operationId\": \"watchSchedulingV1beta1PriorityClassList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClass\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/scheduling.k8s.io/v1beta1/watch/priorityclasses/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind PriorityClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"scheduling_v1beta1\"\n     ],\n     \"operationId\": \"watchSchedulingV1beta1PriorityClass\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClass\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PriorityClass\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/settings.k8s.io/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings\"\n     ],\n     \"operationId\": \"getSettingsAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/settings.k8s.io/v1alpha1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"getSettingsV1alpha1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/settings.k8s.io/v1alpha1/namespaces/{namespace}/podpresets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PodPreset\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"listSettingsV1alpha1NamespacedPodPreset\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.settings.v1alpha1.PodPresetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"kind\": \"PodPreset\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a PodPreset\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"createSettingsV1alpha1NamespacedPodPreset\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.settings.v1alpha1.PodPreset\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.settings.v1alpha1.PodPreset\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.settings.v1alpha1.PodPreset\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.settings.v1alpha1.PodPreset\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"kind\": \"PodPreset\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of PodPreset\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"deleteSettingsV1alpha1CollectionNamespacedPodPreset\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"kind\": \"PodPreset\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/settings.k8s.io/v1alpha1/namespaces/{namespace}/podpresets/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified PodPreset\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"readSettingsV1alpha1NamespacedPodPreset\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.settings.v1alpha1.PodPreset\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"kind\": \"PodPreset\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified PodPreset\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"replaceSettingsV1alpha1NamespacedPodPreset\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.settings.v1alpha1.PodPreset\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.settings.v1alpha1.PodPreset\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.settings.v1alpha1.PodPreset\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"kind\": \"PodPreset\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a PodPreset\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"deleteSettingsV1alpha1NamespacedPodPreset\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"kind\": \"PodPreset\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified PodPreset\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"patchSettingsV1alpha1NamespacedPodPreset\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.settings.v1alpha1.PodPreset\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"kind\": \"PodPreset\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PodPreset\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/settings.k8s.io/v1alpha1/podpresets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PodPreset\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"listSettingsV1alpha1PodPresetForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.settings.v1alpha1.PodPresetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"kind\": \"PodPreset\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/settings.k8s.io/v1alpha1/watch/namespaces/{namespace}/podpresets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PodPreset\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"watchSettingsV1alpha1NamespacedPodPresetList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"kind\": \"PodPreset\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/settings.k8s.io/v1alpha1/watch/namespaces/{namespace}/podpresets/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind PodPreset\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"watchSettingsV1alpha1NamespacedPodPreset\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"kind\": \"PodPreset\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PodPreset\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/settings.k8s.io/v1alpha1/watch/podpresets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PodPreset\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"watchSettingsV1alpha1PodPresetListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"kind\": \"PodPreset\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage\"\n     ],\n     \"operationId\": \"getStorageAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/storage.k8s.io/v1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1\"\n     ],\n     \"operationId\": \"getStorageV1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/storage.k8s.io/v1/storageclasses\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1\"\n     ],\n     \"operationId\": \"listStorageV1StorageClass\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1.StorageClassList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClass\",\n      \"version\": \"v1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1\"\n     ],\n     \"operationId\": \"createStorageV1StorageClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1.StorageClass\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1.StorageClass\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1.StorageClass\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1.StorageClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClass\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1\"\n     ],\n     \"operationId\": \"deleteStorageV1CollectionStorageClass\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClass\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1/storageclasses/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1\"\n     ],\n     \"operationId\": \"readStorageV1StorageClass\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1.StorageClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClass\",\n      \"version\": \"v1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1\"\n     ],\n     \"operationId\": \"replaceStorageV1StorageClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1.StorageClass\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1.StorageClass\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1.StorageClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClass\",\n      \"version\": \"v1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1\"\n     ],\n     \"operationId\": \"deleteStorageV1StorageClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClass\",\n      \"version\": \"v1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified StorageClass\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1\"\n     ],\n     \"operationId\": \"patchStorageV1StorageClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1.StorageClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClass\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the StorageClass\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1/watch/storageclasses\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1\"\n     ],\n     \"operationId\": \"watchStorageV1StorageClassList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClass\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1/watch/storageclasses/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1\"\n     ],\n     \"operationId\": \"watchStorageV1StorageClass\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClass\",\n      \"version\": \"v1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the StorageClass\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1alpha1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1alpha1\"\n     ],\n     \"operationId\": \"getStorageV1alpha1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/storage.k8s.io/v1alpha1/volumeattachments\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind VolumeAttachment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1alpha1\"\n     ],\n     \"operationId\": \"listStorageV1alpha1VolumeAttachment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1alpha1.VolumeAttachmentList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachment\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a VolumeAttachment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1alpha1\"\n     ],\n     \"operationId\": \"createStorageV1alpha1VolumeAttachment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1alpha1.VolumeAttachment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1alpha1.VolumeAttachment\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1alpha1.VolumeAttachment\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1alpha1.VolumeAttachment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachment\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of VolumeAttachment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1alpha1\"\n     ],\n     \"operationId\": \"deleteStorageV1alpha1CollectionVolumeAttachment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachment\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1alpha1/volumeattachments/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified VolumeAttachment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1alpha1\"\n     ],\n     \"operationId\": \"readStorageV1alpha1VolumeAttachment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1alpha1.VolumeAttachment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachment\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified VolumeAttachment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1alpha1\"\n     ],\n     \"operationId\": \"replaceStorageV1alpha1VolumeAttachment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1alpha1.VolumeAttachment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1alpha1.VolumeAttachment\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1alpha1.VolumeAttachment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachment\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a VolumeAttachment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1alpha1\"\n     ],\n     \"operationId\": \"deleteStorageV1alpha1VolumeAttachment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachment\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified VolumeAttachment\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1alpha1\"\n     ],\n     \"operationId\": \"patchStorageV1alpha1VolumeAttachment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1alpha1.VolumeAttachment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachment\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the VolumeAttachment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1alpha1/watch/volumeattachments\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of VolumeAttachment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1alpha1\"\n     ],\n     \"operationId\": \"watchStorageV1alpha1VolumeAttachmentList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachment\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1alpha1/watch/volumeattachments/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind VolumeAttachment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1alpha1\"\n     ],\n     \"operationId\": \"watchStorageV1alpha1VolumeAttachment\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachment\",\n      \"version\": \"v1alpha1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the VolumeAttachment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"getStorageV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/storage.k8s.io/v1beta1/storageclasses\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"listStorageV1beta1StorageClass\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.StorageClassList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClass\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"createStorageV1beta1StorageClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.StorageClass\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.StorageClass\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.StorageClass\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.StorageClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClass\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"deleteStorageV1beta1CollectionStorageClass\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClass\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1beta1/storageclasses/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"readStorageV1beta1StorageClass\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.StorageClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClass\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"replaceStorageV1beta1StorageClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.StorageClass\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.StorageClass\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.StorageClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClass\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"deleteStorageV1beta1StorageClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClass\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified StorageClass\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"patchStorageV1beta1StorageClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.StorageClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClass\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the StorageClass\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1beta1/volumeattachments\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind VolumeAttachment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"listStorageV1beta1VolumeAttachment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a VolumeAttachment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"createStorageV1beta1VolumeAttachment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment\"\n       }\n      },\n      \"202\": {\n       \"description\": \"Accepted\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of VolumeAttachment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"deleteStorageV1beta1CollectionVolumeAttachment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n       \"name\": \"continue\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n       \"name\": \"limit\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1beta1/volumeattachments/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified VolumeAttachment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"readStorageV1beta1VolumeAttachment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified VolumeAttachment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"replaceStorageV1beta1VolumeAttachment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment\"\n       }\n      },\n      \"201\": {\n       \"description\": \"Created\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a VolumeAttachment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"deleteStorageV1beta1VolumeAttachment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified VolumeAttachment\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"patchStorageV1beta1VolumeAttachment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the VolumeAttachment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1beta1/watch/storageclasses\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"watchStorageV1beta1StorageClassList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClass\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1beta1/watch/storageclasses/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"watchStorageV1beta1StorageClass\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClass\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the StorageClass\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1beta1/watch/volumeattachments\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of VolumeAttachment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"watchStorageV1beta1VolumeAttachmentList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1beta1/watch/volumeattachments/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind VolumeAttachment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"watchStorageV1beta1VolumeAttachment\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachment\",\n      \"version\": \"v1beta1\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server the server will respond with a 410 ResourceExpired error indicating the client must restart their list without the continue field. This field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.\",\n      \"name\": \"continue\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\\n\\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.\",\n      \"name\": \"limit\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the VolumeAttachment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/logs/\": {\n    \"get\": {\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"logs\"\n     ],\n     \"operationId\": \"logFileListHandler\",\n     \"responses\": {\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/logs/{logpath}\": {\n    \"get\": {\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"logs\"\n     ],\n     \"operationId\": \"logFileHandler\",\n     \"responses\": {\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"path to the log\",\n      \"name\": \"logpath\",\n      \"in\": \"path\",\n      \"required\": true\n     }\n    ]\n   },\n   \"/version/\": {\n    \"get\": {\n     \"description\": \"get the code version\",\n     \"consumes\": [\n      \"application/json\"\n     ],\n     \"produces\": [\n      \"application/json\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"version\"\n     ],\n     \"operationId\": \"getCodeVersion\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.version.Info\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   }\n  },\n  \"definitions\": {\n   \"io.k8s.api.admissionregistration.v1alpha1.Initializer\": {\n    \"description\": \"Initializer describes the name and the failure policy of an initializer, and what resources it applies to.\",\n    \"required\": [\n     \"name\"\n    ],\n    \"properties\": {\n     \"name\": {\n      \"description\": \"Name is the identifier of the initializer. It will be added to the object that needs to be initialized. Name should be fully qualified, e.g., alwayspullimages.kubernetes.io, where \\\"alwayspullimages\\\" is the name of the webhook, and kubernetes.io is the name of the organization. Required\",\n      \"type\": \"string\"\n     },\n     \"rules\": {\n      \"description\": \"Rules describes what resources/subresources the initializer cares about. The initializer cares about an operation if it matches _any_ Rule. Rule.Resources must not include subresources.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1alpha1.Rule\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.admissionregistration.v1alpha1.InitializerConfiguration\": {\n    \"description\": \"InitializerConfiguration describes the configuration of initializers.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"initializers\": {\n      \"description\": \"Initializers is a list of resources and their default initializers Order-sensitive. When merging multiple InitializerConfigurations, we sort the initializers from different InitializerConfigurations by the name of the InitializerConfigurations; the order of the initializers from the same InitializerConfiguration is preserved.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1alpha1.Initializer\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"name\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"InitializerConfiguration\",\n      \"version\": \"v1alpha1\"\n     }\n    ]\n   },\n   \"io.k8s.api.admissionregistration.v1alpha1.InitializerConfigurationList\": {\n    \"description\": \"InitializerConfigurationList is a list of InitializerConfiguration.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of InitializerConfiguration.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1alpha1.InitializerConfiguration\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"InitializerConfigurationList\",\n      \"version\": \"v1alpha1\"\n     }\n    ]\n   },\n   \"io.k8s.api.admissionregistration.v1alpha1.Rule\": {\n    \"description\": \"Rule is a tuple of APIGroups, APIVersion, and Resources.It is recommended to make sure that all the tuple expansions are valid.\",\n    \"properties\": {\n     \"apiGroups\": {\n      \"description\": \"APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"apiVersions\": {\n      \"description\": \"APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"resources\": {\n      \"description\": \"Resources is a list of resources this rule applies to.\\n\\nFor example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\\n\\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\\n\\nDepending on the enclosing object, subresources might not be allowed. Required.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration\": {\n    \"description\": \"MutatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and may change the object.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"webhooks\": {\n      \"description\": \"Webhooks is a list of webhooks and the affected resources and operations.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.Webhook\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"name\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"MutatingWebhookConfiguration\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfigurationList\": {\n    \"description\": \"MutatingWebhookConfigurationList is a list of MutatingWebhookConfiguration.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of MutatingWebhookConfiguration.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.MutatingWebhookConfiguration\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"MutatingWebhookConfigurationList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.admissionregistration.v1beta1.RuleWithOperations\": {\n    \"description\": \"RuleWithOperations is a tuple of Operations and Resources. It is recommended to make sure that all the tuple expansions are valid.\",\n    \"properties\": {\n     \"apiGroups\": {\n      \"description\": \"APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"apiVersions\": {\n      \"description\": \"APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"operations\": {\n      \"description\": \"Operations is the operations the admission hook cares about - CREATE, UPDATE, or * for all operations. If '*' is present, the length of the slice must be one. Required.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"resources\": {\n      \"description\": \"Resources is a list of resources this rule applies to.\\n\\nFor example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\\n\\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\\n\\nDepending on the enclosing object, subresources might not be allowed. Required.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.admissionregistration.v1beta1.ServiceReference\": {\n    \"description\": \"ServiceReference holds a reference to Service.legacy.k8s.io\",\n    \"required\": [\n     \"namespace\",\n     \"name\"\n    ],\n    \"properties\": {\n     \"name\": {\n      \"description\": \"`name` is the name of the service. Required\",\n      \"type\": \"string\"\n     },\n     \"namespace\": {\n      \"description\": \"`namespace` is the namespace of the service. Required\",\n      \"type\": \"string\"\n     },\n     \"path\": {\n      \"description\": \"`path` is an optional URL path which will be sent in any request to this service.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration\": {\n    \"description\": \"ValidatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and object without changing it.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"webhooks\": {\n      \"description\": \"Webhooks is a list of webhooks and the affected resources and operations.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.Webhook\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"name\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"ValidatingWebhookConfiguration\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfigurationList\": {\n    \"description\": \"ValidatingWebhookConfigurationList is a list of ValidatingWebhookConfiguration.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of ValidatingWebhookConfiguration.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.ValidatingWebhookConfiguration\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"ValidatingWebhookConfigurationList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.admissionregistration.v1beta1.Webhook\": {\n    \"description\": \"Webhook describes an admission webhook and the resources and operations it applies to.\",\n    \"required\": [\n     \"name\",\n     \"clientConfig\"\n    ],\n    \"properties\": {\n     \"clientConfig\": {\n      \"description\": \"ClientConfig defines how to communicate with the hook. Required\",\n      \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.WebhookClientConfig\"\n     },\n     \"failurePolicy\": {\n      \"description\": \"FailurePolicy defines how unrecognized errors from the admission endpoint are handled - allowed values are Ignore or Fail. Defaults to Ignore.\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"The name of the admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where \\\"imagepolicy\\\" is the name of the webhook, and kubernetes.io is the name of the organization. Required.\",\n      \"type\": \"string\"\n     },\n     \"namespaceSelector\": {\n      \"description\": \"NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels. If the object is another cluster scoped resource, it never skips the webhook.\\n\\nFor example, to run the webhook on any objects whose namespace is not associated with \\\"runlevel\\\" of \\\"0\\\" or \\\"1\\\";  you will set the selector as follows: \\\"namespaceSelector\\\": {\\n  \\\"matchExpressions\\\": [\\n    {\\n      \\\"key\\\": \\\"runlevel\\\",\\n      \\\"operator\\\": \\\"NotIn\\\",\\n      \\\"values\\\": [\\n        \\\"0\\\",\\n        \\\"1\\\"\\n      ]\\n    }\\n  ]\\n}\\n\\nIf instead you want to only run the webhook on any objects whose namespace is associated with the \\\"environment\\\" of \\\"prod\\\" or \\\"staging\\\"; you will set the selector as follows: \\\"namespaceSelector\\\": {\\n  \\\"matchExpressions\\\": [\\n    {\\n      \\\"key\\\": \\\"environment\\\",\\n      \\\"operator\\\": \\\"In\\\",\\n      \\\"values\\\": [\\n        \\\"prod\\\",\\n        \\\"staging\\\"\\n      ]\\n    }\\n  ]\\n}\\n\\nSee https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ for more examples of label selectors.\\n\\nDefault to the empty LabelSelector, which matches everything.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"rules\": {\n      \"description\": \"Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule. However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks from putting the cluster in a state which cannot be recovered from without completely disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.RuleWithOperations\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.admissionregistration.v1beta1.WebhookClientConfig\": {\n    \"description\": \"WebhookClientConfig contains the information to make a TLS connection with the webhook\",\n    \"required\": [\n     \"caBundle\"\n    ],\n    \"properties\": {\n     \"caBundle\": {\n      \"description\": \"`caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. Required.\",\n      \"type\": \"string\",\n      \"format\": \"byte\"\n     },\n     \"service\": {\n      \"description\": \"`service` is a reference to the service for this webhook. Either `service` or `url` must be specified.\\n\\nIf the webhook is running within the cluster, then you should use `service`.\\n\\nPort 443 will be used if it is open, otherwise it is an error.\",\n      \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1beta1.ServiceReference\"\n     },\n     \"url\": {\n      \"description\": \"`url` gives the location of the webhook, in standard URL form (`[scheme://]host:port/path`). Exactly one of `url` or `service` must be specified.\\n\\nThe `host` should not refer to a service running in the cluster; use the `service` field instead. The host might be resolved via external DNS in some apiservers (e.g., `kube-apiserver` cannot resolve in-cluster DNS as that would be a layering violation). `host` may also be an IP address.\\n\\nPlease note that using `localhost` or `127.0.0.1` as a `host` is risky unless you take great care to run this webhook on all hosts which run an apiserver which might need to make calls to this webhook. Such installs are likely to be non-portable, i.e., not easy to turn up in a new cluster.\\n\\nThe scheme must be \\\"https\\\"; the URL must begin with \\\"https://\\\".\\n\\nA path is optional, and if present may be any string permissible in a URL. You may use the path to pass an arbitrary string to the webhook, for example, a cluster identifier.\\n\\nAttempting to use a user or basic auth e.g. \\\"user:password@\\\" is not allowed. Fragments (\\\"#...\\\") and query parameters (\\\"?...\\\") are not allowed, either.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1.ControllerRevision\": {\n    \"description\": \"ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.\",\n    \"required\": [\n     \"revision\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"data\": {\n      \"description\": \"Data is the serialized representation of the state.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.runtime.RawExtension\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"revision\": {\n      \"description\": \"Revision indicates the revision of the state represented by Data.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1.ControllerRevisionList\": {\n    \"description\": \"ControllerRevisionList is a resource containing a list of ControllerRevision objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of ControllerRevisions\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ControllerRevision\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevisionList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1.DaemonSet\": {\n    \"description\": \"DaemonSet represents the configuration of a daemon set.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DaemonSetSpec\"\n     },\n     \"status\": {\n      \"description\": \"The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DaemonSetStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1.DaemonSetCondition\": {\n    \"description\": \"DaemonSetCondition describes the state of a DaemonSet at a certain point.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"A human readable message indicating details about the transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"The reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of DaemonSet condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1.DaemonSetList\": {\n    \"description\": \"DaemonSetList is a collection of daemon sets.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"A list of daemon sets.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DaemonSet\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSetList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1.DaemonSetSpec\": {\n    \"description\": \"DaemonSetSpec is the specification of a daemon set.\",\n    \"required\": [\n     \"selector\",\n     \"template\"\n    ],\n    \"properties\": {\n     \"minReadySeconds\": {\n      \"description\": \"The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"revisionHistoryLimit\": {\n      \"description\": \"The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"A label query over pods that are managed by the daemon set. Must match in order to be controlled. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"template\": {\n      \"description\": \"An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplateSpec\"\n     },\n     \"updateStrategy\": {\n      \"description\": \"An update strategy to replace existing DaemonSet pods with new pods.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DaemonSetUpdateStrategy\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1.DaemonSetStatus\": {\n    \"description\": \"DaemonSetStatus represents the current status of a daemon set.\",\n    \"required\": [\n     \"currentNumberScheduled\",\n     \"numberMisscheduled\",\n     \"desiredNumberScheduled\",\n     \"numberReady\"\n    ],\n    \"properties\": {\n     \"collisionCount\": {\n      \"description\": \"Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"conditions\": {\n      \"description\": \"Represents the latest available observations of a DaemonSet's current state.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DaemonSetCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"currentNumberScheduled\": {\n      \"description\": \"The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"desiredNumberScheduled\": {\n      \"description\": \"The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"numberAvailable\": {\n      \"description\": \"The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"numberMisscheduled\": {\n      \"description\": \"The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"numberReady\": {\n      \"description\": \"The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"numberUnavailable\": {\n      \"description\": \"The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"The most recent generation observed by the daemon set controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"updatedNumberScheduled\": {\n      \"description\": \"The total number of nodes that are running updated daemon pod\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1.DaemonSetUpdateStrategy\": {\n    \"description\": \"DaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet.\",\n    \"properties\": {\n     \"rollingUpdate\": {\n      \"description\": \"Rolling update config params. Present only if type = \\\"RollingUpdate\\\".\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1.RollingUpdateDaemonSet\"\n     },\n     \"type\": {\n      \"description\": \"Type of daemon set update. Can be \\\"RollingUpdate\\\" or \\\"OnDelete\\\". Default is RollingUpdate.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1.Deployment\": {\n    \"description\": \"Deployment enables declarative updates for Pods and ReplicaSets.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior of the Deployment.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DeploymentSpec\"\n     },\n     \"status\": {\n      \"description\": \"Most recently observed status of the Deployment.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DeploymentStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1.DeploymentCondition\": {\n    \"description\": \"DeploymentCondition describes the state of a deployment at a certain point.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"lastUpdateTime\": {\n      \"description\": \"The last time this condition was updated.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"A human readable message indicating details about the transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"The reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of deployment condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1.DeploymentList\": {\n    \"description\": \"DeploymentList is a list of Deployments.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of Deployments.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1.Deployment\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"DeploymentList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1.DeploymentSpec\": {\n    \"description\": \"DeploymentSpec is the specification of the desired behavior of the Deployment.\",\n    \"required\": [\n     \"selector\",\n     \"template\"\n    ],\n    \"properties\": {\n     \"minReadySeconds\": {\n      \"description\": \"Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"paused\": {\n      \"description\": \"Indicates that the deployment is paused.\",\n      \"type\": \"boolean\"\n     },\n     \"progressDeadlineSeconds\": {\n      \"description\": \"The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"revisionHistoryLimit\": {\n      \"description\": \"The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. It must match the pod template's labels.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"strategy\": {\n      \"description\": \"The deployment strategy to use to replace existing pods with new ones.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DeploymentStrategy\"\n     },\n     \"template\": {\n      \"description\": \"Template describes the pods that will be created.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplateSpec\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1.DeploymentStatus\": {\n    \"description\": \"DeploymentStatus is the most recently observed status of the Deployment.\",\n    \"properties\": {\n     \"availableReplicas\": {\n      \"description\": \"Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"collisionCount\": {\n      \"description\": \"Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"conditions\": {\n      \"description\": \"Represents the latest available observations of a deployment's current state.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1.DeploymentCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"The generation observed by the deployment controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"readyReplicas\": {\n      \"description\": \"Total number of ready pods targeted by this deployment.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Total number of non-terminated pods targeted by this deployment (their labels match the selector).\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"unavailableReplicas\": {\n      \"description\": \"Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"updatedReplicas\": {\n      \"description\": \"Total number of non-terminated pods targeted by this deployment that have the desired template spec.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1.DeploymentStrategy\": {\n    \"description\": \"DeploymentStrategy describes how to replace existing pods with new ones.\",\n    \"properties\": {\n     \"rollingUpdate\": {\n      \"description\": \"Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1.RollingUpdateDeployment\"\n     },\n     \"type\": {\n      \"description\": \"Type of deployment. Can be \\\"Recreate\\\" or \\\"RollingUpdate\\\". Default is RollingUpdate.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1.ReplicaSet\": {\n    \"description\": \"ReplicaSet ensures that a specified number of pod replicas are running at any given time.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ReplicaSetSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ReplicaSetStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1.ReplicaSetCondition\": {\n    \"description\": \"ReplicaSetCondition describes the state of a replica set at a certain point.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"The last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"A human readable message indicating details about the transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"The reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of replica set condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1.ReplicaSetList\": {\n    \"description\": \"ReplicaSetList is a collection of ReplicaSets.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ReplicaSet\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSetList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1.ReplicaSetSpec\": {\n    \"description\": \"ReplicaSetSpec is the specification of a ReplicaSet.\",\n    \"required\": [\n     \"selector\"\n    ],\n    \"properties\": {\n     \"minReadySeconds\": {\n      \"description\": \"Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"Selector is a label query over pods that should match the replica count. Label keys and values that must match in order to be controlled by this replica set. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"template\": {\n      \"description\": \"Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplateSpec\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1.ReplicaSetStatus\": {\n    \"description\": \"ReplicaSetStatus represents the current status of a ReplicaSet.\",\n    \"required\": [\n     \"replicas\"\n    ],\n    \"properties\": {\n     \"availableReplicas\": {\n      \"description\": \"The number of available replicas (ready for at least minReadySeconds) for this replica set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"conditions\": {\n      \"description\": \"Represents the latest available observations of a replica set's current state.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1.ReplicaSetCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"fullyLabeledReplicas\": {\n      \"description\": \"The number of pods that have labels matching the labels of the pod template of the replicaset.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"ObservedGeneration reflects the generation of the most recently observed ReplicaSet.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"readyReplicas\": {\n      \"description\": \"The number of ready replicas for this replica set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1.RollingUpdateDaemonSet\": {\n    \"description\": \"Spec to control the desired behavior of daemon set rolling update.\",\n    \"properties\": {\n     \"maxUnavailable\": {\n      \"description\": \"The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1.RollingUpdateDeployment\": {\n    \"description\": \"Spec to control the desired behavior of rolling update.\",\n    \"properties\": {\n     \"maxSurge\": {\n      \"description\": \"The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     },\n     \"maxUnavailable\": {\n      \"description\": \"The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1.RollingUpdateStatefulSetStrategy\": {\n    \"description\": \"RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.\",\n    \"properties\": {\n     \"partition\": {\n      \"description\": \"Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1.StatefulSet\": {\n    \"description\": \"StatefulSet represents a set of pods with consistent identities. Identities are defined as:\\n - Network: A single stable DNS and hostname.\\n - Storage: As many VolumeClaims as requested.\\nThe StatefulSet guarantees that a given network identity will always map to the same storage identity.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the desired identities of pods in this set.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1.StatefulSetSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1.StatefulSetStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1.StatefulSetCondition\": {\n    \"description\": \"StatefulSetCondition describes the state of a statefulset at a certain point.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"A human readable message indicating details about the transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"The reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of statefulset condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1.StatefulSetList\": {\n    \"description\": \"StatefulSetList is a collection of StatefulSets.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1.StatefulSet\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSetList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1.StatefulSetSpec\": {\n    \"description\": \"A StatefulSetSpec is the specification of a StatefulSet.\",\n    \"required\": [\n     \"selector\",\n     \"template\",\n     \"serviceName\"\n    ],\n    \"properties\": {\n     \"podManagementPolicy\": {\n      \"description\": \"podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.\",\n      \"type\": \"string\"\n     },\n     \"replicas\": {\n      \"description\": \"replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"revisionHistoryLimit\": {\n      \"description\": \"revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"selector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"serviceName\": {\n      \"description\": \"serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \\\"pod-specific-string\\\" is managed by the StatefulSet controller.\",\n      \"type\": \"string\"\n     },\n     \"template\": {\n      \"description\": \"template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplateSpec\"\n     },\n     \"updateStrategy\": {\n      \"description\": \"updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1.StatefulSetUpdateStrategy\"\n     },\n     \"volumeClaimTemplates\": {\n      \"description\": \"volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1.StatefulSetStatus\": {\n    \"description\": \"StatefulSetStatus represents the current state of a StatefulSet.\",\n    \"required\": [\n     \"replicas\"\n    ],\n    \"properties\": {\n     \"collisionCount\": {\n      \"description\": \"collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"conditions\": {\n      \"description\": \"Represents the latest available observations of a statefulset's current state.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1.StatefulSetCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"currentReplicas\": {\n      \"description\": \"currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"currentRevision\": {\n      \"description\": \"currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).\",\n      \"type\": \"string\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"readyReplicas\": {\n      \"description\": \"readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"replicas is the number of Pods created by the StatefulSet controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"updateRevision\": {\n      \"description\": \"updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)\",\n      \"type\": \"string\"\n     },\n     \"updatedReplicas\": {\n      \"description\": \"updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1.StatefulSetUpdateStrategy\": {\n    \"description\": \"StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.\",\n    \"properties\": {\n     \"rollingUpdate\": {\n      \"description\": \"RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1.RollingUpdateStatefulSetStrategy\"\n     },\n     \"type\": {\n      \"description\": \"Type indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta1.ControllerRevision\": {\n    \"description\": \"DEPRECATED - This group version of ControllerRevision is deprecated by apps/v1beta2/ControllerRevision. See the release notes for more information. ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.\",\n    \"required\": [\n     \"revision\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"data\": {\n      \"description\": \"Data is the serialized representation of the state.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.runtime.RawExtension\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"revision\": {\n      \"description\": \"Revision indicates the revision of the state represented by Data.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1beta1.ControllerRevisionList\": {\n    \"description\": \"ControllerRevisionList is a resource containing a list of ControllerRevision objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of ControllerRevisions\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevisionList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1beta1.Deployment\": {\n    \"description\": \"DEPRECATED - This group version of Deployment is deprecated by apps/v1beta2/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior of the Deployment.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.DeploymentSpec\"\n     },\n     \"status\": {\n      \"description\": \"Most recently observed status of the Deployment.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.DeploymentStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1beta1.DeploymentCondition\": {\n    \"description\": \"DeploymentCondition describes the state of a deployment at a certain point.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"lastUpdateTime\": {\n      \"description\": \"The last time this condition was updated.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"A human readable message indicating details about the transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"The reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of deployment condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta1.DeploymentList\": {\n    \"description\": \"DeploymentList is a list of Deployments.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of Deployments.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Deployment\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"DeploymentList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1beta1.DeploymentRollback\": {\n    \"description\": \"DEPRECATED. DeploymentRollback stores the information required to rollback a deployment.\",\n    \"required\": [\n     \"name\",\n     \"rollbackTo\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Required: This must match the Name of a deployment.\",\n      \"type\": \"string\"\n     },\n     \"rollbackTo\": {\n      \"description\": \"The config of this deployment rollback.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.RollbackConfig\"\n     },\n     \"updatedAnnotations\": {\n      \"description\": \"The annotations to be updated to a deployment\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"DeploymentRollback\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1beta1.DeploymentSpec\": {\n    \"description\": \"DeploymentSpec is the specification of the desired behavior of the Deployment.\",\n    \"required\": [\n     \"template\"\n    ],\n    \"properties\": {\n     \"minReadySeconds\": {\n      \"description\": \"Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"paused\": {\n      \"description\": \"Indicates that the deployment is paused.\",\n      \"type\": \"boolean\"\n     },\n     \"progressDeadlineSeconds\": {\n      \"description\": \"The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"revisionHistoryLimit\": {\n      \"description\": \"The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 2.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"rollbackTo\": {\n      \"description\": \"DEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.RollbackConfig\"\n     },\n     \"selector\": {\n      \"description\": \"Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"strategy\": {\n      \"description\": \"The deployment strategy to use to replace existing pods with new ones.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.DeploymentStrategy\"\n     },\n     \"template\": {\n      \"description\": \"Template describes the pods that will be created.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplateSpec\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta1.DeploymentStatus\": {\n    \"description\": \"DeploymentStatus is the most recently observed status of the Deployment.\",\n    \"properties\": {\n     \"availableReplicas\": {\n      \"description\": \"Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"collisionCount\": {\n      \"description\": \"Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"conditions\": {\n      \"description\": \"Represents the latest available observations of a deployment's current state.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.DeploymentCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"The generation observed by the deployment controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"readyReplicas\": {\n      \"description\": \"Total number of ready pods targeted by this deployment.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Total number of non-terminated pods targeted by this deployment (their labels match the selector).\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"unavailableReplicas\": {\n      \"description\": \"Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"updatedReplicas\": {\n      \"description\": \"Total number of non-terminated pods targeted by this deployment that have the desired template spec.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta1.DeploymentStrategy\": {\n    \"description\": \"DeploymentStrategy describes how to replace existing pods with new ones.\",\n    \"properties\": {\n     \"rollingUpdate\": {\n      \"description\": \"Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.RollingUpdateDeployment\"\n     },\n     \"type\": {\n      \"description\": \"Type of deployment. Can be \\\"Recreate\\\" or \\\"RollingUpdate\\\". Default is RollingUpdate.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta1.RollbackConfig\": {\n    \"description\": \"DEPRECATED.\",\n    \"properties\": {\n     \"revision\": {\n      \"description\": \"The revision to rollback to. If set to 0, rollback to the last revision.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta1.RollingUpdateDeployment\": {\n    \"description\": \"Spec to control the desired behavior of rolling update.\",\n    \"properties\": {\n     \"maxSurge\": {\n      \"description\": \"The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     },\n     \"maxUnavailable\": {\n      \"description\": \"The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta1.RollingUpdateStatefulSetStrategy\": {\n    \"description\": \"RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.\",\n    \"properties\": {\n     \"partition\": {\n      \"description\": \"Partition indicates the ordinal at which the StatefulSet should be partitioned.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta1.Scale\": {\n    \"description\": \"Scale represents a scaling request for a resource.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.ScaleSpec\"\n     },\n     \"status\": {\n      \"description\": \"current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.ScaleStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1beta1.ScaleSpec\": {\n    \"description\": \"ScaleSpec describes the attributes of a scale subresource\",\n    \"properties\": {\n     \"replicas\": {\n      \"description\": \"desired number of instances for the scaled object.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta1.ScaleStatus\": {\n    \"description\": \"ScaleStatus represents the current status of a scale subresource.\",\n    \"required\": [\n     \"replicas\"\n    ],\n    \"properties\": {\n     \"replicas\": {\n      \"description\": \"actual number of observed instances of the scaled object.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"targetSelector\": {\n      \"description\": \"label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta1.StatefulSet\": {\n    \"description\": \"DEPRECATED - This group version of StatefulSet is deprecated by apps/v1beta2/StatefulSet. See the release notes for more information. StatefulSet represents a set of pods with consistent identities. Identities are defined as:\\n - Network: A single stable DNS and hostname.\\n - Storage: As many VolumeClaims as requested.\\nThe StatefulSet guarantees that a given network identity will always map to the same storage identity.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the desired identities of pods in this set.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSetSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSetStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1beta1.StatefulSetCondition\": {\n    \"description\": \"StatefulSetCondition describes the state of a statefulset at a certain point.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"A human readable message indicating details about the transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"The reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of statefulset condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta1.StatefulSetList\": {\n    \"description\": \"StatefulSetList is a collection of StatefulSets.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSetList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1beta1.StatefulSetSpec\": {\n    \"description\": \"A StatefulSetSpec is the specification of a StatefulSet.\",\n    \"required\": [\n     \"template\",\n     \"serviceName\"\n    ],\n    \"properties\": {\n     \"podManagementPolicy\": {\n      \"description\": \"podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.\",\n      \"type\": \"string\"\n     },\n     \"replicas\": {\n      \"description\": \"replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"revisionHistoryLimit\": {\n      \"description\": \"revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"selector is a label query over pods that should match the replica count. If empty, defaulted to labels on the pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"serviceName\": {\n      \"description\": \"serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \\\"pod-specific-string\\\" is managed by the StatefulSet controller.\",\n      \"type\": \"string\"\n     },\n     \"template\": {\n      \"description\": \"template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplateSpec\"\n     },\n     \"updateStrategy\": {\n      \"description\": \"updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSetUpdateStrategy\"\n     },\n     \"volumeClaimTemplates\": {\n      \"description\": \"volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta1.StatefulSetStatus\": {\n    \"description\": \"StatefulSetStatus represents the current state of a StatefulSet.\",\n    \"required\": [\n     \"replicas\"\n    ],\n    \"properties\": {\n     \"collisionCount\": {\n      \"description\": \"collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"conditions\": {\n      \"description\": \"Represents the latest available observations of a statefulset's current state.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSetCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"currentReplicas\": {\n      \"description\": \"currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"currentRevision\": {\n      \"description\": \"currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).\",\n      \"type\": \"string\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"readyReplicas\": {\n      \"description\": \"readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"replicas is the number of Pods created by the StatefulSet controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"updateRevision\": {\n      \"description\": \"updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)\",\n      \"type\": \"string\"\n     },\n     \"updatedReplicas\": {\n      \"description\": \"updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta1.StatefulSetUpdateStrategy\": {\n    \"description\": \"StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.\",\n    \"properties\": {\n     \"rollingUpdate\": {\n      \"description\": \"RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.RollingUpdateStatefulSetStrategy\"\n     },\n     \"type\": {\n      \"description\": \"Type indicates the type of the StatefulSetUpdateStrategy.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta2.ControllerRevision\": {\n    \"description\": \"DEPRECATED - This group version of ControllerRevision is deprecated by apps/v1/ControllerRevision. See the release notes for more information. ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.\",\n    \"required\": [\n     \"revision\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"data\": {\n      \"description\": \"Data is the serialized representation of the state.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.runtime.RawExtension\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"revision\": {\n      \"description\": \"Revision indicates the revision of the state represented by Data.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevision\",\n      \"version\": \"v1beta2\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1beta2.ControllerRevisionList\": {\n    \"description\": \"ControllerRevisionList is a resource containing a list of ControllerRevision objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of ControllerRevisions\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ControllerRevision\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"ControllerRevisionList\",\n      \"version\": \"v1beta2\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1beta2.DaemonSet\": {\n    \"description\": \"DEPRECATED - This group version of DaemonSet is deprecated by apps/v1/DaemonSet. See the release notes for more information. DaemonSet represents the configuration of a daemon set.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DaemonSetSpec\"\n     },\n     \"status\": {\n      \"description\": \"The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DaemonSetStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta2\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1beta2.DaemonSetCondition\": {\n    \"description\": \"DaemonSetCondition describes the state of a DaemonSet at a certain point.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"A human readable message indicating details about the transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"The reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of DaemonSet condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta2.DaemonSetList\": {\n    \"description\": \"DaemonSetList is a collection of daemon sets.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"A list of daemon sets.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DaemonSet\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"DaemonSetList\",\n      \"version\": \"v1beta2\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1beta2.DaemonSetSpec\": {\n    \"description\": \"DaemonSetSpec is the specification of a daemon set.\",\n    \"required\": [\n     \"selector\",\n     \"template\"\n    ],\n    \"properties\": {\n     \"minReadySeconds\": {\n      \"description\": \"The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"revisionHistoryLimit\": {\n      \"description\": \"The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"A label query over pods that are managed by the daemon set. Must match in order to be controlled. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"template\": {\n      \"description\": \"An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplateSpec\"\n     },\n     \"updateStrategy\": {\n      \"description\": \"An update strategy to replace existing DaemonSet pods with new pods.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DaemonSetUpdateStrategy\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta2.DaemonSetStatus\": {\n    \"description\": \"DaemonSetStatus represents the current status of a daemon set.\",\n    \"required\": [\n     \"currentNumberScheduled\",\n     \"numberMisscheduled\",\n     \"desiredNumberScheduled\",\n     \"numberReady\"\n    ],\n    \"properties\": {\n     \"collisionCount\": {\n      \"description\": \"Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"conditions\": {\n      \"description\": \"Represents the latest available observations of a DaemonSet's current state.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DaemonSetCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"currentNumberScheduled\": {\n      \"description\": \"The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"desiredNumberScheduled\": {\n      \"description\": \"The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"numberAvailable\": {\n      \"description\": \"The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"numberMisscheduled\": {\n      \"description\": \"The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"numberReady\": {\n      \"description\": \"The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"numberUnavailable\": {\n      \"description\": \"The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"The most recent generation observed by the daemon set controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"updatedNumberScheduled\": {\n      \"description\": \"The total number of nodes that are running updated daemon pod\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta2.DaemonSetUpdateStrategy\": {\n    \"description\": \"DaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet.\",\n    \"properties\": {\n     \"rollingUpdate\": {\n      \"description\": \"Rolling update config params. Present only if type = \\\"RollingUpdate\\\".\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.RollingUpdateDaemonSet\"\n     },\n     \"type\": {\n      \"description\": \"Type of daemon set update. Can be \\\"RollingUpdate\\\" or \\\"OnDelete\\\". Default is RollingUpdate.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta2.Deployment\": {\n    \"description\": \"DEPRECATED - This group version of Deployment is deprecated by apps/v1/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior of the Deployment.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DeploymentSpec\"\n     },\n     \"status\": {\n      \"description\": \"Most recently observed status of the Deployment.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DeploymentStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta2\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1beta2.DeploymentCondition\": {\n    \"description\": \"DeploymentCondition describes the state of a deployment at a certain point.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"lastUpdateTime\": {\n      \"description\": \"The last time this condition was updated.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"A human readable message indicating details about the transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"The reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of deployment condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta2.DeploymentList\": {\n    \"description\": \"DeploymentList is a list of Deployments.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of Deployments.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.Deployment\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"DeploymentList\",\n      \"version\": \"v1beta2\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1beta2.DeploymentSpec\": {\n    \"description\": \"DeploymentSpec is the specification of the desired behavior of the Deployment.\",\n    \"required\": [\n     \"selector\",\n     \"template\"\n    ],\n    \"properties\": {\n     \"minReadySeconds\": {\n      \"description\": \"Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"paused\": {\n      \"description\": \"Indicates that the deployment is paused.\",\n      \"type\": \"boolean\"\n     },\n     \"progressDeadlineSeconds\": {\n      \"description\": \"The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"revisionHistoryLimit\": {\n      \"description\": \"The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. It must match the pod template's labels.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"strategy\": {\n      \"description\": \"The deployment strategy to use to replace existing pods with new ones.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DeploymentStrategy\"\n     },\n     \"template\": {\n      \"description\": \"Template describes the pods that will be created.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplateSpec\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta2.DeploymentStatus\": {\n    \"description\": \"DeploymentStatus is the most recently observed status of the Deployment.\",\n    \"properties\": {\n     \"availableReplicas\": {\n      \"description\": \"Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"collisionCount\": {\n      \"description\": \"Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"conditions\": {\n      \"description\": \"Represents the latest available observations of a deployment's current state.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.DeploymentCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"The generation observed by the deployment controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"readyReplicas\": {\n      \"description\": \"Total number of ready pods targeted by this deployment.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Total number of non-terminated pods targeted by this deployment (their labels match the selector).\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"unavailableReplicas\": {\n      \"description\": \"Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"updatedReplicas\": {\n      \"description\": \"Total number of non-terminated pods targeted by this deployment that have the desired template spec.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta2.DeploymentStrategy\": {\n    \"description\": \"DeploymentStrategy describes how to replace existing pods with new ones.\",\n    \"properties\": {\n     \"rollingUpdate\": {\n      \"description\": \"Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.RollingUpdateDeployment\"\n     },\n     \"type\": {\n      \"description\": \"Type of deployment. Can be \\\"Recreate\\\" or \\\"RollingUpdate\\\". Default is RollingUpdate.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta2.ReplicaSet\": {\n    \"description\": \"DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta2\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1beta2.ReplicaSetCondition\": {\n    \"description\": \"ReplicaSetCondition describes the state of a replica set at a certain point.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"The last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"A human readable message indicating details about the transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"The reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of replica set condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta2.ReplicaSetList\": {\n    \"description\": \"ReplicaSetList is a collection of ReplicaSets.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSet\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"ReplicaSetList\",\n      \"version\": \"v1beta2\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1beta2.ReplicaSetSpec\": {\n    \"description\": \"ReplicaSetSpec is the specification of a ReplicaSet.\",\n    \"required\": [\n     \"selector\"\n    ],\n    \"properties\": {\n     \"minReadySeconds\": {\n      \"description\": \"Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"Selector is a label query over pods that should match the replica count. Label keys and values that must match in order to be controlled by this replica set. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"template\": {\n      \"description\": \"Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplateSpec\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta2.ReplicaSetStatus\": {\n    \"description\": \"ReplicaSetStatus represents the current status of a ReplicaSet.\",\n    \"required\": [\n     \"replicas\"\n    ],\n    \"properties\": {\n     \"availableReplicas\": {\n      \"description\": \"The number of available replicas (ready for at least minReadySeconds) for this replica set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"conditions\": {\n      \"description\": \"Represents the latest available observations of a replica set's current state.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ReplicaSetCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"fullyLabeledReplicas\": {\n      \"description\": \"The number of pods that have labels matching the labels of the pod template of the replicaset.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"ObservedGeneration reflects the generation of the most recently observed ReplicaSet.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"readyReplicas\": {\n      \"description\": \"The number of ready replicas for this replica set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta2.RollingUpdateDaemonSet\": {\n    \"description\": \"Spec to control the desired behavior of daemon set rolling update.\",\n    \"properties\": {\n     \"maxUnavailable\": {\n      \"description\": \"The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta2.RollingUpdateDeployment\": {\n    \"description\": \"Spec to control the desired behavior of rolling update.\",\n    \"properties\": {\n     \"maxSurge\": {\n      \"description\": \"The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     },\n     \"maxUnavailable\": {\n      \"description\": \"The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta2.RollingUpdateStatefulSetStrategy\": {\n    \"description\": \"RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.\",\n    \"properties\": {\n     \"partition\": {\n      \"description\": \"Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta2.Scale\": {\n    \"description\": \"Scale represents a scaling request for a resource.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ScaleSpec\"\n     },\n     \"status\": {\n      \"description\": \"current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.ScaleStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta2\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1beta2.ScaleSpec\": {\n    \"description\": \"ScaleSpec describes the attributes of a scale subresource\",\n    \"properties\": {\n     \"replicas\": {\n      \"description\": \"desired number of instances for the scaled object.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta2.ScaleStatus\": {\n    \"description\": \"ScaleStatus represents the current status of a scale subresource.\",\n    \"required\": [\n     \"replicas\"\n    ],\n    \"properties\": {\n     \"replicas\": {\n      \"description\": \"actual number of observed instances of the scaled object.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"targetSelector\": {\n      \"description\": \"label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta2.StatefulSet\": {\n    \"description\": \"DEPRECATED - This group version of StatefulSet is deprecated by apps/v1/StatefulSet. See the release notes for more information. StatefulSet represents a set of pods with consistent identities. Identities are defined as:\\n - Network: A single stable DNS and hostname.\\n - Storage: As many VolumeClaims as requested.\\nThe StatefulSet guarantees that a given network identity will always map to the same storage identity.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the desired identities of pods in this set.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.StatefulSetSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.StatefulSetStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSet\",\n      \"version\": \"v1beta2\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1beta2.StatefulSetCondition\": {\n    \"description\": \"StatefulSetCondition describes the state of a statefulset at a certain point.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"A human readable message indicating details about the transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"The reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of statefulset condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta2.StatefulSetList\": {\n    \"description\": \"StatefulSetList is a collection of StatefulSets.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.StatefulSet\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"kind\": \"StatefulSetList\",\n      \"version\": \"v1beta2\"\n     }\n    ]\n   },\n   \"io.k8s.api.apps.v1beta2.StatefulSetSpec\": {\n    \"description\": \"A StatefulSetSpec is the specification of a StatefulSet.\",\n    \"required\": [\n     \"selector\",\n     \"template\",\n     \"serviceName\"\n    ],\n    \"properties\": {\n     \"podManagementPolicy\": {\n      \"description\": \"podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.\",\n      \"type\": \"string\"\n     },\n     \"replicas\": {\n      \"description\": \"replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"revisionHistoryLimit\": {\n      \"description\": \"revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"selector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"serviceName\": {\n      \"description\": \"serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \\\"pod-specific-string\\\" is managed by the StatefulSet controller.\",\n      \"type\": \"string\"\n     },\n     \"template\": {\n      \"description\": \"template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplateSpec\"\n     },\n     \"updateStrategy\": {\n      \"description\": \"updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.StatefulSetUpdateStrategy\"\n     },\n     \"volumeClaimTemplates\": {\n      \"description\": \"volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta2.StatefulSetStatus\": {\n    \"description\": \"StatefulSetStatus represents the current state of a StatefulSet.\",\n    \"required\": [\n     \"replicas\"\n    ],\n    \"properties\": {\n     \"collisionCount\": {\n      \"description\": \"collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"conditions\": {\n      \"description\": \"Represents the latest available observations of a statefulset's current state.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.StatefulSetCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"currentReplicas\": {\n      \"description\": \"currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"currentRevision\": {\n      \"description\": \"currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).\",\n      \"type\": \"string\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"readyReplicas\": {\n      \"description\": \"readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"replicas is the number of Pods created by the StatefulSet controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"updateRevision\": {\n      \"description\": \"updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)\",\n      \"type\": \"string\"\n     },\n     \"updatedReplicas\": {\n      \"description\": \"updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.apps.v1beta2.StatefulSetUpdateStrategy\": {\n    \"description\": \"StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.\",\n    \"properties\": {\n     \"rollingUpdate\": {\n      \"description\": \"RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.\",\n      \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta2.RollingUpdateStatefulSetStrategy\"\n     },\n     \"type\": {\n      \"description\": \"Type indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.authentication.v1.TokenReview\": {\n    \"description\": \"TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver.\",\n    \"required\": [\n     \"spec\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec holds information about the request being evaluated\",\n      \"$ref\": \"#/definitions/io.k8s.api.authentication.v1.TokenReviewSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is filled in by the server and indicates whether the request can be authenticated.\",\n      \"$ref\": \"#/definitions/io.k8s.api.authentication.v1.TokenReviewStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"authentication.k8s.io\",\n      \"kind\": \"TokenReview\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.authentication.v1.TokenReviewSpec\": {\n    \"description\": \"TokenReviewSpec is a description of the token authentication request.\",\n    \"properties\": {\n     \"token\": {\n      \"description\": \"Token is the opaque bearer token.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.authentication.v1.TokenReviewStatus\": {\n    \"description\": \"TokenReviewStatus is the result of the token authentication request.\",\n    \"properties\": {\n     \"authenticated\": {\n      \"description\": \"Authenticated indicates that the token was associated with a known user.\",\n      \"type\": \"boolean\"\n     },\n     \"error\": {\n      \"description\": \"Error indicates that the token couldn't be checked\",\n      \"type\": \"string\"\n     },\n     \"user\": {\n      \"description\": \"User is the UserInfo associated with the provided token.\",\n      \"$ref\": \"#/definitions/io.k8s.api.authentication.v1.UserInfo\"\n     }\n    }\n   },\n   \"io.k8s.api.authentication.v1.UserInfo\": {\n    \"description\": \"UserInfo holds the information about the user needed to implement the user.Info interface.\",\n    \"properties\": {\n     \"extra\": {\n      \"description\": \"Any additional information provided by the authenticator.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"array\",\n       \"items\": {\n        \"type\": \"string\"\n       }\n      }\n     },\n     \"groups\": {\n      \"description\": \"The names of groups this user is a part of.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"uid\": {\n      \"description\": \"A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.\",\n      \"type\": \"string\"\n     },\n     \"username\": {\n      \"description\": \"The name that uniquely identifies this user among all active users.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.authentication.v1beta1.TokenReview\": {\n    \"description\": \"TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver.\",\n    \"required\": [\n     \"spec\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec holds information about the request being evaluated\",\n      \"$ref\": \"#/definitions/io.k8s.api.authentication.v1beta1.TokenReviewSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is filled in by the server and indicates whether the request can be authenticated.\",\n      \"$ref\": \"#/definitions/io.k8s.api.authentication.v1beta1.TokenReviewStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"authentication.k8s.io\",\n      \"kind\": \"TokenReview\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.authentication.v1beta1.TokenReviewSpec\": {\n    \"description\": \"TokenReviewSpec is a description of the token authentication request.\",\n    \"properties\": {\n     \"token\": {\n      \"description\": \"Token is the opaque bearer token.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.authentication.v1beta1.TokenReviewStatus\": {\n    \"description\": \"TokenReviewStatus is the result of the token authentication request.\",\n    \"properties\": {\n     \"authenticated\": {\n      \"description\": \"Authenticated indicates that the token was associated with a known user.\",\n      \"type\": \"boolean\"\n     },\n     \"error\": {\n      \"description\": \"Error indicates that the token couldn't be checked\",\n      \"type\": \"string\"\n     },\n     \"user\": {\n      \"description\": \"User is the UserInfo associated with the provided token.\",\n      \"$ref\": \"#/definitions/io.k8s.api.authentication.v1beta1.UserInfo\"\n     }\n    }\n   },\n   \"io.k8s.api.authentication.v1beta1.UserInfo\": {\n    \"description\": \"UserInfo holds the information about the user needed to implement the user.Info interface.\",\n    \"properties\": {\n     \"extra\": {\n      \"description\": \"Any additional information provided by the authenticator.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"array\",\n       \"items\": {\n        \"type\": \"string\"\n       }\n      }\n     },\n     \"groups\": {\n      \"description\": \"The names of groups this user is a part of.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"uid\": {\n      \"description\": \"A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.\",\n      \"type\": \"string\"\n     },\n     \"username\": {\n      \"description\": \"The name that uniquely identifies this user among all active users.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.authorization.v1.LocalSubjectAccessReview\": {\n    \"description\": \"LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking.\",\n    \"required\": [\n     \"spec\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace you made the request against.  If empty, it is defaulted.\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is filled in by the server and indicates whether the request is allowed or not\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"authorization.k8s.io\",\n      \"kind\": \"LocalSubjectAccessReview\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.authorization.v1.NonResourceAttributes\": {\n    \"description\": \"NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface\",\n    \"properties\": {\n     \"path\": {\n      \"description\": \"Path is the URL path of the request\",\n      \"type\": \"string\"\n     },\n     \"verb\": {\n      \"description\": \"Verb is the standard HTTP verb\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.authorization.v1.NonResourceRule\": {\n    \"description\": \"NonResourceRule holds information that describes a rule for the non-resource\",\n    \"required\": [\n     \"verbs\"\n    ],\n    \"properties\": {\n     \"nonResourceURLs\": {\n      \"description\": \"NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full, final step in the path.  \\\"*\\\" means all.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"verbs\": {\n      \"description\": \"Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  \\\"*\\\" means all.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.authorization.v1.ResourceAttributes\": {\n    \"description\": \"ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface\",\n    \"properties\": {\n     \"group\": {\n      \"description\": \"Group is the API Group of the Resource.  \\\"*\\\" means all.\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name is the name of the resource being requested for a \\\"get\\\" or deleted for a \\\"delete\\\". \\\"\\\" (empty) means all.\",\n      \"type\": \"string\"\n     },\n     \"namespace\": {\n      \"description\": \"Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \\\"\\\" (empty) is defaulted for LocalSubjectAccessReviews \\\"\\\" (empty) is empty for cluster-scoped resources \\\"\\\" (empty) means \\\"all\\\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\",\n      \"type\": \"string\"\n     },\n     \"resource\": {\n      \"description\": \"Resource is one of the existing resource types.  \\\"*\\\" means all.\",\n      \"type\": \"string\"\n     },\n     \"subresource\": {\n      \"description\": \"Subresource is one of the existing resource types.  \\\"\\\" means none.\",\n      \"type\": \"string\"\n     },\n     \"verb\": {\n      \"description\": \"Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \\\"*\\\" means all.\",\n      \"type\": \"string\"\n     },\n     \"version\": {\n      \"description\": \"Version is the API Version of the Resource.  \\\"*\\\" means all.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.authorization.v1.ResourceRule\": {\n    \"description\": \"ResourceRule is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.\",\n    \"required\": [\n     \"verbs\"\n    ],\n    \"properties\": {\n     \"apiGroups\": {\n      \"description\": \"APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.  \\\"*\\\" means all.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"resourceNames\": {\n      \"description\": \"ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  \\\"*\\\" means all.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"resources\": {\n      \"description\": \"Resources is a list of resources this rule applies to.  \\\"*\\\" means all in the specified apiGroups.\\n \\\"*/foo\\\" represents the subresource 'foo' for all resources in the specified apiGroups.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"verbs\": {\n      \"description\": \"Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  \\\"*\\\" means all.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.authorization.v1.SelfSubjectAccessReview\": {\n    \"description\": \"SelfSubjectAccessReview checks whether or the current user can perform an action.  Not filling in a spec.namespace means \\\"in all namespaces\\\".  Self is a special case, because users should always be able to check whether they can perform an action\",\n    \"required\": [\n     \"spec\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec holds information about the request being evaluated.  user and groups must be empty\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReviewSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is filled in by the server and indicates whether the request is allowed or not\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"authorization.k8s.io\",\n      \"kind\": \"SelfSubjectAccessReview\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.authorization.v1.SelfSubjectAccessReviewSpec\": {\n    \"description\": \"SelfSubjectAccessReviewSpec is a description of the access request.  Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set\",\n    \"properties\": {\n     \"nonResourceAttributes\": {\n      \"description\": \"NonResourceAttributes describes information for a non-resource access request\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.NonResourceAttributes\"\n     },\n     \"resourceAttributes\": {\n      \"description\": \"ResourceAuthorizationAttributes describes information for a resource access request\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.ResourceAttributes\"\n     }\n    }\n   },\n   \"io.k8s.api.authorization.v1.SelfSubjectRulesReview\": {\n    \"description\": \"SelfSubjectRulesReview enumerates the set of actions the current user can perform within a namespace. The returned list of actions may be incomplete depending on the server's authorization mode, and any errors experienced during the evaluation. SelfSubjectRulesReview should be used by UIs to show/hide actions, or to quickly let an end user reason about their permissions. It should NOT Be used by external systems to drive authorization decisions as this raises confused deputy, cache lifetime/revocation, and correctness concerns. SubjectAccessReview, and LocalAccessReview are the correct way to defer authorization decisions to the API server.\",\n    \"required\": [\n     \"spec\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec holds information about the request being evaluated.\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SelfSubjectRulesReviewSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is filled in by the server and indicates the set of actions a user can perform.\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SubjectRulesReviewStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"authorization.k8s.io\",\n      \"kind\": \"SelfSubjectRulesReview\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.authorization.v1.SelfSubjectRulesReviewSpec\": {\n    \"properties\": {\n     \"namespace\": {\n      \"description\": \"Namespace to evaluate rules for. Required.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.authorization.v1.SubjectAccessReview\": {\n    \"description\": \"SubjectAccessReview checks whether or not a user or group can perform an action.\",\n    \"required\": [\n     \"spec\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec holds information about the request being evaluated\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is filled in by the server and indicates whether the request is allowed or not\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"authorization.k8s.io\",\n      \"kind\": \"SubjectAccessReview\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.authorization.v1.SubjectAccessReviewSpec\": {\n    \"description\": \"SubjectAccessReviewSpec is a description of the access request.  Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set\",\n    \"properties\": {\n     \"extra\": {\n      \"description\": \"Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"array\",\n       \"items\": {\n        \"type\": \"string\"\n       }\n      }\n     },\n     \"groups\": {\n      \"description\": \"Groups is the groups you're testing for.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"nonResourceAttributes\": {\n      \"description\": \"NonResourceAttributes describes information for a non-resource access request\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.NonResourceAttributes\"\n     },\n     \"resourceAttributes\": {\n      \"description\": \"ResourceAuthorizationAttributes describes information for a resource access request\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.ResourceAttributes\"\n     },\n     \"uid\": {\n      \"description\": \"UID information about the requesting user.\",\n      \"type\": \"string\"\n     },\n     \"user\": {\n      \"description\": \"User is the user you're testing for. If you specify \\\"User\\\" but not \\\"Groups\\\", then is it interpreted as \\\"What if User were not a member of any groups\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.authorization.v1.SubjectAccessReviewStatus\": {\n    \"description\": \"SubjectAccessReviewStatus\",\n    \"required\": [\n     \"allowed\"\n    ],\n    \"properties\": {\n     \"allowed\": {\n      \"description\": \"Allowed is required. True if the action would be allowed, false otherwise.\",\n      \"type\": \"boolean\"\n     },\n     \"denied\": {\n      \"description\": \"Denied is optional. True if the action would be denied, otherwise false. If both allowed is false and denied is false, then the authorizer has no opinion on whether to authorize the action. Denied may not be true if Allowed is true.\",\n      \"type\": \"boolean\"\n     },\n     \"evaluationError\": {\n      \"description\": \"EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"Reason is optional.  It indicates why a request was allowed or denied.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.authorization.v1.SubjectRulesReviewStatus\": {\n    \"description\": \"SubjectRulesReviewStatus contains the result of a rules check. This check can be incomplete depending on the set of authorizers the server is configured with and any errors experienced during evaluation. Because authorization rules are additive, if a rule appears in a list it's safe to assume the subject has that permission, even if that list is incomplete.\",\n    \"required\": [\n     \"resourceRules\",\n     \"nonResourceRules\",\n     \"incomplete\"\n    ],\n    \"properties\": {\n     \"evaluationError\": {\n      \"description\": \"EvaluationError can appear in combination with Rules. It indicates an error occurred during rule evaluation, such as an authorizer that doesn't support rule evaluation, and that ResourceRules and/or NonResourceRules may be incomplete.\",\n      \"type\": \"string\"\n     },\n     \"incomplete\": {\n      \"description\": \"Incomplete is true when the rules returned by this call are incomplete. This is most commonly encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.\",\n      \"type\": \"boolean\"\n     },\n     \"nonResourceRules\": {\n      \"description\": \"NonResourceRules is the list of actions the subject is allowed to perform on non-resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.NonResourceRule\"\n      }\n     },\n     \"resourceRules\": {\n      \"description\": \"ResourceRules is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.ResourceRule\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.authorization.v1beta1.LocalSubjectAccessReview\": {\n    \"description\": \"LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking.\",\n    \"required\": [\n     \"spec\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace you made the request against.  If empty, it is defaulted.\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SubjectAccessReviewSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is filled in by the server and indicates whether the request is allowed or not\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SubjectAccessReviewStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"authorization.k8s.io\",\n      \"kind\": \"LocalSubjectAccessReview\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.authorization.v1beta1.NonResourceAttributes\": {\n    \"description\": \"NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface\",\n    \"properties\": {\n     \"path\": {\n      \"description\": \"Path is the URL path of the request\",\n      \"type\": \"string\"\n     },\n     \"verb\": {\n      \"description\": \"Verb is the standard HTTP verb\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.authorization.v1beta1.NonResourceRule\": {\n    \"description\": \"NonResourceRule holds information that describes a rule for the non-resource\",\n    \"required\": [\n     \"verbs\"\n    ],\n    \"properties\": {\n     \"nonResourceURLs\": {\n      \"description\": \"NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full, final step in the path.  \\\"*\\\" means all.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"verbs\": {\n      \"description\": \"Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options.  \\\"*\\\" means all.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.authorization.v1beta1.ResourceAttributes\": {\n    \"description\": \"ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface\",\n    \"properties\": {\n     \"group\": {\n      \"description\": \"Group is the API Group of the Resource.  \\\"*\\\" means all.\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name is the name of the resource being requested for a \\\"get\\\" or deleted for a \\\"delete\\\". \\\"\\\" (empty) means all.\",\n      \"type\": \"string\"\n     },\n     \"namespace\": {\n      \"description\": \"Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \\\"\\\" (empty) is defaulted for LocalSubjectAccessReviews \\\"\\\" (empty) is empty for cluster-scoped resources \\\"\\\" (empty) means \\\"all\\\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\",\n      \"type\": \"string\"\n     },\n     \"resource\": {\n      \"description\": \"Resource is one of the existing resource types.  \\\"*\\\" means all.\",\n      \"type\": \"string\"\n     },\n     \"subresource\": {\n      \"description\": \"Subresource is one of the existing resource types.  \\\"\\\" means none.\",\n      \"type\": \"string\"\n     },\n     \"verb\": {\n      \"description\": \"Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \\\"*\\\" means all.\",\n      \"type\": \"string\"\n     },\n     \"version\": {\n      \"description\": \"Version is the API Version of the Resource.  \\\"*\\\" means all.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.authorization.v1beta1.ResourceRule\": {\n    \"description\": \"ResourceRule is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.\",\n    \"required\": [\n     \"verbs\"\n    ],\n    \"properties\": {\n     \"apiGroups\": {\n      \"description\": \"APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.  \\\"*\\\" means all.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"resourceNames\": {\n      \"description\": \"ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.  \\\"*\\\" means all.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"resources\": {\n      \"description\": \"Resources is a list of resources this rule applies to.  \\\"*\\\" means all in the specified apiGroups.\\n \\\"*/foo\\\" represents the subresource 'foo' for all resources in the specified apiGroups.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"verbs\": {\n      \"description\": \"Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy.  \\\"*\\\" means all.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.authorization.v1beta1.SelfSubjectAccessReview\": {\n    \"description\": \"SelfSubjectAccessReview checks whether or the current user can perform an action.  Not filling in a spec.namespace means \\\"in all namespaces\\\".  Self is a special case, because users should always be able to check whether they can perform an action\",\n    \"required\": [\n     \"spec\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec holds information about the request being evaluated.  user and groups must be empty\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SelfSubjectAccessReviewSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is filled in by the server and indicates whether the request is allowed or not\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SubjectAccessReviewStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"authorization.k8s.io\",\n      \"kind\": \"SelfSubjectAccessReview\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.authorization.v1beta1.SelfSubjectAccessReviewSpec\": {\n    \"description\": \"SelfSubjectAccessReviewSpec is a description of the access request.  Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set\",\n    \"properties\": {\n     \"nonResourceAttributes\": {\n      \"description\": \"NonResourceAttributes describes information for a non-resource access request\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.NonResourceAttributes\"\n     },\n     \"resourceAttributes\": {\n      \"description\": \"ResourceAuthorizationAttributes describes information for a resource access request\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.ResourceAttributes\"\n     }\n    }\n   },\n   \"io.k8s.api.authorization.v1beta1.SelfSubjectRulesReview\": {\n    \"description\": \"SelfSubjectRulesReview enumerates the set of actions the current user can perform within a namespace. The returned list of actions may be incomplete depending on the server's authorization mode, and any errors experienced during the evaluation. SelfSubjectRulesReview should be used by UIs to show/hide actions, or to quickly let an end user reason about their permissions. It should NOT Be used by external systems to drive authorization decisions as this raises confused deputy, cache lifetime/revocation, and correctness concerns. SubjectAccessReview, and LocalAccessReview are the correct way to defer authorization decisions to the API server.\",\n    \"required\": [\n     \"spec\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec holds information about the request being evaluated.\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SelfSubjectRulesReviewSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is filled in by the server and indicates the set of actions a user can perform.\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SubjectRulesReviewStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"authorization.k8s.io\",\n      \"kind\": \"SelfSubjectRulesReview\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.authorization.v1beta1.SelfSubjectRulesReviewSpec\": {\n    \"properties\": {\n     \"namespace\": {\n      \"description\": \"Namespace to evaluate rules for. Required.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.authorization.v1beta1.SubjectAccessReview\": {\n    \"description\": \"SubjectAccessReview checks whether or not a user or group can perform an action.\",\n    \"required\": [\n     \"spec\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec holds information about the request being evaluated\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SubjectAccessReviewSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is filled in by the server and indicates whether the request is allowed or not\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SubjectAccessReviewStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"authorization.k8s.io\",\n      \"kind\": \"SubjectAccessReview\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.authorization.v1beta1.SubjectAccessReviewSpec\": {\n    \"description\": \"SubjectAccessReviewSpec is a description of the access request.  Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set\",\n    \"properties\": {\n     \"extra\": {\n      \"description\": \"Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"array\",\n       \"items\": {\n        \"type\": \"string\"\n       }\n      }\n     },\n     \"group\": {\n      \"description\": \"Groups is the groups you're testing for.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"nonResourceAttributes\": {\n      \"description\": \"NonResourceAttributes describes information for a non-resource access request\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.NonResourceAttributes\"\n     },\n     \"resourceAttributes\": {\n      \"description\": \"ResourceAuthorizationAttributes describes information for a resource access request\",\n      \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.ResourceAttributes\"\n     },\n     \"uid\": {\n      \"description\": \"UID information about the requesting user.\",\n      \"type\": \"string\"\n     },\n     \"user\": {\n      \"description\": \"User is the user you're testing for. If you specify \\\"User\\\" but not \\\"Group\\\", then is it interpreted as \\\"What if User were not a member of any groups\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.authorization.v1beta1.SubjectAccessReviewStatus\": {\n    \"description\": \"SubjectAccessReviewStatus\",\n    \"required\": [\n     \"allowed\"\n    ],\n    \"properties\": {\n     \"allowed\": {\n      \"description\": \"Allowed is required. True if the action would be allowed, false otherwise.\",\n      \"type\": \"boolean\"\n     },\n     \"denied\": {\n      \"description\": \"Denied is optional. True if the action would be denied, otherwise false. If both allowed is false and denied is false, then the authorizer has no opinion on whether to authorize the action. Denied may not be true if Allowed is true.\",\n      \"type\": \"boolean\"\n     },\n     \"evaluationError\": {\n      \"description\": \"EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"Reason is optional.  It indicates why a request was allowed or denied.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.authorization.v1beta1.SubjectRulesReviewStatus\": {\n    \"description\": \"SubjectRulesReviewStatus contains the result of a rules check. This check can be incomplete depending on the set of authorizers the server is configured with and any errors experienced during evaluation. Because authorization rules are additive, if a rule appears in a list it's safe to assume the subject has that permission, even if that list is incomplete.\",\n    \"required\": [\n     \"resourceRules\",\n     \"nonResourceRules\",\n     \"incomplete\"\n    ],\n    \"properties\": {\n     \"evaluationError\": {\n      \"description\": \"EvaluationError can appear in combination with Rules. It indicates an error occurred during rule evaluation, such as an authorizer that doesn't support rule evaluation, and that ResourceRules and/or NonResourceRules may be incomplete.\",\n      \"type\": \"string\"\n     },\n     \"incomplete\": {\n      \"description\": \"Incomplete is true when the rules returned by this call are incomplete. This is most commonly encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.\",\n      \"type\": \"boolean\"\n     },\n     \"nonResourceRules\": {\n      \"description\": \"NonResourceRules is the list of actions the subject is allowed to perform on non-resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.NonResourceRule\"\n      }\n     },\n     \"resourceRules\": {\n      \"description\": \"ResourceRules is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.ResourceRule\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.autoscaling.v1.CrossVersionObjectReference\": {\n    \"description\": \"CrossVersionObjectReference contains enough information to let you identify the referred resource.\",\n    \"required\": [\n     \"kind\",\n     \"name\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"API version of the referent\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\\\"\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler\": {\n    \"description\": \"configuration of a horizontal pod autoscaler.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"behaviour of autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\",\n      \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerSpec\"\n     },\n     \"status\": {\n      \"description\": \"current information about the autoscaler.\",\n      \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList\": {\n    \"description\": \"list of horizontal pod autoscaler objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"list of horizontal pod autoscaler objects.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscalerList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerSpec\": {\n    \"description\": \"specification of a horizontal pod autoscaler.\",\n    \"required\": [\n     \"scaleTargetRef\",\n     \"maxReplicas\"\n    ],\n    \"properties\": {\n     \"maxReplicas\": {\n      \"description\": \"upper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"minReplicas\": {\n      \"description\": \"lower limit for the number of pods that can be set by the autoscaler, default 1.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"scaleTargetRef\": {\n      \"description\": \"reference to scaled resource; horizontal pod autoscaler will learn the current resource consumption and will set the desired number of pods by using its Scale subresource.\",\n      \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.CrossVersionObjectReference\"\n     },\n     \"targetCPUUtilizationPercentage\": {\n      \"description\": \"target average CPU utilization (represented as a percentage of requested CPU) over all the pods; if not specified the default autoscaling policy will be used.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerStatus\": {\n    \"description\": \"current status of a horizontal pod autoscaler\",\n    \"required\": [\n     \"currentReplicas\",\n     \"desiredReplicas\"\n    ],\n    \"properties\": {\n     \"currentCPUUtilizationPercentage\": {\n      \"description\": \"current average CPU utilization over all pods, represented as a percentage of requested CPU, e.g. 70 means that an average pod is using now 70% of its requested CPU.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"currentReplicas\": {\n      \"description\": \"current number of replicas of pods managed by this autoscaler.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"desiredReplicas\": {\n      \"description\": \"desired number of replicas of pods managed by this autoscaler.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"lastScaleTime\": {\n      \"description\": \"last time the HorizontalPodAutoscaler scaled the number of pods; used by the autoscaler to control how often the number of pods is changed.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"most recent generation observed by this autoscaler.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     }\n    }\n   },\n   \"io.k8s.api.autoscaling.v1.Scale\": {\n    \"description\": \"Scale represents a scaling request for a resource.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\",\n      \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.ScaleSpec\"\n     },\n     \"status\": {\n      \"description\": \"current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.\",\n      \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.ScaleStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"autoscaling\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.autoscaling.v1.ScaleSpec\": {\n    \"description\": \"ScaleSpec describes the attributes of a scale subresource.\",\n    \"properties\": {\n     \"replicas\": {\n      \"description\": \"desired number of instances for the scaled object.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.autoscaling.v1.ScaleStatus\": {\n    \"description\": \"ScaleStatus represents the current status of a scale subresource.\",\n    \"required\": [\n     \"replicas\"\n    ],\n    \"properties\": {\n     \"replicas\": {\n      \"description\": \"actual number of observed instances of the scaled object.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"label query over pods that should match the replicas count. This is same as the label selector but in the string format to avoid introspection by clients. The string will be in the same format as the query-param syntax. More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.autoscaling.v2beta1.CrossVersionObjectReference\": {\n    \"description\": \"CrossVersionObjectReference contains enough information to let you identify the referred resource.\",\n    \"required\": [\n     \"kind\",\n     \"name\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"API version of the referent\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\\\"\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.autoscaling.v2beta1.ExternalMetricSource\": {\n    \"description\": \"ExternalMetricSource indicates how to scale on a metric not associated with any Kubernetes object (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster). Exactly one \\\"target\\\" type should be set.\",\n    \"required\": [\n     \"metricName\"\n    ],\n    \"properties\": {\n     \"metricName\": {\n      \"description\": \"metricName is the name of the metric in question.\",\n      \"type\": \"string\"\n     },\n     \"metricSelector\": {\n      \"description\": \"metricSelector is used to identify a specific time series within a given metric.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"targetAverageValue\": {\n      \"description\": \"targetAverageValue is the target per-pod value of global metric (as a quantity). Mutually exclusive with TargetValue.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n     },\n     \"targetValue\": {\n      \"description\": \"targetValue is the target value of the metric (as a quantity). Mutually exclusive with TargetAverageValue.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n     }\n    }\n   },\n   \"io.k8s.api.autoscaling.v2beta1.ExternalMetricStatus\": {\n    \"description\": \"ExternalMetricStatus indicates the current value of a global metric not associated with any Kubernetes object.\",\n    \"required\": [\n     \"metricName\",\n     \"currentValue\"\n    ],\n    \"properties\": {\n     \"currentAverageValue\": {\n      \"description\": \"currentAverageValue is the current value of metric averaged over autoscaled pods.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n     },\n     \"currentValue\": {\n      \"description\": \"currentValue is the current value of the metric (as a quantity)\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n     },\n     \"metricName\": {\n      \"description\": \"metricName is the name of a metric used for autoscaling in metric system.\",\n      \"type\": \"string\"\n     },\n     \"metricSelector\": {\n      \"description\": \"metricSelector is used to identify a specific time series within a given metric.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     }\n    }\n   },\n   \"io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler\": {\n    \"description\": \"HorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\",\n      \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerSpec\"\n     },\n     \"status\": {\n      \"description\": \"status is the current information about the autoscaler.\",\n      \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscaler\",\n      \"version\": \"v2beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerCondition\": {\n    \"description\": \"HorizontalPodAutoscalerCondition describes the state of a HorizontalPodAutoscaler at a certain point.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"lastTransitionTime is the last time the condition transitioned from one status to another\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"message is a human-readable explanation containing details about the transition\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"reason is the reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"status is the status of the condition (True, False, Unknown)\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"type describes the current condition\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerList\": {\n    \"description\": \"HorizontalPodAutoscaler is a list of horizontal pod autoscaler objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"items is the list of horizontal pod autoscaler objects.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscaler\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"metadata is the standard list metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"autoscaling\",\n      \"kind\": \"HorizontalPodAutoscalerList\",\n      \"version\": \"v2beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerSpec\": {\n    \"description\": \"HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler.\",\n    \"required\": [\n     \"scaleTargetRef\",\n     \"maxReplicas\"\n    ],\n    \"properties\": {\n     \"maxReplicas\": {\n      \"description\": \"maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"metrics\": {\n      \"description\": \"metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used).  The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods.  Ergo, metrics used must decrease as the pod count is increased, and vice-versa.  See the individual metric source types for more information about how each type of metric must respond.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.MetricSpec\"\n      }\n     },\n     \"minReplicas\": {\n      \"description\": \"minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"scaleTargetRef\": {\n      \"description\": \"scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count.\",\n      \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.CrossVersionObjectReference\"\n     }\n    }\n   },\n   \"io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerStatus\": {\n    \"description\": \"HorizontalPodAutoscalerStatus describes the current status of a horizontal pod autoscaler.\",\n    \"required\": [\n     \"currentReplicas\",\n     \"desiredReplicas\",\n     \"currentMetrics\",\n     \"conditions\"\n    ],\n    \"properties\": {\n     \"conditions\": {\n      \"description\": \"conditions is the set of conditions required for this autoscaler to scale its target, and indicates whether or not those conditions are met.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerCondition\"\n      }\n     },\n     \"currentMetrics\": {\n      \"description\": \"currentMetrics is the last read state of the metrics used by this autoscaler.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.MetricStatus\"\n      }\n     },\n     \"currentReplicas\": {\n      \"description\": \"currentReplicas is current number of replicas of pods managed by this autoscaler, as last seen by the autoscaler.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"desiredReplicas\": {\n      \"description\": \"desiredReplicas is the desired number of replicas of pods managed by this autoscaler, as last calculated by the autoscaler.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"lastScaleTime\": {\n      \"description\": \"lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods, used by the autoscaler to control how often the number of pods is changed.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"observedGeneration is the most recent generation observed by this autoscaler.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     }\n    }\n   },\n   \"io.k8s.api.autoscaling.v2beta1.MetricSpec\": {\n    \"description\": \"MetricSpec specifies how to scale based on a single metric (only `type` and one other matching field should be set at once).\",\n    \"required\": [\n     \"type\"\n    ],\n    \"properties\": {\n     \"external\": {\n      \"description\": \"external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).\",\n      \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.ExternalMetricSource\"\n     },\n     \"object\": {\n      \"description\": \"object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).\",\n      \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.ObjectMetricSource\"\n     },\n     \"pods\": {\n      \"description\": \"pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second).  The values will be averaged together before being compared to the target value.\",\n      \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.PodsMetricSource\"\n     },\n     \"resource\": {\n      \"description\": \"resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \\\"pods\\\" source.\",\n      \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.ResourceMetricSource\"\n     },\n     \"type\": {\n      \"description\": \"type is the type of metric source.  It should be one of \\\"Object\\\", \\\"Pods\\\" or \\\"Resource\\\", each mapping to a matching field in the object.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.autoscaling.v2beta1.MetricStatus\": {\n    \"description\": \"MetricStatus describes the last-read state of a single metric.\",\n    \"required\": [\n     \"type\"\n    ],\n    \"properties\": {\n     \"external\": {\n      \"description\": \"external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).\",\n      \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.ExternalMetricStatus\"\n     },\n     \"object\": {\n      \"description\": \"object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).\",\n      \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.ObjectMetricStatus\"\n     },\n     \"pods\": {\n      \"description\": \"pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second).  The values will be averaged together before being compared to the target value.\",\n      \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.PodsMetricStatus\"\n     },\n     \"resource\": {\n      \"description\": \"resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \\\"pods\\\" source.\",\n      \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.ResourceMetricStatus\"\n     },\n     \"type\": {\n      \"description\": \"type is the type of metric source.  It will be one of \\\"Object\\\", \\\"Pods\\\" or \\\"Resource\\\", each corresponds to a matching field in the object.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.autoscaling.v2beta1.ObjectMetricSource\": {\n    \"description\": \"ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).\",\n    \"required\": [\n     \"target\",\n     \"metricName\",\n     \"targetValue\"\n    ],\n    \"properties\": {\n     \"metricName\": {\n      \"description\": \"metricName is the name of the metric in question.\",\n      \"type\": \"string\"\n     },\n     \"target\": {\n      \"description\": \"target is the described Kubernetes object.\",\n      \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.CrossVersionObjectReference\"\n     },\n     \"targetValue\": {\n      \"description\": \"targetValue is the target value of the metric (as a quantity).\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n     }\n    }\n   },\n   \"io.k8s.api.autoscaling.v2beta1.ObjectMetricStatus\": {\n    \"description\": \"ObjectMetricStatus indicates the current value of a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).\",\n    \"required\": [\n     \"target\",\n     \"metricName\",\n     \"currentValue\"\n    ],\n    \"properties\": {\n     \"currentValue\": {\n      \"description\": \"currentValue is the current value of the metric (as a quantity).\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n     },\n     \"metricName\": {\n      \"description\": \"metricName is the name of the metric in question.\",\n      \"type\": \"string\"\n     },\n     \"target\": {\n      \"description\": \"target is the described Kubernetes object.\",\n      \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v2beta1.CrossVersionObjectReference\"\n     }\n    }\n   },\n   \"io.k8s.api.autoscaling.v2beta1.PodsMetricSource\": {\n    \"description\": \"PodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.\",\n    \"required\": [\n     \"metricName\",\n     \"targetAverageValue\"\n    ],\n    \"properties\": {\n     \"metricName\": {\n      \"description\": \"metricName is the name of the metric in question\",\n      \"type\": \"string\"\n     },\n     \"targetAverageValue\": {\n      \"description\": \"targetAverageValue is the target value of the average of the metric across all relevant pods (as a quantity)\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n     }\n    }\n   },\n   \"io.k8s.api.autoscaling.v2beta1.PodsMetricStatus\": {\n    \"description\": \"PodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second).\",\n    \"required\": [\n     \"metricName\",\n     \"currentAverageValue\"\n    ],\n    \"properties\": {\n     \"currentAverageValue\": {\n      \"description\": \"currentAverageValue is the current value of the average of the metric across all relevant pods (as a quantity)\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n     },\n     \"metricName\": {\n      \"description\": \"metricName is the name of the metric in question\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.autoscaling.v2beta1.ResourceMetricSource\": {\n    \"description\": \"ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory).  The values will be averaged together before being compared to the target.  Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \\\"pods\\\" source.  Only one \\\"target\\\" type should be set.\",\n    \"required\": [\n     \"name\"\n    ],\n    \"properties\": {\n     \"name\": {\n      \"description\": \"name is the name of the resource in question.\",\n      \"type\": \"string\"\n     },\n     \"targetAverageUtilization\": {\n      \"description\": \"targetAverageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"targetAverageValue\": {\n      \"description\": \"targetAverageValue is the target value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \\\"pods\\\" metric source type.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n     }\n    }\n   },\n   \"io.k8s.api.autoscaling.v2beta1.ResourceMetricStatus\": {\n    \"description\": \"ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory).  Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \\\"pods\\\" source.\",\n    \"required\": [\n     \"name\",\n     \"currentAverageValue\"\n    ],\n    \"properties\": {\n     \"currentAverageUtilization\": {\n      \"description\": \"currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.  It will only be present if `targetAverageValue` was set in the corresponding metric specification.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"currentAverageValue\": {\n      \"description\": \"currentAverageValue is the current value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \\\"pods\\\" metric source type. It will always be set, regardless of the corresponding metric specification.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n     },\n     \"name\": {\n      \"description\": \"name is the name of the resource in question.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.batch.v1.Job\": {\n    \"description\": \"Job represents the configuration of a single job.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.batch.v1.JobSpec\"\n     },\n     \"status\": {\n      \"description\": \"Current status of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.batch.v1.JobStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"batch\",\n      \"kind\": \"Job\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.batch.v1.JobCondition\": {\n    \"description\": \"JobCondition describes current state of a job.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastProbeTime\": {\n      \"description\": \"Last time the condition was checked.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transit from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"Human readable message indicating details about last transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"(brief) reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of job condition, Complete or Failed.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.batch.v1.JobList\": {\n    \"description\": \"JobList is a collection of jobs.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"items is the list of Jobs.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.batch.v1.Job\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"batch\",\n      \"kind\": \"JobList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.batch.v1.JobSpec\": {\n    \"description\": \"JobSpec describes how the job execution will look like.\",\n    \"required\": [\n     \"template\"\n    ],\n    \"properties\": {\n     \"activeDeadlineSeconds\": {\n      \"description\": \"Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"backoffLimit\": {\n      \"description\": \"Specifies the number of retries before marking this job failed. Defaults to 6\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"completions\": {\n      \"description\": \"Specifies the desired number of successfully finished pods the job should be run with.  Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value.  Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"manualSelector\": {\n      \"description\": \"manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template.  When true, the user is responsible for picking unique labels and specifying the selector.  Failure to pick a unique label may cause this and other jobs to not function correctly.  However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector\",\n      \"type\": \"boolean\"\n     },\n     \"parallelism\": {\n      \"description\": \"Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) \\u003c .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"template\": {\n      \"description\": \"Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplateSpec\"\n     }\n    }\n   },\n   \"io.k8s.api.batch.v1.JobStatus\": {\n    \"description\": \"JobStatus represents the current state of a Job.\",\n    \"properties\": {\n     \"active\": {\n      \"description\": \"The number of actively running pods.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"completionTime\": {\n      \"description\": \"Represents time when the job was completed. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"conditions\": {\n      \"description\": \"The latest available observations of an object's current state. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.batch.v1.JobCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"failed\": {\n      \"description\": \"The number of pods which reached phase Failed.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"startTime\": {\n      \"description\": \"Represents time when the job was acknowledged by the job controller. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"succeeded\": {\n      \"description\": \"The number of pods which reached phase Succeeded.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.batch.v1beta1.CronJob\": {\n    \"description\": \"CronJob represents the configuration of a single cron job.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.batch.v1beta1.CronJobSpec\"\n     },\n     \"status\": {\n      \"description\": \"Current status of a cron job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.batch.v1beta1.CronJobStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.batch.v1beta1.CronJobList\": {\n    \"description\": \"CronJobList is a collection of cron jobs.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"items is the list of CronJobs.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.batch.v1beta1.CronJob\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"batch\",\n      \"kind\": \"CronJobList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.batch.v1beta1.CronJobSpec\": {\n    \"description\": \"CronJobSpec describes how the job execution will look like and when it will actually run.\",\n    \"required\": [\n     \"schedule\",\n     \"jobTemplate\"\n    ],\n    \"properties\": {\n     \"concurrencyPolicy\": {\n      \"description\": \"Specifies how to treat concurrent executions of a Job. Valid values are: - \\\"Allow\\\" (default): allows CronJobs to run concurrently; - \\\"Forbid\\\": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - \\\"Replace\\\": cancels currently running job and replaces it with a new one\",\n      \"type\": \"string\"\n     },\n     \"failedJobsHistoryLimit\": {\n      \"description\": \"The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"jobTemplate\": {\n      \"description\": \"Specifies the job that will be created when executing a CronJob.\",\n      \"$ref\": \"#/definitions/io.k8s.api.batch.v1beta1.JobTemplateSpec\"\n     },\n     \"schedule\": {\n      \"description\": \"The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.\",\n      \"type\": \"string\"\n     },\n     \"startingDeadlineSeconds\": {\n      \"description\": \"Optional deadline in seconds for starting the job if it misses scheduled time for any reason.  Missed jobs executions will be counted as failed ones.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"successfulJobsHistoryLimit\": {\n      \"description\": \"The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 3.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"suspend\": {\n      \"description\": \"This flag tells the controller to suspend subsequent executions, it does not apply to already started executions.  Defaults to false.\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.api.batch.v1beta1.CronJobStatus\": {\n    \"description\": \"CronJobStatus represents the current state of a cron job.\",\n    \"properties\": {\n     \"active\": {\n      \"description\": \"A list of pointers to currently running jobs.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.ObjectReference\"\n      }\n     },\n     \"lastScheduleTime\": {\n      \"description\": \"Information when was the last time the job was successfully scheduled.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     }\n    }\n   },\n   \"io.k8s.api.batch.v1beta1.JobTemplateSpec\": {\n    \"description\": \"JobTemplateSpec describes the data a Job should have when created from a template\",\n    \"properties\": {\n     \"metadata\": {\n      \"description\": \"Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.batch.v1.JobSpec\"\n     }\n    }\n   },\n   \"io.k8s.api.batch.v2alpha1.CronJob\": {\n    \"description\": \"CronJob represents the configuration of a single cron job.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJobSpec\"\n     },\n     \"status\": {\n      \"description\": \"Current status of a cron job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJobStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"batch\",\n      \"kind\": \"CronJob\",\n      \"version\": \"v2alpha1\"\n     }\n    ]\n   },\n   \"io.k8s.api.batch.v2alpha1.CronJobList\": {\n    \"description\": \"CronJobList is a collection of cron jobs.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"items is the list of CronJobs.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJob\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"batch\",\n      \"kind\": \"CronJobList\",\n      \"version\": \"v2alpha1\"\n     }\n    ]\n   },\n   \"io.k8s.api.batch.v2alpha1.CronJobSpec\": {\n    \"description\": \"CronJobSpec describes how the job execution will look like and when it will actually run.\",\n    \"required\": [\n     \"schedule\",\n     \"jobTemplate\"\n    ],\n    \"properties\": {\n     \"concurrencyPolicy\": {\n      \"description\": \"Specifies how to treat concurrent executions of a Job. Valid values are: - \\\"Allow\\\" (default): allows CronJobs to run concurrently; - \\\"Forbid\\\": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - \\\"Replace\\\": cancels currently running job and replaces it with a new one\",\n      \"type\": \"string\"\n     },\n     \"failedJobsHistoryLimit\": {\n      \"description\": \"The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"jobTemplate\": {\n      \"description\": \"Specifies the job that will be created when executing a CronJob.\",\n      \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.JobTemplateSpec\"\n     },\n     \"schedule\": {\n      \"description\": \"The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.\",\n      \"type\": \"string\"\n     },\n     \"startingDeadlineSeconds\": {\n      \"description\": \"Optional deadline in seconds for starting the job if it misses scheduled time for any reason.  Missed jobs executions will be counted as failed ones.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"successfulJobsHistoryLimit\": {\n      \"description\": \"The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"suspend\": {\n      \"description\": \"This flag tells the controller to suspend subsequent executions, it does not apply to already started executions.  Defaults to false.\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.api.batch.v2alpha1.CronJobStatus\": {\n    \"description\": \"CronJobStatus represents the current state of a cron job.\",\n    \"properties\": {\n     \"active\": {\n      \"description\": \"A list of pointers to currently running jobs.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.ObjectReference\"\n      }\n     },\n     \"lastScheduleTime\": {\n      \"description\": \"Information when was the last time the job was successfully scheduled.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     }\n    }\n   },\n   \"io.k8s.api.batch.v2alpha1.JobTemplateSpec\": {\n    \"description\": \"JobTemplateSpec describes the data a Job should have when created from a template\",\n    \"properties\": {\n     \"metadata\": {\n      \"description\": \"Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.batch.v1.JobSpec\"\n     }\n    }\n   },\n   \"io.k8s.api.certificates.v1beta1.CertificateSigningRequest\": {\n    \"description\": \"Describes a certificate signing request\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"The certificate request itself and any additional information.\",\n      \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestSpec\"\n     },\n     \"status\": {\n      \"description\": \"Derived information about the request.\",\n      \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"certificates.k8s.io\",\n      \"kind\": \"CertificateSigningRequest\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.certificates.v1beta1.CertificateSigningRequestCondition\": {\n    \"required\": [\n     \"type\"\n    ],\n    \"properties\": {\n     \"lastUpdateTime\": {\n      \"description\": \"timestamp for the last update to this condition\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"human readable message with details about the request state\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"brief reason for the request state\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"request approval state, currently Approved or Denied.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.certificates.v1beta1.CertificateSigningRequestList\": {\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"certificates.k8s.io\",\n      \"kind\": \"CertificateSigningRequestList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.certificates.v1beta1.CertificateSigningRequestSpec\": {\n    \"description\": \"This information is immutable after the request is created. Only the Request and Usages fields can be set on creation, other fields are derived by Kubernetes and cannot be modified by users.\",\n    \"required\": [\n     \"request\"\n    ],\n    \"properties\": {\n     \"extra\": {\n      \"description\": \"Extra information about the requesting user. See user.Info interface for details.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"array\",\n       \"items\": {\n        \"type\": \"string\"\n       }\n      }\n     },\n     \"groups\": {\n      \"description\": \"Group information about the requesting user. See user.Info interface for details.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"request\": {\n      \"description\": \"Base64-encoded PKCS#10 CSR data\",\n      \"type\": \"string\",\n      \"format\": \"byte\"\n     },\n     \"uid\": {\n      \"description\": \"UID information about the requesting user. See user.Info interface for details.\",\n      \"type\": \"string\"\n     },\n     \"usages\": {\n      \"description\": \"allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3\\n     https://tools.ietf.org/html/rfc5280#section-4.2.1.12\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"username\": {\n      \"description\": \"Information about the requesting user. See user.Info interface for details.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.certificates.v1beta1.CertificateSigningRequestStatus\": {\n    \"properties\": {\n     \"certificate\": {\n      \"description\": \"If request was approved, the controller will place the issued certificate here.\",\n      \"type\": \"string\",\n      \"format\": \"byte\"\n     },\n     \"conditions\": {\n      \"description\": \"Conditions applied to the request, such as approval or denial.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestCondition\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource\": {\n    \"description\": \"Represents a Persistent Disk resource in AWS.\\n\\nAn AWS EBS disk must exist before mounting to a container. The disk must also be in the same AWS zone as the kubelet. An AWS EBS disk can only be mounted as read/write once. AWS EBS volumes support ownership management and SELinux relabeling.\",\n    \"required\": [\n     \"volumeID\"\n    ],\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\",\n      \"type\": \"string\"\n     },\n     \"partition\": {\n      \"description\": \"The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \\\"1\\\". Similarly, the volume partition for /dev/sda is \\\"0\\\" (or you can leave the property empty).\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"readOnly\": {\n      \"description\": \"Specify \\\"true\\\" to force and set the ReadOnly property in VolumeMounts to \\\"true\\\". If omitted, the default is \\\"false\\\". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\",\n      \"type\": \"boolean\"\n     },\n     \"volumeID\": {\n      \"description\": \"Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.Affinity\": {\n    \"description\": \"Affinity is a group of affinity scheduling rules.\",\n    \"properties\": {\n     \"nodeAffinity\": {\n      \"description\": \"Describes node affinity scheduling rules for the pod.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeAffinity\"\n     },\n     \"podAffinity\": {\n      \"description\": \"Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodAffinity\"\n     },\n     \"podAntiAffinity\": {\n      \"description\": \"Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodAntiAffinity\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.AttachedVolume\": {\n    \"description\": \"AttachedVolume describes a volume attached to a node\",\n    \"required\": [\n     \"name\",\n     \"devicePath\"\n    ],\n    \"properties\": {\n     \"devicePath\": {\n      \"description\": \"DevicePath represents the device path where the volume should be available\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name of the attached volume\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.AzureDiskVolumeSource\": {\n    \"description\": \"AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.\",\n    \"required\": [\n     \"diskName\",\n     \"diskURI\"\n    ],\n    \"properties\": {\n     \"cachingMode\": {\n      \"description\": \"Host Caching mode: None, Read Only, Read Write.\",\n      \"type\": \"string\"\n     },\n     \"diskName\": {\n      \"description\": \"The Name of the data disk in the blob storage\",\n      \"type\": \"string\"\n     },\n     \"diskURI\": {\n      \"description\": \"The URI the data disk in the blob storage\",\n      \"type\": \"string\"\n     },\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified.\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Expected values Shared: multiple blob disks per storage account  Dedicated: single blob disk per storage account  Managed: azure managed data disk (only in managed availability set). defaults to shared\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.AzureFilePersistentVolumeSource\": {\n    \"description\": \"AzureFile represents an Azure File Service mount on the host and bind mount to the pod.\",\n    \"required\": [\n     \"secretName\",\n     \"shareName\"\n    ],\n    \"properties\": {\n     \"readOnly\": {\n      \"description\": \"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\",\n      \"type\": \"boolean\"\n     },\n     \"secretName\": {\n      \"description\": \"the name of secret that contains Azure Storage Account Name and Key\",\n      \"type\": \"string\"\n     },\n     \"secretNamespace\": {\n      \"description\": \"the namespace of the secret that contains Azure Storage Account Name and Key default is the same as the Pod\",\n      \"type\": \"string\"\n     },\n     \"shareName\": {\n      \"description\": \"Share Name\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.AzureFileVolumeSource\": {\n    \"description\": \"AzureFile represents an Azure File Service mount on the host and bind mount to the pod.\",\n    \"required\": [\n     \"secretName\",\n     \"shareName\"\n    ],\n    \"properties\": {\n     \"readOnly\": {\n      \"description\": \"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\",\n      \"type\": \"boolean\"\n     },\n     \"secretName\": {\n      \"description\": \"the name of secret that contains Azure Storage Account Name and Key\",\n      \"type\": \"string\"\n     },\n     \"shareName\": {\n      \"description\": \"Share Name\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.Binding\": {\n    \"description\": \"Binding ties one object to another; for example, a pod is bound to a node by a scheduler. Deprecated in 1.7, please use the bindings subresource of pods instead.\",\n    \"required\": [\n     \"target\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"target\": {\n      \"description\": \"The target object that you want to bind to the standard object.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ObjectReference\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"Binding\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.CSIPersistentVolumeSource\": {\n    \"description\": \"Represents storage that is managed by an external CSI volume driver (Beta feature)\",\n    \"required\": [\n     \"driver\",\n     \"volumeHandle\"\n    ],\n    \"properties\": {\n     \"controllerPublishSecretRef\": {\n      \"description\": \"ControllerPublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerPublishVolume and ControllerUnpublishVolume calls. This field is optional, and  may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecretReference\"\n     },\n     \"driver\": {\n      \"description\": \"Driver is the name of the driver to use for this volume. Required.\",\n      \"type\": \"string\"\n     },\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\".\",\n      \"type\": \"string\"\n     },\n     \"nodePublishSecretRef\": {\n      \"description\": \"NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and  may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecretReference\"\n     },\n     \"nodeStageSecretRef\": {\n      \"description\": \"NodeStageSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodeStageVolume and NodeStageVolume and NodeUnstageVolume calls. This field is optional, and  may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecretReference\"\n     },\n     \"readOnly\": {\n      \"description\": \"Optional: The value to pass to ControllerPublishVolumeRequest. Defaults to false (read/write).\",\n      \"type\": \"boolean\"\n     },\n     \"volumeAttributes\": {\n      \"description\": \"Attributes of the volume to publish.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"volumeHandle\": {\n      \"description\": \"VolumeHandle is the unique volume name returned by the CSI volume plugin’s CreateVolume to refer to the volume on all subsequent calls. Required.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.Capabilities\": {\n    \"description\": \"Adds and removes POSIX capabilities from running containers.\",\n    \"properties\": {\n     \"add\": {\n      \"description\": \"Added capabilities\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"drop\": {\n      \"description\": \"Removed capabilities\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.CephFSPersistentVolumeSource\": {\n    \"description\": \"Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.\",\n    \"required\": [\n     \"monitors\"\n    ],\n    \"properties\": {\n     \"monitors\": {\n      \"description\": \"Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"path\": {\n      \"description\": \"Optional: Used as the mounted root, rather than the full Ceph tree, default is /\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\",\n      \"type\": \"boolean\"\n     },\n     \"secretFile\": {\n      \"description\": \"Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\",\n      \"type\": \"string\"\n     },\n     \"secretRef\": {\n      \"description\": \"Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecretReference\"\n     },\n     \"user\": {\n      \"description\": \"Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.CephFSVolumeSource\": {\n    \"description\": \"Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.\",\n    \"required\": [\n     \"monitors\"\n    ],\n    \"properties\": {\n     \"monitors\": {\n      \"description\": \"Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"path\": {\n      \"description\": \"Optional: Used as the mounted root, rather than the full Ceph tree, default is /\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\",\n      \"type\": \"boolean\"\n     },\n     \"secretFile\": {\n      \"description\": \"Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\",\n      \"type\": \"string\"\n     },\n     \"secretRef\": {\n      \"description\": \"Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.LocalObjectReference\"\n     },\n     \"user\": {\n      \"description\": \"Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.CinderPersistentVolumeSource\": {\n    \"description\": \"Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.\",\n    \"required\": [\n     \"volumeID\"\n    ],\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\",\n      \"type\": \"boolean\"\n     },\n     \"secretRef\": {\n      \"description\": \"Optional: points to a secret object containing parameters used to connect to OpenStack.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecretReference\"\n     },\n     \"volumeID\": {\n      \"description\": \"volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.CinderVolumeSource\": {\n    \"description\": \"Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.\",\n    \"required\": [\n     \"volumeID\"\n    ],\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\",\n      \"type\": \"boolean\"\n     },\n     \"secretRef\": {\n      \"description\": \"Optional: points to a secret object containing parameters used to connect to OpenStack.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.LocalObjectReference\"\n     },\n     \"volumeID\": {\n      \"description\": \"volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ClientIPConfig\": {\n    \"description\": \"ClientIPConfig represents the configurations of Client IP based session affinity.\",\n    \"properties\": {\n     \"timeoutSeconds\": {\n      \"description\": \"timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be \\u003e0 \\u0026\\u0026 \\u003c=86400(for 1 day) if ServiceAffinity == \\\"ClientIP\\\". Default value is 10800(for 3 hours).\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ComponentCondition\": {\n    \"description\": \"Information about the condition of a component.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"error\": {\n      \"description\": \"Condition error code for a component. For example, a health check error code.\",\n      \"type\": \"string\"\n     },\n     \"message\": {\n      \"description\": \"Message about the condition for a component. For example, information about a health check.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition for a component. Valid values for \\\"Healthy\\\": \\\"True\\\", \\\"False\\\", or \\\"Unknown\\\".\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of condition for a component. Valid value: \\\"Healthy\\\"\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ComponentStatus\": {\n    \"description\": \"ComponentStatus (and ComponentStatusList) holds the cluster validation info.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"conditions\": {\n      \"description\": \"List of component conditions observed\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.ComponentCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"ComponentStatus\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.ComponentStatusList\": {\n    \"description\": \"Status of all the conditions for the component as a list of ComponentStatus objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of ComponentStatus objects.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.ComponentStatus\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"ComponentStatusList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.ConfigMap\": {\n    \"description\": \"ConfigMap holds configuration data for pods to consume.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"binaryData\": {\n      \"description\": \"BinaryData contains the binary data. Each key must consist of alphanumeric characters, '-', '_' or '.'. BinaryData can contain byte sequences that are not in the UTF-8 range. The keys stored in BinaryData must not overlap with the ones in the Data field, this is enforced during validation process. Using this field will require 1.10+ apiserver and kubelet.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\",\n       \"format\": \"byte\"\n      }\n     },\n     \"data\": {\n      \"description\": \"Data contains the configuration data. Each key must consist of alphanumeric characters, '-', '_' or '.'. Values with non-UTF-8 byte sequences must use the BinaryData field. The keys stored in Data must not overlap with the keys in the BinaryData field, this is enforced during validation process.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"ConfigMap\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.ConfigMapEnvSource\": {\n    \"description\": \"ConfigMapEnvSource selects a ConfigMap to populate the environment variables with.\\n\\nThe contents of the target ConfigMap's Data field will represent the key-value pairs as environment variables.\",\n    \"properties\": {\n     \"name\": {\n      \"description\": \"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\n      \"type\": \"string\"\n     },\n     \"optional\": {\n      \"description\": \"Specify whether the ConfigMap must be defined\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ConfigMapKeySelector\": {\n    \"description\": \"Selects a key from a ConfigMap.\",\n    \"required\": [\n     \"key\"\n    ],\n    \"properties\": {\n     \"key\": {\n      \"description\": \"The key to select.\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\n      \"type\": \"string\"\n     },\n     \"optional\": {\n      \"description\": \"Specify whether the ConfigMap or it's key must be defined\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ConfigMapList\": {\n    \"description\": \"ConfigMapList is a resource containing a list of ConfigMap objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of ConfigMaps.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMap\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"ConfigMapList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.ConfigMapNodeConfigSource\": {\n    \"description\": \"ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node.\",\n    \"required\": [\n     \"namespace\",\n     \"name\",\n     \"kubeletConfigKey\"\n    ],\n    \"properties\": {\n     \"kubeletConfigKey\": {\n      \"description\": \"KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure This field is required in all cases.\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name is the metadata.name of the referenced ConfigMap. This field is required in all cases.\",\n      \"type\": \"string\"\n     },\n     \"namespace\": {\n      \"description\": \"Namespace is the metadata.namespace of the referenced ConfigMap. This field is required in all cases.\",\n      \"type\": \"string\"\n     },\n     \"resourceVersion\": {\n      \"description\": \"ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\",\n      \"type\": \"string\"\n     },\n     \"uid\": {\n      \"description\": \"UID is the metadata.UID of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ConfigMapProjection\": {\n    \"description\": \"Adapts a ConfigMap into a projected volume.\\n\\nThe contents of the target ConfigMap's Data field will be presented in a projected volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. Note that this is identical to a configmap volume source without the default mode.\",\n    \"properties\": {\n     \"items\": {\n      \"description\": \"If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.KeyToPath\"\n      }\n     },\n     \"name\": {\n      \"description\": \"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\n      \"type\": \"string\"\n     },\n     \"optional\": {\n      \"description\": \"Specify whether the ConfigMap or it's keys must be defined\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ConfigMapVolumeSource\": {\n    \"description\": \"Adapts a ConfigMap into a volume.\\n\\nThe contents of the target ConfigMap's Data field will be presented in a volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. ConfigMap volumes support ownership management and SELinux relabeling.\",\n    \"properties\": {\n     \"defaultMode\": {\n      \"description\": \"Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"items\": {\n      \"description\": \"If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.KeyToPath\"\n      }\n     },\n     \"name\": {\n      \"description\": \"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\n      \"type\": \"string\"\n     },\n     \"optional\": {\n      \"description\": \"Specify whether the ConfigMap or it's keys must be defined\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.Container\": {\n    \"description\": \"A single application container that you want to run within a pod.\",\n    \"required\": [\n     \"name\"\n    ],\n    \"properties\": {\n     \"args\": {\n      \"description\": \"Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"command\": {\n      \"description\": \"Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"env\": {\n      \"description\": \"List of environment variables to set in the container. Cannot be updated.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.EnvVar\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"name\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"envFrom\": {\n      \"description\": \"List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.EnvFromSource\"\n      }\n     },\n     \"image\": {\n      \"description\": \"Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images This field is optional to allow higher level config management to default or override container images in workload controllers like Deployments and StatefulSets.\",\n      \"type\": \"string\"\n     },\n     \"imagePullPolicy\": {\n      \"description\": \"Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images\",\n      \"type\": \"string\"\n     },\n     \"lifecycle\": {\n      \"description\": \"Actions that the management system should take in response to container lifecycle events. Cannot be updated.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.Lifecycle\"\n     },\n     \"livenessProbe\": {\n      \"description\": \"Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.Probe\"\n     },\n     \"name\": {\n      \"description\": \"Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated.\",\n      \"type\": \"string\"\n     },\n     \"ports\": {\n      \"description\": \"List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default \\\"0.0.0.0\\\" address inside a container will be accessible from the network. Cannot be updated.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.ContainerPort\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"containerPort\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"readinessProbe\": {\n      \"description\": \"Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.Probe\"\n     },\n     \"resources\": {\n      \"description\": \"Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceRequirements\"\n     },\n     \"securityContext\": {\n      \"description\": \"Security options the pod should run with. More info: https://kubernetes.io/docs/concepts/policy/security-context/ More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecurityContext\"\n     },\n     \"stdin\": {\n      \"description\": \"Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false.\",\n      \"type\": \"boolean\"\n     },\n     \"stdinOnce\": {\n      \"description\": \"Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false\",\n      \"type\": \"boolean\"\n     },\n     \"terminationMessagePath\": {\n      \"description\": \"Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.\",\n      \"type\": \"string\"\n     },\n     \"terminationMessagePolicy\": {\n      \"description\": \"Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.\",\n      \"type\": \"string\"\n     },\n     \"tty\": {\n      \"description\": \"Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false.\",\n      \"type\": \"boolean\"\n     },\n     \"volumeDevices\": {\n      \"description\": \"volumeDevices is the list of block devices to be used by the container. This is an alpha feature and may change in the future.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.VolumeDevice\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"devicePath\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"volumeMounts\": {\n      \"description\": \"Pod volumes to mount into the container's filesystem. Cannot be updated.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.VolumeMount\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"mountPath\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"workingDir\": {\n      \"description\": \"Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image. Cannot be updated.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ContainerImage\": {\n    \"description\": \"Describe a container image\",\n    \"required\": [\n     \"names\"\n    ],\n    \"properties\": {\n     \"names\": {\n      \"description\": \"Names by which this image is known. e.g. [\\\"k8s.gcr.io/hyperkube:v1.0.7\\\", \\\"dockerhub.io/google_containers/hyperkube:v1.0.7\\\"]\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"sizeBytes\": {\n      \"description\": \"The size of the image in bytes.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ContainerPort\": {\n    \"description\": \"ContainerPort represents a network port in a single container.\",\n    \"required\": [\n     \"containerPort\"\n    ],\n    \"properties\": {\n     \"containerPort\": {\n      \"description\": \"Number of port to expose on the pod's IP address. This must be a valid port number, 0 \\u003c x \\u003c 65536.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"hostIP\": {\n      \"description\": \"What host IP to bind the external port to.\",\n      \"type\": \"string\"\n     },\n     \"hostPort\": {\n      \"description\": \"Number of port to expose on the host. If specified, this must be a valid port number, 0 \\u003c x \\u003c 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"name\": {\n      \"description\": \"If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.\",\n      \"type\": \"string\"\n     },\n     \"protocol\": {\n      \"description\": \"Protocol for port. Must be UDP or TCP. Defaults to \\\"TCP\\\".\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ContainerState\": {\n    \"description\": \"ContainerState holds a possible state of container. Only one of its members may be specified. If none of them is specified, the default one is ContainerStateWaiting.\",\n    \"properties\": {\n     \"running\": {\n      \"description\": \"Details about a running container\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ContainerStateRunning\"\n     },\n     \"terminated\": {\n      \"description\": \"Details about a terminated container\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ContainerStateTerminated\"\n     },\n     \"waiting\": {\n      \"description\": \"Details about a waiting container\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ContainerStateWaiting\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ContainerStateRunning\": {\n    \"description\": \"ContainerStateRunning is a running state of a container.\",\n    \"properties\": {\n     \"startedAt\": {\n      \"description\": \"Time at which the container was last (re-)started\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ContainerStateTerminated\": {\n    \"description\": \"ContainerStateTerminated is a terminated state of a container.\",\n    \"required\": [\n     \"exitCode\"\n    ],\n    \"properties\": {\n     \"containerID\": {\n      \"description\": \"Container's ID in the format 'docker://\\u003ccontainer_id\\u003e'\",\n      \"type\": \"string\"\n     },\n     \"exitCode\": {\n      \"description\": \"Exit status from the last termination of the container\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"finishedAt\": {\n      \"description\": \"Time at which the container last terminated\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"Message regarding the last termination of the container\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"(brief) reason from the last termination of the container\",\n      \"type\": \"string\"\n     },\n     \"signal\": {\n      \"description\": \"Signal from the last termination of the container\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"startedAt\": {\n      \"description\": \"Time at which previous execution of the container started\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ContainerStateWaiting\": {\n    \"description\": \"ContainerStateWaiting is a waiting state of a container.\",\n    \"properties\": {\n     \"message\": {\n      \"description\": \"Message regarding why the container is not yet running.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"(brief) reason the container is not yet running.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ContainerStatus\": {\n    \"description\": \"ContainerStatus contains details for the current status of this container.\",\n    \"required\": [\n     \"name\",\n     \"ready\",\n     \"restartCount\",\n     \"image\",\n     \"imageID\"\n    ],\n    \"properties\": {\n     \"containerID\": {\n      \"description\": \"Container's ID in the format 'docker://\\u003ccontainer_id\\u003e'.\",\n      \"type\": \"string\"\n     },\n     \"image\": {\n      \"description\": \"The image the container is running. More info: https://kubernetes.io/docs/concepts/containers/images\",\n      \"type\": \"string\"\n     },\n     \"imageID\": {\n      \"description\": \"ImageID of the container's image.\",\n      \"type\": \"string\"\n     },\n     \"lastState\": {\n      \"description\": \"Details about the container's last termination condition.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ContainerState\"\n     },\n     \"name\": {\n      \"description\": \"This must be a DNS_LABEL. Each container in a pod must have a unique name. Cannot be updated.\",\n      \"type\": \"string\"\n     },\n     \"ready\": {\n      \"description\": \"Specifies whether the container has passed its readiness probe.\",\n      \"type\": \"boolean\"\n     },\n     \"restartCount\": {\n      \"description\": \"The number of times the container has been restarted, currently based on the number of dead containers that have not yet been removed. Note that this is calculated from dead containers. But those containers are subject to garbage collection. This value will get capped at 5 by GC.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"state\": {\n      \"description\": \"Details about the container's current condition.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ContainerState\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.DaemonEndpoint\": {\n    \"description\": \"DaemonEndpoint contains information about a single Daemon endpoint.\",\n    \"required\": [\n     \"Port\"\n    ],\n    \"properties\": {\n     \"Port\": {\n      \"description\": \"Port number of the given endpoint.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.DownwardAPIProjection\": {\n    \"description\": \"Represents downward API info for projecting into a projected volume. Note that this is identical to a downwardAPI volume source without the default mode.\",\n    \"properties\": {\n     \"items\": {\n      \"description\": \"Items is a list of DownwardAPIVolume file\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeFile\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.DownwardAPIVolumeFile\": {\n    \"description\": \"DownwardAPIVolumeFile represents information to create the file containing the pod field\",\n    \"required\": [\n     \"path\"\n    ],\n    \"properties\": {\n     \"fieldRef\": {\n      \"description\": \"Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ObjectFieldSelector\"\n     },\n     \"mode\": {\n      \"description\": \"Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"path\": {\n      \"description\": \"Required: Path is  the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'\",\n      \"type\": \"string\"\n     },\n     \"resourceFieldRef\": {\n      \"description\": \"Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceFieldSelector\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.DownwardAPIVolumeSource\": {\n    \"description\": \"DownwardAPIVolumeSource represents a volume containing downward API info. Downward API volumes support ownership management and SELinux relabeling.\",\n    \"properties\": {\n     \"defaultMode\": {\n      \"description\": \"Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of downward API volume file\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeFile\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.EmptyDirVolumeSource\": {\n    \"description\": \"Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.\",\n    \"properties\": {\n     \"medium\": {\n      \"description\": \"What type of storage medium should back this directory. The default is \\\"\\\" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir\",\n      \"type\": \"string\"\n     },\n     \"sizeLimit\": {\n      \"description\": \"Total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.EndpointAddress\": {\n    \"description\": \"EndpointAddress is a tuple that describes single IP address.\",\n    \"required\": [\n     \"ip\"\n    ],\n    \"properties\": {\n     \"hostname\": {\n      \"description\": \"The Hostname of this endpoint\",\n      \"type\": \"string\"\n     },\n     \"ip\": {\n      \"description\": \"The IP of this endpoint. May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16), or link-local multicast ((224.0.0.0/24). IPv6 is also accepted but not fully supported on all platforms. Also, certain kubernetes components, like kube-proxy, are not IPv6 ready.\",\n      \"type\": \"string\"\n     },\n     \"nodeName\": {\n      \"description\": \"Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node.\",\n      \"type\": \"string\"\n     },\n     \"targetRef\": {\n      \"description\": \"Reference to object providing the endpoint.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ObjectReference\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.EndpointPort\": {\n    \"description\": \"EndpointPort is a tuple that describes a single port.\",\n    \"required\": [\n     \"port\"\n    ],\n    \"properties\": {\n     \"name\": {\n      \"description\": \"The name of this port (corresponds to ServicePort.Name). Must be a DNS_LABEL. Optional only if one port is defined.\",\n      \"type\": \"string\"\n     },\n     \"port\": {\n      \"description\": \"The port number of the endpoint.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"protocol\": {\n      \"description\": \"The IP protocol for this port. Must be UDP or TCP. Default is TCP.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.EndpointSubset\": {\n    \"description\": \"EndpointSubset is a group of addresses with a common set of ports. The expanded set of endpoints is the Cartesian product of Addresses x Ports. For example, given:\\n  {\\n    Addresses: [{\\\"ip\\\": \\\"10.10.1.1\\\"}, {\\\"ip\\\": \\\"10.10.2.2\\\"}],\\n    Ports:     [{\\\"name\\\": \\\"a\\\", \\\"port\\\": 8675}, {\\\"name\\\": \\\"b\\\", \\\"port\\\": 309}]\\n  }\\nThe resulting set of endpoints can be viewed as:\\n    a: [ 10.10.1.1:8675, 10.10.2.2:8675 ],\\n    b: [ 10.10.1.1:309, 10.10.2.2:309 ]\",\n    \"properties\": {\n     \"addresses\": {\n      \"description\": \"IP addresses which offer the related ports that are marked as ready. These endpoints should be considered safe for load balancers and clients to utilize.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.EndpointAddress\"\n      }\n     },\n     \"notReadyAddresses\": {\n      \"description\": \"IP addresses which offer the related ports but are not currently marked as ready because they have not yet finished starting, have recently failed a readiness check, or have recently failed a liveness check.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.EndpointAddress\"\n      }\n     },\n     \"ports\": {\n      \"description\": \"Port numbers available on the related IP addresses.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.EndpointPort\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.Endpoints\": {\n    \"description\": \"Endpoints is a collection of endpoints that implement the actual service. Example:\\n  Name: \\\"mysvc\\\",\\n  Subsets: [\\n    {\\n      Addresses: [{\\\"ip\\\": \\\"10.10.1.1\\\"}, {\\\"ip\\\": \\\"10.10.2.2\\\"}],\\n      Ports: [{\\\"name\\\": \\\"a\\\", \\\"port\\\": 8675}, {\\\"name\\\": \\\"b\\\", \\\"port\\\": 309}]\\n    },\\n    {\\n      Addresses: [{\\\"ip\\\": \\\"10.10.3.3\\\"}],\\n      Ports: [{\\\"name\\\": \\\"a\\\", \\\"port\\\": 93}, {\\\"name\\\": \\\"b\\\", \\\"port\\\": 76}]\\n    },\\n ]\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"subsets\": {\n      \"description\": \"The set of all endpoints is the union of all subsets. Addresses are placed into subsets according to the IPs they share. A single address with multiple ports, some of which are ready and some of which are not (because they come from different containers) will result in the address being displayed in different subsets for the different ports. No address will appear in both Addresses and NotReadyAddresses in the same subset. Sets of addresses and ports that comprise a service.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.EndpointSubset\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"Endpoints\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.EndpointsList\": {\n    \"description\": \"EndpointsList is a list of endpoints.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of endpoints.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.Endpoints\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"EndpointsList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.EnvFromSource\": {\n    \"description\": \"EnvFromSource represents the source of a set of ConfigMaps\",\n    \"properties\": {\n     \"configMapRef\": {\n      \"description\": \"The ConfigMap to select from\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMapEnvSource\"\n     },\n     \"prefix\": {\n      \"description\": \"An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.\",\n      \"type\": \"string\"\n     },\n     \"secretRef\": {\n      \"description\": \"The Secret to select from\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecretEnvSource\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.EnvVar\": {\n    \"description\": \"EnvVar represents an environment variable present in a Container.\",\n    \"required\": [\n     \"name\"\n    ],\n    \"properties\": {\n     \"name\": {\n      \"description\": \"Name of the environment variable. Must be a C_IDENTIFIER.\",\n      \"type\": \"string\"\n     },\n     \"value\": {\n      \"description\": \"Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to \\\"\\\".\",\n      \"type\": \"string\"\n     },\n     \"valueFrom\": {\n      \"description\": \"Source for the environment variable's value. Cannot be used if value is not empty.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.EnvVarSource\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.EnvVarSource\": {\n    \"description\": \"EnvVarSource represents a source for the value of an EnvVar.\",\n    \"properties\": {\n     \"configMapKeyRef\": {\n      \"description\": \"Selects a key of a ConfigMap.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMapKeySelector\"\n     },\n     \"fieldRef\": {\n      \"description\": \"Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ObjectFieldSelector\"\n     },\n     \"resourceFieldRef\": {\n      \"description\": \"Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceFieldSelector\"\n     },\n     \"secretKeyRef\": {\n      \"description\": \"Selects a key of a secret in the pod's namespace\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecretKeySelector\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.Event\": {\n    \"description\": \"Event is a report of an event somewhere in the cluster.\",\n    \"required\": [\n     \"metadata\",\n     \"involvedObject\"\n    ],\n    \"properties\": {\n     \"action\": {\n      \"description\": \"What action was taken/failed regarding to the Regarding object.\",\n      \"type\": \"string\"\n     },\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"count\": {\n      \"description\": \"The number of times this event has occurred.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"eventTime\": {\n      \"description\": \"Time when this Event was first observed.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime\"\n     },\n     \"firstTimestamp\": {\n      \"description\": \"The time at which the event was first recorded. (Time of server receipt is in TypeMeta.)\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"involvedObject\": {\n      \"description\": \"The object that this event is about.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ObjectReference\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"lastTimestamp\": {\n      \"description\": \"The time at which the most recent occurrence of this event was recorded.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"A human-readable description of the status of this operation.\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"reason\": {\n      \"description\": \"This should be a short, machine understandable string that gives the reason for the transition into the object's current status.\",\n      \"type\": \"string\"\n     },\n     \"related\": {\n      \"description\": \"Optional secondary object for more complex actions.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ObjectReference\"\n     },\n     \"reportingComponent\": {\n      \"description\": \"Name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`.\",\n      \"type\": \"string\"\n     },\n     \"reportingInstance\": {\n      \"description\": \"ID of the controller instance, e.g. `kubelet-xyzf`.\",\n      \"type\": \"string\"\n     },\n     \"series\": {\n      \"description\": \"Data about the Event series this event represents or nil if it's a singleton Event.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.EventSeries\"\n     },\n     \"source\": {\n      \"description\": \"The component reporting this event. Should be a short machine understandable string.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.EventSource\"\n     },\n     \"type\": {\n      \"description\": \"Type of this event (Normal, Warning), new types could be added in the future\",\n      \"type\": \"string\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"Event\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.EventList\": {\n    \"description\": \"EventList is a list of events.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of events\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.Event\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"EventList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.EventSeries\": {\n    \"description\": \"EventSeries contain information on series of events, i.e. thing that was/is happening continuously for some time.\",\n    \"properties\": {\n     \"count\": {\n      \"description\": \"Number of occurrences in this series up to the last heartbeat time\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"lastObservedTime\": {\n      \"description\": \"Time of the last occurrence observed\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime\"\n     },\n     \"state\": {\n      \"description\": \"State of this Series: Ongoing or Finished\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.EventSource\": {\n    \"description\": \"EventSource contains information for an event.\",\n    \"properties\": {\n     \"component\": {\n      \"description\": \"Component from which the event is generated.\",\n      \"type\": \"string\"\n     },\n     \"host\": {\n      \"description\": \"Node name on which the event is generated.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ExecAction\": {\n    \"description\": \"ExecAction describes a \\\"run in container\\\" action.\",\n    \"properties\": {\n     \"command\": {\n      \"description\": \"Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.FCVolumeSource\": {\n    \"description\": \"Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.\",\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified.\",\n      \"type\": \"string\"\n     },\n     \"lun\": {\n      \"description\": \"Optional: FC target lun number\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"readOnly\": {\n      \"description\": \"Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\",\n      \"type\": \"boolean\"\n     },\n     \"targetWWNs\": {\n      \"description\": \"Optional: FC target worldwide names (WWNs)\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"wwids\": {\n      \"description\": \"Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.FlexPersistentVolumeSource\": {\n    \"description\": \"FlexPersistentVolumeSource represents a generic persistent volume resource that is provisioned/attached using an exec based plugin.\",\n    \"required\": [\n     \"driver\"\n    ],\n    \"properties\": {\n     \"driver\": {\n      \"description\": \"Driver is the name of the driver to use for this volume.\",\n      \"type\": \"string\"\n     },\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". The default filesystem depends on FlexVolume script.\",\n      \"type\": \"string\"\n     },\n     \"options\": {\n      \"description\": \"Optional: Extra command options if any.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"readOnly\": {\n      \"description\": \"Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\",\n      \"type\": \"boolean\"\n     },\n     \"secretRef\": {\n      \"description\": \"Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecretReference\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.FlexVolumeSource\": {\n    \"description\": \"FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.\",\n    \"required\": [\n     \"driver\"\n    ],\n    \"properties\": {\n     \"driver\": {\n      \"description\": \"Driver is the name of the driver to use for this volume.\",\n      \"type\": \"string\"\n     },\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". The default filesystem depends on FlexVolume script.\",\n      \"type\": \"string\"\n     },\n     \"options\": {\n      \"description\": \"Optional: Extra command options if any.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"readOnly\": {\n      \"description\": \"Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\",\n      \"type\": \"boolean\"\n     },\n     \"secretRef\": {\n      \"description\": \"Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.LocalObjectReference\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.FlockerVolumeSource\": {\n    \"description\": \"Represents a Flocker volume mounted by the Flocker agent. One and only one of datasetName and datasetUUID should be set. Flocker volumes do not support ownership management or SELinux relabeling.\",\n    \"properties\": {\n     \"datasetName\": {\n      \"description\": \"Name of the dataset stored as metadata -\\u003e name on the dataset for Flocker should be considered as deprecated\",\n      \"type\": \"string\"\n     },\n     \"datasetUUID\": {\n      \"description\": \"UUID of the dataset. This is unique identifier of a Flocker dataset\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.GCEPersistentDiskVolumeSource\": {\n    \"description\": \"Represents a Persistent Disk resource in Google Compute Engine.\\n\\nA GCE PD must exist before mounting to a container. The disk must also be in the same GCE project and zone as the kubelet. A GCE PD can only be mounted as read/write once or read-only many times. GCE PDs support ownership management and SELinux relabeling.\",\n    \"required\": [\n     \"pdName\"\n    ],\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\",\n      \"type\": \"string\"\n     },\n     \"partition\": {\n      \"description\": \"The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \\\"1\\\". Similarly, the volume partition for /dev/sda is \\\"0\\\" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"pdName\": {\n      \"description\": \"Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.GitRepoVolumeSource\": {\n    \"description\": \"Represents a volume that is populated with the contents of a git repository. Git repo volumes do not support ownership management. Git repo volumes support SELinux relabeling.\\n\\nDEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container.\",\n    \"required\": [\n     \"repository\"\n    ],\n    \"properties\": {\n     \"directory\": {\n      \"description\": \"Target directory name. Must not contain or start with '..'.  If '.' is supplied, the volume directory will be the git repository.  Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name.\",\n      \"type\": \"string\"\n     },\n     \"repository\": {\n      \"description\": \"Repository URL\",\n      \"type\": \"string\"\n     },\n     \"revision\": {\n      \"description\": \"Commit hash for the specified revision.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.GlusterfsVolumeSource\": {\n    \"description\": \"Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.\",\n    \"required\": [\n     \"endpoints\",\n     \"path\"\n    ],\n    \"properties\": {\n     \"endpoints\": {\n      \"description\": \"EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\",\n      \"type\": \"string\"\n     },\n     \"path\": {\n      \"description\": \"Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.HTTPGetAction\": {\n    \"description\": \"HTTPGetAction describes an action based on HTTP Get requests.\",\n    \"required\": [\n     \"port\"\n    ],\n    \"properties\": {\n     \"host\": {\n      \"description\": \"Host name to connect to, defaults to the pod IP. You probably want to set \\\"Host\\\" in httpHeaders instead.\",\n      \"type\": \"string\"\n     },\n     \"httpHeaders\": {\n      \"description\": \"Custom headers to set in the request. HTTP allows repeated headers.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.HTTPHeader\"\n      }\n     },\n     \"path\": {\n      \"description\": \"Path to access on the HTTP server.\",\n      \"type\": \"string\"\n     },\n     \"port\": {\n      \"description\": \"Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     },\n     \"scheme\": {\n      \"description\": \"Scheme to use for connecting to the host. Defaults to HTTP.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.HTTPHeader\": {\n    \"description\": \"HTTPHeader describes a custom header to be used in HTTP probes\",\n    \"required\": [\n     \"name\",\n     \"value\"\n    ],\n    \"properties\": {\n     \"name\": {\n      \"description\": \"The header field name\",\n      \"type\": \"string\"\n     },\n     \"value\": {\n      \"description\": \"The header field value\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.Handler\": {\n    \"description\": \"Handler defines a specific action that should be taken\",\n    \"properties\": {\n     \"exec\": {\n      \"description\": \"One and only one of the following should be specified. Exec specifies the action to take.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ExecAction\"\n     },\n     \"httpGet\": {\n      \"description\": \"HTTPGet specifies the http request to perform.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.HTTPGetAction\"\n     },\n     \"tcpSocket\": {\n      \"description\": \"TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.TCPSocketAction\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.HostAlias\": {\n    \"description\": \"HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod's hosts file.\",\n    \"properties\": {\n     \"hostnames\": {\n      \"description\": \"Hostnames for the above IP address.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"ip\": {\n      \"description\": \"IP address of the host file entry.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.HostPathVolumeSource\": {\n    \"description\": \"Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.\",\n    \"required\": [\n     \"path\"\n    ],\n    \"properties\": {\n     \"path\": {\n      \"description\": \"Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type for HostPath Volume Defaults to \\\"\\\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ISCSIPersistentVolumeSource\": {\n    \"description\": \"ISCSIPersistentVolumeSource represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.\",\n    \"required\": [\n     \"targetPortal\",\n     \"iqn\",\n     \"lun\"\n    ],\n    \"properties\": {\n     \"chapAuthDiscovery\": {\n      \"description\": \"whether support iSCSI Discovery CHAP authentication\",\n      \"type\": \"boolean\"\n     },\n     \"chapAuthSession\": {\n      \"description\": \"whether support iSCSI Session CHAP authentication\",\n      \"type\": \"boolean\"\n     },\n     \"fsType\": {\n      \"description\": \"Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi\",\n      \"type\": \"string\"\n     },\n     \"initiatorName\": {\n      \"description\": \"Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface \\u003ctarget portal\\u003e:\\u003cvolume name\\u003e will be created for the connection.\",\n      \"type\": \"string\"\n     },\n     \"iqn\": {\n      \"description\": \"Target iSCSI Qualified Name.\",\n      \"type\": \"string\"\n     },\n     \"iscsiInterface\": {\n      \"description\": \"iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).\",\n      \"type\": \"string\"\n     },\n     \"lun\": {\n      \"description\": \"iSCSI Target Lun number.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"portals\": {\n      \"description\": \"iSCSI Target Portal List. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"readOnly\": {\n      \"description\": \"ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.\",\n      \"type\": \"boolean\"\n     },\n     \"secretRef\": {\n      \"description\": \"CHAP Secret for iSCSI target and initiator authentication\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecretReference\"\n     },\n     \"targetPortal\": {\n      \"description\": \"iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ISCSIVolumeSource\": {\n    \"description\": \"Represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.\",\n    \"required\": [\n     \"targetPortal\",\n     \"iqn\",\n     \"lun\"\n    ],\n    \"properties\": {\n     \"chapAuthDiscovery\": {\n      \"description\": \"whether support iSCSI Discovery CHAP authentication\",\n      \"type\": \"boolean\"\n     },\n     \"chapAuthSession\": {\n      \"description\": \"whether support iSCSI Session CHAP authentication\",\n      \"type\": \"boolean\"\n     },\n     \"fsType\": {\n      \"description\": \"Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi\",\n      \"type\": \"string\"\n     },\n     \"initiatorName\": {\n      \"description\": \"Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface \\u003ctarget portal\\u003e:\\u003cvolume name\\u003e will be created for the connection.\",\n      \"type\": \"string\"\n     },\n     \"iqn\": {\n      \"description\": \"Target iSCSI Qualified Name.\",\n      \"type\": \"string\"\n     },\n     \"iscsiInterface\": {\n      \"description\": \"iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).\",\n      \"type\": \"string\"\n     },\n     \"lun\": {\n      \"description\": \"iSCSI Target Lun number.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"portals\": {\n      \"description\": \"iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"readOnly\": {\n      \"description\": \"ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.\",\n      \"type\": \"boolean\"\n     },\n     \"secretRef\": {\n      \"description\": \"CHAP Secret for iSCSI target and initiator authentication\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.LocalObjectReference\"\n     },\n     \"targetPortal\": {\n      \"description\": \"iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.KeyToPath\": {\n    \"description\": \"Maps a string key to a path within a volume.\",\n    \"required\": [\n     \"key\",\n     \"path\"\n    ],\n    \"properties\": {\n     \"key\": {\n      \"description\": \"The key to project.\",\n      \"type\": \"string\"\n     },\n     \"mode\": {\n      \"description\": \"Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"path\": {\n      \"description\": \"The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.Lifecycle\": {\n    \"description\": \"Lifecycle describes actions that the management system should take in response to container lifecycle events. For the PostStart and PreStop lifecycle handlers, management of the container blocks until the action is complete, unless the container process fails, in which case the handler is aborted.\",\n    \"properties\": {\n     \"postStart\": {\n      \"description\": \"PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.Handler\"\n     },\n     \"preStop\": {\n      \"description\": \"PreStop is called immediately before a container is terminated. The container is terminated after the handler completes. The reason for termination is passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.Handler\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.LimitRange\": {\n    \"description\": \"LimitRange sets resource usage limits for each kind of resource in a Namespace.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the limits enforced. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.LimitRangeSpec\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"LimitRange\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.LimitRangeItem\": {\n    \"description\": \"LimitRangeItem defines a min/max usage limit for any resource that matches on kind.\",\n    \"properties\": {\n     \"default\": {\n      \"description\": \"Default resource requirement limit value by resource name if resource limit is omitted.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"defaultRequest\": {\n      \"description\": \"DefaultRequest is the default resource requirement request value by resource name if resource request is omitted.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"max\": {\n      \"description\": \"Max usage constraints on this kind by resource name.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"maxLimitRequestRatio\": {\n      \"description\": \"MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"min\": {\n      \"description\": \"Min usage constraints on this kind by resource name.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"type\": {\n      \"description\": \"Type of resource that this limit applies to.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.LimitRangeList\": {\n    \"description\": \"LimitRangeList is a list of LimitRange items.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of LimitRange objects. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.LimitRange\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"LimitRangeList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.LimitRangeSpec\": {\n    \"description\": \"LimitRangeSpec defines a min/max usage limit for resources that match on kind.\",\n    \"required\": [\n     \"limits\"\n    ],\n    \"properties\": {\n     \"limits\": {\n      \"description\": \"Limits is the list of LimitRangeItem objects that are enforced.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.LimitRangeItem\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.LoadBalancerIngress\": {\n    \"description\": \"LoadBalancerIngress represents the status of a load-balancer ingress point: traffic intended for the service should be sent to an ingress point.\",\n    \"properties\": {\n     \"hostname\": {\n      \"description\": \"Hostname is set for load-balancer ingress points that are DNS based (typically AWS load-balancers)\",\n      \"type\": \"string\"\n     },\n     \"ip\": {\n      \"description\": \"IP is set for load-balancer ingress points that are IP based (typically GCE or OpenStack load-balancers)\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.LoadBalancerStatus\": {\n    \"description\": \"LoadBalancerStatus represents the status of a load-balancer.\",\n    \"properties\": {\n     \"ingress\": {\n      \"description\": \"Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.LoadBalancerIngress\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.LocalObjectReference\": {\n    \"description\": \"LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.\",\n    \"properties\": {\n     \"name\": {\n      \"description\": \"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.LocalVolumeSource\": {\n    \"description\": \"Local represents directly-attached storage with node affinity (Beta feature)\",\n    \"required\": [\n     \"path\"\n    ],\n    \"properties\": {\n     \"path\": {\n      \"description\": \"The full path to the volume on the node. It can be either a directory or block device (disk, partition, ...). Directories can be represented only by PersistentVolume with VolumeMode=Filesystem. Block devices can be represented only by VolumeMode=Block, which also requires the BlockVolume alpha feature gate to be enabled.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.NFSVolumeSource\": {\n    \"description\": \"Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling.\",\n    \"required\": [\n     \"server\",\n     \"path\"\n    ],\n    \"properties\": {\n     \"path\": {\n      \"description\": \"Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\",\n      \"type\": \"boolean\"\n     },\n     \"server\": {\n      \"description\": \"Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.Namespace\": {\n    \"description\": \"Namespace provides a scope for Names. Use of multiple namespaces is optional.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the behavior of the Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.NamespaceSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status describes the current status of a Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.NamespaceStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"Namespace\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.NamespaceList\": {\n    \"description\": \"NamespaceList is a list of Namespaces.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of Namespace objects in the list. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.Namespace\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"NamespaceList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.NamespaceSpec\": {\n    \"description\": \"NamespaceSpec describes the attributes on a Namespace.\",\n    \"properties\": {\n     \"finalizers\": {\n      \"description\": \"Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.NamespaceStatus\": {\n    \"description\": \"NamespaceStatus is information about the current status of a Namespace.\",\n    \"properties\": {\n     \"phase\": {\n      \"description\": \"Phase is the current lifecycle phase of the namespace. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.Node\": {\n    \"description\": \"Node is a worker node in Kubernetes. Each node will have a unique identifier in the cache (i.e. in etcd).\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the behavior of a node. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeSpec\"\n     },\n     \"status\": {\n      \"description\": \"Most recently observed status of the node. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"Node\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.NodeAddress\": {\n    \"description\": \"NodeAddress contains information for the node's address.\",\n    \"required\": [\n     \"type\",\n     \"address\"\n    ],\n    \"properties\": {\n     \"address\": {\n      \"description\": \"The node address.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Node address type, one of Hostname, ExternalIP or InternalIP.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.NodeAffinity\": {\n    \"description\": \"Node affinity is a group of node affinity scheduling rules.\",\n    \"properties\": {\n     \"preferredDuringSchedulingIgnoredDuringExecution\": {\n      \"description\": \"The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \\\"weight\\\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.PreferredSchedulingTerm\"\n      }\n     },\n     \"requiredDuringSchedulingIgnoredDuringExecution\": {\n      \"description\": \"If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeSelector\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.NodeCondition\": {\n    \"description\": \"NodeCondition contains condition information for a node.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastHeartbeatTime\": {\n      \"description\": \"Last time we got an update on a given condition.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transit from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"Human readable message indicating details about last transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"(brief) reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of node condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.NodeConfigSource\": {\n    \"description\": \"NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil.\",\n    \"properties\": {\n     \"configMap\": {\n      \"description\": \"ConfigMap is a reference to a Node's ConfigMap\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMapNodeConfigSource\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.NodeConfigStatus\": {\n    \"description\": \"NodeConfigStatus describes the status of the config assigned by Node.Spec.ConfigSource.\",\n    \"properties\": {\n     \"active\": {\n      \"description\": \"Active reports the checkpointed config the node is actively using. Active will represent either the current version of the Assigned config, or the current LastKnownGood config, depending on whether attempting to use the Assigned config results in an error.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeConfigSource\"\n     },\n     \"assigned\": {\n      \"description\": \"Assigned reports the checkpointed config the node will try to use. When Node.Spec.ConfigSource is updated, the node checkpoints the associated config payload to local disk, along with a record indicating intended config. The node refers to this record to choose its config checkpoint, and reports this record in Assigned. Assigned only updates in the status after the record has been checkpointed to disk. When the Kubelet is restarted, it tries to make the Assigned config the Active config by loading and validating the checkpointed payload identified by Assigned.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeConfigSource\"\n     },\n     \"error\": {\n      \"description\": \"Error describes any problems reconciling the Spec.ConfigSource to the Active config. Errors may occur, for example, attempting to checkpoint Spec.ConfigSource to the local Assigned record, attempting to checkpoint the payload associated with Spec.ConfigSource, attempting to load or validate the Assigned config, etc. Errors may occur at different points while syncing config. Earlier errors (e.g. download or checkpointing errors) will not result in a rollback to LastKnownGood, and may resolve across Kubelet retries. Later errors (e.g. loading or validating a checkpointed config) will result in a rollback to LastKnownGood. In the latter case, it is usually possible to resolve the error by fixing the config assigned in Spec.ConfigSource. You can find additional information for debugging by searching the error message in the Kubelet log. Error is a human-readable description of the error state; machines can check whether or not Error is empty, but should not rely on the stability of the Error text across Kubelet versions.\",\n      \"type\": \"string\"\n     },\n     \"lastKnownGood\": {\n      \"description\": \"LastKnownGood reports the checkpointed config the node will fall back to when it encounters an error attempting to use the Assigned config. The Assigned config becomes the LastKnownGood config when the node determines that the Assigned config is stable and correct. This is currently implemented as a 10-minute soak period starting when the local record of Assigned config is updated. If the Assigned config is Active at the end of this period, it becomes the LastKnownGood. Note that if Spec.ConfigSource is reset to nil (use local defaults), the LastKnownGood is also immediately reset to nil, because the local default config is always assumed good. You should not make assumptions about the node's method of determining config stability and correctness, as this may change or become configurable in the future.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeConfigSource\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.NodeDaemonEndpoints\": {\n    \"description\": \"NodeDaemonEndpoints lists ports opened by daemons running on the Node.\",\n    \"properties\": {\n     \"kubeletEndpoint\": {\n      \"description\": \"Endpoint on which Kubelet is listening.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.DaemonEndpoint\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.NodeList\": {\n    \"description\": \"NodeList is the whole list of all Nodes which have been registered with master.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of nodes\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.Node\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"NodeList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.NodeSelector\": {\n    \"description\": \"A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.\",\n    \"required\": [\n     \"nodeSelectorTerms\"\n    ],\n    \"properties\": {\n     \"nodeSelectorTerms\": {\n      \"description\": \"Required. A list of node selector terms. The terms are ORed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeSelectorTerm\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.NodeSelectorRequirement\": {\n    \"description\": \"A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.\",\n    \"required\": [\n     \"key\",\n     \"operator\"\n    ],\n    \"properties\": {\n     \"key\": {\n      \"description\": \"The label key that the selector applies to.\",\n      \"type\": \"string\"\n     },\n     \"operator\": {\n      \"description\": \"Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.\",\n      \"type\": \"string\"\n     },\n     \"values\": {\n      \"description\": \"An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.NodeSelectorTerm\": {\n    \"description\": \"A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.\",\n    \"properties\": {\n     \"matchExpressions\": {\n      \"description\": \"A list of node selector requirements by node's labels.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeSelectorRequirement\"\n      }\n     },\n     \"matchFields\": {\n      \"description\": \"A list of node selector requirements by node's fields.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeSelectorRequirement\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.NodeSpec\": {\n    \"description\": \"NodeSpec describes the attributes that a node is created with.\",\n    \"properties\": {\n     \"configSource\": {\n      \"description\": \"If specified, the source to get node configuration from The DynamicKubeletConfig feature gate must be enabled for the Kubelet to use this field\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeConfigSource\"\n     },\n     \"externalID\": {\n      \"description\": \"Deprecated. Not all kubelets will set this field. Remove field after 1.13. see: https://issues.k8s.io/61966\",\n      \"type\": \"string\"\n     },\n     \"podCIDR\": {\n      \"description\": \"PodCIDR represents the pod IP range assigned to the node.\",\n      \"type\": \"string\"\n     },\n     \"providerID\": {\n      \"description\": \"ID of the node assigned by the cloud provider in the format: \\u003cProviderName\\u003e://\\u003cProviderSpecificNodeID\\u003e\",\n      \"type\": \"string\"\n     },\n     \"taints\": {\n      \"description\": \"If specified, the node's taints.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.Taint\"\n      }\n     },\n     \"unschedulable\": {\n      \"description\": \"Unschedulable controls node schedulability of new pods. By default, node is schedulable. More info: https://kubernetes.io/docs/concepts/nodes/node/#manual-node-administration\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.NodeStatus\": {\n    \"description\": \"NodeStatus is information about the current status of a node.\",\n    \"properties\": {\n     \"addresses\": {\n      \"description\": \"List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeAddress\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"allocatable\": {\n      \"description\": \"Allocatable represents the resources of a node that are available for scheduling. Defaults to Capacity.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"capacity\": {\n      \"description\": \"Capacity represents the total resources of a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"conditions\": {\n      \"description\": \"Conditions is an array of current observed node conditions. More info: https://kubernetes.io/docs/concepts/nodes/node/#condition\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"config\": {\n      \"description\": \"Status of the config assigned to the node via the dynamic Kubelet config feature.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeConfigStatus\"\n     },\n     \"daemonEndpoints\": {\n      \"description\": \"Endpoints of daemons running on the Node.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeDaemonEndpoints\"\n     },\n     \"images\": {\n      \"description\": \"List of container images on this node\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.ContainerImage\"\n      }\n     },\n     \"nodeInfo\": {\n      \"description\": \"Set of ids/uuids to uniquely identify the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#info\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeSystemInfo\"\n     },\n     \"phase\": {\n      \"description\": \"NodePhase is the recently observed lifecycle phase of the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#phase The field is never populated, and now is deprecated.\",\n      \"type\": \"string\"\n     },\n     \"volumesAttached\": {\n      \"description\": \"List of volumes that are attached to the node.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.AttachedVolume\"\n      }\n     },\n     \"volumesInUse\": {\n      \"description\": \"List of attachable volumes in use (mounted) by the node.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.NodeSystemInfo\": {\n    \"description\": \"NodeSystemInfo is a set of ids/uuids to uniquely identify the node.\",\n    \"required\": [\n     \"machineID\",\n     \"systemUUID\",\n     \"bootID\",\n     \"kernelVersion\",\n     \"osImage\",\n     \"containerRuntimeVersion\",\n     \"kubeletVersion\",\n     \"kubeProxyVersion\",\n     \"operatingSystem\",\n     \"architecture\"\n    ],\n    \"properties\": {\n     \"architecture\": {\n      \"description\": \"The Architecture reported by the node\",\n      \"type\": \"string\"\n     },\n     \"bootID\": {\n      \"description\": \"Boot ID reported by the node.\",\n      \"type\": \"string\"\n     },\n     \"containerRuntimeVersion\": {\n      \"description\": \"ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0).\",\n      \"type\": \"string\"\n     },\n     \"kernelVersion\": {\n      \"description\": \"Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64).\",\n      \"type\": \"string\"\n     },\n     \"kubeProxyVersion\": {\n      \"description\": \"KubeProxy Version reported by the node.\",\n      \"type\": \"string\"\n     },\n     \"kubeletVersion\": {\n      \"description\": \"Kubelet Version reported by the node.\",\n      \"type\": \"string\"\n     },\n     \"machineID\": {\n      \"description\": \"MachineID reported by the node. For unique machine identification in the cluster this field is preferred. Learn more from man(5) machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html\",\n      \"type\": \"string\"\n     },\n     \"operatingSystem\": {\n      \"description\": \"The Operating System reported by the node\",\n      \"type\": \"string\"\n     },\n     \"osImage\": {\n      \"description\": \"OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)).\",\n      \"type\": \"string\"\n     },\n     \"systemUUID\": {\n      \"description\": \"SystemUUID reported by the node. For unique machine identification MachineID is preferred. This field is specific to Red Hat hosts https://access.redhat.com/documentation/en-US/Red_Hat_Subscription_Management/1/html/RHSM/getting-system-uuid.html\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ObjectFieldSelector\": {\n    \"description\": \"ObjectFieldSelector selects an APIVersioned field of an object.\",\n    \"required\": [\n     \"fieldPath\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"Version of the schema the FieldPath is written in terms of, defaults to \\\"v1\\\".\",\n      \"type\": \"string\"\n     },\n     \"fieldPath\": {\n      \"description\": \"Path of the field to select in the specified API version.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ObjectReference\": {\n    \"description\": \"ObjectReference contains enough information to let you inspect or modify the referred object.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"API version of the referent.\",\n      \"type\": \"string\"\n     },\n     \"fieldPath\": {\n      \"description\": \"If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \\\"spec.containers{name}\\\" (where \\\"name\\\" refers to the name of the container that triggered the event) or if no container name is specified \\\"spec.containers[2]\\\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\n      \"type\": \"string\"\n     },\n     \"namespace\": {\n      \"description\": \"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\",\n      \"type\": \"string\"\n     },\n     \"resourceVersion\": {\n      \"description\": \"Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\",\n      \"type\": \"string\"\n     },\n     \"uid\": {\n      \"description\": \"UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.PersistentVolume\": {\n    \"description\": \"PersistentVolume (PV) is a storage resource provisioned by an administrator. It is analogous to a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines a specification of a persistent volume owned by the cluster. Provisioned by an administrator. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status represents the current information/status for the persistent volume. Populated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolume\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.PersistentVolumeClaim\": {\n    \"description\": \"PersistentVolumeClaim is a user's request for and claim to a persistent volume\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the desired characteristics of a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status represents the current information/status of a persistent volume claim. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolumeClaim\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.PersistentVolumeClaimCondition\": {\n    \"description\": \"PersistentVolumeClaimCondition contails details about state of pvc\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastProbeTime\": {\n      \"description\": \"Last time we probed the condition.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"Human-readable message indicating details about last transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"Unique, this should be a short, machine understandable string that gives the reason for condition's last transition. If it reports \\\"ResizeStarted\\\" that means the underlying persistent volume is being resized.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.PersistentVolumeClaimList\": {\n    \"description\": \"PersistentVolumeClaimList is a list of PersistentVolumeClaim items.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"A list of persistent volume claims. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolumeClaimList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.PersistentVolumeClaimSpec\": {\n    \"description\": \"PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes\",\n    \"properties\": {\n     \"accessModes\": {\n      \"description\": \"AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"resources\": {\n      \"description\": \"Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceRequirements\"\n     },\n     \"selector\": {\n      \"description\": \"A label query over volumes to consider for binding.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"storageClassName\": {\n      \"description\": \"Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1\",\n      \"type\": \"string\"\n     },\n     \"volumeMode\": {\n      \"description\": \"volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec. This is an alpha feature and may change in the future.\",\n      \"type\": \"string\"\n     },\n     \"volumeName\": {\n      \"description\": \"VolumeName is the binding reference to the PersistentVolume backing this claim.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.PersistentVolumeClaimStatus\": {\n    \"description\": \"PersistentVolumeClaimStatus is the current status of a persistent volume claim.\",\n    \"properties\": {\n     \"accessModes\": {\n      \"description\": \"AccessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"capacity\": {\n      \"description\": \"Represents the actual resources of the underlying volume.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"conditions\": {\n      \"description\": \"Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"phase\": {\n      \"description\": \"Phase represents the current phase of PersistentVolumeClaim.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.PersistentVolumeClaimVolumeSource\": {\n    \"description\": \"PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. This volume finds the bound PV and mounts that volume for the pod. A PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another type of volume that is owned by someone else (the system).\",\n    \"required\": [\n     \"claimName\"\n    ],\n    \"properties\": {\n     \"claimName\": {\n      \"description\": \"ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"Will force the ReadOnly setting in VolumeMounts. Default false.\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.PersistentVolumeList\": {\n    \"description\": \"PersistentVolumeList is a list of PersistentVolume items.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of persistent volumes. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolume\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"PersistentVolumeList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.PersistentVolumeSpec\": {\n    \"description\": \"PersistentVolumeSpec is the specification of a persistent volume.\",\n    \"properties\": {\n     \"accessModes\": {\n      \"description\": \"AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"awsElasticBlockStore\": {\n      \"description\": \"AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource\"\n     },\n     \"azureDisk\": {\n      \"description\": \"AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.AzureDiskVolumeSource\"\n     },\n     \"azureFile\": {\n      \"description\": \"AzureFile represents an Azure File Service mount on the host and bind mount to the pod.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.AzureFilePersistentVolumeSource\"\n     },\n     \"capacity\": {\n      \"description\": \"A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"cephfs\": {\n      \"description\": \"CephFS represents a Ceph FS mount on the host that shares a pod's lifetime\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.CephFSPersistentVolumeSource\"\n     },\n     \"cinder\": {\n      \"description\": \"Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.CinderPersistentVolumeSource\"\n     },\n     \"claimRef\": {\n      \"description\": \"ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ObjectReference\"\n     },\n     \"csi\": {\n      \"description\": \"CSI represents storage that handled by an external CSI driver (Beta feature).\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.CSIPersistentVolumeSource\"\n     },\n     \"fc\": {\n      \"description\": \"FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.FCVolumeSource\"\n     },\n     \"flexVolume\": {\n      \"description\": \"FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.FlexPersistentVolumeSource\"\n     },\n     \"flocker\": {\n      \"description\": \"Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.FlockerVolumeSource\"\n     },\n     \"gcePersistentDisk\": {\n      \"description\": \"GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.GCEPersistentDiskVolumeSource\"\n     },\n     \"glusterfs\": {\n      \"description\": \"Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.GlusterfsVolumeSource\"\n     },\n     \"hostPath\": {\n      \"description\": \"HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.HostPathVolumeSource\"\n     },\n     \"iscsi\": {\n      \"description\": \"ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ISCSIPersistentVolumeSource\"\n     },\n     \"local\": {\n      \"description\": \"Local represents directly-attached storage with node affinity\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.LocalVolumeSource\"\n     },\n     \"mountOptions\": {\n      \"description\": \"A list of mount options, e.g. [\\\"ro\\\", \\\"soft\\\"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"nfs\": {\n      \"description\": \"NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.NFSVolumeSource\"\n     },\n     \"nodeAffinity\": {\n      \"description\": \"NodeAffinity defines constraints that limit what nodes this volume can be accessed from. This field influences the scheduling of pods that use this volume.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.VolumeNodeAffinity\"\n     },\n     \"persistentVolumeReclaimPolicy\": {\n      \"description\": \"What happens to a persistent volume when released from its claim. Valid options are Retain (default for manually created PersistentVolumes), Delete (default for dynamically provisioned PersistentVolumes), and Recycle (deprecated). Recycle must be supported by the volume plugin underlying this PersistentVolume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming\",\n      \"type\": \"string\"\n     },\n     \"photonPersistentDisk\": {\n      \"description\": \"PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource\"\n     },\n     \"portworxVolume\": {\n      \"description\": \"PortworxVolume represents a portworx volume attached and mounted on kubelets host machine\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PortworxVolumeSource\"\n     },\n     \"quobyte\": {\n      \"description\": \"Quobyte represents a Quobyte mount on the host that shares a pod's lifetime\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.QuobyteVolumeSource\"\n     },\n     \"rbd\": {\n      \"description\": \"RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.RBDPersistentVolumeSource\"\n     },\n     \"scaleIO\": {\n      \"description\": \"ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ScaleIOPersistentVolumeSource\"\n     },\n     \"storageClassName\": {\n      \"description\": \"Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.\",\n      \"type\": \"string\"\n     },\n     \"storageos\": {\n      \"description\": \"StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.StorageOSPersistentVolumeSource\"\n     },\n     \"volumeMode\": {\n      \"description\": \"volumeMode defines if a volume is intended to be used with a formatted filesystem or to remain in raw block state. Value of Filesystem is implied when not included in spec. This is an alpha feature and may change in the future.\",\n      \"type\": \"string\"\n     },\n     \"vsphereVolume\": {\n      \"description\": \"VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.PersistentVolumeStatus\": {\n    \"description\": \"PersistentVolumeStatus is the current status of a persistent volume.\",\n    \"properties\": {\n     \"message\": {\n      \"description\": \"A human-readable message indicating details about why the volume is in this state.\",\n      \"type\": \"string\"\n     },\n     \"phase\": {\n      \"description\": \"Phase indicates if a volume is available, bound to a claim, or released by a claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource\": {\n    \"description\": \"Represents a Photon Controller persistent disk resource.\",\n    \"required\": [\n     \"pdID\"\n    ],\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified.\",\n      \"type\": \"string\"\n     },\n     \"pdID\": {\n      \"description\": \"ID that identifies Photon Controller persistent disk\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.Pod\": {\n    \"description\": \"Pod is a collection of containers that can run on a host. This resource is created by clients and scheduled onto hosts.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodSpec\"\n     },\n     \"status\": {\n      \"description\": \"Most recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"Pod\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.PodAffinity\": {\n    \"description\": \"Pod affinity is a group of inter pod affinity scheduling rules.\",\n    \"properties\": {\n     \"preferredDuringSchedulingIgnoredDuringExecution\": {\n      \"description\": \"The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \\\"weight\\\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.WeightedPodAffinityTerm\"\n      }\n     },\n     \"requiredDuringSchedulingIgnoredDuringExecution\": {\n      \"description\": \"If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodAffinityTerm\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.PodAffinityTerm\": {\n    \"description\": \"Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \\u003ctopologyKey\\u003e matches that of any node on which a pod of the set of pods is running\",\n    \"required\": [\n     \"topologyKey\"\n    ],\n    \"properties\": {\n     \"labelSelector\": {\n      \"description\": \"A label query over a set of resources, in this case pods.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"namespaces\": {\n      \"description\": \"namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \\\"this pod's namespace\\\"\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"topologyKey\": {\n      \"description\": \"This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.PodAntiAffinity\": {\n    \"description\": \"Pod anti affinity is a group of inter pod anti affinity scheduling rules.\",\n    \"properties\": {\n     \"preferredDuringSchedulingIgnoredDuringExecution\": {\n      \"description\": \"The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \\\"weight\\\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.WeightedPodAffinityTerm\"\n      }\n     },\n     \"requiredDuringSchedulingIgnoredDuringExecution\": {\n      \"description\": \"If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodAffinityTerm\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.PodCondition\": {\n    \"description\": \"PodCondition contains details for the current condition of this pod.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastProbeTime\": {\n      \"description\": \"Last time we probed the condition.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"Human-readable message indicating details about last transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"Unique, one-word, CamelCase reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status is the status of the condition. Can be True, False, Unknown. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type is the type of the condition. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.PodDNSConfig\": {\n    \"description\": \"PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.\",\n    \"properties\": {\n     \"nameservers\": {\n      \"description\": \"A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"options\": {\n      \"description\": \"A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodDNSConfigOption\"\n      }\n     },\n     \"searches\": {\n      \"description\": \"A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.PodDNSConfigOption\": {\n    \"description\": \"PodDNSConfigOption defines DNS resolver options of a pod.\",\n    \"properties\": {\n     \"name\": {\n      \"description\": \"Required.\",\n      \"type\": \"string\"\n     },\n     \"value\": {\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.PodList\": {\n    \"description\": \"PodList is a list of Pods.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of pods. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.Pod\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"PodList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.PodReadinessGate\": {\n    \"description\": \"PodReadinessGate contains the reference to a pod condition\",\n    \"required\": [\n     \"conditionType\"\n    ],\n    \"properties\": {\n     \"conditionType\": {\n      \"description\": \"ConditionType refers to a condition in the pod's condition list with matching type.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.PodSecurityContext\": {\n    \"description\": \"PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext.  Field values of container.securityContext take precedence over field values of PodSecurityContext.\",\n    \"properties\": {\n     \"fsGroup\": {\n      \"description\": \"A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\\n\\n1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\\n\\nIf unset, the Kubelet will not modify the ownership and permissions of any volume.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"runAsGroup\": {\n      \"description\": \"The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"runAsNonRoot\": {\n      \"description\": \"Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\",\n      \"type\": \"boolean\"\n     },\n     \"runAsUser\": {\n      \"description\": \"The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"seLinuxOptions\": {\n      \"description\": \"The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.SELinuxOptions\"\n     },\n     \"supplementalGroups\": {\n      \"description\": \"A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"integer\",\n       \"format\": \"int64\"\n      }\n     },\n     \"sysctls\": {\n      \"description\": \"Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.Sysctl\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.PodSpec\": {\n    \"description\": \"PodSpec is a description of a pod.\",\n    \"required\": [\n     \"containers\"\n    ],\n    \"properties\": {\n     \"activeDeadlineSeconds\": {\n      \"description\": \"Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"affinity\": {\n      \"description\": \"If specified, the pod's scheduling constraints\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.Affinity\"\n     },\n     \"automountServiceAccountToken\": {\n      \"description\": \"AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\",\n      \"type\": \"boolean\"\n     },\n     \"containers\": {\n      \"description\": \"List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.Container\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"name\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"dnsConfig\": {\n      \"description\": \"Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodDNSConfig\"\n     },\n     \"dnsPolicy\": {\n      \"description\": \"Set DNS policy for the pod. Defaults to \\\"ClusterFirst\\\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\",\n      \"type\": \"string\"\n     },\n     \"hostAliases\": {\n      \"description\": \"HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.HostAlias\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"ip\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"hostIPC\": {\n      \"description\": \"Use the host's ipc namespace. Optional: Default to false.\",\n      \"type\": \"boolean\"\n     },\n     \"hostNetwork\": {\n      \"description\": \"Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\",\n      \"type\": \"boolean\"\n     },\n     \"hostPID\": {\n      \"description\": \"Use the host's pid namespace. Optional: Default to false.\",\n      \"type\": \"boolean\"\n     },\n     \"hostname\": {\n      \"description\": \"Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\",\n      \"type\": \"string\"\n     },\n     \"imagePullSecrets\": {\n      \"description\": \"ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.LocalObjectReference\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"name\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"initContainers\": {\n      \"description\": \"List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.Container\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"name\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"nodeName\": {\n      \"description\": \"NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\",\n      \"type\": \"string\"\n     },\n     \"nodeSelector\": {\n      \"description\": \"NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"priority\": {\n      \"description\": \"The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"priorityClassName\": {\n      \"description\": \"If specified, indicates the pod's priority. \\\"system-node-critical\\\" and \\\"system-cluster-critical\\\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.\",\n      \"type\": \"string\"\n     },\n     \"readinessGates\": {\n      \"description\": \"If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \\\"True\\\" More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodReadinessGate\"\n      }\n     },\n     \"restartPolicy\": {\n      \"description\": \"Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\",\n      \"type\": \"string\"\n     },\n     \"schedulerName\": {\n      \"description\": \"If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\",\n      \"type\": \"string\"\n     },\n     \"securityContext\": {\n      \"description\": \"SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodSecurityContext\"\n     },\n     \"serviceAccount\": {\n      \"description\": \"DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\",\n      \"type\": \"string\"\n     },\n     \"serviceAccountName\": {\n      \"description\": \"ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\",\n      \"type\": \"string\"\n     },\n     \"shareProcessNamespace\": {\n      \"description\": \"Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is alpha-level and is honored only by servers that enable the PodShareProcessNamespace feature.\",\n      \"type\": \"boolean\"\n     },\n     \"subdomain\": {\n      \"description\": \"If specified, the fully qualified Pod hostname will be \\\"\\u003chostname\\u003e.\\u003csubdomain\\u003e.\\u003cpod namespace\\u003e.svc.\\u003ccluster domain\\u003e\\\". If not specified, the pod will not have a domainname at all.\",\n      \"type\": \"string\"\n     },\n     \"terminationGracePeriodSeconds\": {\n      \"description\": \"Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"tolerations\": {\n      \"description\": \"If specified, the pod's tolerations.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.Toleration\"\n      }\n     },\n     \"volumes\": {\n      \"description\": \"List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.Volume\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"name\",\n      \"x-kubernetes-patch-strategy\": \"merge,retainKeys\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.PodStatus\": {\n    \"description\": \"PodStatus represents information about the status of a pod. Status may trail the actual state of a system, especially if the node that hosts the pod cannot contact the control plane.\",\n    \"properties\": {\n     \"conditions\": {\n      \"description\": \"Current service state of pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"containerStatuses\": {\n      \"description\": \"The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.ContainerStatus\"\n      }\n     },\n     \"hostIP\": {\n      \"description\": \"IP address of the host to which the pod is assigned. Empty if not yet scheduled.\",\n      \"type\": \"string\"\n     },\n     \"initContainerStatuses\": {\n      \"description\": \"The list has one entry per init container in the manifest. The most recent successful init container will have ready = true, the most recently started container will have startTime set. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.ContainerStatus\"\n      }\n     },\n     \"message\": {\n      \"description\": \"A human readable message indicating details about why the pod is in this condition.\",\n      \"type\": \"string\"\n     },\n     \"nominatedNodeName\": {\n      \"description\": \"nominatedNodeName is set only when this pod preempts other pods on the node, but it cannot be scheduled right away as preemption victims receive their graceful termination periods. This field does not guarantee that the pod will be scheduled on this node. Scheduler may decide to place the pod elsewhere if other nodes become available sooner. Scheduler may also decide to give the resources on this node to a higher priority pod that is created after preemption. As a result, this field may be different than PodSpec.nodeName when the pod is scheduled.\",\n      \"type\": \"string\"\n     },\n     \"phase\": {\n      \"description\": \"The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle. The conditions array, the reason and message fields, and the individual container status arrays contain more detail about the pod's status. There are five possible phase values:\\n\\nPending: The pod has been accepted by the Kubernetes system, but one or more of the container images has not been created. This includes time before being scheduled as well as time spent downloading images over the network, which could take a while. Running: The pod has been bound to a node, and all of the containers have been created. At least one container is still running, or is in the process of starting or restarting. Succeeded: All containers in the pod have terminated in success, and will not be restarted. Failed: All containers in the pod have terminated, and at least one container has terminated in failure. The container either exited with non-zero status or was terminated by the system. Unknown: For some reason the state of the pod could not be obtained, typically due to an error in communicating with the host of the pod.\\n\\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase\",\n      \"type\": \"string\"\n     },\n     \"podIP\": {\n      \"description\": \"IP address allocated to the pod. Routable at least within the cluster. Empty if not yet allocated.\",\n      \"type\": \"string\"\n     },\n     \"qosClass\": {\n      \"description\": \"The Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"A brief CamelCase message indicating details about why the pod is in this state. e.g. 'Evicted'\",\n      \"type\": \"string\"\n     },\n     \"startTime\": {\n      \"description\": \"RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.PodTemplate\": {\n    \"description\": \"PodTemplate describes a template for creating copies of a predefined pod.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"template\": {\n      \"description\": \"Template defines the pods that will be created from this pod template. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplateSpec\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"PodTemplate\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.PodTemplateList\": {\n    \"description\": \"PodTemplateList is a list of PodTemplates.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of pod templates\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplate\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"PodTemplateList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.PodTemplateSpec\": {\n    \"description\": \"PodTemplateSpec describes the data a pod should have when created from a template\",\n    \"properties\": {\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodSpec\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.PortworxVolumeSource\": {\n    \"description\": \"PortworxVolumeSource represents a Portworx volume resource.\",\n    \"required\": [\n     \"volumeID\"\n    ],\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \\\"ext4\\\", \\\"xfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified.\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\",\n      \"type\": \"boolean\"\n     },\n     \"volumeID\": {\n      \"description\": \"VolumeID uniquely identifies a Portworx volume\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.PreferredSchedulingTerm\": {\n    \"description\": \"An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).\",\n    \"required\": [\n     \"weight\",\n     \"preference\"\n    ],\n    \"properties\": {\n     \"preference\": {\n      \"description\": \"A node selector term, associated with the corresponding weight.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeSelectorTerm\"\n     },\n     \"weight\": {\n      \"description\": \"Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.Probe\": {\n    \"description\": \"Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.\",\n    \"properties\": {\n     \"exec\": {\n      \"description\": \"One and only one of the following should be specified. Exec specifies the action to take.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ExecAction\"\n     },\n     \"failureThreshold\": {\n      \"description\": \"Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"httpGet\": {\n      \"description\": \"HTTPGet specifies the http request to perform.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.HTTPGetAction\"\n     },\n     \"initialDelaySeconds\": {\n      \"description\": \"Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"periodSeconds\": {\n      \"description\": \"How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"successThreshold\": {\n      \"description\": \"Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"tcpSocket\": {\n      \"description\": \"TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.TCPSocketAction\"\n     },\n     \"timeoutSeconds\": {\n      \"description\": \"Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ProjectedVolumeSource\": {\n    \"description\": \"Represents a projected volume source\",\n    \"required\": [\n     \"sources\"\n    ],\n    \"properties\": {\n     \"defaultMode\": {\n      \"description\": \"Mode bits to use on created files by default. Must be a value between 0 and 0777. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"sources\": {\n      \"description\": \"list of volume projections\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.VolumeProjection\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.QuobyteVolumeSource\": {\n    \"description\": \"Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling.\",\n    \"required\": [\n     \"registry\",\n     \"volume\"\n    ],\n    \"properties\": {\n     \"group\": {\n      \"description\": \"Group to map volume access to Default is no group\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.\",\n      \"type\": \"boolean\"\n     },\n     \"registry\": {\n      \"description\": \"Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes\",\n      \"type\": \"string\"\n     },\n     \"user\": {\n      \"description\": \"User to map volume access to Defaults to serivceaccount user\",\n      \"type\": \"string\"\n     },\n     \"volume\": {\n      \"description\": \"Volume is a string that references an already created Quobyte volume by name.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.RBDPersistentVolumeSource\": {\n    \"description\": \"Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.\",\n    \"required\": [\n     \"monitors\",\n     \"image\"\n    ],\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd\",\n      \"type\": \"string\"\n     },\n     \"image\": {\n      \"description\": \"The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\",\n      \"type\": \"string\"\n     },\n     \"keyring\": {\n      \"description\": \"Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\",\n      \"type\": \"string\"\n     },\n     \"monitors\": {\n      \"description\": \"A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"pool\": {\n      \"description\": \"The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\",\n      \"type\": \"boolean\"\n     },\n     \"secretRef\": {\n      \"description\": \"SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecretReference\"\n     },\n     \"user\": {\n      \"description\": \"The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.RBDVolumeSource\": {\n    \"description\": \"Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.\",\n    \"required\": [\n     \"monitors\",\n     \"image\"\n    ],\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd\",\n      \"type\": \"string\"\n     },\n     \"image\": {\n      \"description\": \"The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\",\n      \"type\": \"string\"\n     },\n     \"keyring\": {\n      \"description\": \"Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\",\n      \"type\": \"string\"\n     },\n     \"monitors\": {\n      \"description\": \"A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"pool\": {\n      \"description\": \"The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\",\n      \"type\": \"boolean\"\n     },\n     \"secretRef\": {\n      \"description\": \"SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.LocalObjectReference\"\n     },\n     \"user\": {\n      \"description\": \"The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ReplicationController\": {\n    \"description\": \"ReplicationController represents the configuration of a replication controller.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"If the Labels of a ReplicationController are empty, they are defaulted to be the same as the Pod(s) that the replication controller manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the specification of the desired behavior of the replication controller. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationControllerSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is the most recently observed status of the replication controller. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationControllerStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"ReplicationController\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.ReplicationControllerCondition\": {\n    \"description\": \"ReplicationControllerCondition describes the state of a replication controller at a certain point.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"The last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"A human readable message indicating details about the transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"The reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of replication controller condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ReplicationControllerList\": {\n    \"description\": \"ReplicationControllerList is a collection of replication controllers.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of replication controllers. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationController\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"ReplicationControllerList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.ReplicationControllerSpec\": {\n    \"description\": \"ReplicationControllerSpec is the specification of a replication controller.\",\n    \"properties\": {\n     \"minReadySeconds\": {\n      \"description\": \"Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"template\": {\n      \"description\": \"Template is the object that describes the pod that will be created if insufficient replicas are detected. This takes precedence over a TemplateRef. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplateSpec\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ReplicationControllerStatus\": {\n    \"description\": \"ReplicationControllerStatus represents the current status of a replication controller.\",\n    \"required\": [\n     \"replicas\"\n    ],\n    \"properties\": {\n     \"availableReplicas\": {\n      \"description\": \"The number of available replicas (ready for at least minReadySeconds) for this replication controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"conditions\": {\n      \"description\": \"Represents the latest available observations of a replication controller's current state.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationControllerCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"fullyLabeledReplicas\": {\n      \"description\": \"The number of pods that have labels matching the labels of the pod template of the replication controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"ObservedGeneration reflects the generation of the most recently observed replication controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"readyReplicas\": {\n      \"description\": \"The number of ready replicas for this replication controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ResourceFieldSelector\": {\n    \"description\": \"ResourceFieldSelector represents container resources (cpu, memory) and their output format\",\n    \"required\": [\n     \"resource\"\n    ],\n    \"properties\": {\n     \"containerName\": {\n      \"description\": \"Container name: required for volumes, optional for env vars\",\n      \"type\": \"string\"\n     },\n     \"divisor\": {\n      \"description\": \"Specifies the output format of the exposed resources, defaults to \\\"1\\\"\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n     },\n     \"resource\": {\n      \"description\": \"Required: resource to select\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ResourceQuota\": {\n    \"description\": \"ResourceQuota sets aggregate quota restrictions enforced per namespace\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the desired quota. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuotaSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status defines the actual enforced quota and its current usage. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuotaStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"ResourceQuota\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.ResourceQuotaList\": {\n    \"description\": \"ResourceQuotaList is a list of ResourceQuota items.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of ResourceQuota objects. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuota\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"ResourceQuotaList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.ResourceQuotaSpec\": {\n    \"description\": \"ResourceQuotaSpec defines the desired hard limits to enforce for Quota.\",\n    \"properties\": {\n     \"hard\": {\n      \"description\": \"hard is the set of desired hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"scopeSelector\": {\n      \"description\": \"scopeSelector is also a collection of filters like scopes that must match each object tracked by a quota but expressed using ScopeSelectorOperator in combination with possible values. For a resource to match, both scopes AND scopeSelector (if specified in spec), must be matched.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ScopeSelector\"\n     },\n     \"scopes\": {\n      \"description\": \"A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ResourceQuotaStatus\": {\n    \"description\": \"ResourceQuotaStatus defines the enforced hard limits and observed use.\",\n    \"properties\": {\n     \"hard\": {\n      \"description\": \"Hard is the set of enforced hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"used\": {\n      \"description\": \"Used is the current observed total usage of the resource in the namespace.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ResourceRequirements\": {\n    \"description\": \"ResourceRequirements describes the compute resource requirements.\",\n    \"properties\": {\n     \"limits\": {\n      \"description\": \"Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"requests\": {\n      \"description\": \"Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.SELinuxOptions\": {\n    \"description\": \"SELinuxOptions are the labels to be applied to the container\",\n    \"properties\": {\n     \"level\": {\n      \"description\": \"Level is SELinux level label that applies to the container.\",\n      \"type\": \"string\"\n     },\n     \"role\": {\n      \"description\": \"Role is a SELinux role label that applies to the container.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type is a SELinux type label that applies to the container.\",\n      \"type\": \"string\"\n     },\n     \"user\": {\n      \"description\": \"User is a SELinux user label that applies to the container.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ScaleIOPersistentVolumeSource\": {\n    \"description\": \"ScaleIOPersistentVolumeSource represents a persistent ScaleIO volume\",\n    \"required\": [\n     \"gateway\",\n     \"system\",\n     \"secretRef\"\n    ],\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified.\",\n      \"type\": \"string\"\n     },\n     \"gateway\": {\n      \"description\": \"The host address of the ScaleIO API Gateway.\",\n      \"type\": \"string\"\n     },\n     \"protectionDomain\": {\n      \"description\": \"The name of the ScaleIO Protection Domain for the configured storage.\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\",\n      \"type\": \"boolean\"\n     },\n     \"secretRef\": {\n      \"description\": \"SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecretReference\"\n     },\n     \"sslEnabled\": {\n      \"description\": \"Flag to enable/disable SSL communication with Gateway, default false\",\n      \"type\": \"boolean\"\n     },\n     \"storageMode\": {\n      \"description\": \"Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned.\",\n      \"type\": \"string\"\n     },\n     \"storagePool\": {\n      \"description\": \"The ScaleIO Storage Pool associated with the protection domain.\",\n      \"type\": \"string\"\n     },\n     \"system\": {\n      \"description\": \"The name of the storage system as configured in ScaleIO.\",\n      \"type\": \"string\"\n     },\n     \"volumeName\": {\n      \"description\": \"The name of a volume already created in the ScaleIO system that is associated with this volume source.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ScaleIOVolumeSource\": {\n    \"description\": \"ScaleIOVolumeSource represents a persistent ScaleIO volume\",\n    \"required\": [\n     \"gateway\",\n     \"system\",\n     \"secretRef\"\n    ],\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified.\",\n      \"type\": \"string\"\n     },\n     \"gateway\": {\n      \"description\": \"The host address of the ScaleIO API Gateway.\",\n      \"type\": \"string\"\n     },\n     \"protectionDomain\": {\n      \"description\": \"The name of the ScaleIO Protection Domain for the configured storage.\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\",\n      \"type\": \"boolean\"\n     },\n     \"secretRef\": {\n      \"description\": \"SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.LocalObjectReference\"\n     },\n     \"sslEnabled\": {\n      \"description\": \"Flag to enable/disable SSL communication with Gateway, default false\",\n      \"type\": \"boolean\"\n     },\n     \"storageMode\": {\n      \"description\": \"Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned.\",\n      \"type\": \"string\"\n     },\n     \"storagePool\": {\n      \"description\": \"The ScaleIO Storage Pool associated with the protection domain.\",\n      \"type\": \"string\"\n     },\n     \"system\": {\n      \"description\": \"The name of the storage system as configured in ScaleIO.\",\n      \"type\": \"string\"\n     },\n     \"volumeName\": {\n      \"description\": \"The name of a volume already created in the ScaleIO system that is associated with this volume source.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ScopeSelector\": {\n    \"description\": \"A scope selector represents the AND of the selectors represented by the scoped-resource selector requirements.\",\n    \"properties\": {\n     \"matchExpressions\": {\n      \"description\": \"A list of scope selector requirements by scope of the resources.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.ScopedResourceSelectorRequirement\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ScopedResourceSelectorRequirement\": {\n    \"description\": \"A scoped-resource selector requirement is a selector that contains values, a scope name, and an operator that relates the scope name and values.\",\n    \"required\": [\n     \"scopeName\",\n     \"operator\"\n    ],\n    \"properties\": {\n     \"operator\": {\n      \"description\": \"Represents a scope's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist.\",\n      \"type\": \"string\"\n     },\n     \"scopeName\": {\n      \"description\": \"The name of the scope that the selector applies to.\",\n      \"type\": \"string\"\n     },\n     \"values\": {\n      \"description\": \"An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.Secret\": {\n    \"description\": \"Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"data\": {\n      \"description\": \"Data contains the secret data. Each key must consist of alphanumeric characters, '-', '_' or '.'. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\",\n       \"format\": \"byte\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"stringData\": {\n      \"description\": \"stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"type\": {\n      \"description\": \"Used to facilitate programmatic handling of secret data.\",\n      \"type\": \"string\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"Secret\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.SecretEnvSource\": {\n    \"description\": \"SecretEnvSource selects a Secret to populate the environment variables with.\\n\\nThe contents of the target Secret's Data field will represent the key-value pairs as environment variables.\",\n    \"properties\": {\n     \"name\": {\n      \"description\": \"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\n      \"type\": \"string\"\n     },\n     \"optional\": {\n      \"description\": \"Specify whether the Secret must be defined\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.SecretKeySelector\": {\n    \"description\": \"SecretKeySelector selects a key of a Secret.\",\n    \"required\": [\n     \"key\"\n    ],\n    \"properties\": {\n     \"key\": {\n      \"description\": \"The key of the secret to select from.  Must be a valid secret key.\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\n      \"type\": \"string\"\n     },\n     \"optional\": {\n      \"description\": \"Specify whether the Secret or it's key must be defined\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.SecretList\": {\n    \"description\": \"SecretList is a list of Secret.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of secret objects. More info: https://kubernetes.io/docs/concepts/configuration/secret\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.Secret\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"SecretList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.SecretProjection\": {\n    \"description\": \"Adapts a secret into a projected volume.\\n\\nThe contents of the target Secret's Data field will be presented in a projected volume as files using the keys in the Data field as the file names. Note that this is identical to a secret volume source without the default mode.\",\n    \"properties\": {\n     \"items\": {\n      \"description\": \"If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.KeyToPath\"\n      }\n     },\n     \"name\": {\n      \"description\": \"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\n      \"type\": \"string\"\n     },\n     \"optional\": {\n      \"description\": \"Specify whether the Secret or its key must be defined\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.SecretReference\": {\n    \"description\": \"SecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace\",\n    \"properties\": {\n     \"name\": {\n      \"description\": \"Name is unique within a namespace to reference a secret resource.\",\n      \"type\": \"string\"\n     },\n     \"namespace\": {\n      \"description\": \"Namespace defines the space within which the secret name must be unique.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.SecretVolumeSource\": {\n    \"description\": \"Adapts a Secret into a volume.\\n\\nThe contents of the target Secret's Data field will be presented in a volume as files using the keys in the Data field as the file names. Secret volumes support ownership management and SELinux relabeling.\",\n    \"properties\": {\n     \"defaultMode\": {\n      \"description\": \"Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"items\": {\n      \"description\": \"If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.KeyToPath\"\n      }\n     },\n     \"optional\": {\n      \"description\": \"Specify whether the Secret or it's keys must be defined\",\n      \"type\": \"boolean\"\n     },\n     \"secretName\": {\n      \"description\": \"Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.SecurityContext\": {\n    \"description\": \"SecurityContext holds security configuration that will be applied to a container. Some fields are present in both SecurityContext and PodSecurityContext.  When both are set, the values in SecurityContext take precedence.\",\n    \"properties\": {\n     \"allowPrivilegeEscalation\": {\n      \"description\": \"AllowPrivilegeEscalation controls whether a process can gain more privileges than its parent process. This bool directly controls if the no_new_privs flag will be set on the container process. AllowPrivilegeEscalation is true always when the container is: 1) run as Privileged 2) has CAP_SYS_ADMIN\",\n      \"type\": \"boolean\"\n     },\n     \"capabilities\": {\n      \"description\": \"The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.Capabilities\"\n     },\n     \"privileged\": {\n      \"description\": \"Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false.\",\n      \"type\": \"boolean\"\n     },\n     \"readOnlyRootFilesystem\": {\n      \"description\": \"Whether this container has a read-only root filesystem. Default is false.\",\n      \"type\": \"boolean\"\n     },\n     \"runAsGroup\": {\n      \"description\": \"The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"runAsNonRoot\": {\n      \"description\": \"Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\",\n      \"type\": \"boolean\"\n     },\n     \"runAsUser\": {\n      \"description\": \"The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"seLinuxOptions\": {\n      \"description\": \"The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.SELinuxOptions\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.Service\": {\n    \"description\": \"Service is a named abstraction of software service (for example, mysql) consisting of local port (for example 3306) that the proxy listens on, and the selector that determines which pods will answer requests sent through the proxy.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the behavior of a service. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceSpec\"\n     },\n     \"status\": {\n      \"description\": \"Most recently observed status of the service. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"Service\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.ServiceAccount\": {\n    \"description\": \"ServiceAccount binds together: * a name, understood by users, and perhaps by peripheral systems, for an identity * a principal that can be authenticated and authorized * a set of secrets\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"automountServiceAccountToken\": {\n      \"description\": \"AutomountServiceAccountToken indicates whether pods running as this service account should have an API token automatically mounted. Can be overridden at the pod level.\",\n      \"type\": \"boolean\"\n     },\n     \"imagePullSecrets\": {\n      \"description\": \"ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.LocalObjectReference\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"secrets\": {\n      \"description\": \"Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. More info: https://kubernetes.io/docs/concepts/configuration/secret\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.ObjectReference\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"name\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"ServiceAccount\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.ServiceAccountList\": {\n    \"description\": \"ServiceAccountList is a list of ServiceAccount objects\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of ServiceAccounts. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceAccount\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"ServiceAccountList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.ServiceAccountTokenProjection\": {\n    \"description\": \"ServiceAccountTokenProjection represents a projected service account token volume. This projection can be used to insert a service account token into the pods runtime filesystem for use against APIs (Kubernetes API Server or otherwise).\",\n    \"required\": [\n     \"path\"\n    ],\n    \"properties\": {\n     \"audience\": {\n      \"description\": \"Audience is the intended audience of the token. A recipient of a token must identify itself with an identifier specified in the audience of the token, and otherwise should reject the token. The audience defaults to the identifier of the apiserver.\",\n      \"type\": \"string\"\n     },\n     \"expirationSeconds\": {\n      \"description\": \"ExpirationSeconds is the requested duration of validity of the service account token. As the token approaches expiration, the kubelet volume plugin will proactively rotate the service account token. The kubelet will start trying to rotate the token if the token is older than 80 percent of its time to live or if the token is older than 24 hours.Defaults to 1 hour and must be at least 10 minutes.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"path\": {\n      \"description\": \"Path is the path relative to the mount point of the file to project the token into.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ServiceList\": {\n    \"description\": \"ServiceList holds a list of services.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of services\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.Service\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"ServiceList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.core.v1.ServicePort\": {\n    \"description\": \"ServicePort contains information on service's port.\",\n    \"required\": [\n     \"port\"\n    ],\n    \"properties\": {\n     \"name\": {\n      \"description\": \"The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. This maps to the 'Name' field in EndpointPort objects. Optional if only one ServicePort is defined on this service.\",\n      \"type\": \"string\"\n     },\n     \"nodePort\": {\n      \"description\": \"The port on each node on which this service is exposed when type=NodePort or LoadBalancer. Usually assigned by the system. If specified, it will be allocated to the service if unused or else creation of the service will fail. Default is to auto-allocate a port if the ServiceType of this Service requires one. More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"port\": {\n      \"description\": \"The port that will be exposed by this service.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"protocol\": {\n      \"description\": \"The IP protocol for this port. Supports \\\"TCP\\\" and \\\"UDP\\\". Default is TCP.\",\n      \"type\": \"string\"\n     },\n     \"targetPort\": {\n      \"description\": \"Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod's container ports. If this is not specified, the value of the 'port' field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the 'port' field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ServiceSpec\": {\n    \"description\": \"ServiceSpec describes the attributes that a user creates on a service.\",\n    \"properties\": {\n     \"clusterIP\": {\n      \"description\": \"clusterIP is the IP address of the service and is usually assigned randomly by the master. If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail. This field can not be changed through updates. Valid values are \\\"None\\\", empty string (\\\"\\\"), or a valid IP address. \\\"None\\\" can be specified for headless services when proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\",\n      \"type\": \"string\"\n     },\n     \"externalIPs\": {\n      \"description\": \"externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service.  These IPs are not managed by Kubernetes.  The user is responsible for ensuring that traffic arrives at a node with this IP.  A common example is external load-balancers that are not part of the Kubernetes system.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"externalName\": {\n      \"description\": \"externalName is the external reference that kubedns or equivalent will return as a CNAME record for this service. No proxying will be involved. Must be a valid RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) and requires Type to be ExternalName.\",\n      \"type\": \"string\"\n     },\n     \"externalTrafficPolicy\": {\n      \"description\": \"externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. \\\"Local\\\" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. \\\"Cluster\\\" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading.\",\n      \"type\": \"string\"\n     },\n     \"healthCheckNodePort\": {\n      \"description\": \"healthCheckNodePort specifies the healthcheck nodePort for the service. If not specified, HealthCheckNodePort is created by the service api backend with the allocated nodePort. Will use user-specified nodePort value if specified by the client. Only effects when Type is set to LoadBalancer and ExternalTrafficPolicy is set to Local.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"loadBalancerIP\": {\n      \"description\": \"Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.\",\n      \"type\": \"string\"\n     },\n     \"loadBalancerSourceRanges\": {\n      \"description\": \"If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature.\\\" More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"ports\": {\n      \"description\": \"The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServicePort\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"port\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"publishNotReadyAddresses\": {\n      \"description\": \"publishNotReadyAddresses, when set to true, indicates that DNS implementations must publish the notReadyAddresses of subsets for the Endpoints associated with the Service. The default value is false. The primary use case for setting this field is to use a StatefulSet's Headless Service to propagate SRV records for its Pods without respect to their readiness for purpose of peer discovery.\",\n      \"type\": \"boolean\"\n     },\n     \"selector\": {\n      \"description\": \"Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"sessionAffinity\": {\n      \"description\": \"Supports \\\"ClientIP\\\" and \\\"None\\\". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\",\n      \"type\": \"string\"\n     },\n     \"sessionAffinityConfig\": {\n      \"description\": \"sessionAffinityConfig contains the configurations of session affinity.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.SessionAffinityConfig\"\n     },\n     \"type\": {\n      \"description\": \"type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. \\\"ExternalName\\\" maps to the specified externalName. \\\"ClusterIP\\\" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object. If clusterIP is \\\"None\\\", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a stable IP. \\\"NodePort\\\" builds on ClusterIP and allocates a port on every node which routes to the clusterIP. \\\"LoadBalancer\\\" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.ServiceStatus\": {\n    \"description\": \"ServiceStatus represents the current status of a service.\",\n    \"properties\": {\n     \"loadBalancer\": {\n      \"description\": \"LoadBalancer contains the current status of the load-balancer, if one is present.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.LoadBalancerStatus\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.SessionAffinityConfig\": {\n    \"description\": \"SessionAffinityConfig represents the configurations of session affinity.\",\n    \"properties\": {\n     \"clientIP\": {\n      \"description\": \"clientIP contains the configurations of Client IP based session affinity.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ClientIPConfig\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.StorageOSPersistentVolumeSource\": {\n    \"description\": \"Represents a StorageOS persistent volume resource.\",\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified.\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\",\n      \"type\": \"boolean\"\n     },\n     \"secretRef\": {\n      \"description\": \"SecretRef specifies the secret to use for obtaining the StorageOS API credentials.  If not specified, default values will be attempted.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ObjectReference\"\n     },\n     \"volumeName\": {\n      \"description\": \"VolumeName is the human-readable name of the StorageOS volume.  Volume names are only unique within a namespace.\",\n      \"type\": \"string\"\n     },\n     \"volumeNamespace\": {\n      \"description\": \"VolumeNamespace specifies the scope of the volume within StorageOS.  If no namespace is specified then the Pod's namespace will be used.  This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \\\"default\\\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.StorageOSVolumeSource\": {\n    \"description\": \"Represents a StorageOS persistent volume resource.\",\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified.\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\",\n      \"type\": \"boolean\"\n     },\n     \"secretRef\": {\n      \"description\": \"SecretRef specifies the secret to use for obtaining the StorageOS API credentials.  If not specified, default values will be attempted.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.LocalObjectReference\"\n     },\n     \"volumeName\": {\n      \"description\": \"VolumeName is the human-readable name of the StorageOS volume.  Volume names are only unique within a namespace.\",\n      \"type\": \"string\"\n     },\n     \"volumeNamespace\": {\n      \"description\": \"VolumeNamespace specifies the scope of the volume within StorageOS.  If no namespace is specified then the Pod's namespace will be used.  This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \\\"default\\\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.Sysctl\": {\n    \"description\": \"Sysctl defines a kernel parameter to be set\",\n    \"required\": [\n     \"name\",\n     \"value\"\n    ],\n    \"properties\": {\n     \"name\": {\n      \"description\": \"Name of a property to set\",\n      \"type\": \"string\"\n     },\n     \"value\": {\n      \"description\": \"Value of a property to set\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.TCPSocketAction\": {\n    \"description\": \"TCPSocketAction describes an action based on opening a socket\",\n    \"required\": [\n     \"port\"\n    ],\n    \"properties\": {\n     \"host\": {\n      \"description\": \"Optional: Host name to connect to, defaults to the pod IP.\",\n      \"type\": \"string\"\n     },\n     \"port\": {\n      \"description\": \"Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.Taint\": {\n    \"description\": \"The node this Taint is attached to has the \\\"effect\\\" on any pod that does not tolerate the Taint.\",\n    \"required\": [\n     \"key\",\n     \"effect\"\n    ],\n    \"properties\": {\n     \"effect\": {\n      \"description\": \"Required. The effect of the taint on pods that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute.\",\n      \"type\": \"string\"\n     },\n     \"key\": {\n      \"description\": \"Required. The taint key to be applied to a node.\",\n      \"type\": \"string\"\n     },\n     \"timeAdded\": {\n      \"description\": \"TimeAdded represents the time at which the taint was added. It is only written for NoExecute taints.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"value\": {\n      \"description\": \"Required. The taint value corresponding to the taint key.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.Toleration\": {\n    \"description\": \"The pod this Toleration is attached to tolerates any taint that matches the triple \\u003ckey,value,effect\\u003e using the matching operator \\u003coperator\\u003e.\",\n    \"properties\": {\n     \"effect\": {\n      \"description\": \"Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.\",\n      \"type\": \"string\"\n     },\n     \"key\": {\n      \"description\": \"Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.\",\n      \"type\": \"string\"\n     },\n     \"operator\": {\n      \"description\": \"Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.\",\n      \"type\": \"string\"\n     },\n     \"tolerationSeconds\": {\n      \"description\": \"TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"value\": {\n      \"description\": \"Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.TopologySelectorLabelRequirement\": {\n    \"description\": \"A topology selector requirement is a selector that matches given label. This is an alpha feature and may change in the future.\",\n    \"required\": [\n     \"key\",\n     \"values\"\n    ],\n    \"properties\": {\n     \"key\": {\n      \"description\": \"The label key that the selector applies to.\",\n      \"type\": \"string\"\n     },\n     \"values\": {\n      \"description\": \"An array of string values. One value must match the label to be selected. Each entry in Values is ORed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.TopologySelectorTerm\": {\n    \"description\": \"A topology selector term represents the result of label queries. A null or empty topology selector term matches no objects. The requirements of them are ANDed. It provides a subset of functionality as NodeSelectorTerm. This is an alpha feature and may change in the future.\",\n    \"properties\": {\n     \"matchLabelExpressions\": {\n      \"description\": \"A list of topology selector requirements by labels.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.TopologySelectorLabelRequirement\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.Volume\": {\n    \"description\": \"Volume represents a named volume in a pod that may be accessed by any container in the pod.\",\n    \"required\": [\n     \"name\"\n    ],\n    \"properties\": {\n     \"awsElasticBlockStore\": {\n      \"description\": \"AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource\"\n     },\n     \"azureDisk\": {\n      \"description\": \"AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.AzureDiskVolumeSource\"\n     },\n     \"azureFile\": {\n      \"description\": \"AzureFile represents an Azure File Service mount on the host and bind mount to the pod.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.AzureFileVolumeSource\"\n     },\n     \"cephfs\": {\n      \"description\": \"CephFS represents a Ceph FS mount on the host that shares a pod's lifetime\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.CephFSVolumeSource\"\n     },\n     \"cinder\": {\n      \"description\": \"Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.CinderVolumeSource\"\n     },\n     \"configMap\": {\n      \"description\": \"ConfigMap represents a configMap that should populate this volume\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMapVolumeSource\"\n     },\n     \"downwardAPI\": {\n      \"description\": \"DownwardAPI represents downward API about the pod that should populate this volume\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeSource\"\n     },\n     \"emptyDir\": {\n      \"description\": \"EmptyDir represents a temporary directory that shares a pod's lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.EmptyDirVolumeSource\"\n     },\n     \"fc\": {\n      \"description\": \"FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.FCVolumeSource\"\n     },\n     \"flexVolume\": {\n      \"description\": \"FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.FlexVolumeSource\"\n     },\n     \"flocker\": {\n      \"description\": \"Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.FlockerVolumeSource\"\n     },\n     \"gcePersistentDisk\": {\n      \"description\": \"GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.GCEPersistentDiskVolumeSource\"\n     },\n     \"gitRepo\": {\n      \"description\": \"GitRepo represents a git repository at a particular revision. DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.GitRepoVolumeSource\"\n     },\n     \"glusterfs\": {\n      \"description\": \"Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.GlusterfsVolumeSource\"\n     },\n     \"hostPath\": {\n      \"description\": \"HostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.HostPathVolumeSource\"\n     },\n     \"iscsi\": {\n      \"description\": \"ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://releases.k8s.io/HEAD/examples/volumes/iscsi/README.md\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ISCSIVolumeSource\"\n     },\n     \"name\": {\n      \"description\": \"Volume's name. Must be a DNS_LABEL and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\n      \"type\": \"string\"\n     },\n     \"nfs\": {\n      \"description\": \"NFS represents an NFS mount on the host that shares a pod's lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.NFSVolumeSource\"\n     },\n     \"persistentVolumeClaim\": {\n      \"description\": \"PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimVolumeSource\"\n     },\n     \"photonPersistentDisk\": {\n      \"description\": \"PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource\"\n     },\n     \"portworxVolume\": {\n      \"description\": \"PortworxVolume represents a portworx volume attached and mounted on kubelets host machine\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PortworxVolumeSource\"\n     },\n     \"projected\": {\n      \"description\": \"Items for all in one resources secrets, configmaps, and downward API\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ProjectedVolumeSource\"\n     },\n     \"quobyte\": {\n      \"description\": \"Quobyte represents a Quobyte mount on the host that shares a pod's lifetime\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.QuobyteVolumeSource\"\n     },\n     \"rbd\": {\n      \"description\": \"RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.RBDVolumeSource\"\n     },\n     \"scaleIO\": {\n      \"description\": \"ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ScaleIOVolumeSource\"\n     },\n     \"secret\": {\n      \"description\": \"Secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecretVolumeSource\"\n     },\n     \"storageos\": {\n      \"description\": \"StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.StorageOSVolumeSource\"\n     },\n     \"vsphereVolume\": {\n      \"description\": \"VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.VolumeDevice\": {\n    \"description\": \"volumeDevice describes a mapping of a raw block device within a container.\",\n    \"required\": [\n     \"name\",\n     \"devicePath\"\n    ],\n    \"properties\": {\n     \"devicePath\": {\n      \"description\": \"devicePath is the path inside of the container that the device will be mapped to.\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"name must match the name of a persistentVolumeClaim in the pod\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.VolumeMount\": {\n    \"description\": \"VolumeMount describes a mounting of a Volume within a container.\",\n    \"required\": [\n     \"name\",\n     \"mountPath\"\n    ],\n    \"properties\": {\n     \"mountPath\": {\n      \"description\": \"Path within the container at which the volume should be mounted.  Must not contain ':'.\",\n      \"type\": \"string\"\n     },\n     \"mountPropagation\": {\n      \"description\": \"mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10.\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"This must match the Name of a Volume.\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false.\",\n      \"type\": \"boolean\"\n     },\n     \"subPath\": {\n      \"description\": \"Path within the volume from which the container's volume should be mounted. Defaults to \\\"\\\" (volume's root).\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.VolumeNodeAffinity\": {\n    \"description\": \"VolumeNodeAffinity defines constraints that limit what nodes this volume can be accessed from.\",\n    \"properties\": {\n     \"required\": {\n      \"description\": \"Required specifies hard node constraints that must be met.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeSelector\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.VolumeProjection\": {\n    \"description\": \"Projection that may be projected along with other supported volume types\",\n    \"properties\": {\n     \"configMap\": {\n      \"description\": \"information about the configMap data to project\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMapProjection\"\n     },\n     \"downwardAPI\": {\n      \"description\": \"information about the downwardAPI data to project\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.DownwardAPIProjection\"\n     },\n     \"secret\": {\n      \"description\": \"information about the secret data to project\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecretProjection\"\n     },\n     \"serviceAccountToken\": {\n      \"description\": \"information about the serviceAccountToken data to project\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceAccountTokenProjection\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource\": {\n    \"description\": \"Represents a vSphere volume resource.\",\n    \"required\": [\n     \"volumePath\"\n    ],\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified.\",\n      \"type\": \"string\"\n     },\n     \"storagePolicyID\": {\n      \"description\": \"Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.\",\n      \"type\": \"string\"\n     },\n     \"storagePolicyName\": {\n      \"description\": \"Storage Policy Based Management (SPBM) profile name.\",\n      \"type\": \"string\"\n     },\n     \"volumePath\": {\n      \"description\": \"Path that identifies vSphere volume vmdk\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.core.v1.WeightedPodAffinityTerm\": {\n    \"description\": \"The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)\",\n    \"required\": [\n     \"weight\",\n     \"podAffinityTerm\"\n    ],\n    \"properties\": {\n     \"podAffinityTerm\": {\n      \"description\": \"Required. A pod affinity term, associated with the corresponding weight.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodAffinityTerm\"\n     },\n     \"weight\": {\n      \"description\": \"weight associated with matching the corresponding podAffinityTerm, in the range 1-100.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.events.v1beta1.Event\": {\n    \"description\": \"Event is a report of an event somewhere in the cluster. It generally denotes some state change in the system.\",\n    \"required\": [\n     \"eventTime\"\n    ],\n    \"properties\": {\n     \"action\": {\n      \"description\": \"What action was taken/failed regarding to the regarding object.\",\n      \"type\": \"string\"\n     },\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"deprecatedCount\": {\n      \"description\": \"Deprecated field assuring backward compatibility with core.v1 Event type\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"deprecatedFirstTimestamp\": {\n      \"description\": \"Deprecated field assuring backward compatibility with core.v1 Event type\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"deprecatedLastTimestamp\": {\n      \"description\": \"Deprecated field assuring backward compatibility with core.v1 Event type\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"deprecatedSource\": {\n      \"description\": \"Deprecated field assuring backward compatibility with core.v1 Event type\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.EventSource\"\n     },\n     \"eventTime\": {\n      \"description\": \"Required. Time when this Event was first observed.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"note\": {\n      \"description\": \"Optional. A human-readable description of the status of this operation. Maximal length of the note is 1kB, but libraries should be prepared to handle values up to 64kB.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"Why the action was taken.\",\n      \"type\": \"string\"\n     },\n     \"regarding\": {\n      \"description\": \"The object this Event is about. In most cases it's an Object reporting controller implements. E.g. ReplicaSetController implements ReplicaSets and this event is emitted because it acts on some changes in a ReplicaSet object.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ObjectReference\"\n     },\n     \"related\": {\n      \"description\": \"Optional secondary object for more complex actions. E.g. when regarding object triggers a creation or deletion of related object.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.ObjectReference\"\n     },\n     \"reportingController\": {\n      \"description\": \"Name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`.\",\n      \"type\": \"string\"\n     },\n     \"reportingInstance\": {\n      \"description\": \"ID of the controller instance, e.g. `kubelet-xyzf`.\",\n      \"type\": \"string\"\n     },\n     \"series\": {\n      \"description\": \"Data about the Event series this event represents or nil if it's a singleton Event.\",\n      \"$ref\": \"#/definitions/io.k8s.api.events.v1beta1.EventSeries\"\n     },\n     \"type\": {\n      \"description\": \"Type of this event (Normal, Warning), new types could be added in the future.\",\n      \"type\": \"string\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"events.k8s.io\",\n      \"kind\": \"Event\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.events.v1beta1.EventList\": {\n    \"description\": \"EventList is a list of Event objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of schema objects.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.events.v1beta1.Event\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"events.k8s.io\",\n      \"kind\": \"EventList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.events.v1beta1.EventSeries\": {\n    \"description\": \"EventSeries contain information on series of events, i.e. thing that was/is happening continuously for some time.\",\n    \"required\": [\n     \"count\",\n     \"lastObservedTime\",\n     \"state\"\n    ],\n    \"properties\": {\n     \"count\": {\n      \"description\": \"Number of occurrences in this series up to the last heartbeat time\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"lastObservedTime\": {\n      \"description\": \"Time when last Event from the series was seen before last heartbeat.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime\"\n     },\n     \"state\": {\n      \"description\": \"Information whether this series is ongoing or finished.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.AllowedFlexVolume\": {\n    \"description\": \"AllowedFlexVolume represents a single Flexvolume that is allowed to be used. Deprecated: use AllowedFlexVolume from policy API Group instead.\",\n    \"required\": [\n     \"driver\"\n    ],\n    \"properties\": {\n     \"driver\": {\n      \"description\": \"driver is the name of the Flexvolume driver.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.AllowedHostPath\": {\n    \"description\": \"AllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined. Deprecated: use AllowedHostPath from policy API Group instead.\",\n    \"properties\": {\n     \"pathPrefix\": {\n      \"description\": \"pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\\n\\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.DaemonSet\": {\n    \"description\": \"DEPRECATED - This group version of DaemonSet is deprecated by apps/v1beta2/DaemonSet. See the release notes for more information. DaemonSet represents the configuration of a daemon set.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetSpec\"\n     },\n     \"status\": {\n      \"description\": \"The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"kind\": \"DaemonSet\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.extensions.v1beta1.DaemonSetCondition\": {\n    \"description\": \"DaemonSetCondition describes the state of a DaemonSet at a certain point.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"A human readable message indicating details about the transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"The reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of DaemonSet condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.DaemonSetList\": {\n    \"description\": \"DaemonSetList is a collection of daemon sets.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"A list of daemon sets.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"kind\": \"DaemonSetList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.extensions.v1beta1.DaemonSetSpec\": {\n    \"description\": \"DaemonSetSpec is the specification of a daemon set.\",\n    \"required\": [\n     \"template\"\n    ],\n    \"properties\": {\n     \"minReadySeconds\": {\n      \"description\": \"The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"revisionHistoryLimit\": {\n      \"description\": \"The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"A label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"template\": {\n      \"description\": \"An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplateSpec\"\n     },\n     \"templateGeneration\": {\n      \"description\": \"DEPRECATED. A sequence number representing a specific generation of the template. Populated by the system. It can be set only during the creation.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"updateStrategy\": {\n      \"description\": \"An update strategy to replace existing DaemonSet pods with new pods.\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetUpdateStrategy\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.DaemonSetStatus\": {\n    \"description\": \"DaemonSetStatus represents the current status of a daemon set.\",\n    \"required\": [\n     \"currentNumberScheduled\",\n     \"numberMisscheduled\",\n     \"desiredNumberScheduled\",\n     \"numberReady\"\n    ],\n    \"properties\": {\n     \"collisionCount\": {\n      \"description\": \"Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"conditions\": {\n      \"description\": \"Represents the latest available observations of a DaemonSet's current state.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"currentNumberScheduled\": {\n      \"description\": \"The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"desiredNumberScheduled\": {\n      \"description\": \"The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"numberAvailable\": {\n      \"description\": \"The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"numberMisscheduled\": {\n      \"description\": \"The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"numberReady\": {\n      \"description\": \"The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"numberUnavailable\": {\n      \"description\": \"The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"The most recent generation observed by the daemon set controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"updatedNumberScheduled\": {\n      \"description\": \"The total number of nodes that are running updated daemon pod\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.DaemonSetUpdateStrategy\": {\n    \"properties\": {\n     \"rollingUpdate\": {\n      \"description\": \"Rolling update config params. Present only if type = \\\"RollingUpdate\\\".\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.RollingUpdateDaemonSet\"\n     },\n     \"type\": {\n      \"description\": \"Type of daemon set update. Can be \\\"RollingUpdate\\\" or \\\"OnDelete\\\". Default is OnDelete.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.Deployment\": {\n    \"description\": \"DEPRECATED - This group version of Deployment is deprecated by apps/v1beta2/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior of the Deployment.\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentSpec\"\n     },\n     \"status\": {\n      \"description\": \"Most recently observed status of the Deployment.\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"kind\": \"Deployment\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.extensions.v1beta1.DeploymentCondition\": {\n    \"description\": \"DeploymentCondition describes the state of a deployment at a certain point.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"lastUpdateTime\": {\n      \"description\": \"The last time this condition was updated.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"A human readable message indicating details about the transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"The reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of deployment condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.DeploymentList\": {\n    \"description\": \"DeploymentList is a list of Deployments.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of Deployments.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Deployment\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"kind\": \"DeploymentList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.extensions.v1beta1.DeploymentRollback\": {\n    \"description\": \"DEPRECATED. DeploymentRollback stores the information required to rollback a deployment.\",\n    \"required\": [\n     \"name\",\n     \"rollbackTo\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Required: This must match the Name of a deployment.\",\n      \"type\": \"string\"\n     },\n     \"rollbackTo\": {\n      \"description\": \"The config of this deployment rollback.\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.RollbackConfig\"\n     },\n     \"updatedAnnotations\": {\n      \"description\": \"The annotations to be updated to a deployment\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"kind\": \"DeploymentRollback\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.extensions.v1beta1.DeploymentSpec\": {\n    \"description\": \"DeploymentSpec is the specification of the desired behavior of the Deployment.\",\n    \"required\": [\n     \"template\"\n    ],\n    \"properties\": {\n     \"minReadySeconds\": {\n      \"description\": \"Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"paused\": {\n      \"description\": \"Indicates that the deployment is paused and will not be processed by the deployment controller.\",\n      \"type\": \"boolean\"\n     },\n     \"progressDeadlineSeconds\": {\n      \"description\": \"The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. This is not set by default.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"revisionHistoryLimit\": {\n      \"description\": \"The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"rollbackTo\": {\n      \"description\": \"DEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done.\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.RollbackConfig\"\n     },\n     \"selector\": {\n      \"description\": \"Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"strategy\": {\n      \"description\": \"The deployment strategy to use to replace existing pods with new ones.\",\n      \"x-kubernetes-patch-strategy\": \"retainKeys\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentStrategy\"\n     },\n     \"template\": {\n      \"description\": \"Template describes the pods that will be created.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplateSpec\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.DeploymentStatus\": {\n    \"description\": \"DeploymentStatus is the most recently observed status of the Deployment.\",\n    \"properties\": {\n     \"availableReplicas\": {\n      \"description\": \"Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"collisionCount\": {\n      \"description\": \"Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"conditions\": {\n      \"description\": \"Represents the latest available observations of a deployment's current state.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"The generation observed by the deployment controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"readyReplicas\": {\n      \"description\": \"Total number of ready pods targeted by this deployment.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Total number of non-terminated pods targeted by this deployment (their labels match the selector).\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"unavailableReplicas\": {\n      \"description\": \"Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"updatedReplicas\": {\n      \"description\": \"Total number of non-terminated pods targeted by this deployment that have the desired template spec.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.DeploymentStrategy\": {\n    \"description\": \"DeploymentStrategy describes how to replace existing pods with new ones.\",\n    \"properties\": {\n     \"rollingUpdate\": {\n      \"description\": \"Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.RollingUpdateDeployment\"\n     },\n     \"type\": {\n      \"description\": \"Type of deployment. Can be \\\"Recreate\\\" or \\\"RollingUpdate\\\". Default is RollingUpdate.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.FSGroupStrategyOptions\": {\n    \"description\": \"FSGroupStrategyOptions defines the strategy type and options used to create the strategy. Deprecated: use FSGroupStrategyOptions from policy API Group instead.\",\n    \"properties\": {\n     \"ranges\": {\n      \"description\": \"ranges are the allowed ranges of fs groups.  If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.IDRange\"\n      }\n     },\n     \"rule\": {\n      \"description\": \"rule is the strategy that will dictate what FSGroup is used in the SecurityContext.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.HTTPIngressPath\": {\n    \"description\": \"HTTPIngressPath associates a path regex with a backend. Incoming urls matching the path are forwarded to the backend.\",\n    \"required\": [\n     \"backend\"\n    ],\n    \"properties\": {\n     \"backend\": {\n      \"description\": \"Backend defines the referenced service endpoint to which the traffic will be forwarded to.\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.IngressBackend\"\n     },\n     \"path\": {\n      \"description\": \"Path is an extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional \\\"path\\\" part of a URL as defined by RFC 3986. Paths must begin with a '/'. If unspecified, the path defaults to a catch all sending traffic to the backend.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.HTTPIngressRuleValue\": {\n    \"description\": \"HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http://\\u003chost\\u003e/\\u003cpath\\u003e?\\u003csearchpart\\u003e -\\u003e backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'.\",\n    \"required\": [\n     \"paths\"\n    ],\n    \"properties\": {\n     \"paths\": {\n      \"description\": \"A collection of paths that map requests to backends.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.HTTPIngressPath\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.HostPortRange\": {\n    \"description\": \"HostPortRange defines a range of host ports that will be enabled by a policy for pods to use.  It requires both the start and end to be defined. Deprecated: use HostPortRange from policy API Group instead.\",\n    \"required\": [\n     \"min\",\n     \"max\"\n    ],\n    \"properties\": {\n     \"max\": {\n      \"description\": \"max is the end of the range, inclusive.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"min\": {\n      \"description\": \"min is the start of the range, inclusive.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.IDRange\": {\n    \"description\": \"IDRange provides a min/max of an allowed range of IDs. Deprecated: use IDRange from policy API Group instead.\",\n    \"required\": [\n     \"min\",\n     \"max\"\n    ],\n    \"properties\": {\n     \"max\": {\n      \"description\": \"max is the end of the range, inclusive.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"min\": {\n      \"description\": \"min is the start of the range, inclusive.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.IPBlock\": {\n    \"description\": \"DEPRECATED 1.9 - This group version of IPBlock is deprecated by networking/v1/IPBlock. IPBlock describes a particular CIDR (Ex. \\\"192.168.1.1/24\\\") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.\",\n    \"required\": [\n     \"cidr\"\n    ],\n    \"properties\": {\n     \"cidr\": {\n      \"description\": \"CIDR is a string representing the IP Block Valid examples are \\\"192.168.1.1/24\\\"\",\n      \"type\": \"string\"\n     },\n     \"except\": {\n      \"description\": \"Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \\\"192.168.1.1/24\\\" Except values will be rejected if they are outside the CIDR range\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.Ingress\": {\n    \"description\": \"Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.IngressSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is the current state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.IngressStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"kind\": \"Ingress\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.extensions.v1beta1.IngressBackend\": {\n    \"description\": \"IngressBackend describes all endpoints for a given service and port.\",\n    \"required\": [\n     \"serviceName\",\n     \"servicePort\"\n    ],\n    \"properties\": {\n     \"serviceName\": {\n      \"description\": \"Specifies the name of the referenced service.\",\n      \"type\": \"string\"\n     },\n     \"servicePort\": {\n      \"description\": \"Specifies the port of the referenced service.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.IngressList\": {\n    \"description\": \"IngressList is a collection of Ingress.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of Ingress.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Ingress\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"kind\": \"IngressList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.extensions.v1beta1.IngressRule\": {\n    \"description\": \"IngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue.\",\n    \"properties\": {\n     \"host\": {\n      \"description\": \"Host is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the \\\"host\\\" part of the URI as defined in the RFC: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the\\n\\t  IP in the Spec of the parent Ingress.\\n2. The `:` delimiter is not respected because ports are not allowed.\\n\\t  Currently the port of an Ingress is implicitly :80 for http and\\n\\t  :443 for https.\\nBoth these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.\",\n      \"type\": \"string\"\n     },\n     \"http\": {\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.HTTPIngressRuleValue\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.IngressSpec\": {\n    \"description\": \"IngressSpec describes the Ingress the user wishes to exist.\",\n    \"properties\": {\n     \"backend\": {\n      \"description\": \"A default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default.\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.IngressBackend\"\n     },\n     \"rules\": {\n      \"description\": \"A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.IngressRule\"\n      }\n     },\n     \"tls\": {\n      \"description\": \"TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.IngressTLS\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.IngressStatus\": {\n    \"description\": \"IngressStatus describe the current state of the Ingress.\",\n    \"properties\": {\n     \"loadBalancer\": {\n      \"description\": \"LoadBalancer contains the current status of the load-balancer.\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.LoadBalancerStatus\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.IngressTLS\": {\n    \"description\": \"IngressTLS describes the transport layer security associated with an Ingress.\",\n    \"properties\": {\n     \"hosts\": {\n      \"description\": \"Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"secretName\": {\n      \"description\": \"SecretName is the name of the secret used to terminate SSL traffic on 443. Field is left optional to allow SSL routing based on SNI hostname alone. If the SNI host in a listener conflicts with the \\\"Host\\\" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.NetworkPolicy\": {\n    \"description\": \"DEPRECATED 1.9 - This group version of NetworkPolicy is deprecated by networking/v1/NetworkPolicy. NetworkPolicy describes what network traffic is allowed for a set of Pods\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior for this NetworkPolicy.\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicySpec\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.extensions.v1beta1.NetworkPolicyEgressRule\": {\n    \"description\": \"DEPRECATED 1.9 - This group version of NetworkPolicyEgressRule is deprecated by networking/v1/NetworkPolicyEgressRule. NetworkPolicyEgressRule describes a particular set of traffic that is allowed out of pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and to. This type is beta-level in 1.8\",\n    \"properties\": {\n     \"ports\": {\n      \"description\": \"List of destination ports for outgoing traffic. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPort\"\n      }\n     },\n     \"to\": {\n      \"description\": \"List of destinations for outgoing traffic of pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all destinations (traffic not restricted by destination). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the to list.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPeer\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.NetworkPolicyIngressRule\": {\n    \"description\": \"DEPRECATED 1.9 - This group version of NetworkPolicyIngressRule is deprecated by networking/v1/NetworkPolicyIngressRule. This NetworkPolicyIngressRule matches traffic if and only if the traffic matches both ports AND from.\",\n    \"properties\": {\n     \"from\": {\n      \"description\": \"List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPeer\"\n      }\n     },\n     \"ports\": {\n      \"description\": \"List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPort\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.NetworkPolicyList\": {\n    \"description\": \"DEPRECATED 1.9 - This group version of NetworkPolicyList is deprecated by networking/v1/NetworkPolicyList. Network Policy List is a list of NetworkPolicy objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of schema objects.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"kind\": \"NetworkPolicyList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.extensions.v1beta1.NetworkPolicyPeer\": {\n    \"description\": \"DEPRECATED 1.9 - This group version of NetworkPolicyPeer is deprecated by networking/v1/NetworkPolicyPeer.\",\n    \"properties\": {\n     \"ipBlock\": {\n      \"description\": \"IPBlock defines policy on a particular IPBlock. If this field is set then neither of the other fields can be.\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.IPBlock\"\n     },\n     \"namespaceSelector\": {\n      \"description\": \"Selects Namespaces using cluster-scoped labels. This field follows standard label selector semantics; if present but empty, it selects all namespaces.\\n\\nIf PodSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects all Pods in the Namespaces selected by NamespaceSelector.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"podSelector\": {\n      \"description\": \"This is a label selector which selects Pods. This field follows standard label selector semantics; if present but empty, it selects all pods.\\n\\nIf NamespaceSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects the Pods matching PodSelector in the policy's own Namespace.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.NetworkPolicyPort\": {\n    \"description\": \"DEPRECATED 1.9 - This group version of NetworkPolicyPort is deprecated by networking/v1/NetworkPolicyPort.\",\n    \"properties\": {\n     \"port\": {\n      \"description\": \"If specified, the port on the given protocol.  This can either be a numerical or named port on a pod.  If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     },\n     \"protocol\": {\n      \"description\": \"Optional.  The protocol (TCP or UDP) which traffic must match. If not specified, this field defaults to TCP.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.NetworkPolicySpec\": {\n    \"description\": \"DEPRECATED 1.9 - This group version of NetworkPolicySpec is deprecated by networking/v1/NetworkPolicySpec.\",\n    \"required\": [\n     \"podSelector\"\n    ],\n    \"properties\": {\n     \"egress\": {\n      \"description\": \"List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyEgressRule\"\n      }\n     },\n     \"ingress\": {\n      \"description\": \"List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default).\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyIngressRule\"\n      }\n     },\n     \"podSelector\": {\n      \"description\": \"Selects the pods to which this NetworkPolicy object applies.  The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods.  In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"policyTypes\": {\n      \"description\": \"List of rule types that the NetworkPolicy relates to. Valid options are Ingress, Egress, or Ingress,Egress. If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \\\"Egress\\\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \\\"Egress\\\" (since such a policy would not include an Egress section and would otherwise default to just [ \\\"Ingress\\\" ]). This field is beta-level in 1.8\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.PodSecurityPolicy\": {\n    \"description\": \"PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container. Deprecated: use PodSecurityPolicy from policy API Group instead.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"spec defines the policy enforced.\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicySpec\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"kind\": \"PodSecurityPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.extensions.v1beta1.PodSecurityPolicyList\": {\n    \"description\": \"PodSecurityPolicyList is a list of PodSecurityPolicy objects. Deprecated: use PodSecurityPolicyList from policy API Group instead.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"items is a list of schema objects.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"kind\": \"PodSecurityPolicyList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.extensions.v1beta1.PodSecurityPolicySpec\": {\n    \"description\": \"PodSecurityPolicySpec defines the policy enforced. Deprecated: use PodSecurityPolicySpec from policy API Group instead.\",\n    \"required\": [\n     \"seLinux\",\n     \"runAsUser\",\n     \"supplementalGroups\",\n     \"fsGroup\"\n    ],\n    \"properties\": {\n     \"allowPrivilegeEscalation\": {\n      \"description\": \"allowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.\",\n      \"type\": \"boolean\"\n     },\n     \"allowedCapabilities\": {\n      \"description\": \"allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"allowedFlexVolumes\": {\n      \"description\": \"allowedFlexVolumes is a whitelist of allowed Flexvolumes.  Empty or nil indicates that all Flexvolumes may be used.  This parameter is effective only when the usage of the Flexvolumes is allowed in the \\\"volumes\\\" field.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.AllowedFlexVolume\"\n      }\n     },\n     \"allowedHostPaths\": {\n      \"description\": \"allowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.AllowedHostPath\"\n      }\n     },\n     \"allowedUnsafeSysctls\": {\n      \"description\": \"allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \\\"*\\\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection.\\n\\nExamples: e.g. \\\"foo/*\\\" allows \\\"foo/bar\\\", \\\"foo/baz\\\", etc. e.g. \\\"foo.*\\\" allows \\\"foo.bar\\\", \\\"foo.baz\\\", etc.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"defaultAddCapabilities\": {\n      \"description\": \"defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability.  You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"defaultAllowPrivilegeEscalation\": {\n      \"description\": \"defaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.\",\n      \"type\": \"boolean\"\n     },\n     \"forbiddenSysctls\": {\n      \"description\": \"forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \\\"*\\\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\\n\\nExamples: e.g. \\\"foo/*\\\" forbids \\\"foo/bar\\\", \\\"foo/baz\\\", etc. e.g. \\\"foo.*\\\" forbids \\\"foo.bar\\\", \\\"foo.baz\\\", etc.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"fsGroup\": {\n      \"description\": \"fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.FSGroupStrategyOptions\"\n     },\n     \"hostIPC\": {\n      \"description\": \"hostIPC determines if the policy allows the use of HostIPC in the pod spec.\",\n      \"type\": \"boolean\"\n     },\n     \"hostNetwork\": {\n      \"description\": \"hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.\",\n      \"type\": \"boolean\"\n     },\n     \"hostPID\": {\n      \"description\": \"hostPID determines if the policy allows the use of HostPID in the pod spec.\",\n      \"type\": \"boolean\"\n     },\n     \"hostPorts\": {\n      \"description\": \"hostPorts determines which host port ranges are allowed to be exposed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.HostPortRange\"\n      }\n     },\n     \"privileged\": {\n      \"description\": \"privileged determines if a pod can request to be run as privileged.\",\n      \"type\": \"boolean\"\n     },\n     \"readOnlyRootFilesystem\": {\n      \"description\": \"readOnlyRootFilesystem when set to true will force containers to run with a read only root file system.  If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.\",\n      \"type\": \"boolean\"\n     },\n     \"requiredDropCapabilities\": {\n      \"description\": \"requiredDropCapabilities are the capabilities that will be dropped from the container.  These are required to be dropped and cannot be added.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"runAsUser\": {\n      \"description\": \"runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.RunAsUserStrategyOptions\"\n     },\n     \"seLinux\": {\n      \"description\": \"seLinux is the strategy that will dictate the allowable labels that may be set.\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.SELinuxStrategyOptions\"\n     },\n     \"supplementalGroups\": {\n      \"description\": \"supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.SupplementalGroupsStrategyOptions\"\n     },\n     \"volumes\": {\n      \"description\": \"volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.ReplicaSet\": {\n    \"description\": \"DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1beta2/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"kind\": \"ReplicaSet\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.extensions.v1beta1.ReplicaSetCondition\": {\n    \"description\": \"ReplicaSetCondition describes the state of a replica set at a certain point.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"The last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"A human readable message indicating details about the transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"The reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of replica set condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.ReplicaSetList\": {\n    \"description\": \"ReplicaSetList is a collection of ReplicaSets.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"kind\": \"ReplicaSetList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.extensions.v1beta1.ReplicaSetSpec\": {\n    \"description\": \"ReplicaSetSpec is the specification of a ReplicaSet.\",\n    \"properties\": {\n     \"minReadySeconds\": {\n      \"description\": \"Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"Selector is a label query over pods that should match the replica count. If the selector is empty, it is defaulted to the labels present on the pod template. Label keys and values that must match in order to be controlled by this replica set. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"template\": {\n      \"description\": \"Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplateSpec\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.ReplicaSetStatus\": {\n    \"description\": \"ReplicaSetStatus represents the current status of a ReplicaSet.\",\n    \"required\": [\n     \"replicas\"\n    ],\n    \"properties\": {\n     \"availableReplicas\": {\n      \"description\": \"The number of available replicas (ready for at least minReadySeconds) for this replica set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"conditions\": {\n      \"description\": \"Represents the latest available observations of a replica set's current state.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"fullyLabeledReplicas\": {\n      \"description\": \"The number of pods that have labels matching the labels of the pod template of the replicaset.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"ObservedGeneration reflects the generation of the most recently observed ReplicaSet.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"readyReplicas\": {\n      \"description\": \"The number of ready replicas for this replica set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.RollbackConfig\": {\n    \"description\": \"DEPRECATED.\",\n    \"properties\": {\n     \"revision\": {\n      \"description\": \"The revision to rollback to. If set to 0, rollback to the last revision.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.RollingUpdateDaemonSet\": {\n    \"description\": \"Spec to control the desired behavior of daemon set rolling update.\",\n    \"properties\": {\n     \"maxUnavailable\": {\n      \"description\": \"The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.RollingUpdateDeployment\": {\n    \"description\": \"Spec to control the desired behavior of rolling update.\",\n    \"properties\": {\n     \"maxSurge\": {\n      \"description\": \"The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     },\n     \"maxUnavailable\": {\n      \"description\": \"The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.RunAsUserStrategyOptions\": {\n    \"description\": \"RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use RunAsUserStrategyOptions from policy API Group instead.\",\n    \"required\": [\n     \"rule\"\n    ],\n    \"properties\": {\n     \"ranges\": {\n      \"description\": \"ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.IDRange\"\n      }\n     },\n     \"rule\": {\n      \"description\": \"rule is the strategy that will dictate the allowable RunAsUser values that may be set.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.SELinuxStrategyOptions\": {\n    \"description\": \"SELinuxStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use SELinuxStrategyOptions from policy API Group instead.\",\n    \"required\": [\n     \"rule\"\n    ],\n    \"properties\": {\n     \"rule\": {\n      \"description\": \"rule is the strategy that will dictate the allowable labels that may be set.\",\n      \"type\": \"string\"\n     },\n     \"seLinuxOptions\": {\n      \"description\": \"seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.SELinuxOptions\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.Scale\": {\n    \"description\": \"represents a scaling request for a resource.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ScaleSpec\"\n     },\n     \"status\": {\n      \"description\": \"current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.\",\n      \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ScaleStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"kind\": \"Scale\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.extensions.v1beta1.ScaleSpec\": {\n    \"description\": \"describes the attributes of a scale subresource\",\n    \"properties\": {\n     \"replicas\": {\n      \"description\": \"desired number of instances for the scaled object.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.ScaleStatus\": {\n    \"description\": \"represents the current status of a scale subresource.\",\n    \"required\": [\n     \"replicas\"\n    ],\n    \"properties\": {\n     \"replicas\": {\n      \"description\": \"actual number of observed instances of the scaled object.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"targetSelector\": {\n      \"description\": \"label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.extensions.v1beta1.SupplementalGroupsStrategyOptions\": {\n    \"description\": \"SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy. Deprecated: use SupplementalGroupsStrategyOptions from policy API Group instead.\",\n    \"properties\": {\n     \"ranges\": {\n      \"description\": \"ranges are the allowed ranges of supplemental groups.  If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.IDRange\"\n      }\n     },\n     \"rule\": {\n      \"description\": \"rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.networking.v1.IPBlock\": {\n    \"description\": \"IPBlock describes a particular CIDR (Ex. \\\"192.168.1.1/24\\\") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.\",\n    \"required\": [\n     \"cidr\"\n    ],\n    \"properties\": {\n     \"cidr\": {\n      \"description\": \"CIDR is a string representing the IP Block Valid examples are \\\"192.168.1.1/24\\\"\",\n      \"type\": \"string\"\n     },\n     \"except\": {\n      \"description\": \"Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \\\"192.168.1.1/24\\\" Except values will be rejected if they are outside the CIDR range\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.networking.v1.NetworkPolicy\": {\n    \"description\": \"NetworkPolicy describes what network traffic is allowed for a set of Pods\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior for this NetworkPolicy.\",\n      \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicySpec\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"networking.k8s.io\",\n      \"kind\": \"NetworkPolicy\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.networking.v1.NetworkPolicyEgressRule\": {\n    \"description\": \"NetworkPolicyEgressRule describes a particular set of traffic that is allowed out of pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and to. This type is beta-level in 1.8\",\n    \"properties\": {\n     \"ports\": {\n      \"description\": \"List of destination ports for outgoing traffic. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicyPort\"\n      }\n     },\n     \"to\": {\n      \"description\": \"List of destinations for outgoing traffic of pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all destinations (traffic not restricted by destination). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the to list.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicyPeer\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.networking.v1.NetworkPolicyIngressRule\": {\n    \"description\": \"NetworkPolicyIngressRule describes a particular set of traffic that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and from.\",\n    \"properties\": {\n     \"from\": {\n      \"description\": \"List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicyPeer\"\n      }\n     },\n     \"ports\": {\n      \"description\": \"List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicyPort\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.networking.v1.NetworkPolicyList\": {\n    \"description\": \"NetworkPolicyList is a list of NetworkPolicy objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of schema objects.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicy\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"networking.k8s.io\",\n      \"kind\": \"NetworkPolicyList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.networking.v1.NetworkPolicyPeer\": {\n    \"description\": \"NetworkPolicyPeer describes a peer to allow traffic from. Only certain combinations of fields are allowed\",\n    \"properties\": {\n     \"ipBlock\": {\n      \"description\": \"IPBlock defines policy on a particular IPBlock. If this field is set then neither of the other fields can be.\",\n      \"$ref\": \"#/definitions/io.k8s.api.networking.v1.IPBlock\"\n     },\n     \"namespaceSelector\": {\n      \"description\": \"Selects Namespaces using cluster-scoped labels. This field follows standard label selector semantics; if present but empty, it selects all namespaces.\\n\\nIf PodSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects all Pods in the Namespaces selected by NamespaceSelector.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"podSelector\": {\n      \"description\": \"This is a label selector which selects Pods. This field follows standard label selector semantics; if present but empty, it selects all pods.\\n\\nIf NamespaceSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects the Pods matching PodSelector in the policy's own Namespace.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     }\n    }\n   },\n   \"io.k8s.api.networking.v1.NetworkPolicyPort\": {\n    \"description\": \"NetworkPolicyPort describes a port to allow traffic on\",\n    \"properties\": {\n     \"port\": {\n      \"description\": \"The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     },\n     \"protocol\": {\n      \"description\": \"The protocol (TCP or UDP) which traffic must match. If not specified, this field defaults to TCP.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.networking.v1.NetworkPolicySpec\": {\n    \"description\": \"NetworkPolicySpec provides the specification of a NetworkPolicy\",\n    \"required\": [\n     \"podSelector\"\n    ],\n    \"properties\": {\n     \"egress\": {\n      \"description\": \"List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicyEgressRule\"\n      }\n     },\n     \"ingress\": {\n      \"description\": \"List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default)\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicyIngressRule\"\n      }\n     },\n     \"podSelector\": {\n      \"description\": \"Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"policyTypes\": {\n      \"description\": \"List of rule types that the NetworkPolicy relates to. Valid options are Ingress, Egress, or Ingress,Egress. If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \\\"Egress\\\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \\\"Egress\\\" (since such a policy would not include an Egress section and would otherwise default to just [ \\\"Ingress\\\" ]). This field is beta-level in 1.8\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.policy.v1beta1.AllowedFlexVolume\": {\n    \"description\": \"AllowedFlexVolume represents a single Flexvolume that is allowed to be used.\",\n    \"required\": [\n     \"driver\"\n    ],\n    \"properties\": {\n     \"driver\": {\n      \"description\": \"driver is the name of the Flexvolume driver.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.policy.v1beta1.AllowedHostPath\": {\n    \"description\": \"AllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined.\",\n    \"properties\": {\n     \"pathPrefix\": {\n      \"description\": \"pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\\n\\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.api.policy.v1beta1.Eviction\": {\n    \"description\": \"Eviction evicts a pod from its node subject to certain policies and safety constraints. This is a subresource of Pod.  A request to cause such an eviction is created by POSTing to .../pods/\\u003cpod name\\u003e/evictions.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"deleteOptions\": {\n      \"description\": \"DeleteOptions may be provided\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"ObjectMeta describes the pod that is being evicted.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"policy\",\n      \"kind\": \"Eviction\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.policy.v1beta1.FSGroupStrategyOptions\": {\n    \"description\": \"FSGroupStrategyOptions defines the strategy type and options used to create the strategy.\",\n    \"properties\": {\n     \"ranges\": {\n      \"description\": \"ranges are the allowed ranges of fs groups.  If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.IDRange\"\n      }\n     },\n     \"rule\": {\n      \"description\": \"rule is the strategy that will dictate what FSGroup is used in the SecurityContext.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.policy.v1beta1.HostPortRange\": {\n    \"description\": \"HostPortRange defines a range of host ports that will be enabled by a policy for pods to use.  It requires both the start and end to be defined.\",\n    \"required\": [\n     \"min\",\n     \"max\"\n    ],\n    \"properties\": {\n     \"max\": {\n      \"description\": \"max is the end of the range, inclusive.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"min\": {\n      \"description\": \"min is the start of the range, inclusive.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.api.policy.v1beta1.IDRange\": {\n    \"description\": \"IDRange provides a min/max of an allowed range of IDs.\",\n    \"required\": [\n     \"min\",\n     \"max\"\n    ],\n    \"properties\": {\n     \"max\": {\n      \"description\": \"max is the end of the range, inclusive.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"min\": {\n      \"description\": \"min is the start of the range, inclusive.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     }\n    }\n   },\n   \"io.k8s.api.policy.v1beta1.PodDisruptionBudget\": {\n    \"description\": \"PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior of the PodDisruptionBudget.\",\n      \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetSpec\"\n     },\n     \"status\": {\n      \"description\": \"Most recently observed status of the PodDisruptionBudget.\",\n      \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"policy\",\n      \"kind\": \"PodDisruptionBudget\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.policy.v1beta1.PodDisruptionBudgetList\": {\n    \"description\": \"PodDisruptionBudgetList is a collection of PodDisruptionBudgets.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"policy\",\n      \"kind\": \"PodDisruptionBudgetList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.policy.v1beta1.PodDisruptionBudgetSpec\": {\n    \"description\": \"PodDisruptionBudgetSpec is a description of a PodDisruptionBudget.\",\n    \"properties\": {\n     \"maxUnavailable\": {\n      \"description\": \"An eviction is allowed if at most \\\"maxUnavailable\\\" pods selected by \\\"selector\\\" are unavailable after the eviction, i.e. even in absence of the evicted pod. For example, one can prevent all voluntary evictions by specifying 0. This is a mutually exclusive setting with \\\"minAvailable\\\".\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     },\n     \"minAvailable\": {\n      \"description\": \"An eviction is allowed if at least \\\"minAvailable\\\" pods selected by \\\"selector\\\" will still be available after the eviction, i.e. even in the absence of the evicted pod.  So for example you can prevent all voluntary evictions by specifying \\\"100%\\\".\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     },\n     \"selector\": {\n      \"description\": \"Label query over pods whose evictions are managed by the disruption budget.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     }\n    }\n   },\n   \"io.k8s.api.policy.v1beta1.PodDisruptionBudgetStatus\": {\n    \"description\": \"PodDisruptionBudgetStatus represents information about the status of a PodDisruptionBudget. Status may trail the actual state of a system.\",\n    \"required\": [\n     \"disruptedPods\",\n     \"disruptionsAllowed\",\n     \"currentHealthy\",\n     \"desiredHealthy\",\n     \"expectedPods\"\n    ],\n    \"properties\": {\n     \"currentHealthy\": {\n      \"description\": \"current number of healthy pods\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"desiredHealthy\": {\n      \"description\": \"minimum desired number of healthy pods\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"disruptedPods\": {\n      \"description\": \"DisruptedPods contains information about pods whose eviction was processed by the API server eviction subresource handler but has not yet been observed by the PodDisruptionBudget controller. A pod will be in this map from the time when the API server processed the eviction request to the time when the pod is seen by PDB controller as having been marked for deletion (or after a timeout). The key in the map is the name of the pod and the value is the time when the API server processed the eviction request. If the deletion didn't occur and a pod is still there it will be removed from the list automatically by PodDisruptionBudget controller after some time. If everything goes smooth this map should be empty for the most of the time. Large number of entries in the map may indicate problems with pod deletions.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n      }\n     },\n     \"disruptionsAllowed\": {\n      \"description\": \"Number of pod disruptions that are currently allowed.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"expectedPods\": {\n      \"description\": \"total number of pods counted by this disruption budget\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"Most recent generation observed when updating this PDB status. PodDisruptionsAllowed and other status informatio is valid only if observedGeneration equals to PDB's object generation.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     }\n    }\n   },\n   \"io.k8s.api.policy.v1beta1.PodSecurityPolicy\": {\n    \"description\": \"PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"spec defines the policy enforced.\",\n      \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicySpec\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"policy\",\n      \"kind\": \"PodSecurityPolicy\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.policy.v1beta1.PodSecurityPolicyList\": {\n    \"description\": \"PodSecurityPolicyList is a list of PodSecurityPolicy objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"items is a list of schema objects.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodSecurityPolicy\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"policy\",\n      \"kind\": \"PodSecurityPolicyList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.policy.v1beta1.PodSecurityPolicySpec\": {\n    \"description\": \"PodSecurityPolicySpec defines the policy enforced.\",\n    \"required\": [\n     \"seLinux\",\n     \"runAsUser\",\n     \"supplementalGroups\",\n     \"fsGroup\"\n    ],\n    \"properties\": {\n     \"allowPrivilegeEscalation\": {\n      \"description\": \"allowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.\",\n      \"type\": \"boolean\"\n     },\n     \"allowedCapabilities\": {\n      \"description\": \"allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"allowedFlexVolumes\": {\n      \"description\": \"allowedFlexVolumes is a whitelist of allowed Flexvolumes.  Empty or nil indicates that all Flexvolumes may be used.  This parameter is effective only when the usage of the Flexvolumes is allowed in the \\\"volumes\\\" field.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.AllowedFlexVolume\"\n      }\n     },\n     \"allowedHostPaths\": {\n      \"description\": \"allowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.AllowedHostPath\"\n      }\n     },\n     \"allowedUnsafeSysctls\": {\n      \"description\": \"allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \\\"*\\\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection.\\n\\nExamples: e.g. \\\"foo/*\\\" allows \\\"foo/bar\\\", \\\"foo/baz\\\", etc. e.g. \\\"foo.*\\\" allows \\\"foo.bar\\\", \\\"foo.baz\\\", etc.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"defaultAddCapabilities\": {\n      \"description\": \"defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability.  You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"defaultAllowPrivilegeEscalation\": {\n      \"description\": \"defaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.\",\n      \"type\": \"boolean\"\n     },\n     \"forbiddenSysctls\": {\n      \"description\": \"forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \\\"*\\\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\\n\\nExamples: e.g. \\\"foo/*\\\" forbids \\\"foo/bar\\\", \\\"foo/baz\\\", etc. e.g. \\\"foo.*\\\" forbids \\\"foo.bar\\\", \\\"foo.baz\\\", etc.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"fsGroup\": {\n      \"description\": \"fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.\",\n      \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.FSGroupStrategyOptions\"\n     },\n     \"hostIPC\": {\n      \"description\": \"hostIPC determines if the policy allows the use of HostIPC in the pod spec.\",\n      \"type\": \"boolean\"\n     },\n     \"hostNetwork\": {\n      \"description\": \"hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.\",\n      \"type\": \"boolean\"\n     },\n     \"hostPID\": {\n      \"description\": \"hostPID determines if the policy allows the use of HostPID in the pod spec.\",\n      \"type\": \"boolean\"\n     },\n     \"hostPorts\": {\n      \"description\": \"hostPorts determines which host port ranges are allowed to be exposed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.HostPortRange\"\n      }\n     },\n     \"privileged\": {\n      \"description\": \"privileged determines if a pod can request to be run as privileged.\",\n      \"type\": \"boolean\"\n     },\n     \"readOnlyRootFilesystem\": {\n      \"description\": \"readOnlyRootFilesystem when set to true will force containers to run with a read only root file system.  If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.\",\n      \"type\": \"boolean\"\n     },\n     \"requiredDropCapabilities\": {\n      \"description\": \"requiredDropCapabilities are the capabilities that will be dropped from the container.  These are required to be dropped and cannot be added.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"runAsUser\": {\n      \"description\": \"runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.\",\n      \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.RunAsUserStrategyOptions\"\n     },\n     \"seLinux\": {\n      \"description\": \"seLinux is the strategy that will dictate the allowable labels that may be set.\",\n      \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.SELinuxStrategyOptions\"\n     },\n     \"supplementalGroups\": {\n      \"description\": \"supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.\",\n      \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.SupplementalGroupsStrategyOptions\"\n     },\n     \"volumes\": {\n      \"description\": \"volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.policy.v1beta1.RunAsUserStrategyOptions\": {\n    \"description\": \"RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy.\",\n    \"required\": [\n     \"rule\"\n    ],\n    \"properties\": {\n     \"ranges\": {\n      \"description\": \"ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.IDRange\"\n      }\n     },\n     \"rule\": {\n      \"description\": \"rule is the strategy that will dictate the allowable RunAsUser values that may be set.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.policy.v1beta1.SELinuxStrategyOptions\": {\n    \"description\": \"SELinuxStrategyOptions defines the strategy type and any options used to create the strategy.\",\n    \"required\": [\n     \"rule\"\n    ],\n    \"properties\": {\n     \"rule\": {\n      \"description\": \"rule is the strategy that will dictate the allowable labels that may be set.\",\n      \"type\": \"string\"\n     },\n     \"seLinuxOptions\": {\n      \"description\": \"seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/\",\n      \"$ref\": \"#/definitions/io.k8s.api.core.v1.SELinuxOptions\"\n     }\n    }\n   },\n   \"io.k8s.api.policy.v1beta1.SupplementalGroupsStrategyOptions\": {\n    \"description\": \"SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy.\",\n    \"properties\": {\n     \"ranges\": {\n      \"description\": \"ranges are the allowed ranges of supplemental groups.  If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.IDRange\"\n      }\n     },\n     \"rule\": {\n      \"description\": \"rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.rbac.v1.AggregationRule\": {\n    \"description\": \"AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole\",\n    \"properties\": {\n     \"clusterRoleSelectors\": {\n      \"description\": \"ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.rbac.v1.ClusterRole\": {\n    \"description\": \"ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.\",\n    \"required\": [\n     \"rules\"\n    ],\n    \"properties\": {\n     \"aggregationRule\": {\n      \"description\": \"AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller.\",\n      \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.AggregationRule\"\n     },\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"rules\": {\n      \"description\": \"Rules holds all the PolicyRules for this ClusterRole\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.PolicyRule\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1.ClusterRoleBinding\": {\n    \"description\": \"ClusterRoleBinding references a ClusterRole, but not contain it.  It can reference a ClusterRole in the global namespace, and adds who information via Subject.\",\n    \"required\": [\n     \"roleRef\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"roleRef\": {\n      \"description\": \"RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.\",\n      \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.RoleRef\"\n     },\n     \"subjects\": {\n      \"description\": \"Subjects holds references to the objects the role applies to.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.Subject\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1.ClusterRoleBindingList\": {\n    \"description\": \"ClusterRoleBindingList is a collection of ClusterRoleBindings\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of ClusterRoleBindings\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRoleBinding\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBindingList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1.ClusterRoleList\": {\n    \"description\": \"ClusterRoleList is a collection of ClusterRoles\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of ClusterRoles\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.ClusterRole\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1.PolicyRule\": {\n    \"description\": \"PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.\",\n    \"required\": [\n     \"verbs\"\n    ],\n    \"properties\": {\n     \"apiGroups\": {\n      \"description\": \"APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"nonResourceURLs\": {\n      \"description\": \"NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \\\"pods\\\" or \\\"secrets\\\") or non-resource URL paths (such as \\\"/api\\\"),  but not both.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"resourceNames\": {\n      \"description\": \"ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"resources\": {\n      \"description\": \"Resources is a list of resources this rule applies to.  ResourceAll represents all resources.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"verbs\": {\n      \"description\": \"Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule.  VerbAll represents all kinds.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.rbac.v1.Role\": {\n    \"description\": \"Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.\",\n    \"required\": [\n     \"rules\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"rules\": {\n      \"description\": \"Rules holds all the PolicyRules for this Role\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.PolicyRule\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1.RoleBinding\": {\n    \"description\": \"RoleBinding references a role, but does not contain it.  It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in.  RoleBindings in a given namespace only have effect in that namespace.\",\n    \"required\": [\n     \"roleRef\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"roleRef\": {\n      \"description\": \"RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.\",\n      \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.RoleRef\"\n     },\n     \"subjects\": {\n      \"description\": \"Subjects holds references to the objects the role applies to.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.Subject\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1.RoleBindingList\": {\n    \"description\": \"RoleBindingList is a collection of RoleBindings\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of RoleBindings\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.RoleBinding\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBindingList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1.RoleList\": {\n    \"description\": \"RoleList is a collection of Roles\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of Roles\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1.Role\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1.RoleRef\": {\n    \"description\": \"RoleRef contains information that points to the role being used\",\n    \"required\": [\n     \"apiGroup\",\n     \"kind\",\n     \"name\"\n    ],\n    \"properties\": {\n     \"apiGroup\": {\n      \"description\": \"APIGroup is the group for the resource being referenced\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is the type of resource being referenced\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name is the name of resource being referenced\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.rbac.v1.Subject\": {\n    \"description\": \"Subject contains a reference to the object or user identities a role binding applies to.  This can either hold a direct API object reference, or a value for non-objects such as user and group names.\",\n    \"required\": [\n     \"kind\",\n     \"name\"\n    ],\n    \"properties\": {\n     \"apiGroup\": {\n      \"description\": \"APIGroup holds the API group of the referenced subject. Defaults to \\\"\\\" for ServiceAccount subjects. Defaults to \\\"rbac.authorization.k8s.io\\\" for User and Group subjects.\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind of object being referenced. Values defined by this API group are \\\"User\\\", \\\"Group\\\", and \\\"ServiceAccount\\\". If the Authorizer does not recognized the kind value, the Authorizer should report an error.\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name of the object being referenced.\",\n      \"type\": \"string\"\n     },\n     \"namespace\": {\n      \"description\": \"Namespace of the referenced object.  If the object kind is non-namespace, such as \\\"User\\\" or \\\"Group\\\", and this value is not empty the Authorizer should report an error.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.rbac.v1alpha1.AggregationRule\": {\n    \"description\": \"AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole\",\n    \"properties\": {\n     \"clusterRoleSelectors\": {\n      \"description\": \"ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.rbac.v1alpha1.ClusterRole\": {\n    \"description\": \"ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.\",\n    \"required\": [\n     \"rules\"\n    ],\n    \"properties\": {\n     \"aggregationRule\": {\n      \"description\": \"AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller.\",\n      \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.AggregationRule\"\n     },\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"rules\": {\n      \"description\": \"Rules holds all the PolicyRules for this ClusterRole\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.PolicyRule\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1alpha1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1alpha1.ClusterRoleBinding\": {\n    \"description\": \"ClusterRoleBinding references a ClusterRole, but not contain it.  It can reference a ClusterRole in the global namespace, and adds who information via Subject.\",\n    \"required\": [\n     \"roleRef\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"roleRef\": {\n      \"description\": \"RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.\",\n      \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.RoleRef\"\n     },\n     \"subjects\": {\n      \"description\": \"Subjects holds references to the objects the role applies to.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.Subject\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1alpha1.ClusterRoleBindingList\": {\n    \"description\": \"ClusterRoleBindingList is a collection of ClusterRoleBindings\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of ClusterRoleBindings\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRoleBinding\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBindingList\",\n      \"version\": \"v1alpha1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1alpha1.ClusterRoleList\": {\n    \"description\": \"ClusterRoleList is a collection of ClusterRoles\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of ClusterRoles\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRole\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleList\",\n      \"version\": \"v1alpha1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1alpha1.PolicyRule\": {\n    \"description\": \"PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.\",\n    \"required\": [\n     \"verbs\"\n    ],\n    \"properties\": {\n     \"apiGroups\": {\n      \"description\": \"APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"nonResourceURLs\": {\n      \"description\": \"NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full, final step in the path This name is intentionally different than the internal type so that the DefaultConvert works nicely and because the ordering may be different. Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \\\"pods\\\" or \\\"secrets\\\") or non-resource URL paths (such as \\\"/api\\\"),  but not both.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"resourceNames\": {\n      \"description\": \"ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"resources\": {\n      \"description\": \"Resources is a list of resources this rule applies to.  ResourceAll represents all resources.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"verbs\": {\n      \"description\": \"Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule.  VerbAll represents all kinds.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.rbac.v1alpha1.Role\": {\n    \"description\": \"Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.\",\n    \"required\": [\n     \"rules\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"rules\": {\n      \"description\": \"Rules holds all the PolicyRules for this Role\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.PolicyRule\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1alpha1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1alpha1.RoleBinding\": {\n    \"description\": \"RoleBinding references a role, but does not contain it.  It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in.  RoleBindings in a given namespace only have effect in that namespace.\",\n    \"required\": [\n     \"roleRef\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"roleRef\": {\n      \"description\": \"RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.\",\n      \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.RoleRef\"\n     },\n     \"subjects\": {\n      \"description\": \"Subjects holds references to the objects the role applies to.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.Subject\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1alpha1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1alpha1.RoleBindingList\": {\n    \"description\": \"RoleBindingList is a collection of RoleBindings\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of RoleBindings\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.RoleBinding\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBindingList\",\n      \"version\": \"v1alpha1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1alpha1.RoleList\": {\n    \"description\": \"RoleList is a collection of Roles\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of Roles\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.Role\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleList\",\n      \"version\": \"v1alpha1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1alpha1.RoleRef\": {\n    \"description\": \"RoleRef contains information that points to the role being used\",\n    \"required\": [\n     \"apiGroup\",\n     \"kind\",\n     \"name\"\n    ],\n    \"properties\": {\n     \"apiGroup\": {\n      \"description\": \"APIGroup is the group for the resource being referenced\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is the type of resource being referenced\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name is the name of resource being referenced\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.rbac.v1alpha1.Subject\": {\n    \"description\": \"Subject contains a reference to the object or user identities a role binding applies to.  This can either hold a direct API object reference, or a value for non-objects such as user and group names.\",\n    \"required\": [\n     \"kind\",\n     \"name\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion holds the API group and version of the referenced subject. Defaults to \\\"v1\\\" for ServiceAccount subjects. Defaults to \\\"rbac.authorization.k8s.io/v1alpha1\\\" for User and Group subjects.\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind of object being referenced. Values defined by this API group are \\\"User\\\", \\\"Group\\\", and \\\"ServiceAccount\\\". If the Authorizer does not recognized the kind value, the Authorizer should report an error.\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name of the object being referenced.\",\n      \"type\": \"string\"\n     },\n     \"namespace\": {\n      \"description\": \"Namespace of the referenced object.  If the object kind is non-namespace, such as \\\"User\\\" or \\\"Group\\\", and this value is not empty the Authorizer should report an error.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.rbac.v1beta1.AggregationRule\": {\n    \"description\": \"AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole\",\n    \"properties\": {\n     \"clusterRoleSelectors\": {\n      \"description\": \"ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.rbac.v1beta1.ClusterRole\": {\n    \"description\": \"ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.\",\n    \"required\": [\n     \"rules\"\n    ],\n    \"properties\": {\n     \"aggregationRule\": {\n      \"description\": \"AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller.\",\n      \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.AggregationRule\"\n     },\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"rules\": {\n      \"description\": \"Rules holds all the PolicyRules for this ClusterRole\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.PolicyRule\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRole\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1beta1.ClusterRoleBinding\": {\n    \"description\": \"ClusterRoleBinding references a ClusterRole, but not contain it.  It can reference a ClusterRole in the global namespace, and adds who information via Subject.\",\n    \"required\": [\n     \"roleRef\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"roleRef\": {\n      \"description\": \"RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.\",\n      \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.RoleRef\"\n     },\n     \"subjects\": {\n      \"description\": \"Subjects holds references to the objects the role applies to.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.Subject\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1beta1.ClusterRoleBindingList\": {\n    \"description\": \"ClusterRoleBindingList is a collection of ClusterRoleBindings\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of ClusterRoleBindings\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleBindingList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1beta1.ClusterRoleList\": {\n    \"description\": \"ClusterRoleList is a collection of ClusterRoles\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of ClusterRoles\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"ClusterRoleList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1beta1.PolicyRule\": {\n    \"description\": \"PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.\",\n    \"required\": [\n     \"verbs\"\n    ],\n    \"properties\": {\n     \"apiGroups\": {\n      \"description\": \"APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"nonResourceURLs\": {\n      \"description\": \"NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \\\"pods\\\" or \\\"secrets\\\") or non-resource URL paths (such as \\\"/api\\\"),  but not both.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"resourceNames\": {\n      \"description\": \"ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"resources\": {\n      \"description\": \"Resources is a list of resources this rule applies to.  '*' represents all resources in the specified apiGroups. '*/foo' represents the subresource 'foo' for all resources in the specified apiGroups.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"verbs\": {\n      \"description\": \"Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule.  VerbAll represents all kinds.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.rbac.v1beta1.Role\": {\n    \"description\": \"Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.\",\n    \"required\": [\n     \"rules\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"rules\": {\n      \"description\": \"Rules holds all the PolicyRules for this Role\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.PolicyRule\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"Role\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1beta1.RoleBinding\": {\n    \"description\": \"RoleBinding references a role, but does not contain it.  It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in.  RoleBindings in a given namespace only have effect in that namespace.\",\n    \"required\": [\n     \"roleRef\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"roleRef\": {\n      \"description\": \"RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.\",\n      \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.RoleRef\"\n     },\n     \"subjects\": {\n      \"description\": \"Subjects holds references to the objects the role applies to.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.Subject\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBinding\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1beta1.RoleBindingList\": {\n    \"description\": \"RoleBindingList is a collection of RoleBindings\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of RoleBindings\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleBindingList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1beta1.RoleList\": {\n    \"description\": \"RoleList is a collection of Roles\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of Roles\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.Role\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"RoleList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.rbac.v1beta1.RoleRef\": {\n    \"description\": \"RoleRef contains information that points to the role being used\",\n    \"required\": [\n     \"apiGroup\",\n     \"kind\",\n     \"name\"\n    ],\n    \"properties\": {\n     \"apiGroup\": {\n      \"description\": \"APIGroup is the group for the resource being referenced\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is the type of resource being referenced\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name is the name of resource being referenced\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.rbac.v1beta1.Subject\": {\n    \"description\": \"Subject contains a reference to the object or user identities a role binding applies to.  This can either hold a direct API object reference, or a value for non-objects such as user and group names.\",\n    \"required\": [\n     \"kind\",\n     \"name\"\n    ],\n    \"properties\": {\n     \"apiGroup\": {\n      \"description\": \"APIGroup holds the API group of the referenced subject. Defaults to \\\"\\\" for ServiceAccount subjects. Defaults to \\\"rbac.authorization.k8s.io\\\" for User and Group subjects.\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind of object being referenced. Values defined by this API group are \\\"User\\\", \\\"Group\\\", and \\\"ServiceAccount\\\". If the Authorizer does not recognized the kind value, the Authorizer should report an error.\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name of the object being referenced.\",\n      \"type\": \"string\"\n     },\n     \"namespace\": {\n      \"description\": \"Namespace of the referenced object.  If the object kind is non-namespace, such as \\\"User\\\" or \\\"Group\\\", and this value is not empty the Authorizer should report an error.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.scheduling.v1alpha1.PriorityClass\": {\n    \"description\": \"PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.\",\n    \"required\": [\n     \"value\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"description\": {\n      \"description\": \"description is an arbitrary string that usually provides guidelines on when this priority class should be used.\",\n      \"type\": \"string\"\n     },\n     \"globalDefault\": {\n      \"description\": \"globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.\",\n      \"type\": \"boolean\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"value\": {\n      \"description\": \"The value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClass\",\n      \"version\": \"v1alpha1\"\n     }\n    ]\n   },\n   \"io.k8s.api.scheduling.v1alpha1.PriorityClassList\": {\n    \"description\": \"PriorityClassList is a collection of priority classes.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"items is the list of PriorityClasses\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1alpha1.PriorityClass\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClassList\",\n      \"version\": \"v1alpha1\"\n     }\n    ]\n   },\n   \"io.k8s.api.scheduling.v1beta1.PriorityClass\": {\n    \"description\": \"PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.\",\n    \"required\": [\n     \"value\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"description\": {\n      \"description\": \"description is an arbitrary string that usually provides guidelines on when this priority class should be used.\",\n      \"type\": \"string\"\n     },\n     \"globalDefault\": {\n      \"description\": \"globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.\",\n      \"type\": \"boolean\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"value\": {\n      \"description\": \"The value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClass\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.scheduling.v1beta1.PriorityClassList\": {\n    \"description\": \"PriorityClassList is a collection of priority classes.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"items is the list of PriorityClasses\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.scheduling.v1beta1.PriorityClass\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"PriorityClassList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.settings.v1alpha1.PodPreset\": {\n    \"description\": \"PodPreset is a policy resource that defines additional runtime requirements for a Pod.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"$ref\": \"#/definitions/io.k8s.api.settings.v1alpha1.PodPresetSpec\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"settings.k8s.io\",\n      \"kind\": \"PodPreset\",\n      \"version\": \"v1alpha1\"\n     }\n    ]\n   },\n   \"io.k8s.api.settings.v1alpha1.PodPresetList\": {\n    \"description\": \"PodPresetList is a list of PodPreset objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of schema objects.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.settings.v1alpha1.PodPreset\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"settings.k8s.io\",\n      \"kind\": \"PodPresetList\",\n      \"version\": \"v1alpha1\"\n     }\n    ]\n   },\n   \"io.k8s.api.settings.v1alpha1.PodPresetSpec\": {\n    \"description\": \"PodPresetSpec is a description of a pod preset.\",\n    \"properties\": {\n     \"env\": {\n      \"description\": \"Env defines the collection of EnvVar to inject into containers.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.EnvVar\"\n      }\n     },\n     \"envFrom\": {\n      \"description\": \"EnvFrom defines the collection of EnvFromSource to inject into containers.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.EnvFromSource\"\n      }\n     },\n     \"selector\": {\n      \"description\": \"Selector is a label query over a set of resources, in this case pods. Required.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"volumeMounts\": {\n      \"description\": \"VolumeMounts defines the collection of VolumeMount to inject into containers.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.VolumeMount\"\n      }\n     },\n     \"volumes\": {\n      \"description\": \"Volumes defines the collection of Volume to inject into the pod.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.Volume\"\n      }\n     }\n    }\n   },\n   \"io.k8s.api.storage.v1.StorageClass\": {\n    \"description\": \"StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\\n\\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.\",\n    \"required\": [\n     \"provisioner\"\n    ],\n    \"properties\": {\n     \"allowVolumeExpansion\": {\n      \"description\": \"AllowVolumeExpansion shows whether the storage class allow volume expand\",\n      \"type\": \"boolean\"\n     },\n     \"allowedTopologies\": {\n      \"description\": \"Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is alpha-level and is only honored by servers that enable the DynamicProvisioningScheduling feature.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.TopologySelectorTerm\"\n      }\n     },\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"mountOptions\": {\n      \"description\": \"Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\\\"ro\\\", \\\"soft\\\"]. Not validated - mount of the PVs will simply fail if one is invalid.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"parameters\": {\n      \"description\": \"Parameters holds the parameters for the provisioner that should create volumes of this storage class.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"provisioner\": {\n      \"description\": \"Provisioner indicates the type of the provisioner.\",\n      \"type\": \"string\"\n     },\n     \"reclaimPolicy\": {\n      \"description\": \"Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.\",\n      \"type\": \"string\"\n     },\n     \"volumeBindingMode\": {\n      \"description\": \"VolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound.  When unset, VolumeBindingImmediate is used. This field is alpha-level and is only honored by servers that enable the VolumeScheduling feature.\",\n      \"type\": \"string\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClass\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.storage.v1.StorageClassList\": {\n    \"description\": \"StorageClassList is a collection of storage classes.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of StorageClasses\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.storage.v1.StorageClass\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClassList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.api.storage.v1alpha1.VolumeAttachment\": {\n    \"description\": \"VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node.\\n\\nVolumeAttachment objects are non-namespaced.\",\n    \"required\": [\n     \"spec\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system.\",\n      \"$ref\": \"#/definitions/io.k8s.api.storage.v1alpha1.VolumeAttachmentSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status of the VolumeAttachment request. Populated by the entity completing the attach or detach operation, i.e. the external-attacher.\",\n      \"$ref\": \"#/definitions/io.k8s.api.storage.v1alpha1.VolumeAttachmentStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachment\",\n      \"version\": \"v1alpha1\"\n     }\n    ]\n   },\n   \"io.k8s.api.storage.v1alpha1.VolumeAttachmentList\": {\n    \"description\": \"VolumeAttachmentList is a collection of VolumeAttachment objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of VolumeAttachments\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.storage.v1alpha1.VolumeAttachment\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachmentList\",\n      \"version\": \"v1alpha1\"\n     }\n    ]\n   },\n   \"io.k8s.api.storage.v1alpha1.VolumeAttachmentSource\": {\n    \"description\": \"VolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.\",\n    \"properties\": {\n     \"persistentVolumeName\": {\n      \"description\": \"Name of the persistent volume to attach.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.storage.v1alpha1.VolumeAttachmentSpec\": {\n    \"description\": \"VolumeAttachmentSpec is the specification of a VolumeAttachment request.\",\n    \"required\": [\n     \"attacher\",\n     \"source\",\n     \"nodeName\"\n    ],\n    \"properties\": {\n     \"attacher\": {\n      \"description\": \"Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().\",\n      \"type\": \"string\"\n     },\n     \"nodeName\": {\n      \"description\": \"The node that the volume should be attached to.\",\n      \"type\": \"string\"\n     },\n     \"source\": {\n      \"description\": \"Source represents the volume that should be attached.\",\n      \"$ref\": \"#/definitions/io.k8s.api.storage.v1alpha1.VolumeAttachmentSource\"\n     }\n    }\n   },\n   \"io.k8s.api.storage.v1alpha1.VolumeAttachmentStatus\": {\n    \"description\": \"VolumeAttachmentStatus is the status of a VolumeAttachment request.\",\n    \"required\": [\n     \"attached\"\n    ],\n    \"properties\": {\n     \"attachError\": {\n      \"description\": \"The last error encountered during attach operation, if any. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.\",\n      \"$ref\": \"#/definitions/io.k8s.api.storage.v1alpha1.VolumeError\"\n     },\n     \"attached\": {\n      \"description\": \"Indicates the volume is successfully attached. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.\",\n      \"type\": \"boolean\"\n     },\n     \"attachmentMetadata\": {\n      \"description\": \"Upon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"detachError\": {\n      \"description\": \"The last error encountered during detach operation, if any. This field must only be set by the entity completing the detach operation, i.e. the external-attacher.\",\n      \"$ref\": \"#/definitions/io.k8s.api.storage.v1alpha1.VolumeError\"\n     }\n    }\n   },\n   \"io.k8s.api.storage.v1alpha1.VolumeError\": {\n    \"description\": \"VolumeError captures an error encountered during a volume operation.\",\n    \"properties\": {\n     \"message\": {\n      \"description\": \"String detailing the error encountered during Attach or Detach operation. This string maybe logged, so it should not contain sensitive information.\",\n      \"type\": \"string\"\n     },\n     \"time\": {\n      \"description\": \"Time the error was encountered.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     }\n    }\n   },\n   \"io.k8s.api.storage.v1beta1.StorageClass\": {\n    \"description\": \"StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\\n\\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.\",\n    \"required\": [\n     \"provisioner\"\n    ],\n    \"properties\": {\n     \"allowVolumeExpansion\": {\n      \"description\": \"AllowVolumeExpansion shows whether the storage class allow volume expand\",\n      \"type\": \"boolean\"\n     },\n     \"allowedTopologies\": {\n      \"description\": \"Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is alpha-level and is only honored by servers that enable the DynamicProvisioningScheduling feature.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.core.v1.TopologySelectorTerm\"\n      }\n     },\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"mountOptions\": {\n      \"description\": \"Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\\\"ro\\\", \\\"soft\\\"]. Not validated - mount of the PVs will simply fail if one is invalid.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"parameters\": {\n      \"description\": \"Parameters holds the parameters for the provisioner that should create volumes of this storage class.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"provisioner\": {\n      \"description\": \"Provisioner indicates the type of the provisioner.\",\n      \"type\": \"string\"\n     },\n     \"reclaimPolicy\": {\n      \"description\": \"Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.\",\n      \"type\": \"string\"\n     },\n     \"volumeBindingMode\": {\n      \"description\": \"VolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound.  When unset, VolumeBindingImmediate is used. This field is alpha-level and is only honored by servers that enable the VolumeScheduling feature.\",\n      \"type\": \"string\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClass\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.storage.v1beta1.StorageClassList\": {\n    \"description\": \"StorageClassList is a collection of storage classes.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of StorageClasses\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.StorageClass\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"StorageClassList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.storage.v1beta1.VolumeAttachment\": {\n    \"description\": \"VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node.\\n\\nVolumeAttachment objects are non-namespaced.\",\n    \"required\": [\n     \"spec\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system.\",\n      \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status of the VolumeAttachment request. Populated by the entity completing the attach or detach operation, i.e. the external-attacher.\",\n      \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachment\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.storage.v1beta1.VolumeAttachmentList\": {\n    \"description\": \"VolumeAttachmentList is a collection of VolumeAttachment objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of VolumeAttachments\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachment\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"VolumeAttachmentList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.api.storage.v1beta1.VolumeAttachmentSource\": {\n    \"description\": \"VolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.\",\n    \"properties\": {\n     \"persistentVolumeName\": {\n      \"description\": \"Name of the persistent volume to attach.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.api.storage.v1beta1.VolumeAttachmentSpec\": {\n    \"description\": \"VolumeAttachmentSpec is the specification of a VolumeAttachment request.\",\n    \"required\": [\n     \"attacher\",\n     \"source\",\n     \"nodeName\"\n    ],\n    \"properties\": {\n     \"attacher\": {\n      \"description\": \"Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().\",\n      \"type\": \"string\"\n     },\n     \"nodeName\": {\n      \"description\": \"The node that the volume should be attached to.\",\n      \"type\": \"string\"\n     },\n     \"source\": {\n      \"description\": \"Source represents the volume that should be attached.\",\n      \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.VolumeAttachmentSource\"\n     }\n    }\n   },\n   \"io.k8s.api.storage.v1beta1.VolumeAttachmentStatus\": {\n    \"description\": \"VolumeAttachmentStatus is the status of a VolumeAttachment request.\",\n    \"required\": [\n     \"attached\"\n    ],\n    \"properties\": {\n     \"attachError\": {\n      \"description\": \"The last error encountered during attach operation, if any. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.\",\n      \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.VolumeError\"\n     },\n     \"attached\": {\n      \"description\": \"Indicates the volume is successfully attached. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.\",\n      \"type\": \"boolean\"\n     },\n     \"attachmentMetadata\": {\n      \"description\": \"Upon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"detachError\": {\n      \"description\": \"The last error encountered during detach operation, if any. This field must only be set by the entity completing the detach operation, i.e. the external-attacher.\",\n      \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.VolumeError\"\n     }\n    }\n   },\n   \"io.k8s.api.storage.v1beta1.VolumeError\": {\n    \"description\": \"VolumeError captures an error encountered during a volume operation.\",\n    \"properties\": {\n     \"message\": {\n      \"description\": \"String detailing the error encountered during Attach or Detach operation. This string maybe logged, so it should not contain sensitive information.\",\n      \"type\": \"string\"\n     },\n     \"time\": {\n      \"description\": \"Time the error was encountered.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     }\n    }\n   },\n   \"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceColumnDefinition\": {\n    \"description\": \"CustomResourceColumnDefinition specifies a column for server side printing.\",\n    \"required\": [\n     \"name\",\n     \"type\",\n     \"JSONPath\"\n    ],\n    \"properties\": {\n     \"JSONPath\": {\n      \"description\": \"JSONPath is a simple JSON path, i.e. with array notation.\",\n      \"type\": \"string\"\n     },\n     \"description\": {\n      \"description\": \"description is a human readable description of this column.\",\n      \"type\": \"string\"\n     },\n     \"format\": {\n      \"description\": \"format is an optional OpenAPI type definition for this column. The 'name' format is applied to the primary identifier column to assist in clients identifying column is the resource name. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"name is a human readable name for the column.\",\n      \"type\": \"string\"\n     },\n     \"priority\": {\n      \"description\": \"priority is an integer defining the relative importance of this column compared to others. Lower numbers are considered higher priority. Columns that may be omitted in limited space scenarios should be given a higher priority.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"type\": {\n      \"description\": \"type is an OpenAPI type definition for this column. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition\": {\n    \"description\": \"CustomResourceDefinition represents a resource that should be exposed on the API server.  Its name MUST be in the format \\u003c.spec.name\\u003e.\\u003c.spec.group\\u003e.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec describes how the user wants the resources to appear\",\n      \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status indicates the actual state of the CustomResourceDefinition\",\n      \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apiextensions.k8s.io\",\n      \"kind\": \"CustomResourceDefinition\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionCondition\": {\n    \"description\": \"CustomResourceDefinitionCondition contains details for the current condition of this pod.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"Human-readable message indicating details about last transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"Unique, one-word, CamelCase reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status is the status of the condition. Can be True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type is the type of the condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionList\": {\n    \"description\": \"CustomResourceDefinitionList is a list of CustomResourceDefinition objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items individual CustomResourceDefinitions\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinition\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apiextensions.k8s.io\",\n      \"kind\": \"CustomResourceDefinitionList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionNames\": {\n    \"description\": \"CustomResourceDefinitionNames indicates the names to serve this CustomResourceDefinition\",\n    \"required\": [\n     \"plural\",\n     \"kind\"\n    ],\n    \"properties\": {\n     \"categories\": {\n      \"description\": \"Categories is a list of grouped resources custom resources belong to (e.g. 'all')\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is the serialized kind of the resource.  It is normally CamelCase and singular.\",\n      \"type\": \"string\"\n     },\n     \"listKind\": {\n      \"description\": \"ListKind is the serialized kind of the list for this resource.  Defaults to \\u003ckind\\u003eList.\",\n      \"type\": \"string\"\n     },\n     \"plural\": {\n      \"description\": \"Plural is the plural name of the resource to serve.  It must match the name of the CustomResourceDefinition-registration too: plural.group and it must be all lowercase.\",\n      \"type\": \"string\"\n     },\n     \"shortNames\": {\n      \"description\": \"ShortNames are short names for the resource.  It must be all lowercase.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"singular\": {\n      \"description\": \"Singular is the singular name of the resource.  It must be all lowercase  Defaults to lowercased \\u003ckind\\u003e\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionSpec\": {\n    \"description\": \"CustomResourceDefinitionSpec describes how a user wants their resource to appear\",\n    \"required\": [\n     \"group\",\n     \"names\",\n     \"scope\"\n    ],\n    \"properties\": {\n     \"additionalPrinterColumns\": {\n      \"description\": \"AdditionalPrinterColumns are additional columns shown e.g. in kubectl next to the name. Defaults to a created-at column.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceColumnDefinition\"\n      }\n     },\n     \"group\": {\n      \"description\": \"Group is the group this resource belongs in\",\n      \"type\": \"string\"\n     },\n     \"names\": {\n      \"description\": \"Names are the names used to describe this custom resource\",\n      \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionNames\"\n     },\n     \"scope\": {\n      \"description\": \"Scope indicates whether this resource is cluster or namespace scoped.  Default is namespaced\",\n      \"type\": \"string\"\n     },\n     \"subresources\": {\n      \"description\": \"Subresources describes the subresources for CustomResources\",\n      \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresources\"\n     },\n     \"validation\": {\n      \"description\": \"Validation describes the validation methods for CustomResources\",\n      \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceValidation\"\n     },\n     \"version\": {\n      \"description\": \"Version is the version this resource belongs in Should be always first item in Versions field if provided. Optional, but at least one of Version or Versions must be set. Deprecated: Please use `Versions`.\",\n      \"type\": \"string\"\n     },\n     \"versions\": {\n      \"description\": \"Versions is the list of all supported versions for this resource. If Version field is provided, this field is optional. Validation: All versions must use the same validation schema for now. i.e., top level Validation field is applied to all of these versions. Order: The version name will be used to compute the order. If the version string is \\\"kube-like\\\", it will sort above non \\\"kube-like\\\" version strings, which are ordered lexicographically. \\\"Kube-like\\\" versions start with a \\\"v\\\", then are followed by a number (the major version), then optionally the string \\\"alpha\\\" or \\\"beta\\\" and another number (the minor version). These are sorted first by GA \\u003e beta \\u003e alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionVersion\"\n      }\n     }\n    }\n   },\n   \"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionStatus\": {\n    \"description\": \"CustomResourceDefinitionStatus indicates the state of the CustomResourceDefinition\",\n    \"required\": [\n     \"conditions\",\n     \"acceptedNames\",\n     \"storedVersions\"\n    ],\n    \"properties\": {\n     \"acceptedNames\": {\n      \"description\": \"AcceptedNames are the names that are actually being used to serve discovery They may be different than the names in spec.\",\n      \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionNames\"\n     },\n     \"conditions\": {\n      \"description\": \"Conditions indicate state for particular aspects of a CustomResourceDefinition\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionCondition\"\n      }\n     },\n     \"storedVersions\": {\n      \"description\": \"StoredVersions are all versions of CustomResources that were ever persisted. Tracking these versions allows a migration path for stored versions in etcd. The field is mutable so the migration controller can first finish a migration to another version (i.e. that no old objects are left in the storage), and then remove the rest of the versions from this list. None of the versions in this list can be removed from the spec.Versions field.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceDefinitionVersion\": {\n    \"required\": [\n     \"name\",\n     \"served\",\n     \"storage\"\n    ],\n    \"properties\": {\n     \"name\": {\n      \"description\": \"Name is the version name, e.g. “v1”, “v2beta1”, etc.\",\n      \"type\": \"string\"\n     },\n     \"served\": {\n      \"description\": \"Served is a flag enabling/disabling this version from being served via REST APIs\",\n      \"type\": \"boolean\"\n     },\n     \"storage\": {\n      \"description\": \"Storage flags the version as storage version. There must be exactly one flagged as storage version.\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresourceScale\": {\n    \"description\": \"CustomResourceSubresourceScale defines how to serve the scale subresource for CustomResources.\",\n    \"required\": [\n     \"specReplicasPath\",\n     \"statusReplicasPath\"\n    ],\n    \"properties\": {\n     \"labelSelectorPath\": {\n      \"description\": \"LabelSelectorPath defines the JSON path inside of a CustomResource that corresponds to Scale.Status.Selector. Only JSON paths without the array notation are allowed. Must be a JSON Path under .status. Must be set to work with HPA. If there is no value under the given path in the CustomResource, the status label selector value in the /scale subresource will default to the empty string.\",\n      \"type\": \"string\"\n     },\n     \"specReplicasPath\": {\n      \"description\": \"SpecReplicasPath defines the JSON path inside of a CustomResource that corresponds to Scale.Spec.Replicas. Only JSON paths without the array notation are allowed. Must be a JSON Path under .spec. If there is no value under the given path in the CustomResource, the /scale subresource will return an error on GET.\",\n      \"type\": \"string\"\n     },\n     \"statusReplicasPath\": {\n      \"description\": \"StatusReplicasPath defines the JSON path inside of a CustomResource that corresponds to Scale.Status.Replicas. Only JSON paths without the array notation are allowed. Must be a JSON Path under .status. If there is no value under the given path in the CustomResource, the status replica value in the /scale subresource will default to 0.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresourceStatus\": {\n    \"description\": \"CustomResourceSubresourceStatus defines how to serve the status subresource for CustomResources. Status is represented by the `.status` JSON path inside of a CustomResource. When set, * exposes a /status subresource for the custom resource * PUT requests to the /status subresource take a custom resource object, and ignore changes to anything except the status stanza * PUT/POST/PATCH requests to the custom resource ignore changes to the status stanza\"\n   },\n   \"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresources\": {\n    \"description\": \"CustomResourceSubresources defines the status and scale subresources for CustomResources.\",\n    \"properties\": {\n     \"scale\": {\n      \"description\": \"Scale denotes the scale subresource for CustomResources\",\n      \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresourceScale\"\n     },\n     \"status\": {\n      \"description\": \"Status denotes the status subresource for CustomResources\",\n      \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresourceStatus\"\n     }\n    }\n   },\n   \"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceValidation\": {\n    \"description\": \"CustomResourceValidation is a list of validation methods for CustomResources.\",\n    \"properties\": {\n     \"openAPIV3Schema\": {\n      \"description\": \"OpenAPIV3Schema is the OpenAPI v3 schema to be validated against.\",\n      \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps\"\n     }\n    }\n   },\n   \"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.ExternalDocumentation\": {\n    \"description\": \"ExternalDocumentation allows referencing an external resource for extended documentation.\",\n    \"properties\": {\n     \"description\": {\n      \"type\": \"string\"\n     },\n     \"url\": {\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON\": {\n    \"description\": \"JSON represents any valid JSON value. These types are supported: bool, int64, float64, string, []interface{}, map[string]interface{} and nil.\"\n   },\n   \"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps\": {\n    \"description\": \"JSONSchemaProps is a JSON-Schema following Specification Draft 4 (http://json-schema.org/).\",\n    \"properties\": {\n     \"$ref\": {\n      \"type\": \"string\"\n     },\n     \"$schema\": {\n      \"type\": \"string\"\n     },\n     \"additionalItems\": {\n      \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrBool\"\n     },\n     \"additionalProperties\": {\n      \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrBool\"\n     },\n     \"allOf\": {\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps\"\n      }\n     },\n     \"anyOf\": {\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps\"\n      }\n     },\n     \"default\": {\n      \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON\"\n     },\n     \"definitions\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps\"\n      }\n     },\n     \"dependencies\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrStringArray\"\n      }\n     },\n     \"description\": {\n      \"type\": \"string\"\n     },\n     \"enum\": {\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON\"\n      }\n     },\n     \"example\": {\n      \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON\"\n     },\n     \"exclusiveMaximum\": {\n      \"type\": \"boolean\"\n     },\n     \"exclusiveMinimum\": {\n      \"type\": \"boolean\"\n     },\n     \"externalDocs\": {\n      \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.ExternalDocumentation\"\n     },\n     \"format\": {\n      \"type\": \"string\"\n     },\n     \"id\": {\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrArray\"\n     },\n     \"maxItems\": {\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"maxLength\": {\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"maxProperties\": {\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"maximum\": {\n      \"type\": \"number\",\n      \"format\": \"double\"\n     },\n     \"minItems\": {\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"minLength\": {\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"minProperties\": {\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"minimum\": {\n      \"type\": \"number\",\n      \"format\": \"double\"\n     },\n     \"multipleOf\": {\n      \"type\": \"number\",\n      \"format\": \"double\"\n     },\n     \"not\": {\n      \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps\"\n     },\n     \"oneOf\": {\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps\"\n      }\n     },\n     \"pattern\": {\n      \"type\": \"string\"\n     },\n     \"patternProperties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps\"\n      }\n     },\n     \"properties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps\"\n      }\n     },\n     \"required\": {\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"title\": {\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"type\": \"string\"\n     },\n     \"uniqueItems\": {\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrArray\": {\n    \"description\": \"JSONSchemaPropsOrArray represents a value that can either be a JSONSchemaProps or an array of JSONSchemaProps. Mainly here for serialization purposes.\"\n   },\n   \"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrBool\": {\n    \"description\": \"JSONSchemaPropsOrBool represents JSONSchemaProps or a boolean value. Defaults to true for the boolean property.\"\n   },\n   \"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrStringArray\": {\n    \"description\": \"JSONSchemaPropsOrStringArray represents a JSONSchemaProps or a string array.\"\n   },\n   \"io.k8s.apimachinery.pkg.api.resource.Quantity\": {\n    \"description\": \"Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and Int64() accessors.\\n\\nThe serialization format is:\\n\\n\\u003cquantity\\u003e        ::= \\u003csignedNumber\\u003e\\u003csuffix\\u003e\\n  (Note that \\u003csuffix\\u003e may be empty, from the \\\"\\\" case in \\u003cdecimalSI\\u003e.)\\n\\u003cdigit\\u003e           ::= 0 | 1 | ... | 9 \\u003cdigits\\u003e          ::= \\u003cdigit\\u003e | \\u003cdigit\\u003e\\u003cdigits\\u003e \\u003cnumber\\u003e          ::= \\u003cdigits\\u003e | \\u003cdigits\\u003e.\\u003cdigits\\u003e | \\u003cdigits\\u003e. | .\\u003cdigits\\u003e \\u003csign\\u003e            ::= \\\"+\\\" | \\\"-\\\" \\u003csignedNumber\\u003e    ::= \\u003cnumber\\u003e | \\u003csign\\u003e\\u003cnumber\\u003e \\u003csuffix\\u003e          ::= \\u003cbinarySI\\u003e | \\u003cdecimalExponent\\u003e | \\u003cdecimalSI\\u003e \\u003cbinarySI\\u003e        ::= Ki | Mi | Gi | Ti | Pi | Ei\\n  (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\\n\\u003cdecimalSI\\u003e       ::= m | \\\"\\\" | k | M | G | T | P | E\\n  (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\\n\\u003cdecimalExponent\\u003e ::= \\\"e\\\" \\u003csignedNumber\\u003e | \\\"E\\\" \\u003csignedNumber\\u003e\\n\\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\\n\\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\\n\\nBefore serializing, Quantity will be put in \\\"canonical form\\\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\\n  a. No precision is lost\\n  b. No fractional digits will be emitted\\n  c. The exponent (or suffix) is as large as possible.\\nThe sign will be omitted unless the number is negative.\\n\\nExamples:\\n  1.5 will be serialized as \\\"1500m\\\"\\n  1.5Gi will be serialized as \\\"1536Mi\\\"\\n\\nNOTE: We reserve the right to amend this canonical format, perhaps to\\n  allow 1.5 to be canonical.\\n  or after March 2015.\\n\\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\\n\\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\\n\\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.\",\n    \"type\": \"string\"\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\": {\n    \"description\": \"APIGroup contains the name, the supported versions, and the preferred version of a group.\",\n    \"required\": [\n     \"name\",\n     \"versions\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"name is the name of the group.\",\n      \"type\": \"string\"\n     },\n     \"preferredVersion\": {\n      \"description\": \"preferredVersion is the version preferred by the API server, which probably is the storage version.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery\"\n     },\n     \"serverAddressByClientCIDRs\": {\n      \"description\": \"a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR\"\n      }\n     },\n     \"versions\": {\n      \"description\": \"versions are the versions supported in this group.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"APIGroup\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.APIGroupList\": {\n    \"description\": \"APIGroupList is a list of APIGroup, to allow clients to discover the API at /apis.\",\n    \"required\": [\n     \"groups\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"groups\": {\n      \"description\": \"groups is a list of APIGroup.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"APIGroupList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.APIResource\": {\n    \"description\": \"APIResource specifies the name of a resource and whether it is namespaced.\",\n    \"required\": [\n     \"name\",\n     \"singularName\",\n     \"namespaced\",\n     \"kind\",\n     \"verbs\"\n    ],\n    \"properties\": {\n     \"categories\": {\n      \"description\": \"categories is a list of the grouped resources this resource belongs to (e.g. 'all')\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"group\": {\n      \"description\": \"group is the preferred group of the resource.  Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale\\\".\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo')\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"name is the plural name of the resource.\",\n      \"type\": \"string\"\n     },\n     \"namespaced\": {\n      \"description\": \"namespaced indicates if a resource is namespaced or not.\",\n      \"type\": \"boolean\"\n     },\n     \"shortNames\": {\n      \"description\": \"shortNames is a list of suggested short names of the resource.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"singularName\": {\n      \"description\": \"singularName is the singular name of the resource.  This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.\",\n      \"type\": \"string\"\n     },\n     \"verbs\": {\n      \"description\": \"verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"version\": {\n      \"description\": \"version is the preferred version of the resource.  Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)\\\".\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\": {\n    \"description\": \"APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.\",\n    \"required\": [\n     \"groupVersion\",\n     \"resources\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"groupVersion\": {\n      \"description\": \"groupVersion is the group and version this APIResourceList is for.\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"resources\": {\n      \"description\": \"resources contains the name of the resources and if they are namespaced.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResource\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"APIResourceList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.APIVersions\": {\n    \"description\": \"APIVersions lists the versions that are available, to allow clients to discover the API at /api, which is the root path of the legacy v1 API.\",\n    \"required\": [\n     \"versions\",\n     \"serverAddressByClientCIDRs\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"serverAddressByClientCIDRs\": {\n      \"description\": \"a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR\"\n      }\n     },\n     \"versions\": {\n      \"description\": \"versions are the api versions that are available.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"APIVersions\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\": {\n    \"description\": \"DeleteOptions may be provided when deleting an API object.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"gracePeriodSeconds\": {\n      \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"orphanDependents\": {\n      \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n      \"type\": \"boolean\"\n     },\n     \"preconditions\": {\n      \"description\": \"Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions\"\n     },\n     \"propagationPolicy\": {\n      \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.\",\n      \"type\": \"string\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1\"\n     },\n     {\n      \"group\": \"admission.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1alpha1\"\n     },\n     {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"apiextensions.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1\"\n     },\n     {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"apps\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1\"\n     },\n     {\n      \"group\": \"apps\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"apps\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1beta2\"\n     },\n     {\n      \"group\": \"authentication.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1\"\n     },\n     {\n      \"group\": \"authentication.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"authorization.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1\"\n     },\n     {\n      \"group\": \"authorization.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"autoscaling\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1\"\n     },\n     {\n      \"group\": \"autoscaling\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v2beta1\"\n     },\n     {\n      \"group\": \"batch\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1\"\n     },\n     {\n      \"group\": \"batch\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"batch\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v2alpha1\"\n     },\n     {\n      \"group\": \"certificates.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"events.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"extensions\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"imagepolicy.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1alpha1\"\n     },\n     {\n      \"group\": \"networking.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1\"\n     },\n     {\n      \"group\": \"policy\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1\"\n     },\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1alpha1\"\n     },\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1alpha1\"\n     },\n     {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"settings.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1alpha1\"\n     },\n     {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1\"\n     },\n     {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1alpha1\"\n     },\n     {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"DeleteOptions\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery\": {\n    \"description\": \"GroupVersion contains the \\\"group/version\\\" and \\\"version\\\" string of a version. It is made a struct to keep extensibility.\",\n    \"required\": [\n     \"groupVersion\",\n     \"version\"\n    ],\n    \"properties\": {\n     \"groupVersion\": {\n      \"description\": \"groupVersion specifies the API group and version in the form \\\"group/version\\\"\",\n      \"type\": \"string\"\n     },\n     \"version\": {\n      \"description\": \"version specifies the version in the form of \\\"version\\\". This is to save the clients the trouble of splitting the GroupVersion.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.Initializer\": {\n    \"description\": \"Initializer is information about an initializer that has not yet completed.\",\n    \"required\": [\n     \"name\"\n    ],\n    \"properties\": {\n     \"name\": {\n      \"description\": \"name of the process that is responsible for initializing this object.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.Initializers\": {\n    \"description\": \"Initializers tracks the progress of initialization.\",\n    \"required\": [\n     \"pending\"\n    ],\n    \"properties\": {\n     \"pending\": {\n      \"description\": \"Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Initializer\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"name\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"result\": {\n      \"description\": \"If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\": {\n    \"description\": \"A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.\",\n    \"properties\": {\n     \"matchExpressions\": {\n      \"description\": \"matchExpressions is a list of label selector requirements. The requirements are ANDed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirement\"\n      }\n     },\n     \"matchLabels\": {\n      \"description\": \"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \\\"key\\\", the operator is \\\"In\\\", and the values array contains only \\\"value\\\". The requirements are ANDed.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirement\": {\n    \"description\": \"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.\",\n    \"required\": [\n     \"key\",\n     \"operator\"\n    ],\n    \"properties\": {\n     \"key\": {\n      \"description\": \"key is the label key that the selector applies to.\",\n      \"type\": \"string\",\n      \"x-kubernetes-patch-merge-key\": \"key\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"operator\": {\n      \"description\": \"operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.\",\n      \"type\": \"string\"\n     },\n     \"values\": {\n      \"description\": \"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\": {\n    \"description\": \"ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.\",\n    \"properties\": {\n     \"continue\": {\n      \"description\": \"continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response.\",\n      \"type\": \"string\"\n     },\n     \"resourceVersion\": {\n      \"description\": \"String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\",\n      \"type\": \"string\"\n     },\n     \"selfLink\": {\n      \"description\": \"selfLink is a URL representing this object. Populated by the system. Read-only.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime\": {\n    \"description\": \"MicroTime is version of Time with microsecond level precision.\",\n    \"type\": \"string\",\n    \"format\": \"date-time\"\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\": {\n    \"description\": \"ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.\",\n    \"properties\": {\n     \"annotations\": {\n      \"description\": \"Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"clusterName\": {\n      \"description\": \"The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\",\n      \"type\": \"string\"\n     },\n     \"creationTimestamp\": {\n      \"description\": \"CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\\n\\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"deletionGracePeriodSeconds\": {\n      \"description\": \"Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"deletionTimestamp\": {\n      \"description\": \"DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\\n\\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"finalizers\": {\n      \"description\": \"Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      },\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"generateName\": {\n      \"description\": \"GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\\n\\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\\n\\nApplied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\",\n      \"type\": \"string\"\n     },\n     \"generation\": {\n      \"description\": \"A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"initializers\": {\n      \"description\": \"An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\\n\\nWhen an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Initializers\"\n     },\n     \"labels\": {\n      \"description\": \"Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"name\": {\n      \"description\": \"Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\",\n      \"type\": \"string\"\n     },\n     \"namespace\": {\n      \"description\": \"Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \\\"default\\\" namespace, but \\\"default\\\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\\n\\nMust be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\",\n      \"type\": \"string\"\n     },\n     \"ownerReferences\": {\n      \"description\": \"List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReference\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"uid\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"resourceVersion\": {\n      \"description\": \"An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\\n\\nPopulated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\",\n      \"type\": \"string\"\n     },\n     \"selfLink\": {\n      \"description\": \"SelfLink is a URL representing this object. Populated by the system. Read-only.\",\n      \"type\": \"string\"\n     },\n     \"uid\": {\n      \"description\": \"UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\\n\\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReference\": {\n    \"description\": \"OwnerReference contains enough information to let you identify an owning object. Currently, an owning object must be in the same namespace, so there is no namespace field.\",\n    \"required\": [\n     \"apiVersion\",\n     \"kind\",\n     \"name\",\n     \"uid\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"API version of the referent.\",\n      \"type\": \"string\"\n     },\n     \"blockOwnerDeletion\": {\n      \"description\": \"If true, AND if the owner has the \\\"foregroundDeletion\\\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \\\"delete\\\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.\",\n      \"type\": \"boolean\"\n     },\n     \"controller\": {\n      \"description\": \"If true, this reference points to the managing controller.\",\n      \"type\": \"boolean\"\n     },\n     \"kind\": {\n      \"description\": \"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names\",\n      \"type\": \"string\"\n     },\n     \"uid\": {\n      \"description\": \"UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.Patch\": {\n    \"description\": \"Patch is provided to give a concrete name and type to the Kubernetes PATCH request body.\"\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions\": {\n    \"description\": \"Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.\",\n    \"properties\": {\n     \"uid\": {\n      \"description\": \"Specifies the target UID.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR\": {\n    \"description\": \"ServerAddressByClientCIDR helps the client to determine the server address that they should use, depending on the clientCIDR that they match.\",\n    \"required\": [\n     \"clientCIDR\",\n     \"serverAddress\"\n    ],\n    \"properties\": {\n     \"clientCIDR\": {\n      \"description\": \"The CIDR with which clients can match their IP to figure out the server address that they should use.\",\n      \"type\": \"string\"\n     },\n     \"serverAddress\": {\n      \"description\": \"Address of this server, suitable for a client that matches the above CIDR. This can be a hostname, hostname:port, IP or IP:port.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.Status\": {\n    \"description\": \"Status is a return value for calls that don't return other objects.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"code\": {\n      \"description\": \"Suggested HTTP return code for this status, 0 if not set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"details\": {\n      \"description\": \"Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusDetails\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"message\": {\n      \"description\": \"A human-readable description of the status of this operation.\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     },\n     \"reason\": {\n      \"description\": \"A machine-readable description of why this operation is in the \\\"Failure\\\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the operation. One of: \\\"Success\\\" or \\\"Failure\\\". More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"type\": \"string\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"Status\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.StatusCause\": {\n    \"description\": \"StatusCause provides more information about an api.Status failure, including cases when multiple errors are encountered.\",\n    \"properties\": {\n     \"field\": {\n      \"description\": \"The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed.  Fields may appear more than once in an array of causes due to fields having multiple errors. Optional.\\n\\nExamples:\\n  \\\"name\\\" - the field \\\"name\\\" on the current resource\\n  \\\"items[0].name\\\" - the field \\\"name\\\" on the first array entry in \\\"items\\\"\",\n      \"type\": \"string\"\n     },\n     \"message\": {\n      \"description\": \"A human-readable description of the cause of the error.  This field may be presented as-is to a reader.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"A machine-readable description of the cause of the error. If this value is empty there is no information available.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.StatusDetails\": {\n    \"description\": \"StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.\",\n    \"properties\": {\n     \"causes\": {\n      \"description\": \"The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusCause\"\n      }\n     },\n     \"group\": {\n      \"description\": \"The group attribute of the resource associated with the status StatusReason.\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\",\n      \"type\": \"string\"\n     },\n     \"retryAfterSeconds\": {\n      \"description\": \"If specified, the time in seconds before the operation should be retried. Some errors may indicate the client must take an alternate action - for those errors this field may indicate how long to wait before taking the alternate action.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"uid\": {\n      \"description\": \"UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.Time\": {\n    \"description\": \"Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON.  Wrappers are provided for many of the factory methods that the time package offers.\",\n    \"type\": \"string\",\n    \"format\": \"date-time\"\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\": {\n    \"description\": \"Event represents a single event to a watched resource.\",\n    \"required\": [\n     \"type\",\n     \"object\"\n    ],\n    \"properties\": {\n     \"object\": {\n      \"description\": \"Object is:\\n * If Type is Added or Modified: the new state of the object.\\n * If Type is Deleted: the state of the object immediately before deletion.\\n * If Type is Error: *Status is recommended; other types may make sense\\n   depending on context.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.runtime.RawExtension\"\n     },\n     \"type\": {\n      \"type\": \"string\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1\"\n     },\n     {\n      \"group\": \"admission.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1alpha1\"\n     },\n     {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"apiextensions.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1\"\n     },\n     {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"apps\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1\"\n     },\n     {\n      \"group\": \"apps\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"apps\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1beta2\"\n     },\n     {\n      \"group\": \"authentication.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1\"\n     },\n     {\n      \"group\": \"authentication.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"authorization.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1\"\n     },\n     {\n      \"group\": \"authorization.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"autoscaling\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1\"\n     },\n     {\n      \"group\": \"autoscaling\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v2beta1\"\n     },\n     {\n      \"group\": \"batch\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1\"\n     },\n     {\n      \"group\": \"batch\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"batch\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v2alpha1\"\n     },\n     {\n      \"group\": \"certificates.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"events.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"extensions\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"imagepolicy.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1alpha1\"\n     },\n     {\n      \"group\": \"networking.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1\"\n     },\n     {\n      \"group\": \"policy\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1\"\n     },\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1alpha1\"\n     },\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1alpha1\"\n     },\n     {\n      \"group\": \"scheduling.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1beta1\"\n     },\n     {\n      \"group\": \"settings.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1alpha1\"\n     },\n     {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1\"\n     },\n     {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1alpha1\"\n     },\n     {\n      \"group\": \"storage.k8s.io\",\n      \"kind\": \"WatchEvent\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.apimachinery.pkg.runtime.RawExtension\": {\n    \"description\": \"RawExtension is used to hold extensions in external versions.\\n\\nTo use this, make a field which has RawExtension as its type in your external, versioned struct, and Object in your internal struct. You also need to register your various plugin types.\\n\\n// Internal package: type MyAPIObject struct {\\n\\truntime.TypeMeta `json:\\\",inline\\\"`\\n\\tMyPlugin runtime.Object `json:\\\"myPlugin\\\"`\\n} type PluginA struct {\\n\\tAOption string `json:\\\"aOption\\\"`\\n}\\n\\n// External package: type MyAPIObject struct {\\n\\truntime.TypeMeta `json:\\\",inline\\\"`\\n\\tMyPlugin runtime.RawExtension `json:\\\"myPlugin\\\"`\\n} type PluginA struct {\\n\\tAOption string `json:\\\"aOption\\\"`\\n}\\n\\n// On the wire, the JSON will look something like this: {\\n\\t\\\"kind\\\":\\\"MyAPIObject\\\",\\n\\t\\\"apiVersion\\\":\\\"v1\\\",\\n\\t\\\"myPlugin\\\": {\\n\\t\\t\\\"kind\\\":\\\"PluginA\\\",\\n\\t\\t\\\"aOption\\\":\\\"foo\\\",\\n\\t},\\n}\\n\\nSo what happens? Decode first uses json or yaml to unmarshal the serialized data into your external MyAPIObject. That causes the raw JSON to be stored, but not unpacked. The next step is to copy (using pkg/conversion) into the internal struct. The runtime package's DefaultScheme has conversion functions installed which will unpack the JSON stored in RawExtension, turning it into the correct object type, and storing it in the Object. (TODO: In the case where the object is of an unknown type, a runtime.Unknown object will be created and stored.)\",\n    \"required\": [\n     \"Raw\"\n    ],\n    \"properties\": {\n     \"Raw\": {\n      \"description\": \"Raw is the underlying serialization of this object.\",\n      \"type\": \"string\",\n      \"format\": \"byte\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.util.intstr.IntOrString\": {\n    \"description\": \"IntOrString is a type that can hold an int32 or a string.  When used in JSON or YAML marshalling and unmarshalling, it produces or consumes the inner type.  This allows you to have, for example, a JSON field that can accept a name or number.\",\n    \"type\": \"string\",\n    \"format\": \"int-or-string\"\n   },\n   \"io.k8s.apimachinery.pkg.version.Info\": {\n    \"description\": \"Info contains versioning information. how we'll want to distribute that information.\",\n    \"required\": [\n     \"major\",\n     \"minor\",\n     \"gitVersion\",\n     \"gitCommit\",\n     \"gitTreeState\",\n     \"buildDate\",\n     \"goVersion\",\n     \"compiler\",\n     \"platform\"\n    ],\n    \"properties\": {\n     \"buildDate\": {\n      \"type\": \"string\"\n     },\n     \"compiler\": {\n      \"type\": \"string\"\n     },\n     \"gitCommit\": {\n      \"type\": \"string\"\n     },\n     \"gitTreeState\": {\n      \"type\": \"string\"\n     },\n     \"gitVersion\": {\n      \"type\": \"string\"\n     },\n     \"goVersion\": {\n      \"type\": \"string\"\n     },\n     \"major\": {\n      \"type\": \"string\"\n     },\n     \"minor\": {\n      \"type\": \"string\"\n     },\n     \"platform\": {\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService\": {\n    \"description\": \"APIService represents a server for a particular GroupVersion. Name must be \\\"version.group\\\".\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec contains information for locating and communicating with a server\",\n      \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status contains derived information about an API server\",\n      \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceCondition\": {\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"Human-readable message indicating details about last transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"Unique, one-word, CamelCase reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status is the status of the condition. Can be True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type is the type of the condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceList\": {\n    \"description\": \"APIServiceList is a list of APIService objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIService\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIServiceList\",\n      \"version\": \"v1\"\n     }\n    ]\n   },\n   \"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceSpec\": {\n    \"description\": \"APIServiceSpec contains information for locating and communicating with a server. Only https is supported, though you are able to disable certificate verification.\",\n    \"required\": [\n     \"service\",\n     \"groupPriorityMinimum\",\n     \"versionPriority\"\n    ],\n    \"properties\": {\n     \"caBundle\": {\n      \"description\": \"CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate.\",\n      \"type\": \"string\",\n      \"format\": \"byte\"\n     },\n     \"group\": {\n      \"description\": \"Group is the API group name this server hosts\",\n      \"type\": \"string\"\n     },\n     \"groupPriorityMinimum\": {\n      \"description\": \"GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object.  (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"insecureSkipTLSVerify\": {\n      \"description\": \"InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged.  You should use the CABundle instead.\",\n      \"type\": \"boolean\"\n     },\n     \"service\": {\n      \"description\": \"Service is a reference to the service for this API server.  It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled.\",\n      \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.ServiceReference\"\n     },\n     \"version\": {\n      \"description\": \"Version is the API version this server hosts.  For example, \\\"v1\\\"\",\n      \"type\": \"string\"\n     },\n     \"versionPriority\": {\n      \"description\": \"VersionPriority controls the ordering of this API version inside of its group.  Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). Since it's inside of a group, the number can be small, probably in the 10s. In case of equal version priorities, the version string will be used to compute the order inside a group. If the version string is \\\"kube-like\\\", it will sort above non \\\"kube-like\\\" version strings, which are ordered lexicographically. \\\"Kube-like\\\" versions start with a \\\"v\\\", then are followed by a number (the major version), then optionally the string \\\"alpha\\\" or \\\"beta\\\" and another number (the minor version). These are sorted first by GA \\u003e beta \\u003e alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceStatus\": {\n    \"description\": \"APIServiceStatus contains derived information about an API server\",\n    \"properties\": {\n     \"conditions\": {\n      \"description\": \"Current service state of apiService.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.APIServiceCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     }\n    }\n   },\n   \"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.ServiceReference\": {\n    \"description\": \"ServiceReference holds a reference to Service.legacy.k8s.io\",\n    \"properties\": {\n     \"name\": {\n      \"description\": \"Name is the name of the service\",\n      \"type\": \"string\"\n     },\n     \"namespace\": {\n      \"description\": \"Namespace is the namespace of the service\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\": {\n    \"description\": \"APIService represents a server for a particular GroupVersion. Name must be \\\"version.group\\\".\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec contains information for locating and communicating with a server\",\n      \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status contains derived information about an API server\",\n      \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIService\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceCondition\": {\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"Human-readable message indicating details about last transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"Unique, one-word, CamelCase reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status is the status of the condition. Can be True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type is the type of the condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceList\": {\n    \"description\": \"APIServiceList is a list of APIService objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apiregistration.k8s.io\",\n      \"kind\": \"APIServiceList\",\n      \"version\": \"v1beta1\"\n     }\n    ]\n   },\n   \"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceSpec\": {\n    \"description\": \"APIServiceSpec contains information for locating and communicating with a server. Only https is supported, though you are able to disable certificate verification.\",\n    \"required\": [\n     \"service\",\n     \"groupPriorityMinimum\",\n     \"versionPriority\"\n    ],\n    \"properties\": {\n     \"caBundle\": {\n      \"description\": \"CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate.\",\n      \"type\": \"string\",\n      \"format\": \"byte\"\n     },\n     \"group\": {\n      \"description\": \"Group is the API group name this server hosts\",\n      \"type\": \"string\"\n     },\n     \"groupPriorityMinimum\": {\n      \"description\": \"GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object.  (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"insecureSkipTLSVerify\": {\n      \"description\": \"InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged.  You should use the CABundle instead.\",\n      \"type\": \"boolean\"\n     },\n     \"service\": {\n      \"description\": \"Service is a reference to the service for this API server.  It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled.\",\n      \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.ServiceReference\"\n     },\n     \"version\": {\n      \"description\": \"Version is the API version this server hosts.  For example, \\\"v1\\\"\",\n      \"type\": \"string\"\n     },\n     \"versionPriority\": {\n      \"description\": \"VersionPriority controls the ordering of this API version inside of its group.  Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). Since it's inside of a group, the number can be small, probably in the 10s. In case of equal version priorities, the version string will be used to compute the order inside a group. If the version string is \\\"kube-like\\\", it will sort above non \\\"kube-like\\\" version strings, which are ordered lexicographically. \\\"Kube-like\\\" versions start with a \\\"v\\\", then are followed by a number (the major version), then optionally the string \\\"alpha\\\" or \\\"beta\\\" and another number (the minor version). These are sorted first by GA \\u003e beta \\u003e alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceStatus\": {\n    \"description\": \"APIServiceStatus contains derived information about an API server\",\n    \"properties\": {\n     \"conditions\": {\n      \"description\": \"Current service state of apiService.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     }\n    }\n   },\n   \"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.ServiceReference\": {\n    \"description\": \"ServiceReference holds a reference to Service.legacy.k8s.io\",\n    \"properties\": {\n     \"name\": {\n      \"description\": \"Name is the name of the service\",\n      \"type\": \"string\"\n     },\n     \"namespace\": {\n      \"description\": \"Namespace is the namespace of the service\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.AWSElasticBlockStoreVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Affinity\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.Affinity instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.Affinity\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.AttachedVolume\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.AttachedVolume instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.AttachedVolume\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.AzureDiskVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.AzureDiskVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.AzureDiskVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.AzureFileVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.AzureFileVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.AzureFileVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Binding\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.Binding instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.Binding\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Capabilities\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.Capabilities instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.Capabilities\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.CephFSVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.CephFSVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.CephFSVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.CinderVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.CinderVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.CinderVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ComponentCondition\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ComponentCondition instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ComponentCondition\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ComponentStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ComponentStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ComponentStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ComponentStatusList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ComponentStatusList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ComponentStatusList\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ConfigMap\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ConfigMap instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMap\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ConfigMapEnvSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ConfigMapEnvSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMapEnvSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ConfigMapKeySelector\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ConfigMapKeySelector instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMapKeySelector\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ConfigMapList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ConfigMapList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMapList\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ConfigMapProjection\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ConfigMapProjection instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMapProjection\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ConfigMapVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ConfigMapVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ConfigMapVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Container\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.Container instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.Container\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ContainerImage\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ContainerImage instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ContainerImage\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ContainerPort\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ContainerPort instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ContainerPort\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ContainerState\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ContainerState instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ContainerState\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ContainerStateRunning\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ContainerStateRunning instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ContainerStateRunning\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ContainerStateTerminated\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ContainerStateTerminated instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ContainerStateTerminated\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ContainerStateWaiting\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ContainerStateWaiting instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ContainerStateWaiting\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ContainerStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ContainerStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ContainerStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.DaemonEndpoint\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.DaemonEndpoint instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.DaemonEndpoint\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.DownwardAPIProjection\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.DownwardAPIProjection instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.DownwardAPIProjection\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.DownwardAPIVolumeFile\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.DownwardAPIVolumeFile instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeFile\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.DownwardAPIVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.DownwardAPIVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.EmptyDirVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.EmptyDirVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.EmptyDirVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.EndpointAddress\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.EndpointAddress instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.EndpointAddress\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.EndpointPort\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.EndpointPort instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.EndpointPort\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.EndpointSubset\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.EndpointSubset instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.EndpointSubset\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Endpoints\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.Endpoints instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.Endpoints\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.EndpointsList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.EndpointsList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.EndpointsList\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.EnvFromSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.EnvFromSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.EnvFromSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.EnvVar\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.EnvVar instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.EnvVar\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.EnvVarSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.EnvVarSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.EnvVarSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Event\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.Event instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.Event\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.EventList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.EventList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.EventList\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.EventSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.EventSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.EventSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ExecAction\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ExecAction instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ExecAction\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.FCVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.FCVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.FCVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.FlexVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.FlexVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.FlexVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.FlockerVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.FlockerVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.FlockerVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.GCEPersistentDiskVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.GCEPersistentDiskVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.GCEPersistentDiskVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.GitRepoVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.GitRepoVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.GitRepoVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.GlusterfsVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.GlusterfsVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.GlusterfsVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.HTTPGetAction\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.HTTPGetAction instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.HTTPGetAction\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.HTTPHeader\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.HTTPHeader instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.HTTPHeader\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Handler\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.Handler instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.Handler\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.HostAlias\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.HostAlias instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.HostAlias\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.HostPathVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.HostPathVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.HostPathVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ISCSIVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ISCSIVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ISCSIVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.KeyToPath\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.KeyToPath instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.KeyToPath\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Lifecycle\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.Lifecycle instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.Lifecycle\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.LimitRange\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.LimitRange instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.LimitRange\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.LimitRangeItem\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.LimitRangeItem instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.LimitRangeItem\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.LimitRangeList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.LimitRangeList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.LimitRangeList\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.LimitRangeSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.LimitRangeSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.LimitRangeSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.LoadBalancerIngress\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.LoadBalancerIngress instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.LoadBalancerIngress\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.LoadBalancerStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.LoadBalancerStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.LoadBalancerStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.LocalObjectReference\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.LocalObjectReference instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.LocalObjectReference\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.LocalVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.LocalVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.LocalVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NFSVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.NFSVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.NFSVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Namespace\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.Namespace instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.Namespace\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NamespaceList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.NamespaceList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.NamespaceList\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NamespaceSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.NamespaceSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.NamespaceSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NamespaceStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.NamespaceStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.NamespaceStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Node\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.Node instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.Node\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeAddress\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.NodeAddress instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeAddress\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeAffinity\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.NodeAffinity instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeAffinity\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeCondition\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.NodeCondition instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeCondition\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeDaemonEndpoints\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.NodeDaemonEndpoints instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeDaemonEndpoints\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.NodeList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeList\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeSelector\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.NodeSelector instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeSelector\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeSelectorRequirement\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.NodeSelectorRequirement instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeSelectorRequirement\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeSelectorTerm\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.NodeSelectorTerm instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeSelectorTerm\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.NodeSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.NodeStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeSystemInfo\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.NodeSystemInfo instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.NodeSystemInfo\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ObjectFieldSelector\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ObjectFieldSelector instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ObjectFieldSelector\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ObjectReference\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ObjectReference instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ObjectReference\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PersistentVolume\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PersistentVolume instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolume\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PersistentVolumeClaim instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PersistentVolumeClaimList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimList\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PersistentVolumeClaimSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PersistentVolumeClaimStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PersistentVolumeClaimVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PersistentVolumeList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeList\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PersistentVolumeSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PersistentVolumeStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PersistentVolumeStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PhotonPersistentDiskVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Pod\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.Pod instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.Pod\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodAffinity\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PodAffinity instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodAffinity\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodAffinityTerm\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PodAffinityTerm instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodAffinityTerm\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodAntiAffinity\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PodAntiAffinity instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodAntiAffinity\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodCondition\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PodCondition instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodCondition\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PodList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodList\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodSecurityContext\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PodSecurityContext instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodSecurityContext\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PodSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PodStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodTemplate\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PodTemplate instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplate\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodTemplateList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PodTemplateList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplateList\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PodTemplateSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PodTemplateSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PortworxVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PortworxVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PortworxVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PreferredSchedulingTerm\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.PreferredSchedulingTerm instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.PreferredSchedulingTerm\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Probe\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.Probe instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.Probe\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ProjectedVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ProjectedVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ProjectedVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.QuobyteVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.QuobyteVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.QuobyteVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.RBDVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.RBDVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.RBDVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ReplicationController\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ReplicationController instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationController\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ReplicationControllerCondition\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ReplicationControllerCondition instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationControllerCondition\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ReplicationControllerList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ReplicationControllerList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationControllerList\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ReplicationControllerSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ReplicationControllerSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationControllerSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ReplicationControllerStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ReplicationControllerStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ReplicationControllerStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ResourceFieldSelector\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ResourceFieldSelector instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceFieldSelector\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ResourceQuota\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ResourceQuota instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuota\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ResourceQuotaList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ResourceQuotaList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuotaList\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ResourceQuotaSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ResourceQuotaSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuotaSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ResourceQuotaStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ResourceQuotaStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceQuotaStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ResourceRequirements\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ResourceRequirements instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ResourceRequirements\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.SELinuxOptions\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.SELinuxOptions instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.SELinuxOptions\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ScaleIOVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ScaleIOVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ScaleIOVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Secret\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.Secret instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.Secret\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.SecretEnvSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.SecretEnvSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecretEnvSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.SecretKeySelector\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.SecretKeySelector instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecretKeySelector\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.SecretList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.SecretList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecretList\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.SecretProjection\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.SecretProjection instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecretProjection\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.SecretVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.SecretVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecretVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.SecurityContext\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.SecurityContext instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.SecurityContext\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Service\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.Service instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.Service\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ServiceAccount\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ServiceAccount instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceAccount\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ServiceAccountList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ServiceAccountList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceAccountList\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ServiceList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ServiceList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceList\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ServicePort\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ServicePort instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServicePort\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ServiceSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ServiceSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ServiceStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.ServiceStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.ServiceStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.StorageOSPersistentVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.StorageOSPersistentVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.StorageOSPersistentVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.StorageOSVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.StorageOSVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.StorageOSVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.TCPSocketAction\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.TCPSocketAction instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.TCPSocketAction\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Taint\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.Taint instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.Taint\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Toleration\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.Toleration instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.Toleration\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Volume\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.Volume instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.Volume\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.VolumeMount\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.VolumeMount instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.VolumeMount\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.VolumeProjection\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.VolumeProjection instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.VolumeProjection\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.VsphereVirtualDiskVolumeSource\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource\"\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.WeightedPodAffinityTerm\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.core.v1.WeightedPodAffinityTerm instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.core.v1.WeightedPodAffinityTerm\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.Initializer\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.admissionregistration.v1alpha1.Initializer instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1alpha1.Initializer\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfiguration\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.admissionregistration.v1alpha1.InitializerConfiguration instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1alpha1.InitializerConfiguration\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfigurationList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.admissionregistration.v1alpha1.InitializerConfigurationList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1alpha1.InitializerConfigurationList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.Rule\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.admissionregistration.v1alpha1.Rule instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.admissionregistration.v1alpha1.Rule\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevision\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.apps.v1beta1.ControllerRevision instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevision\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevisionList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.apps.v1beta1.ControllerRevisionList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.ControllerRevisionList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.apps.v1beta1.Deployment instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Deployment\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentCondition\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.apps.v1beta1.DeploymentCondition instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.DeploymentCondition\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.apps.v1beta1.DeploymentList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.DeploymentList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentRollback\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.apps.v1beta1.DeploymentRollback instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.DeploymentRollback\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.apps.v1beta1.DeploymentSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.DeploymentSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.apps.v1beta1.DeploymentStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.DeploymentStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentStrategy\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.apps.v1beta1.DeploymentStrategy instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.DeploymentStrategy\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollbackConfig\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.apps.v1beta1.RollbackConfig instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.RollbackConfig\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollingUpdateDeployment\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.apps.v1beta1.RollingUpdateDeployment instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.RollingUpdateDeployment\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollingUpdateStatefulSetStrategy\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.apps.v1beta1.RollingUpdateStatefulSetStrategy instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.RollingUpdateStatefulSetStrategy\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.Scale\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.apps.v1beta1.Scale instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.Scale\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.ScaleSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.apps.v1beta1.ScaleSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.ScaleSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.ScaleStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.apps.v1beta1.ScaleStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.ScaleStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.apps.v1beta1.StatefulSet instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSet\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.apps.v1beta1.StatefulSetList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSetList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.apps.v1beta1.StatefulSetSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSetSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.apps.v1beta1.StatefulSetStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSetStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetUpdateStrategy\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.apps.v1beta1.StatefulSetUpdateStrategy instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.apps.v1beta1.StatefulSetUpdateStrategy\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReview\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authentication.v1.TokenReview instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authentication.v1.TokenReview\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReviewSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authentication.v1.TokenReviewSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authentication.v1.TokenReviewSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReviewStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authentication.v1.TokenReviewStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authentication.v1.TokenReviewStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authentication.v1.UserInfo\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authentication.v1.UserInfo instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authentication.v1.UserInfo\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authentication.v1beta1.TokenReview\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authentication.v1beta1.TokenReview instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authentication.v1beta1.TokenReview\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authentication.v1beta1.TokenReviewSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authentication.v1beta1.TokenReviewSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authentication.v1beta1.TokenReviewSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authentication.v1beta1.TokenReviewStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authentication.v1beta1.TokenReviewStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authentication.v1beta1.TokenReviewStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authentication.v1beta1.UserInfo\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authentication.v1beta1.UserInfo instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authentication.v1beta1.UserInfo\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1.LocalSubjectAccessReview\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authorization.v1.LocalSubjectAccessReview instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.LocalSubjectAccessReview\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1.NonResourceAttributes\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authorization.v1.NonResourceAttributes instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.NonResourceAttributes\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1.ResourceAttributes\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authorization.v1.ResourceAttributes instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.ResourceAttributes\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1.SelfSubjectAccessReview\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authorization.v1.SelfSubjectAccessReview instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReview\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1.SelfSubjectAccessReviewSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authorization.v1.SelfSubjectAccessReviewSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SelfSubjectAccessReviewSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReview\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authorization.v1.SubjectAccessReview instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SubjectAccessReview\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authorization.v1.SubjectAccessReviewSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authorization.v1.SubjectAccessReviewStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authorization.v1.SubjectAccessReviewStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.LocalSubjectAccessReview\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authorization.v1beta1.LocalSubjectAccessReview instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.LocalSubjectAccessReview\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.NonResourceAttributes\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authorization.v1beta1.NonResourceAttributes instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.NonResourceAttributes\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.ResourceAttributes\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authorization.v1beta1.ResourceAttributes instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.ResourceAttributes\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SelfSubjectAccessReview\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authorization.v1beta1.SelfSubjectAccessReview instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SelfSubjectAccessReview\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SelfSubjectAccessReviewSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authorization.v1beta1.SelfSubjectAccessReviewSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SelfSubjectAccessReviewSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReview\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authorization.v1beta1.SubjectAccessReview instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SubjectAccessReview\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReviewSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authorization.v1beta1.SubjectAccessReviewSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SubjectAccessReviewSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReviewStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.authorization.v1beta1.SubjectAccessReviewStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.authorization.v1beta1.SubjectAccessReviewStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v1.CrossVersionObjectReference\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.autoscaling.v1.CrossVersionObjectReference instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.CrossVersionObjectReference\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v1.Scale\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.autoscaling.v1.Scale instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.Scale\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v1.ScaleSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.autoscaling.v1.ScaleSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.ScaleSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v1.ScaleStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.autoscaling.v1.ScaleStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.autoscaling.v1.ScaleStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.batch.v1.Job\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.batch.v1.Job instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.batch.v1.Job\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.batch.v1.JobCondition\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.batch.v1.JobCondition instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.batch.v1.JobCondition\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.batch.v1.JobList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.batch.v1.JobList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.batch.v1.JobList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.batch.v1.JobSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.batch.v1.JobSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.batch.v1.JobSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.batch.v1.JobStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.batch.v1.JobStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.batch.v1.JobStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.batch.v2alpha1.CronJob instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJob\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.batch.v2alpha1.CronJobList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJobList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.batch.v2alpha1.CronJobSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJobSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.batch.v2alpha1.CronJobStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.CronJobStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.batch.v2alpha1.JobTemplateSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.batch.v2alpha1.JobTemplateSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.batch.v2alpha1.JobTemplateSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.certificates.v1beta1.CertificateSigningRequest instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequest\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestCondition\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.certificates.v1beta1.CertificateSigningRequestCondition instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestCondition\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.certificates.v1beta1.CertificateSigningRequestList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.certificates.v1beta1.CertificateSigningRequestSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.certificates.v1beta1.CertificateSigningRequestStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.certificates.v1beta1.CertificateSigningRequestStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.DaemonSet instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSet\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.DaemonSetList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.DaemonSetSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.DaemonSetStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetUpdateStrategy\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.DaemonSetUpdateStrategy instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DaemonSetUpdateStrategy\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.Deployment instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Deployment\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentCondition\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.DeploymentCondition instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentCondition\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.DeploymentList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentRollback\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.DeploymentRollback instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentRollback\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.DeploymentSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.DeploymentStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentStrategy\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.DeploymentStrategy instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.DeploymentStrategy\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.FSGroupStrategyOptions\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.FSGroupStrategyOptions instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.FSGroupStrategyOptions\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HTTPIngressPath\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.HTTPIngressPath instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.HTTPIngressPath\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HTTPIngressRuleValue\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.HTTPIngressRuleValue instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.HTTPIngressRuleValue\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HostPortRange\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.HostPortRange instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.HostPortRange\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IDRange\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.IDRange instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.IDRange\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.Ingress instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Ingress\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressBackend\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.IngressBackend instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.IngressBackend\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.IngressList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.IngressList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressRule\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.IngressRule instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.IngressRule\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.IngressSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.IngressSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.IngressStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.IngressStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressTLS\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.IngressTLS instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.IngressTLS\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicy\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.NetworkPolicy instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicy\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyIngressRule\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.NetworkPolicyIngressRule instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyIngressRule\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.NetworkPolicyList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyPeer\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.NetworkPolicyPeer instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPeer\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyPort\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.NetworkPolicyPort instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicyPort\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicySpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.NetworkPolicySpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.NetworkPolicySpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicy\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.PodSecurityPolicy instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicy\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicyList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.PodSecurityPolicyList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicyList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicySpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.PodSecurityPolicySpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.PodSecurityPolicySpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.ReplicaSet instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSet\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetCondition\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.ReplicaSetCondition instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetCondition\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.ReplicaSetList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.ReplicaSetSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.ReplicaSetStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ReplicaSetStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollbackConfig\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.RollbackConfig instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.RollbackConfig\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollingUpdateDaemonSet\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.RollingUpdateDaemonSet instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.RollingUpdateDaemonSet\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollingUpdateDeployment\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.RollingUpdateDeployment instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.RollingUpdateDeployment\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RunAsUserStrategyOptions\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.RunAsUserStrategyOptions instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.RunAsUserStrategyOptions\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.SELinuxStrategyOptions\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.SELinuxStrategyOptions instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.SELinuxStrategyOptions\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.Scale instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.Scale\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ScaleSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.ScaleSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ScaleSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ScaleStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.ScaleStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.ScaleStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.SupplementalGroupsStrategyOptions\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.extensions.v1beta1.SupplementalGroupsStrategyOptions instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.extensions.v1beta1.SupplementalGroupsStrategyOptions\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicy\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.networking.v1.NetworkPolicy instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicy\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyIngressRule\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.networking.v1.NetworkPolicyIngressRule instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicyIngressRule\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.networking.v1.NetworkPolicyList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicyList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyPeer\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.networking.v1.NetworkPolicyPeer instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicyPeer\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyPort\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.networking.v1.NetworkPolicyPort instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicyPort\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicySpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.networking.v1.NetworkPolicySpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.networking.v1.NetworkPolicySpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.policy.v1beta1.Eviction\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.policy.v1beta1.Eviction instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.Eviction\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.policy.v1beta1.PodDisruptionBudget instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudget\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.policy.v1beta1.PodDisruptionBudgetList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.policy.v1beta1.PodDisruptionBudgetSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetStatus\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.policy.v1beta1.PodDisruptionBudgetStatus instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.policy.v1beta1.PodDisruptionBudgetStatus\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRole\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1alpha1.ClusterRole instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRole\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBinding\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1alpha1.ClusterRoleBinding instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRoleBinding\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBindingList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1alpha1.ClusterRoleBindingList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRoleBindingList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1alpha1.ClusterRoleList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.ClusterRoleList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.PolicyRule\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1alpha1.PolicyRule instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.PolicyRule\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Role\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1alpha1.Role instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.Role\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBinding\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1alpha1.RoleBinding instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.RoleBinding\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBindingList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1alpha1.RoleBindingList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.RoleBindingList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1alpha1.RoleList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.RoleList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleRef\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1alpha1.RoleRef instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.RoleRef\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Subject\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1alpha1.Subject instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1alpha1.Subject\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRole\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1beta1.ClusterRole instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRole\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBinding\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1beta1.ClusterRoleBinding instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBinding\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBindingList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1beta1.ClusterRoleBindingList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleBindingList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1beta1.ClusterRoleList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.ClusterRoleList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.PolicyRule\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1beta1.PolicyRule instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.PolicyRule\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Role\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1beta1.Role instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.Role\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBinding\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1beta1.RoleBinding instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.RoleBinding\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBindingList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1beta1.RoleBindingList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.RoleBindingList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1beta1.RoleList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.RoleList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleRef\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1beta1.RoleRef instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.RoleRef\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Subject\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.rbac.v1beta1.Subject instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.rbac.v1beta1.Subject\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPreset\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.settings.v1alpha1.PodPreset instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.settings.v1alpha1.PodPreset\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPresetList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.settings.v1alpha1.PodPresetList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.settings.v1alpha1.PodPresetList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPresetSpec\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.settings.v1alpha1.PodPresetSpec instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.settings.v1alpha1.PodPresetSpec\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.storage.v1.StorageClass\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.storage.v1.StorageClass instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.storage.v1.StorageClass\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.storage.v1.StorageClassList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.storage.v1.StorageClassList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.storage.v1.StorageClassList\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClass\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.storage.v1beta1.StorageClass instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.StorageClass\"\n   },\n   \"io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClassList\": {\n    \"description\": \"Deprecated. Please use io.k8s.api.storage.v1beta1.StorageClassList instead.\",\n    \"$ref\": \"#/definitions/io.k8s.api.storage.v1beta1.StorageClassList\"\n   }\n  },\n  \"securityDefinitions\": {\n   \"BearerToken\": {\n    \"description\": \"Bearer Token authentication\",\n    \"type\": \"apiKey\",\n    \"name\": \"authorization\",\n    \"in\": \"header\"\n   }\n  },\n  \"security\": [\n   {\n    \"BearerToken\": []\n   }\n  ]\n }\n"
  },
  {
    "path": "devstats/ks-app/lib/ksonnet-lib/v1.7.0/k.libsonnet",
    "content": "local k8s = import \"k8s.libsonnet\";\n\nlocal apps = k8s.apps;\nlocal core = k8s.core;\nlocal extensions = k8s.extensions;\n\nlocal hidden = {\n  mapContainers(f):: {\n    local podContainers = super.spec.template.spec.containers,\n    spec+: {\n      template+: {\n        spec+: {\n          // IMPORTANT: This overwrites the 'containers' field\n          // for this deployment.\n          containers: std.map(f, podContainers),\n        },\n      },\n    },\n  },\n\n  mapContainersWithName(names, f) ::\n    local nameSet =\n      if std.type(names) == \"array\"\n      then std.set(names)\n      else std.set([names]);\n    local inNameSet(name) = std.length(std.setInter(nameSet, std.set([name]))) > 0;\n    self.mapContainers(\n      function(c)\n        if std.objectHas(c, \"name\") && inNameSet(c.name)\n        then f(c)\n        else c\n    ),\n};\n\nk8s + {\n  apps:: apps + {\n    v1beta1:: apps.v1beta1 + {\n      local v1beta1 = apps.v1beta1,\n\n      daemonSet:: v1beta1.daemonSet + {\n        mapContainers(f):: hidden.mapContainers(f),\n        mapContainersWithName(names, f):: hidden.mapContainersWithName(names, f),\n      },\n\n      deployment:: v1beta1.deployment + {\n        mapContainers(f):: hidden.mapContainers(f),\n        mapContainersWithName(names, f):: hidden.mapContainersWithName(names, f),\n      },\n    },\n  },\n\n  core:: core + {\n    v1:: core.v1 + {\n      list:: {\n        new(items)::\n          {apiVersion: \"v1\"} +\n          {kind: \"List\"} +\n          self.items(items),\n\n        items(items):: if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n      },\n    },\n  },\n\n  extensions:: extensions + {\n    v1beta1:: extensions.v1beta1 + {\n      local v1beta1 = extensions.v1beta1,\n\n      daemonSet:: v1beta1.daemonSet + {\n        mapContainers(f):: hidden.mapContainers(f),\n        mapContainersWithName(names, f):: hidden.mapContainersWithName(names, f),\n      },\n\n      deployment:: v1beta1.deployment + {\n        mapContainers(f):: hidden.mapContainers(f),\n        mapContainersWithName(names, f):: hidden.mapContainersWithName(names, f),\n      },\n    },\n  },\n}\n"
  },
  {
    "path": "devstats/ks-app/lib/ksonnet-lib/v1.7.0/k8s.libsonnet",
    "content": "// AUTOGENERATED from the Kubernetes OpenAPI specification. DO NOT MODIFY.\n// Kubernetes version: v1.7.0\n// SHA of ksonnet-lib HEAD: \n// SHA of Kubernetes HEAD OpenAPI spec is generated from: \n\n{\n  admissionregistration:: {\n    v1alpha1:: {\n      local apiVersion = {apiVersion: \"admissionregistration.k8s.io/v1alpha1\"},\n      // ExternalAdmissionHookConfiguration describes the configuration of initializers.\n      externalAdmissionHookConfiguration:: {\n        local kind = {kind: \"ExternalAdmissionHookConfiguration\"},\n        new():: kind + apiVersion,\n        // ExternalAdmissionHooks is a list of external admission webhooks and the affected resources and operations.\n        withExternalAdmissionHooks(externalAdmissionHooks):: self + if std.type(externalAdmissionHooks) == \"array\" then {externalAdmissionHooks: externalAdmissionHooks} else {externalAdmissionHooks: [externalAdmissionHooks]},\n        // ExternalAdmissionHooks is a list of external admission webhooks and the affected resources and operations.\n        withExternalAdmissionHooksMixin(externalAdmissionHooks):: self + if std.type(externalAdmissionHooks) == \"array\" then {externalAdmissionHooks+: externalAdmissionHooks} else {externalAdmissionHooks+: [externalAdmissionHooks]},\n        externalAdmissionHooksType:: hidden.admissionregistration.v1alpha1.externalAdmissionHook,\n        mixin:: {\n          // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // ExternalAdmissionHookConfigurationList is a list of ExternalAdmissionHookConfiguration.\n      externalAdmissionHookConfigurationList:: {\n        local kind = {kind: \"ExternalAdmissionHookConfigurationList\"},\n        new():: kind + apiVersion,\n        // List of ExternalAdmissionHookConfiguration.\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // List of ExternalAdmissionHookConfiguration.\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.admissionregistration.v1alpha1.externalAdmissionHookConfiguration,\n        mixin:: {\n          // Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n            withResourceVersion(resourceVersion):: self + __metadataMixin({resourceVersion: resourceVersion}),\n            // SelfLink is a URL representing this object. Populated by the system. Read-only.\n            withSelfLink(selfLink):: self + __metadataMixin({selfLink: selfLink}),\n          },\n          metadataType:: hidden.meta.v1.listMeta,\n        },\n      },\n      // InitializerConfiguration describes the configuration of initializers.\n      initializerConfiguration:: {\n        local kind = {kind: \"InitializerConfiguration\"},\n        new():: kind + apiVersion,\n        // Initializers is a list of resources and their default initializers Order-sensitive. When merging multiple InitializerConfigurations, we sort the initializers from different InitializerConfigurations by the name of the InitializerConfigurations; the order of the initializers from the same InitializerConfiguration is preserved.\n        withInitializers(initializers):: self + if std.type(initializers) == \"array\" then {initializers: initializers} else {initializers: [initializers]},\n        // Initializers is a list of resources and their default initializers Order-sensitive. When merging multiple InitializerConfigurations, we sort the initializers from different InitializerConfigurations by the name of the InitializerConfigurations; the order of the initializers from the same InitializerConfiguration is preserved.\n        withInitializersMixin(initializers):: self + if std.type(initializers) == \"array\" then {initializers+: initializers} else {initializers+: [initializers]},\n        initializersType:: hidden.admissionregistration.v1alpha1.initializer,\n        mixin:: {\n          // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // InitializerConfigurationList is a list of InitializerConfiguration.\n      initializerConfigurationList:: {\n        local kind = {kind: \"InitializerConfigurationList\"},\n        new():: kind + apiVersion,\n        // List of InitializerConfiguration.\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // List of InitializerConfiguration.\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.admissionregistration.v1alpha1.initializerConfiguration,\n        mixin:: {\n          // Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n            withResourceVersion(resourceVersion):: self + __metadataMixin({resourceVersion: resourceVersion}),\n            // SelfLink is a URL representing this object. Populated by the system. Read-only.\n            withSelfLink(selfLink):: self + __metadataMixin({selfLink: selfLink}),\n          },\n          metadataType:: hidden.meta.v1.listMeta,\n        },\n      },\n    },\n  },\n  apps:: {\n    v1beta1:: {\n      local apiVersion = {apiVersion: \"apps/v1beta1\"},\n      // ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.\n      controllerRevision:: {\n        local kind = {kind: \"ControllerRevision\"},\n        new():: kind + apiVersion,\n        // Revision indicates the revision of the state represented by Data.\n        withRevision(revision):: self + {revision: revision},\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // ControllerRevisionList is a resource containing a list of ControllerRevision objects.\n      controllerRevisionList:: {\n        local kind = {kind: \"ControllerRevisionList\"},\n        new():: kind + apiVersion,\n        // Items is the list of ControllerRevisions\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is the list of ControllerRevisions\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.apps.v1beta1.controllerRevision,\n        mixin:: {\n          // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n            withResourceVersion(resourceVersion):: self + __metadataMixin({resourceVersion: resourceVersion}),\n            // SelfLink is a URL representing this object. Populated by the system. Read-only.\n            withSelfLink(selfLink):: self + __metadataMixin({selfLink: selfLink}),\n          },\n          metadataType:: hidden.meta.v1.listMeta,\n        },\n      },\n      // Deployment enables declarative updates for Pods and ReplicaSets.\n      deployment:: {\n        local kind = {kind: \"Deployment\"},\n        new(name, replicas, containers, podLabels={app: name}):: kind + apiVersion + self.mixin.metadata.withName(name) + self.mixin.spec.withReplicas(replicas) + self.mixin.spec.template.spec.withContainers(containers) + self.mixin.spec.template.metadata.withLabels(podLabels),\n        mixin:: {\n          // Standard object metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Specification of the desired behavior of the Deployment.\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n            withMinReadySeconds(minReadySeconds):: self + __specMixin({minReadySeconds: minReadySeconds}),\n            // Indicates that the deployment is paused.\n            withPaused(paused):: self + __specMixin({paused: paused}),\n            // The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Once autoRollback is implemented, the deployment controller will automatically rollback failed deployments. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.\n            withProgressDeadlineSeconds(progressDeadlineSeconds):: self + __specMixin({progressDeadlineSeconds: progressDeadlineSeconds}),\n            // Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.\n            withReplicas(replicas):: self + __specMixin({replicas: replicas}),\n            // The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 2.\n            withRevisionHistoryLimit(revisionHistoryLimit):: self + __specMixin({revisionHistoryLimit: revisionHistoryLimit}),\n            // The config this deployment is rolling back to. Will be cleared after rollback is done.\n            rollbackTo:: {\n              local __rollbackToMixin(rollbackTo) = __specMixin({rollbackTo+: rollbackTo}),\n              mixinInstance(rollbackTo):: __rollbackToMixin(rollbackTo),\n              // The revision to rollback to. If set to 0, rollback to the last revision.\n              withRevision(revision):: self + __rollbackToMixin({revision: revision}),\n            },\n            rollbackToType:: hidden.apps.v1beta1.rollbackConfig,\n            // Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({selector+: selector}),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // The deployment strategy to use to replace existing pods with new ones.\n            strategy:: {\n              local __strategyMixin(strategy) = __specMixin({strategy+: strategy}),\n              mixinInstance(strategy):: __strategyMixin(strategy),\n              // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __strategyMixin({rollingUpdate+: rollingUpdate}),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\n                withMaxSurge(maxSurge):: __rollingUpdateMixin({maxSurge: maxSurge}),\n                // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n                withMaxUnavailable(maxUnavailable):: __rollingUpdateMixin({maxUnavailable: maxUnavailable}),\n              },\n              rollingUpdateType:: hidden.apps.v1beta1.rollingUpdateDeployment,\n              // Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.\n              withType(type):: self + __strategyMixin({type: type}),\n            },\n            strategyType:: hidden.apps.v1beta1.deploymentStrategy,\n            // Template describes the pods that will be created.\n            template:: {\n              local __templateMixin(template) = __specMixin({template+: template}),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n                // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n                withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                  pendingType:: hidden.meta.v1.initializer,\n                  // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                  result:: {\n                    local __resultMixin(result) = __initializersMixin({result+: result}),\n                    mixinInstance(result):: __resultMixin(result),\n                    // Suggested HTTP return code for this status, 0 if not set.\n                    withCode(code):: self + __resultMixin({code: code}),\n                    // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                    details:: {\n                      local __detailsMixin(details) = __resultMixin({details+: details}),\n                      mixinInstance(details):: __detailsMixin(details),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                      causesType:: hidden.meta.v1.statusCause,\n                      // The group attribute of the resource associated with the status StatusReason.\n                      withGroup(group):: self + __detailsMixin({group: group}),\n                      // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                      withName(name):: self + __detailsMixin({name: name}),\n                      // If specified, the time in seconds before the operation should be retried.\n                      withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                      // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                      withUid(uid):: self + __detailsMixin({uid: uid}),\n                    },\n                    detailsType:: hidden.meta.v1.statusDetails,\n                    // A human-readable description of the status of this operation.\n                    withMessage(message):: self + __resultMixin({message: message}),\n                    // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                    withReason(reason):: self + __resultMixin({reason: reason}),\n                  },\n                  resultType:: hidden.meta.v1.status,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({labels: labels}),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({name: name}),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({spec+: spec}),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({affinity+: affinity}),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}),\n                containersType:: hidden.core.v1.container,\n                // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({hostname: hostname}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}),\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}),\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n          specType:: hidden.apps.v1beta1.deploymentSpec,\n        },\n      },\n      // DeploymentList is a list of Deployments.\n      deploymentList:: {\n        local kind = {kind: \"DeploymentList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        // Items is the list of Deployments.\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is the list of Deployments.\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.apps.v1beta1.deployment,\n        mixin:: {\n        },\n      },\n      // DeploymentRollback stores the information required to rollback a deployment.\n      deploymentRollback:: {\n        local kind = {kind: \"DeploymentRollback\"},\n        new(name):: kind + apiVersion + self.withName(name),\n        // Required: This must match the Name of a deployment.\n        withName(name):: self + {name: name},\n        // The annotations to be updated to a deployment\n        withUpdatedAnnotations(updatedAnnotations):: self + {updatedAnnotations: updatedAnnotations},\n        // The annotations to be updated to a deployment\n        withUpdatedAnnotationsMixin(updatedAnnotations):: self + {updatedAnnotations+: updatedAnnotations},\n        mixin:: {\n          // The config of this deployment rollback.\n          rollbackTo:: {\n            local __rollbackToMixin(rollbackTo) = {rollbackTo+: rollbackTo},\n            mixinInstance(rollbackTo):: __rollbackToMixin(rollbackTo),\n            // The revision to rollback to. If set to 0, rollback to the last revision.\n            withRevision(revision):: self + __rollbackToMixin({revision: revision}),\n          },\n          rollbackToType:: hidden.apps.v1beta1.rollbackConfig,\n        },\n      },\n      // Scale represents a scaling request for a resource.\n      scale:: {\n        local kind = {kind: \"Scale\"},\n        new(replicas):: kind + apiVersion + self.mixin.spec.withReplicas(replicas),\n        mixin:: {\n          // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // desired number of instances for the scaled object.\n            withReplicas(replicas):: self + __specMixin({replicas: replicas}),\n          },\n          specType:: hidden.apps.v1beta1.scaleSpec,\n        },\n      },\n      // StatefulSet represents a set of pods with consistent identities. Identities are defined as:\n      //  - Network: A single stable DNS and hostname.\n      //  - Storage: As many VolumeClaims as requested.\n      // The StatefulSet guarantees that a given network identity will always map to the same storage identity.\n      statefulSet:: {\n        local kind = {kind: \"StatefulSet\"},\n        new(name, replicas, containers, volumeClaims, podLabels={app: name}):: kind + apiVersion + self.mixin.metadata.withName(name) + self.mixin.spec.withReplicas(replicas) + self.mixin.spec.template.spec.withContainers(containers) + self.mixin.spec.withVolumeClaimTemplates(volumeClaims) + self.mixin.spec.template.metadata.withLabels(podLabels),\n        mixin:: {\n          //\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the desired identities of pods in this set.\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.\n            withPodManagementPolicy(podManagementPolicy):: self + __specMixin({podManagementPolicy: podManagementPolicy}),\n            // replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.\n            withReplicas(replicas):: self + __specMixin({replicas: replicas}),\n            // revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.\n            withRevisionHistoryLimit(revisionHistoryLimit):: self + __specMixin({revisionHistoryLimit: revisionHistoryLimit}),\n            // selector is a label query over pods that should match the replica count. If empty, defaulted to labels on the pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({selector+: selector}),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.\n            withServiceName(serviceName):: self + __specMixin({serviceName: serviceName}),\n            // template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.\n            template:: {\n              local __templateMixin(template) = __specMixin({template+: template}),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n                // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n                withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                  pendingType:: hidden.meta.v1.initializer,\n                  // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                  result:: {\n                    local __resultMixin(result) = __initializersMixin({result+: result}),\n                    mixinInstance(result):: __resultMixin(result),\n                    // Suggested HTTP return code for this status, 0 if not set.\n                    withCode(code):: self + __resultMixin({code: code}),\n                    // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                    details:: {\n                      local __detailsMixin(details) = __resultMixin({details+: details}),\n                      mixinInstance(details):: __detailsMixin(details),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                      causesType:: hidden.meta.v1.statusCause,\n                      // The group attribute of the resource associated with the status StatusReason.\n                      withGroup(group):: self + __detailsMixin({group: group}),\n                      // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                      withName(name):: self + __detailsMixin({name: name}),\n                      // If specified, the time in seconds before the operation should be retried.\n                      withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                      // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                      withUid(uid):: self + __detailsMixin({uid: uid}),\n                    },\n                    detailsType:: hidden.meta.v1.statusDetails,\n                    // A human-readable description of the status of this operation.\n                    withMessage(message):: self + __resultMixin({message: message}),\n                    // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                    withReason(reason):: self + __resultMixin({reason: reason}),\n                  },\n                  resultType:: hidden.meta.v1.status,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({labels: labels}),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({name: name}),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({spec+: spec}),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({affinity+: affinity}),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}),\n                containersType:: hidden.core.v1.container,\n                // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({hostname: hostname}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}),\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}),\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n            // updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.\n            updateStrategy:: {\n              local __updateStrategyMixin(updateStrategy) = __specMixin({updateStrategy+: updateStrategy}),\n              mixinInstance(updateStrategy):: __updateStrategyMixin(updateStrategy),\n              // RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __updateStrategyMixin({rollingUpdate+: rollingUpdate}),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // Partition indicates the ordinal at which the StatefulSet should be partitioned.\n                withPartition(partition):: self + __rollingUpdateMixin({partition: partition}),\n              },\n              rollingUpdateType:: hidden.apps.v1beta1.rollingUpdateStatefulSetStrategy,\n              // Type indicates the type of the StatefulSetUpdateStrategy.\n              withType(type):: self + __updateStrategyMixin({type: type}),\n            },\n            updateStrategyType:: hidden.apps.v1beta1.statefulSetUpdateStrategy,\n            // volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.\n            withVolumeClaimTemplates(volumeClaimTemplates):: self + if std.type(volumeClaimTemplates) == \"array\" then __specMixin({volumeClaimTemplates: volumeClaimTemplates}) else __specMixin({volumeClaimTemplates: [volumeClaimTemplates]}),\n            // volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.\n            withVolumeClaimTemplatesMixin(volumeClaimTemplates):: self + if std.type(volumeClaimTemplates) == \"array\" then __specMixin({volumeClaimTemplates+: volumeClaimTemplates}) else __specMixin({volumeClaimTemplates+: [volumeClaimTemplates]}),\n            volumeClaimTemplatesType:: hidden.core.v1.persistentVolumeClaim,\n          },\n          specType:: hidden.apps.v1beta1.statefulSetSpec,\n        },\n      },\n      // StatefulSetList is a collection of StatefulSets.\n      statefulSetList:: {\n        local kind = {kind: \"StatefulSetList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        //\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        //\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.apps.v1beta1.statefulSet,\n        mixin:: {\n        },\n      },\n    },\n  },\n  authentication:: {\n    v1:: {\n      local apiVersion = {apiVersion: \"authentication.k8s.io/v1\"},\n      // TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver.\n      tokenReview:: {\n        local kind = {kind: \"TokenReview\"},\n        new(token):: kind + apiVersion + self.mixin.spec.withToken(token),\n        mixin:: {\n          //\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec holds information about the request being evaluated\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // Token is the opaque bearer token.\n            withToken(token):: self + __specMixin({token: token}),\n          },\n          specType:: hidden.authentication.v1.tokenReviewSpec,\n        },\n      },\n    },\n    v1beta1:: {\n      local apiVersion = {apiVersion: \"authentication.k8s.io/v1beta1\"},\n      // TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver.\n      tokenReview:: {\n        local kind = {kind: \"TokenReview\"},\n        new(token):: kind + apiVersion + self.mixin.spec.withToken(token),\n        mixin:: {\n          //\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec holds information about the request being evaluated\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // Token is the opaque bearer token.\n            withToken(token):: self + __specMixin({token: token}),\n          },\n          specType:: hidden.authentication.v1beta1.tokenReviewSpec,\n        },\n      },\n    },\n  },\n  authorization:: {\n    v1:: {\n      local apiVersion = {apiVersion: \"authorization.k8s.io/v1\"},\n      // LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking.\n      localSubjectAccessReview:: {\n        local kind = {kind: \"LocalSubjectAccessReview\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          //\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace you made the request against.  If empty, it is defaulted.\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n            withExtra(extra):: self + __specMixin({extra: extra}),\n            // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n            withExtraMixin(extra):: self + __specMixin({extra+: extra}),\n            // Groups is the groups you're testing for.\n            withGroups(groups):: self + if std.type(groups) == \"array\" then __specMixin({groups: groups}) else __specMixin({groups: [groups]}),\n            // Groups is the groups you're testing for.\n            withGroupsMixin(groups):: self + if std.type(groups) == \"array\" then __specMixin({groups+: groups}) else __specMixin({groups+: [groups]}),\n            // NonResourceAttributes describes information for a non-resource access request\n            nonResourceAttributes:: {\n              local __nonResourceAttributesMixin(nonResourceAttributes) = __specMixin({nonResourceAttributes+: nonResourceAttributes}),\n              mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes),\n              // Path is the URL path of the request\n              withPath(path):: self + __nonResourceAttributesMixin({path: path}),\n              // Verb is the standard HTTP verb\n              withVerb(verb):: self + __nonResourceAttributesMixin({verb: verb}),\n            },\n            nonResourceAttributesType:: hidden.authorization.v1.nonResourceAttributes,\n            // ResourceAuthorizationAttributes describes information for a resource access request\n            resourceAttributes:: {\n              local __resourceAttributesMixin(resourceAttributes) = __specMixin({resourceAttributes+: resourceAttributes}),\n              mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes),\n              // Group is the API Group of the Resource.  \"*\" means all.\n              withGroup(group):: self + __resourceAttributesMixin({group: group}),\n              // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n              withName(name):: self + __resourceAttributesMixin({name: name}),\n              // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n              withNamespace(namespace):: self + __resourceAttributesMixin({namespace: namespace}),\n              // Resource is one of the existing resource types.  \"*\" means all.\n              withResource(resource):: self + __resourceAttributesMixin({resource: resource}),\n              // Subresource is one of the existing resource types.  \"\" means none.\n              withSubresource(subresource):: self + __resourceAttributesMixin({subresource: subresource}),\n              // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n              withVerb(verb):: self + __resourceAttributesMixin({verb: verb}),\n              // Version is the API Version of the Resource.  \"*\" means all.\n              withVersion(version):: self + __resourceAttributesMixin({version: version}),\n            },\n            resourceAttributesType:: hidden.authorization.v1.resourceAttributes,\n            // User is the user you're testing for. If you specify \"User\" but not \"Groups\", then is it interpreted as \"What if User were not a member of any groups\n            withUser(user):: self + __specMixin({user: user}),\n          },\n          specType:: hidden.authorization.v1.subjectAccessReviewSpec,\n        },\n      },\n      // SelfSubjectAccessReview checks whether or the current user can perform an action.  Not filling in a spec.namespace means \"in all namespaces\".  Self is a special case, because users should always be able to check whether they can perform an action\n      selfSubjectAccessReview:: {\n        local kind = {kind: \"SelfSubjectAccessReview\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          //\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec holds information about the request being evaluated.  user and groups must be empty\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // NonResourceAttributes describes information for a non-resource access request\n            nonResourceAttributes:: {\n              local __nonResourceAttributesMixin(nonResourceAttributes) = __specMixin({nonResourceAttributes+: nonResourceAttributes}),\n              mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes),\n              // Path is the URL path of the request\n              withPath(path):: self + __nonResourceAttributesMixin({path: path}),\n              // Verb is the standard HTTP verb\n              withVerb(verb):: self + __nonResourceAttributesMixin({verb: verb}),\n            },\n            nonResourceAttributesType:: hidden.authorization.v1.nonResourceAttributes,\n            // ResourceAuthorizationAttributes describes information for a resource access request\n            resourceAttributes:: {\n              local __resourceAttributesMixin(resourceAttributes) = __specMixin({resourceAttributes+: resourceAttributes}),\n              mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes),\n              // Group is the API Group of the Resource.  \"*\" means all.\n              withGroup(group):: self + __resourceAttributesMixin({group: group}),\n              // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n              withName(name):: self + __resourceAttributesMixin({name: name}),\n              // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n              withNamespace(namespace):: self + __resourceAttributesMixin({namespace: namespace}),\n              // Resource is one of the existing resource types.  \"*\" means all.\n              withResource(resource):: self + __resourceAttributesMixin({resource: resource}),\n              // Subresource is one of the existing resource types.  \"\" means none.\n              withSubresource(subresource):: self + __resourceAttributesMixin({subresource: subresource}),\n              // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n              withVerb(verb):: self + __resourceAttributesMixin({verb: verb}),\n              // Version is the API Version of the Resource.  \"*\" means all.\n              withVersion(version):: self + __resourceAttributesMixin({version: version}),\n            },\n            resourceAttributesType:: hidden.authorization.v1.resourceAttributes,\n          },\n          specType:: hidden.authorization.v1.selfSubjectAccessReviewSpec,\n        },\n      },\n      // SubjectAccessReview checks whether or not a user or group can perform an action.\n      subjectAccessReview:: {\n        local kind = {kind: \"SubjectAccessReview\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          //\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec holds information about the request being evaluated\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n            withExtra(extra):: self + __specMixin({extra: extra}),\n            // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n            withExtraMixin(extra):: self + __specMixin({extra+: extra}),\n            // Groups is the groups you're testing for.\n            withGroups(groups):: self + if std.type(groups) == \"array\" then __specMixin({groups: groups}) else __specMixin({groups: [groups]}),\n            // Groups is the groups you're testing for.\n            withGroupsMixin(groups):: self + if std.type(groups) == \"array\" then __specMixin({groups+: groups}) else __specMixin({groups+: [groups]}),\n            // NonResourceAttributes describes information for a non-resource access request\n            nonResourceAttributes:: {\n              local __nonResourceAttributesMixin(nonResourceAttributes) = __specMixin({nonResourceAttributes+: nonResourceAttributes}),\n              mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes),\n              // Path is the URL path of the request\n              withPath(path):: self + __nonResourceAttributesMixin({path: path}),\n              // Verb is the standard HTTP verb\n              withVerb(verb):: self + __nonResourceAttributesMixin({verb: verb}),\n            },\n            nonResourceAttributesType:: hidden.authorization.v1.nonResourceAttributes,\n            // ResourceAuthorizationAttributes describes information for a resource access request\n            resourceAttributes:: {\n              local __resourceAttributesMixin(resourceAttributes) = __specMixin({resourceAttributes+: resourceAttributes}),\n              mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes),\n              // Group is the API Group of the Resource.  \"*\" means all.\n              withGroup(group):: self + __resourceAttributesMixin({group: group}),\n              // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n              withName(name):: self + __resourceAttributesMixin({name: name}),\n              // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n              withNamespace(namespace):: self + __resourceAttributesMixin({namespace: namespace}),\n              // Resource is one of the existing resource types.  \"*\" means all.\n              withResource(resource):: self + __resourceAttributesMixin({resource: resource}),\n              // Subresource is one of the existing resource types.  \"\" means none.\n              withSubresource(subresource):: self + __resourceAttributesMixin({subresource: subresource}),\n              // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n              withVerb(verb):: self + __resourceAttributesMixin({verb: verb}),\n              // Version is the API Version of the Resource.  \"*\" means all.\n              withVersion(version):: self + __resourceAttributesMixin({version: version}),\n            },\n            resourceAttributesType:: hidden.authorization.v1.resourceAttributes,\n            // User is the user you're testing for. If you specify \"User\" but not \"Groups\", then is it interpreted as \"What if User were not a member of any groups\n            withUser(user):: self + __specMixin({user: user}),\n          },\n          specType:: hidden.authorization.v1.subjectAccessReviewSpec,\n        },\n      },\n    },\n    v1beta1:: {\n      local apiVersion = {apiVersion: \"authorization.k8s.io/v1beta1\"},\n      // LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking.\n      localSubjectAccessReview:: {\n        local kind = {kind: \"LocalSubjectAccessReview\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          //\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace you made the request against.  If empty, it is defaulted.\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n            withExtra(extra):: self + __specMixin({extra: extra}),\n            // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n            withExtraMixin(extra):: self + __specMixin({extra+: extra}),\n            // Groups is the groups you're testing for.\n            withGroup(group):: self + if std.type(group) == \"array\" then __specMixin({group: group}) else __specMixin({group: [group]}),\n            // Groups is the groups you're testing for.\n            withGroupMixin(group):: self + if std.type(group) == \"array\" then __specMixin({group+: group}) else __specMixin({group+: [group]}),\n            // NonResourceAttributes describes information for a non-resource access request\n            nonResourceAttributes:: {\n              local __nonResourceAttributesMixin(nonResourceAttributes) = __specMixin({nonResourceAttributes+: nonResourceAttributes}),\n              mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes),\n              // Path is the URL path of the request\n              withPath(path):: self + __nonResourceAttributesMixin({path: path}),\n              // Verb is the standard HTTP verb\n              withVerb(verb):: self + __nonResourceAttributesMixin({verb: verb}),\n            },\n            nonResourceAttributesType:: hidden.authorization.v1beta1.nonResourceAttributes,\n            // ResourceAuthorizationAttributes describes information for a resource access request\n            resourceAttributes:: {\n              local __resourceAttributesMixin(resourceAttributes) = __specMixin({resourceAttributes+: resourceAttributes}),\n              mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes),\n              // Group is the API Group of the Resource.  \"*\" means all.\n              withGroup(group):: self + __resourceAttributesMixin({group: group}),\n              // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n              withName(name):: self + __resourceAttributesMixin({name: name}),\n              // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n              withNamespace(namespace):: self + __resourceAttributesMixin({namespace: namespace}),\n              // Resource is one of the existing resource types.  \"*\" means all.\n              withResource(resource):: self + __resourceAttributesMixin({resource: resource}),\n              // Subresource is one of the existing resource types.  \"\" means none.\n              withSubresource(subresource):: self + __resourceAttributesMixin({subresource: subresource}),\n              // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n              withVerb(verb):: self + __resourceAttributesMixin({verb: verb}),\n              // Version is the API Version of the Resource.  \"*\" means all.\n              withVersion(version):: self + __resourceAttributesMixin({version: version}),\n            },\n            resourceAttributesType:: hidden.authorization.v1beta1.resourceAttributes,\n            // User is the user you're testing for. If you specify \"User\" but not \"Group\", then is it interpreted as \"What if User were not a member of any groups\n            withUser(user):: self + __specMixin({user: user}),\n          },\n          specType:: hidden.authorization.v1beta1.subjectAccessReviewSpec,\n        },\n      },\n      // SelfSubjectAccessReview checks whether or the current user can perform an action.  Not filling in a spec.namespace means \"in all namespaces\".  Self is a special case, because users should always be able to check whether they can perform an action\n      selfSubjectAccessReview:: {\n        local kind = {kind: \"SelfSubjectAccessReview\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          //\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec holds information about the request being evaluated.  user and groups must be empty\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // NonResourceAttributes describes information for a non-resource access request\n            nonResourceAttributes:: {\n              local __nonResourceAttributesMixin(nonResourceAttributes) = __specMixin({nonResourceAttributes+: nonResourceAttributes}),\n              mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes),\n              // Path is the URL path of the request\n              withPath(path):: self + __nonResourceAttributesMixin({path: path}),\n              // Verb is the standard HTTP verb\n              withVerb(verb):: self + __nonResourceAttributesMixin({verb: verb}),\n            },\n            nonResourceAttributesType:: hidden.authorization.v1beta1.nonResourceAttributes,\n            // ResourceAuthorizationAttributes describes information for a resource access request\n            resourceAttributes:: {\n              local __resourceAttributesMixin(resourceAttributes) = __specMixin({resourceAttributes+: resourceAttributes}),\n              mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes),\n              // Group is the API Group of the Resource.  \"*\" means all.\n              withGroup(group):: self + __resourceAttributesMixin({group: group}),\n              // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n              withName(name):: self + __resourceAttributesMixin({name: name}),\n              // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n              withNamespace(namespace):: self + __resourceAttributesMixin({namespace: namespace}),\n              // Resource is one of the existing resource types.  \"*\" means all.\n              withResource(resource):: self + __resourceAttributesMixin({resource: resource}),\n              // Subresource is one of the existing resource types.  \"\" means none.\n              withSubresource(subresource):: self + __resourceAttributesMixin({subresource: subresource}),\n              // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n              withVerb(verb):: self + __resourceAttributesMixin({verb: verb}),\n              // Version is the API Version of the Resource.  \"*\" means all.\n              withVersion(version):: self + __resourceAttributesMixin({version: version}),\n            },\n            resourceAttributesType:: hidden.authorization.v1beta1.resourceAttributes,\n          },\n          specType:: hidden.authorization.v1beta1.selfSubjectAccessReviewSpec,\n        },\n      },\n      // SubjectAccessReview checks whether or not a user or group can perform an action.\n      subjectAccessReview:: {\n        local kind = {kind: \"SubjectAccessReview\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          //\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec holds information about the request being evaluated\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n            withExtra(extra):: self + __specMixin({extra: extra}),\n            // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n            withExtraMixin(extra):: self + __specMixin({extra+: extra}),\n            // Groups is the groups you're testing for.\n            withGroup(group):: self + if std.type(group) == \"array\" then __specMixin({group: group}) else __specMixin({group: [group]}),\n            // Groups is the groups you're testing for.\n            withGroupMixin(group):: self + if std.type(group) == \"array\" then __specMixin({group+: group}) else __specMixin({group+: [group]}),\n            // NonResourceAttributes describes information for a non-resource access request\n            nonResourceAttributes:: {\n              local __nonResourceAttributesMixin(nonResourceAttributes) = __specMixin({nonResourceAttributes+: nonResourceAttributes}),\n              mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes),\n              // Path is the URL path of the request\n              withPath(path):: self + __nonResourceAttributesMixin({path: path}),\n              // Verb is the standard HTTP verb\n              withVerb(verb):: self + __nonResourceAttributesMixin({verb: verb}),\n            },\n            nonResourceAttributesType:: hidden.authorization.v1beta1.nonResourceAttributes,\n            // ResourceAuthorizationAttributes describes information for a resource access request\n            resourceAttributes:: {\n              local __resourceAttributesMixin(resourceAttributes) = __specMixin({resourceAttributes+: resourceAttributes}),\n              mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes),\n              // Group is the API Group of the Resource.  \"*\" means all.\n              withGroup(group):: self + __resourceAttributesMixin({group: group}),\n              // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n              withName(name):: self + __resourceAttributesMixin({name: name}),\n              // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n              withNamespace(namespace):: self + __resourceAttributesMixin({namespace: namespace}),\n              // Resource is one of the existing resource types.  \"*\" means all.\n              withResource(resource):: self + __resourceAttributesMixin({resource: resource}),\n              // Subresource is one of the existing resource types.  \"\" means none.\n              withSubresource(subresource):: self + __resourceAttributesMixin({subresource: subresource}),\n              // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n              withVerb(verb):: self + __resourceAttributesMixin({verb: verb}),\n              // Version is the API Version of the Resource.  \"*\" means all.\n              withVersion(version):: self + __resourceAttributesMixin({version: version}),\n            },\n            resourceAttributesType:: hidden.authorization.v1beta1.resourceAttributes,\n            // User is the user you're testing for. If you specify \"User\" but not \"Group\", then is it interpreted as \"What if User were not a member of any groups\n            withUser(user):: self + __specMixin({user: user}),\n          },\n          specType:: hidden.authorization.v1beta1.subjectAccessReviewSpec,\n        },\n      },\n    },\n  },\n  autoscaling:: {\n    v1:: {\n      local apiVersion = {apiVersion: \"autoscaling/v1\"},\n      // configuration of a horizontal pod autoscaler.\n      horizontalPodAutoscaler:: {\n        local kind = {kind: \"HorizontalPodAutoscaler\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          // Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // behaviour of autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // upper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas.\n            withMaxReplicas(maxReplicas):: self + __specMixin({maxReplicas: maxReplicas}),\n            // lower limit for the number of pods that can be set by the autoscaler, default 1.\n            withMinReplicas(minReplicas):: self + __specMixin({minReplicas: minReplicas}),\n            // reference to scaled resource; horizontal pod autoscaler will learn the current resource consumption and will set the desired number of pods by using its Scale subresource.\n            scaleTargetRef:: {\n              local __scaleTargetRefMixin(scaleTargetRef) = __specMixin({scaleTargetRef+: scaleTargetRef}),\n              mixinInstance(scaleTargetRef):: __scaleTargetRefMixin(scaleTargetRef),\n              // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\n              withName(name):: self + __scaleTargetRefMixin({name: name}),\n            },\n            scaleTargetRefType:: hidden.autoscaling.v1.crossVersionObjectReference,\n            // target average CPU utilization (represented as a percentage of requested CPU) over all the pods; if not specified the default autoscaling policy will be used.\n            withTargetCpuUtilizationPercentage(targetCpuUtilizationPercentage):: self + __specMixin({targetCPUUtilizationPercentage: targetCpuUtilizationPercentage}),\n          },\n          specType:: hidden.autoscaling.v1.horizontalPodAutoscalerSpec,\n        },\n      },\n      // list of horizontal pod autoscaler objects.\n      horizontalPodAutoscalerList:: {\n        local kind = {kind: \"HorizontalPodAutoscalerList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        // list of horizontal pod autoscaler objects.\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // list of horizontal pod autoscaler objects.\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.autoscaling.v1.horizontalPodAutoscaler,\n        mixin:: {\n        },\n      },\n      // Scale represents a scaling request for a resource.\n      scale:: {\n        local kind = {kind: \"Scale\"},\n        new(replicas):: kind + apiVersion + self.mixin.spec.withReplicas(replicas),\n        mixin:: {\n          // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // desired number of instances for the scaled object.\n            withReplicas(replicas):: self + __specMixin({replicas: replicas}),\n          },\n          specType:: hidden.autoscaling.v1.scaleSpec,\n        },\n      },\n    },\n    v2alpha1:: {\n      local apiVersion = {apiVersion: \"autoscaling/v2alpha1\"},\n      // HorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified.\n      horizontalPodAutoscaler:: {\n        local kind = {kind: \"HorizontalPodAutoscaler\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          // metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas.\n            withMaxReplicas(maxReplicas):: self + __specMixin({maxReplicas: maxReplicas}),\n            // metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used).  The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods.  Ergo, metrics used must decrease as the pod count is increased, and vice-versa.  See the individual metric source types for more information about how each type of metric must respond.\n            withMetrics(metrics):: self + if std.type(metrics) == \"array\" then __specMixin({metrics: metrics}) else __specMixin({metrics: [metrics]}),\n            // metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used).  The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods.  Ergo, metrics used must decrease as the pod count is increased, and vice-versa.  See the individual metric source types for more information about how each type of metric must respond.\n            withMetricsMixin(metrics):: self + if std.type(metrics) == \"array\" then __specMixin({metrics+: metrics}) else __specMixin({metrics+: [metrics]}),\n            metricsType:: hidden.autoscaling.v2alpha1.metricSpec,\n            // minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod.\n            withMinReplicas(minReplicas):: self + __specMixin({minReplicas: minReplicas}),\n            // scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count.\n            scaleTargetRef:: {\n              local __scaleTargetRefMixin(scaleTargetRef) = __specMixin({scaleTargetRef+: scaleTargetRef}),\n              mixinInstance(scaleTargetRef):: __scaleTargetRefMixin(scaleTargetRef),\n              // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\n              withName(name):: self + __scaleTargetRefMixin({name: name}),\n            },\n            scaleTargetRefType:: hidden.autoscaling.v2alpha1.crossVersionObjectReference,\n          },\n          specType:: hidden.autoscaling.v2alpha1.horizontalPodAutoscalerSpec,\n        },\n      },\n      // HorizontalPodAutoscaler is a list of horizontal pod autoscaler objects.\n      horizontalPodAutoscalerList:: {\n        local kind = {kind: \"HorizontalPodAutoscalerList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        // items is the list of horizontal pod autoscaler objects.\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // items is the list of horizontal pod autoscaler objects.\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.autoscaling.v2alpha1.horizontalPodAutoscaler,\n        mixin:: {\n        },\n      },\n    },\n  },\n  batch:: {\n    v1:: {\n      local apiVersion = {apiVersion: \"batch/v1\"},\n      // Job represents the configuration of a single job.\n      job:: {\n        local kind = {kind: \"Job\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Specification of the desired behavior of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer\n            withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n            // Specifies the desired number of successfully finished pods the job should be run with.  Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value.  Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n            withCompletions(completions):: self + __specMixin({completions: completions}),\n            // manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template.  When true, the user is responsible for picking unique labels and specifying the selector.  Failure to pick a unique label may cause this and other jobs to not function correctly.  However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://git.k8s.io/community/contributors/design-proposals/selector-generation.md\n            withManualSelector(manualSelector):: self + __specMixin({manualSelector: manualSelector}),\n            // Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n            withParallelism(parallelism):: self + __specMixin({parallelism: parallelism}),\n            // A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({selector+: selector}),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n            template:: {\n              local __templateMixin(template) = __specMixin({template+: template}),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n                // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n                withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                  pendingType:: hidden.meta.v1.initializer,\n                  // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                  result:: {\n                    local __resultMixin(result) = __initializersMixin({result+: result}),\n                    mixinInstance(result):: __resultMixin(result),\n                    // Suggested HTTP return code for this status, 0 if not set.\n                    withCode(code):: self + __resultMixin({code: code}),\n                    // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                    details:: {\n                      local __detailsMixin(details) = __resultMixin({details+: details}),\n                      mixinInstance(details):: __detailsMixin(details),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                      causesType:: hidden.meta.v1.statusCause,\n                      // The group attribute of the resource associated with the status StatusReason.\n                      withGroup(group):: self + __detailsMixin({group: group}),\n                      // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                      withName(name):: self + __detailsMixin({name: name}),\n                      // If specified, the time in seconds before the operation should be retried.\n                      withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                      // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                      withUid(uid):: self + __detailsMixin({uid: uid}),\n                    },\n                    detailsType:: hidden.meta.v1.statusDetails,\n                    // A human-readable description of the status of this operation.\n                    withMessage(message):: self + __resultMixin({message: message}),\n                    // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                    withReason(reason):: self + __resultMixin({reason: reason}),\n                  },\n                  resultType:: hidden.meta.v1.status,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({labels: labels}),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({name: name}),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({spec+: spec}),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({affinity+: affinity}),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}),\n                containersType:: hidden.core.v1.container,\n                // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({hostname: hostname}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}),\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}),\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n          specType:: hidden.batch.v1.jobSpec,\n        },\n      },\n      // JobList is a collection of jobs.\n      jobList:: {\n        local kind = {kind: \"JobList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        // items is the list of Jobs.\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // items is the list of Jobs.\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.batch.v1.job,\n        mixin:: {\n        },\n      },\n    },\n    v2alpha1:: {\n      local apiVersion = {apiVersion: \"batch/v2alpha1\"},\n      // CronJob represents the configuration of a single cron job.\n      cronJob:: {\n        local kind = {kind: \"CronJob\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // Specifies how to treat concurrent executions of a Job. Defaults to Allow.\n            withConcurrencyPolicy(concurrencyPolicy):: self + __specMixin({concurrencyPolicy: concurrencyPolicy}),\n            // The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.\n            withFailedJobsHistoryLimit(failedJobsHistoryLimit):: self + __specMixin({failedJobsHistoryLimit: failedJobsHistoryLimit}),\n            // Specifies the job that will be created when executing a CronJob.\n            jobTemplate:: {\n              local __jobTemplateMixin(jobTemplate) = __specMixin({jobTemplate+: jobTemplate}),\n              mixinInstance(jobTemplate):: __jobTemplateMixin(jobTemplate),\n              // Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __jobTemplateMixin({metadata+: metadata}),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n                // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n                withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                  pendingType:: hidden.meta.v1.initializer,\n                  // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                  result:: {\n                    local __resultMixin(result) = __initializersMixin({result+: result}),\n                    mixinInstance(result):: __resultMixin(result),\n                    // Suggested HTTP return code for this status, 0 if not set.\n                    withCode(code):: self + __resultMixin({code: code}),\n                    // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                    details:: {\n                      local __detailsMixin(details) = __resultMixin({details+: details}),\n                      mixinInstance(details):: __detailsMixin(details),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                      causesType:: hidden.meta.v1.statusCause,\n                      // The group attribute of the resource associated with the status StatusReason.\n                      withGroup(group):: self + __detailsMixin({group: group}),\n                      // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                      withName(name):: self + __detailsMixin({name: name}),\n                      // If specified, the time in seconds before the operation should be retried.\n                      withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                      // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                      withUid(uid):: self + __detailsMixin({uid: uid}),\n                    },\n                    detailsType:: hidden.meta.v1.statusDetails,\n                    // A human-readable description of the status of this operation.\n                    withMessage(message):: self + __resultMixin({message: message}),\n                    // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                    withReason(reason):: self + __resultMixin({reason: reason}),\n                  },\n                  resultType:: hidden.meta.v1.status,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({labels: labels}),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({name: name}),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __jobTemplateMixin({spec+: spec}),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n                // Specifies the desired number of successfully finished pods the job should be run with.  Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value.  Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n                withCompletions(completions):: self + __specMixin({completions: completions}),\n                // manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template.  When true, the user is responsible for picking unique labels and specifying the selector.  Failure to pick a unique label may cause this and other jobs to not function correctly.  However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://git.k8s.io/community/contributors/design-proposals/selector-generation.md\n                withManualSelector(manualSelector):: self + __specMixin({manualSelector: manualSelector}),\n                // Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n                withParallelism(parallelism):: self + __specMixin({parallelism: parallelism}),\n                // A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n                selector:: {\n                  local __selectorMixin(selector) = __specMixin({selector+: selector}),\n                  mixinInstance(selector):: __selectorMixin(selector),\n                  // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                  withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}),\n                  // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                  withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}),\n                  matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n                  // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                  withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}),\n                  // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                  withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}),\n                },\n                selectorType:: hidden.meta.v1.labelSelector,\n                // Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n                template:: {\n                  local __templateMixin(template) = __specMixin({template+: template}),\n                  mixinInstance(template):: __templateMixin(template),\n                  // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n                  metadata:: {\n                    local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}),\n                    mixinInstance(metadata):: __metadataMixin(metadata),\n                    // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                    withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n                    // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                    withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n                    // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                    withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n                    // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n                    withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n                    // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                    withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n                    // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                    withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n                    // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                    //\n                    // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                    //\n                    // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                    withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n                    // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                    //\n                    // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                    initializers:: {\n                      local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                      mixinInstance(initializers):: __initializersMixin(initializers),\n                      // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                      withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                      // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                      withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                      pendingType:: hidden.meta.v1.initializer,\n                      // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                      result:: {\n                        local __resultMixin(result) = __initializersMixin({result+: result}),\n                        mixinInstance(result):: __resultMixin(result),\n                        // Suggested HTTP return code for this status, 0 if not set.\n                        withCode(code):: self + __resultMixin({code: code}),\n                        // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                        details:: {\n                          local __detailsMixin(details) = __resultMixin({details+: details}),\n                          mixinInstance(details):: __detailsMixin(details),\n                          // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                          withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                          // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                          withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                          causesType:: hidden.meta.v1.statusCause,\n                          // The group attribute of the resource associated with the status StatusReason.\n                          withGroup(group):: self + __detailsMixin({group: group}),\n                          // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                          withName(name):: self + __detailsMixin({name: name}),\n                          // If specified, the time in seconds before the operation should be retried.\n                          withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                          // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                          withUid(uid):: self + __detailsMixin({uid: uid}),\n                        },\n                        detailsType:: hidden.meta.v1.statusDetails,\n                        // A human-readable description of the status of this operation.\n                        withMessage(message):: self + __resultMixin({message: message}),\n                        // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                        withReason(reason):: self + __resultMixin({reason: reason}),\n                      },\n                      resultType:: hidden.meta.v1.status,\n                    },\n                    initializersType:: hidden.meta.v1.initializers,\n                    // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                    withLabels(labels):: self + __metadataMixin({labels: labels}),\n                    // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                    withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n                    // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                    withName(name):: self + __metadataMixin({name: name}),\n                    // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                    //\n                    // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                    withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n                  },\n                  metadataType:: hidden.meta.v1.objectMeta,\n                  // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n                  spec:: {\n                    local __specMixin(spec) = __templateMixin({spec+: spec}),\n                    mixinInstance(spec):: __specMixin(spec),\n                    // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                    withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n                    // If specified, the pod's scheduling constraints\n                    affinity:: {\n                      local __affinityMixin(affinity) = __specMixin({affinity+: affinity}),\n                      mixinInstance(affinity):: __affinityMixin(affinity),\n                      // Describes node affinity scheduling rules for the pod.\n                      nodeAffinity:: {\n                        local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}),\n                        mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                        preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                        // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                        requiredDuringSchedulingIgnoredDuringExecution:: {\n                          local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                          mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                          // Required. A list of node selector terms. The terms are ORed.\n                          withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                          // Required. A list of node selector terms. The terms are ORed.\n                          withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                          nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                        },\n                        requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                      },\n                      nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                      // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                      podAffinity:: {\n                        local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}),\n                        mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                        preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                        // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                        // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                        requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                      },\n                      podAffinityType:: hidden.core.v1.podAffinity,\n                      // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                      podAntiAffinity:: {\n                        local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}),\n                        mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                        preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                        // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                        // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                        requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                      },\n                      podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                    },\n                    affinityType:: hidden.core.v1.affinity,\n                    // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                    withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}),\n                    // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                    withContainers(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}),\n                    // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                    withContainersMixin(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}),\n                    containersType:: hidden.core.v1.container,\n                    // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                    withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}),\n                    // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                    withHostAliases(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}),\n                    // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                    withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}),\n                    hostAliasesType:: hidden.core.v1.hostAlias,\n                    // Use the host's ipc namespace. Optional: Default to false.\n                    withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}),\n                    // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                    withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}),\n                    // Use the host's pid namespace. Optional: Default to false.\n                    withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}),\n                    // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                    withHostname(hostname):: self + __specMixin({hostname: hostname}),\n                    // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                    withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}),\n                    // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                    withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}),\n                    imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                    // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                    withInitContainers(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}),\n                    // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                    withInitContainersMixin(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}),\n                    initContainersType:: hidden.core.v1.container,\n                    // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                    withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}),\n                    // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                    withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}),\n                    // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                    withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}),\n                    // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                    withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}),\n                    // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                    withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}),\n                    // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                    securityContext:: {\n                      local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}),\n                      mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                      // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                      //\n                      // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                      //\n                      // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                      withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}),\n                      // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                      withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n                      // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                      withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n                      // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                      seLinuxOptions:: {\n                        local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                        mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                        // Level is SELinux level label that applies to the container.\n                        withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                        // Role is a SELinux role label that applies to the container.\n                        withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                        // Type is a SELinux type label that applies to the container.\n                        withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                        // User is a SELinux user label that applies to the container.\n                        withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n                      },\n                      seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                      // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                      withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}),\n                      // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                      withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}),\n                    },\n                    securityContextType:: hidden.core.v1.podSecurityContext,\n                    // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                    withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}),\n                    // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                    withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}),\n                    // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                    withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}),\n                    // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                    withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}),\n                    // If specified, the pod's tolerations.\n                    withTolerations(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}),\n                    // If specified, the pod's tolerations.\n                    withTolerationsMixin(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}),\n                    tolerationsType:: hidden.core.v1.toleration,\n                    // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                    withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n                    // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                    withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n                    volumesType:: hidden.core.v1.volume,\n                  },\n                  specType:: hidden.core.v1.podSpec,\n                },\n                templateType:: hidden.core.v1.podTemplateSpec,\n              },\n              specType:: hidden.batch.v1.jobSpec,\n            },\n            jobTemplateType:: hidden.batch.v2alpha1.jobTemplateSpec,\n            // The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.\n            withSchedule(schedule):: self + __specMixin({schedule: schedule}),\n            // Optional deadline in seconds for starting the job if it misses scheduled time for any reason.  Missed jobs executions will be counted as failed ones.\n            withStartingDeadlineSeconds(startingDeadlineSeconds):: self + __specMixin({startingDeadlineSeconds: startingDeadlineSeconds}),\n            // The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.\n            withSuccessfulJobsHistoryLimit(successfulJobsHistoryLimit):: self + __specMixin({successfulJobsHistoryLimit: successfulJobsHistoryLimit}),\n            // This flag tells the controller to suspend subsequent executions, it does not apply to already started executions.  Defaults to false.\n            withSuspend(suspend):: self + __specMixin({suspend: suspend}),\n          },\n          specType:: hidden.batch.v2alpha1.cronJobSpec,\n        },\n      },\n      // CronJobList is a collection of cron jobs.\n      cronJobList:: {\n        local kind = {kind: \"CronJobList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        // items is the list of CronJobs.\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // items is the list of CronJobs.\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.batch.v2alpha1.cronJob,\n        mixin:: {\n        },\n      },\n    },\n  },\n  certificates:: {\n    v1beta1:: {\n      local apiVersion = {apiVersion: \"certificates.k8s.io/v1beta1\"},\n      // Describes a certificate signing request\n      certificateSigningRequest:: {\n        local kind = {kind: \"CertificateSigningRequest\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          //\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // The certificate request itself and any additional information.\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // Extra information about the requesting user. See user.Info interface for details.\n            withExtra(extra):: self + __specMixin({extra: extra}),\n            // Extra information about the requesting user. See user.Info interface for details.\n            withExtraMixin(extra):: self + __specMixin({extra+: extra}),\n            // Group information about the requesting user. See user.Info interface for details.\n            withGroups(groups):: self + if std.type(groups) == \"array\" then __specMixin({groups: groups}) else __specMixin({groups: [groups]}),\n            // Group information about the requesting user. See user.Info interface for details.\n            withGroupsMixin(groups):: self + if std.type(groups) == \"array\" then __specMixin({groups+: groups}) else __specMixin({groups+: [groups]}),\n            // Base64-encoded PKCS#10 CSR data\n            withRequest(request):: self + __specMixin({request: request}),\n            // UID information about the requesting user. See user.Info interface for details.\n            withUid(uid):: self + __specMixin({uid: uid}),\n            // allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3\n            //      https://tools.ietf.org/html/rfc5280#section-4.2.1.12\n            withUsages(usages):: self + if std.type(usages) == \"array\" then __specMixin({usages: usages}) else __specMixin({usages: [usages]}),\n            // allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3\n            //      https://tools.ietf.org/html/rfc5280#section-4.2.1.12\n            withUsagesMixin(usages):: self + if std.type(usages) == \"array\" then __specMixin({usages+: usages}) else __specMixin({usages+: [usages]}),\n            // Information about the requesting user. See user.Info interface for details.\n            withUsername(username):: self + __specMixin({username: username}),\n          },\n          specType:: hidden.certificates.v1beta1.certificateSigningRequestSpec,\n        },\n      },\n      //\n      certificateSigningRequestList:: {\n        local kind = {kind: \"CertificateSigningRequestList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        //\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        //\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.certificates.v1beta1.certificateSigningRequest,\n        mixin:: {\n        },\n      },\n    },\n  },\n  core:: {\n    v1:: {\n      local apiVersion = {apiVersion: \"v1\"},\n      // Binding ties one object to another; for example, a pod is bound to a node by a scheduler. Deprecated in 1.7, please use the bindings subresource of pods instead.\n      binding:: {\n        local kind = {kind: \"Binding\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // The target object that you want to bind to the standard object.\n          target:: {\n            local __targetMixin(target) = {target+: target},\n            mixinInstance(target):: __targetMixin(target),\n            // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\n            withFieldPath(fieldPath):: self + __targetMixin({fieldPath: fieldPath}),\n            // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n            withName(name):: self + __targetMixin({name: name}),\n            // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n            withNamespace(namespace):: self + __targetMixin({namespace: namespace}),\n            // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n            withResourceVersion(resourceVersion):: self + __targetMixin({resourceVersion: resourceVersion}),\n            // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n            withUid(uid):: self + __targetMixin({uid: uid}),\n          },\n          targetType:: hidden.core.v1.objectReference,\n        },\n      },\n      // ComponentStatus (and ComponentStatusList) holds the cluster validation info.\n      componentStatus:: {\n        local kind = {kind: \"ComponentStatus\"},\n        new():: kind + apiVersion,\n        // List of component conditions observed\n        withConditions(conditions):: self + if std.type(conditions) == \"array\" then {conditions: conditions} else {conditions: [conditions]},\n        // List of component conditions observed\n        withConditionsMixin(conditions):: self + if std.type(conditions) == \"array\" then {conditions+: conditions} else {conditions+: [conditions]},\n        conditionsType:: hidden.core.v1.componentCondition,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // Status of all the conditions for the component as a list of ComponentStatus objects.\n      componentStatusList:: {\n        local kind = {kind: \"ComponentStatusList\"},\n        new():: kind + apiVersion,\n        // List of ComponentStatus objects.\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // List of ComponentStatus objects.\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.core.v1.componentStatus,\n        mixin:: {\n        },\n      },\n      // ConfigMap holds configuration data for pods to consume.\n      configMap:: {\n        local kind = {kind: \"ConfigMap\"},\n        new(name, data):: kind + apiVersion + self.mixin.metadata.withName(name) + self.withData(data),\n        // Data contains the configuration data. Each key must consist of alphanumeric characters, '-', '_' or '.'.\n        withData(data):: self + {data: data},\n        // Data contains the configuration data. Each key must consist of alphanumeric characters, '-', '_' or '.'.\n        withDataMixin(data):: self + {data+: data},\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // ConfigMapList is a resource containing a list of ConfigMap objects.\n      configMapList:: {\n        local kind = {kind: \"ConfigMapList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        // Items is the list of ConfigMaps.\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is the list of ConfigMaps.\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.core.v1.configMap,\n        mixin:: {\n        },\n      },\n      // Endpoints is a collection of endpoints that implement the actual service. Example:\n      //   Name: \"mysvc\",\n      //   Subsets: [\n      //     {\n      //       Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n      //       Ports: [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n      //     },\n      //     {\n      //       Addresses: [{\"ip\": \"10.10.3.3\"}],\n      //       Ports: [{\"name\": \"a\", \"port\": 93}, {\"name\": \"b\", \"port\": 76}]\n      //     },\n      //  ]\n      endpoints:: {\n        local kind = {kind: \"Endpoints\"},\n        new():: kind + apiVersion,\n        // The set of all endpoints is the union of all subsets. Addresses are placed into subsets according to the IPs they share. A single address with multiple ports, some of which are ready and some of which are not (because they come from different containers) will result in the address being displayed in different subsets for the different ports. No address will appear in both Addresses and NotReadyAddresses in the same subset. Sets of addresses and ports that comprise a service.\n        withSubsets(subsets):: self + if std.type(subsets) == \"array\" then {subsets: subsets} else {subsets: [subsets]},\n        // The set of all endpoints is the union of all subsets. Addresses are placed into subsets according to the IPs they share. A single address with multiple ports, some of which are ready and some of which are not (because they come from different containers) will result in the address being displayed in different subsets for the different ports. No address will appear in both Addresses and NotReadyAddresses in the same subset. Sets of addresses and ports that comprise a service.\n        withSubsetsMixin(subsets):: self + if std.type(subsets) == \"array\" then {subsets+: subsets} else {subsets+: [subsets]},\n        subsetsType:: hidden.core.v1.endpointSubset,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // EndpointsList is a list of endpoints.\n      endpointsList:: {\n        local kind = {kind: \"EndpointsList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        // List of endpoints.\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // List of endpoints.\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.core.v1.endpoints,\n        mixin:: {\n        },\n      },\n      // Event is a report of an event somewhere in the cluster.\n      event:: {\n        local kind = {kind: \"Event\"},\n        new():: kind + apiVersion,\n        // The number of times this event has occurred.\n        withCount(count):: self + {count: count},\n        // A human-readable description of the status of this operation.\n        withMessage(message):: self + {message: message},\n        // This should be a short, machine understandable string that gives the reason for the transition into the object's current status.\n        withReason(reason):: self + {reason: reason},\n        // Type of this event (Normal, Warning), new types could be added in the future\n        withType(type):: self + {type: type},\n        mixin:: {\n          // The time at which the event was first recorded. (Time of server receipt is in TypeMeta.)\n          firstTimestamp:: {\n            local __firstTimestampMixin(firstTimestamp) = {firstTimestamp+: firstTimestamp},\n            mixinInstance(firstTimestamp):: __firstTimestampMixin(firstTimestamp),\n          },\n          firstTimestampType:: hidden.meta.v1.time,\n          // The object that this event is about.\n          involvedObject:: {\n            local __involvedObjectMixin(involvedObject) = {involvedObject+: involvedObject},\n            mixinInstance(involvedObject):: __involvedObjectMixin(involvedObject),\n            // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\n            withFieldPath(fieldPath):: self + __involvedObjectMixin({fieldPath: fieldPath}),\n            // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n            withName(name):: self + __involvedObjectMixin({name: name}),\n            // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n            withNamespace(namespace):: self + __involvedObjectMixin({namespace: namespace}),\n            // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n            withResourceVersion(resourceVersion):: self + __involvedObjectMixin({resourceVersion: resourceVersion}),\n            // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n            withUid(uid):: self + __involvedObjectMixin({uid: uid}),\n          },\n          involvedObjectType:: hidden.core.v1.objectReference,\n          // The time at which the most recent occurrence of this event was recorded.\n          lastTimestamp:: {\n            local __lastTimestampMixin(lastTimestamp) = {lastTimestamp+: lastTimestamp},\n            mixinInstance(lastTimestamp):: __lastTimestampMixin(lastTimestamp),\n          },\n          lastTimestampType:: hidden.meta.v1.time,\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // The component reporting this event. Should be a short machine understandable string.\n          source:: {\n            local __sourceMixin(source) = {source+: source},\n            mixinInstance(source):: __sourceMixin(source),\n            // Component from which the event is generated.\n            withComponent(component):: self + __sourceMixin({component: component}),\n            // Node name on which the event is generated.\n            withHost(host):: self + __sourceMixin({host: host}),\n          },\n          sourceType:: hidden.core.v1.eventSource,\n        },\n      },\n      // EventList is a list of events.\n      eventList:: {\n        local kind = {kind: \"EventList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        // List of events\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // List of events\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.core.v1.event,\n        mixin:: {\n        },\n      },\n      // LimitRange sets resource usage limits for each kind of resource in a Namespace.\n      limitRange:: {\n        local kind = {kind: \"LimitRange\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the limits enforced. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // Limits is the list of LimitRangeItem objects that are enforced.\n            withLimits(limits):: self + if std.type(limits) == \"array\" then __specMixin({limits: limits}) else __specMixin({limits: [limits]}),\n            // Limits is the list of LimitRangeItem objects that are enforced.\n            withLimitsMixin(limits):: self + if std.type(limits) == \"array\" then __specMixin({limits+: limits}) else __specMixin({limits+: [limits]}),\n            limitsType:: hidden.core.v1.limitRangeItem,\n          },\n          specType:: hidden.core.v1.limitRangeSpec,\n        },\n      },\n      // LimitRangeList is a list of LimitRange items.\n      limitRangeList:: {\n        local kind = {kind: \"LimitRangeList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        // Items is a list of LimitRange objects. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_limit_range.md\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is a list of LimitRange objects. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_limit_range.md\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.core.v1.limitRange,\n        mixin:: {\n        },\n      },\n      // Namespace provides a scope for Names. Use of multiple namespaces is optional.\n      namespace:: {\n        local kind = {kind: \"Namespace\"},\n        new(name):: kind + apiVersion + self.mixin.metadata.withName(name),\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the behavior of the Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://git.k8s.io/community/contributors/design-proposals/namespaces.md#finalizers\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __specMixin({finalizers: finalizers}) else __specMixin({finalizers: [finalizers]}),\n            // Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://git.k8s.io/community/contributors/design-proposals/namespaces.md#finalizers\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __specMixin({finalizers+: finalizers}) else __specMixin({finalizers+: [finalizers]}),\n          },\n          specType:: hidden.core.v1.namespaceSpec,\n        },\n      },\n      // NamespaceList is a list of Namespaces.\n      namespaceList:: {\n        local kind = {kind: \"NamespaceList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        // Items is the list of Namespace objects in the list. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is the list of Namespace objects in the list. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.core.v1.namespace,\n        mixin:: {\n        },\n      },\n      // Node is a worker node in Kubernetes. Each node will have a unique identifier in the cache (i.e. in etcd).\n      node:: {\n        local kind = {kind: \"Node\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the behavior of a node. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // External ID of the node assigned by some machine database (e.g. a cloud provider). Deprecated.\n            withExternalId(externalId):: self + __specMixin({externalID: externalId}),\n            // PodCIDR represents the pod IP range assigned to the node.\n            withPodCidr(podCidr):: self + __specMixin({podCIDR: podCidr}),\n            // ID of the node assigned by the cloud provider in the format: <ProviderName>://<ProviderSpecificNodeID>\n            withProviderId(providerId):: self + __specMixin({providerID: providerId}),\n            // If specified, the node's taints.\n            withTaints(taints):: self + if std.type(taints) == \"array\" then __specMixin({taints: taints}) else __specMixin({taints: [taints]}),\n            // If specified, the node's taints.\n            withTaintsMixin(taints):: self + if std.type(taints) == \"array\" then __specMixin({taints+: taints}) else __specMixin({taints+: [taints]}),\n            taintsType:: hidden.core.v1.taint,\n            // Unschedulable controls node schedulability of new pods. By default, node is schedulable. More info: https://kubernetes.io/docs/concepts/nodes/node/#manual-node-administration\n            withUnschedulable(unschedulable):: self + __specMixin({unschedulable: unschedulable}),\n          },\n          specType:: hidden.core.v1.nodeSpec,\n        },\n      },\n      // NodeList is the whole list of all Nodes which have been registered with master.\n      nodeList:: {\n        local kind = {kind: \"NodeList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        // List of nodes\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // List of nodes\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.core.v1.node,\n        mixin:: {\n        },\n      },\n      // PersistentVolume (PV) is a storage resource provisioned by an administrator. It is analogous to a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes\n      persistentVolume:: {\n        local kind = {kind: \"PersistentVolume\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines a specification of a persistent volume owned by the cluster. Provisioned by an administrator. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes\n            withAccessModes(accessModes):: self + if std.type(accessModes) == \"array\" then __specMixin({accessModes: accessModes}) else __specMixin({accessModes: [accessModes]}),\n            // AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes\n            withAccessModesMixin(accessModes):: self + if std.type(accessModes) == \"array\" then __specMixin({accessModes+: accessModes}) else __specMixin({accessModes+: [accessModes]}),\n            // AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n            awsElasticBlockStore:: {\n              local __awsElasticBlockStoreMixin(awsElasticBlockStore) = __specMixin({awsElasticBlockStore+: awsElasticBlockStore}),\n              mixinInstance(awsElasticBlockStore):: __awsElasticBlockStoreMixin(awsElasticBlockStore),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n              withFsType(fsType):: self + __awsElasticBlockStoreMixin({fsType: fsType}),\n              // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty).\n              withPartition(partition):: self + __awsElasticBlockStoreMixin({partition: partition}),\n              // Specify \"true\" to force and set the ReadOnly property in VolumeMounts to \"true\". If omitted, the default is \"false\". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n              withReadOnly(readOnly):: self + __awsElasticBlockStoreMixin({readOnly: readOnly}),\n              // Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n              withVolumeId(volumeId):: self + __awsElasticBlockStoreMixin({volumeID: volumeId}),\n            },\n            awsElasticBlockStoreType:: hidden.core.v1.awsElasticBlockStoreVolumeSource,\n            // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.\n            azureDisk:: {\n              local __azureDiskMixin(azureDisk) = __specMixin({azureDisk+: azureDisk}),\n              mixinInstance(azureDisk):: __azureDiskMixin(azureDisk),\n              // Host Caching mode: None, Read Only, Read Write.\n              withCachingMode(cachingMode):: self + __azureDiskMixin({cachingMode: cachingMode}),\n              // The Name of the data disk in the blob storage\n              withDiskName(diskName):: self + __azureDiskMixin({diskName: diskName}),\n              // The URI the data disk in the blob storage\n              withDiskUri(diskUri):: self + __azureDiskMixin({diskURI: diskUri}),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __azureDiskMixin({fsType: fsType}),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __azureDiskMixin({readOnly: readOnly}),\n            },\n            azureDiskType:: hidden.core.v1.azureDiskVolumeSource,\n            // AzureFile represents an Azure File Service mount on the host and bind mount to the pod.\n            azureFile:: {\n              local __azureFileMixin(azureFile) = __specMixin({azureFile+: azureFile}),\n              mixinInstance(azureFile):: __azureFileMixin(azureFile),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __azureFileMixin({readOnly: readOnly}),\n              // the name of secret that contains Azure Storage Account Name and Key\n              withSecretName(secretName):: self + __azureFileMixin({secretName: secretName}),\n              // Share Name\n              withShareName(shareName):: self + __azureFileMixin({shareName: shareName}),\n            },\n            azureFileType:: hidden.core.v1.azureFileVolumeSource,\n            // A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity\n            withCapacity(capacity):: self + __specMixin({capacity: capacity}),\n            // A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity\n            withCapacityMixin(capacity):: self + __specMixin({capacity+: capacity}),\n            // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime\n            cephfs:: {\n              local __cephfsMixin(cephfs) = __specMixin({cephfs+: cephfs}),\n              mixinInstance(cephfs):: __cephfsMixin(cephfs),\n              // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withMonitors(monitors):: self + if std.type(monitors) == \"array\" then __cephfsMixin({monitors: monitors}) else __cephfsMixin({monitors: [monitors]}),\n              // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withMonitorsMixin(monitors):: self + if std.type(monitors) == \"array\" then __cephfsMixin({monitors+: monitors}) else __cephfsMixin({monitors+: [monitors]}),\n              // Optional: Used as the mounted root, rather than the full Ceph tree, default is /\n              withPath(path):: self + __cephfsMixin({path: path}),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withReadOnly(readOnly):: self + __cephfsMixin({readOnly: readOnly}),\n              // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withSecretFile(secretFile):: self + __cephfsMixin({secretFile: secretFile}),\n              // Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __cephfsMixin({secretRef+: secretRef}),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({name: name}),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n              // Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withUser(user):: self + __cephfsMixin({user: user}),\n            },\n            cephfsType:: hidden.core.v1.cephFsVolumeSource,\n            // Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n            cinder:: {\n              local __cinderMixin(cinder) = __specMixin({cinder+: cinder}),\n              mixinInstance(cinder):: __cinderMixin(cinder),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n              withFsType(fsType):: self + __cinderMixin({fsType: fsType}),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n              withReadOnly(readOnly):: self + __cinderMixin({readOnly: readOnly}),\n              // volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n              withVolumeId(volumeId):: self + __cinderMixin({volumeID: volumeId}),\n            },\n            cinderType:: hidden.core.v1.cinderVolumeSource,\n            // ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding\n            claimRef:: {\n              local __claimRefMixin(claimRef) = __specMixin({claimRef+: claimRef}),\n              mixinInstance(claimRef):: __claimRefMixin(claimRef),\n              // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\n              withFieldPath(fieldPath):: self + __claimRefMixin({fieldPath: fieldPath}),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __claimRefMixin({name: name}),\n              // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n              withNamespace(namespace):: self + __claimRefMixin({namespace: namespace}),\n              // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n              withResourceVersion(resourceVersion):: self + __claimRefMixin({resourceVersion: resourceVersion}),\n              // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n              withUid(uid):: self + __claimRefMixin({uid: uid}),\n            },\n            claimRefType:: hidden.core.v1.objectReference,\n            // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.\n            fc:: {\n              local __fcMixin(fc) = __specMixin({fc+: fc}),\n              mixinInstance(fc):: __fcMixin(fc),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __fcMixin({fsType: fsType}),\n              // Required: FC target lun number\n              withLun(lun):: self + __fcMixin({lun: lun}),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __fcMixin({readOnly: readOnly}),\n              // Required: FC target worldwide names (WWNs)\n              withTargetWwns(targetWwns):: self + if std.type(targetWwns) == \"array\" then __fcMixin({targetWWNs: targetWwns}) else __fcMixin({targetWWNs: [targetWwns]}),\n              // Required: FC target worldwide names (WWNs)\n              withTargetWwnsMixin(targetWwns):: self + if std.type(targetWwns) == \"array\" then __fcMixin({targetWWNs+: targetWwns}) else __fcMixin({targetWWNs+: [targetWwns]}),\n            },\n            fcType:: hidden.core.v1.fcVolumeSource,\n            // FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.\n            flexVolume:: {\n              local __flexVolumeMixin(flexVolume) = __specMixin({flexVolume+: flexVolume}),\n              mixinInstance(flexVolume):: __flexVolumeMixin(flexVolume),\n              // Driver is the name of the driver to use for this volume.\n              withDriver(driver):: self + __flexVolumeMixin({driver: driver}),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.\n              withFsType(fsType):: self + __flexVolumeMixin({fsType: fsType}),\n              // Optional: Extra command options if any.\n              withOptions(options):: self + __flexVolumeMixin({options: options}),\n              // Optional: Extra command options if any.\n              withOptionsMixin(options):: self + __flexVolumeMixin({options+: options}),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __flexVolumeMixin({readOnly: readOnly}),\n              // Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __flexVolumeMixin({secretRef+: secretRef}),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({name: name}),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n            },\n            flexVolumeType:: hidden.core.v1.flexVolumeSource,\n            // Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running\n            flocker:: {\n              local __flockerMixin(flocker) = __specMixin({flocker+: flocker}),\n              mixinInstance(flocker):: __flockerMixin(flocker),\n              // Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated\n              withDatasetName(datasetName):: self + __flockerMixin({datasetName: datasetName}),\n              // UUID of the dataset. This is unique identifier of a Flocker dataset\n              withDatasetUuid(datasetUuid):: self + __flockerMixin({datasetUUID: datasetUuid}),\n            },\n            flockerType:: hidden.core.v1.flockerVolumeSource,\n            // GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n            gcePersistentDisk:: {\n              local __gcePersistentDiskMixin(gcePersistentDisk) = __specMixin({gcePersistentDisk+: gcePersistentDisk}),\n              mixinInstance(gcePersistentDisk):: __gcePersistentDiskMixin(gcePersistentDisk),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withFsType(fsType):: self + __gcePersistentDiskMixin({fsType: fsType}),\n              // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withPartition(partition):: self + __gcePersistentDiskMixin({partition: partition}),\n              // Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withPdName(pdName):: self + __gcePersistentDiskMixin({pdName: pdName}),\n              // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withReadOnly(readOnly):: self + __gcePersistentDiskMixin({readOnly: readOnly}),\n            },\n            gcePersistentDiskType:: hidden.core.v1.gcePersistentDiskVolumeSource,\n            // Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md\n            glusterfs:: {\n              local __glusterfsMixin(glusterfs) = __specMixin({glusterfs+: glusterfs}),\n              mixinInstance(glusterfs):: __glusterfsMixin(glusterfs),\n              // EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n              withEndpoints(endpoints):: self + __glusterfsMixin({endpoints: endpoints}),\n              // Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n              withPath(path):: self + __glusterfsMixin({path: path}),\n              // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n              withReadOnly(readOnly):: self + __glusterfsMixin({readOnly: readOnly}),\n            },\n            glusterfsType:: hidden.core.v1.glusterfsVolumeSource,\n            // HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\n            hostPath:: {\n              local __hostPathMixin(hostPath) = __specMixin({hostPath+: hostPath}),\n              mixinInstance(hostPath):: __hostPathMixin(hostPath),\n              // Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\n              withPath(path):: self + __hostPathMixin({path: path}),\n            },\n            hostPathType:: hidden.core.v1.hostPathVolumeSource,\n            // ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin.\n            iscsi:: {\n              local __iscsiMixin(iscsi) = __specMixin({iscsi+: iscsi}),\n              mixinInstance(iscsi):: __iscsiMixin(iscsi),\n              // whether support iSCSI Discovery CHAP authentication\n              withChapAuthDiscovery(chapAuthDiscovery):: self + __iscsiMixin({chapAuthDiscovery: chapAuthDiscovery}),\n              // whether support iSCSI Session CHAP authentication\n              withChapAuthSession(chapAuthSession):: self + __iscsiMixin({chapAuthSession: chapAuthSession}),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi\n              withFsType(fsType):: self + __iscsiMixin({fsType: fsType}),\n              // Target iSCSI Qualified Name.\n              withIqn(iqn):: self + __iscsiMixin({iqn: iqn}),\n              // Optional: Defaults to 'default' (tcp). iSCSI interface name that uses an iSCSI transport.\n              withIscsiInterface(iscsiInterface):: self + __iscsiMixin({iscsiInterface: iscsiInterface}),\n              // iSCSI target lun number.\n              withLun(lun):: self + __iscsiMixin({lun: lun}),\n              // iSCSI target portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n              withPortals(portals):: self + if std.type(portals) == \"array\" then __iscsiMixin({portals: portals}) else __iscsiMixin({portals: [portals]}),\n              // iSCSI target portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n              withPortalsMixin(portals):: self + if std.type(portals) == \"array\" then __iscsiMixin({portals+: portals}) else __iscsiMixin({portals+: [portals]}),\n              // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.\n              withReadOnly(readOnly):: self + __iscsiMixin({readOnly: readOnly}),\n              // CHAP secret for iSCSI target and initiator authentication\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __iscsiMixin({secretRef+: secretRef}),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({name: name}),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n              // iSCSI target portal. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n              withTargetPortal(targetPortal):: self + __iscsiMixin({targetPortal: targetPortal}),\n            },\n            iscsiType:: hidden.core.v1.iscsiVolumeSource,\n            // Local represents directly-attached storage with node affinity\n            localStorage:: {\n              local __localStorageMixin(localStorage) = __specMixin({\"local\"+: localStorage}),\n              mixinInstance(localStorage):: __localStorageMixin(localStorage),\n              // The full path to the volume on the node For alpha, this path must be a directory Once block as a source is supported, then this path can point to a block device\n              withPath(path):: self + __localStorageMixin({path: path}),\n            },\n            localStorageType:: hidden.core.v1.localVolumeSource,\n            // NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n            nfs:: {\n              local __nfsMixin(nfs) = __specMixin({nfs+: nfs}),\n              mixinInstance(nfs):: __nfsMixin(nfs),\n              // Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n              withPath(path):: self + __nfsMixin({path: path}),\n              // ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n              withReadOnly(readOnly):: self + __nfsMixin({readOnly: readOnly}),\n              // Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n              withServer(server):: self + __nfsMixin({server: server}),\n            },\n            nfsType:: hidden.core.v1.nfsVolumeSource,\n            // What happens to a persistent volume when released from its claim. Valid options are Retain (default) and Recycle. Recycling must be supported by the volume plugin underlying this persistent volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming\n            withPersistentVolumeReclaimPolicy(persistentVolumeReclaimPolicy):: self + __specMixin({persistentVolumeReclaimPolicy: persistentVolumeReclaimPolicy}),\n            // PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine\n            photonPersistentDisk:: {\n              local __photonPersistentDiskMixin(photonPersistentDisk) = __specMixin({photonPersistentDisk+: photonPersistentDisk}),\n              mixinInstance(photonPersistentDisk):: __photonPersistentDiskMixin(photonPersistentDisk),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __photonPersistentDiskMixin({fsType: fsType}),\n              // ID that identifies Photon Controller persistent disk\n              withPdId(pdId):: self + __photonPersistentDiskMixin({pdID: pdId}),\n            },\n            photonPersistentDiskType:: hidden.core.v1.photonPersistentDiskVolumeSource,\n            // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine\n            portworxVolume:: {\n              local __portworxVolumeMixin(portworxVolume) = __specMixin({portworxVolume+: portworxVolume}),\n              mixinInstance(portworxVolume):: __portworxVolumeMixin(portworxVolume),\n              // FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __portworxVolumeMixin({fsType: fsType}),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __portworxVolumeMixin({readOnly: readOnly}),\n              // VolumeID uniquely identifies a Portworx volume\n              withVolumeId(volumeId):: self + __portworxVolumeMixin({volumeID: volumeId}),\n            },\n            portworxVolumeType:: hidden.core.v1.portworxVolumeSource,\n            // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime\n            quobyte:: {\n              local __quobyteMixin(quobyte) = __specMixin({quobyte+: quobyte}),\n              mixinInstance(quobyte):: __quobyteMixin(quobyte),\n              // Group to map volume access to Default is no group\n              withGroup(group):: self + __quobyteMixin({group: group}),\n              // ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.\n              withReadOnly(readOnly):: self + __quobyteMixin({readOnly: readOnly}),\n              // Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes\n              withRegistry(registry):: self + __quobyteMixin({registry: registry}),\n              // User to map volume access to Defaults to serivceaccount user\n              withUser(user):: self + __quobyteMixin({user: user}),\n              // Volume is a string that references an already created Quobyte volume by name.\n              withVolume(volume):: self + __quobyteMixin({volume: volume}),\n            },\n            quobyteType:: hidden.core.v1.quobyteVolumeSource,\n            // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md\n            rbd:: {\n              local __rbdMixin(rbd) = __specMixin({rbd+: rbd}),\n              mixinInstance(rbd):: __rbdMixin(rbd),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd\n              withFsType(fsType):: self + __rbdMixin({fsType: fsType}),\n              // The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withImage(image):: self + __rbdMixin({image: image}),\n              // Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withKeyring(keyring):: self + __rbdMixin({keyring: keyring}),\n              // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withMonitors(monitors):: self + if std.type(monitors) == \"array\" then __rbdMixin({monitors: monitors}) else __rbdMixin({monitors: [monitors]}),\n              // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withMonitorsMixin(monitors):: self + if std.type(monitors) == \"array\" then __rbdMixin({monitors+: monitors}) else __rbdMixin({monitors+: [monitors]}),\n              // The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withPool(pool):: self + __rbdMixin({pool: pool}),\n              // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withReadOnly(readOnly):: self + __rbdMixin({readOnly: readOnly}),\n              // SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __rbdMixin({secretRef+: secretRef}),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({name: name}),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n              // The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withUser(user):: self + __rbdMixin({user: user}),\n            },\n            rbdType:: hidden.core.v1.rbdVolumeSource,\n            // ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.\n            scaleIo:: {\n              local __scaleIoMixin(scaleIo) = __specMixin({scaleIO+: scaleIo}),\n              mixinInstance(scaleIo):: __scaleIoMixin(scaleIo),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __scaleIoMixin({fsType: fsType}),\n              // The host address of the ScaleIO API Gateway.\n              withGateway(gateway):: self + __scaleIoMixin({gateway: gateway}),\n              // The name of the Protection Domain for the configured storage (defaults to \"default\").\n              withProtectionDomain(protectionDomain):: self + __scaleIoMixin({protectionDomain: protectionDomain}),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __scaleIoMixin({readOnly: readOnly}),\n              // SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __scaleIoMixin({secretRef+: secretRef}),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({name: name}),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n              // Flag to enable/disable SSL communication with Gateway, default false\n              withSslEnabled(sslEnabled):: self + __scaleIoMixin({sslEnabled: sslEnabled}),\n              // Indicates whether the storage for a volume should be thick or thin (defaults to \"thin\").\n              withStorageMode(storageMode):: self + __scaleIoMixin({storageMode: storageMode}),\n              // The Storage Pool associated with the protection domain (defaults to \"default\").\n              withStoragePool(storagePool):: self + __scaleIoMixin({storagePool: storagePool}),\n              // The name of the storage system as configured in ScaleIO.\n              withSystem(system):: self + __scaleIoMixin({system: system}),\n              // The name of a volume already created in the ScaleIO system that is associated with this volume source.\n              withVolumeName(volumeName):: self + __scaleIoMixin({volumeName: volumeName}),\n            },\n            scaleIoType:: hidden.core.v1.scaleIoVolumeSource,\n            // Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.\n            withStorageClassName(storageClassName):: self + __specMixin({storageClassName: storageClassName}),\n            // StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md\n            storageos:: {\n              local __storageosMixin(storageos) = __specMixin({storageos+: storageos}),\n              mixinInstance(storageos):: __storageosMixin(storageos),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __storageosMixin({fsType: fsType}),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __storageosMixin({readOnly: readOnly}),\n              // SecretRef specifies the secret to use for obtaining the StorageOS API credentials.  If not specified, default values will be attempted.\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __storageosMixin({secretRef+: secretRef}),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\n                withFieldPath(fieldPath):: self + __secretRefMixin({fieldPath: fieldPath}),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({name: name}),\n                // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n                withNamespace(namespace):: self + __secretRefMixin({namespace: namespace}),\n                // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n                withResourceVersion(resourceVersion):: self + __secretRefMixin({resourceVersion: resourceVersion}),\n                // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n                withUid(uid):: self + __secretRefMixin({uid: uid}),\n              },\n              secretRefType:: hidden.core.v1.objectReference,\n              // VolumeName is the human-readable name of the StorageOS volume.  Volume names are only unique within a namespace.\n              withVolumeName(volumeName):: self + __storageosMixin({volumeName: volumeName}),\n              // VolumeNamespace specifies the scope of the volume within StorageOS.  If no namespace is specified then the Pod's namespace will be used.  This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.\n              withVolumeNamespace(volumeNamespace):: self + __storageosMixin({volumeNamespace: volumeNamespace}),\n            },\n            storageosType:: hidden.core.v1.storageOSPersistentVolumeSource,\n            // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine\n            vsphereVolume:: {\n              local __vsphereVolumeMixin(vsphereVolume) = __specMixin({vsphereVolume+: vsphereVolume}),\n              mixinInstance(vsphereVolume):: __vsphereVolumeMixin(vsphereVolume),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __vsphereVolumeMixin({fsType: fsType}),\n              // Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.\n              withStoragePolicyID(storagePolicyID):: self + __vsphereVolumeMixin({storagePolicyID: storagePolicyID}),\n              // Storage Policy Based Management (SPBM) profile name.\n              withStoragePolicyName(storagePolicyName):: self + __vsphereVolumeMixin({storagePolicyName: storagePolicyName}),\n              // Path that identifies vSphere volume vmdk\n              withVolumePath(volumePath):: self + __vsphereVolumeMixin({volumePath: volumePath}),\n            },\n            vsphereVolumeType:: hidden.core.v1.vsphereVirtualDiskVolumeSource,\n          },\n          specType:: hidden.core.v1.persistentVolumeSpec,\n        },\n      },\n      // PersistentVolumeClaim is a user's request for and claim to a persistent volume\n      persistentVolumeClaim:: {\n        local kind = {kind: \"PersistentVolumeClaim\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the desired characteristics of a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1\n            withAccessModes(accessModes):: self + if std.type(accessModes) == \"array\" then __specMixin({accessModes: accessModes}) else __specMixin({accessModes: [accessModes]}),\n            // AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1\n            withAccessModesMixin(accessModes):: self + if std.type(accessModes) == \"array\" then __specMixin({accessModes+: accessModes}) else __specMixin({accessModes+: [accessModes]}),\n            // Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources\n            resources:: {\n              local __resourcesMixin(resources) = __specMixin({resources+: resources}),\n              mixinInstance(resources):: __resourcesMixin(resources),\n              // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withLimits(limits):: self + __resourcesMixin({limits: limits}),\n              // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withLimitsMixin(limits):: self + __resourcesMixin({limits+: limits}),\n              // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withRequests(requests):: self + __resourcesMixin({requests: requests}),\n              // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withRequestsMixin(requests):: self + __resourcesMixin({requests+: requests}),\n            },\n            resourcesType:: hidden.core.v1.resourceRequirements,\n            // A label query over volumes to consider for binding.\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({selector+: selector}),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1\n            withStorageClassName(storageClassName):: self + __specMixin({storageClassName: storageClassName}),\n            // VolumeName is the binding reference to the PersistentVolume backing this claim.\n            withVolumeName(volumeName):: self + __specMixin({volumeName: volumeName}),\n          },\n          specType:: hidden.core.v1.persistentVolumeClaimSpec,\n        },\n      },\n      // PersistentVolumeClaimList is a list of PersistentVolumeClaim items.\n      persistentVolumeClaimList:: {\n        local kind = {kind: \"PersistentVolumeClaimList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        // A list of persistent volume claims. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // A list of persistent volume claims. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.core.v1.persistentVolumeClaim,\n        mixin:: {\n        },\n      },\n      // PersistentVolumeList is a list of PersistentVolume items.\n      persistentVolumeList:: {\n        local kind = {kind: \"PersistentVolumeList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        // List of persistent volumes. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // List of persistent volumes. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.core.v1.persistentVolume,\n        mixin:: {\n        },\n      },\n      // Pod is a collection of containers that can run on a host. This resource is created by clients and scheduled onto hosts.\n      pod:: {\n        local kind = {kind: \"Pod\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n            withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n            // If specified, the pod's scheduling constraints\n            affinity:: {\n              local __affinityMixin(affinity) = __specMixin({affinity+: affinity}),\n              mixinInstance(affinity):: __affinityMixin(affinity),\n              // Describes node affinity scheduling rules for the pod.\n              nodeAffinity:: {\n                local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}),\n                mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                requiredDuringSchedulingIgnoredDuringExecution:: {\n                  local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                  mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                  // Required. A list of node selector terms. The terms are ORed.\n                  withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                  // Required. A list of node selector terms. The terms are ORed.\n                  withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                  nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                },\n                requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n              },\n              nodeAffinityType:: hidden.core.v1.nodeAffinity,\n              // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n              podAffinity:: {\n                local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}),\n                mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n              },\n              podAffinityType:: hidden.core.v1.podAffinity,\n              // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n              podAntiAffinity:: {\n                local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}),\n                mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n              },\n              podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n            },\n            affinityType:: hidden.core.v1.affinity,\n            // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n            withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}),\n            // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n            withContainers(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}),\n            // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n            withContainersMixin(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}),\n            containersType:: hidden.core.v1.container,\n            // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n            withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}),\n            // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n            withHostAliases(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}),\n            // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n            withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}),\n            hostAliasesType:: hidden.core.v1.hostAlias,\n            // Use the host's ipc namespace. Optional: Default to false.\n            withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}),\n            // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n            withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}),\n            // Use the host's pid namespace. Optional: Default to false.\n            withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}),\n            // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n            withHostname(hostname):: self + __specMixin({hostname: hostname}),\n            // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n            withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}),\n            // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n            withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}),\n            imagePullSecretsType:: hidden.core.v1.localObjectReference,\n            // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n            withInitContainers(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}),\n            // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n            withInitContainersMixin(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}),\n            initContainersType:: hidden.core.v1.container,\n            // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n            withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}),\n            // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n            withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}),\n            // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n            withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}),\n            // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n            withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}),\n            // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n            withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}),\n            // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n            securityContext:: {\n              local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}),\n              mixinInstance(securityContext):: __securityContextMixin(securityContext),\n              // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n              //\n              // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n              //\n              // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n              withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}),\n              // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n              withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n              // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n              withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n              // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n              seLinuxOptions:: {\n                local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                // Level is SELinux level label that applies to the container.\n                withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                // Role is a SELinux role label that applies to the container.\n                withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                // Type is a SELinux type label that applies to the container.\n                withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                // User is a SELinux user label that applies to the container.\n                withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n              },\n              seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n              // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n              withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}),\n              // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n              withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}),\n            },\n            securityContextType:: hidden.core.v1.podSecurityContext,\n            // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n            withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}),\n            // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n            withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}),\n            // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n            withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}),\n            // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n            withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}),\n            // If specified, the pod's tolerations.\n            withTolerations(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}),\n            // If specified, the pod's tolerations.\n            withTolerationsMixin(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}),\n            tolerationsType:: hidden.core.v1.toleration,\n            // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n            withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n            // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n            withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n            volumesType:: hidden.core.v1.volume,\n          },\n          specType:: hidden.core.v1.podSpec,\n        },\n      },\n      // PodList is a list of Pods.\n      podList:: {\n        local kind = {kind: \"PodList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        // List of pods. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // List of pods. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.core.v1.pod,\n        mixin:: {\n        },\n      },\n      // PodTemplate describes a template for creating copies of a predefined pod.\n      podTemplate:: {\n        local kind = {kind: \"PodTemplate\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Template defines the pods that will be created from this pod template. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          template:: {\n            local __templateMixin(template) = {template+: template},\n            mixinInstance(template):: __templateMixin(template),\n            // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n            metadata:: {\n              local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}),\n              mixinInstance(metadata):: __metadataMixin(metadata),\n              // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n              withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n              // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n              withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n              // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n              withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n              // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n              withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n              // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n              withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n              // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n              withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n              // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n              //\n              // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n              //\n              // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n              withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n              // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n              //\n              // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n              initializers:: {\n                local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                mixinInstance(initializers):: __initializersMixin(initializers),\n                // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                pendingType:: hidden.meta.v1.initializer,\n                // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                result:: {\n                  local __resultMixin(result) = __initializersMixin({result+: result}),\n                  mixinInstance(result):: __resultMixin(result),\n                  // Suggested HTTP return code for this status, 0 if not set.\n                  withCode(code):: self + __resultMixin({code: code}),\n                  // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                  details:: {\n                    local __detailsMixin(details) = __resultMixin({details+: details}),\n                    mixinInstance(details):: __detailsMixin(details),\n                    // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                    withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                    // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                    withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                    causesType:: hidden.meta.v1.statusCause,\n                    // The group attribute of the resource associated with the status StatusReason.\n                    withGroup(group):: self + __detailsMixin({group: group}),\n                    // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                    withName(name):: self + __detailsMixin({name: name}),\n                    // If specified, the time in seconds before the operation should be retried.\n                    withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                    // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                    withUid(uid):: self + __detailsMixin({uid: uid}),\n                  },\n                  detailsType:: hidden.meta.v1.statusDetails,\n                  // A human-readable description of the status of this operation.\n                  withMessage(message):: self + __resultMixin({message: message}),\n                  // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                  withReason(reason):: self + __resultMixin({reason: reason}),\n                },\n                resultType:: hidden.meta.v1.status,\n              },\n              initializersType:: hidden.meta.v1.initializers,\n              // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n              withLabels(labels):: self + __metadataMixin({labels: labels}),\n              // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n              withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n              // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n              withName(name):: self + __metadataMixin({name: name}),\n              // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n              //\n              // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n              withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n            },\n            metadataType:: hidden.meta.v1.objectMeta,\n            // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n            spec:: {\n              local __specMixin(spec) = __templateMixin({spec+: spec}),\n              mixinInstance(spec):: __specMixin(spec),\n              // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n              withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n              // If specified, the pod's scheduling constraints\n              affinity:: {\n                local __affinityMixin(affinity) = __specMixin({affinity+: affinity}),\n                mixinInstance(affinity):: __affinityMixin(affinity),\n                // Describes node affinity scheduling rules for the pod.\n                nodeAffinity:: {\n                  local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}),\n                  mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                  preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                  // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                  requiredDuringSchedulingIgnoredDuringExecution:: {\n                    local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                    mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                    // Required. A list of node selector terms. The terms are ORed.\n                    withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                    // Required. A list of node selector terms. The terms are ORed.\n                    withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                    nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                  },\n                  requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                },\n                nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                podAffinity:: {\n                  local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}),\n                  mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                  preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                  // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                  withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                  // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                  withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                  requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                },\n                podAffinityType:: hidden.core.v1.podAffinity,\n                // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                podAntiAffinity:: {\n                  local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}),\n                  mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                  preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                  // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                  withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                  // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                  withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                  requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                },\n                podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n              },\n              affinityType:: hidden.core.v1.affinity,\n              // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n              withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}),\n              // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n              withContainers(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}),\n              // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n              withContainersMixin(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}),\n              containersType:: hidden.core.v1.container,\n              // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n              withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}),\n              // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n              withHostAliases(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}),\n              // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n              withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}),\n              hostAliasesType:: hidden.core.v1.hostAlias,\n              // Use the host's ipc namespace. Optional: Default to false.\n              withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}),\n              // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n              withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}),\n              // Use the host's pid namespace. Optional: Default to false.\n              withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}),\n              // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n              withHostname(hostname):: self + __specMixin({hostname: hostname}),\n              // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n              withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}),\n              // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n              withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}),\n              imagePullSecretsType:: hidden.core.v1.localObjectReference,\n              // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n              withInitContainers(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}),\n              // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n              withInitContainersMixin(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}),\n              initContainersType:: hidden.core.v1.container,\n              // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n              withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}),\n              // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n              withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}),\n              // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n              withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}),\n              // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n              withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}),\n              // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n              withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}),\n              // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n              securityContext:: {\n                local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}),\n                mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                //\n                // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                //\n                // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}),\n                // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n                // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n                // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                seLinuxOptions:: {\n                  local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                  mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                  // Level is SELinux level label that applies to the container.\n                  withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                  // Role is a SELinux role label that applies to the container.\n                  withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                  // Type is a SELinux type label that applies to the container.\n                  withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                  // User is a SELinux user label that applies to the container.\n                  withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n                },\n                seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}),\n                // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}),\n              },\n              securityContextType:: hidden.core.v1.podSecurityContext,\n              // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n              withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}),\n              // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n              withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}),\n              // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n              withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}),\n              // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n              withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}),\n              // If specified, the pod's tolerations.\n              withTolerations(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}),\n              // If specified, the pod's tolerations.\n              withTolerationsMixin(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}),\n              tolerationsType:: hidden.core.v1.toleration,\n              // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n              withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n              // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n              withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n              volumesType:: hidden.core.v1.volume,\n            },\n            specType:: hidden.core.v1.podSpec,\n          },\n          templateType:: hidden.core.v1.podTemplateSpec,\n        },\n      },\n      // PodTemplateList is a list of PodTemplates.\n      podTemplateList:: {\n        local kind = {kind: \"PodTemplateList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        // List of pod templates\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // List of pod templates\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.core.v1.podTemplate,\n        mixin:: {\n        },\n      },\n      // ReplicationController represents the configuration of a replication controller.\n      replicationController:: {\n        local kind = {kind: \"ReplicationController\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          // If the Labels of a ReplicationController are empty, they are defaulted to be the same as the Pod(s) that the replication controller manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the specification of the desired behavior of the replication controller. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n            withMinReadySeconds(minReadySeconds):: self + __specMixin({minReadySeconds: minReadySeconds}),\n            // Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller\n            withReplicas(replicas):: self + __specMixin({replicas: replicas}),\n            // Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            withSelector(selector):: self + __specMixin({selector: selector}),\n            // Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            withSelectorMixin(selector):: self + __specMixin({selector+: selector}),\n            // Template is the object that describes the pod that will be created if insufficient replicas are detected. This takes precedence over a TemplateRef. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\n            template:: {\n              local __templateMixin(template) = __specMixin({template+: template}),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n                // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n                withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                  pendingType:: hidden.meta.v1.initializer,\n                  // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                  result:: {\n                    local __resultMixin(result) = __initializersMixin({result+: result}),\n                    mixinInstance(result):: __resultMixin(result),\n                    // Suggested HTTP return code for this status, 0 if not set.\n                    withCode(code):: self + __resultMixin({code: code}),\n                    // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                    details:: {\n                      local __detailsMixin(details) = __resultMixin({details+: details}),\n                      mixinInstance(details):: __detailsMixin(details),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                      causesType:: hidden.meta.v1.statusCause,\n                      // The group attribute of the resource associated with the status StatusReason.\n                      withGroup(group):: self + __detailsMixin({group: group}),\n                      // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                      withName(name):: self + __detailsMixin({name: name}),\n                      // If specified, the time in seconds before the operation should be retried.\n                      withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                      // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                      withUid(uid):: self + __detailsMixin({uid: uid}),\n                    },\n                    detailsType:: hidden.meta.v1.statusDetails,\n                    // A human-readable description of the status of this operation.\n                    withMessage(message):: self + __resultMixin({message: message}),\n                    // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                    withReason(reason):: self + __resultMixin({reason: reason}),\n                  },\n                  resultType:: hidden.meta.v1.status,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({labels: labels}),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({name: name}),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({spec+: spec}),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({affinity+: affinity}),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}),\n                containersType:: hidden.core.v1.container,\n                // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({hostname: hostname}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}),\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}),\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n          specType:: hidden.core.v1.replicationControllerSpec,\n        },\n      },\n      // ReplicationControllerList is a collection of replication controllers.\n      replicationControllerList:: {\n        local kind = {kind: \"ReplicationControllerList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        // List of replication controllers. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // List of replication controllers. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.core.v1.replicationController,\n        mixin:: {\n        },\n      },\n      // ResourceQuota sets aggregate quota restrictions enforced per namespace\n      resourceQuota:: {\n        local kind = {kind: \"ResourceQuota\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the desired quota. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // Hard is the set of desired hard limits for each named resource. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md\n            withHard(hard):: self + __specMixin({hard: hard}),\n            // Hard is the set of desired hard limits for each named resource. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md\n            withHardMixin(hard):: self + __specMixin({hard+: hard}),\n            // A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects.\n            withScopes(scopes):: self + if std.type(scopes) == \"array\" then __specMixin({scopes: scopes}) else __specMixin({scopes: [scopes]}),\n            // A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects.\n            withScopesMixin(scopes):: self + if std.type(scopes) == \"array\" then __specMixin({scopes+: scopes}) else __specMixin({scopes+: [scopes]}),\n          },\n          specType:: hidden.core.v1.resourceQuotaSpec,\n        },\n      },\n      // ResourceQuotaList is a list of ResourceQuota items.\n      resourceQuotaList:: {\n        local kind = {kind: \"ResourceQuotaList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        // Items is a list of ResourceQuota objects. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is a list of ResourceQuota objects. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.core.v1.resourceQuota,\n        mixin:: {\n        },\n      },\n      // Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes.\n      secret:: {\n        local kind = {kind: \"Secret\"},\n        new(name, data, type=\"Opaque\"):: kind + apiVersion + self.mixin.metadata.withName(name) + self.withData(data) + self.withType(type),\n        fromString(name, stringData, type=\"Opaque\"):: kind + apiVersion + self.mixin.metadata.withName(name) + self.withStringData(stringData) + self.withType(type),\n        // Data contains the secret data. Each key must consist of alphanumeric characters, '-', '_' or '.'. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4\n        withData(data):: self + {data: data},\n        // Data contains the secret data. Each key must consist of alphanumeric characters, '-', '_' or '.'. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4\n        withDataMixin(data):: self + {data+: data},\n        // stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API.\n        withStringData(stringData):: self + {stringData: stringData},\n        // stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API.\n        withStringDataMixin(stringData):: self + {stringData+: stringData},\n        // Used to facilitate programmatic handling of secret data.\n        withType(type):: self + {type: type},\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // SecretList is a list of Secret.\n      secretList:: {\n        local kind = {kind: \"SecretList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        // Items is a list of secret objects. More info: https://kubernetes.io/docs/concepts/configuration/secret\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is a list of secret objects. More info: https://kubernetes.io/docs/concepts/configuration/secret\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.core.v1.secret,\n        mixin:: {\n        },\n      },\n      // Service is a named abstraction of software service (for example, mysql) consisting of local port (for example 3306) that the proxy listens on, and the selector that determines which pods will answer requests sent through the proxy.\n      service:: {\n        local kind = {kind: \"Service\"},\n        new(name, selector, ports):: kind + apiVersion + self.mixin.metadata.withName(name) + self.mixin.spec.withSelector(selector) + self.mixin.spec.withPorts(ports),\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the behavior of a service. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // clusterIP is the IP address of the service and is usually assigned randomly by the master. If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail. This field can not be changed through updates. Valid values are \"None\", empty string (\"\"), or a valid IP address. \"None\" can be specified for headless services when proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\n            withClusterIp(clusterIp):: self + __specMixin({clusterIP: clusterIp}),\n            // externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service.  These IPs are not managed by Kubernetes.  The user is responsible for ensuring that traffic arrives at a node with this IP.  A common example is external load-balancers that are not part of the Kubernetes system.\n            withExternalIps(externalIps):: self + if std.type(externalIps) == \"array\" then __specMixin({externalIPs: externalIps}) else __specMixin({externalIPs: [externalIps]}),\n            // externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service.  These IPs are not managed by Kubernetes.  The user is responsible for ensuring that traffic arrives at a node with this IP.  A common example is external load-balancers that are not part of the Kubernetes system.\n            withExternalIpsMixin(externalIps):: self + if std.type(externalIps) == \"array\" then __specMixin({externalIPs+: externalIps}) else __specMixin({externalIPs+: [externalIps]}),\n            // externalName is the external reference that kubedns or equivalent will return as a CNAME record for this service. No proxying will be involved. Must be a valid DNS name and requires Type to be ExternalName.\n            withExternalName(externalName):: self + __specMixin({externalName: externalName}),\n            // externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. \"Local\" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. \"Cluster\" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading.\n            withExternalTrafficPolicy(externalTrafficPolicy):: self + __specMixin({externalTrafficPolicy: externalTrafficPolicy}),\n            // healthCheckNodePort specifies the healthcheck nodePort for the service. If not specified, HealthCheckNodePort is created by the service api backend with the allocated nodePort. Will use user-specified nodePort value if specified by the client. Only effects when Type is set to LoadBalancer and ExternalTrafficPolicy is set to Local.\n            withHealthCheckNodePort(healthCheckNodePort):: self + __specMixin({healthCheckNodePort: healthCheckNodePort}),\n            // Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.\n            withLoadBalancerIp(loadBalancerIp):: self + __specMixin({loadBalancerIP: loadBalancerIp}),\n            // If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature.\" More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/\n            withLoadBalancerSourceRanges(loadBalancerSourceRanges):: self + if std.type(loadBalancerSourceRanges) == \"array\" then __specMixin({loadBalancerSourceRanges: loadBalancerSourceRanges}) else __specMixin({loadBalancerSourceRanges: [loadBalancerSourceRanges]}),\n            // If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature.\" More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/\n            withLoadBalancerSourceRangesMixin(loadBalancerSourceRanges):: self + if std.type(loadBalancerSourceRanges) == \"array\" then __specMixin({loadBalancerSourceRanges+: loadBalancerSourceRanges}) else __specMixin({loadBalancerSourceRanges+: [loadBalancerSourceRanges]}),\n            // The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\n            withPorts(ports):: self + if std.type(ports) == \"array\" then __specMixin({ports: ports}) else __specMixin({ports: [ports]}),\n            // The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\n            withPortsMixin(ports):: self + if std.type(ports) == \"array\" then __specMixin({ports+: ports}) else __specMixin({ports+: [ports]}),\n            portsType:: hidden.core.v1.servicePort,\n            // Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/\n            withSelector(selector):: self + __specMixin({selector: selector}),\n            // Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/\n            withSelectorMixin(selector):: self + __specMixin({selector+: selector}),\n            // Supports \"ClientIP\" and \"None\". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\n            withSessionAffinity(sessionAffinity):: self + __specMixin({sessionAffinity: sessionAffinity}),\n            // type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. \"ExternalName\" maps to the specified externalName. \"ClusterIP\" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object. If clusterIP is \"None\", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a stable IP. \"NodePort\" builds on ClusterIP and allocates a port on every node which routes to the clusterIP. \"LoadBalancer\" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types\n            withType(type):: self + __specMixin({type: type}),\n          },\n          specType:: hidden.core.v1.serviceSpec,\n        },\n      },\n      // ServiceAccount binds together: * a name, understood by users, and perhaps by peripheral systems, for an identity * a principal that can be authenticated and authorized * a set of secrets\n      serviceAccount:: {\n        local kind = {kind: \"ServiceAccount\"},\n        new(name):: kind + apiVersion + self.mixin.metadata.withName(name),\n        // AutomountServiceAccountToken indicates whether pods running as this service account should have an API token automatically mounted. Can be overridden at the pod level.\n        withAutomountServiceAccountToken(automountServiceAccountToken):: self + {automountServiceAccountToken: automountServiceAccountToken},\n        // ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod\n        withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then {imagePullSecrets: imagePullSecrets} else {imagePullSecrets: [imagePullSecrets]},\n        // ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod\n        withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then {imagePullSecrets+: imagePullSecrets} else {imagePullSecrets+: [imagePullSecrets]},\n        imagePullSecretsType:: hidden.core.v1.localObjectReference,\n        // Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. More info: https://kubernetes.io/docs/concepts/configuration/secret\n        withSecrets(secrets):: self + if std.type(secrets) == \"array\" then {secrets: secrets} else {secrets: [secrets]},\n        // Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. More info: https://kubernetes.io/docs/concepts/configuration/secret\n        withSecretsMixin(secrets):: self + if std.type(secrets) == \"array\" then {secrets+: secrets} else {secrets+: [secrets]},\n        secretsType:: hidden.core.v1.objectReference,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // ServiceAccountList is a list of ServiceAccount objects\n      serviceAccountList:: {\n        local kind = {kind: \"ServiceAccountList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        // List of ServiceAccounts. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // List of ServiceAccounts. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.core.v1.serviceAccount,\n        mixin:: {\n        },\n      },\n      // ServiceList holds a list of services.\n      serviceList:: {\n        local kind = {kind: \"ServiceList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        // List of services\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // List of services\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.core.v1.service,\n        mixin:: {\n        },\n      },\n    },\n  },\n  extensions:: {\n    v1beta1:: {\n      local apiVersion = {apiVersion: \"extensions/v1beta1\"},\n      // DaemonSet represents the configuration of a daemon set.\n      daemonSet:: {\n        local kind = {kind: \"DaemonSet\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).\n            withMinReadySeconds(minReadySeconds):: self + __specMixin({minReadySeconds: minReadySeconds}),\n            // The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.\n            withRevisionHistoryLimit(revisionHistoryLimit):: self + __specMixin({revisionHistoryLimit: revisionHistoryLimit}),\n            // A label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({selector+: selector}),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\n            template:: {\n              local __templateMixin(template) = __specMixin({template+: template}),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n                // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n                withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                  pendingType:: hidden.meta.v1.initializer,\n                  // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                  result:: {\n                    local __resultMixin(result) = __initializersMixin({result+: result}),\n                    mixinInstance(result):: __resultMixin(result),\n                    // Suggested HTTP return code for this status, 0 if not set.\n                    withCode(code):: self + __resultMixin({code: code}),\n                    // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                    details:: {\n                      local __detailsMixin(details) = __resultMixin({details+: details}),\n                      mixinInstance(details):: __detailsMixin(details),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                      causesType:: hidden.meta.v1.statusCause,\n                      // The group attribute of the resource associated with the status StatusReason.\n                      withGroup(group):: self + __detailsMixin({group: group}),\n                      // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                      withName(name):: self + __detailsMixin({name: name}),\n                      // If specified, the time in seconds before the operation should be retried.\n                      withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                      // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                      withUid(uid):: self + __detailsMixin({uid: uid}),\n                    },\n                    detailsType:: hidden.meta.v1.statusDetails,\n                    // A human-readable description of the status of this operation.\n                    withMessage(message):: self + __resultMixin({message: message}),\n                    // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                    withReason(reason):: self + __resultMixin({reason: reason}),\n                  },\n                  resultType:: hidden.meta.v1.status,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({labels: labels}),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({name: name}),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({spec+: spec}),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({affinity+: affinity}),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}),\n                containersType:: hidden.core.v1.container,\n                // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({hostname: hostname}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}),\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}),\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n            // An update strategy to replace existing DaemonSet pods with new pods.\n            updateStrategy:: {\n              local __updateStrategyMixin(updateStrategy) = __specMixin({updateStrategy+: updateStrategy}),\n              mixinInstance(updateStrategy):: __updateStrategyMixin(updateStrategy),\n              // Rolling update config params. Present only if type = \"RollingUpdate\".\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __updateStrategyMixin({rollingUpdate+: rollingUpdate}),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.\n                withMaxUnavailable(maxUnavailable):: __rollingUpdateMixin({maxUnavailable: maxUnavailable}),\n              },\n              rollingUpdateType:: hidden.extensions.v1beta1.rollingUpdateDaemonSet,\n              // Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is OnDelete.\n              withType(type):: self + __updateStrategyMixin({type: type}),\n            },\n            updateStrategyType:: hidden.extensions.v1beta1.daemonSetUpdateStrategy,\n          },\n          specType:: hidden.extensions.v1beta1.daemonSetSpec,\n        },\n      },\n      // DaemonSetList is a collection of daemon sets.\n      daemonSetList:: {\n        local kind = {kind: \"DaemonSetList\"},\n        new():: kind + apiVersion,\n        // A list of daemon sets.\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // A list of daemon sets.\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.extensions.v1beta1.daemonSet,\n        mixin:: {\n        },\n      },\n      // Deployment enables declarative updates for Pods and ReplicaSets.\n      deployment:: {\n        local kind = {kind: \"Deployment\"},\n        new(name, replicas, containers, podLabels={app: name}):: kind + apiVersion + self.mixin.metadata.withName(name) + self.mixin.spec.withReplicas(replicas) + self.mixin.spec.template.spec.withContainers(containers) + self.mixin.spec.template.metadata.withLabels(podLabels),\n        mixin:: {\n          // Standard object metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Specification of the desired behavior of the Deployment.\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n            withMinReadySeconds(minReadySeconds):: self + __specMixin({minReadySeconds: minReadySeconds}),\n            // Indicates that the deployment is paused and will not be processed by the deployment controller.\n            withPaused(paused):: self + __specMixin({paused: paused}),\n            // The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Once autoRollback is implemented, the deployment controller will automatically rollback failed deployments. Note that progress will not be estimated during the time a deployment is paused. This is not set by default.\n            withProgressDeadlineSeconds(progressDeadlineSeconds):: self + __specMixin({progressDeadlineSeconds: progressDeadlineSeconds}),\n            // Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.\n            withReplicas(replicas):: self + __specMixin({replicas: replicas}),\n            // The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified.\n            withRevisionHistoryLimit(revisionHistoryLimit):: self + __specMixin({revisionHistoryLimit: revisionHistoryLimit}),\n            // The config this deployment is rolling back to. Will be cleared after rollback is done.\n            rollbackTo:: {\n              local __rollbackToMixin(rollbackTo) = __specMixin({rollbackTo+: rollbackTo}),\n              mixinInstance(rollbackTo):: __rollbackToMixin(rollbackTo),\n              // The revision to rollback to. If set to 0, rollback to the last revision.\n              withRevision(revision):: self + __rollbackToMixin({revision: revision}),\n            },\n            rollbackToType:: hidden.extensions.v1beta1.rollbackConfig,\n            // Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({selector+: selector}),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // The deployment strategy to use to replace existing pods with new ones.\n            strategy:: {\n              local __strategyMixin(strategy) = __specMixin({strategy+: strategy}),\n              mixinInstance(strategy):: __strategyMixin(strategy),\n              // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __strategyMixin({rollingUpdate+: rollingUpdate}),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\n                withMaxSurge(maxSurge):: __rollingUpdateMixin({maxSurge: maxSurge}),\n                // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n                withMaxUnavailable(maxUnavailable):: __rollingUpdateMixin({maxUnavailable: maxUnavailable}),\n              },\n              rollingUpdateType:: hidden.extensions.v1beta1.rollingUpdateDeployment,\n              // Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.\n              withType(type):: self + __strategyMixin({type: type}),\n            },\n            strategyType:: hidden.extensions.v1beta1.deploymentStrategy,\n            // Template describes the pods that will be created.\n            template:: {\n              local __templateMixin(template) = __specMixin({template+: template}),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n                // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n                withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                  pendingType:: hidden.meta.v1.initializer,\n                  // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                  result:: {\n                    local __resultMixin(result) = __initializersMixin({result+: result}),\n                    mixinInstance(result):: __resultMixin(result),\n                    // Suggested HTTP return code for this status, 0 if not set.\n                    withCode(code):: self + __resultMixin({code: code}),\n                    // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                    details:: {\n                      local __detailsMixin(details) = __resultMixin({details+: details}),\n                      mixinInstance(details):: __detailsMixin(details),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                      causesType:: hidden.meta.v1.statusCause,\n                      // The group attribute of the resource associated with the status StatusReason.\n                      withGroup(group):: self + __detailsMixin({group: group}),\n                      // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                      withName(name):: self + __detailsMixin({name: name}),\n                      // If specified, the time in seconds before the operation should be retried.\n                      withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                      // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                      withUid(uid):: self + __detailsMixin({uid: uid}),\n                    },\n                    detailsType:: hidden.meta.v1.statusDetails,\n                    // A human-readable description of the status of this operation.\n                    withMessage(message):: self + __resultMixin({message: message}),\n                    // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                    withReason(reason):: self + __resultMixin({reason: reason}),\n                  },\n                  resultType:: hidden.meta.v1.status,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({labels: labels}),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({name: name}),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({spec+: spec}),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({affinity+: affinity}),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}),\n                containersType:: hidden.core.v1.container,\n                // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({hostname: hostname}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}),\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}),\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n          specType:: hidden.extensions.v1beta1.deploymentSpec,\n        },\n      },\n      // DeploymentList is a list of Deployments.\n      deploymentList:: {\n        local kind = {kind: \"DeploymentList\"},\n        new(items):: kind + apiVersion + self.withItems(items),\n        // Items is the list of Deployments.\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is the list of Deployments.\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.extensions.v1beta1.deployment,\n        mixin:: {\n        },\n      },\n      // DeploymentRollback stores the information required to rollback a deployment.\n      deploymentRollback:: {\n        local kind = {kind: \"DeploymentRollback\"},\n        new(name):: kind + apiVersion + self.withName(name),\n        // Required: This must match the Name of a deployment.\n        withName(name):: self + {name: name},\n        // The annotations to be updated to a deployment\n        withUpdatedAnnotations(updatedAnnotations):: self + {updatedAnnotations: updatedAnnotations},\n        // The annotations to be updated to a deployment\n        withUpdatedAnnotationsMixin(updatedAnnotations):: self + {updatedAnnotations+: updatedAnnotations},\n        mixin:: {\n          // The config of this deployment rollback.\n          rollbackTo:: {\n            local __rollbackToMixin(rollbackTo) = {rollbackTo+: rollbackTo},\n            mixinInstance(rollbackTo):: __rollbackToMixin(rollbackTo),\n            // The revision to rollback to. If set to 0, rollback to the last revision.\n            withRevision(revision):: self + __rollbackToMixin({revision: revision}),\n          },\n          rollbackToType:: hidden.extensions.v1beta1.rollbackConfig,\n        },\n      },\n      // Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc.\n      ingress:: {\n        local kind = {kind: \"Ingress\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // A default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default.\n            backend:: {\n              local __backendMixin(backend) = __specMixin({backend+: backend}),\n              mixinInstance(backend):: __backendMixin(backend),\n              // Specifies the name of the referenced service.\n              withServiceName(serviceName):: self + __backendMixin({serviceName: serviceName}),\n              // Specifies the port of the referenced service.\n              withServicePort(servicePort):: __backendMixin({servicePort: servicePort}),\n            },\n            backendType:: hidden.extensions.v1beta1.ingressBackend,\n            // A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.\n            withRules(rules):: self + if std.type(rules) == \"array\" then __specMixin({rules: rules}) else __specMixin({rules: [rules]}),\n            // A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.\n            withRulesMixin(rules):: self + if std.type(rules) == \"array\" then __specMixin({rules+: rules}) else __specMixin({rules+: [rules]}),\n            rulesType:: hidden.extensions.v1beta1.ingressRule,\n            // TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.\n            withTls(tls):: self + if std.type(tls) == \"array\" then __specMixin({tls: tls}) else __specMixin({tls: [tls]}),\n            // TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.\n            withTlsMixin(tls):: self + if std.type(tls) == \"array\" then __specMixin({tls+: tls}) else __specMixin({tls+: [tls]}),\n            tlsType:: hidden.extensions.v1beta1.ingressTls,\n          },\n          specType:: hidden.extensions.v1beta1.ingressSpec,\n        },\n      },\n      // IngressList is a collection of Ingress.\n      ingressList:: {\n        local kind = {kind: \"IngressList\"},\n        new():: kind + apiVersion,\n        // Items is the list of Ingress.\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is the list of Ingress.\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.extensions.v1beta1.ingress,\n        mixin:: {\n        },\n      },\n      // NetworkPolicy describes what network traffic is allowed for a set of Pods\n      networkPolicy:: {\n        local kind = {kind: \"NetworkPolicy\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Specification of the desired behavior for this NetworkPolicy.\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default).\n            withIngress(ingress):: self + if std.type(ingress) == \"array\" then __specMixin({ingress: ingress}) else __specMixin({ingress: [ingress]}),\n            // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default).\n            withIngressMixin(ingress):: self + if std.type(ingress) == \"array\" then __specMixin({ingress+: ingress}) else __specMixin({ingress+: [ingress]}),\n            ingressType:: hidden.extensions.v1beta1.networkPolicyIngressRule,\n            // Selects the pods to which this NetworkPolicy object applies.  The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods.  In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.\n            podSelector:: {\n              local __podSelectorMixin(podSelector) = __specMixin({podSelector+: podSelector}),\n              mixinInstance(podSelector):: __podSelectorMixin(podSelector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __podSelectorMixin({matchExpressions: matchExpressions}) else __podSelectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __podSelectorMixin({matchExpressions+: matchExpressions}) else __podSelectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __podSelectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __podSelectorMixin({matchLabels+: matchLabels}),\n            },\n            podSelectorType:: hidden.meta.v1.labelSelector,\n          },\n          specType:: hidden.extensions.v1beta1.networkPolicySpec,\n        },\n      },\n      // Network Policy List is a list of NetworkPolicy objects.\n      networkPolicyList:: {\n        local kind = {kind: \"NetworkPolicyList\"},\n        new():: kind + apiVersion,\n        // Items is a list of schema objects.\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is a list of schema objects.\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.extensions.v1beta1.networkPolicy,\n        mixin:: {\n        },\n      },\n      // Pod Security Policy governs the ability to make requests that affect the Security Context that will be applied to a pod and container.\n      podSecurityPolicy:: {\n        local kind = {kind: \"PodSecurityPolicy\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // spec defines the policy enforced.\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // AllowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both AllowedCapabilities and RequiredDropCapabilities.\n            withAllowedCapabilities(allowedCapabilities):: self + if std.type(allowedCapabilities) == \"array\" then __specMixin({allowedCapabilities: allowedCapabilities}) else __specMixin({allowedCapabilities: [allowedCapabilities]}),\n            // AllowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both AllowedCapabilities and RequiredDropCapabilities.\n            withAllowedCapabilitiesMixin(allowedCapabilities):: self + if std.type(allowedCapabilities) == \"array\" then __specMixin({allowedCapabilities+: allowedCapabilities}) else __specMixin({allowedCapabilities+: [allowedCapabilities]}),\n            // DefaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability.  You may not list a capabiility in both DefaultAddCapabilities and RequiredDropCapabilities.\n            withDefaultAddCapabilities(defaultAddCapabilities):: self + if std.type(defaultAddCapabilities) == \"array\" then __specMixin({defaultAddCapabilities: defaultAddCapabilities}) else __specMixin({defaultAddCapabilities: [defaultAddCapabilities]}),\n            // DefaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability.  You may not list a capabiility in both DefaultAddCapabilities and RequiredDropCapabilities.\n            withDefaultAddCapabilitiesMixin(defaultAddCapabilities):: self + if std.type(defaultAddCapabilities) == \"array\" then __specMixin({defaultAddCapabilities+: defaultAddCapabilities}) else __specMixin({defaultAddCapabilities+: [defaultAddCapabilities]}),\n            // FSGroup is the strategy that will dictate what fs group is used by the SecurityContext.\n            fsGroup:: {\n              local __fsGroupMixin(fsGroup) = __specMixin({fsGroup+: fsGroup}),\n              mixinInstance(fsGroup):: __fsGroupMixin(fsGroup),\n              // Ranges are the allowed ranges of fs groups.  If you would like to force a single fs group then supply a single range with the same start and end.\n              withRanges(ranges):: self + if std.type(ranges) == \"array\" then __fsGroupMixin({ranges: ranges}) else __fsGroupMixin({ranges: [ranges]}),\n              // Ranges are the allowed ranges of fs groups.  If you would like to force a single fs group then supply a single range with the same start and end.\n              withRangesMixin(ranges):: self + if std.type(ranges) == \"array\" then __fsGroupMixin({ranges+: ranges}) else __fsGroupMixin({ranges+: [ranges]}),\n              rangesType:: hidden.extensions.v1beta1.idRange,\n              // Rule is the strategy that will dictate what FSGroup is used in the SecurityContext.\n              withRule(rule):: self + __fsGroupMixin({rule: rule}),\n            },\n            fsGroupType:: hidden.extensions.v1beta1.fsGroupStrategyOptions,\n            // hostIPC determines if the policy allows the use of HostIPC in the pod spec.\n            withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}),\n            // hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.\n            withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}),\n            // hostPID determines if the policy allows the use of HostPID in the pod spec.\n            withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}),\n            // hostPorts determines which host port ranges are allowed to be exposed.\n            withHostPorts(hostPorts):: self + if std.type(hostPorts) == \"array\" then __specMixin({hostPorts: hostPorts}) else __specMixin({hostPorts: [hostPorts]}),\n            // hostPorts determines which host port ranges are allowed to be exposed.\n            withHostPortsMixin(hostPorts):: self + if std.type(hostPorts) == \"array\" then __specMixin({hostPorts+: hostPorts}) else __specMixin({hostPorts+: [hostPorts]}),\n            hostPortsType:: hidden.extensions.v1beta1.hostPortRange,\n            // privileged determines if a pod can request to be run as privileged.\n            withPrivileged(privileged):: self + __specMixin({privileged: privileged}),\n            // ReadOnlyRootFilesystem when set to true will force containers to run with a read only root file system.  If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.\n            withReadOnlyRootFilesystem(readOnlyRootFilesystem):: self + __specMixin({readOnlyRootFilesystem: readOnlyRootFilesystem}),\n            // RequiredDropCapabilities are the capabilities that will be dropped from the container.  These are required to be dropped and cannot be added.\n            withRequiredDropCapabilities(requiredDropCapabilities):: self + if std.type(requiredDropCapabilities) == \"array\" then __specMixin({requiredDropCapabilities: requiredDropCapabilities}) else __specMixin({requiredDropCapabilities: [requiredDropCapabilities]}),\n            // RequiredDropCapabilities are the capabilities that will be dropped from the container.  These are required to be dropped and cannot be added.\n            withRequiredDropCapabilitiesMixin(requiredDropCapabilities):: self + if std.type(requiredDropCapabilities) == \"array\" then __specMixin({requiredDropCapabilities+: requiredDropCapabilities}) else __specMixin({requiredDropCapabilities+: [requiredDropCapabilities]}),\n            // runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.\n            runAsUser:: {\n              local __runAsUserMixin(runAsUser) = __specMixin({runAsUser+: runAsUser}),\n              mixinInstance(runAsUser):: __runAsUserMixin(runAsUser),\n              // Ranges are the allowed ranges of uids that may be used.\n              withRanges(ranges):: self + if std.type(ranges) == \"array\" then __runAsUserMixin({ranges: ranges}) else __runAsUserMixin({ranges: [ranges]}),\n              // Ranges are the allowed ranges of uids that may be used.\n              withRangesMixin(ranges):: self + if std.type(ranges) == \"array\" then __runAsUserMixin({ranges+: ranges}) else __runAsUserMixin({ranges+: [ranges]}),\n              rangesType:: hidden.extensions.v1beta1.idRange,\n              // Rule is the strategy that will dictate the allowable RunAsUser values that may be set.\n              withRule(rule):: self + __runAsUserMixin({rule: rule}),\n            },\n            runAsUserType:: hidden.extensions.v1beta1.runAsUserStrategyOptions,\n            // seLinux is the strategy that will dictate the allowable labels that may be set.\n            seLinux:: {\n              local __seLinuxMixin(seLinux) = __specMixin({seLinux+: seLinux}),\n              mixinInstance(seLinux):: __seLinuxMixin(seLinux),\n              // type is the strategy that will dictate the allowable labels that may be set.\n              withRule(rule):: self + __seLinuxMixin({rule: rule}),\n              // seLinuxOptions required to run as; required for MustRunAs More info: https://git.k8s.io/community/contributors/design-proposals/security_context.md\n              seLinuxOptions:: {\n                local __seLinuxOptionsMixin(seLinuxOptions) = __seLinuxMixin({seLinuxOptions+: seLinuxOptions}),\n                mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                // Level is SELinux level label that applies to the container.\n                withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                // Role is a SELinux role label that applies to the container.\n                withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                // Type is a SELinux type label that applies to the container.\n                withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                // User is a SELinux user label that applies to the container.\n                withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n              },\n              seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n            },\n            seLinuxType:: hidden.extensions.v1beta1.seLinuxStrategyOptions,\n            // SupplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.\n            supplementalGroups:: {\n              local __supplementalGroupsMixin(supplementalGroups) = __specMixin({supplementalGroups+: supplementalGroups}),\n              mixinInstance(supplementalGroups):: __supplementalGroupsMixin(supplementalGroups),\n              // Ranges are the allowed ranges of supplemental groups.  If you would like to force a single supplemental group then supply a single range with the same start and end.\n              withRanges(ranges):: self + if std.type(ranges) == \"array\" then __supplementalGroupsMixin({ranges: ranges}) else __supplementalGroupsMixin({ranges: [ranges]}),\n              // Ranges are the allowed ranges of supplemental groups.  If you would like to force a single supplemental group then supply a single range with the same start and end.\n              withRangesMixin(ranges):: self + if std.type(ranges) == \"array\" then __supplementalGroupsMixin({ranges+: ranges}) else __supplementalGroupsMixin({ranges+: [ranges]}),\n              rangesType:: hidden.extensions.v1beta1.idRange,\n              // Rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.\n              withRule(rule):: self + __supplementalGroupsMixin({rule: rule}),\n            },\n            supplementalGroupsType:: hidden.extensions.v1beta1.supplementalGroupsStrategyOptions,\n            // volumes is a white list of allowed volume plugins.  Empty indicates that all plugins may be used.\n            withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n            // volumes is a white list of allowed volume plugins.  Empty indicates that all plugins may be used.\n            withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n          },\n          specType:: hidden.extensions.v1beta1.podSecurityPolicySpec,\n        },\n      },\n      // Pod Security Policy List is a list of PodSecurityPolicy objects.\n      podSecurityPolicyList:: {\n        local kind = {kind: \"PodSecurityPolicyList\"},\n        new():: kind + apiVersion,\n        // Items is a list of schema objects.\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is a list of schema objects.\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.extensions.v1beta1.podSecurityPolicy,\n        mixin:: {\n        },\n      },\n      // ReplicaSet represents the configuration of a ReplicaSet.\n      replicaSet:: {\n        local kind = {kind: \"ReplicaSet\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          // If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n            withMinReadySeconds(minReadySeconds):: self + __specMixin({minReadySeconds: minReadySeconds}),\n            // Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller\n            withReplicas(replicas):: self + __specMixin({replicas: replicas}),\n            // Selector is a label query over pods that should match the replica count. If the selector is empty, it is defaulted to the labels present on the pod template. Label keys and values that must match in order to be controlled by this replica set. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({selector+: selector}),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\n            template:: {\n              local __templateMixin(template) = __specMixin({template+: template}),\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n                // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n                withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                  pendingType:: hidden.meta.v1.initializer,\n                  // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                  result:: {\n                    local __resultMixin(result) = __initializersMixin({result+: result}),\n                    mixinInstance(result):: __resultMixin(result),\n                    // Suggested HTTP return code for this status, 0 if not set.\n                    withCode(code):: self + __resultMixin({code: code}),\n                    // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                    details:: {\n                      local __detailsMixin(details) = __resultMixin({details+: details}),\n                      mixinInstance(details):: __detailsMixin(details),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                      causesType:: hidden.meta.v1.statusCause,\n                      // The group attribute of the resource associated with the status StatusReason.\n                      withGroup(group):: self + __detailsMixin({group: group}),\n                      // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                      withName(name):: self + __detailsMixin({name: name}),\n                      // If specified, the time in seconds before the operation should be retried.\n                      withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                      // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                      withUid(uid):: self + __detailsMixin({uid: uid}),\n                    },\n                    detailsType:: hidden.meta.v1.statusDetails,\n                    // A human-readable description of the status of this operation.\n                    withMessage(message):: self + __resultMixin({message: message}),\n                    // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                    withReason(reason):: self + __resultMixin({reason: reason}),\n                  },\n                  resultType:: hidden.meta.v1.status,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({labels: labels}),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({name: name}),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({spec+: spec}),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({affinity+: affinity}),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}),\n                containersType:: hidden.core.v1.container,\n                // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({hostname: hostname}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}),\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}),\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n          specType:: hidden.extensions.v1beta1.replicaSetSpec,\n        },\n      },\n      // ReplicaSetList is a collection of ReplicaSets.\n      replicaSetList:: {\n        local kind = {kind: \"ReplicaSetList\"},\n        new():: kind + apiVersion,\n        // List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.extensions.v1beta1.replicaSet,\n        mixin:: {\n        },\n      },\n      // represents a scaling request for a resource.\n      scale:: {\n        local kind = {kind: \"Scale\"},\n        new(replicas):: kind + apiVersion + self.mixin.spec.withReplicas(replicas),\n        mixin:: {\n          // Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // desired number of instances for the scaled object.\n            withReplicas(replicas):: self + __specMixin({replicas: replicas}),\n          },\n          specType:: hidden.extensions.v1beta1.scaleSpec,\n        },\n      },\n      // A ThirdPartyResource is a generic representation of a resource, it is used by add-ons and plugins to add new resource types to the API.  It consists of one or more Versions of the api.\n      thirdPartyResource:: {\n        local kind = {kind: \"ThirdPartyResource\"},\n        new():: kind + apiVersion,\n        // Description is the description of this object.\n        withDescription(description):: self + {description: description},\n        // Versions are versions for this third party object\n        withVersions(versions):: self + if std.type(versions) == \"array\" then {versions: versions} else {versions: [versions]},\n        // Versions are versions for this third party object\n        withVersionsMixin(versions):: self + if std.type(versions) == \"array\" then {versions+: versions} else {versions+: [versions]},\n        versionsType:: hidden.extensions.v1beta1.apiVersion,\n        mixin:: {\n          // Standard object metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // ThirdPartyResourceList is a list of ThirdPartyResources.\n      thirdPartyResourceList:: {\n        local kind = {kind: \"ThirdPartyResourceList\"},\n        new():: kind + apiVersion,\n        // Items is the list of ThirdPartyResources.\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is the list of ThirdPartyResources.\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.extensions.v1beta1.thirdPartyResource,\n        mixin:: {\n        },\n      },\n    },\n  },\n  networking:: {\n    v1:: {\n      local apiVersion = {apiVersion: \"networking.k8s.io/v1\"},\n      // NetworkPolicy describes what network traffic is allowed for a set of Pods\n      networkPolicy:: {\n        local kind = {kind: \"NetworkPolicy\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Specification of the desired behavior for this NetworkPolicy.\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default)\n            withIngress(ingress):: self + if std.type(ingress) == \"array\" then __specMixin({ingress: ingress}) else __specMixin({ingress: [ingress]}),\n            // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default)\n            withIngressMixin(ingress):: self + if std.type(ingress) == \"array\" then __specMixin({ingress+: ingress}) else __specMixin({ingress+: [ingress]}),\n            ingressType:: hidden.networking.v1.networkPolicyIngressRule,\n            // Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.\n            podSelector:: {\n              local __podSelectorMixin(podSelector) = __specMixin({podSelector+: podSelector}),\n              mixinInstance(podSelector):: __podSelectorMixin(podSelector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __podSelectorMixin({matchExpressions: matchExpressions}) else __podSelectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __podSelectorMixin({matchExpressions+: matchExpressions}) else __podSelectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __podSelectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __podSelectorMixin({matchLabels+: matchLabels}),\n            },\n            podSelectorType:: hidden.meta.v1.labelSelector,\n          },\n          specType:: hidden.networking.v1.networkPolicySpec,\n        },\n      },\n      // NetworkPolicyList is a list of NetworkPolicy objects.\n      networkPolicyList:: {\n        local kind = {kind: \"NetworkPolicyList\"},\n        new():: kind + apiVersion,\n        // Items is a list of schema objects.\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is a list of schema objects.\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.networking.v1.networkPolicy,\n        mixin:: {\n          // Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n            withResourceVersion(resourceVersion):: self + __metadataMixin({resourceVersion: resourceVersion}),\n            // SelfLink is a URL representing this object. Populated by the system. Read-only.\n            withSelfLink(selfLink):: self + __metadataMixin({selfLink: selfLink}),\n          },\n          metadataType:: hidden.meta.v1.listMeta,\n        },\n      },\n    },\n  },\n  policy:: {\n    v1beta1:: {\n      local apiVersion = {apiVersion: \"policy/v1beta1\"},\n      // Eviction evicts a pod from its node subject to certain policies and safety constraints. This is a subresource of Pod.  A request to cause such an eviction is created by POSTing to .../pods/<pod name>/evictions.\n      eviction:: {\n        local kind = {kind: \"Eviction\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          // DeleteOptions may be provided\n          deleteOptions:: {\n            local __deleteOptionsMixin(deleteOptions) = {deleteOptions+: deleteOptions},\n            mixinInstance(deleteOptions):: __deleteOptionsMixin(deleteOptions),\n            // The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\n            withGracePeriodSeconds(gracePeriodSeconds):: self + __deleteOptionsMixin({gracePeriodSeconds: gracePeriodSeconds}),\n            // Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\n            withOrphanDependents(orphanDependents):: self + __deleteOptionsMixin({orphanDependents: orphanDependents}),\n            // Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.\n            preconditions:: {\n              local __preconditionsMixin(preconditions) = __deleteOptionsMixin({preconditions+: preconditions}),\n              mixinInstance(preconditions):: __preconditionsMixin(preconditions),\n              // Specifies the target UID.\n              withUid(uid):: self + __preconditionsMixin({uid: uid}),\n            },\n            preconditionsType:: hidden.meta.v1.preconditions,\n            // Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\n            withPropagationPolicy(propagationPolicy):: self + __deleteOptionsMixin({propagationPolicy: propagationPolicy}),\n          },\n          deleteOptionsType:: hidden.meta.v1.deleteOptions,\n          // ObjectMeta describes the pod that is being evicted.\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods\n      podDisruptionBudget:: {\n        local kind = {kind: \"PodDisruptionBudget\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          //\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // Specification of the desired behavior of the PodDisruptionBudget.\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // An eviction is allowed if at most \"maxUnavailable\" pods selected by \"selector\" are unavailable after the eviction, i.e. even in absence of the evicted pod. For example, one can prevent all voluntary evictions by specifying 0. This is a mutually exclusive setting with \"minAvailable\".\n            withMaxUnavailable(maxUnavailable):: __specMixin({maxUnavailable: maxUnavailable}),\n            // An eviction is allowed if at least \"minAvailable\" pods selected by \"selector\" will still be available after the eviction, i.e. even in the absence of the evicted pod.  So for example you can prevent all voluntary evictions by specifying \"100%\".\n            withMinAvailable(minAvailable):: __specMixin({minAvailable: minAvailable}),\n            // Label query over pods whose evictions are managed by the disruption budget.\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({selector+: selector}),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n          },\n          specType:: hidden.policy.v1beta1.podDisruptionBudgetSpec,\n        },\n      },\n      // PodDisruptionBudgetList is a collection of PodDisruptionBudgets.\n      podDisruptionBudgetList:: {\n        local kind = {kind: \"PodDisruptionBudgetList\"},\n        new():: kind + apiVersion,\n        //\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        //\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.policy.v1beta1.podDisruptionBudget,\n        mixin:: {\n        },\n      },\n    },\n  },\n  rbac:: {\n    v1alpha1:: {\n      local apiVersion = {apiVersion: \"rbac.authorization.k8s.io/v1alpha1\"},\n      // ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.\n      clusterRole:: {\n        local kind = {kind: \"ClusterRole\"},\n        new():: kind + apiVersion,\n        // Rules holds all the PolicyRules for this ClusterRole\n        withRules(rules):: self + if std.type(rules) == \"array\" then {rules: rules} else {rules: [rules]},\n        // Rules holds all the PolicyRules for this ClusterRole\n        withRulesMixin(rules):: self + if std.type(rules) == \"array\" then {rules+: rules} else {rules+: [rules]},\n        rulesType:: hidden.rbac.v1alpha1.policyRule,\n        mixin:: {\n          // Standard object's metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // ClusterRoleBinding references a ClusterRole, but not contain it.  It can reference a ClusterRole in the global namespace, and adds who information via Subject.\n      clusterRoleBinding:: {\n        local kind = {kind: \"ClusterRoleBinding\"},\n        new():: kind + apiVersion,\n        // Subjects holds references to the objects the role applies to.\n        withSubjects(subjects):: self + if std.type(subjects) == \"array\" then {subjects: subjects} else {subjects: [subjects]},\n        // Subjects holds references to the objects the role applies to.\n        withSubjectsMixin(subjects):: self + if std.type(subjects) == \"array\" then {subjects+: subjects} else {subjects+: [subjects]},\n        subjectsType:: hidden.rbac.v1alpha1.subject,\n        mixin:: {\n          // Standard object's metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.\n          roleRef:: {\n            local __roleRefMixin(roleRef) = {roleRef+: roleRef},\n            mixinInstance(roleRef):: __roleRefMixin(roleRef),\n            // APIGroup is the group for the resource being referenced\n            withApiGroup(apiGroup):: self + __roleRefMixin({apiGroup: apiGroup}),\n            // Name is the name of resource being referenced\n            withName(name):: self + __roleRefMixin({name: name}),\n          },\n          roleRefType:: hidden.rbac.v1alpha1.roleRef,\n        },\n      },\n      // ClusterRoleBindingList is a collection of ClusterRoleBindings\n      clusterRoleBindingList:: {\n        local kind = {kind: \"ClusterRoleBindingList\"},\n        new():: kind + apiVersion,\n        // Items is a list of ClusterRoleBindings\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is a list of ClusterRoleBindings\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.rbac.v1alpha1.clusterRoleBinding,\n        mixin:: {\n        },\n      },\n      // ClusterRoleList is a collection of ClusterRoles\n      clusterRoleList:: {\n        local kind = {kind: \"ClusterRoleList\"},\n        new():: kind + apiVersion,\n        // Items is a list of ClusterRoles\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is a list of ClusterRoles\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.rbac.v1alpha1.clusterRole,\n        mixin:: {\n        },\n      },\n      // Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.\n      role:: {\n        local kind = {kind: \"Role\"},\n        new():: kind + apiVersion,\n        // Rules holds all the PolicyRules for this Role\n        withRules(rules):: self + if std.type(rules) == \"array\" then {rules: rules} else {rules: [rules]},\n        // Rules holds all the PolicyRules for this Role\n        withRulesMixin(rules):: self + if std.type(rules) == \"array\" then {rules+: rules} else {rules+: [rules]},\n        rulesType:: hidden.rbac.v1alpha1.policyRule,\n        mixin:: {\n          // Standard object's metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // RoleBinding references a role, but does not contain it.  It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in.  RoleBindings in a given namespace only have effect in that namespace.\n      roleBinding:: {\n        local kind = {kind: \"RoleBinding\"},\n        new():: kind + apiVersion,\n        // Subjects holds references to the objects the role applies to.\n        withSubjects(subjects):: self + if std.type(subjects) == \"array\" then {subjects: subjects} else {subjects: [subjects]},\n        // Subjects holds references to the objects the role applies to.\n        withSubjectsMixin(subjects):: self + if std.type(subjects) == \"array\" then {subjects+: subjects} else {subjects+: [subjects]},\n        subjectsType:: hidden.rbac.v1alpha1.subject,\n        mixin:: {\n          // Standard object's metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.\n          roleRef:: {\n            local __roleRefMixin(roleRef) = {roleRef+: roleRef},\n            mixinInstance(roleRef):: __roleRefMixin(roleRef),\n            // APIGroup is the group for the resource being referenced\n            withApiGroup(apiGroup):: self + __roleRefMixin({apiGroup: apiGroup}),\n            // Name is the name of resource being referenced\n            withName(name):: self + __roleRefMixin({name: name}),\n          },\n          roleRefType:: hidden.rbac.v1alpha1.roleRef,\n        },\n      },\n      // RoleBindingList is a collection of RoleBindings\n      roleBindingList:: {\n        local kind = {kind: \"RoleBindingList\"},\n        new():: kind + apiVersion,\n        // Items is a list of RoleBindings\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is a list of RoleBindings\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.rbac.v1alpha1.roleBinding,\n        mixin:: {\n        },\n      },\n      // RoleList is a collection of Roles\n      roleList:: {\n        local kind = {kind: \"RoleList\"},\n        new():: kind + apiVersion,\n        // Items is a list of Roles\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is a list of Roles\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.rbac.v1alpha1.role,\n        mixin:: {\n        },\n      },\n    },\n    v1beta1:: {\n      local apiVersion = {apiVersion: \"rbac.authorization.k8s.io/v1beta1\"},\n      // ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.\n      clusterRole:: {\n        local kind = {kind: \"ClusterRole\"},\n        new():: kind + apiVersion,\n        // Rules holds all the PolicyRules for this ClusterRole\n        withRules(rules):: self + if std.type(rules) == \"array\" then {rules: rules} else {rules: [rules]},\n        // Rules holds all the PolicyRules for this ClusterRole\n        withRulesMixin(rules):: self + if std.type(rules) == \"array\" then {rules+: rules} else {rules+: [rules]},\n        rulesType:: hidden.rbac.v1beta1.policyRule,\n        mixin:: {\n          // Standard object's metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // ClusterRoleBinding references a ClusterRole, but not contain it.  It can reference a ClusterRole in the global namespace, and adds who information via Subject.\n      clusterRoleBinding:: {\n        local kind = {kind: \"ClusterRoleBinding\"},\n        new():: kind + apiVersion,\n        // Subjects holds references to the objects the role applies to.\n        withSubjects(subjects):: self + if std.type(subjects) == \"array\" then {subjects: subjects} else {subjects: [subjects]},\n        // Subjects holds references to the objects the role applies to.\n        withSubjectsMixin(subjects):: self + if std.type(subjects) == \"array\" then {subjects+: subjects} else {subjects+: [subjects]},\n        subjectsType:: hidden.rbac.v1beta1.subject,\n        mixin:: {\n          // Standard object's metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.\n          roleRef:: {\n            local __roleRefMixin(roleRef) = {roleRef+: roleRef},\n            mixinInstance(roleRef):: __roleRefMixin(roleRef),\n            // APIGroup is the group for the resource being referenced\n            withApiGroup(apiGroup):: self + __roleRefMixin({apiGroup: apiGroup}),\n            // Name is the name of resource being referenced\n            withName(name):: self + __roleRefMixin({name: name}),\n          },\n          roleRefType:: hidden.rbac.v1beta1.roleRef,\n        },\n      },\n      // ClusterRoleBindingList is a collection of ClusterRoleBindings\n      clusterRoleBindingList:: {\n        local kind = {kind: \"ClusterRoleBindingList\"},\n        new():: kind + apiVersion,\n        // Items is a list of ClusterRoleBindings\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is a list of ClusterRoleBindings\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.rbac.v1beta1.clusterRoleBinding,\n        mixin:: {\n        },\n      },\n      // ClusterRoleList is a collection of ClusterRoles\n      clusterRoleList:: {\n        local kind = {kind: \"ClusterRoleList\"},\n        new():: kind + apiVersion,\n        // Items is a list of ClusterRoles\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is a list of ClusterRoles\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.rbac.v1beta1.clusterRole,\n        mixin:: {\n        },\n      },\n      // Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.\n      role:: {\n        local kind = {kind: \"Role\"},\n        new():: kind + apiVersion,\n        // Rules holds all the PolicyRules for this Role\n        withRules(rules):: self + if std.type(rules) == \"array\" then {rules: rules} else {rules: [rules]},\n        // Rules holds all the PolicyRules for this Role\n        withRulesMixin(rules):: self + if std.type(rules) == \"array\" then {rules+: rules} else {rules+: [rules]},\n        rulesType:: hidden.rbac.v1beta1.policyRule,\n        mixin:: {\n          // Standard object's metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // RoleBinding references a role, but does not contain it.  It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in.  RoleBindings in a given namespace only have effect in that namespace.\n      roleBinding:: {\n        local kind = {kind: \"RoleBinding\"},\n        new():: kind + apiVersion,\n        // Subjects holds references to the objects the role applies to.\n        withSubjects(subjects):: self + if std.type(subjects) == \"array\" then {subjects: subjects} else {subjects: [subjects]},\n        // Subjects holds references to the objects the role applies to.\n        withSubjectsMixin(subjects):: self + if std.type(subjects) == \"array\" then {subjects+: subjects} else {subjects+: [subjects]},\n        subjectsType:: hidden.rbac.v1beta1.subject,\n        mixin:: {\n          // Standard object's metadata.\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          // RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.\n          roleRef:: {\n            local __roleRefMixin(roleRef) = {roleRef+: roleRef},\n            mixinInstance(roleRef):: __roleRefMixin(roleRef),\n            // APIGroup is the group for the resource being referenced\n            withApiGroup(apiGroup):: self + __roleRefMixin({apiGroup: apiGroup}),\n            // Name is the name of resource being referenced\n            withName(name):: self + __roleRefMixin({name: name}),\n          },\n          roleRefType:: hidden.rbac.v1beta1.roleRef,\n        },\n      },\n      // RoleBindingList is a collection of RoleBindings\n      roleBindingList:: {\n        local kind = {kind: \"RoleBindingList\"},\n        new():: kind + apiVersion,\n        // Items is a list of RoleBindings\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is a list of RoleBindings\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.rbac.v1beta1.roleBinding,\n        mixin:: {\n        },\n      },\n      // RoleList is a collection of Roles\n      roleList:: {\n        local kind = {kind: \"RoleList\"},\n        new():: kind + apiVersion,\n        // Items is a list of Roles\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is a list of Roles\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.rbac.v1beta1.role,\n        mixin:: {\n        },\n      },\n    },\n  },\n  settings:: {\n    v1alpha1:: {\n      local apiVersion = {apiVersion: \"settings.k8s.io/v1alpha1\"},\n      // PodPreset is a policy resource that defines additional runtime requirements for a Pod.\n      podPreset:: {\n        local kind = {kind: \"PodPreset\"},\n        new():: kind + apiVersion,\n        mixin:: {\n          //\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n          //\n          spec:: {\n            local __specMixin(spec) = {spec+: spec},\n            mixinInstance(spec):: __specMixin(spec),\n            // Env defines the collection of EnvVar to inject into containers.\n            withEnv(env):: self + if std.type(env) == \"array\" then __specMixin({env: env}) else __specMixin({env: [env]}),\n            // Env defines the collection of EnvVar to inject into containers.\n            withEnvMixin(env):: self + if std.type(env) == \"array\" then __specMixin({env+: env}) else __specMixin({env+: [env]}),\n            // EnvFrom defines the collection of EnvFromSource to inject into containers.\n            withEnvFrom(envFrom):: self + if std.type(envFrom) == \"array\" then __specMixin({envFrom: envFrom}) else __specMixin({envFrom: [envFrom]}),\n            // EnvFrom defines the collection of EnvFromSource to inject into containers.\n            withEnvFromMixin(envFrom):: self + if std.type(envFrom) == \"array\" then __specMixin({envFrom+: envFrom}) else __specMixin({envFrom+: [envFrom]}),\n            envFromType:: hidden.core.v1.envFromSource,\n            envType:: hidden.core.v1.envVar,\n            // Selector is a label query over a set of resources, in this case pods. Required.\n            selector:: {\n              local __selectorMixin(selector) = __specMixin({selector+: selector}),\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // VolumeMounts defines the collection of VolumeMount to inject into containers.\n            withVolumeMounts(volumeMounts):: self + if std.type(volumeMounts) == \"array\" then __specMixin({volumeMounts: volumeMounts}) else __specMixin({volumeMounts: [volumeMounts]}),\n            // VolumeMounts defines the collection of VolumeMount to inject into containers.\n            withVolumeMountsMixin(volumeMounts):: self + if std.type(volumeMounts) == \"array\" then __specMixin({volumeMounts+: volumeMounts}) else __specMixin({volumeMounts+: [volumeMounts]}),\n            volumeMountsType:: hidden.core.v1.volumeMount,\n            // Volumes defines the collection of Volume to inject into the pod.\n            withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n            // Volumes defines the collection of Volume to inject into the pod.\n            withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n            volumesType:: hidden.core.v1.volume,\n          },\n          specType:: hidden.settings.v1alpha1.podPresetSpec,\n        },\n      },\n      // PodPresetList is a list of PodPreset objects.\n      podPresetList:: {\n        local kind = {kind: \"PodPresetList\"},\n        new():: kind + apiVersion,\n        // Items is a list of schema objects.\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is a list of schema objects.\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.settings.v1alpha1.podPreset,\n        mixin:: {\n        },\n      },\n    },\n  },\n  storage:: {\n    v1:: {\n      local apiVersion = {apiVersion: \"storage.k8s.io/v1\"},\n      // StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n      //\n      // StorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.\n      storageClass:: {\n        local kind = {kind: \"StorageClass\"},\n        new():: kind + apiVersion,\n        // Parameters holds the parameters for the provisioner that should create volumes of this storage class.\n        withParameters(parameters):: self + {parameters: parameters},\n        // Parameters holds the parameters for the provisioner that should create volumes of this storage class.\n        withParametersMixin(parameters):: self + {parameters+: parameters},\n        // Provisioner indicates the type of the provisioner.\n        withProvisioner(provisioner):: self + {provisioner: provisioner},\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // StorageClassList is a collection of storage classes.\n      storageClassList:: {\n        local kind = {kind: \"StorageClassList\"},\n        new():: kind + apiVersion,\n        // Items is the list of StorageClasses\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is the list of StorageClasses\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.storage.v1.storageClass,\n        mixin:: {\n        },\n      },\n    },\n    v1beta1:: {\n      local apiVersion = {apiVersion: \"storage.k8s.io/v1beta1\"},\n      // StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n      //\n      // StorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.\n      storageClass:: {\n        local kind = {kind: \"StorageClass\"},\n        new():: kind + apiVersion,\n        // Parameters holds the parameters for the provisioner that should create volumes of this storage class.\n        withParameters(parameters):: self + {parameters: parameters},\n        // Parameters holds the parameters for the provisioner that should create volumes of this storage class.\n        withParametersMixin(parameters):: self + {parameters+: parameters},\n        // Provisioner indicates the type of the provisioner.\n        withProvisioner(provisioner):: self + {provisioner: provisioner},\n        mixin:: {\n          // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n          metadata:: {\n            local __metadataMixin(metadata) = {metadata+: metadata},\n            mixinInstance(metadata):: __metadataMixin(metadata),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n            // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n            withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n            // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n            withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n            // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n            withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n            // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n            withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n            // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n            //\n            // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n            //\n            // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n            withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabels(labels):: self + __metadataMixin({labels: labels}),\n            // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n            withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n            // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n            withName(name):: self + __metadataMixin({name: name}),\n            // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n            //\n            // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n            withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n          },\n          metadataType:: hidden.meta.v1.objectMeta,\n        },\n      },\n      // StorageClassList is a collection of storage classes.\n      storageClassList:: {\n        local kind = {kind: \"StorageClassList\"},\n        new():: kind + apiVersion,\n        // Items is the list of StorageClasses\n        withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n        // Items is the list of StorageClasses\n        withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n        itemsType:: hidden.storage.v1beta1.storageClass,\n        mixin:: {\n        },\n      },\n    },\n  },\n  local hidden = {\n    admissionregistration:: {\n      v1alpha1:: {\n        local apiVersion = {apiVersion: \"admissionregistration/v1alpha1\"},\n        // AdmissionHookClientConfig contains the information to make a TLS connection with the webhook\n        admissionHookClientConfig:: {\n          new():: {},\n          // CABundle is a PEM encoded CA bundle which will be used to validate webhook's server certificate. Required\n          withCaBundle(caBundle):: self + {caBundle: caBundle},\n          mixin:: {\n            // Service is a reference to the service for this webhook. If there is only one port open for the service, that port will be used. If there are multiple ports open, port 443 will be used if it is open, otherwise it is an error. Required\n            service:: {\n              local __serviceMixin(service) = {service+: service},\n              mixinInstance(service):: __serviceMixin(service),\n              // Name is the name of the service Required\n              withName(name):: self + __serviceMixin({name: name}),\n              // Namespace is the namespace of the service Required\n              withNamespace(namespace):: self + __serviceMixin({namespace: namespace}),\n            },\n            serviceType:: hidden.admissionregistration.v1alpha1.serviceReference,\n          },\n        },\n        // ExternalAdmissionHook describes an external admission webhook and the resources and operations it applies to.\n        externalAdmissionHook:: {\n          new():: {},\n          // FailurePolicy defines how unrecognized errors from the admission endpoint are handled - allowed values are Ignore or Fail. Defaults to Ignore.\n          withFailurePolicy(failurePolicy):: self + {failurePolicy: failurePolicy},\n          // The name of the external admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where \"imagepolicy\" is the name of the webhook, and kubernetes.io is the name of the organization. Required.\n          withName(name):: self + {name: name},\n          // Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule.\n          withRules(rules):: self + if std.type(rules) == \"array\" then {rules: rules} else {rules: [rules]},\n          // Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule.\n          withRulesMixin(rules):: self + if std.type(rules) == \"array\" then {rules+: rules} else {rules+: [rules]},\n          rulesType:: hidden.admissionregistration.v1alpha1.ruleWithOperations,\n          mixin:: {\n            // ClientConfig defines how to communicate with the hook. Required\n            clientConfig:: {\n              local __clientConfigMixin(clientConfig) = {clientConfig+: clientConfig},\n              mixinInstance(clientConfig):: __clientConfigMixin(clientConfig),\n              // CABundle is a PEM encoded CA bundle which will be used to validate webhook's server certificate. Required\n              withCaBundle(caBundle):: self + __clientConfigMixin({caBundle: caBundle}),\n              // Service is a reference to the service for this webhook. If there is only one port open for the service, that port will be used. If there are multiple ports open, port 443 will be used if it is open, otherwise it is an error. Required\n              service:: {\n                local __serviceMixin(service) = __clientConfigMixin({service+: service}),\n                mixinInstance(service):: __serviceMixin(service),\n                // Name is the name of the service Required\n                withName(name):: self + __serviceMixin({name: name}),\n                // Namespace is the namespace of the service Required\n                withNamespace(namespace):: self + __serviceMixin({namespace: namespace}),\n              },\n              serviceType:: hidden.admissionregistration.v1alpha1.serviceReference,\n            },\n            clientConfigType:: hidden.admissionregistration.v1alpha1.admissionHookClientConfig,\n          },\n        },\n        // Initializer describes the name and the failure policy of an initializer, and what resources it applies to.\n        initializer:: {\n          new():: {},\n          // FailurePolicy defines what happens if the responsible initializer controller fails to takes action. Allowed values are Ignore, or Fail. If \"Ignore\" is set, initializer is removed from the initializers list of an object if the timeout is reached; If \"Fail\" is set, admissionregistration returns timeout error if the timeout is reached.\n          withFailurePolicy(failurePolicy):: self + {failurePolicy: failurePolicy},\n          // Name is the identifier of the initializer. It will be added to the object that needs to be initialized. Name should be fully qualified, e.g., alwayspullimages.kubernetes.io, where \"alwayspullimages\" is the name of the webhook, and kubernetes.io is the name of the organization. Required\n          withName(name):: self + {name: name},\n          // Rules describes what resources/subresources the initializer cares about. The initializer cares about an operation if it matches _any_ Rule. Rule.Resources must not include subresources.\n          withRules(rules):: self + if std.type(rules) == \"array\" then {rules: rules} else {rules: [rules]},\n          // Rules describes what resources/subresources the initializer cares about. The initializer cares about an operation if it matches _any_ Rule. Rule.Resources must not include subresources.\n          withRulesMixin(rules):: self + if std.type(rules) == \"array\" then {rules+: rules} else {rules+: [rules]},\n          rulesType:: hidden.admissionregistration.v1alpha1.rule,\n          mixin:: {\n          },\n        },\n        // Rule is a tuple of APIGroups, APIVersion, and Resources.It is recommended to make sure that all the tuple expansions are valid.\n        rule:: {\n          new():: {},\n          // APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.\n          withApiGroups(apiGroups):: self + if std.type(apiGroups) == \"array\" then {apiGroups: apiGroups} else {apiGroups: [apiGroups]},\n          // APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.\n          withApiGroupsMixin(apiGroups):: self + if std.type(apiGroups) == \"array\" then {apiGroups+: apiGroups} else {apiGroups+: [apiGroups]},\n          // APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.\n          withApiVersions(apiVersions):: self + if std.type(apiVersions) == \"array\" then {apiVersions: apiVersions} else {apiVersions: [apiVersions]},\n          // APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.\n          withApiVersionsMixin(apiVersions):: self + if std.type(apiVersions) == \"array\" then {apiVersions+: apiVersions} else {apiVersions+: [apiVersions]},\n          // Resources is a list of resources this rule applies to.\n          //\n          // For example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\n          //\n          // If wildcard is present, the validation rule will ensure resources do not overlap with each other.\n          //\n          // Depending on the enclosing object, subresources might not be allowed. Required.\n          withResources(resources):: self + if std.type(resources) == \"array\" then {resources: resources} else {resources: [resources]},\n          // Resources is a list of resources this rule applies to.\n          //\n          // For example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\n          //\n          // If wildcard is present, the validation rule will ensure resources do not overlap with each other.\n          //\n          // Depending on the enclosing object, subresources might not be allowed. Required.\n          withResourcesMixin(resources):: self + if std.type(resources) == \"array\" then {resources+: resources} else {resources+: [resources]},\n          mixin:: {\n          },\n        },\n        // RuleWithOperations is a tuple of Operations and Resources. It is recommended to make sure that all the tuple expansions are valid.\n        ruleWithOperations:: {\n          new():: {},\n          // APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.\n          withApiGroups(apiGroups):: self + if std.type(apiGroups) == \"array\" then {apiGroups: apiGroups} else {apiGroups: [apiGroups]},\n          // APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.\n          withApiGroupsMixin(apiGroups):: self + if std.type(apiGroups) == \"array\" then {apiGroups+: apiGroups} else {apiGroups+: [apiGroups]},\n          // APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.\n          withApiVersions(apiVersions):: self + if std.type(apiVersions) == \"array\" then {apiVersions: apiVersions} else {apiVersions: [apiVersions]},\n          // APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.\n          withApiVersionsMixin(apiVersions):: self + if std.type(apiVersions) == \"array\" then {apiVersions+: apiVersions} else {apiVersions+: [apiVersions]},\n          // Operations is the operations the admission hook cares about - CREATE, UPDATE, or * for all operations. If '*' is present, the length of the slice must be one. Required.\n          withOperations(operations):: self + if std.type(operations) == \"array\" then {operations: operations} else {operations: [operations]},\n          // Operations is the operations the admission hook cares about - CREATE, UPDATE, or * for all operations. If '*' is present, the length of the slice must be one. Required.\n          withOperationsMixin(operations):: self + if std.type(operations) == \"array\" then {operations+: operations} else {operations+: [operations]},\n          // Resources is a list of resources this rule applies to.\n          //\n          // For example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\n          //\n          // If wildcard is present, the validation rule will ensure resources do not overlap with each other.\n          //\n          // Depending on the enclosing object, subresources might not be allowed. Required.\n          withResources(resources):: self + if std.type(resources) == \"array\" then {resources: resources} else {resources: [resources]},\n          // Resources is a list of resources this rule applies to.\n          //\n          // For example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\n          //\n          // If wildcard is present, the validation rule will ensure resources do not overlap with each other.\n          //\n          // Depending on the enclosing object, subresources might not be allowed. Required.\n          withResourcesMixin(resources):: self + if std.type(resources) == \"array\" then {resources+: resources} else {resources+: [resources]},\n          mixin:: {\n          },\n        },\n        // ServiceReference holds a reference to Service.legacy.k8s.io\n        serviceReference:: {\n          new():: {},\n          // Name is the name of the service Required\n          withName(name):: self + {name: name},\n          // Namespace is the namespace of the service Required\n          withNamespace(namespace):: self + {namespace: namespace},\n          mixin:: {\n          },\n        },\n      },\n    },\n    apiregistration:: {\n      v1beta1:: {\n        local apiVersion = {apiVersion: \"apiregistration/v1beta1\"},\n        // APIService represents a server for a particular GroupVersion. Name must be \"version.group\".\n        aPIService:: {\n          new():: {},\n          mixin:: {\n            //\n            metadata:: {\n              local __metadataMixin(metadata) = {metadata+: metadata},\n              mixinInstance(metadata):: __metadataMixin(metadata),\n              // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n              withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n              // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n              withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n              // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n              withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n              // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n              withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n              // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n              withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n              // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n              withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n              // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n              //\n              // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n              //\n              // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n              withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n              // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n              //\n              // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n              initializers:: {\n                local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                mixinInstance(initializers):: __initializersMixin(initializers),\n                // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                pendingType:: hidden.meta.v1.initializer,\n                // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                result:: {\n                  local __resultMixin(result) = __initializersMixin({result+: result}),\n                  mixinInstance(result):: __resultMixin(result),\n                  // Suggested HTTP return code for this status, 0 if not set.\n                  withCode(code):: self + __resultMixin({code: code}),\n                  // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                  details:: {\n                    local __detailsMixin(details) = __resultMixin({details+: details}),\n                    mixinInstance(details):: __detailsMixin(details),\n                    // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                    withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                    // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                    withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                    causesType:: hidden.meta.v1.statusCause,\n                    // The group attribute of the resource associated with the status StatusReason.\n                    withGroup(group):: self + __detailsMixin({group: group}),\n                    // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                    withName(name):: self + __detailsMixin({name: name}),\n                    // If specified, the time in seconds before the operation should be retried.\n                    withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                    // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                    withUid(uid):: self + __detailsMixin({uid: uid}),\n                  },\n                  detailsType:: hidden.meta.v1.statusDetails,\n                  // A human-readable description of the status of this operation.\n                  withMessage(message):: self + __resultMixin({message: message}),\n                  // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                  withReason(reason):: self + __resultMixin({reason: reason}),\n                },\n                resultType:: hidden.meta.v1.status,\n              },\n              initializersType:: hidden.meta.v1.initializers,\n              // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n              withLabels(labels):: self + __metadataMixin({labels: labels}),\n              // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n              withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n              // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n              withName(name):: self + __metadataMixin({name: name}),\n              // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n              //\n              // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n              withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n            },\n            metadataType:: hidden.meta.v1.objectMeta,\n            // Spec contains information for locating and communicating with a server\n            spec:: {\n              local __specMixin(spec) = {spec+: spec},\n              mixinInstance(spec):: __specMixin(spec),\n              // CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate.\n              withCaBundle(caBundle):: self + __specMixin({caBundle: caBundle}),\n              // Group is the API group name this server hosts\n              withGroup(group):: self + __specMixin({group: group}),\n              // GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is prefered by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object.  (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s\n              withGroupPriorityMinimum(groupPriorityMinimum):: self + __specMixin({groupPriorityMinimum: groupPriorityMinimum}),\n              // InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged.  You should use the CABundle instead.\n              withInsecureSkipTLSVerify(insecureSkipTLSVerify):: self + __specMixin({insecureSkipTLSVerify: insecureSkipTLSVerify}),\n              // Service is a reference to the service for this API server.  It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled.\n              service:: {\n                local __serviceMixin(service) = __specMixin({service+: service}),\n                mixinInstance(service):: __serviceMixin(service),\n                // Name is the name of the service\n                withName(name):: self + __serviceMixin({name: name}),\n                // Namespace is the namespace of the service\n                withNamespace(namespace):: self + __serviceMixin({namespace: namespace}),\n              },\n              serviceType:: hidden.apiregistration.v1beta1.serviceReference,\n              // Version is the API version this server hosts.  For example, \"v1\"\n              withVersion(version):: self + __specMixin({version: version}),\n              // VersionPriority controls the ordering of this API version inside of its group.  Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object.  (v1.bar before v1.foo) Since it's inside of a group, the number can be small, probably in the 10s.\n              withVersionPriority(versionPriority):: self + __specMixin({versionPriority: versionPriority}),\n            },\n            specType:: hidden.apiregistration.v1beta1.aPIServiceSpec,\n            // Status contains derived information about an API server\n            status:: {\n              local __statusMixin(status) = {status+: status},\n              mixinInstance(status):: __statusMixin(status),\n              // Current service state of apiService.\n              withConditions(conditions):: self + if std.type(conditions) == \"array\" then __statusMixin({conditions: conditions}) else __statusMixin({conditions: [conditions]}),\n              // Current service state of apiService.\n              withConditionsMixin(conditions):: self + if std.type(conditions) == \"array\" then __statusMixin({conditions+: conditions}) else __statusMixin({conditions+: [conditions]}),\n              conditionsType:: hidden.apiregistration.v1beta1.aPIServiceCondition,\n            },\n            statusType:: hidden.apiregistration.v1beta1.aPIServiceStatus,\n          },\n        },\n        //\n        aPIServiceCondition:: {\n          new():: {},\n          // Human-readable message indicating details about last transition.\n          withMessage(message):: self + {message: message},\n          // Unique, one-word, CamelCase reason for the condition's last transition.\n          withReason(reason):: self + {reason: reason},\n          // Status is the status of the condition. Can be True, False, Unknown.\n          withStatus(status):: self + {status: status},\n          // Type is the type of the condition.\n          withType(type):: self + {type: type},\n          mixin:: {\n            // Last time the condition transitioned from one status to another.\n            lastTransitionTime:: {\n              local __lastTransitionTimeMixin(lastTransitionTime) = {lastTransitionTime+: lastTransitionTime},\n              mixinInstance(lastTransitionTime):: __lastTransitionTimeMixin(lastTransitionTime),\n            },\n            lastTransitionTimeType:: hidden.meta.v1.time,\n          },\n        },\n        // APIServiceList is a list of APIService objects.\n        aPIServiceList:: {\n          new():: {},\n          //\n          withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n          //\n          withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n          itemsType:: hidden.apiregistration.v1beta1.aPIService,\n          mixin:: {\n            //\n            metadata:: {\n              local __metadataMixin(metadata) = {metadata+: metadata},\n              mixinInstance(metadata):: __metadataMixin(metadata),\n              // String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n              withResourceVersion(resourceVersion):: self + __metadataMixin({resourceVersion: resourceVersion}),\n              // SelfLink is a URL representing this object. Populated by the system. Read-only.\n              withSelfLink(selfLink):: self + __metadataMixin({selfLink: selfLink}),\n            },\n            metadataType:: hidden.meta.v1.listMeta,\n          },\n        },\n        // APIServiceSpec contains information for locating and communicating with a server. Only https is supported, though you are able to disable certificate verification.\n        aPIServiceSpec:: {\n          new():: {},\n          // CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate.\n          withCaBundle(caBundle):: self + {caBundle: caBundle},\n          // Group is the API group name this server hosts\n          withGroup(group):: self + {group: group},\n          // GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is prefered by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object.  (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s\n          withGroupPriorityMinimum(groupPriorityMinimum):: self + {groupPriorityMinimum: groupPriorityMinimum},\n          // InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged.  You should use the CABundle instead.\n          withInsecureSkipTLSVerify(insecureSkipTLSVerify):: self + {insecureSkipTLSVerify: insecureSkipTLSVerify},\n          // Version is the API version this server hosts.  For example, \"v1\"\n          withVersion(version):: self + {version: version},\n          // VersionPriority controls the ordering of this API version inside of its group.  Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object.  (v1.bar before v1.foo) Since it's inside of a group, the number can be small, probably in the 10s.\n          withVersionPriority(versionPriority):: self + {versionPriority: versionPriority},\n          mixin:: {\n            // Service is a reference to the service for this API server.  It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled.\n            service:: {\n              local __serviceMixin(service) = {service+: service},\n              mixinInstance(service):: __serviceMixin(service),\n              // Name is the name of the service\n              withName(name):: self + __serviceMixin({name: name}),\n              // Namespace is the namespace of the service\n              withNamespace(namespace):: self + __serviceMixin({namespace: namespace}),\n            },\n            serviceType:: hidden.apiregistration.v1beta1.serviceReference,\n          },\n        },\n        // APIServiceStatus contains derived information about an API server\n        aPIServiceStatus:: {\n          new():: {},\n          // Current service state of apiService.\n          withConditions(conditions):: self + if std.type(conditions) == \"array\" then {conditions: conditions} else {conditions: [conditions]},\n          // Current service state of apiService.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == \"array\" then {conditions+: conditions} else {conditions+: [conditions]},\n          conditionsType:: hidden.apiregistration.v1beta1.aPIServiceCondition,\n          mixin:: {\n          },\n        },\n        // ServiceReference holds a reference to Service.legacy.k8s.io\n        serviceReference:: {\n          new():: {},\n          // Name is the name of the service\n          withName(name):: self + {name: name},\n          // Namespace is the namespace of the service\n          withNamespace(namespace):: self + {namespace: namespace},\n          mixin:: {\n          },\n        },\n      },\n    },\n    apps:: {\n      v1beta1:: {\n        local apiVersion = {apiVersion: \"apps/v1beta1\"},\n        // DeploymentCondition describes the state of a deployment at a certain point.\n        deploymentCondition:: {\n          new():: {},\n          // A human readable message indicating details about the transition.\n          withMessage(message):: self + {message: message},\n          // The reason for the condition's last transition.\n          withReason(reason):: self + {reason: reason},\n          // Type of deployment condition.\n          withType(type):: self + {type: type},\n          mixin:: {\n            // Last time the condition transitioned from one status to another.\n            lastTransitionTime:: {\n              local __lastTransitionTimeMixin(lastTransitionTime) = {lastTransitionTime+: lastTransitionTime},\n              mixinInstance(lastTransitionTime):: __lastTransitionTimeMixin(lastTransitionTime),\n            },\n            lastTransitionTimeType:: hidden.meta.v1.time,\n            // The last time this condition was updated.\n            lastUpdateTime:: {\n              local __lastUpdateTimeMixin(lastUpdateTime) = {lastUpdateTime+: lastUpdateTime},\n              mixinInstance(lastUpdateTime):: __lastUpdateTimeMixin(lastUpdateTime),\n            },\n            lastUpdateTimeType:: hidden.meta.v1.time,\n          },\n        },\n        // DeploymentSpec is the specification of the desired behavior of the Deployment.\n        deploymentSpec:: {\n          new():: {},\n          // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n          withMinReadySeconds(minReadySeconds):: self + {minReadySeconds: minReadySeconds},\n          // Indicates that the deployment is paused.\n          withPaused(paused):: self + {paused: paused},\n          // The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Once autoRollback is implemented, the deployment controller will automatically rollback failed deployments. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.\n          withProgressDeadlineSeconds(progressDeadlineSeconds):: self + {progressDeadlineSeconds: progressDeadlineSeconds},\n          // Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.\n          withReplicas(replicas):: self + {replicas: replicas},\n          // The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 2.\n          withRevisionHistoryLimit(revisionHistoryLimit):: self + {revisionHistoryLimit: revisionHistoryLimit},\n          mixin:: {\n            // The config this deployment is rolling back to. Will be cleared after rollback is done.\n            rollbackTo:: {\n              local __rollbackToMixin(rollbackTo) = {rollbackTo+: rollbackTo},\n              mixinInstance(rollbackTo):: __rollbackToMixin(rollbackTo),\n              // The revision to rollback to. If set to 0, rollback to the last revision.\n              withRevision(revision):: self + __rollbackToMixin({revision: revision}),\n            },\n            rollbackToType:: hidden.apps.v1beta1.rollbackConfig,\n            // Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.\n            selector:: {\n              local __selectorMixin(selector) = {selector+: selector},\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // The deployment strategy to use to replace existing pods with new ones.\n            strategy:: {\n              local __strategyMixin(strategy) = {strategy+: strategy},\n              mixinInstance(strategy):: __strategyMixin(strategy),\n              // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __strategyMixin({rollingUpdate+: rollingUpdate}),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\n                withMaxSurge(maxSurge):: __rollingUpdateMixin({maxSurge: maxSurge}),\n                // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n                withMaxUnavailable(maxUnavailable):: __rollingUpdateMixin({maxUnavailable: maxUnavailable}),\n              },\n              rollingUpdateType:: hidden.apps.v1beta1.rollingUpdateDeployment,\n              // Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.\n              withType(type):: self + __strategyMixin({type: type}),\n            },\n            strategyType:: hidden.apps.v1beta1.deploymentStrategy,\n            // Template describes the pods that will be created.\n            template:: {\n              local __templateMixin(template) = {template+: template},\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n                // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n                withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                  pendingType:: hidden.meta.v1.initializer,\n                  // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                  result:: {\n                    local __resultMixin(result) = __initializersMixin({result+: result}),\n                    mixinInstance(result):: __resultMixin(result),\n                    // Suggested HTTP return code for this status, 0 if not set.\n                    withCode(code):: self + __resultMixin({code: code}),\n                    // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                    details:: {\n                      local __detailsMixin(details) = __resultMixin({details+: details}),\n                      mixinInstance(details):: __detailsMixin(details),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                      causesType:: hidden.meta.v1.statusCause,\n                      // The group attribute of the resource associated with the status StatusReason.\n                      withGroup(group):: self + __detailsMixin({group: group}),\n                      // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                      withName(name):: self + __detailsMixin({name: name}),\n                      // If specified, the time in seconds before the operation should be retried.\n                      withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                      // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                      withUid(uid):: self + __detailsMixin({uid: uid}),\n                    },\n                    detailsType:: hidden.meta.v1.statusDetails,\n                    // A human-readable description of the status of this operation.\n                    withMessage(message):: self + __resultMixin({message: message}),\n                    // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                    withReason(reason):: self + __resultMixin({reason: reason}),\n                  },\n                  resultType:: hidden.meta.v1.status,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({labels: labels}),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({name: name}),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({spec+: spec}),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({affinity+: affinity}),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}),\n                containersType:: hidden.core.v1.container,\n                // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({hostname: hostname}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}),\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}),\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n        },\n        // DeploymentStatus is the most recently observed status of the Deployment.\n        deploymentStatus:: {\n          new():: {},\n          // Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.\n          withAvailableReplicas(availableReplicas):: self + {availableReplicas: availableReplicas},\n          // Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.\n          withCollisionCount(collisionCount):: self + {collisionCount: collisionCount},\n          // Represents the latest available observations of a deployment's current state.\n          withConditions(conditions):: self + if std.type(conditions) == \"array\" then {conditions: conditions} else {conditions: [conditions]},\n          // Represents the latest available observations of a deployment's current state.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == \"array\" then {conditions+: conditions} else {conditions+: [conditions]},\n          conditionsType:: hidden.apps.v1beta1.deploymentCondition,\n          // The generation observed by the deployment controller.\n          withObservedGeneration(observedGeneration):: self + {observedGeneration: observedGeneration},\n          // Total number of ready pods targeted by this deployment.\n          withReadyReplicas(readyReplicas):: self + {readyReplicas: readyReplicas},\n          // Total number of non-terminated pods targeted by this deployment (their labels match the selector).\n          withReplicas(replicas):: self + {replicas: replicas},\n          // Total number of unavailable pods targeted by this deployment.\n          withUnavailableReplicas(unavailableReplicas):: self + {unavailableReplicas: unavailableReplicas},\n          // Total number of non-terminated pods targeted by this deployment that have the desired template spec.\n          withUpdatedReplicas(updatedReplicas):: self + {updatedReplicas: updatedReplicas},\n          mixin:: {\n          },\n        },\n        // DeploymentStrategy describes how to replace existing pods with new ones.\n        deploymentStrategy:: {\n          new():: {},\n          // Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.\n          withType(type):: self + {type: type},\n          mixin:: {\n            // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\n            rollingUpdate:: {\n              local __rollingUpdateMixin(rollingUpdate) = {rollingUpdate+: rollingUpdate},\n              mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n              // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\n              withMaxSurge(maxSurge):: __rollingUpdateMixin({maxSurge: maxSurge}),\n              // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n              withMaxUnavailable(maxUnavailable):: __rollingUpdateMixin({maxUnavailable: maxUnavailable}),\n            },\n            rollingUpdateType:: hidden.apps.v1beta1.rollingUpdateDeployment,\n          },\n        },\n        //\n        rollbackConfig:: {\n          new():: {},\n          // The revision to rollback to. If set to 0, rollback to the last revision.\n          withRevision(revision):: self + {revision: revision},\n          mixin:: {\n          },\n        },\n        // Spec to control the desired behavior of rolling update.\n        rollingUpdateDeployment:: {\n          new():: {},\n          // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\n          withMaxSurge(maxSurge):: {maxSurge: maxSurge},\n          // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n          withMaxUnavailable(maxUnavailable):: {maxUnavailable: maxUnavailable},\n          mixin:: {\n          },\n        },\n        // RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.\n        rollingUpdateStatefulSetStrategy:: {\n          new():: {},\n          // Partition indicates the ordinal at which the StatefulSet should be partitioned.\n          withPartition(partition):: self + {partition: partition},\n          mixin:: {\n          },\n        },\n        // ScaleSpec describes the attributes of a scale subresource\n        scaleSpec:: {\n          new():: {},\n          // desired number of instances for the scaled object.\n          withReplicas(replicas):: self + {replicas: replicas},\n          mixin:: {\n          },\n        },\n        // ScaleStatus represents the current status of a scale subresource.\n        scaleStatus:: {\n          new():: {},\n          // actual number of observed instances of the scaled object.\n          withReplicas(replicas):: self + {replicas: replicas},\n          // label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors\n          withSelector(selector):: self + {selector: selector},\n          // label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors\n          withSelectorMixin(selector):: self + {selector+: selector},\n          // label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n          withTargetSelector(targetSelector):: self + {targetSelector: targetSelector},\n          mixin:: {\n          },\n        },\n        // A StatefulSetSpec is the specification of a StatefulSet.\n        statefulSetSpec:: {\n          new():: {},\n          // podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.\n          withPodManagementPolicy(podManagementPolicy):: self + {podManagementPolicy: podManagementPolicy},\n          // replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.\n          withReplicas(replicas):: self + {replicas: replicas},\n          // revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.\n          withRevisionHistoryLimit(revisionHistoryLimit):: self + {revisionHistoryLimit: revisionHistoryLimit},\n          // serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.\n          withServiceName(serviceName):: self + {serviceName: serviceName},\n          // volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.\n          withVolumeClaimTemplates(volumeClaimTemplates):: self + if std.type(volumeClaimTemplates) == \"array\" then {volumeClaimTemplates: volumeClaimTemplates} else {volumeClaimTemplates: [volumeClaimTemplates]},\n          // volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.\n          withVolumeClaimTemplatesMixin(volumeClaimTemplates):: self + if std.type(volumeClaimTemplates) == \"array\" then {volumeClaimTemplates+: volumeClaimTemplates} else {volumeClaimTemplates+: [volumeClaimTemplates]},\n          volumeClaimTemplatesType:: hidden.core.v1.persistentVolumeClaim,\n          mixin:: {\n            // selector is a label query over pods that should match the replica count. If empty, defaulted to labels on the pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = {selector+: selector},\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.\n            template:: {\n              local __templateMixin(template) = {template+: template},\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n                // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n                withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                  pendingType:: hidden.meta.v1.initializer,\n                  // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                  result:: {\n                    local __resultMixin(result) = __initializersMixin({result+: result}),\n                    mixinInstance(result):: __resultMixin(result),\n                    // Suggested HTTP return code for this status, 0 if not set.\n                    withCode(code):: self + __resultMixin({code: code}),\n                    // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                    details:: {\n                      local __detailsMixin(details) = __resultMixin({details+: details}),\n                      mixinInstance(details):: __detailsMixin(details),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                      causesType:: hidden.meta.v1.statusCause,\n                      // The group attribute of the resource associated with the status StatusReason.\n                      withGroup(group):: self + __detailsMixin({group: group}),\n                      // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                      withName(name):: self + __detailsMixin({name: name}),\n                      // If specified, the time in seconds before the operation should be retried.\n                      withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                      // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                      withUid(uid):: self + __detailsMixin({uid: uid}),\n                    },\n                    detailsType:: hidden.meta.v1.statusDetails,\n                    // A human-readable description of the status of this operation.\n                    withMessage(message):: self + __resultMixin({message: message}),\n                    // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                    withReason(reason):: self + __resultMixin({reason: reason}),\n                  },\n                  resultType:: hidden.meta.v1.status,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({labels: labels}),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({name: name}),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({spec+: spec}),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({affinity+: affinity}),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}),\n                containersType:: hidden.core.v1.container,\n                // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({hostname: hostname}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}),\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}),\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n            // updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.\n            updateStrategy:: {\n              local __updateStrategyMixin(updateStrategy) = {updateStrategy+: updateStrategy},\n              mixinInstance(updateStrategy):: __updateStrategyMixin(updateStrategy),\n              // RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __updateStrategyMixin({rollingUpdate+: rollingUpdate}),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // Partition indicates the ordinal at which the StatefulSet should be partitioned.\n                withPartition(partition):: self + __rollingUpdateMixin({partition: partition}),\n              },\n              rollingUpdateType:: hidden.apps.v1beta1.rollingUpdateStatefulSetStrategy,\n              // Type indicates the type of the StatefulSetUpdateStrategy.\n              withType(type):: self + __updateStrategyMixin({type: type}),\n            },\n            updateStrategyType:: hidden.apps.v1beta1.statefulSetUpdateStrategy,\n          },\n        },\n        // StatefulSetStatus represents the current state of a StatefulSet.\n        statefulSetStatus:: {\n          new():: {},\n          // currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.\n          withCurrentReplicas(currentReplicas):: self + {currentReplicas: currentReplicas},\n          // currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).\n          withCurrentRevision(currentRevision):: self + {currentRevision: currentRevision},\n          // observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.\n          withObservedGeneration(observedGeneration):: self + {observedGeneration: observedGeneration},\n          // readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.\n          withReadyReplicas(readyReplicas):: self + {readyReplicas: readyReplicas},\n          // replicas is the number of Pods created by the StatefulSet controller.\n          withReplicas(replicas):: self + {replicas: replicas},\n          // updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)\n          withUpdateRevision(updateRevision):: self + {updateRevision: updateRevision},\n          // updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.\n          withUpdatedReplicas(updatedReplicas):: self + {updatedReplicas: updatedReplicas},\n          mixin:: {\n          },\n        },\n        // StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.\n        statefulSetUpdateStrategy:: {\n          new():: {},\n          // Type indicates the type of the StatefulSetUpdateStrategy.\n          withType(type):: self + {type: type},\n          mixin:: {\n            // RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.\n            rollingUpdate:: {\n              local __rollingUpdateMixin(rollingUpdate) = {rollingUpdate+: rollingUpdate},\n              mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n              // Partition indicates the ordinal at which the StatefulSet should be partitioned.\n              withPartition(partition):: self + __rollingUpdateMixin({partition: partition}),\n            },\n            rollingUpdateType:: hidden.apps.v1beta1.rollingUpdateStatefulSetStrategy,\n          },\n        },\n      },\n    },\n    authentication:: {\n      v1:: {\n        local apiVersion = {apiVersion: \"authentication/v1\"},\n        // TokenReviewSpec is a description of the token authentication request.\n        tokenReviewSpec:: {\n          new():: {},\n          // Token is the opaque bearer token.\n          withToken(token):: self + {token: token},\n          mixin:: {\n          },\n        },\n        // TokenReviewStatus is the result of the token authentication request.\n        tokenReviewStatus:: {\n          new():: {},\n          // Authenticated indicates that the token was associated with a known user.\n          withAuthenticated(authenticated):: self + {authenticated: authenticated},\n          mixin:: {\n            // User is the UserInfo associated with the provided token.\n            user:: {\n              local __userMixin(user) = {user+: user},\n              mixinInstance(user):: __userMixin(user),\n              // Any additional information provided by the authenticator.\n              withExtra(extra):: self + __userMixin({extra: extra}),\n              // Any additional information provided by the authenticator.\n              withExtraMixin(extra):: self + __userMixin({extra+: extra}),\n              // The names of groups this user is a part of.\n              withGroups(groups):: self + if std.type(groups) == \"array\" then __userMixin({groups: groups}) else __userMixin({groups: [groups]}),\n              // The names of groups this user is a part of.\n              withGroupsMixin(groups):: self + if std.type(groups) == \"array\" then __userMixin({groups+: groups}) else __userMixin({groups+: [groups]}),\n              // A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.\n              withUid(uid):: self + __userMixin({uid: uid}),\n              // The name that uniquely identifies this user among all active users.\n              withUsername(username):: self + __userMixin({username: username}),\n            },\n            userType:: hidden.authentication.v1.userInfo,\n          },\n        },\n        // UserInfo holds the information about the user needed to implement the user.Info interface.\n        userInfo:: {\n          new():: {},\n          // Any additional information provided by the authenticator.\n          withExtra(extra):: self + {extra: extra},\n          // Any additional information provided by the authenticator.\n          withExtraMixin(extra):: self + {extra+: extra},\n          // The names of groups this user is a part of.\n          withGroups(groups):: self + if std.type(groups) == \"array\" then {groups: groups} else {groups: [groups]},\n          // The names of groups this user is a part of.\n          withGroupsMixin(groups):: self + if std.type(groups) == \"array\" then {groups+: groups} else {groups+: [groups]},\n          // A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.\n          withUid(uid):: self + {uid: uid},\n          // The name that uniquely identifies this user among all active users.\n          withUsername(username):: self + {username: username},\n          mixin:: {\n          },\n        },\n      },\n      v1beta1:: {\n        local apiVersion = {apiVersion: \"authentication/v1beta1\"},\n        // TokenReviewSpec is a description of the token authentication request.\n        tokenReviewSpec:: {\n          new():: {},\n          // Token is the opaque bearer token.\n          withToken(token):: self + {token: token},\n          mixin:: {\n          },\n        },\n        // TokenReviewStatus is the result of the token authentication request.\n        tokenReviewStatus:: {\n          new():: {},\n          // Authenticated indicates that the token was associated with a known user.\n          withAuthenticated(authenticated):: self + {authenticated: authenticated},\n          mixin:: {\n            // User is the UserInfo associated with the provided token.\n            user:: {\n              local __userMixin(user) = {user+: user},\n              mixinInstance(user):: __userMixin(user),\n              // Any additional information provided by the authenticator.\n              withExtra(extra):: self + __userMixin({extra: extra}),\n              // Any additional information provided by the authenticator.\n              withExtraMixin(extra):: self + __userMixin({extra+: extra}),\n              // The names of groups this user is a part of.\n              withGroups(groups):: self + if std.type(groups) == \"array\" then __userMixin({groups: groups}) else __userMixin({groups: [groups]}),\n              // The names of groups this user is a part of.\n              withGroupsMixin(groups):: self + if std.type(groups) == \"array\" then __userMixin({groups+: groups}) else __userMixin({groups+: [groups]}),\n              // A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.\n              withUid(uid):: self + __userMixin({uid: uid}),\n              // The name that uniquely identifies this user among all active users.\n              withUsername(username):: self + __userMixin({username: username}),\n            },\n            userType:: hidden.authentication.v1beta1.userInfo,\n          },\n        },\n        // UserInfo holds the information about the user needed to implement the user.Info interface.\n        userInfo:: {\n          new():: {},\n          // Any additional information provided by the authenticator.\n          withExtra(extra):: self + {extra: extra},\n          // Any additional information provided by the authenticator.\n          withExtraMixin(extra):: self + {extra+: extra},\n          // The names of groups this user is a part of.\n          withGroups(groups):: self + if std.type(groups) == \"array\" then {groups: groups} else {groups: [groups]},\n          // The names of groups this user is a part of.\n          withGroupsMixin(groups):: self + if std.type(groups) == \"array\" then {groups+: groups} else {groups+: [groups]},\n          // A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.\n          withUid(uid):: self + {uid: uid},\n          // The name that uniquely identifies this user among all active users.\n          withUsername(username):: self + {username: username},\n          mixin:: {\n          },\n        },\n      },\n    },\n    authorization:: {\n      v1:: {\n        local apiVersion = {apiVersion: \"authorization/v1\"},\n        // NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface\n        nonResourceAttributes:: {\n          new():: {},\n          // Path is the URL path of the request\n          withPath(path):: self + {path: path},\n          // Verb is the standard HTTP verb\n          withVerb(verb):: self + {verb: verb},\n          mixin:: {\n          },\n        },\n        // ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface\n        resourceAttributes:: {\n          new():: {},\n          // Group is the API Group of the Resource.  \"*\" means all.\n          withGroup(group):: self + {group: group},\n          // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n          withName(name):: self + {name: name},\n          // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n          withNamespace(namespace):: self + {namespace: namespace},\n          // Resource is one of the existing resource types.  \"*\" means all.\n          withResource(resource):: self + {resource: resource},\n          // Subresource is one of the existing resource types.  \"\" means none.\n          withSubresource(subresource):: self + {subresource: subresource},\n          // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n          withVerb(verb):: self + {verb: verb},\n          // Version is the API Version of the Resource.  \"*\" means all.\n          withVersion(version):: self + {version: version},\n          mixin:: {\n          },\n        },\n        // SelfSubjectAccessReviewSpec is a description of the access request.  Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set\n        selfSubjectAccessReviewSpec:: {\n          new():: {},\n          mixin:: {\n            // NonResourceAttributes describes information for a non-resource access request\n            nonResourceAttributes:: {\n              local __nonResourceAttributesMixin(nonResourceAttributes) = {nonResourceAttributes+: nonResourceAttributes},\n              mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes),\n              // Path is the URL path of the request\n              withPath(path):: self + __nonResourceAttributesMixin({path: path}),\n              // Verb is the standard HTTP verb\n              withVerb(verb):: self + __nonResourceAttributesMixin({verb: verb}),\n            },\n            nonResourceAttributesType:: hidden.authorization.v1.nonResourceAttributes,\n            // ResourceAuthorizationAttributes describes information for a resource access request\n            resourceAttributes:: {\n              local __resourceAttributesMixin(resourceAttributes) = {resourceAttributes+: resourceAttributes},\n              mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes),\n              // Group is the API Group of the Resource.  \"*\" means all.\n              withGroup(group):: self + __resourceAttributesMixin({group: group}),\n              // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n              withName(name):: self + __resourceAttributesMixin({name: name}),\n              // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n              withNamespace(namespace):: self + __resourceAttributesMixin({namespace: namespace}),\n              // Resource is one of the existing resource types.  \"*\" means all.\n              withResource(resource):: self + __resourceAttributesMixin({resource: resource}),\n              // Subresource is one of the existing resource types.  \"\" means none.\n              withSubresource(subresource):: self + __resourceAttributesMixin({subresource: subresource}),\n              // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n              withVerb(verb):: self + __resourceAttributesMixin({verb: verb}),\n              // Version is the API Version of the Resource.  \"*\" means all.\n              withVersion(version):: self + __resourceAttributesMixin({version: version}),\n            },\n            resourceAttributesType:: hidden.authorization.v1.resourceAttributes,\n          },\n        },\n        // SubjectAccessReviewSpec is a description of the access request.  Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set\n        subjectAccessReviewSpec:: {\n          new():: {},\n          // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n          withExtra(extra):: self + {extra: extra},\n          // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n          withExtraMixin(extra):: self + {extra+: extra},\n          // Groups is the groups you're testing for.\n          withGroups(groups):: self + if std.type(groups) == \"array\" then {groups: groups} else {groups: [groups]},\n          // Groups is the groups you're testing for.\n          withGroupsMixin(groups):: self + if std.type(groups) == \"array\" then {groups+: groups} else {groups+: [groups]},\n          // User is the user you're testing for. If you specify \"User\" but not \"Groups\", then is it interpreted as \"What if User were not a member of any groups\n          withUser(user):: self + {user: user},\n          mixin:: {\n            // NonResourceAttributes describes information for a non-resource access request\n            nonResourceAttributes:: {\n              local __nonResourceAttributesMixin(nonResourceAttributes) = {nonResourceAttributes+: nonResourceAttributes},\n              mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes),\n              // Path is the URL path of the request\n              withPath(path):: self + __nonResourceAttributesMixin({path: path}),\n              // Verb is the standard HTTP verb\n              withVerb(verb):: self + __nonResourceAttributesMixin({verb: verb}),\n            },\n            nonResourceAttributesType:: hidden.authorization.v1.nonResourceAttributes,\n            // ResourceAuthorizationAttributes describes information for a resource access request\n            resourceAttributes:: {\n              local __resourceAttributesMixin(resourceAttributes) = {resourceAttributes+: resourceAttributes},\n              mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes),\n              // Group is the API Group of the Resource.  \"*\" means all.\n              withGroup(group):: self + __resourceAttributesMixin({group: group}),\n              // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n              withName(name):: self + __resourceAttributesMixin({name: name}),\n              // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n              withNamespace(namespace):: self + __resourceAttributesMixin({namespace: namespace}),\n              // Resource is one of the existing resource types.  \"*\" means all.\n              withResource(resource):: self + __resourceAttributesMixin({resource: resource}),\n              // Subresource is one of the existing resource types.  \"\" means none.\n              withSubresource(subresource):: self + __resourceAttributesMixin({subresource: subresource}),\n              // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n              withVerb(verb):: self + __resourceAttributesMixin({verb: verb}),\n              // Version is the API Version of the Resource.  \"*\" means all.\n              withVersion(version):: self + __resourceAttributesMixin({version: version}),\n            },\n            resourceAttributesType:: hidden.authorization.v1.resourceAttributes,\n          },\n        },\n        // SubjectAccessReviewStatus\n        subjectAccessReviewStatus:: {\n          new():: {},\n          // Allowed is required.  True if the action would be allowed, false otherwise.\n          withAllowed(allowed):: self + {allowed: allowed},\n          // EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.\n          withEvaluationError(evaluationError):: self + {evaluationError: evaluationError},\n          // Reason is optional.  It indicates why a request was allowed or denied.\n          withReason(reason):: self + {reason: reason},\n          mixin:: {\n          },\n        },\n      },\n      v1beta1:: {\n        local apiVersion = {apiVersion: \"authorization/v1beta1\"},\n        // NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface\n        nonResourceAttributes:: {\n          new():: {},\n          // Path is the URL path of the request\n          withPath(path):: self + {path: path},\n          // Verb is the standard HTTP verb\n          withVerb(verb):: self + {verb: verb},\n          mixin:: {\n          },\n        },\n        // ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface\n        resourceAttributes:: {\n          new():: {},\n          // Group is the API Group of the Resource.  \"*\" means all.\n          withGroup(group):: self + {group: group},\n          // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n          withName(name):: self + {name: name},\n          // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n          withNamespace(namespace):: self + {namespace: namespace},\n          // Resource is one of the existing resource types.  \"*\" means all.\n          withResource(resource):: self + {resource: resource},\n          // Subresource is one of the existing resource types.  \"\" means none.\n          withSubresource(subresource):: self + {subresource: subresource},\n          // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n          withVerb(verb):: self + {verb: verb},\n          // Version is the API Version of the Resource.  \"*\" means all.\n          withVersion(version):: self + {version: version},\n          mixin:: {\n          },\n        },\n        // SelfSubjectAccessReviewSpec is a description of the access request.  Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set\n        selfSubjectAccessReviewSpec:: {\n          new():: {},\n          mixin:: {\n            // NonResourceAttributes describes information for a non-resource access request\n            nonResourceAttributes:: {\n              local __nonResourceAttributesMixin(nonResourceAttributes) = {nonResourceAttributes+: nonResourceAttributes},\n              mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes),\n              // Path is the URL path of the request\n              withPath(path):: self + __nonResourceAttributesMixin({path: path}),\n              // Verb is the standard HTTP verb\n              withVerb(verb):: self + __nonResourceAttributesMixin({verb: verb}),\n            },\n            nonResourceAttributesType:: hidden.authorization.v1beta1.nonResourceAttributes,\n            // ResourceAuthorizationAttributes describes information for a resource access request\n            resourceAttributes:: {\n              local __resourceAttributesMixin(resourceAttributes) = {resourceAttributes+: resourceAttributes},\n              mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes),\n              // Group is the API Group of the Resource.  \"*\" means all.\n              withGroup(group):: self + __resourceAttributesMixin({group: group}),\n              // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n              withName(name):: self + __resourceAttributesMixin({name: name}),\n              // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n              withNamespace(namespace):: self + __resourceAttributesMixin({namespace: namespace}),\n              // Resource is one of the existing resource types.  \"*\" means all.\n              withResource(resource):: self + __resourceAttributesMixin({resource: resource}),\n              // Subresource is one of the existing resource types.  \"\" means none.\n              withSubresource(subresource):: self + __resourceAttributesMixin({subresource: subresource}),\n              // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n              withVerb(verb):: self + __resourceAttributesMixin({verb: verb}),\n              // Version is the API Version of the Resource.  \"*\" means all.\n              withVersion(version):: self + __resourceAttributesMixin({version: version}),\n            },\n            resourceAttributesType:: hidden.authorization.v1beta1.resourceAttributes,\n          },\n        },\n        // SubjectAccessReviewSpec is a description of the access request.  Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set\n        subjectAccessReviewSpec:: {\n          new():: {},\n          // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n          withExtra(extra):: self + {extra: extra},\n          // Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\n          withExtraMixin(extra):: self + {extra+: extra},\n          // Groups is the groups you're testing for.\n          withGroup(group):: self + if std.type(group) == \"array\" then {group: group} else {group: [group]},\n          // Groups is the groups you're testing for.\n          withGroupMixin(group):: self + if std.type(group) == \"array\" then {group+: group} else {group+: [group]},\n          // User is the user you're testing for. If you specify \"User\" but not \"Group\", then is it interpreted as \"What if User were not a member of any groups\n          withUser(user):: self + {user: user},\n          mixin:: {\n            // NonResourceAttributes describes information for a non-resource access request\n            nonResourceAttributes:: {\n              local __nonResourceAttributesMixin(nonResourceAttributes) = {nonResourceAttributes+: nonResourceAttributes},\n              mixinInstance(nonResourceAttributes):: __nonResourceAttributesMixin(nonResourceAttributes),\n              // Path is the URL path of the request\n              withPath(path):: self + __nonResourceAttributesMixin({path: path}),\n              // Verb is the standard HTTP verb\n              withVerb(verb):: self + __nonResourceAttributesMixin({verb: verb}),\n            },\n            nonResourceAttributesType:: hidden.authorization.v1beta1.nonResourceAttributes,\n            // ResourceAuthorizationAttributes describes information for a resource access request\n            resourceAttributes:: {\n              local __resourceAttributesMixin(resourceAttributes) = {resourceAttributes+: resourceAttributes},\n              mixinInstance(resourceAttributes):: __resourceAttributesMixin(resourceAttributes),\n              // Group is the API Group of the Resource.  \"*\" means all.\n              withGroup(group):: self + __resourceAttributesMixin({group: group}),\n              // Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.\n              withName(name):: self + __resourceAttributesMixin({name: name}),\n              // Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\n              withNamespace(namespace):: self + __resourceAttributesMixin({namespace: namespace}),\n              // Resource is one of the existing resource types.  \"*\" means all.\n              withResource(resource):: self + __resourceAttributesMixin({resource: resource}),\n              // Subresource is one of the existing resource types.  \"\" means none.\n              withSubresource(subresource):: self + __resourceAttributesMixin({subresource: subresource}),\n              // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \"*\" means all.\n              withVerb(verb):: self + __resourceAttributesMixin({verb: verb}),\n              // Version is the API Version of the Resource.  \"*\" means all.\n              withVersion(version):: self + __resourceAttributesMixin({version: version}),\n            },\n            resourceAttributesType:: hidden.authorization.v1beta1.resourceAttributes,\n          },\n        },\n        // SubjectAccessReviewStatus\n        subjectAccessReviewStatus:: {\n          new():: {},\n          // Allowed is required.  True if the action would be allowed, false otherwise.\n          withAllowed(allowed):: self + {allowed: allowed},\n          // EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.\n          withEvaluationError(evaluationError):: self + {evaluationError: evaluationError},\n          // Reason is optional.  It indicates why a request was allowed or denied.\n          withReason(reason):: self + {reason: reason},\n          mixin:: {\n          },\n        },\n      },\n    },\n    autoscaling:: {\n      v1:: {\n        local apiVersion = {apiVersion: \"autoscaling/v1\"},\n        // CrossVersionObjectReference contains enough information to let you identify the referred resource.\n        crossVersionObjectReference:: {\n          new():: {},\n          // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\n          withName(name):: self + {name: name},\n          mixin:: {\n          },\n        },\n        // specification of a horizontal pod autoscaler.\n        horizontalPodAutoscalerSpec:: {\n          new():: {},\n          // upper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas.\n          withMaxReplicas(maxReplicas):: self + {maxReplicas: maxReplicas},\n          // lower limit for the number of pods that can be set by the autoscaler, default 1.\n          withMinReplicas(minReplicas):: self + {minReplicas: minReplicas},\n          // target average CPU utilization (represented as a percentage of requested CPU) over all the pods; if not specified the default autoscaling policy will be used.\n          withTargetCpuUtilizationPercentage(targetCpuUtilizationPercentage):: self + {targetCPUUtilizationPercentage: targetCpuUtilizationPercentage},\n          mixin:: {\n            // reference to scaled resource; horizontal pod autoscaler will learn the current resource consumption and will set the desired number of pods by using its Scale subresource.\n            scaleTargetRef:: {\n              local __scaleTargetRefMixin(scaleTargetRef) = {scaleTargetRef+: scaleTargetRef},\n              mixinInstance(scaleTargetRef):: __scaleTargetRefMixin(scaleTargetRef),\n              // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\n              withName(name):: self + __scaleTargetRefMixin({name: name}),\n            },\n            scaleTargetRefType:: hidden.autoscaling.v1.crossVersionObjectReference,\n          },\n        },\n        // current status of a horizontal pod autoscaler\n        horizontalPodAutoscalerStatus:: {\n          new():: {},\n          // current average CPU utilization over all pods, represented as a percentage of requested CPU, e.g. 70 means that an average pod is using now 70% of its requested CPU.\n          withCurrentCpuUtilizationPercentage(currentCpuUtilizationPercentage):: self + {currentCPUUtilizationPercentage: currentCpuUtilizationPercentage},\n          // current number of replicas of pods managed by this autoscaler.\n          withCurrentReplicas(currentReplicas):: self + {currentReplicas: currentReplicas},\n          // desired number of replicas of pods managed by this autoscaler.\n          withDesiredReplicas(desiredReplicas):: self + {desiredReplicas: desiredReplicas},\n          // most recent generation observed by this autoscaler.\n          withObservedGeneration(observedGeneration):: self + {observedGeneration: observedGeneration},\n          mixin:: {\n            // last time the HorizontalPodAutoscaler scaled the number of pods; used by the autoscaler to control how often the number of pods is changed.\n            lastScaleTime:: {\n              local __lastScaleTimeMixin(lastScaleTime) = {lastScaleTime+: lastScaleTime},\n              mixinInstance(lastScaleTime):: __lastScaleTimeMixin(lastScaleTime),\n            },\n            lastScaleTimeType:: hidden.meta.v1.time,\n          },\n        },\n        // ScaleSpec describes the attributes of a scale subresource.\n        scaleSpec:: {\n          new():: {},\n          // desired number of instances for the scaled object.\n          withReplicas(replicas):: self + {replicas: replicas},\n          mixin:: {\n          },\n        },\n        // ScaleStatus represents the current status of a scale subresource.\n        scaleStatus:: {\n          new():: {},\n          // actual number of observed instances of the scaled object.\n          withReplicas(replicas):: self + {replicas: replicas},\n          // label query over pods that should match the replicas count. This is same as the label selector but in the string format to avoid introspection by clients. The string will be in the same format as the query-param syntax. More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors\n          withSelector(selector):: self + {selector: selector},\n          mixin:: {\n          },\n        },\n      },\n      v2alpha1:: {\n        local apiVersion = {apiVersion: \"autoscaling/v2alpha1\"},\n        // CrossVersionObjectReference contains enough information to let you identify the referred resource.\n        crossVersionObjectReference:: {\n          new():: {},\n          // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\n          withName(name):: self + {name: name},\n          mixin:: {\n          },\n        },\n        // HorizontalPodAutoscalerCondition describes the state of a HorizontalPodAutoscaler at a certain point.\n        horizontalPodAutoscalerCondition:: {\n          new():: {},\n          // message is a human-readable explanation containing details about the transition\n          withMessage(message):: self + {message: message},\n          // reason is the reason for the condition's last transition.\n          withReason(reason):: self + {reason: reason},\n          // status is the status of the condition (True, False, Unknown)\n          withStatus(status):: self + {status: status},\n          // type describes the current condition\n          withType(type):: self + {type: type},\n          mixin:: {\n            // lastTransitionTime is the last time the condition transitioned from one status to another\n            lastTransitionTime:: {\n              local __lastTransitionTimeMixin(lastTransitionTime) = {lastTransitionTime+: lastTransitionTime},\n              mixinInstance(lastTransitionTime):: __lastTransitionTimeMixin(lastTransitionTime),\n            },\n            lastTransitionTimeType:: hidden.meta.v1.time,\n          },\n        },\n        // HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler.\n        horizontalPodAutoscalerSpec:: {\n          new():: {},\n          // maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas.\n          withMaxReplicas(maxReplicas):: self + {maxReplicas: maxReplicas},\n          // metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used).  The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods.  Ergo, metrics used must decrease as the pod count is increased, and vice-versa.  See the individual metric source types for more information about how each type of metric must respond.\n          withMetrics(metrics):: self + if std.type(metrics) == \"array\" then {metrics: metrics} else {metrics: [metrics]},\n          // metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used).  The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods.  Ergo, metrics used must decrease as the pod count is increased, and vice-versa.  See the individual metric source types for more information about how each type of metric must respond.\n          withMetricsMixin(metrics):: self + if std.type(metrics) == \"array\" then {metrics+: metrics} else {metrics+: [metrics]},\n          metricsType:: hidden.autoscaling.v2alpha1.metricSpec,\n          // minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod.\n          withMinReplicas(minReplicas):: self + {minReplicas: minReplicas},\n          mixin:: {\n            // scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count.\n            scaleTargetRef:: {\n              local __scaleTargetRefMixin(scaleTargetRef) = {scaleTargetRef+: scaleTargetRef},\n              mixinInstance(scaleTargetRef):: __scaleTargetRefMixin(scaleTargetRef),\n              // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\n              withName(name):: self + __scaleTargetRefMixin({name: name}),\n            },\n            scaleTargetRefType:: hidden.autoscaling.v2alpha1.crossVersionObjectReference,\n          },\n        },\n        // HorizontalPodAutoscalerStatus describes the current status of a horizontal pod autoscaler.\n        horizontalPodAutoscalerStatus:: {\n          new():: {},\n          // conditions is the set of conditions required for this autoscaler to scale its target, and indicates whether or not those conditions are met.\n          withConditions(conditions):: self + if std.type(conditions) == \"array\" then {conditions: conditions} else {conditions: [conditions]},\n          // conditions is the set of conditions required for this autoscaler to scale its target, and indicates whether or not those conditions are met.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == \"array\" then {conditions+: conditions} else {conditions+: [conditions]},\n          conditionsType:: hidden.autoscaling.v2alpha1.horizontalPodAutoscalerCondition,\n          // currentMetrics is the last read state of the metrics used by this autoscaler.\n          withCurrentMetrics(currentMetrics):: self + if std.type(currentMetrics) == \"array\" then {currentMetrics: currentMetrics} else {currentMetrics: [currentMetrics]},\n          // currentMetrics is the last read state of the metrics used by this autoscaler.\n          withCurrentMetricsMixin(currentMetrics):: self + if std.type(currentMetrics) == \"array\" then {currentMetrics+: currentMetrics} else {currentMetrics+: [currentMetrics]},\n          currentMetricsType:: hidden.autoscaling.v2alpha1.metricStatus,\n          // currentReplicas is current number of replicas of pods managed by this autoscaler, as last seen by the autoscaler.\n          withCurrentReplicas(currentReplicas):: self + {currentReplicas: currentReplicas},\n          // desiredReplicas is the desired number of replicas of pods managed by this autoscaler, as last calculated by the autoscaler.\n          withDesiredReplicas(desiredReplicas):: self + {desiredReplicas: desiredReplicas},\n          // observedGeneration is the most recent generation observed by this autoscaler.\n          withObservedGeneration(observedGeneration):: self + {observedGeneration: observedGeneration},\n          mixin:: {\n            // lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods, used by the autoscaler to control how often the number of pods is changed.\n            lastScaleTime:: {\n              local __lastScaleTimeMixin(lastScaleTime) = {lastScaleTime+: lastScaleTime},\n              mixinInstance(lastScaleTime):: __lastScaleTimeMixin(lastScaleTime),\n            },\n            lastScaleTimeType:: hidden.meta.v1.time,\n          },\n        },\n        // MetricSpec specifies how to scale based on a single metric (only `type` and one other matching field should be set at once).\n        metricSpec:: {\n          new():: {},\n          // type is the type of metric source.  It should match one of the fields below.\n          withType(type):: self + {type: type},\n          mixin:: {\n            // object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).\n            object:: {\n              local __objectMixin(object) = {object+: object},\n              mixinInstance(object):: __objectMixin(object),\n              // metricName is the name of the metric in question.\n              withMetricName(metricName):: self + __objectMixin({metricName: metricName}),\n              // target is the described Kubernetes object.\n              target:: {\n                local __targetMixin(target) = __objectMixin({target+: target}),\n                mixinInstance(target):: __targetMixin(target),\n                // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __targetMixin({name: name}),\n              },\n              targetType:: hidden.autoscaling.v2alpha1.crossVersionObjectReference,\n              // targetValue is the target value of the metric (as a quantity).\n              targetValue:: {\n                local __targetValueMixin(targetValue) = __objectMixin({targetValue+: targetValue}),\n                mixinInstance(targetValue):: __targetValueMixin(targetValue),\n              },\n              targetValueType:: hidden.core.resource.quantity,\n            },\n            objectType:: hidden.autoscaling.v2alpha1.objectMetricSource,\n            // pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second).  The values will be averaged together before being compared to the target value.\n            pods:: {\n              local __podsMixin(pods) = {pods+: pods},\n              mixinInstance(pods):: __podsMixin(pods),\n              // metricName is the name of the metric in question\n              withMetricName(metricName):: self + __podsMixin({metricName: metricName}),\n              // targetAverageValue is the target value of the average of the metric across all relevant pods (as a quantity)\n              targetAverageValue:: {\n                local __targetAverageValueMixin(targetAverageValue) = __podsMixin({targetAverageValue+: targetAverageValue}),\n                mixinInstance(targetAverageValue):: __targetAverageValueMixin(targetAverageValue),\n              },\n              targetAverageValueType:: hidden.core.resource.quantity,\n            },\n            podsType:: hidden.autoscaling.v2alpha1.podsMetricSource,\n            // resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.\n            resource:: {\n              local __resourceMixin(resource) = {resource+: resource},\n              mixinInstance(resource):: __resourceMixin(resource),\n              // name is the name of the resource in question.\n              withName(name):: self + __resourceMixin({name: name}),\n              // targetAverageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.\n              withTargetAverageUtilization(targetAverageUtilization):: self + __resourceMixin({targetAverageUtilization: targetAverageUtilization}),\n              // targetAverageValue is the target value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type.\n              targetAverageValue:: {\n                local __targetAverageValueMixin(targetAverageValue) = __resourceMixin({targetAverageValue+: targetAverageValue}),\n                mixinInstance(targetAverageValue):: __targetAverageValueMixin(targetAverageValue),\n              },\n              targetAverageValueType:: hidden.core.resource.quantity,\n            },\n            resourceType:: hidden.autoscaling.v2alpha1.resourceMetricSource,\n          },\n        },\n        // MetricStatus describes the last-read state of a single metric.\n        metricStatus:: {\n          new():: {},\n          // type is the type of metric source.  It will match one of the fields below.\n          withType(type):: self + {type: type},\n          mixin:: {\n            // object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).\n            object:: {\n              local __objectMixin(object) = {object+: object},\n              mixinInstance(object):: __objectMixin(object),\n              // currentValue is the current value of the metric (as a quantity).\n              currentValue:: {\n                local __currentValueMixin(currentValue) = __objectMixin({currentValue+: currentValue}),\n                mixinInstance(currentValue):: __currentValueMixin(currentValue),\n              },\n              currentValueType:: hidden.core.resource.quantity,\n              // metricName is the name of the metric in question.\n              withMetricName(metricName):: self + __objectMixin({metricName: metricName}),\n              // target is the described Kubernetes object.\n              target:: {\n                local __targetMixin(target) = __objectMixin({target+: target}),\n                mixinInstance(target):: __targetMixin(target),\n                // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __targetMixin({name: name}),\n              },\n              targetType:: hidden.autoscaling.v2alpha1.crossVersionObjectReference,\n            },\n            objectType:: hidden.autoscaling.v2alpha1.objectMetricStatus,\n            // pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second).  The values will be averaged together before being compared to the target value.\n            pods:: {\n              local __podsMixin(pods) = {pods+: pods},\n              mixinInstance(pods):: __podsMixin(pods),\n              // currentAverageValue is the current value of the average of the metric across all relevant pods (as a quantity)\n              currentAverageValue:: {\n                local __currentAverageValueMixin(currentAverageValue) = __podsMixin({currentAverageValue+: currentAverageValue}),\n                mixinInstance(currentAverageValue):: __currentAverageValueMixin(currentAverageValue),\n              },\n              currentAverageValueType:: hidden.core.resource.quantity,\n              // metricName is the name of the metric in question\n              withMetricName(metricName):: self + __podsMixin({metricName: metricName}),\n            },\n            podsType:: hidden.autoscaling.v2alpha1.podsMetricStatus,\n            // resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.\n            resource:: {\n              local __resourceMixin(resource) = {resource+: resource},\n              mixinInstance(resource):: __resourceMixin(resource),\n              // currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.  It will only be present if `targetAverageValue` was set in the corresponding metric specification.\n              withCurrentAverageUtilization(currentAverageUtilization):: self + __resourceMixin({currentAverageUtilization: currentAverageUtilization}),\n              // currentAverageValue is the current value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type. It will always be set, regardless of the corresponding metric specification.\n              currentAverageValue:: {\n                local __currentAverageValueMixin(currentAverageValue) = __resourceMixin({currentAverageValue+: currentAverageValue}),\n                mixinInstance(currentAverageValue):: __currentAverageValueMixin(currentAverageValue),\n              },\n              currentAverageValueType:: hidden.core.resource.quantity,\n              // name is the name of the resource in question.\n              withName(name):: self + __resourceMixin({name: name}),\n            },\n            resourceType:: hidden.autoscaling.v2alpha1.resourceMetricStatus,\n          },\n        },\n        // ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).\n        objectMetricSource:: {\n          new():: {},\n          // metricName is the name of the metric in question.\n          withMetricName(metricName):: self + {metricName: metricName},\n          mixin:: {\n            // target is the described Kubernetes object.\n            target:: {\n              local __targetMixin(target) = {target+: target},\n              mixinInstance(target):: __targetMixin(target),\n              // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\n              withName(name):: self + __targetMixin({name: name}),\n            },\n            targetType:: hidden.autoscaling.v2alpha1.crossVersionObjectReference,\n            // targetValue is the target value of the metric (as a quantity).\n            targetValue:: {\n              local __targetValueMixin(targetValue) = {targetValue+: targetValue},\n              mixinInstance(targetValue):: __targetValueMixin(targetValue),\n            },\n            targetValueType:: hidden.core.resource.quantity,\n          },\n        },\n        // ObjectMetricStatus indicates the current value of a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).\n        objectMetricStatus:: {\n          new():: {},\n          // metricName is the name of the metric in question.\n          withMetricName(metricName):: self + {metricName: metricName},\n          mixin:: {\n            // currentValue is the current value of the metric (as a quantity).\n            currentValue:: {\n              local __currentValueMixin(currentValue) = {currentValue+: currentValue},\n              mixinInstance(currentValue):: __currentValueMixin(currentValue),\n            },\n            currentValueType:: hidden.core.resource.quantity,\n            // target is the described Kubernetes object.\n            target:: {\n              local __targetMixin(target) = {target+: target},\n              mixinInstance(target):: __targetMixin(target),\n              // Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\n              withName(name):: self + __targetMixin({name: name}),\n            },\n            targetType:: hidden.autoscaling.v2alpha1.crossVersionObjectReference,\n          },\n        },\n        // PodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.\n        podsMetricSource:: {\n          new():: {},\n          // metricName is the name of the metric in question\n          withMetricName(metricName):: self + {metricName: metricName},\n          mixin:: {\n            // targetAverageValue is the target value of the average of the metric across all relevant pods (as a quantity)\n            targetAverageValue:: {\n              local __targetAverageValueMixin(targetAverageValue) = {targetAverageValue+: targetAverageValue},\n              mixinInstance(targetAverageValue):: __targetAverageValueMixin(targetAverageValue),\n            },\n            targetAverageValueType:: hidden.core.resource.quantity,\n          },\n        },\n        // PodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second).\n        podsMetricStatus:: {\n          new():: {},\n          // metricName is the name of the metric in question\n          withMetricName(metricName):: self + {metricName: metricName},\n          mixin:: {\n            // currentAverageValue is the current value of the average of the metric across all relevant pods (as a quantity)\n            currentAverageValue:: {\n              local __currentAverageValueMixin(currentAverageValue) = {currentAverageValue+: currentAverageValue},\n              mixinInstance(currentAverageValue):: __currentAverageValueMixin(currentAverageValue),\n            },\n            currentAverageValueType:: hidden.core.resource.quantity,\n          },\n        },\n        // ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory).  The values will be averaged together before being compared to the target.  Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.  Only one \"target\" type should be set.\n        resourceMetricSource:: {\n          new():: {},\n          // name is the name of the resource in question.\n          withName(name):: self + {name: name},\n          // targetAverageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.\n          withTargetAverageUtilization(targetAverageUtilization):: self + {targetAverageUtilization: targetAverageUtilization},\n          mixin:: {\n            // targetAverageValue is the target value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type.\n            targetAverageValue:: {\n              local __targetAverageValueMixin(targetAverageValue) = {targetAverageValue+: targetAverageValue},\n              mixinInstance(targetAverageValue):: __targetAverageValueMixin(targetAverageValue),\n            },\n            targetAverageValueType:: hidden.core.resource.quantity,\n          },\n        },\n        // ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory).  Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.\n        resourceMetricStatus:: {\n          new():: {},\n          // currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.  It will only be present if `targetAverageValue` was set in the corresponding metric specification.\n          withCurrentAverageUtilization(currentAverageUtilization):: self + {currentAverageUtilization: currentAverageUtilization},\n          // name is the name of the resource in question.\n          withName(name):: self + {name: name},\n          mixin:: {\n            // currentAverageValue is the current value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type. It will always be set, regardless of the corresponding metric specification.\n            currentAverageValue:: {\n              local __currentAverageValueMixin(currentAverageValue) = {currentAverageValue+: currentAverageValue},\n              mixinInstance(currentAverageValue):: __currentAverageValueMixin(currentAverageValue),\n            },\n            currentAverageValueType:: hidden.core.resource.quantity,\n          },\n        },\n      },\n    },\n    batch:: {\n      v1:: {\n        local apiVersion = {apiVersion: \"batch/v1\"},\n        // JobCondition describes current state of a job.\n        jobCondition:: {\n          new():: {},\n          // Human readable message indicating details about last transition.\n          withMessage(message):: self + {message: message},\n          // (brief) reason for the condition's last transition.\n          withReason(reason):: self + {reason: reason},\n          // Type of job condition, Complete or Failed.\n          withType(type):: self + {type: type},\n          mixin:: {\n            // Last time the condition was checked.\n            lastProbeTime:: {\n              local __lastProbeTimeMixin(lastProbeTime) = {lastProbeTime+: lastProbeTime},\n              mixinInstance(lastProbeTime):: __lastProbeTimeMixin(lastProbeTime),\n            },\n            lastProbeTimeType:: hidden.meta.v1.time,\n            // Last time the condition transit from one status to another.\n            lastTransitionTime:: {\n              local __lastTransitionTimeMixin(lastTransitionTime) = {lastTransitionTime+: lastTransitionTime},\n              mixinInstance(lastTransitionTime):: __lastTransitionTimeMixin(lastTransitionTime),\n            },\n            lastTransitionTimeType:: hidden.meta.v1.time,\n          },\n        },\n        // JobSpec describes how the job execution will look like.\n        jobSpec:: {\n          new():: {},\n          // Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer\n          withActiveDeadlineSeconds(activeDeadlineSeconds):: self + {activeDeadlineSeconds: activeDeadlineSeconds},\n          // Specifies the desired number of successfully finished pods the job should be run with.  Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value.  Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n          withCompletions(completions):: self + {completions: completions},\n          // manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template.  When true, the user is responsible for picking unique labels and specifying the selector.  Failure to pick a unique label may cause this and other jobs to not function correctly.  However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://git.k8s.io/community/contributors/design-proposals/selector-generation.md\n          withManualSelector(manualSelector):: self + {manualSelector: manualSelector},\n          // Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n          withParallelism(parallelism):: self + {parallelism: parallelism},\n          mixin:: {\n            // A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = {selector+: selector},\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n            template:: {\n              local __templateMixin(template) = {template+: template},\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n                // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n                withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                  pendingType:: hidden.meta.v1.initializer,\n                  // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                  result:: {\n                    local __resultMixin(result) = __initializersMixin({result+: result}),\n                    mixinInstance(result):: __resultMixin(result),\n                    // Suggested HTTP return code for this status, 0 if not set.\n                    withCode(code):: self + __resultMixin({code: code}),\n                    // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                    details:: {\n                      local __detailsMixin(details) = __resultMixin({details+: details}),\n                      mixinInstance(details):: __detailsMixin(details),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                      causesType:: hidden.meta.v1.statusCause,\n                      // The group attribute of the resource associated with the status StatusReason.\n                      withGroup(group):: self + __detailsMixin({group: group}),\n                      // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                      withName(name):: self + __detailsMixin({name: name}),\n                      // If specified, the time in seconds before the operation should be retried.\n                      withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                      // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                      withUid(uid):: self + __detailsMixin({uid: uid}),\n                    },\n                    detailsType:: hidden.meta.v1.statusDetails,\n                    // A human-readable description of the status of this operation.\n                    withMessage(message):: self + __resultMixin({message: message}),\n                    // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                    withReason(reason):: self + __resultMixin({reason: reason}),\n                  },\n                  resultType:: hidden.meta.v1.status,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({labels: labels}),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({name: name}),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({spec+: spec}),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({affinity+: affinity}),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}),\n                containersType:: hidden.core.v1.container,\n                // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({hostname: hostname}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}),\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}),\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n        },\n        // JobStatus represents the current state of a Job.\n        jobStatus:: {\n          new():: {},\n          // The number of actively running pods.\n          withActive(active):: self + {active: active},\n          // The latest available observations of an object's current state. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n          withConditions(conditions):: self + if std.type(conditions) == \"array\" then {conditions: conditions} else {conditions: [conditions]},\n          // The latest available observations of an object's current state. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n          withConditionsMixin(conditions):: self + if std.type(conditions) == \"array\" then {conditions+: conditions} else {conditions+: [conditions]},\n          conditionsType:: hidden.batch.v1.jobCondition,\n          // The number of pods which reached phase Failed.\n          withFailed(failed):: self + {failed: failed},\n          // The number of pods which reached phase Succeeded.\n          withSucceeded(succeeded):: self + {succeeded: succeeded},\n          mixin:: {\n            // Represents time when the job was completed. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.\n            completionTime:: {\n              local __completionTimeMixin(completionTime) = {completionTime+: completionTime},\n              mixinInstance(completionTime):: __completionTimeMixin(completionTime),\n            },\n            completionTimeType:: hidden.meta.v1.time,\n            // Represents time when the job was acknowledged by the job controller. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.\n            startTime:: {\n              local __startTimeMixin(startTime) = {startTime+: startTime},\n              mixinInstance(startTime):: __startTimeMixin(startTime),\n            },\n            startTimeType:: hidden.meta.v1.time,\n          },\n        },\n      },\n      v2alpha1:: {\n        local apiVersion = {apiVersion: \"batch/v2alpha1\"},\n        // CronJobSpec describes how the job execution will look like and when it will actually run.\n        cronJobSpec:: {\n          new():: {},\n          // Specifies how to treat concurrent executions of a Job. Defaults to Allow.\n          withConcurrencyPolicy(concurrencyPolicy):: self + {concurrencyPolicy: concurrencyPolicy},\n          // The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.\n          withFailedJobsHistoryLimit(failedJobsHistoryLimit):: self + {failedJobsHistoryLimit: failedJobsHistoryLimit},\n          // The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.\n          withSchedule(schedule):: self + {schedule: schedule},\n          // Optional deadline in seconds for starting the job if it misses scheduled time for any reason.  Missed jobs executions will be counted as failed ones.\n          withStartingDeadlineSeconds(startingDeadlineSeconds):: self + {startingDeadlineSeconds: startingDeadlineSeconds},\n          // The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.\n          withSuccessfulJobsHistoryLimit(successfulJobsHistoryLimit):: self + {successfulJobsHistoryLimit: successfulJobsHistoryLimit},\n          // This flag tells the controller to suspend subsequent executions, it does not apply to already started executions.  Defaults to false.\n          withSuspend(suspend):: self + {suspend: suspend},\n          mixin:: {\n            // Specifies the job that will be created when executing a CronJob.\n            jobTemplate:: {\n              local __jobTemplateMixin(jobTemplate) = {jobTemplate+: jobTemplate},\n              mixinInstance(jobTemplate):: __jobTemplateMixin(jobTemplate),\n              // Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __jobTemplateMixin({metadata+: metadata}),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n                // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n                withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                  pendingType:: hidden.meta.v1.initializer,\n                  // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                  result:: {\n                    local __resultMixin(result) = __initializersMixin({result+: result}),\n                    mixinInstance(result):: __resultMixin(result),\n                    // Suggested HTTP return code for this status, 0 if not set.\n                    withCode(code):: self + __resultMixin({code: code}),\n                    // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                    details:: {\n                      local __detailsMixin(details) = __resultMixin({details+: details}),\n                      mixinInstance(details):: __detailsMixin(details),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                      causesType:: hidden.meta.v1.statusCause,\n                      // The group attribute of the resource associated with the status StatusReason.\n                      withGroup(group):: self + __detailsMixin({group: group}),\n                      // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                      withName(name):: self + __detailsMixin({name: name}),\n                      // If specified, the time in seconds before the operation should be retried.\n                      withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                      // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                      withUid(uid):: self + __detailsMixin({uid: uid}),\n                    },\n                    detailsType:: hidden.meta.v1.statusDetails,\n                    // A human-readable description of the status of this operation.\n                    withMessage(message):: self + __resultMixin({message: message}),\n                    // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                    withReason(reason):: self + __resultMixin({reason: reason}),\n                  },\n                  resultType:: hidden.meta.v1.status,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({labels: labels}),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({name: name}),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __jobTemplateMixin({spec+: spec}),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n                // Specifies the desired number of successfully finished pods the job should be run with.  Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value.  Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n                withCompletions(completions):: self + __specMixin({completions: completions}),\n                // manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template.  When true, the user is responsible for picking unique labels and specifying the selector.  Failure to pick a unique label may cause this and other jobs to not function correctly.  However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://git.k8s.io/community/contributors/design-proposals/selector-generation.md\n                withManualSelector(manualSelector):: self + __specMixin({manualSelector: manualSelector}),\n                // Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n                withParallelism(parallelism):: self + __specMixin({parallelism: parallelism}),\n                // A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n                selector:: {\n                  local __selectorMixin(selector) = __specMixin({selector+: selector}),\n                  mixinInstance(selector):: __selectorMixin(selector),\n                  // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                  withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}),\n                  // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                  withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}),\n                  matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n                  // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                  withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}),\n                  // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                  withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}),\n                },\n                selectorType:: hidden.meta.v1.labelSelector,\n                // Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n                template:: {\n                  local __templateMixin(template) = __specMixin({template+: template}),\n                  mixinInstance(template):: __templateMixin(template),\n                  // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n                  metadata:: {\n                    local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}),\n                    mixinInstance(metadata):: __metadataMixin(metadata),\n                    // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                    withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n                    // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                    withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n                    // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                    withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n                    // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n                    withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n                    // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                    withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n                    // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                    withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n                    // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                    //\n                    // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                    //\n                    // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                    withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n                    // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                    //\n                    // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                    initializers:: {\n                      local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                      mixinInstance(initializers):: __initializersMixin(initializers),\n                      // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                      withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                      // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                      withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                      pendingType:: hidden.meta.v1.initializer,\n                      // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                      result:: {\n                        local __resultMixin(result) = __initializersMixin({result+: result}),\n                        mixinInstance(result):: __resultMixin(result),\n                        // Suggested HTTP return code for this status, 0 if not set.\n                        withCode(code):: self + __resultMixin({code: code}),\n                        // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                        details:: {\n                          local __detailsMixin(details) = __resultMixin({details+: details}),\n                          mixinInstance(details):: __detailsMixin(details),\n                          // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                          withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                          // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                          withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                          causesType:: hidden.meta.v1.statusCause,\n                          // The group attribute of the resource associated with the status StatusReason.\n                          withGroup(group):: self + __detailsMixin({group: group}),\n                          // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                          withName(name):: self + __detailsMixin({name: name}),\n                          // If specified, the time in seconds before the operation should be retried.\n                          withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                          // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                          withUid(uid):: self + __detailsMixin({uid: uid}),\n                        },\n                        detailsType:: hidden.meta.v1.statusDetails,\n                        // A human-readable description of the status of this operation.\n                        withMessage(message):: self + __resultMixin({message: message}),\n                        // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                        withReason(reason):: self + __resultMixin({reason: reason}),\n                      },\n                      resultType:: hidden.meta.v1.status,\n                    },\n                    initializersType:: hidden.meta.v1.initializers,\n                    // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                    withLabels(labels):: self + __metadataMixin({labels: labels}),\n                    // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                    withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n                    // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                    withName(name):: self + __metadataMixin({name: name}),\n                    // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                    //\n                    // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                    withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n                  },\n                  metadataType:: hidden.meta.v1.objectMeta,\n                  // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n                  spec:: {\n                    local __specMixin(spec) = __templateMixin({spec+: spec}),\n                    mixinInstance(spec):: __specMixin(spec),\n                    // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                    withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n                    // If specified, the pod's scheduling constraints\n                    affinity:: {\n                      local __affinityMixin(affinity) = __specMixin({affinity+: affinity}),\n                      mixinInstance(affinity):: __affinityMixin(affinity),\n                      // Describes node affinity scheduling rules for the pod.\n                      nodeAffinity:: {\n                        local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}),\n                        mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                        preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                        // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                        requiredDuringSchedulingIgnoredDuringExecution:: {\n                          local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                          mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                          // Required. A list of node selector terms. The terms are ORed.\n                          withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                          // Required. A list of node selector terms. The terms are ORed.\n                          withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                          nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                        },\n                        requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                      },\n                      nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                      // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                      podAffinity:: {\n                        local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}),\n                        mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                        preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                        // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                        // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                        requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                      },\n                      podAffinityType:: hidden.core.v1.podAffinity,\n                      // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                      podAntiAffinity:: {\n                        local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}),\n                        mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                        // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                        withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                        preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                        // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                        // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                        withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                        requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                      },\n                      podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                    },\n                    affinityType:: hidden.core.v1.affinity,\n                    // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                    withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}),\n                    // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                    withContainers(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}),\n                    // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                    withContainersMixin(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}),\n                    containersType:: hidden.core.v1.container,\n                    // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                    withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}),\n                    // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                    withHostAliases(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}),\n                    // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                    withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}),\n                    hostAliasesType:: hidden.core.v1.hostAlias,\n                    // Use the host's ipc namespace. Optional: Default to false.\n                    withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}),\n                    // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                    withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}),\n                    // Use the host's pid namespace. Optional: Default to false.\n                    withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}),\n                    // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                    withHostname(hostname):: self + __specMixin({hostname: hostname}),\n                    // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                    withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}),\n                    // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                    withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}),\n                    imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                    // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                    withInitContainers(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}),\n                    // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                    withInitContainersMixin(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}),\n                    initContainersType:: hidden.core.v1.container,\n                    // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                    withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}),\n                    // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                    withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}),\n                    // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                    withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}),\n                    // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                    withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}),\n                    // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                    withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}),\n                    // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                    securityContext:: {\n                      local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}),\n                      mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                      // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                      //\n                      // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                      //\n                      // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                      withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}),\n                      // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                      withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n                      // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                      withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n                      // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                      seLinuxOptions:: {\n                        local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                        mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                        // Level is SELinux level label that applies to the container.\n                        withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                        // Role is a SELinux role label that applies to the container.\n                        withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                        // Type is a SELinux type label that applies to the container.\n                        withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                        // User is a SELinux user label that applies to the container.\n                        withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n                      },\n                      seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                      // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                      withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}),\n                      // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                      withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}),\n                    },\n                    securityContextType:: hidden.core.v1.podSecurityContext,\n                    // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                    withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}),\n                    // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                    withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}),\n                    // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                    withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}),\n                    // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                    withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}),\n                    // If specified, the pod's tolerations.\n                    withTolerations(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}),\n                    // If specified, the pod's tolerations.\n                    withTolerationsMixin(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}),\n                    tolerationsType:: hidden.core.v1.toleration,\n                    // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                    withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n                    // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                    withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n                    volumesType:: hidden.core.v1.volume,\n                  },\n                  specType:: hidden.core.v1.podSpec,\n                },\n                templateType:: hidden.core.v1.podTemplateSpec,\n              },\n              specType:: hidden.batch.v1.jobSpec,\n            },\n            jobTemplateType:: hidden.batch.v2alpha1.jobTemplateSpec,\n          },\n        },\n        // CronJobStatus represents the current state of a cron job.\n        cronJobStatus:: {\n          new():: {},\n          // A list of pointers to currently running jobs.\n          withActive(active):: self + if std.type(active) == \"array\" then {active: active} else {active: [active]},\n          // A list of pointers to currently running jobs.\n          withActiveMixin(active):: self + if std.type(active) == \"array\" then {active+: active} else {active+: [active]},\n          activeType:: hidden.core.v1.objectReference,\n          mixin:: {\n            // Information when was the last time the job was successfully scheduled.\n            lastScheduleTime:: {\n              local __lastScheduleTimeMixin(lastScheduleTime) = {lastScheduleTime+: lastScheduleTime},\n              mixinInstance(lastScheduleTime):: __lastScheduleTimeMixin(lastScheduleTime),\n            },\n            lastScheduleTimeType:: hidden.meta.v1.time,\n          },\n        },\n        // JobTemplateSpec describes the data a Job should have when created from a template\n        jobTemplateSpec:: {\n          new():: {},\n          mixin:: {\n            // Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n            metadata:: {\n              local __metadataMixin(metadata) = {metadata+: metadata},\n              mixinInstance(metadata):: __metadataMixin(metadata),\n              // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n              withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n              // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n              withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n              // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n              withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n              // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n              withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n              // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n              withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n              // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n              withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n              // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n              //\n              // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n              //\n              // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n              withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n              // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n              //\n              // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n              initializers:: {\n                local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                mixinInstance(initializers):: __initializersMixin(initializers),\n                // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                pendingType:: hidden.meta.v1.initializer,\n                // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                result:: {\n                  local __resultMixin(result) = __initializersMixin({result+: result}),\n                  mixinInstance(result):: __resultMixin(result),\n                  // Suggested HTTP return code for this status, 0 if not set.\n                  withCode(code):: self + __resultMixin({code: code}),\n                  // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                  details:: {\n                    local __detailsMixin(details) = __resultMixin({details+: details}),\n                    mixinInstance(details):: __detailsMixin(details),\n                    // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                    withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                    // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                    withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                    causesType:: hidden.meta.v1.statusCause,\n                    // The group attribute of the resource associated with the status StatusReason.\n                    withGroup(group):: self + __detailsMixin({group: group}),\n                    // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                    withName(name):: self + __detailsMixin({name: name}),\n                    // If specified, the time in seconds before the operation should be retried.\n                    withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                    // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                    withUid(uid):: self + __detailsMixin({uid: uid}),\n                  },\n                  detailsType:: hidden.meta.v1.statusDetails,\n                  // A human-readable description of the status of this operation.\n                  withMessage(message):: self + __resultMixin({message: message}),\n                  // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                  withReason(reason):: self + __resultMixin({reason: reason}),\n                },\n                resultType:: hidden.meta.v1.status,\n              },\n              initializersType:: hidden.meta.v1.initializers,\n              // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n              withLabels(labels):: self + __metadataMixin({labels: labels}),\n              // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n              withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n              // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n              withName(name):: self + __metadataMixin({name: name}),\n              // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n              //\n              // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n              withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n            },\n            metadataType:: hidden.meta.v1.objectMeta,\n            // Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n            spec:: {\n              local __specMixin(spec) = {spec+: spec},\n              mixinInstance(spec):: __specMixin(spec),\n              // Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer\n              withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n              // Specifies the desired number of successfully finished pods the job should be run with.  Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value.  Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n              withCompletions(completions):: self + __specMixin({completions: completions}),\n              // manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template.  When true, the user is responsible for picking unique labels and specifying the selector.  Failure to pick a unique label may cause this and other jobs to not function correctly.  However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://git.k8s.io/community/contributors/design-proposals/selector-generation.md\n              withManualSelector(manualSelector):: self + __specMixin({manualSelector: manualSelector}),\n              // Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n              withParallelism(parallelism):: self + __specMixin({parallelism: parallelism}),\n              // A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n              selector:: {\n                local __selectorMixin(selector) = __specMixin({selector+: selector}),\n                mixinInstance(selector):: __selectorMixin(selector),\n                // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}),\n                // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}),\n                matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n                // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}),\n                // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}),\n              },\n              selectorType:: hidden.meta.v1.labelSelector,\n              // Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\n              template:: {\n                local __templateMixin(template) = __specMixin({template+: template}),\n                mixinInstance(template):: __templateMixin(template),\n                // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n                metadata:: {\n                  local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}),\n                  mixinInstance(metadata):: __metadataMixin(metadata),\n                  // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                  withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n                  // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                  withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n                  // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                  withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n                  // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n                  withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n                  // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                  withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n                  // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                  withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n                  // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                  //\n                  // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                  //\n                  // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                  withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n                  // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                  //\n                  // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                  initializers:: {\n                    local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                    mixinInstance(initializers):: __initializersMixin(initializers),\n                    // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                    withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                    // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                    withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                    pendingType:: hidden.meta.v1.initializer,\n                    // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                    result:: {\n                      local __resultMixin(result) = __initializersMixin({result+: result}),\n                      mixinInstance(result):: __resultMixin(result),\n                      // Suggested HTTP return code for this status, 0 if not set.\n                      withCode(code):: self + __resultMixin({code: code}),\n                      // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                      details:: {\n                        local __detailsMixin(details) = __resultMixin({details+: details}),\n                        mixinInstance(details):: __detailsMixin(details),\n                        // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                        withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                        // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                        withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                        causesType:: hidden.meta.v1.statusCause,\n                        // The group attribute of the resource associated with the status StatusReason.\n                        withGroup(group):: self + __detailsMixin({group: group}),\n                        // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                        withName(name):: self + __detailsMixin({name: name}),\n                        // If specified, the time in seconds before the operation should be retried.\n                        withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                        // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                        withUid(uid):: self + __detailsMixin({uid: uid}),\n                      },\n                      detailsType:: hidden.meta.v1.statusDetails,\n                      // A human-readable description of the status of this operation.\n                      withMessage(message):: self + __resultMixin({message: message}),\n                      // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                      withReason(reason):: self + __resultMixin({reason: reason}),\n                    },\n                    resultType:: hidden.meta.v1.status,\n                  },\n                  initializersType:: hidden.meta.v1.initializers,\n                  // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                  withLabels(labels):: self + __metadataMixin({labels: labels}),\n                  // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                  withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n                  // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                  withName(name):: self + __metadataMixin({name: name}),\n                  // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                  //\n                  // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                  withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n                },\n                metadataType:: hidden.meta.v1.objectMeta,\n                // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n                spec:: {\n                  local __specMixin(spec) = __templateMixin({spec+: spec}),\n                  mixinInstance(spec):: __specMixin(spec),\n                  // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                  withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n                  // If specified, the pod's scheduling constraints\n                  affinity:: {\n                    local __affinityMixin(affinity) = __specMixin({affinity+: affinity}),\n                    mixinInstance(affinity):: __affinityMixin(affinity),\n                    // Describes node affinity scheduling rules for the pod.\n                    nodeAffinity:: {\n                      local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}),\n                      mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                      // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                      withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                      // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                      withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                      preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                      // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                      requiredDuringSchedulingIgnoredDuringExecution:: {\n                        local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                        mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                        // Required. A list of node selector terms. The terms are ORed.\n                        withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                        // Required. A list of node selector terms. The terms are ORed.\n                        withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                        nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                      },\n                      requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                    },\n                    nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                    // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                    podAffinity:: {\n                      local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}),\n                      mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                      // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                      withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                      // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                      withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                      preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                      // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                      withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                      // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                      withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                      requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                    },\n                    podAffinityType:: hidden.core.v1.podAffinity,\n                    // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                    podAntiAffinity:: {\n                      local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}),\n                      mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                      // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                      withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                      // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                      withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                      preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                      // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                      withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                      // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                      withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                      requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                    },\n                    podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                  },\n                  affinityType:: hidden.core.v1.affinity,\n                  // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                  withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}),\n                  // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                  withContainers(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}),\n                  // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                  withContainersMixin(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}),\n                  containersType:: hidden.core.v1.container,\n                  // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                  withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}),\n                  // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                  withHostAliases(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}),\n                  // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                  withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}),\n                  hostAliasesType:: hidden.core.v1.hostAlias,\n                  // Use the host's ipc namespace. Optional: Default to false.\n                  withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}),\n                  // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                  withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}),\n                  // Use the host's pid namespace. Optional: Default to false.\n                  withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}),\n                  // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                  withHostname(hostname):: self + __specMixin({hostname: hostname}),\n                  // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                  withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}),\n                  // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                  withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}),\n                  imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                  // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                  withInitContainers(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}),\n                  // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                  withInitContainersMixin(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}),\n                  initContainersType:: hidden.core.v1.container,\n                  // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                  withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}),\n                  // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                  withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}),\n                  // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                  withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}),\n                  // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                  withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}),\n                  // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                  withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}),\n                  // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                  securityContext:: {\n                    local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}),\n                    mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                    // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                    //\n                    // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                    //\n                    // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                    withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}),\n                    // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                    withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n                    // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                    withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n                    // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                    seLinuxOptions:: {\n                      local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                      mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                      // Level is SELinux level label that applies to the container.\n                      withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                      // Role is a SELinux role label that applies to the container.\n                      withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                      // Type is a SELinux type label that applies to the container.\n                      withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                      // User is a SELinux user label that applies to the container.\n                      withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n                    },\n                    seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                    // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                    withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}),\n                    // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                    withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}),\n                  },\n                  securityContextType:: hidden.core.v1.podSecurityContext,\n                  // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                  withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}),\n                  // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                  withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}),\n                  // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                  withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}),\n                  // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                  withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}),\n                  // If specified, the pod's tolerations.\n                  withTolerations(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}),\n                  // If specified, the pod's tolerations.\n                  withTolerationsMixin(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}),\n                  tolerationsType:: hidden.core.v1.toleration,\n                  // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                  withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n                  // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                  withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n                  volumesType:: hidden.core.v1.volume,\n                },\n                specType:: hidden.core.v1.podSpec,\n              },\n              templateType:: hidden.core.v1.podTemplateSpec,\n            },\n            specType:: hidden.batch.v1.jobSpec,\n          },\n        },\n      },\n    },\n    certificates:: {\n      v1beta1:: {\n        local apiVersion = {apiVersion: \"certificates/v1beta1\"},\n        //\n        certificateSigningRequestCondition:: {\n          new():: {},\n          // human readable message with details about the request state\n          withMessage(message):: self + {message: message},\n          // brief reason for the request state\n          withReason(reason):: self + {reason: reason},\n          // request approval state, currently Approved or Denied.\n          withType(type):: self + {type: type},\n          mixin:: {\n            // timestamp for the last update to this condition\n            lastUpdateTime:: {\n              local __lastUpdateTimeMixin(lastUpdateTime) = {lastUpdateTime+: lastUpdateTime},\n              mixinInstance(lastUpdateTime):: __lastUpdateTimeMixin(lastUpdateTime),\n            },\n            lastUpdateTimeType:: hidden.meta.v1.time,\n          },\n        },\n        // This information is immutable after the request is created. Only the Request and Usages fields can be set on creation, other fields are derived by Kubernetes and cannot be modified by users.\n        certificateSigningRequestSpec:: {\n          new():: {},\n          // Extra information about the requesting user. See user.Info interface for details.\n          withExtra(extra):: self + {extra: extra},\n          // Extra information about the requesting user. See user.Info interface for details.\n          withExtraMixin(extra):: self + {extra+: extra},\n          // Group information about the requesting user. See user.Info interface for details.\n          withGroups(groups):: self + if std.type(groups) == \"array\" then {groups: groups} else {groups: [groups]},\n          // Group information about the requesting user. See user.Info interface for details.\n          withGroupsMixin(groups):: self + if std.type(groups) == \"array\" then {groups+: groups} else {groups+: [groups]},\n          // Base64-encoded PKCS#10 CSR data\n          withRequest(request):: self + {request: request},\n          // UID information about the requesting user. See user.Info interface for details.\n          withUid(uid):: self + {uid: uid},\n          // allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3\n          //      https://tools.ietf.org/html/rfc5280#section-4.2.1.12\n          withUsages(usages):: self + if std.type(usages) == \"array\" then {usages: usages} else {usages: [usages]},\n          // allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3\n          //      https://tools.ietf.org/html/rfc5280#section-4.2.1.12\n          withUsagesMixin(usages):: self + if std.type(usages) == \"array\" then {usages+: usages} else {usages+: [usages]},\n          // Information about the requesting user. See user.Info interface for details.\n          withUsername(username):: self + {username: username},\n          mixin:: {\n          },\n        },\n        //\n        certificateSigningRequestStatus:: {\n          new():: {},\n          // If request was approved, the controller will place the issued certificate here.\n          withCertificate(certificate):: self + {certificate: certificate},\n          // Conditions applied to the request, such as approval or denial.\n          withConditions(conditions):: self + if std.type(conditions) == \"array\" then {conditions: conditions} else {conditions: [conditions]},\n          // Conditions applied to the request, such as approval or denial.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == \"array\" then {conditions+: conditions} else {conditions+: [conditions]},\n          conditionsType:: hidden.certificates.v1beta1.certificateSigningRequestCondition,\n          mixin:: {\n          },\n        },\n      },\n    },\n    core:: {\n      intstr:: {\n        local apiVersion = {apiVersion: \"intstr\"},\n        //\n        intOrString:: {\n          new():: {},\n          mixin:: {\n          },\n        },\n      },\n      resource:: {\n        local apiVersion = {apiVersion: \"resource\"},\n        //\n        quantity:: {\n          new():: {},\n          mixin:: {\n          },\n        },\n      },\n      v1:: {\n        local apiVersion = {apiVersion: \"v1\"},\n        // Represents a Persistent Disk resource in AWS.\n        //\n        // An AWS EBS disk must exist before mounting to a container. The disk must also be in the same AWS zone as the kubelet. An AWS EBS disk can only be mounted as read/write once. AWS EBS volumes support ownership management and SELinux relabeling.\n        awsElasticBlockStoreVolumeSource:: {\n          new():: {},\n          // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n          withFsType(fsType):: self + {fsType: fsType},\n          // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty).\n          withPartition(partition):: self + {partition: partition},\n          // Specify \"true\" to force and set the ReadOnly property in VolumeMounts to \"true\". If omitted, the default is \"false\". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n          withReadOnly(readOnly):: self + {readOnly: readOnly},\n          // Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n          withVolumeId(volumeId):: self + {volumeID: volumeId},\n          mixin:: {\n          },\n        },\n        // Affinity is a group of affinity scheduling rules.\n        affinity:: {\n          new():: {},\n          mixin:: {\n            // Describes node affinity scheduling rules for the pod.\n            nodeAffinity:: {\n              local __nodeAffinityMixin(nodeAffinity) = {nodeAffinity+: nodeAffinity},\n              mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n              // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n              withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n              // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n              withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n              preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n              // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n              requiredDuringSchedulingIgnoredDuringExecution:: {\n                local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                // Required. A list of node selector terms. The terms are ORed.\n                withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                // Required. A list of node selector terms. The terms are ORed.\n                withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n              },\n              requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n            },\n            nodeAffinityType:: hidden.core.v1.nodeAffinity,\n            // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n            podAffinity:: {\n              local __podAffinityMixin(podAffinity) = {podAffinity+: podAffinity},\n              mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n              // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n              withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n              // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n              withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n              preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n              // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n              withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n              // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n              withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n              requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n            },\n            podAffinityType:: hidden.core.v1.podAffinity,\n            // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n            podAntiAffinity:: {\n              local __podAntiAffinityMixin(podAntiAffinity) = {podAntiAffinity+: podAntiAffinity},\n              mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n              // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n              withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n              // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n              withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n              preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n              // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n              withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n              // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n              withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n              requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n            },\n            podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n          },\n        },\n        // AttachedVolume describes a volume attached to a node\n        attachedVolume:: {\n          new():: {},\n          // DevicePath represents the device path where the volume should be available\n          withDevicePath(devicePath):: self + {devicePath: devicePath},\n          // Name of the attached volume\n          withName(name):: self + {name: name},\n          mixin:: {\n          },\n        },\n        // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.\n        azureDiskVolumeSource:: {\n          new():: {},\n          // Host Caching mode: None, Read Only, Read Write.\n          withCachingMode(cachingMode):: self + {cachingMode: cachingMode},\n          // The Name of the data disk in the blob storage\n          withDiskName(diskName):: self + {diskName: diskName},\n          // The URI the data disk in the blob storage\n          withDiskUri(diskUri):: self + {diskURI: diskUri},\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n          withFsType(fsType):: self + {fsType: fsType},\n          // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n          withReadOnly(readOnly):: self + {readOnly: readOnly},\n          mixin:: {\n          },\n        },\n        // AzureFile represents an Azure File Service mount on the host and bind mount to the pod.\n        azureFileVolumeSource:: {\n          new():: {},\n          // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n          withReadOnly(readOnly):: self + {readOnly: readOnly},\n          // the name of secret that contains Azure Storage Account Name and Key\n          withSecretName(secretName):: self + {secretName: secretName},\n          // Share Name\n          withShareName(shareName):: self + {shareName: shareName},\n          mixin:: {\n          },\n        },\n        // Adds and removes POSIX capabilities from running containers.\n        capabilities:: {\n          new():: {},\n          // Added capabilities\n          withAdd(add):: self + if std.type(add) == \"array\" then {add: add} else {add: [add]},\n          // Added capabilities\n          withAddMixin(add):: self + if std.type(add) == \"array\" then {add+: add} else {add+: [add]},\n          // Removed capabilities\n          withDrop(drop):: self + if std.type(drop) == \"array\" then {drop: drop} else {drop: [drop]},\n          // Removed capabilities\n          withDropMixin(drop):: self + if std.type(drop) == \"array\" then {drop+: drop} else {drop+: [drop]},\n          mixin:: {\n          },\n        },\n        // Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.\n        cephFsVolumeSource:: {\n          new():: {},\n          // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n          withMonitors(monitors):: self + if std.type(monitors) == \"array\" then {monitors: monitors} else {monitors: [monitors]},\n          // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n          withMonitorsMixin(monitors):: self + if std.type(monitors) == \"array\" then {monitors+: monitors} else {monitors+: [monitors]},\n          // Optional: Used as the mounted root, rather than the full Ceph tree, default is /\n          withPath(path):: self + {path: path},\n          // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n          withReadOnly(readOnly):: self + {readOnly: readOnly},\n          // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n          withSecretFile(secretFile):: self + {secretFile: secretFile},\n          // Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n          withUser(user):: self + {user: user},\n          mixin:: {\n            // Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n            secretRef:: {\n              local __secretRefMixin(secretRef) = {secretRef+: secretRef},\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __secretRefMixin({name: name}),\n            },\n            secretRefType:: hidden.core.v1.localObjectReference,\n          },\n        },\n        // Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.\n        cinderVolumeSource:: {\n          new():: {},\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n          withFsType(fsType):: self + {fsType: fsType},\n          // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n          withReadOnly(readOnly):: self + {readOnly: readOnly},\n          // volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n          withVolumeId(volumeId):: self + {volumeID: volumeId},\n          mixin:: {\n          },\n        },\n        // Information about the condition of a component.\n        componentCondition:: {\n          new():: {},\n          // Message about the condition for a component. For example, information about a health check.\n          withMessage(message):: self + {message: message},\n          // Type of condition for a component. Valid value: \"Healthy\"\n          withType(type):: self + {type: type},\n          mixin:: {\n          },\n        },\n        // ConfigMapEnvSource selects a ConfigMap to populate the environment variables with.\n        //\n        // The contents of the target ConfigMap's Data field will represent the key-value pairs as environment variables.\n        configMapEnvSource:: {\n          new():: {},\n          // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n          withName(name):: self + {name: name},\n          // Specify whether the ConfigMap must be defined\n          withOptional(optional):: self + {optional: optional},\n          mixin:: {\n          },\n        },\n        // Selects a key from a ConfigMap.\n        configMapKeySelector:: {\n          new():: {},\n          // The key to select.\n          withKey(key):: self + {key: key},\n          // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n          withName(name):: self + {name: name},\n          // Specify whether the ConfigMap or it's key must be defined\n          withOptional(optional):: self + {optional: optional},\n          mixin:: {\n          },\n        },\n        // Adapts a ConfigMap into a projected volume.\n        //\n        // The contents of the target ConfigMap's Data field will be presented in a projected volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. Note that this is identical to a configmap volume source without the default mode.\n        configMapProjection:: {\n          new():: {},\n          // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n          withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n          // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n          withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n          itemsType:: hidden.core.v1.keyToPath,\n          // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n          withName(name):: self + {name: name},\n          // Specify whether the ConfigMap or it's keys must be defined\n          withOptional(optional):: self + {optional: optional},\n          mixin:: {\n          },\n        },\n        // Adapts a ConfigMap into a volume.\n        //\n        // The contents of the target ConfigMap's Data field will be presented in a volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. ConfigMap volumes support ownership management and SELinux relabeling.\n        configMapVolumeSource:: {\n          new():: {},\n          // Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n          withDefaultMode(defaultMode):: self + {defaultMode: defaultMode},\n          // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n          withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n          // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n          withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n          itemsType:: hidden.core.v1.keyToPath,\n          // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n          withName(name):: self + {name: name},\n          // Specify whether the ConfigMap or it's keys must be defined\n          withOptional(optional):: self + {optional: optional},\n          mixin:: {\n          },\n        },\n        // A single application container that you want to run within a pod.\n        container:: {\n          new(name, image):: {} + self.withName(name) + self.withImage(image),\n          // Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\n          withArgs(args):: self + if std.type(args) == \"array\" then {args: args} else {args: [args]},\n          // Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\n          withArgsMixin(args):: self + if std.type(args) == \"array\" then {args+: args} else {args+: [args]},\n          // Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\n          withCommand(command):: self + if std.type(command) == \"array\" then {command: command} else {command: [command]},\n          // Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\n          withCommandMixin(command):: self + if std.type(command) == \"array\" then {command+: command} else {command+: [command]},\n          // List of environment variables to set in the container. Cannot be updated.\n          withEnv(env):: self + if std.type(env) == \"array\" then {env: env} else {env: [env]},\n          // List of environment variables to set in the container. Cannot be updated.\n          withEnvMixin(env):: self + if std.type(env) == \"array\" then {env+: env} else {env+: [env]},\n          // List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.\n          withEnvFrom(envFrom):: self + if std.type(envFrom) == \"array\" then {envFrom: envFrom} else {envFrom: [envFrom]},\n          // List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.\n          withEnvFromMixin(envFrom):: self + if std.type(envFrom) == \"array\" then {envFrom+: envFrom} else {envFrom+: [envFrom]},\n          envFromType:: hidden.core.v1.envFromSource,\n          envType:: hidden.core.v1.envVar,\n          // Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images\n          withImage(image):: self + {image: image},\n          // Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images\n          withImagePullPolicy(imagePullPolicy):: self + {imagePullPolicy: imagePullPolicy},\n          // Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated.\n          withName(name):: self + {name: name},\n          // List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default \"0.0.0.0\" address inside a container will be accessible from the network. Cannot be updated.\n          withPorts(ports):: self + if std.type(ports) == \"array\" then {ports: ports} else {ports: [ports]},\n          // List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default \"0.0.0.0\" address inside a container will be accessible from the network. Cannot be updated.\n          withPortsMixin(ports):: self + if std.type(ports) == \"array\" then {ports+: ports} else {ports+: [ports]},\n          portsType:: hidden.core.v1.containerPort,\n          // Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false.\n          withStdin(stdin):: self + {stdin: stdin},\n          // Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false\n          withStdinOnce(stdinOnce):: self + {stdinOnce: stdinOnce},\n          // Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.\n          withTerminationMessagePath(terminationMessagePath):: self + {terminationMessagePath: terminationMessagePath},\n          // Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.\n          withTerminationMessagePolicy(terminationMessagePolicy):: self + {terminationMessagePolicy: terminationMessagePolicy},\n          // Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false.\n          withTty(tty):: self + {tty: tty},\n          // Pod volumes to mount into the container's filesystem. Cannot be updated.\n          withVolumeMounts(volumeMounts):: self + if std.type(volumeMounts) == \"array\" then {volumeMounts: volumeMounts} else {volumeMounts: [volumeMounts]},\n          // Pod volumes to mount into the container's filesystem. Cannot be updated.\n          withVolumeMountsMixin(volumeMounts):: self + if std.type(volumeMounts) == \"array\" then {volumeMounts+: volumeMounts} else {volumeMounts+: [volumeMounts]},\n          volumeMountsType:: hidden.core.v1.volumeMount,\n          // Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image. Cannot be updated.\n          withWorkingDir(workingDir):: self + {workingDir: workingDir},\n          mixin:: {\n            // Actions that the management system should take in response to container lifecycle events. Cannot be updated.\n            lifecycle:: {\n              local __lifecycleMixin(lifecycle) = {lifecycle+: lifecycle},\n              mixinInstance(lifecycle):: __lifecycleMixin(lifecycle),\n              // PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks\n              postStart:: {\n                local __postStartMixin(postStart) = __lifecycleMixin({postStart+: postStart}),\n                mixinInstance(postStart):: __postStartMixin(postStart),\n                // One and only one of the following should be specified. Exec specifies the action to take.\n                exec:: {\n                  local __execMixin(exec) = __postStartMixin({exec+: exec}),\n                  mixinInstance(exec):: __execMixin(exec),\n                  // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                  withCommand(command):: self + if std.type(command) == \"array\" then __execMixin({command: command}) else __execMixin({command: [command]}),\n                  // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                  withCommandMixin(command):: self + if std.type(command) == \"array\" then __execMixin({command+: command}) else __execMixin({command+: [command]}),\n                },\n                execType:: hidden.core.v1.execAction,\n                // HTTPGet specifies the http request to perform.\n                httpGet:: {\n                  local __httpGetMixin(httpGet) = __postStartMixin({httpGet+: httpGet}),\n                  mixinInstance(httpGet):: __httpGetMixin(httpGet),\n                  // Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.\n                  withHost(host):: self + __httpGetMixin({host: host}),\n                  // Custom headers to set in the request. HTTP allows repeated headers.\n                  withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == \"array\" then __httpGetMixin({httpHeaders: httpHeaders}) else __httpGetMixin({httpHeaders: [httpHeaders]}),\n                  // Custom headers to set in the request. HTTP allows repeated headers.\n                  withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == \"array\" then __httpGetMixin({httpHeaders+: httpHeaders}) else __httpGetMixin({httpHeaders+: [httpHeaders]}),\n                  httpHeadersType:: hidden.core.v1.httpHeader,\n                  // Path to access on the HTTP server.\n                  withPath(path):: self + __httpGetMixin({path: path}),\n                  // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                  withPort(port):: __httpGetMixin({port: port}),\n                  // Scheme to use for connecting to the host. Defaults to HTTP.\n                  withScheme(scheme):: self + __httpGetMixin({scheme: scheme}),\n                },\n                httpGetType:: hidden.core.v1.httpGetAction,\n                // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported\n                tcpSocket:: {\n                  local __tcpSocketMixin(tcpSocket) = __postStartMixin({tcpSocket+: tcpSocket}),\n                  mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket),\n                  // Optional: Host name to connect to, defaults to the pod IP.\n                  withHost(host):: self + __tcpSocketMixin({host: host}),\n                  // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                  withPort(port):: __tcpSocketMixin({port: port}),\n                },\n                tcpSocketType:: hidden.core.v1.tcpSocketAction,\n              },\n              postStartType:: hidden.core.v1.handler,\n              // PreStop is called immediately before a container is terminated. The container is terminated after the handler completes. The reason for termination is passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks\n              preStop:: {\n                local __preStopMixin(preStop) = __lifecycleMixin({preStop+: preStop}),\n                mixinInstance(preStop):: __preStopMixin(preStop),\n                // One and only one of the following should be specified. Exec specifies the action to take.\n                exec:: {\n                  local __execMixin(exec) = __preStopMixin({exec+: exec}),\n                  mixinInstance(exec):: __execMixin(exec),\n                  // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                  withCommand(command):: self + if std.type(command) == \"array\" then __execMixin({command: command}) else __execMixin({command: [command]}),\n                  // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                  withCommandMixin(command):: self + if std.type(command) == \"array\" then __execMixin({command+: command}) else __execMixin({command+: [command]}),\n                },\n                execType:: hidden.core.v1.execAction,\n                // HTTPGet specifies the http request to perform.\n                httpGet:: {\n                  local __httpGetMixin(httpGet) = __preStopMixin({httpGet+: httpGet}),\n                  mixinInstance(httpGet):: __httpGetMixin(httpGet),\n                  // Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.\n                  withHost(host):: self + __httpGetMixin({host: host}),\n                  // Custom headers to set in the request. HTTP allows repeated headers.\n                  withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == \"array\" then __httpGetMixin({httpHeaders: httpHeaders}) else __httpGetMixin({httpHeaders: [httpHeaders]}),\n                  // Custom headers to set in the request. HTTP allows repeated headers.\n                  withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == \"array\" then __httpGetMixin({httpHeaders+: httpHeaders}) else __httpGetMixin({httpHeaders+: [httpHeaders]}),\n                  httpHeadersType:: hidden.core.v1.httpHeader,\n                  // Path to access on the HTTP server.\n                  withPath(path):: self + __httpGetMixin({path: path}),\n                  // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                  withPort(port):: __httpGetMixin({port: port}),\n                  // Scheme to use for connecting to the host. Defaults to HTTP.\n                  withScheme(scheme):: self + __httpGetMixin({scheme: scheme}),\n                },\n                httpGetType:: hidden.core.v1.httpGetAction,\n                // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported\n                tcpSocket:: {\n                  local __tcpSocketMixin(tcpSocket) = __preStopMixin({tcpSocket+: tcpSocket}),\n                  mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket),\n                  // Optional: Host name to connect to, defaults to the pod IP.\n                  withHost(host):: self + __tcpSocketMixin({host: host}),\n                  // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                  withPort(port):: __tcpSocketMixin({port: port}),\n                },\n                tcpSocketType:: hidden.core.v1.tcpSocketAction,\n              },\n              preStopType:: hidden.core.v1.handler,\n            },\n            lifecycleType:: hidden.core.v1.lifecycle,\n            // Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\n            livenessProbe:: {\n              local __livenessProbeMixin(livenessProbe) = {livenessProbe+: livenessProbe},\n              mixinInstance(livenessProbe):: __livenessProbeMixin(livenessProbe),\n              // One and only one of the following should be specified. Exec specifies the action to take.\n              exec:: {\n                local __execMixin(exec) = __livenessProbeMixin({exec+: exec}),\n                mixinInstance(exec):: __execMixin(exec),\n                // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                withCommand(command):: self + if std.type(command) == \"array\" then __execMixin({command: command}) else __execMixin({command: [command]}),\n                // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                withCommandMixin(command):: self + if std.type(command) == \"array\" then __execMixin({command+: command}) else __execMixin({command+: [command]}),\n              },\n              execType:: hidden.core.v1.execAction,\n              // Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.\n              withFailureThreshold(failureThreshold):: self + __livenessProbeMixin({failureThreshold: failureThreshold}),\n              // HTTPGet specifies the http request to perform.\n              httpGet:: {\n                local __httpGetMixin(httpGet) = __livenessProbeMixin({httpGet+: httpGet}),\n                mixinInstance(httpGet):: __httpGetMixin(httpGet),\n                // Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.\n                withHost(host):: self + __httpGetMixin({host: host}),\n                // Custom headers to set in the request. HTTP allows repeated headers.\n                withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == \"array\" then __httpGetMixin({httpHeaders: httpHeaders}) else __httpGetMixin({httpHeaders: [httpHeaders]}),\n                // Custom headers to set in the request. HTTP allows repeated headers.\n                withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == \"array\" then __httpGetMixin({httpHeaders+: httpHeaders}) else __httpGetMixin({httpHeaders+: [httpHeaders]}),\n                httpHeadersType:: hidden.core.v1.httpHeader,\n                // Path to access on the HTTP server.\n                withPath(path):: self + __httpGetMixin({path: path}),\n                // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                withPort(port):: __httpGetMixin({port: port}),\n                // Scheme to use for connecting to the host. Defaults to HTTP.\n                withScheme(scheme):: self + __httpGetMixin({scheme: scheme}),\n              },\n              httpGetType:: hidden.core.v1.httpGetAction,\n              // Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\n              withInitialDelaySeconds(initialDelaySeconds):: self + __livenessProbeMixin({initialDelaySeconds: initialDelaySeconds}),\n              // How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.\n              withPeriodSeconds(periodSeconds):: self + __livenessProbeMixin({periodSeconds: periodSeconds}),\n              // Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.\n              withSuccessThreshold(successThreshold):: self + __livenessProbeMixin({successThreshold: successThreshold}),\n              // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported\n              tcpSocket:: {\n                local __tcpSocketMixin(tcpSocket) = __livenessProbeMixin({tcpSocket+: tcpSocket}),\n                mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket),\n                // Optional: Host name to connect to, defaults to the pod IP.\n                withHost(host):: self + __tcpSocketMixin({host: host}),\n                // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                withPort(port):: __tcpSocketMixin({port: port}),\n              },\n              tcpSocketType:: hidden.core.v1.tcpSocketAction,\n              // Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\n              withTimeoutSeconds(timeoutSeconds):: self + __livenessProbeMixin({timeoutSeconds: timeoutSeconds}),\n            },\n            livenessProbeType:: hidden.core.v1.probe,\n            // Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\n            readinessProbe:: {\n              local __readinessProbeMixin(readinessProbe) = {readinessProbe+: readinessProbe},\n              mixinInstance(readinessProbe):: __readinessProbeMixin(readinessProbe),\n              // One and only one of the following should be specified. Exec specifies the action to take.\n              exec:: {\n                local __execMixin(exec) = __readinessProbeMixin({exec+: exec}),\n                mixinInstance(exec):: __execMixin(exec),\n                // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                withCommand(command):: self + if std.type(command) == \"array\" then __execMixin({command: command}) else __execMixin({command: [command]}),\n                // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                withCommandMixin(command):: self + if std.type(command) == \"array\" then __execMixin({command+: command}) else __execMixin({command+: [command]}),\n              },\n              execType:: hidden.core.v1.execAction,\n              // Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.\n              withFailureThreshold(failureThreshold):: self + __readinessProbeMixin({failureThreshold: failureThreshold}),\n              // HTTPGet specifies the http request to perform.\n              httpGet:: {\n                local __httpGetMixin(httpGet) = __readinessProbeMixin({httpGet+: httpGet}),\n                mixinInstance(httpGet):: __httpGetMixin(httpGet),\n                // Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.\n                withHost(host):: self + __httpGetMixin({host: host}),\n                // Custom headers to set in the request. HTTP allows repeated headers.\n                withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == \"array\" then __httpGetMixin({httpHeaders: httpHeaders}) else __httpGetMixin({httpHeaders: [httpHeaders]}),\n                // Custom headers to set in the request. HTTP allows repeated headers.\n                withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == \"array\" then __httpGetMixin({httpHeaders+: httpHeaders}) else __httpGetMixin({httpHeaders+: [httpHeaders]}),\n                httpHeadersType:: hidden.core.v1.httpHeader,\n                // Path to access on the HTTP server.\n                withPath(path):: self + __httpGetMixin({path: path}),\n                // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                withPort(port):: __httpGetMixin({port: port}),\n                // Scheme to use for connecting to the host. Defaults to HTTP.\n                withScheme(scheme):: self + __httpGetMixin({scheme: scheme}),\n              },\n              httpGetType:: hidden.core.v1.httpGetAction,\n              // Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\n              withInitialDelaySeconds(initialDelaySeconds):: self + __readinessProbeMixin({initialDelaySeconds: initialDelaySeconds}),\n              // How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.\n              withPeriodSeconds(periodSeconds):: self + __readinessProbeMixin({periodSeconds: periodSeconds}),\n              // Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.\n              withSuccessThreshold(successThreshold):: self + __readinessProbeMixin({successThreshold: successThreshold}),\n              // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported\n              tcpSocket:: {\n                local __tcpSocketMixin(tcpSocket) = __readinessProbeMixin({tcpSocket+: tcpSocket}),\n                mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket),\n                // Optional: Host name to connect to, defaults to the pod IP.\n                withHost(host):: self + __tcpSocketMixin({host: host}),\n                // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                withPort(port):: __tcpSocketMixin({port: port}),\n              },\n              tcpSocketType:: hidden.core.v1.tcpSocketAction,\n              // Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\n              withTimeoutSeconds(timeoutSeconds):: self + __readinessProbeMixin({timeoutSeconds: timeoutSeconds}),\n            },\n            readinessProbeType:: hidden.core.v1.probe,\n            // Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources\n            resources:: {\n              local __resourcesMixin(resources) = {resources+: resources},\n              mixinInstance(resources):: __resourcesMixin(resources),\n              // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withLimits(limits):: self + __resourcesMixin({limits: limits}),\n              // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withLimitsMixin(limits):: self + __resourcesMixin({limits+: limits}),\n              // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withRequests(requests):: self + __resourcesMixin({requests: requests}),\n              // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withRequestsMixin(requests):: self + __resourcesMixin({requests+: requests}),\n            },\n            resourcesType:: hidden.core.v1.resourceRequirements,\n            // Security options the pod should run with. More info: https://kubernetes.io/docs/concepts/policy/security-context/ More info: https://git.k8s.io/community/contributors/design-proposals/security_context.md\n            securityContext:: {\n              local __securityContextMixin(securityContext) = {securityContext+: securityContext},\n              mixinInstance(securityContext):: __securityContextMixin(securityContext),\n              // The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime.\n              capabilities:: {\n                local __capabilitiesMixin(capabilities) = __securityContextMixin({capabilities+: capabilities}),\n                mixinInstance(capabilities):: __capabilitiesMixin(capabilities),\n                // Added capabilities\n                withAdd(add):: self + if std.type(add) == \"array\" then __capabilitiesMixin({add: add}) else __capabilitiesMixin({add: [add]}),\n                // Added capabilities\n                withAddMixin(add):: self + if std.type(add) == \"array\" then __capabilitiesMixin({add+: add}) else __capabilitiesMixin({add+: [add]}),\n                // Removed capabilities\n                withDrop(drop):: self + if std.type(drop) == \"array\" then __capabilitiesMixin({drop: drop}) else __capabilitiesMixin({drop: [drop]}),\n                // Removed capabilities\n                withDropMixin(drop):: self + if std.type(drop) == \"array\" then __capabilitiesMixin({drop+: drop}) else __capabilitiesMixin({drop+: [drop]}),\n              },\n              capabilitiesType:: hidden.core.v1.capabilities,\n              // Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false.\n              withPrivileged(privileged):: self + __securityContextMixin({privileged: privileged}),\n              // Whether this container has a read-only root filesystem. Default is false.\n              withReadOnlyRootFilesystem(readOnlyRootFilesystem):: self + __securityContextMixin({readOnlyRootFilesystem: readOnlyRootFilesystem}),\n              // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n              withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n              // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n              withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n              // The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n              seLinuxOptions:: {\n                local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                // Level is SELinux level label that applies to the container.\n                withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                // Role is a SELinux role label that applies to the container.\n                withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                // Type is a SELinux type label that applies to the container.\n                withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                // User is a SELinux user label that applies to the container.\n                withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n              },\n              seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n            },\n            securityContextType:: hidden.core.v1.securityContext,\n          },\n        },\n        // Describe a container image\n        containerImage:: {\n          new():: {},\n          // Names by which this image is known. e.g. [\"gcr.io/google_containers/hyperkube:v1.0.7\", \"dockerhub.io/google_containers/hyperkube:v1.0.7\"]\n          withNames(names):: self + if std.type(names) == \"array\" then {names: names} else {names: [names]},\n          // Names by which this image is known. e.g. [\"gcr.io/google_containers/hyperkube:v1.0.7\", \"dockerhub.io/google_containers/hyperkube:v1.0.7\"]\n          withNamesMixin(names):: self + if std.type(names) == \"array\" then {names+: names} else {names+: [names]},\n          // The size of the image in bytes.\n          withSizeBytes(sizeBytes):: self + {sizeBytes: sizeBytes},\n          mixin:: {\n          },\n        },\n        // ContainerPort represents a network port in a single container.\n        containerPort:: {\n          new(containerPort):: {} + self.withContainerPort(containerPort),\n          newNamed(name, containerPort):: {} + self.withName(name) + self.withContainerPort(containerPort),\n          // Number of port to expose on the pod's IP address. This must be a valid port number, 0 < x < 65536.\n          withContainerPort(containerPort):: self + {containerPort: containerPort},\n          // What host IP to bind the external port to.\n          withHostIp(hostIp):: self + {hostIP: hostIp},\n          // Number of port to expose on the host. If specified, this must be a valid port number, 0 < x < 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this.\n          withHostPort(hostPort):: self + {hostPort: hostPort},\n          // If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.\n          withName(name):: self + {name: name},\n          // Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".\n          withProtocol(protocol):: self + {protocol: protocol},\n          mixin:: {\n          },\n        },\n        // ContainerState holds a possible state of container. Only one of its members may be specified. If none of them is specified, the default one is ContainerStateWaiting.\n        containerState:: {\n          new():: {},\n          mixin:: {\n            // Details about a running container\n            running:: {\n              local __runningMixin(running) = {running+: running},\n              mixinInstance(running):: __runningMixin(running),\n              // Time at which the container was last (re-)started\n              startedAt:: {\n                local __startedAtMixin(startedAt) = __runningMixin({startedAt+: startedAt}),\n                mixinInstance(startedAt):: __startedAtMixin(startedAt),\n              },\n              startedAtType:: hidden.meta.v1.time,\n            },\n            runningType:: hidden.core.v1.containerStateRunning,\n            // Details about a terminated container\n            terminated:: {\n              local __terminatedMixin(terminated) = {terminated+: terminated},\n              mixinInstance(terminated):: __terminatedMixin(terminated),\n              // Container's ID in the format 'docker://<container_id>'\n              withContainerId(containerId):: self + __terminatedMixin({containerID: containerId}),\n              // Exit status from the last termination of the container\n              withExitCode(exitCode):: self + __terminatedMixin({exitCode: exitCode}),\n              // Time at which the container last terminated\n              finishedAt:: {\n                local __finishedAtMixin(finishedAt) = __terminatedMixin({finishedAt+: finishedAt}),\n                mixinInstance(finishedAt):: __finishedAtMixin(finishedAt),\n              },\n              finishedAtType:: hidden.meta.v1.time,\n              // Message regarding the last termination of the container\n              withMessage(message):: self + __terminatedMixin({message: message}),\n              // (brief) reason from the last termination of the container\n              withReason(reason):: self + __terminatedMixin({reason: reason}),\n              // Signal from the last termination of the container\n              withSignal(signal):: self + __terminatedMixin({signal: signal}),\n              // Time at which previous execution of the container started\n              startedAt:: {\n                local __startedAtMixin(startedAt) = __terminatedMixin({startedAt+: startedAt}),\n                mixinInstance(startedAt):: __startedAtMixin(startedAt),\n              },\n              startedAtType:: hidden.meta.v1.time,\n            },\n            terminatedType:: hidden.core.v1.containerStateTerminated,\n            // Details about a waiting container\n            waiting:: {\n              local __waitingMixin(waiting) = {waiting+: waiting},\n              mixinInstance(waiting):: __waitingMixin(waiting),\n              // Message regarding why the container is not yet running.\n              withMessage(message):: self + __waitingMixin({message: message}),\n              // (brief) reason the container is not yet running.\n              withReason(reason):: self + __waitingMixin({reason: reason}),\n            },\n            waitingType:: hidden.core.v1.containerStateWaiting,\n          },\n        },\n        // ContainerStateRunning is a running state of a container.\n        containerStateRunning:: {\n          new():: {},\n          mixin:: {\n            // Time at which the container was last (re-)started\n            startedAt:: {\n              local __startedAtMixin(startedAt) = {startedAt+: startedAt},\n              mixinInstance(startedAt):: __startedAtMixin(startedAt),\n            },\n            startedAtType:: hidden.meta.v1.time,\n          },\n        },\n        // ContainerStateTerminated is a terminated state of a container.\n        containerStateTerminated:: {\n          new():: {},\n          // Container's ID in the format 'docker://<container_id>'\n          withContainerId(containerId):: self + {containerID: containerId},\n          // Exit status from the last termination of the container\n          withExitCode(exitCode):: self + {exitCode: exitCode},\n          // Message regarding the last termination of the container\n          withMessage(message):: self + {message: message},\n          // (brief) reason from the last termination of the container\n          withReason(reason):: self + {reason: reason},\n          // Signal from the last termination of the container\n          withSignal(signal):: self + {signal: signal},\n          mixin:: {\n            // Time at which the container last terminated\n            finishedAt:: {\n              local __finishedAtMixin(finishedAt) = {finishedAt+: finishedAt},\n              mixinInstance(finishedAt):: __finishedAtMixin(finishedAt),\n            },\n            finishedAtType:: hidden.meta.v1.time,\n            // Time at which previous execution of the container started\n            startedAt:: {\n              local __startedAtMixin(startedAt) = {startedAt+: startedAt},\n              mixinInstance(startedAt):: __startedAtMixin(startedAt),\n            },\n            startedAtType:: hidden.meta.v1.time,\n          },\n        },\n        // ContainerStateWaiting is a waiting state of a container.\n        containerStateWaiting:: {\n          new():: {},\n          // Message regarding why the container is not yet running.\n          withMessage(message):: self + {message: message},\n          // (brief) reason the container is not yet running.\n          withReason(reason):: self + {reason: reason},\n          mixin:: {\n          },\n        },\n        // ContainerStatus contains details for the current status of this container.\n        containerStatus:: {\n          new():: {},\n          // Container's ID in the format 'docker://<container_id>'.\n          withContainerId(containerId):: self + {containerID: containerId},\n          // The image the container is running. More info: https://kubernetes.io/docs/concepts/containers/images\n          withImage(image):: self + {image: image},\n          // ImageID of the container's image.\n          withImageId(imageId):: self + {imageID: imageId},\n          // This must be a DNS_LABEL. Each container in a pod must have a unique name. Cannot be updated.\n          withName(name):: self + {name: name},\n          // Specifies whether the container has passed its readiness probe.\n          withReady(ready):: self + {ready: ready},\n          // The number of times the container has been restarted, currently based on the number of dead containers that have not yet been removed. Note that this is calculated from dead containers. But those containers are subject to garbage collection. This value will get capped at 5 by GC.\n          withRestartCount(restartCount):: self + {restartCount: restartCount},\n          mixin:: {\n            // Details about the container's last termination condition.\n            lastState:: {\n              local __lastStateMixin(lastState) = {lastState+: lastState},\n              mixinInstance(lastState):: __lastStateMixin(lastState),\n              // Details about a running container\n              running:: {\n                local __runningMixin(running) = __lastStateMixin({running+: running}),\n                mixinInstance(running):: __runningMixin(running),\n                // Time at which the container was last (re-)started\n                startedAt:: {\n                  local __startedAtMixin(startedAt) = __runningMixin({startedAt+: startedAt}),\n                  mixinInstance(startedAt):: __startedAtMixin(startedAt),\n                },\n                startedAtType:: hidden.meta.v1.time,\n              },\n              runningType:: hidden.core.v1.containerStateRunning,\n              // Details about a terminated container\n              terminated:: {\n                local __terminatedMixin(terminated) = __lastStateMixin({terminated+: terminated}),\n                mixinInstance(terminated):: __terminatedMixin(terminated),\n                // Container's ID in the format 'docker://<container_id>'\n                withContainerId(containerId):: self + __terminatedMixin({containerID: containerId}),\n                // Exit status from the last termination of the container\n                withExitCode(exitCode):: self + __terminatedMixin({exitCode: exitCode}),\n                // Time at which the container last terminated\n                finishedAt:: {\n                  local __finishedAtMixin(finishedAt) = __terminatedMixin({finishedAt+: finishedAt}),\n                  mixinInstance(finishedAt):: __finishedAtMixin(finishedAt),\n                },\n                finishedAtType:: hidden.meta.v1.time,\n                // Message regarding the last termination of the container\n                withMessage(message):: self + __terminatedMixin({message: message}),\n                // (brief) reason from the last termination of the container\n                withReason(reason):: self + __terminatedMixin({reason: reason}),\n                // Signal from the last termination of the container\n                withSignal(signal):: self + __terminatedMixin({signal: signal}),\n                // Time at which previous execution of the container started\n                startedAt:: {\n                  local __startedAtMixin(startedAt) = __terminatedMixin({startedAt+: startedAt}),\n                  mixinInstance(startedAt):: __startedAtMixin(startedAt),\n                },\n                startedAtType:: hidden.meta.v1.time,\n              },\n              terminatedType:: hidden.core.v1.containerStateTerminated,\n              // Details about a waiting container\n              waiting:: {\n                local __waitingMixin(waiting) = __lastStateMixin({waiting+: waiting}),\n                mixinInstance(waiting):: __waitingMixin(waiting),\n                // Message regarding why the container is not yet running.\n                withMessage(message):: self + __waitingMixin({message: message}),\n                // (brief) reason the container is not yet running.\n                withReason(reason):: self + __waitingMixin({reason: reason}),\n              },\n              waitingType:: hidden.core.v1.containerStateWaiting,\n            },\n            lastStateType:: hidden.core.v1.containerState,\n            // Details about the container's current condition.\n            state:: {\n              local __stateMixin(state) = {state+: state},\n              mixinInstance(state):: __stateMixin(state),\n              // Details about a running container\n              running:: {\n                local __runningMixin(running) = __stateMixin({running+: running}),\n                mixinInstance(running):: __runningMixin(running),\n                // Time at which the container was last (re-)started\n                startedAt:: {\n                  local __startedAtMixin(startedAt) = __runningMixin({startedAt+: startedAt}),\n                  mixinInstance(startedAt):: __startedAtMixin(startedAt),\n                },\n                startedAtType:: hidden.meta.v1.time,\n              },\n              runningType:: hidden.core.v1.containerStateRunning,\n              // Details about a terminated container\n              terminated:: {\n                local __terminatedMixin(terminated) = __stateMixin({terminated+: terminated}),\n                mixinInstance(terminated):: __terminatedMixin(terminated),\n                // Container's ID in the format 'docker://<container_id>'\n                withContainerId(containerId):: self + __terminatedMixin({containerID: containerId}),\n                // Exit status from the last termination of the container\n                withExitCode(exitCode):: self + __terminatedMixin({exitCode: exitCode}),\n                // Time at which the container last terminated\n                finishedAt:: {\n                  local __finishedAtMixin(finishedAt) = __terminatedMixin({finishedAt+: finishedAt}),\n                  mixinInstance(finishedAt):: __finishedAtMixin(finishedAt),\n                },\n                finishedAtType:: hidden.meta.v1.time,\n                // Message regarding the last termination of the container\n                withMessage(message):: self + __terminatedMixin({message: message}),\n                // (brief) reason from the last termination of the container\n                withReason(reason):: self + __terminatedMixin({reason: reason}),\n                // Signal from the last termination of the container\n                withSignal(signal):: self + __terminatedMixin({signal: signal}),\n                // Time at which previous execution of the container started\n                startedAt:: {\n                  local __startedAtMixin(startedAt) = __terminatedMixin({startedAt+: startedAt}),\n                  mixinInstance(startedAt):: __startedAtMixin(startedAt),\n                },\n                startedAtType:: hidden.meta.v1.time,\n              },\n              terminatedType:: hidden.core.v1.containerStateTerminated,\n              // Details about a waiting container\n              waiting:: {\n                local __waitingMixin(waiting) = __stateMixin({waiting+: waiting}),\n                mixinInstance(waiting):: __waitingMixin(waiting),\n                // Message regarding why the container is not yet running.\n                withMessage(message):: self + __waitingMixin({message: message}),\n                // (brief) reason the container is not yet running.\n                withReason(reason):: self + __waitingMixin({reason: reason}),\n              },\n              waitingType:: hidden.core.v1.containerStateWaiting,\n            },\n            stateType:: hidden.core.v1.containerState,\n          },\n        },\n        // DaemonEndpoint contains information about a single Daemon endpoint.\n        daemonEndpoint:: {\n          new():: {},\n          // Port number of the given endpoint.\n          withPort(port):: self + {Port: port},\n          mixin:: {\n          },\n        },\n        // Represents downward API info for projecting into a projected volume. Note that this is identical to a downwardAPI volume source without the default mode.\n        downwardApiProjection:: {\n          new():: {},\n          // Items is a list of DownwardAPIVolume file\n          withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n          // Items is a list of DownwardAPIVolume file\n          withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n          itemsType:: hidden.core.v1.downwardApiVolumeFile,\n          mixin:: {\n          },\n        },\n        // DownwardAPIVolumeFile represents information to create the file containing the pod field\n        downwardApiVolumeFile:: {\n          new():: {},\n          // Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n          withMode(mode):: self + {mode: mode},\n          // Required: Path is  the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'\n          withPath(path):: self + {path: path},\n          mixin:: {\n            // Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.\n            fieldRef:: {\n              local __fieldRefMixin(fieldRef) = {fieldRef+: fieldRef},\n              mixinInstance(fieldRef):: __fieldRefMixin(fieldRef),\n              // Path of the field to select in the specified API version.\n              withFieldPath(fieldPath):: self + __fieldRefMixin({fieldPath: fieldPath}),\n            },\n            fieldRefType:: hidden.core.v1.objectFieldSelector,\n            // Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.\n            resourceFieldRef:: {\n              local __resourceFieldRefMixin(resourceFieldRef) = {resourceFieldRef+: resourceFieldRef},\n              mixinInstance(resourceFieldRef):: __resourceFieldRefMixin(resourceFieldRef),\n              // Container name: required for volumes, optional for env vars\n              withContainerName(containerName):: self + __resourceFieldRefMixin({containerName: containerName}),\n              // Specifies the output format of the exposed resources, defaults to \"1\"\n              divisor:: {\n                local __divisorMixin(divisor) = __resourceFieldRefMixin({divisor+: divisor}),\n                mixinInstance(divisor):: __divisorMixin(divisor),\n              },\n              divisorType:: hidden.core.resource.quantity,\n              // Required: resource to select\n              withResource(resource):: self + __resourceFieldRefMixin({resource: resource}),\n            },\n            resourceFieldRefType:: hidden.core.v1.resourceFieldSelector,\n          },\n        },\n        // DownwardAPIVolumeSource represents a volume containing downward API info. Downward API volumes support ownership management and SELinux relabeling.\n        downwardApiVolumeSource:: {\n          new():: {},\n          // Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n          withDefaultMode(defaultMode):: self + {defaultMode: defaultMode},\n          // Items is a list of downward API volume file\n          withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n          // Items is a list of downward API volume file\n          withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n          itemsType:: hidden.core.v1.downwardApiVolumeFile,\n          mixin:: {\n          },\n        },\n        // Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.\n        emptyDirVolumeSource:: {\n          new():: {},\n          // What type of storage medium should back this directory. The default is \"\" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir\n          withMedium(medium):: self + {medium: medium},\n          mixin:: {\n            // Total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir\n            sizeLimit:: {\n              local __sizeLimitMixin(sizeLimit) = {sizeLimit+: sizeLimit},\n              mixinInstance(sizeLimit):: __sizeLimitMixin(sizeLimit),\n            },\n            sizeLimitType:: hidden.core.resource.quantity,\n          },\n        },\n        // EndpointAddress is a tuple that describes single IP address.\n        endpointAddress:: {\n          new():: {},\n          // The Hostname of this endpoint\n          withHostname(hostname):: self + {hostname: hostname},\n          // The IP of this endpoint. May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16), or link-local multicast ((224.0.0.0/24). IPv6 is also accepted but not fully supported on all platforms. Also, certain kubernetes components, like kube-proxy, are not IPv6 ready.\n          withIp(ip):: self + {ip: ip},\n          // Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node.\n          withNodeName(nodeName):: self + {nodeName: nodeName},\n          mixin:: {\n            // Reference to object providing the endpoint.\n            targetRef:: {\n              local __targetRefMixin(targetRef) = {targetRef+: targetRef},\n              mixinInstance(targetRef):: __targetRefMixin(targetRef),\n              // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\n              withFieldPath(fieldPath):: self + __targetRefMixin({fieldPath: fieldPath}),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __targetRefMixin({name: name}),\n              // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n              withNamespace(namespace):: self + __targetRefMixin({namespace: namespace}),\n              // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n              withResourceVersion(resourceVersion):: self + __targetRefMixin({resourceVersion: resourceVersion}),\n              // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n              withUid(uid):: self + __targetRefMixin({uid: uid}),\n            },\n            targetRefType:: hidden.core.v1.objectReference,\n          },\n        },\n        // EndpointPort is a tuple that describes a single port.\n        endpointPort:: {\n          new():: {},\n          // The name of this port (corresponds to ServicePort.Name). Must be a DNS_LABEL. Optional only if one port is defined.\n          withName(name):: self + {name: name},\n          // The port number of the endpoint.\n          withPort(port):: self + {port: port},\n          // The IP protocol for this port. Must be UDP or TCP. Default is TCP.\n          withProtocol(protocol):: self + {protocol: protocol},\n          mixin:: {\n          },\n        },\n        // EndpointSubset is a group of addresses with a common set of ports. The expanded set of endpoints is the Cartesian product of Addresses x Ports. For example, given:\n        //   {\n        //     Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n        //     Ports:     [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n        //   }\n        // The resulting set of endpoints can be viewed as:\n        //     a: [ 10.10.1.1:8675, 10.10.2.2:8675 ],\n        //     b: [ 10.10.1.1:309, 10.10.2.2:309 ]\n        endpointSubset:: {\n          new():: {},\n          // IP addresses which offer the related ports that are marked as ready. These endpoints should be considered safe for load balancers and clients to utilize.\n          withAddresses(addresses):: self + if std.type(addresses) == \"array\" then {addresses: addresses} else {addresses: [addresses]},\n          // IP addresses which offer the related ports that are marked as ready. These endpoints should be considered safe for load balancers and clients to utilize.\n          withAddressesMixin(addresses):: self + if std.type(addresses) == \"array\" then {addresses+: addresses} else {addresses+: [addresses]},\n          addressesType:: hidden.core.v1.endpointAddress,\n          // IP addresses which offer the related ports but are not currently marked as ready because they have not yet finished starting, have recently failed a readiness check, or have recently failed a liveness check.\n          withNotReadyAddresses(notReadyAddresses):: self + if std.type(notReadyAddresses) == \"array\" then {notReadyAddresses: notReadyAddresses} else {notReadyAddresses: [notReadyAddresses]},\n          // IP addresses which offer the related ports but are not currently marked as ready because they have not yet finished starting, have recently failed a readiness check, or have recently failed a liveness check.\n          withNotReadyAddressesMixin(notReadyAddresses):: self + if std.type(notReadyAddresses) == \"array\" then {notReadyAddresses+: notReadyAddresses} else {notReadyAddresses+: [notReadyAddresses]},\n          notReadyAddressesType:: hidden.core.v1.endpointAddress,\n          // Port numbers available on the related IP addresses.\n          withPorts(ports):: self + if std.type(ports) == \"array\" then {ports: ports} else {ports: [ports]},\n          // Port numbers available on the related IP addresses.\n          withPortsMixin(ports):: self + if std.type(ports) == \"array\" then {ports+: ports} else {ports+: [ports]},\n          portsType:: hidden.core.v1.endpointPort,\n          mixin:: {\n          },\n        },\n        // EnvFromSource represents the source of a set of ConfigMaps\n        envFromSource:: {\n          new():: {},\n          // An optional identifer to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.\n          withPrefix(prefix):: self + {prefix: prefix},\n          mixin:: {\n            // The ConfigMap to select from\n            configMapRef:: {\n              local __configMapRefMixin(configMapRef) = {configMapRef+: configMapRef},\n              mixinInstance(configMapRef):: __configMapRefMixin(configMapRef),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __configMapRefMixin({name: name}),\n              // Specify whether the ConfigMap must be defined\n              withOptional(optional):: self + __configMapRefMixin({optional: optional}),\n            },\n            configMapRefType:: hidden.core.v1.configMapEnvSource,\n            // The Secret to select from\n            secretRef:: {\n              local __secretRefMixin(secretRef) = {secretRef+: secretRef},\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __secretRefMixin({name: name}),\n              // Specify whether the Secret must be defined\n              withOptional(optional):: self + __secretRefMixin({optional: optional}),\n            },\n            secretRefType:: hidden.core.v1.secretEnvSource,\n          },\n        },\n        // EnvVar represents an environment variable present in a Container.\n        envVar:: {\n          new(name, value):: {} + self.withName(name) + self.withValue(value),\n          fromSecretRef(name, secretRefName, secretRefKey):: {} + self.withName(name) + self.mixin.valueFrom.secretKeyRef.withName(secretRefName) + self.mixin.valueFrom.secretKeyRef.withKey(secretRefKey),\n          fromFieldPath(name, fieldPath):: {} + self.withName(name) + self.mixin.valueFrom.fieldRef.withFieldPath(fieldPath),\n          // Name of the environment variable. Must be a C_IDENTIFIER.\n          withName(name):: self + {name: name},\n          // Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to \"\".\n          withValue(value):: self + {value: value},\n          mixin:: {\n            // Source for the environment variable's value. Cannot be used if value is not empty.\n            valueFrom:: {\n              local __valueFromMixin(valueFrom) = {valueFrom+: valueFrom},\n              mixinInstance(valueFrom):: __valueFromMixin(valueFrom),\n              // Selects a key of a ConfigMap.\n              configMapKeyRef:: {\n                local __configMapKeyRefMixin(configMapKeyRef) = __valueFromMixin({configMapKeyRef+: configMapKeyRef}),\n                mixinInstance(configMapKeyRef):: __configMapKeyRefMixin(configMapKeyRef),\n                // The key to select.\n                withKey(key):: self + __configMapKeyRefMixin({key: key}),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __configMapKeyRefMixin({name: name}),\n                // Specify whether the ConfigMap or it's key must be defined\n                withOptional(optional):: self + __configMapKeyRefMixin({optional: optional}),\n              },\n              configMapKeyRefType:: hidden.core.v1.configMapKeySelector,\n              // Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP.\n              fieldRef:: {\n                local __fieldRefMixin(fieldRef) = __valueFromMixin({fieldRef+: fieldRef}),\n                mixinInstance(fieldRef):: __fieldRefMixin(fieldRef),\n                // Path of the field to select in the specified API version.\n                withFieldPath(fieldPath):: self + __fieldRefMixin({fieldPath: fieldPath}),\n              },\n              fieldRefType:: hidden.core.v1.objectFieldSelector,\n              // Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.\n              resourceFieldRef:: {\n                local __resourceFieldRefMixin(resourceFieldRef) = __valueFromMixin({resourceFieldRef+: resourceFieldRef}),\n                mixinInstance(resourceFieldRef):: __resourceFieldRefMixin(resourceFieldRef),\n                // Container name: required for volumes, optional for env vars\n                withContainerName(containerName):: self + __resourceFieldRefMixin({containerName: containerName}),\n                // Specifies the output format of the exposed resources, defaults to \"1\"\n                divisor:: {\n                  local __divisorMixin(divisor) = __resourceFieldRefMixin({divisor+: divisor}),\n                  mixinInstance(divisor):: __divisorMixin(divisor),\n                },\n                divisorType:: hidden.core.resource.quantity,\n                // Required: resource to select\n                withResource(resource):: self + __resourceFieldRefMixin({resource: resource}),\n              },\n              resourceFieldRefType:: hidden.core.v1.resourceFieldSelector,\n              // Selects a key of a secret in the pod's namespace\n              secretKeyRef:: {\n                local __secretKeyRefMixin(secretKeyRef) = __valueFromMixin({secretKeyRef+: secretKeyRef}),\n                mixinInstance(secretKeyRef):: __secretKeyRefMixin(secretKeyRef),\n                // The key of the secret to select from.  Must be a valid secret key.\n                withKey(key):: self + __secretKeyRefMixin({key: key}),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretKeyRefMixin({name: name}),\n                // Specify whether the Secret or it's key must be defined\n                withOptional(optional):: self + __secretKeyRefMixin({optional: optional}),\n              },\n              secretKeyRefType:: hidden.core.v1.secretKeySelector,\n            },\n            valueFromType:: hidden.core.v1.envVarSource,\n          },\n        },\n        // EnvVarSource represents a source for the value of an EnvVar.\n        envVarSource:: {\n          new():: {},\n          mixin:: {\n            // Selects a key of a ConfigMap.\n            configMapKeyRef:: {\n              local __configMapKeyRefMixin(configMapKeyRef) = {configMapKeyRef+: configMapKeyRef},\n              mixinInstance(configMapKeyRef):: __configMapKeyRefMixin(configMapKeyRef),\n              // The key to select.\n              withKey(key):: self + __configMapKeyRefMixin({key: key}),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __configMapKeyRefMixin({name: name}),\n              // Specify whether the ConfigMap or it's key must be defined\n              withOptional(optional):: self + __configMapKeyRefMixin({optional: optional}),\n            },\n            configMapKeyRefType:: hidden.core.v1.configMapKeySelector,\n            // Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP.\n            fieldRef:: {\n              local __fieldRefMixin(fieldRef) = {fieldRef+: fieldRef},\n              mixinInstance(fieldRef):: __fieldRefMixin(fieldRef),\n              // Path of the field to select in the specified API version.\n              withFieldPath(fieldPath):: self + __fieldRefMixin({fieldPath: fieldPath}),\n            },\n            fieldRefType:: hidden.core.v1.objectFieldSelector,\n            // Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.\n            resourceFieldRef:: {\n              local __resourceFieldRefMixin(resourceFieldRef) = {resourceFieldRef+: resourceFieldRef},\n              mixinInstance(resourceFieldRef):: __resourceFieldRefMixin(resourceFieldRef),\n              // Container name: required for volumes, optional for env vars\n              withContainerName(containerName):: self + __resourceFieldRefMixin({containerName: containerName}),\n              // Specifies the output format of the exposed resources, defaults to \"1\"\n              divisor:: {\n                local __divisorMixin(divisor) = __resourceFieldRefMixin({divisor+: divisor}),\n                mixinInstance(divisor):: __divisorMixin(divisor),\n              },\n              divisorType:: hidden.core.resource.quantity,\n              // Required: resource to select\n              withResource(resource):: self + __resourceFieldRefMixin({resource: resource}),\n            },\n            resourceFieldRefType:: hidden.core.v1.resourceFieldSelector,\n            // Selects a key of a secret in the pod's namespace\n            secretKeyRef:: {\n              local __secretKeyRefMixin(secretKeyRef) = {secretKeyRef+: secretKeyRef},\n              mixinInstance(secretKeyRef):: __secretKeyRefMixin(secretKeyRef),\n              // The key of the secret to select from.  Must be a valid secret key.\n              withKey(key):: self + __secretKeyRefMixin({key: key}),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __secretKeyRefMixin({name: name}),\n              // Specify whether the Secret or it's key must be defined\n              withOptional(optional):: self + __secretKeyRefMixin({optional: optional}),\n            },\n            secretKeyRefType:: hidden.core.v1.secretKeySelector,\n          },\n        },\n        // EventSource contains information for an event.\n        eventSource:: {\n          new():: {},\n          // Component from which the event is generated.\n          withComponent(component):: self + {component: component},\n          // Node name on which the event is generated.\n          withHost(host):: self + {host: host},\n          mixin:: {\n          },\n        },\n        // ExecAction describes a \"run in container\" action.\n        execAction:: {\n          new():: {},\n          // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n          withCommand(command):: self + if std.type(command) == \"array\" then {command: command} else {command: [command]},\n          // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n          withCommandMixin(command):: self + if std.type(command) == \"array\" then {command+: command} else {command+: [command]},\n          mixin:: {\n          },\n        },\n        // Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.\n        fcVolumeSource:: {\n          new():: {},\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n          withFsType(fsType):: self + {fsType: fsType},\n          // Required: FC target lun number\n          withLun(lun):: self + {lun: lun},\n          // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n          withReadOnly(readOnly):: self + {readOnly: readOnly},\n          // Required: FC target worldwide names (WWNs)\n          withTargetWwns(targetWwns):: self + if std.type(targetWwns) == \"array\" then {targetWWNs: targetWwns} else {targetWWNs: [targetWwns]},\n          // Required: FC target worldwide names (WWNs)\n          withTargetWwnsMixin(targetWwns):: self + if std.type(targetWwns) == \"array\" then {targetWWNs+: targetWwns} else {targetWWNs+: [targetWwns]},\n          mixin:: {\n          },\n        },\n        // FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.\n        flexVolumeSource:: {\n          new():: {},\n          // Driver is the name of the driver to use for this volume.\n          withDriver(driver):: self + {driver: driver},\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.\n          withFsType(fsType):: self + {fsType: fsType},\n          // Optional: Extra command options if any.\n          withOptions(options):: self + {options: options},\n          // Optional: Extra command options if any.\n          withOptionsMixin(options):: self + {options+: options},\n          // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n          withReadOnly(readOnly):: self + {readOnly: readOnly},\n          mixin:: {\n            // Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.\n            secretRef:: {\n              local __secretRefMixin(secretRef) = {secretRef+: secretRef},\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __secretRefMixin({name: name}),\n            },\n            secretRefType:: hidden.core.v1.localObjectReference,\n          },\n        },\n        // Represents a Flocker volume mounted by the Flocker agent. One and only one of datasetName and datasetUUID should be set. Flocker volumes do not support ownership management or SELinux relabeling.\n        flockerVolumeSource:: {\n          new():: {},\n          // Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated\n          withDatasetName(datasetName):: self + {datasetName: datasetName},\n          // UUID of the dataset. This is unique identifier of a Flocker dataset\n          withDatasetUuid(datasetUuid):: self + {datasetUUID: datasetUuid},\n          mixin:: {\n          },\n        },\n        // Represents a Persistent Disk resource in Google Compute Engine.\n        //\n        // A GCE PD must exist before mounting to a container. The disk must also be in the same GCE project and zone as the kubelet. A GCE PD can only be mounted as read/write once or read-only many times. GCE PDs support ownership management and SELinux relabeling.\n        gcePersistentDiskVolumeSource:: {\n          new():: {},\n          // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n          withFsType(fsType):: self + {fsType: fsType},\n          // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n          withPartition(partition):: self + {partition: partition},\n          // Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n          withPdName(pdName):: self + {pdName: pdName},\n          // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n          withReadOnly(readOnly):: self + {readOnly: readOnly},\n          mixin:: {\n          },\n        },\n        // Represents a volume that is populated with the contents of a git repository. Git repo volumes do not support ownership management. Git repo volumes support SELinux relabeling.\n        gitRepoVolumeSource:: {\n          new():: {},\n          // Target directory name. Must not contain or start with '..'.  If '.' is supplied, the volume directory will be the git repository.  Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name.\n          withDirectory(directory):: self + {directory: directory},\n          // Repository URL\n          withRepository(repository):: self + {repository: repository},\n          // Commit hash for the specified revision.\n          withRevision(revision):: self + {revision: revision},\n          mixin:: {\n          },\n        },\n        // Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.\n        glusterfsVolumeSource:: {\n          new():: {},\n          // EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n          withEndpoints(endpoints):: self + {endpoints: endpoints},\n          // Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n          withPath(path):: self + {path: path},\n          // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n          withReadOnly(readOnly):: self + {readOnly: readOnly},\n          mixin:: {\n          },\n        },\n        // HTTPGetAction describes an action based on HTTP Get requests.\n        httpGetAction:: {\n          new():: {},\n          // Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.\n          withHost(host):: self + {host: host},\n          // Custom headers to set in the request. HTTP allows repeated headers.\n          withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == \"array\" then {httpHeaders: httpHeaders} else {httpHeaders: [httpHeaders]},\n          // Custom headers to set in the request. HTTP allows repeated headers.\n          withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == \"array\" then {httpHeaders+: httpHeaders} else {httpHeaders+: [httpHeaders]},\n          httpHeadersType:: hidden.core.v1.httpHeader,\n          // Path to access on the HTTP server.\n          withPath(path):: self + {path: path},\n          // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n          withPort(port):: {port: port},\n          // Scheme to use for connecting to the host. Defaults to HTTP.\n          withScheme(scheme):: self + {scheme: scheme},\n          mixin:: {\n          },\n        },\n        // HTTPHeader describes a custom header to be used in HTTP probes\n        httpHeader:: {\n          new():: {},\n          // The header field name\n          withName(name):: self + {name: name},\n          // The header field value\n          withValue(value):: self + {value: value},\n          mixin:: {\n          },\n        },\n        // Handler defines a specific action that should be taken\n        handler:: {\n          new():: {},\n          mixin:: {\n            // One and only one of the following should be specified. Exec specifies the action to take.\n            exec:: {\n              local __execMixin(exec) = {exec+: exec},\n              mixinInstance(exec):: __execMixin(exec),\n              // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n              withCommand(command):: self + if std.type(command) == \"array\" then __execMixin({command: command}) else __execMixin({command: [command]}),\n              // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n              withCommandMixin(command):: self + if std.type(command) == \"array\" then __execMixin({command+: command}) else __execMixin({command+: [command]}),\n            },\n            execType:: hidden.core.v1.execAction,\n            // HTTPGet specifies the http request to perform.\n            httpGet:: {\n              local __httpGetMixin(httpGet) = {httpGet+: httpGet},\n              mixinInstance(httpGet):: __httpGetMixin(httpGet),\n              // Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.\n              withHost(host):: self + __httpGetMixin({host: host}),\n              // Custom headers to set in the request. HTTP allows repeated headers.\n              withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == \"array\" then __httpGetMixin({httpHeaders: httpHeaders}) else __httpGetMixin({httpHeaders: [httpHeaders]}),\n              // Custom headers to set in the request. HTTP allows repeated headers.\n              withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == \"array\" then __httpGetMixin({httpHeaders+: httpHeaders}) else __httpGetMixin({httpHeaders+: [httpHeaders]}),\n              httpHeadersType:: hidden.core.v1.httpHeader,\n              // Path to access on the HTTP server.\n              withPath(path):: self + __httpGetMixin({path: path}),\n              // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n              withPort(port):: __httpGetMixin({port: port}),\n              // Scheme to use for connecting to the host. Defaults to HTTP.\n              withScheme(scheme):: self + __httpGetMixin({scheme: scheme}),\n            },\n            httpGetType:: hidden.core.v1.httpGetAction,\n            // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported\n            tcpSocket:: {\n              local __tcpSocketMixin(tcpSocket) = {tcpSocket+: tcpSocket},\n              mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket),\n              // Optional: Host name to connect to, defaults to the pod IP.\n              withHost(host):: self + __tcpSocketMixin({host: host}),\n              // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n              withPort(port):: __tcpSocketMixin({port: port}),\n            },\n            tcpSocketType:: hidden.core.v1.tcpSocketAction,\n          },\n        },\n        // HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod's hosts file.\n        hostAlias:: {\n          new():: {},\n          // Hostnames for the above IP address.\n          withHostnames(hostnames):: self + if std.type(hostnames) == \"array\" then {hostnames: hostnames} else {hostnames: [hostnames]},\n          // Hostnames for the above IP address.\n          withHostnamesMixin(hostnames):: self + if std.type(hostnames) == \"array\" then {hostnames+: hostnames} else {hostnames+: [hostnames]},\n          // IP address of the host file entry.\n          withIp(ip):: self + {ip: ip},\n          mixin:: {\n          },\n        },\n        // Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.\n        hostPathVolumeSource:: {\n          new():: {},\n          // Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\n          withPath(path):: self + {path: path},\n          mixin:: {\n          },\n        },\n        // Represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.\n        iscsiVolumeSource:: {\n          new():: {},\n          // whether support iSCSI Discovery CHAP authentication\n          withChapAuthDiscovery(chapAuthDiscovery):: self + {chapAuthDiscovery: chapAuthDiscovery},\n          // whether support iSCSI Session CHAP authentication\n          withChapAuthSession(chapAuthSession):: self + {chapAuthSession: chapAuthSession},\n          // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi\n          withFsType(fsType):: self + {fsType: fsType},\n          // Target iSCSI Qualified Name.\n          withIqn(iqn):: self + {iqn: iqn},\n          // Optional: Defaults to 'default' (tcp). iSCSI interface name that uses an iSCSI transport.\n          withIscsiInterface(iscsiInterface):: self + {iscsiInterface: iscsiInterface},\n          // iSCSI target lun number.\n          withLun(lun):: self + {lun: lun},\n          // iSCSI target portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n          withPortals(portals):: self + if std.type(portals) == \"array\" then {portals: portals} else {portals: [portals]},\n          // iSCSI target portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n          withPortalsMixin(portals):: self + if std.type(portals) == \"array\" then {portals+: portals} else {portals+: [portals]},\n          // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.\n          withReadOnly(readOnly):: self + {readOnly: readOnly},\n          // iSCSI target portal. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n          withTargetPortal(targetPortal):: self + {targetPortal: targetPortal},\n          mixin:: {\n            // CHAP secret for iSCSI target and initiator authentication\n            secretRef:: {\n              local __secretRefMixin(secretRef) = {secretRef+: secretRef},\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __secretRefMixin({name: name}),\n            },\n            secretRefType:: hidden.core.v1.localObjectReference,\n          },\n        },\n        // Maps a string key to a path within a volume.\n        keyToPath:: {\n          new(key, path):: {} + self.withKey(key) + self.withPath(path),\n          // The key to project.\n          withKey(key):: self + {key: key},\n          // Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n          withMode(mode):: self + {mode: mode},\n          // The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'.\n          withPath(path):: self + {path: path},\n          mixin:: {\n          },\n        },\n        // Lifecycle describes actions that the management system should take in response to container lifecycle events. For the PostStart and PreStop lifecycle handlers, management of the container blocks until the action is complete, unless the container process fails, in which case the handler is aborted.\n        lifecycle:: {\n          new():: {},\n          mixin:: {\n            // PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks\n            postStart:: {\n              local __postStartMixin(postStart) = {postStart+: postStart},\n              mixinInstance(postStart):: __postStartMixin(postStart),\n              // One and only one of the following should be specified. Exec specifies the action to take.\n              exec:: {\n                local __execMixin(exec) = __postStartMixin({exec+: exec}),\n                mixinInstance(exec):: __execMixin(exec),\n                // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                withCommand(command):: self + if std.type(command) == \"array\" then __execMixin({command: command}) else __execMixin({command: [command]}),\n                // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                withCommandMixin(command):: self + if std.type(command) == \"array\" then __execMixin({command+: command}) else __execMixin({command+: [command]}),\n              },\n              execType:: hidden.core.v1.execAction,\n              // HTTPGet specifies the http request to perform.\n              httpGet:: {\n                local __httpGetMixin(httpGet) = __postStartMixin({httpGet+: httpGet}),\n                mixinInstance(httpGet):: __httpGetMixin(httpGet),\n                // Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.\n                withHost(host):: self + __httpGetMixin({host: host}),\n                // Custom headers to set in the request. HTTP allows repeated headers.\n                withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == \"array\" then __httpGetMixin({httpHeaders: httpHeaders}) else __httpGetMixin({httpHeaders: [httpHeaders]}),\n                // Custom headers to set in the request. HTTP allows repeated headers.\n                withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == \"array\" then __httpGetMixin({httpHeaders+: httpHeaders}) else __httpGetMixin({httpHeaders+: [httpHeaders]}),\n                httpHeadersType:: hidden.core.v1.httpHeader,\n                // Path to access on the HTTP server.\n                withPath(path):: self + __httpGetMixin({path: path}),\n                // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                withPort(port):: __httpGetMixin({port: port}),\n                // Scheme to use for connecting to the host. Defaults to HTTP.\n                withScheme(scheme):: self + __httpGetMixin({scheme: scheme}),\n              },\n              httpGetType:: hidden.core.v1.httpGetAction,\n              // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported\n              tcpSocket:: {\n                local __tcpSocketMixin(tcpSocket) = __postStartMixin({tcpSocket+: tcpSocket}),\n                mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket),\n                // Optional: Host name to connect to, defaults to the pod IP.\n                withHost(host):: self + __tcpSocketMixin({host: host}),\n                // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                withPort(port):: __tcpSocketMixin({port: port}),\n              },\n              tcpSocketType:: hidden.core.v1.tcpSocketAction,\n            },\n            postStartType:: hidden.core.v1.handler,\n            // PreStop is called immediately before a container is terminated. The container is terminated after the handler completes. The reason for termination is passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks\n            preStop:: {\n              local __preStopMixin(preStop) = {preStop+: preStop},\n              mixinInstance(preStop):: __preStopMixin(preStop),\n              // One and only one of the following should be specified. Exec specifies the action to take.\n              exec:: {\n                local __execMixin(exec) = __preStopMixin({exec+: exec}),\n                mixinInstance(exec):: __execMixin(exec),\n                // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                withCommand(command):: self + if std.type(command) == \"array\" then __execMixin({command: command}) else __execMixin({command: [command]}),\n                // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n                withCommandMixin(command):: self + if std.type(command) == \"array\" then __execMixin({command+: command}) else __execMixin({command+: [command]}),\n              },\n              execType:: hidden.core.v1.execAction,\n              // HTTPGet specifies the http request to perform.\n              httpGet:: {\n                local __httpGetMixin(httpGet) = __preStopMixin({httpGet+: httpGet}),\n                mixinInstance(httpGet):: __httpGetMixin(httpGet),\n                // Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.\n                withHost(host):: self + __httpGetMixin({host: host}),\n                // Custom headers to set in the request. HTTP allows repeated headers.\n                withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == \"array\" then __httpGetMixin({httpHeaders: httpHeaders}) else __httpGetMixin({httpHeaders: [httpHeaders]}),\n                // Custom headers to set in the request. HTTP allows repeated headers.\n                withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == \"array\" then __httpGetMixin({httpHeaders+: httpHeaders}) else __httpGetMixin({httpHeaders+: [httpHeaders]}),\n                httpHeadersType:: hidden.core.v1.httpHeader,\n                // Path to access on the HTTP server.\n                withPath(path):: self + __httpGetMixin({path: path}),\n                // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                withPort(port):: __httpGetMixin({port: port}),\n                // Scheme to use for connecting to the host. Defaults to HTTP.\n                withScheme(scheme):: self + __httpGetMixin({scheme: scheme}),\n              },\n              httpGetType:: hidden.core.v1.httpGetAction,\n              // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported\n              tcpSocket:: {\n                local __tcpSocketMixin(tcpSocket) = __preStopMixin({tcpSocket+: tcpSocket}),\n                mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket),\n                // Optional: Host name to connect to, defaults to the pod IP.\n                withHost(host):: self + __tcpSocketMixin({host: host}),\n                // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n                withPort(port):: __tcpSocketMixin({port: port}),\n              },\n              tcpSocketType:: hidden.core.v1.tcpSocketAction,\n            },\n            preStopType:: hidden.core.v1.handler,\n          },\n        },\n        // LimitRangeItem defines a min/max usage limit for any resource that matches on kind.\n        limitRangeItem:: {\n          new():: {},\n          // Default resource requirement limit value by resource name if resource limit is omitted.\n          withDefault(default):: self + {default: default},\n          // Default resource requirement limit value by resource name if resource limit is omitted.\n          withDefaultMixin(default):: self + {default+: default},\n          // DefaultRequest is the default resource requirement request value by resource name if resource request is omitted.\n          withDefaultRequest(defaultRequest):: self + {defaultRequest: defaultRequest},\n          // DefaultRequest is the default resource requirement request value by resource name if resource request is omitted.\n          withDefaultRequestMixin(defaultRequest):: self + {defaultRequest+: defaultRequest},\n          // Max usage constraints on this kind by resource name.\n          withMax(max):: self + {max: max},\n          // Max usage constraints on this kind by resource name.\n          withMaxMixin(max):: self + {max+: max},\n          // MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource.\n          withMaxLimitRequestRatio(maxLimitRequestRatio):: self + {maxLimitRequestRatio: maxLimitRequestRatio},\n          // MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource.\n          withMaxLimitRequestRatioMixin(maxLimitRequestRatio):: self + {maxLimitRequestRatio+: maxLimitRequestRatio},\n          // Min usage constraints on this kind by resource name.\n          withMin(min):: self + {min: min},\n          // Min usage constraints on this kind by resource name.\n          withMinMixin(min):: self + {min+: min},\n          // Type of resource that this limit applies to.\n          withType(type):: self + {type: type},\n          mixin:: {\n          },\n        },\n        // LimitRangeSpec defines a min/max usage limit for resources that match on kind.\n        limitRangeSpec:: {\n          new():: {},\n          // Limits is the list of LimitRangeItem objects that are enforced.\n          withLimits(limits):: self + if std.type(limits) == \"array\" then {limits: limits} else {limits: [limits]},\n          // Limits is the list of LimitRangeItem objects that are enforced.\n          withLimitsMixin(limits):: self + if std.type(limits) == \"array\" then {limits+: limits} else {limits+: [limits]},\n          limitsType:: hidden.core.v1.limitRangeItem,\n          mixin:: {\n          },\n        },\n        // LoadBalancerIngress represents the status of a load-balancer ingress point: traffic intended for the service should be sent to an ingress point.\n        loadBalancerIngress:: {\n          new():: {},\n          // Hostname is set for load-balancer ingress points that are DNS based (typically AWS load-balancers)\n          withHostname(hostname):: self + {hostname: hostname},\n          // IP is set for load-balancer ingress points that are IP based (typically GCE or OpenStack load-balancers)\n          withIp(ip):: self + {ip: ip},\n          mixin:: {\n          },\n        },\n        // LoadBalancerStatus represents the status of a load-balancer.\n        loadBalancerStatus:: {\n          new():: {},\n          // Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.\n          withIngress(ingress):: self + if std.type(ingress) == \"array\" then {ingress: ingress} else {ingress: [ingress]},\n          // Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.\n          withIngressMixin(ingress):: self + if std.type(ingress) == \"array\" then {ingress+: ingress} else {ingress+: [ingress]},\n          ingressType:: hidden.core.v1.loadBalancerIngress,\n          mixin:: {\n          },\n        },\n        // LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.\n        localObjectReference:: {\n          new():: {},\n          // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n          withName(name):: self + {name: name},\n          mixin:: {\n          },\n        },\n        // Local represents directly-attached storage with node affinity\n        localVolumeSource:: {\n          new():: {},\n          // The full path to the volume on the node For alpha, this path must be a directory Once block as a source is supported, then this path can point to a block device\n          withPath(path):: self + {path: path},\n          mixin:: {\n          },\n        },\n        // Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling.\n        nfsVolumeSource:: {\n          new():: {},\n          // Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n          withPath(path):: self + {path: path},\n          // ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n          withReadOnly(readOnly):: self + {readOnly: readOnly},\n          // Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n          withServer(server):: self + {server: server},\n          mixin:: {\n          },\n        },\n        // NamespaceSpec describes the attributes on a Namespace.\n        namespaceSpec:: {\n          new():: {},\n          // Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://git.k8s.io/community/contributors/design-proposals/namespaces.md#finalizers\n          withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then {finalizers: finalizers} else {finalizers: [finalizers]},\n          // Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://git.k8s.io/community/contributors/design-proposals/namespaces.md#finalizers\n          withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then {finalizers+: finalizers} else {finalizers+: [finalizers]},\n          mixin:: {\n          },\n        },\n        // NamespaceStatus is information about the current status of a Namespace.\n        namespaceStatus:: {\n          new():: {},\n          // Phase is the current lifecycle phase of the namespace. More info: https://git.k8s.io/community/contributors/design-proposals/namespaces.md#phases\n          withPhase(phase):: self + {phase: phase},\n          mixin:: {\n          },\n        },\n        // NodeAddress contains information for the node's address.\n        nodeAddress:: {\n          new():: {},\n          // The node address.\n          withAddress(address):: self + {address: address},\n          // Node address type, one of Hostname, ExternalIP or InternalIP.\n          withType(type):: self + {type: type},\n          mixin:: {\n          },\n        },\n        // Node affinity is a group of node affinity scheduling rules.\n        nodeAffinity:: {\n          new():: {},\n          // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n          withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then {preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution} else {preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]},\n          // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n          withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then {preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution} else {preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]},\n          preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n          mixin:: {\n            // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n            requiredDuringSchedulingIgnoredDuringExecution:: {\n              local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = {requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution},\n              mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n              // Required. A list of node selector terms. The terms are ORed.\n              withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n              // Required. A list of node selector terms. The terms are ORed.\n              withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n              nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n            },\n            requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n          },\n        },\n        // NodeCondition contains condition information for a node.\n        nodeCondition:: {\n          new():: {},\n          // Human readable message indicating details about last transition.\n          withMessage(message):: self + {message: message},\n          // (brief) reason for the condition's last transition.\n          withReason(reason):: self + {reason: reason},\n          // Type of node condition.\n          withType(type):: self + {type: type},\n          mixin:: {\n            // Last time we got an update on a given condition.\n            lastHeartbeatTime:: {\n              local __lastHeartbeatTimeMixin(lastHeartbeatTime) = {lastHeartbeatTime+: lastHeartbeatTime},\n              mixinInstance(lastHeartbeatTime):: __lastHeartbeatTimeMixin(lastHeartbeatTime),\n            },\n            lastHeartbeatTimeType:: hidden.meta.v1.time,\n            // Last time the condition transit from one status to another.\n            lastTransitionTime:: {\n              local __lastTransitionTimeMixin(lastTransitionTime) = {lastTransitionTime+: lastTransitionTime},\n              mixinInstance(lastTransitionTime):: __lastTransitionTimeMixin(lastTransitionTime),\n            },\n            lastTransitionTimeType:: hidden.meta.v1.time,\n          },\n        },\n        // NodeDaemonEndpoints lists ports opened by daemons running on the Node.\n        nodeDaemonEndpoints:: {\n          new():: {},\n          mixin:: {\n            // Endpoint on which Kubelet is listening.\n            kubeletEndpoint:: {\n              local __kubeletEndpointMixin(kubeletEndpoint) = {kubeletEndpoint+: kubeletEndpoint},\n              mixinInstance(kubeletEndpoint):: __kubeletEndpointMixin(kubeletEndpoint),\n              // Port number of the given endpoint.\n              withPort(port):: self + __kubeletEndpointMixin({Port: port}),\n            },\n            kubeletEndpointType:: hidden.core.v1.daemonEndpoint,\n          },\n        },\n        // A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.\n        nodeSelector:: {\n          new():: {},\n          // Required. A list of node selector terms. The terms are ORed.\n          withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then {nodeSelectorTerms: nodeSelectorTerms} else {nodeSelectorTerms: [nodeSelectorTerms]},\n          // Required. A list of node selector terms. The terms are ORed.\n          withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then {nodeSelectorTerms+: nodeSelectorTerms} else {nodeSelectorTerms+: [nodeSelectorTerms]},\n          nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n          mixin:: {\n          },\n        },\n        // A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.\n        nodeSelectorRequirement:: {\n          new():: {},\n          // The label key that the selector applies to.\n          withKey(key):: self + {key: key},\n          // Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.\n          withOperator(operator):: self + {operator: operator},\n          // An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.\n          withValues(values):: self + if std.type(values) == \"array\" then {values: values} else {values: [values]},\n          // An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.\n          withValuesMixin(values):: self + if std.type(values) == \"array\" then {values+: values} else {values+: [values]},\n          mixin:: {\n          },\n        },\n        // A null or empty node selector term matches no objects.\n        nodeSelectorTerm:: {\n          new():: {},\n          // Required. A list of node selector requirements. The requirements are ANDed.\n          withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then {matchExpressions: matchExpressions} else {matchExpressions: [matchExpressions]},\n          // Required. A list of node selector requirements. The requirements are ANDed.\n          withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then {matchExpressions+: matchExpressions} else {matchExpressions+: [matchExpressions]},\n          matchExpressionsType:: hidden.core.v1.nodeSelectorRequirement,\n          mixin:: {\n          },\n        },\n        // NodeSpec describes the attributes that a node is created with.\n        nodeSpec:: {\n          new():: {},\n          // External ID of the node assigned by some machine database (e.g. a cloud provider). Deprecated.\n          withExternalId(externalId):: self + {externalID: externalId},\n          // PodCIDR represents the pod IP range assigned to the node.\n          withPodCidr(podCidr):: self + {podCIDR: podCidr},\n          // ID of the node assigned by the cloud provider in the format: <ProviderName>://<ProviderSpecificNodeID>\n          withProviderId(providerId):: self + {providerID: providerId},\n          // If specified, the node's taints.\n          withTaints(taints):: self + if std.type(taints) == \"array\" then {taints: taints} else {taints: [taints]},\n          // If specified, the node's taints.\n          withTaintsMixin(taints):: self + if std.type(taints) == \"array\" then {taints+: taints} else {taints+: [taints]},\n          taintsType:: hidden.core.v1.taint,\n          // Unschedulable controls node schedulability of new pods. By default, node is schedulable. More info: https://kubernetes.io/docs/concepts/nodes/node/#manual-node-administration\n          withUnschedulable(unschedulable):: self + {unschedulable: unschedulable},\n          mixin:: {\n          },\n        },\n        // NodeStatus is information about the current status of a node.\n        nodeStatus:: {\n          new():: {},\n          // List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses\n          withAddresses(addresses):: self + if std.type(addresses) == \"array\" then {addresses: addresses} else {addresses: [addresses]},\n          // List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses\n          withAddressesMixin(addresses):: self + if std.type(addresses) == \"array\" then {addresses+: addresses} else {addresses+: [addresses]},\n          addressesType:: hidden.core.v1.nodeAddress,\n          // Allocatable represents the resources of a node that are available for scheduling. Defaults to Capacity.\n          withAllocatable(allocatable):: self + {allocatable: allocatable},\n          // Allocatable represents the resources of a node that are available for scheduling. Defaults to Capacity.\n          withAllocatableMixin(allocatable):: self + {allocatable+: allocatable},\n          // Capacity represents the total resources of a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity\n          withCapacity(capacity):: self + {capacity: capacity},\n          // Capacity represents the total resources of a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity\n          withCapacityMixin(capacity):: self + {capacity+: capacity},\n          // Conditions is an array of current observed node conditions. More info: https://kubernetes.io/docs/concepts/nodes/node/#condition\n          withConditions(conditions):: self + if std.type(conditions) == \"array\" then {conditions: conditions} else {conditions: [conditions]},\n          // Conditions is an array of current observed node conditions. More info: https://kubernetes.io/docs/concepts/nodes/node/#condition\n          withConditionsMixin(conditions):: self + if std.type(conditions) == \"array\" then {conditions+: conditions} else {conditions+: [conditions]},\n          conditionsType:: hidden.core.v1.nodeCondition,\n          // List of container images on this node\n          withImages(images):: self + if std.type(images) == \"array\" then {images: images} else {images: [images]},\n          // List of container images on this node\n          withImagesMixin(images):: self + if std.type(images) == \"array\" then {images+: images} else {images+: [images]},\n          imagesType:: hidden.core.v1.containerImage,\n          // NodePhase is the recently observed lifecycle phase of the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#phase The field is never populated, and now is deprecated.\n          withPhase(phase):: self + {phase: phase},\n          // List of volumes that are attached to the node.\n          withVolumesAttached(volumesAttached):: self + if std.type(volumesAttached) == \"array\" then {volumesAttached: volumesAttached} else {volumesAttached: [volumesAttached]},\n          // List of volumes that are attached to the node.\n          withVolumesAttachedMixin(volumesAttached):: self + if std.type(volumesAttached) == \"array\" then {volumesAttached+: volumesAttached} else {volumesAttached+: [volumesAttached]},\n          volumesAttachedType:: hidden.core.v1.attachedVolume,\n          // List of attachable volumes in use (mounted) by the node.\n          withVolumesInUse(volumesInUse):: self + if std.type(volumesInUse) == \"array\" then {volumesInUse: volumesInUse} else {volumesInUse: [volumesInUse]},\n          // List of attachable volumes in use (mounted) by the node.\n          withVolumesInUseMixin(volumesInUse):: self + if std.type(volumesInUse) == \"array\" then {volumesInUse+: volumesInUse} else {volumesInUse+: [volumesInUse]},\n          mixin:: {\n            // Endpoints of daemons running on the Node.\n            daemonEndpoints:: {\n              local __daemonEndpointsMixin(daemonEndpoints) = {daemonEndpoints+: daemonEndpoints},\n              mixinInstance(daemonEndpoints):: __daemonEndpointsMixin(daemonEndpoints),\n              // Endpoint on which Kubelet is listening.\n              kubeletEndpoint:: {\n                local __kubeletEndpointMixin(kubeletEndpoint) = __daemonEndpointsMixin({kubeletEndpoint+: kubeletEndpoint}),\n                mixinInstance(kubeletEndpoint):: __kubeletEndpointMixin(kubeletEndpoint),\n                // Port number of the given endpoint.\n                withPort(port):: self + __kubeletEndpointMixin({Port: port}),\n              },\n              kubeletEndpointType:: hidden.core.v1.daemonEndpoint,\n            },\n            daemonEndpointsType:: hidden.core.v1.nodeDaemonEndpoints,\n            // Set of ids/uuids to uniquely identify the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#info\n            nodeInfo:: {\n              local __nodeInfoMixin(nodeInfo) = {nodeInfo+: nodeInfo},\n              mixinInstance(nodeInfo):: __nodeInfoMixin(nodeInfo),\n              // The Architecture reported by the node\n              withArchitecture(architecture):: self + __nodeInfoMixin({architecture: architecture}),\n              // Boot ID reported by the node.\n              withBootId(bootId):: self + __nodeInfoMixin({bootID: bootId}),\n              // ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0).\n              withContainerRuntimeVersion(containerRuntimeVersion):: self + __nodeInfoMixin({containerRuntimeVersion: containerRuntimeVersion}),\n              // Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64).\n              withKernelVersion(kernelVersion):: self + __nodeInfoMixin({kernelVersion: kernelVersion}),\n              // KubeProxy Version reported by the node.\n              withKubeProxyVersion(kubeProxyVersion):: self + __nodeInfoMixin({kubeProxyVersion: kubeProxyVersion}),\n              // Kubelet Version reported by the node.\n              withKubeletVersion(kubeletVersion):: self + __nodeInfoMixin({kubeletVersion: kubeletVersion}),\n              // MachineID reported by the node. For unique machine identification in the cluster this field is preferred. Learn more from man(5) machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html\n              withMachineId(machineId):: self + __nodeInfoMixin({machineID: machineId}),\n              // The Operating System reported by the node\n              withOperatingSystem(operatingSystem):: self + __nodeInfoMixin({operatingSystem: operatingSystem}),\n              // OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)).\n              withOsImage(osImage):: self + __nodeInfoMixin({osImage: osImage}),\n              // SystemUUID reported by the node. For unique machine identification MachineID is preferred. This field is specific to Red Hat hosts https://access.redhat.com/documentation/en-US/Red_Hat_Subscription_Management/1/html/RHSM/getting-system-uuid.html\n              withSystemUuid(systemUuid):: self + __nodeInfoMixin({systemUUID: systemUuid}),\n            },\n            nodeInfoType:: hidden.core.v1.nodeSystemInfo,\n          },\n        },\n        // NodeSystemInfo is a set of ids/uuids to uniquely identify the node.\n        nodeSystemInfo:: {\n          new():: {},\n          // The Architecture reported by the node\n          withArchitecture(architecture):: self + {architecture: architecture},\n          // Boot ID reported by the node.\n          withBootId(bootId):: self + {bootID: bootId},\n          // ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0).\n          withContainerRuntimeVersion(containerRuntimeVersion):: self + {containerRuntimeVersion: containerRuntimeVersion},\n          // Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64).\n          withKernelVersion(kernelVersion):: self + {kernelVersion: kernelVersion},\n          // KubeProxy Version reported by the node.\n          withKubeProxyVersion(kubeProxyVersion):: self + {kubeProxyVersion: kubeProxyVersion},\n          // Kubelet Version reported by the node.\n          withKubeletVersion(kubeletVersion):: self + {kubeletVersion: kubeletVersion},\n          // MachineID reported by the node. For unique machine identification in the cluster this field is preferred. Learn more from man(5) machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html\n          withMachineId(machineId):: self + {machineID: machineId},\n          // The Operating System reported by the node\n          withOperatingSystem(operatingSystem):: self + {operatingSystem: operatingSystem},\n          // OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)).\n          withOsImage(osImage):: self + {osImage: osImage},\n          // SystemUUID reported by the node. For unique machine identification MachineID is preferred. This field is specific to Red Hat hosts https://access.redhat.com/documentation/en-US/Red_Hat_Subscription_Management/1/html/RHSM/getting-system-uuid.html\n          withSystemUuid(systemUuid):: self + {systemUUID: systemUuid},\n          mixin:: {\n          },\n        },\n        // ObjectFieldSelector selects an APIVersioned field of an object.\n        objectFieldSelector:: {\n          new():: {},\n          // Path of the field to select in the specified API version.\n          withFieldPath(fieldPath):: self + {fieldPath: fieldPath},\n          mixin:: {\n          },\n        },\n        // ObjectReference contains enough information to let you inspect or modify the referred object.\n        objectReference:: {\n          new():: {},\n          // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\n          withFieldPath(fieldPath):: self + {fieldPath: fieldPath},\n          // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n          withName(name):: self + {name: name},\n          // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n          withNamespace(namespace):: self + {namespace: namespace},\n          // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n          withResourceVersion(resourceVersion):: self + {resourceVersion: resourceVersion},\n          // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n          withUid(uid):: self + {uid: uid},\n          mixin:: {\n          },\n        },\n        // PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes\n        persistentVolumeClaimSpec:: {\n          new():: {},\n          // AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1\n          withAccessModes(accessModes):: self + if std.type(accessModes) == \"array\" then {accessModes: accessModes} else {accessModes: [accessModes]},\n          // AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1\n          withAccessModesMixin(accessModes):: self + if std.type(accessModes) == \"array\" then {accessModes+: accessModes} else {accessModes+: [accessModes]},\n          // Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1\n          withStorageClassName(storageClassName):: self + {storageClassName: storageClassName},\n          // VolumeName is the binding reference to the PersistentVolume backing this claim.\n          withVolumeName(volumeName):: self + {volumeName: volumeName},\n          mixin:: {\n            // Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources\n            resources:: {\n              local __resourcesMixin(resources) = {resources+: resources},\n              mixinInstance(resources):: __resourcesMixin(resources),\n              // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withLimits(limits):: self + __resourcesMixin({limits: limits}),\n              // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withLimitsMixin(limits):: self + __resourcesMixin({limits+: limits}),\n              // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withRequests(requests):: self + __resourcesMixin({requests: requests}),\n              // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n              withRequestsMixin(requests):: self + __resourcesMixin({requests+: requests}),\n            },\n            resourcesType:: hidden.core.v1.resourceRequirements,\n            // A label query over volumes to consider for binding.\n            selector:: {\n              local __selectorMixin(selector) = {selector+: selector},\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n          },\n        },\n        // PersistentVolumeClaimStatus is the current status of a persistent volume claim.\n        persistentVolumeClaimStatus:: {\n          new():: {},\n          // AccessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1\n          withAccessModes(accessModes):: self + if std.type(accessModes) == \"array\" then {accessModes: accessModes} else {accessModes: [accessModes]},\n          // AccessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1\n          withAccessModesMixin(accessModes):: self + if std.type(accessModes) == \"array\" then {accessModes+: accessModes} else {accessModes+: [accessModes]},\n          // Represents the actual resources of the underlying volume.\n          withCapacity(capacity):: self + {capacity: capacity},\n          // Represents the actual resources of the underlying volume.\n          withCapacityMixin(capacity):: self + {capacity+: capacity},\n          // Phase represents the current phase of PersistentVolumeClaim.\n          withPhase(phase):: self + {phase: phase},\n          mixin:: {\n          },\n        },\n        // PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. This volume finds the bound PV and mounts that volume for the pod. A PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another type of volume that is owned by someone else (the system).\n        persistentVolumeClaimVolumeSource:: {\n          new():: {},\n          // ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\n          withClaimName(claimName):: self + {claimName: claimName},\n          // Will force the ReadOnly setting in VolumeMounts. Default false.\n          withReadOnly(readOnly):: self + {readOnly: readOnly},\n          mixin:: {\n          },\n        },\n        // PersistentVolumeSpec is the specification of a persistent volume.\n        persistentVolumeSpec:: {\n          new():: {},\n          // AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes\n          withAccessModes(accessModes):: self + if std.type(accessModes) == \"array\" then {accessModes: accessModes} else {accessModes: [accessModes]},\n          // AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes\n          withAccessModesMixin(accessModes):: self + if std.type(accessModes) == \"array\" then {accessModes+: accessModes} else {accessModes+: [accessModes]},\n          // A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity\n          withCapacity(capacity):: self + {capacity: capacity},\n          // A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity\n          withCapacityMixin(capacity):: self + {capacity+: capacity},\n          // What happens to a persistent volume when released from its claim. Valid options are Retain (default) and Recycle. Recycling must be supported by the volume plugin underlying this persistent volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming\n          withPersistentVolumeReclaimPolicy(persistentVolumeReclaimPolicy):: self + {persistentVolumeReclaimPolicy: persistentVolumeReclaimPolicy},\n          // Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.\n          withStorageClassName(storageClassName):: self + {storageClassName: storageClassName},\n          mixin:: {\n            // AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n            awsElasticBlockStore:: {\n              local __awsElasticBlockStoreMixin(awsElasticBlockStore) = {awsElasticBlockStore+: awsElasticBlockStore},\n              mixinInstance(awsElasticBlockStore):: __awsElasticBlockStoreMixin(awsElasticBlockStore),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n              withFsType(fsType):: self + __awsElasticBlockStoreMixin({fsType: fsType}),\n              // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty).\n              withPartition(partition):: self + __awsElasticBlockStoreMixin({partition: partition}),\n              // Specify \"true\" to force and set the ReadOnly property in VolumeMounts to \"true\". If omitted, the default is \"false\". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n              withReadOnly(readOnly):: self + __awsElasticBlockStoreMixin({readOnly: readOnly}),\n              // Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n              withVolumeId(volumeId):: self + __awsElasticBlockStoreMixin({volumeID: volumeId}),\n            },\n            awsElasticBlockStoreType:: hidden.core.v1.awsElasticBlockStoreVolumeSource,\n            // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.\n            azureDisk:: {\n              local __azureDiskMixin(azureDisk) = {azureDisk+: azureDisk},\n              mixinInstance(azureDisk):: __azureDiskMixin(azureDisk),\n              // Host Caching mode: None, Read Only, Read Write.\n              withCachingMode(cachingMode):: self + __azureDiskMixin({cachingMode: cachingMode}),\n              // The Name of the data disk in the blob storage\n              withDiskName(diskName):: self + __azureDiskMixin({diskName: diskName}),\n              // The URI the data disk in the blob storage\n              withDiskUri(diskUri):: self + __azureDiskMixin({diskURI: diskUri}),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __azureDiskMixin({fsType: fsType}),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __azureDiskMixin({readOnly: readOnly}),\n            },\n            azureDiskType:: hidden.core.v1.azureDiskVolumeSource,\n            // AzureFile represents an Azure File Service mount on the host and bind mount to the pod.\n            azureFile:: {\n              local __azureFileMixin(azureFile) = {azureFile+: azureFile},\n              mixinInstance(azureFile):: __azureFileMixin(azureFile),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __azureFileMixin({readOnly: readOnly}),\n              // the name of secret that contains Azure Storage Account Name and Key\n              withSecretName(secretName):: self + __azureFileMixin({secretName: secretName}),\n              // Share Name\n              withShareName(shareName):: self + __azureFileMixin({shareName: shareName}),\n            },\n            azureFileType:: hidden.core.v1.azureFileVolumeSource,\n            // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime\n            cephfs:: {\n              local __cephfsMixin(cephfs) = {cephfs+: cephfs},\n              mixinInstance(cephfs):: __cephfsMixin(cephfs),\n              // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withMonitors(monitors):: self + if std.type(monitors) == \"array\" then __cephfsMixin({monitors: monitors}) else __cephfsMixin({monitors: [monitors]}),\n              // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withMonitorsMixin(monitors):: self + if std.type(monitors) == \"array\" then __cephfsMixin({monitors+: monitors}) else __cephfsMixin({monitors+: [monitors]}),\n              // Optional: Used as the mounted root, rather than the full Ceph tree, default is /\n              withPath(path):: self + __cephfsMixin({path: path}),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withReadOnly(readOnly):: self + __cephfsMixin({readOnly: readOnly}),\n              // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withSecretFile(secretFile):: self + __cephfsMixin({secretFile: secretFile}),\n              // Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __cephfsMixin({secretRef+: secretRef}),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({name: name}),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n              // Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withUser(user):: self + __cephfsMixin({user: user}),\n            },\n            cephfsType:: hidden.core.v1.cephFsVolumeSource,\n            // Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n            cinder:: {\n              local __cinderMixin(cinder) = {cinder+: cinder},\n              mixinInstance(cinder):: __cinderMixin(cinder),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n              withFsType(fsType):: self + __cinderMixin({fsType: fsType}),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n              withReadOnly(readOnly):: self + __cinderMixin({readOnly: readOnly}),\n              // volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n              withVolumeId(volumeId):: self + __cinderMixin({volumeID: volumeId}),\n            },\n            cinderType:: hidden.core.v1.cinderVolumeSource,\n            // ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding\n            claimRef:: {\n              local __claimRefMixin(claimRef) = {claimRef+: claimRef},\n              mixinInstance(claimRef):: __claimRefMixin(claimRef),\n              // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\n              withFieldPath(fieldPath):: self + __claimRefMixin({fieldPath: fieldPath}),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __claimRefMixin({name: name}),\n              // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n              withNamespace(namespace):: self + __claimRefMixin({namespace: namespace}),\n              // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n              withResourceVersion(resourceVersion):: self + __claimRefMixin({resourceVersion: resourceVersion}),\n              // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n              withUid(uid):: self + __claimRefMixin({uid: uid}),\n            },\n            claimRefType:: hidden.core.v1.objectReference,\n            // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.\n            fc:: {\n              local __fcMixin(fc) = {fc+: fc},\n              mixinInstance(fc):: __fcMixin(fc),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __fcMixin({fsType: fsType}),\n              // Required: FC target lun number\n              withLun(lun):: self + __fcMixin({lun: lun}),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __fcMixin({readOnly: readOnly}),\n              // Required: FC target worldwide names (WWNs)\n              withTargetWwns(targetWwns):: self + if std.type(targetWwns) == \"array\" then __fcMixin({targetWWNs: targetWwns}) else __fcMixin({targetWWNs: [targetWwns]}),\n              // Required: FC target worldwide names (WWNs)\n              withTargetWwnsMixin(targetWwns):: self + if std.type(targetWwns) == \"array\" then __fcMixin({targetWWNs+: targetWwns}) else __fcMixin({targetWWNs+: [targetWwns]}),\n            },\n            fcType:: hidden.core.v1.fcVolumeSource,\n            // FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.\n            flexVolume:: {\n              local __flexVolumeMixin(flexVolume) = {flexVolume+: flexVolume},\n              mixinInstance(flexVolume):: __flexVolumeMixin(flexVolume),\n              // Driver is the name of the driver to use for this volume.\n              withDriver(driver):: self + __flexVolumeMixin({driver: driver}),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.\n              withFsType(fsType):: self + __flexVolumeMixin({fsType: fsType}),\n              // Optional: Extra command options if any.\n              withOptions(options):: self + __flexVolumeMixin({options: options}),\n              // Optional: Extra command options if any.\n              withOptionsMixin(options):: self + __flexVolumeMixin({options+: options}),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __flexVolumeMixin({readOnly: readOnly}),\n              // Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __flexVolumeMixin({secretRef+: secretRef}),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({name: name}),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n            },\n            flexVolumeType:: hidden.core.v1.flexVolumeSource,\n            // Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running\n            flocker:: {\n              local __flockerMixin(flocker) = {flocker+: flocker},\n              mixinInstance(flocker):: __flockerMixin(flocker),\n              // Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated\n              withDatasetName(datasetName):: self + __flockerMixin({datasetName: datasetName}),\n              // UUID of the dataset. This is unique identifier of a Flocker dataset\n              withDatasetUuid(datasetUuid):: self + __flockerMixin({datasetUUID: datasetUuid}),\n            },\n            flockerType:: hidden.core.v1.flockerVolumeSource,\n            // GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n            gcePersistentDisk:: {\n              local __gcePersistentDiskMixin(gcePersistentDisk) = {gcePersistentDisk+: gcePersistentDisk},\n              mixinInstance(gcePersistentDisk):: __gcePersistentDiskMixin(gcePersistentDisk),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withFsType(fsType):: self + __gcePersistentDiskMixin({fsType: fsType}),\n              // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withPartition(partition):: self + __gcePersistentDiskMixin({partition: partition}),\n              // Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withPdName(pdName):: self + __gcePersistentDiskMixin({pdName: pdName}),\n              // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withReadOnly(readOnly):: self + __gcePersistentDiskMixin({readOnly: readOnly}),\n            },\n            gcePersistentDiskType:: hidden.core.v1.gcePersistentDiskVolumeSource,\n            // Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md\n            glusterfs:: {\n              local __glusterfsMixin(glusterfs) = {glusterfs+: glusterfs},\n              mixinInstance(glusterfs):: __glusterfsMixin(glusterfs),\n              // EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n              withEndpoints(endpoints):: self + __glusterfsMixin({endpoints: endpoints}),\n              // Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n              withPath(path):: self + __glusterfsMixin({path: path}),\n              // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n              withReadOnly(readOnly):: self + __glusterfsMixin({readOnly: readOnly}),\n            },\n            glusterfsType:: hidden.core.v1.glusterfsVolumeSource,\n            // HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\n            hostPath:: {\n              local __hostPathMixin(hostPath) = {hostPath+: hostPath},\n              mixinInstance(hostPath):: __hostPathMixin(hostPath),\n              // Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\n              withPath(path):: self + __hostPathMixin({path: path}),\n            },\n            hostPathType:: hidden.core.v1.hostPathVolumeSource,\n            // ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin.\n            iscsi:: {\n              local __iscsiMixin(iscsi) = {iscsi+: iscsi},\n              mixinInstance(iscsi):: __iscsiMixin(iscsi),\n              // whether support iSCSI Discovery CHAP authentication\n              withChapAuthDiscovery(chapAuthDiscovery):: self + __iscsiMixin({chapAuthDiscovery: chapAuthDiscovery}),\n              // whether support iSCSI Session CHAP authentication\n              withChapAuthSession(chapAuthSession):: self + __iscsiMixin({chapAuthSession: chapAuthSession}),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi\n              withFsType(fsType):: self + __iscsiMixin({fsType: fsType}),\n              // Target iSCSI Qualified Name.\n              withIqn(iqn):: self + __iscsiMixin({iqn: iqn}),\n              // Optional: Defaults to 'default' (tcp). iSCSI interface name that uses an iSCSI transport.\n              withIscsiInterface(iscsiInterface):: self + __iscsiMixin({iscsiInterface: iscsiInterface}),\n              // iSCSI target lun number.\n              withLun(lun):: self + __iscsiMixin({lun: lun}),\n              // iSCSI target portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n              withPortals(portals):: self + if std.type(portals) == \"array\" then __iscsiMixin({portals: portals}) else __iscsiMixin({portals: [portals]}),\n              // iSCSI target portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n              withPortalsMixin(portals):: self + if std.type(portals) == \"array\" then __iscsiMixin({portals+: portals}) else __iscsiMixin({portals+: [portals]}),\n              // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.\n              withReadOnly(readOnly):: self + __iscsiMixin({readOnly: readOnly}),\n              // CHAP secret for iSCSI target and initiator authentication\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __iscsiMixin({secretRef+: secretRef}),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({name: name}),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n              // iSCSI target portal. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n              withTargetPortal(targetPortal):: self + __iscsiMixin({targetPortal: targetPortal}),\n            },\n            iscsiType:: hidden.core.v1.iscsiVolumeSource,\n            // Local represents directly-attached storage with node affinity\n            localStorage:: {\n              local __localStorageMixin(localStorage) = {\"local\"+: localStorage},\n              mixinInstance(localStorage):: __localStorageMixin(localStorage),\n              // The full path to the volume on the node For alpha, this path must be a directory Once block as a source is supported, then this path can point to a block device\n              withPath(path):: self + __localStorageMixin({path: path}),\n            },\n            localStorageType:: hidden.core.v1.localVolumeSource,\n            // NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n            nfs:: {\n              local __nfsMixin(nfs) = {nfs+: nfs},\n              mixinInstance(nfs):: __nfsMixin(nfs),\n              // Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n              withPath(path):: self + __nfsMixin({path: path}),\n              // ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n              withReadOnly(readOnly):: self + __nfsMixin({readOnly: readOnly}),\n              // Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n              withServer(server):: self + __nfsMixin({server: server}),\n            },\n            nfsType:: hidden.core.v1.nfsVolumeSource,\n            // PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine\n            photonPersistentDisk:: {\n              local __photonPersistentDiskMixin(photonPersistentDisk) = {photonPersistentDisk+: photonPersistentDisk},\n              mixinInstance(photonPersistentDisk):: __photonPersistentDiskMixin(photonPersistentDisk),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __photonPersistentDiskMixin({fsType: fsType}),\n              // ID that identifies Photon Controller persistent disk\n              withPdId(pdId):: self + __photonPersistentDiskMixin({pdID: pdId}),\n            },\n            photonPersistentDiskType:: hidden.core.v1.photonPersistentDiskVolumeSource,\n            // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine\n            portworxVolume:: {\n              local __portworxVolumeMixin(portworxVolume) = {portworxVolume+: portworxVolume},\n              mixinInstance(portworxVolume):: __portworxVolumeMixin(portworxVolume),\n              // FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __portworxVolumeMixin({fsType: fsType}),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __portworxVolumeMixin({readOnly: readOnly}),\n              // VolumeID uniquely identifies a Portworx volume\n              withVolumeId(volumeId):: self + __portworxVolumeMixin({volumeID: volumeId}),\n            },\n            portworxVolumeType:: hidden.core.v1.portworxVolumeSource,\n            // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime\n            quobyte:: {\n              local __quobyteMixin(quobyte) = {quobyte+: quobyte},\n              mixinInstance(quobyte):: __quobyteMixin(quobyte),\n              // Group to map volume access to Default is no group\n              withGroup(group):: self + __quobyteMixin({group: group}),\n              // ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.\n              withReadOnly(readOnly):: self + __quobyteMixin({readOnly: readOnly}),\n              // Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes\n              withRegistry(registry):: self + __quobyteMixin({registry: registry}),\n              // User to map volume access to Defaults to serivceaccount user\n              withUser(user):: self + __quobyteMixin({user: user}),\n              // Volume is a string that references an already created Quobyte volume by name.\n              withVolume(volume):: self + __quobyteMixin({volume: volume}),\n            },\n            quobyteType:: hidden.core.v1.quobyteVolumeSource,\n            // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md\n            rbd:: {\n              local __rbdMixin(rbd) = {rbd+: rbd},\n              mixinInstance(rbd):: __rbdMixin(rbd),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd\n              withFsType(fsType):: self + __rbdMixin({fsType: fsType}),\n              // The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withImage(image):: self + __rbdMixin({image: image}),\n              // Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withKeyring(keyring):: self + __rbdMixin({keyring: keyring}),\n              // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withMonitors(monitors):: self + if std.type(monitors) == \"array\" then __rbdMixin({monitors: monitors}) else __rbdMixin({monitors: [monitors]}),\n              // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withMonitorsMixin(monitors):: self + if std.type(monitors) == \"array\" then __rbdMixin({monitors+: monitors}) else __rbdMixin({monitors+: [monitors]}),\n              // The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withPool(pool):: self + __rbdMixin({pool: pool}),\n              // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withReadOnly(readOnly):: self + __rbdMixin({readOnly: readOnly}),\n              // SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __rbdMixin({secretRef+: secretRef}),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({name: name}),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n              // The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withUser(user):: self + __rbdMixin({user: user}),\n            },\n            rbdType:: hidden.core.v1.rbdVolumeSource,\n            // ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.\n            scaleIo:: {\n              local __scaleIoMixin(scaleIo) = {scaleIO+: scaleIo},\n              mixinInstance(scaleIo):: __scaleIoMixin(scaleIo),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __scaleIoMixin({fsType: fsType}),\n              // The host address of the ScaleIO API Gateway.\n              withGateway(gateway):: self + __scaleIoMixin({gateway: gateway}),\n              // The name of the Protection Domain for the configured storage (defaults to \"default\").\n              withProtectionDomain(protectionDomain):: self + __scaleIoMixin({protectionDomain: protectionDomain}),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __scaleIoMixin({readOnly: readOnly}),\n              // SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __scaleIoMixin({secretRef+: secretRef}),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({name: name}),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n              // Flag to enable/disable SSL communication with Gateway, default false\n              withSslEnabled(sslEnabled):: self + __scaleIoMixin({sslEnabled: sslEnabled}),\n              // Indicates whether the storage for a volume should be thick or thin (defaults to \"thin\").\n              withStorageMode(storageMode):: self + __scaleIoMixin({storageMode: storageMode}),\n              // The Storage Pool associated with the protection domain (defaults to \"default\").\n              withStoragePool(storagePool):: self + __scaleIoMixin({storagePool: storagePool}),\n              // The name of the storage system as configured in ScaleIO.\n              withSystem(system):: self + __scaleIoMixin({system: system}),\n              // The name of a volume already created in the ScaleIO system that is associated with this volume source.\n              withVolumeName(volumeName):: self + __scaleIoMixin({volumeName: volumeName}),\n            },\n            scaleIoType:: hidden.core.v1.scaleIoVolumeSource,\n            // StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md\n            storageos:: {\n              local __storageosMixin(storageos) = {storageos+: storageos},\n              mixinInstance(storageos):: __storageosMixin(storageos),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __storageosMixin({fsType: fsType}),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __storageosMixin({readOnly: readOnly}),\n              // SecretRef specifies the secret to use for obtaining the StorageOS API credentials.  If not specified, default values will be attempted.\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __storageosMixin({secretRef+: secretRef}),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\n                withFieldPath(fieldPath):: self + __secretRefMixin({fieldPath: fieldPath}),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({name: name}),\n                // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n                withNamespace(namespace):: self + __secretRefMixin({namespace: namespace}),\n                // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n                withResourceVersion(resourceVersion):: self + __secretRefMixin({resourceVersion: resourceVersion}),\n                // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n                withUid(uid):: self + __secretRefMixin({uid: uid}),\n              },\n              secretRefType:: hidden.core.v1.objectReference,\n              // VolumeName is the human-readable name of the StorageOS volume.  Volume names are only unique within a namespace.\n              withVolumeName(volumeName):: self + __storageosMixin({volumeName: volumeName}),\n              // VolumeNamespace specifies the scope of the volume within StorageOS.  If no namespace is specified then the Pod's namespace will be used.  This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.\n              withVolumeNamespace(volumeNamespace):: self + __storageosMixin({volumeNamespace: volumeNamespace}),\n            },\n            storageosType:: hidden.core.v1.storageOSPersistentVolumeSource,\n            // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine\n            vsphereVolume:: {\n              local __vsphereVolumeMixin(vsphereVolume) = {vsphereVolume+: vsphereVolume},\n              mixinInstance(vsphereVolume):: __vsphereVolumeMixin(vsphereVolume),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __vsphereVolumeMixin({fsType: fsType}),\n              // Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.\n              withStoragePolicyID(storagePolicyID):: self + __vsphereVolumeMixin({storagePolicyID: storagePolicyID}),\n              // Storage Policy Based Management (SPBM) profile name.\n              withStoragePolicyName(storagePolicyName):: self + __vsphereVolumeMixin({storagePolicyName: storagePolicyName}),\n              // Path that identifies vSphere volume vmdk\n              withVolumePath(volumePath):: self + __vsphereVolumeMixin({volumePath: volumePath}),\n            },\n            vsphereVolumeType:: hidden.core.v1.vsphereVirtualDiskVolumeSource,\n          },\n        },\n        // PersistentVolumeStatus is the current status of a persistent volume.\n        persistentVolumeStatus:: {\n          new():: {},\n          // A human-readable message indicating details about why the volume is in this state.\n          withMessage(message):: self + {message: message},\n          // Phase indicates if a volume is available, bound to a claim, or released by a claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase\n          withPhase(phase):: self + {phase: phase},\n          // Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.\n          withReason(reason):: self + {reason: reason},\n          mixin:: {\n          },\n        },\n        // Represents a Photon Controller persistent disk resource.\n        photonPersistentDiskVolumeSource:: {\n          new():: {},\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n          withFsType(fsType):: self + {fsType: fsType},\n          // ID that identifies Photon Controller persistent disk\n          withPdId(pdId):: self + {pdID: pdId},\n          mixin:: {\n          },\n        },\n        // Pod affinity is a group of inter pod affinity scheduling rules.\n        podAffinity:: {\n          new():: {},\n          // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n          withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then {preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution} else {preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]},\n          // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n          withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then {preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution} else {preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]},\n          preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n          // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n          withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then {requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution} else {requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]},\n          // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n          withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then {requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution} else {requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]},\n          requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n          mixin:: {\n          },\n        },\n        // Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key <topologyKey> tches that of any node on which a pod of the set of pods is running\n        podAffinityTerm:: {\n          new():: {},\n          // namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"\n          withNamespaces(namespaces):: self + if std.type(namespaces) == \"array\" then {namespaces: namespaces} else {namespaces: [namespaces]},\n          // namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"\n          withNamespacesMixin(namespaces):: self + if std.type(namespaces) == \"array\" then {namespaces+: namespaces} else {namespaces+: [namespaces]},\n          // This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. For PreferredDuringScheduling pod anti-affinity, empty topologyKey is interpreted as \"all topologies\" (\"all topologies\" here means all the topologyKeys indicated by scheduler command-line argument --failure-domains); for affinity and for RequiredDuringScheduling pod anti-affinity, empty topologyKey is not allowed.\n          withTopologyKey(topologyKey):: self + {topologyKey: topologyKey},\n          mixin:: {\n            // A label query over a set of resources, in this case pods.\n            labelSelector:: {\n              local __labelSelectorMixin(labelSelector) = {labelSelector+: labelSelector},\n              mixinInstance(labelSelector):: __labelSelectorMixin(labelSelector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __labelSelectorMixin({matchExpressions: matchExpressions}) else __labelSelectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __labelSelectorMixin({matchExpressions+: matchExpressions}) else __labelSelectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __labelSelectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __labelSelectorMixin({matchLabels+: matchLabels}),\n            },\n            labelSelectorType:: hidden.meta.v1.labelSelector,\n          },\n        },\n        // Pod anti affinity is a group of inter pod anti affinity scheduling rules.\n        podAntiAffinity:: {\n          new():: {},\n          // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n          withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then {preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution} else {preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]},\n          // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n          withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then {preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution} else {preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]},\n          preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n          // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n          withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then {requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution} else {requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]},\n          // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n          withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then {requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution} else {requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]},\n          requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n          mixin:: {\n          },\n        },\n        // PodCondition contains details for the current condition of this pod.\n        podCondition:: {\n          new():: {},\n          // Human-readable message indicating details about last transition.\n          withMessage(message):: self + {message: message},\n          // Unique, one-word, CamelCase reason for the condition's last transition.\n          withReason(reason):: self + {reason: reason},\n          // Type is the type of the condition. Currently only Ready. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions\n          withType(type):: self + {type: type},\n          mixin:: {\n            // Last time we probed the condition.\n            lastProbeTime:: {\n              local __lastProbeTimeMixin(lastProbeTime) = {lastProbeTime+: lastProbeTime},\n              mixinInstance(lastProbeTime):: __lastProbeTimeMixin(lastProbeTime),\n            },\n            lastProbeTimeType:: hidden.meta.v1.time,\n            // Last time the condition transitioned from one status to another.\n            lastTransitionTime:: {\n              local __lastTransitionTimeMixin(lastTransitionTime) = {lastTransitionTime+: lastTransitionTime},\n              mixinInstance(lastTransitionTime):: __lastTransitionTimeMixin(lastTransitionTime),\n            },\n            lastTransitionTimeType:: hidden.meta.v1.time,\n          },\n        },\n        // PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext.  Field values of container.securityContext take precedence over field values of PodSecurityContext.\n        podSecurityContext:: {\n          new():: {},\n          // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n          //\n          // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n          //\n          // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n          withFsGroup(fsGroup):: self + {fsGroup: fsGroup},\n          // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n          withRunAsNonRoot(runAsNonRoot):: self + {runAsNonRoot: runAsNonRoot},\n          // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n          withRunAsUser(runAsUser):: self + {runAsUser: runAsUser},\n          // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n          withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then {supplementalGroups: supplementalGroups} else {supplementalGroups: [supplementalGroups]},\n          // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n          withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then {supplementalGroups+: supplementalGroups} else {supplementalGroups+: [supplementalGroups]},\n          mixin:: {\n            // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n            seLinuxOptions:: {\n              local __seLinuxOptionsMixin(seLinuxOptions) = {seLinuxOptions+: seLinuxOptions},\n              mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n              // Level is SELinux level label that applies to the container.\n              withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n              // Role is a SELinux role label that applies to the container.\n              withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n              // Type is a SELinux type label that applies to the container.\n              withType(type):: self + __seLinuxOptionsMixin({type: type}),\n              // User is a SELinux user label that applies to the container.\n              withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n            },\n            seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n          },\n        },\n        // PodSpec is a description of a pod.\n        podSpec:: {\n          new():: {},\n          // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n          withActiveDeadlineSeconds(activeDeadlineSeconds):: self + {activeDeadlineSeconds: activeDeadlineSeconds},\n          // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n          withAutomountServiceAccountToken(automountServiceAccountToken):: self + {automountServiceAccountToken: automountServiceAccountToken},\n          // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n          withContainers(containers):: self + if std.type(containers) == \"array\" then {containers: containers} else {containers: [containers]},\n          // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n          withContainersMixin(containers):: self + if std.type(containers) == \"array\" then {containers+: containers} else {containers+: [containers]},\n          containersType:: hidden.core.v1.container,\n          // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n          withDnsPolicy(dnsPolicy):: self + {dnsPolicy: dnsPolicy},\n          // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n          withHostAliases(hostAliases):: self + if std.type(hostAliases) == \"array\" then {hostAliases: hostAliases} else {hostAliases: [hostAliases]},\n          // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n          withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == \"array\" then {hostAliases+: hostAliases} else {hostAliases+: [hostAliases]},\n          hostAliasesType:: hidden.core.v1.hostAlias,\n          // Use the host's ipc namespace. Optional: Default to false.\n          withHostIpc(hostIpc):: self + {hostIPC: hostIpc},\n          // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n          withHostNetwork(hostNetwork):: self + {hostNetwork: hostNetwork},\n          // Use the host's pid namespace. Optional: Default to false.\n          withHostPid(hostPid):: self + {hostPID: hostPid},\n          // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n          withHostname(hostname):: self + {hostname: hostname},\n          // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n          withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then {imagePullSecrets: imagePullSecrets} else {imagePullSecrets: [imagePullSecrets]},\n          // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n          withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then {imagePullSecrets+: imagePullSecrets} else {imagePullSecrets+: [imagePullSecrets]},\n          imagePullSecretsType:: hidden.core.v1.localObjectReference,\n          // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n          withInitContainers(initContainers):: self + if std.type(initContainers) == \"array\" then {initContainers: initContainers} else {initContainers: [initContainers]},\n          // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n          withInitContainersMixin(initContainers):: self + if std.type(initContainers) == \"array\" then {initContainers+: initContainers} else {initContainers+: [initContainers]},\n          initContainersType:: hidden.core.v1.container,\n          // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n          withNodeName(nodeName):: self + {nodeName: nodeName},\n          // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n          withNodeSelector(nodeSelector):: self + {nodeSelector: nodeSelector},\n          // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n          withNodeSelectorMixin(nodeSelector):: self + {nodeSelector+: nodeSelector},\n          // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n          withRestartPolicy(restartPolicy):: self + {restartPolicy: restartPolicy},\n          // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n          withSchedulerName(schedulerName):: self + {schedulerName: schedulerName},\n          // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n          withServiceAccount(serviceAccount):: self + {serviceAccount: serviceAccount},\n          // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n          withServiceAccountName(serviceAccountName):: self + {serviceAccountName: serviceAccountName},\n          // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n          withSubdomain(subdomain):: self + {subdomain: subdomain},\n          // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n          withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + {terminationGracePeriodSeconds: terminationGracePeriodSeconds},\n          // If specified, the pod's tolerations.\n          withTolerations(tolerations):: self + if std.type(tolerations) == \"array\" then {tolerations: tolerations} else {tolerations: [tolerations]},\n          // If specified, the pod's tolerations.\n          withTolerationsMixin(tolerations):: self + if std.type(tolerations) == \"array\" then {tolerations+: tolerations} else {tolerations+: [tolerations]},\n          tolerationsType:: hidden.core.v1.toleration,\n          // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n          withVolumes(volumes):: self + if std.type(volumes) == \"array\" then {volumes: volumes} else {volumes: [volumes]},\n          // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n          withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then {volumes+: volumes} else {volumes+: [volumes]},\n          volumesType:: hidden.core.v1.volume,\n          mixin:: {\n            // If specified, the pod's scheduling constraints\n            affinity:: {\n              local __affinityMixin(affinity) = {affinity+: affinity},\n              mixinInstance(affinity):: __affinityMixin(affinity),\n              // Describes node affinity scheduling rules for the pod.\n              nodeAffinity:: {\n                local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}),\n                mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                requiredDuringSchedulingIgnoredDuringExecution:: {\n                  local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                  mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                  // Required. A list of node selector terms. The terms are ORed.\n                  withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                  // Required. A list of node selector terms. The terms are ORed.\n                  withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                  nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                },\n                requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n              },\n              nodeAffinityType:: hidden.core.v1.nodeAffinity,\n              // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n              podAffinity:: {\n                local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}),\n                mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n              },\n              podAffinityType:: hidden.core.v1.podAffinity,\n              // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n              podAntiAffinity:: {\n                local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}),\n                mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n              },\n              podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n            },\n            affinityType:: hidden.core.v1.affinity,\n            // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n            securityContext:: {\n              local __securityContextMixin(securityContext) = {securityContext+: securityContext},\n              mixinInstance(securityContext):: __securityContextMixin(securityContext),\n              // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n              //\n              // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n              //\n              // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n              withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}),\n              // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n              withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n              // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n              withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n              // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n              seLinuxOptions:: {\n                local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                // Level is SELinux level label that applies to the container.\n                withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                // Role is a SELinux role label that applies to the container.\n                withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                // Type is a SELinux type label that applies to the container.\n                withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                // User is a SELinux user label that applies to the container.\n                withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n              },\n              seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n              // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n              withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}),\n              // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n              withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}),\n            },\n            securityContextType:: hidden.core.v1.podSecurityContext,\n          },\n        },\n        // PodStatus represents information about the status of a pod. Status may trail the actual state of a system.\n        podStatus:: {\n          new():: {},\n          // Current service state of pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions\n          withConditions(conditions):: self + if std.type(conditions) == \"array\" then {conditions: conditions} else {conditions: [conditions]},\n          // Current service state of pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions\n          withConditionsMixin(conditions):: self + if std.type(conditions) == \"array\" then {conditions+: conditions} else {conditions+: [conditions]},\n          conditionsType:: hidden.core.v1.podCondition,\n          // The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status\n          withContainerStatuses(containerStatuses):: self + if std.type(containerStatuses) == \"array\" then {containerStatuses: containerStatuses} else {containerStatuses: [containerStatuses]},\n          // The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status\n          withContainerStatusesMixin(containerStatuses):: self + if std.type(containerStatuses) == \"array\" then {containerStatuses+: containerStatuses} else {containerStatuses+: [containerStatuses]},\n          containerStatusesType:: hidden.core.v1.containerStatus,\n          // IP address of the host to which the pod is assigned. Empty if not yet scheduled.\n          withHostIp(hostIp):: self + {hostIP: hostIp},\n          // The list has one entry per init container in the manifest. The most recent successful init container will have ready = true, the most recently started container will have startTime set. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status\n          withInitContainerStatuses(initContainerStatuses):: self + if std.type(initContainerStatuses) == \"array\" then {initContainerStatuses: initContainerStatuses} else {initContainerStatuses: [initContainerStatuses]},\n          // The list has one entry per init container in the manifest. The most recent successful init container will have ready = true, the most recently started container will have startTime set. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status\n          withInitContainerStatusesMixin(initContainerStatuses):: self + if std.type(initContainerStatuses) == \"array\" then {initContainerStatuses+: initContainerStatuses} else {initContainerStatuses+: [initContainerStatuses]},\n          initContainerStatusesType:: hidden.core.v1.containerStatus,\n          // A human readable message indicating details about why the pod is in this condition.\n          withMessage(message):: self + {message: message},\n          // Current condition of the pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase\n          withPhase(phase):: self + {phase: phase},\n          // IP address allocated to the pod. Routable at least within the cluster. Empty if not yet allocated.\n          withPodIp(podIp):: self + {podIP: podIp},\n          // The Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://github.com/kubernetes/kubernetes/blob/master/docs/design/resource-qos.md\n          withQosClass(qosClass):: self + {qosClass: qosClass},\n          // A brief CamelCase message indicating details about why the pod is in this state. e.g. 'OutOfDisk'\n          withReason(reason):: self + {reason: reason},\n          mixin:: {\n            // RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod.\n            startTime:: {\n              local __startTimeMixin(startTime) = {startTime+: startTime},\n              mixinInstance(startTime):: __startTimeMixin(startTime),\n            },\n            startTimeType:: hidden.meta.v1.time,\n          },\n        },\n        // PodTemplateSpec describes the data a pod should have when created from a template\n        podTemplateSpec:: {\n          new():: {},\n          mixin:: {\n            // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n            metadata:: {\n              local __metadataMixin(metadata) = {metadata+: metadata},\n              mixinInstance(metadata):: __metadataMixin(metadata),\n              // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n              withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n              // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n              withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n              // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n              withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n              // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n              withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n              // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n              withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n              // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n              withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n              // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n              //\n              // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n              //\n              // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n              withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n              // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n              //\n              // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n              initializers:: {\n                local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                mixinInstance(initializers):: __initializersMixin(initializers),\n                // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                pendingType:: hidden.meta.v1.initializer,\n                // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                result:: {\n                  local __resultMixin(result) = __initializersMixin({result+: result}),\n                  mixinInstance(result):: __resultMixin(result),\n                  // Suggested HTTP return code for this status, 0 if not set.\n                  withCode(code):: self + __resultMixin({code: code}),\n                  // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                  details:: {\n                    local __detailsMixin(details) = __resultMixin({details+: details}),\n                    mixinInstance(details):: __detailsMixin(details),\n                    // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                    withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                    // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                    withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                    causesType:: hidden.meta.v1.statusCause,\n                    // The group attribute of the resource associated with the status StatusReason.\n                    withGroup(group):: self + __detailsMixin({group: group}),\n                    // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                    withName(name):: self + __detailsMixin({name: name}),\n                    // If specified, the time in seconds before the operation should be retried.\n                    withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                    // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                    withUid(uid):: self + __detailsMixin({uid: uid}),\n                  },\n                  detailsType:: hidden.meta.v1.statusDetails,\n                  // A human-readable description of the status of this operation.\n                  withMessage(message):: self + __resultMixin({message: message}),\n                  // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                  withReason(reason):: self + __resultMixin({reason: reason}),\n                },\n                resultType:: hidden.meta.v1.status,\n              },\n              initializersType:: hidden.meta.v1.initializers,\n              // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n              withLabels(labels):: self + __metadataMixin({labels: labels}),\n              // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n              withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n              // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n              withName(name):: self + __metadataMixin({name: name}),\n              // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n              //\n              // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n              withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n            },\n            metadataType:: hidden.meta.v1.objectMeta,\n            // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n            spec:: {\n              local __specMixin(spec) = {spec+: spec},\n              mixinInstance(spec):: __specMixin(spec),\n              // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n              withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n              // If specified, the pod's scheduling constraints\n              affinity:: {\n                local __affinityMixin(affinity) = __specMixin({affinity+: affinity}),\n                mixinInstance(affinity):: __affinityMixin(affinity),\n                // Describes node affinity scheduling rules for the pod.\n                nodeAffinity:: {\n                  local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}),\n                  mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                  preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                  // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                  requiredDuringSchedulingIgnoredDuringExecution:: {\n                    local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                    mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                    // Required. A list of node selector terms. The terms are ORed.\n                    withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                    // Required. A list of node selector terms. The terms are ORed.\n                    withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                    nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                  },\n                  requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                },\n                nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                podAffinity:: {\n                  local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}),\n                  mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                  preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                  // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                  withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                  // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                  withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                  requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                },\n                podAffinityType:: hidden.core.v1.podAffinity,\n                // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                podAntiAffinity:: {\n                  local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}),\n                  mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                  // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                  withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                  preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                  // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                  withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                  // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                  withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                  requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                },\n                podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n              },\n              affinityType:: hidden.core.v1.affinity,\n              // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n              withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}),\n              // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n              withContainers(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}),\n              // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n              withContainersMixin(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}),\n              containersType:: hidden.core.v1.container,\n              // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n              withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}),\n              // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n              withHostAliases(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}),\n              // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n              withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}),\n              hostAliasesType:: hidden.core.v1.hostAlias,\n              // Use the host's ipc namespace. Optional: Default to false.\n              withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}),\n              // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n              withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}),\n              // Use the host's pid namespace. Optional: Default to false.\n              withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}),\n              // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n              withHostname(hostname):: self + __specMixin({hostname: hostname}),\n              // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n              withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}),\n              // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n              withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}),\n              imagePullSecretsType:: hidden.core.v1.localObjectReference,\n              // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n              withInitContainers(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}),\n              // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n              withInitContainersMixin(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}),\n              initContainersType:: hidden.core.v1.container,\n              // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n              withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}),\n              // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n              withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}),\n              // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n              withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}),\n              // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n              withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}),\n              // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n              withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}),\n              // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n              securityContext:: {\n                local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}),\n                mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                //\n                // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                //\n                // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}),\n                // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n                // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n                // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                seLinuxOptions:: {\n                  local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                  mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                  // Level is SELinux level label that applies to the container.\n                  withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                  // Role is a SELinux role label that applies to the container.\n                  withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                  // Type is a SELinux type label that applies to the container.\n                  withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                  // User is a SELinux user label that applies to the container.\n                  withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n                },\n                seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}),\n                // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}),\n              },\n              securityContextType:: hidden.core.v1.podSecurityContext,\n              // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n              withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}),\n              // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n              withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}),\n              // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n              withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}),\n              // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n              withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}),\n              // If specified, the pod's tolerations.\n              withTolerations(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}),\n              // If specified, the pod's tolerations.\n              withTolerationsMixin(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}),\n              tolerationsType:: hidden.core.v1.toleration,\n              // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n              withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n              // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n              withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n              volumesType:: hidden.core.v1.volume,\n            },\n            specType:: hidden.core.v1.podSpec,\n          },\n        },\n        // PortworxVolumeSource represents a Portworx volume resource.\n        portworxVolumeSource:: {\n          new():: {},\n          // FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified.\n          withFsType(fsType):: self + {fsType: fsType},\n          // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n          withReadOnly(readOnly):: self + {readOnly: readOnly},\n          // VolumeID uniquely identifies a Portworx volume\n          withVolumeId(volumeId):: self + {volumeID: volumeId},\n          mixin:: {\n          },\n        },\n        // An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).\n        preferredSchedulingTerm:: {\n          new():: {},\n          // Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.\n          withWeight(weight):: self + {weight: weight},\n          mixin:: {\n            // A node selector term, associated with the corresponding weight.\n            preference:: {\n              local __preferenceMixin(preference) = {preference+: preference},\n              mixinInstance(preference):: __preferenceMixin(preference),\n              // Required. A list of node selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __preferenceMixin({matchExpressions: matchExpressions}) else __preferenceMixin({matchExpressions: [matchExpressions]}),\n              // Required. A list of node selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __preferenceMixin({matchExpressions+: matchExpressions}) else __preferenceMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.core.v1.nodeSelectorRequirement,\n            },\n            preferenceType:: hidden.core.v1.nodeSelectorTerm,\n          },\n        },\n        // Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.\n        probe:: {\n          new():: {},\n          // Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.\n          withFailureThreshold(failureThreshold):: self + {failureThreshold: failureThreshold},\n          // Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\n          withInitialDelaySeconds(initialDelaySeconds):: self + {initialDelaySeconds: initialDelaySeconds},\n          // How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.\n          withPeriodSeconds(periodSeconds):: self + {periodSeconds: periodSeconds},\n          // Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.\n          withSuccessThreshold(successThreshold):: self + {successThreshold: successThreshold},\n          // Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\n          withTimeoutSeconds(timeoutSeconds):: self + {timeoutSeconds: timeoutSeconds},\n          mixin:: {\n            // One and only one of the following should be specified. Exec specifies the action to take.\n            exec:: {\n              local __execMixin(exec) = {exec+: exec},\n              mixinInstance(exec):: __execMixin(exec),\n              // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n              withCommand(command):: self + if std.type(command) == \"array\" then __execMixin({command: command}) else __execMixin({command: [command]}),\n              // Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\n              withCommandMixin(command):: self + if std.type(command) == \"array\" then __execMixin({command+: command}) else __execMixin({command+: [command]}),\n            },\n            execType:: hidden.core.v1.execAction,\n            // HTTPGet specifies the http request to perform.\n            httpGet:: {\n              local __httpGetMixin(httpGet) = {httpGet+: httpGet},\n              mixinInstance(httpGet):: __httpGetMixin(httpGet),\n              // Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.\n              withHost(host):: self + __httpGetMixin({host: host}),\n              // Custom headers to set in the request. HTTP allows repeated headers.\n              withHttpHeaders(httpHeaders):: self + if std.type(httpHeaders) == \"array\" then __httpGetMixin({httpHeaders: httpHeaders}) else __httpGetMixin({httpHeaders: [httpHeaders]}),\n              // Custom headers to set in the request. HTTP allows repeated headers.\n              withHttpHeadersMixin(httpHeaders):: self + if std.type(httpHeaders) == \"array\" then __httpGetMixin({httpHeaders+: httpHeaders}) else __httpGetMixin({httpHeaders+: [httpHeaders]}),\n              httpHeadersType:: hidden.core.v1.httpHeader,\n              // Path to access on the HTTP server.\n              withPath(path):: self + __httpGetMixin({path: path}),\n              // Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n              withPort(port):: __httpGetMixin({port: port}),\n              // Scheme to use for connecting to the host. Defaults to HTTP.\n              withScheme(scheme):: self + __httpGetMixin({scheme: scheme}),\n            },\n            httpGetType:: hidden.core.v1.httpGetAction,\n            // TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported\n            tcpSocket:: {\n              local __tcpSocketMixin(tcpSocket) = {tcpSocket+: tcpSocket},\n              mixinInstance(tcpSocket):: __tcpSocketMixin(tcpSocket),\n              // Optional: Host name to connect to, defaults to the pod IP.\n              withHost(host):: self + __tcpSocketMixin({host: host}),\n              // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n              withPort(port):: __tcpSocketMixin({port: port}),\n            },\n            tcpSocketType:: hidden.core.v1.tcpSocketAction,\n          },\n        },\n        // Represents a projected volume source\n        projectedVolumeSource:: {\n          new():: {},\n          // Mode bits to use on created files by default. Must be a value between 0 and 0777. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n          withDefaultMode(defaultMode):: self + {defaultMode: defaultMode},\n          // list of volume projections\n          withSources(sources):: self + if std.type(sources) == \"array\" then {sources: sources} else {sources: [sources]},\n          // list of volume projections\n          withSourcesMixin(sources):: self + if std.type(sources) == \"array\" then {sources+: sources} else {sources+: [sources]},\n          sourcesType:: hidden.core.v1.volumeProjection,\n          mixin:: {\n          },\n        },\n        // Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling.\n        quobyteVolumeSource:: {\n          new():: {},\n          // Group to map volume access to Default is no group\n          withGroup(group):: self + {group: group},\n          // ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.\n          withReadOnly(readOnly):: self + {readOnly: readOnly},\n          // Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes\n          withRegistry(registry):: self + {registry: registry},\n          // User to map volume access to Defaults to serivceaccount user\n          withUser(user):: self + {user: user},\n          // Volume is a string that references an already created Quobyte volume by name.\n          withVolume(volume):: self + {volume: volume},\n          mixin:: {\n          },\n        },\n        // Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.\n        rbdVolumeSource:: {\n          new():: {},\n          // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd\n          withFsType(fsType):: self + {fsType: fsType},\n          // The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n          withImage(image):: self + {image: image},\n          // Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n          withKeyring(keyring):: self + {keyring: keyring},\n          // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n          withMonitors(monitors):: self + if std.type(monitors) == \"array\" then {monitors: monitors} else {monitors: [monitors]},\n          // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n          withMonitorsMixin(monitors):: self + if std.type(monitors) == \"array\" then {monitors+: monitors} else {monitors+: [monitors]},\n          // The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n          withPool(pool):: self + {pool: pool},\n          // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n          withReadOnly(readOnly):: self + {readOnly: readOnly},\n          // The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n          withUser(user):: self + {user: user},\n          mixin:: {\n            // SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n            secretRef:: {\n              local __secretRefMixin(secretRef) = {secretRef+: secretRef},\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __secretRefMixin({name: name}),\n            },\n            secretRefType:: hidden.core.v1.localObjectReference,\n          },\n        },\n        // ReplicationControllerCondition describes the state of a replication controller at a certain point.\n        replicationControllerCondition:: {\n          new():: {},\n          // A human readable message indicating details about the transition.\n          withMessage(message):: self + {message: message},\n          // The reason for the condition's last transition.\n          withReason(reason):: self + {reason: reason},\n          // Type of replication controller condition.\n          withType(type):: self + {type: type},\n          mixin:: {\n            // The last time the condition transitioned from one status to another.\n            lastTransitionTime:: {\n              local __lastTransitionTimeMixin(lastTransitionTime) = {lastTransitionTime+: lastTransitionTime},\n              mixinInstance(lastTransitionTime):: __lastTransitionTimeMixin(lastTransitionTime),\n            },\n            lastTransitionTimeType:: hidden.meta.v1.time,\n          },\n        },\n        // ReplicationControllerSpec is the specification of a replication controller.\n        replicationControllerSpec:: {\n          new():: {},\n          // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n          withMinReadySeconds(minReadySeconds):: self + {minReadySeconds: minReadySeconds},\n          // Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller\n          withReplicas(replicas):: self + {replicas: replicas},\n          // Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n          withSelector(selector):: self + {selector: selector},\n          // Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n          withSelectorMixin(selector):: self + {selector+: selector},\n          mixin:: {\n            // Template is the object that describes the pod that will be created if insufficient replicas are detected. This takes precedence over a TemplateRef. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\n            template:: {\n              local __templateMixin(template) = {template+: template},\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n                // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n                withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                  pendingType:: hidden.meta.v1.initializer,\n                  // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                  result:: {\n                    local __resultMixin(result) = __initializersMixin({result+: result}),\n                    mixinInstance(result):: __resultMixin(result),\n                    // Suggested HTTP return code for this status, 0 if not set.\n                    withCode(code):: self + __resultMixin({code: code}),\n                    // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                    details:: {\n                      local __detailsMixin(details) = __resultMixin({details+: details}),\n                      mixinInstance(details):: __detailsMixin(details),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                      causesType:: hidden.meta.v1.statusCause,\n                      // The group attribute of the resource associated with the status StatusReason.\n                      withGroup(group):: self + __detailsMixin({group: group}),\n                      // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                      withName(name):: self + __detailsMixin({name: name}),\n                      // If specified, the time in seconds before the operation should be retried.\n                      withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                      // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                      withUid(uid):: self + __detailsMixin({uid: uid}),\n                    },\n                    detailsType:: hidden.meta.v1.statusDetails,\n                    // A human-readable description of the status of this operation.\n                    withMessage(message):: self + __resultMixin({message: message}),\n                    // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                    withReason(reason):: self + __resultMixin({reason: reason}),\n                  },\n                  resultType:: hidden.meta.v1.status,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({labels: labels}),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({name: name}),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({spec+: spec}),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({affinity+: affinity}),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}),\n                containersType:: hidden.core.v1.container,\n                // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({hostname: hostname}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}),\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}),\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n        },\n        // ReplicationControllerStatus represents the current status of a replication controller.\n        replicationControllerStatus:: {\n          new():: {},\n          // The number of available replicas (ready for at least minReadySeconds) for this replication controller.\n          withAvailableReplicas(availableReplicas):: self + {availableReplicas: availableReplicas},\n          // Represents the latest available observations of a replication controller's current state.\n          withConditions(conditions):: self + if std.type(conditions) == \"array\" then {conditions: conditions} else {conditions: [conditions]},\n          // Represents the latest available observations of a replication controller's current state.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == \"array\" then {conditions+: conditions} else {conditions+: [conditions]},\n          conditionsType:: hidden.core.v1.replicationControllerCondition,\n          // The number of pods that have labels matching the labels of the pod template of the replication controller.\n          withFullyLabeledReplicas(fullyLabeledReplicas):: self + {fullyLabeledReplicas: fullyLabeledReplicas},\n          // ObservedGeneration reflects the generation of the most recently observed replication controller.\n          withObservedGeneration(observedGeneration):: self + {observedGeneration: observedGeneration},\n          // The number of ready replicas for this replication controller.\n          withReadyReplicas(readyReplicas):: self + {readyReplicas: readyReplicas},\n          // Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller\n          withReplicas(replicas):: self + {replicas: replicas},\n          mixin:: {\n          },\n        },\n        // ResourceFieldSelector represents container resources (cpu, memory) and their output format\n        resourceFieldSelector:: {\n          new():: {},\n          // Container name: required for volumes, optional for env vars\n          withContainerName(containerName):: self + {containerName: containerName},\n          // Required: resource to select\n          withResource(resource):: self + {resource: resource},\n          mixin:: {\n            // Specifies the output format of the exposed resources, defaults to \"1\"\n            divisor:: {\n              local __divisorMixin(divisor) = {divisor+: divisor},\n              mixinInstance(divisor):: __divisorMixin(divisor),\n            },\n            divisorType:: hidden.core.resource.quantity,\n          },\n        },\n        // ResourceQuotaSpec defines the desired hard limits to enforce for Quota.\n        resourceQuotaSpec:: {\n          new():: {},\n          // Hard is the set of desired hard limits for each named resource. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md\n          withHard(hard):: self + {hard: hard},\n          // Hard is the set of desired hard limits for each named resource. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md\n          withHardMixin(hard):: self + {hard+: hard},\n          // A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects.\n          withScopes(scopes):: self + if std.type(scopes) == \"array\" then {scopes: scopes} else {scopes: [scopes]},\n          // A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects.\n          withScopesMixin(scopes):: self + if std.type(scopes) == \"array\" then {scopes+: scopes} else {scopes+: [scopes]},\n          mixin:: {\n          },\n        },\n        // ResourceQuotaStatus defines the enforced hard limits and observed use.\n        resourceQuotaStatus:: {\n          new():: {},\n          // Hard is the set of enforced hard limits for each named resource. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md\n          withHard(hard):: self + {hard: hard},\n          // Hard is the set of enforced hard limits for each named resource. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md\n          withHardMixin(hard):: self + {hard+: hard},\n          // Used is the current observed total usage of the resource in the namespace.\n          withUsed(used):: self + {used: used},\n          // Used is the current observed total usage of the resource in the namespace.\n          withUsedMixin(used):: self + {used+: used},\n          mixin:: {\n          },\n        },\n        // ResourceRequirements describes the compute resource requirements.\n        resourceRequirements:: {\n          new():: {},\n          // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n          withLimits(limits):: self + {limits: limits},\n          // Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n          withLimitsMixin(limits):: self + {limits+: limits},\n          // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n          withRequests(requests):: self + {requests: requests},\n          // Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\n          withRequestsMixin(requests):: self + {requests+: requests},\n          mixin:: {\n          },\n        },\n        // SELinuxOptions are the labels to be applied to the container\n        seLinuxOptions:: {\n          new():: {},\n          // Level is SELinux level label that applies to the container.\n          withLevel(level):: self + {level: level},\n          // Role is a SELinux role label that applies to the container.\n          withRole(role):: self + {role: role},\n          // Type is a SELinux type label that applies to the container.\n          withType(type):: self + {type: type},\n          // User is a SELinux user label that applies to the container.\n          withUser(user):: self + {user: user},\n          mixin:: {\n          },\n        },\n        // ScaleIOVolumeSource represents a persistent ScaleIO volume\n        scaleIoVolumeSource:: {\n          new():: {},\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n          withFsType(fsType):: self + {fsType: fsType},\n          // The host address of the ScaleIO API Gateway.\n          withGateway(gateway):: self + {gateway: gateway},\n          // The name of the Protection Domain for the configured storage (defaults to \"default\").\n          withProtectionDomain(protectionDomain):: self + {protectionDomain: protectionDomain},\n          // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n          withReadOnly(readOnly):: self + {readOnly: readOnly},\n          // Flag to enable/disable SSL communication with Gateway, default false\n          withSslEnabled(sslEnabled):: self + {sslEnabled: sslEnabled},\n          // Indicates whether the storage for a volume should be thick or thin (defaults to \"thin\").\n          withStorageMode(storageMode):: self + {storageMode: storageMode},\n          // The Storage Pool associated with the protection domain (defaults to \"default\").\n          withStoragePool(storagePool):: self + {storagePool: storagePool},\n          // The name of the storage system as configured in ScaleIO.\n          withSystem(system):: self + {system: system},\n          // The name of a volume already created in the ScaleIO system that is associated with this volume source.\n          withVolumeName(volumeName):: self + {volumeName: volumeName},\n          mixin:: {\n            // SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.\n            secretRef:: {\n              local __secretRefMixin(secretRef) = {secretRef+: secretRef},\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __secretRefMixin({name: name}),\n            },\n            secretRefType:: hidden.core.v1.localObjectReference,\n          },\n        },\n        // SecretEnvSource selects a Secret to populate the environment variables with.\n        //\n        // The contents of the target Secret's Data field will represent the key-value pairs as environment variables.\n        secretEnvSource:: {\n          new():: {},\n          // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n          withName(name):: self + {name: name},\n          // Specify whether the Secret must be defined\n          withOptional(optional):: self + {optional: optional},\n          mixin:: {\n          },\n        },\n        // SecretKeySelector selects a key of a Secret.\n        secretKeySelector:: {\n          new():: {},\n          // The key of the secret to select from.  Must be a valid secret key.\n          withKey(key):: self + {key: key},\n          // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n          withName(name):: self + {name: name},\n          // Specify whether the Secret or it's key must be defined\n          withOptional(optional):: self + {optional: optional},\n          mixin:: {\n          },\n        },\n        // Adapts a secret into a projected volume.\n        //\n        // The contents of the target Secret's Data field will be presented in a projected volume as files using the keys in the Data field as the file names. Note that this is identical to a secret volume source without the default mode.\n        secretProjection:: {\n          new():: {},\n          // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n          withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n          // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n          withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n          itemsType:: hidden.core.v1.keyToPath,\n          // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n          withName(name):: self + {name: name},\n          // Specify whether the Secret or its key must be defined\n          withOptional(optional):: self + {optional: optional},\n          mixin:: {\n          },\n        },\n        // Adapts a Secret into a volume.\n        //\n        // The contents of the target Secret's Data field will be presented in a volume as files using the keys in the Data field as the file names. Secret volumes support ownership management and SELinux relabeling.\n        secretVolumeSource:: {\n          new():: {},\n          // Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n          withDefaultMode(defaultMode):: self + {defaultMode: defaultMode},\n          // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n          withItems(items):: self + if std.type(items) == \"array\" then {items: items} else {items: [items]},\n          // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n          withItemsMixin(items):: self + if std.type(items) == \"array\" then {items+: items} else {items+: [items]},\n          itemsType:: hidden.core.v1.keyToPath,\n          // Specify whether the Secret or it's keys must be defined\n          withOptional(optional):: self + {optional: optional},\n          // Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret\n          withSecretName(secretName):: self + {secretName: secretName},\n          mixin:: {\n          },\n        },\n        // SecurityContext holds security configuration that will be applied to a container. Some fields are present in both SecurityContext and PodSecurityContext.  When both are set, the values in SecurityContext take precedence.\n        securityContext:: {\n          new():: {},\n          // Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false.\n          withPrivileged(privileged):: self + {privileged: privileged},\n          // Whether this container has a read-only root filesystem. Default is false.\n          withReadOnlyRootFilesystem(readOnlyRootFilesystem):: self + {readOnlyRootFilesystem: readOnlyRootFilesystem},\n          // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n          withRunAsNonRoot(runAsNonRoot):: self + {runAsNonRoot: runAsNonRoot},\n          // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n          withRunAsUser(runAsUser):: self + {runAsUser: runAsUser},\n          mixin:: {\n            // The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime.\n            capabilities:: {\n              local __capabilitiesMixin(capabilities) = {capabilities+: capabilities},\n              mixinInstance(capabilities):: __capabilitiesMixin(capabilities),\n              // Added capabilities\n              withAdd(add):: self + if std.type(add) == \"array\" then __capabilitiesMixin({add: add}) else __capabilitiesMixin({add: [add]}),\n              // Added capabilities\n              withAddMixin(add):: self + if std.type(add) == \"array\" then __capabilitiesMixin({add+: add}) else __capabilitiesMixin({add+: [add]}),\n              // Removed capabilities\n              withDrop(drop):: self + if std.type(drop) == \"array\" then __capabilitiesMixin({drop: drop}) else __capabilitiesMixin({drop: [drop]}),\n              // Removed capabilities\n              withDropMixin(drop):: self + if std.type(drop) == \"array\" then __capabilitiesMixin({drop+: drop}) else __capabilitiesMixin({drop+: [drop]}),\n            },\n            capabilitiesType:: hidden.core.v1.capabilities,\n            // The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n            seLinuxOptions:: {\n              local __seLinuxOptionsMixin(seLinuxOptions) = {seLinuxOptions+: seLinuxOptions},\n              mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n              // Level is SELinux level label that applies to the container.\n              withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n              // Role is a SELinux role label that applies to the container.\n              withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n              // Type is a SELinux type label that applies to the container.\n              withType(type):: self + __seLinuxOptionsMixin({type: type}),\n              // User is a SELinux user label that applies to the container.\n              withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n            },\n            seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n          },\n        },\n        // ServicePort contains information on service's port.\n        servicePort:: {\n          new(port, targetPort):: {} + self.withPort(port) + self.withTargetPort(targetPort),\n          newNamed(name, port, targetPort):: {} + self.withName(name) + self.withPort(port) + self.withTargetPort(targetPort),\n          // The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. This maps to the 'Name' field in EndpointPort objects. Optional if only one ServicePort is defined on this service.\n          withName(name):: self + {name: name},\n          // The port on each node on which this service is exposed when type=NodePort or LoadBalancer. Usually assigned by the system. If specified, it will be allocated to the service if unused or else creation of the service will fail. Default is to auto-allocate a port if the ServiceType of this Service requires one. More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport\n          withNodePort(nodePort):: self + {nodePort: nodePort},\n          // The port that will be exposed by this service.\n          withPort(port):: self + {port: port},\n          // The IP protocol for this port. Supports \"TCP\" and \"UDP\". Default is TCP.\n          withProtocol(protocol):: self + {protocol: protocol},\n          // Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod's container ports. If this is not specified, the value of the 'port' field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the 'port' field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service\n          withTargetPort(targetPort):: {targetPort: targetPort},\n          mixin:: {\n          },\n        },\n        // ServiceSpec describes the attributes that a user creates on a service.\n        serviceSpec:: {\n          new():: {},\n          // clusterIP is the IP address of the service and is usually assigned randomly by the master. If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail. This field can not be changed through updates. Valid values are \"None\", empty string (\"\"), or a valid IP address. \"None\" can be specified for headless services when proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\n          withClusterIp(clusterIp):: self + {clusterIP: clusterIp},\n          // externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service.  These IPs are not managed by Kubernetes.  The user is responsible for ensuring that traffic arrives at a node with this IP.  A common example is external load-balancers that are not part of the Kubernetes system.\n          withExternalIps(externalIps):: self + if std.type(externalIps) == \"array\" then {externalIPs: externalIps} else {externalIPs: [externalIps]},\n          // externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service.  These IPs are not managed by Kubernetes.  The user is responsible for ensuring that traffic arrives at a node with this IP.  A common example is external load-balancers that are not part of the Kubernetes system.\n          withExternalIpsMixin(externalIps):: self + if std.type(externalIps) == \"array\" then {externalIPs+: externalIps} else {externalIPs+: [externalIps]},\n          // externalName is the external reference that kubedns or equivalent will return as a CNAME record for this service. No proxying will be involved. Must be a valid DNS name and requires Type to be ExternalName.\n          withExternalName(externalName):: self + {externalName: externalName},\n          // externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. \"Local\" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. \"Cluster\" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading.\n          withExternalTrafficPolicy(externalTrafficPolicy):: self + {externalTrafficPolicy: externalTrafficPolicy},\n          // healthCheckNodePort specifies the healthcheck nodePort for the service. If not specified, HealthCheckNodePort is created by the service api backend with the allocated nodePort. Will use user-specified nodePort value if specified by the client. Only effects when Type is set to LoadBalancer and ExternalTrafficPolicy is set to Local.\n          withHealthCheckNodePort(healthCheckNodePort):: self + {healthCheckNodePort: healthCheckNodePort},\n          // Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.\n          withLoadBalancerIp(loadBalancerIp):: self + {loadBalancerIP: loadBalancerIp},\n          // If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature.\" More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/\n          withLoadBalancerSourceRanges(loadBalancerSourceRanges):: self + if std.type(loadBalancerSourceRanges) == \"array\" then {loadBalancerSourceRanges: loadBalancerSourceRanges} else {loadBalancerSourceRanges: [loadBalancerSourceRanges]},\n          // If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature.\" More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/\n          withLoadBalancerSourceRangesMixin(loadBalancerSourceRanges):: self + if std.type(loadBalancerSourceRanges) == \"array\" then {loadBalancerSourceRanges+: loadBalancerSourceRanges} else {loadBalancerSourceRanges+: [loadBalancerSourceRanges]},\n          // The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\n          withPorts(ports):: self + if std.type(ports) == \"array\" then {ports: ports} else {ports: [ports]},\n          // The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\n          withPortsMixin(ports):: self + if std.type(ports) == \"array\" then {ports+: ports} else {ports+: [ports]},\n          portsType:: hidden.core.v1.servicePort,\n          // Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/\n          withSelector(selector):: self + {selector: selector},\n          // Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/\n          withSelectorMixin(selector):: self + {selector+: selector},\n          // Supports \"ClientIP\" and \"None\". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\n          withSessionAffinity(sessionAffinity):: self + {sessionAffinity: sessionAffinity},\n          // type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. \"ExternalName\" maps to the specified externalName. \"ClusterIP\" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object. If clusterIP is \"None\", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a stable IP. \"NodePort\" builds on ClusterIP and allocates a port on every node which routes to the clusterIP. \"LoadBalancer\" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types\n          withType(type):: self + {type: type},\n          mixin:: {\n          },\n        },\n        // ServiceStatus represents the current status of a service.\n        serviceStatus:: {\n          new():: {},\n          mixin:: {\n            // LoadBalancer contains the current status of the load-balancer, if one is present.\n            loadBalancer:: {\n              local __loadBalancerMixin(loadBalancer) = {loadBalancer+: loadBalancer},\n              mixinInstance(loadBalancer):: __loadBalancerMixin(loadBalancer),\n              // Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.\n              withIngress(ingress):: self + if std.type(ingress) == \"array\" then __loadBalancerMixin({ingress: ingress}) else __loadBalancerMixin({ingress: [ingress]}),\n              // Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.\n              withIngressMixin(ingress):: self + if std.type(ingress) == \"array\" then __loadBalancerMixin({ingress+: ingress}) else __loadBalancerMixin({ingress+: [ingress]}),\n              ingressType:: hidden.core.v1.loadBalancerIngress,\n            },\n            loadBalancerType:: hidden.core.v1.loadBalancerStatus,\n          },\n        },\n        // Represents a StorageOS persistent volume resource.\n        storageOSPersistentVolumeSource:: {\n          new():: {},\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n          withFsType(fsType):: self + {fsType: fsType},\n          // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n          withReadOnly(readOnly):: self + {readOnly: readOnly},\n          // VolumeName is the human-readable name of the StorageOS volume.  Volume names are only unique within a namespace.\n          withVolumeName(volumeName):: self + {volumeName: volumeName},\n          // VolumeNamespace specifies the scope of the volume within StorageOS.  If no namespace is specified then the Pod's namespace will be used.  This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.\n          withVolumeNamespace(volumeNamespace):: self + {volumeNamespace: volumeNamespace},\n          mixin:: {\n            // SecretRef specifies the secret to use for obtaining the StorageOS API credentials.  If not specified, default values will be attempted.\n            secretRef:: {\n              local __secretRefMixin(secretRef) = {secretRef+: secretRef},\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\n              withFieldPath(fieldPath):: self + __secretRefMixin({fieldPath: fieldPath}),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __secretRefMixin({name: name}),\n              // Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\n              withNamespace(namespace):: self + __secretRefMixin({namespace: namespace}),\n              // Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n              withResourceVersion(resourceVersion):: self + __secretRefMixin({resourceVersion: resourceVersion}),\n              // UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\n              withUid(uid):: self + __secretRefMixin({uid: uid}),\n            },\n            secretRefType:: hidden.core.v1.objectReference,\n          },\n        },\n        // Represents a StorageOS persistent volume resource.\n        storageOSVolumeSource:: {\n          new():: {},\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n          withFsType(fsType):: self + {fsType: fsType},\n          // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n          withReadOnly(readOnly):: self + {readOnly: readOnly},\n          // VolumeName is the human-readable name of the StorageOS volume.  Volume names are only unique within a namespace.\n          withVolumeName(volumeName):: self + {volumeName: volumeName},\n          // VolumeNamespace specifies the scope of the volume within StorageOS.  If no namespace is specified then the Pod's namespace will be used.  This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.\n          withVolumeNamespace(volumeNamespace):: self + {volumeNamespace: volumeNamespace},\n          mixin:: {\n            // SecretRef specifies the secret to use for obtaining the StorageOS API credentials.  If not specified, default values will be attempted.\n            secretRef:: {\n              local __secretRefMixin(secretRef) = {secretRef+: secretRef},\n              mixinInstance(secretRef):: __secretRefMixin(secretRef),\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __secretRefMixin({name: name}),\n            },\n            secretRefType:: hidden.core.v1.localObjectReference,\n          },\n        },\n        // TCPSocketAction describes an action based on opening a socket\n        tcpSocketAction:: {\n          new():: {},\n          // Optional: Host name to connect to, defaults to the pod IP.\n          withHost(host):: self + {host: host},\n          // Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\n          withPort(port):: {port: port},\n          mixin:: {\n          },\n        },\n        // The node this Taint is attached to has the effect \"effect\" on any pod that that does not tolerate the Taint.\n        taint:: {\n          new():: {},\n          // Required. The effect of the taint on pods that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute.\n          withEffect(effect):: self + {effect: effect},\n          // Required. The taint key to be applied to a node.\n          withKey(key):: self + {key: key},\n          // Required. The taint value corresponding to the taint key.\n          withValue(value):: self + {value: value},\n          mixin:: {\n            // TimeAdded represents the time at which the taint was added. It is only written for NoExecute taints.\n            timeAdded:: {\n              local __timeAddedMixin(timeAdded) = {timeAdded+: timeAdded},\n              mixinInstance(timeAdded):: __timeAddedMixin(timeAdded),\n            },\n            timeAddedType:: hidden.meta.v1.time,\n          },\n        },\n        // The pod this Toleration is attached to tolerates any taint that matches the triple <key,value,effect> using the matching operator <operator>.\n        toleration:: {\n          new():: {},\n          // Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.\n          withEffect(effect):: self + {effect: effect},\n          // Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.\n          withKey(key):: self + {key: key},\n          // Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.\n          withOperator(operator):: self + {operator: operator},\n          // TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.\n          withTolerationSeconds(tolerationSeconds):: self + {tolerationSeconds: tolerationSeconds},\n          // Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.\n          withValue(value):: self + {value: value},\n          mixin:: {\n          },\n        },\n        // Volume represents a named volume in a pod that may be accessed by any container in the pod.\n        volume:: {\n          fromConfigMap(name, configMapName, configMapItems):: {} + self.withName(name) + self.mixin.configMap.withName(configMapName) + self.mixin.configMap.withItems(configMapItems),\n          fromEmptyDir(name, emptyDir={}):: {} + self.withName(name) + self.mixin.emptyDir.mixinInstance(emptyDir),\n          fromPersistentVolumeClaim(name, claimName):: {} + self.withName(name) + self.mixin.persistentVolumeClaim.withClaimName(claimName),\n          fromHostPath(name, hostPath):: {} + self.withName(name) + self.mixin.hostPath.withPath(hostPath),\n          fromSecret(name, secretName):: {} + self.withName(name) + self.mixin.secret.withSecretName(secretName),\n          // Volume's name. Must be a DNS_LABEL and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n          withName(name):: self + {name: name},\n          mixin:: {\n            // AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n            awsElasticBlockStore:: {\n              local __awsElasticBlockStoreMixin(awsElasticBlockStore) = {awsElasticBlockStore+: awsElasticBlockStore},\n              mixinInstance(awsElasticBlockStore):: __awsElasticBlockStoreMixin(awsElasticBlockStore),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n              withFsType(fsType):: self + __awsElasticBlockStoreMixin({fsType: fsType}),\n              // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty).\n              withPartition(partition):: self + __awsElasticBlockStoreMixin({partition: partition}),\n              // Specify \"true\" to force and set the ReadOnly property in VolumeMounts to \"true\". If omitted, the default is \"false\". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n              withReadOnly(readOnly):: self + __awsElasticBlockStoreMixin({readOnly: readOnly}),\n              // Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\n              withVolumeId(volumeId):: self + __awsElasticBlockStoreMixin({volumeID: volumeId}),\n            },\n            awsElasticBlockStoreType:: hidden.core.v1.awsElasticBlockStoreVolumeSource,\n            // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.\n            azureDisk:: {\n              local __azureDiskMixin(azureDisk) = {azureDisk+: azureDisk},\n              mixinInstance(azureDisk):: __azureDiskMixin(azureDisk),\n              // Host Caching mode: None, Read Only, Read Write.\n              withCachingMode(cachingMode):: self + __azureDiskMixin({cachingMode: cachingMode}),\n              // The Name of the data disk in the blob storage\n              withDiskName(diskName):: self + __azureDiskMixin({diskName: diskName}),\n              // The URI the data disk in the blob storage\n              withDiskUri(diskUri):: self + __azureDiskMixin({diskURI: diskUri}),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __azureDiskMixin({fsType: fsType}),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __azureDiskMixin({readOnly: readOnly}),\n            },\n            azureDiskType:: hidden.core.v1.azureDiskVolumeSource,\n            // AzureFile represents an Azure File Service mount on the host and bind mount to the pod.\n            azureFile:: {\n              local __azureFileMixin(azureFile) = {azureFile+: azureFile},\n              mixinInstance(azureFile):: __azureFileMixin(azureFile),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __azureFileMixin({readOnly: readOnly}),\n              // the name of secret that contains Azure Storage Account Name and Key\n              withSecretName(secretName):: self + __azureFileMixin({secretName: secretName}),\n              // Share Name\n              withShareName(shareName):: self + __azureFileMixin({shareName: shareName}),\n            },\n            azureFileType:: hidden.core.v1.azureFileVolumeSource,\n            // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime\n            cephfs:: {\n              local __cephfsMixin(cephfs) = {cephfs+: cephfs},\n              mixinInstance(cephfs):: __cephfsMixin(cephfs),\n              // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withMonitors(monitors):: self + if std.type(monitors) == \"array\" then __cephfsMixin({monitors: monitors}) else __cephfsMixin({monitors: [monitors]}),\n              // Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withMonitorsMixin(monitors):: self + if std.type(monitors) == \"array\" then __cephfsMixin({monitors+: monitors}) else __cephfsMixin({monitors+: [monitors]}),\n              // Optional: Used as the mounted root, rather than the full Ceph tree, default is /\n              withPath(path):: self + __cephfsMixin({path: path}),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withReadOnly(readOnly):: self + __cephfsMixin({readOnly: readOnly}),\n              // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withSecretFile(secretFile):: self + __cephfsMixin({secretFile: secretFile}),\n              // Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __cephfsMixin({secretRef+: secretRef}),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({name: name}),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n              // Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\n              withUser(user):: self + __cephfsMixin({user: user}),\n            },\n            cephfsType:: hidden.core.v1.cephFsVolumeSource,\n            // Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n            cinder:: {\n              local __cinderMixin(cinder) = {cinder+: cinder},\n              mixinInstance(cinder):: __cinderMixin(cinder),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n              withFsType(fsType):: self + __cinderMixin({fsType: fsType}),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n              withReadOnly(readOnly):: self + __cinderMixin({readOnly: readOnly}),\n              // volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\n              withVolumeId(volumeId):: self + __cinderMixin({volumeID: volumeId}),\n            },\n            cinderType:: hidden.core.v1.cinderVolumeSource,\n            // ConfigMap represents a configMap that should populate this volume\n            configMap:: {\n              local __configMapMixin(configMap) = {configMap+: configMap},\n              mixinInstance(configMap):: __configMapMixin(configMap),\n              // Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n              withDefaultMode(defaultMode):: self + __configMapMixin({defaultMode: defaultMode}),\n              // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n              withItems(items):: self + if std.type(items) == \"array\" then __configMapMixin({items: items}) else __configMapMixin({items: [items]}),\n              // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n              withItemsMixin(items):: self + if std.type(items) == \"array\" then __configMapMixin({items+: items}) else __configMapMixin({items+: [items]}),\n              itemsType:: hidden.core.v1.keyToPath,\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __configMapMixin({name: name}),\n              // Specify whether the ConfigMap or it's keys must be defined\n              withOptional(optional):: self + __configMapMixin({optional: optional}),\n            },\n            configMapType:: hidden.core.v1.configMapVolumeSource,\n            // DownwardAPI represents downward API about the pod that should populate this volume\n            downwardApi:: {\n              local __downwardApiMixin(downwardApi) = {downwardAPI+: downwardApi},\n              mixinInstance(downwardApi):: __downwardApiMixin(downwardApi),\n              // Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n              withDefaultMode(defaultMode):: self + __downwardApiMixin({defaultMode: defaultMode}),\n              // Items is a list of downward API volume file\n              withItems(items):: self + if std.type(items) == \"array\" then __downwardApiMixin({items: items}) else __downwardApiMixin({items: [items]}),\n              // Items is a list of downward API volume file\n              withItemsMixin(items):: self + if std.type(items) == \"array\" then __downwardApiMixin({items+: items}) else __downwardApiMixin({items+: [items]}),\n              itemsType:: hidden.core.v1.downwardApiVolumeFile,\n            },\n            downwardApiType:: hidden.core.v1.downwardApiVolumeSource,\n            // EmptyDir represents a temporary directory that shares a pod's lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir\n            emptyDir:: {\n              local __emptyDirMixin(emptyDir) = {emptyDir+: emptyDir},\n              mixinInstance(emptyDir):: __emptyDirMixin(emptyDir),\n              // What type of storage medium should back this directory. The default is \"\" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir\n              withMedium(medium):: self + __emptyDirMixin({medium: medium}),\n              // Total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir\n              sizeLimit:: {\n                local __sizeLimitMixin(sizeLimit) = __emptyDirMixin({sizeLimit+: sizeLimit}),\n                mixinInstance(sizeLimit):: __sizeLimitMixin(sizeLimit),\n              },\n              sizeLimitType:: hidden.core.resource.quantity,\n            },\n            emptyDirType:: hidden.core.v1.emptyDirVolumeSource,\n            // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.\n            fc:: {\n              local __fcMixin(fc) = {fc+: fc},\n              mixinInstance(fc):: __fcMixin(fc),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __fcMixin({fsType: fsType}),\n              // Required: FC target lun number\n              withLun(lun):: self + __fcMixin({lun: lun}),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __fcMixin({readOnly: readOnly}),\n              // Required: FC target worldwide names (WWNs)\n              withTargetWwns(targetWwns):: self + if std.type(targetWwns) == \"array\" then __fcMixin({targetWWNs: targetWwns}) else __fcMixin({targetWWNs: [targetWwns]}),\n              // Required: FC target worldwide names (WWNs)\n              withTargetWwnsMixin(targetWwns):: self + if std.type(targetWwns) == \"array\" then __fcMixin({targetWWNs+: targetWwns}) else __fcMixin({targetWWNs+: [targetWwns]}),\n            },\n            fcType:: hidden.core.v1.fcVolumeSource,\n            // FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.\n            flexVolume:: {\n              local __flexVolumeMixin(flexVolume) = {flexVolume+: flexVolume},\n              mixinInstance(flexVolume):: __flexVolumeMixin(flexVolume),\n              // Driver is the name of the driver to use for this volume.\n              withDriver(driver):: self + __flexVolumeMixin({driver: driver}),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.\n              withFsType(fsType):: self + __flexVolumeMixin({fsType: fsType}),\n              // Optional: Extra command options if any.\n              withOptions(options):: self + __flexVolumeMixin({options: options}),\n              // Optional: Extra command options if any.\n              withOptionsMixin(options):: self + __flexVolumeMixin({options+: options}),\n              // Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __flexVolumeMixin({readOnly: readOnly}),\n              // Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __flexVolumeMixin({secretRef+: secretRef}),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({name: name}),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n            },\n            flexVolumeType:: hidden.core.v1.flexVolumeSource,\n            // Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running\n            flocker:: {\n              local __flockerMixin(flocker) = {flocker+: flocker},\n              mixinInstance(flocker):: __flockerMixin(flocker),\n              // Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated\n              withDatasetName(datasetName):: self + __flockerMixin({datasetName: datasetName}),\n              // UUID of the dataset. This is unique identifier of a Flocker dataset\n              withDatasetUuid(datasetUuid):: self + __flockerMixin({datasetUUID: datasetUuid}),\n            },\n            flockerType:: hidden.core.v1.flockerVolumeSource,\n            // GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n            gcePersistentDisk:: {\n              local __gcePersistentDiskMixin(gcePersistentDisk) = {gcePersistentDisk+: gcePersistentDisk},\n              mixinInstance(gcePersistentDisk):: __gcePersistentDiskMixin(gcePersistentDisk),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withFsType(fsType):: self + __gcePersistentDiskMixin({fsType: fsType}),\n              // The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withPartition(partition):: self + __gcePersistentDiskMixin({partition: partition}),\n              // Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withPdName(pdName):: self + __gcePersistentDiskMixin({pdName: pdName}),\n              // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\n              withReadOnly(readOnly):: self + __gcePersistentDiskMixin({readOnly: readOnly}),\n            },\n            gcePersistentDiskType:: hidden.core.v1.gcePersistentDiskVolumeSource,\n            // GitRepo represents a git repository at a particular revision.\n            gitRepo:: {\n              local __gitRepoMixin(gitRepo) = {gitRepo+: gitRepo},\n              mixinInstance(gitRepo):: __gitRepoMixin(gitRepo),\n              // Target directory name. Must not contain or start with '..'.  If '.' is supplied, the volume directory will be the git repository.  Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name.\n              withDirectory(directory):: self + __gitRepoMixin({directory: directory}),\n              // Repository URL\n              withRepository(repository):: self + __gitRepoMixin({repository: repository}),\n              // Commit hash for the specified revision.\n              withRevision(revision):: self + __gitRepoMixin({revision: revision}),\n            },\n            gitRepoType:: hidden.core.v1.gitRepoVolumeSource,\n            // Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md\n            glusterfs:: {\n              local __glusterfsMixin(glusterfs) = {glusterfs+: glusterfs},\n              mixinInstance(glusterfs):: __glusterfsMixin(glusterfs),\n              // EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n              withEndpoints(endpoints):: self + __glusterfsMixin({endpoints: endpoints}),\n              // Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n              withPath(path):: self + __glusterfsMixin({path: path}),\n              // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\n              withReadOnly(readOnly):: self + __glusterfsMixin({readOnly: readOnly}),\n            },\n            glusterfsType:: hidden.core.v1.glusterfsVolumeSource,\n            // HostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\n            hostPath:: {\n              local __hostPathMixin(hostPath) = {hostPath+: hostPath},\n              mixinInstance(hostPath):: __hostPathMixin(hostPath),\n              // Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\n              withPath(path):: self + __hostPathMixin({path: path}),\n            },\n            hostPathType:: hidden.core.v1.hostPathVolumeSource,\n            // ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://releases.k8s.io/HEAD/examples/volumes/iscsi/README.md\n            iscsi:: {\n              local __iscsiMixin(iscsi) = {iscsi+: iscsi},\n              mixinInstance(iscsi):: __iscsiMixin(iscsi),\n              // whether support iSCSI Discovery CHAP authentication\n              withChapAuthDiscovery(chapAuthDiscovery):: self + __iscsiMixin({chapAuthDiscovery: chapAuthDiscovery}),\n              // whether support iSCSI Session CHAP authentication\n              withChapAuthSession(chapAuthSession):: self + __iscsiMixin({chapAuthSession: chapAuthSession}),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi\n              withFsType(fsType):: self + __iscsiMixin({fsType: fsType}),\n              // Target iSCSI Qualified Name.\n              withIqn(iqn):: self + __iscsiMixin({iqn: iqn}),\n              // Optional: Defaults to 'default' (tcp). iSCSI interface name that uses an iSCSI transport.\n              withIscsiInterface(iscsiInterface):: self + __iscsiMixin({iscsiInterface: iscsiInterface}),\n              // iSCSI target lun number.\n              withLun(lun):: self + __iscsiMixin({lun: lun}),\n              // iSCSI target portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n              withPortals(portals):: self + if std.type(portals) == \"array\" then __iscsiMixin({portals: portals}) else __iscsiMixin({portals: [portals]}),\n              // iSCSI target portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n              withPortalsMixin(portals):: self + if std.type(portals) == \"array\" then __iscsiMixin({portals+: portals}) else __iscsiMixin({portals+: [portals]}),\n              // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.\n              withReadOnly(readOnly):: self + __iscsiMixin({readOnly: readOnly}),\n              // CHAP secret for iSCSI target and initiator authentication\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __iscsiMixin({secretRef+: secretRef}),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({name: name}),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n              // iSCSI target portal. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\n              withTargetPortal(targetPortal):: self + __iscsiMixin({targetPortal: targetPortal}),\n            },\n            iscsiType:: hidden.core.v1.iscsiVolumeSource,\n            // NFS represents an NFS mount on the host that shares a pod's lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n            nfs:: {\n              local __nfsMixin(nfs) = {nfs+: nfs},\n              mixinInstance(nfs):: __nfsMixin(nfs),\n              // Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n              withPath(path):: self + __nfsMixin({path: path}),\n              // ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n              withReadOnly(readOnly):: self + __nfsMixin({readOnly: readOnly}),\n              // Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\n              withServer(server):: self + __nfsMixin({server: server}),\n            },\n            nfsType:: hidden.core.v1.nfsVolumeSource,\n            // PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\n            persistentVolumeClaim:: {\n              local __persistentVolumeClaimMixin(persistentVolumeClaim) = {persistentVolumeClaim+: persistentVolumeClaim},\n              mixinInstance(persistentVolumeClaim):: __persistentVolumeClaimMixin(persistentVolumeClaim),\n              // ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\n              withClaimName(claimName):: self + __persistentVolumeClaimMixin({claimName: claimName}),\n              // Will force the ReadOnly setting in VolumeMounts. Default false.\n              withReadOnly(readOnly):: self + __persistentVolumeClaimMixin({readOnly: readOnly}),\n            },\n            persistentVolumeClaimType:: hidden.core.v1.persistentVolumeClaimVolumeSource,\n            // PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine\n            photonPersistentDisk:: {\n              local __photonPersistentDiskMixin(photonPersistentDisk) = {photonPersistentDisk+: photonPersistentDisk},\n              mixinInstance(photonPersistentDisk):: __photonPersistentDiskMixin(photonPersistentDisk),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __photonPersistentDiskMixin({fsType: fsType}),\n              // ID that identifies Photon Controller persistent disk\n              withPdId(pdId):: self + __photonPersistentDiskMixin({pdID: pdId}),\n            },\n            photonPersistentDiskType:: hidden.core.v1.photonPersistentDiskVolumeSource,\n            // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine\n            portworxVolume:: {\n              local __portworxVolumeMixin(portworxVolume) = {portworxVolume+: portworxVolume},\n              mixinInstance(portworxVolume):: __portworxVolumeMixin(portworxVolume),\n              // FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __portworxVolumeMixin({fsType: fsType}),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __portworxVolumeMixin({readOnly: readOnly}),\n              // VolumeID uniquely identifies a Portworx volume\n              withVolumeId(volumeId):: self + __portworxVolumeMixin({volumeID: volumeId}),\n            },\n            portworxVolumeType:: hidden.core.v1.portworxVolumeSource,\n            // Items for all in one resources secrets, configmaps, and downward API\n            projected:: {\n              local __projectedMixin(projected) = {projected+: projected},\n              mixinInstance(projected):: __projectedMixin(projected),\n              // Mode bits to use on created files by default. Must be a value between 0 and 0777. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n              withDefaultMode(defaultMode):: self + __projectedMixin({defaultMode: defaultMode}),\n              // list of volume projections\n              withSources(sources):: self + if std.type(sources) == \"array\" then __projectedMixin({sources: sources}) else __projectedMixin({sources: [sources]}),\n              // list of volume projections\n              withSourcesMixin(sources):: self + if std.type(sources) == \"array\" then __projectedMixin({sources+: sources}) else __projectedMixin({sources+: [sources]}),\n              sourcesType:: hidden.core.v1.volumeProjection,\n            },\n            projectedType:: hidden.core.v1.projectedVolumeSource,\n            // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime\n            quobyte:: {\n              local __quobyteMixin(quobyte) = {quobyte+: quobyte},\n              mixinInstance(quobyte):: __quobyteMixin(quobyte),\n              // Group to map volume access to Default is no group\n              withGroup(group):: self + __quobyteMixin({group: group}),\n              // ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.\n              withReadOnly(readOnly):: self + __quobyteMixin({readOnly: readOnly}),\n              // Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes\n              withRegistry(registry):: self + __quobyteMixin({registry: registry}),\n              // User to map volume access to Defaults to serivceaccount user\n              withUser(user):: self + __quobyteMixin({user: user}),\n              // Volume is a string that references an already created Quobyte volume by name.\n              withVolume(volume):: self + __quobyteMixin({volume: volume}),\n            },\n            quobyteType:: hidden.core.v1.quobyteVolumeSource,\n            // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md\n            rbd:: {\n              local __rbdMixin(rbd) = {rbd+: rbd},\n              mixinInstance(rbd):: __rbdMixin(rbd),\n              // Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd\n              withFsType(fsType):: self + __rbdMixin({fsType: fsType}),\n              // The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withImage(image):: self + __rbdMixin({image: image}),\n              // Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withKeyring(keyring):: self + __rbdMixin({keyring: keyring}),\n              // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withMonitors(monitors):: self + if std.type(monitors) == \"array\" then __rbdMixin({monitors: monitors}) else __rbdMixin({monitors: [monitors]}),\n              // A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withMonitorsMixin(monitors):: self + if std.type(monitors) == \"array\" then __rbdMixin({monitors+: monitors}) else __rbdMixin({monitors+: [monitors]}),\n              // The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withPool(pool):: self + __rbdMixin({pool: pool}),\n              // ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withReadOnly(readOnly):: self + __rbdMixin({readOnly: readOnly}),\n              // SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __rbdMixin({secretRef+: secretRef}),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({name: name}),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n              // The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\n              withUser(user):: self + __rbdMixin({user: user}),\n            },\n            rbdType:: hidden.core.v1.rbdVolumeSource,\n            // ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.\n            scaleIo:: {\n              local __scaleIoMixin(scaleIo) = {scaleIO+: scaleIo},\n              mixinInstance(scaleIo):: __scaleIoMixin(scaleIo),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __scaleIoMixin({fsType: fsType}),\n              // The host address of the ScaleIO API Gateway.\n              withGateway(gateway):: self + __scaleIoMixin({gateway: gateway}),\n              // The name of the Protection Domain for the configured storage (defaults to \"default\").\n              withProtectionDomain(protectionDomain):: self + __scaleIoMixin({protectionDomain: protectionDomain}),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __scaleIoMixin({readOnly: readOnly}),\n              // SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __scaleIoMixin({secretRef+: secretRef}),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({name: name}),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n              // Flag to enable/disable SSL communication with Gateway, default false\n              withSslEnabled(sslEnabled):: self + __scaleIoMixin({sslEnabled: sslEnabled}),\n              // Indicates whether the storage for a volume should be thick or thin (defaults to \"thin\").\n              withStorageMode(storageMode):: self + __scaleIoMixin({storageMode: storageMode}),\n              // The Storage Pool associated with the protection domain (defaults to \"default\").\n              withStoragePool(storagePool):: self + __scaleIoMixin({storagePool: storagePool}),\n              // The name of the storage system as configured in ScaleIO.\n              withSystem(system):: self + __scaleIoMixin({system: system}),\n              // The name of a volume already created in the ScaleIO system that is associated with this volume source.\n              withVolumeName(volumeName):: self + __scaleIoMixin({volumeName: volumeName}),\n            },\n            scaleIoType:: hidden.core.v1.scaleIoVolumeSource,\n            // Secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret\n            secret:: {\n              local __secretMixin(secret) = {secret+: secret},\n              mixinInstance(secret):: __secretMixin(secret),\n              // Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\n              withDefaultMode(defaultMode):: self + __secretMixin({defaultMode: defaultMode}),\n              // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n              withItems(items):: self + if std.type(items) == \"array\" then __secretMixin({items: items}) else __secretMixin({items: [items]}),\n              // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n              withItemsMixin(items):: self + if std.type(items) == \"array\" then __secretMixin({items+: items}) else __secretMixin({items+: [items]}),\n              itemsType:: hidden.core.v1.keyToPath,\n              // Specify whether the Secret or it's keys must be defined\n              withOptional(optional):: self + __secretMixin({optional: optional}),\n              // Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret\n              withSecretName(secretName):: self + __secretMixin({secretName: secretName}),\n            },\n            secretType:: hidden.core.v1.secretVolumeSource,\n            // StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.\n            storageos:: {\n              local __storageosMixin(storageos) = {storageos+: storageos},\n              mixinInstance(storageos):: __storageosMixin(storageos),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __storageosMixin({fsType: fsType}),\n              // Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\n              withReadOnly(readOnly):: self + __storageosMixin({readOnly: readOnly}),\n              // SecretRef specifies the secret to use for obtaining the StorageOS API credentials.  If not specified, default values will be attempted.\n              secretRef:: {\n                local __secretRefMixin(secretRef) = __storageosMixin({secretRef+: secretRef}),\n                mixinInstance(secretRef):: __secretRefMixin(secretRef),\n                // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n                withName(name):: self + __secretRefMixin({name: name}),\n              },\n              secretRefType:: hidden.core.v1.localObjectReference,\n              // VolumeName is the human-readable name of the StorageOS volume.  Volume names are only unique within a namespace.\n              withVolumeName(volumeName):: self + __storageosMixin({volumeName: volumeName}),\n              // VolumeNamespace specifies the scope of the volume within StorageOS.  If no namespace is specified then the Pod's namespace will be used.  This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.\n              withVolumeNamespace(volumeNamespace):: self + __storageosMixin({volumeNamespace: volumeNamespace}),\n            },\n            storageosType:: hidden.core.v1.storageOSVolumeSource,\n            // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine\n            vsphereVolume:: {\n              local __vsphereVolumeMixin(vsphereVolume) = {vsphereVolume+: vsphereVolume},\n              mixinInstance(vsphereVolume):: __vsphereVolumeMixin(vsphereVolume),\n              // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n              withFsType(fsType):: self + __vsphereVolumeMixin({fsType: fsType}),\n              // Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.\n              withStoragePolicyID(storagePolicyID):: self + __vsphereVolumeMixin({storagePolicyID: storagePolicyID}),\n              // Storage Policy Based Management (SPBM) profile name.\n              withStoragePolicyName(storagePolicyName):: self + __vsphereVolumeMixin({storagePolicyName: storagePolicyName}),\n              // Path that identifies vSphere volume vmdk\n              withVolumePath(volumePath):: self + __vsphereVolumeMixin({volumePath: volumePath}),\n            },\n            vsphereVolumeType:: hidden.core.v1.vsphereVirtualDiskVolumeSource,\n          },\n        },\n        // VolumeMount describes a mounting of a Volume within a container.\n        volumeMount:: {\n          new(name, mountPath, readOnly=false):: {} + self.withName(name) + self.withMountPath(mountPath) + self.withReadOnly(readOnly),\n          // Path within the container at which the volume should be mounted.  Must not contain ':'.\n          withMountPath(mountPath):: self + {mountPath: mountPath},\n          // This must match the Name of a Volume.\n          withName(name):: self + {name: name},\n          // Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false.\n          withReadOnly(readOnly):: self + {readOnly: readOnly},\n          // Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root).\n          withSubPath(subPath):: self + {subPath: subPath},\n          mixin:: {\n          },\n        },\n        // Projection that may be projected along with other supported volume types\n        volumeProjection:: {\n          new():: {},\n          mixin:: {\n            // information about the configMap data to project\n            configMap:: {\n              local __configMapMixin(configMap) = {configMap+: configMap},\n              mixinInstance(configMap):: __configMapMixin(configMap),\n              // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n              withItems(items):: self + if std.type(items) == \"array\" then __configMapMixin({items: items}) else __configMapMixin({items: [items]}),\n              // If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n              withItemsMixin(items):: self + if std.type(items) == \"array\" then __configMapMixin({items+: items}) else __configMapMixin({items+: [items]}),\n              itemsType:: hidden.core.v1.keyToPath,\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __configMapMixin({name: name}),\n              // Specify whether the ConfigMap or it's keys must be defined\n              withOptional(optional):: self + __configMapMixin({optional: optional}),\n            },\n            configMapType:: hidden.core.v1.configMapProjection,\n            // information about the downwardAPI data to project\n            downwardApi:: {\n              local __downwardApiMixin(downwardApi) = {downwardAPI+: downwardApi},\n              mixinInstance(downwardApi):: __downwardApiMixin(downwardApi),\n              // Items is a list of DownwardAPIVolume file\n              withItems(items):: self + if std.type(items) == \"array\" then __downwardApiMixin({items: items}) else __downwardApiMixin({items: [items]}),\n              // Items is a list of DownwardAPIVolume file\n              withItemsMixin(items):: self + if std.type(items) == \"array\" then __downwardApiMixin({items+: items}) else __downwardApiMixin({items+: [items]}),\n              itemsType:: hidden.core.v1.downwardApiVolumeFile,\n            },\n            downwardApiType:: hidden.core.v1.downwardApiProjection,\n            // information about the secret data to project\n            secret:: {\n              local __secretMixin(secret) = {secret+: secret},\n              mixinInstance(secret):: __secretMixin(secret),\n              // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n              withItems(items):: self + if std.type(items) == \"array\" then __secretMixin({items: items}) else __secretMixin({items: [items]}),\n              // If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\n              withItemsMixin(items):: self + if std.type(items) == \"array\" then __secretMixin({items+: items}) else __secretMixin({items+: [items]}),\n              itemsType:: hidden.core.v1.keyToPath,\n              // Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\n              withName(name):: self + __secretMixin({name: name}),\n              // Specify whether the Secret or its key must be defined\n              withOptional(optional):: self + __secretMixin({optional: optional}),\n            },\n            secretType:: hidden.core.v1.secretProjection,\n          },\n        },\n        // Represents a vSphere volume resource.\n        vsphereVirtualDiskVolumeSource:: {\n          new():: {},\n          // Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.\n          withFsType(fsType):: self + {fsType: fsType},\n          // Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.\n          withStoragePolicyID(storagePolicyID):: self + {storagePolicyID: storagePolicyID},\n          // Storage Policy Based Management (SPBM) profile name.\n          withStoragePolicyName(storagePolicyName):: self + {storagePolicyName: storagePolicyName},\n          // Path that identifies vSphere volume vmdk\n          withVolumePath(volumePath):: self + {volumePath: volumePath},\n          mixin:: {\n          },\n        },\n        // The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)\n        weightedPodAffinityTerm:: {\n          new():: {},\n          // weight associated with matching the corresponding podAffinityTerm, in the range 1-100.\n          withWeight(weight):: self + {weight: weight},\n          mixin:: {\n            // Required. A pod affinity term, associated with the corresponding weight.\n            podAffinityTerm:: {\n              local __podAffinityTermMixin(podAffinityTerm) = {podAffinityTerm+: podAffinityTerm},\n              mixinInstance(podAffinityTerm):: __podAffinityTermMixin(podAffinityTerm),\n              // A label query over a set of resources, in this case pods.\n              labelSelector:: {\n                local __labelSelectorMixin(labelSelector) = __podAffinityTermMixin({labelSelector+: labelSelector}),\n                mixinInstance(labelSelector):: __labelSelectorMixin(labelSelector),\n                // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __labelSelectorMixin({matchExpressions: matchExpressions}) else __labelSelectorMixin({matchExpressions: [matchExpressions]}),\n                // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n                withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __labelSelectorMixin({matchExpressions+: matchExpressions}) else __labelSelectorMixin({matchExpressions+: [matchExpressions]}),\n                matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n                // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                withMatchLabels(matchLabels):: self + __labelSelectorMixin({matchLabels: matchLabels}),\n                // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n                withMatchLabelsMixin(matchLabels):: self + __labelSelectorMixin({matchLabels+: matchLabels}),\n              },\n              labelSelectorType:: hidden.meta.v1.labelSelector,\n              // namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"\n              withNamespaces(namespaces):: self + if std.type(namespaces) == \"array\" then __podAffinityTermMixin({namespaces: namespaces}) else __podAffinityTermMixin({namespaces: [namespaces]}),\n              // namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"\n              withNamespacesMixin(namespaces):: self + if std.type(namespaces) == \"array\" then __podAffinityTermMixin({namespaces+: namespaces}) else __podAffinityTermMixin({namespaces+: [namespaces]}),\n              // This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. For PreferredDuringScheduling pod anti-affinity, empty topologyKey is interpreted as \"all topologies\" (\"all topologies\" here means all the topologyKeys indicated by scheduler command-line argument --failure-domains); for affinity and for RequiredDuringScheduling pod anti-affinity, empty topologyKey is not allowed.\n              withTopologyKey(topologyKey):: self + __podAffinityTermMixin({topologyKey: topologyKey}),\n            },\n            podAffinityTermType:: hidden.core.v1.podAffinityTerm,\n          },\n        },\n      },\n    },\n    extensions:: {\n      v1beta1:: {\n        local apiVersion = {apiVersion: \"extensions/v1beta1\"},\n        // An APIVersion represents a single concrete version of an object model.\n        apiVersion:: {\n          new():: {},\n          // Name of this version (e.g. 'v1').\n          withName(name):: self + {name: name},\n          mixin:: {\n          },\n        },\n        // DaemonSetSpec is the specification of a daemon set.\n        daemonSetSpec:: {\n          new():: {},\n          // The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).\n          withMinReadySeconds(minReadySeconds):: self + {minReadySeconds: minReadySeconds},\n          // The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.\n          withRevisionHistoryLimit(revisionHistoryLimit):: self + {revisionHistoryLimit: revisionHistoryLimit},\n          mixin:: {\n            // A label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = {selector+: selector},\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\n            template:: {\n              local __templateMixin(template) = {template+: template},\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n                // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n                withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                  pendingType:: hidden.meta.v1.initializer,\n                  // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                  result:: {\n                    local __resultMixin(result) = __initializersMixin({result+: result}),\n                    mixinInstance(result):: __resultMixin(result),\n                    // Suggested HTTP return code for this status, 0 if not set.\n                    withCode(code):: self + __resultMixin({code: code}),\n                    // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                    details:: {\n                      local __detailsMixin(details) = __resultMixin({details+: details}),\n                      mixinInstance(details):: __detailsMixin(details),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                      causesType:: hidden.meta.v1.statusCause,\n                      // The group attribute of the resource associated with the status StatusReason.\n                      withGroup(group):: self + __detailsMixin({group: group}),\n                      // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                      withName(name):: self + __detailsMixin({name: name}),\n                      // If specified, the time in seconds before the operation should be retried.\n                      withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                      // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                      withUid(uid):: self + __detailsMixin({uid: uid}),\n                    },\n                    detailsType:: hidden.meta.v1.statusDetails,\n                    // A human-readable description of the status of this operation.\n                    withMessage(message):: self + __resultMixin({message: message}),\n                    // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                    withReason(reason):: self + __resultMixin({reason: reason}),\n                  },\n                  resultType:: hidden.meta.v1.status,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({labels: labels}),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({name: name}),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({spec+: spec}),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({affinity+: affinity}),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}),\n                containersType:: hidden.core.v1.container,\n                // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({hostname: hostname}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}),\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}),\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n            // An update strategy to replace existing DaemonSet pods with new pods.\n            updateStrategy:: {\n              local __updateStrategyMixin(updateStrategy) = {updateStrategy+: updateStrategy},\n              mixinInstance(updateStrategy):: __updateStrategyMixin(updateStrategy),\n              // Rolling update config params. Present only if type = \"RollingUpdate\".\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __updateStrategyMixin({rollingUpdate+: rollingUpdate}),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.\n                withMaxUnavailable(maxUnavailable):: __rollingUpdateMixin({maxUnavailable: maxUnavailable}),\n              },\n              rollingUpdateType:: hidden.extensions.v1beta1.rollingUpdateDaemonSet,\n              // Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is OnDelete.\n              withType(type):: self + __updateStrategyMixin({type: type}),\n            },\n            updateStrategyType:: hidden.extensions.v1beta1.daemonSetUpdateStrategy,\n          },\n        },\n        // DaemonSetStatus represents the current status of a daemon set.\n        daemonSetStatus:: {\n          new():: {},\n          // Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.\n          withCollisionCount(collisionCount):: self + {collisionCount: collisionCount},\n          // The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\n          withCurrentNumberScheduled(currentNumberScheduled):: self + {currentNumberScheduled: currentNumberScheduled},\n          // The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\n          withDesiredNumberScheduled(desiredNumberScheduled):: self + {desiredNumberScheduled: desiredNumberScheduled},\n          // The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)\n          withNumberAvailable(numberAvailable):: self + {numberAvailable: numberAvailable},\n          // The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\n          withNumberMisscheduled(numberMisscheduled):: self + {numberMisscheduled: numberMisscheduled},\n          // The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.\n          withNumberReady(numberReady):: self + {numberReady: numberReady},\n          // The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)\n          withNumberUnavailable(numberUnavailable):: self + {numberUnavailable: numberUnavailable},\n          // The most recent generation observed by the daemon set controller.\n          withObservedGeneration(observedGeneration):: self + {observedGeneration: observedGeneration},\n          // The total number of nodes that are running updated daemon pod\n          withUpdatedNumberScheduled(updatedNumberScheduled):: self + {updatedNumberScheduled: updatedNumberScheduled},\n          mixin:: {\n          },\n        },\n        //\n        daemonSetUpdateStrategy:: {\n          new():: {},\n          // Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is OnDelete.\n          withType(type):: self + {type: type},\n          mixin:: {\n            // Rolling update config params. Present only if type = \"RollingUpdate\".\n            rollingUpdate:: {\n              local __rollingUpdateMixin(rollingUpdate) = {rollingUpdate+: rollingUpdate},\n              mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n              // The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.\n              withMaxUnavailable(maxUnavailable):: __rollingUpdateMixin({maxUnavailable: maxUnavailable}),\n            },\n            rollingUpdateType:: hidden.extensions.v1beta1.rollingUpdateDaemonSet,\n          },\n        },\n        // DeploymentCondition describes the state of a deployment at a certain point.\n        deploymentCondition:: {\n          new():: {},\n          // A human readable message indicating details about the transition.\n          withMessage(message):: self + {message: message},\n          // The reason for the condition's last transition.\n          withReason(reason):: self + {reason: reason},\n          // Type of deployment condition.\n          withType(type):: self + {type: type},\n          mixin:: {\n            // Last time the condition transitioned from one status to another.\n            lastTransitionTime:: {\n              local __lastTransitionTimeMixin(lastTransitionTime) = {lastTransitionTime+: lastTransitionTime},\n              mixinInstance(lastTransitionTime):: __lastTransitionTimeMixin(lastTransitionTime),\n            },\n            lastTransitionTimeType:: hidden.meta.v1.time,\n            // The last time this condition was updated.\n            lastUpdateTime:: {\n              local __lastUpdateTimeMixin(lastUpdateTime) = {lastUpdateTime+: lastUpdateTime},\n              mixinInstance(lastUpdateTime):: __lastUpdateTimeMixin(lastUpdateTime),\n            },\n            lastUpdateTimeType:: hidden.meta.v1.time,\n          },\n        },\n        // DeploymentSpec is the specification of the desired behavior of the Deployment.\n        deploymentSpec:: {\n          new():: {},\n          // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n          withMinReadySeconds(minReadySeconds):: self + {minReadySeconds: minReadySeconds},\n          // Indicates that the deployment is paused and will not be processed by the deployment controller.\n          withPaused(paused):: self + {paused: paused},\n          // The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Once autoRollback is implemented, the deployment controller will automatically rollback failed deployments. Note that progress will not be estimated during the time a deployment is paused. This is not set by default.\n          withProgressDeadlineSeconds(progressDeadlineSeconds):: self + {progressDeadlineSeconds: progressDeadlineSeconds},\n          // Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.\n          withReplicas(replicas):: self + {replicas: replicas},\n          // The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified.\n          withRevisionHistoryLimit(revisionHistoryLimit):: self + {revisionHistoryLimit: revisionHistoryLimit},\n          mixin:: {\n            // The config this deployment is rolling back to. Will be cleared after rollback is done.\n            rollbackTo:: {\n              local __rollbackToMixin(rollbackTo) = {rollbackTo+: rollbackTo},\n              mixinInstance(rollbackTo):: __rollbackToMixin(rollbackTo),\n              // The revision to rollback to. If set to 0, rollback to the last revision.\n              withRevision(revision):: self + __rollbackToMixin({revision: revision}),\n            },\n            rollbackToType:: hidden.extensions.v1beta1.rollbackConfig,\n            // Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.\n            selector:: {\n              local __selectorMixin(selector) = {selector+: selector},\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // The deployment strategy to use to replace existing pods with new ones.\n            strategy:: {\n              local __strategyMixin(strategy) = {strategy+: strategy},\n              mixinInstance(strategy):: __strategyMixin(strategy),\n              // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\n              rollingUpdate:: {\n                local __rollingUpdateMixin(rollingUpdate) = __strategyMixin({rollingUpdate+: rollingUpdate}),\n                mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n                // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\n                withMaxSurge(maxSurge):: __rollingUpdateMixin({maxSurge: maxSurge}),\n                // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n                withMaxUnavailable(maxUnavailable):: __rollingUpdateMixin({maxUnavailable: maxUnavailable}),\n              },\n              rollingUpdateType:: hidden.extensions.v1beta1.rollingUpdateDeployment,\n              // Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.\n              withType(type):: self + __strategyMixin({type: type}),\n            },\n            strategyType:: hidden.extensions.v1beta1.deploymentStrategy,\n            // Template describes the pods that will be created.\n            template:: {\n              local __templateMixin(template) = {template+: template},\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n                // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n                withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                  pendingType:: hidden.meta.v1.initializer,\n                  // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                  result:: {\n                    local __resultMixin(result) = __initializersMixin({result+: result}),\n                    mixinInstance(result):: __resultMixin(result),\n                    // Suggested HTTP return code for this status, 0 if not set.\n                    withCode(code):: self + __resultMixin({code: code}),\n                    // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                    details:: {\n                      local __detailsMixin(details) = __resultMixin({details+: details}),\n                      mixinInstance(details):: __detailsMixin(details),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                      causesType:: hidden.meta.v1.statusCause,\n                      // The group attribute of the resource associated with the status StatusReason.\n                      withGroup(group):: self + __detailsMixin({group: group}),\n                      // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                      withName(name):: self + __detailsMixin({name: name}),\n                      // If specified, the time in seconds before the operation should be retried.\n                      withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                      // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                      withUid(uid):: self + __detailsMixin({uid: uid}),\n                    },\n                    detailsType:: hidden.meta.v1.statusDetails,\n                    // A human-readable description of the status of this operation.\n                    withMessage(message):: self + __resultMixin({message: message}),\n                    // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                    withReason(reason):: self + __resultMixin({reason: reason}),\n                  },\n                  resultType:: hidden.meta.v1.status,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({labels: labels}),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({name: name}),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({spec+: spec}),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({affinity+: affinity}),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}),\n                containersType:: hidden.core.v1.container,\n                // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({hostname: hostname}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}),\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}),\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n        },\n        // DeploymentStatus is the most recently observed status of the Deployment.\n        deploymentStatus:: {\n          new():: {},\n          // Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.\n          withAvailableReplicas(availableReplicas):: self + {availableReplicas: availableReplicas},\n          // Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.\n          withCollisionCount(collisionCount):: self + {collisionCount: collisionCount},\n          // Represents the latest available observations of a deployment's current state.\n          withConditions(conditions):: self + if std.type(conditions) == \"array\" then {conditions: conditions} else {conditions: [conditions]},\n          // Represents the latest available observations of a deployment's current state.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == \"array\" then {conditions+: conditions} else {conditions+: [conditions]},\n          conditionsType:: hidden.extensions.v1beta1.deploymentCondition,\n          // The generation observed by the deployment controller.\n          withObservedGeneration(observedGeneration):: self + {observedGeneration: observedGeneration},\n          // Total number of ready pods targeted by this deployment.\n          withReadyReplicas(readyReplicas):: self + {readyReplicas: readyReplicas},\n          // Total number of non-terminated pods targeted by this deployment (their labels match the selector).\n          withReplicas(replicas):: self + {replicas: replicas},\n          // Total number of unavailable pods targeted by this deployment.\n          withUnavailableReplicas(unavailableReplicas):: self + {unavailableReplicas: unavailableReplicas},\n          // Total number of non-terminated pods targeted by this deployment that have the desired template spec.\n          withUpdatedReplicas(updatedReplicas):: self + {updatedReplicas: updatedReplicas},\n          mixin:: {\n          },\n        },\n        // DeploymentStrategy describes how to replace existing pods with new ones.\n        deploymentStrategy:: {\n          new():: {},\n          // Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.\n          withType(type):: self + {type: type},\n          mixin:: {\n            // Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\n            rollingUpdate:: {\n              local __rollingUpdateMixin(rollingUpdate) = {rollingUpdate+: rollingUpdate},\n              mixinInstance(rollingUpdate):: __rollingUpdateMixin(rollingUpdate),\n              // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\n              withMaxSurge(maxSurge):: __rollingUpdateMixin({maxSurge: maxSurge}),\n              // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n              withMaxUnavailable(maxUnavailable):: __rollingUpdateMixin({maxUnavailable: maxUnavailable}),\n            },\n            rollingUpdateType:: hidden.extensions.v1beta1.rollingUpdateDeployment,\n          },\n        },\n        // FSGroupStrategyOptions defines the strategy type and options used to create the strategy.\n        fsGroupStrategyOptions:: {\n          new():: {},\n          // Ranges are the allowed ranges of fs groups.  If you would like to force a single fs group then supply a single range with the same start and end.\n          withRanges(ranges):: self + if std.type(ranges) == \"array\" then {ranges: ranges} else {ranges: [ranges]},\n          // Ranges are the allowed ranges of fs groups.  If you would like to force a single fs group then supply a single range with the same start and end.\n          withRangesMixin(ranges):: self + if std.type(ranges) == \"array\" then {ranges+: ranges} else {ranges+: [ranges]},\n          rangesType:: hidden.extensions.v1beta1.idRange,\n          // Rule is the strategy that will dictate what FSGroup is used in the SecurityContext.\n          withRule(rule):: self + {rule: rule},\n          mixin:: {\n          },\n        },\n        // HTTPIngressPath associates a path regex with a backend. Incoming urls matching the path are forwarded to the backend.\n        httpIngressPath:: {\n          new():: {},\n          // Path is an extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional \"path\" part of a URL as defined by RFC 3986. Paths must begin with a '/'. If unspecified, the path defaults to a catch all sending traffic to the backend.\n          withPath(path):: self + {path: path},\n          mixin:: {\n            // Backend defines the referenced service endpoint to which the traffic will be forwarded to.\n            backend:: {\n              local __backendMixin(backend) = {backend+: backend},\n              mixinInstance(backend):: __backendMixin(backend),\n              // Specifies the name of the referenced service.\n              withServiceName(serviceName):: self + __backendMixin({serviceName: serviceName}),\n              // Specifies the port of the referenced service.\n              withServicePort(servicePort):: __backendMixin({servicePort: servicePort}),\n            },\n            backendType:: hidden.extensions.v1beta1.ingressBackend,\n          },\n        },\n        // HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http://<host>/<path>?<searchpart> -> backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'.\n        httpIngressRuleValue:: {\n          new():: {},\n          // A collection of paths that map requests to backends.\n          withPaths(paths):: self + if std.type(paths) == \"array\" then {paths: paths} else {paths: [paths]},\n          // A collection of paths that map requests to backends.\n          withPathsMixin(paths):: self + if std.type(paths) == \"array\" then {paths+: paths} else {paths+: [paths]},\n          pathsType:: hidden.extensions.v1beta1.httpIngressPath,\n          mixin:: {\n          },\n        },\n        // Host Port Range defines a range of host ports that will be enabled by a policy for pods to use.  It requires both the start and end to be defined.\n        hostPortRange:: {\n          new():: {},\n          // max is the end of the range, inclusive.\n          withMax(max):: self + {max: max},\n          // min is the start of the range, inclusive.\n          withMin(min):: self + {min: min},\n          mixin:: {\n          },\n        },\n        // ID Range provides a min/max of an allowed range of IDs.\n        idRange:: {\n          new():: {},\n          // Max is the end of the range, inclusive.\n          withMax(max):: self + {max: max},\n          // Min is the start of the range, inclusive.\n          withMin(min):: self + {min: min},\n          mixin:: {\n          },\n        },\n        // IngressBackend describes all endpoints for a given service and port.\n        ingressBackend:: {\n          new():: {},\n          // Specifies the name of the referenced service.\n          withServiceName(serviceName):: self + {serviceName: serviceName},\n          // Specifies the port of the referenced service.\n          withServicePort(servicePort):: {servicePort: servicePort},\n          mixin:: {\n          },\n        },\n        // IngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue.\n        ingressRule:: {\n          new():: {},\n          // Host is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the \"host\" part of the URI as defined in the RFC: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the\n          // \t  IP in the Spec of the parent Ingress.\n          // 2. The `:` delimiter is not respected because ports are not allowed.\n          // \t  Currently the port of an Ingress is implicitly :80 for http and\n          // \t  :443 for https.\n          // Both these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.\n          withHost(host):: self + {host: host},\n          mixin:: {\n            //\n            http:: {\n              local __httpMixin(http) = {http+: http},\n              mixinInstance(http):: __httpMixin(http),\n              // A collection of paths that map requests to backends.\n              withPaths(paths):: self + if std.type(paths) == \"array\" then __httpMixin({paths: paths}) else __httpMixin({paths: [paths]}),\n              // A collection of paths that map requests to backends.\n              withPathsMixin(paths):: self + if std.type(paths) == \"array\" then __httpMixin({paths+: paths}) else __httpMixin({paths+: [paths]}),\n              pathsType:: hidden.extensions.v1beta1.httpIngressPath,\n            },\n            httpType:: hidden.extensions.v1beta1.httpIngressRuleValue,\n          },\n        },\n        // IngressSpec describes the Ingress the user wishes to exist.\n        ingressSpec:: {\n          new():: {},\n          // A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.\n          withRules(rules):: self + if std.type(rules) == \"array\" then {rules: rules} else {rules: [rules]},\n          // A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.\n          withRulesMixin(rules):: self + if std.type(rules) == \"array\" then {rules+: rules} else {rules+: [rules]},\n          rulesType:: hidden.extensions.v1beta1.ingressRule,\n          // TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.\n          withTls(tls):: self + if std.type(tls) == \"array\" then {tls: tls} else {tls: [tls]},\n          // TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.\n          withTlsMixin(tls):: self + if std.type(tls) == \"array\" then {tls+: tls} else {tls+: [tls]},\n          tlsType:: hidden.extensions.v1beta1.ingressTls,\n          mixin:: {\n            // A default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default.\n            backend:: {\n              local __backendMixin(backend) = {backend+: backend},\n              mixinInstance(backend):: __backendMixin(backend),\n              // Specifies the name of the referenced service.\n              withServiceName(serviceName):: self + __backendMixin({serviceName: serviceName}),\n              // Specifies the port of the referenced service.\n              withServicePort(servicePort):: __backendMixin({servicePort: servicePort}),\n            },\n            backendType:: hidden.extensions.v1beta1.ingressBackend,\n          },\n        },\n        // IngressStatus describe the current state of the Ingress.\n        ingressStatus:: {\n          new():: {},\n          mixin:: {\n            // LoadBalancer contains the current status of the load-balancer.\n            loadBalancer:: {\n              local __loadBalancerMixin(loadBalancer) = {loadBalancer+: loadBalancer},\n              mixinInstance(loadBalancer):: __loadBalancerMixin(loadBalancer),\n              // Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.\n              withIngress(ingress):: self + if std.type(ingress) == \"array\" then __loadBalancerMixin({ingress: ingress}) else __loadBalancerMixin({ingress: [ingress]}),\n              // Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.\n              withIngressMixin(ingress):: self + if std.type(ingress) == \"array\" then __loadBalancerMixin({ingress+: ingress}) else __loadBalancerMixin({ingress+: [ingress]}),\n              ingressType:: hidden.core.v1.loadBalancerIngress,\n            },\n            loadBalancerType:: hidden.core.v1.loadBalancerStatus,\n          },\n        },\n        // IngressTLS describes the transport layer security associated with an Ingress.\n        ingressTls:: {\n          new():: {},\n          // Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.\n          withHosts(hosts):: self + if std.type(hosts) == \"array\" then {hosts: hosts} else {hosts: [hosts]},\n          // Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.\n          withHostsMixin(hosts):: self + if std.type(hosts) == \"array\" then {hosts+: hosts} else {hosts+: [hosts]},\n          // SecretName is the name of the secret used to terminate SSL traffic on 443. Field is left optional to allow SSL routing based on SNI hostname alone. If the SNI host in a listener conflicts with the \"Host\" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing.\n          withSecretName(secretName):: self + {secretName: secretName},\n          mixin:: {\n          },\n        },\n        // This NetworkPolicyIngressRule matches traffic if and only if the traffic matches both ports AND from.\n        networkPolicyIngressRule:: {\n          new():: {},\n          // List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.\n          withFrom(from):: self + if std.type(from) == \"array\" then {from: from} else {from: [from]},\n          // List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.\n          withFromMixin(from):: self + if std.type(from) == \"array\" then {from+: from} else {from+: [from]},\n          fromType:: hidden.extensions.v1beta1.networkPolicyPeer,\n          // List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.\n          withPorts(ports):: self + if std.type(ports) == \"array\" then {ports: ports} else {ports: [ports]},\n          // List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.\n          withPortsMixin(ports):: self + if std.type(ports) == \"array\" then {ports+: ports} else {ports+: [ports]},\n          portsType:: hidden.extensions.v1beta1.networkPolicyPort,\n          mixin:: {\n          },\n        },\n        //\n        networkPolicyPeer:: {\n          new():: {},\n          mixin:: {\n            // Selects Namespaces using cluster scoped-labels.  This matches all pods in all namespaces selected by this label selector. This field follows standard label selector semantics. If present but empty, this selector selects all namespaces.\n            namespaceSelector:: {\n              local __namespaceSelectorMixin(namespaceSelector) = {namespaceSelector+: namespaceSelector},\n              mixinInstance(namespaceSelector):: __namespaceSelectorMixin(namespaceSelector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __namespaceSelectorMixin({matchExpressions: matchExpressions}) else __namespaceSelectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __namespaceSelectorMixin({matchExpressions+: matchExpressions}) else __namespaceSelectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __namespaceSelectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __namespaceSelectorMixin({matchLabels+: matchLabels}),\n            },\n            namespaceSelectorType:: hidden.meta.v1.labelSelector,\n            // This is a label selector which selects Pods in this namespace. This field follows standard label selector semantics. If present but empty, this selector selects all pods in this namespace.\n            podSelector:: {\n              local __podSelectorMixin(podSelector) = {podSelector+: podSelector},\n              mixinInstance(podSelector):: __podSelectorMixin(podSelector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __podSelectorMixin({matchExpressions: matchExpressions}) else __podSelectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __podSelectorMixin({matchExpressions+: matchExpressions}) else __podSelectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __podSelectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __podSelectorMixin({matchLabels+: matchLabels}),\n            },\n            podSelectorType:: hidden.meta.v1.labelSelector,\n          },\n        },\n        //\n        networkPolicyPort:: {\n          new():: {},\n          // If specified, the port on the given protocol.  This can either be a numerical or named port on a pod.  If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.\n          withPort(port):: {port: port},\n          // Optional.  The protocol (TCP or UDP) which traffic must match. If not specified, this field defaults to TCP.\n          withProtocol(protocol):: self + {protocol: protocol},\n          mixin:: {\n          },\n        },\n        //\n        networkPolicySpec:: {\n          new():: {},\n          // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default).\n          withIngress(ingress):: self + if std.type(ingress) == \"array\" then {ingress: ingress} else {ingress: [ingress]},\n          // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default).\n          withIngressMixin(ingress):: self + if std.type(ingress) == \"array\" then {ingress+: ingress} else {ingress+: [ingress]},\n          ingressType:: hidden.extensions.v1beta1.networkPolicyIngressRule,\n          mixin:: {\n            // Selects the pods to which this NetworkPolicy object applies.  The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods.  In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.\n            podSelector:: {\n              local __podSelectorMixin(podSelector) = {podSelector+: podSelector},\n              mixinInstance(podSelector):: __podSelectorMixin(podSelector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __podSelectorMixin({matchExpressions: matchExpressions}) else __podSelectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __podSelectorMixin({matchExpressions+: matchExpressions}) else __podSelectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __podSelectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __podSelectorMixin({matchLabels+: matchLabels}),\n            },\n            podSelectorType:: hidden.meta.v1.labelSelector,\n          },\n        },\n        // Pod Security Policy Spec defines the policy enforced.\n        podSecurityPolicySpec:: {\n          new():: {},\n          // AllowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both AllowedCapabilities and RequiredDropCapabilities.\n          withAllowedCapabilities(allowedCapabilities):: self + if std.type(allowedCapabilities) == \"array\" then {allowedCapabilities: allowedCapabilities} else {allowedCapabilities: [allowedCapabilities]},\n          // AllowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both AllowedCapabilities and RequiredDropCapabilities.\n          withAllowedCapabilitiesMixin(allowedCapabilities):: self + if std.type(allowedCapabilities) == \"array\" then {allowedCapabilities+: allowedCapabilities} else {allowedCapabilities+: [allowedCapabilities]},\n          // DefaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability.  You may not list a capabiility in both DefaultAddCapabilities and RequiredDropCapabilities.\n          withDefaultAddCapabilities(defaultAddCapabilities):: self + if std.type(defaultAddCapabilities) == \"array\" then {defaultAddCapabilities: defaultAddCapabilities} else {defaultAddCapabilities: [defaultAddCapabilities]},\n          // DefaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability.  You may not list a capabiility in both DefaultAddCapabilities and RequiredDropCapabilities.\n          withDefaultAddCapabilitiesMixin(defaultAddCapabilities):: self + if std.type(defaultAddCapabilities) == \"array\" then {defaultAddCapabilities+: defaultAddCapabilities} else {defaultAddCapabilities+: [defaultAddCapabilities]},\n          // hostIPC determines if the policy allows the use of HostIPC in the pod spec.\n          withHostIpc(hostIpc):: self + {hostIPC: hostIpc},\n          // hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.\n          withHostNetwork(hostNetwork):: self + {hostNetwork: hostNetwork},\n          // hostPID determines if the policy allows the use of HostPID in the pod spec.\n          withHostPid(hostPid):: self + {hostPID: hostPid},\n          // hostPorts determines which host port ranges are allowed to be exposed.\n          withHostPorts(hostPorts):: self + if std.type(hostPorts) == \"array\" then {hostPorts: hostPorts} else {hostPorts: [hostPorts]},\n          // hostPorts determines which host port ranges are allowed to be exposed.\n          withHostPortsMixin(hostPorts):: self + if std.type(hostPorts) == \"array\" then {hostPorts+: hostPorts} else {hostPorts+: [hostPorts]},\n          hostPortsType:: hidden.extensions.v1beta1.hostPortRange,\n          // privileged determines if a pod can request to be run as privileged.\n          withPrivileged(privileged):: self + {privileged: privileged},\n          // ReadOnlyRootFilesystem when set to true will force containers to run with a read only root file system.  If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.\n          withReadOnlyRootFilesystem(readOnlyRootFilesystem):: self + {readOnlyRootFilesystem: readOnlyRootFilesystem},\n          // RequiredDropCapabilities are the capabilities that will be dropped from the container.  These are required to be dropped and cannot be added.\n          withRequiredDropCapabilities(requiredDropCapabilities):: self + if std.type(requiredDropCapabilities) == \"array\" then {requiredDropCapabilities: requiredDropCapabilities} else {requiredDropCapabilities: [requiredDropCapabilities]},\n          // RequiredDropCapabilities are the capabilities that will be dropped from the container.  These are required to be dropped and cannot be added.\n          withRequiredDropCapabilitiesMixin(requiredDropCapabilities):: self + if std.type(requiredDropCapabilities) == \"array\" then {requiredDropCapabilities+: requiredDropCapabilities} else {requiredDropCapabilities+: [requiredDropCapabilities]},\n          // volumes is a white list of allowed volume plugins.  Empty indicates that all plugins may be used.\n          withVolumes(volumes):: self + if std.type(volumes) == \"array\" then {volumes: volumes} else {volumes: [volumes]},\n          // volumes is a white list of allowed volume plugins.  Empty indicates that all plugins may be used.\n          withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then {volumes+: volumes} else {volumes+: [volumes]},\n          mixin:: {\n            // FSGroup is the strategy that will dictate what fs group is used by the SecurityContext.\n            fsGroup:: {\n              local __fsGroupMixin(fsGroup) = {fsGroup+: fsGroup},\n              mixinInstance(fsGroup):: __fsGroupMixin(fsGroup),\n              // Ranges are the allowed ranges of fs groups.  If you would like to force a single fs group then supply a single range with the same start and end.\n              withRanges(ranges):: self + if std.type(ranges) == \"array\" then __fsGroupMixin({ranges: ranges}) else __fsGroupMixin({ranges: [ranges]}),\n              // Ranges are the allowed ranges of fs groups.  If you would like to force a single fs group then supply a single range with the same start and end.\n              withRangesMixin(ranges):: self + if std.type(ranges) == \"array\" then __fsGroupMixin({ranges+: ranges}) else __fsGroupMixin({ranges+: [ranges]}),\n              rangesType:: hidden.extensions.v1beta1.idRange,\n              // Rule is the strategy that will dictate what FSGroup is used in the SecurityContext.\n              withRule(rule):: self + __fsGroupMixin({rule: rule}),\n            },\n            fsGroupType:: hidden.extensions.v1beta1.fsGroupStrategyOptions,\n            // runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.\n            runAsUser:: {\n              local __runAsUserMixin(runAsUser) = {runAsUser+: runAsUser},\n              mixinInstance(runAsUser):: __runAsUserMixin(runAsUser),\n              // Ranges are the allowed ranges of uids that may be used.\n              withRanges(ranges):: self + if std.type(ranges) == \"array\" then __runAsUserMixin({ranges: ranges}) else __runAsUserMixin({ranges: [ranges]}),\n              // Ranges are the allowed ranges of uids that may be used.\n              withRangesMixin(ranges):: self + if std.type(ranges) == \"array\" then __runAsUserMixin({ranges+: ranges}) else __runAsUserMixin({ranges+: [ranges]}),\n              rangesType:: hidden.extensions.v1beta1.idRange,\n              // Rule is the strategy that will dictate the allowable RunAsUser values that may be set.\n              withRule(rule):: self + __runAsUserMixin({rule: rule}),\n            },\n            runAsUserType:: hidden.extensions.v1beta1.runAsUserStrategyOptions,\n            // seLinux is the strategy that will dictate the allowable labels that may be set.\n            seLinux:: {\n              local __seLinuxMixin(seLinux) = {seLinux+: seLinux},\n              mixinInstance(seLinux):: __seLinuxMixin(seLinux),\n              // type is the strategy that will dictate the allowable labels that may be set.\n              withRule(rule):: self + __seLinuxMixin({rule: rule}),\n              // seLinuxOptions required to run as; required for MustRunAs More info: https://git.k8s.io/community/contributors/design-proposals/security_context.md\n              seLinuxOptions:: {\n                local __seLinuxOptionsMixin(seLinuxOptions) = __seLinuxMixin({seLinuxOptions+: seLinuxOptions}),\n                mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                // Level is SELinux level label that applies to the container.\n                withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                // Role is a SELinux role label that applies to the container.\n                withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                // Type is a SELinux type label that applies to the container.\n                withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                // User is a SELinux user label that applies to the container.\n                withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n              },\n              seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n            },\n            seLinuxType:: hidden.extensions.v1beta1.seLinuxStrategyOptions,\n            // SupplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.\n            supplementalGroups:: {\n              local __supplementalGroupsMixin(supplementalGroups) = {supplementalGroups+: supplementalGroups},\n              mixinInstance(supplementalGroups):: __supplementalGroupsMixin(supplementalGroups),\n              // Ranges are the allowed ranges of supplemental groups.  If you would like to force a single supplemental group then supply a single range with the same start and end.\n              withRanges(ranges):: self + if std.type(ranges) == \"array\" then __supplementalGroupsMixin({ranges: ranges}) else __supplementalGroupsMixin({ranges: [ranges]}),\n              // Ranges are the allowed ranges of supplemental groups.  If you would like to force a single supplemental group then supply a single range with the same start and end.\n              withRangesMixin(ranges):: self + if std.type(ranges) == \"array\" then __supplementalGroupsMixin({ranges+: ranges}) else __supplementalGroupsMixin({ranges+: [ranges]}),\n              rangesType:: hidden.extensions.v1beta1.idRange,\n              // Rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.\n              withRule(rule):: self + __supplementalGroupsMixin({rule: rule}),\n            },\n            supplementalGroupsType:: hidden.extensions.v1beta1.supplementalGroupsStrategyOptions,\n          },\n        },\n        // ReplicaSetCondition describes the state of a replica set at a certain point.\n        replicaSetCondition:: {\n          new():: {},\n          // A human readable message indicating details about the transition.\n          withMessage(message):: self + {message: message},\n          // The reason for the condition's last transition.\n          withReason(reason):: self + {reason: reason},\n          // Type of replica set condition.\n          withType(type):: self + {type: type},\n          mixin:: {\n            // The last time the condition transitioned from one status to another.\n            lastTransitionTime:: {\n              local __lastTransitionTimeMixin(lastTransitionTime) = {lastTransitionTime+: lastTransitionTime},\n              mixinInstance(lastTransitionTime):: __lastTransitionTimeMixin(lastTransitionTime),\n            },\n            lastTransitionTimeType:: hidden.meta.v1.time,\n          },\n        },\n        // ReplicaSetSpec is the specification of a ReplicaSet.\n        replicaSetSpec:: {\n          new():: {},\n          // Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\n          withMinReadySeconds(minReadySeconds):: self + {minReadySeconds: minReadySeconds},\n          // Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller\n          withReplicas(replicas):: self + {replicas: replicas},\n          mixin:: {\n            // Selector is a label query over pods that should match the replica count. If the selector is empty, it is defaulted to the labels present on the pod template. Label keys and values that must match in order to be controlled by this replica set. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n            selector:: {\n              local __selectorMixin(selector) = {selector+: selector},\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n            // Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\n            template:: {\n              local __templateMixin(template) = {template+: template},\n              mixinInstance(template):: __templateMixin(template),\n              // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\n              metadata:: {\n                local __metadataMixin(metadata) = __templateMixin({metadata+: metadata}),\n                mixinInstance(metadata):: __metadataMixin(metadata),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotations(annotations):: self + __metadataMixin({annotations: annotations}),\n                // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n                withAnnotationsMixin(annotations):: self + __metadataMixin({annotations+: annotations}),\n                // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n                withClusterName(clusterName):: self + __metadataMixin({clusterName: clusterName}),\n                // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n                withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + __metadataMixin({deletionGracePeriodSeconds: deletionGracePeriodSeconds}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers: finalizers}) else __metadataMixin({finalizers: [finalizers]}),\n                // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n                withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then __metadataMixin({finalizers+: finalizers}) else __metadataMixin({finalizers+: [finalizers]}),\n                // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n                //\n                // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n                //\n                // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n                withGenerateName(generateName):: self + __metadataMixin({generateName: generateName}),\n                // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n                //\n                // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n                initializers:: {\n                  local __initializersMixin(initializers) = __metadataMixin({initializers+: initializers}),\n                  mixinInstance(initializers):: __initializersMixin(initializers),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n                  // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n                  withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n                  pendingType:: hidden.meta.v1.initializer,\n                  // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n                  result:: {\n                    local __resultMixin(result) = __initializersMixin({result+: result}),\n                    mixinInstance(result):: __resultMixin(result),\n                    // Suggested HTTP return code for this status, 0 if not set.\n                    withCode(code):: self + __resultMixin({code: code}),\n                    // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                    details:: {\n                      local __detailsMixin(details) = __resultMixin({details+: details}),\n                      mixinInstance(details):: __detailsMixin(details),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                      // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                      withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                      causesType:: hidden.meta.v1.statusCause,\n                      // The group attribute of the resource associated with the status StatusReason.\n                      withGroup(group):: self + __detailsMixin({group: group}),\n                      // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                      withName(name):: self + __detailsMixin({name: name}),\n                      // If specified, the time in seconds before the operation should be retried.\n                      withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                      // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                      withUid(uid):: self + __detailsMixin({uid: uid}),\n                    },\n                    detailsType:: hidden.meta.v1.statusDetails,\n                    // A human-readable description of the status of this operation.\n                    withMessage(message):: self + __resultMixin({message: message}),\n                    // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                    withReason(reason):: self + __resultMixin({reason: reason}),\n                  },\n                  resultType:: hidden.meta.v1.status,\n                },\n                initializersType:: hidden.meta.v1.initializers,\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabels(labels):: self + __metadataMixin({labels: labels}),\n                // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n                withLabelsMixin(labels):: self + __metadataMixin({labels+: labels}),\n                // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n                withName(name):: self + __metadataMixin({name: name}),\n                // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n                //\n                // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n                withNamespace(namespace):: self + __metadataMixin({namespace: namespace}),\n              },\n              metadataType:: hidden.meta.v1.objectMeta,\n              // Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\n              spec:: {\n                local __specMixin(spec) = __templateMixin({spec+: spec}),\n                mixinInstance(spec):: __specMixin(spec),\n                // Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\n                withActiveDeadlineSeconds(activeDeadlineSeconds):: self + __specMixin({activeDeadlineSeconds: activeDeadlineSeconds}),\n                // If specified, the pod's scheduling constraints\n                affinity:: {\n                  local __affinityMixin(affinity) = __specMixin({affinity+: affinity}),\n                  mixinInstance(affinity):: __affinityMixin(affinity),\n                  // Describes node affinity scheduling rules for the pod.\n                  nodeAffinity:: {\n                    local __nodeAffinityMixin(nodeAffinity) = __affinityMixin({nodeAffinity+: nodeAffinity}),\n                    mixinInstance(nodeAffinity):: __nodeAffinityMixin(nodeAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __nodeAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.preferredSchedulingTerm,\n                    // If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\n                    requiredDuringSchedulingIgnoredDuringExecution:: {\n                      local __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution) = __nodeAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}),\n                      mixinInstance(requiredDuringSchedulingIgnoredDuringExecution):: __requiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTerms(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms: [nodeSelectorTerms]}),\n                      // Required. A list of node selector terms. The terms are ORed.\n                      withNodeSelectorTermsMixin(nodeSelectorTerms):: self + if std.type(nodeSelectorTerms) == \"array\" then __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: nodeSelectorTerms}) else __requiredDuringSchedulingIgnoredDuringExecutionMixin({nodeSelectorTerms+: [nodeSelectorTerms]}),\n                      nodeSelectorTermsType:: hidden.core.v1.nodeSelectorTerm,\n                    },\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.nodeSelector,\n                  },\n                  nodeAffinityType:: hidden.core.v1.nodeAffinity,\n                  // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\n                  podAffinity:: {\n                    local __podAffinityMixin(podAffinity) = __affinityMixin({podAffinity+: podAffinity}),\n                    mixinInstance(podAffinity):: __podAffinityMixin(podAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAffinityType:: hidden.core.v1.podAffinity,\n                  // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\n                  podAntiAffinity:: {\n                    local __podAntiAffinityMixin(podAntiAffinity) = __affinityMixin({podAntiAffinity+: podAntiAffinity}),\n                    mixinInstance(podAntiAffinity):: __podAntiAffinityMixin(podAntiAffinity),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecution(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    // The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\n                    withPreferredDuringSchedulingIgnoredDuringExecutionMixin(preferredDuringSchedulingIgnoredDuringExecution):: self + if std.type(preferredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: preferredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({preferredDuringSchedulingIgnoredDuringExecution+: [preferredDuringSchedulingIgnoredDuringExecution]}),\n                    preferredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.weightedPodAffinityTerm,\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecution(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\n                    withRequiredDuringSchedulingIgnoredDuringExecutionMixin(requiredDuringSchedulingIgnoredDuringExecution):: self + if std.type(requiredDuringSchedulingIgnoredDuringExecution) == \"array\" then __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: requiredDuringSchedulingIgnoredDuringExecution}) else __podAntiAffinityMixin({requiredDuringSchedulingIgnoredDuringExecution+: [requiredDuringSchedulingIgnoredDuringExecution]}),\n                    requiredDuringSchedulingIgnoredDuringExecutionType:: hidden.core.v1.podAffinityTerm,\n                  },\n                  podAntiAffinityType:: hidden.core.v1.podAntiAffinity,\n                },\n                affinityType:: hidden.core.v1.affinity,\n                // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\n                withAutomountServiceAccountToken(automountServiceAccountToken):: self + __specMixin({automountServiceAccountToken: automountServiceAccountToken}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainers(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers: containers}) else __specMixin({containers: [containers]}),\n                // List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\n                withContainersMixin(containers):: self + if std.type(containers) == \"array\" then __specMixin({containers+: containers}) else __specMixin({containers+: [containers]}),\n                containersType:: hidden.core.v1.container,\n                // Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n                withDnsPolicy(dnsPolicy):: self + __specMixin({dnsPolicy: dnsPolicy}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliases(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases: hostAliases}) else __specMixin({hostAliases: [hostAliases]}),\n                // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\n                withHostAliasesMixin(hostAliases):: self + if std.type(hostAliases) == \"array\" then __specMixin({hostAliases+: hostAliases}) else __specMixin({hostAliases+: [hostAliases]}),\n                hostAliasesType:: hidden.core.v1.hostAlias,\n                // Use the host's ipc namespace. Optional: Default to false.\n                withHostIpc(hostIpc):: self + __specMixin({hostIPC: hostIpc}),\n                // Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\n                withHostNetwork(hostNetwork):: self + __specMixin({hostNetwork: hostNetwork}),\n                // Use the host's pid namespace. Optional: Default to false.\n                withHostPid(hostPid):: self + __specMixin({hostPID: hostPid}),\n                // Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\n                withHostname(hostname):: self + __specMixin({hostname: hostname}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecrets(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets: imagePullSecrets}) else __specMixin({imagePullSecrets: [imagePullSecrets]}),\n                // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\n                withImagePullSecretsMixin(imagePullSecrets):: self + if std.type(imagePullSecrets) == \"array\" then __specMixin({imagePullSecrets+: imagePullSecrets}) else __specMixin({imagePullSecrets+: [imagePullSecrets]}),\n                imagePullSecretsType:: hidden.core.v1.localObjectReference,\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainers(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers: initContainers}) else __specMixin({initContainers: [initContainers]}),\n                // List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n                withInitContainersMixin(initContainers):: self + if std.type(initContainers) == \"array\" then __specMixin({initContainers+: initContainers}) else __specMixin({initContainers+: [initContainers]}),\n                initContainersType:: hidden.core.v1.container,\n                // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\n                withNodeName(nodeName):: self + __specMixin({nodeName: nodeName}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelector(nodeSelector):: self + __specMixin({nodeSelector: nodeSelector}),\n                // NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\n                withNodeSelectorMixin(nodeSelector):: self + __specMixin({nodeSelector+: nodeSelector}),\n                // Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n                withRestartPolicy(restartPolicy):: self + __specMixin({restartPolicy: restartPolicy}),\n                // If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\n                withSchedulerName(schedulerName):: self + __specMixin({schedulerName: schedulerName}),\n                // SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\n                securityContext:: {\n                  local __securityContextMixin(securityContext) = __specMixin({securityContext+: securityContext}),\n                  mixinInstance(securityContext):: __securityContextMixin(securityContext),\n                  // A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n                  //\n                  // 1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n                  //\n                  // If unset, the Kubelet will not modify the ownership and permissions of any volume.\n                  withFsGroup(fsGroup):: self + __securityContextMixin({fsGroup: fsGroup}),\n                  // Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\n                  withRunAsNonRoot(runAsNonRoot):: self + __securityContextMixin({runAsNonRoot: runAsNonRoot}),\n                  // The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  withRunAsUser(runAsUser):: self + __securityContextMixin({runAsUser: runAsUser}),\n                  // The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\n                  seLinuxOptions:: {\n                    local __seLinuxOptionsMixin(seLinuxOptions) = __securityContextMixin({seLinuxOptions+: seLinuxOptions}),\n                    mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n                    // Level is SELinux level label that applies to the container.\n                    withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n                    // Role is a SELinux role label that applies to the container.\n                    withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n                    // Type is a SELinux type label that applies to the container.\n                    withType(type):: self + __seLinuxOptionsMixin({type: type}),\n                    // User is a SELinux user label that applies to the container.\n                    withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n                  },\n                  seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroups(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups: supplementalGroups}) else __securityContextMixin({supplementalGroups: [supplementalGroups]}),\n                  // A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\n                  withSupplementalGroupsMixin(supplementalGroups):: self + if std.type(supplementalGroups) == \"array\" then __securityContextMixin({supplementalGroups+: supplementalGroups}) else __securityContextMixin({supplementalGroups+: [supplementalGroups]}),\n                },\n                securityContextType:: hidden.core.v1.podSecurityContext,\n                // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\n                withServiceAccount(serviceAccount):: self + __specMixin({serviceAccount: serviceAccount}),\n                // ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\n                withServiceAccountName(serviceAccountName):: self + __specMixin({serviceAccountName: serviceAccountName}),\n                // If specified, the fully qualified Pod hostname will be \"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>\". If not specified, the pod will not have a domainname at all.\n                withSubdomain(subdomain):: self + __specMixin({subdomain: subdomain}),\n                // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\n                withTerminationGracePeriodSeconds(terminationGracePeriodSeconds):: self + __specMixin({terminationGracePeriodSeconds: terminationGracePeriodSeconds}),\n                // If specified, the pod's tolerations.\n                withTolerations(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations: tolerations}) else __specMixin({tolerations: [tolerations]}),\n                // If specified, the pod's tolerations.\n                withTolerationsMixin(tolerations):: self + if std.type(tolerations) == \"array\" then __specMixin({tolerations+: tolerations}) else __specMixin({tolerations+: [tolerations]}),\n                tolerationsType:: hidden.core.v1.toleration,\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumes(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes: volumes}) else __specMixin({volumes: [volumes]}),\n                // List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\n                withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then __specMixin({volumes+: volumes}) else __specMixin({volumes+: [volumes]}),\n                volumesType:: hidden.core.v1.volume,\n              },\n              specType:: hidden.core.v1.podSpec,\n            },\n            templateType:: hidden.core.v1.podTemplateSpec,\n          },\n        },\n        // ReplicaSetStatus represents the current status of a ReplicaSet.\n        replicaSetStatus:: {\n          new():: {},\n          // The number of available replicas (ready for at least minReadySeconds) for this replica set.\n          withAvailableReplicas(availableReplicas):: self + {availableReplicas: availableReplicas},\n          // Represents the latest available observations of a replica set's current state.\n          withConditions(conditions):: self + if std.type(conditions) == \"array\" then {conditions: conditions} else {conditions: [conditions]},\n          // Represents the latest available observations of a replica set's current state.\n          withConditionsMixin(conditions):: self + if std.type(conditions) == \"array\" then {conditions+: conditions} else {conditions+: [conditions]},\n          conditionsType:: hidden.extensions.v1beta1.replicaSetCondition,\n          // The number of pods that have labels matching the labels of the pod template of the replicaset.\n          withFullyLabeledReplicas(fullyLabeledReplicas):: self + {fullyLabeledReplicas: fullyLabeledReplicas},\n          // ObservedGeneration reflects the generation of the most recently observed ReplicaSet.\n          withObservedGeneration(observedGeneration):: self + {observedGeneration: observedGeneration},\n          // The number of ready replicas for this replica set.\n          withReadyReplicas(readyReplicas):: self + {readyReplicas: readyReplicas},\n          // Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller\n          withReplicas(replicas):: self + {replicas: replicas},\n          mixin:: {\n          },\n        },\n        //\n        rollbackConfig:: {\n          new():: {},\n          // The revision to rollback to. If set to 0, rollback to the last revision.\n          withRevision(revision):: self + {revision: revision},\n          mixin:: {\n          },\n        },\n        // Spec to control the desired behavior of daemon set rolling update.\n        rollingUpdateDaemonSet:: {\n          new():: {},\n          // The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.\n          withMaxUnavailable(maxUnavailable):: {maxUnavailable: maxUnavailable},\n          mixin:: {\n          },\n        },\n        // Spec to control the desired behavior of rolling update.\n        rollingUpdateDeployment:: {\n          new():: {},\n          // The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\n          withMaxSurge(maxSurge):: {maxSurge: maxSurge},\n          // The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\n          withMaxUnavailable(maxUnavailable):: {maxUnavailable: maxUnavailable},\n          mixin:: {\n          },\n        },\n        // Run A sUser Strategy Options defines the strategy type and any options used to create the strategy.\n        runAsUserStrategyOptions:: {\n          new():: {},\n          // Ranges are the allowed ranges of uids that may be used.\n          withRanges(ranges):: self + if std.type(ranges) == \"array\" then {ranges: ranges} else {ranges: [ranges]},\n          // Ranges are the allowed ranges of uids that may be used.\n          withRangesMixin(ranges):: self + if std.type(ranges) == \"array\" then {ranges+: ranges} else {ranges+: [ranges]},\n          rangesType:: hidden.extensions.v1beta1.idRange,\n          // Rule is the strategy that will dictate the allowable RunAsUser values that may be set.\n          withRule(rule):: self + {rule: rule},\n          mixin:: {\n          },\n        },\n        // SELinux  Strategy Options defines the strategy type and any options used to create the strategy.\n        seLinuxStrategyOptions:: {\n          new():: {},\n          // type is the strategy that will dictate the allowable labels that may be set.\n          withRule(rule):: self + {rule: rule},\n          mixin:: {\n            // seLinuxOptions required to run as; required for MustRunAs More info: https://git.k8s.io/community/contributors/design-proposals/security_context.md\n            seLinuxOptions:: {\n              local __seLinuxOptionsMixin(seLinuxOptions) = {seLinuxOptions+: seLinuxOptions},\n              mixinInstance(seLinuxOptions):: __seLinuxOptionsMixin(seLinuxOptions),\n              // Level is SELinux level label that applies to the container.\n              withLevel(level):: self + __seLinuxOptionsMixin({level: level}),\n              // Role is a SELinux role label that applies to the container.\n              withRole(role):: self + __seLinuxOptionsMixin({role: role}),\n              // Type is a SELinux type label that applies to the container.\n              withType(type):: self + __seLinuxOptionsMixin({type: type}),\n              // User is a SELinux user label that applies to the container.\n              withUser(user):: self + __seLinuxOptionsMixin({user: user}),\n            },\n            seLinuxOptionsType:: hidden.core.v1.seLinuxOptions,\n          },\n        },\n        // describes the attributes of a scale subresource\n        scaleSpec:: {\n          new():: {},\n          // desired number of instances for the scaled object.\n          withReplicas(replicas):: self + {replicas: replicas},\n          mixin:: {\n          },\n        },\n        // represents the current status of a scale subresource.\n        scaleStatus:: {\n          new():: {},\n          // actual number of observed instances of the scaled object.\n          withReplicas(replicas):: self + {replicas: replicas},\n          // label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors\n          withSelector(selector):: self + {selector: selector},\n          // label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors\n          withSelectorMixin(selector):: self + {selector+: selector},\n          // label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\n          withTargetSelector(targetSelector):: self + {targetSelector: targetSelector},\n          mixin:: {\n          },\n        },\n        // SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy.\n        supplementalGroupsStrategyOptions:: {\n          new():: {},\n          // Ranges are the allowed ranges of supplemental groups.  If you would like to force a single supplemental group then supply a single range with the same start and end.\n          withRanges(ranges):: self + if std.type(ranges) == \"array\" then {ranges: ranges} else {ranges: [ranges]},\n          // Ranges are the allowed ranges of supplemental groups.  If you would like to force a single supplemental group then supply a single range with the same start and end.\n          withRangesMixin(ranges):: self + if std.type(ranges) == \"array\" then {ranges+: ranges} else {ranges+: [ranges]},\n          rangesType:: hidden.extensions.v1beta1.idRange,\n          // Rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.\n          withRule(rule):: self + {rule: rule},\n          mixin:: {\n          },\n        },\n      },\n    },\n    meta:: {\n      v1:: {\n        local apiVersion = {apiVersion: \"meta/v1\"},\n        // APIGroup contains the name, the supported versions, and the preferred version of a group.\n        apiGroup:: {\n          new():: {},\n          // name is the name of the group.\n          withName(name):: self + {name: name},\n          // a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.\n          withServerAddressByClientCidrs(serverAddressByClientCidrs):: self + if std.type(serverAddressByClientCidrs) == \"array\" then {serverAddressByClientCIDRs: serverAddressByClientCidrs} else {serverAddressByClientCIDRs: [serverAddressByClientCidrs]},\n          // a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.\n          withServerAddressByClientCidrsMixin(serverAddressByClientCidrs):: self + if std.type(serverAddressByClientCidrs) == \"array\" then {serverAddressByClientCIDRs+: serverAddressByClientCidrs} else {serverAddressByClientCIDRs+: [serverAddressByClientCidrs]},\n          serverAddressByClientCidrsType:: hidden.meta.v1.serverAddressByClientCidr,\n          // versions are the versions supported in this group.\n          withVersions(versions):: self + if std.type(versions) == \"array\" then {versions: versions} else {versions: [versions]},\n          // versions are the versions supported in this group.\n          withVersionsMixin(versions):: self + if std.type(versions) == \"array\" then {versions+: versions} else {versions+: [versions]},\n          versionsType:: hidden.meta.v1.groupVersionForDiscovery,\n          mixin:: {\n            // preferredVersion is the version preferred by the API server, which probably is the storage version.\n            preferredVersion:: {\n              local __preferredVersionMixin(preferredVersion) = {preferredVersion+: preferredVersion},\n              mixinInstance(preferredVersion):: __preferredVersionMixin(preferredVersion),\n              // groupVersion specifies the API group and version in the form \"group/version\"\n              withGroupVersion(groupVersion):: self + __preferredVersionMixin({groupVersion: groupVersion}),\n              // version specifies the version in the form of \"version\". This is to save the clients the trouble of splitting the GroupVersion.\n              withVersion(version):: self + __preferredVersionMixin({version: version}),\n            },\n            preferredVersionType:: hidden.meta.v1.groupVersionForDiscovery,\n          },\n        },\n        // APIGroupList is a list of APIGroup, to allow clients to discover the API at /apis.\n        apiGroupList:: {\n          new():: {},\n          // groups is a list of APIGroup.\n          withGroups(groups):: self + if std.type(groups) == \"array\" then {groups: groups} else {groups: [groups]},\n          // groups is a list of APIGroup.\n          withGroupsMixin(groups):: self + if std.type(groups) == \"array\" then {groups+: groups} else {groups+: [groups]},\n          groupsType:: hidden.meta.v1.apiGroup,\n          mixin:: {\n          },\n        },\n        // APIResource specifies the name of a resource and whether it is namespaced.\n        apiResource:: {\n          new():: {},\n          // categories is a list of the grouped resources this resource belongs to (e.g. 'all')\n          withCategories(categories):: self + if std.type(categories) == \"array\" then {categories: categories} else {categories: [categories]},\n          // categories is a list of the grouped resources this resource belongs to (e.g. 'all')\n          withCategoriesMixin(categories):: self + if std.type(categories) == \"array\" then {categories+: categories} else {categories+: [categories]},\n          // name is the plural name of the resource.\n          withName(name):: self + {name: name},\n          // namespaced indicates if a resource is namespaced or not.\n          withNamespaced(namespaced):: self + {namespaced: namespaced},\n          // shortNames is a list of suggested short names of the resource.\n          withShortNames(shortNames):: self + if std.type(shortNames) == \"array\" then {shortNames: shortNames} else {shortNames: [shortNames]},\n          // shortNames is a list of suggested short names of the resource.\n          withShortNamesMixin(shortNames):: self + if std.type(shortNames) == \"array\" then {shortNames+: shortNames} else {shortNames+: [shortNames]},\n          // singularName is the singular name of the resource.  This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.\n          withSingularName(singularName):: self + {singularName: singularName},\n          // verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)\n          withVerbs(verbs):: self + if std.type(verbs) == \"array\" then {verbs: verbs} else {verbs: [verbs]},\n          // verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)\n          withVerbsMixin(verbs):: self + if std.type(verbs) == \"array\" then {verbs+: verbs} else {verbs+: [verbs]},\n          mixin:: {\n          },\n        },\n        // APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.\n        apiResourceList:: {\n          new():: {},\n          // groupVersion is the group and version this APIResourceList is for.\n          withGroupVersion(groupVersion):: self + {groupVersion: groupVersion},\n          // resources contains the name of the resources and if they are namespaced.\n          withResources(resources):: self + if std.type(resources) == \"array\" then {resources: resources} else {resources: [resources]},\n          // resources contains the name of the resources and if they are namespaced.\n          withResourcesMixin(resources):: self + if std.type(resources) == \"array\" then {resources+: resources} else {resources+: [resources]},\n          resourcesType:: hidden.meta.v1.apiResource,\n          mixin:: {\n          },\n        },\n        // APIVersions lists the versions that are available, to allow clients to discover the API at /api, which is the root path of the legacy v1 API.\n        apiVersions:: {\n          new():: {},\n          // a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.\n          withServerAddressByClientCidrs(serverAddressByClientCidrs):: self + if std.type(serverAddressByClientCidrs) == \"array\" then {serverAddressByClientCIDRs: serverAddressByClientCidrs} else {serverAddressByClientCIDRs: [serverAddressByClientCidrs]},\n          // a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.\n          withServerAddressByClientCidrsMixin(serverAddressByClientCidrs):: self + if std.type(serverAddressByClientCidrs) == \"array\" then {serverAddressByClientCIDRs+: serverAddressByClientCidrs} else {serverAddressByClientCIDRs+: [serverAddressByClientCidrs]},\n          serverAddressByClientCidrsType:: hidden.meta.v1.serverAddressByClientCidr,\n          // versions are the api versions that are available.\n          withVersions(versions):: self + if std.type(versions) == \"array\" then {versions: versions} else {versions: [versions]},\n          // versions are the api versions that are available.\n          withVersionsMixin(versions):: self + if std.type(versions) == \"array\" then {versions+: versions} else {versions+: [versions]},\n          mixin:: {\n          },\n        },\n        // DeleteOptions may be provided when deleting an API object.\n        deleteOptions:: {\n          new():: {},\n          // The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\n          withGracePeriodSeconds(gracePeriodSeconds):: self + {gracePeriodSeconds: gracePeriodSeconds},\n          // Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\n          withOrphanDependents(orphanDependents):: self + {orphanDependents: orphanDependents},\n          // Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\n          withPropagationPolicy(propagationPolicy):: self + {propagationPolicy: propagationPolicy},\n          mixin:: {\n            // Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.\n            preconditions:: {\n              local __preconditionsMixin(preconditions) = {preconditions+: preconditions},\n              mixinInstance(preconditions):: __preconditionsMixin(preconditions),\n              // Specifies the target UID.\n              withUid(uid):: self + __preconditionsMixin({uid: uid}),\n            },\n            preconditionsType:: hidden.meta.v1.preconditions,\n          },\n        },\n        // GroupVersion contains the \"group/version\" and \"version\" string of a version. It is made a struct to keep extensibility.\n        groupVersionForDiscovery:: {\n          new():: {},\n          // groupVersion specifies the API group and version in the form \"group/version\"\n          withGroupVersion(groupVersion):: self + {groupVersion: groupVersion},\n          // version specifies the version in the form of \"version\". This is to save the clients the trouble of splitting the GroupVersion.\n          withVersion(version):: self + {version: version},\n          mixin:: {\n          },\n        },\n        // Initializer is information about an initializer that has not yet completed.\n        initializer:: {\n          new():: {},\n          // name of the process that is responsible for initializing this object.\n          withName(name):: self + {name: name},\n          mixin:: {\n          },\n        },\n        // Initializers tracks the progress of initialization.\n        initializers:: {\n          new():: {},\n          // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n          withPending(pending):: self + if std.type(pending) == \"array\" then {pending: pending} else {pending: [pending]},\n          // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n          withPendingMixin(pending):: self + if std.type(pending) == \"array\" then {pending+: pending} else {pending+: [pending]},\n          pendingType:: hidden.meta.v1.initializer,\n          mixin:: {\n            // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n            result:: {\n              local __resultMixin(result) = {result+: result},\n              mixinInstance(result):: __resultMixin(result),\n              // Suggested HTTP return code for this status, 0 if not set.\n              withCode(code):: self + __resultMixin({code: code}),\n              // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n              details:: {\n                local __detailsMixin(details) = __resultMixin({details+: details}),\n                mixinInstance(details):: __detailsMixin(details),\n                // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                causesType:: hidden.meta.v1.statusCause,\n                // The group attribute of the resource associated with the status StatusReason.\n                withGroup(group):: self + __detailsMixin({group: group}),\n                // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                withName(name):: self + __detailsMixin({name: name}),\n                // If specified, the time in seconds before the operation should be retried.\n                withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                withUid(uid):: self + __detailsMixin({uid: uid}),\n              },\n              detailsType:: hidden.meta.v1.statusDetails,\n              // A human-readable description of the status of this operation.\n              withMessage(message):: self + __resultMixin({message: message}),\n              // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n              withReason(reason):: self + __resultMixin({reason: reason}),\n            },\n            resultType:: hidden.meta.v1.status,\n          },\n        },\n        // A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.\n        labelSelector:: {\n          new():: {},\n          // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n          withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then {matchExpressions: matchExpressions} else {matchExpressions: [matchExpressions]},\n          // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n          withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then {matchExpressions+: matchExpressions} else {matchExpressions+: [matchExpressions]},\n          matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n          // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n          withMatchLabels(matchLabels):: self + {matchLabels: matchLabels},\n          // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n          withMatchLabelsMixin(matchLabels):: self + {matchLabels+: matchLabels},\n          mixin:: {\n          },\n        },\n        // A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.\n        labelSelectorRequirement:: {\n          new():: {},\n          // key is the label key that the selector applies to.\n          withKey(key):: self + {key: key},\n          // operator represents a key's relationship to a set of values. Valid operators ard In, NotIn, Exists and DoesNotExist.\n          withOperator(operator):: self + {operator: operator},\n          // values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.\n          withValues(values):: self + if std.type(values) == \"array\" then {values: values} else {values: [values]},\n          // values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.\n          withValuesMixin(values):: self + if std.type(values) == \"array\" then {values+: values} else {values+: [values]},\n          mixin:: {\n          },\n        },\n        // ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.\n        listMeta:: {\n          new():: {},\n          // String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\n          withResourceVersion(resourceVersion):: self + {resourceVersion: resourceVersion},\n          // SelfLink is a URL representing this object. Populated by the system. Read-only.\n          withSelfLink(selfLink):: self + {selfLink: selfLink},\n          mixin:: {\n          },\n        },\n        // ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.\n        objectMeta:: {\n          new():: {},\n          // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n          withAnnotations(annotations):: self + {annotations: annotations},\n          // Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\n          withAnnotationsMixin(annotations):: self + {annotations+: annotations},\n          // The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\n          withClusterName(clusterName):: self + {clusterName: clusterName},\n          // Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\n          withDeletionGracePeriodSeconds(deletionGracePeriodSeconds):: self + {deletionGracePeriodSeconds: deletionGracePeriodSeconds},\n          // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n          withFinalizers(finalizers):: self + if std.type(finalizers) == \"array\" then {finalizers: finalizers} else {finalizers: [finalizers]},\n          // Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\n          withFinalizersMixin(finalizers):: self + if std.type(finalizers) == \"array\" then {finalizers+: finalizers} else {finalizers+: [finalizers]},\n          // GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n          //\n          // If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n          //\n          // Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\n          withGenerateName(generateName):: self + {generateName: generateName},\n          // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n          withLabels(labels):: self + {labels: labels},\n          // Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\n          withLabelsMixin(labels):: self + {labels+: labels},\n          // Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n          withName(name):: self + {name: name},\n          // Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n          //\n          // Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\n          withNamespace(namespace):: self + {namespace: namespace},\n          mixin:: {\n            // An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n            //\n            // When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n            initializers:: {\n              local __initializersMixin(initializers) = {initializers+: initializers},\n              mixinInstance(initializers):: __initializersMixin(initializers),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPending(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending: pending}) else __initializersMixin({pending: [pending]}),\n              // Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\n              withPendingMixin(pending):: self + if std.type(pending) == \"array\" then __initializersMixin({pending+: pending}) else __initializersMixin({pending+: [pending]}),\n              pendingType:: hidden.meta.v1.initializer,\n              // If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\n              result:: {\n                local __resultMixin(result) = __initializersMixin({result+: result}),\n                mixinInstance(result):: __resultMixin(result),\n                // Suggested HTTP return code for this status, 0 if not set.\n                withCode(code):: self + __resultMixin({code: code}),\n                // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n                details:: {\n                  local __detailsMixin(details) = __resultMixin({details+: details}),\n                  mixinInstance(details):: __detailsMixin(details),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n                  // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n                  withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n                  causesType:: hidden.meta.v1.statusCause,\n                  // The group attribute of the resource associated with the status StatusReason.\n                  withGroup(group):: self + __detailsMixin({group: group}),\n                  // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n                  withName(name):: self + __detailsMixin({name: name}),\n                  // If specified, the time in seconds before the operation should be retried.\n                  withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n                  // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n                  withUid(uid):: self + __detailsMixin({uid: uid}),\n                },\n                detailsType:: hidden.meta.v1.statusDetails,\n                // A human-readable description of the status of this operation.\n                withMessage(message):: self + __resultMixin({message: message}),\n                // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n                withReason(reason):: self + __resultMixin({reason: reason}),\n              },\n              resultType:: hidden.meta.v1.status,\n            },\n            initializersType:: hidden.meta.v1.initializers,\n          },\n        },\n        // OwnerReference contains enough information to let you identify an owning object. Currently, an owning object must be in the same namespace, so there is no namespace field.\n        ownerReference:: {\n          new():: {},\n          // If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.\n          withBlockOwnerDeletion(blockOwnerDeletion):: self + {blockOwnerDeletion: blockOwnerDeletion},\n          // If true, this reference points to the managing controller.\n          withController(controller):: self + {controller: controller},\n          // Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names\n          withName(name):: self + {name: name},\n          // UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n          withUid(uid):: self + {uid: uid},\n          mixin:: {\n          },\n        },\n        // Patch is provided to give a concrete name and type to the Kubernetes PATCH request body.\n        patch:: {\n          new():: {},\n          mixin:: {\n          },\n        },\n        // Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.\n        preconditions:: {\n          new():: {},\n          // Specifies the target UID.\n          withUid(uid):: self + {uid: uid},\n          mixin:: {\n          },\n        },\n        // ServerAddressByClientCIDR helps the client to determine the server address that they should use, depending on the clientCIDR that they match.\n        serverAddressByClientCidr:: {\n          new():: {},\n          // The CIDR with which clients can match their IP to figure out the server address that they should use.\n          withClientCidr(clientCidr):: self + {clientCIDR: clientCidr},\n          // Address of this server, suitable for a client that matches the above CIDR. This can be a hostname, hostname:port, IP or IP:port.\n          withServerAddress(serverAddress):: self + {serverAddress: serverAddress},\n          mixin:: {\n          },\n        },\n        // Status is a return value for calls that don't return other objects.\n        status:: {\n          new():: {},\n          // Suggested HTTP return code for this status, 0 if not set.\n          withCode(code):: self + {code: code},\n          // A human-readable description of the status of this operation.\n          withMessage(message):: self + {message: message},\n          // A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\n          withReason(reason):: self + {reason: reason},\n          mixin:: {\n            // Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\n            details:: {\n              local __detailsMixin(details) = {details+: details},\n              mixinInstance(details):: __detailsMixin(details),\n              // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n              withCauses(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes: causes}) else __detailsMixin({causes: [causes]}),\n              // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n              withCausesMixin(causes):: self + if std.type(causes) == \"array\" then __detailsMixin({causes+: causes}) else __detailsMixin({causes+: [causes]}),\n              causesType:: hidden.meta.v1.statusCause,\n              // The group attribute of the resource associated with the status StatusReason.\n              withGroup(group):: self + __detailsMixin({group: group}),\n              // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n              withName(name):: self + __detailsMixin({name: name}),\n              // If specified, the time in seconds before the operation should be retried.\n              withRetryAfterSeconds(retryAfterSeconds):: self + __detailsMixin({retryAfterSeconds: retryAfterSeconds}),\n              // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n              withUid(uid):: self + __detailsMixin({uid: uid}),\n            },\n            detailsType:: hidden.meta.v1.statusDetails,\n          },\n        },\n        // StatusCause provides more information about an api.Status failure, including cases when multiple errors are encountered.\n        statusCause:: {\n          new():: {},\n          // The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed.  Fields may appear more than once in an array of causes due to fields having multiple errors. Optional.\n          //\n          // Examples:\n          //   \"name\" - the field \"name\" on the current resource\n          //   \"items[0].name\" - the field \"name\" on the first array entry in \"items\"\n          withField(field):: self + {field: field},\n          // A human-readable description of the cause of the error.  This field may be presented as-is to a reader.\n          withMessage(message):: self + {message: message},\n          // A machine-readable description of the cause of the error. If this value is empty there is no information available.\n          withReason(reason):: self + {reason: reason},\n          mixin:: {\n          },\n        },\n        // StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.\n        statusDetails:: {\n          new():: {},\n          // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n          withCauses(causes):: self + if std.type(causes) == \"array\" then {causes: causes} else {causes: [causes]},\n          // The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\n          withCausesMixin(causes):: self + if std.type(causes) == \"array\" then {causes+: causes} else {causes+: [causes]},\n          causesType:: hidden.meta.v1.statusCause,\n          // The group attribute of the resource associated with the status StatusReason.\n          withGroup(group):: self + {group: group},\n          // The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\n          withName(name):: self + {name: name},\n          // If specified, the time in seconds before the operation should be retried.\n          withRetryAfterSeconds(retryAfterSeconds):: self + {retryAfterSeconds: retryAfterSeconds},\n          // UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\n          withUid(uid):: self + {uid: uid},\n          mixin:: {\n          },\n        },\n        //\n        time:: {\n          new():: {},\n          mixin:: {\n          },\n        },\n        // Event represents a single event to a watched resource.\n        watchEvent:: {\n          new():: {},\n          //\n          withType(type):: self + {type: type},\n          mixin:: {\n          },\n        },\n      },\n    },\n    networking:: {\n      v1:: {\n        local apiVersion = {apiVersion: \"networking/v1\"},\n        // NetworkPolicyIngressRule describes a particular set of traffic that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and from.\n        networkPolicyIngressRule:: {\n          new():: {},\n          // List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.\n          withFrom(from):: self + if std.type(from) == \"array\" then {from: from} else {from: [from]},\n          // List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.\n          withFromMixin(from):: self + if std.type(from) == \"array\" then {from+: from} else {from+: [from]},\n          fromType:: hidden.networking.v1.networkPolicyPeer,\n          // List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.\n          withPorts(ports):: self + if std.type(ports) == \"array\" then {ports: ports} else {ports: [ports]},\n          // List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.\n          withPortsMixin(ports):: self + if std.type(ports) == \"array\" then {ports+: ports} else {ports+: [ports]},\n          portsType:: hidden.networking.v1.networkPolicyPort,\n          mixin:: {\n          },\n        },\n        // NetworkPolicyPeer describes a peer to allow traffic from. Exactly one of its fields must be specified.\n        networkPolicyPeer:: {\n          new():: {},\n          mixin:: {\n            // Selects Namespaces using cluster scoped-labels. This matches all pods in all namespaces selected by this label selector. This field follows standard label selector semantics. If present but empty, this selector selects all namespaces.\n            namespaceSelector:: {\n              local __namespaceSelectorMixin(namespaceSelector) = {namespaceSelector+: namespaceSelector},\n              mixinInstance(namespaceSelector):: __namespaceSelectorMixin(namespaceSelector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __namespaceSelectorMixin({matchExpressions: matchExpressions}) else __namespaceSelectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __namespaceSelectorMixin({matchExpressions+: matchExpressions}) else __namespaceSelectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __namespaceSelectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __namespaceSelectorMixin({matchLabels+: matchLabels}),\n            },\n            namespaceSelectorType:: hidden.meta.v1.labelSelector,\n            // This is a label selector which selects Pods in this namespace. This field follows standard label selector semantics. If present but empty, this selector selects all pods in this namespace.\n            podSelector:: {\n              local __podSelectorMixin(podSelector) = {podSelector+: podSelector},\n              mixinInstance(podSelector):: __podSelectorMixin(podSelector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __podSelectorMixin({matchExpressions: matchExpressions}) else __podSelectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __podSelectorMixin({matchExpressions+: matchExpressions}) else __podSelectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __podSelectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __podSelectorMixin({matchLabels+: matchLabels}),\n            },\n            podSelectorType:: hidden.meta.v1.labelSelector,\n          },\n        },\n        // NetworkPolicyPort describes a port to allow traffic on\n        networkPolicyPort:: {\n          new():: {},\n          // The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers.\n          withPort(port):: {port: port},\n          // The protocol (TCP or UDP) which traffic must match. If not specified, this field defaults to TCP.\n          withProtocol(protocol):: self + {protocol: protocol},\n          mixin:: {\n          },\n        },\n        // NetworkPolicySpec provides the specification of a NetworkPolicy\n        networkPolicySpec:: {\n          new():: {},\n          // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default)\n          withIngress(ingress):: self + if std.type(ingress) == \"array\" then {ingress: ingress} else {ingress: [ingress]},\n          // List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default)\n          withIngressMixin(ingress):: self + if std.type(ingress) == \"array\" then {ingress+: ingress} else {ingress+: [ingress]},\n          ingressType:: hidden.networking.v1.networkPolicyIngressRule,\n          mixin:: {\n            // Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.\n            podSelector:: {\n              local __podSelectorMixin(podSelector) = {podSelector+: podSelector},\n              mixinInstance(podSelector):: __podSelectorMixin(podSelector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __podSelectorMixin({matchExpressions: matchExpressions}) else __podSelectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __podSelectorMixin({matchExpressions+: matchExpressions}) else __podSelectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __podSelectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __podSelectorMixin({matchLabels+: matchLabels}),\n            },\n            podSelectorType:: hidden.meta.v1.labelSelector,\n          },\n        },\n      },\n    },\n    policy:: {\n      v1beta1:: {\n        local apiVersion = {apiVersion: \"policy/v1beta1\"},\n        // PodDisruptionBudgetSpec is a description of a PodDisruptionBudget.\n        podDisruptionBudgetSpec:: {\n          new():: {},\n          // An eviction is allowed if at most \"maxUnavailable\" pods selected by \"selector\" are unavailable after the eviction, i.e. even in absence of the evicted pod. For example, one can prevent all voluntary evictions by specifying 0. This is a mutually exclusive setting with \"minAvailable\".\n          withMaxUnavailable(maxUnavailable):: {maxUnavailable: maxUnavailable},\n          // An eviction is allowed if at least \"minAvailable\" pods selected by \"selector\" will still be available after the eviction, i.e. even in the absence of the evicted pod.  So for example you can prevent all voluntary evictions by specifying \"100%\".\n          withMinAvailable(minAvailable):: {minAvailable: minAvailable},\n          mixin:: {\n            // Label query over pods whose evictions are managed by the disruption budget.\n            selector:: {\n              local __selectorMixin(selector) = {selector+: selector},\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n          },\n        },\n        // PodDisruptionBudgetStatus represents information about the status of a PodDisruptionBudget. Status may trail the actual state of a system.\n        podDisruptionBudgetStatus:: {\n          new():: {},\n          // current number of healthy pods\n          withCurrentHealthy(currentHealthy):: self + {currentHealthy: currentHealthy},\n          // minimum desired number of healthy pods\n          withDesiredHealthy(desiredHealthy):: self + {desiredHealthy: desiredHealthy},\n          // DisruptedPods contains information about pods whose eviction was processed by the API server eviction subresource handler but has not yet been observed by the PodDisruptionBudget controller. A pod will be in this map from the time when the API server processed the eviction request to the time when the pod is seen by PDB controller as having been marked for deletion (or after a timeout). The key in the map is the name of the pod and the value is the time when the API server processed the eviction request. If the deletion didn't occur and a pod is still there it will be removed from the list automatically by PodDisruptionBudget controller after some time. If everything goes smooth this map should be empty for the most of the time. Large number of entries in the map may indicate problems with pod deletions.\n          withDisruptedPods(disruptedPods):: self + {disruptedPods: disruptedPods},\n          // DisruptedPods contains information about pods whose eviction was processed by the API server eviction subresource handler but has not yet been observed by the PodDisruptionBudget controller. A pod will be in this map from the time when the API server processed the eviction request to the time when the pod is seen by PDB controller as having been marked for deletion (or after a timeout). The key in the map is the name of the pod and the value is the time when the API server processed the eviction request. If the deletion didn't occur and a pod is still there it will be removed from the list automatically by PodDisruptionBudget controller after some time. If everything goes smooth this map should be empty for the most of the time. Large number of entries in the map may indicate problems with pod deletions.\n          withDisruptedPodsMixin(disruptedPods):: self + {disruptedPods+: disruptedPods},\n          // Number of pod disruptions that are currently allowed.\n          withDisruptionsAllowed(disruptionsAllowed):: self + {disruptionsAllowed: disruptionsAllowed},\n          // total number of pods counted by this disruption budget\n          withExpectedPods(expectedPods):: self + {expectedPods: expectedPods},\n          // Most recent generation observed when updating this PDB status. PodDisruptionsAllowed and other status informatio is valid only if observedGeneration equals to PDB's object generation.\n          withObservedGeneration(observedGeneration):: self + {observedGeneration: observedGeneration},\n          mixin:: {\n          },\n        },\n      },\n    },\n    rbac:: {\n      v1alpha1:: {\n        local apiVersion = {apiVersion: \"rbac/v1alpha1\"},\n        // PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.\n        policyRule:: {\n          new():: {},\n          // APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.\n          withApiGroups(apiGroups):: self + if std.type(apiGroups) == \"array\" then {apiGroups: apiGroups} else {apiGroups: [apiGroups]},\n          // APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.\n          withApiGroupsMixin(apiGroups):: self + if std.type(apiGroups) == \"array\" then {apiGroups+: apiGroups} else {apiGroups+: [apiGroups]},\n          // NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full, final step in the path This name is intentionally different than the internal type so that the DefaultConvert works nicely and because the ordering may be different. Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"),  but not both.\n          withNonResourceUrls(nonResourceUrls):: self + if std.type(nonResourceUrls) == \"array\" then {nonResourceURLs: nonResourceUrls} else {nonResourceURLs: [nonResourceUrls]},\n          // NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full, final step in the path This name is intentionally different than the internal type so that the DefaultConvert works nicely and because the ordering may be different. Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"),  but not both.\n          withNonResourceUrlsMixin(nonResourceUrls):: self + if std.type(nonResourceUrls) == \"array\" then {nonResourceURLs+: nonResourceUrls} else {nonResourceURLs+: [nonResourceUrls]},\n          // ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.\n          withResourceNames(resourceNames):: self + if std.type(resourceNames) == \"array\" then {resourceNames: resourceNames} else {resourceNames: [resourceNames]},\n          // ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.\n          withResourceNamesMixin(resourceNames):: self + if std.type(resourceNames) == \"array\" then {resourceNames+: resourceNames} else {resourceNames+: [resourceNames]},\n          // Resources is a list of resources this rule applies to.  ResourceAll represents all resources.\n          withResources(resources):: self + if std.type(resources) == \"array\" then {resources: resources} else {resources: [resources]},\n          // Resources is a list of resources this rule applies to.  ResourceAll represents all resources.\n          withResourcesMixin(resources):: self + if std.type(resources) == \"array\" then {resources+: resources} else {resources+: [resources]},\n          // Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule.  VerbAll represents all kinds.\n          withVerbs(verbs):: self + if std.type(verbs) == \"array\" then {verbs: verbs} else {verbs: [verbs]},\n          // Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule.  VerbAll represents all kinds.\n          withVerbsMixin(verbs):: self + if std.type(verbs) == \"array\" then {verbs+: verbs} else {verbs+: [verbs]},\n          mixin:: {\n          },\n        },\n        // RoleRef contains information that points to the role being used\n        roleRef:: {\n          new():: {},\n          // APIGroup is the group for the resource being referenced\n          withApiGroup(apiGroup):: self + {apiGroup: apiGroup},\n          // Name is the name of resource being referenced\n          withName(name):: self + {name: name},\n          mixin:: {\n          },\n        },\n        // Subject contains a reference to the object or user identities a role binding applies to.  This can either hold a direct API object reference, or a value for non-objects such as user and group names.\n        subject:: {\n          new():: {},\n          // Name of the object being referenced.\n          withName(name):: self + {name: name},\n          // Namespace of the referenced object.  If the object kind is non-namespace, such as \"User\" or \"Group\", and this value is not empty the Authorizer should report an error.\n          withNamespace(namespace):: self + {namespace: namespace},\n          mixin:: {\n          },\n        },\n      },\n      v1beta1:: {\n        local apiVersion = {apiVersion: \"rbac/v1beta1\"},\n        // PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.\n        policyRule:: {\n          new():: {},\n          // APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.\n          withApiGroups(apiGroups):: self + if std.type(apiGroups) == \"array\" then {apiGroups: apiGroups} else {apiGroups: [apiGroups]},\n          // APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.\n          withApiGroupsMixin(apiGroups):: self + if std.type(apiGroups) == \"array\" then {apiGroups+: apiGroups} else {apiGroups+: [apiGroups]},\n          // NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"),  but not both.\n          withNonResourceUrls(nonResourceUrls):: self + if std.type(nonResourceUrls) == \"array\" then {nonResourceURLs: nonResourceUrls} else {nonResourceURLs: [nonResourceUrls]},\n          // NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"),  but not both.\n          withNonResourceUrlsMixin(nonResourceUrls):: self + if std.type(nonResourceUrls) == \"array\" then {nonResourceURLs+: nonResourceUrls} else {nonResourceURLs+: [nonResourceUrls]},\n          // ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.\n          withResourceNames(resourceNames):: self + if std.type(resourceNames) == \"array\" then {resourceNames: resourceNames} else {resourceNames: [resourceNames]},\n          // ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.\n          withResourceNamesMixin(resourceNames):: self + if std.type(resourceNames) == \"array\" then {resourceNames+: resourceNames} else {resourceNames+: [resourceNames]},\n          // Resources is a list of resources this rule applies to.  ResourceAll represents all resources.\n          withResources(resources):: self + if std.type(resources) == \"array\" then {resources: resources} else {resources: [resources]},\n          // Resources is a list of resources this rule applies to.  ResourceAll represents all resources.\n          withResourcesMixin(resources):: self + if std.type(resources) == \"array\" then {resources+: resources} else {resources+: [resources]},\n          // Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule.  VerbAll represents all kinds.\n          withVerbs(verbs):: self + if std.type(verbs) == \"array\" then {verbs: verbs} else {verbs: [verbs]},\n          // Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule.  VerbAll represents all kinds.\n          withVerbsMixin(verbs):: self + if std.type(verbs) == \"array\" then {verbs+: verbs} else {verbs+: [verbs]},\n          mixin:: {\n          },\n        },\n        // RoleRef contains information that points to the role being used\n        roleRef:: {\n          new():: {},\n          // APIGroup is the group for the resource being referenced\n          withApiGroup(apiGroup):: self + {apiGroup: apiGroup},\n          // Name is the name of resource being referenced\n          withName(name):: self + {name: name},\n          mixin:: {\n          },\n        },\n        // Subject contains a reference to the object or user identities a role binding applies to.  This can either hold a direct API object reference, or a value for non-objects such as user and group names.\n        subject:: {\n          new():: {},\n          // APIGroup holds the API group of the referenced subject. Defaults to \"\" for ServiceAccount subjects. Defaults to \"rbac.authorization.k8s.io\" for User and Group subjects.\n          withApiGroup(apiGroup):: self + {apiGroup: apiGroup},\n          // Name of the object being referenced.\n          withName(name):: self + {name: name},\n          // Namespace of the referenced object.  If the object kind is non-namespace, such as \"User\" or \"Group\", and this value is not empty the Authorizer should report an error.\n          withNamespace(namespace):: self + {namespace: namespace},\n          mixin:: {\n          },\n        },\n      },\n    },\n    settings:: {\n      v1alpha1:: {\n        local apiVersion = {apiVersion: \"settings/v1alpha1\"},\n        // PodPresetSpec is a description of a pod preset.\n        podPresetSpec:: {\n          new():: {},\n          // Env defines the collection of EnvVar to inject into containers.\n          withEnv(env):: self + if std.type(env) == \"array\" then {env: env} else {env: [env]},\n          // Env defines the collection of EnvVar to inject into containers.\n          withEnvMixin(env):: self + if std.type(env) == \"array\" then {env+: env} else {env+: [env]},\n          // EnvFrom defines the collection of EnvFromSource to inject into containers.\n          withEnvFrom(envFrom):: self + if std.type(envFrom) == \"array\" then {envFrom: envFrom} else {envFrom: [envFrom]},\n          // EnvFrom defines the collection of EnvFromSource to inject into containers.\n          withEnvFromMixin(envFrom):: self + if std.type(envFrom) == \"array\" then {envFrom+: envFrom} else {envFrom+: [envFrom]},\n          envFromType:: hidden.core.v1.envFromSource,\n          envType:: hidden.core.v1.envVar,\n          // VolumeMounts defines the collection of VolumeMount to inject into containers.\n          withVolumeMounts(volumeMounts):: self + if std.type(volumeMounts) == \"array\" then {volumeMounts: volumeMounts} else {volumeMounts: [volumeMounts]},\n          // VolumeMounts defines the collection of VolumeMount to inject into containers.\n          withVolumeMountsMixin(volumeMounts):: self + if std.type(volumeMounts) == \"array\" then {volumeMounts+: volumeMounts} else {volumeMounts+: [volumeMounts]},\n          volumeMountsType:: hidden.core.v1.volumeMount,\n          // Volumes defines the collection of Volume to inject into the pod.\n          withVolumes(volumes):: self + if std.type(volumes) == \"array\" then {volumes: volumes} else {volumes: [volumes]},\n          // Volumes defines the collection of Volume to inject into the pod.\n          withVolumesMixin(volumes):: self + if std.type(volumes) == \"array\" then {volumes+: volumes} else {volumes+: [volumes]},\n          volumesType:: hidden.core.v1.volume,\n          mixin:: {\n            // Selector is a label query over a set of resources, in this case pods. Required.\n            selector:: {\n              local __selectorMixin(selector) = {selector+: selector},\n              mixinInstance(selector):: __selectorMixin(selector),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressions(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions: matchExpressions}) else __selectorMixin({matchExpressions: [matchExpressions]}),\n              // matchExpressions is a list of label selector requirements. The requirements are ANDed.\n              withMatchExpressionsMixin(matchExpressions):: self + if std.type(matchExpressions) == \"array\" then __selectorMixin({matchExpressions+: matchExpressions}) else __selectorMixin({matchExpressions+: [matchExpressions]}),\n              matchExpressionsType:: hidden.meta.v1.labelSelectorRequirement,\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabels(matchLabels):: self + __selectorMixin({matchLabels: matchLabels}),\n              // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\n              withMatchLabelsMixin(matchLabels):: self + __selectorMixin({matchLabels+: matchLabels}),\n            },\n            selectorType:: hidden.meta.v1.labelSelector,\n          },\n        },\n      },\n    },\n  },\n}\n"
  },
  {
    "path": "devstats/ks-app/lib/ksonnet-lib/v1.7.0/swagger.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n   \"title\": \"Kubernetes\",\n   \"version\": \"v1.7.0\"\n  },\n  \"paths\": {\n   \"/api/\": {\n    \"get\": {\n     \"description\": \"get available API versions\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core\"\n     ],\n     \"operationId\": \"getCoreAPIVersions\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIVersions\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/api/v1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"getCoreV1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/api/v1/componentstatuses\": {\n    \"get\": {\n     \"description\": \"list objects of kind ComponentStatus\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1ComponentStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ComponentStatusList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ComponentStatus\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/componentstatuses/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ComponentStatus\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1ComponentStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ComponentStatus\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ComponentStatus\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ComponentStatus\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/configmaps\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ConfigMap\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1ConfigMapForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMapList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ConfigMap\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/endpoints\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Endpoints\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1EndpointsForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.EndpointsList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Endpoints\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/events\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1EventForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.EventList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Event\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/limitranges\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind LimitRange\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1LimitRangeForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRangeList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"LimitRange\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Namespace\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1Namespace\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.NamespaceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Namespace\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Namespace\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1Namespace\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Namespace\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/bindings\": {\n    \"post\": {\n     \"description\": \"create a Binding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Binding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Binding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Binding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/configmaps\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ConfigMap\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedConfigMap\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMapList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ConfigMap\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ConfigMap\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedConfigMap\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMap\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMap\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ConfigMap\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ConfigMap\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedConfigMap\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ConfigMap\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/configmaps/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ConfigMap\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedConfigMap\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMap\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ConfigMap\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ConfigMap\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedConfigMap\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMap\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMap\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ConfigMap\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ConfigMap\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedConfigMap\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ConfigMap\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ConfigMap\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedConfigMap\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMap\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ConfigMap\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ConfigMap\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/endpoints\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Endpoints\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedEndpoints\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.EndpointsList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Endpoints\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create Endpoints\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedEndpoints\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Endpoints\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Endpoints\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Endpoints\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Endpoints\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedEndpoints\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Endpoints\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/endpoints/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Endpoints\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedEndpoints\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Endpoints\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Endpoints\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Endpoints\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedEndpoints\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Endpoints\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Endpoints\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Endpoints\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete Endpoints\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedEndpoints\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Endpoints\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Endpoints\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedEndpoints\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Endpoints\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Endpoints\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Endpoints\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/events\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedEvent\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.EventList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Event\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create an Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedEvent\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Event\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Event\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Event\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedEvent\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Event\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/events/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedEvent\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Event\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Event\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedEvent\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Event\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Event\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Event\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete an Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedEvent\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Event\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Event\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedEvent\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Event\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Event\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Event\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/limitranges\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind LimitRange\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedLimitRange\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRangeList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"LimitRange\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a LimitRange\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedLimitRange\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRange\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRange\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"LimitRange\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of LimitRange\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedLimitRange\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"LimitRange\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/limitranges/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified LimitRange\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedLimitRange\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRange\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"LimitRange\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified LimitRange\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedLimitRange\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRange\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRange\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"LimitRange\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a LimitRange\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedLimitRange\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"LimitRange\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified LimitRange\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedLimitRange\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRange\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"LimitRange\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the LimitRange\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/persistentvolumeclaims\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedPersistentVolumeClaim\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolumeClaim\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedPersistentVolumeClaim\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolumeClaim\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedPersistentVolumeClaim\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolumeClaim\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedPersistentVolumeClaim\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolumeClaim\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedPersistentVolumeClaim\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolumeClaim\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedPersistentVolumeClaim\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolumeClaim\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified PersistentVolumeClaim\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedPersistentVolumeClaim\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolumeClaim\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PersistentVolumeClaim\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedPersistentVolumeClaimStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolumeClaim\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedPersistentVolumeClaimStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolumeClaim\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified PersistentVolumeClaim\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedPersistentVolumeClaimStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolumeClaim\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PersistentVolumeClaim\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedPod\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedPod\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedPod\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedPod\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedPod\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedPod\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Pod\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedPod\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Pod\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods/{name}/attach\": {\n    \"get\": {\n     \"description\": \"connect GET requests to attach of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1GetNamespacedPodAttach\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"post\": {\n     \"description\": \"connect POST requests to attach of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PostNamespacedPodAttach\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The container in which to execute the command. Defaults to only container if there is only one container in the pod.\",\n      \"name\": \"container\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Pod\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Stderr if true indicates that stderr is to be redirected for the attach call. Defaults to true.\",\n      \"name\": \"stderr\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Stdin if true, redirects the standard input stream of the pod for this call. Defaults to false.\",\n      \"name\": \"stdin\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Stdout if true indicates that stdout is to be redirected for the attach call. Defaults to true.\",\n      \"name\": \"stdout\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"TTY if true indicates that a tty will be allocated for the attach call. This is passed through the container runtime so the tty is allocated on the worker node by the container runtime. Defaults to false.\",\n      \"name\": \"tty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods/{name}/binding\": {\n    \"post\": {\n     \"description\": \"create binding of a Binding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedBindingBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Binding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Binding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Binding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Binding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods/{name}/eviction\": {\n    \"post\": {\n     \"description\": \"create eviction of an Eviction\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedEvictionEviction\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.Eviction\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.Eviction\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Eviction\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Eviction\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods/{name}/exec\": {\n    \"get\": {\n     \"description\": \"connect GET requests to exec of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1GetNamespacedPodExec\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"post\": {\n     \"description\": \"connect POST requests to exec of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PostNamespacedPodExec\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"Command is the remote command to execute. argv array. Not executed within a shell.\",\n      \"name\": \"command\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"Container in which to execute the command. Defaults to only container if there is only one container in the pod.\",\n      \"name\": \"container\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Pod\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Redirect the standard error stream of the pod for this call. Defaults to true.\",\n      \"name\": \"stderr\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Redirect the standard input stream of the pod for this call. Defaults to false.\",\n      \"name\": \"stdin\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Redirect the standard output stream of the pod for this call. Defaults to true.\",\n      \"name\": \"stdout\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"TTY if true indicates that a tty will be allocated for the exec call. Defaults to false.\",\n      \"name\": \"tty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods/{name}/log\": {\n    \"get\": {\n     \"description\": \"read log of the specified Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"text/plain\",\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedPodLog\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"The container for which to stream logs. Defaults to only container if there is one container in the pod.\",\n      \"name\": \"container\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Follow the log stream of the pod. Defaults to false.\",\n      \"name\": \"follow\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"If set, the number of bytes to read from the server before terminating the log output. This may not display a complete final line of logging, and may return slightly more or slightly less than the specified limit.\",\n      \"name\": \"limitBytes\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Pod\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Return previous terminated container logs. Defaults to false.\",\n      \"name\": \"previous\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"A relative time in seconds before the current time from which to show logs. If this value precedes the time a pod was started, only logs since the pod start will be returned. If this value is in the future, no logs will be returned. Only one of sinceSeconds or sinceTime may be specified.\",\n      \"name\": \"sinceSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"If set, the number of lines from the end of the logs to show. If not specified, logs are shown from the creation of the container or sinceSeconds or sinceTime\",\n      \"name\": \"tailLines\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line of log output. Defaults to false.\",\n      \"name\": \"timestamps\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods/{name}/portforward\": {\n    \"get\": {\n     \"description\": \"connect GET requests to portforward of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1GetNamespacedPodPortforward\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"post\": {\n     \"description\": \"connect POST requests to portforward of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PostNamespacedPodPortforward\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Pod\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"List of ports to forward Required when using WebSockets\",\n      \"name\": \"ports\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods/{name}/proxy\": {\n    \"get\": {\n     \"description\": \"connect GET requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1GetNamespacedPodProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"put\": {\n     \"description\": \"connect PUT requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PutNamespacedPodProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"post\": {\n     \"description\": \"connect POST requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PostNamespacedPodProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"connect DELETE requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1DeleteNamespacedPodProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"options\": {\n     \"description\": \"connect OPTIONS requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1OptionsNamespacedPodProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"head\": {\n     \"description\": \"connect HEAD requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1HeadNamespacedPodProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"connect PATCH requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PatchNamespacedPodProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Pod\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"Path is the URL path to use for the current proxy request to pod.\",\n      \"name\": \"path\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods/{name}/proxy/{path}\": {\n    \"get\": {\n     \"description\": \"connect GET requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1GetNamespacedPodProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"put\": {\n     \"description\": \"connect PUT requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PutNamespacedPodProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"post\": {\n     \"description\": \"connect POST requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PostNamespacedPodProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"connect DELETE requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1DeleteNamespacedPodProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"options\": {\n     \"description\": \"connect OPTIONS requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1OptionsNamespacedPodProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"head\": {\n     \"description\": \"connect HEAD requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1HeadNamespacedPodProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"connect PATCH requests to proxy of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PatchNamespacedPodProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Pod\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"path to the resource\",\n      \"name\": \"path\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"Path is the URL path to use for the current proxy request to pod.\",\n      \"name\": \"path\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/pods/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedPodStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedPodStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified Pod\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedPodStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Pod\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/podtemplates\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PodTemplate\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedPodTemplate\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplateList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PodTemplate\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a PodTemplate\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedPodTemplate\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplate\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplate\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PodTemplate\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of PodTemplate\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedPodTemplate\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PodTemplate\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/podtemplates/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified PodTemplate\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedPodTemplate\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplate\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PodTemplate\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified PodTemplate\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedPodTemplate\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplate\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplate\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PodTemplate\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a PodTemplate\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedPodTemplate\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PodTemplate\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified PodTemplate\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedPodTemplate\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplate\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PodTemplate\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PodTemplate\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/replicationcontrollers\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedReplicationController\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationControllerList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ReplicationController\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedReplicationController\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ReplicationController\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedReplicationController\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ReplicationController\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/replicationcontrollers/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedReplicationController\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ReplicationController\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedReplicationController\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ReplicationController\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedReplicationController\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ReplicationController\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ReplicationController\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedReplicationController\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ReplicationController\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ReplicationController\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/replicationcontrollers/{name}/scale\": {\n    \"get\": {\n     \"description\": \"read scale of the specified Scale\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedScaleScale\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v1\",\n      \"kind\": \"Scale\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace scale of the specified Scale\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedScaleScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.Scale\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v1\",\n      \"kind\": \"Scale\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update scale of the specified Scale\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedScaleScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v1\",\n      \"kind\": \"Scale\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Scale\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/replicationcontrollers/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedReplicationControllerStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ReplicationController\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedReplicationControllerStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ReplicationController\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified ReplicationController\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedReplicationControllerStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ReplicationController\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ReplicationController\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/resourcequotas\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedResourceQuota\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuotaList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ResourceQuota\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedResourceQuota\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ResourceQuota\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedResourceQuota\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ResourceQuota\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/resourcequotas/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedResourceQuota\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ResourceQuota\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedResourceQuota\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ResourceQuota\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedResourceQuota\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ResourceQuota\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ResourceQuota\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedResourceQuota\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ResourceQuota\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ResourceQuota\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/resourcequotas/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedResourceQuotaStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ResourceQuota\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedResourceQuotaStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ResourceQuota\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified ResourceQuota\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedResourceQuotaStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ResourceQuota\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ResourceQuota\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/secrets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Secret\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedSecret\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.SecretList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Secret\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Secret\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedSecret\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Secret\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Secret\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Secret\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Secret\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedSecret\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Secret\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/secrets/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Secret\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedSecret\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Secret\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Secret\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Secret\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedSecret\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Secret\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Secret\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Secret\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Secret\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedSecret\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Secret\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Secret\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedSecret\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Secret\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Secret\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Secret\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/serviceaccounts\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ServiceAccount\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedServiceAccount\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceAccountList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ServiceAccount\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ServiceAccount\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedServiceAccount\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceAccount\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceAccount\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ServiceAccount\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ServiceAccount\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNamespacedServiceAccount\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ServiceAccount\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/serviceaccounts/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ServiceAccount\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedServiceAccount\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceAccount\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ServiceAccount\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ServiceAccount\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedServiceAccount\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceAccount\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceAccount\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ServiceAccount\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ServiceAccount\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedServiceAccount\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ServiceAccount\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ServiceAccount\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedServiceAccount\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceAccount\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ServiceAccount\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ServiceAccount\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/services\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1NamespacedService\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1NamespacedService\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Service\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Service\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/services/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedService\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Service\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedService\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Service\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Service\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1NamespacedService\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Service\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedService\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Service\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Service\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/services/{name}/proxy\": {\n    \"get\": {\n     \"description\": \"connect GET requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1GetNamespacedServiceProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"put\": {\n     \"description\": \"connect PUT requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PutNamespacedServiceProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"post\": {\n     \"description\": \"connect POST requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PostNamespacedServiceProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"connect DELETE requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1DeleteNamespacedServiceProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"options\": {\n     \"description\": \"connect OPTIONS requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1OptionsNamespacedServiceProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"head\": {\n     \"description\": \"connect HEAD requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1HeadNamespacedServiceProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"connect PATCH requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PatchNamespacedServiceProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Service\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"Path is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.\",\n      \"name\": \"path\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/services/{name}/proxy/{path}\": {\n    \"get\": {\n     \"description\": \"connect GET requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1GetNamespacedServiceProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"put\": {\n     \"description\": \"connect PUT requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PutNamespacedServiceProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"post\": {\n     \"description\": \"connect POST requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PostNamespacedServiceProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"connect DELETE requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1DeleteNamespacedServiceProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"options\": {\n     \"description\": \"connect OPTIONS requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1OptionsNamespacedServiceProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"head\": {\n     \"description\": \"connect HEAD requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1HeadNamespacedServiceProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"connect PATCH requests to proxy of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PatchNamespacedServiceProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Service\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"path to the resource\",\n      \"name\": \"path\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"Path is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.\",\n      \"name\": \"path\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{namespace}/services/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespacedServiceStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Service\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespacedServiceStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Service\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Service\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified Service\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespacedServiceStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Service\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Service\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Namespace\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1Namespace\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Namespace\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Namespace\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1Namespace\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Namespace\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Namespace\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1Namespace\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Namespace\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Namespace\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1Namespace\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Namespace\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Namespace\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{name}/finalize\": {\n    \"put\": {\n     \"description\": \"replace finalize of the specified Namespace\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespaceFinalize\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Namespace\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Namespace\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/namespaces/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified Namespace\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NamespaceStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Namespace\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified Namespace\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NamespaceStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Namespace\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified Namespace\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NamespaceStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Namespace\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Namespace\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/nodes\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1Node\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1Node\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Node\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Node\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionNode\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/nodes/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1Node\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Node\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1Node\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Node\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Node\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1Node\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Node\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1Node\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Node\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Node\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/nodes/{name}/proxy\": {\n    \"get\": {\n     \"description\": \"connect GET requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1GetNodeProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"put\": {\n     \"description\": \"connect PUT requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PutNodeProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"post\": {\n     \"description\": \"connect POST requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PostNodeProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"connect DELETE requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1DeleteNodeProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"options\": {\n     \"description\": \"connect OPTIONS requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1OptionsNodeProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"head\": {\n     \"description\": \"connect HEAD requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1HeadNodeProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"connect PATCH requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PatchNodeProxy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Node\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"Path is the URL path to use for the current proxy request to node.\",\n      \"name\": \"path\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/nodes/{name}/proxy/{path}\": {\n    \"get\": {\n     \"description\": \"connect GET requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1GetNodeProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"put\": {\n     \"description\": \"connect PUT requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PutNodeProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"post\": {\n     \"description\": \"connect POST requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PostNodeProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"connect DELETE requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1DeleteNodeProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"options\": {\n     \"description\": \"connect OPTIONS requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1OptionsNodeProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"head\": {\n     \"description\": \"connect HEAD requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1HeadNodeProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"connect PATCH requests to proxy of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"connectCoreV1PatchNodeProxyWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"connect\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Node\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"path to the resource\",\n      \"name\": \"path\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"Path is the URL path to use for the current proxy request to node.\",\n      \"name\": \"path\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/nodes/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1NodeStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Node\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1NodeStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Node\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Node\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified Node\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1NodeStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Node\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Node\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/persistentvolumeclaims\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1PersistentVolumeClaimForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolumeClaim\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/persistentvolumes\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PersistentVolume\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1PersistentVolume\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolume\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a PersistentVolume\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"createCoreV1PersistentVolume\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolume\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of PersistentVolume\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1CollectionPersistentVolume\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolume\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/persistentvolumes/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified PersistentVolume\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1PersistentVolume\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolume\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified PersistentVolume\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1PersistentVolume\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolume\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a PersistentVolume\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"deleteCoreV1PersistentVolume\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolume\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified PersistentVolume\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1PersistentVolume\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolume\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PersistentVolume\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/persistentvolumes/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified PersistentVolume\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"readCoreV1PersistentVolumeStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolume\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified PersistentVolume\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"replaceCoreV1PersistentVolumeStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolume\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified PersistentVolume\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"patchCoreV1PersistentVolumeStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolume\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PersistentVolume\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/pods\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1PodForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/podtemplates\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PodTemplate\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1PodTemplateForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplateList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PodTemplate\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/proxy/namespaces/{namespace}/pods/{name}\": {\n    \"get\": {\n     \"description\": \"proxy GET requests to Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1GETNamespacedPod\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"put\": {\n     \"description\": \"proxy PUT requests to Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1PUTNamespacedPod\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"post\": {\n     \"description\": \"proxy POST requests to Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1POSTNamespacedPod\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"proxy DELETE requests to Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1DELETENamespacedPod\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"options\": {\n     \"description\": \"proxy OPTIONS requests to Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1OPTIONSNamespacedPod\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"head\": {\n     \"description\": \"proxy HEAD requests to Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1HEADNamespacedPod\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"proxy PATCH requests to Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1PATCHNamespacedPod\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Pod\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     }\n    ]\n   },\n   \"/api/v1/proxy/namespaces/{namespace}/pods/{name}/{path}\": {\n    \"get\": {\n     \"description\": \"proxy GET requests to Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1GETNamespacedPodWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"put\": {\n     \"description\": \"proxy PUT requests to Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1PUTNamespacedPodWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"post\": {\n     \"description\": \"proxy POST requests to Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1POSTNamespacedPodWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"proxy DELETE requests to Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1DELETENamespacedPodWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"options\": {\n     \"description\": \"proxy OPTIONS requests to Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1OPTIONSNamespacedPodWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"head\": {\n     \"description\": \"proxy HEAD requests to Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1HEADNamespacedPodWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"proxy PATCH requests to Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1PATCHNamespacedPodWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Pod\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"path to the resource\",\n      \"name\": \"path\",\n      \"in\": \"path\",\n      \"required\": true\n     }\n    ]\n   },\n   \"/api/v1/proxy/namespaces/{namespace}/services/{name}\": {\n    \"get\": {\n     \"description\": \"proxy GET requests to Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1GETNamespacedService\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"put\": {\n     \"description\": \"proxy PUT requests to Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1PUTNamespacedService\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"post\": {\n     \"description\": \"proxy POST requests to Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1POSTNamespacedService\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"proxy DELETE requests to Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1DELETENamespacedService\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"options\": {\n     \"description\": \"proxy OPTIONS requests to Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1OPTIONSNamespacedService\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"head\": {\n     \"description\": \"proxy HEAD requests to Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1HEADNamespacedService\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"proxy PATCH requests to Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1PATCHNamespacedService\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Service\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     }\n    ]\n   },\n   \"/api/v1/proxy/namespaces/{namespace}/services/{name}/{path}\": {\n    \"get\": {\n     \"description\": \"proxy GET requests to Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1GETNamespacedServiceWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"put\": {\n     \"description\": \"proxy PUT requests to Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1PUTNamespacedServiceWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"post\": {\n     \"description\": \"proxy POST requests to Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1POSTNamespacedServiceWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"proxy DELETE requests to Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1DELETENamespacedServiceWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"options\": {\n     \"description\": \"proxy OPTIONS requests to Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1OPTIONSNamespacedServiceWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"head\": {\n     \"description\": \"proxy HEAD requests to Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1HEADNamespacedServiceWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"proxy PATCH requests to Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1PATCHNamespacedServiceWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Service\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"path to the resource\",\n      \"name\": \"path\",\n      \"in\": \"path\",\n      \"required\": true\n     }\n    ]\n   },\n   \"/api/v1/proxy/nodes/{name}\": {\n    \"get\": {\n     \"description\": \"proxy GET requests to Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1GETNode\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"put\": {\n     \"description\": \"proxy PUT requests to Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1PUTNode\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"post\": {\n     \"description\": \"proxy POST requests to Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1POSTNode\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"proxy DELETE requests to Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1DELETENode\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"options\": {\n     \"description\": \"proxy OPTIONS requests to Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1OPTIONSNode\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"head\": {\n     \"description\": \"proxy HEAD requests to Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1HEADNode\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"proxy PATCH requests to Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1PATCHNode\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Node\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     }\n    ]\n   },\n   \"/api/v1/proxy/nodes/{name}/{path}\": {\n    \"get\": {\n     \"description\": \"proxy GET requests to Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1GETNodeWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"put\": {\n     \"description\": \"proxy PUT requests to Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1PUTNodeWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"post\": {\n     \"description\": \"proxy POST requests to Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1POSTNodeWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"proxy DELETE requests to Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1DELETENodeWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"options\": {\n     \"description\": \"proxy OPTIONS requests to Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1OPTIONSNodeWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"head\": {\n     \"description\": \"proxy HEAD requests to Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1HEADNodeWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"proxy PATCH requests to Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"*/*\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"proxyCoreV1PATCHNodeWithPath\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"type\": \"string\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"proxy\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Node\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"path to the resource\",\n      \"name\": \"path\",\n      \"in\": \"path\",\n      \"required\": true\n     }\n    ]\n   },\n   \"/api/v1/replicationcontrollers\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1ReplicationControllerForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationControllerList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ReplicationController\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/resourcequotas\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1ResourceQuotaForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuotaList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ResourceQuota\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/secrets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Secret\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1SecretForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.SecretList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Secret\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/serviceaccounts\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ServiceAccount\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1ServiceAccountForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceAccountList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ServiceAccount\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/services\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"listCoreV1ServiceForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/configmaps\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ConfigMap\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1ConfigMapListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ConfigMap\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/endpoints\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Endpoints\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1EndpointsListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Endpoints\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/events\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1EventListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Event\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/limitranges\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of LimitRange\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1LimitRangeListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"LimitRange\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Namespace\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespaceList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Namespace\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/configmaps\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ConfigMap\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedConfigMapList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ConfigMap\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/configmaps/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ConfigMap\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedConfigMap\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ConfigMap\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ConfigMap\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/endpoints\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Endpoints\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedEndpointsList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Endpoints\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/endpoints/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Endpoints\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedEndpoints\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Endpoints\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Endpoints\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/events\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedEventList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Event\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/events/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Event\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedEvent\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Event\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Event\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/limitranges\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of LimitRange\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedLimitRangeList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"LimitRange\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/limitranges/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind LimitRange\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedLimitRange\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"LimitRange\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the LimitRange\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/persistentvolumeclaims\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedPersistentVolumeClaimList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolumeClaim\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/persistentvolumeclaims/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedPersistentVolumeClaim\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolumeClaim\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PersistentVolumeClaim\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/pods\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedPodList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/pods/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedPod\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Pod\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/podtemplates\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PodTemplate\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedPodTemplateList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PodTemplate\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/podtemplates/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind PodTemplate\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedPodTemplate\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PodTemplate\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PodTemplate\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/replicationcontrollers\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedReplicationControllerList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ReplicationController\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/replicationcontrollers/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedReplicationController\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ReplicationController\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ReplicationController\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/resourcequotas\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedResourceQuotaList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ResourceQuota\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/resourcequotas/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedResourceQuota\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ResourceQuota\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ResourceQuota\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/secrets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Secret\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedSecretList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Secret\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/secrets/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Secret\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedSecret\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Secret\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Secret\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/serviceaccounts\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ServiceAccount\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedServiceAccountList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ServiceAccount\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/serviceaccounts/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ServiceAccount\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedServiceAccount\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ServiceAccount\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ServiceAccount\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/services\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedServiceList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{namespace}/services/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NamespacedService\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Service\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/namespaces/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Namespace\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1Namespace\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Namespace\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Namespace\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/nodes\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1NodeList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/nodes/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Node\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1Node\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Node\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/persistentvolumeclaims\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PersistentVolumeClaim\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1PersistentVolumeClaimListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolumeClaim\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/persistentvolumes\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PersistentVolume\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1PersistentVolumeList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolume\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/persistentvolumes/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind PersistentVolume\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1PersistentVolume\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolume\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PersistentVolume\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/pods\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Pod\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1PodListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/podtemplates\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PodTemplate\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1PodTemplateListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PodTemplate\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/replicationcontrollers\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ReplicationController\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1ReplicationControllerListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ReplicationController\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/resourcequotas\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ResourceQuota\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1ResourceQuotaListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ResourceQuota\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/secrets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Secret\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1SecretListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Secret\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/serviceaccounts\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ServiceAccount\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1ServiceAccountListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ServiceAccount\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/api/v1/watch/services\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Service\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"core_v1\"\n     ],\n     \"operationId\": \"watchCoreV1ServiceListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/\": {\n    \"get\": {\n     \"description\": \"get available API versions\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apis\"\n     ],\n     \"operationId\": \"getAPIVersions\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroupList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/admissionregistration.k8s.io/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration\"\n     ],\n     \"operationId\": \"getAdmissionregistrationAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/admissionregistration.k8s.io/v1alpha1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"getAdmissionregistrationV1alpha1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/admissionregistration.k8s.io/v1alpha1/externaladmissionhookconfigurations\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ExternalAdmissionHookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"listAdmissionregistrationV1alpha1ExternalAdmissionHookConfiguration\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHookConfigurationList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ExternalAdmissionHookConfiguration\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create an ExternalAdmissionHookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"createAdmissionregistrationV1alpha1ExternalAdmissionHookConfiguration\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHookConfiguration\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHookConfiguration\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ExternalAdmissionHookConfiguration\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ExternalAdmissionHookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"deleteAdmissionregistrationV1alpha1CollectionExternalAdmissionHookConfiguration\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ExternalAdmissionHookConfiguration\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/admissionregistration.k8s.io/v1alpha1/externaladmissionhookconfigurations/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ExternalAdmissionHookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"readAdmissionregistrationV1alpha1ExternalAdmissionHookConfiguration\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHookConfiguration\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ExternalAdmissionHookConfiguration\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ExternalAdmissionHookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"replaceAdmissionregistrationV1alpha1ExternalAdmissionHookConfiguration\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHookConfiguration\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHookConfiguration\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ExternalAdmissionHookConfiguration\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete an ExternalAdmissionHookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"deleteAdmissionregistrationV1alpha1ExternalAdmissionHookConfiguration\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ExternalAdmissionHookConfiguration\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ExternalAdmissionHookConfiguration\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"patchAdmissionregistrationV1alpha1ExternalAdmissionHookConfiguration\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHookConfiguration\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ExternalAdmissionHookConfiguration\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ExternalAdmissionHookConfiguration\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/admissionregistration.k8s.io/v1alpha1/initializerconfigurations\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind InitializerConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"listAdmissionregistrationV1alpha1InitializerConfiguration\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfigurationList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"InitializerConfiguration\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create an InitializerConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"createAdmissionregistrationV1alpha1InitializerConfiguration\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfiguration\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfiguration\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"InitializerConfiguration\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of InitializerConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"deleteAdmissionregistrationV1alpha1CollectionInitializerConfiguration\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"InitializerConfiguration\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/admissionregistration.k8s.io/v1alpha1/initializerconfigurations/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified InitializerConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"readAdmissionregistrationV1alpha1InitializerConfiguration\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfiguration\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"InitializerConfiguration\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified InitializerConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"replaceAdmissionregistrationV1alpha1InitializerConfiguration\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfiguration\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfiguration\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"InitializerConfiguration\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete an InitializerConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"deleteAdmissionregistrationV1alpha1InitializerConfiguration\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"InitializerConfiguration\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified InitializerConfiguration\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"patchAdmissionregistrationV1alpha1InitializerConfiguration\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfiguration\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"InitializerConfiguration\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the InitializerConfiguration\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/admissionregistration.k8s.io/v1alpha1/watch/externaladmissionhookconfigurations\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ExternalAdmissionHookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"watchAdmissionregistrationV1alpha1ExternalAdmissionHookConfigurationList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ExternalAdmissionHookConfiguration\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/admissionregistration.k8s.io/v1alpha1/watch/externaladmissionhookconfigurations/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ExternalAdmissionHookConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"watchAdmissionregistrationV1alpha1ExternalAdmissionHookConfiguration\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ExternalAdmissionHookConfiguration\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ExternalAdmissionHookConfiguration\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/admissionregistration.k8s.io/v1alpha1/watch/initializerconfigurations\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of InitializerConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"watchAdmissionregistrationV1alpha1InitializerConfigurationList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"InitializerConfiguration\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/admissionregistration.k8s.io/v1alpha1/watch/initializerconfigurations/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind InitializerConfiguration\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"admissionregistration_v1alpha1\"\n     ],\n     \"operationId\": \"watchAdmissionregistrationV1alpha1InitializerConfiguration\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"InitializerConfiguration\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the InitializerConfiguration\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apiregistration.k8s.io/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration\"\n     ],\n     \"operationId\": \"getApiregistrationAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/apiregistration.k8s.io/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"getApiregistrationV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/apiregistration.k8s.io/v1beta1/apiservices\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"listApiregistrationV1beta1APIService\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"APIService\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create an APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"createApiregistrationV1beta1APIService\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"APIService\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"deleteApiregistrationV1beta1CollectionAPIService\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"APIService\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apiregistration.k8s.io/v1beta1/apiservices/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"readApiregistrationV1beta1APIService\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"APIService\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"replaceApiregistrationV1beta1APIService\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"APIService\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete an APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"deleteApiregistrationV1beta1APIService\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"APIService\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified APIService\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"patchApiregistrationV1beta1APIService\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"APIService\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the APIService\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apiregistration.k8s.io/v1beta1/apiservices/{name}/status\": {\n    \"put\": {\n     \"description\": \"replace status of the specified APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"replaceApiregistrationV1beta1APIServiceStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"APIService\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the APIService\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apiregistration.k8s.io/v1beta1/watch/apiservices\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"watchApiregistrationV1beta1APIServiceList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"APIService\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apiregistration.k8s.io/v1beta1/watch/apiservices/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind APIService\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apiregistration_v1beta1\"\n     ],\n     \"operationId\": \"watchApiregistrationV1beta1APIService\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apiregistration.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"APIService\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the APIService\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps\"\n     ],\n     \"operationId\": \"getAppsAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/apps/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"getAppsV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/apps/v1beta1/controllerrevisions\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"listAppsV1beta1ControllerRevisionForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevisionList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ControllerRevision\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/deployments\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"listAppsV1beta1DeploymentForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/namespaces/{namespace}/controllerrevisions\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"listAppsV1beta1NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevisionList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ControllerRevision\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"createAppsV1beta1NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevision\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevision\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ControllerRevision\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"deleteAppsV1beta1CollectionNamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ControllerRevision\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/namespaces/{namespace}/controllerrevisions/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"readAppsV1beta1NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevision\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ControllerRevision\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"replaceAppsV1beta1NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevision\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevision\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ControllerRevision\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"deleteAppsV1beta1NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ControllerRevision\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ControllerRevision\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"patchAppsV1beta1NamespacedControllerRevision\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevision\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ControllerRevision\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ControllerRevision\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/namespaces/{namespace}/deployments\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"listAppsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"createAppsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"deleteAppsV1beta1CollectionNamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"readAppsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"replaceAppsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"deleteAppsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Deployment\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"patchAppsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Deployment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/rollback\": {\n    \"post\": {\n     \"description\": \"create rollback of a DeploymentRollback\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"createAppsV1beta1NamespacedDeploymentRollbackRollback\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentRollback\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentRollback\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DeploymentRollback\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the DeploymentRollback\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/scale\": {\n    \"get\": {\n     \"description\": \"read scale of the specified Scale\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"readAppsV1beta1NamespacedScaleScale\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Scale\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace scale of the specified Scale\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"replaceAppsV1beta1NamespacedScaleScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Scale\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Scale\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update scale of the specified Scale\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"patchAppsV1beta1NamespacedScaleScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Scale\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Scale\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"readAppsV1beta1NamespacedDeploymentStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"replaceAppsV1beta1NamespacedDeploymentStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified Deployment\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"patchAppsV1beta1NamespacedDeploymentStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Deployment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/namespaces/{namespace}/statefulsets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"listAppsV1beta1NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StatefulSet\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"createAppsV1beta1NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StatefulSet\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"deleteAppsV1beta1CollectionNamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StatefulSet\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"readAppsV1beta1NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StatefulSet\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"replaceAppsV1beta1NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StatefulSet\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"deleteAppsV1beta1NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StatefulSet\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified StatefulSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"patchAppsV1beta1NamespacedStatefulSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StatefulSet\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the StatefulSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/namespaces/{namespace}/statefulsets/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"readAppsV1beta1NamespacedStatefulSetStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StatefulSet\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"replaceAppsV1beta1NamespacedStatefulSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StatefulSet\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified StatefulSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"patchAppsV1beta1NamespacedStatefulSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StatefulSet\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the StatefulSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/statefulsets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"listAppsV1beta1StatefulSetForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StatefulSet\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/watch/controllerrevisions\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"watchAppsV1beta1ControllerRevisionListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ControllerRevision\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/watch/deployments\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"watchAppsV1beta1DeploymentListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/watch/namespaces/{namespace}/controllerrevisions\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"watchAppsV1beta1NamespacedControllerRevisionList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ControllerRevision\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/watch/namespaces/{namespace}/controllerrevisions/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ControllerRevision\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"watchAppsV1beta1NamespacedControllerRevision\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ControllerRevision\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ControllerRevision\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/watch/namespaces/{namespace}/deployments\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"watchAppsV1beta1NamespacedDeploymentList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/watch/namespaces/{namespace}/deployments/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"watchAppsV1beta1NamespacedDeployment\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Deployment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/watch/namespaces/{namespace}/statefulsets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"watchAppsV1beta1NamespacedStatefulSetList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StatefulSet\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/watch/namespaces/{namespace}/statefulsets/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"watchAppsV1beta1NamespacedStatefulSet\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StatefulSet\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the StatefulSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/apps/v1beta1/watch/statefulsets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of StatefulSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"apps_v1beta1\"\n     ],\n     \"operationId\": \"watchAppsV1beta1StatefulSetListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StatefulSet\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/authentication.k8s.io/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authentication\"\n     ],\n     \"operationId\": \"getAuthenticationAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/authentication.k8s.io/v1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authentication_v1\"\n     ],\n     \"operationId\": \"getAuthenticationV1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/authentication.k8s.io/v1/tokenreviews\": {\n    \"post\": {\n     \"description\": \"create a TokenReview\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authentication_v1\"\n     ],\n     \"operationId\": \"createAuthenticationV1TokenReview\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReview\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReview\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"authentication.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"TokenReview\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/authentication.k8s.io/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authentication_v1beta1\"\n     ],\n     \"operationId\": \"getAuthenticationV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/authentication.k8s.io/v1beta1/tokenreviews\": {\n    \"post\": {\n     \"description\": \"create a TokenReview\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authentication_v1beta1\"\n     ],\n     \"operationId\": \"createAuthenticationV1beta1TokenReview\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authentication.v1beta1.TokenReview\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authentication.v1beta1.TokenReview\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"authentication.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"TokenReview\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/authorization.k8s.io/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authorization\"\n     ],\n     \"operationId\": \"getAuthorizationAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/authorization.k8s.io/v1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authorization_v1\"\n     ],\n     \"operationId\": \"getAuthorizationV1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/authorization.k8s.io/v1/namespaces/{namespace}/localsubjectaccessreviews\": {\n    \"post\": {\n     \"description\": \"create a LocalSubjectAccessReview\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authorization_v1\"\n     ],\n     \"operationId\": \"createAuthorizationV1NamespacedLocalSubjectAccessReview\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.LocalSubjectAccessReview\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.LocalSubjectAccessReview\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"authorization.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"LocalSubjectAccessReview\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/authorization.k8s.io/v1/selfsubjectaccessreviews\": {\n    \"post\": {\n     \"description\": \"create a SelfSubjectAccessReview\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authorization_v1\"\n     ],\n     \"operationId\": \"createAuthorizationV1SelfSubjectAccessReview\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.SelfSubjectAccessReview\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.SelfSubjectAccessReview\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"authorization.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"SelfSubjectAccessReview\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/authorization.k8s.io/v1/subjectaccessreviews\": {\n    \"post\": {\n     \"description\": \"create a SubjectAccessReview\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authorization_v1\"\n     ],\n     \"operationId\": \"createAuthorizationV1SubjectAccessReview\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReview\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReview\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"authorization.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"SubjectAccessReview\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/authorization.k8s.io/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authorization_v1beta1\"\n     ],\n     \"operationId\": \"getAuthorizationV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/authorization.k8s.io/v1beta1/namespaces/{namespace}/localsubjectaccessreviews\": {\n    \"post\": {\n     \"description\": \"create a LocalSubjectAccessReview\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authorization_v1beta1\"\n     ],\n     \"operationId\": \"createAuthorizationV1beta1NamespacedLocalSubjectAccessReview\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.LocalSubjectAccessReview\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.LocalSubjectAccessReview\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"LocalSubjectAccessReview\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/authorization.k8s.io/v1beta1/selfsubjectaccessreviews\": {\n    \"post\": {\n     \"description\": \"create a SelfSubjectAccessReview\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authorization_v1beta1\"\n     ],\n     \"operationId\": \"createAuthorizationV1beta1SelfSubjectAccessReview\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SelfSubjectAccessReview\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SelfSubjectAccessReview\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"SelfSubjectAccessReview\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/authorization.k8s.io/v1beta1/subjectaccessreviews\": {\n    \"post\": {\n     \"description\": \"create a SubjectAccessReview\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"authorization_v1beta1\"\n     ],\n     \"operationId\": \"createAuthorizationV1beta1SubjectAccessReview\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReview\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReview\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"SubjectAccessReview\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling\"\n     ],\n     \"operationId\": \"getAutoscalingAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/autoscaling/v1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"getAutoscalingV1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/autoscaling/v1/horizontalpodautoscalers\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"listAutoscalingV1HorizontalPodAutoscalerForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"listAutoscalingV1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"createAutoscalingV1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"deleteAutoscalingV1CollectionNamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"readAutoscalingV1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"replaceAutoscalingV1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"deleteAutoscalingV1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"patchAutoscalingV1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the HorizontalPodAutoscaler\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"readAutoscalingV1NamespacedHorizontalPodAutoscalerStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"replaceAutoscalingV1NamespacedHorizontalPodAutoscalerStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"patchAutoscalingV1NamespacedHorizontalPodAutoscalerStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the HorizontalPodAutoscaler\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v1/watch/horizontalpodautoscalers\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"watchAutoscalingV1HorizontalPodAutoscalerListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v1/watch/namespaces/{namespace}/horizontalpodautoscalers\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"watchAutoscalingV1NamespacedHorizontalPodAutoscalerList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v1/watch/namespaces/{namespace}/horizontalpodautoscalers/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v1\"\n     ],\n     \"operationId\": \"watchAutoscalingV1NamespacedHorizontalPodAutoscaler\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the HorizontalPodAutoscaler\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v2alpha1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2alpha1\"\n     ],\n     \"operationId\": \"getAutoscalingV2alpha1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/autoscaling/v2alpha1/horizontalpodautoscalers\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2alpha1\"\n     ],\n     \"operationId\": \"listAutoscalingV2alpha1HorizontalPodAutoscalerForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v2alpha1/namespaces/{namespace}/horizontalpodautoscalers\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2alpha1\"\n     ],\n     \"operationId\": \"listAutoscalingV2alpha1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2alpha1\"\n     ],\n     \"operationId\": \"createAutoscalingV2alpha1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2alpha1\"\n     ],\n     \"operationId\": \"deleteAutoscalingV2alpha1CollectionNamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v2alpha1/namespaces/{namespace}/horizontalpodautoscalers/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2alpha1\"\n     ],\n     \"operationId\": \"readAutoscalingV2alpha1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2alpha1\"\n     ],\n     \"operationId\": \"replaceAutoscalingV2alpha1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2alpha1\"\n     ],\n     \"operationId\": \"deleteAutoscalingV2alpha1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2alpha1\"\n     ],\n     \"operationId\": \"patchAutoscalingV2alpha1NamespacedHorizontalPodAutoscaler\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the HorizontalPodAutoscaler\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v2alpha1/namespaces/{namespace}/horizontalpodautoscalers/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2alpha1\"\n     ],\n     \"operationId\": \"readAutoscalingV2alpha1NamespacedHorizontalPodAutoscalerStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2alpha1\"\n     ],\n     \"operationId\": \"replaceAutoscalingV2alpha1NamespacedHorizontalPodAutoscalerStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2alpha1\"\n     ],\n     \"operationId\": \"patchAutoscalingV2alpha1NamespacedHorizontalPodAutoscalerStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the HorizontalPodAutoscaler\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v2alpha1/watch/horizontalpodautoscalers\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2alpha1\"\n     ],\n     \"operationId\": \"watchAutoscalingV2alpha1HorizontalPodAutoscalerListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v2alpha1/watch/namespaces/{namespace}/horizontalpodautoscalers\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2alpha1\"\n     ],\n     \"operationId\": \"watchAutoscalingV2alpha1NamespacedHorizontalPodAutoscalerList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/autoscaling/v2alpha1/watch/namespaces/{namespace}/horizontalpodautoscalers/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind HorizontalPodAutoscaler\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"autoscaling_v2alpha1\"\n     ],\n     \"operationId\": \"watchAutoscalingV2alpha1NamespacedHorizontalPodAutoscaler\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"autoscaling\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the HorizontalPodAutoscaler\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch\"\n     ],\n     \"operationId\": \"getBatchAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/batch/v1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"getBatchV1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/batch/v1/jobs\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"listBatchV1JobForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.JobList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v1\",\n      \"kind\": \"Job\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v1/namespaces/{namespace}/jobs\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"listBatchV1NamespacedJob\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.JobList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v1\",\n      \"kind\": \"Job\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"createBatchV1NamespacedJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v1\",\n      \"kind\": \"Job\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"deleteBatchV1CollectionNamespacedJob\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v1\",\n      \"kind\": \"Job\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v1/namespaces/{namespace}/jobs/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"readBatchV1NamespacedJob\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v1\",\n      \"kind\": \"Job\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"replaceBatchV1NamespacedJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v1\",\n      \"kind\": \"Job\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"deleteBatchV1NamespacedJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v1\",\n      \"kind\": \"Job\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Job\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"patchBatchV1NamespacedJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v1\",\n      \"kind\": \"Job\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Job\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v1/namespaces/{namespace}/jobs/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"readBatchV1NamespacedJobStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v1\",\n      \"kind\": \"Job\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"replaceBatchV1NamespacedJobStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v1\",\n      \"kind\": \"Job\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified Job\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"patchBatchV1NamespacedJobStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v1\",\n      \"kind\": \"Job\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Job\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v1/watch/jobs\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"watchBatchV1JobListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v1\",\n      \"kind\": \"Job\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v1/watch/namespaces/{namespace}/jobs\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"watchBatchV1NamespacedJobList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v1\",\n      \"kind\": \"Job\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v1/watch/namespaces/{namespace}/jobs/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Job\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v1\"\n     ],\n     \"operationId\": \"watchBatchV1NamespacedJob\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v1\",\n      \"kind\": \"Job\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Job\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v2alpha1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"getBatchV2alpha1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/batch/v2alpha1/cronjobs\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"listBatchV2alpha1CronJobForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"CronJob\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v2alpha1/namespaces/{namespace}/cronjobs\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"listBatchV2alpha1NamespacedCronJob\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"CronJob\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"createBatchV2alpha1NamespacedCronJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"CronJob\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"deleteBatchV2alpha1CollectionNamespacedCronJob\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"CronJob\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v2alpha1/namespaces/{namespace}/cronjobs/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"readBatchV2alpha1NamespacedCronJob\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"CronJob\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"replaceBatchV2alpha1NamespacedCronJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"CronJob\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"deleteBatchV2alpha1NamespacedCronJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"CronJob\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified CronJob\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"patchBatchV2alpha1NamespacedCronJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"CronJob\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the CronJob\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v2alpha1/namespaces/{namespace}/cronjobs/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"readBatchV2alpha1NamespacedCronJobStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"CronJob\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"replaceBatchV2alpha1NamespacedCronJobStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"CronJob\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified CronJob\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"patchBatchV2alpha1NamespacedCronJobStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"CronJob\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the CronJob\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v2alpha1/namespaces/{namespace}/scheduledjobs\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ScheduledJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"listBatchV2alpha1NamespacedScheduledJob\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"ScheduledJob\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ScheduledJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"createBatchV2alpha1NamespacedScheduledJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"ScheduledJob\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ScheduledJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"deleteBatchV2alpha1CollectionNamespacedScheduledJob\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"ScheduledJob\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v2alpha1/namespaces/{namespace}/scheduledjobs/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ScheduledJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"readBatchV2alpha1NamespacedScheduledJob\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"ScheduledJob\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ScheduledJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"replaceBatchV2alpha1NamespacedScheduledJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"ScheduledJob\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ScheduledJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"deleteBatchV2alpha1NamespacedScheduledJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"ScheduledJob\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ScheduledJob\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"patchBatchV2alpha1NamespacedScheduledJob\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"ScheduledJob\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ScheduledJob\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v2alpha1/namespaces/{namespace}/scheduledjobs/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified ScheduledJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"readBatchV2alpha1NamespacedScheduledJobStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"ScheduledJob\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified ScheduledJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"replaceBatchV2alpha1NamespacedScheduledJobStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"ScheduledJob\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified ScheduledJob\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"patchBatchV2alpha1NamespacedScheduledJobStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"ScheduledJob\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ScheduledJob\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v2alpha1/scheduledjobs\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ScheduledJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"listBatchV2alpha1ScheduledJobForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"ScheduledJob\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v2alpha1/watch/cronjobs\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"watchBatchV2alpha1CronJobListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"CronJob\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v2alpha1/watch/namespaces/{namespace}/cronjobs\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"watchBatchV2alpha1NamespacedCronJobList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"CronJob\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v2alpha1/watch/namespaces/{namespace}/cronjobs/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind CronJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"watchBatchV2alpha1NamespacedCronJob\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"CronJob\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the CronJob\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v2alpha1/watch/namespaces/{namespace}/scheduledjobs\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ScheduledJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"watchBatchV2alpha1NamespacedScheduledJobList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"ScheduledJob\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v2alpha1/watch/namespaces/{namespace}/scheduledjobs/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ScheduledJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"watchBatchV2alpha1NamespacedScheduledJob\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"ScheduledJob\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ScheduledJob\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/batch/v2alpha1/watch/scheduledjobs\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ScheduledJob\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"batch_v2alpha1\"\n     ],\n     \"operationId\": \"watchBatchV2alpha1ScheduledJobListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"ScheduledJob\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/certificates.k8s.io/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates\"\n     ],\n     \"operationId\": \"getCertificatesAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/certificates.k8s.io/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"getCertificatesV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/certificates.k8s.io/v1beta1/certificatesigningrequests\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind CertificateSigningRequest\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"listCertificatesV1beta1CertificateSigningRequest\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"CertificateSigningRequest\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a CertificateSigningRequest\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"createCertificatesV1beta1CertificateSigningRequest\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"CertificateSigningRequest\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of CertificateSigningRequest\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"deleteCertificatesV1beta1CollectionCertificateSigningRequest\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"CertificateSigningRequest\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified CertificateSigningRequest\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"readCertificatesV1beta1CertificateSigningRequest\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"CertificateSigningRequest\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified CertificateSigningRequest\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"replaceCertificatesV1beta1CertificateSigningRequest\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"CertificateSigningRequest\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a CertificateSigningRequest\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"deleteCertificatesV1beta1CertificateSigningRequest\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"CertificateSigningRequest\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified CertificateSigningRequest\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"patchCertificatesV1beta1CertificateSigningRequest\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"CertificateSigningRequest\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the CertificateSigningRequest\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name}/approval\": {\n    \"put\": {\n     \"description\": \"replace approval of the specified CertificateSigningRequest\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"replaceCertificatesV1beta1CertificateSigningRequestApproval\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"CertificateSigningRequest\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the CertificateSigningRequest\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/certificates.k8s.io/v1beta1/certificatesigningrequests/{name}/status\": {\n    \"put\": {\n     \"description\": \"replace status of the specified CertificateSigningRequest\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"replaceCertificatesV1beta1CertificateSigningRequestStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"CertificateSigningRequest\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the CertificateSigningRequest\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/certificates.k8s.io/v1beta1/watch/certificatesigningrequests\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of CertificateSigningRequest\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"watchCertificatesV1beta1CertificateSigningRequestList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"CertificateSigningRequest\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/certificates.k8s.io/v1beta1/watch/certificatesigningrequests/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind CertificateSigningRequest\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"certificates_v1beta1\"\n     ],\n     \"operationId\": \"watchCertificatesV1beta1CertificateSigningRequest\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"certificates.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"CertificateSigningRequest\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the CertificateSigningRequest\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions\"\n     ],\n     \"operationId\": \"getExtensionsAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/extensions/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"getExtensionsV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/extensions/v1beta1/daemonsets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1DaemonSetForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DaemonSet\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/deployments\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1DeploymentForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/ingresses\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1IngressForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Ingress\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/daemonsets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DaemonSet\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"createExtensionsV1beta1NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DaemonSet\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1CollectionNamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DaemonSet\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DaemonSet\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DaemonSet\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DaemonSet\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified DaemonSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedDaemonSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DaemonSet\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the DaemonSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/daemonsets/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedDaemonSetStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DaemonSet\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedDaemonSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DaemonSet\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified DaemonSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedDaemonSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DaemonSet\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the DaemonSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/deployments\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"createExtensionsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1CollectionNamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Deployment\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedDeployment\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Deployment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/rollback\": {\n    \"post\": {\n     \"description\": \"create rollback of a DeploymentRollback\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"createExtensionsV1beta1NamespacedDeploymentRollbackRollback\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentRollback\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentRollback\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DeploymentRollback\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the DeploymentRollback\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/scale\": {\n    \"get\": {\n     \"description\": \"read scale of the specified Scale\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedDeploymentsScale\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Scale\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace scale of the specified Scale\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedDeploymentsScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Scale\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update scale of the specified Scale\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedDeploymentsScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Scale\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Scale\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/deployments/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedDeploymentStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedDeploymentStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified Deployment\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedDeploymentStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Deployment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/ingresses\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1NamespacedIngress\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Ingress\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create an Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"createExtensionsV1beta1NamespacedIngress\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Ingress\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1CollectionNamespacedIngress\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Ingress\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedIngress\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Ingress\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedIngress\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Ingress\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete an Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1NamespacedIngress\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Ingress\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Ingress\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedIngress\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Ingress\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Ingress\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedIngressStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Ingress\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedIngressStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Ingress\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified Ingress\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedIngressStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Ingress\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Ingress\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/networkpolicies\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"createExtensionsV1beta1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicy\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1CollectionNamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/networkpolicies/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicy\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified NetworkPolicy\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the NetworkPolicy\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/replicasets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ReplicaSet\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"createExtensionsV1beta1NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ReplicaSet\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1CollectionNamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ReplicaSet\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ReplicaSet\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ReplicaSet\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ReplicaSet\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ReplicaSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedReplicaSet\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ReplicaSet\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ReplicaSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/scale\": {\n    \"get\": {\n     \"description\": \"read scale of the specified Scale\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedReplicasetsScale\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Scale\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace scale of the specified Scale\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedReplicasetsScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Scale\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update scale of the specified Scale\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedReplicasetsScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Scale\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Scale\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/replicasets/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedReplicaSetStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ReplicaSet\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedReplicaSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ReplicaSet\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified ReplicaSet\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedReplicaSetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ReplicaSet\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ReplicaSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/namespaces/{namespace}/replicationcontrollers/{name}/scale\": {\n    \"get\": {\n     \"description\": \"read scale of the specified Scale\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1NamespacedReplicationcontrollersScale\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Scale\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace scale of the specified Scale\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1NamespacedReplicationcontrollersScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Scale\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update scale of the specified Scale\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1NamespacedReplicationcontrollersScale\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Scale\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Scale\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/networkpolicies\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1NetworkPolicyForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/podsecuritypolicies\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1PodSecurityPolicy\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicyList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodSecurityPolicy\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"createExtensionsV1beta1PodSecurityPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicy\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodSecurityPolicy\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1CollectionPodSecurityPolicy\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodSecurityPolicy\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/podsecuritypolicies/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1PodSecurityPolicy\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodSecurityPolicy\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1PodSecurityPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicy\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodSecurityPolicy\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1PodSecurityPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodSecurityPolicy\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified PodSecurityPolicy\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1PodSecurityPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodSecurityPolicy\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PodSecurityPolicy\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/replicasets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1ReplicaSetForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ReplicaSet\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/thirdpartyresources\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ThirdPartyResource\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"listExtensionsV1beta1ThirdPartyResource\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ThirdPartyResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ThirdPartyResource\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ThirdPartyResource\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"createExtensionsV1beta1ThirdPartyResource\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ThirdPartyResource\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ThirdPartyResource\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ThirdPartyResource\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ThirdPartyResource\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1CollectionThirdPartyResource\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ThirdPartyResource\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/thirdpartyresources/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ThirdPartyResource\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"readExtensionsV1beta1ThirdPartyResource\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ThirdPartyResource\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ThirdPartyResource\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ThirdPartyResource\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"replaceExtensionsV1beta1ThirdPartyResource\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ThirdPartyResource\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ThirdPartyResource\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ThirdPartyResource\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ThirdPartyResource\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"deleteExtensionsV1beta1ThirdPartyResource\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ThirdPartyResource\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ThirdPartyResource\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"patchExtensionsV1beta1ThirdPartyResource\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ThirdPartyResource\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ThirdPartyResource\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ThirdPartyResource\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/daemonsets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1DaemonSetListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DaemonSet\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/deployments\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1DeploymentListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/ingresses\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1IngressListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Ingress\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/namespaces/{namespace}/daemonsets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NamespacedDaemonSetList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DaemonSet\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/namespaces/{namespace}/daemonsets/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind DaemonSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NamespacedDaemonSet\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DaemonSet\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the DaemonSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/namespaces/{namespace}/deployments\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NamespacedDeploymentList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/namespaces/{namespace}/deployments/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Deployment\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NamespacedDeployment\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Deployment\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/namespaces/{namespace}/ingresses\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NamespacedIngressList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Ingress\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/namespaces/{namespace}/ingresses/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Ingress\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NamespacedIngress\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Ingress\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Ingress\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/namespaces/{namespace}/networkpolicies\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NamespacedNetworkPolicyList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/namespaces/{namespace}/networkpolicies/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NamespacedNetworkPolicy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the NetworkPolicy\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/namespaces/{namespace}/replicasets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NamespacedReplicaSetList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ReplicaSet\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/namespaces/{namespace}/replicasets/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NamespacedReplicaSet\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ReplicaSet\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ReplicaSet\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/networkpolicies\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1NetworkPolicyListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/podsecuritypolicies\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1PodSecurityPolicyList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodSecurityPolicy\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/podsecuritypolicies/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind PodSecurityPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1PodSecurityPolicy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodSecurityPolicy\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PodSecurityPolicy\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/replicasets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ReplicaSet\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1ReplicaSetListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ReplicaSet\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/thirdpartyresources\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ThirdPartyResource\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1ThirdPartyResourceList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ThirdPartyResource\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/extensions/v1beta1/watch/thirdpartyresources/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ThirdPartyResource\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"extensions_v1beta1\"\n     ],\n     \"operationId\": \"watchExtensionsV1beta1ThirdPartyResource\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ThirdPartyResource\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ThirdPartyResource\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/networking.k8s.io/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking\"\n     ],\n     \"operationId\": \"getNetworkingAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/networking.k8s.io/v1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"getNetworkingV1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"listNetworkingV1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"createNetworkingV1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicy\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"deleteNetworkingV1CollectionNamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"readNetworkingV1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"replaceNetworkingV1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicy\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"deleteNetworkingV1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified NetworkPolicy\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"patchNetworkingV1NamespacedNetworkPolicy\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicy\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the NetworkPolicy\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/networking.k8s.io/v1/networkpolicies\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"listNetworkingV1NetworkPolicyForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/networking.k8s.io/v1/watch/namespaces/{namespace}/networkpolicies\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"watchNetworkingV1NamespacedNetworkPolicyList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/networking.k8s.io/v1/watch/namespaces/{namespace}/networkpolicies/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"watchNetworkingV1NamespacedNetworkPolicy\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the NetworkPolicy\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/networking.k8s.io/v1/watch/networkpolicies\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of NetworkPolicy\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"networking_v1\"\n     ],\n     \"operationId\": \"watchNetworkingV1NetworkPolicyListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"networking.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/policy/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy\"\n     ],\n     \"operationId\": \"getPolicyAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/policy/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"getPolicyV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"listPolicyV1beta1NamespacedPodDisruptionBudget\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodDisruptionBudget\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"createPolicyV1beta1NamespacedPodDisruptionBudget\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodDisruptionBudget\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"deletePolicyV1beta1CollectionNamespacedPodDisruptionBudget\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodDisruptionBudget\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"readPolicyV1beta1NamespacedPodDisruptionBudget\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodDisruptionBudget\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"replacePolicyV1beta1NamespacedPodDisruptionBudget\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodDisruptionBudget\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"deletePolicyV1beta1NamespacedPodDisruptionBudget\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodDisruptionBudget\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified PodDisruptionBudget\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"patchPolicyV1beta1NamespacedPodDisruptionBudget\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodDisruptionBudget\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PodDisruptionBudget\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/policy/v1beta1/namespaces/{namespace}/poddisruptionbudgets/{name}/status\": {\n    \"get\": {\n     \"description\": \"read status of the specified PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"readPolicyV1beta1NamespacedPodDisruptionBudgetStatus\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodDisruptionBudget\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace status of the specified PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"replacePolicyV1beta1NamespacedPodDisruptionBudgetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodDisruptionBudget\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update status of the specified PodDisruptionBudget\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"patchPolicyV1beta1NamespacedPodDisruptionBudgetStatus\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodDisruptionBudget\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PodDisruptionBudget\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/policy/v1beta1/poddisruptionbudgets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"listPolicyV1beta1PodDisruptionBudgetForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodDisruptionBudget\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/policy/v1beta1/watch/namespaces/{namespace}/poddisruptionbudgets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"watchPolicyV1beta1NamespacedPodDisruptionBudgetList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodDisruptionBudget\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/policy/v1beta1/watch/namespaces/{namespace}/poddisruptionbudgets/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"watchPolicyV1beta1NamespacedPodDisruptionBudget\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodDisruptionBudget\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PodDisruptionBudget\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/policy/v1beta1/watch/poddisruptionbudgets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PodDisruptionBudget\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"policy_v1beta1\"\n     ],\n     \"operationId\": \"watchPolicyV1beta1PodDisruptionBudgetListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"policy\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodDisruptionBudget\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization\"\n     ],\n     \"operationId\": \"getRbacAuthorizationAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"getRbacAuthorizationV1alpha1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/clusterrolebindings\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1alpha1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBindingList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRoleBinding\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"createRbacAuthorizationV1alpha1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBinding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRoleBinding\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1alpha1CollectionClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRoleBinding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/clusterrolebindings/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"readRbacAuthorizationV1alpha1ClusterRoleBinding\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRoleBinding\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"replaceRbacAuthorizationV1alpha1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBinding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRoleBinding\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1alpha1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRoleBinding\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ClusterRoleBinding\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"patchRbacAuthorizationV1alpha1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRoleBinding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ClusterRoleBinding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/clusterroles\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1alpha1ClusterRole\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRole\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"createRbacAuthorizationV1alpha1ClusterRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRole\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRole\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRole\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1alpha1CollectionClusterRole\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRole\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/clusterroles/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"readRbacAuthorizationV1alpha1ClusterRole\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRole\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRole\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"replaceRbacAuthorizationV1alpha1ClusterRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRole\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRole\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRole\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1alpha1ClusterRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRole\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ClusterRole\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"patchRbacAuthorizationV1alpha1ClusterRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRole\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRole\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ClusterRole\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/rolebindings\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1alpha1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBindingList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"createRbacAuthorizationV1alpha1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBinding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1alpha1CollectionNamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/rolebindings/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"readRbacAuthorizationV1alpha1NamespacedRoleBinding\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"replaceRbacAuthorizationV1alpha1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBinding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1alpha1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified RoleBinding\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"patchRbacAuthorizationV1alpha1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the RoleBinding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/roles\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1alpha1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"createRbacAuthorizationV1alpha1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Role\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Role\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1alpha1CollectionNamespacedRole\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/namespaces/{namespace}/roles/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"readRbacAuthorizationV1alpha1NamespacedRole\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Role\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"replaceRbacAuthorizationV1alpha1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Role\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Role\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1alpha1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Role\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"patchRbacAuthorizationV1alpha1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Role\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Role\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/rolebindings\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1alpha1RoleBindingForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBindingList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/roles\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1alpha1RoleForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/watch/clusterrolebindings\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1alpha1ClusterRoleBindingList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRoleBinding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/watch/clusterrolebindings/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1alpha1ClusterRoleBinding\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRoleBinding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ClusterRoleBinding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/watch/clusterroles\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1alpha1ClusterRoleList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRole\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/watch/clusterroles/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1alpha1ClusterRole\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRole\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ClusterRole\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/watch/namespaces/{namespace}/rolebindings\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1alpha1NamespacedRoleBindingList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/watch/namespaces/{namespace}/rolebindings/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1alpha1NamespacedRoleBinding\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the RoleBinding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/watch/namespaces/{namespace}/roles\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1alpha1NamespacedRoleList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/watch/namespaces/{namespace}/roles/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1alpha1NamespacedRole\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Role\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/watch/rolebindings\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1alpha1RoleBindingListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1alpha1/watch/roles\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1alpha1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1alpha1RoleListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"getRbacAuthorizationV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindings\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1beta1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBindingList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRoleBinding\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"createRbacAuthorizationV1beta1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBinding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRoleBinding\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1beta1CollectionClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRoleBinding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindings/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"readRbacAuthorizationV1beta1ClusterRoleBinding\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRoleBinding\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"replaceRbacAuthorizationV1beta1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBinding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRoleBinding\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1beta1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRoleBinding\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ClusterRoleBinding\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"patchRbacAuthorizationV1beta1ClusterRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRoleBinding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ClusterRoleBinding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/clusterroles\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1beta1ClusterRole\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRole\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"createRbacAuthorizationV1beta1ClusterRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRole\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRole\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRole\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1beta1CollectionClusterRole\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRole\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/clusterroles/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"readRbacAuthorizationV1beta1ClusterRole\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRole\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRole\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"replaceRbacAuthorizationV1beta1ClusterRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRole\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRole\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRole\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1beta1ClusterRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRole\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified ClusterRole\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"patchRbacAuthorizationV1beta1ClusterRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRole\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRole\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ClusterRole\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolebindings\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1beta1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBindingList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"createRbacAuthorizationV1beta1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBinding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1beta1CollectionNamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/rolebindings/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"readRbacAuthorizationV1beta1NamespacedRoleBinding\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"replaceRbacAuthorizationV1beta1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBinding\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1beta1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified RoleBinding\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"patchRbacAuthorizationV1beta1NamespacedRoleBinding\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBinding\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the RoleBinding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/roles\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1beta1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"createRbacAuthorizationV1beta1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Role\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Role\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1beta1CollectionNamespacedRole\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/namespaces/{namespace}/roles/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"readRbacAuthorizationV1beta1NamespacedRole\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Role\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"replaceRbacAuthorizationV1beta1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Role\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Role\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"deleteRbacAuthorizationV1beta1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified Role\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"patchRbacAuthorizationV1beta1NamespacedRole\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Role\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Role\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/rolebindings\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1beta1RoleBindingForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBindingList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/roles\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"listRbacAuthorizationV1beta1RoleForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterrolebindings\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1beta1ClusterRoleBindingList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRoleBinding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterrolebindings/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ClusterRoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1beta1ClusterRoleBinding\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRoleBinding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ClusterRoleBinding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterroles\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1beta1ClusterRoleList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRole\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/watch/clusterroles/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind ClusterRole\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1beta1ClusterRole\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRole\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the ClusterRole\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/rolebindings\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1beta1NamespacedRoleBindingList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/rolebindings/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1beta1NamespacedRoleBinding\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the RoleBinding\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/roles\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1beta1NamespacedRoleList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/watch/namespaces/{namespace}/roles/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1beta1NamespacedRole\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the Role\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/watch/rolebindings\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of RoleBinding\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1beta1RoleBindingListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"RoleBinding\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/rbac.authorization.k8s.io/v1beta1/watch/roles\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of Role\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"rbacAuthorization_v1beta1\"\n     ],\n     \"operationId\": \"watchRbacAuthorizationV1beta1RoleListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Role\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/settings.k8s.io/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings\"\n     ],\n     \"operationId\": \"getSettingsAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/settings.k8s.io/v1alpha1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"getSettingsV1alpha1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/settings.k8s.io/v1alpha1/namespaces/{namespace}/podpresets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PodPreset\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"listSettingsV1alpha1NamespacedPodPreset\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPresetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"PodPreset\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a PodPreset\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"createSettingsV1alpha1NamespacedPodPreset\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPreset\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPreset\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"PodPreset\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of PodPreset\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"deleteSettingsV1alpha1CollectionNamespacedPodPreset\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"PodPreset\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/settings.k8s.io/v1alpha1/namespaces/{namespace}/podpresets/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified PodPreset\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"readSettingsV1alpha1NamespacedPodPreset\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPreset\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"PodPreset\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified PodPreset\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"replaceSettingsV1alpha1NamespacedPodPreset\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPreset\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPreset\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"PodPreset\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a PodPreset\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"deleteSettingsV1alpha1NamespacedPodPreset\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"PodPreset\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified PodPreset\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"patchSettingsV1alpha1NamespacedPodPreset\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPreset\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"PodPreset\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PodPreset\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/settings.k8s.io/v1alpha1/podpresets\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind PodPreset\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"listSettingsV1alpha1PodPresetForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPresetList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"PodPreset\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/settings.k8s.io/v1alpha1/watch/namespaces/{namespace}/podpresets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PodPreset\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"watchSettingsV1alpha1NamespacedPodPresetList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"PodPreset\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/settings.k8s.io/v1alpha1/watch/namespaces/{namespace}/podpresets/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind PodPreset\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"watchSettingsV1alpha1NamespacedPodPreset\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"PodPreset\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the PodPreset\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"object name and auth scope, such as for teams and projects\",\n      \"name\": \"namespace\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/settings.k8s.io/v1alpha1/watch/podpresets\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of PodPreset\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"settings_v1alpha1\"\n     ],\n     \"operationId\": \"watchSettingsV1alpha1PodPresetListForAllNamespaces\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"settings.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"PodPreset\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/\": {\n    \"get\": {\n     \"description\": \"get information of a group\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage\"\n     ],\n     \"operationId\": \"getStorageAPIGroup\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/storage.k8s.io/v1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1\"\n     ],\n     \"operationId\": \"getStorageV1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/storage.k8s.io/v1/storageclasses\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1\"\n     ],\n     \"operationId\": \"listStorageV1StorageClass\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1.StorageClassList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"StorageClass\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1\"\n     ],\n     \"operationId\": \"createStorageV1StorageClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1.StorageClass\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1.StorageClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"StorageClass\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1\"\n     ],\n     \"operationId\": \"deleteStorageV1CollectionStorageClass\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"StorageClass\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1/storageclasses/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1\"\n     ],\n     \"operationId\": \"readStorageV1StorageClass\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1.StorageClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"StorageClass\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1\"\n     ],\n     \"operationId\": \"replaceStorageV1StorageClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1.StorageClass\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1.StorageClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"StorageClass\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1\"\n     ],\n     \"operationId\": \"deleteStorageV1StorageClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"StorageClass\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified StorageClass\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1\"\n     ],\n     \"operationId\": \"patchStorageV1StorageClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1.StorageClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"StorageClass\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the StorageClass\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1/watch/storageclasses\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1\"\n     ],\n     \"operationId\": \"watchStorageV1StorageClassList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"StorageClass\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1/watch/storageclasses/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1\"\n     ],\n     \"operationId\": \"watchStorageV1StorageClass\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"StorageClass\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the StorageClass\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1beta1/\": {\n    \"get\": {\n     \"description\": \"get available resources\",\n     \"consumes\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"getStorageV1beta1APIResources\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/apis/storage.k8s.io/v1beta1/storageclasses\": {\n    \"get\": {\n     \"description\": \"list or watch objects of kind StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"listStorageV1beta1StorageClass\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClassList\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"list\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StorageClass\"\n     }\n    },\n    \"post\": {\n     \"description\": \"create a StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"createStorageV1beta1StorageClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClass\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"post\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StorageClass\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete collection of StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"deleteStorageV1beta1CollectionStorageClass\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n       \"name\": \"fieldSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"If true, partially initialized resources are included in the response.\",\n       \"name\": \"includeUninitialized\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n       \"name\": \"labelSelector\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n       \"name\": \"resourceVersion\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"Timeout for the list/watch call.\",\n       \"name\": \"timeoutSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n       \"name\": \"watch\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"deletecollection\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StorageClass\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1beta1/storageclasses/{name}\": {\n    \"get\": {\n     \"description\": \"read the specified StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"readStorageV1beta1StorageClass\",\n     \"parameters\": [\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'.\",\n       \"name\": \"exact\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Should this value be exported.  Export strips fields that a user can not specify.\",\n       \"name\": \"export\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"get\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StorageClass\"\n     }\n    },\n    \"put\": {\n     \"description\": \"replace the specified StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"replaceStorageV1beta1StorageClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClass\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"put\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StorageClass\"\n     }\n    },\n    \"delete\": {\n     \"description\": \"delete a StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"deleteStorageV1beta1StorageClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n       }\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"integer\",\n       \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n       \"name\": \"gracePeriodSeconds\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"boolean\",\n       \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n       \"name\": \"orphanDependents\",\n       \"in\": \"query\"\n      },\n      {\n       \"uniqueItems\": true,\n       \"type\": \"string\",\n       \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n       \"name\": \"propagationPolicy\",\n       \"in\": \"query\"\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"delete\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StorageClass\"\n     }\n    },\n    \"patch\": {\n     \"description\": \"partially update the specified StorageClass\",\n     \"consumes\": [\n      \"application/json-patch+json\",\n      \"application/merge-patch+json\",\n      \"application/strategic-merge-patch+json\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"patchStorageV1beta1StorageClass\",\n     \"parameters\": [\n      {\n       \"name\": \"body\",\n       \"in\": \"body\",\n       \"required\": true,\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch\"\n       }\n      }\n     ],\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClass\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"patch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StorageClass\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the StorageClass\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1beta1/watch/storageclasses\": {\n    \"get\": {\n     \"description\": \"watch individual changes to a list of StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"watchStorageV1beta1StorageClassList\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watchlist\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StorageClass\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/apis/storage.k8s.io/v1beta1/watch/storageclasses/{name}\": {\n    \"get\": {\n     \"description\": \"watch changes to an object of kind StorageClass\",\n     \"consumes\": [\n      \"*/*\"\n     ],\n     \"produces\": [\n      \"application/json\",\n      \"application/yaml\",\n      \"application/vnd.kubernetes.protobuf\",\n      \"application/json;stream=watch\",\n      \"application/vnd.kubernetes.protobuf;stream=watch\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"storage_v1beta1\"\n     ],\n     \"operationId\": \"watchStorageV1beta1StorageClass\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     },\n     \"x-kubernetes-action\": \"watch\",\n     \"x-kubernetes-group-version-kind\": {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StorageClass\"\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their fields. Defaults to everything.\",\n      \"name\": \"fieldSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"If true, partially initialized resources are included in the response.\",\n      \"name\": \"includeUninitialized\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"A selector to restrict the list of returned objects by their labels. Defaults to everything.\",\n      \"name\": \"labelSelector\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"name of the StorageClass\",\n      \"name\": \"name\",\n      \"in\": \"path\",\n      \"required\": true\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"If 'true', then the output is pretty printed.\",\n      \"name\": \"pretty\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.\",\n      \"name\": \"resourceVersion\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"integer\",\n      \"description\": \"Timeout for the list/watch call.\",\n      \"name\": \"timeoutSeconds\",\n      \"in\": \"query\"\n     },\n     {\n      \"uniqueItems\": true,\n      \"type\": \"boolean\",\n      \"description\": \"Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.\",\n      \"name\": \"watch\",\n      \"in\": \"query\"\n     }\n    ]\n   },\n   \"/logs/\": {\n    \"get\": {\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"logs\"\n     ],\n     \"operationId\": \"logFileListHandler\",\n     \"responses\": {\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   },\n   \"/logs/{logpath}\": {\n    \"get\": {\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"logs\"\n     ],\n     \"operationId\": \"logFileHandler\",\n     \"responses\": {\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    },\n    \"parameters\": [\n     {\n      \"uniqueItems\": true,\n      \"type\": \"string\",\n      \"description\": \"path to the log\",\n      \"name\": \"logpath\",\n      \"in\": \"path\",\n      \"required\": true\n     }\n    ]\n   },\n   \"/version/\": {\n    \"get\": {\n     \"description\": \"get the code version\",\n     \"consumes\": [\n      \"application/json\"\n     ],\n     \"produces\": [\n      \"application/json\"\n     ],\n     \"schemes\": [\n      \"https\"\n     ],\n     \"tags\": [\n      \"version\"\n     ],\n     \"operationId\": \"getCodeVersion\",\n     \"responses\": {\n      \"200\": {\n       \"description\": \"OK\",\n       \"schema\": {\n        \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.version.Info\"\n       }\n      },\n      \"401\": {\n       \"description\": \"Unauthorized\"\n      }\n     }\n    }\n   }\n  },\n  \"definitions\": {\n   \"io.k8s.apimachinery.pkg.api.resource.Quantity\": {\n    \"type\": \"string\"\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\": {\n    \"description\": \"APIGroup contains the name, the supported versions, and the preferred version of a group.\",\n    \"required\": [\n     \"name\",\n     \"versions\",\n     \"serverAddressByClientCIDRs\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"name is the name of the group.\",\n      \"type\": \"string\"\n     },\n     \"preferredVersion\": {\n      \"description\": \"preferredVersion is the version preferred by the API server, which probably is the storage version.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery\"\n     },\n     \"serverAddressByClientCIDRs\": {\n      \"description\": \"a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR\"\n      }\n     },\n     \"versions\": {\n      \"description\": \"versions are the versions supported in this group.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery\"\n      }\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.APIGroupList\": {\n    \"description\": \"APIGroupList is a list of APIGroup, to allow clients to discover the API at /apis.\",\n    \"required\": [\n     \"groups\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"groups\": {\n      \"description\": \"groups is a list of APIGroup.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.APIResource\": {\n    \"description\": \"APIResource specifies the name of a resource and whether it is namespaced.\",\n    \"required\": [\n     \"name\",\n     \"singularName\",\n     \"namespaced\",\n     \"kind\",\n     \"verbs\"\n    ],\n    \"properties\": {\n     \"categories\": {\n      \"description\": \"categories is a list of the grouped resources this resource belongs to (e.g. 'all')\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo')\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"name is the plural name of the resource.\",\n      \"type\": \"string\"\n     },\n     \"namespaced\": {\n      \"description\": \"namespaced indicates if a resource is namespaced or not.\",\n      \"type\": \"boolean\"\n     },\n     \"shortNames\": {\n      \"description\": \"shortNames is a list of suggested short names of the resource.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"singularName\": {\n      \"description\": \"singularName is the singular name of the resource.  This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.\",\n      \"type\": \"string\"\n     },\n     \"verbs\": {\n      \"description\": \"verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList\": {\n    \"description\": \"APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.\",\n    \"required\": [\n     \"groupVersion\",\n     \"resources\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"groupVersion\": {\n      \"description\": \"groupVersion is the group and version this APIResourceList is for.\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"resources\": {\n      \"description\": \"resources contains the name of the resources and if they are namespaced.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResource\"\n      }\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.APIVersions\": {\n    \"description\": \"APIVersions lists the versions that are available, to allow clients to discover the API at /api, which is the root path of the legacy v1 API.\",\n    \"required\": [\n     \"versions\",\n     \"serverAddressByClientCIDRs\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"serverAddressByClientCIDRs\": {\n      \"description\": \"a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR\"\n      }\n     },\n     \"versions\": {\n      \"description\": \"versions are the api versions that are available.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\": {\n    \"description\": \"DeleteOptions may be provided when deleting an API object.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"gracePeriodSeconds\": {\n      \"description\": \"The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"orphanDependents\": {\n      \"description\": \"Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \\\"orphan\\\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.\",\n      \"type\": \"boolean\"\n     },\n     \"preconditions\": {\n      \"description\": \"Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions\"\n     },\n     \"propagationPolicy\": {\n      \"description\": \"Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery\": {\n    \"description\": \"GroupVersion contains the \\\"group/version\\\" and \\\"version\\\" string of a version. It is made a struct to keep extensibility.\",\n    \"required\": [\n     \"groupVersion\",\n     \"version\"\n    ],\n    \"properties\": {\n     \"groupVersion\": {\n      \"description\": \"groupVersion specifies the API group and version in the form \\\"group/version\\\"\",\n      \"type\": \"string\"\n     },\n     \"version\": {\n      \"description\": \"version specifies the version in the form of \\\"version\\\". This is to save the clients the trouble of splitting the GroupVersion.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.Initializer\": {\n    \"description\": \"Initializer is information about an initializer that has not yet completed.\",\n    \"required\": [\n     \"name\"\n    ],\n    \"properties\": {\n     \"name\": {\n      \"description\": \"name of the process that is responsible for initializing this object.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.Initializers\": {\n    \"description\": \"Initializers tracks the progress of initialization.\",\n    \"required\": [\n     \"pending\"\n    ],\n    \"properties\": {\n     \"pending\": {\n      \"description\": \"Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Initializer\"\n      }\n     },\n     \"result\": {\n      \"description\": \"If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\": {\n    \"description\": \"A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.\",\n    \"properties\": {\n     \"matchExpressions\": {\n      \"description\": \"matchExpressions is a list of label selector requirements. The requirements are ANDed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirement\"\n      }\n     },\n     \"matchLabels\": {\n      \"description\": \"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \\\"key\\\", the operator is \\\"In\\\", and the values array contains only \\\"value\\\". The requirements are ANDed.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirement\": {\n    \"description\": \"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.\",\n    \"required\": [\n     \"key\",\n     \"operator\"\n    ],\n    \"properties\": {\n     \"key\": {\n      \"description\": \"key is the label key that the selector applies to.\",\n      \"type\": \"string\",\n      \"x-kubernetes-patch-merge-key\": \"key\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"operator\": {\n      \"description\": \"operator represents a key's relationship to a set of values. Valid operators ard In, NotIn, Exists and DoesNotExist.\",\n      \"type\": \"string\"\n     },\n     \"values\": {\n      \"description\": \"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\": {\n    \"description\": \"ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.\",\n    \"properties\": {\n     \"resourceVersion\": {\n      \"description\": \"String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\",\n      \"type\": \"string\"\n     },\n     \"selfLink\": {\n      \"description\": \"SelfLink is a URL representing this object. Populated by the system. Read-only.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\": {\n    \"description\": \"ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.\",\n    \"properties\": {\n     \"annotations\": {\n      \"description\": \"Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"clusterName\": {\n      \"description\": \"The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.\",\n      \"type\": \"string\"\n     },\n     \"creationTimestamp\": {\n      \"description\": \"CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\\n\\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"deletionGracePeriodSeconds\": {\n      \"description\": \"Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"deletionTimestamp\": {\n      \"description\": \"DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field. Once set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\\n\\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"finalizers\": {\n      \"description\": \"Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      },\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"generateName\": {\n      \"description\": \"GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\\n\\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\\n\\nApplied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency\",\n      \"type\": \"string\"\n     },\n     \"generation\": {\n      \"description\": \"A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"initializers\": {\n      \"description\": \"An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\\n\\nWhen an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Initializers\"\n     },\n     \"labels\": {\n      \"description\": \"Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"name\": {\n      \"description\": \"Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names\",\n      \"type\": \"string\"\n     },\n     \"namespace\": {\n      \"description\": \"Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \\\"default\\\" namespace, but \\\"default\\\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\\n\\nMust be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces\",\n      \"type\": \"string\"\n     },\n     \"ownerReferences\": {\n      \"description\": \"List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReference\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"uid\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"resourceVersion\": {\n      \"description\": \"An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\\n\\nPopulated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\",\n      \"type\": \"string\"\n     },\n     \"selfLink\": {\n      \"description\": \"SelfLink is a URL representing this object. Populated by the system. Read-only.\",\n      \"type\": \"string\"\n     },\n     \"uid\": {\n      \"description\": \"UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\\n\\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReference\": {\n    \"description\": \"OwnerReference contains enough information to let you identify an owning object. Currently, an owning object must be in the same namespace, so there is no namespace field.\",\n    \"required\": [\n     \"apiVersion\",\n     \"kind\",\n     \"name\",\n     \"uid\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"API version of the referent.\",\n      \"type\": \"string\"\n     },\n     \"blockOwnerDeletion\": {\n      \"description\": \"If true, AND if the owner has the \\\"foregroundDeletion\\\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \\\"delete\\\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.\",\n      \"type\": \"boolean\"\n     },\n     \"controller\": {\n      \"description\": \"If true, this reference points to the managing controller.\",\n      \"type\": \"boolean\"\n     },\n     \"kind\": {\n      \"description\": \"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names\",\n      \"type\": \"string\"\n     },\n     \"uid\": {\n      \"description\": \"UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.Patch\": {\n    \"description\": \"Patch is provided to give a concrete name and type to the Kubernetes PATCH request body.\"\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions\": {\n    \"description\": \"Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.\",\n    \"properties\": {\n     \"uid\": {\n      \"description\": \"Specifies the target UID.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.ServerAddressByClientCIDR\": {\n    \"description\": \"ServerAddressByClientCIDR helps the client to determine the server address that they should use, depending on the clientCIDR that they match.\",\n    \"required\": [\n     \"clientCIDR\",\n     \"serverAddress\"\n    ],\n    \"properties\": {\n     \"clientCIDR\": {\n      \"description\": \"The CIDR with which clients can match their IP to figure out the server address that they should use.\",\n      \"type\": \"string\"\n     },\n     \"serverAddress\": {\n      \"description\": \"Address of this server, suitable for a client that matches the above CIDR. This can be a hostname, hostname:port, IP or IP:port.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.Status\": {\n    \"description\": \"Status is a return value for calls that don't return other objects.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"code\": {\n      \"description\": \"Suggested HTTP return code for this status, 0 if not set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"details\": {\n      \"description\": \"Extended data associated with the reason.  Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusDetails\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"message\": {\n      \"description\": \"A human-readable description of the status of this operation.\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     },\n     \"reason\": {\n      \"description\": \"A machine-readable description of why this operation is in the \\\"Failure\\\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the operation. One of: \\\"Success\\\" or \\\"Failure\\\". More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.StatusCause\": {\n    \"description\": \"StatusCause provides more information about an api.Status failure, including cases when multiple errors are encountered.\",\n    \"properties\": {\n     \"field\": {\n      \"description\": \"The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed.  Fields may appear more than once in an array of causes due to fields having multiple errors. Optional.\\n\\nExamples:\\n  \\\"name\\\" - the field \\\"name\\\" on the current resource\\n  \\\"items[0].name\\\" - the field \\\"name\\\" on the first array entry in \\\"items\\\"\",\n      \"type\": \"string\"\n     },\n     \"message\": {\n      \"description\": \"A human-readable description of the cause of the error.  This field may be presented as-is to a reader.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"A machine-readable description of the cause of the error. If this value is empty there is no information available.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.StatusDetails\": {\n    \"description\": \"StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.\",\n    \"properties\": {\n     \"causes\": {\n      \"description\": \"The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.StatusCause\"\n      }\n     },\n     \"group\": {\n      \"description\": \"The group attribute of the resource associated with the status StatusReason.\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).\",\n      \"type\": \"string\"\n     },\n     \"retryAfterSeconds\": {\n      \"description\": \"If specified, the time in seconds before the operation should be retried.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"uid\": {\n      \"description\": \"UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.Time\": {\n    \"type\": \"string\",\n    \"format\": \"date-time\"\n   },\n   \"io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent\": {\n    \"description\": \"Event represents a single event to a watched resource.\",\n    \"required\": [\n     \"type\",\n     \"object\"\n    ],\n    \"properties\": {\n     \"object\": {\n      \"description\": \"Object is:\\n * If Type is Added or Modified: the new state of the object.\\n * If Type is Deleted: the state of the object immediately before deletion.\\n * If Type is Error: *Status is recommended; other types may make sense\\n   depending on context.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.runtime.RawExtension\"\n     },\n     \"type\": {\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.runtime.RawExtension\": {\n    \"description\": \"RawExtension is used to hold extensions in external versions.\\n\\nTo use this, make a field which has RawExtension as its type in your external, versioned struct, and Object in your internal struct. You also need to register your various plugin types.\\n\\n// Internal package: type MyAPIObject struct {\\n\\truntime.TypeMeta `json:\\\",inline\\\"`\\n\\tMyPlugin runtime.Object `json:\\\"myPlugin\\\"`\\n} type PluginA struct {\\n\\tAOption string `json:\\\"aOption\\\"`\\n}\\n\\n// External package: type MyAPIObject struct {\\n\\truntime.TypeMeta `json:\\\",inline\\\"`\\n\\tMyPlugin runtime.RawExtension `json:\\\"myPlugin\\\"`\\n} type PluginA struct {\\n\\tAOption string `json:\\\"aOption\\\"`\\n}\\n\\n// On the wire, the JSON will look something like this: {\\n\\t\\\"kind\\\":\\\"MyAPIObject\\\",\\n\\t\\\"apiVersion\\\":\\\"v1\\\",\\n\\t\\\"myPlugin\\\": {\\n\\t\\t\\\"kind\\\":\\\"PluginA\\\",\\n\\t\\t\\\"aOption\\\":\\\"foo\\\",\\n\\t},\\n}\\n\\nSo what happens? Decode first uses json or yaml to unmarshal the serialized data into your external MyAPIObject. That causes the raw JSON to be stored, but not unpacked. The next step is to copy (using pkg/conversion) into the internal struct. The runtime package's DefaultScheme has conversion functions installed which will unpack the JSON stored in RawExtension, turning it into the correct object type, and storing it in the Object. (TODO: In the case where the object is of an unknown type, a runtime.Unknown object will be created and stored.)\",\n    \"required\": [\n     \"Raw\"\n    ],\n    \"properties\": {\n     \"Raw\": {\n      \"description\": \"Raw is the underlying serialization of this object.\",\n      \"type\": \"string\",\n      \"format\": \"byte\"\n     }\n    }\n   },\n   \"io.k8s.apimachinery.pkg.util.intstr.IntOrString\": {\n    \"type\": \"string\",\n    \"format\": \"int-or-string\"\n   },\n   \"io.k8s.apimachinery.pkg.version.Info\": {\n    \"description\": \"Info contains versioning information. how we'll want to distribute that information.\",\n    \"required\": [\n     \"major\",\n     \"minor\",\n     \"gitVersion\",\n     \"gitCommit\",\n     \"gitTreeState\",\n     \"buildDate\",\n     \"goVersion\",\n     \"compiler\",\n     \"platform\"\n    ],\n    \"properties\": {\n     \"buildDate\": {\n      \"type\": \"string\"\n     },\n     \"compiler\": {\n      \"type\": \"string\"\n     },\n     \"gitCommit\": {\n      \"type\": \"string\"\n     },\n     \"gitTreeState\": {\n      \"type\": \"string\"\n     },\n     \"gitVersion\": {\n      \"type\": \"string\"\n     },\n     \"goVersion\": {\n      \"type\": \"string\"\n     },\n     \"major\": {\n      \"type\": \"string\"\n     },\n     \"minor\": {\n      \"type\": \"string\"\n     },\n     \"platform\": {\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\": {\n    \"description\": \"APIService represents a server for a particular GroupVersion. Name must be \\\"version.group\\\".\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec contains information for locating and communicating with a server\",\n      \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status contains derived information about an API server\",\n      \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceStatus\"\n     }\n    }\n   },\n   \"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceCondition\": {\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"Human-readable message indicating details about last transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"Unique, one-word, CamelCase reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status is the status of the condition. Can be True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type is the type of the condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceList\": {\n    \"description\": \"APIServiceList is a list of APIService objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIService\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    }\n   },\n   \"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceSpec\": {\n    \"description\": \"APIServiceSpec contains information for locating and communicating with a server. Only https is supported, though you are able to disable certificate verification.\",\n    \"required\": [\n     \"service\",\n     \"caBundle\",\n     \"groupPriorityMinimum\",\n     \"versionPriority\"\n    ],\n    \"properties\": {\n     \"caBundle\": {\n      \"description\": \"CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate.\",\n      \"type\": \"string\",\n      \"format\": \"byte\"\n     },\n     \"group\": {\n      \"description\": \"Group is the API group name this server hosts\",\n      \"type\": \"string\"\n     },\n     \"groupPriorityMinimum\": {\n      \"description\": \"GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is prefered by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object.  (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"insecureSkipTLSVerify\": {\n      \"description\": \"InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged.  You should use the CABundle instead.\",\n      \"type\": \"boolean\"\n     },\n     \"service\": {\n      \"description\": \"Service is a reference to the service for this API server.  It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled.\",\n      \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.ServiceReference\"\n     },\n     \"version\": {\n      \"description\": \"Version is the API version this server hosts.  For example, \\\"v1\\\"\",\n      \"type\": \"string\"\n     },\n     \"versionPriority\": {\n      \"description\": \"VersionPriority controls the ordering of this API version inside of its group.  Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object.  (v1.bar before v1.foo) Since it's inside of a group, the number can be small, probably in the 10s.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceStatus\": {\n    \"description\": \"APIServiceStatus contains derived information about an API server\",\n    \"properties\": {\n     \"conditions\": {\n      \"description\": \"Current service state of apiService.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.APIServiceCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     }\n    }\n   },\n   \"io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.ServiceReference\": {\n    \"description\": \"ServiceReference holds a reference to Service.legacy.k8s.io\",\n    \"properties\": {\n     \"name\": {\n      \"description\": \"Name is the name of the service\",\n      \"type\": \"string\"\n     },\n     \"namespace\": {\n      \"description\": \"Namespace is the namespace of the service\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.AWSElasticBlockStoreVolumeSource\": {\n    \"description\": \"Represents a Persistent Disk resource in AWS.\\n\\nAn AWS EBS disk must exist before mounting to a container. The disk must also be in the same AWS zone as the kubelet. An AWS EBS disk can only be mounted as read/write once. AWS EBS volumes support ownership management and SELinux relabeling.\",\n    \"required\": [\n     \"volumeID\"\n    ],\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\",\n      \"type\": \"string\"\n     },\n     \"partition\": {\n      \"description\": \"The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \\\"1\\\". Similarly, the volume partition for /dev/sda is \\\"0\\\" (or you can leave the property empty).\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"readOnly\": {\n      \"description\": \"Specify \\\"true\\\" to force and set the ReadOnly property in VolumeMounts to \\\"true\\\". If omitted, the default is \\\"false\\\". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\",\n      \"type\": \"boolean\"\n     },\n     \"volumeID\": {\n      \"description\": \"Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Affinity\": {\n    \"description\": \"Affinity is a group of affinity scheduling rules.\",\n    \"properties\": {\n     \"nodeAffinity\": {\n      \"description\": \"Describes node affinity scheduling rules for the pod.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeAffinity\"\n     },\n     \"podAffinity\": {\n      \"description\": \"Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodAffinity\"\n     },\n     \"podAntiAffinity\": {\n      \"description\": \"Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodAntiAffinity\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.AttachedVolume\": {\n    \"description\": \"AttachedVolume describes a volume attached to a node\",\n    \"required\": [\n     \"name\",\n     \"devicePath\"\n    ],\n    \"properties\": {\n     \"devicePath\": {\n      \"description\": \"DevicePath represents the device path where the volume should be available\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name of the attached volume\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.AzureDiskVolumeSource\": {\n    \"description\": \"AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.\",\n    \"required\": [\n     \"diskName\",\n     \"diskURI\"\n    ],\n    \"properties\": {\n     \"cachingMode\": {\n      \"description\": \"Host Caching mode: None, Read Only, Read Write.\",\n      \"type\": \"string\"\n     },\n     \"diskName\": {\n      \"description\": \"The Name of the data disk in the blob storage\",\n      \"type\": \"string\"\n     },\n     \"diskURI\": {\n      \"description\": \"The URI the data disk in the blob storage\",\n      \"type\": \"string\"\n     },\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified.\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Expected values Shared: mulitple blob disks per storage account  Dedicated: single blob disk per storage account  Managed: azure managed data disk (only in managed availability set). defaults to shared\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.AzureFileVolumeSource\": {\n    \"description\": \"AzureFile represents an Azure File Service mount on the host and bind mount to the pod.\",\n    \"required\": [\n     \"secretName\",\n     \"shareName\"\n    ],\n    \"properties\": {\n     \"readOnly\": {\n      \"description\": \"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\",\n      \"type\": \"boolean\"\n     },\n     \"secretName\": {\n      \"description\": \"the name of secret that contains Azure Storage Account Name and Key\",\n      \"type\": \"string\"\n     },\n     \"shareName\": {\n      \"description\": \"Share Name\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Binding\": {\n    \"description\": \"Binding ties one object to another; for example, a pod is bound to a node by a scheduler. Deprecated in 1.7, please use the bindings subresource of pods instead.\",\n    \"required\": [\n     \"target\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"target\": {\n      \"description\": \"The target object that you want to bind to the standard object.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ObjectReference\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Binding\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Capabilities\": {\n    \"description\": \"Adds and removes POSIX capabilities from running containers.\",\n    \"properties\": {\n     \"add\": {\n      \"description\": \"Added capabilities\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"drop\": {\n      \"description\": \"Removed capabilities\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.CephFSVolumeSource\": {\n    \"description\": \"Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.\",\n    \"required\": [\n     \"monitors\"\n    ],\n    \"properties\": {\n     \"monitors\": {\n      \"description\": \"Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"path\": {\n      \"description\": \"Optional: Used as the mounted root, rather than the full Ceph tree, default is /\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\",\n      \"type\": \"boolean\"\n     },\n     \"secretFile\": {\n      \"description\": \"Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\",\n      \"type\": \"string\"\n     },\n     \"secretRef\": {\n      \"description\": \"Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LocalObjectReference\"\n     },\n     \"user\": {\n      \"description\": \"Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.CinderVolumeSource\": {\n    \"description\": \"Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.\",\n    \"required\": [\n     \"volumeID\"\n    ],\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\",\n      \"type\": \"boolean\"\n     },\n     \"volumeID\": {\n      \"description\": \"volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ComponentCondition\": {\n    \"description\": \"Information about the condition of a component.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"error\": {\n      \"description\": \"Condition error code for a component. For example, a health check error code.\",\n      \"type\": \"string\"\n     },\n     \"message\": {\n      \"description\": \"Message about the condition for a component. For example, information about a health check.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition for a component. Valid values for \\\"Healthy\\\": \\\"True\\\", \\\"False\\\", or \\\"Unknown\\\".\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of condition for a component. Valid value: \\\"Healthy\\\"\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ComponentStatus\": {\n    \"description\": \"ComponentStatus (and ComponentStatusList) holds the cluster validation info.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"conditions\": {\n      \"description\": \"List of component conditions observed\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ComponentCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ComponentStatus\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ComponentStatusList\": {\n    \"description\": \"Status of all the conditions for the component as a list of ComponentStatus objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of ComponentStatus objects.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ComponentStatus\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ComponentStatusList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ConfigMap\": {\n    \"description\": \"ConfigMap holds configuration data for pods to consume.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"data\": {\n      \"description\": \"Data contains the configuration data. Each key must consist of alphanumeric characters, '-', '_' or '.'.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ConfigMap\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ConfigMapEnvSource\": {\n    \"description\": \"ConfigMapEnvSource selects a ConfigMap to populate the environment variables with.\\n\\nThe contents of the target ConfigMap's Data field will represent the key-value pairs as environment variables.\",\n    \"properties\": {\n     \"name\": {\n      \"description\": \"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\n      \"type\": \"string\"\n     },\n     \"optional\": {\n      \"description\": \"Specify whether the ConfigMap must be defined\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ConfigMapKeySelector\": {\n    \"description\": \"Selects a key from a ConfigMap.\",\n    \"required\": [\n     \"key\"\n    ],\n    \"properties\": {\n     \"key\": {\n      \"description\": \"The key to select.\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\n      \"type\": \"string\"\n     },\n     \"optional\": {\n      \"description\": \"Specify whether the ConfigMap or it's key must be defined\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ConfigMapList\": {\n    \"description\": \"ConfigMapList is a resource containing a list of ConfigMap objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of ConfigMaps.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMap\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ConfigMapList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ConfigMapProjection\": {\n    \"description\": \"Adapts a ConfigMap into a projected volume.\\n\\nThe contents of the target ConfigMap's Data field will be presented in a projected volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. Note that this is identical to a configmap volume source without the default mode.\",\n    \"properties\": {\n     \"items\": {\n      \"description\": \"If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.KeyToPath\"\n      }\n     },\n     \"name\": {\n      \"description\": \"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\n      \"type\": \"string\"\n     },\n     \"optional\": {\n      \"description\": \"Specify whether the ConfigMap or it's keys must be defined\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ConfigMapVolumeSource\": {\n    \"description\": \"Adapts a ConfigMap into a volume.\\n\\nThe contents of the target ConfigMap's Data field will be presented in a volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. ConfigMap volumes support ownership management and SELinux relabeling.\",\n    \"properties\": {\n     \"defaultMode\": {\n      \"description\": \"Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"items\": {\n      \"description\": \"If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.KeyToPath\"\n      }\n     },\n     \"name\": {\n      \"description\": \"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\n      \"type\": \"string\"\n     },\n     \"optional\": {\n      \"description\": \"Specify whether the ConfigMap or it's keys must be defined\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Container\": {\n    \"description\": \"A single application container that you want to run within a pod.\",\n    \"required\": [\n     \"name\",\n     \"image\"\n    ],\n    \"properties\": {\n     \"args\": {\n      \"description\": \"Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"command\": {\n      \"description\": \"Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"env\": {\n      \"description\": \"List of environment variables to set in the container. Cannot be updated.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.EnvVar\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"name\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"envFrom\": {\n      \"description\": \"List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.EnvFromSource\"\n      }\n     },\n     \"image\": {\n      \"description\": \"Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images\",\n      \"type\": \"string\"\n     },\n     \"imagePullPolicy\": {\n      \"description\": \"Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images\",\n      \"type\": \"string\"\n     },\n     \"lifecycle\": {\n      \"description\": \"Actions that the management system should take in response to container lifecycle events. Cannot be updated.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Lifecycle\"\n     },\n     \"livenessProbe\": {\n      \"description\": \"Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Probe\"\n     },\n     \"name\": {\n      \"description\": \"Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated.\",\n      \"type\": \"string\"\n     },\n     \"ports\": {\n      \"description\": \"List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default \\\"0.0.0.0\\\" address inside a container will be accessible from the network. Cannot be updated.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ContainerPort\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"containerPort\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"readinessProbe\": {\n      \"description\": \"Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Probe\"\n     },\n     \"resources\": {\n      \"description\": \"Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceRequirements\"\n     },\n     \"securityContext\": {\n      \"description\": \"Security options the pod should run with. More info: https://kubernetes.io/docs/concepts/policy/security-context/ More info: https://git.k8s.io/community/contributors/design-proposals/security_context.md\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.SecurityContext\"\n     },\n     \"stdin\": {\n      \"description\": \"Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false.\",\n      \"type\": \"boolean\"\n     },\n     \"stdinOnce\": {\n      \"description\": \"Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false\",\n      \"type\": \"boolean\"\n     },\n     \"terminationMessagePath\": {\n      \"description\": \"Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.\",\n      \"type\": \"string\"\n     },\n     \"terminationMessagePolicy\": {\n      \"description\": \"Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.\",\n      \"type\": \"string\"\n     },\n     \"tty\": {\n      \"description\": \"Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false.\",\n      \"type\": \"boolean\"\n     },\n     \"volumeMounts\": {\n      \"description\": \"Pod volumes to mount into the container's filesystem. Cannot be updated.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.VolumeMount\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"mountPath\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"workingDir\": {\n      \"description\": \"Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image. Cannot be updated.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ContainerImage\": {\n    \"description\": \"Describe a container image\",\n    \"required\": [\n     \"names\"\n    ],\n    \"properties\": {\n     \"names\": {\n      \"description\": \"Names by which this image is known. e.g. [\\\"gcr.io/google_containers/hyperkube:v1.0.7\\\", \\\"dockerhub.io/google_containers/hyperkube:v1.0.7\\\"]\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"sizeBytes\": {\n      \"description\": \"The size of the image in bytes.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ContainerPort\": {\n    \"description\": \"ContainerPort represents a network port in a single container.\",\n    \"required\": [\n     \"containerPort\"\n    ],\n    \"properties\": {\n     \"containerPort\": {\n      \"description\": \"Number of port to expose on the pod's IP address. This must be a valid port number, 0 \\u003c x \\u003c 65536.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"hostIP\": {\n      \"description\": \"What host IP to bind the external port to.\",\n      \"type\": \"string\"\n     },\n     \"hostPort\": {\n      \"description\": \"Number of port to expose on the host. If specified, this must be a valid port number, 0 \\u003c x \\u003c 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"name\": {\n      \"description\": \"If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.\",\n      \"type\": \"string\"\n     },\n     \"protocol\": {\n      \"description\": \"Protocol for port. Must be UDP or TCP. Defaults to \\\"TCP\\\".\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ContainerState\": {\n    \"description\": \"ContainerState holds a possible state of container. Only one of its members may be specified. If none of them is specified, the default one is ContainerStateWaiting.\",\n    \"properties\": {\n     \"running\": {\n      \"description\": \"Details about a running container\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ContainerStateRunning\"\n     },\n     \"terminated\": {\n      \"description\": \"Details about a terminated container\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ContainerStateTerminated\"\n     },\n     \"waiting\": {\n      \"description\": \"Details about a waiting container\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ContainerStateWaiting\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ContainerStateRunning\": {\n    \"description\": \"ContainerStateRunning is a running state of a container.\",\n    \"properties\": {\n     \"startedAt\": {\n      \"description\": \"Time at which the container was last (re-)started\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ContainerStateTerminated\": {\n    \"description\": \"ContainerStateTerminated is a terminated state of a container.\",\n    \"required\": [\n     \"exitCode\"\n    ],\n    \"properties\": {\n     \"containerID\": {\n      \"description\": \"Container's ID in the format 'docker://\\u003ccontainer_id\\u003e'\",\n      \"type\": \"string\"\n     },\n     \"exitCode\": {\n      \"description\": \"Exit status from the last termination of the container\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"finishedAt\": {\n      \"description\": \"Time at which the container last terminated\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"Message regarding the last termination of the container\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"(brief) reason from the last termination of the container\",\n      \"type\": \"string\"\n     },\n     \"signal\": {\n      \"description\": \"Signal from the last termination of the container\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"startedAt\": {\n      \"description\": \"Time at which previous execution of the container started\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ContainerStateWaiting\": {\n    \"description\": \"ContainerStateWaiting is a waiting state of a container.\",\n    \"properties\": {\n     \"message\": {\n      \"description\": \"Message regarding why the container is not yet running.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"(brief) reason the container is not yet running.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ContainerStatus\": {\n    \"description\": \"ContainerStatus contains details for the current status of this container.\",\n    \"required\": [\n     \"name\",\n     \"ready\",\n     \"restartCount\",\n     \"image\",\n     \"imageID\"\n    ],\n    \"properties\": {\n     \"containerID\": {\n      \"description\": \"Container's ID in the format 'docker://\\u003ccontainer_id\\u003e'.\",\n      \"type\": \"string\"\n     },\n     \"image\": {\n      \"description\": \"The image the container is running. More info: https://kubernetes.io/docs/concepts/containers/images\",\n      \"type\": \"string\"\n     },\n     \"imageID\": {\n      \"description\": \"ImageID of the container's image.\",\n      \"type\": \"string\"\n     },\n     \"lastState\": {\n      \"description\": \"Details about the container's last termination condition.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ContainerState\"\n     },\n     \"name\": {\n      \"description\": \"This must be a DNS_LABEL. Each container in a pod must have a unique name. Cannot be updated.\",\n      \"type\": \"string\"\n     },\n     \"ready\": {\n      \"description\": \"Specifies whether the container has passed its readiness probe.\",\n      \"type\": \"boolean\"\n     },\n     \"restartCount\": {\n      \"description\": \"The number of times the container has been restarted, currently based on the number of dead containers that have not yet been removed. Note that this is calculated from dead containers. But those containers are subject to garbage collection. This value will get capped at 5 by GC.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"state\": {\n      \"description\": \"Details about the container's current condition.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ContainerState\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.DaemonEndpoint\": {\n    \"description\": \"DaemonEndpoint contains information about a single Daemon endpoint.\",\n    \"required\": [\n     \"Port\"\n    ],\n    \"properties\": {\n     \"Port\": {\n      \"description\": \"Port number of the given endpoint.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.DownwardAPIProjection\": {\n    \"description\": \"Represents downward API info for projecting into a projected volume. Note that this is identical to a downwardAPI volume source without the default mode.\",\n    \"properties\": {\n     \"items\": {\n      \"description\": \"Items is a list of DownwardAPIVolume file\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.DownwardAPIVolumeFile\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.DownwardAPIVolumeFile\": {\n    \"description\": \"DownwardAPIVolumeFile represents information to create the file containing the pod field\",\n    \"required\": [\n     \"path\"\n    ],\n    \"properties\": {\n     \"fieldRef\": {\n      \"description\": \"Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ObjectFieldSelector\"\n     },\n     \"mode\": {\n      \"description\": \"Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"path\": {\n      \"description\": \"Required: Path is  the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'\",\n      \"type\": \"string\"\n     },\n     \"resourceFieldRef\": {\n      \"description\": \"Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceFieldSelector\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.DownwardAPIVolumeSource\": {\n    \"description\": \"DownwardAPIVolumeSource represents a volume containing downward API info. Downward API volumes support ownership management and SELinux relabeling.\",\n    \"properties\": {\n     \"defaultMode\": {\n      \"description\": \"Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of downward API volume file\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.DownwardAPIVolumeFile\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.EmptyDirVolumeSource\": {\n    \"description\": \"Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.\",\n    \"properties\": {\n     \"medium\": {\n      \"description\": \"What type of storage medium should back this directory. The default is \\\"\\\" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir\",\n      \"type\": \"string\"\n     },\n     \"sizeLimit\": {\n      \"description\": \"Total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.EndpointAddress\": {\n    \"description\": \"EndpointAddress is a tuple that describes single IP address.\",\n    \"required\": [\n     \"ip\"\n    ],\n    \"properties\": {\n     \"hostname\": {\n      \"description\": \"The Hostname of this endpoint\",\n      \"type\": \"string\"\n     },\n     \"ip\": {\n      \"description\": \"The IP of this endpoint. May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16), or link-local multicast ((224.0.0.0/24). IPv6 is also accepted but not fully supported on all platforms. Also, certain kubernetes components, like kube-proxy, are not IPv6 ready.\",\n      \"type\": \"string\"\n     },\n     \"nodeName\": {\n      \"description\": \"Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node.\",\n      \"type\": \"string\"\n     },\n     \"targetRef\": {\n      \"description\": \"Reference to object providing the endpoint.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ObjectReference\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.EndpointPort\": {\n    \"description\": \"EndpointPort is a tuple that describes a single port.\",\n    \"required\": [\n     \"port\"\n    ],\n    \"properties\": {\n     \"name\": {\n      \"description\": \"The name of this port (corresponds to ServicePort.Name). Must be a DNS_LABEL. Optional only if one port is defined.\",\n      \"type\": \"string\"\n     },\n     \"port\": {\n      \"description\": \"The port number of the endpoint.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"protocol\": {\n      \"description\": \"The IP protocol for this port. Must be UDP or TCP. Default is TCP.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.EndpointSubset\": {\n    \"description\": \"EndpointSubset is a group of addresses with a common set of ports. The expanded set of endpoints is the Cartesian product of Addresses x Ports. For example, given:\\n  {\\n    Addresses: [{\\\"ip\\\": \\\"10.10.1.1\\\"}, {\\\"ip\\\": \\\"10.10.2.2\\\"}],\\n    Ports:     [{\\\"name\\\": \\\"a\\\", \\\"port\\\": 8675}, {\\\"name\\\": \\\"b\\\", \\\"port\\\": 309}]\\n  }\\nThe resulting set of endpoints can be viewed as:\\n    a: [ 10.10.1.1:8675, 10.10.2.2:8675 ],\\n    b: [ 10.10.1.1:309, 10.10.2.2:309 ]\",\n    \"properties\": {\n     \"addresses\": {\n      \"description\": \"IP addresses which offer the related ports that are marked as ready. These endpoints should be considered safe for load balancers and clients to utilize.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.EndpointAddress\"\n      }\n     },\n     \"notReadyAddresses\": {\n      \"description\": \"IP addresses which offer the related ports but are not currently marked as ready because they have not yet finished starting, have recently failed a readiness check, or have recently failed a liveness check.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.EndpointAddress\"\n      }\n     },\n     \"ports\": {\n      \"description\": \"Port numbers available on the related IP addresses.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.EndpointPort\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Endpoints\": {\n    \"description\": \"Endpoints is a collection of endpoints that implement the actual service. Example:\\n  Name: \\\"mysvc\\\",\\n  Subsets: [\\n    {\\n      Addresses: [{\\\"ip\\\": \\\"10.10.1.1\\\"}, {\\\"ip\\\": \\\"10.10.2.2\\\"}],\\n      Ports: [{\\\"name\\\": \\\"a\\\", \\\"port\\\": 8675}, {\\\"name\\\": \\\"b\\\", \\\"port\\\": 309}]\\n    },\\n    {\\n      Addresses: [{\\\"ip\\\": \\\"10.10.3.3\\\"}],\\n      Ports: [{\\\"name\\\": \\\"a\\\", \\\"port\\\": 93}, {\\\"name\\\": \\\"b\\\", \\\"port\\\": 76}]\\n    },\\n ]\",\n    \"required\": [\n     \"subsets\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"subsets\": {\n      \"description\": \"The set of all endpoints is the union of all subsets. Addresses are placed into subsets according to the IPs they share. A single address with multiple ports, some of which are ready and some of which are not (because they come from different containers) will result in the address being displayed in different subsets for the different ports. No address will appear in both Addresses and NotReadyAddresses in the same subset. Sets of addresses and ports that comprise a service.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.EndpointSubset\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Endpoints\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.EndpointsList\": {\n    \"description\": \"EndpointsList is a list of endpoints.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of endpoints.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Endpoints\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"EndpointsList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.EnvFromSource\": {\n    \"description\": \"EnvFromSource represents the source of a set of ConfigMaps\",\n    \"properties\": {\n     \"configMapRef\": {\n      \"description\": \"The ConfigMap to select from\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMapEnvSource\"\n     },\n     \"prefix\": {\n      \"description\": \"An optional identifer to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.\",\n      \"type\": \"string\"\n     },\n     \"secretRef\": {\n      \"description\": \"The Secret to select from\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.SecretEnvSource\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.EnvVar\": {\n    \"description\": \"EnvVar represents an environment variable present in a Container.\",\n    \"required\": [\n     \"name\"\n    ],\n    \"properties\": {\n     \"name\": {\n      \"description\": \"Name of the environment variable. Must be a C_IDENTIFIER.\",\n      \"type\": \"string\"\n     },\n     \"value\": {\n      \"description\": \"Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to \\\"\\\".\",\n      \"type\": \"string\"\n     },\n     \"valueFrom\": {\n      \"description\": \"Source for the environment variable's value. Cannot be used if value is not empty.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.EnvVarSource\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.EnvVarSource\": {\n    \"description\": \"EnvVarSource represents a source for the value of an EnvVar.\",\n    \"properties\": {\n     \"configMapKeyRef\": {\n      \"description\": \"Selects a key of a ConfigMap.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMapKeySelector\"\n     },\n     \"fieldRef\": {\n      \"description\": \"Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ObjectFieldSelector\"\n     },\n     \"resourceFieldRef\": {\n      \"description\": \"Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceFieldSelector\"\n     },\n     \"secretKeyRef\": {\n      \"description\": \"Selects a key of a secret in the pod's namespace\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.SecretKeySelector\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Event\": {\n    \"description\": \"Event is a report of an event somewhere in the cluster.\",\n    \"required\": [\n     \"metadata\",\n     \"involvedObject\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"count\": {\n      \"description\": \"The number of times this event has occurred.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"firstTimestamp\": {\n      \"description\": \"The time at which the event was first recorded. (Time of server receipt is in TypeMeta.)\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"involvedObject\": {\n      \"description\": \"The object that this event is about.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ObjectReference\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"lastTimestamp\": {\n      \"description\": \"The time at which the most recent occurrence of this event was recorded.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"A human-readable description of the status of this operation.\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"reason\": {\n      \"description\": \"This should be a short, machine understandable string that gives the reason for the transition into the object's current status.\",\n      \"type\": \"string\"\n     },\n     \"source\": {\n      \"description\": \"The component reporting this event. Should be a short machine understandable string.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.EventSource\"\n     },\n     \"type\": {\n      \"description\": \"Type of this event (Normal, Warning), new types could be added in the future\",\n      \"type\": \"string\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Event\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.EventList\": {\n    \"description\": \"EventList is a list of events.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of events\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Event\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"EventList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.EventSource\": {\n    \"description\": \"EventSource contains information for an event.\",\n    \"properties\": {\n     \"component\": {\n      \"description\": \"Component from which the event is generated.\",\n      \"type\": \"string\"\n     },\n     \"host\": {\n      \"description\": \"Node name on which the event is generated.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ExecAction\": {\n    \"description\": \"ExecAction describes a \\\"run in container\\\" action.\",\n    \"properties\": {\n     \"command\": {\n      \"description\": \"Command is the command line to execute inside the container, the working directory for the command  is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.FCVolumeSource\": {\n    \"description\": \"Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.\",\n    \"required\": [\n     \"targetWWNs\",\n     \"lun\"\n    ],\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified.\",\n      \"type\": \"string\"\n     },\n     \"lun\": {\n      \"description\": \"Required: FC target lun number\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"readOnly\": {\n      \"description\": \"Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\",\n      \"type\": \"boolean\"\n     },\n     \"targetWWNs\": {\n      \"description\": \"Required: FC target worldwide names (WWNs)\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.FlexVolumeSource\": {\n    \"description\": \"FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.\",\n    \"required\": [\n     \"driver\"\n    ],\n    \"properties\": {\n     \"driver\": {\n      \"description\": \"Driver is the name of the driver to use for this volume.\",\n      \"type\": \"string\"\n     },\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". The default filesystem depends on FlexVolume script.\",\n      \"type\": \"string\"\n     },\n     \"options\": {\n      \"description\": \"Optional: Extra command options if any.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"readOnly\": {\n      \"description\": \"Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\",\n      \"type\": \"boolean\"\n     },\n     \"secretRef\": {\n      \"description\": \"Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LocalObjectReference\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.FlockerVolumeSource\": {\n    \"description\": \"Represents a Flocker volume mounted by the Flocker agent. One and only one of datasetName and datasetUUID should be set. Flocker volumes do not support ownership management or SELinux relabeling.\",\n    \"properties\": {\n     \"datasetName\": {\n      \"description\": \"Name of the dataset stored as metadata -\\u003e name on the dataset for Flocker should be considered as deprecated\",\n      \"type\": \"string\"\n     },\n     \"datasetUUID\": {\n      \"description\": \"UUID of the dataset. This is unique identifier of a Flocker dataset\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.GCEPersistentDiskVolumeSource\": {\n    \"description\": \"Represents a Persistent Disk resource in Google Compute Engine.\\n\\nA GCE PD must exist before mounting to a container. The disk must also be in the same GCE project and zone as the kubelet. A GCE PD can only be mounted as read/write once or read-only many times. GCE PDs support ownership management and SELinux relabeling.\",\n    \"required\": [\n     \"pdName\"\n    ],\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\",\n      \"type\": \"string\"\n     },\n     \"partition\": {\n      \"description\": \"The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \\\"1\\\". Similarly, the volume partition for /dev/sda is \\\"0\\\" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"pdName\": {\n      \"description\": \"Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.GitRepoVolumeSource\": {\n    \"description\": \"Represents a volume that is populated with the contents of a git repository. Git repo volumes do not support ownership management. Git repo volumes support SELinux relabeling.\",\n    \"required\": [\n     \"repository\"\n    ],\n    \"properties\": {\n     \"directory\": {\n      \"description\": \"Target directory name. Must not contain or start with '..'.  If '.' is supplied, the volume directory will be the git repository.  Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name.\",\n      \"type\": \"string\"\n     },\n     \"repository\": {\n      \"description\": \"Repository URL\",\n      \"type\": \"string\"\n     },\n     \"revision\": {\n      \"description\": \"Commit hash for the specified revision.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.GlusterfsVolumeSource\": {\n    \"description\": \"Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.\",\n    \"required\": [\n     \"endpoints\",\n     \"path\"\n    ],\n    \"properties\": {\n     \"endpoints\": {\n      \"description\": \"EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\",\n      \"type\": \"string\"\n     },\n     \"path\": {\n      \"description\": \"Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.HTTPGetAction\": {\n    \"description\": \"HTTPGetAction describes an action based on HTTP Get requests.\",\n    \"required\": [\n     \"port\"\n    ],\n    \"properties\": {\n     \"host\": {\n      \"description\": \"Host name to connect to, defaults to the pod IP. You probably want to set \\\"Host\\\" in httpHeaders instead.\",\n      \"type\": \"string\"\n     },\n     \"httpHeaders\": {\n      \"description\": \"Custom headers to set in the request. HTTP allows repeated headers.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.HTTPHeader\"\n      }\n     },\n     \"path\": {\n      \"description\": \"Path to access on the HTTP server.\",\n      \"type\": \"string\"\n     },\n     \"port\": {\n      \"description\": \"Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     },\n     \"scheme\": {\n      \"description\": \"Scheme to use for connecting to the host. Defaults to HTTP.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.HTTPHeader\": {\n    \"description\": \"HTTPHeader describes a custom header to be used in HTTP probes\",\n    \"required\": [\n     \"name\",\n     \"value\"\n    ],\n    \"properties\": {\n     \"name\": {\n      \"description\": \"The header field name\",\n      \"type\": \"string\"\n     },\n     \"value\": {\n      \"description\": \"The header field value\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Handler\": {\n    \"description\": \"Handler defines a specific action that should be taken\",\n    \"properties\": {\n     \"exec\": {\n      \"description\": \"One and only one of the following should be specified. Exec specifies the action to take.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ExecAction\"\n     },\n     \"httpGet\": {\n      \"description\": \"HTTPGet specifies the http request to perform.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.HTTPGetAction\"\n     },\n     \"tcpSocket\": {\n      \"description\": \"TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.TCPSocketAction\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.HostAlias\": {\n    \"description\": \"HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod's hosts file.\",\n    \"properties\": {\n     \"hostnames\": {\n      \"description\": \"Hostnames for the above IP address.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"ip\": {\n      \"description\": \"IP address of the host file entry.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.HostPathVolumeSource\": {\n    \"description\": \"Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.\",\n    \"required\": [\n     \"path\"\n    ],\n    \"properties\": {\n     \"path\": {\n      \"description\": \"Path of the directory on the host. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ISCSIVolumeSource\": {\n    \"description\": \"Represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.\",\n    \"required\": [\n     \"targetPortal\",\n     \"iqn\",\n     \"lun\"\n    ],\n    \"properties\": {\n     \"chapAuthDiscovery\": {\n      \"description\": \"whether support iSCSI Discovery CHAP authentication\",\n      \"type\": \"boolean\"\n     },\n     \"chapAuthSession\": {\n      \"description\": \"whether support iSCSI Session CHAP authentication\",\n      \"type\": \"boolean\"\n     },\n     \"fsType\": {\n      \"description\": \"Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi\",\n      \"type\": \"string\"\n     },\n     \"iqn\": {\n      \"description\": \"Target iSCSI Qualified Name.\",\n      \"type\": \"string\"\n     },\n     \"iscsiInterface\": {\n      \"description\": \"Optional: Defaults to 'default' (tcp). iSCSI interface name that uses an iSCSI transport.\",\n      \"type\": \"string\"\n     },\n     \"lun\": {\n      \"description\": \"iSCSI target lun number.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"portals\": {\n      \"description\": \"iSCSI target portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"readOnly\": {\n      \"description\": \"ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.\",\n      \"type\": \"boolean\"\n     },\n     \"secretRef\": {\n      \"description\": \"CHAP secret for iSCSI target and initiator authentication\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LocalObjectReference\"\n     },\n     \"targetPortal\": {\n      \"description\": \"iSCSI target portal. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.KeyToPath\": {\n    \"description\": \"Maps a string key to a path within a volume.\",\n    \"required\": [\n     \"key\",\n     \"path\"\n    ],\n    \"properties\": {\n     \"key\": {\n      \"description\": \"The key to project.\",\n      \"type\": \"string\"\n     },\n     \"mode\": {\n      \"description\": \"Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"path\": {\n      \"description\": \"The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Lifecycle\": {\n    \"description\": \"Lifecycle describes actions that the management system should take in response to container lifecycle events. For the PostStart and PreStop lifecycle handlers, management of the container blocks until the action is complete, unless the container process fails, in which case the handler is aborted.\",\n    \"properties\": {\n     \"postStart\": {\n      \"description\": \"PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Handler\"\n     },\n     \"preStop\": {\n      \"description\": \"PreStop is called immediately before a container is terminated. The container is terminated after the handler completes. The reason for termination is passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Handler\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.LimitRange\": {\n    \"description\": \"LimitRange sets resource usage limits for each kind of resource in a Namespace.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the limits enforced. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRangeSpec\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"LimitRange\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.LimitRangeItem\": {\n    \"description\": \"LimitRangeItem defines a min/max usage limit for any resource that matches on kind.\",\n    \"properties\": {\n     \"default\": {\n      \"description\": \"Default resource requirement limit value by resource name if resource limit is omitted.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"defaultRequest\": {\n      \"description\": \"DefaultRequest is the default resource requirement request value by resource name if resource request is omitted.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"max\": {\n      \"description\": \"Max usage constraints on this kind by resource name.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"maxLimitRequestRatio\": {\n      \"description\": \"MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"min\": {\n      \"description\": \"Min usage constraints on this kind by resource name.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"type\": {\n      \"description\": \"Type of resource that this limit applies to.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.LimitRangeList\": {\n    \"description\": \"LimitRangeList is a list of LimitRange items.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of LimitRange objects. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_limit_range.md\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRange\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"LimitRangeList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.LimitRangeSpec\": {\n    \"description\": \"LimitRangeSpec defines a min/max usage limit for resources that match on kind.\",\n    \"required\": [\n     \"limits\"\n    ],\n    \"properties\": {\n     \"limits\": {\n      \"description\": \"Limits is the list of LimitRangeItem objects that are enforced.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LimitRangeItem\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.LoadBalancerIngress\": {\n    \"description\": \"LoadBalancerIngress represents the status of a load-balancer ingress point: traffic intended for the service should be sent to an ingress point.\",\n    \"properties\": {\n     \"hostname\": {\n      \"description\": \"Hostname is set for load-balancer ingress points that are DNS based (typically AWS load-balancers)\",\n      \"type\": \"string\"\n     },\n     \"ip\": {\n      \"description\": \"IP is set for load-balancer ingress points that are IP based (typically GCE or OpenStack load-balancers)\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.LoadBalancerStatus\": {\n    \"description\": \"LoadBalancerStatus represents the status of a load-balancer.\",\n    \"properties\": {\n     \"ingress\": {\n      \"description\": \"Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LoadBalancerIngress\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.LocalObjectReference\": {\n    \"description\": \"LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.\",\n    \"properties\": {\n     \"name\": {\n      \"description\": \"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.LocalVolumeSource\": {\n    \"description\": \"Local represents directly-attached storage with node affinity\",\n    \"required\": [\n     \"path\"\n    ],\n    \"properties\": {\n     \"path\": {\n      \"description\": \"The full path to the volume on the node For alpha, this path must be a directory Once block as a source is supported, then this path can point to a block device\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NFSVolumeSource\": {\n    \"description\": \"Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling.\",\n    \"required\": [\n     \"server\",\n     \"path\"\n    ],\n    \"properties\": {\n     \"path\": {\n      \"description\": \"Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\",\n      \"type\": \"boolean\"\n     },\n     \"server\": {\n      \"description\": \"Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Namespace\": {\n    \"description\": \"Namespace provides a scope for Names. Use of multiple namespaces is optional.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the behavior of the Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.NamespaceSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status describes the current status of a Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.NamespaceStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Namespace\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NamespaceList\": {\n    \"description\": \"NamespaceList is a list of Namespaces.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of Namespace objects in the list. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Namespace\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"NamespaceList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NamespaceSpec\": {\n    \"description\": \"NamespaceSpec describes the attributes on a Namespace.\",\n    \"properties\": {\n     \"finalizers\": {\n      \"description\": \"Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://git.k8s.io/community/contributors/design-proposals/namespaces.md#finalizers\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NamespaceStatus\": {\n    \"description\": \"NamespaceStatus is information about the current status of a Namespace.\",\n    \"properties\": {\n     \"phase\": {\n      \"description\": \"Phase is the current lifecycle phase of the namespace. More info: https://git.k8s.io/community/contributors/design-proposals/namespaces.md#phases\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Node\": {\n    \"description\": \"Node is a worker node in Kubernetes. Each node will have a unique identifier in the cache (i.e. in etcd).\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the behavior of a node. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeSpec\"\n     },\n     \"status\": {\n      \"description\": \"Most recently observed status of the node. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Node\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeAddress\": {\n    \"description\": \"NodeAddress contains information for the node's address.\",\n    \"required\": [\n     \"type\",\n     \"address\"\n    ],\n    \"properties\": {\n     \"address\": {\n      \"description\": \"The node address.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Node address type, one of Hostname, ExternalIP or InternalIP.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeAffinity\": {\n    \"description\": \"Node affinity is a group of node affinity scheduling rules.\",\n    \"properties\": {\n     \"preferredDuringSchedulingIgnoredDuringExecution\": {\n      \"description\": \"The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \\\"weight\\\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PreferredSchedulingTerm\"\n      }\n     },\n     \"requiredDuringSchedulingIgnoredDuringExecution\": {\n      \"description\": \"If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeSelector\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeCondition\": {\n    \"description\": \"NodeCondition contains condition information for a node.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastHeartbeatTime\": {\n      \"description\": \"Last time we got an update on a given condition.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transit from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"Human readable message indicating details about last transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"(brief) reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of node condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeDaemonEndpoints\": {\n    \"description\": \"NodeDaemonEndpoints lists ports opened by daemons running on the Node.\",\n    \"properties\": {\n     \"kubeletEndpoint\": {\n      \"description\": \"Endpoint on which Kubelet is listening.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.DaemonEndpoint\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeList\": {\n    \"description\": \"NodeList is the whole list of all Nodes which have been registered with master.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of nodes\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Node\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"NodeList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeSelector\": {\n    \"description\": \"A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.\",\n    \"required\": [\n     \"nodeSelectorTerms\"\n    ],\n    \"properties\": {\n     \"nodeSelectorTerms\": {\n      \"description\": \"Required. A list of node selector terms. The terms are ORed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeSelectorTerm\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeSelectorRequirement\": {\n    \"description\": \"A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.\",\n    \"required\": [\n     \"key\",\n     \"operator\"\n    ],\n    \"properties\": {\n     \"key\": {\n      \"description\": \"The label key that the selector applies to.\",\n      \"type\": \"string\",\n      \"x-kubernetes-patch-merge-key\": \"key\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"operator\": {\n      \"description\": \"Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.\",\n      \"type\": \"string\"\n     },\n     \"values\": {\n      \"description\": \"An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeSelectorTerm\": {\n    \"description\": \"A null or empty node selector term matches no objects.\",\n    \"required\": [\n     \"matchExpressions\"\n    ],\n    \"properties\": {\n     \"matchExpressions\": {\n      \"description\": \"Required. A list of node selector requirements. The requirements are ANDed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeSelectorRequirement\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeSpec\": {\n    \"description\": \"NodeSpec describes the attributes that a node is created with.\",\n    \"properties\": {\n     \"externalID\": {\n      \"description\": \"External ID of the node assigned by some machine database (e.g. a cloud provider). Deprecated.\",\n      \"type\": \"string\"\n     },\n     \"podCIDR\": {\n      \"description\": \"PodCIDR represents the pod IP range assigned to the node.\",\n      \"type\": \"string\"\n     },\n     \"providerID\": {\n      \"description\": \"ID of the node assigned by the cloud provider in the format: \\u003cProviderName\\u003e://\\u003cProviderSpecificNodeID\\u003e\",\n      \"type\": \"string\"\n     },\n     \"taints\": {\n      \"description\": \"If specified, the node's taints.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Taint\"\n      }\n     },\n     \"unschedulable\": {\n      \"description\": \"Unschedulable controls node schedulability of new pods. By default, node is schedulable. More info: https://kubernetes.io/docs/concepts/nodes/node/#manual-node-administration\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeStatus\": {\n    \"description\": \"NodeStatus is information about the current status of a node.\",\n    \"properties\": {\n     \"addresses\": {\n      \"description\": \"List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeAddress\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"allocatable\": {\n      \"description\": \"Allocatable represents the resources of a node that are available for scheduling. Defaults to Capacity.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"capacity\": {\n      \"description\": \"Capacity represents the total resources of a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"conditions\": {\n      \"description\": \"Conditions is an array of current observed node conditions. More info: https://kubernetes.io/docs/concepts/nodes/node/#condition\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"daemonEndpoints\": {\n      \"description\": \"Endpoints of daemons running on the Node.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeDaemonEndpoints\"\n     },\n     \"images\": {\n      \"description\": \"List of container images on this node\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ContainerImage\"\n      }\n     },\n     \"nodeInfo\": {\n      \"description\": \"Set of ids/uuids to uniquely identify the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#info\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeSystemInfo\"\n     },\n     \"phase\": {\n      \"description\": \"NodePhase is the recently observed lifecycle phase of the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#phase The field is never populated, and now is deprecated.\",\n      \"type\": \"string\"\n     },\n     \"volumesAttached\": {\n      \"description\": \"List of volumes that are attached to the node.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.AttachedVolume\"\n      }\n     },\n     \"volumesInUse\": {\n      \"description\": \"List of attachable volumes in use (mounted) by the node.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.NodeSystemInfo\": {\n    \"description\": \"NodeSystemInfo is a set of ids/uuids to uniquely identify the node.\",\n    \"required\": [\n     \"machineID\",\n     \"systemUUID\",\n     \"bootID\",\n     \"kernelVersion\",\n     \"osImage\",\n     \"containerRuntimeVersion\",\n     \"kubeletVersion\",\n     \"kubeProxyVersion\",\n     \"operatingSystem\",\n     \"architecture\"\n    ],\n    \"properties\": {\n     \"architecture\": {\n      \"description\": \"The Architecture reported by the node\",\n      \"type\": \"string\"\n     },\n     \"bootID\": {\n      \"description\": \"Boot ID reported by the node.\",\n      \"type\": \"string\"\n     },\n     \"containerRuntimeVersion\": {\n      \"description\": \"ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0).\",\n      \"type\": \"string\"\n     },\n     \"kernelVersion\": {\n      \"description\": \"Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64).\",\n      \"type\": \"string\"\n     },\n     \"kubeProxyVersion\": {\n      \"description\": \"KubeProxy Version reported by the node.\",\n      \"type\": \"string\"\n     },\n     \"kubeletVersion\": {\n      \"description\": \"Kubelet Version reported by the node.\",\n      \"type\": \"string\"\n     },\n     \"machineID\": {\n      \"description\": \"MachineID reported by the node. For unique machine identification in the cluster this field is preferred. Learn more from man(5) machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html\",\n      \"type\": \"string\"\n     },\n     \"operatingSystem\": {\n      \"description\": \"The Operating System reported by the node\",\n      \"type\": \"string\"\n     },\n     \"osImage\": {\n      \"description\": \"OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)).\",\n      \"type\": \"string\"\n     },\n     \"systemUUID\": {\n      \"description\": \"SystemUUID reported by the node. For unique machine identification MachineID is preferred. This field is specific to Red Hat hosts https://access.redhat.com/documentation/en-US/Red_Hat_Subscription_Management/1/html/RHSM/getting-system-uuid.html\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ObjectFieldSelector\": {\n    \"description\": \"ObjectFieldSelector selects an APIVersioned field of an object.\",\n    \"required\": [\n     \"fieldPath\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"Version of the schema the FieldPath is written in terms of, defaults to \\\"v1\\\".\",\n      \"type\": \"string\"\n     },\n     \"fieldPath\": {\n      \"description\": \"Path of the field to select in the specified API version.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ObjectReference\": {\n    \"description\": \"ObjectReference contains enough information to let you inspect or modify the referred object.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"API version of the referent.\",\n      \"type\": \"string\"\n     },\n     \"fieldPath\": {\n      \"description\": \"If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \\\"spec.containers{name}\\\" (where \\\"name\\\" refers to the name of the container that triggered the event) or if no container name is specified \\\"spec.containers[2]\\\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\n      \"type\": \"string\"\n     },\n     \"namespace\": {\n      \"description\": \"Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/\",\n      \"type\": \"string\"\n     },\n     \"resourceVersion\": {\n      \"description\": \"Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency\",\n      \"type\": \"string\"\n     },\n     \"uid\": {\n      \"description\": \"UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PersistentVolume\": {\n    \"description\": \"PersistentVolume (PV) is a storage resource provisioned by an administrator. It is analogous to a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines a specification of a persistent volume owned by the cluster. Provisioned by an administrator. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status represents the current information/status for the persistent volume. Populated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolume\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim\": {\n    \"description\": \"PersistentVolumeClaim is a user's request for and claim to a persistent volume\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the desired characteristics of a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status represents the current information/status of a persistent volume claim. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolumeClaim\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimList\": {\n    \"description\": \"PersistentVolumeClaimList is a list of PersistentVolumeClaim items.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"A list of persistent volume claims. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolumeClaimList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimSpec\": {\n    \"description\": \"PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes\",\n    \"properties\": {\n     \"accessModes\": {\n      \"description\": \"AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"resources\": {\n      \"description\": \"Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceRequirements\"\n     },\n     \"selector\": {\n      \"description\": \"A label query over volumes to consider for binding.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"storageClassName\": {\n      \"description\": \"Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1\",\n      \"type\": \"string\"\n     },\n     \"volumeName\": {\n      \"description\": \"VolumeName is the binding reference to the PersistentVolume backing this claim.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimStatus\": {\n    \"description\": \"PersistentVolumeClaimStatus is the current status of a persistent volume claim.\",\n    \"properties\": {\n     \"accessModes\": {\n      \"description\": \"AccessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"capacity\": {\n      \"description\": \"Represents the actual resources of the underlying volume.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"phase\": {\n      \"description\": \"Phase represents the current phase of PersistentVolumeClaim.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimVolumeSource\": {\n    \"description\": \"PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. This volume finds the bound PV and mounts that volume for the pod. A PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another type of volume that is owned by someone else (the system).\",\n    \"required\": [\n     \"claimName\"\n    ],\n    \"properties\": {\n     \"claimName\": {\n      \"description\": \"ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"Will force the ReadOnly setting in VolumeMounts. Default false.\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeList\": {\n    \"description\": \"PersistentVolumeList is a list of PersistentVolume items.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of persistent volumes. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolume\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PersistentVolumeList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeSpec\": {\n    \"description\": \"PersistentVolumeSpec is the specification of a persistent volume.\",\n    \"properties\": {\n     \"accessModes\": {\n      \"description\": \"AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"awsElasticBlockStore\": {\n      \"description\": \"AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.AWSElasticBlockStoreVolumeSource\"\n     },\n     \"azureDisk\": {\n      \"description\": \"AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.AzureDiskVolumeSource\"\n     },\n     \"azureFile\": {\n      \"description\": \"AzureFile represents an Azure File Service mount on the host and bind mount to the pod.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.AzureFileVolumeSource\"\n     },\n     \"capacity\": {\n      \"description\": \"A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"cephfs\": {\n      \"description\": \"CephFS represents a Ceph FS mount on the host that shares a pod's lifetime\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.CephFSVolumeSource\"\n     },\n     \"cinder\": {\n      \"description\": \"Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.CinderVolumeSource\"\n     },\n     \"claimRef\": {\n      \"description\": \"ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ObjectReference\"\n     },\n     \"fc\": {\n      \"description\": \"FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.FCVolumeSource\"\n     },\n     \"flexVolume\": {\n      \"description\": \"FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.FlexVolumeSource\"\n     },\n     \"flocker\": {\n      \"description\": \"Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.FlockerVolumeSource\"\n     },\n     \"gcePersistentDisk\": {\n      \"description\": \"GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.GCEPersistentDiskVolumeSource\"\n     },\n     \"glusterfs\": {\n      \"description\": \"Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.GlusterfsVolumeSource\"\n     },\n     \"hostPath\": {\n      \"description\": \"HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.HostPathVolumeSource\"\n     },\n     \"iscsi\": {\n      \"description\": \"ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ISCSIVolumeSource\"\n     },\n     \"local\": {\n      \"description\": \"Local represents directly-attached storage with node affinity\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LocalVolumeSource\"\n     },\n     \"nfs\": {\n      \"description\": \"NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.NFSVolumeSource\"\n     },\n     \"persistentVolumeReclaimPolicy\": {\n      \"description\": \"What happens to a persistent volume when released from its claim. Valid options are Retain (default) and Recycle. Recycling must be supported by the volume plugin underlying this persistent volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming\",\n      \"type\": \"string\"\n     },\n     \"photonPersistentDisk\": {\n      \"description\": \"PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PhotonPersistentDiskVolumeSource\"\n     },\n     \"portworxVolume\": {\n      \"description\": \"PortworxVolume represents a portworx volume attached and mounted on kubelets host machine\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PortworxVolumeSource\"\n     },\n     \"quobyte\": {\n      \"description\": \"Quobyte represents a Quobyte mount on the host that shares a pod's lifetime\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.QuobyteVolumeSource\"\n     },\n     \"rbd\": {\n      \"description\": \"RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.RBDVolumeSource\"\n     },\n     \"scaleIO\": {\n      \"description\": \"ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ScaleIOVolumeSource\"\n     },\n     \"storageClassName\": {\n      \"description\": \"Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.\",\n      \"type\": \"string\"\n     },\n     \"storageos\": {\n      \"description\": \"StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.StorageOSPersistentVolumeSource\"\n     },\n     \"vsphereVolume\": {\n      \"description\": \"VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.VsphereVirtualDiskVolumeSource\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeStatus\": {\n    \"description\": \"PersistentVolumeStatus is the current status of a persistent volume.\",\n    \"properties\": {\n     \"message\": {\n      \"description\": \"A human-readable message indicating details about why the volume is in this state.\",\n      \"type\": \"string\"\n     },\n     \"phase\": {\n      \"description\": \"Phase indicates if a volume is available, bound to a claim, or released by a claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PhotonPersistentDiskVolumeSource\": {\n    \"description\": \"Represents a Photon Controller persistent disk resource.\",\n    \"required\": [\n     \"pdID\"\n    ],\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified.\",\n      \"type\": \"string\"\n     },\n     \"pdID\": {\n      \"description\": \"ID that identifies Photon Controller persistent disk\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Pod\": {\n    \"description\": \"Pod is a collection of containers that can run on a host. This resource is created by clients and scheduled onto hosts.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodSpec\"\n     },\n     \"status\": {\n      \"description\": \"Most recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Pod\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodAffinity\": {\n    \"description\": \"Pod affinity is a group of inter pod affinity scheduling rules.\",\n    \"properties\": {\n     \"preferredDuringSchedulingIgnoredDuringExecution\": {\n      \"description\": \"The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \\\"weight\\\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.WeightedPodAffinityTerm\"\n      }\n     },\n     \"requiredDuringSchedulingIgnoredDuringExecution\": {\n      \"description\": \"NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\\\"requiredDuringSchedulingRequiredDuringExecution,omitempty\\\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodAffinityTerm\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodAffinityTerm\": {\n    \"description\": \"Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \\u003ctopologyKey\\u003e tches that of any node on which a pod of the set of pods is running\",\n    \"properties\": {\n     \"labelSelector\": {\n      \"description\": \"A label query over a set of resources, in this case pods.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"namespaces\": {\n      \"description\": \"namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \\\"this pod's namespace\\\"\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"topologyKey\": {\n      \"description\": \"This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. For PreferredDuringScheduling pod anti-affinity, empty topologyKey is interpreted as \\\"all topologies\\\" (\\\"all topologies\\\" here means all the topologyKeys indicated by scheduler command-line argument --failure-domains); for affinity and for RequiredDuringScheduling pod anti-affinity, empty topologyKey is not allowed.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodAntiAffinity\": {\n    \"description\": \"Pod anti affinity is a group of inter pod anti affinity scheduling rules.\",\n    \"properties\": {\n     \"preferredDuringSchedulingIgnoredDuringExecution\": {\n      \"description\": \"The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \\\"weight\\\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.WeightedPodAffinityTerm\"\n      }\n     },\n     \"requiredDuringSchedulingIgnoredDuringExecution\": {\n      \"description\": \"NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:\\\"requiredDuringSchedulingRequiredDuringExecution,omitempty\\\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodAffinityTerm\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodCondition\": {\n    \"description\": \"PodCondition contains details for the current condition of this pod.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastProbeTime\": {\n      \"description\": \"Last time we probed the condition.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"Human-readable message indicating details about last transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"Unique, one-word, CamelCase reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status is the status of the condition. Can be True, False, Unknown. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type is the type of the condition. Currently only Ready. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodList\": {\n    \"description\": \"PodList is a list of Pods.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of pods. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Pod\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PodList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodSecurityContext\": {\n    \"description\": \"PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext.  Field values of container.securityContext take precedence over field values of PodSecurityContext.\",\n    \"properties\": {\n     \"fsGroup\": {\n      \"description\": \"A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\\n\\n1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\\n\\nIf unset, the Kubelet will not modify the ownership and permissions of any volume.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"runAsNonRoot\": {\n      \"description\": \"Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\",\n      \"type\": \"boolean\"\n     },\n     \"runAsUser\": {\n      \"description\": \"The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"seLinuxOptions\": {\n      \"description\": \"The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in SecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.SELinuxOptions\"\n     },\n     \"supplementalGroups\": {\n      \"description\": \"A list of groups applied to the first process run in each container, in addition to the container's primary GID.  If unspecified, no groups will be added to any container.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"integer\",\n       \"format\": \"int64\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodSpec\": {\n    \"description\": \"PodSpec is a description of a pod.\",\n    \"required\": [\n     \"containers\"\n    ],\n    \"properties\": {\n     \"activeDeadlineSeconds\": {\n      \"description\": \"Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"affinity\": {\n      \"description\": \"If specified, the pod's scheduling constraints\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Affinity\"\n     },\n     \"automountServiceAccountToken\": {\n      \"description\": \"AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.\",\n      \"type\": \"boolean\"\n     },\n     \"containers\": {\n      \"description\": \"List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Container\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"name\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"dnsPolicy\": {\n      \"description\": \"Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \\\"ClusterFirst\\\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\",\n      \"type\": \"string\"\n     },\n     \"hostAliases\": {\n      \"description\": \"HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.HostAlias\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"ip\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"hostIPC\": {\n      \"description\": \"Use the host's ipc namespace. Optional: Default to false.\",\n      \"type\": \"boolean\"\n     },\n     \"hostNetwork\": {\n      \"description\": \"Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.\",\n      \"type\": \"boolean\"\n     },\n     \"hostPID\": {\n      \"description\": \"Use the host's pid namespace. Optional: Default to false.\",\n      \"type\": \"boolean\"\n     },\n     \"hostname\": {\n      \"description\": \"Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.\",\n      \"type\": \"string\"\n     },\n     \"imagePullSecrets\": {\n      \"description\": \"ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LocalObjectReference\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"name\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"initContainers\": {\n      \"description\": \"List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Container\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"name\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"nodeName\": {\n      \"description\": \"NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.\",\n      \"type\": \"string\"\n     },\n     \"nodeSelector\": {\n      \"description\": \"NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"restartPolicy\": {\n      \"description\": \"Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\",\n      \"type\": \"string\"\n     },\n     \"schedulerName\": {\n      \"description\": \"If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.\",\n      \"type\": \"string\"\n     },\n     \"securityContext\": {\n      \"description\": \"SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty.  See type description for default values of each field.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodSecurityContext\"\n     },\n     \"serviceAccount\": {\n      \"description\": \"DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.\",\n      \"type\": \"string\"\n     },\n     \"serviceAccountName\": {\n      \"description\": \"ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\",\n      \"type\": \"string\"\n     },\n     \"subdomain\": {\n      \"description\": \"If specified, the fully qualified Pod hostname will be \\\"\\u003chostname\\u003e.\\u003csubdomain\\u003e.\\u003cpod namespace\\u003e.svc.\\u003ccluster domain\\u003e\\\". If not specified, the pod will not have a domainname at all.\",\n      \"type\": \"string\"\n     },\n     \"terminationGracePeriodSeconds\": {\n      \"description\": \"Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"tolerations\": {\n      \"description\": \"If specified, the pod's tolerations.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Toleration\"\n      }\n     },\n     \"volumes\": {\n      \"description\": \"List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Volume\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"name\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodStatus\": {\n    \"description\": \"PodStatus represents information about the status of a pod. Status may trail the actual state of a system.\",\n    \"properties\": {\n     \"conditions\": {\n      \"description\": \"Current service state of pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"containerStatuses\": {\n      \"description\": \"The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ContainerStatus\"\n      }\n     },\n     \"hostIP\": {\n      \"description\": \"IP address of the host to which the pod is assigned. Empty if not yet scheduled.\",\n      \"type\": \"string\"\n     },\n     \"initContainerStatuses\": {\n      \"description\": \"The list has one entry per init container in the manifest. The most recent successful init container will have ready = true, the most recently started container will have startTime set. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ContainerStatus\"\n      }\n     },\n     \"message\": {\n      \"description\": \"A human readable message indicating details about why the pod is in this condition.\",\n      \"type\": \"string\"\n     },\n     \"phase\": {\n      \"description\": \"Current condition of the pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase\",\n      \"type\": \"string\"\n     },\n     \"podIP\": {\n      \"description\": \"IP address allocated to the pod. Routable at least within the cluster. Empty if not yet allocated.\",\n      \"type\": \"string\"\n     },\n     \"qosClass\": {\n      \"description\": \"The Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://github.com/kubernetes/kubernetes/blob/master/docs/design/resource-qos.md\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"A brief CamelCase message indicating details about why the pod is in this state. e.g. 'OutOfDisk'\",\n      \"type\": \"string\"\n     },\n     \"startTime\": {\n      \"description\": \"RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodTemplate\": {\n    \"description\": \"PodTemplate describes a template for creating copies of a predefined pod.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"template\": {\n      \"description\": \"Template defines the pods that will be created from this pod template. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PodTemplate\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodTemplateList\": {\n    \"description\": \"PodTemplateList is a list of PodTemplates.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of pod templates\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplate\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"PodTemplateList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec\": {\n    \"description\": \"PodTemplateSpec describes the data a pod should have when created from a template\",\n    \"properties\": {\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodSpec\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PortworxVolumeSource\": {\n    \"description\": \"PortworxVolumeSource represents a Portworx volume resource.\",\n    \"required\": [\n     \"volumeID\"\n    ],\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \\\"ext4\\\", \\\"xfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified.\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\",\n      \"type\": \"boolean\"\n     },\n     \"volumeID\": {\n      \"description\": \"VolumeID uniquely identifies a Portworx volume\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.PreferredSchedulingTerm\": {\n    \"description\": \"An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).\",\n    \"required\": [\n     \"weight\",\n     \"preference\"\n    ],\n    \"properties\": {\n     \"preference\": {\n      \"description\": \"A node selector term, associated with the corresponding weight.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.NodeSelectorTerm\"\n     },\n     \"weight\": {\n      \"description\": \"Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Probe\": {\n    \"description\": \"Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.\",\n    \"properties\": {\n     \"exec\": {\n      \"description\": \"One and only one of the following should be specified. Exec specifies the action to take.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ExecAction\"\n     },\n     \"failureThreshold\": {\n      \"description\": \"Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"httpGet\": {\n      \"description\": \"HTTPGet specifies the http request to perform.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.HTTPGetAction\"\n     },\n     \"initialDelaySeconds\": {\n      \"description\": \"Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"periodSeconds\": {\n      \"description\": \"How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"successThreshold\": {\n      \"description\": \"Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"tcpSocket\": {\n      \"description\": \"TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.TCPSocketAction\"\n     },\n     \"timeoutSeconds\": {\n      \"description\": \"Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ProjectedVolumeSource\": {\n    \"description\": \"Represents a projected volume source\",\n    \"required\": [\n     \"sources\"\n    ],\n    \"properties\": {\n     \"defaultMode\": {\n      \"description\": \"Mode bits to use on created files by default. Must be a value between 0 and 0777. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"sources\": {\n      \"description\": \"list of volume projections\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.VolumeProjection\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.QuobyteVolumeSource\": {\n    \"description\": \"Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling.\",\n    \"required\": [\n     \"registry\",\n     \"volume\"\n    ],\n    \"properties\": {\n     \"group\": {\n      \"description\": \"Group to map volume access to Default is no group\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.\",\n      \"type\": \"boolean\"\n     },\n     \"registry\": {\n      \"description\": \"Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes\",\n      \"type\": \"string\"\n     },\n     \"user\": {\n      \"description\": \"User to map volume access to Defaults to serivceaccount user\",\n      \"type\": \"string\"\n     },\n     \"volume\": {\n      \"description\": \"Volume is a string that references an already created Quobyte volume by name.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.RBDVolumeSource\": {\n    \"description\": \"Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.\",\n    \"required\": [\n     \"monitors\",\n     \"image\"\n    ],\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd\",\n      \"type\": \"string\"\n     },\n     \"image\": {\n      \"description\": \"The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\",\n      \"type\": \"string\"\n     },\n     \"keyring\": {\n      \"description\": \"Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\",\n      \"type\": \"string\"\n     },\n     \"monitors\": {\n      \"description\": \"A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"pool\": {\n      \"description\": \"The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\",\n      \"type\": \"boolean\"\n     },\n     \"secretRef\": {\n      \"description\": \"SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LocalObjectReference\"\n     },\n     \"user\": {\n      \"description\": \"The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ReplicationController\": {\n    \"description\": \"ReplicationController represents the configuration of a replication controller.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"If the Labels of a ReplicationController are empty, they are defaulted to be the same as the Pod(s) that the replication controller manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the specification of the desired behavior of the replication controller. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationControllerSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is the most recently observed status of the replication controller. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationControllerStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ReplicationController\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ReplicationControllerCondition\": {\n    \"description\": \"ReplicationControllerCondition describes the state of a replication controller at a certain point.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"The last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"A human readable message indicating details about the transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"The reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of replication controller condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ReplicationControllerList\": {\n    \"description\": \"ReplicationControllerList is a collection of replication controllers.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of replication controllers. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationController\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ReplicationControllerList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ReplicationControllerSpec\": {\n    \"description\": \"ReplicationControllerSpec is the specification of a replication controller.\",\n    \"properties\": {\n     \"minReadySeconds\": {\n      \"description\": \"Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"template\": {\n      \"description\": \"Template is the object that describes the pod that will be created if insufficient replicas are detected. This takes precedence over a TemplateRef. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ReplicationControllerStatus\": {\n    \"description\": \"ReplicationControllerStatus represents the current status of a replication controller.\",\n    \"required\": [\n     \"replicas\"\n    ],\n    \"properties\": {\n     \"availableReplicas\": {\n      \"description\": \"The number of available replicas (ready for at least minReadySeconds) for this replication controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"conditions\": {\n      \"description\": \"Represents the latest available observations of a replication controller's current state.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ReplicationControllerCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"fullyLabeledReplicas\": {\n      \"description\": \"The number of pods that have labels matching the labels of the pod template of the replication controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"ObservedGeneration reflects the generation of the most recently observed replication controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"readyReplicas\": {\n      \"description\": \"The number of ready replicas for this replication controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ResourceFieldSelector\": {\n    \"description\": \"ResourceFieldSelector represents container resources (cpu, memory) and their output format\",\n    \"required\": [\n     \"resource\"\n    ],\n    \"properties\": {\n     \"containerName\": {\n      \"description\": \"Container name: required for volumes, optional for env vars\",\n      \"type\": \"string\"\n     },\n     \"divisor\": {\n      \"description\": \"Specifies the output format of the exposed resources, defaults to \\\"1\\\"\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n     },\n     \"resource\": {\n      \"description\": \"Required: resource to select\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ResourceQuota\": {\n    \"description\": \"ResourceQuota sets aggregate quota restrictions enforced per namespace\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the desired quota. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuotaSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status defines the actual enforced quota and its current usage. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuotaStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ResourceQuota\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ResourceQuotaList\": {\n    \"description\": \"ResourceQuotaList is a list of ResourceQuota items.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of ResourceQuota objects. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ResourceQuota\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ResourceQuotaList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ResourceQuotaSpec\": {\n    \"description\": \"ResourceQuotaSpec defines the desired hard limits to enforce for Quota.\",\n    \"properties\": {\n     \"hard\": {\n      \"description\": \"Hard is the set of desired hard limits for each named resource. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"scopes\": {\n      \"description\": \"A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ResourceQuotaStatus\": {\n    \"description\": \"ResourceQuotaStatus defines the enforced hard limits and observed use.\",\n    \"properties\": {\n     \"hard\": {\n      \"description\": \"Hard is the set of enforced hard limits for each named resource. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"used\": {\n      \"description\": \"Used is the current observed total usage of the resource in the namespace.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ResourceRequirements\": {\n    \"description\": \"ResourceRequirements describes the compute resource requirements.\",\n    \"properties\": {\n     \"limits\": {\n      \"description\": \"Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     },\n     \"requests\": {\n      \"description\": \"Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.SELinuxOptions\": {\n    \"description\": \"SELinuxOptions are the labels to be applied to the container\",\n    \"properties\": {\n     \"level\": {\n      \"description\": \"Level is SELinux level label that applies to the container.\",\n      \"type\": \"string\"\n     },\n     \"role\": {\n      \"description\": \"Role is a SELinux role label that applies to the container.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type is a SELinux type label that applies to the container.\",\n      \"type\": \"string\"\n     },\n     \"user\": {\n      \"description\": \"User is a SELinux user label that applies to the container.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ScaleIOVolumeSource\": {\n    \"description\": \"ScaleIOVolumeSource represents a persistent ScaleIO volume\",\n    \"required\": [\n     \"gateway\",\n     \"system\",\n     \"secretRef\"\n    ],\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified.\",\n      \"type\": \"string\"\n     },\n     \"gateway\": {\n      \"description\": \"The host address of the ScaleIO API Gateway.\",\n      \"type\": \"string\"\n     },\n     \"protectionDomain\": {\n      \"description\": \"The name of the Protection Domain for the configured storage (defaults to \\\"default\\\").\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\",\n      \"type\": \"boolean\"\n     },\n     \"secretRef\": {\n      \"description\": \"SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LocalObjectReference\"\n     },\n     \"sslEnabled\": {\n      \"description\": \"Flag to enable/disable SSL communication with Gateway, default false\",\n      \"type\": \"boolean\"\n     },\n     \"storageMode\": {\n      \"description\": \"Indicates whether the storage for a volume should be thick or thin (defaults to \\\"thin\\\").\",\n      \"type\": \"string\"\n     },\n     \"storagePool\": {\n      \"description\": \"The Storage Pool associated with the protection domain (defaults to \\\"default\\\").\",\n      \"type\": \"string\"\n     },\n     \"system\": {\n      \"description\": \"The name of the storage system as configured in ScaleIO.\",\n      \"type\": \"string\"\n     },\n     \"volumeName\": {\n      \"description\": \"The name of a volume already created in the ScaleIO system that is associated with this volume source.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Secret\": {\n    \"description\": \"Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"data\": {\n      \"description\": \"Data contains the secret data. Each key must consist of alphanumeric characters, '-', '_' or '.'. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\",\n       \"format\": \"byte\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"stringData\": {\n      \"description\": \"stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"type\": {\n      \"description\": \"Used to facilitate programmatic handling of secret data.\",\n      \"type\": \"string\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Secret\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.SecretEnvSource\": {\n    \"description\": \"SecretEnvSource selects a Secret to populate the environment variables with.\\n\\nThe contents of the target Secret's Data field will represent the key-value pairs as environment variables.\",\n    \"properties\": {\n     \"name\": {\n      \"description\": \"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\n      \"type\": \"string\"\n     },\n     \"optional\": {\n      \"description\": \"Specify whether the Secret must be defined\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.SecretKeySelector\": {\n    \"description\": \"SecretKeySelector selects a key of a Secret.\",\n    \"required\": [\n     \"key\"\n    ],\n    \"properties\": {\n     \"key\": {\n      \"description\": \"The key of the secret to select from.  Must be a valid secret key.\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\n      \"type\": \"string\"\n     },\n     \"optional\": {\n      \"description\": \"Specify whether the Secret or it's key must be defined\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.SecretList\": {\n    \"description\": \"SecretList is a list of Secret.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of secret objects. More info: https://kubernetes.io/docs/concepts/configuration/secret\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Secret\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"SecretList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.SecretProjection\": {\n    \"description\": \"Adapts a secret into a projected volume.\\n\\nThe contents of the target Secret's Data field will be presented in a projected volume as files using the keys in the Data field as the file names. Note that this is identical to a secret volume source without the default mode.\",\n    \"properties\": {\n     \"items\": {\n      \"description\": \"If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.KeyToPath\"\n      }\n     },\n     \"name\": {\n      \"description\": \"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\n      \"type\": \"string\"\n     },\n     \"optional\": {\n      \"description\": \"Specify whether the Secret or its key must be defined\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.SecretVolumeSource\": {\n    \"description\": \"Adapts a Secret into a volume.\\n\\nThe contents of the target Secret's Data field will be presented in a volume as files using the keys in the Data field as the file names. Secret volumes support ownership management and SELinux relabeling.\",\n    \"properties\": {\n     \"defaultMode\": {\n      \"description\": \"Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"items\": {\n      \"description\": \"If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.KeyToPath\"\n      }\n     },\n     \"optional\": {\n      \"description\": \"Specify whether the Secret or it's keys must be defined\",\n      \"type\": \"boolean\"\n     },\n     \"secretName\": {\n      \"description\": \"Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.SecurityContext\": {\n    \"description\": \"SecurityContext holds security configuration that will be applied to a container. Some fields are present in both SecurityContext and PodSecurityContext.  When both are set, the values in SecurityContext take precedence.\",\n    \"properties\": {\n     \"capabilities\": {\n      \"description\": \"The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Capabilities\"\n     },\n     \"privileged\": {\n      \"description\": \"Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false.\",\n      \"type\": \"boolean\"\n     },\n     \"readOnlyRootFilesystem\": {\n      \"description\": \"Whether this container has a read-only root filesystem. Default is false.\",\n      \"type\": \"boolean\"\n     },\n     \"runAsNonRoot\": {\n      \"description\": \"Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\",\n      \"type\": \"boolean\"\n     },\n     \"runAsUser\": {\n      \"description\": \"The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"seLinuxOptions\": {\n      \"description\": \"The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container.  May also be set in PodSecurityContext.  If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.SELinuxOptions\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Service\": {\n    \"description\": \"Service is a named abstraction of software service (for example, mysql) consisting of local port (for example 3306) that the proxy listens on, and the selector that determines which pods will answer requests sent through the proxy.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the behavior of a service. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceSpec\"\n     },\n     \"status\": {\n      \"description\": \"Most recently observed status of the service. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"Service\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ServiceAccount\": {\n    \"description\": \"ServiceAccount binds together: * a name, understood by users, and perhaps by peripheral systems, for an identity * a principal that can be authenticated and authorized * a set of secrets\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"automountServiceAccountToken\": {\n      \"description\": \"AutomountServiceAccountToken indicates whether pods running as this service account should have an API token automatically mounted. Can be overridden at the pod level.\",\n      \"type\": \"boolean\"\n     },\n     \"imagePullSecrets\": {\n      \"description\": \"ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LocalObjectReference\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"secrets\": {\n      \"description\": \"Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. More info: https://kubernetes.io/docs/concepts/configuration/secret\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ObjectReference\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"name\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ServiceAccount\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ServiceAccountList\": {\n    \"description\": \"ServiceAccountList is a list of ServiceAccount objects\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of ServiceAccounts. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ServiceAccount\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ServiceAccountList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ServiceList\": {\n    \"description\": \"ServiceList holds a list of services.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of services\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Service\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"\",\n      \"version\": \"v1\",\n      \"kind\": \"ServiceList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ServicePort\": {\n    \"description\": \"ServicePort contains information on service's port.\",\n    \"required\": [\n     \"port\"\n    ],\n    \"properties\": {\n     \"name\": {\n      \"description\": \"The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. This maps to the 'Name' field in EndpointPort objects. Optional if only one ServicePort is defined on this service.\",\n      \"type\": \"string\"\n     },\n     \"nodePort\": {\n      \"description\": \"The port on each node on which this service is exposed when type=NodePort or LoadBalancer. Usually assigned by the system. If specified, it will be allocated to the service if unused or else creation of the service will fail. Default is to auto-allocate a port if the ServiceType of this Service requires one. More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"port\": {\n      \"description\": \"The port that will be exposed by this service.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"protocol\": {\n      \"description\": \"The IP protocol for this port. Supports \\\"TCP\\\" and \\\"UDP\\\". Default is TCP.\",\n      \"type\": \"string\"\n     },\n     \"targetPort\": {\n      \"description\": \"Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod's container ports. If this is not specified, the value of the 'port' field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the 'port' field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ServiceSpec\": {\n    \"description\": \"ServiceSpec describes the attributes that a user creates on a service.\",\n    \"properties\": {\n     \"clusterIP\": {\n      \"description\": \"clusterIP is the IP address of the service and is usually assigned randomly by the master. If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail. This field can not be changed through updates. Valid values are \\\"None\\\", empty string (\\\"\\\"), or a valid IP address. \\\"None\\\" can be specified for headless services when proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\",\n      \"type\": \"string\"\n     },\n     \"externalIPs\": {\n      \"description\": \"externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service.  These IPs are not managed by Kubernetes.  The user is responsible for ensuring that traffic arrives at a node with this IP.  A common example is external load-balancers that are not part of the Kubernetes system.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"externalName\": {\n      \"description\": \"externalName is the external reference that kubedns or equivalent will return as a CNAME record for this service. No proxying will be involved. Must be a valid DNS name and requires Type to be ExternalName.\",\n      \"type\": \"string\"\n     },\n     \"externalTrafficPolicy\": {\n      \"description\": \"externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. \\\"Local\\\" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. \\\"Cluster\\\" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading.\",\n      \"type\": \"string\"\n     },\n     \"healthCheckNodePort\": {\n      \"description\": \"healthCheckNodePort specifies the healthcheck nodePort for the service. If not specified, HealthCheckNodePort is created by the service api backend with the allocated nodePort. Will use user-specified nodePort value if specified by the client. Only effects when Type is set to LoadBalancer and ExternalTrafficPolicy is set to Local.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"loadBalancerIP\": {\n      \"description\": \"Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.\",\n      \"type\": \"string\"\n     },\n     \"loadBalancerSourceRanges\": {\n      \"description\": \"If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature.\\\" More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"ports\": {\n      \"description\": \"The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ServicePort\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"port\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"selector\": {\n      \"description\": \"Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"sessionAffinity\": {\n      \"description\": \"Supports \\\"ClientIP\\\" and \\\"None\\\". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. \\\"ExternalName\\\" maps to the specified externalName. \\\"ClusterIP\\\" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object. If clusterIP is \\\"None\\\", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a stable IP. \\\"NodePort\\\" builds on ClusterIP and allocates a port on every node which routes to the clusterIP. \\\"LoadBalancer\\\" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services---service-types\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.ServiceStatus\": {\n    \"description\": \"ServiceStatus represents the current status of a service.\",\n    \"properties\": {\n     \"loadBalancer\": {\n      \"description\": \"LoadBalancer contains the current status of the load-balancer, if one is present.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LoadBalancerStatus\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.StorageOSPersistentVolumeSource\": {\n    \"description\": \"Represents a StorageOS persistent volume resource.\",\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified.\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\",\n      \"type\": \"boolean\"\n     },\n     \"secretRef\": {\n      \"description\": \"SecretRef specifies the secret to use for obtaining the StorageOS API credentials.  If not specified, default values will be attempted.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ObjectReference\"\n     },\n     \"volumeName\": {\n      \"description\": \"VolumeName is the human-readable name of the StorageOS volume.  Volume names are only unique within a namespace.\",\n      \"type\": \"string\"\n     },\n     \"volumeNamespace\": {\n      \"description\": \"VolumeNamespace specifies the scope of the volume within StorageOS.  If no namespace is specified then the Pod's namespace will be used.  This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \\\"default\\\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.StorageOSVolumeSource\": {\n    \"description\": \"Represents a StorageOS persistent volume resource.\",\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified.\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.\",\n      \"type\": \"boolean\"\n     },\n     \"secretRef\": {\n      \"description\": \"SecretRef specifies the secret to use for obtaining the StorageOS API credentials.  If not specified, default values will be attempted.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LocalObjectReference\"\n     },\n     \"volumeName\": {\n      \"description\": \"VolumeName is the human-readable name of the StorageOS volume.  Volume names are only unique within a namespace.\",\n      \"type\": \"string\"\n     },\n     \"volumeNamespace\": {\n      \"description\": \"VolumeNamespace specifies the scope of the volume within StorageOS.  If no namespace is specified then the Pod's namespace will be used.  This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \\\"default\\\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.TCPSocketAction\": {\n    \"description\": \"TCPSocketAction describes an action based on opening a socket\",\n    \"required\": [\n     \"port\"\n    ],\n    \"properties\": {\n     \"host\": {\n      \"description\": \"Optional: Host name to connect to, defaults to the pod IP.\",\n      \"type\": \"string\"\n     },\n     \"port\": {\n      \"description\": \"Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Taint\": {\n    \"description\": \"The node this Taint is attached to has the effect \\\"effect\\\" on any pod that that does not tolerate the Taint.\",\n    \"required\": [\n     \"key\",\n     \"effect\"\n    ],\n    \"properties\": {\n     \"effect\": {\n      \"description\": \"Required. The effect of the taint on pods that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute.\",\n      \"type\": \"string\"\n     },\n     \"key\": {\n      \"description\": \"Required. The taint key to be applied to a node.\",\n      \"type\": \"string\",\n      \"x-kubernetes-patch-merge-key\": \"key\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"timeAdded\": {\n      \"description\": \"TimeAdded represents the time at which the taint was added. It is only written for NoExecute taints.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"value\": {\n      \"description\": \"Required. The taint value corresponding to the taint key.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Toleration\": {\n    \"description\": \"The pod this Toleration is attached to tolerates any taint that matches the triple \\u003ckey,value,effect\\u003e using the matching operator \\u003coperator\\u003e.\",\n    \"properties\": {\n     \"effect\": {\n      \"description\": \"Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.\",\n      \"type\": \"string\"\n     },\n     \"key\": {\n      \"description\": \"Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.\",\n      \"type\": \"string\",\n      \"x-kubernetes-patch-merge-key\": \"key\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"operator\": {\n      \"description\": \"Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.\",\n      \"type\": \"string\"\n     },\n     \"tolerationSeconds\": {\n      \"description\": \"TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"value\": {\n      \"description\": \"Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.Volume\": {\n    \"description\": \"Volume represents a named volume in a pod that may be accessed by any container in the pod.\",\n    \"required\": [\n     \"name\"\n    ],\n    \"properties\": {\n     \"awsElasticBlockStore\": {\n      \"description\": \"AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.AWSElasticBlockStoreVolumeSource\"\n     },\n     \"azureDisk\": {\n      \"description\": \"AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.AzureDiskVolumeSource\"\n     },\n     \"azureFile\": {\n      \"description\": \"AzureFile represents an Azure File Service mount on the host and bind mount to the pod.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.AzureFileVolumeSource\"\n     },\n     \"cephfs\": {\n      \"description\": \"CephFS represents a Ceph FS mount on the host that shares a pod's lifetime\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.CephFSVolumeSource\"\n     },\n     \"cinder\": {\n      \"description\": \"Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.CinderVolumeSource\"\n     },\n     \"configMap\": {\n      \"description\": \"ConfigMap represents a configMap that should populate this volume\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMapVolumeSource\"\n     },\n     \"downwardAPI\": {\n      \"description\": \"DownwardAPI represents downward API about the pod that should populate this volume\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.DownwardAPIVolumeSource\"\n     },\n     \"emptyDir\": {\n      \"description\": \"EmptyDir represents a temporary directory that shares a pod's lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.EmptyDirVolumeSource\"\n     },\n     \"fc\": {\n      \"description\": \"FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.FCVolumeSource\"\n     },\n     \"flexVolume\": {\n      \"description\": \"FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.FlexVolumeSource\"\n     },\n     \"flocker\": {\n      \"description\": \"Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.FlockerVolumeSource\"\n     },\n     \"gcePersistentDisk\": {\n      \"description\": \"GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.GCEPersistentDiskVolumeSource\"\n     },\n     \"gitRepo\": {\n      \"description\": \"GitRepo represents a git repository at a particular revision.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.GitRepoVolumeSource\"\n     },\n     \"glusterfs\": {\n      \"description\": \"Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.GlusterfsVolumeSource\"\n     },\n     \"hostPath\": {\n      \"description\": \"HostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.HostPathVolumeSource\"\n     },\n     \"iscsi\": {\n      \"description\": \"ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://releases.k8s.io/HEAD/examples/volumes/iscsi/README.md\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ISCSIVolumeSource\"\n     },\n     \"name\": {\n      \"description\": \"Volume's name. Must be a DNS_LABEL and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names\",\n      \"type\": \"string\"\n     },\n     \"nfs\": {\n      \"description\": \"NFS represents an NFS mount on the host that shares a pod's lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.NFSVolumeSource\"\n     },\n     \"persistentVolumeClaim\": {\n      \"description\": \"PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimVolumeSource\"\n     },\n     \"photonPersistentDisk\": {\n      \"description\": \"PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PhotonPersistentDiskVolumeSource\"\n     },\n     \"portworxVolume\": {\n      \"description\": \"PortworxVolume represents a portworx volume attached and mounted on kubelets host machine\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PortworxVolumeSource\"\n     },\n     \"projected\": {\n      \"description\": \"Items for all in one resources secrets, configmaps, and downward API\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ProjectedVolumeSource\"\n     },\n     \"quobyte\": {\n      \"description\": \"Quobyte represents a Quobyte mount on the host that shares a pod's lifetime\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.QuobyteVolumeSource\"\n     },\n     \"rbd\": {\n      \"description\": \"RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.RBDVolumeSource\"\n     },\n     \"scaleIO\": {\n      \"description\": \"ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ScaleIOVolumeSource\"\n     },\n     \"secret\": {\n      \"description\": \"Secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.SecretVolumeSource\"\n     },\n     \"storageos\": {\n      \"description\": \"StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.StorageOSVolumeSource\"\n     },\n     \"vsphereVolume\": {\n      \"description\": \"VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.VsphereVirtualDiskVolumeSource\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.VolumeMount\": {\n    \"description\": \"VolumeMount describes a mounting of a Volume within a container.\",\n    \"required\": [\n     \"name\",\n     \"mountPath\"\n    ],\n    \"properties\": {\n     \"mountPath\": {\n      \"description\": \"Path within the container at which the volume should be mounted.  Must not contain ':'.\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"This must match the Name of a Volume.\",\n      \"type\": \"string\"\n     },\n     \"readOnly\": {\n      \"description\": \"Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false.\",\n      \"type\": \"boolean\"\n     },\n     \"subPath\": {\n      \"description\": \"Path within the volume from which the container's volume should be mounted. Defaults to \\\"\\\" (volume's root).\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.VolumeProjection\": {\n    \"description\": \"Projection that may be projected along with other supported volume types\",\n    \"properties\": {\n     \"configMap\": {\n      \"description\": \"information about the configMap data to project\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ConfigMapProjection\"\n     },\n     \"downwardAPI\": {\n      \"description\": \"information about the downwardAPI data to project\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.DownwardAPIProjection\"\n     },\n     \"secret\": {\n      \"description\": \"information about the secret data to project\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.SecretProjection\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.VsphereVirtualDiskVolumeSource\": {\n    \"description\": \"Represents a vSphere volume resource.\",\n    \"required\": [\n     \"volumePath\"\n    ],\n    \"properties\": {\n     \"fsType\": {\n      \"description\": \"Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \\\"ext4\\\", \\\"xfs\\\", \\\"ntfs\\\". Implicitly inferred to be \\\"ext4\\\" if unspecified.\",\n      \"type\": \"string\"\n     },\n     \"storagePolicyID\": {\n      \"description\": \"Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.\",\n      \"type\": \"string\"\n     },\n     \"storagePolicyName\": {\n      \"description\": \"Storage Policy Based Management (SPBM) profile name.\",\n      \"type\": \"string\"\n     },\n     \"volumePath\": {\n      \"description\": \"Path that identifies vSphere volume vmdk\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.api.v1.WeightedPodAffinityTerm\": {\n    \"description\": \"The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)\",\n    \"required\": [\n     \"weight\",\n     \"podAffinityTerm\"\n    ],\n    \"properties\": {\n     \"podAffinityTerm\": {\n      \"description\": \"Required. A pod affinity term, associated with the corresponding weight.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodAffinityTerm\"\n     },\n     \"weight\": {\n      \"description\": \"weight associated with matching the corresponding podAffinityTerm, in the range 1-100.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.AdmissionHookClientConfig\": {\n    \"description\": \"AdmissionHookClientConfig contains the information to make a TLS connection with the webhook\",\n    \"required\": [\n     \"service\",\n     \"caBundle\"\n    ],\n    \"properties\": {\n     \"caBundle\": {\n      \"description\": \"CABundle is a PEM encoded CA bundle which will be used to validate webhook's server certificate. Required\",\n      \"type\": \"string\",\n      \"format\": \"byte\"\n     },\n     \"service\": {\n      \"description\": \"Service is a reference to the service for this webhook. If there is only one port open for the service, that port will be used. If there are multiple ports open, port 443 will be used if it is open, otherwise it is an error. Required\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ServiceReference\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHook\": {\n    \"description\": \"ExternalAdmissionHook describes an external admission webhook and the resources and operations it applies to.\",\n    \"required\": [\n     \"name\",\n     \"clientConfig\"\n    ],\n    \"properties\": {\n     \"clientConfig\": {\n      \"description\": \"ClientConfig defines how to communicate with the hook. Required\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.AdmissionHookClientConfig\"\n     },\n     \"failurePolicy\": {\n      \"description\": \"FailurePolicy defines how unrecognized errors from the admission endpoint are handled - allowed values are Ignore or Fail. Defaults to Ignore.\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"The name of the external admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where \\\"imagepolicy\\\" is the name of the webhook, and kubernetes.io is the name of the organization. Required.\",\n      \"type\": \"string\"\n     },\n     \"rules\": {\n      \"description\": \"Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.RuleWithOperations\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHookConfiguration\": {\n    \"description\": \"ExternalAdmissionHookConfiguration describes the configuration of initializers.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"externalAdmissionHooks\": {\n      \"description\": \"ExternalAdmissionHooks is a list of external admission webhooks and the affected resources and operations.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHook\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"name\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ExternalAdmissionHookConfiguration\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHookConfigurationList\": {\n    \"description\": \"ExternalAdmissionHookConfigurationList is a list of ExternalAdmissionHookConfiguration.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of ExternalAdmissionHookConfiguration.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ExternalAdmissionHookConfiguration\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ExternalAdmissionHookConfigurationList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.Initializer\": {\n    \"description\": \"Initializer describes the name and the failure policy of an initializer, and what resources it applies to.\",\n    \"required\": [\n     \"name\"\n    ],\n    \"properties\": {\n     \"failurePolicy\": {\n      \"description\": \"FailurePolicy defines what happens if the responsible initializer controller fails to takes action. Allowed values are Ignore, or Fail. If \\\"Ignore\\\" is set, initializer is removed from the initializers list of an object if the timeout is reached; If \\\"Fail\\\" is set, admissionregistration returns timeout error if the timeout is reached.\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name is the identifier of the initializer. It will be added to the object that needs to be initialized. Name should be fully qualified, e.g., alwayspullimages.kubernetes.io, where \\\"alwayspullimages\\\" is the name of the webhook, and kubernetes.io is the name of the organization. Required\",\n      \"type\": \"string\"\n     },\n     \"rules\": {\n      \"description\": \"Rules describes what resources/subresources the initializer cares about. The initializer cares about an operation if it matches _any_ Rule. Rule.Resources must not include subresources.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.Rule\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfiguration\": {\n    \"description\": \"InitializerConfiguration describes the configuration of initializers.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"initializers\": {\n      \"description\": \"Initializers is a list of resources and their default initializers Order-sensitive. When merging multiple InitializerConfigurations, we sort the initializers from different InitializerConfigurations by the name of the InitializerConfigurations; the order of the initializers from the same InitializerConfiguration is preserved.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.Initializer\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"name\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"InitializerConfiguration\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfigurationList\": {\n    \"description\": \"InitializerConfigurationList is a list of InitializerConfiguration.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of InitializerConfiguration.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.InitializerConfiguration\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"admissionregistration.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"InitializerConfigurationList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.Rule\": {\n    \"description\": \"Rule is a tuple of APIGroups, APIVersion, and Resources.It is recommended to make sure that all the tuple expansions are valid.\",\n    \"properties\": {\n     \"apiGroups\": {\n      \"description\": \"APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"apiVersions\": {\n      \"description\": \"APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"resources\": {\n      \"description\": \"Resources is a list of resources this rule applies to.\\n\\nFor example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\\n\\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\\n\\nDepending on the enclosing object, subresources might not be allowed. Required.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.RuleWithOperations\": {\n    \"description\": \"RuleWithOperations is a tuple of Operations and Resources. It is recommended to make sure that all the tuple expansions are valid.\",\n    \"properties\": {\n     \"apiGroups\": {\n      \"description\": \"APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"apiVersions\": {\n      \"description\": \"APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"operations\": {\n      \"description\": \"Operations is the operations the admission hook cares about - CREATE, UPDATE, or * for all operations. If '*' is present, the length of the slice must be one. Required.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"resources\": {\n      \"description\": \"Resources is a list of resources this rule applies to.\\n\\nFor example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\\n\\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\\n\\nDepending on the enclosing object, subresources might not be allowed. Required.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ServiceReference\": {\n    \"description\": \"ServiceReference holds a reference to Service.legacy.k8s.io\",\n    \"required\": [\n     \"namespace\",\n     \"name\"\n    ],\n    \"properties\": {\n     \"name\": {\n      \"description\": \"Name is the name of the service Required\",\n      \"type\": \"string\"\n     },\n     \"namespace\": {\n      \"description\": \"Namespace is the namespace of the service Required\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevision\": {\n    \"description\": \"ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.\",\n    \"required\": [\n     \"revision\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"data\": {\n      \"description\": \"Data is the serialized representation of the state.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.runtime.RawExtension\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"revision\": {\n      \"description\": \"Revision indicates the revision of the state represented by Data.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ControllerRevision\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevisionList\": {\n    \"description\": \"ControllerRevisionList is a resource containing a list of ControllerRevision objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of ControllerRevisions\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevision\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ControllerRevisionList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment\": {\n    \"description\": \"Deployment enables declarative updates for Pods and ReplicaSets.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior of the Deployment.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentSpec\"\n     },\n     \"status\": {\n      \"description\": \"Most recently observed status of the Deployment.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentCondition\": {\n    \"description\": \"DeploymentCondition describes the state of a deployment at a certain point.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"lastUpdateTime\": {\n      \"description\": \"The last time this condition was updated.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"A human readable message indicating details about the transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"The reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of deployment condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentList\": {\n    \"description\": \"DeploymentList is a list of Deployments.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of Deployments.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DeploymentList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentRollback\": {\n    \"description\": \"DeploymentRollback stores the information required to rollback a deployment.\",\n    \"required\": [\n     \"name\",\n     \"rollbackTo\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Required: This must match the Name of a deployment.\",\n      \"type\": \"string\"\n     },\n     \"rollbackTo\": {\n      \"description\": \"The config of this deployment rollback.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollbackConfig\"\n     },\n     \"updatedAnnotations\": {\n      \"description\": \"The annotations to be updated to a deployment\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DeploymentRollback\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentSpec\": {\n    \"description\": \"DeploymentSpec is the specification of the desired behavior of the Deployment.\",\n    \"required\": [\n     \"template\"\n    ],\n    \"properties\": {\n     \"minReadySeconds\": {\n      \"description\": \"Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"paused\": {\n      \"description\": \"Indicates that the deployment is paused.\",\n      \"type\": \"boolean\"\n     },\n     \"progressDeadlineSeconds\": {\n      \"description\": \"The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Once autoRollback is implemented, the deployment controller will automatically rollback failed deployments. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"revisionHistoryLimit\": {\n      \"description\": \"The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 2.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"rollbackTo\": {\n      \"description\": \"The config this deployment is rolling back to. Will be cleared after rollback is done.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollbackConfig\"\n     },\n     \"selector\": {\n      \"description\": \"Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"strategy\": {\n      \"description\": \"The deployment strategy to use to replace existing pods with new ones.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentStrategy\"\n     },\n     \"template\": {\n      \"description\": \"Template describes the pods that will be created.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentStatus\": {\n    \"description\": \"DeploymentStatus is the most recently observed status of the Deployment.\",\n    \"properties\": {\n     \"availableReplicas\": {\n      \"description\": \"Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"collisionCount\": {\n      \"description\": \"Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"conditions\": {\n      \"description\": \"Represents the latest available observations of a deployment's current state.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"The generation observed by the deployment controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"readyReplicas\": {\n      \"description\": \"Total number of ready pods targeted by this deployment.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Total number of non-terminated pods targeted by this deployment (their labels match the selector).\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"unavailableReplicas\": {\n      \"description\": \"Total number of unavailable pods targeted by this deployment.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"updatedReplicas\": {\n      \"description\": \"Total number of non-terminated pods targeted by this deployment that have the desired template spec.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentStrategy\": {\n    \"description\": \"DeploymentStrategy describes how to replace existing pods with new ones.\",\n    \"properties\": {\n     \"rollingUpdate\": {\n      \"description\": \"Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollingUpdateDeployment\"\n     },\n     \"type\": {\n      \"description\": \"Type of deployment. Can be \\\"Recreate\\\" or \\\"RollingUpdate\\\". Default is RollingUpdate.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollbackConfig\": {\n    \"properties\": {\n     \"revision\": {\n      \"description\": \"The revision to rollback to. If set to 0, rollback to the last revision.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollingUpdateDeployment\": {\n    \"description\": \"Spec to control the desired behavior of rolling update.\",\n    \"properties\": {\n     \"maxSurge\": {\n      \"description\": \"The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     },\n     \"maxUnavailable\": {\n      \"description\": \"The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollingUpdateStatefulSetStrategy\": {\n    \"description\": \"RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.\",\n    \"properties\": {\n     \"partition\": {\n      \"description\": \"Partition indicates the ordinal at which the StatefulSet should be partitioned.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.Scale\": {\n    \"description\": \"Scale represents a scaling request for a resource.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ScaleSpec\"\n     },\n     \"status\": {\n      \"description\": \"current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.ScaleStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Scale\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.ScaleSpec\": {\n    \"description\": \"ScaleSpec describes the attributes of a scale subresource\",\n    \"properties\": {\n     \"replicas\": {\n      \"description\": \"desired number of instances for the scaled object.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.ScaleStatus\": {\n    \"description\": \"ScaleStatus represents the current status of a scale subresource.\",\n    \"required\": [\n     \"replicas\"\n    ],\n    \"properties\": {\n     \"replicas\": {\n      \"description\": \"actual number of observed instances of the scaled object.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"targetSelector\": {\n      \"description\": \"label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet\": {\n    \"description\": \"StatefulSet represents a set of pods with consistent identities. Identities are defined as:\\n - Network: A single stable DNS and hostname.\\n - Storage: As many VolumeClaims as requested.\\nThe StatefulSet guarantees that a given network identity will always map to the same storage identity.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the desired identities of pods in this set.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StatefulSet\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetList\": {\n    \"description\": \"StatefulSetList is a collection of StatefulSets.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"apps\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StatefulSetList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetSpec\": {\n    \"description\": \"A StatefulSetSpec is the specification of a StatefulSet.\",\n    \"required\": [\n     \"template\",\n     \"serviceName\"\n    ],\n    \"properties\": {\n     \"podManagementPolicy\": {\n      \"description\": \"podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.\",\n      \"type\": \"string\"\n     },\n     \"replicas\": {\n      \"description\": \"replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"revisionHistoryLimit\": {\n      \"description\": \"revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"selector is a label query over pods that should match the replica count. If empty, defaulted to labels on the pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"serviceName\": {\n      \"description\": \"serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \\\"pod-specific-string\\\" is managed by the StatefulSet controller.\",\n      \"type\": \"string\"\n     },\n     \"template\": {\n      \"description\": \"template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec\"\n     },\n     \"updateStrategy\": {\n      \"description\": \"updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetUpdateStrategy\"\n     },\n     \"volumeClaimTemplates\": {\n      \"description\": \"volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetStatus\": {\n    \"description\": \"StatefulSetStatus represents the current state of a StatefulSet.\",\n    \"required\": [\n     \"replicas\"\n    ],\n    \"properties\": {\n     \"currentReplicas\": {\n      \"description\": \"currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"currentRevision\": {\n      \"description\": \"currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).\",\n      \"type\": \"string\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"readyReplicas\": {\n      \"description\": \"readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"replicas is the number of Pods created by the StatefulSet controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"updateRevision\": {\n      \"description\": \"updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)\",\n      \"type\": \"string\"\n     },\n     \"updatedReplicas\": {\n      \"description\": \"updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetUpdateStrategy\": {\n    \"description\": \"StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.\",\n    \"properties\": {\n     \"rollingUpdate\": {\n      \"description\": \"RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollingUpdateStatefulSetStrategy\"\n     },\n     \"type\": {\n      \"description\": \"Type indicates the type of the StatefulSetUpdateStrategy.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReview\": {\n    \"description\": \"TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver.\",\n    \"required\": [\n     \"spec\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec holds information about the request being evaluated\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReviewSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is filled in by the server and indicates whether the request can be authenticated.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReviewStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"authentication.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"TokenReview\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReviewSpec\": {\n    \"description\": \"TokenReviewSpec is a description of the token authentication request.\",\n    \"properties\": {\n     \"token\": {\n      \"description\": \"Token is the opaque bearer token.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReviewStatus\": {\n    \"description\": \"TokenReviewStatus is the result of the token authentication request.\",\n    \"properties\": {\n     \"authenticated\": {\n      \"description\": \"Authenticated indicates that the token was associated with a known user.\",\n      \"type\": \"boolean\"\n     },\n     \"error\": {\n      \"description\": \"Error indicates that the token couldn't be checked\",\n      \"type\": \"string\"\n     },\n     \"user\": {\n      \"description\": \"User is the UserInfo associated with the provided token.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authentication.v1.UserInfo\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.authentication.v1.UserInfo\": {\n    \"description\": \"UserInfo holds the information about the user needed to implement the user.Info interface.\",\n    \"properties\": {\n     \"extra\": {\n      \"description\": \"Any additional information provided by the authenticator.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"array\",\n       \"items\": {\n        \"type\": \"string\"\n       }\n      }\n     },\n     \"groups\": {\n      \"description\": \"The names of groups this user is a part of.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"uid\": {\n      \"description\": \"A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.\",\n      \"type\": \"string\"\n     },\n     \"username\": {\n      \"description\": \"The name that uniquely identifies this user among all active users.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.authentication.v1beta1.TokenReview\": {\n    \"description\": \"TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver.\",\n    \"required\": [\n     \"spec\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec holds information about the request being evaluated\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authentication.v1beta1.TokenReviewSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is filled in by the server and indicates whether the request can be authenticated.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authentication.v1beta1.TokenReviewStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"authentication.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"TokenReview\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.authentication.v1beta1.TokenReviewSpec\": {\n    \"description\": \"TokenReviewSpec is a description of the token authentication request.\",\n    \"properties\": {\n     \"token\": {\n      \"description\": \"Token is the opaque bearer token.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.authentication.v1beta1.TokenReviewStatus\": {\n    \"description\": \"TokenReviewStatus is the result of the token authentication request.\",\n    \"properties\": {\n     \"authenticated\": {\n      \"description\": \"Authenticated indicates that the token was associated with a known user.\",\n      \"type\": \"boolean\"\n     },\n     \"error\": {\n      \"description\": \"Error indicates that the token couldn't be checked\",\n      \"type\": \"string\"\n     },\n     \"user\": {\n      \"description\": \"User is the UserInfo associated with the provided token.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authentication.v1beta1.UserInfo\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.authentication.v1beta1.UserInfo\": {\n    \"description\": \"UserInfo holds the information about the user needed to implement the user.Info interface.\",\n    \"properties\": {\n     \"extra\": {\n      \"description\": \"Any additional information provided by the authenticator.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"array\",\n       \"items\": {\n        \"type\": \"string\"\n       }\n      }\n     },\n     \"groups\": {\n      \"description\": \"The names of groups this user is a part of.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"uid\": {\n      \"description\": \"A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.\",\n      \"type\": \"string\"\n     },\n     \"username\": {\n      \"description\": \"The name that uniquely identifies this user among all active users.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1.LocalSubjectAccessReview\": {\n    \"description\": \"LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking.\",\n    \"required\": [\n     \"spec\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace you made the request against.  If empty, it is defaulted.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is filled in by the server and indicates whether the request is allowed or not\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"authorization.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"LocalSubjectAccessReview\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1.NonResourceAttributes\": {\n    \"description\": \"NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface\",\n    \"properties\": {\n     \"path\": {\n      \"description\": \"Path is the URL path of the request\",\n      \"type\": \"string\"\n     },\n     \"verb\": {\n      \"description\": \"Verb is the standard HTTP verb\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1.ResourceAttributes\": {\n    \"description\": \"ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface\",\n    \"properties\": {\n     \"group\": {\n      \"description\": \"Group is the API Group of the Resource.  \\\"*\\\" means all.\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name is the name of the resource being requested for a \\\"get\\\" or deleted for a \\\"delete\\\". \\\"\\\" (empty) means all.\",\n      \"type\": \"string\"\n     },\n     \"namespace\": {\n      \"description\": \"Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \\\"\\\" (empty) is defaulted for LocalSubjectAccessReviews \\\"\\\" (empty) is empty for cluster-scoped resources \\\"\\\" (empty) means \\\"all\\\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\",\n      \"type\": \"string\"\n     },\n     \"resource\": {\n      \"description\": \"Resource is one of the existing resource types.  \\\"*\\\" means all.\",\n      \"type\": \"string\"\n     },\n     \"subresource\": {\n      \"description\": \"Subresource is one of the existing resource types.  \\\"\\\" means none.\",\n      \"type\": \"string\"\n     },\n     \"verb\": {\n      \"description\": \"Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \\\"*\\\" means all.\",\n      \"type\": \"string\"\n     },\n     \"version\": {\n      \"description\": \"Version is the API Version of the Resource.  \\\"*\\\" means all.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1.SelfSubjectAccessReview\": {\n    \"description\": \"SelfSubjectAccessReview checks whether or the current user can perform an action.  Not filling in a spec.namespace means \\\"in all namespaces\\\".  Self is a special case, because users should always be able to check whether they can perform an action\",\n    \"required\": [\n     \"spec\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec holds information about the request being evaluated.  user and groups must be empty\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.SelfSubjectAccessReviewSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is filled in by the server and indicates whether the request is allowed or not\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"authorization.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"SelfSubjectAccessReview\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1.SelfSubjectAccessReviewSpec\": {\n    \"description\": \"SelfSubjectAccessReviewSpec is a description of the access request.  Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set\",\n    \"properties\": {\n     \"nonResourceAttributes\": {\n      \"description\": \"NonResourceAttributes describes information for a non-resource access request\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.NonResourceAttributes\"\n     },\n     \"resourceAttributes\": {\n      \"description\": \"ResourceAuthorizationAttributes describes information for a resource access request\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.ResourceAttributes\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReview\": {\n    \"description\": \"SubjectAccessReview checks whether or not a user or group can perform an action.\",\n    \"required\": [\n     \"spec\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec holds information about the request being evaluated\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is filled in by the server and indicates whether the request is allowed or not\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"authorization.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"SubjectAccessReview\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewSpec\": {\n    \"description\": \"SubjectAccessReviewSpec is a description of the access request.  Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set\",\n    \"properties\": {\n     \"extra\": {\n      \"description\": \"Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"array\",\n       \"items\": {\n        \"type\": \"string\"\n       }\n      }\n     },\n     \"groups\": {\n      \"description\": \"Groups is the groups you're testing for.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"nonResourceAttributes\": {\n      \"description\": \"NonResourceAttributes describes information for a non-resource access request\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.NonResourceAttributes\"\n     },\n     \"resourceAttributes\": {\n      \"description\": \"ResourceAuthorizationAttributes describes information for a resource access request\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1.ResourceAttributes\"\n     },\n     \"user\": {\n      \"description\": \"User is the user you're testing for. If you specify \\\"User\\\" but not \\\"Groups\\\", then is it interpreted as \\\"What if User were not a member of any groups\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewStatus\": {\n    \"description\": \"SubjectAccessReviewStatus\",\n    \"required\": [\n     \"allowed\"\n    ],\n    \"properties\": {\n     \"allowed\": {\n      \"description\": \"Allowed is required.  True if the action would be allowed, false otherwise.\",\n      \"type\": \"boolean\"\n     },\n     \"evaluationError\": {\n      \"description\": \"EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"Reason is optional.  It indicates why a request was allowed or denied.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.LocalSubjectAccessReview\": {\n    \"description\": \"LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking.\",\n    \"required\": [\n     \"spec\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec holds information about the request being evaluated.  spec.namespace must be equal to the namespace you made the request against.  If empty, it is defaulted.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReviewSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is filled in by the server and indicates whether the request is allowed or not\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReviewStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"LocalSubjectAccessReview\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.NonResourceAttributes\": {\n    \"description\": \"NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface\",\n    \"properties\": {\n     \"path\": {\n      \"description\": \"Path is the URL path of the request\",\n      \"type\": \"string\"\n     },\n     \"verb\": {\n      \"description\": \"Verb is the standard HTTP verb\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.ResourceAttributes\": {\n    \"description\": \"ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface\",\n    \"properties\": {\n     \"group\": {\n      \"description\": \"Group is the API Group of the Resource.  \\\"*\\\" means all.\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name is the name of the resource being requested for a \\\"get\\\" or deleted for a \\\"delete\\\". \\\"\\\" (empty) means all.\",\n      \"type\": \"string\"\n     },\n     \"namespace\": {\n      \"description\": \"Namespace is the namespace of the action being requested.  Currently, there is no distinction between no namespace and all namespaces \\\"\\\" (empty) is defaulted for LocalSubjectAccessReviews \\\"\\\" (empty) is empty for cluster-scoped resources \\\"\\\" (empty) means \\\"all\\\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview\",\n      \"type\": \"string\"\n     },\n     \"resource\": {\n      \"description\": \"Resource is one of the existing resource types.  \\\"*\\\" means all.\",\n      \"type\": \"string\"\n     },\n     \"subresource\": {\n      \"description\": \"Subresource is one of the existing resource types.  \\\"\\\" means none.\",\n      \"type\": \"string\"\n     },\n     \"verb\": {\n      \"description\": \"Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy.  \\\"*\\\" means all.\",\n      \"type\": \"string\"\n     },\n     \"version\": {\n      \"description\": \"Version is the API Version of the Resource.  \\\"*\\\" means all.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SelfSubjectAccessReview\": {\n    \"description\": \"SelfSubjectAccessReview checks whether or the current user can perform an action.  Not filling in a spec.namespace means \\\"in all namespaces\\\".  Self is a special case, because users should always be able to check whether they can perform an action\",\n    \"required\": [\n     \"spec\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec holds information about the request being evaluated.  user and groups must be empty\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SelfSubjectAccessReviewSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is filled in by the server and indicates whether the request is allowed or not\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReviewStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"SelfSubjectAccessReview\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SelfSubjectAccessReviewSpec\": {\n    \"description\": \"SelfSubjectAccessReviewSpec is a description of the access request.  Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set\",\n    \"properties\": {\n     \"nonResourceAttributes\": {\n      \"description\": \"NonResourceAttributes describes information for a non-resource access request\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.NonResourceAttributes\"\n     },\n     \"resourceAttributes\": {\n      \"description\": \"ResourceAuthorizationAttributes describes information for a resource access request\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.ResourceAttributes\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReview\": {\n    \"description\": \"SubjectAccessReview checks whether or not a user or group can perform an action.\",\n    \"required\": [\n     \"spec\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec holds information about the request being evaluated\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReviewSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is filled in by the server and indicates whether the request is allowed or not\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReviewStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"SubjectAccessReview\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReviewSpec\": {\n    \"description\": \"SubjectAccessReviewSpec is a description of the access request.  Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set\",\n    \"properties\": {\n     \"extra\": {\n      \"description\": \"Extra corresponds to the user.Info.GetExtra() method from the authenticator.  Since that is input to the authorizer it needs a reflection here.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"array\",\n       \"items\": {\n        \"type\": \"string\"\n       }\n      }\n     },\n     \"group\": {\n      \"description\": \"Groups is the groups you're testing for.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"nonResourceAttributes\": {\n      \"description\": \"NonResourceAttributes describes information for a non-resource access request\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.NonResourceAttributes\"\n     },\n     \"resourceAttributes\": {\n      \"description\": \"ResourceAuthorizationAttributes describes information for a resource access request\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.authorization.v1beta1.ResourceAttributes\"\n     },\n     \"user\": {\n      \"description\": \"User is the user you're testing for. If you specify \\\"User\\\" but not \\\"Group\\\", then is it interpreted as \\\"What if User were not a member of any groups\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReviewStatus\": {\n    \"description\": \"SubjectAccessReviewStatus\",\n    \"required\": [\n     \"allowed\"\n    ],\n    \"properties\": {\n     \"allowed\": {\n      \"description\": \"Allowed is required.  True if the action would be allowed, false otherwise.\",\n      \"type\": \"boolean\"\n     },\n     \"evaluationError\": {\n      \"description\": \"EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"Reason is optional.  It indicates why a request was allowed or denied.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v1.CrossVersionObjectReference\": {\n    \"description\": \"CrossVersionObjectReference contains enough information to let you identify the referred resource.\",\n    \"required\": [\n     \"kind\",\n     \"name\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"API version of the referent\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\\\"\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler\": {\n    \"description\": \"configuration of a horizontal pod autoscaler.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"behaviour of autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerSpec\"\n     },\n     \"status\": {\n      \"description\": \"current information about the autoscaler.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"autoscaling\",\n      \"version\": \"v1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerList\": {\n    \"description\": \"list of horizontal pod autoscaler objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"list of horizontal pod autoscaler objects.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"autoscaling\",\n      \"version\": \"v1\",\n      \"kind\": \"HorizontalPodAutoscalerList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerSpec\": {\n    \"description\": \"specification of a horizontal pod autoscaler.\",\n    \"required\": [\n     \"scaleTargetRef\",\n     \"maxReplicas\"\n    ],\n    \"properties\": {\n     \"maxReplicas\": {\n      \"description\": \"upper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"minReplicas\": {\n      \"description\": \"lower limit for the number of pods that can be set by the autoscaler, default 1.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"scaleTargetRef\": {\n      \"description\": \"reference to scaled resource; horizontal pod autoscaler will learn the current resource consumption and will set the desired number of pods by using its Scale subresource.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.CrossVersionObjectReference\"\n     },\n     \"targetCPUUtilizationPercentage\": {\n      \"description\": \"target average CPU utilization (represented as a percentage of requested CPU) over all the pods; if not specified the default autoscaling policy will be used.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerStatus\": {\n    \"description\": \"current status of a horizontal pod autoscaler\",\n    \"required\": [\n     \"currentReplicas\",\n     \"desiredReplicas\"\n    ],\n    \"properties\": {\n     \"currentCPUUtilizationPercentage\": {\n      \"description\": \"current average CPU utilization over all pods, represented as a percentage of requested CPU, e.g. 70 means that an average pod is using now 70% of its requested CPU.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"currentReplicas\": {\n      \"description\": \"current number of replicas of pods managed by this autoscaler.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"desiredReplicas\": {\n      \"description\": \"desired number of replicas of pods managed by this autoscaler.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"lastScaleTime\": {\n      \"description\": \"last time the HorizontalPodAutoscaler scaled the number of pods; used by the autoscaler to control how often the number of pods is changed.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"most recent generation observed by this autoscaler.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v1.Scale\": {\n    \"description\": \"Scale represents a scaling request for a resource.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.ScaleSpec\"\n     },\n     \"status\": {\n      \"description\": \"current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v1.ScaleStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"autoscaling\",\n      \"version\": \"v1\",\n      \"kind\": \"Scale\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v1.ScaleSpec\": {\n    \"description\": \"ScaleSpec describes the attributes of a scale subresource.\",\n    \"properties\": {\n     \"replicas\": {\n      \"description\": \"desired number of instances for the scaled object.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v1.ScaleStatus\": {\n    \"description\": \"ScaleStatus represents the current status of a scale subresource.\",\n    \"required\": [\n     \"replicas\"\n    ],\n    \"properties\": {\n     \"replicas\": {\n      \"description\": \"actual number of observed instances of the scaled object.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"label query over pods that should match the replicas count. This is same as the label selector but in the string format to avoid introspection by clients. The string will be in the same format as the query-param syntax. More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.CrossVersionObjectReference\": {\n    \"description\": \"CrossVersionObjectReference contains enough information to let you identify the referred resource.\",\n    \"required\": [\n     \"kind\",\n     \"name\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"API version of the referent\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\\\"\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler\": {\n    \"description\": \"HorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerSpec\"\n     },\n     \"status\": {\n      \"description\": \"status is the current information about the autoscaler.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"autoscaling\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"HorizontalPodAutoscaler\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerCondition\": {\n    \"description\": \"HorizontalPodAutoscalerCondition describes the state of a HorizontalPodAutoscaler at a certain point.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"lastTransitionTime is the last time the condition transitioned from one status to another\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"message is a human-readable explanation containing details about the transition\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"reason is the reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"status is the status of the condition (True, False, Unknown)\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"type describes the current condition\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerList\": {\n    \"description\": \"HorizontalPodAutoscaler is a list of horizontal pod autoscaler objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"items is the list of horizontal pod autoscaler objects.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"metadata is the standard list metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"autoscaling\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"HorizontalPodAutoscalerList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerSpec\": {\n    \"description\": \"HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler.\",\n    \"required\": [\n     \"scaleTargetRef\",\n     \"maxReplicas\"\n    ],\n    \"properties\": {\n     \"maxReplicas\": {\n      \"description\": \"maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"metrics\": {\n      \"description\": \"metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used).  The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods.  Ergo, metrics used must decrease as the pod count is increased, and vice-versa.  See the individual metric source types for more information about how each type of metric must respond.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.MetricSpec\"\n      }\n     },\n     \"minReplicas\": {\n      \"description\": \"minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"scaleTargetRef\": {\n      \"description\": \"scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.CrossVersionObjectReference\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerStatus\": {\n    \"description\": \"HorizontalPodAutoscalerStatus describes the current status of a horizontal pod autoscaler.\",\n    \"required\": [\n     \"currentReplicas\",\n     \"desiredReplicas\",\n     \"currentMetrics\",\n     \"conditions\"\n    ],\n    \"properties\": {\n     \"conditions\": {\n      \"description\": \"conditions is the set of conditions required for this autoscaler to scale its target, and indicates whether or not those conditions are met.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerCondition\"\n      }\n     },\n     \"currentMetrics\": {\n      \"description\": \"currentMetrics is the last read state of the metrics used by this autoscaler.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.MetricStatus\"\n      }\n     },\n     \"currentReplicas\": {\n      \"description\": \"currentReplicas is current number of replicas of pods managed by this autoscaler, as last seen by the autoscaler.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"desiredReplicas\": {\n      \"description\": \"desiredReplicas is the desired number of replicas of pods managed by this autoscaler, as last calculated by the autoscaler.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"lastScaleTime\": {\n      \"description\": \"lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods, used by the autoscaler to control how often the number of pods is changed.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"observedGeneration is the most recent generation observed by this autoscaler.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.MetricSpec\": {\n    \"description\": \"MetricSpec specifies how to scale based on a single metric (only `type` and one other matching field should be set at once).\",\n    \"required\": [\n     \"type\"\n    ],\n    \"properties\": {\n     \"object\": {\n      \"description\": \"object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.ObjectMetricSource\"\n     },\n     \"pods\": {\n      \"description\": \"pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second).  The values will be averaged together before being compared to the target value.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.PodsMetricSource\"\n     },\n     \"resource\": {\n      \"description\": \"resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \\\"pods\\\" source.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.ResourceMetricSource\"\n     },\n     \"type\": {\n      \"description\": \"type is the type of metric source.  It should match one of the fields below.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.MetricStatus\": {\n    \"description\": \"MetricStatus describes the last-read state of a single metric.\",\n    \"required\": [\n     \"type\"\n    ],\n    \"properties\": {\n     \"object\": {\n      \"description\": \"object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.ObjectMetricStatus\"\n     },\n     \"pods\": {\n      \"description\": \"pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second).  The values will be averaged together before being compared to the target value.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.PodsMetricStatus\"\n     },\n     \"resource\": {\n      \"description\": \"resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \\\"pods\\\" source.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.ResourceMetricStatus\"\n     },\n     \"type\": {\n      \"description\": \"type is the type of metric source.  It will match one of the fields below.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.ObjectMetricSource\": {\n    \"description\": \"ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).\",\n    \"required\": [\n     \"target\",\n     \"metricName\",\n     \"targetValue\"\n    ],\n    \"properties\": {\n     \"metricName\": {\n      \"description\": \"metricName is the name of the metric in question.\",\n      \"type\": \"string\"\n     },\n     \"target\": {\n      \"description\": \"target is the described Kubernetes object.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.CrossVersionObjectReference\"\n     },\n     \"targetValue\": {\n      \"description\": \"targetValue is the target value of the metric (as a quantity).\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.ObjectMetricStatus\": {\n    \"description\": \"ObjectMetricStatus indicates the current value of a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).\",\n    \"required\": [\n     \"target\",\n     \"metricName\",\n     \"currentValue\"\n    ],\n    \"properties\": {\n     \"currentValue\": {\n      \"description\": \"currentValue is the current value of the metric (as a quantity).\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n     },\n     \"metricName\": {\n      \"description\": \"metricName is the name of the metric in question.\",\n      \"type\": \"string\"\n     },\n     \"target\": {\n      \"description\": \"target is the described Kubernetes object.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.CrossVersionObjectReference\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.PodsMetricSource\": {\n    \"description\": \"PodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.\",\n    \"required\": [\n     \"metricName\",\n     \"targetAverageValue\"\n    ],\n    \"properties\": {\n     \"metricName\": {\n      \"description\": \"metricName is the name of the metric in question\",\n      \"type\": \"string\"\n     },\n     \"targetAverageValue\": {\n      \"description\": \"targetAverageValue is the target value of the average of the metric across all relevant pods (as a quantity)\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.PodsMetricStatus\": {\n    \"description\": \"PodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second).\",\n    \"required\": [\n     \"metricName\",\n     \"currentAverageValue\"\n    ],\n    \"properties\": {\n     \"currentAverageValue\": {\n      \"description\": \"currentAverageValue is the current value of the average of the metric across all relevant pods (as a quantity)\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n     },\n     \"metricName\": {\n      \"description\": \"metricName is the name of the metric in question\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.ResourceMetricSource\": {\n    \"description\": \"ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory).  The values will be averaged together before being compared to the target.  Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \\\"pods\\\" source.  Only one \\\"target\\\" type should be set.\",\n    \"required\": [\n     \"name\"\n    ],\n    \"properties\": {\n     \"name\": {\n      \"description\": \"name is the name of the resource in question.\",\n      \"type\": \"string\"\n     },\n     \"targetAverageUtilization\": {\n      \"description\": \"targetAverageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"targetAverageValue\": {\n      \"description\": \"targetAverageValue is the target value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \\\"pods\\\" metric source type.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.ResourceMetricStatus\": {\n    \"description\": \"ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory).  Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \\\"pods\\\" source.\",\n    \"required\": [\n     \"name\",\n     \"currentAverageValue\"\n    ],\n    \"properties\": {\n     \"currentAverageUtilization\": {\n      \"description\": \"currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.  It will only be present if `targetAverageValue` was set in the corresponding metric specification.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"currentAverageValue\": {\n      \"description\": \"currentAverageValue is the current value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \\\"pods\\\" metric source type. It will always be set, regardless of the corresponding metric specification.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity\"\n     },\n     \"name\": {\n      \"description\": \"name is the name of the resource in question.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.batch.v1.Job\": {\n    \"description\": \"Job represents the configuration of a single job.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.JobSpec\"\n     },\n     \"status\": {\n      \"description\": \"Current status of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.JobStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"batch\",\n      \"version\": \"v1\",\n      \"kind\": \"Job\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.batch.v1.JobCondition\": {\n    \"description\": \"JobCondition describes current state of a job.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastProbeTime\": {\n      \"description\": \"Last time the condition was checked.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transit from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"Human readable message indicating details about last transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"(brief) reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of job condition, Complete or Failed.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.batch.v1.JobList\": {\n    \"description\": \"JobList is a collection of jobs.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"items is the list of Jobs.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.Job\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"batch\",\n      \"version\": \"v1\",\n      \"kind\": \"JobList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.batch.v1.JobSpec\": {\n    \"description\": \"JobSpec describes how the job execution will look like.\",\n    \"required\": [\n     \"template\"\n    ],\n    \"properties\": {\n     \"activeDeadlineSeconds\": {\n      \"description\": \"Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"completions\": {\n      \"description\": \"Specifies the desired number of successfully finished pods the job should be run with.  Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value.  Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"manualSelector\": {\n      \"description\": \"manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template.  When true, the user is responsible for picking unique labels and specifying the selector.  Failure to pick a unique label may cause this and other jobs to not function correctly.  However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://git.k8s.io/community/contributors/design-proposals/selector-generation.md\",\n      \"type\": \"boolean\"\n     },\n     \"parallelism\": {\n      \"description\": \"Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) \\u003c .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"template\": {\n      \"description\": \"Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.batch.v1.JobStatus\": {\n    \"description\": \"JobStatus represents the current state of a Job.\",\n    \"properties\": {\n     \"active\": {\n      \"description\": \"The number of actively running pods.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"completionTime\": {\n      \"description\": \"Represents time when the job was completed. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"conditions\": {\n      \"description\": \"The latest available observations of an object's current state. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.JobCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"failed\": {\n      \"description\": \"The number of pods which reached phase Failed.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"startTime\": {\n      \"description\": \"Represents time when the job was acknowledged by the job controller. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"succeeded\": {\n      \"description\": \"The number of pods which reached phase Succeeded.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\": {\n    \"description\": \"CronJob represents the configuration of a single cron job.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobSpec\"\n     },\n     \"status\": {\n      \"description\": \"Current status of a cron job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"CronJob\"\n     },\n     {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"ScheduledJob\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobList\": {\n    \"description\": \"CronJobList is a collection of cron jobs.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"items is the list of CronJobs.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"CronJobList\"\n     },\n     {\n      \"group\": \"batch\",\n      \"version\": \"v2alpha1\",\n      \"kind\": \"ScheduledJobList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobSpec\": {\n    \"description\": \"CronJobSpec describes how the job execution will look like and when it will actually run.\",\n    \"required\": [\n     \"schedule\",\n     \"jobTemplate\"\n    ],\n    \"properties\": {\n     \"concurrencyPolicy\": {\n      \"description\": \"Specifies how to treat concurrent executions of a Job. Defaults to Allow.\",\n      \"type\": \"string\"\n     },\n     \"failedJobsHistoryLimit\": {\n      \"description\": \"The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"jobTemplate\": {\n      \"description\": \"Specifies the job that will be created when executing a CronJob.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v2alpha1.JobTemplateSpec\"\n     },\n     \"schedule\": {\n      \"description\": \"The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.\",\n      \"type\": \"string\"\n     },\n     \"startingDeadlineSeconds\": {\n      \"description\": \"Optional deadline in seconds for starting the job if it misses scheduled time for any reason.  Missed jobs executions will be counted as failed ones.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"successfulJobsHistoryLimit\": {\n      \"description\": \"The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"suspend\": {\n      \"description\": \"This flag tells the controller to suspend subsequent executions, it does not apply to already started executions.  Defaults to false.\",\n      \"type\": \"boolean\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobStatus\": {\n    \"description\": \"CronJobStatus represents the current state of a cron job.\",\n    \"properties\": {\n     \"active\": {\n      \"description\": \"A list of pointers to currently running jobs.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.ObjectReference\"\n      }\n     },\n     \"lastScheduleTime\": {\n      \"description\": \"Information when was the last time the job was successfully scheduled.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.batch.v2alpha1.JobTemplateSpec\": {\n    \"description\": \"JobTemplateSpec describes the data a Job should have when created from a template\",\n    \"properties\": {\n     \"metadata\": {\n      \"description\": \"Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.batch.v1.JobSpec\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest\": {\n    \"description\": \"Describes a certificate signing request\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"The certificate request itself and any additional information.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestSpec\"\n     },\n     \"status\": {\n      \"description\": \"Derived information about the request.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"certificates.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"CertificateSigningRequest\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestCondition\": {\n    \"required\": [\n     \"type\"\n    ],\n    \"properties\": {\n     \"lastUpdateTime\": {\n      \"description\": \"timestamp for the last update to this condition\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"human readable message with details about the request state\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"brief reason for the request state\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"request approval state, currently Approved or Denied.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestList\": {\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"certificates.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"CertificateSigningRequestList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestSpec\": {\n    \"description\": \"This information is immutable after the request is created. Only the Request and Usages fields can be set on creation, other fields are derived by Kubernetes and cannot be modified by users.\",\n    \"required\": [\n     \"request\"\n    ],\n    \"properties\": {\n     \"extra\": {\n      \"description\": \"Extra information about the requesting user. See user.Info interface for details.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"array\",\n       \"items\": {\n        \"type\": \"string\"\n       }\n      }\n     },\n     \"groups\": {\n      \"description\": \"Group information about the requesting user. See user.Info interface for details.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"request\": {\n      \"description\": \"Base64-encoded PKCS#10 CSR data\",\n      \"type\": \"string\",\n      \"format\": \"byte\"\n     },\n     \"uid\": {\n      \"description\": \"UID information about the requesting user. See user.Info interface for details.\",\n      \"type\": \"string\"\n     },\n     \"usages\": {\n      \"description\": \"allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3\\n     https://tools.ietf.org/html/rfc5280#section-4.2.1.12\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"username\": {\n      \"description\": \"Information about the requesting user. See user.Info interface for details.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestStatus\": {\n    \"properties\": {\n     \"certificate\": {\n      \"description\": \"If request was approved, the controller will place the issued certificate here.\",\n      \"type\": \"string\",\n      \"format\": \"byte\"\n     },\n     \"conditions\": {\n      \"description\": \"Conditions applied to the request, such as approval or denial.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestCondition\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.APIVersion\": {\n    \"description\": \"An APIVersion represents a single concrete version of an object model.\",\n    \"properties\": {\n     \"name\": {\n      \"description\": \"Name of this version (e.g. 'v1').\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet\": {\n    \"description\": \"DaemonSet represents the configuration of a daemon set.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetSpec\"\n     },\n     \"status\": {\n      \"description\": \"The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DaemonSet\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetList\": {\n    \"description\": \"DaemonSetList is a collection of daemon sets.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"A list of daemon sets.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DaemonSetList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetSpec\": {\n    \"description\": \"DaemonSetSpec is the specification of a daemon set.\",\n    \"required\": [\n     \"template\"\n    ],\n    \"properties\": {\n     \"minReadySeconds\": {\n      \"description\": \"The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"revisionHistoryLimit\": {\n      \"description\": \"The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"A label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"template\": {\n      \"description\": \"An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec\"\n     },\n     \"templateGeneration\": {\n      \"description\": \"DEPRECATED. A sequence number representing a specific generation of the template. Populated by the system. It can be set only during the creation.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"updateStrategy\": {\n      \"description\": \"An update strategy to replace existing DaemonSet pods with new pods.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetUpdateStrategy\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetStatus\": {\n    \"description\": \"DaemonSetStatus represents the current status of a daemon set.\",\n    \"required\": [\n     \"currentNumberScheduled\",\n     \"numberMisscheduled\",\n     \"desiredNumberScheduled\",\n     \"numberReady\"\n    ],\n    \"properties\": {\n     \"collisionCount\": {\n      \"description\": \"Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"currentNumberScheduled\": {\n      \"description\": \"The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"desiredNumberScheduled\": {\n      \"description\": \"The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"numberAvailable\": {\n      \"description\": \"The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"numberMisscheduled\": {\n      \"description\": \"The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"numberReady\": {\n      \"description\": \"The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"numberUnavailable\": {\n      \"description\": \"The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"The most recent generation observed by the daemon set controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"updatedNumberScheduled\": {\n      \"description\": \"The total number of nodes that are running updated daemon pod\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetUpdateStrategy\": {\n    \"properties\": {\n     \"rollingUpdate\": {\n      \"description\": \"Rolling update config params. Present only if type = \\\"RollingUpdate\\\".\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollingUpdateDaemonSet\"\n     },\n     \"type\": {\n      \"description\": \"Type of daemon set update. Can be \\\"RollingUpdate\\\" or \\\"OnDelete\\\". Default is OnDelete.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment\": {\n    \"description\": \"Deployment enables declarative updates for Pods and ReplicaSets.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior of the Deployment.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentSpec\"\n     },\n     \"status\": {\n      \"description\": \"Most recently observed status of the Deployment.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Deployment\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentCondition\": {\n    \"description\": \"DeploymentCondition describes the state of a deployment at a certain point.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"Last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"lastUpdateTime\": {\n      \"description\": \"The last time this condition was updated.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"A human readable message indicating details about the transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"The reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of deployment condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentList\": {\n    \"description\": \"DeploymentList is a list of Deployments.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of Deployments.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DeploymentList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentRollback\": {\n    \"description\": \"DeploymentRollback stores the information required to rollback a deployment.\",\n    \"required\": [\n     \"name\",\n     \"rollbackTo\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Required: This must match the Name of a deployment.\",\n      \"type\": \"string\"\n     },\n     \"rollbackTo\": {\n      \"description\": \"The config of this deployment rollback.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollbackConfig\"\n     },\n     \"updatedAnnotations\": {\n      \"description\": \"The annotations to be updated to a deployment\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"DeploymentRollback\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentSpec\": {\n    \"description\": \"DeploymentSpec is the specification of the desired behavior of the Deployment.\",\n    \"required\": [\n     \"template\"\n    ],\n    \"properties\": {\n     \"minReadySeconds\": {\n      \"description\": \"Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"paused\": {\n      \"description\": \"Indicates that the deployment is paused and will not be processed by the deployment controller.\",\n      \"type\": \"boolean\"\n     },\n     \"progressDeadlineSeconds\": {\n      \"description\": \"The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Once autoRollback is implemented, the deployment controller will automatically rollback failed deployments. Note that progress will not be estimated during the time a deployment is paused. This is not set by default.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"revisionHistoryLimit\": {\n      \"description\": \"The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"rollbackTo\": {\n      \"description\": \"The config this deployment is rolling back to. Will be cleared after rollback is done.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollbackConfig\"\n     },\n     \"selector\": {\n      \"description\": \"Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"strategy\": {\n      \"description\": \"The deployment strategy to use to replace existing pods with new ones.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentStrategy\"\n     },\n     \"template\": {\n      \"description\": \"Template describes the pods that will be created.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentStatus\": {\n    \"description\": \"DeploymentStatus is the most recently observed status of the Deployment.\",\n    \"properties\": {\n     \"availableReplicas\": {\n      \"description\": \"Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"collisionCount\": {\n      \"description\": \"Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"conditions\": {\n      \"description\": \"Represents the latest available observations of a deployment's current state.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"The generation observed by the deployment controller.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"readyReplicas\": {\n      \"description\": \"Total number of ready pods targeted by this deployment.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Total number of non-terminated pods targeted by this deployment (their labels match the selector).\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"unavailableReplicas\": {\n      \"description\": \"Total number of unavailable pods targeted by this deployment.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"updatedReplicas\": {\n      \"description\": \"Total number of non-terminated pods targeted by this deployment that have the desired template spec.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentStrategy\": {\n    \"description\": \"DeploymentStrategy describes how to replace existing pods with new ones.\",\n    \"properties\": {\n     \"rollingUpdate\": {\n      \"description\": \"Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollingUpdateDeployment\"\n     },\n     \"type\": {\n      \"description\": \"Type of deployment. Can be \\\"Recreate\\\" or \\\"RollingUpdate\\\". Default is RollingUpdate.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.FSGroupStrategyOptions\": {\n    \"description\": \"FSGroupStrategyOptions defines the strategy type and options used to create the strategy.\",\n    \"properties\": {\n     \"ranges\": {\n      \"description\": \"Ranges are the allowed ranges of fs groups.  If you would like to force a single fs group then supply a single range with the same start and end.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IDRange\"\n      }\n     },\n     \"rule\": {\n      \"description\": \"Rule is the strategy that will dictate what FSGroup is used in the SecurityContext.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HTTPIngressPath\": {\n    \"description\": \"HTTPIngressPath associates a path regex with a backend. Incoming urls matching the path are forwarded to the backend.\",\n    \"required\": [\n     \"backend\"\n    ],\n    \"properties\": {\n     \"backend\": {\n      \"description\": \"Backend defines the referenced service endpoint to which the traffic will be forwarded to.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressBackend\"\n     },\n     \"path\": {\n      \"description\": \"Path is an extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional \\\"path\\\" part of a URL as defined by RFC 3986. Paths must begin with a '/'. If unspecified, the path defaults to a catch all sending traffic to the backend.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HTTPIngressRuleValue\": {\n    \"description\": \"HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http://\\u003chost\\u003e/\\u003cpath\\u003e?\\u003csearchpart\\u003e -\\u003e backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'.\",\n    \"required\": [\n     \"paths\"\n    ],\n    \"properties\": {\n     \"paths\": {\n      \"description\": \"A collection of paths that map requests to backends.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HTTPIngressPath\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HostPortRange\": {\n    \"description\": \"Host Port Range defines a range of host ports that will be enabled by a policy for pods to use.  It requires both the start and end to be defined.\",\n    \"required\": [\n     \"min\",\n     \"max\"\n    ],\n    \"properties\": {\n     \"max\": {\n      \"description\": \"max is the end of the range, inclusive.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"min\": {\n      \"description\": \"min is the start of the range, inclusive.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IDRange\": {\n    \"description\": \"ID Range provides a min/max of an allowed range of IDs.\",\n    \"required\": [\n     \"min\",\n     \"max\"\n    ],\n    \"properties\": {\n     \"max\": {\n      \"description\": \"Max is the end of the range, inclusive.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"min\": {\n      \"description\": \"Min is the start of the range, inclusive.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress\": {\n    \"description\": \"Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is the current state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Ingress\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressBackend\": {\n    \"description\": \"IngressBackend describes all endpoints for a given service and port.\",\n    \"required\": [\n     \"serviceName\",\n     \"servicePort\"\n    ],\n    \"properties\": {\n     \"serviceName\": {\n      \"description\": \"Specifies the name of the referenced service.\",\n      \"type\": \"string\"\n     },\n     \"servicePort\": {\n      \"description\": \"Specifies the port of the referenced service.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressList\": {\n    \"description\": \"IngressList is a collection of Ingress.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of Ingress.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"IngressList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressRule\": {\n    \"description\": \"IngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue.\",\n    \"properties\": {\n     \"host\": {\n      \"description\": \"Host is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the \\\"host\\\" part of the URI as defined in the RFC: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the\\n\\t  IP in the Spec of the parent Ingress.\\n2. The `:` delimiter is not respected because ports are not allowed.\\n\\t  Currently the port of an Ingress is implicitly :80 for http and\\n\\t  :443 for https.\\nBoth these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.\",\n      \"type\": \"string\"\n     },\n     \"http\": {\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HTTPIngressRuleValue\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressSpec\": {\n    \"description\": \"IngressSpec describes the Ingress the user wishes to exist.\",\n    \"properties\": {\n     \"backend\": {\n      \"description\": \"A default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressBackend\"\n     },\n     \"rules\": {\n      \"description\": \"A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressRule\"\n      }\n     },\n     \"tls\": {\n      \"description\": \"TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressTLS\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressStatus\": {\n    \"description\": \"IngressStatus describe the current state of the Ingress.\",\n    \"properties\": {\n     \"loadBalancer\": {\n      \"description\": \"LoadBalancer contains the current status of the load-balancer.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.LoadBalancerStatus\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressTLS\": {\n    \"description\": \"IngressTLS describes the transport layer security associated with an Ingress.\",\n    \"properties\": {\n     \"hosts\": {\n      \"description\": \"Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"secretName\": {\n      \"description\": \"SecretName is the name of the secret used to terminate SSL traffic on 443. Field is left optional to allow SSL routing based on SNI hostname alone. If the SNI host in a listener conflicts with the \\\"Host\\\" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicy\": {\n    \"description\": \"NetworkPolicy describes what network traffic is allowed for a set of Pods\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior for this NetworkPolicy.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicySpec\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyIngressRule\": {\n    \"description\": \"This NetworkPolicyIngressRule matches traffic if and only if the traffic matches both ports AND from.\",\n    \"properties\": {\n     \"from\": {\n      \"description\": \"List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyPeer\"\n      }\n     },\n     \"ports\": {\n      \"description\": \"List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyPort\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyList\": {\n    \"description\": \"Network Policy List is a list of NetworkPolicy objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of schema objects.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicy\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"NetworkPolicyList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyPeer\": {\n    \"properties\": {\n     \"namespaceSelector\": {\n      \"description\": \"Selects Namespaces using cluster scoped-labels.  This matches all pods in all namespaces selected by this label selector. This field follows standard label selector semantics. If present but empty, this selector selects all namespaces.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"podSelector\": {\n      \"description\": \"This is a label selector which selects Pods in this namespace. This field follows standard label selector semantics. If present but empty, this selector selects all pods in this namespace.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyPort\": {\n    \"properties\": {\n     \"port\": {\n      \"description\": \"If specified, the port on the given protocol.  This can either be a numerical or named port on a pod.  If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     },\n     \"protocol\": {\n      \"description\": \"Optional.  The protocol (TCP or UDP) which traffic must match. If not specified, this field defaults to TCP.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicySpec\": {\n    \"required\": [\n     \"podSelector\"\n    ],\n    \"properties\": {\n     \"ingress\": {\n      \"description\": \"List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default).\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyIngressRule\"\n      }\n     },\n     \"podSelector\": {\n      \"description\": \"Selects the pods to which this NetworkPolicy object applies.  The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods.  In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicy\": {\n    \"description\": \"Pod Security Policy governs the ability to make requests that affect the Security Context that will be applied to a pod and container.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"spec defines the policy enforced.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicySpec\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodSecurityPolicy\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicyList\": {\n    \"description\": \"Pod Security Policy List is a list of PodSecurityPolicy objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of schema objects.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicy\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodSecurityPolicyList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicySpec\": {\n    \"description\": \"Pod Security Policy Spec defines the policy enforced.\",\n    \"required\": [\n     \"seLinux\",\n     \"runAsUser\",\n     \"supplementalGroups\",\n     \"fsGroup\"\n    ],\n    \"properties\": {\n     \"allowedCapabilities\": {\n      \"description\": \"AllowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both AllowedCapabilities and RequiredDropCapabilities.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"defaultAddCapabilities\": {\n      \"description\": \"DefaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability.  You may not list a capabiility in both DefaultAddCapabilities and RequiredDropCapabilities.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"fsGroup\": {\n      \"description\": \"FSGroup is the strategy that will dictate what fs group is used by the SecurityContext.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.FSGroupStrategyOptions\"\n     },\n     \"hostIPC\": {\n      \"description\": \"hostIPC determines if the policy allows the use of HostIPC in the pod spec.\",\n      \"type\": \"boolean\"\n     },\n     \"hostNetwork\": {\n      \"description\": \"hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.\",\n      \"type\": \"boolean\"\n     },\n     \"hostPID\": {\n      \"description\": \"hostPID determines if the policy allows the use of HostPID in the pod spec.\",\n      \"type\": \"boolean\"\n     },\n     \"hostPorts\": {\n      \"description\": \"hostPorts determines which host port ranges are allowed to be exposed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HostPortRange\"\n      }\n     },\n     \"privileged\": {\n      \"description\": \"privileged determines if a pod can request to be run as privileged.\",\n      \"type\": \"boolean\"\n     },\n     \"readOnlyRootFilesystem\": {\n      \"description\": \"ReadOnlyRootFilesystem when set to true will force containers to run with a read only root file system.  If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.\",\n      \"type\": \"boolean\"\n     },\n     \"requiredDropCapabilities\": {\n      \"description\": \"RequiredDropCapabilities are the capabilities that will be dropped from the container.  These are required to be dropped and cannot be added.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"runAsUser\": {\n      \"description\": \"runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RunAsUserStrategyOptions\"\n     },\n     \"seLinux\": {\n      \"description\": \"seLinux is the strategy that will dictate the allowable labels that may be set.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.SELinuxStrategyOptions\"\n     },\n     \"supplementalGroups\": {\n      \"description\": \"SupplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.SupplementalGroupsStrategyOptions\"\n     },\n     \"volumes\": {\n      \"description\": \"volumes is a white list of allowed volume plugins.  Empty indicates that all plugins may be used.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet\": {\n    \"description\": \"ReplicaSet represents the configuration of a ReplicaSet.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetSpec\"\n     },\n     \"status\": {\n      \"description\": \"Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ReplicaSet\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetCondition\": {\n    \"description\": \"ReplicaSetCondition describes the state of a replica set at a certain point.\",\n    \"required\": [\n     \"type\",\n     \"status\"\n    ],\n    \"properties\": {\n     \"lastTransitionTime\": {\n      \"description\": \"The last time the condition transitioned from one status to another.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n     },\n     \"message\": {\n      \"description\": \"A human readable message indicating details about the transition.\",\n      \"type\": \"string\"\n     },\n     \"reason\": {\n      \"description\": \"The reason for the condition's last transition.\",\n      \"type\": \"string\"\n     },\n     \"status\": {\n      \"description\": \"Status of the condition, one of True, False, Unknown.\",\n      \"type\": \"string\"\n     },\n     \"type\": {\n      \"description\": \"Type of replica set condition.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetList\": {\n    \"description\": \"ReplicaSetList is a collection of ReplicaSets.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ReplicaSetList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetSpec\": {\n    \"description\": \"ReplicaSetSpec is the specification of a ReplicaSet.\",\n    \"properties\": {\n     \"minReadySeconds\": {\n      \"description\": \"Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"Selector is a label query over pods that should match the replica count. If the selector is empty, it is defaulted to the labels present on the pod template. Label keys and values that must match in order to be controlled by this replica set. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"template\": {\n      \"description\": \"Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetStatus\": {\n    \"description\": \"ReplicaSetStatus represents the current status of a ReplicaSet.\",\n    \"required\": [\n     \"replicas\"\n    ],\n    \"properties\": {\n     \"availableReplicas\": {\n      \"description\": \"The number of available replicas (ready for at least minReadySeconds) for this replica set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"conditions\": {\n      \"description\": \"Represents the latest available observations of a replica set's current state.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetCondition\"\n      },\n      \"x-kubernetes-patch-merge-key\": \"type\",\n      \"x-kubernetes-patch-strategy\": \"merge\"\n     },\n     \"fullyLabeledReplicas\": {\n      \"description\": \"The number of pods that have labels matching the labels of the pod template of the replicaset.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"ObservedGeneration reflects the generation of the most recently observed ReplicaSet.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     },\n     \"readyReplicas\": {\n      \"description\": \"The number of ready replicas for this replica set.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"replicas\": {\n      \"description\": \"Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollbackConfig\": {\n    \"properties\": {\n     \"revision\": {\n      \"description\": \"The revision to rollback to. If set to 0, rollback to the last revision.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollingUpdateDaemonSet\": {\n    \"description\": \"Spec to control the desired behavior of daemon set rolling update.\",\n    \"properties\": {\n     \"maxUnavailable\": {\n      \"description\": \"The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollingUpdateDeployment\": {\n    \"description\": \"Spec to control the desired behavior of rolling update.\",\n    \"properties\": {\n     \"maxSurge\": {\n      \"description\": \"The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is atmost 130% of desired pods.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     },\n     \"maxUnavailable\": {\n      \"description\": \"The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RunAsUserStrategyOptions\": {\n    \"description\": \"Run A sUser Strategy Options defines the strategy type and any options used to create the strategy.\",\n    \"required\": [\n     \"rule\"\n    ],\n    \"properties\": {\n     \"ranges\": {\n      \"description\": \"Ranges are the allowed ranges of uids that may be used.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IDRange\"\n      }\n     },\n     \"rule\": {\n      \"description\": \"Rule is the strategy that will dictate the allowable RunAsUser values that may be set.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.SELinuxStrategyOptions\": {\n    \"description\": \"SELinux  Strategy Options defines the strategy type and any options used to create the strategy.\",\n    \"required\": [\n     \"rule\"\n    ],\n    \"properties\": {\n     \"rule\": {\n      \"description\": \"type is the strategy that will dictate the allowable labels that may be set.\",\n      \"type\": \"string\"\n     },\n     \"seLinuxOptions\": {\n      \"description\": \"seLinuxOptions required to run as; required for MustRunAs More info: https://git.k8s.io/community/contributors/design-proposals/security_context.md\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.SELinuxOptions\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale\": {\n    \"description\": \"represents a scaling request for a resource.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ScaleSpec\"\n     },\n     \"status\": {\n      \"description\": \"current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ScaleStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Scale\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ScaleSpec\": {\n    \"description\": \"describes the attributes of a scale subresource\",\n    \"properties\": {\n     \"replicas\": {\n      \"description\": \"desired number of instances for the scaled object.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ScaleStatus\": {\n    \"description\": \"represents the current status of a scale subresource.\",\n    \"required\": [\n     \"replicas\"\n    ],\n    \"properties\": {\n     \"replicas\": {\n      \"description\": \"actual number of observed instances of the scaled object.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"selector\": {\n      \"description\": \"label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"targetSelector\": {\n      \"description\": \"label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.SupplementalGroupsStrategyOptions\": {\n    \"description\": \"SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy.\",\n    \"properties\": {\n     \"ranges\": {\n      \"description\": \"Ranges are the allowed ranges of supplemental groups.  If you would like to force a single supplemental group then supply a single range with the same start and end.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IDRange\"\n      }\n     },\n     \"rule\": {\n      \"description\": \"Rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ThirdPartyResource\": {\n    \"description\": \"A ThirdPartyResource is a generic representation of a resource, it is used by add-ons and plugins to add new resource types to the API.  It consists of one or more Versions of the api.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"description\": {\n      \"description\": \"Description is the description of this object.\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"versions\": {\n      \"description\": \"Versions are versions for this third party object\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.APIVersion\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ThirdPartyResource\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ThirdPartyResourceList\": {\n    \"description\": \"ThirdPartyResourceList is a list of ThirdPartyResources.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of ThirdPartyResources.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ThirdPartyResource\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"extensions\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ThirdPartyResourceList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicy\": {\n    \"description\": \"NetworkPolicy describes what network traffic is allowed for a set of Pods\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior for this NetworkPolicy.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicySpec\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"networking.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"NetworkPolicy\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyIngressRule\": {\n    \"description\": \"NetworkPolicyIngressRule describes a particular set of traffic that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and from.\",\n    \"properties\": {\n     \"from\": {\n      \"description\": \"List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyPeer\"\n      }\n     },\n     \"ports\": {\n      \"description\": \"List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyPort\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyList\": {\n    \"description\": \"NetworkPolicyList is a list of NetworkPolicy objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of schema objects.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicy\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"networking.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"NetworkPolicyList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyPeer\": {\n    \"description\": \"NetworkPolicyPeer describes a peer to allow traffic from. Exactly one of its fields must be specified.\",\n    \"properties\": {\n     \"namespaceSelector\": {\n      \"description\": \"Selects Namespaces using cluster scoped-labels. This matches all pods in all namespaces selected by this label selector. This field follows standard label selector semantics. If present but empty, this selector selects all namespaces.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"podSelector\": {\n      \"description\": \"This is a label selector which selects Pods in this namespace. This field follows standard label selector semantics. If present but empty, this selector selects all pods in this namespace.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyPort\": {\n    \"description\": \"NetworkPolicyPort describes a port to allow traffic on\",\n    \"properties\": {\n     \"port\": {\n      \"description\": \"The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     },\n     \"protocol\": {\n      \"description\": \"The protocol (TCP or UDP) which traffic must match. If not specified, this field defaults to TCP.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicySpec\": {\n    \"description\": \"NetworkPolicySpec provides the specification of a NetworkPolicy\",\n    \"required\": [\n     \"podSelector\"\n    ],\n    \"properties\": {\n     \"ingress\": {\n      \"description\": \"List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default)\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyIngressRule\"\n      }\n     },\n     \"podSelector\": {\n      \"description\": \"Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.policy.v1beta1.Eviction\": {\n    \"description\": \"Eviction evicts a pod from its node subject to certain policies and safety constraints. This is a subresource of Pod.  A request to cause such an eviction is created by POSTing to .../pods/\\u003cpod name\\u003e/evictions.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"deleteOptions\": {\n      \"description\": \"DeleteOptions may be provided\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"ObjectMeta describes the pod that is being evicted.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"policy\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Eviction\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget\": {\n    \"description\": \"PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"description\": \"Specification of the desired behavior of the PodDisruptionBudget.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetSpec\"\n     },\n     \"status\": {\n      \"description\": \"Most recently observed status of the PodDisruptionBudget.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetStatus\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"policy\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodDisruptionBudget\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetList\": {\n    \"description\": \"PodDisruptionBudgetList is a collection of PodDisruptionBudgets.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"policy\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"PodDisruptionBudgetList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetSpec\": {\n    \"description\": \"PodDisruptionBudgetSpec is a description of a PodDisruptionBudget.\",\n    \"properties\": {\n     \"maxUnavailable\": {\n      \"description\": \"An eviction is allowed if at most \\\"maxUnavailable\\\" pods selected by \\\"selector\\\" are unavailable after the eviction, i.e. even in absence of the evicted pod. For example, one can prevent all voluntary evictions by specifying 0. This is a mutually exclusive setting with \\\"minAvailable\\\".\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     },\n     \"minAvailable\": {\n      \"description\": \"An eviction is allowed if at least \\\"minAvailable\\\" pods selected by \\\"selector\\\" will still be available after the eviction, i.e. even in the absence of the evicted pod.  So for example you can prevent all voluntary evictions by specifying \\\"100%\\\".\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString\"\n     },\n     \"selector\": {\n      \"description\": \"Label query over pods whose evictions are managed by the disruption budget.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetStatus\": {\n    \"description\": \"PodDisruptionBudgetStatus represents information about the status of a PodDisruptionBudget. Status may trail the actual state of a system.\",\n    \"required\": [\n     \"disruptedPods\",\n     \"disruptionsAllowed\",\n     \"currentHealthy\",\n     \"desiredHealthy\",\n     \"expectedPods\"\n    ],\n    \"properties\": {\n     \"currentHealthy\": {\n      \"description\": \"current number of healthy pods\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"desiredHealthy\": {\n      \"description\": \"minimum desired number of healthy pods\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"disruptedPods\": {\n      \"description\": \"DisruptedPods contains information about pods whose eviction was processed by the API server eviction subresource handler but has not yet been observed by the PodDisruptionBudget controller. A pod will be in this map from the time when the API server processed the eviction request to the time when the pod is seen by PDB controller as having been marked for deletion (or after a timeout). The key in the map is the name of the pod and the value is the time when the API server processed the eviction request. If the deletion didn't occur and a pod is still there it will be removed from the list automatically by PodDisruptionBudget controller after some time. If everything goes smooth this map should be empty for the most of the time. Large number of entries in the map may indicate problems with pod deletions.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time\"\n      }\n     },\n     \"disruptionsAllowed\": {\n      \"description\": \"Number of pod disruptions that are currently allowed.\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"expectedPods\": {\n      \"description\": \"total number of pods counted by this disruption budget\",\n      \"type\": \"integer\",\n      \"format\": \"int32\"\n     },\n     \"observedGeneration\": {\n      \"description\": \"Most recent generation observed when updating this PDB status. PodDisruptionsAllowed and other status informatio is valid only if observedGeneration equals to PDB's object generation.\",\n      \"type\": \"integer\",\n      \"format\": \"int64\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRole\": {\n    \"description\": \"ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.\",\n    \"required\": [\n     \"rules\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"rules\": {\n      \"description\": \"Rules holds all the PolicyRules for this ClusterRole\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.PolicyRule\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRole\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBinding\": {\n    \"description\": \"ClusterRoleBinding references a ClusterRole, but not contain it.  It can reference a ClusterRole in the global namespace, and adds who information via Subject.\",\n    \"required\": [\n     \"subjects\",\n     \"roleRef\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"roleRef\": {\n      \"description\": \"RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleRef\"\n     },\n     \"subjects\": {\n      \"description\": \"Subjects holds references to the objects the role applies to.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Subject\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRoleBinding\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBindingList\": {\n    \"description\": \"ClusterRoleBindingList is a collection of ClusterRoleBindings\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of ClusterRoleBindings\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBinding\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRoleBindingList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleList\": {\n    \"description\": \"ClusterRoleList is a collection of ClusterRoles\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of ClusterRoles\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRole\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"ClusterRoleList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.PolicyRule\": {\n    \"description\": \"PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.\",\n    \"required\": [\n     \"verbs\"\n    ],\n    \"properties\": {\n     \"apiGroups\": {\n      \"description\": \"APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"nonResourceURLs\": {\n      \"description\": \"NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full, final step in the path This name is intentionally different than the internal type so that the DefaultConvert works nicely and because the ordering may be different. Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \\\"pods\\\" or \\\"secrets\\\") or non-resource URL paths (such as \\\"/api\\\"),  but not both.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"resourceNames\": {\n      \"description\": \"ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"resources\": {\n      \"description\": \"Resources is a list of resources this rule applies to.  ResourceAll represents all resources.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"verbs\": {\n      \"description\": \"Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule.  VerbAll represents all kinds.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Role\": {\n    \"description\": \"Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.\",\n    \"required\": [\n     \"rules\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"rules\": {\n      \"description\": \"Rules holds all the PolicyRules for this Role\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.PolicyRule\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"Role\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBinding\": {\n    \"description\": \"RoleBinding references a role, but does not contain it.  It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in.  RoleBindings in a given namespace only have effect in that namespace.\",\n    \"required\": [\n     \"subjects\",\n     \"roleRef\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"roleRef\": {\n      \"description\": \"RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleRef\"\n     },\n     \"subjects\": {\n      \"description\": \"Subjects holds references to the objects the role applies to.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Subject\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"RoleBinding\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBindingList\": {\n    \"description\": \"RoleBindingList is a collection of RoleBindings\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of RoleBindings\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBinding\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"RoleBindingList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleList\": {\n    \"description\": \"RoleList is a collection of Roles\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of Roles\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Role\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"RoleList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleRef\": {\n    \"description\": \"RoleRef contains information that points to the role being used\",\n    \"required\": [\n     \"apiGroup\",\n     \"kind\",\n     \"name\"\n    ],\n    \"properties\": {\n     \"apiGroup\": {\n      \"description\": \"APIGroup is the group for the resource being referenced\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is the type of resource being referenced\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name is the name of resource being referenced\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Subject\": {\n    \"description\": \"Subject contains a reference to the object or user identities a role binding applies to.  This can either hold a direct API object reference, or a value for non-objects such as user and group names.\",\n    \"required\": [\n     \"kind\",\n     \"name\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion holds the API group and version of the referenced subject. Defaults to \\\"v1\\\" for ServiceAccount subjects. Defaults to \\\"rbac.authorization.k8s.io/v1alpha1\\\" for User and Group subjects.\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind of object being referenced. Values defined by this API group are \\\"User\\\", \\\"Group\\\", and \\\"ServiceAccount\\\". If the Authorizer does not recognized the kind value, the Authorizer should report an error.\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name of the object being referenced.\",\n      \"type\": \"string\"\n     },\n     \"namespace\": {\n      \"description\": \"Namespace of the referenced object.  If the object kind is non-namespace, such as \\\"User\\\" or \\\"Group\\\", and this value is not empty the Authorizer should report an error.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRole\": {\n    \"description\": \"ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.\",\n    \"required\": [\n     \"rules\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"rules\": {\n      \"description\": \"Rules holds all the PolicyRules for this ClusterRole\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.PolicyRule\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRole\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBinding\": {\n    \"description\": \"ClusterRoleBinding references a ClusterRole, but not contain it.  It can reference a ClusterRole in the global namespace, and adds who information via Subject.\",\n    \"required\": [\n     \"subjects\",\n     \"roleRef\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"roleRef\": {\n      \"description\": \"RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleRef\"\n     },\n     \"subjects\": {\n      \"description\": \"Subjects holds references to the objects the role applies to.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Subject\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRoleBinding\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBindingList\": {\n    \"description\": \"ClusterRoleBindingList is a collection of ClusterRoleBindings\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of ClusterRoleBindings\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBinding\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRoleBindingList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleList\": {\n    \"description\": \"ClusterRoleList is a collection of ClusterRoles\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of ClusterRoles\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRole\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"ClusterRoleList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.PolicyRule\": {\n    \"description\": \"PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.\",\n    \"required\": [\n     \"verbs\"\n    ],\n    \"properties\": {\n     \"apiGroups\": {\n      \"description\": \"APIGroups is the name of the APIGroup that contains the resources.  If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"nonResourceURLs\": {\n      \"description\": \"NonResourceURLs is a set of partial urls that a user should have access to.  *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \\\"pods\\\" or \\\"secrets\\\") or non-resource URL paths (such as \\\"/api\\\"),  but not both.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"resourceNames\": {\n      \"description\": \"ResourceNames is an optional white list of names that the rule applies to.  An empty set means that everything is allowed.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"resources\": {\n      \"description\": \"Resources is a list of resources this rule applies to.  ResourceAll represents all resources.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     },\n     \"verbs\": {\n      \"description\": \"Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule.  VerbAll represents all kinds.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"type\": \"string\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Role\": {\n    \"description\": \"Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.\",\n    \"required\": [\n     \"rules\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"rules\": {\n      \"description\": \"Rules holds all the PolicyRules for this Role\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.PolicyRule\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"Role\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBinding\": {\n    \"description\": \"RoleBinding references a role, but does not contain it.  It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in.  RoleBindings in a given namespace only have effect in that namespace.\",\n    \"required\": [\n     \"subjects\",\n     \"roleRef\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"roleRef\": {\n      \"description\": \"RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.\",\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleRef\"\n     },\n     \"subjects\": {\n      \"description\": \"Subjects holds references to the objects the role applies to.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Subject\"\n      }\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"RoleBinding\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBindingList\": {\n    \"description\": \"RoleBindingList is a collection of RoleBindings\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of RoleBindings\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBinding\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"RoleBindingList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleList\": {\n    \"description\": \"RoleList is a collection of Roles\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of Roles\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Role\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"rbac.authorization.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"RoleList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleRef\": {\n    \"description\": \"RoleRef contains information that points to the role being used\",\n    \"required\": [\n     \"apiGroup\",\n     \"kind\",\n     \"name\"\n    ],\n    \"properties\": {\n     \"apiGroup\": {\n      \"description\": \"APIGroup is the group for the resource being referenced\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is the type of resource being referenced\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name is the name of resource being referenced\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Subject\": {\n    \"description\": \"Subject contains a reference to the object or user identities a role binding applies to.  This can either hold a direct API object reference, or a value for non-objects such as user and group names.\",\n    \"required\": [\n     \"kind\",\n     \"name\"\n    ],\n    \"properties\": {\n     \"apiGroup\": {\n      \"description\": \"APIGroup holds the API group of the referenced subject. Defaults to \\\"\\\" for ServiceAccount subjects. Defaults to \\\"rbac.authorization.k8s.io\\\" for User and Group subjects.\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind of object being referenced. Values defined by this API group are \\\"User\\\", \\\"Group\\\", and \\\"ServiceAccount\\\". If the Authorizer does not recognized the kind value, the Authorizer should report an error.\",\n      \"type\": \"string\"\n     },\n     \"name\": {\n      \"description\": \"Name of the object being referenced.\",\n      \"type\": \"string\"\n     },\n     \"namespace\": {\n      \"description\": \"Namespace of the referenced object.  If the object kind is non-namespace, such as \\\"User\\\" or \\\"Group\\\", and this value is not empty the Authorizer should report an error.\",\n      \"type\": \"string\"\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPreset\": {\n    \"description\": \"PodPreset is a policy resource that defines additional runtime requirements for a Pod.\",\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"spec\": {\n      \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPresetSpec\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"settings.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"PodPreset\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPresetList\": {\n    \"description\": \"PodPresetList is a list of PodPreset objects.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is a list of schema objects.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPreset\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"settings.k8s.io\",\n      \"version\": \"v1alpha1\",\n      \"kind\": \"PodPresetList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPresetSpec\": {\n    \"description\": \"PodPresetSpec is a description of a pod preset.\",\n    \"properties\": {\n     \"env\": {\n      \"description\": \"Env defines the collection of EnvVar to inject into containers.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.EnvVar\"\n      }\n     },\n     \"envFrom\": {\n      \"description\": \"EnvFrom defines the collection of EnvFromSource to inject into containers.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.EnvFromSource\"\n      }\n     },\n     \"selector\": {\n      \"description\": \"Selector is a label query over a set of resources, in this case pods. Required.\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector\"\n     },\n     \"volumeMounts\": {\n      \"description\": \"VolumeMounts defines the collection of VolumeMount to inject into containers.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.VolumeMount\"\n      }\n     },\n     \"volumes\": {\n      \"description\": \"Volumes defines the collection of Volume to inject into the pod.\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.api.v1.Volume\"\n      }\n     }\n    }\n   },\n   \"io.k8s.kubernetes.pkg.apis.storage.v1.StorageClass\": {\n    \"description\": \"StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\\n\\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.\",\n    \"required\": [\n     \"provisioner\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"parameters\": {\n      \"description\": \"Parameters holds the parameters for the provisioner that should create volumes of this storage class.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"provisioner\": {\n      \"description\": \"Provisioner indicates the type of the provisioner.\",\n      \"type\": \"string\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"StorageClass\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.storage.v1.StorageClassList\": {\n    \"description\": \"StorageClassList is a collection of storage classes.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of StorageClasses\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1.StorageClass\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1\",\n      \"kind\": \"StorageClassList\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClass\": {\n    \"description\": \"StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\\n\\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.\",\n    \"required\": [\n     \"provisioner\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta\"\n     },\n     \"parameters\": {\n      \"description\": \"Parameters holds the parameters for the provisioner that should create volumes of this storage class.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n       \"type\": \"string\"\n      }\n     },\n     \"provisioner\": {\n      \"description\": \"Provisioner indicates the type of the provisioner.\",\n      \"type\": \"string\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StorageClass\"\n     }\n    ]\n   },\n   \"io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClassList\": {\n    \"description\": \"StorageClassList is a collection of storage classes.\",\n    \"required\": [\n     \"items\"\n    ],\n    \"properties\": {\n     \"apiVersion\": {\n      \"description\": \"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources\",\n      \"type\": \"string\"\n     },\n     \"items\": {\n      \"description\": \"Items is the list of StorageClasses\",\n      \"type\": \"array\",\n      \"items\": {\n       \"$ref\": \"#/definitions/io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClass\"\n      }\n     },\n     \"kind\": {\n      \"description\": \"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\",\n      \"type\": \"string\"\n     },\n     \"metadata\": {\n      \"description\": \"Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata\",\n      \"$ref\": \"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta\"\n     }\n    },\n    \"x-kubernetes-group-version-kind\": [\n     {\n      \"group\": \"storage.k8s.io\",\n      \"version\": \"v1beta1\",\n      \"kind\": \"StorageClassList\"\n     }\n    ]\n   }\n  },\n  \"securityDefinitions\": {\n   \"BearerToken\": {\n    \"description\": \"Bearer Token authentication\",\n    \"type\": \"apiKey\",\n    \"name\": \"authorization\",\n    \"in\": \"header\"\n   }\n  },\n  \"security\": [\n   {\n    \"BearerToken\": []\n   }\n  ]\n }\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/README.md",
    "content": "<!-- START doctoc generated TOC please keep comment here to allow auto update -->\n<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\n**Table of Contents**  *generated with [DocToc](https://github.com/thlorenz/doctoc)*\n\n- [core](#core)\n  - [Quickstart](#quickstart)\n  - [Using the library](#using-the-library)\n    - [io.ksonnet.pkg.kubeflow-core](#ioksonnetpkgkubeflow-core)\n      - [Example](#example)\n      - [Parameters](#parameters)\n\n<!-- END doctoc generated TOC please keep comment here to allow auto update -->\n\n# core\n\n> Core components of Kubeflow.\n\n\n* [Quickstart](#quickstart)\n* [Using Prototypes](#using-prototypes)\n  * [io.ksonnet.pkg.kubeflow-core](#io.ksonnet.pkg.kubeflow-core)\n\n## Quickstart\n\n*The following commands use the `io.ksonnet.pkg.kubeflow` prototype to generate Kubernetes YAML for core, and then deploys it to your Kubernetes cluster.*\n\nFirst, create a cluster and install the ksonnet CLI (see root-level [README.md](rootReadme)).\n\nIf you haven't yet created a [ksonnet application](linkToSomewhere), do so using `ks init <app-name>`.\n\nFinally, in the ksonnet application directory, run the following:\n\n```shell\n# Expand prototype as a Jsonnet file, place in a file in the\n# `components/` directory. (YAML and JSON are also available.)\n$ ks prototype use io.ksonnet.pkg.kubeflow-core \\\n  --name core \\\n  --namespace default \\\n  --disks \n\n# Apply to server.\n$ ks apply -f core.jsonnet\n```\n\n## Using the library\n\nThe library files for core define a set of relevant *parts* (_e.g._, deployments, services, secrets, and so on) that can be combined to configure core for a wide variety of scenarios. For example, a database like Redis may need a secret to hold the user password, or it may have no password if it's acting as a cache.\n\nThis library provides a set of pre-fabricated \"flavors\" (or \"distributions\") of core, each of which is configured for a different use case. These are captured as ksonnet *prototypes*, which allow users to interactively customize these distributions for their specific needs.\n\nThese prototypes, as well as how to use them, are enumerated below.\n\n### io.ksonnet.pkg.kubeflow-core\n\nKubeflow core components\n#### Example\n\n```shell\n# Expand prototype as a Jsonnet file, place in a file in the\n# `components/` directory. (YAML and JSON are also available.)\n$ ks prototype use io.ksonnet.pkg.kubeflow-core core \\\n  --name YOUR_NAME_HERE\n```\n\n#### Parameters\n\nThe available options to pass prototype are:\n\n* `--name=<name>`: Name to give to each of the components [string]\n\n\n[rootReadme]: https://github.com/ksonnet/mixins\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/all.libsonnet",
    "content": "{\n  parts(params):: {\n    local ambassador = import \"kubeflow/core/ambassador.libsonnet\",\n    local jupyterhub = import \"kubeflow/core/jupyterhub.libsonnet\",\n    local nfs = import \"kubeflow/core/nfs.libsonnet\",\n    local tfjob = import \"kubeflow/core/tf-job.libsonnet\",\n    local spartakus = import \"kubeflow/core/spartakus.libsonnet\",\n    local centraldashboard = import \"kubeflow/core/centraldashboard.libsonnet\",\n    local version = import \"kubeflow/core/version.libsonnet\",\n\n    all:: jupyterhub.all(params)\n          + tfjob.all(params)\n          + ambassador.all(params)\n          + nfs.all(params)\n          + spartakus.all(params)\n          + centraldashboard.all(params)\n          + version.all(params),\n  },\n}\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/ambassador.libsonnet",
    "content": "{\n  all(params):: [\n    $.parts(params.namespace).service(params.tfAmbassadorServiceType),\n    $.parts(params.namespace).adminService,\n    $.parts(params.namespace).role,\n    $.parts(params.namespace).serviceAccount,\n    $.parts(params.namespace).roleBinding,\n    $.parts(params.namespace).deploy,\n    $.parts(params.namespace).k8sDashboard(params.cloud),\n  ],\n\n  parts(namespace):: {\n    local ambassadorImage = \"quay.io/datawire/ambassador:0.30.1\",\n    service(serviceType):: {\n      apiVersion: \"v1\",\n      kind: \"Service\",\n      metadata: {\n        labels: {\n          service: \"ambassador\",\n        },\n        name: \"ambassador\",\n        namespace: namespace,\n      },\n      spec: {\n        ports: [\n          {\n            name: \"ambassador\",\n            port: 80,\n            targetPort: 80,\n          },\n        ],\n        selector: {\n          service: \"ambassador\",\n        },\n        type: serviceType,\n      },\n    },  // service\n\n    adminService:: {\n      apiVersion: \"v1\",\n      kind: \"Service\",\n      metadata: {\n        labels: {\n          service: \"ambassador-admin\",\n        },\n        name: \"ambassador-admin\",\n        namespace: namespace,\n      },\n      spec: {\n        ports: [\n          {\n            name: \"ambassador-admin\",\n            port: 8877,\n            targetPort: 8877,\n          },\n        ],\n        selector: {\n          service: \"ambassador\",\n        },\n        type: \"ClusterIP\",\n      },\n    },  // adminService\n\n    role:: {\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      kind: \"Role\",\n      metadata: {\n        name: \"ambassador\",\n        namespace: namespace,\n      },\n      rules: [\n        {\n          apiGroups: [\n            \"\",\n          ],\n          resources: [\n            \"services\",\n          ],\n          verbs: [\n            \"get\",\n            \"list\",\n            \"watch\",\n          ],\n        },\n        {\n          apiGroups: [\n            \"\",\n          ],\n          resources: [\n            \"configmaps\",\n          ],\n          verbs: [\n            \"create\",\n            \"update\",\n            \"patch\",\n            \"get\",\n            \"list\",\n            \"watch\",\n          ],\n        },\n        {\n          apiGroups: [\n            \"\",\n          ],\n          resources: [\n            \"secrets\",\n          ],\n          verbs: [\n            \"get\",\n            \"list\",\n            \"watch\",\n          ],\n        },\n      ],\n    },  // role\n\n    serviceAccount:: {\n      apiVersion: \"v1\",\n      kind: \"ServiceAccount\",\n      metadata: {\n        name: \"ambassador\",\n        namespace: namespace,\n      },\n    },  // serviceAccount\n\n    roleBinding:: {\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      kind: \"RoleBinding\",\n      metadata: {\n        name: \"ambassador\",\n        namespace: namespace,\n      },\n      roleRef: {\n        apiGroup: \"rbac.authorization.k8s.io\",\n        kind: \"Role\",\n        name: \"ambassador\",\n      },\n      subjects: [\n        {\n          kind: \"ServiceAccount\",\n          name: \"ambassador\",\n          namespace: namespace,\n        },\n      ],\n    },  // roleBinding\n\n    deploy:: {\n      apiVersion: \"extensions/v1beta1\",\n      kind: \"Deployment\",\n      metadata: {\n        name: \"ambassador\",\n        namespace: namespace,\n      },\n      spec: {\n        replicas: 3,\n        template: {\n          metadata: {\n            labels: {\n              service: \"ambassador\",\n            },\n            namespace: namespace,\n          },\n          spec: {\n            containers: [\n              {\n                env: [\n                  {\n                    name: \"AMBASSADOR_NAMESPACE\",\n                    valueFrom: {\n                      fieldRef: {\n                        fieldPath: \"metadata.namespace\",\n                      },\n                    },\n                  },\n                  {\n                    name: \"AMBASSADOR_SINGLE_NAMESPACE\",\n                    value: \"true\",\n                  },\n                ],\n                image: ambassadorImage,\n                livenessProbe: {\n                  httpGet: {\n                    path: \"/ambassador/v0/check_alive\",\n                    port: 8877,\n                  },\n                  initialDelaySeconds: 30,\n                  periodSeconds: 30,\n                },\n                name: \"ambassador\",\n                readinessProbe: {\n                  httpGet: {\n                    path: \"/ambassador/v0/check_ready\",\n                    port: 8877,\n                  },\n                  initialDelaySeconds: 30,\n                  periodSeconds: 30,\n                },\n                resources: {\n                  limits: {\n                    cpu: 1,\n                    memory: \"400Mi\",\n                  },\n                  requests: {\n                    cpu: \"200m\",\n                    memory: \"100Mi\",\n                  },\n                },\n              },\n              {\n                image: \"quay.io/datawire/statsd:0.30.1\",\n                name: \"statsd\",\n              },\n            ],\n            restartPolicy: \"Always\",\n            serviceAccountName: \"ambassador\",\n          },\n        },\n      },\n    },  // deploy\n\n    isDashboardTls(cloud)::\n      if cloud == \"acsengine\" || cloud == \"aks\" then\n        \"false\"\n      else\n        \"true\",\n    // This service adds a rule to our reverse proxy for accessing the K8s dashboard.\n    k8sDashboard(cloud):: {\n      apiVersion: \"v1\",\n      kind: \"Service\",\n      metadata: {\n        name: \"k8s-dashboard\",\n        namespace: namespace,\n\n        annotations: {\n          \"getambassador.io/config\":\n            std.join(\"\\n\", [\n              \"---\",\n              \"apiVersion: ambassador/v0\",\n              \"kind:  Mapping\",\n              \"name: k8s-dashboard-ui-mapping\",\n              \"prefix: /k8s/ui/\",\n              \"rewrite: /\",\n              \"tls: \" + $.parts(namespace).isDashboardTls(cloud),\n              // We redirect to the K8s service created for the dashboard\n              // in namespace kube-system. We don't use the k8s-dashboard service\n              // because that isn't in the kube-system namespace and I don't think\n              // it can select pods in a different namespace.\n              \"service: kubernetes-dashboard.kube-system\",\n            ]),\n        },  //annotations\n      },\n      spec: {\n        ports: [\n          {\n            port: 443,\n            targetPort: 8443,\n          },\n        ],\n        selector: {\n          \"k8s-app\": \"kubernetes-dashboard\",\n        },\n        type: \"ClusterIP\",\n      },\n    },  // k8sDashboard\n\n  },  // parts\n}\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/centraldashboard.libsonnet",
    "content": "{\n  // TODO(https://github.com/ksonnet/ksonnet/issues/222): Taking namespace as an argument is a work around for the fact that ksonnet\n  // doesn't support automatically piping in the namespace from the environment to prototypes.\n\n  all(params):: [\n    $.parts(params.namespace).deployUi,\n    $.parts(params.namespace).uiService,\n    $.parts(params.namespace).uiServiceAccount,\n    $.parts(params.namespace).uiRole,\n    $.parts(params.namespace).uiRoleBinding,\n  ],\n\n  parts(namespace):: {\n\n    deployUi:: {\n      apiVersion: \"extensions/v1beta1\",\n      kind: \"Deployment\",\n      metadata: {\n        labels: {\n          app: \"centraldashboard\",\n        },\n        name: \"centraldashboard\",\n        namespace: namespace,\n      },\n      spec: {\n        replicas: 1,\n        selector: {\n          matchLabels: {\n            app: \"centraldashboard\",\n          },\n        },\n        template: {\n          metadata: {\n            creationTimestamp: null,\n            labels: {\n              app: \"centraldashboard\",\n            },\n          },\n          spec: {\n            containers: [\n              {\n                env: [\n                  {\n                    name: \"CENTRALDASHBOARD_NAMESPACE\",\n                    valueFrom: {\n                      fieldRef: {\n                        apiVersion: \"v1\",\n                        fieldPath: \"metadata.namespace\",\n                      },\n                    },\n                  },\n                  {\n                    name: \"IN_CLUSTER\",\n                    value: \"true\",\n                  },\n                ],\n                image: \"swiftdiaries/centraldashboard:0.1\",\n                imagePullPolicy: \"IfNotPresent\",\n                name: \"centraldashboard\",\n                resources: {},\n                terminationMessagePath: \"/dev/termination-log\",\n                terminationMessagePolicy: \"File\",\n              },\n            ],\n            dnsPolicy: \"ClusterFirst\",\n            restartPolicy: \"Always\",\n            schedulerName: \"default-scheduler\",\n            securityContext: {},\n            serviceAccount: \"centraldashboard\",\n            serviceAccountName: \"centraldashboard\",\n            terminationGracePeriodSeconds: 30,\n          },\n        },\n      },\n    },  // deployUi\n\n    uiService:: {\n      apiVersion: \"v1\",\n      kind: \"Service\",\n      metadata: {\n        labels: {\n          app: \"centraldashboard\",\n        },\n        name: \"centraldashboard\",\n        namespace: namespace,\n      },\n      spec: {\n        ports: [\n          {\n            port: 8082,\n            targetPort: 8082,\n          },\n        ],\n        selector: {\n          app: \"centraldashboard\",\n        },\n        sessionAffinity: \"None\",\n        type: \"ClusterIP\",\n      },\n    },  //service\n\n    uiServiceAccount:: {\n      apiVersion: \"v1\",\n      kind: \"ServiceAccount\",\n      metadata: {\n        name: \"centraldashboard\",\n        namespace: namespace,\n      },\n    },  // service account\n\n    uiRole:: {\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      kind: \"ClusterRole\",\n      metadata: {\n        labels: {\n          app: \"centraldashboard\",\n        },\n        name: \"centraldashboard\",\n        namespace: namespace,\n      },\n      rules: [\n        {\n          apiGroups: [\"\"],\n          resources: [\n            \"pods\",\n            \"pods/exec\",\n            \"pods/log\",\n          ],\n          verbs: [\n            \"get\",\n            \"list\",\n            \"watch\",\n          ],\n        },\n        {\n          apiGroups: [\"\"],\n          resources: [\n            \"secrets\",\n          ],\n          verbs: [\n            \"get\",\n          ],\n        },\n      ],\n    },  // operator-role\n\n    uiRoleBinding:: {\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      kind: \"ClusterRoleBinding\",\n      metadata: {\n        labels: {\n          app: \"centraldashboard\",\n        },\n        name: \"centraldashboard\",\n        namespace: namespace,\n      },\n      roleRef: {\n        apiGroup: \"rbac.authorization.k8s.io\",\n        kind: \"ClusterRole\",\n        name: \"centraldashboard\",\n      },\n      subjects: [\n        {\n          kind: \"ServiceAccount\",\n          name: \"centraldashboard\",\n          namespace: namespace,\n        },\n      ],\n    },  // role binding\n  },  // parts\n}\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/cert-manager.libsonnet",
    "content": "{\n  parts(namespace):: {\n    local k = import \"k.libsonnet\",\n    local certManagerImage = \"quay.io/jetstack/cert-manager-controller:v0.2.4\",\n    local certManagerIngressShimImage = \"quay.io/jetstack/cert-manager-ingress-shim:v0.2.4\",\n\n    // Note, not using std.prune to preserve required empty http01 map in the Issuer spec.\n    certManagerParts(acmeEmail, acmeUrl):: k.core.v1.list.new([\n      $.parts(namespace).certificateCRD,\n      $.parts(namespace).clusterIssuerCRD,\n      $.parts(namespace).issuerCRD,\n      $.parts(namespace).serviceAccount,\n      $.parts(namespace).clusterRole,\n      $.parts(namespace).clusterRoleBinding,\n      $.parts(namespace).deploy,\n      $.parts(namespace).issuerLEProd(acmeEmail, acmeUrl),\n    ]),\n\n    certificateCRD:: {\n      apiVersion: \"apiextensions.k8s.io/v1beta1\",\n      kind: \"CustomResourceDefinition\",\n      metadata: {\n        name: \"certificates.certmanager.k8s.io\",\n      },\n      spec: {\n        group: \"certmanager.k8s.io\",\n        version: \"v1alpha1\",\n        names: {\n          kind: \"Certificate\",\n          plural: \"certificates\",\n        },\n        scope: \"Namespaced\",\n      },\n    },\n\n    clusterIssuerCRD:: {\n      apiVersion: \"apiextensions.k8s.io/v1beta1\",\n      kind: \"CustomResourceDefinition\",\n      metadata: {\n        name: \"clusterissuers.certmanager.k8s.io\",\n      },\n\n      spec: {\n        group: \"certmanager.k8s.io\",\n        version: \"v1alpha1\",\n        names: {\n          kind: \"ClusterIssuer\",\n          plural: \"clusterissuers\",\n        },\n        scope: \"Cluster\",\n      },\n    },\n\n    issuerCRD:: {\n      apiVersion: \"apiextensions.k8s.io/v1beta1\",\n      kind: \"CustomResourceDefinition\",\n      metadata: {\n        name: \"issuers.certmanager.k8s.io\",\n      },\n      spec: {\n        group: \"certmanager.k8s.io\",\n        version: \"v1alpha1\",\n        names: {\n          kind: \"Issuer\",\n          plural: \"issuers\",\n        },\n        scope: \"Namespaced\",\n      },\n    },\n\n    serviceAccount:: {\n      apiVersion: \"v1\",\n      kind: \"ServiceAccount\",\n      metadata: {\n        name: \"cert-manager\",\n        namespace: namespace,\n      },\n    },\n\n    clusterRole:: {\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      kind: \"ClusterRole\",\n      metadata: {\n        name: \"cert-manager\",\n      },\n      rules: [\n        {\n          apiGroups: [\"certmanager.k8s.io\"],\n          resources: [\"certificates\", \"issuers\", \"clusterissuers\"],\n          verbs: [\"*\"],\n        },\n        {\n          apiGroups: [\"\"],\n          resources: [\"secrets\", \"events\", \"endpoints\", \"services\", \"pods\"],\n          verbs: [\"*\"],\n        },\n        {\n          apiGroups: [\"extensions\"],\n          resources: [\"ingresses\"],\n          verbs: [\"*\"],\n        },\n      ],\n    },\n\n    clusterRoleBinding:: {\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      kind: \"ClusterRoleBinding\",\n      metadata: {\n        name: \"cert-manager\",\n      },\n      roleRef: {\n        apiGroup: \"rbac.authorization.k8s.io\",\n        kind: \"ClusterRole\",\n        name: \"cert-manager\",\n      },\n      subjects: [\n        {\n          name: \"cert-manager\",\n          namespace: namespace,\n          kind: \"ServiceAccount\",\n        },\n      ],\n    },\n\n    deploy:: {\n      apiVersion: \"apps/v1beta1\",\n      kind: \"Deployment\",\n      metadata: {\n        name: \"cert-manager\",\n        namespace: namespace,\n        labels: {\n          app: \"cert-manager\",\n        },\n      },\n      spec: {\n        replicas: 1,\n        template: {\n          metadata: {\n            labels: {\n              app: \"cert-manager\",\n            },\n          },\n          spec: {\n            serviceAccountName: \"cert-manager\",\n            containers: [\n              {\n                name: \"cert-manager\",\n                image: certManagerImage,\n                imagePullPolicy: \"IfNotPresent\",\n              },\n              {\n                name: \"ingress-shim\",\n                image: certManagerIngressShimImage,\n                imagePullPolicy: \"IfNotPresent\",\n              },\n            ],\n          },\n        },\n      },\n    },\n\n    issuerLEProd(acmeEmail, acmeUrl):: {\n      apiVersion: \"certmanager.k8s.io/v1alpha1\",\n      kind: \"Issuer\",\n      metadata: {\n        name: \"letsencrypt-prod\",\n        namespace: namespace,\n      },\n      spec: {\n        acme: {\n          server: acmeUrl,\n          email: acmeEmail,\n          privateKeySecretRef: {\n            name: \"letsencrypt-prod-secret\",\n          },\n          http01: {\n          },\n        },\n      },\n    },\n  },\n}\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/cloud-endpoints.libsonnet",
    "content": "{\n  parts(namespace):: {\n    local k = import \"k.libsonnet\",\n    local cloudEndpointsImage = \"gcr.io/cloud-solutions-group/cloud-endpoints-controller:0.1.1\",\n    local metacontrollerImage = \"gcr.io/enisoc-kubernetes/metacontroller@sha256:18561c63e1c5380ac5bbaabefa933e484bdb499f10b61071506f9a0070bc65f6\",\n\n    cloudEndpointsParts(secretName, secretKey):: k.core.v1.list.new([\n      $.parts(namespace).metaServiceAccount,\n      $.parts(namespace).metaClusterRole,\n      $.parts(namespace).metaClusterRoleBinding,\n      $.parts(namespace).metaInitializerCRD,\n      $.parts(namespace).metaLambdaCRD,\n      $.parts(namespace).metaDeployment,\n      $.parts(namespace).endpointsCRD,\n      $.parts(namespace).endpointsService,\n      $.parts(namespace).endpointsServiceAccount,\n      $.parts(namespace).endpointsClusterRole,\n      $.parts(namespace).endpointsClusterRoleBinding,\n      $.parts(namespace).endpointsDeploy(secretName, secretKey),\n      $.parts(namespace).endpointsLambdaController,\n    ]),\n\n    metaServiceAccount:: {\n      apiVersion: \"v1\",\n      kind: \"ServiceAccount\",\n      metadata: {\n        name: \"kube-metacontroller\",\n        namespace: namespace,\n      },\n    },  // metaServiceAccount\n\n    metaClusterRole:: {\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      kind: \"ClusterRole\",\n      metadata: {\n        name: \"kube-metacontroller\",\n      },\n      rules: [\n        {\n          apiGroups: [\"*\"],\n          resources: [\"*\"],\n          verbs: [\"*\"],\n        },\n      ],\n    },  // metaClusterRole\n\n    metaClusterRoleBinding:: {\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      kind: \"ClusterRoleBinding\",\n      metadata: {\n        name: \"kube-metacontroller\",\n      },\n      subjects: [\n        {\n          kind: \"ServiceAccount\",\n          name: \"kube-metacontroller\",\n          namespace: namespace,\n        },\n      ],\n      roleRef: {\n        kind: \"ClusterRole\",\n        name: \"kube-metacontroller\",\n        apiGroup: \"rbac.authorization.k8s.io\",\n      },\n    },  // metaClusterRoleBinding\n\n    metaInitializerCRD:: {\n      apiVersion: \"apiextensions.k8s.io/v1beta1\",\n      kind: \"CustomResourceDefinition\",\n      metadata: {\n        name: \"initializercontrollers.metacontroller.k8s.io\",\n      },\n      spec: {\n        group: \"metacontroller.k8s.io\",\n        version: \"v1alpha1\",\n        scope: \"Cluster\",\n        names: {\n          plural: \"initializercontrollers\",\n          singular: \"initializercontroller\",\n          kind: \"InitializerController\",\n          shortNames: [\n            \"ic\",\n            \"ictl\",\n          ],\n        },\n      },\n    },  // metaInitializerCRD\n\n    metaLambdaCRD:: {\n      apiVersion: \"apiextensions.k8s.io/v1beta1\",\n      kind: \"CustomResourceDefinition\",\n      metadata: {\n        name: \"lambdacontrollers.metacontroller.k8s.io\",\n      },\n      spec: {\n        group: \"metacontroller.k8s.io\",\n        version: \"v1alpha1\",\n        scope: \"Cluster\",\n        names: {\n          plural: \"lambdacontrollers\",\n          singular: \"lambdacontroller\",\n          kind: \"LambdaController\",\n          shortNames: [\n            \"lc\",\n            \"lctl\",\n          ],\n        },\n      },\n    },  // metaLambdaCRD\n\n    metaDeployment:: {\n      apiVersion: \"apps/v1beta1\",\n      kind: \"Deployment\",\n      metadata: {\n        name: \"kube-metacontroller\",\n        namespace: namespace,\n        labels: {\n          app: \"kube-metacontroller\",\n        },\n      },\n      spec: {\n        replicas: 1,\n        template: {\n          metadata: {\n            labels: {\n              app: \"kube-metacontroller\",\n            },\n          },\n          spec: {\n            serviceAccountName: \"kube-metacontroller\",\n            containers: [\n              {\n                name: \"kube-metacontroller\",\n                image: metacontrollerImage,\n                command: [\n                  \"/usr/bin/metacontroller\",\n                ],\n                args: [\n                  \"--logtostderr\",\n                ],\n                imagePullPolicy: \"Always\",\n              },\n            ],\n          },\n        },\n      },\n    },  // metaDeployment\n\n    endpointsCRD:: {\n      apiVersion: \"apiextensions.k8s.io/v1beta1\",\n      kind: \"CustomResourceDefinition\",\n      metadata: {\n        name: \"cloudendpoints.ctl.isla.solutions\",\n      },\n      spec: {\n        group: \"ctl.isla.solutions\",\n        version: \"v1\",\n        scope: \"Namespaced\",\n        names: {\n          plural: \"cloudendpoints\",\n          singular: \"cloudendpoint\",\n          kind: \"CloudEndpoint\",\n          shortNames: [\n            \"cloudep\",\n            \"ce\",\n          ],\n        },\n      },\n    },  // endpointsCRD\n\n    endpointsService:: {\n      apiVersion: \"v1\",\n      kind: \"Service\",\n      metadata: {\n        name: \"cloud-endpoints-controller\",\n        namespace: namespace,\n      },\n      spec: {\n        type: \"ClusterIP\",\n        ports: [\n          {\n            name: \"http\",\n            port: 80,\n          },\n        ],\n        selector: {\n          app: \"cloud-endpoints-controller\",\n        },\n      },\n    },  // endpointsService\n\n    endpointsLambdaController:: {\n      apiVersion: \"metacontroller.k8s.io/v1alpha1\",\n      kind: \"LambdaController\",\n      metadata: {\n        name: \"cloud-endpoints-controller\",\n      },\n      spec: {\n        parentResource: {\n          apiVersion: \"ctl.isla.solutions/v1\",\n          resource: \"cloudendpoints\",\n        },\n        childResources: [],\n        clientConfig: {\n          service: {\n            name: \"cloud-endpoints-controller\",\n            namespace: namespace,\n            caBundle: \"...\",\n          },\n        },\n        hooks: {\n          sync: {\n            path: \"/sync\",\n          },\n        },\n        generateSelector: true,\n      },\n    },  // endpointsLambdaController\n\n    endpointsServiceAccount:: {\n      apiVersion: \"v1\",\n      kind: \"ServiceAccount\",\n      metadata: {\n        name: \"cloud-endpoints-controller\",\n        namespace: namespace,\n      },\n    },  // endpointsServiceAccount\n\n    endpointsClusterRole:: {\n      kind: \"ClusterRole\",\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      metadata: {\n        name: \"cloud-endpoints-controller\",\n        namespace: namespace,\n      },\n      rules: [\n        {\n          apiGroups: [\"\"],\n          resources: [\"services\"],\n          verbs: [\"get\", \"list\"],\n        },\n        {\n          apiGroups: [\"extensions\"],\n          resources: [\"ingresses\"],\n          verbs: [\"get\", \"list\"],\n        },\n      ],\n    },  // endpointsClusterRole\n\n    endpointsClusterRoleBinding:: {\n      kind: \"ClusterRoleBinding\",\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      metadata: {\n        name: \"cloud-endpoints-controller\",\n      },\n      subjects: [\n        {\n          kind: \"ServiceAccount\",\n          name: \"cloud-endpoints-controller\",\n          namespace: namespace,\n        },\n      ],\n      roleRef: {\n        kind: \"ClusterRole\",\n        name: \"cloud-endpoints-controller\",\n        apiGroup: \"rbac.authorization.k8s.io\",\n      },\n    },  // endpointsClusterRoleBinding\n\n    endpointsDeploy(secretName, secretKey):: {\n      apiVersion: \"apps/v1beta1\",\n      kind: \"Deployment\",\n      metadata: {\n        name: \"cloud-endpoints-controller\",\n        namespace: namespace,\n      },\n      spec: {\n        replicas: 1,\n        template: {\n          metadata: {\n            labels: {\n              app: \"cloud-endpoints-controller\",\n            },\n          },\n          spec: {\n            serviceAccountName: \"cloud-endpoints-controller\",\n            terminationGracePeriodSeconds: 5,\n            containers: [\n              {\n                name: \"cloud-endpoints-controller\",\n                image: cloudEndpointsImage,\n                imagePullPolicy: \"Always\",\n                env: [\n                  {\n                    name: \"GOOGLE_APPLICATION_CREDENTIALS\",\n                    value: \"/var/run/secrets/sa/\" + secretKey,\n                  },\n                ],\n                volumeMounts: [\n                  {\n                    name: \"sa-key\",\n                    readOnly: true,\n                    mountPath: \"/var/run/secrets/sa\",\n                  },\n                ],\n                readinessProbe: {\n                  httpGet: {\n                    path: \"/healthz\",\n                    port: 80,\n                    scheme: \"HTTP\",\n                    periodSeconds: 5,\n                    timeoutSeconds: 5,\n                    successThreshold: 1,\n                    failureThreshold: 2,\n                  },\n                },\n              },\n            ],\n            volumes: [\n              {\n                name: \"sa-key\",\n                secret: {\n                  secretName: secretName,\n                },\n              },\n            ],\n          },\n        },\n      },\n    },  // endpointsDeploy\n  },  // parts\n}\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/iap.libsonnet",
    "content": "{\n  parts(namespace):: {\n    local k = import \"k.libsonnet\",\n\n    // Test if the given hostname is in the form of: \"NAME.endpoints.PROJECT.cloud.goog\"\n    local isCloudEndpoint = function(str) {\n      local toks = std.split(str, \".\"),\n      result::\n        (std.length(toks) == 5 && toks[1] == \"endpoints\" && toks[3] == \"cloud\" && toks[4] == \"goog\"),\n    }.result,\n\n    // Creates map of parameters from a given hostname in the form of: \"NAME.endpoints.PROJECT.cloud.goog\"\n    local makeEndpointParams = function(str) {\n      local toks = std.split(str, \".\"),\n      result:: {\n        name: toks[0],\n        project: toks[2],\n      },\n    }.result,\n\n    ingressParts(secretName, ipName, hostname, issuer, envoyImage, disableJwt, oauthSecretName):: std.prune(k.core.v1.list.new([\n      $.parts(namespace).service,\n      $.parts(namespace).ingress(secretName, ipName, hostname),\n      $.parts(namespace).certificate(secretName, hostname, issuer),\n      $.parts(namespace).initServiceAcount,\n      $.parts(namespace).initClusterRoleBinding,\n      $.parts(namespace).initClusterRole,\n      $.parts(namespace).deploy(envoyImage, oauthSecretName),\n      $.parts(namespace).configMap(disableJwt),\n      $.parts(namespace).whoamiService,\n      $.parts(namespace).whoamiApp,\n      (if isCloudEndpoint(hostname) then $.parts(namespace).cloudEndpoint(makeEndpointParams(hostname))),\n    ])),\n\n    service:: {\n      apiVersion: \"v1\",\n      kind: \"Service\",\n      metadata: {\n        labels: {\n          service: \"envoy\",\n        },\n        name: \"envoy\",\n        namespace: namespace,\n      },\n      spec: {\n        ports: [\n          {\n            name: \"envoy\",\n            port: envoyPort,\n            targetPort: envoyPort,\n          },\n        ],\n        selector: {\n          service: \"envoy\",\n        },\n        // NodePort because this will be the backend for our ingress.\n        type: \"NodePort\",\n      },\n    },  // service\n\n    initServiceAcount:: {\n      apiVersion: \"v1\",\n      kind: \"ServiceAccount\",\n      metadata: {\n        name: \"envoy\",\n        namespace: namespace,\n      },\n    },  // initServiceAccount\n\n    initClusterRoleBinding:: {\n      kind: \"ClusterRoleBinding\",\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      metadata: {\n        name: \"envoy\",\n      },\n      subjects: [\n        {\n          kind: \"ServiceAccount\",\n          name: \"envoy\",\n          namespace: namespace,\n        },\n      ],\n      roleRef: {\n        kind: \"ClusterRole\",\n        name: \"envoy\",\n        apiGroup: \"rbac.authorization.k8s.io\",\n      },\n    },  // initClusterRoleBinding\n\n    initClusterRole:: {\n      kind: \"ClusterRole\",\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      metadata: {\n        name: \"envoy\",\n        namespace: namespace,\n      },\n      rules: [\n        {\n          apiGroups: [\"\"],\n          resources: [\"services\", \"configmaps\"],\n          verbs: [\"get\", \"list\", \"patch\", \"update\"],\n        },\n      ],\n    },  // initClusterRoleBinding\n\n    envoyContainer(params):: {\n      image: params.image,\n      command: [\n        \"/usr/local/bin/envoy\",\n        \"-c\",\n        params.configPath,\n        \"--log-level\",\n        \"info\",\n        // Since we are running multiple instances of envoy on the same host we need to set a unique baseId\n        \"--base-id\",\n        params.baseId,\n      ],\n      imagePullPolicy: \"Always\",\n      name: params.name,\n      livenessProbe: {\n        httpGet: {\n          path: params.healthPath,\n          port: params.healthPort,\n        },\n        initialDelaySeconds: 30,\n        periodSeconds: 30,\n      },\n      readinessProbe: {\n        httpGet: {\n          path: params.healthPath,\n          port: params.healthPort,\n        },\n        initialDelaySeconds: 30,\n        periodSeconds: 30,\n      },\n      ports: std.map(function(p)\n        {\n          containerPort: p,\n        }\n                     , params.ports),\n      resources: {\n        limits: {\n          cpu: 1,\n          memory: \"400Mi\",\n        },\n        requests: {\n          cpu: \"200m\",\n          memory: \"100Mi\",\n        },\n      },\n      volumeMounts: [\n        {\n          mountPath: \"/etc/envoy\",\n          name: \"shared\",\n        },\n      ],\n    },  // envoyContainer\n\n    deploy(image, oauthSecretName):: {\n      apiVersion: \"extensions/v1beta1\",\n      kind: \"Deployment\",\n      metadata: {\n        name: \"envoy\",\n        namespace: namespace,\n      },\n      spec: {\n        replicas: 3,\n        template: {\n          metadata: {\n            labels: {\n              service: \"envoy\",\n            },\n          },\n          spec: {\n            serviceAccountName: \"envoy\",\n            containers: [\n              $.parts(namespace).envoyContainer({\n                image: image,\n                name: \"envoy\",\n                // We use the admin port for the health, readiness check because the main port will require a valid JWT.\n                // healthPath: \"/server_info\",\n                healthPath: \"/healthz\",\n                healthPort: envoyPort,\n                configPath: \"/etc/envoy/envoy-config.json\",\n                baseId: \"27000\",\n                ports: [envoyPort, envoyAdminPort, envoyStatsPort],\n              }),\n              {\n                name: \"iap\",\n                image: \"google/cloud-sdk:alpine\",\n                command: [\n                  \"sh\",\n                  \"/var/envoy-config/iap-init.sh\",\n                ],\n                env: [\n                  {\n                    name: \"NAMESPACE\",\n                    value: namespace,\n                  },\n                  {\n                    name: \"CLIENT_ID\",\n                    valueFrom: {\n                      secretKeyRef: {\n                        name: oauthSecretName,\n                        key: \"CLIENT_ID\",\n                      },\n                    },\n                  },\n                  {\n                    name: \"CLIENT_SECRET\",\n                    valueFrom: {\n                      secretKeyRef: {\n                        name: oauthSecretName,\n                        key: \"CLIENT_SECRET\",\n                      },\n                    },\n                  },\n                  {\n                    name: \"SERVICE\",\n                    value: \"envoy\",\n                  },\n                  {\n                    name: \"ENVOY_ADMIN\",\n                    value: \"http://localhost:\" + envoyAdminPort,\n                  },\n                ],\n                volumeMounts: [\n                  {\n                    mountPath: \"/var/envoy-config/\",\n                    name: \"config-volume\",\n                  },\n                  {\n                    mountPath: \"/var/shared/\",\n                    name: \"shared\",\n                  },\n                ],\n              },\n            ],\n            restartPolicy: \"Always\",\n            volumes: [\n              {\n                configMap: {\n                  name: \"envoy-config\",\n                },\n                name: \"config-volume\",\n              },\n              {\n                emptyDir: {\n                  medium: \"Memory\",\n                },\n                name: \"shared\",\n              },\n            ],\n          },\n        },\n      },\n    },  // deploy\n\n    configMap(disableJwt):: {\n      apiVersion: \"v1\",\n      kind: \"ConfigMap\",\n      metadata: {\n        name: \"envoy-config\",\n        namespace: namespace,\n      },\n      data: {\n        \"envoy-config.json\": std.manifestJson($.parts(namespace).envoyConfig(disableJwt)),\n        // Script executed by the iap container to configure IAP. When finished, the envoy config is created with the JWT audience.\n        \"iap-init.sh\": |||\n          [ -z ${CLIENT_ID} ] && echo Error CLIENT_ID must be set && exit 1\n          [ -z ${CLIENT_SECRET} ] && echo Error CLIENT_SECRET must be set && exit 1\n          [ -z ${NAMESPACE} ] && echo Error NAMESPACE must be set && exit 1\n          [ -z ${SERVICE} ] && echo Error SERVICE must be set && exit 1\n\n          apk add --update jq\n          curl https://storage.googleapis.com/kubernetes-release/release/v1.9.4/bin/linux/amd64/kubectl > /usr/local/bin/kubectl && chmod +x /usr/local/bin/kubectl\n\n          # Stagger init of replicas when acquiring lock\n          sleep $(( $RANDOM % 5 + 1 ))\n\n          kubectl get svc ${SERVICE} -o json > service.json\n          LOCK=$(jq -r \".metadata.annotations.iaplock\" service.json)\n\n          NOW=$(date -u +'%s')\n          if [[ -z \"${LOCK}\" || \"${LOCK}\" == \"null\" ]]; then\n            LOCK_T=$NOW\n          else\n            LOCK_T=$(echo \"${LOCK}\" | cut -d' ' -f2)\n          fi\n          LOCK_AGE=$(( $NOW - $LOCK_T ))\n          LOCK_TTL=120\n          if [[ -z \"${LOCK}\" || \"${LOCK}\" == \"null\" || \"${LOCK_AGE}\" -gt \"${LOCK_TTL}\" ]]; then\n            jq -r \".metadata.annotations.iaplock=\\\"$(hostname -s) ${NOW}\\\"\" service.json > service_lock.json\n            kubectl apply -f service_lock.json 2>/dev/null\n            if [[ $? -eq 0 ]]; then\n              echo \"Acquired lock on service annotation to update IAP.\"\n            else\n              echo \"WARN: Failed to acquire lock on service annotation.\"\n              exit 1\n            fi\n          else\n            echo \"WARN: Lock on service annotation already acquired by: $LOCK, age: $LOCK_AGE, TTL: $LOCK_TTL\"\n            sleep 20\n            exit 1\n          fi\n\n          PROJECT=$(curl -s -H \"Metadata-Flavor: Google\" http://metadata.google.internal/computeMetadata/v1/project/project-id)\n          if [ -z ${PROJECT} ]; then\n            echo Error unable to fetch PROJECT from compute metadata\n            exit 1\n          fi\n\n          PROJECT_NUM=$(curl -s -H \"Metadata-Flavor: Google\" http://metadata.google.internal/computeMetadata/v1/project/numeric-project-id)\n          if [ -z ${PROJECT_NUM} ]; then\n            echo Error unable to fetch PROJECT_NUM from compute metadata\n            exit 1\n          fi\n\n          NODE_PORT=$(kubectl --namespace=${NAMESPACE} get svc ${SERVICE} -o jsonpath='{.spec.ports[0].nodePort}')\n          while [[ -z ${BACKEND_ID} ]];\n          do BACKEND_ID=$(gcloud compute --project=${PROJECT} backend-services list --filter=name~k8s-be-${NODE_PORT}- --format='value(id)');\n          echo \"Waiting for backend id PROJECT=${PROJECT} NAMESPACE=${NAMESPACE} SERVICE=${SERVICE}...\";\n          sleep 2;\n          done\n          echo BACKEND_ID=${BACKEND_ID}\n\n          NODE_PORT=$(kubectl --namespace=${NAMESPACE} get svc ${SERVICE} -o jsonpath='{.spec.ports[0].nodePort}')\n          BACKEND_SERVICE=$(gcloud --project=${PROJECT} compute backend-services list --filter=name~k8s-be-${NODE_PORT}- --uri)\n          # Enable IAP on the backend service:\n          gcloud --project=${PROJECT} compute backend-services update ${BACKEND_SERVICE} \\\n                --global \\\n                --iap=enabled,oauth2-client-id=${CLIENT_ID},oauth2-client-secret=${CLIENT_SECRET}\n\n          while [[ -z ${HEALTH_CHECK_URI} ]];\n            do HEALTH_CHECK_URI=$(gcloud compute --project=${PROJECT} health-checks list --filter=name~k8s-be-${NODE_PORT}- --uri);\n            echo \"Waiting for the healthcheck resource PROJECT=${PROJECT} NODEPORT=${NODE_PORT} SERVICE=${SERVICE}...\";\n            sleep 2;\n          done\n\n          # Since we create the envoy-ingress ingress object before creating the envoy\n          # deployment object, healthcheck will not be configured correctly in the GCP\n          # load balancer. It will default the healthcheck request path to a value of\n          # / instead of the intended /healthz.\n          # Manually update the healthcheck request path to /healthz\n          gcloud --project=${PROJECT} compute health-checks update http ${HEALTH_CHECK_URI} --request-path=/healthz\n\n          # Since JupyterHub uses websockets we want to increase the backend timeout\n          echo Increasing backend timeout for JupyterHub\n          gcloud --project=${PROJECT} compute backend-services update --global ${BACKEND_SERVICE} --timeout=3600\n\n          JWT_AUDIENCE=\"/projects/${PROJECT_NUM}/global/backendServices/${BACKEND_ID}\"\n\n          # For healthcheck compare.\n          echo \"JWT_AUDIENCE=${JWT_AUDIENCE}\" > /var/shared/healthz.env\n          echo \"NODE_PORT=${NODE_PORT}\" >> /var/shared/healthz.env\n          echo \"BACKEND_ID=${BACKEND_ID}\" >> /var/shared/healthz.env\n\n          kubectl get configmap -n ${NAMESPACE} envoy-config -o jsonpath='{.data.envoy-config\\.json}' | \\\n            sed -e \"s|{{JWT_AUDIENCE}}|${JWT_AUDIENCE}|g\" > /var/shared/envoy-config.json\n\n          echo \"Restarting envoy\"\n          curl -s ${ENVOY_ADMIN}/quitquitquit\n\n          echo \"Clearing lock on service annotation\"\n          kubectl patch svc \"${SERVICE}\" -p \"{\\\"metadata\\\": { \\\"annotations\\\": {\\\"iaplock\\\": \\\"\\\" }}}\"\n\n          function checkIAP() {\n            # created by init container.\n            . /var/shared/healthz.env \n\n            # If node port or backend id change, so does the JWT audience.\n            CURR_NODE_PORT=$(kubectl --namespace=${NAMESPACE} get svc ${SERVICE} -o jsonpath='{.spec.ports[0].nodePort}')\n            CURR_BACKEND_ID=$(gcloud compute --project=${PROJECT} backend-services list --filter=name~k8s-be-${CURR_NODE_PORT}- --format='value(id)')\n            [ \"$BACKEND_ID\" == \"$CURR_BACKEND_ID\" ]\n          }\n\n          # Verify IAP every 10 seconds.\n          while true; do\n            if ! checkIAP; then\n              echo \"$(date) WARN: IAP check failed, restarting container.\"\n              exit 1\n            fi\n            sleep 10\n          done\n        |||,\n      },\n    },\n\n    local envoyPort = 8080,\n    local envoyAdminPort = 8001,\n    local envoyStatsPort = 8025,\n\n    // This is the config for the secondary envoy proxy which does JWT verification\n    // and actually routes requests to the appropriate backend.\n    envoyConfig(disableJwt):: {\n      listeners: [\n        {\n          address: \"tcp://0.0.0.0:\" + envoyPort,\n          filters: [\n            {\n              type: \"read\",\n              name: \"http_connection_manager\",\n              config: {\n                codec_type: \"auto\",\n                stat_prefix: \"ingress_http\",\n                access_log: [\n                  {\n                    format: 'ACCESS [%START_TIME%] \"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%\" %RESPONSE_CODE% %RESPONSE_FLAGS% %BYTES_RECEIVED% %BYTES_SENT% %DURATION% %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% \"%REQ(X-FORWARDED-FOR)%\" \"%REQ(USER-AGENT)%\" \"%REQ(X-REQUEST-ID)%\" \"%REQ(:AUTHORITY)%\" \"%UPSTREAM_HOST%\"\\n',\n                    path: \"/dev/fd/1\",\n                  },\n                ],\n                route_config: {\n                  virtual_hosts: [\n                    {\n                      name: \"backend\",\n                      domains: [\"*\"],\n                      routes: [\n                        // First route that matches is picked.\n                        {\n                          timeout_ms: 10000,\n                          path: \"/healthz\",\n                          prefix_rewrite: \"/server_info\",\n                          weighted_clusters: {\n                            clusters: [\n\n                              { name: \"cluster_healthz\", weight: 100.0 },\n\n                            ],\n                          },\n                        },\n                        // Provide access to the whoami app skipping JWT verification.\n                        // this is useful for debugging.\n                        {\n                          timeout_ms: 10000,\n                          prefix: \"/noiap/whoami\",\n                          prefix_rewrite: \"/\",\n                          weighted_clusters: {\n                            clusters: [\n                              {\n                                name: \"cluster_iap_app\",\n                                weight: 100.0,\n                              },\n                            ],\n                          },\n                        },\n                        {\n                          timeout_ms: 10000,\n                          prefix: \"/whoami\",\n                          prefix_rewrite: \"/\",\n                          weighted_clusters: {\n                            clusters: [\n                              {\n                                name: \"cluster_iap_app\",\n                                weight: 100.0,\n                              },\n                            ],\n                          },\n                        },\n                        // Jupyter uses the prefixes /hub & /user\n                        {\n                          // JupyterHub requires the prefix /hub\n                          // Use a 10 minute timeout because downloading\n                          // images for jupyter notebook can take a while\n                          timeout_ms: 600000,\n                          prefix: \"/hub\",\n                          prefix_rewrite: \"/hub\",\n                          use_websocket: true,\n                          weighted_clusters: {\n                            clusters: [\n                              {\n                                name: \"cluster_jupyterhub\",\n                                weight: 100.0,\n                              },\n                            ],\n                          },\n                        },\n                        {\n                          // JupyterHub requires the prefix /user\n                          // Use a 10 minute timeout because downloading\n                          // images for jupyter notebook can take a while\n                          timeout_ms: 600000,\n                          prefix: \"/user\",\n                          prefix_rewrite: \"/user\",\n                          use_websocket: true,\n                          weighted_clusters: {\n                            clusters: [\n                              {\n                                name: \"cluster_jupyterhub\",\n                                weight: 100.0,\n                              },\n                            ],\n                          },\n                        },\n                        // TODO(ankushagarwal): We should eventually\n                        // redirect to the central UI once its ready\n                        // See https://github.com/kubeflow/kubeflow/pull/146\n                        // Redirect to jupyterhub when visiting /\n                        {\n                          timeout_ms: 600000,\n                          path: \"/\",\n                          prefix_rewrite: \"/hub\",\n                          use_websocket: true,\n                          weighted_clusters: {\n                            clusters: [\n                              {\n                                name: \"cluster_jupyterhub\",\n                                weight: 100.0,\n                              },\n                            ],\n                          },\n                        },\n                        {\n                          // Route remaining traffic to Ambassador which supports dynamically adding\n                          // routes based on service annotations.\n                          timeout_ms: 10000,\n                          prefix: \"/\",\n                          prefix_rewrite: \"/\",\n                          use_websocket: true,\n                          weighted_clusters: {\n                            clusters: [\n                              {\n                                name: \"cluster_ambassador\",\n                                weight: 100.0,\n                              },\n                            ],\n                          },\n                        },\n                      ],\n                    },\n                  ],\n                },\n                local authFilter = if disableJwt then\n                  []\n                else [{\n                  type: \"decoder\",\n                  name: \"jwt-auth\",\n                  config: {\n                    jwts: [\n                      {\n                        issuer: \"https://cloud.google.com/iap\",\n                        audiences: \"{{JWT_AUDIENCE}}\",\n                        jwks_uri: \"https://www.gstatic.com/iap/verify/public_key-jwk\",\n                        jwks_uri_envoy_cluster: \"iap_issuer\",\n                        jwt_headers: [\"x-goog-iap-jwt-assertion\"],\n                      },\n                    ],\n                    bypass_jwt: [\n                      {\n                        http_method: \"GET\",\n                        path_exact: \"/healthz\",\n                      },\n                      {\n                        http_method: \"GET\",\n                        path_exact: \"/noiap/whoami\",\n                      },\n                    ],\n                  },\n                }],\n                filters:\n                  authFilter +\n                  [\n                    {\n                      type: \"decoder\",\n                      name: \"router\",\n                      config: {},\n                    },\n                  ],\n              },\n            },\n          ],\n        },\n      ],\n      admin: {\n        // We use 0.0.0.0 and not 127.0.0.1 because we want the admin server to be available on all devices\n        // so that it can be used for health checking.\n        address: \"tcp://0.0.0.0:\" + envoyAdminPort,\n        access_log_path: \"/tmp/admin_access_log\",\n      },\n      cluster_manager: {\n        clusters: [\n          {\n            name: \"cluster_healthz\",\n            connect_timeout_ms: 3000,\n            type: \"strict_dns\",\n            lb_type: \"round_robin\",\n            hosts: [\n              {\n                // We just use the admin server for the health check\n                url: \"tcp://127.0.0.1:\" + envoyAdminPort,\n              },\n\n            ],\n          },\n          {\n            name: \"iap_issuer\",\n            connect_timeout_ms: 5000,\n            type: \"strict_dns\",\n            circuit_breakers: {\n              default: {\n                max_pending_requests: 10000,\n                max_requests: 10000,\n              },\n            },\n            lb_type: \"round_robin\",\n            hosts: [\n              {\n                url: \"tcp://www.gstatic.com:80\",\n              },\n            ],\n          },\n          {\n            name: \"cluster_iap_app\",\n            connect_timeout_ms: 3000,\n            type: \"strict_dns\",\n            lb_type: \"round_robin\",\n            hosts: [\n              {\n                url: \"tcp://whoami-app.\" + namespace + \":80\",\n              },\n            ],\n          },\n          {\n            name: \"cluster_jupyterhub\",\n            connect_timeout_ms: 3000,\n            type: \"strict_dns\",\n            lb_type: \"round_robin\",\n            hosts: [\n              {\n                url: \"tcp://tf-hub-lb.\" + namespace + \":80\",\n              },\n\n            ],\n          },\n          {\n            name: \"cluster_ambassador\",\n            connect_timeout_ms: 3000,\n            type: \"strict_dns\",\n            lb_type: \"round_robin\",\n            hosts: [\n              {\n                url: \"tcp://ambassador.\" + namespace + \":80\",\n              },\n\n            ],\n          },\n        ],\n      },\n      statsd_udp_ip_address: \"127.0.0.1:\" + envoyStatsPort,\n      stats_flush_interval_ms: 1000,\n    },  // envoyConfig\n\n    whoamiService:: {\n      apiVersion: \"v1\",\n      kind: \"Service\",\n      metadata: {\n        labels: {\n          app: \"whoami\",\n        },\n        name: \"whoami-app\",\n        namespace: namespace,\n      },\n      spec: {\n        ports: [\n          {\n            port: 80,\n            targetPort: 8081,\n          },\n        ],\n        selector: {\n          app: \"whoami\",\n        },\n        type: \"ClusterIP\",\n      },\n    },  // whoamiService\n\n    whoamiApp:: {\n      apiVersion: \"extensions/v1beta1\",\n      kind: \"Deployment\",\n      metadata: {\n        name: \"whoami-app\",\n        namespace: namespace,\n      },\n      spec: {\n        replicas: 1,\n        template: {\n          metadata: {\n            labels: {\n              app: \"whoami\",\n            },\n          },\n          spec: {\n            containers: [\n              {\n                env: [\n                  {\n                    name: \"PORT\",\n                    value: \"8081\",\n                  },\n                ],\n                image: \"gcr.io/cloud-solutions-group/esp-sample-app:1.0.0\",\n                name: \"app\",\n                ports: [\n                  {\n                    containerPort: 8081,\n                  },\n                ],\n                readinessProbe: {\n                  failureThreshold: 2,\n                  httpGet: {\n                    path: \"/healthz\",\n                    port: 8081,\n                    scheme: \"HTTP\",\n                  },\n                  periodSeconds: 10,\n                  successThreshold: 1,\n                  timeoutSeconds: 5,\n                },\n              },\n            ],\n          },\n        },\n      },\n    },\n\n    ingress(secretName, ipName, hostname):: {\n      apiVersion: \"extensions/v1beta1\",\n      kind: \"Ingress\",\n      metadata: {\n        name: \"envoy-ingress\",\n        namespace: namespace,\n        annotations: {\n          \"kubernetes.io/tls-acme\": \"true\",\n          \"ingress.kubernetes.io/ssl-redirect\": \"true\",\n          \"kubernetes.io/ingress.global-static-ip-name\": ipName,\n        },\n      },\n      spec: {\n        rules: [\n          {\n            [if hostname != \"null\" then \"host\"]: hostname,\n            http: {\n              paths: [\n                {\n                  backend: {\n                    // Due to https://github.com/kubernetes/contrib/blob/master/ingress/controllers/gce/examples/health_checks/README.md#limitations\n                    // Keep port the servicePort the same as the port we are targetting on the backend so that servicePort will be the same as targetPort for the purpose of\n                    // health checking.\n                    serviceName: \"envoy\",\n                    servicePort: envoyPort,\n                  },\n                  path: \"/*\",\n                },\n              ],\n            },\n          },\n        ],\n        tls: [\n          {\n            secretName: secretName,\n          },\n        ],\n      },\n    },  // iapIngress\n\n    certificate(secretName, hostname, issuer):: {\n      apiVersion: \"certmanager.k8s.io/v1alpha1\",\n      kind: \"Certificate\",\n      metadata: {\n        name: secretName,\n        namespace: namespace,\n      },\n\n      spec: {\n        secretName: secretName,\n        issuerRef: {\n          name: issuer,\n        },\n        commonName: hostname,\n        dnsNames: [\n          hostname,\n        ],\n        acme: {\n          config: [\n            {\n              http01: {\n                ingress: \"envoy-ingress\",\n              },\n              domains: [\n                hostname,\n              ],\n            },\n          ],\n        },\n      },\n    },  // certificate\n\n    cloudEndpoint(params):: {\n      apiVersion: \"ctl.isla.solutions/v1\",\n      kind: \"CloudEndpoint\",\n      metadata: {\n        name: params.name,\n        namespace: namespace,\n      },\n      spec: {\n        project: params.project,\n        targetIngress: {\n          name: \"envoy-ingress\",\n          namespace: namespace,\n        },\n      },\n    },  // cloudEndpoint\n\n  },  // parts\n}\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/jupyterhub.libsonnet",
    "content": "{\n  all(params):: [\n    $.parts(params.namespace).jupyterHubConfigMap(params.jupyterHubAuthenticator, params.disks),\n    $.parts(params.namespace).jupyterHubService,\n    $.parts(params.namespace).jupyterHubLoadBalancer(params.jupyterHubServiceType),\n    $.parts(params.namespace).jupyterHub(params.jupyterHubImage, params.jupyterNotebookPVCMount, params.cloud),\n    $.parts(params.namespace).jupyterHubRole,\n    $.parts(params.namespace).jupyterHubServiceAccount,\n    $.parts(params.namespace).jupyterHubRoleBinding,\n  ],\n\n  parts(namespace):: {\n    jupyterHubConfigMap(jupyterHubAuthenticator, disks): {\n      local util = import \"kubeflow/core/util.libsonnet\",\n      local diskNames = util.toArray(disks),\n      local kubeSpawner = $.parts(namespace).kubeSpawner(jupyterHubAuthenticator, diskNames),\n      result:: $.parts(namespace).jupyterHubConfigMapWithSpawner(kubeSpawner),\n    }.result,\n\n    kubeSpawner(authenticator, volumeClaims=[]): {\n      // TODO(jlewi): We should make whether we use PVC configurable.\n      local baseKubeConfigSpawner = importstr \"kubeform_spawner.py\",\n\n      authenticatorOptions:: {\n\n        //## Authenticator Options\n        local kubeConfigDummyAuthenticator = \"c.JupyterHub.authenticator_class = 'dummyauthenticator.DummyAuthenticator'\",\n\n        // This configuration allows us to use the id provided by IAP.\n        local kubeConfigIAPAuthenticator = @\"c.JupyterHub.authenticator_class ='jhub_remote_user_authenticator.remote_user_auth.RemoteUserAuthenticator'\nc.RemoteUserAuthenticator.header_name = 'x-goog-authenticated-user-email'\",\n\n        options:: std.join(\"\\n\", std.prune([\n          \"######## Authenticator ######\",\n          if authenticator == \"iap\" then\n            kubeConfigIAPAuthenticator else\n            kubeConfigDummyAuthenticator,\n        ])),\n      }.options,  // authenticatorOptions\n\n      volumeOptions:: {\n        local volumes = std.map(function(v)\n          {\n            name: v,\n            persistentVolumeClaim: {\n              claimName: v,\n            },\n          }, volumeClaims),\n\n\n        local volumeMounts = std.map(function(v)\n          {\n            mountPath: \"/mnt/\" + v,\n            name: v,\n          }, volumeClaims),\n\n        options::\n          if std.length(volumeClaims) > 0 then\n            std.join(\"\\n\",\n                     [\n                       \"###### Volumes #######\",\n                       \"c.KubeSpawner.volumes = \" + std.manifestPython(volumes),\n                       \"c.KubeSpawner.volume_mounts = \" + std.manifestPython(volumeMounts),\n                     ])\n          else \"\",\n\n      }.options,  // volumeOptions\n\n      spawner:: std.join(\"\\n\", std.prune([baseKubeConfigSpawner, self.authenticatorOptions, self.volumeOptions])),\n    }.spawner,  // kubeSpawner\n\n    local baseJupyterHubConfigMap = {\n      apiVersion: \"v1\",\n      kind: \"ConfigMap\",\n      metadata: {\n        name: \"jupyterhub-config\",\n        namespace: namespace,\n      },\n    },\n\n    jupyterHubConfigMapWithSpawner(spawner): baseJupyterHubConfigMap {\n      data: {\n        \"jupyterhub_config.py\": spawner,\n      },\n    },\n\n    jupyterHubService: {\n      apiVersion: \"v1\",\n      kind: \"Service\",\n      metadata: {\n        labels: {\n          app: \"tf-hub\",\n        },\n        name: \"tf-hub-0\",\n        namespace: namespace,\n      },\n      spec: {\n        // We want a headless service so we set the ClusterIP to be None.\n        // This headless server is used by individual Jupyter pods to connect back to the Hub.\n        clusterIP: \"None\",\n        ports: [\n          {\n            name: \"hub\",\n            port: 8000,\n          },\n        ],\n        selector: {\n          app: \"tf-hub\",\n        },\n      },\n    },\n\n    jupyterHubLoadBalancer(serviceType): {\n      apiVersion: \"v1\",\n      kind: \"Service\",\n      metadata: {\n        labels: {\n          app: \"tf-hub-lb\",\n        },\n        name: \"tf-hub-lb\",\n        namespace: namespace,\n      },\n      spec: {\n        ports: [\n          {\n            name: \"hub\",\n            port: 80,\n            targetPort: 8000,\n          },\n        ],\n        selector: {\n          app: \"tf-hub\",\n        },\n        type: serviceType,\n      },\n    },\n\n    // image: Image for JupyterHub\n    jupyterHub(image, notebookPVCMount, cloud): {\n      apiVersion: \"apps/v1beta1\",\n      kind: \"StatefulSet\",\n      metadata: {\n        name: \"tf-hub\",\n        namespace: namespace,\n      },\n      spec: {\n        replicas: 1,\n        serviceName: \"\",\n        template: {\n          metadata: {\n            labels: {\n              app: \"tf-hub\",\n            },\n          },\n          spec: {\n            containers: [\n              {\n                command: [\n                  \"jupyterhub\",\n                  \"-f\",\n                  \"/etc/config/jupyterhub_config.py\",\n                ],\n                image: image,\n                name: \"tf-hub\",\n                volumeMounts: [\n                  {\n                    mountPath: \"/etc/config\",\n                    name: \"config-volume\",\n                  },\n                ],\n                ports: [\n                  // Port 8000 is used by the hub to accept incoming requests.\n                  {\n                    containerPort: 8000,\n                  },\n                  // Port 8081 accepts callbacks from the individual Jupyter pods.\n                  {\n                    containerPort: 8081,\n                  },\n                ],\n                env: [\n                  {\n                    name: \"NOTEBOOK_PVC_MOUNT\",\n                    value: notebookPVCMount,\n                  },\n                  {\n                    name: \"CLOUD_NAME\",\n                    value: cloud,\n                  },\n                ],\n              },  // jupyterHub container\n            ],\n            serviceAccountName: \"jupyter-hub\",\n            volumes: [\n              {\n                configMap: {\n                  name: \"jupyterhub-config\",\n                },\n                name: \"config-volume\",\n              },\n            ],\n          },\n        },\n        updateStrategy: {\n          type: \"RollingUpdate\",\n        },\n      },\n    },\n\n    jupyterHubRole: {\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      kind: \"Role\",\n      metadata: {\n        name: \"jupyter-role\",\n        namespace: namespace,\n      },\n      rules: [\n        {\n          apiGroups: [\n            \"*\",\n          ],\n          // TODO(jlewi): This is very permissive so we may want to lock this down.\n          resources: [\n            \"*\",\n          ],\n          verbs: [\n            \"*\",\n          ],\n        },\n      ],\n    },\n\n    jupyterHubServiceAccount: {\n      apiVersion: \"v1\",\n      kind: \"ServiceAccount\",\n      metadata: {\n        labels: {\n          app: \"jupyter-hub\",\n        },\n        name: \"jupyter-hub\",\n        namespace: namespace,\n      },\n    },\n\n    jupyterHubRoleBinding: {\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      kind: \"RoleBinding\",\n      metadata: {\n        name: \"jupyter-role\",\n        namespace: namespace,\n      },\n      roleRef: {\n        apiGroup: \"rbac.authorization.k8s.io\",\n        kind: \"Role\",\n        name: \"jupyter-role\",\n      },\n      subjects: [\n        {\n          kind: \"ServiceAccount\",\n          name: \"jupyter-hub\",\n          namespace: namespace,\n        },\n      ],\n    },\n  },  // parts\n}\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/kubeform_spawner.py",
    "content": "import json\nimport os\nfrom kubespawner.spawner import KubeSpawner\nfrom jhub_remote_user_authenticator.remote_user_auth import RemoteUserAuthenticator\nfrom oauthenticator.github import GitHubOAuthenticator\n\n\nclass KubeFormSpawner(KubeSpawner):\n\n    # relies on HTML5 for image datalist\n    def _options_form_default(self):\n        return '''\n    <label for='image'>Image</label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n    <input list=\"image\" name=\"image\" placeholder='repo/image:tag'>\n    <datalist id=\"image\">\n      <option value=\"gcr.io/kubeflow-images-public/tensorflow-1.4.1-notebook-cpu:v20180419-0ad94c4e\">\n      <option value=\"gcr.io/kubeflow-images-public/tensorflow-1.4.1-notebook-gpu:v20180419-0ad94c4e\">\n      <option value=\"gcr.io/kubeflow-images-public/tensorflow-1.5.1-notebook-cpu:v20180419-0ad94c4e\">\n      <option value=\"gcr.io/kubeflow-images-public/tensorflow-1.5.1-notebook-gpu:v20180419-0ad94c4e\">\n      <option value=\"gcr.io/kubeflow-images-public/tensorflow-1.6.0-notebook-cpu:v20180419-0ad94c4e\">\n      <option value=\"gcr.io/kubeflow-images-public/tensorflow-1.6.0-notebook-gpu:v20180419-0ad94c4e\">\n      <option value=\"gcr.io/kubeflow-images-public/tensorflow-1.7.0-notebook-cpu:v20180419-0ad94c4e\">\n      <option value=\"gcr.io/kubeflow-images-public/tensorflow-1.7.0-notebook-gpu:v20180419-0ad94c4e\">\n    </datalist>\n    <br/><br/>\n\n    <label for='cpu_guarantee'>CPU</label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n    <input name='cpu_guarantee' placeholder='200m, 1.0, 2.5, etc'></input>\n    <br/><br/>\n\n    <label for='mem_guarantee'>Memory</label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n    <input name='mem_guarantee' placeholder='100Mi, 1.5Gi'></input>\n    <br/><br/>\n\n    <label for='extra_resource_limits'>Extra Resource Limits</label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n    <input name='extra_resource_limits' placeholder='{&quot;nvidia.com/gpu&quot;: 3}'></input>\n    <br/><br/>\n    '''\n\n    def options_from_form(self, formdata):\n        options = {}\n        options['image'] = formdata.get('image', [''])[0].strip()\n        options['cpu_guarantee'] = formdata.get(\n            'cpu_guarantee', [''])[0].strip()\n        options['mem_guarantee'] = formdata.get(\n            'mem_guarantee', [''])[0].strip()\n        options['extra_resource_limits'] = formdata.get(\n            'extra_resource_limits', [''])[0].strip()\n        return options\n\n    @property\n    def singleuser_image_spec(self):\n        image = 'gcr.io/kubeflow/tensorflow-notebook-cpu'\n        if self.user_options.get('image'):\n            image = self.user_options['image']\n        return image\n\n    @property\n    def cpu_guarantee(self):\n        cpu = '500m'\n        if self.user_options.get('cpu_guarantee'):\n            cpu = self.user_options['cpu_guarantee']\n        return cpu\n\n    @property\n    def mem_guarantee(self):\n        mem = '1Gi'\n        if self.user_options.get('mem_guarantee'):\n            mem = self.user_options['mem_guarantee']\n        return mem\n\n    @property\n    def extra_resource_limits(self):\n        extra = ''\n        if self.user_options.get('extra_resource_limits'):\n            extra = json.loads(self.user_options['extra_resource_limits'])\n        return extra\n\n\n###################################################\n# JupyterHub Options\n###################################################\nc.JupyterHub.ip = '0.0.0.0'\nc.JupyterHub.hub_ip = '0.0.0.0'\n# Don't try to cleanup servers on exit - since in general for k8s, we want\n# the hub to be able to restart without losing user containers\nc.JupyterHub.cleanup_servers = False\n###################################################\n\n###################################################\n# Spawner Options\n###################################################\nc.JupyterHub.spawner_class = KubeFormSpawner\nc.KubeSpawner.singleuser_image_spec = 'gcr.io/kubeflow/tensorflow-notebook'\nc.KubeSpawner.cmd = 'start-singleuser.sh'\nc.KubeSpawner.args = ['--allow-root']\n# gpu images are very large ~15GB. need a large timeout.\nc.KubeSpawner.start_timeout = 60 * 30\n# Increase timeout to 5 minutes to avoid HTTP 500 errors on JupyterHub\nc.KubeSpawner.http_timeout = 60 * 5\nvolumes = []\nvolume_mounts = []\n###################################################\n# Persistent volume options\n###################################################\n# Using persistent storage requires a default storage class.\n# TODO(jlewi): Verify this works on minikube.\n# TODO(jlewi): Should we set c.KubeSpawner.singleuser_fs_gid = 1000\n# see https://github.com/kubeflow/kubeflow/pull/22#issuecomment-350500944\npvc_mount = os.environ.get('NOTEBOOK_PVC_MOUNT')\nif pvc_mount and pvc_mount != 'null':\n    c.KubeSpawner.user_storage_pvc_ensure = True\n    # How much disk space do we want?\n    c.KubeSpawner.user_storage_capacity = '10Gi'\n    c.KubeSpawner.pvc_name_template = 'claim-{username}{servername}'\n    volumes.append(\n        {\n            'name': 'volume-{username}{servername}',\n            'persistentVolumeClaim': {\n                'claimName': 'claim-{username}{servername}'\n            }\n        }\n    )\n    volume_mounts.append(\n        {\n            'mountPath': pvc_mount,\n            'name': 'volume-{username}{servername}'\n        }\n    )\n\n# ###################################################\n# ### Extra volumes for NVIDIA drivers (Azure)\n# ###################################################\n# # Temporary fix:\n# # AKS / acs-engine doesn't yet use device plugin so we have to mount the drivers to use GPU\n# # TODO(wbuchwalter): Remove once device plugin is merged\ncloud = os.environ.get('CLOUD_NAME')\nif cloud == 'aks' or cloud == 'acsengine':\n    volumes.append({\n        'name': 'nvidia',\n        'hostPath': {\n            'path': '/usr/local/nvidia'\n        }\n    })\n    volume_mounts.append({\n        'name': 'nvidia',\n        'mountPath': '/usr/local/nvidia'\n    })\n\nc.KubeSpawner.volumes = volumes\nc.KubeSpawner.volume_mounts = volume_mounts\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/nfs.libsonnet",
    "content": "// A ksonnet prototype/component for using NFS.\n\n{\n  // TODO(https://github.com/ksonnet/ksonnet/issues/222): Taking namespace as an argument is a work around for the fact that ksonnet\n  // doesn't support automatically piping in the namespace from the environment to prototypes.\n  //\n  // Return a list of components needed if you want to mount some disks using NFS.\n  // diskNames should be a list of PDs.\n  all(params):: {\n    local namespace = params.namespace,\n    local name = params.name,\n    local disks = params.disks,\n\n    // Create a list of the resources needed for a particular disk\n    local diskToList = function(diskName) [\n      $.parts(namespace, name,).diskResources(diskName).storageClass,\n      $.parts(namespace, name,).diskResources(diskName).volumeClaim,\n      $.parts(namespace, name,).diskResources(diskName).service,\n      $.parts(namespace, name,).diskResources(diskName).provisioner,\n    ],\n    local util = import \"kubeflow/core/util.libsonnet\",\n    local allDisks = std.flattenArrays(std.map(diskToList, util.toArray(disks))),\n\n    items::\n      if std.length(allDisks) > 0 then\n        [\n          $.parts(namespace, name).serviceAccount,\n          $.parts(namespace, name).role,\n          $.parts(namespace, name).roleBinding,\n          $.parts(namespace, name).clusterRoleBinding,\n        ] + allDisks\n      else\n        [],\n\n  }.items,\n\n  // Create a provisioner with the specified name.\n  // disks should be a list GCP persistent disk names; these disks should be in the\n  // same zone as your cluster.\n  // TODO(jlewi):\n  parts(namespace, name):: {\n\n    local serviceAccountName = name,\n    local serviceAccountRoleName = name,\n\n\n    // Create the resources for a specific disk.\n    // Each NFS Provisioner can only manage 1 PD so we need to create one for each disk.\n    diskResources(diskName): {\n\n      local storageClassName = diskName + \"-nfs\",\n      local provisionerName = diskName + \"-provisioner\",\n      local storageClassProvisioner = diskName + \"/nfs\",\n      local serviceName = diskName + \"-service\",\n\n      volumeClaim: {\n        apiVersion: \"v1\",\n        kind: \"PersistentVolumeClaim\",\n        metadata: {\n          annotations: {\n            \"volume.beta.kubernetes.io/storage-class\": storageClassName,\n          },\n          name: diskName,\n          namespace: namespace,\n        },\n        spec: {\n          accessModes: [\n            \"ReadWriteMany\",\n          ],\n          resources: {\n            requests: {\n              storage: \"1Mi\",\n            },\n          },\n        },\n      },\n\n      // TODO(jlewi): Is storageClass actually name space scoped? Seems to show up in default namespace as well.\n      // TODO(jlewi): Could we just use the default cluster storage class?\n      storageClass: {\n        apiVersion: \"storage.k8s.io/v1beta1\",\n        kind: \"StorageClass\",\n        metadata: {\n          name: storageClassName,\n          namespace: namespace,\n        },\n        // This value must be the same as passed as argument --provisioner to the provisioner\n        provisioner: storageClassProvisioner,\n      },\n\n      service: {\n        apiVersion: \"v1\",\n        kind: \"Service\",\n        metadata: {\n          labels: {\n            app: provisionerName,\n          },\n          name: serviceName,\n          namespace: namespace,\n        },\n        spec: {\n          ports: [\n            {\n              name: \"nfs\",\n              port: 2049,\n            },\n            {\n              name: \"mountd\",\n              port: 20048,\n            },\n            {\n              name: \"rpcbind\",\n              port: 111,\n            },\n            {\n              name: \"rpcbind-udp\",\n              port: 111,\n              protocol: \"UDP\",\n            },\n          ],\n          selector: {\n            app: provisionerName,\n          },\n        },\n      },\n\n      provisioner: {\n        apiVersion: \"extensions/v1beta1\",\n        kind: \"Deployment\",\n        metadata: {\n          name: provisionerName,\n          namespace: namespace,\n        },\n        spec: {\n          replicas: 1,\n          strategy: {\n            type: \"Recreate\",\n          },\n          template: {\n            metadata: {\n              labels: {\n                app: provisionerName,\n              },\n            },\n            spec: {\n              containers: [\n                {\n                  args: [\n                    \"-provisioner=\" + storageClassProvisioner,\n                  ],\n                  env: [\n                    {\n                      name: \"POD_IP\",\n                      valueFrom: {\n                        fieldRef: {\n                          fieldPath: \"status.podIP\",\n                        },\n                      },\n                    },\n                    {\n                      name: \"SERVICE_NAME\",\n                      value: serviceName,\n                    },\n                    {\n                      name: \"POD_NAMESPACE\",\n                      valueFrom: {\n                        fieldRef: {\n                          fieldPath: \"metadata.namespace\",\n                        },\n                      },\n                    },\n                  ],\n                  image: \"quay.io/kubernetes_incubator/nfs-provisioner:v1.0.8\",\n                  imagePullPolicy: \"IfNotPresent\",\n                  name: \"nfs-provisioner\",\n                  ports: [\n                    {\n                      containerPort: 2049,\n                      name: \"nfs\",\n                    },\n                    {\n                      containerPort: 20048,\n                      name: \"mountd\",\n                    },\n                    {\n                      containerPort: 111,\n                      name: \"rpcbind\",\n                    },\n                    {\n                      containerPort: 111,\n                      name: \"rpcbind-udp\",\n                      protocol: \"UDP\",\n                    },\n                  ],\n                  securityContext: {\n                    capabilities: {\n                      add: [\n                        \"DAC_READ_SEARCH\",\n                      ],\n                    },\n                  },\n                  volumeMounts: [{\n                    // Needs to be mounted under /export because /export is what is exported for NFS.\n                    //    https://github.com/kubernetes-incubator/external-storage/tree/master/nfs#quickstart\n                    mountPath: \"/export\",\n                    name: diskName,\n                  }],\n                },\n              ],\n              volumes: [{\n                name: diskName,\n                gcePersistentDisk: {\n                  pdName: diskName,\n                },\n              }],\n              serviceAccountName: serviceAccountName,\n            },\n          },\n        },\n      },  // provisioner\n    },\n\n    serviceAccount: {\n      apiVersion: \"v1\",\n      kind: \"ServiceAccount\",\n      metadata: {\n        labels: {\n          app: name + \"nfs-provisioner\",\n        },\n        name: serviceAccountName,\n        namespace: namespace,\n      },\n    },\n\n    role: {\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      kind: \"Role\",\n      metadata: {\n        name: serviceAccountRoleName,\n        namespace: namespace,\n      },\n      rules: [\n        {\n          apiGroups: [\n            \"*\",\n          ],\n          // TODO(jlewi): This is very permissive so we may want to lock this down.\n          resources: [\n            \"*\",\n          ],\n          verbs: [\n            \"*\",\n          ],\n        },\n      ],\n    },\n\n    roleBinding: {\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      kind: \"RoleBinding\",\n      metadata: {\n        name: name + \"-nfs-role\",\n        namespace: namespace,\n      },\n      roleRef: {\n        apiGroup: \"rbac.authorization.k8s.io\",\n        kind: \"Role\",\n        name: serviceAccountName,\n      },\n      subjects: [\n        {\n          kind: \"ServiceAccount\",\n          name: serviceAccountRoleName,\n          namespace: namespace,\n        },\n      ],\n    },\n\n    // see https://github.com/kubernetes-incubator/external-storage/tree/master/docs#authorizing-provisioners-for-rbac-or-openshift\n    clusterRoleBinding: {\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      kind: \"ClusterRoleBinding\",\n      metadata: {\n        name: name + \"-nfs-role\",\n        namespace: namespace,\n      },\n      roleRef: {\n        apiGroup: \"rbac.authorization.k8s.io\",\n        kind: \"ClusterRole\",\n        name: \"system:persistent-volume-provisioner\",\n      },\n      subjects: [\n        {\n          kind: \"ServiceAccount\",\n          name: serviceAccountRoleName,\n          namespace: namespace,\n        },\n      ],\n    },\n\n  },  // parts\n}\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/parts.yaml",
    "content": "{\n   \"name\": \"core\",\n   \"apiVersion\": \"0.0.1\",\n   \"kind\": \"ksonnet.io/parts\",\n   \"description\": \"Core components of Kubeflow.\\n\",\n   \"author\": \"kubeflow team <kubeflow-team@google.com>\",\n   \"contributors\": [\n      {\n         \"name\": \"Jeremy Lewi\",\n         \"email\": \"jlewi@google.com\"\n      }\n   ],\n   \"repository\": {\n      \"type\": \"git\",\n      \"url\": \"https://github.com/kubeflow/kubeflow\"\n   },\n   \"bugs\": {\n      \"url\": \"https://github.com/kubeflow/kubeflow/issues\"\n   },\n   \"keywords\": [\n      \"kubeflow\",\n      \"tensorflow\"\n   ],\n   \"quickStart\": {\n      \"prototype\": \"io.ksonnet.pkg.kubeflow\",\n      \"componentName\": \"core\",\n      \"flags\": {\n         \"name\": \"core\",\n         \"namespace\": \"default\",\n         \"disks\": \"\"\n      },\n      \"comment\": \"Core Kubeflow components.\"\n   },\n   \"license\": \"Apache 2.0\"\n}\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/prototypes/all.jsonnet",
    "content": "// @apiVersion 0.1\n// @name io.ksonnet.pkg.kubeflow-core\n// @description Kubeflow core components\n// @shortDescription Kubeflow core components. This currently includes JupyterHub and the TfJob controller.\n// @param name string Name to give to each of the components\n// @optionalParam namespace string null Namespace to use for the components. It is automatically inherited from the environment if not set.\n// @optionalParam disks string null Comma separated list of Google persistent disks to attach to jupyter environments.\n// @optionalParam cloud string null String identifying the cloud to customize the deployment for.\n// @optionalParam tfAmbassadorServiceType string ClusterIP The service type for the API Gateway.\n// @optionalParam tfJobImage string gcr.io/kubeflow-images-public/tf_operator:v20180329-a7511ff The image for the TfJob controller.\n// @optionalParam tfDefaultImage string null The default image to use for TensorFlow.\n// @optionalParam tfJobUiServiceType string ClusterIP The service type for the UI.\n// @optionalParam jupyterHubServiceType string ClusterIP The service type for Jupyterhub.\n// @optionalParam jupyterHubImage string gcr.io/kubeflow/jupyterhub-k8s:1.0.1 The image to use for JupyterHub.\n// @optionalParam jupyterHubAuthenticator string null The authenticator to use\n// @optionalParam jupyterNotebookPVCMount string null Mount path for PVC. Set empty to disable PVC\n// @optionalParam reportUsage string false Whether or not to report Kubeflow usage to kubeflow.org.\n// @optionalParam usageId string unknown_cluster Optional id to use when reporting usage to kubeflow.org\n\nlocal k = import \"k.libsonnet\";\nlocal all = import \"kubeflow/core/all.libsonnet\";\n\n// updatedParams uses the environment namespace if\n// the namespace parameter is not explicitly set\nlocal updatedParams = params {\n  namespace: if params.namespace == \"null\" then env.namespace else params.namespace,\n};\n\nstd.prune(k.core.v1.list.new(all.parts(updatedParams).all))\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/prototypes/cert-manager.jsonnet",
    "content": "// @apiVersion 0.1\n// @name io.ksonnet.pkg.cert-manager\n// @description Provides cert-manager prototypes for generating SSL certificates.\n// @shortDescription Certificate generation on GKE.\n// @param name string Name for the component\n// @optionalParam namespace string null Namespace to use for the components. It is automatically inherited from the environment if not set.\n// @param acmeEmail string The Lets Encrypt account email address\n// @optionalParam acmeUrl string https://acme-v01.api.letsencrypt.org/directory The ACME server URL, set to https://acme-staging.api.letsencrypt.org/directory for staging API.\n\nlocal k = import \"k.libsonnet\";\nlocal certManager = import \"kubeflow/core/cert-manager.libsonnet\";\n\n// updatedParams uses the environment namespace if\n// the namespace parameter is not explicitly set\nlocal updatedParams = params {\n  namespace: if params.namespace == \"null\" then env.namespace else params.namespace,\n};\n\ncertManager.parts(updatedParams.namespace).certManagerParts(params.acmeEmail, params.acmeUrl)\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/prototypes/cloud-endpoints.jsonnet",
    "content": "// @apiVersion 0.1\n// @name io.ksonnet.pkg.cloud-endpoints\n// @description Provides cloud-endpoints prototypes for creating Cloud Endpoints services and DNS records.\n// @shortDescription Cloud Endpoint domain creation.\n// @param name string Name for the component\n// @param secretName string Name of secret containing the json service account key.\n// @optionalParam secretKey string cloudep-sa.json Name of the key in the secret containing the JSON service account key.\n// @optionalParam namespace string null Namespace to use for the components. It is automatically inherited from the environment if not set.\n\nlocal k = import \"k.libsonnet\";\nlocal cloudEndpoints = import \"kubeflow/core/cloud-endpoints.libsonnet\";\n\n// updatedParams uses the environment namespace if\n// the namespace parameter is not explicitly set\nlocal updatedParams = params {\n  namespace: if params.namespace == \"null\" then env.namespace else params.namespace,\n};\n\ncloudEndpoints.parts(updatedParams.namespace).cloudEndpointsParts(params.secretName, params.secretKey)\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/prototypes/iap-ingress.jsonnet",
    "content": "// @apiVersion 0.1\n// @name io.ksonnet.pkg.iap-ingress\n// @description Provides ingress prototypes for setting up IAP on GKE.\n// @shortDescription Ingress for IAP on GKE.\n// @param name string Name for the component\n// @param ipName string The name of the global ip address to use.\n// @optionalParam namespace string null Namespace to use for the components. It is automatically inherited from the environment if not set.\n// @optionalParam secretName string envoy-ingress-tls The name of the secret containing the SSL certificates.\n// @optionalParam hostname string null The hostname associated with this ingress. Eg: mykubeflow.example.com\n// @optionalParam issuer string letsencrypt-prod The cert-manager issuer name.\n// @optionalParam envoyImage string gcr.io/kubeflow-images-public/envoy:v20180309-0fb4886b463698702b6a08955045731903a18738 The image for envoy.\n// @optionalParam disableJwtChecking string false Disable JWT checking.\n// @optionalParam oauthSecretName string kubeflow-oauth The name of the secret containing the OAuth CLIENT_ID and CLIENT_SECRET.\n\nlocal k = import \"k.libsonnet\";\nlocal iap = import \"kubeflow/core/iap.libsonnet\";\nlocal util = import \"kubeflow/core/util.libsonnet\";\n\n// updatedParams uses the environment namespace if\n// the namespace parameter is not explicitly set\nlocal updatedParams = params {\n  namespace: if params.namespace == \"null\" then env.namespace else params.namespace,\n};\n\nlocal namespace = updatedParams.namespace;\nlocal disableJwtChecking = util.toBool(params.disableJwtChecking);\n\niap.parts(namespace).ingressParts(params.secretName, params.ipName, params.hostname, params.issuer, params.envoyImage, disableJwtChecking, params.oauthSecretName)\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/prototypes/tensorboard.jsonnet",
    "content": "// @apiVersion 1\n// @name io.ksonnet.pkg.tensorboard\n// @description Tensorboard components\n// @shortDescription ksonnet components for Tensorboard\n// @param name string Name to give to each of the components\n\nlocal k = import \"k.libsonnet\";\nlocal tensorboard = import \"kubeflow/core/tensorboard.libsonnet\";\n\nlocal name = import \"param://name\";\n\n// updatedParams includes the namespace from env by default.\n// We can override namespace in params if needed\nlocal updatedParams = env + params;\n\nlocal logDir = updatedParams.logDir;\n\nlocal tb = tensorboard {\n  params+: updatedParams {\n    name: name,\n  },\n};\n\n\n//std.assertEqual(true, std.length(logDir) > 0)\nstd.prune(k.core.v1.list.new(tb.components))\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/spartakus.libsonnet",
    "content": "{\n  local util = import \"kubeflow/core/util.libsonnet\",\n\n  all(params):: {\n    local reportUsageBool = util.toBool(params.reportUsage),\n    result:: if reportUsageBool then\n      [\n        $.parts(params.namespace).role,\n        $.parts(params.namespace).roleBinding,\n        $.parts(params.namespace).serviceAccount,\n        $.parts(params.namespace).deployment(params.usageId),\n      ]\n    else [],\n  }.result,\n\n  parts(namespace):: {\n\n    // Spartakus needs to be able to get information about the cluster in order to create a report.\n    role: {\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      kind: \"ClusterRole\",\n      metadata: {\n        labels: {\n          app: \"spartakus\",\n        },\n        name: \"spartakus\",\n      },\n      rules: [\n        {\n          apiGroups: [\n            \"\",\n          ],\n          resources: [\n            \"nodes\",\n          ],\n          verbs: [\n            \"get\",\n            \"list\",\n          ],\n        },\n      ],\n    },  // role\n\n    roleBinding:: {\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      kind: \"ClusterRoleBinding\",\n      metadata: {\n        labels: {\n          app: \"spartakus\",\n        },\n        name: \"spartakus\",\n      },\n      roleRef: {\n        apiGroup: \"rbac.authorization.k8s.io\",\n        kind: \"ClusterRole\",\n        name: \"spartakus\",\n      },\n      subjects: [\n        {\n          kind: \"ServiceAccount\",\n          name: \"spartakus\",\n          namespace: namespace,\n        },\n      ],\n    },  // operator-role binding\n\n\n    serviceAccount: {\n      apiVersion: \"v1\",\n      kind: \"ServiceAccount\",\n      metadata: {\n        labels: {\n          app: \"spartakus\",\n        },\n        name: \"spartakus\",\n        namespace: namespace,\n      },\n    },\n\n    deployment(usageId):: {\n      apiVersion: \"extensions/v1beta1\",\n      kind: \"Deployment\",\n      metadata: {\n        name: \"spartakus-volunteer\",\n        namespace: namespace,\n      },\n      spec: {\n        replicas: 1,\n        template: {\n          metadata: {\n            labels: {\n              app: \"spartakus-volunteer\",\n            },\n          },\n          spec: {\n            containers: [\n              {\n                image: \"gcr.io/google_containers/spartakus-amd64:v1.0.0\",\n                name: \"volunteer\",\n                args: [\n                  \"volunteer\",\n                  \"--cluster-id=\" + usageId,\n                  \"--database=https://stats-collector.kubeflow.org\",\n                ],\n              },\n            ],\n            serviceAccountName: \"spartakus\",\n          },  // spec\n        },\n      },\n    },  // deployment\n  },\n}\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/tensorboard.libsonnet",
    "content": "{\n  // Parameters are intended to be late bound.\n  params:: {\n    name: null,\n    labels: {\n      app: $.params.name,\n    },\n\n    serviceType: \"ClusterIP\",\n\n    logDir: \"\",\n\n    defaultTbImage: \"gcr.io/tensorflow/tensorflow:latest\",\n\n\n    // Whether or not to enable s3 parameters\n    s3Enable:: false,\n\n    // Which cloud to use\n    cloud:: null,\n  },\n\n  // Parametes specific to GCP.\n  gcpParams:: {\n    gcpCredentialSecretName: \"\",\n  } + $.params,\n\n  // Parameters that control S3 access\n  // params overrides s3params because params can be overwritten by the user to override the defaults.\n  s3params:: {\n    //  Name of the k8s secrets containing S3 credentials\n    s3SecretName: \"\",\n    // Name of the key in the k8s secret containing AWS_ACCESS_KEY_ID.\n    s3SecretAccesskeyidKeyName: \"\",\n\n    // Name of the key in the k8s secret containing AWS_SECRET_ACCESS_KEY.\n    s3SecretSecretaccesskeyKeyName: \"\",\n\n    // S3 region\n    s3AwsRegion: \"us-west-1\",\n\n    // TODO(jlewi): We should use util.toBool to automatically conver to actual boolean values.\n    // The use of strings is left over from when they were prototype parameters which only supports string type.\n\n    // true Whether or not to use https for S3 connections\n    s3UseHttps: \"true\",\n\n    // Whether or not to verify https certificates for S3 connections\n    s3VerifySsl: \"true\",\n\n    // URL for your s3-compatible endpoint.\n    s3Endpoint: \"http://s3.us-west-1.amazonaws.com,\",\n  } + $.params,\n\n\n  components:: {\n\n    all::\n      // TODO(jlewi): It would be better to structure s3 as a mixin.\n      // As an example it would be great to allow S3 and GCS parameters\n      // to be enabled simultaneously. This should be doable because\n      // each entails adding a set of environment variables and volumes\n      // to the containers. These volumes/environment variables shouldn't\n      // overlap so there's no reason we shouldn't be able to just add\n      // both modifications to the base container.\n      // I think we want to restructure things as mixins so they can just\n      // be added.\n      if $.params.s3Enable then\n        [\n          $.s3parts.tb,\n          $.s3parts.tfDeployment,\n        ]\n      else if $.params.cloud == \"gcp\" then\n        [\n          $.gcpParts.tb,\n          $.gcpParts.tfDeployment,\n        ]\n      else\n        [\n          $.parts.tb,\n          $.parts.tfDeployment,\n        ],\n  }.all,\n\n  parts:: {\n    // We define the containers one level beneath parts because combined with jsonnet late binding\n    // this makes it easy for users to override specific bits of the container.\n    tbContainer:: {\n      name: $.params.name,\n      image: $.params.defaultTbImage,\n      imagePullPolicy: \"IfNotPresent\",\n      args: [\n        $.params.logDir,\n        \"--port=9000\",\n      ],\n      command: [\n        \"/usr/local/bin/tensorboard\",\n      ],\n      ports: [\n        {\n          containerPort: 9000,\n        },\n      ],\n\n      resources: {\n        requests: {\n          memory: \"1Gi\",\n          cpu: \"1\",\n        },\n        limits: {\n          memory: \"4Gi\",\n          cpu: \"4\",\n        },\n      },\n    },  // tbContainer\n\n    tfDeployment: {\n      apiVersion: \"extensions/v1beta1\",\n      kind: \"Deployment\",\n      metadata: {\n        name: $.params.name,\n        namespace: $.params.namespace,\n        labels: $.params.labels,\n      },\n      spec: {\n        template: {\n          metadata: {\n            labels: $.params.labels,\n          },\n          spec: {\n            containers: [\n              $.parts.tbContainer,\n            ],\n\n          },\n        },\n      },\n    },  // tfDeployment\n\n    tb: {\n      apiVersion: \"v1\",\n      kind: \"Service\",\n      metadata: {\n        labels: $.params.labels,\n        name: $.params.name,\n        namespace: $.params.namespace,\n        annotations: {\n          \"getambassador.io/config\":\n            std.join(\"\\n\", [\n              \"---\",\n              \"apiVersion: ambassador/v0\",\n              \"kind:  Mapping\",\n              \"name: tb-mapping-\" + $.params.name + \"-get\",\n              \"prefix: /tensorboard/ \" + $.params.name + \"/\",\n              \"rewrite: /\",\n              \"method: GET\",\n              \"service: \" + $.params.name + \".\" + $.params.namespace + \":9000\",\n            ]),\n        },  //annotations\n      },\n      spec: {\n        ports: [\n          {\n            name: \"tb\",\n            port: 9000,\n            targetPort: 9000,\n          },\n        ],\n        selector: $.params.labels,\n        type: $.params.serviceType,\n      },\n    },  // tb\n\n  },  // parts\n\n  // Parts specific to S3\n  s3parts:: $.parts {\n    s3Env:: [\n      { name: \"AWS_ACCESS_KEY_ID\", valueFrom: { secretKeyRef: { name: $.s3params.s3SecretName, key: $.s3params.s3SecretAccesskeyidKeyName } } },\n      { name: \"AWS_SECRET_ACCESS_KEY\", valueFrom: { secretKeyRef: { name: $.s3params.s3SecretName, key: $.s3params.s3SecretSecretaccesskeyKeyName } } },\n      { name: \"AWS_REGION\", value: $.s3params.s3AwsRegion },\n      { name: \"S3_REGION\", value: $.s3params.s3AwsRegion },\n      { name: \"S3_USE_HTTPS\", value: $.s3params.s3UseHttps },\n      { name: \"S3_VERIFY_SSL\", value: $.s3params.s3VerifySsl },\n      { name: \"S3_ENDPOINT\", value: $.s3params.s3Endpoint },\n    ],\n\n    tbContainer: $.parts.tbContainer {\n      env+: $.s3parts.s3Env,\n    },\n\n    tfDeployment: $.parts.tfDeployment {\n      spec: +{\n        template: +{\n\n          spec: +{\n            containers: [\n              $.s3parts.tbContainer,\n            ],\n          },\n        },\n      },\n    },  // tfDeployment\n  },  // s3parts\n\n  // Parts specific to GCP\n  gcpParts:: $.parts {\n    gcpEnv:: [\n      if $.gcpParams.gcpCredentialSecretName != \"\" then\n        { name: \"GOOGLE_APPLICATION_CREDENTIALS\", value: \"/secret/gcp-credentials/key.json\" },\n    ],\n\n    tbContainer: $.parts.tbContainer {\n      env+: $.gcpParts.gcpEnv,\n      volumeMounts+: [\n        if $.gcpParams.gcpCredentialSecretName != \"\" then\n          {\n            name: \"gcp-credentials\",\n            mountPath: \"/secret/gcp-credentials\",\n          },\n      ],\n    },\n\n    tfDeployment: $.parts.tfDeployment {\n      spec+: {\n        template+: {\n\n          spec+: {\n            containers: [\n              $.gcpParts.tbContainer,\n            ],\n\n            volumes: [\n              if $.gcpParams.gcpCredentialSecretName != \"\" then\n                {\n                  name: \"gcp-credentials\",\n                  secret: {\n                    secretName: $.gcpParams.gcpCredentialSecretName,\n                  },\n                },\n            ],\n          },\n        },\n      },\n    },  // tfDeployment\n  },  // gcpParts\n}\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/tests/ambassador_test.jsonnet",
    "content": "local ambassador = import \"../ambassador.libsonnet\";\nlocal params = {\n  namespace:: \"test-kf-001\",\n  tfAmbassadorServiceType:: \"ClusterIP\",\n};\n\nstd.assertEqual(\n  ambassador.parts(params.namespace).service(params.tfAmbassadorServiceType),\n  {\n    apiVersion: \"v1\",\n    kind: \"Service\",\n    metadata: {\n      labels: {\n        service: \"ambassador\",\n      },\n      name: \"ambassador\",\n      namespace: \"test-kf-001\",\n    },\n    spec: {\n      ports: [\n        {\n          name: \"ambassador\",\n          port: 80,\n          targetPort: 80,\n        },\n      ],\n      selector: {\n        service: \"ambassador\",\n      },\n      type: \"ClusterIP\",\n    },\n  }\n) &&\n\nstd.assertEqual(\n  ambassador.parts(params.namespace).adminService,\n  {\n    apiVersion: \"v1\",\n    kind: \"Service\",\n    metadata: {\n      labels: {\n        service: \"ambassador-admin\",\n      },\n      name: \"ambassador-admin\",\n      namespace: \"test-kf-001\",\n    },\n    spec: {\n      ports: [\n        {\n          name: \"ambassador-admin\",\n          port: 8877,\n          targetPort: 8877,\n        },\n      ],\n      selector: {\n        service: \"ambassador\",\n      },\n      type: \"ClusterIP\",\n    },\n  }\n) &&\n\nstd.assertEqual(\n  ambassador.parts(params.namespace).role,\n  {\n    apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n    kind: \"Role\",\n    metadata: {\n      name: \"ambassador\",\n      namespace: \"test-kf-001\",\n    },\n    rules: [\n      {\n        apiGroups: [\n          \"\",\n        ],\n        resources: [\n          \"services\",\n        ],\n        verbs: [\n          \"get\",\n          \"list\",\n          \"watch\",\n        ],\n      },\n      {\n        apiGroups: [\n          \"\",\n        ],\n        resources: [\n          \"configmaps\",\n        ],\n        verbs: [\n          \"create\",\n          \"update\",\n          \"patch\",\n          \"get\",\n          \"list\",\n          \"watch\",\n        ],\n      },\n      {\n        apiGroups: [\n          \"\",\n        ],\n        resources: [\n          \"secrets\",\n        ],\n        verbs: [\n          \"get\",\n          \"list\",\n          \"watch\",\n        ],\n      },\n    ],\n  }\n) &&\n\nstd.assertEqual(\n  ambassador.parts(params.namespace).serviceAccount,\n  {\n    apiVersion: \"v1\",\n    kind: \"ServiceAccount\",\n    metadata: {\n      name: \"ambassador\",\n      namespace: \"test-kf-001\",\n    },\n  }\n) &&\n\nstd.assertEqual(\n  ambassador.parts(params.namespace).roleBinding,\n  {\n    apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n    kind: \"RoleBinding\",\n    metadata: {\n      name: \"ambassador\",\n      namespace: \"test-kf-001\",\n    },\n    roleRef: {\n      apiGroup: \"rbac.authorization.k8s.io\",\n      kind: \"Role\",\n      name: \"ambassador\",\n    },\n    subjects: [\n      {\n        kind: \"ServiceAccount\",\n        name: \"ambassador\",\n        namespace: \"test-kf-001\",\n      },\n    ],\n  }\n) &&\n\nstd.assertEqual(\n  ambassador.parts(params.namespace).deploy,\n  {\n    apiVersion: \"extensions/v1beta1\",\n    kind: \"Deployment\",\n    metadata: {\n      name: \"ambassador\",\n      namespace: \"test-kf-001\",\n    },\n    spec: {\n      replicas: 3,\n      template: {\n        metadata: {\n          labels: {\n            service: \"ambassador\",\n          },\n          namespace: \"test-kf-001\",\n        },\n        spec: {\n          containers: [\n            {\n              env: [\n                {\n                  name: \"AMBASSADOR_NAMESPACE\",\n                  valueFrom: {\n                    fieldRef: {\n                      fieldPath: \"metadata.namespace\",\n                    },\n                  },\n                },\n                {\n                  name: \"AMBASSADOR_SINGLE_NAMESPACE\",\n                  value: \"true\",\n                },\n              ],\n              image: \"quay.io/datawire/ambassador:0.30.1\",\n              livenessProbe: {\n                httpGet: {\n                  path: \"/ambassador/v0/check_alive\",\n                  port: 8877,\n                },\n                initialDelaySeconds: 30,\n                periodSeconds: 30,\n              },\n              name: \"ambassador\",\n              readinessProbe: {\n                httpGet: {\n                  path: \"/ambassador/v0/check_ready\",\n                  port: 8877,\n                },\n                initialDelaySeconds: 30,\n                periodSeconds: 30,\n              },\n              resources: {\n                limits: {\n                  cpu: 1,\n                  memory: \"400Mi\",\n                },\n                requests: {\n                  cpu: \"200m\",\n                  memory: \"100Mi\",\n                },\n              },\n            },\n            {\n              image: \"quay.io/datawire/statsd:0.30.1\",\n              name: \"statsd\",\n            },\n          ],\n          restartPolicy: \"Always\",\n          serviceAccountName: \"ambassador\",\n        },\n      },\n    },\n  }\n) &&\n\nstd.assertEqual(\n  ambassador.parts(params.namespace).k8sDashboard(\"cloud\"),\n  {\n    apiVersion: \"v1\",\n    kind: \"Service\",\n    metadata: {\n      annotations: {\n        \"getambassador.io/config\": \"---\\napiVersion: ambassador/v0\\nkind:  Mapping\\nname: k8s-dashboard-ui-mapping\\nprefix: /k8s/ui/\\nrewrite: /\\ntls: true\\nservice: kubernetes-dashboard.kube-system\",\n      },\n      name: \"k8s-dashboard\",\n      namespace: \"test-kf-001\",\n    },\n    spec: {\n      ports: [\n        {\n          port: 443,\n          targetPort: 8443,\n        },\n      ],\n      selector: {\n        \"k8s-app\": \"kubernetes-dashboard\",\n      },\n      type: \"ClusterIP\",\n    },\n  }\n)\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/tests/iap_test.jsonnet",
    "content": "local iap = import \"../iap.libsonnet\";\n\nstd.assertEqual(iap.parts(\"namespace\").service, {\n  apiVersion: \"v1\",\n  kind: \"Service\",\n  metadata: {\n    labels: {\n      service: \"envoy\",\n    },\n    name: \"envoy\",\n    namespace: \"namespace\",\n  },\n  spec: {\n    ports: [\n      {\n        name: \"envoy\",\n        port: 8080,\n        targetPort: 8080,\n      },\n    ],\n    selector: {\n      service: \"envoy\",\n    },\n    type: \"NodePort\",\n  },\n}) &&\n\nstd.assertEqual(iap.parts(\"namespace\").ingress(\"secretName\", \"ipName\", \"hostname\"), {\n  apiVersion: \"extensions/v1beta1\",\n  kind: \"Ingress\",\n  metadata: {\n    name: \"envoy-ingress\",\n    namespace: \"namespace\",\n    annotations: {\n      \"kubernetes.io/tls-acme\": \"true\",\n      \"ingress.kubernetes.io/ssl-redirect\": \"true\",\n      \"kubernetes.io/ingress.global-static-ip-name\": \"ipName\",\n    },\n  },\n  spec: {\n    rules: [\n      {\n        host: \"hostname\",\n        http: {\n          paths: [\n            {\n              backend: {\n                serviceName: \"envoy\",\n                servicePort: 8080,\n              },\n              path: \"/*\",\n            },\n          ],\n        },\n      },\n    ],\n    tls: [\n      {\n        secretName: \"secretName\",\n      },\n    ],\n  },\n}) &&\n\nstd.assertEqual(iap.parts(\"namespace\").ingress(\"secretName\", \"ipName\", \"null\"), {\n  apiVersion: \"extensions/v1beta1\",\n  kind: \"Ingress\",\n  metadata: {\n    name: \"envoy-ingress\",\n    namespace: \"namespace\",\n    annotations: {\n      \"kubernetes.io/tls-acme\": \"true\",\n      \"ingress.kubernetes.io/ssl-redirect\": \"true\",\n      \"kubernetes.io/ingress.global-static-ip-name\": \"ipName\",\n    },\n  },\n  spec: {\n    rules: [\n      {\n        http: {\n          paths: [\n            {\n              backend: {\n                serviceName: \"envoy\",\n                servicePort: 8080,\n              },\n              path: \"/*\",\n            },\n          ],\n        },\n      },\n    ],\n    tls: [\n      {\n        secretName: \"secretName\",\n      },\n    ],\n  },\n}) &&\n\nstd.assertEqual(iap.parts(\"namespace\").certificate(\"secretName\", \"hostname\", \"issuer\"), {\n  apiVersion: \"certmanager.k8s.io/v1alpha1\",\n  kind: \"Certificate\",\n  metadata: {\n    name: \"secretName\",\n    namespace: \"namespace\",\n  },\n  spec: {\n    secretName: \"secretName\",\n    issuerRef: {\n      name: \"issuer\",\n    },\n    commonName: \"hostname\",\n    dnsNames: [\n      \"hostname\",\n    ],\n    acme: {\n      config: [\n        {\n          http01: {\n            ingress: \"envoy-ingress\",\n          },\n          domains: [\n            \"hostname\",\n          ],\n        },\n      ],\n    },\n  },\n}) &&\n\nstd.assertEqual(iap.parts(\"namespace\").whoamiApp, {\n  apiVersion: \"extensions/v1beta1\",\n  kind: \"Deployment\",\n  metadata: {\n    name: \"whoami-app\",\n    namespace: \"namespace\",\n  },\n  spec: {\n    replicas: 1,\n    template: {\n      metadata: {\n        labels: {\n          app: \"whoami\",\n        },\n      },\n      spec: {\n        containers: [\n          {\n            env: [\n              {\n                name: \"PORT\",\n                value: \"8081\",\n              },\n            ],\n            image: \"gcr.io/cloud-solutions-group/esp-sample-app:1.0.0\",\n            name: \"app\",\n            ports: [\n              {\n                containerPort: 8081,\n              },\n            ],\n            readinessProbe: {\n              failureThreshold: 2,\n              httpGet: {\n                path: \"/healthz\",\n                port: 8081,\n                scheme: \"HTTP\",\n              },\n              periodSeconds: 10,\n              successThreshold: 1,\n              timeoutSeconds: 5,\n            },\n          },\n        ],\n      },\n    },\n  },\n}) &&\n\nstd.assertEqual(iap.parts(\"namespace\").whoamiService, {\n  apiVersion: \"v1\",\n  kind: \"Service\",\n  metadata: {\n    labels: {\n      app: \"whoami\",\n    },\n    name: \"whoami-app\",\n    namespace: \"namespace\",\n  },\n  spec: {\n    ports: [\n      {\n        port: 80,\n        targetPort: 8081,\n      },\n    ],\n    selector: {\n      app: \"whoami\",\n    },\n    type: \"ClusterIP\",\n  },\n})\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/tests/jupyterhub_test.jsonnet",
    "content": "local jupyterhub = import \"../jupyterhub.libsonnet\";\nlocal params = {\n  namespace:: \"test-kf-001\",\n  disks:: \"disk01,disk02\",\n  jupyterHubAuthenticator:: null,\n  jupyterHubServiceType:: \"ClusterIP\",\n  jupyterHubImage: \"gcr.io/kubeflow/jupyterhub-k8s:1.0.1\",\n  jupyterNotebookPVCMount: \"/home/jovyan/work\",\n  cloud: null,\n};\n\nlocal baseSpawner = importstr \"../kubeform_spawner.py\";\n\n// TODO(jlewi): We should be able to use std.startsWidth in later versions of jsonnet.\n//\nlocal config = jupyterhub.parts(params.namespace).jupyterHubConfigMap(params.jupyterHubAuthenticator, params.disks).data[\"jupyterhub_config.py\"];\nlocal configPrefix = std.substr(config, 0, std.length(baseSpawner));\nlocal configSuffix = std.substr(config, std.length(baseSpawner), std.length(config) - std.length(baseSpawner));\nlocal configSuffixLines = std.split(configSuffix, \"\\n\");\n\n// This assertion varies the config map is the same after zeroing the actual data.\n// The data will be compared in subsequent steps.\nstd.assertEqual(jupyterhub.parts(params.namespace).jupyterHubConfigMap(params.jupyterHubAuthenticator, params.disks) + {\n  data: {\n    \"jupyterhub_config.py\": \"\",\n  },\n}\n                , {\n  apiVersion: \"v1\",\n  data: {\n    \"jupyterhub_config.py\": \"\",\n  },\n  kind: \"ConfigMap\",\n  metadata: {\n    name: \"jupyterhub-config\",\n    namespace: \"test-kf-001\",\n  },\n}) &&\n\n// This step verifies that the start of the spawner config is the raw file.\nstd.assertEqual(configPrefix, baseSpawner)\n\n&&\n\n// These step verifies the suffix.\n// Verifying each line makes it much easier to debug test failures because if you just compare to a big blob\n// of text its much harder to know where they differ.\nstd.assertEqual(configSuffixLines[1], \"######## Authenticator ######\")\n&&\nstd.assertEqual(configSuffixLines[2], \"c.JupyterHub.authenticator_class = 'dummyauthenticator.DummyAuthenticator'\")\n&&\nstd.assertEqual(configSuffixLines[3], \"###### Volumes #######\")\n&&\nstd.assertEqual(configSuffixLines[4], 'c.KubeSpawner.volumes = [{\"name\": \"disk01\", \"persistentVolumeClaim\": {\"claimName\": \"disk01\"}}, {\"name\": \"disk02\", \"persistentVolumeClaim\": {\"claimName\": \"disk02\"}}]')\n&&\nstd.assertEqual(configSuffixLines[5], 'c.KubeSpawner.volume_mounts = [{\"mountPath\": \"/mnt/disk01\", \"name\": \"disk01\"}, {\"mountPath\": \"/mnt/disk02\", \"name\": \"disk02\"}]')\n&&\n\nstd.assertEqual(jupyterhub.parts(params.namespace).jupyterHubService,\n                {\n                  apiVersion: \"v1\",\n                  kind: \"Service\",\n                  metadata: {\n                    labels: {\n                      app: \"tf-hub\",\n                    },\n                    name: \"tf-hub-0\",\n                    namespace: \"test-kf-001\",\n                  },\n                  spec: {\n                    clusterIP: \"None\",\n                    ports: [\n                      {\n                        name: \"hub\",\n                        port: 8000,\n                      },\n                    ],\n                    selector: {\n                      app: \"tf-hub\",\n                    },\n                  },\n                }) &&\n\nstd.assertEqual(jupyterhub.parts(params.namespace).jupyterHubLoadBalancer(params.jupyterHubServiceType),\n                {\n                  apiVersion: \"v1\",\n                  kind: \"Service\",\n                  metadata: {\n                    labels: {\n                      app: \"tf-hub-lb\",\n                    },\n                    name: \"tf-hub-lb\",\n                    namespace: \"test-kf-001\",\n                  },\n                  spec: {\n                    ports: [\n                      {\n                        name: \"hub\",\n                        port: 80,\n                        targetPort: 8000,\n                      },\n                    ],\n                    selector: {\n                      app: \"tf-hub\",\n                    },\n                    type: \"ClusterIP\",\n                  },\n                }) &&\n\nstd.assertEqual(jupyterhub.parts(params.namespace).jupyterHub(params.jupyterHubImage, params.jupyterNotebookPVCMount, params.cloud),\n                {\n                  apiVersion: \"apps/v1beta1\",\n                  kind: \"StatefulSet\",\n                  metadata: {\n                    name: \"tf-hub\",\n                    namespace: \"test-kf-001\",\n                  },\n                  spec: {\n                    replicas: 1,\n                    serviceName: \"\",\n                    template: {\n                      metadata: {\n                        labels: {\n                          app: \"tf-hub\",\n                        },\n                      },\n                      spec: {\n                        containers: [\n                          {\n                            command: [\n                              \"jupyterhub\",\n                              \"-f\",\n                              \"/etc/config/jupyterhub_config.py\",\n                            ],\n                            env: [\n                              {\n                                name: \"NOTEBOOK_PVC_MOUNT\",\n                                value: params.jupyterNotebookPVCMount,\n                              },\n                              {\n                                name: \"CLOUD_NAME\",\n                                value: null,\n                              },\n                            ],\n                            image: \"gcr.io/kubeflow/jupyterhub-k8s:1.0.1\",\n                            name: \"tf-hub\",\n                            ports: [\n                              {\n                                containerPort: 8000,\n                              },\n                              {\n                                containerPort: 8081,\n                              },\n                            ],\n                            volumeMounts: [\n                              {\n                                mountPath: \"/etc/config\",\n                                name: \"config-volume\",\n                              },\n                            ],\n                          },\n                        ],\n                        serviceAccountName: \"jupyter-hub\",\n                        volumes: [\n                          {\n                            configMap: {\n                              name: \"jupyterhub-config\",\n                            },\n                            name: \"config-volume\",\n                          },\n                        ],\n                      },\n                    },\n                    updateStrategy: {\n                      type: \"RollingUpdate\",\n                    },\n                  },\n                }) &&\n\nstd.assertEqual(jupyterhub.parts(params.namespace).jupyterHubRole,\n                {\n                  apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n                  kind: \"Role\",\n                  metadata: {\n                    name: \"jupyter-role\",\n                    namespace: \"test-kf-001\",\n                  },\n                  rules: [\n                    {\n                      apiGroups: [\n                        \"*\",\n                      ],\n                      resources: [\n                        \"*\",\n                      ],\n                      verbs: [\n                        \"*\",\n                      ],\n                    },\n                  ],\n                }) &&\n\nstd.assertEqual(jupyterhub.parts(params.namespace).jupyterHubServiceAccount,\n                {\n                  apiVersion: \"v1\",\n                  kind: \"ServiceAccount\",\n                  metadata: {\n                    labels: {\n                      app: \"jupyter-hub\",\n                    },\n                    name: \"jupyter-hub\",\n                    namespace: \"test-kf-001\",\n                  },\n                }) &&\n\nstd.assertEqual(jupyterhub.parts(params.namespace).jupyterHubRoleBinding,\n                {\n                  apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n                  kind: \"RoleBinding\",\n                  metadata: {\n                    name: \"jupyter-role\",\n                    namespace: \"test-kf-001\",\n                  },\n                  roleRef: {\n                    apiGroup: \"rbac.authorization.k8s.io\",\n                    kind: \"Role\",\n                    name: \"jupyter-role\",\n                  },\n                  subjects: [\n                    {\n                      kind: \"ServiceAccount\",\n                      name: \"jupyter-hub\",\n                      namespace: \"test-kf-001\",\n                    },\n                  ],\n                })\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/tests/nfs_test.jsonnet",
    "content": "local nfs = import \"../nfs.libsonnet\";\nlocal params = {\n  namespace:: \"test-kf-001\",\n  name:: \"nfs\",\n};\n\nstd.assertEqual(\n  nfs.parts(params.namespace, params.name).serviceAccount,\n  {\n    apiVersion: \"v1\",\n    kind: \"ServiceAccount\",\n    metadata: {\n      labels: {\n        app: \"nfsnfs-provisioner\",\n      },\n      name: \"nfs\",\n      namespace: \"test-kf-001\",\n    },\n  }\n) &&\n\nstd.assertEqual(\n  nfs.parts(params.namespace, params.name).role,\n  {\n    apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n    kind: \"Role\",\n    metadata: {\n      name: \"nfs\",\n      namespace: \"test-kf-001\",\n    },\n    rules: [\n      {\n        apiGroups: [\n          \"*\",\n        ],\n        resources: [\n          \"*\",\n        ],\n        verbs: [\n          \"*\",\n        ],\n      },\n    ],\n  }\n) &&\n\nstd.assertEqual(\n  nfs.parts(params.namespace, params.name).roleBinding,\n  {\n    apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n    kind: \"RoleBinding\",\n    metadata: {\n      name: \"nfs-nfs-role\",\n      namespace: \"test-kf-001\",\n    },\n    roleRef: {\n      apiGroup: \"rbac.authorization.k8s.io\",\n      kind: \"Role\",\n      name: \"nfs\",\n    },\n    subjects: [\n      {\n        kind: \"ServiceAccount\",\n        name: \"nfs\",\n        namespace: \"test-kf-001\",\n      },\n    ],\n  }\n) &&\n\nstd.assertEqual(\n  nfs.parts(params.namespace, params.name).clusterRoleBinding,\n  {\n    apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n    kind: \"ClusterRoleBinding\",\n    metadata: {\n      name: \"nfs-nfs-role\",\n      namespace: \"test-kf-001\",\n    },\n    roleRef: {\n      apiGroup: \"rbac.authorization.k8s.io\",\n      kind: \"ClusterRole\",\n      name: \"system:persistent-volume-provisioner\",\n    },\n    subjects: [\n      {\n        kind: \"ServiceAccount\",\n        name: \"nfs\",\n        namespace: \"test-kf-001\",\n      },\n    ],\n  }\n)\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/tests/spartakus_test.jsonnet",
    "content": "local spartakus = import \"../spartakus.libsonnet\";\nlocal params = {\n  namespace:: \"test-kf-001\",\n  usageId:: \"unknown_cluster\",\n};\n\nstd.assertEqual(\n  spartakus.parts(params.namespace).role,\n  {\n    apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n    kind: \"ClusterRole\",\n    metadata: {\n      labels: {\n        app: \"spartakus\",\n      },\n      name: \"spartakus\",\n    },\n    rules: [\n      {\n        apiGroups: [\n          \"\",\n        ],\n        resources: [\n          \"nodes\",\n        ],\n        verbs: [\n          \"get\",\n          \"list\",\n        ],\n      },\n    ],\n  }\n) &&\n\nstd.assertEqual(\n  spartakus.parts(params.namespace).roleBinding,\n  {\n    apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n    kind: \"ClusterRoleBinding\",\n    metadata: {\n      labels: {\n        app: \"spartakus\",\n      },\n      name: \"spartakus\",\n    },\n    roleRef: {\n      apiGroup: \"rbac.authorization.k8s.io\",\n      kind: \"ClusterRole\",\n      name: \"spartakus\",\n    },\n    subjects: [\n      {\n        kind: \"ServiceAccount\",\n        name: \"spartakus\",\n        namespace: \"test-kf-001\",\n      },\n    ],\n  }\n) &&\n\nstd.assertEqual(\n  spartakus.parts(params.namespace).serviceAccount,\n  {\n    apiVersion: \"v1\",\n    kind: \"ServiceAccount\",\n    metadata: {\n      labels: {\n        app: \"spartakus\",\n      },\n      name: \"spartakus\",\n      namespace: \"test-kf-001\",\n    },\n  }\n) &&\n\nstd.assertEqual(\n  spartakus.parts(params.namespace).deployment(params.usageId),\n  {\n    apiVersion: \"extensions/v1beta1\",\n    kind: \"Deployment\",\n    metadata: {\n      name: \"spartakus-volunteer\",\n      namespace: \"test-kf-001\",\n    },\n    spec: {\n      replicas: 1,\n      template: {\n        metadata: {\n          labels: {\n            app: \"spartakus-volunteer\",\n          },\n        },\n        spec: {\n          containers: [\n            {\n              args: [\n                \"volunteer\",\n                \"--cluster-id=unknown_cluster\",\n                \"--database=https://stats-collector.kubeflow.org\",\n              ],\n              image: \"gcr.io/google_containers/spartakus-amd64:v1.0.0\",\n              name: \"volunteer\",\n            },\n          ],\n          serviceAccountName: \"spartakus\",\n        },\n      },\n    },\n  }\n)\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/tests/tf-job_test.jsonnet",
    "content": "local tfjob = import \"../tf-job.libsonnet\";\nlocal params = {\n  namespace:: \"test-kf-001\",\n  cloud:: \"azure\",\n  tfJobImage:: \"gcr.io/kubeflow-images-public/tf_operator:v20180226-403\",\n  tfDefaultImage:: \"null\",\n};\n\nstd.assertEqual(\n  tfjob.parts(params.namespace).tfJobDeploy(params.tfJobImage),\n  {\n    apiVersion: \"extensions/v1beta1\",\n    kind: \"Deployment\",\n    metadata: {\n      name: \"tf-job-operator\",\n      namespace: \"test-kf-001\",\n    },\n    spec: {\n      replicas: 1,\n      template: {\n        metadata: {\n          labels: {\n            name: \"tf-job-operator\",\n          },\n        },\n        spec: {\n          containers: [\n            {\n              command: [\n                \"/opt/mlkube/tf-operator\",\n                \"--controller-config-file=/etc/config/controller_config_file.yaml\",\n                \"--alsologtostderr\",\n                \"-v=1\",\n              ],\n              env: [\n                {\n                  name: \"MY_POD_NAMESPACE\",\n                  valueFrom: {\n                    fieldRef: {\n                      fieldPath: \"metadata.namespace\",\n                    },\n                  },\n                },\n                {\n                  name: \"MY_POD_NAME\",\n                  valueFrom: {\n                    fieldRef: {\n                      fieldPath: \"metadata.name\",\n                    },\n                  },\n                },\n              ],\n              image: \"gcr.io/kubeflow-images-public/tf_operator:v20180226-403\",\n              name: \"tf-job-operator\",\n              volumeMounts: [\n                {\n                  mountPath: \"/etc/config\",\n                  name: \"config-volume\",\n                },\n              ],\n            },\n          ],\n          serviceAccountName: \"tf-job-operator\",\n          volumes: [\n            {\n              configMap: {\n                name: \"tf-job-operator-config\",\n              },\n              name: \"config-volume\",\n            },\n          ],\n        },\n      },\n    },\n  }\n) &&\n\nstd.assertEqual(\n  tfjob.parts(params.namespace).configMap(params.cloud, params.tfDefaultImage),\n  {\n    apiVersion: \"v1\",\n    data: {\n      \"controller_config_file.yaml\": '{\\n    \"grpcServerFilePath\": \"/opt/mlkube/grpc_tensorflow_server/grpc_tensorflow_server.py\"\\n}',\n    },\n    kind: \"ConfigMap\",\n    metadata: {\n      name: \"tf-job-operator-config\",\n      namespace: \"test-kf-001\",\n    },\n  }\n) &&\n\nstd.assertEqual(\n  tfjob.parts(params.namespace).serviceAccount,\n  {\n    apiVersion: \"v1\",\n    kind: \"ServiceAccount\",\n    metadata: {\n      labels: {\n        app: \"tf-job-operator\",\n      },\n      name: \"tf-job-operator\",\n      namespace: \"test-kf-001\",\n    },\n  }\n) &&\n\nstd.assertEqual(\n  tfjob.parts(params.namespace).operatorRole,\n  {\n    apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n    kind: \"ClusterRole\",\n    metadata: {\n      labels: {\n        app: \"tf-job-operator\",\n      },\n      name: \"tf-job-operator\",\n    },\n    rules: [\n      {\n        apiGroups: [\n          \"tensorflow.org\",\n          \"kubeflow.org\",\n        ],\n        resources: [\n          \"tfjobs\",\n        ],\n        verbs: [\n          \"*\",\n        ],\n      },\n      {\n        apiGroups: [\n          \"apiextensions.k8s.io\",\n        ],\n        resources: [\n          \"customresourcedefinitions\",\n        ],\n        verbs: [\n          \"*\",\n        ],\n      },\n      {\n        apiGroups: [\n          \"storage.k8s.io\",\n        ],\n        resources: [\n          \"storageclasses\",\n        ],\n        verbs: [\n          \"*\",\n        ],\n      },\n      {\n        apiGroups: [\n          \"batch\",\n        ],\n        resources: [\n          \"jobs\",\n        ],\n        verbs: [\n          \"*\",\n        ],\n      },\n      {\n        apiGroups: [\n          \"\",\n        ],\n        resources: [\n          \"configmaps\",\n          \"pods\",\n          \"services\",\n          \"endpoints\",\n          \"persistentvolumeclaims\",\n          \"events\",\n        ],\n        verbs: [\n          \"*\",\n        ],\n      },\n      {\n        apiGroups: [\n          \"apps\",\n          \"extensions\",\n        ],\n        resources: [\n          \"deployments\",\n        ],\n        verbs: [\n          \"*\",\n        ],\n      },\n    ],\n  }\n) &&\n\nstd.assertEqual(\n  tfjob.parts(params.namespace).operatorRoleBinding,\n  {\n    apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n    kind: \"ClusterRoleBinding\",\n    metadata: {\n      labels: {\n        app: \"tf-job-operator\",\n      },\n      name: \"tf-job-operator\",\n    },\n    roleRef: {\n      apiGroup: \"rbac.authorization.k8s.io\",\n      kind: \"ClusterRole\",\n      name: \"tf-job-operator\",\n    },\n    subjects: [\n      {\n        kind: \"ServiceAccount\",\n        name: \"tf-job-operator\",\n        namespace: \"test-kf-001\",\n      },\n    ],\n  }\n) &&\n\nstd.assertEqual(\n  tfjob.parts(params.namespace).crd,\n  {\n    apiVersion: \"apiextensions.k8s.io/v1beta1\",\n    kind: \"CustomResourceDefinition\",\n    metadata: {\n      name: \"tfjobs.kubeflow.org\",\n    },\n    spec: {\n      group: \"kubeflow.org\",\n      names: {\n        kind: \"TFJob\",\n        plural: \"tfjobs\",\n        singular: \"tfjob\",\n      },\n      version: \"v1alpha1\",\n    },\n  }\n)\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/tests/util_test.jsonnet",
    "content": "local util = import \"../util.libsonnet\";\n\nstd.assertEqual(util.upper(\"True\"), \"TRUE\") &&\nstd.assertEqual(util.upper(\"TrUe\"), \"TRUE\") &&\nstd.assertEqual(util.upper(\"true\"), \"TRUE\") &&\nstd.assertEqual(util.upper(\"TRUE\"), \"TRUE\") &&\nstd.assertEqual(util.toBool(false), false) &&\nstd.assertEqual(util.toBool(true), true) &&\nstd.assertEqual(util.toBool(\"true\"), true) &&\nstd.assertEqual(util.toBool(\"True\"), true) &&\nstd.assertEqual(util.toBool(\"TRUE\"), true) &&\nstd.assertEqual(util.toBool(\"false\"), false) &&\nstd.assertEqual(util.toBool(\"False\"), false) &&\nstd.assertEqual(util.toBool(\"FALSE\"), false) &&\nstd.assertEqual(util.toBool(\"random string\"), false) &&\nstd.assertEqual(util.toBool(1), true) &&\nstd.assertEqual(util.toBool(0), false) &&\nstd.assertEqual(util.toBool(123), true) &&\nstd.assertEqual(std.length(util.toArray(\"a,b,c,d\")), 4) &&\nstd.assertEqual(std.length(util.toArray(2)), 0) &&\nstd.assertEqual(std.length(util.toArray(\"hello world\")), 1) &&\nstd.assertEqual(std.length(util.toArray([1, 2, 3, 4])), 0)\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/tf-job.libsonnet",
    "content": "{\n  all(params):: [\n    $.parts(params.namespace).tfJobDeploy(params.tfJobImage),\n    $.parts(params.namespace).configMap(params.cloud, params.tfDefaultImage),\n    $.parts(params.namespace).serviceAccount,\n    $.parts(params.namespace).operatorRole,\n    $.parts(params.namespace).operatorRoleBinding,\n    $.parts(params.namespace).crd,\n    $.parts(params.namespace).uiRole,\n    $.parts(params.namespace).uiRoleBinding,\n    $.parts(params.namespace).uiService(params.tfJobUiServiceType),\n    $.parts(params.namespace).uiServiceAccount,\n    $.parts(params.namespace).ui(params.tfJobImage),\n  ],\n\n  parts(namespace):: {\n    crd: {\n      apiVersion: \"apiextensions.k8s.io/v1beta1\",\n      kind: \"CustomResourceDefinition\",\n      metadata: {\n        name: \"tfjobs.kubeflow.org\",\n      },\n      spec: {\n        group: \"kubeflow.org\",\n        version: \"v1alpha1\",\n        names: {\n          kind: \"TFJob\",\n          singular: \"tfjob\",\n          plural: \"tfjobs\",\n        },\n      },\n    },\n\n    tfJobDeploy(image): {\n      apiVersion: \"extensions/v1beta1\",\n      kind: \"Deployment\",\n      metadata: {\n        name: \"tf-job-operator\",\n        namespace: namespace,\n      },\n      spec: {\n        replicas: 1,\n        template: {\n          metadata: {\n            labels: {\n              name: \"tf-job-operator\",\n            },\n          },\n          spec: {\n            containers: [\n              {\n                command: [\n                  \"/opt/mlkube/tf-operator\",\n                  \"--controller-config-file=/etc/config/controller_config_file.yaml\",\n                  \"--alsologtostderr\",\n                  \"-v=1\",\n                ],\n                env: [\n                  {\n                    name: \"MY_POD_NAMESPACE\",\n                    valueFrom: {\n                      fieldRef: {\n                        fieldPath: \"metadata.namespace\",\n                      },\n                    },\n                  },\n                  {\n                    name: \"MY_POD_NAME\",\n                    valueFrom: {\n                      fieldRef: {\n                        fieldPath: \"metadata.name\",\n                      },\n                    },\n                  },\n                ],\n                image: image,\n                name: \"tf-job-operator\",\n                volumeMounts: [\n                  {\n                    mountPath: \"/etc/config\",\n                    name: \"config-volume\",\n                  },\n                ],\n              },\n            ],\n            serviceAccountName: \"tf-job-operator\",\n            volumes: [\n              {\n                configMap: {\n                  name: \"tf-job-operator-config\",\n                },\n                name: \"config-volume\",\n              },\n            ],\n          },\n        },\n      },\n    },  // tfJobDeploy\n\n    // Default value for\n    defaultControllerConfig(tfDefaultImage):: {\n                                                grpcServerFilePath: \"/opt/mlkube/grpc_tensorflow_server/grpc_tensorflow_server.py\",\n                                              }\n                                              + if tfDefaultImage != \"\" && tfDefaultImage != \"null\" then\n                                                {\n                                                  tfImage: tfDefaultImage,\n                                                }\n                                              else\n                                                {},\n\n    aksAccelerators:: {\n      accelerators: {\n        \"alpha.kubernetes.io/nvidia-gpu\": {\n          volumes: [\n            {\n              name: \"nvidia\",\n              mountPath: \"/usr/local/nvidia\",\n              hostPath: \"/usr/local/nvidia\",\n            },\n          ],\n        },\n      },\n    },\n\n    acsEngineAccelerators:: {\n      accelerators: {\n        \"alpha.kubernetes.io/nvidia-gpu\": {\n          volumes: [\n            {\n              name: \"nvidia\",\n              mountPath: \"/usr/local/nvidia\",\n              hostPath: \"/usr/local/nvidia\",\n            },\n          ],\n        },\n      },\n    },\n\n    configData(cloud, tfDefaultImage):: self.defaultControllerConfig(tfDefaultImage) +\n                                        if cloud == \"aks\" then\n                                          self.aksAccelerators\n                                        else if cloud == \"acsengine\" then\n                                          self.acsEngineAccelerators\n                                        else\n                                          {},\n\n    configMap(cloud, tfDefaultImage): {\n      apiVersion: \"v1\",\n      data: {\n        \"controller_config_file.yaml\": std.manifestJson($.parts(namespace).configData(cloud, tfDefaultImage)),\n      },\n      kind: \"ConfigMap\",\n      metadata: {\n        name: \"tf-job-operator-config\",\n        namespace: namespace,\n      },\n    },\n\n    serviceAccount: {\n      apiVersion: \"v1\",\n      kind: \"ServiceAccount\",\n      metadata: {\n        labels: {\n          app: \"tf-job-operator\",\n        },\n        name: \"tf-job-operator\",\n        namespace: namespace,\n      },\n    },\n\n    operatorRole: {\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      kind: \"ClusterRole\",\n      metadata: {\n        labels: {\n          app: \"tf-job-operator\",\n        },\n        name: \"tf-job-operator\",\n      },\n      rules: [\n        {\n          apiGroups: [\n            \"tensorflow.org\",\n            \"kubeflow.org\",\n          ],\n          resources: [\n            \"tfjobs\",\n          ],\n          verbs: [\n            \"*\",\n          ],\n        },\n        {\n          apiGroups: [\n            \"apiextensions.k8s.io\",\n          ],\n          resources: [\n            \"customresourcedefinitions\",\n          ],\n          verbs: [\n            \"*\",\n          ],\n        },\n        {\n          apiGroups: [\n            \"storage.k8s.io\",\n          ],\n          resources: [\n            \"storageclasses\",\n          ],\n          verbs: [\n            \"*\",\n          ],\n        },\n        {\n          apiGroups: [\n            \"batch\",\n          ],\n          resources: [\n            \"jobs\",\n          ],\n          verbs: [\n            \"*\",\n          ],\n        },\n        {\n          apiGroups: [\n            \"\",\n          ],\n          resources: [\n            \"configmaps\",\n            \"pods\",\n            \"services\",\n            \"endpoints\",\n            \"persistentvolumeclaims\",\n            \"events\",\n          ],\n          verbs: [\n            \"*\",\n          ],\n        },\n        {\n          apiGroups: [\n            \"apps\",\n            \"extensions\",\n          ],\n          resources: [\n            \"deployments\",\n          ],\n          verbs: [\n            \"*\",\n          ],\n        },\n      ],\n    },  // operator-role\n\n    operatorRoleBinding:: {\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      kind: \"ClusterRoleBinding\",\n      metadata: {\n        labels: {\n          app: \"tf-job-operator\",\n        },\n        name: \"tf-job-operator\",\n      },\n      roleRef: {\n        apiGroup: \"rbac.authorization.k8s.io\",\n        kind: \"ClusterRole\",\n        name: \"tf-job-operator\",\n      },\n      subjects: [\n        {\n          kind: \"ServiceAccount\",\n          name: \"tf-job-operator\",\n          namespace: namespace,\n        },\n      ],\n    },  // operator-role binding\n\n    uiService(serviceType):: {\n      apiVersion: \"v1\",\n      kind: \"Service\",\n      metadata: {\n        name: \"tf-job-dashboard\",\n        namespace: namespace,\n        annotations: {\n          \"getambassador.io/config\":\n            std.join(\"\\n\", [\n              \"---\",\n              \"apiVersion: ambassador/v0\",\n              \"kind:  Mapping\",\n              \"name: tfjobs-ui-mapping\",\n              \"prefix: /tfjobs/\",\n              \"rewrite: /tfjobs/\",\n              \"service: tf-job-dashboard.\" + namespace,\n            ]),\n        },  //annotations\n      },\n      spec: {\n        ports: [\n          {\n            port: 80,\n            targetPort: 8080,\n          },\n        ],\n        selector: {\n          name: \"tf-job-dashboard\",\n        },\n        type: serviceType,\n      },\n    },  // uiService\n\n    uiServiceAccount: {\n      apiVersion: \"v1\",\n      kind: \"ServiceAccount\",\n      metadata: {\n        labels: {\n          app: \"tf-job-dashboard\",\n        },\n        name: \"tf-job-dashboard\",\n        namespace: namespace,\n      },\n    },  // uiServiceAccount\n\n    ui(image):: {\n      apiVersion: \"extensions/v1beta1\",\n      kind: \"Deployment\",\n      metadata: {\n        name: \"tf-job-dashboard\",\n        namespace: namespace,\n      },\n      spec: {\n        template: {\n          metadata: {\n            labels: {\n              name: \"tf-job-dashboard\",\n            },\n          },\n          spec: {\n            containers: [\n              {\n                command: [\n                  \"/opt/tensorflow_k8s/dashboard/backend\",\n                ],\n                image: image,\n                name: \"tf-job-dashboard\",\n                ports: [\n                  {\n                    containerPort: 8080,\n                  },\n                ],\n              },\n            ],\n            serviceAccountName: \"tf-job-dashboard\",\n          },\n        },\n      },\n    },  // ui\n\n    uiRole:: {\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      kind: \"ClusterRole\",\n      metadata: {\n        labels: {\n          app: \"tf-job-dashboard\",\n        },\n        name: \"tf-job-dashboard\",\n      },\n      rules: [\n        {\n          apiGroups: [\n            \"tensorflow.org\",\n            \"kubeflow.org\",\n          ],\n          resources: [\n            \"tfjobs\",\n          ],\n          verbs: [\n            \"*\",\n          ],\n        },\n        {\n          apiGroups: [\n            \"apiextensions.k8s.io\",\n          ],\n          resources: [\n            \"customresourcedefinitions\",\n          ],\n          verbs: [\n            \"*\",\n          ],\n        },\n        {\n          apiGroups: [\n            \"storage.k8s.io\",\n          ],\n          resources: [\n            \"storageclasses\",\n          ],\n          verbs: [\n            \"*\",\n          ],\n        },\n        {\n          apiGroups: [\n            \"batch\",\n          ],\n          resources: [\n            \"jobs\",\n          ],\n          verbs: [\n            \"*\",\n          ],\n        },\n        {\n          apiGroups: [\n            \"\",\n          ],\n          resources: [\n            \"configmaps\",\n            \"pods\",\n            \"services\",\n            \"endpoints\",\n            \"persistentvolumeclaims\",\n            \"events\",\n          ],\n          verbs: [\n            \"*\",\n          ],\n        },\n        {\n          apiGroups: [\n            \"apps\",\n            \"extensions\",\n          ],\n          resources: [\n            \"deployments\",\n          ],\n          verbs: [\n            \"*\",\n          ],\n        },\n      ],\n    },  // uiRole\n\n    uiRoleBinding:: {\n      apiVersion: \"rbac.authorization.k8s.io/v1beta1\",\n      kind: \"ClusterRoleBinding\",\n      metadata: {\n        labels: {\n          app: \"tf-job-dashboard\",\n        },\n        name: \"tf-job-dashboard\",\n      },\n      roleRef: {\n        apiGroup: \"rbac.authorization.k8s.io\",\n        kind: \"ClusterRole\",\n        name: \"tf-job-dashboard\",\n      },\n      subjects: [\n        {\n          kind: \"ServiceAccount\",\n          name: \"tf-job-dashboard\",\n          namespace: namespace,\n        },\n      ],\n    },  // uiRoleBinding\n  },\n}\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/util.libsonnet",
    "content": "// Some useful routines.\n{\n  // Convert a string to upper case.\n  upper:: function(x) {\n    local cp(c) = std.codepoint(c),\n    local upLetter(c) = if cp(c) >= 97 && cp(c) < 123 then\n      std.char(cp(c) - 32)\n    else c,\n    result:: std.join(\"\", std.map(upLetter, std.stringChars(x))),\n  }.result,\n\n  // Convert non-boolean types like string,number to a boolean.\n  // This is primarily intended for dealing with parameters that should be booleans.\n  toBool:: function(x) {\n    result::\n      if std.type(x) == \"boolean\" then\n        x\n      else if std.type(x) == \"string\" then\n        $.upper(x) == \"TRUE\"\n      else if std.type(x) == \"number\" then\n        x != 0\n      else\n        false,\n  }.result,\n\n  // Convert a comma-delimited string to an Array\n  toArray:: function(str) {\n    result::\n      if std.type(str) == \"string\" && str != \"null\" && std.length(str) > 0 then\n        std.split(str, \",\")\n      else [],\n  }.result,\n\n\n}\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/version-info.json",
    "content": "{\n  \"Major\": \"0\",\n  \"Minor\": \"2\",\n  \"Patch\": \"devel\",\n  \"GitCommit\": \"\",\n  \"BuildDate\": \"\",\n  \"ksonnetVersion\": \"0.9.2\",\n}\n"
  },
  {
    "path": "devstats/ks-app/vendor/kubeflow/core@e2c2c7c49e578472ba57f91f3b2a5f4d1a2d0289/version.libsonnet",
    "content": "{\n  all(params):: [\n    {\n      apiVersion: \"v1\",\n      kind: \"ConfigMap\",\n      metadata: {\n        name: \"kubeflow-version\",\n        namespace: params.namespace,\n      },\n      data: {\n        \"kubeflow-version\": importstr \"version-info.json\",\n      },\n    },\n  ],\n}\n"
  },
  {
    "path": "devstats/modify_dashboards.sh",
    "content": "#!/bin/bash\nset -ex\t\n\nLOCATION=$1\n# Modify some of the dashboards copied over from the devstats project\n# e.g. the K8s dashboards\nfiles=`find \"${LOCATION}\" -name \"*.json\"`\t\nfor f in $files; do\t\n  # TODO(jlewi): I think this only matches the first occurrence on each line.\n  # Use g to match multiple occurrences per line.\n  sed -i \"s/Knative/Kubeflow/g\" ${f}\t\n  sed -i \"s/knative/kubeflow/g\" ${f}\t\n  # We need to strip out the id field of the dashboard otherwise we get an error  \n  jq  'del(.id)' ${f} > /tmp/somefile\n  cp /tmp/somefile ${f}\ndone"
  },
  {
    "path": "devstats/postgre-docker-entrypoint.sh",
    "content": "#!/usr/bin/env bash\n#\n# Copied from:\n# https://raw.githubusercontent.com/docker-library/postgres/master/docker-entrypoint.sh\nset -ex\n\n# usage: file_env VAR [DEFAULT]\n#    ie: file_env 'XYZ_DB_PASSWORD' 'example'\n# (will allow for \"$XYZ_DB_PASSWORD_FILE\" to fill in the value of\n#  \"$XYZ_DB_PASSWORD\" from a file, especially for Docker's secrets feature)\nfile_env() {\n\tlocal var=\"$1\"\n\tlocal fileVar=\"${var}_FILE\"\n\tlocal def=\"${2:-}\"\n\tif [ \"${!var:-}\" ] && [ \"${!fileVar:-}\" ]; then\n\t\techo >&2 \"error: both $var and $fileVar are set (but are exclusive)\"\n\t\texit 1\n\tfi\n\tlocal val=\"$def\"\n\tif [ \"${!var:-}\" ]; then\n\t\tval=\"${!var}\"\n\telif [ \"${!fileVar:-}\" ]; then\n\t\tval=\"$(< \"${!fileVar}\")\"\n\tfi\n\texport \"$var\"=\"$val\"\n\tunset \"$fileVar\"\n}\n\nif [ \"${1:0:1}\" = '-' ]; then\n\tset -- postgres \"$@\"\nfi\n\n# allow the container to be started with `--user`\nif [ \"$1\" = 'postgres' ] && [ \"$(id -u)\" = '0' ]; then\n\tmkdir -p \"$PGDATA\"\n\tchown -R postgres \"$PGDATA\"\n\tchmod 700 \"$PGDATA\"\n\n\tmkdir -p /var/run/postgresql\n\tchown -R postgres /var/run/postgresql\n\tchmod 775 /var/run/postgresql\n\n\t# Create the transaction log directory before initdb is run (below) so the directory is owned by the correct user\n\tif [ \"$POSTGRES_INITDB_WALDIR\" ]; then\n\t\tmkdir -p \"$POSTGRES_INITDB_WALDIR\"\n\t\tchown -R postgres \"$POSTGRES_INITDB_WALDIR\"\n\t\tchmod 700 \"$POSTGRES_INITDB_WALDIR\"\n\tfi\n\n\texec gosu postgres \"$BASH_SOURCE\" \"$@\"\nfi\n\nif [ \"$1\" = 'postgres' ]; then\n\tmkdir -p \"$PGDATA\"\n\tchown -R \"$(id -u)\" \"$PGDATA\" 2>/dev/null || :\n\tchmod 700 \"$PGDATA\" 2>/dev/null || :\n\n\t# look specifically for PG_VERSION, as it is expected in the DB dir\n\tif [ ! -s \"$PGDATA/PG_VERSION\" ]; then\n\t\tfile_env 'POSTGRES_INITDB_ARGS'\n\t\tif [ \"$POSTGRES_INITDB_WALDIR\" ]; then\n\t\t\texport POSTGRES_INITDB_ARGS=\"$POSTGRES_INITDB_ARGS --waldir $POSTGRES_INITDB_WALDIR\"\n\t\tfi\n\t\teval \"initdb --username=postgres $POSTGRES_INITDB_ARGS\"\n\n\t\t# check password first so we can output the warning before postgres\n\t\t# messes it up\n\t\tfile_env 'POSTGRES_PASSWORD'\n\t\tif [ \"$POSTGRES_PASSWORD\" ]; then\n\t\t\tpass=\"PASSWORD '$POSTGRES_PASSWORD'\"\n\t\t\tauthMethod=md5\n\t\telse\n\t\t\t# The - option suppresses leading tabs but *not* spaces. :)\n\t\t\tcat >&2 <<-'EOWARN'\n\t\t\t\t****************************************************\n\t\t\t\tWARNING: No password has been set for the database.\n\t\t\t\t         This will allow anyone with access to the\n\t\t\t\t         Postgres port to access your database. In\n\t\t\t\t         Docker's default configuration, this is\n\t\t\t\t         effectively any other container on the same\n\t\t\t\t         system.\n\n\t\t\t\t         Use \"-e POSTGRES_PASSWORD=password\" to set\n\t\t\t\t         it in \"docker run\".\n\t\t\t\t****************************************************\n\t\t\tEOWARN\n\n\t\t\tpass=\n\t\t\tauthMethod=trust\n\t\tfi\n\n\t\t{\n\t\t\techo\n\t\t\techo \"host all all all $authMethod\"\n\t\t} >> \"$PGDATA/pg_hba.conf\"\n\n\t\t# internal start of server in order to allow set-up using psql-client\n\t\t# does not listen on external TCP/IP and waits until start finishes\n\t\tPGUSER=\"${PGUSER:-postgres}\" \\\n\t\tpg_ctl -D \"$PGDATA\" \\\n\t\t\t-o \"-c listen_addresses='localhost'\" \\\n\t\t\t-w start\n\n\t\tfile_env 'POSTGRES_USER' 'postgres'\n\t\tfile_env 'POSTGRES_DB' \"$POSTGRES_USER\"\n\n\t\tpsql=( psql -v ON_ERROR_STOP=1 )\n\n\t\tif [ \"$POSTGRES_DB\" != 'postgres' ]; then\n\t\t\t\"${psql[@]}\" --username postgres <<-EOSQL\n\t\t\t\tCREATE DATABASE \"$POSTGRES_DB\" ;\n\t\t\tEOSQL\n\t\t\techo\n\t\tfi\n\n\t\tif [ \"$POSTGRES_USER\" = 'postgres' ]; then\n\t\t\top='ALTER'\n\t\telse\n\t\t\top='CREATE'\n\t\tfi\n\t\t\"${psql[@]}\" --username postgres <<-EOSQL\n\t\t\t$op USER \"$POSTGRES_USER\" WITH SUPERUSER $pass ;\n\t\tEOSQL\n\t\techo\n\n\t\tpsql+=( --username \"$POSTGRES_USER\" --dbname \"$POSTGRES_DB\" )\n\n\t\techo\n\t\tfor f in /docker-entrypoint-initdb.d/*; do\n\t\t\tcase \"$f\" in\n\t\t\t\t*.sh)     echo \"$0: running $f\"; . \"$f\" ;;\n\t\t\t\t*.sql)    echo \"$0: running $f\"; \"${psql[@]}\" -f \"$f\"; echo ;;\n\t\t\t\t*.sql.gz) echo \"$0: running $f\"; gunzip -c \"$f\" | \"${psql[@]}\"; echo ;;\n\t\t\t\t*)        echo \"$0: ignoring $f\" ;;\n\t\t\tesac\n\t\t\techo\n\t\tdone\n\n\t\tPGUSER=\"${PGUSER:-postgres}\" \\\n\t\tpg_ctl -D \"$PGDATA\" -m fast -w stop\n\n\t\techo\n\t\techo 'PostgreSQL init process complete; ready for start up.'\n\t\techo\n\tfi\nfi\n\nexec \"$@\""
  },
  {
    "path": "devstats/print_imports.sh",
    "content": "#!/bin/bash\n# A simple helper script to generate the copy paste text for the configmap\n# to use all the dashboards\n\n\nset -e\n# Modify some of the dashboards copied over from the devstats project\n# e.g. the K8s dashboards\nfiles=`find ./ks-app/components/grafana/dashboards -name *.json`\n\nTMPFILE=\".${0##*/}-$$\"\nfor f in $files; do\t\n   filename=$(basename -- \"$f\")\n   echo \\\"${filename}\\\": importstr \\\"grafana/dashboards/${filename}\\\", >> ${TMPFILE}\ndone   \n\ncat ${TMPFILE} | sort"
  },
  {
    "path": "devstats/scripts/generate_actors.sh",
    "content": "#!/bin/bash\n# \n# This script is used to generate actors.txt\n# That file is used to generate company affilations.\n#\n# This script is intended to run on the devstats-cli-0 pod.\n#\n# It is based on:\n# https://github.com/cncf/gitdm/blob/master/src/generate_actors.sh\n#\n# \nACTORS_FILE=$1\npsql -tA kubeflow < /mount/data/src/git_cncf-devstats/util_sql/actors.sql >> ${ACTORS_FILE}\ncat ${ACTORS_FILE} | sort | uniq > actors.tmp\ntr '\\n' ',' < actors.tmp > out\nrm actors.tmp\nmv out ${ACTORS_FILE}\ntruncate -s-1 ${ACTORS_FILE}\n"
  },
  {
    "path": "devstats/scripts/modify_devstats_scripts.sh",
    "content": "#!/bin/bash\n# Modify the scripts https://github.com/cncf/devstats-example\n# We add the -E option to the sudo commands so that the environment is preserved\nset -ex\t\n\nLOCATION=$1\n# Modify some of the dashboards copied over from the devstats project\n# e.g. the K8s dashboards\nfiles=`find \"${LOCATION}\" -name \"*.sh\"`\t\nfor f in $files; do\t\n  # TODO(jlewi): I think this only matches the first occurrence on each line.\n  # Use g to match multiple occurrences per line.\n  sed -i \"s/sudo/sudo -E/g\" ${f}\t\ndone"
  },
  {
    "path": "devstats/scripts/setup_nfs.sh",
    "content": "#!/bin/bash\n#\n# Onetime script to setup the Cloud NFS share used for Devstats.\n\n# make the share world writable/readable\n# Do this so the postgres containers can read and write to the share.\nchmod -R a+rw /mount/data\n"
  },
  {
    "path": "devstats/scripts/setup_postgres_home.sh",
    "content": "#!/bin/bash\n#\n# Create a home directory for the postgres user\nset -ex\nmkdir -p /home/postgres\ncp -f /etc/skel/.bashrc /home/postgres/\n\n# We need to export all the PG variables and source them from \n# the .bash file. We need to do this because the devstats scripts\n# sudo to user postgres and we need these environment variables\nenv | grep PG | awk '{print \"export \"$0}'  > /home/postgres/postgres_env.sh\n\necho \"source /home/postgres/postgres_env.sh\" >> /home/postgres/.bashrc\n\n# .profile but not .bashrc is sourced when doing sudo\necho \"source /home/postgres/postgres_env.sh\" > \"/home/postgres/.profile\"\n\nchown -R postgres /home/postgres\nchgrp -R postgres /home/postgres\n"
  },
  {
    "path": "elections/eligible-candidates-and-voters-2023-ksc.md",
    "content": "As explained [in the document](https://github.com/kubeflow/community/blob/master/proposals/kubeflow-steering-committee-election-proposal.md), we extracted the list of eligible voters and those candidate eligible to nominated from the github contributions. \n\nIf you believe your name should be on either list you [may file an exception](https://forms.gle/epaMrirZCNBztoRz5) between 4 December 2023 starting at 9:00am PT and 10 December 2023 ending at 12:00pm PT. \n​\n## List of eligible voters:\n- [tenzen-y](https://github.com/tenzen-y)\n- [connor-mccarthy](https://github.com/connor-mccarthy)\n- [chensun](https://github.com/chensun)\n- [juliusvonkohout](https://github.com/juliusvonkohout)\n- [gkcalat](https://github.com/gkcalat)\n- [andreyvelich](https://github.com/andreyvelich)\n- [kimwnasptd](https://github.com/kimwnasptd)\n- [zijianjoy](https://github.com/zijianjoy)\n- [johnugeorge](https://github.com/johnugeorge)\n- [linchin](https://github.com/linchin)\n- [tomcli](https://github.com/tomcli)\n- [thesuperzapper](https://github.com/thesuperzapper)\n- [jlyaoyuli](https://github.com/jlyaoyuli)\n- [alculquicondor](https://github.com/alculquicondor)\n- [yhwang](https://github.com/yhwang)\n- [annajung](https://github.com/annajung)\n- [jbottum](https://github.com/jbottum)\n- [terrytangyuan](https://github.com/terrytangyuan)\n- [dnplas](https://github.com/dnplas)\n- [syulin7](https://github.com/syulin7)\n- [droctothorpe](https://github.com/droctothorpe)\n- [james-jwu](https://github.com/james-jwu)\n- [surajkota](https://github.com/surajkota)\n- [orfeas-k](https://github.com/orfeas-k)\n- [difince](https://github.com/difince)\n- [kuizhiqing](https://github.com/kuizhiqing)\n- [tobiasgoerke](https://github.com/tobiasgoerke)\n- [axel7083](https://github.com/axel7083)\n- [apo-ger](https://github.com/apo-ger)\n- [lowang-bh](https://github.com/lowang-bh)\n- [cheyang](https://github.com/cheyang)\n- [domfleischmann](https://github.com/domfleischmann)\n- [akgraner](https://github.com/akgraner)\n- [ryansteakley](https://github.com/ryansteakley)\n- [nagar-ajay](https://github.com/nagar-ajay)\n- [mimowo](https://github.com/mimowo)\n- [deepanker13](https://github.com/deepanker13)\n- [tasos-ale](https://github.com/tasos-ale)\n- [jocstaa](https://github.com/jocstaa)\n- [ananth102](https://github.com/ananth102)\n- [elenzio9](https://github.com/elenzio9)\n- [alexandrebrown](https://github.com/alexandrebrown)\n- [arhell](https://github.com/arhell)\n- [davidnet](https://github.com/davidnet)\n- [vikas-saxena02](https://github.com/vikas-saxena02)\n- [gaocegege](https://github.com/gaocegege)\n- [ironpan](https://github.com/ironpan)\n- [diegolovison](https://github.com/diegolovison)\n- [hegaoyuan](https://github.com/hegaoyuan)\n- [deepk2u](https://github.com/deepk2u)\n- [rd-pong](https://github.com/rd-pong)\n- [votti](https://github.com/votti)\n- [sheevy](https://github.com/sheevy)\n- [sen-sam](https://github.com/sen-sam)\n- [matthewralston](https://github.com/matthewralston)\n- [xhejtman](https://github.com/xhejtman)\n- [ssheng](https://github.com/ssheng)\n- [mchowdhury-91](https://github.com/mchowdhury-91)\n- [SachinVarghese](https://github.com/SachinVarghese)\n\n## List of eligible candidates who can be nominated:\n- [tenzen-y](https://github.com/tenzen-y)\n- [connor-mccarthy](https://github.com/connor-mccarthy)\n- [chensun](https://github.com/chensun)\n- [juliusvonkohout](https://github.com/juliusvonkohout)\n- [gkcalat](https://github.com/gkcalat)\n- [andreyvelich](https://github.com/andreyvelich)\n- [kimwnasptd](https://github.com/kimwnasptd)\n- [zijianjoy](https://github.com/zijianjoy)\n- [johnugeorge](https://github.com/johnugeorge)\n- [linchin](https://github.com/linchin)\n- [tomcli](https://github.com/tomcli)\n- [thesuperzapper](https://github.com/thesuperzapper)\n- [jlyaoyuli](https://github.com/jlyaoyuli)\n- [alculquicondor](https://github.com/alculquicondor)\n- [yhwang](https://github.com/yhwang)\n- [annajung](https://github.com/annajung)\n- [jbottum](https://github.com/jbottum)\n- [terrytangyuan](https://github.com/terrytangyuan)\n- [dnplas](https://github.com/dnplas)\n- [syulin7](https://github.com/syulin7)\n- [droctothorpe](https://github.com/droctothorpe)\n- [james-jwu](https://github.com/james-jwu)\n- [surajkota](https://github.com/surajkota)\n- [orfeas-k](https://github.com/orfeas-k)\n- [difince](https://github.com/difince)\n- [kuizhiqing](https://github.com/kuizhiqing)\n- [tobiasgoerke](https://github.com/tobiasgoerke)\n- [axel7083](https://github.com/axel7083)\n- [apo-ger](https://github.com/apo-ger)\n- [lowang-bh](https://github.com/lowang-bh)\n- [cheyang](https://github.com/cheyang)\n- [domfleischmann](https://github.com/domfleischmann)\n- [akgraner](https://github.com/akgraner) [Ineligible; election officer ]\n- [ryansteakley](https://github.com/ryansteakley)\n- [nagar-ajay](https://github.com/nagar-ajay)\n- [mimowo](https://github.com/mimowo)\n- [deepanker13](https://github.com/deepanker13)\n- [tasos-ale](https://github.com/tasos-ale)\n- [jocstaa](https://github.com/jocstaa)\n- [ananth102](https://github.com/ananth102)\n- [elenzio9](https://github.com/elenzio9)\n- [alexandrebrown](https://github.com/alexandrebrown)\n- [arhell](https://github.com/arhell)\n- [davidnet](https://github.com/davidnet) [Ineligible; election officer ]\n- [vikas-saxena02](https://github.com/vikas-saxena02)\n- [gaocegege](https://github.com/gaocegege)\n- [ironpan](https://github.com/ironpan)\n- [diegolovison](https://github.com/diegolovison)\n- [hegaoyuan](https://github.com/hegaoyuan)\n- [deepk2u](https://github.com/deepk2u)\n- [rd-pong](https://github.com/rd-pong)\n- [votti](https://github.com/votti)\n- [sheevy](https://github.com/sheevy)\n- [sen-sam](https://github.com/sen-sam)\n- [matthewralston](https://github.com/matthewralston)\n- [xhejtman](https://github.com/xhejtman)\n- [ssheng](https://github.com/ssheng)\n- [mchowdhury-91](https://github.com/mchowdhury-91)\n"
  },
  {
    "path": "elections/eligible-candidates-and-voters-2024-ksc.md",
    "content": "As explained [in the document](https://github.com/kubeflow/community/blob/master/proposals/kubeflow-steering-committee-election-proposal.md), we extracted the list of eligible voters and those candidate eligible to nominated from the github contributions.\n\nIf you believe your name should be on either list you may [file an exception](https://forms.gle/1vM5ZAnZj9z4G7vS7) between 18 November 2024 starting at 9:00am PT and 24 November 2024 ending at 12:00pm PT.​\n\n\n## List of Eligible Voters \n\n- [andreyvelich](https://github.com/andreyvelich)\n- [tenzen-y](https://github.com/tenzen-y)\n- [juliusvonkohout](https://github.com/juliusvonkohout)\n- [thesuperzapper](https://github.com/thesuperzapper)\n- [rimolive](https://github.com/rimolive)\n- [tarilabs](https://github.com/tarilabs)\n- [hbelmiro](https://github.com/hbelmiro)\n- [chenyi015](https://github.com/ChenYi015)\n- [chensun](https://github.com/chensun)\n- [ederign](https://github.com/ederign)\n- [connor-mccarthy](https://github.com/connor-mccarthy)\n- [electronic-waste](https://github.com/Electronic-Waste)\n- [terrytangyuan](https://github.com/terrytangyuan)\n- [humairak](https://github.com/HumairAK)\n- [tomcli](https://github.com/tomcli)\n- [dharmitd](https://github.com/DharmitD)\n- [droctothorpe](https://github.com/droctothorpe)\n- [helenxie-bit](https://github.com/helenxie-bit)\n- [franciscojavierarceo](https://github.com/franciscojavierarceo)\n- [deepanker13](https://github.com/deepanker13)\n- [diegolovison](https://github.com/diegolovison)\n- [isinyaaa](https://github.com/isinyaaa)\n- [jacobsalway](https://github.com/jacobsalway)\n- [gregsheremeta](https://github.com/gregsheremeta)\n- [stefanofioravanzo](https://github.com/StefanoFioravanzo)\n- [zijianjoy](https://github.com/zijianjoy)\n- [vara-bonthu](https://github.com/vara-bonthu)\n- [johnugeorge](https://github.com/johnugeorge)\n- [griffin-sullivan](https://github.com/Griffin-Sullivan/Griffin-Sullivan)\n- [rareddy](https://github.com/rareddy)\n- [kevingrantlee](https://github.com/KevinGrantLee)\n- [alexcreasy](https://github.com/alexcreasy)\n- tariq-hasan\n- [yuchaoran2011](https://github.com/yuchaoran2011)\n- [alculquicondor](https://github.com/alculquicondor)\n- [hansinikarunarathne](https://github.com/hansinikarunarathne)\n- [lucferbux](https://github.com/lucferbux/lucferbux)\n- [kimwnasptd](https://github.com/kimwnasptd)\n- [syulin7](https://github.com/syulin7)\n- [lampajr](https://github.com/lampajr)\n- [jbottum](https://github.com/jbottum)\n- [james-jwu](https://github.com/james-jwu)\n- [kromanow94](https://github.com/kromanow94)\n- [biswajit-9776](https://github.com/biswajit-9776)\n- [mimowo](https://github.com/mimowo)\n- [vikas-saxena02](https://github.com/vikas-saxena02)\n- [anishasthana](https://github.com/anishasthana)\n- [kuizhiqing](https://github.com/kuizhiqing)\n- [gmfrasca](https://github.com/gmfrasca)\n- [jiridanek](https://github.com/jiridanek)\n- [kannon92](https://github.com/kannon92/kannon92.github.io)\n- [shashank-iitbhu](https://github.com/kannon92/kannon92.github.io)\n- [dhirajsb](https://github.com/dhirajsb)\n- [andersbennedsgaard](https://github.com/AndersBennedsgaard)\n- [vsoch](https://github.com/vsoch)\n- [cheyang](https://github.com/cheyang)\n- [mszadkow](https://github.com/mszadkow)\n- [al-pragliola](https://github.com/Al-Pragliola/Al-Pragliola.github.io)\n- [impsy](https://github.com/ImpSy)\n- [varodrig](https://github.com/varodrig)\n- [akgraner](https://github.com/akgraner)\n- [sandipanpanda](https://github.com/sandipanpanda)\n- [elayaharoni](https://github.com/ElayAharoni)\n- [peter-mcclonski](https://github.com/peter-mcclonski)\n- [akshaychitneni](https://github.com/akshaychitneni)\n- [tzabbi](https://github.com/tzabbi/tzabbi)\n- [tarekabouzeid](https://github.com/tarekabouzeid)\n- [chasecadet](https://github.com/chasecadet)\n- [andreeamun](https://github.com/andreeamun)\n\n## List of eligible candidates who can be nominated\n\n- [andreyvelich](https://github.com/andreyvelich) [ineligible; KSC member 1 year left of Term]\n- [tenzen-y](https://github.com/tenzen-y)\n- [juliusvonkohout](https://github.com/juliusvonkohout)\n- [thesuperzapper](https://github.com/thesuperzapper)\n- [rimolive](https://github.com/rimolive)\n- [tarilabs](https://github.com/tarilabs)\n- [hbelmiro](https://github.com/hbelmiro)\n- [chenyi015](https://github.com/ChenYi015)\n- [chensun](https://github.com/chensun)\n- [ederign](https://github.com/ederign)\n- [connor-mccarthy](https://github.com/connor-mccarthy)\n- [electronic-waste](https://github.com/Electronic-Waste)\n- [terrytangyuan](https://github.com/terrytangyuan) [ineligible; KSC member 1 year left of Term]\n- [humairak](https://github.com/HumairAK)\n- [tomcli](https://github.com/tomcli)\n- [dharmitd](https://github.com/DharmitD)\n- [droctothorpe](https://github.com/droctothorpe)\n- [helenxie-bit](https://github.com/helenxie-bit)\n- [franciscojavierarceo](https://github.com/franciscojavierarceo)\n- [deepanker13](https://github.com/deepanker13)\n- [diegolovison](https://github.com/diegolovison)\n- [isinyaaa](https://github.com/isinyaaa)\n- [jacobsalway](https://github.com/jacobsalway)\n- [gregsheremeta](https://github.com/gregsheremeta)\n- [stefanofioravanzo](https://github.com/StefanoFioravanzo)\n- [zijianjoy](https://github.com/zijianjoy)\n- [vara-bonthu](https://github.com/vara-bonthu)\n- [johnugeorge](https://github.com/johnugeorge) [ineligible; KSC member 1 year left of Term]\n- [griffin-sullivan](https://github.com/Griffin-Sullivan/Griffin-Sullivan)\n- [rareddy](https://github.com/rareddy)\n- [kevingrantlee](https://github.com/KevinGrantLee)\n- [alexcreasy](https://github.com/alexcreasy)\n- tariq-hasan\n- [yuchaoran2011](https://github.com/yuchaoran2011)\n- [alculquicondor](https://github.com/alculquicondor)\n- [hansinikarunarathne](https://github.com/hansinikarunarathne)\n- [lucferbux](https://github.com/lucferbux/lucferbux)\n- [kimwnasptd](https://github.com/kimwnasptd)\n- [syulin7](https://github.com/syulin7)\n- [lampajr](https://github.com/lampajr)\n- [jbottum](https://github.com/jbottum)\n- [james-jwu](https://github.com/james-jwu)\n- [kromanow94](https://github.com/kromanow94)\n- [biswajit-9776](https://github.com/biswajit-9776)\n- [mimowo](https://github.com/mimowo)\n- [vikas-saxena02](https://github.com/vikas-saxena02)\n- [anishasthana](https://github.com/anishasthana)\n- [kuizhiqing](https://github.com/kuizhiqing)\n- [gmfrasca](https://github.com/gmfrasca)\n- [jiridanek](https://github.com/jiridanek)\n- [kannon92](https://github.com/kannon92/kannon92.github.io)\n- [shashank-iitbhu](https://github.com/kannon92/kannon92.github.io)\n- [dhirajsb](https://github.com/dhirajsb)\n- [andersbennedsgaard](https://github.com/AndersBennedsgaard)\n- [vsoch](https://github.com/vsoch)\n- [cheyang](https://github.com/cheyang)\n- [mszadkow](https://github.com/mszadkow)\n- [al-pragliola](https://github.com/Al-Pragliola/Al-Pragliola.github.io)\n- [impsy](https://github.com/ImpSy)\n- [varodrig](https://github.com/varodrig)\n- [akgraner](https://github.com/akgraner) [ineligible; election officer]\n- [sandipanpanda](https://github.com/sandipanpanda)\n- [elayaharoni](https://github.com/ElayAharoni)\n- [peter-mcclonski](https://github.com/peter-mcclonski)\n- [akshaychitneni](https://github.com/akshaychitneni)\n- [tzabbi](https://github.com/tzabbi/tzabbi)\n\n"
  },
  {
    "path": "elections/eligible-candidates-and-voters-2025-ksc.md",
    "content": "As explained [in the document](https://github.com/kubeflow/community/tree/master/proposals/645-kubeflow-steering-committee-election), we extracted the list of eligible voters and those candidate eligible to nominated from the github contributions.\n\nIf you believe your name should be on either list you may [file an exception](https://docs.google.com/forms/d/e/1FAIpQLScea0DPKnPHZF2CT7Rz324e6_CWkvumsU0cThozWg1m9MlliQ/viewform?usp=sharing&ouid=107415582881714707533) between 13 October 2025 starting at 9:00am PT and 19 October 2025 ending at 12:00pm PT.​\n\n\n## List of Eligible Voters\n\n- [andreyvelich](https://github.com/andreyvelich)\n- [juliusvonkohout](https://github.com/juliusvonkohout)\n- [tenzen-y](https://github.com/tenzen-y)\n- [mprahl](https://github.com/mprahl)\n- [electronic-waste](https://github.com/Electronic-Waste)\n- [tarilabs](https://github.com/tarilabs)\n- [ederign](https://github.com/ederign)\n- [humairak](https://github.com/HumairAK)\n- [varodrig](https://github.com/varodrig)\n- [hbelmiro](https://github.com/hbelmiro)\n- [chenyi015](https://github.com/ChenYi015)\n- [thesuperzapper](https://github.com/thesuperzapper)\n- [astefanutti](https://github.com/astefanutti)\n- [franciscojavierarceo](https://github.com/franciscojavierarceo)\n- [andyatmiami](https://github.com/andyatmiami)\n- [mahdikhashan](https://github.com/mahdikhashan)\n- [al-pragliola](https://github.com/al-pragliola)\n- [jenny-s51](https://github.com/jenny-s51)\n- [paulovmr](https://github.com/paulovmr)\n- [droctothorpe](https://github.com/droctothorpe)\n- [kramaranya](https://github.com/kramaranya)\n- [lucferbux](https://github.com/lucferbux/lucferbux)\n- [pboyd](https://github.com/pboyd)\n- [rimolive](https://github.com/rimolive)\n- [terrytangyuan](https://github.com/terrytangyuan)\n- [nsingla](https://github.com/nsingla)\n- [rareddy](https://github.com/rareddy)\n- [helenxie-bit](https://github.com/helenxie-bit)\n- [akagami-harsh](https://github.com/akagami-harsh)\n- [szaher](https://github.com/szaher)\n- [dhirajsb](https://github.com/dhirajsb)\n- [vikas-saxena02](https://github.com/vikas-saxena02)\n- [alyssacgoins](https://github.com/alyssacgoins)\n- [jaiakash](https://github.com/jaiakash)\n- [jacobsalway](https://github.com/jacobsalway)\n- [zazulam](https://github.com/zazulam)\n- [dharmitd](https://github.com/DharmitD)\n- [milinddethe15](https://github.com/milinddethe15)\n- [kunal-511](https://github.com/kunal-511)\n- [syntaxsdev](https://github.com/syntaxsdev)\n- [ironicbo](https://github.com/ironicbo)\n- [tarekabouzeid](https://github.com/tarekabouzeid)\n- [vaniharipriya](https://github.com/vaniharipriya)\n- [dandawg](https://github.com/dandawg)\n- [madmecodes](https://github.com/madmecodes)\n- [akshaychitneni](https://github.com/akshaychitneni)\n- [alexcreasy](https://github.com/alexcreasy)\n- [griffin-sullivan](https://github.com/Griffin-Sullivan/Griffin-Sullivan)\n- [doris-xm](https://github.com/doris-xm)\n- [gmfrasca](https://github.com/gmfrasca)\n- [anishasthana](https://github.com/anishasthana)\n- [chensun](https://github.com/chensun)\n- [crazyglue](https://github.com/crazyglue)\n- [kaikaila](https://github.com/kaikaila)\n- [mturley](https://github.com/mturley)\n- [seanlaii](https://github.com/seanlaii)\n- [cheyang](https://github.com/cheyang)\n- [kannon92](https://github.com/kannon92)\n- [harshal292004](https://github.com/harshal292004)\n- [nabuskey](https://github.com/nabuskey)\n- [ppadti](https://github.com/ppadti)\n- [saileshd1402](https://github.com/saileshd1402)\n- [jonburdo](https://github.com/jonburdo)\n- [abhijeet-dhumal](https://github.com/abhijeet-dhumal)\n- [briangallagher](https://github.com/briangallagher)\n- [gregsheremeta](https://github.com/gregsheremeta)\n- [kimwnasptd](https://github.com/kimwnasptd)\n- [mimowo](https://github.com/mimowo)\n- [liavweiss](https://github.com/liavweiss)\n- [chahatsagarmain](https://github.com/chahatsagarmain)\n- [caponetto](https://github.com/caponetto)\n- [thaorell](https://github.com/thaorell)\n- [vara-bonthu](https://github.com/vara-bonthu)\n- [arhell](https://github.com/arhell)\n- [tom-newton](https://github.com/tom-newton)\n- [yehudit1987](https://github.com/yehudit1987)\n- [ntny](https://github.com/ntny)\n- [aniketpati1121](https://github.com/aniketpati1121)\n- [harshad16](https://github.com/harshad16)\n- [chasecadet](https://github.com/chasecadet)\n- [orfeas-k](https://github.com/orfeas-k)\n- [impsy](https://github.com/impsy)\n- [varshaprasad96](https://github.com/varshaprasad96)\n- [santhoshToorpu](http://github.com/santhoshToorpu)\n\n\n\n\n## List of eligible candidates who can be nominated\n\n- [andreyvelich](https://github.com/andreyvelich)\n- [juliusvonkohout](https://github.com/juliusvonkohout) -  [ineligible; KSC member 1 year left of Term]\n- [tenzen-y](https://github.com/tenzen-y)\n- [mprahl](https://github.com/mprahl)\n- [electronic-waste](https://github.com/Electronic-Waste)\n- [tarilabs](https://github.com/tarilabs)\n- [ederign](https://github.com/ederign)\n- [humairak](https://github.com/HumairAK)\n- [varodrig](https://github.com/varodrig)\n- [hbelmiro](https://github.com/hbelmiro)\n- [chenyi015](https://github.com/ChenYi015)\n- [thesuperzapper](https://github.com/thesuperzapper)\n- [astefanutti](https://github.com/astefanutti)\n- [franciscojavierarceo](https://github.com/franciscojavierarceo) -  [ineligible; KSC member 1 year left of Term]\n- [andyatmiami](https://github.com/andyatmiami)\n- [mahdikhashan](https://github.com/mahdikhashan)\n- [al-pragliola](https://github.com/al-pragliola)\n- [jenny-s51](https://github.com/jenny-s51)\n- [paulovmr](https://github.com/paulovmr)\n- [droctothorpe](https://github.com/droctothorpe)\n- [kramaranya](https://github.com/kramaranya)\n- [lucferbux](https://github.com/lucferbux/lucferbux)\n- [pboyd](https://github.com/pboyd)\n- [rimolive](https://github.com/rimolive)\n- [terrytangyuan](https://github.com/terrytangyuan)\n- [nsingla](https://github.com/nsingla)\n- [rareddy](https://github.com/rareddy)\n- [helenxie-bit](https://github.com/helenxie-bit)\n- [akagami-harsh](https://github.com/akagami-harsh)\n- [szaher](https://github.com/szaher)\n- [dhirajsb](https://github.com/dhirajsb)\n- [vikas-saxena02](https://github.com/vikas-saxena02)\n- [alyssacgoins](https://github.com/alyssacgoins)\n- [jaiakash](https://github.com/jaiakash)\n- [jacobsalway](https://github.com/jacobsalway)\n- [zazulam](https://github.com/zazulam)\n- [dharmitd](https://github.com/DharmitD)\n- [milinddethe15](https://github.com/milinddethe15)\n- [kunal-511](https://github.com/kunal-511)\n- [syntaxsdev](https://github.com/syntaxsdev)\n- [ironicbo](https://github.com/ironicbo)\n- [tarekabouzeid](https://github.com/tarekabouzeid)\n- [vaniharipriya](https://github.com/vaniharipriya)\n- [dandawg](https://github.com/dandawg)\n- [madmecodes](https://github.com/madmecodes)\n- [akshaychitneni](https://github.com/akshaychitneni)\n- [alexcreasy](https://github.com/alexcreasy)\n- [griffin-sullivan](https://github.com/Griffin-Sullivan/Griffin-Sullivan)\n- [doris-xm](https://github.com/doris-xm)\n- [gmfrasca](https://github.com/gmfrasca)\n- [anishasthana](https://github.com/anishasthana)\n- [chensun](https://github.com/chensun)\n- [crazyglue](https://github.com/crazyglue)\n- [kaikaila](https://github.com/kaikaila)\n- [mturley](https://github.com/mturley)\n- [seanlaii](https://github.com/seanlaii)\n- [cheyang](https://github.com/cheyang)\n- [kannon92](https://github.com/kannon92)\n- [harshal292004](https://github.com/harshal292004)\n- [nabuskey](https://github.com/nabuskey)\n- [ppadti](https://github.com/ppadti)\n- [saileshd1402](https://github.com/saileshd1402)\n- [jonburdo](https://github.com/jonburdo)\n- [abhijeet-dhumal](https://github.com/abhijeet-dhumal)\n- [briangallagher](https://github.com/briangallagher)\n- [gregsheremeta](https://github.com/gregsheremeta)\n- [kimwnasptd](https://github.com/kimwnasptd)\n- [mimowo](https://github.com/mimowo)\n- [liavweiss](https://github.com/liavweiss)\n- [chahatsagarmain](https://github.com/chahatsagarmain)\n- [caponetto](https://github.com/caponetto)\n- [thaorell](https://github.com/thaorell)\n- [vara-bonthu](https://github.com/vara-bonthu)\n- [arhell](https://github.com/arhell)\n- [tom-newton](https://github.com/tom-newton)\n- [yehudit1987](https://github.com/yehudit1987)\n- [ntny](https://github.com/ntny)\n- [aniketpati1121](https://github.com/aniketpati1121)\n- [harshad16](https://github.com/harshad16)\n- [chasecadet](https://github.com/chasecadet)\n- [orfeas-k](https://github.com/orfeas-k)\n- [impsy](https://github.com/impsy)\n- [varshaprasad96](https://github.com/varshaprasad96)\n"
  },
  {
    "path": "elections/kubeflow-steering-committee-elections-2023.md",
    "content": "# Kubeflow Project Steering Committee Elections 2023 #\n## Guidelines, Timelines and Phases ##\n\nThe Kubeflow Project is holding its first election for the Kubeflow Project Steering Committee (KSC).  The KSC will also be responsible for helping to setting up of Technical Oversight Committee (TOC) that is responsible for defining and maintaining the technical vision of the Kubeflow Project and an Administrative Oversight Committee (AOC)* that is responsible for defining and maintaining the outreach, growth and other non-code specific items of the Kubeflow project. The TOC and AOC will be set up at a future date and will have its own defining role in the Kubeflow project.  \n\n***Please note** The AOC is a suggested new committee and is here as a placeholder for a yet to be determined group that will work on non-code related topics such as marketing, communications, events and administrative needs of the project.  \n\nThe KSC responsibilities and operations are defined [here](https://github.com/kubeflow/community/blob/master/proposals/STEERING-COMMITTEE.md). \n\nThe KSC elections process for open positions will start on **4 December 2023**. \n\nMore details about the Kubeflow election process can be found in the [Kubeflow Election Process document](https://github.com/kubeflow/community/blob/master/proposals/kubeflow-steering-committee-election-proposal.md).  \n\n\n## Voter Qualifications ##\n\n**Voter qualifications:** To be eligible to vote in this election a voter should be an active member in the Kubeflow Community and have a minimum of 50 contributions* to the Kubeflow project in the last year.**  If you believe you are eligible to vote, but are not listed as eligible you may [file an exception](https://forms.gle/epaMrirZCNBztoRz5). \n\n## *The qualified voters list will be published to the elections folder and shared with the community via Kubeflow-discuss on Monday 4 December 2023, on or before 9:00am pacific.* ## \n\n*Contributions are defined as:  Github Code and Issue Authors, Merge and Pull Requests Submitters as well as commenters on all issues, PRs and MRs.\n\n** For this election last year is from 3 December 2022 to 3 December 2023\n\n## Nomination Qualifications ##\n\n**Nomination qualifications:** A nominee should be an active member in the Kubeflow Community and have a minimum of 50 contributions* to the Kubeflow project in the last year.** have the available bandwidth to be invested in the KSC, and be able to operate neutrally in discussions regardless of company or project affiliation. If you believe you are eligible, but are not listed as eligible you may [file an exception](https://forms.gle/epaMrirZCNBztoRz5).  *(Election officers are ineligible to run in an election.)* \n\n## *The qualified nominees list will be published to the elections folder and shared with the community via Kubeflow-discuss on Monday 4 December 2023, on or before 9:00am pacific.* ## \n\n**Contributions are defined as:  Github Code and Issue Authors, Merge and Pull Requests Submitters as well as commenters on all issues, PRs and MRs.\n\n** For this election last year is from 3 December 2022 to 3 December 2023\n\n## Process for nominations ##\n\nIf you would like to nominate yourself or someone you know who is qualified, you can do so by adding their name to the following Nominations Issues. *(Nominations Issue will be created on the date the nominations phase will be open)*\n\nWe will publish the list of Qualified Nominees.  \n\n\n## Election Timeline ##\n\n**Exceptions Phase:**  4 December 2023 at 0900 Pacific Time  (Starts) - 10 December 2023 at 12:00pm Pacific Time (Ends)\n\n**Nominations Phase:** 11 December 2023 at 0900 Pacific Time  (Starts) - 24 December 2023 at 12:00pm Pacific Time (Ends)\n\n**Testimonial Phase:** 25 December 2023 at 0900 Pacific Time (Starts) - 7 January 2024 at 12:00pm Pacific Time (Ends)\n\n**Voting Phase:** 8 January 2024 at 0900 Pacific Time (Starts) - 29 January 2024 at 12:00pm Pacific Time (Ends)\n\n**Announcement of Election Results:**  30 January 2024 \n\n\n## Exceptions Phase ##\n\nThe exceptions phase will start on 4 December 2023.  If you are not on the list of eligible nominees or voters and believe you should be listed, you can file for an exception during this phase.  To file an exception please [fill out the exceptions form](https://forms.gle/epaMrirZCNBztoRz5). \n\n\n## Nominations Phase ##\n\nThis phase will be open for 2 weeks starting on 11 December 2023 and ending on 24 December 2023.\n\nDuring the nomination phase, members of the Kubeflow Community can nominate themselves or someone they know who meets the qualifications by adding their name to the Nomination Issue. Issue will be created on 11 December.  This guide and the elections folder will be updated once the Issue has been created.   Elections officers will verify those who have been nominated are eligible and verify they are willing to run in this election. \n\nOnce you are nominated and elections officer(s) has verified that you are eligible and are willing to run in this election, instructions will be sent for you to add a file to the nominations director under the elections folder.  Your nominee file should include the following information: \n\n    Name (First and Last): \n    Github ID:\n    Email Address: \n    Why you are running and want to be part of the PSG: \n    Anything else you would like the community to consider when voting for you. \n\n\n## Testimonial Phase ## \n\nThis phase will be open for 2 weeks starting on 25 December 2023 and ending on 7 January 2024\n\nDuring the testimonial phase members of the Community will be able to add a testimonial support to the nominees of their choice. \n\nNo NEGATIVE testimonial. Testimonials should only be in support of a nominee.  If you do not believe someone should be on the PSG then don’t vote for them.  Again, this phase and comments are for positive support of nominees. \n\nInstructions will be added to this document and to the elections directory on how to add a testimonial. Instructions will be shared on or before 25 December. \n\n\n## Voting Phase ##\n\nThis phase will be open for 3 weeks starting on 8 January 2023 and ending on 29  January 2024.\n\nDuring this phase qualified members*** will be able to vote for the PSC members.  Qualified members will be sent a CIVS voting key via the main email they have listed on their github accounts. \n\n***Qualified members are those Kubeflow Community Members who have a minimum of 50 Commits in the last year from the start of the election process. As note above, For this election the last year is from 3 December 2022 to 3 December 2023.\n\n\n## Election Results ##\n\nElection Results will be announced on 30  January 2024. \n\n"
  },
  {
    "path": "elections/kubeflow-steering-committee-elections-2024.md",
    "content": "# Kubeflow Project Steering Committee Elections 2024\n## Guidelines, Timelines and Phases\n\nThe Kubeflow Project is holding its second election for the Kubeflow Project Steering Committee (KSC). \n\nThe KSC responsibilities and operations are defined [here](https://github.com/kubeflow/community/blob/master/KUBEFLOW-STEERING-COMMITTEE.md).\n\n\nThe KSC elections process for 2 seats will start on **18 November 2024**.\n\n\nMore details about the Kubeflow election process can be found in the [Kubeflow Election Process document](https://github.com/kubeflow/community/blob/master/proposals/kubeflow-steering-committee-election-proposal.md).\n\n## Voter Qualifications\n\n**Voter qualifications:** To be eligible to vote in this election a voter should be an active member in the Kubeflow Community and have a minimum of 50 contributions* to the Kubeflow project in the last year (defined below).** If you believe you are eligible to vote, but are not listed as eligible you may [file an exception](https://forms.gle/1vM5ZAnZj9z4G7vS7).\n\n## *The qualified voters list will be published to the elections folder and shared with the community via Kubeflow-discuss on Monday 18 November 2024, on or before 9:00am pacific.\n\n*Contributions are defined as: Github Code and Issue Authors, Merge and Pull Requests Submitters as well as commenters on all issues, PRs and MRs.\n\n** For this election last year is from 17  November 2023 to 17 November 2024\n\n## Nomination Qualifications\n**Nomination qualifications:** A nominee should be an active member in the Kubeflow Community and have a minimum of 50 contributions* to the Kubeflow project in the last year.** have the available bandwidth to be invested in the KSC, and be able to operate neutrally in discussions regardless of company or project affiliation. If you believe you are eligible, but are not listed as eligible you may [file an exception](https://forms.gle/1vM5ZAnZj9z4G7vS7). I *(Election officers are ineligible to run in an election, but can vote.)*\n\n## The qualified nominees list will be published to the elections folder and shared with the community via Kubeflow-discuss on Monday 18 November 2024, on or before 9:00am pacific.\n\n**Contributions are defined as: Github Code and Issue Authors, Merge and Pull Requests Submitters as well as commenters on all issues, PRs and MRs.\n\n** For this election last year is from 17 November 2023 to 17 November 2024.\n\n## Process for nominations\nIf you would like to nominate yourself or someone you know who is qualified, you can do so by adding their name to the following Nominations Issues. *(Nominations Issue will be created on the date the nominations phase will be open)*\n\nWe will publish the list of Qualified Nominees.\n\n## Election Timeline\n**Exceptions Phase:** 18 November 2024 at 0900 Pacific Time (Starts) - 24 November 2024 at 12:00pm Pacific Time (Ends)\n\n**Nominations Phase:** 25 November 2024 at 0900 Pacific Time (Starts) - 8 December  2024 at 12:00pm Pacific Time (Ends)\n\n**Testimonial Phase:** 9 December 2024 at 0900 Pacific Time (Starts) - 22 December 2024 at 12:00pm Pacific Time (Ends)\n\n**Voting Phase:** 23 December  2024 at 0900 Pacific Time (Starts) - 12 January 2025 at 12:00pm Pacific Time (Ends)\n\n**Announcement of Election Results:** 13 January 2024\n\n## Exceptions Phase\nThe exceptions phase will be open for 1 week and start on 18 November 2024. If you are not on the list of eligible nominees or voters and believe you should be listed, you can file for an exception during this phase. To file an exception please [fill out the exceptions form](https://forms.gle/1vM5ZAnZj9z4G7vS7).\n\n## Nominations Phase\nThis phase will be open for 2 weeks starting on 25 November 2024 and ending on 8 December  2024. \n\nDuring the nomination phase, members of the Kubeflow Community can nominate themselves or someone they know who meets the qualifications by adding their name to the Nomination Issue. Issue will be created on 25 November 2024. \n\nThis guide and the elections folder will be updated once the Issue has been created. Elections officers will verify those who have been nominated are eligible and verify they are willing to run in this election.\n\nOnce you are nominated and the elections officer(s) has verified that you are eligible and are willing to run in this election, instructions will be sent for you to add a file to the nominations director under the elections folder. \n\nYour nominee file should include the following information:\n\n     Name (First and Last): \n     Github ID:\n     Email Address: \n     Why you are running and want to be part of the PSG: \n     Anything else you would like the community to consider when voting for you. \n\n## Testimonial Phase\nThis phase will be open for 2 weeks starting on 9 December 2024 and ending on 22 December 2024.\n\nDuring the testimonial phase members of the Community will be able to add a testimonial support to the nominees of their choice.\n\nNo NEGATIVE testimonial. Testimonials should only be in support of a nominee. If you do not believe someone should be on the KSC then don’t vote for them.  Again, this phase and comments are for positive support of nominees.\n\nInstructions will be added to this document and to the elections directory on how to add a testimonial. Instructions will be shared on or before 22 December 2024. \n\n## Voting Phase\nThis phase will be open for 3 weeks starting on 23 December 2024 and ending on 12 January 2024.\n\nDuring this phase qualified members*** will be able to vote for the KSC members. \n\nQualified members will be sent a CIVS voting key via the main email they have listed on their github accounts.\n\n***Qualified members are those Kubeflow Community Members who have a minimum of 50 Commits in the last year from the start of the election process. As noted above, For this election the last year is from 17 November 2023 to 17 November 2024.\n\n## Election Results\nElection Results will be announced on 13 January 2025. \n"
  },
  {
    "path": "elections/kubeflow-steering-committee-elections-2025.md",
    "content": "# Kubeflow Project Steering Committee Elections 2025\n## Guidelines, Timelines and Phases\n\nThe Kubeflow Project is holding its second election for the Kubeflow Project Steering Committee (KSC). \n\nThe KSC responsibilities and operations are defined [here](https://github.com/kubeflow/community/blob/master/KUBEFLOW-STEERING-COMMITTEE.md).\n\n\nThe KSC elections process for 3 seats will start on **7 October 2025**.\n\n\nMore details about the Kubeflow election process can be found in the [Kubeflow Election Process document](https://github.com/kubeflow/community/tree/master/proposals/645-kubeflow-steering-committee-election).\n\n## Voter Qualifications\n\n**Voter qualifications:** To be eligible to vote in this election a voter should be an active member in the Kubeflow Community and have a minimum of 50 contributions* to the Kubeflow project in the last year (defined below).** If you believe you are eligible to vote, but are not listed as eligible you may [file an exception](https://forms.gle/cdGaE6nUQwfS5Z64A).\n\n## *The qualified voters list will be published to the elections folder and shared with the community via Kubeflow-discuss on Monday 20 October 2025, on or before 9:00am pacific.\n\n*Contributions are defined as: Github Code and Issue Authors, Merge and Pull Requests Submitters as well as commenters on all issues, PRs and MRs.\n\n** For this election last year is from 12 October 2024 to 12 October 2025.\n\n## Nomination Qualifications\n**Nomination qualifications:** A nominee should be an active member in the Kubeflow Community and have a minimum of 50 contributions* to the Kubeflow project in the last year.** have the available bandwidth to be invested in the KSC, and be able to operate neutrally in discussions regardless of company or project affiliation. If you believe you are eligible, but are not listed as eligible you may [file an exception](https://forms.gle/cdGaE6nUQwfS5Z64A). I *(Election officers are ineligible to run in an election, but can vote.)*\n\n## The qualified nominees list will be published to the elections folder and shared with the community via Kubeflow-discuss on Monday 20 October 2025, on or before 9:00am pacific.\n\n**Contributions are defined as: Github Code and Issue Authors, Merge and Pull Requests Submitters as well as commenters on all issues, PRs and MRs.\n\n** For this election last year is from 12 October 2024 to 12 October 2025.\n\n## Process for nominations\nIf you would like to nominate yourself or someone you know who is qualified, you can do so by adding their name to the following Nominations Issues. *(Nominations Issue will be created on the date the nominations phase will be open)*\n\nWe will publish the list of Qualified Nominees.\n\n## Election Timeline\n**Exceptions Phase:** 13 October 2025 at 0900 Pacific Time (Starts) - 19 October 2025 at 12:00pm Pacific Time (Ends)\n\n**Nominations Phase:** 20 October 2025 at 0900 Pacific Time (Starts) - 2 November 2025 at 12:00pm Pacific Time (Ends)\n\n**Testimonial Phase:** 3 November 2025 at 0900 Pacific Time (Starts) - 16 November 2025 at 12:00pm Pacific Time (Ends)\n\n**Voting Phase:** 17 November 2025 at 0900 Pacific Time (Starts) - 14 December 2025 at 12:00pm Pacific Time (Ends)\n\n**Announcement of Election Results:** 15 December 2025\n\n## Exceptions Phase\nThe exceptions phase will be open for 1 week and start on 13 October 2025. If you are not on the list of eligible nominees or voters and believe you should be listed, you can file for an exception during this phase. To file an exception please [fill out the exceptions form](https://forms.gle/cdGaE6nUQwfS5Z64A).\n\n## Nominations Phase\nThis phase will be open for 2 weeks starting on 20 October 2025 and ending on 2 November 2025. \n\nDuring the nomination phase, members of the Kubeflow Community can nominate themselves or someone they know who meets the qualifications by adding their name to the Nomination Issue. Issue will be created on 20 October 2025. \n\nThis guide and the elections folder will be updated once the Issue has been created. Elections officers will verify those who have been nominated are eligible and verify they are willing to run in this election.\n\nOnce you are nominated and the elections officer(s) has verified that you are eligible and are willing to run in this election, instructions will be sent for you to add a file to the nominations directory under the elections folder. \n\nYour nominee file should include the following information:\n\n     Name (First and Last): \n     Github ID:\n     Email Address: \n     Why you are running and want to be part of the PSG: \n     Anything else you would like the community to consider when voting for you. \n\n## Testimonial Phase\nThis phase will be open for 2 weeks starting on 3 November 2025 and ending on 16 November 2025.\n\nDuring the testimonial phase members of the Community will be able to add a testimonial support to the nominees of their choice.\n\nNo NEGATIVE testimonial. Testimonials should only be in support of a nominee. If you do not believe someone should be on the KSC then don’t vote for them.  Again, this phase and comments are for positive support of nominees.\n\nInstructions will be added to this document and to the elections directory on how to add a testimonial. Instructions will be shared on or before 3 November 2025. \n\n## Voting Phase\nThis phase will be open for 4 weeks starting on 17 November 2025 and ending on 14 December 2025.\n\nDuring this phase qualified members*** will be able to vote for the KSC members. \n\nQualified members* will be sent a CIVS voting key via the main email they have listed on their github accounts. \n\nIf you don't have your email publicly listed on your Github account and you are eligible to vote it is ***YOUR RESPONSIBILITY*** to make sure the election officials have your email address.  Officials will tag you in an issue if they were unable to send you a key.  Please watch for notifications during this phase of the election. \n\n## *Qualified members are those Kubeflow Community Members who have a minimum of 50 Commits in the last year from the start of the election process. As noted above, For this election the last year is from 12 October 2024 to 12 October 2025.\n\n## Election Results\nElection Results will be announced on 15 December 2025. \n"
  },
  {
    "path": "generator/README.md",
    "content": "# WG Doc builder\n\nThis folder contains scripts to automatically generate documentation about the\ndifferent Special Interest Groups (SIGs), Working Groups (WGs),\nUser Groups (UGs) and Committees of Kubernetes. The authoritative\nsource for SIG information is the [`wgs.yaml`](/wgs.yaml) file in the project root.\nAll updates must be done there.\n\nThe schema for this file should be self explanatory. However, if you need to see all the options, check out the generator code in `app.go`.\n\nThe documentation follows a template and uses the values from [`wgs.yaml`](/wgs.yaml):\n\n- Header: [`header.tmpl`](header.tmpl)\n- List: [`list.tmpl`](list.tmpl)\n- SIG README: [`sig_readme.tmpl`](sig_readme.tmpl)\n- WG README: [`wg_readme.tmpl`](wg_readme.tmpl)\n- UG README: [`ug_readme.tmpl`](ug_readme.tmpl)\n- Committee README: [`committee_readme.tmpl`](committee_readme.tmpl)\n\n**Time Zone gotcha**:\nTime zones make everything complicated.\nAnd Daylight Saving time makes it even more complicated.\nMeetings are specified with a time zone and we generate a link to http://www.thetimezoneconverter.com/ so people can easily convert it to their local time zone.\nTo make this work you need to specify the time zone in a way that the web site recognizes.\nPractically, that means US pacific time must be `PT (Pacific Time)`.\n`PT` isn't good enough, unfortunately.\n\nWhen an update happens to the this file, the next step is to generate the\naccompanying documentation. This takes the format of the following types of doc files:\n\n```\nsig-<sig-name>/README.md\nwg-<working-group-name>/README.md\nug-<user-group-name>/README.md\ncommittee-<committee-name>/README.md\nsig-list.md\n```\n\nFor example, if a contributor has updated `wg-serving`, the\nfollowing files will be generated:\n\n```\nwg-serving/README.md\nwg-list.md\n```\n\n## How to use\n\nTo (re)build documentation for all the SIGs in a go environment, run:\n\n```bash\nmake generate\n```\nor to run this inside a docker container:\n```bash\nmake generate-dockerized\n```\n\nTo build docs for one SIG, run one of these commands:\n\n```bash\nmake WHAT=ug-onprem\nmake WHAT=wg-serving\n```\n\nwhere the `WHAT` var refers to the directory being built.\n\n## Adding custom content\n\n### README\n\nIf your SIG, WG, UG or Committee wishes to add custom content, you can do so by placing it within\nthe following code comments:\n\n```markdown\n<!-- BEGIN CUSTOM CONTENT -->\n\n<!-- END CUSTOM CONTENT -->\n```\n\nAnything inside these code comments are saved by the generator and appended\nto newly generated content. Updating any content outside this block, however,\nwill be overwritten the next time the generator runs.\n\nAn example might be:\n\n```markdown\n<!-- BEGIN CUSTOM CONTENT -->\n## Upcoming SIG goals\n- Do this\n- Do that\n<!-- END CUSTOM CONTENT -->\n```\n\n### OWNERS_ALIASES\n\nSimilarly, custom aliases can be added in the `OWNERS_ALIASES` file by placing\nit within the following code comments:\n\n```yaml\n## BEGIN CUSTOM CONTENT\n\n## END CUSTOM CONTENT\n```"
  },
  {
    "path": "generator/aliases.tmpl",
    "content": "aliases:\n  {{- range .Sigs}}\n  {{.Dir}}-leads:\n    {{- range .Leadership.Owners}}\n    - {{.GitHub}}\n    {{- end}}\n  {{- end}}\n  {{- range .WorkingGroups}}\n  {{.Dir}}-leads:\n    {{- range .Leadership.Owners}}\n    - {{.GitHub}}\n    {{- end}}\n  {{- end}}\n  {{- range .UserGroups}}\n  {{.Dir}}-leads:\n    {{- range .Leadership.Owners}}\n    - {{.GitHub}}\n    {{- end}}\n  {{- end}}\n  {{- range .Committees}}\n  {{.Dir}}:\n    {{- range .Leadership.Owners}}\n    - {{.GitHub}}\n    {{- end}}\n  {{- end}}\n"
  },
  {
    "path": "generator/app.go",
    "content": "/*\nCopyright 2017 The Kubernetes Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"strings\"\n\t\"text/template\"\n\n\tyaml \"gopkg.in/yaml.v3\"\n)\n\nconst (\n\treadmeTemplate  = \"readme.tmpl\"\n\tlistTemplate    = \"list.tmpl\"\n\taliasesTemplate = \"aliases.tmpl\"\n\theaderTemplate  = \"header.tmpl\"\n\n\twgsYamlFile   = \"wgs.yaml\"\n\tsigListOutput = \"wg-list.md\"\n\taliasesOutput = \"OWNERS_ALIASES\"\n\tindexFilename = \"README.md\"\n\n\tbeginCustomMarkdown = \"<!-- BEGIN CUSTOM CONTENT -->\"\n\tendCustomMarkdown   = \"<!-- END CUSTOM CONTENT -->\"\n\tbeginCustomYaml     = \"## BEGIN CUSTOM CONTENT\"\n\tendCustomYaml       = \"## END CUSTOM CONTENT\"\n)\n\nvar (\n\tbaseGeneratorDir = \"\"\n\ttemplateDir      = \"generator\"\n)\n\n// FoldedString is a string that will be serialized in FoldedStyle by go-yaml\ntype FoldedString string\n\n// MarshalYAML customizes how FoldedStrings will be serialized by go-yaml\nfunc (x FoldedString) MarshalYAML() (interface{}, error) {\n\treturn &yaml.Node{\n\t\tKind:  yaml.ScalarNode,\n\t\tStyle: yaml.FoldedStyle,\n\t\tValue: string(x),\n\t}, nil\n}\n\n// Person represents an individual person holding a role in a group.\ntype Person struct {\n\tGitHub  string\n\tName    string\n\tCompany string `yaml:\"company,omitempty\"`\n}\n\n// Meeting represents a regular meeting for a group.\ntype Meeting struct {\n\tDescription   string\n\tDay           string\n\tTime          string\n\tTZ            string\n\tFrequency     string\n\tURL           string `yaml:\",omitempty\"`\n\tArchiveURL    string `yaml:\"archive_url,omitempty\"`\n\tRecordingsURL string `yaml:\"recordings_url,omitempty\"`\n}\n\n// Contact represents the various contact points for a group.\ntype Contact struct {\n\tSlack              string       `yaml:\",omitempty\"`\n\tMailingList        string       `yaml:\"mailing_list,omitempty\"`\n\tPrivateMailingList string       `yaml:\"private_mailing_list,omitempty\"`\n\tGithubTeams        []GithubTeam `yaml:\"teams,omitempty\"`\n}\n\n// GithubTeam represents a specific Github Team.\ntype GithubTeam struct {\n\tName        string\n\tDescription string `yaml:\",omitempty\"`\n}\n\n// Subproject represents a specific subproject owned by the group\ntype Subproject struct {\n\tName        string\n\tDescription string   `yaml:\",omitempty\"`\n\tContact     *Contact `yaml:\",omitempty\"`\n\tOwners      []string\n\tMeetings    []Meeting `yaml:\",omitempty\"`\n}\n\n// LeadershipGroup represents the different groups of leaders within a group\ntype LeadershipGroup struct {\n\tChairs         []Person\n\tTechnicalLeads []Person `yaml:\"tech_leads,omitempty\"`\n\tEmeritusLeads  []Person `yaml:\"emeritus_leads,omitempty\"`\n}\n\n// PrefixToPersonMap returns a map of prefix to persons, useful for iteration over all persons\nfunc (g *LeadershipGroup) PrefixToPersonMap() map[string][]Person {\n\treturn map[string][]Person{\n\t\t\"chair\":         g.Chairs,\n\t\t\"tech_lead\":     g.TechnicalLeads,\n\t\t\"emeritus_lead\": g.EmeritusLeads,\n\t}\n}\n\n// Owners returns a sorted and de-duped list of owners for a LeadershipGroup\nfunc (g *LeadershipGroup) Owners() []Person {\n\to := append(g.Chairs, g.TechnicalLeads...)\n\n\t// Sort\n\tsort.Slice(o, func(i, j int) bool {\n\t\treturn o[i].GitHub < o[j].GitHub\n\t})\n\n\t// De-dupe\n\tseen := make(map[string]struct{}, len(o))\n\ti := 0\n\tfor _, p := range o {\n\t\tif _, ok := seen[p.GitHub]; ok {\n\t\t\tcontinue\n\t\t}\n\t\tseen[p.GitHub] = struct{}{}\n\t\to[i] = p\n\t\ti++\n\t}\n\treturn o[:i]\n}\n\n// Group represents either a Special Interest Group (SIG) or a Working Group (WG)\ntype Group struct {\n\tDir              string\n\tName             string\n\tMissionStatement FoldedString `yaml:\"mission_statement,omitempty\"`\n\tCharterLink      string       `yaml:\"charter_link,omitempty\"`\n\tStakeholderSIGs  []string     `yaml:\"stakeholder_sigs,omitempty\"`\n\tLabel            string\n\tLeadership       LeadershipGroup `yaml:\"leadership\"`\n\tMeetings         []Meeting\n\tContact          Contact\n\tSubprojects      []Subproject `yaml:\",omitempty\"`\n}\n\n// DirName returns the directory that a group's documentation will be\n// generated into. It is composed of a prefix (sig for SIGs and wg for WGs),\n// and a formatted version of the group's name (in kebab case).\nfunc (g *Group) DirName(prefix string) string {\n\treturn fmt.Sprintf(\"%s-%s\", prefix, strings.ToLower(strings.Replace(g.Name, \" \", \"-\", -1)))\n}\n\n// LabelName returns the expected label for a given group\nfunc (g *Group) LabelName(prefix string) string {\n\treturn strings.Replace(g.DirName(prefix), fmt.Sprintf(\"area/%s\", prefix), \"\", 1)\n}\n\n// Context is the context for the sigs.yaml file.\ntype Context struct {\n\tSigs          []Group\n\tWorkingGroups []Group\n\tUserGroups    []Group\n\tCommittees    []Group\n}\n\nfunc index(groups []Group, predicate func(Group) bool) int {\n\tfor i, group := range groups {\n\t\tif predicate(group) {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn -1\n}\n\n// PrefixToGroupMap returns a map of prefix to groups, useful for iteration over all groups\nfunc (c *Context) PrefixToGroupMap() map[string][]Group {\n\treturn map[string][]Group{\n\t\t\"sig\":       c.Sigs,\n\t\t\"wg\":        c.WorkingGroups,\n\t\t\"ug\":        c.UserGroups,\n\t\t\"committee\": c.Committees,\n\t}\n}\n\n// Sort sorts all lists within the Context struct\nfunc (c *Context) Sort() {\n\tfor _, groups := range c.PrefixToGroupMap() {\n\t\tsort.Slice(groups, func(i, j int) bool {\n\t\t\treturn groups[i].Dir < groups[j].Dir\n\t\t})\n\t\tfor _, group := range groups {\n\t\t\tsort.Strings(group.StakeholderSIGs)\n\t\t\tfor _, people := range [][]Person{\n\t\t\t\tgroup.Leadership.Chairs,\n\t\t\t\tgroup.Leadership.TechnicalLeads,\n\t\t\t\tgroup.Leadership.EmeritusLeads} {\n\t\t\t\tsort.Slice(people, func(i, j int) bool {\n\t\t\t\t\t// This ensure OWNERS / OWNERS_ALIAS files are ordered by github\n\t\t\t\t\treturn people[i].GitHub < people[j].GitHub\n\t\t\t\t})\n\t\t\t}\n\t\t\tsort.Slice(group.Meetings, func(i, j int) bool {\n\t\t\t\treturn group.Meetings[i].Description < group.Meetings[j].Description\n\t\t\t})\n\t\t\tsort.Slice(group.Contact.GithubTeams, func(i, j int) bool {\n\t\t\t\treturn group.Contact.GithubTeams[i].Name < group.Contact.GithubTeams[j].Name\n\t\t\t})\n\t\t\tsort.Slice(group.Subprojects, func(i, j int) bool {\n\t\t\t\treturn group.Subprojects[i].Name < group.Subprojects[j].Name\n\t\t\t})\n\t\t\tfor _, subproject := range group.Subprojects {\n\t\t\t\tif subproject.Contact != nil {\n\t\t\t\t\tsort.Slice(subproject.Contact.GithubTeams, func(i, j int) bool {\n\t\t\t\t\t\treturn subproject.Contact.GithubTeams[i].Name < subproject.Contact.GithubTeams[j].Name\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tsort.Strings(subproject.Owners)\n\t\t\t\tsort.Slice(subproject.Meetings, func(i, j int) bool {\n\t\t\t\t\treturn subproject.Meetings[i].Description < subproject.Meetings[j].Description\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Validate returns a list of errors encountered while validating a Context\nfunc (c *Context) Validate() []error {\n\terrors := []error{}\n\tpeople := make(map[string]Person)\n\tfor prefix, groups := range c.PrefixToGroupMap() {\n\t\tfor _, group := range groups {\n\t\t\texpectedDir := group.DirName(prefix)\n\t\t\tif expectedDir != group.Dir {\n\t\t\t\terrors = append(errors, fmt.Errorf(\"expected dir: %s, got: %s\", expectedDir, group.Dir))\n\t\t\t}\n\t\t\texpectedLabel := \"area/\" + group.LabelName(prefix)\n\t\t\tif expectedLabel != group.Label {\n\t\t\t\terrors = append(errors, fmt.Errorf(\"%s: expected label: %s, got: %s\", group.Dir, expectedLabel, group.Label))\n\t\t\t}\n\t\t\tfor prefix, persons := range group.Leadership.PrefixToPersonMap() {\n\t\t\t\tfor _, person := range persons {\n\t\t\t\t\tif val, ok := people[person.GitHub]; ok {\n\t\t\t\t\t\tif val.Name != person.Name || (prefix != \"emeritus_lead\" && val.Company != person.Company) {\n\t\t\t\t\t\t\terrors = append(errors, fmt.Errorf(\"%s: %ss: expected person: %v, got: %v\", group.Dir, prefix, val, person))\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if prefix != \"emeritus_lead\" {\n\t\t\t\t\t\tpeople[person.GitHub] = person\n\t\t\t\t\t}\n\n\t\t\t\t\tif prefix == \"emeritus_lead\" && person.Company != \"\" {\n\t\t\t\t\t\terrors = append(errors, fmt.Errorf(\"%s: emeritus leads should not have company specified; company specified for: %s\", group.Dir, person.Name))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif len(group.StakeholderSIGs) != 0 {\n\t\t\t\tif prefix == \"wg\" {\n\t\t\t\t\tfor _, name := range group.StakeholderSIGs {\n\t\t\t\t\t\tif index(c.Sigs, func(g Group) bool { return g.Name == name }) == -1 {\n\t\t\t\t\t\t\terrors = append(errors, fmt.Errorf(\"%s: invalid stakeholder sig name %s\", group.Dir, name))\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\terrors = append(errors, fmt.Errorf(\"%s: only WGs may have stakeholder_sigs\", group.Dir))\n\t\t\t\t}\n\t\t\t}\n\t\t\tif prefix == \"sig\" {\n\t\t\t\tif group.CharterLink == \"\" {\n\t\t\t\t\terrors = append(errors, fmt.Errorf(\"%s: has no charter\", group.Dir))\n\t\t\t\t}\n\t\t\t\t// TODO(spiffxp): is this required though?\n\t\t\t\tif group.MissionStatement == \"\" {\n\t\t\t\t\terrors = append(errors, fmt.Errorf(\"%s: has no mission statement\", group.Dir))\n\t\t\t\t}\n\t\t\t\tif len(group.Subprojects) != 0 {\n\t\t\t\t\terrors = append(errors, fmt.Errorf(\"%s: must not own any subprojects\", group.Dir))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn errors\n}\n\nfunc pathExists(path string) bool {\n\t_, err := os.Stat(path)\n\treturn err == nil\n}\n\nfunc createDirIfNotExists(path string) error {\n\tif !pathExists(path) {\n\t\treturn os.MkdirAll(path, 0755)\n\t}\n\treturn nil\n}\n\nfunc getExistingContent(path string, fileFormat string) (string, error) {\n\tcapture := false\n\tvar captured []string\n\n\tbeginMarker := \"\"\n\tendMarker := \"\"\n\tswitch fileFormat {\n\tcase \"markdown\":\n\t\tbeginMarker = beginCustomMarkdown\n\t\tendMarker = endCustomMarkdown\n\tcase \"yaml\":\n\t\tbeginMarker = beginCustomYaml\n\t\tendMarker = endCustomYaml\n\tcase \"\":\n\t\treturn \"\", nil\n\t}\n\n\t// NOTE: For some reason using bufio.Scanner with existing file pointer prepends\n\t// a bunch of null ^@ characters, so using to ioutil.ReadFile instead.\n\tcontent, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tfor _, line := range strings.Split(string(content), \"\\n\") {\n\t\tif strings.Contains(line, endMarker) {\n\t\t\tcapture = false\n\t\t}\n\t\tif capture {\n\t\t\tcaptured = append(captured, line)\n\t\t}\n\t\tif strings.Contains(line, beginMarker) {\n\t\t\tcapture = true\n\t\t}\n\t}\n\n\treturn strings.Join(captured, \"\\n\"), nil\n}\n\nvar funcMap = template.FuncMap{\n\t\"tzUrlEncode\": tzURLEncode,\n\t\"trimSpace\":   strings.TrimSpace,\n}\n\n// tzUrlEncode returns a url encoded string without the + shortcut. This is\n// required as the timezone conversion site we are using doesn't recognize + as\n// a valid url escape character.\nfunc tzURLEncode(tz string) string {\n\treturn strings.Replace(url.QueryEscape(tz), \"+\", \"%20\", -1)\n}\n\nfunc writeTemplate(templatePath, outputPath string, fileFormat string, data interface{}) error {\n\t// set up template\n\tt, err := template.New(filepath.Base(templatePath)).\n\t\tFuncs(funcMap).\n\t\tParseFiles(templatePath, filepath.Join(baseGeneratorDir, templateDir, headerTemplate))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// create if not exists\n\tif !pathExists(outputPath) {\n\t\t_, err = os.Create(outputPath)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// open file and truncate\n\tf, err := os.OpenFile(outputPath, os.O_RDWR, 0644)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\t// get any existing content\n\tcontent, err := getExistingContent(outputPath, fileFormat)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// ensure file is empty\n\tf.Truncate(0)\n\n\t// generated content\n\terr = t.Execute(f, data)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\twriteCustomContentBlock(f, content, fileFormat)\n\n\treturn nil\n}\n\nfunc writeCustomContentBlock(f *os.File, content string, fileFormat string) {\n\tbeginMarker := \"\"\n\tendMarker := \"\"\n\tswitch fileFormat {\n\tcase \"markdown\":\n\t\tbeginMarker = beginCustomMarkdown\n\t\tendMarker = endCustomMarkdown\n\tcase \"yaml\":\n\t\tbeginMarker = beginCustomYaml\n\t\tendMarker = endCustomYaml\n\tcase \"\":\n\t\treturn\n\t}\n\n\tlines := []string{beginMarker, \"\\n\", content, \"\\n\", endMarker, \"\\n\"}\n\tfor _, line := range lines {\n\t\tf.Write([]byte(line))\n\t}\n}\n\nfunc createGroupReadme(groups []Group, prefix string) error {\n\t// figure out if the user wants to generate one group\n\tvar selectedGroupName *string\n\tif envVal, ok := os.LookupEnv(\"WHAT\"); ok {\n\t\tselectedGroupName = &envVal\n\t}\n\n\tfor _, group := range groups {\n\t\t// skip generation if the user specified only one group\n\t\tif selectedGroupName != nil && strings.HasSuffix(group.Dir, *selectedGroupName) == false {\n\t\t\tfmt.Printf(\"Skipping %s/README.md\\n\", group.Dir)\n\t\t\tcontinue\n\t\t}\n\n\t\tfmt.Printf(\"Generating %s/README.md\\n\", group.Dir)\n\n\t\toutputDir := filepath.Join(baseGeneratorDir, group.Dir)\n\t\tif err := createDirIfNotExists(outputDir); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\toutputPath := filepath.Join(outputDir, indexFilename)\n\t\treadmePath := filepath.Join(baseGeneratorDir, templateDir, fmt.Sprintf(\"%s_%s\", prefix, readmeTemplate))\n\t\tif err := writeTemplate(readmePath, outputPath, \"markdown\", group); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// readSigsYaml decodes yaml stored in a file at path into the\n// specified yaml.Node\nfunc readYaml(path string, data interface{}) error {\n\tfile, err := os.Open(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer file.Close()\n\tdecoder := yaml.NewDecoder(file)\n\tdecoder.KnownFields(true)\n\treturn decoder.Decode(data)\n}\n\n// writeSigsYaml writes the specified data to a file at path\n// indent is set to 2 spaces\nfunc writeYaml(data interface{}, path string) error {\n\tfile, err := os.Create(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer file.Close()\n\tenc := yaml.NewEncoder(file)\n\tenc.SetIndent(2)\n\treturn enc.Encode(data)\n}\n\nfunc main() {\n\tyamlPath := filepath.Join(baseGeneratorDir, wgsYamlFile)\n\tvar ctx Context\n\n\terr := readYaml(yamlPath, &ctx)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tctx.Sort()\n\n\tfmt.Printf(\"Validating %s\\n\", yamlPath)\n\terrs := ctx.Validate()\n\tif len(errs) != 0 {\n\t\tfor _, err := range errs {\n\t\t\tfmt.Printf(\"ERROR: %s\\n\", err.Error())\n\t\t}\n\t\tos.Exit(1)\n\t}\n\n\t// Write the Context struct back to yaml to enforce formatting\n\terr = writeYaml(&ctx, yamlPath)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tfor prefix, groups := range ctx.PrefixToGroupMap() {\n\t\terr = createGroupReadme(groups, prefix)\n\t\tif err != nil {\n\t\t\tlog.Fatal(err)\n\t\t}\n\t}\n\n\tfmt.Println(\"Generating sig-list.md\")\n\toutputPath := filepath.Join(baseGeneratorDir, sigListOutput)\n\terr = writeTemplate(filepath.Join(baseGeneratorDir, templateDir, listTemplate), outputPath, \"markdown\", ctx)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tfmt.Println(\"Generating OWNERS_ALIASES\")\n\toutputPath = filepath.Join(baseGeneratorDir, aliasesOutput)\n\terr = writeTemplate(filepath.Join(baseGeneratorDir, templateDir, aliasesTemplate), outputPath, \"yaml\", ctx)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tfmt.Println(\"Finished generation!\")\n}\n"
  },
  {
    "path": "generator/header.tmpl",
    "content": "{{- define \"header\" -}}\n<!---\nThis is an autogenerated file!\n\nPlease do not edit this file directly, but instead make changes to the\nsigs.yaml file in the project root.\n\nTo understand how this file is generated, see https://github.com/kubeflow/community/blob/master/generator/README.md\n--->\n{{- end -}}\n"
  },
  {
    "path": "generator/list.tmpl",
    "content": "{{- template \"header\" }}\n# Working Groups\n\nMost community activity is organized into Working Groups (WGs), and WGs may also sponsor Special\nInterest Groups (SIGs) on topics they are invested in.\n\nWGs follow these [guidelines](wgs/wg-governance.md) although each of these groups may operate a little differently\ndepending on their needs and workflow.\n\nEach group's material is in its subdirectory in this project.\n\nWhen the need arises, a [new WG can be created](wgs/wg-lifecycle.md)\n\n### Working Group List\n\n| Name | Label | Chairs | Contact | Meetings |\n|------|-------|--------|---------|----------|\n{{- range .WorkingGroups}}\n|[{{.Name}}]({{.Dir}}/README.md)|{{.Label}}|{{range .Leadership.Chairs}}* [{{.Name}}](https://github.com/{{.GitHub}}){{if .Company}}, {{.Company}}{{end}}<br>{{end}}|* [Slack](https://kubeflow.slack.com/messages/{{.Contact.Slack}})<br>* [Mailing List]({{.Contact.MailingList}})|{{- range .Meetings -}}\n  * {{.Description}}: [{{.Day}}s at {{.Time}} {{.TZ}} ({{.Frequency}})]({{.URL}})<br>\n{{- end -}}\n{{- range .Subprojects -}}\n  {{ $name := .Name }}\n  {{- range .Meetings -}}\n    * ({{ $name }}) {{.Description}}: [{{.Day}}s at {{.Time}} {{.TZ}} ({{.Frequency}})]({{.URL}})<br>\n  {{- end -}}\n{{- end -}}\n{{- end }}\n\n### Special Interest Group List\n\n| Name | Label | Chairs | Contact | Meetings |\n|------|-------|--------|---------|----------|\n{{- range .Sigs}}\n|[{{.Name}}]({{.Dir}}/README.md)|{{.Label}}|{{range .Leadership.Chairs}}* [{{.Name}}](https://github.com/{{.GitHub}}){{if .Company}}, {{.Company}}{{end}}<br>{{end}}|* [Slack](https://kubeflow.slack.com/messages/{{.Contact.Slack}})<br>* [Mailing List]({{.Contact.MailingList}})|{{- range .Meetings -}}\n  * {{.Description}}: [{{.Day}}s at {{.Time}} {{.TZ}} ({{.Frequency}})]({{.URL}})<br>\n{{- end -}}\n{{- range .Subprojects -}}\n  {{ $name := .Name }}\n  {{- range .Meetings -}}\n    * ({{ $name }}) {{.Description}}: [{{.Day}}s at {{.Time}} {{.TZ}} ({{.Frequency}})]({{.URL}})<br>\n  {{- end -}}\n{{- end -}}\n{{- end }}\n"
  },
  {
    "path": "generator/sig_readme.tmpl",
    "content": "{{- template \"header\" }}\n# {{.Name}} Special Interest Group\n\n{{ .MissionStatement }}\n{{- if .CharterLink }}\nThe [charter]({{.CharterLink}}) defines the scope and governance of the {{.Name}} Special Interest Group.\n{{ end }}\n{{ if .Meetings -}}\n## Meetings\n{{- range .Meetings }}\n* {{.Description}}: [{{.Day}}s at {{.Time}} {{.TZ}}]({{.URL}}) ({{.Frequency}}). [Convert to your timezone](http://www.thetimezoneconverter.com/?t={{.Time}}&tz={{.TZ | tzUrlEncode}}).\n{{- if .ArchiveURL }}\n  * [Meeting notes and Agenda]({{.ArchiveURL}}).\n{{- end }}\n{{- if .RecordingsURL }}\n  * [Meeting recordings]({{.RecordingsURL}}).\n{{- end }}\n{{- end }}\n\n{{- end }}\n{{- if .Leadership }}\n\n## Leadership\n{{- if .Leadership.Chairs }}\n\n### Chairs\nThe Chairs of the SIG run operations and processes governing the SIG.\n{{ range .Leadership.Chairs }}\n* {{.Name}} (**[@{{.GitHub}}](https://github.com/{{.GitHub}})**){{if .Company}}, {{.Company}}{{end}}\n{{- end }}\n{{- end }}\n{{- if .Leadership.TechnicalLeads }}\n\n### Technical Leads\nThe Technical Leads of the SIG establish new subprojects, decommission existing\nsubprojects, and resolve cross-subproject technical issues and decisions.\n{{ range .Leadership.TechnicalLeads }}\n* {{.Name}} (**[@{{.GitHub}}](https://github.com/{{.GitHub}})**){{if .Company}}, {{.Company}}{{end}}\n{{- end }}\n{{- end }}\n{{- if .Leadership.EmeritusLeads }}\n\n## Emeritus Leads\n{{ range .Leadership.EmeritusLeads }}\n* {{.Name}} (**[@{{.GitHub}}](https://github.com/{{.GitHub}})**)\n{{- end }}\n{{- end }}\n{{- end }}\n\n## Contact\n- Slack: [#{{.Contact.Slack}}](https://kubeflow.slack.com/messages/{{.Contact.Slack}})\n- [Mailing list]({{.Contact.MailingList}})\n{{- if .Label }}\n- [Open Community Issues/PRs](https://github.com/kubeflow/community/labels/sig%2F{{.Label}})\n{{- end }}\n{{- if .Contact.GithubTeams }}\n- GitHub Teams:\n{{- range .Contact.GithubTeams }}\n    - [@kubeflow/{{.Name}}](https://github.com/orgs/kubeflow/teams/{{.Name}}) {{- if .Description }} - {{.Description}} {{- end}}\n{{- end }}\n{{- end }}\n\n{{- if .Subprojects }}\n\n## Subprojects\n\nThe following [subprojects][subproject-definition] are owned by sig-{{.Label}}:\n\n{{- range .Subprojects }}\n### {{.Name}}\n{{- if .Description }}\n{{ trimSpace .Description }}\n{{- end }}\n- **Owners:**\n{{- range .Owners }}\n  - {{.}}\n{{- end }}\n{{- if .Contact }}\n- **Contact:**\n{{- if .Contact.Slack }}\n  - Slack: [#{{.Contact.Slack}}](https://kubeflow.slack.com/messages/{{.Contact.Slack}})\n{{- end }}\n{{- if .Contact.MailingList }}\n  - [Mailing List]({{.Contact.MailingList}})\n{{- end }}\n{{- if .Contact.GithubTeams }}\n  - GitHub Teams: \n{{- range .Contact.GithubTeams }}\n    - [@kubeflow/{{.Name}}](https://github.com/orgs/kubeflow/teams/{{.Name}}) {{- if .Description }} - {{.Description}}{{- end}}\n{{- end }}\n{{- end }}\n{{- end }}\n{{- if .Meetings }}\n- **Meetings:**\n{{- range .Meetings }}\n  - {{.Description}}: [{{.Day}}s at {{.Time}} {{.TZ}}]({{.URL}}) ({{.Frequency}}). [Convert to your timezone](http://www.thetimezoneconverter.com/?t={{.Time}}&tz={{.TZ | tzUrlEncode}}).\n{{- if .ArchiveURL }}\n    - [Meeting notes and Agenda]({{.ArchiveURL}}).\n{{- end }}\n{{- if .RecordingsURL }}\n    - [Meeting recordings]({{.RecordingsURL}}).\n{{- end }}\n{{- end }}\n{{- end }}\n{{- end }}\n{{- end }}\n\n[subproject-definition]: https://github.com/kubeflow/community/blob/master/governance.md#subprojects\n"
  },
  {
    "path": "generator/ug_readme.tmpl",
    "content": "{{- template \"header\" }}\n# {{.Name}} User Group\n\n{{ .MissionStatement }}\n{{- if .CharterLink }}\nThe [charter]({{.CharterLink}}) defines the scope and governance of the {{.Name}} User Group.\n{{ end }}\n{{ if .Meetings -}}\n## Meetings\n{{- range .Meetings }}\n* {{.Description}}: [{{.Day}}s at {{.Time}} {{.TZ}}]({{.URL}}) ({{.Frequency}}). [Convert to your timezone](http://www.thetimezoneconverter.com/?t={{.Time}}&tz={{.TZ | tzUrlEncode}}).\n{{- if .ArchiveURL }}\n  * [Meeting notes and Agenda]({{.ArchiveURL}}).\n{{- end }}\n{{- if .RecordingsURL }}\n  * [Meeting recordings]({{.RecordingsURL}}).\n{{- end }}\n{{- end }}\n\n{{- end }}\n{{- if .Leadership }}\n{{- if .Leadership.Chairs }}\n\n## Organizers\n{{ range .Leadership.Chairs }}\n* {{.Name}} (**[@{{.GitHub}}](https://github.com/{{.GitHub}})**){{if .Company}}, {{.Company}}{{end}}\n{{- end }}\n{{- end }}\n{{- if .Leadership.EmeritusLeads }}\n\n## Emeritus Organizers\n{{ range .Leadership.EmeritusLeads }}\n* {{.Name}} (**[@{{.GitHub}}](https://github.com/{{.GitHub}})**)\n{{- end }}\n{{- end }}\n{{- end }}\n\n## Contact\n- Slack: [#{{.Contact.Slack}}](https://kubeflow.slack.com/messages/{{.Contact.Slack}})\n- [Mailing list]({{.Contact.MailingList}})\n{{- if .Label }}\n- [Open Community Issues/PRs](https://github.com/kubeflow/community/labels/ug%2F{{.Label}})\n{{- end }}\n{{- if .Contact.GithubTeams }}\n- GitHub Teams:\n{{- range .Contact.GithubTeams }}\n    - [@kubeflow/{{.Name}}](https://github.com/orgs/kubeflow/teams/{{.Name}}) {{- if .Description }} - {{.Description}} {{- end}}\n{{- end }}\n{{- end }}\n"
  },
  {
    "path": "generator/wg_readme.tmpl",
    "content": "{{- template \"header\" }}\n# {{.Name}} Working Group\n\n{{ .MissionStatement }}\n{{- if .CharterLink }}\nThe [charter]({{.CharterLink}}) defines the scope and governance of the {{.Name}} Working Group.\n{{ end }}\n{{- if .StakeholderSIGs }}\n## Stakeholder SIGs\n{{- range .StakeholderSIGs }}\n* SIG {{.}}\n{{- end }}\n{{ end }}\n{{ if .Meetings -}}\n## Meetings\n{{- range .Meetings }}\n* {{.Description}}: [{{.Day}}s at {{.Time}} {{.TZ}}]({{.URL}}) ({{.Frequency}}). [Convert to your timezone](http://www.thetimezoneconverter.com/?t={{.Time}}&tz={{.TZ | tzUrlEncode}}).\n{{- if .ArchiveURL }}\n  * [Meeting notes and Agenda]({{.ArchiveURL}}).\n{{- end }}\n{{- if .RecordingsURL }}\n  * [Meeting recordings]({{.RecordingsURL}}).\n{{- end }}\n{{- end }}\n\n{{- end }}\n{{- if .Leadership }}\n{{- if .Leadership.Chairs }}\n\n## Organizers\n{{ range .Leadership.Chairs }}\n* {{.Name}} (**[@{{.GitHub}}](https://github.com/{{.GitHub}})**){{if .Company}}, {{.Company}}{{end}}\n{{- end }}\n{{- end }}\n{{- if .Leadership.EmeritusLeads }}\n\n## Emeritus Organizers\n{{ range .Leadership.EmeritusLeads }}\n* {{.Name}} (**[@{{.GitHub}}](https://github.com/{{.GitHub}})**)\n{{- end }}\n{{- end }}\n{{- end }}\n\n## Contact\n- Slack: [#{{.Contact.Slack}}](https://kubeflow.slack.com/messages/{{.Contact.Slack}})\n- [Mailing list]({{.Contact.MailingList}})\n{{- if .Label }}\n- [Open Community Issues/PRs](https://github.com/kubeflow/community/labels/wg%2F{{.Label}})\n{{- end }}\n{{- if .Contact.GithubTeams }}\n- GitHub Teams:\n{{- range .Contact.GithubTeams }}\n    - [@kubeflow/{{.Name}}](https://github.com/orgs/kubeflow/teams/{{.Name}}) {{- if .Description }} - {{.Description}} {{- end}}\n{{- end }}\n{{- end }}\n"
  },
  {
    "path": "go.mod",
    "content": "module github.com/kubeflow/community\n\ngo 1.14\n\nrequire (\n\tgopkg.in/yaml.v3 v3.0.0-20190409140830-cdc409dda467\n)\n"
  },
  {
    "path": "go.sum",
    "content": "gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/yaml.v3 v3.0.0-20190409140830-cdc409dda467 h1:w3VhdSYz2sIVz54Ta/eDCCfCQ4fQkDgRxMACggArIUw=\ngopkg.in/yaml.v3 v3.0.0-20190409140830-cdc409dda467/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\nk8s.io/community v0.0.0-20200824161741-359d3f8d1440 h1:mFv3WKrfhbbukJVFizj/dI9NDs8vEw+Y8iHvHT2DkoI=\n"
  },
  {
    "path": "guidelines/README.md",
    "content": "# Guidelines\n\nThis folder contains guidelines for contributors on the following topics:\n\n* [Application Requirements](application_requirements.md) - requirements and recommendations aimed at graduating applications to 1.0\n"
  },
  {
    "path": "guidelines/application_requirements.md",
    "content": "# Guidelines for Application Requirements\n\nAuthors: chasm@google.com, jlewi@google.com, kam.d.kasravi@intel.com\n\n## Objective\n\nThe purpose of this doc is to define requirements and recommendations aimed at graduating applications (e.g. controller and web apps) in Kubeflow to 1.0.\n\nThe main goals are to:\n\n1. Establish criteria for graduating a Kubeflow application to a supported Kubeflow application; i.e. 1.0\n1. Set clear expectations for users regarding Kubeflow applications that are 1.0\n\n## Scope\n\nThis document is intended to cover applications that are deployed in the\nKubernetes cluster as part of Kubeflow and in particular:\n\n1. Custom resources and controllers\n1. Web applications\n\nThis document is not intended to cover SDKs (e.g. fairing) or client side tools (like kfctl).\n\n## Requirements\n\n### Configuration and deployment\n\n| Description | Category | Explanation |\n|-------------|----------|-------------|\n| Kustomize package  | Required  | <ul><li>Kubeflow has standardized on Kustomize for configuring and deploying packages </ul> |\n| Application CR  | Required  | <ul><li>Kubeflow has standardized on using the Kubernetes Application CR to provide consistent metadata and monitoring about applications <li> Application CR should be an owner of all resources so that deleting the application CR uninstalls the application </ul> |\n| ```app.kubernetes.io``` labels on every resource | Required  | <ul><li>Every resource that is part of the application should include the [labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/common-labels/#labels) recommended by Kubernetes, currently: <ul><li>`app.kubernetes.io/name` <li>`app.kubernetes.io/instance` <li>`app.kubernetes.io/version` <li>`app.kubernetes.io/component` <li>`app.kubernetes.io/part-of` <li>`app.kubernetes.io/managed-by`</ul> <li>See example [here](https://github.com/kubeflow/manifests/blob/v0.6.1/tf-training/tf-job-operator/overlays/application/application.yaml#L8-L13) </ul> |\n| Images listed in kustomization.yaml | Required  | <ul><li>All docker images used by the application should be listed in one or more kustomization.yaml files <li>This facilitates mirroring the images to different docker registries </ul> |\n| Upgradeability | Required  | <ul><li>Applications must support upgrading between consecutive major and minor releases </ul> |\n| Separate cluster scoped and namespace scoped resources | Recommended  | <ul><li>To the extent possible cluster scoped resources should be installable separately (e.g. via a separate kustomize package) <li> This allows cluster admins to install only the cluster scoped resources <li> Clear documentation of cluster and namespace scoped behavior </ul> |\n| Kustomize package should be deployable on its own | Recommended  | <ul><li>To the extent possible users should be able to run kustomize build | kubectl apply inside the kustomize package to deploy the application stand alone </ul> |\n\n### Custom Resources\n\n| Description | Category | Explanation |\n|-------------|----------|-------------|\n| Version stability | Required  | <ul><li>No deprecative API changes </ul> |\n| Multi Version Support | Required  | <ul><li>Serves multiple versions of the [CR per K8s docs](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/#specify-multiple-versions) </ul> |\n| Supports status subresource | Required  | <ul><li>Status subresource documented [here](https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/#status-subresource) </ul> |\n| CRD schema validation | Required  | <ul><li>Validation documented [here](https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/#validation) <li>Example: [TFJob](https://github.com/kubeflow/kubeflow/blob/v0.6.1/kubeflow/tf-training/tf-job-operator.libsonnet#L81) </ul> |\n| Training operators follow kubeflow/common conventions | Required  | <ul><li>Conventions defined [here](https://github.com/kubeflow/common/blob/master/job_controller/api/v1/types.go) <li>Examples: [TFJob](https://github.com/kubeflow/kubeflow/blob/v0.6.1/kubeflow/tf-training/tf-job-operator.libsonnet) and [PyTorchJob](https://github.com/kubeflow/kubeflow/blob/v0.6.1/kubeflow/pytorch-job/pytorch-operator.libsonnet) </ul> |\n\n### Logging and monitoring\n\n| Description | Category | Explanation |\n|-------------|----------|-------------|\n| Liveness/Readiness signals | Required  | <ul><li>The application should expose liveness and/or readiness signals as appropriate for the application </ul> |\n| Prometheus metrics | Required  | <ul><li>Applications should export suitable application level metrics (e.g. number of jobs) using prometheus  </ul> |\n| Json logging | Recommended  | <ul><li>Applications should optionally emit structured logs with suitable metadata to facilitate debugging <li>e.g. CR controllers should annotate log messages with the name of the resource involved so it's easy to filter logs to all messages about a resource </ul> |\n\n### Docker Images\n\n| Description | Category | Explanation |\n|-------------|----------|-------------|\n| Vulnerability Scanning | Required  | <ul><li>Docker images must be scanned for vulnerabilities and known vulnerabilities published </ul> |\n| Licensing | Required  | <ul><li>Docker images must provide a list of all OSS licenses used by the image and its transitive dependencies, e.g. you can follow [these instructions](https://github.com/kubeflow/testing/tree/master/py/kubeflow/testing/go-license-tools) to get licenses of dependencies for Golang images </ul> |\n\n### CI/CD\n\n| Description | Category | Explanation |\n|-------------|----------|-------------|\n| E2E tests | Required  | <ul><li>E2E tests should be run on presubmit, postsubmit, and periodically <li> Tests should cover deployment (kustomize packages) <li> As well as the application functionality </ul> |\n| Scalability / load testing | Required  | <ul><li>Applications must have scalability and or load testing demonstrating that the application meets appropriate requirements for the application (e.g. # of concurrent CRs) </ul> |\n| Continuous building of docker images | Recommended  | <ul><li>On post-submit, docker images should be automatically built and pushed  </ul> |\n| Continuous updating of Kustomize manifests | Recommended  | <ul><li>On post-submit, kustomize packages should be automatically updated to point to latest images </ul> |\n\n### Docs\n\n| Description | Category | Explanation |\n|-------------|----------|-------------|\n| API Reference docs | Required  | <ul><li>Applications exposing APIs (e.g. CRs) need reference docs documenting the API </ul> |\n| Application docs | Required  | <ul><li>There must be docs on kubeflow.org explaining what an application is used for and how to use it </ul> |\n\n\n### Ownership/Maintenance\n\n| Description | Category | Explanation |\n|-------------|----------|-------------|\n| Healthy number of committers and commits | Required  | <ul><li> Committers are listed as approvers in owners files <li> Number to be determined by TOC based on size and scope of application </ul> |\n| At least 2 different organizations are committers | Required  | |\n\n### Adoption\n\n| Description | Category | Explanation |\n|-------------|----------|-------------|\n| List of users running the application | Recommended  | <ul><li>Suggest listing adopters willing to be identified publicly in ADOPTERS.md </ul> |\n\n## Reference\n\n* TFJob and PyTorch 1.0 [exit criterion](http://bit.ly/operators-exit-criterion)\n* [CNCF Graduation Criteria](https://github.com/cncf/toc/blob/main/.github/ISSUE_TEMPLATE/template-graduation-application.md)\n* [Core Infrastructure Best Practices](https://github.com/coreinfrastructure/best-practices-badge)\n* [Kubeflow v1.0 Docs and Processes](https://docs.google.com/document/d/1v06QmjIms3z-uoW-waS7S9IzMA6n4CVrXOwQQ9N0do4)\n* [Application CR Issue](https://github.com/kubernetes-sigs/application/issues/6) related to dependencies and health monitoring \n\n"
  },
  {
    "path": "guidelines/auth.md",
    "content": "# Authentication and Authorization Guideline\n\nThis guideline documents the current best practices for authentication and\nauthorization in Kubeflow. Kubeflow Application Developers should use this guide\nto effectively integrate their applications with Kubeflow. This document answers\nthe following questions:\n* Authentication: How do application know the identity of the user making a\n  request?\n* Authorization: How do applications act on behalf of the user?\n\n\n## Introduction\n\nKubeflow leverages Kubernetes to build its core APIs (CRDs), starting out with a\nfew operators. The multi-tenancy story at this level was straightforward: direct\ninteraction with the API via kubectl or other client, with the K8s API Server\ntaking care of authentication and authorization.\n\nSoon after, Kubeflow introduced web apps to complement those core APIs and offer\na better UX. This pushes the authentication and authorization problem out of the\nKubernetes API Server and into the web apps.\n\n\n## Kubeflow Core (CRDs)\nKubeflow started by introducing CRDs, providing an API on-top of Kubernetes.\nInteraction directly with the K8s API-Server via kubectl and\nauthentication/authorization is a solved issue.\n\n\n### Authentication\n\nWhatever the [Kubernetes API-Server\nsupports](https://kubernetes.io/docs/reference/access-authn-authz/authentication/):\n* ServiceAccount token\n* OIDC token\n* X509 Cert\n* Webhook\n* ...\n\n\n### Authorization\n\nK8s RBAC: Can `IDENTITY` perform `ACTION` on `RESOURCE` in `NAMESPACE`?\n\n\n## Kubeflow Web Apps\n\nKubeflow wants to build on top of the functionality provided by its controllers.\nTo provide a better UX, Kubeflow started building Web Apps to ease the use of\nits controllers. However, the story for authentication and authorization\nchanges:\n* Authentication is performed by a proxy, not the K8s API Server.\n* Authorization is performed by the Web App Backend, not the K8s API Server.\n\nHowever, we still want to make sure that the user has the same identity and the\nsame RBAC permissions are consulted.\n\n![kubeflow request flow](images/kubeflow_request_flow.svg)\n\n\n### Authentication\n\nAuthentication is done at a proxy (e.g., the Istio Gateway, Google IAP) in front\nof the web app and the result is propagated to the web app in a header, in a way\nsimilar to the [authenticating proxy](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#authenticating-proxy)\nmethod. The authenticated entity can be a user (OIDC, Google IAP) or a\nServiceAccount (TokenReview).\n\nAt the moment only userid is added as a header. However, there are other\nidentity elements we need to add as well (groups, extras) just like the\n[authenticating proxy](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#authenticating-proxy)\nmethod. For reference, the\n[UserInfo](https://github.com/kubernetes/kubernetes/blob/7f7378eddfe7a817c47fc75c220a729f4b78b913/pkg/apis/authentication/types.go#L90)\nstruct that Kubernetes uses to hold the user’s identity. \n\n#### Recommendation\n\nEvery web app should accept the following headers for user identity:\n* A username header, configurable via the `KUBEFLOW_USERID_HEADER` setting \n    * Some IdPs (like Google) add a prefix to this header (e.g.,\n      `accounts.google.com:`). If the Web App wants to support stripping that\n      prefix, it should expose a `KUBEFLOW_USERID_PREFIX` setting).\n* A groups header, configurable via the `KUBEFLOW_GROUPS_HEADER` setting. The\n  value is a comma-separated list.\n* A prefix for headers containing extra identity information (e.g., scopes),\n  configurable via the `KUBEFLOW_EXTRAS_HEADER_PREFIX` setting. The prefix is\n  removed, the remainder header name is percent decoded and becomes the key, the\n  header value becomes the value. ([see also](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#authenticating-proxy)).\n\n\n#### Examples\n\n* [Central Dashboard](https://github.com/kubeflow/kubeflow/blob/e0d7b2edd3df2ee4c06d59d2cf59bcaa2326fcfd/components/centraldashboard/app/server.ts#L29-L30)\n* [Jupyter Web App](https://github.com/kubeflow/kubeflow/blob/0c496710150553784f7ebbbd3070cc9c26bfb39c/components/jupyter-web-app/backend/kubeflow_jupyter/common/utils.py#L21-L22)\n* [Profile Controller](https://github.com/kubeflow/kubeflow/blob/960587ac9025b6a4ba7facaabc8aa1769fb01dc8/components/profile-controller/main.go#L33-L34)\n\n\n### Authorization\n\nFor authorization, we want to still consult the K8s RBAC permissions. To do\nthat, there are two ways:\n* [SubjectAccessReview API](https://kubernetes.io/docs/reference/access-authn-authz/authorization/#checking-api-access),\n  allows the Web App to ask the Kubernetes RBAC authorizer if an action is\n  allowed by a specific identity (user, group, etc.). After the check passes,\n  the request is made with the Web App’s credentials.\n    * Minimal addition of permissions to Web Apps (only permissions to perform\n      SubjectAccessReview). \n    * API-Server logs show the web-app as the performer of the API calls.\n      SubjectAccessReview calls and subsequent API calls could be correlated.\n    * Requires 2 requests and doesn’t catch some cases ( RBAC privilege\n      escalation checks, PSPs, Admission Controllers that rely on the user’s\n      identity).\n* [Impersonation](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#user-impersonation)\n  allows the Web App to perform the request to the K8s API Server as if it was\n  made from a specified identity (user, group, etc.). Here, the check is made by\n  the K8s API Server on the impersonated identity.\n    * Requires only 1 request and passes through all authorization checks of\n      K8s, some of which aren’t caught by SubjectAccessReview ( RBAC privilege\n      escalation checks, PSPs, Admission Controllers that rely on the user’s\n      identity).\n    * The issue with impersonation is that it is too powerful and there is no\n      way to scope it down. For example, if the Jupyter Notebooks Web App used\n      impersonation, it would have the full permissions of every user it could\n      impersonate. This presents too much of a surface for Web Apps that would\n      normally need little permissions, like the Jupyter Notebook Web App. For\n      Web Apps that would require elevated permissions anyway (e.g. an admin\n      panel web app), impersonation could be a viable option.\n\n#### Recommendation\n\nUse **SubjectAccessReview** to authorize users, because it doesn't requires\ngiving excessive permissions to the Web App.\n\nFor special cases where the Web App is privileged anyway (e.g., an RBAC\ndashboard that has to create Roles/RoleBindings), **Impersonation** can be used\nif it makes more sense.\n\n#### Examples\n\n* [Jupyter Web App](https://github.com/kubeflow/kubeflow/blob/0c496710150553784f7ebbbd3070cc9c26bfb39c/components/jupyter-web-app/backend/kubeflow_jupyter/common/api.py#L80)\n  uses decorators to transparently perform a SubjectAccessReview on every API\n  access."
  },
  {
    "path": "guidelines/creating_dockerfiles.md",
    "content": "# Guidelines for creating Docker images for Kubeflow applications\n\nAuthors: duselvar@cisco.com, jlewi@google.com, adselvaraj@cisco.com, jtf.github@gmail.com\n\n## Objective\n\nThe purpose of this document is to outline a process for creating docker images maintained by our community for Kubeflow applications.\n\nThe main goals are to: \n\n1. Establish a process around creating images for Kubeflow applications.\n1. Improve security of the images built for running Kubeflow applications.\n\n## Scope\n\nThis document is intended to cover container images of applications that are deployed in the\nKubernetes cluster as part of Kubeflow and in particular:\n\n1. Custom resources and controllers\n1. Web applications\n\nThis document is not intended to cover any image which is not deployed to the Kubernetes cluster.\n\n\n## Process\n\nUsing [Multi-staged builds](https://docs.docker.com/develop/develop-images/multistage-build/) you can separate the build process to a separate build image and copy the binaries generated from the build stage to the actual image.\n\n### Selection of build image\n\nThe recommended build images for each of the programming languages are listed below:\n\n| Programming Language or Framework  | Docker Image |\n| ------------- | ------------- |\n| Golang  | [Golang Docker Image](https://hub.docker.com/_/golang) |\n| Python3  | [Python Docker Image](https://hub.docker.com/_/python) |\n| NodeJS  | [NodeJS Docker Image](https://hub.docker.com/_/node/) |\n\nIf your language or framework is not covered within these above recommendations, it is recommended to use the official images for the respective language or framework.\n\n#### Recommendation for Golang images\n\n- It is recommended to use Golang 1.13+ images while building docker images as it contains critical security fixes for the packages net/http, crypto/dsa and net/textproto.\n\n- While building Golang binaries in the build docker file, it is recommended to build with the below flags to ensure that the binary runs without needing to use `libc` based packages. This facilitates the use of distroless' `static` image as opposed to `base` image.\n```\nRUN CGO_ENABLED=0 GOOS=linux go build -o <output_binary> -a .\n```\n\n### Selection of actual image\n\nKubeflow community recommends the usage of [distroless images](https://github.com/GoogleContainerTools/distroless) for building images for Kubeflow applications.\n\nThis approach reduces the image's size to only what is required to run the application thereby reducing security risks.\n\nThe preference of distroless images to be chosen according to language is given by the table below:\n\n\n| Programming Language or Framework  | Docker Image |\n| ------------- | ------------- |\n| Golang  | [gcr.io/distroless/static-debian10](gcr.io/distroless/static-debian10) |\n| Python3  | [gcr.io/distroless/python3-debian10](gcr.io/distroless/python3-debian10) |\n| NodeJS  | [gcr.io/distroless/nodejs](gcr.io/distroless/nodejs) |\n\n*Note*: Distroless NodeJS is yet to publish a 'debian10' version of the image. We are tracking this change here: https://github.com/GoogleContainerTools/distroless/issues/485\n\n#### Example image for Kubeflow\n\n[tf-operator distroless image](https://github.com/kubeflow/tf-operator/blob/master/build/images/tf_operator/Dockerfile) for Golang based binary serves as an example image for Kubeflow.\n\n## Best Practices\n\nIt is recommended to use a CVE scanning tool to report vulnerabilities in the image being replaced and compare it with the report of the newer image. This is to ensure that the CVE count reduces with each update to an image.\n"
  },
  {
    "path": "how-to/README.md",
    "content": "## Kubeflow How-Tos\n\nThis directory hosts instructions for operating common community processes.\n"
  },
  {
    "path": "how-to/community_meetings.md",
    "content": "# Hosting Kubeflow Community Meetings\n\nAuthor(s): Edd Wilder-James [@ewilderj](http://github.com/ewilderj)\n\n## Prerequisites\n\nYou should be a member of the [community-meeting-hosts@](https://groups.google.com/a/kubeflow.org/forum/#!forum/community-meeting-hosts) group. \n\n## Setting up the meeting\n\nEnsure that somebody with Zoom recording permissions will join. Currently,\nthis is:\n\n* Abhishek Gupta\n* Chris Cho\n* Edd Wilder-James\n* Jeremy Lewi\n* Michelle Casbon\n* Richard Liu\n* Thea Lamkin\n\nNo less than 24 hours before the meeting, circulate the agenda and notes Google\ndoc:\n\n1. This Google doc is hosted at\n   [bit.ly/kf-meeting-notes](http://bit.ly/kf-meeting-notes) and is editable by\n   members of\n   [community-meeting-hosts@](https://groups.google.com/a/kubeflow.org/forum/#!forum/community-meeting-hosts).\n   It is viewable by the public, and anybody subscribed to\n   [kubeflow-discuss@](https://groups.google.com/forum/#!forum/kubeflow-discuss)\n   may make comments and suggest changes.\n   \n2. Copy the template agenda from the bottom, add your name as host, then\n   incorporate agenda items. Agenda items are queued up on the first page of the\n   doc. Be sure to bring up action items from the previous meeting into their\n   own section at the top.\n   \n3. Circulate the agenda document to the mailing list, along with a reminder of\n   the Zoom call in details. You can get these from previous messages, as they\n   remain constant.\n\n## Running the meeting\n\nArrive to the meeting at least 5 minutes before its assigned time. The meeting\nshould be configured that new arrivals are muted by default, to reduce noise.\nUsually, you'll need to tell people at the start time that you'll wait a couple\nof minutes to allow everybody to arrive.\n\nPost a link to the agenda & notes into the relevant Slack channel: for the main\ncommunity meeting, this is *#community*.\n\nEnsure that the person responsible for Zoom recording has started the recording.\n\nKick off by welcoming people, reminding them of the Slack channel for feedback,\nand the link for agenda/notes. Hand off to the team member driving the agenda,\nif it is not you.\n\nRemind people of some good practices:\n\n* The meeting is public and will be recorded, let people know this.\n\n* It's hard to know who's talking, so attendees should introduce themselves\n  before making a comment.\n  \n* If you can't get into the conversation and want to contribute, post to the\n  Slack channel and tag the meeting moderator to get attention.\n\n* Folks should add relevant links and info into the meeting doc, rather than the\n  Zoom channel, as the Zoom chat will go away at the end of the meeting.\n\n## Taking notes\n\nIf you are not going to be the note-taker, ensure there is a designated\nvolunteer to take notes before discussion starts. They should have edit\npermissions for the notes doc.\n\nEnsure that action items that people have agreed to are clearly noted.\n\n## After the meeting\n\n* Edit the notes for clarity, applying formatting to separate discussion items.\n\n* Ensure that action items are tagged to the community members responsible: the\n  easiest way to do this is highlight and add a comment tagging their email\n  address with a `+` sign.\n  \n* For Zoom owners: Find the recording in the Admin section of Zoom. Under\n  _Account Management_, find the _Recording Management_ section and identify the\n  file corresponding to the topic _Kubeflow Community Meeting_ for the correct\n  date. Download the _Shared screen with speaker view_ file (or audio file if there\n  are no demos) and upload it into the `Recordings` folder of the [team\n  drive](https://drive.google.com/drive/u/2/folders/150C-v6Hb8gtPZMucyd_65ozyCiY50zFD).\n  Then copy the share link for this file and add the link into the notes doc. Process:\n  \n  - Right click, `Share...`. \n  - Click `WHO HAS ACCESS`. \n  - Click the down arrow near `Link sharing on`\n  - Click `Allow external access` (this might take a few seconds to activate)\n  - Click `COPY` to get the link\n  - Click `DONE`\n\n  Remove the file from Zoom after it has been uploaded to the team drive.\n   \n* Ask the Zoom owner to add the link if they haven't done already.\n  \n* Circulate the notes link to the mailing list, and include some highlights in\n  the message so people can figure out if they want to read the notes or listen\n  to the recording.\n  \n## That's it!\n\nIf you have suggestions or improvements, please submit a PR to this\ndocumentation or discuss it on the group mailing list.\n"
  },
  {
    "path": "how-to/github_admin.md",
    "content": "# GitHub Admin\n\nThis doc provides information about how we administer the Kubeflow GitHub Org.\n\n## GitHub Permissions\n\nIn administering GitHub we follow the principles of\n\n1. Least Privelege\n1. Use GitOps for scalability and transparency\n\n### Least Privelege\n\nWhen requesting permission please\n\n1. Use the lease privileged role necessary\n\n   * Please refer to the [GitHub Docs](https://help.github.com/en/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization) to understand the different levels of permission that GitHub offers.\n\n1. Request access to only the resources you need access to\n\n\n### GitOps\n\nWe use [Peribolos](https://github.com/kubernetes/test-infra/tree/master/prow/cmd/peribolos) from Kubernetes\nto manage GitHub with GitOps.\n\n\n1. The GitHub config is stored in [org.yaml](https://github.com/kubeflow/internal-acls/blob/master/github-orgs/kubeflow/org.yaml)\n1. To request access please open a PR modifying [org.yaml](https://github.com/kubeflow/internal-acls/blob/master/github-orgs/kubeflow/org.yaml)\n\n   * For more info please refer to the [README](https://github.com/kubeflow/internal-acls/tree/master/github-orgs)\n   * Access to repos is granted through GitHub teams\n     * Teams are granted permissions on repositories \n     * Individuals should be added to one or more teams to gain privileges for a particular repository\n"
  },
  {
    "path": "how-to/join_kubeflow_ecosystem.md",
    "content": "# Application for a Project to Join the Kubeflow Ecosystem\n\nPlease see the [proposals/new-project-join-process.md](Documentation) to\nbetter understand the full process for submitting a new project.\nIn short, copy this Application Template and populate the document.\n\n\n## Changes to the application process\nChanges to the application process charter may be proposed through a Pull Request\non this document by a Kubeflow community member.\n\nAmendments are accepted following the Kubeflow Steering Committee's [Normal Decision Process](../KUBEFLOW-STEERING-COMMITTEE.md#normal-decision-process).\n\nProposals and amendments to the application process are available for at \nleast a period of one week for comments and questions before a vote will occur.\n\n## CNCF Short Checklist\n\n- [ ] All project metadata and resources are vendor-neutral\n- [ ] Governance structure\n- [ ] Contributing guides\n- [ ] Public list of adopters\n\n\n## Background information\n\n1. Submitter Name\n    -\n\n1. Submitter’s relationship to project / title\n    -\n\n1. Project Name\n    -\n\n1. Why is this project is valuable to the Kubeflow Community?\n    -\n\n1. Why is it beneficial for this project to be a part of the Kubeflow Community?\n    - \n\n1. List of existing (and potential) integrations with Kubeflow Core components\n    -\n\n1. Short Description / Functionality\n    -\n\n1. Adoption\n    - \n\n1. License Agreement\n    - \n\n1. Part of an Open Source Foundation? (e.g., Apache, Liniux, CNCF, etc.)\n    - \n\n1. Vendor Neutrality\n    - \n\n1. Trademark transition\n    - \n\n1. CI/CD Infra Requirements\n    - \n\n1. Governance Structure \n    -\n\n1. Website\n    -\n\n1. GitHub repository\n    -\n\n1. 1st Release date\n    -\n\n1. Project Meeting Times\n    -\n\n1. Meeting Notes\n    -\n\n1. Installation Documentation\n    -\n\n1. Project Documentation\n    -\n\n1. Security Profile (CVE scanning, Pod Security Standards, Network Policies)\n    -\n\n1. Ownership / Legal Profile (license type, any potential issues for CNCF)\n    -\n\n1. Authorization, Isolation mechanisms\n    -\n\n1. Project Roadmap\n    -\n\n1. Other Information\n    -\n\n## Metrics\n\n- Number of Maintainers and their Affiliations\n- Number of Releases in last 12 months\n- Number of Contributors\n- Number of Users\n- Number of Forks\n- Number of Stars\n- Number of package/project installations/downloads\n\n## Kubeflow Checklist\n\n1.  Overlap with existing Kubeflow projects\n    - [ ] Yes (If so please list them)\n    - [ ] No\n\n1. Manifest Integration\n    - [ ] Yes\n    - [ ] No\n    - [ ] Planned\n\n1. Commitment to Kubeflow Conformance Program\n    - [ ] Yes\n    - [ ] No\n    - [ ] Uncertain\n\n1. Installation\n    - [ ] Standalone/Self-contained Component\n    - [ ] Part of Manifests\n    - [ ] Part of Distributions\n\n1. Installation Documentation (Current Quality)\n    - [ ] Good\n    - [ ] Fair\n    - [ ] Part of Kubeflow\n\n1. CI/CD \n    - [ ] Yes\n    - [ ] No\n\n1. Release Process\n    - [ ] Automated\n    - [ ] Semi-automated\n    - [ ] Not Automated\n\n1. Kubeflow Website Documentation\n    - [ ] Yes\n    - [ ] No\n\n1. Blog/Social Media \n    - [ ] Yes\n    - [ ] No\n\n"
  },
  {
    "path": "how-to/kubeflow_assets.md",
    "content": "# Kubeflow Assets\n\nThis doc is intended to provide an overview of the different assets \nwhich are used by the Kubeflow community and identify the respective owners.\n\n## GitHub Org: kubeflow\n\nhttps://github.com/kubeflow\n\nThe Kubeflow GitHub org is administered declaratively.\n\nAdmins can be found in [org.yaml](https://github.com/kubeflow/internal-acls/blob/e4303ff3c7299bde05b4a9c7519e8592c5137755/github-orgs/kubeflow/org.yaml#L7)\n\nMore info about how the GitHub org is administered in [GitHub Admin](https://github.com/kubeflow/community/blob/master/how-to/github_admin.md)\n\n\n### GitHub Robots\n\nhttps://github.com/kubeflow-bot\n\n* Password is stored in GCP Secret Manager project `kubeflow-admin`\n* You will also need a recovery token which are also stored in secret manager\n\n  * These are onetime use so remove it when you use it\n  * When you login you need to select use recovery token.\n\n## kubeflow.org GSuite Domain\n\nAdmins\n\n* chrisheecho@kubeflow.org\n* ewj@kubeflow.org\n* jlewi@kubeflow.org\n* sarahmaddox@kubeflow.org\n* thea@kubeflow.org\n\n## Kubeflow GCP org\n\nThis should be tied to the gsuite domain.\n\nAdmins\n\n* jlewi@google.com\n* ricliu@google.com\n\n## DockerHub:\n\nhttps://hub.docker.com/u/kubeflow\n\nowners (docker ids):\n\n* andreyvelichkevich@\n* carmark@\n* gaocege@\n* jlewigoogle@\n* k82cn@\n* seedjeffwan@\n* terrytangyuan@\n\n### DockerHub Robot Accounts\n\nuser: kubeflowrobot\npassword:\n \n * Secret dockerhub-kubeflowrobot in GCP Secret Manager In Project kubeflow-admin\n\n## Medium\n\nhttps://medium.com/kubeflow\n\nEditors\n\n* @chrisheecho_78982\n* @ankitbahuguna\n* @jlewi\n* @edd\n* @thealamkin\n\nTODO(jlewi): Are there owners/admins with higher privileges then editors?\n\nFor more info see: https://github.com/kubeflow/community/issues/316\n\n## Netlify\n\nWe have the following netlify sites\n\n* https://app.netlify.com/sites/competent-brattain-de2d6d/overview\n  * This should be our main site\n  * Prior to 1.0 we were creating new sites for every release see https://github.com/kubeflow/website/issues/1581\n  * Refer to [releasing.md](https://github.com/kubeflow/kubeflow/blob/master/docs_dev/releasing.md#version-the-website) for\n    more instructions\n\n\nAccess is granted through the Netlify kubeflow-team; current owners are\n\n* jeremy@lewi.us\n* ricliu@google.com\n* saramaddoxmail@gmail.com\n\n## Twitter\n\nhttps://twitter.com/kubeflow\n\nRoot account:\n\nusername: kubeflow\npassword: \n\n * This is stored in Google Secret Manager inside project kubeflow-admins\n\nThe following twitter accounts are linked as teammebers\n\n* @animeshsingh \n* @aronchick\n* @edd\n* @jeremylewi\n* @taylamkin\n\n## Mailing List\n\nhttps://groups.google.com/forum/#!members/kubeflow-discuss\n\nOwners:\n\n* abhishek@google.com\n* ewj@google.com\n* jlewi@google.com\n* thealamkin@google.com\n\n## Slack\n\nkubeflow.slack.com\n\n\nWorkspace Owners:\n\n* abhishek@google.com\n* aronchick@gmail.com\n* sarahmaddox@gmail.com\n* thealamkin@google.com\n* vishnuk@google.com\n\n\n## Zoom\n\nOwner:\n\n* ewj@google.com\n\nAdmins \n\n* jlewi@google.com\n* thealamkin@google.com\n\n## DNS Domains\n\nThe following domains are currently owned and registered through Google\n\n* kubeflow.ai\n* kubeflow.cloud\n* kubeflow.dev\n* kubeflow.org\n* kubeflow.io\n* kubeflow.com\n\nThe nameservers for these domains are mapped to Google Cloud DNS in project\nkubeflow-dns.\n"
  },
  {
    "path": "how-to/sharing_docs.md",
    "content": "# Sharing Docs with the Community\n\n## Prerequisites\n\nYou should be a member of the [kubeflow-discuss](https://groups.google.com/forum/#!forum/kubeflow-discuss) group in order to view docs in the shared Google Drive.\n\n## Moving Google Docs into the shared Google Drive\n\n1. Assign ownership of the Google doc to drive-content-managers@kubeflow.org ([instruction](https://support.google.com/drive/answer/2494892)).\n1. Open a GitHub issue to transfer the doc.\n1. Assign the issue to someone in the [content manager list](#shared-google-drive-content-managers).\n1. Content manager will then move the doc into the drive.\n\n## Shared Google Drive Content Managers:\n\n- [@jlewi](http://github.com/jlewi)\n- [@abhi-g](http://github.com/abhi-g)\n- [@chensun](http://github.com/chensun)\n- [@jessiezcc](http://github.com/jessiezcc)\n- [@kweinmeister](http://github.com/kweinmeister)\n"
  },
  {
    "path": "issue-labels.md",
    "content": "# Issue Labels\n\nGitHub Issues are tagged with a standard set of labels across all kubeflow repositories, as defined here. These are used as part of the automated PR merge process, as well as tracking project milestones and releases.\n\n## List of labels\n\n| Category    | Label\n| :--------   | :----\n| *none*      | do-not-merge\n|             | duplicate\n|             | high-impact\n|             | good first issue\n|             | testing\n|             | wont-fix\n| addition    | feature\n| area        | api\n|             | build-release\n|             | docs\n|             | example\n|             | front-end\n|             | logging\n|             | lifecycle\n|             | operator\n| community   | discussion\n|             | question\n| improvement | enhancement\n|             | optimization\n| os          | centos\n|             | macos\n|             | ubuntu\n|             | windows\n| platform    | aws\n|             | azure\n|             | gcp\n|             | minikube\n|             | other\n| priorities  | p0\n|             | p1\n|             | p2\n| problems    | bug\n|             | refactor\n|             | security\n| status      | icebox\n|             | backlog\n|             | in-progress\n|             | done\n|             | lgtm\n|             | approved\n\n\n"
  },
  {
    "path": "ksc/README.md",
    "content": "# Kubeflow Steering Committee (KSC)\n\nThis folder contains documents from the [Kubeflow Steering Committee](../KUBEFLOW-STEERING-COMMITTEE.md), including:\n* [Decision log](decision-log.md) documents decisions by the KSC.\n\n## Meeting Notes and Recordings\n\nMeeting notes can be found in [this Google Doc](https://docs.google.com/document/d/1IzmwOpEszYTfkGkMITBgLm1Hid6LgOwla0HgZXJd7UQ/edit?usp=sharing) with links to recordings.\n"
  },
  {
    "path": "ksc/decision-log.md",
    "content": "# KSC Decision Log\n\nThis file documents decisions by the Kubeflow Steering Committee.\n\nTemplate for decisions:\n\n```\n### Subject\n\n#### Date\nmm/dd/yyyy\n\n#### Context\nTBA\n\n#### Decision\nTBA\n\n#### Rationale\nTBA\n\n#### Dissenting Opinions\nTBA\n\n#### Approvers\n* Yuan Tang\n* James Wu\n* Josh Bottum\n* Andrey Velichkevich\n* Johnu George\n```\n\n## Decisions\n\n### Switch from Google CLA to DCO\n\n#### Date\n02/08/2024\n\n#### Context\nNow that the Kubeflow is part of CNCF, we may consider switching to [DCO](https://developercertificate.org/) from Google CLA.\n\n#### Decision\nWe will move from the current Google Individual and Corporate CLAs to DCO and add [DCO App](https://github.com/apps/dco/) in every repository.\n\n#### Rationale\n* CNCF provides support for implementing both the DCO and CLA. Choice of one over the other is left to each CNCF project. Neither is currently viewed as providing stronger legal protection than the other.\n* The Linux kernel as well as most CNCF projects use the DCO. The DCO is viewed as a more developer-friendly alternative to the CLA.\n\n#### Dissenting Opinions\nNone.\n\n#### Approvers\n* Yuan Tang\n* James Wu\n* Josh Bottum\n* Andrey Velichkevich\n* Johnu George\n\n### Transition to CNCF Slack\n\n#### Date\n02/01/2024\n\n#### Context\nWe are currently using Kubeflow Slack workspace but we should consider switching to the existing CNCF Slack.\n\n#### Decision\nWe will transition to CNCF Slack. During the transition, we will keep the existing Kubeflow Slack workspace as is and gradually turn it down based on a schedule (details TBD).\n\n#### Rationale\n* Kubeflow Slack workspace is under a free plan and users can only see messages within 90 days.\n* Messages on CNCF Slack workspace are persisted and visible to everyone.\n* It's easier to collaborate with other projects in the CNCF ecosystem.\n\n#### Dissenting Opinions\nNone.\n\n#### Approvers\n* Yuan Tang\n* James Wu\n* Josh Bottum\n* Andrey Velichkevich\n* Johnu George\n"
  },
  {
    "path": "labels-owners.yaml",
    "content": "\n# This file provides information about labels and owners behind them\n#\n# Please keep this file alphabetized by label name and owner name\nlabels:\n  area/airgapped:\n    owners:\n      - krishnadurai\n      - swiftdiaries\n      - yanniszark\n  area/applications:\n    owners:\n      - kkasravi\n  area/auth:\n    owners:\n      - yanniszark\n  area/centraldashboard:\n    owners:\n      - avdaredevil\n      - prodonjs\n  area/docs:\n    owners:\n      - jlewi\n      - joeliedtke\n  area/example:\n    owners:\n      - dansanche\n      - jinchihe\n      - lluunn\n      - texasmichelle\n  area/gcp:\n    owners:\n      - gabrielwen\n      - jlewi\n      - kunmingg\n      - lluunn\n      - richardsliu\n      - zhenghuiwang\n  area/inference:\n    owners:\n      - animeshsingh\n      - cliveseldon\n      - ellis-bigelow\n      - rakelkar\n      - yuzisun\n  area/istio:\n    owners:\n      - krishnadurai\n      - kunmingg\n      - lluunn\n      - yanniszark\n  area/jupyter:\n    owners:\n      - kimwnasptd\n      - vkoukis\n  area/katib:\n    owners:\n      - andreyvelich\n      - gaocegege\n      - hougangliu\n      - johnugeorge\n  area/kubebench:\n    owners:\n      - andreyvelich\n      - swiftdiaries\n      - xyhuang\n  area/kustomize:\n    owners:\n      - jinchihe\n      - kkasravi\n      - swiftdiaries\n      - yanniszark\n  area/logging:\n    owners:\n      - jlewi\n      - kunmingg\n  area/multiuser:\n    owners:\n      - yanniszark\n  area/mxnet:\n    owners:\n      - gaocegege\n      - suleisl2000\n      - wackxu\n  area/openmpi:\n    owners:\n      - alsrgv\n      - jiezhang\n      - jlewi\n  area/openvino:\n    owners:\n      - kkasravi\n  area/pipelines:\n    owners:\n      - ark-kun\n      - jessiezcc\n      - ironPan\n      - neuromage\n      - paveldournov\n  area/sdk:\n    owners:\n      - animeshsingh\n      - jlewi\n      - jinchihe\n  area/enterprise_readiness:\n    owners:\n      - jbottum\n      - yanniszark\n  area/seldon:\n    owners:\n      - cliveseldon\n  area/testing:\n    owners:\n      - gabrielwen\n      - jlewi\n      - kunmingg\n      - lluunn\n      - richardsliu\n      - zhenghuiwang\n  area/tfjob:\n    owners:\n      - gaocegege\n      - johnugeorge\n      - richardsliu\n  area/training:\n    owners:\n      - johnugeorge\n      - richardsliu\n  platform/arm:\n    owners:\n      - animeshsingh\n      - mrXinWang\n  platform/aws:\n    owners:\n      - PatrickXYS\n  platform/azure:\n    owners:\n      - aronchick\n      - rakelkar\n  platform/gcp:\n    owners:\n      - gabrielwen\n      - jlewi\n      - kunmingg\n      - lluunn\n      - richardsliu\n      - zhenghuiwang\n  platform/ibmcloud:\n    owners:\n      - animeshsingh\n      - tomcli  \n  platform/microk8s:\n    owners:\n      - carmine\n  platform/minikf:\n    owners:\n      - cspavlou\n      - elikatsis\n      - jbottum\n      - vkoukis\n      - yanniszark\n  platform/minikube:\n    owners:\n      - lluunn\n  platform/onprem:\n    owners:\n      - elviraux\n      - jbottum\n      - krishnadurai\n      - swiftdiaries\n      - vkoukis\n      - yanniszark\n  platform/openshift:\n    owners:\n      - animeshsingh\n      - pdmack\n  platform/power:\n    owners:\n      - animeshsingh\n      - jinchihe\n"
  },
  {
    "path": "member_organizations.yaml",
    "content": "# This file provides information about companies/organizations\n# that would like to be acknowledged as contributing/participating in\n# Kubeflow.\n#\n# Required fields:\n#   name - The name of the company or organization.\n#   contacts - A list of email addresses for the primary contacts for\n#     the organization.\n#\n# Optional fields\n#    url - Url for the organization\n#    hiringForKubeflow - true/false whether the organization is hiring for Kubeflow related\n#      positions\n#    hiringUrl - A URL for potential job applicants.\n#\n# We do not infer organizations based on affiliation in members.yaml because\n# some members may be contributing as individuals and not part of a deeper involvement\n# with Kubeflow for their company/organization.\n#\n# Please keep this file alphabetized by name.\n\n- name: Alibaba Cloud\n  contacts:\n    - zk131586@alibaba-inc.com\n    - cheyang.cy@alibaba-inc.com\n    - jianhe688@gmail.com\n  url: https://www.alibabacloud.com\n\n- name: AInnovation\n  contacts:\n    - linyiming@ainnovation.com\n  url: https://www.ainnovation.com/en\n\n- name: Ant Group\n  contacts:\n    - kubo.cph@alibaba-inc.com\n    - terrytangyuan@gmail.com\n    - wei.yan@antfin.com\n  url: https://www.antfin.com\n\n- name: Argo Project\n  contacts:\n    - mukulika_kapas@intuit.com\n    - edward_lee@intuit.com\n  url: https://argoproj.github.io\n\n- name: Arrikto\n  contacts:\n    - vkoukis@arrikto.com\n    - cven@arrikto.com\n    - iliastsi@arrikto.com\n    - dimara@arrikto.com\n    - ioannis@arrikto.com\n    - kimwnasptd@arrikto.com\n  url: https://www.arrikto.com\n\n- name: Amazon Web Services (AWS)\n  contacts:\n    - shjiaxin@amazon.com\n    - etarn@amazon.com\n  url: https://aws.amazon.com/\n\n- name: Bloomberg\n  contacts:\n    - dsun20@bloomberg.net\n    - klaban1@bloomeberg.net\n    - ifilonenko@bloomberg.net\n  url: http://www.bloomberg.com\n\n- name: Bytedance\n  contacts:\n    - dengdeyuan.dengdy@bytedance.com\n    - gaoce.gaoc@bytedance.com\n  url: https://www.bytedance.com/en/\n  hiringForKubeflow: true\n  hiringUrl: https://job.bytedance.com/en/\n\n- name: Canonical\n  contacts:\n    - rui.vasconcelos@canonical.com\n    - kenneth.koski@canonical.com\n    - tim.van.steenburgh@canonical.com\n    - eduardo.aguilar.pelaez@canonical.com\n  url: https://www.ubuntu.com/kubeflow\n\n- name: Cisco\n  contacts:\n    - dedutta@cisco.com\n    - xinyuahu@cisco.com\n  url: https://www.cisco.com\n  hiringForKubeflow: true\n  hiringUrl: https://jobs.cisco.com/jobs\n\n- name: D2iQ\n  contacts:\n    - akirillov@d2iq.com\n    - gilbert@d2iq.com\n  url: https://www.d2iq.com/\n\n- name: Datawire\n  contacts:\n    - richard@datawire.io\n    - flynn@datawire.io\n    - kelsey@datawire.io\n  url: https://www.datawire.io\n  hiringForKubeflow: false\n  hiringUrl: https://www.datawire.io/careers\n\n- name: Dell\n  contacts:\n    - bhavesh_a_patel@dell.com\n  url: http://www.dell.com\n  hiringForKubeflow: false\n  hiringUrl: http://www.dell.com/learn/us/en/uscorp1/careers?~ck=mn\n\n- name: Github\n  contacts:\n    - hamelsmu@github.com\n    - rand@github.com\n  url: http://gh-demo.kubeflow.org/\n  hiringForKubeflow: true\n  hiringUrl: https://github.com/about/careers\n\n- name: Gojek\n  contacts:\n    - arief.rahmansyah@gojek.com\n    - grace.christina@gojek.com\n    - pradithya.pura@gojek.com\n    - willem@gojek.com\n    - zhiling.c@gojek.com\n  url: https://www.gojek.io/\n  hiringForKubeflow: true\n  hiringUrl: https://www.gojek.io/careers/\n\n- name: Google\n  contacts:\n    - aronchick@google.com\n    - ewj@google.com\n    - jlewi@google.com\n    - chasm@google.com\n  url: https://cloud.google.com/products/machine-learning/\n  hiringForKubeflow: true\n  hiringUrl: https://goo.gl/Q85pzF\n\n- name: Heptio\n  contacts:\n    - kevin@heptio.com\n    - knova@heptio.com\n    - joe@heptio.com\n  url: https://www.heptio.com\n  hiringForKubeflow: false\n  hiringUrl: https://heptio.com/about/careers/\n\n- name: Huawei\n  contacts:\n    - huangzhipeng@huawei.com\n    - baixiaolong1@huawei.com\n    - linjian4@huawei.com\n  url: https://www.huawei.com\n\n- name: IBM\n  contacts:\n    - liugya@cn.ibm.com\n    - liuhoug@cn.ibm.com\n    - hejinchi@cn.ibm.com\n    - singhan@us.ibm.com\n    - tommy.chaoping.li@ibm.com\n    - wzhuang@us.ibm.com\n  url: https://www.ibm.com\n\n- name: Iguazio\n  contacts:\n    - yaronh@iguazio.com\n    - adih@iguazio.com\n  url: https://www.iguazio.com\n\n- name: Intel\n  contacts:\n    - michal.jastrzebski@intel.com\n    - kam.d.kasravi@intel.com\n    - balaji.subramaniam@intel.com\n    - abolfazl.shahbazi@intel.com\n  url: https://www.intel.com\n  \n- name: Intuit\n  contacts:\n    - deepak_kumar@intuit.com\n    - deepen_mehta@intuit.com\n    - nagaraj_janardhana@intuit.com\n  url: https://www.intuit.com\n\n- name: LinkedIn\n  contacts:\n    - ashahab@linkedin.com\n    - svalleru@linkedin.com\n    - tenmu@linkedin.com\n  url: https://www.linkedin.com\n\n- name: Microsoft\n  contacts:\n    - wibuch@microsoft.com\n    - lachlan.evenson@microsoft.com\n  url: https://www.microsoft.com\n  hiringForKubeflow: false\n\n- name: Momenta\n  contacts:\n    - xuelei@momenta.ai\n  url: https://momenta.ai\n  hiringForKubeflow: true\n  hiringUrl: https://www.momenta.ai/en/careers\n\n- name: One Convergence\n  contacts:\n    - songole@oneconvergence.com\n    - ahmed.khan@oneconvergence.com\n  url: https://www.oneconvergence.com\n  hiringForKubeflow: false\n\n- name: Pachyderm\n  contacts:\n    - datadan@pachyderm.io\n    - joey@pachyderm.io\n    - jdoliner@pachyderm.io\n  url: http://pachyderm.io/\n\n- name: Project Jupyter\n  contacts:\n    - cawillin@calpoly.edu\n    - yuvipanda@gmail.com\n  url: https://jupyter.org\n  hiringForKubeflow: false\n\n- name: Red Hat\n  contacts:\n    - rmartine@redhat.com\n    - hukhan@redhat.com\n    - rareddy@redhat.com\n    - yutang@redhat.com\n    - mmortari@redhat.com\n  url: https://www.redhat.com\n\n- name: Seldon\n  contacts:\n    - ah@seldon.io\n    - cc@seldon.io\n    - gs@seldon.io\n    - rd@seldon.io\n  url: https://www.seldon.io\n  hiringForKubeflow: true\n  hiringUrl: https://www.seldon.io/careers/\n\n- name: Shopify\n  contacts:\n    - peng.yu@shopify.com\n  url: https://www.shopify.com\n  hiringForKubeflow: true\n  hiringUrl: https://www.shopify.ca/careers\n\n- name: Tusimple\n  contacts:\n    - lei.su@tusimple.com\n    - jiangming.jin@tusimple.com\n  url: https://www.tusimple.com\n\n- name: Uber\n  contacts:\n    - asergeev@uber.com\n    - jiez@uber.com\n  url: https://eng.uber.com/michelangelo/\n  hiringForKubeflow: false\n  hiringUrl: https://www.uber.com/careers/\n\n- name: Unisound\n  contacts:\n    - xieyuandong@unisound.com\n    - liuqingsong@unisound.com\n  url: https://www.unisound.com/\n  hiringForKubeflow: true\n  hiringUrl: https://www.unisound.com/join-us.html\n\n- name: Weaveworks\n  contacts:\n    - alexis@weave.works\n    - tamao@weave.works\n    - ilya@weave.works\n  url: https://www.weave.works/blog/kubeflow-and-weave-cloud\n  hiringForKubeflow: true\n  hiringUrl: https://www.weave.works/company/hiring/\n"
  },
  {
    "path": "proposal-workflow.md",
    "content": "## Purpose\n\nThe purpose of this document is to describe the expected workflow for receiving\nand adopting new proposals for the Kubeflow community.\n\n## Goals\n\nThe Kubeflow community's primary goals for a proposal workflow are:\n\n* Provide enough structure to maintain a repeatable workflow from submission to resolution\n* Be lightweight enough for community members to learn easily, and ensure that this new community remains agile\n* Leave a durable record of proposals, community feedback, and final decision on acceptance\n* Inform the community roadmap\n\n## Proposal Scope\n\nProposals are expected for any significant modifications to the Kubeflow\nproject, for example:\n\n* Adding a new subproject, application, dependency or component\n* Any large-scale refactoring of existing subprojects or applications\n* Substantial changes to a public API, UX or UI\n\n## Proposal Document Structure\n\nA proposal is a Markdown (`*.md`) file and will be expected to have the following\n[structure](proposals/proposal-template.md):\n\n* **Motivation:** high level description of the problem or opportunity being addressed\n* **Goals:** specific new functionalities or other changes\n* **Non-Goals:** issues or changes not being addressed by this proposal\n* **UI or API:** New interfaces or changes to existing interfaces. Backward compatibility must be considered\n* **Design:** Description of new software design and any major changes to existing software. Should include figures or diagrams where appropriate\n* **Alternatives Considered:** Description of possible alternative solutions and the reasons they were not chosen.\n\nThis structure is also exemplified by a [template](/proposals/TEMPLATE.md). In order to support the goal of keeping the proposal process lightweight, proposals will have a **recommended 2-page limit.**\n\n## Proposal Workflow\n\nThe workflow for submitting and reviewing a new proposal is as follows:\n\n1. A Markdown file (`*.md`) will be drafted for the proposal.\n1. A pull request (PR) will be filed against [this repository](https://github.com/kubeflow/community) (`kubeflow/community`), which adds this Markdown file to the `proposals` directory.\n1. The proposal will be announced on the [kubeflow-discuss](https://groups.google.com/forum/#!forum/kubeflow-discuss) group, and at one of the weekly meetings, so that community members will be aware of it.\n1. There will be a **two week** period for comment and review.  Review and feedback take place on the PR, in standard PR review fashion.\n1. At the end of the review period, a vote will be held. This vote will also take place on the PR. If a proposal receives 3 binding `+1` votes from Kubeflow project Approvers, and no binding `-1` votes, the proposal will be accepted, and added to the community repo. The PR will be merged, and the label `accepted-proposal` will be added to the PR.\n1. If a proposal is voted down, the PR will be left unmerged, and the label `tabled-proposal` will be added to the PR.\n"
  },
  {
    "path": "proposals/139-mpi-operator/README.md",
    "content": "<!-- START doctoc generated TOC please keep comment here to allow auto update -->\n<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\n\n**Table of Contents** _generated with [DocToc](https://github.com/thlorenz/doctoc)_\n\n- [Motivation](#motivation)\n- [Goals](#goals)\n- [Non-Goals](#non-goals)\n- [API](#api)\n  - [Container Image](#container-image)\n  - [Custom Resource Definition](#custom-resource-definition)\n  - [Resulting Worker](#resulting-worker)\n  - [Resulting Launcher](#resulting-launcher)\n- [Design](#design)\n- [Alternatives Considered](#alternatives-considered)\n\n<!-- END doctoc generated TOC please keep comment here to allow auto update -->\n\n_Status_\n\n- 2018-05-25 - Accepted\n- 2018-06-02 - Implementation Started\n- 2018-07-02 - v1alpha1 is released in 0.2\n\n# KEP-139: MPI Operator\n\n## Motivation\n\nKubeflow currently supports distributed training of TensorFlow models using\n[tf-operator](https://github.com/kubeflow/tf-operator), which relies on\ncentralized parameter servers for coordination between workers. An alternative\nis a decentralized approach in which workers communicate with each other\ndirectly via the MPI\n[`allreduce`](http://mpitutorial.com/tutorials/mpi-reduce-and-allreduce/)\nprimitive, without using parameter servers.\nNVIDIA's [NCCL](https://developer.nvidia.com/nccl) library has implemented most\nof the MPI primitives efficiently on GPUs, and Uber's\n[Horovod](https://github.com/uber/horovod) makes it simple to do multi-gpu and\nmulti-node training using TensorFlow; the TensorFlow team is also working on an\n`allreduce`\n[implementation](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/distribute).\nCompared to parameter servers, this approach arguably is more\n[bandwidth optimal](http://www.cs.fsu.edu/~xyuan/paper/09jpdc.pdf) and\n[scales better](https://eng.uber.com/horovod/). For a detailed survey of\ndistributed deep learning, see\n[this paper](https://arxiv.org/abs/1802.09941).\n\nHowever, right now there is no easy way to launch this type of training jobs on\nKubernetes. By providing a CRD and a custom controller, we can make\nallreduce-style distributed training as simple as training on a single node.\n\n## Goals\n\n- Provide a common Custom Resource Definition (CRD) for defining a single-gpu,\n  multi-gpu, or multi-node training job.\n- Implement a custom controller to manage the CRD, create dependent resources,\n  and reconcile the desired states.\n- The cross-pod communication should be secure, without granting unnecessary\n  permissions to any pod.\n- Though the initial version focuses on TensorFlow/Horovod, the approach can be\n  applied to other frameworks with MPI support, such as\n  [ChainerMN](https://github.com/chainer/chainermn) or\n  [CNTK](https://docs.microsoft.com/en-us/cognitive-toolkit/multiple-gpus-and-machines).\n\n## Non-Goals\n\nIn theory, this operator can be used to run arbitrary MPI jobs (e.g.\ncomputational fluid dynamics), but it's not our focus.\n\n## API\n\n### Container Image\n\nA requirement on user's container image is that it includes an MPI\nimplementation. The initial version is tested on Open MPI 3.0.0, but it can be\nextended to other MPI implementations if there is a need.\n\nIt's also expected that the user would invoke `mpirun`, either through an\n`entrypoint` in the Docker image, or a `command` in the `PodSpec`.\n\nSSH is not needed (or used).\n\n### Custom Resource Definition\n\nThe custom resource can be defined in two ways, in terms of how GPU resources\nare specified.\n\nIn the simple version, user specifies the total number of GPUs and the operator\nfigures out how to allocate them efficiently:\n\n```yaml\napiVersion: kubeflow.org/v1alpha1\nkind: MPIJob\nmetadata:\n  name: tensorflow-benchmarks\nspec:\n  gpus: 128\n  template:\n    spec:\n      containers:\n      - name: tensorflow-benchmarks\n        image: rongou/tensorflow_benchmarks:latest\n```\n\nFor more flexibility, user can choose to specify the resources explicitly (this\nexample also shows the full `mpirun` command line):\n\n```yaml\napiVersion: kubeflow.org/v1alpha1\nkind: MPIJob\nmetadata:\n  name: tensorflow-benchmarks\nspec:\n  replicas: 16\n  template:\n    spec:\n      containers:\n      - name: tensorflow-benchmarks\n        image: rongou/tensorflow_benchmarks:latest\n        command: [\"mpirun\"]\n        args: [\n          \"-bind-to\", \"none\",\n          \"-map-by\", \"slot\"\",\n          \"python\", \"scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py\",\n          \"--model\", \"resnet101\",\n          \"--batch_size\", \"64\",\n          \"--variable_update\", \"horovod\",\n        ]\n        resources:\n          limits:\n            nvidia.com/gpu: 8\n```\n\nEither case would result in a worker `StatefulSet` and a launcher `Job`.\n\n### Resulting Worker\n\n```yaml\napiVersion: apps/v1\nkind: StatefulSet\nmetadata:\n  name: ${job-id}-worker\nspec:\n  podManagementPolicy: Parallel\n  replicas: 15\n  selector:\n    matchLabels:\n      app: ${job-id}-worker\n  serviceName: ${job-id}-worker\n  template:\n    metadata:\n      labels:\n        app: ${job-id}-worker\n    spec:\n      containers:\n      - name: tensorflow-benchmarks\n        image: rongou/tensorflow_benchmarks:latest\n        command: [\"sleep\"]\n        args: [\"365d\"]\n        resources:\n          limits:\n            nvidia.com/gpu: 8\n        volumeMounts:\n        - name: ml-job-config\n          mountPath: /etc/mpi\n      volumes:\n      - name: ml-job-config\n        configMap:\n          name: ${job-id}-config\n          items:\n          - key: kubexec.sh\n            path: kubexec.sh\n            mode: 365\n```\n\n### Resulting Launcher\n\n```yaml\napiVersion: batch/v1\nkind: Job\nmetadata:\n  name: ${job-id}-launcher\nspec:\n  template:\n    spec:\n      initContainers:\n      - name: kubectl-delivery\n        image: rongou/kubectl-delivery:latest\n        volumeMounts:\n        - name: ml-job-kubectl\n          mountPath: /opt/kube\n        env:\n        - name: TARGET_DIR\n          value: /opt/kube\n      containers:\n      - name: tensorflow-benchmarks\n        image: rongou/tensorflow_benchmarks:latest\n        resources:\n          limits:\n            nvidia.com/gpu: 8\n        volumeMounts:\n        - name: ml-job-kubectl\n          mountPath: /opt/kube\n        - name: ml-job-config\n          mountPath: /etc/mpi\n        env:\n        - name: OMPI_MCA_plm_rsh_agent\n          value: /etc/mpi/kubexec.sh\n        - name: OMPI_MCA_orte_default_hostfile\n          value: /etc/mpi/hostfile\n      restartPolicy: OnFailure\n      serviceAccountName: ${job-id}-launcher\n      volumes:\n      - name: ml-job-kubectl\n        emptyDir: {}\n      - name: ml-job-config\n        configMap:\n          name: ${job-id}-config\n          items:\n          - key: kubexec.sh\n            path: kubexec.sh\n            mode: 365\n          - key: hostfile\n            path: hostfile\n            mode: 292\n```\n\nThe launcher pod invokes `mpirun` and communicates with worker pods through MPI.\nThe initial handshake is done through `kubectl exec` instead of SSH. Logs can\nbe accessed through the launcher pod.\n\n## Design\n\nWe create a new custom controller that listens for `MPIJob` resources. When a\nnew `MPIJob` is created, the controller goes through the following _logical_\nsteps:\n\n1.  Create a `ConfigMap` that contains:\n    - A helper shell script that can be used by `mpirun` in place of ssh. It\n      invokes `kubectl exec` for remote execution.\n    - A `hostfile` that lists the pods in the worker `StatefulSet` (in the\n      form of `${job-id}-worker-0`, `${job-id}-worker-1`, ...), and the\n      available slots (GPUs) in each pod.\n1.  Create the RBAC resources (`Role`, `ServiceAccount`, `RoleBinding`) to allow\n    remote execution (`pods/exec`).\n1.  Create the worker `StatefulSet` that contains the desired replicas minus 1,\n    as the launcher also does work. The command is set to sleep indefinitely.\n1.  Wait for the worker pods to be ready.\n1.  Create the launcher Job. It’s run under the `ServiceAccount` created in\n    step 2. Environment variables are set to tell `mpirun` to use our helper\n    script for remote execution, and the `hostfile` to use. The `kubectl` binary\n    is delivered to an `emptyDir` volume through an init container.\n1.  After the launcher job finishes, set the `replicas` to 0 in the worker\n    `StatefulSet`.\n\n![MPI Operator](mpi-operator.png)\n\nIt may be desirable to schedule all the GPUs in a single Kubernetes resource\n(for example, for gang scheduling). We can add an option to the operator so that\nthe worker `StatefulSet` does all the work, thus acquiring all the GPUs needed.\nThe launcher job then becomes very light weight and no longer requires any GPUs.\n\n## Alternatives Considered\n\nOne option is to add `allreduce` support to the existing tf-operator, but the\nmodes of operation are quite different. Combining them may make the user\nexperience unnecessarily complicated. A user would typically pick one approach\nor the other and stick with it, so there is probably not a lot of overlap.\nDepending on user feedback, we may consider merging the two operators down the\nroad.\n\nKubeflow recently added Open MPI support through `ksonnet` template expansion.\nRight now it’s a fairly manual process. It also requires that user's container\nimage have ssh installed, which may present a security risk if not properly\nconfigured. By encapsulating most of the logic in an MPI operator, and\nleveraging Kubernetes' remote execution API directly, the user interface can be\ngreatly simplified, at the same time providing better security.\n"
  },
  {
    "path": "proposals/141-chainer-operator/README.md",
    "content": "<!-- START doctoc generated TOC please keep comment here to allow auto update -->\n<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\n\n**Table of Contents** _generated with [DocToc](https://github.com/thlorenz/doctoc)_\n\n- [Motivation](#motivation)\n- [Goals](#goals)\n- [Non-Goals](#non-goals)\n- [API (CRD and resulting objects)](#api-crd-and-resulting-objects)\n  - [Custom Resource Definition](#custom-resource-definition)\n  - [Container Image](#container-image)\n  - [Resulting Master/Workers](#resulting-masterworkers)\n    - [Master](#master)\n  - [Resulting Workers](#resulting-workers)\n- [Design](#design)\n- [Alternatives Considered](#alternatives-considered)\n\n<!-- END doctoc generated TOC please keep comment here to allow auto update -->\n\n_Status_\n\n- 2018-06-01 - Accepted\n- 2018-06-14 - Implementation Started\n\n# KEP-141: Chainer Operator\n\n## Motivation\n\n[Chainer][Chainer] is a Python-based, standalone open source framework for deep learning models. Chainer provides a flexible, intuitive, and high-performance means of implementing a full range of deep learning models, including state-of-the-art models such as recurrent neural networks and variational autoencoders.\n\n[ChainerMN][ChainerMN] is an additional package for [Chainer][Chainer], which enables multi-node distributed deep learning in a scalable, flexible and easy way. [ChainerMN][ChainerMN] currently supports MPI to initialize process groups or do collective communications(e.g. broadcast, all-reduce, etc.) among processes attending the distributed learning. They are now planning to extend the support to other communication backends (e.g. [gloo][gloo] or other custom ones).\n\nMoreover, [Chainer][Chainer]/[ChainerMN][ChainerMN] achieved to [train ResNet-50 on ImageNet in 15 Minutes](https://arxiv.org/pdf/1711.04325.pdf) in the environment equipped with GPUs and InfiniBand FDR. [The recent research](https://chainer.org/general/2018/05/25/chainermn-v1-3.html) revealed that [ChainerMN][ChainerMN]'s latest feature (Double-buffering and All-Reduce in half-precision float values) enables users to expect _almost_ linear scalability without sacrificing model accuracy even in environments (e.g. AWS) which doesn't equip InfiniBand.\n\nHowever, [Chainer][Chainer]/[ChainerMN][ChainerMN] currently does not have an operator/controller for Kubernetes. This proposal is aimed at defining what the operator should behave, and add it to Kubeflow.\n\n## Goals\n\nA Kubeflow user should be able to run training using [Chainer][Chainer]/[ChainerMN][ChainerMN] as easily as then can using Tensorflow/PyTorch. This proposal is centered around a Kubernetes operator for [Chainer]/[ChainerMN]. A user should be able to run both single node with [Chainer][Chainer] and distributed training jobs with [ChainerMN][ChainerMN].\n\nThis proposal defines the following:\n\n- A Chainer operator\n- A way to deploy the operator with ksonnet\n- A single pod Chainer example\n- A distributed (multiple pods) Chainer example\n\n## Non-Goals\n\nCurrently, for the scope of this proposal, we won't be addressing the method for serving the model.\n\n## API (CRD and resulting objects)\n\n### Custom Resource Definition\n\n```yaml\napiVersion: kubeflow.org/v1alpha1\nkind: ChainerJob\nmetadata:\n  name: example-chainermn-job\nspec:\n  # only \"mpi\" is supported in the first scope\n  # \"gloo\", or custom backend will be supported in the future.\n  backend: mpi\n  # chief would be better like TfJorb?\n  master:\n    # replicas of master can be ommitted but must be 1 in master.\n    replicas: 1\n    # In master, only backoffLimit/activeDeadlineSeconds\n    # are supported for customizing resulting master `Job` behavior\n    backoffLimit: 5\n    activeDeadlineSeconds: 100\n    template:\n      spec:\n        containers:\n          - image: everpeace/chainermn:1.3.0\n            name: master\n            imagePullPolicy: IfNotPresent\n            command: [\"mpiexec\"]\n            args:\n              [\n                \"-n\",\n                \"3\",\n                \"-N\",\n                \"1\",\n                \"python3\",\n                \"/train_mnist.py\",\n                \"-e\",\n                \"2\",\n                \"-b\",\n                \"100\",\n                \"-g\",\n              ]\n        restartPolicy: OnFailure\n  worker:\n    replicas: 3\n    template:\n      spec:\n        containers:\n          - image: everpeace/chainermn:1.3.0\n            name: worker\n        restartPolicy: OnFailure\n```\n\nThis `ChainerJob` resembles the existing `TfJob`/`PyTorchJob`. The main differences are being the omission of `masterPort` options.\n\n`backend` defines the protocol the [ChainerMN][ChainerMN] processes will use to communicate when initializing the worker group. As stated above, [ChainerMN][ChainerMN] currently support MPI only for backend. But they are now planning to extend the support to other communication backend (e.g. [gloo][gloo] or other custom ones).\n\n### Container Image\n\nWhen `backend: mpi`, the same assumption with [mpi-operator](mpi-operator-proposal.md) would be applied. In addition, to bring out the best performance with CUDA and NVIDIA GPU power, CUDA-aware MPI should be built and installed in the container image.\n\n### Resulting Master/Workers\n\nThis resulting master/workers resembles ones in [mpi-operator](mpi-operator-proposal.md) very much. It is because that when `backend: mpi`, the main mission of chainer operator would be a setup of MPI cluster on Kubernetes which is failt-tolerant in some extent.\n\nThe difference is that one of master's initContainers makes sure all the cluster pods are up and can connect to them with `kubectl exec`. It is because that it makes chainer-operator not to needs to watch failure of jobs or StatefulSets. This simplifies implementation of chainer-operator.\n\n#### Master\n\n```yaml\napiVersion: batch/v1\nkind: Job\nmetadata:\n  name: ${job-id}-master\nspec:\n  backoffLimit: 5\n  activeDeadlineSeconds: 100\n  template:\n    spec:\n      initContainers:\n        # download the latest kubectl\n      - name: chainer-operator-kubectl-downloader\n        image: alpine:latest # it can be any container image with sh\n        command: [ \"$(ASSETS_DIR)/download_kubectl.sh\" ]\n        args: [ \"$(TARGET_DIR)\" ]\n        volumeMounts:\n        - name: chainer-operator-kubectl\n          mountPath: /kubeflow/chainer-operator/kube\n        - name: chainer-operator-assets\n        env:\n        - name: TARGET_DIR\n          value: /kubeflow/chainer-operator/kube\n        # ensure all pods are up and can connect.\n      - name: chainer-operator-cluster-waiter\n        image: alpine:latest # it can be any container image with sh\n        volumeMounts:\n        - name: chainer-operator-kubectl\n          mountPath: /kubeflow/chainer-operator/kube\n        - name: chainer-operator-assets\n          mountPath: /kubeflow/chainer-operator/assets\n        env:\n        - name: ASSETS_DIR\n          value: /kubeflow/chainer-operator/assets\n        - name: KUBECTL_DIR\n          value: /kubeflow/chainer-operator/kube\n        command: [ \"$(ASSETS_DIR)/cluster_waiter.sh\" ]\n        args: [ \"$(TARGET_DIR)/hostfile\" ]\n      containers:\n      - name: master\n        image: everpeace/chainermn:1.3.0\n        volumeMounts:\n        - name: chainer-operator-kubectl\n          mountPath: /kubeflow/chainer-operator/kube\n        - name: chainer-operator-assets\n          mountPath: /kubeflow/chainer-operator/assets\n        env:\n        - name: OMPI_MCA_plm_rsh_agent\n          value: /kubeflow/chainer-operator/assets/kubexec.sh\n        - name: OMPI_MCA_orte_default_hostfile\n          value: /kubeflow/chainer-operator/assets/hostfile\n        - name: KUBECTL_DIR\n          value: /kubeflow/chainer-operator/kube\n      restartPolicy: OnFailure\n      serviceAccountName: ${job-id}-launcher\n      volumes:\n      - name: chainer-operator-kubectl\n        emptyDir: {}\n      - name: chainer-operator-assets\n        configMap:\n          name: ${job-id}-chainer-operator-assets\n          items:\n          - key: kubexec.sh\n            path: kubexec.sh\n            mode: 365\n          - key: cluster_waiter.sh\n            path: cluster_waiter.sh\n            mode: 365\n          - key: hostfile\n            path: hostfile\n            mode: 292\n```\n\n### Resulting Workers\n\n```yaml\n# Service resource is omitted.\napiVersion: apps/v1\nkind: StatefulSet\nmetadata:\n  name: ${job-id}-worker\nspec:\n  podManagementPolicy: Parallel\n  replicas: 3\n  selector:\n    matchLabels:\n      app: ${job-id}-worker\n  serviceName: ${job-id}-worker\n  template:\n    metadata:\n      labels:\n        app: ${job-id}-worker\n    spec:\n      initContainers:\n      - name: chainer-operator-kubectl-downloader\n        # .. this is identical with master's one.\n      containers:\n      - name: worker\n        image: everpeace/chainermn:1.3.0\n        command:\n        - sh\n        - -c\n        - while true; do sleep & wait; done\n        env:\n        - name: KUBECTL_DIR\n          value: /kubeflow/chainer-operator/kube\n        volumeMounts:\n        - name: chainer-operator-assets\n          mountPath: /kubeflow/chainer-operator/assets\n        - name: chainer-operator-kubectl\n          mountPath: /kubeflow/chainer-operator/kube\n    serviceAccountName: ${job-id}-launcher\n    volumes:\n    - name: chainer-operator-kubectl\n      emptyDir: {}\n    - name: chainer-operator-assets\n      configMap:\n        name: ${job-id}-chainer-operator-assets\n        items:\n        - key: kubexec.sh\n          path: kubexec.sh\n          mode: 365\n```\n\n## Design\n\nThe sequence is very similar to [mpi-operator](mpi-operator-proposal.md#Design).\n\n- create `ConfigMap` which includes assets (`kubexec.sh`, `hostfile`, `cluster_waiter.sh`).\n- create `ServiceAccount` and `RoleBinding` for the job which only can `kube exec` to cluster pods `{job-id}-master, {job-id}-worker-[0,...,n-1]`.\n  - this means service account of chainer-operator must have permission to create them.\n- create `Job` for `master` and `StatefulSet` for `workers`\n  - the cluster will be fault-tolerant on pod level (which means it can be retried automatically).\n  - chainer-operator needs not to wait for pods in the `StatefulSet` are up and can connect to them because `master` pod has `initContainer` to do it.\n- When `Job` finishes (even when `DeadlineExceeded`), it will scale `StatefulSet` to `0`.\n\n## Alternatives Considered\n\nWe know [mpi-operator](mpi-operator-proposal.md) is already proposed. As a design alternative, chiner-operator could emit `kind: MPIJob` custom resource instead of emitting similar constructs.\n\nPlease be noted that [ChainerMN][ChainerMN] is now planning to expand backend support other than MPI. So, even in the case which chainer-operator just emmits `kind: MPIJob` resources, chainer-operator would be worth to introduce.\n\n[ChainerMN]: https://github.com/chainer/chainermn\n[Chainer]: https://chainer.org\n[gloo]: https://github.com/facebookincubator/gloo\n"
  },
  {
    "path": "proposals/263-pvc-template/README.md",
    "content": "# KEP-263: Kubeflow PVC Template Support\n\n## Table of Contents\n\n- [Summary](#summary)\n- [Motivation](#motivation)\n  - [User Stories](#user-stories-optional)\n  - [Goals](#goals)\n  - [Non-Goals](#non-goals)\n- [Proposal](#proposal)\n  - [Implementation Details](#implementation-details)\n  - [Risks and Mitigations](#risks-and-mitigations)\n- [Testing Plan](#testing-plan)\n\n## Summary\n\nKubeflow cannot automatically provision volume for user Pods as their working space. This doc proposes PVC\ntemplate support which adds an automatic volume provisioning option to user.\n\n## Motivation\n\nMachine learning related workloads usually requires to process large amount of data sets for training purpose, Tensorflow,\nPyTorch are just example of them, and after the workload finishes, the data is usually discarded. Today, to provide such\nscratch space for KubeFlow workloads, user would have the following options:\n\n- Use host disk such as `EmptyDir` or `HostPath`\n- Mount shared file system such as `AWS EFS`\n- Pre-provision block devices such as `AWS EBS`\n- Implement customized volume provisioning logics via `CSI` or `FlexVolume`\n\nFor the above options, each in its own way has cons:\n\n- EmptyDir\n  - Requires careful host disk space pre-provisioning\n  - Scheduling multiple training jobs onto same host might cause tension in host disk space since default\n    kube-scheduler does not take `EmptyDir` size into consideration\n  - If training job gets retried and scheduled onto a different host, it need to fetch all its data again\n- Shared file system\n  - Throughput bottleneck, as jobs might use storage in a bursty fashion during phases such as downloading training data\n  - Shared file system is usually expensive\n- Pre provisioned block device\n  - Requires additional manual / automated work for provisioning devices and synchronize volume naming for replica\n- CSI / FlexVolume\n  - Additional dev work would be required.\n  - [CSI just GA-ed](https://kubernetes.io/blog/2019/01/15/container-storage-interface-ga/), and has not been widely adopped yet\n  - Flex volume is out of tree and is [deprecated](https://github.com/kubernetes/community/blob/master/sig-storage/volume-plugin-faq.md)\n\nWhile block device is the best volume choice as the scratch space of training job, and k8s has native support for auto\nblock device provisioning through [Persistent Volume Claim](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#lifecycle-of-a-volume-and-claim),\nit would be a easy leverage for kubeflow to support dynamic scratch volume provisioning for training jobs.\n\n### User Stories\n\n- As a data scientist / engineer, I want to use arbitrary disk type and size for my different training jobs\n- As a data scientist / engineer, I want the infrastructure of my training jobs get automatically handled and I don't need to worry about provisioning and recycling them\n- As an infrastructure developer, I don't want to have user application to use host disk space with unlimited space as this increases the risk of using up host disk and affect stability\n- As an infrastructure developer, I want to provision infrastructure to my customers only when needed or there will be a waste of money\n\n### Goals\n\n- Automatically provision / de-provision block device as scratch space for user in an efficient and reliable way\n- Design should be generic enough so any distributed training job can take this feature\n- When a pod gets retried (recreated), it should get it's volume back so it has the option to continue with its work\n- User don't have to define volume for every single replica of worker\n- Volume creation throttling\n  - This has to be added for volume provisioning feature to be production ready since most cloud provider throttles\n    API calls per account - if there is a burst of volume creation and cloud provider started to throttle calls, all\n    clusters under the entire cloud account would get affected, and massive back-offs are hard to handle given the\n    error might propagate through upstream services\n\n### Non-Goals\n\n- Volume pooling for reducing Create/Delete calls as we can re-use volume for different jobs\n- Smart throttling such that one training job will not starve other ones due to volume throttling, similar for different\n  worker types within same training job\n- [Volume resizing](https://kubernetes.io/blog/2018/07/12/resizing-persistent-volumes-using-kubernetes/)\n- Volume reclaim policy, i.e. user can choose if they want their PVC gets deleted after deleting the training job\n\n## Proposal\n\n### Implementation Details\n\nI suggest that we start to support dynamic volume provisioning next version release, and change will not be back ported\nto older versions. Currently we need to modify `v1.ReplicaSpec`, and add volume support in job controller, that is going\nto be commonly shared by any type of distributed training job controller.\n\n#### API Change\n\nSimilar to stateful set, we will add a field in `common.ReplicaSpec` to define PVC template:\n\n```go\n// ReplicaSpec is a description of the replica\ntype ReplicaSpec struct {\n\t// ...\n\n\t// VolumeClaimTemplates specifies a list of volume claim templates, which defines volumes specified in template.\n\tVolumeClaimTemplates []corev1.PersistentVolumeClaim `json:\"volumeClaimTemplates,omitempty\"`\n}\n```\n\nList is used here instead of map since according to Kubernetes convention,\n[lists is preferred over maps](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#lists-of-named-subobjects-preferred-over-maps).\nIn this case, if user redefine volume claim templates with same name but different spec, **the actual outcome will be undefined**.\n\nAfter v1, `common.ReplicaSpec` will be able to be shared with all types of controllers.\n\n#### PVC Management\n\nVolumeClaimTemplate will be per worker type, which means that all replicas will have same volume configuration. The exact\nvolume type will be up to the user through storage class, not our responsibility.\n\nTo request a volume defined by VolumeClaimTemplates, one need to specify the volume in `ReplicaSpec.Template.Spec.Containers[].VolumeMounts`,\nand provide the template in `ReplicaSpec.VolumeClaimTemplates` with **the same volume name**.\n\n**NOTE:** Volume defined in `ReplicaSpec.Template.Spec.Volumes` will override volume with same name in\n`ReplicaSpec.VolumeClaimTemplates`\n\nTo avoid conflict of volume naming, the PVC created will have format `{volname}-{podname}`. If this combination\ndoes not fit requirement, i.e. name too long, we will have error creating the volume, and in this case, related Pods will\nstop progress in a way such that they stuck in `Pending` state as scheduler is unable to find the volume for scheduling.\nIn such case, event will be recorded for debugging purpose.\n\nVolume's ownerReference will be set to the corresponding distributed training job, and once volume is created, we will\nnever delete the volume when recreating pods. Since Pod's ordinal will not change, recreated pods will always get its\nvolume back.\n\nHere is an example of TFJob:\n\n```yaml\n# This is a snippet of TFJobSpec\ntfReplicaSpecs:\n  Worker:\n    replicas: 1\n    template:\n      metadata:\n        name: \"my-worker\"\n      spec:\n        containers:\n          - name: \"my-container\"\n            image: \"some-image:latest\"\n            volumeMounts:\n              - name: \"my-data\"\n                path: \"/data\"\n    volumeClaimTemplates:\n      - metadata:\n          name: \"data\"\n        spec:\n          storageClassName: \"my-ebs-vol\"\n          accessModes:\n            - \"ReadWriteOnce\"\n          resources:\n            requests:\n              storage: 100Gi\n```\n\nWe will generate volume definition in the actual Pod spec (only showing worker-0, pod and volume will be identical for\nworker-1 besides the ordinal will change from 0 to 1):\n\n```yaml\n# worker 0 pod\napiVersion: v1\nkind: Pod\nmetadata:\n  name: \"mytf-worker-0\"\nspec:\n  containers:\n    - name: \"my-container\"\n      image: \"some-image:latest\"\n      volumeMounts:\n        - name: \"my-data\"\n          path: \"/data\"\n  volumes:\n    - name: \"my-data\"\n      persistentVolumeClaim:\n        claimName: \"my-data-mytf-worker-0\"\n\n---\n# worker 0 pvc\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: \"my-data-mytf-worker-0\"\n  ownerReferences:\n    - apiVersion: kubeflow.org/v1beta1\n      blockOwnerDeletion: true\n      controller: true\n      kind: TFJob\n      name: \"mytf\"\n      uid: \"xxxxxxx\"\nspec:\n  accessModes:\n    - \"ReadWriteOnce\"\n  resources:\n    requests:\n      storage: 100Gi\n  storageClassName: \"my-ebs-vol\"\n```\n\nOnce Pod and PVC are created, k8s control plane will handle the rest of the coordination.\n\n#### Volume Provisioning / De-provisioning Throttling\n\n##### Provision\n\nThough k8s PV controller has relatively aggressive exponential and jittered back-off when making cloud provider calls,\na burst in creating PVC will still result in a burst in cloud provider calls. Therefore, cluster administrator should\nbe able to configure the rate each application should use to create PVC.\n\n##### De-provision\n\nWe do not need to have a centralized throttle of volume de-provision for the following 2 reasons:\n\n1. Volume de-provision is relatively light weighted (only contains unmount and detach, not necessarily delete volume)\n2. Volume de-provision happens in a distributed fashion and have more randomness on timing, as container tear-down time varies\n\nWe can rely on k8s garbage collector to recycle Pod and Volume when a training job is deleted, and kubelet will ensure\nthat it does not start volume tear down routine before all containers are terminated.\n\n##### Throttling\n\nWith volume creation throttling, controller will send creation request that contains Pod/PVC pair to a queue and let the\nvolume and pod to be created asynchronously. We always create volume first before we create Pod. The reason is this will\nmake control plane more efficient as Pod without its volume get created first will make k8s controller / scheduler retry\nand generate other warning metrics / events, which adds load to important services such as ETCD and is not necessary in\nthis case. Async worker creation request will look like the follows:\n\n```go\ntype podVolumeThrottleRequest struct {\n\tPod *v1.Pod\n\tVol *v1.PersistentVolume\n}\n```\n\nA worker will spin up that takes requests from queue and create PVC with throttled rate. K8s provides\nwell tested [token bucket filter through its client-go](https://godoc.org/k8s.io/client-go/util/flowcontrol#NewTokenBucketRateLimiter),\nand we will be able to use that directly. Worker will requeue failed requests with back-off. With this throttling, worker\nwill have head-of-line blocking globally (among all training jobs controlled by the controller). This is intended behavior\nas we want to have a global volume creation throttling.\nAlso, this worker should be able to be commonly shared among different types of controllers so should reside in `common`.\n\n##### Alternatives\n\n1. Where to throttle volume creation?\n   An alternative is to work with k8s upstream to add throttling in PV controller, but given the dev/release cycle, it'd be\n   more convenient to add it in application, while keeping upstream logic stable and simple. Also adding throttling logic in\n   application has finer granularity as we can configure throttling.\n\n#### Status Report and Error Propagation\n\nFor now I don't think it necessary for propagating volume status back to `common.JobStatus`, as PVC will have its own\nstatus update. If we fail to create PVC, we will f event for the targeting training job. Since we don't have distributed\ntraining job specific metrics exporting for now, adding metrics for volume provisioning failure or so will be out of the\nscope of this design.\n\n### Risks and Mitigations\n\n1. Even though we can throttle volume creation, there is still possibility that we hit [k8s volume binding bug](https://github.com/kubernetes/kubernetes/pull/72045) if user's\n   storage class is `WaitForFirstConsumer` with k8s before 1.14.0. When this bug is hit, manual intervention is needed to\n   restart scheduler to refresh its cache. But from kubeflow perspective, allowing user to specifying volume provisioning\n   throttling is all what we can do\n\n2. Fairness in throttled volume provisioning. Theoretically if we use a FIFO queue for volume creation request throttling,\n   a training job with large number of replica might starve a training job that is processed after due to volume creation\n   throttling. For simplicity of this feature, we can start with FIFO queue but come up with fairer throttling later\n   (Non Goal #2)\n\n## Test Plan\n\n1. Unit tests are needed for proper transfer volume claim template into Pod's volume definitions\n2. Controller integration test for testing volume creation and throttling\n"
  },
  {
    "path": "proposals/2655-kubeflow-data-cache/README.md",
    "content": "# KEP-2401: Kubeflow Data Cache\n\n## Authors\n\n- Akshay Chitneni - [@akshaychitneni](https://github.com/akshaychitneni)\n- Rus Pandey\n\nCreation date: 2025-04-18\n\nGoogle doc: https://docs.google.com/document/d/1xj3K6bOT4f0EPiC4zwr2OsbRkROjIA8u_TBRZRVxrHI\n\n## Overview\n\nThis document outlines the design of a distributed in-memory [Apache Arrow](https://arrow.apache.org/) data cache system \nfor tabular datasets stored as [Apache Iceberg](https://iceberg.apache.org/) tables in remote object stores such as S3. \nIt also details the deployment model on Kubernetes and its integration with Kubeflow Trainer to accelerate and optimize \ndata loading in distributed training using data parallelism\n\n## Motivation\n\nIn distributed training on Kubernetes using data parallelism, each worker typically loads the entire dataset into memory or streams it from storage (disk/object-store), even though it only needs a subset. For example, With PyTorch DDP, by default each DDP worker loads the entire dataset in memory and uses a distributed sampler to select indices to access based on rank. If using PyTorch IterableDataset for any large dataset, workers stream the entire dataset from source for every epoch and sharding of data must be implemented by users for their use cases. This approach not only introduces IO latency but also is not optimal, as it unnecessarily consumes memory and bandwidth. For tabular datasets stored in compressed formats like Parquet in cost-efficient object stores like S3, loading or streaming the entire dataset involves a CPU-intensive task of decoding to a memory format that is consumed by worker nodes, which can lead to GPU inefficiency\n\nThis proposal addresses these challenges by introducing distributed in-memory caching of tabular datasets in memory efficient Apache Arrow format and provides fast data access to GPU workers using [Arrow Flight protocol](https://arrow.apache.org/docs/format/Flight.html). It outlines design of caching solution that would\n1. Auto shard the dataset based on number of gpu workers for optimal and parallel data access\n2. Enable shuffling across training epochs by providing direct access to shard blocks\n3. Integrate with Kubeflow Trainer simplifying and improving performance of distributed training on Kubernetes\n\n### User Stories\n\n* As ML engineer, I should be able to use kubeflow SDK to launch training or fine-tuning job with data cache passing dataset config\n* As Platform engineer, I should be able to configure training runtimes with cache-initializer config\n\n### User Value\n\n**Caching Layer for Tabular Data**\n* Users should readily access tabular data from cache without worrying about sharding the data across GPU worker nodes\n* Users should see improved GPU utilization as GPU workers consume data via zero-copy Arrow streams, eliminating deserialization overhead. Supports direct conversion to pandas/NumPy\n\n**Resource-Optimized Cache Bootstrap**\n* Dataset initialization pods schedule on CPU nodes freeing GPU nodes for compute-intensive workloads\n* Direct caching from Iceberg tables with column pruning (feature selection) and predicate pushdown (row filtering), reducing dataset load times for TB-scale datasets\n\n**Memory-Efficient Training**\n* Users can launch training workers with reduced memory and disk size as clients can stream batch of data from the cache\n* Users could easily shuffle globally across partitions while maintaining per-batch in-memory shuffling\n\n**Multi-Tenant Shared Datasets**\n* Multiple users running training jobs in cluster can access the same dataset cache irrespective of the number of workers\n* Users could leverage cache-aware scheduling of training jobs\n\n**Seamless Kubeflow Integration**\n* Users can configure and use Kubeflow trainer API to provision and accessing cache without any overhead\n\n\n### Goals\n* Provide in-memory dataset caching solution for training/fine-tuning using Kubeflow trainer\n* Enhance kubeflow SDK to provision and manage cache using dataset initializer\n\n### Non-Goals\n* Right sizing of cache based on dataset size\n* Support for hyperparameter tuning trials (should be addressed after implementing data cache with Kubeflow trainer)\n* Cache lifecycle management independent of Kubeflow trainer\n\n## Design Details\n\nThe proposed solution consists of loading and sharding of data in the Apache Iceberg table to memory efficient Arrow format. [Apache DataFusion](https://datafusion.apache.org/), which is an embedded query engine that uses Arrow and provides fast in-memory processing capabilities is used to shard the dataset and allow clients to query shards of arrow data. The solution leverages Apache Flight framework to stream dataset shards in parallel to GPU workers.\n\nThis section details the design of cache, deployment with [LeaderWorkerSet](https://github.com/kubernetes-sigs/lws) API and integration with Kubeflow trainer.\n\n## Distributed Cache System\n\nCache is built using DataFusion which is a columnar query engine having integrations with various table formats like Iceberg to efficiently query data.\n\n![](./cache-initialization.png)\n\n![](./training-worker-access-pattern.png)\n\n### Head Node:\n**Initialization**\n* Access table and fetch data files to scan applying predicates push down\n* Partition the data files equally among data nodes based on row count\n* Assign the partitions to workers and create an in-memory index table with partition info\n* Distribute the file locations to data nodes\n\n**Query to access a dataset shard**\n* Access index table and fetch list of workers having the shard\n* Responds with the data node endpoints for client to connect to and fetch shard data in parallel\n* For shuffling, clients can pass a shard index that is unique for each epoch\n\n### Data Node:\n**Initialization**\n* Stream data from list of files\n* Add an index column and store data in in-memory table\n\n**Query to stream data**\n* Access the in-memory data table to fetch the partition data for the given range of indices\n* Stream the response to client\n\n![](./streaming.png)\n\nCache is built using Rust and uses datafusion interfaces like [TableProvider](https://docs.rs/datafusion/latest/datafusion/datasource/trait.TableProvider.html) to build custom table sources, introduces Executors using [ExecutionPlan](https://docs.rs/datafusion/latest/datafusion/physical_plan/trait.ExecutionPlan.html) api to adding index columns to the data, and streams data files to workers. It uses MemTable to build index and data tables and use in-built query execution capabilities to query for shard location and stream shards from data nodes\n\n### Client flow\n\n\nClients interact with head and data nodes using Apache Arrow Flight framework. Apache Arrow Flight is an RPC framework designed for high-performance data services. It leverages gRPC and the Arrow IPC format to efficiently transfer Arrow format data over networks.\n\n**Data flow:**\n- Client connects to head node\n    - Construct FlightDescriptor that specifies the shard info dataset.\n    - Client sends FlightDescriptor to head node using GetFlightInfo RPC method\n    - Head node responds with FlightInfo message containing\n        - Endpoints - endpoints of location to fetch data\n        - Tickets - tokens for each endpoint to identity the data\n- Client connects to data node\n  - Client connects to one or more data nodes specified in the FlightInfo response\n  - For each endpoint client call DoGet with corresponding ticket\n  - Data nodes stream Arrow record batches to client\n\n***Example***\n```python\nimport pyarrow as pa\nimport pyarrow.flight\nfrom pyarrow._flight import FlightClient\n\nindex = 1 # shard index\ntotal_workers = 10 # total workers in a training job\n\ndescriptor = pa.flight.FlightDescriptor.for_path(*[s for s in [str(index), str(total_workers)]])\n\nclient = pa.flight.connect(self.endpoint)\nflight_info = client.get_flight_info(descriptor)\n\nfor endpoint in flight_info.endpoints:\n   for location in endpoint.locations:\n       _client = FlightClient(location.uri)\n       reader = _client.do_get(endpoint.ticket)\n       for chunk in reader:\n         # Access record_batch\n\n```\n\n### Kubeflow Integration\n\n![](./kubeflow-trainer-integration.png)\n\n**Initializer**\n- Add Dataset initializer to bootstrap LeaderWorkerSet with provided config\n    - Intializer uses serviceAccount having privileges to create LeaderWorkSet, Service, ServiceAccount and read TrainJob\n    - Initializer adds trainJob ownerReference to all the created components\n    - Initializer creates <trainjob>-cache-service to access head nodes\n      - In the long term, we aim to manage lifecycle of the cache separately than with trainjob to enable reusing of cache across jobs\n\n**Kubeflow SDK**\n    - Support ArrowCacheDatasetInitializer to be passed as initializer in the train function\n      - ArrowCacheDatasetInitializer accepts parameters that needs to be passed to LWS\n    - Create a step to fetch logs from cache cluster\n\n***Runtime with cache initializer***\n\n```yaml\napiVersion: trainer.kubeflow.org/v1alpha1\nkind: ClusterTrainingRuntime\nmetadata:\n  name: torch-distributed-with-cache\nspec:\n  mlPolicy:\n    numNodes: 1\n    torch:\n      numProcPerNode: auto\n  template:\n    spec:\n      replicatedJobs:\n      - name: dataset-initializer\n        replicas: 1\n        template:\n          metadata:\n            labels:\n              trainer.kubeflow.org/trainjob-ancestor-step: dataset-initializer\n          spec:\n            template:\n              spec:\n                serviceAccountName: cache-initializer-sa # sa with required permissions to start cache\n                containers:\n                  - name: dataset-initializer\n                    image: cache_initializer:latest # image to trigger cache creation\n                    env:\n                      - name: CACHE_IMAGE\n                        value: \"arrow_cache:latest\"\n                      - name: TRAIN_JOB_NAME\n                        valueFrom:\n                          fieldRef:\n                            apiVersion: v1\n                            fieldPath: metadata.labels['jobset.sigs.k8s.io/jobset-name']\n      - name: node\n        dependsOn:\n          - name: dataset-initializer\n            status: Complete\n        template:\n          metadata:\n            labels:\n              trainer.kubeflow.org/trainjob-ancestor-step: trainer\n          spec:\n            # trainer spec\n```\n\n***SDK to create trainJob accessing data from cache***\n\n```python\nfrom kubeflow.trainer.types.types import ArrowCacheDatasetInitializer\n\nclient = TrainerClient(namespace=\"cache-test\")\n\nfor runtime in client.list_runtimes():\n    ## access runtime with cache\n    if runtime.name == \"torch-distributed-with-cache\":\n        torch_runtime = runtime\n\n\njob_name = client.train(\n\n    trainer=CustomTrainer(\n        func=train_func,\n        num_nodes=8,\n        resources_per_node={\n            \"cpu\": 3,\n            \"memory\": \"8Gi\",\n            \"nvidia.com/gpu\": 1,\n        },\n        packages_to_install=[\"pyarrow==19.0.0\"]\n    ),\n    # dataset config \n    initializer = Initializer(dataset=ArrowCacheDatasetInitializer(\n        cluster_size=\"5\",\n        metadata_loc=\"s3a://testbucket/cache/data/amazon_polarity/metadata/12345.metadata.json\",\n        table_name=\"amazon_polarity_v2\",\n        schema_name=\"feature_demo\",\n        storage_uri=None,\n    )),\n    runtime=torch_runtime\n)\n```\nThe config can be passed by the users using the sdk or can be configured in the trainingRuntime by DevOps or ML engineers. Example: IAM_ROLE can be configured in the runtime.\nCache-initializer-sa needs to be precreated by the platform engineers so that initializer job can have access to create LWS and cluster specific resources like serviceAccount, Service and also access TrainJob to add as OwnerRef to these resources.\n\n**LeaderWorkerSet**\n\n![](./leaderworkerset.png)\n\nLeaderWorkerSet API provides capabilities to deploy cache as a single unit enabling easy scaling of the cluster to multiple replicas. It provides support for dual-templates as with cache, data nodes might need more resources compared to head nodes. All-or-nothing restarts is useful for cache as it has in-memory tables avoiding partial failure.\n\n- LeaderWorkerSet with head and data nodes\n  - LWS should be ready on completion of loading data\n  - Head node should stop accepting requests if any of the worker pod restarts\n- Kubernetes clusterIp service to access head nodes\n  - As the metadata table with shard information is same for any replica in leaderWorkerSet, clients can connect to any head node to retrieve shard location of a specific index and connect to data nodes\n\n### Example\n- BERT fine tuning example using PyTorch data loader that streams data from cache\n- ArrowCacheDataset using PyTorch IterableDataset to stream record batches using Arrow Flight framework\n```python\nimport time\nfrom multiprocessing import current_process\nimport torch.distributed as dist\nimport pyarrow as pa\nfrom pyarrow._flight import FlightClient\nimport torch\nimport os\nfrom torch.utils.data import IterableDataset\n\n\n# define arrow cache dataset to access arrow recorbatches (shards of dataset) from cache\nclass ArrowCacheDataset(IterableDataset):\n    def __init__(self, seed = 0, batch_size = 128):\n        train_job_name = os.getenv(\"TRAIN_JOB_NAME\")\n        self.endpoint = f'grpc://{train_job_name}-cache-service:50051'\n        self.seed = seed\n        self.batch_size = batch_size\n\n    def set_epoch(self, epoch):\n        self.seed = self.seed + epoch\n\n    def from_arrow_rb_to_tensor(self, chunk):\n        return\n\n    # extract RecordBatches, split them into chunks of a specified siz\n    def stream_recordbatch_chunks(self, recordbatch_stream, chunk_size):\n        leftover = None  # To hold leftover rows from the previous batch\n    \n        for rb in recordbatch_stream:\n            batch = rb.data\n            # If there's leftover data, prepend it to the current batch\n            if leftover is not None:\n                arrays = [\n                    pa.concat_arrays([leftover.column(i), batch.column(i)])\n                    for i in range(len(batch.columns))\n                ]\n                batch = pa.RecordBatch.from_arrays(arrays, batch.schema.names)\n\n            # Split the current batch into chunks\n            for i in range(0, batch.num_rows, chunk_size):\n                chunk = batch.slice(i, chunk_size)\n    \n                # If the chunk is smaller than `chunk_size`, save it as leftover for the next iteration\n                if chunk.num_rows < chunk_size:\n                    leftover = chunk\n                    break  # Stop processing this batch and wait for more data\n                else:\n                    yield from self.from_arrow_rb_to_tensor(chunk)\n    \n            # If no leftover rows remain, reset `leftover`\n            else:\n                leftover = None\n    \n        # Yield any remaining rows after all batches are processed\n        if leftover is not None and leftover.num_rows > 0:\n            # pass recordbatch to upstream for specifc usecase\n            yield from self.from_arrow_rb_to_tensor(leftover)\n\n\n    def __iter__(self):\n        worker_info = torch.utils.data.get_worker_info()\n        if worker_info is None:  # Single-process data loading\n            worker_id = 0\n            num_workers = 1\n        else:  # Multi-process data loading\n            worker_id = worker_info.id\n            num_workers = worker_info.num_workers\n\n        # Distributed training info\n        if dist.is_available() and dist.is_initialized():\n            world_size = dist.get_world_size()\n            rank = dist.get_rank()\n        else:\n            world_size = 1\n            rank = 0\n            \n        # calculate shard index\n        total_workers = num_workers * world_size\n        global_worker_id = worker_id * world_size + rank\n        index = (global_worker_id + self.seed ) % total_workers\n\n        descriptor = pa.flight.FlightDescriptor.for_path(*[s for s in [str(index), str(total_workers)]])\n        # Get flight information connecting to a head node\n        client = pa.flight.connect(self.endpoint)\n        flight_info = client.get_flight_info(descriptor)\n\n        # Access flights from get_flight_info response and access data nodes\n        for endpoint in flight_info.endpoints: \n            for location in endpoint.locations:\n                _client = FlightClient(location.uri)\n                ticket = endpoint.ticket\n                reader = _client.do_get(ticket)\n                \n                # split recordbatch to chucks of batch_size\n                yield from self.stream_recordbatch_chunks(reader, self.batch_size)\n\n# Define dataset for tokenizing and converting rb with Amazon review data to tensors\n# use ArrowCacheDataset and override from_arrow_rb_to_tensor function\nclass AmazonReviewDataset(ArrowCacheDataset):\n    def __init__(self, tokenizer, seed = 0):\n        super().__init__(seed)\n        self.tokenizer = tokenizer\n\n    # convert arrow recordbatch to tensor\n    def from_arrow_rb_to_tensor(self, chunk):\n        # convert arrow recordbatch to python data structure with zero copy\n        deserialize_start_time = time.time()\n        texts = chunk.column(\"content\").to_pylist()\n        labels = chunk.column(\"label\").to_pylist()\n        deserialize_end_time = time.time()\n        print(f\"{current_process().name}, Time to deserialize batch: {deserialize_end_time - deserialize_start_time:.6f} seconds\")\n\n        encode_start_time = time.time()\n        encoding = self.tokenizer(\n            texts,\n            padding=\"max_length\",\n            truncation=True,\n            max_length=128,\n            return_tensors=\"pt\"\n        )\n        encode_end_time = time.time()\n        print(f\"{current_process().name}, Time to encode batch: {encode_end_time - encode_start_time:.6f} seconds\")\n    \n        yield {\n            \"input_ids\": encoding[\"input_ids\"].squeeze(0),\n            \"attention_mask\": encoding[\"attention_mask\"].squeeze(0),\n            \"labels\": torch.tensor(labels)\n        }\n```\n\n### Drawbacks\n- Arrow data can consume significant memory compared with parquet format \n- Clients should handle retries on failures to access or streaming data from cache\n- Client should handle resuming the streaming of data from cache\n\n### Alternatives\n**Ray**\n* While a similar solution exists with Ray using Ray Cluster Object Store, It is integrated with Ray ecosystem such as Ray scheduler, Ray data. However, with the proposed caching solution, we aim to integrate with Kubernetes API by providing flexibility for the cluster operators or ML engineers to leverage any existing schedulers like volcano, preprocess data with Apache Spark or similar technologies\n\n**MosaicML**\n* MosaicML StreamingDataset is a pytorch iterableDataset which minimizes downloading entire dataset across training workers but stream relevant shards on demand and caches to disk. However, this requires users to convert the dataset to MDS format. With shuffling, the dataset is still downloaded multiple times for the training run across epochs but it is minimized as some data is already cached locally on disk.\n\n**HuggingFace**\n* Huggingface dataset allows streaming data from remote cloud storage for large datasets. This is achieved by streaming only relevant shards of dataset. However, to avoid streaming the entire dataset, the number of workers should be in sync with the number of shards or files in the dataset(git issue, git issue). Again with shuffling across epochs, training data can be restreamed from cloud storage."
  },
  {
    "path": "proposals/280-issue-triage/README.md",
    "content": "# KEP-280: Kubeflow Issue Triage\n\n## TL;DR\n\nThe purpose of this doc is to define a process for triaging Kubeflow issues.\n\n## Objectives\n\n- Establish well accepted criterion for determining whether issues have been triaged\n- Establish a process for ensuring issues are triaged in a timely fashion\n- Define metrics for measuring whether we are keeping up with issues\n\n## Triage Conditions\n\nThe following are necessary and sufficient conditions for an issue to be considered triaged.\n\n- The issue must have a label indicating which one of the following kinds of issues it is\n\n  - **bug**\n    - Something is not working as intended in general.\n  - **question**\n    - Clear question statement\n    - Something is not working as intended in author's specific use case and he/she doesn't know why.\n  - **feature**\n    - Everything is working as intended, but could be better (i.e more user friendly)\n  - **process**\n    - Typically used to leave a paper trail for updating Kubeflow infrastructure. It helps to track the changes to infrastructure for easy debugging in the future.\n\n- The issue must have at least one [area or platform label](https://github.com/kubeflow/community/blob/master/labels-owners.yaml) grouping related issues and relevant owners.\n\n- The issue must have a priority attached to it. Here is a guideline for priority\n\n  - **P0** - Urgent - Work must begin immediately to fix with a patch release:\n    - Bugs that state that something is really broken and not working as intended.\n    - Features/improvements that are blocking the next release.\n  - **P1** - Rush - Work must be scheduled to assure issue will be fixed in the next release.\n  - **P2** - Low - Never blocks a release, assigned to a relevant project backlog if applicable.\n  - **P3** - Very Low - Non-critical or cosmetic issues that could and probably should eventually be fixed but have no specific schedule, assigned to a relavant project backlog if applicable.\n\n- **P0** & **P1** issues must be attached to a Kanban board corresponding to the release it is targeting\n\n## Process\n\n1. Global triagers are responsible for ensuring new issues have an area or platform label\n\n   - A weekly rotation will be established to designate a primary person to apply initial triage\n\n   - Once issues have an area/platform label they should be moved into the appropriate [column \"Assigned to Area Owners\"](https://github.com/orgs/kubeflow/projects/26#column-7382310) in the Needs Triage Kanban board\n\n     - There is an open issue [kubeflow/code-intelligence#72](https://github.com/kubeflow/code-intelligence/issues/72) to do this automatically\n\n1. Area/Platform owners are responsible for ensuring issues in their area are triaged\n\n   - The oncall will attempt to satisfy the above criterion or reassign to an appropriate WG if there is some question\n\n## Tooling\n\n- The [Needs Triage](https://github.com/orgs/kubeflow/projects/26) Kanban board will be used to track issues that need triage\n\n  - Cards will be setup to monitor various issues; e.g. issues requiring discussion by various WG's\n\n- The [GitHub Issue Triage action](https://github.com/kubeflow/code-intelligence/tree/master/Issue_Triage/action) can be used to\n  automatically add/remove issues from the Kanban board depending on whether they need triage or not\n\n  - Follow the [instructions](https://github.com/kubeflow/code-intelligence/tree/master/Issue_Triage/action#installing-the-action-on-a-repository) to install the GitHub action on a repository\n\n- The [triage notebook](https://github.com/kubeflow/code-intelligence/blob/master/py/code_intelligence/triage.ipynb) can be used to generate reports about number of untriaged issues as well as find issues needing triage\n\n## Become a contributor\n\n- Make sure that you have enough permissions to assign labels to an issue and add it to a project.\n- In order to get permissions, open a PR to add yourself to [project-maintainers](https://github.com/kubeflow/internal-acls/blob/4e44f623ea4df32132b2e8a973ed0f0dce4f4139/github-orgs/kubeflow/org.yaml#L389) group.\n\n## Triage guideline\n\n- Take an issue from \"Needs Triage\" project and open it in a new tab.\n- Carefully read the description.\n- Carefully read all comments below. (Some issues might be already resolved).\n- Make sure that issue is still relevant. (Some issues might be open for months and still be relevant to current Kubeflow release whereas some might be outdated and can be closed).\n- Ping one of the issue repliers if he/she is not replying for a while.\n- Make sure that all triage conditions are satisfied.\n\n## Metrics\n\nWe would like to begin to collect and track the following metrics\n\n- Time to triage issues\n- Issue volume\n\n## References\n\n- [kubeflow/community](https://github.com/kubeflow/community/issues/280)\n"
  },
  {
    "path": "proposals/30-tf-operator-v1alpha2/tf-operator-design-v1alpha2.md",
    "content": "<!-- START doctoc generated TOC please keep comment here to allow auto update -->\n<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\n\n**Table of Contents** _generated with [DocToc](https://github.com/thlorenz/doctoc)_\n\n- [TF-Operator Design (v1alpha2)](#tf-operator-design-v1alpha2)\n  - [Motivation](#motivation)\n  - [Goals](#goals)\n  - [Non-Goals](#non-goals)\n  - [UI or API](#ui-or-api)\n  - [Design](#design)\n    - [TFController](#tfcontroller)\n    - [Distributed TensorFlow Configuration](#distributed-tensorflow-configuration)\n    - [Event-Driven](#event-driven)\n    - [Reconciler](#reconciler)\n    - [Error Handling](#error-handling)\n    - [Test](#test)\n  - [Alternatives Considered](#alternatives-considered)\n    - [Future Works](#future-works)\n    - [Related Issues](#related-issues)\n\n<!-- END doctoc generated TOC please keep comment here to allow auto update -->\n\n_Authors:_\n\n- @ScorpioCPH - Penghao Cen &lt;cenph@caicloud.io&gt;\n\n_Status_\n\n- 2018-03-18 - Accepted\n- 2018-04-10 - Implementation Started\n- 2018-07-02 - v1alpha2 released in 0.2\n\n# KEP-30: TF-Operator Design (v1alpha2)\n\n## Motivation\n\nKubeflow community currently have [tf-operator](https://github.com/kubeflow/tf-operator) (v1alpha1) for running TensorFlow jobs on Kubernetes. And we have received some refactoring [requests](https://github.com/kubeflow/tf-operator/issues?q=is%3Aissue+is%3Aopen+label%3Akind%2Fapi-change) for API changes.\nOpen this file to summarize the design details and move the version of API to `v1alpha2`.\n\n## Goals\n\n- Define the structure of API `v1alpha2`.\n  - Cover most of the refactoring requests we have discussed.\n  - Simplify the API definition.\n- Define an `event-driven` mechanism for TFJob life-cycle management.\n  - And use `reconciler` mechanism as a double check.\n- Clarify the `error handing` logic.\n- Provide a `test` mechanism to verify the design and implementation.\n\n## Non-Goals\n\n- **Notes:** As we make a big change in API v1alpha2, compatibility with v1alpha1 is **NOT** be taken into consideration in this proposal.\n\n## UI or API\n\nThe `TFJob` API v1alpha2 object will have the following structure:\n\n**TFJob**:\n\n```go\n// TFJob represents the configuration of signal TFJob\ntype TFJob struct {\n    metav1.TypeMeta `json:\",inline\"`\n\n    // Standard object's metadata.\n    metav1.ObjectMeta `json:\"metadata,omitempty\"`\n\n    // Specification of the desired behavior of the TFJob.\n    Spec TFJobSpec `json:\"spec,omitempty\"`\n\n    // Most recently observed status of the TFJob.\n    // This data may not be up to date.\n    // Populated by the system.\n    // Read-only.\n    Status TFJobStatus `json:\"status,omitempty\"`\n}\n```\n\n**TFJobSpec**:\n\n```go\n// TFJobSpec is a desired state description of the TFJob.\ntype TFJobSpec struct {\n    // TFReplicaSpecs is map of TFReplicaType and TFReplicaSpec\n    // specifies the TF replicas to run.\n    // For example,\n    //   {\n    //     \"PS\": TFReplicaSpec,\n    //     \"Worker\": TFReplicaSpec,\n    //   }\n    TFReplicaSpecs map[TFReplicaType]*TFReplicaSpec `json:\"tfReplicaSpecs\"`\n}\n```\n\n**TFReplicaSpec**:\n\n```go\n// TFReplicaSpec is a description of the TFReplica\ntype TFReplicaSpec struct {\n    // Replicas is the desired number of replicas of the given template.\n    // If unspecified, defaults to 1.\n    Replicas *int32 `json:\"replicas,omitempty\"`\n\n    // Template is the object that describes the pod that\n    // will be created for this TFReplica.\n    // We use RestartPolicy in PodTemplateSpec\n    // to describe how the containers within the pod should be restarted.\n    // Please set this restart policy carefully according to your code.\n    Template *v1.PodTemplateSpec `json:\"template,omitempty\"`\n\n    // Restart policy for all TFReplicas within the TFJob.\n    // One of Always, OnFailure, Never and ExitCode.\n    // Default to Always.\n    RestartPolicy RestartPolicy `json:\"restartPolicy,omitempty\"`\n}\n\n// RestartPolicy describes how the TFReplicas should be restarted.\n// Only one of the following restart policies may be specified.\n// If none of the following policies is specified, the default one\n// is RestartPolicyAlways.\ntype RestartPolicy string\n\nconst (\n    RestartPolicyAlways    RestartPolicy = \"Always\"\n    RestartPolicyOnFailure RestartPolicy = \"OnFailure\"\n    RestartPolicyNever     RestartPolicy = \"Never\"\n    RestartPolicyExitCode  RestartPolicy = \"ExitCode\"\n)\n```\n\n**TFReplicaType**:\n\n```go\n// TFReplicaType is the type for TFReplica.\ntype TFReplicaType string\n\nconst (\n    // TFReplicaTypePS is the type for parameter servers of distributed TensorFlow.\n    TFReplicaTypePS TFReplicaType = \"PS\"\n\n    // TFReplicaTypeWorker is the type for workers of distributed TensorFlow.\n    TFReplicaTypeWorker TFReplicaType = \"Worker\"\n\n    // TFReplicaTypeChief is the type for chief worker of distributed TensorFlow.\n    // If there is \"chief\" replica type, it's the \"chief worker\".\n    // Else, worker:0 is the chief worker.\n    TFReplicaTypeChief TFReplicaType = \"Chief\"\n\n    // TFReplicaTypeEval is the type for evaluation replica in TensorFlow.\n    TFReplicaTypeEval TFReplicaType = \"Eval\"\n)\n```\n\n**TFJobStatus**:\n\n```go\n// TFJobStatus represents the current observed state of the TFJob.\ntype TFJobStatus struct {\n    // TFReplicaStatuses is map of TFReplicaType and TFReplicaStatus,\n    // specifies the status of each TFReplica.\n    TFReplicaStatuses map[TFReplicaType]*TFReplicaStatus `json:\"tfReplicaStatuses\"`\n\n    // Represents time when the TFJob was acknowledged by the TFJob controller.\n    // It is not guaranteed to be set in happens-before order across separate operations.\n    // It is represented in RFC3339 form and is in UTC.\n    StartTime *metav1.Time `json:\"startTime,omitempty\"`\n\n    // Represents time when the TFJob was completed. It is not guaranteed to\n    // be set in happens-before order across separate operations.\n    // It is represented in RFC3339 form and is in UTC.\n    CompletionTime *metav1.Time `json:\"completionTime,omitempty\"`\n\n    // Represents last time when the TFJob was reconciled. It is not guaranteed to\n    // be set in happens-before order across separate operations.\n    // It is represented in RFC3339 form and is in UTC.\n    LastReconcileTime *metav1.Time `json:\"lastReconcileTime,omitempty\"`\n\n    // Represents is an array of current observed TFJob conditions.\n    Conditions []TFJobCondition `json:\"conditions\"`\n}\n```\n\n**TFReplicaStatus**:\n\n```go\n// TFReplicaStatus represents the current observed state of the TFReplica.\ntype TFReplicaStatus struct {\n    // The number of actively running pods.\n    Active int32 `json:\"active,omitempty\"\"`\n\n    // The number of pods which reached phase Succeeded.\n    Succeeded int32 `json:\"succeeded,omitempty\"`\n\n    // The number of pods which reached phase Failed.\n    Failed int32 `json:\"failed,omitempty\"`\n}\n```\n\n**TFJobCondition**:\n\n```go\n// TFJobCondition describes the state of the TFJob at a certain point.\ntype TFJobCondition struct {\n    // Type of TFJob condition.\n    Type TFJobConditionType `json:\"type\"`\n\n    // Status of the condition, one of True, False, Unknown.\n    Status v1.ConditionStatus `json:\"status\"`\n\n    // The reason for the condition's last transition.\n    Reason string `json:\"reason,omitempty\"`\n\n    // A human readable message indicating details about the transition.\n    Message string `json:\"message,omitempty\"`\n\n    // The last time this condition was updated.\n    LastUpdateTime metav1.Time `json:\"lastUpdateTime,omitempty\"`\n\n    // Last time the condition transitioned from one status to another.\n    LastTransitionTime metav1.Time `json:\"lastTransitionTime,omitempty\"`\n}\n```\n\n**TFJobConditionType**:\n\n```go\n// TFJobConditionType defines all kinds of types of TFJobStatus.\ntype TFJobConditionType string\n\nconst (\n    // TFJobCreated means all sub-resources (e.g. services/pods) of this TFJob\n    // have been successfully created.\n    // But they are waiting to be scheduled and launched.\n    TFJobCreated TFJobConditionType = \"Created\"\n\n    // TFJobRunning means all sub-resources (e.g. services/pods) of this TFJob\n    // have been successfully scheduled and launched.\n    // The training is running without error.\n    TFJobRunning TFJobConditionType = \"Running\"\n\n    // TFJobRestarting means one or more sub-resources (e.g. services/pods) of this TFJob\n    // reached phase failed but maybe restarted according to it's restart policy\n    // which specified by user in v1.PodTemplateSpec.\n    // The training is freezing/pending.\n    TFJobRestarting TFJobConditionType = \"Restarting\"\n\n    // TFJobSucceeded means all sub-resources (e.g. services/pods) of this TFJob\n    // reached phase have terminated in success.\n    // The training is complete without error.\n    TFJobSucceeded TFJobConditionType = \"Succeeded\"\n\n    // TFJobFailed means one or more sub-resources (e.g. services/pods) of this TFJob\n    // reached phase failed with no restarting.\n    // The training has failed its execution.\n    TFJobFailed TFJobConditionType = \"Failed\"\n)\n```\n\n## Design\n\n### TFController\n\nThe TFJob controller `tf-operator` will process TFJobs and CRUD services/pods according to the spec of TFJob. It is responsible for synchronizing TFJob objects stored in the system with actual running services and pods, continuously strive to make the observed state match the desired state.\n\nHere is the definition of `TFController`:\n\n```go\ntype TFController struct {\n    // kubeClientset is a standard kubernetes clientset\n    kubeClientset kubernetes.Interface\n\n    // tfJobClientset is a clientset for CRD TFJob\n    tfJobClientset tfjobclient.Interface\n\n    tfJobLister listers.TFJobLister\n    tfJobSynced cache.InformerSynced\n\n    // for pod/service CRUD\n    podLister     kubelisters.PodLister\n    podControl    controller.PodControlInterface\n    serviceLister kubelisters.ServiceLister\n\n    // workQueue is a rate limited work queue. This is used to queue work to be\n    // processed instead of performing it as soon as a change happens. This\n    // means we can ensure we only process a fixed amount of resources at a\n    // time, and makes it easy to ensure we are never processing the same item\n    // simultaneously in two different workers.\n    workQueue workqueue.RateLimitingInterface\n\n    // recorder is an event recorder for recording Event resources to the\n    // Kubernetes API.\n    recorder record.EventRecorder\n\n    // A TTLCache of pod creates/deletes each TFReplica expects to see\n    expectations controller.ControllerExpectationsInterface\n}\n```\n\n### Distributed TensorFlow Configuration\n\n**Auto-Generated TF_CONFIG:**\n\nTo make distributed TensorFlow work, user **should** get the distributed TensorFlow configurations `TF_CONFIG` which generated by `tf-operator`.\nThis config looks like this:\n\n```json\n{\n    \"cluster\": {\n        \"ps\": [\"ps1:2222\", \"ps2:2222\"],\n        \"worker\": [\"worker1:2222\", \"worker2:2222\", \"worker3:2222\"]\n    },\n    \"task\": {\n        \"type\": \"ps\",\n        \"index\": 1\n        },\n    }\n}\n```\n\n`tf-operator` will append these auto-generated environment variables into `Env` field.\nCheck more details from [here](https://cloud.google.com/ml-engine/docs/trainer-considerations#use_tf_config).\n\n**User-Defined Arguments:**\n\nOther user-defined arguments can also be passed into container by `Args` field in `Container` struct.\n\n### Event-Driven\n\nFirst, we should follow the `Event-Driven` pattern as other resource controller in kubernetes (e.g. Deployment/Job):\n\n- Start `tfJobInformer` to listen on CRUD events of TFJob.\n  - `tfJobInformer` was automatically generated from API definition by `informer-gen` script.\n- Create one pair pod/service for each specify TFReplicaType + replica index in TFJob CreateHandler.\n  - For example, as a given TFReplicaSpec:\n    ```\n    {\n      \"PS\": {\n          Replicas: 2,\n      },\n      \"Worker\": {\n          Replicas: 3,\n      },\n    }\n    ```\n    We will create:\n    - `two` pair pods/services for PSs:\n      - tf-job-name-ps-1-uid\n      - tf-job-name-ps-2-uid\n    - `three` pair pods/services for Workers:\n      - tf-job-name-worker-1-uid\n      - tf-job-name-worker-2-uid\n      - tf-job-name-worker-3-uid\n  - We use a postfix `uid` to make each object name unique.\n  - Then set these objects' `OwnerReferences` to this TFJob object.\n- Listen on pods/services via `podInformer` and `serviceInformer`.\n  - On pod created/updated/deleted, get TFJob object by parsing `OwnerReferences`, set the `TFJob.Status` as defined above according to the whole TF cluster state.\n  - Update the `TFJob.Status.Condition` if needed.\n- Terminate/Delete the TFJob object if every pod is completed (or leave pod phase as `Succeeded`).\n  - This maybe be lead to logs and model checkpoint files unreachable.\n\n### Reconciler\n\nMore than that, we should provide a `Reconciler` mechanism to reconcile observed and desired states and repair discrepancies as a double check for `Event-Driven` mechanism.\n\nHere is `configuration` of tf-operator:\n\n```go\n// TFControllerConfiguration contains configuration of tf-operator.\n// DefaultTimerConfig is the suggested tf-operator configuration for production.\ntype TFControllerConfiguration struct {\n    // ReconcilerSyncLoopPeriod is the amount of time the reconciler sync states loop\n    // wait between two reconciler sync.\n    // It is set to 15 sec by default.\n    // TODO(cph): maybe we can let it grows by multiple in the future\n    // and up to 5 minutes to reduce idle loop.\n    // e.g. 15s, 30s, 60s, 120s...\n    ReconcilerSyncLoopPeriod metav1.Duration\n}\n\n// DefaultTFControllerConfiguration is the suggested tf-operator configuration for production.\nvar DefaultTFControllerConfiguration TFControllerConfiguration = TFControllerConfiguration{\n    ReconcilerSyncLoopPeriod: 15 * time.Second,\n}\n```\n\nReconciler use a `ReconcilerSyncLoopPeriod` to determine whether we should call this reconciler or ignore it. We should leave a record `LastReconcileTime` in TFJob object of course:\n\n```go\n    // Represents last time when the TFJob was reconciled. It is not guaranteed to\n    // be set in happens-before order across separate operations.\n    // It is represented in RFC3339 form and is in UTC.\n    LastReconcileTime *metav1.Time `json:\"lastReconcileTime,omitempty\"`\n```\n\nAs `tfJobImformer` provides a forcing resync mechanism by calling `UpdateFunc` which defined in `ResourceEventHandlerFuncs` periodically. We can call the reconciler in this function:\n\n- UpdateFunc return a TFJob object periodically.\n- Check `LastReconcileTime` to determine whether we should trigger a reconciler call.\n- `tf-operator` will list all pods/services which related to this TFJob.\n  - Compare the current state to the spec of this TFJob.\n  - Try to recovery the failed pod/service to make the training healthy.\n    - Error handing is described below.\n- Update the status of this TFJob.\n- TODO: we should call this reconciler with an exponential back-off delay (15s, 30s, 60s …) capped at 5 minutes.\n\n### Error Handling\n\nTo make the system robust, the tf-operator should be able to locally and automatically recover from errors.\n\nWe extend kubernetes built-in `RestartPolicy` by adding new policy `ExitCode`:\n\n```go\n    RestartPolicyAlways    RestartPolicy = \"Always\"\n    RestartPolicyOnFailure RestartPolicy = \"OnFailure\"\n    RestartPolicyNever     RestartPolicy = \"Never\"\n    RestartPolicyExitCode  RestartPolicy = \"ExitCode\"\n```\n\nWe let users set this field according to their model code.\n\n- If set RestartPolicy to `OnFailure`/`Always`, user should add reloading checkpoint code by themselves.\n- Otherwise restarting will take no effect.\n\n`ExitCode` policy means that user should add exit code by themselves, `tf-operator` will check these exit codes to determine the behavior when a error occurs:\n\n- 1-127: permanent error, do not restart.\n- 128-255: retryable error, will restart the pod.\n\n### Test\n\n**Unit Test**\n\nTBD\n\n**E2E Test**\n\nWe can use this model from TensorFlow [repo](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/dist_test) for e2e test.\n\n## Alternatives Considered\n\n### Future Works\n\nApart from the above, we should add these abilities in the future:\n\n- Provide a properly mechanism to store training logs and checkpoint files.\n  - [FYI](https://github.com/kubeflow/tf-operator/issues/128)\n\n### Related Issues\n\n- [Refactor TFJobStatus in CRD API](https://github.com/kubeflow/tf-operator/issues/333)\n- [Deprecate the TfImage field](https://github.com/kubeflow/tf-operator/issues/330)\n- [[discussion] Differences between tensorflow/k8s and caicloud/kubeflow-controller](https://github.com/kubeflow/tf-operator/issues/283)\n- [API: some comments about API changes from PR #215 review](https://github.com/kubeflow/tf-operator/issues/249)\n- [Use conditions instead of phase](https://github.com/kubeflow/tf-operator/issues/223)\n- [API Review](https://github.com/kubeflow/tf-operator/issues/64)\n- [Phase is wrong unexpected TfJob phase: Done](https://github.com/kubeflow/tf-operator/issues/110)\n"
  },
  {
    "path": "proposals/33-pytorch-operator/README.md",
    "content": "<!-- START doctoc generated TOC please keep comment here to allow auto update -->\n<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\n\n**Table of Contents** _generated with [DocToc](https://github.com/thlorenz/doctoc)_\n\n- [Motivation](#motivation)\n- [Goals](#goals)\n- [Non-Goals](#non-goals)\n- [API (CRD and resulting objects)](#api-crd-and-resulting-objects)\n  - [Custom Resource Definition](#custom-resource-definition)\n  - [Resulting Master](#resulting-master)\n  - [Resulting Worker](#resulting-worker)\n- [Design](#design)\n- [Alternatives Considered](#alternatives-considered)\n\n<!-- END doctoc generated TOC please keep comment here to allow auto update -->\n\n_Status_\n\n- 2018-03-20 - Accepted\n- 2018-03-15 - Implementation Started\n- 2018-07-02 - v1alpha1 is released in 0.2\n\n# KEP-33: PyTorch Operator\n\n## Motivation\n\nPyTorch is a popular machine learning framework which currently does not have an operator/controller for Kubernetes. This proposal is aimed at defining what that operator should look like, and adding it to Kubeflow.\n\n## Goals\n\nA Kubeflow user should be able to run training using PyTorch as easily as then can using Tensorflow. This proposal is centered around a Kubernetes operator for PyTorch. A user should be able to run both single node and distributed training jobs with PyTorch.\n\nThis proposal defines the following:\n\n- A PyTorch operator\n- A way to deploy the operator with ksonnet\n- A single pod PyTorch example\n- A distributed PyTorch example\n\n## Non-Goals\n\nFor the scope of this proposal, we won't be addressing the method for serving the model.\n\n## API (CRD and resulting objects)\n\n### Custom Resource Definition\n\nThe custom resource submitted to the Kubernetes API would look something like this:\n\n```yaml\napiVersion: \"kubeflow.org/v1alpha1\"\nkind: \"PyTorchJob\"\nmetadata:\n  name: \"example-job\"\nspec:\n  backend: \"gloo\"\n  masterPort: \"23456\"\n  replicaSpecs:\n    - replicas: 1\n      ReplicaType: MASTER\n      template:\n        spec:\n          containers:\n            - image: pytorch/pytorch:latest\n              name: master\n              imagePullPolicy: IfNotPresent\n          restartPolicy: OnFailure\n    - replicas: 2\n      ReplicaType: WORKER\n      template:\n        spec:\n          containers:\n            - image: pytorch/pytorch:latest\n              name: worker\n          restartPolicy: OnFailure\n```\n\nThis PyTorchJob resembles the existing TFJob for the tf-operator. The main differences being the omission of the parameter server replica type, and the addition of `masterPort` and `backend` options.\n\n`backend` Defines the protocol the PyTorch workers will use to communicate when initializing the worker group. Information on the different backends (and the functions they support) can be found [here](http://pytorch.org/docs/master/distributed.html).\n\n`masterPort` Defines the port the group will use to communicate with the master's Kubernetes service.\n\n### Resulting Master\n\n```yaml\nkind: Service\napiVersion: v1\nmetadata:\n  name: pytorch-master-${job_id}\nspec:\n  selector:\n    app: pytorch-master-${job_id}\n  ports:\n    - port: 23456\n      targetPort: 23456\n```\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: pytorch-master-${job_id}\n  labels:\n    app: pytorchmaster-${job_id}\nspec:\n  containers:\n    - image: pytorch/pytorch:latest\n      imagePullPolicy: IfNotPresent\n      name: master\n      env:\n        - name: MASTER_PORT\n          value: \"23456\"\n        - name: MASTER_ADDR\n          value: \"localhost\"\n        - name: WORLD_SIZE\n          value: \"3\"\n          # Rank 0 is the master\n        - name: RANK\n          value: \"0\"\n      ports:\n        - name: masterPort\n          containerPort: 23456\n  restartPolicy: OnFailure\n```\n\nThe master spec will create a service and a pod. The environment variables provided are used when initializing a distributed process group with PyTorch. `WORLD_SIZE` is determined by adding the number of replicas in both 'MASTER' and 'WORKER' replicaSpecs. `RANK` is 0 for the master.\n\n### Resulting Worker\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: py-torchjob-worker-${job_id}\nspec:\n  containers:\n    - image: pytorch/pytorch:latest\n      imagePullPolicy: IfNotPresent\n      name: worker\n      env:\n        - name: MASTER_PORT\n          value: \"23456\"\n        - name: MASTER_ADDR\n          value: pytorch-master-${job_id}\n        - name: WORLD_SIZE\n          value: \"3\"\n        - name: RANK\n          value: \"1\"\n  restartPolicy: OnFailure\n```\n\nThe worker spec generates a pod. They will communicate to the master through the master's service name.\n\n## Design\n\nThis is an implementaion of the PyTorch distributed design patterns, found [here](http://pytorch.org/tutorials/intermediate/dist_tuto.html), via the lense of TFJob found [here](https://github.com/kubeflow/tf-operator). In the case of Kubernetes, because the operator is able to easily apply configurations to each process, we will use the environment variable initialization method found [here](http://pytorch.org/tutorials/intermediate/dist_tuto.html#initialization-methods).\n\nIn most training examples, the pods will communicate via the all-reduce function in order to average the gradients.\n![All-Reduce Pytorch](all-reduce-pytorch-operator.jpeg)\n\n## Alternatives Considered\n\nOne alternative considered for the CRD spec is shown below:\n\n```yaml\napiVersion: \"kubeflow.org/v1alpha1\"\nkind: \"PyTorchJob\"\nmetadata:\n  name: \"example-job\"\nspec:\n  backend: \"gloo\"\n  masterPort: \"23456\"\n  worldSize: 3\n  container:\n    - image: pytorch/pytorch:latest\n```\n\nThe idea was the number of replicas for worker and masters could be derived from the `worldSize` given there would only be one master. It was decided against based on the fact that it deviates from a regular replicaSpec and provides less customization.\n"
  },
  {
    "path": "proposals/335-fate-operator/README.md",
    "content": "- [Background](#background)\n- [Motivation](#motivation)\n- [Goals](#goals)\n- [Non-Goals](#non-goals)\n- [Design](#design)\n  - [Container images and deploying FATE cluster on\n    Kubernetes](#container-images-and-deploying-fate-cluster-on-kubernetes)\n  - [Custom Resource Definition](#custom-resource-definition)\n    - [Kubefate](#kubefate)\n    - [FATECluster](#fatecluster)\n    - [FateJob](#fatejob)\n  - [Controller design](#controller-design)\n- [Reference](#reference)\n\n_Status_\n\n- 2020-6-3 - Draft v3\n- 2020-5-28 - Draft v2\n- 2020-5-14 – Draft v1\n\n# KEP-335: Fate Operator\n\n## Background\n\nFederated machine learning (FML) is a machine learning setting where many clients (e.g. mobile devices or organizations) collaboratively train a model under the coordination of a central server while keeping the training data decentralized. Only the encrypted mediate parameters are exchanged between clients with MPC or homomorphic encryption.\n![Federated Machine Learning](fate-operator-fl.png)\n\nFML has received significant interest recently, because of its effectiveness to solve data silos and data privacy preserving problems. Companies participated in federated machine learning include 4Paradigm, Ant Financial, Data Republic, Google, Huawei, Intel, JD.com, Microsoft, Nvidia, OpenMind, Pingan Technology, Sharemind, Tencent, VMware, Webank etc.\n\nDepending on the differences in features and sample data space, federated machine learning can be classified into _horizontal federated machine learning_, _vertical federated machine learning_ and _federated transfer learning_. Horizontal federated machine learning is also called sample-based federated machine learning, which means data sets share the same feature space but have different samples. With horizontal federated machine learning, we can gather the relatively small or partial datasets into a big one to increase the performance of trained models. Vertical federated machine learning is applicable to the cases where there are two datasets with different feature space but share same sample ID. With vertical federated machine learning we can train a model with attributes from different organizations for a full profile. Vertical federated machine learning is required to redesign most of machine learning algorithms. Federated transfer learning applies to scenarios where there are two datasets with different features space but also different samples.\n\n[FATE (Federated AI Technology Enabler)](https://fate.fedai.org) is an open source project initialized by Webank, [now hosted at the Linux Foundation](https://fate.fedai.org/2019/09/18/first-digital-only-bank-in-china-joins-linux-foundation/). FATE is the only open source FML framework that supports both horizontal and vertical FML currently. The architecture design of FATE is focused on providing FML platform for enterprises. [KubeFATE](https://github.com/FederatedAI/KubeFATE) is an open source project to deploy FATE on Kubernetes and is a proven effective solution for FML use cases.\n\nMore technologies of Federated machine learning, please refer to [Reference section](#reference)\n\n## Case studies\n\nThere are 130+ enterprises and organizations, 150+ colleges participating in FATE project. FATE case studies refer to [Cases](https://www.fedai.org/cases/):\n\n1. [Utilization of FATE in Risk Management of Credit in Small and Micro Enterprises](https://www.fedai.org/cases/utilization-of-fate-in-risk-management-of-credit-in-small-and-micro-enterprises/)\n2. [Computer vision Platform powered by Federated Learning](https://www.fedai.org/cases/computer-vision-platform-powered-by-federated-learning/)\n3. [A case of traffic violations insurance-using federated learning](https://www.fedai.org/cases/a-case-of-traffic-violations-insurance-using-federated-learning/)\n4. [Utilization of FATE in Anti Money Laundering Through Multiple Banks](https://www.fedai.org/cases/utilization-of-fate-in-anti-money-laundering-through-multiple-banks/)\n\nOther Federated Machine Learning cases:\n\n1. [Federated Learning for Mobile Keyboard Prediction](https://research.google/pubs/pub47586/)\n2. [Federated Learning powered by NVIDIA Clara](https://devblogs.nvidia.com/federated-learning-clara/): hospitals and medical institutions collaboratively share and combine their local knowledge\n3. [Owkin Launches the Collaborative COVID-19 Open AI Consortium (COAI)](https://www.unite.ai/covid-19-open-ai-consortium/)\n\n## Motivation\n\nKubeflow provides a toolset for end-to-end machine learning workflow on Kubernetes. Introducing the capability of federated learning to Kubeflow helps FML users and researchers leverage existing Kubeflow toolkits in their workflows and help them more efficiently build FML solutions.\n\nA FATE-Operator is a start of supporting FML in Kubeflow. This proposal is aimed to defining what FATE operator should look like, and how to apply to Kubeflow.\n\n## Goals\n\nA Kubeflow user should be able to run training using FATE as easily as they can using PyTorch, Tensorflow. This proposal is centered around a Kubernetes Operator for FATE. With the FATE-Operator, a user can:\n\n1. Provision and manage a FATE cluster;\n2. Submit an FML job to FATE.\n\nThis proposal defines the following:\n\n1. A FATE operator with three CRDs:\n\n- FateJob: create an FML job;\n- FateCluster: create a FATE cluster to serve FML jobs;\n- Kubefate: the resource management component of FATE cluster.\n\n2. Example of full lifecycle to create KubeFATE component, deploy FATE cluster and submit an FML job to created FATE and get the result. Note that, KubeFATE and FATE cluster only needs to be deployed once, and can handle multiple jobs.\n\n## Non-Goals\n\nFor the scope of this proposal, we won’t be addressing the method of serving the model.\n\n## Design\n\n### Container images and deploying FATE cluster on Kubernetes\n\nWe have built a set of Docker images for FATE cluster, and put into: https://hub.docker.com/orgs/federatedai/repositories . All the images have been already used and verified by community users.\n\nThere is a provisioning and management component of FATE cluster, called [KubeFATE](https://github.com/FederatedAI/KubeFATE/tree/master/k8s-deploy). KubeFATE manages FATE clusters of one party in a federation.\n\nAll images work well and are proven in users’ environments.\n\n### Custom Resource Definition\n\n#### Kubefate\n\n```\napiVersion: app.kubefate.net/v1beta1\nkind: Kubefate\nmetadata:\n  name: kubefate-sample\n  namespace: kube-fate\nspec:\n  imageVersion: v1.0.3\n  host: kubefate.net\n  # kubefate config\n  config:\n    - name: FATECLOUD_MONGO_URL\n      value: \"mongo:27017\"\n    - name: FATECLOUD_MONGO_USERNAME\n      valueFrom:\n        secretKeyRef:\n          name: kubefate-secret\n          key: mongoUsername\n    - name: FATECLOUD_MONGO_PASSWORD\n      valueFrom:\n        secretKeyRef:\n          name: kubefate-secret\n          key: mongoPassword\n    - name: FATECLOUD_MONGO_DATABASE\n      value: \"KubeFate\"\n    - name: FATECLOUD_USER_USERNAME\n      valueFrom:\n        secretKeyRef:\n          name: kubefate-secret\n          key: kubefateUsername\n    - name: FATECLOUD_USER_PASSWORD\n      valueFrom:\n        secretKeyRef:\n          name: kubefate-secret\n          key: kubefatePassword\n```\n\nKubeFATE is a core component to manage and coordinate FATE clusters in one FML party. The above CRD defines the KubeFATE component.\n\n- host defines other components how to access the service service gateway of KubeFATE exposed.\n\n#### FATECluster\n\n```\napiVersion: app.kubefate.net/v1beta1\nkind: FateCluster\nmetadata:\n  name: fatecluster-sample\n  namespace: fate-9999\nspec:\n  version: v1.4.0\n  partyId: \"9999\"\n  proxyPort: \"30009\"\n  partyList:\n  - partyId: \"10000\"\n    partyIp: \"192.168.1.10\"\n    partyPort: \"30010\"\n  egg:\n    replica: 1\n\n  # KubeFATE service deployed in Org.\n  kubefate:\n    name: kubefate-sample\n    namespace:  kube-fate\n```\n\nThe FateCluster defines a deployment of FATE on Kubernetes.\n\n- version defines the FATE version deployed in Kubernetes;\n- partyId defines the FML party’s ID;\n- proxyPort defines the exposed port for exchanging models and parameters between different parties in an FML training. It will be exposed as a node port;\n- partyList defines the parties in a federation which take part in collaboratively learning;\n- egg is the worker nodes of FATE.\n\n#### FateJob\n\n```\napiVersion: app.kubefate.net/v1beta1\nkind: FateJob\nmetadata:\n  name: fatejob-sample\n  namespace: fate-9999\nspec:\n  # FATE cluster deployed in the Org.\n  fateClusterRef: fatecluster-sample\n  jobConf:\n    pipeline: |-\n      {\n        \"components\": {\n          \"secure_add_example_0\": {\n            \"module\": \"SecureAddExample\"\n          }\n        }\n      }\n    modulesConfig: |-\n      {\n        \"initiator\": {\n          \"role\": \"guest\",\n          \"party_id\": 9999\n        },\n        \"job_parameters\": {\n          \"work_mode\": 1\n        },\n        \"role\": {\n          \"guest\": [\n            9999\n          ],\n          \"host\": [\n            9999\n          ]\n        },\n        \"role_parameters\": {\n          \"guest\": {\n            \"secure_add_example_0\": {\n              \"seed\": [\n                123\n              ]\n            }\n          },\n          \"host\": {\n            \"secure_add_example_0\": {\n              \"seed\": [\n                321\n              ]\n            }\n          }\n        },\n        \"algorithm_parameters\": {\n          \"secure_add_example_0\": {\n            \"partition\": 10,\n            \"data_num\": 1000\n          }\n        }\n      }\n```\n\nFateJob defines the job sent to FATE cluster:\n\n- fateClusterRef defines the cluster of FATE deployed on Kubernetes. Its value is resource name of FATE cluster created by CRD “FateCluster”;\n- jobConf defines the details of an FML job. It includes:\n  - pipeline: the workflow pipeline of FATE. In FATE, there are many prebuilt algorithm components (ref: https://github.com/FederatedAI/FATE/tree/master/federatedml and https://github.com/FederatedAI/FATE/tree/master/federatedrec), which can be used to train models. The pipeline defines how data are passed through and processed in the whole training flow;\n  - moduleConf: the detail configuration of each algorithm component, e.g. the optimizers, the batch size etc.\n\n### Controller design\n\nWe created a new custom controller for FateCluster, FateJob and Kubefate resources.\n\nThe relationship between them and processes to make everything work are shown as following diagrams.\n\nProcess 1. Creating Kubefate if it does not exist. The custom controller (1) listens for Kubefate resource, (2) creates RBAC resources (Role, Service Account, RoleBinding) to allow remote execution, (3) creates the related resource of Kubefate. (4) The controller waits the resource of Kubefate to be ready and returns the status.\n\n![Process 1](fate-operator-1.png)\n\nProcess 2. Creating FATE cluster. In one party, only one Kubefate instance needs to be provisioned. Multiple FATE clusters can be provisioned by KubeFATe for different purposes. (1) The custom FATE controller listens for FateCluster custom resource, (2) and calls Kubefate cluster of the one federated party, sends the metadata and configurations (3) to create a FATE cluster. (4) The controller waits the resource of FATE to be ready and returns the status.\n\n![Process 2](fate-operator-2.png)\n\nProcess 3. Submitting an FML job to FATE cluster. (1) The custom FATE controller listens for FateJob CRD, and sends the job to FATE cluster, which includes the pipeline and modules configuration. (3) The FATE controller waits for the job results from FATE cluster.\n\n![Process 3](fate-operator-3.png)\n\nThe overall architecture of the federated learning can be presented as following diagram, the FATE cluster will handle the communication and return to FATE controller once the job is done.\n\n![Overall](fate-operator-overall.png)\n\n## Reference\n\n1. Qiang Yang, Yang Liu, Tianjian Chen, and Yongxin Tong. Federated machine learning: Concept and applications. CoRR, abs/1902.04885, 2019. URL http://arxiv.org/abs/1902.04885\n2. Peter Kairouz et al. Advances and open problems in federated learning. arXiv preprint arXiv:1912.04977\n"
  },
  {
    "path": "proposals/41-caffe2-operator/README.md",
    "content": "<!-- START doctoc generated TOC please keep comment here to allow auto update -->\n<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\n\n**Table of Contents** _generated with [DocToc](https://github.com/thlorenz/doctoc)_\n\n- [Motivation](#motivation)\n- [Goals](#goals)\n- [Non-Goals](#non-goals)\n- [API (CRD and resulting objects)](#api-crd-and-resulting-objects)\n  - [Custom Resource Definition](#custom-resource-definition)\n  - [Resulting Master](#resulting-master)\n  - [Resulting Worker](#resulting-worker)\n- [Design](#design)\n- [Other backends](#other-backends)\n\n<!-- END doctoc generated TOC please keep comment here to allow auto update -->\n\n_Status_\n\n- 2018-04-06 - Accepted\n\n# KEP-41: Caffe2 Operator\n\n## Motivation\n\nCaffe2 is a popular machine learning framework which currently does not have an operator/controller for Kubernetes. This proposal is aimed at defining what that operator should look like, and adding it to Kubeflow.\n\nFor distributed training, Caffe2 has no parameter server compared with Tensorflow, so it has to use Redis/MPI to find the other nodes to communicate.\n\n## Goals\n\nA Kubeflow user should be able to run training using Caffe2 as easily as they can using Tensorflow. This proposal is centered around a Kubernetes operator for Caffe2. A user should be able to run both single node and distributed training jobs with Caffe2.\n\nThis proposal defines the following:\n\n- A Caffe2 operator\n- A way to deploy the operator with kubectl\n- A single pod Caffe2 example\n- A distributed Caffe2 example\n- A distributed Caffe2 proposal with [batchd scheduler](https://github.com/kubernetes-incubator/kube-arbitrator)\n\n## Non-Goals\n\nFor the scope of this proposal, we won't be addressing the method for serving the model.\n\n## API (CRD and resulting objects)\n\n### Custom Resource Definition\n\nThe custom resource submitted to the Kubernetes API would look something like this:\n\n```yaml\napiVersion: \"kubeflow.org/v1alpha1\"\nkind: \"Caffe2Job\"\nmetadata:\n  name: \"example-job\"\nspec:\n  backend: \"redis\"\n  replicaSpecs:\n    - replicas: 1\n      ReplicaType: MASTER\n      template:\n        spec:\n          hostNetwork: true\n          containers:\n            - image: carmark/caffe2:latest\n              name: caffe2\n              securityContext:\n                capabilities:\n                  add: [\"ALL\"]\n          restartPolicy: Never\n    - replicas: 2\n      ReplicaType: WORKER\n      template:\n        spec:\n          hostNetwork: true\n          containers:\n            - image: carmark/caffe2:latest\n              securityContext:\n                capabilities:\n                  add: [\"ALL\"]\n              name: caffe2\n          restartPolicy: Never\n    - replicas: 1\n      ReplicaType: HELPER\n      template:\n        spec:\n          containers:\n            - image: redis:latest\n              name: redis\n              ports:\n                - containerPort: 6379\n          restartPolicy: Never\n```\n\nThis Caffe2Job resembles the existing TFJob for the tf-operator. The main differences being the omission of the parameter server replica type, and the addition of `backend` options and `HELPER` replica type.\n\n`backend` Defines the distributed type the Caffe2 master and workers will use to communicate when initializing the worker group. Information on the different backends (and the functions they support) can be found [here](https://caffe2.ai/docs/distributed-training.html).\n\n`HELPER` replica type will be used to service finding for `redis` backend, and will be useless for `gloo` backend.\n\n### Resulting Master\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: caffe2-master-${job_id}\n  labels: app=caffe2-job-xx\n    caffe2_job_name=example-job\n    controller-uid=dc3669c6-29f1-11e8-9ccd-ac1f6b8040c6\n    job-name=example-job-master-20lm-1\n    job_type=MASTER\n    kubeflow.org=\n    runtime_id=20lm\n    task_index=0\nspec:\n  containers:\n    - image: carmark/caffe2:latest\n      imagePullPolicy: IfNotPresent\n      name: caffe2\n  restartPolicy: Never\n```\n\nThe labels variables provided are used when initializing a distributed process group with Caffe2. `task_index` is determined by adding the number of replicas in each 'MASTER' and 'WORKER' replicaSpecs. `job_type` is `MASTER` for the master.\n\n### Resulting Worker\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: caffe2-worker-${job_id}\n  labels: app=caffe2-job-xx\n    caffe2_job_name=example-job\n    controller-uid=dc3669c6-29f1-11e8-9ccd-ac1f6b8040c6\n    job-name=example-job-worker-20lm-0\n    job_type=WORKER\n    kubeflow.org=\n    runtime_id=20lm\n    task_index=0\nspec:\n  containers:\n    - image: carmark/caffe2:latest\n      imagePullPolicy: IfNotPresent\n      name: caffe2\n  restartPolicy: Never\n```\n\nThe worker spec generates a pod. They will communicate to the master through the redis's service name.\n\n## Design\n\nThis is an implementaion of the Caffe2 distributed design patterns, found [here](https://caffe2.ai/docs/SynchronousSGD.html), via the lense of TFJob found [here](https://github.com/kubeflow/tf-operator).\n\nDiagram pending\n\n## Other backends\n\nForm [here](https://caffe2.ai/docs/distributed-training.html), Caffe2 also support [Gloo](https://github.com/facebookincubator/gloo) which is another communications library for multi-machine training. For Gloo with MPI, we do not neet the redis to communicate, the master and workers will communicate by ssh. So it should better to define another sshd port to communicate in container, then start the works first and then master container.\n\nTo finish this start process, we may invole the [batchd scheduler](https://github.com/kubernetes-incubator/kube-arbitrator) and use priority class to define the priority.\n"
  },
  {
    "path": "proposals/434-kubeflow-distribution/README.md",
    "content": "# KEP-434: Kubeflow Distributions\n\n## Objective\n\nClarify how Kubeflow distributions will be owned and developed going forward.\n\n## Motivation\n\nKubeflow can be divided into pieces\n\n1. Individual Kubeflow applications (e.g. Pipelines, KFServing, notebooks, etc...)\n1. Distributions of Kubeflow (e.g. Kubeflow on GCP, Kubeflow on AWS, MiniKF, etc...)\n\nSince July, the Kubeflow community has been working on forming working groups to create greater\naccountability for the different parts of Kubeflow.\n\nAt this point in time, Kubeflow has formed working groups with clear ownership for all of the individual Kubeflow\napplications.\n\nThere is an ongoing debate about who should own and maintain Kubeflow distributions.\n\nTo date there are two categories of distributions\n\n1. Kubeflow distributions tied to a specific platform (e.g. AWS, GCP, etc...)\n1. Generic distributions (e.g. for MiniKube, any conformant K8s cluster, etc...)\n\nThe former have been owned and maintained by the respective vendors. The general consensus is that these should continue\nto be owned and maintained by the respective vendors outside any KF working group.\n\nThis leaves the question of what to do about generic distributions. In particular, in [kubeflow/community#402](https://github.com/kubeflow/community/pull/402) there was a long debate about whether the deployments working group would own them or not. That discussion appears to be converging with the decision being that the deployments working group will not own any distributions.\n\n## Proposal\n\nGoing forward all distributions of Kubeflow should be owned and maintained outside of Kubeflow.\n\n### What is a Kubeflow Distribution\n\nA Kubeflow distribution is an opinionated bundle of Kubeflow applications optimized for a particular use case or environment.\n\n### Ownership & Development\n\nGoing forward new distributions of Kubeflow should be developed outside of the Kubeflow GitHub org. This ensures\n\n- Accountability for the distribution\n- Insulates Kubeflow from the success or failure of the distribution\n- Avoid further taxing Kubeflow's overstretched engprod resources(see[kubeflow/testing#737](https://github.com/kubeflow/testing/issues/737))\n\nThe owners of existing distributions should work with the respective WG/repository/org owners to come up with appropriate transition plans.\n\n### Naming\n\nDistributions of Kubeflow are encouraged to pick unique names that avoid creating confusion and conflict by suggesting that\na given distribution is endorsed by Kubeflow.\n\nAs an example, the name \"KFCube\" for a distribution targeting minikube is highly discouraged as this suggests the distribution is endorsed by Kubefow. An alternative, like \"MLCube\" would be preferable.\n\n### Releasing & Versioning\n\nReleasing and versioning for each distribution is the responsibility of the distribution owners.\nThis includes determining the release cadence. The release cadence of distributions doesn't need to be in sync\nwith Kubeflow releases.\n\n## Alternatives Considered\n\nAn alternative would be to spin up a work group to own or maintain one or more generic distribution.\n\nThis has the following disadvantages\n\n- Distributions aren't treated uniformly as some distributions are owned by Kubeflow and thus implicitly endorsed by Kubeflow\n- Historically, creating accountability for generic distributions has been difficult\n"
  },
  {
    "path": "proposals/502-paddle-operator/README.md",
    "content": "# KEP-502: Paddle Operator Proposal\n\n## Motivation\n\n[PaddlePaddle](https://github.com/paddlepaddle) is a widely used machine learning framework in China. However there is no easy way to launch PaddlePaddle training jobs on Kubernetes. By providing a CRD and a custom controller, we can make PaddlePaddle distributed training simple for end users. For more information about PaddlePaddle, please check our [website](https://www.paddlepaddle.org.cn/).\n\n## Goals\n\nKubeflow user should be able to run training using PaddlePaddle easily on Kubernetes. This will be implemented by using Kubernetes operator. An end user can run training jobs with PaddlePaddle on local or cloud.\n\nThe proposal defines the followings:\n\n- Provide a Custom Resource Definition (CRD) for defining PaddlePaddle training job, currently supports running two distributed tasks, ParameterServer (PS) and Collective.\n- Implement a controller to manage the CRD, create dependent resources, and reconcile to the desired states.\n- The script for operator and controller deployment.\n- Several distributed PaddlePaddle training examples.\n\n## Non-Goals\n\nFor the model serving part, it will not be included in the paddle-operator.\n\n## API (CRD and resulting objects)\n\n```\n    deploy\n    |-- examples\n    |   |-- resnet.yaml\n    |   |-- wide_and_deep.yaml\n    |   |-- wide_and_deep_podip.yaml\n    |   |-- wide_and_deep_service.yaml\n    |   `-- wide_and_deep_volcano.yaml\n    |-- v1\n    |   |-- crd.yaml\n    |   `-- operator.yaml\n    `-- v1beta1\n        |-- crd.yaml\n        `-- operator.yaml\n```\n\n### Custom Resource Definition\n\nThe custom resource definition yaml example is as following:\n\n```yaml\napiVersion: batch.paddlepaddle.org/v1\nkind: PaddleJob\nmetadata:\n  name: wide-ande-deep\nspec:\n  withGloo: 1\n  intranet: PodIP\n  cleanPodPolicy: OnCompletion\n  worker:\n    replicas: 2\n    template:\n      spec:\n        containers:\n          - name: paddle\n            image: registry.baidubce.com/paddle-operator/demo-wide-and-deep:v1\n  ps:\n    replicas: 2\n    template:\n      spec:\n        containers:\n          - name: paddle\n            image: registry.baidubce.com/paddle-operator/demo-wide-and-deep:v1\n```\n\n- The optional configuration of withGloo is 0 not enabled, 1 only starts the worker side, 2 starts all (worker and server), it is recommended to set 1;\n\n- The cleanPodPolicy can be optionally configured as Always/Never/OnFailure/OnCompletion, which indicates whether to delete the pod when the task is terminated (failed or successful). It is recommended to Never during debugging and OnCompletion during production;\n\n- The intranet can be optionally configured as Service/PodIP, which means the communication method between pods. The user does not need to configure it, and PodIP is used by default;\n\n- The content of ps and worker is podTemplateSpec. Users can add more content according to the Kubernetes specification, such as GPU configuration.\n\nWe also provide PaddlePaddle collective mode with GPU.\n\n```\napiVersion: batch.paddlepaddle.org/v1\nkind: PaddleJob\nmetadata:\n  name: resnet\nspec:\n  cleanPodPolicy: Never\n  worker:\n    replicas: 2\n    template:\n      spec:\n        containers:\n          - name: paddle\n            image: registry.baidubce.com/paddle-operator/demo-resnet:v1\n            command:\n            - python\n            args:\n            - \"-m\"\n            - \"paddle.distributed.launch\"\n            - \"train_fleet.py\"\n            volumeMounts:\n            - mountPath: /dev/shm\n              name: dshm\n            resources:\n              limits:\n                nvidia.com/gpu: 1\n        volumes:\n        - name: dshm\n          emptyDir:\n            medium: Memory\n```\n\n- Here you need to add shared memory to mount to prevent cache errors;\n\n- This example uses the built-in data set. After the program is started, it will be downloaded. Depending on the network environment, it may wait a long time.\n\n### Resulting Master\n\n```yaml\napiVersion: v1\nkind: Service\nmetadata:\n  name: wide-ande-deep-service-ps-0\n  namespace: paddle-system\n  ownerReferences:\n    - apiVersion: batch.paddlepaddle.org/v1\n      blockOwnerDeletion: true\n      controller: true\n      kind: PaddleJob\n      name: wide-ande-deep-service\n      uid: 8f432e67-8cda-482c-b147-91f9d4400067\n  resourceVersion: \"9513616\"\n  selfLink: /api/v1/namespaces/paddle-system/services/wide-ande-deep-service-ps-0\n  uid: e274db1e-ee7f-4b6d-bc0c-034c32f4b7a1\nspec:\n  clusterIP: None\n  ports:\n    - port: 2379\n      protocol: TCP\n      targetPort: 2379\n  selector:\n    paddle-res-name: wide-ande-deep-service-ps-0\n  sessionAffinity: None\n  type: ClusterIP\n```\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: wide-ande-deep-ps-0\n  namespace: paddle-system\n  ownerReferences:\n    - apiVersion: batch.paddlepaddle.org/v1\n      blockOwnerDeletion: true\n      controller: true\n      kind: PaddleJob\n      name: wide-ande-deep\n      uid: f206587f-5dee-46f5-9399-e835bde02487\n  resourceVersion: \"9506900\"\n  selfLink: /api/v1/namespaces/paddle-system/pods/wide-ande-deep-ps-0\n  uid: 36b27c8f-9712-474b-b21b-dd6b54aaef29\nspec:\n  containers:\n    - env:\n        - name: POD_IP\n          valueFrom:\n            fieldRef:\n              apiVersion: v1\n              fieldPath: status.podIP\n        - name: PADDLE_TRAINER_ID\n          value: \"0\"\n        - name: TRAINING_ROLE\n          value: PSERVER\n        - name: PADDLE_TRAINING_ROLE\n          value: PSERVER\n      envFrom:\n        - configMapRef:\n            name: wide-ande-deep\n      image: registry.baidubce.com/paddle-operator/demo-wide-and-deep:v1\n```\n\n### Resulting Worker\n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: wide-ande-deep-worker-0\n  namespace: paddle-system\n  ownerReferences:\n    - apiVersion: batch.paddlepaddle.org/v1\n      blockOwnerDeletion: true\n      controller: true\n      kind: PaddleJob\n      name: wide-ande-deep\n      uid: f206587f-5dee-46f5-9399-e835bde02487\n  resourceVersion: \"9507629\"\n  selfLink: /api/v1/namespaces/paddle-system/pods/wide-ande-deep-worker-0\n  uid: e8534fe6-7c2e-4849-9a99-ffdcd5df76bb\nspec:\n  containers:\n    - env:\n        - name: POD_IP\n          valueFrom:\n            fieldRef:\n              apiVersion: v1\n              fieldPath: status.podIP\n        - name: PADDLE_TRAINER_ID\n          value: \"0\"\n        - name: TRAINING_ROLE\n          value: TRAINER\n        - name: PADDLE_TRAINING_ROLE\n          value: TRAINER\n      envFrom:\n        - configMapRef:\n            name: wide-ande-deep\n      image: registry.baidubce.com/paddle-operator/demo-wide-and-deep:v1\n```\n\nThe worker spec generates a pod. Currently worker will communicate to the master through the master's service name, we'll use a service registry for service discovery.\n\n## Design\n\nHere are some original design docs for paddle-perator on Kubernetes.\n\n- Paddle Operator Architecture on Kubernetes, please check out [design-arch](https://github.com/PaddleFlow/paddle-operator/blob/main/docs/design-arch.md)\n- Paddle training job instance fault tolerant, please check out [design-fault-tolerant](https://github.com/PaddleFlow/paddle-operator/blob/main/docs/design-fault-tolerant.md)\n- Co-scheduling training job to prevent job instances from resource deadlock, please check out [design-coschedule](https://github.com/PaddleFlow/paddle-operator/blob/main/docs/design-coschedule.md)\n\n## Alternatives Considered\n\nOne option is to add PaddlePaddle support to the existing tf-operator, but the parameters and operations between two frameworks are quite different. Combining them may make the user experience unnecessarily complicated.\n\n## Current Status\n\nWe recently refactored the paddle-operator for better performance and code readability. And we'll merge the dev branch back into main branch soon, so our real code branch is `dev` at this moment.\n"
  },
  {
    "path": "proposals/524-kubeflow-conformance-program/README.md",
    "content": "# KEP-524: Kubeflow Conformance Test\n\nJames Wu (james-jwu@)  \n2021-07-29  \n[link to Google doc](https://docs.google.com/document/d/1a9ufoe_6DB1eSjpE9eK5nRBoH3ItoSkbPfxRA0AjPIc/edit?resourcekey=0-IRtbQzWfw5L_geRJ7F7GWQ#)\n\n# Overview\n\nThe [Kubeflow Project](https://github.com/kubeflow) is currently managed by different [Working Groups](https://github.com/kubeflow/community/blob/master/wg-list.md) whose composition represents a broad spectrum of industry and community. The Kubeflow trademark is owned by Google.\n\nThe [Kubeflow Brand Guidelines](https://github.com/kubeflow/community/blob/master/KUBEFLOW_BRAND_GUIDELINES.pdf) was published in Mar. 2021. The guideline is broadly applicable to usage of Kubeflow trademark by products, events and publications. While the brand guidelines provide general guidance, it does not prescribe the definition of Kubeflow and what makes a distribution/application \"Kubeflow\" vs. not \"Kubeflow\".\n\nThis document aims to define conformance criteria for the following usage of Kubeflow trademark:\n\n- For Kubeflow distribution - \"Certified Kubeflow\"\n- For Kubeflow application - TBD\n\nThe goal is to ensure these special usages of Kubeflow trademark meet common standards of interoperability, increase cohesiveness of the Kubeflow platform, promote customer confidence, reduce the burden of Kubeflow maintainers, and extend Kubeflow’s influence beyond the Kubeflow project.\n\n# Certified Kubeflow (for Kubeflow Distribution)\n\n**A conformant Kubeflow Distribution is certified to provide a set of core functionalities and API integration options.**\n\nThe tests will be designed in a way similar to [Kubernetes conformance program](https://github.com/cncf/k8s-conformance).\n\nThe tests will be versioned. Each versioned certification is valid for 1 year. After 1 year, recertification against the latest version of the test will be required to maintain certification standing.\n\n## Entitlements\n\n- Conformant distributions are entitled to refer to the distribution as \"**Certified Kubeflow**\". Example usage:\n  - Appending “(Certified Kubeflow)” to the distribution name: e.g. AI-IS-FUN (Certified Kubeflow)\n  - Reference the Certified Kubeflow designation in discussion with customers, or on public documentation\n- Display a logo (to be designed) on the public website and documentation of the distribution\n- Be listed under a partner web page under the Kubeflow project.\n- The naming of the distribution still needs to follow [Kubeflow Brand Guidelines](https://github.com/kubeflow/community/blob/master/KUBEFLOW_BRAND_GUIDELINES.pdf).\n\n## Out of scope\n\nThe following are out of scope of the conformance tests:\n\n1. Product quality and supportability\n\nThe test design is strongly influenced by Kubernetes conformance program, where a very narrow set of tests are established to verify key API functionality. Since the tests are versioned, it is hoped that unsupported distributions will fall out of conformance by discontinuing the certification with the latest test version.\n\n2. Development and distribution channel\n\nThe test will not verify how the distribution is developed (e.g. in Kubeflow organization vs. outside), or how the distribution is made available to users. Such criteria are left to the Kubeflow organization to define and enforce.\n\n## Example\n\nCompany X creates a distribution of Kubeflow and plans to name it \"X Kubeflow Service\". Company X tries to certify for Kubeflow conformance, which entails:\n\n- Install the distribution\n- Runs the Kubflow conformance test suite\n- Submits the test log as a PR to Kubeflow Trademark Team for approval.\n- Upon approval and following trademark guidelines, Company X changes the distribution name to \"X service for Kubeflow\", or \"X Platform (Certified Kubeflow)\"\n- Optionally, the distribution may be listed in a catalog on Kubeflow website\n\nThe conformance tests make sure \"X service for Kubeflow\" supports KFP and Metadata. Company X may include more applications (e.g. TFJob, Katib) in the distribution, but it does not affect the conformance standing of \"X service for Kubeflow\".\n\n## First version of conformance\n\nThe first version of conformance aims to be inclusive of current components in Kubeflow organization. The number of tests are intentionally kept small to allow fast progress and iteration. We propose:\n\n- Each Kubeflow Working Group nominate <= 10 tests to be included in the conformance suite\n  - We recommend the candidate tests to be simple API acceptance tests that run reliably. Please keep in mind that the certification body is looking for a simple pass/fail to determine certification standing.\n  - There is no precedence for including UI in conformance tests. That said, we will experiment with options to include UI, most likely through self attestation and supporting evidence (e.g. screenshot or video). The details are TBD.\n- Each WG works with the conformance test team (currently staffed by Google) to include the nominated tests into the conformance suite.\n\n**Example**: for Kubeflow Pipelines, the first version of conformance will be limited to V1 Pipeline Runtime conformance. A subset of tests outlined in Appendix A will be included.\n\n# Kubeflow Native (for Kubernetes Application)\n\n**Kubeflow Application certification verifies that the application under test integrates well with Kubeflow.**\n\n1. The application is a Kubernetes Application\n\nKubeflow is by definition “The Machine Learning Toolkit for Kubernetes”. There is no precise definition for “Kubernetes Application”, and Kubernetes does not have a conformance program for applications. For the purpose of Kubeflow certification, we propose “Kubernetes Application” means that the application is deployable via kubectl, kustomize or helm.\n\nVerification is done by self-attestation. The application-under-test needs to include a clause in readme saying “This application is deployable in accordance with the Kubeflow Application Certification Program version 1.0”, with a link leading to the documentation of the conformance program.\n\nWe expect this test to evolve, due to the ambiguity of “Kubenetes Application”.\n\n2. The application-under-test integrates well with Kubeflow.\n\nThe first version of the test verifies that the application is integrated with Kubeflow Pipelines. Pipeline and Metadata are the binding “glue” for other Kubeflow components. Metadata generation is automatic when Kubeflow Application conforms to standard Kubeflow Pipelines component interface.\n\n## Entitlements\n\n- Conformant applications are entitled to refer to the application as “Kubeflow Native”. Example usage:\n  - Appending “(Kubeflow Native)” to the application name: e.g. SUPER-TRAINER (Kubeflow Native)\n  - Reference the Kubeflow Native designation in discussion with customers, or on public documentation\n  - Display a logo (to be designed) on the public website and documentation of the application\n- The application may be listed under an application catalog (to be created) under Kubeflow project.\n- The naming of the application still needs to follow [Kubeflow Brand Guidelines](https://github.com/kubeflow/community/blob/master/KUBEFLOW_BRAND_GUIDELINES.pdf).\n\n## Example\n\nCompany X creates a Kubernetes Custom Resource for model training, and wishes to certify the feature for Kubeflow Application. Company X needs to:\n\n- Create a Kubeflow Pipelines component for launching the custom resource, with inputs and outputs appropriately defined using parameters and artifacts. The component may be published as a Python function or YAML.\n- Add self-attestation to the readme file.\n- Runs conformance tool against the Python source, by specifying the source file, and the component function (in the case of Python function).\n- Submits the test results to Kubeflow Trademark Team for approval.\n- Upon approval, Company X may name the component \"X Training for Kubeflow\", \"X Training <TBD>\"\n\n## Test principles\n\nKubeflow Application conformance test verifies the component function under test conforms to the Kubeflow Pipelines component definition.\n\nProposed CLI:\n\n```\n$ kfp conformance verify-component --file=my_component.py --component_function=my_component\n\n$ kfp conformance verify-component - file=my_component.yaml\n```\n\nThe tests verify the component integrates well with the following:\n\n- Kubeflow Pipeline integration: a well defined component interface ensures the Kubeflow Application under test plays well with other Kubeflow Applications. The test will not try to verify functionality or code quality.\n- Metadata: Kubeflow Pipelines automatically records the input/output parameters and artifacts in metadata. The tests verify the component interfaces. Kubeflow Application candidates can optionally emit metadata, either by using output_metadata mechanism (to be explained), or some other mechanism added to KFP in the future. Kubeflow Application candidates are encouraged to log additional metadata to MLMD but are not required to do so.\n\n## References\n\n- Prior [discussion](https://groups.google.com/g/kubeflow-discuss/c/d6whgEgror8) in Kubeflow community on Kubeflow conformance\n\n# Appendix\n\n## Pipeline tests\n\n- Pipeline runtime\n\n  - V1 conformance\n\n    - The tests use a designated version of KFP SDK to compile a set of pipelines and submit it to the distribution under test.\n\n  - V2 conformance\n\n    - The tests uses a designated version of KFP SDK that compiles pipeline to [IR](https://docs.google.com/document/d/1PUDuSQ8vmeKSBloli53mp7GIvzekaY7sggg6ywy35Dk/edit) (Intermediate Representation)\n    - The IR is submitted to the pipeline server to exercise and verify different KFP features.\n\n  - Below is a categorization of the features and is not meant to be exhaustive.\n    - Artifact and parameter passing\n    - Caching\n    - Executors: container / importer / resolver\n    - Control flow features: ParallelFor, conditional, exit handler\n    - A subset of Kubernetes features (e.g. secrets, volume)\n\n- Pipeline management\n  - Pipeline template management\n  - Pipeline run management (Get / Delete / Cancel / Archive / Retry)\n  - Recurring runs\n\n## Metadata tests\n\n- Metadata lineage - pipeline runs must produce the correct lineage graph including\n\n  - Context\n  - Execution\n  - Artifact\n  - Event\n\n- Metrics - verifies metrics artifacts are produced\n- Metadata APIs (future work)\n"
  },
  {
    "path": "proposals/525-kfserving-transition/README.md",
    "content": "# KEP-525: KFServing Transition to independent Github Organization\n\n## Background and Objective\n\nKFServing is a project created initially by Google, Bloomberg, IBM, NVidia, Seldon under Kubeflow in 2019. It aims to provide a standard production grade model serving solution on Kubernetes.\nAfter publishing the open source project, we have seen an explosion in demand for the software, leading to strong adoption and community growth. The scope of the project has changed since, we have also developed sub components\nlike ModelMesh, Model Web App which now demands its own github organization.\nThe KFServing WG members decide to move KFServing development code out of Kubeflow GitHub organization to its independent organization https://github.com/kserve for the project graduation under\nthe stewardship of [Kubeflow Serving Working Group](https://github.com/kubeflow/community/blob/master/wg-serving/README.md) leads.\n\n## Project Rename\n\nThe project is renamed to `KServe` from `KFServing` to retain the connection and brand recognition.\n\n## Scope of the project Rebrand\n\n### API group change for core components\n\nThe API group is changed from `serving.kubeflow.org` to `serving.kserve.io`.\n\n#### InferenceService Controller\n\n- [Issue 1826:](https://github.com/kserve/kserve/issues/1826) Go module and API group change\n- Regenerate `InferenceService`, `TrainedModel` CRD with the new API group\n- Regenerate OpenAPI spec and `swagger.json`\n\n#### Python SDK\n\nThe Python SDK pypi package is renamed to [kserve](https://pypi.org/project/kserve/) from [kfserving](https://pypi.org/project/kfserving/),\nsee [Issue 1827](https://github.com/kserve/kserve/issues/1827).\n\n- Regenerate python SDK from swagger.json\n- Update SDK API with the new package name `kserve`\n- Update model servers to import the new package `kserve`\n- Update SDK docs\n\n#### Installation Manifests\n\nThe KServe control plane is installed in `kserve` namespace instead of `kfserving-system`, see [Issue 1824](https://github.com/kserve/kserve/issues/1824).\n\n- Update API group for the webhook configurations\n- Update Standalone/Kubeflow installation manifests overlays\n\n#### Development Scripts\n\n- Update quick install script\n- Update `Makefile` and image patch scripts\n\n### KServe CI/CD\n\n#### Prow Setup\n\nProw is designed for using plugins like `/lgtm` `/approve` and integration with github repo members makes it easy to manage all the projects in a fine-grained way,\nthough these can be implemented using individual github plugins. KServe has setup own Prow cluster installed with `Tide` for the github review and approval process using the\n`KServe OSS Bot`.\n\n#### E2E Tests\n\nFor now we reuse the current kubeflow AWS e2e testing infra in the kserve github organization by adding the [configuration](https://github.com/kubeflow/testing/blob/master/aws/GitOps/clusters/optional-test-infra-prow/namespaces/prow/config.yaml#L124)\nto submit the presubmit job to [KServe Github Repository](https://github.com/kserve/kserve/).\n\n- Update e2e presubmit job to use AWS e2e test Bot\n- Update e2e test scripts with new SDK package `kserve`\n\n#### Github Actions\n\nAll the new images released from `KServe` should be published to the [kserve docker hub organization](https://hub.docker.com/u/kserve).\n\n- Migrate all existing images from gcr.io to docker hub\n- Update github workflow to use the dockerhub account `kserve`\n\n### Ecosystem\n\n#### Kubeflow Integration\n\nWe plan to integrate `KServe 0.7` in Kubeflow 1.5 release.\n\n#### Kubeflow Pipeline\n\n- Create a new `KServe` component for `Kubeflow Pipeline`, see [issue 1829](https://github.com/kserve/kserve/issues/1829)\n- Add KServe component to Kubeflow conformance test\n\n#### Models WebApp\n\nSeparate out models web-app to its own repository and setup CI/CD, see [issue 1820](https://github.com/kserve/kserve/issues/1820).\n\n- Test out the models UI after the name change\n\n### Documentation\n\nAll the existing documentation and examples are moving to [kserve/website](https://github.com/kserve/website) which is built with `mkdocs` and the website is hosted on `netlify`.\n\n- Update main concept, architecture diagrams\n- Update administration guide\n- Update core inference examples\n- Update storage examples\n- Update explanation examples\n- Update logger and monitoring examples\n- Update drift detect and outlier examples\n- Update notebook examples\n- Update community and contribution guidelines\n\n### Migration\n\nFor users that are migrating from kfserving, `kserve` installs in its own namespace `kserve`.\nThe migration script scales down the kfserving controller in the cluster, it then converts the `InferenceService CR` from `kubeflow.org` to `kserve.io`, and reconciled in the kserve controller.\nThe migration should not impact the running `InferenceServices`.\n\n![Migration Process](kfserving_migration.png)\n\n### Support\n\nThe previous `KFServing 0.5.x` and `KFServing 0.6.x` released are still supported in six months time frame after `KServe 0.7` is released.\n"
  },
  {
    "path": "proposals/585-kubeflow-governance/CONFORMANCE-COMMITTEE.md",
    "content": "*[This document is work in progress. It will be moved to https://github.com/kubeflow/community/CONFORMANCE-COMMITTEE.md upon completion and approval.]*\n\nThe Interim Kubeflow Steering Committee will propose details of the KCC charter, roles, processes and limitations under this document."
  },
  {
    "path": "proposals/585-kubeflow-governance/GOVERNANCE.md",
    "content": "*[This document is work in progress. It will be moved to https://github.com/kubeflow/community/GOVERNANCE.md upon completion and approval. This document drew a lot of inspirations from [Knative governance](https://github.com/knative/community/blob/main/GOVERNANCE.md).]*\n\nKubeflow Governance consists of three components.\n\n## Kubeflow Steering Committee (KSC)\n\nAt a high level, the [Kubeflow Steering Committee (KSC)](./STEERING-COMMITTEE.md) is the \"root\" level governance body.\n\nKSC is responsible for the general health of the Kubeflow community. Responsibilities include maintaining the governance framework, code of conduct, community meetings, communication platforms, and test resources.\n\n## Kubeflow Conformance Committee (KCC)\n\nThe [Kubeflow Conformance Committee (KCC)](./CONFORMANCE-COMMITTEE.md) is responsible for management, licensing, and conformance verification of Kubeflow logos, names, and trademarks, including the definition of what \"Kubeflow\" is and the definition and rules for usage of derived marks.\n\nKCC operates within a protected governance umbrella in parallel with the KSC. As such, the KSC may investigate and enforce Code of Conduct actions against members of the KCC, but may not alter the charter or governance of the KCC rules.\n\n## Kubeflow Technical Oversight Committee (KTOC)\n\nThe [Kubeflow Technical Oversight Committee (KTOC)](./TECH-OVERSIGHT-COMMITTEE.md) is responsible for the technical oversight, release process, and integration of the technology components of the Kubeflow project. KTOC delegates most day-to-day work to various subject-specific working groups.\nKTOC operates entirely within the governance definitions delineated by the KSC.\n"
  },
  {
    "path": "proposals/585-kubeflow-governance/TECH-OVERSIGHT-COMMITTEE.md",
    "content": "*[This document is work in progress. It will be moved to https://github.com/kubeflow/community/TECH-OVERSIGHT-COMMITTEE.md upon completion and approval.]*\n\nThe Interim Kubeflow Steering Committee will propose details of the KTOC charter, roles, processes and limitations under this document."
  },
  {
    "path": "proposals/645-kubeflow-steering-committee-election/README.md",
    "content": "# KEP-645: KSC Election Process Proposal\n\n## 2 cohorts and Staggered elections\n\nKSC consists of 5 members, made up of 2 cohorts of 3 members and 2 members, respectively. Each cohort will be elected every 2 years, with the election schedule staggered so elections for the 2 rotations occur on alternate years. The staggered cohorts are designed to provide continuity and stability in the project leadership of Kubeflow.  \nThe only exception to the above rule is that the first 2-member rotation consists of 2 members from the Interim KSC, and will be re-elected after 1 year. The goal of having interim KSC members participate in the first KSC is to provide guidance, facilitate asset transitions from Google, and hopefully make the transition in open governance a smooth process.  \nThe table below illustrates the cohorts and election schedules:\n\n<table>\n  <thead>\n    <tr>\n      <th>Timeline</th>\n      <th>2-member cohort</th>\n      <th>3-member cohort</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>2023</td>\n      <td>Interim KSC member A<br>\nInterim KSC member B</td>\n      <td>New election</td>\n    </tr>\n    <tr>\n      <td>2024</td>\n      <td>New election</td>\n      <td></td>\n    </tr>\n    <tr>\n      <td>2025</td>\n      <td></td>\n      <td>New election</td>\n    </tr>\n    <tr>\n      <td>2026</td>\n      <td>New election</td>\n      <td></td>\n    </tr>\n    <tr>\n      <td>2027</td>\n      <td></td>\n      <td>New election</td>\n    </tr>\n    <tr>\n      <td>…</td>\n      <td></td>\n      <td></td>\n    </tr>\n  </tbody>\n</table>\n\n## Election Procedure\n\n### Timeline\n\nSteering Committee elections are held annually. 4 weeks or more before the election, the Steering Committee will appoint Election Officer(s) (see below). 2 weeks or more before the election, the Election Officer(s) will issue a call for nominations, publish the list of eligible voters, and open the call for exceptions. One week before the election the call for nominations and exceptions will be closed. The election will be open for voting not less than two weeks and not more than four. The results of the election will be announced within one week of closing the election. New Steering Committee members will take office in January of each year on the date the results are announced.\n\nThe general timeline is as follows:\n\n- November\n  - Election officers appointed\n- December\n  - Election preparation - publish the list of eligible voters, open call for exceptions (open for approximately 1 week)\n  - Call for nominations (open for approximately 2 weeks)\n  - Testimonial Phase (open for approximately 2 weeks)\n  - Start of election (open for approximately 3 weeks)\n- January\n  - Conclusion of election\n  - Results announced within one week after the election concludes\n  - New steering committee members take office in January after the conclusion of the election.\n\n### Election Officer(s)\n\n4 weeks or more before the election, the Steering Committee will appoint between one and three Election Officer(s) to administer the election. Elections Officers will be Kubeflow community members in good standing who are eligible to vote, are not running for Steering in that election, who are not currently part of the Steering Committee and can make a public promise of impartiality. They will be responsible for:\n\n- Making all announcements associated with the election\n- Preparing and distributing electronic ballots\n- Judging exception requests\n- Assisting candidates in preparing and sharing statements\n- Tallying voting results according to the rules in this charter\n\n### Eligibility to Vote\n\nAnyone who has at least 50 contributions including at least 1 merged PR in the last 12 months is eligible to vote in the Steering election. Contributions are defined as opening PRs, reviewing and commenting on PRs, opening and commenting on issues, writing design docs, commenting on design docs, helping people on slack, participating in working groups, and other efforts that help advance the Kubeflow project.\n\nThis [dashboard](https://kubeflow.devstats.cncf.io/d/9/developer-activity-counts-by-repository-group-table?orgId=1&var-period_name=Last%20year&var-metric=contributions&var-repogroup_name=All&var-country_name=All) shows only GitHub based contributions and does not capture all the contributions we value. We expect this metric not to capture everyone who should be eligible to vote. If a community member has had significant contributions over the past year but is not captured in the dashboard, they will be able to submit an exception form to the Elections Officer(s) who will then review and determine whether this member should be eligible to vote. All exceptions, and the reasons for them, will be recorded in a log that will be available to Steering and the TOC.\n\nThe electoral roll of all eligible voters will be captured at kubeflow/community/steering-elections/$YEAR/voters.md and the voters' guide will be captured at kubeflow/community/steering-elections/\\$YEAR/README.md, similar to the kubernetes election process and identical to the TOC election process.\n\nWe are committed to an inclusive process and will adapt future eligibility requirements based on community feedback.\n\nIf you believe you are eligible to vote but are not listed as an elegible voter [you may file an exception using the exception form](https://forms.gle/epaMrirZCNBztoRz5).\n\n## Candidate Eligibility\n\nCommunity members must be eligible to vote in order to stand for election (this includes voters who qualify for an exception). Candidates may self-nominate or be nominated by another eligible member. There are no term limits for KSC members. Nothing prevents a qualified member from serving on the Kubeflow Steering Committee, Technical Oversight Committee and Conformance Committee simultaneously.\n\nIf you believe you are eligible to run in this election but are not listed as an eligible nominee candidate [you may file and exception using the exception form](https://forms.gle/epaMrirZCNBztoRz5).\n\n### Voting Procedure\n\nElections will be held using [Condorcet Internet Voting Service (CIVS)](https://civs1.civs.us/), an online voting tool that is used by many of the CNCF projects and other open-source communities. This tool has been running since 2003 and is what the [Elekto tool](https://elekto.dev/) is based on.\n\nAfter this first election, the details for the KSC elections will be published in the elections folder. This folder will be set up after the conclusion of the first election.\n\nIn the rare case that election ends in a tie, the election offices may ask the tied candidates to resolve the tie (e.g. one or more candidates could decide to withdraw). If the tie cannot be resolved among the tied candidates, a runoff election will be conducted. If the runoff election ends in a tie, candidate will be randomly selected to decided winners, with equal weights given to each runoff candidate.\n\n### Limitations on Company Representation\n\nNo more than two seats may be held by employees of the same organization (or conglomerate, in the case of companies owning each other). If the results of an election result in greater than two employees of the same organization, the lowest vote getters in the current election from any particular employer will be removed until representation on the committee is down to two.\n\nIn the staggered election schedule, if a particular organization already has two seats among the rotation not affected by the election, no candidates from that organization will be selected by the election. If the organization wants to change its representation in KSC, one or more members from that organization needs to stand down from KSC, which will trigger a \"resignation\" event as explained below. There is no guarantee that vacancy created will be filled by the organization's candidate.\n\nIf employers change because of job changes, acquisitions, or other events, in a way that would yield more than 2 seats being held by employees of the same organization, sufficient members of the committee must resign until only two employees of the same employer are left. If it is impossible to find sufficient members to resign, all employees of that organization will be removed and new special elections held. In the event of a question of company membership (for example evaluating independence of corporate subsidiaries) a majority of all non-involved Steering Committee members will decide.\n\n#### Changes to take effect in 2025 election and beyond\n\nNo more than one seat may be held by employees of the same organization. Since KSC is a relatively small committee with 5 members, this rule was introduced to encourage diversity of representation in KSC.\n\nException: The 2024 election result may produce an outcome where the elected 2-member cohort comes from the same organization. In such scenario, the 2-member cohort may serve their full term of 2 years.\n\n### Vacancies\n\nIn the event of a resignation or other loss of an elected committee member, the next most preferred candidate from the previous election will be offered the seat.\n\nA maximum of one (1) committee member may be selected this way between elections.  \nIn case this fails to fill the seat, a special election for that position will be held as soon as possible.\n\nEligible voters from the most recent election will vote in the special election i.e., eligibility will not be redetermined at the time of the special election.\n\nA committee member elected in a special election will serve out the remainder of the term for the person they are replacing, regardless of the length of that remainder.\n\n### Resignation\n\nIf a committee member chooses not to continue in their role, for whatever self-elected reason, they must notify the committee in writing.\n\n### Removal - No confidence\n\nA Steering Committee member may be removed by an affirmative vote of four of five members.  \nThe call for a vote of no confidence will happen in a public Steering Committee meeting and must be documented as a GitHub issue in the committee's repository.\n\nThe call for a vote of no confidence must be made by a current member of the committee and must be seconded by another current member.\n\nThe committee member who calls for the vote will prepare a statement which provides context on the reason for the vote. This statement must be seconded by the committee member who seconded the vote.\n\nOnce a vote of no confidence has been called, the committee will notify the community through the following channels:\n\n- the community mailing list\n- the community slack channel\n- In the next Kubeflow Community Meeting\n\nThis notification will include:\n\n- a link to the aforementioned GitHub issue\n- the statement providing context on the reason for the vote\n\nThere will be a period of two weeks for members of the community to reach out to Steering Committee members to provide feedback.\n\nCommunity members may provide feedback by commenting on the GitHub issue.\n\nAfter this feedback period, Steering Committee members must vote on the issue within 48 hours.\n\nIf the vote of no confidence is passed, the member in question will be immediately removed from the committee.\n"
  },
  {
    "path": "proposals/648-spark-operator/README.md",
    "content": "# KEP-648: Adoption of Spark Kubernetes Operator in Kubeflow\n\nOriginal doc: https://docs.google.com/document/d/1rCPEBQZPKnk0m7kcA5aHPf0fISl0MTAzsa4Wg3dfs5M/edit\n\n## Authors\n\n- Andrey Velichkevich (Apple)\n- Chaoran Yu (Apple)\n- Marcin Wielgus (Google)\n- Rus Pandey (Apple)\n- Vara Bonthu (AWS)\n\n## Motivation\n\nRef GitHub issue: https://github.com/kubeflow/community/issues/648\n\n[Spark on Kubernetes Operator](https://github.com/GoogleCloudPlatform/spark-on-k8s-operator) is the\nproject to simplify the capability of running Apache Spark on Kubernetes. It automates deployment\nand simplifies lifecycle management of Spark Jobs on Kubernetes.\n\nThis project boasts a substantial user base with 167 contributors, 2.5k likes, and is endorsed by 45\norganizations as documented in\n[the \"Who is using\" document](https://github.com/GoogleCloudPlatform/spark-on-k8s-operator/blob/master/docs/who-is-using.md).\nThere are many more organizations using it than the originally reported 45. The primary issue at\nhand is that this project currently resides under the GoogleCloudPlatform GitHub organization, and\nit is solely moderated by a Google employee. Numerous users and customers have voiced concerns and\nraised issues regarding the maintenance of the repository. The existing Google maintainers\nare constrained by limitations in terms of time and support, adversely affecting both the project\nand its user community.\n\nAt Kubecon Chicago 2023, AWS open source architects and the Apple infrastructure team initiated\ndiscussions with the Google team, specifically Marcin Wielgus. They conveyed their interest in\ncontributing the project to either the Kubeflow or Apache Spark community.\nMarcin from Google confirmed their willingness to donate the project to either of these communities.\n\nSpark already has a lot of AI/ML use-cases and the Kubeflow ecosystem can help to address those.\nAccording to the recent Kubeflow survey, Spark is one of the most popular frameworks for Kubeflow users:\n\n![Kubeflow Survey 2022](kubeflow-survey-2022.png)\n\n## Benefits for Kubeflow\n\nThe following diagram shows the main components of Kubeflow. Notebooks for interactive ML development,\nTraining Operator for distributed ML Training, Katib for HyperParameter Tuning, KServe for\nModel Serving, Pipelines for ML pipelines, and Profiles to create Kubeflow user profiles.\n\n![Kubeflow Overview](kubeflow-overview.png)\n\nToday, Kubeflow doesn’t have any component for Data Preparation which is an essential step for\nMLOps lifecycle. Spark is one of the best and most-used frameworks for Data Preparation,\nData Analysis, Feature Engineering for Data Scientists. Thus, adopting Spark Operator to Kubeflow\ncomponents will significantly improve Kubeflow user experience.\n\n### Kubeflow Working Group Data\n\nCurrently, Kubeflow doesn’t have a working group (WG) which is responsible for Data Preparation.\nBy adopting Spark Operator to Kubeflow we can establish a new Data WG. The scope of this\nWG is to provide guidelines for AI/ML users to run data preparation tools such as\n[Spark](https://spark.apache.org/), [Dask](https://www.dask.org/), or [Ray](https://docs.ray.io/en/latest/)\non Kubernetes. Also,\n[a new proposal for Model Registry](https://docs.google.com/document/d/1T3KfOqIfJohp0s1koQ2XrJJQQhj7TECO-m2xPsW59_c/edit#heading=h.t7b42oqmiz2y)\nin Kubeflow can be part of Data WG scope.\n\nInitially, Spark Operator is the ideal candidate to start this WG. We will start a separate proposal\nto create Data WG in Kubeflow.\n\n### Spark Operator & Kubeflow Training Operator\n\nWhen users want to do distributed training with Kubeflow Training Operator currently they have to\nmanually download data for every Training Job worker from the external storage (e.g. S3, GCS, etc.).\nFor the Large Language Models usually datasets grow significantly and downloading data is a time and\ncost consuming process.\n\nIf users use Spark for data preparation, they want to feed the training data directly to\nthe Training Workers from Spark. We can leverage [Apache Arrow Flight](https://arrow.apache.org/docs/format/Flight.html)\nto store data in-memory and use it in the job workers. We can propose API and controller changes\nin Spark Operator and Training Operator to support it.\n\n![Spark to Training Operator](spark-to-training.png)\n\n### Spark Operator & Kubeflow Distributions\n\nKubeflow Profile Controller can be integrated with Spark jobs to define appropriate roles and\npolicies for users to interact with Spark from the Kubeflow Central Dashboard. Kubeflow user roles\nwill have the appropriate permission to create/consume Spark jobs in their Kubeflow namespaces.\nFor example, they can use Kubeflow Notebooks to create Spark jobs. That will give users a better\nend-to-end ML experience in Kubeflow distributions.\n\n### Spark Operator & Kubeflow Pipelines\n\nToday, Kubeflow Pipelines doesn’t have\n[the Spark Operator component](https://github.com/kubeflow/pipelines/tree/master/components/kubeflow)\nthat is supported by the Kubeflow community. Kubeflow Pipelines has several Spark components which\nare vendor specific. For example, Spark component for\n[Azure](https://github.com/kubeflow/pipelines/tree/e976d6d4696262e319ae971ffa645297cf258d80/components/azure/azuresynapse/runsparkjob),\nSpark component for [IBM Cloud](https://github.com/kubeflow/pipelines/tree/e976d6d4696262e319ae971ffa645297cf258d80/components/ibm-components/spark),\nSpark component for [GCP](https://github.com/kubeflow/pipelines/tree/e976d6d4696262e319ae971ffa645297cf258d80/components/gcp/dataproc/submit_pyspark_job).\nWe can create a new Kubeflow Pipelines component which allows users to integrate Spark jobs in\ntheir AI/ML pipelines.\n\n## Maintainers\n\nThe following maintainers are committed to maintain Spark Operator under Kubeflow GitHub org to\ntrack issues, do releases, merge PRs.\n\n- Vara Bonthu ([@vara-bonthu](https://github.com/vara-bonthu) - AWS)\n- Chaoran Yu ([@yuchaoran2011](https://github.com/yuchaoran2011) - Apple)\n- Marcin Wielgus ([@mwielgus](https://github.com/mwielgus) - Google)\n\n## Migration Plan\n\n### GitHub Repository\n\nSpark repository is going to migrate to a new repository under Kubeflow GitHub org.\nThat will allow us to save GitHub history (Issues, PRs, Commits).\n\nCurrent Repository: https://github.com/GoogleCloudPlatform/spark-on-k8s-operator\nNew Repository: https://github.com/kubeflow/spark-operator\n\nInitially, we are going to [transfer Spark Operator GitHub repository](https://docs.github.com/en/repositories/creating-and-managing-repositories/transferring-a-repository#about-repository-transfers) with the same name: `spark-on-k8s-operator`.\nAfter the transfer, we need to work on renaming repository\nfrom `spark-on-k8s-operator` to `spark-operator` to keep it consistent with other Kubeflow components\n(e.g. `mpi-operator`, `training-operator`).\n\n### API Changes\n\nCurrently, Spark has its own APIs group for `SparkJob` custom resource:\n[`sparkoperator.k8s.io`](https://github.com/GoogleCloudPlatform/spark-on-k8s-operator/blob/86d71c828bd05fb0486f4190efacf839771eba16/pkg/apis/sparkoperator.k8s.io/register.go#L20).\n\nMaintainers are going to decide if APIs should be renamed to `kubeflow.org` to keep it consistent\nwith other Kubeflow APIs.\n\n### Documentation\n\nDocumentation is currently located in the [spark-on-k8s-operator/docs](https://github.com/GoogleCloudPlatform/spark-on-k8s-operator/tree/master/docs)\nsection. In the future we can migrate these docs to the Kubeflow Website.\n\n## Existing Solutions to run Spark on Kubernetes\n\n- Proposal to create a new Java-based Spark Operator:\n  [SPIP: Spark Kubernetes Operator](https://docs.google.com/document/d/1f5mm9VpSKeWC72Y9IiKN2jbBn32rHxjWKUfLRaGEcLE/edit#heading=h.h3pualbnwuc2)\n\n  We are going to track the Apache Community final decision on the official Apache Spark Operator in\n  [this issue](https://issues.apache.org/jira/browse/SPARK-46054)\n\n- Stackable Spark Operator: https://github.com/stackabletech/spark-k8s-operator\n\n- OpenShift Spark Operator: https://github.com/opendatahub-io-contrib/spark-on-openshift\n\n- Using Spark Submit to create Spark Application on Kubernetes:\n  https://spark.apache.org/docs/latest/submitting-applications.html\n\nDespite on existing Spark Operator solution, we still need to support customers who are using\nSpark Operator from the GCP GitHub org because APIs are not compatible and it is not trivial to\nmigrate all customers to a new operator. In the future, we can discuss with the Apache Spark\ncommunity to find the best way of running Spark on Kubernetes and guide our users on how to use it\nfor their ML workloads on Kubernetes.\n"
  },
  {
    "path": "proposals/748-expand-kubeflow-ecosystem/README.md",
    "content": "# KEP-748: Expanding the Kubeflow Ecosystem with a New OSS Project\n\n## Summary\nThis KEP outlines how OSS projects can join the Kubeflow Ecosystem.\n\n\nNote: this process will follow the Kubeflow Steering Committee's [Normal decision process](../KUBEFLOW-STEERING-COMMITTEE.md#normal-decision-process) \n\n## Motivation\nAs Kubeflow has become a well established ecosystem and community, several\nprojects may want to join the Kubeflow ecosystem to explicitly be a part of our \ncommunity. \n\nKubeflow's goal is to cover the entire AI/ML lifecycle and new projects can help \naddress missing stages in that lifecycle.\n\n### Goals\nThis goal of this process is to give clear guidelines and set expectations \nfor community members about how to be formally included into the Kubeflow Ecosystem and \nthe application process.\n\nThe decision making process will be separate from the application process and is at the \ndiscretion of the Kubeflow Steering Committee. The application and data provided are \ncritical for the KSC to make an informed decision that is best for the longetivity \nof the project and community.\n\n### Non-Goals\n- Give specific recommendations for evaluating any individual project.\n- Supporting project add-ons.\n\n## Proposal\nThe process to join the Kubeflow Ecosystem is intended to be simple but thorough.\n\nProject owners or maintainers will apply to join by following a four\nstep process. \n\nThe process is outlined in six steps:\n\n1. Create a GitHub Issue with a Google Document outlining your proposal (please allow for commentary), the document should have a rough outline with:\n    - Authors\n    - Motivation\n    - Benefits for Kubeflow\n    - Benefits for the Project's Community\n    - Community Metrics\n    - Contributor Metrics\n    - Maintainers\n    - Migration  Plan\n    - Other Related Projects\n2. Provide a demo during the Kubeflow Community Call\n3. Submit a Pull Request with the [../proposals/new-project-join-process.md](application form).\n4. Add your proposal to the Kubeflow Community call to introduce and collect feedback on\nthe application.\n5. Work with the Kubeflow Outreach Committee to send an announcement email in `kubeflow-discuss` and publish messages on Slack, LinkedIn, X/Twitter, and other Kubeflow social resources\n6. Schedule meeting with Kubeflow Steering Committee for initial vote and to collect feedback.\n7. Identify the appropriate Kubeflow Working Group that should control the project.\n8. Merge or close the Pull Request depending upon the outcome of the final vote.\n\n### Notes/Constraints/Caveats (Optional)\n\nNote that this application does not guarantee acceptance of the proposed project to Kubeflow.\n\n### Risks and Mitigations\n\nTwo major risks for Kubeflow accepting projects are:\n1. Accepting projects that do not have active contributors or a healthy user base\n- This is why metrics are meant to capture this\n2. Impacting the delivery speed of Kubeflow releases\n- It will be expected that the maintainers invest in incorporating the project into the manifest or it will be removed\n3. Additional infrastructure support\n- It will be expected that the maintainers invest in providing this support\n\n## Drawbacks\n\nHow could this new project harm the Kubeflow community?\n\n## Alternatives\n\nWhat other open source projects are there like the one proposed? \nWhy should Kubeflow accept the one proposed?\n"
  },
  {
    "path": "proposals/819-kubeflow-sdk/README.md",
    "content": "# KEP-819: Kubeflow SDK for ML Experience\n\n## Summary\n\nOriginal Google document: https://docs.google.com/document/d/1rX7ELAHRb_lvh0Y7BK1HBYAbA0zi9enB0F_358ZC58w/edit\n\nThis KEP outlines a proposal to design Kubeflow SDK that streamlines user experience for\ndata scientists and ML engineers to interact with various Kubeflow projects\n(Trainer, Katib, Spark Operator, Pipelines, Model Registry, KServe).\n\n## Motivation\n\nKubeflow users come from diverse backgrounds, including cluster administrators, data scientists,\nand ML engineers (referred to as `ML User` in this proposal). While administrators are familiar\nwith Kubernetes, ML Users typically are not. They prefer working in a familiar Python environment\nwith popular data and ML frameworks like PyTorch, TensorFlow, and JAX for ML and Ray, Spark,\nPandas, and Dask for data, while leveraging advanced hardware and cloud infrastructure\nto scale their experiments.\n\nTypically, ML Users want to:\n\n- Open JupyterLab.\n- Install required AI/ML libraries with `pip`.\n- Prototype ML code using PyTorch/TensorFlow APIs.\n- Launch jobs to create features from raw data and prepare training datasets.\n- Launch jobs to train, fine-tune, and optimize models across many GPUs.\n- Collect and analyze results within the same JupyterLab environment.\n- Create inference service to serve the trained models.\n\nOne of the typical ML experience workflows can be seen at\n[this KubeCon + CloudNativeCon talk](https://youtu.be/Lgy4ir1AhYw?t=454).\n\nCurrently, Kubeflow's ecosystem lacks simple interfaces for interacting with its components. This\ncomplexity hinders adoption among ML Users, as it requires Kubernetes expertise to use effectively.\n\nThis document proposes the Kubeflow Python SDK, designed to streamline the experience of\nML users when interacting with Kubeflow components. In the future, we may extend this SDK to\nsupport additional languages (e.g., Swift, Rust, Java) based on user demand.\n\n### Goals\n\n- Collaborate with ML Experience/IDE Working Group to include this SDK into their charter.\n\n- Introduce initial version of Kubeflow Python SDK that supports Kubeflow Trainer and Kubeflow\n  Katib APIs.\n\n  - **Note** that Kubeflow Katib will be probably renamed to Kubeflow Optimizer in the future.\n    Thus, in this proposal we will keep the Kubeflow Optimizer name moving forward.\n\n- Reduce duplication across `kubeflow-training` and `kubeflow-katib` SDKs by reusing code assets.\n\n- Design the SDK version control and release schedule.\n\n- Design synchronization scripts between Kubeflow control plane and SDK models.\n\n### No Goals\n\n- Consolidate Kubeflow Pipelines APIs into centralized Kubeflow SDK.\n\n  - As we discussed in the Google document, we want to postpone the `kfp` integration after\n    we release the initial version of Kubeflow SDK. The Kubeflow community will work towards\n    long-term goal to provide consistent experience for ML Users to interact with Kubeflow APIs.\n\n- Integrate Kubeflow Spark Operator, KServe, Model Registry into Kubeflow SDK.\n\n  - Similar to KFP, we will design the integration between those components in the future releases\n    of Kubeflow SDK.\n\n- Use the Kubeflow SDK to submit Kubernetes CRDs that are not part of Kubeflow projects,\n  except when a Kubeflow component relies on a third-party tool (e.g., Kubeflow Trainer\n  is creating a PodGroup for gang scheduling).\n\n- Use Kubeflow SDK to install the entire Kubeflow control plane. This should be managed by\n  cluster administrators via Helm Charts, Kustomize manifests, or Kubeflow distributions.\n\n## Proposal\n\nDesign and implement the unified Python SDK to interact with Kubeflow CRDs, so the ML Experience\nlooks as follows:\n\n```python\nfrom kubeflow.spark import SparkClient\nfrom kubeflow.trainer import TrainerClient\nfrom kubeflow.optimzer import OptimizerClient\nfrom kubeflow.kserve import KServeClient\n\nSparkClient().process_data()\nTrainerClient().train()\nOptimizerClient().optimize()\nKServeClient().serve()\n\n```\n\n![kubeflow-sdk](kubeflow-sdk.drawio.svg)\n\n### User Stories\n\n#### Story 1\n\nAs an ML User, I want to fine-tune an LLM with my own dataset using a model from HuggingFace.\nI want to open the Jupyter Notebook, select the available Kubeflow LLM TrainingRuntime,\nconfigure PEFT config, my dataset, and trigger a fine-tuning job.\n\nThe ML Experience may look as follows:\n\n```python\nfrom kubeflow.trainer import TrainerClient, BuiltinTrainer, TorchTuneConfig, LoraConfig\n\n# Get available LLM runtimes.\nllm_runtime = TrainerClient().get_runtime(name=\"torchtune-llama3.2-1b\")\n\n# Fine-tune LLM.\njob_id = TrainerClient().train(\n    trainer=BuiltinTrainer(\n        config=TorchTuneConfig(\n            dtype=\"bf16\",\n            peft_config=LoraConfig(\n                lora_rank=8,\n            ),\n        ),\n    ),\n    initializer=Initializer(\n        dataset=HuggingFaceDatasetInitializer(\n            storage_uri=\"hf://tatsu-lab/alpaca\",\n        )\n    ),\n    runtime=llm_runtime,\n)\n\n# Get the results.\nTrainerClient().get_job_logs(job_id)\n```\n\n#### Story 2\n\nAs an ML User, I want to develop my PyTorch model and train it across available GPUs. I know that\nI have 100 training nodes with 5 GPU each (e.g. 500 GPUs in total) to train my model.\n\nThe ML Experience may look as follows:\n\n```python\nfrom kubeflow.trainer import TrainerClient, CustomTrainer\n\ndef pytorch_train_func(test_run=False):\n    import torch\n    import torch.distributed as dist\n    ...\n\n# Verify that training is functional.\npytorch_train_func(test_run=True)\n\n# Train PyTorch model with 500 GPUs.\njob_id = TrainerClient().train(\n    trainer=CustomTrainer(\n        func=pytorch_train_func,\n        num_nodes=100,\n        resources_per_node={\"GPU\": 5},\n    ),\n)\n\n# Get the results.\nTrainerClient().get_job_logs(job_id)\n```\n\n#### Story 3\n\nAs an ML User, I want to optimize hyperparameters for the LLM that I want to fine-tune.\nFor example, I know that I want to optimize learning rate and LoRA rank.\n\n```python\nfrom kubeflow.optimizer import OptimizerClient, OptimizerConfig\nfrom kubeflow.optimizer import Search\nfrom kubeflow.trainer import BuiltinTrainer, TorchTuneConfig, LoraConfig\n\n# Optimizer HPs during fine-tuning.\njob_id = OptimizerClient().optimize(\n    trainer=BuiltinTrainer(\n        config=TorchTuneConfig(\n            dtype=\"bf16\",\n            lr=Search(min=\"0.01\", max=\"0.1\", distribution=\"logNormal\"),\n            peft_config=LoraConfig(\n                lora_rank=Search(min=\"4\", max=\"8\", distribution=\"uniform\"),\n            ),\n        ),\n    ),\n    optimizer_config=OptimizerConfig(\n        objective=\"loss\",\n        mode=\"min\",\n        num_trials=5,\n    ),\n    runtime_ref=llm_runtime,\n)\n\n# Get the HPs from the best Trial.\nOptimizerClient().get_job(job_id).best_trial\n```\n\n### Risks and Mitigations\n\nIf Kubeflow control plane components introduce breaking changes to the CRDs, we won’t create\na new major version for kubeflow SDK. As a result, manually upgrading the SDK may introduce breaking\nchanges for clients.\n\nWe can mitigate this risk by providing a compatibility table between SDK and control plane versions.\nWe will implement E2E tests to make sure that the SDK is compatible with the desired version of\nthe control plane.\n\nAdditionally, we will gracefully deprecate client APIs and inform users if API will be deleted or\nmodified in the future releases of Kubeflow SDK.\n\n## Design Details\n\nThe Kubeflow SDK will be developed in the `kubeflow/sdk` repository. We will use the OpenAPI to\ngenerate clients from the Kubernetes CRDs.\n\nThe following directory structure outlines the organization for the Kubeflow Trainer SDK.\n\n```\npython/\n│── kubeflow/\n│   │── trainer/\n│   │   │── api/                               # Client to call Kubeflow Trainer APIs\n│   │   │   │── trainer_client.py\n│   │   │── types/                             # User's types for Kubeflow Trainer\n│   │   │   │── types.py\n│   │   │── constants/                         # User's constants for Kubeflow Trainer\n│   │   │   │── constants.py\n│   │   │── models/                            # OpenAPI generated models\n│   │   │   │── trainer_v1alpha1_train_job.py\n│   │── optimizer/\n│   │── . . .\n│── pyproject.toml\n│── requirements.txt\n```\n\nWhen users want to call the Kubeflow Trainer API, they firstly should create a `TrainerClient()`\nwhich verifies that:\n\n- Users have required access to the Kubernetes cluster.\n- Kubeflow Trainer control plane is installed.\n\nAfter that, users can interact with `TrainerClient()` APIs:\n`train(), list_runtimes(), get_job_logs(), etc`\n\nUsers should be able to use the Kubeflow SDK even if certain control plane components are not\ninstalled. For example, if the Kubeflow Trainer control plane is available but the Kubeflow\nOptimizer is not, users should still be able to train LLMs but users can't optimize hyperparameters.\n\n### Release Lifecycle\n\nFor every minor version of Kubeflow component control plane, we bump the minor version for\nKubeflow SDK. Unless we update the two control plane components together.\nIn that case, we can have a single minor version for Kubeflow SDK.\n\nThe typical release lifecycle looks as follows:\n\n```\nRelease Kubeflow Trainer\n  -> Bump Kubeflow Trainer in Kubeflow SDK\n    -> Release Kubeflow SDK\n      -> Update examples if required\n```\n\nWe can release Kubeflow SDK more frequently than control plane components if we introduce new\nfeatures to the client APIs. For that, we can just individually release Kubeflow SDK:\n\n```\nRelease Kubeflow SDK\n  -> Update examples if required\n```\n\nTentatively, we plan to release **two minor versions** of the SDK each quarter.\n\n### Version Control\n\nIt is the responsibility of cluster administrators to install the correct version of Kubernetes and\nKubeflow components. Kubeflow community will maintain the compatibility table between\nKubeflow SDK and control plane of Kubeflow components. The following table shows\nthe tentative versions for Kubeflow Trainer and Kubeflow Optimizer.\n\n| SDK Version | Kubernetes Version | Kubeflow Trainer | Kubeflow Optimizer |\n| ----------- | ------------------ | ---------------- | ------------------ |\n| 0.1.0       | 1.29..1.32         | 2.0.0            | None               |\n| 0.2.0       | 1.29..1.32         | 2.0.0            | None               |\n| 0.3.0       | 1.30..1.33         | 2.1.0            | 1.0                |\n\nThe `constants.py` defines the version of CRDs that user should interact with:\n\n```python\nGROUP = os.getenv(\"DEFAULT_TRAINER_API_GROUP\", \"trainer.kubeflow.org\")\nTRAINJOB_VERSION = os.getenv(\"DEFAULT_TRAINER_TRAINJOB_VERSION\", \"v1alpha1\")\nRUNTIME_VERSION = os.getenv(\"DEFAULT_TRAINER_RUNTIME_VERSION\", \"v1alpha1\")\nRUNTIME_KIND = os.getenv(\"DEFAULT_TRAINER_RUNTIME_KIND\", \"ClusterTrainingRuntime\")\n```\n\nCluster administrators can override the default CRD values, if their users should work with\ndifferent versions of CRDs. However, it is the responsibility of cluster administrators to\nmake sure that client APIs are compatible with these CRD versions.\n\nWe need to make sure that Kubeflow SDK uses the correct version of Kubernetes Python client.\nThe compatibility table for Kubernetes Python client is described here:\n[https://github.com/kubernetes-client/python?tab=readme-ov-file#compatibility](https://github.com/kubernetes-client/python?tab=readme-ov-file#compatibility)\n\n### Kubeflow Pipelines SDK\n\nKubeflow Pipelines currently has its own version of client SDK: `kfp`. The long-term goal is to\nconsolidate Kubeflow Pipelines client APIs into Kubeflow SDK.\n\nCurrently, users can leverage `kfp` and `kubeflow` SDKs together to seamlessly build end-to-end\nML pipelines as follows:\n\n```python\nfrom kfp import dsl\n\n@dsl.component\ndef extract_features() -> dsl.Dataset:\n    from kubeflow.spark import SparkClient\n    SparkClient.process_data()\n\n@dsl.component\ndef fine_tune_llm(dataset dsl.Input[dsl.Dataset]) -> dsl.Model:\n    from kubeflow.trainer import TrainerClient\n    TrainerClient.train()\n\n\n@dsl.component\ndef serve(model dsl.Input[dsl.Model]):\n    from kubeflow.kserve import KServeClient\n    KServeClient.serve()\n\n@dsl.pipeline\ndef e2e_pipeline():\n    extract_features_task = extract_features()\n    llm_ft_task = fine_tune_llm(extract_features_task.output)\n    serve(llm_ft_task.output)\n```\n\n### Build System\n\nUsing build systems is critical for enhancing the development and maintenance of the Kubeflow SDK.\nIt provides dependency management, reproducibility, automation, modularity, etc.\n\nWe are currently evaluating different build systems for the Kubeflow SDK as part of this tracking issue: [kubeflow/trainer#2462](https://github.com/kubeflow/trainer/issues/2462)\n\nOne option we are considering is [`uv`](https://github.com/astral-sh/uv), due to its speed and extensive functionality.\n\n### Packaging\n\nKubeflow SDK will contain multiple components Trainer, Optimizer, Pipelines, etc. Installing all\ncomponents as a single package will make the SDK wheel large. Kubeflow SDK might utilize Python\nextras which will enable ML Users to choose what exactly they want to install and what to exclude.\n\n### Ownership of Kubeflow SDK\n\nThe Kubeflow SDK will be developed collaboratively by all Kubeflow Working Groups, as it provides\nclient APIs for nearly every Kubeflow project. To manage ownership effectively, we can\nleverage `OWNERS` files within sub-folders to designate maintainers for each project.\n\nFor example:\n\n```\npython/\n│── kubeflow/\n│   │── trainer/\n│   │   │── OWNERS       <------ Kubeflow Trainer contributors\n│   │── pipelines/\n│   │   │── OWNERS       <------ Kubeflow Pipelines contributors\n. . .\n```\n\nHowever, from the Working Group point of view the Kubeflow SDK will be in scope of newly formed\nML Experience WG.\n\n## Implementation History\n\n- Draft KEP: February 17th 2025\n\n## Test Plan\n\n### Unit Test\n\nWe will implement the unit tests for every client using the `pytest` framework. The test files\nmust be located within the actual files. For example:\n\n```\npython/\n│── kubeflow/\n│   │── trainer/\n│   │   │── api/\n│   │   │   │── trainer_client.py\n│   │   │   │── trainer_client_test.py\n. . .\n```\n\nThat should help us maintain consistency in tests across the control plane and SDK while keeping them easy to locate.\n\n### E2E Test\n\nFor E2E testing, we will create two set of Jupyter Notebook examples:\n\n- **Single-Project Notebooks** – Demonstrating how to use the Kubeflow SDK with individual projects\n  (e.g., Kubeflow Trainer). These will be located within their respective project GitHub repositories\n  (e.g., `kubeflow/trainer`).\n- **Multi-Project Notebooks** – Showcasing the integration of the Kubeflow SDK across multiple\n  projects (e.g., Kubeflow Trainer + Kubeflow Optimizer). These will be located in\n  the `kubeflow/sdk` GitHub repository.\n\nWe will use **[Papermill](https://github.com/nteract/papermill)** to execute these notebooks as\nE2E tests, ensuring the functionality of both the control plane and the Kubeflow SDK.\n\n## Alternatives\n\n### Develop SDK for every Kubeflow project\n\nMaintain an individual SDK for every Kubeflow project (e.g. `kubeflow_trainer`, `kubeflow_optimizer`).\nThe downside of this approach is that it will be hard to manage common code across all of these SDKs.\n\nAdditionally, users need to deal with version control across all of the control planes and\nclient versions, rather than Kubeflow community provide compatibility table.\n\n### Integrate Kubeflow SDK capabilities into KFP\n\nWe can integrate Kubeflow SDK clients directly into KFP. However, a key drawback of this approach\nis that many users rely on individual Kubeflow components (e.g., Spark Operator, Trainer)\nwithout using KFP. To better support these users, we aim to provide a modular and composable\nSDK that does not require installing the entire Kubeflow control plane.\n\nIn the future, we will consolidate `kfp` and `kubeflow` SDKs together.\n"
  },
  {
    "path": "proposals/839-outreach-committee/README.md",
    "content": "# KEP- 839: Proposal for the Creation of the Kubeflow Outreach Committee (KOC)\n\n## Overview\n\nWe propose the creation of the **Kubeflow Outreach Committee (KOC)** to lead efforts in growing and engaging the broader AI/ML community, not just the Kubeflow community. This committee will be responsible for fostering visibility, engagement, and inclusivity, as well as helping to expand Kubeflow’s presence and user base.\n\n## Objectives\n\n- Lead efforts to grow and engage the AI/ML community through events, educational materials, and advocacy for Kubeflow.\n- Onboard new contributors and users to Kubeflow, particularly from diverse and underrepresented communities.\n- Collaborate with other committees and working groups to align outreach activities with the broader goals of the Kubeflow project.\n- Foster a welcoming, inclusive, and diverse community within Kubeflow.\n-  Plan and execute on Kubeflow summit\n\n"
  },
  {
    "path": "proposals/841-release-process/README.md",
    "content": "# KEP-841: Proposal to update the Release Process for Kubeflow\n\n<!--\nThis is the title of your KEP. Keep it short, simple, and descriptive. A good\ntitle can help communicate what the KEP is and should be considered as part of\nany review.\n-->\n\n## Summary\n\nThis proposal aims to share insights on topics discussed with the release team and others about diverse challenges and improvement opportunities in the release process based on Kubeflow release 1.10.\n\n## Motivation\n\nCurrent challenges based on Kubeflow release 1.10:\n* Challenge to get component’s release progress during release meetings.\n    - Blockers or challenges on the Release are identified later.\n    -  Incomplete/Inaccurate or null information on some components about progress/blockers.\n* The Release Manager role challenges:\n- Only one person is responsible for the Release and decisions.\n- Time dedication and commitment are high and for an extended period (6 months), which makes it hard to find candidates for Release.\n- The diverse skills required for the role make it even harder for candidates to join.\n* Release Documentation\n- Working groups need help on building Technical Documentation for Releases.\n- Working on technical documentation during the Release, before the feature freeze, can expedite the release process.\n* Feature Freeze vs Building Release Candidate\n- Teams required more time to finish the Release and later cherry-pick and work on building the Release.\n* Release timeframe \n- The Release is now 27 weeks. There are 10 weeks between feature freeze and Release. \n- Release dates and phases are hard to predict in the current process.\n\n### Goals\n\n* Cut down the release handbook by 70 %\n* Replace the the manual bureaucratic process and overhead and human hours needed by an an automation first approach\n* Move away from the Waterfall model to an agile model that relies on automated tests instead of human labor.\n* Reduce time to market of Kubeflow Release, by being able to release at any time\n* Reduce meeting time and structure to give back time to the Release Team.\n* Focus on contributions from technical documents and source code by reducing meetings and promoting asynchronous communication.\n* Promote clarity on dates and phases so distributions, working groups, and the whole community can plan accordingly.\n* Improve release cycle by moving technical decisions affecting the release to the Release Management team including Kubeflow platform\n\n### Non-Goals\n\n<!--\nWhat is out of scope for this KEP? Listing non-goals helps to focus discussion\nand make progress.\n-->\n\n## Proposal\n\n### Release Timelines\nKubeFlow Release x.x is moved to Quarterly Release = 12 weeks\n\n![alt text](release.png)\n\n* Notes: Release dates will not be changed unless critical changes are needed.\n\n* KubeFlow Release minor versions x.x.xx\n** Release can be 60-90 days.\n\n### Release Meetings and Communication\n* Create a new Release Management team on Slack for asynchronous communication within the team\n* Bi-weekly meetings during Software Development (Week 1-Week 8). Weekly meetings between week 9-12 as needed.\n* Meetings will focus on roadmap status, including blockers, feature discussions, the overall status of the release, and the help needed.\n\n### Release Documentation\n\n* Build a team of technical writers to be embedded in each working group for the release time frame. \n* Provide roles within the community to boost participation and bring new members into this group.\n* Technical Documentation Lead will lead this team; technical documentation can include a blog and slides to announce the Release.\n\n### Release Management Team: \nThe Release Management Team is composed by: Release Manager, WG Leads ( in some cases Liasons), Technical Doc Lead.\nResponsabilities:\n\n- Release team liaisons will be responsible not for the communication but for contributing to the release with documentation, source code, PRs review, etc, according to their skills and motivation.\n\n### Release Manager Responsibilities: \n- Responsible for the overall Kubeflow Release Process \n- Promote best practices for the release and software development process.\n- Manage the communication between the teams to understand current release status and potential blockers\n- Manage the communication with the community about the status of the Release or any help/blockers needed.\n- Approve & review the blog and slides announcing the Release.\n\n\n### Implementation -todo update release team\n* Week 0 -  (Release and Roadmap discussions) WG Leads and Release Manager meet to discuss the roadmap planned for the Release\n* Week 2 - (Software development Phase) WG Leads/Liaisons meet to discuss any release challenges, release changes, and help needed from the community (to communicate on Kubeflow Community Meeting)\n* Week 4 - (Software development Phase) WG Leads/Liaisons meet to discuss any release challenges, release changes, and help needed from the community (to communicate on Kubeflow Community Meeting)\n* Week 6 - (Software development Phase) WG Leads/Liaisons meet to discuss any release challenges, release changes, and help needed from the community (to communicate on Kubeflow Community Meeting)\n* Week 8 - (Last week of Software development Phase) WG Leads/Liaisons meet to discuss any release challenges, release changes, and help needed from the community (to communicate on Kubeflow Community Meeting)\n* Week 9 - (Feature Freeze and Prep for Release) WG Leads/Liaisons meet to discuss any release challenges, release changes, and help needed from the community (to communicate on Kubeflow Community Meeting). Discuss items required to prepare for Release (including documentation).\n* Week 10 - (Community and Distribution testing starts) Users and distributions run their automated test suites and try to stay away from manual labor-intensive tests.\n* Week 11 - (Bug Fixing) - Discuss any potential blockers for the Release.\n* Week 12 - (Release) - Items to discuss: bug fixes required, release cut, documentation needed.\n- Manifests WG leads synchronizes and cut the release on Kubeflow Platform/Manifests.\n- The Release Manager is responsible for approving/reviewing the blog and slides announcing the release.\n\n\n\n### Notes/Constraints/Caveats (Optional)\n\n* At this time, there is no plan to update support. No changes to support.\n* This proposal does not cover any changes on Kubeflow manifests vs Kubeflow Platform. This should be addressed in other KEP\n<!--\nWhat are the caveats to the proposal?\nWhat are some important details that didn't come across above?\nGo in to as much detail as necessary here.\nThis might be a good place to talk about core concepts and how they relate.\n-->\n\n"
  },
  {
    "path": "proposals/867-kubeflow-documentation-ai/README.md",
    "content": "# KEP-867: Kubeflow Documentation AI Assistant with Retrieval-Augmented Generation\n\n## Summary\n\nThis KEP proposes the development of an AI-powered documentation assistant for the Kubeflow ecosystem that leverages Retrieval-Augmented Generation (RAG) to provide accurate, contextual, and cited responses to user queries.\n\nThe assistant will be deployed as a cloud-native solution on Kubernetes, utilizing KServe for model serving, Kubeflow Pipelines for automated indexing, and an agentic approach to intelligently route queries between foundational LLM knowledge and documentation-specific retrieval.\n\n## Motivation\n\nKubeflow users currently face significant challenges in finding accurate information across fragmented sources:\n- **Fragmented Knowledge Base**: Critical information is scattered across multiple repositories, GitHub issues, pull requests, documentation pages, and community discussions.\n- **Manual Search Inefficiency**: Users must manually search through multiple sources, causing frustration and inefficiency.\n- **Limited Search Capabilities**: The current website relies on basic Google Custom Search, limited to static content.\n- **Knowledge Gap**: Many issues stem from underlying Kubernetes concepts that users expect to find in Kubeflow documentation.\n\nThe Kubeflow community's knowledge represents a valuable treasure trove of information that is currently underutilized due to accessibility challenges. By making this knowledge easily searchable and accessible through natural language queries, we can:\n- Reduce time-to-value for new users.\n- Decrease repetitive support requests.\n- Improve overall user experience.\n- Leverage the community's collective knowledge more effectively.\n\nThis proposal is related to the following issues:\n- **KEP-867**: [Kubeflow Documentation AI Assistant with Retrieval-Augmented Generation · Issue #867 · kubeflow/community](https://github.com/kubeflow/community/issues/867)\n- **website**: [Empowering Kubeflow Documentation with LLMs · Issue #4025 · kubeflow/website](https://github.com/kubeflow/website/issues/4025)\n\n### Goals\n\n- **Primary Goal**: Create an intelligent documentation assistant that can answer user queries using both foundational LLM knowledge and Kubeflow-specific documentation.\n- **Accessibility**: Provide a single chat interface on thw website for accessing information across all Kubeflow repositories and documentation.\n- **Accuracy**: Ensure responses are accurate, contextual, and properly cited.\n- **Scalability**: Build a system that can scale with the growing Kubeflow ecosystem.\n- **Maintainability**: Implement automated indexing to keep information current.\n- **Community Integration**: Provide feedback mechanisms to continuously improve the system.\n\n### Non-Goals\n\n- Replace current documentation: This system complements existing documentation rather than replacing it.\n- Implement a general-purpose chatbot: We intend to focus on Kubeflow-specific queries.\n- Operational debugging: We won't provide real-time debugging of user deployments.\n- Training new LLMs: We will use existing pre-trained models.\n- Multi-language support: Initial implementation will be English-only.\n- Outdated Examples: Many code examples and tutorials become outdated as the project evolves.\n\n## Proposal\n\nThe solution consists of two main workflows:\n1.  **Document Indexing Pipeline**: An automated system for ingesting, processing, and indexing documentation from various sources like GitHub repositories, pull requests, and the official website.\n2.  **Query-Answering Service**: A real-time service for handling user queries with intelligent routing between a foundational LLM and the indexed Kubeflow-specific knowledge.\n\n## Design Details\n\n### Architecture Overview\nThe solution consists of two main workflows:\n\n**Document Indexing Pipeline** - Automated system for ingesting, processing, and indexing documentation\n![Document Indexing Pipeline](./assets/indexing.svg)\n\n**Query-Answering Service** - Real-time service for handling user queries with intelligent routing\n![Query-Answering Service](./assets/query.svg)\n\nThe RAG-powered chatbot implementation consists of three core components that work together to provide intelligent, context-aware responses based on Kubeflow documentation:\n- **LLM Deployment**: Model serving infrastructure using KServe.\n- **Vector Database**: Document indexing and retrieval using Milvus.\n- **Backend Service**: RAG orchestration and WebSocket API.\n\n### 1. LLM Deployment with KServe\n\nWe use KServe to deploy and serve large language models in our Kubernetes cluster. KServe provides a standardized serving layer with automatic scaling, model versioning, and high availability.\n\n**Model Serving Setup**\n\nCreate a secret with your Hugging Face token:\n```yaml\napiVersion: v1\nkind: Secret\nmetadata:\n    name: hf-secret\ntype: Opaque    \nstringData:\n    HF_TOKEN: <your-huggingface-token>\n```\n\nDeploy the LLM using KServe InferenceService:\n```yaml\napiVersion: serving.kserve.io/v1beta1\nkind: InferenceService\nmetadata:\n  name: huggingface-llama3\nspec:\n  predictor:\n    model:\n      modelFormat:\n        name: huggingface\n      args:\n        - --model_name=llama3\n        - --model_id=meta-llama/meta-llama-3-8b-instruct\n      env:\n        - name: HF_TOKEN\n          valueFrom:\n            secretKeyRef:\n              name: hf-secret\n              key: HF_TOKEN\n      resources:\n        limits:\n          cpu: \"6\"\n          memory: 24Gi\n          nvidia.com/gpu: \"1\"\n```\n\n### 2. Vector Database with Feast + Milvus\n\nDeploy Milvus using Helm:\n```bash\nhelm repo add milvus https://milvus-io.github.io/milvus-helm/\nhelm install my-release milvus/milvus\n```\n\n**Document Indexing Pipeline (Kubeflow Pipelines Integration)**\n```python\n@component(\n    base_image=\"python:3.9\",\n    packages_to_install=[\n        \"pymilvus==2.3.0\",\n        \"sentence-transformers==2.2.2\", \n        \"gitpython==3.1.32\"\n    ]\n)\ndef repo_indexing_component(\n    repo_urls: list,\n    milvus_host: str = \"my-release-milvus\",\n    milvus_port: str = \"19530\",\n    rebuild: bool = False\n) -> dict:\n    \"\"\"Kubeflow component for repository indexing\"\"\"\n    \n    # Implementation includes:\n    # - Repository cloning and file scanning\n    # - Text chunking with 512 token chunks and 50% overlap\n    # - Embedding generation using all-mpnet-base-v2\n    # - Milvus collection creation and data insertion\n    \n    return {\n        \"status\": \"success\",\n        \"total_chunks\": total_chunks,\n        \"processed_repos\": processed_repos\n    }\n\n@pipeline(name=\"kubeflow-docs-indexing-pipeline\")\ndef indexing_pipeline(\n    repo_urls: list = [\n        \"https://github.com/kubeflow/website\",\n        \"https://github.com/kubeflow/kubeflow\"\n    ],\n    rebuild: bool = False\n):\n    indexing_task = repo_indexing_component(\n        repo_urls=repo_urls,\n        rebuild=rebuild\n    )\n    return indexing_task.outputs\n\n**Why Kubeflow Pipelines (KFP) Over a Simple ETL Script?**\n\nUsing KFP is a strategic choice for this project, providing enterprise-grade capabilities that a simple script cannot match. Here are the key benefits:\n\n*   **Native Alignment with the Kubeflow Ecosystem**: This project is not just *for* Kubeflow; it's a showcase *of* Kubeflow. Using KFP makes the system instantly familiar to the community and demonstrates the power of our own tools.\n\n*   **Massive Parallel Processing**: As we add more repositories, KFP will be essential. It can process multiple PRs and components in parallel, not one by one, which is critical for scaling the system.\n\n*   **Incremental Builds (Change-Driven Logic)**: The pipeline is designed to process only the files that have changed in a commit, not the entire repository. This is far more efficient than a simple script that would need complex logic to track file states.\n\n*   **Granular Resource Management & Cost Optimization**: Our pipeline has GPU-heavy tasks (like embedding generation) and CPU-only tasks. KFP allows us to assign the right resources to the right component. This segregation is crucial for managing costs on our cluster.\n\n*   **Rich UI for Observability**: KFP provides a rich UI that allows us to see component-wise logs and visualize the pipeline's execution. This makes optimization and debugging far easier than parsing a giant log file.\n\n*   **Component Reusability**: Reusability is a common challenge in data workflows. KFP's component-based structure allows us to build reusable, modular pieces that can be shared across different pipelines.\n\n*   **Experiment and Pipeline Versioning**: We can version our pipelines as `v1`, `v2`, etc., making it easy to track changes, roll back if needed, and run different experiments.\n\n### 3. Backend Service\n\nThe backend service orchestrates the RAG workflow with WebSocket API for real-time responses.\n\n**Key Features**:\n- WebSocket API for real-time streaming responses.\n- RAG Integration with automatic context retrieval from Milvus.\n- Fallback Handling for queries without relevant context.\n- Source Attribution showing which documents informed the response.\n\n**Service Implementation (Simplified)**\n```python\nfrom fastapi import FastAPI, WebSocket\nfrom pymilvus import MilvusClient\nfrom sentence_transformers import SentenceTransformer\n\nclass RAGSearcher:\n    def __init__(self, milvus_host=\"milvus-service\", milvus_port=\"19530\"):\n        self.client = MilvusClient(uri=f\"http://{milvus_host}:{milvus_port}\")\n        self.encoder = SentenceTransformer(\"all-mpnet-base-v2\")\n    \n    def search(self, query: str, limit: int = 5) -> List[Dict]:\n        query_vector = self.encoder.encode(query).tolist()\n        # Search across collections and return formatted results\n        return results\n\napp = FastAPI()\nrag_searcher = RAGSearcher()\n\n@app.websocket(\"/ws\")\nasync def ws(ws: WebSocket):\n    await ws.accept()\n    # Handle WebSocket communication and RAG processing\n```\n\n**Deployment Configuration**\n```yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: rag-chatbot-backend\nspec:\n  replicas: 2\n  template:\n    spec:\n      containers:\n      - name: backend\n        image: your-registry/rag-chatbot-backend:latest\n        ports:\n        - containerPort: 8000\n        env:\n        - name: MILVUS_HOST\n          value: \"my-release-milvus\"\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: rag-chatbot-service\nspec:\n  selector:\n    app: rag-chatbot-backend\n  ports:\n  - port: 8000\n    targetPort: 8000\n```\n\n### 4. Main Branch Change Detection and Re-indexing\n\nTo keep the knowledge base current with the latest changes, we implement a GitHub Actions workflow that triggers re-indexing when PRs are merged to the main branch.\n\n**GitHub Actions Workflow**\n```yaml\n# .github/workflows/docs-reindex.yml\nname: Documentation Re-indexing on Main Branch Changes\n\non:\n  push:\n    branches: [ main, master ]\n    paths:\n      - 'docs/**'\n      - '*.md'\n      - 'examples/**'\n      - 'manifests/**'\n\njobs:\n  detect-changes:\n    runs-on: ubuntu-latest\n    outputs:\n      changed-files: ${{ steps.changes.outputs.files }}\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 2\n      \n      - name: Get changed files\n        id: changes\n        run: |\n          echo \"files=$(git diff --name-only HEAD~1 HEAD | grep -E '\\.(md|py|yaml|yml|ipynb)$' | jq -R -s -c 'split(\"\\n\")[:-1]')\" >> $GITHUB_OUTPUT\n\n  reindex-docs:\n    needs: detect-changes\n    if: ${{ needs.detect-changes.outputs.changed-files != '[]' }}\n    runs-on: ubuntu-latest\n    steps:\n      - name: Trigger KFP Re-indexing Pipeline\n        run: |\n          curl -X POST \\\n            -H \"Authorization: Bearer ${{ secrets.KFP_TOKEN }}\" \\\n            -H \"Content-Type: application/json\" \\\n            -d '{\n              \"pipeline_id\": \"docs-reindex-pipeline\",\n              \"parameters\": {\n                \"repository\": \"${{ github.repository }}\",\n                \"changed_files\": ${{ needs.detect-changes.outputs.changed-files }},\n                \"commit_sha\": \"${{ github.sha }}\"\n              }\n            }' \\\n            \"${{ secrets.KFP_ENDPOINT }}/api/v1/runs\"\n```\n\n**Incremental Re-indexing Pipeline Component**\n```python\n@component(\n    base_image=\"python:3.9\",\n    packages_to_install=[\n        \"pymilvus==2.3.0\",\n        \"sentence-transformers==2.2.2\", \n        \"gitpython==3.1.32\"\n    ]\n)\ndef incremental_reindex_component(\n    repository: str,\n    changed_files: list,\n    commit_sha: str,\n    milvus_host: str = \"my-release-milvus\",\n    milvus_port: str = \"19530\"\n) -> dict:\n    \"\"\"Re-index only changed files from main branch\"\"\"\n    \n    import git\n    import os\n    from pymilvus import MilvusClient\n    from sentence_transformers import SentenceTransformer\n    \n    # Initialize clients\n    client = MilvusClient(uri=f\"http://{milvus_host}:{milvus_port}\")\n    encoder = SentenceTransformer(\"all-mpnet-base-v2\")\n    \n    # Clone repository\n    repo_url = f\"https://github.com/{repository}.git\"\n    repo_dir = f\"/tmp/{repository.split('/')[-1]}\"\n    \n    if os.path.exists(repo_dir):\n        repo = git.Repo(repo_dir)\n        repo.remotes.origin.pull()\n    else:\n        repo = git.Repo.clone_from(repo_url, repo_dir)\n    \n    # Checkout specific commit\n    repo.git.checkout(commit_sha)\n    \n    processed_files = []\n    collection_name = f\"docs_{repository.split('/')[-1].replace('-', '_').lower()}\"\n    \n    # Ensure collection exists\n    if not client.has_collection(collection_name):\n        client.create_collection(\n            collection_name=collection_name,\n            dimension=768,\n            metric_type=\"COSINE\"\n        )\n    \n    for file_path in changed_files:\n        full_path = os.path.join(repo_dir, file_path)\n        \n        if not os.path.exists(full_path):\n            # File was deleted, remove from index\n            file_id = hash(f\"{repository}:{file_path}\")\n            try:\n                client.delete(\n                    collection_name=collection_name,\n                    filter=f\"file_path == '{file_path}'\"\n                )\n                processed_files.append({\n                    \"file\": file_path,\n                    \"action\": \"deleted\"\n                })\n            except Exception as e:\n                print(f\"Error deleting {file_path}: {e}\")\n            continue\n        \n        # Read and process file content\n        try:\n            with open(full_path, 'r', encoding='utf-8') as f:\n                content = f.read()\n            \n            # Remove existing chunks for this file\n            client.delete(\n                collection_name=collection_name,\n                filter=f\"file_path == '{file_path}'\"\n            )\n            \n            # Chunk content (512 tokens with 50% overlap)\n            chunks = chunk_text(content, chunk_size=512, overlap=0.5)\n            \n            # Process each chunk\n            for i, chunk in enumerate(chunks):\n                if len(chunk.strip()) < 50:  # Skip very short chunks\n                    continue\n                \n                embedding = encoder.encode(chunk).tolist()\n                \n                chunk_data = {\n                    \"id\": int(f\"{hash(f'{repository}:{file_path}:{i}') % 1000000000}\"),\n                    \"vector\": embedding,\n                    \"repo_name\": repository.split('/')[-1],\n                    \"file_path\": file_path,\n                    \"chunk_index\": i,\n                    \"content\": chunk[:2000],  # Truncate if too long\n                    \"commit_sha\": commit_sha,\n                    \"last_updated\": datetime.now().isoformat()\n                }\n                \n                client.insert(collection_name=collection_name, data=[chunk_data])\n            \n            processed_files.append({\n                \"file\": file_path,\n                \"action\": \"updated\",\n                \"chunks\": len(chunks)\n            })\n            \n        except Exception as e:\n            print(f\"Error processing {file_path}: {e}\")\n            processed_files.append({\n                \"file\": file_path,\n                \"action\": \"error\",\n                \"error\": str(e)\n            })\n    \n    # Flush collection\n    if processed_files:\n        client.flush(collection_name)\n    \n    return {\n        \"status\": \"success\",\n        \"repository\": repository,\n        \"commit_sha\": commit_sha,\n        \"processed_files\": processed_files,\n        \"total_files\": len(processed_files)\n    }\n\ndef chunk_text(text: str, chunk_size: int = 512, overlap: float = 0.5) -> list:\n    \"\"\"Split text into overlapping chunks\"\"\"\n    words = text.split()\n    chunks = []\n    \n    if len(words) <= chunk_size:\n        return [text]\n    \n    step = int(chunk_size * (1 - overlap))\n    \n    for i in range(0, len(words), step):\n        chunk_words = words[i:i + chunk_size]\n        if len(chunk_words) >= chunk_size * 0.3:  # Minimum chunk size\n            chunks.append(' '.join(chunk_words))\n    \n    return chunks\n\n@pipeline(name=\"incremental-docs-reindex-pipeline\")\ndef incremental_reindex_pipeline(\n    repository: str,\n    changed_files: list,\n    commit_sha: str\n):\n    \"\"\"Pipeline to re-index only changed files\"\"\"\n    \n    reindex_task = incremental_reindex_component(\n        repository=repository,\n        changed_files=changed_files,\n        commit_sha=commit_sha\n    )\n    \n    return reindex_task.outputs\n```\n\n**Repository Setup for Auto-indexing**\n\nEach monitored repository needs to add the workflow file and configure secrets:\n\n```yaml\n# Required secrets in each repository:\n# KFP_TOKEN - Authentication token for Kubeflow Pipelines\n# KFP_ENDPOINT - Kubeflow Pipelines API endpoint\n```\n\n**Supported File Types for Re-indexing**\n- **Markdown files** (`.md`) - Documentation, READMEs, guides\n- **Python files** (`.py`) - Code examples, scripts\n- **YAML files** (`.yaml`, `.yml`) - Configuration examples, manifests\n- **Jupyter notebooks** (`.ipynb`) - Tutorials, examples\n\n### Implementation Plan\n\n#### Phase 1: Repository Setup and Infrastructure Planning\n- Create a new repository under the Kubeflow organization: `kubeflow/docs-bot`\n- Define cloud resource requirements for:\n  - LLM inference (GPU/CPU requirements for Llama 3.1 8B or Mistral 7B)\n  - Milvus vector database deployment\n  - Backend service hosting\n- Establish project structure with clear separation of concerns:\n  - `/milvus` - yaml files for deploying milvus\n  - `/config` - Cluster configuration\n  - `/backend` - API and WebSocket services\n  - `/LLM` - LLM deployment and loading scripts.\n  - `/tests` - Testing infrastructure.\n\n#### Phase 2: Development and Testing\n\n**2.1 LLM Deployment and Benchmarking with KServe**\n- **Model Selection and Evaluation**: Deploy and benchmark multiple LLM options locally:\n  - Llama 3.1 8B Instruct (primary candidate)\n  - Mistral 7B Instruct (fallback option)\n  - Evaluate response quality, inference speed, and resource requirements\n- **KServe Integration**: \n  - Configure KServe InferenceService with appropriate resource limits (GPU/CPU)\n  - Implement model versioning and A/B testing capabilities\n  - Set up autoscaling policies based on query volume\n  - Configure health checks and monitoring for model endpoints\n\n**2.2 Vector Database Setup with Milvus and Feast Integration**\n- **Milvus Deployment**:\n  - Deploy Milvus cluster with persistent storage for vector embeddings\n  - Configure collection schemas for different data types (docs, PRs, issues)\n  - Set up indexing strategies (IVF_FLAT, HNSW) for optimal search performance\n  - Implement backup and disaster recovery procedures\n- **Feast Integration** (Optional Enhancement):\n  - Configure Feast for feature store capabilities to manage document metadata\n  - Set up feature pipelines for document freshness tracking\n  - Implement feature serving for real-time document ranking\n  - Create feature views for user interaction patterns and query analytics\n\n**2.3 Data Source Ingestion and ETL Pipeline Development**\n\n**Primary Data Sources**:\n- **Core Repositories**:\n  - `kubeflow/website` - Official documentation, tutorials, guides\n  - `kubeflow/kubeflow` - Main repository with manifests and core documentation\n  - `kubeflow/pipelines` - KFP-specific documentation and examples\n  - `kubeflow/training-operator` - Training workload documentation\n  - `kubeflow/serving` - Model serving documentation\n  - `kubeflow/katib` - Hyperparameter tuning documentation\n  - `kubeflow/notebooks` - Notebook server documentation\n\n**Secondary Data Sources**:\n- **Community Resources**:\n  - `kubeflow/community` - Governance, proposals, meeting notes\n  - Release notes and changelogs\n  - Community meeting transcripts and recordings (future enhancement)\n\n**ETL Pipeline Implementation with Kubeflow Pipelines**:\n- **Document Processing Pipeline**:\n  - File type handlers (Markdown, Python, YAML, Jupyter notebooks)\n  - Text chunking with semantic boundaries (512 tokens, 50% overlap)\n  - Metadata extraction (repository, file path, last modified, commit SHA)\n  - Embedding generation using sentence-transformers (all-mpnet-base-v2)\n- **Main Branch Change Detection**:\n  - GitHub Actions workflow triggers on main branch pushes\n  - Incremental re-indexing of only changed files\n  - Automatic cleanup of deleted files from index\n  - Commit-based versioning for change tracking\n- **KFP Pipeline Components**:\n  - `repo_clone_component` - Git repository cloning and file scanning\n  - `document_processor_component` - Text extraction and chunking\n  - `embedding_generator_component` - Vector embedding creation\n  - `milvus_indexer_component` - Vector database insertion\n  - `incremental_reindex_component` - Re-index only changed files\n  - `quality_validator_component` - Data quality checks and validation\n\n**2.4 Backend Services Development**\n- **WebSocket API Service**:\n  - Real-time bidirectional communication for streaming responses\n  - Connection management and session handling\n  - Rate limiting per user/session\n  - Error handling and graceful degradation\n- **RAG Pipeline Orchestration**:\n  - Query preprocessing and intent classification\n  - Vector similarity search with hybrid scoring\n  - Context ranking and relevance filtering\n  - Response generation with source attribution\n  - Fallback mechanisms for out-of-scope queries\n- **GitHub API Integration Service**:\n  - Authenticated API calls with token rotation\n  - Pull request and issue data synchronization\n  - Comment and discussion thread processing\n  - Webhook integration for real-time updates (future enhancement)\n\n**2.5 Security Implementation**\n- **Authentication and Authorization**:\n  - RBAC integration with Kubernetes service accounts\n  - User session management and token validation\n  - API key management for external services\n- **Rate Limiting and Abuse Prevention**:\n  - Per-user query limits (e.g., 50 queries/hour)\n  - IP-based rate limiting for anonymous users\n  - Query complexity analysis and throttling\n- **Prompt Injection Protection**:\n  - Input sanitization and validation\n  - Prompt template hardening\n  - Response filtering for sensitive information\n  - Audit logging for security monitoring\n\n**2.6 Monitoring and Observability**\n- **Performance Metrics**:\n  - Query response time tracking (target: <5 seconds)\n  - Vector search latency and accuracy metrics\n  - LLM inference time and token usage\n  - System resource utilization (CPU, GPU, memory)\n- **Quality Metrics**:\n  - User feedback collection (thumbs up/down)\n  - Response relevance scoring\n  - Source attribution accuracy\n  - Error rate tracking and alerting\n- **Operational Metrics**:\n  - ETL pipeline success rates and data freshness\n  - API endpoint availability and health checks\n  - Database connection pooling and query performance\n\n#### Phase 3: Deployment and Integration\n- Deploy complete stack to Kubernetes cluster with monitoring\n- Integrate WebSocket with Kubeflow website and add UI/UX components\n- Conduct community testing and launch docs bot\n\n## Test Plan\n\nThe goal is to ensure that we don't accept enhancements with inadequate testing.\nAll code is expected to have adequate tests (eventually with coverage\nexpectations). Please adhere to the Kubeflow testing guidelines when drafting this test plan.\n\n- **Automated LLM Response Testing**: Create predefined question set drafted by community. Run automated evaluation on every merge to validate response accuracy and consistency.\n- **Performance Testing**: Target: < 5 seconds average response time. Monitor end-to-end pipeline and optimize bottlenecks. Load testing for concurrent users.\n- **Security Testing**: RBAC enforcement validation. Prompt injection testing with guardrails. GitHub issue creation spam prevention with rate limiting.\n- **User Feedback Validation**: Test thumbs up/down logging and GitHub issue creation. Community beta testing with selected members.\n\n[ ] I/we understand the owners of the involved components may require updates to\nexisting tests to make this code solid enough prior to committing the changes necessary\nto implement this enhancement.\n\n#### Prerequisite testing updates\n\nSince this is a new component for the Kubeflow ecosystem, testing infrastructure will be built from scratch, including unit tests for ETL pipeline, integration tests for backend services, and security validation.\n\n#### Unit Tests\n- `<package>`: `<date>` - `<test coverage>`\n\n#### E2E tests\n- E2E tests will be added to verify the complete RAG pipeline, from user query to response generation, including the UI interaction.\n\n#### Integration tests\n- Integration tests will be created to validate the interaction between the backend service, Milvus, KServe, and the GitHub API.\n\n## Graduation Criteria\n\n- **Alpha**: ETL pipeline processes website docs, basic RAG functionality working, local deployment completed.\n- **Beta**: Multi-repository support, cloud deployment operational, community testing completed, performance targets met (< 5s response time).\n- **Stable**: Full documentation coverage, production deployment, comprehensive testing, community adoption.\n\n## Implementation History\n\n- To be updated as development progresses\n\n## Drawbacks\n\nPotential Drawbacks Include:\n- LLM may provide incorrect or outdated responses despite RAG implementation.\n- Nightly ETL updates mean recent changes won't be immediately reflected.\n- Responses confined to ingested sources; may miss broader context.\n- Success depends on effective system prompts and guardrails to prevent misuse.\n- Significant computational resources required for LLM inference.\n\n## Alternatives\n\n- **KubeGPT**: Existing Kubernetes-focused AI assistant for cluster analysis, but focused on operations rather than documentation assistance.\n- **ChatGPT/Claude Integration**: Commercial LLM APIs could reduce infrastructure overhead but raise data privacy concerns and external service dependencies.\n- **Kubernetes-Native GPT Solutions**: Solutions like K8sGPT and Robusta focus on operational aspects rather than comprehensive documentation assistance, making them complementary rather than competitive.\n"
  },
  {
    "path": "proposals/872-spark-history-server-mcp/README.md",
    "content": "# KEP-872: Adoption of Spark History Server MCP in Kubeflow\n\n## Authors\n\n- Manabu McCloskey, DeepDiagnostix AI ([@manabu-mccloskey](https://github.com/manabu-mccloskey))\n- Vara Bonthu, DeepDiagnostix AI ([@vara-bonthu](https://github.com/vara-bonthu))\n\n## Summary\n\nThis proposal requests **donation and adoption** of the existing Spark History Server MCP project into the Kubeflow ecosystem. The [Spark History Server](https://spark.apache.org/docs/latest/monitoring.html#web-uis) is [Apache Spark](https://spark.apache.org/docs/latest/index.html)'s built-in web UI service that provides access to information about completed Spark applications, including job execution details, stage performance, and task-level metrics. \n\n**Our fully developed and production-ready project** provides a Model Context Protocol (MCP) server that enables AI agents to analyze this Spark application data through natural language queries, complementing the existing Kubeflow Spark Operator with intelligent observability capabilities. The project is **mature with multiple releases** and is being donated to ensure community-driven maintenance and future enhancement within the Kubeflow ecosystem.\n\n## What is Spark History Server?\n\nThe Spark History Server is a web application that serves as the central repository for monitoring completed Apache Spark applications. It provides:\n\n- **Application Monitoring**: Web UI for viewing completed Spark application details\n- **Event Log Storage**: Persistent storage of Spark application event logs (typically in HDFS, S3, or local filesystem)\n- **Performance Metrics**: Job, stage, and task-level execution statistics\n- **Resource Usage**: Executor memory, CPU utilization, and storage metrics\n- **Historical Analysis**: Timeline view of application execution and performance trends\n\nThe Spark History Server is essential for post-mortem analysis and performance optimization of Spark workloads, but currently requires manual navigation through complex web interfaces to extract insights.\n\n## Motivation\n\nKubeflow users running Spark workloads currently lack AI-powered troubleshooting capabilities. While the Spark Operator handles job lifecycle management, users must manually analyze Spark UI logs, metrics, and performance data when jobs fail or perform poorly.\n\n### Goals\n\n- **Enable Natural Language Spark Analysis**: Provide conversational AI interface for Spark troubleshooting and performance analysis\n- **Integrate with Kubeflow Ecosystem**: Seamlessly connect with existing Spark Operator and History Server infrastructure\n- **AI-Powered Insights**: Deliver intelligent recommendations for Spark job optimization and failure diagnosis\n- **Standardized AI Integration**: Implement Model Context Protocol (MCP) standard for consistent AI agent interactions\n- **Multi-Framework Support**: Enable compatibility with various AI tools (Claude, Amazon Q, LangGraph, etc.)\n\n### Non-Goals\n\n- **Replace Existing Monitoring**: Not intended to replace Spark UI, Grafana, or other established monitoring tools\n- **Real-time Job Monitoring**: Focus only on completed job analysis, not live job monitoring\n- **Modify Core Spark Components**: No changes to Spark History Server core functionality or Spark Operator\n- **Custom Spark Distribution**: Not creating a fork or custom version of Apache Spark\n- **Direct Database Access**: Will not bypass Spark History Server APIs or access event logs directly\n\n### Problem Statement\n- Manual analysis of Spark performance issues is time-consuming\n- Lack of intelligent troubleshooting capabilities  \n- No natural language interface for Spark observability\n- Disconnected monitoring tools that don't integrate with AI workflows\n- Complex Spark History Server web UI requires expertise to navigate effectively\n\n**Related GitHub Issue**: https://github.com/kubeflow/community/issues/872\n\n## Architecture Overview\n\n```mermaid\ngraph TB\n    subgraph \"User Interface\"\n        USER[Users via Web UI<br/>Amazon Q CLI, Claude, LangGraph, Strands]\n    end\n\n    subgraph \"AI Analysis Layer\"\n        MCP[Spark History Server MCP<br/>AI-Powered Analysis<br/>📋 THIS PROPOSAL]\n    end\n\n    subgraph \"Spark Infrastructure\"\n        SHS[Spark History Server<br/>Event Logs & Metrics]\n        SO[Spark Operator<br/>Running Spark Jobs]\n    end\n\n    USER -->|Natural Language Queries| MCP\n    MCP -->|Fetch Data via REST API| SHS\n    SO -->|Writes Event Logs| SHS\n    MCP -->|AI Analysis & Recommendations| USER\n\n    classDef user fill:#e1f5fe\n    classDef proposal fill:#ffeb3b,stroke:#f57f17,stroke-width:3px\n    classDef spark fill:#fff3e0\n\n    class USER user\n    class MCP proposal\n    class SHS,SO spark\n```\n\n\n## CNCF Short Checklist\n\n### Vendor Neutrality Checklist\n- [x] All project metadata and resources are vendor-neutral\n- [x] Project branding and naming do not favor any specific vendor\n- [x] Documentation and examples use generic cloud/infrastructure references\n- [x] No vendor-specific lock-in in core functionality\n\n### Governance Structure\n- [x] OWNERS file with clear maintainer structure\n- [x] Transparent decision-making process\n- [x] Open community contribution model\n- [x] Code review requirements for all changes\n\n### Contributing Guides\n- [x] Comprehensive CONTRIBUTING.md documentation\n- [x] Clear code of conduct\n- [x] Development environment setup instructions\n- [x] Issue and pull request templates\n\n### Public List of Adopters\n- [x] ADOPTERS.md file tracking public usage\n- [x] Community feedback and testimonials\n- [x] Case studies and success stories\n- [x] Public community channels for support\n\n## Background Information\n\n### Project Submission Details\n- **Submitter Name**: Vara Bonthu\n- **Submitter's Relationship to Project**: Co-founder and Lead Maintainer, DeepDiagnostix AI\n- **Project Name**: Spark History Server MCP\n- **Submitter's Title**: Senior Software Engineer, DeepDiagnostix AI\n\n### Project's Value to Kubeflow Community\n- **First AI-Powered Data Observability Tool**: Introduces natural language interface for Spark troubleshooting, pioneering AI integration in Kubeflow's data processing stack\n- **Enhanced Developer Experience**: Transforms complex Spark performance analysis from manual UI navigation to conversational queries\n- **Community Knowledge Sharing**: AI-generated insights help distribute Spark optimization expertise across skill levels\n- **Foundation for Future AI Tools**: Establishes MCP protocol pattern for AI integration across other Kubeflow components\n\n### Benefits of Joining Kubeflow Community\n- **Ecosystem Integration**: Native integration with existing Spark Operator and History Server infrastructure\n- **Community Support**: Access to Kubeflow's extensive community for feedback, contributions, and adoption\n- **Standardization**: Alignment with Kubeflow's governance, security, and operational standards\n- **Visibility**: Increased adoption through Kubeflow's established user base and ecosystem\n- **Collaborative Development**: Contribution from Kubeflow community members and maintainers\n\n### Existing/Potential Kubeflow Core Component Integrations\n- **Kubeflow Spark Operator**: **Direct and immediate integration** with SparkApplication CRs and event logs - designed as a complementary tool that enhances existing Spark Operator deployments without requiring changes\n- **Kubeflow Profiles**: Full namespace isolation and RBAC compliance - works within existing Kubeflow security model\n- **Kubeflow Central Dashboard**: Potential future integration for AI-powered Spark insights accessible through the main Kubeflow interface\n- **Kubeflow Pipelines**: Future integration for ML pipeline Spark job analysis and optimization recommendations\n\n\n### License and Legal Status\n- **License Agreement**: Apache License 2.0 (CNCF compatible)\n- **Open Source Foundation Status**: Independent open source project, ready for CNCF contribution\n- **Trademark Status**: No existing trademark conflicts, ready for transition to Kubeflow governance\n- **Legal Profile**: Clean intellectual property with clear contributor agreements\n\n### Technical Details\n- **First Release Date**: August 2025 (v0.1.1 available)\n- **Current Repository**: https://github.com/DeepDiagnostix-AI/mcp-apache-spark-history-server\n- **Production Status**: Multiple releases with active production deployments\n- **Docker Image**: Published container images for Kubernetes deployment\n- **Helm Chart**: Production-ready Helm charts for easy installation\n- **Website**: Project documentation hosted on GitHub Pages\n- **CI/CD Infrastructure**: GitHub Actions with automated testing and release pipeline\n- **Security Profile**: Security scanning, vulnerability management, and RBAC integration\n\n### Community and Governance\n- **Project Meeting Times**: Monthly community calls every second Wednesday at 10 AM PST\n- **Meeting Notes**: Public meeting notes maintained in GitHub repository\n- **Governance Structure**: OWNERS-based governance with clear maintainer responsibilities\n- **Authorization Mechanisms**: Kubernetes RBAC integration with namespace isolation\n\n### Project Roadmap\n\n#### Donation and Integration Phase (Q3 2025)\n- **Repository Transfer**: Migrate from DeepDiagnostix-AI organization to kubeflow/spark-history-server-mcp\n- **Kubeflow Governance Setup**: Implement OWNERS files, contributor agreements, and community standards\n- **Container Registry Migration**: Transfer Docker images to Kubeflow-managed registries\n- **Helm Chart Integration**: Align with Kubeflow Spark Operator deployment patterns\n- **Documentation Migration**: Create Kubeflow website documentation and integration guides\n- **Community Onboarding**: Establish maintainer structure and contribution processes\n\n#### Post-Donation Enhancement (Q4 2025)\n- **Kubeflow Integration**: Deep integration with Spark Operator CRDs and event logs\n- **Enhanced AI Capabilities**: Community-driven feature development and multi-framework support\n- **Performance Optimization**: Scale testing and optimization for large Kubeflow deployments\n\n#### Long-term Vision (2026+)\n- **Template for AI Tools**: Establish pattern for AI-powered observability across Kubeflow ecosystem\n- **Integration with Additional Components**: Connect with Kubeflow Pipelines, Katib, and Central Dashboard\n- **Community-Driven Innovation**: Feature development guided by Kubeflow community needs\n\n## Kubeflow Checklist\n\n1.  Overlap with existing Kubeflow projects\n    - [ ] Yes (If so please list them)\n    - [x] No\n\n2. Manifest Integration\n    - [ ] Yes\n    - [x] No\n    - [ ] Planned\n\n3. Commitment to Kubeflow Conformance Program\n    - [x] Yes\n    - [ ] No\n    - [ ] Uncertain\n\n4. Installation\n    - [x] Standalone/Self-contained Component\n    - [ ] Part of Manifests\n    - [ ] Part of Distributions\n\n5. Installation Documentation (Current Quality)\n    - [x] Good\n    - [ ] Fair\n    - [ ] Part of Kubeflow\n\n6. CI/CD \n    - [x] Yes\n    - [ ] No\n\n7. Release Process\n    - [ ] Automated\n    - [x] Semi-automated\n    - [ ] Not Automated\n\n8. Kubeflow Website Documentation\n    - [ ] Yes\n    - [x] No\n\n9. Blog/Social Media \n    - [x] Yes\n    - [ ] No\n\n\n##  How It Works\n\n- Users interact with AI tools to ask questions about Spark performance\n- Spark History Server MCP (this proposal) processes queries and fetches data from Spark History Server\n- Spark Operator continuously writes event logs to Spark History Server\n- MCP Server returns AI-powered analysis and recommendations to users\n\n## Design Details\n\n### Technical Architecture\n\nThe Spark History Server MCP consists of the following key components:\n\n#### MCP Server Implementation\n- **Language**: TypeScript/Node.js for MCP protocol compatibility\n- **Protocol**: Model Context Protocol v1.0 specification\n- **Communication**: JSON-RPC 2.0 over stdio/WebSocket\n- **API Integration**: REST client for Spark History Server HTTP APIs\n\n#### Kubernetes Deployment\n```yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: spark-history-mcp-server\n  labels:\n    app.kubernetes.io/name: spark-history-mcp\n    app.kubernetes.io/component: mcp-server\n    app.kubernetes.io/part-of: kubeflow\nspec:\n  template:\n    spec:\n      containers:\n      - name: mcp-server\n        image: kubeflow/spark-history-mcp:latest\n        ports:\n        - containerPort: 8080\n        env:\n        - name: SPARK_HISTORY_SERVER_URL\n          value: \"http://spark-history-server:18080\"\n```\n\n#### API Endpoints Utilized\n- `GET /api/v1/applications` - List all applications\n- `GET /api/v1/applications/{appId}/jobs` - Job details\n- `GET /api/v1/applications/{appId}/stages` - Stage information\n- `GET /api/v1/applications/{appId}/executors` - Executor metrics\n\n#### MCP Tools Exposed\n1. **`list_spark_applications`**: Retrieve all completed Spark applications\n2. **`analyze_application_performance`**: Analyze specific application metrics\n3. **`get_job_failures`**: Identify failed jobs and root causes  \n4. **`recommend_optimizations`**: AI-generated performance recommendations\n5. **`compare_applications`**: Compare performance across multiple runs\n\n### Integration Points\n\n#### With Kubeflow Spark Operator\n- **Seamless Integration**: Designed to complement the existing Kubeflow Spark Operator workflow\n- **Event Log Access**: Reads logs written by Spark Operator jobs without modification to existing infrastructure\n- **Namespace Isolation**: Respects Kubeflow profile-based access controls and RBAC policies\n- **Job Metadata**: Correlates with SparkApplication CRs for enhanced context and cross-referencing\n- **Deployment Alignment**: Helm charts follow same patterns as Spark Operator for consistent installation experience\n- **Monitoring Integration**: Works alongside existing Spark Operator monitoring without conflicts\n\n#### With AI Frameworks\n- **MCP Protocol**: Standard interface for Claude, Amazon Q, LangGraph\n- **Tool Discovery**: Dynamic tool registration and capability advertisement\n- **Context Management**: Maintains conversation state for complex analyses\n\n## Benefits\n\n### First AI Tool for Data Processing\n- **Pioneer AI Integration**: First AI-powered observability tool in Kubeflow ecosystem for data processing frameworks\n- **Natural Language Interface**: Enables data engineers to troubleshoot Spark using conversational AI instead of manual UI navigation\n- **MCP Standard Adoption**: Leverages emerging Model Context Protocol for standardized AI agent integration\n\n### Enhanced Spark Operations\n- **Intelligent Diagnosis**: AI-powered root cause analysis for failed or slow Spark jobs\n- **Performance Optimization**: Natural language recommendations for resource allocation and configuration tuning\n- **Simplified Troubleshooting**: Transforms complex Spark analysis into simple conversational queries\n\n### Community Value\n- **Data Working Group Expansion**: Adds first AI-powered tool to complement existing data processing operators\n- **Knowledge Sharing**: AI-generated insights help spread Spark optimization expertise across the community\n- **Foundation for Future Tools**: Creates template for AI-powered tools across other Kubeflow data processing frameworks\n\n## AWS Community Support Pledge\n\nThe AWS Open Source team commits to continuing support and building the community around the Spark History Server MCP within the Kubeflow ecosystem. From the AWS Open Source team, Vara Bonthu, Manabu McCloskey, and the AWS Data Processing Service team will continue to support and build the community. This commitment includes:\n\n- **Ongoing Community Building**: AWS will continue to support and grow the contributor community until it is ready for complete community ownership\n- **Gradual Handover**: AWS will transition maintenance responsibilities once the community demonstrates readiness to take over completely\n- **Vendor-Neutral Development**: As a vendor-neutral open source solution, this project is designed to attract participation from multiple cloud providers and users across the ecosystem\n\nThis approach ensures sustainable community growth while maintaining the project's vendor-neutral foundation that welcomes contributions from all cloud providers and users.\n\n## Maintainers\n\n**Initial Maintainers:**\n- Vara Bonthu, DeepDiagnostix AI ([@vara-bonthu](https://github.com/vara-bonthu))\n- Manabu McCloskey, DeepDiagnostix AI ([@manabu-mccloskey](https://github.com/manabu-mccloskey))\n- Amazon EMR/Glue team\n\n**Committed Community Contributors:**\n- [Open for community nominations]\n\n## Migration Plan\n\n### GitHub Repository\n\n1. **Repository Transfer**: Transfer from `DeepDiagnostix-AI/spark-history-server-mcp` to `kubeflow/spark-history-server-mcp`\n2. **API Alignment**: Update Kubernetes resources to use `kubeflow.org` API group\n3. **Documentation**: Migrate docs to Kubeflow website and create integration tutorials\n4. **Standards Adoption**: Align with Kubeflow branching, versioning, and configuration patterns\n\n## Existing Solutions\n\nWhile several Spark monitoring solutions exist, none provide the AI-powered natural language interface specifically designed for Kubeflow environments:\n\n### Current Spark Observability Tools\n- **Spark UI**: Basic web interface for Spark monitoring\n- **Spark History Server**: Historical job analysis (what our MCP enhances)\n- **Prometheus + Grafana**: Metrics-based monitoring dashboards\n- **Custom Solutions**: Organization-specific monitoring tools\n\n### Unique Value of Spark History Server MCP\n- **AI-Powered Analysis**: Only solution providing natural language interface for Spark troubleshooting\n- **MCP Standard**: Leverages emerging Model Context Protocol for AI agent integration\n- **Kubeflow Native**: Specifically designed for ML/AI workflow optimization\n- **Multi-Framework Support**: Works with 5+ AI frameworks (LangChain, Claude, Strands, Amazon Q, LangGraph)\n\n## Technical Implementation\n\n### Current Project Status\n- **Repository**: https://github.com/DeepDiagnostix-AI/mcp-apache-spark-history-server\n- **License**: Apache License 2.0\n- **Contributors**: 4+ active developers\n- **Release Status**: Production-ready with v0.1.1 and multiple prior releases\n- **Deployment**: Docker images and Helm charts available for immediate use\n- **Community**: Active user base with production deployments\n\n\n### Integration Requirements Met\n- ✅ **Open Source License**: Apache 2.0 (CNCF compatible)\n- ✅ **Governance**: OWNERS file with clear maintainer structure\n- ✅ **Contributing Guidelines**: Comprehensive documentation\n- ✅ **Adopters List**: Public adopters tracking\n- ✅ **Kubernetes Native**: Helm charts, production-ready deployment\n- ✅ **CI/CD**: Automated testing and release pipeline\n- ✅ **Security**: Security scanning and vulnerability management\n\n## Test Plan\n\n### Unit Tests\n- **MCP Protocol Compliance**: Test MCP server protocol implementation\n  - Tool registration and discovery\n  - JSON-RPC message handling\n  - Error response formatting\n- **Spark History Server Integration**: Mock API responses and validate parsing\n  - Application listing and filtering\n  - Performance metrics extraction\n  - Error handling for unavailable services\n- **AI Analysis Logic**: Test recommendation algorithms\n  - Performance bottleneck identification\n  - Resource optimization suggestions\n  - Failure pattern recognition\n\n**Target Coverage**: 90%+ code coverage for core MCP server functionality\n\n### Integration Tests\n- **End-to-End MCP Workflow**: \n  - AI client connects to MCP server\n  - Query execution and response validation  \n  - Multi-turn conversation state management\n- **Kubeflow Integration**:\n  - Spark Operator job completion → History Server → MCP analysis\n  - Namespace isolation and RBAC compliance\n  - Profile-based access control validation\n- **Error Scenarios**:\n  - Spark History Server unavailable\n  - Malformed query handling\n  - Resource limitation testing\n\n### E2E Tests\n- **Production Workflow Simulation**:\n  - Deploy complete Kubeflow + Spark Operator + MCP stack\n  - Run sample Spark jobs with various performance characteristics\n  - Validate AI analysis accuracy against known issues\n- **Multi-Framework Compatibility**:\n  - Test with Claude, Amazon Q CLI, and LangGraph clients\n  - Verify consistent behavior across AI frameworks\n- **Scale Testing**:\n  - 100+ concurrent Spark applications in History Server\n  - Multiple simultaneous MCP client connections\n  - Performance benchmarking under load\n\n### Performance Requirements\n- **Response Time**: < 2 seconds for simple queries, < 10 seconds for complex analysis\n- **Throughput**: Support 50+ concurrent AI client connections\n- **Resource Usage**: < 1GB memory, < 0.5 CPU cores under normal load\n\n## Donation and Integration Timeline\n\n### Why We're Donating This Project\n\n**Community-Driven Maintenance**: By donating to Kubeflow, we ensure the project benefits from community expertise, broader adoption, and sustainable long-term maintenance rather than being dependent on a single organization.\n\n**Ecosystem Integration**: Native integration with Kubeflow Spark Operator and other components will provide users with a seamless, cohesive experience for AI-powered Spark observability.\n\n**Standardization**: Alignment with Kubeflow's governance, security, and operational standards ensures enterprise-grade reliability and community trust.\n\n**Innovation Acceleration**: Community contributions will drive faster innovation and feature development than what a single organization can achieve.\n\n### Integration Process (Post-Acceptance)\n\n#### Phase 1: Repository and Asset Transfer (2-3 weeks)\n- **Repository Migration**: Transfer complete codebase from DeepDiagnostix-AI/mcp-apache-spark-history-server to kubeflow/spark-history-server-mcp\n- **Container Images**: Migrate Docker images to Kubeflow-managed container registries\n- **Helm Charts**: Transfer and align Helm deployment charts with Kubeflow standards\n- **Documentation**: Migrate existing documentation to Kubeflow website structure\n- **Release Assets**: Transfer all existing release artifacts and version history\n\n#### Phase 2: Kubeflow Governance Integration (1-2 weeks)  \n- **OWNERS Files**: Establish maintainer structure following Kubeflow governance model\n- **Community Standards**: Implement Kubeflow contributing guidelines, code of conduct, and issue templates\n- **CI/CD Migration**: Align build and release processes with Kubeflow automation standards\n- **Security Compliance**: Implement Kubeflow security scanning and vulnerability management\n\n#### Phase 3: First Kubeflow Release (1 week)\n- **Version Release**: Create first official Kubeflow-managed release incorporating governance changes\n- **Spark Operator Alignment**: Ensure deployment patterns align with existing Kubeflow Spark Operator\n- **Integration Testing**: Validate compatibility within Kubeflow ecosystem\n- **Community Announcement**: Official launch as Kubeflow component\n\n\n## Community Validation\n\nThis proposal seeks validation from the Kubeflow community on:\n\n1. **Technical Approach**: Alignment of MCP integration with Kubeflow architecture\n2. **User Demand**: Community interest in AI-powered Spark observability\n3. **Integration Strategy**: Feedback on planned Kubeflow component integrations\n4. **Governance Alignment**: Confirmation of governance and contribution standards\n\n## Contact Information\n\n- **Kubeflow Community Issue**: https://github.com/kubeflow/community/issues/872\n- **Project Repository**: https://github.com/DeepDiagnostix-AI/spark-history-server-mcp\n- **GitHub Issues**: https://github.com/DeepDiagnostix-AI/spark-history-server-mcp/issues\n\n---\n\n**Status**: Proposal Stage  \n**Submission Date**: 14 Jul 2025"
  },
  {
    "path": "proposals/897-experiment-tracking/README.md",
    "content": "# KEP-897: First-Class MLflow Integration for Experiment Tracking in Kubeflow\n\n<!-- toc -->\n\n- [Summary](#summary)\n- [Motivation](#motivation)\n  - [Background and History](#background-and-history)\n  - [Goals](#goals)\n  - [Non-Goals](#non-goals)\n- [Proposal](#proposal)\n  - [MLflow-First Vision](#mlflow-first-vision)\n  - [Donated Kubernetes Plugins](#donated-kubernetes-plugins)\n  - [Kubeflow Profiles and Multi-tenancy](#kubeflow-profiles-and-multi-tenancy)\n  - [Deployment and Distribution](#deployment-and-distribution)\n  - [Kubeflow Component Integration Pattern](#kubeflow-component-integration-pattern)\n  - [UI Strategy](#ui-strategy)\n  - [User Stories](#user-stories)\n- [Design Details](#design-details)\n  - [Implementation Phases](#implementation-phases)\n  - [Authentication and Authorization](#authentication-and-authorization)\n  - [Kubeflow Deployment Configuration](#kubeflow-deployment-configuration)\n- [Risks and Mitigations](#risks-and-mitigations)\n- [Graduation Criteria](#graduation-criteria)\n- [Implementation History](#implementation-history)\n- [Drawbacks](#drawbacks)\n- [Alternatives](#alternatives)\n  - [Expand Model Registry](#expand-model-registry)\n<!-- /toc -->\n\n## Summary\n\nKubeflow should make MLflow the first-class experiment tracking experience across the platform. Rather than trying to\ncompete with established experiment trackers by building a new backend inside Kubeflow, the community should deeply\nintegrate with a strong open-source option and package it in a Kubernetes-native way that fits Kubeflow's multi-tenant\noperating model.\n\nThis proposal centers on donating the Kubernetes integration work from\n[opendatahub-io/mlflow-kubernetes-plugins](https://github.com/opendatahub-io/mlflow-kubernetes-plugins) into Kubeflow,\nusing those plugins to map MLflow workspaces to Kubernetes namespaces and authorize MLflow requests with Kubernetes\nRBAC. Kubeflow should pair that with a supported MLflow image and deployment path so operators do not need to assemble\ntheir own integration.\n\nThis direction also makes Kubeflow more relevant to the GenAI ecosystem. MLflow is investing heavily in GenAI experiment\ntracking, tracing, and agent observability, so a strong Kubeflow integration helps the platform stay aligned with where\nthe broader open-source ML tooling ecosystem is going.\n\nThis KEP is intentionally platform-level. It defines the shared MLflow platform contract for Kubeflow: the supported\ndeployment model, namespace-to-workspace mapping, authentication and authorization model, and the UI hand-off\nconventions. Component-specific behavior should be described in follow-up KEPs such as the in-flight Kubeflow Pipelines\nproposal [KEP-12862](https://github.com/kubeflow/pipelines/blob/master/proposals/12862-mlflow-integration/README.md),\nand those KEPs should reuse this contract rather than introduce separate MLflow integration patterns.\n\nThis KEP also sets a terminology direction for follow-up component work: the shared MLflow concept of an experiment\nshould remain platform-wide, and Kubeflow Pipelines should rename its current Experiment grouping to Run Group rather\nthan continue overloading the word \"experiment\". Katib or Kubeflow Optimizer follow-up work should rename to\n`OptimizationJob` terminology, as discussed in the\n[Kubeflow Optimization API design doc](https://docs.google.com/document/d/1Y8IJ-UdZ7VCEAlax_xEFbbqEi7EB6SfIX4D7ua-xn4M/edit),\nrather than introducing another conflicting `Experiment` concept.\n\n## Motivation\n\nExperiment tracking in Kubeflow is fragmented across component-specific experiences. A user may train from a Notebook,\nlaunch a job with Kubeflow Trainer, and orchestrate end-to-end workflows with Kubeflow Pipelines, yet still have no\nstandard way to view those runs together using the same tracking backend and user experience.\n\nThat fragmentation creates several problems:\n\n1. **Limited flexibility**: Users often want to log runs directly from Python scripts, Jupyter notebooks, or training\n   jobs using established experiment trackers rather than forcing everything through one Kubeflow component.\n1. **Inconsistent setup**: Users who bring an external experiment tracker into Kubeflow today must manually wire\n   endpoints, credentials, tenancy boundaries, and UI links for themselves.\n1. **Fragmented experience**: Users must navigate different UIs and metadata conventions depending on whether the work\n   came from a notebook, a pipeline, Katib, or another component.\n1. **Platform gap**: Kubeflow does not yet offer a first-class platform story for shared experiment tracking.\n1. **GenAI relevance gap**: As experiment tracking platforms expand into tracing and agent observability, Kubeflow risks\n   feeling less relevant to modern GenAI workflows if it does not integrate deeply with one of those ecosystems.\n\nKubeflow does not need to invent a new backend to solve this. MLflow already provides the experiment tracking model,\necosystem, and user workflows that many Kubeflow users expect. The missing piece is a Kubeflow-owned integration layer\nthat makes MLflow feel native on a multi-tenant Kubernetes platform.\n\n### Background and History\n\n- 2019 — The community proposed making metadata management a first-class Kubeflow concern. See\n  [Create a kubeflow/metadata repository (Issue #238)](https://github.com/kubeflow/community/issues/238).\n- 2022 — The community revisited unified metadata and artifact tracking across Kubeflow components. See\n  [Kubeflow component integration with ML Metadata (Issue #783)](https://github.com/kubeflow/community/issues/783).\n- Since then, Kubeflow components have continued to evolve with different experiment-tracking expectations. Over the\n  same period, MLflow matured as a widely adopted experiment-tracking system and added\n  [workspace-based multi-tenancy support](https://mlflow.org/docs/latest/self-hosting/workspaces/getting-started/) in\n  [MLflow 3.10](https://mlflow.org/docs/3.10.1/). That addressed the main gap that had prevented broader adoption in\n  multi-user Kubeflow deployments.\n\nThis KEP takes a new direction from earlier metadata discussions: Kubeflow should not try to compete with established\nexperiment trackers. Instead, Kubeflow should deeply integrate with a strong open-source option with an active\ncommunity, and focus its own effort on Kubernetes-native integration, packaging, and consistent cross-component adoption\npatterns.\n\n### Goals\n\n1. Make MLflow the first-class experiment tracking experience for Kubeflow users.\n1. Donate and maintain Kubernetes-native MLflow plugins in Kubeflow so that MLflow integrates cleanly with namespaces,\n   Profiles, and Kubernetes RBAC.\n1. Offer a supported MLflow deployment story for Kubeflow operators, including a rebuilt MLflow image with the donated\n   plugins preinstalled.\n1. Support a shared multi-tenant MLflow deployment in which Kubernetes namespaces act as natural MLflow workspace\n   boundaries, with Kubeflow Profile namespaces as the default platform mapping.\n1. Improve Kubeflow's relevance for GenAI workflows by aligning with an experiment tracking ecosystem that is investing\n   in tracing and agent observability.\n1. Enable Kubeflow components to adopt the shared MLflow deployment and terminology model incrementally rather than\n   requiring a full-platform rollout, with\n   [KEP-12862](https://github.com/kubeflow/pipelines/blob/master/proposals/12862-mlflow-integration/README.md) serving\n   as one concrete example already underway.\n1. Provide an initial UI integration in which Kubeflow embeds MLflow views via iframe.\n\n### Non-Goals\n\n1. Expand Kubeflow Model Registry to become the experiment tracking backend for Kubeflow.\n1. Design a brand-new Kubeflow-native experiment tracking service with its own API, storage model, and UI.\n1. Implement the actual Pipelines `Run Group` and Katib or Kubeflow Optimizer / `OptimizationJob` terminology and UI\n   migrations as part of this proposal. Follow-up component-specific work should align those experiences with the shared\n   MLflow model described here.\n\n## Proposal\n\n### MLflow-First Vision\n\nKubeflow should package, integrate, and support MLflow directly rather than building a parallel experiment tracking\nbackend. The user-facing model should stay simple:\n\n- users write to standard MLflow APIs\n- operators deploy a supported MLflow installation for Kubeflow\n- Kubeflow components discover and reuse that installation through common conventions\n- Kubeflow embeds MLflow views inside Kubeflow UIs via iframe\n\n### Donated Kubernetes Plugins\n\nKubeflow should accept donation of\n[opendatahub-io/mlflow-kubernetes-plugins](https://github.com/opendatahub-io/mlflow-kubernetes-plugins) and treat that\ncodebase as the primary Kubernetes integration layer for MLflow in Kubeflow.\n\nThe donated work provides two important capabilities:\n\n1. **Workspace provider**: maps MLflow workspaces to Kubernetes namespaces so that a shared MLflow deployment can serve\n   multiple Kubeflow tenants while preserving namespace boundaries.\n1. **Authorization plugin**: authorizes MLflow requests using Kubernetes identity and RBAC so that cluster-native access\n   control remains the source of truth. It supports direct `SelfSubjectAccessReview` checks against caller tokens and a\n   trusted-proxy `SubjectAccessReview` mode that consumes forwarded user and group headers.\n\nBy bringing these capabilities into Kubeflow, the community can evolve them in the open alongside Profiles, dashboard\nintegration, and component-specific adoption work.\n\nThe current repository is Apache-2.0 licensed, which is compatible with Kubeflow. Before Phase 1 is considered complete,\nKubeflow and OpenDataHub maintainers should agree on transferring the repository to Kubeflow community ownership, with\nWG Pipelines serving as the initial owning working group and [`mprahl`](https://github.com/mprahl),\n[`HumairAK`](https://github.com/HumairAK), and any additional volunteers serving as the initial maintainer group with\nclear release responsibilities.\n\n### Kubeflow Profiles and Multi-tenancy\n\nKubeflow Profiles already give the platform a natural namespace-based tenancy model, but the MLflow plugins are not tied\nto the Profile Controller itself. This proposal builds on the more general namespace model:\n\n- a Kubernetes namespace becomes the MLflow workspace boundary\n- in the default Kubeflow platform deployment, a Profile namespace supplies that boundary\n- other namespace-based deployments can use the same mapping even if they do not install Profile Controller\n- Kubernetes RBAC remains the source of truth for access decisions\n- a shared MLflow deployment can serve many namespaces without abandoning isolation\n- component UIs and SDKs should consistently map the active Kubeflow Profile or namespace to the default MLflow\n  workspace\n\nIn practice, the workspace provider exposes tenant namespaces as MLflow workspaces, and the authorization plugin filters\nor authorizes MLflow requests within the namespaces the caller is allowed to access. This is a better fit for Kubeflow\nthan a generic MLflow deployment that knows nothing about namespaces, service account tokens, or Profile-managed\nmulti-user clusters.\n\nThis aligns with MLflow's own framing of workspaces as the feature that makes shared deployments practical without\nrequiring separate MLflow servers per team, as described in\n[MLflow Workspaces: Shared Deployment Without Separate Servers](https://mlflow.org/blog/mlflow-workspaces).\n\nExisting namespaces can be opted into this model through plugin configuration such as\n`MLFLOW_K8S_WORKSPACE_LABEL_SELECTOR`, so using MLflow workspaces with pre-existing namespaces does not require Profile\nController.\n\n### Deployment and Distribution\n\nKubeflow should not require every operator to build a custom MLflow image or invent their own deployment manifests.\nInstead, it should ship as a composable add-on that can be installed alongside existing Kubeflow components, whether an\noperator is running the full platform or only a subset such as Kubeflow Trainer plus a shared MLflow service. The\ncommunity should provide a supported distribution story with the following pieces:\n\n1. A Kubeflow-published MLflow container image rebuilt from upstream MLflow and shipped with the donated Kubernetes\n   plugins preinstalled.\n1. A supported Helm-based deployment path. For Phase 1, Kubeflow should initially own the Helm chart so it can ship the\n   required plugin, deployment, and authentication configuration on Kubeflow's timeline. In parallel, Kubeflow should\n   continue working with upstream MLflow on\n   [mlflow/mlflow#21973](https://github.com/mlflow/mlflow/pull/21973) to see whether Kubeflow can eventually reuse the\n   upstream chart directly or consume it as a subchart instead of duplicating the full chart long term.\n1. Default Helm values that deploy MLflow into `kubeflow-system`. Operators that want stronger isolation should treat\n   overriding this to a dedicated namespace such as `kubeflow-mlflow` as a best practice.\n1. Kubeflow-specific documentation and examples covering the supported MLflow deployment pattern, multi-user\n   authentication, Profiles integration, and any required Kubeflow packaging or configuration.\n1. Version guidance that tells operators which MLflow version, plugin revision, and chart configuration are supported by\n   each Kubeflow release. This proposal depends on MLflow `>= 3.11`: MLflow 3.10 introduced workspace support, which is\n   a core dependency for the multi-tenant design, and MLflow 3.11 adds built-in\n   [Kubernetes client authentication providers](https://mlflow.org/docs/latest/self-hosting/security/kubernetes/) that\n   Kubeflow should reuse where possible.\n\n### Kubeflow Component Integration Pattern\n\nKubeflow components that choose to integrate with MLflow should build on the shared deployment, auth, workspace, and\nterminology model described in this KEP. This platform contract is intentionally standardized here so follow-up\ncomponent KEPs do not each need to re-solve tenancy, credentials, or UI hand-off independently.\n\nThe shared MLflow data model in this KEP is intentionally simple: an MLflow experiment is the cross-component container\nfor related work, and an MLflow run is the record of a single execution or logging session within that experiment.\n[KEP-12862](https://github.com/kubeflow/pipelines/blob/master/proposals/12862-mlflow-integration/README.md) applies\nthat model to Kubeflow Pipelines by creating one parent MLflow run per KFP pipeline run and nested MLflow runs for\nindividual tasks and loop iterations.\n\nThe intended cross-component mapping is:\n\n- MLflow experiment: the shared grouping for related work across Kubeflow tools\n- Kubeflow Pipelines pipeline run: one parent MLflow run, with nested MLflow runs for component tasks and loop\niterations\n- TrainJob or SparkApplication execution: one MLflow run for that execution\n- Katib or Kubeflow Optimizer follow-up work:\n  - Option 1: map each `OptimizationJob` to an MLflow experiment, and map each trial or execution created by that\n    optimization job to an MLflow run in the experiment.\n  - Option 2: let the user choose an MLflow experiment, map each `OptimizationJob` to a parent MLflow run in that\n    experiment, and map each trial or execution to a nested MLflow run under the `OptimizationJob` parent run.\n\nTo avoid overloading the word \"experiment\" inside Kubeflow, follow-up component work should align user-facing\nterminology with that shared model. In particular, this KEP sets the direction that KFP's current Experiment grouping\nshould be renamed to Run Group, while Katib or Kubeflow Optimizer follow-up work should rename to `OptimizationJob`\nterminology, as discussed in the\n[Kubeflow Optimization API design doc](https://docs.google.com/document/d/1Y8IJ-UdZ7VCEAlax_xEFbbqEi7EB6SfIX4D7ua-xn4M/edit),\ninstead of introducing another conflicting \"experiment\" concept.\n\n### UI Strategy\n\nThe initial UI deliverable should be an embedded iframe experience in which Kubeflow loads full MLflow pages at\nselected URLs inside Central Dashboard or other Kubeflow UIs.\n\nPhase 1 should explicitly treat iframe embedding as a practical but limited integration model. With an unmodified\nupstream MLflow UI, the embedded experience includes the full MLflow shell such as the header, sidebar, and navigation\nto unrelated areas like Model Registry or Prompts. Because cross-origin iframes do not let Kubeflow rewrite MLflow's\nDOM or CSS from the parent page, Kubeflow cannot reliably strip that surrounding UI or constrain navigation from the\niframe alone.\n\nIf Kubeflow redistributes MLflow with the donated plugins preinstalled, the published image may also carry small,\nwell-scoped UI patches that improve the embedded experience while keeping the primary behavior aligned with upstream\nMLflow. A deeper integration model such as an upstream embed or kiosk mode, or a future module-federation approach,\nremains the preferred long-term direction.\n\nThe embedded UI path should preserve enough context to load the correct workspace.\n\n### User Stories\n\n#### Story 1: Data Scientist Using Existing MLflow Workflows\n\nAs a data scientist adopting Kubeflow, I want to reuse existing MLflow capabilities such as autologging from notebooks\nand Python scripts so that I can capture experiments in Kubeflow with minimal code changes and without learning a\nKubeflow-specific tracking API.\n\n#### Story 2: ML Engineer Comparing Runs Across Kubeflow Components\n\nAs an ML engineer, I want experiment runs from notebooks, training jobs, and pipelines to land in the same MLflow\nexperiment so that I can compare results across workflows regardless of how those runs were executed.\n\n#### Story 3: Platform Administrator Managing Multi-tenant Tracking\n\nAs a platform administrator, I want MLflow to follow Kubeflow's namespace-based tenancy model, including Profiles where\nused, and Kubernetes RBAC so that multiple teams can share the same cluster and the same MLflow deployment without\nleaking access across namespaces.\n\n## Design Details\n\n### Implementation Phases\n\n#### Phase 1: Platform Foundation\n\n- Donate the Kubernetes plugins into Kubeflow and establish ownership and release processes.\n- Publish a supported MLflow image and deployment path.\n- Document and support the Kubeflow-specific MLflow auth configuration, using trusted-header\n  `subject_access_review` behind trusted ingress for both browser and machine-to-machine traffic.\n- Define the default namespace-to-workspace mapping, with Profile namespaces as the default Kubeflow platform case.\n- Provide an iframe-based embedded UI path from Kubeflow into MLflow and document the full-shell navigation\n  limitations of that approach.\n\n#### Phase 2: Component Adoption\n\n- Align the first Kubeflow component integrations to the shared MLflow platform conventions.\n- Use [KEP-12862](https://github.com/kubeflow/pipelines/blob/master/proposals/12862-mlflow-integration/README.md) as one\n  example of component-specific adoption work.\n- Publish the conventions other Kubeflow components should follow, including terminology guidance that avoids multiple\n  unrelated \"experiment\" concepts in Kubeflow UIs.\n\n### Authentication and Authorization\n\nThe core deployment model is a shared MLflow instance that understands Kubeflow tenancy.\n\nAt a high level:\n\n1. A request originates from a notebook, pipeline workload, training job, or interactive user session running in a\n   tenant namespace, typically one associated with a Kubeflow Profile in the default platform deployment.\n1. Browser and API-server-mediated user requests reach MLflow through Kubeflow's trusted web auth path, which\n   authenticates the user and forwards identity for downstream authorization.\n1. Direct SDK, notebook, or workload requests can also reach that trusted ingress path with Kubernetes bearer tokens\n   obtained from the caller's projected service account or kubeconfig context.\n1. Trusted ingress validates supported JWTs, derives `kubeflow-userid` and `kubeflow-groups` from validated claims,\n   and forwards those normalized headers to MLflow.\n1. If authorized, MLflow serves the requested experiments, runs, metrics, and artifacts within the deployment's\n   namespace-aware tenancy model.\n\nKubeflow components should reuse this shared authentication model rather than defining their own connection and identity\nflow.\n\nMLflow 3.11 improves this story with built-in Kubernetes client authentication providers documented in\n[Kubernetes Authentication](https://mlflow.org/docs/latest/self-hosting/security/kubernetes/). Kubeflow should use\nthose providers where possible so SDK clients can authenticate to the trusted ingress path with Kubernetes credentials\ninstead of inventing a separate client-side auth layer. In particular,\n`MLFLOW_TRACKING_AUTH=kubernetes` supports token-based authentication, and `MLFLOW_TRACKING_AUTH=kubernetes-namespaced`\nalso adds the workspace header derived from the current namespace.\n\nFor the supported Kubeflow deployment, the recommended MLflow server should run the authorization plugin in\n`subject_access_review` mode behind Kubeflow's trusted ingress and configure the forwarded identity headers to match\nKubeflow conventions:\n\n- `MLFLOW_K8S_AUTH_AUTHORIZATION_MODE=subject_access_review`\n- `MLFLOW_K8S_AUTH_REMOTE_USER_HEADER=kubeflow-userid`\n- `MLFLOW_K8S_AUTH_REMOTE_GROUPS_HEADER=kubeflow-groups`\n\nIn that mode, MLflow consumes the identity that Kubeflow already establishes at ingress and still asks Kubernetes to\nauthorize the requested action with `SubjectAccessReview`. This matches Kubeflow's existing multi-user pattern more\nclosely than requiring MLflow to authenticate every interactive request directly from a Kubernetes service account\ntoken.\n\nKubeflow should use the same trusted-ingress pattern for machine-to-machine traffic as well. In the recommended\n`subject_access_review` deployment, trusted ingress should validate supported JWTs for both browser and\nmachine-to-machine requests, derive `kubeflow-userid` and `kubeflow-groups` from validated claims, and forward those\nnormalized headers to MLflow. If that pattern proves insufficient for some flows, an alternative would be to enhance\nthe plugin's `self_subject_access_review` mode so a validated caller bearer token can be forwarded to MLflow instead.\n\nA concrete deployment of that ingress pattern could use Gateway API with an authentication-capable gateway, Istio, or\nanother equivalent ingress implementation. Istio is not a requirement for this KEP, but the following example\nillustrates the kind of ingress behavior Kubeflow needs regardless of the chosen stack:\n\n1. Validate browser JWTs at ingress and translate the authenticated identity into normalized `kubeflow-userid` and\n   `kubeflow-groups` headers for `subject_access_review`.\n1. Validate machine-to-machine JWTs at ingress as well, including Kubernetes service account tokens when the chosen\n   ingress stack and cluster configuration support them.\n1. Remove or overwrite any incoming `kubeflow-userid` or `kubeflow-groups` headers from the client before forwarding\n   requests to MLflow, and do not allow unvalidated bearer tokens to reach MLflow.\n\nFor example, an Istio-based deployment could implement that behavior like this:\n\n```yaml\napiVersion: security.istio.io/v1beta1\nkind: RequestAuthentication\nmetadata:\n  name: mlflow-browser-jwt\n  namespace: istio-system\nspec:\n  selector:\n    matchLabels:\n      app: istio-ingressgateway\n  jwtRules:\n  - issuer: https://dex.example.com\n    outputClaimToHeaders:\n    - header: kubeflow-userid\n      claim: email\n    - header: kubeflow-groups\n      claim: groups\n    fromHeaders:\n    - name: Authorization\n      prefix: \"Bearer \"\n---\napiVersion: security.istio.io/v1beta1\nkind: RequestAuthentication\nmetadata:\n  name: mlflow-m2m-jwt\n  namespace: istio-system\nspec:\n  selector:\n    matchLabels:\n      app: istio-ingressgateway\n  jwtRules:\n  - issuer: https://kubernetes.example.cluster\n    jwksUri: http://cluster-jwks-proxy.istio-system.svc.cluster.local/openid/v1/jwks\n    outputClaimToHeaders:\n    - header: kubeflow-userid\n      claim: sub\n    - header: kubeflow-groups\n      claim: groups\n    fromHeaders:\n    - name: Authorization\n      prefix: \"Bearer \"\n```\n\nGateway API-based deployments or other ingress implementations can satisfy the same requirements with different\nconfiguration resources. The exact issuers, claim mappings, token validation mechanism, and any JWKS-related\nconfiguration are deployment specific, but the key point is the trust boundary: in the recommended\n`subject_access_review` pattern, MLflow consumes normalized identity headers and the original bearer token does not\nneed to be forwarded beyond ingress. If that model does not work for some flows, a possible follow-up would be to\nenhance `self_subject_access_review` mode so validated caller tokens can be forwarded instead without relaxing the same\ntrusted-ingress boundary. MLflow should be reachable only through that trusted ingress path.\n\n### Kubeflow Deployment Configuration\n\nThe main Kubeflow integration work is choosing and documenting a safe deployment topology. Kubeflow should publish a\nsupported pattern that:\n\n1. Runs MLflow behind the trusted Kubeflow ingress path rather than exposing it directly.\n1. Configures a trusted ingress layer, such as a Gateway API-compatible deployment, an Istio-based deployment, or an\n   equivalent implementation, to validate browser and machine-to-machine JWTs and translate authenticated identity into\n   `kubeflow-userid` and `kubeflow-groups` headers for `subject_access_review`.\n1. Ensures the gateway or proxy layer removes or overwrites any client-supplied `kubeflow-userid` and\n   `kubeflow-groups` headers before forwarding requests to MLflow.\n1. Grants the MLflow server service account permission to create\n   `subjectaccessreviews.authorization.k8s.io`.\n1. Documents how workload and SDK clients set the active MLflow workspace so the active tenant namespace maps cleanly\n   to MLflow workspaces.\n1. Documents the cluster-specific issuer and JWKS requirements needed for browser and machine-to-machine JWT validation\n   at ingress.\n\nClusters may still need cluster-specific issuer or audience configuration for Kubernetes service account tokens, but the\nKubeflow packaging should make trusted-ingress JWT validation and header normalization the supported path rather than\nleaving the machine-to-machine story implicit.\n\n## Risks and Mitigations\n\n1. **Dependency on upstream MLflow**: Kubeflow depends on a service from a different community. Mitigation: existing\n   maintainer overlap between Kubeflow and MLflow improves the feedback loop for upstream changes, MLflow's Linux\n   Foundation governance reduces single-vendor risk, and Kubeflow should publish version guidance for each release.\n1. **Operational complexity**: A shared MLflow deployment is another service for operators to secure and upgrade.\n   Mitigation: ship a supported install path with documented storage, auth, and upgrade guidance.\n1. **Ingress identity normalization complexity**: The supported design depends on trusted ingress validating JWTs and\n   translating them into `kubeflow-userid` and `kubeflow-groups` without allowing header spoofing.\n   Mitigation: publish a supported ingress pattern for a trusted gateway or proxy layer, require MLflow to be\n   reachable only through that path, and explicitly document that the proxy must overwrite or strip client-supplied\n   identity headers.\n1. **Embedded UI limitations and maintainability**: Iframe embedding is a practical initial path, but it loads the full\n   MLflow shell and may let users navigate to unrelated MLflow pages from within Kubeflow, which is less cohesive than a\n   deeper upstream integration model.\n   Mitigation: document this as an explicit Phase 1 limitation, keep Kubeflow entry points focused on the intended\n   MLflow URLs, allow small redistribution-time UI patches if needed, and treat upstream embed or kiosk support,\n   module federation, or other tighter integration models as future work.\n1. **Terminology collision**: Kubeflow components already use \"experiment\" for different user-facing concepts.\n   Mitigation: follow-up component KEPs should align on the shared MLflow definitions in this KEP, with KFP moving its\n   current Experiment grouping toward Run Group and Katib or Kubeflow Optimizer moving toward `OptimizationJob`.\n\n## Graduation Criteria\n\n### Beta\n\n- The Kubernetes plugins are transferred to Kubeflow community ownership.\n- Kubeflow publishes a supported MLflow image and at least one supported deployment path.\n- Namespace-scoped RBAC behavior is demonstrated in a multi-user environment.\n- Kubeflow provides an iframe-based embedded path into MLflow.\n- The supported deployment documents and demonstrates trusted-ingress JWT validation plus `subject_access_review`\n  header mappings for browser and machine-to-machine traffic.\n\n### Stable\n\n- The supported installation and upgrade story is exercised regularly in release qualification.\n- Integration testing in a Kubeflow platform deployment gates Kubeflow releases.\n\n## Implementation History\n\n- 2026-03-31: Reframed this KEP from a Model Registry-centered experiment tracking design to an MLflow-first Kubeflow\n  integration proposal.\n- 2026-03-31: Superseded the earlier unimplemented direction in this KEP; no user migration is required because the\n  previous design did not ship as a supported Kubeflow feature.\n\n## Drawbacks\n\n1. Kubeflow becomes more dependent on the upstream MLflow roadmap and release cadence for experiment tracking features.\n1. Operators still need to run and maintain a shared MLflow service, even if Kubeflow improves the packaging story.\n1. The initial iframe integration loads the full MLflow shell, so Kubeflow cannot fully control the embedded\n   navigation experience without upstream MLflow changes or redistribution-time UI patches.\n1. Some users may prefer a more deeply Kubeflow-specific experiment tracking experience than an MLflow-first design\n   provides.\n\n## Alternatives\n\n### Expand Model Registry\n\nKubeflow could continue with the earlier direction of enhancing Model Registry to become the experiment tracking backend\nfor the platform.\n\n**Benefits:**\n\n- Kubeflow would own the full backend and UI stack for experiment tracking.\n- The project could optimize the design around Kubeflow-specific concepts without depending on external MLflow roadmap\n  decisions.\n\n**Downsides:**\n\n- It would require Kubeflow to build and maintain another large backend capability that MLflow already provides.\n- Users who already depend on MLflow APIs and UI would still need an additional translation or migration story.\n- The community would spend effort recreating mature MLflow functionality instead of making MLflow Kubernetes-native for\n  Kubeflow.\n\nThis alternative was rejected because Kubeflow's leverage is higher when it focuses on integration, packaging, and\nmulti-tenancy rather than rebuilding experiment tracking from scratch inside another Kubeflow service.\n"
  },
  {
    "path": "proposals/907-model-registry-renaming/README.md",
    "content": "# KEP-907: Renaming \"Model Registry\" to reflect Registry and Catalog use-cases\n\nStatus: `review by KSC requested`.\n\n## Summary\n\nThis KEP proposes renaming the current \"Kubeflow Model Registry\" project to \"Kubeflow Hub\", to better reflect its evolution that encompasses both _model registry_ capabilities (for tracking model evolution during development) and _model catalog_ capabilities (for showcasing organization-approved models). The current naming might under-evaluate the project's capabilities and goals, as the \"Kubeflow Model Registry\" project has well grown beyond its original scope to include GenAI/LLM showcasing, enterprise-wide model sharing, and more than a singular use-case pattern (i.e.: multi-tenant Registries and a cluster-wide Catalog).\n\n## Motivation\n\nThe Kubeflow Model Registry project, originally proposed in [this Model Registry Platform proposal](../model-registry-proposal.md), has evolved significantly since its original onboarding. The project now serves two distinct but complementary use cases that are not clearly reflected in its current naming (\"Model Registry\"):\n\n1. **Model Registry**: Tenant-scoped model tracking during development lifecycle\n2. **Model Catalog**: Cluster-scoped showcase of organization-approved models, including GenAI/LLM models\n\nAccording to the [Kubeflow 2023 survey](https://blog.kubeflow.org/kubeflow-user-survey-2023/), 44% of users identified Model Registry as a critical gap in the ML lifecycle. Meanwhile, the current implementation addresses a broader model management need, that extends beyond the traditional registry concepts, especially into newer GenAI and LLM use-cases.\n\nThis proposal captures a [community discussion](https://github.com/kubeflow/community/pull/892#discussion_r2263804358) as a proper KEP form.\n\n### Goals\n\n<!-- these are the Goals of the KEP -->\n\n- Clarify the project's ability to cover the 2 use-cases through improved naming\n- Better reflect the project's evolution to support GenAI/LLM model showcasing\n- Align terminology with Industry standards and User expectations\n- Facilitate better understanding for new Users and Enterprise adoption\n\n### Non-Goals\n\n<!-- these are the non-Goals of this KEP -->\n\n- Change the underlying technical architecture or functionality, API, integrations patterns, etc.\n- Impact current deployment or operational procedures\n- Modify, replace, deprecate existing WG\n\n## Proposal\n\nWe propose renaming the \"Model Registry\" Kubeflow project to better reflect its current, more comprehensive model management capabilities. This KEP presents the analysis and considerations for potential naming options (below) while keeping the discussion open for community inputs!\n\n### Current Project Analysis\n\nThe existing \"Model Registry\" project actually encompasses 2 distinct use-case and patterns:\n\n#### Model Registry (Tenant-Scoped)\n- Purpose: track model evolution during development lifecycle\n- Scope: per-tenant/per-namespace deployment\n- Use Cases:\n    - Training experiments and iterations\n    - Model fine-tuning and alignment tracking\n    - Version management during development\n    - Metadata for training runs, parameters, metrics\n    - Model lineage from data --> training --> checkpoints\n- Users: Data Scientists, ML engineers within specific teams/projects\n- Deployment: 0..N instances per cluster (1 per Tenant)\n\n#### Model Catalog (Cluster-Scoped, Company-scoped)\n- Purpose: showcase \"blessed\" models for organization-wide consumption\n- Scope: single instance per cluster/Kubeflow installation\n- Use Cases:\n    - GenAI/LLM model showcase\n    - Organization-approved models (might be internal models, + external models)\n    - Model discovery and sharing across teams\n    - Corporate model governance and compliance\n    - Integration with external model sources (HuggingFace, etc.)\n- Users: all organization members, model consumers\n- Deployment: (1) singleton per cluster\n\n#### Summarizing the 2 use-cases\n\nThe following table summarizes the key differences between Registry and Catalog concepts.\n\n> ![NOTE]\n> These distinctions represent common usage patterns and blueprints. Organizations may _still_ choose to adopt a single Model Registry approach if it better fits their needs! This table is provided only for illustrative purposes and to highlight the different use cases the current Kubeflow project supports.\n\n| Aspect | Model Registry pattern | Model Catalog pattern |\n|--------|------------------------|------------------------|\n| **Lifecycle Stage** | Development & Training | Production & Sharing |\n| **Audience** | Team/Project members | Company-/Organization-wide |\n| **Model Types** | Work-in-progress models | Blessed/approved models for the whole Company |\n| **Versioning** | More fine-grained iterations | Major releases |\n| **Governance** | Team-level (MLOps) | Enterprise-level (Admin + Stakeholders) |\n| **Source** | Typically only internal training/tuning models | Internal + External models |\n| **Deployment** | Multiple-tenants (1 per Tenant) | Single instance (cluster-wide) |\n| **Discovery** | Project-scoped search | Organization-wide catalog |\n| **Compliance** | Development standards | Enterprise policies enforced by Stakeholders |\n\n#### Naming Patterns in AI/ML Ecosystem\n\nExisting and common terminology patterns in other projects/products:\n\n- **\"Registry\"**: current name, MlFlow, Azure, AWS\n- **\"Hub\"**: Docker Hub, HuggingFace Hub\n- **\"Model Garden\"**: Vertex AI\n\n### User Stories\n\n#### Story 1: Data Scientist workflow\nAs a Data Scientist, I want to track my model experiments and iterations within my team's workspace (_Model Registry_ pattern) while also being able to discover and use approved models from our organization's catalog (_Model Catalog_ pattern).\n\n#### Story 2: Organization model's Governance\nAs a Stakeholder, I want to distinguish between development model tracking (per-team registries) and organization-wide model sharing (centralized catalog) to implement appropriate governance policies.\n\n#### Story 3: the Admin\nAs a platform Administrator, I need to showcase _the_ approved GenAI/LLM models Organization-wide through a centralized catalog, while maintaining separate registries for individual team development needs.\n\n### Naming Considerations\n\n#### Evaluation Criteria\n\nAs we ask for Community inputs, the following criteria could be used later to evaluate the final selected name.\n\n- **Scope Clarity**: does the name clearly indicate the 2 model management (registry, catalog) capabilities?\n- **Industry Alignment**: is the name consistent with established ML/AI terminology? Do we actually need to be aligned, or can we introduce a \"creative\" name?\n- **Future Compatibility**: can it accommodate GenAI/LLM evolution and Organization needs?\n- **Kubeflow Integration**: does it fit within the Kubeflow ecosystem naming?\n\n#### Candidate Names for Discussion\n\nCaptured each one from the previous [community discussion](https://github.com/kubeflow/community/pull/892#discussion_r2263804358), and the Community can provide inputs directly in markdown below:\n\n- \"Kubeflow AI Asset Registry\"\n- \"Kubeflow AI Assets\"\n- \"Kubeflow Registry\" (simplified by dropping \"Model\")\n- \"Kubeflow Tracker\"\n- \"Kubeflow Tracking\"\n- \"Kubeflow AI Hub\"\n- \"Kubeflow AI Registry\"\n- \"Kubeflow Metadata\"\n- \"Kubeflow AI Atlas\"\n- \"Kubeflow Atlas\"\n- \"Kubeflow Hub\"\n- `<add your proposal name in this list>`\n\n### Risks and Mitigations\n\n- **Risk**: Community confusion for those familiar with \"Kubeflow Model Registry\"\n- **Mitigation**: phased communication plan, clear documentation updates\n\n### 2025-11-04 Kubeflow Community meeting\n\nMembers of KSC and of the KF Community suggests is best to proceed as follows:\n1. run a Poll on this PR to come up with the name selected (or an ordered list)\n2. based on the results of the above step, the KSC will check if any CNCF enquiry is needed\n\nA suggestion was also made that the KSC as a \"backoffice activity\" can rename the repo.\n\n### 2025-11-24 Kubeflow Working Group biweekly meeting\n\nThe community has discussed in the dedicated github page.\n\nWe [have highlighted](https://github.com/kubeflow/community/pull/907#issuecomment-3509842213) the need for the rename based on the _current_ and short-term evolution of the project:\n\n```mermaid\n---\nconfig:\n  theme: 'forest'\n---\nmindmap\n  root((this project))\n    Registry \"pattern\"\n      Model Registry\n      Catalog \"pattern\"\n        Model Catalog\n        MCP Catalog\n        ... Catalog\n    Integrations\n      KServe\n        Isvc reconciler\n        Storage Initializer\n      Python client\n        orchestration of Store+Register\n          S3\n          OCI / KServe ModelCar in Python\n      async-upload \"vanilla\" K8s Job\n```\n\nWe have [proposed a simple](https://github.com/kubeflow/community/pull/907#issuecomment-3543346336), less-is-more name: \"Kubeflow Hub\".\n\nIn the [community meeting, we have reached an unanymous consensus](https://youtu.be/lKB0coftNPY?si=XIVnI749ES9BdVME&t=111) to proceed with \"Kubeflow Hub\" as the preferred name.\n\nAs indicated by the KSC, we are therefore asking confirmation to proceed with \"Kubeflow Hub\" as the name, by merging this PR to finally proceed with phase 2, 3 accordingly.\n\n## Design Details\n\n### Migration Strategy\n\n1. **Phase 1**: Community discussion and name selection\n2. **Phase 2**: Implement any needed Repository renaming and documentation updates\n3. **Phase 3**: Update naming across Kubeflow and external communications\n\n## Implementation History\n\n- **KEP Creation**: 2025-09-29\n- **Community Discussion**: 2025-11-04\n- **Name Selection**: 2025-11-24\n- **Implementation Start**: WIP\n\n## Drawbacks\n\n- **Transition Overhead**: Requires some coordination and documentation updates\n- **Community Learning Curve**: Kubeflow Users must adapt to new terminology\n- **External Impact**: Existing external references and materials might need update\n\n## Alternatives\n\n### Alternative 0: Maintain Current Naming (the \"do nothing\" alternative)\n- **Pros**: no transition overhead, existing naming\n- **Cons**: continued confusion and under-evaluation about project scope, misalignment with evolved capabilities\n\n### Alternative 1: Add Descriptive Suffixes (eg \"Kubeflow Model Registry and Catalog\")\n- **Pros**: maintain base naming while adding clarity only in documentation updates\n- **Cons**: verbose naming, inconsistent with Kubeflow patterns\n\n## References\n- https://github.com/kubeflow/community/pull/892#discussion_r2263804358\n"
  },
  {
    "path": "proposals/913-components-repo/README.md",
    "content": "# KEP-913: Dedicated Repository for Kubeflow Pipelines Components & Pipelines\n\n<!-- toc -->\n\n- [Summary](#summary)\n- [Motivation](#motivation)\n  - [Goals](#goals)\n  - [Non-Goals](#non-goals)\n- [Proposal](#proposal)\n  - [Repository Layout](#repository-layout)\n    - [`components/` and `pipelines/`](#components-and-pipelines)\n  - [Artifact Metadata Schema](#artifact-metadata-schema)\n  - [Standardized README Templates](#standardized-readme-templates)\n  - [Linting & Continuous Integration](#linting--continuous-integration)\n  - [Pytest Structure and Local Execution](#pytest-structure-and-local-execution)\n  - [Maintenance Automation](#maintenance-automation)\n  - [Onboarding & Documentation](#onboarding--documentation)\n  - [Packaging & Release Management](#packaging--release-management)\n  - [Governance](#governance)\n  - [Open Questions](#open-questions)\n- [Design Details](#design-details)\n  - [Implementation Phases](#implementation-phases)\n  - [Rollout and Migration](#rollout-and-migration)\n- [Risks and Mitigations](#risks-and-mitigations)\n- [Test Plan](#test-plan)\n  - [Unit & Compile Checks](#unit--compile-checks)\n  - [Continuous Integration](#continuous-integration)\n- [Graduation Criteria](#graduation-criteria)\n- [Implementation History](#implementation-history)\n- [Drawbacks](#drawbacks)\n- [Alternatives](#alternatives)\n  - [Separate Repositories](#separate-repositories)\n  - [Keep the Existing `components` Directory in the KFP Repo](#keep-the-existing-components-directory-in-the-kfp-repo)\n  <!-- /toc -->\n\n## Summary\n\nEstablish a dedicated Kubeflow Pipelines (KFP) repository\\* that hosts reusable components and full pipelines under a\nconsistent structure, governance policy, and release cadence. The repository will package officially supported assets as\na Python distribution for easy consumption. The project introduces standardized metadata, documentation, testing, and\nmaintenance automation to make components discoverable, reliable, and safe to adopt.\n\n\\*Working title `kubeflow/pipelines-components`; the final repository name will be confirmed during implementation.\n\n## Motivation\n\nKubeflow Pipelines currently ships sample components in-tree under `components/`, making reuse and contribution\ndifficult because:\n\n- Assets are versioned with the main KFP repo, so release timing is tied to the entire project.\n- Documentation is inconsistent and buried.\n- There is no uniform metadata that tells users about compatibility, dependencies, or support status.\n- CI coverage is uneven, so users do not know if a component still works.\n- Third-party components mix with community-maintained artifacts without clear ownership or expectations.\n- Components are not published as a Python package today, so consumption requires cloning the monorepo or copying\n  snippets manually.\n\nA dedicated repository with purpose-built tooling will make it easier for users to discover, evaluate, and integrate KFP\nassets while allowing the community to maintain them at its own cadence.\n\nThis catalog also creates a durable bridge between Kubeflow Pipelines and the broader Kubeflow ecosystem: it gives the\nSDK and API server a canonical source of reusable building blocks, provides SIGs with a venue to showcase\nKubernetes-native MLOps patterns, and offers users a distribution channel that evolves independently from the core KFP\nrelease train. Centralizing community-supported assets in one place keeps the SDK surface area lean while improving\ndiscoverability and consistency.\n\n### Goals\n\n1. Move reusable components and pipelines into a dedicated GitHub repository with clear structure and governance.\n2. Provide standardized metadata, documentation, and testing requirements for every asset.\n3. Ship an installable Python package for components and pipelines that are versioned to match Kubeflow releases.\n4. Automate maintenance (e.g. stale component detection, dependency validation) to keep the catalog healthy.\n5. Provide developer onboarding materials and guidance for agents generating components/pipelines.\n\n### Non-Goals\n\n1. Backport historical component versions; only actively maintained assets will be migrated by their respective owners.\n2. Remove the existing `components/` directory in the main KFP repo without notice. We will announce the new repository,\n   point contributors at the new onboarding documentation, and give the community a minimum of 60 days to move their\n   assets before deleting the legacy directory.\n3. Vendor specific components. Vendors are highly encouraged to use the same repository structure in their own\n   repository.\n\n## Proposal\n\n### Repository Layout\n\nCreate a new repository (e.g. `kubeflow/pipelines-components`) with the following top-level layout:\n\n```text\nroot\n├── components\n│   ├── README.md (catalog landing page)\n│   ├── __init__.py (auto-imports all components for clean `from kfp_components.training import my_component` usage)\n│   ├── training/\n│   │   ├── README.md (category index listing each component with summaries/links)\n│   │   ├── __init__.py (re-exports all components in this category)\n│   │   └── <component-name>/\n│   │       ├── __init__.py (exposes the component entrypoint for imports)\n│   │       ├── component.py\n│   │       ├── metadata.yaml\n│   │       ├── README.md\n│   │       ├── OWNERS\n│   │       ├── example_pipelines.py\n│   │       ├── tests/\n│   │       │   └── test_component.py\n│   │       └── <supporting_files>\n│   └── ... (other categories: evaluation/, data_processing/, etc.)\n├── pipelines\n│   ├── README.md (catalog landing page)\n│   ├── __init__.py (auto-imports all pipelines for `from kfp_components.pipelines.training import my_pipeline` usage)\n│   ├── training/\n│   │   ├── README.md (category index listing each pipeline with summaries/links)\n│   │   ├── __init__.py (re-exports all pipelines in this category)\n│   │   └── <pipeline-name>/\n│   │       ├── __init__.py (exposes the pipeline entrypoint)\n│   │       ├── pipeline.py\n│   │       ├── metadata.yaml\n│   │       ├── README.md\n│   │       ├── OWNERS\n│   │       ├── tests/\n│   │       │   └── test_pipeline.py\n│   │       └── <supporting_files>\n│   └── ... (other categories: evaluation/, data_processing/, etc.)\n├── docs/\n│   ├── ONBOARDING.md\n│   ├── CONTRIBUTING.md\n│   ├── AGENTS.md\n│   ├── GOVERNANCE.md\n│   └── BESTPRACTICES.md\n├── scripts/\n│   ├── validate_metadata.py\n│   ├── generate_readme.py\n│   ├── update_init_imports.py (auto-generates category `__init__.py` import stubs; enforced by CI)\n│   └── verify_dependencies.py\n└── pyproject.toml (core package)\n```\n\n#### `components/` and `pipelines/`\n\n- Owned and maintained by the Kubeflow community.\n- Each category directory hosts one component/pipeline per subdirectory.\n- Every asset must include `component.py` or `pipeline.py`, `metadata.yaml`, `README.md`, `OWNERS`, and optional\n  supporting files. The `OWNERS` file empowers the owning team to review changes, update metadata, and manage lifecycle\n  tasks without central gatekeeping.\n- Initial contributions must be approved by the Pipelines Working Group before landing to ensure they align with catalog\n  expectations and support commitments.\n- Approvers listed in an asset's `OWNERS` file must be Kubeflow community members; external contributors can be added as\n  reviewers but may not hold approver permissions.\n- Optional internal unit tests must live under a `tests/` subdirectory in the component or pipeline directory to avoid\n  clutter.\n- If a component uses a custom container base image, a `Dockerfile` must be colocated in that component's directory.\n  GitHub workflows build these images on pull requests for validation (images are not pushed), and on pushes to branches\n  and tags the images are built and pushed to the `ghcr.io/kubeflow` organization.\n\n##### Components vs Pipelines\n\n- `components/` contains reusable `@dsl.component` definitions that map to individual, parameterized tasks which can be\n  imported and invoked from other Kubeflow Pipelines code.\n- `pipelines/` captures multi-step directed acyclic graphs (DAGS) composed of one or more components (and optionally\n  other pipelines). Because KFP allows nested pipelines, these assets are packaged with the same metadata guarantees and\n  can be consumed like components when users want a higher-level building block.\n\n### Artifact Metadata Schema\n\nEach component or pipeline ships a `metadata.yaml` with the following validated fields:\n\n```yaml\nname: <string>\nstability: alpha | beta | stable\ndependencies:\n  kubeflow:\n    - name: Pipelines # Kubeflow Pipelines version is required\n      version: '>=2.5'\n    - name: Trainer # Other official Kubeflow components required. This is a validated list enforced by CI.\n      version: '>=2.0'\n  external_services: # A free form of external service dependencies\n    - name: Argo Workflows\n      version: '3.6'\ntags: # Optional and may be used for tooling built around the catalog in the future\n  - training\n  - evaluation\nlastVerified: 2025-03-15T00:00:00Z\nci:\n  skip_dependency_probe: false\nlinks: # Optional and keys are free form\n  documentation: https://kubeflow.org/components/<name>\n  issue_tracker: https://github.com/kubeflow/kfp-components/issues\n```\n\nValidation rules:\n\n- `lastVerified` must be RFC 3339 and within one year of the current date. Automation enforces reminders (see\n  [Maintenance Automation](#maintenance-automation)).\n- `dependencies.kubeflow` declares machine-readable compatibility with official Kubeflow components. It MUST include a\n  `Pipelines` entry with a semver range, and MAY include other validated components (e.g., `Trainer`, `Katib`). CI\n  enforces that names come from the approved list and that version ranges are valid.\n- Components/pipelines that declare dependencies must include a `requirements.txt` in their directory. CI parses both\n  the file and any `packages_to_install` lists in DSL decorators to ensure they stay in sync for Dependabot monitoring.\n- `external_services` is a free-form list describing non-Kubeflow dependencies (e.g., `Argo Workflows 3.6`, `BigQuery`).\n  Entries are surfaced verbatim in generated READMEs.\n- `skip_dependency_probe` allows opting out of dependency installation when native extensions or heavy dependencies make\n  sandbox installs infeasible; justification is required in the PR description.\n- Compile validation always runs; assets must compile successfully via `kfp.compiler`.\n- `tags` is optional and used for discoverability and tooling (e.g., docs indices). It should be a short list of\n  human-readable labels. CI validates it as an array of non-empty strings. As a long-term roadmap item, if pipeline\n  components adoption is reasonably high, we may introduce a lightweight CLI that can list/describe/filter components\n  and pipelines using these tags.\n- Additional optional fields may be introduced later but must pass schema validation.\n\n### Standardized README Templates\n\nEach component/pipeline directory includes a `README.md` generated from a template and auto-populated with docstring\nmetadata (every `metadata.yaml` field except `ci` is rendered verbatim). Component README files additionally embed\ndetails from a required colocated `example_pipelines.py` module (which may expose multiple sample pipelines), while\npipeline README files may opt-in to the usage section when they are intended for reuse as nested components. Below is an\nexample template:\n\n````markdown\n# <Component Name> ✨\n\n## Overview 🧾\n\n<short description pulled from module docstring>\n\n## Inputs 📥\n\n| Name    | Type   | Description           |\n| ------- | ------ | --------------------- |\n| input_a | String | Path to input dataset |\n| ...     | ...    | ...                   |\n\n## Outputs 📤\n\n| Name  | Type  | Description            |\n| ----- | ----- | ---------------------- |\n| model | Model | Trained model artifact |\n\n## Usage Example 🧪\n\n```python\n# example_pipelines.py\nfrom kfp import dsl\nfrom kfp_components.training import my_component\n\n@dsl.pipeline(name=\"example-pipeline\")\ndef pipeline():\n    my_component(text=\"hello world\")\n```\n\n## Metadata 🗂️\n\n- Stability: Beta\n- Kubeflow Dependencies:\n  - Pipelines >=2.5\n  - Trainer >=2.0\n- Owners:\n  - @kubeflow/triage-ml\n- Last Verified: 2025-03-15\n\n## Additional Resources 📝\n\n- Documentation: https://kubeflow.org/components/training.my_component\n- Issue Tracker: https://github.com/kubeflow/kfp-components/issues\n````\n\nA script (`scripts/generate_readme.py`) will introspect the component function signature and docstrings to populate the\ninputs / outputs tables and example usage, and will also build category index READMEs; CI re-runs this script to prevent\nREADME drift. Contributors may append custom sections below the autogenerated content—any text placed after a marker\n(e.g. `<!-- custom-content -->`) is preserved verbatim across regeneration.\n\n### Linting & Continuous Integration\n\nBaseline CI workflow runs on every PR affecting the repository:\n\n1. `scripts/validate_metadata.py` ensures the YAML schema is satisfied, `lastVerified` is fresh, and an OWNERS file\n   exists.\n2. Markdown lint (enforce repository conventions for README and docs formatting; scoped to PRs that touch markdown).\n3. Black formatting (`black --check --line-length 120`).\n4. Docstring lint verifying Google-style docstrings (e.g. `pydocstyle --convention=google`) and enforcing docstrings on\n   every `dsl.component` or `dsl.pipeline`-decorated function.\n5. Static import guard: ensure only stdlib imports appear at module top level; third-party imports must live inside the\n   component function body (custom script using `ast`).\n6. Compile check: whenever an asset changes, run `kfp.compiler` to ensure the component/pipeline compiles without\n   execution.\n7. Dependency probe: for assets that changed and did not set `skip_dependency_probe`, create a temporary virtual\n   environment, run `pip install --dry-run -r requirements.txt`, and ensure installation succeeds.\n8. Pytest discovery: run `pytest` for any `tests/` directories that correspond to changed assets. Tests must stay\n   lightweight and avoid cluster dependencies; enforce a two-minute timeout per test via `pytest-timeout`.\n9. Example pipelines check: import `example_pipelines.py` modules and run `kfp.compiler` on their exported pipelines to\n   ensure the documented samples compile cleanly.\n\nREADME drift check is handled automatically by the linting workflow described above (skips when README-related files are\nunmodified).\n\nNote on the static import guard: we will keep non-stdlib imports local (inside component/pipeline functions) for now to\npreserve fast imports and lightweight validation. We may refine this rule later to better accommodate proven authoring\npatterns (for example, the embedded artifact testing pattern) where a narrowly scoped set of module-level imports is\nbeneficial. Any refinements will be documented in `docs/BESTPRACTICES.md`.\n\n### Pytest Structure and Local Execution\n\n- Optional unit tests for utility functions or local execution must live under `tests/` within each asset directory\n  (`components/<category>/<name>/tests/`).\n- Tests can assume only `pytest` and the Python standard library; runtime dependencies from `requirements.txt` are\n  installed during component execution, not test collection.\n- Encourage contributors to include local execution smoke tests (e.g. verifying the component function returns expected\n  outputs) but avoid long-running or cloud-dependent tests.\n\n### Maintenance Automation\n\nScheduled automation runs weekly:\n\n1. `lastVerified` sweep: flag assets where `lastVerified` is older than nine months. Create a GitHub issue at the\n   nine-month mark tagging listed owners and label as `needs-verification`.\n2. Removal countdown: once an asset is 12 months past `lastVerified`, automation opens a PR removing the asset from the\n   catalog (and packages). It references the issue opened three months earlier. Owners can refresh verification by\n   updating metadata and re-running CI.\n3. Dependabot configuration to open pull requests when `requirements.txt` files change; owners review, run validation,\n   and update `lastVerified` once verification succeeds.\n4. Security watchdog: flag components/pipelines whose dependencies are affected by CVEs surfaced in the GitHub Security\n   tab. If remediation PRs do not land within 90 days, automation proposes removal of the affected asset from the\n   catalog and packages.\n\nAutomation scripts will live under `scripts/` and will be orchestrated via GitHub Actions cron jobs.\n\n### Onboarding & Documentation\n\n- `docs/ONBOARDING.md`: step-by-step guide for new contributors (repo setup, virtualenv, running lint/tests, submitting\n  PRs).\n- `docs/BESTPRACTICES.md`: authoring guidelines for components and pipelines (patterns, anti-patterns, validation tips);\n  `docs/AGENTS.md` must stay in sync with these recommendations for automated tooling.\n- `docs/AGENTS.md`: guidance for code-generation agents emphasizing reuse of existing components, best practices for new\n  contributions, and instructions on selecting among catalog assets.\n- `docs/GOVERNANCE.md`: clarifies governance model, including release managers, approvers, and policies for onboarding\n  and maintaining catalog assets.\n- Category `README.md` files act as indices. Each lists the components/pipelines in that category, provides one-line\n  summaries, and links to the corresponding asset directories; these files are generated automatically and kept fresh by\n  the README automation described above.\n- OWNERS files are documented as the primary self-service mechanism for teams to manage their assets (approvals,\n  metadata refreshes, and lifecycle decisions). Initial OWNERS entries must include the PR author; future updates are\n  approved by any existing owner in that file. Metadata `owners` entries are validated to match the OWNERS roster so\n  that downstream tooling (catalog docs, potential website integrations) can display consistent contact points.\n- The Kubeflow website will be updated to promote and link to this repository once the initial release is available.\n  Longer term, we can add automation that renders and syncs catalog docs on the website.\n\n### Packaging & Release Management\n\n- Assets are packaged as `kfp-components` (`pyproject.toml`). Packaging scripts ingest metadata and generate import\n  stubs for each component/pipeline, enabling `from kfp_components.training import my_component` imports. If the\n  Kubeflow SDK vendors the catalog it could re-export them under `kubeflow.components.<category>` (for example,\n  `from kubeflow.components.training import my_component`) to avoid clashing with other SDK modules while keeping\n  ergonomic names. The SDK consumption flow vendors only the runtime Python packages (via a Git submodule or similar) so\n  packaging artifacts omit docs, metadata, and examples from the final wheel.\n- Components and pipelines are distributed as module packages (not namespace packages); category `__init__.py` files\n  auto-import all assets for ergonomic usage. Namespace packages were rejected to keep imports explicit and avoid\n  packaging complexity across multiple wheels.\n- Catalog releases follow semantic versioning with the `major` and `minor` numbers tracking Kubeflow. Patch versions\n  capture catalog-only fixes (metadata refreshes, documentation updates) that do not change compatibility guarantees.\n\n#### Container Images (Base Images for Core Components)\n\n- Custom base images used by core components must provide a `Dockerfile` in the corresponding component directory.\n- CI behavior:\n  - Pull requests: build images for verification only; do not push.\n  - Branch and tag pushes: build and push images to the `ghcr.io/kubeflow` organization.\n- Introducing a new base image requires a PR that includes the `Dockerfile` and updates the GitHub workflow matrix to\n  build that image. Because the workflow change lives outside of the components directory, publishing a new image is\n  gated by approval from someone listed in the repository's root `OWNERS` file.\n\n### Governance\n\n- Maintained by Kubeflow community members; assets must meet the verification SLA (update `lastVerified` annually) and\n  pass all CI.\n- Initial contributions require approval from the Pipelines Working Group to confirm alignment with community standards.\n- OWNERS must include at least one reviewer from the contributing community group or organization for accountability.\n  Approver entries must be Kubeflow community members; external contributors may be listed as reviewers but cannot be\n  approvers.\n- OWNERS files on each asset enable self-service maintenance: listed owners approve changes, refresh metadata, and\n  coordinate issue triage without waiting on the repo-wide maintainers.\n- Removal requires a documented deprecation period spanning at least two Kubeflow releases, with clear communication to\n  users. Exceptions can be made for circumstances such as dependencies being out of support and which cannot be updated.\n- All custom base images must be built from Dockerfiles in the repository and maintained by the CI infrastructure and\n  release automation.\n- Repository stewardship: Kubeflow Pipelines maintainers serve as primary owners for governance, release cadence, and\n  escalation handling.\n\n### Open Questions\n\n- Should the core components Python package be included in the Kubeflow SDK directly?\n- Should we include a `catalog.yaml` file which lists all components in the root of the repo?\n\n## Design Details\n\n### Implementation Phases\n\n1. **Bootstrap:** Create repository, scaffolding, metadata schema, CI pipeline, and packaging structure.\n2. **Migration:** Ask community members to move existing core components/pipelines from the main KFP repo, update\n   metadata/README templates, and publish initial PyPI release.\n3. **Automation Rollout:** Deploy maintenance cron jobs (lastVerified sweeps, dependency probes, removal cleanup).\n4. **Enhancements:** Add a CI-generated static catalog website served via GitHub Pages (no API initially).\n\n### Rollout and Migration\n\n- Start with a curated set of well-maintained components to validate workflow.\n- Keep legacy components in the main repo temporarily with clear deprecation notices; point users to the new repository.\n- Remove the legacy components in the KFP repository after 60 days.\n- Align the migration timeline with the cleanup work proposed in\n  [kubeflow/pipelines#12218](https://github.com/kubeflow/pipelines/discussions/12218) so community messaging and\n  automation land consistently across both efforts.\n\n## Risks and Mitigations\n\n- **Clarity:** Contributors may be unsure about ownership expectations and approval flows.\n  - Mitigation: document Pipelines Working Group approval requirements, highlight OWNERS policy in onboarding docs, and\n    keep governance guidance current.\n- **Maintenance overhead:** Keeping metadata fresh requires effort.\n  - Mitigation: automation for reminders/removals, limiting catalog membership to assets with active owners.\n- **Dependency sprawl:** Components may require heavy or conflicting dependencies.\n  - Mitigation: dependency probe with opt-out justification, encourage minimal footprints, and categorize optional\n    extras.\n- **CI costs:** Installing dependencies per PR could be expensive.\n  - Mitigation: scope dependency probe to changed assets and allow skip for heavy stacks.\n- **Doc generation drift:** Autogenerated README content may become outdated.\n  - Mitigation: tie README generation to CI, fail if template is stale or missing.\n\n## Test Plan\n\n### Unit & Compile Checks\n\n- Ensure every component/pipeline compiles to a valid spec using `kfp.compiler` when `compile_check` is enabled.\n- Optional pytest suites run for assets with `tests/` directories.\n- Dependency probe attempts installation of `packages_to_install` for updated assets unless opt-out is granted.\n\n### Continuous Integration\n\n- PR CI: lint, metadata validation, compile checks, dependency probes, pytest.\n- Scheduled CI: weekly verification of `lastVerified` deadlines and dependency probe opt-outs.\n- Release CI: packaging workflow tests building wheels and verifying imports.\n\n## Implementation History\n\n- 2025-10-20: Proposal drafted (this KEP).\n- TBD: Repository created.\n- TBD: Initial components migrated and first release published.\n\n## Drawbacks\n\n- Additional repository to maintain with separate release cadence.\n- Contributors must learn new metadata and documentation requirements.\n- Dependency probe may fail for niche dependencies, requiring manual intervention or skip flag justification.\n\n## Alternatives\n\n### Separate Repositories\n\nRequire separate repositories for external contributions. This would be hard to keep in sync and less user friendly.\n\n### Keep the Existing `components` Directory in the KFP Repo\n\n- Pros: no new repository to maintain; keeps code alongside the rest of KFP.\n- Cons: couples release cadence to the full monorepo, makes discoverability harder, keeps inconsistent documentation,\n  and discourages external contribution ownership.\n"
  },
  {
    "path": "proposals/936-kubeflow-mcp-server/DESIGN.md",
    "content": "# KEP-936: Design Specification\n\nThis document contains detailed design specifications for the Kubeflow MCP Server. For the proposal overview, see [README.md](README.md).\n\n## Table of Contents\n\n- [Tool Implementation Details](#tool-implementation-details)\n- [MCP-to-SDK Bridge](#mcp-to-sdk-bridge)\n- [Resource Estimation Algorithm](#resource-estimation-algorithm)\n- [Package Structure](#package-structure)\n- [Persona Configuration](#persona-configuration)\n- [CLI Usage](#cli-usage)\n- [Client Configuration](#client-configuration)\n- [Tool Behavior Details](#tool-behavior-details)\n- [Two-Phase Confirmation Pattern](#two-phase-confirmation-pattern)\n- [Authentication Implementation](#authentication-implementation)\n- [Dependencies](#dependencies)\n- [Gateway Deployment (Enterprise)](#gateway-deployment-enterprise)\n- [MCP Protocol Implementation](#mcp-protocol-implementation)\n- [Installation](#installation)\n- [Configuration File](#configuration-file)\n- [Distribution](#distribution)\n- [Secret Management](#secret-management)\n- [Audit Logging](#audit-logging)\n- [OpenTelemetry Integration (Phase 3)](#opentelemetry-integration-phase-3)\n- [Phase 5: Additional Client Modules](#phase-5-additional-client-modules)\n- [Compatibility Matrix](#compatibility-matrix)\n\n---\n\n## Tool Implementation Details\n\n### Training Tools\n\n```python\nfrom kubernetes.client.exceptions import ApiException\nfrom kubeflow.trainer import (\n    TrainerClient, BuiltinTrainer, CustomTrainer, CustomTrainerContainer,\n    TorchTuneConfig, LoraConfig, Initializer,\n    HuggingFaceModelInitializer, HuggingFaceDatasetInitializer,\n)\n\n@mcp.tool()\ndef fine_tune(\n    model: str,\n    dataset: str,\n    peft_method: str = \"lora\",\n    epochs: int = 3,\n    batch_size: int = 4,\n    num_nodes: int = 1,\n    resources_per_node: dict | None = None,\n    runtime: str | None = None,\n    confirmed: bool = False,\n) -> dict:\n    \"\"\"Fine-tune an LLM using BuiltinTrainer with TorchTune.\n    \n    Use this for zero-code fine-tuning of HuggingFace models.\n    Internally calls: TrainerClient.train(trainer=BuiltinTrainer(...))\n    \"\"\"\n    if not confirmed:\n        return {\"status\": \"preview\", \"message\": \"Set confirmed=True to submit training job\",\n                \"config\": {\"model\": model, \"dataset\": dataset, \"peft_method\": peft_method,\n                          \"epochs\": epochs, \"batch_size\": batch_size, \"num_nodes\": num_nodes}}\n    \n    try:\n        client = TrainerClient()\n        trainer = BuiltinTrainer(\n            config=TorchTuneConfig(\n                epochs=epochs, batch_size=batch_size, num_nodes=num_nodes,\n                resources_per_node=resources_per_node,\n                peft_config=LoraConfig(lora_rank=16, lora_alpha=32) if peft_method == \"lora\" else None,\n            )\n        )\n        initializer = Initializer(\n            model=HuggingFaceModelInitializer(storage_uri=f\"hf://{model}\"),\n            dataset=HuggingFaceDatasetInitializer(storage_uri=f\"hf://{dataset}\"),\n        )\n        job_name = client.train(runtime=runtime, trainer=trainer, initializer=initializer)\n        return {\"success\": True, \"job_id\": job_name, \"trainer_type\": \"BuiltinTrainer\"}\n    except ApiException as e:\n        return {\"success\": False, \"error\": f\"Kubernetes API error: {e.reason}\", \"status_code\": e.status}\n    except Exception as e:\n        return {\"success\": False, \"error\": str(e)}\n\n@mcp.tool()\ndef run_custom_training(\n    func_code: str,\n    func_args: dict | None = None,\n    packages_to_install: list[str] | None = None,\n    num_nodes: int = 1,\n    resources_per_node: dict | None = None,\n    runtime: str | None = None,\n    confirmed: bool = False,\n) -> dict:\n    \"\"\"Run distributed training with user-provided Python code.\n    \n    The func_code must define a `train(**kwargs)` function.\n    MCP Bridge: func_code (str) is converted to Callable via importlib.\n    \"\"\"\n    if not confirmed:\n        return {\"status\": \"preview\", \"message\": \"Set confirmed=True to submit training job\",\n                \"config\": {\"func_args\": func_args, \"num_nodes\": num_nodes,\n                          \"packages_to_install\": packages_to_install}}\n    \n    # Step 1: AST validation (fail fast, defense-in-depth)\n    import ast\n    try:\n        tree = ast.parse(func_code)\n        func_names = set()\n        for node in ast.walk(tree):\n            if isinstance(node, ast.FunctionDef):\n                func_names.add(node.name)\n            # Security checks (defense-in-depth, not a sandbox)\n            if isinstance(node, ast.Import):\n                for alias in node.names:\n                    if alias.name.split('.')[0] in {\"os\", \"subprocess\", \"sys\", \"shutil\", \"socket\", \"importlib\"}:\n                        return {\"success\": False, \"error\": f\"Import '{alias.name}' not allowed. Use run_container_training() for system access.\"}\n            if isinstance(node, ast.Call) and isinstance(node.func, ast.Name):\n                if node.func.id in {\"eval\", \"exec\", \"compile\", \"__import__\", \"open\"}:\n                    return {\"success\": False, \"error\": f\"'{node.func.id}()' not allowed. Use run_container_training() instead.\"}\n        if \"train\" not in func_names:\n            return {\"success\": False, \"error\": \"Script must define a 'train(**kwargs)' function\"}\n    except SyntaxError as e:\n        return {\"success\": False, \"error\": f\"Invalid Python syntax: {e}\"}\n    \n    # Step 2: Convert to Callable (file required for SDK's inspect.getsource())\n    import tempfile, importlib.util, hashlib, os\n    script_hash = hashlib.md5(func_code.encode()).hexdigest()[:8]\n    temp_path = None\n    \n    try:\n        with tempfile.NamedTemporaryFile(\n            mode='w', suffix='.py', prefix=f'mcp_train_{script_hash}_', delete=False\n        ) as f:\n            f.write(func_code)\n            temp_path = f.name\n        \n        spec = importlib.util.spec_from_file_location(\"training_module\", temp_path)\n        module = importlib.util.module_from_spec(spec)\n        spec.loader.exec_module(module)\n        train_func = module.train\n        \n        client = TrainerClient()\n        trainer = CustomTrainer(\n            func=train_func, func_args=func_args, packages_to_install=packages_to_install,\n            num_nodes=num_nodes, resources_per_node=resources_per_node,\n        )\n        job_name = client.train(runtime=runtime, trainer=trainer)\n        return {\"success\": True, \"job_id\": job_name, \"trainer_type\": \"CustomTrainer\"}\n    except ApiException as e:\n        return {\"success\": False, \"error\": f\"Kubernetes API error: {e.reason}\", \"status_code\": e.status}\n    except Exception as e:\n        return {\"success\": False, \"error\": str(e)}\n    finally:\n        if temp_path and os.path.exists(temp_path):\n            os.unlink(temp_path)\n\n@mcp.tool()\ndef run_container_training(\n    image: str,\n    num_nodes: int = 1,\n    resources_per_node: dict | None = None,\n    env: dict | None = None,\n    runtime: str | None = None,\n    confirmed: bool = False,\n) -> dict:\n    \"\"\"Run training with a pre-built container image.\"\"\"\n    if not confirmed:\n        return {\"status\": \"preview\", \"message\": \"Set confirmed=True to submit training job\",\n                \"config\": {\"image\": image, \"num_nodes\": num_nodes, \"env\": env}}\n    \n    try:\n        client = TrainerClient()\n        trainer = CustomTrainerContainer(\n            image=image, num_nodes=num_nodes, resources_per_node=resources_per_node, env=env,\n        )\n        job_name = client.train(runtime=runtime, trainer=trainer)\n        return {\"success\": True, \"job_id\": job_name, \"trainer_type\": \"CustomTrainerContainer\"}\n    except ApiException as e:\n        return {\"success\": False, \"error\": f\"Kubernetes API error: {e.reason}\", \"status_code\": e.status}\n    except Exception as e:\n        return {\"success\": False, \"error\": str(e)}\n```\n\n---\n\n## MCP-to-SDK Bridge\n\nThe SDK's `CustomTrainer` expects `func: Callable`, but MCP only transports JSON-serializable data. The MCP server bridges this gap:\n\n```\nMCP Layer:     func_code: str (Python source code)\n                     |\n                     v  [1. AST validation - fail fast]\n                     |\n                     v  [2. importlib conversion - file-backed for inspect.getsource()]\nSDK Layer:     func: Callable (Python function object)\n```\n\n**Why file-backed?** The SDK internally calls `inspect.getsource(func)` to extract code for the container entrypoint. Using `exec()` alone would break this.\n\n**Security Note:** Module-level statements in `func_code` execute on the MCP server host at load time (via `exec_module()`). Only the `train()` function body is serialized to K8s pods. AST checks provide defense-in-depth but are not a sandbox. For untrusted code, prefer `run_container_training()` with pre-built images.\n\n---\n\n## Resource Estimation Algorithm\n\n```python\ndef estimate_resources(\n    model: str, \n    peft_method: str,\n    batch_size: int = 4,\n    sequence_length: int = 2048,\n    quantization: str = \"bf16\",  # \"fp32\", \"bf16\", \"fp16\", \"int8\", \"int4\"\n    num_nodes: int = 1,\n) -> dict:\n    # Step 1: Lookup model metadata from HuggingFace\n    model_info = get_model_info(model)  # Uses HF Hub API\n    param_count = model_info.get(\"num_parameters\", None)\n    num_layers = model_info.get(\"num_hidden_layers\", 32)\n    hidden_size = model_info.get(\"hidden_size\", 4096)\n    \n    # Step 2: Calculate base model memory\n    quant_bytes = {\"fp32\": 4, \"bf16\": 2, \"fp16\": 2, \"int8\": 1, \"int4\": 0.5}\n    base_memory_gb = (param_count * quant_bytes[quantization]) / (1024**3)\n    \n    # Step 3: Activation memory (scales with batch_size × sequence_length)\n    # Dominant factor for LoRA; ~2 bytes per activation per layer\n    activation_memory_gb = (batch_size * sequence_length * num_layers * hidden_size * 2) / (1024**3)\n    \n    # Step 4: Optimizer and gradient memory\n    if peft_method == \"full\":\n        optimizer_memory_gb = base_memory_gb * 2  # AdamW: 2x model for states\n        gradient_memory_gb = base_memory_gb\n    else:  # LoRA/QLoRA: only adapter weights need gradients\n        optimizer_memory_gb = base_memory_gb * 0.1\n        gradient_memory_gb = base_memory_gb * 0.05\n    \n    total_memory_gb = base_memory_gb + activation_memory_gb + optimizer_memory_gb + gradient_memory_gb\n    \n    return {\n        \"model\": model,\n        \"param_count\": param_count,\n        \"breakdown\": {\n            \"model\": round(base_memory_gb, 1),\n            \"activations\": round(activation_memory_gb, 1),\n            \"optimizer\": round(optimizer_memory_gb, 1),\n            \"gradients\": round(gradient_memory_gb, 1),\n        },\n        \"total_gpu_memory_gb\": round(total_memory_gb, 1),\n        \"recommended_gpu\": recommend_gpu(total_memory_gb),\n        \"confidence\": \"high\" if param_count else \"low\",\n    }\n```\n\n**Note:** Activation memory scales linearly with `batch_size × sequence_length` and is often the dominant factor for parameter-efficient methods. See [Memory-Efficient Fine-Tuning](https://arxiv.org/abs/2501.18824) for detailed analysis.\n\n| Trainer Type | Estimation Method |\n|--------------|-------------------|\n| `BuiltinTrainer` (TorchTune) | Model registry lookup + recipe-based calculation |\n| `BuiltinTrainer` (TRL) | *Future:* TRL-specific memory profiling |\n| `CustomTrainer` | User-provided hints or conservative defaults |\n| `CustomTrainerContainer` | Container metadata or user-provided hints |\n\n---\n\n## Package Structure\n\n```\nkubeflow-mcp/\n├── pyproject.toml\n├── src/kubeflow_mcp/\n│   ├── __init__.py\n│   ├── server.py                      # FastMCP server with dynamic tool loading\n│   │\n│   ├── core/                          # Shared utilities (always loaded)\n│   │   ├── auth.py                    # K8s authentication\n│   │   ├── policy.py                  # Persona-based policy enforcement\n│   │   ├── resources.py               # get_cluster_resources()\n│   │   └── config.py\n│   │\n│   ├── clients/                       # SDK client modules (selectively loaded)\n│   │   ├── trainer/                   # TrainerClient tools (15 tools)\n│   │   │   ├── __init__.py            # MODULE_INFO, TOOLS, INSTRUCTIONS\n│   │   │   ├── training.py            # fine_tune, run_custom_training, run_container_training\n│   │   │   ├── discovery.py           # list_training_jobs, get_training_job, etc.\n│   │   │   ├── monitoring.py          # get_training_logs, get_training_events\n│   │   │   └── lifecycle.py           # delete, suspend, resume\n│   │   │\n│   │   ├── optimizer/                 # OptimizerClient tools (8 tools)\n│   │   └── hub/                       # ModelRegistryClient tools (6 tools)\n│   │\n│   ├── policies/                      # Persona definitions\n│   └── cli.py\n```\n\n### Client Module Interface\n\n```python\n# kubeflow_mcp/clients/trainer/__init__.py\nMODULE_INFO = {\n    \"name\": \"trainer\",\n    \"sdk_client\": \"TrainerClient\",\n    \"sdk_import\": \"kubeflow.trainer\",\n    \"description\": \"Distributed training and LLM fine-tuning\",\n}\n\nTOOLS = [fine_tune, run_custom_training, run_container_training, ...]\n\nINSTRUCTIONS = \"\"\"\nTRAINER MODULE - Distributed Training & LLM Fine-Tuning\n\nWORKFLOW: Fine-Tuning - fine_tune(model, dataset, confirmed=True)\nWORKFLOW: Custom Training - run_custom_training(func_code, func_args, confirmed=True)\nWORKFLOW: Container Training - run_container_training(image, confirmed=True)\n\"\"\"\n```\n\n### Dynamic Tool Loading\n\n```python\ndef create_server(clients: list[str] | None = None, persona: str = \"ml-engineer\") -> FastMCP:\n    if clients is None:\n        clients = detect_available_clients()\n    \n    all_tools = [get_cluster_resources]\n    for client_name in clients:\n        module = importlib.import_module(f\"kubeflow_mcp.clients.{client_name}\")\n        all_tools.extend(module.TOOLS)\n    \n    filtered_tools = filter_tools_by_persona(all_tools, persona)\n    mcp = FastMCP(\"kubeflow-mcp\")\n    for tool in filtered_tools:\n        mcp.tool()(tool)\n    return mcp\n```\n\n---\n\n## Persona Configuration\n\n```yaml\n# Persona tool visibility\npersonas:\n  readonly:\n    tools:\n      - get_cluster_resources\n      - list_training_jobs\n      - get_training_job\n      - get_training_logs\n      - get_training_events\n      - list_runtimes\n      - get_runtime\n      \n  data-scientist:\n    inherit: readonly           # 7 readonly + 5 = 12 total\n    tools:\n      - estimate_resources\n      - fine_tune\n      - run_custom_training\n      - wait_for_training\n      - delete_training_job\n      \n  ml-engineer:\n    inherit: data-scientist     # 12 data-scientist + 4 = 16 total\n    tools:\n      - run_container_training\n      - get_runtime_packages\n      - suspend_training_job\n      - resume_training_job\n      \n  platform-admin:\n    tools: \"*\"                   # All 16 tools\n```\n\n### Policy Configuration\n\n```yaml\n# ~/.kf-mcp-policy.yaml\npolicy:\n  allow:\n    - category:discovery\n    - category:monitoring\n    - category:planning\n    - fine_tune\n  deny:\n    - risk:destructive\n    - delete_*\n  namespaces:\n    - ml-team-dev\n    - ml-team-prod\n  read_only: false\n```\n\n---\n\n## CLI Usage\n\n```bash\n# Auto-detect available clients\nkubeflow-mcp serve\n\n# Load specific clients\nkubeflow-mcp serve --clients trainer\nkubeflow-mcp serve --clients trainer,optimizer,hub\n\n# With persona filtering\nkubeflow-mcp serve --clients trainer --persona data-scientist\n\n# List available modules\nkubeflow-mcp clients list\n```\n\n---\n\n## Client Configuration\n\n**Claude Desktop** (`~/.claude/claude_desktop_config.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"kubeflow\": {\n      \"command\": \"kubeflow-mcp\",\n      \"args\": [\"serve\", \"--clients\", \"trainer,optimizer\"]\n    }\n  }\n}\n```\n\n**Cursor IDE** (`.cursor/mcp.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"kubeflow-trainer\": {\n      \"command\": \"kubeflow-mcp\",\n      \"args\": [\"serve\", \"--clients\", \"trainer\", \"--persona\", \"data-scientist\"]\n    }\n  }\n}\n```\n\n---\n\n## Tool Behavior Details\n\n### `wait_for_training` Timeout\n\n```python\n@mcp.tool()\ndef wait_for_training(\n    job_id: str,\n    timeout: int = 3600,      # Default: 1 hour\n    poll_interval: int = 30,\n) -> dict:\n    \"\"\"Returns current status on timeout (doesn't cancel job).\"\"\"\n```\n\n### `get_training_logs` Rate Limiting\n\n- `follow=True` rate-limited to 1 req/sec per job\n- Cached results (TTL: 5 seconds) for repeated calls\n- `tail` capped at 1000 lines\n\n---\n\n## Two-Phase Confirmation Pattern\n\nTraining tools use a confirmation pattern to prevent accidental resource consumption:\n\n```\nPhase 1: Preview (confirmed=False, default)\n┌─────────────────────────────────────────────────────────────────┐\n│ User: \"Fine-tune Qwen on alpaca\"                                │\n│ AI Agent calls: fine_tune(model=\"Qwen/Qwen2.5-7B\", ...,         │\n│                           confirmed=False)                      │\n│ Returns: {\"status\": \"preview\", \"config\": {...}}                 │\n│ AI Agent: \"I'll fine-tune Qwen with these settings. Proceed?\"   │\n└─────────────────────────────────────────────────────────────────┘\n\nPhase 2: Execute (confirmed=True, after user approval)\n┌─────────────────────────────────────────────────────────────────┐\n│ User: \"Yes, go ahead\"                                           │\n│ AI Agent calls: fine_tune(..., confirmed=True)                  │\n│ Returns: {\"success\": true, \"job_id\": \"ft-qwen-abc123\"}          │\n└─────────────────────────────────────────────────────────────────┘\n```\n\n**Key behaviors:**\n- The **AI agent** is responsible for the confirmation flow, NOT the MCP server\n- When `confirmed=False` (default), tools return a preview with resolved configuration\n- The AI agent presents this preview to the user and asks for approval\n- Only after explicit user approval should the agent call with `confirmed=True`\n- MCP clients (Claude, Cursor) typically enforce this via their human-in-the-loop UX\n\n---\n\n## Authentication Implementation\n\n### Multi-User In-Cluster (Istio Integration)\n\n```python\n# kubeflow_mcp/core/auth.py\nimport kubernetes\nfrom starlette.requests import Request\n\ndef get_user_identity(request: Request) -> dict:\n    return {\n        \"user\": request.headers.get(\"x-user-email\", \"anonymous\"),\n        \"groups\": request.headers.get(\"x-user-groups\", \"\").split(\",\"),\n        \"namespace\": request.headers.get(\"x-user-namespace\", \"default\"),\n    }\n\ndef create_k8s_client_for_user(user_identity: dict) -> kubernetes.client.ApiClient:\n    config = kubernetes.client.Configuration()\n    config.api_key = {\"authorization\": f\"Bearer {get_sa_token()}\"}\n    client = kubernetes.client.ApiClient(config)\n    client.set_default_header(\"Impersonate-User\", user_identity[\"user\"])\n    return client\n```\n\n### Required RBAC\n\n```yaml\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  name: kubeflow-mcp-impersonator\nrules:\n- apiGroups: [\"\"]\n  resources: [\"users\", \"groups\"]\n  verbs: [\"impersonate\"]\n```\n\n---\n\n## Dependencies\n\n```toml\n[project]\nname = \"kubeflow-mcp\"\ndependencies = [\n    \"mcp>=1.0.0\",\n    \"kubernetes>=28.0.0\",\n    \"pyyaml>=6.0\",\n]\n\n[project.optional-dependencies]\ntrainer = [\"kubeflow>=0.3.0\"]\noptimizer = [\"kubeflow>=0.3.0\"]\nhub = [\"kubeflow[hub]>=0.3.0\"]\nall = [\"kubeflow[hub]>=0.3.0\"]\n```\n\n---\n\n## Gateway Deployment (Enterprise)\n\nFor multi-tenant enterprise deployments, kubeflow-mcp can run behind an MCP gateway ([Microsoft](https://github.com/microsoft/mcp-gateway), [IBM Context Forge](https://ibm.github.io/mcp-context-forge/), [Red Hat](https://developers.redhat.com/articles/2025/12/12/advanced-authentication-authorization-mcp-gateway)):\n\n```yaml\n# Gateway-compatible mode\nserver:\n  auth_mode: \"gateway\"  # Trust gateway headers, skip local auth\n  required_headers:\n    - \"x-authenticated-user\"\n    - \"x-user-groups\"\n    - \"x-request-id\"  # For audit correlation\n```\n\n**Gateway benefits:**\n- OAuth2 Token Exchange (RFC 8693) for narrowly-scoped backend tokens\n- Centralized identity-based tool filtering\n- Session-aware routing for stateful operations\n- Vault integration for credential management\n\n---\n\n## MCP Protocol Implementation\n\nUsing [FastMCP](https://gofastmcp.com) for protocol handling:\n\n```python\nfrom mcp.server.fastmcp import FastMCP\n\nmcp = FastMCP(\n    \"kubeflow-mcp\",\n    instructions=\"\"\"\n    Kubeflow MCP Server - AI Model Training on Kubernetes\n    \n    WORKFLOW: Fine-Tuning LLMs\n    1. get_cluster_resources() - Check GPU availability\n    2. estimate_resources(model, peft_method) - Memory requirements\n    3. fine_tune(model, dataset, ..., confirmed=True) - Submit job\n    4. get_training_job(job_id) / get_training_logs(job_id) - Monitor\n    \n    WORKFLOW: Custom Training Code\n    1. get_cluster_resources() - Check GPU availability\n    2. run_custom_training(func_code, func_args, ..., confirmed=True) - Submit job\n    3. get_training_logs(job_id) - View output\n    \n    TOOL SELECTION:\n    - Fine-tune HuggingFace models: fine_tune()\n    - Run custom training function: run_custom_training()\n    - Run pre-built container: run_container_training()\n    \"\"\"\n)\n```\n\n---\n\n## Installation\n\n```bash\n# Base package (no SDK clients)\npip install kubeflow-mcp\n\n# With specific clients\npip install kubeflow-mcp[trainer]\npip install kubeflow-mcp[trainer,optimizer]\npip install kubeflow-mcp[all]\n```\n\n---\n\n## Configuration File\n\n```yaml\n# ~/.kubeflow-mcp.yaml\nserver:\n  clients:\n    - trainer\n    - optimizer\n    # - hub           # Commented = not loaded\n  \n  # Or auto-detect from cluster\n  # clients: auto\n  \n  persona: ml-engineer\n  \n  namespaces:\n    - ml-team-dev\n    - ml-team-prod\n\n# Per-client configuration\ntrainer:\n  default_runtime: torch-distributed\n  \noptimizer:\n  default_algorithm: random\n```\n\n---\n\n## Distribution\n\n| Channel | Format | Use Case |\n|---------|--------|----------|\n| **PyPI** | `pip install kubeflow-mcp[trainer]` | Local development, CI/CD |\n| **Container** | `ghcr.io/kubeflow/kubeflow-mcp` | Kubernetes, ToolHive |\n| **Marketplace** | Smithery, Glama | Discovery, OAuth UI |\n\n**Transport Support:** stdio (Claude Desktop, Cursor) and StreamableHTTP (VS Code, LlamaStack, remote deployments) via FastMCP.\n\n---\n\n## Secret Management\n\n| Secret Type | Storage | Access Pattern |\n|-------------|---------|----------------|\n| HuggingFace Token | K8s Secret (`hf-token`) | Mounted to training pods, never logged |\n| S3 Credentials | K8s Secret | Mounted to initializer pods |\n| Model Weights | PVC | Downloaded by initializers, not MCP |\n\n**Best Practices:**\n- Secrets should **never** be returned in tool responses\n- Container logs should be filtered to redact tokens\n\n---\n\n## Audit Logging\n\nThe MCP server will log all tool invocations for audit:\n\n```json\n{\n  \"timestamp\": \"2026-01-29T10:30:00Z\",\n  \"tool\": \"fine_tune\",\n  \"user\": \"user@example.com\",\n  \"namespace\": \"ml-team-dev\",\n  \"parameters\": {\"model\": \"Qwen/Qwen2.5-7B\", \"dataset\": \"alpaca\", \"peft_method\": \"lora\"},\n  \"result\": \"success\",\n  \"job_id\": \"ft-qwen-abc123\"\n}\n```\n\n**Note:** Sensitive parameters (tokens, credentials) are **redacted** from logs.\n\n---\n\n## OpenTelemetry Integration (Phase 3)\n\nFastMCP includes [native OpenTelemetry instrumentation](https://gofastmcp.com/servers/telemetry). Zero configuration required—bring your own SDK:\n\n```bash\n# Install OTEL dependencies\npip install opentelemetry-distro opentelemetry-exporter-otlp\nopentelemetry-bootstrap -a install\n\n# Run with tracing enabled\nopentelemetry-instrument \\\n  --service_name kubeflow-mcp \\\n  --exporter_otlp_endpoint http://localhost:4317 \\\n  kubeflow-mcp serve --clients trainer\n```\n\n**Automatic spans created:**\n\n| Span Name | Description |\n|-----------|-------------|\n| `tools/call fine_tune` | Tool execution |\n| `tools/call get_training_logs` | Monitoring operations |\n| `resources/read config://...` | Resource access |\n\n**MCP semantic convention attributes:**\n\n| Attribute | Description |\n|-----------|-------------|\n| `mcp.method.name` | `tools/call`, `resources/read` |\n| `mcp.session.id` | Session identifier |\n| `enduser.id` | Client ID (when authenticated) |\n\nWorks with any OTLP-compatible backend (Jaeger, Grafana Tempo, Datadog, etc.).\n\n---\n\n## Phase 5: Additional Client Modules\n\n### Optimizer Module (`--clients optimizer`)\n\n```python\nMODULE_INFO = {\n    \"name\": \"optimizer\",\n    \"sdk_client\": \"OptimizerClient\",\n    \"sdk_import\": \"kubeflow.optimizer\",\n    \"description\": \"Hyperparameter optimization with Katib\",\n}\n```\n\n| Tool | SDK Method | Description |\n|------|------------|-------------|\n| `optimize()` | `OptimizerClient.optimize()` | Create hyperparameter optimization |\n| `list_optimization_jobs()` | `OptimizerClient.list_jobs()` | List experiments |\n| `get_optimization_job()` | `OptimizerClient.get_job()` | Experiment details |\n| `get_optimization_logs()` | `OptimizerClient.get_job_logs()` | Trial logs |\n| `get_best_results()` | `OptimizerClient.get_best_results()` | Best hyperparameters |\n| `wait_for_optimization()` | `OptimizerClient.wait_for_job_status()` | Block until done |\n| `delete_optimization_job()` | `OptimizerClient.delete_job()` | Delete experiment |\n| `get_optimization_events()` | `OptimizerClient.get_job_events()` | K8s events |\n\n**SDK Dependency:** `kubeflow.optimizer.OptimizerClient` (SDK v0.3.0)\n**Tool Count:** 8 tools (~3K tokens)\n\n### Hub Module (`--clients hub`)\n\n```python\nMODULE_INFO = {\n    \"name\": \"hub\",\n    \"sdk_client\": \"ModelRegistryClient\",\n    \"sdk_import\": \"kubeflow.hub\",\n    \"description\": \"Model Registry for artifact versioning\",\n}\n```\n\n| Tool | SDK Method | Description |\n|------|------------|-------------|\n| `register_model()` | `ModelRegistryClient.register_model()` | Register model artifact |\n| `list_models()` | `ModelRegistryClient.list_models()` | List registered models |\n| `get_model()` | `ModelRegistryClient.get_model()` | Model details |\n| `list_model_versions()` | `ModelRegistryClient.list_model_versions()` | Version history |\n| `get_model_version()` | `ModelRegistryClient.get_model_version()` | Version details |\n| `get_model_artifact()` | `ModelRegistryClient.get_model_artifact()` | Artifact metadata |\n\n**SDK Dependency:** `kubeflow.hub.ModelRegistryClient` (SDK v0.3.0)\n**Tool Count:** 6 tools (~2.5K tokens)\n\n### Tool Count Progression\n\n| Phase | Trainer Tools | Notes |\n|-------|---------------|-------|\n| Phase 1 | 16 | Core trainer tools |\n| Phase 2 | 17 | +1 `check_prerequisites()` |\n| Phase 4 | 19 | +2 checkpoint tools |\n\n### Cumulative Tool Counts (Phase 5)\n\n| Configuration | Tools |\n|---------------|-------|\n| `--clients trainer` | 19 |\n| `--clients trainer,optimizer` | 27 |\n| `--clients trainer,optimizer,hub` | 33 |\n\n---\n\n## Compatibility Matrix\n\n| kubeflow-mcp | Kubeflow SDK | Kubeflow Trainer | Kubernetes | Python |\n|--------------|--------------|------------------|------------|--------|\n| 0.1.x | ≥0.3.0 | ≥2.0.0 | ≥1.28 | ≥3.10 |\n| 0.2.x | ≥0.4.0 | ≥2.1.0 | ≥1.29 | ≥3.10 |\n\n| MCP Client | Transport | Status |\n|------------|-----------|--------|\n| Claude Desktop | stdio | Target |\n| Cursor IDE | stdio | Target |\n| VS Code + Copilot | StreamableHTTP | Planned |\n| LlamaStack | StreamableHTTP | Planned |\n| Ollama | StreamableHTTP | Planned |\n| Open WebUI | StreamableHTTP | Planned |\n\n**Transport Selection:**\n- **stdio**: Local CLI tools, lowest latency, single-client\n- **StreamableHTTP**: Web/remote access, multi-client, scalable (replaces deprecated SSE)\n"
  },
  {
    "path": "proposals/936-kubeflow-mcp-server/README.md",
    "content": "# KEP-936: Kubeflow MCP Server - AI-Powered Training Interface\n\n**Authors:**\n- Abhijeet Dhumal (Red Hat) - [@abhijeet-dhumal](https://github.com/abhijeet-dhumal)\n\n**Tracking Issue:** [kubeflow/community#936](https://github.com/kubeflow/community/issues/936), [kubeflow/sdk#238](https://github.com/kubeflow/sdk/issues/238)\n\n**Design Spec:** [DESIGN.md](DESIGN.md) - Detailed implementation specifications\n\n---\n\n## Ownership\n\nThis project will be owned by the **[WG ML Experience](https://github.com/kubeflow/community/tree/master/wg-ml-experience)** working group.\n\n- **Working Group:** [WG ML Experience](https://github.com/kubeflow/community/tree/master/wg-ml-experience)\n- **Primary Maintainer:** [@abhijeet-dhumal](https://github.com/abhijeet-dhumal) (Red Hat)\n- **Repository:** `kubeflow/mcp-server` (proposed)\n\n**Maintainer Onboarding:** Additional maintainers will be onboarded over time as they contribute improvements to the project. Contributors demonstrating sustained engagement and domain expertise will be nominated for maintainer roles following standard Kubeflow governance processes.\n\n**Experimental Status:** This project will initially be marked as **experimental** and not intended for production usage until graduation criteria are met and further stability statements are made by the WG ML Experience leads.\n\n---\n\n## Table of Contents\n\n- [Ownership](#ownership)\n- [Summary](#summary)\n- [Motivation](#motivation)\n  - [Goals](#goals)\n  - [Non-Goals](#non-goals)\n- [Proposal](#proposal)\n  - [Alignment with Unified Kubeflow SDK](#alignment-with-unified-kubeflow-sdk)\n  - [Architecture Overview](#architecture-overview)\n  - [User Stories](#user-stories)\n- [Design Details](#design-details)\n  - [MCP Tool Inventory](#mcp-tool-inventory)\n  - [Multi-MCP Ecosystem](#multi-mcp-ecosystem)\n  - [Tool Scalability](#tool-scalability)\n  - [Persona-Based Tool Visibility](#persona-based-tool-visibility)\n  - [Trainer Selection Logic](#trainer-selection-logic)\n  - [Extensibility: Dynamic LLM Trainer Framework](#extensibility-dynamic-llm-trainer-framework)\n  - [Pre-flight Validation](#pre-flight-validation)\n  - [Policy-Based Access Control](#policy-based-access-control)\n  - [CLI Usage](#cli-usage)\n  - [Workflow](#workflow)\n- [Security Considerations](#security-considerations)\n  - [Authentication](#authentication)\n  - [Authorization](#authorization)\n  - [Multi-Tenancy](#multi-tenancy)\n- [Risks and Mitigations](#risks-and-mitigations)\n- [Design Decisions](#design-decisions)\n- [Test Plan](#test-plan)\n- [Graduation Criteria](#graduation-criteria)\n- [Implementation Plan](#implementation-plan)\n- [Drawbacks](#drawbacks)\n- [Alternatives](#alternatives)\n- [References](#references)\n\n---\n\n## Summary\n\nThis KEP proposes a **Model Context Protocol (MCP) Server** for the Kubeflow SDK that enables AI agents to interact with Kubeflow resources through natural language. **Phase 1 focuses on `TrainerClient` for distributed training and LLM fine-tuning; the long-term goal is AI-powered end-to-end LLMOps** covering training, hyperparameter optimization, model registry, and pipelines. The MCP server wraps the existing Kubeflow SDK without duplicating code.\n\n![Quick Overview](assets/quick-overview.png)\n\n**Core Principle:** The MCP server is a *complementary interface*, not a replacement. It wraps the SDK, enabling natural language workflows while preserving full programmatic access.\n\n### Before vs After\n\n![Before vs After MCP](assets/before-after.png)\n\n## Motivation\n\nKubeflow Trainer provides powerful distributed training capabilities, but requires Python SDK knowledge, Kubernetes expertise, and manual validation. The [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) provides a standard way for AI agents to interact with external systems, supported by modern AI-powered IDEs (Claude Code, Cursor, VS Code with Copilot).\n\n### Goals\n\n1. **Natural Language Training Interface**: Fine-tune models, run custom training, and monitor jobs through conversation\n2. **SDK Integration Without Duplication**: Import and wrap existing SDK types directly\n3. **Pre-flight Validation**: Automatic checks for GPU availability, memory estimation, and storage\n4. **Multi-Client Support**: Work with Claude, Cursor IDE, Ollama, Open WebUI, and any MCP-compatible client\n5. **Support Both Trainer Types**: `BuiltinTrainer` (zero-code fine-tuning) and `CustomTrainer` (user-provided functions)\n6. **Policy-Based Access Control**: Support personas for enterprise environments\n\n### Non-Goals\n\n1. **Replace Kubeflow SDK**: MCP wraps the SDK, it doesn't replace it\n2. **Duplicate SDK Code**: Import SDK types directly, no re-implementation\n3. **Real-time Training Streaming**: Focus on polling-based monitoring\n4. **Hyperparameter Optimization**: Katib integration deferred to Phase 5\n5. **Replace kubectl/K8s tools**: Use `kubernetes-mcp-server` for generic K8s operations\n\n## Proposal\n\n### Alignment with Unified Kubeflow SDK\n\nThe MCP server evolves alongside the unified Kubeflow SDK (`kubeflow/sdk`):\n\n| SDK Client | Component | MCP Integration |\n|------------|-----------|-----------------|\n| `TrainerClient` | Kubeflow Trainer | Phase 1 (this proposal) |\n| `OptimizerClient` | Kubeflow Katib | Phase 5 |\n| `ModelRegistryClient` | Model Registry | Phase 5 |\n| `SparkClient` | Kubeflow Spark Operator | Future |\n| `PipelinesClient` | Kubeflow Pipelines | Future |\n\n![Unified SDK Architecture](assets/unified-sdk.png)\n\n### Architecture Overview\n\n![Architecture](assets/architecture.png)\n\n**Deployment Modes:**\n\n| Mode | Location | Auth | Transport |\n|------|----------|------|-----------|\n| **Local** | User's laptop | Kubeconfig | stdio |\n| **In-cluster** | K8s cluster | ServiceAccount + Impersonation | StreamableHTTP |\n| **Gateway** | Behind MCP gateway | OAuth/OIDC | StreamableHTTP |\n\n**Request Flow:**\n```\n1. User -> AI Agent: Natural language request\n2. AI Agent -> MCP Server: JSON-RPC tool call\n3. MCP Server -> Kubeflow SDK: Python method call\n4. Kubeflow SDK -> K8s API: CRD operations\n```\n*Only the SDK communicates with the K8s API server. The MCP server is a translation layer.*\n\nThe MCP server will import Kubeflow SDK types directly—no code duplication:\n\n```python\nfrom kubeflow.trainer import (\n    TrainerClient, BuiltinTrainer, CustomTrainer, CustomTrainerContainer,\n    TorchTuneConfig, LoraConfig, Initializer,\n    HuggingFaceModelInitializer, HuggingFaceDatasetInitializer,\n)\n```\n\n### User Stories\n\n**Story 1: Data Scientist Fine-Tuning**\n\n```\nUser: \"Fine-tune Qwen/Qwen2.5-7B-Instruct on tatsu-lab/alpaca using LoRA\"\n\nAI Agent (using MCP tools):\n1. get_cluster_resources() - \"4x A100 80GB available\"\n2. estimate_resources(\"Qwen/Qwen2.5-7B-Instruct\", \"lora\") - \"24GB needed\"\n3. fine_tune(model=\"...\", dataset=\"...\", peft_method=\"lora\", confirmed=True)\n\nResponse: \"Started training job 'ft-qwen-abc123'. ~24GB GPU memory needed.\"\n```\n\n**Story 2: ML Engineer Running Custom Training**\n\n```\nUser: \"Run my distributed training function on 2 nodes with 4 GPUs each\"\n\nAI Agent: run_custom_training(func_code=\"def train(**kwargs): ...\", \n                              num_nodes=2, resources_per_node={\"nvidia.com/gpu\": 4}, \n                              confirmed=True)\n```\n\n**Story 3: DevOps Running Container-Based Training**\n\n```\nUser: \"Run my custom trainer image ghcr.io/myorg/trainer:v1 with 4 GPUs\"\n\nAI Agent: run_container_training(image=\"ghcr.io/myorg/trainer:v1\", \n                                  resources_per_node={\"nvidia.com/gpu\": 4}, \n                                  confirmed=True)\n```\n\n**Story 4: Agent-Generated Training Code**\n\n```\nUser: \"Write a PyTorch script to fine-tune Llama on my data and run it distributed\"\n\nAI Agent:\n1. Generates training code using its knowledge\n2. run_custom_training(func_code=\"def train(**kwargs): ...\", \n                       packages_to_install=[\"transformers\", \"peft\"],\n                       num_nodes=2, confirmed=True)\n```\n\n## Design Details\n\n### MCP Tool Inventory\n\n![Tool Layers](assets/tool-layers.png)\n\nTools are organized in layers aligned with SDK structure (16 tools in Phase 1):\n\n| Layer | Tools | Description |\n|-------|-------|-------------|\n| **Core** | `get_cluster_resources()` | GPU/node availability |\n| **Planning** | `estimate_resources()` | Memory estimation |\n| **Training** | `fine_tune()`, `run_custom_training()`, `run_container_training()` | Job submission |\n| **Discovery** | `list_training_jobs()`, `get_training_job()`, `list_runtimes()`, `get_runtime()`, `get_runtime_packages()` | Resource lookup |\n| **Monitoring** | `get_training_logs()`, `get_training_events()`, `wait_for_training()` | Job monitoring |\n| **Lifecycle** | `delete_training_job()`, `suspend_training_job()`, `resume_training_job()` | Job management |\n\n**Dedicated Training Tools:**\n- `fine_tune()` maps to `BuiltinTrainer` (zero-code LLM fine-tuning with TorchTune)\n- `run_custom_training()` maps to `CustomTrainer` (user-provided Python code)\n- `run_container_training()` maps to `CustomTrainerContainer` (pre-built container)\n\n**MCP-to-SDK Bridge:** The SDK's `CustomTrainer` expects `func: Callable`, but MCP only transports JSON. The MCP server bridges this by accepting `func_code: str` (Python source code) and converting to a Callable via `importlib`. See [DESIGN.md](DESIGN.md#mcp-to-sdk-bridge) for implementation details.\n\n### Multi-MCP Ecosystem\n\n![Multi-MCP Ecosystem](assets/multi-mcp.png)\n\n| Domain | kubeflow-mcp | kubernetes-mcp-server | hf-mcp |\n|--------|--------------|----------------------|--------|\n| **Kubeflow CRDs** (TrainJob, etc.) | Owns | Delegates | - |\n| **Generic PVC/ConfigMaps/Secrets** | Delegates | Owns | - |\n| **Model/dataset metadata** | Delegates | - | Owns |\n| **Pod debugging (exec, logs)** | Delegates | Owns | - |\n\n**Coordination with Related Projects:**\n\n- **[HuggingFace MCP Server](https://github.com/huggingface/hf-mcp-server)** - Model/dataset discovery and metadata retrieval. For `estimate_resources()`, agents can use hf-mcp to get model metadata (param_count, hidden_size), then pass to kubeflow-mcp. Each server owns its domain: hf-mcp for discovery, kubeflow-mcp for training execution.\n\n- **[Feast MCP](https://github.com/feast-dev/feast/issues/5404)** - Exposes feature server as MCP (`get_online_features`). Complementary: Feast serves features for training data, kubeflow-mcp executes training.\n\n- **[Model Registry MCP Catalog](https://github.com/kubeflow/model-registry/pull/2029)** - A UI gallery for *discovering* MCP servers, not an MCP server itself. kubeflow-mcp would be *listed in* this catalog. No tool conflicts - they're cataloging servers, we're providing tools.\n\n- **Phase 5 Hub Module** - Our `register_model()`, `list_models()` tools wrap the unified SDK's `ModelRegistryClient`. If Model Registry team later builds their own MCP tools for model operations, we'll coordinate naming via `@kubeflow/kubeflow-hub-team`.\n\n### Tool Scalability\n\nResearch shows LLM accuracy degrades beyond 20-25 tools ([ToolScope](https://arxiv.org/abs/2510.20036)). The modular architecture addresses this:\n\n| Strategy | Mechanism |\n|----------|-----------|\n| **Modular Client Loading** | `--clients trainer` loads only trainer tools |\n| **Persona Filtering** | `--persona data-scientist` hides admin tools |\n\n| Clients | Persona | Tools |\n|---------|---------|-------|\n| `trainer` | `readonly` | 7 |\n| `trainer` | `data-scientist` | 12 |\n| `trainer` | `ml-engineer` | 16 |\n\n**Phase 5+ Scaling (33+ tools):** When tool counts exceed the optimal 20-25 range, external middleware like [mcp-optimizer](https://github.com/StacklokLabs/mcp-optimizer) can dynamically prune tools based on query context—keeping the server complete while optimizing at inference time.\n\n### Persona-Based Tool Visibility\n\n| Persona | Tools | Use Case |\n|---------|-------|----------|\n| `readonly` | 7 | Monitoring, auditing |\n| `data-scientist` | 12 | Fine-tuning, custom training |\n| `ml-engineer` | 16 | Full access including containers |\n| `platform-admin` | 16+ | All tools, all namespaces |\n\n### Trainer Selection Logic\n\n![Trainer Selection](assets/trainer-selection.png)\n\n### Extensibility: Dynamic LLM Trainer Framework\n\nThe MCP server will support the upcoming **Dynamic LLM Trainer Framework** ([KEP-2839](https://github.com/kubeflow/trainer/issues/2839)):\n\n| Backend | Status |\n|---------|--------|\n| **TorchTune** | Phase 1 |\n| **TRL** | When available |\n| **Unsloth** | When available |\n\n### Pre-flight Validation\n\n![Pre-flight Checks](assets/preflight-checks.png)\n\nBefore training, MCP tools validate GPU availability, memory requirements, and storage.\n\n### Policy-Based Access Control\n\n![Policies](assets/policies.png)\n\n| Persona | Discovery | Training | Lifecycle | Runtimes |\n|---------|-----------|----------|-----------|----------|\n| `readonly` | Yes | No | No | No |\n| `data-scientist` | Yes | Yes | Yes (own jobs) | No |\n| `ml-engineer` | Yes | Yes | Yes | Yes |\n\n### CLI Usage\n\n```bash\nkubeflow-mcp serve --clients trainer --persona data-scientist\nkubeflow-mcp clients list\n```\n\n**Transport:** stdio (Claude Desktop, Cursor) and StreamableHTTP (VS Code, LlamaStack, remote deployments).\n\n### Workflow\n\n![Workflow](assets/workflow.png)\n\n## Security Considerations\n\n![Security Architecture](assets/security.png)\n\n### Authentication\n\n| Method | Use Case |\n|--------|----------|\n| **Kubeconfig** | Local development, CI/CD |\n| **ServiceAccount Token** | Single-user in-cluster |\n| **ServiceAccount + Impersonation** | Multi-user in-cluster |\n| **OIDC** | Enterprise SSO |\n\n**Multi-User In-Cluster:** Uses Kubernetes impersonation with Istio-injected headers (`x-user-email`, `x-user-groups`).\n\n![User Identity Flow](assets/identity-flow.png)\n\n### Authorization\n\nMCP tools operate under the user's Kubernetes RBAC permissions.\n\n### Multi-Tenancy\n\n![Multi-Tenancy Architecture](assets/multi-tenancy.png)\n\n1. **Namespace Isolation**: Users access only permitted namespaces\n2. **Policy Enforcement**: Persona-based tool restrictions\n3. **Resource Quotas**: Validation against K8s ResourceQuotas\n\n## Risks and Mitigations\n\n| Risk | Mitigation |\n|------|------------|\n| **SDK Breaking Changes** | Pin SDK version, adapter pattern |\n| **LLM Hallucination** | Pre-flight validation, structured errors |\n| **Resource Exhaustion** | Two-phase confirmation pattern |\n| **Unauthorized Access** | Policy layer with RBAC |\n\n### Two-Phase Confirmation Pattern\n\nTraining tools use a confirmation pattern to prevent accidental resource consumption:\n\n```\nPhase 1: fine_tune(..., confirmed=False) - Returns preview\nPhase 2: fine_tune(..., confirmed=True)  - Submits job (after user approval)\n```\n\n## Design Decisions\n\n### Why granular tools instead of one monolithic `train()` tool?\n\nWe went with granular tools after thinking through a few scenarios:\n\n- We do take the point about tool count. 16 tools (Phase 1) is fine, but Phase 5 could hit 33. We handle this in two ways: First, modular client loading (`--clients trainer`) means you only load tools for components you need - if you're just training, you don't get optimizer or registry tools. Second, persona filtering (`--persona data-scientist`) hides admin tools from users who don't need them. Combined, these give 70-85% reduction. For Phase 5+ with 33+ tools, we're also looking at what [Speakeasy documented](https://www.speakeasy.com/blog/100x-token-reduction-dynamic-toolsets) - instead of registering all schemas upfront, you expose three meta-tools: \"search for tools\", \"describe this tool\", \"execute this tool.\" The LLM discovers what it needs dynamically. Same granularity, way fewer tokens in context.\n\n- The other thing we noticed while prototyping: LLMs are surprisingly good at adapting when you give them feedback between steps. Say `estimate_resources()` comes back with \"needs 80GB, cluster has 40GB.\" A monolithic tool would just fail. But with separate tools, Claude or Cursor will look at that mismatch and go \"oh, let me try with quantization\" - without us writing any conditional logic. There's some research on this too ([ToolBeHonest](https://arxiv.org/abs/2406.20015)) showing LLMs hallucinate less when they get intermediate feedback to anchor on.\n\n- The main thing is - training jobs eat GPUs. When you're about to spin up 4x A100s, you want to see \"this will need 24GB\" before it runs, not discover halfway through that something was misconfigured. There's actually a paper on this ([research on HITL patterns](https://arxiv.org/abs/2510.05307)) that looked at when humans want confirmation prompts vs when they find them annoying. The finding? For cheap/reversible actions, confirmations are friction. For expensive/irreversible ones like training jobs, people actually want the pause point. That's why each tool is separate - so the agent can show intermediate results and the user can say \"wait, that's too much memory, try QLoRA instead.\"\n\n- And honestly, debugging is way easier. \"Training failed\" tells you nothing. \"`estimate_resources` succeeded, `fine_tune` failed with quota exceeded\" - now you know where to look.\n\n- For users who just want the simple path - yeah, Phase 2 could add something like `auto_validate=True` that runs the whole chain internally. Power users get individual tools, casual users get the one-liner.\n\n- Self-correction with Mellea. Phase 2 explores [Mellea's](https://github.com/generative-computing/mellea) \"Instruct-Validate-Repair\" pattern. If LLM passes invalid args (e.g., `model=\"llama\"` instead of full HuggingFace path), we validate, return a helpful error, and let the LLM fix it - instead of just failing. Granular tools make this repair loop cleaner.\n\n- Audit trails with AGNTCY. Phase 3 explores [AGNTCY Identity](https://github.com/agntcy/identity) for enterprise - cryptographic signatures on tool calls so you can prove *who* triggered *what*. Granular tools = granular audit trail. A monolithic tool would just log \"training happened\" without the decision chain.\n\n### Why SDK-wrapping instead of direct K8s API?\n\nThe SDK is the stable interface; CRDs are implementation details:\n\n- SDK handles CRD versioning - if TrainJob schema changes, we don't need to update MCP.\n- We get `TorchTuneConfig`, `LoraConfig` Python types instead of constructing raw YAML.\n- SDK already provides log streaming, wait-with-backoff, and [local execution](https://github.com/kubeflow/sdk/tree/main/docs/proposals/2-trainer-local-execution) - we'd have to reimplement all of this with direct API.\n- [kube-authkit](https://github.com/kubeflow/sdk/issues/281) provides consistent auth across all Kubeflow APIs.\n\n### Why standalone repo instead of inside kubeflow/sdk?\n\nWe recommend kubeflow-mcp as a **standalone project** (`kubeflow/mcp-server`) with one-way dependency on SDK. Key reasons:\n\n| Concern | Standalone Advantage |\n|---------|---------------------|\n| **Dependencies** | MCP brings FastMCP, uvicorn, pydantic (~15MB+). SDK users shouldn't pay this cost if they just want `TrainerClient` |\n| **Release cadence** | MCP spec evolves fast (Streamable HTTP, tool annotations). MCP can ship hotfixes without waiting for SDK release cycles |\n| **Maintainer expertise** | SDK team knows K8s/training; MCP needs agent/LLM context optimization skills. Different contributors, different domain expertise |\n| **Ecosystem consistency** | Every major MCP server is standalone (see precedents below). Users expect `pip install kubeflow-mcp` |\n| **Testing isolation** | MCP tests need LLM mocks and mcp-tef validation; SDK tests need K8s mocks. Separate repos = focused CI, clear failure attribution |\n| **Clean boundaries** | Standalone forces MCP to only import public SDK APIs. If SDK changes break MCP, that signals a breaking change |\n| **Security blast radius** | MCP vulnerability doesn't affect SDK users; patches are scoped to MCP releases only |\n| **Contribution barrier** | Agent/LLM contributors shouldn't need to clone full SDK repo or understand TrainJob internals to fix an MCP tool |\n| **Issue triage** | \"Is this an MCP bug or SDK bug?\" is immediately clear with separate repos and issue trackers |\n| **Language flexibility** | Future MCP features (e.g., Go components for performance, TypeScript for browser agents) aren't locked to SDK's Python-only structure |\n\n**Industry precedent—every major MCP server is standalone:**\n\n| Project | Repository | Notes |\n|---------|------------|-------|\n| GitHub MCP | [`github/github-mcp-server`](https://github.com/github/github-mcp-server) | Standalone, not inside Octokit SDK |\n| Kubernetes MCP | [`containers/kubernetes-mcp-server`](https://github.com/containers/kubernetes-mcp-server) | Go-based, 1.2k+ stars, migrated to containers org for community governance |\n| Feast MCP | Inside `feast-dev/feast` but separate package | Published as standalone PyPI package |\n| HuggingFace MCP | [`huggingface/hf-mcp-server`](https://github.com/huggingface/hf-mcp-server) | Standalone, not inside `transformers` or `huggingface_hub` |\n\n**Dependency direction:** `kubeflow-mcp` depends on `kubeflow-sdk`, never the reverse. Version compatibility documented in README (e.g., `kubeflow-sdk>=0.5,<2.0`).\n\n**Discoverability:** Solved via PyPI cross-links, Kubeflow Hub catalog ([PR #2029](https://github.com/kubeflow/model-registry/pull/2029)), and documentation—not architectural coupling.\n\n### Why not HuggingFace Skills?\n\nDifferent problem space. [HF Skills](https://huggingface.co/blog/hf-skills-training) are instruction-based prompts that guide LLMs to *generate* Python code - but the user still runs that code locally. kubeflow-mcp provides *execution* on Kubernetes with RBAC, namespace isolation, and audit logging. They're complementary: [HF MCP Server](https://github.com/huggingface/hf-mcp-server) for model/dataset discovery, kubeflow-mcp for training execution.\n\n### Comparative analysis with Feast MCP and Model Registry Catalog\n\nWe investigated existing MCP efforts in the Kubeflow/ML ecosystem:\n\n- **Feast MCP** ([issue #5404](https://github.com/feast-dev/feast/issues/5404)) - Exposes `get_online_features` for feature retrieval. Different domain: Feast serves features for training data preparation, kubeflow-mcp executes training. Complementary, no overlap.\n\n- **Model Registry MCP Catalog** ([PR #2029](https://github.com/kubeflow/model-registry/pull/2029)) - This is a *catalog/gallery* for discovering MCP servers, not an MCP server with model tools. It defines `McpServer`, `McpTool` entities for the UI. kubeflow-mcp would be *listed in* this catalog as a discoverable server. No tool conflicts.\n\n- **Future Model Registry MCP tools** - If the Model Registry team builds their own MCP server with model registration/versioning tools, we'll coordinate naming (e.g., they own `register_model()`, we expose `list_registered_models()`). Our Phase 5 Hub module tools currently wrap `ModelRegistryClient`, so we're prepared to adjust scope as the ecosystem evolves.\n\n### Where should Agent Skills live?\n\n[Agent Skills](https://skills.sh/) are instruction files that guide LLMs on how to use tools effectively. For skills that depend on `kubeflow-mcp` tools, we recommend co-locating them in the same repository (`kubeflow/mcp-server`).\n\n**Rationale:**\n\n| Approach | Pros | Cons |\n|----------|------|------|\n| **Centralized** (skills in `kubeflow/mcp-server`) | Version-locked with MCP tools, single compatibility matrix, tested together | Less sub-project autonomy |\n| **Distributed** (skills in each sub-project) | Maintainer autonomy, domain expertise | Version mismatch risk - skill may reference tool/SDK feature not yet available |\n\n**Recommendation:** MCP-backed skills (those that call `kubeflow-mcp` tools) should live in `kubeflow/mcp-server` to ensure compatibility. CLI-based skills (using `kubectl`, `kustomize`, etc.) can safely live in sub-project repos since they have no SDK dependency.\n\n**Discovery:** Skills are discoverable via [skills.sh](https://skills.sh/) regardless of repository location, so both centralized and distributed skills remain searchable within the Kubeflow GitHub org.\n\n**Future repo rename:** If MCP-backed skills are added to the repository, we may rename from `kubeflow/mcp-server` to `kubeflow/ai-agent` or similar to reflect the broader scope (MCP server + skills). This would be proposed via a separate KEP or community discussion.\n\n**Scope:** Skills are not part of Phase 1-6 implementation. This decision documents the recommended placement for future skills development.\n\n## Test Plan\n\n- [ ] I/we understand the owners of the involved components may require updates to existing tests.\n\n### Unit Tests\n- Tool logic with mocked SDK\n- Policy enforcement\n\n### Integration Tests\n- Real TrainerClient with mock K8s\n- Persona filtering\n\n### Tool Description Validation\n- Use [mcp-tef](https://github.com/StacklokLabs/mcp-tef) for quality analysis, similarity detection, LLM evaluation\n\n### E2E Tests\n- Claude Desktop / Cursor IDE integration\n- Real Kubeflow cluster\n\n## Graduation Criteria\n\n| Stage | Requirements |\n|-------|-------------|\n| **Alpha** | Core MCP server with training tools, unit tests |\n| **Beta** | Pre-flight validation, policy support, integration tests |\n| **Stable** | E2E tests, multi-client validation, documentation |\n\n## Implementation Plan\n\n### Phase 1: Core MCP Server (TrainerClient)\n- Modular package architecture\n- 15 trainer tools + 1 core tool: `fine_tune()`, `run_custom_training()`, `run_container_training()`, discovery, monitoring, lifecycle\n- CLI with `--clients` flag\n- Tool validation with mcp-tef\n\n### Phase 2: Pre-flight Validation\n- Enhanced `estimate_resources()` with batch_size, sequence_length, quantization parameters\n- Support `user_provided_params` (param_count, hidden_size, num_layers) for private/custom models not on HuggingFace Hub\n- `check_prerequisites()` tool\n- Add \"Edit\" support to confirmation pattern (modify params without re-specifying)\n- Explore [Mellea](https://github.com/generative-computing/mellea) for argument validation\n- [Claude Plugin](https://code.claude.com/docs/en/plugins) packaging with manifest.json\n\n### Phase 3: Policy & Multi-MCP\n- Policy enforcement layer\n- Built-in persona policies\n- Custom persona definitions via config (org-specific tool sets, namespace restrictions, deny patterns)\n- Namespace restrictions\n- OpenTelemetry integration via [FastMCP native instrumentation](https://gofastmcp.com/servers/telemetry)\n- Explore [AGNTCY Identity](https://github.com/agntcy/identity) for enterprise deployments\n\n### Phase 4: Advanced Features\n- Checkpoint management (`list_checkpoints()`, `restore_checkpoint()`)\n- GPU visibility integration\n- *Future:* `get_training_progress()` (requires [KEP-2779](https://github.com/kubeflow/trainer/tree/master/docs/proposals/2779-trainjob-progress))\n\n### Phase 5: Additional Client Modules\n\n| Module | Tools | SDK Dependency |\n|--------|-------|----------------|\n| **optimizer** | 8 | `OptimizerClient` |\n| **hub** | 6 | `ModelRegistryClient` |\n\n- Optional `--mode dynamic` for 33+ tools ([100x token reduction](https://www.speakeasy.com/blog/100x-token-reduction-dynamic-toolsets) via semantic search)\n- Document [mcp-optimizer](https://github.com/StacklokLabs/mcp-optimizer) as recommended middleware for external tool optimization\n\n### Phase 6: Future Modules\n- `pipelines/` - `PipelinesClient`\n- `spark/` - `SparkClient`\n- `feast/` - `FeastClient` ([#239](https://github.com/kubeflow/sdk/issues/239))\n\n## Drawbacks\n\n1. **Additional Dependency**: Users must install both SDK and MCP server\n2. **Maintenance Overhead**: MCP layer must track SDK changes\n3. **Abstraction Layer**: Natural language may hide complexity users need to understand\n\n## Alternatives\n\n| Alternative | Why Rejected |\n|-------------|--------------|\n| **Embed MCP in SDK** | MCP is an integration concern, not core SDK |\n| **Build Reasoning into Tools** | Tools provide DATA + ACTIONS; LLMs provide REASONING |\n| **Custom Protocol** | MCP is an open standard with multi-vendor support |\n| **HuggingFace Skills** | Instruction-based; lacks execution, RBAC, namespace isolation |\n\n## References\n\n### Core\n- [Model Context Protocol Specification](https://modelcontextprotocol.io/)\n- [Kubeflow SDK Repository](https://github.com/kubeflow/sdk)\n- [Kubeflow Trainer](https://github.com/kubeflow/trainer)\n\n### Related Issues\n- [#936: KEP Tracking Issue](https://github.com/kubeflow/community/issues/936)\n- [#238: MCP Server for Kubeflow SDK](https://github.com/kubeflow/sdk/issues/238)\n- [#221: Control Plane Availability Checks](https://github.com/kubeflow/sdk/issues/221)\n\n### Related KEPs\n- [KEP-2839: Dynamic LLM Trainer Framework](https://github.com/kubeflow/trainer/issues/2839)\n- [KEP-2779: TrainJob Progress Tracking](https://github.com/kubeflow/trainer/tree/master/docs/proposals/2779-trainjob-progress)\n- [model-registry#2029: MCP Catalog API](https://github.com/kubeflow/model-registry/pull/2029)\n- [Feast MCP Server](https://docs.feast.dev/master/reference/feature-servers/mcp-feature-server) - Feature serving integration\n- [HuggingFace MCP Server](https://github.com/huggingface/hf-mcp-server) - Model/dataset discovery\n\n### Research\n- [ToolScope: Tool Merging and Context-Aware Filtering](https://arxiv.org/abs/2510.20036)\n- [ToolBeHonest: Multi-level Hallucination Diagnostic](https://arxiv.org/abs/2406.20015)\n- [HITL Confirmation Frequency Research](https://arxiv.org/abs/2510.05307)\n- [MCP Best Practices](https://mcp-best-practice.github.io/mcp-best-practice/best-practice/)\n- [mcp-tef: Tool Evaluation Framework](https://github.com/StacklokLabs/mcp-tef)\n- [Mellea: Generative Programming Library](https://github.com/generative-computing/mellea)\n- [AGNTCY Identity](https://github.com/agntcy/identity)\n- [Memory-Efficient Fine-Tuning](https://arxiv.org/abs/2501.18824) - Activation memory analysis\n- [OpenTelemetry MCP Semantic Conventions](https://opentelemetry.io/docs/specs/semconv/gen-ai/mcp/)\n- [FastMCP OpenTelemetry Integration](https://gofastmcp.com/servers/telemetry) - Native instrumentation for MCP servers\n- [Speakeasy Dynamic Toolsets](https://www.speakeasy.com/blog/100x-token-reduction-dynamic-toolsets) - Token reduction patterns\n"
  },
  {
    "path": "proposals/NNNN-template/README.md",
    "content": "# KEP-NNNN: Your short, descriptive title\n\n<!--\nThis is the title of your KEP. Keep it short, simple, and descriptive. A good\ntitle can help communicate what the KEP is and should be considered as part of\nany review.\n-->\n\n## Summary\n\n<!--\nThis section is incredibly important for producing high-quality, user-focused\ndocumentation such as release notes or a development roadmap. It should be\npossible to collect this information before implementation begins, in order to\navoid requiring implementors to split their attention between writing release\nnotes and implementing the feature itself. KEP editors should ensure that\nthe tone and content of the `Summary` section is useful for a wide audience.\nA good summary is probably at least a paragraph in length.\nBoth in this section and below, follow the guidelines of the [documentation\nstyle guide]. In particular, wrap lines to a reasonable length, to make it\neasier for reviewers to cite specific portions, and to minimize diff churn on\nupdates.\n[documentation style guide]: https://github.com/kubernetes/community/blob/master/contributors/guide/style-guide.md\n-->\n\n## Motivation\n\n<!--\nThis section is for explicitly listing the motivation, goals, and non-goals of\nthis KEP. Describe why the change is important and the benefits to users. The\nmotivation section can optionally provide links to [experience reports] to\ndemonstrate the interest in a KEP within the wider Kubeflow community.\n[experience reports]: https://github.com/golang/go/wiki/ExperienceReports\n-->\n\n### Goals\n\n<!--\nList the specific goals of the KEP. What is it trying to achieve? How will we\nknow that this has succeeded?\n-->\n\n### Non-Goals\n\n<!--\nWhat is out of scope for this KEP? Listing non-goals helps to focus discussion\nand make progress.\n-->\n\n## Proposal\n\n<!--\nThis is where we get down to the specifics of what the proposal actually is.\nThis should have enough detail that reviewers can understand exactly what\nyou're proposing, but should not include things like API designs or\nimplementation. What is the desired outcome and how do we measure success?.\nThe \"Design Details\" section below is for the real\nnitty-gritty.\n-->\n\n### User Stories (Optional)\n\n<!--\nDetail the things that people will be able to do if this KEP is implemented.\nInclude as much detail as possible so that people can understand the \"how\" of\nthe system. The goal here is to make this feel real for users without getting\nbogged down.\n-->\n\n#### Story 1\n\n#### Story 2\n\n### Notes/Constraints/Caveats (Optional)\n\n<!--\nWhat are the caveats to the proposal?\nWhat are some important details that didn't come across above?\nGo in to as much detail as necessary here.\nThis might be a good place to talk about core concepts and how they relate.\n-->\n\n### Risks and Mitigations\n\n<!--\nWhat are the risks of this proposal, and how do we mitigate? Think broadly.\nFor example, consider both security and how this will impact the larger\nKubeflow ecosystem.\nHow will security be reviewed, and by whom?\nHow will UX be reviewed, and by whom?\nConsider including folks who also work outside the SIG or subproject.\n-->\n\n## Design Details\n\n<!--\nThis section should contain enough information that the specifics of your\nchange are understandable. This may include API specs (though not always\nrequired) or even code snippets. If there's any ambiguity about HOW your\nproposal will be implemented, this is the place to discuss them.\n-->\n\n### Test Plan\n\n<!--\nThe goal is to ensure that we don't accept enhancements with inadequate testing.\nAll code is expected to have adequate tests (eventually with coverage\nexpectations). Please adhere to the Kubeflow testing guidelines when drafting this test plan.\n-->\n\n[ ] I/we understand the owners of the involved components may require updates to\nexisting tests to make this code solid enough prior to committing the changes necessary\nto implement this enhancement.\n\n#### Prerequisite testing updates\n\n<!--\nBased on reviewers feedback describe what additional tests need to be added prior\nimplementing this enhancement to ensure the enhancements have also solid foundations.\n-->\n\n#### Unit Tests\n\n<!--\nIn principle every added code should have complete unit test coverage, so providing\nthe exact set of tests will not bring additional value.\nHowever, if complete unit test coverage is not possible, explain the reason of it\ntogether with explanation why this is acceptable.\n-->\n\n<!--\nAdditionally, try to enumerate the core package you will be touching\nto implement this enhancement and provide the current unit coverage for those\nin the form of:\n- <package>: <date> - <current test coverage>\nThis can inform certain test coverage improvements that we want to do before\nextending the production code to implement this enhancement.\n-->\n\n- `<package>`: `<date>` - `<test coverage>`\n\n#### E2E tests\n\n<!--\nDescribe what E2E tests will be added to ensure proper quality of the enhancement.\nAfter the implementation PR is merged, add the names of the tests here.\n-->\n\n#### Integration tests\n\n<!--\nDescribe what tests will be added to ensure proper quality of the enhancement.\nAfter the implementation PR is merged, add the names of the tests here.\n-->\n\n### Graduation Criteria\n\n<!--\nThis section is optional until Kubeflow has formally defined graduation criteria,\nfeature gates, and a deprecation policy.\n\nClearly define what it means for the feature to be implemented and\nconsidered stable.\nIf the feature you are introducing has high complexity, consider adding graduation\nmilestones with these graduation criteria:\n- [Maturity levels (`alpha`, `beta`, `stable`)][maturity-levels]\n- [Feature gate][feature gate] lifecycle\n- [Deprecation policy][deprecation-policy]\n[feature gate]: https://git.k8s.io/community/contributors/devel/sig-architecture/feature-gates.md\n[maturity-levels]: https://git.k8s.io/community/contributors/devel/sig-architecture/api_changes.md#alpha-beta-and-stable-versions\n[deprecation-policy]: https://kubernetes.io/docs/reference/using-api/deprecation-policy/\n-->\n\n## Implementation History\n\n<!--\nMajor milestones in the lifecycle of a KEP should be tracked in this section.\nMajor milestones might include:\n- KEP Creation\n- KEP Update(s)\n- Implementation Start\n- First Component and Kubeflow version where the KEP is released\n- Component and Kubeflow version where the KEP is graduated\n- When the KEP was retired or superseded\n-->\n\n## Drawbacks\n\n<!--\nWhy should this KEP _not_ be implemented?\n-->\n\n## Alternatives\n\n<!--\nWhat other approaches did you consider, and why did you rule them out? These do\nnot need to be as detailed as the proposal, but should include enough\ninformation to express the idea and why it was not acceptable.\n-->\n"
  },
  {
    "path": "proposals/README.md",
    "content": "# KEP Format to Propose and Document Enhancements to Kubeflow\n\n## Summary\n\nA standardized development process for Kubeflow is recommended, when the scope is sufficiently large, in order to:\n\n- provide a common structure for proposing changes to Kubeflow\n- ensure that the motivation for a change is clear\n- allow for the enumeration of stability milestones and stability graduation\n  criteria\n- persist project information in a Version Control System (VCS) for future\n  contributors\n- support the creation of _high-value, user-facing_ information such as:\n  - an overall project development roadmap\n  - motivation for impactful user-facing changes\n- reserve GitHub issues for tracking work in flight, instead of creating \"umbrella\"\n  issues\n- ensure community participants can successfully drive changes to\n  completion across one or more releases while stakeholders are adequately\n  represented throughout the process\n\nThis process is supported by a unit of work of the Kubeflow Enhancement Proposal format, or KEP for short.\nA KEP attempts to combine aspects of\n\n- a feature, and effort-tracking document\n- a product requirements document\n- a design document\n\ninto one file.\n\nWe are proposing usage of KEPs in Kubeflow to be better aligned with the wider Kubernetes community.\n\nThis proposal takes heavy inspiration from the [Kubernetes KEP Proposal](https://github.com/kubernetes/enhancements/blob/master/keps/sig-architecture/0000-kep-process/README.md)\n\n## Motivation\n\nDocumenting proposals and enhancements are critical in managing the complexity and longevity of software projects.\n\nSome examples include:\n\n1. Capturing the \"why\" behind critical architectural choices, not just the what.\n   1. This helps current and future team members understand the reasoning behind decisions, particularly when the rationale is no longer obvious.\n2. Improve Communication and Collaboration.\n3. Serve as a single source of truth for architectural decisions.\n4. By documenting options and their trade-offs, KEPs encourage structured decision-making and transparency.\n5. Enable Traceability\n6. Create a decision history that allows new (and old) contributors to trace architectural choices back to their original context, assumptions, and goals\n\n### Goals\n\n- Capture the Why Behind Decisions\n- Foster Clear Communication\n- Enable Decision Traceability\n- Encourage Thoughtful, Deliberate Decisions\n- Preserve Institutional Knowledge\n\n### Non-Goals\n\n- Not a substitute for technical or user documentation\n- Not a substitute or replacement for meaningful commit messages\n\n## Proposal\n\nA KEP is broken into sections which can be merged into source control\nincrementally in order to support an iterative development process. The KEP process\nis intended to create high-quality, uniform design and implementation documents\nfor maintainers to deliberate. Contributors proposing new KEPs should create a copy\nof the [template directory](./NNNN-template) and proceed as per the instructions in the template.\n\n## Reference-Level Explanation\n\n### What Type of Work Should Be Tracked by a KEP\n\nRoughly any user or operator facing enhancement should follow the KEP process.\nIf an enhancement would be described in either written or verbal communication\nto anyone besides the KEP author or developer, then consider creating a KEP.\n\nSimilarly, any technical effort (refactoring, major architectural change) that\nwill significantly impact a large section of the development community should also be\ncommunicated widely. The KEP process is suited for this even if it will have\nzero impact on the typical user or operator.\n\n### KEP Workflow\n\nA KEP has the following states:\n\n- `provisional`: The KEP has been proposed and is actively being defined.\n  This is the starting state while the KEP is being fleshed out and actively defined and discussed.\n  The owning SIG has accepted that this work must be done.\n- `implementable`: The approvers have approved this KEP for implementation.\n- `implemented`: The KEP has been implemented and is no longer actively changed.\n- `deferred`: The KEP is proposed but not actively being worked on.\n- `rejected`: The approvers and authors have decided that this KEP is not moving forward.\n  The KEP is kept around as a historical document.\n- `withdrawn`: The authors have withdrawn the KEP.\n- `replaced`: The KEP has been replaced by a new KEP.\n  The `superseded-by` metadata value should point to the new KEP.\n\nSome authors may prefer to prepare a Google Doc (or similar) before creating a KEP on GitHub.\nWhile not a required part of the process, it may be useful to quickly gather initial community feedback.\n\nWe strongly advise KEP authors to present their KEPs in relevant Kubeflow Working Group meetings or the\nwider community meeting as relevant. This will help gather community feedback and bring visibility to\nupcoming changes\n\n### Git and GitHub Implementation\n\nKEPs are checked into the component repo under the `proposals` directory. Note that there isn't yet a standard for where this directory is located.\nSome components locate their KEPS at `./docs/proposals`, whereas other components have their KEPS located at `./proposals`\n\nKEPs affecting multiple Kubeflow projects that do not fit into existing cross-component projects such as `kubeflow/manifests` should be created under `kubeflow/community`\n\n- New KEPs can be checked in with a file name in the form of `XYZ-my-title.md`, where XYZ is a KEP number.\n- As significant work is done on the KEP, the authors can assign a KEP number.\n  - If there isn't already a tracking issue for the KEP in the approriate repository, create it. This issue number should then be used as the KEP number\n- No other changes should be put in that PR so that it can be approved quickly and minimize merge conflicts.\n- The KEP number can also be done as part of the initial submission if the PR is likely to be uncontested and merged quickly.\n\n### Prior Art\n\nOur usage of the KEP process (and most of this file) is almost entirely based on the\n[Kubernetes KEP Process](https://github.com/kubernetes/enhancements/blob/master/keps/sig-architecture/0000-kep-process/README.md)\n"
  },
  {
    "path": "proposals/gsoc/README.md",
    "content": "# Google Summer of Code (GSoC) Project Template\n\nAll Google Summer of Code students interested in contributing to Kubeflow projects must use the [template](gsoc-proposal-template.md) when submitting their project proposals.\n"
  },
  {
    "path": "proposals/gsoc/gsoc-proposal-template.md",
    "content": "# Project Title\n\n[Provide a exact same title for your project from the proposals page; including the project number as is]\n\n## Summary\n\n[Offer a brief summary of your project, highlighting the problem it addresses, your proposed solution, and the anticipated impact.]\n\n## Personal Information\n\n- **Full Name**: [Your Full Name]\n- **Email Address**: [Your Email Address]\n- **GitHub Profile**: [Your GitHub Profile URL]\n- **LinkedIn**: [Your LinkedIn Profile URL]\n- **University/College**: [Your University/College Name]\n- **Degree Program**: [Your Degree Program]\n- **Year of Study**: [Your Current Year of Study]\n- **Country of Residence**: [Your Country]\n- **Timezone**: [Your Timezone, also note difference from UTC]\n\n## Qualifications; Motivation?\n\n[Highlight your relevant skills, experiences, and qualifications that make you a suitable candidate for this project. Mention any previous work, open-source contributions, or academic achievements that showcase your capabilities. List any/all contributions to Kubeflow community so far.]\n\n[Be clear about your availability and time commitment. State the number of hours per week you plan to dedicate to the project (recommended: 30-40 hours). Mention any potential conflicts (e.g., exams, vacations) and how you plan to address them. It is important to manage expectations upfront and explain how you will manage your time effectively to meet the project deadlines.]\n\n[motivation about why you are interested in working on the project.]\n\n## Goals\n\n[List the specific goals you aim to achieve during the GSoC coding period. Be clear and concise. Example: Implement feature X in library Y., Example: Improve the performance of module Z by N%.]\n\n## Non-Goals\n\n[Clearly state what is *out* of scope for this project. This helps manage expectations. Example: This project will not include integration with service A., Example: We will not be addressing issue B during this GSoC project.]\n\n## Technical Details\n\n[Provide an in-depth description of your project's technical aspects. This should include the technologies, programming languages, frameworks, and tools you plan to use. Discuss any potential challenges and how you intend to address them.]\n\n## Test Plan\n\n[Describe how you plan to test your code to ensure its quality and correctness.]\n\n## Estimation of Deliverables\n\n[Present a rough timeline of your project, breaking down each goals with estimated times in weeks. The below is just a sample; modify to fit your needs]\n\n- **Milestone 1**: [Description of the first milestone]\n\n- **Milestone 2**: [Description of the second milestone]\n    \n- **Milestone 3**: [Description of the third milestone]\n\n[   \n This below is the timeline set out by the Google for GSoC 2025, if possible try to align major deliverables around the dates but not required\n\n    - May 8 - June 1: Community Bonding Period \n    - June 2 : Coding officially begins!\n    - July 14 : GSoC contributors can begin submitting midterm evaluations (for standard 12 week coding projects)\n    - August 25 - September 1: GSoC contributors submit their final work product\n]\n\n## Additional Notes (Optional)\n\n[Include any other information you think is relevant to your application.]\n\n\n\n\n\n"
  },
  {
    "path": "proposals/kale-donation.md",
    "content": "# How to Become a Kubeflow Subproject\n\n## Background information\n\n**Submitters**\n\n- StefanoFioravanzo (Founding Contributor)  \n- Eder Ignatowicz (Lead Contributor)\n\n\n**Project Name**\n\nKALE\n\n**Why is this project valuable to the Kubeflow Community?**\n\nKubeflow covers the full MLOps lifecycle — pipelines, training, tuning, model management, and serving. What’s still missing in the ecosystem is a simple, IDE-native experience for data scientists and ML practitioners who live inside JupyterLab.\nKale fills this gap. It enables users to transform notebooks into Kubeflow Pipelines with minimal code changes, preserving the fast, iterative workflow they are already familiar with while leveraging Kubeflow for scalability, scheduling, and GPU acceleration.\nThe plan for Kale extends beyond notebook-to-pipeline conversion. It aims to provide an in-notebook experience for visualizing, running, and monitoring pipelines, as well as interacting with other Kubeflow components, such as the Model Registry, Training Operator, and Katib.\nAs part of the ML Experience Working Group, Kale anchors the effort to bring a modern Jupyter-native experience to Kubeflow, complementing tools like Elyra and Jupyter Scheduler and laying the foundation for future IDE extensions.\n\n**Why is it beneficial for this project to be a part of the Kubeflow Community?**\n\nKale fits naturally into Kubeflow. It aligns with the ML Experience Working Group and the effort to deliver a first-class Jupyter-native workflow. Bringing it under the Kubeflow org gives us a proper home to evolve that experience and build a consistent notebook-to-production story across all Kubeflow components.\n\nKale already has a history in the ecosystem. It was created and open-sourced by Arrikto, widely adopted early on, but eventually lost active maintainers. The community has always seen value in it (link) — the main gap has been long-term stewardship. Moving it into the Kubeflow organization formalizes that relationship, establishes a governance model, and encourages broader contributions.\n\nWe also proved the momentum is real. In GSoC 2025 (link), the project was revamped and updated to align with Kubeflow Pipelines v2 and JupyterLab 4.0. Since then, Kale has experienced steady community growth, with more than a dozen commits from six contributors across three different organizations (link). Donating Kale now builds on that progress, gives it a sustainable home, and positions it as the foundation for Kubeflow’s interactive IDE experience going forward.\n\n\n**List of existing (and potential) integrations with Kubeflow Core components**\n\n- Integration with Kubeflow Pipelines 2.0: Kale converts annotated notebooks into KFP 2.0 DSL that can be submitted directly to the KFP server. The generated pipelines leverage the native metadata language and data exchange of Kubeflow Pipelines.\n- Kubeflow Notebooks: Kale can be embedded into a notebook image that is managed by the Kubeflow notebooks controller.\n- Future integrations:\n  - Kubeflow Model Registry\n  - Kubeflow Trainer \n  - Kubeflow Katib\n\n**Short Description / Functionality**\n\nKALE is a project that aims at simplifying the Data Science experience of deploying Kubeflow Pipelines workflows.\n\nKubeflow is a great platform for orchestrating complex workflows on top of Kubernetes, and Kubeflow Pipelines provide the means to create reusable components that can be executed as part of workflows. The self-service nature of Kubeflow makes it extremely appealing for Data Science use, at it provides an easy access to advanced distributed jobs orchestration, re-usability of components, Jupyter Notebooks, rich UIs and more. Still, developing and maintaining Kubeflow workflows can be hard for data scientists, who may not be experts in working orchestration platforms and related SDKs. Additionally, data science often involve processes of data exploration, iterative modelling and interactive environments (mostly Jupyter notebook).\n\nKale bridges this gap by providing a simple UI to define Kubeflow Pipelines workflows directly from your JupyterLab interface, without the need to change a single line of code.\n\n**Adoption**\n\nKale doesn’t have active production users today — the project went stale a few years ago. That said, community interest has remained strong(link). Since the recent GSoC 2025 revival, we’ve seen new contributors from multiple organizations, regular commits, and significant engagement on the donation issue(link). The demand for a Jupyter-native Kubeflow experience is clear, and Kale is the natural entry point to deliver it.\n\n**Vendor Neutrality**\n  \nYes\n\n**Trademark transition**\n  \nThe Kale name and logo are fully open source under the Apache license. The company that initially backed the project does hold any legal rights to the name and logo, since they have always been publicly available under the Apache 2.0 license. These assets have not been transitioned nor used by any other company and there is currently no active maintained project that could clash trademarks\n\n**CI/CD Infra Requirements**\n\nMinimal: Kale runs Python and Node/React tests + lightweight end-to-end tests with Kubeflow pipelines on a lightweight k8s cluster.\n\n**Website**\n\nhttps://kubeflow-kale.github.io/ \n\n**GitHub repository**\n\ngithub.com/kubeflow-kale/kale \n\n**Releases**\n\nFirst release - May 2019 - this was the first release of the Arrikto era\nKale 2.0 - end of 2025 - expected time window for the release of the revamped and community-driven version\n\n**Meeting Notes**\n\nhttps://docs.google.com/document/d/1jH2WAX2ePxOfI4JuiVK9nPlesDMiyg67xzLwhpR7wTQ/edit?tab=t.0\n\n**Installation Documentation**\n\nhttps://github.com/kubeflow-kale/kale/blob/main/README.md\n\n**Project Roadmap**\n\nThe short-term goal is to evolve Kale beyond notebook-to-pipeline conversion. The next milestone focuses on adding visual authoring and runtime pipeline visualization directly in JupyterLab. This will let users both define and monitor Kubeflow Pipelines from the same IDE, bridging the gap between code and UI.\n\nIn parallel, we plan to align the visual experience between JupyterLab and the Kubeflow Central Dashboard, ensuring a consistent look and feel across the platform. These efforts will serve as the foundation for the Kubeflow JupyterLab Extension MVP, which aims to deliver a unified, streamlined experience for data scientists and ML practitioners across all Kubeflow components.\n\nIn the longer term, Kale will be extended to cover other key integrations, including the Model Registry, Training Operator, and Katib, making it the core entry point for interactive MLOps within Kubeflow.\n\n## Metrics\n\n- Number of Maintainers and their Affiliations: Stefano/Eder\n- Number of Releases in last 12 months: N/A (no recent release) \n- Number of Contributors: 6 on the last 3 months\n- Number of Users: N/A (no recent release)\n- Number of Forks: 132\n- Number of Stars: 649\n- Number of package/project installations/downloads:  N/A (no recent release)\n\n## Kubeflow Checklist\n\n1.  Overlap with existing Kubeflow projects\n    - [ ] Yes (If so please list them)\n    - [X] No\n\n1. Manifest Integration\n    - [ ] Yes\n    - [X] No\n    - [ ] Planned\n\n1. Commitment to Kubeflow Conformance Program\n    - [X] Yes\n    - [ ] No\n    - [ ] Uncertain\n\n1. Installation\n    - [X] Standalone/Self-contained Component\n    - [ ] Part of Manifests\n    - [ ] Part of Distributions\n    - [X] Part of Notebook images\n\n1. Installation Documentation (Current Quality)\n    - [ ] Good\n    - [ ] Fair\n    - [ ] Part of Kubeflow\n    - [X] We are going to do this as part of 2.0 release\n\n1. CI/CD \n    - [X] Yes\n    - [ ] No\n\n1. Release Process\n    - [ ] Automated\n    - [X] Semi-automated\n    - [ ] Not Automated\n\n1. Kubeflow Website Documentation\n    - [ ] Yes\n    - [X] No\n\n1. Blog/Social Media \n    - [X] Yes\n    - [ ] No\n\n\n"
  },
  {
    "path": "proposals/model-registry-proposal.md",
    "content": "# Model Registry Platform for KubeFlow\n\n## Authors\n\n- Ramesh reddy (Red Hat)\n- Dhiraj Bokde (Red Hat)\n- Matteo Motari (Red Hat)\n\n## Maintainers\n\n- Ramesh Reddy (Red Hat)\n- Dhiraj Bokde (Red Hat)\n- Matteo Mortari (Red Hat)                                         \n- Andrea Lamparelli (Red Hat)                                   \n- Isabella do Amaral (Red Hat)\n- Tony Davidson (Red Hat)\n- Tommy Li (IBM) \n- Christian Kadner (IBM)\n\n## Motivation\n\nRef GitHub issue: [https://github.com/kubeflow/kubeflow/issues/7396](https://github.com/kubeflow/kubeflow/issues/7396)\n\nAccording to the [Kubeflow 2023 survey](https://blog.kubeflow.org/kubeflow-user-survey-2023/), 44% of users identified Model Registry as one of the big gaps in the user’s ML Lifecycle missing from the Kubeflow offering. \n\n![Kubeflow survey](diagrams/model-registry-kubeflowsurvey.png \"Kubeflow survey\")\n\nCurrently, there are no good open-source alternatives for standalone offerings of Model Registry. Most of these offerings are tightly aligned with their product counterparts or not offered as an open-source solution. We at Red Hat need a model registry that can be used in the cloud, on-prem, and in disconnected/secure environments. We would like to develop a project in the Kubeflow community adopting an open governance model with the help of the Kubeflow community.\n\nThe Kubeflow Pipelines (KFP) team uses Google’s project called [ml-metadata](https://github.com/google/ml-metadata) for storing the model training graph. Recently Google maintainers have [mentioned](https://github.com/google/ml-metadata/issues/185) that this project is going into maintenance mode putting the investment that the KFP team made into this project in jeopardy for additional feature development. \n\nThis proposal document suggests implementing Model Registry using ml-metadata too, however, we propose to re-implement parts of the ml-metadata to keep the current investments in KFP intact. \n\n\n## Kubeflow Working Group \n\nCurrently, Kubeflow doesn’t have a working group that will be responsible for Model Registry. We propose to establish a new **Model Registry WG**. The scope of this working group is to gather, analyze, and develop model registry requirements of Kubeflow community users.  We could also create a single WG for Spark and Model Registry as suggested in the Spark proposal.\n\n\n## High-Level Architecture\n\nThe desired high-level model is depicted in the figure below.\n\n![High-Level Architecture](diagrams/model-registry-overview.jpg \"High-Level Architecture\")\nFigure: [High-Level Architecture](https://miro.com/app/board/uXjVND99Mxk=/?share_link_id=650058432780)\n\n**NOTE:** The Model Registry is a _passive repository_ for metadata and is not meant to be a _Control Plane_. It does not perform any orchestration or expose APIs to perform actions on underlying OpenShift AI components. The AI components use Model Registry as a state machine to which they would reconcile their internal state to.\n\nWe envision this to be more of a backing store for various stages of MLOps that can log the user flow of model development and deployment. The model registry will meet a data scientist's need to visualize a model’s lineage and trace back the training executions, parameters, metrics, etc. It will also help deployment engineers visualize model pipeline events, actions, progress through deployment stages, etc. \n\nThe goal is to make Model Registry a first-class citizen in the Kubeflow ecosystem but this is not intended to be a limitation. The Model Registry is designed to function as a \"multi-protocol\" registry, offering streamlined integration not only with KubeFlow Pipelines but also with the capability to import from platforms such as HuggingFace or MLflow, among others (we've conducted preliminary experiments in this area). Additionally, there's a potential long-term goal to propose a universally adopted \"Model Registry standard protocol\" across all vendors\n\nAs a community initiative, we can implement the[ MLflow Registry REST API](https://mlflow.org/docs/latest/rest-api.html) to align the Model Registry as MLflow compatible, although this is not part of the initial scope.\n\n**LLM support:** In this dynamic scenario, the model registry functions as a metadata store, ensuring the decoupling of the registry from the actual model file. This setup allows for the storage of prompt/fine-tuned models akin to any other model type without necessitating a complete duplication of the model. RAG, essentially a pattern constructed atop LLM, currently lacks a distinct requirement or gap that needs addressing on the model registry front. The integration for example with LangChain requires the development of the [provider code in LangChain](https://python.langchain.com/docs/integrations/providers) (same for Llama-Index) which can be considered.\n\n\n## Goals \n\n* Associate metadata from training, experimentation, studies, and their metrics, with a model.\n* Build a catalog of models and manage model versions for deployment\n* Management of ML models in different deployment environments.\n* Build an open-source solution with a vibrant community in KubeFlow with open governance\n* Build a Kube Native solution\n* Avoid reinvention unless it is mandatory\n\n\n## Architecture\n\nTo bootstrap the project fast as well as to keep the existing investment in the KFP module intact we propose implementing the Model Registry in multiple steps. \n\n* Step 1: Adopt the Google community project [ML-Metadata](https://github.com/google/ml-metadata/) and build a Model Registry solution that also caters to the KFP team. This still follows the single-tenant (per namespace) deployment.\n* Step 2: Re-implement parts of the ML-Metadata project in Go lang and also make this server multi-tenant capable. Implement the RBAC features on the server to control the behavior with permissions and user personas.\n\n\n### Step 1:  The Incubation (Target to Deliver as Alpha in KF 1.9)\n\nGoogle community project [ML-Metadata](https://github.com/google/ml-metadata/) will be used as the core component to build the Model Registry. ML-Metadata provides a very extensible schema that is generic, similar to a key-value store, but also allows for the creation of logical schemas that can be queried as if they were physical schemas. Those can be manipulated using their bindings in the Python library. \n\nWe intend to use this model to extend and provide metadata storage services for model serving, also known as Model Registry. As part of this extension, we will develop Python/Go extensions to support the Model Registry. We will also develop an OpenAPI interface to expose the Model Registry API to the clients. \n\n![Step1 Diagram](diagrams/model-registry-connections.png \"Step1 Diagram\")\n[Diagram source](https://lucid.app/lucidchart/6a9818f2-d76e-40b7-b30c-57cb1c143d9e/edit?viewport_l[…]1528%2C0_0&invitationId=inv_a7e226fb-edc9-4c4e-b36e-dac9df95219b)\n\n\n### Step 2:  The Re-Write\n\n> [!NOTE]\n> this step might be influenced by the outcomes of the current investigation on OCI/ORAS as an infrastructure layer for Model Registry (see related chapter later in this document); as such, amendments to time or scope might follow depending on the results and decisions in relation to that topic.\n\nIn this step we propose to rewrite parts of the ML-Metadata project, primarily remove the C++ server and re-implement it based on Golang and make it Kube native. As part of the rewrite, we want to make this multi-tenant such that there is only a single installation of the Model Registry and integrate with Istio/envoy to support the RBAC and mTLS on its endpoints. We have done a POC using GoLang and found using the code generation and ORM solutions we could eliminate a lot of crud code for easier maintenance. We also believe picking more mainstream language for the Kubernetes environment might also encourage more contributions from the community.\n\n![Step2 Diagram](diagrams/model-registry-connections2.png \"Step2 Diagram\")\n\n\n### Components\n\nThis section will briefly describe the different components of the system.\n\n\n#### MLMD C++ Server\n\nThis is the metadata server from Google's ml-metadata project.  This component is hosted to communicate with a backend relational database that stores the actual metadata about the models. This server exposes a “_gRPC_” interface for its clients to communicate with. This server provides a very flexible schema model, where using this model one can define logical data models to fit the needs of different MLOps operations, for example, metadata during the training and experimentation, metadata about metrics or model versioning, etc. \n\n\n#### OpenAPI/REST Server\n\nThis component exposes a higher-level REST API of the Model Registry. In contrast, the MLMD server exposes a lower level generic API over gRPC, whereas this REST server exposes a higher level API that is much closer to the domain model of Model Registry, like\n\n* Register a Model\n* Version a Model\n* Get a catalog of models\n* Manage the deployment statutes of a model\n* Search for registered models\n\nThe REST API server converts its requests into one or more underlying gRPC requests on the MLMD Server. This layer is mainly designed to be used with tooling. Implementation of the Model Registry UI in the Kubeflow Dashboard is an open question at this point to be discussed with the Kubeflow Dashboard project. In step 2, this will be expanded as the main server replacing the C++ server. The semantics of communication protocol can be reevaluated.\n\n\n#### Model Registry Controller\n\nModel Registry controller is also called Model Registry Operator. The main purpose of this component is to install/deploy components of the Model Registry stack on a Kubernetes cluster. Once the components are installed, the reconciler in the controller will continuously run and monitor these components to keep them healthy and alive. \n\n\n#### CLI\n\nCLI, a command line tool for interacting with Model Registry. This tool can be used by a user to execute operations such as retrieving the registered models, getting the model’s deployment status, model’s version, etc. \n\n\n### Integration with Model Serving Components\n\nOnce a model has been registered as a _RegisteredModel_ resource, versions of the model and its _ModelArtifacts_ will be created and associated with the _RegisteredModel_. \n\nThe model serving controller will advertise itself in the model registry by creating a _ServingEnvironment_ entity. \n\nThe sequence diagram below shows how _RegisteredModel_ will be deployed by model serving:\n\n![Model Serving Sequence](diagrams/model-registry-inferenceserviceflow.png \"Model Serving Sequence\")\nFigure: [Model Serving Sequence](https://miro.com/app/board/uXjVNVwkkHw=/?share_link_id=50390168590)\n\nThe user creates _InferenceService_ entities in Model Registry for _RegisteredModels_ to deploy them. The _InferenceService_ may optionally specify which _ModelVersion_ to deploy. If it’s not specified, model serving should deploy the latest _ModelVersion_ of _RegisteredModel_. \n\nModel serving will reconcile _InferenceService_ metadata with Kubernetes CRs to deploy ML models. It will also reconcile Kubernetes CR status with _ServeModel_ state to log model serving state in Model Registry. \n\nA model registry Golang client library will provide wrapper APIs to make it easier to work with model registry entities and to perform sequences of operations such as retrieving _ModelArtifacts_ to serve. \n\n\n### Integration with Kubeflow Pipelines Components\n\nFor Step 1, we believe the Model Registry will work as is as a drop-in solution, as there are not any changes from its perspective, only the introduction of Model Registry. However, the deployed Model Registry can be used to serve both KFP components and Model Registry users.\n\nIn Step 2, when a new Model Registry is supported with multi-tenancy, the KFP components will need to be modified to support a multi-tenant model. To support this we would need to update the KFP MLMD Python bindings  \n\n\n### Integration with Notebooks\n\nWe intend to extend the current MLMD Python libraries for Model Registry usage. We intend to push these as importable packages into any notebook environment.\n\n\n### Security\n\nRBAC roles will be defined as “Data Scientist”, “Data Engineer”, “Administrator” based on consultations with Red Hat’s UX teams. The permissions matrix for the roles to available permissions needs to be mapped. Initially, these will be enforced at the OpenAPI layer.\n\n\n### Metrics and Observability\n\nThe Model Registry will be a system designed to be observable, poentially including capabilities to generate user-level metrics as required.\n\n\n### UI/Dashboard\n\nThe team listed in the maintainers lacks expertise in UI development. While this feature is on our roadmap, we'll need to collaborate with the dashboard community team to receive the necessary support in this area. This is largely TBD right now.\n\n\n### Implementation Plan\n\n* We seek help to establish a working group dedicated to initiating the developmental plans for the incubation stage. We intend to foster collaboration within the community and engage with other community organizations to collectively work on a solution\n* We are seeking approval to create two new repositories within Kubeflow’s GitHub organization. One repository will focus on the operator, while the other will serve as the designated space for the Model Registry. We intend to move the current Model Registry implementation in the Open Data Hub organization and modify it to align with the standards and requirements of the Kubeflow community.\n\n\n### Additional considerations (OCI spec considerations)\n\nWe are also exploring to leverage, at least in part, the OCI distribution spec 1.1 as part of Model Registry. This could provide a kube-native and CNCF friendly way to bundle model artifacts and related artifacts. We are also exploring how much of the OCI spec can be used for additional purposes, for example:\n\n* storing [versioned] artifacts\n* signing artifacts\n* RBAC\n* linking with OCI 1.1\n* audit logs\n* some additional metadata storage\n\nbut this is still under active investigation so while some use cases might likely be supportable (eg: storing) others might not be achievable given OCI capabilities in relation to model registry requirements.\n\n\n## Alternative Open Source Projects Considered\n\n### MLFlow\n\nMLFlow is one of the most popular ML frameworks: it provides comprehensive, out-of-the-box coverage of all the phases in a typical ML project end-to-end.  A GUI provides data-scientist-friendly ways to compare experiments run, comparing parameters and characteristics, making it easy to identify effective models, training strategies, and which models can be promoted to the next phase (staging, prod). They provide a very low barrier for entry for Data scientists to use the Model Registry by providing various deployment options.\n\n**Pros:**\n\n* MLFlow is the most popular e2e ML project management framework\n* out-of-the-box support for many ML models\n\n**Risks:**\n\n* While being an OSS project, MLFlow seems to be governed by Databricks, making it challenging from an outlook and future contributions/RFEs perspective. \n* Not designed as a Kube-native solution.\n* For model lineage support, it is aligned with MLFlow’s experiments and lineage. This does fit with the current Kubeflow pipeline functionality.\n* Built for working with the MLFlow suite of components, not as a reusable component in an ML platform without further integrations.\n\n\n## DVC (iterative.ai)\n\nThis project uses git as the underlying storage solution and the immutability is guaranteed by the use of hashes and RBAC. The project leverages the capability of git in “tracking data” in order to implement a “tracking experiment” to deliver the reproducibility of the trained model. The combination of file pointers in the git history is used to retrieve objects/artifacts, along with the ability to reproduce the actual training pipeline. \n\nA complementary project called GTO lets you manage tags inside of the git repo: this is an open-source project, and this is the backend used by the GUI/”studio” application. This component is used by DVC to provide a Model Registry store.\n\n**Pros:**\n\n* DVC uses git as the underlying storage, and leverages git concepts in its capabilities to guarantee the reproducibility of the ML training\n* Stores even training data also in git.\n* Geared totally for the CI/CD workflows, everything controlled by a YAML file.\n\n**Risks:**\n\n* While being an OSS project, seems governed by Iterative.ai, no open governance model.\n* The search/query is based on git, in large workspaces this could be a performance risk.\n* Not a Kube native solution.\n* Model lineage support is aligned with DVC’s experiments and lineage flow which git influenced. This does fit with the current Kubeflow pipeline workflow functionality natively.\n\n\n## ModelDB (verta.ai)\n\nModelDB is an open-source machine learning model monitoring and management system that tracks metadata throughout a model's lifecycle. It follows a client-server architecture with a web-based front end and a Java-based backend that interacts with a relational database and an artifact store. ModelDB primarily focuses on experiment tracking and management, but it also includes a Python library that is integrated with Verta's ML platform. Their Model Registry component is NOT an Open Source solution only available in their enterprise offering.\n\n**Pros:**\n\n* Open Source solution supports experiment tracking.\n* Provides flexibility in database schema for efficient metadata management.\n* Utilizes a contract-first backend implementation based on Proto schemas, enhancing data consistency and communication.\n* Uses Java stack used in the backend implementation.\n\n**Risks:**\n\n* Community contributions may be challenging as it is primarily maintained and governed by Verta.ai.\n* Fully integrated within the Verta.ai ML platform, which may limit its usability outside of its ecosystem.\n* No Model Registry capabilities.\n* There is no standalone Python library available for ModelDB\n"
  },
  {
    "path": "psg/ROADMAP.md",
    "content": "## Purpose \nThis roadmap tracks the status of work done by the [Kubeflow Project Steering Group](https://github.com/jlewi/internal-acls/blob/7984b302128b1967640fee186773734b3ae13c82/github-orgs/kubeflow/org.yaml#L937) (or PSG). This document \nis itself a work in progress, and is not a comprehensive list. It was last updated Feb. 25, 2021.\n\n## Backlog\nList of work items acknowledged or identified by the PSG where work has not yet started, with tracking issues\nwhere possible. Not currently listed in order of priority. Do not open PRs against these items unless you have \nan approved proposal.\n- Convert this doc to GitHub Project\n- Clearer process for submitting and tracking community proposals\n- Updated list of owners of various Kubeflow assets\n- Clearer instructions for managing community assets & shared files across GitHub and Kubeflow's gSuite\n- Process for archiving inactive repos (#[479](https://github.com/kubeflow/community/issues/479))\n- Add SIG dir and governance docs (#[481](https://github.com/kubeflow/community/issues/481))\n- Triage stale issues/PRs in kubeflow/community\n- Add more /kind tags in kubeflow/community & create triage process\n\n## In Progress\nList of work items currently under way, with links to tracking issues or PRs where possible. Do not open PRs\nagainst these items unless you have an approved proposal.\n- Publish guidelines for use of the Kubeflow Trademark\n- Improve Twitter contribution process (#[487](https://github.com/kubeflow/community/issues/487))\n- Improve Kubeflow blog contribution process (#[488](https://github.com/kubeflow/community/issues/488))\n\n## Proposals Under Review\nList of community proposals under consideration by the PSG. These will undergo iterations as the PSG and \nimpacted WG leads provide feedback to the proposal author(s) and those authors update their proposal\naccordingly. Please refer to the linked issue/PR for most recent status and tag the PSG with \n`@kubeflow/project-steering-group` if a response is required on our end. \n- Community Calendar refactor (#[482](https://github.com/kubeflow/community/issues/482))\n- Restructuring Kubeflow docs(#[451](https://github.com/kubeflow/community/pull/440)) \n- Each Kubeflow distribution should have its GitHub team (#[451](https://github.com/kubeflow/community/issues/451))\n\n## Completed\n- Publish PSG roadmap\n- Add additional blog OWNERs \n\n## Blocked\nList of requests we are currently blocked on. To be moved to backlog once there is a clear path forward.\n- Community-accessible analytics reports for the Kubeflow Website\n"
  },
  {
    "path": "repository-setup.md",
    "content": "# Repository Setup\n\nHere are the steps involved in setting up a new repository; there is more information in the sections below.\n\nSteps 1-3 should be performed by an admin for the Kubeflow org\n\n1. Create the repository\n\n1. Configure the repository in GitHub following the instructions [below](#repository-configuration)\n   \n   * enable branch protections\n\n1. Create an OWNERS file at the root of the repository\n\n    * Anyone can create the PR\n    * PR will need to be merged manually by a Kubeflow org administrator\n\t  * For more info on OWNERS files, see [CONTRIBUTING.md](https://github.com/kubeflow/community/blob/master/CONTRIBUTING.md)\n    * After the OWNERs file is merged, subsequent PRs can be automatically merged by Tide\n\n1. Setup prow for the repository by following the instructions [below](#setup-prow)\n\n    * This step can be performed by anyone; doesn't need to be a Kubeflow org admin\n\n\n1. Open a PR to [org.yaml](https://github.com/kubeflow/internal-acls/blob/master/github-orgs/kubeflow/org.yaml)\n   granting write permssion to the `ci-bots` team.\n\n## Setting up prow for your repository\n\nWe use [Prow](https://github.com/kubernetes/test-infra)\n\n\t* Continuous integration\n\t* Automatic merging of PRs (tide)\n\n    * Tide should automatically be enabled for all repositories in the Kubeflow org \n\n\t* Manage PRs using bots\n\n\n1. Configure prow for the repository by following these [instructions](https://github.com/kubeflow/testing#setting-up-a-kubeflow-repository-to-use-prow-)\n\n  * Create a prow_config.yaml file with the following contents:\n\n  ```\n  workflows: []\n  ```\n\n  * This file is sufficient to ensure the prow jobs pass, but doesn't run any actual tests.\n\n  * When you are ready to actually add E2E tests, you can follow [adding basic e2e tests](https://github.com/kubeflow/testing#adding-an-e2e-test-for-a-new-repository) to add a basic E2E test\n   for your repository \n\n  * See kubeflow/testing#11 for work creating generating tests for things like lint.\n\n\n## Repository configuration\n\n### Repository Permissions\nWhen setting up permissions for a repository there are a few things to note:\n- When providing permissions for `Collaborators and teams`, only teams should be used.\n- Teams that should be added by default, with write access, are `ci-bots` and `core-approvers`. \n\n\t* Additional teams can be added as necessary but\n\t* Most operations should be done via the ci-bots and adding folks to the owners files\n\t* So the number of folks with direct access to a repository should be small (<5)\n\n### Third Party Apps\nMake sure to enable the third-party apps used by the Kubeflow community.\n\nThese apps include:\n- Reviewable\n    - For Reviewable, sign in with Github and in the `Repositories` tab, make sure to allow visibility to your other orgs. After allowing `Kubeflow`, you should be able to enable your repo.\n    - Click on the enabled repo in Reviewable and make sure to disable `Review status in GitHub PR` because this causes problems for prow https://github.com/kubernetes/test-infra/issues/7140\n- Travis CI\n    - For Travis CI, any administrator of the repo should be able to enable tests. Just follow the Travis CI [Getting Started Guide](https://docs.travis-ci.com/user/getting-started/).\n- Coveralls\n    - For instructions on enabling coveralls and integrating with Travis CI, you can follow [these](https://docs.travis-ci.com/user/coveralls/) instructions. If you aren't an org admin, you may need to request assistance in enabling coveralls.\n\n### Branch Protections\nWhen setting up the repo, the `master` branch should be protected. Instructions on protecting a branch can be found [here](https://help.github.com/articles/configuring-protected-branches/).\n\nA few things to note when setting up branch protection:\n- Enable `Protect this branch` to protect the code in the `master` branch.\n- Be sure not to enable `Require pull request reviews before merging`. This setting conflicts with Tide as seen in this [issue](https://github.com/kubeflow/tf-operator/issues/433).\n- Don't enable `Require branches to be up to date before merging`\n- Enable `Require status checks to pass before merging`\n\n"
  },
  {
    "path": "scripts/OWNERS",
    "content": "approvers:\n  - lluunn\n  - zabbasi"
  },
  {
    "path": "scripts/company_stats.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Company Contributions\\n\",\n    \"\\n\",\n    \"* This notebook attempts to compute number of contributions (currently just PRs) by various companies\\n\",\n    \"* It relies on github_users.json to map users to affiliation\\n\",\n    \"\\n\",\n    \"  * **github_users.json** Is outdated and needs to be updated\\n\",\n    \"  \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# NOTE: The RuntimeWarnings (if any) are harmless. See ContinuumIO/anaconda-issues#6678.\\n\",\n    \"from pandas.io import gbq\\n\",\n    \"import pandas as pd\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import getpass\\n\",\n    \"import subprocess\\n\",\n    \"# Configuration Variables. Modify as desired.\\n\",\n    \"\\n\",\n    \"PROJECT = subprocess.check_output([\\\"gcloud\\\", \\\"config\\\", \\\"get-value\\\", \\\"project\\\"]).strip().decode()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Setup Authorization\\n\",\n    \"\\n\",\n    \"If you are using a service account run\\n\",\n    \"%%bash\\n\",\n    \"\\n\",\n    \"# Activate Service Account provided by Kubeflow.\\n\",\n    \"gcloud auth activate-service-account --key-file=${GOOGLE_APPLICATION_CREDENTIALS}\\n\",\n    \"\\n\",\n    \"If you are running using user credentials\\n\",\n    \"\\n\",\n    \"gcloud auth application-default login\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 26,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import datetime\\n\",\n    \"month = datetime.datetime.now().month\\n\",\n    \"year = datetime.datetime.now().year\\n\",\n    \"\\n\",\n    \"num_months = 12\\n\",\n    \"\\n\",\n    \"months = []\\n\",\n    \"for i in range(num_months):\\n\",\n    \"    months.append(\\\"\\\\\\\"{0}{1:02}\\\\\\\"\\\".format(year, month))\\n\",\n    \"    month -= 1\\n\",\n    \"    if month == 0:\\n\",\n    \"        month = 12\\n\",\n    \"        year -=1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Read in user affiliations\\n\",\n    \"\\n\",\n    \"* github_users.json is produced using CNCF scripts\\n\",\n    \"* There can be multiple entries for a user showing their company & affiliation during different time periods\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 27,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import json\\n\",\n    \"import os\\n\",\n    \"import requests\\n\",\n    \"if not os.path.exists(\\\".cache\\\"):\\n\",\n    \"    os.makedirs(\\\".cache\\\")\\n\",\n    \"    \\n\",\n    \"\\n\",\n    \"users_file = os.path.join(\\\".cache\\\", \\\"github_users.json\\\")\\n\",\n    \"\\n\",\n    \"if not os.path.exists(users_file):\\n\",\n    \"    url = \\\"https://github.com/kubeflow/community/blob/master/devstats/data/github_users.json?raw=true\\\"\\n\",\n    \"\\n\",\n    \"    r = requests.get(url, allow_redirects=True)\\n\",\n    \"    \\n\",\n    \"    with open(users_file, \\\"wb\\\") as hf:\\n\",\n    \"        hf.write(r.content)\\n\",\n    \"\\n\",\n    \"with open(users_file) as hf:    \\n\",\n    \"    data = json.load(hf)\\n\",\n    \"users=pd.DataFrame(data)\\n\",\n    \"users = users[[\\\"login\\\", \\\"company\\\"]]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 28,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Dedupe companies\\n\",\n    \"c = [\\\"cisco\\\", \\\"datawire\\\", \\\"google\\\", \\\"ibm\\\", \\\"intel\\\", \\\"teradata\\\", \\\"red hat\\\"]\\n\",\n    \"known_companies = dict(zip(c,c))\\n\",\n    \"known_companies[\\\"redhat\\\"] = \\\"red hat\\\"\\n\",\n    \"def normalize_company(name):\\n\",\n    \"    if name is None:\\n\",\n    \"        return \\\"None\\\"\\n\",\n    \"    name = name.strip().lower().strip(\\\"!\\\").strip(\\\"@\\\")\\n\",\n    \"        \\n\",\n    \"     \\n\",\n    \"    for k, v in known_companies.items():\\n\",\n    \"        if k in name:\\n\",\n    \"            return v\\n\",\n    \"    return name\\n\",\n    \"\\n\",\n    \"users[\\\"company\\\"] = users[\\\"company\\\"].apply(normalize_company)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"* Users can have multiple entries\\n\",\n    \"* We pick the first non None entry\\n\",\n    \"* TODO(jlewi) We should find a better way to combine multiple entries\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 29,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"'google'\"\n      ]\n     },\n     \"execution_count\": 29,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"def combine_company(names):\\n\",\n    \"    for i in names:\\n\",\n    \"        if i != \\\"None\\\":\\n\",\n    \"            return i\\n\",\n    \"    return None\\n\",\n    \"\\n\",\n    \"user_map= users.groupby(\\\"login\\\")[\\\"company\\\"].apply(combine_company)\\n\",\n    \"\\n\",\n    \"# You can now look up users as user_map[actor]\\n\",\n    \"user_map[\\\"jlewi\\\"]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Attribute PRs to Companies\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"* We use BigQuery to get a list of PRs\\n\",\n    \"* We then map each PR to the company of its author\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 30,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"/home/jovyan/.local/lib/python3.6/site-packages/pandas_gbq/gbq.py:555: UserWarning: A progress bar was requested, but there was an error loading the tqdm library. Please install tqdm to use the progress bar functionality.\\n\",\n      \"  progress_bar_type=progress_bar_type,\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"query = \\\"\\\"\\\"\\n\",\n    \"SELECT\\n\",\n    \"    DATE(created_at) AS pr_date,\\n\",\n    \"    actor.id,\\n\",\n    \"    actor.login\\n\",\n    \"  FROM `githubarchive.month.*`\\n\",\n    \"  WHERE\\n\",\n    \"    _TABLE_SUFFIX IN ({0})\\n\",\n    \"    AND type = 'PullRequestEvent'\\n\",\n    \"    AND org.login = 'kubeflow'\\n\",\n    \"    AND JSON_EXTRACT(payload, '$.action') IN ('\\\"opened\\\"')\\n\",\n    \"\\\"\\\"\\\".format(\\\",\\\".join(months))\\n\",\n    \"\\n\",\n    \"prs=gbq.read_gbq(str(query), dialect='standard', project_id=PROJECT)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 31,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"p=pd.Series(data=prs[\\\"id\\\"].values,index=prs[\\\"pr_date\\\"])\\n\",\n    \"p=p.sort_index()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 32,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>pr_date</th>\\n\",\n       \"      <th>id</th>\\n\",\n       \"      <th>login</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>2019-05-01</td>\\n\",\n       \"      <td>4784270</td>\\n\",\n       \"      <td>gabrielwen</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2019-05-01</td>\\n\",\n       \"      <td>4739316</td>\\n\",\n       \"      <td>Jeffwan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2019-05-01</td>\\n\",\n       \"      <td>1497445</td>\\n\",\n       \"      <td>derekhh</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>2019-05-01</td>\\n\",\n       \"      <td>3724388</td>\\n\",\n       \"      <td>cheyang</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>2019-05-02</td>\\n\",\n       \"      <td>3631320</td>\\n\",\n       \"      <td>animeshsingh</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5986</th>\\n\",\n       \"      <td>2019-06-23</td>\\n\",\n       \"      <td>146453</td>\\n\",\n       \"      <td>kkasravi</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5987</th>\\n\",\n       \"      <td>2019-07-03</td>\\n\",\n       \"      <td>2348602</td>\\n\",\n       \"      <td>IronPan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5988</th>\\n\",\n       \"      <td>2020-01-16</td>\\n\",\n       \"      <td>38020283</td>\\n\",\n       \"      <td>kubeflow-bot</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5989</th>\\n\",\n       \"      <td>2020-01-16</td>\\n\",\n       \"      <td>37601826</td>\\n\",\n       \"      <td>kunmingg</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5990</th>\\n\",\n       \"      <td>2020-01-16</td>\\n\",\n       \"      <td>20940800</td>\\n\",\n       \"      <td>MATRIX4284</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>5991 rows × 3 columns</p>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"        pr_date        id         login\\n\",\n       \"0    2019-05-01   4784270    gabrielwen\\n\",\n       \"1    2019-05-01   4739316       Jeffwan\\n\",\n       \"2    2019-05-01   1497445       derekhh\\n\",\n       \"3    2019-05-01   3724388       cheyang\\n\",\n       \"4    2019-05-02   3631320  animeshsingh\\n\",\n       \"...         ...       ...           ...\\n\",\n       \"5986 2019-06-23    146453      kkasravi\\n\",\n       \"5987 2019-07-03   2348602       IronPan\\n\",\n       \"5988 2020-01-16  38020283  kubeflow-bot\\n\",\n       \"5989 2020-01-16  37601826      kunmingg\\n\",\n       \"5990 2020-01-16  20940800    MATRIX4284\\n\",\n       \"\\n\",\n       \"[5991 rows x 3 columns]\"\n      ]\n     },\n     \"execution_count\": 32,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"prs\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 33,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"prs[\\\"company\\\"] = user_map[prs[\\\"login\\\"]].values\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 34,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:2: SettingWithCopyWarning: \\n\",\n      \"A value is trying to be set on a copy of a slice from a DataFrame.\\n\",\n      \"Try using .loc[row_indexer,col_indexer] = value instead\\n\",\n      \"\\n\",\n      \"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\\n\",\n      \"  \\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"d=prs[[\\\"pr_date\\\", \\\"company\\\"]]\\n\",\n    \"d[\\\"count\\\"]=1\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 35,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"pr_counts = d.pivot_table(\\\"count\\\", columns=\\\"company\\\", index=\\\"pr_date\\\", aggfunc=\\\"sum\\\", fill_value=0)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 46,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Some solutions here: https://stackoverflow.com/questions/46470743/how-to-efficiently-compute-a-rolling-unique-count-in-a-pandas-time-series\\n\",\n    \"# Need to figure out how to do a time based window\\n\",\n    \"\\n\",\n    \"counts = pr_counts.rolling('28d').sum()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### Make a plot\\n\",\n    \"\\n\",\n    \"* Plot a subset of companies\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 128,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:3: SettingWithCopyWarning: \\n\",\n      \"A value is trying to be set on a copy of a slice from a DataFrame.\\n\",\n      \"Try using .loc[row_indexer,col_indexer] = value instead\\n\",\n      \"\\n\",\n      \"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\\n\",\n      \"  This is separate from the ipykernel package so we can avoid doing imports until\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"\\n\",\n       \"<div id=\\\"altair-viz-d2b6a7b6a1c84fedb0546a9764ce4ab8\\\"></div>\\n\",\n       \"<script type=\\\"text/javascript\\\">\\n\",\n       \"  (function(spec, embedOpt){\\n\",\n       \"    const outputDiv = document.getElementById(\\\"altair-viz-d2b6a7b6a1c84fedb0546a9764ce4ab8\\\");\\n\",\n       \"    const paths = {\\n\",\n       \"      \\\"vega\\\": \\\"https://cdn.jsdelivr.net/npm//vega@5?noext\\\",\\n\",\n       \"      \\\"vega-lib\\\": \\\"https://cdn.jsdelivr.net/npm//vega-lib?noext\\\",\\n\",\n       \"      \\\"vega-lite\\\": \\\"https://cdn.jsdelivr.net/npm//vega-lite@4.0.2?noext\\\",\\n\",\n       \"      \\\"vega-embed\\\": \\\"https://cdn.jsdelivr.net/npm//vega-embed@6?noext\\\",\\n\",\n       \"    };\\n\",\n       \"\\n\",\n       \"    function loadScript(lib) {\\n\",\n       \"      return new Promise(function(resolve, reject) {\\n\",\n       \"        var s = document.createElement('script');\\n\",\n       \"        s.src = paths[lib];\\n\",\n       \"        s.async = true;\\n\",\n       \"        s.onload = () => resolve(paths[lib]);\\n\",\n       \"        s.onerror = () => reject(`Error loading script: ${paths[lib]}`);\\n\",\n       \"        document.getElementsByTagName(\\\"head\\\")[0].appendChild(s);\\n\",\n       \"      });\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    function showError(err) {\\n\",\n       \"      outputDiv.innerHTML = `<div class=\\\"error\\\" style=\\\"color:red;\\\">${err}</div>`;\\n\",\n       \"      throw err;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    function displayChart(vegaEmbed) {\\n\",\n       \"      vegaEmbed(outputDiv, spec, embedOpt)\\n\",\n       \"        .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    if(typeof define === \\\"function\\\" && define.amd) {\\n\",\n       \"      requirejs.config({paths});\\n\",\n       \"      require([\\\"vega-embed\\\"], displayChart, err => showError(`Error loading script: ${err.message}`));\\n\",\n       \"    } else if (typeof vegaEmbed === \\\"function\\\") {\\n\",\n       \"      displayChart(vegaEmbed);\\n\",\n       \"    } else {\\n\",\n       \"      loadScript(\\\"vega\\\")\\n\",\n       \"        .then(() => loadScript(\\\"vega-lite\\\"))\\n\",\n       \"        .then(() => loadScript(\\\"vega-embed\\\"))\\n\",\n       \"        .catch(showError)\\n\",\n       \"        .then(() => displayChart(vegaEmbed));\\n\",\n       \"    }\\n\",\n       \"  })({\\\"config\\\": {\\\"view\\\": {\\\"continuousWidth\\\": 400, \\\"continuousHeight\\\": 300}}, \\\"data\\\": {\\\"name\\\": \\\"data-742aa6bd59462da1ce5853acf332dadc\\\"}, \\\"mark\\\": \\\"point\\\", \\\"encoding\\\": {\\\"color\\\": {\\\"type\\\": \\\"nominal\\\", \\\"field\\\": \\\"company\\\"}, \\\"x\\\": {\\\"type\\\": \\\"temporal\\\", \\\"field\\\": \\\"day\\\", \\\"title\\\": \\\"Day\\\"}, \\\"y\\\": {\\\"type\\\": \\\"quantitative\\\", \\\"field\\\": \\\"value\\\", \\\"title\\\": \\\"# PRs\\\"}}, \\\"selection\\\": {\\\"selector027\\\": {\\\"type\\\": \\\"interval\\\", \\\"bind\\\": \\\"scales\\\", \\\"encodings\\\": [\\\"x\\\", \\\"y\\\"]}}, \\\"title\\\": \\\"PRs\\\", \\\"$schema\\\": \\\"https://vega.github.io/schema/vega-lite/v4.0.2.json\\\", \\\"datasets\\\": {\\\"data-742aa6bd59462da1ce5853acf332dadc\\\": [{\\\"day\\\": \\\"2019-03-01T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2019-03-02T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 16.0}, {\\\"day\\\": \\\"2019-03-03T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 18.0}, {\\\"day\\\": \\\"2019-03-04T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 27.0}, {\\\"day\\\": \\\"2019-03-05T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 33.0}, {\\\"day\\\": \\\"2019-03-06T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 45.0}, {\\\"day\\\": \\\"2019-03-07T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 60.0}, {\\\"day\\\": \\\"2019-03-08T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 66.0}, {\\\"day\\\": \\\"2019-03-09T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 69.0}, {\\\"day\\\": \\\"2019-03-10T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 71.0}, {\\\"day\\\": \\\"2019-03-11T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 75.0}, {\\\"day\\\": \\\"2019-03-12T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 76.0}, {\\\"day\\\": \\\"2019-03-13T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 78.0}, {\\\"day\\\": \\\"2019-03-14T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 84.0}, {\\\"day\\\": \\\"2019-03-15T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 92.0}, {\\\"day\\\": \\\"2019-03-16T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 94.0}, {\\\"day\\\": \\\"2019-03-18T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 98.0}, {\\\"day\\\": \\\"2019-03-19T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 109.0}, {\\\"day\\\": \\\"2019-03-20T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 116.0}, {\\\"day\\\": \\\"2019-03-21T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 124.0}, {\\\"day\\\": \\\"2019-03-22T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 136.0}, {\\\"day\\\": \\\"2019-03-23T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 141.0}, {\\\"day\\\": \\\"2019-03-24T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 145.0}, {\\\"day\\\": \\\"2019-03-25T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 157.0}, {\\\"day\\\": \\\"2019-03-26T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 168.0}, {\\\"day\\\": \\\"2019-03-27T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 181.0}, {\\\"day\\\": \\\"2019-03-28T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 191.0}, {\\\"day\\\": \\\"2019-03-29T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 192.0}, {\\\"day\\\": \\\"2019-03-30T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 195.0}, {\\\"day\\\": \\\"2019-03-31T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 194.0}, {\\\"day\\\": \\\"2019-04-01T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 191.0}, {\\\"day\\\": \\\"2019-04-02T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 199.0}, {\\\"day\\\": \\\"2019-04-03T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 196.0}, {\\\"day\\\": \\\"2019-04-04T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 193.0}, {\\\"day\\\": \\\"2019-04-05T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 208.0}, {\\\"day\\\": \\\"2019-04-06T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 217.0}, {\\\"day\\\": \\\"2019-04-07T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 217.0}, {\\\"day\\\": \\\"2019-04-08T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 224.0}, {\\\"day\\\": \\\"2019-04-09T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 237.0}, {\\\"day\\\": \\\"2019-04-10T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 244.0}, {\\\"day\\\": \\\"2019-04-11T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 245.0}, {\\\"day\\\": \\\"2019-04-12T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 245.0}, {\\\"day\\\": \\\"2019-04-13T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 244.0}, {\\\"day\\\": \\\"2019-04-14T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 246.0}, {\\\"day\\\": \\\"2019-04-15T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 252.0}, {\\\"day\\\": \\\"2019-04-16T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 251.0}, {\\\"day\\\": \\\"2019-04-17T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 246.0}, {\\\"day\\\": \\\"2019-04-18T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 246.0}, {\\\"day\\\": \\\"2019-04-19T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 243.0}, {\\\"day\\\": \\\"2019-04-20T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 240.0}, {\\\"day\\\": \\\"2019-04-21T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 237.0}, {\\\"day\\\": \\\"2019-04-22T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 238.0}, {\\\"day\\\": \\\"2019-04-23T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 242.0}, {\\\"day\\\": \\\"2019-04-24T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 233.0}, {\\\"day\\\": \\\"2019-04-25T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 235.0}, {\\\"day\\\": \\\"2019-04-26T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 230.0}, {\\\"day\\\": \\\"2019-04-28T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 224.0}, {\\\"day\\\": \\\"2019-04-29T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 226.0}, {\\\"day\\\": \\\"2019-04-30T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 222.0}, {\\\"day\\\": \\\"2019-05-01T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 215.0}, {\\\"day\\\": \\\"2019-05-02T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 209.0}, {\\\"day\\\": \\\"2019-05-03T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 197.0}, {\\\"day\\\": \\\"2019-05-04T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 189.0}, {\\\"day\\\": \\\"2019-05-05T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 187.0}, {\\\"day\\\": \\\"2019-05-06T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 179.0}, {\\\"day\\\": \\\"2019-05-07T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 177.0}, {\\\"day\\\": \\\"2019-05-08T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 176.0}, {\\\"day\\\": \\\"2019-05-09T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 177.0}, {\\\"day\\\": \\\"2019-05-10T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 176.0}, {\\\"day\\\": \\\"2019-05-11T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 178.0}, {\\\"day\\\": \\\"2019-05-13T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 178.0}, {\\\"day\\\": \\\"2019-05-14T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 183.0}, {\\\"day\\\": \\\"2019-05-15T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 196.0}, {\\\"day\\\": \\\"2019-05-16T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 198.0}, {\\\"day\\\": \\\"2019-05-17T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 195.0}, {\\\"day\\\": \\\"2019-05-18T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 194.0}, {\\\"day\\\": \\\"2019-05-19T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 193.0}, {\\\"day\\\": \\\"2019-05-20T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 185.0}, {\\\"day\\\": \\\"2019-05-21T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 176.0}, {\\\"day\\\": \\\"2019-05-22T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 182.0}, {\\\"day\\\": \\\"2019-05-23T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 183.0}, {\\\"day\\\": \\\"2019-05-24T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 179.0}, {\\\"day\\\": \\\"2019-05-25T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 179.0}, {\\\"day\\\": \\\"2019-05-27T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 173.0}, {\\\"day\\\": \\\"2019-05-28T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 167.0}, {\\\"day\\\": \\\"2019-05-29T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 173.0}, {\\\"day\\\": \\\"2019-05-30T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 176.0}, {\\\"day\\\": \\\"2019-05-31T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 176.0}, {\\\"day\\\": \\\"2019-06-01T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 175.0}, {\\\"day\\\": \\\"2019-06-02T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 177.0}, {\\\"day\\\": \\\"2019-06-03T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 182.0}, {\\\"day\\\": \\\"2019-06-04T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 178.0}, {\\\"day\\\": \\\"2019-06-05T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 184.0}, {\\\"day\\\": \\\"2019-06-06T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 184.0}, {\\\"day\\\": \\\"2019-06-07T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 184.0}, {\\\"day\\\": \\\"2019-06-09T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 181.0}, {\\\"day\\\": \\\"2019-06-10T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 174.0}, {\\\"day\\\": \\\"2019-06-11T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 164.0}, {\\\"day\\\": \\\"2019-06-12T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 155.0}, {\\\"day\\\": \\\"2019-06-13T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 150.0}, {\\\"day\\\": \\\"2019-06-14T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 152.0}, {\\\"day\\\": \\\"2019-06-16T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 153.0}, {\\\"day\\\": \\\"2019-06-17T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 151.0}, {\\\"day\\\": \\\"2019-06-18T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 155.0}, {\\\"day\\\": \\\"2019-06-19T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 151.0}, {\\\"day\\\": \\\"2019-06-20T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 144.0}, {\\\"day\\\": \\\"2019-06-21T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 143.0}, {\\\"day\\\": \\\"2019-06-22T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 144.0}, {\\\"day\\\": \\\"2019-06-23T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 147.0}, {\\\"day\\\": \\\"2019-06-24T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 148.0}, {\\\"day\\\": \\\"2019-06-25T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 151.0}, {\\\"day\\\": \\\"2019-06-26T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 147.0}, {\\\"day\\\": \\\"2019-06-27T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 145.0}, {\\\"day\\\": \\\"2019-06-28T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 145.0}, {\\\"day\\\": \\\"2019-06-29T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 143.0}, {\\\"day\\\": \\\"2019-06-30T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 141.0}, {\\\"day\\\": \\\"2019-07-01T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 141.0}, {\\\"day\\\": \\\"2019-07-02T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 140.0}, {\\\"day\\\": \\\"2019-07-03T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 132.0}, {\\\"day\\\": \\\"2019-07-04T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 125.0}, {\\\"day\\\": \\\"2019-07-08T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 116.0}, {\\\"day\\\": \\\"2019-07-09T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 114.0}, {\\\"day\\\": \\\"2019-07-10T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 117.0}, {\\\"day\\\": \\\"2019-07-11T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 121.0}, {\\\"day\\\": \\\"2019-07-12T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 122.0}, {\\\"day\\\": \\\"2019-07-13T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 126.0}, {\\\"day\\\": \\\"2019-07-15T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 128.0}, {\\\"day\\\": \\\"2019-07-16T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 134.0}, {\\\"day\\\": \\\"2019-07-17T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 134.0}, {\\\"day\\\": \\\"2019-07-18T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 132.0}, {\\\"day\\\": \\\"2019-07-19T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 130.0}, {\\\"day\\\": \\\"2019-07-20T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 132.0}, {\\\"day\\\": \\\"2019-07-22T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 131.0}, {\\\"day\\\": \\\"2019-07-23T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 134.0}, {\\\"day\\\": \\\"2019-07-24T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 136.0}, {\\\"day\\\": \\\"2019-07-25T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 137.0}, {\\\"day\\\": \\\"2019-07-26T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 141.0}, {\\\"day\\\": \\\"2019-07-27T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 144.0}, {\\\"day\\\": \\\"2019-07-28T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 146.0}, {\\\"day\\\": \\\"2019-07-29T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 143.0}, {\\\"day\\\": \\\"2019-07-30T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 144.0}, {\\\"day\\\": \\\"2019-07-31T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 146.0}, {\\\"day\\\": \\\"2019-08-01T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 151.0}, {\\\"day\\\": \\\"2019-08-02T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 159.0}, {\\\"day\\\": \\\"2019-08-03T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 160.0}, {\\\"day\\\": \\\"2019-08-05T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 165.0}, {\\\"day\\\": \\\"2019-08-06T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 169.0}, {\\\"day\\\": \\\"2019-08-07T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 167.0}, {\\\"day\\\": \\\"2019-08-08T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 167.0}, {\\\"day\\\": \\\"2019-08-09T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 169.0}, {\\\"day\\\": \\\"2019-08-10T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 169.0}, {\\\"day\\\": \\\"2019-08-11T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 171.0}, {\\\"day\\\": \\\"2019-08-12T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 171.0}, {\\\"day\\\": \\\"2019-08-13T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 161.0}, {\\\"day\\\": \\\"2019-08-14T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 163.0}, {\\\"day\\\": \\\"2019-08-15T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 170.0}, {\\\"day\\\": \\\"2019-08-16T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 183.0}, {\\\"day\\\": \\\"2019-08-17T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 183.0}, {\\\"day\\\": \\\"2019-08-18T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 185.0}, {\\\"day\\\": \\\"2019-08-19T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 188.0}, {\\\"day\\\": \\\"2019-08-20T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 186.0}, {\\\"day\\\": \\\"2019-08-21T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 195.0}, {\\\"day\\\": \\\"2019-08-22T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 200.0}, {\\\"day\\\": \\\"2019-08-23T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 199.0}, {\\\"day\\\": \\\"2019-08-24T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 201.0}, {\\\"day\\\": \\\"2019-08-25T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 202.0}, {\\\"day\\\": \\\"2019-08-26T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 198.0}, {\\\"day\\\": \\\"2019-08-27T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 190.0}, {\\\"day\\\": \\\"2019-08-28T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 188.0}, {\\\"day\\\": \\\"2019-08-29T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 189.0}, {\\\"day\\\": \\\"2019-08-30T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 189.0}, {\\\"day\\\": \\\"2019-09-01T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 188.0}, {\\\"day\\\": \\\"2019-09-02T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 180.0}, {\\\"day\\\": \\\"2019-09-03T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 180.0}, {\\\"day\\\": \\\"2019-09-04T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 180.0}, {\\\"day\\\": \\\"2019-09-05T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 178.0}, {\\\"day\\\": \\\"2019-09-06T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 174.0}, {\\\"day\\\": \\\"2019-09-07T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 171.0}, {\\\"day\\\": \\\"2019-09-08T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 174.0}, {\\\"day\\\": \\\"2019-09-09T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 176.0}, {\\\"day\\\": \\\"2019-09-10T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 173.0}, {\\\"day\\\": \\\"2019-09-11T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 169.0}, {\\\"day\\\": \\\"2019-09-12T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 160.0}, {\\\"day\\\": \\\"2019-09-13T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 152.0}, {\\\"day\\\": \\\"2019-09-14T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 150.0}, {\\\"day\\\": \\\"2019-09-15T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 155.0}, {\\\"day\\\": \\\"2019-09-16T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 154.0}, {\\\"day\\\": \\\"2019-09-17T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 161.0}, {\\\"day\\\": \\\"2019-09-18T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 158.0}, {\\\"day\\\": \\\"2019-09-19T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 152.0}, {\\\"day\\\": \\\"2019-09-20T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 143.0}, {\\\"day\\\": \\\"2019-09-21T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 145.0}, {\\\"day\\\": \\\"2019-09-22T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 143.0}, {\\\"day\\\": \\\"2019-09-23T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 158.0}, {\\\"day\\\": \\\"2019-09-24T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 165.0}, {\\\"day\\\": \\\"2019-09-25T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 165.0}, {\\\"day\\\": \\\"2019-09-26T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 163.0}, {\\\"day\\\": \\\"2019-09-27T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 171.0}, {\\\"day\\\": \\\"2019-09-28T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 175.0}, {\\\"day\\\": \\\"2019-09-29T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 179.0}, {\\\"day\\\": \\\"2019-09-30T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 184.0}, {\\\"day\\\": \\\"2019-10-01T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 185.0}, {\\\"day\\\": \\\"2019-10-02T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 186.0}, {\\\"day\\\": \\\"2019-10-03T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 187.0}, {\\\"day\\\": \\\"2019-10-04T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 185.0}, {\\\"day\\\": \\\"2019-10-05T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 186.0}, {\\\"day\\\": \\\"2019-10-06T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 181.0}, {\\\"day\\\": \\\"2019-10-07T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 179.0}, {\\\"day\\\": \\\"2019-10-08T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 183.0}, {\\\"day\\\": \\\"2019-10-09T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 186.0}, {\\\"day\\\": \\\"2019-10-10T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 192.0}, {\\\"day\\\": \\\"2019-10-11T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 192.0}, {\\\"day\\\": \\\"2019-10-12T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 196.0}, {\\\"day\\\": \\\"2019-10-13T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 190.0}, {\\\"day\\\": \\\"2019-10-14T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 191.0}, {\\\"day\\\": \\\"2019-10-15T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 188.0}, {\\\"day\\\": \\\"2019-10-16T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 188.0}, {\\\"day\\\": \\\"2019-10-17T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 192.0}, {\\\"day\\\": \\\"2019-10-18T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 201.0}, {\\\"day\\\": \\\"2019-10-19T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 195.0}, {\\\"day\\\": \\\"2019-10-20T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 195.0}, {\\\"day\\\": \\\"2019-10-21T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 185.0}, {\\\"day\\\": \\\"2019-10-22T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 186.0}, {\\\"day\\\": \\\"2019-10-23T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 186.0}, {\\\"day\\\": \\\"2019-10-24T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 202.0}, {\\\"day\\\": \\\"2019-10-25T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 197.0}, {\\\"day\\\": \\\"2019-10-26T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 194.0}, {\\\"day\\\": \\\"2019-10-27T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 191.0}, {\\\"day\\\": \\\"2019-10-28T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 188.0}, {\\\"day\\\": \\\"2019-10-29T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 183.0}, {\\\"day\\\": \\\"2019-10-30T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 185.0}, {\\\"day\\\": \\\"2019-10-31T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 184.0}, {\\\"day\\\": \\\"2019-11-01T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 195.0}, {\\\"day\\\": \\\"2019-11-02T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 198.0}, {\\\"day\\\": \\\"2019-11-04T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 202.0}, {\\\"day\\\": \\\"2019-11-05T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 204.0}, {\\\"day\\\": \\\"2019-11-06T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 207.0}, {\\\"day\\\": \\\"2019-11-07T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 207.0}, {\\\"day\\\": \\\"2019-11-08T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 209.0}, {\\\"day\\\": \\\"2019-11-09T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 205.0}, {\\\"day\\\": \\\"2019-11-11T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 201.0}, {\\\"day\\\": \\\"2019-11-12T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 191.0}, {\\\"day\\\": \\\"2019-11-13T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 180.0}, {\\\"day\\\": \\\"2019-11-14T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 172.0}, {\\\"day\\\": \\\"2019-11-15T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 165.0}, {\\\"day\\\": \\\"2019-11-16T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 164.0}, {\\\"day\\\": \\\"2019-11-18T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 157.0}, {\\\"day\\\": \\\"2019-11-19T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 150.0}, {\\\"day\\\": \\\"2019-11-20T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 144.0}, {\\\"day\\\": \\\"2019-11-21T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 125.0}, {\\\"day\\\": \\\"2019-11-22T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 117.0}, {\\\"day\\\": \\\"2019-11-23T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 118.0}, {\\\"day\\\": \\\"2019-11-24T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 118.0}, {\\\"day\\\": \\\"2019-11-25T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 121.0}, {\\\"day\\\": \\\"2019-11-26T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 138.0}, {\\\"day\\\": \\\"2019-11-27T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 132.0}, {\\\"day\\\": \\\"2019-11-28T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 128.0}, {\\\"day\\\": \\\"2019-11-29T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 113.0}, {\\\"day\\\": \\\"2019-11-30T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 109.0}, {\\\"day\\\": \\\"2019-12-01T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 109.0}, {\\\"day\\\": \\\"2019-12-02T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 102.0}, {\\\"day\\\": \\\"2019-12-03T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 99.0}, {\\\"day\\\": \\\"2019-12-04T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 93.0}, {\\\"day\\\": \\\"2019-12-05T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 91.0}, {\\\"day\\\": \\\"2019-12-06T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 86.0}, {\\\"day\\\": \\\"2019-12-07T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 86.0}, {\\\"day\\\": \\\"2019-12-08T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 87.0}, {\\\"day\\\": \\\"2019-12-09T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 84.0}, {\\\"day\\\": \\\"2019-12-10T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 87.0}, {\\\"day\\\": \\\"2019-12-11T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 95.0}, {\\\"day\\\": \\\"2019-12-12T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 93.0}, {\\\"day\\\": \\\"2019-12-13T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 95.0}, {\\\"day\\\": \\\"2019-12-14T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 94.0}, {\\\"day\\\": \\\"2019-12-15T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 94.0}, {\\\"day\\\": \\\"2019-12-16T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 102.0}, {\\\"day\\\": \\\"2019-12-17T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 109.0}, {\\\"day\\\": \\\"2019-12-18T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 112.0}, {\\\"day\\\": \\\"2019-12-19T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 115.0}, {\\\"day\\\": \\\"2019-12-20T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 116.0}, {\\\"day\\\": \\\"2019-12-21T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 115.0}, {\\\"day\\\": \\\"2019-12-23T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 111.0}, {\\\"day\\\": \\\"2019-12-24T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 91.0}, {\\\"day\\\": \\\"2019-12-25T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 88.0}, {\\\"day\\\": \\\"2019-12-26T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 85.0}, {\\\"day\\\": \\\"2019-12-27T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 87.0}, {\\\"day\\\": \\\"2019-12-28T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 87.0}, {\\\"day\\\": \\\"2019-12-29T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 88.0}, {\\\"day\\\": \\\"2019-12-31T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 81.0}, {\\\"day\\\": \\\"2020-01-02T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 72.0}, {\\\"day\\\": \\\"2020-01-03T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 69.0}, {\\\"day\\\": \\\"2020-01-04T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 73.0}, {\\\"day\\\": \\\"2020-01-06T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 81.0}, {\\\"day\\\": \\\"2020-01-07T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 80.0}, {\\\"day\\\": \\\"2020-01-08T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 79.0}, {\\\"day\\\": \\\"2020-01-09T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 81.0}, {\\\"day\\\": \\\"2020-01-10T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 79.0}, {\\\"day\\\": \\\"2020-01-12T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 80.0}, {\\\"day\\\": \\\"2020-01-13T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 77.0}, {\\\"day\\\": \\\"2020-01-14T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 70.0}, {\\\"day\\\": \\\"2020-01-15T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 71.0}, {\\\"day\\\": \\\"2020-01-16T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 71.0}, {\\\"day\\\": \\\"2020-01-17T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 76.0}, {\\\"day\\\": \\\"2020-01-18T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 76.0}, {\\\"day\\\": \\\"2020-01-19T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 77.0}, {\\\"day\\\": \\\"2020-01-20T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 78.0}, {\\\"day\\\": \\\"2020-01-21T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 82.0}, {\\\"day\\\": \\\"2020-01-22T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 87.0}, {\\\"day\\\": \\\"2020-01-23T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 93.0}, {\\\"day\\\": \\\"2020-01-24T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 100.0}, {\\\"day\\\": \\\"2020-01-25T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 103.0}, {\\\"day\\\": \\\"2020-01-26T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 104.0}, {\\\"day\\\": \\\"2020-01-27T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 106.0}, {\\\"day\\\": \\\"2020-01-28T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 110.0}, {\\\"day\\\": \\\"2020-01-29T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 123.0}, {\\\"day\\\": \\\"2020-01-30T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 131.0}, {\\\"day\\\": \\\"2020-01-31T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 145.0}, {\\\"day\\\": \\\"2020-02-01T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 145.0}, {\\\"day\\\": \\\"2020-02-02T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 154.0}, {\\\"day\\\": \\\"2020-02-03T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 151.0}, {\\\"day\\\": \\\"2020-02-04T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 161.0}, {\\\"day\\\": \\\"2020-02-05T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 164.0}, {\\\"day\\\": \\\"2020-02-06T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 165.0}, {\\\"day\\\": \\\"2020-02-07T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 162.0}, {\\\"day\\\": \\\"2020-02-08T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 163.0}, {\\\"day\\\": \\\"2020-02-09T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 162.0}, {\\\"day\\\": \\\"2020-02-10T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 168.0}, {\\\"day\\\": \\\"2020-02-11T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 173.0}, {\\\"day\\\": \\\"2020-02-12T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 171.0}, {\\\"day\\\": \\\"2020-02-13T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 172.0}, {\\\"day\\\": \\\"2020-02-14T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 167.0}, {\\\"day\\\": \\\"2020-02-15T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 167.0}, {\\\"day\\\": \\\"2020-02-16T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 168.0}, {\\\"day\\\": \\\"2020-02-17T00:00:00\\\", \\\"company\\\": \\\"google\\\", \\\"value\\\": 166.0}, {\\\"day\\\": \\\"2019-03-01T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 7.0}, {\\\"day\\\": \\\"2019-03-02T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-03-03T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-03-04T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 11.0}, {\\\"day\\\": \\\"2019-03-05T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2019-03-06T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 16.0}, {\\\"day\\\": \\\"2019-03-07T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 18.0}, {\\\"day\\\": \\\"2019-03-08T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 19.0}, {\\\"day\\\": \\\"2019-03-09T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 19.0}, {\\\"day\\\": \\\"2019-03-10T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 19.0}, {\\\"day\\\": \\\"2019-03-11T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 20.0}, {\\\"day\\\": \\\"2019-03-12T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 25.0}, {\\\"day\\\": \\\"2019-03-13T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 26.0}, {\\\"day\\\": \\\"2019-03-14T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 26.0}, {\\\"day\\\": \\\"2019-03-15T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-03-16T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-03-18T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-03-19T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 30.0}, {\\\"day\\\": \\\"2019-03-20T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-03-21T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-03-22T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-03-23T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 32.0}, {\\\"day\\\": \\\"2019-03-24T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 32.0}, {\\\"day\\\": \\\"2019-03-25T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 32.0}, {\\\"day\\\": \\\"2019-03-26T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 36.0}, {\\\"day\\\": \\\"2019-03-27T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 38.0}, {\\\"day\\\": \\\"2019-03-28T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 40.0}, {\\\"day\\\": \\\"2019-03-29T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 34.0}, {\\\"day\\\": \\\"2019-03-30T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 34.0}, {\\\"day\\\": \\\"2019-03-31T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 32.0}, {\\\"day\\\": \\\"2019-04-01T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-04-02T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 32.0}, {\\\"day\\\": \\\"2019-04-03T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-04-04T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-04-05T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-04-06T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-04-07T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-04-08T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 27.0}, {\\\"day\\\": \\\"2019-04-09T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 23.0}, {\\\"day\\\": \\\"2019-04-10T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 30.0}, {\\\"day\\\": \\\"2019-04-11T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 30.0}, {\\\"day\\\": \\\"2019-04-12T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-04-13T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-04-14T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-04-15T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 30.0}, {\\\"day\\\": \\\"2019-04-16T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-04-17T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-04-18T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-04-19T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 32.0}, {\\\"day\\\": \\\"2019-04-20T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-04-21T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-04-22T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-04-23T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 27.0}, {\\\"day\\\": \\\"2019-04-24T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 26.0}, {\\\"day\\\": \\\"2019-04-25T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 24.0}, {\\\"day\\\": \\\"2019-04-26T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 24.0}, {\\\"day\\\": \\\"2019-04-28T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 23.0}, {\\\"day\\\": \\\"2019-04-29T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 24.0}, {\\\"day\\\": \\\"2019-04-30T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 22.0}, {\\\"day\\\": \\\"2019-05-01T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 20.0}, {\\\"day\\\": \\\"2019-05-02T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 21.0}, {\\\"day\\\": \\\"2019-05-03T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 23.0}, {\\\"day\\\": \\\"2019-05-04T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 24.0}, {\\\"day\\\": \\\"2019-05-05T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 24.0}, {\\\"day\\\": \\\"2019-05-06T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 25.0}, {\\\"day\\\": \\\"2019-05-07T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 24.0}, {\\\"day\\\": \\\"2019-05-08T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 16.0}, {\\\"day\\\": \\\"2019-05-09T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 19.0}, {\\\"day\\\": \\\"2019-05-10T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 19.0}, {\\\"day\\\": \\\"2019-05-11T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 19.0}, {\\\"day\\\": \\\"2019-05-13T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 19.0}, {\\\"day\\\": \\\"2019-05-14T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 21.0}, {\\\"day\\\": \\\"2019-05-15T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 24.0}, {\\\"day\\\": \\\"2019-05-16T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 25.0}, {\\\"day\\\": \\\"2019-05-17T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 26.0}, {\\\"day\\\": \\\"2019-05-18T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-05-19T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-05-20T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 33.0}, {\\\"day\\\": \\\"2019-05-21T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 37.0}, {\\\"day\\\": \\\"2019-05-22T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 37.0}, {\\\"day\\\": \\\"2019-05-23T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 38.0}, {\\\"day\\\": \\\"2019-05-24T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 38.0}, {\\\"day\\\": \\\"2019-05-25T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 39.0}, {\\\"day\\\": \\\"2019-05-27T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 38.0}, {\\\"day\\\": \\\"2019-05-28T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 41.0}, {\\\"day\\\": \\\"2019-05-29T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 42.0}, {\\\"day\\\": \\\"2019-05-30T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 41.0}, {\\\"day\\\": \\\"2019-05-31T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 45.0}, {\\\"day\\\": \\\"2019-06-01T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 44.0}, {\\\"day\\\": \\\"2019-06-02T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 46.0}, {\\\"day\\\": \\\"2019-06-03T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 50.0}, {\\\"day\\\": \\\"2019-06-04T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 55.0}, {\\\"day\\\": \\\"2019-06-05T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 56.0}, {\\\"day\\\": \\\"2019-06-06T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 57.0}, {\\\"day\\\": \\\"2019-06-07T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 58.0}, {\\\"day\\\": \\\"2019-06-09T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 58.0}, {\\\"day\\\": \\\"2019-06-10T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 58.0}, {\\\"day\\\": \\\"2019-06-11T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 61.0}, {\\\"day\\\": \\\"2019-06-12T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 59.0}, {\\\"day\\\": \\\"2019-06-13T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 57.0}, {\\\"day\\\": \\\"2019-06-14T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 58.0}, {\\\"day\\\": \\\"2019-06-16T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 57.0}, {\\\"day\\\": \\\"2019-06-17T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 55.0}, {\\\"day\\\": \\\"2019-06-18T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 53.0}, {\\\"day\\\": \\\"2019-06-19T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 54.0}, {\\\"day\\\": \\\"2019-06-20T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 57.0}, {\\\"day\\\": \\\"2019-06-21T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 56.0}, {\\\"day\\\": \\\"2019-06-22T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 55.0}, {\\\"day\\\": \\\"2019-06-23T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 55.0}, {\\\"day\\\": \\\"2019-06-24T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 55.0}, {\\\"day\\\": \\\"2019-06-25T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 51.0}, {\\\"day\\\": \\\"2019-06-26T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 50.0}, {\\\"day\\\": \\\"2019-06-27T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 55.0}, {\\\"day\\\": \\\"2019-06-28T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 51.0}, {\\\"day\\\": \\\"2019-06-29T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 51.0}, {\\\"day\\\": \\\"2019-06-30T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 49.0}, {\\\"day\\\": \\\"2019-07-01T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 45.0}, {\\\"day\\\": \\\"2019-07-02T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 40.0}, {\\\"day\\\": \\\"2019-07-03T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 40.0}, {\\\"day\\\": \\\"2019-07-04T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 37.0}, {\\\"day\\\": \\\"2019-07-08T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 33.0}, {\\\"day\\\": \\\"2019-07-09T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-07-10T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 27.0}, {\\\"day\\\": \\\"2019-07-11T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 30.0}, {\\\"day\\\": \\\"2019-07-12T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 26.0}, {\\\"day\\\": \\\"2019-07-13T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-07-15T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 25.0}, {\\\"day\\\": \\\"2019-07-16T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 24.0}, {\\\"day\\\": \\\"2019-07-17T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 24.0}, {\\\"day\\\": \\\"2019-07-18T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 21.0}, {\\\"day\\\": \\\"2019-07-19T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 22.0}, {\\\"day\\\": \\\"2019-07-20T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 22.0}, {\\\"day\\\": \\\"2019-07-22T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 22.0}, {\\\"day\\\": \\\"2019-07-23T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 22.0}, {\\\"day\\\": \\\"2019-07-24T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 22.0}, {\\\"day\\\": \\\"2019-07-25T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 17.0}, {\\\"day\\\": \\\"2019-07-26T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 16.0}, {\\\"day\\\": \\\"2019-07-27T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 16.0}, {\\\"day\\\": \\\"2019-07-28T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 16.0}, {\\\"day\\\": \\\"2019-07-29T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-07-30T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-07-31T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-08-01T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-08-02T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-08-03T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-08-05T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-08-06T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 17.0}, {\\\"day\\\": \\\"2019-08-07T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 20.0}, {\\\"day\\\": \\\"2019-08-08T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 17.0}, {\\\"day\\\": \\\"2019-08-09T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 17.0}, {\\\"day\\\": \\\"2019-08-10T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 16.0}, {\\\"day\\\": \\\"2019-08-11T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 18.0}, {\\\"day\\\": \\\"2019-08-12T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 18.0}, {\\\"day\\\": \\\"2019-08-13T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 17.0}, {\\\"day\\\": \\\"2019-08-14T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-08-15T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2019-08-16T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-08-17T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-08-18T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-08-19T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-08-20T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 19.0}, {\\\"day\\\": \\\"2019-08-21T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 20.0}, {\\\"day\\\": \\\"2019-08-22T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 22.0}, {\\\"day\\\": \\\"2019-08-23T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 22.0}, {\\\"day\\\": \\\"2019-08-24T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 23.0}, {\\\"day\\\": \\\"2019-08-25T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 23.0}, {\\\"day\\\": \\\"2019-08-26T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 24.0}, {\\\"day\\\": \\\"2019-08-27T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 25.0}, {\\\"day\\\": \\\"2019-08-28T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 24.0}, {\\\"day\\\": \\\"2019-08-29T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 23.0}, {\\\"day\\\": \\\"2019-08-30T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 26.0}, {\\\"day\\\": \\\"2019-09-01T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 26.0}, {\\\"day\\\": \\\"2019-09-02T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-09-03T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 30.0}, {\\\"day\\\": \\\"2019-09-04T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-09-05T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-09-06T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 30.0}, {\\\"day\\\": \\\"2019-09-07T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-09-08T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 27.0}, {\\\"day\\\": \\\"2019-09-09T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 26.0}, {\\\"day\\\": \\\"2019-09-10T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-09-11T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-09-12T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 32.0}, {\\\"day\\\": \\\"2019-09-13T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 30.0}, {\\\"day\\\": \\\"2019-09-14T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 30.0}, {\\\"day\\\": \\\"2019-09-15T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 30.0}, {\\\"day\\\": \\\"2019-09-16T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-09-17T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-09-18T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 30.0}, {\\\"day\\\": \\\"2019-09-19T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-09-20T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-09-21T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 32.0}, {\\\"day\\\": \\\"2019-09-22T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 35.0}, {\\\"day\\\": \\\"2019-09-23T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 37.0}, {\\\"day\\\": \\\"2019-09-24T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 37.0}, {\\\"day\\\": \\\"2019-09-25T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 38.0}, {\\\"day\\\": \\\"2019-09-26T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 41.0}, {\\\"day\\\": \\\"2019-09-27T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 40.0}, {\\\"day\\\": \\\"2019-09-28T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 43.0}, {\\\"day\\\": \\\"2019-09-29T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 46.0}, {\\\"day\\\": \\\"2019-09-30T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 44.0}, {\\\"day\\\": \\\"2019-10-01T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 40.0}, {\\\"day\\\": \\\"2019-10-02T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 37.0}, {\\\"day\\\": \\\"2019-10-03T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 38.0}, {\\\"day\\\": \\\"2019-10-04T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 44.0}, {\\\"day\\\": \\\"2019-10-05T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 45.0}, {\\\"day\\\": \\\"2019-10-06T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 47.0}, {\\\"day\\\": \\\"2019-10-07T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 49.0}, {\\\"day\\\": \\\"2019-10-08T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 49.0}, {\\\"day\\\": \\\"2019-10-09T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 53.0}, {\\\"day\\\": \\\"2019-10-10T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 54.0}, {\\\"day\\\": \\\"2019-10-11T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 57.0}, {\\\"day\\\": \\\"2019-10-12T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 57.0}, {\\\"day\\\": \\\"2019-10-13T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 57.0}, {\\\"day\\\": \\\"2019-10-14T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 57.0}, {\\\"day\\\": \\\"2019-10-15T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 58.0}, {\\\"day\\\": \\\"2019-10-16T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 60.0}, {\\\"day\\\": \\\"2019-10-17T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 60.0}, {\\\"day\\\": \\\"2019-10-18T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 59.0}, {\\\"day\\\": \\\"2019-10-19T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 58.0}, {\\\"day\\\": \\\"2019-10-20T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 55.0}, {\\\"day\\\": \\\"2019-10-21T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 54.0}, {\\\"day\\\": \\\"2019-10-22T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 53.0}, {\\\"day\\\": \\\"2019-10-23T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 57.0}, {\\\"day\\\": \\\"2019-10-24T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 54.0}, {\\\"day\\\": \\\"2019-10-25T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 53.0}, {\\\"day\\\": \\\"2019-10-26T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 52.0}, {\\\"day\\\": \\\"2019-10-27T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 49.0}, {\\\"day\\\": \\\"2019-10-28T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 50.0}, {\\\"day\\\": \\\"2019-10-29T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 50.0}, {\\\"day\\\": \\\"2019-10-30T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 49.0}, {\\\"day\\\": \\\"2019-10-31T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 48.0}, {\\\"day\\\": \\\"2019-11-01T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 43.0}, {\\\"day\\\": \\\"2019-11-02T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 43.0}, {\\\"day\\\": \\\"2019-11-04T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 39.0}, {\\\"day\\\": \\\"2019-11-05T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 34.0}, {\\\"day\\\": \\\"2019-11-06T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 30.0}, {\\\"day\\\": \\\"2019-11-07T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-11-08T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 25.0}, {\\\"day\\\": \\\"2019-11-09T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 25.0}, {\\\"day\\\": \\\"2019-11-11T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 24.0}, {\\\"day\\\": \\\"2019-11-12T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 22.0}, {\\\"day\\\": \\\"2019-11-13T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 19.0}, {\\\"day\\\": \\\"2019-11-14T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 18.0}, {\\\"day\\\": \\\"2019-11-15T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 18.0}, {\\\"day\\\": \\\"2019-11-16T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 17.0}, {\\\"day\\\": \\\"2019-11-18T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-11-19T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-11-20T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-11-21T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 11.0}, {\\\"day\\\": \\\"2019-11-22T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-11-23T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2019-11-24T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2019-11-25T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-11-26T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-11-27T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-11-28T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2019-11-29T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-11-30T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 7.0}, {\\\"day\\\": \\\"2019-12-01T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 7.0}, {\\\"day\\\": \\\"2019-12-02T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2019-12-03T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2019-12-04T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-12-05T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-12-06T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2019-12-07T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2019-12-08T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2019-12-09T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2019-12-10T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2019-12-11T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2019-12-12T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-12-13T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2019-12-14T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2019-12-15T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2019-12-16T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-12-17T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-12-18T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-12-19T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2019-12-20T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-12-21T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2019-12-23T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2019-12-24T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2019-12-25T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2019-12-26T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2019-12-27T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2019-12-28T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2019-12-29T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2019-12-31T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 11.0}, {\\\"day\\\": \\\"2020-01-02T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2020-01-03T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2020-01-04T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2020-01-06T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2020-01-07T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2020-01-08T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2020-01-09T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2020-01-10T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2020-01-12T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2020-01-13T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2020-01-14T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2020-01-15T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2020-01-16T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2020-01-17T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2020-01-18T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2020-01-19T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2020-01-20T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 11.0}, {\\\"day\\\": \\\"2020-01-21T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 11.0}, {\\\"day\\\": \\\"2020-01-22T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 11.0}, {\\\"day\\\": \\\"2020-01-23T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2020-01-24T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2020-01-25T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2020-01-26T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2020-01-27T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2020-01-28T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2020-01-29T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2020-01-30T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2020-01-31T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2020-02-01T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2020-02-02T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2020-02-03T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 11.0}, {\\\"day\\\": \\\"2020-02-04T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2020-02-05T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2020-02-06T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2020-02-07T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2020-02-08T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2020-02-09T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2020-02-10T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2020-02-11T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2020-02-12T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2020-02-13T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2020-02-14T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 17.0}, {\\\"day\\\": \\\"2020-02-15T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 18.0}, {\\\"day\\\": \\\"2020-02-16T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 18.0}, {\\\"day\\\": \\\"2020-02-17T00:00:00\\\", \\\"company\\\": \\\"cisco\\\", \\\"value\\\": 17.0}, {\\\"day\\\": \\\"2019-03-01T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-02T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-03T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-04T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-05T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-06T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-07T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-08T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-09T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-10T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-11T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-12T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-13T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-14T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-15T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-16T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-18T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-19T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-20T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-21T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-22T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-23T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-24T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-25T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-26T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-27T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-28T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-29T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-30T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-31T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-04-01T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-04-02T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-04-03T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-04-04T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-04-05T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-04-06T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-04-07T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-04-08T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-09T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-10T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-11T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-12T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-13T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-14T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-15T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-16T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-17T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-18T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-19T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-20T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-21T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-22T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-23T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-24T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-25T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-26T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-28T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-29T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-04-30T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-01T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-02T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-03T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-04T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-05T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-06T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-07T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-05-08T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-05-09T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-05-10T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-05-11T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-05-13T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-05-14T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-05-15T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-05-16T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-05-17T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-05-18T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-05-19T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-05-20T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-05-21T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-05-22T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-05-23T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-05-24T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-05-25T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-05-27T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-05-28T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-05-29T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-05-30T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-05-31T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-06-01T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-06-02T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-06-03T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-06-04T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-06-05T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-06-06T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-06-07T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-06-09T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-06-10T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-06-11T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-06-12T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-06-13T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-06-14T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-06-16T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-06-17T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-06-18T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-06-19T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-06-20T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-06-21T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-06-22T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-06-23T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-06-24T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-06-25T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-06-26T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-06-27T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-06-28T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-06-29T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-06-30T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-07-01T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-07-02T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-07-03T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-07-04T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-07-08T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 7.0}, {\\\"day\\\": \\\"2019-07-09T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-07-10T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 7.0}, {\\\"day\\\": \\\"2019-07-11T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 7.0}, {\\\"day\\\": \\\"2019-07-12T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-07-13T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-07-15T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-07-16T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-07-17T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-07-18T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2019-07-19T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 11.0}, {\\\"day\\\": \\\"2019-07-20T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 11.0}, {\\\"day\\\": \\\"2019-07-22T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 11.0}, {\\\"day\\\": \\\"2019-07-23T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 11.0}, {\\\"day\\\": \\\"2019-07-24T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 11.0}, {\\\"day\\\": \\\"2019-07-25T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 11.0}, {\\\"day\\\": \\\"2019-07-26T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-07-27T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-07-28T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-07-29T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 7.0}, {\\\"day\\\": \\\"2019-07-30T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-07-31T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-08-01T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-08-02T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-08-03T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-08-05T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-08-06T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-08-07T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-08-08T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-08-09T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-10T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-11T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-12T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-13T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-14T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-15T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-08-16T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-17T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-18T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-19T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-08-20T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-08-21T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-08-22T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-08-23T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-08-24T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-25T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-26T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-27T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-28T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-29T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-30T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-09-01T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-09-02T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-09-03T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-09-04T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-09-05T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-09-06T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-09-07T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-09-08T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-09-09T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 7.0}, {\\\"day\\\": \\\"2019-09-10T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 7.0}, {\\\"day\\\": \\\"2019-09-11T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-09-12T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-09-13T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-09-14T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-09-15T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-09-16T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 7.0}, {\\\"day\\\": \\\"2019-09-17T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 7.0}, {\\\"day\\\": \\\"2019-09-18T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-09-19T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-09-20T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-09-21T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-09-22T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-09-23T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-09-24T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-09-25T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-09-26T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-09-27T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-09-28T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-09-29T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-09-30T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-10-01T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2019-10-02T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2019-10-03T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2019-10-04T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-10-05T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 7.0}, {\\\"day\\\": \\\"2019-10-06T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 7.0}, {\\\"day\\\": \\\"2019-10-07T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-10-08T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-10-09T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-10-10T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-10-11T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-10-12T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-10-13T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-10-14T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-10-15T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-10-16T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-10-17T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-10-18T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-10-19T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 7.0}, {\\\"day\\\": \\\"2019-10-20T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 7.0}, {\\\"day\\\": \\\"2019-10-21T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2019-10-22T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-10-23T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-10-24T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2019-10-25T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 7.0}, {\\\"day\\\": \\\"2019-10-26T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 7.0}, {\\\"day\\\": \\\"2019-10-27T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 7.0}, {\\\"day\\\": \\\"2019-10-28T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 7.0}, {\\\"day\\\": \\\"2019-10-29T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-10-30T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-10-31T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-11-01T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-11-02T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 7.0}, {\\\"day\\\": \\\"2019-11-04T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-11-05T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-11-06T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-11-07T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-11-08T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-11-09T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-11-11T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-11-12T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-11-13T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-11-14T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-11-15T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-11-16T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-11-18T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-11-19T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-11-20T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-11-21T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-11-22T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-11-23T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-11-24T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-11-25T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-11-26T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-11-27T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-11-28T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-11-29T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-11-30T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-01T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-02T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-03T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-04T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-05T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-06T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-07T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-08T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-09T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-10T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-11T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-12T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-13T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-14T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-15T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-16T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-17T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-18T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-19T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-20T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-21T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-23T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-24T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-25T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-26T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-27T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-28T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-29T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-31T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-02T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-03T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-04T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-06T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-07T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-08T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-09T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-10T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-12T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-13T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-14T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-15T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-16T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-17T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-18T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-19T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-20T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-21T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-22T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-23T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-24T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-25T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-26T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-27T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-28T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-29T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-30T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-31T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-01T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-02T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-03T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-04T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-05T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-06T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-07T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-08T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-09T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-10T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-11T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-12T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-13T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-14T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-15T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-16T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-17T00:00:00\\\", \\\"company\\\": \\\"microsoft\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-01T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-03-02T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-03-03T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-03-04T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-03-05T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-03-06T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-07T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-03-08T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-03-09T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-03-10T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-03-11T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-03-12T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-03-13T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-03-14T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-03-15T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-03-16T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-03-18T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-03-19T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-03-20T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-03-21T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-03-22T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-03-23T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-03-24T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-03-25T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-03-26T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-03-27T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-03-28T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-03-29T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-03-30T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-03-31T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-04-01T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-04-02T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-04-03T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-04-04T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-04-05T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-04-06T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-04-07T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-04-08T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-04-09T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-04-10T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-04-11T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-04-12T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-04-13T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-04-14T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-04-15T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-04-16T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-04-17T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-04-18T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-04-19T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-04-20T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-04-21T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-04-22T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-04-23T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-04-24T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-04-25T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-04-26T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-04-28T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-04-29T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-04-30T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-01T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-02T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-03T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-05-04T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-05-05T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-05-06T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-05-07T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-05-08T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-05-09T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-05-10T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-05-11T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-05-13T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-14T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-15T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-16T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-17T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-18T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-19T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-20T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-21T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-22T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-23T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-24T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-25T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-27T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-28T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-29T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-30T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-05-31T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-01T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-02T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-03T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-04T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-05T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-06T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-07T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-09T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-10T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-11T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-06-12T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-06-13T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-06-14T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-06-16T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-06-17T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-06-18T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-06-19T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-06-20T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-06-21T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-06-22T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-06-23T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-06-24T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-06-25T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-06-26T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-06-27T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-06-28T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-06-29T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-06-30T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-07-01T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-07-02T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-07-03T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-07-04T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-07-08T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-07-09T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-07-10T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-07-11T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-07-12T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-07-13T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-07-15T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-07-16T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-07-17T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 6.0}, {\\\"day\\\": \\\"2019-07-18T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-07-19T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-07-20T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-07-22T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-07-23T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-07-24T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-07-25T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-07-26T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-07-27T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-07-28T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-07-29T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-07-30T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-07-31T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-08-01T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-08-02T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-08-03T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-08-05T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-08-06T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-08-07T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-08T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-08-09T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-08-10T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-08-11T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-08-12T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-13T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-14T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-15T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-16T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-17T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-18T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-19T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-20T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-21T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-22T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-23T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-24T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-25T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-26T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-27T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-28T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-29T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-08-30T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-09-01T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-09-02T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-09-03T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-09-04T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-09-05T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-09-06T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-09-07T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-09-08T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-09-09T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-10T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-11T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-12T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-13T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-14T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-15T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-16T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-17T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-18T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-19T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-20T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-21T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-22T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-23T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-24T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-25T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-26T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-27T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-28T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-29T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-30T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-01T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-02T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-03T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-04T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-05T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-06T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-07T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-08T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-09T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-10T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-11T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-12T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-13T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-14T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-15T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-16T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-17T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-18T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-19T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-20T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-21T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-22T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-23T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-24T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-25T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-26T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-27T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-28T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-29T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-30T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-31T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-01T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-02T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-04T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-05T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-06T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-07T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-08T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-09T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-11T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-12T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-13T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-14T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-15T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-16T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-18T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-19T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-20T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-21T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-22T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-23T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-24T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-25T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-26T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-27T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-28T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-29T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-30T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-01T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-02T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-03T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-04T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-05T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-12-06T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-12-07T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-12-08T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-12-09T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-12-10T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-12-11T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-12-12T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-12-13T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-12-14T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-12-15T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-12-16T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-12-17T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-12-18T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-12-19T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-12-20T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-12-21T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-12-23T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-12-24T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-12-25T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-12-26T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-12-27T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-12-28T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-12-29T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-12-31T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2020-01-02T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2020-01-03T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2020-01-04T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2020-01-06T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2020-01-07T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2020-01-08T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2020-01-09T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2020-01-10T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2020-01-12T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2020-01-13T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2020-01-14T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2020-01-15T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2020-01-16T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2020-01-17T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2020-01-18T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2020-01-19T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2020-01-20T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2020-01-21T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2020-01-22T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2020-01-23T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2020-01-24T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2020-01-25T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2020-01-26T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2020-01-27T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2020-01-28T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2020-01-29T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2020-01-30T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2020-01-31T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2020-02-01T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2020-02-02T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2020-02-03T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2020-02-04T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2020-02-05T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2020-02-06T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2020-02-07T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2020-02-08T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2020-02-09T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2020-02-10T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2020-02-11T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2020-02-12T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2020-02-13T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2020-02-14T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2020-02-15T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2020-02-16T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2020-02-17T00:00:00\\\", \\\"company\\\": \\\"arrikto\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-01T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-02T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-03T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-04T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 2.0}, {\\\"day\\\": \\\"2019-03-05T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 3.0}, {\\\"day\\\": \\\"2019-03-06T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-03-07T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-03-08T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-03-09T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-03-10T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-03-11T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-03-12T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-03-13T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-03-14T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 4.0}, {\\\"day\\\": \\\"2019-03-15T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-03-16T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 5.0}, {\\\"day\\\": \\\"2019-03-18T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 7.0}, {\\\"day\\\": \\\"2019-03-19T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2019-03-20T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-03-21T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-03-22T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-03-23T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-03-24T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-03-25T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 11.0}, {\\\"day\\\": \\\"2019-03-26T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 11.0}, {\\\"day\\\": \\\"2019-03-27T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 11.0}, {\\\"day\\\": \\\"2019-03-28T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2019-03-29T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-03-30T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-03-31T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-04-01T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-04-02T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-04-03T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-04-04T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-04-05T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-04-06T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-04-07T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2019-04-08T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2019-04-09T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2019-04-10T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-04-11T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 16.0}, {\\\"day\\\": \\\"2019-04-12T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-04-13T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-04-14T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-04-15T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2019-04-16T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 11.0}, {\\\"day\\\": \\\"2019-04-17T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 11.0}, {\\\"day\\\": \\\"2019-04-18T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2019-04-19T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-04-20T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-04-21T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2019-04-22T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 18.0}, {\\\"day\\\": \\\"2019-04-23T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 21.0}, {\\\"day\\\": \\\"2019-04-24T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 23.0}, {\\\"day\\\": \\\"2019-04-25T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 23.0}, {\\\"day\\\": \\\"2019-04-26T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 26.0}, {\\\"day\\\": \\\"2019-04-28T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 27.0}, {\\\"day\\\": \\\"2019-04-29T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-04-30T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-05-01T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-05-02T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-05-03T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-05-04T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-05-05T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 30.0}, {\\\"day\\\": \\\"2019-05-06T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-05-07T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 27.0}, {\\\"day\\\": \\\"2019-05-08T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-05-09T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 30.0}, {\\\"day\\\": \\\"2019-05-10T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 32.0}, {\\\"day\\\": \\\"2019-05-11T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 32.0}, {\\\"day\\\": \\\"2019-05-13T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 39.0}, {\\\"day\\\": \\\"2019-05-14T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 41.0}, {\\\"day\\\": \\\"2019-05-15T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 46.0}, {\\\"day\\\": \\\"2019-05-16T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 49.0}, {\\\"day\\\": \\\"2019-05-17T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 57.0}, {\\\"day\\\": \\\"2019-05-18T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 57.0}, {\\\"day\\\": \\\"2019-05-19T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 57.0}, {\\\"day\\\": \\\"2019-05-20T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 56.0}, {\\\"day\\\": \\\"2019-05-21T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 53.0}, {\\\"day\\\": \\\"2019-05-22T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 54.0}, {\\\"day\\\": \\\"2019-05-23T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 57.0}, {\\\"day\\\": \\\"2019-05-24T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 58.0}, {\\\"day\\\": \\\"2019-05-25T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 58.0}, {\\\"day\\\": \\\"2019-05-27T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 56.0}, {\\\"day\\\": \\\"2019-05-28T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 59.0}, {\\\"day\\\": \\\"2019-05-29T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 64.0}, {\\\"day\\\": \\\"2019-05-30T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 64.0}, {\\\"day\\\": \\\"2019-05-31T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 64.0}, {\\\"day\\\": \\\"2019-06-01T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 64.0}, {\\\"day\\\": \\\"2019-06-02T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 63.0}, {\\\"day\\\": \\\"2019-06-03T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 63.0}, {\\\"day\\\": \\\"2019-06-04T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 67.0}, {\\\"day\\\": \\\"2019-06-05T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 68.0}, {\\\"day\\\": \\\"2019-06-06T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 67.0}, {\\\"day\\\": \\\"2019-06-07T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 65.0}, {\\\"day\\\": \\\"2019-06-09T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 65.0}, {\\\"day\\\": \\\"2019-06-10T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 61.0}, {\\\"day\\\": \\\"2019-06-11T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 60.0}, {\\\"day\\\": \\\"2019-06-12T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 57.0}, {\\\"day\\\": \\\"2019-06-13T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 52.0}, {\\\"day\\\": \\\"2019-06-14T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 43.0}, {\\\"day\\\": \\\"2019-06-16T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 43.0}, {\\\"day\\\": \\\"2019-06-17T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 40.0}, {\\\"day\\\": \\\"2019-06-18T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 41.0}, {\\\"day\\\": \\\"2019-06-19T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 39.0}, {\\\"day\\\": \\\"2019-06-20T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 36.0}, {\\\"day\\\": \\\"2019-06-21T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 34.0}, {\\\"day\\\": \\\"2019-06-22T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 35.0}, {\\\"day\\\": \\\"2019-06-23T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 35.0}, {\\\"day\\\": \\\"2019-06-24T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 36.0}, {\\\"day\\\": \\\"2019-06-25T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 34.0}, {\\\"day\\\": \\\"2019-06-26T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-06-27T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-06-28T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-06-29T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-06-30T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 30.0}, {\\\"day\\\": \\\"2019-07-01T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 30.0}, {\\\"day\\\": \\\"2019-07-02T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-07-03T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 25.0}, {\\\"day\\\": \\\"2019-07-04T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 24.0}, {\\\"day\\\": \\\"2019-07-08T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 23.0}, {\\\"day\\\": \\\"2019-07-09T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 24.0}, {\\\"day\\\": \\\"2019-07-10T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 21.0}, {\\\"day\\\": \\\"2019-07-11T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 23.0}, {\\\"day\\\": \\\"2019-07-12T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 26.0}, {\\\"day\\\": \\\"2019-07-13T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 26.0}, {\\\"day\\\": \\\"2019-07-15T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-07-16T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 30.0}, {\\\"day\\\": \\\"2019-07-17T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-07-18T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-07-19T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 27.0}, {\\\"day\\\": \\\"2019-07-20T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 26.0}, {\\\"day\\\": \\\"2019-07-22T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 24.0}, {\\\"day\\\": \\\"2019-07-23T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 23.0}, {\\\"day\\\": \\\"2019-07-24T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 23.0}, {\\\"day\\\": \\\"2019-07-25T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 22.0}, {\\\"day\\\": \\\"2019-07-26T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 23.0}, {\\\"day\\\": \\\"2019-07-27T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 23.0}, {\\\"day\\\": \\\"2019-07-28T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 24.0}, {\\\"day\\\": \\\"2019-07-29T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 26.0}, {\\\"day\\\": \\\"2019-07-30T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 25.0}, {\\\"day\\\": \\\"2019-07-31T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 26.0}, {\\\"day\\\": \\\"2019-08-01T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 26.0}, {\\\"day\\\": \\\"2019-08-02T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 26.0}, {\\\"day\\\": \\\"2019-08-03T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 26.0}, {\\\"day\\\": \\\"2019-08-05T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-08-06T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-08-07T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-08-08T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 30.0}, {\\\"day\\\": \\\"2019-08-09T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-08-10T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-08-11T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-08-12T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 25.0}, {\\\"day\\\": \\\"2019-08-13T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 24.0}, {\\\"day\\\": \\\"2019-08-14T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 27.0}, {\\\"day\\\": \\\"2019-08-15T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 30.0}, {\\\"day\\\": \\\"2019-08-16T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 33.0}, {\\\"day\\\": \\\"2019-08-17T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 33.0}, {\\\"day\\\": \\\"2019-08-18T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 33.0}, {\\\"day\\\": \\\"2019-08-19T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 35.0}, {\\\"day\\\": \\\"2019-08-20T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 34.0}, {\\\"day\\\": \\\"2019-08-21T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 36.0}, {\\\"day\\\": \\\"2019-08-22T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 36.0}, {\\\"day\\\": \\\"2019-08-23T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 35.0}, {\\\"day\\\": \\\"2019-08-24T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 38.0}, {\\\"day\\\": \\\"2019-08-25T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 38.0}, {\\\"day\\\": \\\"2019-08-26T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 36.0}, {\\\"day\\\": \\\"2019-08-27T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 35.0}, {\\\"day\\\": \\\"2019-08-28T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 35.0}, {\\\"day\\\": \\\"2019-08-29T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 37.0}, {\\\"day\\\": \\\"2019-08-30T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 38.0}, {\\\"day\\\": \\\"2019-09-01T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 38.0}, {\\\"day\\\": \\\"2019-09-02T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 35.0}, {\\\"day\\\": \\\"2019-09-03T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 32.0}, {\\\"day\\\": \\\"2019-09-04T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 32.0}, {\\\"day\\\": \\\"2019-09-05T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 33.0}, {\\\"day\\\": \\\"2019-09-06T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 32.0}, {\\\"day\\\": \\\"2019-09-07T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 32.0}, {\\\"day\\\": \\\"2019-09-08T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 33.0}, {\\\"day\\\": \\\"2019-09-09T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 34.0}, {\\\"day\\\": \\\"2019-09-10T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 35.0}, {\\\"day\\\": \\\"2019-09-11T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 32.0}, {\\\"day\\\": \\\"2019-09-12T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-09-13T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 25.0}, {\\\"day\\\": \\\"2019-09-14T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 25.0}, {\\\"day\\\": \\\"2019-09-15T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 25.0}, {\\\"day\\\": \\\"2019-09-16T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 26.0}, {\\\"day\\\": \\\"2019-09-17T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-09-18T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 27.0}, {\\\"day\\\": \\\"2019-09-19T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-09-20T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 32.0}, {\\\"day\\\": \\\"2019-09-21T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-09-22T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-09-23T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-09-24T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-09-25T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-09-26T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 33.0}, {\\\"day\\\": \\\"2019-09-27T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 35.0}, {\\\"day\\\": \\\"2019-09-28T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 36.0}, {\\\"day\\\": \\\"2019-09-29T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 41.0}, {\\\"day\\\": \\\"2019-09-30T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 40.0}, {\\\"day\\\": \\\"2019-10-01T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 39.0}, {\\\"day\\\": \\\"2019-10-02T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 39.0}, {\\\"day\\\": \\\"2019-10-03T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 36.0}, {\\\"day\\\": \\\"2019-10-04T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 37.0}, {\\\"day\\\": \\\"2019-10-05T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 37.0}, {\\\"day\\\": \\\"2019-10-06T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 36.0}, {\\\"day\\\": \\\"2019-10-07T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 35.0}, {\\\"day\\\": \\\"2019-10-08T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 33.0}, {\\\"day\\\": \\\"2019-10-09T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 35.0}, {\\\"day\\\": \\\"2019-10-10T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 38.0}, {\\\"day\\\": \\\"2019-10-11T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 40.0}, {\\\"day\\\": \\\"2019-10-12T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 42.0}, {\\\"day\\\": \\\"2019-10-13T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 42.0}, {\\\"day\\\": \\\"2019-10-14T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 42.0}, {\\\"day\\\": \\\"2019-10-15T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 44.0}, {\\\"day\\\": \\\"2019-10-16T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 46.0}, {\\\"day\\\": \\\"2019-10-17T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 45.0}, {\\\"day\\\": \\\"2019-10-18T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 43.0}, {\\\"day\\\": \\\"2019-10-19T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 43.0}, {\\\"day\\\": \\\"2019-10-20T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 43.0}, {\\\"day\\\": \\\"2019-10-21T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 45.0}, {\\\"day\\\": \\\"2019-10-22T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 44.0}, {\\\"day\\\": \\\"2019-10-23T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 45.0}, {\\\"day\\\": \\\"2019-10-24T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 40.0}, {\\\"day\\\": \\\"2019-10-25T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 41.0}, {\\\"day\\\": \\\"2019-10-26T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 41.0}, {\\\"day\\\": \\\"2019-10-27T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 36.0}, {\\\"day\\\": \\\"2019-10-28T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 37.0}, {\\\"day\\\": \\\"2019-10-29T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 39.0}, {\\\"day\\\": \\\"2019-10-30T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 41.0}, {\\\"day\\\": \\\"2019-10-31T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 42.0}, {\\\"day\\\": \\\"2019-11-01T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 42.0}, {\\\"day\\\": \\\"2019-11-02T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 42.0}, {\\\"day\\\": \\\"2019-11-04T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 44.0}, {\\\"day\\\": \\\"2019-11-05T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 47.0}, {\\\"day\\\": \\\"2019-11-06T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 46.0}, {\\\"day\\\": \\\"2019-11-07T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 46.0}, {\\\"day\\\": \\\"2019-11-08T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 47.0}, {\\\"day\\\": \\\"2019-11-09T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 45.0}, {\\\"day\\\": \\\"2019-11-11T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 42.0}, {\\\"day\\\": \\\"2019-11-12T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 39.0}, {\\\"day\\\": \\\"2019-11-13T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 37.0}, {\\\"day\\\": \\\"2019-11-14T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 36.0}, {\\\"day\\\": \\\"2019-11-15T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 37.0}, {\\\"day\\\": \\\"2019-11-16T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 37.0}, {\\\"day\\\": \\\"2019-11-18T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 38.0}, {\\\"day\\\": \\\"2019-11-19T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 39.0}, {\\\"day\\\": \\\"2019-11-20T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 38.0}, {\\\"day\\\": \\\"2019-11-21T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 39.0}, {\\\"day\\\": \\\"2019-11-22T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 35.0}, {\\\"day\\\": \\\"2019-11-23T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 34.0}, {\\\"day\\\": \\\"2019-11-24T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 34.0}, {\\\"day\\\": \\\"2019-11-25T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 34.0}, {\\\"day\\\": \\\"2019-11-26T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 32.0}, {\\\"day\\\": \\\"2019-11-27T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 33.0}, {\\\"day\\\": \\\"2019-11-28T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 34.0}, {\\\"day\\\": \\\"2019-11-29T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 33.0}, {\\\"day\\\": \\\"2019-11-30T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 33.0}, {\\\"day\\\": \\\"2019-12-01T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 33.0}, {\\\"day\\\": \\\"2019-12-02T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-12-03T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-12-04T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 33.0}, {\\\"day\\\": \\\"2019-12-05T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 30.0}, {\\\"day\\\": \\\"2019-12-06T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 28.0}, {\\\"day\\\": \\\"2019-12-07T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-12-08T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-12-09T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-12-10T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-12-11T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 30.0}, {\\\"day\\\": \\\"2019-12-12T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 31.0}, {\\\"day\\\": \\\"2019-12-13T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-12-14T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-12-15T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 29.0}, {\\\"day\\\": \\\"2019-12-16T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 26.0}, {\\\"day\\\": \\\"2019-12-17T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 25.0}, {\\\"day\\\": \\\"2019-12-18T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 26.0}, {\\\"day\\\": \\\"2019-12-19T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 24.0}, {\\\"day\\\": \\\"2019-12-20T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 24.0}, {\\\"day\\\": \\\"2019-12-21T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 24.0}, {\\\"day\\\": \\\"2019-12-23T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 22.0}, {\\\"day\\\": \\\"2019-12-24T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 22.0}, {\\\"day\\\": \\\"2019-12-25T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 19.0}, {\\\"day\\\": \\\"2019-12-26T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 18.0}, {\\\"day\\\": \\\"2019-12-27T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 19.0}, {\\\"day\\\": \\\"2019-12-28T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 19.0}, {\\\"day\\\": \\\"2019-12-29T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 19.0}, {\\\"day\\\": \\\"2019-12-31T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 18.0}, {\\\"day\\\": \\\"2020-01-02T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 16.0}, {\\\"day\\\": \\\"2020-01-03T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2020-01-04T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2020-01-06T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2020-01-07T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2020-01-08T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2020-01-09T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2020-01-10T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2020-01-12T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2020-01-13T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2020-01-14T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2020-01-15T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2020-01-16T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2020-01-17T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2020-01-18T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2020-01-19T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2020-01-20T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2020-01-21T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2020-01-22T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 16.0}, {\\\"day\\\": \\\"2020-01-23T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 15.0}, {\\\"day\\\": \\\"2020-01-24T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2020-01-25T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2020-01-26T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2020-01-27T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2020-01-28T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2020-01-29T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2020-01-30T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2020-01-31T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 13.0}, {\\\"day\\\": \\\"2020-02-01T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2020-02-02T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2020-02-03T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 14.0}, {\\\"day\\\": \\\"2020-02-04T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 12.0}, {\\\"day\\\": \\\"2020-02-05T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2020-02-06T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 10.0}, {\\\"day\\\": \\\"2020-02-07T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2020-02-08T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2020-02-09T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2020-02-10T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2020-02-11T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2020-02-12T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2020-02-13T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2020-02-14T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2020-02-15T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2020-02-16T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 8.0}, {\\\"day\\\": \\\"2020-02-17T00:00:00\\\", \\\"company\\\": \\\"ibm\\\", \\\"value\\\": 9.0}, {\\\"day\\\": \\\"2019-03-01T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-02T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-03T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-04T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-05T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-06T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-07T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-08T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-09T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-10T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-11T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-12T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-13T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-14T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-15T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-16T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-18T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-19T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-20T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-21T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-22T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-23T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-24T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-25T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-26T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-27T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-28T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-29T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-30T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-03-31T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-01T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-02T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-03T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-04T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-05T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-06T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-07T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-08T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-09T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-10T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-11T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-12T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-13T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-14T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-15T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-16T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-17T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-18T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-19T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-20T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-21T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-22T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-23T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-24T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-25T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-26T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-28T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-29T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-04-30T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-01T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-02T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-03T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-04T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-05T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-06T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-07T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-08T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-09T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-10T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-11T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-13T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-14T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-15T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-16T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-17T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-18T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-19T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-20T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-21T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-22T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-23T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-24T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-25T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-27T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-28T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-29T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-30T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-05-31T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-01T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-02T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-03T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-04T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-05T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-06T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-07T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-09T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-10T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-11T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-12T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-13T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-14T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-16T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-17T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-18T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-19T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-20T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-21T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-22T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-23T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-24T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-06-25T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-06-26T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-06-27T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-06-28T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-06-29T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-06-30T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-07-01T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-07-02T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-07-03T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-07-04T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-07-08T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-07-09T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-07-10T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-07-11T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-07-12T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-07-13T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-07-15T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-07-16T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-07-17T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-07-18T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-07-19T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-07-20T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-07-22T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 1.0}, {\\\"day\\\": \\\"2019-07-23T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-07-24T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-07-25T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-07-26T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-07-27T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-07-28T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-07-29T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-07-30T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-07-31T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-01T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-02T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-03T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-05T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-06T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-07T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-08T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-09T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-10T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-11T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-12T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-13T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-14T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-15T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-16T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-17T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-18T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-19T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-20T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-21T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-22T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-23T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-24T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-25T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-26T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-27T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-28T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-29T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-08-30T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-01T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-02T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-03T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-04T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-05T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-06T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-07T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-08T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-09T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-10T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-11T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-12T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-13T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-14T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-15T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-16T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-17T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-18T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-19T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-20T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-21T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-22T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-23T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-24T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-25T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-26T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-27T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-28T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-29T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-09-30T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-01T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-02T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-03T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-04T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-05T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-06T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-07T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-08T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-09T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-10T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-11T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-12T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-13T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-14T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-15T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-16T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-17T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-18T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-19T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-20T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-21T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-22T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-23T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-24T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-25T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-26T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-27T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-28T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-29T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-30T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-10-31T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-01T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-02T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-04T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-05T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-06T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-07T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-08T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-09T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-11T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-12T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-13T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-14T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-15T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-16T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-18T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-19T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-20T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-21T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-22T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-23T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-24T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-25T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-26T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-27T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-28T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-29T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-11-30T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-01T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-02T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-03T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-04T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-05T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-06T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-07T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-08T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-09T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-10T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-11T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-12T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-13T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-14T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-15T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-16T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-17T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-18T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-19T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-20T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-21T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-23T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-24T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-25T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-26T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-27T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-28T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-29T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2019-12-31T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-02T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-03T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-04T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-06T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-07T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-08T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-09T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-10T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-12T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-13T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-14T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-15T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-16T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-17T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-18T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-19T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-20T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-21T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-22T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-23T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-24T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-25T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-26T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-27T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-28T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-29T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-30T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-01-31T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-01T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-02T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-03T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-04T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-05T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-06T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-07T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-08T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-09T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-10T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-11T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-12T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-13T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-14T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-15T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-16T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}, {\\\"day\\\": \\\"2020-02-17T00:00:00\\\", \\\"company\\\": \\\"seldon\\\", \\\"value\\\": 0.0}]}}, {\\\"mode\\\": \\\"vega-lite\\\"});\\n\",\n       \"</script>\"\n      ],\n      \"text/plain\": [\n       \"alt.Chart(...)\"\n      ]\n     },\n     \"execution_count\": 128,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"names = [\\\"google\\\", \\\"cisco\\\", \\\"microsoft\\\", \\\"arrikto\\\", \\\"ibm\\\", \\\"seldon\\\"]\\n\",\n    \"companies_df = counts[names]\\n\",\n    \"companies_df[\\\"day\\\"] = companies_df.index\\n\",\n    \"companies = pd.melt(companies_df, value_vars=names, id_vars=[\\\"day\\\"])\\n\",\n    \"\\n\",\n    \"chart = alt.Chart(companies, title= \\\"PRs\\\")\\n\",\n    \"point = chart.mark_point().encode(\\n\",\n    \"  x= alt.X('day', title = \\\"Day\\\"),\\n\",\n    \"  y=alt.Y(\\\"value\\\", title=\\\"# PRs\\\"),\\n\",\n    \"  color=\\\"company\\\",\\n\",\n    \")\\n\",\n    \"\\n\",\n    \"point.interactive()\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.6.9\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "scripts/github_stats.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Compute GitHub Stats\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Notebook setup\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import os\\n\",\n    \"import subprocess\\n\",\n    \"if os.path.exists(\\\"/var/run/secrets/kubernetes.io/serviceaccount\\\"):\\n\",\n    \"    subprocess.check_call([\\\"pip\\\", \\\"install\\\", \\\"--user\\\", \\\"-r\\\", \\\"requirements.txt\\\"], stderr=subprocess.STDOUT, bufsize=1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# NOTE: The RuntimeWarnings (if any) are harmless. See ContinuumIO/anaconda-issues#6678.\\n\",\n    \"import altair as alt\\n\",\n    \"from pandas.io import gbq\\n\",\n    \"import pandas as pd\\n\",\n    \"import numpy as np\\n\",\n    \"\\n\",\n    \"from importlib import reload\\n\",\n    \"import itertools\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import getpass\\n\",\n    \"import subprocess\\n\",\n    \"# Configuration Variables. Modify as desired.\\n\",\n    \"\\n\",\n    \"PROJECT = subprocess.check_output([\\\"gcloud\\\", \\\"config\\\", \\\"get-value\\\", \\\"project\\\"]).strip().decode()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#matplotlib\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Setup Authorization\\n\",\n    \"\\n\",\n    \"If you are using a service account run\\n\",\n    \"%%bash\\n\",\n    \"\\n\",\n    \"# Activate Service Account provided by Kubeflow.\\n\",\n    \"gcloud auth activate-service-account --key-file=${GOOGLE_APPLICATION_CREDENTIALS}\\n\",\n    \"\\n\",\n    \"If you are running using user credentials\\n\",\n    \"\\n\",\n    \"gcloud auth application-default login\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import datetime\\n\",\n    \"month = datetime.datetime.now().month\\n\",\n    \"year = datetime.datetime.now().year\\n\",\n    \"\\n\",\n    \"num_months = 12\\n\",\n    \"\\n\",\n    \"months = []\\n\",\n    \"for i in range(num_months):\\n\",\n    \"    months.append(\\\"\\\\\\\"{0}{1:02}\\\\\\\"\\\".format(year, month))\\n\",\n    \"    month -= 1\\n\",\n    \"    if month == 0:\\n\",\n    \"        month = 12\\n\",\n    \"        year -=1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Unique PR Creators\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Downloading: 100%|██████████| 5936/5936 [00:00<00:00, 7655.28rows/s]\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"query = \\\"\\\"\\\"\\n\",\n    \"SELECT\\n\",\n    \"    DATE(created_at) AS pr_date,\\n\",\n    \"    actor.id,\\n\",\n    \"    actor.login,\\n\",\n    \"    JSON_EXTRACT(payload, '$.pull_request.user.id') as user_id,\\n\",\n    \"    JSON_EXTRACT(payload, '$.pull_request.id') as pr_id,\\n\",\n    \"    JSON_EXTRACT(payload, '$.pull_request.merged') as merged\\n\",\n    \"  FROM `githubarchive.month.*`\\n\",\n    \"  WHERE\\n\",\n    \"    _TABLE_SUFFIX IN ({0})\\n\",\n    \"    AND type = 'PullRequestEvent'\\n\",\n    \"    AND org.login = 'kubeflow'\\n\",\n    \"    AND JSON_EXTRACT(payload, '$.action') IN ('\\\"closed\\\"')\\n\",\n    \"\\\"\\\"\\\".format(\\\",\\\".join(months))\\n\",\n    \"\\n\",\n    \"all_prs=gbq.read_gbq(str(query), dialect='standard', project_id=PROJECT)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Filter PRs to merged PRs\\n\",\n    \"v=all_prs[\\\"merged\\\"].values == 'true'\\n\",\n    \"merged_all_prs = all_prs.iloc[v]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"p=pd.Series(data=merged_all_prs[\\\"user_id\\\"].values,index=merged_all_prs[\\\"pr_date\\\"])\\n\",\n    \"p=p.sort_index()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Some solutions here: https://stackoverflow.com/questions/46470743/how-to-efficiently-compute-a-rolling-unique-count-in-a-pandas-time-series\\n\",\n    \"# Need to figure out how to do a time based window\\n\",\n    \"\\n\",\n    \"# TODO(jlewi): Is there a bug in the rolling window computation? creators ends up having the same number\\n\",\n    \"# of rows as p; so we end up with multiple datapoints for each day; but the values aren't the same for\\n\",\n    \"# each day. What is causing this effect?\\n\",\n    \"creators = p.rolling('28d').apply(lambda arr: pd.Series(arr).nunique())\\n\",\n    \"\\n\",\n    \"# We need to group the days. Rolling window will create a point for each data point\\n\",\n    \"creators_df = pd.DataFrame({\\\"day\\\": creators.index, \\\"num_authors\\\": creators.values})\\n\",\n    \"creators_df = creators_df.groupby(\\\"day\\\", as_index=False).max()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"\\n\",\n       \"<div id=\\\"altair-viz-6710c42472b745cc9def9d205a961b2d\\\"></div>\\n\",\n       \"<script type=\\\"text/javascript\\\">\\n\",\n       \"  (function(spec, embedOpt){\\n\",\n       \"    let outputDiv = document.currentScript.previousElementSibling;\\n\",\n       \"    if (outputDiv.id !== \\\"altair-viz-6710c42472b745cc9def9d205a961b2d\\\") {\\n\",\n       \"      outputDiv = document.getElementById(\\\"altair-viz-6710c42472b745cc9def9d205a961b2d\\\");\\n\",\n       \"    }\\n\",\n       \"    const paths = {\\n\",\n       \"      \\\"vega\\\": \\\"https://cdn.jsdelivr.net/npm//vega@5?noext\\\",\\n\",\n       \"      \\\"vega-lib\\\": \\\"https://cdn.jsdelivr.net/npm//vega-lib?noext\\\",\\n\",\n       \"      \\\"vega-lite\\\": \\\"https://cdn.jsdelivr.net/npm//vega-lite@4.8.1?noext\\\",\\n\",\n       \"      \\\"vega-embed\\\": \\\"https://cdn.jsdelivr.net/npm//vega-embed@6?noext\\\",\\n\",\n       \"    };\\n\",\n       \"\\n\",\n       \"    function loadScript(lib) {\\n\",\n       \"      return new Promise(function(resolve, reject) {\\n\",\n       \"        var s = document.createElement('script');\\n\",\n       \"        s.src = paths[lib];\\n\",\n       \"        s.async = true;\\n\",\n       \"        s.onload = () => resolve(paths[lib]);\\n\",\n       \"        s.onerror = () => reject(`Error loading script: ${paths[lib]}`);\\n\",\n       \"        document.getElementsByTagName(\\\"head\\\")[0].appendChild(s);\\n\",\n       \"      });\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    function showError(err) {\\n\",\n       \"      outputDiv.innerHTML = `<div class=\\\"error\\\" style=\\\"color:red;\\\">${err}</div>`;\\n\",\n       \"      throw err;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    function displayChart(vegaEmbed) {\\n\",\n       \"      vegaEmbed(outputDiv, spec, embedOpt)\\n\",\n       \"        .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    if(typeof define === \\\"function\\\" && define.amd) {\\n\",\n       \"      requirejs.config({paths});\\n\",\n       \"      require([\\\"vega-embed\\\"], displayChart, err => showError(`Error loading script: ${err.message}`));\\n\",\n       \"    } else if (typeof vegaEmbed === \\\"function\\\") {\\n\",\n       \"      displayChart(vegaEmbed);\\n\",\n       \"    } else {\\n\",\n       \"      loadScript(\\\"vega\\\")\\n\",\n       \"        .then(() => loadScript(\\\"vega-lite\\\"))\\n\",\n       \"        .then(() => loadScript(\\\"vega-embed\\\"))\\n\",\n       \"        .catch(showError)\\n\",\n       \"        .then(() => displayChart(vegaEmbed));\\n\",\n       \"    }\\n\",\n       \"  })({\\\"config\\\": {\\\"view\\\": {\\\"continuousWidth\\\": 400, \\\"continuousHeight\\\": 300}}, \\\"layer\\\": [{\\\"mark\\\": \\\"line\\\", \\\"encoding\\\": {\\\"x\\\": {\\\"type\\\": \\\"temporal\\\", \\\"field\\\": \\\"day\\\", \\\"title\\\": \\\"Day\\\"}, \\\"y\\\": {\\\"type\\\": \\\"quantitative\\\", \\\"field\\\": \\\"num_authors\\\", \\\"title\\\": \\\"# Unique Authors\\\"}}, \\\"selection\\\": {\\\"selector001\\\": {\\\"type\\\": \\\"interval\\\", \\\"bind\\\": \\\"scales\\\", \\\"encodings\\\": [\\\"x\\\", \\\"y\\\"]}}, \\\"title\\\": \\\"Unique PR Authors (Last 28 Days)\\\"}, {\\\"mark\\\": \\\"point\\\", \\\"encoding\\\": {\\\"x\\\": {\\\"type\\\": \\\"temporal\\\", \\\"field\\\": \\\"day\\\", \\\"title\\\": \\\"Day\\\"}, \\\"y\\\": {\\\"type\\\": \\\"quantitative\\\", \\\"field\\\": \\\"num_authors\\\", \\\"title\\\": \\\"# Unique Authors\\\"}}, \\\"title\\\": \\\"Unique PR Authors (Last 28 Days)\\\"}], \\\"data\\\": {\\\"name\\\": \\\"data-0825536c92b111946e663c74ba0afeaa\\\"}, \\\"$schema\\\": \\\"https://vega.github.io/schema/vega-lite/v4.8.1.json\\\", \\\"datasets\\\": {\\\"data-0825536c92b111946e663c74ba0afeaa\\\": [{\\\"day\\\": \\\"2019-08-01T00:00:00\\\", \\\"num_authors\\\": 11.0}, {\\\"day\\\": \\\"2019-08-02T00:00:00\\\", \\\"num_authors\\\": 18.0}, {\\\"day\\\": \\\"2019-08-03T00:00:00\\\", \\\"num_authors\\\": 20.0}, {\\\"day\\\": \\\"2019-08-04T00:00:00\\\", \\\"num_authors\\\": 23.0}, {\\\"day\\\": \\\"2019-08-05T00:00:00\\\", \\\"num_authors\\\": 27.0}, {\\\"day\\\": \\\"2019-08-06T00:00:00\\\", \\\"num_authors\\\": 40.0}, {\\\"day\\\": \\\"2019-08-07T00:00:00\\\", \\\"num_authors\\\": 48.0}, {\\\"day\\\": \\\"2019-08-08T00:00:00\\\", \\\"num_authors\\\": 54.0}, {\\\"day\\\": \\\"2019-08-09T00:00:00\\\", \\\"num_authors\\\": 58.0}, {\\\"day\\\": \\\"2019-08-10T00:00:00\\\", \\\"num_authors\\\": 58.0}, {\\\"day\\\": \\\"2019-08-11T00:00:00\\\", \\\"num_authors\\\": 60.0}, {\\\"day\\\": \\\"2019-08-12T00:00:00\\\", \\\"num_authors\\\": 65.0}, {\\\"day\\\": \\\"2019-08-13T00:00:00\\\", \\\"num_authors\\\": 66.0}, {\\\"day\\\": \\\"2019-08-14T00:00:00\\\", \\\"num_authors\\\": 68.0}, {\\\"day\\\": \\\"2019-08-15T00:00:00\\\", \\\"num_authors\\\": 72.0}, {\\\"day\\\": \\\"2019-08-16T00:00:00\\\", \\\"num_authors\\\": 76.0}, {\\\"day\\\": \\\"2019-08-17T00:00:00\\\", \\\"num_authors\\\": 76.0}, {\\\"day\\\": \\\"2019-08-18T00:00:00\\\", \\\"num_authors\\\": 77.0}, {\\\"day\\\": \\\"2019-08-19T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2019-08-20T00:00:00\\\", \\\"num_authors\\\": 87.0}, {\\\"day\\\": \\\"2019-08-21T00:00:00\\\", \\\"num_authors\\\": 88.0}, {\\\"day\\\": \\\"2019-08-22T00:00:00\\\", \\\"num_authors\\\": 92.0}, {\\\"day\\\": \\\"2019-08-23T00:00:00\\\", \\\"num_authors\\\": 95.0}, {\\\"day\\\": \\\"2019-08-24T00:00:00\\\", \\\"num_authors\\\": 96.0}, {\\\"day\\\": \\\"2019-08-25T00:00:00\\\", \\\"num_authors\\\": 96.0}, {\\\"day\\\": \\\"2019-08-26T00:00:00\\\", \\\"num_authors\\\": 96.0}, {\\\"day\\\": \\\"2019-08-28T00:00:00\\\", \\\"num_authors\\\": 98.0}, {\\\"day\\\": \\\"2019-08-29T00:00:00\\\", \\\"num_authors\\\": 100.0}, {\\\"day\\\": \\\"2019-08-30T00:00:00\\\", \\\"num_authors\\\": 98.0}, {\\\"day\\\": \\\"2019-08-31T00:00:00\\\", \\\"num_authors\\\": 97.0}, {\\\"day\\\": \\\"2019-09-01T00:00:00\\\", \\\"num_authors\\\": 96.0}, {\\\"day\\\": \\\"2019-09-02T00:00:00\\\", \\\"num_authors\\\": 96.0}, {\\\"day\\\": \\\"2019-09-03T00:00:00\\\", \\\"num_authors\\\": 93.0}, {\\\"day\\\": \\\"2019-09-04T00:00:00\\\", \\\"num_authors\\\": 97.0}, {\\\"day\\\": \\\"2019-09-05T00:00:00\\\", \\\"num_authors\\\": 97.0}, {\\\"day\\\": \\\"2019-09-06T00:00:00\\\", \\\"num_authors\\\": 95.0}, {\\\"day\\\": \\\"2019-09-07T00:00:00\\\", \\\"num_authors\\\": 95.0}, {\\\"day\\\": \\\"2019-09-08T00:00:00\\\", \\\"num_authors\\\": 94.0}, {\\\"day\\\": \\\"2019-09-09T00:00:00\\\", \\\"num_authors\\\": 90.0}, {\\\"day\\\": \\\"2019-09-10T00:00:00\\\", \\\"num_authors\\\": 91.0}, {\\\"day\\\": \\\"2019-09-11T00:00:00\\\", \\\"num_authors\\\": 92.0}, {\\\"day\\\": \\\"2019-09-12T00:00:00\\\", \\\"num_authors\\\": 87.0}, {\\\"day\\\": \\\"2019-09-13T00:00:00\\\", \\\"num_authors\\\": 86.0}, {\\\"day\\\": \\\"2019-09-14T00:00:00\\\", \\\"num_authors\\\": 85.0}, {\\\"day\\\": \\\"2019-09-15T00:00:00\\\", \\\"num_authors\\\": 85.0}, {\\\"day\\\": \\\"2019-09-16T00:00:00\\\", \\\"num_authors\\\": 86.0}, {\\\"day\\\": \\\"2019-09-17T00:00:00\\\", \\\"num_authors\\\": 80.0}, {\\\"day\\\": \\\"2019-09-18T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2019-09-19T00:00:00\\\", \\\"num_authors\\\": 76.0}, {\\\"day\\\": \\\"2019-09-20T00:00:00\\\", \\\"num_authors\\\": 73.0}, {\\\"day\\\": \\\"2019-09-21T00:00:00\\\", \\\"num_authors\\\": 76.0}, {\\\"day\\\": \\\"2019-09-22T00:00:00\\\", \\\"num_authors\\\": 76.0}, {\\\"day\\\": \\\"2019-09-23T00:00:00\\\", \\\"num_authors\\\": 76.0}, {\\\"day\\\": \\\"2019-09-24T00:00:00\\\", \\\"num_authors\\\": 76.0}, {\\\"day\\\": \\\"2019-09-25T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2019-09-26T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2019-09-27T00:00:00\\\", \\\"num_authors\\\": 78.0}, {\\\"day\\\": \\\"2019-09-28T00:00:00\\\", \\\"num_authors\\\": 78.0}, {\\\"day\\\": \\\"2019-09-29T00:00:00\\\", \\\"num_authors\\\": 78.0}, {\\\"day\\\": \\\"2019-09-30T00:00:00\\\", \\\"num_authors\\\": 78.0}, {\\\"day\\\": \\\"2019-10-01T00:00:00\\\", \\\"num_authors\\\": 81.0}, {\\\"day\\\": \\\"2019-10-02T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2019-10-03T00:00:00\\\", \\\"num_authors\\\": 78.0}, {\\\"day\\\": \\\"2019-10-04T00:00:00\\\", \\\"num_authors\\\": 77.0}, {\\\"day\\\": \\\"2019-10-05T00:00:00\\\", \\\"num_authors\\\": 76.0}, {\\\"day\\\": \\\"2019-10-06T00:00:00\\\", \\\"num_authors\\\": 77.0}, {\\\"day\\\": \\\"2019-10-07T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2019-10-08T00:00:00\\\", \\\"num_authors\\\": 78.0}, {\\\"day\\\": \\\"2019-10-09T00:00:00\\\", \\\"num_authors\\\": 77.0}, {\\\"day\\\": \\\"2019-10-10T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2019-10-11T00:00:00\\\", \\\"num_authors\\\": 76.0}, {\\\"day\\\": \\\"2019-10-12T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2019-10-13T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2019-10-14T00:00:00\\\", \\\"num_authors\\\": 80.0}, {\\\"day\\\": \\\"2019-10-15T00:00:00\\\", \\\"num_authors\\\": 80.0}, {\\\"day\\\": \\\"2019-10-16T00:00:00\\\", \\\"num_authors\\\": 83.0}, {\\\"day\\\": \\\"2019-10-17T00:00:00\\\", \\\"num_authors\\\": 85.0}, {\\\"day\\\": \\\"2019-10-18T00:00:00\\\", \\\"num_authors\\\": 86.0}, {\\\"day\\\": \\\"2019-10-19T00:00:00\\\", \\\"num_authors\\\": 85.0}, {\\\"day\\\": \\\"2019-10-21T00:00:00\\\", \\\"num_authors\\\": 86.0}, {\\\"day\\\": \\\"2019-10-22T00:00:00\\\", \\\"num_authors\\\": 85.0}, {\\\"day\\\": \\\"2019-10-23T00:00:00\\\", \\\"num_authors\\\": 84.0}, {\\\"day\\\": \\\"2019-10-24T00:00:00\\\", \\\"num_authors\\\": 85.0}, {\\\"day\\\": \\\"2019-10-25T00:00:00\\\", \\\"num_authors\\\": 87.0}, {\\\"day\\\": \\\"2019-10-26T00:00:00\\\", \\\"num_authors\\\": 87.0}, {\\\"day\\\": \\\"2019-10-27T00:00:00\\\", \\\"num_authors\\\": 87.0}, {\\\"day\\\": \\\"2019-10-28T00:00:00\\\", \\\"num_authors\\\": 85.0}, {\\\"day\\\": \\\"2019-10-29T00:00:00\\\", \\\"num_authors\\\": 86.0}, {\\\"day\\\": \\\"2019-10-30T00:00:00\\\", \\\"num_authors\\\": 83.0}, {\\\"day\\\": \\\"2019-10-31T00:00:00\\\", \\\"num_authors\\\": 83.0}, {\\\"day\\\": \\\"2019-11-01T00:00:00\\\", \\\"num_authors\\\": 85.0}, {\\\"day\\\": \\\"2019-11-02T00:00:00\\\", \\\"num_authors\\\": 86.0}, {\\\"day\\\": \\\"2019-11-03T00:00:00\\\", \\\"num_authors\\\": 84.0}, {\\\"day\\\": \\\"2019-11-04T00:00:00\\\", \\\"num_authors\\\": 84.0}, {\\\"day\\\": \\\"2019-11-05T00:00:00\\\", \\\"num_authors\\\": 83.0}, {\\\"day\\\": \\\"2019-11-06T00:00:00\\\", \\\"num_authors\\\": 82.0}, {\\\"day\\\": \\\"2019-11-07T00:00:00\\\", \\\"num_authors\\\": 83.0}, {\\\"day\\\": \\\"2019-11-08T00:00:00\\\", \\\"num_authors\\\": 83.0}, {\\\"day\\\": \\\"2019-11-09T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2019-11-10T00:00:00\\\", \\\"num_authors\\\": 80.0}, {\\\"day\\\": \\\"2019-11-11T00:00:00\\\", \\\"num_authors\\\": 80.0}, {\\\"day\\\": \\\"2019-11-12T00:00:00\\\", \\\"num_authors\\\": 81.0}, {\\\"day\\\": \\\"2019-11-13T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2019-11-14T00:00:00\\\", \\\"num_authors\\\": 91.0}, {\\\"day\\\": \\\"2019-11-15T00:00:00\\\", \\\"num_authors\\\": 91.0}, {\\\"day\\\": \\\"2019-11-16T00:00:00\\\", \\\"num_authors\\\": 89.0}, {\\\"day\\\": \\\"2019-11-18T00:00:00\\\", \\\"num_authors\\\": 88.0}, {\\\"day\\\": \\\"2019-11-19T00:00:00\\\", \\\"num_authors\\\": 89.0}, {\\\"day\\\": \\\"2019-11-20T00:00:00\\\", \\\"num_authors\\\": 85.0}, {\\\"day\\\": \\\"2019-11-21T00:00:00\\\", \\\"num_authors\\\": 85.0}, {\\\"day\\\": \\\"2019-11-22T00:00:00\\\", \\\"num_authors\\\": 86.0}, {\\\"day\\\": \\\"2019-11-23T00:00:00\\\", \\\"num_authors\\\": 86.0}, {\\\"day\\\": \\\"2019-11-24T00:00:00\\\", \\\"num_authors\\\": 86.0}, {\\\"day\\\": \\\"2019-11-25T00:00:00\\\", \\\"num_authors\\\": 86.0}, {\\\"day\\\": \\\"2019-11-26T00:00:00\\\", \\\"num_authors\\\": 86.0}, {\\\"day\\\": \\\"2019-11-27T00:00:00\\\", \\\"num_authors\\\": 86.0}, {\\\"day\\\": \\\"2019-11-28T00:00:00\\\", \\\"num_authors\\\": 89.0}, {\\\"day\\\": \\\"2019-11-29T00:00:00\\\", \\\"num_authors\\\": 87.0}, {\\\"day\\\": \\\"2019-12-01T00:00:00\\\", \\\"num_authors\\\": 86.0}, {\\\"day\\\": \\\"2019-12-02T00:00:00\\\", \\\"num_authors\\\": 87.0}, {\\\"day\\\": \\\"2019-12-03T00:00:00\\\", \\\"num_authors\\\": 90.0}, {\\\"day\\\": \\\"2019-12-04T00:00:00\\\", \\\"num_authors\\\": 89.0}, {\\\"day\\\": \\\"2019-12-05T00:00:00\\\", \\\"num_authors\\\": 91.0}, {\\\"day\\\": \\\"2019-12-06T00:00:00\\\", \\\"num_authors\\\": 88.0}, {\\\"day\\\": \\\"2019-12-07T00:00:00\\\", \\\"num_authors\\\": 89.0}, {\\\"day\\\": \\\"2019-12-08T00:00:00\\\", \\\"num_authors\\\": 88.0}, {\\\"day\\\": \\\"2019-12-09T00:00:00\\\", \\\"num_authors\\\": 89.0}, {\\\"day\\\": \\\"2019-12-10T00:00:00\\\", \\\"num_authors\\\": 86.0}, {\\\"day\\\": \\\"2019-12-11T00:00:00\\\", \\\"num_authors\\\": 86.0}, {\\\"day\\\": \\\"2019-12-12T00:00:00\\\", \\\"num_authors\\\": 76.0}, {\\\"day\\\": \\\"2019-12-13T00:00:00\\\", \\\"num_authors\\\": 76.0}, {\\\"day\\\": \\\"2019-12-16T00:00:00\\\", \\\"num_authors\\\": 73.0}, {\\\"day\\\": \\\"2019-12-17T00:00:00\\\", \\\"num_authors\\\": 72.0}, {\\\"day\\\": \\\"2019-12-18T00:00:00\\\", \\\"num_authors\\\": 74.0}, {\\\"day\\\": \\\"2019-12-19T00:00:00\\\", \\\"num_authors\\\": 72.0}, {\\\"day\\\": \\\"2019-12-20T00:00:00\\\", \\\"num_authors\\\": 72.0}, {\\\"day\\\": \\\"2019-12-21T00:00:00\\\", \\\"num_authors\\\": 71.0}, {\\\"day\\\": \\\"2019-12-23T00:00:00\\\", \\\"num_authors\\\": 70.0}, {\\\"day\\\": \\\"2019-12-24T00:00:00\\\", \\\"num_authors\\\": 70.0}, {\\\"day\\\": \\\"2019-12-25T00:00:00\\\", \\\"num_authors\\\": 69.0}, {\\\"day\\\": \\\"2019-12-26T00:00:00\\\", \\\"num_authors\\\": 69.0}, {\\\"day\\\": \\\"2019-12-27T00:00:00\\\", \\\"num_authors\\\": 72.0}, {\\\"day\\\": \\\"2019-12-28T00:00:00\\\", \\\"num_authors\\\": 72.0}, {\\\"day\\\": \\\"2019-12-29T00:00:00\\\", \\\"num_authors\\\": 72.0}, {\\\"day\\\": \\\"2019-12-30T00:00:00\\\", \\\"num_authors\\\": 71.0}, {\\\"day\\\": \\\"2019-12-31T00:00:00\\\", \\\"num_authors\\\": 69.0}, {\\\"day\\\": \\\"2020-01-01T00:00:00\\\", \\\"num_authors\\\": 66.0}, {\\\"day\\\": \\\"2020-01-02T00:00:00\\\", \\\"num_authors\\\": 61.0}, {\\\"day\\\": \\\"2020-01-03T00:00:00\\\", \\\"num_authors\\\": 63.0}, {\\\"day\\\": \\\"2020-01-04T00:00:00\\\", \\\"num_authors\\\": 63.0}, {\\\"day\\\": \\\"2020-01-05T00:00:00\\\", \\\"num_authors\\\": 64.0}, {\\\"day\\\": \\\"2020-01-06T00:00:00\\\", \\\"num_authors\\\": 64.0}, {\\\"day\\\": \\\"2020-01-07T00:00:00\\\", \\\"num_authors\\\": 63.0}, {\\\"day\\\": \\\"2020-01-08T00:00:00\\\", \\\"num_authors\\\": 65.0}, {\\\"day\\\": \\\"2020-01-09T00:00:00\\\", \\\"num_authors\\\": 66.0}, {\\\"day\\\": \\\"2020-01-10T00:00:00\\\", \\\"num_authors\\\": 67.0}, {\\\"day\\\": \\\"2020-01-11T00:00:00\\\", \\\"num_authors\\\": 67.0}, {\\\"day\\\": \\\"2020-01-12T00:00:00\\\", \\\"num_authors\\\": 67.0}, {\\\"day\\\": \\\"2020-01-13T00:00:00\\\", \\\"num_authors\\\": 67.0}, {\\\"day\\\": \\\"2020-01-14T00:00:00\\\", \\\"num_authors\\\": 72.0}, {\\\"day\\\": \\\"2020-01-15T00:00:00\\\", \\\"num_authors\\\": 72.0}, {\\\"day\\\": \\\"2020-01-16T00:00:00\\\", \\\"num_authors\\\": 73.0}, {\\\"day\\\": \\\"2020-01-17T00:00:00\\\", \\\"num_authors\\\": 72.0}, {\\\"day\\\": \\\"2020-01-18T00:00:00\\\", \\\"num_authors\\\": 71.0}, {\\\"day\\\": \\\"2020-01-19T00:00:00\\\", \\\"num_authors\\\": 72.0}, {\\\"day\\\": \\\"2020-01-20T00:00:00\\\", \\\"num_authors\\\": 71.0}, {\\\"day\\\": \\\"2020-01-21T00:00:00\\\", \\\"num_authors\\\": 72.0}, {\\\"day\\\": \\\"2020-01-22T00:00:00\\\", \\\"num_authors\\\": 74.0}, {\\\"day\\\": \\\"2020-01-23T00:00:00\\\", \\\"num_authors\\\": 75.0}, {\\\"day\\\": \\\"2020-01-24T00:00:00\\\", \\\"num_authors\\\": 72.0}, {\\\"day\\\": \\\"2020-01-25T00:00:00\\\", \\\"num_authors\\\": 72.0}, {\\\"day\\\": \\\"2020-01-26T00:00:00\\\", \\\"num_authors\\\": 71.0}, {\\\"day\\\": \\\"2020-01-27T00:00:00\\\", \\\"num_authors\\\": 70.0}, {\\\"day\\\": \\\"2020-01-28T00:00:00\\\", \\\"num_authors\\\": 71.0}, {\\\"day\\\": \\\"2020-01-29T00:00:00\\\", \\\"num_authors\\\": 70.0}, {\\\"day\\\": \\\"2020-01-30T00:00:00\\\", \\\"num_authors\\\": 72.0}, {\\\"day\\\": \\\"2020-01-31T00:00:00\\\", \\\"num_authors\\\": 71.0}, {\\\"day\\\": \\\"2020-02-01T00:00:00\\\", \\\"num_authors\\\": 73.0}, {\\\"day\\\": \\\"2020-02-02T00:00:00\\\", \\\"num_authors\\\": 74.0}, {\\\"day\\\": \\\"2020-02-03T00:00:00\\\", \\\"num_authors\\\": 73.0}, {\\\"day\\\": \\\"2020-02-04T00:00:00\\\", \\\"num_authors\\\": 75.0}, {\\\"day\\\": \\\"2020-02-05T00:00:00\\\", \\\"num_authors\\\": 83.0}, {\\\"day\\\": \\\"2020-02-06T00:00:00\\\", \\\"num_authors\\\": 85.0}, {\\\"day\\\": \\\"2020-02-07T00:00:00\\\", \\\"num_authors\\\": 84.0}, {\\\"day\\\": \\\"2020-02-08T00:00:00\\\", \\\"num_authors\\\": 85.0}, {\\\"day\\\": \\\"2020-02-09T00:00:00\\\", \\\"num_authors\\\": 85.0}, {\\\"day\\\": \\\"2020-02-10T00:00:00\\\", \\\"num_authors\\\": 84.0}, {\\\"day\\\": \\\"2020-02-11T00:00:00\\\", \\\"num_authors\\\": 86.0}, {\\\"day\\\": \\\"2020-02-12T00:00:00\\\", \\\"num_authors\\\": 89.0}, {\\\"day\\\": \\\"2020-02-13T00:00:00\\\", \\\"num_authors\\\": 90.0}, {\\\"day\\\": \\\"2020-02-14T00:00:00\\\", \\\"num_authors\\\": 89.0}, {\\\"day\\\": \\\"2020-02-15T00:00:00\\\", \\\"num_authors\\\": 89.0}, {\\\"day\\\": \\\"2020-02-16T00:00:00\\\", \\\"num_authors\\\": 89.0}, {\\\"day\\\": \\\"2020-02-17T00:00:00\\\", \\\"num_authors\\\": 87.0}, {\\\"day\\\": \\\"2020-02-18T00:00:00\\\", \\\"num_authors\\\": 84.0}, {\\\"day\\\": \\\"2020-02-19T00:00:00\\\", \\\"num_authors\\\": 87.0}, {\\\"day\\\": \\\"2020-02-20T00:00:00\\\", \\\"num_authors\\\": 88.0}, {\\\"day\\\": \\\"2020-02-21T00:00:00\\\", \\\"num_authors\\\": 93.0}, {\\\"day\\\": \\\"2020-02-22T00:00:00\\\", \\\"num_authors\\\": 93.0}, {\\\"day\\\": \\\"2020-02-23T00:00:00\\\", \\\"num_authors\\\": 94.0}, {\\\"day\\\": \\\"2020-02-24T00:00:00\\\", \\\"num_authors\\\": 97.0}, {\\\"day\\\": \\\"2020-02-25T00:00:00\\\", \\\"num_authors\\\": 97.0}, {\\\"day\\\": \\\"2020-02-26T00:00:00\\\", \\\"num_authors\\\": 100.0}, {\\\"day\\\": \\\"2020-02-27T00:00:00\\\", \\\"num_authors\\\": 99.0}, {\\\"day\\\": \\\"2020-02-28T00:00:00\\\", \\\"num_authors\\\": 99.0}, {\\\"day\\\": \\\"2020-02-29T00:00:00\\\", \\\"num_authors\\\": 99.0}, {\\\"day\\\": \\\"2020-03-01T00:00:00\\\", \\\"num_authors\\\": 99.0}, {\\\"day\\\": \\\"2020-03-02T00:00:00\\\", \\\"num_authors\\\": 96.0}, {\\\"day\\\": \\\"2020-03-03T00:00:00\\\", \\\"num_authors\\\": 99.0}, {\\\"day\\\": \\\"2020-03-04T00:00:00\\\", \\\"num_authors\\\": 92.0}, {\\\"day\\\": \\\"2020-03-05T00:00:00\\\", \\\"num_authors\\\": 94.0}, {\\\"day\\\": \\\"2020-03-06T00:00:00\\\", \\\"num_authors\\\": 95.0}, {\\\"day\\\": \\\"2020-03-07T00:00:00\\\", \\\"num_authors\\\": 96.0}, {\\\"day\\\": \\\"2020-03-08T00:00:00\\\", \\\"num_authors\\\": 96.0}, {\\\"day\\\": \\\"2020-03-09T00:00:00\\\", \\\"num_authors\\\": 98.0}, {\\\"day\\\": \\\"2020-03-10T00:00:00\\\", \\\"num_authors\\\": 96.0}, {\\\"day\\\": \\\"2020-03-11T00:00:00\\\", \\\"num_authors\\\": 95.0}, {\\\"day\\\": \\\"2020-03-12T00:00:00\\\", \\\"num_authors\\\": 94.0}, {\\\"day\\\": \\\"2020-03-13T00:00:00\\\", \\\"num_authors\\\": 95.0}, {\\\"day\\\": \\\"2020-03-14T00:00:00\\\", \\\"num_authors\\\": 95.0}, {\\\"day\\\": \\\"2020-03-15T00:00:00\\\", \\\"num_authors\\\": 96.0}, {\\\"day\\\": \\\"2020-03-16T00:00:00\\\", \\\"num_authors\\\": 99.0}, {\\\"day\\\": \\\"2020-03-17T00:00:00\\\", \\\"num_authors\\\": 96.0}, {\\\"day\\\": \\\"2020-03-18T00:00:00\\\", \\\"num_authors\\\": 96.0}, {\\\"day\\\": \\\"2020-03-19T00:00:00\\\", \\\"num_authors\\\": 98.0}, {\\\"day\\\": \\\"2020-03-20T00:00:00\\\", \\\"num_authors\\\": 93.0}, {\\\"day\\\": \\\"2020-03-21T00:00:00\\\", \\\"num_authors\\\": 93.0}, {\\\"day\\\": \\\"2020-03-22T00:00:00\\\", \\\"num_authors\\\": 93.0}, {\\\"day\\\": \\\"2020-03-23T00:00:00\\\", \\\"num_authors\\\": 94.0}, {\\\"day\\\": \\\"2020-03-24T00:00:00\\\", \\\"num_authors\\\": 98.0}, {\\\"day\\\": \\\"2020-03-25T00:00:00\\\", \\\"num_authors\\\": 96.0}, {\\\"day\\\": \\\"2020-03-26T00:00:00\\\", \\\"num_authors\\\": 97.0}, {\\\"day\\\": \\\"2020-03-27T00:00:00\\\", \\\"num_authors\\\": 97.0}, {\\\"day\\\": \\\"2020-03-28T00:00:00\\\", \\\"num_authors\\\": 97.0}, {\\\"day\\\": \\\"2020-03-30T00:00:00\\\", \\\"num_authors\\\": 97.0}, {\\\"day\\\": \\\"2020-03-31T00:00:00\\\", \\\"num_authors\\\": 96.0}, {\\\"day\\\": \\\"2020-04-01T00:00:00\\\", \\\"num_authors\\\": 93.0}, {\\\"day\\\": \\\"2020-04-02T00:00:00\\\", \\\"num_authors\\\": 91.0}, {\\\"day\\\": \\\"2020-04-03T00:00:00\\\", \\\"num_authors\\\": 95.0}, {\\\"day\\\": \\\"2020-04-04T00:00:00\\\", \\\"num_authors\\\": 96.0}, {\\\"day\\\": \\\"2020-04-05T00:00:00\\\", \\\"num_authors\\\": 97.0}, {\\\"day\\\": \\\"2020-04-06T00:00:00\\\", \\\"num_authors\\\": 96.0}, {\\\"day\\\": \\\"2020-04-07T00:00:00\\\", \\\"num_authors\\\": 97.0}, {\\\"day\\\": \\\"2020-04-08T00:00:00\\\", \\\"num_authors\\\": 97.0}, {\\\"day\\\": \\\"2020-04-09T00:00:00\\\", \\\"num_authors\\\": 96.0}, {\\\"day\\\": \\\"2020-04-10T00:00:00\\\", \\\"num_authors\\\": 93.0}, {\\\"day\\\": \\\"2020-04-11T00:00:00\\\", \\\"num_authors\\\": 92.0}, {\\\"day\\\": \\\"2020-04-12T00:00:00\\\", \\\"num_authors\\\": 90.0}, {\\\"day\\\": \\\"2020-04-13T00:00:00\\\", \\\"num_authors\\\": 91.0}, {\\\"day\\\": \\\"2020-04-14T00:00:00\\\", \\\"num_authors\\\": 90.0}, {\\\"day\\\": \\\"2020-04-15T00:00:00\\\", \\\"num_authors\\\": 91.0}, {\\\"day\\\": \\\"2020-04-16T00:00:00\\\", \\\"num_authors\\\": 89.0}, {\\\"day\\\": \\\"2020-04-17T00:00:00\\\", \\\"num_authors\\\": 88.0}, {\\\"day\\\": \\\"2020-04-18T00:00:00\\\", \\\"num_authors\\\": 88.0}, {\\\"day\\\": \\\"2020-04-19T00:00:00\\\", \\\"num_authors\\\": 88.0}, {\\\"day\\\": \\\"2020-04-20T00:00:00\\\", \\\"num_authors\\\": 88.0}, {\\\"day\\\": \\\"2020-04-21T00:00:00\\\", \\\"num_authors\\\": 82.0}, {\\\"day\\\": \\\"2020-04-22T00:00:00\\\", \\\"num_authors\\\": 83.0}, {\\\"day\\\": \\\"2020-04-23T00:00:00\\\", \\\"num_authors\\\": 83.0}, {\\\"day\\\": \\\"2020-04-24T00:00:00\\\", \\\"num_authors\\\": 82.0}, {\\\"day\\\": \\\"2020-04-25T00:00:00\\\", \\\"num_authors\\\": 82.0}, {\\\"day\\\": \\\"2020-04-26T00:00:00\\\", \\\"num_authors\\\": 82.0}, {\\\"day\\\": \\\"2020-04-27T00:00:00\\\", \\\"num_authors\\\": 84.0}, {\\\"day\\\": \\\"2020-04-28T00:00:00\\\", \\\"num_authors\\\": 81.0}, {\\\"day\\\": \\\"2020-04-29T00:00:00\\\", \\\"num_authors\\\": 82.0}, {\\\"day\\\": \\\"2020-04-30T00:00:00\\\", \\\"num_authors\\\": 83.0}, {\\\"day\\\": \\\"2020-05-01T00:00:00\\\", \\\"num_authors\\\": 81.0}, {\\\"day\\\": \\\"2020-05-02T00:00:00\\\", \\\"num_authors\\\": 80.0}, {\\\"day\\\": \\\"2020-05-03T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2020-05-04T00:00:00\\\", \\\"num_authors\\\": 78.0}, {\\\"day\\\": \\\"2020-05-05T00:00:00\\\", \\\"num_authors\\\": 80.0}, {\\\"day\\\": \\\"2020-05-06T00:00:00\\\", \\\"num_authors\\\": 78.0}, {\\\"day\\\": \\\"2020-05-07T00:00:00\\\", \\\"num_authors\\\": 78.0}, {\\\"day\\\": \\\"2020-05-08T00:00:00\\\", \\\"num_authors\\\": 78.0}, {\\\"day\\\": \\\"2020-05-09T00:00:00\\\", \\\"num_authors\\\": 80.0}, {\\\"day\\\": \\\"2020-05-10T00:00:00\\\", \\\"num_authors\\\": 82.0}, {\\\"day\\\": \\\"2020-05-11T00:00:00\\\", \\\"num_authors\\\": 80.0}, {\\\"day\\\": \\\"2020-05-12T00:00:00\\\", \\\"num_authors\\\": 81.0}, {\\\"day\\\": \\\"2020-05-13T00:00:00\\\", \\\"num_authors\\\": 82.0}, {\\\"day\\\": \\\"2020-05-14T00:00:00\\\", \\\"num_authors\\\": 84.0}, {\\\"day\\\": \\\"2020-05-15T00:00:00\\\", \\\"num_authors\\\": 82.0}, {\\\"day\\\": \\\"2020-05-16T00:00:00\\\", \\\"num_authors\\\": 82.0}, {\\\"day\\\": \\\"2020-05-17T00:00:00\\\", \\\"num_authors\\\": 81.0}, {\\\"day\\\": \\\"2020-05-18T00:00:00\\\", \\\"num_authors\\\": 80.0}, {\\\"day\\\": \\\"2020-05-19T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2020-05-20T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2020-05-21T00:00:00\\\", \\\"num_authors\\\": 80.0}, {\\\"day\\\": \\\"2020-05-22T00:00:00\\\", \\\"num_authors\\\": 80.0}, {\\\"day\\\": \\\"2020-05-23T00:00:00\\\", \\\"num_authors\\\": 81.0}, {\\\"day\\\": \\\"2020-05-24T00:00:00\\\", \\\"num_authors\\\": 82.0}, {\\\"day\\\": \\\"2020-05-25T00:00:00\\\", \\\"num_authors\\\": 82.0}, {\\\"day\\\": \\\"2020-05-26T00:00:00\\\", \\\"num_authors\\\": 84.0}, {\\\"day\\\": \\\"2020-05-27T00:00:00\\\", \\\"num_authors\\\": 82.0}, {\\\"day\\\": \\\"2020-05-28T00:00:00\\\", \\\"num_authors\\\": 80.0}, {\\\"day\\\": \\\"2020-05-29T00:00:00\\\", \\\"num_authors\\\": 80.0}, {\\\"day\\\": \\\"2020-05-30T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2020-05-31T00:00:00\\\", \\\"num_authors\\\": 78.0}, {\\\"day\\\": \\\"2020-06-01T00:00:00\\\", \\\"num_authors\\\": 81.0}, {\\\"day\\\": \\\"2020-06-02T00:00:00\\\", \\\"num_authors\\\": 80.0}, {\\\"day\\\": \\\"2020-06-03T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2020-06-04T00:00:00\\\", \\\"num_authors\\\": 81.0}, {\\\"day\\\": \\\"2020-06-05T00:00:00\\\", \\\"num_authors\\\": 82.0}, {\\\"day\\\": \\\"2020-06-06T00:00:00\\\", \\\"num_authors\\\": 82.0}, {\\\"day\\\": \\\"2020-06-07T00:00:00\\\", \\\"num_authors\\\": 81.0}, {\\\"day\\\": \\\"2020-06-08T00:00:00\\\", \\\"num_authors\\\": 82.0}, {\\\"day\\\": \\\"2020-06-09T00:00:00\\\", \\\"num_authors\\\": 81.0}, {\\\"day\\\": \\\"2020-06-10T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2020-06-11T00:00:00\\\", \\\"num_authors\\\": 76.0}, {\\\"day\\\": \\\"2020-06-12T00:00:00\\\", \\\"num_authors\\\": 75.0}, {\\\"day\\\": \\\"2020-06-13T00:00:00\\\", \\\"num_authors\\\": 75.0}, {\\\"day\\\": \\\"2020-06-14T00:00:00\\\", \\\"num_authors\\\": 74.0}, {\\\"day\\\": \\\"2020-06-15T00:00:00\\\", \\\"num_authors\\\": 76.0}, {\\\"day\\\": \\\"2020-06-16T00:00:00\\\", \\\"num_authors\\\": 76.0}, {\\\"day\\\": \\\"2020-06-17T00:00:00\\\", \\\"num_authors\\\": 78.0}, {\\\"day\\\": \\\"2020-06-18T00:00:00\\\", \\\"num_authors\\\": 78.0}, {\\\"day\\\": \\\"2020-06-19T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2020-06-20T00:00:00\\\", \\\"num_authors\\\": 80.0}, {\\\"day\\\": \\\"2020-06-21T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2020-06-22T00:00:00\\\", \\\"num_authors\\\": 83.0}, {\\\"day\\\": \\\"2020-06-23T00:00:00\\\", \\\"num_authors\\\": 83.0}, {\\\"day\\\": \\\"2020-06-24T00:00:00\\\", \\\"num_authors\\\": 82.0}, {\\\"day\\\": \\\"2020-06-25T00:00:00\\\", \\\"num_authors\\\": 82.0}, {\\\"day\\\": \\\"2020-06-26T00:00:00\\\", \\\"num_authors\\\": 81.0}, {\\\"day\\\": \\\"2020-06-27T00:00:00\\\", \\\"num_authors\\\": 80.0}, {\\\"day\\\": \\\"2020-06-28T00:00:00\\\", \\\"num_authors\\\": 80.0}, {\\\"day\\\": \\\"2020-06-29T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2020-06-30T00:00:00\\\", \\\"num_authors\\\": 81.0}, {\\\"day\\\": \\\"2020-07-01T00:00:00\\\", \\\"num_authors\\\": 82.0}, {\\\"day\\\": \\\"2020-07-02T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2020-07-03T00:00:00\\\", \\\"num_authors\\\": 76.0}, {\\\"day\\\": \\\"2020-07-04T00:00:00\\\", \\\"num_authors\\\": 78.0}, {\\\"day\\\": \\\"2020-07-05T00:00:00\\\", \\\"num_authors\\\": 78.0}, {\\\"day\\\": \\\"2020-07-06T00:00:00\\\", \\\"num_authors\\\": 78.0}, {\\\"day\\\": \\\"2020-07-07T00:00:00\\\", \\\"num_authors\\\": 79.0}, {\\\"day\\\": \\\"2020-07-08T00:00:00\\\", \\\"num_authors\\\": 83.0}, {\\\"day\\\": \\\"2020-07-09T00:00:00\\\", \\\"num_authors\\\": 84.0}, {\\\"day\\\": \\\"2020-07-10T00:00:00\\\", \\\"num_authors\\\": 85.0}, {\\\"day\\\": \\\"2020-07-11T00:00:00\\\", \\\"num_authors\\\": 85.0}, {\\\"day\\\": \\\"2020-07-12T00:00:00\\\", \\\"num_authors\\\": 85.0}, {\\\"day\\\": \\\"2020-07-13T00:00:00\\\", \\\"num_authors\\\": 84.0}, {\\\"day\\\": \\\"2020-07-14T00:00:00\\\", \\\"num_authors\\\": 83.0}, {\\\"day\\\": \\\"2020-07-15T00:00:00\\\", \\\"num_authors\\\": 81.0}, {\\\"day\\\": \\\"2020-07-16T00:00:00\\\", \\\"num_authors\\\": 81.0}, {\\\"day\\\": \\\"2020-07-17T00:00:00\\\", \\\"num_authors\\\": 85.0}, {\\\"day\\\": \\\"2020-07-18T00:00:00\\\", \\\"num_authors\\\": 85.0}, {\\\"day\\\": \\\"2020-07-20T00:00:00\\\", \\\"num_authors\\\": 80.0}, {\\\"day\\\": \\\"2020-07-21T00:00:00\\\", \\\"num_authors\\\": 76.0}, {\\\"day\\\": \\\"2020-07-22T00:00:00\\\", \\\"num_authors\\\": 81.0}, {\\\"day\\\": \\\"2020-07-23T00:00:00\\\", \\\"num_authors\\\": 85.0}, {\\\"day\\\": \\\"2020-07-24T00:00:00\\\", \\\"num_authors\\\": 85.0}]}}, {\\\"mode\\\": \\\"vega-lite\\\"});\\n\",\n       \"</script>\"\n      ],\n      \"text/plain\": [\n       \"alt.LayerChart(...)\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"import altair as alt\\n\",\n    \"chart = alt.Chart(creators_df, title= \\\"Unique PR Authors (Last 28 Days)\\\")\\n\",\n    \"line = chart.mark_line().encode(\\n\",\n    \"  x= alt.X('day', title = \\\"Day\\\"),\\n\",\n    \"  y=alt.Y(\\\"num_authors\\\", title=\\\"# Unique Authors\\\"),    \\n\",\n    \")\\n\",\n    \"\\n\",\n    \"point = line + line.mark_point()\\n\",\n    \"point.interactive()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Number Prs\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"pr_impulse=pd.Series(data=merged_all_prs[\\\"pr_id\\\"].values,index=merged_all_prs[\\\"pr_date\\\"])\\n\",\n    \"pr_impulse=pr_impulse.sort_index()\\n\",\n    \"\\n\",\n    \"unique_prs = pr_impulse.rolling('28d').apply(lambda arr: pd.Series(arr).nunique())\\n\",\n    \"\\n\",\n    \"prs_df = pd.DataFrame({\\\"day\\\": unique_prs.index, \\\"num_prs\\\": unique_prs.values})\\n\",\n    \"prs_df = prs_df.groupby(\\\"day\\\", as_index=False).max()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"\\n\",\n       \"<div id=\\\"altair-viz-d7fa0e20f22d4ae3a4ccec9f000ca39e\\\"></div>\\n\",\n       \"<script type=\\\"text/javascript\\\">\\n\",\n       \"  (function(spec, embedOpt){\\n\",\n       \"    let outputDiv = document.currentScript.previousElementSibling;\\n\",\n       \"    if (outputDiv.id !== \\\"altair-viz-d7fa0e20f22d4ae3a4ccec9f000ca39e\\\") {\\n\",\n       \"      outputDiv = document.getElementById(\\\"altair-viz-d7fa0e20f22d4ae3a4ccec9f000ca39e\\\");\\n\",\n       \"    }\\n\",\n       \"    const paths = {\\n\",\n       \"      \\\"vega\\\": \\\"https://cdn.jsdelivr.net/npm//vega@5?noext\\\",\\n\",\n       \"      \\\"vega-lib\\\": \\\"https://cdn.jsdelivr.net/npm//vega-lib?noext\\\",\\n\",\n       \"      \\\"vega-lite\\\": \\\"https://cdn.jsdelivr.net/npm//vega-lite@4.8.1?noext\\\",\\n\",\n       \"      \\\"vega-embed\\\": \\\"https://cdn.jsdelivr.net/npm//vega-embed@6?noext\\\",\\n\",\n       \"    };\\n\",\n       \"\\n\",\n       \"    function loadScript(lib) {\\n\",\n       \"      return new Promise(function(resolve, reject) {\\n\",\n       \"        var s = document.createElement('script');\\n\",\n       \"        s.src = paths[lib];\\n\",\n       \"        s.async = true;\\n\",\n       \"        s.onload = () => resolve(paths[lib]);\\n\",\n       \"        s.onerror = () => reject(`Error loading script: ${paths[lib]}`);\\n\",\n       \"        document.getElementsByTagName(\\\"head\\\")[0].appendChild(s);\\n\",\n       \"      });\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    function showError(err) {\\n\",\n       \"      outputDiv.innerHTML = `<div class=\\\"error\\\" style=\\\"color:red;\\\">${err}</div>`;\\n\",\n       \"      throw err;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    function displayChart(vegaEmbed) {\\n\",\n       \"      vegaEmbed(outputDiv, spec, embedOpt)\\n\",\n       \"        .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    if(typeof define === \\\"function\\\" && define.amd) {\\n\",\n       \"      requirejs.config({paths});\\n\",\n       \"      require([\\\"vega-embed\\\"], displayChart, err => showError(`Error loading script: ${err.message}`));\\n\",\n       \"    } else if (typeof vegaEmbed === \\\"function\\\") {\\n\",\n       \"      displayChart(vegaEmbed);\\n\",\n       \"    } else {\\n\",\n       \"      loadScript(\\\"vega\\\")\\n\",\n       \"        .then(() => loadScript(\\\"vega-lite\\\"))\\n\",\n       \"        .then(() => loadScript(\\\"vega-embed\\\"))\\n\",\n       \"        .catch(showError)\\n\",\n       \"        .then(() => displayChart(vegaEmbed));\\n\",\n       \"    }\\n\",\n       \"  })({\\\"config\\\": {\\\"view\\\": {\\\"continuousWidth\\\": 400, \\\"continuousHeight\\\": 300}}, \\\"layer\\\": [{\\\"mark\\\": \\\"line\\\", \\\"encoding\\\": {\\\"x\\\": {\\\"type\\\": \\\"temporal\\\", \\\"field\\\": \\\"day\\\", \\\"title\\\": \\\"Day\\\"}, \\\"y\\\": {\\\"type\\\": \\\"quantitative\\\", \\\"field\\\": \\\"num_prs\\\", \\\"title\\\": \\\"# PRs\\\"}}, \\\"selection\\\": {\\\"selector002\\\": {\\\"type\\\": \\\"interval\\\", \\\"bind\\\": \\\"scales\\\", \\\"encodings\\\": [\\\"x\\\", \\\"y\\\"]}}, \\\"title\\\": \\\"Merged PRs (Last 28 Days)\\\"}, {\\\"mark\\\": \\\"point\\\", \\\"encoding\\\": {\\\"x\\\": {\\\"type\\\": \\\"temporal\\\", \\\"field\\\": \\\"day\\\", \\\"title\\\": \\\"Day\\\"}, \\\"y\\\": {\\\"type\\\": \\\"quantitative\\\", \\\"field\\\": \\\"num_prs\\\", \\\"title\\\": \\\"# PRs\\\"}}, \\\"title\\\": \\\"Merged PRs (Last 28 Days)\\\"}], \\\"data\\\": {\\\"name\\\": \\\"data-47e800b15acbfa7eadc2bbef262fe9e5\\\"}, \\\"$schema\\\": \\\"https://vega.github.io/schema/vega-lite/v4.8.1.json\\\", \\\"datasets\\\": {\\\"data-47e800b15acbfa7eadc2bbef262fe9e5\\\": [{\\\"day\\\": \\\"2019-08-01T00:00:00\\\", \\\"num_prs\\\": 14.0}, {\\\"day\\\": \\\"2019-08-02T00:00:00\\\", \\\"num_prs\\\": 25.0}, {\\\"day\\\": \\\"2019-08-03T00:00:00\\\", \\\"num_prs\\\": 32.0}, {\\\"day\\\": \\\"2019-08-04T00:00:00\\\", \\\"num_prs\\\": 36.0}, {\\\"day\\\": \\\"2019-08-05T00:00:00\\\", \\\"num_prs\\\": 49.0}, {\\\"day\\\": \\\"2019-08-06T00:00:00\\\", \\\"num_prs\\\": 79.0}, {\\\"day\\\": \\\"2019-08-07T00:00:00\\\", \\\"num_prs\\\": 100.0}, {\\\"day\\\": \\\"2019-08-08T00:00:00\\\", \\\"num_prs\\\": 118.0}, {\\\"day\\\": \\\"2019-08-09T00:00:00\\\", \\\"num_prs\\\": 137.0}, {\\\"day\\\": \\\"2019-08-10T00:00:00\\\", \\\"num_prs\\\": 143.0}, {\\\"day\\\": \\\"2019-08-11T00:00:00\\\", \\\"num_prs\\\": 146.0}, {\\\"day\\\": \\\"2019-08-12T00:00:00\\\", \\\"num_prs\\\": 166.0}, {\\\"day\\\": \\\"2019-08-13T00:00:00\\\", \\\"num_prs\\\": 186.0}, {\\\"day\\\": \\\"2019-08-14T00:00:00\\\", \\\"num_prs\\\": 201.0}, {\\\"day\\\": \\\"2019-08-15T00:00:00\\\", \\\"num_prs\\\": 219.0}, {\\\"day\\\": \\\"2019-08-16T00:00:00\\\", \\\"num_prs\\\": 250.0}, {\\\"day\\\": \\\"2019-08-17T00:00:00\\\", \\\"num_prs\\\": 257.0}, {\\\"day\\\": \\\"2019-08-18T00:00:00\\\", \\\"num_prs\\\": 261.0}, {\\\"day\\\": \\\"2019-08-19T00:00:00\\\", \\\"num_prs\\\": 283.0}, {\\\"day\\\": \\\"2019-08-20T00:00:00\\\", \\\"num_prs\\\": 306.0}, {\\\"day\\\": \\\"2019-08-21T00:00:00\\\", \\\"num_prs\\\": 333.0}, {\\\"day\\\": \\\"2019-08-22T00:00:00\\\", \\\"num_prs\\\": 366.0}, {\\\"day\\\": \\\"2019-08-23T00:00:00\\\", \\\"num_prs\\\": 387.0}, {\\\"day\\\": \\\"2019-08-24T00:00:00\\\", \\\"num_prs\\\": 395.0}, {\\\"day\\\": \\\"2019-08-25T00:00:00\\\", \\\"num_prs\\\": 397.0}, {\\\"day\\\": \\\"2019-08-26T00:00:00\\\", \\\"num_prs\\\": 406.0}, {\\\"day\\\": \\\"2019-08-28T00:00:00\\\", \\\"num_prs\\\": 413.0}, {\\\"day\\\": \\\"2019-08-29T00:00:00\\\", \\\"num_prs\\\": 421.0}, {\\\"day\\\": \\\"2019-08-30T00:00:00\\\", \\\"num_prs\\\": 434.0}, {\\\"day\\\": \\\"2019-08-31T00:00:00\\\", \\\"num_prs\\\": 428.0}, {\\\"day\\\": \\\"2019-09-01T00:00:00\\\", \\\"num_prs\\\": 425.0}, {\\\"day\\\": \\\"2019-09-02T00:00:00\\\", \\\"num_prs\\\": 416.0}, {\\\"day\\\": \\\"2019-09-03T00:00:00\\\", \\\"num_prs\\\": 406.0}, {\\\"day\\\": \\\"2019-09-04T00:00:00\\\", \\\"num_prs\\\": 411.0}, {\\\"day\\\": \\\"2019-09-05T00:00:00\\\", \\\"num_prs\\\": 412.0}, {\\\"day\\\": \\\"2019-09-06T00:00:00\\\", \\\"num_prs\\\": 412.0}, {\\\"day\\\": \\\"2019-09-07T00:00:00\\\", \\\"num_prs\\\": 410.0}, {\\\"day\\\": \\\"2019-09-08T00:00:00\\\", \\\"num_prs\\\": 408.0}, {\\\"day\\\": \\\"2019-09-09T00:00:00\\\", \\\"num_prs\\\": 407.0}, {\\\"day\\\": \\\"2019-09-10T00:00:00\\\", \\\"num_prs\\\": 404.0}, {\\\"day\\\": \\\"2019-09-11T00:00:00\\\", \\\"num_prs\\\": 401.0}, {\\\"day\\\": \\\"2019-09-12T00:00:00\\\", \\\"num_prs\\\": 388.0}, {\\\"day\\\": \\\"2019-09-13T00:00:00\\\", \\\"num_prs\\\": 369.0}, {\\\"day\\\": \\\"2019-09-14T00:00:00\\\", \\\"num_prs\\\": 364.0}, {\\\"day\\\": \\\"2019-09-15T00:00:00\\\", \\\"num_prs\\\": 370.0}, {\\\"day\\\": \\\"2019-09-16T00:00:00\\\", \\\"num_prs\\\": 371.0}, {\\\"day\\\": \\\"2019-09-17T00:00:00\\\", \\\"num_prs\\\": 377.0}, {\\\"day\\\": \\\"2019-09-18T00:00:00\\\", \\\"num_prs\\\": 370.0}, {\\\"day\\\": \\\"2019-09-19T00:00:00\\\", \\\"num_prs\\\": 356.0}, {\\\"day\\\": \\\"2019-09-20T00:00:00\\\", \\\"num_prs\\\": 347.0}, {\\\"day\\\": \\\"2019-09-21T00:00:00\\\", \\\"num_prs\\\": 352.0}, {\\\"day\\\": \\\"2019-09-22T00:00:00\\\", \\\"num_prs\\\": 356.0}, {\\\"day\\\": \\\"2019-09-23T00:00:00\\\", \\\"num_prs\\\": 375.0}, {\\\"day\\\": \\\"2019-09-24T00:00:00\\\", \\\"num_prs\\\": 396.0}, {\\\"day\\\": \\\"2019-09-25T00:00:00\\\", \\\"num_prs\\\": 413.0}, {\\\"day\\\": \\\"2019-09-26T00:00:00\\\", \\\"num_prs\\\": 417.0}, {\\\"day\\\": \\\"2019-09-27T00:00:00\\\", \\\"num_prs\\\": 413.0}, {\\\"day\\\": \\\"2019-09-28T00:00:00\\\", \\\"num_prs\\\": 419.0}, {\\\"day\\\": \\\"2019-09-29T00:00:00\\\", \\\"num_prs\\\": 428.0}, {\\\"day\\\": \\\"2019-09-30T00:00:00\\\", \\\"num_prs\\\": 443.0}, {\\\"day\\\": \\\"2019-10-01T00:00:00\\\", \\\"num_prs\\\": 440.0}, {\\\"day\\\": \\\"2019-10-02T00:00:00\\\", \\\"num_prs\\\": 432.0}, {\\\"day\\\": \\\"2019-10-03T00:00:00\\\", \\\"num_prs\\\": 436.0}, {\\\"day\\\": \\\"2019-10-04T00:00:00\\\", \\\"num_prs\\\": 437.0}, {\\\"day\\\": \\\"2019-10-05T00:00:00\\\", \\\"num_prs\\\": 444.0}, {\\\"day\\\": \\\"2019-10-06T00:00:00\\\", \\\"num_prs\\\": 447.0}, {\\\"day\\\": \\\"2019-10-07T00:00:00\\\", \\\"num_prs\\\": 442.0}, {\\\"day\\\": \\\"2019-10-08T00:00:00\\\", \\\"num_prs\\\": 447.0}, {\\\"day\\\": \\\"2019-10-09T00:00:00\\\", \\\"num_prs\\\": 459.0}, {\\\"day\\\": \\\"2019-10-10T00:00:00\\\", \\\"num_prs\\\": 480.0}, {\\\"day\\\": \\\"2019-10-11T00:00:00\\\", \\\"num_prs\\\": 496.0}, {\\\"day\\\": \\\"2019-10-12T00:00:00\\\", \\\"num_prs\\\": 515.0}, {\\\"day\\\": \\\"2019-10-13T00:00:00\\\", \\\"num_prs\\\": 511.0}, {\\\"day\\\": \\\"2019-10-14T00:00:00\\\", \\\"num_prs\\\": 514.0}, {\\\"day\\\": \\\"2019-10-15T00:00:00\\\", \\\"num_prs\\\": 512.0}, {\\\"day\\\": \\\"2019-10-16T00:00:00\\\", \\\"num_prs\\\": 526.0}, {\\\"day\\\": \\\"2019-10-17T00:00:00\\\", \\\"num_prs\\\": 533.0}, {\\\"day\\\": \\\"2019-10-18T00:00:00\\\", \\\"num_prs\\\": 544.0}, {\\\"day\\\": \\\"2019-10-19T00:00:00\\\", \\\"num_prs\\\": 540.0}, {\\\"day\\\": \\\"2019-10-21T00:00:00\\\", \\\"num_prs\\\": 531.0}, {\\\"day\\\": \\\"2019-10-22T00:00:00\\\", \\\"num_prs\\\": 525.0}, {\\\"day\\\": \\\"2019-10-23T00:00:00\\\", \\\"num_prs\\\": 529.0}, {\\\"day\\\": \\\"2019-10-24T00:00:00\\\", \\\"num_prs\\\": 539.0}, {\\\"day\\\": \\\"2019-10-25T00:00:00\\\", \\\"num_prs\\\": 556.0}, {\\\"day\\\": \\\"2019-10-26T00:00:00\\\", \\\"num_prs\\\": 557.0}, {\\\"day\\\": \\\"2019-10-27T00:00:00\\\", \\\"num_prs\\\": 552.0}, {\\\"day\\\": \\\"2019-10-28T00:00:00\\\", \\\"num_prs\\\": 538.0}, {\\\"day\\\": \\\"2019-10-29T00:00:00\\\", \\\"num_prs\\\": 534.0}, {\\\"day\\\": \\\"2019-10-30T00:00:00\\\", \\\"num_prs\\\": 540.0}, {\\\"day\\\": \\\"2019-10-31T00:00:00\\\", \\\"num_prs\\\": 526.0}, {\\\"day\\\": \\\"2019-11-01T00:00:00\\\", \\\"num_prs\\\": 537.0}, {\\\"day\\\": \\\"2019-11-02T00:00:00\\\", \\\"num_prs\\\": 540.0}, {\\\"day\\\": \\\"2019-11-03T00:00:00\\\", \\\"num_prs\\\": 537.0}, {\\\"day\\\": \\\"2019-11-04T00:00:00\\\", \\\"num_prs\\\": 542.0}, {\\\"day\\\": \\\"2019-11-05T00:00:00\\\", \\\"num_prs\\\": 540.0}, {\\\"day\\\": \\\"2019-11-06T00:00:00\\\", \\\"num_prs\\\": 539.0}, {\\\"day\\\": \\\"2019-11-07T00:00:00\\\", \\\"num_prs\\\": 535.0}, {\\\"day\\\": \\\"2019-11-08T00:00:00\\\", \\\"num_prs\\\": 533.0}, {\\\"day\\\": \\\"2019-11-09T00:00:00\\\", \\\"num_prs\\\": 518.0}, {\\\"day\\\": \\\"2019-11-10T00:00:00\\\", \\\"num_prs\\\": 514.0}, {\\\"day\\\": \\\"2019-11-11T00:00:00\\\", \\\"num_prs\\\": 498.0}, {\\\"day\\\": \\\"2019-11-12T00:00:00\\\", \\\"num_prs\\\": 483.0}, {\\\"day\\\": \\\"2019-11-13T00:00:00\\\", \\\"num_prs\\\": 461.0}, {\\\"day\\\": \\\"2019-11-14T00:00:00\\\", \\\"num_prs\\\": 469.0}, {\\\"day\\\": \\\"2019-11-15T00:00:00\\\", \\\"num_prs\\\": 455.0}, {\\\"day\\\": \\\"2019-11-16T00:00:00\\\", \\\"num_prs\\\": 450.0}, {\\\"day\\\": \\\"2019-11-18T00:00:00\\\", \\\"num_prs\\\": 434.0}, {\\\"day\\\": \\\"2019-11-19T00:00:00\\\", \\\"num_prs\\\": 424.0}, {\\\"day\\\": \\\"2019-11-20T00:00:00\\\", \\\"num_prs\\\": 401.0}, {\\\"day\\\": \\\"2019-11-21T00:00:00\\\", \\\"num_prs\\\": 371.0}, {\\\"day\\\": \\\"2019-11-22T00:00:00\\\", \\\"num_prs\\\": 346.0}, {\\\"day\\\": \\\"2019-11-23T00:00:00\\\", \\\"num_prs\\\": 341.0}, {\\\"day\\\": \\\"2019-11-24T00:00:00\\\", \\\"num_prs\\\": 337.0}, {\\\"day\\\": \\\"2019-11-25T00:00:00\\\", \\\"num_prs\\\": 344.0}, {\\\"day\\\": \\\"2019-11-26T00:00:00\\\", \\\"num_prs\\\": 350.0}, {\\\"day\\\": \\\"2019-11-27T00:00:00\\\", \\\"num_prs\\\": 338.0}, {\\\"day\\\": \\\"2019-11-28T00:00:00\\\", \\\"num_prs\\\": 338.0}, {\\\"day\\\": \\\"2019-11-29T00:00:00\\\", \\\"num_prs\\\": 310.0}, {\\\"day\\\": \\\"2019-12-01T00:00:00\\\", \\\"num_prs\\\": 296.0}, {\\\"day\\\": \\\"2019-12-02T00:00:00\\\", \\\"num_prs\\\": 286.0}, {\\\"day\\\": \\\"2019-12-03T00:00:00\\\", \\\"num_prs\\\": 281.0}, {\\\"day\\\": \\\"2019-12-04T00:00:00\\\", \\\"num_prs\\\": 273.0}, {\\\"day\\\": \\\"2019-12-05T00:00:00\\\", \\\"num_prs\\\": 266.0}, {\\\"day\\\": \\\"2019-12-06T00:00:00\\\", \\\"num_prs\\\": 254.0}, {\\\"day\\\": \\\"2019-12-07T00:00:00\\\", \\\"num_prs\\\": 253.0}, {\\\"day\\\": \\\"2019-12-08T00:00:00\\\", \\\"num_prs\\\": 254.0}, {\\\"day\\\": \\\"2019-12-09T00:00:00\\\", \\\"num_prs\\\": 252.0}, {\\\"day\\\": \\\"2019-12-10T00:00:00\\\", \\\"num_prs\\\": 257.0}, {\\\"day\\\": \\\"2019-12-11T00:00:00\\\", \\\"num_prs\\\": 261.0}, {\\\"day\\\": \\\"2019-12-12T00:00:00\\\", \\\"num_prs\\\": 248.0}, {\\\"day\\\": \\\"2019-12-13T00:00:00\\\", \\\"num_prs\\\": 248.0}, {\\\"day\\\": \\\"2019-12-16T00:00:00\\\", \\\"num_prs\\\": 252.0}, {\\\"day\\\": \\\"2019-12-17T00:00:00\\\", \\\"num_prs\\\": 263.0}, {\\\"day\\\": \\\"2019-12-18T00:00:00\\\", \\\"num_prs\\\": 281.0}, {\\\"day\\\": \\\"2019-12-19T00:00:00\\\", \\\"num_prs\\\": 284.0}, {\\\"day\\\": \\\"2019-12-20T00:00:00\\\", \\\"num_prs\\\": 280.0}, {\\\"day\\\": \\\"2019-12-21T00:00:00\\\", \\\"num_prs\\\": 280.0}, {\\\"day\\\": \\\"2019-12-23T00:00:00\\\", \\\"num_prs\\\": 273.0}, {\\\"day\\\": \\\"2019-12-24T00:00:00\\\", \\\"num_prs\\\": 263.0}, {\\\"day\\\": \\\"2019-12-25T00:00:00\\\", \\\"num_prs\\\": 253.0}, {\\\"day\\\": \\\"2019-12-26T00:00:00\\\", \\\"num_prs\\\": 245.0}, {\\\"day\\\": \\\"2019-12-27T00:00:00\\\", \\\"num_prs\\\": 251.0}, {\\\"day\\\": \\\"2019-12-28T00:00:00\\\", \\\"num_prs\\\": 253.0}, {\\\"day\\\": \\\"2019-12-29T00:00:00\\\", \\\"num_prs\\\": 253.0}, {\\\"day\\\": \\\"2019-12-30T00:00:00\\\", \\\"num_prs\\\": 249.0}, {\\\"day\\\": \\\"2019-12-31T00:00:00\\\", \\\"num_prs\\\": 241.0}, {\\\"day\\\": \\\"2020-01-01T00:00:00\\\", \\\"num_prs\\\": 228.0}, {\\\"day\\\": \\\"2020-01-02T00:00:00\\\", \\\"num_prs\\\": 221.0}, {\\\"day\\\": \\\"2020-01-03T00:00:00\\\", \\\"num_prs\\\": 218.0}, {\\\"day\\\": \\\"2020-01-04T00:00:00\\\", \\\"num_prs\\\": 218.0}, {\\\"day\\\": \\\"2020-01-05T00:00:00\\\", \\\"num_prs\\\": 218.0}, {\\\"day\\\": \\\"2020-01-06T00:00:00\\\", \\\"num_prs\\\": 224.0}, {\\\"day\\\": \\\"2020-01-07T00:00:00\\\", \\\"num_prs\\\": 228.0}, {\\\"day\\\": \\\"2020-01-08T00:00:00\\\", \\\"num_prs\\\": 231.0}, {\\\"day\\\": \\\"2020-01-09T00:00:00\\\", \\\"num_prs\\\": 226.0}, {\\\"day\\\": \\\"2020-01-10T00:00:00\\\", \\\"num_prs\\\": 228.0}, {\\\"day\\\": \\\"2020-01-11T00:00:00\\\", \\\"num_prs\\\": 230.0}, {\\\"day\\\": \\\"2020-01-12T00:00:00\\\", \\\"num_prs\\\": 231.0}, {\\\"day\\\": \\\"2020-01-13T00:00:00\\\", \\\"num_prs\\\": 227.0}, {\\\"day\\\": \\\"2020-01-14T00:00:00\\\", \\\"num_prs\\\": 229.0}, {\\\"day\\\": \\\"2020-01-15T00:00:00\\\", \\\"num_prs\\\": 223.0}, {\\\"day\\\": \\\"2020-01-16T00:00:00\\\", \\\"num_prs\\\": 233.0}, {\\\"day\\\": \\\"2020-01-17T00:00:00\\\", \\\"num_prs\\\": 238.0}, {\\\"day\\\": \\\"2020-01-18T00:00:00\\\", \\\"num_prs\\\": 241.0}, {\\\"day\\\": \\\"2020-01-19T00:00:00\\\", \\\"num_prs\\\": 246.0}, {\\\"day\\\": \\\"2020-01-20T00:00:00\\\", \\\"num_prs\\\": 252.0}, {\\\"day\\\": \\\"2020-01-21T00:00:00\\\", \\\"num_prs\\\": 260.0}, {\\\"day\\\": \\\"2020-01-22T00:00:00\\\", \\\"num_prs\\\": 279.0}, {\\\"day\\\": \\\"2020-01-23T00:00:00\\\", \\\"num_prs\\\": 289.0}, {\\\"day\\\": \\\"2020-01-24T00:00:00\\\", \\\"num_prs\\\": 295.0}, {\\\"day\\\": \\\"2020-01-25T00:00:00\\\", \\\"num_prs\\\": 297.0}, {\\\"day\\\": \\\"2020-01-26T00:00:00\\\", \\\"num_prs\\\": 303.0}, {\\\"day\\\": \\\"2020-01-27T00:00:00\\\", \\\"num_prs\\\": 308.0}, {\\\"day\\\": \\\"2020-01-28T00:00:00\\\", \\\"num_prs\\\": 325.0}, {\\\"day\\\": \\\"2020-01-29T00:00:00\\\", \\\"num_prs\\\": 342.0}, {\\\"day\\\": \\\"2020-01-30T00:00:00\\\", \\\"num_prs\\\": 354.0}, {\\\"day\\\": \\\"2020-01-31T00:00:00\\\", \\\"num_prs\\\": 368.0}, {\\\"day\\\": \\\"2020-02-01T00:00:00\\\", \\\"num_prs\\\": 383.0}, {\\\"day\\\": \\\"2020-02-02T00:00:00\\\", \\\"num_prs\\\": 383.0}, {\\\"day\\\": \\\"2020-02-03T00:00:00\\\", \\\"num_prs\\\": 390.0}, {\\\"day\\\": \\\"2020-02-04T00:00:00\\\", \\\"num_prs\\\": 400.0}, {\\\"day\\\": \\\"2020-02-05T00:00:00\\\", \\\"num_prs\\\": 422.0}, {\\\"day\\\": \\\"2020-02-06T00:00:00\\\", \\\"num_prs\\\": 420.0}, {\\\"day\\\": \\\"2020-02-07T00:00:00\\\", \\\"num_prs\\\": 431.0}, {\\\"day\\\": \\\"2020-02-08T00:00:00\\\", \\\"num_prs\\\": 434.0}, {\\\"day\\\": \\\"2020-02-09T00:00:00\\\", \\\"num_prs\\\": 436.0}, {\\\"day\\\": \\\"2020-02-10T00:00:00\\\", \\\"num_prs\\\": 445.0}, {\\\"day\\\": \\\"2020-02-11T00:00:00\\\", \\\"num_prs\\\": 451.0}, {\\\"day\\\": \\\"2020-02-12T00:00:00\\\", \\\"num_prs\\\": 478.0}, {\\\"day\\\": \\\"2020-02-13T00:00:00\\\", \\\"num_prs\\\": 477.0}, {\\\"day\\\": \\\"2020-02-14T00:00:00\\\", \\\"num_prs\\\": 487.0}, {\\\"day\\\": \\\"2020-02-15T00:00:00\\\", \\\"num_prs\\\": 492.0}, {\\\"day\\\": \\\"2020-02-16T00:00:00\\\", \\\"num_prs\\\": 491.0}, {\\\"day\\\": \\\"2020-02-17T00:00:00\\\", \\\"num_prs\\\": 485.0}, {\\\"day\\\": \\\"2020-02-18T00:00:00\\\", \\\"num_prs\\\": 482.0}, {\\\"day\\\": \\\"2020-02-19T00:00:00\\\", \\\"num_prs\\\": 496.0}, {\\\"day\\\": \\\"2020-02-20T00:00:00\\\", \\\"num_prs\\\": 498.0}, {\\\"day\\\": \\\"2020-02-21T00:00:00\\\", \\\"num_prs\\\": 504.0}, {\\\"day\\\": \\\"2020-02-22T00:00:00\\\", \\\"num_prs\\\": 505.0}, {\\\"day\\\": \\\"2020-02-23T00:00:00\\\", \\\"num_prs\\\": 502.0}, {\\\"day\\\": \\\"2020-02-24T00:00:00\\\", \\\"num_prs\\\": 513.0}, {\\\"day\\\": \\\"2020-02-25T00:00:00\\\", \\\"num_prs\\\": 509.0}, {\\\"day\\\": \\\"2020-02-26T00:00:00\\\", \\\"num_prs\\\": 512.0}, {\\\"day\\\": \\\"2020-02-27T00:00:00\\\", \\\"num_prs\\\": 509.0}, {\\\"day\\\": \\\"2020-02-28T00:00:00\\\", \\\"num_prs\\\": 495.0}, {\\\"day\\\": \\\"2020-02-29T00:00:00\\\", \\\"num_prs\\\": 477.0}, {\\\"day\\\": \\\"2020-03-01T00:00:00\\\", \\\"num_prs\\\": 475.0}, {\\\"day\\\": \\\"2020-03-02T00:00:00\\\", \\\"num_prs\\\": 460.0}, {\\\"day\\\": \\\"2020-03-03T00:00:00\\\", \\\"num_prs\\\": 442.0}, {\\\"day\\\": \\\"2020-03-04T00:00:00\\\", \\\"num_prs\\\": 426.0}, {\\\"day\\\": \\\"2020-03-05T00:00:00\\\", \\\"num_prs\\\": 422.0}, {\\\"day\\\": \\\"2020-03-06T00:00:00\\\", \\\"num_prs\\\": 410.0}, {\\\"day\\\": \\\"2020-03-07T00:00:00\\\", \\\"num_prs\\\": 409.0}, {\\\"day\\\": \\\"2020-03-08T00:00:00\\\", \\\"num_prs\\\": 407.0}, {\\\"day\\\": \\\"2020-03-09T00:00:00\\\", \\\"num_prs\\\": 405.0}, {\\\"day\\\": \\\"2020-03-10T00:00:00\\\", \\\"num_prs\\\": 393.0}, {\\\"day\\\": \\\"2020-03-11T00:00:00\\\", \\\"num_prs\\\": 366.0}, {\\\"day\\\": \\\"2020-03-12T00:00:00\\\", \\\"num_prs\\\": 366.0}, {\\\"day\\\": \\\"2020-03-13T00:00:00\\\", \\\"num_prs\\\": 356.0}, {\\\"day\\\": \\\"2020-03-14T00:00:00\\\", \\\"num_prs\\\": 351.0}, {\\\"day\\\": \\\"2020-03-15T00:00:00\\\", \\\"num_prs\\\": 350.0}, {\\\"day\\\": \\\"2020-03-16T00:00:00\\\", \\\"num_prs\\\": 358.0}, {\\\"day\\\": \\\"2020-03-17T00:00:00\\\", \\\"num_prs\\\": 359.0}, {\\\"day\\\": \\\"2020-03-18T00:00:00\\\", \\\"num_prs\\\": 338.0}, {\\\"day\\\": \\\"2020-03-19T00:00:00\\\", \\\"num_prs\\\": 337.0}, {\\\"day\\\": \\\"2020-03-20T00:00:00\\\", \\\"num_prs\\\": 331.0}, {\\\"day\\\": \\\"2020-03-21T00:00:00\\\", \\\"num_prs\\\": 331.0}, {\\\"day\\\": \\\"2020-03-22T00:00:00\\\", \\\"num_prs\\\": 331.0}, {\\\"day\\\": \\\"2020-03-23T00:00:00\\\", \\\"num_prs\\\": 330.0}, {\\\"day\\\": \\\"2020-03-24T00:00:00\\\", \\\"num_prs\\\": 338.0}, {\\\"day\\\": \\\"2020-03-25T00:00:00\\\", \\\"num_prs\\\": 332.0}, {\\\"day\\\": \\\"2020-03-26T00:00:00\\\", \\\"num_prs\\\": 335.0}, {\\\"day\\\": \\\"2020-03-27T00:00:00\\\", \\\"num_prs\\\": 338.0}, {\\\"day\\\": \\\"2020-03-28T00:00:00\\\", \\\"num_prs\\\": 339.0}, {\\\"day\\\": \\\"2020-03-30T00:00:00\\\", \\\"num_prs\\\": 341.0}, {\\\"day\\\": \\\"2020-03-31T00:00:00\\\", \\\"num_prs\\\": 340.0}, {\\\"day\\\": \\\"2020-04-01T00:00:00\\\", \\\"num_prs\\\": 329.0}, {\\\"day\\\": \\\"2020-04-02T00:00:00\\\", \\\"num_prs\\\": 331.0}, {\\\"day\\\": \\\"2020-04-03T00:00:00\\\", \\\"num_prs\\\": 342.0}, {\\\"day\\\": \\\"2020-04-04T00:00:00\\\", \\\"num_prs\\\": 342.0}, {\\\"day\\\": \\\"2020-04-05T00:00:00\\\", \\\"num_prs\\\": 342.0}, {\\\"day\\\": \\\"2020-04-06T00:00:00\\\", \\\"num_prs\\\": 329.0}, {\\\"day\\\": \\\"2020-04-07T00:00:00\\\", \\\"num_prs\\\": 339.0}, {\\\"day\\\": \\\"2020-04-08T00:00:00\\\", \\\"num_prs\\\": 337.0}, {\\\"day\\\": \\\"2020-04-09T00:00:00\\\", \\\"num_prs\\\": 336.0}, {\\\"day\\\": \\\"2020-04-10T00:00:00\\\", \\\"num_prs\\\": 343.0}, {\\\"day\\\": \\\"2020-04-11T00:00:00\\\", \\\"num_prs\\\": 343.0}, {\\\"day\\\": \\\"2020-04-12T00:00:00\\\", \\\"num_prs\\\": 342.0}, {\\\"day\\\": \\\"2020-04-13T00:00:00\\\", \\\"num_prs\\\": 349.0}, {\\\"day\\\": \\\"2020-04-14T00:00:00\\\", \\\"num_prs\\\": 362.0}, {\\\"day\\\": \\\"2020-04-15T00:00:00\\\", \\\"num_prs\\\": 368.0}, {\\\"day\\\": \\\"2020-04-16T00:00:00\\\", \\\"num_prs\\\": 370.0}, {\\\"day\\\": \\\"2020-04-17T00:00:00\\\", \\\"num_prs\\\": 377.0}, {\\\"day\\\": \\\"2020-04-18T00:00:00\\\", \\\"num_prs\\\": 375.0}, {\\\"day\\\": \\\"2020-04-19T00:00:00\\\", \\\"num_prs\\\": 374.0}, {\\\"day\\\": \\\"2020-04-20T00:00:00\\\", \\\"num_prs\\\": 368.0}, {\\\"day\\\": \\\"2020-04-21T00:00:00\\\", \\\"num_prs\\\": 354.0}, {\\\"day\\\": \\\"2020-04-22T00:00:00\\\", \\\"num_prs\\\": 357.0}, {\\\"day\\\": \\\"2020-04-23T00:00:00\\\", \\\"num_prs\\\": 357.0}, {\\\"day\\\": \\\"2020-04-24T00:00:00\\\", \\\"num_prs\\\": 355.0}, {\\\"day\\\": \\\"2020-04-25T00:00:00\\\", \\\"num_prs\\\": 359.0}, {\\\"day\\\": \\\"2020-04-26T00:00:00\\\", \\\"num_prs\\\": 364.0}, {\\\"day\\\": \\\"2020-04-27T00:00:00\\\", \\\"num_prs\\\": 367.0}, {\\\"day\\\": \\\"2020-04-28T00:00:00\\\", \\\"num_prs\\\": 365.0}, {\\\"day\\\": \\\"2020-04-29T00:00:00\\\", \\\"num_prs\\\": 368.0}, {\\\"day\\\": \\\"2020-04-30T00:00:00\\\", \\\"num_prs\\\": 381.0}, {\\\"day\\\": \\\"2020-05-01T00:00:00\\\", \\\"num_prs\\\": 378.0}, {\\\"day\\\": \\\"2020-05-02T00:00:00\\\", \\\"num_prs\\\": 377.0}, {\\\"day\\\": \\\"2020-05-03T00:00:00\\\", \\\"num_prs\\\": 377.0}, {\\\"day\\\": \\\"2020-05-04T00:00:00\\\", \\\"num_prs\\\": 373.0}, {\\\"day\\\": \\\"2020-05-05T00:00:00\\\", \\\"num_prs\\\": 367.0}, {\\\"day\\\": \\\"2020-05-06T00:00:00\\\", \\\"num_prs\\\": 373.0}, {\\\"day\\\": \\\"2020-05-07T00:00:00\\\", \\\"num_prs\\\": 373.0}, {\\\"day\\\": \\\"2020-05-08T00:00:00\\\", \\\"num_prs\\\": 369.0}, {\\\"day\\\": \\\"2020-05-09T00:00:00\\\", \\\"num_prs\\\": 373.0}, {\\\"day\\\": \\\"2020-05-10T00:00:00\\\", \\\"num_prs\\\": 374.0}, {\\\"day\\\": \\\"2020-05-11T00:00:00\\\", \\\"num_prs\\\": 361.0}, {\\\"day\\\": \\\"2020-05-12T00:00:00\\\", \\\"num_prs\\\": 349.0}, {\\\"day\\\": \\\"2020-05-13T00:00:00\\\", \\\"num_prs\\\": 350.0}, {\\\"day\\\": \\\"2020-05-14T00:00:00\\\", \\\"num_prs\\\": 353.0}, {\\\"day\\\": \\\"2020-05-15T00:00:00\\\", \\\"num_prs\\\": 349.0}, {\\\"day\\\": \\\"2020-05-16T00:00:00\\\", \\\"num_prs\\\": 348.0}, {\\\"day\\\": \\\"2020-05-17T00:00:00\\\", \\\"num_prs\\\": 347.0}, {\\\"day\\\": \\\"2020-05-18T00:00:00\\\", \\\"num_prs\\\": 343.0}, {\\\"day\\\": \\\"2020-05-19T00:00:00\\\", \\\"num_prs\\\": 343.0}, {\\\"day\\\": \\\"2020-05-20T00:00:00\\\", \\\"num_prs\\\": 349.0}, {\\\"day\\\": \\\"2020-05-21T00:00:00\\\", \\\"num_prs\\\": 339.0}, {\\\"day\\\": \\\"2020-05-22T00:00:00\\\", \\\"num_prs\\\": 338.0}, {\\\"day\\\": \\\"2020-05-23T00:00:00\\\", \\\"num_prs\\\": 335.0}, {\\\"day\\\": \\\"2020-05-24T00:00:00\\\", \\\"num_prs\\\": 336.0}, {\\\"day\\\": \\\"2020-05-25T00:00:00\\\", \\\"num_prs\\\": 325.0}, {\\\"day\\\": \\\"2020-05-26T00:00:00\\\", \\\"num_prs\\\": 330.0}, {\\\"day\\\": \\\"2020-05-27T00:00:00\\\", \\\"num_prs\\\": 328.0}, {\\\"day\\\": \\\"2020-05-28T00:00:00\\\", \\\"num_prs\\\": 308.0}, {\\\"day\\\": \\\"2020-05-29T00:00:00\\\", \\\"num_prs\\\": 306.0}, {\\\"day\\\": \\\"2020-05-30T00:00:00\\\", \\\"num_prs\\\": 305.0}, {\\\"day\\\": \\\"2020-05-31T00:00:00\\\", \\\"num_prs\\\": 305.0}, {\\\"day\\\": \\\"2020-06-01T00:00:00\\\", \\\"num_prs\\\": 313.0}, {\\\"day\\\": \\\"2020-06-02T00:00:00\\\", \\\"num_prs\\\": 308.0}, {\\\"day\\\": \\\"2020-06-03T00:00:00\\\", \\\"num_prs\\\": 299.0}, {\\\"day\\\": \\\"2020-06-04T00:00:00\\\", \\\"num_prs\\\": 298.0}, {\\\"day\\\": \\\"2020-06-05T00:00:00\\\", \\\"num_prs\\\": 295.0}, {\\\"day\\\": \\\"2020-06-06T00:00:00\\\", \\\"num_prs\\\": 289.0}, {\\\"day\\\": \\\"2020-06-07T00:00:00\\\", \\\"num_prs\\\": 288.0}, {\\\"day\\\": \\\"2020-06-08T00:00:00\\\", \\\"num_prs\\\": 289.0}, {\\\"day\\\": \\\"2020-06-09T00:00:00\\\", \\\"num_prs\\\": 295.0}, {\\\"day\\\": \\\"2020-06-10T00:00:00\\\", \\\"num_prs\\\": 282.0}, {\\\"day\\\": \\\"2020-06-11T00:00:00\\\", \\\"num_prs\\\": 279.0}, {\\\"day\\\": \\\"2020-06-12T00:00:00\\\", \\\"num_prs\\\": 275.0}, {\\\"day\\\": \\\"2020-06-13T00:00:00\\\", \\\"num_prs\\\": 276.0}, {\\\"day\\\": \\\"2020-06-14T00:00:00\\\", \\\"num_prs\\\": 275.0}, {\\\"day\\\": \\\"2020-06-15T00:00:00\\\", \\\"num_prs\\\": 282.0}, {\\\"day\\\": \\\"2020-06-16T00:00:00\\\", \\\"num_prs\\\": 285.0}, {\\\"day\\\": \\\"2020-06-17T00:00:00\\\", \\\"num_prs\\\": 288.0}, {\\\"day\\\": \\\"2020-06-18T00:00:00\\\", \\\"num_prs\\\": 301.0}, {\\\"day\\\": \\\"2020-06-19T00:00:00\\\", \\\"num_prs\\\": 315.0}, {\\\"day\\\": \\\"2020-06-20T00:00:00\\\", \\\"num_prs\\\": 319.0}, {\\\"day\\\": \\\"2020-06-21T00:00:00\\\", \\\"num_prs\\\": 314.0}, {\\\"day\\\": \\\"2020-06-22T00:00:00\\\", \\\"num_prs\\\": 332.0}, {\\\"day\\\": \\\"2020-06-23T00:00:00\\\", \\\"num_prs\\\": 344.0}, {\\\"day\\\": \\\"2020-06-24T00:00:00\\\", \\\"num_prs\\\": 349.0}, {\\\"day\\\": \\\"2020-06-25T00:00:00\\\", \\\"num_prs\\\": 355.0}, {\\\"day\\\": \\\"2020-06-26T00:00:00\\\", \\\"num_prs\\\": 358.0}, {\\\"day\\\": \\\"2020-06-27T00:00:00\\\", \\\"num_prs\\\": 361.0}, {\\\"day\\\": \\\"2020-06-28T00:00:00\\\", \\\"num_prs\\\": 368.0}, {\\\"day\\\": \\\"2020-06-29T00:00:00\\\", \\\"num_prs\\\": 375.0}, {\\\"day\\\": \\\"2020-06-30T00:00:00\\\", \\\"num_prs\\\": 383.0}, {\\\"day\\\": \\\"2020-07-01T00:00:00\\\", \\\"num_prs\\\": 381.0}, {\\\"day\\\": \\\"2020-07-02T00:00:00\\\", \\\"num_prs\\\": 382.0}, {\\\"day\\\": \\\"2020-07-03T00:00:00\\\", \\\"num_prs\\\": 377.0}, {\\\"day\\\": \\\"2020-07-04T00:00:00\\\", \\\"num_prs\\\": 380.0}, {\\\"day\\\": \\\"2020-07-05T00:00:00\\\", \\\"num_prs\\\": 381.0}, {\\\"day\\\": \\\"2020-07-06T00:00:00\\\", \\\"num_prs\\\": 390.0}, {\\\"day\\\": \\\"2020-07-07T00:00:00\\\", \\\"num_prs\\\": 398.0}, {\\\"day\\\": \\\"2020-07-08T00:00:00\\\", \\\"num_prs\\\": 409.0}, {\\\"day\\\": \\\"2020-07-09T00:00:00\\\", \\\"num_prs\\\": 411.0}, {\\\"day\\\": \\\"2020-07-10T00:00:00\\\", \\\"num_prs\\\": 420.0}, {\\\"day\\\": \\\"2020-07-11T00:00:00\\\", \\\"num_prs\\\": 422.0}, {\\\"day\\\": \\\"2020-07-12T00:00:00\\\", \\\"num_prs\\\": 426.0}, {\\\"day\\\": \\\"2020-07-13T00:00:00\\\", \\\"num_prs\\\": 418.0}, {\\\"day\\\": \\\"2020-07-14T00:00:00\\\", \\\"num_prs\\\": 416.0}, {\\\"day\\\": \\\"2020-07-15T00:00:00\\\", \\\"num_prs\\\": 405.0}, {\\\"day\\\": \\\"2020-07-16T00:00:00\\\", \\\"num_prs\\\": 397.0}, {\\\"day\\\": \\\"2020-07-17T00:00:00\\\", \\\"num_prs\\\": 389.0}, {\\\"day\\\": \\\"2020-07-18T00:00:00\\\", \\\"num_prs\\\": 384.0}, {\\\"day\\\": \\\"2020-07-20T00:00:00\\\", \\\"num_prs\\\": 382.0}, {\\\"day\\\": \\\"2020-07-21T00:00:00\\\", \\\"num_prs\\\": 376.0}, {\\\"day\\\": \\\"2020-07-22T00:00:00\\\", \\\"num_prs\\\": 379.0}, {\\\"day\\\": \\\"2020-07-23T00:00:00\\\", \\\"num_prs\\\": 384.0}, {\\\"day\\\": \\\"2020-07-24T00:00:00\\\", \\\"num_prs\\\": 380.0}]}}, {\\\"mode\\\": \\\"vega-lite\\\"});\\n\",\n       \"</script>\"\n      ],\n      \"text/plain\": [\n       \"alt.LayerChart(...)\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"chart = alt.Chart(prs_df, title= \\\"Merged PRs (Last 28 Days)\\\")\\n\",\n    \"line = chart.mark_line().encode(\\n\",\n    \"  x= alt.X('day', title = \\\"Day\\\"),\\n\",\n    \"  y=alt.Y(\\\"num_prs\\\", title=\\\"# PRs\\\"),    \\n\",\n    \")\\n\",\n    \"\\n\",\n    \"point = line + line.mark_point()\\n\",\n    \"point.interactive()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Release stats per release (quarter)\\n\",\n    \"\\n\",\n    \"* Compute stats about a release \\n\",\n    \"* We do this based on time\\n\",\n    \"* You can see a sample of the payload at [https://api.github.com/repos/kubeflow/pipelines/pulls/1038](https://api.github.com/repos/kubeflow/pipelines/pulls/1038)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Downloading: 100%|██████████| 1811/1811 [00:00<00:00, 3621.00rows/s]\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"release_months = []\\n\",\n    \"year = 2019\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"for month in range(8, 11):\\n\",\n    \"    release_months.append(\\\"\\\\\\\"{0}{1:02}\\\\\\\"\\\".format(year, month))\\n\",\n    \"        \\n\",\n    \"\\n\",\n    \"query = \\\"\\\"\\\"\\n\",\n    \"SELECT\\n\",\n    \"    DATE(created_at) AS pr_date,\\n\",\n    \"    actor.id,\\n\",\n    \"    actor.login,\\n\",\n    \"    JSON_EXTRACT(payload, '$.pull_request.merged') as merged,\\n\",\n    \"    JSON_EXTRACT(payload, '$.pull_request.id') as pr_id,\\n\",\n    \"    JSON_EXTRACT(payload, '$.pull_request.url') as pr_url,\\n\",\n    \"    JSON_EXTRACT(payload, '$.pull_request.user.id') as user_id\\n\",\n    \"  FROM `githubarchive.month.*`\\n\",\n    \"  WHERE\\n\",\n    \"    _TABLE_SUFFIX IN ({0})\\n\",\n    \"    AND type = 'PullRequestEvent'\\n\",\n    \"    AND org.login = 'kubeflow'\\n\",\n    \"    AND JSON_EXTRACT(payload, '$.action') IN ('\\\"closed\\\"')\\n\",\n    \"\\\"\\\"\\\".format(\\\",\\\".join(release_months))\\n\",\n    \"\\n\",\n    \"prs=gbq.read_gbq(str(query), dialect='standard', project_id=PROJECT)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Filter PRs to merged PRs\\n\",\n    \"v=prs[\\\"merged\\\"].values == 'true'\\n\",\n    \"merged_prs = prs.iloc[v]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Number of unique pr authors (merged & unmerged) (190,)\\n\",\n      \"Number of unique prs (merged & unmerged) (1788,)\\n\",\n      \"Number of unique pr authors (merged) (155,)\\n\",\n      \"Number of unique prs (merged) (1492,)\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"unique_pr_logins = prs[\\\"user_id\\\"].unique()\\n\",\n    \"unique_prs = prs[\\\"pr_id\\\"].unique()\\n\",\n    \"\\n\",\n    \"merged_unique_logins = merged_prs[\\\"user_id\\\"].unique()\\n\",\n    \"merged_unique_prs = merged_prs[\\\"pr_id\\\"].unique()\\n\",\n    \"print(\\\"Number of unique pr authors (merged & unmerged) {0}\\\".format(unique_pr_logins.shape))\\n\",\n    \"print(\\\"Number of unique prs (merged & unmerged) {0}\\\".format(unique_prs.shape))\\n\",\n    \"print(\\\"Number of unique pr authors (merged) {0}\\\".format(merged_unique_logins.shape))\\n\",\n    \"print(\\\"Number of unique prs (merged) {0}\\\".format(merged_unique_prs.shape))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Get a list of distinct actions\\n\",\n    \"\\n\",\n    \"* Here's a list of events in the [api](https://developer.github.com/v4/union/pullrequesttimelineitems/)\\n\",\n    \"* It looks like these are different from the ones in the github archive\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 16,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Downloading: 100%|██████████| 8/8 [00:00<00:00, 32.50rows/s]\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"query = \\\"\\\"\\\"\\n\",\n    \"SELECT\\n\",\n    \"    distinct JSON_EXTRACT(payload, '$.action')\\n\",\n    \"  FROM `githubarchive.month.*`\\n\",\n    \"  WHERE\\n\",\n    \"    _TABLE_SUFFIX IN ({0})    \\n\",\n    \"\\\"\\\"\\\".format(\\\",\\\".join(months))\\n\",\n    \"\\n\",\n    \"actions=gbq.read_gbq(str(query), dialect='standard', project_id=PROJECT)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 17,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>f0_</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>\\\"opened\\\"</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>None</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>\\\"published\\\"</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>\\\"created\\\"</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>\\\"added\\\"</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>\\\"started\\\"</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>\\\"reopened\\\"</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>\\\"closed\\\"</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"           f0_\\n\",\n       \"0     \\\"opened\\\"\\n\",\n       \"1         None\\n\",\n       \"2  \\\"published\\\"\\n\",\n       \"3    \\\"created\\\"\\n\",\n       \"4      \\\"added\\\"\\n\",\n       \"5    \\\"started\\\"\\n\",\n       \"6   \\\"reopened\\\"\\n\",\n       \"7     \\\"closed\\\"\"\n      ]\n     },\n     \"execution_count\": 17,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"actions\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## New Issues Last 28 Days\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 18,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Downloading: 100%|██████████| 4082/4082 [00:00<00:00, 7773.58rows/s]\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"query = \\\"\\\"\\\"\\n\",\n    \"SELECT\\n\",\n    \"    DATE(created_at) AS issue_date,\\n\",\n    \"    actor.id,\\n\",\n    \"    actor.login,\\n\",\n    \"    JSON_EXTRACT(payload, '$.pull_request.id') as issue_id,\\n\",\n    \"    JSON_EXTRACT(payload, '$.pull_request.url') as issue_url  \\n\",\n    \"  FROM `githubarchive.month.*`\\n\",\n    \"  WHERE\\n\",\n    \"    _TABLE_SUFFIX IN ({0})\\n\",\n    \"    AND type = 'IssuesEvent'\\n\",\n    \"    AND org.login = 'kubeflow'\\n\",\n    \"    AND JSON_EXTRACT(payload, '$.action') IN ('\\\"opened\\\"')\\n\",\n    \"\\\"\\\"\\\".format(\\\",\\\".join(months))\\n\",\n    \"\\n\",\n    \"issues=gbq.read_gbq(str(query), dialect='standard', project_id=PROJECT)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 19,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"issue_counts=issues[\\\"issue_date\\\"].value_counts()\\n\",\n    \"issue_counts=issue_counts.sort_index()\\n\",\n    \"rolling_issue_count = issue_counts.rolling('28d').sum()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 24,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"\\n\",\n       \"<div id=\\\"altair-viz-fde6b54cc50c499696ca23c3c6554f37\\\"></div>\\n\",\n       \"<script type=\\\"text/javascript\\\">\\n\",\n       \"  (function(spec, embedOpt){\\n\",\n       \"    let outputDiv = document.currentScript.previousElementSibling;\\n\",\n       \"    if (outputDiv.id !== \\\"altair-viz-fde6b54cc50c499696ca23c3c6554f37\\\") {\\n\",\n       \"      outputDiv = document.getElementById(\\\"altair-viz-fde6b54cc50c499696ca23c3c6554f37\\\");\\n\",\n       \"    }\\n\",\n       \"    const paths = {\\n\",\n       \"      \\\"vega\\\": \\\"https://cdn.jsdelivr.net/npm//vega@5?noext\\\",\\n\",\n       \"      \\\"vega-lib\\\": \\\"https://cdn.jsdelivr.net/npm//vega-lib?noext\\\",\\n\",\n       \"      \\\"vega-lite\\\": \\\"https://cdn.jsdelivr.net/npm//vega-lite@4.8.1?noext\\\",\\n\",\n       \"      \\\"vega-embed\\\": \\\"https://cdn.jsdelivr.net/npm//vega-embed@6?noext\\\",\\n\",\n       \"    };\\n\",\n       \"\\n\",\n       \"    function loadScript(lib) {\\n\",\n       \"      return new Promise(function(resolve, reject) {\\n\",\n       \"        var s = document.createElement('script');\\n\",\n       \"        s.src = paths[lib];\\n\",\n       \"        s.async = true;\\n\",\n       \"        s.onload = () => resolve(paths[lib]);\\n\",\n       \"        s.onerror = () => reject(`Error loading script: ${paths[lib]}`);\\n\",\n       \"        document.getElementsByTagName(\\\"head\\\")[0].appendChild(s);\\n\",\n       \"      });\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    function showError(err) {\\n\",\n       \"      outputDiv.innerHTML = `<div class=\\\"error\\\" style=\\\"color:red;\\\">${err}</div>`;\\n\",\n       \"      throw err;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    function displayChart(vegaEmbed) {\\n\",\n       \"      vegaEmbed(outputDiv, spec, embedOpt)\\n\",\n       \"        .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    if(typeof define === \\\"function\\\" && define.amd) {\\n\",\n       \"      requirejs.config({paths});\\n\",\n       \"      require([\\\"vega-embed\\\"], displayChart, err => showError(`Error loading script: ${err.message}`));\\n\",\n       \"    } else if (typeof vegaEmbed === \\\"function\\\") {\\n\",\n       \"      displayChart(vegaEmbed);\\n\",\n       \"    } else {\\n\",\n       \"      loadScript(\\\"vega\\\")\\n\",\n       \"        .then(() => loadScript(\\\"vega-lite\\\"))\\n\",\n       \"        .then(() => loadScript(\\\"vega-embed\\\"))\\n\",\n       \"        .catch(showError)\\n\",\n       \"        .then(() => displayChart(vegaEmbed));\\n\",\n       \"    }\\n\",\n       \"  })({\\\"config\\\": {\\\"view\\\": {\\\"continuousWidth\\\": 400, \\\"continuousHeight\\\": 300}}, \\\"layer\\\": [{\\\"mark\\\": \\\"line\\\", \\\"encoding\\\": {\\\"x\\\": {\\\"type\\\": \\\"temporal\\\", \\\"field\\\": \\\"day\\\", \\\"title\\\": \\\"Day\\\"}, \\\"y\\\": {\\\"type\\\": \\\"quantitative\\\", \\\"field\\\": \\\"num_issues\\\", \\\"title\\\": \\\"# issues\\\"}}, \\\"selection\\\": {\\\"selector004\\\": {\\\"type\\\": \\\"interval\\\", \\\"bind\\\": \\\"scales\\\", \\\"encodings\\\": [\\\"x\\\", \\\"y\\\"]}}, \\\"title\\\": \\\"New Issues (Last 28 Days)\\\"}, {\\\"mark\\\": \\\"point\\\", \\\"encoding\\\": {\\\"x\\\": {\\\"type\\\": \\\"temporal\\\", \\\"field\\\": \\\"day\\\", \\\"title\\\": \\\"Day\\\"}, \\\"y\\\": {\\\"type\\\": \\\"quantitative\\\", \\\"field\\\": \\\"num_issues\\\", \\\"title\\\": \\\"# issues\\\"}}, \\\"title\\\": \\\"New Issues (Last 28 Days)\\\"}], \\\"data\\\": {\\\"name\\\": \\\"data-9604b231761170bc85028cebe2dc0e13\\\"}, \\\"$schema\\\": \\\"https://vega.github.io/schema/vega-lite/v4.8.1.json\\\", \\\"datasets\\\": {\\\"data-9604b231761170bc85028cebe2dc0e13\\\": [{\\\"day\\\": \\\"2019-08-29T00:00:00\\\", \\\"num_issues\\\": 339.0}, {\\\"day\\\": \\\"2019-08-30T00:00:00\\\", \\\"num_issues\\\": 342.0}, {\\\"day\\\": \\\"2019-08-31T00:00:00\\\", \\\"num_issues\\\": 341.0}, {\\\"day\\\": \\\"2019-09-01T00:00:00\\\", \\\"num_issues\\\": 342.0}, {\\\"day\\\": \\\"2019-09-02T00:00:00\\\", \\\"num_issues\\\": 325.0}, {\\\"day\\\": \\\"2019-09-03T00:00:00\\\", \\\"num_issues\\\": 323.0}, {\\\"day\\\": \\\"2019-09-04T00:00:00\\\", \\\"num_issues\\\": 336.0}, {\\\"day\\\": \\\"2019-09-05T00:00:00\\\", \\\"num_issues\\\": 338.0}, {\\\"day\\\": \\\"2019-09-06T00:00:00\\\", \\\"num_issues\\\": 326.0}, {\\\"day\\\": \\\"2019-09-07T00:00:00\\\", \\\"num_issues\\\": 323.0}, {\\\"day\\\": \\\"2019-09-08T00:00:00\\\", \\\"num_issues\\\": 325.0}, {\\\"day\\\": \\\"2019-09-09T00:00:00\\\", \\\"num_issues\\\": 324.0}, {\\\"day\\\": \\\"2019-09-10T00:00:00\\\", \\\"num_issues\\\": 305.0}, {\\\"day\\\": \\\"2019-09-11T00:00:00\\\", \\\"num_issues\\\": 306.0}, {\\\"day\\\": \\\"2019-09-12T00:00:00\\\", \\\"num_issues\\\": 295.0}, {\\\"day\\\": \\\"2019-09-13T00:00:00\\\", \\\"num_issues\\\": 284.0}, {\\\"day\\\": \\\"2019-09-14T00:00:00\\\", \\\"num_issues\\\": 285.0}, {\\\"day\\\": \\\"2019-09-15T00:00:00\\\", \\\"num_issues\\\": 284.0}, {\\\"day\\\": \\\"2019-09-16T00:00:00\\\", \\\"num_issues\\\": 277.0}, {\\\"day\\\": \\\"2019-09-17T00:00:00\\\", \\\"num_issues\\\": 280.0}, {\\\"day\\\": \\\"2019-09-18T00:00:00\\\", \\\"num_issues\\\": 278.0}, {\\\"day\\\": \\\"2019-09-19T00:00:00\\\", \\\"num_issues\\\": 280.0}, {\\\"day\\\": \\\"2019-09-20T00:00:00\\\", \\\"num_issues\\\": 285.0}, {\\\"day\\\": \\\"2019-09-21T00:00:00\\\", \\\"num_issues\\\": 281.0}, {\\\"day\\\": \\\"2019-09-22T00:00:00\\\", \\\"num_issues\\\": 278.0}, {\\\"day\\\": \\\"2019-09-23T00:00:00\\\", \\\"num_issues\\\": 285.0}, {\\\"day\\\": \\\"2019-09-24T00:00:00\\\", \\\"num_issues\\\": 290.0}, {\\\"day\\\": \\\"2019-09-25T00:00:00\\\", \\\"num_issues\\\": 306.0}, {\\\"day\\\": \\\"2019-09-26T00:00:00\\\", \\\"num_issues\\\": 307.0}, {\\\"day\\\": \\\"2019-09-27T00:00:00\\\", \\\"num_issues\\\": 319.0}, {\\\"day\\\": \\\"2019-09-28T00:00:00\\\", \\\"num_issues\\\": 322.0}, {\\\"day\\\": \\\"2019-09-29T00:00:00\\\", \\\"num_issues\\\": 322.0}, {\\\"day\\\": \\\"2019-09-30T00:00:00\\\", \\\"num_issues\\\": 328.0}, {\\\"day\\\": \\\"2019-10-01T00:00:00\\\", \\\"num_issues\\\": 322.0}, {\\\"day\\\": \\\"2019-10-02T00:00:00\\\", \\\"num_issues\\\": 293.0}, {\\\"day\\\": \\\"2019-10-03T00:00:00\\\", \\\"num_issues\\\": 292.0}, {\\\"day\\\": \\\"2019-10-04T00:00:00\\\", \\\"num_issues\\\": 305.0}, {\\\"day\\\": \\\"2019-10-06T00:00:00\\\", \\\"num_issues\\\": 314.0}, {\\\"day\\\": \\\"2019-10-07T00:00:00\\\", \\\"num_issues\\\": 316.0}, {\\\"day\\\": \\\"2019-10-08T00:00:00\\\", \\\"num_issues\\\": 326.0}, {\\\"day\\\": \\\"2019-10-09T00:00:00\\\", \\\"num_issues\\\": 335.0}, {\\\"day\\\": \\\"2019-10-10T00:00:00\\\", \\\"num_issues\\\": 364.0}, {\\\"day\\\": \\\"2019-10-11T00:00:00\\\", \\\"num_issues\\\": 374.0}, {\\\"day\\\": \\\"2019-10-12T00:00:00\\\", \\\"num_issues\\\": 378.0}, {\\\"day\\\": \\\"2019-10-13T00:00:00\\\", \\\"num_issues\\\": 377.0}, {\\\"day\\\": \\\"2019-10-14T00:00:00\\\", \\\"num_issues\\\": 385.0}, {\\\"day\\\": \\\"2019-10-15T00:00:00\\\", \\\"num_issues\\\": 395.0}, {\\\"day\\\": \\\"2019-10-16T00:00:00\\\", \\\"num_issues\\\": 406.0}, {\\\"day\\\": \\\"2019-10-17T00:00:00\\\", \\\"num_issues\\\": 414.0}, {\\\"day\\\": \\\"2019-10-18T00:00:00\\\", \\\"num_issues\\\": 413.0}, {\\\"day\\\": \\\"2019-10-19T00:00:00\\\", \\\"num_issues\\\": 412.0}, {\\\"day\\\": \\\"2019-10-20T00:00:00\\\", \\\"num_issues\\\": 417.0}, {\\\"day\\\": \\\"2019-10-21T00:00:00\\\", \\\"num_issues\\\": 411.0}, {\\\"day\\\": \\\"2019-10-22T00:00:00\\\", \\\"num_issues\\\": 413.0}, {\\\"day\\\": \\\"2019-10-23T00:00:00\\\", \\\"num_issues\\\": 417.0}, {\\\"day\\\": \\\"2019-10-24T00:00:00\\\", \\\"num_issues\\\": 425.0}, {\\\"day\\\": \\\"2019-10-25T00:00:00\\\", \\\"num_issues\\\": 426.0}, {\\\"day\\\": \\\"2019-10-26T00:00:00\\\", \\\"num_issues\\\": 425.0}, {\\\"day\\\": \\\"2019-10-27T00:00:00\\\", \\\"num_issues\\\": 422.0}, {\\\"day\\\": \\\"2019-10-28T00:00:00\\\", \\\"num_issues\\\": 427.0}, {\\\"day\\\": \\\"2019-10-29T00:00:00\\\", \\\"num_issues\\\": 435.0}, {\\\"day\\\": \\\"2019-10-30T00:00:00\\\", \\\"num_issues\\\": 440.0}, {\\\"day\\\": \\\"2019-10-31T00:00:00\\\", \\\"num_issues\\\": 444.0}, {\\\"day\\\": \\\"2019-11-01T00:00:00\\\", \\\"num_issues\\\": 435.0}, {\\\"day\\\": \\\"2019-11-02T00:00:00\\\", \\\"num_issues\\\": 442.0}, {\\\"day\\\": \\\"2019-11-04T00:00:00\\\", \\\"num_issues\\\": 422.0}, {\\\"day\\\": \\\"2019-11-05T00:00:00\\\", \\\"num_issues\\\": 413.0}, {\\\"day\\\": \\\"2019-11-06T00:00:00\\\", \\\"num_issues\\\": 400.0}, {\\\"day\\\": \\\"2019-11-07T00:00:00\\\", \\\"num_issues\\\": 383.0}, {\\\"day\\\": \\\"2019-11-08T00:00:00\\\", \\\"num_issues\\\": 376.0}, {\\\"day\\\": \\\"2019-11-09T00:00:00\\\", \\\"num_issues\\\": 372.0}, {\\\"day\\\": \\\"2019-11-10T00:00:00\\\", \\\"num_issues\\\": 374.0}, {\\\"day\\\": \\\"2019-11-11T00:00:00\\\", \\\"num_issues\\\": 368.0}, {\\\"day\\\": \\\"2019-11-12T00:00:00\\\", \\\"num_issues\\\": 354.0}, {\\\"day\\\": \\\"2019-11-13T00:00:00\\\", \\\"num_issues\\\": 336.0}, {\\\"day\\\": \\\"2019-11-14T00:00:00\\\", \\\"num_issues\\\": 356.0}, {\\\"day\\\": \\\"2019-11-15T00:00:00\\\", \\\"num_issues\\\": 349.0}, {\\\"day\\\": \\\"2019-11-16T00:00:00\\\", \\\"num_issues\\\": 350.0}, {\\\"day\\\": \\\"2019-11-18T00:00:00\\\", \\\"num_issues\\\": 337.0}, {\\\"day\\\": \\\"2019-11-19T00:00:00\\\", \\\"num_issues\\\": 327.0}, {\\\"day\\\": \\\"2019-11-20T00:00:00\\\", \\\"num_issues\\\": 315.0}, {\\\"day\\\": \\\"2019-11-21T00:00:00\\\", \\\"num_issues\\\": 304.0}, {\\\"day\\\": \\\"2019-11-22T00:00:00\\\", \\\"num_issues\\\": 296.0}, {\\\"day\\\": \\\"2019-11-23T00:00:00\\\", \\\"num_issues\\\": 296.0}, {\\\"day\\\": \\\"2019-11-24T00:00:00\\\", \\\"num_issues\\\": 299.0}, {\\\"day\\\": \\\"2019-11-25T00:00:00\\\", \\\"num_issues\\\": 304.0}, {\\\"day\\\": \\\"2019-11-26T00:00:00\\\", \\\"num_issues\\\": 304.0}, {\\\"day\\\": \\\"2019-11-27T00:00:00\\\", \\\"num_issues\\\": 301.0}, {\\\"day\\\": \\\"2019-11-28T00:00:00\\\", \\\"num_issues\\\": 293.0}, {\\\"day\\\": \\\"2019-11-29T00:00:00\\\", \\\"num_issues\\\": 284.0}, {\\\"day\\\": \\\"2019-11-30T00:00:00\\\", \\\"num_issues\\\": 280.0}, {\\\"day\\\": \\\"2019-12-01T00:00:00\\\", \\\"num_issues\\\": 281.0}, {\\\"day\\\": \\\"2019-12-02T00:00:00\\\", \\\"num_issues\\\": 274.0}, {\\\"day\\\": \\\"2019-12-03T00:00:00\\\", \\\"num_issues\\\": 277.0}, {\\\"day\\\": \\\"2019-12-04T00:00:00\\\", \\\"num_issues\\\": 272.0}, {\\\"day\\\": \\\"2019-12-05T00:00:00\\\", \\\"num_issues\\\": 266.0}, {\\\"day\\\": \\\"2019-12-06T00:00:00\\\", \\\"num_issues\\\": 263.0}, {\\\"day\\\": \\\"2019-12-07T00:00:00\\\", \\\"num_issues\\\": 260.0}, {\\\"day\\\": \\\"2019-12-09T00:00:00\\\", \\\"num_issues\\\": 261.0}, {\\\"day\\\": \\\"2019-12-10T00:00:00\\\", \\\"num_issues\\\": 260.0}, {\\\"day\\\": \\\"2019-12-11T00:00:00\\\", \\\"num_issues\\\": 271.0}, {\\\"day\\\": \\\"2019-12-12T00:00:00\\\", \\\"num_issues\\\": 244.0}, {\\\"day\\\": \\\"2019-12-13T00:00:00\\\", \\\"num_issues\\\": 253.0}, {\\\"day\\\": \\\"2019-12-14T00:00:00\\\", \\\"num_issues\\\": 253.0}, {\\\"day\\\": \\\"2019-12-16T00:00:00\\\", \\\"num_issues\\\": 278.0}, {\\\"day\\\": \\\"2019-12-17T00:00:00\\\", \\\"num_issues\\\": 283.0}, {\\\"day\\\": \\\"2019-12-18T00:00:00\\\", \\\"num_issues\\\": 282.0}, {\\\"day\\\": \\\"2019-12-19T00:00:00\\\", \\\"num_issues\\\": 278.0}, {\\\"day\\\": \\\"2019-12-20T00:00:00\\\", \\\"num_issues\\\": 272.0}, {\\\"day\\\": \\\"2019-12-21T00:00:00\\\", \\\"num_issues\\\": 270.0}, {\\\"day\\\": \\\"2019-12-22T00:00:00\\\", \\\"num_issues\\\": 269.0}, {\\\"day\\\": \\\"2019-12-23T00:00:00\\\", \\\"num_issues\\\": 261.0}, {\\\"day\\\": \\\"2019-12-24T00:00:00\\\", \\\"num_issues\\\": 252.0}, {\\\"day\\\": \\\"2019-12-25T00:00:00\\\", \\\"num_issues\\\": 240.0}, {\\\"day\\\": \\\"2019-12-26T00:00:00\\\", \\\"num_issues\\\": 230.0}, {\\\"day\\\": \\\"2019-12-27T00:00:00\\\", \\\"num_issues\\\": 231.0}, {\\\"day\\\": \\\"2019-12-28T00:00:00\\\", \\\"num_issues\\\": 230.0}, {\\\"day\\\": \\\"2019-12-29T00:00:00\\\", \\\"num_issues\\\": 231.0}, {\\\"day\\\": \\\"2019-12-30T00:00:00\\\", \\\"num_issues\\\": 226.0}, {\\\"day\\\": \\\"2019-12-31T00:00:00\\\", \\\"num_issues\\\": 223.0}, {\\\"day\\\": \\\"2020-01-01T00:00:00\\\", \\\"num_issues\\\": 217.0}, {\\\"day\\\": \\\"2020-01-02T00:00:00\\\", \\\"num_issues\\\": 214.0}, {\\\"day\\\": \\\"2020-01-03T00:00:00\\\", \\\"num_issues\\\": 212.0}, {\\\"day\\\": \\\"2020-01-04T00:00:00\\\", \\\"num_issues\\\": 210.0}, {\\\"day\\\": \\\"2020-01-05T00:00:00\\\", \\\"num_issues\\\": 211.0}, {\\\"day\\\": \\\"2020-01-06T00:00:00\\\", \\\"num_issues\\\": 210.0}, {\\\"day\\\": \\\"2020-01-07T00:00:00\\\", \\\"num_issues\\\": 218.0}, {\\\"day\\\": \\\"2020-01-08T00:00:00\\\", \\\"num_issues\\\": 208.0}, {\\\"day\\\": \\\"2020-01-09T00:00:00\\\", \\\"num_issues\\\": 209.0}, {\\\"day\\\": \\\"2020-01-10T00:00:00\\\", \\\"num_issues\\\": 199.0}, {\\\"day\\\": \\\"2020-01-11T00:00:00\\\", \\\"num_issues\\\": 201.0}, {\\\"day\\\": \\\"2020-01-12T00:00:00\\\", \\\"num_issues\\\": 203.0}, {\\\"day\\\": \\\"2020-01-13T00:00:00\\\", \\\"num_issues\\\": 182.0}, {\\\"day\\\": \\\"2020-01-14T00:00:00\\\", \\\"num_issues\\\": 185.0}, {\\\"day\\\": \\\"2020-01-15T00:00:00\\\", \\\"num_issues\\\": 185.0}, {\\\"day\\\": \\\"2020-01-16T00:00:00\\\", \\\"num_issues\\\": 189.0}, {\\\"day\\\": \\\"2020-01-17T00:00:00\\\", \\\"num_issues\\\": 195.0}, {\\\"day\\\": \\\"2020-01-18T00:00:00\\\", \\\"num_issues\\\": 198.0}, {\\\"day\\\": \\\"2020-01-19T00:00:00\\\", \\\"num_issues\\\": 197.0}, {\\\"day\\\": \\\"2020-01-20T00:00:00\\\", \\\"num_issues\\\": 198.0}, {\\\"day\\\": \\\"2020-01-21T00:00:00\\\", \\\"num_issues\\\": 208.0}, {\\\"day\\\": \\\"2020-01-22T00:00:00\\\", \\\"num_issues\\\": 218.0}, {\\\"day\\\": \\\"2020-01-23T00:00:00\\\", \\\"num_issues\\\": 240.0}, {\\\"day\\\": \\\"2020-01-24T00:00:00\\\", \\\"num_issues\\\": 244.0}, {\\\"day\\\": \\\"2020-01-25T00:00:00\\\", \\\"num_issues\\\": 243.0}, {\\\"day\\\": \\\"2020-01-26T00:00:00\\\", \\\"num_issues\\\": 246.0}, {\\\"day\\\": \\\"2020-01-27T00:00:00\\\", \\\"num_issues\\\": 247.0}, {\\\"day\\\": \\\"2020-01-28T00:00:00\\\", \\\"num_issues\\\": 257.0}, {\\\"day\\\": \\\"2020-01-29T00:00:00\\\", \\\"num_issues\\\": 277.0}, {\\\"day\\\": \\\"2020-01-30T00:00:00\\\", \\\"num_issues\\\": 295.0}, {\\\"day\\\": \\\"2020-01-31T00:00:00\\\", \\\"num_issues\\\": 303.0}, {\\\"day\\\": \\\"2020-02-01T00:00:00\\\", \\\"num_issues\\\": 305.0}, {\\\"day\\\": \\\"2020-02-02T00:00:00\\\", \\\"num_issues\\\": 311.0}, {\\\"day\\\": \\\"2020-02-03T00:00:00\\\", \\\"num_issues\\\": 314.0}, {\\\"day\\\": \\\"2020-02-04T00:00:00\\\", \\\"num_issues\\\": 317.0}, {\\\"day\\\": \\\"2020-02-05T00:00:00\\\", \\\"num_issues\\\": 325.0}, {\\\"day\\\": \\\"2020-02-06T00:00:00\\\", \\\"num_issues\\\": 321.0}, {\\\"day\\\": \\\"2020-02-07T00:00:00\\\", \\\"num_issues\\\": 326.0}, {\\\"day\\\": \\\"2020-02-08T00:00:00\\\", \\\"num_issues\\\": 324.0}, {\\\"day\\\": \\\"2020-02-09T00:00:00\\\", \\\"num_issues\\\": 331.0}, {\\\"day\\\": \\\"2020-02-10T00:00:00\\\", \\\"num_issues\\\": 344.0}, {\\\"day\\\": \\\"2020-02-11T00:00:00\\\", \\\"num_issues\\\": 353.0}, {\\\"day\\\": \\\"2020-02-12T00:00:00\\\", \\\"num_issues\\\": 373.0}, {\\\"day\\\": \\\"2020-02-13T00:00:00\\\", \\\"num_issues\\\": 382.0}, {\\\"day\\\": \\\"2020-02-14T00:00:00\\\", \\\"num_issues\\\": 389.0}, {\\\"day\\\": \\\"2020-02-15T00:00:00\\\", \\\"num_issues\\\": 387.0}, {\\\"day\\\": \\\"2020-02-16T00:00:00\\\", \\\"num_issues\\\": 388.0}, {\\\"day\\\": \\\"2020-02-17T00:00:00\\\", \\\"num_issues\\\": 391.0}, {\\\"day\\\": \\\"2020-02-18T00:00:00\\\", \\\"num_issues\\\": 384.0}, {\\\"day\\\": \\\"2020-02-19T00:00:00\\\", \\\"num_issues\\\": 390.0}, {\\\"day\\\": \\\"2020-02-20T00:00:00\\\", \\\"num_issues\\\": 376.0}, {\\\"day\\\": \\\"2020-02-21T00:00:00\\\", \\\"num_issues\\\": 376.0}, {\\\"day\\\": \\\"2020-02-22T00:00:00\\\", \\\"num_issues\\\": 378.0}, {\\\"day\\\": \\\"2020-02-23T00:00:00\\\", \\\"num_issues\\\": 377.0}, {\\\"day\\\": \\\"2020-02-24T00:00:00\\\", \\\"num_issues\\\": 393.0}, {\\\"day\\\": \\\"2020-02-25T00:00:00\\\", \\\"num_issues\\\": 382.0}, {\\\"day\\\": \\\"2020-02-26T00:00:00\\\", \\\"num_issues\\\": 368.0}, {\\\"day\\\": \\\"2020-02-27T00:00:00\\\", \\\"num_issues\\\": 355.0}, {\\\"day\\\": \\\"2020-02-28T00:00:00\\\", \\\"num_issues\\\": 354.0}, {\\\"day\\\": \\\"2020-02-29T00:00:00\\\", \\\"num_issues\\\": 354.0}, {\\\"day\\\": \\\"2020-03-01T00:00:00\\\", \\\"num_issues\\\": 350.0}, {\\\"day\\\": \\\"2020-03-02T00:00:00\\\", \\\"num_issues\\\": 339.0}, {\\\"day\\\": \\\"2020-03-03T00:00:00\\\", \\\"num_issues\\\": 335.0}, {\\\"day\\\": \\\"2020-03-04T00:00:00\\\", \\\"num_issues\\\": 335.0}, {\\\"day\\\": \\\"2020-03-05T00:00:00\\\", \\\"num_issues\\\": 334.0}, {\\\"day\\\": \\\"2020-03-06T00:00:00\\\", \\\"num_issues\\\": 332.0}, {\\\"day\\\": \\\"2020-03-07T00:00:00\\\", \\\"num_issues\\\": 333.0}, {\\\"day\\\": \\\"2020-03-08T00:00:00\\\", \\\"num_issues\\\": 328.0}, {\\\"day\\\": \\\"2020-03-09T00:00:00\\\", \\\"num_issues\\\": 319.0}, {\\\"day\\\": \\\"2020-03-10T00:00:00\\\", \\\"num_issues\\\": 320.0}, {\\\"day\\\": \\\"2020-03-11T00:00:00\\\", \\\"num_issues\\\": 306.0}, {\\\"day\\\": \\\"2020-03-12T00:00:00\\\", \\\"num_issues\\\": 302.0}, {\\\"day\\\": \\\"2020-03-13T00:00:00\\\", \\\"num_issues\\\": 300.0}, {\\\"day\\\": \\\"2020-03-14T00:00:00\\\", \\\"num_issues\\\": 299.0}, {\\\"day\\\": \\\"2020-03-15T00:00:00\\\", \\\"num_issues\\\": 303.0}, {\\\"day\\\": \\\"2020-03-16T00:00:00\\\", \\\"num_issues\\\": 314.0}, {\\\"day\\\": \\\"2020-03-17T00:00:00\\\", \\\"num_issues\\\": 325.0}, {\\\"day\\\": \\\"2020-03-18T00:00:00\\\", \\\"num_issues\\\": 324.0}, {\\\"day\\\": \\\"2020-03-19T00:00:00\\\", \\\"num_issues\\\": 322.0}, {\\\"day\\\": \\\"2020-03-20T00:00:00\\\", \\\"num_issues\\\": 330.0}, {\\\"day\\\": \\\"2020-03-21T00:00:00\\\", \\\"num_issues\\\": 330.0}, {\\\"day\\\": \\\"2020-03-22T00:00:00\\\", \\\"num_issues\\\": 328.0}, {\\\"day\\\": \\\"2020-03-23T00:00:00\\\", \\\"num_issues\\\": 329.0}, {\\\"day\\\": \\\"2020-03-24T00:00:00\\\", \\\"num_issues\\\": 339.0}, {\\\"day\\\": \\\"2020-03-25T00:00:00\\\", \\\"num_issues\\\": 347.0}, {\\\"day\\\": \\\"2020-03-26T00:00:00\\\", \\\"num_issues\\\": 347.0}, {\\\"day\\\": \\\"2020-03-27T00:00:00\\\", \\\"num_issues\\\": 344.0}, {\\\"day\\\": \\\"2020-03-29T00:00:00\\\", \\\"num_issues\\\": 344.0}, {\\\"day\\\": \\\"2020-03-30T00:00:00\\\", \\\"num_issues\\\": 348.0}, {\\\"day\\\": \\\"2020-03-31T00:00:00\\\", \\\"num_issues\\\": 340.0}, {\\\"day\\\": \\\"2020-04-01T00:00:00\\\", \\\"num_issues\\\": 331.0}, {\\\"day\\\": \\\"2020-04-02T00:00:00\\\", \\\"num_issues\\\": 334.0}, {\\\"day\\\": \\\"2020-04-03T00:00:00\\\", \\\"num_issues\\\": 341.0}, {\\\"day\\\": \\\"2020-04-04T00:00:00\\\", \\\"num_issues\\\": 342.0}, {\\\"day\\\": \\\"2020-04-05T00:00:00\\\", \\\"num_issues\\\": 343.0}, {\\\"day\\\": \\\"2020-04-06T00:00:00\\\", \\\"num_issues\\\": 345.0}, {\\\"day\\\": \\\"2020-04-07T00:00:00\\\", \\\"num_issues\\\": 345.0}, {\\\"day\\\": \\\"2020-04-08T00:00:00\\\", \\\"num_issues\\\": 343.0}, {\\\"day\\\": \\\"2020-04-09T00:00:00\\\", \\\"num_issues\\\": 336.0}, {\\\"day\\\": \\\"2020-04-10T00:00:00\\\", \\\"num_issues\\\": 341.0}, {\\\"day\\\": \\\"2020-04-11T00:00:00\\\", \\\"num_issues\\\": 343.0}, {\\\"day\\\": \\\"2020-04-12T00:00:00\\\", \\\"num_issues\\\": 346.0}, {\\\"day\\\": \\\"2020-04-13T00:00:00\\\", \\\"num_issues\\\": 333.0}, {\\\"day\\\": \\\"2020-04-14T00:00:00\\\", \\\"num_issues\\\": 333.0}, {\\\"day\\\": \\\"2020-04-15T00:00:00\\\", \\\"num_issues\\\": 326.0}, {\\\"day\\\": \\\"2020-04-16T00:00:00\\\", \\\"num_issues\\\": 332.0}, {\\\"day\\\": \\\"2020-04-17T00:00:00\\\", \\\"num_issues\\\": 333.0}, {\\\"day\\\": \\\"2020-04-19T00:00:00\\\", \\\"num_issues\\\": 332.0}, {\\\"day\\\": \\\"2020-04-20T00:00:00\\\", \\\"num_issues\\\": 339.0}, {\\\"day\\\": \\\"2020-04-21T00:00:00\\\", \\\"num_issues\\\": 341.0}, {\\\"day\\\": \\\"2020-04-22T00:00:00\\\", \\\"num_issues\\\": 335.0}, {\\\"day\\\": \\\"2020-04-23T00:00:00\\\", \\\"num_issues\\\": 339.0}, {\\\"day\\\": \\\"2020-04-24T00:00:00\\\", \\\"num_issues\\\": 341.0}, {\\\"day\\\": \\\"2020-04-25T00:00:00\\\", \\\"num_issues\\\": 346.0}, {\\\"day\\\": \\\"2020-04-26T00:00:00\\\", \\\"num_issues\\\": 344.0}, {\\\"day\\\": \\\"2020-04-27T00:00:00\\\", \\\"num_issues\\\": 349.0}, {\\\"day\\\": \\\"2020-04-28T00:00:00\\\", \\\"num_issues\\\": 350.0}, {\\\"day\\\": \\\"2020-04-29T00:00:00\\\", \\\"num_issues\\\": 356.0}, {\\\"day\\\": \\\"2020-04-30T00:00:00\\\", \\\"num_issues\\\": 354.0}, {\\\"day\\\": \\\"2020-05-01T00:00:00\\\", \\\"num_issues\\\": 346.0}, {\\\"day\\\": \\\"2020-05-02T00:00:00\\\", \\\"num_issues\\\": 350.0}, {\\\"day\\\": \\\"2020-05-03T00:00:00\\\", \\\"num_issues\\\": 348.0}, {\\\"day\\\": \\\"2020-05-04T00:00:00\\\", \\\"num_issues\\\": 340.0}, {\\\"day\\\": \\\"2020-05-05T00:00:00\\\", \\\"num_issues\\\": 334.0}, {\\\"day\\\": \\\"2020-05-06T00:00:00\\\", \\\"num_issues\\\": 337.0}, {\\\"day\\\": \\\"2020-05-07T00:00:00\\\", \\\"num_issues\\\": 337.0}, {\\\"day\\\": \\\"2020-05-08T00:00:00\\\", \\\"num_issues\\\": 327.0}, {\\\"day\\\": \\\"2020-05-09T00:00:00\\\", \\\"num_issues\\\": 335.0}, {\\\"day\\\": \\\"2020-05-10T00:00:00\\\", \\\"num_issues\\\": 328.0}, {\\\"day\\\": \\\"2020-05-11T00:00:00\\\", \\\"num_issues\\\": 329.0}, {\\\"day\\\": \\\"2020-05-12T00:00:00\\\", \\\"num_issues\\\": 322.0}, {\\\"day\\\": \\\"2020-05-13T00:00:00\\\", \\\"num_issues\\\": 324.0}, {\\\"day\\\": \\\"2020-05-14T00:00:00\\\", \\\"num_issues\\\": 321.0}, {\\\"day\\\": \\\"2020-05-15T00:00:00\\\", \\\"num_issues\\\": 327.0}, {\\\"day\\\": \\\"2020-05-16T00:00:00\\\", \\\"num_issues\\\": 330.0}, {\\\"day\\\": \\\"2020-05-17T00:00:00\\\", \\\"num_issues\\\": 328.0}, {\\\"day\\\": \\\"2020-05-18T00:00:00\\\", \\\"num_issues\\\": 318.0}, {\\\"day\\\": \\\"2020-05-19T00:00:00\\\", \\\"num_issues\\\": 319.0}, {\\\"day\\\": \\\"2020-05-20T00:00:00\\\", \\\"num_issues\\\": 329.0}, {\\\"day\\\": \\\"2020-05-21T00:00:00\\\", \\\"num_issues\\\": 328.0}, {\\\"day\\\": \\\"2020-05-22T00:00:00\\\", \\\"num_issues\\\": 332.0}, {\\\"day\\\": \\\"2020-05-23T00:00:00\\\", \\\"num_issues\\\": 329.0}, {\\\"day\\\": \\\"2020-05-25T00:00:00\\\", \\\"num_issues\\\": 314.0}, {\\\"day\\\": \\\"2020-05-26T00:00:00\\\", \\\"num_issues\\\": 315.0}, {\\\"day\\\": \\\"2020-05-27T00:00:00\\\", \\\"num_issues\\\": 305.0}, {\\\"day\\\": \\\"2020-05-28T00:00:00\\\", \\\"num_issues\\\": 305.0}, {\\\"day\\\": \\\"2020-05-29T00:00:00\\\", \\\"num_issues\\\": 310.0}, {\\\"day\\\": \\\"2020-05-30T00:00:00\\\", \\\"num_issues\\\": 307.0}, {\\\"day\\\": \\\"2020-05-31T00:00:00\\\", \\\"num_issues\\\": 306.0}, {\\\"day\\\": \\\"2020-06-01T00:00:00\\\", \\\"num_issues\\\": 311.0}, {\\\"day\\\": \\\"2020-06-02T00:00:00\\\", \\\"num_issues\\\": 302.0}, {\\\"day\\\": \\\"2020-06-03T00:00:00\\\", \\\"num_issues\\\": 297.0}, {\\\"day\\\": \\\"2020-06-04T00:00:00\\\", \\\"num_issues\\\": 301.0}, {\\\"day\\\": \\\"2020-06-05T00:00:00\\\", \\\"num_issues\\\": 295.0}, {\\\"day\\\": \\\"2020-06-06T00:00:00\\\", \\\"num_issues\\\": 285.0}, {\\\"day\\\": \\\"2020-06-07T00:00:00\\\", \\\"num_issues\\\": 283.0}, {\\\"day\\\": \\\"2020-06-08T00:00:00\\\", \\\"num_issues\\\": 287.0}, {\\\"day\\\": \\\"2020-06-09T00:00:00\\\", \\\"num_issues\\\": 294.0}, {\\\"day\\\": \\\"2020-06-10T00:00:00\\\", \\\"num_issues\\\": 285.0}, {\\\"day\\\": \\\"2020-06-11T00:00:00\\\", \\\"num_issues\\\": 291.0}, {\\\"day\\\": \\\"2020-06-12T00:00:00\\\", \\\"num_issues\\\": 276.0}, {\\\"day\\\": \\\"2020-06-13T00:00:00\\\", \\\"num_issues\\\": 274.0}, {\\\"day\\\": \\\"2020-06-14T00:00:00\\\", \\\"num_issues\\\": 273.0}, {\\\"day\\\": \\\"2020-06-15T00:00:00\\\", \\\"num_issues\\\": 266.0}, {\\\"day\\\": \\\"2020-06-16T00:00:00\\\", \\\"num_issues\\\": 278.0}, {\\\"day\\\": \\\"2020-06-17T00:00:00\\\", \\\"num_issues\\\": 275.0}, {\\\"day\\\": \\\"2020-06-18T00:00:00\\\", \\\"num_issues\\\": 283.0}, {\\\"day\\\": \\\"2020-06-19T00:00:00\\\", \\\"num_issues\\\": 274.0}, {\\\"day\\\": \\\"2020-06-20T00:00:00\\\", \\\"num_issues\\\": 275.0}, {\\\"day\\\": \\\"2020-06-21T00:00:00\\\", \\\"num_issues\\\": 278.0}, {\\\"day\\\": \\\"2020-06-22T00:00:00\\\", \\\"num_issues\\\": 280.0}, {\\\"day\\\": \\\"2020-06-23T00:00:00\\\", \\\"num_issues\\\": 290.0}, {\\\"day\\\": \\\"2020-06-24T00:00:00\\\", \\\"num_issues\\\": 298.0}, {\\\"day\\\": \\\"2020-06-25T00:00:00\\\", \\\"num_issues\\\": 302.0}, {\\\"day\\\": \\\"2020-06-26T00:00:00\\\", \\\"num_issues\\\": 297.0}, {\\\"day\\\": \\\"2020-06-27T00:00:00\\\", \\\"num_issues\\\": 296.0}, {\\\"day\\\": \\\"2020-06-28T00:00:00\\\", \\\"num_issues\\\": 310.0}, {\\\"day\\\": \\\"2020-06-29T00:00:00\\\", \\\"num_issues\\\": 306.0}, {\\\"day\\\": \\\"2020-06-30T00:00:00\\\", \\\"num_issues\\\": 321.0}, {\\\"day\\\": \\\"2020-07-01T00:00:00\\\", \\\"num_issues\\\": 316.0}, {\\\"day\\\": \\\"2020-07-02T00:00:00\\\", \\\"num_issues\\\": 317.0}, {\\\"day\\\": \\\"2020-07-03T00:00:00\\\", \\\"num_issues\\\": 318.0}, {\\\"day\\\": \\\"2020-07-04T00:00:00\\\", \\\"num_issues\\\": 317.0}, {\\\"day\\\": \\\"2020-07-05T00:00:00\\\", \\\"num_issues\\\": 319.0}, {\\\"day\\\": \\\"2020-07-06T00:00:00\\\", \\\"num_issues\\\": 320.0}, {\\\"day\\\": \\\"2020-07-07T00:00:00\\\", \\\"num_issues\\\": 314.0}, {\\\"day\\\": \\\"2020-07-08T00:00:00\\\", \\\"num_issues\\\": 328.0}, {\\\"day\\\": \\\"2020-07-09T00:00:00\\\", \\\"num_issues\\\": 324.0}, {\\\"day\\\": \\\"2020-07-10T00:00:00\\\", \\\"num_issues\\\": 328.0}, {\\\"day\\\": \\\"2020-07-11T00:00:00\\\", \\\"num_issues\\\": 331.0}, {\\\"day\\\": \\\"2020-07-12T00:00:00\\\", \\\"num_issues\\\": 332.0}, {\\\"day\\\": \\\"2020-07-13T00:00:00\\\", \\\"num_issues\\\": 333.0}, {\\\"day\\\": \\\"2020-07-14T00:00:00\\\", \\\"num_issues\\\": 325.0}, {\\\"day\\\": \\\"2020-07-15T00:00:00\\\", \\\"num_issues\\\": 329.0}, {\\\"day\\\": \\\"2020-07-16T00:00:00\\\", \\\"num_issues\\\": 332.0}, {\\\"day\\\": \\\"2020-07-17T00:00:00\\\", \\\"num_issues\\\": 333.0}, {\\\"day\\\": \\\"2020-07-18T00:00:00\\\", \\\"num_issues\\\": 335.0}, {\\\"day\\\": \\\"2020-07-19T00:00:00\\\", \\\"num_issues\\\": 334.0}, {\\\"day\\\": \\\"2020-07-20T00:00:00\\\", \\\"num_issues\\\": 333.0}, {\\\"day\\\": \\\"2020-07-21T00:00:00\\\", \\\"num_issues\\\": 320.0}, {\\\"day\\\": \\\"2020-07-22T00:00:00\\\", \\\"num_issues\\\": 319.0}, {\\\"day\\\": \\\"2020-07-23T00:00:00\\\", \\\"num_issues\\\": 312.0}, {\\\"day\\\": \\\"2020-07-24T00:00:00\\\", \\\"num_issues\\\": 318.0}]}}, {\\\"mode\\\": \\\"vega-lite\\\"});\\n\",\n       \"</script>\"\n      ],\n      \"text/plain\": [\n       \"alt.LayerChart(...)\"\n      ]\n     },\n     \"execution_count\": 24,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"issues_df = pd.DataFrame({\\\"day\\\": rolling_issue_count.index, \\\"num_issues\\\": rolling_issue_count.values})\\n\",\n    \"issues_df = issues_df.groupby(\\\"day\\\", as_index=False).max()\\n\",\n    \"\\n\",\n    \"# Truncate the first 28 days because it will be a windowing effect.\\n\",\n    \"chart = alt.Chart(issues_df[28:], title= \\\"New Issues (Last 28 Days)\\\")\\n\",\n    \"line = chart.mark_line().encode(\\n\",\n    \"  x= alt.X('day', title = \\\"Day\\\"),\\n\",\n    \"  y=alt.Y(\\\"num_issues\\\", title=\\\"# issues\\\"),    \\n\",\n    \")\\n\",\n    \"\\n\",\n    \"point = line + line.mark_point()\\n\",\n    \"point.interactive()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 21,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"ename\": \"ModuleNotFoundError\",\n     \"evalue\": \"No module named 'matplotlib'\",\n     \"output_type\": \"error\",\n     \"traceback\": [\n      \"\\u001b[0;31m---------------------------------------------------------------------------\\u001b[0m\",\n      \"\\u001b[0;31mModuleNotFoundError\\u001b[0m                       Traceback (most recent call last)\",\n      \"\\u001b[0;32m<ipython-input-21-6baedf8ffd84>\\u001b[0m in \\u001b[0;36m<module>\\u001b[0;34m\\u001b[0m\\n\\u001b[0;32m----> 1\\u001b[0;31m \\u001b[0;32mimport\\u001b[0m \\u001b[0mmatplotlib\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[0m\\u001b[1;32m      2\\u001b[0m \\u001b[0;32mfrom\\u001b[0m \\u001b[0mmatplotlib\\u001b[0m \\u001b[0;32mimport\\u001b[0m \\u001b[0mpylab\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m      3\\u001b[0m \\u001b[0mmatplotlib\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0mrcParams\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0mupdate\\u001b[0m\\u001b[0;34m(\\u001b[0m\\u001b[0;34m{\\u001b[0m\\u001b[0;34m'font.size'\\u001b[0m\\u001b[0;34m:\\u001b[0m \\u001b[0;36m22\\u001b[0m\\u001b[0;34m}\\u001b[0m\\u001b[0;34m)\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m      4\\u001b[0m \\u001b[0mhf\\u001b[0m \\u001b[0;34m=\\u001b[0m \\u001b[0mpylab\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0mfigure\\u001b[0m\\u001b[0;34m(\\u001b[0m\\u001b[0;34m)\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m      5\\u001b[0m \\u001b[0mhf\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0mset_size_inches\\u001b[0m\\u001b[0;34m(\\u001b[0m\\u001b[0;36m18.5\\u001b[0m\\u001b[0;34m,\\u001b[0m \\u001b[0;36m10.5\\u001b[0m\\u001b[0;34m)\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\",\n      \"\\u001b[0;31mModuleNotFoundError\\u001b[0m: No module named 'matplotlib'\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"import matplotlib\\n\",\n    \"from matplotlib import pylab\\n\",\n    \"matplotlib.rcParams.update({'font.size': 22})\\n\",\n    \"hf = pylab.figure()\\n\",\n    \"hf.set_size_inches(18.5, 10.5)\\n\",\n    \"pylab.plot(rolling_issue_count, linewidth=5)\\n\",\n    \"ha = pylab.gca()\\n\",\n    \"ha.set_title(\\\"New Kubeflow Issues (28 Days)\\\")\\n\",\n    \"ha.set_xlabel(\\\"Date\\\")\\n\",\n    \"ha.set_ylabel(\\\"# Of Issues\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## GetSomeSampleIssue Events\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"query = \\\"\\\"\\\"\\n\",\n    \"SELECT\\n\",\n    \"    *\\n\",\n    \"  FROM `githubarchive.month.*`\\n\",\n    \"  WHERE\\n\",\n    \"    _TABLE_SUFFIX IN ({0})\\n\",\n    \"    AND type = 'IssuesEvent'\\n\",\n    \"    AND org.login = 'kubeflow'\\n\",\n    \"    \\n\",\n    \"    limit 20\\n\",\n    \"\\\"\\\"\\\".format(\\\",\\\".join(months))\\n\",\n    \"\\n\",\n    \"events=gbq.read_gbq(str(query), dialect='standard', project_id=PROJECT)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"events\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Get some sample pull request events \\n\",\n    \"\\n\",\n    \"* Want to inspect the data\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"query = \\\"\\\"\\\"\\n\",\n    \"SELECT\\n\",\n    \"    *\\n\",\n    \"  FROM `githubarchive.month.*`\\n\",\n    \"  WHERE\\n\",\n    \"    _TABLE_SUFFIX IN ({0})\\n\",\n    \"    AND type = 'PullRequestEvent'\\n\",\n    \"    AND org.login = 'kubeflow'\\n\",\n    \"    \\n\",\n    \"    limit 20\\n\",\n    \"\\\"\\\"\\\".format(\\\",\\\".join(months))\\n\",\n    \"\\n\",\n    \"events=gbq.read_gbq(str(query), dialect='standard', project_id=PROJECT)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import pprint\\n\",\n    \"import json\\n\",\n    \"data = json.loads(events[\\\"payload\\\"].values[3])\\n\",\n    \"pprint.pprint(data)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"data[\\\"pull_request\\\"][\\\"id\\\"]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Get Distinct Types\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"query = \\\"\\\"\\\"\\n\",\n    \"SELECT\\n\",\n    \"    distinct type\\n\",\n    \"  FROM `githubarchive.month.*`\\n\",\n    \"  WHERE\\n\",\n    \"    _TABLE_SUFFIX IN ({0})    \\n\",\n    \"    AND org.login = 'kubeflow'\\n\",\n    \"    \\n\",\n    \"    limit 20\\n\",\n    \"\\\"\\\"\\\".format(\\\",\\\".join(months))\\n\",\n    \"\\n\",\n    \"events=gbq.read_gbq(str(query), dialect='standard', project_id=PROJECT)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"events\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.8.4rc1\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "scripts/kf1.0_stats.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Compute Project Stats\\n\",\n    \"*Ack: Derived from project_stats.ipynb and project_stats.py*\\n\",\n    \"\\n\",\n    \"* This notebook uses the GitHub [GraphQL API](https://developer.github.com/v4/) to compute the number of open and \\n\",\n    \"  closed bugs pertaining to Kubeflow GitHub Projects\\n\",\n    \"  * Stats are broken down by labels\\n\",\n    \"* Results are plotted using [plotly](https://plot.ly)\\n\",\n    \"  * Plots are contained in the notebook itself.\\n\",\n    \"  \\n\",\n    \"## Setup GitHub\\n\",\n    \"\\n\",\n    \"* You will need a GitHub personal access token in order to use the GitHub API\\n\",\n    \"* See these [instructions](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/) for creating a personal access token\\n\",\n    \"  * You will need the scopes:\\n\",\n    \"    * repo\\n\",\n    \"    * read:org    \\n\",\n    \"* Set the environment variable `GITHUB_TOKEN` to pass your token to the code\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Using Plotly v4.1.1 doesn't require account creation. Works offline.\\n\",\n    \"# https://plot.ly/python/getting-started/\\n\",\n    \"import plotly.graph_objs as go\\n\",\n    \"import itertools\\n\",\n    \"import math\\n\",\n    \"import pandas\\n\",\n    \"from IPython.display import display, HTML\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import project_stats\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Process issues from the specified Project\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"c = project_stats.ProjectStats(project=\\\"KF1.0\\\")\\n\",\n    \"c.main()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Make plots showing different groups of labels\\n\",\n    \"\\n\",\n    \"* Columns are multi level indexes\\n\",\n    \"* See [here](https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html) for instructions on multilevel indexes\\n\",\n    \"   * We specify a list of tuples where each tuple specifies the item to select at the corresponding level in the index\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Compute expected effort \\n\",\n    \"\\n\",\n    \"The following section adds up the expected engineering effort required for the project. Here is the approach:\\n\",\n    \"  \\n\",\n    \"  - The issues in the 1.0 project need to be tagged with approprite expected effort labels. Each effort label is costed to #days of work as shown in the dictionary below.\\n\",\n    \"  - Query KF1.0 project for all current issues and count the #issues with each effort label attached.\\n\",\n    \"  - Compute the distribution of issues across different effort buckets.\\n\",\n    \"  - Add the weighted effort to compute total number of days needed for all the issues.\\n\",\n    \"  - Convert the effort to # engineering weeks needed based on 5 days for a week.\\n\",\n    \"\\n\",\n    \"The distribution is computed for *open* issues as well as issues in any state to compare total expected effort vs. remaining effort required.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Costs of effort labels in workdays per eng\\n\",\n    \"effort_labels_costs = { \\n\",\n    \"    \\\"effort/1-day\\\" : 1,\\n\",\n    \"    \\\"effort/1-days\\\" : 1,\\n\",\n    \"    \\\"effort/3-days\\\" : 3,\\n\",\n    \"    \\\"effort/5-days\\\" : 5,\\n\",\n    \"    \\\"effort/2-weeks\\\" : 10,\\n\",\n    \"# removed temporarily because no issues in KF1.0 refer to this label yet\\n\",\n    \"#    \\\"effort/2-weeks+\\\" : 20\\n\",\n    \"}\\n\",\n    \"\\n\",\n    \"effort_labels = list(effort_labels_costs.keys())\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def current_effort_distribution(stats_df, open_or_total='open'):\\n\",\n    \"    return stats_df[open_or_total][effort_labels].tail(1)\\n\",\n    \"    \\n\",\n    \"def open_effort_distribution(stats_df):\\n\",\n    \"    return current_effort_distribution(stats_df, 'open')\\n\",\n    \"\\n\",\n    \"def total_effort_distribution(stats_df):\\n\",\n    \"    return current_effort_distribution(stats_df, 'total')\\n\",\n    \"\\n\",\n    \"def current_effort_weeks(stats_df, open_or_total='open'):\\n\",\n    \"    e = current_effort_distribution(stats_df, open_or_total)\\n\",\n    \"    days = sum([e.iloc[0, e.columns.get_loc(l)] * effort_labels_costs[l] for l in effort_labels])\\n\",\n    \"    # consider 5 workdays in weeks\\n\",\n    \"    return math.ceil(days / 5)\\n\",\n    \"\\n\",\n    \"def open_effort_weeks(stats_df):\\n\",\n    \"    return current_effort_weeks(stats_df, 'open')\\n\",\n    \"\\n\",\n    \"def total_effort_weeks(stats_df):\\n\",\n    \"    return current_effort_weeks(stats_df, 'total')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th>label</th>\\n\",\n       \"      <th>effort/1-day</th>\\n\",\n       \"      <th>effort/1-days</th>\\n\",\n       \"      <th>effort/3-days</th>\\n\",\n       \"      <th>effort/5-days</th>\\n\",\n       \"      <th>effort/2-weeks</th>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>time</th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <td>2019-09-18 13:18:46</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"label                effort/1-day  effort/1-days  effort/3-days  \\\\\\n\",\n       \"time                                                              \\n\",\n       \"2019-09-18 13:18:46             4              6              7   \\n\",\n       \"\\n\",\n       \"label                effort/5-days  effort/2-weeks  \\n\",\n       \"time                                                \\n\",\n       \"2019-09-18 13:18:46              7               7  \"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"open_effort_distribution(c.stats)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th>label</th>\\n\",\n       \"      <th>effort/1-day</th>\\n\",\n       \"      <th>effort/1-days</th>\\n\",\n       \"      <th>effort/3-days</th>\\n\",\n       \"      <th>effort/5-days</th>\\n\",\n       \"      <th>effort/2-weeks</th>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>time</th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <td>2019-09-18 13:18:46</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"label                effort/1-day  effort/1-days  effort/3-days  \\\\\\n\",\n       \"time                                                              \\n\",\n       \"2019-09-18 13:18:46             4              6              7   \\n\",\n       \"\\n\",\n       \"label                effort/5-days  effort/2-weeks  \\n\",\n       \"time                                                \\n\",\n       \"2019-09-18 13:18:46              7               7  \"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"total_effort_distribution(c.stats)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 29,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Open effort needed (in weeks):\\n\",\n      \"28\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"print(\\\"Open effort needed (in weeks):\\\")\\n\",\n    \"print(open_effort_weeks(c.stats))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 28,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Total expected effort for the project (in weeks):\\n\",\n      \"28\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"print(\\\"Total expected effort for the project (in weeks):\\\")\\n\",\n    \"print(total_effort_weeks(c.stats))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {\n    \"scrolled\": true\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"        <script type=\\\"text/javascript\\\">\\n\",\n       \"        window.PlotlyConfig = {MathJaxConfig: 'local'};\\n\",\n       \"        if (window.MathJax) {MathJax.Hub.Config({SVG: {font: \\\"STIX-Web\\\"}});}\\n\",\n       \"        if (typeof require !== 'undefined') {\\n\",\n       \"        require.undef(\\\"plotly\\\");\\n\",\n       \"        define('plotly', function(require, exports, module) {\\n\",\n       \"            /**\\n\",\n       \"* plotly.js v1.49.4\\n\",\n       \"* Copyright 2012-2019, Plotly, Inc.\\n\",\n       \"* All rights reserved.\\n\",\n       \"* Licensed under the MIT license\\n\",\n       \"*/\\n\",\n       \"!function(t){if(\\\"object\\\"==typeof exports&&\\\"undefined\\\"!=typeof module)module.exports=t();else if(\\\"function\\\"==typeof define&&define.amd)define([],t);else{(\\\"undefined\\\"!=typeof window?window:\\\"undefined\\\"!=typeof global?global:\\\"undefined\\\"!=typeof self?self:this).Plotly=t()}}(function(){return function(){return function t(e,r,n){function i(o,s){if(!r[o]){if(!e[o]){var l=\\\"function\\\"==typeof require&&require;if(!s&&l)return l(o,!0);if(a)return a(o,!0);var c=new Error(\\\"Cannot find module '\\\"+o+\\\"'\\\");throw c.code=\\\"MODULE_NOT_FOUND\\\",c}var u=r[o]={exports:{}};e[o][0].call(u.exports,function(t){return i(e[o][1][t]||t)},u,u.exports,t,e,r,n)}return r[o].exports}for(var a=\\\"function\\\"==typeof require&&require,o=0;o<n.length;o++)i(n[o]);return i}}()({1:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../src/lib\\\"),i={\\\"X,X div\\\":\\\"direction:ltr;font-family:'Open Sans', verdana, arial, sans-serif;margin:0;padding:0;\\\",\\\"X input,X button\\\":\\\"font-family:'Open Sans', verdana, arial, sans-serif;\\\",\\\"X input:focus,X button:focus\\\":\\\"outline:none;\\\",\\\"X a\\\":\\\"text-decoration:none;\\\",\\\"X a:hover\\\":\\\"text-decoration:none;\\\",\\\"X .crisp\\\":\\\"shape-rendering:crispEdges;\\\",\\\"X .user-select-none\\\":\\\"-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;\\\",\\\"X svg\\\":\\\"overflow:hidden;\\\",\\\"X svg a\\\":\\\"fill:#447adb;\\\",\\\"X svg a:hover\\\":\\\"fill:#3c6dc5;\\\",\\\"X .main-svg\\\":\\\"position:absolute;top:0;left:0;pointer-events:none;\\\",\\\"X .main-svg .draglayer\\\":\\\"pointer-events:all;\\\",\\\"X .cursor-default\\\":\\\"cursor:default;\\\",\\\"X .cursor-pointer\\\":\\\"cursor:pointer;\\\",\\\"X .cursor-crosshair\\\":\\\"cursor:crosshair;\\\",\\\"X .cursor-move\\\":\\\"cursor:move;\\\",\\\"X .cursor-col-resize\\\":\\\"cursor:col-resize;\\\",\\\"X .cursor-row-resize\\\":\\\"cursor:row-resize;\\\",\\\"X .cursor-ns-resize\\\":\\\"cursor:ns-resize;\\\",\\\"X .cursor-ew-resize\\\":\\\"cursor:ew-resize;\\\",\\\"X .cursor-sw-resize\\\":\\\"cursor:sw-resize;\\\",\\\"X .cursor-s-resize\\\":\\\"cursor:s-resize;\\\",\\\"X .cursor-se-resize\\\":\\\"cursor:se-resize;\\\",\\\"X .cursor-w-resize\\\":\\\"cursor:w-resize;\\\",\\\"X .cursor-e-resize\\\":\\\"cursor:e-resize;\\\",\\\"X .cursor-nw-resize\\\":\\\"cursor:nw-resize;\\\",\\\"X .cursor-n-resize\\\":\\\"cursor:n-resize;\\\",\\\"X .cursor-ne-resize\\\":\\\"cursor:ne-resize;\\\",\\\"X .cursor-grab\\\":\\\"cursor:-webkit-grab;cursor:grab;\\\",\\\"X .modebar\\\":\\\"position:absolute;top:2px;right:2px;\\\",\\\"X .ease-bg\\\":\\\"-webkit-transition:background-color 0.3s ease 0s;-moz-transition:background-color 0.3s ease 0s;-ms-transition:background-color 0.3s ease 0s;-o-transition:background-color 0.3s ease 0s;transition:background-color 0.3s ease 0s;\\\",\\\"X .modebar--hover>:not(.watermark)\\\":\\\"opacity:0;-webkit-transition:opacity 0.3s ease 0s;-moz-transition:opacity 0.3s ease 0s;-ms-transition:opacity 0.3s ease 0s;-o-transition:opacity 0.3s ease 0s;transition:opacity 0.3s ease 0s;\\\",\\\"X:hover .modebar--hover .modebar-group\\\":\\\"opacity:1;\\\",\\\"X .modebar-group\\\":\\\"float:left;display:inline-block;box-sizing:border-box;padding-left:8px;position:relative;vertical-align:middle;white-space:nowrap;\\\",\\\"X .modebar-btn\\\":\\\"position:relative;font-size:16px;padding:3px 4px;height:22px;cursor:pointer;line-height:normal;box-sizing:border-box;\\\",\\\"X .modebar-btn svg\\\":\\\"position:relative;top:2px;\\\",\\\"X .modebar.vertical\\\":\\\"display:flex;flex-direction:column;flex-wrap:wrap;align-content:flex-end;max-height:100%;\\\",\\\"X .modebar.vertical svg\\\":\\\"top:-1px;\\\",\\\"X .modebar.vertical .modebar-group\\\":\\\"display:block;float:none;padding-left:0px;padding-bottom:8px;\\\",\\\"X .modebar.vertical .modebar-group .modebar-btn\\\":\\\"display:block;text-align:center;\\\",\\\"X [data-title]:before,X [data-title]:after\\\":\\\"position:absolute;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%;\\\",\\\"X [data-title]:hover:before,X [data-title]:hover:after\\\":\\\"display:block;opacity:1;\\\",\\\"X [data-title]:before\\\":\\\"content:'';position:absolute;background:transparent;border:6px solid transparent;z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;\\\",\\\"X [data-title]:after\\\":\\\"content:attr(data-title);background:#69738a;color:white;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap;margin-right:-18px;border-radius:2px;\\\",\\\"X .vertical [data-title]:before,X .vertical [data-title]:after\\\":\\\"top:0%;right:200%;\\\",\\\"X .vertical [data-title]:before\\\":\\\"border:6px solid transparent;border-left-color:#69738a;margin-top:8px;margin-right:-30px;\\\",\\\"X .select-outline\\\":\\\"fill:none;stroke-width:1;shape-rendering:crispEdges;\\\",\\\"X .select-outline-1\\\":\\\"stroke:white;\\\",\\\"X .select-outline-2\\\":\\\"stroke:black;stroke-dasharray:2px 2px;\\\",Y:\\\"font-family:'Open Sans';position:fixed;top:50px;right:20px;z-index:10000;font-size:10pt;max-width:180px;\\\",\\\"Y p\\\":\\\"margin:0;\\\",\\\"Y .notifier-note\\\":\\\"min-width:180px;max-width:250px;border:1px solid #fff;z-index:3000;margin:0;background-color:#8c97af;background-color:rgba(140,151,175,0.9);color:#fff;padding:10px;overflow-wrap:break-word;word-wrap:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;\\\",\\\"Y .notifier-close\\\":\\\"color:#fff;opacity:0.8;float:right;padding:0 5px;background:none;border:none;font-size:20px;font-weight:bold;line-height:20px;\\\",\\\"Y .notifier-close:hover\\\":\\\"color:#444;text-decoration:none;cursor:pointer;\\\"};for(var a in i){var o=a.replace(/^,/,\\\" ,\\\").replace(/X/g,\\\".js-plotly-plot .plotly\\\").replace(/Y/g,\\\".plotly-notifier\\\");n.addStyleRule(o,i[a])}},{\\\"../src/lib\\\":719}],2:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/transforms/aggregate\\\")},{\\\"../src/transforms/aggregate\\\":1266}],3:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/bar\\\")},{\\\"../src/traces/bar\\\":864}],4:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/barpolar\\\")},{\\\"../src/traces/barpolar\\\":876}],5:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/box\\\")},{\\\"../src/traces/box\\\":886}],6:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/components/calendars\\\")},{\\\"../src/components/calendars\\\":591}],7:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/candlestick\\\")},{\\\"../src/traces/candlestick\\\":895}],8:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/carpet\\\")},{\\\"../src/traces/carpet\\\":914}],9:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/choropleth\\\")},{\\\"../src/traces/choropleth\\\":928}],10:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/choroplethmapbox\\\")},{\\\"../src/traces/choroplethmapbox\\\":935}],11:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/cone\\\")},{\\\"../src/traces/cone\\\":941}],12:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/contour\\\")},{\\\"../src/traces/contour\\\":956}],13:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/contourcarpet\\\")},{\\\"../src/traces/contourcarpet\\\":967}],14:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/core\\\")},{\\\"../src/core\\\":697}],15:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/densitymapbox\\\")},{\\\"../src/traces/densitymapbox\\\":977}],16:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/transforms/filter\\\")},{\\\"../src/transforms/filter\\\":1267}],17:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/funnel\\\")},{\\\"../src/traces/funnel\\\":987}],18:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/funnelarea\\\")},{\\\"../src/traces/funnelarea\\\":996}],19:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/transforms/groupby\\\")},{\\\"../src/transforms/groupby\\\":1268}],20:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/heatmap\\\")},{\\\"../src/traces/heatmap\\\":1009}],21:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/heatmapgl\\\")},{\\\"../src/traces/heatmapgl\\\":1018}],22:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/histogram\\\")},{\\\"../src/traces/histogram\\\":1030}],23:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/histogram2d\\\")},{\\\"../src/traces/histogram2d\\\":1036}],24:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/histogram2dcontour\\\")},{\\\"../src/traces/histogram2dcontour\\\":1040}],25:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./core\\\");n.register([t(\\\"./bar\\\"),t(\\\"./box\\\"),t(\\\"./heatmap\\\"),t(\\\"./histogram\\\"),t(\\\"./histogram2d\\\"),t(\\\"./histogram2dcontour\\\"),t(\\\"./contour\\\"),t(\\\"./scatterternary\\\"),t(\\\"./violin\\\"),t(\\\"./funnel\\\"),t(\\\"./waterfall\\\"),t(\\\"./pie\\\"),t(\\\"./sunburst\\\"),t(\\\"./funnelarea\\\"),t(\\\"./scatter3d\\\"),t(\\\"./surface\\\"),t(\\\"./isosurface\\\"),t(\\\"./volume\\\"),t(\\\"./mesh3d\\\"),t(\\\"./cone\\\"),t(\\\"./streamtube\\\"),t(\\\"./scattergeo\\\"),t(\\\"./choropleth\\\"),t(\\\"./scattergl\\\"),t(\\\"./splom\\\"),t(\\\"./pointcloud\\\"),t(\\\"./heatmapgl\\\"),t(\\\"./parcoords\\\"),t(\\\"./parcats\\\"),t(\\\"./scattermapbox\\\"),t(\\\"./choroplethmapbox\\\"),t(\\\"./densitymapbox\\\"),t(\\\"./sankey\\\"),t(\\\"./indicator\\\"),t(\\\"./table\\\"),t(\\\"./carpet\\\"),t(\\\"./scattercarpet\\\"),t(\\\"./contourcarpet\\\"),t(\\\"./ohlc\\\"),t(\\\"./candlestick\\\"),t(\\\"./scatterpolar\\\"),t(\\\"./scatterpolargl\\\"),t(\\\"./barpolar\\\")]),n.register([t(\\\"./aggregate\\\"),t(\\\"./filter\\\"),t(\\\"./groupby\\\"),t(\\\"./sort\\\")]),n.register([t(\\\"./calendars\\\")]),e.exports=n},{\\\"./aggregate\\\":2,\\\"./bar\\\":3,\\\"./barpolar\\\":4,\\\"./box\\\":5,\\\"./calendars\\\":6,\\\"./candlestick\\\":7,\\\"./carpet\\\":8,\\\"./choropleth\\\":9,\\\"./choroplethmapbox\\\":10,\\\"./cone\\\":11,\\\"./contour\\\":12,\\\"./contourcarpet\\\":13,\\\"./core\\\":14,\\\"./densitymapbox\\\":15,\\\"./filter\\\":16,\\\"./funnel\\\":17,\\\"./funnelarea\\\":18,\\\"./groupby\\\":19,\\\"./heatmap\\\":20,\\\"./heatmapgl\\\":21,\\\"./histogram\\\":22,\\\"./histogram2d\\\":23,\\\"./histogram2dcontour\\\":24,\\\"./indicator\\\":26,\\\"./isosurface\\\":27,\\\"./mesh3d\\\":28,\\\"./ohlc\\\":29,\\\"./parcats\\\":30,\\\"./parcoords\\\":31,\\\"./pie\\\":32,\\\"./pointcloud\\\":33,\\\"./sankey\\\":34,\\\"./scatter3d\\\":35,\\\"./scattercarpet\\\":36,\\\"./scattergeo\\\":37,\\\"./scattergl\\\":38,\\\"./scattermapbox\\\":39,\\\"./scatterpolar\\\":40,\\\"./scatterpolargl\\\":41,\\\"./scatterternary\\\":42,\\\"./sort\\\":43,\\\"./splom\\\":44,\\\"./streamtube\\\":45,\\\"./sunburst\\\":46,\\\"./surface\\\":47,\\\"./table\\\":48,\\\"./violin\\\":49,\\\"./volume\\\":50,\\\"./waterfall\\\":51}],26:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/indicator\\\")},{\\\"../src/traces/indicator\\\":1046}],27:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/isosurface\\\")},{\\\"../src/traces/isosurface\\\":1052}],28:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/mesh3d\\\")},{\\\"../src/traces/mesh3d\\\":1057}],29:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/ohlc\\\")},{\\\"../src/traces/ohlc\\\":1062}],30:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/parcats\\\")},{\\\"../src/traces/parcats\\\":1071}],31:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/parcoords\\\")},{\\\"../src/traces/parcoords\\\":1081}],32:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/pie\\\")},{\\\"../src/traces/pie\\\":1092}],33:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/pointcloud\\\")},{\\\"../src/traces/pointcloud\\\":1101}],34:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/sankey\\\")},{\\\"../src/traces/sankey\\\":1107}],35:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/scatter3d\\\")},{\\\"../src/traces/scatter3d\\\":1143}],36:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/scattercarpet\\\")},{\\\"../src/traces/scattercarpet\\\":1149}],37:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/scattergeo\\\")},{\\\"../src/traces/scattergeo\\\":1156}],38:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/scattergl\\\")},{\\\"../src/traces/scattergl\\\":1167}],39:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/scattermapbox\\\")},{\\\"../src/traces/scattermapbox\\\":1176}],40:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/scatterpolar\\\")},{\\\"../src/traces/scatterpolar\\\":1183}],41:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/scatterpolargl\\\")},{\\\"../src/traces/scatterpolargl\\\":1189}],42:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/scatterternary\\\")},{\\\"../src/traces/scatterternary\\\":1196}],43:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/transforms/sort\\\")},{\\\"../src/transforms/sort\\\":1270}],44:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/splom\\\")},{\\\"../src/traces/splom\\\":1205}],45:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/streamtube\\\")},{\\\"../src/traces/streamtube\\\":1213}],46:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/sunburst\\\")},{\\\"../src/traces/sunburst\\\":1220}],47:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/surface\\\")},{\\\"../src/traces/surface\\\":1229}],48:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/table\\\")},{\\\"../src/traces/table\\\":1237}],49:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/violin\\\")},{\\\"../src/traces/violin\\\":1245}],50:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/volume\\\")},{\\\"../src/traces/volume\\\":1253}],51:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"../src/traces/waterfall\\\")},{\\\"../src/traces/waterfall\\\":1261}],52:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){var e=(t=t||{}).eye||[0,0,1],r=t.center||[0,0,0],s=t.up||[0,1,0],l=t.distanceLimits||[0,1/0],c=t.mode||\\\"turntable\\\",u=n(),h=i(),f=a();return u.setDistanceLimits(l[0],l[1]),u.lookAt(0,e,r,s),h.setDistanceLimits(l[0],l[1]),h.lookAt(0,e,r,s),f.setDistanceLimits(l[0],l[1]),f.lookAt(0,e,r,s),new o({turntable:u,orbit:h,matrix:f},c)};var n=t(\\\"turntable-camera-controller\\\"),i=t(\\\"orbit-camera-controller\\\"),a=t(\\\"matrix-camera-controller\\\");function o(t,e){this._controllerNames=Object.keys(t),this._controllerList=this._controllerNames.map(function(e){return t[e]}),this._mode=e,this._active=t[e],this._active||(this._mode=\\\"turntable\\\",this._active=t.turntable),this.modes=this._controllerNames,this.computedMatrix=this._active.computedMatrix,this.computedEye=this._active.computedEye,this.computedUp=this._active.computedUp,this.computedCenter=this._active.computedCenter,this.computedRadius=this._active.computedRadius}var s=o.prototype;[[\\\"flush\\\",1],[\\\"idle\\\",1],[\\\"lookAt\\\",4],[\\\"rotate\\\",4],[\\\"pan\\\",4],[\\\"translate\\\",4],[\\\"setMatrix\\\",2],[\\\"setDistanceLimits\\\",2],[\\\"setDistance\\\",2]].forEach(function(t){for(var e=t[0],r=[],n=0;n<t[1];++n)r.push(\\\"a\\\"+n);var i=\\\"var cc=this._controllerList;for(var i=0;i<cc.length;++i){cc[i].\\\"+t[0]+\\\"(\\\"+r.join()+\\\")}\\\";s[e]=Function.apply(null,r.concat(i))}),s.recalcMatrix=function(t){this._active.recalcMatrix(t)},s.getDistance=function(t){return this._active.getDistance(t)},s.getDistanceLimits=function(t){return this._active.getDistanceLimits(t)},s.lastT=function(){return this._active.lastT()},s.setMode=function(t){if(t!==this._mode){var e=this._controllerNames.indexOf(t);if(!(e<0)){var r=this._active,n=this._controllerList[e],i=Math.max(r.lastT(),n.lastT());r.recalcMatrix(i),n.setMatrix(i,r.computedMatrix),this._active=n,this._mode=t,this.computedMatrix=this._active.computedMatrix,this.computedEye=this._active.computedEye,this.computedUp=this._active.computedUp,this.computedCenter=this._active.computedCenter,this.computedRadius=this._active.computedRadius}}},s.getMode=function(){return this._mode}},{\\\"matrix-camera-controller\\\":433,\\\"orbit-camera-controller\\\":456,\\\"turntable-camera-controller\\\":542}],53:[function(t,e,r){var n,i;n=this,i=function(t,e,r,n,i){\\\"use strict\\\";function a(t){return t.target.depth}function o(t,e){return t.sourceLinks.length?t.depth:e-1}function s(t){return function(){return t}}i=i&&i.hasOwnProperty(\\\"default\\\")?i.default:i;var l=\\\"function\\\"==typeof Symbol&&\\\"symbol\\\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\\\"function\\\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\\\"symbol\\\":typeof t};function c(t,e){return h(t.source,e.source)||t.index-e.index}function u(t,e){return h(t.target,e.target)||t.index-e.index}function h(t,e){return t.partOfCycle===e.partOfCycle?t.y0-e.y0:\\\"top\\\"===t.circularLinkType||\\\"bottom\\\"===e.circularLinkType?-1:1}function f(t){return t.value}function p(t){return(t.y0+t.y1)/2}function d(t){return p(t.source)}function g(t){return p(t.target)}function v(t){return t.index}function m(t){return t.nodes}function y(t){return t.links}function x(t,e){var r=t.get(e);if(!r)throw new Error(\\\"missing: \\\"+e);return r}function b(t,e){return e(t)}var _=25,w=10,k=.3;function T(t,e){var r=0,n=0;t.links.forEach(function(i){i.circular&&(i.source.circularLinkType||i.target.circularLinkType?i.circularLinkType=i.source.circularLinkType?i.source.circularLinkType:i.target.circularLinkType:i.circularLinkType=r<n?\\\"top\\\":\\\"bottom\\\",\\\"top\\\"==i.circularLinkType?r+=1:n+=1,t.nodes.forEach(function(t){b(t,e)!=b(i.source,e)&&b(t,e)!=b(i.target,e)||(t.circularLinkType=i.circularLinkType)}))}),t.links.forEach(function(t){t.circular&&(t.source.circularLinkType==t.target.circularLinkType&&(t.circularLinkType=t.source.circularLinkType),Y(t,e)&&(t.circularLinkType=t.source.circularLinkType))})}function A(t){var e=Math.abs(t.y1-t.y0),r=Math.abs(t.target.x0-t.source.x1);return Math.atan(r/e)}function M(t,e){var r=0;t.sourceLinks.forEach(function(t){r=t.circular&&!Y(t,e)?r+1:r});var n=0;return t.targetLinks.forEach(function(t){n=t.circular&&!Y(t,e)?n+1:n}),r+n}function S(t){var e=t.source.sourceLinks,r=0;e.forEach(function(t){r=t.circular?r+1:r});var n=t.target.targetLinks,i=0;return n.forEach(function(t){i=t.circular?i+1:i}),!(r>1||i>1)}function E(t,e,r){return t.sort(L),t.forEach(function(n,i){var a,o,s=0;if(Y(n,r)&&S(n))n.circularPathData.verticalBuffer=s+n.width/2;else{for(var l=0;l<i;l++)if(a=t[i],o=t[l],!(a.source.column<o.target.column||a.target.column>o.source.column)){var c=t[l].circularPathData.verticalBuffer+t[l].width/2+e;s=c>s?c:s}n.circularPathData.verticalBuffer=s+n.width/2}}),t}function C(t,r,i,a){var o=e.min(t.links,function(t){return t.source.y0});t.links.forEach(function(t){t.circular&&(t.circularPathData={})}),E(t.links.filter(function(t){return\\\"top\\\"==t.circularLinkType}),r,a),E(t.links.filter(function(t){return\\\"bottom\\\"==t.circularLinkType}),r,a),t.links.forEach(function(e){if(e.circular){if(e.circularPathData.arcRadius=e.width+w,e.circularPathData.leftNodeBuffer=5,e.circularPathData.rightNodeBuffer=5,e.circularPathData.sourceWidth=e.source.x1-e.source.x0,e.circularPathData.sourceX=e.source.x0+e.circularPathData.sourceWidth,e.circularPathData.targetX=e.target.x0,e.circularPathData.sourceY=e.y0,e.circularPathData.targetY=e.y1,Y(e,a)&&S(e))e.circularPathData.leftSmallArcRadius=w+e.width/2,e.circularPathData.leftLargeArcRadius=w+e.width/2,e.circularPathData.rightSmallArcRadius=w+e.width/2,e.circularPathData.rightLargeArcRadius=w+e.width/2,\\\"bottom\\\"==e.circularLinkType?(e.circularPathData.verticalFullExtent=e.source.y1+_+e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent=e.circularPathData.verticalFullExtent-e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent=e.circularPathData.verticalFullExtent-e.circularPathData.rightLargeArcRadius):(e.circularPathData.verticalFullExtent=e.source.y0-_-e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent=e.circularPathData.verticalFullExtent+e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent=e.circularPathData.verticalFullExtent+e.circularPathData.rightLargeArcRadius);else{var s=e.source.column,l=e.circularLinkType,c=t.links.filter(function(t){return t.source.column==s&&t.circularLinkType==l});\\\"bottom\\\"==e.circularLinkType?c.sort(O):c.sort(P);var u=0;c.forEach(function(t,n){t.circularLinkID==e.circularLinkID&&(e.circularPathData.leftSmallArcRadius=w+e.width/2+u,e.circularPathData.leftLargeArcRadius=w+e.width/2+n*r+u),u+=t.width}),s=e.target.column,c=t.links.filter(function(t){return t.target.column==s&&t.circularLinkType==l}),\\\"bottom\\\"==e.circularLinkType?c.sort(I):c.sort(z),u=0,c.forEach(function(t,n){t.circularLinkID==e.circularLinkID&&(e.circularPathData.rightSmallArcRadius=w+e.width/2+u,e.circularPathData.rightLargeArcRadius=w+e.width/2+n*r+u),u+=t.width}),\\\"bottom\\\"==e.circularLinkType?(e.circularPathData.verticalFullExtent=Math.max(i,e.source.y1,e.target.y1)+_+e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent=e.circularPathData.verticalFullExtent-e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent=e.circularPathData.verticalFullExtent-e.circularPathData.rightLargeArcRadius):(e.circularPathData.verticalFullExtent=o-_-e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent=e.circularPathData.verticalFullExtent+e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent=e.circularPathData.verticalFullExtent+e.circularPathData.rightLargeArcRadius)}e.circularPathData.leftInnerExtent=e.circularPathData.sourceX+e.circularPathData.leftNodeBuffer,e.circularPathData.rightInnerExtent=e.circularPathData.targetX-e.circularPathData.rightNodeBuffer,e.circularPathData.leftFullExtent=e.circularPathData.sourceX+e.circularPathData.leftLargeArcRadius+e.circularPathData.leftNodeBuffer,e.circularPathData.rightFullExtent=e.circularPathData.targetX-e.circularPathData.rightLargeArcRadius-e.circularPathData.rightNodeBuffer}if(e.circular)e.path=function(t){var e=\\\"\\\";e=\\\"top\\\"==t.circularLinkType?\\\"M\\\"+t.circularPathData.sourceX+\\\" \\\"+t.circularPathData.sourceY+\\\" L\\\"+t.circularPathData.leftInnerExtent+\\\" \\\"+t.circularPathData.sourceY+\\\" A\\\"+t.circularPathData.leftLargeArcRadius+\\\" \\\"+t.circularPathData.leftSmallArcRadius+\\\" 0 0 0 \\\"+t.circularPathData.leftFullExtent+\\\" \\\"+(t.circularPathData.sourceY-t.circularPathData.leftSmallArcRadius)+\\\" L\\\"+t.circularPathData.leftFullExtent+\\\" \\\"+t.circularPathData.verticalLeftInnerExtent+\\\" A\\\"+t.circularPathData.leftLargeArcRadius+\\\" \\\"+t.circularPathData.leftLargeArcRadius+\\\" 0 0 0 \\\"+t.circularPathData.leftInnerExtent+\\\" \\\"+t.circularPathData.verticalFullExtent+\\\" L\\\"+t.circularPathData.rightInnerExtent+\\\" \\\"+t.circularPathData.verticalFullExtent+\\\" A\\\"+t.circularPathData.rightLargeArcRadius+\\\" \\\"+t.circularPathData.rightLargeArcRadius+\\\" 0 0 0 \\\"+t.circularPathData.rightFullExtent+\\\" \\\"+t.circularPathData.verticalRightInnerExtent+\\\" L\\\"+t.circularPathData.rightFullExtent+\\\" \\\"+(t.circularPathData.targetY-t.circularPathData.rightSmallArcRadius)+\\\" A\\\"+t.circularPathData.rightLargeArcRadius+\\\" \\\"+t.circularPathData.rightSmallArcRadius+\\\" 0 0 0 \\\"+t.circularPathData.rightInnerExtent+\\\" \\\"+t.circularPathData.targetY+\\\" L\\\"+t.circularPathData.targetX+\\\" \\\"+t.circularPathData.targetY:\\\"M\\\"+t.circularPathData.sourceX+\\\" \\\"+t.circularPathData.sourceY+\\\" L\\\"+t.circularPathData.leftInnerExtent+\\\" \\\"+t.circularPathData.sourceY+\\\" A\\\"+t.circularPathData.leftLargeArcRadius+\\\" \\\"+t.circularPathData.leftSmallArcRadius+\\\" 0 0 1 \\\"+t.circularPathData.leftFullExtent+\\\" \\\"+(t.circularPathData.sourceY+t.circularPathData.leftSmallArcRadius)+\\\" L\\\"+t.circularPathData.leftFullExtent+\\\" \\\"+t.circularPathData.verticalLeftInnerExtent+\\\" A\\\"+t.circularPathData.leftLargeArcRadius+\\\" \\\"+t.circularPathData.leftLargeArcRadius+\\\" 0 0 1 \\\"+t.circularPathData.leftInnerExtent+\\\" \\\"+t.circularPathData.verticalFullExtent+\\\" L\\\"+t.circularPathData.rightInnerExtent+\\\" \\\"+t.circularPathData.verticalFullExtent+\\\" A\\\"+t.circularPathData.rightLargeArcRadius+\\\" \\\"+t.circularPathData.rightLargeArcRadius+\\\" 0 0 1 \\\"+t.circularPathData.rightFullExtent+\\\" \\\"+t.circularPathData.verticalRightInnerExtent+\\\" L\\\"+t.circularPathData.rightFullExtent+\\\" \\\"+(t.circularPathData.targetY+t.circularPathData.rightSmallArcRadius)+\\\" A\\\"+t.circularPathData.rightLargeArcRadius+\\\" \\\"+t.circularPathData.rightSmallArcRadius+\\\" 0 0 1 \\\"+t.circularPathData.rightInnerExtent+\\\" \\\"+t.circularPathData.targetY+\\\" L\\\"+t.circularPathData.targetX+\\\" \\\"+t.circularPathData.targetY;return e}(e);else{var h=n.linkHorizontal().source(function(t){return[t.source.x0+(t.source.x1-t.source.x0),t.y0]}).target(function(t){return[t.target.x0,t.y1]});e.path=h(e)}})}function L(t,e){return D(t)==D(e)?\\\"bottom\\\"==t.circularLinkType?O(t,e):P(t,e):D(e)-D(t)}function P(t,e){return t.y0-e.y0}function O(t,e){return e.y0-t.y0}function z(t,e){return t.y1-e.y1}function I(t,e){return e.y1-t.y1}function D(t){return t.target.column-t.source.column}function R(t){return t.target.x0-t.source.x1}function F(t,e){var r=A(t),n=R(e)/Math.tan(r);return\\\"up\\\"==G(t)?t.y1+n:t.y1-n}function B(t,e){var r=A(t),n=R(e)/Math.tan(r);return\\\"up\\\"==G(t)?t.y1-n:t.y1+n}function N(t,e,r,n){t.links.forEach(function(i){if(!i.circular&&i.target.column-i.source.column>1){var a=i.source.column+1,o=i.target.column-1,s=1,l=o-a+1;for(s=1;a<=o;a++,s++)t.nodes.forEach(function(o){if(o.column==a){var c,u=s/(l+1),h=Math.pow(1-u,3),f=3*u*Math.pow(1-u,2),p=3*Math.pow(u,2)*(1-u),d=Math.pow(u,3),g=h*i.y0+f*i.y0+p*i.y1+d*i.y1,v=g-i.width/2,m=g+i.width/2;v>o.y0&&v<o.y1?(c=o.y1-v+10,c=\\\"bottom\\\"==o.circularLinkType?c:-c,o=U(o,c,e,r),t.nodes.forEach(function(t){b(t,n)!=b(o,n)&&t.column==o.column&&j(o,t)&&U(t,c,e,r)})):m>o.y0&&m<o.y1?(c=m-o.y0+10,o=U(o,c,e,r),t.nodes.forEach(function(t){b(t,n)!=b(o,n)&&t.column==o.column&&t.y0<o.y1&&t.y1>o.y1&&U(t,c,e,r)})):v<o.y0&&m>o.y1&&(c=m-o.y0+10,o=U(o,c,e,r),t.nodes.forEach(function(t){b(t,n)!=b(o,n)&&t.column==o.column&&t.y0<o.y1&&t.y1>o.y1&&U(t,c,e,r)}))}})}})}function j(t,e){return t.y0>e.y0&&t.y0<e.y1||(t.y1>e.y0&&t.y1<e.y1||t.y0<e.y0&&t.y1>e.y1)}function U(t,e,r,n){return t.y0+e>=r&&t.y1+e<=n&&(t.y0=t.y0+e,t.y1=t.y1+e,t.targetLinks.forEach(function(t){t.y1=t.y1+e}),t.sourceLinks.forEach(function(t){t.y0=t.y0+e})),t}function V(t,e,r,n){t.nodes.forEach(function(i){n&&i.y+(i.y1-i.y0)>e&&(i.y=i.y-(i.y+(i.y1-i.y0)-e));var a=t.links.filter(function(t){return b(t.source,r)==b(i,r)}),o=a.length;o>1&&a.sort(function(t,e){if(!t.circular&&!e.circular){if(t.target.column==e.target.column)return t.y1-e.y1;if(!H(t,e))return t.y1-e.y1;if(t.target.column>e.target.column){var r=B(e,t);return t.y1-r}if(e.target.column>t.target.column)return B(t,e)-e.y1}return t.circular&&!e.circular?\\\"top\\\"==t.circularLinkType?-1:1:e.circular&&!t.circular?\\\"top\\\"==e.circularLinkType?1:-1:t.circular&&e.circular?t.circularLinkType===e.circularLinkType&&\\\"top\\\"==t.circularLinkType?t.target.column===e.target.column?t.target.y1-e.target.y1:e.target.column-t.target.column:t.circularLinkType===e.circularLinkType&&\\\"bottom\\\"==t.circularLinkType?t.target.column===e.target.column?e.target.y1-t.target.y1:t.target.column-e.target.column:\\\"top\\\"==t.circularLinkType?-1:1:void 0});var s=i.y0;a.forEach(function(t){t.y0=s+t.width/2,s+=t.width}),a.forEach(function(t,e){if(\\\"bottom\\\"==t.circularLinkType){for(var r=e+1,n=0;r<o;r++)n+=a[r].width;t.y0=i.y1-n-t.width/2}})})}function q(t,e,r){t.nodes.forEach(function(e){var n=t.links.filter(function(t){return b(t.target,r)==b(e,r)}),i=n.length;i>1&&n.sort(function(t,e){if(!t.circular&&!e.circular){if(t.source.column==e.source.column)return t.y0-e.y0;if(!H(t,e))return t.y0-e.y0;if(e.source.column<t.source.column){var r=F(e,t);return t.y0-r}if(t.source.column<e.source.column)return F(t,e)-e.y0}return t.circular&&!e.circular?\\\"top\\\"==t.circularLinkType?-1:1:e.circular&&!t.circular?\\\"top\\\"==e.circularLinkType?1:-1:t.circular&&e.circular?t.circularLinkType===e.circularLinkType&&\\\"top\\\"==t.circularLinkType?t.source.column===e.source.column?t.source.y1-e.source.y1:t.source.column-e.source.column:t.circularLinkType===e.circularLinkType&&\\\"bottom\\\"==t.circularLinkType?t.source.column===e.source.column?t.source.y1-e.source.y1:e.source.column-t.source.column:\\\"top\\\"==t.circularLinkType?-1:1:void 0});var a=e.y0;n.forEach(function(t){t.y1=a+t.width/2,a+=t.width}),n.forEach(function(t,r){if(\\\"bottom\\\"==t.circularLinkType){for(var a=r+1,o=0;a<i;a++)o+=n[a].width;t.y1=e.y1-o-t.width/2}})})}function H(t,e){return G(t)==G(e)}function G(t){return t.y0-t.y1>0?\\\"up\\\":\\\"down\\\"}function Y(t,e){return b(t.source,e)==b(t.target,e)}t.sankeyCircular=function(){var t,n,a=0,b=0,A=1,S=1,E=24,L=v,P=o,O=m,z=y,I=32,D=2,R=null;function F(){var o={nodes:O.apply(null,arguments),links:z.apply(null,arguments)};!function(t){t.nodes.forEach(function(t,e){t.index=e,t.sourceLinks=[],t.targetLinks=[]});var e=r.map(t.nodes,L);t.links.forEach(function(t,r){t.index=r;var n=t.source,i=t.target;\\\"object\\\"!==(\\\"undefined\\\"==typeof n?\\\"undefined\\\":l(n))&&(n=t.source=x(e,n)),\\\"object\\\"!==(\\\"undefined\\\"==typeof i?\\\"undefined\\\":l(i))&&(i=t.target=x(e,i)),n.sourceLinks.push(t),i.targetLinks.push(t)})}(o),function(t,e,r){var n=0;if(null===r){for(var a=[],o=0;o<t.links.length;o++){var s=t.links[o],l=s.source.index,c=s.target.index;a[l]||(a[l]=[]),a[c]||(a[c]=[]),-1===a[l].indexOf(c)&&a[l].push(c)}var u=i(a);u.sort(function(t,e){return t.length-e.length});var h={};for(o=0;o<u.length;o++){var f=u[o],p=f.slice(-2);h[p[0]]||(h[p[0]]={}),h[p[0]][p[1]]=!0}t.links.forEach(function(t){var e=t.target.index,r=t.source.index;e===r||h[r]&&h[r][e]?(t.circular=!0,t.circularLinkID=n,n+=1):t.circular=!1})}else t.links.forEach(function(t){t.source[r]<t.target[r]?t.circular=!1:(t.circular=!0,t.circularLinkID=n,n+=1)})}(o,0,R),function(t){t.nodes.forEach(function(t){t.partOfCycle=!1,t.value=Math.max(e.sum(t.sourceLinks,f),e.sum(t.targetLinks,f)),t.sourceLinks.forEach(function(e){e.circular&&(t.partOfCycle=!0,t.circularLinkType=e.circularLinkType)}),t.targetLinks.forEach(function(e){e.circular&&(t.partOfCycle=!0,t.circularLinkType=e.circularLinkType)})})}(o),function(t){var e,r,n;for(e=t.nodes,r=[],n=0;e.length;++n,e=r,r=[])e.forEach(function(t){t.depth=n,t.sourceLinks.forEach(function(t){r.indexOf(t.target)<0&&!t.circular&&r.push(t.target)})});for(e=t.nodes,r=[],n=0;e.length;++n,e=r,r=[])e.forEach(function(t){t.height=n,t.targetLinks.forEach(function(t){r.indexOf(t.source)<0&&!t.circular&&r.push(t.source)})});t.nodes.forEach(function(t){t.column=Math.floor(P.call(null,t,n))})}(o),T(o,L),function(i,o,s){var l=r.nest().key(function(t){return t.column}).sortKeys(e.ascending).entries(i.nodes).map(function(t){return t.values});(function(r){if(n){var o=1/0;l.forEach(function(t){var e=S*n/(t.length+1);o=e<o?e:o}),t=o}var s=e.min(l,function(r){return(S-b-(r.length-1)*t)/e.sum(r,f)});s*=k,i.links.forEach(function(t){t.width=t.value*s});var c=function(t){var r=0,n=0,i=0,a=0,o=e.max(t.nodes,function(t){return t.column});return t.links.forEach(function(t){t.circular&&(\\\"top\\\"==t.circularLinkType?r+=t.width:n+=t.width,0==t.target.column&&(a+=t.width),t.source.column==o&&(i+=t.width))}),{top:r=r>0?r+_+w:r,bottom:n=n>0?n+_+w:n,left:a=a>0?a+_+w:a,right:i=i>0?i+_+w:i}}(i),u=function(t,r){var n=e.max(t.nodes,function(t){return t.column}),i=A-a,o=S-b,s=i+r.right+r.left,l=o+r.top+r.bottom,c=i/s,u=o/l;return a=a*c+r.left,A=0==r.right?A:A*c,b=b*u+r.top,S*=u,t.nodes.forEach(function(t){t.x0=a+t.column*((A-a-E)/n),t.x1=t.x0+E}),u}(i,c);s*=u,i.links.forEach(function(t){t.width=t.value*s}),l.forEach(function(t){var e=t.length;t.forEach(function(t,n){t.depth==l.length-1&&1==e?(t.y0=S/2-t.value*s,t.y1=t.y0+t.value*s):0==t.depth&&1==e?(t.y0=S/2-t.value*s,t.y1=t.y0+t.value*s):t.partOfCycle?0==M(t,r)?(t.y0=S/2+n,t.y1=t.y0+t.value*s):\\\"top\\\"==t.circularLinkType?(t.y0=b+n,t.y1=t.y0+t.value*s):(t.y0=S-t.value*s-n,t.y1=t.y0+t.value*s):0==c.top||0==c.bottom?(t.y0=(S-b)/e*n,t.y1=t.y0+t.value*s):(t.y0=(S-b)/2-e/2+n,t.y1=t.y0+t.value*s)})})})(s),m();for(var c=1,u=o;u>0;--u)v(c*=.99,s),m();function v(t,r){var n=l.length;l.forEach(function(i){var a=i.length,o=i[0].depth;i.forEach(function(i){var s;if(i.sourceLinks.length||i.targetLinks.length)if(i.partOfCycle&&M(i,r)>0);else if(0==o&&1==a)s=i.y1-i.y0,i.y0=S/2-s/2,i.y1=S/2+s/2;else if(o==n-1&&1==a)s=i.y1-i.y0,i.y0=S/2-s/2,i.y1=S/2+s/2;else{var l=e.mean(i.sourceLinks,g),c=e.mean(i.targetLinks,d),u=((l&&c?(l+c)/2:l||c)-p(i))*t;i.y0+=u,i.y1+=u}})})}function m(){l.forEach(function(e){var r,n,i,a=b,o=e.length;for(e.sort(h),i=0;i<o;++i)r=e[i],(n=a-r.y0)>0&&(r.y0+=n,r.y1+=n),a=r.y1+t;if((n=a-t-S)>0)for(a=r.y0-=n,r.y1-=n,i=o-2;i>=0;--i)r=e[i],(n=r.y1+t-a)>0&&(r.y0-=n,r.y1-=n),a=r.y0})}}(o,I,L),B(o);for(var s=0;s<4;s++)V(o,S,L),q(o,0,L),N(o,b,S,L),V(o,S,L),q(o,0,L);return function(t,r,n){var i=t.nodes,a=t.links,o=!1,s=!1;if(a.forEach(function(t){\\\"top\\\"==t.circularLinkType?o=!0:\\\"bottom\\\"==t.circularLinkType&&(s=!0)}),0==o||0==s){var l=e.min(i,function(t){return t.y0}),c=e.max(i,function(t){return t.y1}),u=c-l,h=n-r,f=h/u;i.forEach(function(t){var e=(t.y1-t.y0)*f;t.y0=(t.y0-l)*f,t.y1=t.y0+e}),a.forEach(function(t){t.y0=(t.y0-l)*f,t.y1=(t.y1-l)*f,t.width=t.width*f})}}(o,b,S),C(o,D,S,L),o}function B(t){t.nodes.forEach(function(t){t.sourceLinks.sort(u),t.targetLinks.sort(c)}),t.nodes.forEach(function(t){var e=t.y0,r=e,n=t.y1,i=n;t.sourceLinks.forEach(function(t){t.circular?(t.y0=n-t.width/2,n-=t.width):(t.y0=e+t.width/2,e+=t.width)}),t.targetLinks.forEach(function(t){t.circular?(t.y1=i-t.width/2,i-=t.width):(t.y1=r+t.width/2,r+=t.width)})})}return F.nodeId=function(t){return arguments.length?(L=\\\"function\\\"==typeof t?t:s(t),F):L},F.nodeAlign=function(t){return arguments.length?(P=\\\"function\\\"==typeof t?t:s(t),F):P},F.nodeWidth=function(t){return arguments.length?(E=+t,F):E},F.nodePadding=function(e){return arguments.length?(t=+e,F):t},F.nodes=function(t){return arguments.length?(O=\\\"function\\\"==typeof t?t:s(t),F):O},F.links=function(t){return arguments.length?(z=\\\"function\\\"==typeof t?t:s(t),F):z},F.size=function(t){return arguments.length?(a=b=0,A=+t[0],S=+t[1],F):[A-a,S-b]},F.extent=function(t){return arguments.length?(a=+t[0][0],A=+t[1][0],b=+t[0][1],S=+t[1][1],F):[[a,b],[A,S]]},F.iterations=function(t){return arguments.length?(I=+t,F):I},F.circularLinkGap=function(t){return arguments.length?(D=+t,F):D},F.nodePaddingRatio=function(t){return arguments.length?(n=+t,F):n},F.sortNodes=function(t){return arguments.length?(R=t,F):R},F.update=function(t){return T(t,L),B(t),t.links.forEach(function(t){t.circular&&(t.circularLinkType=t.y0+t.y1<S?\\\"top\\\":\\\"bottom\\\",t.source.circularLinkType=t.circularLinkType,t.target.circularLinkType=t.circularLinkType)}),V(t,S,L,!1),q(t,0,L),C(t,D,S,L),t},F},t.sankeyCenter=function(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?e.min(t.sourceLinks,a)-1:0},t.sankeyLeft=function(t){return t.depth},t.sankeyRight=function(t,e){return e-1-t.height},t.sankeyJustify=o,Object.defineProperty(t,\\\"__esModule\\\",{value:!0})},\\\"object\\\"==typeof r&&\\\"undefined\\\"!=typeof e?i(r,t(\\\"d3-array\\\"),t(\\\"d3-collection\\\"),t(\\\"d3-shape\\\"),t(\\\"elementary-circuits-directed-graph\\\")):i(n.d3=n.d3||{},n.d3,n.d3,n.d3,null)},{\\\"d3-array\\\":152,\\\"d3-collection\\\":153,\\\"d3-shape\\\":161,\\\"elementary-circuits-directed-graph\\\":172}],54:[function(t,e,r){var n,i;n=this,i=function(t,e,r,n){\\\"use strict\\\";function i(t){return t.target.depth}function a(t,e){return t.sourceLinks.length?t.depth:e-1}function o(t){return function(){return t}}function s(t,e){return c(t.source,e.source)||t.index-e.index}function l(t,e){return c(t.target,e.target)||t.index-e.index}function c(t,e){return t.y0-e.y0}function u(t){return t.value}function h(t){return(t.y0+t.y1)/2}function f(t){return h(t.source)*t.value}function p(t){return h(t.target)*t.value}function d(t){return t.index}function g(t){return t.nodes}function v(t){return t.links}function m(t,e){var r=t.get(e);if(!r)throw new Error(\\\"missing: \\\"+e);return r}function y(t){return[t.source.x1,t.y0]}function x(t){return[t.target.x0,t.y1]}t.sankey=function(){var t=0,n=0,i=1,y=1,x=24,b=8,_=d,w=a,k=g,T=v,A=32,M=2/3;function S(){var a={nodes:k.apply(null,arguments),links:T.apply(null,arguments)};return function(t){t.nodes.forEach(function(t,e){t.index=e,t.sourceLinks=[],t.targetLinks=[]});var e=r.map(t.nodes,_);t.links.forEach(function(t,r){t.index=r;var n=t.source,i=t.target;\\\"object\\\"!=typeof n&&(n=t.source=m(e,n)),\\\"object\\\"!=typeof i&&(i=t.target=m(e,i)),n.sourceLinks.push(t),i.targetLinks.push(t)})}(a),function(t){t.nodes.forEach(function(t){t.value=Math.max(e.sum(t.sourceLinks,u),e.sum(t.targetLinks,u))})}(a),function(e){var r,n,a;for(r=e.nodes,n=[],a=0;r.length;++a,r=n,n=[])r.forEach(function(t){t.depth=a,t.sourceLinks.forEach(function(t){n.indexOf(t.target)<0&&n.push(t.target)})});for(r=e.nodes,n=[],a=0;r.length;++a,r=n,n=[])r.forEach(function(t){t.height=a,t.targetLinks.forEach(function(t){n.indexOf(t.source)<0&&n.push(t.source)})});var o=(i-t-x)/(a-1);e.nodes.forEach(function(e){e.x1=(e.x0=t+Math.max(0,Math.min(a-1,Math.floor(w.call(null,e,a))))*o)+x})}(a),function(t){var i=r.nest().key(function(t){return t.x0}).sortKeys(e.ascending).entries(t.nodes).map(function(t){return t.values});(function(){var r=e.max(i,function(t){return t.length}),a=M*(y-n)/(r-1);b>a&&(b=a);var o=e.min(i,function(t){return(y-n-(t.length-1)*b)/e.sum(t,u)});i.forEach(function(t){t.forEach(function(t,e){t.y1=(t.y0=e)+t.value*o})}),t.links.forEach(function(t){t.width=t.value*o})})(),d();for(var a=1,o=A;o>0;--o)l(a*=.99),d(),s(a),d();function s(t){i.forEach(function(r){r.forEach(function(r){if(r.targetLinks.length){var n=(e.sum(r.targetLinks,f)/e.sum(r.targetLinks,u)-h(r))*t;r.y0+=n,r.y1+=n}})})}function l(t){i.slice().reverse().forEach(function(r){r.forEach(function(r){if(r.sourceLinks.length){var n=(e.sum(r.sourceLinks,p)/e.sum(r.sourceLinks,u)-h(r))*t;r.y0+=n,r.y1+=n}})})}function d(){i.forEach(function(t){var e,r,i,a=n,o=t.length;for(t.sort(c),i=0;i<o;++i)e=t[i],(r=a-e.y0)>0&&(e.y0+=r,e.y1+=r),a=e.y1+b;if((r=a-b-y)>0)for(a=e.y0-=r,e.y1-=r,i=o-2;i>=0;--i)e=t[i],(r=e.y1+b-a)>0&&(e.y0-=r,e.y1-=r),a=e.y0})}}(a),E(a),a}function E(t){t.nodes.forEach(function(t){t.sourceLinks.sort(l),t.targetLinks.sort(s)}),t.nodes.forEach(function(t){var e=t.y0,r=e;t.sourceLinks.forEach(function(t){t.y0=e+t.width/2,e+=t.width}),t.targetLinks.forEach(function(t){t.y1=r+t.width/2,r+=t.width})})}return S.update=function(t){return E(t),t},S.nodeId=function(t){return arguments.length?(_=\\\"function\\\"==typeof t?t:o(t),S):_},S.nodeAlign=function(t){return arguments.length?(w=\\\"function\\\"==typeof t?t:o(t),S):w},S.nodeWidth=function(t){return arguments.length?(x=+t,S):x},S.nodePadding=function(t){return arguments.length?(b=+t,S):b},S.nodes=function(t){return arguments.length?(k=\\\"function\\\"==typeof t?t:o(t),S):k},S.links=function(t){return arguments.length?(T=\\\"function\\\"==typeof t?t:o(t),S):T},S.size=function(e){return arguments.length?(t=n=0,i=+e[0],y=+e[1],S):[i-t,y-n]},S.extent=function(e){return arguments.length?(t=+e[0][0],i=+e[1][0],n=+e[0][1],y=+e[1][1],S):[[t,n],[i,y]]},S.iterations=function(t){return arguments.length?(A=+t,S):A},S},t.sankeyCenter=function(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?e.min(t.sourceLinks,i)-1:0},t.sankeyLeft=function(t){return t.depth},t.sankeyRight=function(t,e){return e-1-t.height},t.sankeyJustify=a,t.sankeyLinkHorizontal=function(){return n.linkHorizontal().source(y).target(x)},Object.defineProperty(t,\\\"__esModule\\\",{value:!0})},\\\"object\\\"==typeof r&&\\\"undefined\\\"!=typeof e?i(r,t(\\\"d3-array\\\"),t(\\\"d3-collection\\\"),t(\\\"d3-shape\\\")):i(n.d3=n.d3||{},n.d3,n.d3,n.d3)},{\\\"d3-array\\\":152,\\\"d3-collection\\\":153,\\\"d3-shape\\\":161}],55:[function(t,e,r){\\\"use strict\\\";Object.defineProperty(r,\\\"__esModule\\\",{value:!0});var n=t(\\\"@turf/meta\\\"),i=6378137;function a(t){var e=0;if(t&&t.length>0){e+=Math.abs(o(t[0]));for(var r=1;r<t.length;r++)e-=Math.abs(o(t[r]))}return e}function o(t){var e,r,n,a,o,l,c=0,u=t.length;if(u>2){for(l=0;l<u;l++)l===u-2?(n=u-2,a=u-1,o=0):l===u-1?(n=u-1,a=0,o=1):(n=l,a=l+1,o=l+2),e=t[n],r=t[a],c+=(s(t[o][0])-s(e[0]))*Math.sin(s(r[1]));c=c*i*i/2}return c}function s(t){return t*Math.PI/180}r.default=function(t){return n.geomReduce(t,function(t,e){return t+function(t){var e,r=0;switch(t.type){case\\\"Polygon\\\":return a(t.coordinates);case\\\"MultiPolygon\\\":for(e=0;e<t.coordinates.length;e++)r+=a(t.coordinates[e]);return r;case\\\"Point\\\":case\\\"MultiPoint\\\":case\\\"LineString\\\":case\\\"MultiLineString\\\":return 0}return 0}(e)},0)}},{\\\"@turf/meta\\\":58}],56:[function(t,e,r){\\\"use strict\\\";Object.defineProperty(r,\\\"__esModule\\\",{value:!0});var n=t(\\\"@turf/meta\\\"),i=t(\\\"@turf/helpers\\\");r.default=function(t,e){void 0===e&&(e={});var r=0,a=0,o=0;return n.coordEach(t,function(t){r+=t[0],a+=t[1],o++}),i.point([r/o,a/o],e.properties)}},{\\\"@turf/helpers\\\":57,\\\"@turf/meta\\\":58}],57:[function(t,e,r){\\\"use strict\\\";function n(t,e,r){void 0===r&&(r={});var n={type:\\\"Feature\\\"};return(0===r.id||r.id)&&(n.id=r.id),r.bbox&&(n.bbox=r.bbox),n.properties=e||{},n.geometry=t,n}function i(t,e,r){return void 0===r&&(r={}),n({type:\\\"Point\\\",coordinates:t},e,r)}function a(t,e,r){void 0===r&&(r={});for(var i=0,a=t;i<a.length;i++){var o=a[i];if(o.length<4)throw new Error(\\\"Each LinearRing of a Polygon must have 4 or more Positions.\\\");for(var s=0;s<o[o.length-1].length;s++)if(o[o.length-1][s]!==o[0][s])throw new Error(\\\"First and last Position are not equivalent.\\\")}return n({type:\\\"Polygon\\\",coordinates:t},e,r)}function o(t,e,r){if(void 0===r&&(r={}),t.length<2)throw new Error(\\\"coordinates must be an array of two or more positions\\\");return n({type:\\\"LineString\\\",coordinates:t},e,r)}function s(t,e){void 0===e&&(e={});var r={type:\\\"FeatureCollection\\\"};return e.id&&(r.id=e.id),e.bbox&&(r.bbox=e.bbox),r.features=t,r}function l(t,e,r){return void 0===r&&(r={}),n({type:\\\"MultiLineString\\\",coordinates:t},e,r)}function c(t,e,r){return void 0===r&&(r={}),n({type:\\\"MultiPoint\\\",coordinates:t},e,r)}function u(t,e,r){return void 0===r&&(r={}),n({type:\\\"MultiPolygon\\\",coordinates:t},e,r)}function h(t,e){void 0===e&&(e=\\\"kilometers\\\");var n=r.factors[e];if(!n)throw new Error(e+\\\" units is invalid\\\");return t*n}function f(t,e){void 0===e&&(e=\\\"kilometers\\\");var n=r.factors[e];if(!n)throw new Error(e+\\\" units is invalid\\\");return t/n}function p(t){return 180*(t%(2*Math.PI))/Math.PI}function d(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)&&!/^\\\\s*$/.test(t)}Object.defineProperty(r,\\\"__esModule\\\",{value:!0}),r.earthRadius=6371008.8,r.factors={centimeters:100*r.earthRadius,centimetres:100*r.earthRadius,degrees:r.earthRadius/111325,feet:3.28084*r.earthRadius,inches:39.37*r.earthRadius,kilometers:r.earthRadius/1e3,kilometres:r.earthRadius/1e3,meters:r.earthRadius,metres:r.earthRadius,miles:r.earthRadius/1609.344,millimeters:1e3*r.earthRadius,millimetres:1e3*r.earthRadius,nauticalmiles:r.earthRadius/1852,radians:1,yards:r.earthRadius/1.0936},r.unitsFactors={centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:.001,kilometres:.001,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/r.earthRadius,yards:1/1.0936},r.areaFactors={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:3.86e-7,millimeters:1e6,millimetres:1e6,yards:1.195990046},r.feature=n,r.geometry=function(t,e,r){switch(void 0===r&&(r={}),t){case\\\"Point\\\":return i(e).geometry;case\\\"LineString\\\":return o(e).geometry;case\\\"Polygon\\\":return a(e).geometry;case\\\"MultiPoint\\\":return c(e).geometry;case\\\"MultiLineString\\\":return l(e).geometry;case\\\"MultiPolygon\\\":return u(e).geometry;default:throw new Error(t+\\\" is invalid\\\")}},r.point=i,r.points=function(t,e,r){return void 0===r&&(r={}),s(t.map(function(t){return i(t,e)}),r)},r.polygon=a,r.polygons=function(t,e,r){return void 0===r&&(r={}),s(t.map(function(t){return a(t,e)}),r)},r.lineString=o,r.lineStrings=function(t,e,r){return void 0===r&&(r={}),s(t.map(function(t){return o(t,e)}),r)},r.featureCollection=s,r.multiLineString=l,r.multiPoint=c,r.multiPolygon=u,r.geometryCollection=function(t,e,r){return void 0===r&&(r={}),n({type:\\\"GeometryCollection\\\",geometries:t},e,r)},r.round=function(t,e){if(void 0===e&&(e=0),e&&!(e>=0))throw new Error(\\\"precision must be a positive number\\\");var r=Math.pow(10,e||0);return Math.round(t*r)/r},r.radiansToLength=h,r.lengthToRadians=f,r.lengthToDegrees=function(t,e){return p(f(t,e))},r.bearingToAzimuth=function(t){var e=t%360;return e<0&&(e+=360),e},r.radiansToDegrees=p,r.degreesToRadians=function(t){return t%360*Math.PI/180},r.convertLength=function(t,e,r){if(void 0===e&&(e=\\\"kilometers\\\"),void 0===r&&(r=\\\"kilometers\\\"),!(t>=0))throw new Error(\\\"length must be a positive number\\\");return h(f(t,e),r)},r.convertArea=function(t,e,n){if(void 0===e&&(e=\\\"meters\\\"),void 0===n&&(n=\\\"kilometers\\\"),!(t>=0))throw new Error(\\\"area must be a positive number\\\");var i=r.areaFactors[e];if(!i)throw new Error(\\\"invalid original units\\\");var a=r.areaFactors[n];if(!a)throw new Error(\\\"invalid final units\\\");return t/i*a},r.isNumber=d,r.isObject=function(t){return!!t&&t.constructor===Object},r.validateBBox=function(t){if(!t)throw new Error(\\\"bbox is required\\\");if(!Array.isArray(t))throw new Error(\\\"bbox must be an Array\\\");if(4!==t.length&&6!==t.length)throw new Error(\\\"bbox must be an Array of 4 or 6 numbers\\\");t.forEach(function(t){if(!d(t))throw new Error(\\\"bbox must only contain numbers\\\")})},r.validateId=function(t){if(!t)throw new Error(\\\"id is required\\\");if(-1===[\\\"string\\\",\\\"number\\\"].indexOf(typeof t))throw new Error(\\\"id must be a number or a string\\\")},r.radians2degrees=function(){throw new Error(\\\"method has been renamed to `radiansToDegrees`\\\")},r.degrees2radians=function(){throw new Error(\\\"method has been renamed to `degreesToRadians`\\\")},r.distanceToDegrees=function(){throw new Error(\\\"method has been renamed to `lengthToDegrees`\\\")},r.distanceToRadians=function(){throw new Error(\\\"method has been renamed to `lengthToRadians`\\\")},r.radiansToDistance=function(){throw new Error(\\\"method has been renamed to `radiansToLength`\\\")},r.bearingToAngle=function(){throw new Error(\\\"method has been renamed to `bearingToAzimuth`\\\")},r.convertDistance=function(){throw new Error(\\\"method has been renamed to `convertLength`\\\")}},{}],58:[function(t,e,r){\\\"use strict\\\";Object.defineProperty(r,\\\"__esModule\\\",{value:!0});var n=t(\\\"@turf/helpers\\\");function i(t,e,r){if(null!==t)for(var n,a,o,s,l,c,u,h,f=0,p=0,d=t.type,g=\\\"FeatureCollection\\\"===d,v=\\\"Feature\\\"===d,m=g?t.features.length:1,y=0;y<m;y++){l=(h=!!(u=g?t.features[y].geometry:v?t.geometry:t)&&\\\"GeometryCollection\\\"===u.type)?u.geometries.length:1;for(var x=0;x<l;x++){var b=0,_=0;if(null!==(s=h?u.geometries[x]:u)){c=s.coordinates;var w=s.type;switch(f=!r||\\\"Polygon\\\"!==w&&\\\"MultiPolygon\\\"!==w?0:1,w){case null:break;case\\\"Point\\\":if(!1===e(c,p,y,b,_))return!1;p++,b++;break;case\\\"LineString\\\":case\\\"MultiPoint\\\":for(n=0;n<c.length;n++){if(!1===e(c[n],p,y,b,_))return!1;p++,\\\"MultiPoint\\\"===w&&b++}\\\"LineString\\\"===w&&b++;break;case\\\"Polygon\\\":case\\\"MultiLineString\\\":for(n=0;n<c.length;n++){for(a=0;a<c[n].length-f;a++){if(!1===e(c[n][a],p,y,b,_))return!1;p++}\\\"MultiLineString\\\"===w&&b++,\\\"Polygon\\\"===w&&_++}\\\"Polygon\\\"===w&&b++;break;case\\\"MultiPolygon\\\":for(n=0;n<c.length;n++){for(_=0,a=0;a<c[n].length;a++){for(o=0;o<c[n][a].length-f;o++){if(!1===e(c[n][a][o],p,y,b,_))return!1;p++}_++}b++}break;case\\\"GeometryCollection\\\":for(n=0;n<s.geometries.length;n++)if(!1===i(s.geometries[n],e,r))return!1;break;default:throw new Error(\\\"Unknown Geometry Type\\\")}}}}}function a(t,e){var r;switch(t.type){case\\\"FeatureCollection\\\":for(r=0;r<t.features.length&&!1!==e(t.features[r].properties,r);r++);break;case\\\"Feature\\\":e(t.properties,0)}}function o(t,e){if(\\\"Feature\\\"===t.type)e(t,0);else if(\\\"FeatureCollection\\\"===t.type)for(var r=0;r<t.features.length&&!1!==e(t.features[r],r);r++);}function s(t,e){var r,n,i,a,o,s,l,c,u,h,f=0,p=\\\"FeatureCollection\\\"===t.type,d=\\\"Feature\\\"===t.type,g=p?t.features.length:1;for(r=0;r<g;r++){for(s=p?t.features[r].geometry:d?t.geometry:t,c=p?t.features[r].properties:d?t.properties:{},u=p?t.features[r].bbox:d?t.bbox:void 0,h=p?t.features[r].id:d?t.id:void 0,o=(l=!!s&&\\\"GeometryCollection\\\"===s.type)?s.geometries.length:1,i=0;i<o;i++)if(null!==(a=l?s.geometries[i]:s))switch(a.type){case\\\"Point\\\":case\\\"LineString\\\":case\\\"MultiPoint\\\":case\\\"Polygon\\\":case\\\"MultiLineString\\\":case\\\"MultiPolygon\\\":if(!1===e(a,f,c,u,h))return!1;break;case\\\"GeometryCollection\\\":for(n=0;n<a.geometries.length;n++)if(!1===e(a.geometries[n],f,c,u,h))return!1;break;default:throw new Error(\\\"Unknown Geometry Type\\\")}else if(!1===e(null,f,c,u,h))return!1;f++}}function l(t,e){s(t,function(t,r,i,a,o){var s,l=null===t?null:t.type;switch(l){case null:case\\\"Point\\\":case\\\"LineString\\\":case\\\"Polygon\\\":return!1!==e(n.feature(t,i,{bbox:a,id:o}),r,0)&&void 0}switch(l){case\\\"MultiPoint\\\":s=\\\"Point\\\";break;case\\\"MultiLineString\\\":s=\\\"LineString\\\";break;case\\\"MultiPolygon\\\":s=\\\"Polygon\\\"}for(var c=0;c<t.coordinates.length;c++){var u={type:s,coordinates:t.coordinates[c]};if(!1===e(n.feature(u,i),r,c))return!1}})}function c(t,e){l(t,function(t,r,a){var o=0;if(t.geometry){var s=t.geometry.type;if(\\\"Point\\\"!==s&&\\\"MultiPoint\\\"!==s){var l,c=0,u=0,h=0;return!1!==i(t,function(i,s,f,p,d){if(void 0===l||r>c||p>u||d>h)return l=i,c=r,u=p,h=d,void(o=0);var g=n.lineString([l,i],t.properties);if(!1===e(g,r,a,d,o))return!1;o++,l=i})&&void 0}}})}function u(t,e){if(!t)throw new Error(\\\"geojson is required\\\");l(t,function(t,r,i){if(null!==t.geometry){var a=t.geometry.type,o=t.geometry.coordinates;switch(a){case\\\"LineString\\\":if(!1===e(t,r,i,0,0))return!1;break;case\\\"Polygon\\\":for(var s=0;s<o.length;s++)if(!1===e(n.lineString(o[s],t.properties),r,i,s))return!1}}})}r.coordEach=i,r.coordReduce=function(t,e,r,n){var a=r;return i(t,function(t,n,i,o,s){a=0===n&&void 0===r?t:e(a,t,n,i,o,s)},n),a},r.propEach=a,r.propReduce=function(t,e,r){var n=r;return a(t,function(t,i){n=0===i&&void 0===r?t:e(n,t,i)}),n},r.featureEach=o,r.featureReduce=function(t,e,r){var n=r;return o(t,function(t,i){n=0===i&&void 0===r?t:e(n,t,i)}),n},r.coordAll=function(t){var e=[];return i(t,function(t){e.push(t)}),e},r.geomEach=s,r.geomReduce=function(t,e,r){var n=r;return s(t,function(t,i,a,o,s){n=0===i&&void 0===r?t:e(n,t,i,a,o,s)}),n},r.flattenEach=l,r.flattenReduce=function(t,e,r){var n=r;return l(t,function(t,i,a){n=0===i&&0===a&&void 0===r?t:e(n,t,i,a)}),n},r.segmentEach=c,r.segmentReduce=function(t,e,r){var n=r,i=!1;return c(t,function(t,a,o,s,l){n=!1===i&&void 0===r?t:e(n,t,a,o,s,l),i=!0}),n},r.lineEach=u,r.lineReduce=function(t,e,r){var n=r;return u(t,function(t,i,a,o){n=0===i&&void 0===r?t:e(n,t,i,a,o)}),n},r.findSegment=function(t,e){if(e=e||{},!n.isObject(e))throw new Error(\\\"options is invalid\\\");var r,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.segmentIndex||0,l=e.properties;switch(t.type){case\\\"FeatureCollection\\\":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,r=t.features[i].geometry;break;case\\\"Feature\\\":l=l||t.properties,r=t.geometry;break;case\\\"Point\\\":case\\\"MultiPoint\\\":return null;case\\\"LineString\\\":case\\\"Polygon\\\":case\\\"MultiLineString\\\":case\\\"MultiPolygon\\\":r=t;break;default:throw new Error(\\\"geojson is invalid\\\")}if(null===r)return null;var c=r.coordinates;switch(r.type){case\\\"Point\\\":case\\\"MultiPoint\\\":return null;case\\\"LineString\\\":return s<0&&(s=c.length+s-1),n.lineString([c[s],c[s+1]],l,e);case\\\"Polygon\\\":return o<0&&(o=c.length+o),s<0&&(s=c[o].length+s-1),n.lineString([c[o][s],c[o][s+1]],l,e);case\\\"MultiLineString\\\":return a<0&&(a=c.length+a),s<0&&(s=c[a].length+s-1),n.lineString([c[a][s],c[a][s+1]],l,e);case\\\"MultiPolygon\\\":return a<0&&(a=c.length+a),o<0&&(o=c[a].length+o),s<0&&(s=c[a][o].length-s-1),n.lineString([c[a][o][s],c[a][o][s+1]],l,e)}throw new Error(\\\"geojson is invalid\\\")},r.findPoint=function(t,e){if(e=e||{},!n.isObject(e))throw new Error(\\\"options is invalid\\\");var r,i=e.featureIndex||0,a=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.coordIndex||0,l=e.properties;switch(t.type){case\\\"FeatureCollection\\\":i<0&&(i=t.features.length+i),l=l||t.features[i].properties,r=t.features[i].geometry;break;case\\\"Feature\\\":l=l||t.properties,r=t.geometry;break;case\\\"Point\\\":case\\\"MultiPoint\\\":return null;case\\\"LineString\\\":case\\\"Polygon\\\":case\\\"MultiLineString\\\":case\\\"MultiPolygon\\\":r=t;break;default:throw new Error(\\\"geojson is invalid\\\")}if(null===r)return null;var c=r.coordinates;switch(r.type){case\\\"Point\\\":return n.point(c,l,e);case\\\"MultiPoint\\\":return a<0&&(a=c.length+a),n.point(c[a],l,e);case\\\"LineString\\\":return s<0&&(s=c.length+s),n.point(c[s],l,e);case\\\"Polygon\\\":return o<0&&(o=c.length+o),s<0&&(s=c[o].length+s),n.point(c[o][s],l,e);case\\\"MultiLineString\\\":return a<0&&(a=c.length+a),s<0&&(s=c[a].length+s),n.point(c[a][s],l,e);case\\\"MultiPolygon\\\":return a<0&&(a=c.length+a),o<0&&(o=c[a].length+o),s<0&&(s=c[a][o].length-s),n.point(c[a][o][s],l,e)}throw new Error(\\\"geojson is invalid\\\")}},{\\\"@turf/helpers\\\":57}],59:[function(t,e,r){\\\"use strict\\\";var n=\\\"undefined\\\"==typeof WeakMap?t(\\\"weak-map\\\"):WeakMap,i=t(\\\"gl-buffer\\\"),a=t(\\\"gl-vao\\\"),o=new n;e.exports=function(t){var e=o.get(t),r=e&&(e._triangleBuffer.handle||e._triangleBuffer.buffer);if(!r||!t.isBuffer(r)){var n=i(t,new Float32Array([-1,-1,-1,4,4,-1]));(e=a(t,[{buffer:n,type:t.FLOAT,size:2}]))._triangleBuffer=n,o.set(t,e)}e.bind(),t.drawArrays(t.TRIANGLES,0,3),e.unbind()}},{\\\"gl-buffer\\\":241,\\\"gl-vao\\\":327,\\\"weak-map\\\":552}],60:[function(t,e,r){e.exports=function(t){var e=0,r=0,n=0,i=0;return t.map(function(t){var a=(t=t.slice())[0],o=a.toUpperCase();if(a!=o)switch(t[0]=o,a){case\\\"a\\\":t[6]+=n,t[7]+=i;break;case\\\"v\\\":t[1]+=i;break;case\\\"h\\\":t[1]+=n;break;default:for(var s=1;s<t.length;)t[s++]+=n,t[s++]+=i}switch(o){case\\\"Z\\\":n=e,i=r;break;case\\\"H\\\":n=t[1];break;case\\\"V\\\":i=t[1];break;case\\\"M\\\":n=e=t[1],i=r=t[2];break;default:n=t[t.length-2],i=t[t.length-1]}return t})}},{}],61:[function(t,e,r){var n=t(\\\"pad-left\\\");e.exports=function(t,e,r){e=\\\"number\\\"==typeof e?e:1,r=r||\\\": \\\";var i=t.split(/\\\\r?\\\\n/),a=String(i.length+e-1).length;return i.map(function(t,i){var o=i+e,s=String(o).length,l=n(o,a-s);return l+r+t}).join(\\\"\\\\n\\\")}},{\\\"pad-left\\\":457}],62:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){var e=t.length;if(0===e)return[];if(1===e)return[0];for(var r=t[0].length,n=[t[0]],a=[0],o=1;o<e;++o)if(n.push(t[o]),i(n,r)){if(a.push(o),a.length===r+1)return a}else n.pop();return a};var n=t(\\\"robust-orientation\\\");function i(t,e){for(var r=new Array(e+1),i=0;i<t.length;++i)r[i]=t[i];for(i=0;i<=t.length;++i){for(var a=t.length;a<=e;++a){for(var o=new Array(e),s=0;s<e;++s)o[s]=Math.pow(a+1-i,s);r[a]=o}if(n.apply(void 0,r))return!0}return!1}},{\\\"robust-orientation\\\":510}],63:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){return n(e).filter(function(r){for(var n=new Array(r.length),a=0;a<r.length;++a)n[a]=e[r[a]];return i(n)*t<1})};var n=t(\\\"delaunay-triangulate\\\"),i=t(\\\"circumradius\\\")},{circumradius:114,\\\"delaunay-triangulate\\\":165}],64:[function(t,e,r){e.exports=function(t,e){return i(n(t,e))};var n=t(\\\"alpha-complex\\\"),i=t(\\\"simplicial-complex-boundary\\\")},{\\\"alpha-complex\\\":63,\\\"simplicial-complex-boundary\\\":517}],65:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){if(!t||null==t.length)throw Error(\\\"Argument should be an array\\\");e=null==e?1:Math.floor(e);for(var r=Array(2*e),n=0;n<e;n++){for(var i=-1/0,a=1/0,o=n,s=t.length;o<s;o+=e)t[o]>i&&(i=t[o]),t[o]<a&&(a=t[o]);r[n]=a,r[e+n]=i}return r}},{}],66:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"array-bounds\\\");e.exports=function(t,e,r){if(!t||null==t.length)throw Error(\\\"Argument should be an array\\\");null==e&&(e=1);null==r&&(r=n(t,e));for(var i=0;i<e;i++){var a=r[e+i],o=r[i],s=i,l=t.length;if(a===1/0&&o===-1/0)for(s=i;s<l;s+=e)t[s]=t[s]===a?1:t[s]===o?0:.5;else if(a===1/0)for(s=i;s<l;s+=e)t[s]=t[s]===a?1:0;else if(o===-1/0)for(s=i;s<l;s+=e)t[s]=t[s]===o?0:1;else{var c=a-o;for(s=i;s<l;s+=e)t[s]=0===c?.5:(t[s]-o)/c}}return t}},{\\\"array-bounds\\\":65}],67:[function(t,e,r){e.exports=function(t,e){var r=\\\"number\\\"==typeof t,n=\\\"number\\\"==typeof e;r&&!n?(e=t,t=0):r||n||(t=0,e=0);var i=(e|=0)-(t|=0);if(i<0)throw new Error(\\\"array length must be positive\\\");for(var a=new Array(i),o=0,s=t;o<i;o++,s++)a[o]=s;return a}},{}],68:[function(t,e,r){(function(r){\\\"use strict\\\";var n=t(\\\"object-assign\\\");function i(t,e){if(t===e)return 0;for(var r=t.length,n=e.length,i=0,a=Math.min(r,n);i<a;++i)if(t[i]!==e[i]){r=t[i],n=e[i];break}return r<n?-1:n<r?1:0}function a(t){return r.Buffer&&\\\"function\\\"==typeof r.Buffer.isBuffer?r.Buffer.isBuffer(t):!(null==t||!t._isBuffer)}var o=t(\\\"util/\\\"),s=Object.prototype.hasOwnProperty,l=Array.prototype.slice,c=\\\"foo\\\"===function(){}.name;function u(t){return Object.prototype.toString.call(t)}function h(t){return!a(t)&&(\\\"function\\\"==typeof r.ArrayBuffer&&(\\\"function\\\"==typeof ArrayBuffer.isView?ArrayBuffer.isView(t):!!t&&(t instanceof DataView||!!(t.buffer&&t.buffer instanceof ArrayBuffer))))}var f=e.exports=y,p=/\\\\s*function\\\\s+([^\\\\(\\\\s]*)\\\\s*/;function d(t){if(o.isFunction(t)){if(c)return t.name;var e=t.toString().match(p);return e&&e[1]}}function g(t,e){return\\\"string\\\"==typeof t?t.length<e?t:t.slice(0,e):t}function v(t){if(c||!o.isFunction(t))return o.inspect(t);var e=d(t);return\\\"[Function\\\"+(e?\\\": \\\"+e:\\\"\\\")+\\\"]\\\"}function m(t,e,r,n,i){throw new f.AssertionError({message:r,actual:t,expected:e,operator:n,stackStartFunction:i})}function y(t,e){t||m(t,!0,e,\\\"==\\\",f.ok)}function x(t,e,r,n){if(t===e)return!0;if(a(t)&&a(e))return 0===i(t,e);if(o.isDate(t)&&o.isDate(e))return t.getTime()===e.getTime();if(o.isRegExp(t)&&o.isRegExp(e))return t.source===e.source&&t.global===e.global&&t.multiline===e.multiline&&t.lastIndex===e.lastIndex&&t.ignoreCase===e.ignoreCase;if(null!==t&&\\\"object\\\"==typeof t||null!==e&&\\\"object\\\"==typeof e){if(h(t)&&h(e)&&u(t)===u(e)&&!(t instanceof Float32Array||t instanceof Float64Array))return 0===i(new Uint8Array(t.buffer),new Uint8Array(e.buffer));if(a(t)!==a(e))return!1;var s=(n=n||{actual:[],expected:[]}).actual.indexOf(t);return-1!==s&&s===n.expected.indexOf(e)||(n.actual.push(t),n.expected.push(e),function(t,e,r,n){if(null==t||null==e)return!1;if(o.isPrimitive(t)||o.isPrimitive(e))return t===e;if(r&&Object.getPrototypeOf(t)!==Object.getPrototypeOf(e))return!1;var i=b(t),a=b(e);if(i&&!a||!i&&a)return!1;if(i)return t=l.call(t),e=l.call(e),x(t,e,r);var s,c,u=k(t),h=k(e);if(u.length!==h.length)return!1;for(u.sort(),h.sort(),c=u.length-1;c>=0;c--)if(u[c]!==h[c])return!1;for(c=u.length-1;c>=0;c--)if(s=u[c],!x(t[s],e[s],r,n))return!1;return!0}(t,e,r,n))}return r?t===e:t==e}function b(t){return\\\"[object Arguments]\\\"==Object.prototype.toString.call(t)}function _(t,e){if(!t||!e)return!1;if(\\\"[object RegExp]\\\"==Object.prototype.toString.call(e))return e.test(t);try{if(t instanceof e)return!0}catch(t){}return!Error.isPrototypeOf(e)&&!0===e.call({},t)}function w(t,e,r,n){var i;if(\\\"function\\\"!=typeof e)throw new TypeError('\\\"block\\\" argument must be a function');\\\"string\\\"==typeof r&&(n=r,r=null),i=function(t){var e;try{t()}catch(t){e=t}return e}(e),n=(r&&r.name?\\\" (\\\"+r.name+\\\").\\\":\\\".\\\")+(n?\\\" \\\"+n:\\\".\\\"),t&&!i&&m(i,r,\\\"Missing expected exception\\\"+n);var a=\\\"string\\\"==typeof n,s=!t&&i&&!r;if((!t&&o.isError(i)&&a&&_(i,r)||s)&&m(i,r,\\\"Got unwanted exception\\\"+n),t&&i&&r&&!_(i,r)||!t&&i)throw i}f.AssertionError=function(t){var e;this.name=\\\"AssertionError\\\",this.actual=t.actual,this.expected=t.expected,this.operator=t.operator,t.message?(this.message=t.message,this.generatedMessage=!1):(this.message=g(v((e=this).actual),128)+\\\" \\\"+e.operator+\\\" \\\"+g(v(e.expected),128),this.generatedMessage=!0);var r=t.stackStartFunction||m;if(Error.captureStackTrace)Error.captureStackTrace(this,r);else{var n=new Error;if(n.stack){var i=n.stack,a=d(r),o=i.indexOf(\\\"\\\\n\\\"+a);if(o>=0){var s=i.indexOf(\\\"\\\\n\\\",o+1);i=i.substring(s+1)}this.stack=i}}},o.inherits(f.AssertionError,Error),f.fail=m,f.ok=y,f.equal=function(t,e,r){t!=e&&m(t,e,r,\\\"==\\\",f.equal)},f.notEqual=function(t,e,r){t==e&&m(t,e,r,\\\"!=\\\",f.notEqual)},f.deepEqual=function(t,e,r){x(t,e,!1)||m(t,e,r,\\\"deepEqual\\\",f.deepEqual)},f.deepStrictEqual=function(t,e,r){x(t,e,!0)||m(t,e,r,\\\"deepStrictEqual\\\",f.deepStrictEqual)},f.notDeepEqual=function(t,e,r){x(t,e,!1)&&m(t,e,r,\\\"notDeepEqual\\\",f.notDeepEqual)},f.notDeepStrictEqual=function t(e,r,n){x(e,r,!0)&&m(e,r,n,\\\"notDeepStrictEqual\\\",t)},f.strictEqual=function(t,e,r){t!==e&&m(t,e,r,\\\"===\\\",f.strictEqual)},f.notStrictEqual=function(t,e,r){t===e&&m(t,e,r,\\\"!==\\\",f.notStrictEqual)},f.throws=function(t,e,r){w(!0,t,e,r)},f.doesNotThrow=function(t,e,r){w(!1,t,e,r)},f.ifError=function(t){if(t)throw t},f.strict=n(function t(e,r){e||m(e,!0,r,\\\"==\\\",t)},f,{equal:f.strictEqual,deepEqual:f.deepStrictEqual,notEqual:f.notStrictEqual,notDeepEqual:f.notDeepStrictEqual}),f.strict.strict=f.strict;var k=Object.keys||function(t){var e=[];for(var r in t)s.call(t,r)&&e.push(r);return e}}).call(this,\\\"undefined\\\"!=typeof global?global:\\\"undefined\\\"!=typeof self?self:\\\"undefined\\\"!=typeof window?window:{})},{\\\"object-assign\\\":454,\\\"util/\\\":71}],69:[function(t,e,r){\\\"function\\\"==typeof Object.create?e.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:e.exports=function(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}},{}],70:[function(t,e,r){e.exports=function(t){return t&&\\\"object\\\"==typeof t&&\\\"function\\\"==typeof t.copy&&\\\"function\\\"==typeof t.fill&&\\\"function\\\"==typeof t.readUInt8}},{}],71:[function(t,e,r){(function(e,n){var i=/%[sdj%]/g;r.format=function(t){if(!m(t)){for(var e=[],r=0;r<arguments.length;r++)e.push(s(arguments[r]));return e.join(\\\" \\\")}r=1;for(var n=arguments,a=n.length,o=String(t).replace(i,function(t){if(\\\"%%\\\"===t)return\\\"%\\\";if(r>=a)return t;switch(t){case\\\"%s\\\":return String(n[r++]);case\\\"%d\\\":return Number(n[r++]);case\\\"%j\\\":try{return JSON.stringify(n[r++])}catch(t){return\\\"[Circular]\\\"}default:return t}}),l=n[r];r<a;l=n[++r])g(l)||!b(l)?o+=\\\" \\\"+l:o+=\\\" \\\"+s(l);return o},r.deprecate=function(t,i){if(y(n.process))return function(){return r.deprecate(t,i).apply(this,arguments)};if(!0===e.noDeprecation)return t;var a=!1;return function(){if(!a){if(e.throwDeprecation)throw new Error(i);e.traceDeprecation?console.trace(i):console.error(i),a=!0}return t.apply(this,arguments)}};var a,o={};function s(t,e){var n={seen:[],stylize:c};return arguments.length>=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),d(e)?n.showHidden=e:e&&r._extend(n,e),y(n.showHidden)&&(n.showHidden=!1),y(n.depth)&&(n.depth=2),y(n.colors)&&(n.colors=!1),y(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=l),u(n,t,n.depth)}function l(t,e){var r=s.styles[e];return r?\\\"\\\\x1b[\\\"+s.colors[r][0]+\\\"m\\\"+t+\\\"\\\\x1b[\\\"+s.colors[r][1]+\\\"m\\\":t}function c(t,e){return t}function u(t,e,n){if(t.customInspect&&e&&k(e.inspect)&&e.inspect!==r.inspect&&(!e.constructor||e.constructor.prototype!==e)){var i=e.inspect(n,t);return m(i)||(i=u(t,i,n)),i}var a=function(t,e){if(y(e))return t.stylize(\\\"undefined\\\",\\\"undefined\\\");if(m(e)){var r=\\\"'\\\"+JSON.stringify(e).replace(/^\\\"|\\\"$/g,\\\"\\\").replace(/'/g,\\\"\\\\\\\\'\\\").replace(/\\\\\\\\\\\"/g,'\\\"')+\\\"'\\\";return t.stylize(r,\\\"string\\\")}if(v(e))return t.stylize(\\\"\\\"+e,\\\"number\\\");if(d(e))return t.stylize(\\\"\\\"+e,\\\"boolean\\\");if(g(e))return t.stylize(\\\"null\\\",\\\"null\\\")}(t,e);if(a)return a;var o=Object.keys(e),s=function(t){var e={};return t.forEach(function(t,r){e[t]=!0}),e}(o);if(t.showHidden&&(o=Object.getOwnPropertyNames(e)),w(e)&&(o.indexOf(\\\"message\\\")>=0||o.indexOf(\\\"description\\\")>=0))return h(e);if(0===o.length){if(k(e)){var l=e.name?\\\": \\\"+e.name:\\\"\\\";return t.stylize(\\\"[Function\\\"+l+\\\"]\\\",\\\"special\\\")}if(x(e))return t.stylize(RegExp.prototype.toString.call(e),\\\"regexp\\\");if(_(e))return t.stylize(Date.prototype.toString.call(e),\\\"date\\\");if(w(e))return h(e)}var c,b=\\\"\\\",T=!1,A=[\\\"{\\\",\\\"}\\\"];(p(e)&&(T=!0,A=[\\\"[\\\",\\\"]\\\"]),k(e))&&(b=\\\" [Function\\\"+(e.name?\\\": \\\"+e.name:\\\"\\\")+\\\"]\\\");return x(e)&&(b=\\\" \\\"+RegExp.prototype.toString.call(e)),_(e)&&(b=\\\" \\\"+Date.prototype.toUTCString.call(e)),w(e)&&(b=\\\" \\\"+h(e)),0!==o.length||T&&0!=e.length?n<0?x(e)?t.stylize(RegExp.prototype.toString.call(e),\\\"regexp\\\"):t.stylize(\\\"[Object]\\\",\\\"special\\\"):(t.seen.push(e),c=T?function(t,e,r,n,i){for(var a=[],o=0,s=e.length;o<s;++o)S(e,String(o))?a.push(f(t,e,r,n,String(o),!0)):a.push(\\\"\\\");return i.forEach(function(i){i.match(/^\\\\d+$/)||a.push(f(t,e,r,n,i,!0))}),a}(t,e,n,s,o):o.map(function(r){return f(t,e,n,s,r,T)}),t.seen.pop(),function(t,e,r){if(t.reduce(function(t,e){return 0,e.indexOf(\\\"\\\\n\\\")>=0&&0,t+e.replace(/\\\\u001b\\\\[\\\\d\\\\d?m/g,\\\"\\\").length+1},0)>60)return r[0]+(\\\"\\\"===e?\\\"\\\":e+\\\"\\\\n \\\")+\\\" \\\"+t.join(\\\",\\\\n  \\\")+\\\" \\\"+r[1];return r[0]+e+\\\" \\\"+t.join(\\\", \\\")+\\\" \\\"+r[1]}(c,b,A)):A[0]+b+A[1]}function h(t){return\\\"[\\\"+Error.prototype.toString.call(t)+\\\"]\\\"}function f(t,e,r,n,i,a){var o,s,l;if((l=Object.getOwnPropertyDescriptor(e,i)||{value:e[i]}).get?s=l.set?t.stylize(\\\"[Getter/Setter]\\\",\\\"special\\\"):t.stylize(\\\"[Getter]\\\",\\\"special\\\"):l.set&&(s=t.stylize(\\\"[Setter]\\\",\\\"special\\\")),S(n,i)||(o=\\\"[\\\"+i+\\\"]\\\"),s||(t.seen.indexOf(l.value)<0?(s=g(r)?u(t,l.value,null):u(t,l.value,r-1)).indexOf(\\\"\\\\n\\\")>-1&&(s=a?s.split(\\\"\\\\n\\\").map(function(t){return\\\"  \\\"+t}).join(\\\"\\\\n\\\").substr(2):\\\"\\\\n\\\"+s.split(\\\"\\\\n\\\").map(function(t){return\\\"   \\\"+t}).join(\\\"\\\\n\\\")):s=t.stylize(\\\"[Circular]\\\",\\\"special\\\")),y(o)){if(a&&i.match(/^\\\\d+$/))return s;(o=JSON.stringify(\\\"\\\"+i)).match(/^\\\"([a-zA-Z_][a-zA-Z_0-9]*)\\\"$/)?(o=o.substr(1,o.length-2),o=t.stylize(o,\\\"name\\\")):(o=o.replace(/'/g,\\\"\\\\\\\\'\\\").replace(/\\\\\\\\\\\"/g,'\\\"').replace(/(^\\\"|\\\"$)/g,\\\"'\\\"),o=t.stylize(o,\\\"string\\\"))}return o+\\\": \\\"+s}function p(t){return Array.isArray(t)}function d(t){return\\\"boolean\\\"==typeof t}function g(t){return null===t}function v(t){return\\\"number\\\"==typeof t}function m(t){return\\\"string\\\"==typeof t}function y(t){return void 0===t}function x(t){return b(t)&&\\\"[object RegExp]\\\"===T(t)}function b(t){return\\\"object\\\"==typeof t&&null!==t}function _(t){return b(t)&&\\\"[object Date]\\\"===T(t)}function w(t){return b(t)&&(\\\"[object Error]\\\"===T(t)||t instanceof Error)}function k(t){return\\\"function\\\"==typeof t}function T(t){return Object.prototype.toString.call(t)}function A(t){return t<10?\\\"0\\\"+t.toString(10):t.toString(10)}r.debuglog=function(t){if(y(a)&&(a=e.env.NODE_DEBUG||\\\"\\\"),t=t.toUpperCase(),!o[t])if(new RegExp(\\\"\\\\\\\\b\\\"+t+\\\"\\\\\\\\b\\\",\\\"i\\\").test(a)){var n=e.pid;o[t]=function(){var e=r.format.apply(r,arguments);console.error(\\\"%s %d: %s\\\",t,n,e)}}else o[t]=function(){};return o[t]},r.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:\\\"cyan\\\",number:\\\"yellow\\\",boolean:\\\"yellow\\\",undefined:\\\"grey\\\",null:\\\"bold\\\",string:\\\"green\\\",date:\\\"magenta\\\",regexp:\\\"red\\\"},r.isArray=p,r.isBoolean=d,r.isNull=g,r.isNullOrUndefined=function(t){return null==t},r.isNumber=v,r.isString=m,r.isSymbol=function(t){return\\\"symbol\\\"==typeof t},r.isUndefined=y,r.isRegExp=x,r.isObject=b,r.isDate=_,r.isError=w,r.isFunction=k,r.isPrimitive=function(t){return null===t||\\\"boolean\\\"==typeof t||\\\"number\\\"==typeof t||\\\"string\\\"==typeof t||\\\"symbol\\\"==typeof t||\\\"undefined\\\"==typeof t},r.isBuffer=t(\\\"./support/isBuffer\\\");var M=[\\\"Jan\\\",\\\"Feb\\\",\\\"Mar\\\",\\\"Apr\\\",\\\"May\\\",\\\"Jun\\\",\\\"Jul\\\",\\\"Aug\\\",\\\"Sep\\\",\\\"Oct\\\",\\\"Nov\\\",\\\"Dec\\\"];function S(t,e){return Object.prototype.hasOwnProperty.call(t,e)}r.log=function(){var t,e;console.log(\\\"%s - %s\\\",(t=new Date,e=[A(t.getHours()),A(t.getMinutes()),A(t.getSeconds())].join(\\\":\\\"),[t.getDate(),M[t.getMonth()],e].join(\\\" \\\")),r.format.apply(r,arguments))},r.inherits=t(\\\"inherits\\\"),r._extend=function(t,e){if(!e||!b(e))return t;for(var r=Object.keys(e),n=r.length;n--;)t[r[n]]=e[r[n]];return t}}).call(this,t(\\\"_process\\\"),\\\"undefined\\\"!=typeof global?global:\\\"undefined\\\"!=typeof self?self:\\\"undefined\\\"!=typeof window?window:{})},{\\\"./support/isBuffer\\\":70,_process:482,inherits:69}],72:[function(t,e,r){e.exports=function(t){return atob(t)}},{}],73:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){for(var r=e.length,a=new Array(r+1),o=0;o<r;++o){for(var s=new Array(r+1),l=0;l<=r;++l)s[l]=t[l][o];a[o]=s}a[r]=new Array(r+1);for(var o=0;o<=r;++o)a[r][o]=1;for(var c=new Array(r+1),o=0;o<r;++o)c[o]=e[o];c[r]=1;var u=n(a,c),h=i(u[r+1]);0===h&&(h=1);for(var f=new Array(r+1),o=0;o<=r;++o)f[o]=i(u[o])/h;return f};var n=t(\\\"robust-linear-solve\\\");function i(t){for(var e=0,r=0;r<t.length;++r)e+=t[r];return e}},{\\\"robust-linear-solve\\\":509}],74:[function(t,e,r){\\\"use strict\\\";r.byteLength=function(t){var e=c(t),r=e[0],n=e[1];return 3*(r+n)/4-n},r.toByteArray=function(t){for(var e,r=c(t),n=r[0],o=r[1],s=new a(function(t,e,r){return 3*(e+r)/4-r}(0,n,o)),l=0,u=o>0?n-4:n,h=0;h<u;h+=4)e=i[t.charCodeAt(h)]<<18|i[t.charCodeAt(h+1)]<<12|i[t.charCodeAt(h+2)]<<6|i[t.charCodeAt(h+3)],s[l++]=e>>16&255,s[l++]=e>>8&255,s[l++]=255&e;2===o&&(e=i[t.charCodeAt(h)]<<2|i[t.charCodeAt(h+1)]>>4,s[l++]=255&e);1===o&&(e=i[t.charCodeAt(h)]<<10|i[t.charCodeAt(h+1)]<<4|i[t.charCodeAt(h+2)]>>2,s[l++]=e>>8&255,s[l++]=255&e);return s},r.fromByteArray=function(t){for(var e,r=t.length,i=r%3,a=[],o=0,s=r-i;o<s;o+=16383)a.push(u(t,o,o+16383>s?s:o+16383));1===i?(e=t[r-1],a.push(n[e>>2]+n[e<<4&63]+\\\"==\\\")):2===i&&(e=(t[r-2]<<8)+t[r-1],a.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+\\\"=\\\"));return a.join(\\\"\\\")};for(var n=[],i=[],a=\\\"undefined\\\"!=typeof Uint8Array?Uint8Array:Array,o=\\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\\\",s=0,l=o.length;s<l;++s)n[s]=o[s],i[o.charCodeAt(s)]=s;function c(t){var e=t.length;if(e%4>0)throw new Error(\\\"Invalid string. Length must be a multiple of 4\\\");var r=t.indexOf(\\\"=\\\");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function u(t,e,r){for(var i,a,o=[],s=e;s<r;s+=3)i=(t[s]<<16&16711680)+(t[s+1]<<8&65280)+(255&t[s+2]),o.push(n[(a=i)>>18&63]+n[a>>12&63]+n[a>>6&63]+n[63&a]);return o.join(\\\"\\\")}i[\\\"-\\\".charCodeAt(0)]=62,i[\\\"_\\\".charCodeAt(0)]=63},{}],75:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./lib/rationalize\\\");e.exports=function(t,e){return n(t[0].mul(e[1]).add(e[0].mul(t[1])),t[1].mul(e[1]))}},{\\\"./lib/rationalize\\\":85}],76:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){return t[0].mul(e[1]).cmp(e[0].mul(t[1]))}},{}],77:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./lib/rationalize\\\");e.exports=function(t,e){return n(t[0].mul(e[1]),t[1].mul(e[0]))}},{\\\"./lib/rationalize\\\":85}],78:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./is-rat\\\"),i=t(\\\"./lib/is-bn\\\"),a=t(\\\"./lib/num-to-bn\\\"),o=t(\\\"./lib/str-to-bn\\\"),s=t(\\\"./lib/rationalize\\\"),l=t(\\\"./div\\\");e.exports=function t(e,r){if(n(e))return r?l(e,t(r)):[e[0].clone(),e[1].clone()];var c=0;var u,h;if(i(e))u=e.clone();else if(\\\"string\\\"==typeof e)u=o(e);else{if(0===e)return[a(0),a(1)];if(e===Math.floor(e))u=a(e);else{for(;e!==Math.floor(e);)e*=Math.pow(2,256),c-=256;u=a(e)}}if(n(r))u.mul(r[1]),h=r[0].clone();else if(i(r))h=r.clone();else if(\\\"string\\\"==typeof r)h=o(r);else if(r)if(r===Math.floor(r))h=a(r);else{for(;r!==Math.floor(r);)r*=Math.pow(2,256),c+=256;h=a(r)}else h=a(1);c>0?u=u.ushln(c):c<0&&(h=h.ushln(-c));return s(u,h)}},{\\\"./div\\\":77,\\\"./is-rat\\\":79,\\\"./lib/is-bn\\\":83,\\\"./lib/num-to-bn\\\":84,\\\"./lib/rationalize\\\":85,\\\"./lib/str-to-bn\\\":86}],79:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./lib/is-bn\\\");e.exports=function(t){return Array.isArray(t)&&2===t.length&&n(t[0])&&n(t[1])}},{\\\"./lib/is-bn\\\":83}],80:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"bn.js\\\");e.exports=function(t){return t.cmp(new n(0))}},{\\\"bn.js\\\":94}],81:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./bn-sign\\\");e.exports=function(t){var e=t.length,r=t.words,i=0;if(1===e)i=r[0];else if(2===e)i=r[0]+67108864*r[1];else for(var a=0;a<e;a++){var o=r[a];i+=o*Math.pow(67108864,a)}return n(t)*i}},{\\\"./bn-sign\\\":80}],82:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"double-bits\\\"),i=t(\\\"bit-twiddle\\\").countTrailingZeros;e.exports=function(t){var e=i(n.lo(t));if(e<32)return e;var r=i(n.hi(t));if(r>20)return 52;return r+32}},{\\\"bit-twiddle\\\":92,\\\"double-bits\\\":167}],83:[function(t,e,r){\\\"use strict\\\";t(\\\"bn.js\\\");e.exports=function(t){return t&&\\\"object\\\"==typeof t&&Boolean(t.words)}},{\\\"bn.js\\\":94}],84:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"bn.js\\\"),i=t(\\\"double-bits\\\");e.exports=function(t){var e=i.exponent(t);return e<52?new n(t):new n(t*Math.pow(2,52-e)).ushln(e-52)}},{\\\"bn.js\\\":94,\\\"double-bits\\\":167}],85:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./num-to-bn\\\"),i=t(\\\"./bn-sign\\\");e.exports=function(t,e){var r=i(t),a=i(e);if(0===r)return[n(0),n(1)];if(0===a)return[n(0),n(0)];a<0&&(t=t.neg(),e=e.neg());var o=t.gcd(e);if(o.cmpn(1))return[t.div(o),e.div(o)];return[t,e]}},{\\\"./bn-sign\\\":80,\\\"./num-to-bn\\\":84}],86:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"bn.js\\\");e.exports=function(t){return new n(t)}},{\\\"bn.js\\\":94}],87:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./lib/rationalize\\\");e.exports=function(t,e){return n(t[0].mul(e[0]),t[1].mul(e[1]))}},{\\\"./lib/rationalize\\\":85}],88:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./lib/bn-sign\\\");e.exports=function(t){return n(t[0])*n(t[1])}},{\\\"./lib/bn-sign\\\":80}],89:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./lib/rationalize\\\");e.exports=function(t,e){return n(t[0].mul(e[1]).sub(t[1].mul(e[0])),t[1].mul(e[1]))}},{\\\"./lib/rationalize\\\":85}],90:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./lib/bn-to-num\\\"),i=t(\\\"./lib/ctz\\\");e.exports=function(t){var e=t[0],r=t[1];if(0===e.cmpn(0))return 0;var a=e.abs().divmod(r.abs()),o=a.div,s=n(o),l=a.mod,c=e.negative!==r.negative?-1:1;if(0===l.cmpn(0))return c*s;if(s){var u=i(s)+4,h=n(l.ushln(u).divRound(r));return c*(s+h*Math.pow(2,-u))}var f=r.bitLength()-l.bitLength()+53,h=n(l.ushln(f).divRound(r));return f<1023?c*h*Math.pow(2,-f):(h*=Math.pow(2,-1023),c*h*Math.pow(2,1023-f))}},{\\\"./lib/bn-to-num\\\":81,\\\"./lib/ctz\\\":82}],91:[function(t,e,r){\\\"use strict\\\";function n(t,e,r,n,i,a){var o=[\\\"function \\\",t,\\\"(a,l,h,\\\",n.join(\\\",\\\"),\\\"){\\\",a?\\\"\\\":\\\"var i=\\\",r?\\\"l-1\\\":\\\"h+1\\\",\\\";while(l<=h){var m=(l+h)>>>1,x=a\\\",i?\\\".get(m)\\\":\\\"[m]\\\"];return a?e.indexOf(\\\"c\\\")<0?o.push(\\\";if(x===y){return m}else if(x<=y){\\\"):o.push(\\\";var p=c(x,y);if(p===0){return m}else if(p<=0){\\\"):o.push(\\\";if(\\\",e,\\\"){i=m;\\\"),r?o.push(\\\"l=m+1}else{h=m-1}\\\"):o.push(\\\"h=m-1}else{l=m+1}\\\"),o.push(\\\"}\\\"),a?o.push(\\\"return -1};\\\"):o.push(\\\"return i};\\\"),o.join(\\\"\\\")}function i(t,e,r,i){return new Function([n(\\\"A\\\",\\\"x\\\"+t+\\\"y\\\",e,[\\\"y\\\"],!1,i),n(\\\"B\\\",\\\"x\\\"+t+\\\"y\\\",e,[\\\"y\\\"],!0,i),n(\\\"P\\\",\\\"c(x,y)\\\"+t+\\\"0\\\",e,[\\\"y\\\",\\\"c\\\"],!1,i),n(\\\"Q\\\",\\\"c(x,y)\\\"+t+\\\"0\\\",e,[\\\"y\\\",\\\"c\\\"],!0,i),\\\"function dispatchBsearch\\\",r,\\\"(a,y,c,l,h){if(a.shape){if(typeof(c)==='function'){return Q(a,(l===undefined)?0:l|0,(h===undefined)?a.shape[0]-1:h|0,y,c)}else{return B(a,(c===undefined)?0:c|0,(l===undefined)?a.shape[0]-1:l|0,y)}}else{if(typeof(c)==='function'){return P(a,(l===undefined)?0:l|0,(h===undefined)?a.length-1:h|0,y,c)}else{return A(a,(c===undefined)?0:c|0,(l===undefined)?a.length-1:l|0,y)}}}return dispatchBsearch\\\",r].join(\\\"\\\"))()}e.exports={ge:i(\\\">=\\\",!1,\\\"GE\\\"),gt:i(\\\">\\\",!1,\\\"GT\\\"),lt:i(\\\"<\\\",!0,\\\"LT\\\"),le:i(\\\"<=\\\",!0,\\\"LE\\\"),eq:i(\\\"-\\\",!0,\\\"EQ\\\",!0)}},{}],92:[function(t,e,r){\\\"use strict\\\";function n(t){var e=32;return(t&=-t)&&e--,65535&t&&(e-=16),16711935&t&&(e-=8),252645135&t&&(e-=4),858993459&t&&(e-=2),1431655765&t&&(e-=1),e}r.INT_BITS=32,r.INT_MAX=2147483647,r.INT_MIN=-1<<31,r.sign=function(t){return(t>0)-(t<0)},r.abs=function(t){var e=t>>31;return(t^e)-e},r.min=function(t,e){return e^(t^e)&-(t<e)},r.max=function(t,e){return t^(t^e)&-(t<e)},r.isPow2=function(t){return!(t&t-1||!t)},r.log2=function(t){var e,r;return e=(t>65535)<<4,e|=r=((t>>>=e)>255)<<3,e|=r=((t>>>=r)>15)<<2,(e|=r=((t>>>=r)>3)<<1)|(t>>>=r)>>1},r.log10=function(t){return t>=1e9?9:t>=1e8?8:t>=1e7?7:t>=1e6?6:t>=1e5?5:t>=1e4?4:t>=1e3?3:t>=100?2:t>=10?1:0},r.popCount=function(t){return 16843009*((t=(858993459&(t-=t>>>1&1431655765))+(t>>>2&858993459))+(t>>>4)&252645135)>>>24},r.countTrailingZeros=n,r.nextPow2=function(t){return t+=0===t,--t,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,(t|=t>>>16)+1},r.prevPow2=function(t){return t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,(t|=t>>>16)-(t>>>1)},r.parity=function(t){return t^=t>>>16,t^=t>>>8,t^=t>>>4,27030>>>(t&=15)&1};var i=new Array(256);!function(t){for(var e=0;e<256;++e){var r=e,n=e,i=7;for(r>>>=1;r;r>>>=1)n<<=1,n|=1&r,--i;t[e]=n<<i&255}}(i),r.reverse=function(t){return i[255&t]<<24|i[t>>>8&255]<<16|i[t>>>16&255]<<8|i[t>>>24&255]},r.interleave2=function(t,e){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t&=65535)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e&=65535)|e<<8))|e<<4))|e<<2))|e<<1))<<1},r.deinterleave2=function(t,e){return(t=65535&((t=16711935&((t=252645135&((t=858993459&((t=t>>>e&1431655765)|t>>>1))|t>>>2))|t>>>4))|t>>>16))<<16>>16},r.interleave3=function(t,e,r){return t=1227133513&((t=3272356035&((t=251719695&((t=4278190335&((t&=1023)|t<<16))|t<<8))|t<<4))|t<<2),(t|=(e=1227133513&((e=3272356035&((e=251719695&((e=4278190335&((e&=1023)|e<<16))|e<<8))|e<<4))|e<<2))<<1)|(r=1227133513&((r=3272356035&((r=251719695&((r=4278190335&((r&=1023)|r<<16))|r<<8))|r<<4))|r<<2))<<2},r.deinterleave3=function(t,e){return(t=1023&((t=4278190335&((t=251719695&((t=3272356035&((t=t>>>e&1227133513)|t>>>2))|t>>>4))|t>>>8))|t>>>16))<<22>>22},r.nextCombination=function(t){var e=t|t-1;return e+1|(~e&-~e)-1>>>n(t)+1}},{}],93:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"clamp\\\");e.exports=function(t,e){e||(e={});var r,o,s,l,c,u,h,f,p,d,g,v=null==e.cutoff?.25:e.cutoff,m=null==e.radius?8:e.radius,y=e.channel||0;if(ArrayBuffer.isView(t)||Array.isArray(t)){if(!e.width||!e.height)throw Error(\\\"For raw data width and height should be provided by options\\\");r=e.width,o=e.height,l=t,u=e.stride?e.stride:Math.floor(t.length/r/o)}else window.HTMLCanvasElement&&t instanceof window.HTMLCanvasElement?(h=(f=t).getContext(\\\"2d\\\"),r=f.width,o=f.height,p=h.getImageData(0,0,r,o),l=p.data,u=4):window.CanvasRenderingContext2D&&t instanceof window.CanvasRenderingContext2D?(f=t.canvas,h=t,r=f.width,o=f.height,p=h.getImageData(0,0,r,o),l=p.data,u=4):window.ImageData&&t instanceof window.ImageData&&(p=t,r=t.width,o=t.height,l=p.data,u=4);if(s=Math.max(r,o),window.Uint8ClampedArray&&l instanceof window.Uint8ClampedArray||window.Uint8Array&&l instanceof window.Uint8Array)for(c=l,l=Array(r*o),d=0,g=c.length;d<g;d++)l[d]=c[d*u+y]/255;else if(1!==u)throw Error(\\\"Raw data can have only 1 value per pixel\\\");var x=Array(r*o),b=Array(r*o),_=Array(s),w=Array(s),k=Array(s+1),T=Array(s);for(d=0,g=r*o;d<g;d++){var A=l[d];x[d]=1===A?0:0===A?i:Math.pow(Math.max(0,.5-A),2),b[d]=1===A?i:0===A?0:Math.pow(Math.max(0,A-.5),2)}a(x,r,o,_,w,T,k),a(b,r,o,_,w,T,k);var M=window.Float32Array?new Float32Array(r*o):new Array(r*o);for(d=0,g=r*o;d<g;d++)M[d]=n(1-((x[d]-b[d])/m+v),0,1);return M};var i=1e20;function a(t,e,r,n,i,a,s){for(var l=0;l<e;l++){for(var c=0;c<r;c++)n[c]=t[c*e+l];for(o(n,i,a,s,r),c=0;c<r;c++)t[c*e+l]=i[c]}for(c=0;c<r;c++){for(l=0;l<e;l++)n[l]=t[c*e+l];for(o(n,i,a,s,e),l=0;l<e;l++)t[c*e+l]=Math.sqrt(i[l])}}function o(t,e,r,n,a){r[0]=0,n[0]=-i,n[1]=+i;for(var o=1,s=0;o<a;o++){for(var l=(t[o]+o*o-(t[r[s]]+r[s]*r[s]))/(2*o-2*r[s]);l<=n[s];)s--,l=(t[o]+o*o-(t[r[s]]+r[s]*r[s]))/(2*o-2*r[s]);r[++s]=o,n[s]=l,n[s+1]=+i}for(o=0,s=0;o<a;o++){for(;n[s+1]<o;)s++;e[o]=(o-r[s])*(o-r[s])+t[r[s]]}}},{clamp:115}],94:[function(t,e,r){!function(e,r){\\\"use strict\\\";function n(t,e){if(!t)throw new Error(e||\\\"Assertion failed\\\")}function i(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function a(t,e,r){if(a.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&(\\\"le\\\"!==e&&\\\"be\\\"!==e||(r=e,e=10),this._init(t||0,e||10,r||\\\"be\\\"))}var o;\\\"object\\\"==typeof e?e.exports=a:r.BN=a,a.BN=a,a.wordSize=26;try{o=t(\\\"buffer\\\").Buffer}catch(t){}function s(t,e,r){for(var n=0,i=Math.min(t.length,r),a=e;a<i;a++){var o=t.charCodeAt(a)-48;n<<=4,n|=o>=49&&o<=54?o-49+10:o>=17&&o<=22?o-17+10:15&o}return n}function l(t,e,r,n){for(var i=0,a=Math.min(t.length,r),o=e;o<a;o++){var s=t.charCodeAt(o)-48;i*=n,i+=s>=49?s-49+10:s>=17?s-17+10:s}return i}a.isBN=function(t){return t instanceof a||null!==t&&\\\"object\\\"==typeof t&&t.constructor.wordSize===a.wordSize&&Array.isArray(t.words)},a.max=function(t,e){return t.cmp(e)>0?t:e},a.min=function(t,e){return t.cmp(e)<0?t:e},a.prototype._init=function(t,e,r){if(\\\"number\\\"==typeof t)return this._initNumber(t,e,r);if(\\\"object\\\"==typeof t)return this._initArray(t,e,r);\\\"hex\\\"===e&&(e=16),n(e===(0|e)&&e>=2&&e<=36);var i=0;\\\"-\\\"===(t=t.toString().replace(/\\\\s+/g,\\\"\\\"))[0]&&i++,16===e?this._parseHex(t,i):this._parseBase(t,e,i),\\\"-\\\"===t[0]&&(this.negative=1),this.strip(),\\\"le\\\"===r&&this._initArray(this.toArray(),e,r)},a.prototype._initNumber=function(t,e,r){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(n(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),\\\"le\\\"===r&&this._initArray(this.toArray(),e,r)},a.prototype._initArray=function(t,e,r){if(n(\\\"number\\\"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var i=0;i<this.length;i++)this.words[i]=0;var a,o,s=0;if(\\\"be\\\"===r)for(i=t.length-1,a=0;i>=0;i-=3)o=t[i]|t[i-1]<<8|t[i-2]<<16,this.words[a]|=o<<s&67108863,this.words[a+1]=o>>>26-s&67108863,(s+=24)>=26&&(s-=26,a++);else if(\\\"le\\\"===r)for(i=0,a=0;i<t.length;i+=3)o=t[i]|t[i+1]<<8|t[i+2]<<16,this.words[a]|=o<<s&67108863,this.words[a+1]=o>>>26-s&67108863,(s+=24)>=26&&(s-=26,a++);return this.strip()},a.prototype._parseHex=function(t,e){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var r=0;r<this.length;r++)this.words[r]=0;var n,i,a=0;for(r=t.length-6,n=0;r>=e;r-=6)i=s(t,r,r+6),this.words[n]|=i<<a&67108863,this.words[n+1]|=i>>>26-a&4194303,(a+=24)>=26&&(a-=26,n++);r+6!==e&&(i=s(t,e,r+6),this.words[n]|=i<<a&67108863,this.words[n+1]|=i>>>26-a&4194303),this.strip()},a.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=e)n++;n--,i=i/e|0;for(var a=t.length-r,o=a%n,s=Math.min(a,a-o)+r,c=0,u=r;u<s;u+=n)c=l(t,u,u+n,e),this.imuln(i),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c);if(0!==o){var h=1;for(c=l(t,u,t.length,e),u=0;u<o;u++)h*=e;this.imuln(h),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c)}},a.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},a.prototype.clone=function(){var t=new a(null);return this.copy(t),t},a.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},a.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},a.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},a.prototype.inspect=function(){return(this.red?\\\"<BN-R: \\\":\\\"<BN: \\\")+this.toString(16)+\\\">\\\"};var c=[\\\"\\\",\\\"0\\\",\\\"00\\\",\\\"000\\\",\\\"0000\\\",\\\"00000\\\",\\\"000000\\\",\\\"0000000\\\",\\\"00000000\\\",\\\"000000000\\\",\\\"0000000000\\\",\\\"00000000000\\\",\\\"000000000000\\\",\\\"0000000000000\\\",\\\"00000000000000\\\",\\\"000000000000000\\\",\\\"0000000000000000\\\",\\\"00000000000000000\\\",\\\"000000000000000000\\\",\\\"0000000000000000000\\\",\\\"00000000000000000000\\\",\\\"000000000000000000000\\\",\\\"0000000000000000000000\\\",\\\"00000000000000000000000\\\",\\\"000000000000000000000000\\\",\\\"0000000000000000000000000\\\"],u=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],h=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function f(t,e,r){r.negative=e.negative^t.negative;var n=t.length+e.length|0;r.length=n,n=n-1|0;var i=0|t.words[0],a=0|e.words[0],o=i*a,s=67108863&o,l=o/67108864|0;r.words[0]=s;for(var c=1;c<n;c++){for(var u=l>>>26,h=67108863&l,f=Math.min(c,e.length-1),p=Math.max(0,c-t.length+1);p<=f;p++){var d=c-p|0;u+=(o=(i=0|t.words[d])*(a=0|e.words[p])+h)/67108864|0,h=67108863&o}r.words[c]=0|h,l=0|u}return 0!==l?r.words[c]=0|l:r.length--,r.strip()}a.prototype.toString=function(t,e){var r;if(e=0|e||1,16===(t=t||10)||\\\"hex\\\"===t){r=\\\"\\\";for(var i=0,a=0,o=0;o<this.length;o++){var s=this.words[o],l=(16777215&(s<<i|a)).toString(16);r=0!==(a=s>>>24-i&16777215)||o!==this.length-1?c[6-l.length]+l+r:l+r,(i+=2)>=26&&(i-=26,o--)}for(0!==a&&(r=a.toString(16)+r);r.length%e!=0;)r=\\\"0\\\"+r;return 0!==this.negative&&(r=\\\"-\\\"+r),r}if(t===(0|t)&&t>=2&&t<=36){var f=u[t],p=h[t];r=\\\"\\\";var d=this.clone();for(d.negative=0;!d.isZero();){var g=d.modn(p).toString(t);r=(d=d.idivn(p)).isZero()?g+r:c[f-g.length]+g+r}for(this.isZero()&&(r=\\\"0\\\"+r);r.length%e!=0;)r=\\\"0\\\"+r;return 0!==this.negative&&(r=\\\"-\\\"+r),r}n(!1,\\\"Base should be between 2 and 36\\\")},a.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,\\\"Number can only safely store up to 53 bits\\\"),0!==this.negative?-t:t},a.prototype.toJSON=function(){return this.toString(16)},a.prototype.toBuffer=function(t,e){return n(\\\"undefined\\\"!=typeof o),this.toArrayLike(o,t,e)},a.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},a.prototype.toArrayLike=function(t,e,r){var i=this.byteLength(),a=r||Math.max(1,i);n(i<=a,\\\"byte array longer than desired length\\\"),n(a>0,\\\"Requested array length <= 0\\\"),this.strip();var o,s,l=\\\"le\\\"===e,c=new t(a),u=this.clone();if(l){for(s=0;!u.isZero();s++)o=u.andln(255),u.iushrn(8),c[s]=o;for(;s<a;s++)c[s]=0}else{for(s=0;s<a-i;s++)c[s]=0;for(s=0;!u.isZero();s++)o=u.andln(255),u.iushrn(8),c[a-s-1]=o}return c},Math.clz32?a.prototype._countBits=function(t){return 32-Math.clz32(t)}:a.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},a.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0==(8191&e)&&(r+=13,e>>>=13),0==(127&e)&&(r+=7,e>>>=7),0==(15&e)&&(r+=4,e>>>=4),0==(3&e)&&(r+=2,e>>>=2),0==(1&e)&&r++,r},a.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},a.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},a.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},a.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},a.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},a.prototype.isNeg=function(){return 0!==this.negative},a.prototype.neg=function(){return this.clone().ineg()},a.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},a.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},a.prototype.ior=function(t){return n(0==(this.negative|t.negative)),this.iuor(t)},a.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},a.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},a.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},a.prototype.iand=function(t){return n(0==(this.negative|t.negative)),this.iuand(t)},a.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},a.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},a.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var n=0;n<r.length;n++)this.words[n]=e.words[n]^r.words[n];if(this!==e)for(;n<e.length;n++)this.words[n]=e.words[n];return this.length=e.length,this.strip()},a.prototype.ixor=function(t){return n(0==(this.negative|t.negative)),this.iuxor(t)},a.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},a.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},a.prototype.inotn=function(t){n(\\\"number\\\"==typeof t&&t>=0);var e=0|Math.ceil(t/26),r=t%26;this._expand(e),r>0&&e--;for(var i=0;i<e;i++)this.words[i]=67108863&~this.words[i];return r>0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},a.prototype.notn=function(t){return this.clone().inotn(t)},a.prototype.setn=function(t,e){n(\\\"number\\\"==typeof t&&t>=0);var r=t/26|0,i=t%26;return this._expand(r+1),this.words[r]=e?this.words[r]|1<<i:this.words[r]&~(1<<i),this.strip()},a.prototype.iadd=function(t){var e,r,n;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();this.length>t.length?(r=this,n=t):(r=t,n=this);for(var i=0,a=0;a<n.length;a++)e=(0|r.words[a])+(0|n.words[a])+i,this.words[a]=67108863&e,i=e>>>26;for(;0!==i&&a<r.length;a++)e=(0|r.words[a])+i,this.words[a]=67108863&e,i=e>>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;a<r.length;a++)this.words[a]=r.words[a];return this},a.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},a.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r,n,i=this.cmp(t);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(r=this,n=t):(r=t,n=this);for(var a=0,o=0;o<n.length;o++)a=(e=(0|r.words[o])-(0|n.words[o])+a)>>26,this.words[o]=67108863&e;for(;0!==a&&o<r.length;o++)a=(e=(0|r.words[o])+a)>>26,this.words[o]=67108863&e;if(0===a&&o<r.length&&r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this.length=Math.max(this.length,o),r!==this&&(this.negative=1),this.strip()},a.prototype.sub=function(t){return this.clone().isub(t)};var p=function(t,e,r){var n,i,a,o=t.words,s=e.words,l=r.words,c=0,u=0|o[0],h=8191&u,f=u>>>13,p=0|o[1],d=8191&p,g=p>>>13,v=0|o[2],m=8191&v,y=v>>>13,x=0|o[3],b=8191&x,_=x>>>13,w=0|o[4],k=8191&w,T=w>>>13,A=0|o[5],M=8191&A,S=A>>>13,E=0|o[6],C=8191&E,L=E>>>13,P=0|o[7],O=8191&P,z=P>>>13,I=0|o[8],D=8191&I,R=I>>>13,F=0|o[9],B=8191&F,N=F>>>13,j=0|s[0],U=8191&j,V=j>>>13,q=0|s[1],H=8191&q,G=q>>>13,Y=0|s[2],W=8191&Y,X=Y>>>13,Z=0|s[3],J=8191&Z,K=Z>>>13,$=0|s[4],Q=8191&$,tt=$>>>13,et=0|s[5],rt=8191&et,nt=et>>>13,it=0|s[6],at=8191&it,ot=it>>>13,st=0|s[7],lt=8191&st,ct=st>>>13,ut=0|s[8],ht=8191&ut,ft=ut>>>13,pt=0|s[9],dt=8191&pt,gt=pt>>>13;r.negative=t.negative^e.negative,r.length=19;var vt=(c+(n=Math.imul(h,U))|0)+((8191&(i=(i=Math.imul(h,V))+Math.imul(f,U)|0))<<13)|0;c=((a=Math.imul(f,V))+(i>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(d,U),i=(i=Math.imul(d,V))+Math.imul(g,U)|0,a=Math.imul(g,V);var mt=(c+(n=n+Math.imul(h,H)|0)|0)+((8191&(i=(i=i+Math.imul(h,G)|0)+Math.imul(f,H)|0))<<13)|0;c=((a=a+Math.imul(f,G)|0)+(i>>>13)|0)+(mt>>>26)|0,mt&=67108863,n=Math.imul(m,U),i=(i=Math.imul(m,V))+Math.imul(y,U)|0,a=Math.imul(y,V),n=n+Math.imul(d,H)|0,i=(i=i+Math.imul(d,G)|0)+Math.imul(g,H)|0,a=a+Math.imul(g,G)|0;var yt=(c+(n=n+Math.imul(h,W)|0)|0)+((8191&(i=(i=i+Math.imul(h,X)|0)+Math.imul(f,W)|0))<<13)|0;c=((a=a+Math.imul(f,X)|0)+(i>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(b,U),i=(i=Math.imul(b,V))+Math.imul(_,U)|0,a=Math.imul(_,V),n=n+Math.imul(m,H)|0,i=(i=i+Math.imul(m,G)|0)+Math.imul(y,H)|0,a=a+Math.imul(y,G)|0,n=n+Math.imul(d,W)|0,i=(i=i+Math.imul(d,X)|0)+Math.imul(g,W)|0,a=a+Math.imul(g,X)|0;var xt=(c+(n=n+Math.imul(h,J)|0)|0)+((8191&(i=(i=i+Math.imul(h,K)|0)+Math.imul(f,J)|0))<<13)|0;c=((a=a+Math.imul(f,K)|0)+(i>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(k,U),i=(i=Math.imul(k,V))+Math.imul(T,U)|0,a=Math.imul(T,V),n=n+Math.imul(b,H)|0,i=(i=i+Math.imul(b,G)|0)+Math.imul(_,H)|0,a=a+Math.imul(_,G)|0,n=n+Math.imul(m,W)|0,i=(i=i+Math.imul(m,X)|0)+Math.imul(y,W)|0,a=a+Math.imul(y,X)|0,n=n+Math.imul(d,J)|0,i=(i=i+Math.imul(d,K)|0)+Math.imul(g,J)|0,a=a+Math.imul(g,K)|0;var bt=(c+(n=n+Math.imul(h,Q)|0)|0)+((8191&(i=(i=i+Math.imul(h,tt)|0)+Math.imul(f,Q)|0))<<13)|0;c=((a=a+Math.imul(f,tt)|0)+(i>>>13)|0)+(bt>>>26)|0,bt&=67108863,n=Math.imul(M,U),i=(i=Math.imul(M,V))+Math.imul(S,U)|0,a=Math.imul(S,V),n=n+Math.imul(k,H)|0,i=(i=i+Math.imul(k,G)|0)+Math.imul(T,H)|0,a=a+Math.imul(T,G)|0,n=n+Math.imul(b,W)|0,i=(i=i+Math.imul(b,X)|0)+Math.imul(_,W)|0,a=a+Math.imul(_,X)|0,n=n+Math.imul(m,J)|0,i=(i=i+Math.imul(m,K)|0)+Math.imul(y,J)|0,a=a+Math.imul(y,K)|0,n=n+Math.imul(d,Q)|0,i=(i=i+Math.imul(d,tt)|0)+Math.imul(g,Q)|0,a=a+Math.imul(g,tt)|0;var _t=(c+(n=n+Math.imul(h,rt)|0)|0)+((8191&(i=(i=i+Math.imul(h,nt)|0)+Math.imul(f,rt)|0))<<13)|0;c=((a=a+Math.imul(f,nt)|0)+(i>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(C,U),i=(i=Math.imul(C,V))+Math.imul(L,U)|0,a=Math.imul(L,V),n=n+Math.imul(M,H)|0,i=(i=i+Math.imul(M,G)|0)+Math.imul(S,H)|0,a=a+Math.imul(S,G)|0,n=n+Math.imul(k,W)|0,i=(i=i+Math.imul(k,X)|0)+Math.imul(T,W)|0,a=a+Math.imul(T,X)|0,n=n+Math.imul(b,J)|0,i=(i=i+Math.imul(b,K)|0)+Math.imul(_,J)|0,a=a+Math.imul(_,K)|0,n=n+Math.imul(m,Q)|0,i=(i=i+Math.imul(m,tt)|0)+Math.imul(y,Q)|0,a=a+Math.imul(y,tt)|0,n=n+Math.imul(d,rt)|0,i=(i=i+Math.imul(d,nt)|0)+Math.imul(g,rt)|0,a=a+Math.imul(g,nt)|0;var wt=(c+(n=n+Math.imul(h,at)|0)|0)+((8191&(i=(i=i+Math.imul(h,ot)|0)+Math.imul(f,at)|0))<<13)|0;c=((a=a+Math.imul(f,ot)|0)+(i>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(O,U),i=(i=Math.imul(O,V))+Math.imul(z,U)|0,a=Math.imul(z,V),n=n+Math.imul(C,H)|0,i=(i=i+Math.imul(C,G)|0)+Math.imul(L,H)|0,a=a+Math.imul(L,G)|0,n=n+Math.imul(M,W)|0,i=(i=i+Math.imul(M,X)|0)+Math.imul(S,W)|0,a=a+Math.imul(S,X)|0,n=n+Math.imul(k,J)|0,i=(i=i+Math.imul(k,K)|0)+Math.imul(T,J)|0,a=a+Math.imul(T,K)|0,n=n+Math.imul(b,Q)|0,i=(i=i+Math.imul(b,tt)|0)+Math.imul(_,Q)|0,a=a+Math.imul(_,tt)|0,n=n+Math.imul(m,rt)|0,i=(i=i+Math.imul(m,nt)|0)+Math.imul(y,rt)|0,a=a+Math.imul(y,nt)|0,n=n+Math.imul(d,at)|0,i=(i=i+Math.imul(d,ot)|0)+Math.imul(g,at)|0,a=a+Math.imul(g,ot)|0;var kt=(c+(n=n+Math.imul(h,lt)|0)|0)+((8191&(i=(i=i+Math.imul(h,ct)|0)+Math.imul(f,lt)|0))<<13)|0;c=((a=a+Math.imul(f,ct)|0)+(i>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(D,U),i=(i=Math.imul(D,V))+Math.imul(R,U)|0,a=Math.imul(R,V),n=n+Math.imul(O,H)|0,i=(i=i+Math.imul(O,G)|0)+Math.imul(z,H)|0,a=a+Math.imul(z,G)|0,n=n+Math.imul(C,W)|0,i=(i=i+Math.imul(C,X)|0)+Math.imul(L,W)|0,a=a+Math.imul(L,X)|0,n=n+Math.imul(M,J)|0,i=(i=i+Math.imul(M,K)|0)+Math.imul(S,J)|0,a=a+Math.imul(S,K)|0,n=n+Math.imul(k,Q)|0,i=(i=i+Math.imul(k,tt)|0)+Math.imul(T,Q)|0,a=a+Math.imul(T,tt)|0,n=n+Math.imul(b,rt)|0,i=(i=i+Math.imul(b,nt)|0)+Math.imul(_,rt)|0,a=a+Math.imul(_,nt)|0,n=n+Math.imul(m,at)|0,i=(i=i+Math.imul(m,ot)|0)+Math.imul(y,at)|0,a=a+Math.imul(y,ot)|0,n=n+Math.imul(d,lt)|0,i=(i=i+Math.imul(d,ct)|0)+Math.imul(g,lt)|0,a=a+Math.imul(g,ct)|0;var Tt=(c+(n=n+Math.imul(h,ht)|0)|0)+((8191&(i=(i=i+Math.imul(h,ft)|0)+Math.imul(f,ht)|0))<<13)|0;c=((a=a+Math.imul(f,ft)|0)+(i>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(B,U),i=(i=Math.imul(B,V))+Math.imul(N,U)|0,a=Math.imul(N,V),n=n+Math.imul(D,H)|0,i=(i=i+Math.imul(D,G)|0)+Math.imul(R,H)|0,a=a+Math.imul(R,G)|0,n=n+Math.imul(O,W)|0,i=(i=i+Math.imul(O,X)|0)+Math.imul(z,W)|0,a=a+Math.imul(z,X)|0,n=n+Math.imul(C,J)|0,i=(i=i+Math.imul(C,K)|0)+Math.imul(L,J)|0,a=a+Math.imul(L,K)|0,n=n+Math.imul(M,Q)|0,i=(i=i+Math.imul(M,tt)|0)+Math.imul(S,Q)|0,a=a+Math.imul(S,tt)|0,n=n+Math.imul(k,rt)|0,i=(i=i+Math.imul(k,nt)|0)+Math.imul(T,rt)|0,a=a+Math.imul(T,nt)|0,n=n+Math.imul(b,at)|0,i=(i=i+Math.imul(b,ot)|0)+Math.imul(_,at)|0,a=a+Math.imul(_,ot)|0,n=n+Math.imul(m,lt)|0,i=(i=i+Math.imul(m,ct)|0)+Math.imul(y,lt)|0,a=a+Math.imul(y,ct)|0,n=n+Math.imul(d,ht)|0,i=(i=i+Math.imul(d,ft)|0)+Math.imul(g,ht)|0,a=a+Math.imul(g,ft)|0;var At=(c+(n=n+Math.imul(h,dt)|0)|0)+((8191&(i=(i=i+Math.imul(h,gt)|0)+Math.imul(f,dt)|0))<<13)|0;c=((a=a+Math.imul(f,gt)|0)+(i>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(B,H),i=(i=Math.imul(B,G))+Math.imul(N,H)|0,a=Math.imul(N,G),n=n+Math.imul(D,W)|0,i=(i=i+Math.imul(D,X)|0)+Math.imul(R,W)|0,a=a+Math.imul(R,X)|0,n=n+Math.imul(O,J)|0,i=(i=i+Math.imul(O,K)|0)+Math.imul(z,J)|0,a=a+Math.imul(z,K)|0,n=n+Math.imul(C,Q)|0,i=(i=i+Math.imul(C,tt)|0)+Math.imul(L,Q)|0,a=a+Math.imul(L,tt)|0,n=n+Math.imul(M,rt)|0,i=(i=i+Math.imul(M,nt)|0)+Math.imul(S,rt)|0,a=a+Math.imul(S,nt)|0,n=n+Math.imul(k,at)|0,i=(i=i+Math.imul(k,ot)|0)+Math.imul(T,at)|0,a=a+Math.imul(T,ot)|0,n=n+Math.imul(b,lt)|0,i=(i=i+Math.imul(b,ct)|0)+Math.imul(_,lt)|0,a=a+Math.imul(_,ct)|0,n=n+Math.imul(m,ht)|0,i=(i=i+Math.imul(m,ft)|0)+Math.imul(y,ht)|0,a=a+Math.imul(y,ft)|0;var Mt=(c+(n=n+Math.imul(d,dt)|0)|0)+((8191&(i=(i=i+Math.imul(d,gt)|0)+Math.imul(g,dt)|0))<<13)|0;c=((a=a+Math.imul(g,gt)|0)+(i>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(B,W),i=(i=Math.imul(B,X))+Math.imul(N,W)|0,a=Math.imul(N,X),n=n+Math.imul(D,J)|0,i=(i=i+Math.imul(D,K)|0)+Math.imul(R,J)|0,a=a+Math.imul(R,K)|0,n=n+Math.imul(O,Q)|0,i=(i=i+Math.imul(O,tt)|0)+Math.imul(z,Q)|0,a=a+Math.imul(z,tt)|0,n=n+Math.imul(C,rt)|0,i=(i=i+Math.imul(C,nt)|0)+Math.imul(L,rt)|0,a=a+Math.imul(L,nt)|0,n=n+Math.imul(M,at)|0,i=(i=i+Math.imul(M,ot)|0)+Math.imul(S,at)|0,a=a+Math.imul(S,ot)|0,n=n+Math.imul(k,lt)|0,i=(i=i+Math.imul(k,ct)|0)+Math.imul(T,lt)|0,a=a+Math.imul(T,ct)|0,n=n+Math.imul(b,ht)|0,i=(i=i+Math.imul(b,ft)|0)+Math.imul(_,ht)|0,a=a+Math.imul(_,ft)|0;var St=(c+(n=n+Math.imul(m,dt)|0)|0)+((8191&(i=(i=i+Math.imul(m,gt)|0)+Math.imul(y,dt)|0))<<13)|0;c=((a=a+Math.imul(y,gt)|0)+(i>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(B,J),i=(i=Math.imul(B,K))+Math.imul(N,J)|0,a=Math.imul(N,K),n=n+Math.imul(D,Q)|0,i=(i=i+Math.imul(D,tt)|0)+Math.imul(R,Q)|0,a=a+Math.imul(R,tt)|0,n=n+Math.imul(O,rt)|0,i=(i=i+Math.imul(O,nt)|0)+Math.imul(z,rt)|0,a=a+Math.imul(z,nt)|0,n=n+Math.imul(C,at)|0,i=(i=i+Math.imul(C,ot)|0)+Math.imul(L,at)|0,a=a+Math.imul(L,ot)|0,n=n+Math.imul(M,lt)|0,i=(i=i+Math.imul(M,ct)|0)+Math.imul(S,lt)|0,a=a+Math.imul(S,ct)|0,n=n+Math.imul(k,ht)|0,i=(i=i+Math.imul(k,ft)|0)+Math.imul(T,ht)|0,a=a+Math.imul(T,ft)|0;var Et=(c+(n=n+Math.imul(b,dt)|0)|0)+((8191&(i=(i=i+Math.imul(b,gt)|0)+Math.imul(_,dt)|0))<<13)|0;c=((a=a+Math.imul(_,gt)|0)+(i>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(B,Q),i=(i=Math.imul(B,tt))+Math.imul(N,Q)|0,a=Math.imul(N,tt),n=n+Math.imul(D,rt)|0,i=(i=i+Math.imul(D,nt)|0)+Math.imul(R,rt)|0,a=a+Math.imul(R,nt)|0,n=n+Math.imul(O,at)|0,i=(i=i+Math.imul(O,ot)|0)+Math.imul(z,at)|0,a=a+Math.imul(z,ot)|0,n=n+Math.imul(C,lt)|0,i=(i=i+Math.imul(C,ct)|0)+Math.imul(L,lt)|0,a=a+Math.imul(L,ct)|0,n=n+Math.imul(M,ht)|0,i=(i=i+Math.imul(M,ft)|0)+Math.imul(S,ht)|0,a=a+Math.imul(S,ft)|0;var Ct=(c+(n=n+Math.imul(k,dt)|0)|0)+((8191&(i=(i=i+Math.imul(k,gt)|0)+Math.imul(T,dt)|0))<<13)|0;c=((a=a+Math.imul(T,gt)|0)+(i>>>13)|0)+(Ct>>>26)|0,Ct&=67108863,n=Math.imul(B,rt),i=(i=Math.imul(B,nt))+Math.imul(N,rt)|0,a=Math.imul(N,nt),n=n+Math.imul(D,at)|0,i=(i=i+Math.imul(D,ot)|0)+Math.imul(R,at)|0,a=a+Math.imul(R,ot)|0,n=n+Math.imul(O,lt)|0,i=(i=i+Math.imul(O,ct)|0)+Math.imul(z,lt)|0,a=a+Math.imul(z,ct)|0,n=n+Math.imul(C,ht)|0,i=(i=i+Math.imul(C,ft)|0)+Math.imul(L,ht)|0,a=a+Math.imul(L,ft)|0;var Lt=(c+(n=n+Math.imul(M,dt)|0)|0)+((8191&(i=(i=i+Math.imul(M,gt)|0)+Math.imul(S,dt)|0))<<13)|0;c=((a=a+Math.imul(S,gt)|0)+(i>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,n=Math.imul(B,at),i=(i=Math.imul(B,ot))+Math.imul(N,at)|0,a=Math.imul(N,ot),n=n+Math.imul(D,lt)|0,i=(i=i+Math.imul(D,ct)|0)+Math.imul(R,lt)|0,a=a+Math.imul(R,ct)|0,n=n+Math.imul(O,ht)|0,i=(i=i+Math.imul(O,ft)|0)+Math.imul(z,ht)|0,a=a+Math.imul(z,ft)|0;var Pt=(c+(n=n+Math.imul(C,dt)|0)|0)+((8191&(i=(i=i+Math.imul(C,gt)|0)+Math.imul(L,dt)|0))<<13)|0;c=((a=a+Math.imul(L,gt)|0)+(i>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(B,lt),i=(i=Math.imul(B,ct))+Math.imul(N,lt)|0,a=Math.imul(N,ct),n=n+Math.imul(D,ht)|0,i=(i=i+Math.imul(D,ft)|0)+Math.imul(R,ht)|0,a=a+Math.imul(R,ft)|0;var Ot=(c+(n=n+Math.imul(O,dt)|0)|0)+((8191&(i=(i=i+Math.imul(O,gt)|0)+Math.imul(z,dt)|0))<<13)|0;c=((a=a+Math.imul(z,gt)|0)+(i>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,n=Math.imul(B,ht),i=(i=Math.imul(B,ft))+Math.imul(N,ht)|0,a=Math.imul(N,ft);var zt=(c+(n=n+Math.imul(D,dt)|0)|0)+((8191&(i=(i=i+Math.imul(D,gt)|0)+Math.imul(R,dt)|0))<<13)|0;c=((a=a+Math.imul(R,gt)|0)+(i>>>13)|0)+(zt>>>26)|0,zt&=67108863;var It=(c+(n=Math.imul(B,dt))|0)+((8191&(i=(i=Math.imul(B,gt))+Math.imul(N,dt)|0))<<13)|0;return c=((a=Math.imul(N,gt))+(i>>>13)|0)+(It>>>26)|0,It&=67108863,l[0]=vt,l[1]=mt,l[2]=yt,l[3]=xt,l[4]=bt,l[5]=_t,l[6]=wt,l[7]=kt,l[8]=Tt,l[9]=At,l[10]=Mt,l[11]=St,l[12]=Et,l[13]=Ct,l[14]=Lt,l[15]=Pt,l[16]=Ot,l[17]=zt,l[18]=It,0!==c&&(l[19]=c,r.length++),r};function d(t,e,r){return(new g).mulp(t,e,r)}function g(t,e){this.x=t,this.y=e}Math.imul||(p=f),a.prototype.mulTo=function(t,e){var r=this.length+t.length;return 10===this.length&&10===t.length?p(this,t,e):r<63?f(this,t,e):r<1024?function(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var n=0,i=0,a=0;a<r.length-1;a++){var o=i;i=0;for(var s=67108863&n,l=Math.min(a,e.length-1),c=Math.max(0,a-t.length+1);c<=l;c++){var u=a-c,h=(0|t.words[u])*(0|e.words[c]),f=67108863&h;s=67108863&(f=f+s|0),i+=(o=(o=o+(h/67108864|0)|0)+(f>>>26)|0)>>>26,o&=67108863}r.words[a]=s,n=o,o=i}return 0!==n?r.words[a]=n:r.length--,r.strip()}(this,t,e):d(this,t,e)},g.prototype.makeRBT=function(t){for(var e=new Array(t),r=a.prototype._countBits(t)-1,n=0;n<t;n++)e[n]=this.revBin(n,r,t);return e},g.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var n=0,i=0;i<e;i++)n|=(1&t)<<e-i-1,t>>=1;return n},g.prototype.permute=function(t,e,r,n,i,a){for(var o=0;o<a;o++)n[o]=e[t[o]],i[o]=r[t[o]]},g.prototype.transform=function(t,e,r,n,i,a){this.permute(a,t,e,r,n,i);for(var o=1;o<i;o<<=1)for(var s=o<<1,l=Math.cos(2*Math.PI/s),c=Math.sin(2*Math.PI/s),u=0;u<i;u+=s)for(var h=l,f=c,p=0;p<o;p++){var d=r[u+p],g=n[u+p],v=r[u+p+o],m=n[u+p+o],y=h*v-f*m;m=h*m+f*v,v=y,r[u+p]=d+v,n[u+p]=g+m,r[u+p+o]=d-v,n[u+p+o]=g-m,p!==s&&(y=l*h-c*f,f=l*f+c*h,h=y)}},g.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),n=1&r,i=0;for(r=r/2|0;r;r>>>=1)i++;return 1<<i+1+n},g.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var n=0;n<r/2;n++){var i=t[n];t[n]=t[r-n-1],t[r-n-1]=i,i=e[n],e[n]=-e[r-n-1],e[r-n-1]=-i}},g.prototype.normalize13b=function(t,e){for(var r=0,n=0;n<e/2;n++){var i=8192*Math.round(t[2*n+1]/e)+Math.round(t[2*n]/e)+r;t[n]=67108863&i,r=i<67108864?0:i/67108864|0}return t},g.prototype.convert13b=function(t,e,r,i){for(var a=0,o=0;o<e;o++)a+=0|t[o],r[2*o]=8191&a,a>>>=13,r[2*o+1]=8191&a,a>>>=13;for(o=2*e;o<i;++o)r[o]=0;n(0===a),n(0==(-8192&a))},g.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},g.prototype.mulp=function(t,e,r){var n=2*this.guessLen13b(t.length,e.length),i=this.makeRBT(n),a=this.stub(n),o=new Array(n),s=new Array(n),l=new Array(n),c=new Array(n),u=new Array(n),h=new Array(n),f=r.words;f.length=n,this.convert13b(t.words,t.length,o,n),this.convert13b(e.words,e.length,c,n),this.transform(o,a,s,l,n,i),this.transform(c,a,u,h,n,i);for(var p=0;p<n;p++){var d=s[p]*u[p]-l[p]*h[p];l[p]=s[p]*h[p]+l[p]*u[p],s[p]=d}return this.conjugate(s,l,n),this.transform(s,l,f,a,n,i),this.conjugate(f,a,n),this.normalize13b(f,n),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},a.prototype.mul=function(t){var e=new a(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},a.prototype.mulf=function(t){var e=new a(null);return e.words=new Array(this.length+t.length),d(this,t,e)},a.prototype.imul=function(t){return this.clone().mulTo(t,this)},a.prototype.imuln=function(t){n(\\\"number\\\"==typeof t),n(t<67108864);for(var e=0,r=0;r<this.length;r++){var i=(0|this.words[r])*t,a=(67108863&i)+(67108863&e);e>>=26,e+=i/67108864|0,e+=a>>>26,this.words[r]=67108863&a}return 0!==e&&(this.words[r]=e,this.length++),this},a.prototype.muln=function(t){return this.clone().imuln(t)},a.prototype.sqr=function(){return this.mul(this)},a.prototype.isqr=function(){return this.imul(this.clone())},a.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),r=0;r<e.length;r++){var n=r/26|0,i=r%26;e[r]=(t.words[n]&1<<i)>>>i}return e}(t);if(0===e.length)return new a(1);for(var r=this,n=0;n<e.length&&0===e[n];n++,r=r.sqr());if(++n<e.length)for(var i=r.sqr();n<e.length;n++,i=i.sqr())0!==e[n]&&(r=r.mul(i));return r},a.prototype.iushln=function(t){n(\\\"number\\\"==typeof t&&t>=0);var e,r=t%26,i=(t-r)/26,a=67108863>>>26-r<<26-r;if(0!==r){var o=0;for(e=0;e<this.length;e++){var s=this.words[e]&a,l=(0|this.words[e])-s<<r;this.words[e]=l|o,o=s>>>26-r}o&&(this.words[e]=o,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e<i;e++)this.words[e]=0;this.length+=i}return this.strip()},a.prototype.ishln=function(t){return n(0===this.negative),this.iushln(t)},a.prototype.iushrn=function(t,e,r){var i;n(\\\"number\\\"==typeof t&&t>=0),i=e?(e-e%26)/26:0;var a=t%26,o=Math.min((t-a)/26,this.length),s=67108863^67108863>>>a<<a,l=r;if(i-=o,i=Math.max(0,i),l){for(var c=0;c<o;c++)l.words[c]=this.words[c];l.length=o}if(0===o);else if(this.length>o)for(this.length-=o,c=0;c<this.length;c++)this.words[c]=this.words[c+o];else this.words[0]=0,this.length=1;var u=0;for(c=this.length-1;c>=0&&(0!==u||c>=i);c--){var h=0|this.words[c];this.words[c]=u<<26-a|h>>>a,u=h&s}return l&&0!==u&&(l.words[l.length++]=u),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},a.prototype.ishrn=function(t,e,r){return n(0===this.negative),this.iushrn(t,e,r)},a.prototype.shln=function(t){return this.clone().ishln(t)},a.prototype.ushln=function(t){return this.clone().iushln(t)},a.prototype.shrn=function(t){return this.clone().ishrn(t)},a.prototype.ushrn=function(t){return this.clone().iushrn(t)},a.prototype.testn=function(t){n(\\\"number\\\"==typeof t&&t>=0);var e=t%26,r=(t-e)/26,i=1<<e;return!(this.length<=r)&&!!(this.words[r]&i)},a.prototype.imaskn=function(t){n(\\\"number\\\"==typeof t&&t>=0);var e=t%26,r=(t-e)/26;if(n(0===this.negative,\\\"imaskn works only with positive numbers\\\"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){var i=67108863^67108863>>>e<<e;this.words[this.length-1]&=i}return this.strip()},a.prototype.maskn=function(t){return this.clone().imaskn(t)},a.prototype.iaddn=function(t){return n(\\\"number\\\"==typeof t),n(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},a.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},a.prototype.isubn=function(t){if(n(\\\"number\\\"==typeof t),n(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},a.prototype.addn=function(t){return this.clone().iaddn(t)},a.prototype.subn=function(t){return this.clone().isubn(t)},a.prototype.iabs=function(){return this.negative=0,this},a.prototype.abs=function(){return this.clone().iabs()},a.prototype._ishlnsubmul=function(t,e,r){var i,a,o=t.length+r;this._expand(o);var s=0;for(i=0;i<t.length;i++){a=(0|this.words[i+r])+s;var l=(0|t.words[i])*e;s=((a-=67108863&l)>>26)-(l/67108864|0),this.words[i+r]=67108863&a}for(;i<this.length-r;i++)s=(a=(0|this.words[i+r])+s)>>26,this.words[i+r]=67108863&a;if(0===s)return this.strip();for(n(-1===s),s=0,i=0;i<this.length;i++)s=(a=-(0|this.words[i])+s)>>26,this.words[i]=67108863&a;return this.negative=1,this.strip()},a.prototype._wordDiv=function(t,e){var r=(this.length,t.length),n=this.clone(),i=t,o=0|i.words[i.length-1];0!==(r=26-this._countBits(o))&&(i=i.ushln(r),n.iushln(r),o=0|i.words[i.length-1]);var s,l=n.length-i.length;if(\\\"mod\\\"!==e){(s=new a(null)).length=l+1,s.words=new Array(s.length);for(var c=0;c<s.length;c++)s.words[c]=0}var u=n.clone()._ishlnsubmul(i,1,l);0===u.negative&&(n=u,s&&(s.words[l]=1));for(var h=l-1;h>=0;h--){var f=67108864*(0|n.words[i.length+h])+(0|n.words[i.length+h-1]);for(f=Math.min(f/o|0,67108863),n._ishlnsubmul(i,f,h);0!==n.negative;)f--,n.negative=0,n._ishlnsubmul(i,1,h),n.isZero()||(n.negative^=1);s&&(s.words[h]=f)}return s&&s.strip(),n.strip(),\\\"div\\\"!==e&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},a.prototype.divmod=function(t,e,r){return n(!t.isZero()),this.isZero()?{div:new a(0),mod:new a(0)}:0!==this.negative&&0===t.negative?(s=this.neg().divmod(t,e),\\\"mod\\\"!==e&&(i=s.div.neg()),\\\"div\\\"!==e&&(o=s.mod.neg(),r&&0!==o.negative&&o.iadd(t)),{div:i,mod:o}):0===this.negative&&0!==t.negative?(s=this.divmod(t.neg(),e),\\\"mod\\\"!==e&&(i=s.div.neg()),{div:i,mod:s.mod}):0!=(this.negative&t.negative)?(s=this.neg().divmod(t.neg(),e),\\\"div\\\"!==e&&(o=s.mod.neg(),r&&0!==o.negative&&o.isub(t)),{div:s.div,mod:o}):t.length>this.length||this.cmp(t)<0?{div:new a(0),mod:this}:1===t.length?\\\"div\\\"===e?{div:this.divn(t.words[0]),mod:null}:\\\"mod\\\"===e?{div:null,mod:new a(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new a(this.modn(t.words[0]))}:this._wordDiv(t,e);var i,o,s},a.prototype.div=function(t){return this.divmod(t,\\\"div\\\",!1).div},a.prototype.mod=function(t){return this.divmod(t,\\\"mod\\\",!1).mod},a.prototype.umod=function(t){return this.divmod(t,\\\"mod\\\",!0).mod},a.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,n=t.ushrn(1),i=t.andln(1),a=r.cmp(n);return a<0||1===i&&0===a?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},a.prototype.modn=function(t){n(t<=67108863);for(var e=(1<<26)%t,r=0,i=this.length-1;i>=0;i--)r=(e*r+(0|this.words[i]))%t;return r},a.prototype.idivn=function(t){n(t<=67108863);for(var e=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*e;this.words[r]=i/t|0,e=i%t}return this.strip()},a.prototype.divn=function(t){return this.clone().idivn(t)},a.prototype.egcd=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new a(1),o=new a(0),s=new a(0),l=new a(1),c=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++c;for(var u=r.clone(),h=e.clone();!e.isZero();){for(var f=0,p=1;0==(e.words[0]&p)&&f<26;++f,p<<=1);if(f>0)for(e.iushrn(f);f-- >0;)(i.isOdd()||o.isOdd())&&(i.iadd(u),o.isub(h)),i.iushrn(1),o.iushrn(1);for(var d=0,g=1;0==(r.words[0]&g)&&d<26;++d,g<<=1);if(d>0)for(r.iushrn(d);d-- >0;)(s.isOdd()||l.isOdd())&&(s.iadd(u),l.isub(h)),s.iushrn(1),l.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(s),o.isub(l)):(r.isub(e),s.isub(i),l.isub(o))}return{a:s,b:l,gcd:r.iushln(c)}},a.prototype._invmp=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i,o=new a(1),s=new a(0),l=r.clone();e.cmpn(1)>0&&r.cmpn(1)>0;){for(var c=0,u=1;0==(e.words[0]&u)&&c<26;++c,u<<=1);if(c>0)for(e.iushrn(c);c-- >0;)o.isOdd()&&o.iadd(l),o.iushrn(1);for(var h=0,f=1;0==(r.words[0]&f)&&h<26;++h,f<<=1);if(h>0)for(r.iushrn(h);h-- >0;)s.isOdd()&&s.iadd(l),s.iushrn(1);e.cmp(r)>=0?(e.isub(r),o.isub(s)):(r.isub(e),s.isub(o))}return(i=0===e.cmpn(1)?o:s).cmpn(0)<0&&i.iadd(t),i},a.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var n=0;e.isEven()&&r.isEven();n++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=e.cmp(r);if(i<0){var a=e;e=r,r=a}else if(0===i||0===r.cmpn(1))break;e.isub(r)}return r.iushln(n)},a.prototype.invm=function(t){return this.egcd(t).a.umod(t)},a.prototype.isEven=function(){return 0==(1&this.words[0])},a.prototype.isOdd=function(){return 1==(1&this.words[0])},a.prototype.andln=function(t){return this.words[0]&t},a.prototype.bincn=function(t){n(\\\"number\\\"==typeof t);var e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return this._expand(r+1),this.words[r]|=i,this;for(var a=i,o=r;0!==a&&o<this.length;o++){var s=0|this.words[o];a=(s+=a)>>>26,s&=67108863,this.words[o]=s}return 0!==a&&(this.words[o]=a,this.length++),this},a.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},a.prototype.cmpn=function(t){var e,r=t<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)e=1;else{r&&(t=-t),n(t<=67108863,\\\"Number is too big\\\");var i=0|this.words[0];e=i===t?0:i<t?-1:1}return 0!==this.negative?0|-e:e},a.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},a.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var n=0|this.words[r],i=0|t.words[r];if(n!==i){n<i?e=-1:n>i&&(e=1);break}}return e},a.prototype.gtn=function(t){return 1===this.cmpn(t)},a.prototype.gt=function(t){return 1===this.cmp(t)},a.prototype.gten=function(t){return this.cmpn(t)>=0},a.prototype.gte=function(t){return this.cmp(t)>=0},a.prototype.ltn=function(t){return-1===this.cmpn(t)},a.prototype.lt=function(t){return-1===this.cmp(t)},a.prototype.lten=function(t){return this.cmpn(t)<=0},a.prototype.lte=function(t){return this.cmp(t)<=0},a.prototype.eqn=function(t){return 0===this.cmpn(t)},a.prototype.eq=function(t){return 0===this.cmp(t)},a.red=function(t){return new w(t)},a.prototype.toRed=function(t){return n(!this.red,\\\"Already a number in reduction context\\\"),n(0===this.negative,\\\"red works only with positives\\\"),t.convertTo(this)._forceRed(t)},a.prototype.fromRed=function(){return n(this.red,\\\"fromRed works only with numbers in reduction context\\\"),this.red.convertFrom(this)},a.prototype._forceRed=function(t){return this.red=t,this},a.prototype.forceRed=function(t){return n(!this.red,\\\"Already a number in reduction context\\\"),this._forceRed(t)},a.prototype.redAdd=function(t){return n(this.red,\\\"redAdd works only with red numbers\\\"),this.red.add(this,t)},a.prototype.redIAdd=function(t){return n(this.red,\\\"redIAdd works only with red numbers\\\"),this.red.iadd(this,t)},a.prototype.redSub=function(t){return n(this.red,\\\"redSub works only with red numbers\\\"),this.red.sub(this,t)},a.prototype.redISub=function(t){return n(this.red,\\\"redISub works only with red numbers\\\"),this.red.isub(this,t)},a.prototype.redShl=function(t){return n(this.red,\\\"redShl works only with red numbers\\\"),this.red.shl(this,t)},a.prototype.redMul=function(t){return n(this.red,\\\"redMul works only with red numbers\\\"),this.red._verify2(this,t),this.red.mul(this,t)},a.prototype.redIMul=function(t){return n(this.red,\\\"redMul works only with red numbers\\\"),this.red._verify2(this,t),this.red.imul(this,t)},a.prototype.redSqr=function(){return n(this.red,\\\"redSqr works only with red numbers\\\"),this.red._verify1(this),this.red.sqr(this)},a.prototype.redISqr=function(){return n(this.red,\\\"redISqr works only with red numbers\\\"),this.red._verify1(this),this.red.isqr(this)},a.prototype.redSqrt=function(){return n(this.red,\\\"redSqrt works only with red numbers\\\"),this.red._verify1(this),this.red.sqrt(this)},a.prototype.redInvm=function(){return n(this.red,\\\"redInvm works only with red numbers\\\"),this.red._verify1(this),this.red.invm(this)},a.prototype.redNeg=function(){return n(this.red,\\\"redNeg works only with red numbers\\\"),this.red._verify1(this),this.red.neg(this)},a.prototype.redPow=function(t){return n(this.red&&!t.red,\\\"redPow(normalNum)\\\"),this.red._verify1(this),this.red.pow(this,t)};var v={k256:null,p224:null,p192:null,p25519:null};function m(t,e){this.name=t,this.p=new a(e,16),this.n=this.p.bitLength(),this.k=new a(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function y(){m.call(this,\\\"k256\\\",\\\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f\\\")}function x(){m.call(this,\\\"p224\\\",\\\"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001\\\")}function b(){m.call(this,\\\"p192\\\",\\\"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff\\\")}function _(){m.call(this,\\\"25519\\\",\\\"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed\\\")}function w(t){if(\\\"string\\\"==typeof t){var e=a._prime(t);this.m=e.p,this.prime=e}else n(t.gtn(1),\\\"modulus must be greater than 1\\\"),this.m=t,this.prime=null}function k(t){w.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new a(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}m.prototype._tmp=function(){var t=new a(null);return t.words=new Array(Math.ceil(this.n/13)),t},m.prototype.ireduce=function(t){var e,r=t;do{this.split(r,this.tmp),e=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(e>this.n);var n=e<this.n?-1:r.ucmp(this.p);return 0===n?(r.words[0]=0,r.length=1):n>0?r.isub(this.p):r.strip(),r},m.prototype.split=function(t,e){t.iushrn(this.n,0,e)},m.prototype.imulK=function(t){return t.imul(this.k)},i(y,m),y.prototype.split=function(t,e){for(var r=Math.min(t.length,9),n=0;n<r;n++)e.words[n]=t.words[n];if(e.length=r,t.length<=9)return t.words[0]=0,void(t.length=1);var i=t.words[9];for(e.words[e.length++]=4194303&i,n=10;n<t.length;n++){var a=0|t.words[n];t.words[n-10]=(4194303&a)<<4|i>>>22,i=a}i>>>=22,t.words[n-10]=i,0===i&&t.length>10?t.length-=10:t.length-=9},y.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var n=0|t.words[r];e+=977*n,t.words[r]=67108863&e,e=64*n+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},i(x,m),i(b,m),i(_,m),_.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var n=19*(0|t.words[r])+e,i=67108863&n;n>>>=26,t.words[r]=i,e=n}return 0!==e&&(t.words[t.length++]=e),t},a._prime=function(t){if(v[t])return v[t];var e;if(\\\"k256\\\"===t)e=new y;else if(\\\"p224\\\"===t)e=new x;else if(\\\"p192\\\"===t)e=new b;else{if(\\\"p25519\\\"!==t)throw new Error(\\\"Unknown prime \\\"+t);e=new _}return v[t]=e,e},w.prototype._verify1=function(t){n(0===t.negative,\\\"red works only with positives\\\"),n(t.red,\\\"red works only with red numbers\\\")},w.prototype._verify2=function(t,e){n(0==(t.negative|e.negative),\\\"red works only with positives\\\"),n(t.red&&t.red===e.red,\\\"red works only with red numbers\\\")},w.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},w.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},w.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},w.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},w.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},w.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},w.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},w.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},w.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},w.prototype.isqr=function(t){return this.imul(t,t.clone())},w.prototype.sqr=function(t){return this.mul(t,t)},w.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(n(e%2==1),3===e){var r=this.m.add(new a(1)).iushrn(2);return this.pow(t,r)}for(var i=this.m.subn(1),o=0;!i.isZero()&&0===i.andln(1);)o++,i.iushrn(1);n(!i.isZero());var s=new a(1).toRed(this),l=s.redNeg(),c=this.m.subn(1).iushrn(1),u=this.m.bitLength();for(u=new a(2*u*u).toRed(this);0!==this.pow(u,c).cmp(l);)u.redIAdd(l);for(var h=this.pow(u,i),f=this.pow(t,i.addn(1).iushrn(1)),p=this.pow(t,i),d=o;0!==p.cmp(s);){for(var g=p,v=0;0!==g.cmp(s);v++)g=g.redSqr();n(v<d);var m=this.pow(h,new a(1).iushln(d-v-1));f=f.redMul(m),h=m.redSqr(),p=p.redMul(h),d=v}return f},w.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},w.prototype.pow=function(t,e){if(e.isZero())return new a(1).toRed(this);if(0===e.cmpn(1))return t.clone();var r=new Array(16);r[0]=new a(1).toRed(this),r[1]=t;for(var n=2;n<r.length;n++)r[n]=this.mul(r[n-1],t);var i=r[0],o=0,s=0,l=e.bitLength()%26;for(0===l&&(l=26),n=e.length-1;n>=0;n--){for(var c=e.words[n],u=l-1;u>=0;u--){var h=c>>u&1;i!==r[0]&&(i=this.sqr(i)),0!==h||0!==o?(o<<=1,o|=h,(4===++s||0===n&&0===u)&&(i=this.mul(i,r[o]),s=0,o=0)):s=0}l=26}return i},w.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},w.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},a.mont=function(t){return new k(t)},i(k,w),k.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},k.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},k.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},k.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new a(0)._forceRed(this);var r=t.mul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},k.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}(\\\"undefined\\\"==typeof e||e,this)},{buffer:103}],95:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){var e,r,n,i=t.length,a=0;for(e=0;e<i;++e)a+=t[e].length;var o=new Array(a),s=0;for(e=0;e<i;++e){var l=t[e],c=l.length;for(r=0;r<c;++r){var u=o[s++]=new Array(c-1),h=0;for(n=0;n<c;++n)n!==r&&(u[h++]=l[n]);if(1&r){var f=u[1];u[1]=u[0],u[0]=f}}}return o}},{}],96:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r){switch(arguments.length){case 1:return n=[],c(i=t,i,u,!0),n;case 2:return\\\"function\\\"==typeof e?c(t,t,e,!0):function(t,e){return n=[],c(t,e,u,!1),n}(t,e);case 3:return c(t,e,r,!1);default:throw new Error(\\\"box-intersect: Invalid arguments\\\")}var i};var n,i=t(\\\"typedarray-pool\\\"),a=t(\\\"./lib/sweep\\\"),o=t(\\\"./lib/intersect\\\");function s(t,e){for(var r=0;r<t;++r)if(!(e[r]<=e[r+t]))return!0;return!1}function l(t,e,r,n){for(var i=0,a=0,o=0,l=t.length;o<l;++o){var c=t[o];if(!s(e,c)){for(var u=0;u<2*e;++u)r[i++]=c[u];n[a++]=o}}return a}function c(t,e,r,n){var s=t.length,c=e.length;if(!(s<=0||c<=0)){var u=t[0].length>>>1;if(!(u<=0)){var h,f=i.mallocDouble(2*u*s),p=i.mallocInt32(s);if((s=l(t,u,f,p))>0){if(1===u&&n)a.init(s),h=a.sweepComplete(u,r,0,s,f,p,0,s,f,p);else{var d=i.mallocDouble(2*u*c),g=i.mallocInt32(c);(c=l(e,u,d,g))>0&&(a.init(s+c),h=1===u?a.sweepBipartite(u,r,0,s,f,p,0,c,d,g):o(u,r,n,s,f,p,c,d,g),i.free(d),i.free(g))}i.free(f),i.free(p)}return h}}}function u(t,e){n.push([t,e])}},{\\\"./lib/intersect\\\":98,\\\"./lib/sweep\\\":102,\\\"typedarray-pool\\\":545}],97:[function(t,e,r){\\\"use strict\\\";var n=\\\"d\\\",i=\\\"ax\\\",a=\\\"vv\\\",o=\\\"fp\\\",s=\\\"es\\\",l=\\\"rs\\\",c=\\\"re\\\",u=\\\"rb\\\",h=\\\"ri\\\",f=\\\"rp\\\",p=\\\"bs\\\",d=\\\"be\\\",g=\\\"bb\\\",v=\\\"bi\\\",m=\\\"bp\\\",y=\\\"rv\\\",x=\\\"Q\\\",b=[n,i,a,l,c,u,h,p,d,g,v];function _(t){var e=\\\"bruteForce\\\"+(t?\\\"Full\\\":\\\"Partial\\\"),r=[],_=b.slice();t||_.splice(3,0,o);var w=[\\\"function \\\"+e+\\\"(\\\"+_.join()+\\\"){\\\"];function k(e,o){var _=function(t,e,r){var o=\\\"bruteForce\\\"+(t?\\\"Red\\\":\\\"Blue\\\")+(e?\\\"Flip\\\":\\\"\\\")+(r?\\\"Full\\\":\\\"\\\"),_=[\\\"function \\\",o,\\\"(\\\",b.join(),\\\"){\\\",\\\"var \\\",s,\\\"=2*\\\",n,\\\";\\\"],w=\\\"for(var i=\\\"+l+\\\",\\\"+f+\\\"=\\\"+s+\\\"*\\\"+l+\\\";i<\\\"+c+\\\";++i,\\\"+f+\\\"+=\\\"+s+\\\"){var x0=\\\"+u+\\\"[\\\"+i+\\\"+\\\"+f+\\\"],x1=\\\"+u+\\\"[\\\"+i+\\\"+\\\"+f+\\\"+\\\"+n+\\\"],xi=\\\"+h+\\\"[i];\\\",k=\\\"for(var j=\\\"+p+\\\",\\\"+m+\\\"=\\\"+s+\\\"*\\\"+p+\\\";j<\\\"+d+\\\";++j,\\\"+m+\\\"+=\\\"+s+\\\"){var y0=\\\"+g+\\\"[\\\"+i+\\\"+\\\"+m+\\\"],\\\"+(r?\\\"y1=\\\"+g+\\\"[\\\"+i+\\\"+\\\"+m+\\\"+\\\"+n+\\\"],\\\":\\\"\\\")+\\\"yi=\\\"+v+\\\"[j];\\\";return t?_.push(w,x,\\\":\\\",k):_.push(k,x,\\\":\\\",w),r?_.push(\\\"if(y1<x0||x1<y0)continue;\\\"):e?_.push(\\\"if(y0<=x0||x1<y0)continue;\\\"):_.push(\\\"if(y0<x0||x1<y0)continue;\\\"),_.push(\\\"for(var k=\\\"+i+\\\"+1;k<\\\"+n+\\\";++k){var r0=\\\"+u+\\\"[k+\\\"+f+\\\"],r1=\\\"+u+\\\"[k+\\\"+n+\\\"+\\\"+f+\\\"],b0=\\\"+g+\\\"[k+\\\"+m+\\\"],b1=\\\"+g+\\\"[k+\\\"+n+\\\"+\\\"+m+\\\"];if(r1<b0||b1<r0)continue \\\"+x+\\\";}var \\\"+y+\\\"=\\\"+a+\\\"(\\\"),e?_.push(\\\"yi,xi\\\"):_.push(\\\"xi,yi\\\"),_.push(\\\");if(\\\"+y+\\\"!==void 0)return \\\"+y+\\\";}}}\\\"),{name:o,code:_.join(\\\"\\\")}}(e,o,t);r.push(_.code),w.push(\\\"return \\\"+_.name+\\\"(\\\"+b.join()+\\\");\\\")}w.push(\\\"if(\\\"+c+\\\"-\\\"+l+\\\">\\\"+d+\\\"-\\\"+p+\\\"){\\\"),t?(k(!0,!1),w.push(\\\"}else{\\\"),k(!1,!1)):(w.push(\\\"if(\\\"+o+\\\"){\\\"),k(!0,!0),w.push(\\\"}else{\\\"),k(!0,!1),w.push(\\\"}}else{if(\\\"+o+\\\"){\\\"),k(!1,!0),w.push(\\\"}else{\\\"),k(!1,!1),w.push(\\\"}\\\")),w.push(\\\"}}return \\\"+e);var T=r.join(\\\"\\\")+w.join(\\\"\\\");return new Function(T)()}r.partial=_(!1),r.full=_(!0)},{}],98:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,a,u,S,E,C,L){!function(t,e){var r=8*i.log2(e+1)*(t+1)|0,a=i.nextPow2(b*r);w.length<a&&(n.free(w),w=n.mallocInt32(a));var o=i.nextPow2(_*r);k<o&&(n.free(k),k=n.mallocDouble(o))}(t,a+E);var P,O=0,z=2*t;T(O++,0,0,a,0,E,r?16:0,-1/0,1/0),r||T(O++,0,0,E,0,a,1,-1/0,1/0);for(;O>0;){var I=(O-=1)*b,D=w[I],R=w[I+1],F=w[I+2],B=w[I+3],N=w[I+4],j=w[I+5],U=O*_,V=k[U],q=k[U+1],H=1&j,G=!!(16&j),Y=u,W=S,X=C,Z=L;if(H&&(Y=C,W=L,X=u,Z=S),!(2&j&&(F=v(t,D,R,F,Y,W,q),R>=F)||4&j&&(R=m(t,D,R,F,Y,W,V))>=F)){var J=F-R,K=N-B;if(G){if(t*J*(J+K)<p){if(void 0!==(P=l.scanComplete(t,D,e,R,F,Y,W,B,N,X,Z)))return P;continue}}else{if(t*Math.min(J,K)<h){if(void 0!==(P=o(t,D,e,H,R,F,Y,W,B,N,X,Z)))return P;continue}if(t*J*K<f){if(void 0!==(P=l.scanBipartite(t,D,e,H,R,F,Y,W,B,N,X,Z)))return P;continue}}var $=d(t,D,R,F,Y,W,V,q);if(R<$)if(t*($-R)<h){if(void 0!==(P=s(t,D+1,e,R,$,Y,W,B,N,X,Z)))return P}else if(D===t-2){if(void 0!==(P=H?l.sweepBipartite(t,e,B,N,X,Z,R,$,Y,W):l.sweepBipartite(t,e,R,$,Y,W,B,N,X,Z)))return P}else T(O++,D+1,R,$,B,N,H,-1/0,1/0),T(O++,D+1,B,N,R,$,1^H,-1/0,1/0);if($<F){var Q=c(t,D,B,N,X,Z),tt=X[z*Q+D],et=g(t,D,Q,N,X,Z,tt);if(et<N&&T(O++,D,$,F,et,N,(4|H)+(G?16:0),tt,q),B<Q&&T(O++,D,$,F,B,Q,(2|H)+(G?16:0),V,tt),Q+1===et){if(void 0!==(P=G?M(t,D,e,$,F,Y,W,Q,X,Z[Q]):A(t,D,e,H,$,F,Y,W,Q,X,Z[Q])))return P}else if(Q<et){var rt;if(G){if(rt=y(t,D,$,F,Y,W,tt),$<rt){var nt=g(t,D,$,rt,Y,W,tt);if(D===t-2){if($<nt&&void 0!==(P=l.sweepComplete(t,e,$,nt,Y,W,Q,et,X,Z)))return P;if(nt<rt&&void 0!==(P=l.sweepBipartite(t,e,nt,rt,Y,W,Q,et,X,Z)))return P}else $<nt&&T(O++,D+1,$,nt,Q,et,16,-1/0,1/0),nt<rt&&(T(O++,D+1,nt,rt,Q,et,0,-1/0,1/0),T(O++,D+1,Q,et,nt,rt,1,-1/0,1/0))}}else rt=H?x(t,D,$,F,Y,W,tt):y(t,D,$,F,Y,W,tt),$<rt&&(D===t-2?P=H?l.sweepBipartite(t,e,Q,et,X,Z,$,rt,Y,W):l.sweepBipartite(t,e,$,rt,Y,W,Q,et,X,Z):(T(O++,D+1,$,rt,Q,et,H,-1/0,1/0),T(O++,D+1,Q,et,$,rt,1^H,-1/0,1/0)))}}}}};var n=t(\\\"typedarray-pool\\\"),i=t(\\\"bit-twiddle\\\"),a=t(\\\"./brute\\\"),o=a.partial,s=a.full,l=t(\\\"./sweep\\\"),c=t(\\\"./median\\\"),u=t(\\\"./partition\\\"),h=128,f=1<<22,p=1<<22,d=u(\\\"!(lo>=p0)&&!(p1>=hi)\\\",[\\\"p0\\\",\\\"p1\\\"]),g=u(\\\"lo===p0\\\",[\\\"p0\\\"]),v=u(\\\"lo<p0\\\",[\\\"p0\\\"]),m=u(\\\"hi<=p0\\\",[\\\"p0\\\"]),y=u(\\\"lo<=p0&&p0<=hi\\\",[\\\"p0\\\"]),x=u(\\\"lo<p0&&p0<=hi\\\",[\\\"p0\\\"]),b=6,_=2,w=n.mallocInt32(1024),k=n.mallocDouble(1024);function T(t,e,r,n,i,a,o,s,l){var c=b*t;w[c]=e,w[c+1]=r,w[c+2]=n,w[c+3]=i,w[c+4]=a,w[c+5]=o;var u=_*t;k[u]=s,k[u+1]=l}function A(t,e,r,n,i,a,o,s,l,c,u){var h=2*t,f=l*h,p=c[f+e];t:for(var d=i,g=i*h;d<a;++d,g+=h){var v=o[g+e],m=o[g+e+t];if(!(p<v||m<p)&&(!n||p!==v)){for(var y,x=s[d],b=e+1;b<t;++b){v=o[g+b],m=o[g+b+t];var _=c[f+b],w=c[f+b+t];if(m<_||w<v)continue t}if(void 0!==(y=n?r(u,x):r(x,u)))return y}}}function M(t,e,r,n,i,a,o,s,l,c){var u=2*t,h=s*u,f=l[h+e];t:for(var p=n,d=n*u;p<i;++p,d+=u){var g=o[p];if(g!==c){var v=a[d+e],m=a[d+e+t];if(!(f<v||m<f)){for(var y=e+1;y<t;++y){v=a[d+y],m=a[d+y+t];var x=l[h+y],b=l[h+y+t];if(m<x||b<v)continue t}var _=r(g,c);if(void 0!==_)return _}}}}},{\\\"./brute\\\":97,\\\"./median\\\":99,\\\"./partition\\\":100,\\\"./sweep\\\":102,\\\"bit-twiddle\\\":92,\\\"typedarray-pool\\\":545}],99:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,o,s,l){if(o<=r+1)return r;var c=r,u=o,h=o+r>>>1,f=2*t,p=h,d=s[f*h+e];for(;c<u;){if(u-c<i){a(t,e,c,u,s,l),d=s[f*h+e];break}var g=u-c,v=Math.random()*g+c|0,m=s[f*v+e],y=Math.random()*g+c|0,x=s[f*y+e],b=Math.random()*g+c|0,_=s[f*b+e];m<=x?_>=x?(p=y,d=x):m>=_?(p=v,d=m):(p=b,d=_):x>=_?(p=y,d=x):_>=m?(p=v,d=m):(p=b,d=_);for(var w=f*(u-1),k=f*p,T=0;T<f;++T,++w,++k){var A=s[w];s[w]=s[k],s[k]=A}var M=l[u-1];l[u-1]=l[p],l[p]=M,p=n(t,e,c,u-1,s,l,d);for(var w=f*(u-1),k=f*p,T=0;T<f;++T,++w,++k){var A=s[w];s[w]=s[k],s[k]=A}var M=l[u-1];if(l[u-1]=l[p],l[p]=M,h<p){for(u=p-1;c<u&&s[f*(u-1)+e]===d;)u-=1;u+=1}else{if(!(p<h))break;for(c=p+1;c<u&&s[f*c+e]===d;)c+=1}}return n(t,e,r,h,s,l,s[f*h+e])};var n=t(\\\"./partition\\\")(\\\"lo<p0\\\",[\\\"p0\\\"]),i=8;function a(t,e,r,n,i,a){for(var o=2*t,s=o*(r+1)+e,l=r+1;l<n;++l,s+=o)for(var c=i[s],u=l,h=o*(l-1);u>r&&i[h+e]>c;--u,h-=o){for(var f=h,p=h+o,d=0;d<o;++d,++f,++p){var g=i[f];i[f]=i[p],i[p]=g}var v=a[u];a[u]=a[u-1],a[u-1]=v}}},{\\\"./partition\\\":100}],100:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){var r=\\\"abcdef\\\".split(\\\"\\\").concat(e),i=[];t.indexOf(\\\"lo\\\")>=0&&i.push(\\\"lo=e[k+n]\\\");t.indexOf(\\\"hi\\\")>=0&&i.push(\\\"hi=e[k+o]\\\");return r.push(n.replace(\\\"_\\\",i.join()).replace(\\\"$\\\",t)),Function.apply(void 0,r)};var n=\\\"for(var j=2*a,k=j*c,l=k,m=c,n=b,o=a+b,p=c;d>p;++p,k+=j){var _;if($)if(m===p)m+=1,l+=j;else{for(var s=0;j>s;++s){var t=e[k+s];e[k+s]=e[l],e[l++]=t}var u=f[p];f[p]=f[m],f[m++]=u}}return m\\\"},{}],101:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){e<=4*n?i(0,e-1,t):function t(e,r,h){var f=(r-e+1)/6|0,p=e+f,d=r-f,g=e+r>>1,v=g-f,m=g+f,y=p,x=v,b=g,_=m,w=d,k=e+1,T=r-1,A=0;c(y,x,h)&&(A=y,y=x,x=A);c(_,w,h)&&(A=_,_=w,w=A);c(y,b,h)&&(A=y,y=b,b=A);c(x,b,h)&&(A=x,x=b,b=A);c(y,_,h)&&(A=y,y=_,_=A);c(b,_,h)&&(A=b,b=_,_=A);c(x,w,h)&&(A=x,x=w,w=A);c(x,b,h)&&(A=x,x=b,b=A);c(_,w,h)&&(A=_,_=w,w=A);var M=h[2*x];var S=h[2*x+1];var E=h[2*_];var C=h[2*_+1];var L=2*y;var P=2*b;var O=2*w;var z=2*p;var I=2*g;var D=2*d;for(var R=0;R<2;++R){var F=h[L+R],B=h[P+R],N=h[O+R];h[z+R]=F,h[I+R]=B,h[D+R]=N}o(v,e,h);o(m,r,h);for(var j=k;j<=T;++j)if(u(j,M,S,h))j!==k&&a(j,k,h),++k;else if(!u(j,E,C,h))for(;;){if(u(T,E,C,h)){u(T,M,S,h)?(s(j,k,T,h),++k,--T):(a(j,T,h),--T);break}if(--T<j)break}l(e,k-1,M,S,h);l(r,T+1,E,C,h);k-2-e<=n?i(e,k-2,h):t(e,k-2,h);r-(T+2)<=n?i(T+2,r,h):t(T+2,r,h);T-k<=n?i(k,T,h):t(k,T,h)}(0,e-1,t)};var n=32;function i(t,e,r){for(var n=2*(t+1),i=t+1;i<=e;++i){for(var a=r[n++],o=r[n++],s=i,l=n-2;s-- >t;){var c=r[l-2],u=r[l-1];if(c<a)break;if(c===a&&u<o)break;r[l]=c,r[l+1]=u,l-=2}r[l]=a,r[l+1]=o}}function a(t,e,r){e*=2;var n=r[t*=2],i=r[t+1];r[t]=r[e],r[t+1]=r[e+1],r[e]=n,r[e+1]=i}function o(t,e,r){e*=2,r[t*=2]=r[e],r[t+1]=r[e+1]}function s(t,e,r,n){e*=2,r*=2;var i=n[t*=2],a=n[t+1];n[t]=n[e],n[t+1]=n[e+1],n[e]=n[r],n[e+1]=n[r+1],n[r]=i,n[r+1]=a}function l(t,e,r,n,i){e*=2,i[t*=2]=i[e],i[e]=r,i[t+1]=i[e+1],i[e+1]=n}function c(t,e,r){e*=2;var n=r[t*=2],i=r[e];return!(n<i)&&(n!==i||r[t+1]>r[e+1])}function u(t,e,r,n){var i=n[t*=2];return i<e||i===e&&n[t+1]<r}},{}],102:[function(t,e,r){\\\"use strict\\\";e.exports={init:function(t){var e=i.nextPow2(t);s.length<e&&(n.free(s),s=n.mallocInt32(e));l.length<e&&(n.free(l),l=n.mallocInt32(e));c.length<e&&(n.free(c),c=n.mallocInt32(e));u.length<e&&(n.free(u),u=n.mallocInt32(e));h.length<e&&(n.free(h),h=n.mallocInt32(e));f.length<e&&(n.free(f),f=n.mallocInt32(e));var r=8*e;p.length<r&&(n.free(p),p=n.mallocDouble(r))},sweepBipartite:function(t,e,r,n,i,h,f,v,m,y){for(var x=0,b=2*t,_=t-1,w=b-1,k=r;k<n;++k){var T=h[k],A=b*k;p[x++]=i[A+_],p[x++]=-(T+1),p[x++]=i[A+w],p[x++]=T}for(var k=f;k<v;++k){var T=y[k]+o,M=b*k;p[x++]=m[M+_],p[x++]=-T,p[x++]=m[M+w],p[x++]=T}var S=x>>>1;a(p,S);for(var E=0,C=0,k=0;k<S;++k){var L=0|p[2*k+1];if(L>=o)d(c,u,C--,L=L-o|0);else if(L>=0)d(s,l,E--,L);else if(L<=-o){L=-L-o|0;for(var P=0;P<E;++P){var O=e(s[P],L);if(void 0!==O)return O}g(c,u,C++,L)}else{L=-L-1|0;for(var P=0;P<C;++P){var O=e(L,c[P]);if(void 0!==O)return O}g(s,l,E++,L)}}},sweepComplete:function(t,e,r,n,i,o,v,m,y,x){for(var b=0,_=2*t,w=t-1,k=_-1,T=r;T<n;++T){var A=o[T]+1<<1,M=_*T;p[b++]=i[M+w],p[b++]=-A,p[b++]=i[M+k],p[b++]=A}for(var T=v;T<m;++T){var A=x[T]+1<<1,S=_*T;p[b++]=y[S+w],p[b++]=1|-A,p[b++]=y[S+k],p[b++]=1|A}var E=b>>>1;a(p,E);for(var C=0,L=0,P=0,T=0;T<E;++T){var O=0|p[2*T+1],z=1&O;if(T<E-1&&O>>1==p[2*T+3]>>1&&(z=2,T+=1),O<0){for(var I=-(O>>1)-1,D=0;D<P;++D){var R=e(h[D],I);if(void 0!==R)return R}if(0!==z)for(var D=0;D<C;++D){var R=e(s[D],I);if(void 0!==R)return R}if(1!==z)for(var D=0;D<L;++D){var R=e(c[D],I);if(void 0!==R)return R}0===z?g(s,l,C++,I):1===z?g(c,u,L++,I):2===z&&g(h,f,P++,I)}else{var I=(O>>1)-1;0===z?d(s,l,C--,I):1===z?d(c,u,L--,I):2===z&&d(h,f,P--,I)}}},scanBipartite:function(t,e,r,n,i,c,u,h,f,v,m,y){var x=0,b=2*t,_=e,w=e+t,k=1,T=1;n?T=o:k=o;for(var A=i;A<c;++A){var M=A+k,S=b*A;p[x++]=u[S+_],p[x++]=-M,p[x++]=u[S+w],p[x++]=M}for(var A=f;A<v;++A){var M=A+T,E=b*A;p[x++]=m[E+_],p[x++]=-M}var C=x>>>1;a(p,C);for(var L=0,A=0;A<C;++A){var P=0|p[2*A+1];if(P<0){var M=-P,O=!1;if(M>=o?(O=!n,M-=o):(O=!!n,M-=1),O)g(s,l,L++,M);else{var z=y[M],I=b*M,D=m[I+e+1],R=m[I+e+1+t];t:for(var F=0;F<L;++F){var B=s[F],N=b*B;if(!(R<u[N+e+1]||u[N+e+1+t]<D)){for(var j=e+2;j<t;++j)if(m[I+j+t]<u[N+j]||u[N+j+t]<m[I+j])continue t;var U,V=h[B];if(void 0!==(U=n?r(z,V):r(V,z)))return U}}}}else d(s,l,L--,P-k)}},scanComplete:function(t,e,r,n,i,l,c,u,h,f,d){for(var g=0,v=2*t,m=e,y=e+t,x=n;x<i;++x){var b=x+o,_=v*x;p[g++]=l[_+m],p[g++]=-b,p[g++]=l[_+y],p[g++]=b}for(var x=u;x<h;++x){var b=x+1,w=v*x;p[g++]=f[w+m],p[g++]=-b}var k=g>>>1;a(p,k);for(var T=0,x=0;x<k;++x){var A=0|p[2*x+1];if(A<0){var b=-A;if(b>=o)s[T++]=b-o;else{var M=d[b-=1],S=v*b,E=f[S+e+1],C=f[S+e+1+t];t:for(var L=0;L<T;++L){var P=s[L],O=c[P];if(O===M)break;var z=v*P;if(!(C<l[z+e+1]||l[z+e+1+t]<E)){for(var I=e+2;I<t;++I)if(f[S+I+t]<l[z+I]||l[z+I+t]<f[S+I])continue t;var D=r(O,M);if(void 0!==D)return D}}}}else{for(var b=A-o,L=T-1;L>=0;--L)if(s[L]===b){for(var I=L+1;I<T;++I)s[I-1]=s[I];break}--T}}}};var n=t(\\\"typedarray-pool\\\"),i=t(\\\"bit-twiddle\\\"),a=t(\\\"./sort\\\"),o=1<<28,s=n.mallocInt32(1024),l=n.mallocInt32(1024),c=n.mallocInt32(1024),u=n.mallocInt32(1024),h=n.mallocInt32(1024),f=n.mallocInt32(1024),p=n.mallocDouble(8192);function d(t,e,r,n){var i=e[n],a=t[r-1];t[i]=a,e[a]=i}function g(t,e,r,n){t[r]=n,e[n]=r}},{\\\"./sort\\\":101,\\\"bit-twiddle\\\":92,\\\"typedarray-pool\\\":545}],103:[function(t,e,r){},{}],104:[function(t,e,r){var n=Object.create||function(t){var e=function(){};return e.prototype=t,new e},i=Object.keys||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.push(r);return r},a=Function.prototype.bind||function(t){var e=this;return function(){return e.apply(t,arguments)}};function o(){this._events&&Object.prototype.hasOwnProperty.call(this,\\\"_events\\\")||(this._events=n(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0}e.exports=o,o.EventEmitter=o,o.prototype._events=void 0,o.prototype._maxListeners=void 0;var s,l=10;try{var c={};Object.defineProperty&&Object.defineProperty(c,\\\"x\\\",{value:0}),s=0===c.x}catch(t){s=!1}function u(t){return void 0===t._maxListeners?o.defaultMaxListeners:t._maxListeners}function h(t,e,r,i){var a,o,s;if(\\\"function\\\"!=typeof r)throw new TypeError('\\\"listener\\\" argument must be a function');if((o=t._events)?(o.newListener&&(t.emit(\\\"newListener\\\",e,r.listener?r.listener:r),o=t._events),s=o[e]):(o=t._events=n(null),t._eventsCount=0),s){if(\\\"function\\\"==typeof s?s=o[e]=i?[r,s]:[s,r]:i?s.unshift(r):s.push(r),!s.warned&&(a=u(t))&&a>0&&s.length>a){s.warned=!0;var l=new Error(\\\"Possible EventEmitter memory leak detected. \\\"+s.length+' \\\"'+String(e)+'\\\" listeners added. Use emitter.setMaxListeners() to increase limit.');l.name=\\\"MaxListenersExceededWarning\\\",l.emitter=t,l.type=e,l.count=s.length,\\\"object\\\"==typeof console&&console.warn&&console.warn(\\\"%s: %s\\\",l.name,l.message)}}else s=o[e]=r,++t._eventsCount;return t}function f(){if(!this.fired)switch(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:for(var t=new Array(arguments.length),e=0;e<t.length;++e)t[e]=arguments[e];this.listener.apply(this.target,t)}}function p(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},i=a.call(f,n);return i.listener=r,n.wrapFn=i,i}function d(t,e,r){var n=t._events;if(!n)return[];var i=n[e];return i?\\\"function\\\"==typeof i?r?[i.listener||i]:[i]:r?function(t){for(var e=new Array(t.length),r=0;r<e.length;++r)e[r]=t[r].listener||t[r];return e}(i):v(i,i.length):[]}function g(t){var e=this._events;if(e){var r=e[t];if(\\\"function\\\"==typeof r)return 1;if(r)return r.length}return 0}function v(t,e){for(var r=new Array(e),n=0;n<e;++n)r[n]=t[n];return r}s?Object.defineProperty(o,\\\"defaultMaxListeners\\\",{enumerable:!0,get:function(){return l},set:function(t){if(\\\"number\\\"!=typeof t||t<0||t!=t)throw new TypeError('\\\"defaultMaxListeners\\\" must be a positive number');l=t}}):o.defaultMaxListeners=l,o.prototype.setMaxListeners=function(t){if(\\\"number\\\"!=typeof t||t<0||isNaN(t))throw new TypeError('\\\"n\\\" argument must be a positive number');return this._maxListeners=t,this},o.prototype.getMaxListeners=function(){return u(this)},o.prototype.emit=function(t){var e,r,n,i,a,o,s=\\\"error\\\"===t;if(o=this._events)s=s&&null==o.error;else if(!s)return!1;if(s){if(arguments.length>1&&(e=arguments[1]),e instanceof Error)throw e;var l=new Error('Unhandled \\\"error\\\" event. ('+e+\\\")\\\");throw l.context=e,l}if(!(r=o[t]))return!1;var c=\\\"function\\\"==typeof r;switch(n=arguments.length){case 1:!function(t,e,r){if(e)t.call(r);else for(var n=t.length,i=v(t,n),a=0;a<n;++a)i[a].call(r)}(r,c,this);break;case 2:!function(t,e,r,n){if(e)t.call(r,n);else for(var i=t.length,a=v(t,i),o=0;o<i;++o)a[o].call(r,n)}(r,c,this,arguments[1]);break;case 3:!function(t,e,r,n,i){if(e)t.call(r,n,i);else for(var a=t.length,o=v(t,a),s=0;s<a;++s)o[s].call(r,n,i)}(r,c,this,arguments[1],arguments[2]);break;case 4:!function(t,e,r,n,i,a){if(e)t.call(r,n,i,a);else for(var o=t.length,s=v(t,o),l=0;l<o;++l)s[l].call(r,n,i,a)}(r,c,this,arguments[1],arguments[2],arguments[3]);break;default:for(i=new Array(n-1),a=1;a<n;a++)i[a-1]=arguments[a];!function(t,e,r,n){if(e)t.apply(r,n);else for(var i=t.length,a=v(t,i),o=0;o<i;++o)a[o].apply(r,n)}(r,c,this,i)}return!0},o.prototype.addListener=function(t,e){return h(this,t,e,!1)},o.prototype.on=o.prototype.addListener,o.prototype.prependListener=function(t,e){return h(this,t,e,!0)},o.prototype.once=function(t,e){if(\\\"function\\\"!=typeof e)throw new TypeError('\\\"listener\\\" argument must be a function');return this.on(t,p(this,t,e)),this},o.prototype.prependOnceListener=function(t,e){if(\\\"function\\\"!=typeof e)throw new TypeError('\\\"listener\\\" argument must be a function');return this.prependListener(t,p(this,t,e)),this},o.prototype.removeListener=function(t,e){var r,i,a,o,s;if(\\\"function\\\"!=typeof e)throw new TypeError('\\\"listener\\\" argument must be a function');if(!(i=this._events))return this;if(!(r=i[t]))return this;if(r===e||r.listener===e)0==--this._eventsCount?this._events=n(null):(delete i[t],i.removeListener&&this.emit(\\\"removeListener\\\",t,r.listener||e));else if(\\\"function\\\"!=typeof r){for(a=-1,o=r.length-1;o>=0;o--)if(r[o]===e||r[o].listener===e){s=r[o].listener,a=o;break}if(a<0)return this;0===a?r.shift():function(t,e){for(var r=e,n=r+1,i=t.length;n<i;r+=1,n+=1)t[r]=t[n];t.pop()}(r,a),1===r.length&&(i[t]=r[0]),i.removeListener&&this.emit(\\\"removeListener\\\",t,s||e)}return this},o.prototype.removeAllListeners=function(t){var e,r,a;if(!(r=this._events))return this;if(!r.removeListener)return 0===arguments.length?(this._events=n(null),this._eventsCount=0):r[t]&&(0==--this._eventsCount?this._events=n(null):delete r[t]),this;if(0===arguments.length){var o,s=i(r);for(a=0;a<s.length;++a)\\\"removeListener\\\"!==(o=s[a])&&this.removeAllListeners(o);return this.removeAllListeners(\\\"removeListener\\\"),this._events=n(null),this._eventsCount=0,this}if(\\\"function\\\"==typeof(e=r[t]))this.removeListener(t,e);else if(e)for(a=e.length-1;a>=0;a--)this.removeListener(t,e[a]);return this},o.prototype.listeners=function(t){return d(this,t,!0)},o.prototype.rawListeners=function(t){return d(this,t,!1)},o.listenerCount=function(t,e){return\\\"function\\\"==typeof t.listenerCount?t.listenerCount(e):g.call(t,e)},o.prototype.listenerCount=g,o.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]}},{}],105:[function(t,e,r){(function(e){\\\"use strict\\\";var n=t(\\\"base64-js\\\"),i=t(\\\"ieee754\\\");r.Buffer=e,r.SlowBuffer=function(t){+t!=t&&(t=0);return e.alloc(+t)},r.INSPECT_MAX_BYTES=50;var a=2147483647;function o(t){if(t>a)throw new RangeError('The value \\\"'+t+'\\\" is invalid for option \\\"size\\\"');var r=new Uint8Array(t);return r.__proto__=e.prototype,r}function e(t,e,r){if(\\\"number\\\"==typeof t){if(\\\"string\\\"==typeof e)throw new TypeError('The \\\"string\\\" argument must be of type string. Received type number');return c(t)}return s(t,e,r)}function s(t,r,n){if(\\\"string\\\"==typeof t)return function(t,r){\\\"string\\\"==typeof r&&\\\"\\\"!==r||(r=\\\"utf8\\\");if(!e.isEncoding(r))throw new TypeError(\\\"Unknown encoding: \\\"+r);var n=0|f(t,r),i=o(n),a=i.write(t,r);a!==n&&(i=i.slice(0,a));return i}(t,r);if(ArrayBuffer.isView(t))return u(t);if(null==t)throw TypeError(\\\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \\\"+typeof t);if(N(t,ArrayBuffer)||t&&N(t.buffer,ArrayBuffer))return function(t,r,n){if(r<0||t.byteLength<r)throw new RangeError('\\\"offset\\\" is outside of buffer bounds');if(t.byteLength<r+(n||0))throw new RangeError('\\\"length\\\" is outside of buffer bounds');var i;i=void 0===r&&void 0===n?new Uint8Array(t):void 0===n?new Uint8Array(t,r):new Uint8Array(t,r,n);return i.__proto__=e.prototype,i}(t,r,n);if(\\\"number\\\"==typeof t)throw new TypeError('The \\\"value\\\" argument must not be of type number. Received type number');var i=t.valueOf&&t.valueOf();if(null!=i&&i!==t)return e.from(i,r,n);var a=function(t){if(e.isBuffer(t)){var r=0|h(t.length),n=o(r);return 0===n.length?n:(t.copy(n,0,0,r),n)}if(void 0!==t.length)return\\\"number\\\"!=typeof t.length||j(t.length)?o(0):u(t);if(\\\"Buffer\\\"===t.type&&Array.isArray(t.data))return u(t.data)}(t);if(a)return a;if(\\\"undefined\\\"!=typeof Symbol&&null!=Symbol.toPrimitive&&\\\"function\\\"==typeof t[Symbol.toPrimitive])return e.from(t[Symbol.toPrimitive](\\\"string\\\"),r,n);throw new TypeError(\\\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \\\"+typeof t)}function l(t){if(\\\"number\\\"!=typeof t)throw new TypeError('\\\"size\\\" argument must be of type number');if(t<0)throw new RangeError('The value \\\"'+t+'\\\" is invalid for option \\\"size\\\"')}function c(t){return l(t),o(t<0?0:0|h(t))}function u(t){for(var e=t.length<0?0:0|h(t.length),r=o(e),n=0;n<e;n+=1)r[n]=255&t[n];return r}function h(t){if(t>=a)throw new RangeError(\\\"Attempt to allocate Buffer larger than maximum size: 0x\\\"+a.toString(16)+\\\" bytes\\\");return 0|t}function f(t,r){if(e.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||N(t,ArrayBuffer))return t.byteLength;if(\\\"string\\\"!=typeof t)throw new TypeError('The \\\"string\\\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);var n=t.length,i=arguments.length>2&&!0===arguments[2];if(!i&&0===n)return 0;for(var a=!1;;)switch(r){case\\\"ascii\\\":case\\\"latin1\\\":case\\\"binary\\\":return n;case\\\"utf8\\\":case\\\"utf-8\\\":return R(t).length;case\\\"ucs2\\\":case\\\"ucs-2\\\":case\\\"utf16le\\\":case\\\"utf-16le\\\":return 2*n;case\\\"hex\\\":return n>>>1;case\\\"base64\\\":return F(t).length;default:if(a)return i?-1:R(t).length;r=(\\\"\\\"+r).toLowerCase(),a=!0}}function p(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function d(t,r,n,i,a){if(0===t.length)return-1;if(\\\"string\\\"==typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),j(n=+n)&&(n=a?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(a)return-1;n=t.length-1}else if(n<0){if(!a)return-1;n=0}if(\\\"string\\\"==typeof r&&(r=e.from(r,i)),e.isBuffer(r))return 0===r.length?-1:g(t,r,n,i,a);if(\\\"number\\\"==typeof r)return r&=255,\\\"function\\\"==typeof Uint8Array.prototype.indexOf?a?Uint8Array.prototype.indexOf.call(t,r,n):Uint8Array.prototype.lastIndexOf.call(t,r,n):g(t,[r],n,i,a);throw new TypeError(\\\"val must be string, number or Buffer\\\")}function g(t,e,r,n,i){var a,o=1,s=t.length,l=e.length;if(void 0!==n&&(\\\"ucs2\\\"===(n=String(n).toLowerCase())||\\\"ucs-2\\\"===n||\\\"utf16le\\\"===n||\\\"utf-16le\\\"===n)){if(t.length<2||e.length<2)return-1;o=2,s/=2,l/=2,r/=2}function c(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}if(i){var u=-1;for(a=r;a<s;a++)if(c(t,a)===c(e,-1===u?0:a-u)){if(-1===u&&(u=a),a-u+1===l)return u*o}else-1!==u&&(a-=a-u),u=-1}else for(r+l>s&&(r=s-l),a=r;a>=0;a--){for(var h=!0,f=0;f<l;f++)if(c(t,a+f)!==c(e,f)){h=!1;break}if(h)return a}return-1}function v(t,e,r,n){r=Number(r)||0;var i=t.length-r;n?(n=Number(n))>i&&(n=i):n=i;var a=e.length;n>a/2&&(n=a/2);for(var o=0;o<n;++o){var s=parseInt(e.substr(2*o,2),16);if(j(s))return o;t[r+o]=s}return o}function m(t,e,r,n){return B(R(e,t.length-r),t,r,n)}function y(t,e,r,n){return B(function(t){for(var e=[],r=0;r<t.length;++r)e.push(255&t.charCodeAt(r));return e}(e),t,r,n)}function x(t,e,r,n){return y(t,e,r,n)}function b(t,e,r,n){return B(F(e),t,r,n)}function _(t,e,r,n){return B(function(t,e){for(var r,n,i,a=[],o=0;o<t.length&&!((e-=2)<0);++o)r=t.charCodeAt(o),n=r>>8,i=r%256,a.push(i),a.push(n);return a}(e,t.length-r),t,r,n)}function w(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function k(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i<r;){var a,o,s,l,c=t[i],u=null,h=c>239?4:c>223?3:c>191?2:1;if(i+h<=r)switch(h){case 1:c<128&&(u=c);break;case 2:128==(192&(a=t[i+1]))&&(l=(31&c)<<6|63&a)>127&&(u=l);break;case 3:a=t[i+1],o=t[i+2],128==(192&a)&&128==(192&o)&&(l=(15&c)<<12|(63&a)<<6|63&o)>2047&&(l<55296||l>57343)&&(u=l);break;case 4:a=t[i+1],o=t[i+2],s=t[i+3],128==(192&a)&&128==(192&o)&&128==(192&s)&&(l=(15&c)<<18|(63&a)<<12|(63&o)<<6|63&s)>65535&&l<1114112&&(u=l)}null===u?(u=65533,h=1):u>65535&&(u-=65536,n.push(u>>>10&1023|55296),u=56320|1023&u),n.push(u),i+=h}return function(t){var e=t.length;if(e<=T)return String.fromCharCode.apply(String,t);var r=\\\"\\\",n=0;for(;n<e;)r+=String.fromCharCode.apply(String,t.slice(n,n+=T));return r}(n)}r.kMaxLength=a,e.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()}catch(t){return!1}}(),e.TYPED_ARRAY_SUPPORT||\\\"undefined\\\"==typeof console||\\\"function\\\"!=typeof console.error||console.error(\\\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\\\"),Object.defineProperty(e.prototype,\\\"parent\\\",{enumerable:!0,get:function(){if(e.isBuffer(this))return this.buffer}}),Object.defineProperty(e.prototype,\\\"offset\\\",{enumerable:!0,get:function(){if(e.isBuffer(this))return this.byteOffset}}),\\\"undefined\\\"!=typeof Symbol&&null!=Symbol.species&&e[Symbol.species]===e&&Object.defineProperty(e,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),e.poolSize=8192,e.from=function(t,e,r){return s(t,e,r)},e.prototype.__proto__=Uint8Array.prototype,e.__proto__=Uint8Array,e.alloc=function(t,e,r){return function(t,e,r){return l(t),t<=0?o(t):void 0!==e?\\\"string\\\"==typeof r?o(t).fill(e,r):o(t).fill(e):o(t)}(t,e,r)},e.allocUnsafe=function(t){return c(t)},e.allocUnsafeSlow=function(t){return c(t)},e.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==e.prototype},e.compare=function(t,r){if(N(t,Uint8Array)&&(t=e.from(t,t.offset,t.byteLength)),N(r,Uint8Array)&&(r=e.from(r,r.offset,r.byteLength)),!e.isBuffer(t)||!e.isBuffer(r))throw new TypeError('The \\\"buf1\\\", \\\"buf2\\\" arguments must be one of type Buffer or Uint8Array');if(t===r)return 0;for(var n=t.length,i=r.length,a=0,o=Math.min(n,i);a<o;++a)if(t[a]!==r[a]){n=t[a],i=r[a];break}return n<i?-1:i<n?1:0},e.isEncoding=function(t){switch(String(t).toLowerCase()){case\\\"hex\\\":case\\\"utf8\\\":case\\\"utf-8\\\":case\\\"ascii\\\":case\\\"latin1\\\":case\\\"binary\\\":case\\\"base64\\\":case\\\"ucs2\\\":case\\\"ucs-2\\\":case\\\"utf16le\\\":case\\\"utf-16le\\\":return!0;default:return!1}},e.concat=function(t,r){if(!Array.isArray(t))throw new TypeError('\\\"list\\\" argument must be an Array of Buffers');if(0===t.length)return e.alloc(0);var n;if(void 0===r)for(r=0,n=0;n<t.length;++n)r+=t[n].length;var i=e.allocUnsafe(r),a=0;for(n=0;n<t.length;++n){var o=t[n];if(N(o,Uint8Array)&&(o=e.from(o)),!e.isBuffer(o))throw new TypeError('\\\"list\\\" argument must be an Array of Buffers');o.copy(i,a),a+=o.length}return i},e.byteLength=f,e.prototype._isBuffer=!0,e.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError(\\\"Buffer size must be a multiple of 16-bits\\\");for(var e=0;e<t;e+=2)p(this,e,e+1);return this},e.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError(\\\"Buffer size must be a multiple of 32-bits\\\");for(var e=0;e<t;e+=4)p(this,e,e+3),p(this,e+1,e+2);return this},e.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError(\\\"Buffer size must be a multiple of 64-bits\\\");for(var e=0;e<t;e+=8)p(this,e,e+7),p(this,e+1,e+6),p(this,e+2,e+5),p(this,e+3,e+4);return this},e.prototype.toString=function(){var t=this.length;return 0===t?\\\"\\\":0===arguments.length?k(this,0,t):function(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return\\\"\\\";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return\\\"\\\";if((r>>>=0)<=(e>>>=0))return\\\"\\\";for(t||(t=\\\"utf8\\\");;)switch(t){case\\\"hex\\\":return S(this,e,r);case\\\"utf8\\\":case\\\"utf-8\\\":return k(this,e,r);case\\\"ascii\\\":return A(this,e,r);case\\\"latin1\\\":case\\\"binary\\\":return M(this,e,r);case\\\"base64\\\":return w(this,e,r);case\\\"ucs2\\\":case\\\"ucs-2\\\":case\\\"utf16le\\\":case\\\"utf-16le\\\":return E(this,e,r);default:if(n)throw new TypeError(\\\"Unknown encoding: \\\"+t);t=(t+\\\"\\\").toLowerCase(),n=!0}}.apply(this,arguments)},e.prototype.toLocaleString=e.prototype.toString,e.prototype.equals=function(t){if(!e.isBuffer(t))throw new TypeError(\\\"Argument must be a Buffer\\\");return this===t||0===e.compare(this,t)},e.prototype.inspect=function(){var t=\\\"\\\",e=r.INSPECT_MAX_BYTES;return t=this.toString(\\\"hex\\\",0,e).replace(/(.{2})/g,\\\"$1 \\\").trim(),this.length>e&&(t+=\\\" ... \\\"),\\\"<Buffer \\\"+t+\\\">\\\"},e.prototype.compare=function(t,r,n,i,a){if(N(t,Uint8Array)&&(t=e.from(t,t.offset,t.byteLength)),!e.isBuffer(t))throw new TypeError('The \\\"target\\\" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===r&&(r=0),void 0===n&&(n=t?t.length:0),void 0===i&&(i=0),void 0===a&&(a=this.length),r<0||n>t.length||i<0||a>this.length)throw new RangeError(\\\"out of range index\\\");if(i>=a&&r>=n)return 0;if(i>=a)return-1;if(r>=n)return 1;if(this===t)return 0;for(var o=(a>>>=0)-(i>>>=0),s=(n>>>=0)-(r>>>=0),l=Math.min(o,s),c=this.slice(i,a),u=t.slice(r,n),h=0;h<l;++h)if(c[h]!==u[h]){o=c[h],s=u[h];break}return o<s?-1:s<o?1:0},e.prototype.includes=function(t,e,r){return-1!==this.indexOf(t,e,r)},e.prototype.indexOf=function(t,e,r){return d(this,t,e,r,!0)},e.prototype.lastIndexOf=function(t,e,r){return d(this,t,e,r,!1)},e.prototype.write=function(t,e,r,n){if(void 0===e)n=\\\"utf8\\\",r=this.length,e=0;else if(void 0===r&&\\\"string\\\"==typeof e)n=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error(\\\"Buffer.write(string, encoding, offset[, length]) is no longer supported\\\");e>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n=\\\"utf8\\\")):(n=r,r=void 0)}var i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError(\\\"Attempt to write outside buffer bounds\\\");n||(n=\\\"utf8\\\");for(var a=!1;;)switch(n){case\\\"hex\\\":return v(this,t,e,r);case\\\"utf8\\\":case\\\"utf-8\\\":return m(this,t,e,r);case\\\"ascii\\\":return y(this,t,e,r);case\\\"latin1\\\":case\\\"binary\\\":return x(this,t,e,r);case\\\"base64\\\":return b(this,t,e,r);case\\\"ucs2\\\":case\\\"ucs-2\\\":case\\\"utf16le\\\":case\\\"utf-16le\\\":return _(this,t,e,r);default:if(a)throw new TypeError(\\\"Unknown encoding: \\\"+n);n=(\\\"\\\"+n).toLowerCase(),a=!0}},e.prototype.toJSON=function(){return{type:\\\"Buffer\\\",data:Array.prototype.slice.call(this._arr||this,0)}};var T=4096;function A(t,e,r){var n=\\\"\\\";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(127&t[i]);return n}function M(t,e,r){var n=\\\"\\\";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(t[i]);return n}function S(t,e,r){var n=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>n)&&(r=n);for(var i=\\\"\\\",a=e;a<r;++a)i+=D(t[a]);return i}function E(t,e,r){for(var n=t.slice(e,r),i=\\\"\\\",a=0;a<n.length;a+=2)i+=String.fromCharCode(n[a]+256*n[a+1]);return i}function C(t,e,r){if(t%1!=0||t<0)throw new RangeError(\\\"offset is not uint\\\");if(t+e>r)throw new RangeError(\\\"Trying to access beyond buffer length\\\")}function L(t,r,n,i,a,o){if(!e.isBuffer(t))throw new TypeError('\\\"buffer\\\" argument must be a Buffer instance');if(r>a||r<o)throw new RangeError('\\\"value\\\" argument is out of bounds');if(n+i>t.length)throw new RangeError(\\\"Index out of range\\\")}function P(t,e,r,n,i,a){if(r+n>t.length)throw new RangeError(\\\"Index out of range\\\");if(r<0)throw new RangeError(\\\"Index out of range\\\")}function O(t,e,r,n,a){return e=+e,r>>>=0,a||P(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function z(t,e,r,n,a){return e=+e,r>>>=0,a||P(t,0,r,8),i.write(t,e,r,n,52,8),r+8}e.prototype.slice=function(t,r){var n=this.length;(t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(r=void 0===r?n:~~r)<0?(r+=n)<0&&(r=0):r>n&&(r=n),r<t&&(r=t);var i=this.subarray(t,r);return i.__proto__=e.prototype,i},e.prototype.readUIntLE=function(t,e,r){t>>>=0,e>>>=0,r||C(t,e,this.length);for(var n=this[t],i=1,a=0;++a<e&&(i*=256);)n+=this[t+a]*i;return n},e.prototype.readUIntBE=function(t,e,r){t>>>=0,e>>>=0,r||C(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},e.prototype.readUInt8=function(t,e){return t>>>=0,e||C(t,1,this.length),this[t]},e.prototype.readUInt16LE=function(t,e){return t>>>=0,e||C(t,2,this.length),this[t]|this[t+1]<<8},e.prototype.readUInt16BE=function(t,e){return t>>>=0,e||C(t,2,this.length),this[t]<<8|this[t+1]},e.prototype.readUInt32LE=function(t,e){return t>>>=0,e||C(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},e.prototype.readUInt32BE=function(t,e){return t>>>=0,e||C(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},e.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||C(t,e,this.length);for(var n=this[t],i=1,a=0;++a<e&&(i*=256);)n+=this[t+a]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*e)),n},e.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||C(t,e,this.length);for(var n=e,i=1,a=this[t+--n];n>0&&(i*=256);)a+=this[t+--n]*i;return a>=(i*=128)&&(a-=Math.pow(2,8*e)),a},e.prototype.readInt8=function(t,e){return t>>>=0,e||C(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},e.prototype.readInt16LE=function(t,e){t>>>=0,e||C(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},e.prototype.readInt16BE=function(t,e){t>>>=0,e||C(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},e.prototype.readInt32LE=function(t,e){return t>>>=0,e||C(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},e.prototype.readInt32BE=function(t,e){return t>>>=0,e||C(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},e.prototype.readFloatLE=function(t,e){return t>>>=0,e||C(t,4,this.length),i.read(this,t,!0,23,4)},e.prototype.readFloatBE=function(t,e){return t>>>=0,e||C(t,4,this.length),i.read(this,t,!1,23,4)},e.prototype.readDoubleLE=function(t,e){return t>>>=0,e||C(t,8,this.length),i.read(this,t,!0,52,8)},e.prototype.readDoubleBE=function(t,e){return t>>>=0,e||C(t,8,this.length),i.read(this,t,!1,52,8)},e.prototype.writeUIntLE=function(t,e,r,n){(t=+t,e>>>=0,r>>>=0,n)||L(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,a=0;for(this[e]=255&t;++a<r&&(i*=256);)this[e+a]=t/i&255;return e+r},e.prototype.writeUIntBE=function(t,e,r,n){(t=+t,e>>>=0,r>>>=0,n)||L(this,t,e,r,Math.pow(2,8*r)-1,0);var i=r-1,a=1;for(this[e+i]=255&t;--i>=0&&(a*=256);)this[e+i]=t/a&255;return e+r},e.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,1,255,0),this[e]=255&t,e+1},e.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},e.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},e.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},e.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},e.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);L(this,t,e,r,i-1,-i)}var a=0,o=1,s=0;for(this[e]=255&t;++a<r&&(o*=256);)t<0&&0===s&&0!==this[e+a-1]&&(s=1),this[e+a]=(t/o>>0)-s&255;return e+r},e.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);L(this,t,e,r,i-1,-i)}var a=r-1,o=1,s=0;for(this[e+a]=255&t;--a>=0&&(o*=256);)t<0&&0===s&&0!==this[e+a+1]&&(s=1),this[e+a]=(t/o>>0)-s&255;return e+r},e.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},e.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},e.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},e.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},e.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},e.prototype.writeFloatLE=function(t,e,r){return O(this,t,e,!0,r)},e.prototype.writeFloatBE=function(t,e,r){return O(this,t,e,!1,r)},e.prototype.writeDoubleLE=function(t,e,r){return z(this,t,e,!0,r)},e.prototype.writeDoubleBE=function(t,e,r){return z(this,t,e,!1,r)},e.prototype.copy=function(t,r,n,i){if(!e.isBuffer(t))throw new TypeError(\\\"argument should be a Buffer\\\");if(n||(n=0),i||0===i||(i=this.length),r>=t.length&&(r=t.length),r||(r=0),i>0&&i<n&&(i=n),i===n)return 0;if(0===t.length||0===this.length)return 0;if(r<0)throw new RangeError(\\\"targetStart out of bounds\\\");if(n<0||n>=this.length)throw new RangeError(\\\"Index out of range\\\");if(i<0)throw new RangeError(\\\"sourceEnd out of bounds\\\");i>this.length&&(i=this.length),t.length-r<i-n&&(i=t.length-r+n);var a=i-n;if(this===t&&\\\"function\\\"==typeof Uint8Array.prototype.copyWithin)this.copyWithin(r,n,i);else if(this===t&&n<r&&r<i)for(var o=a-1;o>=0;--o)t[o+r]=this[o+n];else Uint8Array.prototype.set.call(t,this.subarray(n,i),r);return a},e.prototype.fill=function(t,r,n,i){if(\\\"string\\\"==typeof t){if(\\\"string\\\"==typeof r?(i=r,r=0,n=this.length):\\\"string\\\"==typeof n&&(i=n,n=this.length),void 0!==i&&\\\"string\\\"!=typeof i)throw new TypeError(\\\"encoding must be a string\\\");if(\\\"string\\\"==typeof i&&!e.isEncoding(i))throw new TypeError(\\\"Unknown encoding: \\\"+i);if(1===t.length){var a=t.charCodeAt(0);(\\\"utf8\\\"===i&&a<128||\\\"latin1\\\"===i)&&(t=a)}}else\\\"number\\\"==typeof t&&(t&=255);if(r<0||this.length<r||this.length<n)throw new RangeError(\\\"Out of range index\\\");if(n<=r)return this;var o;if(r>>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),\\\"number\\\"==typeof t)for(o=r;o<n;++o)this[o]=t;else{var s=e.isBuffer(t)?t:e.from(t,i),l=s.length;if(0===l)throw new TypeError('The value \\\"'+t+'\\\" is invalid for argument \\\"value\\\"');for(o=0;o<n-r;++o)this[o+r]=s[o%l]}return this};var I=/[^+\\\\/0-9A-Za-z-_]/g;function D(t){return t<16?\\\"0\\\"+t.toString(16):t.toString(16)}function R(t,e){var r;e=e||1/0;for(var n=t.length,i=null,a=[],o=0;o<n;++o){if((r=t.charCodeAt(o))>55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&a.push(239,191,189);continue}if(o+1===n){(e-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&a.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;a.push(r)}else if(r<2048){if((e-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error(\\\"Invalid code point\\\");if((e-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return a}function F(t){return n.toByteArray(function(t){if((t=(t=t.split(\\\"=\\\")[0]).trim().replace(I,\\\"\\\")).length<2)return\\\"\\\";for(;t.length%4!=0;)t+=\\\"=\\\";return t}(t))}function B(t,e,r,n){for(var i=0;i<n&&!(i+r>=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function N(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function j(t){return t!=t}}).call(this,t(\\\"buffer\\\").Buffer)},{\\\"base64-js\\\":74,buffer:105,ieee754:412}],106:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./lib/monotone\\\"),i=t(\\\"./lib/triangulation\\\"),a=t(\\\"./lib/delaunay\\\"),o=t(\\\"./lib/filter\\\");function s(t){return[Math.min(t[0],t[1]),Math.max(t[0],t[1])]}function l(t,e){return t[0]-e[0]||t[1]-e[1]}function c(t,e,r){return e in t?t[e]:r}e.exports=function(t,e,r){Array.isArray(e)?(r=r||{},e=e||[]):(r=e||{},e=[]);var u=!!c(r,\\\"delaunay\\\",!0),h=!!c(r,\\\"interior\\\",!0),f=!!c(r,\\\"exterior\\\",!0),p=!!c(r,\\\"infinity\\\",!1);if(!h&&!f||0===t.length)return[];var d=n(t,e);if(u||h!==f||p){for(var g=i(t.length,function(t){return t.map(s).sort(l)}(e)),v=0;v<d.length;++v){var m=d[v];g.addTriangle(m[0],m[1],m[2])}return u&&a(t,g),f?h?p?o(g,0,p):g.cells():o(g,1,p):o(g,-1)}return d}},{\\\"./lib/delaunay\\\":107,\\\"./lib/filter\\\":108,\\\"./lib/monotone\\\":109,\\\"./lib/triangulation\\\":110}],107:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"robust-in-sphere\\\")[4];t(\\\"binary-search-bounds\\\");function i(t,e,r,i,a,o){var s=e.opposite(i,a);if(!(s<0)){if(a<i){var l=i;i=a,a=l,l=o,o=s,s=l}e.isConstraint(i,a)||n(t[i],t[a],t[o],t[s])<0&&r.push(i,a)}}e.exports=function(t,e){for(var r=[],a=t.length,o=e.stars,s=0;s<a;++s)for(var l=o[s],c=1;c<l.length;c+=2){var u=l[c];if(!(u<s)&&!e.isConstraint(s,u)){for(var h=l[c-1],f=-1,p=1;p<l.length;p+=2)if(l[p-1]===u){f=l[p];break}f<0||n(t[s],t[u],t[h],t[f])<0&&r.push(s,u)}}for(;r.length>0;){for(var u=r.pop(),s=r.pop(),h=-1,f=-1,l=o[s],d=1;d<l.length;d+=2){var g=l[d-1],v=l[d];g===u?f=v:v===u&&(h=g)}h<0||f<0||(n(t[s],t[u],t[h],t[f])>=0||(e.flip(s,u),i(t,e,r,h,s,f),i(t,e,r,s,f,h),i(t,e,r,f,u,h),i(t,e,r,u,h,f)))}}},{\\\"binary-search-bounds\\\":111,\\\"robust-in-sphere\\\":508}],108:[function(t,e,r){\\\"use strict\\\";var n,i=t(\\\"binary-search-bounds\\\");function a(t,e,r,n,i,a,o){this.cells=t,this.neighbor=e,this.flags=n,this.constraint=r,this.active=i,this.next=a,this.boundary=o}function o(t,e){return t[0]-e[0]||t[1]-e[1]||t[2]-e[2]}e.exports=function(t,e,r){var n=function(t,e){for(var r=t.cells(),n=r.length,i=0;i<n;++i){var s=r[i],l=s[0],c=s[1],u=s[2];c<u?c<l&&(s[0]=c,s[1]=u,s[2]=l):u<l&&(s[0]=u,s[1]=l,s[2]=c)}r.sort(o);for(var h=new Array(n),i=0;i<h.length;++i)h[i]=0;var f=[],p=[],d=new Array(3*n),g=new Array(3*n),v=null;e&&(v=[]);for(var m=new a(r,d,g,h,f,p,v),i=0;i<n;++i)for(var s=r[i],y=0;y<3;++y){var l=s[y],c=s[(y+1)%3],x=d[3*i+y]=m.locate(c,l,t.opposite(c,l)),b=g[3*i+y]=t.isConstraint(l,c);x<0&&(b?p.push(i):(f.push(i),h[i]=1),e&&v.push([c,l,-1]))}return m}(t,r);if(0===e)return r?n.cells.concat(n.boundary):n.cells;var i=1,s=n.active,l=n.next,c=n.flags,u=n.cells,h=n.constraint,f=n.neighbor;for(;s.length>0||l.length>0;){for(;s.length>0;){var p=s.pop();if(c[p]!==-i){c[p]=i;u[p];for(var d=0;d<3;++d){var g=f[3*p+d];g>=0&&0===c[g]&&(h[3*p+d]?l.push(g):(s.push(g),c[g]=i))}}}var v=l;l=s,s=v,l.length=0,i=-i}var m=function(t,e,r){for(var n=0,i=0;i<t.length;++i)e[i]===r&&(t[n++]=t[i]);return t.length=n,t}(u,c,e);if(r)return m.concat(n.boundary);return m},a.prototype.locate=(n=[0,0,0],function(t,e,r){var a=t,s=e,l=r;return e<r?e<t&&(a=e,s=r,l=t):r<t&&(a=r,s=t,l=e),a<0?-1:(n[0]=a,n[1]=s,n[2]=l,i.eq(this.cells,n,o))})},{\\\"binary-search-bounds\\\":111}],109:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"binary-search-bounds\\\"),i=t(\\\"robust-orientation\\\")[3],a=0,o=1,s=2;function l(t,e,r,n,i){this.a=t,this.b=e,this.idx=r,this.lowerIds=n,this.upperIds=i}function c(t,e,r,n){this.a=t,this.b=e,this.type=r,this.idx=n}function u(t,e){var r=t.a[0]-e.a[0]||t.a[1]-e.a[1]||t.type-e.type;return r||(t.type!==a&&(r=i(t.a,t.b,e.b))?r:t.idx-e.idx)}function h(t,e){return i(t.a,t.b,e)}function f(t,e,r,a,o){for(var s=n.lt(e,a,h),l=n.gt(e,a,h),c=s;c<l;++c){for(var u=e[c],f=u.lowerIds,p=f.length;p>1&&i(r[f[p-2]],r[f[p-1]],a)>0;)t.push([f[p-1],f[p-2],o]),p-=1;f.length=p,f.push(o);var d=u.upperIds;for(p=d.length;p>1&&i(r[d[p-2]],r[d[p-1]],a)<0;)t.push([d[p-2],d[p-1],o]),p-=1;d.length=p,d.push(o)}}function p(t,e){var r;return(r=t.a[0]<e.a[0]?i(t.a,t.b,e.a):i(e.b,e.a,t.a))?r:(r=e.b[0]<t.b[0]?i(t.a,t.b,e.b):i(e.b,e.a,t.b))||t.idx-e.idx}function d(t,e,r){var i=n.le(t,r,p),a=t[i],o=a.upperIds,s=o[o.length-1];a.upperIds=[s],t.splice(i+1,0,new l(r.a,r.b,r.idx,[s],o))}function g(t,e,r){var i=r.a;r.a=r.b,r.b=i;var a=n.eq(t,r,p),o=t[a];t[a-1].upperIds=o.upperIds,t.splice(a,1)}e.exports=function(t,e){for(var r=t.length,n=e.length,i=[],h=0;h<r;++h)i.push(new c(t[h],null,a,h));for(var h=0;h<n;++h){var p=e[h],v=t[p[0]],m=t[p[1]];v[0]<m[0]?i.push(new c(v,m,s,h),new c(m,v,o,h)):v[0]>m[0]&&i.push(new c(m,v,s,h),new c(v,m,o,h))}i.sort(u);for(var y=i[0].a[0]-(1+Math.abs(i[0].a[0]))*Math.pow(2,-52),x=[new l([y,1],[y,0],-1,[],[],[],[])],b=[],h=0,_=i.length;h<_;++h){var w=i[h],k=w.type;k===a?f(b,x,t,w.a,w.idx):k===s?d(x,t,w):g(x,t,w)}return b}},{\\\"binary-search-bounds\\\":111,\\\"robust-orientation\\\":510}],110:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"binary-search-bounds\\\");function i(t,e){this.stars=t,this.edges=e}e.exports=function(t,e){for(var r=new Array(t),n=0;n<t;++n)r[n]=[];return new i(r,e)};var a=i.prototype;function o(t,e,r){for(var n=1,i=t.length;n<i;n+=2)if(t[n-1]===e&&t[n]===r)return t[n-1]=t[i-2],t[n]=t[i-1],void(t.length=i-2)}a.isConstraint=function(){var t=[0,0];function e(t,e){return t[0]-e[0]||t[1]-e[1]}return function(r,i){return t[0]=Math.min(r,i),t[1]=Math.max(r,i),n.eq(this.edges,t,e)>=0}}(),a.removeTriangle=function(t,e,r){var n=this.stars;o(n[t],e,r),o(n[e],r,t),o(n[r],t,e)},a.addTriangle=function(t,e,r){var n=this.stars;n[t].push(e,r),n[e].push(r,t),n[r].push(t,e)},a.opposite=function(t,e){for(var r=this.stars[e],n=1,i=r.length;n<i;n+=2)if(r[n]===t)return r[n-1];return-1},a.flip=function(t,e){var r=this.opposite(t,e),n=this.opposite(e,t);this.removeTriangle(t,e,r),this.removeTriangle(e,t,n),this.addTriangle(t,n,r),this.addTriangle(e,r,n)},a.edges=function(){for(var t=this.stars,e=[],r=0,n=t.length;r<n;++r)for(var i=t[r],a=0,o=i.length;a<o;a+=2)e.push([i[a],i[a+1]]);return e},a.cells=function(){for(var t=this.stars,e=[],r=0,n=t.length;r<n;++r)for(var i=t[r],a=0,o=i.length;a<o;a+=2){var s=i[a],l=i[a+1];r<Math.min(s,l)&&e.push([r,s,l])}return e}},{\\\"binary-search-bounds\\\":111}],111:[function(t,e,r){\\\"use strict\\\";function n(t,e,r,n,i){var a=[\\\"function \\\",t,\\\"(a,l,h,\\\",n.join(\\\",\\\"),\\\"){\\\",i?\\\"\\\":\\\"var i=\\\",r?\\\"l-1\\\":\\\"h+1\\\",\\\";while(l<=h){var m=(l+h)>>>1,x=a[m]\\\"];return i?e.indexOf(\\\"c\\\")<0?a.push(\\\";if(x===y){return m}else if(x<=y){\\\"):a.push(\\\";var p=c(x,y);if(p===0){return m}else if(p<=0){\\\"):a.push(\\\";if(\\\",e,\\\"){i=m;\\\"),r?a.push(\\\"l=m+1}else{h=m-1}\\\"):a.push(\\\"h=m-1}else{l=m+1}\\\"),a.push(\\\"}\\\"),i?a.push(\\\"return -1};\\\"):a.push(\\\"return i};\\\"),a.join(\\\"\\\")}function i(t,e,r,i){return new Function([n(\\\"A\\\",\\\"x\\\"+t+\\\"y\\\",e,[\\\"y\\\"],i),n(\\\"P\\\",\\\"c(x,y)\\\"+t+\\\"0\\\",e,[\\\"y\\\",\\\"c\\\"],i),\\\"function dispatchBsearch\\\",r,\\\"(a,y,c,l,h){if(typeof(c)==='function'){return P(a,(l===void 0)?0:l|0,(h===void 0)?a.length-1:h|0,y,c)}else{return A(a,(c===void 0)?0:c|0,(l===void 0)?a.length-1:l|0,y)}}return dispatchBsearch\\\",r].join(\\\"\\\"))()}e.exports={ge:i(\\\">=\\\",!1,\\\"GE\\\"),gt:i(\\\">\\\",!1,\\\"GT\\\"),lt:i(\\\"<\\\",!0,\\\"LT\\\"),le:i(\\\"<=\\\",!0,\\\"LE\\\"),eq:i(\\\"-\\\",!0,\\\"EQ\\\",!0)}},{}],112:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){for(var e=1,r=1;r<t.length;++r)for(var n=0;n<r;++n)if(t[r]<t[n])e=-e;else if(t[n]===t[r])return 0;return e}},{}],113:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"dup\\\"),i=t(\\\"robust-linear-solve\\\");function a(t,e){for(var r=0,n=t.length,i=0;i<n;++i)r+=t[i]*e[i];return r}function o(t){var e=t.length;if(0===e)return[];t[0].length;var r=n([t.length+1,t.length+1],1),o=n([t.length+1],1);r[e][e]=0;for(var s=0;s<e;++s){for(var l=0;l<=s;++l)r[l][s]=r[s][l]=2*a(t[s],t[l]);o[s]=a(t[s],t[s])}var c=i(r,o),u=0,h=c[e+1];for(s=0;s<h.length;++s)u+=h[s];var f=new Array(e);for(s=0;s<e;++s){h=c[s];var p=0;for(l=0;l<h.length;++l)p+=h[l];f[s]=p/u}return f}function s(t){if(0===t.length)return[];for(var e=t[0].length,r=n([e]),i=o(t),a=0;a<t.length;++a)for(var s=0;s<e;++s)r[s]+=t[a][s]*i[a];return r}s.barycenetric=o,e.exports=s},{dup:170,\\\"robust-linear-solve\\\":509}],114:[function(t,e,r){e.exports=function(t){for(var e=n(t),r=0,i=0;i<t.length;++i)for(var a=t[i],o=0;o<e.length;++o)r+=Math.pow(a[o]-e[o],2);return Math.sqrt(r/t.length)};var n=t(\\\"circumcenter\\\")},{circumcenter:113}],115:[function(t,e,r){e.exports=function(t,e,r){return e<r?t<e?e:t>r?r:t:t<r?r:t>e?e:t}},{}],116:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r){var n;if(r){n=e;for(var i=new Array(e.length),a=0;a<e.length;++a){var o=e[a];i[a]=[o[0],o[1],r[a]]}e=i}var s=function(t,e,r){var n=d(t,[],p(t));return m(e,n,r),!!n}(t,e,!!r);for(;y(t,e,!!r);)s=!0;if(r&&s){n.length=0,r.length=0;for(var a=0;a<e.length;++a){var o=e[a];n.push([o[0],o[1]]),r.push(o[2])}}return s};var n=t(\\\"union-find\\\"),i=t(\\\"box-intersect\\\"),a=t(\\\"robust-segment-intersect\\\"),o=t(\\\"big-rat\\\"),s=t(\\\"big-rat/cmp\\\"),l=t(\\\"big-rat/to-float\\\"),c=t(\\\"rat-vec\\\"),u=t(\\\"nextafter\\\"),h=t(\\\"./lib/rat-seg-intersect\\\");function f(t){var e=l(t);return[u(e,-1/0),u(e,1/0)]}function p(t){for(var e=new Array(t.length),r=0;r<t.length;++r){var n=t[r];e[r]=[u(n[0],-1/0),u(n[1],-1/0),u(n[0],1/0),u(n[1],1/0)]}return e}function d(t,e,r){for(var a=e.length,o=new n(a),s=[],l=0;l<e.length;++l){var c=e[l],h=f(c[0]),p=f(c[1]);s.push([u(h[0],-1/0),u(p[0],-1/0),u(h[1],1/0),u(p[1],1/0)])}i(s,function(t,e){o.link(t,e)});var d=!0,g=new Array(a);for(l=0;l<a;++l){(m=o.find(l))!==l&&(d=!1,t[m]=[Math.min(t[l][0],t[m][0]),Math.min(t[l][1],t[m][1])])}if(d)return null;var v=0;for(l=0;l<a;++l){var m;(m=o.find(l))===l?(g[l]=v,t[v++]=t[l]):g[l]=-1}t.length=v;for(l=0;l<a;++l)g[l]<0&&(g[l]=g[o.find(l)]);return g}function g(t,e){return t[0]-e[0]||t[1]-e[1]}function v(t,e){var r=t[0]-e[0]||t[1]-e[1];return r||(t[2]<e[2]?-1:t[2]>e[2]?1:0)}function m(t,e,r){if(0!==t.length){if(e)for(var n=0;n<t.length;++n){var i=e[(o=t[n])[0]],a=e[o[1]];o[0]=Math.min(i,a),o[1]=Math.max(i,a)}else for(n=0;n<t.length;++n){var o;i=(o=t[n])[0],a=o[1];o[0]=Math.min(i,a),o[1]=Math.max(i,a)}r?t.sort(v):t.sort(g);var s=1;for(n=1;n<t.length;++n){var l=t[n-1],c=t[n];(c[0]!==l[0]||c[1]!==l[1]||r&&c[2]!==l[2])&&(t[s++]=c)}t.length=s}}function y(t,e,r){var n=function(t,e){for(var r=new Array(e.length),n=0;n<e.length;++n){var i=e[n],a=t[i[0]],o=t[i[1]];r[n]=[u(Math.min(a[0],o[0]),-1/0),u(Math.min(a[1],o[1]),-1/0),u(Math.max(a[0],o[0]),1/0),u(Math.max(a[1],o[1]),1/0)]}return r}(t,e),f=function(t,e,r){var n=[];return i(r,function(r,i){var o=e[r],s=e[i];if(o[0]!==s[0]&&o[0]!==s[1]&&o[1]!==s[0]&&o[1]!==s[1]){var l=t[o[0]],c=t[o[1]],u=t[s[0]],h=t[s[1]];a(l,c,u,h)&&n.push([r,i])}}),n}(t,e,n),g=p(t),v=function(t,e,r,n){var o=[];return i(r,n,function(r,n){var i=e[r];if(i[0]!==n&&i[1]!==n){var s=t[n],l=t[i[0]],c=t[i[1]];a(l,c,s,s)&&o.push([r,n])}}),o}(t,e,n,g),y=d(t,function(t,e,r,n,i){var a,u,f=t.map(function(t){return[o(t[0]),o(t[1])]});for(a=0;a<r.length;++a){var p=r[a];u=p[0];var d=p[1],g=e[u],v=e[d],m=h(c(t[g[0]]),c(t[g[1]]),c(t[v[0]]),c(t[v[1]]));if(m){var y=t.length;t.push([l(m[0]),l(m[1])]),f.push(m),n.push([u,y],[d,y])}}for(n.sort(function(t,e){if(t[0]!==e[0])return t[0]-e[0];var r=f[t[1]],n=f[e[1]];return s(r[0],n[0])||s(r[1],n[1])}),a=n.length-1;a>=0;--a){var x=e[u=(S=n[a])[0]],b=x[0],_=x[1],w=t[b],k=t[_];if((w[0]-k[0]||w[1]-k[1])<0){var T=b;b=_,_=T}x[0]=b;var A,M=x[1]=S[1];for(i&&(A=x[2]);a>0&&n[a-1][0]===u;){var S,E=(S=n[--a])[1];i?e.push([M,E,A]):e.push([M,E]),M=E}i?e.push([M,_,A]):e.push([M,_])}return f}(t,e,f,v,r));return m(e,y,r),!!y||(f.length>0||v.length>0)}},{\\\"./lib/rat-seg-intersect\\\":117,\\\"big-rat\\\":78,\\\"big-rat/cmp\\\":76,\\\"big-rat/to-float\\\":90,\\\"box-intersect\\\":96,nextafter:451,\\\"rat-vec\\\":486,\\\"robust-segment-intersect\\\":513,\\\"union-find\\\":546}],117:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,n){var a=s(e,t),h=s(n,r),f=u(a,h);if(0===o(f))return null;var p=s(t,r),d=u(h,p),g=i(d,f),v=c(a,g);return l(t,v)};var n=t(\\\"big-rat/mul\\\"),i=t(\\\"big-rat/div\\\"),a=t(\\\"big-rat/sub\\\"),o=t(\\\"big-rat/sign\\\"),s=t(\\\"rat-vec/sub\\\"),l=t(\\\"rat-vec/add\\\"),c=t(\\\"rat-vec/muls\\\");function u(t,e){return a(n(t[0],e[1]),n(t[1],e[0]))}},{\\\"big-rat/div\\\":77,\\\"big-rat/mul\\\":87,\\\"big-rat/sign\\\":88,\\\"big-rat/sub\\\":89,\\\"rat-vec/add\\\":485,\\\"rat-vec/muls\\\":487,\\\"rat-vec/sub\\\":488}],118:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"clamp\\\");function i(t,e){null==e&&(e=!0);var r=t[0],i=t[1],a=t[2],o=t[3];return null==o&&(o=e?1:255),e&&(r*=255,i*=255,a*=255,o*=255),16777216*(r=255&n(r,0,255))+((i=255&n(i,0,255))<<16)+((a=255&n(a,0,255))<<8)+(o=255&n(o,0,255))}e.exports=i,e.exports.to=i,e.exports.from=function(t,e){var r=(t=+t)>>>24,n=(16711680&t)>>>16,i=(65280&t)>>>8,a=255&t;return!1===e?[r,n,i,a]:[r/255,n/255,i/255,a/255]}},{clamp:115}],119:[function(t,e,r){\\\"use strict\\\";e.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},{}],120:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"color-rgba\\\"),i=t(\\\"clamp\\\"),a=t(\\\"dtype\\\");e.exports=function(t,e){\\\"float\\\"!==e&&e||(e=\\\"array\\\"),\\\"uint\\\"===e&&(e=\\\"uint8\\\"),\\\"uint_clamped\\\"===e&&(e=\\\"uint8_clamped\\\");var r=new(a(e))(4),o=\\\"uint8\\\"!==e&&\\\"uint8_clamped\\\"!==e;return t.length&&\\\"string\\\"!=typeof t||((t=n(t))[0]/=255,t[1]/=255,t[2]/=255),function(t){return t instanceof Uint8Array||t instanceof Uint8ClampedArray||!!(Array.isArray(t)&&(t[0]>1||0===t[0])&&(t[1]>1||0===t[1])&&(t[2]>1||0===t[2])&&(!t[3]||t[3]>1))}(t)?(r[0]=t[0],r[1]=t[1],r[2]=t[2],r[3]=null!=t[3]?t[3]:255,o&&(r[0]/=255,r[1]/=255,r[2]/=255,r[3]/=255),r):(o?(r[0]=t[0],r[1]=t[1],r[2]=t[2],r[3]=null!=t[3]?t[3]:1):(r[0]=i(Math.floor(255*t[0]),0,255),r[1]=i(Math.floor(255*t[1]),0,255),r[2]=i(Math.floor(255*t[2]),0,255),r[3]=null==t[3]?255:i(Math.floor(255*t[3]),0,255)),r)}},{clamp:115,\\\"color-rgba\\\":122,dtype:169}],121:[function(t,e,r){(function(r){\\\"use strict\\\";var n=t(\\\"color-name\\\"),i=t(\\\"is-plain-obj\\\"),a=t(\\\"defined\\\");e.exports=function(t){var e,s,l=[],c=1;if(\\\"string\\\"==typeof t)if(n[t])l=n[t].slice(),s=\\\"rgb\\\";else if(\\\"transparent\\\"===t)c=0,s=\\\"rgb\\\",l=[0,0,0];else if(/^#[A-Fa-f0-9]+$/.test(t)){var u=t.slice(1),h=u.length,f=h<=4;c=1,f?(l=[parseInt(u[0]+u[0],16),parseInt(u[1]+u[1],16),parseInt(u[2]+u[2],16)],4===h&&(c=parseInt(u[3]+u[3],16)/255)):(l=[parseInt(u[0]+u[1],16),parseInt(u[2]+u[3],16),parseInt(u[4]+u[5],16)],8===h&&(c=parseInt(u[6]+u[7],16)/255)),l[0]||(l[0]=0),l[1]||(l[1]=0),l[2]||(l[2]=0),s=\\\"rgb\\\"}else if(e=/^((?:rgb|hs[lvb]|hwb|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms)a?)\\\\s*\\\\(([^\\\\)]*)\\\\)/.exec(t)){var p=e[1],d=\\\"rgb\\\"===p,u=p.replace(/a$/,\\\"\\\");s=u;var h=\\\"cmyk\\\"===u?4:\\\"gray\\\"===u?1:3;l=e[2].trim().split(/\\\\s*,\\\\s*/).map(function(t,e){if(/%$/.test(t))return e===h?parseFloat(t)/100:\\\"rgb\\\"===u?255*parseFloat(t)/100:parseFloat(t);if(\\\"h\\\"===u[e]){if(/deg$/.test(t))return parseFloat(t);if(void 0!==o[t])return o[t]}return parseFloat(t)}),p===u&&l.push(1),c=d?1:void 0===l[h]?1:l[h],l=l.slice(0,h)}else t.length>10&&/[0-9](?:\\\\s|\\\\/)/.test(t)&&(l=t.match(/([0-9]+)/g).map(function(t){return parseFloat(t)}),s=t.match(/([a-z])/gi).join(\\\"\\\").toLowerCase());else if(isNaN(t))if(i(t)){var g=a(t.r,t.red,t.R,null);null!==g?(s=\\\"rgb\\\",l=[g,a(t.g,t.green,t.G),a(t.b,t.blue,t.B)]):(s=\\\"hsl\\\",l=[a(t.h,t.hue,t.H),a(t.s,t.saturation,t.S),a(t.l,t.lightness,t.L,t.b,t.brightness)]),c=a(t.a,t.alpha,t.opacity,1),null!=t.opacity&&(c/=100)}else(Array.isArray(t)||r.ArrayBuffer&&ArrayBuffer.isView&&ArrayBuffer.isView(t))&&(l=[t[0],t[1],t[2]],s=\\\"rgb\\\",c=4===t.length?t[3]:1);else s=\\\"rgb\\\",l=[t>>>16,(65280&t)>>>8,255&t];return{space:s,values:l,alpha:c}};var o={red:0,orange:60,yellow:120,green:180,blue:240,purple:300}}).call(this,\\\"undefined\\\"!=typeof global?global:\\\"undefined\\\"!=typeof self?self:\\\"undefined\\\"!=typeof window?window:{})},{\\\"color-name\\\":119,defined:164,\\\"is-plain-obj\\\":422}],122:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"color-parse\\\"),i=t(\\\"color-space/hsl\\\"),a=t(\\\"clamp\\\");e.exports=function(t){var e,r=n(t);return r.space?((e=Array(3))[0]=a(r.values[0],0,255),e[1]=a(r.values[1],0,255),e[2]=a(r.values[2],0,255),\\\"h\\\"===r.space[0]&&(e=i.rgb(e)),e.push(a(r.alpha,0,1)),e):[]}},{clamp:115,\\\"color-parse\\\":121,\\\"color-space/hsl\\\":123}],123:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./rgb\\\");e.exports={name:\\\"hsl\\\",min:[0,0,0],max:[360,100,100],channel:[\\\"hue\\\",\\\"saturation\\\",\\\"lightness\\\"],alias:[\\\"HSL\\\"],rgb:function(t){var e,r,n,i,a,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0===s)return[a=255*l,a,a];e=2*l-(r=l<.5?l*(1+s):l+s-l*s),i=[0,0,0];for(var c=0;c<3;c++)(n=o+1/3*-(c-1))<0?n++:n>1&&n--,a=6*n<1?e+6*(r-e)*n:2*n<1?r:3*n<2?e+(r-e)*(2/3-n)*6:e,i[c]=255*a;return i}},n.hsl=function(t){var e,r,n=t[0]/255,i=t[1]/255,a=t[2]/255,o=Math.min(n,i,a),s=Math.max(n,i,a),l=s-o;return s===o?e=0:n===s?e=(i-a)/l:i===s?e=2+(a-n)/l:a===s&&(e=4+(n-i)/l),(e=Math.min(60*e,360))<0&&(e+=360),r=(o+s)/2,[e,100*(s===o?0:r<=.5?l/(s+o):l/(2-s-o)),100*r]}},{\\\"./rgb\\\":124}],124:[function(t,e,r){\\\"use strict\\\";e.exports={name:\\\"rgb\\\",min:[0,0,0],max:[255,255,255],channel:[\\\"red\\\",\\\"green\\\",\\\"blue\\\"],alias:[\\\"RGB\\\"]}},{}],125:[function(t,e,r){e.exports={jet:[{index:0,rgb:[0,0,131]},{index:.125,rgb:[0,60,170]},{index:.375,rgb:[5,255,255]},{index:.625,rgb:[255,255,0]},{index:.875,rgb:[250,0,0]},{index:1,rgb:[128,0,0]}],hsv:[{index:0,rgb:[255,0,0]},{index:.169,rgb:[253,255,2]},{index:.173,rgb:[247,255,2]},{index:.337,rgb:[0,252,4]},{index:.341,rgb:[0,252,10]},{index:.506,rgb:[1,249,255]},{index:.671,rgb:[2,0,253]},{index:.675,rgb:[8,0,253]},{index:.839,rgb:[255,0,251]},{index:.843,rgb:[255,0,245]},{index:1,rgb:[255,0,6]}],hot:[{index:0,rgb:[0,0,0]},{index:.3,rgb:[230,0,0]},{index:.6,rgb:[255,210,0]},{index:1,rgb:[255,255,255]}],cool:[{index:0,rgb:[0,255,255]},{index:1,rgb:[255,0,255]}],spring:[{index:0,rgb:[255,0,255]},{index:1,rgb:[255,255,0]}],summer:[{index:0,rgb:[0,128,102]},{index:1,rgb:[255,255,102]}],autumn:[{index:0,rgb:[255,0,0]},{index:1,rgb:[255,255,0]}],winter:[{index:0,rgb:[0,0,255]},{index:1,rgb:[0,255,128]}],bone:[{index:0,rgb:[0,0,0]},{index:.376,rgb:[84,84,116]},{index:.753,rgb:[169,200,200]},{index:1,rgb:[255,255,255]}],copper:[{index:0,rgb:[0,0,0]},{index:.804,rgb:[255,160,102]},{index:1,rgb:[255,199,127]}],greys:[{index:0,rgb:[0,0,0]},{index:1,rgb:[255,255,255]}],yignbu:[{index:0,rgb:[8,29,88]},{index:.125,rgb:[37,52,148]},{index:.25,rgb:[34,94,168]},{index:.375,rgb:[29,145,192]},{index:.5,rgb:[65,182,196]},{index:.625,rgb:[127,205,187]},{index:.75,rgb:[199,233,180]},{index:.875,rgb:[237,248,217]},{index:1,rgb:[255,255,217]}],greens:[{index:0,rgb:[0,68,27]},{index:.125,rgb:[0,109,44]},{index:.25,rgb:[35,139,69]},{index:.375,rgb:[65,171,93]},{index:.5,rgb:[116,196,118]},{index:.625,rgb:[161,217,155]},{index:.75,rgb:[199,233,192]},{index:.875,rgb:[229,245,224]},{index:1,rgb:[247,252,245]}],yiorrd:[{index:0,rgb:[128,0,38]},{index:.125,rgb:[189,0,38]},{index:.25,rgb:[227,26,28]},{index:.375,rgb:[252,78,42]},{index:.5,rgb:[253,141,60]},{index:.625,rgb:[254,178,76]},{index:.75,rgb:[254,217,118]},{index:.875,rgb:[255,237,160]},{index:1,rgb:[255,255,204]}],bluered:[{index:0,rgb:[0,0,255]},{index:1,rgb:[255,0,0]}],rdbu:[{index:0,rgb:[5,10,172]},{index:.35,rgb:[106,137,247]},{index:.5,rgb:[190,190,190]},{index:.6,rgb:[220,170,132]},{index:.7,rgb:[230,145,90]},{index:1,rgb:[178,10,28]}],picnic:[{index:0,rgb:[0,0,255]},{index:.1,rgb:[51,153,255]},{index:.2,rgb:[102,204,255]},{index:.3,rgb:[153,204,255]},{index:.4,rgb:[204,204,255]},{index:.5,rgb:[255,255,255]},{index:.6,rgb:[255,204,255]},{index:.7,rgb:[255,153,255]},{index:.8,rgb:[255,102,204]},{index:.9,rgb:[255,102,102]},{index:1,rgb:[255,0,0]}],rainbow:[{index:0,rgb:[150,0,90]},{index:.125,rgb:[0,0,200]},{index:.25,rgb:[0,25,255]},{index:.375,rgb:[0,152,255]},{index:.5,rgb:[44,255,150]},{index:.625,rgb:[151,255,0]},{index:.75,rgb:[255,234,0]},{index:.875,rgb:[255,111,0]},{index:1,rgb:[255,0,0]}],portland:[{index:0,rgb:[12,51,131]},{index:.25,rgb:[10,136,186]},{index:.5,rgb:[242,211,56]},{index:.75,rgb:[242,143,56]},{index:1,rgb:[217,30,30]}],blackbody:[{index:0,rgb:[0,0,0]},{index:.2,rgb:[230,0,0]},{index:.4,rgb:[230,210,0]},{index:.7,rgb:[255,255,255]},{index:1,rgb:[160,200,255]}],earth:[{index:0,rgb:[0,0,130]},{index:.1,rgb:[0,180,180]},{index:.2,rgb:[40,210,40]},{index:.4,rgb:[230,230,50]},{index:.6,rgb:[120,70,20]},{index:1,rgb:[255,255,255]}],electric:[{index:0,rgb:[0,0,0]},{index:.15,rgb:[30,0,100]},{index:.4,rgb:[120,0,100]},{index:.6,rgb:[160,90,0]},{index:.8,rgb:[230,200,0]},{index:1,rgb:[255,250,220]}],alpha:[{index:0,rgb:[255,255,255,0]},{index:1,rgb:[255,255,255,1]}],viridis:[{index:0,rgb:[68,1,84]},{index:.13,rgb:[71,44,122]},{index:.25,rgb:[59,81,139]},{index:.38,rgb:[44,113,142]},{index:.5,rgb:[33,144,141]},{index:.63,rgb:[39,173,129]},{index:.75,rgb:[92,200,99]},{index:.88,rgb:[170,220,50]},{index:1,rgb:[253,231,37]}],inferno:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[31,12,72]},{index:.25,rgb:[85,15,109]},{index:.38,rgb:[136,34,106]},{index:.5,rgb:[186,54,85]},{index:.63,rgb:[227,89,51]},{index:.75,rgb:[249,140,10]},{index:.88,rgb:[249,201,50]},{index:1,rgb:[252,255,164]}],magma:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[28,16,68]},{index:.25,rgb:[79,18,123]},{index:.38,rgb:[129,37,129]},{index:.5,rgb:[181,54,122]},{index:.63,rgb:[229,80,100]},{index:.75,rgb:[251,135,97]},{index:.88,rgb:[254,194,135]},{index:1,rgb:[252,253,191]}],plasma:[{index:0,rgb:[13,8,135]},{index:.13,rgb:[75,3,161]},{index:.25,rgb:[125,3,168]},{index:.38,rgb:[168,34,150]},{index:.5,rgb:[203,70,121]},{index:.63,rgb:[229,107,93]},{index:.75,rgb:[248,148,65]},{index:.88,rgb:[253,195,40]},{index:1,rgb:[240,249,33]}],warm:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[172,0,187]},{index:.25,rgb:[219,0,170]},{index:.38,rgb:[255,0,130]},{index:.5,rgb:[255,63,74]},{index:.63,rgb:[255,123,0]},{index:.75,rgb:[234,176,0]},{index:.88,rgb:[190,228,0]},{index:1,rgb:[147,255,0]}],cool:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[116,0,218]},{index:.25,rgb:[98,74,237]},{index:.38,rgb:[68,146,231]},{index:.5,rgb:[0,204,197]},{index:.63,rgb:[0,247,146]},{index:.75,rgb:[0,255,88]},{index:.88,rgb:[40,255,8]},{index:1,rgb:[147,255,0]}],\\\"rainbow-soft\\\":[{index:0,rgb:[125,0,179]},{index:.1,rgb:[199,0,180]},{index:.2,rgb:[255,0,121]},{index:.3,rgb:[255,108,0]},{index:.4,rgb:[222,194,0]},{index:.5,rgb:[150,255,0]},{index:.6,rgb:[0,255,55]},{index:.7,rgb:[0,246,150]},{index:.8,rgb:[50,167,222]},{index:.9,rgb:[103,51,235]},{index:1,rgb:[124,0,186]}],bathymetry:[{index:0,rgb:[40,26,44]},{index:.13,rgb:[59,49,90]},{index:.25,rgb:[64,76,139]},{index:.38,rgb:[63,110,151]},{index:.5,rgb:[72,142,158]},{index:.63,rgb:[85,174,163]},{index:.75,rgb:[120,206,163]},{index:.88,rgb:[187,230,172]},{index:1,rgb:[253,254,204]}],cdom:[{index:0,rgb:[47,15,62]},{index:.13,rgb:[87,23,86]},{index:.25,rgb:[130,28,99]},{index:.38,rgb:[171,41,96]},{index:.5,rgb:[206,67,86]},{index:.63,rgb:[230,106,84]},{index:.75,rgb:[242,149,103]},{index:.88,rgb:[249,193,135]},{index:1,rgb:[254,237,176]}],chlorophyll:[{index:0,rgb:[18,36,20]},{index:.13,rgb:[25,63,41]},{index:.25,rgb:[24,91,59]},{index:.38,rgb:[13,119,72]},{index:.5,rgb:[18,148,80]},{index:.63,rgb:[80,173,89]},{index:.75,rgb:[132,196,122]},{index:.88,rgb:[175,221,162]},{index:1,rgb:[215,249,208]}],density:[{index:0,rgb:[54,14,36]},{index:.13,rgb:[89,23,80]},{index:.25,rgb:[110,45,132]},{index:.38,rgb:[120,77,178]},{index:.5,rgb:[120,113,213]},{index:.63,rgb:[115,151,228]},{index:.75,rgb:[134,185,227]},{index:.88,rgb:[177,214,227]},{index:1,rgb:[230,241,241]}],\\\"freesurface-blue\\\":[{index:0,rgb:[30,4,110]},{index:.13,rgb:[47,14,176]},{index:.25,rgb:[41,45,236]},{index:.38,rgb:[25,99,212]},{index:.5,rgb:[68,131,200]},{index:.63,rgb:[114,156,197]},{index:.75,rgb:[157,181,203]},{index:.88,rgb:[200,208,216]},{index:1,rgb:[241,237,236]}],\\\"freesurface-red\\\":[{index:0,rgb:[60,9,18]},{index:.13,rgb:[100,17,27]},{index:.25,rgb:[142,20,29]},{index:.38,rgb:[177,43,27]},{index:.5,rgb:[192,87,63]},{index:.63,rgb:[205,125,105]},{index:.75,rgb:[216,162,148]},{index:.88,rgb:[227,199,193]},{index:1,rgb:[241,237,236]}],oxygen:[{index:0,rgb:[64,5,5]},{index:.13,rgb:[106,6,15]},{index:.25,rgb:[144,26,7]},{index:.38,rgb:[168,64,3]},{index:.5,rgb:[188,100,4]},{index:.63,rgb:[206,136,11]},{index:.75,rgb:[220,174,25]},{index:.88,rgb:[231,215,44]},{index:1,rgb:[248,254,105]}],par:[{index:0,rgb:[51,20,24]},{index:.13,rgb:[90,32,35]},{index:.25,rgb:[129,44,34]},{index:.38,rgb:[159,68,25]},{index:.5,rgb:[182,99,19]},{index:.63,rgb:[199,134,22]},{index:.75,rgb:[212,171,35]},{index:.88,rgb:[221,210,54]},{index:1,rgb:[225,253,75]}],phase:[{index:0,rgb:[145,105,18]},{index:.13,rgb:[184,71,38]},{index:.25,rgb:[186,58,115]},{index:.38,rgb:[160,71,185]},{index:.5,rgb:[110,97,218]},{index:.63,rgb:[50,123,164]},{index:.75,rgb:[31,131,110]},{index:.88,rgb:[77,129,34]},{index:1,rgb:[145,105,18]}],salinity:[{index:0,rgb:[42,24,108]},{index:.13,rgb:[33,50,162]},{index:.25,rgb:[15,90,145]},{index:.38,rgb:[40,118,137]},{index:.5,rgb:[59,146,135]},{index:.63,rgb:[79,175,126]},{index:.75,rgb:[120,203,104]},{index:.88,rgb:[193,221,100]},{index:1,rgb:[253,239,154]}],temperature:[{index:0,rgb:[4,35,51]},{index:.13,rgb:[23,51,122]},{index:.25,rgb:[85,59,157]},{index:.38,rgb:[129,79,143]},{index:.5,rgb:[175,95,130]},{index:.63,rgb:[222,112,101]},{index:.75,rgb:[249,146,66]},{index:.88,rgb:[249,196,65]},{index:1,rgb:[232,250,91]}],turbidity:[{index:0,rgb:[34,31,27]},{index:.13,rgb:[65,50,41]},{index:.25,rgb:[98,69,52]},{index:.38,rgb:[131,89,57]},{index:.5,rgb:[161,112,59]},{index:.63,rgb:[185,140,66]},{index:.75,rgb:[202,174,88]},{index:.88,rgb:[216,209,126]},{index:1,rgb:[233,246,171]}],\\\"velocity-blue\\\":[{index:0,rgb:[17,32,64]},{index:.13,rgb:[35,52,116]},{index:.25,rgb:[29,81,156]},{index:.38,rgb:[31,113,162]},{index:.5,rgb:[50,144,169]},{index:.63,rgb:[87,173,176]},{index:.75,rgb:[149,196,189]},{index:.88,rgb:[203,221,211]},{index:1,rgb:[254,251,230]}],\\\"velocity-green\\\":[{index:0,rgb:[23,35,19]},{index:.13,rgb:[24,64,38]},{index:.25,rgb:[11,95,45]},{index:.38,rgb:[39,123,35]},{index:.5,rgb:[95,146,12]},{index:.63,rgb:[152,165,18]},{index:.75,rgb:[201,186,69]},{index:.88,rgb:[233,216,137]},{index:1,rgb:[255,253,205]}],cubehelix:[{index:0,rgb:[0,0,0]},{index:.07,rgb:[22,5,59]},{index:.13,rgb:[60,4,105]},{index:.2,rgb:[109,1,135]},{index:.27,rgb:[161,0,147]},{index:.33,rgb:[210,2,142]},{index:.4,rgb:[251,11,123]},{index:.47,rgb:[255,29,97]},{index:.53,rgb:[255,54,69]},{index:.6,rgb:[255,85,46]},{index:.67,rgb:[255,120,34]},{index:.73,rgb:[255,157,37]},{index:.8,rgb:[241,191,57]},{index:.87,rgb:[224,220,93]},{index:.93,rgb:[218,241,142]},{index:1,rgb:[227,253,198]}]}},{}],126:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./colorScale\\\"),i=t(\\\"lerp\\\");function a(t){return[t[0]/255,t[1]/255,t[2]/255,t[3]]}function o(t){for(var e,r=\\\"#\\\",n=0;n<3;++n)r+=(\\\"00\\\"+(e=(e=t[n]).toString(16))).substr(e.length);return r}function s(t){return\\\"rgba(\\\"+t.join(\\\",\\\")+\\\")\\\"}e.exports=function(t){var e,r,l,c,u,h,f,p,d,g;t||(t={});p=(t.nshades||72)-1,f=t.format||\\\"hex\\\",(h=t.colormap)||(h=\\\"jet\\\");if(\\\"string\\\"==typeof h){if(h=h.toLowerCase(),!n[h])throw Error(h+\\\" not a supported colorscale\\\");u=n[h]}else{if(!Array.isArray(h))throw Error(\\\"unsupported colormap option\\\",h);u=h.slice()}if(u.length>p+1)throw new Error(h+\\\" map requires nshades to be at least size \\\"+u.length);d=Array.isArray(t.alpha)?2!==t.alpha.length?[1,1]:t.alpha.slice():\\\"number\\\"==typeof t.alpha?[t.alpha,t.alpha]:[1,1];e=u.map(function(t){return Math.round(t.index*p)}),d[0]=Math.min(Math.max(d[0],0),1),d[1]=Math.min(Math.max(d[1],0),1);var v=u.map(function(t,e){var r=u[e].index,n=u[e].rgb.slice();return 4===n.length&&n[3]>=0&&n[3]<=1?n:(n[3]=d[0]+(d[1]-d[0])*r,n)}),m=[];for(g=0;g<e.length-1;++g){c=e[g+1]-e[g],r=v[g],l=v[g+1];for(var y=0;y<c;y++){var x=y/c;m.push([Math.round(i(r[0],l[0],x)),Math.round(i(r[1],l[1],x)),Math.round(i(r[2],l[2],x)),i(r[3],l[3],x)])}}m.push(u[u.length-1].rgb.concat(d[1])),\\\"hex\\\"===f?m=m.map(o):\\\"rgbaString\\\"===f?m=m.map(s):\\\"float\\\"===f&&(m=m.map(a));return m}},{\\\"./colorScale\\\":125,lerp:425}],127:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,a){var o=n(e,r,a);if(0===o){var s=i(n(t,e,r)),c=i(n(t,e,a));if(s===c){if(0===s){var u=l(t,e,r),h=l(t,e,a);return u===h?0:u?1:-1}return 0}return 0===c?s>0?-1:l(t,e,a)?-1:1:0===s?c>0?1:l(t,e,r)?1:-1:i(c-s)}var f=n(t,e,r);if(f>0)return o>0&&n(t,e,a)>0?1:-1;if(f<0)return o>0||n(t,e,a)>0?1:-1;var p=n(t,e,a);return p>0?1:l(t,e,r)?1:-1};var n=t(\\\"robust-orientation\\\"),i=t(\\\"signum\\\"),a=t(\\\"two-sum\\\"),o=t(\\\"robust-product\\\"),s=t(\\\"robust-sum\\\");function l(t,e,r){var n=a(t[0],-e[0]),i=a(t[1],-e[1]),l=a(r[0],-e[0]),c=a(r[1],-e[1]),u=s(o(n,l),o(i,c));return u[u.length-1]>=0}},{\\\"robust-orientation\\\":510,\\\"robust-product\\\":511,\\\"robust-sum\\\":515,signum:516,\\\"two-sum\\\":544}],128:[function(t,e,r){e.exports=function(t,e){var r=t.length,a=t.length-e.length;if(a)return a;switch(r){case 0:return 0;case 1:return t[0]-e[0];case 2:return t[0]+t[1]-e[0]-e[1]||n(t[0],t[1])-n(e[0],e[1]);case 3:var o=t[0]+t[1],s=e[0]+e[1];if(a=o+t[2]-(s+e[2]))return a;var l=n(t[0],t[1]),c=n(e[0],e[1]);return n(l,t[2])-n(c,e[2])||n(l+t[2],o)-n(c+e[2],s);case 4:var u=t[0],h=t[1],f=t[2],p=t[3],d=e[0],g=e[1],v=e[2],m=e[3];return u+h+f+p-(d+g+v+m)||n(u,h,f,p)-n(d,g,v,m,d)||n(u+h,u+f,u+p,h+f,h+p,f+p)-n(d+g,d+v,d+m,g+v,g+m,v+m)||n(u+h+f,u+h+p,u+f+p,h+f+p)-n(d+g+v,d+g+m,d+v+m,g+v+m);default:for(var y=t.slice().sort(i),x=e.slice().sort(i),b=0;b<r;++b)if(a=y[b]-x[b])return a;return 0}};var n=Math.min;function i(t,e){return t-e}},{}],129:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"compare-cell\\\"),i=t(\\\"cell-orientation\\\");e.exports=function(t,e){return n(t,e)||i(t)-i(e)}},{\\\"cell-orientation\\\":112,\\\"compare-cell\\\":128}],130:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./lib/ch1d\\\"),i=t(\\\"./lib/ch2d\\\"),a=t(\\\"./lib/chnd\\\");e.exports=function(t){var e=t.length;if(0===e)return[];if(1===e)return[[0]];var r=t[0].length;if(0===r)return[];if(1===r)return n(t);if(2===r)return i(t);return a(t,r)}},{\\\"./lib/ch1d\\\":131,\\\"./lib/ch2d\\\":132,\\\"./lib/chnd\\\":133}],131:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){for(var e=0,r=0,n=1;n<t.length;++n)t[n][0]<t[e][0]&&(e=n),t[n][0]>t[r][0]&&(r=n);return e<r?[[e],[r]]:e>r?[[r],[e]]:[[e]]}},{}],132:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){var e=n(t),r=e.length;if(r<=2)return[];for(var i=new Array(r),a=e[r-1],o=0;o<r;++o){var s=e[o];i[o]=[a,s],a=s}return i};var n=t(\\\"monotone-convex-hull-2d\\\")},{\\\"monotone-convex-hull-2d\\\":434}],133:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){try{return n(t,!0)}catch(s){var r=i(t);if(r.length<=e)return[];var a=function(t,e){for(var r=t.length,n=new Array(r),i=0;i<e.length;++i)n[i]=t[e[i]];for(var a=e.length,i=0;i<r;++i)e.indexOf(i)<0&&(n[a++]=t[i]);return n}(t,r),o=n(a,!0);return function(t,e){for(var r=t.length,n=e.length,i=0;i<r;++i)for(var a=t[i],o=0;o<a.length;++o){var s=a[o];if(s<n)a[o]=e[s];else{s-=n;for(var l=0;l<n;++l)s>=e[l]&&(s+=1);a[o]=s}}return t}(o,r)}};var n=t(\\\"incremental-convex-hull\\\"),i=t(\\\"affine-hull\\\")},{\\\"affine-hull\\\":62,\\\"incremental-convex-hull\\\":413}],134:[function(t,e,r){e.exports={AFG:\\\"afghan\\\",ALA:\\\"\\\\\\\\b\\\\\\\\wland\\\",ALB:\\\"albania\\\",DZA:\\\"algeria\\\",ASM:\\\"^(?=.*americ).*samoa\\\",AND:\\\"andorra\\\",AGO:\\\"angola\\\",AIA:\\\"anguill?a\\\",ATA:\\\"antarctica\\\",ATG:\\\"antigua\\\",ARG:\\\"argentin\\\",ARM:\\\"armenia\\\",ABW:\\\"^(?!.*bonaire).*\\\\\\\\baruba\\\",AUS:\\\"australia\\\",AUT:\\\"^(?!.*hungary).*austria|\\\\\\\\baustri.*\\\\\\\\bemp\\\",AZE:\\\"azerbaijan\\\",BHS:\\\"bahamas\\\",BHR:\\\"bahrain\\\",BGD:\\\"bangladesh|^(?=.*east).*paki?stan\\\",BRB:\\\"barbados\\\",BLR:\\\"belarus|byelo\\\",BEL:\\\"^(?!.*luxem).*belgium\\\",BLZ:\\\"belize|^(?=.*british).*honduras\\\",BEN:\\\"benin|dahome\\\",BMU:\\\"bermuda\\\",BTN:\\\"bhutan\\\",BOL:\\\"bolivia\\\",BES:\\\"^(?=.*bonaire).*eustatius|^(?=.*carib).*netherlands|\\\\\\\\bbes.?islands\\\",BIH:\\\"herzegovina|bosnia\\\",BWA:\\\"botswana|bechuana\\\",BVT:\\\"bouvet\\\",BRA:\\\"brazil\\\",IOT:\\\"british.?indian.?ocean\\\",BRN:\\\"brunei\\\",BGR:\\\"bulgaria\\\",BFA:\\\"burkina|\\\\\\\\bfaso|upper.?volta\\\",BDI:\\\"burundi\\\",CPV:\\\"verde\\\",KHM:\\\"cambodia|kampuchea|khmer\\\",CMR:\\\"cameroon\\\",CAN:\\\"canada\\\",CYM:\\\"cayman\\\",CAF:\\\"\\\\\\\\bcentral.african.republic\\\",TCD:\\\"\\\\\\\\bchad\\\",CHL:\\\"\\\\\\\\bchile\\\",CHN:\\\"^(?!.*\\\\\\\\bmac)(?!.*\\\\\\\\bhong)(?!.*\\\\\\\\btai)(?!.*\\\\\\\\brep).*china|^(?=.*peo)(?=.*rep).*china\\\",CXR:\\\"christmas\\\",CCK:\\\"\\\\\\\\bcocos|keeling\\\",COL:\\\"colombia\\\",COM:\\\"comoro\\\",COG:\\\"^(?!.*\\\\\\\\bdem)(?!.*\\\\\\\\bd[\\\\\\\\.]?r)(?!.*kinshasa)(?!.*zaire)(?!.*belg)(?!.*l.opoldville)(?!.*free).*\\\\\\\\bcongo\\\",COK:\\\"\\\\\\\\bcook\\\",CRI:\\\"costa.?rica\\\",CIV:\\\"ivoire|ivory\\\",HRV:\\\"croatia\\\",CUB:\\\"\\\\\\\\bcuba\\\",CUW:\\\"^(?!.*bonaire).*\\\\\\\\bcura(c|\\\\xe7)ao\\\",CYP:\\\"cyprus\\\",CSK:\\\"czechoslovakia\\\",CZE:\\\"^(?=.*rep).*czech|czechia|bohemia\\\",COD:\\\"\\\\\\\\bdem.*congo|congo.*\\\\\\\\bdem|congo.*\\\\\\\\bd[\\\\\\\\.]?r|\\\\\\\\bd[\\\\\\\\.]?r.*congo|belgian.?congo|congo.?free.?state|kinshasa|zaire|l.opoldville|drc|droc|rdc\\\",DNK:\\\"denmark\\\",DJI:\\\"djibouti\\\",DMA:\\\"dominica(?!n)\\\",DOM:\\\"dominican.rep\\\",ECU:\\\"ecuador\\\",EGY:\\\"egypt\\\",SLV:\\\"el.?salvador\\\",GNQ:\\\"guine.*eq|eq.*guine|^(?=.*span).*guinea\\\",ERI:\\\"eritrea\\\",EST:\\\"estonia\\\",ETH:\\\"ethiopia|abyssinia\\\",FLK:\\\"falkland|malvinas\\\",FRO:\\\"faroe|faeroe\\\",FJI:\\\"fiji\\\",FIN:\\\"finland\\\",FRA:\\\"^(?!.*\\\\\\\\bdep)(?!.*martinique).*france|french.?republic|\\\\\\\\bgaul\\\",GUF:\\\"^(?=.*french).*guiana\\\",PYF:\\\"french.?polynesia|tahiti\\\",ATF:\\\"french.?southern\\\",GAB:\\\"gabon\\\",GMB:\\\"gambia\\\",GEO:\\\"^(?!.*south).*georgia\\\",DDR:\\\"german.?democratic.?republic|democratic.?republic.*germany|east.germany\\\",DEU:\\\"^(?!.*east).*germany|^(?=.*\\\\\\\\bfed.*\\\\\\\\brep).*german\\\",GHA:\\\"ghana|gold.?coast\\\",GIB:\\\"gibraltar\\\",GRC:\\\"greece|hellenic|hellas\\\",GRL:\\\"greenland\\\",GRD:\\\"grenada\\\",GLP:\\\"guadeloupe\\\",GUM:\\\"\\\\\\\\bguam\\\",GTM:\\\"guatemala\\\",GGY:\\\"guernsey\\\",GIN:\\\"^(?!.*eq)(?!.*span)(?!.*bissau)(?!.*portu)(?!.*new).*guinea\\\",GNB:\\\"bissau|^(?=.*portu).*guinea\\\",GUY:\\\"guyana|british.?guiana\\\",HTI:\\\"haiti\\\",HMD:\\\"heard.*mcdonald\\\",VAT:\\\"holy.?see|vatican|papal.?st\\\",HND:\\\"^(?!.*brit).*honduras\\\",HKG:\\\"hong.?kong\\\",HUN:\\\"^(?!.*austr).*hungary\\\",ISL:\\\"iceland\\\",IND:\\\"india(?!.*ocea)\\\",IDN:\\\"indonesia\\\",IRN:\\\"\\\\\\\\biran|persia\\\",IRQ:\\\"\\\\\\\\biraq|mesopotamia\\\",IRL:\\\"(^ireland)|(^republic.*ireland)\\\",IMN:\\\"^(?=.*isle).*\\\\\\\\bman\\\",ISR:\\\"israel\\\",ITA:\\\"italy\\\",JAM:\\\"jamaica\\\",JPN:\\\"japan\\\",JEY:\\\"jersey\\\",JOR:\\\"jordan\\\",KAZ:\\\"kazak\\\",KEN:\\\"kenya|british.?east.?africa|east.?africa.?prot\\\",KIR:\\\"kiribati\\\",PRK:\\\"^(?=.*democrat|people|north|d.*p.*.r).*\\\\\\\\bkorea|dprk|korea.*(d.*p.*r)\\\",KWT:\\\"kuwait\\\",KGZ:\\\"kyrgyz|kirghiz\\\",LAO:\\\"\\\\\\\\blaos?\\\\\\\\b\\\",LVA:\\\"latvia\\\",LBN:\\\"lebanon\\\",LSO:\\\"lesotho|basuto\\\",LBR:\\\"liberia\\\",LBY:\\\"libya\\\",LIE:\\\"liechtenstein\\\",LTU:\\\"lithuania\\\",LUX:\\\"^(?!.*belg).*luxem\\\",MAC:\\\"maca(o|u)\\\",MDG:\\\"madagascar|malagasy\\\",MWI:\\\"malawi|nyasa\\\",MYS:\\\"malaysia\\\",MDV:\\\"maldive\\\",MLI:\\\"\\\\\\\\bmali\\\\\\\\b\\\",MLT:\\\"\\\\\\\\bmalta\\\",MHL:\\\"marshall\\\",MTQ:\\\"martinique\\\",MRT:\\\"mauritania\\\",MUS:\\\"mauritius\\\",MYT:\\\"\\\\\\\\bmayotte\\\",MEX:\\\"\\\\\\\\bmexic\\\",FSM:\\\"fed.*micronesia|micronesia.*fed\\\",MCO:\\\"monaco\\\",MNG:\\\"mongolia\\\",MNE:\\\"^(?!.*serbia).*montenegro\\\",MSR:\\\"montserrat\\\",MAR:\\\"morocco|\\\\\\\\bmaroc\\\",MOZ:\\\"mozambique\\\",MMR:\\\"myanmar|burma\\\",NAM:\\\"namibia\\\",NRU:\\\"nauru\\\",NPL:\\\"nepal\\\",NLD:\\\"^(?!.*\\\\\\\\bant)(?!.*\\\\\\\\bcarib).*netherlands\\\",ANT:\\\"^(?=.*\\\\\\\\bant).*(nether|dutch)\\\",NCL:\\\"new.?caledonia\\\",NZL:\\\"new.?zealand\\\",NIC:\\\"nicaragua\\\",NER:\\\"\\\\\\\\bniger(?!ia)\\\",NGA:\\\"nigeria\\\",NIU:\\\"niue\\\",NFK:\\\"norfolk\\\",MNP:\\\"mariana\\\",NOR:\\\"norway\\\",OMN:\\\"\\\\\\\\boman|trucial\\\",PAK:\\\"^(?!.*east).*paki?stan\\\",PLW:\\\"palau\\\",PSE:\\\"palestin|\\\\\\\\bgaza|west.?bank\\\",PAN:\\\"panama\\\",PNG:\\\"papua|new.?guinea\\\",PRY:\\\"paraguay\\\",PER:\\\"peru\\\",PHL:\\\"philippines\\\",PCN:\\\"pitcairn\\\",POL:\\\"poland\\\",PRT:\\\"portugal\\\",PRI:\\\"puerto.?rico\\\",QAT:\\\"qatar\\\",KOR:\\\"^(?!.*d.*p.*r)(?!.*democrat)(?!.*people)(?!.*north).*\\\\\\\\bkorea(?!.*d.*p.*r)\\\",MDA:\\\"moldov|b(a|e)ssarabia\\\",REU:\\\"r(e|\\\\xe9)union\\\",ROU:\\\"r(o|u|ou)mania\\\",RUS:\\\"\\\\\\\\brussia|soviet.?union|u\\\\\\\\.?s\\\\\\\\.?s\\\\\\\\.?r|socialist.?republics\\\",RWA:\\\"rwanda\\\",BLM:\\\"barth(e|\\\\xe9)lemy\\\",SHN:\\\"helena\\\",KNA:\\\"kitts|\\\\\\\\bnevis\\\",LCA:\\\"\\\\\\\\blucia\\\",MAF:\\\"^(?=.*collectivity).*martin|^(?=.*france).*martin(?!ique)|^(?=.*french).*martin(?!ique)\\\",SPM:\\\"miquelon\\\",VCT:\\\"vincent\\\",WSM:\\\"^(?!.*amer).*samoa\\\",SMR:\\\"san.?marino\\\",STP:\\\"\\\\\\\\bs(a|\\\\xe3)o.?tom(e|\\\\xe9)\\\",SAU:\\\"\\\\\\\\bsa\\\\\\\\w*.?arabia\\\",SEN:\\\"senegal\\\",SRB:\\\"^(?!.*monte).*serbia\\\",SYC:\\\"seychell\\\",SLE:\\\"sierra\\\",SGP:\\\"singapore\\\",SXM:\\\"^(?!.*martin)(?!.*saba).*maarten\\\",SVK:\\\"^(?!.*cze).*slovak\\\",SVN:\\\"slovenia\\\",SLB:\\\"solomon\\\",SOM:\\\"somali\\\",ZAF:\\\"south.africa|s\\\\\\\\\\\\\\\\..?africa\\\",SGS:\\\"south.?georgia|sandwich\\\",SSD:\\\"\\\\\\\\bs\\\\\\\\w*.?sudan\\\",ESP:\\\"spain\\\",LKA:\\\"sri.?lanka|ceylon\\\",SDN:\\\"^(?!.*\\\\\\\\bs(?!u)).*sudan\\\",SUR:\\\"surinam|dutch.?guiana\\\",SJM:\\\"svalbard\\\",SWZ:\\\"swaziland\\\",SWE:\\\"sweden\\\",CHE:\\\"switz|swiss\\\",SYR:\\\"syria\\\",TWN:\\\"taiwan|taipei|formosa|^(?!.*peo)(?=.*rep).*china\\\",TJK:\\\"tajik\\\",THA:\\\"thailand|\\\\\\\\bsiam\\\",MKD:\\\"macedonia|fyrom\\\",TLS:\\\"^(?=.*leste).*timor|^(?=.*east).*timor\\\",TGO:\\\"togo\\\",TKL:\\\"tokelau\\\",TON:\\\"tonga\\\",TTO:\\\"trinidad|tobago\\\",TUN:\\\"tunisia\\\",TUR:\\\"turkey\\\",TKM:\\\"turkmen\\\",TCA:\\\"turks\\\",TUV:\\\"tuvalu\\\",UGA:\\\"uganda\\\",UKR:\\\"ukrain\\\",ARE:\\\"emirates|^u\\\\\\\\.?a\\\\\\\\.?e\\\\\\\\.?$|united.?arab.?em\\\",GBR:\\\"united.?kingdom|britain|^u\\\\\\\\.?k\\\\\\\\.?$\\\",TZA:\\\"tanzania\\\",USA:\\\"united.?states\\\\\\\\b(?!.*islands)|\\\\\\\\bu\\\\\\\\.?s\\\\\\\\.?a\\\\\\\\.?\\\\\\\\b|^\\\\\\\\s*u\\\\\\\\.?s\\\\\\\\.?\\\\\\\\b(?!.*islands)\\\",UMI:\\\"minor.?outlying.?is\\\",URY:\\\"uruguay\\\",UZB:\\\"uzbek\\\",VUT:\\\"vanuatu|new.?hebrides\\\",VEN:\\\"venezuela\\\",VNM:\\\"^(?!.*republic).*viet.?nam|^(?=.*socialist).*viet.?nam\\\",VGB:\\\"^(?=.*\\\\\\\\bu\\\\\\\\.?\\\\\\\\s?k).*virgin|^(?=.*brit).*virgin|^(?=.*kingdom).*virgin\\\",VIR:\\\"^(?=.*\\\\\\\\bu\\\\\\\\.?\\\\\\\\s?s).*virgin|^(?=.*states).*virgin\\\",WLF:\\\"futuna|wallis\\\",ESH:\\\"western.sahara\\\",YEM:\\\"^(?!.*arab)(?!.*north)(?!.*sana)(?!.*peo)(?!.*dem)(?!.*south)(?!.*aden)(?!.*\\\\\\\\bp\\\\\\\\.?d\\\\\\\\.?r).*yemen\\\",YMD:\\\"^(?=.*peo).*yemen|^(?!.*rep)(?=.*dem).*yemen|^(?=.*south).*yemen|^(?=.*aden).*yemen|^(?=.*\\\\\\\\bp\\\\\\\\.?d\\\\\\\\.?r).*yemen\\\",YUG:\\\"yugoslavia\\\",ZMB:\\\"zambia|northern.?rhodesia\\\",EAZ:\\\"zanzibar\\\",ZWE:\\\"zimbabwe|^(?!.*northern).*rhodesia\\\"}},{}],135:[function(t,e,r){e.exports=[\\\"xx-small\\\",\\\"x-small\\\",\\\"small\\\",\\\"medium\\\",\\\"large\\\",\\\"x-large\\\",\\\"xx-large\\\",\\\"larger\\\",\\\"smaller\\\"]},{}],136:[function(t,e,r){e.exports=[\\\"normal\\\",\\\"condensed\\\",\\\"semi-condensed\\\",\\\"extra-condensed\\\",\\\"ultra-condensed\\\",\\\"expanded\\\",\\\"semi-expanded\\\",\\\"extra-expanded\\\",\\\"ultra-expanded\\\"]},{}],137:[function(t,e,r){e.exports=[\\\"normal\\\",\\\"italic\\\",\\\"oblique\\\"]},{}],138:[function(t,e,r){e.exports=[\\\"normal\\\",\\\"bold\\\",\\\"bolder\\\",\\\"lighter\\\",\\\"100\\\",\\\"200\\\",\\\"300\\\",\\\"400\\\",\\\"500\\\",\\\"600\\\",\\\"700\\\",\\\"800\\\",\\\"900\\\"]},{}],139:[function(t,e,r){\\\"use strict\\\";e.exports={parse:t(\\\"./parse\\\"),stringify:t(\\\"./stringify\\\")}},{\\\"./parse\\\":141,\\\"./stringify\\\":142}],140:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"css-font-size-keywords\\\");e.exports={isSize:function(t){return/^[\\\\d\\\\.]/.test(t)||-1!==t.indexOf(\\\"/\\\")||-1!==n.indexOf(t)}}},{\\\"css-font-size-keywords\\\":135}],141:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"unquote\\\"),i=t(\\\"css-global-keywords\\\"),a=t(\\\"css-system-font-keywords\\\"),o=t(\\\"css-font-weight-keywords\\\"),s=t(\\\"css-font-style-keywords\\\"),l=t(\\\"css-font-stretch-keywords\\\"),c=t(\\\"string-split-by\\\"),u=t(\\\"./lib/util\\\").isSize;e.exports=f;var h=f.cache={};function f(t){if(\\\"string\\\"!=typeof t)throw new Error(\\\"Font argument must be a string.\\\");if(h[t])return h[t];if(\\\"\\\"===t)throw new Error(\\\"Cannot parse an empty string.\\\");if(-1!==a.indexOf(t))return h[t]={system:t};for(var e,r={style:\\\"normal\\\",variant:\\\"normal\\\",weight:\\\"normal\\\",stretch:\\\"normal\\\",lineHeight:\\\"normal\\\",size:\\\"1rem\\\",family:[\\\"serif\\\"]},f=c(t,/\\\\s+/);e=f.shift();){if(-1!==i.indexOf(e))return[\\\"style\\\",\\\"variant\\\",\\\"weight\\\",\\\"stretch\\\"].forEach(function(t){r[t]=e}),h[t]=r;if(-1===s.indexOf(e))if(\\\"normal\\\"!==e&&\\\"small-caps\\\"!==e)if(-1===l.indexOf(e)){if(-1===o.indexOf(e)){if(u(e)){var d=c(e,\\\"/\\\");if(r.size=d[0],null!=d[1]?r.lineHeight=p(d[1]):\\\"/\\\"===f[0]&&(f.shift(),r.lineHeight=p(f.shift())),!f.length)throw new Error(\\\"Missing required font-family.\\\");return r.family=c(f.join(\\\" \\\"),/\\\\s*,\\\\s*/).map(n),h[t]=r}throw new Error(\\\"Unknown or unsupported font token: \\\"+e)}r.weight=e}else r.stretch=e;else r.variant=e;else r.style=e}throw new Error(\\\"Missing required font-size.\\\")}function p(t){var e=parseFloat(t);return e.toString()===t?e:t}},{\\\"./lib/util\\\":140,\\\"css-font-stretch-keywords\\\":136,\\\"css-font-style-keywords\\\":137,\\\"css-font-weight-keywords\\\":138,\\\"css-global-keywords\\\":143,\\\"css-system-font-keywords\\\":144,\\\"string-split-by\\\":529,unquote:548}],142:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"pick-by-alias\\\"),i=t(\\\"./lib/util\\\").isSize,a=g(t(\\\"css-global-keywords\\\")),o=g(t(\\\"css-system-font-keywords\\\")),s=g(t(\\\"css-font-weight-keywords\\\")),l=g(t(\\\"css-font-style-keywords\\\")),c=g(t(\\\"css-font-stretch-keywords\\\")),u={normal:1,\\\"small-caps\\\":1},h={serif:1,\\\"sans-serif\\\":1,monospace:1,cursive:1,fantasy:1,\\\"system-ui\\\":1},f=\\\"1rem\\\",p=\\\"serif\\\";function d(t,e){if(t&&!e[t]&&!a[t])throw Error(\\\"Unknown keyword `\\\"+t+\\\"`\\\");return t}function g(t){for(var e={},r=0;r<t.length;r++)e[t[r]]=1;return e}e.exports=function(t){if((t=n(t,{style:\\\"style fontstyle fontStyle font-style slope distinction\\\",variant:\\\"variant font-variant fontVariant fontvariant var capitalization\\\",weight:\\\"weight w font-weight fontWeight fontweight\\\",stretch:\\\"stretch font-stretch fontStretch fontstretch width\\\",size:\\\"size s font-size fontSize fontsize height em emSize\\\",lineHeight:\\\"lh line-height lineHeight lineheight leading\\\",family:\\\"font family fontFamily font-family fontfamily type typeface face\\\",system:\\\"system reserved default global\\\"})).system)return t.system&&d(t.system,o),t.system;if(d(t.style,l),d(t.variant,u),d(t.weight,s),d(t.stretch,c),null==t.size&&(t.size=f),\\\"number\\\"==typeof t.size&&(t.size+=\\\"px\\\"),!i)throw Error(\\\"Bad size value `\\\"+t.size+\\\"`\\\");t.family||(t.family=p),Array.isArray(t.family)&&(t.family.length||(t.family=[p]),t.family=t.family.map(function(t){return h[t]?t:'\\\"'+t+'\\\"'}).join(\\\", \\\"));var e=[];return e.push(t.style),t.variant!==t.style&&e.push(t.variant),t.weight!==t.variant&&t.weight!==t.style&&e.push(t.weight),t.stretch!==t.weight&&t.stretch!==t.variant&&t.stretch!==t.style&&e.push(t.stretch),e.push(t.size+(null==t.lineHeight||\\\"normal\\\"===t.lineHeight||t.lineHeight+\\\"\\\"==\\\"1\\\"?\\\"\\\":\\\"/\\\"+t.lineHeight)),e.push(t.family),e.filter(Boolean).join(\\\" \\\")}},{\\\"./lib/util\\\":140,\\\"css-font-stretch-keywords\\\":136,\\\"css-font-style-keywords\\\":137,\\\"css-font-weight-keywords\\\":138,\\\"css-global-keywords\\\":143,\\\"css-system-font-keywords\\\":144,\\\"pick-by-alias\\\":465}],143:[function(t,e,r){e.exports=[\\\"inherit\\\",\\\"initial\\\",\\\"unset\\\"]},{}],144:[function(t,e,r){e.exports=[\\\"caption\\\",\\\"icon\\\",\\\"menu\\\",\\\"message-box\\\",\\\"small-caption\\\",\\\"status-bar\\\"]},{}],145:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,n,i,a){var o=i-1,s=i*i,l=o*o,c=(1+2*i)*l,u=i*l,h=s*(3-2*i),f=s*o;if(t.length){a||(a=new Array(t.length));for(var p=t.length-1;p>=0;--p)a[p]=c*t[p]+u*e[p]+h*r[p]+f*n[p];return a}return c*t+u*e+h*r+f*n},e.exports.derivative=function(t,e,r,n,i,a){var o=6*i*i-6*i,s=3*i*i-4*i+1,l=-6*i*i+6*i,c=3*i*i-2*i;if(t.length){a||(a=new Array(t.length));for(var u=t.length-1;u>=0;--u)a[u]=o*t[u]+s*e[u]+l*r[u]+c*n[u];return a}return o*t+s*e+l*r[u]+c*n}},{}],146:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./lib/thunk.js\\\");function i(){this.argTypes=[],this.shimArgs=[],this.arrayArgs=[],this.arrayBlockIndices=[],this.scalarArgs=[],this.offsetArgs=[],this.offsetArgIndex=[],this.indexArgs=[],this.shapeArgs=[],this.funcName=\\\"\\\",this.pre=null,this.body=null,this.post=null,this.debug=!1}e.exports=function(t){var e=new i;e.pre=t.pre,e.body=t.body,e.post=t.post;var r=t.args.slice(0);e.argTypes=r;for(var a=0;a<r.length;++a){var o=r[a];if(\\\"array\\\"===o||\\\"object\\\"==typeof o&&o.blockIndices){if(e.argTypes[a]=\\\"array\\\",e.arrayArgs.push(a),e.arrayBlockIndices.push(o.blockIndices?o.blockIndices:0),e.shimArgs.push(\\\"array\\\"+a),a<e.pre.args.length&&e.pre.args[a].count>0)throw new Error(\\\"cwise: pre() block may not reference array args\\\");if(a<e.post.args.length&&e.post.args[a].count>0)throw new Error(\\\"cwise: post() block may not reference array args\\\")}else if(\\\"scalar\\\"===o)e.scalarArgs.push(a),e.shimArgs.push(\\\"scalar\\\"+a);else if(\\\"index\\\"===o){if(e.indexArgs.push(a),a<e.pre.args.length&&e.pre.args[a].count>0)throw new Error(\\\"cwise: pre() block may not reference array index\\\");if(a<e.body.args.length&&e.body.args[a].lvalue)throw new Error(\\\"cwise: body() block may not write to array index\\\");if(a<e.post.args.length&&e.post.args[a].count>0)throw new Error(\\\"cwise: post() block may not reference array index\\\")}else if(\\\"shape\\\"===o){if(e.shapeArgs.push(a),a<e.pre.args.length&&e.pre.args[a].lvalue)throw new Error(\\\"cwise: pre() block may not write to array shape\\\");if(a<e.body.args.length&&e.body.args[a].lvalue)throw new Error(\\\"cwise: body() block may not write to array shape\\\");if(a<e.post.args.length&&e.post.args[a].lvalue)throw new Error(\\\"cwise: post() block may not write to array shape\\\")}else{if(\\\"object\\\"!=typeof o||!o.offset)throw new Error(\\\"cwise: Unknown argument type \\\"+r[a]);e.argTypes[a]=\\\"offset\\\",e.offsetArgs.push({array:o.array,offset:o.offset}),e.offsetArgIndex.push(a)}}if(e.arrayArgs.length<=0)throw new Error(\\\"cwise: No array arguments specified\\\");if(e.pre.args.length>r.length)throw new Error(\\\"cwise: Too many arguments in pre() block\\\");if(e.body.args.length>r.length)throw new Error(\\\"cwise: Too many arguments in body() block\\\");if(e.post.args.length>r.length)throw new Error(\\\"cwise: Too many arguments in post() block\\\");return e.debug=!!t.printCode||!!t.debug,e.funcName=t.funcName||\\\"cwise\\\",e.blockSize=t.blockSize||64,n(e)}},{\\\"./lib/thunk.js\\\":148}],147:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"uniq\\\");function i(t,e,r){var n,i,a=t.length,o=e.arrayArgs.length,s=e.indexArgs.length>0,l=[],c=[],u=0,h=0;for(n=0;n<a;++n)c.push([\\\"i\\\",n,\\\"=0\\\"].join(\\\"\\\"));for(i=0;i<o;++i)for(n=0;n<a;++n)h=u,u=t[n],0===n?c.push([\\\"d\\\",i,\\\"s\\\",n,\\\"=t\\\",i,\\\"p\\\",u].join(\\\"\\\")):c.push([\\\"d\\\",i,\\\"s\\\",n,\\\"=(t\\\",i,\\\"p\\\",u,\\\"-s\\\",h,\\\"*t\\\",i,\\\"p\\\",h,\\\")\\\"].join(\\\"\\\"));for(c.length>0&&l.push(\\\"var \\\"+c.join(\\\",\\\")),n=a-1;n>=0;--n)u=t[n],l.push([\\\"for(i\\\",n,\\\"=0;i\\\",n,\\\"<s\\\",u,\\\";++i\\\",n,\\\"){\\\"].join(\\\"\\\"));for(l.push(r),n=0;n<a;++n){for(h=u,u=t[n],i=0;i<o;++i)l.push([\\\"p\\\",i,\\\"+=d\\\",i,\\\"s\\\",n].join(\\\"\\\"));s&&(n>0&&l.push([\\\"index[\\\",h,\\\"]-=s\\\",h].join(\\\"\\\")),l.push([\\\"++index[\\\",u,\\\"]\\\"].join(\\\"\\\"))),l.push(\\\"}\\\")}return l.join(\\\"\\\\n\\\")}function a(t,e,r){for(var n=t.body,i=[],a=[],o=0;o<t.args.length;++o){var s=t.args[o];if(!(s.count<=0)){var l=new RegExp(s.name,\\\"g\\\"),c=\\\"\\\",u=e.arrayArgs.indexOf(o);switch(e.argTypes[o]){case\\\"offset\\\":var h=e.offsetArgIndex.indexOf(o);u=e.offsetArgs[h].array,c=\\\"+q\\\"+h;case\\\"array\\\":c=\\\"p\\\"+u+c;var f=\\\"l\\\"+o,p=\\\"a\\\"+u;if(0===e.arrayBlockIndices[u])1===s.count?\\\"generic\\\"===r[u]?s.lvalue?(i.push([\\\"var \\\",f,\\\"=\\\",p,\\\".get(\\\",c,\\\")\\\"].join(\\\"\\\")),n=n.replace(l,f),a.push([p,\\\".set(\\\",c,\\\",\\\",f,\\\")\\\"].join(\\\"\\\"))):n=n.replace(l,[p,\\\".get(\\\",c,\\\")\\\"].join(\\\"\\\")):n=n.replace(l,[p,\\\"[\\\",c,\\\"]\\\"].join(\\\"\\\")):\\\"generic\\\"===r[u]?(i.push([\\\"var \\\",f,\\\"=\\\",p,\\\".get(\\\",c,\\\")\\\"].join(\\\"\\\")),n=n.replace(l,f),s.lvalue&&a.push([p,\\\".set(\\\",c,\\\",\\\",f,\\\")\\\"].join(\\\"\\\"))):(i.push([\\\"var \\\",f,\\\"=\\\",p,\\\"[\\\",c,\\\"]\\\"].join(\\\"\\\")),n=n.replace(l,f),s.lvalue&&a.push([p,\\\"[\\\",c,\\\"]=\\\",f].join(\\\"\\\")));else{for(var d=[s.name],g=[c],v=0;v<Math.abs(e.arrayBlockIndices[u]);v++)d.push(\\\"\\\\\\\\s*\\\\\\\\[([^\\\\\\\\]]+)\\\\\\\\]\\\"),g.push(\\\"$\\\"+(v+1)+\\\"*t\\\"+u+\\\"b\\\"+v);if(l=new RegExp(d.join(\\\"\\\"),\\\"g\\\"),c=g.join(\\\"+\\\"),\\\"generic\\\"===r[u])throw new Error(\\\"cwise: Generic arrays not supported in combination with blocks!\\\");n=n.replace(l,[p,\\\"[\\\",c,\\\"]\\\"].join(\\\"\\\"))}break;case\\\"scalar\\\":n=n.replace(l,\\\"Y\\\"+e.scalarArgs.indexOf(o));break;case\\\"index\\\":n=n.replace(l,\\\"index\\\");break;case\\\"shape\\\":n=n.replace(l,\\\"shape\\\")}}}return[i.join(\\\"\\\\n\\\"),n,a.join(\\\"\\\\n\\\")].join(\\\"\\\\n\\\").trim()}e.exports=function(t,e){for(var r=e[1].length-Math.abs(t.arrayBlockIndices[0])|0,o=new Array(t.arrayArgs.length),s=new Array(t.arrayArgs.length),l=0;l<t.arrayArgs.length;++l)s[l]=e[2*l],o[l]=e[2*l+1];var c=[],u=[],h=[],f=[],p=[];for(l=0;l<t.arrayArgs.length;++l){t.arrayBlockIndices[l]<0?(h.push(0),f.push(r),c.push(r),u.push(r+t.arrayBlockIndices[l])):(h.push(t.arrayBlockIndices[l]),f.push(t.arrayBlockIndices[l]+r),c.push(0),u.push(t.arrayBlockIndices[l]));for(var d=[],g=0;g<o[l].length;g++)h[l]<=o[l][g]&&o[l][g]<f[l]&&d.push(o[l][g]-h[l]);p.push(d)}var v=[\\\"SS\\\"],m=[\\\"'use strict'\\\"],y=[];for(g=0;g<r;++g)y.push([\\\"s\\\",g,\\\"=SS[\\\",g,\\\"]\\\"].join(\\\"\\\"));for(l=0;l<t.arrayArgs.length;++l){for(v.push(\\\"a\\\"+l),v.push(\\\"t\\\"+l),v.push(\\\"p\\\"+l),g=0;g<r;++g)y.push([\\\"t\\\",l,\\\"p\\\",g,\\\"=t\\\",l,\\\"[\\\",h[l]+g,\\\"]\\\"].join(\\\"\\\"));for(g=0;g<Math.abs(t.arrayBlockIndices[l]);++g)y.push([\\\"t\\\",l,\\\"b\\\",g,\\\"=t\\\",l,\\\"[\\\",c[l]+g,\\\"]\\\"].join(\\\"\\\"))}for(l=0;l<t.scalarArgs.length;++l)v.push(\\\"Y\\\"+l);if(t.shapeArgs.length>0&&y.push(\\\"shape=SS.slice(0)\\\"),t.indexArgs.length>0){var x=new Array(r);for(l=0;l<r;++l)x[l]=\\\"0\\\";y.push([\\\"index=[\\\",x.join(\\\",\\\"),\\\"]\\\"].join(\\\"\\\"))}for(l=0;l<t.offsetArgs.length;++l){var b=t.offsetArgs[l],_=[];for(g=0;g<b.offset.length;++g)0!==b.offset[g]&&(1===b.offset[g]?_.push([\\\"t\\\",b.array,\\\"p\\\",g].join(\\\"\\\")):_.push([b.offset[g],\\\"*t\\\",b.array,\\\"p\\\",g].join(\\\"\\\")));0===_.length?y.push(\\\"q\\\"+l+\\\"=0\\\"):y.push([\\\"q\\\",l,\\\"=\\\",_.join(\\\"+\\\")].join(\\\"\\\"))}var w=n([].concat(t.pre.thisVars).concat(t.body.thisVars).concat(t.post.thisVars));for((y=y.concat(w)).length>0&&m.push(\\\"var \\\"+y.join(\\\",\\\")),l=0;l<t.arrayArgs.length;++l)m.push(\\\"p\\\"+l+\\\"|=0\\\");t.pre.body.length>3&&m.push(a(t.pre,t,s));var k=a(t.body,t,s),T=function(t){for(var e=0,r=t[0].length;e<r;){for(var n=1;n<t.length;++n)if(t[n][e]!==t[0][e])return e;++e}return e}(p);T<r?m.push(function(t,e,r,n){for(var a=e.length,o=r.arrayArgs.length,s=r.blockSize,l=r.indexArgs.length>0,c=[],u=0;u<o;++u)c.push([\\\"var offset\\\",u,\\\"=p\\\",u].join(\\\"\\\"));for(u=t;u<a;++u)c.push([\\\"for(var j\\\"+u+\\\"=SS[\\\",e[u],\\\"]|0;j\\\",u,\\\">0;){\\\"].join(\\\"\\\")),c.push([\\\"if(j\\\",u,\\\"<\\\",s,\\\"){\\\"].join(\\\"\\\")),c.push([\\\"s\\\",e[u],\\\"=j\\\",u].join(\\\"\\\")),c.push([\\\"j\\\",u,\\\"=0\\\"].join(\\\"\\\")),c.push([\\\"}else{s\\\",e[u],\\\"=\\\",s].join(\\\"\\\")),c.push([\\\"j\\\",u,\\\"-=\\\",s,\\\"}\\\"].join(\\\"\\\")),l&&c.push([\\\"index[\\\",e[u],\\\"]=j\\\",u].join(\\\"\\\"));for(u=0;u<o;++u){for(var h=[\\\"offset\\\"+u],f=t;f<a;++f)h.push([\\\"j\\\",f,\\\"*t\\\",u,\\\"p\\\",e[f]].join(\\\"\\\"));c.push([\\\"p\\\",u,\\\"=(\\\",h.join(\\\"+\\\"),\\\")\\\"].join(\\\"\\\"))}for(c.push(i(e,r,n)),u=t;u<a;++u)c.push(\\\"}\\\");return c.join(\\\"\\\\n\\\")}(T,p[0],t,k)):m.push(i(p[0],t,k)),t.post.body.length>3&&m.push(a(t.post,t,s)),t.debug&&console.log(\\\"-----Generated cwise routine for \\\",e,\\\":\\\\n\\\"+m.join(\\\"\\\\n\\\")+\\\"\\\\n----------\\\");var A=[t.funcName||\\\"unnamed\\\",\\\"_cwise_loop_\\\",o[0].join(\\\"s\\\"),\\\"m\\\",T,function(t){for(var e=new Array(t.length),r=!0,n=0;n<t.length;++n){var i=t[n],a=i.match(/\\\\d+/);a=a?a[0]:\\\"\\\",0===i.charAt(0)?e[n]=\\\"u\\\"+i.charAt(1)+a:e[n]=i.charAt(0)+a,n>0&&(r=r&&e[n]===e[n-1])}return r?e[0]:e.join(\\\"\\\")}(s)].join(\\\"\\\");return new Function([\\\"function \\\",A,\\\"(\\\",v.join(\\\",\\\"),\\\"){\\\",m.join(\\\"\\\\n\\\"),\\\"} return \\\",A].join(\\\"\\\"))()}},{uniq:547}],148:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./compile.js\\\");e.exports=function(t){var e=[\\\"'use strict'\\\",\\\"var CACHED={}\\\"],r=[],i=t.funcName+\\\"_cwise_thunk\\\";e.push([\\\"return function \\\",i,\\\"(\\\",t.shimArgs.join(\\\",\\\"),\\\"){\\\"].join(\\\"\\\"));for(var a=[],o=[],s=[[\\\"array\\\",t.arrayArgs[0],\\\".shape.slice(\\\",Math.max(0,t.arrayBlockIndices[0]),t.arrayBlockIndices[0]<0?\\\",\\\"+t.arrayBlockIndices[0]+\\\")\\\":\\\")\\\"].join(\\\"\\\")],l=[],c=[],u=0;u<t.arrayArgs.length;++u){var h=t.arrayArgs[u];r.push([\\\"t\\\",h,\\\"=array\\\",h,\\\".dtype,\\\",\\\"r\\\",h,\\\"=array\\\",h,\\\".order\\\"].join(\\\"\\\")),a.push(\\\"t\\\"+h),a.push(\\\"r\\\"+h),o.push(\\\"t\\\"+h),o.push(\\\"r\\\"+h+\\\".join()\\\"),s.push(\\\"array\\\"+h+\\\".data\\\"),s.push(\\\"array\\\"+h+\\\".stride\\\"),s.push(\\\"array\\\"+h+\\\".offset|0\\\"),u>0&&(l.push(\\\"array\\\"+t.arrayArgs[0]+\\\".shape.length===array\\\"+h+\\\".shape.length+\\\"+(Math.abs(t.arrayBlockIndices[0])-Math.abs(t.arrayBlockIndices[u]))),c.push(\\\"array\\\"+t.arrayArgs[0]+\\\".shape[shapeIndex+\\\"+Math.max(0,t.arrayBlockIndices[0])+\\\"]===array\\\"+h+\\\".shape[shapeIndex+\\\"+Math.max(0,t.arrayBlockIndices[u])+\\\"]\\\"))}for(t.arrayArgs.length>1&&(e.push(\\\"if (!(\\\"+l.join(\\\" && \\\")+\\\")) throw new Error('cwise: Arrays do not all have the same dimensionality!')\\\"),e.push(\\\"for(var shapeIndex=array\\\"+t.arrayArgs[0]+\\\".shape.length-\\\"+Math.abs(t.arrayBlockIndices[0])+\\\"; shapeIndex--\\\\x3e0;) {\\\"),e.push(\\\"if (!(\\\"+c.join(\\\" && \\\")+\\\")) throw new Error('cwise: Arrays do not all have the same shape!')\\\"),e.push(\\\"}\\\")),u=0;u<t.scalarArgs.length;++u)s.push(\\\"scalar\\\"+t.scalarArgs[u]);return r.push([\\\"type=[\\\",o.join(\\\",\\\"),\\\"].join()\\\"].join(\\\"\\\")),r.push(\\\"proc=CACHED[type]\\\"),e.push(\\\"var \\\"+r.join(\\\",\\\")),e.push([\\\"if(!proc){\\\",\\\"CACHED[type]=proc=compile([\\\",a.join(\\\",\\\"),\\\"])}\\\",\\\"return proc(\\\",s.join(\\\",\\\"),\\\")}\\\"].join(\\\"\\\")),t.debug&&console.log(\\\"-----Generated thunk:\\\\n\\\"+e.join(\\\"\\\\n\\\")+\\\"\\\\n----------\\\"),new Function(\\\"compile\\\",e.join(\\\"\\\\n\\\"))(n.bind(void 0,t))}},{\\\"./compile.js\\\":147}],149:[function(t,e,r){e.exports=t(\\\"cwise-compiler\\\")},{\\\"cwise-compiler\\\":146}],150:[function(t,e,r){\\\"use strict\\\";var n,i=t(\\\"es5-ext/object/copy\\\"),a=t(\\\"es5-ext/object/normalize-options\\\"),o=t(\\\"es5-ext/object/valid-callable\\\"),s=t(\\\"es5-ext/object/map\\\"),l=t(\\\"es5-ext/object/valid-callable\\\"),c=t(\\\"es5-ext/object/valid-value\\\"),u=Function.prototype.bind,h=Object.defineProperty,f=Object.prototype.hasOwnProperty;n=function(t,e,r){var n,a=c(e)&&l(e.value);return delete(n=i(e)).writable,delete n.value,n.get=function(){return!r.overwriteDefinition&&f.call(this,t)?a:(e.value=u.call(a,r.resolveContext?r.resolveContext(this):this),h(this,t,e),this[t])},n},e.exports=function(t){var e=a(arguments[1]);return null!=e.resolveContext&&o(e.resolveContext),s(t,function(t,r){return n(r,t,e)})}},{\\\"es5-ext/object/copy\\\":189,\\\"es5-ext/object/map\\\":198,\\\"es5-ext/object/normalize-options\\\":199,\\\"es5-ext/object/valid-callable\\\":203,\\\"es5-ext/object/valid-value\\\":205}],151:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"es5-ext/object/assign\\\"),i=t(\\\"es5-ext/object/normalize-options\\\"),a=t(\\\"es5-ext/object/is-callable\\\"),o=t(\\\"es5-ext/string/#/contains\\\");(e.exports=function(t,e){var r,a,s,l,c;return arguments.length<2||\\\"string\\\"!=typeof t?(l=e,e=t,t=null):l=arguments[2],null==t?(r=s=!0,a=!1):(r=o.call(t,\\\"c\\\"),a=o.call(t,\\\"e\\\"),s=o.call(t,\\\"w\\\")),c={value:e,configurable:r,enumerable:a,writable:s},l?n(i(l),c):c}).gs=function(t,e,r){var s,l,c,u;return\\\"string\\\"!=typeof t?(c=r,r=e,e=t,t=null):c=arguments[3],null==e?e=void 0:a(e)?null==r?r=void 0:a(r)||(c=r,r=void 0):(c=e,e=r=void 0),null==t?(s=!0,l=!1):(s=o.call(t,\\\"c\\\"),l=o.call(t,\\\"e\\\")),u={get:e,set:r,configurable:s,enumerable:l},c?n(i(c),u):u}},{\\\"es5-ext/object/assign\\\":186,\\\"es5-ext/object/is-callable\\\":192,\\\"es5-ext/object/normalize-options\\\":199,\\\"es5-ext/string/#/contains\\\":206}],152:[function(t,e,r){var n;n=this,function(t){\\\"use strict\\\";function e(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function r(t){var r;return 1===t.length&&(r=t,t=function(t,n){return e(r(t),n)}),{left:function(e,r,n,i){for(null==n&&(n=0),null==i&&(i=e.length);n<i;){var a=n+i>>>1;t(e[a],r)<0?n=a+1:i=a}return n},right:function(e,r,n,i){for(null==n&&(n=0),null==i&&(i=e.length);n<i;){var a=n+i>>>1;t(e[a],r)>0?i=a:n=a+1}return n}}}var n=r(e),i=n.right,a=n.left;function o(t,e){return[t,e]}function s(t){return null===t?NaN:+t}function l(t,e){var r,n,i=t.length,a=0,o=-1,l=0,c=0;if(null==e)for(;++o<i;)isNaN(r=s(t[o]))||(c+=(n=r-l)*(r-(l+=n/++a)));else for(;++o<i;)isNaN(r=s(e(t[o],o,t)))||(c+=(n=r-l)*(r-(l+=n/++a)));if(a>1)return c/(a-1)}function c(t,e){var r=l(t,e);return r?Math.sqrt(r):r}function u(t,e){var r,n,i,a=t.length,o=-1;if(null==e){for(;++o<a;)if(null!=(r=t[o])&&r>=r)for(n=i=r;++o<a;)null!=(r=t[o])&&(n>r&&(n=r),i<r&&(i=r))}else for(;++o<a;)if(null!=(r=e(t[o],o,t))&&r>=r)for(n=i=r;++o<a;)null!=(r=e(t[o],o,t))&&(n>r&&(n=r),i<r&&(i=r));return[n,i]}var h=Array.prototype,f=h.slice,p=h.map;function d(t){return function(){return t}}function g(t){return t}function v(t,e,r){t=+t,e=+e,r=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+r;for(var n=-1,i=0|Math.max(0,Math.ceil((e-t)/r)),a=new Array(i);++n<i;)a[n]=t+n*r;return a}var m=Math.sqrt(50),y=Math.sqrt(10),x=Math.sqrt(2);function b(t,e,r){var n=(e-t)/Math.max(0,r),i=Math.floor(Math.log(n)/Math.LN10),a=n/Math.pow(10,i);return i>=0?(a>=m?10:a>=y?5:a>=x?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=m?10:a>=y?5:a>=x?2:1)}function _(t,e,r){var n=Math.abs(e-t)/Math.max(0,r),i=Math.pow(10,Math.floor(Math.log(n)/Math.LN10)),a=n/i;return a>=m?i*=10:a>=y?i*=5:a>=x&&(i*=2),e<t?-i:i}function w(t){return Math.ceil(Math.log(t.length)/Math.LN2)+1}function k(t,e,r){if(null==r&&(r=s),n=t.length){if((e=+e)<=0||n<2)return+r(t[0],0,t);if(e>=1)return+r(t[n-1],n-1,t);var n,i=(n-1)*e,a=Math.floor(i),o=+r(t[a],a,t);return o+(+r(t[a+1],a+1,t)-o)*(i-a)}}function T(t,e){var r,n,i=t.length,a=-1;if(null==e){for(;++a<i;)if(null!=(r=t[a])&&r>=r)for(n=r;++a<i;)null!=(r=t[a])&&n>r&&(n=r)}else for(;++a<i;)if(null!=(r=e(t[a],a,t))&&r>=r)for(n=r;++a<i;)null!=(r=e(t[a],a,t))&&n>r&&(n=r);return n}function A(t){if(!(i=t.length))return[];for(var e=-1,r=T(t,M),n=new Array(r);++e<r;)for(var i,a=-1,o=n[e]=new Array(i);++a<i;)o[a]=t[a][e];return n}function M(t){return t.length}t.bisect=i,t.bisectRight=i,t.bisectLeft=a,t.ascending=e,t.bisector=r,t.cross=function(t,e,r){var n,i,a,s,l=t.length,c=e.length,u=new Array(l*c);for(null==r&&(r=o),n=a=0;n<l;++n)for(s=t[n],i=0;i<c;++i,++a)u[a]=r(s,e[i]);return u},t.descending=function(t,e){return e<t?-1:e>t?1:e>=t?0:NaN},t.deviation=c,t.extent=u,t.histogram=function(){var t=g,e=u,r=w;function n(n){var a,o,s=n.length,l=new Array(s);for(a=0;a<s;++a)l[a]=t(n[a],a,n);var c=e(l),u=c[0],h=c[1],f=r(l,u,h);Array.isArray(f)||(f=_(u,h,f),f=v(Math.ceil(u/f)*f,h,f));for(var p=f.length;f[0]<=u;)f.shift(),--p;for(;f[p-1]>h;)f.pop(),--p;var d,g=new Array(p+1);for(a=0;a<=p;++a)(d=g[a]=[]).x0=a>0?f[a-1]:u,d.x1=a<p?f[a]:h;for(a=0;a<s;++a)u<=(o=l[a])&&o<=h&&g[i(f,o,0,p)].push(n[a]);return g}return n.value=function(e){return arguments.length?(t=\\\"function\\\"==typeof e?e:d(e),n):t},n.domain=function(t){return arguments.length?(e=\\\"function\\\"==typeof t?t:d([t[0],t[1]]),n):e},n.thresholds=function(t){return arguments.length?(r=\\\"function\\\"==typeof t?t:Array.isArray(t)?d(f.call(t)):d(t),n):r},n},t.thresholdFreedmanDiaconis=function(t,r,n){return t=p.call(t,s).sort(e),Math.ceil((n-r)/(2*(k(t,.75)-k(t,.25))*Math.pow(t.length,-1/3)))},t.thresholdScott=function(t,e,r){return Math.ceil((r-e)/(3.5*c(t)*Math.pow(t.length,-1/3)))},t.thresholdSturges=w,t.max=function(t,e){var r,n,i=t.length,a=-1;if(null==e){for(;++a<i;)if(null!=(r=t[a])&&r>=r)for(n=r;++a<i;)null!=(r=t[a])&&r>n&&(n=r)}else for(;++a<i;)if(null!=(r=e(t[a],a,t))&&r>=r)for(n=r;++a<i;)null!=(r=e(t[a],a,t))&&r>n&&(n=r);return n},t.mean=function(t,e){var r,n=t.length,i=n,a=-1,o=0;if(null==e)for(;++a<n;)isNaN(r=s(t[a]))?--i:o+=r;else for(;++a<n;)isNaN(r=s(e(t[a],a,t)))?--i:o+=r;if(i)return o/i},t.median=function(t,r){var n,i=t.length,a=-1,o=[];if(null==r)for(;++a<i;)isNaN(n=s(t[a]))||o.push(n);else for(;++a<i;)isNaN(n=s(r(t[a],a,t)))||o.push(n);return k(o.sort(e),.5)},t.merge=function(t){for(var e,r,n,i=t.length,a=-1,o=0;++a<i;)o+=t[a].length;for(r=new Array(o);--i>=0;)for(e=(n=t[i]).length;--e>=0;)r[--o]=n[e];return r},t.min=T,t.pairs=function(t,e){null==e&&(e=o);for(var r=0,n=t.length-1,i=t[0],a=new Array(n<0?0:n);r<n;)a[r]=e(i,i=t[++r]);return a},t.permute=function(t,e){for(var r=e.length,n=new Array(r);r--;)n[r]=t[e[r]];return n},t.quantile=k,t.range=v,t.scan=function(t,r){if(n=t.length){var n,i,a=0,o=0,s=t[o];for(null==r&&(r=e);++a<n;)(r(i=t[a],s)<0||0!==r(s,s))&&(s=i,o=a);return 0===r(s,s)?o:void 0}},t.shuffle=function(t,e,r){for(var n,i,a=(null==r?t.length:r)-(e=null==e?0:+e);a;)i=Math.random()*a--|0,n=t[a+e],t[a+e]=t[i+e],t[i+e]=n;return t},t.sum=function(t,e){var r,n=t.length,i=-1,a=0;if(null==e)for(;++i<n;)(r=+t[i])&&(a+=r);else for(;++i<n;)(r=+e(t[i],i,t))&&(a+=r);return a},t.ticks=function(t,e,r){var n,i,a,o,s=-1;if(r=+r,(t=+t)==(e=+e)&&r>0)return[t];if((n=e<t)&&(i=t,t=e,e=i),0===(o=b(t,e,r))||!isFinite(o))return[];if(o>0)for(t=Math.ceil(t/o),e=Math.floor(e/o),a=new Array(i=Math.ceil(e-t+1));++s<i;)a[s]=(t+s)*o;else for(t=Math.floor(t*o),e=Math.ceil(e*o),a=new Array(i=Math.ceil(t-e+1));++s<i;)a[s]=(t-s)/o;return n&&a.reverse(),a},t.tickIncrement=b,t.tickStep=_,t.transpose=A,t.variance=l,t.zip=function(){return A(arguments)},Object.defineProperty(t,\\\"__esModule\\\",{value:!0})}(\\\"object\\\"==typeof r&&\\\"undefined\\\"!=typeof e?r:n.d3=n.d3||{})},{}],153:[function(t,e,r){var n;n=this,function(t){\\\"use strict\\\";function e(){}function r(t,r){var n=new e;if(t instanceof e)t.each(function(t,e){n.set(e,t)});else if(Array.isArray(t)){var i,a=-1,o=t.length;if(null==r)for(;++a<o;)n.set(a,t[a]);else for(;++a<o;)n.set(r(i=t[a],a,t),i)}else if(t)for(var s in t)n.set(s,t[s]);return n}e.prototype=r.prototype={constructor:e,has:function(t){return\\\"$\\\"+t in this},get:function(t){return this[\\\"$\\\"+t]},set:function(t,e){return this[\\\"$\\\"+t]=e,this},remove:function(t){var e=\\\"$\\\"+t;return e in this&&delete this[e]},clear:function(){for(var t in this)\\\"$\\\"===t[0]&&delete this[t]},keys:function(){var t=[];for(var e in this)\\\"$\\\"===e[0]&&t.push(e.slice(1));return t},values:function(){var t=[];for(var e in this)\\\"$\\\"===e[0]&&t.push(this[e]);return t},entries:function(){var t=[];for(var e in this)\\\"$\\\"===e[0]&&t.push({key:e.slice(1),value:this[e]});return t},size:function(){var t=0;for(var e in this)\\\"$\\\"===e[0]&&++t;return t},empty:function(){for(var t in this)if(\\\"$\\\"===t[0])return!1;return!0},each:function(t){for(var e in this)\\\"$\\\"===e[0]&&t(this[e],e.slice(1),this)}};function n(){return{}}function i(t,e,r){t[e]=r}function a(){return r()}function o(t,e,r){t.set(e,r)}function s(){}var l=r.prototype;function c(t,e){var r=new s;if(t instanceof s)t.each(function(t){r.add(t)});else if(t){var n=-1,i=t.length;if(null==e)for(;++n<i;)r.add(t[n]);else for(;++n<i;)r.add(e(t[n],n,t))}return r}s.prototype=c.prototype={constructor:s,has:l.has,add:function(t){return this[\\\"$\\\"+(t+=\\\"\\\")]=t,this},remove:l.remove,clear:l.clear,values:l.keys,size:l.size,empty:l.empty,each:l.each};t.nest=function(){var t,e,s,l=[],c=[];function u(n,i,a,o){if(i>=l.length)return null!=t&&n.sort(t),null!=e?e(n):n;for(var s,c,h,f=-1,p=n.length,d=l[i++],g=r(),v=a();++f<p;)(h=g.get(s=d(c=n[f])+\\\"\\\"))?h.push(c):g.set(s,[c]);return g.each(function(t,e){o(v,e,u(t,i,a,o))}),v}return s={object:function(t){return u(t,0,n,i)},map:function(t){return u(t,0,a,o)},entries:function(t){return function t(r,n){if(++n>l.length)return r;var i,a=c[n-1];return null!=e&&n>=l.length?i=r.entries():(i=[],r.each(function(e,r){i.push({key:r,values:t(e,n)})})),null!=a?i.sort(function(t,e){return a(t.key,e.key)}):i}(u(t,0,a,o),0)},key:function(t){return l.push(t),s},sortKeys:function(t){return c[l.length-1]=t,s},sortValues:function(e){return t=e,s},rollup:function(t){return e=t,s}}},t.set=c,t.map=r,t.keys=function(t){var e=[];for(var r in t)e.push(r);return e},t.values=function(t){var e=[];for(var r in t)e.push(t[r]);return e},t.entries=function(t){var e=[];for(var r in t)e.push({key:r,value:t[r]});return e},Object.defineProperty(t,\\\"__esModule\\\",{value:!0})}(\\\"object\\\"==typeof r&&\\\"undefined\\\"!=typeof e?r:n.d3=n.d3||{})},{}],154:[function(t,e,r){var n;n=this,function(t){\\\"use strict\\\";function e(t,e,r){t.prototype=e.prototype=r,r.constructor=t}function r(t,e){var r=Object.create(t.prototype);for(var n in e)r[n]=e[n];return r}function n(){}var i=\\\"\\\\\\\\s*([+-]?\\\\\\\\d+)\\\\\\\\s*\\\",a=\\\"\\\\\\\\s*([+-]?\\\\\\\\d*\\\\\\\\.?\\\\\\\\d+(?:[eE][+-]?\\\\\\\\d+)?)\\\\\\\\s*\\\",o=\\\"\\\\\\\\s*([+-]?\\\\\\\\d*\\\\\\\\.?\\\\\\\\d+(?:[eE][+-]?\\\\\\\\d+)?)%\\\\\\\\s*\\\",s=/^#([0-9a-f]{3})$/,l=/^#([0-9a-f]{6})$/,c=new RegExp(\\\"^rgb\\\\\\\\(\\\"+[i,i,i]+\\\"\\\\\\\\)$\\\"),u=new RegExp(\\\"^rgb\\\\\\\\(\\\"+[o,o,o]+\\\"\\\\\\\\)$\\\"),h=new RegExp(\\\"^rgba\\\\\\\\(\\\"+[i,i,i,a]+\\\"\\\\\\\\)$\\\"),f=new RegExp(\\\"^rgba\\\\\\\\(\\\"+[o,o,o,a]+\\\"\\\\\\\\)$\\\"),p=new RegExp(\\\"^hsl\\\\\\\\(\\\"+[a,o,o]+\\\"\\\\\\\\)$\\\"),d=new RegExp(\\\"^hsla\\\\\\\\(\\\"+[a,o,o,a]+\\\"\\\\\\\\)$\\\"),g={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function v(t){var e;return t=(t+\\\"\\\").trim().toLowerCase(),(e=s.exec(t))?new _((e=parseInt(e[1],16))>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):(e=l.exec(t))?m(parseInt(e[1],16)):(e=c.exec(t))?new _(e[1],e[2],e[3],1):(e=u.exec(t))?new _(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=h.exec(t))?y(e[1],e[2],e[3],e[4]):(e=f.exec(t))?y(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=p.exec(t))?k(e[1],e[2]/100,e[3]/100,1):(e=d.exec(t))?k(e[1],e[2]/100,e[3]/100,e[4]):g.hasOwnProperty(t)?m(g[t]):\\\"transparent\\\"===t?new _(NaN,NaN,NaN,0):null}function m(t){return new _(t>>16&255,t>>8&255,255&t,1)}function y(t,e,r,n){return n<=0&&(t=e=r=NaN),new _(t,e,r,n)}function x(t){return t instanceof n||(t=v(t)),t?new _((t=t.rgb()).r,t.g,t.b,t.opacity):new _}function b(t,e,r,n){return 1===arguments.length?x(t):new _(t,e,r,null==n?1:n)}function _(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function w(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?\\\"0\\\":\\\"\\\")+t.toString(16)}function k(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new A(t,e,r,n)}function T(t,e,r,i){return 1===arguments.length?function(t){if(t instanceof A)return new A(t.h,t.s,t.l,t.opacity);if(t instanceof n||(t=v(t)),!t)return new A;if(t instanceof A)return t;var e=(t=t.rgb()).r/255,r=t.g/255,i=t.b/255,a=Math.min(e,r,i),o=Math.max(e,r,i),s=NaN,l=o-a,c=(o+a)/2;return l?(s=e===o?(r-i)/l+6*(r<i):r===o?(i-e)/l+2:(e-r)/l+4,l/=c<.5?o+a:2-o-a,s*=60):l=c>0&&c<1?0:s,new A(s,l,c,t.opacity)}(t):new A(t,e,r,null==i?1:i)}function A(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function M(t,e,r){return 255*(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)}e(n,v,{displayable:function(){return this.rgb().displayable()},hex:function(){return this.rgb().hex()},toString:function(){return this.rgb()+\\\"\\\"}}),e(_,b,r(n,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new _(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new _(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function(){return\\\"#\\\"+w(this.r)+w(this.g)+w(this.b)},toString:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?\\\"rgb(\\\":\\\"rgba(\\\")+Math.max(0,Math.min(255,Math.round(this.r)||0))+\\\", \\\"+Math.max(0,Math.min(255,Math.round(this.g)||0))+\\\", \\\"+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?\\\")\\\":\\\", \\\"+t+\\\")\\\")}})),e(A,T,r(n,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new A(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new A(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new _(M(t>=240?t-240:t+120,i,n),M(t,i,n),M(t<120?t+240:t-120,i,n),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var S=Math.PI/180,E=180/Math.PI,C=.96422,L=1,P=.82521,O=4/29,z=6/29,I=3*z*z,D=z*z*z;function R(t){if(t instanceof B)return new B(t.l,t.a,t.b,t.opacity);if(t instanceof G){if(isNaN(t.h))return new B(t.l,0,0,t.opacity);var e=t.h*S;return new B(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}t instanceof _||(t=x(t));var r,n,i=V(t.r),a=V(t.g),o=V(t.b),s=N((.2225045*i+.7168786*a+.0606169*o)/L);return i===a&&a===o?r=n=s:(r=N((.4360747*i+.3850649*a+.1430804*o)/C),n=N((.0139322*i+.0971045*a+.7141733*o)/P)),new B(116*s-16,500*(r-s),200*(s-n),t.opacity)}function F(t,e,r,n){return 1===arguments.length?R(t):new B(t,e,r,null==n?1:n)}function B(t,e,r,n){this.l=+t,this.a=+e,this.b=+r,this.opacity=+n}function N(t){return t>D?Math.pow(t,1/3):t/I+O}function j(t){return t>z?t*t*t:I*(t-O)}function U(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function V(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function q(t){if(t instanceof G)return new G(t.h,t.c,t.l,t.opacity);if(t instanceof B||(t=R(t)),0===t.a&&0===t.b)return new G(NaN,0,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*E;return new G(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function H(t,e,r,n){return 1===arguments.length?q(t):new G(t,e,r,null==n?1:n)}function G(t,e,r,n){this.h=+t,this.c=+e,this.l=+r,this.opacity=+n}e(B,F,r(n,{brighter:function(t){return new B(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new B(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return new _(U(3.1338561*(e=C*j(e))-1.6168667*(t=L*j(t))-.4906146*(r=P*j(r))),U(-.9787684*e+1.9161415*t+.033454*r),U(.0719453*e-.2289914*t+1.4052427*r),this.opacity)}})),e(G,H,r(n,{brighter:function(t){return new G(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new G(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return R(this).rgb()}}));var Y=-.14861,W=1.78277,X=-.29227,Z=-.90649,J=1.97294,K=J*Z,$=J*W,Q=W*X-Z*Y;function tt(t,e,r,n){return 1===arguments.length?function(t){if(t instanceof et)return new et(t.h,t.s,t.l,t.opacity);t instanceof _||(t=x(t));var e=t.r/255,r=t.g/255,n=t.b/255,i=(Q*n+K*e-$*r)/(Q+K-$),a=n-i,o=(J*(r-i)-X*a)/Z,s=Math.sqrt(o*o+a*a)/(J*i*(1-i)),l=s?Math.atan2(o,a)*E-120:NaN;return new et(l<0?l+360:l,s,i,t.opacity)}(t):new et(t,e,r,null==n?1:n)}function et(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}e(et,tt,r(n,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new et(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new et(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*S,e=+this.l,r=isNaN(this.s)?0:this.s*e*(1-e),n=Math.cos(t),i=Math.sin(t);return new _(255*(e+r*(Y*n+W*i)),255*(e+r*(X*n+Z*i)),255*(e+r*(J*n)),this.opacity)}})),t.color=v,t.rgb=b,t.hsl=T,t.lab=F,t.hcl=H,t.lch=function(t,e,r,n){return 1===arguments.length?q(t):new G(r,e,t,null==n?1:n)},t.gray=function(t,e){return new B(t,0,0,null==e?1:e)},t.cubehelix=tt,Object.defineProperty(t,\\\"__esModule\\\",{value:!0})}(\\\"object\\\"==typeof r&&\\\"undefined\\\"!=typeof e?r:n.d3=n.d3||{})},{}],155:[function(t,e,r){var n;n=this,function(t){\\\"use strict\\\";var e={value:function(){}};function r(){for(var t,e=0,r=arguments.length,i={};e<r;++e){if(!(t=arguments[e]+\\\"\\\")||t in i)throw new Error(\\\"illegal type: \\\"+t);i[t]=[]}return new n(i)}function n(t){this._=t}function i(t,e){for(var r,n=0,i=t.length;n<i;++n)if((r=t[n]).name===e)return r.value}function a(t,r,n){for(var i=0,a=t.length;i<a;++i)if(t[i].name===r){t[i]=e,t=t.slice(0,i).concat(t.slice(i+1));break}return null!=n&&t.push({name:r,value:n}),t}n.prototype=r.prototype={constructor:n,on:function(t,e){var r,n,o=this._,s=(n=o,(t+\\\"\\\").trim().split(/^|\\\\s+/).map(function(t){var e=\\\"\\\",r=t.indexOf(\\\".\\\");if(r>=0&&(e=t.slice(r+1),t=t.slice(0,r)),t&&!n.hasOwnProperty(t))throw new Error(\\\"unknown type: \\\"+t);return{type:t,name:e}})),l=-1,c=s.length;if(!(arguments.length<2)){if(null!=e&&\\\"function\\\"!=typeof e)throw new Error(\\\"invalid callback: \\\"+e);for(;++l<c;)if(r=(t=s[l]).type)o[r]=a(o[r],t.name,e);else if(null==e)for(r in o)o[r]=a(o[r],t.name,null);return this}for(;++l<c;)if((r=(t=s[l]).type)&&(r=i(o[r],t.name)))return r},copy:function(){var t={},e=this._;for(var r in e)t[r]=e[r].slice();return new n(t)},call:function(t,e){if((r=arguments.length-2)>0)for(var r,n,i=new Array(r),a=0;a<r;++a)i[a]=arguments[a+2];if(!this._.hasOwnProperty(t))throw new Error(\\\"unknown type: \\\"+t);for(a=0,r=(n=this._[t]).length;a<r;++a)n[a].value.apply(e,i)},apply:function(t,e,r){if(!this._.hasOwnProperty(t))throw new Error(\\\"unknown type: \\\"+t);for(var n=this._[t],i=0,a=n.length;i<a;++i)n[i].value.apply(e,r)}},t.dispatch=r,Object.defineProperty(t,\\\"__esModule\\\",{value:!0})}(\\\"object\\\"==typeof r&&\\\"undefined\\\"!=typeof e?r:n.d3=n.d3||{})},{}],156:[function(t,e,r){var n,i;n=this,i=function(t,e,r,n,i){\\\"use strict\\\";var a=function(t){return function(){return t}},o=function(){return 1e-6*(Math.random()-.5)};function s(t){return t.x+t.vx}function l(t){return t.y+t.vy}function c(t){return t.index}function u(t,e){var r=t.get(e);if(!r)throw new Error(\\\"missing: \\\"+e);return r}function h(t){return t.x}function f(t){return t.y}var p=10,d=Math.PI*(3-Math.sqrt(5));t.forceCenter=function(t,e){var r;function n(){var n,i,a=r.length,o=0,s=0;for(n=0;n<a;++n)o+=(i=r[n]).x,s+=i.y;for(o=o/a-t,s=s/a-e,n=0;n<a;++n)(i=r[n]).x-=o,i.y-=s}return null==t&&(t=0),null==e&&(e=0),n.initialize=function(t){r=t},n.x=function(e){return arguments.length?(t=+e,n):t},n.y=function(t){return arguments.length?(e=+t,n):e},n},t.forceCollide=function(t){var r,n,i=1,c=1;function u(){for(var t,a,u,f,p,d,g,v=r.length,m=0;m<c;++m)for(a=e.quadtree(r,s,l).visitAfter(h),t=0;t<v;++t)u=r[t],d=n[u.index],g=d*d,f=u.x+u.vx,p=u.y+u.vy,a.visit(y);function y(t,e,r,n,a){var s=t.data,l=t.r,c=d+l;if(!s)return e>f+c||n<f-c||r>p+c||a<p-c;if(s.index>u.index){var h=f-s.x-s.vx,v=p-s.y-s.vy,m=h*h+v*v;m<c*c&&(0===h&&(m+=(h=o())*h),0===v&&(m+=(v=o())*v),m=(c-(m=Math.sqrt(m)))/m*i,u.vx+=(h*=m)*(c=(l*=l)/(g+l)),u.vy+=(v*=m)*c,s.vx-=h*(c=1-c),s.vy-=v*c)}}}function h(t){if(t.data)return t.r=n[t.data.index];for(var e=t.r=0;e<4;++e)t[e]&&t[e].r>t.r&&(t.r=t[e].r)}function f(){if(r){var e,i,a=r.length;for(n=new Array(a),e=0;e<a;++e)i=r[e],n[i.index]=+t(i,e,r)}}return\\\"function\\\"!=typeof t&&(t=a(null==t?1:+t)),u.initialize=function(t){r=t,f()},u.iterations=function(t){return arguments.length?(c=+t,u):c},u.strength=function(t){return arguments.length?(i=+t,u):i},u.radius=function(e){return arguments.length?(t=\\\"function\\\"==typeof e?e:a(+e),f(),u):t},u},t.forceLink=function(t){var e,n,i,s,l,h=c,f=function(t){return 1/Math.min(s[t.source.index],s[t.target.index])},p=a(30),d=1;function g(r){for(var i=0,a=t.length;i<d;++i)for(var s,c,u,h,f,p,g,v=0;v<a;++v)c=(s=t[v]).source,h=(u=s.target).x+u.vx-c.x-c.vx||o(),f=u.y+u.vy-c.y-c.vy||o(),h*=p=((p=Math.sqrt(h*h+f*f))-n[v])/p*r*e[v],f*=p,u.vx-=h*(g=l[v]),u.vy-=f*g,c.vx+=h*(g=1-g),c.vy+=f*g}function v(){if(i){var a,o,c=i.length,f=t.length,p=r.map(i,h);for(a=0,s=new Array(c);a<f;++a)(o=t[a]).index=a,\\\"object\\\"!=typeof o.source&&(o.source=u(p,o.source)),\\\"object\\\"!=typeof o.target&&(o.target=u(p,o.target)),s[o.source.index]=(s[o.source.index]||0)+1,s[o.target.index]=(s[o.target.index]||0)+1;for(a=0,l=new Array(f);a<f;++a)o=t[a],l[a]=s[o.source.index]/(s[o.source.index]+s[o.target.index]);e=new Array(f),m(),n=new Array(f),y()}}function m(){if(i)for(var r=0,n=t.length;r<n;++r)e[r]=+f(t[r],r,t)}function y(){if(i)for(var e=0,r=t.length;e<r;++e)n[e]=+p(t[e],e,t)}return null==t&&(t=[]),g.initialize=function(t){i=t,v()},g.links=function(e){return arguments.length?(t=e,v(),g):t},g.id=function(t){return arguments.length?(h=t,g):h},g.iterations=function(t){return arguments.length?(d=+t,g):d},g.strength=function(t){return arguments.length?(f=\\\"function\\\"==typeof t?t:a(+t),m(),g):f},g.distance=function(t){return arguments.length?(p=\\\"function\\\"==typeof t?t:a(+t),y(),g):p},g},t.forceManyBody=function(){var t,r,n,i,s=a(-30),l=1,c=1/0,u=.81;function p(i){var a,o=t.length,s=e.quadtree(t,h,f).visitAfter(g);for(n=i,a=0;a<o;++a)r=t[a],s.visit(v)}function d(){if(t){var e,r,n=t.length;for(i=new Array(n),e=0;e<n;++e)r=t[e],i[r.index]=+s(r,e,t)}}function g(t){var e,r,n,a,o,s=0,l=0;if(t.length){for(n=a=o=0;o<4;++o)(e=t[o])&&(r=Math.abs(e.value))&&(s+=e.value,l+=r,n+=r*e.x,a+=r*e.y);t.x=n/l,t.y=a/l}else{(e=t).x=e.data.x,e.y=e.data.y;do{s+=i[e.data.index]}while(e=e.next)}t.value=s}function v(t,e,a,s){if(!t.value)return!0;var h=t.x-r.x,f=t.y-r.y,p=s-e,d=h*h+f*f;if(p*p/u<d)return d<c&&(0===h&&(d+=(h=o())*h),0===f&&(d+=(f=o())*f),d<l&&(d=Math.sqrt(l*d)),r.vx+=h*t.value*n/d,r.vy+=f*t.value*n/d),!0;if(!(t.length||d>=c)){(t.data!==r||t.next)&&(0===h&&(d+=(h=o())*h),0===f&&(d+=(f=o())*f),d<l&&(d=Math.sqrt(l*d)));do{t.data!==r&&(p=i[t.data.index]*n/d,r.vx+=h*p,r.vy+=f*p)}while(t=t.next)}}return p.initialize=function(e){t=e,d()},p.strength=function(t){return arguments.length?(s=\\\"function\\\"==typeof t?t:a(+t),d(),p):s},p.distanceMin=function(t){return arguments.length?(l=t*t,p):Math.sqrt(l)},p.distanceMax=function(t){return arguments.length?(c=t*t,p):Math.sqrt(c)},p.theta=function(t){return arguments.length?(u=t*t,p):Math.sqrt(u)},p},t.forceRadial=function(t,e,r){var n,i,o,s=a(.1);function l(t){for(var a=0,s=n.length;a<s;++a){var l=n[a],c=l.x-e||1e-6,u=l.y-r||1e-6,h=Math.sqrt(c*c+u*u),f=(o[a]-h)*i[a]*t/h;l.vx+=c*f,l.vy+=u*f}}function c(){if(n){var e,r=n.length;for(i=new Array(r),o=new Array(r),e=0;e<r;++e)o[e]=+t(n[e],e,n),i[e]=isNaN(o[e])?0:+s(n[e],e,n)}}return\\\"function\\\"!=typeof t&&(t=a(+t)),null==e&&(e=0),null==r&&(r=0),l.initialize=function(t){n=t,c()},l.strength=function(t){return arguments.length?(s=\\\"function\\\"==typeof t?t:a(+t),c(),l):s},l.radius=function(e){return arguments.length?(t=\\\"function\\\"==typeof e?e:a(+e),c(),l):t},l.x=function(t){return arguments.length?(e=+t,l):e},l.y=function(t){return arguments.length?(r=+t,l):r},l},t.forceSimulation=function(t){var e,a=1,o=.001,s=1-Math.pow(o,1/300),l=0,c=.6,u=r.map(),h=i.timer(g),f=n.dispatch(\\\"tick\\\",\\\"end\\\");function g(){v(),f.call(\\\"tick\\\",e),a<o&&(h.stop(),f.call(\\\"end\\\",e))}function v(){var e,r,n=t.length;for(a+=(l-a)*s,u.each(function(t){t(a)}),e=0;e<n;++e)null==(r=t[e]).fx?r.x+=r.vx*=c:(r.x=r.fx,r.vx=0),null==r.fy?r.y+=r.vy*=c:(r.y=r.fy,r.vy=0)}function m(){for(var e,r=0,n=t.length;r<n;++r){if((e=t[r]).index=r,isNaN(e.x)||isNaN(e.y)){var i=p*Math.sqrt(r),a=r*d;e.x=i*Math.cos(a),e.y=i*Math.sin(a)}(isNaN(e.vx)||isNaN(e.vy))&&(e.vx=e.vy=0)}}function y(e){return e.initialize&&e.initialize(t),e}return null==t&&(t=[]),m(),e={tick:v,restart:function(){return h.restart(g),e},stop:function(){return h.stop(),e},nodes:function(r){return arguments.length?(t=r,m(),u.each(y),e):t},alpha:function(t){return arguments.length?(a=+t,e):a},alphaMin:function(t){return arguments.length?(o=+t,e):o},alphaDecay:function(t){return arguments.length?(s=+t,e):+s},alphaTarget:function(t){return arguments.length?(l=+t,e):l},velocityDecay:function(t){return arguments.length?(c=1-t,e):1-c},force:function(t,r){return arguments.length>1?(null==r?u.remove(t):u.set(t,y(r)),e):u.get(t)},find:function(e,r,n){var i,a,o,s,l,c=0,u=t.length;for(null==n?n=1/0:n*=n,c=0;c<u;++c)(o=(i=e-(s=t[c]).x)*i+(a=r-s.y)*a)<n&&(l=s,n=o);return l},on:function(t,r){return arguments.length>1?(f.on(t,r),e):f.on(t)}}},t.forceX=function(t){var e,r,n,i=a(.1);function o(t){for(var i,a=0,o=e.length;a<o;++a)(i=e[a]).vx+=(n[a]-i.x)*r[a]*t}function s(){if(e){var a,o=e.length;for(r=new Array(o),n=new Array(o),a=0;a<o;++a)r[a]=isNaN(n[a]=+t(e[a],a,e))?0:+i(e[a],a,e)}}return\\\"function\\\"!=typeof t&&(t=a(null==t?0:+t)),o.initialize=function(t){e=t,s()},o.strength=function(t){return arguments.length?(i=\\\"function\\\"==typeof t?t:a(+t),s(),o):i},o.x=function(e){return arguments.length?(t=\\\"function\\\"==typeof e?e:a(+e),s(),o):t},o},t.forceY=function(t){var e,r,n,i=a(.1);function o(t){for(var i,a=0,o=e.length;a<o;++a)(i=e[a]).vy+=(n[a]-i.y)*r[a]*t}function s(){if(e){var a,o=e.length;for(r=new Array(o),n=new Array(o),a=0;a<o;++a)r[a]=isNaN(n[a]=+t(e[a],a,e))?0:+i(e[a],a,e)}}return\\\"function\\\"!=typeof t&&(t=a(null==t?0:+t)),o.initialize=function(t){e=t,s()},o.strength=function(t){return arguments.length?(i=\\\"function\\\"==typeof t?t:a(+t),s(),o):i},o.y=function(e){return arguments.length?(t=\\\"function\\\"==typeof e?e:a(+e),s(),o):t},o},Object.defineProperty(t,\\\"__esModule\\\",{value:!0})},\\\"object\\\"==typeof r&&\\\"undefined\\\"!=typeof e?i(r,t(\\\"d3-quadtree\\\"),t(\\\"d3-collection\\\"),t(\\\"d3-dispatch\\\"),t(\\\"d3-timer\\\")):i(n.d3=n.d3||{},n.d3,n.d3,n.d3,n.d3)},{\\\"d3-collection\\\":153,\\\"d3-dispatch\\\":155,\\\"d3-quadtree\\\":160,\\\"d3-timer\\\":162}],157:[function(t,e,r){var n;n=this,function(t){\\\"use strict\\\";function e(t,e){return t.parent===e.parent?1:2}function r(t,e){return t+e.x}function n(t,e){return Math.max(t,e.y)}function i(t){var e=0,r=t.children,n=r&&r.length;if(n)for(;--n>=0;)e+=r[n].value;else e=1;t.value=e}function a(t,e){var r,n,i,a,s,u=new c(t),h=+t.value&&(u.value=t.value),f=[u];for(null==e&&(e=o);r=f.pop();)if(h&&(r.value=+r.data.value),(i=e(r.data))&&(s=i.length))for(r.children=new Array(s),a=s-1;a>=0;--a)f.push(n=r.children[a]=new c(i[a])),n.parent=r,n.depth=r.depth+1;return u.eachBefore(l)}function o(t){return t.children}function s(t){t.data=t.data.data}function l(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function c(t){this.data=t,this.depth=this.height=0,this.parent=null}c.prototype=a.prototype={constructor:c,count:function(){return this.eachAfter(i)},each:function(t){var e,r,n,i,a=this,o=[a];do{for(e=o.reverse(),o=[];a=e.pop();)if(t(a),r=a.children)for(n=0,i=r.length;n<i;++n)o.push(r[n])}while(o.length);return this},eachAfter:function(t){for(var e,r,n,i=this,a=[i],o=[];i=a.pop();)if(o.push(i),e=i.children)for(r=0,n=e.length;r<n;++r)a.push(e[r]);for(;i=o.pop();)t(i);return this},eachBefore:function(t){for(var e,r,n=this,i=[n];n=i.pop();)if(t(n),e=n.children)for(r=e.length-1;r>=0;--r)i.push(e[r]);return this},sum:function(t){return this.eachAfter(function(e){for(var r=+t(e.data)||0,n=e.children,i=n&&n.length;--i>=0;)r+=n[i].value;e.value=r})},sort:function(t){return this.eachBefore(function(e){e.children&&e.children.sort(t)})},path:function(t){for(var e=this,r=function(t,e){if(t===e)return t;var r=t.ancestors(),n=e.ancestors(),i=null;for(t=r.pop(),e=n.pop();t===e;)i=t,t=r.pop(),e=n.pop();return i}(e,t),n=[e];e!==r;)e=e.parent,n.push(e);for(var i=n.length;t!==r;)n.splice(i,0,t),t=t.parent;return n},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){var t=[];return this.each(function(e){t.push(e)}),t},leaves:function(){var t=[];return this.eachBefore(function(e){e.children||t.push(e)}),t},links:function(){var t=this,e=[];return t.each(function(r){r!==t&&e.push({source:r.parent,target:r})}),e},copy:function(){return a(this).eachBefore(s)}};var u=Array.prototype.slice;function h(t){for(var e,r,n=0,i=(t=function(t){for(var e,r,n=t.length;n;)r=Math.random()*n--|0,e=t[n],t[n]=t[r],t[r]=e;return t}(u.call(t))).length,a=[];n<i;)e=t[n],r&&d(r,e)?++n:(r=v(a=f(a,e)),n=0);return r}function f(t,e){var r,n;if(g(e,t))return[e];for(r=0;r<t.length;++r)if(p(e,t[r])&&g(m(t[r],e),t))return[t[r],e];for(r=0;r<t.length-1;++r)for(n=r+1;n<t.length;++n)if(p(m(t[r],t[n]),e)&&p(m(t[r],e),t[n])&&p(m(t[n],e),t[r])&&g(y(t[r],t[n],e),t))return[t[r],t[n],e];throw new Error}function p(t,e){var r=t.r-e.r,n=e.x-t.x,i=e.y-t.y;return r<0||r*r<n*n+i*i}function d(t,e){var r=t.r-e.r+1e-6,n=e.x-t.x,i=e.y-t.y;return r>0&&r*r>n*n+i*i}function g(t,e){for(var r=0;r<e.length;++r)if(!d(t,e[r]))return!1;return!0}function v(t){switch(t.length){case 1:return{x:(e=t[0]).x,y:e.y,r:e.r};case 2:return m(t[0],t[1]);case 3:return y(t[0],t[1],t[2])}var e}function m(t,e){var r=t.x,n=t.y,i=t.r,a=e.x,o=e.y,s=e.r,l=a-r,c=o-n,u=s-i,h=Math.sqrt(l*l+c*c);return{x:(r+a+l/h*u)/2,y:(n+o+c/h*u)/2,r:(h+i+s)/2}}function y(t,e,r){var n=t.x,i=t.y,a=t.r,o=e.x,s=e.y,l=e.r,c=r.x,u=r.y,h=r.r,f=n-o,p=n-c,d=i-s,g=i-u,v=l-a,m=h-a,y=n*n+i*i-a*a,x=y-o*o-s*s+l*l,b=y-c*c-u*u+h*h,_=p*d-f*g,w=(d*b-g*x)/(2*_)-n,k=(g*v-d*m)/_,T=(p*x-f*b)/(2*_)-i,A=(f*m-p*v)/_,M=k*k+A*A-1,S=2*(a+w*k+T*A),E=w*w+T*T-a*a,C=-(M?(S+Math.sqrt(S*S-4*M*E))/(2*M):E/S);return{x:n+w+k*C,y:i+T+A*C,r:C}}function x(t,e,r){var n,i,a,o,s=t.x-e.x,l=t.y-e.y,c=s*s+l*l;c?(i=e.r+r.r,i*=i,o=t.r+r.r,i>(o*=o)?(n=(c+o-i)/(2*c),a=Math.sqrt(Math.max(0,o/c-n*n)),r.x=t.x-n*s-a*l,r.y=t.y-n*l+a*s):(n=(c+i-o)/(2*c),a=Math.sqrt(Math.max(0,i/c-n*n)),r.x=e.x+n*s-a*l,r.y=e.y+n*l+a*s)):(r.x=e.x+r.r,r.y=e.y)}function b(t,e){var r=t.r+e.r-1e-6,n=e.x-t.x,i=e.y-t.y;return r>0&&r*r>n*n+i*i}function _(t){var e=t._,r=t.next._,n=e.r+r.r,i=(e.x*r.r+r.x*e.r)/n,a=(e.y*r.r+r.y*e.r)/n;return i*i+a*a}function w(t){this._=t,this.next=null,this.previous=null}function k(t){if(!(i=t.length))return 0;var e,r,n,i,a,o,s,l,c,u,f;if((e=t[0]).x=0,e.y=0,!(i>1))return e.r;if(r=t[1],e.x=-r.r,r.x=e.r,r.y=0,!(i>2))return e.r+r.r;x(r,e,n=t[2]),e=new w(e),r=new w(r),n=new w(n),e.next=n.previous=r,r.next=e.previous=n,n.next=r.previous=e;t:for(s=3;s<i;++s){x(e._,r._,n=t[s]),n=new w(n),l=r.next,c=e.previous,u=r._.r,f=e._.r;do{if(u<=f){if(b(l._,n._)){r=l,e.next=r,r.previous=e,--s;continue t}u+=l._.r,l=l.next}else{if(b(c._,n._)){(e=c).next=r,r.previous=e,--s;continue t}f+=c._.r,c=c.previous}}while(l!==c.next);for(n.previous=e,n.next=r,e.next=r.previous=r=n,a=_(e);(n=n.next)!==r;)(o=_(n))<a&&(e=n,a=o);r=e.next}for(e=[r._],n=r;(n=n.next)!==r;)e.push(n._);for(n=h(e),s=0;s<i;++s)(e=t[s]).x-=n.x,e.y-=n.y;return n.r}function T(t){if(\\\"function\\\"!=typeof t)throw new Error;return t}function A(){return 0}function M(t){return function(){return t}}function S(t){return Math.sqrt(t.value)}function E(t){return function(e){e.children||(e.r=Math.max(0,+t(e)||0))}}function C(t,e){return function(r){if(n=r.children){var n,i,a,o=n.length,s=t(r)*e||0;if(s)for(i=0;i<o;++i)n[i].r+=s;if(a=k(n),s)for(i=0;i<o;++i)n[i].r-=s;r.r=a+s}}}function L(t){return function(e){var r=e.parent;e.r*=t,r&&(e.x=r.x+t*e.x,e.y=r.y+t*e.y)}}function P(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}function O(t,e,r,n,i){for(var a,o=t.children,s=-1,l=o.length,c=t.value&&(n-e)/t.value;++s<l;)(a=o[s]).y0=r,a.y1=i,a.x0=e,a.x1=e+=a.value*c}var z=\\\"$\\\",I={depth:-1},D={};function R(t){return t.id}function F(t){return t.parentId}function B(t,e){return t.parent===e.parent?1:2}function N(t){var e=t.children;return e?e[0]:t.t}function j(t){var e=t.children;return e?e[e.length-1]:t.t}function U(t,e,r){var n=r/(e.i-t.i);e.c-=n,e.s+=r,t.c+=n,e.z+=r,e.m+=r}function V(t,e,r){return t.a.parent===e.parent?t.a:r}function q(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}function H(t,e,r,n,i){for(var a,o=t.children,s=-1,l=o.length,c=t.value&&(i-r)/t.value;++s<l;)(a=o[s]).x0=e,a.x1=n,a.y0=r,a.y1=r+=a.value*c}q.prototype=Object.create(c.prototype);var G=(1+Math.sqrt(5))/2;function Y(t,e,r,n,i,a){for(var o,s,l,c,u,h,f,p,d,g,v,m=[],y=e.children,x=0,b=0,_=y.length,w=e.value;x<_;){l=i-r,c=a-n;do{u=y[b++].value}while(!u&&b<_);for(h=f=u,v=u*u*(g=Math.max(c/l,l/c)/(w*t)),d=Math.max(f/v,v/h);b<_;++b){if(u+=s=y[b].value,s<h&&(h=s),s>f&&(f=s),v=u*u*g,(p=Math.max(f/v,v/h))>d){u-=s;break}d=p}m.push(o={value:u,dice:l<c,children:y.slice(x,b)}),o.dice?O(o,r,n,i,w?n+=c*u/w:a):H(o,r,n,w?r+=l*u/w:i,a),w-=u,x=b}return m}var W=function t(e){function r(t,r,n,i,a){Y(e,t,r,n,i,a)}return r.ratio=function(e){return t((e=+e)>1?e:1)},r}(G);var X=function t(e){function r(t,r,n,i,a){if((o=t._squarify)&&o.ratio===e)for(var o,s,l,c,u,h=-1,f=o.length,p=t.value;++h<f;){for(l=(s=o[h]).children,c=s.value=0,u=l.length;c<u;++c)s.value+=l[c].value;s.dice?O(s,r,n,i,n+=(a-n)*s.value/p):H(s,r,n,r+=(i-r)*s.value/p,a),p-=s.value}else t._squarify=o=Y(e,t,r,n,i,a),o.ratio=e}return r.ratio=function(e){return t((e=+e)>1?e:1)},r}(G);t.cluster=function(){var t=e,i=1,a=1,o=!1;function s(e){var s,l=0;e.eachAfter(function(e){var i=e.children;i?(e.x=function(t){return t.reduce(r,0)/t.length}(i),e.y=function(t){return 1+t.reduce(n,0)}(i)):(e.x=s?l+=t(e,s):0,e.y=0,s=e)});var c=function(t){for(var e;e=t.children;)t=e[0];return t}(e),u=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(e),h=c.x-t(c,u)/2,f=u.x+t(u,c)/2;return e.eachAfter(o?function(t){t.x=(t.x-e.x)*i,t.y=(e.y-t.y)*a}:function(t){t.x=(t.x-h)/(f-h)*i,t.y=(1-(e.y?t.y/e.y:1))*a})}return s.separation=function(e){return arguments.length?(t=e,s):t},s.size=function(t){return arguments.length?(o=!1,i=+t[0],a=+t[1],s):o?null:[i,a]},s.nodeSize=function(t){return arguments.length?(o=!0,i=+t[0],a=+t[1],s):o?[i,a]:null},s},t.hierarchy=a,t.pack=function(){var t=null,e=1,r=1,n=A;function i(i){return i.x=e/2,i.y=r/2,t?i.eachBefore(E(t)).eachAfter(C(n,.5)).eachBefore(L(1)):i.eachBefore(E(S)).eachAfter(C(A,1)).eachAfter(C(n,i.r/Math.min(e,r))).eachBefore(L(Math.min(e,r)/(2*i.r))),i}return i.radius=function(e){return arguments.length?(t=null==(r=e)?null:T(r),i):t;var r},i.size=function(t){return arguments.length?(e=+t[0],r=+t[1],i):[e,r]},i.padding=function(t){return arguments.length?(n=\\\"function\\\"==typeof t?t:M(+t),i):n},i},t.packSiblings=function(t){return k(t),t},t.packEnclose=h,t.partition=function(){var t=1,e=1,r=0,n=!1;function i(i){var a=i.height+1;return i.x0=i.y0=r,i.x1=t,i.y1=e/a,i.eachBefore(function(t,e){return function(n){n.children&&O(n,n.x0,t*(n.depth+1)/e,n.x1,t*(n.depth+2)/e);var i=n.x0,a=n.y0,o=n.x1-r,s=n.y1-r;o<i&&(i=o=(i+o)/2),s<a&&(a=s=(a+s)/2),n.x0=i,n.y0=a,n.x1=o,n.y1=s}}(e,a)),n&&i.eachBefore(P),i}return i.round=function(t){return arguments.length?(n=!!t,i):n},i.size=function(r){return arguments.length?(t=+r[0],e=+r[1],i):[t,e]},i.padding=function(t){return arguments.length?(r=+t,i):r},i},t.stratify=function(){var t=R,e=F;function r(r){var n,i,a,o,s,u,h,f=r.length,p=new Array(f),d={};for(i=0;i<f;++i)n=r[i],s=p[i]=new c(n),null!=(u=t(n,i,r))&&(u+=\\\"\\\")&&(d[h=z+(s.id=u)]=h in d?D:s);for(i=0;i<f;++i)if(s=p[i],null!=(u=e(r[i],i,r))&&(u+=\\\"\\\")){if(!(o=d[z+u]))throw new Error(\\\"missing: \\\"+u);if(o===D)throw new Error(\\\"ambiguous: \\\"+u);o.children?o.children.push(s):o.children=[s],s.parent=o}else{if(a)throw new Error(\\\"multiple roots\\\");a=s}if(!a)throw new Error(\\\"no root\\\");if(a.parent=I,a.eachBefore(function(t){t.depth=t.parent.depth+1,--f}).eachBefore(l),a.parent=null,f>0)throw new Error(\\\"cycle\\\");return a}return r.id=function(e){return arguments.length?(t=T(e),r):t},r.parentId=function(t){return arguments.length?(e=T(t),r):e},r},t.tree=function(){var t=B,e=1,r=1,n=null;function i(i){var l=function(t){for(var e,r,n,i,a,o=new q(t,0),s=[o];e=s.pop();)if(n=e._.children)for(e.children=new Array(a=n.length),i=a-1;i>=0;--i)s.push(r=e.children[i]=new q(n[i],i)),r.parent=e;return(o.parent=new q(null,0)).children=[o],o}(i);if(l.eachAfter(a),l.parent.m=-l.z,l.eachBefore(o),n)i.eachBefore(s);else{var c=i,u=i,h=i;i.eachBefore(function(t){t.x<c.x&&(c=t),t.x>u.x&&(u=t),t.depth>h.depth&&(h=t)});var f=c===u?1:t(c,u)/2,p=f-c.x,d=e/(u.x+f+p),g=r/(h.depth||1);i.eachBefore(function(t){t.x=(t.x+p)*d,t.y=t.depth*g})}return i}function a(e){var r=e.children,n=e.parent.children,i=e.i?n[e.i-1]:null;if(r){!function(t){for(var e,r=0,n=0,i=t.children,a=i.length;--a>=0;)(e=i[a]).z+=r,e.m+=r,r+=e.s+(n+=e.c)}(e);var a=(r[0].z+r[r.length-1].z)/2;i?(e.z=i.z+t(e._,i._),e.m=e.z-a):e.z=a}else i&&(e.z=i.z+t(e._,i._));e.parent.A=function(e,r,n){if(r){for(var i,a=e,o=e,s=r,l=a.parent.children[0],c=a.m,u=o.m,h=s.m,f=l.m;s=j(s),a=N(a),s&&a;)l=N(l),(o=j(o)).a=e,(i=s.z+h-a.z-c+t(s._,a._))>0&&(U(V(s,e,n),e,i),c+=i,u+=i),h+=s.m,c+=a.m,f+=l.m,u+=o.m;s&&!j(o)&&(o.t=s,o.m+=h-u),a&&!N(l)&&(l.t=a,l.m+=c-f,n=e)}return n}(e,i,e.parent.A||n[0])}function o(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function s(t){t.x*=e,t.y=t.depth*r}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(n=!1,e=+t[0],r=+t[1],i):n?null:[e,r]},i.nodeSize=function(t){return arguments.length?(n=!0,e=+t[0],r=+t[1],i):n?[e,r]:null},i},t.treemap=function(){var t=W,e=!1,r=1,n=1,i=[0],a=A,o=A,s=A,l=A,c=A;function u(t){return t.x0=t.y0=0,t.x1=r,t.y1=n,t.eachBefore(h),i=[0],e&&t.eachBefore(P),t}function h(e){var r=i[e.depth],n=e.x0+r,u=e.y0+r,h=e.x1-r,f=e.y1-r;h<n&&(n=h=(n+h)/2),f<u&&(u=f=(u+f)/2),e.x0=n,e.y0=u,e.x1=h,e.y1=f,e.children&&(r=i[e.depth+1]=a(e)/2,n+=c(e)-r,u+=o(e)-r,(h-=s(e)-r)<n&&(n=h=(n+h)/2),(f-=l(e)-r)<u&&(u=f=(u+f)/2),t(e,n,u,h,f))}return u.round=function(t){return arguments.length?(e=!!t,u):e},u.size=function(t){return arguments.length?(r=+t[0],n=+t[1],u):[r,n]},u.tile=function(e){return arguments.length?(t=T(e),u):t},u.padding=function(t){return arguments.length?u.paddingInner(t).paddingOuter(t):u.paddingInner()},u.paddingInner=function(t){return arguments.length?(a=\\\"function\\\"==typeof t?t:M(+t),u):a},u.paddingOuter=function(t){return arguments.length?u.paddingTop(t).paddingRight(t).paddingBottom(t).paddingLeft(t):u.paddingTop()},u.paddingTop=function(t){return arguments.length?(o=\\\"function\\\"==typeof t?t:M(+t),u):o},u.paddingRight=function(t){return arguments.length?(s=\\\"function\\\"==typeof t?t:M(+t),u):s},u.paddingBottom=function(t){return arguments.length?(l=\\\"function\\\"==typeof t?t:M(+t),u):l},u.paddingLeft=function(t){return arguments.length?(c=\\\"function\\\"==typeof t?t:M(+t),u):c},u},t.treemapBinary=function(t,e,r,n,i){var a,o,s=t.children,l=s.length,c=new Array(l+1);for(c[0]=o=a=0;a<l;++a)c[a+1]=o+=s[a].value;!function t(e,r,n,i,a,o,l){if(e>=r-1){var u=s[e];return u.x0=i,u.y0=a,u.x1=o,void(u.y1=l)}for(var h=c[e],f=n/2+h,p=e+1,d=r-1;p<d;){var g=p+d>>>1;c[g]<f?p=g+1:d=g}f-c[p-1]<c[p]-f&&e+1<p&&--p;var v=c[p]-h,m=n-v;if(o-i>l-a){var y=(i*m+o*v)/n;t(e,p,v,i,a,y,l),t(p,r,m,y,a,o,l)}else{var x=(a*m+l*v)/n;t(e,p,v,i,a,o,x),t(p,r,m,i,x,o,l)}}(0,l,t.value,e,r,n,i)},t.treemapDice=O,t.treemapSlice=H,t.treemapSliceDice=function(t,e,r,n,i){(1&t.depth?H:O)(t,e,r,n,i)},t.treemapSquarify=W,t.treemapResquarify=X,Object.defineProperty(t,\\\"__esModule\\\",{value:!0})}(\\\"object\\\"==typeof r&&\\\"undefined\\\"!=typeof e?r:n.d3=n.d3||{})},{}],158:[function(t,e,r){var n,i;n=this,i=function(t,e){\\\"use strict\\\";function r(t,e,r,n,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*r+(1+3*t+3*a-3*o)*n+o*i)/6}function n(t){var e=t.length-1;return function(n){var i=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),a=t[i],o=t[i+1],s=i>0?t[i-1]:2*a-o,l=i<e-1?t[i+2]:2*o-a;return r((n-i/e)*e,s,a,o,l)}}function i(t){var e=t.length;return function(n){var i=Math.floor(((n%=1)<0?++n:n)*e),a=t[(i+e-1)%e],o=t[i%e],s=t[(i+1)%e],l=t[(i+2)%e];return r((n-i/e)*e,a,o,s,l)}}function a(t){return function(){return t}}function o(t,e){return function(r){return t+r*e}}function s(t,e){var r=e-t;return r?o(t,r>180||r<-180?r-360*Math.round(r/360):r):a(isNaN(t)?e:t)}function l(t){return 1==(t=+t)?c:function(e,r){return r-e?function(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}(e,r,t):a(isNaN(e)?r:e)}}function c(t,e){var r=e-t;return r?o(t,r):a(isNaN(t)?e:t)}var u=function t(r){var n=l(r);function i(t,r){var i=n((t=e.rgb(t)).r,(r=e.rgb(r)).r),a=n(t.g,r.g),o=n(t.b,r.b),s=c(t.opacity,r.opacity);return function(e){return t.r=i(e),t.g=a(e),t.b=o(e),t.opacity=s(e),t+\\\"\\\"}}return i.gamma=t,i}(1);function h(t){return function(r){var n,i,a=r.length,o=new Array(a),s=new Array(a),l=new Array(a);for(n=0;n<a;++n)i=e.rgb(r[n]),o[n]=i.r||0,s[n]=i.g||0,l[n]=i.b||0;return o=t(o),s=t(s),l=t(l),i.opacity=1,function(t){return i.r=o(t),i.g=s(t),i.b=l(t),i+\\\"\\\"}}}var f=h(n),p=h(i);function d(t,e){var r,n=e?e.length:0,i=t?Math.min(n,t.length):0,a=new Array(i),o=new Array(n);for(r=0;r<i;++r)a[r]=_(t[r],e[r]);for(;r<n;++r)o[r]=e[r];return function(t){for(r=0;r<i;++r)o[r]=a[r](t);return o}}function g(t,e){var r=new Date;return e-=t=+t,function(n){return r.setTime(t+e*n),r}}function v(t,e){return e-=t=+t,function(r){return t+e*r}}function m(t,e){var r,n={},i={};for(r in null!==t&&\\\"object\\\"==typeof t||(t={}),null!==e&&\\\"object\\\"==typeof e||(e={}),e)r in t?n[r]=_(t[r],e[r]):i[r]=e[r];return function(t){for(r in n)i[r]=n[r](t);return i}}var y=/[-+]?(?:\\\\d+\\\\.?\\\\d*|\\\\.?\\\\d+)(?:[eE][-+]?\\\\d+)?/g,x=new RegExp(y.source,\\\"g\\\");function b(t,e){var r,n,i,a=y.lastIndex=x.lastIndex=0,o=-1,s=[],l=[];for(t+=\\\"\\\",e+=\\\"\\\";(r=y.exec(t))&&(n=x.exec(e));)(i=n.index)>a&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(r=r[0])===(n=n[0])?s[o]?s[o]+=n:s[++o]=n:(s[++o]=null,l.push({i:o,x:v(r,n)})),a=x.lastIndex;return a<e.length&&(i=e.slice(a),s[o]?s[o]+=i:s[++o]=i),s.length<2?l[0]?function(t){return function(e){return t(e)+\\\"\\\"}}(l[0].x):function(t){return function(){return t}}(e):(e=l.length,function(t){for(var r,n=0;n<e;++n)s[(r=l[n]).i]=r.x(t);return s.join(\\\"\\\")})}function _(t,r){var n,i=typeof r;return null==r||\\\"boolean\\\"===i?a(r):(\\\"number\\\"===i?v:\\\"string\\\"===i?(n=e.color(r))?(r=n,u):b:r instanceof e.color?u:r instanceof Date?g:Array.isArray(r)?d:\\\"function\\\"!=typeof r.valueOf&&\\\"function\\\"!=typeof r.toString||isNaN(r)?m:v)(t,r)}var w,k,T,A,M=180/Math.PI,S={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function E(t,e,r,n,i,a){var o,s,l;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(l=t*r+e*n)&&(r-=t*l,n-=e*l),(s=Math.sqrt(r*r+n*n))&&(r/=s,n/=s,l/=s),t*n<e*r&&(t=-t,e=-e,l=-l,o=-o),{translateX:i,translateY:a,rotate:Math.atan2(e,t)*M,skewX:Math.atan(l)*M,scaleX:o,scaleY:s}}function C(t,e,r,n){function i(t){return t.length?t.pop()+\\\" \\\":\\\"\\\"}return function(a,o){var s=[],l=[];return a=t(a),o=t(o),function(t,n,i,a,o,s){if(t!==i||n!==a){var l=o.push(\\\"translate(\\\",null,e,null,r);s.push({i:l-4,x:v(t,i)},{i:l-2,x:v(n,a)})}else(i||a)&&o.push(\\\"translate(\\\"+i+e+a+r)}(a.translateX,a.translateY,o.translateX,o.translateY,s,l),function(t,e,r,a){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),a.push({i:r.push(i(r)+\\\"rotate(\\\",null,n)-2,x:v(t,e)})):e&&r.push(i(r)+\\\"rotate(\\\"+e+n)}(a.rotate,o.rotate,s,l),function(t,e,r,a){t!==e?a.push({i:r.push(i(r)+\\\"skewX(\\\",null,n)-2,x:v(t,e)}):e&&r.push(i(r)+\\\"skewX(\\\"+e+n)}(a.skewX,o.skewX,s,l),function(t,e,r,n,a,o){if(t!==r||e!==n){var s=a.push(i(a)+\\\"scale(\\\",null,\\\",\\\",null,\\\")\\\");o.push({i:s-4,x:v(t,r)},{i:s-2,x:v(e,n)})}else 1===r&&1===n||a.push(i(a)+\\\"scale(\\\"+r+\\\",\\\"+n+\\\")\\\")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,l),a=o=null,function(t){for(var e,r=-1,n=l.length;++r<n;)s[(e=l[r]).i]=e.x(t);return s.join(\\\"\\\")}}}var L=C(function(t){return\\\"none\\\"===t?S:(w||(w=document.createElement(\\\"DIV\\\"),k=document.documentElement,T=document.defaultView),w.style.transform=t,t=T.getComputedStyle(k.appendChild(w),null).getPropertyValue(\\\"transform\\\"),k.removeChild(w),E(+(t=t.slice(7,-1).split(\\\",\\\"))[0],+t[1],+t[2],+t[3],+t[4],+t[5]))},\\\"px, \\\",\\\"px)\\\",\\\"deg)\\\"),P=C(function(t){return null==t?S:(A||(A=document.createElementNS(\\\"http://www.w3.org/2000/svg\\\",\\\"g\\\")),A.setAttribute(\\\"transform\\\",t),(t=A.transform.baseVal.consolidate())?E((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):S)},\\\", \\\",\\\")\\\",\\\")\\\"),O=Math.SQRT2,z=2,I=4,D=1e-12;function R(t){return((t=Math.exp(t))+1/t)/2}function F(t){return function(r,n){var i=t((r=e.hsl(r)).h,(n=e.hsl(n)).h),a=c(r.s,n.s),o=c(r.l,n.l),s=c(r.opacity,n.opacity);return function(t){return r.h=i(t),r.s=a(t),r.l=o(t),r.opacity=s(t),r+\\\"\\\"}}}var B=F(s),N=F(c);function j(t){return function(r,n){var i=t((r=e.hcl(r)).h,(n=e.hcl(n)).h),a=c(r.c,n.c),o=c(r.l,n.l),s=c(r.opacity,n.opacity);return function(t){return r.h=i(t),r.c=a(t),r.l=o(t),r.opacity=s(t),r+\\\"\\\"}}}var U=j(s),V=j(c);function q(t){return function r(n){function i(r,i){var a=t((r=e.cubehelix(r)).h,(i=e.cubehelix(i)).h),o=c(r.s,i.s),s=c(r.l,i.l),l=c(r.opacity,i.opacity);return function(t){return r.h=a(t),r.s=o(t),r.l=s(Math.pow(t,n)),r.opacity=l(t),r+\\\"\\\"}}return n=+n,i.gamma=r,i}(1)}var H=q(s),G=q(c);t.interpolate=_,t.interpolateArray=d,t.interpolateBasis=n,t.interpolateBasisClosed=i,t.interpolateDate=g,t.interpolateDiscrete=function(t){var e=t.length;return function(r){return t[Math.max(0,Math.min(e-1,Math.floor(r*e)))]}},t.interpolateHue=function(t,e){var r=s(+t,+e);return function(t){var e=r(t);return e-360*Math.floor(e/360)}},t.interpolateNumber=v,t.interpolateObject=m,t.interpolateRound=function(t,e){return e-=t=+t,function(r){return Math.round(t+e*r)}},t.interpolateString=b,t.interpolateTransformCss=L,t.interpolateTransformSvg=P,t.interpolateZoom=function(t,e){var r,n,i=t[0],a=t[1],o=t[2],s=e[0],l=e[1],c=e[2],u=s-i,h=l-a,f=u*u+h*h;if(f<D)n=Math.log(c/o)/O,r=function(t){return[i+t*u,a+t*h,o*Math.exp(O*t*n)]};else{var p=Math.sqrt(f),d=(c*c-o*o+I*f)/(2*o*z*p),g=(c*c-o*o-I*f)/(2*c*z*p),v=Math.log(Math.sqrt(d*d+1)-d),m=Math.log(Math.sqrt(g*g+1)-g);n=(m-v)/O,r=function(t){var e,r=t*n,s=R(v),l=o/(z*p)*(s*(e=O*r+v,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(v));return[i+l*u,a+l*h,o*s/R(O*r+v)]}}return r.duration=1e3*n,r},t.interpolateRgb=u,t.interpolateRgbBasis=f,t.interpolateRgbBasisClosed=p,t.interpolateHsl=B,t.interpolateHslLong=N,t.interpolateLab=function(t,r){var n=c((t=e.lab(t)).l,(r=e.lab(r)).l),i=c(t.a,r.a),a=c(t.b,r.b),o=c(t.opacity,r.opacity);return function(e){return t.l=n(e),t.a=i(e),t.b=a(e),t.opacity=o(e),t+\\\"\\\"}},t.interpolateHcl=U,t.interpolateHclLong=V,t.interpolateCubehelix=H,t.interpolateCubehelixLong=G,t.piecewise=function(t,e){for(var r=0,n=e.length-1,i=e[0],a=new Array(n<0?0:n);r<n;)a[r]=t(i,i=e[++r]);return function(t){var e=Math.max(0,Math.min(n-1,Math.floor(t*=n)));return a[e](t-e)}},t.quantize=function(t,e){for(var r=new Array(e),n=0;n<e;++n)r[n]=t(n/(e-1));return r},Object.defineProperty(t,\\\"__esModule\\\",{value:!0})},\\\"object\\\"==typeof r&&\\\"undefined\\\"!=typeof e?i(r,t(\\\"d3-color\\\")):i(n.d3=n.d3||{},n.d3)},{\\\"d3-color\\\":154}],159:[function(t,e,r){var n;n=this,function(t){\\\"use strict\\\";var e=Math.PI,r=2*e,n=r-1e-6;function i(){this._x0=this._y0=this._x1=this._y1=null,this._=\\\"\\\"}function a(){return new i}i.prototype=a.prototype={constructor:i,moveTo:function(t,e){this._+=\\\"M\\\"+(this._x0=this._x1=+t)+\\\",\\\"+(this._y0=this._y1=+e)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+=\\\"Z\\\")},lineTo:function(t,e){this._+=\\\"L\\\"+(this._x1=+t)+\\\",\\\"+(this._y1=+e)},quadraticCurveTo:function(t,e,r,n){this._+=\\\"Q\\\"+ +t+\\\",\\\"+ +e+\\\",\\\"+(this._x1=+r)+\\\",\\\"+(this._y1=+n)},bezierCurveTo:function(t,e,r,n,i,a){this._+=\\\"C\\\"+ +t+\\\",\\\"+ +e+\\\",\\\"+ +r+\\\",\\\"+ +n+\\\",\\\"+(this._x1=+i)+\\\",\\\"+(this._y1=+a)},arcTo:function(t,r,n,i,a){t=+t,r=+r,n=+n,i=+i,a=+a;var o=this._x1,s=this._y1,l=n-t,c=i-r,u=o-t,h=s-r,f=u*u+h*h;if(a<0)throw new Error(\\\"negative radius: \\\"+a);if(null===this._x1)this._+=\\\"M\\\"+(this._x1=t)+\\\",\\\"+(this._y1=r);else if(f>1e-6)if(Math.abs(h*l-c*u)>1e-6&&a){var p=n-o,d=i-s,g=l*l+c*c,v=p*p+d*d,m=Math.sqrt(g),y=Math.sqrt(f),x=a*Math.tan((e-Math.acos((g+f-v)/(2*m*y)))/2),b=x/y,_=x/m;Math.abs(b-1)>1e-6&&(this._+=\\\"L\\\"+(t+b*u)+\\\",\\\"+(r+b*h)),this._+=\\\"A\\\"+a+\\\",\\\"+a+\\\",0,0,\\\"+ +(h*p>u*d)+\\\",\\\"+(this._x1=t+_*l)+\\\",\\\"+(this._y1=r+_*c)}else this._+=\\\"L\\\"+(this._x1=t)+\\\",\\\"+(this._y1=r);else;},arc:function(t,i,a,o,s,l){t=+t,i=+i;var c=(a=+a)*Math.cos(o),u=a*Math.sin(o),h=t+c,f=i+u,p=1^l,d=l?o-s:s-o;if(a<0)throw new Error(\\\"negative radius: \\\"+a);null===this._x1?this._+=\\\"M\\\"+h+\\\",\\\"+f:(Math.abs(this._x1-h)>1e-6||Math.abs(this._y1-f)>1e-6)&&(this._+=\\\"L\\\"+h+\\\",\\\"+f),a&&(d<0&&(d=d%r+r),d>n?this._+=\\\"A\\\"+a+\\\",\\\"+a+\\\",0,1,\\\"+p+\\\",\\\"+(t-c)+\\\",\\\"+(i-u)+\\\"A\\\"+a+\\\",\\\"+a+\\\",0,1,\\\"+p+\\\",\\\"+(this._x1=h)+\\\",\\\"+(this._y1=f):d>1e-6&&(this._+=\\\"A\\\"+a+\\\",\\\"+a+\\\",0,\\\"+ +(d>=e)+\\\",\\\"+p+\\\",\\\"+(this._x1=t+a*Math.cos(s))+\\\",\\\"+(this._y1=i+a*Math.sin(s))))},rect:function(t,e,r,n){this._+=\\\"M\\\"+(this._x0=this._x1=+t)+\\\",\\\"+(this._y0=this._y1=+e)+\\\"h\\\"+ +r+\\\"v\\\"+ +n+\\\"h\\\"+-r+\\\"Z\\\"},toString:function(){return this._}},t.path=a,Object.defineProperty(t,\\\"__esModule\\\",{value:!0})}(\\\"object\\\"==typeof r&&\\\"undefined\\\"!=typeof e?r:n.d3=n.d3||{})},{}],160:[function(t,e,r){var n;n=this,function(t){\\\"use strict\\\";function e(t,e,r,n){if(isNaN(e)||isNaN(r))return t;var i,a,o,s,l,c,u,h,f,p=t._root,d={data:n},g=t._x0,v=t._y0,m=t._x1,y=t._y1;if(!p)return t._root=d,t;for(;p.length;)if((c=e>=(a=(g+m)/2))?g=a:m=a,(u=r>=(o=(v+y)/2))?v=o:y=o,i=p,!(p=p[h=u<<1|c]))return i[h]=d,t;if(s=+t._x.call(null,p.data),l=+t._y.call(null,p.data),e===s&&r===l)return d.next=p,i?i[h]=d:t._root=d,t;do{i=i?i[h]=new Array(4):t._root=new Array(4),(c=e>=(a=(g+m)/2))?g=a:m=a,(u=r>=(o=(v+y)/2))?v=o:y=o}while((h=u<<1|c)==(f=(l>=o)<<1|s>=a));return i[f]=p,i[h]=d,t}var r=function(t,e,r,n,i){this.node=t,this.x0=e,this.y0=r,this.x1=n,this.y1=i};function n(t){return t[0]}function i(t){return t[1]}function a(t,e,r){var a=new o(null==e?n:e,null==r?i:r,NaN,NaN,NaN,NaN);return null==t?a:a.addAll(t)}function o(t,e,r,n,i,a){this._x=t,this._y=e,this._x0=r,this._y0=n,this._x1=i,this._y1=a,this._root=void 0}function s(t){for(var e={data:t.data},r=e;t=t.next;)r=r.next={data:t.data};return e}var l=a.prototype=o.prototype;l.copy=function(){var t,e,r=new o(this._x,this._y,this._x0,this._y0,this._x1,this._y1),n=this._root;if(!n)return r;if(!n.length)return r._root=s(n),r;for(t=[{source:n,target:r._root=new Array(4)}];n=t.pop();)for(var i=0;i<4;++i)(e=n.source[i])&&(e.length?t.push({source:e,target:n.target[i]=new Array(4)}):n.target[i]=s(e));return r},l.add=function(t){var r=+this._x.call(null,t),n=+this._y.call(null,t);return e(this.cover(r,n),r,n,t)},l.addAll=function(t){var r,n,i,a,o=t.length,s=new Array(o),l=new Array(o),c=1/0,u=1/0,h=-1/0,f=-1/0;for(n=0;n<o;++n)isNaN(i=+this._x.call(null,r=t[n]))||isNaN(a=+this._y.call(null,r))||(s[n]=i,l[n]=a,i<c&&(c=i),i>h&&(h=i),a<u&&(u=a),a>f&&(f=a));for(h<c&&(c=this._x0,h=this._x1),f<u&&(u=this._y0,f=this._y1),this.cover(c,u).cover(h,f),n=0;n<o;++n)e(this,s[n],l[n],t[n]);return this},l.cover=function(t,e){if(isNaN(t=+t)||isNaN(e=+e))return this;var r=this._x0,n=this._y0,i=this._x1,a=this._y1;if(isNaN(r))i=(r=Math.floor(t))+1,a=(n=Math.floor(e))+1;else{if(!(r>t||t>i||n>e||e>a))return this;var o,s,l=i-r,c=this._root;switch(s=(e<(n+a)/2)<<1|t<(r+i)/2){case 0:do{(o=new Array(4))[s]=c,c=o}while(a=n+(l*=2),t>(i=r+l)||e>a);break;case 1:do{(o=new Array(4))[s]=c,c=o}while(a=n+(l*=2),(r=i-l)>t||e>a);break;case 2:do{(o=new Array(4))[s]=c,c=o}while(n=a-(l*=2),t>(i=r+l)||n>e);break;case 3:do{(o=new Array(4))[s]=c,c=o}while(n=a-(l*=2),(r=i-l)>t||n>e)}this._root&&this._root.length&&(this._root=c)}return this._x0=r,this._y0=n,this._x1=i,this._y1=a,this},l.data=function(){var t=[];return this.visit(function(e){if(!e.length)do{t.push(e.data)}while(e=e.next)}),t},l.extent=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},l.find=function(t,e,n){var i,a,o,s,l,c,u,h=this._x0,f=this._y0,p=this._x1,d=this._y1,g=[],v=this._root;for(v&&g.push(new r(v,h,f,p,d)),null==n?n=1/0:(h=t-n,f=e-n,p=t+n,d=e+n,n*=n);c=g.pop();)if(!(!(v=c.node)||(a=c.x0)>p||(o=c.y0)>d||(s=c.x1)<h||(l=c.y1)<f))if(v.length){var m=(a+s)/2,y=(o+l)/2;g.push(new r(v[3],m,y,s,l),new r(v[2],a,y,m,l),new r(v[1],m,o,s,y),new r(v[0],a,o,m,y)),(u=(e>=y)<<1|t>=m)&&(c=g[g.length-1],g[g.length-1]=g[g.length-1-u],g[g.length-1-u]=c)}else{var x=t-+this._x.call(null,v.data),b=e-+this._y.call(null,v.data),_=x*x+b*b;if(_<n){var w=Math.sqrt(n=_);h=t-w,f=e-w,p=t+w,d=e+w,i=v.data}}return i},l.remove=function(t){if(isNaN(a=+this._x.call(null,t))||isNaN(o=+this._y.call(null,t)))return this;var e,r,n,i,a,o,s,l,c,u,h,f,p=this._root,d=this._x0,g=this._y0,v=this._x1,m=this._y1;if(!p)return this;if(p.length)for(;;){if((c=a>=(s=(d+v)/2))?d=s:v=s,(u=o>=(l=(g+m)/2))?g=l:m=l,e=p,!(p=p[h=u<<1|c]))return this;if(!p.length)break;(e[h+1&3]||e[h+2&3]||e[h+3&3])&&(r=e,f=h)}for(;p.data!==t;)if(n=p,!(p=p.next))return this;return(i=p.next)&&delete p.next,n?(i?n.next=i:delete n.next,this):e?(i?e[h]=i:delete e[h],(p=e[0]||e[1]||e[2]||e[3])&&p===(e[3]||e[2]||e[1]||e[0])&&!p.length&&(r?r[f]=p:this._root=p),this):(this._root=i,this)},l.removeAll=function(t){for(var e=0,r=t.length;e<r;++e)this.remove(t[e]);return this},l.root=function(){return this._root},l.size=function(){var t=0;return this.visit(function(e){if(!e.length)do{++t}while(e=e.next)}),t},l.visit=function(t){var e,n,i,a,o,s,l=[],c=this._root;for(c&&l.push(new r(c,this._x0,this._y0,this._x1,this._y1));e=l.pop();)if(!t(c=e.node,i=e.x0,a=e.y0,o=e.x1,s=e.y1)&&c.length){var u=(i+o)/2,h=(a+s)/2;(n=c[3])&&l.push(new r(n,u,h,o,s)),(n=c[2])&&l.push(new r(n,i,h,u,s)),(n=c[1])&&l.push(new r(n,u,a,o,h)),(n=c[0])&&l.push(new r(n,i,a,u,h))}return this},l.visitAfter=function(t){var e,n=[],i=[];for(this._root&&n.push(new r(this._root,this._x0,this._y0,this._x1,this._y1));e=n.pop();){var a=e.node;if(a.length){var o,s=e.x0,l=e.y0,c=e.x1,u=e.y1,h=(s+c)/2,f=(l+u)/2;(o=a[0])&&n.push(new r(o,s,l,h,f)),(o=a[1])&&n.push(new r(o,h,l,c,f)),(o=a[2])&&n.push(new r(o,s,f,h,u)),(o=a[3])&&n.push(new r(o,h,f,c,u))}i.push(e)}for(;e=i.pop();)t(e.node,e.x0,e.y0,e.x1,e.y1);return this},l.x=function(t){return arguments.length?(this._x=t,this):this._x},l.y=function(t){return arguments.length?(this._y=t,this):this._y},t.quadtree=a,Object.defineProperty(t,\\\"__esModule\\\",{value:!0})}(\\\"object\\\"==typeof r&&\\\"undefined\\\"!=typeof e?r:n.d3=n.d3||{})},{}],161:[function(t,e,r){var n,i;n=this,i=function(t,e){\\\"use strict\\\";function r(t){return function(){return t}}var n=Math.abs,i=Math.atan2,a=Math.cos,o=Math.max,s=Math.min,l=Math.sin,c=Math.sqrt,u=1e-12,h=Math.PI,f=h/2,p=2*h;function d(t){return t>=1?f:t<=-1?-f:Math.asin(t)}function g(t){return t.innerRadius}function v(t){return t.outerRadius}function m(t){return t.startAngle}function y(t){return t.endAngle}function x(t){return t&&t.padAngle}function b(t,e,r,n,i,a,s){var l=t-r,u=e-n,h=(s?a:-a)/c(l*l+u*u),f=h*u,p=-h*l,d=t+f,g=e+p,v=r+f,m=n+p,y=(d+v)/2,x=(g+m)/2,b=v-d,_=m-g,w=b*b+_*_,k=i-a,T=d*m-v*g,A=(_<0?-1:1)*c(o(0,k*k*w-T*T)),M=(T*_-b*A)/w,S=(-T*b-_*A)/w,E=(T*_+b*A)/w,C=(-T*b+_*A)/w,L=M-y,P=S-x,O=E-y,z=C-x;return L*L+P*P>O*O+z*z&&(M=E,S=C),{cx:M,cy:S,x01:-f,y01:-p,x11:M*(i/k-1),y11:S*(i/k-1)}}function _(t){this._context=t}function w(t){return new _(t)}function k(t){return t[0]}function T(t){return t[1]}function A(){var t=k,n=T,i=r(!0),a=null,o=w,s=null;function l(r){var l,c,u,h=r.length,f=!1;for(null==a&&(s=o(u=e.path())),l=0;l<=h;++l)!(l<h&&i(c=r[l],l,r))===f&&((f=!f)?s.lineStart():s.lineEnd()),f&&s.point(+t(c,l,r),+n(c,l,r));if(u)return s=null,u+\\\"\\\"||null}return l.x=function(e){return arguments.length?(t=\\\"function\\\"==typeof e?e:r(+e),l):t},l.y=function(t){return arguments.length?(n=\\\"function\\\"==typeof t?t:r(+t),l):n},l.defined=function(t){return arguments.length?(i=\\\"function\\\"==typeof t?t:r(!!t),l):i},l.curve=function(t){return arguments.length?(o=t,null!=a&&(s=o(a)),l):o},l.context=function(t){return arguments.length?(null==t?a=s=null:s=o(a=t),l):a},l}function M(){var t=k,n=null,i=r(0),a=T,o=r(!0),s=null,l=w,c=null;function u(r){var u,h,f,p,d,g=r.length,v=!1,m=new Array(g),y=new Array(g);for(null==s&&(c=l(d=e.path())),u=0;u<=g;++u){if(!(u<g&&o(p=r[u],u,r))===v)if(v=!v)h=u,c.areaStart(),c.lineStart();else{for(c.lineEnd(),c.lineStart(),f=u-1;f>=h;--f)c.point(m[f],y[f]);c.lineEnd(),c.areaEnd()}v&&(m[u]=+t(p,u,r),y[u]=+i(p,u,r),c.point(n?+n(p,u,r):m[u],a?+a(p,u,r):y[u]))}if(d)return c=null,d+\\\"\\\"||null}function h(){return A().defined(o).curve(l).context(s)}return u.x=function(e){return arguments.length?(t=\\\"function\\\"==typeof e?e:r(+e),n=null,u):t},u.x0=function(e){return arguments.length?(t=\\\"function\\\"==typeof e?e:r(+e),u):t},u.x1=function(t){return arguments.length?(n=null==t?null:\\\"function\\\"==typeof t?t:r(+t),u):n},u.y=function(t){return arguments.length?(i=\\\"function\\\"==typeof t?t:r(+t),a=null,u):i},u.y0=function(t){return arguments.length?(i=\\\"function\\\"==typeof t?t:r(+t),u):i},u.y1=function(t){return arguments.length?(a=null==t?null:\\\"function\\\"==typeof t?t:r(+t),u):a},u.lineX0=u.lineY0=function(){return h().x(t).y(i)},u.lineY1=function(){return h().x(t).y(a)},u.lineX1=function(){return h().x(n).y(i)},u.defined=function(t){return arguments.length?(o=\\\"function\\\"==typeof t?t:r(!!t),u):o},u.curve=function(t){return arguments.length?(l=t,null!=s&&(c=l(s)),u):l},u.context=function(t){return arguments.length?(null==t?s=c=null:c=l(s=t),u):s},u}function S(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function E(t){return t}_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}};var C=P(w);function L(t){this._curve=t}function P(t){function e(e){return new L(t(e))}return e._curve=t,e}function O(t){var e=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?e(P(t)):e()._curve},t}function z(){return O(A().curve(C))}function I(){var t=M().curve(C),e=t.curve,r=t.lineX0,n=t.lineX1,i=t.lineY0,a=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return O(r())},delete t.lineX0,t.lineEndAngle=function(){return O(n())},delete t.lineX1,t.lineInnerRadius=function(){return O(i())},delete t.lineY0,t.lineOuterRadius=function(){return O(a())},delete t.lineY1,t.curve=function(t){return arguments.length?e(P(t)):e()._curve},t}function D(t,e){return[(e=+e)*Math.cos(t-=Math.PI/2),e*Math.sin(t)]}L.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,e){this._curve.point(e*Math.sin(t),e*-Math.cos(t))}};var R=Array.prototype.slice;function F(t){return t.source}function B(t){return t.target}function N(t){var n=F,i=B,a=k,o=T,s=null;function l(){var r,l=R.call(arguments),c=n.apply(this,l),u=i.apply(this,l);if(s||(s=r=e.path()),t(s,+a.apply(this,(l[0]=c,l)),+o.apply(this,l),+a.apply(this,(l[0]=u,l)),+o.apply(this,l)),r)return s=null,r+\\\"\\\"||null}return l.source=function(t){return arguments.length?(n=t,l):n},l.target=function(t){return arguments.length?(i=t,l):i},l.x=function(t){return arguments.length?(a=\\\"function\\\"==typeof t?t:r(+t),l):a},l.y=function(t){return arguments.length?(o=\\\"function\\\"==typeof t?t:r(+t),l):o},l.context=function(t){return arguments.length?(s=null==t?null:t,l):s},l}function j(t,e,r,n,i){t.moveTo(e,r),t.bezierCurveTo(e=(e+n)/2,r,e,i,n,i)}function U(t,e,r,n,i){t.moveTo(e,r),t.bezierCurveTo(e,r=(r+i)/2,n,r,n,i)}function V(t,e,r,n,i){var a=D(e,r),o=D(e,r=(r+i)/2),s=D(n,r),l=D(n,i);t.moveTo(a[0],a[1]),t.bezierCurveTo(o[0],o[1],s[0],s[1],l[0],l[1])}var q={draw:function(t,e){var r=Math.sqrt(e/h);t.moveTo(r,0),t.arc(0,0,r,0,p)}},H={draw:function(t,e){var r=Math.sqrt(e/5)/2;t.moveTo(-3*r,-r),t.lineTo(-r,-r),t.lineTo(-r,-3*r),t.lineTo(r,-3*r),t.lineTo(r,-r),t.lineTo(3*r,-r),t.lineTo(3*r,r),t.lineTo(r,r),t.lineTo(r,3*r),t.lineTo(-r,3*r),t.lineTo(-r,r),t.lineTo(-3*r,r),t.closePath()}},G=Math.sqrt(1/3),Y=2*G,W={draw:function(t,e){var r=Math.sqrt(e/Y),n=r*G;t.moveTo(0,-r),t.lineTo(n,0),t.lineTo(0,r),t.lineTo(-n,0),t.closePath()}},X=Math.sin(h/10)/Math.sin(7*h/10),Z=Math.sin(p/10)*X,J=-Math.cos(p/10)*X,K={draw:function(t,e){var r=Math.sqrt(.8908130915292852*e),n=Z*r,i=J*r;t.moveTo(0,-r),t.lineTo(n,i);for(var a=1;a<5;++a){var o=p*a/5,s=Math.cos(o),l=Math.sin(o);t.lineTo(l*r,-s*r),t.lineTo(s*n-l*i,l*n+s*i)}t.closePath()}},$={draw:function(t,e){var r=Math.sqrt(e),n=-r/2;t.rect(n,n,r,r)}},Q=Math.sqrt(3),tt={draw:function(t,e){var r=-Math.sqrt(e/(3*Q));t.moveTo(0,2*r),t.lineTo(-Q*r,-r),t.lineTo(Q*r,-r),t.closePath()}},et=-.5,rt=Math.sqrt(3)/2,nt=1/Math.sqrt(12),it=3*(nt/2+1),at={draw:function(t,e){var r=Math.sqrt(e/it),n=r/2,i=r*nt,a=n,o=r*nt+r,s=-a,l=o;t.moveTo(n,i),t.lineTo(a,o),t.lineTo(s,l),t.lineTo(et*n-rt*i,rt*n+et*i),t.lineTo(et*a-rt*o,rt*a+et*o),t.lineTo(et*s-rt*l,rt*s+et*l),t.lineTo(et*n+rt*i,et*i-rt*n),t.lineTo(et*a+rt*o,et*o-rt*a),t.lineTo(et*s+rt*l,et*l-rt*s),t.closePath()}},ot=[q,H,W,$,K,tt,at];function st(){}function lt(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function ct(t){this._context=t}function ut(t){this._context=t}function ht(t){this._context=t}function ft(t,e){this._basis=new ct(t),this._beta=e}ct.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:lt(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:lt(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ut.prototype={areaStart:st,areaEnd:st,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:lt(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ht.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+t)/6,n=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:lt(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ft.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,r=t.length-1;if(r>0)for(var n,i=t[0],a=e[0],o=t[r]-i,s=e[r]-a,l=-1;++l<=r;)n=l/r,this._basis.point(this._beta*t[l]+(1-this._beta)*(i+n*o),this._beta*e[l]+(1-this._beta)*(a+n*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var pt=function t(e){function r(t){return 1===e?new ct(t):new ft(t,e)}return r.beta=function(e){return t(+e)},r}(.85);function dt(t,e,r){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-r),t._x2,t._y2)}function gt(t,e){this._context=t,this._k=(1-e)/6}gt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:dt(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:dt(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var vt=function t(e){function r(t){return new gt(t,e)}return r.tension=function(e){return t(+e)},r}(0);function mt(t,e){this._context=t,this._k=(1-e)/6}mt.prototype={areaStart:st,areaEnd:st,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:dt(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var yt=function t(e){function r(t){return new mt(t,e)}return r.tension=function(e){return t(+e)},r}(0);function xt(t,e){this._context=t,this._k=(1-e)/6}xt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:dt(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var bt=function t(e){function r(t){return new xt(t,e)}return r.tension=function(e){return t(+e)},r}(0);function _t(t,e,r){var n=t._x1,i=t._y1,a=t._x2,o=t._y2;if(t._l01_a>u){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,l=3*t._l01_a*(t._l01_a+t._l12_a);n=(n*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/l,i=(i*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/l}if(t._l23_a>u){var c=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,h=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*c+t._x1*t._l23_2a-e*t._l12_2a)/h,o=(o*c+t._y1*t._l23_2a-r*t._l12_2a)/h}t._context.bezierCurveTo(n,i,a,o,t._x2,t._y2)}function wt(t,e){this._context=t,this._alpha=e}wt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:_t(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var kt=function t(e){function r(t){return e?new wt(t,e):new gt(t,0)}return r.alpha=function(e){return t(+e)},r}(.5);function Tt(t,e){this._context=t,this._alpha=e}Tt.prototype={areaStart:st,areaEnd:st,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:_t(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var At=function t(e){function r(t){return e?new Tt(t,e):new mt(t,0)}return r.alpha=function(e){return t(+e)},r}(.5);function Mt(t,e){this._context=t,this._alpha=e}Mt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:_t(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var St=function t(e){function r(t){return e?new Mt(t,e):new xt(t,0)}return r.alpha=function(e){return t(+e)},r}(.5);function Et(t){this._context=t}function Ct(t){return t<0?-1:1}function Lt(t,e,r){var n=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(n||i<0&&-0),o=(r-t._y1)/(i||n<0&&-0),s=(a*i+o*n)/(n+i);return(Ct(a)+Ct(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function Pt(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function Ot(t,e,r){var n=t._x0,i=t._y0,a=t._x1,o=t._y1,s=(a-n)/3;t._context.bezierCurveTo(n+s,i+s*e,a-s,o-s*r,a,o)}function zt(t){this._context=t}function It(t){this._context=new Dt(t)}function Dt(t){this._context=t}function Rt(t){this._context=t}function Ft(t){var e,r,n=t.length-1,i=new Array(n),a=new Array(n),o=new Array(n);for(i[0]=0,a[0]=2,o[0]=t[0]+2*t[1],e=1;e<n-1;++e)i[e]=1,a[e]=4,o[e]=4*t[e]+2*t[e+1];for(i[n-1]=2,a[n-1]=7,o[n-1]=8*t[n-1]+t[n],e=1;e<n;++e)r=i[e]/a[e-1],a[e]-=r,o[e]-=r*o[e-1];for(i[n-1]=o[n-1]/a[n-1],e=n-2;e>=0;--e)i[e]=(o[e]-i[e+1])/a[e];for(a[n-1]=(t[n]+i[n-1])/2,e=0;e<n-1;++e)a[e]=2*t[e+1]-i[e+1];return[i,a]}function Bt(t,e){this._context=t,this._t=e}function Nt(t,e){if((i=t.length)>1)for(var r,n,i,a=1,o=t[e[0]],s=o.length;a<i;++a)for(n=o,o=t[e[a]],r=0;r<s;++r)o[r][1]+=o[r][0]=isNaN(n[r][1])?n[r][0]:n[r][1]}function jt(t){for(var e=t.length,r=new Array(e);--e>=0;)r[e]=e;return r}function Ut(t,e){return t[e]}function Vt(t){var e=t.map(qt);return jt(t).sort(function(t,r){return e[t]-e[r]})}function qt(t){for(var e,r=-1,n=0,i=t.length,a=-1/0;++r<i;)(e=+t[r][1])>a&&(a=e,n=r);return n}function Ht(t){var e=t.map(Gt);return jt(t).sort(function(t,r){return e[t]-e[r]})}function Gt(t){for(var e,r=0,n=-1,i=t.length;++n<i;)(e=+t[n][1])&&(r+=e);return r}Et.prototype={areaStart:st,areaEnd:st,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}},zt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Ot(this,this._t0,Pt(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var r=NaN;if(e=+e,(t=+t)!==this._x1||e!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,Ot(this,Pt(this,r=Lt(this,t,e)),r);break;default:Ot(this,this._t0,r=Lt(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=r}}},(It.prototype=Object.create(zt.prototype)).point=function(t,e){zt.prototype.point.call(this,e,t)},Dt.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,r,n,i,a){this._context.bezierCurveTo(e,t,n,r,a,i)}},Rt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,r=t.length;if(r)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),2===r)this._context.lineTo(t[1],e[1]);else for(var n=Ft(t),i=Ft(e),a=0,o=1;o<r;++a,++o)this._context.bezierCurveTo(n[0][a],i[0][a],n[1][a],i[1][a],t[o],e[o]);(this._line||0!==this._line&&1===r)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,e){this._x.push(+t),this._y.push(+e)}},Bt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}}this._x=t,this._y=e}},t.arc=function(){var t=g,o=v,_=r(0),w=null,k=m,T=y,A=x,M=null;function S(){var r,g,v,m=+t.apply(this,arguments),y=+o.apply(this,arguments),x=k.apply(this,arguments)-f,S=T.apply(this,arguments)-f,E=n(S-x),C=S>x;if(M||(M=r=e.path()),y<m&&(g=y,y=m,m=g),y>u)if(E>p-u)M.moveTo(y*a(x),y*l(x)),M.arc(0,0,y,x,S,!C),m>u&&(M.moveTo(m*a(S),m*l(S)),M.arc(0,0,m,S,x,C));else{var L,P,O=x,z=S,I=x,D=S,R=E,F=E,B=A.apply(this,arguments)/2,N=B>u&&(w?+w.apply(this,arguments):c(m*m+y*y)),j=s(n(y-m)/2,+_.apply(this,arguments)),U=j,V=j;if(N>u){var q=d(N/m*l(B)),H=d(N/y*l(B));(R-=2*q)>u?(I+=q*=C?1:-1,D-=q):(R=0,I=D=(x+S)/2),(F-=2*H)>u?(O+=H*=C?1:-1,z-=H):(F=0,O=z=(x+S)/2)}var G=y*a(O),Y=y*l(O),W=m*a(D),X=m*l(D);if(j>u){var Z,J=y*a(z),K=y*l(z),$=m*a(I),Q=m*l(I);if(E<h&&(Z=function(t,e,r,n,i,a,o,s){var l=r-t,c=n-e,h=o-i,f=s-a,p=f*l-h*c;if(!(p*p<u))return[t+(p=(h*(e-a)-f*(t-i))/p)*l,e+p*c]}(G,Y,$,Q,J,K,W,X))){var tt=G-Z[0],et=Y-Z[1],rt=J-Z[0],nt=K-Z[1],it=1/l(((v=(tt*rt+et*nt)/(c(tt*tt+et*et)*c(rt*rt+nt*nt)))>1?0:v<-1?h:Math.acos(v))/2),at=c(Z[0]*Z[0]+Z[1]*Z[1]);U=s(j,(m-at)/(it-1)),V=s(j,(y-at)/(it+1))}}F>u?V>u?(L=b($,Q,G,Y,y,V,C),P=b(J,K,W,X,y,V,C),M.moveTo(L.cx+L.x01,L.cy+L.y01),V<j?M.arc(L.cx,L.cy,V,i(L.y01,L.x01),i(P.y01,P.x01),!C):(M.arc(L.cx,L.cy,V,i(L.y01,L.x01),i(L.y11,L.x11),!C),M.arc(0,0,y,i(L.cy+L.y11,L.cx+L.x11),i(P.cy+P.y11,P.cx+P.x11),!C),M.arc(P.cx,P.cy,V,i(P.y11,P.x11),i(P.y01,P.x01),!C))):(M.moveTo(G,Y),M.arc(0,0,y,O,z,!C)):M.moveTo(G,Y),m>u&&R>u?U>u?(L=b(W,X,J,K,m,-U,C),P=b(G,Y,$,Q,m,-U,C),M.lineTo(L.cx+L.x01,L.cy+L.y01),U<j?M.arc(L.cx,L.cy,U,i(L.y01,L.x01),i(P.y01,P.x01),!C):(M.arc(L.cx,L.cy,U,i(L.y01,L.x01),i(L.y11,L.x11),!C),M.arc(0,0,m,i(L.cy+L.y11,L.cx+L.x11),i(P.cy+P.y11,P.cx+P.x11),C),M.arc(P.cx,P.cy,U,i(P.y11,P.x11),i(P.y01,P.x01),!C))):M.arc(0,0,m,D,I,C):M.lineTo(W,X)}else M.moveTo(0,0);if(M.closePath(),r)return M=null,r+\\\"\\\"||null}return S.centroid=function(){var e=(+t.apply(this,arguments)+ +o.apply(this,arguments))/2,r=(+k.apply(this,arguments)+ +T.apply(this,arguments))/2-h/2;return[a(r)*e,l(r)*e]},S.innerRadius=function(e){return arguments.length?(t=\\\"function\\\"==typeof e?e:r(+e),S):t},S.outerRadius=function(t){return arguments.length?(o=\\\"function\\\"==typeof t?t:r(+t),S):o},S.cornerRadius=function(t){return arguments.length?(_=\\\"function\\\"==typeof t?t:r(+t),S):_},S.padRadius=function(t){return arguments.length?(w=null==t?null:\\\"function\\\"==typeof t?t:r(+t),S):w},S.startAngle=function(t){return arguments.length?(k=\\\"function\\\"==typeof t?t:r(+t),S):k},S.endAngle=function(t){return arguments.length?(T=\\\"function\\\"==typeof t?t:r(+t),S):T},S.padAngle=function(t){return arguments.length?(A=\\\"function\\\"==typeof t?t:r(+t),S):A},S.context=function(t){return arguments.length?(M=null==t?null:t,S):M},S},t.area=M,t.line=A,t.pie=function(){var t=E,e=S,n=null,i=r(0),a=r(p),o=r(0);function s(r){var s,l,c,u,h,f=r.length,d=0,g=new Array(f),v=new Array(f),m=+i.apply(this,arguments),y=Math.min(p,Math.max(-p,a.apply(this,arguments)-m)),x=Math.min(Math.abs(y)/f,o.apply(this,arguments)),b=x*(y<0?-1:1);for(s=0;s<f;++s)(h=v[g[s]=s]=+t(r[s],s,r))>0&&(d+=h);for(null!=e?g.sort(function(t,r){return e(v[t],v[r])}):null!=n&&g.sort(function(t,e){return n(r[t],r[e])}),s=0,c=d?(y-f*b)/d:0;s<f;++s,m=u)l=g[s],u=m+((h=v[l])>0?h*c:0)+b,v[l]={data:r[l],index:s,value:h,startAngle:m,endAngle:u,padAngle:x};return v}return s.value=function(e){return arguments.length?(t=\\\"function\\\"==typeof e?e:r(+e),s):t},s.sortValues=function(t){return arguments.length?(e=t,n=null,s):e},s.sort=function(t){return arguments.length?(n=t,e=null,s):n},s.startAngle=function(t){return arguments.length?(i=\\\"function\\\"==typeof t?t:r(+t),s):i},s.endAngle=function(t){return arguments.length?(a=\\\"function\\\"==typeof t?t:r(+t),s):a},s.padAngle=function(t){return arguments.length?(o=\\\"function\\\"==typeof t?t:r(+t),s):o},s},t.areaRadial=I,t.radialArea=I,t.lineRadial=z,t.radialLine=z,t.pointRadial=D,t.linkHorizontal=function(){return N(j)},t.linkVertical=function(){return N(U)},t.linkRadial=function(){var t=N(V);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t},t.symbol=function(){var t=r(q),n=r(64),i=null;function a(){var r;if(i||(i=r=e.path()),t.apply(this,arguments).draw(i,+n.apply(this,arguments)),r)return i=null,r+\\\"\\\"||null}return a.type=function(e){return arguments.length?(t=\\\"function\\\"==typeof e?e:r(e),a):t},a.size=function(t){return arguments.length?(n=\\\"function\\\"==typeof t?t:r(+t),a):n},a.context=function(t){return arguments.length?(i=null==t?null:t,a):i},a},t.symbols=ot,t.symbolCircle=q,t.symbolCross=H,t.symbolDiamond=W,t.symbolSquare=$,t.symbolStar=K,t.symbolTriangle=tt,t.symbolWye=at,t.curveBasisClosed=function(t){return new ut(t)},t.curveBasisOpen=function(t){return new ht(t)},t.curveBasis=function(t){return new ct(t)},t.curveBundle=pt,t.curveCardinalClosed=yt,t.curveCardinalOpen=bt,t.curveCardinal=vt,t.curveCatmullRomClosed=At,t.curveCatmullRomOpen=St,t.curveCatmullRom=kt,t.curveLinearClosed=function(t){return new Et(t)},t.curveLinear=w,t.curveMonotoneX=function(t){return new zt(t)},t.curveMonotoneY=function(t){return new It(t)},t.curveNatural=function(t){return new Rt(t)},t.curveStep=function(t){return new Bt(t,.5)},t.curveStepAfter=function(t){return new Bt(t,1)},t.curveStepBefore=function(t){return new Bt(t,0)},t.stack=function(){var t=r([]),e=jt,n=Nt,i=Ut;function a(r){var a,o,s=t.apply(this,arguments),l=r.length,c=s.length,u=new Array(c);for(a=0;a<c;++a){for(var h,f=s[a],p=u[a]=new Array(l),d=0;d<l;++d)p[d]=h=[0,+i(r[d],f,d,r)],h.data=r[d];p.key=f}for(a=0,o=e(u);a<c;++a)u[o[a]].index=a;return n(u,o),u}return a.keys=function(e){return arguments.length?(t=\\\"function\\\"==typeof e?e:r(R.call(e)),a):t},a.value=function(t){return arguments.length?(i=\\\"function\\\"==typeof t?t:r(+t),a):i},a.order=function(t){return arguments.length?(e=null==t?jt:\\\"function\\\"==typeof t?t:r(R.call(t)),a):e},a.offset=function(t){return arguments.length?(n=null==t?Nt:t,a):n},a},t.stackOffsetExpand=function(t,e){if((n=t.length)>0){for(var r,n,i,a=0,o=t[0].length;a<o;++a){for(i=r=0;r<n;++r)i+=t[r][a][1]||0;if(i)for(r=0;r<n;++r)t[r][a][1]/=i}Nt(t,e)}},t.stackOffsetDiverging=function(t,e){if((s=t.length)>1)for(var r,n,i,a,o,s,l=0,c=t[e[0]].length;l<c;++l)for(a=o=0,r=0;r<s;++r)(i=(n=t[e[r]][l])[1]-n[0])>=0?(n[0]=a,n[1]=a+=i):i<0?(n[1]=o,n[0]=o+=i):n[0]=a},t.stackOffsetNone=Nt,t.stackOffsetSilhouette=function(t,e){if((r=t.length)>0){for(var r,n=0,i=t[e[0]],a=i.length;n<a;++n){for(var o=0,s=0;o<r;++o)s+=t[o][n][1]||0;i[n][1]+=i[n][0]=-s/2}Nt(t,e)}},t.stackOffsetWiggle=function(t,e){if((i=t.length)>0&&(n=(r=t[e[0]]).length)>0){for(var r,n,i,a=0,o=1;o<n;++o){for(var s=0,l=0,c=0;s<i;++s){for(var u=t[e[s]],h=u[o][1]||0,f=(h-(u[o-1][1]||0))/2,p=0;p<s;++p){var d=t[e[p]];f+=(d[o][1]||0)-(d[o-1][1]||0)}l+=h,c+=f*h}r[o-1][1]+=r[o-1][0]=a,l&&(a-=c/l)}r[o-1][1]+=r[o-1][0]=a,Nt(t,e)}},t.stackOrderAppearance=Vt,t.stackOrderAscending=Ht,t.stackOrderDescending=function(t){return Ht(t).reverse()},t.stackOrderInsideOut=function(t){var e,r,n=t.length,i=t.map(Gt),a=Vt(t),o=0,s=0,l=[],c=[];for(e=0;e<n;++e)r=a[e],o<s?(o+=i[r],l.push(r)):(s+=i[r],c.push(r));return c.reverse().concat(l)},t.stackOrderNone=jt,t.stackOrderReverse=function(t){return jt(t).reverse()},Object.defineProperty(t,\\\"__esModule\\\",{value:!0})},\\\"object\\\"==typeof r&&\\\"undefined\\\"!=typeof e?i(r,t(\\\"d3-path\\\")):i(n.d3=n.d3||{},n.d3)},{\\\"d3-path\\\":159}],162:[function(t,e,r){var n;n=this,function(t){\\\"use strict\\\";var e,r,n=0,i=0,a=0,o=1e3,s=0,l=0,c=0,u=\\\"object\\\"==typeof performance&&performance.now?performance:Date,h=\\\"object\\\"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function f(){return l||(h(p),l=u.now()+c)}function p(){l=0}function d(){this._call=this._time=this._next=null}function g(t,e,r){var n=new d;return n.restart(t,e,r),n}function v(){f(),++n;for(var t,r=e;r;)(t=l-r._time)>=0&&r._call.call(null,t),r=r._next;--n}function m(){l=(s=u.now())+c,n=i=0;try{v()}finally{n=0,function(){var t,n,i=e,a=1/0;for(;i;)i._call?(a>i._time&&(a=i._time),t=i,i=i._next):(n=i._next,i._next=null,i=t?t._next=n:e=n);r=t,x(a)}(),l=0}}function y(){var t=u.now(),e=t-s;e>o&&(c-=e,s=t)}function x(t){n||(i&&(i=clearTimeout(i)),t-l>24?(t<1/0&&(i=setTimeout(m,t-u.now()-c)),a&&(a=clearInterval(a))):(a||(s=u.now(),a=setInterval(y,o)),n=1,h(m)))}d.prototype=g.prototype={constructor:d,restart:function(t,n,i){if(\\\"function\\\"!=typeof t)throw new TypeError(\\\"callback is not a function\\\");i=(null==i?f():+i)+(null==n?0:+n),this._next||r===this||(r?r._next=this:e=this,r=this),this._call=t,this._time=i,x()},stop:function(){this._call&&(this._call=null,this._time=1/0,x())}};t.now=f,t.timer=g,t.timerFlush=v,t.timeout=function(t,e,r){var n=new d;return e=null==e?0:+e,n.restart(function(r){n.stop(),t(r+e)},e,r),n},t.interval=function(t,e,r){var n=new d,i=e;return null==e?(n.restart(t,e,r),n):(e=+e,r=null==r?f():+r,n.restart(function a(o){o+=i,n.restart(a,i+=e,r),t(o)},e,r),n)},Object.defineProperty(t,\\\"__esModule\\\",{value:!0})}(\\\"object\\\"==typeof r&&\\\"undefined\\\"!=typeof e?r:n.d3=n.d3||{})},{}],163:[function(t,e,r){!function(){var t={version:\\\"3.5.17\\\"},r=[].slice,n=function(t){return r.call(t)},i=this.document;function a(t){return t&&(t.ownerDocument||t.document||t).documentElement}function o(t){return t&&(t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView)}if(i)try{n(i.documentElement.childNodes)[0].nodeType}catch(t){n=function(t){for(var e=t.length,r=new Array(e);e--;)r[e]=t[e];return r}}if(Date.now||(Date.now=function(){return+new Date}),i)try{i.createElement(\\\"DIV\\\").style.setProperty(\\\"opacity\\\",0,\\\"\\\")}catch(t){var s=this.Element.prototype,l=s.setAttribute,c=s.setAttributeNS,u=this.CSSStyleDeclaration.prototype,h=u.setProperty;s.setAttribute=function(t,e){l.call(this,t,e+\\\"\\\")},s.setAttributeNS=function(t,e,r){c.call(this,t,e,r+\\\"\\\")},u.setProperty=function(t,e,r){h.call(this,t,e+\\\"\\\",r)}}function f(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function p(t){return null===t?NaN:+t}function d(t){return!isNaN(t)}function g(t){return{left:function(e,r,n,i){for(arguments.length<3&&(n=0),arguments.length<4&&(i=e.length);n<i;){var a=n+i>>>1;t(e[a],r)<0?n=a+1:i=a}return n},right:function(e,r,n,i){for(arguments.length<3&&(n=0),arguments.length<4&&(i=e.length);n<i;){var a=n+i>>>1;t(e[a],r)>0?i=a:n=a+1}return n}}}t.ascending=f,t.descending=function(t,e){return e<t?-1:e>t?1:e>=t?0:NaN},t.min=function(t,e){var r,n,i=-1,a=t.length;if(1===arguments.length){for(;++i<a;)if(null!=(n=t[i])&&n>=n){r=n;break}for(;++i<a;)null!=(n=t[i])&&r>n&&(r=n)}else{for(;++i<a;)if(null!=(n=e.call(t,t[i],i))&&n>=n){r=n;break}for(;++i<a;)null!=(n=e.call(t,t[i],i))&&r>n&&(r=n)}return r},t.max=function(t,e){var r,n,i=-1,a=t.length;if(1===arguments.length){for(;++i<a;)if(null!=(n=t[i])&&n>=n){r=n;break}for(;++i<a;)null!=(n=t[i])&&n>r&&(r=n)}else{for(;++i<a;)if(null!=(n=e.call(t,t[i],i))&&n>=n){r=n;break}for(;++i<a;)null!=(n=e.call(t,t[i],i))&&n>r&&(r=n)}return r},t.extent=function(t,e){var r,n,i,a=-1,o=t.length;if(1===arguments.length){for(;++a<o;)if(null!=(n=t[a])&&n>=n){r=i=n;break}for(;++a<o;)null!=(n=t[a])&&(r>n&&(r=n),i<n&&(i=n))}else{for(;++a<o;)if(null!=(n=e.call(t,t[a],a))&&n>=n){r=i=n;break}for(;++a<o;)null!=(n=e.call(t,t[a],a))&&(r>n&&(r=n),i<n&&(i=n))}return[r,i]},t.sum=function(t,e){var r,n=0,i=t.length,a=-1;if(1===arguments.length)for(;++a<i;)d(r=+t[a])&&(n+=r);else for(;++a<i;)d(r=+e.call(t,t[a],a))&&(n+=r);return n},t.mean=function(t,e){var r,n=0,i=t.length,a=-1,o=i;if(1===arguments.length)for(;++a<i;)d(r=p(t[a]))?n+=r:--o;else for(;++a<i;)d(r=p(e.call(t,t[a],a)))?n+=r:--o;if(o)return n/o},t.quantile=function(t,e){var r=(t.length-1)*e+1,n=Math.floor(r),i=+t[n-1],a=r-n;return a?i+a*(t[n]-i):i},t.median=function(e,r){var n,i=[],a=e.length,o=-1;if(1===arguments.length)for(;++o<a;)d(n=p(e[o]))&&i.push(n);else for(;++o<a;)d(n=p(r.call(e,e[o],o)))&&i.push(n);if(i.length)return t.quantile(i.sort(f),.5)},t.variance=function(t,e){var r,n,i=t.length,a=0,o=0,s=-1,l=0;if(1===arguments.length)for(;++s<i;)d(r=p(t[s]))&&(o+=(n=r-a)*(r-(a+=n/++l)));else for(;++s<i;)d(r=p(e.call(t,t[s],s)))&&(o+=(n=r-a)*(r-(a+=n/++l)));if(l>1)return o/(l-1)},t.deviation=function(){var e=t.variance.apply(this,arguments);return e?Math.sqrt(e):e};var v=g(f);function m(t){return t.length}t.bisectLeft=v.left,t.bisect=t.bisectRight=v.right,t.bisector=function(t){return g(1===t.length?function(e,r){return f(t(e),r)}:t)},t.shuffle=function(t,e,r){(a=arguments.length)<3&&(r=t.length,a<2&&(e=0));for(var n,i,a=r-e;a;)i=Math.random()*a--|0,n=t[a+e],t[a+e]=t[i+e],t[i+e]=n;return t},t.permute=function(t,e){for(var r=e.length,n=new Array(r);r--;)n[r]=t[e[r]];return n},t.pairs=function(t){for(var e=0,r=t.length-1,n=t[0],i=new Array(r<0?0:r);e<r;)i[e]=[n,n=t[++e]];return i},t.transpose=function(e){if(!(a=e.length))return[];for(var r=-1,n=t.min(e,m),i=new Array(n);++r<n;)for(var a,o=-1,s=i[r]=new Array(a);++o<a;)s[o]=e[o][r];return i},t.zip=function(){return t.transpose(arguments)},t.keys=function(t){var e=[];for(var r in t)e.push(r);return e},t.values=function(t){var e=[];for(var r in t)e.push(t[r]);return e},t.entries=function(t){var e=[];for(var r in t)e.push({key:r,value:t[r]});return e},t.merge=function(t){for(var e,r,n,i=t.length,a=-1,o=0;++a<i;)o+=t[a].length;for(r=new Array(o);--i>=0;)for(e=(n=t[i]).length;--e>=0;)r[--o]=n[e];return r};var y=Math.abs;function x(t,e){for(var r in e)Object.defineProperty(t.prototype,r,{value:e[r],enumerable:!1})}function b(){this._=Object.create(null)}t.range=function(t,e,r){if(arguments.length<3&&(r=1,arguments.length<2&&(e=t,t=0)),(e-t)/r==1/0)throw new Error(\\\"infinite range\\\");var n,i=[],a=function(t){var e=1;for(;t*e%1;)e*=10;return e}(y(r)),o=-1;if(t*=a,e*=a,(r*=a)<0)for(;(n=t+r*++o)>e;)i.push(n/a);else for(;(n=t+r*++o)<e;)i.push(n/a);return i},t.map=function(t,e){var r=new b;if(t instanceof b)t.forEach(function(t,e){r.set(t,e)});else if(Array.isArray(t)){var n,i=-1,a=t.length;if(1===arguments.length)for(;++i<a;)r.set(i,t[i]);else for(;++i<a;)r.set(e.call(t,n=t[i],i),n)}else for(var o in t)r.set(o,t[o]);return r};var _=\\\"__proto__\\\",w=\\\"\\\\0\\\";function k(t){return(t+=\\\"\\\")===_||t[0]===w?w+t:t}function T(t){return(t+=\\\"\\\")[0]===w?t.slice(1):t}function A(t){return k(t)in this._}function M(t){return(t=k(t))in this._&&delete this._[t]}function S(){var t=[];for(var e in this._)t.push(T(e));return t}function E(){var t=0;for(var e in this._)++t;return t}function C(){for(var t in this._)return!1;return!0}function L(){this._=Object.create(null)}function P(t){return t}function O(t,e,r){return function(){var n=r.apply(e,arguments);return n===e?t:n}}function z(t,e){if(e in t)return e;e=e.charAt(0).toUpperCase()+e.slice(1);for(var r=0,n=I.length;r<n;++r){var i=I[r]+e;if(i in t)return i}}x(b,{has:A,get:function(t){return this._[k(t)]},set:function(t,e){return this._[k(t)]=e},remove:M,keys:S,values:function(){var t=[];for(var e in this._)t.push(this._[e]);return t},entries:function(){var t=[];for(var e in this._)t.push({key:T(e),value:this._[e]});return t},size:E,empty:C,forEach:function(t){for(var e in this._)t.call(this,T(e),this._[e])}}),t.nest=function(){var e,r,n={},i=[],a=[];function o(t,a,s){if(s>=i.length)return r?r.call(n,a):e?a.sort(e):a;for(var l,c,u,h,f=-1,p=a.length,d=i[s++],g=new b;++f<p;)(h=g.get(l=d(c=a[f])))?h.push(c):g.set(l,[c]);return t?(c=t(),u=function(e,r){c.set(e,o(t,r,s))}):(c={},u=function(e,r){c[e]=o(t,r,s)}),g.forEach(u),c}return n.map=function(t,e){return o(e,t,0)},n.entries=function(e){return function t(e,r){if(r>=i.length)return e;var n=[],o=a[r++];return e.forEach(function(e,i){n.push({key:e,values:t(i,r)})}),o?n.sort(function(t,e){return o(t.key,e.key)}):n}(o(t.map,e,0),0)},n.key=function(t){return i.push(t),n},n.sortKeys=function(t){return a[i.length-1]=t,n},n.sortValues=function(t){return e=t,n},n.rollup=function(t){return r=t,n},n},t.set=function(t){var e=new L;if(t)for(var r=0,n=t.length;r<n;++r)e.add(t[r]);return e},x(L,{has:A,add:function(t){return this._[k(t+=\\\"\\\")]=!0,t},remove:M,values:S,size:E,empty:C,forEach:function(t){for(var e in this._)t.call(this,T(e))}}),t.behavior={},t.rebind=function(t,e){for(var r,n=1,i=arguments.length;++n<i;)t[r=arguments[n]]=O(t,e,e[r]);return t};var I=[\\\"webkit\\\",\\\"ms\\\",\\\"moz\\\",\\\"Moz\\\",\\\"o\\\",\\\"O\\\"];function D(){}function R(){}function F(t){var e=[],r=new b;function n(){for(var r,n=e,i=-1,a=n.length;++i<a;)(r=n[i].on)&&r.apply(this,arguments);return t}return n.on=function(n,i){var a,o=r.get(n);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,a=e.indexOf(o)).concat(e.slice(a+1)),r.remove(n)),i&&e.push(r.set(n,{on:i})),t)},n}function B(){t.event.preventDefault()}function N(){for(var e,r=t.event;e=r.sourceEvent;)r=e;return r}function j(e){for(var r=new R,n=0,i=arguments.length;++n<i;)r[arguments[n]]=F(r);return r.of=function(n,i){return function(a){try{var o=a.sourceEvent=t.event;a.target=e,t.event=a,r[a.type].apply(n,i)}finally{t.event=o}}},r}t.dispatch=function(){for(var t=new R,e=-1,r=arguments.length;++e<r;)t[arguments[e]]=F(t);return t},R.prototype.on=function(t,e){var r=t.indexOf(\\\".\\\"),n=\\\"\\\";if(r>=0&&(n=t.slice(r+1),t=t.slice(0,r)),t)return arguments.length<2?this[t].on(n):this[t].on(n,e);if(2===arguments.length){if(null==e)for(t in this)this.hasOwnProperty(t)&&this[t].on(n,null);return this}},t.event=null,t.requote=function(t){return t.replace(U,\\\"\\\\\\\\$&\\\")};var U=/[\\\\\\\\\\\\^\\\\$\\\\*\\\\+\\\\?\\\\|\\\\[\\\\]\\\\(\\\\)\\\\.\\\\{\\\\}]/g,V={}.__proto__?function(t,e){t.__proto__=e}:function(t,e){for(var r in e)t[r]=e[r]};function q(t){return V(t,W),t}var H=function(t,e){return e.querySelector(t)},G=function(t,e){return e.querySelectorAll(t)},Y=function(t,e){var r=t.matches||t[z(t,\\\"matchesSelector\\\")];return(Y=function(t,e){return r.call(t,e)})(t,e)};\\\"function\\\"==typeof Sizzle&&(H=function(t,e){return Sizzle(t,e)[0]||null},G=Sizzle,Y=Sizzle.matchesSelector),t.selection=function(){return t.select(i.documentElement)};var W=t.selection.prototype=[];function X(t){return\\\"function\\\"==typeof t?t:function(){return H(t,this)}}function Z(t){return\\\"function\\\"==typeof t?t:function(){return G(t,this)}}W.select=function(t){var e,r,n,i,a=[];t=X(t);for(var o=-1,s=this.length;++o<s;){a.push(e=[]),e.parentNode=(n=this[o]).parentNode;for(var l=-1,c=n.length;++l<c;)(i=n[l])?(e.push(r=t.call(i,i.__data__,l,o)),r&&\\\"__data__\\\"in i&&(r.__data__=i.__data__)):e.push(null)}return q(a)},W.selectAll=function(t){var e,r,i=[];t=Z(t);for(var a=-1,o=this.length;++a<o;)for(var s=this[a],l=-1,c=s.length;++l<c;)(r=s[l])&&(i.push(e=n(t.call(r,r.__data__,l,a))),e.parentNode=r);return q(i)};var J=\\\"http://www.w3.org/1999/xhtml\\\",K={svg:\\\"http://www.w3.org/2000/svg\\\",xhtml:J,xlink:\\\"http://www.w3.org/1999/xlink\\\",xml:\\\"http://www.w3.org/XML/1998/namespace\\\",xmlns:\\\"http://www.w3.org/2000/xmlns/\\\"};function $(e,r){return e=t.ns.qualify(e),null==r?e.local?function(){this.removeAttributeNS(e.space,e.local)}:function(){this.removeAttribute(e)}:\\\"function\\\"==typeof r?e.local?function(){var t=r.apply(this,arguments);null==t?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,t)}:function(){var t=r.apply(this,arguments);null==t?this.removeAttribute(e):this.setAttribute(e,t)}:e.local?function(){this.setAttributeNS(e.space,e.local,r)}:function(){this.setAttribute(e,r)}}function Q(t){return t.trim().replace(/\\\\s+/g,\\\" \\\")}function tt(e){return new RegExp(\\\"(?:^|\\\\\\\\s+)\\\"+t.requote(e)+\\\"(?:\\\\\\\\s+|$)\\\",\\\"g\\\")}function et(t){return(t+\\\"\\\").trim().split(/^|\\\\s+/)}function rt(t,e){var r=(t=et(t).map(nt)).length;return\\\"function\\\"==typeof e?function(){for(var n=-1,i=e.apply(this,arguments);++n<r;)t[n](this,i)}:function(){for(var n=-1;++n<r;)t[n](this,e)}}function nt(t){var e=tt(t);return function(r,n){if(i=r.classList)return n?i.add(t):i.remove(t);var i=r.getAttribute(\\\"class\\\")||\\\"\\\";n?(e.lastIndex=0,e.test(i)||r.setAttribute(\\\"class\\\",Q(i+\\\" \\\"+t))):r.setAttribute(\\\"class\\\",Q(i.replace(e,\\\" \\\")))}}function it(t,e,r){return null==e?function(){this.style.removeProperty(t)}:\\\"function\\\"==typeof e?function(){var n=e.apply(this,arguments);null==n?this.style.removeProperty(t):this.style.setProperty(t,n,r)}:function(){this.style.setProperty(t,e,r)}}function at(t,e){return null==e?function(){delete this[t]}:\\\"function\\\"==typeof e?function(){var r=e.apply(this,arguments);null==r?delete this[t]:this[t]=r}:function(){this[t]=e}}function ot(e){return\\\"function\\\"==typeof e?e:(e=t.ns.qualify(e)).local?function(){return this.ownerDocument.createElementNS(e.space,e.local)}:function(){var t=this.ownerDocument,r=this.namespaceURI;return r===J&&t.documentElement.namespaceURI===J?t.createElement(e):t.createElementNS(r,e)}}function st(){var t=this.parentNode;t&&t.removeChild(this)}function lt(t){return{__data__:t}}function ct(t){return function(){return Y(this,t)}}function ut(t,e){for(var r=0,n=t.length;r<n;r++)for(var i,a=t[r],o=0,s=a.length;o<s;o++)(i=a[o])&&e(i,o,r);return t}function ht(t){return V(t,ft),t}t.ns={prefix:K,qualify:function(t){var e=t.indexOf(\\\":\\\"),r=t;return e>=0&&\\\"xmlns\\\"!==(r=t.slice(0,e))&&(t=t.slice(e+1)),K.hasOwnProperty(r)?{space:K[r],local:t}:t}},W.attr=function(e,r){if(arguments.length<2){if(\\\"string\\\"==typeof e){var n=this.node();return(e=t.ns.qualify(e)).local?n.getAttributeNS(e.space,e.local):n.getAttribute(e)}for(r in e)this.each($(r,e[r]));return this}return this.each($(e,r))},W.classed=function(t,e){if(arguments.length<2){if(\\\"string\\\"==typeof t){var r=this.node(),n=(t=et(t)).length,i=-1;if(e=r.classList){for(;++i<n;)if(!e.contains(t[i]))return!1}else for(e=r.getAttribute(\\\"class\\\");++i<n;)if(!tt(t[i]).test(e))return!1;return!0}for(e in t)this.each(rt(e,t[e]));return this}return this.each(rt(t,e))},W.style=function(t,e,r){var n=arguments.length;if(n<3){if(\\\"string\\\"!=typeof t){for(r in n<2&&(e=\\\"\\\"),t)this.each(it(r,t[r],e));return this}if(n<2){var i=this.node();return o(i).getComputedStyle(i,null).getPropertyValue(t)}r=\\\"\\\"}return this.each(it(t,e,r))},W.property=function(t,e){if(arguments.length<2){if(\\\"string\\\"==typeof t)return this.node()[t];for(e in t)this.each(at(e,t[e]));return this}return this.each(at(t,e))},W.text=function(t){return arguments.length?this.each(\\\"function\\\"==typeof t?function(){var e=t.apply(this,arguments);this.textContent=null==e?\\\"\\\":e}:null==t?function(){this.textContent=\\\"\\\"}:function(){this.textContent=t}):this.node().textContent},W.html=function(t){return arguments.length?this.each(\\\"function\\\"==typeof t?function(){var e=t.apply(this,arguments);this.innerHTML=null==e?\\\"\\\":e}:null==t?function(){this.innerHTML=\\\"\\\"}:function(){this.innerHTML=t}):this.node().innerHTML},W.append=function(t){return t=ot(t),this.select(function(){return this.appendChild(t.apply(this,arguments))})},W.insert=function(t,e){return t=ot(t),e=X(e),this.select(function(){return this.insertBefore(t.apply(this,arguments),e.apply(this,arguments)||null)})},W.remove=function(){return this.each(st)},W.data=function(t,e){var r,n,i=-1,a=this.length;if(!arguments.length){for(t=new Array(a=(r=this[0]).length);++i<a;)(n=r[i])&&(t[i]=n.__data__);return t}function o(t,r){var n,i,a,o=t.length,u=r.length,h=Math.min(o,u),f=new Array(u),p=new Array(u),d=new Array(o);if(e){var g,v=new b,m=new Array(o);for(n=-1;++n<o;)(i=t[n])&&(v.has(g=e.call(i,i.__data__,n))?d[n]=i:v.set(g,i),m[n]=g);for(n=-1;++n<u;)(i=v.get(g=e.call(r,a=r[n],n)))?!0!==i&&(f[n]=i,i.__data__=a):p[n]=lt(a),v.set(g,!0);for(n=-1;++n<o;)n in m&&!0!==v.get(m[n])&&(d[n]=t[n])}else{for(n=-1;++n<h;)i=t[n],a=r[n],i?(i.__data__=a,f[n]=i):p[n]=lt(a);for(;n<u;++n)p[n]=lt(r[n]);for(;n<o;++n)d[n]=t[n]}p.update=f,p.parentNode=f.parentNode=d.parentNode=t.parentNode,s.push(p),l.push(f),c.push(d)}var s=ht([]),l=q([]),c=q([]);if(\\\"function\\\"==typeof t)for(;++i<a;)o(r=this[i],t.call(r,r.parentNode.__data__,i));else for(;++i<a;)o(r=this[i],t);return l.enter=function(){return s},l.exit=function(){return c},l},W.datum=function(t){return arguments.length?this.property(\\\"__data__\\\",t):this.property(\\\"__data__\\\")},W.filter=function(t){var e,r,n,i=[];\\\"function\\\"!=typeof t&&(t=ct(t));for(var a=0,o=this.length;a<o;a++){i.push(e=[]),e.parentNode=(r=this[a]).parentNode;for(var s=0,l=r.length;s<l;s++)(n=r[s])&&t.call(n,n.__data__,s,a)&&e.push(n)}return q(i)},W.order=function(){for(var t=-1,e=this.length;++t<e;)for(var r,n=this[t],i=n.length-1,a=n[i];--i>=0;)(r=n[i])&&(a&&a!==r.nextSibling&&a.parentNode.insertBefore(r,a),a=r);return this},W.sort=function(t){t=function(t){arguments.length||(t=f);return function(e,r){return e&&r?t(e.__data__,r.__data__):!e-!r}}.apply(this,arguments);for(var e=-1,r=this.length;++e<r;)this[e].sort(t);return this.order()},W.each=function(t){return ut(this,function(e,r,n){t.call(e,e.__data__,r,n)})},W.call=function(t){var e=n(arguments);return t.apply(e[0]=this,e),this},W.empty=function(){return!this.node()},W.node=function(){for(var t=0,e=this.length;t<e;t++)for(var r=this[t],n=0,i=r.length;n<i;n++){var a=r[n];if(a)return a}return null},W.size=function(){var t=0;return ut(this,function(){++t}),t};var ft=[];function pt(e,r,i){var a=\\\"__on\\\"+e,o=e.indexOf(\\\".\\\"),s=gt;o>0&&(e=e.slice(0,o));var l=dt.get(e);function c(){var t=this[a];t&&(this.removeEventListener(e,t,t.$),delete this[a])}return l&&(e=l,s=vt),o?r?function(){var t=s(r,n(arguments));c.call(this),this.addEventListener(e,this[a]=t,t.$=i),t._=r}:c:r?D:function(){var r,n=new RegExp(\\\"^__on([^.]+)\\\"+t.requote(e)+\\\"$\\\");for(var i in this)if(r=i.match(n)){var a=this[i];this.removeEventListener(r[1],a,a.$),delete this[i]}}}t.selection.enter=ht,t.selection.enter.prototype=ft,ft.append=W.append,ft.empty=W.empty,ft.node=W.node,ft.call=W.call,ft.size=W.size,ft.select=function(t){for(var e,r,n,i,a,o=[],s=-1,l=this.length;++s<l;){n=(i=this[s]).update,o.push(e=[]),e.parentNode=i.parentNode;for(var c=-1,u=i.length;++c<u;)(a=i[c])?(e.push(n[c]=r=t.call(i.parentNode,a.__data__,c,s)),r.__data__=a.__data__):e.push(null)}return q(o)},ft.insert=function(t,e){var r,n,i;return arguments.length<2&&(r=this,e=function(t,e,a){var o,s=r[a].update,l=s.length;for(a!=i&&(i=a,n=0),e>=n&&(n=e+1);!(o=s[n])&&++n<l;);return o}),W.insert.call(this,t,e)},t.select=function(t){var e;return\\\"string\\\"==typeof t?(e=[H(t,i)]).parentNode=i.documentElement:(e=[t]).parentNode=a(t),q([e])},t.selectAll=function(t){var e;return\\\"string\\\"==typeof t?(e=n(G(t,i))).parentNode=i.documentElement:(e=n(t)).parentNode=null,q([e])},W.on=function(t,e,r){var n=arguments.length;if(n<3){if(\\\"string\\\"!=typeof t){for(r in n<2&&(e=!1),t)this.each(pt(r,t[r],e));return this}if(n<2)return(n=this.node()[\\\"__on\\\"+t])&&n._;r=!1}return this.each(pt(t,e,r))};var dt=t.map({mouseenter:\\\"mouseover\\\",mouseleave:\\\"mouseout\\\"});function gt(e,r){return function(n){var i=t.event;t.event=n,r[0]=this.__data__;try{e.apply(this,r)}finally{t.event=i}}}function vt(t,e){var r=gt(t,e);return function(t){var e=t.relatedTarget;e&&(e===this||8&e.compareDocumentPosition(this))||r.call(this,t)}}i&&dt.forEach(function(t){\\\"on\\\"+t in i&&dt.remove(t)});var mt,yt=0;function xt(e){var r=\\\".dragsuppress-\\\"+ ++yt,n=\\\"click\\\"+r,i=t.select(o(e)).on(\\\"touchmove\\\"+r,B).on(\\\"dragstart\\\"+r,B).on(\\\"selectstart\\\"+r,B);if(null==mt&&(mt=!(\\\"onselectstart\\\"in e)&&z(e.style,\\\"userSelect\\\")),mt){var s=a(e).style,l=s[mt];s[mt]=\\\"none\\\"}return function(t){if(i.on(r,null),mt&&(s[mt]=l),t){var e=function(){i.on(n,null)};i.on(n,function(){B(),e()},!0),setTimeout(e,0)}}}t.mouse=function(t){return _t(t,N())};var bt=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;function _t(e,r){r.changedTouches&&(r=r.changedTouches[0]);var n=e.ownerSVGElement||e;if(n.createSVGPoint){var i=n.createSVGPoint();if(bt<0){var a=o(e);if(a.scrollX||a.scrollY){var s=(n=t.select(\\\"body\\\").append(\\\"svg\\\").style({position:\\\"absolute\\\",top:0,left:0,margin:0,padding:0,border:\\\"none\\\"},\\\"important\\\"))[0][0].getScreenCTM();bt=!(s.f||s.e),n.remove()}}return bt?(i.x=r.pageX,i.y=r.pageY):(i.x=r.clientX,i.y=r.clientY),[(i=i.matrixTransform(e.getScreenCTM().inverse())).x,i.y]}var l=e.getBoundingClientRect();return[r.clientX-l.left-e.clientLeft,r.clientY-l.top-e.clientTop]}function wt(){return t.event.changedTouches[0].identifier}t.touch=function(t,e,r){if(arguments.length<3&&(r=e,e=N().changedTouches),e)for(var n,i=0,a=e.length;i<a;++i)if((n=e[i]).identifier===r)return _t(t,n)},t.behavior.drag=function(){var e=j(a,\\\"drag\\\",\\\"dragstart\\\",\\\"dragend\\\"),r=null,n=s(D,t.mouse,o,\\\"mousemove\\\",\\\"mouseup\\\"),i=s(wt,t.touch,P,\\\"touchmove\\\",\\\"touchend\\\");function a(){this.on(\\\"mousedown.drag\\\",n).on(\\\"touchstart.drag\\\",i)}function s(n,i,a,o,s){return function(){var l,c=t.event.target.correspondingElement||t.event.target,u=this.parentNode,h=e.of(this,arguments),f=0,p=n(),d=\\\".drag\\\"+(null==p?\\\"\\\":\\\"-\\\"+p),g=t.select(a(c)).on(o+d,function(){var t,e,r=i(u,p);if(!r)return;t=r[0]-m[0],e=r[1]-m[1],f|=t|e,m=r,h({type:\\\"drag\\\",x:r[0]+l[0],y:r[1]+l[1],dx:t,dy:e})}).on(s+d,function(){if(!i(u,p))return;g.on(o+d,null).on(s+d,null),v(f),h({type:\\\"dragend\\\"})}),v=xt(c),m=i(u,p);l=r?[(l=r.apply(this,arguments)).x-m[0],l.y-m[1]]:[0,0],h({type:\\\"dragstart\\\"})}}return a.origin=function(t){return arguments.length?(r=t,a):r},t.rebind(a,e,\\\"on\\\")},t.touches=function(t,e){return arguments.length<2&&(e=N().touches),e?n(e).map(function(e){var r=_t(t,e);return r.identifier=e.identifier,r}):[]};var kt=1e-6,Tt=kt*kt,At=Math.PI,Mt=2*At,St=Mt-kt,Et=At/2,Ct=At/180,Lt=180/At;function Pt(t){return t>0?1:t<0?-1:0}function Ot(t,e,r){return(e[0]-t[0])*(r[1]-t[1])-(e[1]-t[1])*(r[0]-t[0])}function zt(t){return t>1?0:t<-1?At:Math.acos(t)}function It(t){return t>1?Et:t<-1?-Et:Math.asin(t)}function Dt(t){return((t=Math.exp(t))+1/t)/2}function Rt(t){return(t=Math.sin(t/2))*t}var Ft=Math.SQRT2;t.interpolateZoom=function(t,e){var r,n,i=t[0],a=t[1],o=t[2],s=e[0],l=e[1],c=e[2],u=s-i,h=l-a,f=u*u+h*h;if(f<Tt)n=Math.log(c/o)/Ft,r=function(t){return[i+t*u,a+t*h,o*Math.exp(Ft*t*n)]};else{var p=Math.sqrt(f),d=(c*c-o*o+4*f)/(2*o*2*p),g=(c*c-o*o-4*f)/(2*c*2*p),v=Math.log(Math.sqrt(d*d+1)-d),m=Math.log(Math.sqrt(g*g+1)-g);n=(m-v)/Ft,r=function(t){var e,r=t*n,s=Dt(v),l=o/(2*p)*(s*(e=Ft*r+v,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(v));return[i+l*u,a+l*h,o*s/Dt(Ft*r+v)]}}return r.duration=1e3*n,r},t.behavior.zoom=function(){var e,r,n,a,s,l,c,u,h,f={x:0,y:0,k:1},p=[960,500],d=jt,g=250,v=0,m=\\\"mousedown.zoom\\\",y=\\\"mousemove.zoom\\\",x=\\\"mouseup.zoom\\\",b=\\\"touchstart.zoom\\\",_=j(w,\\\"zoomstart\\\",\\\"zoom\\\",\\\"zoomend\\\");function w(t){t.on(m,P).on(Nt+\\\".zoom\\\",z).on(\\\"dblclick.zoom\\\",I).on(b,O)}function k(t){return[(t[0]-f.x)/f.k,(t[1]-f.y)/f.k]}function T(t){f.k=Math.max(d[0],Math.min(d[1],t))}function A(t,e){e=function(t){return[t[0]*f.k+f.x,t[1]*f.k+f.y]}(e),f.x+=t[0]-e[0],f.y+=t[1]-e[1]}function M(e,n,i,a){e.__chart__={x:f.x,y:f.y,k:f.k},T(Math.pow(2,a)),A(r=n,i),e=t.select(e),g>0&&(e=e.transition().duration(g)),e.call(w.event)}function S(){c&&c.domain(l.range().map(function(t){return(t-f.x)/f.k}).map(l.invert)),h&&h.domain(u.range().map(function(t){return(t-f.y)/f.k}).map(u.invert))}function E(t){v++||t({type:\\\"zoomstart\\\"})}function C(t){S(),t({type:\\\"zoom\\\",scale:f.k,translate:[f.x,f.y]})}function L(t){--v||(t({type:\\\"zoomend\\\"}),r=null)}function P(){var e=this,r=_.of(e,arguments),n=0,i=t.select(o(e)).on(y,function(){n=1,A(t.mouse(e),a),C(r)}).on(x,function(){i.on(y,null).on(x,null),s(n),L(r)}),a=k(t.mouse(e)),s=xt(e);hs.call(e),E(r)}function O(){var e,r=this,n=_.of(r,arguments),i={},a=0,o=\\\".zoom-\\\"+t.event.changedTouches[0].identifier,l=\\\"touchmove\\\"+o,c=\\\"touchend\\\"+o,u=[],h=t.select(r),p=xt(r);function d(){var n=t.touches(r);return e=f.k,n.forEach(function(t){t.identifier in i&&(i[t.identifier]=k(t))}),n}function g(){var e=t.event.target;t.select(e).on(l,v).on(c,y),u.push(e);for(var n=t.event.changedTouches,o=0,h=n.length;o<h;++o)i[n[o].identifier]=null;var p=d(),g=Date.now();if(1===p.length){if(g-s<500){var m=p[0];M(r,m,i[m.identifier],Math.floor(Math.log(f.k)/Math.LN2)+1),B()}s=g}else if(p.length>1){m=p[0];var x=p[1],b=m[0]-x[0],_=m[1]-x[1];a=b*b+_*_}}function v(){var o,l,c,u,h=t.touches(r);hs.call(r);for(var f=0,p=h.length;f<p;++f,u=null)if(c=h[f],u=i[c.identifier]){if(l)break;o=c,l=u}if(u){var d=(d=c[0]-o[0])*d+(d=c[1]-o[1])*d,g=a&&Math.sqrt(d/a);o=[(o[0]+c[0])/2,(o[1]+c[1])/2],l=[(l[0]+u[0])/2,(l[1]+u[1])/2],T(g*e)}s=null,A(o,l),C(n)}function y(){if(t.event.touches.length){for(var e=t.event.changedTouches,r=0,a=e.length;r<a;++r)delete i[e[r].identifier];for(var s in i)return void d()}t.selectAll(u).on(o,null),h.on(m,P).on(b,O),p(),L(n)}g(),E(n),h.on(m,null).on(b,g)}function z(){var i=_.of(this,arguments);a?clearTimeout(a):(hs.call(this),e=k(r=n||t.mouse(this)),E(i)),a=setTimeout(function(){a=null,L(i)},50),B(),T(Math.pow(2,.002*Bt())*f.k),A(r,e),C(i)}function I(){var e=t.mouse(this),r=Math.log(f.k)/Math.LN2;M(this,e,k(e),t.event.shiftKey?Math.ceil(r)-1:Math.floor(r)+1)}return Nt||(Nt=\\\"onwheel\\\"in i?(Bt=function(){return-t.event.deltaY*(t.event.deltaMode?120:1)},\\\"wheel\\\"):\\\"onmousewheel\\\"in i?(Bt=function(){return t.event.wheelDelta},\\\"mousewheel\\\"):(Bt=function(){return-t.event.detail},\\\"MozMousePixelScroll\\\")),w.event=function(e){e.each(function(){var e=_.of(this,arguments),n=f;ds?t.select(this).transition().each(\\\"start.zoom\\\",function(){f=this.__chart__||{x:0,y:0,k:1},E(e)}).tween(\\\"zoom:zoom\\\",function(){var i=p[0],a=p[1],o=r?r[0]:i/2,s=r?r[1]:a/2,l=t.interpolateZoom([(o-f.x)/f.k,(s-f.y)/f.k,i/f.k],[(o-n.x)/n.k,(s-n.y)/n.k,i/n.k]);return function(t){var r=l(t),n=i/r[2];this.__chart__=f={x:o-r[0]*n,y:s-r[1]*n,k:n},C(e)}}).each(\\\"interrupt.zoom\\\",function(){L(e)}).each(\\\"end.zoom\\\",function(){L(e)}):(this.__chart__=f,E(e),C(e),L(e))})},w.translate=function(t){return arguments.length?(f={x:+t[0],y:+t[1],k:f.k},S(),w):[f.x,f.y]},w.scale=function(t){return arguments.length?(f={x:f.x,y:f.y,k:null},T(+t),S(),w):f.k},w.scaleExtent=function(t){return arguments.length?(d=null==t?jt:[+t[0],+t[1]],w):d},w.center=function(t){return arguments.length?(n=t&&[+t[0],+t[1]],w):n},w.size=function(t){return arguments.length?(p=t&&[+t[0],+t[1]],w):p},w.duration=function(t){return arguments.length?(g=+t,w):g},w.x=function(t){return arguments.length?(c=t,l=t.copy(),f={x:0,y:0,k:1},w):c},w.y=function(t){return arguments.length?(h=t,u=t.copy(),f={x:0,y:0,k:1},w):h},t.rebind(w,_,\\\"on\\\")};var Bt,Nt,jt=[0,1/0];function Ut(){}function Vt(t,e,r){return this instanceof Vt?(this.h=+t,this.s=+e,void(this.l=+r)):arguments.length<2?t instanceof Vt?new Vt(t.h,t.s,t.l):ue(\\\"\\\"+t,he,Vt):new Vt(t,e,r)}t.color=Ut,Ut.prototype.toString=function(){return this.rgb()+\\\"\\\"},t.hsl=Vt;var qt=Vt.prototype=new Ut;function Ht(t,e,r){var n,i;function a(t){return Math.round(255*function(t){return t>360?t-=360:t<0&&(t+=360),t<60?n+(i-n)*t/60:t<180?i:t<240?n+(i-n)*(240-t)/60:n}(t))}return t=isNaN(t)?0:(t%=360)<0?t+360:t,e=isNaN(e)?0:e<0?0:e>1?1:e,n=2*(r=r<0?0:r>1?1:r)-(i=r<=.5?r*(1+e):r+e-r*e),new ae(a(t+120),a(t),a(t-120))}function Gt(e,r,n){return this instanceof Gt?(this.h=+e,this.c=+r,void(this.l=+n)):arguments.length<2?e instanceof Gt?new Gt(e.h,e.c,e.l):ee(e instanceof Xt?e.l:(e=fe((e=t.rgb(e)).r,e.g,e.b)).l,e.a,e.b):new Gt(e,r,n)}qt.brighter=function(t){return t=Math.pow(.7,arguments.length?t:1),new Vt(this.h,this.s,this.l/t)},qt.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),new Vt(this.h,this.s,t*this.l)},qt.rgb=function(){return Ht(this.h,this.s,this.l)},t.hcl=Gt;var Yt=Gt.prototype=new Ut;function Wt(t,e,r){return isNaN(t)&&(t=0),isNaN(e)&&(e=0),new Xt(r,Math.cos(t*=Ct)*e,Math.sin(t)*e)}function Xt(t,e,r){return this instanceof Xt?(this.l=+t,this.a=+e,void(this.b=+r)):arguments.length<2?t instanceof Xt?new Xt(t.l,t.a,t.b):t instanceof Gt?Wt(t.h,t.c,t.l):fe((t=ae(t)).r,t.g,t.b):new Xt(t,e,r)}Yt.brighter=function(t){return new Gt(this.h,this.c,Math.min(100,this.l+Zt*(arguments.length?t:1)))},Yt.darker=function(t){return new Gt(this.h,this.c,Math.max(0,this.l-Zt*(arguments.length?t:1)))},Yt.rgb=function(){return Wt(this.h,this.c,this.l).rgb()},t.lab=Xt;var Zt=18,Jt=.95047,Kt=1,$t=1.08883,Qt=Xt.prototype=new Ut;function te(t,e,r){var n=(t+16)/116,i=n+e/500,a=n-r/200;return new ae(ie(3.2404542*(i=re(i)*Jt)-1.5371385*(n=re(n)*Kt)-.4985314*(a=re(a)*$t)),ie(-.969266*i+1.8760108*n+.041556*a),ie(.0556434*i-.2040259*n+1.0572252*a))}function ee(t,e,r){return t>0?new Gt(Math.atan2(r,e)*Lt,Math.sqrt(e*e+r*r),t):new Gt(NaN,NaN,t)}function re(t){return t>.206893034?t*t*t:(t-4/29)/7.787037}function ne(t){return t>.008856?Math.pow(t,1/3):7.787037*t+4/29}function ie(t){return Math.round(255*(t<=.00304?12.92*t:1.055*Math.pow(t,1/2.4)-.055))}function ae(t,e,r){return this instanceof ae?(this.r=~~t,this.g=~~e,void(this.b=~~r)):arguments.length<2?t instanceof ae?new ae(t.r,t.g,t.b):ue(\\\"\\\"+t,ae,Ht):new ae(t,e,r)}function oe(t){return new ae(t>>16,t>>8&255,255&t)}function se(t){return oe(t)+\\\"\\\"}Qt.brighter=function(t){return new Xt(Math.min(100,this.l+Zt*(arguments.length?t:1)),this.a,this.b)},Qt.darker=function(t){return new Xt(Math.max(0,this.l-Zt*(arguments.length?t:1)),this.a,this.b)},Qt.rgb=function(){return te(this.l,this.a,this.b)},t.rgb=ae;var le=ae.prototype=new Ut;function ce(t){return t<16?\\\"0\\\"+Math.max(0,t).toString(16):Math.min(255,t).toString(16)}function ue(t,e,r){var n,i,a,o=0,s=0,l=0;if(n=/([a-z]+)\\\\((.*)\\\\)/.exec(t=t.toLowerCase()))switch(i=n[2].split(\\\",\\\"),n[1]){case\\\"hsl\\\":return r(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case\\\"rgb\\\":return e(de(i[0]),de(i[1]),de(i[2]))}return(a=ge.get(t))?e(a.r,a.g,a.b):(null==t||\\\"#\\\"!==t.charAt(0)||isNaN(a=parseInt(t.slice(1),16))||(4===t.length?(o=(3840&a)>>4,o|=o>>4,s=240&a,s|=s>>4,l=15&a,l|=l<<4):7===t.length&&(o=(16711680&a)>>16,s=(65280&a)>>8,l=255&a)),e(o,s,l))}function he(t,e,r){var n,i,a=Math.min(t/=255,e/=255,r/=255),o=Math.max(t,e,r),s=o-a,l=(o+a)/2;return s?(i=l<.5?s/(o+a):s/(2-o-a),n=t==o?(e-r)/s+(e<r?6:0):e==o?(r-t)/s+2:(t-e)/s+4,n*=60):(n=NaN,i=l>0&&l<1?0:n),new Vt(n,i,l)}function fe(t,e,r){var n=ne((.4124564*(t=pe(t))+.3575761*(e=pe(e))+.1804375*(r=pe(r)))/Jt),i=ne((.2126729*t+.7151522*e+.072175*r)/Kt);return Xt(116*i-16,500*(n-i),200*(i-ne((.0193339*t+.119192*e+.9503041*r)/$t)))}function pe(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function de(t){var e=parseFloat(t);return\\\"%\\\"===t.charAt(t.length-1)?Math.round(2.55*e):e}le.brighter=function(t){t=Math.pow(.7,arguments.length?t:1);var e=this.r,r=this.g,n=this.b,i=30;return e||r||n?(e&&e<i&&(e=i),r&&r<i&&(r=i),n&&n<i&&(n=i),new ae(Math.min(255,e/t),Math.min(255,r/t),Math.min(255,n/t))):new ae(i,i,i)},le.darker=function(t){return new ae((t=Math.pow(.7,arguments.length?t:1))*this.r,t*this.g,t*this.b)},le.hsl=function(){return he(this.r,this.g,this.b)},le.toString=function(){return\\\"#\\\"+ce(this.r)+ce(this.g)+ce(this.b)};var ge=t.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});function ve(t){return\\\"function\\\"==typeof t?t:function(){return t}}function me(t){return function(e,r,n){return 2===arguments.length&&\\\"function\\\"==typeof r&&(n=r,r=null),ye(e,r,t,n)}}function ye(e,r,i,a){var o={},s=t.dispatch(\\\"beforesend\\\",\\\"progress\\\",\\\"load\\\",\\\"error\\\"),l={},c=new XMLHttpRequest,u=null;function h(){var t,e=c.status;if(!e&&function(t){var e=t.responseType;return e&&\\\"text\\\"!==e?t.response:t.responseText}(c)||e>=200&&e<300||304===e){try{t=i.call(o,c)}catch(t){return void s.error.call(o,t)}s.load.call(o,t)}else s.error.call(o,c)}return!this.XDomainRequest||\\\"withCredentials\\\"in c||!/^(http(s)?:)?\\\\/\\\\//.test(e)||(c=new XDomainRequest),\\\"onload\\\"in c?c.onload=c.onerror=h:c.onreadystatechange=function(){c.readyState>3&&h()},c.onprogress=function(e){var r=t.event;t.event=e;try{s.progress.call(o,c)}finally{t.event=r}},o.header=function(t,e){return t=(t+\\\"\\\").toLowerCase(),arguments.length<2?l[t]:(null==e?delete l[t]:l[t]=e+\\\"\\\",o)},o.mimeType=function(t){return arguments.length?(r=null==t?null:t+\\\"\\\",o):r},o.responseType=function(t){return arguments.length?(u=t,o):u},o.response=function(t){return i=t,o},[\\\"get\\\",\\\"post\\\"].forEach(function(t){o[t]=function(){return o.send.apply(o,[t].concat(n(arguments)))}}),o.send=function(t,n,i){if(2===arguments.length&&\\\"function\\\"==typeof n&&(i=n,n=null),c.open(t,e,!0),null==r||\\\"accept\\\"in l||(l.accept=r+\\\",*/*\\\"),c.setRequestHeader)for(var a in l)c.setRequestHeader(a,l[a]);return null!=r&&c.overrideMimeType&&c.overrideMimeType(r),null!=u&&(c.responseType=u),null!=i&&o.on(\\\"error\\\",i).on(\\\"load\\\",function(t){i(null,t)}),s.beforesend.call(o,c),c.send(null==n?null:n),o},o.abort=function(){return c.abort(),o},t.rebind(o,s,\\\"on\\\"),null==a?o:o.get(function(t){return 1===t.length?function(e,r){t(null==e?r:null)}:t}(a))}ge.forEach(function(t,e){ge.set(t,oe(e))}),t.functor=ve,t.xhr=me(P),t.dsv=function(t,e){var r=new RegExp('[\\\"'+t+\\\"\\\\n]\\\"),n=t.charCodeAt(0);function i(t,r,n){arguments.length<3&&(n=r,r=null);var i=ye(t,e,null==r?a:o(r),n);return i.row=function(t){return arguments.length?i.response(null==(r=t)?a:o(t)):r},i}function a(t){return i.parse(t.responseText)}function o(t){return function(e){return i.parse(e.responseText,t)}}function s(e){return e.map(l).join(t)}function l(t){return r.test(t)?'\\\"'+t.replace(/\\\\\\\"/g,'\\\"\\\"')+'\\\"':t}return i.parse=function(t,e){var r;return i.parseRows(t,function(t,n){if(r)return r(t,n-1);var i=new Function(\\\"d\\\",\\\"return {\\\"+t.map(function(t,e){return JSON.stringify(t)+\\\": d[\\\"+e+\\\"]\\\"}).join(\\\",\\\")+\\\"}\\\");r=e?function(t,r){return e(i(t),r)}:i})},i.parseRows=function(t,e){var r,i,a={},o={},s=[],l=t.length,c=0,u=0;function h(){if(c>=l)return o;if(i)return i=!1,a;var e=c;if(34===t.charCodeAt(e)){for(var r=e;r++<l;)if(34===t.charCodeAt(r)){if(34!==t.charCodeAt(r+1))break;++r}return c=r+2,13===(s=t.charCodeAt(r+1))?(i=!0,10===t.charCodeAt(r+2)&&++c):10===s&&(i=!0),t.slice(e+1,r).replace(/\\\"\\\"/g,'\\\"')}for(;c<l;){var s,u=1;if(10===(s=t.charCodeAt(c++)))i=!0;else if(13===s)i=!0,10===t.charCodeAt(c)&&(++c,++u);else if(s!==n)continue;return t.slice(e,c-u)}return t.slice(e)}for(;(r=h())!==o;){for(var f=[];r!==a&&r!==o;)f.push(r),r=h();e&&null==(f=e(f,u++))||s.push(f)}return s},i.format=function(e){if(Array.isArray(e[0]))return i.formatRows(e);var r=new L,n=[];return e.forEach(function(t){for(var e in t)r.has(e)||n.push(r.add(e))}),[n.map(l).join(t)].concat(e.map(function(e){return n.map(function(t){return l(e[t])}).join(t)})).join(\\\"\\\\n\\\")},i.formatRows=function(t){return t.map(s).join(\\\"\\\\n\\\")},i},t.csv=t.dsv(\\\",\\\",\\\"text/csv\\\"),t.tsv=t.dsv(\\\"\\\\t\\\",\\\"text/tab-separated-values\\\");var xe,be,_e,we,ke=this[z(this,\\\"requestAnimationFrame\\\")]||function(t){setTimeout(t,17)};function Te(t,e,r){var n=arguments.length;n<2&&(e=0),n<3&&(r=Date.now());var i={c:t,t:r+e,n:null};return be?be.n=i:xe=i,be=i,_e||(we=clearTimeout(we),_e=1,ke(Ae)),i}function Ae(){var t=Me(),e=Se()-t;e>24?(isFinite(e)&&(clearTimeout(we),we=setTimeout(Ae,e)),_e=0):(_e=1,ke(Ae))}function Me(){for(var t=Date.now(),e=xe;e;)t>=e.t&&e.c(t-e.t)&&(e.c=null),e=e.n;return t}function Se(){for(var t,e=xe,r=1/0;e;)e.c?(e.t<r&&(r=e.t),e=(t=e).n):e=t?t.n=e.n:xe=e.n;return be=t,r}function Ee(t,e){return e-(t?Math.ceil(Math.log(t)/Math.LN10):1)}t.timer=function(){Te.apply(this,arguments)},t.timer.flush=function(){Me(),Se()},t.round=function(t,e){return e?Math.round(t*(e=Math.pow(10,e)))/e:Math.round(t)};var Ce=[\\\"y\\\",\\\"z\\\",\\\"a\\\",\\\"f\\\",\\\"p\\\",\\\"n\\\",\\\"\\\\xb5\\\",\\\"m\\\",\\\"\\\",\\\"k\\\",\\\"M\\\",\\\"G\\\",\\\"T\\\",\\\"P\\\",\\\"E\\\",\\\"Z\\\",\\\"Y\\\"].map(function(t,e){var r=Math.pow(10,3*y(8-e));return{scale:e>8?function(t){return t/r}:function(t){return t*r},symbol:t}});t.formatPrefix=function(e,r){var n=0;return(e=+e)&&(e<0&&(e*=-1),r&&(e=t.round(e,Ee(e,r))),n=1+Math.floor(1e-12+Math.log(e)/Math.LN10),n=Math.max(-24,Math.min(24,3*Math.floor((n-1)/3)))),Ce[8+n/3]};var Le=/(?:([^{])?([<>=^]))?([+\\\\- ])?([$#])?(0)?(\\\\d+)?(,)?(\\\\.-?\\\\d+)?([a-z%])?/i,Pe=t.map({b:function(t){return t.toString(2)},c:function(t){return String.fromCharCode(t)},o:function(t){return t.toString(8)},x:function(t){return t.toString(16)},X:function(t){return t.toString(16).toUpperCase()},g:function(t,e){return t.toPrecision(e)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},r:function(e,r){return(e=t.round(e,Ee(e,r))).toFixed(Math.max(0,Math.min(20,Ee(e*(1+1e-15),r))))}});function Oe(t){return t+\\\"\\\"}var ze=t.time={},Ie=Date;function De(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}De.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){Re.setUTCDate.apply(this._,arguments)},setDay:function(){Re.setUTCDay.apply(this._,arguments)},setFullYear:function(){Re.setUTCFullYear.apply(this._,arguments)},setHours:function(){Re.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){Re.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){Re.setUTCMinutes.apply(this._,arguments)},setMonth:function(){Re.setUTCMonth.apply(this._,arguments)},setSeconds:function(){Re.setUTCSeconds.apply(this._,arguments)},setTime:function(){Re.setTime.apply(this._,arguments)}};var Re=Date.prototype;function Fe(t,e,r){function n(e){var r=t(e),n=a(r,1);return e-r<n-e?r:n}function i(r){return e(r=t(new Ie(r-1)),1),r}function a(t,r){return e(t=new Ie(+t),r),t}function o(t,n,a){var o=i(t),s=[];if(a>1)for(;o<n;)r(o)%a||s.push(new Date(+o)),e(o,1);else for(;o<n;)s.push(new Date(+o)),e(o,1);return s}t.floor=t,t.round=n,t.ceil=i,t.offset=a,t.range=o;var s=t.utc=Be(t);return s.floor=s,s.round=Be(n),s.ceil=Be(i),s.offset=Be(a),s.range=function(t,e,r){try{Ie=De;var n=new De;return n._=t,o(n,e,r)}finally{Ie=Date}},t}function Be(t){return function(e,r){try{Ie=De;var n=new De;return n._=e,t(n,r)._}finally{Ie=Date}}}ze.year=Fe(function(t){return(t=ze.day(t)).setMonth(0,1),t},function(t,e){t.setFullYear(t.getFullYear()+e)},function(t){return t.getFullYear()}),ze.years=ze.year.range,ze.years.utc=ze.year.utc.range,ze.day=Fe(function(t){var e=new Ie(2e3,0);return e.setFullYear(t.getFullYear(),t.getMonth(),t.getDate()),e},function(t,e){t.setDate(t.getDate()+e)},function(t){return t.getDate()-1}),ze.days=ze.day.range,ze.days.utc=ze.day.utc.range,ze.dayOfYear=function(t){var e=ze.year(t);return Math.floor((t-e-6e4*(t.getTimezoneOffset()-e.getTimezoneOffset()))/864e5)},[\\\"sunday\\\",\\\"monday\\\",\\\"tuesday\\\",\\\"wednesday\\\",\\\"thursday\\\",\\\"friday\\\",\\\"saturday\\\"].forEach(function(t,e){e=7-e;var r=ze[t]=Fe(function(t){return(t=ze.day(t)).setDate(t.getDate()-(t.getDay()+e)%7),t},function(t,e){t.setDate(t.getDate()+7*Math.floor(e))},function(t){var r=ze.year(t).getDay();return Math.floor((ze.dayOfYear(t)+(r+e)%7)/7)-(r!==e)});ze[t+\\\"s\\\"]=r.range,ze[t+\\\"s\\\"].utc=r.utc.range,ze[t+\\\"OfYear\\\"]=function(t){var r=ze.year(t).getDay();return Math.floor((ze.dayOfYear(t)+(r+e)%7)/7)}}),ze.week=ze.sunday,ze.weeks=ze.sunday.range,ze.weeks.utc=ze.sunday.utc.range,ze.weekOfYear=ze.sundayOfYear;var Ne={\\\"-\\\":\\\"\\\",_:\\\" \\\",0:\\\"0\\\"},je=/^\\\\s*\\\\d+/,Ue=/^%/;function Ve(t,e,r){var n=t<0?\\\"-\\\":\\\"\\\",i=(n?-t:t)+\\\"\\\",a=i.length;return n+(a<r?new Array(r-a+1).join(e)+i:i)}function qe(e){return new RegExp(\\\"^(?:\\\"+e.map(t.requote).join(\\\"|\\\")+\\\")\\\",\\\"i\\\")}function He(t){for(var e=new b,r=-1,n=t.length;++r<n;)e.set(t[r].toLowerCase(),r);return e}function Ge(t,e,r){je.lastIndex=0;var n=je.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function Ye(t,e,r){je.lastIndex=0;var n=je.exec(e.slice(r));return n?(t.U=+n[0],r+n[0].length):-1}function We(t,e,r){je.lastIndex=0;var n=je.exec(e.slice(r));return n?(t.W=+n[0],r+n[0].length):-1}function Xe(t,e,r){je.lastIndex=0;var n=je.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function Ze(t,e,r){je.lastIndex=0;var n,i=je.exec(e.slice(r,r+2));return i?(t.y=(n=+i[0])+(n>68?1900:2e3),r+i[0].length):-1}function Je(t,e,r){return/^[+-]\\\\d{4}$/.test(e=e.slice(r,r+5))?(t.Z=-e,r+5):-1}function Ke(t,e,r){je.lastIndex=0;var n=je.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function $e(t,e,r){je.lastIndex=0;var n=je.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function Qe(t,e,r){je.lastIndex=0;var n=je.exec(e.slice(r,r+3));return n?(t.j=+n[0],r+n[0].length):-1}function tr(t,e,r){je.lastIndex=0;var n=je.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function er(t,e,r){je.lastIndex=0;var n=je.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function rr(t,e,r){je.lastIndex=0;var n=je.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function nr(t,e,r){je.lastIndex=0;var n=je.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function ir(t){var e=t.getTimezoneOffset(),r=e>0?\\\"-\\\":\\\"+\\\",n=y(e)/60|0,i=y(e)%60;return r+Ve(n,\\\"0\\\",2)+Ve(i,\\\"0\\\",2)}function ar(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function or(t){for(var e=t.length,r=-1;++r<e;)t[r][0]=this(t[r][0]);return function(e){for(var r=0,n=t[r];!n[1](e);)n=t[++r];return n[0](e)}}t.locale=function(e){return{numberFormat:function(e){var r=e.decimal,n=e.thousands,i=e.grouping,a=e.currency,o=i&&n?function(t,e){for(var r=t.length,a=[],o=0,s=i[0],l=0;r>0&&s>0&&(l+s+1>e&&(s=Math.max(1,e-l)),a.push(t.substring(r-=s,r+s)),!((l+=s+1)>e));)s=i[o=(o+1)%i.length];return a.reverse().join(n)}:P;return function(e){var n=Le.exec(e),i=n[1]||\\\" \\\",s=n[2]||\\\">\\\",l=n[3]||\\\"-\\\",c=n[4]||\\\"\\\",u=n[5],h=+n[6],f=n[7],p=n[8],d=n[9],g=1,v=\\\"\\\",m=\\\"\\\",y=!1,x=!0;switch(p&&(p=+p.substring(1)),(u||\\\"0\\\"===i&&\\\"=\\\"===s)&&(u=i=\\\"0\\\",s=\\\"=\\\"),d){case\\\"n\\\":f=!0,d=\\\"g\\\";break;case\\\"%\\\":g=100,m=\\\"%\\\",d=\\\"f\\\";break;case\\\"p\\\":g=100,m=\\\"%\\\",d=\\\"r\\\";break;case\\\"b\\\":case\\\"o\\\":case\\\"x\\\":case\\\"X\\\":\\\"#\\\"===c&&(v=\\\"0\\\"+d.toLowerCase());case\\\"c\\\":x=!1;case\\\"d\\\":y=!0,p=0;break;case\\\"s\\\":g=-1,d=\\\"r\\\"}\\\"$\\\"===c&&(v=a[0],m=a[1]),\\\"r\\\"!=d||p||(d=\\\"g\\\"),null!=p&&(\\\"g\\\"==d?p=Math.max(1,Math.min(21,p)):\\\"e\\\"!=d&&\\\"f\\\"!=d||(p=Math.max(0,Math.min(20,p)))),d=Pe.get(d)||Oe;var b=u&&f;return function(e){var n=m;if(y&&e%1)return\\\"\\\";var a=e<0||0===e&&1/e<0?(e=-e,\\\"-\\\"):\\\"-\\\"===l?\\\"\\\":l;if(g<0){var c=t.formatPrefix(e,p);e=c.scale(e),n=c.symbol+m}else e*=g;var _,w,k=(e=d(e,p)).lastIndexOf(\\\".\\\");if(k<0){var T=x?e.lastIndexOf(\\\"e\\\"):-1;T<0?(_=e,w=\\\"\\\"):(_=e.substring(0,T),w=e.substring(T))}else _=e.substring(0,k),w=r+e.substring(k+1);!u&&f&&(_=o(_,1/0));var A=v.length+_.length+w.length+(b?0:a.length),M=A<h?new Array(A=h-A+1).join(i):\\\"\\\";return b&&(_=o(M+_,M.length?h-w.length:1/0)),a+=v,e=_+w,(\\\"<\\\"===s?a+e+M:\\\">\\\"===s?M+a+e:\\\"^\\\"===s?M.substring(0,A>>=1)+a+e+M.substring(A):a+(b?e:M+e))+n}}}(e),timeFormat:function(e){var r=e.dateTime,n=e.date,i=e.time,a=e.periods,o=e.days,s=e.shortDays,l=e.months,c=e.shortMonths;function u(t){var e=t.length;function r(r){for(var n,i,a,o=[],s=-1,l=0;++s<e;)37===t.charCodeAt(s)&&(o.push(t.slice(l,s)),null!=(i=Ne[n=t.charAt(++s)])&&(n=t.charAt(++s)),(a=_[n])&&(n=a(r,null==i?\\\"e\\\"===n?\\\" \\\":\\\"0\\\":i)),o.push(n),l=s+1);return o.push(t.slice(l,s)),o.join(\\\"\\\")}return r.parse=function(e){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null};if(h(r,t,e,0)!=e.length)return null;\\\"p\\\"in r&&(r.H=r.H%12+12*r.p);var n=null!=r.Z&&Ie!==De,i=new(n?De:Ie);return\\\"j\\\"in r?i.setFullYear(r.y,0,r.j):\\\"W\\\"in r||\\\"U\\\"in r?(\\\"w\\\"in r||(r.w=\\\"W\\\"in r?1:0),i.setFullYear(r.y,0,1),i.setFullYear(r.y,0,\\\"W\\\"in r?(r.w+6)%7+7*r.W-(i.getDay()+5)%7:r.w+7*r.U-(i.getDay()+6)%7)):i.setFullYear(r.y,r.m,r.d),i.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),n?i._:i},r.toString=function(){return t},r}function h(t,e,r,n){for(var i,a,o,s=0,l=e.length,c=r.length;s<l;){if(n>=c)return-1;if(37===(i=e.charCodeAt(s++))){if(o=e.charAt(s++),!(a=w[o in Ne?e.charAt(s++):o])||(n=a(t,r,n))<0)return-1}else if(i!=r.charCodeAt(n++))return-1}return n}u.utc=function(t){var e=u(t);function r(t){try{var r=new(Ie=De);return r._=t,e(r)}finally{Ie=Date}}return r.parse=function(t){try{Ie=De;var r=e.parse(t);return r&&r._}finally{Ie=Date}},r.toString=e.toString,r},u.multi=u.utc.multi=or;var f=t.map(),p=qe(o),d=He(o),g=qe(s),v=He(s),m=qe(l),y=He(l),x=qe(c),b=He(c);a.forEach(function(t,e){f.set(t.toLowerCase(),e)});var _={a:function(t){return s[t.getDay()]},A:function(t){return o[t.getDay()]},b:function(t){return c[t.getMonth()]},B:function(t){return l[t.getMonth()]},c:u(r),d:function(t,e){return Ve(t.getDate(),e,2)},e:function(t,e){return Ve(t.getDate(),e,2)},H:function(t,e){return Ve(t.getHours(),e,2)},I:function(t,e){return Ve(t.getHours()%12||12,e,2)},j:function(t,e){return Ve(1+ze.dayOfYear(t),e,3)},L:function(t,e){return Ve(t.getMilliseconds(),e,3)},m:function(t,e){return Ve(t.getMonth()+1,e,2)},M:function(t,e){return Ve(t.getMinutes(),e,2)},p:function(t){return a[+(t.getHours()>=12)]},S:function(t,e){return Ve(t.getSeconds(),e,2)},U:function(t,e){return Ve(ze.sundayOfYear(t),e,2)},w:function(t){return t.getDay()},W:function(t,e){return Ve(ze.mondayOfYear(t),e,2)},x:u(n),X:u(i),y:function(t,e){return Ve(t.getFullYear()%100,e,2)},Y:function(t,e){return Ve(t.getFullYear()%1e4,e,4)},Z:ir,\\\"%\\\":function(){return\\\"%\\\"}},w={a:function(t,e,r){g.lastIndex=0;var n=g.exec(e.slice(r));return n?(t.w=v.get(n[0].toLowerCase()),r+n[0].length):-1},A:function(t,e,r){p.lastIndex=0;var n=p.exec(e.slice(r));return n?(t.w=d.get(n[0].toLowerCase()),r+n[0].length):-1},b:function(t,e,r){x.lastIndex=0;var n=x.exec(e.slice(r));return n?(t.m=b.get(n[0].toLowerCase()),r+n[0].length):-1},B:function(t,e,r){m.lastIndex=0;var n=m.exec(e.slice(r));return n?(t.m=y.get(n[0].toLowerCase()),r+n[0].length):-1},c:function(t,e,r){return h(t,_.c.toString(),e,r)},d:$e,e:$e,H:tr,I:tr,j:Qe,L:nr,m:Ke,M:er,p:function(t,e,r){var n=f.get(e.slice(r,r+=2).toLowerCase());return null==n?-1:(t.p=n,r)},S:rr,U:Ye,w:Ge,W:We,x:function(t,e,r){return h(t,_.x.toString(),e,r)},X:function(t,e,r){return h(t,_.X.toString(),e,r)},y:Ze,Y:Xe,Z:Je,\\\"%\\\":ar};return u}(e)}};var sr=t.locale({decimal:\\\".\\\",thousands:\\\",\\\",grouping:[3],currency:[\\\"$\\\",\\\"\\\"],dateTime:\\\"%a %b %e %X %Y\\\",date:\\\"%m/%d/%Y\\\",time:\\\"%H:%M:%S\\\",periods:[\\\"AM\\\",\\\"PM\\\"],days:[\\\"Sunday\\\",\\\"Monday\\\",\\\"Tuesday\\\",\\\"Wednesday\\\",\\\"Thursday\\\",\\\"Friday\\\",\\\"Saturday\\\"],shortDays:[\\\"Sun\\\",\\\"Mon\\\",\\\"Tue\\\",\\\"Wed\\\",\\\"Thu\\\",\\\"Fri\\\",\\\"Sat\\\"],months:[\\\"January\\\",\\\"February\\\",\\\"March\\\",\\\"April\\\",\\\"May\\\",\\\"June\\\",\\\"July\\\",\\\"August\\\",\\\"September\\\",\\\"October\\\",\\\"November\\\",\\\"December\\\"],shortMonths:[\\\"Jan\\\",\\\"Feb\\\",\\\"Mar\\\",\\\"Apr\\\",\\\"May\\\",\\\"Jun\\\",\\\"Jul\\\",\\\"Aug\\\",\\\"Sep\\\",\\\"Oct\\\",\\\"Nov\\\",\\\"Dec\\\"]});function lr(){}t.format=sr.numberFormat,t.geo={},lr.prototype={s:0,t:0,add:function(t){ur(t,this.t,cr),ur(cr.s,this.s,this),this.s?this.t+=cr.t:this.s=cr.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var cr=new lr;function ur(t,e,r){var n=r.s=t+e,i=n-t,a=n-i;r.t=t-a+(e-i)}function hr(t,e){t&&pr.hasOwnProperty(t.type)&&pr[t.type](t,e)}t.geo.stream=function(t,e){t&&fr.hasOwnProperty(t.type)?fr[t.type](t,e):hr(t,e)};var fr={Feature:function(t,e){hr(t.geometry,e)},FeatureCollection:function(t,e){for(var r=t.features,n=-1,i=r.length;++n<i;)hr(r[n].geometry,e)}},pr={Sphere:function(t,e){e.sphere()},Point:function(t,e){t=t.coordinates,e.point(t[0],t[1],t[2])},MultiPoint:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)t=r[n],e.point(t[0],t[1],t[2])},LineString:function(t,e){dr(t.coordinates,e,0)},MultiLineString:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)dr(r[n],e,0)},Polygon:function(t,e){gr(t.coordinates,e)},MultiPolygon:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)gr(r[n],e)},GeometryCollection:function(t,e){for(var r=t.geometries,n=-1,i=r.length;++n<i;)hr(r[n],e)}};function dr(t,e,r){var n,i=-1,a=t.length-r;for(e.lineStart();++i<a;)n=t[i],e.point(n[0],n[1],n[2]);e.lineEnd()}function gr(t,e){var r=-1,n=t.length;for(e.polygonStart();++r<n;)dr(t[r],e,1);e.polygonEnd()}t.geo.area=function(e){return vr=0,t.geo.stream(e,Cr),vr};var vr,mr,yr,xr,br,_r,wr,kr,Tr,Ar,Mr,Sr,Er=new lr,Cr={sphere:function(){vr+=4*At},point:D,lineStart:D,lineEnd:D,polygonStart:function(){Er.reset(),Cr.lineStart=Lr},polygonEnd:function(){var t=2*Er;vr+=t<0?4*At+t:t,Cr.lineStart=Cr.lineEnd=Cr.point=D}};function Lr(){var t,e,r,n,i;function a(t,e){e=e*Ct/2+At/4;var a=(t*=Ct)-r,o=a>=0?1:-1,s=o*a,l=Math.cos(e),c=Math.sin(e),u=i*c,h=n*l+u*Math.cos(s),f=u*o*Math.sin(s);Er.add(Math.atan2(f,h)),r=t,n=l,i=c}Cr.point=function(o,s){Cr.point=a,r=(t=o)*Ct,n=Math.cos(s=(e=s)*Ct/2+At/4),i=Math.sin(s)},Cr.lineEnd=function(){a(t,e)}}function Pr(t){var e=t[0],r=t[1],n=Math.cos(r);return[n*Math.cos(e),n*Math.sin(e),Math.sin(r)]}function Or(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function zr(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function Ir(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function Dr(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function Rr(t){var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}function Fr(t){return[Math.atan2(t[1],t[0]),It(t[2])]}function Br(t,e){return y(t[0]-e[0])<kt&&y(t[1]-e[1])<kt}t.geo.bounds=function(){var e,r,n,i,a,o,s,l,c,u,h,f={point:p,lineStart:g,lineEnd:v,polygonStart:function(){f.point=m,f.lineStart=x,f.lineEnd=b,c=0,Cr.polygonStart()},polygonEnd:function(){Cr.polygonEnd(),f.point=p,f.lineStart=g,f.lineEnd=v,Er<0?(e=-(n=180),r=-(i=90)):c>kt?i=90:c<-kt&&(r=-90),h[0]=e,h[1]=n}};function p(t,a){u.push(h=[e=t,n=t]),a<r&&(r=a),a>i&&(i=a)}function d(t,o){var s=Pr([t*Ct,o*Ct]);if(l){var c=zr(l,s),u=zr([c[1],-c[0],0],c);Rr(u),u=Fr(u);var h=t-a,f=h>0?1:-1,d=u[0]*Lt*f,g=y(h)>180;if(g^(f*a<d&&d<f*t))(v=u[1]*Lt)>i&&(i=v);else if(g^(f*a<(d=(d+360)%360-180)&&d<f*t)){var v;(v=-u[1]*Lt)<r&&(r=v)}else o<r&&(r=o),o>i&&(i=o);g?t<a?_(e,t)>_(e,n)&&(n=t):_(t,n)>_(e,n)&&(e=t):n>=e?(t<e&&(e=t),t>n&&(n=t)):t>a?_(e,t)>_(e,n)&&(n=t):_(t,n)>_(e,n)&&(e=t)}else p(t,o);l=s,a=t}function g(){f.point=d}function v(){h[0]=e,h[1]=n,f.point=p,l=null}function m(t,e){if(l){var r=t-a;c+=y(r)>180?r+(r>0?360:-360):r}else o=t,s=e;Cr.point(t,e),d(t,e)}function x(){Cr.lineStart()}function b(){m(o,s),Cr.lineEnd(),y(c)>kt&&(e=-(n=180)),h[0]=e,h[1]=n,l=null}function _(t,e){return(e-=t)<0?e+360:e}function w(t,e){return t[0]-e[0]}function k(t,e){return e[0]<=e[1]?e[0]<=t&&t<=e[1]:t<e[0]||e[1]<t}return function(a){if(i=n=-(e=r=1/0),u=[],t.geo.stream(a,f),c=u.length){u.sort(w);for(var o=1,s=[g=u[0]];o<c;++o)k((p=u[o])[0],g)||k(p[1],g)?(_(g[0],p[1])>_(g[0],g[1])&&(g[1]=p[1]),_(p[0],g[1])>_(g[0],g[1])&&(g[0]=p[0])):s.push(g=p);for(var l,c,p,d=-1/0,g=(o=0,s[c=s.length-1]);o<=c;g=p,++o)p=s[o],(l=_(g[1],p[0]))>d&&(d=l,e=p[0],n=g[1])}return u=h=null,e===1/0||r===1/0?[[NaN,NaN],[NaN,NaN]]:[[e,r],[n,i]]}}(),t.geo.centroid=function(e){mr=yr=xr=br=_r=wr=kr=Tr=Ar=Mr=Sr=0,t.geo.stream(e,Nr);var r=Ar,n=Mr,i=Sr,a=r*r+n*n+i*i;return a<Tt&&(r=wr,n=kr,i=Tr,yr<kt&&(r=xr,n=br,i=_r),(a=r*r+n*n+i*i)<Tt)?[NaN,NaN]:[Math.atan2(n,r)*Lt,It(i/Math.sqrt(a))*Lt]};var Nr={sphere:D,point:jr,lineStart:Vr,lineEnd:qr,polygonStart:function(){Nr.lineStart=Hr},polygonEnd:function(){Nr.lineStart=Vr}};function jr(t,e){t*=Ct;var r=Math.cos(e*=Ct);Ur(r*Math.cos(t),r*Math.sin(t),Math.sin(e))}function Ur(t,e,r){xr+=(t-xr)/++mr,br+=(e-br)/mr,_r+=(r-_r)/mr}function Vr(){var t,e,r;function n(n,i){n*=Ct;var a=Math.cos(i*=Ct),o=a*Math.cos(n),s=a*Math.sin(n),l=Math.sin(i),c=Math.atan2(Math.sqrt((c=e*l-r*s)*c+(c=r*o-t*l)*c+(c=t*s-e*o)*c),t*o+e*s+r*l);yr+=c,wr+=c*(t+(t=o)),kr+=c*(e+(e=s)),Tr+=c*(r+(r=l)),Ur(t,e,r)}Nr.point=function(i,a){i*=Ct;var o=Math.cos(a*=Ct);t=o*Math.cos(i),e=o*Math.sin(i),r=Math.sin(a),Nr.point=n,Ur(t,e,r)}}function qr(){Nr.point=jr}function Hr(){var t,e,r,n,i;function a(t,e){t*=Ct;var a=Math.cos(e*=Ct),o=a*Math.cos(t),s=a*Math.sin(t),l=Math.sin(e),c=n*l-i*s,u=i*o-r*l,h=r*s-n*o,f=Math.sqrt(c*c+u*u+h*h),p=r*o+n*s+i*l,d=f&&-zt(p)/f,g=Math.atan2(f,p);Ar+=d*c,Mr+=d*u,Sr+=d*h,yr+=g,wr+=g*(r+(r=o)),kr+=g*(n+(n=s)),Tr+=g*(i+(i=l)),Ur(r,n,i)}Nr.point=function(o,s){t=o,e=s,Nr.point=a,o*=Ct;var l=Math.cos(s*=Ct);r=l*Math.cos(o),n=l*Math.sin(o),i=Math.sin(s),Ur(r,n,i)},Nr.lineEnd=function(){a(t,e),Nr.lineEnd=qr,Nr.point=jr}}function Gr(t,e){function r(r,n){return r=t(r,n),e(r[0],r[1])}return t.invert&&e.invert&&(r.invert=function(r,n){return(r=e.invert(r,n))&&t.invert(r[0],r[1])}),r}function Yr(){return!0}function Wr(t,e,r,n,i){var a=[],o=[];if(t.forEach(function(t){if(!((e=t.length-1)<=0)){var e,r=t[0],n=t[e];if(Br(r,n)){i.lineStart();for(var s=0;s<e;++s)i.point((r=t[s])[0],r[1]);i.lineEnd()}else{var l=new Zr(r,t,null,!0),c=new Zr(r,null,l,!1);l.o=c,a.push(l),o.push(c),l=new Zr(n,t,null,!1),c=new Zr(n,null,l,!0),l.o=c,a.push(l),o.push(c)}}}),o.sort(e),Xr(a),Xr(o),a.length){for(var s=0,l=r,c=o.length;s<c;++s)o[s].e=l=!l;for(var u,h,f=a[0];;){for(var p=f,d=!0;p.v;)if((p=p.n)===f)return;u=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(d)for(s=0,c=u.length;s<c;++s)i.point((h=u[s])[0],h[1]);else n(p.x,p.n.x,1,i);p=p.n}else{if(d)for(s=(u=p.p.z).length-1;s>=0;--s)i.point((h=u[s])[0],h[1]);else n(p.x,p.p.x,-1,i);p=p.p}u=(p=p.o).z,d=!d}while(!p.v);i.lineEnd()}}}function Xr(t){if(e=t.length){for(var e,r,n=0,i=t[0];++n<e;)i.n=r=t[n],r.p=i,i=r;i.n=r=t[0],r.p=i}}function Zr(t,e,r,n){this.x=t,this.z=e,this.o=r,this.e=n,this.v=!1,this.n=this.p=null}function Jr(e,r,n,i){return function(a,o){var s,l=r(o),c=a.invert(i[0],i[1]),u={point:h,lineStart:p,lineEnd:d,polygonStart:function(){u.point=b,u.lineStart=_,u.lineEnd=w,s=[],g=[]},polygonEnd:function(){u.point=h,u.lineStart=p,u.lineEnd=d,s=t.merge(s);var e=function(t,e){var r=t[0],n=t[1],i=[Math.sin(r),-Math.cos(r),0],a=0,o=0;Er.reset();for(var s=0,l=e.length;s<l;++s){var c=e[s],u=c.length;if(u)for(var h=c[0],f=h[0],p=h[1]/2+At/4,d=Math.sin(p),g=Math.cos(p),v=1;;){v===u&&(v=0);var m=(t=c[v])[0],y=t[1]/2+At/4,x=Math.sin(y),b=Math.cos(y),_=m-f,w=_>=0?1:-1,k=w*_,T=k>At,A=d*x;if(Er.add(Math.atan2(A*w*Math.sin(k),g*b+A*Math.cos(k))),a+=T?_+w*Mt:_,T^f>=r^m>=r){var M=zr(Pr(h),Pr(t));Rr(M);var S=zr(i,M);Rr(S);var E=(T^_>=0?-1:1)*It(S[2]);(n>E||n===E&&(M[0]||M[1]))&&(o+=T^_>=0?1:-1)}if(!v++)break;f=m,d=x,g=b,h=t}}return(a<-kt||a<kt&&Er<-kt)^1&o}(c,g);s.length?(x||(o.polygonStart(),x=!0),Wr(s,Qr,e,n,o)):e&&(x||(o.polygonStart(),x=!0),o.lineStart(),n(null,null,1,o),o.lineEnd()),x&&(o.polygonEnd(),x=!1),s=g=null},sphere:function(){o.polygonStart(),o.lineStart(),n(null,null,1,o),o.lineEnd(),o.polygonEnd()}};function h(t,r){var n=a(t,r);e(t=n[0],r=n[1])&&o.point(t,r)}function f(t,e){var r=a(t,e);l.point(r[0],r[1])}function p(){u.point=f,l.lineStart()}function d(){u.point=h,l.lineEnd()}var g,v,m=$r(),y=r(m),x=!1;function b(t,e){v.push([t,e]);var r=a(t,e);y.point(r[0],r[1])}function _(){y.lineStart(),v=[]}function w(){b(v[0][0],v[0][1]),y.lineEnd();var t,e=y.clean(),r=m.buffer(),n=r.length;if(v.pop(),g.push(v),v=null,n)if(1&e){var i,a=-1;if((n=(t=r[0]).length-1)>0){for(x||(o.polygonStart(),x=!0),o.lineStart();++a<n;)o.point((i=t[a])[0],i[1]);o.lineEnd()}}else n>1&&2&e&&r.push(r.pop().concat(r.shift())),s.push(r.filter(Kr))}return u}}function Kr(t){return t.length>1}function $r(){var t,e=[];return{lineStart:function(){e.push(t=[])},point:function(e,r){t.push([e,r])},lineEnd:D,buffer:function(){var r=e;return e=[],t=null,r},rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))}}}function Qr(t,e){return((t=t.x)[0]<0?t[1]-Et-kt:Et-t[1])-((e=e.x)[0]<0?e[1]-Et-kt:Et-e[1])}var tn=Jr(Yr,function(t){var e,r=NaN,n=NaN,i=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(a,o){var s=a>0?At:-At,l=y(a-r);y(l-At)<kt?(t.point(r,n=(n+o)/2>0?Et:-Et),t.point(i,n),t.lineEnd(),t.lineStart(),t.point(s,n),t.point(a,n),e=0):i!==s&&l>=At&&(y(r-i)<kt&&(r-=i*kt),y(a-s)<kt&&(a-=s*kt),n=function(t,e,r,n){var i,a,o=Math.sin(t-r);return y(o)>kt?Math.atan((Math.sin(e)*(a=Math.cos(n))*Math.sin(r)-Math.sin(n)*(i=Math.cos(e))*Math.sin(t))/(i*a*o)):(e+n)/2}(r,n,a,o),t.point(i,n),t.lineEnd(),t.lineStart(),t.point(s,n),e=0),t.point(r=a,n=o),i=s},lineEnd:function(){t.lineEnd(),r=n=NaN},clean:function(){return 2-e}}},function(t,e,r,n){var i;if(null==t)i=r*Et,n.point(-At,i),n.point(0,i),n.point(At,i),n.point(At,0),n.point(At,-i),n.point(0,-i),n.point(-At,-i),n.point(-At,0),n.point(-At,i);else if(y(t[0]-e[0])>kt){var a=t[0]<e[0]?At:-At;i=r*a/2,n.point(-a,i),n.point(0,i),n.point(a,i)}else n.point(e[0],e[1])},[-At,-At/2]);function en(t,e,r,n){return function(i){var a,o=i.a,s=i.b,l=o.x,c=o.y,u=0,h=1,f=s.x-l,p=s.y-c;if(a=t-l,f||!(a>0)){if(a/=f,f<0){if(a<u)return;a<h&&(h=a)}else if(f>0){if(a>h)return;a>u&&(u=a)}if(a=r-l,f||!(a<0)){if(a/=f,f<0){if(a>h)return;a>u&&(u=a)}else if(f>0){if(a<u)return;a<h&&(h=a)}if(a=e-c,p||!(a>0)){if(a/=p,p<0){if(a<u)return;a<h&&(h=a)}else if(p>0){if(a>h)return;a>u&&(u=a)}if(a=n-c,p||!(a<0)){if(a/=p,p<0){if(a>h)return;a>u&&(u=a)}else if(p>0){if(a<u)return;a<h&&(h=a)}return u>0&&(i.a={x:l+u*f,y:c+u*p}),h<1&&(i.b={x:l+h*f,y:c+h*p}),i}}}}}}var rn=1e9;function nn(e,r,n,i){return function(l){var c,u,h,f,p,d,g,v,m,y,x,b=l,_=$r(),w=en(e,r,n,i),k={point:M,lineStart:function(){k.point=S,u&&u.push(h=[]);y=!0,m=!1,g=v=NaN},lineEnd:function(){c&&(S(f,p),d&&m&&_.rejoin(),c.push(_.buffer()));k.point=M,m&&l.lineEnd()},polygonStart:function(){l=_,c=[],u=[],x=!0},polygonEnd:function(){l=b,c=t.merge(c);var r=function(t){for(var e=0,r=u.length,n=t[1],i=0;i<r;++i)for(var a,o=1,s=u[i],l=s.length,c=s[0];o<l;++o)a=s[o],c[1]<=n?a[1]>n&&Ot(c,a,t)>0&&++e:a[1]<=n&&Ot(c,a,t)<0&&--e,c=a;return 0!==e}([e,i]),n=x&&r,a=c.length;(n||a)&&(l.polygonStart(),n&&(l.lineStart(),T(null,null,1,l),l.lineEnd()),a&&Wr(c,o,r,T,l),l.polygonEnd()),c=u=h=null}};function T(t,o,l,c){var u=0,h=0;if(null==t||(u=a(t,l))!==(h=a(o,l))||s(t,o)<0^l>0)do{c.point(0===u||3===u?e:n,u>1?i:r)}while((u=(u+l+4)%4)!==h);else c.point(o[0],o[1])}function A(t,a){return e<=t&&t<=n&&r<=a&&a<=i}function M(t,e){A(t,e)&&l.point(t,e)}function S(t,e){var r=A(t=Math.max(-rn,Math.min(rn,t)),e=Math.max(-rn,Math.min(rn,e)));if(u&&h.push([t,e]),y)f=t,p=e,d=r,y=!1,r&&(l.lineStart(),l.point(t,e));else if(r&&m)l.point(t,e);else{var n={a:{x:g,y:v},b:{x:t,y:e}};w(n)?(m||(l.lineStart(),l.point(n.a.x,n.a.y)),l.point(n.b.x,n.b.y),r||l.lineEnd(),x=!1):r&&(l.lineStart(),l.point(t,e),x=!1)}g=t,v=e,m=r}return k};function a(t,i){return y(t[0]-e)<kt?i>0?0:3:y(t[0]-n)<kt?i>0?2:1:y(t[1]-r)<kt?i>0?1:0:i>0?3:2}function o(t,e){return s(t.x,e.x)}function s(t,e){var r=a(t,1),n=a(e,1);return r!==n?r-n:0===r?e[1]-t[1]:1===r?t[0]-e[0]:2===r?t[1]-e[1]:e[0]-t[0]}}function an(t){var e=0,r=At/3,n=Cn(t),i=n(e,r);return i.parallels=function(t){return arguments.length?n(e=t[0]*At/180,r=t[1]*At/180):[e/At*180,r/At*180]},i}function on(t,e){var r=Math.sin(t),n=(r+Math.sin(e))/2,i=1+r*(2*n-r),a=Math.sqrt(i)/n;function o(t,e){var r=Math.sqrt(i-2*n*Math.sin(e))/n;return[r*Math.sin(t*=n),a-r*Math.cos(t)]}return o.invert=function(t,e){var r=a-e;return[Math.atan2(t,r)/n,It((i-(t*t+r*r)*n*n)/(2*n))]},o}t.geo.clipExtent=function(){var t,e,r,n,i,a,o={stream:function(t){return i&&(i.valid=!1),(i=a(t)).valid=!0,i},extent:function(s){return arguments.length?(a=nn(t=+s[0][0],e=+s[0][1],r=+s[1][0],n=+s[1][1]),i&&(i.valid=!1,i=null),o):[[t,e],[r,n]]}};return o.extent([[0,0],[960,500]])},(t.geo.conicEqualArea=function(){return an(on)}).raw=on,t.geo.albers=function(){return t.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},t.geo.albersUsa=function(){var e,r,n,i,a=t.geo.albers(),o=t.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),s=t.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(t,r){e=[t,r]}};function c(t){var a=t[0],o=t[1];return e=null,r(a,o),e||(n(a,o),e)||i(a,o),e}return c.invert=function(t){var e=a.scale(),r=a.translate(),n=(t[0]-r[0])/e,i=(t[1]-r[1])/e;return(i>=.12&&i<.234&&n>=-.425&&n<-.214?o:i>=.166&&i<.234&&n>=-.214&&n<-.115?s:a).invert(t)},c.stream=function(t){var e=a.stream(t),r=o.stream(t),n=s.stream(t);return{point:function(t,i){e.point(t,i),r.point(t,i),n.point(t,i)},sphere:function(){e.sphere(),r.sphere(),n.sphere()},lineStart:function(){e.lineStart(),r.lineStart(),n.lineStart()},lineEnd:function(){e.lineEnd(),r.lineEnd(),n.lineEnd()},polygonStart:function(){e.polygonStart(),r.polygonStart(),n.polygonStart()},polygonEnd:function(){e.polygonEnd(),r.polygonEnd(),n.polygonEnd()}}},c.precision=function(t){return arguments.length?(a.precision(t),o.precision(t),s.precision(t),c):a.precision()},c.scale=function(t){return arguments.length?(a.scale(t),o.scale(.35*t),s.scale(t),c.translate(a.translate())):a.scale()},c.translate=function(t){if(!arguments.length)return a.translate();var e=a.scale(),u=+t[0],h=+t[1];return r=a.translate(t).clipExtent([[u-.455*e,h-.238*e],[u+.455*e,h+.238*e]]).stream(l).point,n=o.translate([u-.307*e,h+.201*e]).clipExtent([[u-.425*e+kt,h+.12*e+kt],[u-.214*e-kt,h+.234*e-kt]]).stream(l).point,i=s.translate([u-.205*e,h+.212*e]).clipExtent([[u-.214*e+kt,h+.166*e+kt],[u-.115*e-kt,h+.234*e-kt]]).stream(l).point,c},c.scale(1070)};var sn,ln,cn,un,hn,fn,pn={point:D,lineStart:D,lineEnd:D,polygonStart:function(){ln=0,pn.lineStart=dn},polygonEnd:function(){pn.lineStart=pn.lineEnd=pn.point=D,sn+=y(ln/2)}};function dn(){var t,e,r,n;function i(t,e){ln+=n*t-r*e,r=t,n=e}pn.point=function(a,o){pn.point=i,t=r=a,e=n=o},pn.lineEnd=function(){i(t,e)}}var gn={point:function(t,e){t<cn&&(cn=t);t>hn&&(hn=t);e<un&&(un=e);e>fn&&(fn=e)},lineStart:D,lineEnd:D,polygonStart:D,polygonEnd:D};function vn(){var t=mn(4.5),e=[],r={point:n,lineStart:function(){r.point=i},lineEnd:o,polygonStart:function(){r.lineEnd=s},polygonEnd:function(){r.lineEnd=o,r.point=n},pointRadius:function(e){return t=mn(e),r},result:function(){if(e.length){var t=e.join(\\\"\\\");return e=[],t}}};function n(r,n){e.push(\\\"M\\\",r,\\\",\\\",n,t)}function i(t,n){e.push(\\\"M\\\",t,\\\",\\\",n),r.point=a}function a(t,r){e.push(\\\"L\\\",t,\\\",\\\",r)}function o(){r.point=n}function s(){e.push(\\\"Z\\\")}return r}function mn(t){return\\\"m0,\\\"+t+\\\"a\\\"+t+\\\",\\\"+t+\\\" 0 1,1 0,\\\"+-2*t+\\\"a\\\"+t+\\\",\\\"+t+\\\" 0 1,1 0,\\\"+2*t+\\\"z\\\"}var yn,xn={point:bn,lineStart:_n,lineEnd:wn,polygonStart:function(){xn.lineStart=kn},polygonEnd:function(){xn.point=bn,xn.lineStart=_n,xn.lineEnd=wn}};function bn(t,e){xr+=t,br+=e,++_r}function _n(){var t,e;function r(r,n){var i=r-t,a=n-e,o=Math.sqrt(i*i+a*a);wr+=o*(t+r)/2,kr+=o*(e+n)/2,Tr+=o,bn(t=r,e=n)}xn.point=function(n,i){xn.point=r,bn(t=n,e=i)}}function wn(){xn.point=bn}function kn(){var t,e,r,n;function i(t,e){var i=t-r,a=e-n,o=Math.sqrt(i*i+a*a);wr+=o*(r+t)/2,kr+=o*(n+e)/2,Tr+=o,Ar+=(o=n*t-r*e)*(r+t),Mr+=o*(n+e),Sr+=3*o,bn(r=t,n=e)}xn.point=function(a,o){xn.point=i,bn(t=r=a,e=n=o)},xn.lineEnd=function(){i(t,e)}}function Tn(t){var e=4.5,r={point:n,lineStart:function(){r.point=i},lineEnd:o,polygonStart:function(){r.lineEnd=s},polygonEnd:function(){r.lineEnd=o,r.point=n},pointRadius:function(t){return e=t,r},result:D};function n(r,n){t.moveTo(r+e,n),t.arc(r,n,e,0,Mt)}function i(e,n){t.moveTo(e,n),r.point=a}function a(e,r){t.lineTo(e,r)}function o(){r.point=n}function s(){t.closePath()}return r}function An(t){var e=.5,r=Math.cos(30*Ct),n=16;function i(e){return(n?function(e){var r,i,o,s,l,c,u,h,f,p,d,g,v={point:m,lineStart:y,lineEnd:b,polygonStart:function(){e.polygonStart(),v.lineStart=_},polygonEnd:function(){e.polygonEnd(),v.lineStart=y}};function m(r,n){r=t(r,n),e.point(r[0],r[1])}function y(){h=NaN,v.point=x,e.lineStart()}function x(r,i){var o=Pr([r,i]),s=t(r,i);a(h,f,u,p,d,g,h=s[0],f=s[1],u=r,p=o[0],d=o[1],g=o[2],n,e),e.point(h,f)}function b(){v.point=m,e.lineEnd()}function _(){y(),v.point=w,v.lineEnd=k}function w(t,e){x(r=t,e),i=h,o=f,s=p,l=d,c=g,v.point=x}function k(){a(h,f,u,p,d,g,i,o,r,s,l,c,n,e),v.lineEnd=b,b()}return v}:function(e){return Sn(e,function(r,n){r=t(r,n),e.point(r[0],r[1])})})(e)}function a(n,i,o,s,l,c,u,h,f,p,d,g,v,m){var x=u-n,b=h-i,_=x*x+b*b;if(_>4*e&&v--){var w=s+p,k=l+d,T=c+g,A=Math.sqrt(w*w+k*k+T*T),M=Math.asin(T/=A),S=y(y(T)-1)<kt||y(o-f)<kt?(o+f)/2:Math.atan2(k,w),E=t(S,M),C=E[0],L=E[1],P=C-n,O=L-i,z=b*P-x*O;(z*z/_>e||y((x*P+b*O)/_-.5)>.3||s*p+l*d+c*g<r)&&(a(n,i,o,s,l,c,C,L,S,w/=A,k/=A,T,v,m),m.point(C,L),a(C,L,S,w,k,T,u,h,f,p,d,g,v,m))}}return i.precision=function(t){return arguments.length?(n=(e=t*t)>0&&16,i):Math.sqrt(e)},i}function Mn(t){this.stream=t}function Sn(t,e){return{point:e,sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}function En(t){return Cn(function(){return t})()}function Cn(e){var r,n,i,a,o,s,l=An(function(t,e){return[(t=r(t,e))[0]*c+a,o-t[1]*c]}),c=150,u=480,h=250,f=0,p=0,d=0,g=0,v=0,m=tn,x=P,b=null,_=null;function w(t){return[(t=i(t[0]*Ct,t[1]*Ct))[0]*c+a,o-t[1]*c]}function k(t){return(t=i.invert((t[0]-a)/c,(o-t[1])/c))&&[t[0]*Lt,t[1]*Lt]}function T(){i=Gr(n=zn(d,g,v),r);var t=r(f,p);return a=u-t[0]*c,o=h+t[1]*c,A()}function A(){return s&&(s.valid=!1,s=null),w}return w.stream=function(t){return s&&(s.valid=!1),(s=Ln(m(n,l(x(t))))).valid=!0,s},w.clipAngle=function(t){return arguments.length?(m=null==t?(b=t,tn):function(t){var e=Math.cos(t),r=e>0,n=y(e)>kt;return Jr(i,function(t){var e,s,l,c,u;return{lineStart:function(){c=l=!1,u=1},point:function(h,f){var p,d=[h,f],g=i(h,f),v=r?g?0:o(h,f):g?o(h+(h<0?At:-At),f):0;if(!e&&(c=l=g)&&t.lineStart(),g!==l&&(p=a(e,d),(Br(e,p)||Br(d,p))&&(d[0]+=kt,d[1]+=kt,g=i(d[0],d[1]))),g!==l)u=0,g?(t.lineStart(),p=a(d,e),t.point(p[0],p[1])):(p=a(e,d),t.point(p[0],p[1]),t.lineEnd()),e=p;else if(n&&e&&r^g){var m;v&s||!(m=a(d,e,!0))||(u=0,r?(t.lineStart(),t.point(m[0][0],m[0][1]),t.point(m[1][0],m[1][1]),t.lineEnd()):(t.point(m[1][0],m[1][1]),t.lineEnd(),t.lineStart(),t.point(m[0][0],m[0][1])))}!g||e&&Br(e,d)||t.point(d[0],d[1]),e=d,l=g,s=v},lineEnd:function(){l&&t.lineEnd(),e=null},clean:function(){return u|(c&&l)<<1}}},Fn(t,6*Ct),r?[0,-t]:[-At,t-At]);function i(t,r){return Math.cos(t)*Math.cos(r)>e}function a(t,r,n){var i=[1,0,0],a=zr(Pr(t),Pr(r)),o=Or(a,a),s=a[0],l=o-s*s;if(!l)return!n&&t;var c=e*o/l,u=-e*s/l,h=zr(i,a),f=Dr(i,c);Ir(f,Dr(a,u));var p=h,d=Or(f,p),g=Or(p,p),v=d*d-g*(Or(f,f)-1);if(!(v<0)){var m=Math.sqrt(v),x=Dr(p,(-d-m)/g);if(Ir(x,f),x=Fr(x),!n)return x;var b,_=t[0],w=r[0],k=t[1],T=r[1];w<_&&(b=_,_=w,w=b);var A=w-_,M=y(A-At)<kt;if(!M&&T<k&&(b=k,k=T,T=b),M||A<kt?M?k+T>0^x[1]<(y(x[0]-_)<kt?k:T):k<=x[1]&&x[1]<=T:A>At^(_<=x[0]&&x[0]<=w)){var S=Dr(p,(-d+m)/g);return Ir(S,f),[x,Fr(S)]}}}function o(e,n){var i=r?t:At-t,a=0;return e<-i?a|=1:e>i&&(a|=2),n<-i?a|=4:n>i&&(a|=8),a}}((b=+t)*Ct),A()):b},w.clipExtent=function(t){return arguments.length?(_=t,x=t?nn(t[0][0],t[0][1],t[1][0],t[1][1]):P,A()):_},w.scale=function(t){return arguments.length?(c=+t,T()):c},w.translate=function(t){return arguments.length?(u=+t[0],h=+t[1],T()):[u,h]},w.center=function(t){return arguments.length?(f=t[0]%360*Ct,p=t[1]%360*Ct,T()):[f*Lt,p*Lt]},w.rotate=function(t){return arguments.length?(d=t[0]%360*Ct,g=t[1]%360*Ct,v=t.length>2?t[2]%360*Ct:0,T()):[d*Lt,g*Lt,v*Lt]},t.rebind(w,l,\\\"precision\\\"),function(){return r=e.apply(this,arguments),w.invert=r.invert&&k,T()}}function Ln(t){return Sn(t,function(e,r){t.point(e*Ct,r*Ct)})}function Pn(t,e){return[t,e]}function On(t,e){return[t>At?t-Mt:t<-At?t+Mt:t,e]}function zn(t,e,r){return t?e||r?Gr(Dn(t),Rn(e,r)):Dn(t):e||r?Rn(e,r):On}function In(t){return function(e,r){return[(e+=t)>At?e-Mt:e<-At?e+Mt:e,r]}}function Dn(t){var e=In(t);return e.invert=In(-t),e}function Rn(t,e){var r=Math.cos(t),n=Math.sin(t),i=Math.cos(e),a=Math.sin(e);function o(t,e){var o=Math.cos(e),s=Math.cos(t)*o,l=Math.sin(t)*o,c=Math.sin(e),u=c*r+s*n;return[Math.atan2(l*i-u*a,s*r-c*n),It(u*i+l*a)]}return o.invert=function(t,e){var o=Math.cos(e),s=Math.cos(t)*o,l=Math.sin(t)*o,c=Math.sin(e),u=c*i-l*a;return[Math.atan2(l*i+c*a,s*r+u*n),It(u*r-s*n)]},o}function Fn(t,e){var r=Math.cos(t),n=Math.sin(t);return function(i,a,o,s){var l=o*e;null!=i?(i=Bn(r,i),a=Bn(r,a),(o>0?i<a:i>a)&&(i+=o*Mt)):(i=t+o*Mt,a=t-.5*l);for(var c,u=i;o>0?u>a:u<a;u-=l)s.point((c=Fr([r,-n*Math.cos(u),-n*Math.sin(u)]))[0],c[1])}}function Bn(t,e){var r=Pr(e);r[0]-=t,Rr(r);var n=zt(-r[1]);return((-r[2]<0?-n:n)+2*Math.PI-kt)%(2*Math.PI)}function Nn(e,r,n){var i=t.range(e,r-kt,n).concat(r);return function(t){return i.map(function(e){return[t,e]})}}function jn(e,r,n){var i=t.range(e,r-kt,n).concat(r);return function(t){return i.map(function(e){return[e,t]})}}function Un(t){return t.source}function Vn(t){return t.target}t.geo.path=function(){var e,r,n,i,a,o=4.5;function s(e){return e&&(\\\"function\\\"==typeof o&&i.pointRadius(+o.apply(this,arguments)),a&&a.valid||(a=n(i)),t.geo.stream(e,a)),i.result()}function l(){return a=null,s}return s.area=function(e){return sn=0,t.geo.stream(e,n(pn)),sn},s.centroid=function(e){return xr=br=_r=wr=kr=Tr=Ar=Mr=Sr=0,t.geo.stream(e,n(xn)),Sr?[Ar/Sr,Mr/Sr]:Tr?[wr/Tr,kr/Tr]:_r?[xr/_r,br/_r]:[NaN,NaN]},s.bounds=function(e){return hn=fn=-(cn=un=1/0),t.geo.stream(e,n(gn)),[[cn,un],[hn,fn]]},s.projection=function(t){return arguments.length?(n=(e=t)?t.stream||(r=t,i=An(function(t,e){return r([t*Lt,e*Lt])}),function(t){return Ln(i(t))}):P,l()):e;var r,i},s.context=function(t){return arguments.length?(i=null==(r=t)?new vn:new Tn(t),\\\"function\\\"!=typeof o&&i.pointRadius(o),l()):r},s.pointRadius=function(t){return arguments.length?(o=\\\"function\\\"==typeof t?t:(i.pointRadius(+t),+t),s):o},s.projection(t.geo.albersUsa()).context(null)},t.geo.transform=function(t){return{stream:function(e){var r=new Mn(e);for(var n in t)r[n]=t[n];return r}}},Mn.prototype={point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},t.geo.projection=En,t.geo.projectionMutator=Cn,(t.geo.equirectangular=function(){return En(Pn)}).raw=Pn.invert=Pn,t.geo.rotation=function(t){function e(e){return(e=t(e[0]*Ct,e[1]*Ct))[0]*=Lt,e[1]*=Lt,e}return t=zn(t[0]%360*Ct,t[1]*Ct,t.length>2?t[2]*Ct:0),e.invert=function(e){return(e=t.invert(e[0]*Ct,e[1]*Ct))[0]*=Lt,e[1]*=Lt,e},e},On.invert=Pn,t.geo.circle=function(){var t,e,r=[0,0],n=6;function i(){var t=\\\"function\\\"==typeof r?r.apply(this,arguments):r,n=zn(-t[0]*Ct,-t[1]*Ct,0).invert,i=[];return e(null,null,1,{point:function(t,e){i.push(t=n(t,e)),t[0]*=Lt,t[1]*=Lt}}),{type:\\\"Polygon\\\",coordinates:[i]}}return i.origin=function(t){return arguments.length?(r=t,i):r},i.angle=function(r){return arguments.length?(e=Fn((t=+r)*Ct,n*Ct),i):t},i.precision=function(r){return arguments.length?(e=Fn(t*Ct,(n=+r)*Ct),i):n},i.angle(90)},t.geo.distance=function(t,e){var r,n=(e[0]-t[0])*Ct,i=t[1]*Ct,a=e[1]*Ct,o=Math.sin(n),s=Math.cos(n),l=Math.sin(i),c=Math.cos(i),u=Math.sin(a),h=Math.cos(a);return Math.atan2(Math.sqrt((r=h*o)*r+(r=c*u-l*h*s)*r),l*u+c*h*s)},t.geo.graticule=function(){var e,r,n,i,a,o,s,l,c,u,h,f,p=10,d=p,g=90,v=360,m=2.5;function x(){return{type:\\\"MultiLineString\\\",coordinates:b()}}function b(){return t.range(Math.ceil(i/g)*g,n,g).map(h).concat(t.range(Math.ceil(l/v)*v,s,v).map(f)).concat(t.range(Math.ceil(r/p)*p,e,p).filter(function(t){return y(t%g)>kt}).map(c)).concat(t.range(Math.ceil(o/d)*d,a,d).filter(function(t){return y(t%v)>kt}).map(u))}return x.lines=function(){return b().map(function(t){return{type:\\\"LineString\\\",coordinates:t}})},x.outline=function(){return{type:\\\"Polygon\\\",coordinates:[h(i).concat(f(s).slice(1),h(n).reverse().slice(1),f(l).reverse().slice(1))]}},x.extent=function(t){return arguments.length?x.majorExtent(t).minorExtent(t):x.minorExtent()},x.majorExtent=function(t){return arguments.length?(i=+t[0][0],n=+t[1][0],l=+t[0][1],s=+t[1][1],i>n&&(t=i,i=n,n=t),l>s&&(t=l,l=s,s=t),x.precision(m)):[[i,l],[n,s]]},x.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],o=+t[0][1],a=+t[1][1],r>e&&(t=r,r=e,e=t),o>a&&(t=o,o=a,a=t),x.precision(m)):[[r,o],[e,a]]},x.step=function(t){return arguments.length?x.majorStep(t).minorStep(t):x.minorStep()},x.majorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],x):[g,v]},x.minorStep=function(t){return arguments.length?(p=+t[0],d=+t[1],x):[p,d]},x.precision=function(t){return arguments.length?(m=+t,c=Nn(o,a,90),u=jn(r,e,m),h=Nn(l,s,90),f=jn(i,n,m),x):m},x.majorExtent([[-180,-90+kt],[180,90-kt]]).minorExtent([[-180,-80-kt],[180,80+kt]])},t.geo.greatArc=function(){var e,r,n=Un,i=Vn;function a(){return{type:\\\"LineString\\\",coordinates:[e||n.apply(this,arguments),r||i.apply(this,arguments)]}}return a.distance=function(){return t.geo.distance(e||n.apply(this,arguments),r||i.apply(this,arguments))},a.source=function(t){return arguments.length?(n=t,e=\\\"function\\\"==typeof t?null:t,a):n},a.target=function(t){return arguments.length?(i=t,r=\\\"function\\\"==typeof t?null:t,a):i},a.precision=function(){return arguments.length?a:0},a},t.geo.interpolate=function(t,e){return r=t[0]*Ct,n=t[1]*Ct,i=e[0]*Ct,a=e[1]*Ct,o=Math.cos(n),s=Math.sin(n),l=Math.cos(a),c=Math.sin(a),u=o*Math.cos(r),h=o*Math.sin(r),f=l*Math.cos(i),p=l*Math.sin(i),d=2*Math.asin(Math.sqrt(Rt(a-n)+o*l*Rt(i-r))),g=1/Math.sin(d),(v=d?function(t){var e=Math.sin(t*=d)*g,r=Math.sin(d-t)*g,n=r*u+e*f,i=r*h+e*p,a=r*s+e*c;return[Math.atan2(i,n)*Lt,Math.atan2(a,Math.sqrt(n*n+i*i))*Lt]}:function(){return[r*Lt,n*Lt]}).distance=d,v;var r,n,i,a,o,s,l,c,u,h,f,p,d,g,v},t.geo.length=function(e){return yn=0,t.geo.stream(e,qn),yn};var qn={sphere:D,point:D,lineStart:function(){var t,e,r;function n(n,i){var a=Math.sin(i*=Ct),o=Math.cos(i),s=y((n*=Ct)-t),l=Math.cos(s);yn+=Math.atan2(Math.sqrt((s=o*Math.sin(s))*s+(s=r*a-e*o*l)*s),e*a+r*o*l),t=n,e=a,r=o}qn.point=function(i,a){t=i*Ct,e=Math.sin(a*=Ct),r=Math.cos(a),qn.point=n},qn.lineEnd=function(){qn.point=qn.lineEnd=D}},lineEnd:D,polygonStart:D,polygonEnd:D};function Hn(t,e){function r(e,r){var n=Math.cos(e),i=Math.cos(r),a=t(n*i);return[a*i*Math.sin(e),a*Math.sin(r)]}return r.invert=function(t,r){var n=Math.sqrt(t*t+r*r),i=e(n),a=Math.sin(i),o=Math.cos(i);return[Math.atan2(t*a,n*o),Math.asin(n&&r*a/n)]},r}var Gn=Hn(function(t){return Math.sqrt(2/(1+t))},function(t){return 2*Math.asin(t/2)});(t.geo.azimuthalEqualArea=function(){return En(Gn)}).raw=Gn;var Yn=Hn(function(t){var e=Math.acos(t);return e&&e/Math.sin(e)},P);function Wn(t,e){var r=Math.cos(t),n=function(t){return Math.tan(At/4+t/2)},i=t===e?Math.sin(t):Math.log(r/Math.cos(e))/Math.log(n(e)/n(t)),a=r*Math.pow(n(t),i)/i;if(!i)return Jn;function o(t,e){a>0?e<-Et+kt&&(e=-Et+kt):e>Et-kt&&(e=Et-kt);var r=a/Math.pow(n(e),i);return[r*Math.sin(i*t),a-r*Math.cos(i*t)]}return o.invert=function(t,e){var r=a-e,n=Pt(i)*Math.sqrt(t*t+r*r);return[Math.atan2(t,r)/i,2*Math.atan(Math.pow(a/n,1/i))-Et]},o}function Xn(t,e){var r=Math.cos(t),n=t===e?Math.sin(t):(r-Math.cos(e))/(e-t),i=r/n+t;if(y(n)<kt)return Pn;function a(t,e){var r=i-e;return[r*Math.sin(n*t),i-r*Math.cos(n*t)]}return a.invert=function(t,e){var r=i-e;return[Math.atan2(t,r)/n,i-Pt(n)*Math.sqrt(t*t+r*r)]},a}(t.geo.azimuthalEquidistant=function(){return En(Yn)}).raw=Yn,(t.geo.conicConformal=function(){return an(Wn)}).raw=Wn,(t.geo.conicEquidistant=function(){return an(Xn)}).raw=Xn;var Zn=Hn(function(t){return 1/t},Math.atan);function Jn(t,e){return[t,Math.log(Math.tan(At/4+e/2))]}function Kn(t){var e,r=En(t),n=r.scale,i=r.translate,a=r.clipExtent;return r.scale=function(){var t=n.apply(r,arguments);return t===r?e?r.clipExtent(null):r:t},r.translate=function(){var t=i.apply(r,arguments);return t===r?e?r.clipExtent(null):r:t},r.clipExtent=function(t){var o=a.apply(r,arguments);if(o===r){if(e=null==t){var s=At*n(),l=i();a([[l[0]-s,l[1]-s],[l[0]+s,l[1]+s]])}}else e&&(o=null);return o},r.clipExtent(null)}(t.geo.gnomonic=function(){return En(Zn)}).raw=Zn,Jn.invert=function(t,e){return[t,2*Math.atan(Math.exp(e))-Et]},(t.geo.mercator=function(){return Kn(Jn)}).raw=Jn;var $n=Hn(function(){return 1},Math.asin);(t.geo.orthographic=function(){return En($n)}).raw=$n;var Qn=Hn(function(t){return 1/(1+t)},function(t){return 2*Math.atan(t)});function ti(t,e){return[Math.log(Math.tan(At/4+e/2)),-t]}function ei(t){return t[0]}function ri(t){return t[1]}function ni(t){for(var e=t.length,r=[0,1],n=2,i=2;i<e;i++){for(;n>1&&Ot(t[r[n-2]],t[r[n-1]],t[i])<=0;)--n;r[n++]=i}return r.slice(0,n)}function ii(t,e){return t[0]-e[0]||t[1]-e[1]}(t.geo.stereographic=function(){return En(Qn)}).raw=Qn,ti.invert=function(t,e){return[-e,2*Math.atan(Math.exp(t))-Et]},(t.geo.transverseMercator=function(){var t=Kn(ti),e=t.center,r=t.rotate;return t.center=function(t){return t?e([-t[1],t[0]]):[(t=e())[1],-t[0]]},t.rotate=function(t){return t?r([t[0],t[1],t.length>2?t[2]+90:90]):[(t=r())[0],t[1],t[2]-90]},r([0,0,90])}).raw=ti,t.geom={},t.geom.hull=function(t){var e=ei,r=ri;if(arguments.length)return n(t);function n(t){if(t.length<3)return[];var n,i=ve(e),a=ve(r),o=t.length,s=[],l=[];for(n=0;n<o;n++)s.push([+i.call(this,t[n],n),+a.call(this,t[n],n),n]);for(s.sort(ii),n=0;n<o;n++)l.push([s[n][0],-s[n][1]]);var c=ni(s),u=ni(l),h=u[0]===c[0],f=u[u.length-1]===c[c.length-1],p=[];for(n=c.length-1;n>=0;--n)p.push(t[s[c[n]][2]]);for(n=+h;n<u.length-f;++n)p.push(t[s[u[n]][2]]);return p}return n.x=function(t){return arguments.length?(e=t,n):e},n.y=function(t){return arguments.length?(r=t,n):r},n},t.geom.polygon=function(t){return V(t,ai),t};var ai=t.geom.polygon.prototype=[];function oi(t,e,r){return(r[0]-e[0])*(t[1]-e[1])<(r[1]-e[1])*(t[0]-e[0])}function si(t,e,r,n){var i=t[0],a=r[0],o=e[0]-i,s=n[0]-a,l=t[1],c=r[1],u=e[1]-l,h=n[1]-c,f=(s*(l-c)-h*(i-a))/(h*o-s*u);return[i+f*o,l+f*u]}function li(t){var e=t[0],r=t[t.length-1];return!(e[0]-r[0]||e[1]-r[1])}ai.area=function(){for(var t,e=-1,r=this.length,n=this[r-1],i=0;++e<r;)t=n,n=this[e],i+=t[1]*n[0]-t[0]*n[1];return.5*i},ai.centroid=function(t){var e,r,n=-1,i=this.length,a=0,o=0,s=this[i-1];for(arguments.length||(t=-1/(6*this.area()));++n<i;)e=s,s=this[n],r=e[0]*s[1]-s[0]*e[1],a+=(e[0]+s[0])*r,o+=(e[1]+s[1])*r;return[a*t,o*t]},ai.clip=function(t){for(var e,r,n,i,a,o,s=li(t),l=-1,c=this.length-li(this),u=this[c-1];++l<c;){for(e=t.slice(),t.length=0,i=this[l],a=e[(n=e.length-s)-1],r=-1;++r<n;)oi(o=e[r],u,i)?(oi(a,u,i)||t.push(si(a,o,u,i)),t.push(o)):oi(a,u,i)&&t.push(si(a,o,u,i)),a=o;s&&t.push(t[0]),u=i}return t};var ci,ui,hi,fi,pi,di=[],gi=[];function vi(){Ii(this),this.edge=this.site=this.circle=null}function mi(t){var e=di.pop()||new vi;return e.site=t,e}function yi(t){Si(t),hi.remove(t),di.push(t),Ii(t)}function xi(t){var e=t.circle,r=e.x,n=e.cy,i={x:r,y:n},a=t.P,o=t.N,s=[t];yi(t);for(var l=a;l.circle&&y(r-l.circle.x)<kt&&y(n-l.circle.cy)<kt;)a=l.P,s.unshift(l),yi(l),l=a;s.unshift(l),Si(l);for(var c=o;c.circle&&y(r-c.circle.x)<kt&&y(n-c.circle.cy)<kt;)o=c.N,s.push(c),yi(c),c=o;s.push(c),Si(c);var u,h=s.length;for(u=1;u<h;++u)c=s[u],l=s[u-1],Pi(c.edge,l.site,c.site,i);l=s[0],(c=s[h-1]).edge=Li(l.site,c.site,null,i),Mi(l),Mi(c)}function bi(t){for(var e,r,n,i,a=t.x,o=t.y,s=hi._;s;)if((n=_i(s,o)-a)>kt)s=s.L;else{if(!((i=a-wi(s,o))>kt)){n>-kt?(e=s.P,r=s):i>-kt?(e=s,r=s.N):e=r=s;break}if(!s.R){e=s;break}s=s.R}var l=mi(t);if(hi.insert(e,l),e||r){if(e===r)return Si(e),r=mi(e.site),hi.insert(l,r),l.edge=r.edge=Li(e.site,l.site),Mi(e),void Mi(r);if(r){Si(e),Si(r);var c=e.site,u=c.x,h=c.y,f=t.x-u,p=t.y-h,d=r.site,g=d.x-u,v=d.y-h,m=2*(f*v-p*g),y=f*f+p*p,x=g*g+v*v,b={x:(v*y-p*x)/m+u,y:(f*x-g*y)/m+h};Pi(r.edge,c,d,b),l.edge=Li(c,t,null,b),r.edge=Li(t,d,null,b),Mi(e),Mi(r)}else l.edge=Li(e.site,l.site)}}function _i(t,e){var r=t.site,n=r.x,i=r.y,a=i-e;if(!a)return n;var o=t.P;if(!o)return-1/0;var s=(r=o.site).x,l=r.y,c=l-e;if(!c)return s;var u=s-n,h=1/a-1/c,f=u/c;return h?(-f+Math.sqrt(f*f-2*h*(u*u/(-2*c)-l+c/2+i-a/2)))/h+n:(n+s)/2}function wi(t,e){var r=t.N;if(r)return _i(r,e);var n=t.site;return n.y===e?n.x:1/0}function ki(t){this.site=t,this.edges=[]}function Ti(t,e){return e.angle-t.angle}function Ai(){Ii(this),this.x=this.y=this.arc=this.site=this.cy=null}function Mi(t){var e=t.P,r=t.N;if(e&&r){var n=e.site,i=t.site,a=r.site;if(n!==a){var o=i.x,s=i.y,l=n.x-o,c=n.y-s,u=a.x-o,h=2*(l*(v=a.y-s)-c*u);if(!(h>=-Tt)){var f=l*l+c*c,p=u*u+v*v,d=(v*f-c*p)/h,g=(l*p-u*f)/h,v=g+s,m=gi.pop()||new Ai;m.arc=t,m.site=i,m.x=d+o,m.y=v+Math.sqrt(d*d+g*g),m.cy=v,t.circle=m;for(var y=null,x=pi._;x;)if(m.y<x.y||m.y===x.y&&m.x<=x.x){if(!x.L){y=x.P;break}x=x.L}else{if(!x.R){y=x;break}x=x.R}pi.insert(y,m),y||(fi=m)}}}}function Si(t){var e=t.circle;e&&(e.P||(fi=e.N),pi.remove(e),gi.push(e),Ii(e),t.circle=null)}function Ei(t,e){var r=t.b;if(r)return!0;var n,i,a=t.a,o=e[0][0],s=e[1][0],l=e[0][1],c=e[1][1],u=t.l,h=t.r,f=u.x,p=u.y,d=h.x,g=h.y,v=(f+d)/2,m=(p+g)/2;if(g===p){if(v<o||v>=s)return;if(f>d){if(a){if(a.y>=c)return}else a={x:v,y:l};r={x:v,y:c}}else{if(a){if(a.y<l)return}else a={x:v,y:c};r={x:v,y:l}}}else if(i=m-(n=(f-d)/(g-p))*v,n<-1||n>1)if(f>d){if(a){if(a.y>=c)return}else a={x:(l-i)/n,y:l};r={x:(c-i)/n,y:c}}else{if(a){if(a.y<l)return}else a={x:(c-i)/n,y:c};r={x:(l-i)/n,y:l}}else if(p<g){if(a){if(a.x>=s)return}else a={x:o,y:n*o+i};r={x:s,y:n*s+i}}else{if(a){if(a.x<o)return}else a={x:s,y:n*s+i};r={x:o,y:n*o+i}}return t.a=a,t.b=r,!0}function Ci(t,e){this.l=t,this.r=e,this.a=this.b=null}function Li(t,e,r,n){var i=new Ci(t,e);return ci.push(i),r&&Pi(i,t,e,r),n&&Pi(i,e,t,n),ui[t.i].edges.push(new Oi(i,t,e)),ui[e.i].edges.push(new Oi(i,e,t)),i}function Pi(t,e,r,n){t.a||t.b?t.l===r?t.b=n:t.a=n:(t.a=n,t.l=e,t.r=r)}function Oi(t,e,r){var n=t.a,i=t.b;this.edge=t,this.site=e,this.angle=r?Math.atan2(r.y-e.y,r.x-e.x):t.l===e?Math.atan2(i.x-n.x,n.y-i.y):Math.atan2(n.x-i.x,i.y-n.y)}function zi(){this._=null}function Ii(t){t.U=t.C=t.L=t.R=t.P=t.N=null}function Di(t,e){var r=e,n=e.R,i=r.U;i?i.L===r?i.L=n:i.R=n:t._=n,n.U=i,r.U=n,r.R=n.L,r.R&&(r.R.U=r),n.L=r}function Ri(t,e){var r=e,n=e.L,i=r.U;i?i.L===r?i.L=n:i.R=n:t._=n,n.U=i,r.U=n,r.L=n.R,r.L&&(r.L.U=r),n.R=r}function Fi(t){for(;t.L;)t=t.L;return t}function Bi(t,e){var r,n,i,a=t.sort(Ni).pop();for(ci=[],ui=new Array(t.length),hi=new zi,pi=new zi;;)if(i=fi,a&&(!i||a.y<i.y||a.y===i.y&&a.x<i.x))a.x===r&&a.y===n||(ui[a.i]=new ki(a),bi(a),r=a.x,n=a.y),a=t.pop();else{if(!i)break;xi(i.arc)}e&&(function(t){for(var e,r=ci,n=en(t[0][0],t[0][1],t[1][0],t[1][1]),i=r.length;i--;)(!Ei(e=r[i],t)||!n(e)||y(e.a.x-e.b.x)<kt&&y(e.a.y-e.b.y)<kt)&&(e.a=e.b=null,r.splice(i,1))}(e),function(t){for(var e,r,n,i,a,o,s,l,c,u,h=t[0][0],f=t[1][0],p=t[0][1],d=t[1][1],g=ui,v=g.length;v--;)if((a=g[v])&&a.prepare())for(l=(s=a.edges).length,o=0;o<l;)n=(u=s[o].end()).x,i=u.y,e=(c=s[++o%l].start()).x,r=c.y,(y(n-e)>kt||y(i-r)>kt)&&(s.splice(o,0,new Oi((m=a.site,x=u,b=y(n-h)<kt&&d-i>kt?{x:h,y:y(e-h)<kt?r:d}:y(i-d)<kt&&f-n>kt?{x:y(r-d)<kt?e:f,y:d}:y(n-f)<kt&&i-p>kt?{x:f,y:y(e-f)<kt?r:p}:y(i-p)<kt&&n-h>kt?{x:y(r-p)<kt?e:h,y:p}:null,_=void 0,_=new Ci(m,null),_.a=x,_.b=b,ci.push(_),_),a.site,null)),++l);var m,x,b,_}(e));var o={cells:ui,edges:ci};return hi=pi=ci=ui=null,o}function Ni(t,e){return e.y-t.y||e.x-t.x}ki.prototype.prepare=function(){for(var t,e=this.edges,r=e.length;r--;)(t=e[r].edge).b&&t.a||e.splice(r,1);return e.sort(Ti),e.length},Oi.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},zi.prototype={insert:function(t,e){var r,n,i;if(t){if(e.P=t,e.N=t.N,t.N&&(t.N.P=e),t.N=e,t.R){for(t=t.R;t.L;)t=t.L;t.L=e}else t.R=e;r=t}else this._?(t=Fi(this._),e.P=null,e.N=t,t.P=t.L=e,r=t):(e.P=e.N=null,this._=e,r=null);for(e.L=e.R=null,e.U=r,e.C=!0,t=e;r&&r.C;)r===(n=r.U).L?(i=n.R)&&i.C?(r.C=i.C=!1,n.C=!0,t=n):(t===r.R&&(Di(this,r),r=(t=r).U),r.C=!1,n.C=!0,Ri(this,n)):(i=n.L)&&i.C?(r.C=i.C=!1,n.C=!0,t=n):(t===r.L&&(Ri(this,r),r=(t=r).U),r.C=!1,n.C=!0,Di(this,n)),r=t.U;this._.C=!1},remove:function(t){t.N&&(t.N.P=t.P),t.P&&(t.P.N=t.N),t.N=t.P=null;var e,r,n,i=t.U,a=t.L,o=t.R;if(r=a?o?Fi(o):a:o,i?i.L===t?i.L=r:i.R=r:this._=r,a&&o?(n=r.C,r.C=t.C,r.L=a,a.U=r,r!==o?(i=r.U,r.U=t.U,t=r.R,i.L=t,r.R=o,o.U=r):(r.U=i,i=r,t=r.R)):(n=t.C,t=r),t&&(t.U=i),!n)if(t&&t.C)t.C=!1;else{do{if(t===this._)break;if(t===i.L){if((e=i.R).C&&(e.C=!1,i.C=!0,Di(this,i),e=i.R),e.L&&e.L.C||e.R&&e.R.C){e.R&&e.R.C||(e.L.C=!1,e.C=!0,Ri(this,e),e=i.R),e.C=i.C,i.C=e.R.C=!1,Di(this,i),t=this._;break}}else if((e=i.L).C&&(e.C=!1,i.C=!0,Ri(this,i),e=i.L),e.L&&e.L.C||e.R&&e.R.C){e.L&&e.L.C||(e.R.C=!1,e.C=!0,Di(this,e),e=i.L),e.C=i.C,i.C=e.L.C=!1,Ri(this,i),t=this._;break}e.C=!0,t=i,i=i.U}while(!t.C);t&&(t.C=!1)}}},t.geom.voronoi=function(t){var e=ei,r=ri,n=e,i=r,a=ji;if(t)return o(t);function o(t){var e=new Array(t.length),r=a[0][0],n=a[0][1],i=a[1][0],o=a[1][1];return Bi(s(t),a).cells.forEach(function(a,s){var l=a.edges,c=a.site;(e[s]=l.length?l.map(function(t){var e=t.start();return[e.x,e.y]}):c.x>=r&&c.x<=i&&c.y>=n&&c.y<=o?[[r,o],[i,o],[i,n],[r,n]]:[]).point=t[s]}),e}function s(t){return t.map(function(t,e){return{x:Math.round(n(t,e)/kt)*kt,y:Math.round(i(t,e)/kt)*kt,i:e}})}return o.links=function(t){return Bi(s(t)).edges.filter(function(t){return t.l&&t.r}).map(function(e){return{source:t[e.l.i],target:t[e.r.i]}})},o.triangles=function(t){var e=[];return Bi(s(t)).cells.forEach(function(r,n){for(var i,a,o,s,l=r.site,c=r.edges.sort(Ti),u=-1,h=c.length,f=c[h-1].edge,p=f.l===l?f.r:f.l;++u<h;)f,i=p,p=(f=c[u].edge).l===l?f.r:f.l,n<i.i&&n<p.i&&(o=i,s=p,((a=l).x-s.x)*(o.y-a.y)-(a.x-o.x)*(s.y-a.y)<0)&&e.push([t[n],t[i.i],t[p.i]])}),e},o.x=function(t){return arguments.length?(n=ve(e=t),o):e},o.y=function(t){return arguments.length?(i=ve(r=t),o):r},o.clipExtent=function(t){return arguments.length?(a=null==t?ji:t,o):a===ji?null:a},o.size=function(t){return arguments.length?o.clipExtent(t&&[[0,0],t]):a===ji?null:a&&a[1]},o};var ji=[[-1e6,-1e6],[1e6,1e6]];function Ui(t){return t.x}function Vi(t){return t.y}function qi(e,r){e=t.rgb(e),r=t.rgb(r);var n=e.r,i=e.g,a=e.b,o=r.r-n,s=r.g-i,l=r.b-a;return function(t){return\\\"#\\\"+ce(Math.round(n+o*t))+ce(Math.round(i+s*t))+ce(Math.round(a+l*t))}}function Hi(t,e){var r,n={},i={};for(r in t)r in e?n[r]=Zi(t[r],e[r]):i[r]=t[r];for(r in e)r in t||(i[r]=e[r]);return function(t){for(r in n)i[r]=n[r](t);return i}}function Gi(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}function Yi(t,e){var r,n,i,a=Wi.lastIndex=Xi.lastIndex=0,o=-1,s=[],l=[];for(t+=\\\"\\\",e+=\\\"\\\";(r=Wi.exec(t))&&(n=Xi.exec(e));)(i=n.index)>a&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(r=r[0])===(n=n[0])?s[o]?s[o]+=n:s[++o]=n:(s[++o]=null,l.push({i:o,x:Gi(r,n)})),a=Xi.lastIndex;return a<e.length&&(i=e.slice(a),s[o]?s[o]+=i:s[++o]=i),s.length<2?l[0]?(e=l[0].x,function(t){return e(t)+\\\"\\\"}):function(){return e}:(e=l.length,function(t){for(var r,n=0;n<e;++n)s[(r=l[n]).i]=r.x(t);return s.join(\\\"\\\")})}t.geom.delaunay=function(e){return t.geom.voronoi().triangles(e)},t.geom.quadtree=function(t,e,r,n,i){var a,o=ei,s=ri;if(a=arguments.length)return o=Ui,s=Vi,3===a&&(i=r,n=e,r=e=0),l(t);function l(t){var l,c,u,h,f,p,d,g,v,m=ve(o),x=ve(s);if(null!=e)p=e,d=r,g=n,v=i;else if(g=v=-(p=d=1/0),c=[],u=[],f=t.length,a)for(h=0;h<f;++h)(l=t[h]).x<p&&(p=l.x),l.y<d&&(d=l.y),l.x>g&&(g=l.x),l.y>v&&(v=l.y),c.push(l.x),u.push(l.y);else for(h=0;h<f;++h){var b=+m(l=t[h],h),_=+x(l,h);b<p&&(p=b),_<d&&(d=_),b>g&&(g=b),_>v&&(v=_),c.push(b),u.push(_)}var w=g-p,k=v-d;function T(t,e,r,n,i,a,o,s){if(!isNaN(r)&&!isNaN(n))if(t.leaf){var l=t.x,c=t.y;if(null!=l)if(y(l-r)+y(c-n)<.01)A(t,e,r,n,i,a,o,s);else{var u=t.point;t.x=t.y=t.point=null,A(t,u,l,c,i,a,o,s),A(t,e,r,n,i,a,o,s)}else t.x=r,t.y=n,t.point=e}else A(t,e,r,n,i,a,o,s)}function A(t,e,r,n,i,a,o,s){var l=.5*(i+o),c=.5*(a+s),u=r>=l,h=n>=c,f=h<<1|u;t.leaf=!1,u?i=l:o=l,h?a=c:s=c,T(t=t.nodes[f]||(t.nodes[f]={leaf:!0,nodes:[],point:null,x:null,y:null,add:function(t){T(M,t,+m(t,++h),+x(t,h),p,d,g,v)}}),e,r,n,i,a,o,s)}w>k?v=d+w:g=p+k;var M={leaf:!0,nodes:[],point:null,x:null,y:null,add:function(t){T(M,t,+m(t,++h),+x(t,h),p,d,g,v)}};if(M.visit=function(t){!function t(e,r,n,i,a,o){if(!e(r,n,i,a,o)){var s=.5*(n+a),l=.5*(i+o),c=r.nodes;c[0]&&t(e,c[0],n,i,s,l),c[1]&&t(e,c[1],s,i,a,l),c[2]&&t(e,c[2],n,l,s,o),c[3]&&t(e,c[3],s,l,a,o)}}(t,M,p,d,g,v)},M.find=function(t){return function(t,e,r,n,i,a,o){var s,l=1/0;return function t(c,u,h,f,p){if(!(u>a||h>o||f<n||p<i)){if(d=c.point){var d,g=e-c.x,v=r-c.y,m=g*g+v*v;if(m<l){var y=Math.sqrt(l=m);n=e-y,i=r-y,a=e+y,o=r+y,s=d}}for(var x=c.nodes,b=.5*(u+f),_=.5*(h+p),w=(r>=_)<<1|e>=b,k=w+4;w<k;++w)if(c=x[3&w])switch(3&w){case 0:t(c,u,h,b,_);break;case 1:t(c,b,h,f,_);break;case 2:t(c,u,_,b,p);break;case 3:t(c,b,_,f,p)}}}(t,n,i,a,o),s}(M,t[0],t[1],p,d,g,v)},h=-1,null==e){for(;++h<f;)T(M,t[h],c[h],u[h],p,d,g,v);--h}else t.forEach(M.add);return c=u=t=l=null,M}return l.x=function(t){return arguments.length?(o=t,l):o},l.y=function(t){return arguments.length?(s=t,l):s},l.extent=function(t){return arguments.length?(null==t?e=r=n=i=null:(e=+t[0][0],r=+t[0][1],n=+t[1][0],i=+t[1][1]),l):null==e?null:[[e,r],[n,i]]},l.size=function(t){return arguments.length?(null==t?e=r=n=i=null:(e=r=0,n=+t[0],i=+t[1]),l):null==e?null:[n-e,i-r]},l},t.interpolateRgb=qi,t.interpolateObject=Hi,t.interpolateNumber=Gi,t.interpolateString=Yi;var Wi=/[-+]?(?:\\\\d+\\\\.?\\\\d*|\\\\.?\\\\d+)(?:[eE][-+]?\\\\d+)?/g,Xi=new RegExp(Wi.source,\\\"g\\\");function Zi(e,r){for(var n,i=t.interpolators.length;--i>=0&&!(n=t.interpolators[i](e,r)););return n}function Ji(t,e){var r,n=[],i=[],a=t.length,o=e.length,s=Math.min(t.length,e.length);for(r=0;r<s;++r)n.push(Zi(t[r],e[r]));for(;r<a;++r)i[r]=t[r];for(;r<o;++r)i[r]=e[r];return function(t){for(r=0;r<s;++r)i[r]=n[r](t);return i}}t.interpolate=Zi,t.interpolators=[function(t,e){var r=typeof e;return(\\\"string\\\"===r?ge.has(e.toLowerCase())||/^(#|rgb\\\\(|hsl\\\\()/i.test(e)?qi:Yi:e instanceof Ut?qi:Array.isArray(e)?Ji:\\\"object\\\"===r&&isNaN(e)?Hi:Gi)(t,e)}],t.interpolateArray=Ji;var Ki=function(){return P},$i=t.map({linear:Ki,poly:function(t){return function(e){return Math.pow(e,t)}},quad:function(){return ra},cubic:function(){return na},sin:function(){return aa},exp:function(){return oa},circle:function(){return sa},elastic:function(t,e){var r;arguments.length<2&&(e=.45);arguments.length?r=e/Mt*Math.asin(1/t):(t=1,r=e/4);return function(n){return 1+t*Math.pow(2,-10*n)*Math.sin((n-r)*Mt/e)}},back:function(t){t||(t=1.70158);return function(e){return e*e*((t+1)*e-t)}},bounce:function(){return la}}),Qi=t.map({in:P,out:ta,\\\"in-out\\\":ea,\\\"out-in\\\":function(t){return ea(ta(t))}});function ta(t){return function(e){return 1-t(1-e)}}function ea(t){return function(e){return.5*(e<.5?t(2*e):2-t(2-2*e))}}function ra(t){return t*t}function na(t){return t*t*t}function ia(t){if(t<=0)return 0;if(t>=1)return 1;var e=t*t,r=e*t;return 4*(t<.5?r:3*(t-e)+r-.75)}function aa(t){return 1-Math.cos(t*Et)}function oa(t){return Math.pow(2,10*(t-1))}function sa(t){return 1-Math.sqrt(1-t*t)}function la(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}function ca(t,e){return e-=t,function(r){return Math.round(t+e*r)}}function ua(t){var e,r,n,i=[t.a,t.b],a=[t.c,t.d],o=fa(i),s=ha(i,a),l=fa(((e=a)[0]+=(n=-s)*(r=i)[0],e[1]+=n*r[1],e))||0;i[0]*a[1]<a[0]*i[1]&&(i[0]*=-1,i[1]*=-1,o*=-1,s*=-1),this.rotate=(o?Math.atan2(i[1],i[0]):Math.atan2(-a[0],a[1]))*Lt,this.translate=[t.e,t.f],this.scale=[o,l],this.skew=l?Math.atan2(s,l)*Lt:0}function ha(t,e){return t[0]*e[0]+t[1]*e[1]}function fa(t){var e=Math.sqrt(ha(t,t));return e&&(t[0]/=e,t[1]/=e),e}t.ease=function(t){var e,n=t.indexOf(\\\"-\\\"),i=n>=0?t.slice(0,n):t,a=n>=0?t.slice(n+1):\\\"in\\\";return i=$i.get(i)||Ki,a=Qi.get(a)||P,e=a(i.apply(null,r.call(arguments,1))),function(t){return t<=0?0:t>=1?1:e(t)}},t.interpolateHcl=function(e,r){e=t.hcl(e),r=t.hcl(r);var n=e.h,i=e.c,a=e.l,o=r.h-n,s=r.c-i,l=r.l-a;isNaN(s)&&(s=0,i=isNaN(i)?r.c:i);isNaN(o)?(o=0,n=isNaN(n)?r.h:n):o>180?o-=360:o<-180&&(o+=360);return function(t){return Wt(n+o*t,i+s*t,a+l*t)+\\\"\\\"}},t.interpolateHsl=function(e,r){e=t.hsl(e),r=t.hsl(r);var n=e.h,i=e.s,a=e.l,o=r.h-n,s=r.s-i,l=r.l-a;isNaN(s)&&(s=0,i=isNaN(i)?r.s:i);isNaN(o)?(o=0,n=isNaN(n)?r.h:n):o>180?o-=360:o<-180&&(o+=360);return function(t){return Ht(n+o*t,i+s*t,a+l*t)+\\\"\\\"}},t.interpolateLab=function(e,r){e=t.lab(e),r=t.lab(r);var n=e.l,i=e.a,a=e.b,o=r.l-n,s=r.a-i,l=r.b-a;return function(t){return te(n+o*t,i+s*t,a+l*t)+\\\"\\\"}},t.interpolateRound=ca,t.transform=function(e){var r=i.createElementNS(t.ns.prefix.svg,\\\"g\\\");return(t.transform=function(t){if(null!=t){r.setAttribute(\\\"transform\\\",t);var e=r.transform.baseVal.consolidate()}return new ua(e?e.matrix:pa)})(e)},ua.prototype.toString=function(){return\\\"translate(\\\"+this.translate+\\\")rotate(\\\"+this.rotate+\\\")skewX(\\\"+this.skew+\\\")scale(\\\"+this.scale+\\\")\\\"};var pa={a:1,b:0,c:0,d:1,e:0,f:0};function da(t){return t.length?t.pop()+\\\",\\\":\\\"\\\"}function ga(e,r){var n=[],i=[];return e=t.transform(e),r=t.transform(r),function(t,e,r,n){if(t[0]!==e[0]||t[1]!==e[1]){var i=r.push(\\\"translate(\\\",null,\\\",\\\",null,\\\")\\\");n.push({i:i-4,x:Gi(t[0],e[0])},{i:i-2,x:Gi(t[1],e[1])})}else(e[0]||e[1])&&r.push(\\\"translate(\\\"+e+\\\")\\\")}(e.translate,r.translate,n,i),function(t,e,r,n){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),n.push({i:r.push(da(r)+\\\"rotate(\\\",null,\\\")\\\")-2,x:Gi(t,e)})):e&&r.push(da(r)+\\\"rotate(\\\"+e+\\\")\\\")}(e.rotate,r.rotate,n,i),function(t,e,r,n){t!==e?n.push({i:r.push(da(r)+\\\"skewX(\\\",null,\\\")\\\")-2,x:Gi(t,e)}):e&&r.push(da(r)+\\\"skewX(\\\"+e+\\\")\\\")}(e.skew,r.skew,n,i),function(t,e,r,n){if(t[0]!==e[0]||t[1]!==e[1]){var i=r.push(da(r)+\\\"scale(\\\",null,\\\",\\\",null,\\\")\\\");n.push({i:i-4,x:Gi(t[0],e[0])},{i:i-2,x:Gi(t[1],e[1])})}else 1===e[0]&&1===e[1]||r.push(da(r)+\\\"scale(\\\"+e+\\\")\\\")}(e.scale,r.scale,n,i),e=r=null,function(t){for(var e,r=-1,a=i.length;++r<a;)n[(e=i[r]).i]=e.x(t);return n.join(\\\"\\\")}}function va(t,e){return e=(e-=t=+t)||1/e,function(r){return(r-t)/e}}function ma(t,e){return e=(e-=t=+t)||1/e,function(r){return Math.max(0,Math.min(1,(r-t)/e))}}function ya(t){for(var e=t.source,r=t.target,n=function(t,e){if(t===e)return t;var r=xa(t),n=xa(e),i=r.pop(),a=n.pop(),o=null;for(;i===a;)o=i,i=r.pop(),a=n.pop();return o}(e,r),i=[e];e!==n;)e=e.parent,i.push(e);for(var a=i.length;r!==n;)i.splice(a,0,r),r=r.parent;return i}function xa(t){for(var e=[],r=t.parent;null!=r;)e.push(t),t=r,r=r.parent;return e.push(t),e}function ba(t){t.fixed|=2}function _a(t){t.fixed&=-7}function wa(t){t.fixed|=4,t.px=t.x,t.py=t.y}function ka(t){t.fixed&=-5}t.interpolateTransform=ga,t.layout={},t.layout.bundle=function(){return function(t){for(var e=[],r=-1,n=t.length;++r<n;)e.push(ya(t[r]));return e}},t.layout.chord=function(){var e,r,n,i,a,o,s,l={},c=0;function u(){var l,u,f,p,d,g={},v=[],m=t.range(i),y=[];for(e=[],r=[],l=0,p=-1;++p<i;){for(u=0,d=-1;++d<i;)u+=n[p][d];v.push(u),y.push(t.range(i)),l+=u}for(a&&m.sort(function(t,e){return a(v[t],v[e])}),o&&y.forEach(function(t,e){t.sort(function(t,r){return o(n[e][t],n[e][r])})}),l=(Mt-c*i)/l,u=0,p=-1;++p<i;){for(f=u,d=-1;++d<i;){var x=m[p],b=y[x][d],_=n[x][b],w=u,k=u+=_*l;g[x+\\\"-\\\"+b]={index:x,subindex:b,startAngle:w,endAngle:k,value:_}}r[x]={index:x,startAngle:f,endAngle:u,value:v[x]},u+=c}for(p=-1;++p<i;)for(d=p-1;++d<i;){var T=g[p+\\\"-\\\"+d],A=g[d+\\\"-\\\"+p];(T.value||A.value)&&e.push(T.value<A.value?{source:A,target:T}:{source:T,target:A})}s&&h()}function h(){e.sort(function(t,e){return s((t.source.value+t.target.value)/2,(e.source.value+e.target.value)/2)})}return l.matrix=function(t){return arguments.length?(i=(n=t)&&n.length,e=r=null,l):n},l.padding=function(t){return arguments.length?(c=t,e=r=null,l):c},l.sortGroups=function(t){return arguments.length?(a=t,e=r=null,l):a},l.sortSubgroups=function(t){return arguments.length?(o=t,e=null,l):o},l.sortChords=function(t){return arguments.length?(s=t,e&&h(),l):s},l.chords=function(){return e||u(),e},l.groups=function(){return r||u(),r},l},t.layout.force=function(){var e,r,n,i,a,o,s={},l=t.dispatch(\\\"start\\\",\\\"tick\\\",\\\"end\\\"),c=[1,1],u=.9,h=Ta,f=Aa,p=-30,d=Ma,g=.1,v=.64,m=[],y=[];function x(t){return function(e,r,n,i){if(e.point!==t){var a=e.cx-t.x,o=e.cy-t.y,s=i-r,l=a*a+o*o;if(s*s/v<l){if(l<d){var c=e.charge/l;t.px-=a*c,t.py-=o*c}return!0}if(e.point&&l&&l<d){c=e.pointCharge/l;t.px-=a*c,t.py-=o*c}}return!e.charge}}function b(e){e.px=t.event.x,e.py=t.event.y,s.resume()}return s.tick=function(){if((n*=.99)<.005)return e=null,l.end({type:\\\"end\\\",alpha:n=0}),!0;var r,s,h,f,d,v,b,_,w,k=m.length,T=y.length;for(s=0;s<T;++s)f=(h=y[s]).source,(v=(_=(d=h.target).x-f.x)*_+(w=d.y-f.y)*w)&&(_*=v=n*a[s]*((v=Math.sqrt(v))-i[s])/v,w*=v,d.x-=_*(b=f.weight+d.weight?f.weight/(f.weight+d.weight):.5),d.y-=w*b,f.x+=_*(b=1-b),f.y+=w*b);if((b=n*g)&&(_=c[0]/2,w=c[1]/2,s=-1,b))for(;++s<k;)(h=m[s]).x+=(_-h.x)*b,h.y+=(w-h.y)*b;if(p)for(!function t(e,r,n){var i=0,a=0;e.charge=0;if(!e.leaf)for(var o,s=e.nodes,l=s.length,c=-1;++c<l;)null!=(o=s[c])&&(t(o,r,n),e.charge+=o.charge,i+=o.charge*o.cx,a+=o.charge*o.cy);if(e.point){e.leaf||(e.point.x+=Math.random()-.5,e.point.y+=Math.random()-.5);var u=r*n[e.point.index];e.charge+=e.pointCharge=u,i+=u*e.point.x,a+=u*e.point.y}e.cx=i/e.charge;e.cy=a/e.charge}(r=t.geom.quadtree(m),n,o),s=-1;++s<k;)(h=m[s]).fixed||r.visit(x(h));for(s=-1;++s<k;)(h=m[s]).fixed?(h.x=h.px,h.y=h.py):(h.x-=(h.px-(h.px=h.x))*u,h.y-=(h.py-(h.py=h.y))*u);l.tick({type:\\\"tick\\\",alpha:n})},s.nodes=function(t){return arguments.length?(m=t,s):m},s.links=function(t){return arguments.length?(y=t,s):y},s.size=function(t){return arguments.length?(c=t,s):c},s.linkDistance=function(t){return arguments.length?(h=\\\"function\\\"==typeof t?t:+t,s):h},s.distance=s.linkDistance,s.linkStrength=function(t){return arguments.length?(f=\\\"function\\\"==typeof t?t:+t,s):f},s.friction=function(t){return arguments.length?(u=+t,s):u},s.charge=function(t){return arguments.length?(p=\\\"function\\\"==typeof t?t:+t,s):p},s.chargeDistance=function(t){return arguments.length?(d=t*t,s):Math.sqrt(d)},s.gravity=function(t){return arguments.length?(g=+t,s):g},s.theta=function(t){return arguments.length?(v=t*t,s):Math.sqrt(v)},s.alpha=function(t){return arguments.length?(t=+t,n?t>0?n=t:(e.c=null,e.t=NaN,e=null,l.end({type:\\\"end\\\",alpha:n=0})):t>0&&(l.start({type:\\\"start\\\",alpha:n=t}),e=Te(s.tick)),s):n},s.start=function(){var t,e,r,n=m.length,l=y.length,u=c[0],d=c[1];for(t=0;t<n;++t)(r=m[t]).index=t,r.weight=0;for(t=0;t<l;++t)\\\"number\\\"==typeof(r=y[t]).source&&(r.source=m[r.source]),\\\"number\\\"==typeof r.target&&(r.target=m[r.target]),++r.source.weight,++r.target.weight;for(t=0;t<n;++t)r=m[t],isNaN(r.x)&&(r.x=g(\\\"x\\\",u)),isNaN(r.y)&&(r.y=g(\\\"y\\\",d)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(i=[],\\\"function\\\"==typeof h)for(t=0;t<l;++t)i[t]=+h.call(this,y[t],t);else for(t=0;t<l;++t)i[t]=h;if(a=[],\\\"function\\\"==typeof f)for(t=0;t<l;++t)a[t]=+f.call(this,y[t],t);else for(t=0;t<l;++t)a[t]=f;if(o=[],\\\"function\\\"==typeof p)for(t=0;t<n;++t)o[t]=+p.call(this,m[t],t);else for(t=0;t<n;++t)o[t]=p;function g(r,i){if(!e){for(e=new Array(n),c=0;c<n;++c)e[c]=[];for(c=0;c<l;++c){var a=y[c];e[a.source.index].push(a.target),e[a.target.index].push(a.source)}}for(var o,s=e[t],c=-1,u=s.length;++c<u;)if(!isNaN(o=s[c][r]))return o;return Math.random()*i}return s.resume()},s.resume=function(){return s.alpha(.1)},s.stop=function(){return s.alpha(0)},s.drag=function(){if(r||(r=t.behavior.drag().origin(P).on(\\\"dragstart.force\\\",ba).on(\\\"drag.force\\\",b).on(\\\"dragend.force\\\",_a)),!arguments.length)return r;this.on(\\\"mouseover.force\\\",wa).on(\\\"mouseout.force\\\",ka).call(r)},t.rebind(s,l,\\\"on\\\")};var Ta=20,Aa=1,Ma=1/0;function Sa(e,r){return t.rebind(e,r,\\\"sort\\\",\\\"children\\\",\\\"value\\\"),e.nodes=e,e.links=za,e}function Ea(t,e){for(var r=[t];null!=(t=r.pop());)if(e(t),(i=t.children)&&(n=i.length))for(var n,i;--n>=0;)r.push(i[n])}function Ca(t,e){for(var r=[t],n=[];null!=(t=r.pop());)if(n.push(t),(a=t.children)&&(i=a.length))for(var i,a,o=-1;++o<i;)r.push(a[o]);for(;null!=(t=n.pop());)e(t)}function La(t){return t.children}function Pa(t){return t.value}function Oa(t,e){return e.value-t.value}function za(e){return t.merge(e.map(function(t){return(t.children||[]).map(function(e){return{source:t,target:e}})}))}t.layout.hierarchy=function(){var t=Oa,e=La,r=Pa;function n(i){var a,o=[i],s=[];for(i.depth=0;null!=(a=o.pop());)if(s.push(a),(c=e.call(n,a,a.depth))&&(l=c.length)){for(var l,c,u;--l>=0;)o.push(u=c[l]),u.parent=a,u.depth=a.depth+1;r&&(a.value=0),a.children=c}else r&&(a.value=+r.call(n,a,a.depth)||0),delete a.children;return Ca(i,function(e){var n,i;t&&(n=e.children)&&n.sort(t),r&&(i=e.parent)&&(i.value+=e.value)}),s}return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(Ea(t,function(t){t.children&&(t.value=0)}),Ca(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},t.layout.partition=function(){var e=t.layout.hierarchy(),r=[1,1];function n(t,n){var i=e.call(this,t,n);return function t(e,r,n,i){var a=e.children;if(e.x=r,e.y=e.depth*i,e.dx=n,e.dy=i,a&&(o=a.length)){var o,s,l,c=-1;for(n=e.value?n/e.value:0;++c<o;)t(s=a[c],r,l=s.value*n,i),r+=l}}(i[0],0,r[0],r[1]/function t(e){var r=e.children,n=0;if(r&&(i=r.length))for(var i,a=-1;++a<i;)n=Math.max(n,t(r[a]));return 1+n}(i[0])),i}return n.size=function(t){return arguments.length?(r=t,n):r},Sa(n,e)},t.layout.pie=function(){var e=Number,r=Ia,n=0,i=Mt,a=0;function o(s){var l,c=s.length,u=s.map(function(t,r){return+e.call(o,t,r)}),h=+(\\\"function\\\"==typeof n?n.apply(this,arguments):n),f=(\\\"function\\\"==typeof i?i.apply(this,arguments):i)-h,p=Math.min(Math.abs(f)/c,+(\\\"function\\\"==typeof a?a.apply(this,arguments):a)),d=p*(f<0?-1:1),g=t.sum(u),v=g?(f-c*d)/g:0,m=t.range(c),y=[];return null!=r&&m.sort(r===Ia?function(t,e){return u[e]-u[t]}:function(t,e){return r(s[t],s[e])}),m.forEach(function(t){y[t]={data:s[t],value:l=u[t],startAngle:h,endAngle:h+=l*v+d,padAngle:p}}),y}return o.value=function(t){return arguments.length?(e=t,o):e},o.sort=function(t){return arguments.length?(r=t,o):r},o.startAngle=function(t){return arguments.length?(n=t,o):n},o.endAngle=function(t){return arguments.length?(i=t,o):i},o.padAngle=function(t){return arguments.length?(a=t,o):a},o};var Ia={};function Da(t){return t.x}function Ra(t){return t.y}function Fa(t,e,r){t.y0=e,t.y=r}t.layout.stack=function(){var e=P,r=ja,n=Ua,i=Fa,a=Da,o=Ra;function s(l,c){if(!(p=l.length))return l;var u=l.map(function(t,r){return e.call(s,t,r)}),h=u.map(function(t){return t.map(function(t,e){return[a.call(s,t,e),o.call(s,t,e)]})}),f=r.call(s,h,c);u=t.permute(u,f),h=t.permute(h,f);var p,d,g,v,m=n.call(s,h,c),y=u[0].length;for(g=0;g<y;++g)for(i.call(s,u[0][g],v=m[g],h[0][g][1]),d=1;d<p;++d)i.call(s,u[d][g],v+=h[d-1][g][1],h[d][g][1]);return l}return s.values=function(t){return arguments.length?(e=t,s):e},s.order=function(t){return arguments.length?(r=\\\"function\\\"==typeof t?t:Ba.get(t)||ja,s):r},s.offset=function(t){return arguments.length?(n=\\\"function\\\"==typeof t?t:Na.get(t)||Ua,s):n},s.x=function(t){return arguments.length?(a=t,s):a},s.y=function(t){return arguments.length?(o=t,s):o},s.out=function(t){return arguments.length?(i=t,s):i},s};var Ba=t.map({\\\"inside-out\\\":function(e){var r,n,i=e.length,a=e.map(Va),o=e.map(qa),s=t.range(i).sort(function(t,e){return a[t]-a[e]}),l=0,c=0,u=[],h=[];for(r=0;r<i;++r)n=s[r],l<c?(l+=o[n],u.push(n)):(c+=o[n],h.push(n));return h.reverse().concat(u)},reverse:function(e){return t.range(e.length).reverse()},default:ja}),Na=t.map({silhouette:function(t){var e,r,n,i=t.length,a=t[0].length,o=[],s=0,l=[];for(r=0;r<a;++r){for(e=0,n=0;e<i;e++)n+=t[e][r][1];n>s&&(s=n),o.push(n)}for(r=0;r<a;++r)l[r]=(s-o[r])/2;return l},wiggle:function(t){var e,r,n,i,a,o,s,l,c,u=t.length,h=t[0],f=h.length,p=[];for(p[0]=l=c=0,r=1;r<f;++r){for(e=0,i=0;e<u;++e)i+=t[e][r][1];for(e=0,a=0,s=h[r][0]-h[r-1][0];e<u;++e){for(n=0,o=(t[e][r][1]-t[e][r-1][1])/(2*s);n<e;++n)o+=(t[n][r][1]-t[n][r-1][1])/s;a+=o*t[e][r][1]}p[r]=l-=i?a/i*s:0,l<c&&(c=l)}for(r=0;r<f;++r)p[r]-=c;return p},expand:function(t){var e,r,n,i=t.length,a=t[0].length,o=1/i,s=[];for(r=0;r<a;++r){for(e=0,n=0;e<i;e++)n+=t[e][r][1];if(n)for(e=0;e<i;e++)t[e][r][1]/=n;else for(e=0;e<i;e++)t[e][r][1]=o}for(r=0;r<a;++r)s[r]=0;return s},zero:Ua});function ja(e){return t.range(e.length)}function Ua(t){for(var e=-1,r=t[0].length,n=[];++e<r;)n[e]=0;return n}function Va(t){for(var e,r=1,n=0,i=t[0][1],a=t.length;r<a;++r)(e=t[r][1])>i&&(n=r,i=e);return n}function qa(t){return t.reduce(Ha,0)}function Ha(t,e){return t+e[1]}function Ga(t,e){return Ya(t,Math.ceil(Math.log(e.length)/Math.LN2+1))}function Ya(t,e){for(var r=-1,n=+t[0],i=(t[1]-n)/e,a=[];++r<=e;)a[r]=i*r+n;return a}function Wa(e){return[t.min(e),t.max(e)]}function Xa(t,e){return t.value-e.value}function Za(t,e){var r=t._pack_next;t._pack_next=e,e._pack_prev=t,e._pack_next=r,r._pack_prev=e}function Ja(t,e){t._pack_next=e,e._pack_prev=t}function Ka(t,e){var r=e.x-t.x,n=e.y-t.y,i=t.r+e.r;return.999*i*i>r*r+n*n}function $a(t){if((e=t.children)&&(l=e.length)){var e,r,n,i,a,o,s,l,c=1/0,u=-1/0,h=1/0,f=-1/0;if(e.forEach(Qa),(r=e[0]).x=-r.r,r.y=0,x(r),l>1&&((n=e[1]).x=n.r,n.y=0,x(n),l>2))for(eo(r,n,i=e[2]),x(i),Za(r,i),r._pack_prev=i,Za(i,n),n=r._pack_next,a=3;a<l;a++){eo(r,n,i=e[a]);var p=0,d=1,g=1;for(o=n._pack_next;o!==n;o=o._pack_next,d++)if(Ka(o,i)){p=1;break}if(1==p)for(s=r._pack_prev;s!==o._pack_prev&&!Ka(s,i);s=s._pack_prev,g++);p?(d<g||d==g&&n.r<r.r?Ja(r,n=o):Ja(r=s,n),a--):(Za(r,i),n=i,x(i))}var v=(c+u)/2,m=(h+f)/2,y=0;for(a=0;a<l;a++)(i=e[a]).x-=v,i.y-=m,y=Math.max(y,i.r+Math.sqrt(i.x*i.x+i.y*i.y));t.r=y,e.forEach(to)}function x(t){c=Math.min(t.x-t.r,c),u=Math.max(t.x+t.r,u),h=Math.min(t.y-t.r,h),f=Math.max(t.y+t.r,f)}}function Qa(t){t._pack_next=t._pack_prev=t}function to(t){delete t._pack_next,delete t._pack_prev}function eo(t,e,r){var n=t.r+r.r,i=e.x-t.x,a=e.y-t.y;if(n&&(i||a)){var o=e.r+r.r,s=i*i+a*a,l=.5+((n*=n)-(o*=o))/(2*s),c=Math.sqrt(Math.max(0,2*o*(n+s)-(n-=s)*n-o*o))/(2*s);r.x=t.x+l*i+c*a,r.y=t.y+l*a-c*i}else r.x=t.x+n,r.y=t.y}function ro(t,e){return t.parent==e.parent?1:2}function no(t){var e=t.children;return e.length?e[0]:t.t}function io(t){var e,r=t.children;return(e=r.length)?r[e-1]:t.t}function ao(t,e,r){var n=r/(e.i-t.i);e.c-=n,e.s+=r,t.c+=n,e.z+=r,e.m+=r}function oo(t,e,r){return t.a.parent===e.parent?t.a:r}function so(t){return{x:t.x,y:t.y,dx:t.dx,dy:t.dy}}function lo(t,e){var r=t.x+e[3],n=t.y+e[0],i=t.dx-e[1]-e[3],a=t.dy-e[0]-e[2];return i<0&&(r+=i/2,i=0),a<0&&(n+=a/2,a=0),{x:r,y:n,dx:i,dy:a}}function co(t){var e=t[0],r=t[t.length-1];return e<r?[e,r]:[r,e]}function uo(t){return t.rangeExtent?t.rangeExtent():co(t.range())}function ho(t,e,r,n){var i=r(t[0],t[1]),a=n(e[0],e[1]);return function(t){return a(i(t))}}function fo(t,e){var r,n=0,i=t.length-1,a=t[n],o=t[i];return o<a&&(r=n,n=i,i=r,r=a,a=o,o=r),t[n]=e.floor(a),t[i]=e.ceil(o),t}function po(t){return t?{floor:function(e){return Math.floor(e/t)*t},ceil:function(e){return Math.ceil(e/t)*t}}:go}t.layout.histogram=function(){var e=!0,r=Number,n=Wa,i=Ga;function a(a,o){for(var s,l,c=[],u=a.map(r,this),h=n.call(this,u,o),f=i.call(this,h,u,o),p=(o=-1,u.length),d=f.length-1,g=e?1:1/p;++o<d;)(s=c[o]=[]).dx=f[o+1]-(s.x=f[o]),s.y=0;if(d>0)for(o=-1;++o<p;)(l=u[o])>=h[0]&&l<=h[1]&&((s=c[t.bisect(f,l,1,d)-1]).y+=g,s.push(a[o]));return c}return a.value=function(t){return arguments.length?(r=t,a):r},a.range=function(t){return arguments.length?(n=ve(t),a):n},a.bins=function(t){return arguments.length?(i=\\\"number\\\"==typeof t?function(e){return Ya(e,t)}:ve(t),a):i},a.frequency=function(t){return arguments.length?(e=!!t,a):e},a},t.layout.pack=function(){var e,r=t.layout.hierarchy().sort(Xa),n=0,i=[1,1];function a(t,a){var o=r.call(this,t,a),s=o[0],l=i[0],c=i[1],u=null==e?Math.sqrt:\\\"function\\\"==typeof e?e:function(){return e};if(s.x=s.y=0,Ca(s,function(t){t.r=+u(t.value)}),Ca(s,$a),n){var h=n*(e?1:Math.max(2*s.r/l,2*s.r/c))/2;Ca(s,function(t){t.r+=h}),Ca(s,$a),Ca(s,function(t){t.r-=h})}return function t(e,r,n,i){var a=e.children;e.x=r+=i*e.x;e.y=n+=i*e.y;e.r*=i;if(a)for(var o=-1,s=a.length;++o<s;)t(a[o],r,n,i)}(s,l/2,c/2,e?1:1/Math.max(2*s.r/l,2*s.r/c)),o}return a.size=function(t){return arguments.length?(i=t,a):i},a.radius=function(t){return arguments.length?(e=null==t||\\\"function\\\"==typeof t?t:+t,a):e},a.padding=function(t){return arguments.length?(n=+t,a):n},Sa(a,r)},t.layout.tree=function(){var e=t.layout.hierarchy().sort(null).value(null),r=ro,n=[1,1],i=null;function a(t,a){var c=e.call(this,t,a),u=c[0],h=function(t){var e,r={A:null,children:[t]},n=[r];for(;null!=(e=n.pop());)for(var i,a=e.children,o=0,s=a.length;o<s;++o)n.push((a[o]=i={_:a[o],parent:e,children:(i=a[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return r.children[0]}(u);if(Ca(h,o),h.parent.m=-h.z,Ea(h,s),i)Ea(u,l);else{var f=u,p=u,d=u;Ea(u,function(t){t.x<f.x&&(f=t),t.x>p.x&&(p=t),t.depth>d.depth&&(d=t)});var g=r(f,p)/2-f.x,v=n[0]/(p.x+r(p,f)/2+g),m=n[1]/(d.depth||1);Ea(u,function(t){t.x=(t.x+g)*v,t.y=t.depth*m})}return c}function o(t){var e=t.children,n=t.parent.children,i=t.i?n[t.i-1]:null;if(e.length){!function(t){var e,r=0,n=0,i=t.children,a=i.length;for(;--a>=0;)(e=i[a]).z+=r,e.m+=r,r+=e.s+(n+=e.c)}(t);var a=(e[0].z+e[e.length-1].z)/2;i?(t.z=i.z+r(t._,i._),t.m=t.z-a):t.z=a}else i&&(t.z=i.z+r(t._,i._));t.parent.A=function(t,e,n){if(e){for(var i,a=t,o=t,s=e,l=a.parent.children[0],c=a.m,u=o.m,h=s.m,f=l.m;s=io(s),a=no(a),s&&a;)l=no(l),(o=io(o)).a=t,(i=s.z+h-a.z-c+r(s._,a._))>0&&(ao(oo(s,t,n),t,i),c+=i,u+=i),h+=s.m,c+=a.m,f+=l.m,u+=o.m;s&&!io(o)&&(o.t=s,o.m+=h-u),a&&!no(l)&&(l.t=a,l.m+=c-f,n=t)}return n}(t,i,t.parent.A||n[0])}function s(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function l(t){t.x*=n[0],t.y=t.depth*n[1]}return a.separation=function(t){return arguments.length?(r=t,a):r},a.size=function(t){return arguments.length?(i=null==(n=t)?l:null,a):i?null:n},a.nodeSize=function(t){return arguments.length?(i=null==(n=t)?null:l,a):i?n:null},Sa(a,e)},t.layout.cluster=function(){var e=t.layout.hierarchy().sort(null).value(null),r=ro,n=[1,1],i=!1;function a(a,o){var s,l=e.call(this,a,o),c=l[0],u=0;Ca(c,function(e){var n=e.children;n&&n.length?(e.x=function(t){return t.reduce(function(t,e){return t+e.x},0)/t.length}(n),e.y=function(e){return 1+t.max(e,function(t){return t.y})}(n)):(e.x=s?u+=r(e,s):0,e.y=0,s=e)});var h=function t(e){var r=e.children;return r&&r.length?t(r[0]):e}(c),f=function t(e){var r,n=e.children;return n&&(r=n.length)?t(n[r-1]):e}(c),p=h.x-r(h,f)/2,d=f.x+r(f,h)/2;return Ca(c,i?function(t){t.x=(t.x-c.x)*n[0],t.y=(c.y-t.y)*n[1]}:function(t){t.x=(t.x-p)/(d-p)*n[0],t.y=(1-(c.y?t.y/c.y:1))*n[1]}),l}return a.separation=function(t){return arguments.length?(r=t,a):r},a.size=function(t){return arguments.length?(i=null==(n=t),a):i?null:n},a.nodeSize=function(t){return arguments.length?(i=null!=(n=t),a):i?n:null},Sa(a,e)},t.layout.treemap=function(){var e,r=t.layout.hierarchy(),n=Math.round,i=[1,1],a=null,o=so,s=!1,l=\\\"squarify\\\",c=.5*(1+Math.sqrt(5));function u(t,e){for(var r,n,i=-1,a=t.length;++i<a;)n=(r=t[i]).value*(e<0?0:e),r.area=isNaN(n)||n<=0?0:n}function h(t){var e=t.children;if(e&&e.length){var r,n,i,a=o(t),s=[],c=e.slice(),f=1/0,g=\\\"slice\\\"===l?a.dx:\\\"dice\\\"===l?a.dy:\\\"slice-dice\\\"===l?1&t.depth?a.dy:a.dx:Math.min(a.dx,a.dy);for(u(c,a.dx*a.dy/t.value),s.area=0;(i=c.length)>0;)s.push(r=c[i-1]),s.area+=r.area,\\\"squarify\\\"!==l||(n=p(s,g))<=f?(c.pop(),f=n):(s.area-=s.pop().area,d(s,g,a,!1),g=Math.min(a.dx,a.dy),s.length=s.area=0,f=1/0);s.length&&(d(s,g,a,!0),s.length=s.area=0),e.forEach(h)}}function f(t){var e=t.children;if(e&&e.length){var r,n=o(t),i=e.slice(),a=[];for(u(i,n.dx*n.dy/t.value),a.area=0;r=i.pop();)a.push(r),a.area+=r.area,null!=r.z&&(d(a,r.z?n.dx:n.dy,n,!i.length),a.length=a.area=0);e.forEach(f)}}function p(t,e){for(var r,n=t.area,i=0,a=1/0,o=-1,s=t.length;++o<s;)(r=t[o].area)&&(r<a&&(a=r),r>i&&(i=r));return e*=e,(n*=n)?Math.max(e*i*c/n,n/(e*a*c)):1/0}function d(t,e,r,i){var a,o=-1,s=t.length,l=r.x,c=r.y,u=e?n(t.area/e):0;if(e==r.dx){for((i||u>r.dy)&&(u=r.dy);++o<s;)(a=t[o]).x=l,a.y=c,a.dy=u,l+=a.dx=Math.min(r.x+r.dx-l,u?n(a.area/u):0);a.z=!0,a.dx+=r.x+r.dx-l,r.y+=u,r.dy-=u}else{for((i||u>r.dx)&&(u=r.dx);++o<s;)(a=t[o]).x=l,a.y=c,a.dx=u,c+=a.dy=Math.min(r.y+r.dy-c,u?n(a.area/u):0);a.z=!1,a.dy+=r.y+r.dy-c,r.x+=u,r.dx-=u}}function g(t){var n=e||r(t),a=n[0];return a.x=a.y=0,a.value?(a.dx=i[0],a.dy=i[1]):a.dx=a.dy=0,e&&r.revalue(a),u([a],a.dx*a.dy/a.value),(e?f:h)(a),s&&(e=n),n}return g.size=function(t){return arguments.length?(i=t,g):i},g.padding=function(t){if(!arguments.length)return a;function e(e){return lo(e,t)}var r;return o=null==(a=t)?so:\\\"function\\\"==(r=typeof t)?function(e){var r=t.call(g,e,e.depth);return null==r?so(e):lo(e,\\\"number\\\"==typeof r?[r,r,r,r]:r)}:\\\"number\\\"===r?(t=[t,t,t,t],e):e,g},g.round=function(t){return arguments.length?(n=t?Math.round:Number,g):n!=Number},g.sticky=function(t){return arguments.length?(s=t,e=null,g):s},g.ratio=function(t){return arguments.length?(c=t,g):c},g.mode=function(t){return arguments.length?(l=t+\\\"\\\",g):l},Sa(g,r)},t.random={normal:function(t,e){var r=arguments.length;return r<2&&(e=1),r<1&&(t=0),function(){var r,n,i;do{i=(r=2*Math.random()-1)*r+(n=2*Math.random()-1)*n}while(!i||i>1);return t+e*r*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var e=t.random.normal.apply(t,arguments);return function(){return Math.exp(e())}},bates:function(e){var r=t.random.irwinHall(e);return function(){return r()/e}},irwinHall:function(t){return function(){for(var e=0,r=0;r<t;r++)e+=Math.random();return e}}},t.scale={};var go={floor:P,ceil:P};function vo(e,r,n,i){var a=[],o=[],s=0,l=Math.min(e.length,r.length)-1;for(e[l]<e[0]&&(e=e.slice().reverse(),r=r.slice().reverse());++s<=l;)a.push(n(e[s-1],e[s])),o.push(i(r[s-1],r[s]));return function(r){var n=t.bisect(e,r,1,l)-1;return o[n](a[n](r))}}function mo(e,r){return t.rebind(e,r,\\\"range\\\",\\\"rangeRound\\\",\\\"interpolate\\\",\\\"clamp\\\")}function yo(t,e){return fo(t,po(xo(t,e)[2])),fo(t,po(xo(t,e)[2])),t}function xo(t,e){null==e&&(e=10);var r=co(t),n=r[1]-r[0],i=Math.pow(10,Math.floor(Math.log(n/e)/Math.LN10)),a=e/n*i;return a<=.15?i*=10:a<=.35?i*=5:a<=.75&&(i*=2),r[0]=Math.ceil(r[0]/i)*i,r[1]=Math.floor(r[1]/i)*i+.5*i,r[2]=i,r}function bo(e,r){return t.range.apply(t,xo(e,r))}function _o(e,r,n){var i=xo(e,r);if(n){var a=Le.exec(n);if(a.shift(),\\\"s\\\"===a[8]){var o=t.formatPrefix(Math.max(y(i[0]),y(i[1])));return a[7]||(a[7]=\\\".\\\"+ko(o.scale(i[2]))),a[8]=\\\"f\\\",n=t.format(a.join(\\\"\\\")),function(t){return n(o.scale(t))+o.symbol}}a[7]||(a[7]=\\\".\\\"+function(t,e){var r=ko(e[2]);return t in wo?Math.abs(r-ko(Math.max(y(e[0]),y(e[1]))))+ +(\\\"e\\\"!==t):r-2*(\\\"%\\\"===t)}(a[8],i)),n=a.join(\\\"\\\")}else n=\\\",.\\\"+ko(i[2])+\\\"f\\\";return t.format(n)}t.scale.linear=function(){return function t(e,r,n,i){var a,o;function s(){var t=Math.min(e.length,r.length)>2?vo:ho,s=i?ma:va;return a=t(e,r,s,n),o=t(r,e,s,Zi),l}function l(t){return a(t)}l.invert=function(t){return o(t)};l.domain=function(t){return arguments.length?(e=t.map(Number),s()):e};l.range=function(t){return arguments.length?(r=t,s()):r};l.rangeRound=function(t){return l.range(t).interpolate(ca)};l.clamp=function(t){return arguments.length?(i=t,s()):i};l.interpolate=function(t){return arguments.length?(n=t,s()):n};l.ticks=function(t){return bo(e,t)};l.tickFormat=function(t,r){return _o(e,t,r)};l.nice=function(t){return yo(e,t),s()};l.copy=function(){return t(e,r,n,i)};return s()}([0,1],[0,1],Zi,!1)};var wo={s:1,g:1,p:1,r:1,e:1};function ko(t){return-Math.floor(Math.log(t)/Math.LN10+.01)}t.scale.log=function(){return function e(r,n,i,a){function o(t){return(i?Math.log(t<0?0:t):-Math.log(t>0?0:-t))/Math.log(n)}function s(t){return i?Math.pow(n,t):-Math.pow(n,-t)}function l(t){return r(o(t))}l.invert=function(t){return s(r.invert(t))};l.domain=function(t){return arguments.length?(i=t[0]>=0,r.domain((a=t.map(Number)).map(o)),l):a};l.base=function(t){return arguments.length?(n=+t,r.domain(a.map(o)),l):n};l.nice=function(){var t=fo(a.map(o),i?Math:Ao);return r.domain(t),a=t.map(s),l};l.ticks=function(){var t=co(a),e=[],r=t[0],l=t[1],c=Math.floor(o(r)),u=Math.ceil(o(l)),h=n%1?2:n;if(isFinite(u-c)){if(i){for(;c<u;c++)for(var f=1;f<h;f++)e.push(s(c)*f);e.push(s(c))}else for(e.push(s(c));c++<u;)for(var f=h-1;f>0;f--)e.push(s(c)*f);for(c=0;e[c]<r;c++);for(u=e.length;e[u-1]>l;u--);e=e.slice(c,u)}return e};l.tickFormat=function(e,r){if(!arguments.length)return To;arguments.length<2?r=To:\\\"function\\\"!=typeof r&&(r=t.format(r));var i=Math.max(1,n*e/l.ticks().length);return function(t){var e=t/s(Math.round(o(t)));return e*n<n-.5&&(e*=n),e<=i?r(t):\\\"\\\"}};l.copy=function(){return e(r.copy(),n,i,a)};return mo(l,r)}(t.scale.linear().domain([0,1]),10,!0,[1,10])};var To=t.format(\\\".0e\\\"),Ao={floor:function(t){return-Math.ceil(-t)},ceil:function(t){return-Math.floor(-t)}};function Mo(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}t.scale.pow=function(){return function t(e,r,n){var i=Mo(r),a=Mo(1/r);function o(t){return e(i(t))}o.invert=function(t){return a(e.invert(t))};o.domain=function(t){return arguments.length?(e.domain((n=t.map(Number)).map(i)),o):n};o.ticks=function(t){return bo(n,t)};o.tickFormat=function(t,e){return _o(n,t,e)};o.nice=function(t){return o.domain(yo(n,t))};o.exponent=function(t){return arguments.length?(i=Mo(r=t),a=Mo(1/r),e.domain(n.map(i)),o):r};o.copy=function(){return t(e.copy(),r,n)};return mo(o,e)}(t.scale.linear(),1,[0,1])},t.scale.sqrt=function(){return t.scale.pow().exponent(.5)},t.scale.ordinal=function(){return function e(r,n){var i,a,o;function s(t){return a[((i.get(t)||(\\\"range\\\"===n.t?i.set(t,r.push(t)):NaN))-1)%a.length]}function l(e,n){return t.range(r.length).map(function(t){return e+n*t})}s.domain=function(t){if(!arguments.length)return r;r=[],i=new b;for(var e,a=-1,o=t.length;++a<o;)i.has(e=t[a])||i.set(e,r.push(e));return s[n.t].apply(s,n.a)};s.range=function(t){return arguments.length?(a=t,o=0,n={t:\\\"range\\\",a:arguments},s):a};s.rangePoints=function(t,e){arguments.length<2&&(e=0);var i=t[0],c=t[1],u=r.length<2?(i=(i+c)/2,0):(c-i)/(r.length-1+e);return a=l(i+u*e/2,u),o=0,n={t:\\\"rangePoints\\\",a:arguments},s};s.rangeRoundPoints=function(t,e){arguments.length<2&&(e=0);var i=t[0],c=t[1],u=r.length<2?(i=c=Math.round((i+c)/2),0):(c-i)/(r.length-1+e)|0;return a=l(i+Math.round(u*e/2+(c-i-(r.length-1+e)*u)/2),u),o=0,n={t:\\\"rangeRoundPoints\\\",a:arguments},s};s.rangeBands=function(t,e,i){arguments.length<2&&(e=0),arguments.length<3&&(i=e);var c=t[1]<t[0],u=t[c-0],h=t[1-c],f=(h-u)/(r.length-e+2*i);return a=l(u+f*i,f),c&&a.reverse(),o=f*(1-e),n={t:\\\"rangeBands\\\",a:arguments},s};s.rangeRoundBands=function(t,e,i){arguments.length<2&&(e=0),arguments.length<3&&(i=e);var c=t[1]<t[0],u=t[c-0],h=t[1-c],f=Math.floor((h-u)/(r.length-e+2*i));return a=l(u+Math.round((h-u-(r.length-e)*f)/2),f),c&&a.reverse(),o=Math.round(f*(1-e)),n={t:\\\"rangeRoundBands\\\",a:arguments},s};s.rangeBand=function(){return o};s.rangeExtent=function(){return co(n.a[0])};s.copy=function(){return e(r,n)};return s.domain(r)}([],{t:\\\"range\\\",a:[[]]})},t.scale.category10=function(){return t.scale.ordinal().range(So)},t.scale.category20=function(){return t.scale.ordinal().range(Eo)},t.scale.category20b=function(){return t.scale.ordinal().range(Co)},t.scale.category20c=function(){return t.scale.ordinal().range(Lo)};var So=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(se),Eo=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(se),Co=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(se),Lo=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(se);function Po(){return 0}t.scale.quantile=function(){return function e(r,n){var i;function a(){var e=0,a=n.length;for(i=[];++e<a;)i[e-1]=t.quantile(r,e/a);return o}function o(e){if(!isNaN(e=+e))return n[t.bisect(i,e)]}o.domain=function(t){return arguments.length?(r=t.map(p).filter(d).sort(f),a()):r};o.range=function(t){return arguments.length?(n=t,a()):n};o.quantiles=function(){return i};o.invertExtent=function(t){return(t=n.indexOf(t))<0?[NaN,NaN]:[t>0?i[t-1]:r[0],t<i.length?i[t]:r[r.length-1]]};o.copy=function(){return e(r,n)};return a()}([],[])},t.scale.quantize=function(){return function t(e,r,n){var i,a;function o(t){return n[Math.max(0,Math.min(a,Math.floor(i*(t-e))))]}function s(){return i=n.length/(r-e),a=n.length-1,o}o.domain=function(t){return arguments.length?(e=+t[0],r=+t[t.length-1],s()):[e,r]};o.range=function(t){return arguments.length?(n=t,s()):n};o.invertExtent=function(t){return[t=(t=n.indexOf(t))<0?NaN:t/i+e,t+1/i]};o.copy=function(){return t(e,r,n)};return s()}(0,1,[0,1])},t.scale.threshold=function(){return function e(r,n){function i(e){if(e<=e)return n[t.bisect(r,e)]}i.domain=function(t){return arguments.length?(r=t,i):r};i.range=function(t){return arguments.length?(n=t,i):n};i.invertExtent=function(t){return t=n.indexOf(t),[r[t-1],r[t]]};i.copy=function(){return e(r,n)};return i}([.5],[0,1])},t.scale.identity=function(){return function t(e){function r(t){return+t}r.invert=r;r.domain=r.range=function(t){return arguments.length?(e=t.map(r),r):e};r.ticks=function(t){return bo(e,t)};r.tickFormat=function(t,r){return _o(e,t,r)};r.copy=function(){return t(e)};return r}([0,1])},t.svg={},t.svg.arc=function(){var t=zo,e=Io,r=Po,n=Oo,i=Do,a=Ro,o=Fo;function s(){var s=Math.max(0,+t.apply(this,arguments)),c=Math.max(0,+e.apply(this,arguments)),u=i.apply(this,arguments)-Et,h=a.apply(this,arguments)-Et,f=Math.abs(h-u),p=u>h?0:1;if(c<s&&(d=c,c=s,s=d),f>=St)return l(c,p)+(s?l(s,1-p):\\\"\\\")+\\\"Z\\\";var d,g,v,m,y,x,b,_,w,k,T,A,M=0,S=0,E=[];if((m=(+o.apply(this,arguments)||0)/2)&&(v=n===Oo?Math.sqrt(s*s+c*c):+n.apply(this,arguments),p||(S*=-1),c&&(S=It(v/c*Math.sin(m))),s&&(M=It(v/s*Math.sin(m)))),c){y=c*Math.cos(u+S),x=c*Math.sin(u+S),b=c*Math.cos(h-S),_=c*Math.sin(h-S);var C=Math.abs(h-u-2*S)<=At?0:1;if(S&&Bo(y,x,b,_)===p^C){var L=(u+h)/2;y=c*Math.cos(L),x=c*Math.sin(L),b=_=null}}else y=x=0;if(s){w=s*Math.cos(h-M),k=s*Math.sin(h-M),T=s*Math.cos(u+M),A=s*Math.sin(u+M);var P=Math.abs(u-h+2*M)<=At?0:1;if(M&&Bo(w,k,T,A)===1-p^P){var O=(u+h)/2;w=s*Math.cos(O),k=s*Math.sin(O),T=A=null}}else w=k=0;if(f>kt&&(d=Math.min(Math.abs(c-s)/2,+r.apply(this,arguments)))>.001){g=s<c^p?0:1;var z=d,I=d;if(f<At){var D=null==T?[w,k]:null==b?[y,x]:si([y,x],[T,A],[b,_],[w,k]),R=y-D[0],F=x-D[1],B=b-D[0],N=_-D[1],j=1/Math.sin(Math.acos((R*B+F*N)/(Math.sqrt(R*R+F*F)*Math.sqrt(B*B+N*N)))/2),U=Math.sqrt(D[0]*D[0]+D[1]*D[1]);I=Math.min(d,(s-U)/(j-1)),z=Math.min(d,(c-U)/(j+1))}if(null!=b){var V=No(null==T?[w,k]:[T,A],[y,x],c,z,p),q=No([b,_],[w,k],c,z,p);d===z?E.push(\\\"M\\\",V[0],\\\"A\\\",z,\\\",\\\",z,\\\" 0 0,\\\",g,\\\" \\\",V[1],\\\"A\\\",c,\\\",\\\",c,\\\" 0 \\\",1-p^Bo(V[1][0],V[1][1],q[1][0],q[1][1]),\\\",\\\",p,\\\" \\\",q[1],\\\"A\\\",z,\\\",\\\",z,\\\" 0 0,\\\",g,\\\" \\\",q[0]):E.push(\\\"M\\\",V[0],\\\"A\\\",z,\\\",\\\",z,\\\" 0 1,\\\",g,\\\" \\\",q[0])}else E.push(\\\"M\\\",y,\\\",\\\",x);if(null!=T){var H=No([y,x],[T,A],s,-I,p),G=No([w,k],null==b?[y,x]:[b,_],s,-I,p);d===I?E.push(\\\"L\\\",G[0],\\\"A\\\",I,\\\",\\\",I,\\\" 0 0,\\\",g,\\\" \\\",G[1],\\\"A\\\",s,\\\",\\\",s,\\\" 0 \\\",p^Bo(G[1][0],G[1][1],H[1][0],H[1][1]),\\\",\\\",1-p,\\\" \\\",H[1],\\\"A\\\",I,\\\",\\\",I,\\\" 0 0,\\\",g,\\\" \\\",H[0]):E.push(\\\"L\\\",G[0],\\\"A\\\",I,\\\",\\\",I,\\\" 0 0,\\\",g,\\\" \\\",H[0])}else E.push(\\\"L\\\",w,\\\",\\\",k)}else E.push(\\\"M\\\",y,\\\",\\\",x),null!=b&&E.push(\\\"A\\\",c,\\\",\\\",c,\\\" 0 \\\",C,\\\",\\\",p,\\\" \\\",b,\\\",\\\",_),E.push(\\\"L\\\",w,\\\",\\\",k),null!=T&&E.push(\\\"A\\\",s,\\\",\\\",s,\\\" 0 \\\",P,\\\",\\\",1-p,\\\" \\\",T,\\\",\\\",A);return E.push(\\\"Z\\\"),E.join(\\\"\\\")}function l(t,e){return\\\"M0,\\\"+t+\\\"A\\\"+t+\\\",\\\"+t+\\\" 0 1,\\\"+e+\\\" 0,\\\"+-t+\\\"A\\\"+t+\\\",\\\"+t+\\\" 0 1,\\\"+e+\\\" 0,\\\"+t}return s.innerRadius=function(e){return arguments.length?(t=ve(e),s):t},s.outerRadius=function(t){return arguments.length?(e=ve(t),s):e},s.cornerRadius=function(t){return arguments.length?(r=ve(t),s):r},s.padRadius=function(t){return arguments.length?(n=t==Oo?Oo:ve(t),s):n},s.startAngle=function(t){return arguments.length?(i=ve(t),s):i},s.endAngle=function(t){return arguments.length?(a=ve(t),s):a},s.padAngle=function(t){return arguments.length?(o=ve(t),s):o},s.centroid=function(){var r=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,n=(+i.apply(this,arguments)+ +a.apply(this,arguments))/2-Et;return[Math.cos(n)*r,Math.sin(n)*r]},s};var Oo=\\\"auto\\\";function zo(t){return t.innerRadius}function Io(t){return t.outerRadius}function Do(t){return t.startAngle}function Ro(t){return t.endAngle}function Fo(t){return t&&t.padAngle}function Bo(t,e,r,n){return(t-r)*e-(e-n)*t>0?0:1}function No(t,e,r,n,i){var a=t[0]-e[0],o=t[1]-e[1],s=(i?n:-n)/Math.sqrt(a*a+o*o),l=s*o,c=-s*a,u=t[0]+l,h=t[1]+c,f=e[0]+l,p=e[1]+c,d=(u+f)/2,g=(h+p)/2,v=f-u,m=p-h,y=v*v+m*m,x=r-n,b=u*p-f*h,_=(m<0?-1:1)*Math.sqrt(Math.max(0,x*x*y-b*b)),w=(b*m-v*_)/y,k=(-b*v-m*_)/y,T=(b*m+v*_)/y,A=(-b*v+m*_)/y,M=w-d,S=k-g,E=T-d,C=A-g;return M*M+S*S>E*E+C*C&&(w=T,k=A),[[w-l,k-c],[w*r/x,k*r/x]]}function jo(t){var e=ei,r=ri,n=Yr,i=Vo,a=i.key,o=.7;function s(a){var s,l=[],c=[],u=-1,h=a.length,f=ve(e),p=ve(r);function d(){l.push(\\\"M\\\",i(t(c),o))}for(;++u<h;)n.call(this,s=a[u],u)?c.push([+f.call(this,s,u),+p.call(this,s,u)]):c.length&&(d(),c=[]);return c.length&&d(),l.length?l.join(\\\"\\\"):null}return s.x=function(t){return arguments.length?(e=t,s):e},s.y=function(t){return arguments.length?(r=t,s):r},s.defined=function(t){return arguments.length?(n=t,s):n},s.interpolate=function(t){return arguments.length?(a=\\\"function\\\"==typeof t?i=t:(i=Uo.get(t)||Vo).key,s):a},s.tension=function(t){return arguments.length?(o=t,s):o},s}t.svg.line=function(){return jo(P)};var Uo=t.map({linear:Vo,\\\"linear-closed\\\":qo,step:function(t){var e=0,r=t.length,n=t[0],i=[n[0],\\\",\\\",n[1]];for(;++e<r;)i.push(\\\"H\\\",(n[0]+(n=t[e])[0])/2,\\\"V\\\",n[1]);r>1&&i.push(\\\"H\\\",n[0]);return i.join(\\\"\\\")},\\\"step-before\\\":Ho,\\\"step-after\\\":Go,basis:Xo,\\\"basis-open\\\":function(t){if(t.length<4)return Vo(t);var e,r=[],n=-1,i=t.length,a=[0],o=[0];for(;++n<3;)e=t[n],a.push(e[0]),o.push(e[1]);r.push(Zo($o,a)+\\\",\\\"+Zo($o,o)),--n;for(;++n<i;)e=t[n],a.shift(),a.push(e[0]),o.shift(),o.push(e[1]),Qo(r,a,o);return r.join(\\\"\\\")},\\\"basis-closed\\\":function(t){var e,r,n=-1,i=t.length,a=i+4,o=[],s=[];for(;++n<4;)r=t[n%i],o.push(r[0]),s.push(r[1]);e=[Zo($o,o),\\\",\\\",Zo($o,s)],--n;for(;++n<a;)r=t[n%i],o.shift(),o.push(r[0]),s.shift(),s.push(r[1]),Qo(e,o,s);return e.join(\\\"\\\")},bundle:function(t,e){var r=t.length-1;if(r)for(var n,i,a=t[0][0],o=t[0][1],s=t[r][0]-a,l=t[r][1]-o,c=-1;++c<=r;)n=t[c],i=c/r,n[0]=e*n[0]+(1-e)*(a+i*s),n[1]=e*n[1]+(1-e)*(o+i*l);return Xo(t)},cardinal:function(t,e){return t.length<3?Vo(t):t[0]+Yo(t,Wo(t,e))},\\\"cardinal-open\\\":function(t,e){return t.length<4?Vo(t):t[1]+Yo(t.slice(1,-1),Wo(t,e))},\\\"cardinal-closed\\\":function(t,e){return t.length<3?qo(t):t[0]+Yo((t.push(t[0]),t),Wo([t[t.length-2]].concat(t,[t[1]]),e))},monotone:function(t){return t.length<3?Vo(t):t[0]+Yo(t,function(t){var e,r,n,i,a=[],o=function(t){var e=0,r=t.length-1,n=[],i=t[0],a=t[1],o=n[0]=ts(i,a);for(;++e<r;)n[e]=(o+(o=ts(i=a,a=t[e+1])))/2;return n[e]=o,n}(t),s=-1,l=t.length-1;for(;++s<l;)e=ts(t[s],t[s+1]),y(e)<kt?o[s]=o[s+1]=0:(r=o[s]/e,n=o[s+1]/e,(i=r*r+n*n)>9&&(i=3*e/Math.sqrt(i),o[s]=i*r,o[s+1]=i*n));s=-1;for(;++s<=l;)i=(t[Math.min(l,s+1)][0]-t[Math.max(0,s-1)][0])/(6*(1+o[s]*o[s])),a.push([i||0,o[s]*i||0]);return a}(t))}});function Vo(t){return t.length>1?t.join(\\\"L\\\"):t+\\\"Z\\\"}function qo(t){return t.join(\\\"L\\\")+\\\"Z\\\"}function Ho(t){for(var e=0,r=t.length,n=t[0],i=[n[0],\\\",\\\",n[1]];++e<r;)i.push(\\\"V\\\",(n=t[e])[1],\\\"H\\\",n[0]);return i.join(\\\"\\\")}function Go(t){for(var e=0,r=t.length,n=t[0],i=[n[0],\\\",\\\",n[1]];++e<r;)i.push(\\\"H\\\",(n=t[e])[0],\\\"V\\\",n[1]);return i.join(\\\"\\\")}function Yo(t,e){if(e.length<1||t.length!=e.length&&t.length!=e.length+2)return Vo(t);var r=t.length!=e.length,n=\\\"\\\",i=t[0],a=t[1],o=e[0],s=o,l=1;if(r&&(n+=\\\"Q\\\"+(a[0]-2*o[0]/3)+\\\",\\\"+(a[1]-2*o[1]/3)+\\\",\\\"+a[0]+\\\",\\\"+a[1],i=t[1],l=2),e.length>1){s=e[1],a=t[l],l++,n+=\\\"C\\\"+(i[0]+o[0])+\\\",\\\"+(i[1]+o[1])+\\\",\\\"+(a[0]-s[0])+\\\",\\\"+(a[1]-s[1])+\\\",\\\"+a[0]+\\\",\\\"+a[1];for(var c=2;c<e.length;c++,l++)a=t[l],s=e[c],n+=\\\"S\\\"+(a[0]-s[0])+\\\",\\\"+(a[1]-s[1])+\\\",\\\"+a[0]+\\\",\\\"+a[1]}if(r){var u=t[l];n+=\\\"Q\\\"+(a[0]+2*s[0]/3)+\\\",\\\"+(a[1]+2*s[1]/3)+\\\",\\\"+u[0]+\\\",\\\"+u[1]}return n}function Wo(t,e){for(var r,n=[],i=(1-e)/2,a=t[0],o=t[1],s=1,l=t.length;++s<l;)r=a,a=o,o=t[s],n.push([i*(o[0]-r[0]),i*(o[1]-r[1])]);return n}function Xo(t){if(t.length<3)return Vo(t);var e=1,r=t.length,n=t[0],i=n[0],a=n[1],o=[i,i,i,(n=t[1])[0]],s=[a,a,a,n[1]],l=[i,\\\",\\\",a,\\\"L\\\",Zo($o,o),\\\",\\\",Zo($o,s)];for(t.push(t[r-1]);++e<=r;)n=t[e],o.shift(),o.push(n[0]),s.shift(),s.push(n[1]),Qo(l,o,s);return t.pop(),l.push(\\\"L\\\",n),l.join(\\\"\\\")}function Zo(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}Uo.forEach(function(t,e){e.key=t,e.closed=/-closed$/.test(t)});var Jo=[0,2/3,1/3,0],Ko=[0,1/3,2/3,0],$o=[0,1/6,2/3,1/6];function Qo(t,e,r){t.push(\\\"C\\\",Zo(Jo,e),\\\",\\\",Zo(Jo,r),\\\",\\\",Zo(Ko,e),\\\",\\\",Zo(Ko,r),\\\",\\\",Zo($o,e),\\\",\\\",Zo($o,r))}function ts(t,e){return(e[1]-t[1])/(e[0]-t[0])}function es(t){for(var e,r,n,i=-1,a=t.length;++i<a;)r=(e=t[i])[0],n=e[1]-Et,e[0]=r*Math.cos(n),e[1]=r*Math.sin(n);return t}function rs(t){var e=ei,r=ei,n=0,i=ri,a=Yr,o=Vo,s=o.key,l=o,c=\\\"L\\\",u=.7;function h(s){var h,f,p,d=[],g=[],v=[],m=-1,y=s.length,x=ve(e),b=ve(n),_=e===r?function(){return f}:ve(r),w=n===i?function(){return p}:ve(i);function k(){d.push(\\\"M\\\",o(t(v),u),c,l(t(g.reverse()),u),\\\"Z\\\")}for(;++m<y;)a.call(this,h=s[m],m)?(g.push([f=+x.call(this,h,m),p=+b.call(this,h,m)]),v.push([+_.call(this,h,m),+w.call(this,h,m)])):g.length&&(k(),g=[],v=[]);return g.length&&k(),d.length?d.join(\\\"\\\"):null}return h.x=function(t){return arguments.length?(e=r=t,h):r},h.x0=function(t){return arguments.length?(e=t,h):e},h.x1=function(t){return arguments.length?(r=t,h):r},h.y=function(t){return arguments.length?(n=i=t,h):i},h.y0=function(t){return arguments.length?(n=t,h):n},h.y1=function(t){return arguments.length?(i=t,h):i},h.defined=function(t){return arguments.length?(a=t,h):a},h.interpolate=function(t){return arguments.length?(s=\\\"function\\\"==typeof t?o=t:(o=Uo.get(t)||Vo).key,l=o.reverse||o,c=o.closed?\\\"M\\\":\\\"L\\\",h):s},h.tension=function(t){return arguments.length?(u=t,h):u},h}function ns(t){return t.radius}function is(t){return[t.x,t.y]}function as(){return 64}function os(){return\\\"circle\\\"}function ss(t){var e=Math.sqrt(t/At);return\\\"M0,\\\"+e+\\\"A\\\"+e+\\\",\\\"+e+\\\" 0 1,1 0,\\\"+-e+\\\"A\\\"+e+\\\",\\\"+e+\\\" 0 1,1 0,\\\"+e+\\\"Z\\\"}t.svg.line.radial=function(){var t=jo(es);return t.radius=t.x,delete t.x,t.angle=t.y,delete t.y,t},Ho.reverse=Go,Go.reverse=Ho,t.svg.area=function(){return rs(P)},t.svg.area.radial=function(){var t=rs(es);return t.radius=t.x,delete t.x,t.innerRadius=t.x0,delete t.x0,t.outerRadius=t.x1,delete t.x1,t.angle=t.y,delete t.y,t.startAngle=t.y0,delete t.y0,t.endAngle=t.y1,delete t.y1,t},t.svg.chord=function(){var t=Un,e=Vn,r=ns,n=Do,i=Ro;function a(r,n){var i,a,c=o(this,t,r,n),u=o(this,e,r,n);return\\\"M\\\"+c.p0+s(c.r,c.p1,c.a1-c.a0)+(a=u,(i=c).a0==a.a0&&i.a1==a.a1?l(c.r,c.p1,c.r,c.p0):l(c.r,c.p1,u.r,u.p0)+s(u.r,u.p1,u.a1-u.a0)+l(u.r,u.p1,c.r,c.p0))+\\\"Z\\\"}function o(t,e,a,o){var s=e.call(t,a,o),l=r.call(t,s,o),c=n.call(t,s,o)-Et,u=i.call(t,s,o)-Et;return{r:l,a0:c,a1:u,p0:[l*Math.cos(c),l*Math.sin(c)],p1:[l*Math.cos(u),l*Math.sin(u)]}}function s(t,e,r){return\\\"A\\\"+t+\\\",\\\"+t+\\\" 0 \\\"+ +(r>At)+\\\",1 \\\"+e}function l(t,e,r,n){return\\\"Q 0,0 \\\"+n}return a.radius=function(t){return arguments.length?(r=ve(t),a):r},a.source=function(e){return arguments.length?(t=ve(e),a):t},a.target=function(t){return arguments.length?(e=ve(t),a):e},a.startAngle=function(t){return arguments.length?(n=ve(t),a):n},a.endAngle=function(t){return arguments.length?(i=ve(t),a):i},a},t.svg.diagonal=function(){var t=Un,e=Vn,r=is;function n(n,i){var a=t.call(this,n,i),o=e.call(this,n,i),s=(a.y+o.y)/2,l=[a,{x:a.x,y:s},{x:o.x,y:s},o];return\\\"M\\\"+(l=l.map(r))[0]+\\\"C\\\"+l[1]+\\\" \\\"+l[2]+\\\" \\\"+l[3]}return n.source=function(e){return arguments.length?(t=ve(e),n):t},n.target=function(t){return arguments.length?(e=ve(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},t.svg.diagonal.radial=function(){var e=t.svg.diagonal(),r=is,n=e.projection;return e.projection=function(t){return arguments.length?n(function(t){return function(){var e=t.apply(this,arguments),r=e[0],n=e[1]-Et;return[r*Math.cos(n),r*Math.sin(n)]}}(r=t)):r},e},t.svg.symbol=function(){var t=os,e=as;function r(r,n){return(ls.get(t.call(this,r,n))||ss)(e.call(this,r,n))}return r.type=function(e){return arguments.length?(t=ve(e),r):t},r.size=function(t){return arguments.length?(e=ve(t),r):e},r};var ls=t.map({circle:ss,cross:function(t){var e=Math.sqrt(t/5)/2;return\\\"M\\\"+-3*e+\\\",\\\"+-e+\\\"H\\\"+-e+\\\"V\\\"+-3*e+\\\"H\\\"+e+\\\"V\\\"+-e+\\\"H\\\"+3*e+\\\"V\\\"+e+\\\"H\\\"+e+\\\"V\\\"+3*e+\\\"H\\\"+-e+\\\"V\\\"+e+\\\"H\\\"+-3*e+\\\"Z\\\"},diamond:function(t){var e=Math.sqrt(t/(2*us)),r=e*us;return\\\"M0,\\\"+-e+\\\"L\\\"+r+\\\",0 0,\\\"+e+\\\" \\\"+-r+\\\",0Z\\\"},square:function(t){var e=Math.sqrt(t)/2;return\\\"M\\\"+-e+\\\",\\\"+-e+\\\"L\\\"+e+\\\",\\\"+-e+\\\" \\\"+e+\\\",\\\"+e+\\\" \\\"+-e+\\\",\\\"+e+\\\"Z\\\"},\\\"triangle-down\\\":function(t){var e=Math.sqrt(t/cs),r=e*cs/2;return\\\"M0,\\\"+r+\\\"L\\\"+e+\\\",\\\"+-r+\\\" \\\"+-e+\\\",\\\"+-r+\\\"Z\\\"},\\\"triangle-up\\\":function(t){var e=Math.sqrt(t/cs),r=e*cs/2;return\\\"M0,\\\"+-r+\\\"L\\\"+e+\\\",\\\"+r+\\\" \\\"+-e+\\\",\\\"+r+\\\"Z\\\"}});t.svg.symbolTypes=ls.keys();var cs=Math.sqrt(3),us=Math.tan(30*Ct);W.transition=function(t){for(var e,r,n=ds||++ms,i=bs(t),a=[],o=gs||{time:Date.now(),ease:ia,delay:0,duration:250},s=-1,l=this.length;++s<l;){a.push(e=[]);for(var c=this[s],u=-1,h=c.length;++u<h;)(r=c[u])&&_s(r,u,i,n,o),e.push(r)}return ps(a,i,n)},W.interrupt=function(t){return this.each(null==t?hs:fs(bs(t)))};var hs=fs(bs());function fs(t){return function(){var e,r,n;(e=this[t])&&(n=e[r=e.active])&&(n.timer.c=null,n.timer.t=NaN,--e.count?delete e[r]:delete this[t],e.active+=.5,n.event&&n.event.interrupt.call(this,this.__data__,n.index))}}function ps(t,e,r){return V(t,vs),t.namespace=e,t.id=r,t}var ds,gs,vs=[],ms=0;function ys(t,e,r,n){var i=t.id,a=t.namespace;return ut(t,\\\"function\\\"==typeof r?function(t,o,s){t[a][i].tween.set(e,n(r.call(t,t.__data__,o,s)))}:(r=n(r),function(t){t[a][i].tween.set(e,r)}))}function xs(t){return null==t&&(t=\\\"\\\"),function(){this.textContent=t}}function bs(t){return null==t?\\\"__transition__\\\":\\\"__transition_\\\"+t+\\\"__\\\"}function _s(t,e,r,n,i){var a,o,s,l,c,u=t[r]||(t[r]={active:0,count:0}),h=u[n];function f(r){var i=u.active,f=u[i];for(var d in f&&(f.timer.c=null,f.timer.t=NaN,--u.count,delete u[i],f.event&&f.event.interrupt.call(t,t.__data__,f.index)),u)if(+d<n){var g=u[d];g.timer.c=null,g.timer.t=NaN,--u.count,delete u[d]}o.c=p,Te(function(){return o.c&&p(r||1)&&(o.c=null,o.t=NaN),1},0,a),u.active=n,h.event&&h.event.start.call(t,t.__data__,e),c=[],h.tween.forEach(function(r,n){(n=n.call(t,t.__data__,e))&&c.push(n)}),l=h.ease,s=h.duration}function p(i){for(var a=i/s,o=l(a),f=c.length;f>0;)c[--f].call(t,o);if(a>=1)return h.event&&h.event.end.call(t,t.__data__,e),--u.count?delete u[n]:delete t[r],1}h||(a=i.time,o=Te(function(t){var e=h.delay;if(o.t=e+a,e<=t)return f(t-e);o.c=f},0,a),h=u[n]={tween:new b,time:a,timer:o,delay:i.delay,duration:i.duration,ease:i.ease,index:e},i=null,++u.count)}vs.call=W.call,vs.empty=W.empty,vs.node=W.node,vs.size=W.size,t.transition=function(e,r){return e&&e.transition?ds?e.transition(r):e:t.selection().transition(e)},t.transition.prototype=vs,vs.select=function(t){var e,r,n,i=this.id,a=this.namespace,o=[];t=X(t);for(var s=-1,l=this.length;++s<l;){o.push(e=[]);for(var c=this[s],u=-1,h=c.length;++u<h;)(n=c[u])&&(r=t.call(n,n.__data__,u,s))?(\\\"__data__\\\"in n&&(r.__data__=n.__data__),_s(r,u,a,i,n[a][i]),e.push(r)):e.push(null)}return ps(o,a,i)},vs.selectAll=function(t){var e,r,n,i,a,o=this.id,s=this.namespace,l=[];t=Z(t);for(var c=-1,u=this.length;++c<u;)for(var h=this[c],f=-1,p=h.length;++f<p;)if(n=h[f]){a=n[s][o],r=t.call(n,n.__data__,f,c),l.push(e=[]);for(var d=-1,g=r.length;++d<g;)(i=r[d])&&_s(i,d,s,o,a),e.push(i)}return ps(l,s,o)},vs.filter=function(t){var e,r,n=[];\\\"function\\\"!=typeof t&&(t=ct(t));for(var i=0,a=this.length;i<a;i++){n.push(e=[]);for(var o,s=0,l=(o=this[i]).length;s<l;s++)(r=o[s])&&t.call(r,r.__data__,s,i)&&e.push(r)}return ps(n,this.namespace,this.id)},vs.tween=function(t,e){var r=this.id,n=this.namespace;return arguments.length<2?this.node()[n][r].tween.get(t):ut(this,null==e?function(e){e[n][r].tween.remove(t)}:function(i){i[n][r].tween.set(t,e)})},vs.attr=function(e,r){if(arguments.length<2){for(r in e)this.attr(r,e[r]);return this}var n=\\\"transform\\\"==e?ga:Zi,i=t.ns.qualify(e);function a(){this.removeAttribute(i)}function o(){this.removeAttributeNS(i.space,i.local)}return ys(this,\\\"attr.\\\"+e,r,i.local?function(t){return null==t?o:(t+=\\\"\\\",function(){var e,r=this.getAttributeNS(i.space,i.local);return r!==t&&(e=n(r,t),function(t){this.setAttributeNS(i.space,i.local,e(t))})})}:function(t){return null==t?a:(t+=\\\"\\\",function(){var e,r=this.getAttribute(i);return r!==t&&(e=n(r,t),function(t){this.setAttribute(i,e(t))})})})},vs.attrTween=function(e,r){var n=t.ns.qualify(e);return this.tween(\\\"attr.\\\"+e,n.local?function(t,e){var i=r.call(this,t,e,this.getAttributeNS(n.space,n.local));return i&&function(t){this.setAttributeNS(n.space,n.local,i(t))}}:function(t,e){var i=r.call(this,t,e,this.getAttribute(n));return i&&function(t){this.setAttribute(n,i(t))}})},vs.style=function(t,e,r){var n=arguments.length;if(n<3){if(\\\"string\\\"!=typeof t){for(r in n<2&&(e=\\\"\\\"),t)this.style(r,t[r],e);return this}r=\\\"\\\"}function i(){this.style.removeProperty(t)}return ys(this,\\\"style.\\\"+t,e,function(e){return null==e?i:(e+=\\\"\\\",function(){var n,i=o(this).getComputedStyle(this,null).getPropertyValue(t);return i!==e&&(n=Zi(i,e),function(e){this.style.setProperty(t,n(e),r)})})})},vs.styleTween=function(t,e,r){return arguments.length<3&&(r=\\\"\\\"),this.tween(\\\"style.\\\"+t,function(n,i){var a=e.call(this,n,i,o(this).getComputedStyle(this,null).getPropertyValue(t));return a&&function(e){this.style.setProperty(t,a(e),r)}})},vs.text=function(t){return ys(this,\\\"text\\\",t,xs)},vs.remove=function(){var t=this.namespace;return this.each(\\\"end.transition\\\",function(){var e;this[t].count<2&&(e=this.parentNode)&&e.removeChild(this)})},vs.ease=function(e){var r=this.id,n=this.namespace;return arguments.length<1?this.node()[n][r].ease:(\\\"function\\\"!=typeof e&&(e=t.ease.apply(t,arguments)),ut(this,function(t){t[n][r].ease=e}))},vs.delay=function(t){var e=this.id,r=this.namespace;return arguments.length<1?this.node()[r][e].delay:ut(this,\\\"function\\\"==typeof t?function(n,i,a){n[r][e].delay=+t.call(n,n.__data__,i,a)}:(t=+t,function(n){n[r][e].delay=t}))},vs.duration=function(t){var e=this.id,r=this.namespace;return arguments.length<1?this.node()[r][e].duration:ut(this,\\\"function\\\"==typeof t?function(n,i,a){n[r][e].duration=Math.max(1,t.call(n,n.__data__,i,a))}:(t=Math.max(1,t),function(n){n[r][e].duration=t}))},vs.each=function(e,r){var n=this.id,i=this.namespace;if(arguments.length<2){var a=gs,o=ds;try{ds=n,ut(this,function(t,r,a){gs=t[i][n],e.call(t,t.__data__,r,a)})}finally{gs=a,ds=o}}else ut(this,function(a){var o=a[i][n];(o.event||(o.event=t.dispatch(\\\"start\\\",\\\"end\\\",\\\"interrupt\\\"))).on(e,r)});return this},vs.transition=function(){for(var t,e,r,n=this.id,i=++ms,a=this.namespace,o=[],s=0,l=this.length;s<l;s++){o.push(t=[]);for(var c,u=0,h=(c=this[s]).length;u<h;u++)(e=c[u])&&_s(e,u,a,i,{time:(r=e[a][n]).time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration}),t.push(e)}return ps(o,a,i)},t.svg.axis=function(){var e,r=t.scale.linear(),i=ws,a=6,o=6,s=3,l=[10],c=null;function u(n){n.each(function(){var n,u=t.select(this),h=this.__chart__||r,f=this.__chart__=r.copy(),p=null==c?f.ticks?f.ticks.apply(f,l):f.domain():c,d=null==e?f.tickFormat?f.tickFormat.apply(f,l):P:e,g=u.selectAll(\\\".tick\\\").data(p,f),v=g.enter().insert(\\\"g\\\",\\\".domain\\\").attr(\\\"class\\\",\\\"tick\\\").style(\\\"opacity\\\",kt),m=t.transition(g.exit()).style(\\\"opacity\\\",kt).remove(),y=t.transition(g.order()).style(\\\"opacity\\\",1),x=Math.max(a,0)+s,b=uo(f),_=u.selectAll(\\\".domain\\\").data([0]),w=(_.enter().append(\\\"path\\\").attr(\\\"class\\\",\\\"domain\\\"),t.transition(_));v.append(\\\"line\\\"),v.append(\\\"text\\\");var k,T,A,M,S=v.select(\\\"line\\\"),E=y.select(\\\"line\\\"),C=g.select(\\\"text\\\").text(d),L=v.select(\\\"text\\\"),O=y.select(\\\"text\\\"),z=\\\"top\\\"===i||\\\"left\\\"===i?-1:1;if(\\\"bottom\\\"===i||\\\"top\\\"===i?(n=Ts,k=\\\"x\\\",A=\\\"y\\\",T=\\\"x2\\\",M=\\\"y2\\\",C.attr(\\\"dy\\\",z<0?\\\"0em\\\":\\\".71em\\\").style(\\\"text-anchor\\\",\\\"middle\\\"),w.attr(\\\"d\\\",\\\"M\\\"+b[0]+\\\",\\\"+z*o+\\\"V0H\\\"+b[1]+\\\"V\\\"+z*o)):(n=As,k=\\\"y\\\",A=\\\"x\\\",T=\\\"y2\\\",M=\\\"x2\\\",C.attr(\\\"dy\\\",\\\".32em\\\").style(\\\"text-anchor\\\",z<0?\\\"end\\\":\\\"start\\\"),w.attr(\\\"d\\\",\\\"M\\\"+z*o+\\\",\\\"+b[0]+\\\"H0V\\\"+b[1]+\\\"H\\\"+z*o)),S.attr(M,z*a),L.attr(A,z*x),E.attr(T,0).attr(M,z*a),O.attr(k,0).attr(A,z*x),f.rangeBand){var I=f,D=I.rangeBand()/2;h=f=function(t){return I(t)+D}}else h.rangeBand?h=f:m.call(n,f,h);v.call(n,h,f),y.call(n,f,f)})}return u.scale=function(t){return arguments.length?(r=t,u):r},u.orient=function(t){return arguments.length?(i=t in ks?t+\\\"\\\":ws,u):i},u.ticks=function(){return arguments.length?(l=n(arguments),u):l},u.tickValues=function(t){return arguments.length?(c=t,u):c},u.tickFormat=function(t){return arguments.length?(e=t,u):e},u.tickSize=function(t){var e=arguments.length;return e?(a=+t,o=+arguments[e-1],u):a},u.innerTickSize=function(t){return arguments.length?(a=+t,u):a},u.outerTickSize=function(t){return arguments.length?(o=+t,u):o},u.tickPadding=function(t){return arguments.length?(s=+t,u):s},u.tickSubdivide=function(){return arguments.length&&u},u};var ws=\\\"bottom\\\",ks={top:1,right:1,bottom:1,left:1};function Ts(t,e,r){t.attr(\\\"transform\\\",function(t){var n=e(t);return\\\"translate(\\\"+(isFinite(n)?n:r(t))+\\\",0)\\\"})}function As(t,e,r){t.attr(\\\"transform\\\",function(t){var n=e(t);return\\\"translate(0,\\\"+(isFinite(n)?n:r(t))+\\\")\\\"})}t.svg.brush=function(){var e,r,n=j(f,\\\"brushstart\\\",\\\"brush\\\",\\\"brushend\\\"),i=null,a=null,s=[0,0],l=[0,0],c=!0,u=!0,h=Ss[0];function f(e){e.each(function(){var e=t.select(this).style(\\\"pointer-events\\\",\\\"all\\\").style(\\\"-webkit-tap-highlight-color\\\",\\\"rgba(0,0,0,0)\\\").on(\\\"mousedown.brush\\\",v).on(\\\"touchstart.brush\\\",v),r=e.selectAll(\\\".background\\\").data([0]);r.enter().append(\\\"rect\\\").attr(\\\"class\\\",\\\"background\\\").style(\\\"visibility\\\",\\\"hidden\\\").style(\\\"cursor\\\",\\\"crosshair\\\"),e.selectAll(\\\".extent\\\").data([0]).enter().append(\\\"rect\\\").attr(\\\"class\\\",\\\"extent\\\").style(\\\"cursor\\\",\\\"move\\\");var n=e.selectAll(\\\".resize\\\").data(h,P);n.exit().remove(),n.enter().append(\\\"g\\\").attr(\\\"class\\\",function(t){return\\\"resize \\\"+t}).style(\\\"cursor\\\",function(t){return Ms[t]}).append(\\\"rect\\\").attr(\\\"x\\\",function(t){return/[ew]$/.test(t)?-3:null}).attr(\\\"y\\\",function(t){return/^[ns]/.test(t)?-3:null}).attr(\\\"width\\\",6).attr(\\\"height\\\",6).style(\\\"visibility\\\",\\\"hidden\\\"),n.style(\\\"display\\\",f.empty()?\\\"none\\\":null);var o,s=t.transition(e),l=t.transition(r);i&&(o=uo(i),l.attr(\\\"x\\\",o[0]).attr(\\\"width\\\",o[1]-o[0]),d(s)),a&&(o=uo(a),l.attr(\\\"y\\\",o[0]).attr(\\\"height\\\",o[1]-o[0]),g(s)),p(s)})}function p(t){t.selectAll(\\\".resize\\\").attr(\\\"transform\\\",function(t){return\\\"translate(\\\"+s[+/e$/.test(t)]+\\\",\\\"+l[+/^s/.test(t)]+\\\")\\\"})}function d(t){t.select(\\\".extent\\\").attr(\\\"x\\\",s[0]),t.selectAll(\\\".extent,.n>rect,.s>rect\\\").attr(\\\"width\\\",s[1]-s[0])}function g(t){t.select(\\\".extent\\\").attr(\\\"y\\\",l[0]),t.selectAll(\\\".extent,.e>rect,.w>rect\\\").attr(\\\"height\\\",l[1]-l[0])}function v(){var h,v,m=this,y=t.select(t.event.target),x=n.of(m,arguments),b=t.select(m),_=y.datum(),w=!/^(n|s)$/.test(_)&&i,k=!/^(e|w)$/.test(_)&&a,T=y.classed(\\\"extent\\\"),A=xt(m),M=t.mouse(m),S=t.select(o(m)).on(\\\"keydown.brush\\\",function(){32==t.event.keyCode&&(T||(h=null,M[0]-=s[1],M[1]-=l[1],T=2),B())}).on(\\\"keyup.brush\\\",function(){32==t.event.keyCode&&2==T&&(M[0]+=s[1],M[1]+=l[1],T=0,B())});if(t.event.changedTouches?S.on(\\\"touchmove.brush\\\",L).on(\\\"touchend.brush\\\",O):S.on(\\\"mousemove.brush\\\",L).on(\\\"mouseup.brush\\\",O),b.interrupt().selectAll(\\\"*\\\").interrupt(),T)M[0]=s[0]-M[0],M[1]=l[0]-M[1];else if(_){var E=+/w$/.test(_),C=+/^n/.test(_);v=[s[1-E]-M[0],l[1-C]-M[1]],M[0]=s[E],M[1]=l[C]}else t.event.altKey&&(h=M.slice());function L(){var e=t.mouse(m),r=!1;v&&(e[0]+=v[0],e[1]+=v[1]),T||(t.event.altKey?(h||(h=[(s[0]+s[1])/2,(l[0]+l[1])/2]),M[0]=s[+(e[0]<h[0])],M[1]=l[+(e[1]<h[1])]):h=null),w&&P(e,i,0)&&(d(b),r=!0),k&&P(e,a,1)&&(g(b),r=!0),r&&(p(b),x({type:\\\"brush\\\",mode:T?\\\"move\\\":\\\"resize\\\"}))}function P(t,n,i){var a,o,f=uo(n),p=f[0],d=f[1],g=M[i],v=i?l:s,m=v[1]-v[0];if(T&&(p-=g,d-=m+g),a=(i?u:c)?Math.max(p,Math.min(d,t[i])):t[i],T?o=(a+=g)+m:(h&&(g=Math.max(p,Math.min(d,2*h[i]-a))),g<a?(o=a,a=g):o=g),v[0]!=a||v[1]!=o)return i?r=null:e=null,v[0]=a,v[1]=o,!0}function O(){L(),b.style(\\\"pointer-events\\\",\\\"all\\\").selectAll(\\\".resize\\\").style(\\\"display\\\",f.empty()?\\\"none\\\":null),t.select(\\\"body\\\").style(\\\"cursor\\\",null),S.on(\\\"mousemove.brush\\\",null).on(\\\"mouseup.brush\\\",null).on(\\\"touchmove.brush\\\",null).on(\\\"touchend.brush\\\",null).on(\\\"keydown.brush\\\",null).on(\\\"keyup.brush\\\",null),A(),x({type:\\\"brushend\\\"})}b.style(\\\"pointer-events\\\",\\\"none\\\").selectAll(\\\".resize\\\").style(\\\"display\\\",null),t.select(\\\"body\\\").style(\\\"cursor\\\",y.style(\\\"cursor\\\")),x({type:\\\"brushstart\\\"}),L()}return f.event=function(i){i.each(function(){var i=n.of(this,arguments),a={x:s,y:l,i:e,j:r},o=this.__chart__||a;this.__chart__=a,ds?t.select(this).transition().each(\\\"start.brush\\\",function(){e=o.i,r=o.j,s=o.x,l=o.y,i({type:\\\"brushstart\\\"})}).tween(\\\"brush:brush\\\",function(){var t=Ji(s,a.x),n=Ji(l,a.y);return e=r=null,function(e){s=a.x=t(e),l=a.y=n(e),i({type:\\\"brush\\\",mode:\\\"resize\\\"})}}).each(\\\"end.brush\\\",function(){e=a.i,r=a.j,i({type:\\\"brush\\\",mode:\\\"resize\\\"}),i({type:\\\"brushend\\\"})}):(i({type:\\\"brushstart\\\"}),i({type:\\\"brush\\\",mode:\\\"resize\\\"}),i({type:\\\"brushend\\\"}))})},f.x=function(t){return arguments.length?(h=Ss[!(i=t)<<1|!a],f):i},f.y=function(t){return arguments.length?(h=Ss[!i<<1|!(a=t)],f):a},f.clamp=function(t){return arguments.length?(i&&a?(c=!!t[0],u=!!t[1]):i?c=!!t:a&&(u=!!t),f):i&&a?[c,u]:i?c:a?u:null},f.extent=function(t){var n,o,c,u,h;return arguments.length?(i&&(n=t[0],o=t[1],a&&(n=n[0],o=o[0]),e=[n,o],i.invert&&(n=i(n),o=i(o)),o<n&&(h=n,n=o,o=h),n==s[0]&&o==s[1]||(s=[n,o])),a&&(c=t[0],u=t[1],i&&(c=c[1],u=u[1]),r=[c,u],a.invert&&(c=a(c),u=a(u)),u<c&&(h=c,c=u,u=h),c==l[0]&&u==l[1]||(l=[c,u])),f):(i&&(e?(n=e[0],o=e[1]):(n=s[0],o=s[1],i.invert&&(n=i.invert(n),o=i.invert(o)),o<n&&(h=n,n=o,o=h))),a&&(r?(c=r[0],u=r[1]):(c=l[0],u=l[1],a.invert&&(c=a.invert(c),u=a.invert(u)),u<c&&(h=c,c=u,u=h))),i&&a?[[n,c],[o,u]]:i?[n,o]:a&&[c,u])},f.clear=function(){return f.empty()||(s=[0,0],l=[0,0],e=r=null),f},f.empty=function(){return!!i&&s[0]==s[1]||!!a&&l[0]==l[1]},t.rebind(f,n,\\\"on\\\")};var Ms={n:\\\"ns-resize\\\",e:\\\"ew-resize\\\",s:\\\"ns-resize\\\",w:\\\"ew-resize\\\",nw:\\\"nwse-resize\\\",ne:\\\"nesw-resize\\\",se:\\\"nwse-resize\\\",sw:\\\"nesw-resize\\\"},Ss=[[\\\"n\\\",\\\"e\\\",\\\"s\\\",\\\"w\\\",\\\"nw\\\",\\\"ne\\\",\\\"se\\\",\\\"sw\\\"],[\\\"e\\\",\\\"w\\\"],[\\\"n\\\",\\\"s\\\"],[]],Es=ze.format=sr.timeFormat,Cs=Es.utc,Ls=Cs(\\\"%Y-%m-%dT%H:%M:%S.%LZ\\\");function Ps(t){return t.toISOString()}function Os(e,r,n){function i(t){return e(t)}function a(e,n){var i=(e[1]-e[0])/n,a=t.bisect(Is,i);return a==Is.length?[r.year,xo(e.map(function(t){return t/31536e6}),n)[2]]:a?r[i/Is[a-1]<Is[a]/i?a-1:a]:[Fs,xo(e,n)[2]]}return i.invert=function(t){return zs(e.invert(t))},i.domain=function(t){return arguments.length?(e.domain(t),i):e.domain().map(zs)},i.nice=function(t,e){var r=i.domain(),n=co(r),o=null==t?a(n,10):\\\"number\\\"==typeof t&&a(n,t);function s(r){return!isNaN(r)&&!t.range(r,zs(+r+1),e).length}return o&&(t=o[0],e=o[1]),i.domain(fo(r,e>1?{floor:function(e){for(;s(e=t.floor(e));)e=zs(e-1);return e},ceil:function(e){for(;s(e=t.ceil(e));)e=zs(+e+1);return e}}:t))},i.ticks=function(t,e){var r=co(i.domain()),n=null==t?a(r,10):\\\"number\\\"==typeof t?a(r,t):!t.range&&[{range:t},e];return n&&(t=n[0],e=n[1]),t.range(r[0],zs(+r[1]+1),e<1?1:e)},i.tickFormat=function(){return n},i.copy=function(){return Os(e.copy(),r,n)},mo(i,e)}function zs(t){return new Date(t)}Es.iso=Date.prototype.toISOString&&+new Date(\\\"2000-01-01T00:00:00.000Z\\\")?Ps:Ls,Ps.parse=function(t){var e=new Date(t);return isNaN(e)?null:e},Ps.toString=Ls.toString,ze.second=Fe(function(t){return new Ie(1e3*Math.floor(t/1e3))},function(t,e){t.setTime(t.getTime()+1e3*Math.floor(e))},function(t){return t.getSeconds()}),ze.seconds=ze.second.range,ze.seconds.utc=ze.second.utc.range,ze.minute=Fe(function(t){return new Ie(6e4*Math.floor(t/6e4))},function(t,e){t.setTime(t.getTime()+6e4*Math.floor(e))},function(t){return t.getMinutes()}),ze.minutes=ze.minute.range,ze.minutes.utc=ze.minute.utc.range,ze.hour=Fe(function(t){var e=t.getTimezoneOffset()/60;return new Ie(36e5*(Math.floor(t/36e5-e)+e))},function(t,e){t.setTime(t.getTime()+36e5*Math.floor(e))},function(t){return t.getHours()}),ze.hours=ze.hour.range,ze.hours.utc=ze.hour.utc.range,ze.month=Fe(function(t){return(t=ze.day(t)).setDate(1),t},function(t,e){t.setMonth(t.getMonth()+e)},function(t){return t.getMonth()}),ze.months=ze.month.range,ze.months.utc=ze.month.utc.range;var Is=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ds=[[ze.second,1],[ze.second,5],[ze.second,15],[ze.second,30],[ze.minute,1],[ze.minute,5],[ze.minute,15],[ze.minute,30],[ze.hour,1],[ze.hour,3],[ze.hour,6],[ze.hour,12],[ze.day,1],[ze.day,2],[ze.week,1],[ze.month,1],[ze.month,3],[ze.year,1]],Rs=Es.multi([[\\\".%L\\\",function(t){return t.getMilliseconds()}],[\\\":%S\\\",function(t){return t.getSeconds()}],[\\\"%I:%M\\\",function(t){return t.getMinutes()}],[\\\"%I %p\\\",function(t){return t.getHours()}],[\\\"%a %d\\\",function(t){return t.getDay()&&1!=t.getDate()}],[\\\"%b %d\\\",function(t){return 1!=t.getDate()}],[\\\"%B\\\",function(t){return t.getMonth()}],[\\\"%Y\\\",Yr]]),Fs={range:function(e,r,n){return t.range(Math.ceil(e/n)*n,+r,n).map(zs)},floor:P,ceil:P};Ds.year=ze.year,ze.scale=function(){return Os(t.scale.linear(),Ds,Rs)};var Bs=Ds.map(function(t){return[t[0].utc,t[1]]}),Ns=Cs.multi([[\\\".%L\\\",function(t){return t.getUTCMilliseconds()}],[\\\":%S\\\",function(t){return t.getUTCSeconds()}],[\\\"%I:%M\\\",function(t){return t.getUTCMinutes()}],[\\\"%I %p\\\",function(t){return t.getUTCHours()}],[\\\"%a %d\\\",function(t){return t.getUTCDay()&&1!=t.getUTCDate()}],[\\\"%b %d\\\",function(t){return 1!=t.getUTCDate()}],[\\\"%B\\\",function(t){return t.getUTCMonth()}],[\\\"%Y\\\",Yr]]);function js(t){return JSON.parse(t.responseText)}function Us(t){var e=i.createRange();return e.selectNode(i.body),e.createContextualFragment(t.responseText)}Bs.year=ze.year.utc,ze.scale.utc=function(){return Os(t.scale.linear(),Bs,Ns)},t.text=me(function(t){return t.responseText}),t.json=function(t,e){return ye(t,\\\"application/json\\\",js,e)},t.html=function(t,e){return ye(t,\\\"text/html\\\",Us,e)},t.xml=me(function(t){return t.responseXML}),\\\"object\\\"==typeof e&&e.exports?e.exports=t:this.d3=t}()},{}],164:[function(t,e,r){e.exports=function(){for(var t=0;t<arguments.length;t++)if(void 0!==arguments[t])return arguments[t]}},{}],165:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"incremental-convex-hull\\\"),i=t(\\\"uniq\\\");function a(t,e){this.point=t,this.index=e}function o(t,e){for(var r=t.point,n=e.point,i=r.length,a=0;a<i;++a){var o=n[a]-r[a];if(o)return o}return 0}e.exports=function(t,e){var r=t.length;if(0===r)return[];var s=t[0].length;if(s<1)return[];if(1===s)return function(t,e,r){if(1===t)return r?[[-1,0]]:[];var n=e.map(function(t,e){return[t[0],e]});n.sort(function(t,e){return t[0]-e[0]});for(var i=new Array(t-1),a=1;a<t;++a){var o=n[a-1],s=n[a];i[a-1]=[o[1],s[1]]}r&&i.push([-1,i[0][1]],[i[t-1][1],-1]);return i}(r,t,e);for(var l=new Array(r),c=1,u=0;u<r;++u){for(var h=t[u],f=new Array(s+1),p=0,d=0;d<s;++d){var g=h[d];f[d]=g,p+=g*g}f[s]=p,l[u]=new a(f,u),c=Math.max(p,c)}i(l,o),r=l.length;for(var v=new Array(r+s+1),m=new Array(r+s+1),y=(s+1)*(s+1)*c,x=new Array(s+1),u=0;u<=s;++u)x[u]=0;x[s]=y,v[0]=x.slice(),m[0]=-1;for(var u=0;u<=s;++u){var f=x.slice();f[u]=1,v[u+1]=f,m[u+1]=-1}for(var u=0;u<r;++u){var b=l[u];v[u+s+1]=b.point,m[u+s+1]=b.index}var _=n(v,!1);_=e?_.filter(function(t){for(var e=0,r=0;r<=s;++r){var n=m[t[r]];if(n<0&&++e>=2)return!1;t[r]=n}return!0}):_.filter(function(t){for(var e=0;e<=s;++e){var r=m[t[e]];if(r<0)return!1;t[e]=r}return!0});if(1&s)for(var u=0;u<_.length;++u){var b=_[u],f=b[0];b[0]=b[1],b[1]=f}return _}},{\\\"incremental-convex-hull\\\":413,uniq:547}],166:[function(t,e,r){\\\"use strict\\\";e.exports=a;var n=(a.canvas=document.createElement(\\\"canvas\\\")).getContext(\\\"2d\\\"),i=o([32,126]);function a(t,e){Array.isArray(t)&&(t=t.join(\\\", \\\"));var r,a={},s=16,l=.05;e&&(2===e.length&&\\\"number\\\"==typeof e[0]?r=o(e):Array.isArray(e)?r=e:(e.o?r=o(e.o):e.pairs&&(r=e.pairs),e.fontSize&&(s=e.fontSize),null!=e.threshold&&(l=e.threshold))),r||(r=i),n.font=s+\\\"px \\\"+t;for(var c=0;c<r.length;c++){var u=r[c],h=n.measureText(u[0]).width+n.measureText(u[1]).width,f=n.measureText(u).width;if(Math.abs(h-f)>s*l){var p=(f-h)/s;a[u]=1e3*p}}return a}function o(t){for(var e=[],r=t[0];r<=t[1];r++)for(var n=String.fromCharCode(r),i=t[0];i<t[1];i++){var a=n+String.fromCharCode(i);e.push(a)}return e}a.createPairs=o,a.ascii=i},{}],167:[function(t,e,r){(function(t){var r=!1;if(\\\"undefined\\\"!=typeof Float64Array){var n=new Float64Array(1),i=new Uint32Array(n.buffer);if(n[0]=1,r=!0,1072693248===i[1]){e.exports=function(t){return n[0]=t,[i[0],i[1]]},e.exports.pack=function(t,e){return i[0]=t,i[1]=e,n[0]},e.exports.lo=function(t){return n[0]=t,i[0]},e.exports.hi=function(t){return n[0]=t,i[1]}}else if(1072693248===i[0]){e.exports=function(t){return n[0]=t,[i[1],i[0]]},e.exports.pack=function(t,e){return i[1]=t,i[0]=e,n[0]},e.exports.lo=function(t){return n[0]=t,i[1]},e.exports.hi=function(t){return n[0]=t,i[0]}}else r=!1}if(!r){var a=new t(8);e.exports=function(t){return a.writeDoubleLE(t,0,!0),[a.readUInt32LE(0,!0),a.readUInt32LE(4,!0)]},e.exports.pack=function(t,e){return a.writeUInt32LE(t,0,!0),a.writeUInt32LE(e,4,!0),a.readDoubleLE(0,!0)},e.exports.lo=function(t){return a.writeDoubleLE(t,0,!0),a.readUInt32LE(0,!0)},e.exports.hi=function(t){return a.writeDoubleLE(t,0,!0),a.readUInt32LE(4,!0)}}e.exports.sign=function(t){return e.exports.hi(t)>>>31},e.exports.exponent=function(t){return(e.exports.hi(t)<<1>>>21)-1023},e.exports.fraction=function(t){var r=e.exports.lo(t),n=e.exports.hi(t),i=1048575&n;return 2146435072&n&&(i+=1<<20),[r,i]},e.exports.denormalized=function(t){return!(2146435072&e.exports.hi(t))}}).call(this,t(\\\"buffer\\\").Buffer)},{buffer:105}],168:[function(t,e,r){var n=t(\\\"abs-svg-path\\\"),i=t(\\\"normalize-svg-path\\\"),a={M:\\\"moveTo\\\",C:\\\"bezierCurveTo\\\"};e.exports=function(t,e){t.beginPath(),i(n(e)).forEach(function(e){var r=e[0],n=e.slice(1);t[a[r]].apply(t,n)}),t.closePath()}},{\\\"abs-svg-path\\\":60,\\\"normalize-svg-path\\\":452}],169:[function(t,e,r){e.exports=function(t){switch(t){case\\\"int8\\\":return Int8Array;case\\\"int16\\\":return Int16Array;case\\\"int32\\\":return Int32Array;case\\\"uint8\\\":return Uint8Array;case\\\"uint16\\\":return Uint16Array;case\\\"uint32\\\":return Uint32Array;case\\\"float32\\\":return Float32Array;case\\\"float64\\\":return Float64Array;case\\\"array\\\":return Array;case\\\"uint8_clamped\\\":return Uint8ClampedArray}}},{}],170:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){switch(\\\"undefined\\\"==typeof e&&(e=0),typeof t){case\\\"number\\\":if(t>0)return function(t,e){var r,n;for(r=new Array(t),n=0;n<t;++n)r[n]=e;return r}(0|t,e);break;case\\\"object\\\":if(\\\"number\\\"==typeof t.length)return function t(e,r,n){var i=0|e[n];if(i<=0)return[];var a,o=new Array(i);if(n===e.length-1)for(a=0;a<i;++a)o[a]=r;else for(a=0;a<i;++a)o[a]=t(e,r,n+1);return o}(t,e,0)}return[]}},{}],171:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){var r=t.length;if(\\\"number\\\"!=typeof e){e=0;for(var i=0;i<r;++i){var a=t[i];e=Math.max(e,a[0],a[1])}e=1+(0|e)}e|=0;for(var o=new Array(e),i=0;i<e;++i)o[i]=[];for(var i=0;i<r;++i){var a=t[i];o[a[0]].push(a[1]),o[a[1]].push(a[0])}for(var s=0;s<e;++s)n(o[s],function(t,e){return t-e});return o};var n=t(\\\"uniq\\\")},{uniq:547}],172:[function(t,e,r){var n=t(\\\"strongly-connected-components\\\");e.exports=function(t){var e,r=[],i=[],a=[],o={},s=[];function l(t){var r,n,u=!1;for(i.push(t),a[t]=!0,r=0;r<s[t].length;r++)(n=s[t][r])===e?(c(e,i),u=!0):a[n]||(u=l(n));if(u)!function t(e){a[e]=!1,o.hasOwnProperty(e)&&Object.keys(o[e]).forEach(function(r){delete o[e][r],a[r]&&t(r)})}(t);else for(r=0;r<s[t].length;r++){n=s[t][r];var h=o[n];h||(h={},o[n]=h),h[n]=!0}return i.pop(),u}function c(t,e){var n=[].concat(e).concat(t);r.push(n)}function u(e){!function(e){for(var r=0;r<t.length;r++)r<e&&(t[r]=[]),t[r]=t[r].filter(function(t){return t>=e})}(e);for(var r,i=n(t).components.filter(function(t){return t.length>1}),a=1/0,o=0;o<i.length;o++)for(var s=0;s<i[o].length;s++)i[o][s]<a&&(a=i[o][s],r=o);var l=i[r];return!!l&&{leastVertex:a,adjList:t.map(function(t,e){return-1===l.indexOf(e)?[]:t.filter(function(t){return-1!==l.indexOf(t)})})}}e=0;for(var h=t.length;e<h;){var f=u(e);if(e=f.leastVertex,s=f.adjList){for(var p=0;p<s.length;p++)for(var d=0;d<s[p].length;d++){var g=s[p][d];a[+g]=!1,o[g]={}}l(e),e+=1}else e=h}return r}},{\\\"strongly-connected-components\\\":530}],173:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../object/valid-value\\\");e.exports=function(){return n(this).length=0,this}},{\\\"../../object/valid-value\\\":205}],174:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"./is-implemented\\\")()?Array.from:t(\\\"./shim\\\")},{\\\"./is-implemented\\\":175,\\\"./shim\\\":176}],175:[function(t,e,r){\\\"use strict\\\";e.exports=function(){var t,e,r=Array.from;return\\\"function\\\"==typeof r&&(e=r(t=[\\\"raz\\\",\\\"dwa\\\"]),Boolean(e&&e!==t&&\\\"dwa\\\"===e[1]))}},{}],176:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"es6-symbol\\\").iterator,i=t(\\\"../../function/is-arguments\\\"),a=t(\\\"../../function/is-function\\\"),o=t(\\\"../../number/to-pos-integer\\\"),s=t(\\\"../../object/valid-callable\\\"),l=t(\\\"../../object/valid-value\\\"),c=t(\\\"../../object/is-value\\\"),u=t(\\\"../../string/is-string\\\"),h=Array.isArray,f=Function.prototype.call,p={configurable:!0,enumerable:!0,writable:!0,value:null},d=Object.defineProperty;e.exports=function(t){var e,r,g,v,m,y,x,b,_,w,k=arguments[1],T=arguments[2];if(t=Object(l(t)),c(k)&&s(k),this&&this!==Array&&a(this))e=this;else{if(!k){if(i(t))return 1!==(m=t.length)?Array.apply(null,t):((v=new Array(1))[0]=t[0],v);if(h(t)){for(v=new Array(m=t.length),r=0;r<m;++r)v[r]=t[r];return v}}v=[]}if(!h(t))if(void 0!==(_=t[n])){for(x=s(_).call(t),e&&(v=new e),b=x.next(),r=0;!b.done;)w=k?f.call(k,T,b.value,r):b.value,e?(p.value=w,d(v,r,p)):v[r]=w,b=x.next(),++r;m=r}else if(u(t)){for(m=t.length,e&&(v=new e),r=0,g=0;r<m;++r)w=t[r],r+1<m&&(y=w.charCodeAt(0))>=55296&&y<=56319&&(w+=t[++r]),w=k?f.call(k,T,w,g):w,e?(p.value=w,d(v,g,p)):v[g]=w,++g;m=g}if(void 0===m)for(m=o(t.length),e&&(v=new e(m)),r=0;r<m;++r)w=k?f.call(k,T,t[r],r):t[r],e?(p.value=w,d(v,r,p)):v[r]=w;return e&&(p.value=null,v.length=m),v}},{\\\"../../function/is-arguments\\\":177,\\\"../../function/is-function\\\":178,\\\"../../number/to-pos-integer\\\":184,\\\"../../object/is-value\\\":194,\\\"../../object/valid-callable\\\":203,\\\"../../object/valid-value\\\":205,\\\"../../string/is-string\\\":209,\\\"es6-symbol\\\":219}],177:[function(t,e,r){\\\"use strict\\\";var n=Object.prototype.toString,i=n.call(function(){return arguments}());e.exports=function(t){return n.call(t)===i}},{}],178:[function(t,e,r){\\\"use strict\\\";var n=Object.prototype.toString,i=n.call(t(\\\"./noop\\\"));e.exports=function(t){return\\\"function\\\"==typeof t&&n.call(t)===i}},{\\\"./noop\\\":179}],179:[function(t,e,r){\\\"use strict\\\";e.exports=function(){}},{}],180:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"./is-implemented\\\")()?Math.sign:t(\\\"./shim\\\")},{\\\"./is-implemented\\\":181,\\\"./shim\\\":182}],181:[function(t,e,r){\\\"use strict\\\";e.exports=function(){var t=Math.sign;return\\\"function\\\"==typeof t&&(1===t(10)&&-1===t(-20))}},{}],182:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){return t=Number(t),isNaN(t)||0===t?t:t>0?1:-1}},{}],183:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../math/sign\\\"),i=Math.abs,a=Math.floor;e.exports=function(t){return isNaN(t)?0:0!==(t=Number(t))&&isFinite(t)?n(t)*a(i(t)):t}},{\\\"../math/sign\\\":180}],184:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./to-integer\\\"),i=Math.max;e.exports=function(t){return i(0,n(t))}},{\\\"./to-integer\\\":183}],185:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./valid-callable\\\"),i=t(\\\"./valid-value\\\"),a=Function.prototype.bind,o=Function.prototype.call,s=Object.keys,l=Object.prototype.propertyIsEnumerable;e.exports=function(t,e){return function(r,c){var u,h=arguments[2],f=arguments[3];return r=Object(i(r)),n(c),u=s(r),f&&u.sort(\\\"function\\\"==typeof f?a.call(f,r):void 0),\\\"function\\\"!=typeof t&&(t=u[t]),o.call(t,u,function(t,n){return l.call(r,t)?o.call(c,h,r[t],t,r,n):e})}}},{\\\"./valid-callable\\\":203,\\\"./valid-value\\\":205}],186:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"./is-implemented\\\")()?Object.assign:t(\\\"./shim\\\")},{\\\"./is-implemented\\\":187,\\\"./shim\\\":188}],187:[function(t,e,r){\\\"use strict\\\";e.exports=function(){var t,e=Object.assign;return\\\"function\\\"==typeof e&&(e(t={foo:\\\"raz\\\"},{bar:\\\"dwa\\\"},{trzy:\\\"trzy\\\"}),t.foo+t.bar+t.trzy===\\\"razdwatrzy\\\")}},{}],188:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../keys\\\"),i=t(\\\"../valid-value\\\"),a=Math.max;e.exports=function(t,e){var r,o,s,l=a(arguments.length,2);for(t=Object(i(t)),s=function(n){try{t[n]=e[n]}catch(t){r||(r=t)}},o=1;o<l;++o)e=arguments[o],n(e).forEach(s);if(void 0!==r)throw r;return t}},{\\\"../keys\\\":195,\\\"../valid-value\\\":205}],189:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../array/from\\\"),i=t(\\\"./assign\\\"),a=t(\\\"./valid-value\\\");e.exports=function(t){var e=Object(a(t)),r=arguments[1],o=Object(arguments[2]);if(e!==t&&!r)return e;var s={};return r?n(r,function(e){(o.ensure||e in t)&&(s[e]=t[e])}):i(s,t),s}},{\\\"../array/from\\\":174,\\\"./assign\\\":186,\\\"./valid-value\\\":205}],190:[function(t,e,r){\\\"use strict\\\";var n,i,a,o,s=Object.create;t(\\\"./set-prototype-of/is-implemented\\\")()||(n=t(\\\"./set-prototype-of/shim\\\")),e.exports=n?1!==n.level?s:(i={},a={},o={configurable:!1,enumerable:!1,writable:!0,value:void 0},Object.getOwnPropertyNames(Object.prototype).forEach(function(t){a[t]=\\\"__proto__\\\"!==t?o:{configurable:!0,enumerable:!1,writable:!0,value:void 0}}),Object.defineProperties(i,a),Object.defineProperty(n,\\\"nullPolyfill\\\",{configurable:!1,enumerable:!1,writable:!1,value:i}),function(t,e){return s(null===t?i:t,e)}):s},{\\\"./set-prototype-of/is-implemented\\\":201,\\\"./set-prototype-of/shim\\\":202}],191:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"./_iterate\\\")(\\\"forEach\\\")},{\\\"./_iterate\\\":185}],192:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){return\\\"function\\\"==typeof t}},{}],193:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./is-value\\\"),i={function:!0,object:!0};e.exports=function(t){return n(t)&&i[typeof t]||!1}},{\\\"./is-value\\\":194}],194:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../function/noop\\\")();e.exports=function(t){return t!==n&&null!==t}},{\\\"../function/noop\\\":179}],195:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"./is-implemented\\\")()?Object.keys:t(\\\"./shim\\\")},{\\\"./is-implemented\\\":196,\\\"./shim\\\":197}],196:[function(t,e,r){\\\"use strict\\\";e.exports=function(){try{return Object.keys(\\\"primitive\\\"),!0}catch(t){return!1}}},{}],197:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../is-value\\\"),i=Object.keys;e.exports=function(t){return i(n(t)?Object(t):t)}},{\\\"../is-value\\\":194}],198:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./valid-callable\\\"),i=t(\\\"./for-each\\\"),a=Function.prototype.call;e.exports=function(t,e){var r={},o=arguments[2];return n(e),i(t,function(t,n,i,s){r[n]=a.call(e,o,t,n,i,s)}),r}},{\\\"./for-each\\\":191,\\\"./valid-callable\\\":203}],199:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./is-value\\\"),i=Array.prototype.forEach,a=Object.create;e.exports=function(t){var e=a(null);return i.call(arguments,function(t){n(t)&&function(t,e){var r;for(r in t)e[r]=t[r]}(Object(t),e)}),e}},{\\\"./is-value\\\":194}],200:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"./is-implemented\\\")()?Object.setPrototypeOf:t(\\\"./shim\\\")},{\\\"./is-implemented\\\":201,\\\"./shim\\\":202}],201:[function(t,e,r){\\\"use strict\\\";var n=Object.create,i=Object.getPrototypeOf,a={};e.exports=function(){var t=Object.setPrototypeOf,e=arguments[0]||n;return\\\"function\\\"==typeof t&&i(t(e(null),a))===a}},{}],202:[function(t,e,r){\\\"use strict\\\";var n,i,a,o,s=t(\\\"../is-object\\\"),l=t(\\\"../valid-value\\\"),c=Object.prototype.isPrototypeOf,u=Object.defineProperty,h={configurable:!0,enumerable:!1,writable:!0,value:void 0};n=function(t,e){if(l(t),null===e||s(e))return t;throw new TypeError(\\\"Prototype must be null or an object\\\")},e.exports=(i=function(){var t,e=Object.create(null),r={},n=Object.getOwnPropertyDescriptor(Object.prototype,\\\"__proto__\\\");if(n){try{(t=n.set).call(e,r)}catch(t){}if(Object.getPrototypeOf(e)===r)return{set:t,level:2}}return e.__proto__=r,Object.getPrototypeOf(e)===r?{level:2}:((e={}).__proto__=r,Object.getPrototypeOf(e)===r&&{level:1})}())?(2===i.level?i.set?(o=i.set,a=function(t,e){return o.call(n(t,e),e),t}):a=function(t,e){return n(t,e).__proto__=e,t}:a=function t(e,r){var i;return n(e,r),(i=c.call(t.nullPolyfill,e))&&delete t.nullPolyfill.__proto__,null===r&&(r=t.nullPolyfill),e.__proto__=r,i&&u(t.nullPolyfill,\\\"__proto__\\\",h),e},Object.defineProperty(a,\\\"level\\\",{configurable:!1,enumerable:!1,writable:!1,value:i.level})):null,t(\\\"../create\\\")},{\\\"../create\\\":190,\\\"../is-object\\\":193,\\\"../valid-value\\\":205}],203:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){if(\\\"function\\\"!=typeof t)throw new TypeError(t+\\\" is not a function\\\");return t}},{}],204:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./is-object\\\");e.exports=function(t){if(!n(t))throw new TypeError(t+\\\" is not an Object\\\");return t}},{\\\"./is-object\\\":193}],205:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./is-value\\\");e.exports=function(t){if(!n(t))throw new TypeError(\\\"Cannot use null or undefined\\\");return t}},{\\\"./is-value\\\":194}],206:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"./is-implemented\\\")()?String.prototype.contains:t(\\\"./shim\\\")},{\\\"./is-implemented\\\":207,\\\"./shim\\\":208}],207:[function(t,e,r){\\\"use strict\\\";var n=\\\"razdwatrzy\\\";e.exports=function(){return\\\"function\\\"==typeof n.contains&&(!0===n.contains(\\\"dwa\\\")&&!1===n.contains(\\\"foo\\\"))}},{}],208:[function(t,e,r){\\\"use strict\\\";var n=String.prototype.indexOf;e.exports=function(t){return n.call(this,t,arguments[1])>-1}},{}],209:[function(t,e,r){\\\"use strict\\\";var n=Object.prototype.toString,i=n.call(\\\"\\\");e.exports=function(t){return\\\"string\\\"==typeof t||t&&\\\"object\\\"==typeof t&&(t instanceof String||n.call(t)===i)||!1}},{}],210:[function(t,e,r){\\\"use strict\\\";var n=Object.create(null),i=Math.random;e.exports=function(){var t;do{t=i().toString(36).slice(2)}while(n[t]);return t}},{}],211:[function(t,e,r){\\\"use strict\\\";var n,i=t(\\\"es5-ext/object/set-prototype-of\\\"),a=t(\\\"es5-ext/string/#/contains\\\"),o=t(\\\"d\\\"),s=t(\\\"es6-symbol\\\"),l=t(\\\"./\\\"),c=Object.defineProperty;n=e.exports=function(t,e){if(!(this instanceof n))throw new TypeError(\\\"Constructor requires 'new'\\\");l.call(this,t),e=e?a.call(e,\\\"key+value\\\")?\\\"key+value\\\":a.call(e,\\\"key\\\")?\\\"key\\\":\\\"value\\\":\\\"value\\\",c(this,\\\"__kind__\\\",o(\\\"\\\",e))},i&&i(n,l),delete n.prototype.constructor,n.prototype=Object.create(l.prototype,{_resolve:o(function(t){return\\\"value\\\"===this.__kind__?this.__list__[t]:\\\"key+value\\\"===this.__kind__?[t,this.__list__[t]]:t})}),c(n.prototype,s.toStringTag,o(\\\"c\\\",\\\"Array Iterator\\\"))},{\\\"./\\\":214,d:151,\\\"es5-ext/object/set-prototype-of\\\":200,\\\"es5-ext/string/#/contains\\\":206,\\\"es6-symbol\\\":219}],212:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"es5-ext/function/is-arguments\\\"),i=t(\\\"es5-ext/object/valid-callable\\\"),a=t(\\\"es5-ext/string/is-string\\\"),o=t(\\\"./get\\\"),s=Array.isArray,l=Function.prototype.call,c=Array.prototype.some;e.exports=function(t,e){var r,u,h,f,p,d,g,v,m=arguments[2];if(s(t)||n(t)?r=\\\"array\\\":a(t)?r=\\\"string\\\":t=o(t),i(e),h=function(){f=!0},\\\"array\\\"!==r)if(\\\"string\\\"!==r)for(u=t.next();!u.done;){if(l.call(e,m,u.value,h),f)return;u=t.next()}else for(d=t.length,p=0;p<d&&(g=t[p],p+1<d&&(v=g.charCodeAt(0))>=55296&&v<=56319&&(g+=t[++p]),l.call(e,m,g,h),!f);++p);else c.call(t,function(t){return l.call(e,m,t,h),f})}},{\\\"./get\\\":213,\\\"es5-ext/function/is-arguments\\\":177,\\\"es5-ext/object/valid-callable\\\":203,\\\"es5-ext/string/is-string\\\":209}],213:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"es5-ext/function/is-arguments\\\"),i=t(\\\"es5-ext/string/is-string\\\"),a=t(\\\"./array\\\"),o=t(\\\"./string\\\"),s=t(\\\"./valid-iterable\\\"),l=t(\\\"es6-symbol\\\").iterator;e.exports=function(t){return\\\"function\\\"==typeof s(t)[l]?t[l]():n(t)?new a(t):i(t)?new o(t):new a(t)}},{\\\"./array\\\":211,\\\"./string\\\":216,\\\"./valid-iterable\\\":217,\\\"es5-ext/function/is-arguments\\\":177,\\\"es5-ext/string/is-string\\\":209,\\\"es6-symbol\\\":219}],214:[function(t,e,r){\\\"use strict\\\";var n,i=t(\\\"es5-ext/array/#/clear\\\"),a=t(\\\"es5-ext/object/assign\\\"),o=t(\\\"es5-ext/object/valid-callable\\\"),s=t(\\\"es5-ext/object/valid-value\\\"),l=t(\\\"d\\\"),c=t(\\\"d/auto-bind\\\"),u=t(\\\"es6-symbol\\\"),h=Object.defineProperty,f=Object.defineProperties;e.exports=n=function(t,e){if(!(this instanceof n))throw new TypeError(\\\"Constructor requires 'new'\\\");f(this,{__list__:l(\\\"w\\\",s(t)),__context__:l(\\\"w\\\",e),__nextIndex__:l(\\\"w\\\",0)}),e&&(o(e.on),e.on(\\\"_add\\\",this._onAdd),e.on(\\\"_delete\\\",this._onDelete),e.on(\\\"_clear\\\",this._onClear))},delete n.prototype.constructor,f(n.prototype,a({_next:l(function(){var t;if(this.__list__)return this.__redo__&&void 0!==(t=this.__redo__.shift())?t:this.__nextIndex__<this.__list__.length?this.__nextIndex__++:void this._unBind()}),next:l(function(){return this._createResult(this._next())}),_createResult:l(function(t){return void 0===t?{done:!0,value:void 0}:{done:!1,value:this._resolve(t)}}),_resolve:l(function(t){return this.__list__[t]}),_unBind:l(function(){this.__list__=null,delete this.__redo__,this.__context__&&(this.__context__.off(\\\"_add\\\",this._onAdd),this.__context__.off(\\\"_delete\\\",this._onDelete),this.__context__.off(\\\"_clear\\\",this._onClear),this.__context__=null)}),toString:l(function(){return\\\"[object \\\"+(this[u.toStringTag]||\\\"Object\\\")+\\\"]\\\"})},c({_onAdd:l(function(t){t>=this.__nextIndex__||(++this.__nextIndex__,this.__redo__?(this.__redo__.forEach(function(e,r){e>=t&&(this.__redo__[r]=++e)},this),this.__redo__.push(t)):h(this,\\\"__redo__\\\",l(\\\"c\\\",[t])))}),_onDelete:l(function(t){var e;t>=this.__nextIndex__||(--this.__nextIndex__,this.__redo__&&(-1!==(e=this.__redo__.indexOf(t))&&this.__redo__.splice(e,1),this.__redo__.forEach(function(e,r){e>t&&(this.__redo__[r]=--e)},this)))}),_onClear:l(function(){this.__redo__&&i.call(this.__redo__),this.__nextIndex__=0})}))),h(n.prototype,u.iterator,l(function(){return this}))},{d:151,\\\"d/auto-bind\\\":150,\\\"es5-ext/array/#/clear\\\":173,\\\"es5-ext/object/assign\\\":186,\\\"es5-ext/object/valid-callable\\\":203,\\\"es5-ext/object/valid-value\\\":205,\\\"es6-symbol\\\":219}],215:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"es5-ext/function/is-arguments\\\"),i=t(\\\"es5-ext/object/is-value\\\"),a=t(\\\"es5-ext/string/is-string\\\"),o=t(\\\"es6-symbol\\\").iterator,s=Array.isArray;e.exports=function(t){return!!i(t)&&(!!s(t)||(!!a(t)||(!!n(t)||\\\"function\\\"==typeof t[o])))}},{\\\"es5-ext/function/is-arguments\\\":177,\\\"es5-ext/object/is-value\\\":194,\\\"es5-ext/string/is-string\\\":209,\\\"es6-symbol\\\":219}],216:[function(t,e,r){\\\"use strict\\\";var n,i=t(\\\"es5-ext/object/set-prototype-of\\\"),a=t(\\\"d\\\"),o=t(\\\"es6-symbol\\\"),s=t(\\\"./\\\"),l=Object.defineProperty;n=e.exports=function(t){if(!(this instanceof n))throw new TypeError(\\\"Constructor requires 'new'\\\");t=String(t),s.call(this,t),l(this,\\\"__length__\\\",a(\\\"\\\",t.length))},i&&i(n,s),delete n.prototype.constructor,n.prototype=Object.create(s.prototype,{_next:a(function(){if(this.__list__)return this.__nextIndex__<this.__length__?this.__nextIndex__++:void this._unBind()}),_resolve:a(function(t){var e,r=this.__list__[t];return this.__nextIndex__===this.__length__?r:(e=r.charCodeAt(0))>=55296&&e<=56319?r+this.__list__[this.__nextIndex__++]:r})}),l(n.prototype,o.toStringTag,a(\\\"c\\\",\\\"String Iterator\\\"))},{\\\"./\\\":214,d:151,\\\"es5-ext/object/set-prototype-of\\\":200,\\\"es6-symbol\\\":219}],217:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./is-iterable\\\");e.exports=function(t){if(!n(t))throw new TypeError(t+\\\" is not iterable\\\");return t}},{\\\"./is-iterable\\\":215}],218:[function(t,e,r){(function(n,i){!function(t,n){\\\"object\\\"==typeof r&&\\\"undefined\\\"!=typeof e?e.exports=n():t.ES6Promise=n()}(this,function(){\\\"use strict\\\";function e(t){return\\\"function\\\"==typeof t}var r=Array.isArray?Array.isArray:function(t){return\\\"[object Array]\\\"===Object.prototype.toString.call(t)},a=0,o=void 0,s=void 0,l=function(t,e){g[a]=t,g[a+1]=e,2===(a+=2)&&(s?s(v):_())};var c=\\\"undefined\\\"!=typeof window?window:void 0,u=c||{},h=u.MutationObserver||u.WebKitMutationObserver,f=\\\"undefined\\\"==typeof self&&\\\"undefined\\\"!=typeof n&&\\\"[object process]\\\"==={}.toString.call(n),p=\\\"undefined\\\"!=typeof Uint8ClampedArray&&\\\"undefined\\\"!=typeof importScripts&&\\\"undefined\\\"!=typeof MessageChannel;function d(){var t=setTimeout;return function(){return t(v,1)}}var g=new Array(1e3);function v(){for(var t=0;t<a;t+=2){(0,g[t])(g[t+1]),g[t]=void 0,g[t+1]=void 0}a=0}var m,y,x,b,_=void 0;function w(t,e){var r=arguments,n=this,i=new this.constructor(A);void 0===i[T]&&V(i);var a,o=n._state;return o?(a=r[o-1],l(function(){return j(o,i,a,n._result)})):R(n,i,t,e),i}function k(t){if(t&&\\\"object\\\"==typeof t&&t.constructor===this)return t;var e=new this(A);return O(e,t),e}f?_=function(){return n.nextTick(v)}:h?(y=0,x=new h(v),b=document.createTextNode(\\\"\\\"),x.observe(b,{characterData:!0}),_=function(){b.data=y=++y%2}):p?((m=new MessageChannel).port1.onmessage=v,_=function(){return m.port2.postMessage(0)}):_=void 0===c&&\\\"function\\\"==typeof t?function(){try{var e=t(\\\"vertx\\\");return o=e.runOnLoop||e.runOnContext,function(){o(v)}}catch(t){return d()}}():d();var T=Math.random().toString(36).substring(16);function A(){}var M=void 0,S=1,E=2,C=new B;function L(t){try{return t.then}catch(t){return C.error=t,C}}function P(t,r,n){r.constructor===t.constructor&&n===w&&r.constructor.resolve===k?function(t,e){e._state===S?I(t,e._result):e._state===E?D(t,e._result):R(e,void 0,function(e){return O(t,e)},function(e){return D(t,e)})}(t,r):n===C?D(t,C.error):void 0===n?I(t,r):e(n)?function(t,e,r){l(function(t){var n=!1,i=function(t,e,r,n){try{t.call(e,r,n)}catch(t){return t}}(r,e,function(r){n||(n=!0,e!==r?O(t,r):I(t,r))},function(e){n||(n=!0,D(t,e))},t._label);!n&&i&&(n=!0,D(t,i))},t)}(t,r,n):I(t,r)}function O(t,e){var r;t===e?D(t,new TypeError(\\\"You cannot resolve a promise with itself\\\")):\\\"function\\\"==typeof(r=e)||\\\"object\\\"==typeof r&&null!==r?P(t,e,L(e)):I(t,e)}function z(t){t._onerror&&t._onerror(t._result),F(t)}function I(t,e){t._state===M&&(t._result=e,t._state=S,0!==t._subscribers.length&&l(F,t))}function D(t,e){t._state===M&&(t._state=E,t._result=e,l(z,t))}function R(t,e,r,n){var i=t._subscribers,a=i.length;t._onerror=null,i[a]=e,i[a+S]=r,i[a+E]=n,0===a&&t._state&&l(F,t)}function F(t){var e=t._subscribers,r=t._state;if(0!==e.length){for(var n=void 0,i=void 0,a=t._result,o=0;o<e.length;o+=3)n=e[o],i=e[o+r],n?j(r,n,i,a):i(a);t._subscribers.length=0}}function B(){this.error=null}var N=new B;function j(t,r,n,i){var a=e(n),o=void 0,s=void 0,l=void 0,c=void 0;if(a){if((o=function(t,e){try{return t(e)}catch(t){return N.error=t,N}}(n,i))===N?(c=!0,s=o.error,o=null):l=!0,r===o)return void D(r,new TypeError(\\\"A promises callback cannot return that same promise.\\\"))}else o=i,l=!0;r._state!==M||(a&&l?O(r,o):c?D(r,s):t===S?I(r,o):t===E&&D(r,o))}var U=0;function V(t){t[T]=U++,t._state=void 0,t._result=void 0,t._subscribers=[]}function q(t,e){this._instanceConstructor=t,this.promise=new t(A),this.promise[T]||V(this.promise),r(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?I(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&I(this.promise,this._result))):D(this.promise,new Error(\\\"Array Methods must be provided an Array\\\"))}function H(t){this[T]=U++,this._result=this._state=void 0,this._subscribers=[],A!==t&&(\\\"function\\\"!=typeof t&&function(){throw new TypeError(\\\"You must pass a resolver function as the first argument to the promise constructor\\\")}(),this instanceof H?function(t,e){try{e(function(e){O(t,e)},function(e){D(t,e)})}catch(e){D(t,e)}}(this,t):function(){throw new TypeError(\\\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\\\")}())}function G(){var t=void 0;if(\\\"undefined\\\"!=typeof i)t=i;else if(\\\"undefined\\\"!=typeof self)t=self;else try{t=Function(\\\"return this\\\")()}catch(t){throw new Error(\\\"polyfill failed because global object is unavailable in this environment\\\")}var e=t.Promise;if(e){var r=null;try{r=Object.prototype.toString.call(e.resolve())}catch(t){}if(\\\"[object Promise]\\\"===r&&!e.cast)return}t.Promise=H}return q.prototype._enumerate=function(){for(var t=this.length,e=this._input,r=0;this._state===M&&r<t;r++)this._eachEntry(e[r],r)},q.prototype._eachEntry=function(t,e){var r=this._instanceConstructor,n=r.resolve;if(n===k){var i=L(t);if(i===w&&t._state!==M)this._settledAt(t._state,e,t._result);else if(\\\"function\\\"!=typeof i)this._remaining--,this._result[e]=t;else if(r===H){var a=new r(A);P(a,t,i),this._willSettleAt(a,e)}else this._willSettleAt(new r(function(e){return e(t)}),e)}else this._willSettleAt(n(t),e)},q.prototype._settledAt=function(t,e,r){var n=this.promise;n._state===M&&(this._remaining--,t===E?D(n,r):this._result[e]=r),0===this._remaining&&I(n,this._result)},q.prototype._willSettleAt=function(t,e){var r=this;R(t,void 0,function(t){return r._settledAt(S,e,t)},function(t){return r._settledAt(E,e,t)})},H.all=function(t){return new q(this,t).promise},H.race=function(t){var e=this;return r(t)?new e(function(r,n){for(var i=t.length,a=0;a<i;a++)e.resolve(t[a]).then(r,n)}):new e(function(t,e){return e(new TypeError(\\\"You must pass an array to race.\\\"))})},H.resolve=k,H.reject=function(t){var e=new this(A);return D(e,t),e},H._setScheduler=function(t){s=t},H._setAsap=function(t){l=t},H._asap=l,H.prototype={constructor:H,then:w,catch:function(t){return this.then(null,t)}},G(),H.polyfill=G,H.Promise=H,H})}).call(this,t(\\\"_process\\\"),\\\"undefined\\\"!=typeof global?global:\\\"undefined\\\"!=typeof self?self:\\\"undefined\\\"!=typeof window?window:{})},{_process:482}],219:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"./is-implemented\\\")()?Symbol:t(\\\"./polyfill\\\")},{\\\"./is-implemented\\\":220,\\\"./polyfill\\\":222}],220:[function(t,e,r){\\\"use strict\\\";var n={object:!0,symbol:!0};e.exports=function(){var t;if(\\\"function\\\"!=typeof Symbol)return!1;t=Symbol(\\\"test symbol\\\");try{String(t)}catch(t){return!1}return!!n[typeof Symbol.iterator]&&(!!n[typeof Symbol.toPrimitive]&&!!n[typeof Symbol.toStringTag])}},{}],221:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){return!!t&&(\\\"symbol\\\"==typeof t||!!t.constructor&&(\\\"Symbol\\\"===t.constructor.name&&\\\"Symbol\\\"===t[t.constructor.toStringTag]))}},{}],222:[function(t,e,r){\\\"use strict\\\";var n,i,a,o,s=t(\\\"d\\\"),l=t(\\\"./validate-symbol\\\"),c=Object.create,u=Object.defineProperties,h=Object.defineProperty,f=Object.prototype,p=c(null);if(\\\"function\\\"==typeof Symbol){n=Symbol;try{String(n()),o=!0}catch(t){}}var d,g=(d=c(null),function(t){for(var e,r,n=0;d[t+(n||\\\"\\\")];)++n;return d[t+=n||\\\"\\\"]=!0,h(f,e=\\\"@@\\\"+t,s.gs(null,function(t){r||(r=!0,h(this,e,s(t)),r=!1)})),e});a=function(t){if(this instanceof a)throw new TypeError(\\\"Symbol is not a constructor\\\");return i(t)},e.exports=i=function t(e){var r;if(this instanceof t)throw new TypeError(\\\"Symbol is not a constructor\\\");return o?n(e):(r=c(a.prototype),e=void 0===e?\\\"\\\":String(e),u(r,{__description__:s(\\\"\\\",e),__name__:s(\\\"\\\",g(e))}))},u(i,{for:s(function(t){return p[t]?p[t]:p[t]=i(String(t))}),keyFor:s(function(t){var e;for(e in l(t),p)if(p[e]===t)return e}),hasInstance:s(\\\"\\\",n&&n.hasInstance||i(\\\"hasInstance\\\")),isConcatSpreadable:s(\\\"\\\",n&&n.isConcatSpreadable||i(\\\"isConcatSpreadable\\\")),iterator:s(\\\"\\\",n&&n.iterator||i(\\\"iterator\\\")),match:s(\\\"\\\",n&&n.match||i(\\\"match\\\")),replace:s(\\\"\\\",n&&n.replace||i(\\\"replace\\\")),search:s(\\\"\\\",n&&n.search||i(\\\"search\\\")),species:s(\\\"\\\",n&&n.species||i(\\\"species\\\")),split:s(\\\"\\\",n&&n.split||i(\\\"split\\\")),toPrimitive:s(\\\"\\\",n&&n.toPrimitive||i(\\\"toPrimitive\\\")),toStringTag:s(\\\"\\\",n&&n.toStringTag||i(\\\"toStringTag\\\")),unscopables:s(\\\"\\\",n&&n.unscopables||i(\\\"unscopables\\\"))}),u(a.prototype,{constructor:s(i),toString:s(\\\"\\\",function(){return this.__name__})}),u(i.prototype,{toString:s(function(){return\\\"Symbol (\\\"+l(this).__description__+\\\")\\\"}),valueOf:s(function(){return l(this)})}),h(i.prototype,i.toPrimitive,s(\\\"\\\",function(){var t=l(this);return\\\"symbol\\\"==typeof t?t:t.toString()})),h(i.prototype,i.toStringTag,s(\\\"c\\\",\\\"Symbol\\\")),h(a.prototype,i.toStringTag,s(\\\"c\\\",i.prototype[i.toStringTag])),h(a.prototype,i.toPrimitive,s(\\\"c\\\",i.prototype[i.toPrimitive]))},{\\\"./validate-symbol\\\":223,d:151}],223:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./is-symbol\\\");e.exports=function(t){if(!n(t))throw new TypeError(t+\\\" is not a symbol\\\");return t}},{\\\"./is-symbol\\\":221}],224:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r){var n=e||0,i=r||1;return[[t[12]+t[0],t[13]+t[1],t[14]+t[2],t[15]+t[3]],[t[12]-t[0],t[13]-t[1],t[14]-t[2],t[15]-t[3]],[t[12]+t[4],t[13]+t[5],t[14]+t[6],t[15]+t[7]],[t[12]-t[4],t[13]-t[5],t[14]-t[6],t[15]-t[7]],[n*t[12]+t[8],n*t[13]+t[9],n*t[14]+t[10],n*t[15]+t[11]],[i*t[12]-t[8],i*t[13]-t[9],i*t[14]-t[10],i*t[15]-t[11]]]}},{}],225:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"is-string-blank\\\");e.exports=function(t){var e=typeof t;if(\\\"string\\\"===e){var r=t;if(0===(t=+t)&&n(r))return!1}else if(\\\"number\\\"!==e)return!1;return t-t<1}},{\\\"is-string-blank\\\":423}],226:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r){switch(arguments.length){case 0:return new o([0],[0],0);case 1:if(\\\"number\\\"==typeof t){var n=l(t);return new o(n,n,0)}return new o(t,l(t.length),0);case 2:if(\\\"number\\\"==typeof e){var n=l(t.length);return new o(t,n,+e)}r=0;case 3:if(t.length!==e.length)throw new Error(\\\"state and velocity lengths must match\\\");return new o(t,e,r)}};var n=t(\\\"cubic-hermite\\\"),i=t(\\\"binary-search-bounds\\\");function a(t,e,r){return Math.min(e,Math.max(t,r))}function o(t,e,r){this.dimension=t.length,this.bounds=[new Array(this.dimension),new Array(this.dimension)];for(var n=0;n<this.dimension;++n)this.bounds[0][n]=-1/0,this.bounds[1][n]=1/0;this._state=t.slice().reverse(),this._velocity=e.slice().reverse(),this._time=[r],this._scratch=[t.slice(),t.slice(),t.slice(),t.slice(),t.slice()]}var s=o.prototype;function l(t){for(var e=new Array(t),r=0;r<t;++r)e[r]=0;return e}s.flush=function(t){var e=i.gt(this._time,t)-1;e<=0||(this._time.splice(0,e),this._state.splice(0,e*this.dimension),this._velocity.splice(0,e*this.dimension))},s.curve=function(t){var e=this._time,r=e.length,o=i.le(e,t),s=this._scratch[0],l=this._state,c=this._velocity,u=this.dimension,h=this.bounds;if(o<0)for(var f=u-1,p=0;p<u;++p,--f)s[p]=l[f];else if(o>=r-1){f=l.length-1;var d=t-e[r-1];for(p=0;p<u;++p,--f)s[p]=l[f]+d*c[f]}else{f=u*(o+1)-1;var g=e[o],v=e[o+1]-g||1,m=this._scratch[1],y=this._scratch[2],x=this._scratch[3],b=this._scratch[4],_=!0;for(p=0;p<u;++p,--f)m[p]=l[f],x[p]=c[f]*v,y[p]=l[f+u],b[p]=c[f+u]*v,_=_&&m[p]===y[p]&&x[p]===b[p]&&0===x[p];if(_)for(p=0;p<u;++p)s[p]=m[p];else n(m,x,y,b,(t-g)/v,s)}var w=h[0],k=h[1];for(p=0;p<u;++p)s[p]=a(w[p],k[p],s[p]);return s},s.dcurve=function(t){var e=this._time,r=e.length,a=i.le(e,t),o=this._scratch[0],s=this._state,l=this._velocity,c=this.dimension;if(a>=r-1)for(var u=s.length-1,h=(e[r-1],0);h<c;++h,--u)o[h]=l[u];else{u=c*(a+1)-1;var f=e[a],p=e[a+1]-f||1,d=this._scratch[1],g=this._scratch[2],v=this._scratch[3],m=this._scratch[4],y=!0;for(h=0;h<c;++h,--u)d[h]=s[u],v[h]=l[u]*p,g[h]=s[u+c],m[h]=l[u+c]*p,y=y&&d[h]===g[h]&&v[h]===m[h]&&0===v[h];if(y)for(h=0;h<c;++h)o[h]=0;else{n.derivative(d,v,g,m,(t-f)/p,o);for(h=0;h<c;++h)o[h]/=p}}return o},s.lastT=function(){var t=this._time;return t[t.length-1]},s.stable=function(){for(var t=this._velocity,e=t.length,r=this.dimension-1;r>=0;--r)if(t[--e])return!1;return!0},s.jump=function(t){var e=this.lastT(),r=this.dimension;if(!(t<e||arguments.length!==r+1)){var n=this._state,i=this._velocity,o=n.length-this.dimension,s=this.bounds,l=s[0],c=s[1];this._time.push(e,t);for(var u=0;u<2;++u)for(var h=0;h<r;++h)n.push(n[o++]),i.push(0);this._time.push(t);for(h=r;h>0;--h)n.push(a(l[h-1],c[h-1],arguments[h])),i.push(0)}},s.push=function(t){var e=this.lastT(),r=this.dimension;if(!(t<e||arguments.length!==r+1)){var n=this._state,i=this._velocity,o=n.length-this.dimension,s=t-e,l=this.bounds,c=l[0],u=l[1],h=s>1e-6?1/s:0;this._time.push(t);for(var f=r;f>0;--f){var p=a(c[f-1],u[f-1],arguments[f]);n.push(p),i.push((p-n[o++])*h)}}},s.set=function(t){var e=this.dimension;if(!(t<this.lastT()||arguments.length!==e+1)){var r=this._state,n=this._velocity,i=this.bounds,o=i[0],s=i[1];this._time.push(t);for(var l=e;l>0;--l)r.push(a(o[l-1],s[l-1],arguments[l])),n.push(0)}},s.move=function(t){var e=this.lastT(),r=this.dimension;if(!(t<=e||arguments.length!==r+1)){var n=this._state,i=this._velocity,o=n.length-this.dimension,s=this.bounds,l=s[0],c=s[1],u=t-e,h=u>1e-6?1/u:0;this._time.push(t);for(var f=r;f>0;--f){var p=arguments[f];n.push(a(l[f-1],c[f-1],n[o++]+p)),i.push(p*h)}}},s.idle=function(t){var e=this.lastT();if(!(t<e)){var r=this.dimension,n=this._state,i=this._velocity,o=n.length-r,s=this.bounds,l=s[0],c=s[1],u=t-e;this._time.push(t);for(var h=r-1;h>=0;--h)n.push(a(l[h],c[h],n[o]+u*i[o])),i.push(0),o+=1}}},{\\\"binary-search-bounds\\\":91,\\\"cubic-hermite\\\":145}],227:[function(t,e,r){var n=t(\\\"dtype\\\");e.exports=function(t,e,r){if(!t)throw new TypeError(\\\"must specify data as first parameter\\\");if(r=0|+(r||0),Array.isArray(t)&&t[0]&&\\\"number\\\"==typeof t[0][0]){var i,a,o,s,l=t[0].length,c=t.length*l;e&&\\\"string\\\"!=typeof e||(e=new(n(e||\\\"float32\\\"))(c+r));var u=e.length-r;if(c!==u)throw new Error(\\\"source length \\\"+c+\\\" (\\\"+l+\\\"x\\\"+t.length+\\\") does not match destination length \\\"+u);for(i=0,o=r;i<t.length;i++)for(a=0;a<l;a++)e[o++]=null===t[i][a]?NaN:t[i][a]}else if(e&&\\\"string\\\"!=typeof e)e.set(t,r);else{var h=n(e||\\\"float32\\\");if(Array.isArray(t)||\\\"array\\\"===e)for(e=new h(t.length+r),i=0,o=r,s=e.length;o<s;o++,i++)e[o]=null===t[i]?NaN:t[i];else 0===r?e=new h(t):(e=new h(t.length+r)).set(t,r)}return e}},{dtype:169}],228:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"css-font/stringify\\\"),i=[32,126];e.exports=function(t){var e=(t=t||{}).shape?t.shape:t.canvas?[t.canvas.width,t.canvas.height]:[512,512],r=t.canvas||document.createElement(\\\"canvas\\\"),a=t.font,o=\\\"number\\\"==typeof t.step?[t.step,t.step]:t.step||[32,32],s=t.chars||i;a&&\\\"string\\\"!=typeof a&&(a=n(a));if(Array.isArray(s)){if(2===s.length&&\\\"number\\\"==typeof s[0]&&\\\"number\\\"==typeof s[1]){for(var l=[],c=s[0],u=0;c<=s[1];c++)l[u++]=String.fromCharCode(c);s=l}}else s=String(s).split(\\\"\\\");e=e.slice(),r.width=e[0],r.height=e[1];var h=r.getContext(\\\"2d\\\");h.fillStyle=\\\"#000\\\",h.fillRect(0,0,r.width,r.height),h.font=a,h.textAlign=\\\"center\\\",h.textBaseline=\\\"middle\\\",h.fillStyle=\\\"#fff\\\";for(var f=o[0]/2,p=o[1]/2,c=0;c<s.length;c++)h.fillText(s[c],f,p),(f+=o[0])>e[0]-o[0]/2&&(f=o[0]/2,p+=o[1]);return r}},{\\\"css-font/stringify\\\":142}],229:[function(t,e,r){\\\"use strict\\\";function n(t,e){e||(e={}),(\\\"string\\\"==typeof t||Array.isArray(t))&&(e.family=t);var r=Array.isArray(e.family)?e.family.join(\\\", \\\"):e.family;if(!r)throw Error(\\\"`family` must be defined\\\");var s=e.size||e.fontSize||e.em||48,l=e.weight||e.fontWeight||\\\"\\\",c=(t=[e.style||e.fontStyle||\\\"\\\",l,s].join(\\\" \\\")+\\\"px \\\"+r,e.origin||\\\"top\\\");if(n.cache[r]&&s<=n.cache[r].em)return i(n.cache[r],c);var u=e.canvas||n.canvas,h=u.getContext(\\\"2d\\\"),f={upper:void 0!==e.upper?e.upper:\\\"H\\\",lower:void 0!==e.lower?e.lower:\\\"x\\\",descent:void 0!==e.descent?e.descent:\\\"p\\\",ascent:void 0!==e.ascent?e.ascent:\\\"h\\\",tittle:void 0!==e.tittle?e.tittle:\\\"i\\\",overshoot:void 0!==e.overshoot?e.overshoot:\\\"O\\\"},p=Math.ceil(1.5*s);u.height=p,u.width=.5*p,h.font=t;var d={top:0};h.clearRect(0,0,p,p),h.textBaseline=\\\"top\\\",h.fillStyle=\\\"black\\\",h.fillText(\\\"H\\\",0,0);var g=a(h.getImageData(0,0,p,p));h.clearRect(0,0,p,p),h.textBaseline=\\\"bottom\\\",h.fillText(\\\"H\\\",0,p);var v=a(h.getImageData(0,0,p,p));d.lineHeight=d.bottom=p-v+g,h.clearRect(0,0,p,p),h.textBaseline=\\\"alphabetic\\\",h.fillText(\\\"H\\\",0,p);var m=p-a(h.getImageData(0,0,p,p))-1+g;d.baseline=d.alphabetic=m,h.clearRect(0,0,p,p),h.textBaseline=\\\"middle\\\",h.fillText(\\\"H\\\",0,.5*p);var y=a(h.getImageData(0,0,p,p));d.median=d.middle=p-y-1+g-.5*p,h.clearRect(0,0,p,p),h.textBaseline=\\\"hanging\\\",h.fillText(\\\"H\\\",0,.5*p);var x=a(h.getImageData(0,0,p,p));d.hanging=p-x-1+g-.5*p,h.clearRect(0,0,p,p),h.textBaseline=\\\"ideographic\\\",h.fillText(\\\"H\\\",0,p);var b=a(h.getImageData(0,0,p,p));if(d.ideographic=p-b-1+g,f.upper&&(h.clearRect(0,0,p,p),h.textBaseline=\\\"top\\\",h.fillText(f.upper,0,0),d.upper=a(h.getImageData(0,0,p,p)),d.capHeight=d.baseline-d.upper),f.lower&&(h.clearRect(0,0,p,p),h.textBaseline=\\\"top\\\",h.fillText(f.lower,0,0),d.lower=a(h.getImageData(0,0,p,p)),d.xHeight=d.baseline-d.lower),f.tittle&&(h.clearRect(0,0,p,p),h.textBaseline=\\\"top\\\",h.fillText(f.tittle,0,0),d.tittle=a(h.getImageData(0,0,p,p))),f.ascent&&(h.clearRect(0,0,p,p),h.textBaseline=\\\"top\\\",h.fillText(f.ascent,0,0),d.ascent=a(h.getImageData(0,0,p,p))),f.descent&&(h.clearRect(0,0,p,p),h.textBaseline=\\\"top\\\",h.fillText(f.descent,0,0),d.descent=o(h.getImageData(0,0,p,p))),f.overshoot){h.clearRect(0,0,p,p),h.textBaseline=\\\"top\\\",h.fillText(f.overshoot,0,0);var _=o(h.getImageData(0,0,p,p));d.overshoot=_-m}for(var w in d)d[w]/=s;return d.em=s,n.cache[r]=d,i(d,c)}function i(t,e){var r={};for(var n in\\\"string\\\"==typeof e&&(e=t[e]),t)\\\"em\\\"!==n&&(r[n]=t[n]-e);return r}function a(t){for(var e=t.height,r=t.data,n=3;n<r.length;n+=4)if(0!==r[n])return Math.floor(.25*(n-3)/e)}function o(t){for(var e=t.height,r=t.data,n=r.length-1;n>0;n-=4)if(0!==r[n])return Math.floor(.25*(n-3)/e)}e.exports=n,n.canvas=document.createElement(\\\"canvas\\\"),n.cache={}},{}],230:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){return new c(t||d,null)};var n=0,i=1;function a(t,e,r,n,i,a){this._color=t,this.key=e,this.value=r,this.left=n,this.right=i,this._count=a}function o(t){return new a(t._color,t.key,t.value,t.left,t.right,t._count)}function s(t,e){return new a(t,e.key,e.value,e.left,e.right,e._count)}function l(t){t._count=1+(t.left?t.left._count:0)+(t.right?t.right._count:0)}function c(t,e){this._compare=t,this.root=e}var u=c.prototype;function h(t,e){this.tree=t,this._stack=e}Object.defineProperty(u,\\\"keys\\\",{get:function(){var t=[];return this.forEach(function(e,r){t.push(e)}),t}}),Object.defineProperty(u,\\\"values\\\",{get:function(){var t=[];return this.forEach(function(e,r){t.push(r)}),t}}),Object.defineProperty(u,\\\"length\\\",{get:function(){return this.root?this.root._count:0}}),u.insert=function(t,e){for(var r=this._compare,o=this.root,u=[],h=[];o;){var f=r(t,o.key);u.push(o),h.push(f),o=f<=0?o.left:o.right}u.push(new a(n,t,e,null,null,1));for(var p=u.length-2;p>=0;--p){o=u[p];h[p]<=0?u[p]=new a(o._color,o.key,o.value,u[p+1],o.right,o._count+1):u[p]=new a(o._color,o.key,o.value,o.left,u[p+1],o._count+1)}for(p=u.length-1;p>1;--p){var d=u[p-1];o=u[p];if(d._color===i||o._color===i)break;var g=u[p-2];if(g.left===d)if(d.left===o){if(!(v=g.right)||v._color!==n){if(g._color=n,g.left=d.right,d._color=i,d.right=g,u[p-2]=d,u[p-1]=o,l(g),l(d),p>=3)(m=u[p-3]).left===g?m.left=d:m.right=d;break}d._color=i,g.right=s(i,v),g._color=n,p-=1}else{if(!(v=g.right)||v._color!==n){if(d.right=o.left,g._color=n,g.left=o.right,o._color=i,o.left=d,o.right=g,u[p-2]=o,u[p-1]=d,l(g),l(d),l(o),p>=3)(m=u[p-3]).left===g?m.left=o:m.right=o;break}d._color=i,g.right=s(i,v),g._color=n,p-=1}else if(d.right===o){if(!(v=g.left)||v._color!==n){if(g._color=n,g.right=d.left,d._color=i,d.left=g,u[p-2]=d,u[p-1]=o,l(g),l(d),p>=3)(m=u[p-3]).right===g?m.right=d:m.left=d;break}d._color=i,g.left=s(i,v),g._color=n,p-=1}else{var v;if(!(v=g.left)||v._color!==n){var m;if(d.left=o.right,g._color=n,g.right=o.left,o._color=i,o.right=d,o.left=g,u[p-2]=o,u[p-1]=d,l(g),l(d),l(o),p>=3)(m=u[p-3]).right===g?m.right=o:m.left=o;break}d._color=i,g.left=s(i,v),g._color=n,p-=1}}return u[0]._color=i,new c(r,u[0])},u.forEach=function(t,e,r){if(this.root)switch(arguments.length){case 1:return function t(e,r){var n;if(r.left&&(n=t(e,r.left)))return n;return(n=e(r.key,r.value))||(r.right?t(e,r.right):void 0)}(t,this.root);case 2:return function t(e,r,n,i){if(r(e,i.key)<=0){var a;if(i.left&&(a=t(e,r,n,i.left)))return a;if(a=n(i.key,i.value))return a}if(i.right)return t(e,r,n,i.right)}(e,this._compare,t,this.root);case 3:if(this._compare(e,r)>=0)return;return function t(e,r,n,i,a){var o,s=n(e,a.key),l=n(r,a.key);if(s<=0){if(a.left&&(o=t(e,r,n,i,a.left)))return o;if(l>0&&(o=i(a.key,a.value)))return o}if(l>0&&a.right)return t(e,r,n,i,a.right)}(e,r,this._compare,t,this.root)}},Object.defineProperty(u,\\\"begin\\\",{get:function(){for(var t=[],e=this.root;e;)t.push(e),e=e.left;return new h(this,t)}}),Object.defineProperty(u,\\\"end\\\",{get:function(){for(var t=[],e=this.root;e;)t.push(e),e=e.right;return new h(this,t)}}),u.at=function(t){if(t<0)return new h(this,[]);for(var e=this.root,r=[];;){if(r.push(e),e.left){if(t<e.left._count){e=e.left;continue}t-=e.left._count}if(!t)return new h(this,r);if(t-=1,!e.right)break;if(t>=e.right._count)break;e=e.right}return new h(this,[])},u.ge=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a<=0&&(i=n.length),r=a<=0?r.left:r.right}return n.length=i,new h(this,n)},u.gt=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a<0&&(i=n.length),r=a<0?r.left:r.right}return n.length=i,new h(this,n)},u.lt=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a>0&&(i=n.length),r=a<=0?r.left:r.right}return n.length=i,new h(this,n)},u.le=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a>=0&&(i=n.length),r=a<0?r.left:r.right}return n.length=i,new h(this,n)},u.find=function(t){for(var e=this._compare,r=this.root,n=[];r;){var i=e(t,r.key);if(n.push(r),0===i)return new h(this,n);r=i<=0?r.left:r.right}return new h(this,[])},u.remove=function(t){var e=this.find(t);return e?e.remove():this},u.get=function(t){for(var e=this._compare,r=this.root;r;){var n=e(t,r.key);if(0===n)return r.value;r=n<=0?r.left:r.right}};var f=h.prototype;function p(t,e){t.key=e.key,t.value=e.value,t.left=e.left,t.right=e.right,t._color=e._color,t._count=e._count}function d(t,e){return t<e?-1:t>e?1:0}Object.defineProperty(f,\\\"valid\\\",{get:function(){return this._stack.length>0}}),Object.defineProperty(f,\\\"node\\\",{get:function(){return this._stack.length>0?this._stack[this._stack.length-1]:null},enumerable:!0}),f.clone=function(){return new h(this.tree,this._stack.slice())},f.remove=function(){var t=this._stack;if(0===t.length)return this.tree;var e=new Array(t.length),r=t[t.length-1];e[e.length-1]=new a(r._color,r.key,r.value,r.left,r.right,r._count);for(var u=t.length-2;u>=0;--u){(r=t[u]).left===t[u+1]?e[u]=new a(r._color,r.key,r.value,e[u+1],r.right,r._count):e[u]=new a(r._color,r.key,r.value,r.left,e[u+1],r._count)}if((r=e[e.length-1]).left&&r.right){var h=e.length;for(r=r.left;r.right;)e.push(r),r=r.right;var f=e[h-1];e.push(new a(r._color,f.key,f.value,r.left,r.right,r._count)),e[h-1].key=r.key,e[h-1].value=r.value;for(u=e.length-2;u>=h;--u)r=e[u],e[u]=new a(r._color,r.key,r.value,r.left,e[u+1],r._count);e[h-1].left=e[h]}if((r=e[e.length-1])._color===n){var d=e[e.length-2];d.left===r?d.left=null:d.right===r&&(d.right=null),e.pop();for(u=0;u<e.length;++u)e[u]._count--;return new c(this.tree._compare,e[0])}if(r.left||r.right){r.left?p(r,r.left):r.right&&p(r,r.right),r._color=i;for(u=0;u<e.length-1;++u)e[u]._count--;return new c(this.tree._compare,e[0])}if(1===e.length)return new c(this.tree._compare,null);for(u=0;u<e.length;++u)e[u]._count--;var g=e[e.length-2];return function(t){for(var e,r,a,c,u=t.length-1;u>=0;--u){if(e=t[u],0===u)return void(e._color=i);if((r=t[u-1]).left===e){if((a=r.right).right&&a.right._color===n)return c=(a=r.right=o(a)).right=o(a.right),r.right=a.left,a.left=r,a.right=c,a._color=r._color,e._color=i,r._color=i,c._color=i,l(r),l(a),u>1&&((h=t[u-2]).left===r?h.left=a:h.right=a),void(t[u-1]=a);if(a.left&&a.left._color===n)return c=(a=r.right=o(a)).left=o(a.left),r.right=c.left,a.left=c.right,c.left=r,c.right=a,c._color=r._color,r._color=i,a._color=i,e._color=i,l(r),l(a),l(c),u>1&&((h=t[u-2]).left===r?h.left=c:h.right=c),void(t[u-1]=c);if(a._color===i){if(r._color===n)return r._color=i,void(r.right=s(n,a));r.right=s(n,a);continue}a=o(a),r.right=a.left,a.left=r,a._color=r._color,r._color=n,l(r),l(a),u>1&&((h=t[u-2]).left===r?h.left=a:h.right=a),t[u-1]=a,t[u]=r,u+1<t.length?t[u+1]=e:t.push(e),u+=2}else{if((a=r.left).left&&a.left._color===n)return c=(a=r.left=o(a)).left=o(a.left),r.left=a.right,a.right=r,a.left=c,a._color=r._color,e._color=i,r._color=i,c._color=i,l(r),l(a),u>1&&((h=t[u-2]).right===r?h.right=a:h.left=a),void(t[u-1]=a);if(a.right&&a.right._color===n)return c=(a=r.left=o(a)).right=o(a.right),r.left=c.right,a.right=c.left,c.right=r,c.left=a,c._color=r._color,r._color=i,a._color=i,e._color=i,l(r),l(a),l(c),u>1&&((h=t[u-2]).right===r?h.right=c:h.left=c),void(t[u-1]=c);if(a._color===i){if(r._color===n)return r._color=i,void(r.left=s(n,a));r.left=s(n,a);continue}var h;a=o(a),r.left=a.right,a.right=r,a._color=r._color,r._color=n,l(r),l(a),u>1&&((h=t[u-2]).right===r?h.right=a:h.left=a),t[u-1]=a,t[u]=r,u+1<t.length?t[u+1]=e:t.push(e),u+=2}}}(e),g.left===r?g.left=null:g.right=null,new c(this.tree._compare,e[0])},Object.defineProperty(f,\\\"key\\\",{get:function(){if(this._stack.length>0)return this._stack[this._stack.length-1].key},enumerable:!0}),Object.defineProperty(f,\\\"value\\\",{get:function(){if(this._stack.length>0)return this._stack[this._stack.length-1].value},enumerable:!0}),Object.defineProperty(f,\\\"index\\\",{get:function(){var t=0,e=this._stack;if(0===e.length){var r=this.tree.root;return r?r._count:0}e[e.length-1].left&&(t=e[e.length-1].left._count);for(var n=e.length-2;n>=0;--n)e[n+1]===e[n].right&&(++t,e[n].left&&(t+=e[n].left._count));return t},enumerable:!0}),f.next=function(){var t=this._stack;if(0!==t.length){var e=t[t.length-1];if(e.right)for(e=e.right;e;)t.push(e),e=e.left;else for(t.pop();t.length>0&&t[t.length-1].right===e;)e=t[t.length-1],t.pop()}},Object.defineProperty(f,\\\"hasNext\\\",{get:function(){var t=this._stack;if(0===t.length)return!1;if(t[t.length-1].right)return!0;for(var e=t.length-1;e>0;--e)if(t[e-1].left===t[e])return!0;return!1}}),f.update=function(t){var e=this._stack;if(0===e.length)throw new Error(\\\"Can't update empty node!\\\");var r=new Array(e.length),n=e[e.length-1];r[r.length-1]=new a(n._color,n.key,t,n.left,n.right,n._count);for(var i=e.length-2;i>=0;--i)(n=e[i]).left===e[i+1]?r[i]=new a(n._color,n.key,n.value,r[i+1],n.right,n._count):r[i]=new a(n._color,n.key,n.value,n.left,r[i+1],n._count);return new c(this.tree._compare,r[0])},f.prev=function(){var t=this._stack;if(0!==t.length){var e=t[t.length-1];if(e.left)for(e=e.left;e;)t.push(e),e=e.right;else for(t.pop();t.length>0&&t[t.length-1].left===e;)e=t[t.length-1],t.pop()}},Object.defineProperty(f,\\\"hasPrev\\\",{get:function(){var t=this._stack;if(0===t.length)return!1;if(t[t.length-1].left)return!0;for(var e=t.length-1;e>0;--e)if(t[e-1].right===t[e])return!0;return!1}})},{}],231:[function(t,e,r){var n=[.9999999999998099,676.5203681218851,-1259.1392167224028,771.3234287776531,-176.6150291621406,12.507343278686905,-.13857109526572012,9984369578019572e-21,1.5056327351493116e-7],i=607/128,a=[.9999999999999971,57.15623566586292,-59.59796035547549,14.136097974741746,-.4919138160976202,3399464998481189e-20,4652362892704858e-20,-9837447530487956e-20,.0001580887032249125,-.00021026444172410488,.00021743961811521265,-.0001643181065367639,8441822398385275e-20,-26190838401581408e-21,36899182659531625e-22];function o(t){if(t<0)return Number(\\\"0/0\\\");for(var e=a[0],r=a.length-1;r>0;--r)e+=a[r]/(t+r);var n=t+i+.5;return.5*Math.log(2*Math.PI)+(t+.5)*Math.log(n)-n+Math.log(e)-Math.log(t)}e.exports=function t(e){if(e<.5)return Math.PI/(Math.sin(Math.PI*e)*t(1-e));if(e>100)return Math.exp(o(e));e-=1;for(var r=n[0],i=1;i<9;i++)r+=n[i]/(e+i);var a=e+7+.5;return Math.sqrt(2*Math.PI)*Math.pow(a,e+.5)*Math.exp(-a)*r},e.exports.log=o},{}],232:[function(t,e,r){e.exports=function(t,e){if(\\\"string\\\"!=typeof t)throw new TypeError(\\\"must specify type string\\\");if(e=e||{},\\\"undefined\\\"==typeof document&&!e.canvas)return null;var r=e.canvas||document.createElement(\\\"canvas\\\");\\\"number\\\"==typeof e.width&&(r.width=e.width);\\\"number\\\"==typeof e.height&&(r.height=e.height);var n,i=e;try{var a=[t];0===t.indexOf(\\\"webgl\\\")&&a.push(\\\"experimental-\\\"+t);for(var o=0;o<a.length;o++)if(n=r.getContext(a[o],i))return n}catch(t){n=null}return n||null}},{}],233:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){var r=new u(t);return r.update(e),r};var n=t(\\\"./lib/text.js\\\"),i=t(\\\"./lib/lines.js\\\"),a=t(\\\"./lib/background.js\\\"),o=t(\\\"./lib/cube.js\\\"),s=t(\\\"./lib/ticks.js\\\"),l=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);function c(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function u(t){this.gl=t,this.pixelRatio=1,this.bounds=[[-10,-10,-10],[10,10,10]],this.ticks=[[],[],[]],this.autoTicks=!0,this.tickSpacing=[1,1,1],this.tickEnable=[!0,!0,!0],this.tickFont=[\\\"sans-serif\\\",\\\"sans-serif\\\",\\\"sans-serif\\\"],this.tickSize=[12,12,12],this.tickAngle=[0,0,0],this.tickAlign=[\\\"auto\\\",\\\"auto\\\",\\\"auto\\\"],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[10,10,10],this.lastCubeProps={cubeEdges:[0,0,0],axis:[0,0,0]},this.labels=[\\\"x\\\",\\\"y\\\",\\\"z\\\"],this.labelEnable=[!0,!0,!0],this.labelFont=\\\"sans-serif\\\",this.labelSize=[20,20,20],this.labelAngle=[0,0,0],this.labelAlign=[\\\"auto\\\",\\\"auto\\\",\\\"auto\\\"],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[10,10,10],this.lineEnable=[!0,!0,!0],this.lineMirror=[!1,!1,!1],this.lineWidth=[1,1,1],this.lineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.lineTickEnable=[!0,!0,!0],this.lineTickMirror=[!1,!1,!1],this.lineTickLength=[0,0,0],this.lineTickWidth=[1,1,1],this.lineTickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.gridEnable=[!0,!0,!0],this.gridWidth=[1,1,1],this.gridColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroEnable=[!0,!0,!0],this.zeroLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroLineWidth=[2,2,2],this.backgroundEnable=[!1,!1,!1],this.backgroundColor=[[.8,.8,.8,.5],[.8,.8,.8,.5],[.8,.8,.8,.5]],this._firstInit=!0,this._text=null,this._lines=null,this._background=a(t)}var h=u.prototype;function f(){this.primalOffset=[0,0,0],this.primalMinor=[0,0,0],this.mirrorOffset=[0,0,0],this.mirrorMinor=[0,0,0]}h.update=function(t){function e(e,r,n){if(n in t){var i,a=t[n],o=this[n];(e?Array.isArray(a)&&Array.isArray(a[0]):Array.isArray(a))?this[n]=i=[r(a[0]),r(a[1]),r(a[2])]:this[n]=i=[r(a),r(a),r(a)];for(var s=0;s<3;++s)if(i[s]!==o[s])return!0}return!1}t=t||{};var r,a=e.bind(this,!1,Number),o=e.bind(this,!1,Boolean),l=e.bind(this,!1,String),c=e.bind(this,!0,function(t){if(Array.isArray(t)){if(3===t.length)return[+t[0],+t[1],+t[2],1];if(4===t.length)return[+t[0],+t[1],+t[2],+t[3]]}return[0,0,0,1]}),u=!1,h=!1;if(\\\"bounds\\\"in t)for(var f=t.bounds,p=0;p<2;++p)for(var d=0;d<3;++d)f[p][d]!==this.bounds[p][d]&&(h=!0),this.bounds[p][d]=f[p][d];if(\\\"ticks\\\"in t){r=t.ticks,u=!0,this.autoTicks=!1;for(p=0;p<3;++p)this.tickSpacing[p]=0}else a(\\\"tickSpacing\\\")&&(this.autoTicks=!0,h=!0);if(this._firstInit&&(\\\"ticks\\\"in t||\\\"tickSpacing\\\"in t||(this.autoTicks=!0),h=!0,u=!0,this._firstInit=!1),h&&this.autoTicks&&(r=s.create(this.bounds,this.tickSpacing),u=!0),u){for(p=0;p<3;++p)r[p].sort(function(t,e){return t.x-e.x});s.equal(r,this.ticks)?u=!1:this.ticks=r}o(\\\"tickEnable\\\"),l(\\\"tickFont\\\")&&(u=!0),a(\\\"tickSize\\\"),a(\\\"tickAngle\\\"),a(\\\"tickPad\\\"),c(\\\"tickColor\\\");var g=l(\\\"labels\\\");l(\\\"labelFont\\\")&&(g=!0),o(\\\"labelEnable\\\"),a(\\\"labelSize\\\"),a(\\\"labelPad\\\"),c(\\\"labelColor\\\"),o(\\\"lineEnable\\\"),o(\\\"lineMirror\\\"),a(\\\"lineWidth\\\"),c(\\\"lineColor\\\"),o(\\\"lineTickEnable\\\"),o(\\\"lineTickMirror\\\"),a(\\\"lineTickLength\\\"),a(\\\"lineTickWidth\\\"),c(\\\"lineTickColor\\\"),o(\\\"gridEnable\\\"),a(\\\"gridWidth\\\"),c(\\\"gridColor\\\"),o(\\\"zeroEnable\\\"),c(\\\"zeroLineColor\\\"),a(\\\"zeroLineWidth\\\"),o(\\\"backgroundEnable\\\"),c(\\\"backgroundColor\\\"),this._text?this._text&&(g||u)&&this._text.update(this.bounds,this.labels,this.labelFont,this.ticks,this.tickFont):this._text=n(this.gl,this.bounds,this.labels,this.labelFont,this.ticks,this.tickFont),this._lines&&u&&(this._lines.dispose(),this._lines=null),this._lines||(this._lines=i(this.gl,this.bounds,this.ticks))};var p=[new f,new f,new f];function d(t,e,r,n,i){for(var a=t.primalOffset,o=t.primalMinor,s=t.mirrorOffset,l=t.mirrorMinor,c=n[e],u=0;u<3;++u)if(e!==u){var h=a,f=s,p=o,d=l;c&1<<u&&(h=s,f=a,p=l,d=o),h[u]=r[0][u],f[u]=r[1][u],i[u]>0?(p[u]=-1,d[u]=0):(p[u]=0,d[u]=1)}}var g=[0,0,0],v={model:l,view:l,projection:l,_ortho:!1};h.isOpaque=function(){return!0},h.isTransparent=function(){return!1},h.drawTransparent=function(t){};var m=[0,0,0],y=[0,0,0],x=[0,0,0];h.draw=function(t){t=t||v;for(var e=this.gl,r=t.model||l,n=t.view||l,i=t.projection||l,a=this.bounds,s=t._ortho||!1,u=o(r,n,i,a,s),h=u.cubeEdges,f=u.axis,b=n[12],_=n[13],w=n[14],k=n[15],T=(s?2:1)*this.pixelRatio*(i[3]*b+i[7]*_+i[11]*w+i[15]*k)/e.drawingBufferHeight,A=0;A<3;++A)this.lastCubeProps.cubeEdges[A]=h[A],this.lastCubeProps.axis[A]=f[A];var M=p;for(A=0;A<3;++A)d(p[A],A,this.bounds,h,f);e=this.gl;var S,E=g;for(A=0;A<3;++A)this.backgroundEnable[A]?E[A]=f[A]:E[A]=0;this._background.draw(r,n,i,a,E,this.backgroundColor),this._lines.bind(r,n,i,this);for(A=0;A<3;++A){var C=[0,0,0];f[A]>0?C[A]=a[1][A]:C[A]=a[0][A];for(var L=0;L<2;++L){var P=(A+1+L)%3,O=(A+1+(1^L))%3;this.gridEnable[P]&&this._lines.drawGrid(P,O,this.bounds,C,this.gridColor[P],this.gridWidth[P]*this.pixelRatio)}for(L=0;L<2;++L){P=(A+1+L)%3,O=(A+1+(1^L))%3;this.zeroEnable[O]&&Math.min(a[0][O],a[1][O])<=0&&Math.max(a[0][O],a[1][O])>=0&&this._lines.drawZero(P,O,this.bounds,C,this.zeroLineColor[O],this.zeroLineWidth[O]*this.pixelRatio)}}for(A=0;A<3;++A){this.lineEnable[A]&&this._lines.drawAxisLine(A,this.bounds,M[A].primalOffset,this.lineColor[A],this.lineWidth[A]*this.pixelRatio),this.lineMirror[A]&&this._lines.drawAxisLine(A,this.bounds,M[A].mirrorOffset,this.lineColor[A],this.lineWidth[A]*this.pixelRatio);var z=c(m,M[A].primalMinor),I=c(y,M[A].mirrorMinor),D=this.lineTickLength;for(L=0;L<3;++L){var R=T/r[5*L];z[L]*=D[L]*R,I[L]*=D[L]*R}this.lineTickEnable[A]&&this._lines.drawAxisTicks(A,M[A].primalOffset,z,this.lineTickColor[A],this.lineTickWidth[A]*this.pixelRatio),this.lineTickMirror[A]&&this._lines.drawAxisTicks(A,M[A].mirrorOffset,I,this.lineTickColor[A],this.lineTickWidth[A]*this.pixelRatio)}this._lines.unbind(),this._text.bind(r,n,i,this.pixelRatio);var F,B;function N(t){(B=[0,0,0])[t]=1}function j(t,e,r){var n=(t+1)%3,i=(t+2)%3,a=e[n],o=e[i],s=r[n],l=r[i];a>0&&l>0?N(n):a>0&&l<0?N(n):a<0&&l>0?N(n):a<0&&l<0?N(n):o>0&&s>0?N(i):o>0&&s<0?N(i):o<0&&s>0?N(i):o<0&&s<0&&N(i)}for(A=0;A<3;++A){var U=M[A].primalMinor,V=M[A].mirrorMinor,q=c(x,M[A].primalOffset);for(L=0;L<3;++L)this.lineTickEnable[A]&&(q[L]+=T*U[L]*Math.max(this.lineTickLength[L],0)/r[5*L]);var H=[0,0,0];if(H[A]=1,this.tickEnable[A]){-3600===this.tickAngle[A]?(this.tickAngle[A]=0,this.tickAlign[A]=\\\"auto\\\"):this.tickAlign[A]=-1,F=1,\\\"auto\\\"===(S=[this.tickAlign[A],.5,F])[0]?S[0]=0:S[0]=parseInt(\\\"\\\"+S[0]),B=[0,0,0],j(A,U,V);for(L=0;L<3;++L)q[L]+=T*U[L]*this.tickPad[L]/r[5*L];this._text.drawTicks(A,this.tickSize[A],this.tickAngle[A],q,this.tickColor[A],H,B,S)}if(this.labelEnable[A]){F=0,B=[0,0,0],this.labels[A].length>4&&(N(A),F=1),\\\"auto\\\"===(S=[this.labelAlign[A],.5,F])[0]?S[0]=0:S[0]=parseInt(\\\"\\\"+S[0]);for(L=0;L<3;++L)q[L]+=T*U[L]*this.labelPad[L]/r[5*L];q[A]+=.5*(a[0][A]+a[1][A]),this._text.drawLabel(A,this.labelSize[A],this.labelAngle[A],q,this.labelColor[A],[0,0,0],B,S)}}this._text.unbind()},h.dispose=function(){this._text.dispose(),this._lines.dispose(),this._background.dispose(),this._lines=null,this._text=null,this._background=null,this.gl=null}},{\\\"./lib/background.js\\\":234,\\\"./lib/cube.js\\\":235,\\\"./lib/lines.js\\\":236,\\\"./lib/text.js\\\":238,\\\"./lib/ticks.js\\\":239}],234:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){for(var e=[],r=[],s=0,l=0;l<3;++l)for(var c=(l+1)%3,u=(l+2)%3,h=[0,0,0],f=[0,0,0],p=-1;p<=1;p+=2){r.push(s,s+2,s+1,s+1,s+2,s+3),h[l]=p,f[l]=p;for(var d=-1;d<=1;d+=2){h[c]=d;for(var g=-1;g<=1;g+=2)h[u]=g,e.push(h[0],h[1],h[2],f[0],f[1],f[2]),s+=1}var v=c;c=u,u=v}var m=n(t,new Float32Array(e)),y=n(t,new Uint16Array(r),t.ELEMENT_ARRAY_BUFFER),x=i(t,[{buffer:m,type:t.FLOAT,size:3,offset:0,stride:24},{buffer:m,type:t.FLOAT,size:3,offset:12,stride:24}],y),b=a(t);return b.attributes.position.location=0,b.attributes.normal.location=1,new o(t,m,x,b)};var n=t(\\\"gl-buffer\\\"),i=t(\\\"gl-vao\\\"),a=t(\\\"./shaders\\\").bg;function o(t,e,r,n){this.gl=t,this.buffer=e,this.vao=r,this.shader=n}var s=o.prototype;s.draw=function(t,e,r,n,i,a){for(var o=!1,s=0;s<3;++s)o=o||i[s];if(o){var l=this.gl;l.enable(l.POLYGON_OFFSET_FILL),l.polygonOffset(1,2),this.shader.bind(),this.shader.uniforms={model:t,view:e,projection:r,bounds:n,enable:i,colors:a},this.vao.bind(),this.vao.draw(this.gl.TRIANGLES,36),this.vao.unbind(),l.disable(l.POLYGON_OFFSET_FILL)}},s.dispose=function(){this.vao.dispose(),this.buffer.dispose(),this.shader.dispose()}},{\\\"./shaders\\\":237,\\\"gl-buffer\\\":241,\\\"gl-vao\\\":327}],235:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,a,p){i(s,e,t),i(s,r,s);for(var y=0,x=0;x<2;++x){u[2]=a[x][2];for(var b=0;b<2;++b){u[1]=a[b][1];for(var _=0;_<2;++_)u[0]=a[_][0],f(l[y],u,s),y+=1}}for(var w=-1,x=0;x<8;++x){for(var k=l[x][3],T=0;T<3;++T)c[x][T]=l[x][T]/k;p&&(c[x][2]*=-1),k<0&&(w<0?w=x:c[x][2]<c[w][2]&&(w=x))}if(w<0){w=0;for(var A=0;A<3;++A){for(var M=(A+2)%3,S=(A+1)%3,E=-1,C=-1,L=0;L<2;++L){var P=L<<A,O=P+(L<<M)+(1-L<<S),z=P+(1-L<<M)+(L<<S);o(c[P],c[O],c[z],h)<0||(L?E=1:C=1)}if(E<0||C<0)C>E&&(w|=1<<A);else{for(var L=0;L<2;++L){var P=L<<A,O=P+(L<<M)+(1-L<<S),z=P+(1-L<<M)+(L<<S),I=d([l[P],l[O],l[z],l[P+(1<<M)+(1<<S)]]);L?E=I:C=I}C>E&&(w|=1<<A)}}}for(var D=7^w,R=-1,x=0;x<8;++x)x!==w&&x!==D&&(R<0?R=x:c[R][1]>c[x][1]&&(R=x));for(var F=-1,x=0;x<3;++x){var B=R^1<<x;if(B!==w&&B!==D){F<0&&(F=B);var S=c[B];S[0]<c[F][0]&&(F=B)}}for(var N=-1,x=0;x<3;++x){var B=R^1<<x;if(B!==w&&B!==D&&B!==F){N<0&&(N=B);var S=c[B];S[0]>c[N][0]&&(N=B)}}var j=g;j[0]=j[1]=j[2]=0,j[n.log2(F^R)]=R&F,j[n.log2(R^N)]=R&N;var U=7^N;U===w||U===D?(U=7^F,j[n.log2(N^U)]=U&N):j[n.log2(F^U)]=U&F;for(var V=v,q=w,A=0;A<3;++A)V[A]=q&1<<A?-1:1;return m};var n=t(\\\"bit-twiddle\\\"),i=t(\\\"gl-mat4/multiply\\\"),a=t(\\\"split-polygon\\\"),o=t(\\\"robust-orientation\\\"),s=new Array(16),l=new Array(8),c=new Array(8),u=new Array(3),h=[0,0,0];function f(t,e,r){for(var n=0;n<4;++n){t[n]=r[12+n];for(var i=0;i<3;++i)t[n]+=e[i]*r[4*i+n]}}!function(){for(var t=0;t<8;++t)l[t]=[1,1,1,1],c[t]=[1,1,1]}();var p=[[0,0,1,0,0],[0,0,-1,1,0],[0,-1,0,1,0],[0,1,0,1,0],[-1,0,0,1,0],[1,0,0,1,0]];function d(t){for(var e=0;e<p.length;++e)if((t=a.positive(t,p[e])).length<3)return 0;var r=t[0],n=r[0]/r[3],i=r[1]/r[3],o=0;for(e=1;e+1<t.length;++e){var s=t[e],l=t[e+1],c=s[0]/s[3]-n,u=s[1]/s[3]-i,h=l[0]/l[3]-n,f=l[1]/l[3]-i;o+=Math.abs(c*f-u*h)}return o}var g=[1,1,1],v=[0,0,0],m={cubeEdges:g,axis:v}},{\\\"bit-twiddle\\\":92,\\\"gl-mat4/multiply\\\":267,\\\"robust-orientation\\\":510,\\\"split-polygon\\\":527}],236:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r){var o=[],s=[0,0,0],l=[0,0,0],c=[0,0,0],u=[0,0,0];o.push(0,0,1,0,1,1,0,0,-1,0,0,-1,0,1,1,0,1,-1);for(var h=0;h<3;++h){for(var f=o.length/3|0,d=0;d<r[h].length;++d){var g=+r[h][d].x;o.push(g,0,1,g,1,1,g,0,-1,g,0,-1,g,1,1,g,1,-1)}var v=o.length/3|0;s[h]=f,l[h]=v-f;for(var f=o.length/3|0,m=0;m<r[h].length;++m){var g=+r[h][m].x;o.push(g,0,1,g,1,1,g,0,-1,g,0,-1,g,1,1,g,1,-1)}var v=o.length/3|0;c[h]=f,u[h]=v-f}var y=n(t,new Float32Array(o)),x=i(t,[{buffer:y,type:t.FLOAT,size:3,stride:0,offset:0}]),b=a(t);return b.attributes.position.location=0,new p(t,y,x,b,l,s,u,c)};var n=t(\\\"gl-buffer\\\"),i=t(\\\"gl-vao\\\"),a=t(\\\"./shaders\\\").line,o=[0,0,0],s=[0,0,0],l=[0,0,0],c=[0,0,0],u=[1,1];function h(t){return t[0]=t[1]=t[2]=0,t}function f(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function p(t,e,r,n,i,a,o,s){this.gl=t,this.vertBuffer=e,this.vao=r,this.shader=n,this.tickCount=i,this.tickOffset=a,this.gridCount=o,this.gridOffset=s}var d=p.prototype;d.bind=function(t,e,r){this.shader.bind(),this.shader.uniforms.model=t,this.shader.uniforms.view=e,this.shader.uniforms.projection=r,u[0]=this.gl.drawingBufferWidth,u[1]=this.gl.drawingBufferHeight,this.shader.uniforms.screenShape=u,this.vao.bind()},d.unbind=function(){this.vao.unbind()},d.drawAxisLine=function(t,e,r,n,i){var a=h(s);this.shader.uniforms.majorAxis=s,a[t]=e[1][t]-e[0][t],this.shader.uniforms.minorAxis=a;var o,u=f(c,r);u[t]+=e[0][t],this.shader.uniforms.offset=u,this.shader.uniforms.lineWidth=i,this.shader.uniforms.color=n,(o=h(l))[(t+2)%3]=1,this.shader.uniforms.screenAxis=o,this.vao.draw(this.gl.TRIANGLES,6),(o=h(l))[(t+1)%3]=1,this.shader.uniforms.screenAxis=o,this.vao.draw(this.gl.TRIANGLES,6)},d.drawAxisTicks=function(t,e,r,n,i){if(this.tickCount[t]){var a=h(o);a[t]=1,this.shader.uniforms.majorAxis=a,this.shader.uniforms.offset=e,this.shader.uniforms.minorAxis=r,this.shader.uniforms.color=n,this.shader.uniforms.lineWidth=i;var s=h(l);s[t]=1,this.shader.uniforms.screenAxis=s,this.vao.draw(this.gl.TRIANGLES,this.tickCount[t],this.tickOffset[t])}},d.drawGrid=function(t,e,r,n,i,a){if(this.gridCount[t]){var u=h(s);u[e]=r[1][e]-r[0][e],this.shader.uniforms.minorAxis=u;var p=f(c,n);p[e]+=r[0][e],this.shader.uniforms.offset=p;var d=h(o);d[t]=1,this.shader.uniforms.majorAxis=d;var g=h(l);g[t]=1,this.shader.uniforms.screenAxis=g,this.shader.uniforms.lineWidth=a,this.shader.uniforms.color=i,this.vao.draw(this.gl.TRIANGLES,this.gridCount[t],this.gridOffset[t])}},d.drawZero=function(t,e,r,n,i,a){var o=h(s);this.shader.uniforms.majorAxis=o,o[t]=r[1][t]-r[0][t],this.shader.uniforms.minorAxis=o;var u=f(c,n);u[t]+=r[0][t],this.shader.uniforms.offset=u;var p=h(l);p[e]=1,this.shader.uniforms.screenAxis=p,this.shader.uniforms.lineWidth=a,this.shader.uniforms.color=i,this.vao.draw(this.gl.TRIANGLES,6)},d.dispose=function(){this.vao.dispose(),this.vertBuffer.dispose(),this.shader.dispose()}},{\\\"./shaders\\\":237,\\\"gl-buffer\\\":241,\\\"gl-vao\\\":327}],237:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"glslify\\\"),i=t(\\\"gl-shader\\\"),a=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 position;\\\\n\\\\nuniform mat4 model, view, projection;\\\\nuniform vec3 offset, majorAxis, minorAxis, screenAxis;\\\\nuniform float lineWidth;\\\\nuniform vec2 screenShape;\\\\n\\\\nvec3 project(vec3 p) {\\\\n  vec4 pp = projection * view * model * vec4(p, 1.0);\\\\n  return pp.xyz / max(pp.w, 0.0001);\\\\n}\\\\n\\\\nvoid main() {\\\\n  vec3 major = position.x * majorAxis;\\\\n  vec3 minor = position.y * minorAxis;\\\\n\\\\n  vec3 vPosition = major + minor + offset;\\\\n  vec3 pPosition = project(vPosition);\\\\n  vec3 offset = project(vPosition + screenAxis * position.z);\\\\n\\\\n  vec2 screen = normalize((offset - pPosition).xy * screenShape) / screenShape;\\\\n\\\\n  gl_Position = vec4(pPosition + vec3(0.5 * screen * lineWidth, 0), 1.0);\\\\n}\\\\n\\\"]),o=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nuniform vec4 color;\\\\nvoid main() {\\\\n  gl_FragColor = color;\\\\n}\\\"]);r.line=function(t){return i(t,a,o,null,[{name:\\\"position\\\",type:\\\"vec3\\\"}])};var s=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 position;\\\\n\\\\nuniform mat4 model, view, projection;\\\\nuniform vec3 offset, axis, alignDir, alignOpt;\\\\nuniform float scale, angle, pixelScale;\\\\nuniform vec2 resolution;\\\\n\\\\nvec3 project(vec3 p) {\\\\n  vec4 pp = projection * view * model * vec4(p, 1.0);\\\\n  return pp.xyz / max(pp.w, 0.0001);\\\\n}\\\\n\\\\nfloat computeViewAngle(vec3 a, vec3 b) {\\\\n  vec3 A = project(a);\\\\n  vec3 B = project(b);\\\\n\\\\n  return atan(\\\\n    (B.y - A.y) * resolution.y,\\\\n    (B.x - A.x) * resolution.x\\\\n  );\\\\n}\\\\n\\\\nconst float PI = 3.141592;\\\\nconst float TWO_PI = 2.0 * PI;\\\\nconst float HALF_PI = 0.5 * PI;\\\\nconst float ONE_AND_HALF_PI = 1.5 * PI;\\\\n\\\\nint option = int(floor(alignOpt.x + 0.001));\\\\nfloat hv_ratio =       alignOpt.y;\\\\nbool enableAlign =    (alignOpt.z != 0.0);\\\\n\\\\nfloat mod_angle(float a) {\\\\n  return mod(a, PI);\\\\n}\\\\n\\\\nfloat positive_angle(float a) {\\\\n  return mod_angle((a < 0.0) ?\\\\n    a + TWO_PI :\\\\n    a\\\\n  );\\\\n}\\\\n\\\\nfloat look_upwards(float a) {\\\\n  float b = positive_angle(a);\\\\n  return ((b > HALF_PI) && (b <= ONE_AND_HALF_PI)) ?\\\\n    b - PI :\\\\n    b;\\\\n}\\\\n\\\\nfloat look_horizontal_or_vertical(float a, float ratio) {\\\\n  // ratio controls the ratio between being horizontal to (vertical + horizontal)\\\\n  // if ratio is set to 0.5 then it is 50%, 50%.\\\\n  // when using a higher ratio e.g. 0.75 the result would\\\\n  // likely be more horizontal than vertical.\\\\n\\\\n  float b = positive_angle(a);\\\\n\\\\n  return\\\\n    (b < (      ratio) * HALF_PI) ? 0.0 :\\\\n    (b < (2.0 - ratio) * HALF_PI) ? -HALF_PI :\\\\n    (b < (2.0 + ratio) * HALF_PI) ? 0.0 :\\\\n    (b < (4.0 - ratio) * HALF_PI) ? HALF_PI :\\\\n                                    0.0;\\\\n}\\\\n\\\\nfloat roundTo(float a, float b) {\\\\n  return float(b * floor((a + 0.5 * b) / b));\\\\n}\\\\n\\\\nfloat look_round_n_directions(float a, int n) {\\\\n  float b = positive_angle(a);\\\\n  float div = TWO_PI / float(n);\\\\n  float c = roundTo(b, div);\\\\n  return look_upwards(c);\\\\n}\\\\n\\\\nfloat applyAlignOption(float rawAngle, float delta) {\\\\n  return\\\\n    (option >  2) ? look_round_n_directions(rawAngle + delta, option) :       // option 3-n: round to n directions\\\\n    (option == 2) ? look_horizontal_or_vertical(rawAngle + delta, hv_ratio) : // horizontal or vertical\\\\n    (option == 1) ? rawAngle + delta :       // use free angle, and flip to align with one direction of the axis\\\\n    (option == 0) ? look_upwards(rawAngle) : // use free angle, and stay upwards\\\\n    (option ==-1) ? 0.0 :                    // useful for backward compatibility, all texts remains horizontal\\\\n                    rawAngle;                // otherwise return back raw input angle\\\\n}\\\\n\\\\nbool isAxisTitle = (axis.x == 0.0) &&\\\\n                   (axis.y == 0.0) &&\\\\n                   (axis.z == 0.0);\\\\n\\\\nvoid main() {\\\\n  //Compute world offset\\\\n  float axisDistance = position.z;\\\\n  vec3 dataPosition = axisDistance * axis + offset;\\\\n\\\\n  float beta = angle; // i.e. user defined attributes for each tick\\\\n\\\\n  float axisAngle;\\\\n  float clipAngle;\\\\n  float flip;\\\\n\\\\n  if (enableAlign) {\\\\n    axisAngle = (isAxisTitle) ? HALF_PI :\\\\n                      computeViewAngle(dataPosition, dataPosition + axis);\\\\n    clipAngle = computeViewAngle(dataPosition, dataPosition + alignDir);\\\\n\\\\n    axisAngle += (sin(axisAngle) < 0.0) ? PI : 0.0;\\\\n    clipAngle += (sin(clipAngle) < 0.0) ? PI : 0.0;\\\\n\\\\n    flip = (dot(vec2(cos(axisAngle), sin(axisAngle)),\\\\n                vec2(sin(clipAngle),-cos(clipAngle))) > 0.0) ? 1.0 : 0.0;\\\\n\\\\n    beta += applyAlignOption(clipAngle, flip * PI);\\\\n  }\\\\n\\\\n  //Compute plane offset\\\\n  vec2 planeCoord = position.xy * pixelScale;\\\\n\\\\n  mat2 planeXform = scale * mat2(\\\\n     cos(beta), sin(beta),\\\\n    -sin(beta), cos(beta)\\\\n  );\\\\n\\\\n  vec2 viewOffset = 2.0 * planeXform * planeCoord / resolution;\\\\n\\\\n  //Compute clip position\\\\n  vec3 clipPosition = project(dataPosition);\\\\n\\\\n  //Apply text offset in clip coordinates\\\\n  clipPosition += vec3(viewOffset, 0.0);\\\\n\\\\n  //Done\\\\n  gl_Position = vec4(clipPosition, 1.0);\\\\n}\\\"]),l=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nuniform vec4 color;\\\\nvoid main() {\\\\n  gl_FragColor = color;\\\\n}\\\"]);r.text=function(t){return i(t,s,l,null,[{name:\\\"position\\\",type:\\\"vec3\\\"}])};var c=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 position;\\\\nattribute vec3 normal;\\\\n\\\\nuniform mat4 model, view, projection;\\\\nuniform vec3 enable;\\\\nuniform vec3 bounds[2];\\\\n\\\\nvarying vec3 colorChannel;\\\\n\\\\nvoid main() {\\\\n\\\\n  vec3 signAxis = sign(bounds[1] - bounds[0]);\\\\n\\\\n  vec3 realNormal = signAxis * normal;\\\\n\\\\n  if(dot(realNormal, enable) > 0.0) {\\\\n    vec3 minRange = min(bounds[0], bounds[1]);\\\\n    vec3 maxRange = max(bounds[0], bounds[1]);\\\\n    vec3 nPosition = mix(minRange, maxRange, 0.5 * (position + 1.0));\\\\n    gl_Position = projection * view * model * vec4(nPosition, 1.0);\\\\n  } else {\\\\n    gl_Position = vec4(0,0,0,0);\\\\n  }\\\\n\\\\n  colorChannel = abs(realNormal);\\\\n}\\\"]),u=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nuniform vec4 colors[3];\\\\n\\\\nvarying vec3 colorChannel;\\\\n\\\\nvoid main() {\\\\n  gl_FragColor = colorChannel.x * colors[0] +\\\\n                 colorChannel.y * colors[1] +\\\\n                 colorChannel.z * colors[2];\\\\n}\\\"]);r.bg=function(t){return i(t,c,u,null,[{name:\\\"position\\\",type:\\\"vec3\\\"},{name:\\\"normal\\\",type:\\\"vec3\\\"}])}},{\\\"gl-shader\\\":301,glslify:409}],238:[function(t,e,r){(function(r){\\\"use strict\\\";e.exports=function(t,e,r,a,s,l){var u=n(t),h=i(t,[{buffer:u,size:3}]),f=o(t);f.attributes.position.location=0;var p=new c(t,f,u,h);return p.update(e,r,a,s,l),p};var n=t(\\\"gl-buffer\\\"),i=t(\\\"gl-vao\\\"),a=t(\\\"vectorize-text\\\"),o=t(\\\"./shaders\\\").text,s=window||r.global||{},l=s.__TEXT_CACHE||{};s.__TEXT_CACHE={};function c(t,e,r,n){this.gl=t,this.shader=e,this.buffer=r,this.vao=n,this.tickOffset=this.tickCount=this.labelOffset=this.labelCount=null}var u=c.prototype,h=[0,0];u.bind=function(t,e,r,n){this.vao.bind(),this.shader.bind();var i=this.shader.uniforms;i.model=t,i.view=e,i.projection=r,i.pixelScale=n,h[0]=this.gl.drawingBufferWidth,h[1]=this.gl.drawingBufferHeight,this.shader.uniforms.resolution=h},u.unbind=function(){this.vao.unbind()},u.update=function(t,e,r,n,i){var o=[];function s(t,e,r,n,i,s){var c=l[r];c||(c=l[r]={});var u=c[e];u||(u=c[e]=function(t,e){try{return a(t,e)}catch(e){return console.warn('error vectorizing text:\\\"'+t+'\\\" error:',e),{cells:[],positions:[]}}}(e,{triangles:!0,font:r,textAlign:\\\"center\\\",textBaseline:\\\"middle\\\",lineSpacing:i,styletags:s}));for(var h=(n||12)/12,f=u.positions,p=u.cells,d=0,g=p.length;d<g;++d)for(var v=p[d],m=2;m>=0;--m){var y=f[v[m]];o.push(h*y[0],-h*y[1],t)}}for(var c=[0,0,0],u=[0,0,0],h=[0,0,0],f=[0,0,0],p={breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0},d=0;d<3;++d){h[d]=o.length/3|0,s(.5*(t[0][d]+t[1][d]),e[d],r[d],12,1.25,p),f[d]=(o.length/3|0)-h[d],c[d]=o.length/3|0;for(var g=0;g<n[d].length;++g)n[d][g].text&&s(n[d][g].x,n[d][g].text,n[d][g].font||i,n[d][g].fontSize||12,1.25,p);u[d]=(o.length/3|0)-c[d]}this.buffer.update(o),this.tickOffset=c,this.tickCount=u,this.labelOffset=h,this.labelCount=f},u.drawTicks=function(t,e,r,n,i,a,o,s){this.tickCount[t]&&(this.shader.uniforms.axis=a,this.shader.uniforms.color=i,this.shader.uniforms.angle=r,this.shader.uniforms.scale=e,this.shader.uniforms.offset=n,this.shader.uniforms.alignDir=o,this.shader.uniforms.alignOpt=s,this.vao.draw(this.gl.TRIANGLES,this.tickCount[t],this.tickOffset[t]))},u.drawLabel=function(t,e,r,n,i,a,o,s){this.labelCount[t]&&(this.shader.uniforms.axis=a,this.shader.uniforms.color=i,this.shader.uniforms.angle=r,this.shader.uniforms.scale=e,this.shader.uniforms.offset=n,this.shader.uniforms.alignDir=o,this.shader.uniforms.alignOpt=s,this.vao.draw(this.gl.TRIANGLES,this.labelCount[t],this.labelOffset[t]))},u.dispose=function(){this.shader.dispose(),this.vao.dispose(),this.buffer.dispose()}}).call(this,t(\\\"_process\\\"))},{\\\"./shaders\\\":237,_process:482,\\\"gl-buffer\\\":241,\\\"gl-vao\\\":327,\\\"vectorize-text\\\":550}],239:[function(t,e,r){\\\"use strict\\\";function n(t,e){var r=t+\\\"\\\",n=r.indexOf(\\\".\\\"),i=0;n>=0&&(i=r.length-n-1);var a=Math.pow(10,i),o=Math.round(t*e*a),s=o+\\\"\\\";if(s.indexOf(\\\"e\\\")>=0)return s;var l=o/a,c=o%a;o<0?(l=0|-Math.ceil(l),c=0|-c):(l=0|Math.floor(l),c|=0);var u=\\\"\\\"+l;if(o<0&&(u=\\\"-\\\"+u),i){for(var h=\\\"\\\"+c;h.length<i;)h=\\\"0\\\"+h;return u+\\\".\\\"+h}return u}r.create=function(t,e){for(var r=[],i=0;i<3;++i){for(var a=[],o=(t[0][i],t[1][i],0);o*e[i]<=t[1][i];++o)a.push({x:o*e[i],text:n(e[i],o)});for(var o=-1;o*e[i]>=t[0][i];--o)a.push({x:o*e[i],text:n(e[i],o)});r.push(a)}return r},r.equal=function(t,e){for(var r=0;r<3;++r){if(t[r].length!==e[r].length)return!1;for(var n=0;n<t[r].length;++n){var i=t[r][n],a=e[r][n];if(i.x!==a.x||i.text!==a.text||i.font!==a.font||i.fontColor!==a.fontColor||i.fontSize!==a.fontSize||i.dx!==a.dx||i.dy!==a.dy)return!1}}return!0}},{}],240:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,l,h){var f=e.model||c,p=e.view||c,m=e.projection||c,y=e._ortho||!1,x=t.bounds,b=(h=h||a(f,p,m,x,y)).axis;o(u,p,f),o(u,m,u);for(var _=g,w=0;w<3;++w)_[w].lo=1/0,_[w].hi=-1/0,_[w].pixelsPerDataUnit=1/0;var k=n(s(u,u));s(u,u);for(var T=0;T<3;++T){var A=(T+1)%3,M=(T+2)%3,S=v;t:for(var w=0;w<2;++w){var E=[];if(b[T]<0!=!!w){S[T]=x[w][T];for(var C=0;C<2;++C){S[A]=x[C^w][A];for(var L=0;L<2;++L)S[M]=x[L^C^w][M],E.push(S.slice())}for(var P=y?5:4,C=P;C===P;++C){if(0===E.length)continue t;E=i.positive(E,k[C])}for(var C=0;C<E.length;++C)for(var M=E[C],O=d(v,u,M,r,l),L=0;L<3;++L)_[L].lo=Math.min(_[L].lo,M[L]),_[L].hi=Math.max(_[L].hi,M[L]),L!==T&&(_[L].pixelsPerDataUnit=Math.min(_[L].pixelsPerDataUnit,Math.abs(O[L])))}}}return _};var n=t(\\\"extract-frustum-planes\\\"),i=t(\\\"split-polygon\\\"),a=t(\\\"./lib/cube.js\\\"),o=t(\\\"gl-mat4/multiply\\\"),s=t(\\\"gl-mat4/transpose\\\"),l=t(\\\"gl-vec4/transformMat4\\\"),c=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),u=new Float32Array(16);function h(t,e,r){this.lo=t,this.hi=e,this.pixelsPerDataUnit=r}var f=[0,0,0,1],p=[0,0,0,1];function d(t,e,r,n,i){for(var a=0;a<3;++a){for(var o=f,s=p,c=0;c<3;++c)s[c]=o[c]=r[c];s[3]=o[3]=1,s[a]+=1,l(s,s,e),s[3]<0&&(t[a]=1/0),o[a]-=1,l(o,o,e),o[3]<0&&(t[a]=1/0);var u=(o[0]/o[3]-s[0]/s[3])*n,h=(o[1]/o[3]-s[1]/s[3])*i;t[a]=.25*Math.sqrt(u*u+h*h)}return t}var g=[new h(1/0,-1/0,1/0),new h(1/0,-1/0,1/0),new h(1/0,-1/0,1/0)],v=[0,0,0]},{\\\"./lib/cube.js\\\":235,\\\"extract-frustum-planes\\\":224,\\\"gl-mat4/multiply\\\":267,\\\"gl-mat4/transpose\\\":276,\\\"gl-vec4/transformMat4\\\":398,\\\"split-polygon\\\":527}],241:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"typedarray-pool\\\"),i=t(\\\"ndarray-ops\\\"),a=t(\\\"ndarray\\\"),o=[\\\"uint8\\\",\\\"uint8_clamped\\\",\\\"uint16\\\",\\\"uint32\\\",\\\"int8\\\",\\\"int16\\\",\\\"int32\\\",\\\"float32\\\"];function s(t,e,r,n,i){this.gl=t,this.type=e,this.handle=r,this.length=n,this.usage=i}var l=s.prototype;function c(t,e,r,n,i,a){var o=i.length*i.BYTES_PER_ELEMENT;if(a<0)return t.bufferData(e,i,n),o;if(o+a>r)throw new Error(\\\"gl-buffer: If resizing buffer, must not specify offset\\\");return t.bufferSubData(e,a,i),r}function u(t,e){for(var r=n.malloc(t.length,e),i=t.length,a=0;a<i;++a)r[a]=t[a];return r}l.bind=function(){this.gl.bindBuffer(this.type,this.handle)},l.unbind=function(){this.gl.bindBuffer(this.type,null)},l.dispose=function(){this.gl.deleteBuffer(this.handle)},l.update=function(t,e){if(\\\"number\\\"!=typeof e&&(e=-1),this.bind(),\\\"object\\\"==typeof t&&\\\"undefined\\\"!=typeof t.shape){var r=t.dtype;if(o.indexOf(r)<0&&(r=\\\"float32\\\"),this.type===this.gl.ELEMENT_ARRAY_BUFFER)r=gl.getExtension(\\\"OES_element_index_uint\\\")&&\\\"uint16\\\"!==r?\\\"uint32\\\":\\\"uint16\\\";if(r===t.dtype&&function(t,e){for(var r=1,n=e.length-1;n>=0;--n){if(e[n]!==r)return!1;r*=t[n]}return!0}(t.shape,t.stride))0===t.offset&&t.data.length===t.shape[0]?this.length=c(this.gl,this.type,this.length,this.usage,t.data,e):this.length=c(this.gl,this.type,this.length,this.usage,t.data.subarray(t.offset,t.shape[0]),e);else{var s=n.malloc(t.size,r),l=a(s,t.shape);i.assign(l,t),this.length=c(this.gl,this.type,this.length,this.usage,e<0?s:s.subarray(0,t.size),e),n.free(s)}}else if(Array.isArray(t)){var h;h=this.type===this.gl.ELEMENT_ARRAY_BUFFER?u(t,\\\"uint16\\\"):u(t,\\\"float32\\\"),this.length=c(this.gl,this.type,this.length,this.usage,e<0?h:h.subarray(0,t.length),e),n.free(h)}else if(\\\"object\\\"==typeof t&&\\\"number\\\"==typeof t.length)this.length=c(this.gl,this.type,this.length,this.usage,t,e);else{if(\\\"number\\\"!=typeof t&&void 0!==t)throw new Error(\\\"gl-buffer: Invalid data type\\\");if(e>=0)throw new Error(\\\"gl-buffer: Cannot specify offset when resizing buffer\\\");(t|=0)<=0&&(t=1),this.gl.bufferData(this.type,0|t,this.usage),this.length=t}},e.exports=function(t,e,r,n){if(r=r||t.ARRAY_BUFFER,n=n||t.DYNAMIC_DRAW,r!==t.ARRAY_BUFFER&&r!==t.ELEMENT_ARRAY_BUFFER)throw new Error(\\\"gl-buffer: Invalid type for webgl buffer, must be either gl.ARRAY_BUFFER or gl.ELEMENT_ARRAY_BUFFER\\\");if(n!==t.DYNAMIC_DRAW&&n!==t.STATIC_DRAW&&n!==t.STREAM_DRAW)throw new Error(\\\"gl-buffer: Invalid usage for buffer, must be either gl.DYNAMIC_DRAW, gl.STATIC_DRAW or gl.STREAM_DRAW\\\");var i=t.createBuffer(),a=new s(t,r,i,0,n);return a.update(e),a}},{ndarray:450,\\\"ndarray-ops\\\":444,\\\"typedarray-pool\\\":545}],242:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"gl-vec3\\\"),i=function(t,e){for(var r=0;r<t.length;r++)if(t[r]>=e)return r-1;return r},a=n.create(),o=n.create(),s=function(t,e,r){return t<e?e:t>r?r:t},l=function(t,e,r,l){var c=t[0],u=t[1],h=t[2],f=r[0].length,p=r[1].length,d=r[2].length,g=i(r[0],c),v=i(r[1],u),m=i(r[2],h),y=g+1,x=v+1,b=m+1;if(l&&(g=s(g,0,f-1),y=s(y,0,f-1),v=s(v,0,p-1),x=s(x,0,p-1),m=s(m,0,d-1),b=s(b,0,d-1)),g<0||v<0||m<0||y>=f||x>=p||b>=d)return n.create();var _=(c-r[0][g])/(r[0][y]-r[0][g]),w=(u-r[1][v])/(r[1][x]-r[1][v]),k=(h-r[2][m])/(r[2][b]-r[2][m]);(_<0||_>1||isNaN(_))&&(_=0),(w<0||w>1||isNaN(w))&&(w=0),(k<0||k>1||isNaN(k))&&(k=0);var T=m*f*p,A=b*f*p,M=v*f,S=x*f,E=g,C=y,L=e[M+T+E],P=e[M+T+C],O=e[S+T+E],z=e[S+T+C],I=e[M+A+E],D=e[M+A+C],R=e[S+A+E],F=e[S+A+C],B=n.create();return n.lerp(B,L,P,_),n.lerp(a,O,z,_),n.lerp(B,B,a,w),n.lerp(a,I,D,_),n.lerp(o,R,F,_),n.lerp(a,a,o,w),n.lerp(B,B,a,k),B};e.exports=function(t,e){var r;r=t.positions?t.positions:function(t){for(var e=t[0],r=t[1],n=t[2],i=[],a=0;a<n.length;a++)for(var o=0;o<r.length;o++)for(var s=0;s<e.length;s++)i.push([n[a],r[o],e[s]]);return i}(t.meshgrid);var i=t.meshgrid,a=t.vectors,o={positions:[],vertexIntensity:[],vertexIntensityBounds:t.vertexIntensityBounds,vertexNormals:[],vectors:[],cells:[],coneOffset:t.coneOffset,colormap:t.colormap};if(0===t.positions.length)return e&&(e[0]=[0,0,0],e[1]=[0,0,0]),o;for(var s=0,c=1/0,u=-1/0,h=1/0,f=-1/0,p=1/0,d=-1/0,g=null,v=null,m=[],y=1/0,x=0;x<r.length;x++){var b,_=r[x];c=Math.min(_[0],c),u=Math.max(_[0],u),h=Math.min(_[1],h),f=Math.max(_[1],f),p=Math.min(_[2],p),d=Math.max(_[2],d),b=i?l(_,a,i,!0):a[x],n.length(b)>s&&(s=n.length(b)),x&&(y=Math.min(y,2*n.distance(g,_)/(n.length(v)+n.length(b)))),g=_,v=b,m.push(b)}var w=[c,h,p],k=[u,f,d];e&&(e[0]=w,e[1]=k),0===s&&(s=1);var T=1/s;isFinite(y)&&!isNaN(y)||(y=1),o.vectorScale=y;var A=function(t,e,r){var i=n.create();return void 0!==t&&n.set(i,t,e,r),i}(0,1,0),M=t.coneSize||.5;t.absoluteConeSize&&(M=t.absoluteConeSize*T),o.coneScale=M;x=0;for(var S=0;x<r.length;x++)for(var E=(_=r[x])[0],C=_[1],L=_[2],P=m[x],O=n.length(P)*T,z=0;z<8;z++){o.positions.push([E,C,L,S++]),o.positions.push([E,C,L,S++]),o.positions.push([E,C,L,S++]),o.positions.push([E,C,L,S++]),o.positions.push([E,C,L,S++]),o.positions.push([E,C,L,S++]),o.vectors.push(P),o.vectors.push(P),o.vectors.push(P),o.vectors.push(P),o.vectors.push(P),o.vectors.push(P),o.vertexIntensity.push(O,O,O),o.vertexIntensity.push(O,O,O),o.vertexNormals.push(A,A,A),o.vertexNormals.push(A,A,A);var I=o.positions.length;o.cells.push([I-6,I-5,I-4],[I-3,I-2,I-1])}return o},e.exports.createConeMesh=t(\\\"./lib/conemesh\\\")},{\\\"./lib/conemesh\\\":243,\\\"gl-vec3\\\":346}],243:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"gl-shader\\\"),i=t(\\\"gl-buffer\\\"),a=t(\\\"gl-vao\\\"),o=t(\\\"gl-texture2d\\\"),s=t(\\\"normals\\\"),l=t(\\\"gl-mat4/multiply\\\"),c=t(\\\"gl-mat4/invert\\\"),u=t(\\\"ndarray\\\"),h=t(\\\"colormap\\\"),f=t(\\\"simplicial-complex-contour\\\"),p=t(\\\"typedarray-pool\\\"),d=t(\\\"./shaders\\\"),g=d.meshShader,v=d.pickShader,m=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function y(t,e,r,n,i,a,o,s,l,c,u,h,f,p,d,g,v,y,x,b,_,w,k,T){this.gl=t,this.pixelRatio=1,this.cells=[],this.positions=[],this.intensity=[],this.texture=e,this.dirty=!0,this.triShader=r,this.pickShader=n,this.trianglePositions=i,this.triangleVectors=a,this.triangleColors=s,this.triangleNormals=c,this.triangleUVs=l,this.triangleIds=o,this.triangleVAO=u,this.triangleCount=0,this.lineWidth=1,this.edgePositions=h,this.edgeColors=p,this.edgeUVs=d,this.edgeIds=f,this.edgeVAO=g,this.edgeCount=0,this.pointPositions=v,this.pointColors=x,this.pointUVs=b,this.pointSizes=_,this.pointIds=y,this.pointVAO=w,this.pointCount=0,this.contourLineWidth=1,this.contourPositions=k,this.contourVAO=T,this.contourCount=0,this.contourColor=[0,0,0],this.contourEnable=!0,this.pickId=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition=[1e5,1e5,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.opacity=1,this.coneScale=2,this.vectorScale=1,this.coneOffset=.25,this._model=m,this._view=m,this._projection=m,this._resolution=[1,1]}var x=y.prototype;function b(t){var e=n(t,v.vertex,v.fragment,null,v.attributes);return e.attributes.position.location=0,e.attributes.id.location=1,e.attributes.vector.location=5,e}x.isOpaque=function(){return this.opacity>=1},x.isTransparent=function(){return this.opacity<1},x.pickSlots=1,x.setPickBase=function(t){this.pickId=t},x.highlight=function(t){if(t&&this.contourEnable){for(var e=f(this.cells,this.intensity,t.intensity),r=e.cells,n=e.vertexIds,i=e.vertexWeights,a=r.length,o=p.mallocFloat32(6*a),s=0,l=0;l<a;++l)for(var c=r[l],u=0;u<2;++u){var h=c[0];2===c.length&&(h=c[u]);for(var d=n[h][0],g=n[h][1],v=i[h],m=1-v,y=this.positions[d],x=this.positions[g],b=0;b<3;++b)o[s++]=v*y[b]+m*x[b]}this.contourCount=s/3|0,this.contourPositions.update(o.subarray(0,s)),p.free(o)}else this.contourCount=0},x.update=function(t){t=t||{};var e=this.gl;this.dirty=!0,\\\"contourEnable\\\"in t&&(this.contourEnable=t.contourEnable),\\\"contourColor\\\"in t&&(this.contourColor=t.contourColor),\\\"lineWidth\\\"in t&&(this.lineWidth=t.lineWidth),\\\"lightPosition\\\"in t&&(this.lightPosition=t.lightPosition),\\\"opacity\\\"in t&&(this.opacity=t.opacity),\\\"ambient\\\"in t&&(this.ambientLight=t.ambient),\\\"diffuse\\\"in t&&(this.diffuseLight=t.diffuse),\\\"specular\\\"in t&&(this.specularLight=t.specular),\\\"roughness\\\"in t&&(this.roughness=t.roughness),\\\"fresnel\\\"in t&&(this.fresnel=t.fresnel),void 0!==t.vectorScale&&(this.vectorScale=t.vectorScale),void 0!==t.coneScale&&(this.coneScale=t.coneScale),void 0!==t.coneOffset&&(this.coneOffset=t.coneOffset),t.texture?(this.texture.dispose(),this.texture=o(e,t.texture)):t.colormap&&(this.texture.shape=[256,256],this.texture.minFilter=e.LINEAR_MIPMAP_LINEAR,this.texture.magFilter=e.LINEAR,this.texture.setPixels(function(t){for(var e=h({colormap:t,nshades:256,format:\\\"rgba\\\"}),r=new Uint8Array(1024),n=0;n<256;++n){for(var i=e[n],a=0;a<3;++a)r[4*n+a]=i[a];r[4*n+3]=255*i[3]}return u(r,[256,256,4],[4,0,1])}(t.colormap)),this.texture.generateMipmap());var r=t.cells,n=t.positions,i=t.vectors;if(n&&r&&i){var a=[],l=[],c=[],f=[],p=[],d=[],g=[],v=[],m=[],y=[],x=[],b=[],_=[],w=[],k=[];this.cells=r,this.positions=n;var T=t.vertexNormals,A=t.cellNormals,M=void 0===t.vertexNormalsEpsilon?1e-6:t.vertexNormalsEpsilon,S=void 0===t.faceNormalsEpsilon?1e-6:t.faceNormalsEpsilon;t.useFacetNormals&&!A&&(A=s.faceNormals(r,n,S)),A||T||(T=s.vertexNormals(r,n,M));var E=t.vertexColors,C=t.cellColors,L=t.meshColor||[1,1,1,1],P=t.vertexUVs,O=t.vertexIntensity,z=t.cellUVs,I=t.cellIntensity,D=1/0,R=-1/0;if(!P&&!z)if(O)if(t.vertexIntensityBounds)D=+t.vertexIntensityBounds[0],R=+t.vertexIntensityBounds[1];else for(var F=0;F<O.length;++F){var B=O[F];D=Math.min(D,B),R=Math.max(R,B)}else if(I)for(F=0;F<I.length;++F){B=I[F];D=Math.min(D,B),R=Math.max(R,B)}else for(F=0;F<n.length;++F){B=n[F][2];D=Math.min(D,B),R=Math.max(R,B)}this.intensity=O||(I?function(t,e,r){for(var n=new Array(e),i=0;i<e;++i)n[i]=0;var a=t.length;for(i=0;i<a;++i)for(var o=t[i],s=0;s<o.length;++s)n[o[s]]=r[i];return n}(r,n.length,I):function(t){for(var e=t.length,r=new Array(e),n=0;n<e;++n)r[n]=t[n][2];return r}(n));var N=t.pointSizes,j=t.pointSize||1;this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(F=0;F<n.length;++F)for(var U=n[F],V=0;V<3;++V)!isNaN(U[V])&&isFinite(U[V])&&(this.bounds[0][V]=Math.min(this.bounds[0][V],U[V]),this.bounds[1][V]=Math.max(this.bounds[1][V],U[V]));var q=0,H=0,G=0;t:for(F=0;F<r.length;++F){var Y=r[F];switch(Y.length){case 1:for(U=n[X=Y[0]],V=0;V<3;++V)if(isNaN(U[V])||!isFinite(U[V]))continue t;x.push(U[0],U[1],U[2],U[3]),3===(Z=E?E[X]:C?C[F]:L).length?b.push(Z[0],Z[1],Z[2],1):b.push(Z[0],Z[1],Z[2],Z[3]),J=P?P[X]:O?[(O[X]-D)/(R-D),0]:z?z[F]:I?[(I[F]-D)/(R-D),0]:[(U[2]-D)/(R-D),0],_.push(J[0],J[1]),N?w.push(N[X]):w.push(j),k.push(F),G+=1;break;case 2:for(V=0;V<2;++V){U=n[X=Y[V]];for(var W=0;W<3;++W)if(isNaN(U[W])||!isFinite(U[W]))continue t}for(V=0;V<2;++V){U=n[X=Y[V]];g.push(U[0],U[1],U[2]),3===(Z=E?E[X]:C?C[F]:L).length?v.push(Z[0],Z[1],Z[2],1):v.push(Z[0],Z[1],Z[2],Z[3]),J=P?P[X]:O?[(O[X]-D)/(R-D),0]:z?z[F]:I?[(I[F]-D)/(R-D),0]:[(U[2]-D)/(R-D),0],m.push(J[0],J[1]),y.push(F)}H+=1;break;case 3:for(V=0;V<3;++V)for(U=n[X=Y[V]],W=0;W<3;++W)if(isNaN(U[W])||!isFinite(U[W]))continue t;for(V=0;V<3;++V){var X;U=n[X=Y[2-V]];a.push(U[0],U[1],U[2],U[3]);var Z,J,K,$=i[X];l.push($[0],$[1],$[2]),3===(Z=E?E[X]:C?C[F]:L).length?c.push(Z[0],Z[1],Z[2],1):c.push(Z[0],Z[1],Z[2],Z[3]),J=P?P[X]:O?[(O[X]-D)/(R-D),0]:z?z[F]:I?[(I[F]-D)/(R-D),0]:[(U[2]-D)/(R-D),0],p.push(J[0],J[1]),K=T?T[X]:A[F],f.push(K[0],K[1],K[2]),d.push(F)}q+=1}}this.pointCount=G,this.edgeCount=H,this.triangleCount=q,this.pointPositions.update(x),this.pointColors.update(b),this.pointUVs.update(_),this.pointSizes.update(w),this.pointIds.update(new Uint32Array(k)),this.edgePositions.update(g),this.edgeColors.update(v),this.edgeUVs.update(m),this.edgeIds.update(new Uint32Array(y)),this.trianglePositions.update(a),this.triangleVectors.update(l),this.triangleColors.update(c),this.triangleUVs.update(p),this.triangleNormals.update(f),this.triangleIds.update(new Uint32Array(d))}},x.drawTransparent=x.draw=function(t){t=t||{};for(var e=this.gl,r=t.model||m,n=t.view||m,i=t.projection||m,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);var s={model:r,view:n,projection:i,inverseModel:m.slice(),clipBounds:a,kambient:this.ambientLight,kdiffuse:this.diffuseLight,kspecular:this.specularLight,roughness:this.roughness,fresnel:this.fresnel,eyePosition:[0,0,0],lightPosition:[0,0,0],opacity:this.opacity,vectorScale:this.vectorScale,coneScale:this.coneScale,coneOffset:this.coneOffset,contourColor:this.contourColor,texture:0};s.inverseModel=c(s.inverseModel,s.model),e.disable(e.CULL_FACE),this.texture.bind(0);var u=new Array(16);l(u,s.view,s.model),l(u,s.projection,u),c(u,u);for(o=0;o<3;++o)s.eyePosition[o]=u[12+o]/u[15];var h=u[15];for(o=0;o<3;++o)h+=this.lightPosition[o]*u[4*o+3];for(o=0;o<3;++o){for(var f=u[12+o],p=0;p<3;++p)f+=u[4*p+o]*this.lightPosition[p];s.lightPosition[o]=f/h}if(this.triangleCount>0){var d=this.triShader;d.bind(),d.uniforms=s,this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()}},x.drawPick=function(t){t=t||{};for(var e=this.gl,r=t.model||m,n=t.view||m,i=t.projection||m,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);this._model=[].slice.call(r),this._view=[].slice.call(n),this._projection=[].slice.call(i),this._resolution=[e.drawingBufferWidth,e.drawingBufferHeight];var s={model:r,view:n,projection:i,clipBounds:a,vectorScale:this.vectorScale,coneScale:this.coneScale,coneOffset:this.coneOffset,pickId:this.pickId/255},l=this.pickShader;l.bind(),l.uniforms=s,this.triangleCount>0&&(this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()),this.edgeCount>0&&(this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind())},x.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=t.value[0]+256*t.value[1]+65536*t.value[2],r=this.cells[e],n=this.positions[r[1]].slice(0,3);return{index:Math.floor(r[1]/48),position:n,dataCoordinate:n}},x.dispose=function(){this.texture.dispose(),this.triShader.dispose(),this.pickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleVectors.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleNormals.dispose(),this.triangleIds.dispose(),this.edgeVAO.dispose(),this.edgePositions.dispose(),this.edgeColors.dispose(),this.edgeUVs.dispose(),this.edgeIds.dispose(),this.pointVAO.dispose(),this.pointPositions.dispose(),this.pointColors.dispose(),this.pointUVs.dispose(),this.pointSizes.dispose(),this.pointIds.dispose(),this.contourVAO.dispose(),this.contourPositions.dispose()},e.exports=function(t,e){1===arguments.length&&(t=(e=t).gl);var r=e.triShader||function(t){var e=n(t,g.vertex,g.fragment,null,g.attributes);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e.attributes.vector.location=5,e}(t),s=b(t),l=o(t,u(new Uint8Array([255,255,255,255]),[1,1,4]));l.generateMipmap(),l.minFilter=t.LINEAR_MIPMAP_LINEAR,l.magFilter=t.LINEAR;var c=i(t),h=i(t),f=i(t),p=i(t),d=i(t),v=i(t),m=a(t,[{buffer:c,type:t.FLOAT,size:4},{buffer:v,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:f,type:t.FLOAT,size:4},{buffer:p,type:t.FLOAT,size:2},{buffer:d,type:t.FLOAT,size:3},{buffer:h,type:t.FLOAT,size:3}]),x=i(t),_=i(t),w=i(t),k=i(t),T=a(t,[{buffer:x,type:t.FLOAT,size:3},{buffer:k,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:_,type:t.FLOAT,size:4},{buffer:w,type:t.FLOAT,size:2}]),A=i(t),M=i(t),S=i(t),E=i(t),C=i(t),L=a(t,[{buffer:A,type:t.FLOAT,size:3},{buffer:C,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:M,type:t.FLOAT,size:4},{buffer:S,type:t.FLOAT,size:2},{buffer:E,type:t.FLOAT,size:1}]),P=i(t),O=new y(t,l,r,s,c,h,v,f,p,d,m,x,k,_,w,T,A,C,M,S,E,L,P,a(t,[{buffer:P,type:t.FLOAT,size:3}]));return O.update(e),O}},{\\\"./shaders\\\":244,colormap:126,\\\"gl-buffer\\\":241,\\\"gl-mat4/invert\\\":265,\\\"gl-mat4/multiply\\\":267,\\\"gl-shader\\\":301,\\\"gl-texture2d\\\":322,\\\"gl-vao\\\":327,ndarray:450,normals:453,\\\"simplicial-complex-contour\\\":518,\\\"typedarray-pool\\\":545}],244:[function(t,e,r){var n=t(\\\"glslify\\\"),i=n([\\\"precision highp float;\\\\n\\\\nprecision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nvec3 getOrthogonalVector(vec3 v) {\\\\n  // Return up-vector for only-z vector.\\\\n  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\\\\n  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.\\\\n  // Assign z = 0, x = -b, y = a:\\\\n  // a*-b + b*a + c*0 = -ba + ba + 0 = 0\\\\n  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\\\\n    return normalize(vec3(-v.y, v.x, 0.0));\\\\n  } else {\\\\n    return normalize(vec3(0.0, v.z, -v.y));\\\\n  }\\\\n}\\\\n\\\\n// Calculate the cone vertex and normal at the given index.\\\\n//\\\\n// The returned vertex is for a cone with its top at origin and height of 1.0,\\\\n// pointing in the direction of the vector attribute.\\\\n//\\\\n// Each cone is made up of a top vertex, a center base vertex and base perimeter vertices.\\\\n// These vertices are used to make up the triangles of the cone by the following:\\\\n//   segment + 0 top vertex\\\\n//   segment + 1 perimeter vertex a+1\\\\n//   segment + 2 perimeter vertex a\\\\n//   segment + 3 center base vertex\\\\n//   segment + 4 perimeter vertex a\\\\n//   segment + 5 perimeter vertex a+1\\\\n// Where segment is the number of the radial segment * 6 and a is the angle at that radial segment.\\\\n// To go from index to segment, floor(index / 6)\\\\n// To go from segment to angle, 2*pi * (segment/segmentCount)\\\\n// To go from index to segment index, index - (segment*6)\\\\n//\\\\nvec3 getConePosition(vec3 d, float rawIndex, float coneOffset, out vec3 normal) {\\\\n\\\\n  const float segmentCount = 8.0;\\\\n\\\\n  float index = rawIndex - floor(rawIndex /\\\\n    (segmentCount * 6.0)) *\\\\n    (segmentCount * 6.0);\\\\n\\\\n  float segment = floor(0.001 + index/6.0);\\\\n  float segmentIndex = index - (segment*6.0);\\\\n\\\\n  normal = -normalize(d);\\\\n\\\\n  if (segmentIndex > 2.99 && segmentIndex < 3.01) {\\\\n    return mix(vec3(0.0), -d, coneOffset);\\\\n  }\\\\n\\\\n  float nextAngle = (\\\\n    (segmentIndex > 0.99 &&  segmentIndex < 1.01) ||\\\\n    (segmentIndex > 4.99 &&  segmentIndex < 5.01)\\\\n  ) ? 1.0 : 0.0;\\\\n  float angle = 2.0 * 3.14159 * ((segment + nextAngle) / segmentCount);\\\\n\\\\n  vec3 v1 = mix(d, vec3(0.0), coneOffset);\\\\n  vec3 v2 = v1 - d;\\\\n\\\\n  vec3 u = getOrthogonalVector(d);\\\\n  vec3 v = normalize(cross(u, d));\\\\n\\\\n  vec3 x = u * cos(angle) * length(d)*0.25;\\\\n  vec3 y = v * sin(angle) * length(d)*0.25;\\\\n  vec3 v3 = v2 + x + y;\\\\n  if (segmentIndex < 3.0) {\\\\n    vec3 tx = u * sin(angle);\\\\n    vec3 ty = v * -cos(angle);\\\\n    vec3 tangent = tx + ty;\\\\n    normal = normalize(cross(v3 - v1, tangent));\\\\n  }\\\\n\\\\n  if (segmentIndex == 0.0) {\\\\n    return mix(d, vec3(0.0), coneOffset);\\\\n  }\\\\n  return v3;\\\\n}\\\\n\\\\nattribute vec3 vector;\\\\nattribute vec4 color, position;\\\\nattribute vec2 uv;\\\\nuniform float vectorScale;\\\\nuniform float coneScale;\\\\n\\\\nuniform float coneOffset;\\\\n\\\\nuniform mat4 model\\\\n           , view\\\\n           , projection\\\\n           , inverseModel;\\\\nuniform vec3 eyePosition\\\\n           , lightPosition;\\\\n\\\\nvarying vec3 f_normal\\\\n           , f_lightDirection\\\\n           , f_eyeDirection\\\\n           , f_data\\\\n           , f_position;\\\\nvarying vec4 f_color;\\\\nvarying vec2 f_uv;\\\\n\\\\nvoid main() {\\\\n  // Scale the vector magnitude to stay constant with\\\\n  // model & view changes.\\\\n  vec3 normal;\\\\n  vec3 XYZ = getConePosition(mat3(model) * ((vectorScale * coneScale) * vector), position.w, coneOffset, normal);\\\\n  vec4 conePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\\\\n\\\\n  //Lighting geometry parameters\\\\n  vec4 cameraCoordinate = view * conePosition;\\\\n  cameraCoordinate.xyz /= cameraCoordinate.w;\\\\n  f_lightDirection = lightPosition - cameraCoordinate.xyz;\\\\n  f_eyeDirection   = eyePosition - cameraCoordinate.xyz;\\\\n  f_normal = normalize((vec4(normal,0.0) * inverseModel).xyz);\\\\n\\\\n  // vec4 m_position  = model * vec4(conePosition, 1.0);\\\\n  vec4 t_position  = view * conePosition;\\\\n  gl_Position      = projection * t_position;\\\\n\\\\n  f_color          = color;\\\\n  f_data           = conePosition.xyz;\\\\n  f_position       = position.xyz;\\\\n  f_uv             = uv;\\\\n}\\\\n\\\"]),a=n([\\\"#extension GL_OES_standard_derivatives : enable\\\\n\\\\nprecision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nfloat beckmannDistribution(float x, float roughness) {\\\\n  float NdotH = max(x, 0.0001);\\\\n  float cos2Alpha = NdotH * NdotH;\\\\n  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\\\\n  float roughness2 = roughness * roughness;\\\\n  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\\\\n  return exp(tan2Alpha / roughness2) / denom;\\\\n}\\\\n\\\\nfloat cookTorranceSpecular(\\\\n  vec3 lightDirection,\\\\n  vec3 viewDirection,\\\\n  vec3 surfaceNormal,\\\\n  float roughness,\\\\n  float fresnel) {\\\\n\\\\n  float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\\\\n  float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\\\\n\\\\n  //Half angle vector\\\\n  vec3 H = normalize(lightDirection + viewDirection);\\\\n\\\\n  //Geometric term\\\\n  float NdotH = max(dot(surfaceNormal, H), 0.0);\\\\n  float VdotH = max(dot(viewDirection, H), 0.000001);\\\\n  float LdotH = max(dot(lightDirection, H), 0.000001);\\\\n  float G1 = (2.0 * NdotH * VdotN) / VdotH;\\\\n  float G2 = (2.0 * NdotH * LdotN) / LdotH;\\\\n  float G = min(1.0, min(G1, G2));\\\\n  \\\\n  //Distribution term\\\\n  float D = beckmannDistribution(NdotH, roughness);\\\\n\\\\n  //Fresnel term\\\\n  float F = pow(1.0 - VdotN, fresnel);\\\\n\\\\n  //Multiply terms and done\\\\n  return  G * F * D / max(3.14159265 * VdotN, 0.000001);\\\\n}\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3 clipBounds[2];\\\\nuniform float roughness\\\\n            , fresnel\\\\n            , kambient\\\\n            , kdiffuse\\\\n            , kspecular\\\\n            , opacity;\\\\nuniform sampler2D texture;\\\\n\\\\nvarying vec3 f_normal\\\\n           , f_lightDirection\\\\n           , f_eyeDirection\\\\n           , f_data\\\\n           , f_position;\\\\nvarying vec4 f_color;\\\\nvarying vec2 f_uv;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\\\n  vec3 N = normalize(f_normal);\\\\n  vec3 L = normalize(f_lightDirection);\\\\n  vec3 V = normalize(f_eyeDirection);\\\\n\\\\n  if(gl_FrontFacing) {\\\\n    N = -N;\\\\n  }\\\\n\\\\n  float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\\\\n  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\\\\n\\\\n  vec4 surfaceColor = f_color * texture2D(texture, f_uv);\\\\n  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\\\\n\\\\n  gl_FragColor = litColor * opacity;\\\\n}\\\\n\\\"]),o=n([\\\"precision highp float;\\\\n\\\\nprecision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nvec3 getOrthogonalVector(vec3 v) {\\\\n  // Return up-vector for only-z vector.\\\\n  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\\\\n  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.\\\\n  // Assign z = 0, x = -b, y = a:\\\\n  // a*-b + b*a + c*0 = -ba + ba + 0 = 0\\\\n  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\\\\n    return normalize(vec3(-v.y, v.x, 0.0));\\\\n  } else {\\\\n    return normalize(vec3(0.0, v.z, -v.y));\\\\n  }\\\\n}\\\\n\\\\n// Calculate the cone vertex and normal at the given index.\\\\n//\\\\n// The returned vertex is for a cone with its top at origin and height of 1.0,\\\\n// pointing in the direction of the vector attribute.\\\\n//\\\\n// Each cone is made up of a top vertex, a center base vertex and base perimeter vertices.\\\\n// These vertices are used to make up the triangles of the cone by the following:\\\\n//   segment + 0 top vertex\\\\n//   segment + 1 perimeter vertex a+1\\\\n//   segment + 2 perimeter vertex a\\\\n//   segment + 3 center base vertex\\\\n//   segment + 4 perimeter vertex a\\\\n//   segment + 5 perimeter vertex a+1\\\\n// Where segment is the number of the radial segment * 6 and a is the angle at that radial segment.\\\\n// To go from index to segment, floor(index / 6)\\\\n// To go from segment to angle, 2*pi * (segment/segmentCount)\\\\n// To go from index to segment index, index - (segment*6)\\\\n//\\\\nvec3 getConePosition(vec3 d, float rawIndex, float coneOffset, out vec3 normal) {\\\\n\\\\n  const float segmentCount = 8.0;\\\\n\\\\n  float index = rawIndex - floor(rawIndex /\\\\n    (segmentCount * 6.0)) *\\\\n    (segmentCount * 6.0);\\\\n\\\\n  float segment = floor(0.001 + index/6.0);\\\\n  float segmentIndex = index - (segment*6.0);\\\\n\\\\n  normal = -normalize(d);\\\\n\\\\n  if (segmentIndex > 2.99 && segmentIndex < 3.01) {\\\\n    return mix(vec3(0.0), -d, coneOffset);\\\\n  }\\\\n\\\\n  float nextAngle = (\\\\n    (segmentIndex > 0.99 &&  segmentIndex < 1.01) ||\\\\n    (segmentIndex > 4.99 &&  segmentIndex < 5.01)\\\\n  ) ? 1.0 : 0.0;\\\\n  float angle = 2.0 * 3.14159 * ((segment + nextAngle) / segmentCount);\\\\n\\\\n  vec3 v1 = mix(d, vec3(0.0), coneOffset);\\\\n  vec3 v2 = v1 - d;\\\\n\\\\n  vec3 u = getOrthogonalVector(d);\\\\n  vec3 v = normalize(cross(u, d));\\\\n\\\\n  vec3 x = u * cos(angle) * length(d)*0.25;\\\\n  vec3 y = v * sin(angle) * length(d)*0.25;\\\\n  vec3 v3 = v2 + x + y;\\\\n  if (segmentIndex < 3.0) {\\\\n    vec3 tx = u * sin(angle);\\\\n    vec3 ty = v * -cos(angle);\\\\n    vec3 tangent = tx + ty;\\\\n    normal = normalize(cross(v3 - v1, tangent));\\\\n  }\\\\n\\\\n  if (segmentIndex == 0.0) {\\\\n    return mix(d, vec3(0.0), coneOffset);\\\\n  }\\\\n  return v3;\\\\n}\\\\n\\\\nattribute vec3 vector;\\\\nattribute vec4 position;\\\\nattribute vec4 id;\\\\n\\\\nuniform mat4 model, view, projection;\\\\n\\\\nuniform float vectorScale;\\\\nuniform float coneScale;\\\\nuniform float coneOffset;\\\\n\\\\nvarying vec3 f_position;\\\\nvarying vec4 f_id;\\\\n\\\\nvoid main() {\\\\n  vec3 normal;\\\\n  vec3 XYZ = getConePosition(mat3(model) * ((vectorScale * coneScale) * vector), position.w, coneOffset, normal);\\\\n  vec4 conePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\\\\n  gl_Position = projection * view * conePosition;\\\\n  f_id        = id;\\\\n  f_position  = position.xyz;\\\\n}\\\\n\\\"]),s=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3  clipBounds[2];\\\\nuniform float pickId;\\\\n\\\\nvarying vec3 f_position;\\\\nvarying vec4 f_id;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\\\n\\\\n  gl_FragColor = vec4(pickId, f_id.xyz);\\\\n}\\\"]);r.meshShader={vertex:i,fragment:a,attributes:[{name:\\\"position\\\",type:\\\"vec4\\\"},{name:\\\"normal\\\",type:\\\"vec3\\\"},{name:\\\"color\\\",type:\\\"vec4\\\"},{name:\\\"uv\\\",type:\\\"vec2\\\"},{name:\\\"vector\\\",type:\\\"vec3\\\"}]},r.pickShader={vertex:o,fragment:s,attributes:[{name:\\\"position\\\",type:\\\"vec4\\\"},{name:\\\"id\\\",type:\\\"vec4\\\"},{name:\\\"vector\\\",type:\\\"vec3\\\"}]}},{glslify:409}],245:[function(t,e,r){e.exports={0:\\\"NONE\\\",1:\\\"ONE\\\",2:\\\"LINE_LOOP\\\",3:\\\"LINE_STRIP\\\",4:\\\"TRIANGLES\\\",5:\\\"TRIANGLE_STRIP\\\",6:\\\"TRIANGLE_FAN\\\",256:\\\"DEPTH_BUFFER_BIT\\\",512:\\\"NEVER\\\",513:\\\"LESS\\\",514:\\\"EQUAL\\\",515:\\\"LEQUAL\\\",516:\\\"GREATER\\\",517:\\\"NOTEQUAL\\\",518:\\\"GEQUAL\\\",519:\\\"ALWAYS\\\",768:\\\"SRC_COLOR\\\",769:\\\"ONE_MINUS_SRC_COLOR\\\",770:\\\"SRC_ALPHA\\\",771:\\\"ONE_MINUS_SRC_ALPHA\\\",772:\\\"DST_ALPHA\\\",773:\\\"ONE_MINUS_DST_ALPHA\\\",774:\\\"DST_COLOR\\\",775:\\\"ONE_MINUS_DST_COLOR\\\",776:\\\"SRC_ALPHA_SATURATE\\\",1024:\\\"STENCIL_BUFFER_BIT\\\",1028:\\\"FRONT\\\",1029:\\\"BACK\\\",1032:\\\"FRONT_AND_BACK\\\",1280:\\\"INVALID_ENUM\\\",1281:\\\"INVALID_VALUE\\\",1282:\\\"INVALID_OPERATION\\\",1285:\\\"OUT_OF_MEMORY\\\",1286:\\\"INVALID_FRAMEBUFFER_OPERATION\\\",2304:\\\"CW\\\",2305:\\\"CCW\\\",2849:\\\"LINE_WIDTH\\\",2884:\\\"CULL_FACE\\\",2885:\\\"CULL_FACE_MODE\\\",2886:\\\"FRONT_FACE\\\",2928:\\\"DEPTH_RANGE\\\",2929:\\\"DEPTH_TEST\\\",2930:\\\"DEPTH_WRITEMASK\\\",2931:\\\"DEPTH_CLEAR_VALUE\\\",2932:\\\"DEPTH_FUNC\\\",2960:\\\"STENCIL_TEST\\\",2961:\\\"STENCIL_CLEAR_VALUE\\\",2962:\\\"STENCIL_FUNC\\\",2963:\\\"STENCIL_VALUE_MASK\\\",2964:\\\"STENCIL_FAIL\\\",2965:\\\"STENCIL_PASS_DEPTH_FAIL\\\",2966:\\\"STENCIL_PASS_DEPTH_PASS\\\",2967:\\\"STENCIL_REF\\\",2968:\\\"STENCIL_WRITEMASK\\\",2978:\\\"VIEWPORT\\\",3024:\\\"DITHER\\\",3042:\\\"BLEND\\\",3088:\\\"SCISSOR_BOX\\\",3089:\\\"SCISSOR_TEST\\\",3106:\\\"COLOR_CLEAR_VALUE\\\",3107:\\\"COLOR_WRITEMASK\\\",3317:\\\"UNPACK_ALIGNMENT\\\",3333:\\\"PACK_ALIGNMENT\\\",3379:\\\"MAX_TEXTURE_SIZE\\\",3386:\\\"MAX_VIEWPORT_DIMS\\\",3408:\\\"SUBPIXEL_BITS\\\",3410:\\\"RED_BITS\\\",3411:\\\"GREEN_BITS\\\",3412:\\\"BLUE_BITS\\\",3413:\\\"ALPHA_BITS\\\",3414:\\\"DEPTH_BITS\\\",3415:\\\"STENCIL_BITS\\\",3553:\\\"TEXTURE_2D\\\",4352:\\\"DONT_CARE\\\",4353:\\\"FASTEST\\\",4354:\\\"NICEST\\\",5120:\\\"BYTE\\\",5121:\\\"UNSIGNED_BYTE\\\",5122:\\\"SHORT\\\",5123:\\\"UNSIGNED_SHORT\\\",5124:\\\"INT\\\",5125:\\\"UNSIGNED_INT\\\",5126:\\\"FLOAT\\\",5386:\\\"INVERT\\\",5890:\\\"TEXTURE\\\",6401:\\\"STENCIL_INDEX\\\",6402:\\\"DEPTH_COMPONENT\\\",6406:\\\"ALPHA\\\",6407:\\\"RGB\\\",6408:\\\"RGBA\\\",6409:\\\"LUMINANCE\\\",6410:\\\"LUMINANCE_ALPHA\\\",7680:\\\"KEEP\\\",7681:\\\"REPLACE\\\",7682:\\\"INCR\\\",7683:\\\"DECR\\\",7936:\\\"VENDOR\\\",7937:\\\"RENDERER\\\",7938:\\\"VERSION\\\",9728:\\\"NEAREST\\\",9729:\\\"LINEAR\\\",9984:\\\"NEAREST_MIPMAP_NEAREST\\\",9985:\\\"LINEAR_MIPMAP_NEAREST\\\",9986:\\\"NEAREST_MIPMAP_LINEAR\\\",9987:\\\"LINEAR_MIPMAP_LINEAR\\\",10240:\\\"TEXTURE_MAG_FILTER\\\",10241:\\\"TEXTURE_MIN_FILTER\\\",10242:\\\"TEXTURE_WRAP_S\\\",10243:\\\"TEXTURE_WRAP_T\\\",10497:\\\"REPEAT\\\",10752:\\\"POLYGON_OFFSET_UNITS\\\",16384:\\\"COLOR_BUFFER_BIT\\\",32769:\\\"CONSTANT_COLOR\\\",32770:\\\"ONE_MINUS_CONSTANT_COLOR\\\",32771:\\\"CONSTANT_ALPHA\\\",32772:\\\"ONE_MINUS_CONSTANT_ALPHA\\\",32773:\\\"BLEND_COLOR\\\",32774:\\\"FUNC_ADD\\\",32777:\\\"BLEND_EQUATION_RGB\\\",32778:\\\"FUNC_SUBTRACT\\\",32779:\\\"FUNC_REVERSE_SUBTRACT\\\",32819:\\\"UNSIGNED_SHORT_4_4_4_4\\\",32820:\\\"UNSIGNED_SHORT_5_5_5_1\\\",32823:\\\"POLYGON_OFFSET_FILL\\\",32824:\\\"POLYGON_OFFSET_FACTOR\\\",32854:\\\"RGBA4\\\",32855:\\\"RGB5_A1\\\",32873:\\\"TEXTURE_BINDING_2D\\\",32926:\\\"SAMPLE_ALPHA_TO_COVERAGE\\\",32928:\\\"SAMPLE_COVERAGE\\\",32936:\\\"SAMPLE_BUFFERS\\\",32937:\\\"SAMPLES\\\",32938:\\\"SAMPLE_COVERAGE_VALUE\\\",32939:\\\"SAMPLE_COVERAGE_INVERT\\\",32968:\\\"BLEND_DST_RGB\\\",32969:\\\"BLEND_SRC_RGB\\\",32970:\\\"BLEND_DST_ALPHA\\\",32971:\\\"BLEND_SRC_ALPHA\\\",33071:\\\"CLAMP_TO_EDGE\\\",33170:\\\"GENERATE_MIPMAP_HINT\\\",33189:\\\"DEPTH_COMPONENT16\\\",33306:\\\"DEPTH_STENCIL_ATTACHMENT\\\",33635:\\\"UNSIGNED_SHORT_5_6_5\\\",33648:\\\"MIRRORED_REPEAT\\\",33901:\\\"ALIASED_POINT_SIZE_RANGE\\\",33902:\\\"ALIASED_LINE_WIDTH_RANGE\\\",33984:\\\"TEXTURE0\\\",33985:\\\"TEXTURE1\\\",33986:\\\"TEXTURE2\\\",33987:\\\"TEXTURE3\\\",33988:\\\"TEXTURE4\\\",33989:\\\"TEXTURE5\\\",33990:\\\"TEXTURE6\\\",33991:\\\"TEXTURE7\\\",33992:\\\"TEXTURE8\\\",33993:\\\"TEXTURE9\\\",33994:\\\"TEXTURE10\\\",33995:\\\"TEXTURE11\\\",33996:\\\"TEXTURE12\\\",33997:\\\"TEXTURE13\\\",33998:\\\"TEXTURE14\\\",33999:\\\"TEXTURE15\\\",34000:\\\"TEXTURE16\\\",34001:\\\"TEXTURE17\\\",34002:\\\"TEXTURE18\\\",34003:\\\"TEXTURE19\\\",34004:\\\"TEXTURE20\\\",34005:\\\"TEXTURE21\\\",34006:\\\"TEXTURE22\\\",34007:\\\"TEXTURE23\\\",34008:\\\"TEXTURE24\\\",34009:\\\"TEXTURE25\\\",34010:\\\"TEXTURE26\\\",34011:\\\"TEXTURE27\\\",34012:\\\"TEXTURE28\\\",34013:\\\"TEXTURE29\\\",34014:\\\"TEXTURE30\\\",34015:\\\"TEXTURE31\\\",34016:\\\"ACTIVE_TEXTURE\\\",34024:\\\"MAX_RENDERBUFFER_SIZE\\\",34041:\\\"DEPTH_STENCIL\\\",34055:\\\"INCR_WRAP\\\",34056:\\\"DECR_WRAP\\\",34067:\\\"TEXTURE_CUBE_MAP\\\",34068:\\\"TEXTURE_BINDING_CUBE_MAP\\\",34069:\\\"TEXTURE_CUBE_MAP_POSITIVE_X\\\",34070:\\\"TEXTURE_CUBE_MAP_NEGATIVE_X\\\",34071:\\\"TEXTURE_CUBE_MAP_POSITIVE_Y\\\",34072:\\\"TEXTURE_CUBE_MAP_NEGATIVE_Y\\\",34073:\\\"TEXTURE_CUBE_MAP_POSITIVE_Z\\\",34074:\\\"TEXTURE_CUBE_MAP_NEGATIVE_Z\\\",34076:\\\"MAX_CUBE_MAP_TEXTURE_SIZE\\\",34338:\\\"VERTEX_ATTRIB_ARRAY_ENABLED\\\",34339:\\\"VERTEX_ATTRIB_ARRAY_SIZE\\\",34340:\\\"VERTEX_ATTRIB_ARRAY_STRIDE\\\",34341:\\\"VERTEX_ATTRIB_ARRAY_TYPE\\\",34342:\\\"CURRENT_VERTEX_ATTRIB\\\",34373:\\\"VERTEX_ATTRIB_ARRAY_POINTER\\\",34466:\\\"NUM_COMPRESSED_TEXTURE_FORMATS\\\",34467:\\\"COMPRESSED_TEXTURE_FORMATS\\\",34660:\\\"BUFFER_SIZE\\\",34661:\\\"BUFFER_USAGE\\\",34816:\\\"STENCIL_BACK_FUNC\\\",34817:\\\"STENCIL_BACK_FAIL\\\",34818:\\\"STENCIL_BACK_PASS_DEPTH_FAIL\\\",34819:\\\"STENCIL_BACK_PASS_DEPTH_PASS\\\",34877:\\\"BLEND_EQUATION_ALPHA\\\",34921:\\\"MAX_VERTEX_ATTRIBS\\\",34922:\\\"VERTEX_ATTRIB_ARRAY_NORMALIZED\\\",34930:\\\"MAX_TEXTURE_IMAGE_UNITS\\\",34962:\\\"ARRAY_BUFFER\\\",34963:\\\"ELEMENT_ARRAY_BUFFER\\\",34964:\\\"ARRAY_BUFFER_BINDING\\\",34965:\\\"ELEMENT_ARRAY_BUFFER_BINDING\\\",34975:\\\"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING\\\",35040:\\\"STREAM_DRAW\\\",35044:\\\"STATIC_DRAW\\\",35048:\\\"DYNAMIC_DRAW\\\",35632:\\\"FRAGMENT_SHADER\\\",35633:\\\"VERTEX_SHADER\\\",35660:\\\"MAX_VERTEX_TEXTURE_IMAGE_UNITS\\\",35661:\\\"MAX_COMBINED_TEXTURE_IMAGE_UNITS\\\",35663:\\\"SHADER_TYPE\\\",35664:\\\"FLOAT_VEC2\\\",35665:\\\"FLOAT_VEC3\\\",35666:\\\"FLOAT_VEC4\\\",35667:\\\"INT_VEC2\\\",35668:\\\"INT_VEC3\\\",35669:\\\"INT_VEC4\\\",35670:\\\"BOOL\\\",35671:\\\"BOOL_VEC2\\\",35672:\\\"BOOL_VEC3\\\",35673:\\\"BOOL_VEC4\\\",35674:\\\"FLOAT_MAT2\\\",35675:\\\"FLOAT_MAT3\\\",35676:\\\"FLOAT_MAT4\\\",35678:\\\"SAMPLER_2D\\\",35680:\\\"SAMPLER_CUBE\\\",35712:\\\"DELETE_STATUS\\\",35713:\\\"COMPILE_STATUS\\\",35714:\\\"LINK_STATUS\\\",35715:\\\"VALIDATE_STATUS\\\",35716:\\\"INFO_LOG_LENGTH\\\",35717:\\\"ATTACHED_SHADERS\\\",35718:\\\"ACTIVE_UNIFORMS\\\",35719:\\\"ACTIVE_UNIFORM_MAX_LENGTH\\\",35720:\\\"SHADER_SOURCE_LENGTH\\\",35721:\\\"ACTIVE_ATTRIBUTES\\\",35722:\\\"ACTIVE_ATTRIBUTE_MAX_LENGTH\\\",35724:\\\"SHADING_LANGUAGE_VERSION\\\",35725:\\\"CURRENT_PROGRAM\\\",36003:\\\"STENCIL_BACK_REF\\\",36004:\\\"STENCIL_BACK_VALUE_MASK\\\",36005:\\\"STENCIL_BACK_WRITEMASK\\\",36006:\\\"FRAMEBUFFER_BINDING\\\",36007:\\\"RENDERBUFFER_BINDING\\\",36048:\\\"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE\\\",36049:\\\"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME\\\",36050:\\\"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL\\\",36051:\\\"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE\\\",36053:\\\"FRAMEBUFFER_COMPLETE\\\",36054:\\\"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\\\",36055:\\\"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\\\",36057:\\\"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\\\",36061:\\\"FRAMEBUFFER_UNSUPPORTED\\\",36064:\\\"COLOR_ATTACHMENT0\\\",36096:\\\"DEPTH_ATTACHMENT\\\",36128:\\\"STENCIL_ATTACHMENT\\\",36160:\\\"FRAMEBUFFER\\\",36161:\\\"RENDERBUFFER\\\",36162:\\\"RENDERBUFFER_WIDTH\\\",36163:\\\"RENDERBUFFER_HEIGHT\\\",36164:\\\"RENDERBUFFER_INTERNAL_FORMAT\\\",36168:\\\"STENCIL_INDEX8\\\",36176:\\\"RENDERBUFFER_RED_SIZE\\\",36177:\\\"RENDERBUFFER_GREEN_SIZE\\\",36178:\\\"RENDERBUFFER_BLUE_SIZE\\\",36179:\\\"RENDERBUFFER_ALPHA_SIZE\\\",36180:\\\"RENDERBUFFER_DEPTH_SIZE\\\",36181:\\\"RENDERBUFFER_STENCIL_SIZE\\\",36194:\\\"RGB565\\\",36336:\\\"LOW_FLOAT\\\",36337:\\\"MEDIUM_FLOAT\\\",36338:\\\"HIGH_FLOAT\\\",36339:\\\"LOW_INT\\\",36340:\\\"MEDIUM_INT\\\",36341:\\\"HIGH_INT\\\",36346:\\\"SHADER_COMPILER\\\",36347:\\\"MAX_VERTEX_UNIFORM_VECTORS\\\",36348:\\\"MAX_VARYING_VECTORS\\\",36349:\\\"MAX_FRAGMENT_UNIFORM_VECTORS\\\",37440:\\\"UNPACK_FLIP_Y_WEBGL\\\",37441:\\\"UNPACK_PREMULTIPLY_ALPHA_WEBGL\\\",37442:\\\"CONTEXT_LOST_WEBGL\\\",37443:\\\"UNPACK_COLORSPACE_CONVERSION_WEBGL\\\",37444:\\\"BROWSER_DEFAULT_WEBGL\\\"}},{}],246:[function(t,e,r){var n=t(\\\"./1.0/numbers\\\");e.exports=function(t){return n[t]}},{\\\"./1.0/numbers\\\":245}],247:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){var e=t.gl,r=n(e),o=i(e,[{buffer:r,type:e.FLOAT,size:3,offset:0,stride:40},{buffer:r,type:e.FLOAT,size:4,offset:12,stride:40},{buffer:r,type:e.FLOAT,size:3,offset:28,stride:40}]),l=a(e);l.attributes.position.location=0,l.attributes.color.location=1,l.attributes.offset.location=2;var c=new s(e,r,o,l);return c.update(t),c};var n=t(\\\"gl-buffer\\\"),i=t(\\\"gl-vao\\\"),a=t(\\\"./shaders/index\\\"),o=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function s(t,e,r,n){this.gl=t,this.shader=n,this.buffer=e,this.vao=r,this.pixelRatio=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lineWidth=[1,1,1],this.capSize=[10,10,10],this.lineCount=[0,0,0],this.lineOffset=[0,0,0],this.opacity=1,this.hasAlpha=!1}var l=s.prototype;function c(t,e){for(var r=0;r<3;++r)t[0][r]=Math.min(t[0][r],e[r]),t[1][r]=Math.max(t[1][r],e[r])}l.isOpaque=function(){return!this.hasAlpha},l.isTransparent=function(){return this.hasAlpha},l.drawTransparent=l.draw=function(t){var e=this.gl,r=this.shader.uniforms;this.shader.bind();var n=r.view=t.view||o,i=r.projection=t.projection||o;r.model=t.model||o,r.clipBounds=this.clipBounds,r.opacity=this.opacity;var a=n[12],s=n[13],l=n[14],c=n[15],u=(t._ortho||!1?2:1)*this.pixelRatio*(i[3]*a+i[7]*s+i[11]*l+i[15]*c)/e.drawingBufferHeight;this.vao.bind();for(var h=0;h<3;++h)e.lineWidth(this.lineWidth[h]*this.pixelRatio),r.capSize=this.capSize[h]*u,this.lineCount[h]&&e.drawArrays(e.LINES,this.lineOffset[h],this.lineCount[h]);this.vao.unbind()};var u=function(){for(var t=new Array(3),e=0;e<3;++e){for(var r=[],n=1;n<=2;++n)for(var i=-1;i<=1;i+=2){var a=[0,0,0];a[(n+e)%3]=i,r.push(a)}t[e]=r}return t}();function h(t,e,r,n){for(var i=u[n],a=0;a<i.length;++a){var o=i[a];t.push(e[0],e[1],e[2],r[0],r[1],r[2],r[3],o[0],o[1],o[2])}return i.length}l.update=function(t){\\\"lineWidth\\\"in(t=t||{})&&(this.lineWidth=t.lineWidth,Array.isArray(this.lineWidth)||(this.lineWidth=[this.lineWidth,this.lineWidth,this.lineWidth])),\\\"capSize\\\"in t&&(this.capSize=t.capSize,Array.isArray(this.capSize)||(this.capSize=[this.capSize,this.capSize,this.capSize])),this.hasAlpha=!1,\\\"opacity\\\"in t&&(this.opacity=+t.opacity,this.opacity<1&&(this.hasAlpha=!0));var e=t.color||[[0,0,0],[0,0,0],[0,0,0]],r=t.position,n=t.error;if(Array.isArray(e[0])||(e=[e,e,e]),r&&n){var i=[],a=r.length,o=0;this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.lineCount=[0,0,0];for(var s=0;s<3;++s){this.lineOffset[s]=o;t:for(var l=0;l<a;++l){for(var u=r[l],f=0;f<3;++f)if(isNaN(u[f])||!isFinite(u[f]))continue t;var p=n[l],d=e[s];if(Array.isArray(d[0])&&(d=e[l]),3===d.length?d=[d[0],d[1],d[2],1]:4===d.length&&(d=[d[0],d[1],d[2],d[3]],!this.hasAlpha&&d[3]<1&&(this.hasAlpha=!0)),!isNaN(p[0][s])&&!isNaN(p[1][s])){var g;if(p[0][s]<0)(g=u.slice())[s]+=p[0][s],i.push(u[0],u[1],u[2],d[0],d[1],d[2],d[3],0,0,0,g[0],g[1],g[2],d[0],d[1],d[2],d[3],0,0,0),c(this.bounds,g),o+=2+h(i,g,d,s);if(p[1][s]>0)(g=u.slice())[s]+=p[1][s],i.push(u[0],u[1],u[2],d[0],d[1],d[2],d[3],0,0,0,g[0],g[1],g[2],d[0],d[1],d[2],d[3],0,0,0),c(this.bounds,g),o+=2+h(i,g,d,s)}}this.lineCount[s]=o-this.lineOffset[s]}this.buffer.update(i)}},l.dispose=function(){this.shader.dispose(),this.buffer.dispose(),this.vao.dispose()}},{\\\"./shaders/index\\\":248,\\\"gl-buffer\\\":241,\\\"gl-vao\\\":327}],248:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"glslify\\\"),i=t(\\\"gl-shader\\\"),a=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 position, offset;\\\\nattribute vec4 color;\\\\nuniform mat4 model, view, projection;\\\\nuniform float capSize;\\\\nvarying vec4 fragColor;\\\\nvarying vec3 fragPosition;\\\\n\\\\nvoid main() {\\\\n  vec4 worldPosition  = model * vec4(position, 1.0);\\\\n  worldPosition       = (worldPosition / worldPosition.w) + vec4(capSize * offset, 0.0);\\\\n  gl_Position         = projection * view * worldPosition;\\\\n  fragColor           = color;\\\\n  fragPosition        = position;\\\\n}\\\"]),o=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3 clipBounds[2];\\\\nuniform float opacity;\\\\nvarying vec3 fragPosition;\\\\nvarying vec4 fragColor;\\\\n\\\\nvoid main() {\\\\n  if (\\\\n    outOfRange(clipBounds[0], clipBounds[1], fragPosition) ||\\\\n    fragColor.a * opacity == 0.\\\\n  ) discard;\\\\n\\\\n  gl_FragColor = opacity * fragColor;\\\\n}\\\"]);e.exports=function(t){return i(t,a,o,null,[{name:\\\"position\\\",type:\\\"vec3\\\"},{name:\\\"color\\\",type:\\\"vec4\\\"},{name:\\\"offset\\\",type:\\\"vec3\\\"}])}},{\\\"gl-shader\\\":301,glslify:409}],249:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"gl-texture2d\\\");e.exports=function(t,e,r,n){i||(i=t.FRAMEBUFFER_UNSUPPORTED,a=t.FRAMEBUFFER_INCOMPLETE_ATTACHMENT,o=t.FRAMEBUFFER_INCOMPLETE_DIMENSIONS,s=t.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT);var c=t.getExtension(\\\"WEBGL_draw_buffers\\\");!l&&c&&function(t,e){var r=t.getParameter(e.MAX_COLOR_ATTACHMENTS_WEBGL);l=new Array(r+1);for(var n=0;n<=r;++n){for(var i=new Array(r),a=0;a<n;++a)i[a]=t.COLOR_ATTACHMENT0+a;for(var a=n;a<r;++a)i[a]=t.NONE;l[n]=i}}(t,c);Array.isArray(e)&&(n=r,r=0|e[1],e=0|e[0]);if(\\\"number\\\"!=typeof e)throw new Error(\\\"gl-fbo: Missing shape parameter\\\");var u=t.getParameter(t.MAX_RENDERBUFFER_SIZE);if(e<0||e>u||r<0||r>u)throw new Error(\\\"gl-fbo: Parameters are too large for FBO\\\");var h=1;if(\\\"color\\\"in(n=n||{})){if((h=Math.max(0|n.color,0))<0)throw new Error(\\\"gl-fbo: Must specify a nonnegative number of colors\\\");if(h>1){if(!c)throw new Error(\\\"gl-fbo: Multiple draw buffer extension not supported\\\");if(h>t.getParameter(c.MAX_COLOR_ATTACHMENTS_WEBGL))throw new Error(\\\"gl-fbo: Context does not support \\\"+h+\\\" draw buffers\\\")}}var f=t.UNSIGNED_BYTE,p=t.getExtension(\\\"OES_texture_float\\\");if(n.float&&h>0){if(!p)throw new Error(\\\"gl-fbo: Context does not support floating point textures\\\");f=t.FLOAT}else n.preferFloat&&h>0&&p&&(f=t.FLOAT);var g=!0;\\\"depth\\\"in n&&(g=!!n.depth);var v=!1;\\\"stencil\\\"in n&&(v=!!n.stencil);return new d(t,e,r,f,h,g,v,c)};var i,a,o,s,l=null;function c(t){return[t.getParameter(t.FRAMEBUFFER_BINDING),t.getParameter(t.RENDERBUFFER_BINDING),t.getParameter(t.TEXTURE_BINDING_2D)]}function u(t,e){t.bindFramebuffer(t.FRAMEBUFFER,e[0]),t.bindRenderbuffer(t.RENDERBUFFER,e[1]),t.bindTexture(t.TEXTURE_2D,e[2])}function h(t){switch(t){case i:throw new Error(\\\"gl-fbo: Framebuffer unsupported\\\");case a:throw new Error(\\\"gl-fbo: Framebuffer incomplete attachment\\\");case o:throw new Error(\\\"gl-fbo: Framebuffer incomplete dimensions\\\");case s:throw new Error(\\\"gl-fbo: Framebuffer incomplete missing attachment\\\");default:throw new Error(\\\"gl-fbo: Framebuffer failed for unspecified reason\\\")}}function f(t,e,r,i,a,o){if(!i)return null;var s=n(t,e,r,a,i);return s.magFilter=t.NEAREST,s.minFilter=t.NEAREST,s.mipSamples=1,s.bind(),t.framebufferTexture2D(t.FRAMEBUFFER,o,t.TEXTURE_2D,s.handle,0),s}function p(t,e,r,n,i){var a=t.createRenderbuffer();return t.bindRenderbuffer(t.RENDERBUFFER,a),t.renderbufferStorage(t.RENDERBUFFER,n,e,r),t.framebufferRenderbuffer(t.FRAMEBUFFER,i,t.RENDERBUFFER,a),a}function d(t,e,r,n,i,a,o,s){this.gl=t,this._shape=[0|e,0|r],this._destroyed=!1,this._ext=s,this.color=new Array(i);for(var d=0;d<i;++d)this.color[d]=null;this._color_rb=null,this.depth=null,this._depth_rb=null,this._colorType=n,this._useDepth=a,this._useStencil=o;var g=this,v=[0|e,0|r];Object.defineProperties(v,{0:{get:function(){return g._shape[0]},set:function(t){return g.width=t}},1:{get:function(){return g._shape[1]},set:function(t){return g.height=t}}}),this._shapeVector=v,function(t){var e=c(t.gl),r=t.gl,n=t.handle=r.createFramebuffer(),i=t._shape[0],a=t._shape[1],o=t.color.length,s=t._ext,d=t._useStencil,g=t._useDepth,v=t._colorType;r.bindFramebuffer(r.FRAMEBUFFER,n);for(var m=0;m<o;++m)t.color[m]=f(r,i,a,v,r.RGBA,r.COLOR_ATTACHMENT0+m);0===o?(t._color_rb=p(r,i,a,r.RGBA4,r.COLOR_ATTACHMENT0),s&&s.drawBuffersWEBGL(l[0])):o>1&&s.drawBuffersWEBGL(l[o]);var y=r.getExtension(\\\"WEBGL_depth_texture\\\");y?d?t.depth=f(r,i,a,y.UNSIGNED_INT_24_8_WEBGL,r.DEPTH_STENCIL,r.DEPTH_STENCIL_ATTACHMENT):g&&(t.depth=f(r,i,a,r.UNSIGNED_SHORT,r.DEPTH_COMPONENT,r.DEPTH_ATTACHMENT)):g&&d?t._depth_rb=p(r,i,a,r.DEPTH_STENCIL,r.DEPTH_STENCIL_ATTACHMENT):g?t._depth_rb=p(r,i,a,r.DEPTH_COMPONENT16,r.DEPTH_ATTACHMENT):d&&(t._depth_rb=p(r,i,a,r.STENCIL_INDEX,r.STENCIL_ATTACHMENT));var x=r.checkFramebufferStatus(r.FRAMEBUFFER);if(x!==r.FRAMEBUFFER_COMPLETE){for(t._destroyed=!0,r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteFramebuffer(t.handle),t.handle=null,t.depth&&(t.depth.dispose(),t.depth=null),t._depth_rb&&(r.deleteRenderbuffer(t._depth_rb),t._depth_rb=null),m=0;m<t.color.length;++m)t.color[m].dispose(),t.color[m]=null;t._color_rb&&(r.deleteRenderbuffer(t._color_rb),t._color_rb=null),u(r,e),h(x)}u(r,e)}(this)}var g=d.prototype;function v(t,e,r){if(t._destroyed)throw new Error(\\\"gl-fbo: Can't resize destroyed FBO\\\");if(t._shape[0]!==e||t._shape[1]!==r){var n=t.gl,i=n.getParameter(n.MAX_RENDERBUFFER_SIZE);if(e<0||e>i||r<0||r>i)throw new Error(\\\"gl-fbo: Can't resize FBO, invalid dimensions\\\");t._shape[0]=e,t._shape[1]=r;for(var a=c(n),o=0;o<t.color.length;++o)t.color[o].shape=t._shape;t._color_rb&&(n.bindRenderbuffer(n.RENDERBUFFER,t._color_rb),n.renderbufferStorage(n.RENDERBUFFER,n.RGBA4,t._shape[0],t._shape[1])),t.depth&&(t.depth.shape=t._shape),t._depth_rb&&(n.bindRenderbuffer(n.RENDERBUFFER,t._depth_rb),t._useDepth&&t._useStencil?n.renderbufferStorage(n.RENDERBUFFER,n.DEPTH_STENCIL,t._shape[0],t._shape[1]):t._useDepth?n.renderbufferStorage(n.RENDERBUFFER,n.DEPTH_COMPONENT16,t._shape[0],t._shape[1]):t._useStencil&&n.renderbufferStorage(n.RENDERBUFFER,n.STENCIL_INDEX,t._shape[0],t._shape[1])),n.bindFramebuffer(n.FRAMEBUFFER,t.handle);var s=n.checkFramebufferStatus(n.FRAMEBUFFER);s!==n.FRAMEBUFFER_COMPLETE&&(t.dispose(),u(n,a),h(s)),u(n,a)}}Object.defineProperties(g,{shape:{get:function(){return this._destroyed?[0,0]:this._shapeVector},set:function(t){if(Array.isArray(t)||(t=[0|t,0|t]),2!==t.length)throw new Error(\\\"gl-fbo: Shape vector must be length 2\\\");var e=0|t[0],r=0|t[1];return v(this,e,r),[e,r]},enumerable:!1},width:{get:function(){return this._destroyed?0:this._shape[0]},set:function(t){return v(this,t|=0,this._shape[1]),t},enumerable:!1},height:{get:function(){return this._destroyed?0:this._shape[1]},set:function(t){return t|=0,v(this,this._shape[0],t),t},enumerable:!1}}),g.bind=function(){if(!this._destroyed){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.handle),t.viewport(0,0,this._shape[0],this._shape[1])}},g.dispose=function(){if(!this._destroyed){this._destroyed=!0;var t=this.gl;t.deleteFramebuffer(this.handle),this.handle=null,this.depth&&(this.depth.dispose(),this.depth=null),this._depth_rb&&(t.deleteRenderbuffer(this._depth_rb),this._depth_rb=null);for(var e=0;e<this.color.length;++e)this.color[e].dispose(),this.color[e]=null;this._color_rb&&(t.deleteRenderbuffer(this._color_rb),this._color_rb=null)}}},{\\\"gl-texture2d\\\":322}],250:[function(t,e,r){var n=t(\\\"sprintf-js\\\").sprintf,i=t(\\\"gl-constants/lookup\\\"),a=t(\\\"glsl-shader-name\\\"),o=t(\\\"add-line-numbers\\\");e.exports=function(t,e,r){\\\"use strict\\\";var s=a(e)||\\\"of unknown name (see npm glsl-shader-name)\\\",l=\\\"unknown type\\\";void 0!==r&&(l=r===i.FRAGMENT_SHADER?\\\"fragment\\\":\\\"vertex\\\");for(var c=n(\\\"Error compiling %s shader %s:\\\\n\\\",l,s),u=n(\\\"%s%s\\\",c,t),h=t.split(\\\"\\\\n\\\"),f={},p=0;p<h.length;p++){var d=h[p];if(\\\"\\\"!==d&&\\\"\\\\0\\\"!==d){var g=parseInt(d.split(\\\":\\\")[2]);if(isNaN(g))throw new Error(n(\\\"Could not parse error: %s\\\",d));f[g]=d}}for(var v=o(e).split(\\\"\\\\n\\\"),p=0;p<v.length;p++)if(f[p+3]||f[p+2]||f[p+1]){var m=v[p];if(c+=m+\\\"\\\\n\\\",f[p+1]){var y=f[p+1];y=y.substr(y.split(\\\":\\\",3).join(\\\":\\\").length+1).trim(),c+=n(\\\"^^^ %s\\\\n\\\\n\\\",y)}}return{long:c.trim(),short:u.trim()}}},{\\\"add-line-numbers\\\":61,\\\"gl-constants/lookup\\\":246,\\\"glsl-shader-name\\\":401,\\\"sprintf-js\\\":528}],251:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){var r=t.gl,n=o(r,l.vertex,l.fragment),i=o(r,l.pickVertex,l.pickFragment),a=s(r),u=s(r),h=s(r),f=s(r),p=new c(t,n,i,a,u,h,f);return p.update(e),t.addObject(p),p};var n=t(\\\"binary-search-bounds\\\"),i=t(\\\"iota-array\\\"),a=t(\\\"typedarray-pool\\\"),o=t(\\\"gl-shader\\\"),s=t(\\\"gl-buffer\\\"),l=t(\\\"./lib/shaders\\\");function c(t,e,r,n,i,a,o){this.plot=t,this.shader=e,this.pickShader=r,this.positionBuffer=n,this.weightBuffer=i,this.colorBuffer=a,this.idBuffer=o,this.xData=[],this.yData=[],this.shape=[0,0],this.bounds=[1/0,1/0,-1/0,-1/0],this.pickOffset=0}var u,h=c.prototype,f=[0,0,1,0,0,1,1,0,1,1,0,1];h.draw=(u=[1,0,0,0,1,0,0,0,1],function(){var t=this.plot,e=this.shader,r=this.bounds,n=this.numVertices;if(!(n<=0)){var i=t.gl,a=t.dataBox,o=r[2]-r[0],s=r[3]-r[1],l=a[2]-a[0],c=a[3]-a[1];u[0]=2*o/l,u[4]=2*s/c,u[6]=2*(r[0]-a[0])/l-1,u[7]=2*(r[1]-a[1])/c-1,e.bind();var h=e.uniforms;h.viewTransform=u,h.shape=this.shape;var f=e.attributes;this.positionBuffer.bind(),f.position.pointer(),this.weightBuffer.bind(),f.weight.pointer(i.UNSIGNED_BYTE,!1),this.colorBuffer.bind(),f.color.pointer(i.UNSIGNED_BYTE,!0),i.drawArrays(i.TRIANGLES,0,n)}}),h.drawPick=function(){var t=[1,0,0,0,1,0,0,0,1],e=[0,0,0,0];return function(r){var n=this.plot,i=this.pickShader,a=this.bounds,o=this.numVertices;if(!(o<=0)){var s=n.gl,l=n.dataBox,c=a[2]-a[0],u=a[3]-a[1],h=l[2]-l[0],f=l[3]-l[1];t[0]=2*c/h,t[4]=2*u/f,t[6]=2*(a[0]-l[0])/h-1,t[7]=2*(a[1]-l[1])/f-1;for(var p=0;p<4;++p)e[p]=r>>8*p&255;this.pickOffset=r,i.bind();var d=i.uniforms;d.viewTransform=t,d.pickOffset=e,d.shape=this.shape;var g=i.attributes;return this.positionBuffer.bind(),g.position.pointer(),this.weightBuffer.bind(),g.weight.pointer(s.UNSIGNED_BYTE,!1),this.idBuffer.bind(),g.pickId.pointer(s.UNSIGNED_BYTE,!1),s.drawArrays(s.TRIANGLES,0,o),r+this.shape[0]*this.shape[1]}}}(),h.pick=function(t,e,r){var n=this.pickOffset,i=this.shape[0]*this.shape[1];if(r<n||r>=n+i)return null;var a=r-n,o=this.xData,s=this.yData;return{object:this,pointId:a,dataCoord:[o[a%this.shape[0]],s[a/this.shape[0]|0]]}},h.update=function(t){var e=(t=t||{}).shape||[0,0],r=t.x||i(e[0]),o=t.y||i(e[1]),s=t.z||new Float32Array(e[0]*e[1]);this.xData=r,this.yData=o;var l=t.colorLevels||[0],c=t.colorValues||[0,0,0,1],u=l.length,h=this.bounds,p=h[0]=r[0],d=h[1]=o[0],g=1/((h[2]=r[r.length-1])-p),v=1/((h[3]=o[o.length-1])-d),m=e[0],y=e[1];this.shape=[m,y];var x=(m-1)*(y-1)*(f.length>>>1);this.numVertices=x;for(var b=a.mallocUint8(4*x),_=a.mallocFloat32(2*x),w=a.mallocUint8(2*x),k=a.mallocUint32(x),T=0,A=0;A<y-1;++A)for(var M=v*(o[A]-d),S=v*(o[A+1]-d),E=0;E<m-1;++E)for(var C=g*(r[E]-p),L=g*(r[E+1]-p),P=0;P<f.length;P+=2){var O,z,I,D,R=f[P],F=f[P+1],B=s[(A+F)*m+(E+R)],N=n.le(l,B);if(N<0)O=c[0],z=c[1],I=c[2],D=c[3];else if(N===u-1)O=c[4*u-4],z=c[4*u-3],I=c[4*u-2],D=c[4*u-1];else{var j=(B-l[N])/(l[N+1]-l[N]),U=1-j,V=4*N,q=4*(N+1);O=U*c[V]+j*c[q],z=U*c[V+1]+j*c[q+1],I=U*c[V+2]+j*c[q+2],D=U*c[V+3]+j*c[q+3]}b[4*T]=255*O,b[4*T+1]=255*z,b[4*T+2]=255*I,b[4*T+3]=255*D,_[2*T]=.5*C+.5*L,_[2*T+1]=.5*M+.5*S,w[2*T]=R,w[2*T+1]=F,k[T]=A*m+E,T+=1}this.positionBuffer.update(_),this.weightBuffer.update(w),this.colorBuffer.update(b),this.idBuffer.update(k),a.free(_),a.free(b),a.free(w),a.free(k)},h.dispose=function(){this.shader.dispose(),this.pickShader.dispose(),this.positionBuffer.dispose(),this.weightBuffer.dispose(),this.colorBuffer.dispose(),this.idBuffer.dispose(),this.plot.removeObject(this)}},{\\\"./lib/shaders\\\":252,\\\"binary-search-bounds\\\":253,\\\"gl-buffer\\\":241,\\\"gl-shader\\\":301,\\\"iota-array\\\":416,\\\"typedarray-pool\\\":545}],252:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"glslify\\\");e.exports={fragment:n([\\\"precision lowp float;\\\\n#define GLSLIFY 1\\\\nvarying vec4 fragColor;\\\\nvoid main() {\\\\n  gl_FragColor = vec4(fragColor.rgb * fragColor.a, fragColor.a);\\\\n}\\\\n\\\"]),vertex:n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec2 position;\\\\nattribute vec4 color;\\\\nattribute vec2 weight;\\\\n\\\\nuniform vec2 shape;\\\\nuniform mat3 viewTransform;\\\\n\\\\nvarying vec4 fragColor;\\\\n\\\\nvoid main() {\\\\n  vec3 vPosition = viewTransform * vec3( position + (weight-.5)/(shape-1.) , 1.0);\\\\n  fragColor = color;\\\\n  gl_Position = vec4(vPosition.xy, 0, vPosition.z);\\\\n}\\\\n\\\"]),pickFragment:n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nvarying vec4 fragId;\\\\nvarying vec2 vWeight;\\\\n\\\\nuniform vec2 shape;\\\\nuniform vec4 pickOffset;\\\\n\\\\nvoid main() {\\\\n  vec2 d = step(.5, vWeight);\\\\n  vec4 id = fragId + pickOffset;\\\\n  id.x += d.x + d.y*shape.x;\\\\n\\\\n  id.y += floor(id.x / 256.0);\\\\n  id.x -= floor(id.x / 256.0) * 256.0;\\\\n\\\\n  id.z += floor(id.y / 256.0);\\\\n  id.y -= floor(id.y / 256.0) * 256.0;\\\\n\\\\n  id.w += floor(id.z / 256.0);\\\\n  id.z -= floor(id.z / 256.0) * 256.0;\\\\n\\\\n  gl_FragColor = id/255.;\\\\n}\\\\n\\\"]),pickVertex:n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec2 position;\\\\nattribute vec4 pickId;\\\\nattribute vec2 weight;\\\\n\\\\nuniform vec2 shape;\\\\nuniform mat3 viewTransform;\\\\n\\\\nvarying vec4 fragId;\\\\nvarying vec2 vWeight;\\\\n\\\\nvoid main() {\\\\n  vWeight = weight;\\\\n\\\\n  fragId = pickId;\\\\n\\\\n  vec3 vPosition = viewTransform * vec3( position + (weight-.5)/(shape-1.) , 1.0);\\\\n  gl_Position = vec4(vPosition.xy, 0, vPosition.z);\\\\n}\\\\n\\\"])}},{glslify:409}],253:[function(t,e,r){arguments[4][111][0].apply(r,arguments)},{dup:111}],254:[function(t,e,r){var n=t(\\\"glslify\\\"),i=t(\\\"gl-shader\\\"),a=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 position, nextPosition;\\\\nattribute float arcLength, lineWidth;\\\\nattribute vec4 color;\\\\n\\\\nuniform vec2 screenShape;\\\\nuniform float pixelRatio;\\\\nuniform mat4 model, view, projection;\\\\n\\\\nvarying vec4 fragColor;\\\\nvarying vec3 worldPosition;\\\\nvarying float pixelArcLength;\\\\n\\\\nvec4 project(vec3 p) {\\\\n  return projection * view * model * vec4(p, 1.0);\\\\n}\\\\n\\\\nvoid main() {\\\\n  vec4 startPoint = project(position);\\\\n  vec4 endPoint   = project(nextPosition);\\\\n\\\\n  vec2 A = startPoint.xy / startPoint.w;\\\\n  vec2 B =   endPoint.xy /   endPoint.w;\\\\n\\\\n  float clipAngle = atan(\\\\n    (B.y - A.y) * screenShape.y,\\\\n    (B.x - A.x) * screenShape.x\\\\n  );\\\\n\\\\n  vec2 offset = 0.5 * pixelRatio * lineWidth * vec2(\\\\n    sin(clipAngle),\\\\n    -cos(clipAngle)\\\\n  ) / screenShape;\\\\n\\\\n  gl_Position = vec4(startPoint.xy + startPoint.w * offset, startPoint.zw);\\\\n\\\\n  worldPosition = position;\\\\n  pixelArcLength = arcLength;\\\\n  fragColor = color;\\\\n}\\\\n\\\"]),o=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3      clipBounds[2];\\\\nuniform sampler2D dashTexture;\\\\nuniform float     dashScale;\\\\nuniform float     opacity;\\\\n\\\\nvarying vec3    worldPosition;\\\\nvarying float   pixelArcLength;\\\\nvarying vec4    fragColor;\\\\n\\\\nvoid main() {\\\\n  if (\\\\n    outOfRange(clipBounds[0], clipBounds[1], worldPosition) ||\\\\n    fragColor.a * opacity == 0.\\\\n  ) discard;\\\\n\\\\n  float dashWeight = texture2D(dashTexture, vec2(dashScale * pixelArcLength, 0)).r;\\\\n  if(dashWeight < 0.5) {\\\\n    discard;\\\\n  }\\\\n  gl_FragColor = fragColor * opacity;\\\\n}\\\\n\\\"]),s=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\n#define FLOAT_MAX  1.70141184e38\\\\n#define FLOAT_MIN  1.17549435e-38\\\\n\\\\nlowp vec4 encode_float_1540259130(highp float v) {\\\\n  highp float av = abs(v);\\\\n\\\\n  //Handle special cases\\\\n  if(av < FLOAT_MIN) {\\\\n    return vec4(0.0, 0.0, 0.0, 0.0);\\\\n  } else if(v > FLOAT_MAX) {\\\\n    return vec4(127.0, 128.0, 0.0, 0.0) / 255.0;\\\\n  } else if(v < -FLOAT_MAX) {\\\\n    return vec4(255.0, 128.0, 0.0, 0.0) / 255.0;\\\\n  }\\\\n\\\\n  highp vec4 c = vec4(0,0,0,0);\\\\n\\\\n  //Compute exponent and mantissa\\\\n  highp float e = floor(log2(av));\\\\n  highp float m = av * pow(2.0, -e) - 1.0;\\\\n  \\\\n  //Unpack mantissa\\\\n  c[1] = floor(128.0 * m);\\\\n  m -= c[1] / 128.0;\\\\n  c[2] = floor(32768.0 * m);\\\\n  m -= c[2] / 32768.0;\\\\n  c[3] = floor(8388608.0 * m);\\\\n  \\\\n  //Unpack exponent\\\\n  highp float ebias = e + 127.0;\\\\n  c[0] = floor(ebias / 2.0);\\\\n  ebias -= c[0] * 2.0;\\\\n  c[1] += floor(ebias) * 128.0; \\\\n\\\\n  //Unpack sign bit\\\\n  c[0] += 128.0 * step(0.0, -v);\\\\n\\\\n  //Scale back to range\\\\n  return c / 255.0;\\\\n}\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform float pickId;\\\\nuniform vec3 clipBounds[2];\\\\n\\\\nvarying vec3 worldPosition;\\\\nvarying float pixelArcLength;\\\\nvarying vec4 fragColor;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], worldPosition)) discard;\\\\n\\\\n  gl_FragColor = vec4(pickId/255.0, encode_float_1540259130(pixelArcLength).xyz);\\\\n}\\\"]),l=[{name:\\\"position\\\",type:\\\"vec3\\\"},{name:\\\"nextPosition\\\",type:\\\"vec3\\\"},{name:\\\"arcLength\\\",type:\\\"float\\\"},{name:\\\"lineWidth\\\",type:\\\"float\\\"},{name:\\\"color\\\",type:\\\"vec4\\\"}];r.createShader=function(t){return i(t,a,o,null,l)},r.createPickShader=function(t){return i(t,a,s,null,l)}},{\\\"gl-shader\\\":301,glslify:409}],255:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){var e=t.gl||t.scene&&t.scene.gl,r=u(e);r.attributes.position.location=0,r.attributes.nextPosition.location=1,r.attributes.arcLength.location=2,r.attributes.lineWidth.location=3,r.attributes.color.location=4;var o=h(e);o.attributes.position.location=0,o.attributes.nextPosition.location=1,o.attributes.arcLength.location=2,o.attributes.lineWidth.location=3,o.attributes.color.location=4;for(var s=n(e),c=i(e,[{buffer:s,size:3,offset:0,stride:48},{buffer:s,size:3,offset:12,stride:48},{buffer:s,size:1,offset:24,stride:48},{buffer:s,size:1,offset:28,stride:48},{buffer:s,size:4,offset:32,stride:48}]),f=l(new Array(1024),[256,1,4]),p=0;p<1024;++p)f.data[p]=255;var d=a(e,f);d.wrap=e.REPEAT;var g=new v(e,r,o,s,c,d);return g.update(t),g};var n=t(\\\"gl-buffer\\\"),i=t(\\\"gl-vao\\\"),a=t(\\\"gl-texture2d\\\"),o=t(\\\"glsl-read-float\\\"),s=t(\\\"binary-search-bounds\\\"),l=t(\\\"ndarray\\\"),c=t(\\\"./lib/shaders\\\"),u=c.createShader,h=c.createPickShader,f=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function p(t,e){for(var r=0,n=0;n<3;++n){var i=t[n]-e[n];r+=i*i}return Math.sqrt(r)}function d(t){for(var e=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],r=0;r<3;++r)e[0][r]=Math.max(t[0][r],e[0][r]),e[1][r]=Math.min(t[1][r],e[1][r]);return e}function g(t,e,r,n){this.arcLength=t,this.position=e,this.index=r,this.dataCoordinate=n}function v(t,e,r,n,i,a){this.gl=t,this.shader=e,this.pickShader=r,this.buffer=n,this.vao=i,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.points=[],this.arcLength=[],this.vertexCount=0,this.bounds=[[0,0,0],[0,0,0]],this.pickId=0,this.lineWidth=1,this.texture=a,this.dashScale=1,this.opacity=1,this.hasAlpha=!1,this.dirty=!0,this.pixelRatio=1}var m=v.prototype;m.isTransparent=function(){return this.hasAlpha},m.isOpaque=function(){return!this.hasAlpha},m.pickSlots=1,m.setPickBase=function(t){this.pickId=t},m.drawTransparent=m.draw=function(t){if(this.vertexCount){var e=this.gl,r=this.shader,n=this.vao;r.bind(),r.uniforms={model:t.model||f,view:t.view||f,projection:t.projection||f,clipBounds:d(this.clipBounds),dashTexture:this.texture.bind(),dashScale:this.dashScale/this.arcLength[this.arcLength.length-1],opacity:this.opacity,screenShape:[e.drawingBufferWidth,e.drawingBufferHeight],pixelRatio:this.pixelRatio},n.bind(),n.draw(e.TRIANGLE_STRIP,this.vertexCount),n.unbind()}},m.drawPick=function(t){if(this.vertexCount){var e=this.gl,r=this.pickShader,n=this.vao;r.bind(),r.uniforms={model:t.model||f,view:t.view||f,projection:t.projection||f,pickId:this.pickId,clipBounds:d(this.clipBounds),screenShape:[e.drawingBufferWidth,e.drawingBufferHeight],pixelRatio:this.pixelRatio},n.bind(),n.draw(e.TRIANGLE_STRIP,this.vertexCount),n.unbind()}},m.update=function(t){var e,r;this.dirty=!0;var n=!!t.connectGaps;\\\"dashScale\\\"in t&&(this.dashScale=t.dashScale),this.hasAlpha=!1,\\\"opacity\\\"in t&&(this.opacity=+t.opacity,this.opacity<1&&(this.hasAlpha=!0));var i=[],a=[],o=[],c=0,u=0,h=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],f=t.position||t.positions;if(f){var d=t.color||t.colors||[0,0,0,1],g=t.lineWidth||1,v=!1;t:for(e=1;e<f.length;++e){var m,y,x,b=f[e-1],_=f[e];for(a.push(c),o.push(b.slice()),r=0;r<3;++r){if(isNaN(b[r])||isNaN(_[r])||!isFinite(b[r])||!isFinite(_[r])){if(!n&&i.length>0){for(var w=0;w<24;++w)i.push(i[i.length-12]);u+=2,v=!0}continue t}h[0][r]=Math.min(h[0][r],b[r],_[r]),h[1][r]=Math.max(h[1][r],b[r],_[r])}Array.isArray(d[0])?(m=d.length>e-1?d[e-1]:d.length>0?d[d.length-1]:[0,0,0,1],y=d.length>e?d[e]:d.length>0?d[d.length-1]:[0,0,0,1]):m=y=d,3===m.length&&(m=[m[0],m[1],m[2],1]),3===y.length&&(y=[y[0],y[1],y[2],1]),!this.hasAlpha&&m[3]<1&&(this.hasAlpha=!0),x=Array.isArray(g)?g.length>e-1?g[e-1]:g.length>0?g[g.length-1]:[0,0,0,1]:g;var k=c;if(c+=p(b,_),v){for(r=0;r<2;++r)i.push(b[0],b[1],b[2],_[0],_[1],_[2],k,x,m[0],m[1],m[2],m[3]);u+=2,v=!1}i.push(b[0],b[1],b[2],_[0],_[1],_[2],k,x,m[0],m[1],m[2],m[3],b[0],b[1],b[2],_[0],_[1],_[2],k,-x,m[0],m[1],m[2],m[3],_[0],_[1],_[2],b[0],b[1],b[2],c,-x,y[0],y[1],y[2],y[3],_[0],_[1],_[2],b[0],b[1],b[2],c,x,y[0],y[1],y[2],y[3]),u+=4}}if(this.buffer.update(i),a.push(c),o.push(f[f.length-1].slice()),this.bounds=h,this.vertexCount=u,this.points=o,this.arcLength=a,\\\"dashes\\\"in t){var T=t.dashes.slice();for(T.unshift(0),e=1;e<T.length;++e)T[e]=T[e-1]+T[e];var A=l(new Array(1024),[256,1,4]);for(e=0;e<256;++e){for(r=0;r<4;++r)A.set(e,0,r,0);1&s.le(T,T[T.length-1]*e/255)?A.set(e,0,0,0):A.set(e,0,0,255)}this.texture.setPixels(A)}},m.dispose=function(){this.shader.dispose(),this.vao.dispose(),this.buffer.dispose()},m.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=o(t.value[0],t.value[1],t.value[2],0),r=s.le(this.arcLength,e);if(r<0)return null;if(r===this.arcLength.length-1)return new g(this.arcLength[this.arcLength.length-1],this.points[this.points.length-1].slice(),r);for(var n=this.points[r],i=this.points[Math.min(r+1,this.points.length-1)],a=(e-this.arcLength[r])/(this.arcLength[r+1]-this.arcLength[r]),l=1-a,c=[0,0,0],u=0;u<3;++u)c[u]=l*n[u]+a*i[u];var h=Math.min(a<.5?r:r+1,this.points.length-1);return new g(e,c,h,this.points[h])}},{\\\"./lib/shaders\\\":254,\\\"binary-search-bounds\\\":256,\\\"gl-buffer\\\":241,\\\"gl-texture2d\\\":322,\\\"gl-vao\\\":327,\\\"glsl-read-float\\\":400,ndarray:450}],256:[function(t,e,r){arguments[4][111][0].apply(r,arguments)},{dup:111}],257:[function(t,e,r){e.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r*a-i*n;return o?(o=1/o,t[0]=a*o,t[1]=-n*o,t[2]=-i*o,t[3]=r*o,t):null}},{}],258:[function(t,e,r){e.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],c=e[7],u=e[8],h=u*o-s*c,f=-u*a+s*l,p=c*a-o*l,d=r*h+n*f+i*p;return d?(d=1/d,t[0]=h*d,t[1]=(-u*n+i*c)*d,t[2]=(s*n-i*o)*d,t[3]=f*d,t[4]=(u*r-i*l)*d,t[5]=(-s*r+i*a)*d,t[6]=p*d,t[7]=(-c*r+n*l)*d,t[8]=(o*r-n*a)*d,t):null}},{}],259:[function(t,e,r){e.exports=function(t){var e=new Float32Array(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}},{}],260:[function(t,e,r){e.exports=function(){var t=new Float32Array(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},{}],261:[function(t,e,r){e.exports=function(t){var e=t[0],r=t[1],n=t[2],i=t[3],a=t[4],o=t[5],s=t[6],l=t[7],c=t[8],u=t[9],h=t[10],f=t[11],p=t[12],d=t[13],g=t[14],v=t[15];return(e*o-r*a)*(h*v-f*g)-(e*s-n*a)*(u*v-f*d)+(e*l-i*a)*(u*g-h*d)+(r*s-n*o)*(c*v-f*p)-(r*l-i*o)*(c*g-h*p)+(n*l-i*s)*(c*d-u*p)}},{}],262:[function(t,e,r){e.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r+r,s=n+n,l=i+i,c=r*o,u=n*o,h=n*s,f=i*o,p=i*s,d=i*l,g=a*o,v=a*s,m=a*l;return t[0]=1-h-d,t[1]=u+m,t[2]=f-v,t[3]=0,t[4]=u-m,t[5]=1-c-d,t[6]=p+g,t[7]=0,t[8]=f+v,t[9]=p-g,t[10]=1-c-h,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},{}],263:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=n+n,l=i+i,c=a+a,u=n*s,h=n*l,f=n*c,p=i*l,d=i*c,g=a*c,v=o*s,m=o*l,y=o*c;return t[0]=1-(p+g),t[1]=h+y,t[2]=f-m,t[3]=0,t[4]=h-y,t[5]=1-(u+g),t[6]=d+v,t[7]=0,t[8]=f+m,t[9]=d-v,t[10]=1-(u+p),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}},{}],264:[function(t,e,r){e.exports=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},{}],265:[function(t,e,r){e.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],c=e[7],u=e[8],h=e[9],f=e[10],p=e[11],d=e[12],g=e[13],v=e[14],m=e[15],y=r*s-n*o,x=r*l-i*o,b=r*c-a*o,_=n*l-i*s,w=n*c-a*s,k=i*c-a*l,T=u*g-h*d,A=u*v-f*d,M=u*m-p*d,S=h*v-f*g,E=h*m-p*g,C=f*m-p*v,L=y*C-x*E+b*S+_*M-w*A+k*T;if(!L)return null;return L=1/L,t[0]=(s*C-l*E+c*S)*L,t[1]=(i*E-n*C-a*S)*L,t[2]=(g*k-v*w+m*_)*L,t[3]=(f*w-h*k-p*_)*L,t[4]=(l*M-o*C-c*A)*L,t[5]=(r*C-i*M+a*A)*L,t[6]=(v*b-d*k-m*x)*L,t[7]=(u*k-f*b+p*x)*L,t[8]=(o*E-s*M+c*T)*L,t[9]=(n*M-r*E-a*T)*L,t[10]=(d*w-g*b+m*y)*L,t[11]=(h*b-u*w-p*y)*L,t[12]=(s*A-o*S-l*T)*L,t[13]=(r*S-n*A+i*T)*L,t[14]=(g*x-d*_-v*y)*L,t[15]=(u*_-h*x+f*y)*L,t}},{}],266:[function(t,e,r){var n=t(\\\"./identity\\\");e.exports=function(t,e,r,i){var a,o,s,l,c,u,h,f,p,d,g=e[0],v=e[1],m=e[2],y=i[0],x=i[1],b=i[2],_=r[0],w=r[1],k=r[2];if(Math.abs(g-_)<1e-6&&Math.abs(v-w)<1e-6&&Math.abs(m-k)<1e-6)return n(t);h=g-_,f=v-w,p=m-k,d=1/Math.sqrt(h*h+f*f+p*p),a=x*(p*=d)-b*(f*=d),o=b*(h*=d)-y*p,s=y*f-x*h,(d=Math.sqrt(a*a+o*o+s*s))?(a*=d=1/d,o*=d,s*=d):(a=0,o=0,s=0);l=f*s-p*o,c=p*a-h*s,u=h*o-f*a,(d=Math.sqrt(l*l+c*c+u*u))?(l*=d=1/d,c*=d,u*=d):(l=0,c=0,u=0);return t[0]=a,t[1]=l,t[2]=h,t[3]=0,t[4]=o,t[5]=c,t[6]=f,t[7]=0,t[8]=s,t[9]=u,t[10]=p,t[11]=0,t[12]=-(a*g+o*v+s*m),t[13]=-(l*g+c*v+u*m),t[14]=-(h*g+f*v+p*m),t[15]=1,t}},{\\\"./identity\\\":264}],267:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],c=e[6],u=e[7],h=e[8],f=e[9],p=e[10],d=e[11],g=e[12],v=e[13],m=e[14],y=e[15],x=r[0],b=r[1],_=r[2],w=r[3];return t[0]=x*n+b*s+_*h+w*g,t[1]=x*i+b*l+_*f+w*v,t[2]=x*a+b*c+_*p+w*m,t[3]=x*o+b*u+_*d+w*y,x=r[4],b=r[5],_=r[6],w=r[7],t[4]=x*n+b*s+_*h+w*g,t[5]=x*i+b*l+_*f+w*v,t[6]=x*a+b*c+_*p+w*m,t[7]=x*o+b*u+_*d+w*y,x=r[8],b=r[9],_=r[10],w=r[11],t[8]=x*n+b*s+_*h+w*g,t[9]=x*i+b*l+_*f+w*v,t[10]=x*a+b*c+_*p+w*m,t[11]=x*o+b*u+_*d+w*y,x=r[12],b=r[13],_=r[14],w=r[15],t[12]=x*n+b*s+_*h+w*g,t[13]=x*i+b*l+_*f+w*v,t[14]=x*a+b*c+_*p+w*m,t[15]=x*o+b*u+_*d+w*y,t}},{}],268:[function(t,e,r){e.exports=function(t,e,r,n,i,a,o){var s=1/(e-r),l=1/(n-i),c=1/(a-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*c,t[11]=0,t[12]=(e+r)*s,t[13]=(i+n)*l,t[14]=(o+a)*c,t[15]=1,t}},{}],269:[function(t,e,r){e.exports=function(t,e,r,n,i){var a=1/Math.tan(e/2),o=1/(n-i);return t[0]=a/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(i+n)*o,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*i*n*o,t[15]=0,t}},{}],270:[function(t,e,r){e.exports=function(t,e,r,n){var i,a,o,s,l,c,u,h,f,p,d,g,v,m,y,x,b,_,w,k,T,A,M,S,E=n[0],C=n[1],L=n[2],P=Math.sqrt(E*E+C*C+L*L);if(Math.abs(P)<1e-6)return null;E*=P=1/P,C*=P,L*=P,i=Math.sin(r),a=Math.cos(r),o=1-a,s=e[0],l=e[1],c=e[2],u=e[3],h=e[4],f=e[5],p=e[6],d=e[7],g=e[8],v=e[9],m=e[10],y=e[11],x=E*E*o+a,b=C*E*o+L*i,_=L*E*o-C*i,w=E*C*o-L*i,k=C*C*o+a,T=L*C*o+E*i,A=E*L*o+C*i,M=C*L*o-E*i,S=L*L*o+a,t[0]=s*x+h*b+g*_,t[1]=l*x+f*b+v*_,t[2]=c*x+p*b+m*_,t[3]=u*x+d*b+y*_,t[4]=s*w+h*k+g*T,t[5]=l*w+f*k+v*T,t[6]=c*w+p*k+m*T,t[7]=u*w+d*k+y*T,t[8]=s*A+h*M+g*S,t[9]=l*A+f*M+v*S,t[10]=c*A+p*M+m*S,t[11]=u*A+d*M+y*S,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t}},{}],271:[function(t,e,r){e.exports=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[4],o=e[5],s=e[6],l=e[7],c=e[8],u=e[9],h=e[10],f=e[11];e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t[4]=a*i+c*n,t[5]=o*i+u*n,t[6]=s*i+h*n,t[7]=l*i+f*n,t[8]=c*i-a*n,t[9]=u*i-o*n,t[10]=h*i-s*n,t[11]=f*i-l*n,t}},{}],272:[function(t,e,r){e.exports=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],c=e[8],u=e[9],h=e[10],f=e[11];e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t[0]=a*i-c*n,t[1]=o*i-u*n,t[2]=s*i-h*n,t[3]=l*i-f*n,t[8]=a*n+c*i,t[9]=o*n+u*i,t[10]=s*n+h*i,t[11]=l*n+f*i,t}},{}],273:[function(t,e,r){e.exports=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],c=e[4],u=e[5],h=e[6],f=e[7];e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t[0]=a*i+c*n,t[1]=o*i+u*n,t[2]=s*i+h*n,t[3]=l*i+f*n,t[4]=c*i-a*n,t[5]=u*i-o*n,t[6]=h*i-s*n,t[7]=f*i-l*n,t}},{}],274:[function(t,e,r){e.exports=function(t,e,r){var n=r[0],i=r[1],a=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*a,t[9]=e[9]*a,t[10]=e[10]*a,t[11]=e[11]*a,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}},{}],275:[function(t,e,r){e.exports=function(t,e,r){var n,i,a,o,s,l,c,u,h,f,p,d,g=r[0],v=r[1],m=r[2];e===t?(t[12]=e[0]*g+e[4]*v+e[8]*m+e[12],t[13]=e[1]*g+e[5]*v+e[9]*m+e[13],t[14]=e[2]*g+e[6]*v+e[10]*m+e[14],t[15]=e[3]*g+e[7]*v+e[11]*m+e[15]):(n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],c=e[6],u=e[7],h=e[8],f=e[9],p=e[10],d=e[11],t[0]=n,t[1]=i,t[2]=a,t[3]=o,t[4]=s,t[5]=l,t[6]=c,t[7]=u,t[8]=h,t[9]=f,t[10]=p,t[11]=d,t[12]=n*g+s*v+h*m+e[12],t[13]=i*g+l*v+f*m+e[13],t[14]=a*g+c*v+p*m+e[14],t[15]=o*g+u*v+d*m+e[15]);return t}},{}],276:[function(t,e,r){e.exports=function(t,e){if(t===e){var r=e[1],n=e[2],i=e[3],a=e[6],o=e[7],s=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=r,t[6]=e[9],t[7]=e[13],t[8]=n,t[9]=a,t[11]=e[14],t[12]=i,t[13]=o,t[14]=s}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}},{}],277:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){switch(e.length){case 0:break;case 1:t[0]=1/e[0];break;case 4:n(t,e);break;case 9:i(t,e);break;case 16:a(t,e);break;default:throw new Error(\\\"currently supports matrices up to 4x4\\\")}return t};var n=t(\\\"gl-mat2/invert\\\"),i=t(\\\"gl-mat3/invert\\\"),a=t(\\\"gl-mat4/invert\\\")},{\\\"gl-mat2/invert\\\":257,\\\"gl-mat3/invert\\\":258,\\\"gl-mat4/invert\\\":265}],278:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"barycentric\\\"),i=t(\\\"polytope-closest-point/lib/closest_point_2d.js\\\");function a(t,e){for(var r=[0,0,0,0],n=0;n<4;++n)for(var i=0;i<4;++i)r[i]+=t[4*n+i]*e[n];return r}function o(t,e,r,n,i){for(var o=a(n,a(r,a(e,[t[0],t[1],t[2],1]))),s=0;s<3;++s)o[s]/=o[3];return[.5*i[0]*(1+o[0]),.5*i[1]*(1-o[1])]}e.exports=function(t,e,r,a,s,l){if(1===t.length)return[0,t[0].slice()];for(var c=new Array(t.length),u=0;u<t.length;++u)c[u]=o(t[u],r,a,s,l);for(var h=0,f=1/0,u=0;u<c.length;++u){for(var p=0,d=0;d<2;++d)p+=Math.pow(c[u][d]-e[d],2);p<f&&(f=p,h=u)}for(var g=function(t,e){if(2===t.length){for(var r=0,a=0,o=0;o<2;++o)r+=Math.pow(e[o]-t[0][o],2),a+=Math.pow(e[o]-t[1][o],2);return r=Math.sqrt(r),a=Math.sqrt(a),r+a<1e-6?[1,0]:[a/(r+a),r/(a+r)]}if(3===t.length){var s=[0,0];return i(t[0],t[1],t[2],e,s),n(t,s)}return[]}(c,e),v=0,u=0;u<3;++u){if(g[u]<-.001||g[u]>1.0001)return null;v+=g[u]}if(Math.abs(v-1)>.001)return null;return[h,function(t,e){for(var r=[0,0,0],n=0;n<t.length;++n)for(var i=t[n],a=e[n],o=0;o<3;++o)r[o]+=a*i[o];return r}(t,g),g]}},{barycentric:73,\\\"polytope-closest-point/lib/closest_point_2d.js\\\":481}],279:[function(t,e,r){var n=t(\\\"glslify\\\"),i=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 position, normal;\\\\nattribute vec4 color;\\\\nattribute vec2 uv;\\\\n\\\\nuniform mat4 model\\\\n           , view\\\\n           , projection\\\\n           , inverseModel;\\\\nuniform vec3 eyePosition\\\\n           , lightPosition;\\\\n\\\\nvarying vec3 f_normal\\\\n           , f_lightDirection\\\\n           , f_eyeDirection\\\\n           , f_data;\\\\nvarying vec4 f_color;\\\\nvarying vec2 f_uv;\\\\n\\\\nvec4 project(vec3 p) {\\\\n  return projection * view * model * vec4(p, 1.0);\\\\n}\\\\n\\\\nvoid main() {\\\\n  gl_Position      = project(position);\\\\n\\\\n  //Lighting geometry parameters\\\\n  vec4 cameraCoordinate = view * vec4(position , 1.0);\\\\n  cameraCoordinate.xyz /= cameraCoordinate.w;\\\\n  f_lightDirection = lightPosition - cameraCoordinate.xyz;\\\\n  f_eyeDirection   = eyePosition - cameraCoordinate.xyz;\\\\n  f_normal  = normalize((vec4(normal, 0.0) * inverseModel).xyz);\\\\n\\\\n  f_color          = color;\\\\n  f_data           = position;\\\\n  f_uv             = uv;\\\\n}\\\\n\\\"]),a=n([\\\"#extension GL_OES_standard_derivatives : enable\\\\n\\\\nprecision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nfloat beckmannDistribution(float x, float roughness) {\\\\n  float NdotH = max(x, 0.0001);\\\\n  float cos2Alpha = NdotH * NdotH;\\\\n  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\\\\n  float roughness2 = roughness * roughness;\\\\n  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\\\\n  return exp(tan2Alpha / roughness2) / denom;\\\\n}\\\\n\\\\nfloat cookTorranceSpecular(\\\\n  vec3 lightDirection,\\\\n  vec3 viewDirection,\\\\n  vec3 surfaceNormal,\\\\n  float roughness,\\\\n  float fresnel) {\\\\n\\\\n  float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\\\\n  float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\\\\n\\\\n  //Half angle vector\\\\n  vec3 H = normalize(lightDirection + viewDirection);\\\\n\\\\n  //Geometric term\\\\n  float NdotH = max(dot(surfaceNormal, H), 0.0);\\\\n  float VdotH = max(dot(viewDirection, H), 0.000001);\\\\n  float LdotH = max(dot(lightDirection, H), 0.000001);\\\\n  float G1 = (2.0 * NdotH * VdotN) / VdotH;\\\\n  float G2 = (2.0 * NdotH * LdotN) / LdotH;\\\\n  float G = min(1.0, min(G1, G2));\\\\n  \\\\n  //Distribution term\\\\n  float D = beckmannDistribution(NdotH, roughness);\\\\n\\\\n  //Fresnel term\\\\n  float F = pow(1.0 - VdotN, fresnel);\\\\n\\\\n  //Multiply terms and done\\\\n  return  G * F * D / max(3.14159265 * VdotN, 0.000001);\\\\n}\\\\n\\\\n//#pragma glslify: beckmann = require(glsl-specular-beckmann) // used in gl-surface3d\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3 clipBounds[2];\\\\nuniform float roughness\\\\n            , fresnel\\\\n            , kambient\\\\n            , kdiffuse\\\\n            , kspecular;\\\\nuniform sampler2D texture;\\\\n\\\\nvarying vec3 f_normal\\\\n           , f_lightDirection\\\\n           , f_eyeDirection\\\\n           , f_data;\\\\nvarying vec4 f_color;\\\\nvarying vec2 f_uv;\\\\n\\\\nvoid main() {\\\\n  if (f_color.a == 0.0 ||\\\\n    outOfRange(clipBounds[0], clipBounds[1], f_data)\\\\n  ) discard;\\\\n\\\\n  vec3 N = normalize(f_normal);\\\\n  vec3 L = normalize(f_lightDirection);\\\\n  vec3 V = normalize(f_eyeDirection);\\\\n\\\\n  if(gl_FrontFacing) {\\\\n    N = -N;\\\\n  }\\\\n\\\\n  float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\\\\n  //float specular = max(0.0, beckmann(L, V, N, roughness)); // used in gl-surface3d\\\\n\\\\n  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\\\\n\\\\n  vec4 surfaceColor = vec4(f_color.rgb, 1.0) * texture2D(texture, f_uv);\\\\n  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\\\\n\\\\n  gl_FragColor = litColor * f_color.a;\\\\n}\\\\n\\\"]),o=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 position;\\\\nattribute vec4 color;\\\\nattribute vec2 uv;\\\\n\\\\nuniform mat4 model, view, projection;\\\\n\\\\nvarying vec4 f_color;\\\\nvarying vec3 f_data;\\\\nvarying vec2 f_uv;\\\\n\\\\nvoid main() {\\\\n  gl_Position = projection * view * model * vec4(position, 1.0);\\\\n  f_color = color;\\\\n  f_data  = position;\\\\n  f_uv    = uv;\\\\n}\\\"]),s=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3 clipBounds[2];\\\\nuniform sampler2D texture;\\\\nuniform float opacity;\\\\n\\\\nvarying vec4 f_color;\\\\nvarying vec3 f_data;\\\\nvarying vec2 f_uv;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_data)) discard;\\\\n\\\\n  gl_FragColor = f_color * texture2D(texture, f_uv) * opacity;\\\\n}\\\"]),l=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nattribute vec3 position;\\\\nattribute vec4 color;\\\\nattribute vec2 uv;\\\\nattribute float pointSize;\\\\n\\\\nuniform mat4 model, view, projection;\\\\nuniform vec3 clipBounds[2];\\\\n\\\\nvarying vec4 f_color;\\\\nvarying vec2 f_uv;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\\\n\\\\n    gl_Position = vec4(0.0, 0.0 ,0.0 ,0.0);\\\\n  } else {\\\\n    gl_Position = projection * view * model * vec4(position, 1.0);\\\\n  }\\\\n  gl_PointSize = pointSize;\\\\n  f_color = color;\\\\n  f_uv = uv;\\\\n}\\\"]),c=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nuniform sampler2D texture;\\\\nuniform float opacity;\\\\n\\\\nvarying vec4 f_color;\\\\nvarying vec2 f_uv;\\\\n\\\\nvoid main() {\\\\n  vec2 pointR = gl_PointCoord.xy - vec2(0.5, 0.5);\\\\n  if(dot(pointR, pointR) > 0.25) {\\\\n    discard;\\\\n  }\\\\n  gl_FragColor = f_color * texture2D(texture, f_uv) * opacity;\\\\n}\\\"]),u=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 position;\\\\nattribute vec4 id;\\\\n\\\\nuniform mat4 model, view, projection;\\\\n\\\\nvarying vec3 f_position;\\\\nvarying vec4 f_id;\\\\n\\\\nvoid main() {\\\\n  gl_Position = projection * view * model * vec4(position, 1.0);\\\\n  f_id        = id;\\\\n  f_position  = position;\\\\n}\\\"]),h=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3  clipBounds[2];\\\\nuniform float pickId;\\\\n\\\\nvarying vec3 f_position;\\\\nvarying vec4 f_id;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\\\n\\\\n  gl_FragColor = vec4(pickId, f_id.xyz);\\\\n}\\\"]),f=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nattribute vec3  position;\\\\nattribute float pointSize;\\\\nattribute vec4  id;\\\\n\\\\nuniform mat4 model, view, projection;\\\\nuniform vec3 clipBounds[2];\\\\n\\\\nvarying vec3 f_position;\\\\nvarying vec4 f_id;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\\\n\\\\n    gl_Position = vec4(0.0, 0.0, 0.0, 0.0);\\\\n  } else {\\\\n    gl_Position  = projection * view * model * vec4(position, 1.0);\\\\n    gl_PointSize = pointSize;\\\\n  }\\\\n  f_id         = id;\\\\n  f_position   = position;\\\\n}\\\"]),p=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 position;\\\\n\\\\nuniform mat4 model, view, projection;\\\\n\\\\nvoid main() {\\\\n  gl_Position = projection * view * model * vec4(position, 1.0);\\\\n}\\\"]),d=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nuniform vec3 contourColor;\\\\n\\\\nvoid main() {\\\\n  gl_FragColor = vec4(contourColor, 1.0);\\\\n}\\\\n\\\"]);r.meshShader={vertex:i,fragment:a,attributes:[{name:\\\"position\\\",type:\\\"vec3\\\"},{name:\\\"normal\\\",type:\\\"vec3\\\"},{name:\\\"color\\\",type:\\\"vec4\\\"},{name:\\\"uv\\\",type:\\\"vec2\\\"}]},r.wireShader={vertex:o,fragment:s,attributes:[{name:\\\"position\\\",type:\\\"vec3\\\"},{name:\\\"color\\\",type:\\\"vec4\\\"},{name:\\\"uv\\\",type:\\\"vec2\\\"}]},r.pointShader={vertex:l,fragment:c,attributes:[{name:\\\"position\\\",type:\\\"vec3\\\"},{name:\\\"color\\\",type:\\\"vec4\\\"},{name:\\\"uv\\\",type:\\\"vec2\\\"},{name:\\\"pointSize\\\",type:\\\"float\\\"}]},r.pickShader={vertex:u,fragment:h,attributes:[{name:\\\"position\\\",type:\\\"vec3\\\"},{name:\\\"id\\\",type:\\\"vec4\\\"}]},r.pointPickShader={vertex:f,fragment:h,attributes:[{name:\\\"position\\\",type:\\\"vec3\\\"},{name:\\\"pointSize\\\",type:\\\"float\\\"},{name:\\\"id\\\",type:\\\"vec4\\\"}]},r.contourShader={vertex:p,fragment:d,attributes:[{name:\\\"position\\\",type:\\\"vec3\\\"}]}},{glslify:409}],280:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"gl-shader\\\"),i=t(\\\"gl-buffer\\\"),a=t(\\\"gl-vao\\\"),o=t(\\\"gl-texture2d\\\"),s=t(\\\"normals\\\"),l=t(\\\"gl-mat4/multiply\\\"),c=t(\\\"gl-mat4/invert\\\"),u=t(\\\"ndarray\\\"),h=t(\\\"colormap\\\"),f=t(\\\"simplicial-complex-contour\\\"),p=t(\\\"typedarray-pool\\\"),d=t(\\\"./lib/shaders\\\"),g=t(\\\"./lib/closest-point\\\"),v=d.meshShader,m=d.wireShader,y=d.pointShader,x=d.pickShader,b=d.pointPickShader,_=d.contourShader,w=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function k(t,e,r,n,i,a,o,s,l,c,u,h,f,p,d,g,v,m,y,x,b,_,k,T,A,M,S){this.gl=t,this.pixelRatio=1,this.cells=[],this.positions=[],this.intensity=[],this.texture=e,this.dirty=!0,this.triShader=r,this.lineShader=n,this.pointShader=i,this.pickShader=a,this.pointPickShader=o,this.contourShader=s,this.trianglePositions=l,this.triangleColors=u,this.triangleNormals=f,this.triangleUVs=h,this.triangleIds=c,this.triangleVAO=p,this.triangleCount=0,this.lineWidth=1,this.edgePositions=d,this.edgeColors=v,this.edgeUVs=m,this.edgeIds=g,this.edgeVAO=y,this.edgeCount=0,this.pointPositions=x,this.pointColors=_,this.pointUVs=k,this.pointSizes=T,this.pointIds=b,this.pointVAO=A,this.pointCount=0,this.contourLineWidth=1,this.contourPositions=M,this.contourVAO=S,this.contourCount=0,this.contourColor=[0,0,0],this.contourEnable=!0,this.pickId=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition=[1e5,1e5,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.opacity=1,this.hasAlpha=!1,this.opacityscale=!1,this._model=w,this._view=w,this._projection=w,this._resolution=[1,1]}var T=k.prototype;function A(t,e){if(!e)return 1;if(!e.length)return 1;for(var r=0;r<e.length;++r){if(e.length<2)return 1;if(e[r][0]===t)return e[r][1];if(e[r][0]>t&&r>0){var n=(e[r][0]-t)/(e[r][0]-e[r-1][0]);return e[r][1]*(1-n)+n*e[r-1][1]}}return 1}function M(t){var e=n(t,y.vertex,y.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e.attributes.pointSize.location=4,e}function S(t){var e=n(t,x.vertex,x.fragment);return e.attributes.position.location=0,e.attributes.id.location=1,e}function E(t){var e=n(t,b.vertex,b.fragment);return e.attributes.position.location=0,e.attributes.id.location=1,e.attributes.pointSize.location=4,e}function C(t){var e=n(t,_.vertex,_.fragment);return e.attributes.position.location=0,e}T.isOpaque=function(){return!this.hasAlpha},T.isTransparent=function(){return this.hasAlpha},T.pickSlots=1,T.setPickBase=function(t){this.pickId=t},T.highlight=function(t){if(t&&this.contourEnable){for(var e=f(this.cells,this.intensity,t.intensity),r=e.cells,n=e.vertexIds,i=e.vertexWeights,a=r.length,o=p.mallocFloat32(6*a),s=0,l=0;l<a;++l)for(var c=r[l],u=0;u<2;++u){var h=c[0];2===c.length&&(h=c[u]);for(var d=n[h][0],g=n[h][1],v=i[h],m=1-v,y=this.positions[d],x=this.positions[g],b=0;b<3;++b)o[s++]=v*y[b]+m*x[b]}this.contourCount=s/3|0,this.contourPositions.update(o.subarray(0,s)),p.free(o)}else this.contourCount=0},T.update=function(t){t=t||{};var e=this.gl;this.dirty=!0,\\\"contourEnable\\\"in t&&(this.contourEnable=t.contourEnable),\\\"contourColor\\\"in t&&(this.contourColor=t.contourColor),\\\"lineWidth\\\"in t&&(this.lineWidth=t.lineWidth),\\\"lightPosition\\\"in t&&(this.lightPosition=t.lightPosition),this.hasAlpha=!1,\\\"opacity\\\"in t&&(this.opacity=t.opacity,this.opacity<1&&(this.hasAlpha=!0)),\\\"opacityscale\\\"in t&&(this.opacityscale=t.opacityscale,this.hasAlpha=!0),\\\"ambient\\\"in t&&(this.ambientLight=t.ambient),\\\"diffuse\\\"in t&&(this.diffuseLight=t.diffuse),\\\"specular\\\"in t&&(this.specularLight=t.specular),\\\"roughness\\\"in t&&(this.roughness=t.roughness),\\\"fresnel\\\"in t&&(this.fresnel=t.fresnel),t.texture?(this.texture.dispose(),this.texture=o(e,t.texture)):t.colormap&&(this.texture.shape=[256,256],this.texture.minFilter=e.LINEAR_MIPMAP_LINEAR,this.texture.magFilter=e.LINEAR,this.texture.setPixels(function(t,e){for(var r=h({colormap:t,nshades:256,format:\\\"rgba\\\"}),n=new Uint8Array(1024),i=0;i<256;++i){for(var a=r[i],o=0;o<3;++o)n[4*i+o]=a[o];n[4*i+3]=e?255*A(i/255,e):255*a[3]}return u(n,[256,256,4],[4,0,1])}(t.colormap,this.opacityscale)),this.texture.generateMipmap());var r=t.cells,n=t.positions;if(n&&r){var i=[],a=[],l=[],c=[],f=[],p=[],d=[],g=[],v=[],m=[],y=[],x=[],b=[],_=[];this.cells=r,this.positions=n;var w=t.vertexNormals,k=t.cellNormals,T=void 0===t.vertexNormalsEpsilon?1e-6:t.vertexNormalsEpsilon,M=void 0===t.faceNormalsEpsilon?1e-6:t.faceNormalsEpsilon;t.useFacetNormals&&!k&&(k=s.faceNormals(r,n,M)),k||w||(w=s.vertexNormals(r,n,T));var S=t.vertexColors,E=t.cellColors,C=t.meshColor||[1,1,1,1],L=t.vertexUVs,P=t.vertexIntensity,O=t.cellUVs,z=t.cellIntensity,I=1/0,D=-1/0;if(!L&&!O)if(P)if(t.vertexIntensityBounds)I=+t.vertexIntensityBounds[0],D=+t.vertexIntensityBounds[1];else for(var R=0;R<P.length;++R){var F=P[R];I=Math.min(I,F),D=Math.max(D,F)}else if(z)for(R=0;R<z.length;++R){F=z[R];I=Math.min(I,F),D=Math.max(D,F)}else for(R=0;R<n.length;++R){F=n[R][2];I=Math.min(I,F),D=Math.max(D,F)}this.intensity=P||(z?function(t,e,r){for(var n=new Array(e),i=0;i<e;++i)n[i]=0;var a=t.length;for(i=0;i<a;++i)for(var o=t[i],s=0;s<o.length;++s)n[o[s]]=r[i];return n}(r,n.length,z):function(t){for(var e=t.length,r=new Array(e),n=0;n<e;++n)r[n]=t[n][2];return r}(n));var B=t.pointSizes,N=t.pointSize||1;this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(R=0;R<n.length;++R)for(var j=n[R],U=0;U<3;++U)!isNaN(j[U])&&isFinite(j[U])&&(this.bounds[0][U]=Math.min(this.bounds[0][U],j[U]),this.bounds[1][U]=Math.max(this.bounds[1][U],j[U]));var V=0,q=0,H=0;t:for(R=0;R<r.length;++R){var G=r[R];switch(G.length){case 1:for(j=n[W=G[0]],U=0;U<3;++U)if(isNaN(j[U])||!isFinite(j[U]))continue t;m.push(j[0],j[1],j[2]),X=S?S[W]:E?E[R]:C,this.opacityscale&&P?a.push(X[0],X[1],X[2],this.opacity*A((P[W]-I)/(D-I),this.opacityscale)):3===X.length?y.push(X[0],X[1],X[2],this.opacity):(y.push(X[0],X[1],X[2],X[3]*this.opacity),!this.hasAlpha&&X[3]<1&&(this.hasAlpha=!0)),Z=L?L[W]:P?[(P[W]-I)/(D-I),0]:O?O[R]:z?[(z[R]-I)/(D-I),0]:[(j[2]-I)/(D-I),0],x.push(Z[0],Z[1]),B?b.push(B[W]):b.push(N),_.push(R),H+=1;break;case 2:for(U=0;U<2;++U){j=n[W=G[U]];for(var Y=0;Y<3;++Y)if(isNaN(j[Y])||!isFinite(j[Y]))continue t}for(U=0;U<2;++U){j=n[W=G[U]];p.push(j[0],j[1],j[2]),X=S?S[W]:E?E[R]:C,this.opacityscale&&P?a.push(X[0],X[1],X[2],this.opacity*A((P[W]-I)/(D-I),this.opacityscale)):3===X.length?d.push(X[0],X[1],X[2],this.opacity):(d.push(X[0],X[1],X[2],X[3]*this.opacity),!this.hasAlpha&&X[3]<1&&(this.hasAlpha=!0)),Z=L?L[W]:P?[(P[W]-I)/(D-I),0]:O?O[R]:z?[(z[R]-I)/(D-I),0]:[(j[2]-I)/(D-I),0],g.push(Z[0],Z[1]),v.push(R)}q+=1;break;case 3:for(U=0;U<3;++U)for(j=n[W=G[U]],Y=0;Y<3;++Y)if(isNaN(j[Y])||!isFinite(j[Y]))continue t;for(U=0;U<3;++U){var W,X,Z,J;j=n[W=G[2-U]];i.push(j[0],j[1],j[2]),X=S?S[W]:E?E[R]:C,this.opacityscale&&P?a.push(X[0],X[1],X[2],this.opacity*A((P[W]-I)/(D-I),this.opacityscale)):3===X.length?a.push(X[0],X[1],X[2],this.opacity):(a.push(X[0],X[1],X[2],X[3]*this.opacity),!this.hasAlpha&&X[3]<1&&(this.hasAlpha=!0)),Z=L?L[W]:P?[(P[W]-I)/(D-I),0]:O?O[R]:z?[(z[R]-I)/(D-I),0]:[(j[2]-I)/(D-I),0],c.push(Z[0],Z[1]),J=w?w[W]:k[R],l.push(J[0],J[1],J[2]),f.push(R)}V+=1}}this.pointCount=H,this.edgeCount=q,this.triangleCount=V,this.pointPositions.update(m),this.pointColors.update(y),this.pointUVs.update(x),this.pointSizes.update(b),this.pointIds.update(new Uint32Array(_)),this.edgePositions.update(p),this.edgeColors.update(d),this.edgeUVs.update(g),this.edgeIds.update(new Uint32Array(v)),this.trianglePositions.update(i),this.triangleColors.update(a),this.triangleUVs.update(c),this.triangleNormals.update(l),this.triangleIds.update(new Uint32Array(f))}},T.drawTransparent=T.draw=function(t){t=t||{};for(var e=this.gl,r=t.model||w,n=t.view||w,i=t.projection||w,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);var s={model:r,view:n,projection:i,inverseModel:w.slice(),clipBounds:a,kambient:this.ambientLight,kdiffuse:this.diffuseLight,kspecular:this.specularLight,roughness:this.roughness,fresnel:this.fresnel,eyePosition:[0,0,0],lightPosition:[0,0,0],contourColor:this.contourColor,texture:0};s.inverseModel=c(s.inverseModel,s.model),e.disable(e.CULL_FACE),this.texture.bind(0);var u=new Array(16);l(u,s.view,s.model),l(u,s.projection,u),c(u,u);for(o=0;o<3;++o)s.eyePosition[o]=u[12+o]/u[15];var h,f=u[15];for(o=0;o<3;++o)f+=this.lightPosition[o]*u[4*o+3];for(o=0;o<3;++o){for(var p=u[12+o],d=0;d<3;++d)p+=u[4*d+o]*this.lightPosition[d];s.lightPosition[o]=p/f}this.triangleCount>0&&((h=this.triShader).bind(),h.uniforms=s,this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind());this.edgeCount>0&&this.lineWidth>0&&((h=this.lineShader).bind(),h.uniforms=s,this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind());this.pointCount>0&&((h=this.pointShader).bind(),h.uniforms=s,this.pointVAO.bind(),e.drawArrays(e.POINTS,0,this.pointCount),this.pointVAO.unbind());this.contourEnable&&this.contourCount>0&&this.contourLineWidth>0&&((h=this.contourShader).bind(),h.uniforms=s,this.contourVAO.bind(),e.drawArrays(e.LINES,0,this.contourCount),this.contourVAO.unbind())},T.drawPick=function(t){t=t||{};for(var e=this.gl,r=t.model||w,n=t.view||w,i=t.projection||w,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);this._model=[].slice.call(r),this._view=[].slice.call(n),this._projection=[].slice.call(i),this._resolution=[e.drawingBufferWidth,e.drawingBufferHeight];var s,l={model:r,view:n,projection:i,clipBounds:a,pickId:this.pickId/255};((s=this.pickShader).bind(),s.uniforms=l,this.triangleCount>0&&(this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()),this.edgeCount>0&&(this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind()),this.pointCount>0)&&((s=this.pointPickShader).bind(),s.uniforms=l,this.pointVAO.bind(),e.drawArrays(e.POINTS,0,this.pointCount),this.pointVAO.unbind())},T.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;for(var e=t.value[0]+256*t.value[1]+65536*t.value[2],r=this.cells[e],n=this.positions,i=new Array(r.length),a=0;a<r.length;++a)i[a]=n[r[a]];var o=g(i,[t.coord[0],this._resolution[1]-t.coord[1]],this._model,this._view,this._projection,this._resolution);if(!o)return null;var s=o[2],l=0;for(a=0;a<r.length;++a)l+=s[a]*this.intensity[r[a]];return{position:o[1],index:r[o[0]],cell:r,cellId:e,intensity:l,dataCoordinate:this.positions[r[o[0]]]}},T.dispose=function(){this.texture.dispose(),this.triShader.dispose(),this.lineShader.dispose(),this.pointShader.dispose(),this.pickShader.dispose(),this.pointPickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleNormals.dispose(),this.triangleIds.dispose(),this.edgeVAO.dispose(),this.edgePositions.dispose(),this.edgeColors.dispose(),this.edgeUVs.dispose(),this.edgeIds.dispose(),this.pointVAO.dispose(),this.pointPositions.dispose(),this.pointColors.dispose(),this.pointUVs.dispose(),this.pointSizes.dispose(),this.pointIds.dispose(),this.contourVAO.dispose(),this.contourPositions.dispose(),this.contourShader.dispose()},e.exports=function(t,e){if(1===arguments.length&&(t=(e=t).gl),!(t.getExtension(\\\"OES_standard_derivatives\\\")||t.getExtension(\\\"MOZ_OES_standard_derivatives\\\")||t.getExtension(\\\"WEBKIT_OES_standard_derivatives\\\")))throw new Error(\\\"derivatives not supported\\\");var r=function(t){var e=n(t,v.vertex,v.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e.attributes.normal.location=4,e}(t),s=function(t){var e=n(t,m.vertex,m.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e}(t),l=M(t),c=S(t),h=E(t),f=C(t),p=o(t,u(new Uint8Array([255,255,255,255]),[1,1,4]));p.generateMipmap(),p.minFilter=t.LINEAR_MIPMAP_LINEAR,p.magFilter=t.LINEAR;var d=i(t),g=i(t),y=i(t),x=i(t),b=i(t),_=a(t,[{buffer:d,type:t.FLOAT,size:3},{buffer:b,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:g,type:t.FLOAT,size:4},{buffer:y,type:t.FLOAT,size:2},{buffer:x,type:t.FLOAT,size:3}]),w=i(t),T=i(t),A=i(t),L=i(t),P=a(t,[{buffer:w,type:t.FLOAT,size:3},{buffer:L,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:T,type:t.FLOAT,size:4},{buffer:A,type:t.FLOAT,size:2}]),O=i(t),z=i(t),I=i(t),D=i(t),R=i(t),F=a(t,[{buffer:O,type:t.FLOAT,size:3},{buffer:R,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:z,type:t.FLOAT,size:4},{buffer:I,type:t.FLOAT,size:2},{buffer:D,type:t.FLOAT,size:1}]),B=i(t),N=new k(t,p,r,s,l,c,h,f,d,b,g,y,x,_,w,L,T,A,P,O,R,z,I,D,F,B,a(t,[{buffer:B,type:t.FLOAT,size:3}]));return N.update(e),N}},{\\\"./lib/closest-point\\\":278,\\\"./lib/shaders\\\":279,colormap:126,\\\"gl-buffer\\\":241,\\\"gl-mat4/invert\\\":265,\\\"gl-mat4/multiply\\\":267,\\\"gl-shader\\\":301,\\\"gl-texture2d\\\":322,\\\"gl-vao\\\":327,ndarray:450,normals:453,\\\"simplicial-complex-contour\\\":518,\\\"typedarray-pool\\\":545}],281:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){var e=t.gl,r=n(e,[0,0,0,1,1,0,1,1]),s=i(e,a.boxVert,a.lineFrag);return new o(t,r,s)};var n=t(\\\"gl-buffer\\\"),i=t(\\\"gl-shader\\\"),a=t(\\\"./shaders\\\");function o(t,e,r){this.plot=t,this.vbo=e,this.shader=r}var s,l,c=o.prototype;c.bind=function(){var t=this.shader;this.vbo.bind(),this.shader.bind(),t.attributes.coord.pointer(),t.uniforms.screenBox=this.plot.screenBox},c.drawBox=(s=[0,0],l=[0,0],function(t,e,r,n,i){var a=this.plot,o=this.shader,c=a.gl;s[0]=t,s[1]=e,l[0]=r,l[1]=n,o.uniforms.lo=s,o.uniforms.hi=l,o.uniforms.color=i,c.drawArrays(c.TRIANGLE_STRIP,0,4)}),c.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},{\\\"./shaders\\\":284,\\\"gl-buffer\\\":241,\\\"gl-shader\\\":301}],282:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){var e=t.gl,r=n(e),a=i(e,o.gridVert,o.gridFrag),l=i(e,o.tickVert,o.gridFrag);return new s(t,r,a,l)};var n=t(\\\"gl-buffer\\\"),i=t(\\\"gl-shader\\\"),a=t(\\\"binary-search-bounds\\\"),o=t(\\\"./shaders\\\");function s(t,e,r,n){this.plot=t,this.vbo=e,this.shader=r,this.tickShader=n,this.ticks=[[],[]]}function l(t,e){return t-e}var c,u,h,f,p,d=s.prototype;d.draw=(c=[0,0],u=[0,0],h=[0,0],function(){for(var t=this.plot,e=this.vbo,r=this.shader,n=this.ticks,i=t.gl,a=t._tickBounds,o=t.dataBox,s=t.viewBox,l=t.gridLineWidth,f=t.gridLineColor,p=t.gridLineEnable,d=t.pixelRatio,g=0;g<2;++g){var v=a[g],m=a[g+2]-v,y=.5*(o[g+2]+o[g]),x=o[g+2]-o[g];u[g]=2*m/x,c[g]=2*(v-y)/x}r.bind(),e.bind(),r.attributes.dataCoord.pointer(),r.uniforms.dataShift=c,r.uniforms.dataScale=u;var b=0;for(g=0;g<2;++g){h[0]=h[1]=0,h[g]=1,r.uniforms.dataAxis=h,r.uniforms.lineWidth=l[g]/(s[g+2]-s[g])*d,r.uniforms.color=f[g];var _=6*n[g].length;p[g]&&_&&i.drawArrays(i.TRIANGLES,b,_),b+=_}}),d.drawTickMarks=function(){var t=[0,0],e=[0,0],r=[1,0],n=[0,1],i=[0,0],o=[0,0];return function(){for(var s=this.plot,c=this.vbo,u=this.tickShader,h=this.ticks,f=s.gl,p=s._tickBounds,d=s.dataBox,g=s.viewBox,v=s.pixelRatio,m=s.screenBox,y=m[2]-m[0],x=m[3]-m[1],b=g[2]-g[0],_=g[3]-g[1],w=0;w<2;++w){var k=p[w],T=p[w+2]-k,A=.5*(d[w+2]+d[w]),M=d[w+2]-d[w];e[w]=2*T/M,t[w]=2*(k-A)/M}e[0]*=b/y,t[0]*=b/y,e[1]*=_/x,t[1]*=_/x,u.bind(),c.bind(),u.attributes.dataCoord.pointer();var S=u.uniforms;S.dataShift=t,S.dataScale=e;var E=s.tickMarkLength,C=s.tickMarkWidth,L=s.tickMarkColor,P=6*h[0].length,O=Math.min(a.ge(h[0],(d[0]-p[0])/(p[2]-p[0]),l),h[0].length),z=Math.min(a.gt(h[0],(d[2]-p[0])/(p[2]-p[0]),l),h[0].length),I=0+6*O,D=6*Math.max(0,z-O),R=Math.min(a.ge(h[1],(d[1]-p[1])/(p[3]-p[1]),l),h[1].length),F=Math.min(a.gt(h[1],(d[3]-p[1])/(p[3]-p[1]),l),h[1].length),B=P+6*R,N=6*Math.max(0,F-R);i[0]=2*(g[0]-E[1])/y-1,i[1]=(g[3]+g[1])/x-1,o[0]=E[1]*v/y,o[1]=C[1]*v/x,N&&(S.color=L[1],S.tickScale=o,S.dataAxis=n,S.screenOffset=i,f.drawArrays(f.TRIANGLES,B,N)),i[0]=(g[2]+g[0])/y-1,i[1]=2*(g[1]-E[0])/x-1,o[0]=C[0]*v/y,o[1]=E[0]*v/x,D&&(S.color=L[0],S.tickScale=o,S.dataAxis=r,S.screenOffset=i,f.drawArrays(f.TRIANGLES,I,D)),i[0]=2*(g[2]+E[3])/y-1,i[1]=(g[3]+g[1])/x-1,o[0]=E[3]*v/y,o[1]=C[3]*v/x,N&&(S.color=L[3],S.tickScale=o,S.dataAxis=n,S.screenOffset=i,f.drawArrays(f.TRIANGLES,B,N)),i[0]=(g[2]+g[0])/y-1,i[1]=2*(g[3]+E[2])/x-1,o[0]=C[2]*v/y,o[1]=E[2]*v/x,D&&(S.color=L[2],S.tickScale=o,S.dataAxis=r,S.screenOffset=i,f.drawArrays(f.TRIANGLES,I,D))}}(),d.update=(f=[1,1,-1,-1,1,-1],p=[1,-1,1,1,-1,-1],function(t){for(var e=t.ticks,r=t.bounds,n=new Float32Array(18*(e[0].length+e[1].length)),i=(this.plot.zeroLineEnable,0),a=[[],[]],o=0;o<2;++o)for(var s=a[o],l=e[o],c=r[o],u=r[o+2],h=0;h<l.length;++h){var d=(l[h].x-c)/(u-c);s.push(d);for(var g=0;g<6;++g)n[i++]=d,n[i++]=f[g],n[i++]=p[g]}this.ticks=a,this.vbo.update(n)}),d.dispose=function(){this.vbo.dispose(),this.shader.dispose(),this.tickShader.dispose()}},{\\\"./shaders\\\":284,\\\"binary-search-bounds\\\":286,\\\"gl-buffer\\\":241,\\\"gl-shader\\\":301}],283:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){var e=t.gl,r=n(e,[-1,-1,-1,1,1,-1,1,1]),s=i(e,a.lineVert,a.lineFrag);return new o(t,r,s)};var n=t(\\\"gl-buffer\\\"),i=t(\\\"gl-shader\\\"),a=t(\\\"./shaders\\\");function o(t,e,r){this.plot=t,this.vbo=e,this.shader=r}var s,l,c=o.prototype;c.bind=function(){var t=this.shader;this.vbo.bind(),this.shader.bind(),t.attributes.coord.pointer(),t.uniforms.screenBox=this.plot.screenBox},c.drawLine=(s=[0,0],l=[0,0],function(t,e,r,n,i,a){var o=this.plot,c=this.shader,u=o.gl;s[0]=t,s[1]=e,l[0]=r,l[1]=n,c.uniforms.start=s,c.uniforms.end=l,c.uniforms.width=i*o.pixelRatio,c.uniforms.color=a,u.drawArrays(u.TRIANGLE_STRIP,0,4)}),c.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},{\\\"./shaders\\\":284,\\\"gl-buffer\\\":241,\\\"gl-shader\\\":301}],284:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"glslify\\\"),i=n([\\\"precision lowp float;\\\\n#define GLSLIFY 1\\\\nuniform vec4 color;\\\\nvoid main() {\\\\n  gl_FragColor = vec4(color.xyz * color.w, color.w);\\\\n}\\\\n\\\"]);e.exports={lineVert:n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec2 coord;\\\\n\\\\nuniform vec4 screenBox;\\\\nuniform vec2 start, end;\\\\nuniform float width;\\\\n\\\\nvec2 perp(vec2 v) {\\\\n  return vec2(v.y, -v.x);\\\\n}\\\\n\\\\nvec2 screen(vec2 v) {\\\\n  return 2.0 * (v - screenBox.xy) / (screenBox.zw - screenBox.xy) - 1.0;\\\\n}\\\\n\\\\nvoid main() {\\\\n  vec2 delta = normalize(perp(start - end));\\\\n  vec2 offset = mix(start, end, 0.5 * (coord.y+1.0));\\\\n  gl_Position = vec4(screen(offset + 0.5 * width * delta * coord.x), 0, 1);\\\\n}\\\\n\\\"]),lineFrag:i,textVert:n([\\\"#define GLSLIFY 1\\\\nattribute vec3 textCoordinate;\\\\n\\\\nuniform vec2 dataScale, dataShift, dataAxis, screenOffset, textScale;\\\\nuniform float angle;\\\\n\\\\nvoid main() {\\\\n  float dataOffset  = textCoordinate.z;\\\\n  vec2 glyphOffset  = textCoordinate.xy;\\\\n  mat2 glyphMatrix = mat2(cos(angle), sin(angle), -sin(angle), cos(angle));\\\\n  vec2 screenCoordinate = dataAxis * (dataScale * dataOffset + dataShift) +\\\\n    glyphMatrix * glyphOffset * textScale + screenOffset;\\\\n  gl_Position = vec4(screenCoordinate, 0, 1);\\\\n}\\\\n\\\"]),textFrag:i,gridVert:n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 dataCoord;\\\\n\\\\nuniform vec2 dataAxis, dataShift, dataScale;\\\\nuniform float lineWidth;\\\\n\\\\nvoid main() {\\\\n  vec2 pos = dataAxis * (dataScale * dataCoord.x + dataShift);\\\\n  pos += 10.0 * dataCoord.y * vec2(dataAxis.y, -dataAxis.x) + dataCoord.z * lineWidth;\\\\n  gl_Position = vec4(pos, 0, 1);\\\\n}\\\\n\\\"]),gridFrag:i,boxVert:n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec2 coord;\\\\n\\\\nuniform vec4 screenBox;\\\\nuniform vec2 lo, hi;\\\\n\\\\nvec2 screen(vec2 v) {\\\\n  return 2.0 * (v - screenBox.xy) / (screenBox.zw - screenBox.xy) - 1.0;\\\\n}\\\\n\\\\nvoid main() {\\\\n  gl_Position = vec4(screen(mix(lo, hi, coord)), 0, 1);\\\\n}\\\\n\\\"]),tickVert:n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 dataCoord;\\\\n\\\\nuniform vec2 dataAxis, dataShift, dataScale, screenOffset, tickScale;\\\\n\\\\nvoid main() {\\\\n  vec2 pos = dataAxis * (dataScale * dataCoord.x + dataShift);\\\\n  gl_Position = vec4(pos + tickScale*dataCoord.yz + screenOffset, 0, 1);\\\\n}\\\\n\\\"])}},{glslify:409}],285:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){var e=t.gl,r=n(e),a=i(e,s.textVert,s.textFrag);return new l(t,r,a)};var n=t(\\\"gl-buffer\\\"),i=t(\\\"gl-shader\\\"),a=t(\\\"text-cache\\\"),o=t(\\\"binary-search-bounds\\\"),s=t(\\\"./shaders\\\");function l(t,e,r){this.plot=t,this.vbo=e,this.shader=r,this.tickOffset=[[],[]],this.tickX=[[],[]],this.labelOffset=[0,0],this.labelCount=[0,0]}var c,u,h,f,p,d,g=l.prototype;g.drawTicks=(c=[0,0],u=[0,0],h=[0,0],function(t){var e=this.plot,r=this.shader,n=this.tickX[t],i=this.tickOffset[t],a=e.gl,s=e.viewBox,l=e.dataBox,f=e.screenBox,p=e.pixelRatio,d=e.tickEnable,g=e.tickPad,v=e.tickColor,m=e.tickAngle,y=e.labelEnable,x=e.labelPad,b=e.labelColor,_=e.labelAngle,w=this.labelOffset[t],k=this.labelCount[t],T=o.lt(n,l[t]),A=o.le(n,l[t+2]);c[0]=c[1]=0,c[t]=1,u[t]=(s[2+t]+s[t])/(f[2+t]-f[t])-1;var M=2/f[2+(1^t)]-f[1^t];u[1^t]=M*s[1^t]-1,d[t]&&(u[1^t]-=M*p*g[t],T<A&&i[A]>i[T]&&(r.uniforms.dataAxis=c,r.uniforms.screenOffset=u,r.uniforms.color=v[t],r.uniforms.angle=m[t],a.drawArrays(a.TRIANGLES,i[T],i[A]-i[T]))),y[t]&&k&&(u[1^t]-=M*p*x[t],r.uniforms.dataAxis=h,r.uniforms.screenOffset=u,r.uniforms.color=b[t],r.uniforms.angle=_[t],a.drawArrays(a.TRIANGLES,w,k)),u[1^t]=M*s[2+(1^t)]-1,d[t+2]&&(u[1^t]+=M*p*g[t+2],T<A&&i[A]>i[T]&&(r.uniforms.dataAxis=c,r.uniforms.screenOffset=u,r.uniforms.color=v[t+2],r.uniforms.angle=m[t+2],a.drawArrays(a.TRIANGLES,i[T],i[A]-i[T]))),y[t+2]&&k&&(u[1^t]+=M*p*x[t+2],r.uniforms.dataAxis=h,r.uniforms.screenOffset=u,r.uniforms.color=b[t+2],r.uniforms.angle=_[t+2],a.drawArrays(a.TRIANGLES,w,k))}),g.drawTitle=function(){var t=[0,0],e=[0,0];return function(){var r=this.plot,n=this.shader,i=r.gl,a=r.screenBox,o=r.titleCenter,s=r.titleAngle,l=r.titleColor,c=r.pixelRatio;if(this.titleCount){for(var u=0;u<2;++u)e[u]=2*(o[u]*c-a[u])/(a[2+u]-a[u])-1;n.bind(),n.uniforms.dataAxis=t,n.uniforms.screenOffset=e,n.uniforms.angle=s,n.uniforms.color=l,i.drawArrays(i.TRIANGLES,this.titleOffset,this.titleCount)}}}(),g.bind=(f=[0,0],p=[0,0],d=[0,0],function(){var t=this.plot,e=this.shader,r=t._tickBounds,n=t.dataBox,i=t.screenBox,a=t.viewBox;e.bind();for(var o=0;o<2;++o){var s=r[o],l=r[o+2]-s,c=.5*(n[o+2]+n[o]),u=n[o+2]-n[o],h=a[o],g=a[o+2]-h,v=i[o],m=i[o+2]-v;p[o]=2*l/u*g/m,f[o]=2*(s-c)/u*g/m}d[1]=2*t.pixelRatio/(i[3]-i[1]),d[0]=d[1]*(i[3]-i[1])/(i[2]-i[0]),e.uniforms.dataScale=p,e.uniforms.dataShift=f,e.uniforms.textScale=d,this.vbo.bind(),e.attributes.textCoordinate.pointer()}),g.update=function(t){var e,r,n,i,o,s=[],l=t.ticks,c=t.bounds;for(o=0;o<2;++o){var u=[Math.floor(s.length/3)],h=[-1/0],f=l[o];for(e=0;e<f.length;++e){var p=f[e],d=p.x,g=p.text,v=p.font||\\\"sans-serif\\\";i=p.fontSize||12;for(var m=1/(c[o+2]-c[o]),y=c[o],x=g.split(\\\"\\\\n\\\"),b=0;b<x.length;b++)for(n=a(v,x[b]).data,r=0;r<n.length;r+=2)s.push(n[r]*i,-n[r+1]*i-b*i*1.2,(d-y)*m);u.push(Math.floor(s.length/3)),h.push(d)}this.tickOffset[o]=u,this.tickX[o]=h}for(o=0;o<2;++o){for(this.labelOffset[o]=Math.floor(s.length/3),n=a(t.labelFont[o],t.labels[o],{textAlign:\\\"center\\\"}).data,i=t.labelSize[o],e=0;e<n.length;e+=2)s.push(n[e]*i,-n[e+1]*i,0);this.labelCount[o]=Math.floor(s.length/3)-this.labelOffset[o]}for(this.titleOffset=Math.floor(s.length/3),n=a(t.titleFont,t.title).data,i=t.titleSize,e=0;e<n.length;e+=2)s.push(n[e]*i,-n[e+1]*i,0);this.titleCount=Math.floor(s.length/3)-this.titleOffset,this.vbo.update(s)},g.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},{\\\"./shaders\\\":284,\\\"binary-search-bounds\\\":286,\\\"gl-buffer\\\":241,\\\"gl-shader\\\":301,\\\"text-cache\\\":536}],286:[function(t,e,r){arguments[4][111][0].apply(r,arguments)},{dup:111}],287:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){var e=t.gl,r=n(e,[e.drawingBufferWidth,e.drawingBufferHeight]),c=new l(e,r);return c.grid=i(c),c.text=a(c),c.line=o(c),c.box=s(c),c.update(t),c};var n=t(\\\"gl-select-static\\\"),i=t(\\\"./lib/grid\\\"),a=t(\\\"./lib/text\\\"),o=t(\\\"./lib/line\\\"),s=t(\\\"./lib/box\\\");function l(t,e){this.gl=t,this.pickBuffer=e,this.screenBox=[0,0,t.drawingBufferWidth,t.drawingBufferHeight],this.viewBox=[0,0,0,0],this.dataBox=[-10,-10,10,10],this.gridLineEnable=[!0,!0],this.gridLineWidth=[1,1],this.gridLineColor=[[0,0,0,1],[0,0,0,1]],this.pixelRatio=1,this.tickMarkLength=[0,0,0,0],this.tickMarkWidth=[0,0,0,0],this.tickMarkColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[15,15,15,15],this.tickAngle=[0,0,0,0],this.tickEnable=[!0,!0,!0,!0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[15,15,15,15],this.labelAngle=[0,Math.PI/2,0,3*Math.PI/2],this.labelEnable=[!0,!0,!0,!0],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.titleCenter=[0,0],this.titleEnable=!0,this.titleAngle=0,this.titleColor=[0,0,0,1],this.borderColor=[0,0,0,0],this.backgroundColor=[0,0,0,0],this.zeroLineEnable=[!0,!0],this.zeroLineWidth=[4,4],this.zeroLineColor=[[0,0,0,1],[0,0,0,1]],this.borderLineEnable=[!0,!0,!0,!0],this.borderLineWidth=[2,2,2,2],this.borderLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.grid=null,this.text=null,this.line=null,this.box=null,this.objects=[],this.overlays=[],this._tickBounds=[1/0,1/0,-1/0,-1/0],this.static=!1,this.dirty=!1,this.pickDirty=!1,this.pickDelay=120,this.pickRadius=10,this._pickTimeout=null,this._drawPick=this.drawPick.bind(this),this._depthCounter=0}var c=l.prototype;function u(t){for(var e=t.slice(),r=0;r<e.length;++r)e[r]=e[r].slice();return e}function h(t,e){return t.x-e.x}c.setDirty=function(){this.dirty=this.pickDirty=!0},c.setOverlayDirty=function(){this.dirty=!0},c.nextDepthValue=function(){return this._depthCounter++/65536},c.draw=function(){var t=this.gl,e=this.screenBox,r=this.viewBox,n=this.dataBox,i=this.pixelRatio,a=this.grid,o=this.line,s=this.text,l=this.objects;if(this._depthCounter=0,this.pickDirty&&(this._pickTimeout&&clearTimeout(this._pickTimeout),this.pickDirty=!1,this._pickTimeout=setTimeout(this._drawPick,this.pickDelay)),this.dirty){if(this.dirty=!1,t.bindFramebuffer(t.FRAMEBUFFER,null),t.enable(t.SCISSOR_TEST),t.disable(t.DEPTH_TEST),t.depthFunc(t.LESS),t.depthMask(!1),t.enable(t.BLEND),t.blendEquation(t.FUNC_ADD,t.FUNC_ADD),t.blendFunc(t.ONE,t.ONE_MINUS_SRC_ALPHA),this.borderColor){t.scissor(e[0],e[1],e[2]-e[0],e[3]-e[1]);var c=this.borderColor;t.clearColor(c[0]*c[3],c[1]*c[3],c[2]*c[3],c[3]),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT)}t.scissor(r[0],r[1],r[2]-r[0],r[3]-r[1]),t.viewport(r[0],r[1],r[2]-r[0],r[3]-r[1]);var u=this.backgroundColor;t.clearColor(u[0]*u[3],u[1]*u[3],u[2]*u[3],u[3]),t.clear(t.COLOR_BUFFER_BIT),a.draw();var h=this.zeroLineEnable,f=this.zeroLineColor,p=this.zeroLineWidth;if(h[0]||h[1]){o.bind();for(var d=0;d<2;++d)if(h[d]&&n[d]<=0&&n[d+2]>=0){var g=e[d]-n[d]*(e[d+2]-e[d])/(n[d+2]-n[d]);0===d?o.drawLine(g,e[1],g,e[3],p[d],f[d]):o.drawLine(e[0],g,e[2],g,p[d],f[d])}}for(d=0;d<l.length;++d)l[d].draw();t.viewport(e[0],e[1],e[2]-e[0],e[3]-e[1]),t.scissor(e[0],e[1],e[2]-e[0],e[3]-e[1]),this.grid.drawTickMarks(),o.bind();var v=this.borderLineEnable,m=this.borderLineWidth,y=this.borderLineColor;for(v[1]&&o.drawLine(r[0],r[1]-.5*m[1]*i,r[0],r[3]+.5*m[3]*i,m[1],y[1]),v[0]&&o.drawLine(r[0]-.5*m[0]*i,r[1],r[2]+.5*m[2]*i,r[1],m[0],y[0]),v[3]&&o.drawLine(r[2],r[1]-.5*m[1]*i,r[2],r[3]+.5*m[3]*i,m[3],y[3]),v[2]&&o.drawLine(r[0]-.5*m[0]*i,r[3],r[2]+.5*m[2]*i,r[3],m[2],y[2]),s.bind(),d=0;d<2;++d)s.drawTicks(d);this.titleEnable&&s.drawTitle();var x=this.overlays;for(d=0;d<x.length;++d)x[d].draw();t.disable(t.SCISSOR_TEST),t.disable(t.BLEND),t.depthMask(!0)}},c.drawPick=function(){if(!this.static){var t=this.pickBuffer;this.gl;this._pickTimeout=null,t.begin();for(var e=1,r=this.objects,n=0;n<r.length;++n)e=r[n].drawPick(e);t.end()}},c.pick=function(t,e){if(!this.static){var r=this.pixelRatio,n=this.pickPixelRatio,i=this.viewBox,a=0|Math.round((t-i[0]/r)*n),o=0|Math.round((e-i[1]/r)*n),s=this.pickBuffer.query(a,o,this.pickRadius);if(!s)return null;for(var l=s.id+(s.value[0]<<8)+(s.value[1]<<16)+(s.value[2]<<24),c=this.objects,u=0;u<c.length;++u){var h=c[u].pick(a,o,l);if(h)return h}return null}},c.setScreenBox=function(t){var e=this.screenBox,r=this.pixelRatio;e[0]=0|Math.round(t[0]*r),e[1]=0|Math.round(t[1]*r),e[2]=0|Math.round(t[2]*r),e[3]=0|Math.round(t[3]*r),this.setDirty()},c.setDataBox=function(t){var e=this.dataBox;(e[0]!==t[0]||e[1]!==t[1]||e[2]!==t[2]||e[3]!==t[3])&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],this.setDirty())},c.setViewBox=function(t){var e=this.pixelRatio,r=this.viewBox;r[0]=0|Math.round(t[0]*e),r[1]=0|Math.round(t[1]*e),r[2]=0|Math.round(t[2]*e),r[3]=0|Math.round(t[3]*e);var n=this.pickPixelRatio;this.pickBuffer.shape=[0|Math.round((t[2]-t[0])*n),0|Math.round((t[3]-t[1])*n)],this.setDirty()},c.update=function(t){t=t||{};var e=this.gl;this.pixelRatio=t.pixelRatio||1;var r=this.pixelRatio;this.pickPixelRatio=Math.max(r,1),this.setScreenBox(t.screenBox||[0,0,e.drawingBufferWidth/r,e.drawingBufferHeight/r]);this.screenBox;this.setViewBox(t.viewBox||[.125*(this.screenBox[2]-this.screenBox[0])/r,.125*(this.screenBox[3]-this.screenBox[1])/r,.875*(this.screenBox[2]-this.screenBox[0])/r,.875*(this.screenBox[3]-this.screenBox[1])/r]);var n=this.viewBox,i=(n[2]-n[0])/(n[3]-n[1]);this.setDataBox(t.dataBox||[-10,-10/i,10,10/i]),this.borderColor=!1!==t.borderColor&&(t.borderColor||[0,0,0,0]).slice(),this.backgroundColor=(t.backgroundColor||[0,0,0,0]).slice(),this.gridLineEnable=(t.gridLineEnable||[!0,!0]).slice(),this.gridLineWidth=(t.gridLineWidth||[1,1]).slice(),this.gridLineColor=u(t.gridLineColor||[[.5,.5,.5,1],[.5,.5,.5,1]]),this.zeroLineEnable=(t.zeroLineEnable||[!0,!0]).slice(),this.zeroLineWidth=(t.zeroLineWidth||[4,4]).slice(),this.zeroLineColor=u(t.zeroLineColor||[[0,0,0,1],[0,0,0,1]]),this.tickMarkLength=(t.tickMarkLength||[0,0,0,0]).slice(),this.tickMarkWidth=(t.tickMarkWidth||[0,0,0,0]).slice(),this.tickMarkColor=u(t.tickMarkColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.titleCenter=(t.titleCenter||[.5*(n[0]+n[2])/r,(n[3]+120)/r]).slice(),this.titleEnable=!(\\\"titleEnable\\\"in t&&!t.titleEnable),this.titleAngle=t.titleAngle||0,this.titleColor=(t.titleColor||[0,0,0,1]).slice(),this.labelPad=(t.labelPad||[15,15,15,15]).slice(),this.labelAngle=(t.labelAngle||[0,Math.PI/2,0,3*Math.PI/2]).slice(),this.labelEnable=(t.labelEnable||[!0,!0,!0,!0]).slice(),this.labelColor=u(t.labelColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.tickPad=(t.tickPad||[15,15,15,15]).slice(),this.tickAngle=(t.tickAngle||[0,0,0,0]).slice(),this.tickEnable=(t.tickEnable||[!0,!0,!0,!0]).slice(),this.tickColor=u(t.tickColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.borderLineEnable=(t.borderLineEnable||[!0,!0,!0,!0]).slice(),this.borderLineWidth=(t.borderLineWidth||[2,2,2,2]).slice(),this.borderLineColor=u(t.borderLineColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]);var a=t.ticks||[[],[]],o=this._tickBounds;o[0]=o[1]=1/0,o[2]=o[3]=-1/0;for(var s=0;s<2;++s){var l=a[s].slice(0);0!==l.length&&(l.sort(h),o[s]=Math.min(o[s],l[0].x),o[s+2]=Math.max(o[s+2],l[l.length-1].x))}this.grid.update({bounds:o,ticks:a}),this.text.update({bounds:o,ticks:a,labels:t.labels||[\\\"x\\\",\\\"y\\\"],labelSize:t.labelSize||[12,12],labelFont:t.labelFont||[\\\"sans-serif\\\",\\\"sans-serif\\\"],title:t.title||\\\"\\\",titleSize:t.titleSize||18,titleFont:t.titleFont||\\\"sans-serif\\\"}),this.static=!!t.static,this.setDirty()},c.dispose=function(){this.box.dispose(),this.grid.dispose(),this.text.dispose(),this.line.dispose();for(var t=this.objects.length-1;t>=0;--t)this.objects[t].dispose();this.objects.length=0;for(t=this.overlays.length-1;t>=0;--t)this.overlays[t].dispose();this.overlays.length=0,this.gl=null},c.addObject=function(t){this.objects.indexOf(t)<0&&(this.objects.push(t),this.setDirty())},c.removeObject=function(t){for(var e=this.objects,r=0;r<e.length;++r)if(e[r]===t){e.splice(r,1),this.setDirty();break}},c.addOverlay=function(t){this.overlays.indexOf(t)<0&&(this.overlays.push(t),this.setOverlayDirty())},c.removeOverlay=function(t){for(var e=this.overlays,r=0;r<e.length;++r)if(e[r]===t){e.splice(r,1),this.setOverlayDirty();break}}},{\\\"./lib/box\\\":281,\\\"./lib/grid\\\":282,\\\"./lib/line\\\":283,\\\"./lib/text\\\":285,\\\"gl-select-static\\\":300}],288:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){t=t||document.body,e=e||{};var r=[.01,1/0];\\\"distanceLimits\\\"in e&&(r[0]=e.distanceLimits[0],r[1]=e.distanceLimits[1]);\\\"zoomMin\\\"in e&&(r[0]=e.zoomMin);\\\"zoomMax\\\"in e&&(r[1]=e.zoomMax);var c=i({center:e.center||[0,0,0],up:e.up||[0,1,0],eye:e.eye||[0,0,10],mode:e.mode||\\\"orbit\\\",distanceLimits:r}),u=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],h=0,f=t.clientWidth,p=t.clientHeight,d={keyBindingMode:\\\"rotate\\\",enableWheel:!0,view:c,element:t,delay:e.delay||16,rotateSpeed:e.rotateSpeed||1,zoomSpeed:e.zoomSpeed||1,translateSpeed:e.translateSpeed||1,flipX:!!e.flipX,flipY:!!e.flipY,modes:c.modes,_ortho:e._ortho||e.projection&&\\\"orthographic\\\"===e.projection.type||!1,tick:function(){var e=n(),r=this.delay,i=e-2*r;c.idle(e-r),c.recalcMatrix(i),c.flush(e-(100+2*r));for(var a=!0,o=c.computedMatrix,s=0;s<16;++s)a=a&&u[s]===o[s],u[s]=o[s];var l=t.clientWidth===f&&t.clientHeight===p;return f=t.clientWidth,p=t.clientHeight,a?!l:(h=Math.exp(c.computedRadius[0]),!0)},lookAt:function(t,e,r){c.lookAt(c.lastT(),t,e,r)},rotate:function(t,e,r){c.rotate(c.lastT(),t,e,r)},pan:function(t,e,r){c.pan(c.lastT(),t,e,r)},translate:function(t,e,r){c.translate(c.lastT(),t,e,r)}};return Object.defineProperties(d,{matrix:{get:function(){return c.computedMatrix},set:function(t){return c.setMatrix(c.lastT(),t),c.computedMatrix},enumerable:!0},mode:{get:function(){return c.getMode()},set:function(t){var e=c.computedUp.slice(),r=c.computedEye.slice(),i=c.computedCenter.slice();if(c.setMode(t),\\\"turntable\\\"===t){var a=n();c._active.lookAt(a,r,i,e),c._active.lookAt(a+500,r,i,[0,0,1]),c._active.flush(a)}return c.getMode()},enumerable:!0},center:{get:function(){return c.computedCenter},set:function(t){return c.lookAt(c.lastT(),null,t),c.computedCenter},enumerable:!0},eye:{get:function(){return c.computedEye},set:function(t){return c.lookAt(c.lastT(),t),c.computedEye},enumerable:!0},up:{get:function(){return c.computedUp},set:function(t){return c.lookAt(c.lastT(),null,null,t),c.computedUp},enumerable:!0},distance:{get:function(){return h},set:function(t){return c.setDistance(c.lastT(),t),t},enumerable:!0},distanceLimits:{get:function(){return c.getDistanceLimits(r)},set:function(t){return c.setDistanceLimits(t),t},enumerable:!0}}),t.addEventListener(\\\"contextmenu\\\",function(t){return t.preventDefault(),!1}),d._lastX=-1,d._lastY=-1,d._lastMods={shift:!1,control:!1,alt:!1,meta:!1},d.enableMouseListeners=function(){function e(e,r,i,a){var o=d.keyBindingMode;if(!1!==o){var s=\\\"rotate\\\"===o,l=\\\"pan\\\"===o,u=\\\"zoom\\\"===o,f=!!a.control,p=!!a.alt,g=!!a.shift,v=!!(1&e),m=!!(2&e),y=!!(4&e),x=1/t.clientHeight,b=x*(r-d._lastX),_=x*(i-d._lastY),w=d.flipX?1:-1,k=d.flipY?1:-1,T=Math.PI*d.rotateSpeed,A=n();if(-1!==d._lastX&&-1!==d._lastY&&((s&&v&&!f&&!p&&!g||v&&!f&&!p&&g)&&c.rotate(A,w*T*b,-k*T*_,0),(l&&v&&!f&&!p&&!g||m||v&&f&&!p&&!g)&&c.pan(A,-d.translateSpeed*b*h,d.translateSpeed*_*h,0),u&&v&&!f&&!p&&!g||y||v&&!f&&p&&!g)){var M=-d.zoomSpeed*_/window.innerHeight*(A-c.lastT())*100;c.pan(A,0,0,h*(Math.exp(M)-1))}return d._lastX=r,d._lastY=i,d._lastMods=a,!0}}d.mouseListener=a(t,e),t.addEventListener(\\\"touchstart\\\",function(r){var n=s(r.changedTouches[0],t);e(0,n[0],n[1],d._lastMods),e(1,n[0],n[1],d._lastMods),r.preventDefault()},!!l&&{passive:!1}),t.addEventListener(\\\"touchmove\\\",function(r){var n=s(r.changedTouches[0],t);e(1,n[0],n[1],d._lastMods),r.preventDefault()},!!l&&{passive:!1}),t.addEventListener(\\\"touchend\\\",function(t){e(0,d._lastX,d._lastY,d._lastMods),t.preventDefault()},!!l&&{passive:!1}),d.wheelListener=o(t,function(t,e){if(!1!==d.keyBindingMode&&d.enableWheel){var r=d.flipX?1:-1,i=d.flipY?1:-1,a=n();if(Math.abs(t)>Math.abs(e))c.rotate(a,0,0,-t*r*Math.PI*d.rotateSpeed/window.innerWidth);else if(!d._ortho){var o=-d.zoomSpeed*i*e/window.innerHeight*(a-c.lastT())/20;c.pan(a,0,0,h*(Math.exp(o)-1))}}},!0)},d.enableMouseListeners(),d};var n=t(\\\"right-now\\\"),i=t(\\\"3d-view\\\"),a=t(\\\"mouse-change\\\"),o=t(\\\"mouse-wheel\\\"),s=t(\\\"mouse-event-offset\\\"),l=t(\\\"has-passive-events\\\")},{\\\"3d-view\\\":52,\\\"has-passive-events\\\":411,\\\"mouse-change\\\":435,\\\"mouse-event-offset\\\":436,\\\"mouse-wheel\\\":438,\\\"right-now\\\":504}],289:[function(t,e,r){var n=t(\\\"glslify\\\"),i=t(\\\"gl-shader\\\"),a=n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\nattribute vec2 position;\\\\nvarying vec2 uv;\\\\nvoid main() {\\\\n  uv = position;\\\\n  gl_Position = vec4(position, 0, 1);\\\\n}\\\"]),o=n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nuniform sampler2D accumBuffer;\\\\nvarying vec2 uv;\\\\n\\\\nvoid main() {\\\\n  vec4 accum = texture2D(accumBuffer, 0.5 * (uv + 1.0));\\\\n  gl_FragColor = min(vec4(1,1,1,1), accum);\\\\n}\\\"]);e.exports=function(t){return i(t,a,o,null,[{name:\\\"position\\\",type:\\\"vec2\\\"}])}},{\\\"gl-shader\\\":301,glslify:409}],290:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./camera.js\\\"),i=t(\\\"gl-axes3d\\\"),a=t(\\\"gl-axes3d/properties\\\"),o=t(\\\"gl-spikes3d\\\"),s=t(\\\"gl-select-static\\\"),l=t(\\\"gl-fbo\\\"),c=t(\\\"a-big-triangle\\\"),u=t(\\\"mouse-change\\\"),h=t(\\\"mouse-wheel\\\"),f=t(\\\"gl-mat4/perspective\\\"),p=t(\\\"gl-mat4/ortho\\\"),d=t(\\\"./lib/shader\\\"),g=t(\\\"is-mobile\\\")({tablet:!0});function v(){this.mouse=[-1,-1],this.screen=null,this.distance=1/0,this.index=null,this.dataCoordinate=null,this.dataPosition=null,this.object=null,this.data=null}function m(t){var e=Math.round(Math.log(Math.abs(t))/Math.log(10));if(e<0){var r=Math.round(Math.pow(10,-e));return Math.ceil(t*r)/r}if(e>0){r=Math.round(Math.pow(10,e));return Math.ceil(t/r)*r}return Math.ceil(t)}function y(t){return\\\"boolean\\\"!=typeof t||t}e.exports={createScene:function(t){(t=t||{}).camera=t.camera||{};var e=t.canvas;if(!e)if(e=document.createElement(\\\"canvas\\\"),t.container){var r=t.container;r.appendChild(e)}else document.body.appendChild(e);var x=t.gl;x||(x=function(t,e){var r=null;try{(r=t.getContext(\\\"webgl\\\",e))||(r=t.getContext(\\\"experimental-webgl\\\",e))}catch(t){return null}return r}(e,t.glOptions||{premultipliedAlpha:!0,antialias:!0,preserveDrawingBuffer:g}));if(!x)throw new Error(\\\"webgl not supported\\\");var b=t.bounds||[[-10,-10,-10],[10,10,10]],_=new v,w=l(x,[x.drawingBufferWidth,x.drawingBufferHeight],{preferFloat:!g}),k=d(x),T=t.cameraObject&&!0===t.cameraObject._ortho||t.camera.projection&&\\\"orthographic\\\"===t.camera.projection.type||!1,A={eye:t.camera.eye||[2,0,0],center:t.camera.center||[0,0,0],up:t.camera.up||[0,1,0],zoomMin:t.camera.zoomMax||.1,zoomMax:t.camera.zoomMin||100,mode:t.camera.mode||\\\"turntable\\\",_ortho:T},M=t.axes||{},S=i(x,M);S.enable=!M.disable;var E=t.spikes||{},C=o(x,E),L=[],P=[],O=[],z=[],I=!0,D=!0,R=new Array(16),F=new Array(16),B={view:null,projection:R,model:F,_ortho:!1},D=!0,N=[x.drawingBufferWidth,x.drawingBufferHeight],j=t.cameraObject||n(e,A),U={gl:x,contextLost:!1,pixelRatio:t.pixelRatio||1,canvas:e,selection:_,camera:j,axes:S,axesPixels:null,spikes:C,bounds:b,objects:L,shape:N,aspect:t.aspectRatio||[1,1,1],pickRadius:t.pickRadius||10,zNear:t.zNear||.01,zFar:t.zFar||1e3,fovy:t.fovy||Math.PI/4,clearColor:t.clearColor||[0,0,0,0],autoResize:y(t.autoResize),autoBounds:y(t.autoBounds),autoScale:!!t.autoScale,autoCenter:y(t.autoCenter),clipToBounds:y(t.clipToBounds),snapToData:!!t.snapToData,onselect:t.onselect||null,onrender:t.onrender||null,onclick:t.onclick||null,cameraParams:B,oncontextloss:null,mouseListener:null,_stopped:!1},V=[x.drawingBufferWidth/U.pixelRatio|0,x.drawingBufferHeight/U.pixelRatio|0];function q(){if(!U._stopped&&U.autoResize){var t=e.parentNode,r=1,n=1;t&&t!==document.body?(r=t.clientWidth,n=t.clientHeight):(r=window.innerWidth,n=window.innerHeight);var i=0|Math.ceil(r*U.pixelRatio),a=0|Math.ceil(n*U.pixelRatio);if(i!==e.width||a!==e.height){e.width=i,e.height=a;var o=e.style;o.position=o.position||\\\"absolute\\\",o.left=\\\"0px\\\",o.top=\\\"0px\\\",o.width=r+\\\"px\\\",o.height=n+\\\"px\\\",I=!0}}}U.autoResize&&q();function H(){for(var t=L.length,e=z.length,r=0;r<e;++r)O[r]=0;t:for(var r=0;r<t;++r){var n=L[r],i=n.pickSlots;if(i){for(var a=0;a<e;++a)if(O[a]+i<255){P[r]=a,n.setPickBase(O[a]+1),O[a]+=i;continue t}var o=s(x,N);P[r]=e,z.push(o),O.push(i),n.setPickBase(1),e+=1}else P[r]=-1}for(;e>0&&0===O[e-1];)O.pop(),z.pop().dispose()}function G(){if(U.contextLost)return!0;x.isContextLost()&&(U.contextLost=!0,U.mouseListener.enabled=!1,U.selection.object=null,U.oncontextloss&&U.oncontextloss())}window.addEventListener(\\\"resize\\\",q),U.update=function(t){U._stopped||(t=t||{},I=!0,D=!0)},U.add=function(t){U._stopped||(t.axes=S,L.push(t),P.push(-1),I=!0,D=!0,H())},U.remove=function(t){if(!U._stopped){var e=L.indexOf(t);e<0||(L.splice(e,1),P.pop(),I=!0,D=!0,H())}},U.dispose=function(){if(!U._stopped&&(U._stopped=!0,window.removeEventListener(\\\"resize\\\",q),e.removeEventListener(\\\"webglcontextlost\\\",G),U.mouseListener.enabled=!1,!U.contextLost)){S.dispose(),C.dispose();for(var t=0;t<L.length;++t)L[t].dispose();w.dispose();for(var t=0;t<z.length;++t)z[t].dispose();k.dispose(),x=null,S=null,C=null,L=[]}},U.wheelListener=h(e,function(t,e){if(!1!==j.keyBindingMode&&j.enableWheel&&j._ortho){var r=t>e?1.1:1/1.1;U.aspect[0]*=r,U.aspect[1]*=r,U.aspect[2]*=r,U.redraw()}},!0),U._mouseRotating=!1,U._prevButtons=0,U.enableMouseListeners=function(){U.mouseListener=u(e,function(t,e,r){if(!U._stopped){var n=z.length,i=L.length,a=_.object;_.distance=1/0,_.mouse[0]=e,_.mouse[1]=r,_.object=null,_.screen=null,_.dataCoordinate=_.dataPosition=null;var o=!1;if(t&&U._prevButtons)U._mouseRotating=!0;else{U._mouseRotating&&(D=!0),U._mouseRotating=!1;for(var s=0;s<n;++s){var l=z[s].query(e,V[1]-r-1,U.pickRadius);if(l){if(l.distance>_.distance)continue;for(var c=0;c<i;++c){var u=L[c];if(P[c]===s){var h=u.pick(l);h&&(_.buttons=t,_.screen=l.coord,_.distance=l.distance,_.object=u,_.index=h.distance,_.dataPosition=h.position,_.dataCoordinate=h.dataCoordinate,_.data=h,o=!0)}}}}}a&&a!==_.object&&(a.highlight&&a.highlight(null),I=!0),_.object&&(_.object.highlight&&_.object.highlight(_.data),I=!0),(o=o||_.object!==a)&&U.onselect&&U.onselect(_),1&t&&!(1&U._prevButtons)&&U.onclick&&U.onclick(_),U._prevButtons=t}})},e.addEventListener(\\\"webglcontextlost\\\",G);var Y=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],W=[Y[0].slice(),Y[1].slice()];function X(){if(!G()){q();var t=U.camera.tick();B.view=U.camera.matrix,I=I||t,D=D||t,S.pixelRatio=U.pixelRatio,C.pixelRatio=U.pixelRatio;var e=L.length,r=Y[0],n=Y[1];r[0]=r[1]=r[2]=1/0,n[0]=n[1]=n[2]=-1/0;for(var i=0;i<e;++i){var o=L[i];o.pixelRatio=U.pixelRatio,o.axes=U.axes,I=I||!!o.dirty,D=D||!!o.dirty;var s=o.bounds;if(s)for(var l=s[0],u=s[1],h=0;h<3;++h)r[h]=Math.min(r[h],l[h]),n[h]=Math.max(n[h],u[h])}var d=U.bounds;if(U.autoBounds)for(var h=0;h<3;++h){if(n[h]<r[h])r[h]=-1,n[h]=1;else{r[h]===n[h]&&(r[h]-=1,n[h]+=1);var g=.05*(n[h]-r[h]);r[h]=r[h]-g,n[h]=n[h]+g}d[0][h]=r[h],d[1][h]=n[h]}for(var v=!1,h=0;h<3;++h)v=v||W[0][h]!==d[0][h]||W[1][h]!==d[1][h],W[0][h]=d[0][h],W[1][h]=d[1][h];if(D=D||v,I=I||v){if(v){for(var y=[0,0,0],i=0;i<3;++i)y[i]=m((d[1][i]-d[0][i])/10);S.autoTicks?S.update({bounds:d,tickSpacing:y}):S.update({bounds:d})}var b=x.drawingBufferWidth,A=x.drawingBufferHeight;N[0]=b,N[1]=A,V[0]=0|Math.max(b/U.pixelRatio,1),V[1]=0|Math.max(A/U.pixelRatio,1),T?(p(R,-b/A,b/A,-1,1,U.zNear,U.zFar),B._ortho=!0):(f(R,U.fovy,b/A,U.zNear,U.zFar),B._ortho=!1);for(var i=0;i<16;++i)F[i]=0;F[15]=1;for(var M=0,i=0;i<3;++i)M=Math.max(M,d[1][i]-d[0][i]);for(var i=0;i<3;++i)U.autoScale?F[5*i]=U.aspect[i]/(d[1][i]-d[0][i]):F[5*i]=1/M,U.autoCenter&&(F[12+i]=.5*-F[5*i]*(d[0][i]+d[1][i]));for(var i=0;i<e;++i){var o=L[i];o.axesBounds=d,U.clipToBounds&&(o.clipBounds=d)}_.object&&(U.snapToData?C.position=_.dataCoordinate:C.position=_.dataPosition,C.bounds=d),D&&(D=!1,function(){if(G())return;x.colorMask(!0,!0,!0,!0),x.depthMask(!0),x.disable(x.BLEND),x.enable(x.DEPTH_TEST),x.depthFunc(x.LEQUAL);for(var t=L.length,e=z.length,r=0;r<e;++r){var n=z[r];n.shape=V,n.begin();for(var i=0;i<t;++i)if(P[i]===r){var a=L[i];a.drawPick&&(a.pixelRatio=1,a.drawPick(B))}n.end()}}()),U.axesPixels=a(U.axes,B,b,A),U.onrender&&U.onrender(),x.bindFramebuffer(x.FRAMEBUFFER,null),x.viewport(0,0,b,A);var E=U.clearColor;x.clearColor(E[0],E[1],E[2],E[3]),x.clear(x.COLOR_BUFFER_BIT|x.DEPTH_BUFFER_BIT),x.depthMask(!0),x.colorMask(!0,!0,!0,!0),x.enable(x.DEPTH_TEST),x.depthFunc(x.LEQUAL),x.disable(x.BLEND),x.disable(x.CULL_FACE);var O=!1;S.enable&&(O=O||S.isTransparent(),S.draw(B)),C.axes=S,_.object&&C.draw(B),x.disable(x.CULL_FACE);for(var i=0;i<e;++i){var o=L[i];o.axes=S,o.pixelRatio=U.pixelRatio,o.isOpaque&&o.isOpaque()&&o.draw(B),o.isTransparent&&o.isTransparent()&&(O=!0)}if(O){w.shape=N,w.bind(),x.clear(x.DEPTH_BUFFER_BIT),x.colorMask(!1,!1,!1,!1),x.depthMask(!0),x.depthFunc(x.LESS),S.enable&&S.isTransparent()&&S.drawTransparent(B);for(var i=0;i<e;++i){var o=L[i];o.isOpaque&&o.isOpaque()&&o.draw(B)}x.enable(x.BLEND),x.blendEquation(x.FUNC_ADD),x.blendFunc(x.ONE,x.ONE_MINUS_SRC_ALPHA),x.colorMask(!0,!0,!0,!0),x.depthMask(!1),x.clearColor(0,0,0,0),x.clear(x.COLOR_BUFFER_BIT),S.isTransparent()&&S.drawTransparent(B);for(var i=0;i<e;++i){var o=L[i];o.isTransparent&&o.isTransparent()&&o.drawTransparent(B)}x.bindFramebuffer(x.FRAMEBUFFER,null),x.blendFunc(x.ONE,x.ONE_MINUS_SRC_ALPHA),x.disable(x.DEPTH_TEST),k.bind(),w.color[0].bind(0),k.uniforms.accumBuffer=0,c(x),x.disable(x.BLEND)}I=!1;for(var i=0;i<e;++i)L[i].dirty=!1}}}return U.enableMouseListeners(),function t(){U._stopped||U.contextLost||(X(),requestAnimationFrame(t))}(),U.redraw=function(){U._stopped||(I=!0,X())},U},createCamera:n}},{\\\"./camera.js\\\":288,\\\"./lib/shader\\\":289,\\\"a-big-triangle\\\":59,\\\"gl-axes3d\\\":233,\\\"gl-axes3d/properties\\\":240,\\\"gl-fbo\\\":249,\\\"gl-mat4/ortho\\\":268,\\\"gl-mat4/perspective\\\":269,\\\"gl-select-static\\\":300,\\\"gl-spikes3d\\\":310,\\\"is-mobile\\\":420,\\\"mouse-change\\\":435,\\\"mouse-wheel\\\":438}],291:[function(t,e,r){var n=t(\\\"glslify\\\");r.pointVertex=n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec2 position;\\\\n\\\\nuniform mat3 matrix;\\\\nuniform float pointSize;\\\\nuniform float pointCloud;\\\\n\\\\nhighp float rand(vec2 co) {\\\\n  highp float a = 12.9898;\\\\n  highp float b = 78.233;\\\\n  highp float c = 43758.5453;\\\\n  highp float d = dot(co.xy, vec2(a, b));\\\\n  highp float e = mod(d, 3.14);\\\\n  return fract(sin(e) * c);\\\\n}\\\\n\\\\nvoid main() {\\\\n  vec3 hgPosition = matrix * vec3(position, 1);\\\\n  gl_Position  = vec4(hgPosition.xy, 0, hgPosition.z);\\\\n    // if we don't jitter the point size a bit, overall point cloud\\\\n    // saturation 'jumps' on zooming, which is disturbing and confusing\\\\n  gl_PointSize = pointSize * ((19.5 + rand(position)) / 20.0);\\\\n  if(pointCloud != 0.0) { // pointCloud is truthy\\\\n    // get the same square surface as circle would be\\\\n    gl_PointSize *= 0.886;\\\\n  }\\\\n}\\\"]),r.pointFragment=n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nuniform vec4 color, borderColor;\\\\nuniform float centerFraction;\\\\nuniform float pointCloud;\\\\n\\\\nvoid main() {\\\\n  float radius;\\\\n  vec4 baseColor;\\\\n  if(pointCloud != 0.0) { // pointCloud is truthy\\\\n    if(centerFraction == 1.0) {\\\\n      gl_FragColor = color;\\\\n    } else {\\\\n      gl_FragColor = mix(borderColor, color, centerFraction);\\\\n    }\\\\n  } else {\\\\n    radius = length(2.0 * gl_PointCoord.xy - 1.0);\\\\n    if(radius > 1.0) {\\\\n      discard;\\\\n    }\\\\n    baseColor = mix(borderColor, color, step(radius, centerFraction));\\\\n    gl_FragColor = vec4(baseColor.rgb * baseColor.a, baseColor.a);\\\\n  }\\\\n}\\\\n\\\"]),r.pickVertex=n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec2 position;\\\\nattribute vec4 pickId;\\\\n\\\\nuniform mat3 matrix;\\\\nuniform float pointSize;\\\\nuniform vec4 pickOffset;\\\\n\\\\nvarying vec4 fragId;\\\\n\\\\nvoid main() {\\\\n  vec3 hgPosition = matrix * vec3(position, 1);\\\\n  gl_Position  = vec4(hgPosition.xy, 0, hgPosition.z);\\\\n  gl_PointSize = pointSize;\\\\n\\\\n  vec4 id = pickId + pickOffset;\\\\n  id.y += floor(id.x / 256.0);\\\\n  id.x -= floor(id.x / 256.0) * 256.0;\\\\n\\\\n  id.z += floor(id.y / 256.0);\\\\n  id.y -= floor(id.y / 256.0) * 256.0;\\\\n\\\\n  id.w += floor(id.z / 256.0);\\\\n  id.z -= floor(id.z / 256.0) * 256.0;\\\\n\\\\n  fragId = id;\\\\n}\\\\n\\\"]),r.pickFragment=n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nvarying vec4 fragId;\\\\n\\\\nvoid main() {\\\\n  float radius = length(2.0 * gl_PointCoord.xy - 1.0);\\\\n  if(radius > 1.0) {\\\\n    discard;\\\\n  }\\\\n  gl_FragColor = fragId / 255.0;\\\\n}\\\\n\\\"])},{glslify:409}],292:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"gl-shader\\\"),i=t(\\\"gl-buffer\\\"),a=t(\\\"typedarray-pool\\\"),o=t(\\\"./lib/shader\\\");function s(t,e,r,n,i){this.plot=t,this.offsetBuffer=e,this.pickBuffer=r,this.shader=n,this.pickShader=i,this.sizeMin=.5,this.sizeMinCap=2,this.sizeMax=20,this.areaRatio=1,this.pointCount=0,this.color=[1,0,0,1],this.borderColor=[0,0,0,1],this.blend=!1,this.pickOffset=0,this.points=null}e.exports=function(t,e){var r=t.gl,a=i(r),l=i(r),c=n(r,o.pointVertex,o.pointFragment),u=n(r,o.pickVertex,o.pickFragment),h=new s(t,a,l,c,u);return h.update(e),t.addObject(h),h};var l,c,u=s.prototype;u.dispose=function(){this.shader.dispose(),this.pickShader.dispose(),this.offsetBuffer.dispose(),this.pickBuffer.dispose(),this.plot.removeObject(this)},u.update=function(t){var e;function r(e,r){return e in t?t[e]:r}t=t||{},this.sizeMin=r(\\\"sizeMin\\\",.5),this.sizeMax=r(\\\"sizeMax\\\",20),this.color=r(\\\"color\\\",[1,0,0,1]).slice(),this.areaRatio=r(\\\"areaRatio\\\",1),this.borderColor=r(\\\"borderColor\\\",[0,0,0,1]).slice(),this.blend=r(\\\"blend\\\",!1);var n=t.positions.length>>>1,i=t.positions instanceof Float32Array,o=t.idToIndex instanceof Int32Array&&t.idToIndex.length>=n,s=t.positions,l=i?s:a.mallocFloat32(s.length),c=o?t.idToIndex:a.mallocInt32(n);if(i||l.set(s),!o)for(l.set(s),e=0;e<n;e++)c[e]=e;this.points=s,this.offsetBuffer.update(l),this.pickBuffer.update(c),i||a.free(l),o||a.free(c),this.pointCount=n,this.pickOffset=0},u.unifiedDraw=(l=[1,0,0,0,1,0,0,0,1],c=[0,0,0,0],function(t){var e=void 0!==t,r=e?this.pickShader:this.shader,n=this.plot.gl,i=this.plot.dataBox;if(0===this.pointCount)return t;var a=i[2]-i[0],o=i[3]-i[1],s=function(t,e){var r,n=0,i=t.length>>>1;for(r=0;r<i;r++){var a=t[2*r],o=t[2*r+1];a>=e[0]&&a<=e[2]&&o>=e[1]&&o<=e[3]&&n++}return n}(this.points,i),u=this.plot.pickPixelRatio*Math.max(Math.min(this.sizeMinCap,this.sizeMin),Math.min(this.sizeMax,this.sizeMax/Math.pow(s,.33333)));l[0]=2/a,l[4]=2/o,l[6]=-2*i[0]/a-1,l[7]=-2*i[1]/o-1,this.offsetBuffer.bind(),r.bind(),r.attributes.position.pointer(),r.uniforms.matrix=l,r.uniforms.color=this.color,r.uniforms.borderColor=this.borderColor,r.uniforms.pointCloud=u<5,r.uniforms.pointSize=u,r.uniforms.centerFraction=Math.min(1,Math.max(0,Math.sqrt(1-this.areaRatio))),e&&(c[0]=255&t,c[1]=t>>8&255,c[2]=t>>16&255,c[3]=t>>24&255,this.pickBuffer.bind(),r.attributes.pickId.pointer(n.UNSIGNED_BYTE),r.uniforms.pickOffset=c,this.pickOffset=t);var h=n.getParameter(n.BLEND),f=n.getParameter(n.DITHER);return h&&!this.blend&&n.disable(n.BLEND),f&&n.disable(n.DITHER),n.drawArrays(n.POINTS,0,this.pointCount),h&&!this.blend&&n.enable(n.BLEND),f&&n.enable(n.DITHER),t+this.pointCount}),u.draw=u.unifiedDraw,u.drawPick=u.unifiedDraw,u.pick=function(t,e,r){var n=this.pickOffset,i=this.pointCount;if(r<n||r>=n+i)return null;var a=r-n,o=this.points;return{object:this,pointId:a,dataCoord:[o[2*a],o[2*a+1]]}}},{\\\"./lib/shader\\\":291,\\\"gl-buffer\\\":241,\\\"gl-shader\\\":301,\\\"typedarray-pool\\\":545}],293:[function(t,e,r){e.exports=function(t,e,r,n){var i,a,o,s,l,c=e[0],u=e[1],h=e[2],f=e[3],p=r[0],d=r[1],g=r[2],v=r[3];(a=c*p+u*d+h*g+f*v)<0&&(a=-a,p=-p,d=-d,g=-g,v=-v);1-a>1e-6?(i=Math.acos(a),o=Math.sin(i),s=Math.sin((1-n)*i)/o,l=Math.sin(n*i)/o):(s=1-n,l=n);return t[0]=s*c+l*p,t[1]=s*u+l*d,t[2]=s*h+l*g,t[3]=s*f+l*v,t}},{}],294:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){return t||0===t?t.toString():\\\"\\\"}},{}],295:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"vectorize-text\\\");e.exports=function(t,e,r){var a=i[e];a||(a=i[e]={});if(t in a)return a[t];var o={textAlign:\\\"center\\\",textBaseline:\\\"middle\\\",lineHeight:1,font:e,lineSpacing:1.25,styletags:{breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0},triangles:!0},s=n(t,o);o.triangles=!1;var l,c,u=n(t,o);if(r&&1!==r){for(l=0;l<s.positions.length;++l)for(c=0;c<s.positions[l].length;++c)s.positions[l][c]/=r;for(l=0;l<u.positions.length;++l)for(c=0;c<u.positions[l].length;++c)u.positions[l][c]/=r}var h=[[1/0,1/0],[-1/0,-1/0]],f=u.positions.length;for(l=0;l<f;++l){var p=u.positions[l];for(c=0;c<2;++c)h[0][c]=Math.min(h[0][c],p[c]),h[1][c]=Math.max(h[1][c],p[c])}return a[t]=[s,u,h]};var i={}},{\\\"vectorize-text\\\":550}],296:[function(t,e,r){var n=t(\\\"gl-shader\\\"),i=t(\\\"glslify\\\"),a=i([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nattribute vec3 position;\\\\nattribute vec4 color;\\\\nattribute vec2 glyph;\\\\nattribute vec4 id;\\\\n\\\\nuniform vec4 highlightId;\\\\nuniform float highlightScale;\\\\nuniform mat4 model, view, projection;\\\\nuniform vec3 clipBounds[2];\\\\n\\\\nvarying vec4 interpColor;\\\\nvarying vec4 pickId;\\\\nvarying vec3 dataCoordinate;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\\\n\\\\n    gl_Position = vec4(0,0,0,0);\\\\n  } else {\\\\n    float scale = 1.0;\\\\n    if(distance(highlightId, id) < 0.0001) {\\\\n      scale = highlightScale;\\\\n    }\\\\n\\\\n    vec4 worldPosition = model * vec4(position, 1);\\\\n    vec4 viewPosition = view * worldPosition;\\\\n    viewPosition = viewPosition / viewPosition.w;\\\\n    vec4 clipPosition = projection * (viewPosition + scale * vec4(glyph.x, -glyph.y, 0, 0));\\\\n\\\\n    gl_Position = clipPosition;\\\\n    interpColor = color;\\\\n    pickId = id;\\\\n    dataCoordinate = position;\\\\n  }\\\\n}\\\"]),o=i([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nattribute vec3 position;\\\\nattribute vec4 color;\\\\nattribute vec2 glyph;\\\\nattribute vec4 id;\\\\n\\\\nuniform mat4 model, view, projection;\\\\nuniform vec2 screenSize;\\\\nuniform vec3 clipBounds[2];\\\\nuniform float highlightScale, pixelRatio;\\\\nuniform vec4 highlightId;\\\\n\\\\nvarying vec4 interpColor;\\\\nvarying vec4 pickId;\\\\nvarying vec3 dataCoordinate;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\\\n\\\\n    gl_Position = vec4(0,0,0,0);\\\\n  } else {\\\\n    float scale = pixelRatio;\\\\n    if(distance(highlightId.bgr, id.bgr) < 0.001) {\\\\n      scale *= highlightScale;\\\\n    }\\\\n\\\\n    vec4 worldPosition = model * vec4(position, 1.0);\\\\n    vec4 viewPosition = view * worldPosition;\\\\n    vec4 clipPosition = projection * viewPosition;\\\\n    clipPosition /= clipPosition.w;\\\\n\\\\n    gl_Position = clipPosition + vec4(screenSize * scale * vec2(glyph.x, -glyph.y), 0.0, 0.0);\\\\n    interpColor = color;\\\\n    pickId = id;\\\\n    dataCoordinate = position;\\\\n  }\\\\n}\\\"]),s=i([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nattribute vec3 position;\\\\nattribute vec4 color;\\\\nattribute vec2 glyph;\\\\nattribute vec4 id;\\\\n\\\\nuniform float highlightScale;\\\\nuniform vec4 highlightId;\\\\nuniform vec3 axes[2];\\\\nuniform mat4 model, view, projection;\\\\nuniform vec2 screenSize;\\\\nuniform vec3 clipBounds[2];\\\\nuniform float scale, pixelRatio;\\\\n\\\\nvarying vec4 interpColor;\\\\nvarying vec4 pickId;\\\\nvarying vec3 dataCoordinate;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\\\n\\\\n    gl_Position = vec4(0,0,0,0);\\\\n  } else {\\\\n    float lscale = pixelRatio * scale;\\\\n    if(distance(highlightId, id) < 0.0001) {\\\\n      lscale *= highlightScale;\\\\n    }\\\\n\\\\n    vec4 clipCenter   = projection * view * model * vec4(position, 1);\\\\n    vec3 dataPosition = position + 0.5*lscale*(axes[0] * glyph.x + axes[1] * glyph.y) * clipCenter.w * screenSize.y;\\\\n    vec4 clipPosition = projection * view * model * vec4(dataPosition, 1);\\\\n\\\\n    gl_Position = clipPosition;\\\\n    interpColor = color;\\\\n    pickId = id;\\\\n    dataCoordinate = dataPosition;\\\\n  }\\\\n}\\\\n\\\"]),l=i([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3 fragClipBounds[2];\\\\nuniform float opacity;\\\\n\\\\nvarying vec4 interpColor;\\\\nvarying vec3 dataCoordinate;\\\\n\\\\nvoid main() {\\\\n  if (\\\\n    outOfRange(fragClipBounds[0], fragClipBounds[1], dataCoordinate) ||\\\\n    interpColor.a * opacity == 0.\\\\n  ) discard;\\\\n  gl_FragColor = interpColor * opacity;\\\\n}\\\\n\\\"]),c=i([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3 fragClipBounds[2];\\\\nuniform float pickGroup;\\\\n\\\\nvarying vec4 pickId;\\\\nvarying vec3 dataCoordinate;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(fragClipBounds[0], fragClipBounds[1], dataCoordinate)) discard;\\\\n\\\\n  gl_FragColor = vec4(pickGroup, pickId.bgr);\\\\n}\\\"]),u=[{name:\\\"position\\\",type:\\\"vec3\\\"},{name:\\\"color\\\",type:\\\"vec4\\\"},{name:\\\"glyph\\\",type:\\\"vec2\\\"},{name:\\\"id\\\",type:\\\"vec4\\\"}],h={vertex:a,fragment:l,attributes:u},f={vertex:o,fragment:l,attributes:u},p={vertex:s,fragment:l,attributes:u},d={vertex:a,fragment:c,attributes:u},g={vertex:o,fragment:c,attributes:u},v={vertex:s,fragment:c,attributes:u};function m(t,e){var r=n(t,e),i=r.attributes;return i.position.location=0,i.color.location=1,i.glyph.location=2,i.id.location=3,r}r.createPerspective=function(t){return m(t,h)},r.createOrtho=function(t){return m(t,f)},r.createProject=function(t){return m(t,p)},r.createPickPerspective=function(t){return m(t,d)},r.createPickOrtho=function(t){return m(t,g)},r.createPickProject=function(t){return m(t,v)}},{\\\"gl-shader\\\":301,glslify:409}],297:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"is-string-blank\\\"),i=t(\\\"gl-buffer\\\"),a=t(\\\"gl-vao\\\"),o=t(\\\"typedarray-pool\\\"),s=t(\\\"gl-mat4/multiply\\\"),l=t(\\\"./lib/shaders\\\"),c=t(\\\"./lib/glyphs\\\"),u=t(\\\"./lib/get-simple-string\\\"),h=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function f(t,e){var r=t[0],n=t[1],i=t[2],a=t[3];return t[0]=e[0]*r+e[4]*n+e[8]*i+e[12]*a,t[1]=e[1]*r+e[5]*n+e[9]*i+e[13]*a,t[2]=e[2]*r+e[6]*n+e[10]*i+e[14]*a,t[3]=e[3]*r+e[7]*n+e[11]*i+e[15]*a,t}function p(t,e,r,n){return f(n,n),f(n,n),f(n,n)}function d(t,e){this.index=t,this.dataCoordinate=this.position=e}function g(t){return!0===t?1:t>1?1:t}function v(t,e,r,n,i,a,o,s,l,c,u,h){this.gl=t,this.pixelRatio=1,this.shader=e,this.orthoShader=r,this.projectShader=n,this.pointBuffer=i,this.colorBuffer=a,this.glyphBuffer=o,this.idBuffer=s,this.vao=l,this.vertexCount=0,this.lineVertexCount=0,this.opacity=1,this.hasAlpha=!1,this.lineWidth=0,this.projectScale=[2/3,2/3,2/3],this.projectOpacity=[1,1,1],this.projectHasAlpha=!1,this.pickId=0,this.pickPerspectiveShader=c,this.pickOrthoShader=u,this.pickProjectShader=h,this.points=[],this._selectResult=new d(0,[0,0,0]),this.useOrtho=!0,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.axesProject=[!0,!0,!0],this.axesBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.highlightId=[1,1,1,1],this.highlightScale=2,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.dirty=!0}e.exports=function(t){var e=t.gl,r=l.createPerspective(e),n=l.createOrtho(e),o=l.createProject(e),s=l.createPickPerspective(e),c=l.createPickOrtho(e),u=l.createPickProject(e),h=i(e),f=i(e),p=i(e),d=i(e),g=a(e,[{buffer:h,size:3,type:e.FLOAT},{buffer:f,size:4,type:e.FLOAT},{buffer:p,size:2,type:e.FLOAT},{buffer:d,size:4,type:e.UNSIGNED_BYTE,normalized:!0}]),m=new v(e,r,n,o,h,f,p,d,g,s,c,u);return m.update(t),m};var m=v.prototype;m.pickSlots=1,m.setPickBase=function(t){this.pickId=t},m.isTransparent=function(){if(this.hasAlpha)return!0;for(var t=0;t<3;++t)if(this.axesProject[t]&&this.projectHasAlpha)return!0;return!1},m.isOpaque=function(){if(!this.hasAlpha)return!0;for(var t=0;t<3;++t)if(this.axesProject[t]&&!this.projectHasAlpha)return!0;return!1};var y=[0,0],x=[0,0,0],b=[0,0,0],_=[0,0,0,1],w=[0,0,0,1],k=h.slice(),T=[0,0,0],A=[[0,0,0],[0,0,0]];function M(t){return t[0]=t[1]=t[2]=0,t}function S(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=1,t}function E(t,e,r,n){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[r]=n,t}function C(t,e,r,n){var i,a=e.axesProject,o=e.gl,l=t.uniforms,c=r.model||h,u=r.view||h,f=r.projection||h,d=e.axesBounds,g=function(t){for(var e=A,r=0;r<2;++r)for(var n=0;n<3;++n)e[r][n]=Math.max(Math.min(t[r][n],1e8),-1e8);return e}(e.clipBounds);i=e.axes&&e.axes.lastCubeProps?e.axes.lastCubeProps.axis:[1,1,1],y[0]=2/o.drawingBufferWidth,y[1]=2/o.drawingBufferHeight,t.bind(),l.view=u,l.projection=f,l.screenSize=y,l.highlightId=e.highlightId,l.highlightScale=e.highlightScale,l.clipBounds=g,l.pickGroup=e.pickId/255,l.pixelRatio=n;for(var v=0;v<3;++v)if(a[v]){l.scale=e.projectScale[v],l.opacity=e.projectOpacity[v];for(var m=k,C=0;C<16;++C)m[C]=0;for(C=0;C<4;++C)m[5*C]=1;m[5*v]=0,i[v]<0?m[12+v]=d[0][v]:m[12+v]=d[1][v],s(m,c,m),l.model=m;var L=(v+1)%3,P=(v+2)%3,O=M(x),z=M(b);O[L]=1,z[P]=1;var I=p(0,0,0,S(_,O)),D=p(0,0,0,S(w,z));if(Math.abs(I[1])>Math.abs(D[1])){var R=I;I=D,D=R,R=O,O=z,z=R;var F=L;L=P,P=F}I[0]<0&&(O[L]=-1),D[1]>0&&(z[P]=-1);var B=0,N=0;for(C=0;C<4;++C)B+=Math.pow(c[4*L+C],2),N+=Math.pow(c[4*P+C],2);O[L]/=Math.sqrt(B),z[P]/=Math.sqrt(N),l.axes[0]=O,l.axes[1]=z,l.fragClipBounds[0]=E(T,g[0],v,-1e8),l.fragClipBounds[1]=E(T,g[1],v,1e8),e.vao.bind(),e.vao.draw(o.TRIANGLES,e.vertexCount),e.lineWidth>0&&(o.lineWidth(e.lineWidth*n),e.vao.draw(o.LINES,e.lineVertexCount,e.vertexCount)),e.vao.unbind()}}var L=[[-1e8,-1e8,-1e8],[1e8,1e8,1e8]];function P(t,e,r,n,i,a,o){var s=r.gl;if((a===r.projectHasAlpha||o)&&C(e,r,n,i),a===r.hasAlpha||o){t.bind();var l=t.uniforms;l.model=n.model||h,l.view=n.view||h,l.projection=n.projection||h,y[0]=2/s.drawingBufferWidth,y[1]=2/s.drawingBufferHeight,l.screenSize=y,l.highlightId=r.highlightId,l.highlightScale=r.highlightScale,l.fragClipBounds=L,l.clipBounds=r.axes.bounds,l.opacity=r.opacity,l.pickGroup=r.pickId/255,l.pixelRatio=i,r.vao.bind(),r.vao.draw(s.TRIANGLES,r.vertexCount),r.lineWidth>0&&(s.lineWidth(r.lineWidth*i),r.vao.draw(s.LINES,r.lineVertexCount,r.vertexCount)),r.vao.unbind()}}function O(t,e,r,i){var a;a=Array.isArray(t)?e<t.length?t[e]:void 0:t,a=u(a);var o=!0;n(a)&&(a=\\\"\\\\u25bc\\\",o=!1);var s=c(a,r,i);return{mesh:s[0],lines:s[1],bounds:s[2],visible:o}}m.draw=function(t){P(this.useOrtho?this.orthoShader:this.shader,this.projectShader,this,t,this.pixelRatio,!1,!1)},m.drawTransparent=function(t){P(this.useOrtho?this.orthoShader:this.shader,this.projectShader,this,t,this.pixelRatio,!0,!1)},m.drawPick=function(t){P(this.useOrtho?this.pickOrthoShader:this.pickPerspectiveShader,this.pickProjectShader,this,t,1,!0,!0)},m.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=t.value[2]+(t.value[1]<<8)+(t.value[0]<<16);if(e>=this.pointCount||e<0)return null;var r=this.points[e],n=this._selectResult;n.index=e;for(var i=0;i<3;++i)n.position[i]=n.dataCoordinate[i]=r[i];return n},m.highlight=function(t){if(t){var e=t.index,r=255&e,n=e>>8&255,i=e>>16&255;this.highlightId=[r/255,n/255,i/255,0]}else this.highlightId=[1,1,1,1]},m.update=function(t){if(\\\"perspective\\\"in(t=t||{})&&(this.useOrtho=!t.perspective),\\\"orthographic\\\"in t&&(this.useOrtho=!!t.orthographic),\\\"lineWidth\\\"in t&&(this.lineWidth=t.lineWidth),\\\"project\\\"in t)if(Array.isArray(t.project))this.axesProject=t.project;else{var e=!!t.project;this.axesProject=[e,e,e]}if(\\\"projectScale\\\"in t)if(Array.isArray(t.projectScale))this.projectScale=t.projectScale.slice();else{var r=+t.projectScale;this.projectScale=[r,r,r]}if(this.projectHasAlpha=!1,\\\"projectOpacity\\\"in t){if(Array.isArray(t.projectOpacity))this.projectOpacity=t.projectOpacity.slice();else{r=+t.projectOpacity;this.projectOpacity=[r,r,r]}for(var n=0;n<3;++n)this.projectOpacity[n]=g(this.projectOpacity[n]),this.projectOpacity[n]<1&&(this.projectHasAlpha=!0)}this.hasAlpha=!1,\\\"opacity\\\"in t&&(this.opacity=g(t.opacity),this.opacity<1&&(this.hasAlpha=!0)),this.dirty=!0;var i,a,s=t.position,l=t.font||\\\"normal\\\",c=t.alignment||[0,0];if(2===c.length)i=c[0],a=c[1];else{i=[],a=[];for(n=0;n<c.length;++n)i[n]=c[n][0],a[n]=c[n][1]}var u=[1/0,1/0,1/0],h=[-1/0,-1/0,-1/0],f=t.glyph,p=t.color,d=t.size,v=t.angle,m=t.lineColor,y=-1,x=0,b=0,_=0;if(s.length){_=s.length;t:for(n=0;n<_;++n){for(var w=s[n],k=0;k<3;++k)if(isNaN(w[k])||!isFinite(w[k]))continue t;var T=(N=O(f,n,l,this.pixelRatio)).mesh,A=N.lines,M=N.bounds;x+=3*T.cells.length,b+=2*A.edges.length}}var S=x+b,E=o.mallocFloat(3*S),C=o.mallocFloat(4*S),L=o.mallocFloat(2*S),P=o.mallocUint32(S);if(S>0){var z=0,I=x,D=[0,0,0,1],R=[0,0,0,1],F=Array.isArray(p)&&Array.isArray(p[0]),B=Array.isArray(m)&&Array.isArray(m[0]);t:for(n=0;n<_;++n){y+=1;for(w=s[n],k=0;k<3;++k){if(isNaN(w[k])||!isFinite(w[k]))continue t;h[k]=Math.max(h[k],w[k]),u[k]=Math.min(u[k],w[k])}T=(N=O(f,n,l,this.pixelRatio)).mesh,A=N.lines,M=N.bounds;var N,j=N.visible;if(j)if(Array.isArray(p)){if(3===(U=F?n<p.length?p[n]:[0,0,0,0]:p).length){for(k=0;k<3;++k)D[k]=U[k];D[3]=1}else if(4===U.length){for(k=0;k<4;++k)D[k]=U[k];!this.hasAlpha&&U[3]<1&&(this.hasAlpha=!0)}}else D[0]=D[1]=D[2]=0,D[3]=1;else D=[1,1,1,0];if(j)if(Array.isArray(m)){var U;if(3===(U=B?n<m.length?m[n]:[0,0,0,0]:m).length){for(k=0;k<3;++k)R[k]=U[k];R[k]=1}else if(4===U.length){for(k=0;k<4;++k)R[k]=U[k];!this.hasAlpha&&U[3]<1&&(this.hasAlpha=!0)}}else R[0]=R[1]=R[2]=0,R[3]=1;else R=[1,1,1,0];var V=.5;j?Array.isArray(d)?V=n<d.length?+d[n]:12:d?V=+d:this.useOrtho&&(V=12):V=0;var q=0;Array.isArray(v)?q=n<v.length?+v[n]:0:v&&(q=+v);var H=Math.cos(q),G=Math.sin(q);for(w=s[n],k=0;k<3;++k)h[k]=Math.max(h[k],w[k]),u[k]=Math.min(u[k],w[k]);var Y=i,W=a;Y=0;Array.isArray(i)?Y=n<i.length?i[n]:0:i&&(Y=i);W=0;Array.isArray(a)?W=n<a.length?a[n]:0:a&&(W=a);var X=[Y*=Y>0?1-M[0][0]:Y<0?1+M[1][0]:1,W*=W>0?1-M[0][1]:W<0?1+M[1][1]:1],Z=T.cells||[],J=T.positions||[];for(k=0;k<Z.length;++k)for(var K=Z[k],$=0;$<3;++$){for(var Q=0;Q<3;++Q)E[3*z+Q]=w[Q];for(Q=0;Q<4;++Q)C[4*z+Q]=D[Q];P[z]=y;var tt=J[K[$]];L[2*z]=V*(H*tt[0]-G*tt[1]+X[0]),L[2*z+1]=V*(G*tt[0]+H*tt[1]+X[1]),z+=1}for(Z=A.edges,J=A.positions,k=0;k<Z.length;++k)for(K=Z[k],$=0;$<2;++$){for(Q=0;Q<3;++Q)E[3*I+Q]=w[Q];for(Q=0;Q<4;++Q)C[4*I+Q]=R[Q];P[I]=y;tt=J[K[$]];L[2*I]=V*(H*tt[0]-G*tt[1]+X[0]),L[2*I+1]=V*(G*tt[0]+H*tt[1]+X[1]),I+=1}}}this.bounds=[u,h],this.points=s,this.pointCount=s.length,this.vertexCount=x,this.lineVertexCount=b,this.pointBuffer.update(E),this.colorBuffer.update(C),this.glyphBuffer.update(L),this.idBuffer.update(P),o.free(E),o.free(C),o.free(L),o.free(P)},m.dispose=function(){this.shader.dispose(),this.orthoShader.dispose(),this.pickPerspectiveShader.dispose(),this.pickOrthoShader.dispose(),this.vao.dispose(),this.pointBuffer.dispose(),this.colorBuffer.dispose(),this.glyphBuffer.dispose(),this.idBuffer.dispose()}},{\\\"./lib/get-simple-string\\\":294,\\\"./lib/glyphs\\\":295,\\\"./lib/shaders\\\":296,\\\"gl-buffer\\\":241,\\\"gl-mat4/multiply\\\":267,\\\"gl-vao\\\":327,\\\"is-string-blank\\\":423,\\\"typedarray-pool\\\":545}],298:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"glslify\\\");r.boxVertex=n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec2 vertex;\\\\n\\\\nuniform vec2 cornerA, cornerB;\\\\n\\\\nvoid main() {\\\\n  gl_Position = vec4(mix(cornerA, cornerB, vertex), 0, 1);\\\\n}\\\\n\\\"]),r.boxFragment=n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nuniform vec4 color;\\\\n\\\\nvoid main() {\\\\n  gl_FragColor = color;\\\\n}\\\\n\\\"])},{glslify:409}],299:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"gl-shader\\\"),i=t(\\\"gl-buffer\\\"),a=t(\\\"./lib/shaders\\\");function o(t,e,r){this.plot=t,this.boxBuffer=e,this.boxShader=r,this.enabled=!0,this.selectBox=[1/0,1/0,-1/0,-1/0],this.borderColor=[0,0,0,1],this.innerFill=!1,this.innerColor=[0,0,0,.25],this.outerFill=!0,this.outerColor=[0,0,0,.5],this.borderWidth=10}e.exports=function(t,e){var r=t.gl,s=i(r,[0,0,0,1,1,0,1,1]),l=n(r,a.boxVertex,a.boxFragment),c=new o(t,s,l);return c.update(e),t.addOverlay(c),c};var s=o.prototype;s.draw=function(){if(this.enabled){var t=this.plot,e=this.selectBox,r=this.borderWidth,n=(this.innerFill,this.innerColor),i=(this.outerFill,this.outerColor),a=this.borderColor,o=t.box,s=t.screenBox,l=t.dataBox,c=t.viewBox,u=t.pixelRatio,h=(e[0]-l[0])*(c[2]-c[0])/(l[2]-l[0])+c[0],f=(e[1]-l[1])*(c[3]-c[1])/(l[3]-l[1])+c[1],p=(e[2]-l[0])*(c[2]-c[0])/(l[2]-l[0])+c[0],d=(e[3]-l[1])*(c[3]-c[1])/(l[3]-l[1])+c[1];if(h=Math.max(h,c[0]),f=Math.max(f,c[1]),p=Math.min(p,c[2]),d=Math.min(d,c[3]),!(p<h||d<f)){o.bind();var g=s[2]-s[0],v=s[3]-s[1];if(this.outerFill&&(o.drawBox(0,0,g,f,i),o.drawBox(0,f,h,d,i),o.drawBox(0,d,g,v,i),o.drawBox(p,f,g,d,i)),this.innerFill&&o.drawBox(h,f,p,d,n),r>0){var m=r*u;o.drawBox(h-m,f-m,p+m,f+m,a),o.drawBox(h-m,d-m,p+m,d+m,a),o.drawBox(h-m,f-m,h+m,d+m,a),o.drawBox(p-m,f-m,p+m,d+m,a)}}}},s.update=function(t){t=t||{},this.innerFill=!!t.innerFill,this.outerFill=!!t.outerFill,this.innerColor=(t.innerColor||[0,0,0,.5]).slice(),this.outerColor=(t.outerColor||[0,0,0,.5]).slice(),this.borderColor=(t.borderColor||[0,0,0,1]).slice(),this.borderWidth=t.borderWidth||0,this.selectBox=(t.selectBox||this.selectBox).slice()},s.dispose=function(){this.boxBuffer.dispose(),this.boxShader.dispose(),this.plot.removeOverlay(this)}},{\\\"./lib/shaders\\\":298,\\\"gl-buffer\\\":241,\\\"gl-shader\\\":301}],300:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){var r=n(t,e),a=i.mallocUint8(e[0]*e[1]*4);return new c(t,r,a)};var n=t(\\\"gl-fbo\\\"),i=t(\\\"typedarray-pool\\\"),a=t(\\\"ndarray\\\"),o=t(\\\"bit-twiddle\\\").nextPow2,s=t(\\\"cwise/lib/wrapper\\\")({args:[\\\"array\\\",{offset:[0,0,1],array:0},{offset:[0,0,2],array:0},{offset:[0,0,3],array:0},\\\"scalar\\\",\\\"scalar\\\",\\\"index\\\"],pre:{body:\\\"{this_closestD2=1e8,this_closestX=-1,this_closestY=-1}\\\",args:[],thisVars:[\\\"this_closestD2\\\",\\\"this_closestX\\\",\\\"this_closestY\\\"],localVars:[]},body:{body:\\\"{if(_inline_16_arg0_<255||_inline_16_arg1_<255||_inline_16_arg2_<255||_inline_16_arg3_<255){var _inline_16_l=_inline_16_arg4_-_inline_16_arg6_[0],_inline_16_a=_inline_16_arg5_-_inline_16_arg6_[1],_inline_16_f=_inline_16_l*_inline_16_l+_inline_16_a*_inline_16_a;_inline_16_f<this_closestD2&&(this_closestD2=_inline_16_f,this_closestX=_inline_16_arg6_[0],this_closestY=_inline_16_arg6_[1])}}\\\",args:[{name:\\\"_inline_16_arg0_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_16_arg1_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_16_arg2_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_16_arg3_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_16_arg4_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_16_arg5_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_16_arg6_\\\",lvalue:!1,rvalue:!0,count:4}],thisVars:[\\\"this_closestD2\\\",\\\"this_closestX\\\",\\\"this_closestY\\\"],localVars:[\\\"_inline_16_a\\\",\\\"_inline_16_f\\\",\\\"_inline_16_l\\\"]},post:{body:\\\"{return[this_closestX,this_closestY,this_closestD2]}\\\",args:[],thisVars:[\\\"this_closestD2\\\",\\\"this_closestX\\\",\\\"this_closestY\\\"],localVars:[]},debug:!1,funcName:\\\"cwise\\\",blockSize:64});function l(t,e,r,n,i){this.coord=[t,e],this.id=r,this.value=n,this.distance=i}function c(t,e,r){this.gl=t,this.fbo=e,this.buffer=r,this._readTimeout=null;var n=this;this._readCallback=function(){n.gl&&(e.bind(),t.readPixels(0,0,e.shape[0],e.shape[1],t.RGBA,t.UNSIGNED_BYTE,n.buffer),n._readTimeout=null)}}var u=c.prototype;Object.defineProperty(u,\\\"shape\\\",{get:function(){return this.gl?this.fbo.shape.slice():[0,0]},set:function(t){if(this.gl){this.fbo.shape=t;var e=this.fbo.shape[0],r=this.fbo.shape[1];if(r*e*4>this.buffer.length){i.free(this.buffer);for(var n=this.buffer=i.mallocUint8(o(r*e*4)),a=0;a<r*e*4;++a)n[a]=255}return t}}}),u.begin=function(){var t=this.gl;this.shape;t&&(this.fbo.bind(),t.clearColor(1,1,1,1),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT))},u.end=function(){var t=this.gl;t&&(t.bindFramebuffer(t.FRAMEBUFFER,null),this._readTimeout||clearTimeout(this._readTimeout),this._readTimeout=setTimeout(this._readCallback,1))},u.query=function(t,e,r){if(!this.gl)return null;var n=this.fbo.shape.slice();t|=0,e|=0,\\\"number\\\"!=typeof r&&(r=1);var i=0|Math.min(Math.max(t-r,0),n[0]),o=0|Math.min(Math.max(t+r,0),n[0]),c=0|Math.min(Math.max(e-r,0),n[1]),u=0|Math.min(Math.max(e+r,0),n[1]);if(o<=i||u<=c)return null;var h=[o-i,u-c],f=a(this.buffer,[h[0],h[1],4],[4,4*n[0],1],4*(i+n[0]*c)),p=s(f.hi(h[0],h[1],1),r,r),d=p[0],g=p[1];return d<0||Math.pow(this.radius,2)<p[2]?null:new l(d+i|0,g+c|0,f.get(d,g,0),[f.get(d,g,1),f.get(d,g,2),f.get(d,g,3)],Math.sqrt(p[2]))},u.dispose=function(){this.gl&&(this.fbo.dispose(),i.free(this.buffer),this.gl=null,this._readTimeout&&clearTimeout(this._readTimeout))}},{\\\"bit-twiddle\\\":92,\\\"cwise/lib/wrapper\\\":149,\\\"gl-fbo\\\":249,ndarray:450,\\\"typedarray-pool\\\":545}],301:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./lib/create-uniforms\\\"),i=t(\\\"./lib/create-attributes\\\"),a=t(\\\"./lib/reflect\\\"),o=t(\\\"./lib/shader-cache\\\"),s=t(\\\"./lib/runtime-reflect\\\"),l=t(\\\"./lib/GLError\\\");function c(t){this.gl=t,this.gl.lastAttribCount=0,this._vref=this._fref=this._relink=this.vertShader=this.fragShader=this.program=this.attributes=this.uniforms=this.types=null}var u=c.prototype;function h(t,e){return t.name<e.name?-1:1}u.bind=function(){var t;this.program||this._relink();var e=this.gl.getProgramParameter(this.program,this.gl.ACTIVE_ATTRIBUTES),r=this.gl.lastAttribCount;if(e>r)for(t=r;t<e;t++)this.gl.enableVertexAttribArray(t);else if(r>e)for(t=e;t<r;t++)this.gl.disableVertexAttribArray(t);this.gl.lastAttribCount=e,this.gl.useProgram(this.program)},u.dispose=function(){for(var t=this.gl.lastAttribCount,e=0;e<t;e++)this.gl.disableVertexAttribArray(e);this.gl.lastAttribCount=0,this._fref&&this._fref.dispose(),this._vref&&this._vref.dispose(),this.attributes=this.types=this.vertShader=this.fragShader=this.program=this._relink=this._fref=this._vref=null},u.update=function(t,e,r,c){if(!e||1===arguments.length){var u=t;t=u.vertex,e=u.fragment,r=u.uniforms,c=u.attributes}var f=this,p=f.gl,d=f._vref;f._vref=o.shader(p,p.VERTEX_SHADER,t),d&&d.dispose(),f.vertShader=f._vref.shader;var g=this._fref;if(f._fref=o.shader(p,p.FRAGMENT_SHADER,e),g&&g.dispose(),f.fragShader=f._fref.shader,!r||!c){var v=p.createProgram();if(p.attachShader(v,f.fragShader),p.attachShader(v,f.vertShader),p.linkProgram(v),!p.getProgramParameter(v,p.LINK_STATUS)){var m=p.getProgramInfoLog(v);throw new l(m,\\\"Error linking program:\\\"+m)}r=r||s.uniforms(p,v),c=c||s.attributes(p,v),p.deleteProgram(v)}(c=c.slice()).sort(h);var y,x=[],b=[],_=[];for(y=0;y<c.length;++y){var w=c[y];if(w.type.indexOf(\\\"mat\\\")>=0){for(var k=0|w.type.charAt(w.type.length-1),T=new Array(k),A=0;A<k;++A)T[A]=_.length,b.push(w.name+\\\"[\\\"+A+\\\"]\\\"),\\\"number\\\"==typeof w.location?_.push(w.location+A):Array.isArray(w.location)&&w.location.length===k&&\\\"number\\\"==typeof w.location[A]?_.push(0|w.location[A]):_.push(-1);x.push({name:w.name,type:w.type,locations:T})}else x.push({name:w.name,type:w.type,locations:[_.length]}),b.push(w.name),\\\"number\\\"==typeof w.location?_.push(0|w.location):_.push(-1)}var M=0;for(y=0;y<_.length;++y)if(_[y]<0){for(;_.indexOf(M)>=0;)M+=1;_[y]=M}var S=new Array(r.length);function E(){f.program=o.program(p,f._vref,f._fref,b,_);for(var t=0;t<r.length;++t)S[t]=p.getUniformLocation(f.program,r[t].name)}E(),f._relink=E,f.types={uniforms:a(r),attributes:a(c)},f.attributes=i(p,f,x,_),Object.defineProperty(f,\\\"uniforms\\\",n(p,f,r,S))},e.exports=function(t,e,r,n,i){var a=new c(t);return a.update(e,r,n,i),a}},{\\\"./lib/GLError\\\":302,\\\"./lib/create-attributes\\\":303,\\\"./lib/create-uniforms\\\":304,\\\"./lib/reflect\\\":305,\\\"./lib/runtime-reflect\\\":306,\\\"./lib/shader-cache\\\":307}],302:[function(t,e,r){function n(t,e,r){this.shortMessage=e||\\\"\\\",this.longMessage=r||\\\"\\\",this.rawError=t||\\\"\\\",this.message=\\\"gl-shader: \\\"+(e||t||\\\"\\\")+(r?\\\"\\\\n\\\"+r:\\\"\\\"),this.stack=(new Error).stack}n.prototype=new Error,n.prototype.name=\\\"GLError\\\",n.prototype.constructor=n,e.exports=n},{}],303:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,i){for(var a={},l=0,c=r.length;l<c;++l){var u=r[l],h=u.name,f=u.type,p=u.locations;switch(f){case\\\"bool\\\":case\\\"int\\\":case\\\"float\\\":o(t,e,p[0],i,1,a,h);break;default:if(f.indexOf(\\\"vec\\\")>=0){var d=f.charCodeAt(f.length-1)-48;if(d<2||d>4)throw new n(\\\"\\\",\\\"Invalid data type for attribute \\\"+h+\\\": \\\"+f);o(t,e,p[0],i,d,a,h)}else{if(!(f.indexOf(\\\"mat\\\")>=0))throw new n(\\\"\\\",\\\"Unknown data type for attribute \\\"+h+\\\": \\\"+f);var d=f.charCodeAt(f.length-1)-48;if(d<2||d>4)throw new n(\\\"\\\",\\\"Invalid data type for attribute \\\"+h+\\\": \\\"+f);s(t,e,p,i,d,a,h)}}}return a};var n=t(\\\"./GLError\\\");function i(t,e,r,n,i,a){this._gl=t,this._wrapper=e,this._index=r,this._locations=n,this._dimension=i,this._constFunc=a}var a=i.prototype;function o(t,e,r,n,a,o,s){for(var l=[\\\"gl\\\",\\\"v\\\"],c=[],u=0;u<a;++u)l.push(\\\"x\\\"+u),c.push(\\\"x\\\"+u);l.push(\\\"if(x0.length===void 0){return gl.vertexAttrib\\\"+a+\\\"f(v,\\\"+c.join()+\\\")}else{return gl.vertexAttrib\\\"+a+\\\"fv(v,x0)}\\\");var h=Function.apply(null,l),f=new i(t,e,r,n,a,h);Object.defineProperty(o,s,{set:function(e){return t.disableVertexAttribArray(n[r]),h(t,n[r],e),e},get:function(){return f},enumerable:!0})}function s(t,e,r,n,i,a,s){for(var l=new Array(i),c=new Array(i),u=0;u<i;++u)o(t,e,r[u],n,i,l,u),c[u]=l[u];Object.defineProperty(l,\\\"location\\\",{set:function(t){if(Array.isArray(t))for(var e=0;e<i;++e)c[e].location=t[e];else for(e=0;e<i;++e)c[e].location=t+e;return t},get:function(){for(var t=new Array(i),e=0;e<i;++e)t[e]=n[r[e]];return t},enumerable:!0}),l.pointer=function(e,a,o,s){e=e||t.FLOAT,a=!!a,o=o||i*i,s=s||0;for(var l=0;l<i;++l){var c=n[r[l]];t.vertexAttribPointer(c,i,e,a,o,s+l*i),t.enableVertexAttribArray(c)}};var h=new Array(i),f=t[\\\"vertexAttrib\\\"+i+\\\"fv\\\"];Object.defineProperty(a,s,{set:function(e){for(var a=0;a<i;++a){var o=n[r[a]];if(t.disableVertexAttribArray(o),Array.isArray(e[0]))f.call(t,o,e[a]);else{for(var s=0;s<i;++s)h[s]=e[i*a+s];f.call(t,o,h)}}return e},get:function(){return l},enumerable:!0})}a.pointer=function(t,e,r,n){var i=this._gl,a=this._locations[this._index];i.vertexAttribPointer(a,this._dimension,t||i.FLOAT,!!e,r||0,n||0),i.enableVertexAttribArray(a)},a.set=function(t,e,r,n){return this._constFunc(this._locations[this._index],t,e,r,n)},Object.defineProperty(a,\\\"location\\\",{get:function(){return this._locations[this._index]},set:function(t){return t!==this._locations[this._index]&&(this._locations[this._index]=0|t,this._wrapper.program=null),0|t}})},{\\\"./GLError\\\":302}],304:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./reflect\\\"),i=t(\\\"./GLError\\\");function a(t){return new Function(\\\"y\\\",\\\"return function(){return y}\\\")(t)}function o(t,e){for(var r=new Array(t),n=0;n<t;++n)r[n]=e;return r}e.exports=function(t,e,r,s){function l(t,e,r){switch(r){case\\\"bool\\\":case\\\"int\\\":case\\\"sampler2D\\\":case\\\"samplerCube\\\":return\\\"gl.uniform1i(locations[\\\"+e+\\\"],obj\\\"+t+\\\")\\\";case\\\"float\\\":return\\\"gl.uniform1f(locations[\\\"+e+\\\"],obj\\\"+t+\\\")\\\";default:var n=r.indexOf(\\\"vec\\\");if(!(0<=n&&n<=1&&r.length===4+n)){if(0===r.indexOf(\\\"mat\\\")&&4===r.length){var a=r.charCodeAt(r.length-1)-48;if(a<2||a>4)throw new i(\\\"\\\",\\\"Invalid uniform dimension type for matrix \\\"+name+\\\": \\\"+r);return\\\"gl.uniformMatrix\\\"+a+\\\"fv(locations[\\\"+e+\\\"],false,obj\\\"+t+\\\")\\\"}throw new i(\\\"\\\",\\\"Unknown uniform data type for \\\"+name+\\\": \\\"+r)}var a=r.charCodeAt(r.length-1)-48;if(a<2||a>4)throw new i(\\\"\\\",\\\"Invalid data type\\\");switch(r.charAt(0)){case\\\"b\\\":case\\\"i\\\":return\\\"gl.uniform\\\"+a+\\\"iv(locations[\\\"+e+\\\"],obj\\\"+t+\\\")\\\";case\\\"v\\\":return\\\"gl.uniform\\\"+a+\\\"fv(locations[\\\"+e+\\\"],obj\\\"+t+\\\")\\\";default:throw new i(\\\"\\\",\\\"Unrecognized data type for vector \\\"+name+\\\": \\\"+r)}}}function c(e){for(var n=[\\\"return function updateProperty(obj){\\\"],i=function t(e,r){if(\\\"object\\\"!=typeof r)return[[e,r]];var n=[];for(var i in r){var a=r[i],o=e;parseInt(i)+\\\"\\\"===i?o+=\\\"[\\\"+i+\\\"]\\\":o+=\\\".\\\"+i,\\\"object\\\"==typeof a?n.push.apply(n,t(o,a)):n.push([o,a])}return n}(\\\"\\\",e),a=0;a<i.length;++a){var o=i[a],c=o[0],u=o[1];s[u]&&n.push(l(c,u,r[u].type))}n.push(\\\"return obj}\\\");var h=new Function(\\\"gl\\\",\\\"locations\\\",n.join(\\\"\\\\n\\\"));return h(t,s)}function u(n,l,u){if(\\\"object\\\"==typeof u){var f=h(u);Object.defineProperty(n,l,{get:a(f),set:c(u),enumerable:!0,configurable:!1})}else s[u]?Object.defineProperty(n,l,{get:(p=u,new Function(\\\"gl\\\",\\\"wrapper\\\",\\\"locations\\\",\\\"return function(){return gl.getUniform(wrapper.program,locations[\\\"+p+\\\"])}\\\")(t,e,s)),set:c(u),enumerable:!0,configurable:!1}):n[l]=function(t){switch(t){case\\\"bool\\\":return!1;case\\\"int\\\":case\\\"sampler2D\\\":case\\\"samplerCube\\\":case\\\"float\\\":return 0;default:var e=t.indexOf(\\\"vec\\\");if(0<=e&&e<=1&&t.length===4+e){var r=t.charCodeAt(t.length-1)-48;if(r<2||r>4)throw new i(\\\"\\\",\\\"Invalid data type\\\");return\\\"b\\\"===t.charAt(0)?o(r,!1):o(r,0)}if(0===t.indexOf(\\\"mat\\\")&&4===t.length){var r=t.charCodeAt(t.length-1)-48;if(r<2||r>4)throw new i(\\\"\\\",\\\"Invalid uniform dimension type for matrix \\\"+name+\\\": \\\"+t);return o(r*r,0)}throw new i(\\\"\\\",\\\"Unknown uniform data type for \\\"+name+\\\": \\\"+t)}}(r[u].type);var p}function h(t){var e;if(Array.isArray(t)){e=new Array(t.length);for(var r=0;r<t.length;++r)u(e,r,t[r])}else for(var n in e={},t)u(e,n,t[n]);return e}var f=n(r,!0);return{get:a(h(f)),set:c(f),enumerable:!0,configurable:!0}}},{\\\"./GLError\\\":302,\\\"./reflect\\\":305}],305:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){for(var r={},n=0;n<t.length;++n)for(var i=t[n].name,a=i.split(\\\".\\\"),o=r,s=0;s<a.length;++s){var l=a[s].split(\\\"[\\\");if(l.length>1){l[0]in o||(o[l[0]]=[]),o=o[l[0]];for(var c=1;c<l.length;++c){var u=parseInt(l[c]);c<l.length-1||s<a.length-1?(u in o||(c<l.length-1?o[u]=[]:o[u]={}),o=o[u]):o[u]=e?n:t[n].type}}else s<a.length-1?(l[0]in o||(o[l[0]]={}),o=o[l[0]]):o[l[0]]=e?n:t[n].type}return r}},{}],306:[function(t,e,r){\\\"use strict\\\";r.uniforms=function(t,e){for(var r=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),n=[],i=0;i<r;++i){var o=t.getActiveUniform(e,i);if(o){var s=a(t,o.type);if(o.size>1)for(var l=0;l<o.size;++l)n.push({name:o.name.replace(\\\"[0]\\\",\\\"[\\\"+l+\\\"]\\\"),type:s});else n.push({name:o.name,type:s})}}return n},r.attributes=function(t,e){for(var r=t.getProgramParameter(e,t.ACTIVE_ATTRIBUTES),n=[],i=0;i<r;++i){var o=t.getActiveAttrib(e,i);o&&n.push({name:o.name,type:a(t,o.type)})}return n};var n={FLOAT:\\\"float\\\",FLOAT_VEC2:\\\"vec2\\\",FLOAT_VEC3:\\\"vec3\\\",FLOAT_VEC4:\\\"vec4\\\",INT:\\\"int\\\",INT_VEC2:\\\"ivec2\\\",INT_VEC3:\\\"ivec3\\\",INT_VEC4:\\\"ivec4\\\",BOOL:\\\"bool\\\",BOOL_VEC2:\\\"bvec2\\\",BOOL_VEC3:\\\"bvec3\\\",BOOL_VEC4:\\\"bvec4\\\",FLOAT_MAT2:\\\"mat2\\\",FLOAT_MAT3:\\\"mat3\\\",FLOAT_MAT4:\\\"mat4\\\",SAMPLER_2D:\\\"sampler2D\\\",SAMPLER_CUBE:\\\"samplerCube\\\"},i=null;function a(t,e){if(!i){var r=Object.keys(n);i={};for(var a=0;a<r.length;++a){var o=r[a];i[t[o]]=n[o]}}return i[e]}},{}],307:[function(t,e,r){\\\"use strict\\\";r.shader=function(t,e,r){return u(t).getShaderReference(e,r)},r.program=function(t,e,r,n,i){return u(t).getProgram(e,r,n,i)};var n=t(\\\"./GLError\\\"),i=t(\\\"gl-format-compiler-error\\\"),a=new(\\\"undefined\\\"==typeof WeakMap?t(\\\"weakmap-shim\\\"):WeakMap),o=0;function s(t,e,r,n,i,a,o){this.id=t,this.src=e,this.type=r,this.shader=n,this.count=a,this.programs=[],this.cache=o}function l(t){this.gl=t,this.shaders=[{},{}],this.programs={}}s.prototype.dispose=function(){if(0==--this.count){for(var t=this.cache,e=t.gl,r=this.programs,n=0,i=r.length;n<i;++n){var a=t.programs[r[n]];a&&(delete t.programs[n],e.deleteProgram(a))}e.deleteShader(this.shader),delete t.shaders[this.type===e.FRAGMENT_SHADER|0][this.src]}};var c=l.prototype;function u(t){var e=a.get(t);return e||(e=new l(t),a.set(t,e)),e}c.getShaderReference=function(t,e){var r=this.gl,a=this.shaders[t===r.FRAGMENT_SHADER|0],l=a[e];if(l&&r.isShader(l.shader))l.count+=1;else{var c=function(t,e,r){var a=t.createShader(e);if(t.shaderSource(a,r),t.compileShader(a),!t.getShaderParameter(a,t.COMPILE_STATUS)){var o=t.getShaderInfoLog(a);try{var s=i(o,r,e)}catch(t){throw console.warn(\\\"Failed to format compiler error: \\\"+t),new n(o,\\\"Error compiling shader:\\\\n\\\"+o)}throw new n(o,s.short,s.long)}return a}(r,t,e);l=a[e]=new s(o++,e,t,c,[],1,this)}return l},c.getProgram=function(t,e,r,i){var a=[t.id,e.id,r.join(\\\":\\\"),i.join(\\\":\\\")].join(\\\"@\\\"),o=this.programs[a];return o&&this.gl.isProgram(o)||(this.programs[a]=o=function(t,e,r,i,a){var o=t.createProgram();t.attachShader(o,e),t.attachShader(o,r);for(var s=0;s<i.length;++s)t.bindAttribLocation(o,a[s],i[s]);if(t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS)){var l=t.getProgramInfoLog(o);throw new n(l,\\\"Error linking program: \\\"+l)}return o}(this.gl,t.shader,e.shader,r,i),t.programs.push(a),e.programs.push(a)),o}},{\\\"./GLError\\\":302,\\\"gl-format-compiler-error\\\":250,\\\"weakmap-shim\\\":555}],308:[function(t,e,r){\\\"use strict\\\";function n(t){this.plot=t,this.enable=[!0,!0,!1,!1],this.width=[1,1,1,1],this.color=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.center=[1/0,1/0]}e.exports=function(t,e){var r=new n(t);return r.update(e),t.addOverlay(r),r};var i=n.prototype;i.update=function(t){t=t||{},this.enable=(t.enable||[!0,!0,!1,!1]).slice(),this.width=(t.width||[1,1,1,1]).slice(),this.color=(t.color||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]).map(function(t){return t.slice()}),this.center=(t.center||[1/0,1/0]).slice(),this.plot.setOverlayDirty()},i.draw=function(){var t=this.enable,e=this.width,r=this.color,n=this.center,i=this.plot,a=i.line,o=i.dataBox,s=i.viewBox;if(a.bind(),o[0]<=n[0]&&n[0]<=o[2]&&o[1]<=n[1]&&n[1]<=o[3]){var l=s[0]+(n[0]-o[0])/(o[2]-o[0])*(s[2]-s[0]),c=s[1]+(n[1]-o[1])/(o[3]-o[1])*(s[3]-s[1]);t[0]&&a.drawLine(l,c,s[0],c,e[0],r[0]),t[1]&&a.drawLine(l,c,l,s[1],e[1],r[1]),t[2]&&a.drawLine(l,c,s[2],c,e[2],r[2]),t[3]&&a.drawLine(l,c,l,s[3],e[3],r[3])}},i.dispose=function(){this.plot.removeOverlay(this)}},{}],309:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"glslify\\\"),i=t(\\\"gl-shader\\\"),a=n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec3 position, color;\\\\nattribute float weight;\\\\n\\\\nuniform mat4 model, view, projection;\\\\nuniform vec3 coordinates[3];\\\\nuniform vec4 colors[3];\\\\nuniform vec2 screenShape;\\\\nuniform float lineWidth;\\\\n\\\\nvarying vec4 fragColor;\\\\n\\\\nvoid main() {\\\\n  vec3 vertexPosition = mix(coordinates[0],\\\\n    mix(coordinates[2], coordinates[1], 0.5 * (position + 1.0)), abs(position));\\\\n\\\\n  vec4 clipPos = projection * view * model * vec4(vertexPosition, 1.0);\\\\n  vec2 clipOffset = (projection * view * model * vec4(color, 0.0)).xy;\\\\n  vec2 delta = weight * clipOffset * screenShape;\\\\n  vec2 lineOffset = normalize(vec2(delta.y, -delta.x)) / screenShape;\\\\n\\\\n  gl_Position   = vec4(clipPos.xy + clipPos.w * 0.5 * lineWidth * lineOffset, clipPos.z, clipPos.w);\\\\n  fragColor     = color.x * colors[0] + color.y * colors[1] + color.z * colors[2];\\\\n}\\\\n\\\"]),o=n([\\\"precision mediump float;\\\\n#define GLSLIFY 1\\\\n\\\\nvarying vec4 fragColor;\\\\n\\\\nvoid main() {\\\\n  gl_FragColor = fragColor;\\\\n}\\\"]);e.exports=function(t){return i(t,a,o,null,[{name:\\\"position\\\",type:\\\"vec3\\\"},{name:\\\"color\\\",type:\\\"vec3\\\"},{name:\\\"weight\\\",type:\\\"float\\\"}])}},{\\\"gl-shader\\\":301,glslify:409}],310:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"gl-buffer\\\"),i=t(\\\"gl-vao\\\"),a=t(\\\"./shaders/index\\\");e.exports=function(t,e){var r=[];function o(t,e,n,i,a,o){var s=[t,e,n,0,0,0,1];s[i+3]=1,s[i]=a,r.push.apply(r,s),s[6]=-1,r.push.apply(r,s),s[i]=o,r.push.apply(r,s),r.push.apply(r,s),s[6]=1,r.push.apply(r,s),s[i]=a,r.push.apply(r,s)}o(0,0,0,0,0,1),o(0,0,0,1,0,1),o(0,0,0,2,0,1),o(1,0,0,1,-1,1),o(1,0,0,2,-1,1),o(0,1,0,0,-1,1),o(0,1,0,2,-1,1),o(0,0,1,0,-1,1),o(0,0,1,1,-1,1);var l=n(t,r),c=i(t,[{type:t.FLOAT,buffer:l,size:3,offset:0,stride:28},{type:t.FLOAT,buffer:l,size:3,offset:12,stride:28},{type:t.FLOAT,buffer:l,size:1,offset:24,stride:28}]),u=a(t);u.attributes.position.location=0,u.attributes.color.location=1,u.attributes.weight.location=2;var h=new s(t,l,c,u);return h.update(e),h};var o=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function s(t,e,r,n){this.gl=t,this.buffer=e,this.vao=r,this.shader=n,this.pixelRatio=1,this.bounds=[[-1e3,-1e3,-1e3],[1e3,1e3,1e3]],this.position=[0,0,0],this.lineWidth=[2,2,2],this.colors=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.enabled=[!0,!0,!0],this.drawSides=[!0,!0,!0],this.axes=null}var l=s.prototype,c=[0,0,0],u=[0,0,0],h=[0,0];l.isTransparent=function(){return!1},l.drawTransparent=function(t){},l.draw=function(t){var e=this.gl,r=this.vao,n=this.shader;r.bind(),n.bind();var i,a=t.model||o,s=t.view||o,l=t.projection||o;this.axes&&(i=this.axes.lastCubeProps.axis);for(var f=c,p=u,d=0;d<3;++d)i&&i[d]<0?(f[d]=this.bounds[0][d],p[d]=this.bounds[1][d]):(f[d]=this.bounds[1][d],p[d]=this.bounds[0][d]);h[0]=e.drawingBufferWidth,h[1]=e.drawingBufferHeight,n.uniforms.model=a,n.uniforms.view=s,n.uniforms.projection=l,n.uniforms.coordinates=[this.position,f,p],n.uniforms.colors=this.colors,n.uniforms.screenShape=h;for(d=0;d<3;++d)n.uniforms.lineWidth=this.lineWidth[d]*this.pixelRatio,this.enabled[d]&&(r.draw(e.TRIANGLES,6,6*d),this.drawSides[d]&&r.draw(e.TRIANGLES,12,18+12*d));r.unbind()},l.update=function(t){t&&(\\\"bounds\\\"in t&&(this.bounds=t.bounds),\\\"position\\\"in t&&(this.position=t.position),\\\"lineWidth\\\"in t&&(this.lineWidth=t.lineWidth),\\\"colors\\\"in t&&(this.colors=t.colors),\\\"enabled\\\"in t&&(this.enabled=t.enabled),\\\"drawSides\\\"in t&&(this.drawSides=t.drawSides))},l.dispose=function(){this.vao.dispose(),this.buffer.dispose(),this.shader.dispose()}},{\\\"./shaders/index\\\":309,\\\"gl-buffer\\\":241,\\\"gl-vao\\\":327}],311:[function(t,e,r){var n=t(\\\"glslify\\\"),i=n([\\\"precision highp float;\\\\n\\\\nprecision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nvec3 getOrthogonalVector(vec3 v) {\\\\n  // Return up-vector for only-z vector.\\\\n  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\\\\n  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.\\\\n  // Assign z = 0, x = -b, y = a:\\\\n  // a*-b + b*a + c*0 = -ba + ba + 0 = 0\\\\n  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\\\\n    return normalize(vec3(-v.y, v.x, 0.0));\\\\n  } else {\\\\n    return normalize(vec3(0.0, v.z, -v.y));\\\\n  }\\\\n}\\\\n\\\\n// Calculate the tube vertex and normal at the given index.\\\\n//\\\\n// The returned vertex is for a tube ring with its center at origin, radius of length(d), pointing in the direction of d.\\\\n//\\\\n// Each tube segment is made up of a ring of vertices.\\\\n// These vertices are used to make up the triangles of the tube by connecting them together in the vertex array.\\\\n// The indexes of tube segments run from 0 to 8.\\\\n//\\\\nvec3 getTubePosition(vec3 d, float index, out vec3 normal) {\\\\n  float segmentCount = 8.0;\\\\n\\\\n  float angle = 2.0 * 3.14159 * (index / segmentCount);\\\\n\\\\n  vec3 u = getOrthogonalVector(d);\\\\n  vec3 v = normalize(cross(u, d));\\\\n\\\\n  vec3 x = u * cos(angle) * length(d);\\\\n  vec3 y = v * sin(angle) * length(d);\\\\n  vec3 v3 = x + y;\\\\n\\\\n  normal = normalize(v3);\\\\n\\\\n  return v3;\\\\n}\\\\n\\\\nattribute vec4 vector;\\\\nattribute vec4 color, position;\\\\nattribute vec2 uv;\\\\nuniform float vectorScale;\\\\nuniform float tubeScale;\\\\n\\\\nuniform mat4 model\\\\n           , view\\\\n           , projection\\\\n           , inverseModel;\\\\nuniform vec3 eyePosition\\\\n           , lightPosition;\\\\n\\\\nvarying vec3 f_normal\\\\n           , f_lightDirection\\\\n           , f_eyeDirection\\\\n           , f_data\\\\n           , f_position;\\\\nvarying vec4 f_color;\\\\nvarying vec2 f_uv;\\\\n\\\\nvoid main() {\\\\n  // Scale the vector magnitude to stay constant with\\\\n  // model & view changes.\\\\n  vec3 normal;\\\\n  vec3 XYZ = getTubePosition(mat3(model) * (tubeScale * vector.w * normalize(vector.xyz)), position.w, normal);\\\\n  vec4 tubePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\\\\n\\\\n  //Lighting geometry parameters\\\\n  vec4 cameraCoordinate = view * tubePosition;\\\\n  cameraCoordinate.xyz /= cameraCoordinate.w;\\\\n  f_lightDirection = lightPosition - cameraCoordinate.xyz;\\\\n  f_eyeDirection   = eyePosition - cameraCoordinate.xyz;\\\\n  f_normal = normalize((vec4(normal,0.0) * inverseModel).xyz);\\\\n\\\\n  // vec4 m_position  = model * vec4(tubePosition, 1.0);\\\\n  vec4 t_position  = view * tubePosition;\\\\n  gl_Position      = projection * t_position;\\\\n\\\\n  f_color          = color;\\\\n  f_data           = tubePosition.xyz;\\\\n  f_position       = position.xyz;\\\\n  f_uv             = uv;\\\\n}\\\\n\\\"]),a=n([\\\"#extension GL_OES_standard_derivatives : enable\\\\n\\\\nprecision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nfloat beckmannDistribution(float x, float roughness) {\\\\n  float NdotH = max(x, 0.0001);\\\\n  float cos2Alpha = NdotH * NdotH;\\\\n  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\\\\n  float roughness2 = roughness * roughness;\\\\n  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\\\\n  return exp(tan2Alpha / roughness2) / denom;\\\\n}\\\\n\\\\nfloat cookTorranceSpecular(\\\\n  vec3 lightDirection,\\\\n  vec3 viewDirection,\\\\n  vec3 surfaceNormal,\\\\n  float roughness,\\\\n  float fresnel) {\\\\n\\\\n  float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\\\\n  float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\\\\n\\\\n  //Half angle vector\\\\n  vec3 H = normalize(lightDirection + viewDirection);\\\\n\\\\n  //Geometric term\\\\n  float NdotH = max(dot(surfaceNormal, H), 0.0);\\\\n  float VdotH = max(dot(viewDirection, H), 0.000001);\\\\n  float LdotH = max(dot(lightDirection, H), 0.000001);\\\\n  float G1 = (2.0 * NdotH * VdotN) / VdotH;\\\\n  float G2 = (2.0 * NdotH * LdotN) / LdotH;\\\\n  float G = min(1.0, min(G1, G2));\\\\n  \\\\n  //Distribution term\\\\n  float D = beckmannDistribution(NdotH, roughness);\\\\n\\\\n  //Fresnel term\\\\n  float F = pow(1.0 - VdotN, fresnel);\\\\n\\\\n  //Multiply terms and done\\\\n  return  G * F * D / max(3.14159265 * VdotN, 0.000001);\\\\n}\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3 clipBounds[2];\\\\nuniform float roughness\\\\n            , fresnel\\\\n            , kambient\\\\n            , kdiffuse\\\\n            , kspecular\\\\n            , opacity;\\\\nuniform sampler2D texture;\\\\n\\\\nvarying vec3 f_normal\\\\n           , f_lightDirection\\\\n           , f_eyeDirection\\\\n           , f_data\\\\n           , f_position;\\\\nvarying vec4 f_color;\\\\nvarying vec2 f_uv;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\\\n  vec3 N = normalize(f_normal);\\\\n  vec3 L = normalize(f_lightDirection);\\\\n  vec3 V = normalize(f_eyeDirection);\\\\n\\\\n  if(gl_FrontFacing) {\\\\n    N = -N;\\\\n  }\\\\n\\\\n  float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\\\\n  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\\\\n\\\\n  vec4 surfaceColor = f_color * texture2D(texture, f_uv);\\\\n  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\\\\n\\\\n  gl_FragColor = litColor * opacity;\\\\n}\\\\n\\\"]),o=n([\\\"precision highp float;\\\\n\\\\nprecision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nvec3 getOrthogonalVector(vec3 v) {\\\\n  // Return up-vector for only-z vector.\\\\n  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\\\\n  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.\\\\n  // Assign z = 0, x = -b, y = a:\\\\n  // a*-b + b*a + c*0 = -ba + ba + 0 = 0\\\\n  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\\\\n    return normalize(vec3(-v.y, v.x, 0.0));\\\\n  } else {\\\\n    return normalize(vec3(0.0, v.z, -v.y));\\\\n  }\\\\n}\\\\n\\\\n// Calculate the tube vertex and normal at the given index.\\\\n//\\\\n// The returned vertex is for a tube ring with its center at origin, radius of length(d), pointing in the direction of d.\\\\n//\\\\n// Each tube segment is made up of a ring of vertices.\\\\n// These vertices are used to make up the triangles of the tube by connecting them together in the vertex array.\\\\n// The indexes of tube segments run from 0 to 8.\\\\n//\\\\nvec3 getTubePosition(vec3 d, float index, out vec3 normal) {\\\\n  float segmentCount = 8.0;\\\\n\\\\n  float angle = 2.0 * 3.14159 * (index / segmentCount);\\\\n\\\\n  vec3 u = getOrthogonalVector(d);\\\\n  vec3 v = normalize(cross(u, d));\\\\n\\\\n  vec3 x = u * cos(angle) * length(d);\\\\n  vec3 y = v * sin(angle) * length(d);\\\\n  vec3 v3 = x + y;\\\\n\\\\n  normal = normalize(v3);\\\\n\\\\n  return v3;\\\\n}\\\\n\\\\nattribute vec4 vector;\\\\nattribute vec4 position;\\\\nattribute vec4 id;\\\\n\\\\nuniform mat4 model, view, projection;\\\\nuniform float tubeScale;\\\\n\\\\nvarying vec3 f_position;\\\\nvarying vec4 f_id;\\\\n\\\\nvoid main() {\\\\n  vec3 normal;\\\\n  vec3 XYZ = getTubePosition(mat3(model) * (tubeScale * vector.w * normalize(vector.xyz)), position.w, normal);\\\\n  vec4 tubePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\\\\n\\\\n  gl_Position = projection * view * tubePosition;\\\\n  f_id        = id;\\\\n  f_position  = position.xyz;\\\\n}\\\\n\\\"]),s=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3  clipBounds[2];\\\\nuniform float pickId;\\\\n\\\\nvarying vec3 f_position;\\\\nvarying vec4 f_id;\\\\n\\\\nvoid main() {\\\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\\\n\\\\n  gl_FragColor = vec4(pickId, f_id.xyz);\\\\n}\\\"]);r.meshShader={vertex:i,fragment:a,attributes:[{name:\\\"position\\\",type:\\\"vec4\\\"},{name:\\\"normal\\\",type:\\\"vec3\\\"},{name:\\\"color\\\",type:\\\"vec4\\\"},{name:\\\"uv\\\",type:\\\"vec2\\\"},{name:\\\"vector\\\",type:\\\"vec4\\\"}]},r.pickShader={vertex:o,fragment:s,attributes:[{name:\\\"position\\\",type:\\\"vec4\\\"},{name:\\\"id\\\",type:\\\"vec4\\\"},{name:\\\"vector\\\",type:\\\"vec4\\\"}]}},{glslify:409}],312:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"gl-shader\\\"),i=t(\\\"gl-buffer\\\"),a=t(\\\"gl-vao\\\"),o=t(\\\"gl-texture2d\\\"),s=t(\\\"normals\\\"),l=t(\\\"gl-mat4/multiply\\\"),c=t(\\\"gl-mat4/invert\\\"),u=t(\\\"ndarray\\\"),h=t(\\\"colormap\\\"),f=t(\\\"simplicial-complex-contour\\\"),p=t(\\\"typedarray-pool\\\"),d=t(\\\"./shaders\\\"),g=d.meshShader,v=d.pickShader,m=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function y(t,e,r,n,i,a,o,s,l,c,u,h,f,p,d,g,v,y,x,b,_,w,k,T){this.gl=t,this.cells=[],this.positions=[],this.intensity=[],this.texture=e,this.dirty=!0,this.triShader=r,this.pickShader=n,this.trianglePositions=i,this.triangleVectors=a,this.triangleColors=s,this.triangleNormals=c,this.triangleUVs=l,this.triangleIds=o,this.triangleVAO=u,this.triangleCount=0,this.lineWidth=1,this.edgePositions=h,this.edgeColors=p,this.edgeUVs=d,this.edgeIds=f,this.edgeVAO=g,this.edgeCount=0,this.pointPositions=v,this.pointColors=x,this.pointUVs=b,this.pointSizes=_,this.pointIds=y,this.pointVAO=w,this.pointCount=0,this.contourLineWidth=1,this.contourPositions=k,this.contourVAO=T,this.contourCount=0,this.contourColor=[0,0,0],this.contourEnable=!1,this.pickId=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition=[1e5,1e5,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.opacity=1,this.tubeScale=1,this._model=m,this._view=m,this._projection=m,this._resolution=[1,1],this.pixelRatio=1}var x=y.prototype;function b(t){var e=n(t,v.vertex,v.fragment,null,v.attributes);return e.attributes.position.location=0,e.attributes.id.location=1,e.attributes.vector.location=5,e}x.isOpaque=function(){return this.opacity>=1},x.isTransparent=function(){return this.opacity<1},x.pickSlots=1,x.setPickBase=function(t){this.pickId=t},x.highlight=function(t){if(t&&this.contourEnable){for(var e=f(this.cells,this.intensity,t.intensity),r=e.cells,n=e.vertexIds,i=e.vertexWeights,a=r.length,o=p.mallocFloat32(6*a),s=0,l=0;l<a;++l)for(var c=r[l],u=0;u<2;++u){var h=c[0];2===c.length&&(h=c[u]);for(var d=n[h][0],g=n[h][1],v=i[h],m=1-v,y=this.positions[d],x=this.positions[g],b=0;b<3;++b)o[s++]=v*y[b]+m*x[b]}this.contourCount=s/3|0,this.contourPositions.update(o.subarray(0,s)),p.free(o)}else this.contourCount=0},x.update=function(t){t=t||{};var e=this.gl;this.dirty=!0,\\\"contourEnable\\\"in t&&(this.contourEnable=t.contourEnable),\\\"contourColor\\\"in t&&(this.contourColor=t.contourColor),\\\"lineWidth\\\"in t&&(this.lineWidth=t.lineWidth),\\\"lightPosition\\\"in t&&(this.lightPosition=t.lightPosition),\\\"opacity\\\"in t&&(this.opacity=t.opacity),\\\"ambient\\\"in t&&(this.ambientLight=t.ambient),\\\"diffuse\\\"in t&&(this.diffuseLight=t.diffuse),\\\"specular\\\"in t&&(this.specularLight=t.specular),\\\"roughness\\\"in t&&(this.roughness=t.roughness),\\\"fresnel\\\"in t&&(this.fresnel=t.fresnel),t.texture?(this.texture.dispose(),this.texture=o(e,t.texture)):t.colormap&&(this.texture.shape=[256,256],this.texture.minFilter=e.LINEAR_MIPMAP_LINEAR,this.texture.magFilter=e.LINEAR,this.texture.setPixels(function(t){for(var e=h({colormap:t,nshades:256,format:\\\"rgba\\\"}),r=new Uint8Array(1024),n=0;n<256;++n){for(var i=e[n],a=0;a<3;++a)r[4*n+a]=i[a];r[4*n+3]=255*i[3]}return u(r,[256,256,4],[4,0,1])}(t.colormap)),this.texture.generateMipmap());var r=t.cells,n=t.positions,i=t.vectors;if(n&&r&&i){void 0!==t.tubeScale&&(this.tubeScale=t.tubeScale);var a=[],l=[],c=[],f=[],p=[],d=[],g=[],v=[],m=[],y=[],x=[],b=[],_=[],w=[],k=[];this.cells=r,this.positions=n,this.vectors=i;var T=t.vertexNormals,A=t.cellNormals,M=void 0===t.vertexNormalsEpsilon?1e-6:t.vertexNormalsEpsilon,S=void 0===t.faceNormalsEpsilon?1e-6:t.faceNormalsEpsilon;t.useFacetNormals&&!A&&(A=s.faceNormals(r,n,S)),A||T||(T=s.vertexNormals(r,n,M));var E=t.vertexColors,C=t.cellColors,L=t.meshColor||[1,1,1,1],P=t.vertexUVs,O=t.vertexIntensity,z=t.cellUVs,I=t.cellIntensity,D=1/0,R=-1/0;if(!P&&!z)if(O)if(t.vertexIntensityBounds)D=+t.vertexIntensityBounds[0],R=+t.vertexIntensityBounds[1];else for(var F=0;F<O.length;++F){var B=O[F];D=Math.min(D,B),R=Math.max(R,B)}else if(I)for(F=0;F<I.length;++F){B=I[F];D=Math.min(D,B),R=Math.max(R,B)}else for(F=0;F<n.length;++F){B=n[F][2];D=Math.min(D,B),R=Math.max(R,B)}this.intensity=O||(I?function(t,e,r){for(var n=new Array(e),i=0;i<e;++i)n[i]=0;var a=t.length;for(i=0;i<a;++i)for(var o=t[i],s=0;s<o.length;++s)n[o[s]]=r[i];return n}(r,n.length,I):function(t){for(var e=t.length,r=new Array(e),n=0;n<e;++n)r[n]=t[n][2];return r}(n));var N=t.pointSizes,j=t.pointSize||1;this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(F=0;F<n.length;++F)for(var U=n[F],V=0;V<3;++V)!isNaN(U[V])&&isFinite(U[V])&&(this.bounds[0][V]=Math.min(this.bounds[0][V],U[V]),this.bounds[1][V]=Math.max(this.bounds[1][V],U[V]));var q=0,H=0,G=0;t:for(F=0;F<r.length;++F){var Y=r[F];switch(Y.length){case 1:for(U=n[X=Y[0]],V=0;V<3;++V)if(isNaN(U[V])||!isFinite(U[V]))continue t;x.push(U[0],U[1],U[2],U[3]),3===(Z=E?E[X]:C?C[F]:L).length?b.push(Z[0],Z[1],Z[2],1):b.push(Z[0],Z[1],Z[2],Z[3]),J=P?P[X]:O?[(O[X]-D)/(R-D),0]:z?z[F]:I?[(I[F]-D)/(R-D),0]:[(U[2]-D)/(R-D),0],_.push(J[0],J[1]),N?w.push(N[X]):w.push(j),k.push(F),G+=1;break;case 2:for(V=0;V<2;++V){U=n[X=Y[V]];for(var W=0;W<3;++W)if(isNaN(U[W])||!isFinite(U[W]))continue t}for(V=0;V<2;++V){U=n[X=Y[V]];g.push(U[0],U[1],U[2]),3===(Z=E?E[X]:C?C[F]:L).length?v.push(Z[0],Z[1],Z[2],1):v.push(Z[0],Z[1],Z[2],Z[3]),J=P?P[X]:O?[(O[X]-D)/(R-D),0]:z?z[F]:I?[(I[F]-D)/(R-D),0]:[(U[2]-D)/(R-D),0],m.push(J[0],J[1]),y.push(F)}H+=1;break;case 3:for(V=0;V<3;++V)for(U=n[X=Y[V]],W=0;W<3;++W)if(isNaN(U[W])||!isFinite(U[W]))continue t;for(V=0;V<3;++V){var X;U=n[X=Y[2-V]];a.push(U[0],U[1],U[2],U[3]);var Z,J,K,$=i[X];l.push($[0],$[1],$[2],$[3]),3===(Z=E?E[X]:C?C[F]:L).length?c.push(Z[0],Z[1],Z[2],1):c.push(Z[0],Z[1],Z[2],Z[3]),J=P?P[X]:O?[(O[X]-D)/(R-D),0]:z?z[F]:I?[(I[F]-D)/(R-D),0]:[(U[2]-D)/(R-D),0],p.push(J[0],J[1]),K=T?T[X]:A[F],f.push(K[0],K[1],K[2]),d.push(F)}q+=1}}this.pointCount=G,this.edgeCount=H,this.triangleCount=q,this.pointPositions.update(x),this.pointColors.update(b),this.pointUVs.update(_),this.pointSizes.update(w),this.pointIds.update(new Uint32Array(k)),this.edgePositions.update(g),this.edgeColors.update(v),this.edgeUVs.update(m),this.edgeIds.update(new Uint32Array(y)),this.trianglePositions.update(a),this.triangleVectors.update(l),this.triangleColors.update(c),this.triangleUVs.update(p),this.triangleNormals.update(f),this.triangleIds.update(new Uint32Array(d))}},x.drawTransparent=x.draw=function(t){t=t||{};for(var e=this.gl,r=t.model||m,n=t.view||m,i=t.projection||m,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);var s={model:r,view:n,projection:i,inverseModel:m.slice(),clipBounds:a,kambient:this.ambientLight,kdiffuse:this.diffuseLight,kspecular:this.specularLight,roughness:this.roughness,fresnel:this.fresnel,eyePosition:[0,0,0],lightPosition:[0,0,0],opacity:this.opacity,tubeScale:this.tubeScale,contourColor:this.contourColor,texture:0};s.inverseModel=c(s.inverseModel,s.model),e.disable(e.CULL_FACE),this.texture.bind(0);var u=new Array(16);l(u,s.view,s.model),l(u,s.projection,u),c(u,u);for(o=0;o<3;++o)s.eyePosition[o]=u[12+o]/u[15];var h=u[15];for(o=0;o<3;++o)h+=this.lightPosition[o]*u[4*o+3];for(o=0;o<3;++o){for(var f=u[12+o],p=0;p<3;++p)f+=u[4*p+o]*this.lightPosition[p];s.lightPosition[o]=f/h}if(this.triangleCount>0){var d=this.triShader;d.bind(),d.uniforms=s,this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()}},x.drawPick=function(t){t=t||{};for(var e=this.gl,r=t.model||m,n=t.view||m,i=t.projection||m,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);this._model=[].slice.call(r),this._view=[].slice.call(n),this._projection=[].slice.call(i),this._resolution=[e.drawingBufferWidth,e.drawingBufferHeight];var s={model:r,view:n,projection:i,clipBounds:a,tubeScale:this.tubeScale,pickId:this.pickId/255},l=this.pickShader;l.bind(),l.uniforms=s,this.triangleCount>0&&(this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()),this.edgeCount>0&&(this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind())},x.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=t.value[0]+256*t.value[1]+65536*t.value[2],r=this.cells[e],n=this.positions[r[1]].slice(0,3);return{index:e,position:n,intensity:this.intensity[r[1]],velocity:this.vectors[r[1]].slice(0,3),divergence:this.vectors[r[1]][3],dataCoordinate:n}},x.dispose=function(){this.texture.dispose(),this.triShader.dispose(),this.pickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleVectors.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleNormals.dispose(),this.triangleIds.dispose(),this.edgeVAO.dispose(),this.edgePositions.dispose(),this.edgeColors.dispose(),this.edgeUVs.dispose(),this.edgeIds.dispose(),this.pointVAO.dispose(),this.pointPositions.dispose(),this.pointColors.dispose(),this.pointUVs.dispose(),this.pointSizes.dispose(),this.pointIds.dispose(),this.contourVAO.dispose(),this.contourPositions.dispose()},e.exports=function(t,e){1===arguments.length&&(t=(e=t).gl);var r=e.triShader||function(t){var e=n(t,g.vertex,g.fragment,null,g.attributes);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e.attributes.vector.location=5,e}(t),s=b(t),l=o(t,u(new Uint8Array([255,255,255,255]),[1,1,4]));l.generateMipmap(),l.minFilter=t.LINEAR_MIPMAP_LINEAR,l.magFilter=t.LINEAR;var c=i(t),h=i(t),f=i(t),p=i(t),d=i(t),v=i(t),m=a(t,[{buffer:c,type:t.FLOAT,size:4},{buffer:v,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:f,type:t.FLOAT,size:4},{buffer:p,type:t.FLOAT,size:2},{buffer:d,type:t.FLOAT,size:3},{buffer:h,type:t.FLOAT,size:4}]),x=i(t),_=i(t),w=i(t),k=i(t),T=a(t,[{buffer:x,type:t.FLOAT,size:3},{buffer:k,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:_,type:t.FLOAT,size:4},{buffer:w,type:t.FLOAT,size:2}]),A=i(t),M=i(t),S=i(t),E=i(t),C=i(t),L=a(t,[{buffer:A,type:t.FLOAT,size:3},{buffer:C,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:M,type:t.FLOAT,size:4},{buffer:S,type:t.FLOAT,size:2},{buffer:E,type:t.FLOAT,size:1}]),P=i(t),O=new y(t,l,r,s,c,h,v,f,p,d,m,x,k,_,w,T,A,C,M,S,E,L,P,a(t,[{buffer:P,type:t.FLOAT,size:3}]));return O.update(e),O}},{\\\"./shaders\\\":311,colormap:126,\\\"gl-buffer\\\":241,\\\"gl-mat4/invert\\\":265,\\\"gl-mat4/multiply\\\":267,\\\"gl-shader\\\":301,\\\"gl-texture2d\\\":322,\\\"gl-vao\\\":327,ndarray:450,normals:453,\\\"simplicial-complex-contour\\\":518,\\\"typedarray-pool\\\":545}],313:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"gl-vec3\\\"),i=t(\\\"gl-vec4\\\"),a=function(t,e,r,a){for(var o=0,s=0;s<t.length;s++)for(var l=t[s].velocities,c=0;c<l.length;c++){var u=n.length(l[c]);u>o&&(o=u)}var h=t.map(function(t){return function(t,e,r,a){var o,s,l,c=t.points,u=t.velocities,h=t.divergences;n.set(n.create(),0,1,0),n.create(),n.create();n.create();for(var f=[],p=[],d=[],g=[],v=[],m=[],y=0,x=0,b=i.create(),_=i.create(),w=0;w<c.length;w++){o=c[w],s=u[w],l=h[w],0===e&&(l=.05*r),x=n.length(s)/a,b=i.create(),n.copy(b,s),b[3]=l;for(var k=0;k<8;k++)v[k]=[o[0],o[1],o[2],k];if(g.length>0)for(k=0;k<8;k++){var T=(k+1)%8;f.push(g[k],v[k],v[T],v[T],g[T],g[k]),d.push(_,b,b,b,_,_),m.push(y,x,x,x,y,y),p.push([f.length-6,f.length-5,f.length-4],[f.length-3,f.length-2,f.length-1])}var A=g;g=v,v=A,A=_,_=b,b=A,A=y,y=x,x=A}return{positions:f,cells:p,vectors:d,vertexIntensity:m}}(t,r,a,o)}),f=[],p=[],d=[],g=[];for(s=0;s<h.length;s++){var v=h[s],m=f.length;f=f.concat(v.positions),d=d.concat(v.vectors),g=g.concat(v.vertexIntensity);for(c=0;c<v.cells.length;c++){var y=v.cells[c],x=[];p.push(x);for(var b=0;b<y.length;b++)x.push(y[b]+m)}}return{positions:f,cells:p,vectors:d,vertexIntensity:g,colormap:e}},o=function(t,e){var r=n.create(),i=1e-4;n.add(r,t,[i,0,0]);var a=this.getVelocity(r);n.subtract(a,a,e),n.scale(a,a,1e4),n.add(r,t,[0,i,0]);var o=this.getVelocity(r);n.subtract(o,o,e),n.scale(o,o,1e4),n.add(r,t,[0,0,i]);var s=this.getVelocity(r);return n.subtract(s,s,e),n.scale(s,s,1e4),n.add(r,a,o),n.add(r,r,s),r},s=function(t){return f(t,this.vectors,this.meshgrid,this.clampBorders)},l=function(t,e){for(var r=0;r<t.length;r++){var n=t[r];if(n===e)return r;if(n>e)return r-1}return r},c=n.create(),u=n.create(),h=function(t,e,r){return t<e?e:t>r?r:t},f=function(t,e,r,i){var a=t[0],o=t[1],s=t[2],f=r[0].length,p=r[1].length,d=r[2].length,g=l(r[0],a),v=l(r[1],o),m=l(r[2],s),y=g+1,x=v+1,b=m+1;if(r[0][g]===a&&(y=g),r[1][v]===o&&(x=v),r[2][m]===s&&(b=m),i&&(g=h(g,0,f-1),y=h(y,0,f-1),v=h(v,0,p-1),x=h(x,0,p-1),m=h(m,0,d-1),b=h(b,0,d-1)),g<0||v<0||m<0||y>=f||x>=p||b>=d)return n.create();var _=(a-r[0][g])/(r[0][y]-r[0][g]),w=(o-r[1][v])/(r[1][x]-r[1][v]),k=(s-r[2][m])/(r[2][b]-r[2][m]);(_<0||_>1||isNaN(_))&&(_=0),(w<0||w>1||isNaN(w))&&(w=0),(k<0||k>1||isNaN(k))&&(k=0);var T=m*f*p,A=b*f*p,M=v*f,S=x*f,E=g,C=y,L=e[M+T+E],P=e[M+T+C],O=e[S+T+E],z=e[S+T+C],I=e[M+A+E],D=e[M+A+C],R=e[S+A+E],F=e[S+A+C],B=n.create();return n.lerp(B,L,P,_),n.lerp(c,O,z,_),n.lerp(B,B,c,w),n.lerp(c,I,D,_),n.lerp(u,R,F,_),n.lerp(c,c,u,w),n.lerp(B,B,c,k),B},p=function(t){var e=1/0;t.sort(function(t,e){return t-e});for(var r=1;r<t.length;r++){var n=Math.abs(t[r]-t[r-1]);n<e&&(e=n)}return e};e.exports=function(t,e){var r=t.startingPositions,i=t.maxLength||1e3,l=t.tubeSize||1,c=t.absoluteTubeSize;t.getDivergence||(t.getDivergence=o),t.getVelocity||(t.getVelocity=s),void 0===t.clampBorders&&(t.clampBorders=!0);var u=[],h=e[0][0],f=e[0][1],d=e[0][2],g=e[1][0],v=e[1][1],m=e[1][2],y=function(t,e){var r=e[0],n=e[1],i=e[2];return r>=h&&r<=g&&n>=f&&n<=v&&i>=d&&i<=m},x=10*n.distance(e[0],e[1])/i,b=x*x,_=1,w=0;n.create();r.length>=2&&(_=function(t){for(var e=[],r=[],n=[],i={},a={},o={},s=0;s<t.length;s++){var l=t[s],c=l[0],u=l[1],h=l[2];i[c]||(e.push(c),i[c]=!0),a[u]||(r.push(u),a[u]=!0),o[h]||(n.push(h),o[h]=!0)}var f=p(e),d=p(r),g=p(n),v=Math.min(f,d,g);return isFinite(v)?v:1}(r));for(var k=0;k<r.length;k++){var T=n.create();n.copy(T,r[k]);var A=[T],M=[],S=t.getVelocity(T),E=T;M.push(S);var C=[],L=t.getDivergence(T,S);(I=n.length(L))>w&&!isNaN(I)&&isFinite(I)&&(w=I),C.push(I),u.push({points:A,velocities:M,divergences:C});for(var P=0;P<100*i&&A.length<i&&y(0,T);){P++;var O=n.clone(S),z=n.squaredLength(O);if(0===z)break;if(z>b&&n.scale(O,O,x/Math.sqrt(z)),n.add(O,O,T),S=t.getVelocity(O),n.squaredDistance(E,O)-b>-1e-4*b){A.push(O),E=O,M.push(S);L=t.getDivergence(O,S);(I=n.length(L))>w&&!isNaN(I)&&isFinite(I)&&(w=I),C.push(I)}T=O}}for(k=0;k<C.length;k++){var I=C[k];!isNaN(I)&&isFinite(I)||(C[k]=w)}var D=a(u,t.colormap,w,_);return c?D.tubeScale=c:(0===w&&(w=1),D.tubeScale=.5*l*_/w),D},e.exports.createTubeMesh=t(\\\"./lib/tubemesh\\\")},{\\\"./lib/tubemesh\\\":312,\\\"gl-vec3\\\":346,\\\"gl-vec4\\\":382}],314:[function(t,e,r){var n=t(\\\"gl-shader\\\"),i=t(\\\"glslify\\\"),a=i([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec4 uv;\\\\nattribute vec3 f;\\\\nattribute vec3 normal;\\\\n\\\\nuniform vec3 objectOffset;\\\\nuniform mat4 model, view, projection, inverseModel;\\\\nuniform vec3 lightPosition, eyePosition;\\\\nuniform sampler2D colormap;\\\\n\\\\nvarying float value, kill;\\\\nvarying vec3 worldCoordinate;\\\\nvarying vec2 planeCoordinate;\\\\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\\\\nvarying vec4 vColor;\\\\n\\\\nvoid main() {\\\\n  vec3 localCoordinate = vec3(uv.zw, f.x);\\\\n  worldCoordinate = objectOffset + localCoordinate;\\\\n  vec4 worldPosition = model * vec4(worldCoordinate, 1.0);\\\\n  vec4 clipPosition = projection * view * worldPosition;\\\\n  gl_Position = clipPosition;\\\\n  kill = f.y;\\\\n  value = f.z;\\\\n  planeCoordinate = uv.xy;\\\\n\\\\n  vColor = texture2D(colormap, vec2(value, value));\\\\n\\\\n  //Lighting geometry parameters\\\\n  vec4 cameraCoordinate = view * worldPosition;\\\\n  cameraCoordinate.xyz /= cameraCoordinate.w;\\\\n  lightDirection = lightPosition - cameraCoordinate.xyz;\\\\n  eyeDirection   = eyePosition - cameraCoordinate.xyz;\\\\n  surfaceNormal  = normalize((vec4(normal,0) * inverseModel).xyz);\\\\n}\\\\n\\\"]),o=i([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nfloat beckmannDistribution(float x, float roughness) {\\\\n  float NdotH = max(x, 0.0001);\\\\n  float cos2Alpha = NdotH * NdotH;\\\\n  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\\\\n  float roughness2 = roughness * roughness;\\\\n  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\\\\n  return exp(tan2Alpha / roughness2) / denom;\\\\n}\\\\n\\\\nfloat beckmannSpecular(\\\\n  vec3 lightDirection,\\\\n  vec3 viewDirection,\\\\n  vec3 surfaceNormal,\\\\n  float roughness) {\\\\n  return beckmannDistribution(dot(surfaceNormal, normalize(lightDirection + viewDirection)), roughness);\\\\n}\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec3 lowerBound, upperBound;\\\\nuniform float contourTint;\\\\nuniform vec4 contourColor;\\\\nuniform sampler2D colormap;\\\\nuniform vec3 clipBounds[2];\\\\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\\\\nuniform float vertexColor;\\\\n\\\\nvarying float value, kill;\\\\nvarying vec3 worldCoordinate;\\\\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\\\\nvarying vec4 vColor;\\\\n\\\\nvoid main() {\\\\n  if ((kill > 0.0) ||\\\\n      (outOfRange(clipBounds[0], clipBounds[1], worldCoordinate))) discard;\\\\n\\\\n  vec3 N = normalize(surfaceNormal);\\\\n  vec3 V = normalize(eyeDirection);\\\\n  vec3 L = normalize(lightDirection);\\\\n\\\\n  if(gl_FrontFacing) {\\\\n    N = -N;\\\\n  }\\\\n\\\\n  float specular = max(beckmannSpecular(L, V, N, roughness), 0.);\\\\n  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\\\\n\\\\n  //decide how to interpolate color \\\\u2014 in vertex or in fragment\\\\n  vec4 surfaceColor =\\\\n    step(vertexColor, .5) * texture2D(colormap, vec2(value, value)) +\\\\n    step(.5, vertexColor) * vColor;\\\\n\\\\n  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\\\\n\\\\n  gl_FragColor = mix(litColor, contourColor, contourTint) * opacity;\\\\n}\\\\n\\\"]),s=i([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec4 uv;\\\\nattribute float f;\\\\n\\\\nuniform vec3 objectOffset;\\\\nuniform mat3 permutation;\\\\nuniform mat4 model, view, projection;\\\\nuniform float height, zOffset;\\\\nuniform sampler2D colormap;\\\\n\\\\nvarying float value, kill;\\\\nvarying vec3 worldCoordinate;\\\\nvarying vec2 planeCoordinate;\\\\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\\\\nvarying vec4 vColor;\\\\n\\\\nvoid main() {\\\\n  vec3 dataCoordinate = permutation * vec3(uv.xy, height);\\\\n  worldCoordinate = objectOffset + dataCoordinate;\\\\n  vec4 worldPosition = model * vec4(worldCoordinate, 1.0);\\\\n\\\\n  vec4 clipPosition = projection * view * worldPosition;\\\\n  clipPosition.z += zOffset;\\\\n\\\\n  gl_Position = clipPosition;\\\\n  value = f + objectOffset.z;\\\\n  kill = -1.0;\\\\n  planeCoordinate = uv.zw;\\\\n\\\\n  vColor = texture2D(colormap, vec2(value, value));\\\\n\\\\n  //Don't do lighting for contours\\\\n  surfaceNormal   = vec3(1,0,0);\\\\n  eyeDirection    = vec3(0,1,0);\\\\n  lightDirection  = vec3(0,0,1);\\\\n}\\\\n\\\"]),l=i([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nbool outOfRange(float a, float b, float p) {\\\\n  return ((p > max(a, b)) || \\\\n          (p < min(a, b)));\\\\n}\\\\n\\\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y));\\\\n}\\\\n\\\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\\\n  return (outOfRange(a.x, b.x, p.x) ||\\\\n          outOfRange(a.y, b.y, p.y) ||\\\\n          outOfRange(a.z, b.z, p.z));\\\\n}\\\\n\\\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\\\n}\\\\n\\\\nuniform vec2 shape;\\\\nuniform vec3 clipBounds[2];\\\\nuniform float pickId;\\\\n\\\\nvarying float value, kill;\\\\nvarying vec3 worldCoordinate;\\\\nvarying vec2 planeCoordinate;\\\\nvarying vec3 surfaceNormal;\\\\n\\\\nvec2 splitFloat(float v) {\\\\n  float vh = 255.0 * v;\\\\n  float upper = floor(vh);\\\\n  float lower = fract(vh);\\\\n  return vec2(upper / 255.0, floor(lower * 16.0) / 16.0);\\\\n}\\\\n\\\\nvoid main() {\\\\n  if ((kill > 0.0) ||\\\\n      (outOfRange(clipBounds[0], clipBounds[1], worldCoordinate))) discard;\\\\n\\\\n  vec2 ux = splitFloat(planeCoordinate.x / shape.x);\\\\n  vec2 uy = splitFloat(planeCoordinate.y / shape.y);\\\\n  gl_FragColor = vec4(pickId, ux.x, uy.x, ux.y + (uy.y/16.0));\\\\n}\\\\n\\\"]);r.createShader=function(t){var e=n(t,a,o,null,[{name:\\\"uv\\\",type:\\\"vec4\\\"},{name:\\\"f\\\",type:\\\"vec3\\\"},{name:\\\"normal\\\",type:\\\"vec3\\\"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e.attributes.normal.location=2,e},r.createPickShader=function(t){var e=n(t,a,l,null,[{name:\\\"uv\\\",type:\\\"vec4\\\"},{name:\\\"f\\\",type:\\\"vec3\\\"},{name:\\\"normal\\\",type:\\\"vec3\\\"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e.attributes.normal.location=2,e},r.createContourShader=function(t){var e=n(t,s,o,null,[{name:\\\"uv\\\",type:\\\"vec4\\\"},{name:\\\"f\\\",type:\\\"float\\\"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e},r.createPickContourShader=function(t){var e=n(t,s,l,null,[{name:\\\"uv\\\",type:\\\"vec4\\\"},{name:\\\"f\\\",type:\\\"float\\\"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e}},{\\\"gl-shader\\\":301,glslify:409}],315:[function(t,e,r){arguments[4][111][0].apply(r,arguments)},{dup:111}],316:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){var e=t.gl,r=y(e),n=b(e),s=x(e),l=_(e),c=i(e),u=a(e,[{buffer:c,size:4,stride:w,offset:0},{buffer:c,size:3,stride:w,offset:16},{buffer:c,size:3,stride:w,offset:28}]),h=i(e),f=a(e,[{buffer:h,size:4,stride:20,offset:0},{buffer:h,size:1,stride:20,offset:16}]),p=i(e),d=a(e,[{buffer:p,size:2,type:e.FLOAT}]),g=o(e,1,S,e.RGBA,e.UNSIGNED_BYTE);g.minFilter=e.LINEAR,g.magFilter=e.LINEAR;var v=new E(e,[0,0],[[0,0,0],[0,0,0]],r,n,c,u,g,s,l,h,f,p,d,[0,0,0]),m={levels:[[],[],[]]};for(var k in t)m[k]=t[k];return m.colormap=m.colormap||\\\"jet\\\",v.update(m),v};var n=t(\\\"bit-twiddle\\\"),i=t(\\\"gl-buffer\\\"),a=t(\\\"gl-vao\\\"),o=t(\\\"gl-texture2d\\\"),s=t(\\\"typedarray-pool\\\"),l=t(\\\"colormap\\\"),c=t(\\\"ndarray-ops\\\"),u=t(\\\"ndarray-pack\\\"),h=t(\\\"ndarray\\\"),f=t(\\\"surface-nets\\\"),p=t(\\\"gl-mat4/multiply\\\"),d=t(\\\"gl-mat4/invert\\\"),g=t(\\\"binary-search-bounds\\\"),v=t(\\\"ndarray-gradient\\\"),m=t(\\\"./lib/shaders\\\"),y=m.createShader,x=m.createContourShader,b=m.createPickShader,_=m.createPickContourShader,w=40,k=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],T=[[0,0],[0,1],[1,0],[1,1],[1,0],[0,1]],A=[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]];function M(t,e,r,n,i){this.position=t,this.index=e,this.uv=r,this.level=n,this.dataCoordinate=i}!function(){for(var t=0;t<3;++t){var e=A[t],r=(t+2)%3;e[(t+1)%3+0]=1,e[r+3]=1,e[t+6]=1}}();var S=256;function E(t,e,r,n,i,a,o,l,c,u,f,p,d,g,v){this.gl=t,this.shape=e,this.bounds=r,this.objectOffset=v,this.intensityBounds=[],this._shader=n,this._pickShader=i,this._coordinateBuffer=a,this._vao=o,this._colorMap=l,this._contourShader=c,this._contourPickShader=u,this._contourBuffer=f,this._contourVAO=p,this._contourOffsets=[[],[],[]],this._contourCounts=[[],[],[]],this._vertexCount=0,this._pickResult=new M([0,0,0],[0,0],[0,0],[0,0,0],[0,0,0]),this._dynamicBuffer=d,this._dynamicVAO=g,this._dynamicOffsets=[0,0,0],this._dynamicCounts=[0,0,0],this.contourWidth=[1,1,1],this.contourLevels=[[1],[1],[1]],this.contourTint=[0,0,0],this.contourColor=[[.5,.5,.5,1],[.5,.5,.5,1],[.5,.5,.5,1]],this.showContour=!0,this.showSurface=!0,this.enableHighlight=[!0,!0,!0],this.highlightColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.highlightTint=[1,1,1],this.highlightLevel=[-1,-1,-1],this.enableDynamic=[!0,!0,!0],this.dynamicLevel=[NaN,NaN,NaN],this.dynamicColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.dynamicTint=[1,1,1],this.dynamicWidth=[1,1,1],this.axesBounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.surfaceProject=[!1,!1,!1],this.contourProject=[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],this.colorBounds=[!1,!1],this._field=[h(s.mallocFloat(1024),[0,0]),h(s.mallocFloat(1024),[0,0]),h(s.mallocFloat(1024),[0,0])],this.pickId=1,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.snapToData=!1,this.pixelRatio=1,this.opacity=1,this.lightPosition=[10,1e4,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.vertexColor=0,this.dirty=!0}var C=E.prototype;C.isTransparent=function(){return this.opacity<1},C.isOpaque=function(){if(this.opacity>=1)return!0;for(var t=0;t<3;++t)if(this._contourCounts[t].length>0||this._dynamicCounts[t]>0)return!0;return!1},C.pickSlots=1,C.setPickBase=function(t){this.pickId=t};var L=[0,0,0],P={showSurface:!1,showContour:!1,projections:[k.slice(),k.slice(),k.slice()],clipBounds:[[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]]]};function O(t,e){var r,n,i,a=e.axes&&e.axes.lastCubeProps.axis||L,o=e.showSurface,s=e.showContour;for(r=0;r<3;++r)for(o=o||e.surfaceProject[r],n=0;n<3;++n)s=s||e.contourProject[r][n];for(r=0;r<3;++r){var l=P.projections[r];for(n=0;n<16;++n)l[n]=0;for(n=0;n<4;++n)l[5*n]=1;l[5*r]=0,l[12+r]=e.axesBounds[+(a[r]>0)][r],p(l,t.model,l);var c=P.clipBounds[r];for(i=0;i<2;++i)for(n=0;n<3;++n)c[i][n]=t.clipBounds[i][n];c[0][r]=-1e8,c[1][r]=1e8}return P.showSurface=o,P.showContour=s,P}var z={model:k,view:k,projection:k,inverseModel:k.slice(),lowerBound:[0,0,0],upperBound:[0,0,0],colorMap:0,clipBounds:[[0,0,0],[0,0,0]],height:0,contourTint:0,contourColor:[0,0,0,1],permutation:[1,0,0,0,1,0,0,0,1],zOffset:-1e-4,objectOffset:[0,0,0],kambient:1,kdiffuse:1,kspecular:1,lightPosition:[1e3,1e3,1e3],eyePosition:[0,0,0],roughness:1,fresnel:1,opacity:1,vertexColor:0},I=k.slice(),D=[1,0,0,0,1,0,0,0,1];function R(t,e){t=t||{};var r=this.gl;r.disable(r.CULL_FACE),this._colorMap.bind(0);var n=z;n.model=t.model||k,n.view=t.view||k,n.projection=t.projection||k,n.lowerBound=[this.bounds[0][0],this.bounds[0][1],this.colorBounds[0]||this.bounds[0][2]],n.upperBound=[this.bounds[1][0],this.bounds[1][1],this.colorBounds[1]||this.bounds[1][2]],n.objectOffset=this.objectOffset,n.contourColor=this.contourColor[0],n.inverseModel=d(n.inverseModel,n.model);for(var i=0;i<2;++i)for(var a=n.clipBounds[i],o=0;o<3;++o)a[o]=Math.min(Math.max(this.clipBounds[i][o],-1e8),1e8);n.kambient=this.ambientLight,n.kdiffuse=this.diffuseLight,n.kspecular=this.specularLight,n.roughness=this.roughness,n.fresnel=this.fresnel,n.opacity=this.opacity,n.height=0,n.permutation=D,n.vertexColor=this.vertexColor;var s=I;for(p(s,n.view,n.model),p(s,n.projection,s),d(s,s),i=0;i<3;++i)n.eyePosition[i]=s[12+i]/s[15];var l=s[15];for(i=0;i<3;++i)l+=this.lightPosition[i]*s[4*i+3];for(i=0;i<3;++i){var c=s[12+i];for(o=0;o<3;++o)c+=s[4*o+i]*this.lightPosition[o];n.lightPosition[i]=c/l}var u=O(n,this);if(u.showSurface&&e===this.opacity<1){for(this._shader.bind(),this._shader.uniforms=n,this._vao.bind(),this.showSurface&&this._vertexCount&&this._vao.draw(r.TRIANGLES,this._vertexCount),i=0;i<3;++i)this.surfaceProject[i]&&this.vertexCount&&(this._shader.uniforms.model=u.projections[i],this._shader.uniforms.clipBounds=u.clipBounds[i],this._vao.draw(r.TRIANGLES,this._vertexCount));this._vao.unbind()}if(u.showContour&&!e){var h=this._contourShader;n.kambient=1,n.kdiffuse=0,n.kspecular=0,n.opacity=1,h.bind(),h.uniforms=n;var f=this._contourVAO;for(f.bind(),i=0;i<3;++i)for(h.uniforms.permutation=A[i],r.lineWidth(this.contourWidth[i]*this.pixelRatio),o=0;o<this.contourLevels[i].length;++o)o===this.highlightLevel[i]?(h.uniforms.contourColor=this.highlightColor[i],h.uniforms.contourTint=this.highlightTint[i]):0!==o&&o-1!==this.highlightLevel[i]||(h.uniforms.contourColor=this.contourColor[i],h.uniforms.contourTint=this.contourTint[i]),this._contourCounts[i][o]&&(h.uniforms.height=this.contourLevels[i][o],f.draw(r.LINES,this._contourCounts[i][o],this._contourOffsets[i][o]));for(i=0;i<3;++i)for(h.uniforms.model=u.projections[i],h.uniforms.clipBounds=u.clipBounds[i],o=0;o<3;++o)if(this.contourProject[i][o]){h.uniforms.permutation=A[o],r.lineWidth(this.contourWidth[o]*this.pixelRatio);for(var g=0;g<this.contourLevels[o].length;++g)g===this.highlightLevel[o]?(h.uniforms.contourColor=this.highlightColor[o],h.uniforms.contourTint=this.highlightTint[o]):0!==g&&g-1!==this.highlightLevel[o]||(h.uniforms.contourColor=this.contourColor[o],h.uniforms.contourTint=this.contourTint[o]),this._contourCounts[o][g]&&(h.uniforms.height=this.contourLevels[o][g],f.draw(r.LINES,this._contourCounts[o][g],this._contourOffsets[o][g]))}for(f.unbind(),(f=this._dynamicVAO).bind(),i=0;i<3;++i)if(0!==this._dynamicCounts[i])for(h.uniforms.model=n.model,h.uniforms.clipBounds=n.clipBounds,h.uniforms.permutation=A[i],r.lineWidth(this.dynamicWidth[i]*this.pixelRatio),h.uniforms.contourColor=this.dynamicColor[i],h.uniforms.contourTint=this.dynamicTint[i],h.uniforms.height=this.dynamicLevel[i],f.draw(r.LINES,this._dynamicCounts[i],this._dynamicOffsets[i]),o=0;o<3;++o)this.contourProject[o][i]&&(h.uniforms.model=u.projections[o],h.uniforms.clipBounds=u.clipBounds[o],f.draw(r.LINES,this._dynamicCounts[i],this._dynamicOffsets[i]));f.unbind()}}C.draw=function(t){return R.call(this,t,!1)},C.drawTransparent=function(t){return R.call(this,t,!0)};var F={model:k,view:k,projection:k,inverseModel:k,clipBounds:[[0,0,0],[0,0,0]],height:0,shape:[0,0],pickId:0,lowerBound:[0,0,0],upperBound:[0,0,0],zOffset:0,objectOffset:[0,0,0],permutation:[1,0,0,0,1,0,0,0,1],lightPosition:[0,0,0],eyePosition:[0,0,0]};function B(t,e){return Array.isArray(t)?[e(t[0]),e(t[1]),e(t[2])]:[e(t),e(t),e(t)]}function N(t){return Array.isArray(t)?3===t.length?[t[0],t[1],t[2],1]:[t[0],t[1],t[2],t[3]]:[0,0,0,1]}function j(t){if(Array.isArray(t)){if(Array.isArray(t))return[N(t[0]),N(t[1]),N(t[2])];var e=N(t);return[e.slice(),e.slice(),e.slice()]}}C.drawPick=function(t){t=t||{};var e=this.gl;e.disable(e.CULL_FACE);var r=F;r.model=t.model||k,r.view=t.view||k,r.projection=t.projection||k,r.shape=this._field[2].shape,r.pickId=this.pickId/255,r.lowerBound=this.bounds[0],r.upperBound=this.bounds[1],r.objectOffset=this.objectOffset,r.permutation=D;for(var n=0;n<2;++n)for(var i=r.clipBounds[n],a=0;a<3;++a)i[a]=Math.min(Math.max(this.clipBounds[n][a],-1e8),1e8);var o=O(r,this);if(o.showSurface){for(this._pickShader.bind(),this._pickShader.uniforms=r,this._vao.bind(),this._vao.draw(e.TRIANGLES,this._vertexCount),n=0;n<3;++n)this.surfaceProject[n]&&(this._pickShader.uniforms.model=o.projections[n],this._pickShader.uniforms.clipBounds=o.clipBounds[n],this._vao.draw(e.TRIANGLES,this._vertexCount));this._vao.unbind()}if(o.showContour){var s=this._contourPickShader;s.bind(),s.uniforms=r;var l=this._contourVAO;for(l.bind(),a=0;a<3;++a)for(e.lineWidth(this.contourWidth[a]*this.pixelRatio),s.uniforms.permutation=A[a],n=0;n<this.contourLevels[a].length;++n)this._contourCounts[a][n]&&(s.uniforms.height=this.contourLevels[a][n],l.draw(e.LINES,this._contourCounts[a][n],this._contourOffsets[a][n]));for(n=0;n<3;++n)for(s.uniforms.model=o.projections[n],s.uniforms.clipBounds=o.clipBounds[n],a=0;a<3;++a)if(this.contourProject[n][a]){s.uniforms.permutation=A[a],e.lineWidth(this.contourWidth[a]*this.pixelRatio);for(var c=0;c<this.contourLevels[a].length;++c)this._contourCounts[a][c]&&(s.uniforms.height=this.contourLevels[a][c],l.draw(e.LINES,this._contourCounts[a][c],this._contourOffsets[a][c]))}l.unbind()}},C.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=this._field[2].shape,r=this._pickResult,n=e[0]*(t.value[0]+(t.value[2]>>4)/16)/255,i=Math.floor(n),a=n-i,o=e[1]*(t.value[1]+(15&t.value[2])/16)/255,s=Math.floor(o),l=o-s;i+=1,s+=1;var c=r.position;c[0]=c[1]=c[2]=0;for(var u=0;u<2;++u)for(var h=u?a:1-a,f=0;f<2;++f)for(var p=i+u,d=s+f,v=h*(f?l:1-l),m=0;m<3;++m)c[m]+=this._field[m].get(p,d)*v;for(var y=this._pickResult.level,x=0;x<3;++x)if(y[x]=g.le(this.contourLevels[x],c[x]),y[x]<0)this.contourLevels[x].length>0&&(y[x]=0);else if(y[x]<this.contourLevels[x].length-1){var b=this.contourLevels[x][y[x]],_=this.contourLevels[x][y[x]+1];Math.abs(b-c[x])>Math.abs(_-c[x])&&(y[x]+=1)}for(r.index[0]=a<.5?i:i+1,r.index[1]=l<.5?s:s+1,r.uv[0]=n/e[0],r.uv[1]=o/e[1],m=0;m<3;++m)r.dataCoordinate[m]=this._field[m].get(r.index[0],r.index[1]);return r},C.padField=function(t,e){var r=e.shape.slice(),n=t.shape.slice();c.assign(t.lo(1,1).hi(r[0],r[1]),e),c.assign(t.lo(1).hi(r[0],1),e.hi(r[0],1)),c.assign(t.lo(1,n[1]-1).hi(r[0],1),e.lo(0,r[1]-1).hi(r[0],1)),c.assign(t.lo(0,1).hi(1,r[1]),e.hi(1)),c.assign(t.lo(n[0]-1,1).hi(1,r[1]),e.lo(r[0]-1)),t.set(0,0,e.get(0,0)),t.set(0,n[1]-1,e.get(0,r[1]-1)),t.set(n[0]-1,0,e.get(r[0]-1,0)),t.set(n[0]-1,n[1]-1,e.get(r[0]-1,r[1]-1))},C.update=function(t){t=t||{},this.objectOffset=t.objectOffset||this.objectOffset,this.dirty=!0,\\\"contourWidth\\\"in t&&(this.contourWidth=B(t.contourWidth,Number)),\\\"showContour\\\"in t&&(this.showContour=B(t.showContour,Boolean)),\\\"showSurface\\\"in t&&(this.showSurface=!!t.showSurface),\\\"contourTint\\\"in t&&(this.contourTint=B(t.contourTint,Boolean)),\\\"contourColor\\\"in t&&(this.contourColor=j(t.contourColor)),\\\"contourProject\\\"in t&&(this.contourProject=B(t.contourProject,function(t){return B(t,Boolean)})),\\\"surfaceProject\\\"in t&&(this.surfaceProject=t.surfaceProject),\\\"dynamicColor\\\"in t&&(this.dynamicColor=j(t.dynamicColor)),\\\"dynamicTint\\\"in t&&(this.dynamicTint=B(t.dynamicTint,Number)),\\\"dynamicWidth\\\"in t&&(this.dynamicWidth=B(t.dynamicWidth,Number)),\\\"opacity\\\"in t&&(this.opacity=t.opacity),\\\"colorBounds\\\"in t&&(this.colorBounds=t.colorBounds),\\\"vertexColor\\\"in t&&(this.vertexColor=t.vertexColor?1:0);var e=t.field||t.coords&&t.coords[2]||null,r=!1;if(e||(e=this._field[2].shape[0]||this._field[2].shape[2]?this._field[2].lo(1,1).hi(this._field[2].shape[0]-2,this._field[2].shape[1]-2):this._field[2].hi(0,0)),\\\"field\\\"in t||\\\"coords\\\"in t){var i=(e.shape[0]+2)*(e.shape[1]+2);i>this._field[2].data.length&&(s.freeFloat(this._field[2].data),this._field[2].data=s.mallocFloat(n.nextPow2(i))),this._field[2]=h(this._field[2].data,[e.shape[0]+2,e.shape[1]+2]),this.padField(this._field[2],e),this.shape=e.shape.slice();for(var a=this.shape,o=0;o<2;++o)this._field[2].size>this._field[o].data.length&&(s.freeFloat(this._field[o].data),this._field[o].data=s.mallocFloat(this._field[2].size)),this._field[o]=h(this._field[o].data,[a[0]+2,a[1]+2]);if(t.coords){var p=t.coords;if(!Array.isArray(p)||3!==p.length)throw new Error(\\\"gl-surface: invalid coordinates for x/y\\\");for(o=0;o<2;++o){var d=p[o];for(b=0;b<2;++b)if(d.shape[b]!==a[b])throw new Error(\\\"gl-surface: coords have incorrect shape\\\");this.padField(this._field[o],d)}}else if(t.ticks){var g=t.ticks;if(!Array.isArray(g)||2!==g.length)throw new Error(\\\"gl-surface: invalid ticks\\\");for(o=0;o<2;++o){var m=g[o];if((Array.isArray(m)||m.length)&&(m=h(m)),m.shape[0]!==a[o])throw new Error(\\\"gl-surface: invalid tick length\\\");var y=h(m.data,a);y.stride[o]=m.stride[0],y.stride[1^o]=0,this.padField(this._field[o],y)}}else{for(o=0;o<2;++o){var x=[0,0];x[o]=1,this._field[o]=h(this._field[o].data,[a[0]+2,a[1]+2],x,0)}this._field[0].set(0,0,0);for(var b=0;b<a[0];++b)this._field[0].set(b+1,0,b);for(this._field[0].set(a[0]+1,0,a[0]-1),this._field[1].set(0,0,0),b=0;b<a[1];++b)this._field[1].set(0,b+1,b);this._field[1].set(0,a[1]+1,a[1]-1)}var _=this._field,w=h(s.mallocFloat(3*_[2].size*2),[3,a[0]+2,a[1]+2,2]);for(o=0;o<3;++o)v(w.pick(o),_[o],\\\"mirror\\\");var k=h(s.mallocFloat(3*_[2].size),[a[0]+2,a[1]+2,3]);for(o=0;o<a[0]+2;++o)for(b=0;b<a[1]+2;++b){var A=w.get(0,o,b,0),M=w.get(0,o,b,1),E=w.get(1,o,b,0),C=w.get(1,o,b,1),L=w.get(2,o,b,0),P=w.get(2,o,b,1),O=E*P-C*L,z=L*M-P*A,I=A*C-M*E,D=Math.sqrt(O*O+z*z+I*I);D<1e-8?(D=Math.max(Math.abs(O),Math.abs(z),Math.abs(I)))<1e-8?(I=1,z=O=0,D=1):D=1/D:D=1/Math.sqrt(D),k.set(o,b,0,O*D),k.set(o,b,1,z*D),k.set(o,b,2,I*D)}s.free(w.data);var R=[1/0,1/0,1/0],F=[-1/0,-1/0,-1/0],N=1/0,U=-1/0,V=(a[0]-1)*(a[1]-1)*6,q=s.mallocFloat(n.nextPow2(10*V)),H=0,G=0;for(o=0;o<a[0]-1;++o)t:for(b=0;b<a[1]-1;++b){for(var Y=0;Y<2;++Y)for(var W=0;W<2;++W)for(var X=0;X<3;++X){var Z=this._field[X].get(1+o+Y,1+b+W);if(isNaN(Z)||!isFinite(Z))continue t}for(X=0;X<6;++X){var J=o+T[X][0],K=b+T[X][1],$=this._field[0].get(J+1,K+1),Q=this._field[1].get(J+1,K+1);Z=this._field[2].get(J+1,K+1),O=k.get(J+1,K+1,0),z=k.get(J+1,K+1,1),I=k.get(J+1,K+1,2),t.intensity&&(tt=t.intensity.get(J,K));var tt=t.intensity?t.intensity.get(J,K):Z+this.objectOffset[2];q[H++]=J,q[H++]=K,q[H++]=$,q[H++]=Q,q[H++]=Z,q[H++]=0,q[H++]=tt,q[H++]=O,q[H++]=z,q[H++]=I,R[0]=Math.min(R[0],$+this.objectOffset[0]),R[1]=Math.min(R[1],Q+this.objectOffset[1]),R[2]=Math.min(R[2],Z+this.objectOffset[2]),N=Math.min(N,tt),F[0]=Math.max(F[0],$+this.objectOffset[0]),F[1]=Math.max(F[1],Q+this.objectOffset[1]),F[2]=Math.max(F[2],Z+this.objectOffset[2]),U=Math.max(U,tt),G+=1}}for(t.intensityBounds&&(N=+t.intensityBounds[0],U=+t.intensityBounds[1]),o=6;o<H;o+=10)q[o]=(q[o]-N)/(U-N);this._vertexCount=G,this._coordinateBuffer.update(q.subarray(0,H)),s.freeFloat(q),s.free(k.data),this.bounds=[R,F],this.intensity=t.intensity||this._field[2],this.intensityBounds[0]===N&&this.intensityBounds[1]===U||(r=!0),this.intensityBounds=[N,U]}if(\\\"levels\\\"in t){var et=t.levels;for(et=Array.isArray(et[0])?et.slice():[[],[],et],o=0;o<3;++o)et[o]=et[o].slice(),et[o].sort(function(t,e){return t-e});for(o=0;o<3;++o)for(b=0;b<et[o].length;++b)et[o][b]-=this.objectOffset[o];t:for(o=0;o<3;++o){if(et[o].length!==this.contourLevels[o].length){r=!0;break}for(b=0;b<et[o].length;++b)if(et[o][b]!==this.contourLevels[o][b]){r=!0;break t}}this.contourLevels=et}if(r){_=this._field,a=this.shape;for(var rt=[],nt=0;nt<3;++nt){var it=this.contourLevels[nt],at=[],ot=[],st=[0,0,0];for(o=0;o<it.length;++o){var lt=f(this._field[nt],it[o]);at.push(rt.length/5|0),G=0;t:for(b=0;b<lt.cells.length;++b){var ct=lt.cells[b];for(X=0;X<2;++X){var ut=lt.positions[ct[X]],ht=ut[0],ft=0|Math.floor(ht),pt=ht-ft,dt=ut[1],gt=0|Math.floor(dt),vt=dt-gt,mt=!1;e:for(var yt=0;yt<3;++yt){st[yt]=0;var xt=(nt+yt+1)%3;for(Y=0;Y<2;++Y){var bt=Y?pt:1-pt;for(J=0|Math.min(Math.max(ft+Y,0),a[0]),W=0;W<2;++W){var _t=W?vt:1-vt;if(K=0|Math.min(Math.max(gt+W,0),a[1]),Z=yt<2?this._field[xt].get(J,K):(this.intensity.get(J,K)-this.intensityBounds[0])/(this.intensityBounds[1]-this.intensityBounds[0]),!isFinite(Z)||isNaN(Z)){mt=!0;break e}var wt=bt*_t;st[yt]+=wt*Z}}}if(mt){if(X>0){for(var kt=0;kt<5;++kt)rt.pop();G-=1}continue t}rt.push(st[0],st[1],ut[0],ut[1],st[2]),G+=1}}ot.push(G)}this._contourOffsets[nt]=at,this._contourCounts[nt]=ot}var Tt=s.mallocFloat(rt.length);for(o=0;o<rt.length;++o)Tt[o]=rt[o];this._contourBuffer.update(Tt),s.freeFloat(Tt)}t.colormap&&this._colorMap.setPixels(function(t){var e=u([l({colormap:t,nshades:S,format:\\\"rgba\\\"}).map(function(t){return[t[0],t[1],t[2],255*t[3]]})]);return c.divseq(e,255),e}(t.colormap))},C.dispose=function(){this._shader.dispose(),this._vao.dispose(),this._coordinateBuffer.dispose(),this._colorMap.dispose(),this._contourBuffer.dispose(),this._contourVAO.dispose(),this._contourShader.dispose(),this._contourPickShader.dispose(),this._dynamicBuffer.dispose(),this._dynamicVAO.dispose();for(var t=0;t<3;++t)s.freeFloat(this._field[t].data)},C.highlight=function(t){var e,r;if(!t)return this._dynamicCounts=[0,0,0],this.dyanamicLevel=[NaN,NaN,NaN],void(this.highlightLevel=[-1,-1,-1]);for(e=0;e<3;++e)this.enableHighlight[e]?this.highlightLevel[e]=t.level[e]:this.highlightLevel[e]=-1;for(r=this.snapToData?t.dataCoordinate:t.position,e=0;e<3;++e)r[e]-=this.objectOffset[e];if(this.enableDynamic[0]&&r[0]!==this.dynamicLevel[0]||this.enableDynamic[1]&&r[1]!==this.dynamicLevel[1]||this.enableDynamic[2]&&r[2]!==this.dynamicLevel[2]){for(var n=0,i=this.shape,a=s.mallocFloat(12*i[0]*i[1]),o=0;o<3;++o)if(this.enableDynamic[o]){this.dynamicLevel[o]=r[o];var l=(o+1)%3,c=(o+2)%3,u=this._field[o],h=this._field[l],p=this._field[c],d=f(u,r[o]),g=d.cells,v=d.positions;for(this._dynamicOffsets[o]=n,e=0;e<g.length;++e)for(var m=g[e],y=0;y<2;++y){var x=v[m[y]],b=+x[0],_=0|b,w=0|Math.min(_+1,i[0]),k=b-_,T=1-k,A=+x[1],M=0|A,S=0|Math.min(M+1,i[1]),E=A-M,C=1-E,L=T*C,P=T*E,O=k*C,z=k*E,I=L*h.get(_,M)+P*h.get(_,S)+O*h.get(w,M)+z*h.get(w,S),D=L*p.get(_,M)+P*p.get(_,S)+O*p.get(w,M)+z*p.get(w,S);if(isNaN(I)||isNaN(D)){y&&(n-=1);break}a[2*n+0]=I,a[2*n+1]=D,n+=1}this._dynamicCounts[o]=n-this._dynamicOffsets[o]}else this.dynamicLevel[o]=NaN,this._dynamicCounts[o]=0;this._dynamicBuffer.update(a.subarray(0,2*n)),s.freeFloat(a)}}},{\\\"./lib/shaders\\\":314,\\\"binary-search-bounds\\\":315,\\\"bit-twiddle\\\":92,colormap:126,\\\"gl-buffer\\\":241,\\\"gl-mat4/invert\\\":265,\\\"gl-mat4/multiply\\\":267,\\\"gl-texture2d\\\":322,\\\"gl-vao\\\":327,ndarray:450,\\\"ndarray-gradient\\\":441,\\\"ndarray-ops\\\":444,\\\"ndarray-pack\\\":445,\\\"surface-nets\\\":531,\\\"typedarray-pool\\\":545}],317:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"css-font\\\"),i=t(\\\"pick-by-alias\\\"),a=t(\\\"regl\\\"),o=t(\\\"gl-util/context\\\"),s=t(\\\"es6-weak-map\\\"),l=t(\\\"color-normalize\\\"),c=t(\\\"font-atlas\\\"),u=t(\\\"typedarray-pool\\\"),h=t(\\\"parse-rect\\\"),f=t(\\\"is-plain-obj\\\"),p=t(\\\"parse-unit\\\"),d=t(\\\"to-px\\\"),g=t(\\\"detect-kerning\\\"),v=t(\\\"object-assign\\\"),m=t(\\\"font-measure\\\"),y=t(\\\"flatten-vertex-data\\\"),x=t(\\\"bit-twiddle\\\").nextPow2,b=new s,_=!1;if(document.body){var w=document.body.appendChild(document.createElement(\\\"div\\\"));w.style.font=\\\"italic small-caps bold condensed 16px/2 cursive\\\",getComputedStyle(w).fontStretch&&(_=!0),document.body.removeChild(w)}var k=function(t){!function(t){return\\\"function\\\"==typeof t&&t._gl&&t.prop&&t.texture&&t.buffer}(t)?this.gl=o(t):(t={regl:t},this.gl=t.regl._gl),this.shader=b.get(this.gl),this.shader?this.regl=this.shader.regl:this.regl=t.regl||a({gl:this.gl}),this.charBuffer=this.regl.buffer({type:\\\"uint8\\\",usage:\\\"stream\\\"}),this.sizeBuffer=this.regl.buffer({type:\\\"float\\\",usage:\\\"stream\\\"}),this.shader||(this.shader=this.createShader(),b.set(this.gl,this.shader)),this.batch=[],this.fontSize=[],this.font=[],this.fontAtlas=[],this.draw=this.shader.draw.bind(this),this.render=function(){this.regl._refresh(),this.draw(this.batch)},this.canvas=this.gl.canvas,this.update(f(t)?t:{})};k.prototype.createShader=function(){var t=this.regl,e=t({blend:{enable:!0,color:[0,0,0,1],func:{srcRGB:\\\"src alpha\\\",dstRGB:\\\"one minus src alpha\\\",srcAlpha:\\\"one minus dst alpha\\\",dstAlpha:\\\"one\\\"}},stencil:{enable:!1},depth:{enable:!1},count:t.prop(\\\"count\\\"),offset:t.prop(\\\"offset\\\"),attributes:{charOffset:{offset:4,stride:8,buffer:t.this(\\\"sizeBuffer\\\")},width:{offset:0,stride:8,buffer:t.this(\\\"sizeBuffer\\\")},char:t.this(\\\"charBuffer\\\"),position:t.this(\\\"position\\\")},uniforms:{atlasSize:function(t,e){return[e.atlas.width,e.atlas.height]},atlasDim:function(t,e){return[e.atlas.cols,e.atlas.rows]},atlas:function(t,e){return e.atlas.texture},charStep:function(t,e){return e.atlas.step},em:function(t,e){return e.atlas.em},color:t.prop(\\\"color\\\"),opacity:t.prop(\\\"opacity\\\"),viewport:t.this(\\\"viewportArray\\\"),scale:t.this(\\\"scale\\\"),align:t.prop(\\\"align\\\"),baseline:t.prop(\\\"baseline\\\"),translate:t.this(\\\"translate\\\"),positionOffset:t.prop(\\\"positionOffset\\\")},primitive:\\\"points\\\",viewport:t.this(\\\"viewport\\\"),vert:\\\"\\\\n\\\\t\\\\t\\\\tprecision highp float;\\\\n\\\\t\\\\t\\\\tattribute float width, charOffset, char;\\\\n\\\\t\\\\t\\\\tattribute vec2 position;\\\\n\\\\t\\\\t\\\\tuniform float fontSize, charStep, em, align, baseline;\\\\n\\\\t\\\\t\\\\tuniform vec4 viewport;\\\\n\\\\t\\\\t\\\\tuniform vec4 color;\\\\n\\\\t\\\\t\\\\tuniform vec2 atlasSize, atlasDim, scale, translate, positionOffset;\\\\n\\\\t\\\\t\\\\tvarying vec2 charCoord, charId;\\\\n\\\\t\\\\t\\\\tvarying float charWidth;\\\\n\\\\t\\\\t\\\\tvarying vec4 fontColor;\\\\n\\\\t\\\\t\\\\tvoid main () {\\\\n\\\\t\\\\t\\\\t\\\\t\\\"+(k.normalViewport?\\\"\\\":\\\"vec2 positionOffset = vec2(positionOffset.x,- positionOffset.y);\\\")+\\\"\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec2 offset = floor(em * (vec2(align + charOffset, baseline)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t+ positionOffset))\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t/ (viewport.zw * scale.xy);\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec2 position = (position + translate) * scale;\\\\n\\\\t\\\\t\\\\t\\\\tposition += offset * scale;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\"+(k.normalViewport?\\\"position.y = 1. - position.y;\\\":\\\"\\\")+\\\"\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tcharCoord = position * viewport.zw + viewport.xy;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_Position = vec4(position * 2. - 1., 0, 1);\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_PointSize = charStep;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tcharId.x = mod(char, atlasDim.x);\\\\n\\\\t\\\\t\\\\t\\\\tcharId.y = floor(char / atlasDim.x);\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tcharWidth = width * em;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfontColor = color / 255.;\\\\n\\\\t\\\\t\\\\t}\\\",frag:\\\"\\\\n\\\\t\\\\t\\\\tprecision highp float;\\\\n\\\\t\\\\t\\\\tuniform sampler2D atlas;\\\\n\\\\t\\\\t\\\\tuniform float fontSize, charStep, opacity;\\\\n\\\\t\\\\t\\\\tuniform vec2 atlasSize;\\\\n\\\\t\\\\t\\\\tuniform vec4 viewport;\\\\n\\\\t\\\\t\\\\tvarying vec4 fontColor;\\\\n\\\\t\\\\t\\\\tvarying vec2 charCoord, charId;\\\\n\\\\t\\\\t\\\\tvarying float charWidth;\\\\n\\\\n\\\\t\\\\t\\\\tfloat lightness(vec4 color) {\\\\n\\\\t\\\\t\\\\t\\\\treturn color.r * 0.299 + color.g * 0.587 + color.b * 0.114;\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\tvoid main () {\\\\n\\\\t\\\\t\\\\t\\\\tvec2 uv = gl_FragCoord.xy - charCoord + charStep * .5;\\\\n\\\\t\\\\t\\\\t\\\\tfloat halfCharStep = floor(charStep * .5 + .5);\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t// invert y and shift by 1px (FF expecially needs that)\\\\n\\\\t\\\\t\\\\t\\\\tuv.y = charStep - uv.y;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t// ignore points outside of character bounding box\\\\n\\\\t\\\\t\\\\t\\\\tfloat halfCharWidth = ceil(charWidth * .5);\\\\n\\\\t\\\\t\\\\t\\\\tif (floor(uv.x) > halfCharStep + halfCharWidth ||\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloor(uv.x) < halfCharStep - halfCharWidth) return;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tuv += charId * charStep;\\\\n\\\\t\\\\t\\\\t\\\\tuv = uv / atlasSize;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec4 color = fontColor;\\\\n\\\\t\\\\t\\\\t\\\\tvec4 mask = texture2D(atlas, uv);\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfloat maskY = lightness(mask);\\\\n\\\\t\\\\t\\\\t\\\\t// float colorY = lightness(color);\\\\n\\\\t\\\\t\\\\t\\\\tcolor.a *= maskY;\\\\n\\\\t\\\\t\\\\t\\\\tcolor.a *= opacity;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t// color.a += .1;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t// antialiasing, see yiq color space y-channel formula\\\\n\\\\t\\\\t\\\\t\\\\t// color.rgb += (1. - color.rgb) * (1. - mask.rgb);\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = color;\\\\n\\\\t\\\\t\\\\t}\\\"});return{regl:t,draw:e,atlas:{}}},k.prototype.update=function(t){var e=this;if(\\\"string\\\"==typeof t)t={text:t};else if(!t)return;null!=(t=i(t,{position:\\\"position positions coord coords coordinates\\\",font:\\\"font fontFace fontface typeface cssFont css-font family fontFamily\\\",fontSize:\\\"fontSize fontsize size font-size\\\",text:\\\"text texts chars characters value values symbols\\\",align:\\\"align alignment textAlign textbaseline\\\",baseline:\\\"baseline textBaseline textbaseline\\\",direction:\\\"dir direction textDirection\\\",color:\\\"color colour fill fill-color fillColor textColor textcolor\\\",kerning:\\\"kerning kern\\\",range:\\\"range dataBox\\\",viewport:\\\"vp viewport viewBox viewbox viewPort\\\",opacity:\\\"opacity alpha transparency visible visibility opaque\\\",offset:\\\"offset positionOffset padding shift indent indentation\\\"},!0)).opacity&&(Array.isArray(t.opacity)?this.opacity=t.opacity.map(function(t){return parseFloat(t)}):this.opacity=parseFloat(t.opacity)),null!=t.viewport&&(this.viewport=h(t.viewport),k.normalViewport&&(this.viewport.y=this.canvas.height-this.viewport.y-this.viewport.height),this.viewportArray=[this.viewport.x,this.viewport.y,this.viewport.width,this.viewport.height]),null==this.viewport&&(this.viewport={x:0,y:0,width:this.gl.drawingBufferWidth,height:this.gl.drawingBufferHeight},this.viewportArray=[this.viewport.x,this.viewport.y,this.viewport.width,this.viewport.height]),null!=t.kerning&&(this.kerning=t.kerning),null!=t.offset&&(\\\"number\\\"==typeof t.offset&&(t.offset=[t.offset,0]),this.positionOffset=y(t.offset)),t.direction&&(this.direction=t.direction),t.range&&(this.range=t.range,this.scale=[1/(t.range[2]-t.range[0]),1/(t.range[3]-t.range[1])],this.translate=[-t.range[0],-t.range[1]]),t.scale&&(this.scale=t.scale),t.translate&&(this.translate=t.translate),this.scale||(this.scale=[1/this.viewport.width,1/this.viewport.height]),this.translate||(this.translate=[0,0]),this.font.length||t.font||(t.font=k.baseFontSize+\\\"px sans-serif\\\");var r,a=!1,o=!1;if(t.font&&(Array.isArray(t.font)?t.font:[t.font]).forEach(function(t,r){if(\\\"string\\\"==typeof t)try{t=n.parse(t)}catch(e){t=n.parse(k.baseFontSize+\\\"px \\\"+t)}else t=n.parse(n.stringify(t));var i=n.stringify({size:k.baseFontSize,family:t.family,stretch:_?t.stretch:void 0,variant:t.variant,weight:t.weight,style:t.style}),s=p(t.size),l=Math.round(s[0]*d(s[1]));if(l!==e.fontSize[r]&&(o=!0,e.fontSize[r]=l),!(e.font[r]&&i==e.font[r].baseString||(a=!0,e.font[r]=k.fonts[i],e.font[r]))){var c=t.family.join(\\\", \\\"),u=[t.style];t.style!=t.variant&&u.push(t.variant),t.variant!=t.weight&&u.push(t.weight),_&&t.weight!=t.stretch&&u.push(t.stretch),e.font[r]={baseString:i,family:c,weight:t.weight,stretch:t.stretch,style:t.style,variant:t.variant,width:{},kerning:{},metrics:m(c,{origin:\\\"top\\\",fontSize:k.baseFontSize,fontStyle:u.join(\\\" \\\")})},k.fonts[i]=e.font[r]}}),(a||o)&&this.font.forEach(function(r,i){var a=n.stringify({size:e.fontSize[i],family:r.family,stretch:_?r.stretch:void 0,variant:r.variant,weight:r.weight,style:r.style});if(e.fontAtlas[i]=e.shader.atlas[a],!e.fontAtlas[i]){var o=r.metrics;e.shader.atlas[a]=e.fontAtlas[i]={fontString:a,step:2*Math.ceil(e.fontSize[i]*o.bottom*.5),em:e.fontSize[i],cols:0,rows:0,height:0,width:0,chars:[],ids:{},texture:e.regl.texture()}}null==t.text&&(t.text=e.text)}),\\\"string\\\"==typeof t.text&&t.position&&t.position.length>2){for(var s=Array(.5*t.position.length),f=0;f<s.length;f++)s[f]=t.text;t.text=s}if(null!=t.text||a){if(this.textOffsets=[0],Array.isArray(t.text)){this.count=t.text[0].length,this.counts=[this.count];for(var b=1;b<t.text.length;b++)this.textOffsets[b]=this.textOffsets[b-1]+t.text[b-1].length,this.count+=t.text[b].length,this.counts.push(t.text[b].length);this.text=t.text.join(\\\"\\\")}else this.text=t.text,this.count=this.text.length,this.counts=[this.count];r=[],this.font.forEach(function(t,n){k.atlasContext.font=t.baseString;for(var i=e.fontAtlas[n],a=0;a<e.text.length;a++){var o=e.text.charAt(a);if(null==i.ids[o]&&(i.ids[o]=i.chars.length,i.chars.push(o),r.push(o)),null==t.width[o]&&(t.width[o]=k.atlasContext.measureText(o).width/k.baseFontSize,e.kerning)){var s=[];for(var l in t.width)s.push(l+o,o+l);v(t.kerning,g(t.family,{pairs:s}))}}})}if(t.position)if(t.position.length>2){for(var w=!t.position[0].length,T=u.mallocFloat(2*this.count),A=0,M=0;A<this.counts.length;A++){var S=this.counts[A];if(w)for(var E=0;E<S;E++)T[M++]=t.position[2*A],T[M++]=t.position[2*A+1];else for(var C=0;C<S;C++)T[M++]=t.position[A][0],T[M++]=t.position[A][1]}this.position.call?this.position({type:\\\"float\\\",data:T}):this.position=this.regl.buffer({type:\\\"float\\\",data:T}),u.freeFloat(T)}else this.position.destroy&&this.position.destroy(),this.position={constant:t.position};if(t.text||a){var L=u.mallocUint8(this.count),P=u.mallocFloat(2*this.count);this.textWidth=[];for(var O=0,z=0;O<this.counts.length;O++){for(var I=this.counts[O],D=this.font[O]||this.font[0],R=this.fontAtlas[O]||this.fontAtlas[0],F=0;F<I;F++){var B=this.text.charAt(z),N=this.text.charAt(z-1);if(L[z]=R.ids[B],P[2*z]=D.width[B],F){var j=P[2*z-2],U=P[2*z],V=P[2*z-1]+.5*j+.5*U;if(this.kerning){var q=D.kerning[N+B];q&&(V+=.001*q)}P[2*z+1]=V}else P[2*z+1]=.5*P[2*z];z++}this.textWidth.push(P.length?.5*P[2*z-2]+P[2*z-1]:0)}t.align||(t.align=this.align),this.charBuffer({data:L,type:\\\"uint8\\\",usage:\\\"stream\\\"}),this.sizeBuffer({data:P,type:\\\"float\\\",usage:\\\"stream\\\"}),u.freeUint8(L),u.freeFloat(P),r.length&&this.font.forEach(function(t,r){var n=e.fontAtlas[r],i=n.step,a=Math.floor(k.maxAtlasSize/i),o=Math.min(a,n.chars.length),s=Math.ceil(n.chars.length/o),l=x(o*i),u=x(s*i);n.width=l,n.height=u,n.rows=s,n.cols=o,n.em&&n.texture({data:c({canvas:k.atlasCanvas,font:n.fontString,chars:n.chars,shape:[l,u],step:[i,i]})})})}if(t.align&&(this.align=t.align,this.alignOffset=this.textWidth.map(function(t,r){var n=Array.isArray(e.align)?e.align.length>1?e.align[r]:e.align[0]:e.align;if(\\\"number\\\"==typeof n)return n;switch(n){case\\\"right\\\":case\\\"end\\\":return-t;case\\\"center\\\":case\\\"centre\\\":case\\\"middle\\\":return.5*-t}return 0})),null==this.baseline&&null==t.baseline&&(t.baseline=0),null!=t.baseline&&(this.baseline=t.baseline,Array.isArray(this.baseline)||(this.baseline=[this.baseline]),this.baselineOffset=this.baseline.map(function(t,r){var n=(e.font[r]||e.font[0]).metrics,i=0;return i+=.5*n.bottom,i+=\\\"number\\\"==typeof t?t-n.baseline:-n[t],k.normalViewport||(i*=-1),i})),null!=t.color)if(t.color||(t.color=\\\"transparent\\\"),\\\"string\\\"!=typeof t.color&&isNaN(t.color)){var H;if(\\\"number\\\"==typeof t.color[0]&&t.color.length>this.counts.length){var G=t.color.length;H=u.mallocUint8(G);for(var Y=(t.color.subarray||t.color.slice).bind(t.color),W=0;W<G;W+=4)H.set(l(Y(W,W+4),\\\"uint8\\\"),W)}else{var X=t.color.length;H=u.mallocUint8(4*X);for(var Z=0;Z<X;Z++)H.set(l(t.color[Z]||0,\\\"uint8\\\"),4*Z)}this.color=H}else this.color=l(t.color,\\\"uint8\\\");if(t.position||t.text||t.color||t.baseline||t.align||t.font||t.offset||t.opacity)if(this.color.length>4||this.baselineOffset.length>1||this.align&&this.align.length>1||this.fontAtlas.length>1||this.positionOffset.length>2){var J=Math.max(.5*this.position.length||0,.25*this.color.length||0,this.baselineOffset.length||0,this.alignOffset.length||0,this.font.length||0,this.opacity.length||0,.5*this.positionOffset.length||0);this.batch=Array(J);for(var K=0;K<this.batch.length;K++)this.batch[K]={count:this.counts.length>1?this.counts[K]:this.counts[0],offset:this.textOffsets.length>1?this.textOffsets[K]:this.textOffsets[0],color:this.color?this.color.length<=4?this.color:this.color.subarray(4*K,4*K+4):[0,0,0,255],opacity:Array.isArray(this.opacity)?this.opacity[K]:this.opacity,baseline:null!=this.baselineOffset[K]?this.baselineOffset[K]:this.baselineOffset[0],align:this.align?null!=this.alignOffset[K]?this.alignOffset[K]:this.alignOffset[0]:0,atlas:this.fontAtlas[K]||this.fontAtlas[0],positionOffset:this.positionOffset.length>2?this.positionOffset.subarray(2*K,2*K+2):this.positionOffset}}else this.count?this.batch=[{count:this.count,offset:0,color:this.color||[0,0,0,255],opacity:Array.isArray(this.opacity)?this.opacity[0]:this.opacity,baseline:this.baselineOffset[0],align:this.alignOffset?this.alignOffset[0]:0,atlas:this.fontAtlas[0],positionOffset:this.positionOffset}]:this.batch=[]},k.prototype.destroy=function(){},k.prototype.kerning=!0,k.prototype.position={constant:new Float32Array(2)},k.prototype.translate=null,k.prototype.scale=null,k.prototype.font=null,k.prototype.text=\\\"\\\",k.prototype.positionOffset=[0,0],k.prototype.opacity=1,k.prototype.color=new Uint8Array([0,0,0,255]),k.prototype.alignOffset=[0,0],k.normalViewport=!1,k.maxAtlasSize=1024,k.atlasCanvas=document.createElement(\\\"canvas\\\"),k.atlasContext=k.atlasCanvas.getContext(\\\"2d\\\",{alpha:!1}),k.baseFontSize=64,k.fonts={},e.exports=k},{\\\"bit-twiddle\\\":92,\\\"color-normalize\\\":120,\\\"css-font\\\":139,\\\"detect-kerning\\\":166,\\\"es6-weak-map\\\":318,\\\"flatten-vertex-data\\\":227,\\\"font-atlas\\\":228,\\\"font-measure\\\":229,\\\"gl-util/context\\\":323,\\\"is-plain-obj\\\":422,\\\"object-assign\\\":454,\\\"parse-rect\\\":459,\\\"parse-unit\\\":461,\\\"pick-by-alias\\\":465,regl:502,\\\"to-px\\\":539,\\\"typedarray-pool\\\":545}],318:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"./is-implemented\\\")()?WeakMap:t(\\\"./polyfill\\\")},{\\\"./is-implemented\\\":319,\\\"./polyfill\\\":321}],319:[function(t,e,r){\\\"use strict\\\";e.exports=function(){var t,e;if(\\\"function\\\"!=typeof WeakMap)return!1;try{t=new WeakMap([[e={},\\\"one\\\"],[{},\\\"two\\\"],[{},\\\"three\\\"]])}catch(t){return!1}return\\\"[object WeakMap]\\\"===String(t)&&(\\\"function\\\"==typeof t.set&&(t.set({},1)===t&&(\\\"function\\\"==typeof t.delete&&(\\\"function\\\"==typeof t.has&&\\\"one\\\"===t.get(e)))))}},{}],320:[function(t,e,r){\\\"use strict\\\";e.exports=\\\"function\\\"==typeof WeakMap&&\\\"[object WeakMap]\\\"===Object.prototype.toString.call(new WeakMap)},{}],321:[function(t,e,r){\\\"use strict\\\";var n,i=t(\\\"es5-ext/object/is-value\\\"),a=t(\\\"es5-ext/object/set-prototype-of\\\"),o=t(\\\"es5-ext/object/valid-object\\\"),s=t(\\\"es5-ext/object/valid-value\\\"),l=t(\\\"es5-ext/string/random-uniq\\\"),c=t(\\\"d\\\"),u=t(\\\"es6-iterator/get\\\"),h=t(\\\"es6-iterator/for-of\\\"),f=t(\\\"es6-symbol\\\").toStringTag,p=t(\\\"./is-native-implemented\\\"),d=Array.isArray,g=Object.defineProperty,v=Object.prototype.hasOwnProperty,m=Object.getPrototypeOf;e.exports=n=function(){var t,e=arguments[0];if(!(this instanceof n))throw new TypeError(\\\"Constructor requires 'new'\\\");return t=p&&a&&WeakMap!==n?a(new WeakMap,m(this)):this,i(e)&&(d(e)||(e=u(e))),g(t,\\\"__weakMapData__\\\",c(\\\"c\\\",\\\"$weakMap$\\\"+l())),e?(h(e,function(e){s(e),t.set(e[0],e[1])}),t):t},p&&(a&&a(n,WeakMap),n.prototype=Object.create(WeakMap.prototype,{constructor:c(n)})),Object.defineProperties(n.prototype,{delete:c(function(t){return!!v.call(o(t),this.__weakMapData__)&&(delete t[this.__weakMapData__],!0)}),get:c(function(t){if(v.call(o(t),this.__weakMapData__))return t[this.__weakMapData__]}),has:c(function(t){return v.call(o(t),this.__weakMapData__)}),set:c(function(t,e){return g(o(t),this.__weakMapData__,c(\\\"c\\\",e)),this}),toString:c(function(){return\\\"[object WeakMap]\\\"})}),g(n.prototype,f,c(\\\"c\\\",\\\"WeakMap\\\"))},{\\\"./is-native-implemented\\\":320,d:151,\\\"es5-ext/object/is-value\\\":194,\\\"es5-ext/object/set-prototype-of\\\":200,\\\"es5-ext/object/valid-object\\\":204,\\\"es5-ext/object/valid-value\\\":205,\\\"es5-ext/string/random-uniq\\\":210,\\\"es6-iterator/for-of\\\":212,\\\"es6-iterator/get\\\":213,\\\"es6-symbol\\\":219}],322:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"ndarray\\\"),i=t(\\\"ndarray-ops\\\"),a=t(\\\"typedarray-pool\\\");e.exports=function(t){if(arguments.length<=1)throw new Error(\\\"gl-texture2d: Missing arguments for texture2d constructor\\\");o||function(t){o=[t.LINEAR,t.NEAREST_MIPMAP_LINEAR,t.LINEAR_MIPMAP_NEAREST,t.LINEAR_MIPMAP_NEAREST],s=[t.NEAREST,t.LINEAR,t.NEAREST_MIPMAP_NEAREST,t.NEAREST_MIPMAP_LINEAR,t.LINEAR_MIPMAP_NEAREST,t.LINEAR_MIPMAP_LINEAR],l=[t.REPEAT,t.CLAMP_TO_EDGE,t.MIRRORED_REPEAT]}(t);if(\\\"number\\\"==typeof arguments[1])return v(t,arguments[1],arguments[2],arguments[3]||t.RGBA,arguments[4]||t.UNSIGNED_BYTE);if(Array.isArray(arguments[1]))return v(t,0|arguments[1][0],0|arguments[1][1],arguments[2]||t.RGBA,arguments[3]||t.UNSIGNED_BYTE);if(\\\"object\\\"==typeof arguments[1]){var e=arguments[1],r=c(e)?e:e.raw;if(r)return function(t,e,r,n,i,a){var o=g(t);return t.texImage2D(t.TEXTURE_2D,0,i,i,a,e),new f(t,o,r,n,i,a)}(t,r,0|e.width,0|e.height,arguments[2]||t.RGBA,arguments[3]||t.UNSIGNED_BYTE);if(e.shape&&e.data&&e.stride)return function(t,e){var r=e.dtype,o=e.shape.slice(),s=t.getParameter(t.MAX_TEXTURE_SIZE);if(o[0]<0||o[0]>s||o[1]<0||o[1]>s)throw new Error(\\\"gl-texture2d: Invalid texture size\\\");var l=d(o,e.stride.slice()),c=0;\\\"float32\\\"===r?c=t.FLOAT:\\\"float64\\\"===r?(c=t.FLOAT,l=!1,r=\\\"float32\\\"):\\\"uint8\\\"===r?c=t.UNSIGNED_BYTE:(c=t.UNSIGNED_BYTE,l=!1,r=\\\"uint8\\\");var h,p,v=0;if(2===o.length)v=t.LUMINANCE,o=[o[0],o[1],1],e=n(e.data,o,[e.stride[0],e.stride[1],1],e.offset);else{if(3!==o.length)throw new Error(\\\"gl-texture2d: Invalid shape for texture\\\");if(1===o[2])v=t.ALPHA;else if(2===o[2])v=t.LUMINANCE_ALPHA;else if(3===o[2])v=t.RGB;else{if(4!==o[2])throw new Error(\\\"gl-texture2d: Invalid shape for pixel coords\\\");v=t.RGBA}}c!==t.FLOAT||t.getExtension(\\\"OES_texture_float\\\")||(c=t.UNSIGNED_BYTE,l=!1);var m=e.size;if(l)h=0===e.offset&&e.data.length===m?e.data:e.data.subarray(e.offset,e.offset+m);else{var y=[o[2],o[2]*o[0],1];p=a.malloc(m,r);var x=n(p,o,y,0);\\\"float32\\\"!==r&&\\\"float64\\\"!==r||c!==t.UNSIGNED_BYTE?i.assign(x,e):u(x,e),h=p.subarray(0,m)}var b=g(t);t.texImage2D(t.TEXTURE_2D,0,v,o[0],o[1],0,v,c,h),l||a.free(p);return new f(t,b,o[0],o[1],v,c)}(t,e)}throw new Error(\\\"gl-texture2d: Invalid arguments for texture2d constructor\\\")};var o=null,s=null,l=null;function c(t){return\\\"undefined\\\"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||\\\"undefined\\\"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||\\\"undefined\\\"!=typeof HTMLVideoElement&&t instanceof HTMLVideoElement||\\\"undefined\\\"!=typeof ImageData&&t instanceof ImageData}var u=function(t,e){i.muls(t,e,255)};function h(t,e,r){var n=t.gl,i=n.getParameter(n.MAX_TEXTURE_SIZE);if(e<0||e>i||r<0||r>i)throw new Error(\\\"gl-texture2d: Invalid texture size\\\");return t._shape=[e,r],t.bind(),n.texImage2D(n.TEXTURE_2D,0,t.format,e,r,0,t.format,t.type,null),t._mipLevels=[0],t}function f(t,e,r,n,i,a){this.gl=t,this.handle=e,this.format=i,this.type=a,this._shape=[r,n],this._mipLevels=[0],this._magFilter=t.NEAREST,this._minFilter=t.NEAREST,this._wrapS=t.CLAMP_TO_EDGE,this._wrapT=t.CLAMP_TO_EDGE,this._anisoSamples=1;var o=this,s=[this._wrapS,this._wrapT];Object.defineProperties(s,[{get:function(){return o._wrapS},set:function(t){return o.wrapS=t}},{get:function(){return o._wrapT},set:function(t){return o.wrapT=t}}]),this._wrapVector=s;var l=[this._shape[0],this._shape[1]];Object.defineProperties(l,[{get:function(){return o._shape[0]},set:function(t){return o.width=t}},{get:function(){return o._shape[1]},set:function(t){return o.height=t}}]),this._shapeVector=l}var p=f.prototype;function d(t,e){return 3===t.length?1===e[2]&&e[1]===t[0]*t[2]&&e[0]===t[2]:1===e[0]&&e[1]===t[0]}function g(t){var e=t.createTexture();return t.bindTexture(t.TEXTURE_2D,e),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),e}function v(t,e,r,n,i){var a=t.getParameter(t.MAX_TEXTURE_SIZE);if(e<0||e>a||r<0||r>a)throw new Error(\\\"gl-texture2d: Invalid texture shape\\\");if(i===t.FLOAT&&!t.getExtension(\\\"OES_texture_float\\\"))throw new Error(\\\"gl-texture2d: Floating point textures not supported on this platform\\\");var o=g(t);return t.texImage2D(t.TEXTURE_2D,0,n,e,r,0,n,i,null),new f(t,o,e,r,n,i)}Object.defineProperties(p,{minFilter:{get:function(){return this._minFilter},set:function(t){this.bind();var e=this.gl;if(this.type===e.FLOAT&&o.indexOf(t)>=0&&(e.getExtension(\\\"OES_texture_float_linear\\\")||(t=e.NEAREST)),s.indexOf(t)<0)throw new Error(\\\"gl-texture2d: Unknown filter mode \\\"+t);return e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t),this._minFilter=t}},magFilter:{get:function(){return this._magFilter},set:function(t){this.bind();var e=this.gl;if(this.type===e.FLOAT&&o.indexOf(t)>=0&&(e.getExtension(\\\"OES_texture_float_linear\\\")||(t=e.NEAREST)),s.indexOf(t)<0)throw new Error(\\\"gl-texture2d: Unknown filter mode \\\"+t);return e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t),this._magFilter=t}},mipSamples:{get:function(){return this._anisoSamples},set:function(t){var e=this._anisoSamples;if(this._anisoSamples=0|Math.max(t,1),e!==this._anisoSamples){var r=this.gl.getExtension(\\\"EXT_texture_filter_anisotropic\\\");r&&this.gl.texParameterf(this.gl.TEXTURE_2D,r.TEXTURE_MAX_ANISOTROPY_EXT,this._anisoSamples)}return this._anisoSamples}},wrapS:{get:function(){return this._wrapS},set:function(t){if(this.bind(),l.indexOf(t)<0)throw new Error(\\\"gl-texture2d: Unknown wrap mode \\\"+t);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,t),this._wrapS=t}},wrapT:{get:function(){return this._wrapT},set:function(t){if(this.bind(),l.indexOf(t)<0)throw new Error(\\\"gl-texture2d: Unknown wrap mode \\\"+t);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,t),this._wrapT=t}},wrap:{get:function(){return this._wrapVector},set:function(t){if(Array.isArray(t)||(t=[t,t]),2!==t.length)throw new Error(\\\"gl-texture2d: Must specify wrap mode for rows and columns\\\");for(var e=0;e<2;++e)if(l.indexOf(t[e])<0)throw new Error(\\\"gl-texture2d: Unknown wrap mode \\\"+t);this._wrapS=t[0],this._wrapT=t[1];var r=this.gl;return this.bind(),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,this._wrapS),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,this._wrapT),t}},shape:{get:function(){return this._shapeVector},set:function(t){if(Array.isArray(t)){if(2!==t.length)throw new Error(\\\"gl-texture2d: Invalid texture shape\\\")}else t=[0|t,0|t];return h(this,0|t[0],0|t[1]),[0|t[0],0|t[1]]}},width:{get:function(){return this._shape[0]},set:function(t){return h(this,t|=0,this._shape[1]),t}},height:{get:function(){return this._shape[1]},set:function(t){return t|=0,h(this,this._shape[0],t),t}}}),p.bind=function(t){var e=this.gl;return void 0!==t&&e.activeTexture(e.TEXTURE0+(0|t)),e.bindTexture(e.TEXTURE_2D,this.handle),void 0!==t?0|t:e.getParameter(e.ACTIVE_TEXTURE)-e.TEXTURE0},p.dispose=function(){this.gl.deleteTexture(this.handle)},p.generateMipmap=function(){this.bind(),this.gl.generateMipmap(this.gl.TEXTURE_2D);for(var t=Math.min(this._shape[0],this._shape[1]),e=0;t>0;++e,t>>>=1)this._mipLevels.indexOf(e)<0&&this._mipLevels.push(e)},p.setPixels=function(t,e,r,o){var s=this.gl;this.bind(),Array.isArray(e)?(o=r,r=0|e[1],e=0|e[0]):(e=e||0,r=r||0),o=o||0;var l=c(t)?t:t.raw;if(l){this._mipLevels.indexOf(o)<0?(s.texImage2D(s.TEXTURE_2D,0,this.format,this.format,this.type,l),this._mipLevels.push(o)):s.texSubImage2D(s.TEXTURE_2D,o,e,r,this.format,this.type,l)}else{if(!(t.shape&&t.stride&&t.data))throw new Error(\\\"gl-texture2d: Unsupported data type\\\");if(t.shape.length<2||e+t.shape[1]>this._shape[1]>>>o||r+t.shape[0]>this._shape[0]>>>o||e<0||r<0)throw new Error(\\\"gl-texture2d: Texture dimensions are out of bounds\\\");!function(t,e,r,o,s,l,c,h){var f=h.dtype,p=h.shape.slice();if(p.length<2||p.length>3)throw new Error(\\\"gl-texture2d: Invalid ndarray, must be 2d or 3d\\\");var g=0,v=0,m=d(p,h.stride.slice());\\\"float32\\\"===f?g=t.FLOAT:\\\"float64\\\"===f?(g=t.FLOAT,m=!1,f=\\\"float32\\\"):\\\"uint8\\\"===f?g=t.UNSIGNED_BYTE:(g=t.UNSIGNED_BYTE,m=!1,f=\\\"uint8\\\");if(2===p.length)v=t.LUMINANCE,p=[p[0],p[1],1],h=n(h.data,p,[h.stride[0],h.stride[1],1],h.offset);else{if(3!==p.length)throw new Error(\\\"gl-texture2d: Invalid shape for texture\\\");if(1===p[2])v=t.ALPHA;else if(2===p[2])v=t.LUMINANCE_ALPHA;else if(3===p[2])v=t.RGB;else{if(4!==p[2])throw new Error(\\\"gl-texture2d: Invalid shape for pixel coords\\\");v=t.RGBA}p[2]}v!==t.LUMINANCE&&v!==t.ALPHA||s!==t.LUMINANCE&&s!==t.ALPHA||(v=s);if(v!==s)throw new Error(\\\"gl-texture2d: Incompatible texture format for setPixels\\\");var y=h.size,x=c.indexOf(o)<0;x&&c.push(o);if(g===l&&m)0===h.offset&&h.data.length===y?x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,h.data):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,h.data):x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,h.data.subarray(h.offset,h.offset+y)):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,h.data.subarray(h.offset,h.offset+y));else{var b;b=l===t.FLOAT?a.mallocFloat32(y):a.mallocUint8(y);var _=n(b,p,[p[2],p[2]*p[0],1]);g===t.FLOAT&&l===t.UNSIGNED_BYTE?u(_,h):i.assign(_,h),x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,b.subarray(0,y)):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,b.subarray(0,y)),l===t.FLOAT?a.freeFloat32(b):a.freeUint8(b)}}(s,e,r,o,this.format,this.type,this._mipLevels,t)}}},{ndarray:450,\\\"ndarray-ops\\\":444,\\\"typedarray-pool\\\":545}],323:[function(t,e,r){(function(r){\\\"use strict\\\";var n=t(\\\"pick-by-alias\\\");function i(t){if(t.container)if(t.container==document.body)document.body.style.width||(t.canvas.width=t.width||t.pixelRatio*r.innerWidth),document.body.style.height||(t.canvas.height=t.height||t.pixelRatio*r.innerHeight);else{var e=t.container.getBoundingClientRect();t.canvas.width=t.width||e.right-e.left,t.canvas.height=t.height||e.bottom-e.top}}function a(t){return\\\"function\\\"==typeof t.getContext&&\\\"width\\\"in t&&\\\"height\\\"in t}function o(){var t=document.createElement(\\\"canvas\\\");return t.style.position=\\\"absolute\\\",t.style.top=0,t.style.left=0,t}e.exports=function(t){var e;if(t?\\\"string\\\"==typeof t&&(t={container:t}):t={},a(t)?t={container:t}:t=\\\"string\\\"==typeof(e=t).nodeName&&\\\"function\\\"==typeof e.appendChild&&\\\"function\\\"==typeof e.getBoundingClientRect?{container:t}:function(t){return\\\"function\\\"==typeof t.drawArrays||\\\"function\\\"==typeof t.drawElements}(t)?{gl:t}:n(t,{container:\\\"container target element el canvas holder parent parentNode wrapper use ref root node\\\",gl:\\\"gl context webgl glContext\\\",attrs:\\\"attributes attrs contextAttributes\\\",pixelRatio:\\\"pixelRatio pxRatio px ratio pxratio pixelratio\\\",width:\\\"w width\\\",height:\\\"h height\\\"},!0),t.pixelRatio||(t.pixelRatio=r.pixelRatio||1),t.gl)return t.gl;if(t.canvas&&(t.container=t.canvas.parentNode),t.container){if(\\\"string\\\"==typeof t.container){var s=document.querySelector(t.container);if(!s)throw Error(\\\"Element \\\"+t.container+\\\" is not found\\\");t.container=s}a(t.container)?(t.canvas=t.container,t.container=t.canvas.parentNode):t.canvas||(t.canvas=o(),t.container.appendChild(t.canvas),i(t))}else if(!t.canvas){if(\\\"undefined\\\"==typeof document)throw Error(\\\"Not DOM environment. Use headless-gl.\\\");t.container=document.body||document.documentElement,t.canvas=o(),t.container.appendChild(t.canvas),i(t)}if(!t.gl)try{t.gl=t.canvas.getContext(\\\"webgl\\\",t.attrs)}catch(e){try{t.gl=t.canvas.getContext(\\\"experimental-webgl\\\",t.attrs)}catch(e){t.gl=t.canvas.getContext(\\\"webgl-experimental\\\",t.attrs)}}return t.gl}}).call(this,\\\"undefined\\\"!=typeof global?global:\\\"undefined\\\"!=typeof self?self:\\\"undefined\\\"!=typeof window?window:{})},{\\\"pick-by-alias\\\":465}],324:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r){e?e.bind():t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null);var n=0|t.getParameter(t.MAX_VERTEX_ATTRIBS);if(r){if(r.length>n)throw new Error(\\\"gl-vao: Too many vertex attributes\\\");for(var i=0;i<r.length;++i){var a=r[i];if(a.buffer){var o=a.buffer,s=a.size||4,l=a.type||t.FLOAT,c=!!a.normalized,u=a.stride||0,h=a.offset||0;o.bind(),t.enableVertexAttribArray(i),t.vertexAttribPointer(i,s,l,c,u,h)}else{if(\\\"number\\\"==typeof a)t.vertexAttrib1f(i,a);else if(1===a.length)t.vertexAttrib1f(i,a[0]);else if(2===a.length)t.vertexAttrib2f(i,a[0],a[1]);else if(3===a.length)t.vertexAttrib3f(i,a[0],a[1],a[2]);else{if(4!==a.length)throw new Error(\\\"gl-vao: Invalid vertex attribute\\\");t.vertexAttrib4f(i,a[0],a[1],a[2],a[3])}t.disableVertexAttribArray(i)}}for(;i<n;++i)t.disableVertexAttribArray(i)}else for(t.bindBuffer(t.ARRAY_BUFFER,null),i=0;i<n;++i)t.disableVertexAttribArray(i)}},{}],325:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./do-bind.js\\\");function i(t){this.gl=t,this._elements=null,this._attributes=null,this._elementsType=t.UNSIGNED_SHORT}i.prototype.bind=function(){n(this.gl,this._elements,this._attributes)},i.prototype.update=function(t,e,r){this._elements=e,this._attributes=t,this._elementsType=r||this.gl.UNSIGNED_SHORT},i.prototype.dispose=function(){},i.prototype.unbind=function(){},i.prototype.draw=function(t,e,r){r=r||0;var n=this.gl;this._elements?n.drawElements(t,e,this._elementsType,r):n.drawArrays(t,r,e)},e.exports=function(t){return new i(t)}},{\\\"./do-bind.js\\\":324}],326:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./do-bind.js\\\");function i(t,e,r,n,i,a){this.location=t,this.dimension=e,this.a=r,this.b=n,this.c=i,this.d=a}function a(t,e,r){this.gl=t,this._ext=e,this.handle=r,this._attribs=[],this._useElements=!1,this._elementsType=t.UNSIGNED_SHORT}i.prototype.bind=function(t){switch(this.dimension){case 1:t.vertexAttrib1f(this.location,this.a);break;case 2:t.vertexAttrib2f(this.location,this.a,this.b);break;case 3:t.vertexAttrib3f(this.location,this.a,this.b,this.c);break;case 4:t.vertexAttrib4f(this.location,this.a,this.b,this.c,this.d)}},a.prototype.bind=function(){this._ext.bindVertexArrayOES(this.handle);for(var t=0;t<this._attribs.length;++t)this._attribs[t].bind(this.gl)},a.prototype.unbind=function(){this._ext.bindVertexArrayOES(null)},a.prototype.dispose=function(){this._ext.deleteVertexArrayOES(this.handle)},a.prototype.update=function(t,e,r){if(this.bind(),n(this.gl,e,t),this.unbind(),this._attribs.length=0,t)for(var a=0;a<t.length;++a){var o=t[a];\\\"number\\\"==typeof o?this._attribs.push(new i(a,1,o)):Array.isArray(o)&&this._attribs.push(new i(a,o.length,o[0],o[1],o[2],o[3]))}this._useElements=!!e,this._elementsType=r||this.gl.UNSIGNED_SHORT},a.prototype.draw=function(t,e,r){r=r||0;var n=this.gl;this._useElements?n.drawElements(t,e,this._elementsType,r):n.drawArrays(t,r,e)},e.exports=function(t,e){return new a(t,e,e.createVertexArrayOES())}},{\\\"./do-bind.js\\\":324}],327:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./lib/vao-native.js\\\"),i=t(\\\"./lib/vao-emulated.js\\\");function a(t){this.bindVertexArrayOES=t.bindVertexArray.bind(t),this.createVertexArrayOES=t.createVertexArray.bind(t),this.deleteVertexArrayOES=t.deleteVertexArray.bind(t)}e.exports=function(t,e,r,o){var s,l=t.createVertexArray?new a(t):t.getExtension(\\\"OES_vertex_array_object\\\");return(s=l?n(t,l):i(t)).update(e,r,o),s}},{\\\"./lib/vao-emulated.js\\\":325,\\\"./lib/vao-native.js\\\":326}],328:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t}},{}],329:[function(t,e,r){e.exports=function(t,e){var r=n(t[0],t[1],t[2]),o=n(e[0],e[1],e[2]);i(r,r),i(o,o);var s=a(r,o);return s>1?0:Math.acos(s)};var n=t(\\\"./fromValues\\\"),i=t(\\\"./normalize\\\"),a=t(\\\"./dot\\\")},{\\\"./dot\\\":339,\\\"./fromValues\\\":345,\\\"./normalize\\\":356}],330:[function(t,e,r){e.exports=function(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}},{}],331:[function(t,e,r){e.exports=function(t){var e=new Float32Array(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}},{}],332:[function(t,e,r){e.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}},{}],333:[function(t,e,r){e.exports=function(){var t=new Float32Array(3);return t[0]=0,t[1]=0,t[2]=0,t}},{}],334:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2];return t[0]=i*l-a*s,t[1]=a*o-n*l,t[2]=n*s-i*o,t}},{}],335:[function(t,e,r){e.exports=t(\\\"./distance\\\")},{\\\"./distance\\\":336}],336:[function(t,e,r){e.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(r*r+n*n+i*i)}},{}],337:[function(t,e,r){e.exports=t(\\\"./divide\\\")},{\\\"./divide\\\":338}],338:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t}},{}],339:[function(t,e,r){e.exports=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}},{}],340:[function(t,e,r){e.exports=1e-6},{}],341:[function(t,e,r){e.exports=function(t,e){var r=t[0],i=t[1],a=t[2],o=e[0],s=e[1],l=e[2];return Math.abs(r-o)<=n*Math.max(1,Math.abs(r),Math.abs(o))&&Math.abs(i-s)<=n*Math.max(1,Math.abs(i),Math.abs(s))&&Math.abs(a-l)<=n*Math.max(1,Math.abs(a),Math.abs(l))};var n=t(\\\"./epsilon\\\")},{\\\"./epsilon\\\":340}],342:[function(t,e,r){e.exports=function(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}},{}],343:[function(t,e,r){e.exports=function(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}},{}],344:[function(t,e,r){e.exports=function(t,e,r,i,a,o){var s,l;e||(e=3);r||(r=0);l=i?Math.min(i*e+r,t.length):t.length;for(s=r;s<l;s+=e)n[0]=t[s],n[1]=t[s+1],n[2]=t[s+2],a(n,n,o),t[s]=n[0],t[s+1]=n[1],t[s+2]=n[2];return t};var n=t(\\\"./create\\\")()},{\\\"./create\\\":333}],345:[function(t,e,r){e.exports=function(t,e,r){var n=new Float32Array(3);return n[0]=t,n[1]=e,n[2]=r,n}},{}],346:[function(t,e,r){e.exports={EPSILON:t(\\\"./epsilon\\\"),create:t(\\\"./create\\\"),clone:t(\\\"./clone\\\"),angle:t(\\\"./angle\\\"),fromValues:t(\\\"./fromValues\\\"),copy:t(\\\"./copy\\\"),set:t(\\\"./set\\\"),equals:t(\\\"./equals\\\"),exactEquals:t(\\\"./exactEquals\\\"),add:t(\\\"./add\\\"),subtract:t(\\\"./subtract\\\"),sub:t(\\\"./sub\\\"),multiply:t(\\\"./multiply\\\"),mul:t(\\\"./mul\\\"),divide:t(\\\"./divide\\\"),div:t(\\\"./div\\\"),min:t(\\\"./min\\\"),max:t(\\\"./max\\\"),floor:t(\\\"./floor\\\"),ceil:t(\\\"./ceil\\\"),round:t(\\\"./round\\\"),scale:t(\\\"./scale\\\"),scaleAndAdd:t(\\\"./scaleAndAdd\\\"),distance:t(\\\"./distance\\\"),dist:t(\\\"./dist\\\"),squaredDistance:t(\\\"./squaredDistance\\\"),sqrDist:t(\\\"./sqrDist\\\"),length:t(\\\"./length\\\"),len:t(\\\"./len\\\"),squaredLength:t(\\\"./squaredLength\\\"),sqrLen:t(\\\"./sqrLen\\\"),negate:t(\\\"./negate\\\"),inverse:t(\\\"./inverse\\\"),normalize:t(\\\"./normalize\\\"),dot:t(\\\"./dot\\\"),cross:t(\\\"./cross\\\"),lerp:t(\\\"./lerp\\\"),random:t(\\\"./random\\\"),transformMat4:t(\\\"./transformMat4\\\"),transformMat3:t(\\\"./transformMat3\\\"),transformQuat:t(\\\"./transformQuat\\\"),rotateX:t(\\\"./rotateX\\\"),rotateY:t(\\\"./rotateY\\\"),rotateZ:t(\\\"./rotateZ\\\"),forEach:t(\\\"./forEach\\\")}},{\\\"./add\\\":328,\\\"./angle\\\":329,\\\"./ceil\\\":330,\\\"./clone\\\":331,\\\"./copy\\\":332,\\\"./create\\\":333,\\\"./cross\\\":334,\\\"./dist\\\":335,\\\"./distance\\\":336,\\\"./div\\\":337,\\\"./divide\\\":338,\\\"./dot\\\":339,\\\"./epsilon\\\":340,\\\"./equals\\\":341,\\\"./exactEquals\\\":342,\\\"./floor\\\":343,\\\"./forEach\\\":344,\\\"./fromValues\\\":345,\\\"./inverse\\\":347,\\\"./len\\\":348,\\\"./length\\\":349,\\\"./lerp\\\":350,\\\"./max\\\":351,\\\"./min\\\":352,\\\"./mul\\\":353,\\\"./multiply\\\":354,\\\"./negate\\\":355,\\\"./normalize\\\":356,\\\"./random\\\":357,\\\"./rotateX\\\":358,\\\"./rotateY\\\":359,\\\"./rotateZ\\\":360,\\\"./round\\\":361,\\\"./scale\\\":362,\\\"./scaleAndAdd\\\":363,\\\"./set\\\":364,\\\"./sqrDist\\\":365,\\\"./sqrLen\\\":366,\\\"./squaredDistance\\\":367,\\\"./squaredLength\\\":368,\\\"./sub\\\":369,\\\"./subtract\\\":370,\\\"./transformMat3\\\":371,\\\"./transformMat4\\\":372,\\\"./transformQuat\\\":373}],347:[function(t,e,r){e.exports=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}},{}],348:[function(t,e,r){e.exports=t(\\\"./length\\\")},{\\\"./length\\\":349}],349:[function(t,e,r){e.exports=function(t){var e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}},{}],350:[function(t,e,r){e.exports=function(t,e,r,n){var i=e[0],a=e[1],o=e[2];return t[0]=i+n*(r[0]-i),t[1]=a+n*(r[1]-a),t[2]=o+n*(r[2]-o),t}},{}],351:[function(t,e,r){e.exports=function(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t}},{}],352:[function(t,e,r){e.exports=function(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t}},{}],353:[function(t,e,r){e.exports=t(\\\"./multiply\\\")},{\\\"./multiply\\\":354}],354:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t}},{}],355:[function(t,e,r){e.exports=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}},{}],356:[function(t,e,r){e.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=r*r+n*n+i*i;a>0&&(a=1/Math.sqrt(a),t[0]=e[0]*a,t[1]=e[1]*a,t[2]=e[2]*a);return t}},{}],357:[function(t,e,r){e.exports=function(t,e){e=e||1;var r=2*Math.random()*Math.PI,n=2*Math.random()-1,i=Math.sqrt(1-n*n)*e;return t[0]=Math.cos(r)*i,t[1]=Math.sin(r)*i,t[2]=n*e,t}},{}],358:[function(t,e,r){e.exports=function(t,e,r,n){var i=r[1],a=r[2],o=e[1]-i,s=e[2]-a,l=Math.sin(n),c=Math.cos(n);return t[0]=e[0],t[1]=i+o*c-s*l,t[2]=a+o*l+s*c,t}},{}],359:[function(t,e,r){e.exports=function(t,e,r,n){var i=r[0],a=r[2],o=e[0]-i,s=e[2]-a,l=Math.sin(n),c=Math.cos(n);return t[0]=i+s*l+o*c,t[1]=e[1],t[2]=a+s*c-o*l,t}},{}],360:[function(t,e,r){e.exports=function(t,e,r,n){var i=r[0],a=r[1],o=e[0]-i,s=e[1]-a,l=Math.sin(n),c=Math.cos(n);return t[0]=i+o*c-s*l,t[1]=a+o*l+s*c,t[2]=e[2],t}},{}],361:[function(t,e,r){e.exports=function(t,e){return t[0]=Math.round(e[0]),t[1]=Math.round(e[1]),t[2]=Math.round(e[2]),t}},{}],362:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t}},{}],363:[function(t,e,r){e.exports=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t}},{}],364:[function(t,e,r){e.exports=function(t,e,r,n){return t[0]=e,t[1]=r,t[2]=n,t}},{}],365:[function(t,e,r){e.exports=t(\\\"./squaredDistance\\\")},{\\\"./squaredDistance\\\":367}],366:[function(t,e,r){e.exports=t(\\\"./squaredLength\\\")},{\\\"./squaredLength\\\":368}],367:[function(t,e,r){e.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return r*r+n*n+i*i}},{}],368:[function(t,e,r){e.exports=function(t){var e=t[0],r=t[1],n=t[2];return e*e+r*r+n*n}},{}],369:[function(t,e,r){e.exports=t(\\\"./subtract\\\")},{\\\"./subtract\\\":370}],370:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t}},{}],371:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2];return t[0]=n*r[0]+i*r[3]+a*r[6],t[1]=n*r[1]+i*r[4]+a*r[7],t[2]=n*r[2]+i*r[5]+a*r[8],t}},{}],372:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[3]*n+r[7]*i+r[11]*a+r[15];return o=o||1,t[0]=(r[0]*n+r[4]*i+r[8]*a+r[12])/o,t[1]=(r[1]*n+r[5]*i+r[9]*a+r[13])/o,t[2]=(r[2]*n+r[6]*i+r[10]*a+r[14])/o,t}},{}],373:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2],c=r[3],u=c*n+s*a-l*i,h=c*i+l*n-o*a,f=c*a+o*i-s*n,p=-o*n-s*i-l*a;return t[0]=u*c+p*-o+h*-l-f*-s,t[1]=h*c+p*-s+f*-o-u*-l,t[2]=f*c+p*-l+u*-s-h*-o,t}},{}],374:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t}},{}],375:[function(t,e,r){e.exports=function(t){var e=new Float32Array(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}},{}],376:[function(t,e,r){e.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}},{}],377:[function(t,e,r){e.exports=function(){var t=new Float32Array(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t}},{}],378:[function(t,e,r){e.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2],a=e[3]-t[3];return Math.sqrt(r*r+n*n+i*i+a*a)}},{}],379:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t[3]=e[3]/r[3],t}},{}],380:[function(t,e,r){e.exports=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}},{}],381:[function(t,e,r){e.exports=function(t,e,r,n){var i=new Float32Array(4);return i[0]=t,i[1]=e,i[2]=r,i[3]=n,i}},{}],382:[function(t,e,r){e.exports={create:t(\\\"./create\\\"),clone:t(\\\"./clone\\\"),fromValues:t(\\\"./fromValues\\\"),copy:t(\\\"./copy\\\"),set:t(\\\"./set\\\"),add:t(\\\"./add\\\"),subtract:t(\\\"./subtract\\\"),multiply:t(\\\"./multiply\\\"),divide:t(\\\"./divide\\\"),min:t(\\\"./min\\\"),max:t(\\\"./max\\\"),scale:t(\\\"./scale\\\"),scaleAndAdd:t(\\\"./scaleAndAdd\\\"),distance:t(\\\"./distance\\\"),squaredDistance:t(\\\"./squaredDistance\\\"),length:t(\\\"./length\\\"),squaredLength:t(\\\"./squaredLength\\\"),negate:t(\\\"./negate\\\"),inverse:t(\\\"./inverse\\\"),normalize:t(\\\"./normalize\\\"),dot:t(\\\"./dot\\\"),lerp:t(\\\"./lerp\\\"),random:t(\\\"./random\\\"),transformMat4:t(\\\"./transformMat4\\\"),transformQuat:t(\\\"./transformQuat\\\")}},{\\\"./add\\\":374,\\\"./clone\\\":375,\\\"./copy\\\":376,\\\"./create\\\":377,\\\"./distance\\\":378,\\\"./divide\\\":379,\\\"./dot\\\":380,\\\"./fromValues\\\":381,\\\"./inverse\\\":383,\\\"./length\\\":384,\\\"./lerp\\\":385,\\\"./max\\\":386,\\\"./min\\\":387,\\\"./multiply\\\":388,\\\"./negate\\\":389,\\\"./normalize\\\":390,\\\"./random\\\":391,\\\"./scale\\\":392,\\\"./scaleAndAdd\\\":393,\\\"./set\\\":394,\\\"./squaredDistance\\\":395,\\\"./squaredLength\\\":396,\\\"./subtract\\\":397,\\\"./transformMat4\\\":398,\\\"./transformQuat\\\":399}],383:[function(t,e,r){e.exports=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t[3]=1/e[3],t}},{}],384:[function(t,e,r){e.exports=function(t){var e=t[0],r=t[1],n=t[2],i=t[3];return Math.sqrt(e*e+r*r+n*n+i*i)}},{}],385:[function(t,e,r){e.exports=function(t,e,r,n){var i=e[0],a=e[1],o=e[2],s=e[3];return t[0]=i+n*(r[0]-i),t[1]=a+n*(r[1]-a),t[2]=o+n*(r[2]-o),t[3]=s+n*(r[3]-s),t}},{}],386:[function(t,e,r){e.exports=function(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t[3]=Math.max(e[3],r[3]),t}},{}],387:[function(t,e,r){e.exports=function(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t[3]=Math.min(e[3],r[3]),t}},{}],388:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t[3]=e[3]*r[3],t}},{}],389:[function(t,e,r){e.exports=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t}},{}],390:[function(t,e,r){e.exports=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r*r+n*n+i*i+a*a;o>0&&(o=1/Math.sqrt(o),t[0]=r*o,t[1]=n*o,t[2]=i*o,t[3]=a*o);return t}},{}],391:[function(t,e,r){var n=t(\\\"./normalize\\\"),i=t(\\\"./scale\\\");e.exports=function(t,e){return e=e||1,t[0]=Math.random(),t[1]=Math.random(),t[2]=Math.random(),t[3]=Math.random(),n(t,t),i(t,t,e),t}},{\\\"./normalize\\\":390,\\\"./scale\\\":392}],392:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t}},{}],393:[function(t,e,r){e.exports=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t}},{}],394:[function(t,e,r){e.exports=function(t,e,r,n,i){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t}},{}],395:[function(t,e,r){e.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2],a=e[3]-t[3];return r*r+n*n+i*i+a*a}},{}],396:[function(t,e,r){e.exports=function(t){var e=t[0],r=t[1],n=t[2],i=t[3];return e*e+r*r+n*n+i*i}},{}],397:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t}},{}],398:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3];return t[0]=r[0]*n+r[4]*i+r[8]*a+r[12]*o,t[1]=r[1]*n+r[5]*i+r[9]*a+r[13]*o,t[2]=r[2]*n+r[6]*i+r[10]*a+r[14]*o,t[3]=r[3]*n+r[7]*i+r[11]*a+r[15]*o,t}},{}],399:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2],c=r[3],u=c*n+s*a-l*i,h=c*i+l*n-o*a,f=c*a+o*i-s*n,p=-o*n-s*i-l*a;return t[0]=u*c+p*-o+h*-l-f*-s,t[1]=h*c+p*-s+f*-o-u*-l,t[2]=f*c+p*-l+u*-s-h*-o,t[3]=e[3],t}},{}],400:[function(t,e,r){e.exports=function(t,e,r,a){return n[0]=a,n[1]=r,n[2]=e,n[3]=t,i[0]};var n=new Uint8Array(4),i=new Float32Array(n.buffer)},{}],401:[function(t,e,r){var n=t(\\\"glsl-tokenizer\\\"),i=t(\\\"atob-lite\\\");e.exports=function(t){for(var e=Array.isArray(t)?t:n(t),r=0;r<e.length;r++){var a=e[r];if(\\\"preprocessor\\\"===a.type){var o=a.data.match(/\\\\#define\\\\s+SHADER_NAME(_B64)?\\\\s+(.+)$/);if(o&&o[2]){var s=o[1],l=o[2];return(s?i(l):l).trim()}}}}},{\\\"atob-lite\\\":72,\\\"glsl-tokenizer\\\":408}],402:[function(t,e,r){e.exports=function(t){var e,r,k,T=0,A=0,M=l,S=[],E=[],C=1,L=0,P=0,O=!1,z=!1,I=\\\"\\\",D=a,R=n;\\\"300 es\\\"===(t=t||{}).version&&(D=s,R=o);return function(t){return E=[],null!==t?function(t){var r;T=0,k=(I+=t).length;for(;e=I[T],T<k;){switch(r=T,M){case u:T=U();break;case h:case f:T=j();break;case p:T=V();break;case d:T=G();break;case _:T=H();break;case g:T=Y();break;case c:T=W();break;case x:T=N();break;case l:T=B()}if(r!==T)switch(I[r]){case\\\"\\\\n\\\":L=0,++C;break;default:++L}}return A+=T,I=I.slice(T),E}(t.replace?t.replace(/\\\\r\\\\n/g,\\\"\\\\n\\\"):t):function(t){S.length&&F(S.join(\\\"\\\"));return M=b,F(\\\"(eof)\\\"),E}()};function F(t){t.length&&E.push({type:w[M],data:t,position:P,line:C,column:L})}function B(){return S=S.length?[]:S,\\\"/\\\"===r&&\\\"*\\\"===e?(P=A+T-1,M=u,r=e,T+1):\\\"/\\\"===r&&\\\"/\\\"===e?(P=A+T-1,M=h,r=e,T+1):\\\"#\\\"===e?(M=f,P=A+T,T):/\\\\s/.test(e)?(M=x,P=A+T,T):(O=/\\\\d/.test(e),z=/[^\\\\w_]/.test(e),P=A+T,M=O?d:z?p:c,T)}function N(){return/[^\\\\s]/g.test(e)?(F(S.join(\\\"\\\")),M=l,T):(S.push(e),r=e,T+1)}function j(){return\\\"\\\\r\\\"!==e&&\\\"\\\\n\\\"!==e||\\\"\\\\\\\\\\\"===r?(S.push(e),r=e,T+1):(F(S.join(\\\"\\\")),M=l,T)}function U(){return\\\"/\\\"===e&&\\\"*\\\"===r?(S.push(e),F(S.join(\\\"\\\")),M=l,T+1):(S.push(e),r=e,T+1)}function V(){if(\\\".\\\"===r&&/\\\\d/.test(e))return M=g,T;if(\\\"/\\\"===r&&\\\"*\\\"===e)return M=u,T;if(\\\"/\\\"===r&&\\\"/\\\"===e)return M=h,T;if(\\\".\\\"===e&&S.length){for(;q(S););return M=g,T}if(\\\";\\\"===e||\\\")\\\"===e||\\\"(\\\"===e){if(S.length)for(;q(S););return F(e),M=l,T+1}var t=2===S.length&&\\\"=\\\"!==e;if(/[\\\\w_\\\\d\\\\s]/.test(e)||t){for(;q(S););return M=l,T}return S.push(e),r=e,T+1}function q(t){for(var e,r,n=0;;){if(e=i.indexOf(t.slice(0,t.length+n).join(\\\"\\\")),r=i[e],-1===e){if(n--+t.length>0)continue;r=t.slice(0,1).join(\\\"\\\")}return F(r),P+=r.length,(S=S.slice(r.length)).length}}function H(){return/[^a-fA-F0-9]/.test(e)?(F(S.join(\\\"\\\")),M=l,T):(S.push(e),r=e,T+1)}function G(){return\\\".\\\"===e?(S.push(e),M=g,r=e,T+1):/[eE]/.test(e)?(S.push(e),M=g,r=e,T+1):\\\"x\\\"===e&&1===S.length&&\\\"0\\\"===S[0]?(M=_,S.push(e),r=e,T+1):/[^\\\\d]/.test(e)?(F(S.join(\\\"\\\")),M=l,T):(S.push(e),r=e,T+1)}function Y(){return\\\"f\\\"===e&&(S.push(e),r=e,T+=1),/[eE]/.test(e)?(S.push(e),r=e,T+1):\\\"-\\\"===e&&/[eE]/.test(r)?(S.push(e),r=e,T+1):/[^\\\\d]/.test(e)?(F(S.join(\\\"\\\")),M=l,T):(S.push(e),r=e,T+1)}function W(){if(/[^\\\\d\\\\w_]/.test(e)){var t=S.join(\\\"\\\");return M=R.indexOf(t)>-1?y:D.indexOf(t)>-1?m:v,F(S.join(\\\"\\\")),M=l,T}return S.push(e),r=e,T+1}};var n=t(\\\"./lib/literals\\\"),i=t(\\\"./lib/operators\\\"),a=t(\\\"./lib/builtins\\\"),o=t(\\\"./lib/literals-300es\\\"),s=t(\\\"./lib/builtins-300es\\\"),l=999,c=9999,u=0,h=1,f=2,p=3,d=4,g=5,v=6,m=7,y=8,x=9,b=10,_=11,w=[\\\"block-comment\\\",\\\"line-comment\\\",\\\"preprocessor\\\",\\\"operator\\\",\\\"integer\\\",\\\"float\\\",\\\"ident\\\",\\\"builtin\\\",\\\"keyword\\\",\\\"whitespace\\\",\\\"eof\\\",\\\"integer\\\"]},{\\\"./lib/builtins\\\":404,\\\"./lib/builtins-300es\\\":403,\\\"./lib/literals\\\":406,\\\"./lib/literals-300es\\\":405,\\\"./lib/operators\\\":407}],403:[function(t,e,r){var n=t(\\\"./builtins\\\");n=n.slice().filter(function(t){return!/^(gl\\\\_|texture)/.test(t)}),e.exports=n.concat([\\\"gl_VertexID\\\",\\\"gl_InstanceID\\\",\\\"gl_Position\\\",\\\"gl_PointSize\\\",\\\"gl_FragCoord\\\",\\\"gl_FrontFacing\\\",\\\"gl_FragDepth\\\",\\\"gl_PointCoord\\\",\\\"gl_MaxVertexAttribs\\\",\\\"gl_MaxVertexUniformVectors\\\",\\\"gl_MaxVertexOutputVectors\\\",\\\"gl_MaxFragmentInputVectors\\\",\\\"gl_MaxVertexTextureImageUnits\\\",\\\"gl_MaxCombinedTextureImageUnits\\\",\\\"gl_MaxTextureImageUnits\\\",\\\"gl_MaxFragmentUniformVectors\\\",\\\"gl_MaxDrawBuffers\\\",\\\"gl_MinProgramTexelOffset\\\",\\\"gl_MaxProgramTexelOffset\\\",\\\"gl_DepthRangeParameters\\\",\\\"gl_DepthRange\\\",\\\"trunc\\\",\\\"round\\\",\\\"roundEven\\\",\\\"isnan\\\",\\\"isinf\\\",\\\"floatBitsToInt\\\",\\\"floatBitsToUint\\\",\\\"intBitsToFloat\\\",\\\"uintBitsToFloat\\\",\\\"packSnorm2x16\\\",\\\"unpackSnorm2x16\\\",\\\"packUnorm2x16\\\",\\\"unpackUnorm2x16\\\",\\\"packHalf2x16\\\",\\\"unpackHalf2x16\\\",\\\"outerProduct\\\",\\\"transpose\\\",\\\"determinant\\\",\\\"inverse\\\",\\\"texture\\\",\\\"textureSize\\\",\\\"textureProj\\\",\\\"textureLod\\\",\\\"textureOffset\\\",\\\"texelFetch\\\",\\\"texelFetchOffset\\\",\\\"textureProjOffset\\\",\\\"textureLodOffset\\\",\\\"textureProjLod\\\",\\\"textureProjLodOffset\\\",\\\"textureGrad\\\",\\\"textureGradOffset\\\",\\\"textureProjGrad\\\",\\\"textureProjGradOffset\\\"])},{\\\"./builtins\\\":404}],404:[function(t,e,r){e.exports=[\\\"abs\\\",\\\"acos\\\",\\\"all\\\",\\\"any\\\",\\\"asin\\\",\\\"atan\\\",\\\"ceil\\\",\\\"clamp\\\",\\\"cos\\\",\\\"cross\\\",\\\"dFdx\\\",\\\"dFdy\\\",\\\"degrees\\\",\\\"distance\\\",\\\"dot\\\",\\\"equal\\\",\\\"exp\\\",\\\"exp2\\\",\\\"faceforward\\\",\\\"floor\\\",\\\"fract\\\",\\\"gl_BackColor\\\",\\\"gl_BackLightModelProduct\\\",\\\"gl_BackLightProduct\\\",\\\"gl_BackMaterial\\\",\\\"gl_BackSecondaryColor\\\",\\\"gl_ClipPlane\\\",\\\"gl_ClipVertex\\\",\\\"gl_Color\\\",\\\"gl_DepthRange\\\",\\\"gl_DepthRangeParameters\\\",\\\"gl_EyePlaneQ\\\",\\\"gl_EyePlaneR\\\",\\\"gl_EyePlaneS\\\",\\\"gl_EyePlaneT\\\",\\\"gl_Fog\\\",\\\"gl_FogCoord\\\",\\\"gl_FogFragCoord\\\",\\\"gl_FogParameters\\\",\\\"gl_FragColor\\\",\\\"gl_FragCoord\\\",\\\"gl_FragData\\\",\\\"gl_FragDepth\\\",\\\"gl_FragDepthEXT\\\",\\\"gl_FrontColor\\\",\\\"gl_FrontFacing\\\",\\\"gl_FrontLightModelProduct\\\",\\\"gl_FrontLightProduct\\\",\\\"gl_FrontMaterial\\\",\\\"gl_FrontSecondaryColor\\\",\\\"gl_LightModel\\\",\\\"gl_LightModelParameters\\\",\\\"gl_LightModelProducts\\\",\\\"gl_LightProducts\\\",\\\"gl_LightSource\\\",\\\"gl_LightSourceParameters\\\",\\\"gl_MaterialParameters\\\",\\\"gl_MaxClipPlanes\\\",\\\"gl_MaxCombinedTextureImageUnits\\\",\\\"gl_MaxDrawBuffers\\\",\\\"gl_MaxFragmentUniformComponents\\\",\\\"gl_MaxLights\\\",\\\"gl_MaxTextureCoords\\\",\\\"gl_MaxTextureImageUnits\\\",\\\"gl_MaxTextureUnits\\\",\\\"gl_MaxVaryingFloats\\\",\\\"gl_MaxVertexAttribs\\\",\\\"gl_MaxVertexTextureImageUnits\\\",\\\"gl_MaxVertexUniformComponents\\\",\\\"gl_ModelViewMatrix\\\",\\\"gl_ModelViewMatrixInverse\\\",\\\"gl_ModelViewMatrixInverseTranspose\\\",\\\"gl_ModelViewMatrixTranspose\\\",\\\"gl_ModelViewProjectionMatrix\\\",\\\"gl_ModelViewProjectionMatrixInverse\\\",\\\"gl_ModelViewProjectionMatrixInverseTranspose\\\",\\\"gl_ModelViewProjectionMatrixTranspose\\\",\\\"gl_MultiTexCoord0\\\",\\\"gl_MultiTexCoord1\\\",\\\"gl_MultiTexCoord2\\\",\\\"gl_MultiTexCoord3\\\",\\\"gl_MultiTexCoord4\\\",\\\"gl_MultiTexCoord5\\\",\\\"gl_MultiTexCoord6\\\",\\\"gl_MultiTexCoord7\\\",\\\"gl_Normal\\\",\\\"gl_NormalMatrix\\\",\\\"gl_NormalScale\\\",\\\"gl_ObjectPlaneQ\\\",\\\"gl_ObjectPlaneR\\\",\\\"gl_ObjectPlaneS\\\",\\\"gl_ObjectPlaneT\\\",\\\"gl_Point\\\",\\\"gl_PointCoord\\\",\\\"gl_PointParameters\\\",\\\"gl_PointSize\\\",\\\"gl_Position\\\",\\\"gl_ProjectionMatrix\\\",\\\"gl_ProjectionMatrixInverse\\\",\\\"gl_ProjectionMatrixInverseTranspose\\\",\\\"gl_ProjectionMatrixTranspose\\\",\\\"gl_SecondaryColor\\\",\\\"gl_TexCoord\\\",\\\"gl_TextureEnvColor\\\",\\\"gl_TextureMatrix\\\",\\\"gl_TextureMatrixInverse\\\",\\\"gl_TextureMatrixInverseTranspose\\\",\\\"gl_TextureMatrixTranspose\\\",\\\"gl_Vertex\\\",\\\"greaterThan\\\",\\\"greaterThanEqual\\\",\\\"inversesqrt\\\",\\\"length\\\",\\\"lessThan\\\",\\\"lessThanEqual\\\",\\\"log\\\",\\\"log2\\\",\\\"matrixCompMult\\\",\\\"max\\\",\\\"min\\\",\\\"mix\\\",\\\"mod\\\",\\\"normalize\\\",\\\"not\\\",\\\"notEqual\\\",\\\"pow\\\",\\\"radians\\\",\\\"reflect\\\",\\\"refract\\\",\\\"sign\\\",\\\"sin\\\",\\\"smoothstep\\\",\\\"sqrt\\\",\\\"step\\\",\\\"tan\\\",\\\"texture2D\\\",\\\"texture2DLod\\\",\\\"texture2DProj\\\",\\\"texture2DProjLod\\\",\\\"textureCube\\\",\\\"textureCubeLod\\\",\\\"texture2DLodEXT\\\",\\\"texture2DProjLodEXT\\\",\\\"textureCubeLodEXT\\\",\\\"texture2DGradEXT\\\",\\\"texture2DProjGradEXT\\\",\\\"textureCubeGradEXT\\\"]},{}],405:[function(t,e,r){var n=t(\\\"./literals\\\");e.exports=n.slice().concat([\\\"layout\\\",\\\"centroid\\\",\\\"smooth\\\",\\\"case\\\",\\\"mat2x2\\\",\\\"mat2x3\\\",\\\"mat2x4\\\",\\\"mat3x2\\\",\\\"mat3x3\\\",\\\"mat3x4\\\",\\\"mat4x2\\\",\\\"mat4x3\\\",\\\"mat4x4\\\",\\\"uint\\\",\\\"uvec2\\\",\\\"uvec3\\\",\\\"uvec4\\\",\\\"samplerCubeShadow\\\",\\\"sampler2DArray\\\",\\\"sampler2DArrayShadow\\\",\\\"isampler2D\\\",\\\"isampler3D\\\",\\\"isamplerCube\\\",\\\"isampler2DArray\\\",\\\"usampler2D\\\",\\\"usampler3D\\\",\\\"usamplerCube\\\",\\\"usampler2DArray\\\",\\\"coherent\\\",\\\"restrict\\\",\\\"readonly\\\",\\\"writeonly\\\",\\\"resource\\\",\\\"atomic_uint\\\",\\\"noperspective\\\",\\\"patch\\\",\\\"sample\\\",\\\"subroutine\\\",\\\"common\\\",\\\"partition\\\",\\\"active\\\",\\\"filter\\\",\\\"image1D\\\",\\\"image2D\\\",\\\"image3D\\\",\\\"imageCube\\\",\\\"iimage1D\\\",\\\"iimage2D\\\",\\\"iimage3D\\\",\\\"iimageCube\\\",\\\"uimage1D\\\",\\\"uimage2D\\\",\\\"uimage3D\\\",\\\"uimageCube\\\",\\\"image1DArray\\\",\\\"image2DArray\\\",\\\"iimage1DArray\\\",\\\"iimage2DArray\\\",\\\"uimage1DArray\\\",\\\"uimage2DArray\\\",\\\"image1DShadow\\\",\\\"image2DShadow\\\",\\\"image1DArrayShadow\\\",\\\"image2DArrayShadow\\\",\\\"imageBuffer\\\",\\\"iimageBuffer\\\",\\\"uimageBuffer\\\",\\\"sampler1DArray\\\",\\\"sampler1DArrayShadow\\\",\\\"isampler1D\\\",\\\"isampler1DArray\\\",\\\"usampler1D\\\",\\\"usampler1DArray\\\",\\\"isampler2DRect\\\",\\\"usampler2DRect\\\",\\\"samplerBuffer\\\",\\\"isamplerBuffer\\\",\\\"usamplerBuffer\\\",\\\"sampler2DMS\\\",\\\"isampler2DMS\\\",\\\"usampler2DMS\\\",\\\"sampler2DMSArray\\\",\\\"isampler2DMSArray\\\",\\\"usampler2DMSArray\\\"])},{\\\"./literals\\\":406}],406:[function(t,e,r){e.exports=[\\\"precision\\\",\\\"highp\\\",\\\"mediump\\\",\\\"lowp\\\",\\\"attribute\\\",\\\"const\\\",\\\"uniform\\\",\\\"varying\\\",\\\"break\\\",\\\"continue\\\",\\\"do\\\",\\\"for\\\",\\\"while\\\",\\\"if\\\",\\\"else\\\",\\\"in\\\",\\\"out\\\",\\\"inout\\\",\\\"float\\\",\\\"int\\\",\\\"void\\\",\\\"bool\\\",\\\"true\\\",\\\"false\\\",\\\"discard\\\",\\\"return\\\",\\\"mat2\\\",\\\"mat3\\\",\\\"mat4\\\",\\\"vec2\\\",\\\"vec3\\\",\\\"vec4\\\",\\\"ivec2\\\",\\\"ivec3\\\",\\\"ivec4\\\",\\\"bvec2\\\",\\\"bvec3\\\",\\\"bvec4\\\",\\\"sampler1D\\\",\\\"sampler2D\\\",\\\"sampler3D\\\",\\\"samplerCube\\\",\\\"sampler1DShadow\\\",\\\"sampler2DShadow\\\",\\\"struct\\\",\\\"asm\\\",\\\"class\\\",\\\"union\\\",\\\"enum\\\",\\\"typedef\\\",\\\"template\\\",\\\"this\\\",\\\"packed\\\",\\\"goto\\\",\\\"switch\\\",\\\"default\\\",\\\"inline\\\",\\\"noinline\\\",\\\"volatile\\\",\\\"public\\\",\\\"static\\\",\\\"extern\\\",\\\"external\\\",\\\"interface\\\",\\\"long\\\",\\\"short\\\",\\\"double\\\",\\\"half\\\",\\\"fixed\\\",\\\"unsigned\\\",\\\"input\\\",\\\"output\\\",\\\"hvec2\\\",\\\"hvec3\\\",\\\"hvec4\\\",\\\"dvec2\\\",\\\"dvec3\\\",\\\"dvec4\\\",\\\"fvec2\\\",\\\"fvec3\\\",\\\"fvec4\\\",\\\"sampler2DRect\\\",\\\"sampler3DRect\\\",\\\"sampler2DRectShadow\\\",\\\"sizeof\\\",\\\"cast\\\",\\\"namespace\\\",\\\"using\\\"]},{}],407:[function(t,e,r){e.exports=[\\\"<<=\\\",\\\">>=\\\",\\\"++\\\",\\\"--\\\",\\\"<<\\\",\\\">>\\\",\\\"<=\\\",\\\">=\\\",\\\"==\\\",\\\"!=\\\",\\\"&&\\\",\\\"||\\\",\\\"+=\\\",\\\"-=\\\",\\\"*=\\\",\\\"/=\\\",\\\"%=\\\",\\\"&=\\\",\\\"^^\\\",\\\"^=\\\",\\\"|=\\\",\\\"(\\\",\\\")\\\",\\\"[\\\",\\\"]\\\",\\\".\\\",\\\"!\\\",\\\"~\\\",\\\"*\\\",\\\"/\\\",\\\"%\\\",\\\"+\\\",\\\"-\\\",\\\"<\\\",\\\">\\\",\\\"&\\\",\\\"^\\\",\\\"|\\\",\\\"?\\\",\\\":\\\",\\\"=\\\",\\\",\\\",\\\";\\\",\\\"{\\\",\\\"}\\\"]},{}],408:[function(t,e,r){var n=t(\\\"./index\\\");e.exports=function(t,e){var r=n(e),i=[];return i=(i=i.concat(r(t))).concat(r(null))}},{\\\"./index\\\":402}],409:[function(t,e,r){e.exports=function(t){\\\"string\\\"==typeof t&&(t=[t]);for(var e=[].slice.call(arguments,1),r=[],n=0;n<t.length-1;n++)r.push(t[n],e[n]||\\\"\\\");return r.push(t[n]),r.join(\\\"\\\")}},{}],410:[function(t,e,r){(function(r){\\\"use strict\\\";var n,i=t(\\\"is-browser\\\");n=\\\"function\\\"==typeof r.matchMedia?!r.matchMedia(\\\"(hover: none)\\\").matches:i,e.exports=n}).call(this,\\\"undefined\\\"!=typeof global?global:\\\"undefined\\\"!=typeof self?self:\\\"undefined\\\"!=typeof window?window:{})},{\\\"is-browser\\\":417}],411:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"is-browser\\\");e.exports=n&&function(){var t=!1;try{var e=Object.defineProperty({},\\\"passive\\\",{get:function(){t=!0}});window.addEventListener(\\\"test\\\",null,e),window.removeEventListener(\\\"test\\\",null,e)}catch(e){t=!1}return t}()},{\\\"is-browser\\\":417}],412:[function(t,e,r){r.read=function(t,e,r,n,i){var a,o,s=8*i-n-1,l=(1<<s)-1,c=l>>1,u=-7,h=r?i-1:0,f=r?-1:1,p=t[e+h];for(h+=f,a=p&(1<<-u)-1,p>>=-u,u+=s;u>0;a=256*a+t[e+h],h+=f,u-=8);for(o=a&(1<<-u)-1,a>>=-u,u+=n;u>0;o=256*o+t[e+h],h+=f,u-=8);if(0===a)a=1-c;else{if(a===l)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,n),a-=c}return(p?-1:1)*o*Math.pow(2,a-n)},r.write=function(t,e,r,n,i,a){var o,s,l,c=8*a-i-1,u=(1<<c)-1,h=u>>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:a-1,d=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=u):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+h>=1?f/l:f*Math.pow(2,1-h))*l>=2&&(o++,l/=2),o+h>=u?(s=0,o=u):o+h>=1?(s=(e*l-1)*Math.pow(2,i),o+=h):(s=e*Math.pow(2,h-1)*Math.pow(2,i),o=0));i>=8;t[r+p]=255&s,p+=d,s/=256,i-=8);for(o=o<<i|s,c+=i;c>0;t[r+p]=255&o,p+=d,o/=256,c-=8);t[r+p-d]|=128*g}},{}],413:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){var r=t.length;if(0===r)throw new Error(\\\"Must have at least d+1 points\\\");var i=t[0].length;if(r<=i)throw new Error(\\\"Must input at least d+1 points\\\");var o=t.slice(0,i+1),s=n.apply(void 0,o);if(0===s)throw new Error(\\\"Input not in general position\\\");for(var l=new Array(i+1),u=0;u<=i;++u)l[u]=u;s<0&&(l[0]=1,l[1]=0);for(var h=new a(l,new Array(i+1),!1),f=h.adjacent,p=new Array(i+2),u=0;u<=i;++u){for(var d=l.slice(),g=0;g<=i;++g)g===u&&(d[g]=-1);var v=d[0];d[0]=d[1],d[1]=v;var m=new a(d,new Array(i+1),!0);f[u]=m,p[u]=m}p[i+1]=h;for(var u=0;u<=i;++u)for(var d=f[u].vertices,y=f[u].adjacent,g=0;g<=i;++g){var x=d[g];if(x<0)y[g]=h;else for(var b=0;b<=i;++b)f[b].vertices.indexOf(x)<0&&(y[g]=f[b])}for(var _=new c(i,o,p),w=!!e,u=i+1;u<r;++u)_.insert(t[u],w);return _.boundary()};var n=t(\\\"robust-orientation\\\"),i=t(\\\"simplicial-complex\\\").compareCells;function a(t,e,r){this.vertices=t,this.adjacent=e,this.boundary=r,this.lastVisited=-1}function o(t,e,r){this.vertices=t,this.cell=e,this.index=r}function s(t,e){return i(t.vertices,e.vertices)}a.prototype.flip=function(){var t=this.vertices[0];this.vertices[0]=this.vertices[1],this.vertices[1]=t;var e=this.adjacent[0];this.adjacent[0]=this.adjacent[1],this.adjacent[1]=e};var l=[];function c(t,e,r){this.dimension=t,this.vertices=e,this.simplices=r,this.interior=r.filter(function(t){return!t.boundary}),this.tuple=new Array(t+1);for(var i=0;i<=t;++i)this.tuple[i]=this.vertices[i];var a=l[t];a||(a=l[t]=function(t){for(var e=[\\\"function orient(){var tuple=this.tuple;return test(\\\"],r=0;r<=t;++r)r>0&&e.push(\\\",\\\"),e.push(\\\"tuple[\\\",r,\\\"]\\\");e.push(\\\")}return orient\\\");var i=new Function(\\\"test\\\",e.join(\\\"\\\")),a=n[t+1];return a||(a=n),i(a)}(t)),this.orient=a}var u=c.prototype;u.handleBoundaryDegeneracy=function(t,e){var r=this.dimension,n=this.vertices.length-1,i=this.tuple,a=this.vertices,o=[t];for(t.lastVisited=-n;o.length>0;){(t=o.pop()).vertices;for(var s=t.adjacent,l=0;l<=r;++l){var c=s[l];if(c.boundary&&!(c.lastVisited<=-n)){for(var u=c.vertices,h=0;h<=r;++h){var f=u[h];i[h]=f<0?e:a[f]}var p=this.orient();if(p>0)return c;c.lastVisited=-n,0===p&&o.push(c)}}}return null},u.walk=function(t,e){var r=this.vertices.length-1,n=this.dimension,i=this.vertices,a=this.tuple,o=e?this.interior.length*Math.random()|0:this.interior.length-1,s=this.interior[o];t:for(;!s.boundary;){for(var l=s.vertices,c=s.adjacent,u=0;u<=n;++u)a[u]=i[l[u]];s.lastVisited=r;for(u=0;u<=n;++u){var h=c[u];if(!(h.lastVisited>=r)){var f=a[u];a[u]=t;var p=this.orient();if(a[u]=f,p<0){s=h;continue t}h.boundary?h.lastVisited=-r:h.lastVisited=r}}return}return s},u.addPeaks=function(t,e){var r=this.vertices.length-1,n=this.dimension,i=this.vertices,l=this.tuple,c=this.interior,u=this.simplices,h=[e];e.lastVisited=r,e.vertices[e.vertices.indexOf(-1)]=r,e.boundary=!1,c.push(e);for(var f=[];h.length>0;){var p=(e=h.pop()).vertices,d=e.adjacent,g=p.indexOf(r);if(!(g<0))for(var v=0;v<=n;++v)if(v!==g){var m=d[v];if(m.boundary&&!(m.lastVisited>=r)){var y=m.vertices;if(m.lastVisited!==-r){for(var x=0,b=0;b<=n;++b)y[b]<0?(x=b,l[b]=t):l[b]=i[y[b]];if(this.orient()>0){y[x]=r,m.boundary=!1,c.push(m),h.push(m),m.lastVisited=r;continue}m.lastVisited=-r}var _=m.adjacent,w=p.slice(),k=d.slice(),T=new a(w,k,!0);u.push(T);var A=_.indexOf(e);if(!(A<0)){_[A]=T,k[g]=m,w[v]=-1,k[v]=e,d[v]=T,T.flip();for(b=0;b<=n;++b){var M=w[b];if(!(M<0||M===r)){for(var S=new Array(n-1),E=0,C=0;C<=n;++C){var L=w[C];L<0||C===b||(S[E++]=L)}f.push(new o(S,T,b))}}}}}}f.sort(s);for(v=0;v+1<f.length;v+=2){var P=f[v],O=f[v+1],z=P.index,I=O.index;z<0||I<0||(P.cell.adjacent[P.index]=O.cell,O.cell.adjacent[O.index]=P.cell)}},u.insert=function(t,e){var r=this.vertices;r.push(t);var n=this.walk(t,e);if(n){for(var i=this.dimension,a=this.tuple,o=0;o<=i;++o){var s=n.vertices[o];a[o]=s<0?t:r[s]}var l=this.orient(a);l<0||(0!==l||(n=this.handleBoundaryDegeneracy(n,t)))&&this.addPeaks(t,n)}},u.boundary=function(){for(var t=this.dimension,e=[],r=this.simplices,n=r.length,i=0;i<n;++i){var a=r[i];if(a.boundary){for(var o=new Array(t),s=a.vertices,l=0,c=0,u=0;u<=t;++u)s[u]>=0?o[l++]=s[u]:c=1&u;if(c===(1&t)){var h=o[0];o[0]=o[1],o[1]=h}e.push(o)}}return e}},{\\\"robust-orientation\\\":510,\\\"simplicial-complex\\\":520}],414:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"binary-search-bounds\\\"),i=0,a=1;function o(t,e,r,n,i){this.mid=t,this.left=e,this.right=r,this.leftPoints=n,this.rightPoints=i,this.count=(e?e.count:0)+(r?r.count:0)+n.length}e.exports=function(t){if(!t||0===t.length)return new x(null);return new x(y(t))};var s=o.prototype;function l(t,e){t.mid=e.mid,t.left=e.left,t.right=e.right,t.leftPoints=e.leftPoints,t.rightPoints=e.rightPoints,t.count=e.count}function c(t,e){var r=y(e);t.mid=r.mid,t.left=r.left,t.right=r.right,t.leftPoints=r.leftPoints,t.rightPoints=r.rightPoints,t.count=r.count}function u(t,e){var r=t.intervals([]);r.push(e),c(t,r)}function h(t,e){var r=t.intervals([]),n=r.indexOf(e);return n<0?i:(r.splice(n,1),c(t,r),a)}function f(t,e,r){for(var n=0;n<t.length&&t[n][0]<=e;++n){var i=r(t[n]);if(i)return i}}function p(t,e,r){for(var n=t.length-1;n>=0&&t[n][1]>=e;--n){var i=r(t[n]);if(i)return i}}function d(t,e){for(var r=0;r<t.length;++r){var n=e(t[r]);if(n)return n}}function g(t,e){return t-e}function v(t,e){var r=t[0]-e[0];return r||t[1]-e[1]}function m(t,e){var r=t[1]-e[1];return r||t[0]-e[0]}function y(t){if(0===t.length)return null;for(var e=[],r=0;r<t.length;++r)e.push(t[r][0],t[r][1]);e.sort(g);var n=e[e.length>>1],i=[],a=[],s=[];for(r=0;r<t.length;++r){var l=t[r];l[1]<n?i.push(l):n<l[0]?a.push(l):s.push(l)}var c=s,u=s.slice();return c.sort(v),u.sort(m),new o(n,y(i),y(a),c,u)}function x(t){this.root=t}s.intervals=function(t){return t.push.apply(t,this.leftPoints),this.left&&this.left.intervals(t),this.right&&this.right.intervals(t),t},s.insert=function(t){var e=this.count-this.leftPoints.length;if(this.count+=1,t[1]<this.mid)this.left?4*(this.left.count+1)>3*(e+1)?u(this,t):this.left.insert(t):this.left=y([t]);else if(t[0]>this.mid)this.right?4*(this.right.count+1)>3*(e+1)?u(this,t):this.right.insert(t):this.right=y([t]);else{var r=n.ge(this.leftPoints,t,v),i=n.ge(this.rightPoints,t,m);this.leftPoints.splice(r,0,t),this.rightPoints.splice(i,0,t)}},s.remove=function(t){var e=this.count-this.leftPoints;if(t[1]<this.mid)return this.left?4*(this.right?this.right.count:0)>3*(e-1)?h(this,t):2===(c=this.left.remove(t))?(this.left=null,this.count-=1,a):(c===a&&(this.count-=1),c):i;if(t[0]>this.mid)return this.right?4*(this.left?this.left.count:0)>3*(e-1)?h(this,t):2===(c=this.right.remove(t))?(this.right=null,this.count-=1,a):(c===a&&(this.count-=1),c):i;if(1===this.count)return this.leftPoints[0]===t?2:i;if(1===this.leftPoints.length&&this.leftPoints[0]===t){if(this.left&&this.right){for(var r=this,o=this.left;o.right;)r=o,o=o.right;if(r===this)o.right=this.right;else{var s=this.left,c=this.right;r.count-=o.count,r.right=o.left,o.left=s,o.right=c}l(this,o),this.count=(this.left?this.left.count:0)+(this.right?this.right.count:0)+this.leftPoints.length}else this.left?l(this,this.left):l(this,this.right);return a}for(s=n.ge(this.leftPoints,t,v);s<this.leftPoints.length&&this.leftPoints[s][0]===t[0];++s)if(this.leftPoints[s]===t){this.count-=1,this.leftPoints.splice(s,1);for(c=n.ge(this.rightPoints,t,m);c<this.rightPoints.length&&this.rightPoints[c][1]===t[1];++c)if(this.rightPoints[c]===t)return this.rightPoints.splice(c,1),a}return i},s.queryPoint=function(t,e){if(t<this.mid){if(this.left)if(r=this.left.queryPoint(t,e))return r;return f(this.leftPoints,t,e)}if(t>this.mid){var r;if(this.right)if(r=this.right.queryPoint(t,e))return r;return p(this.rightPoints,t,e)}return d(this.leftPoints,e)},s.queryInterval=function(t,e,r){var n;if(t<this.mid&&this.left&&(n=this.left.queryInterval(t,e,r)))return n;if(e>this.mid&&this.right&&(n=this.right.queryInterval(t,e,r)))return n;return e<this.mid?f(this.leftPoints,e,r):t>this.mid?p(this.rightPoints,t,r):d(this.leftPoints,r)};var b=x.prototype;b.insert=function(t){this.root?this.root.insert(t):this.root=new o(t[0],null,null,[t],[t])},b.remove=function(t){if(this.root){var e=this.root.remove(t);return 2===e&&(this.root=null),e!==i}return!1},b.queryPoint=function(t,e){if(this.root)return this.root.queryPoint(t,e)},b.queryInterval=function(t,e,r){if(t<=e&&this.root)return this.root.queryInterval(t,e,r)},Object.defineProperty(b,\\\"count\\\",{get:function(){return this.root?this.root.count:0}}),Object.defineProperty(b,\\\"intervals\\\",{get:function(){return this.root?this.root.intervals([]):[]}})},{\\\"binary-search-bounds\\\":91}],415:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){e=e||new Array(t.length);for(var r=0;r<t.length;++r)e[t[r]]=r;return e}},{}],416:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){for(var e=new Array(t),r=0;r<t;++r)e[r]=r;return e}},{}],417:[function(t,e,r){e.exports=!0},{}],418:[function(t,e,r){function n(t){return!!t.constructor&&\\\"function\\\"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}e.exports=function(t){return null!=t&&(n(t)||function(t){return\\\"function\\\"==typeof t.readFloatLE&&\\\"function\\\"==typeof t.slice&&n(t.slice(0,0))}(t)||!!t._isBuffer)}},{}],419:[function(t,e,r){\\\"use strict\\\";e.exports=\\\"undefined\\\"!=typeof navigator&&(/MSIE/.test(navigator.userAgent)||/Trident\\\\//.test(navigator.appVersion))},{}],420:[function(t,e,r){\\\"use strict\\\";e.exports=a,e.exports.isMobile=a,e.exports.default=a;var n=/(android|bb\\\\d+|meego).+mobile|avantgo|bada\\\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\\\/|plucker|pocket|psp|series[46]0|symbian|treo|up\\\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i,i=/(android|bb\\\\d+|meego).+mobile|avantgo|bada\\\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\\\/|plucker|pocket|psp|series[46]0|symbian|treo|up\\\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino|android|ipad|playbook|silk/i;function a(t){t||(t={});var e=t.ua;return e||\\\"undefined\\\"==typeof navigator||(e=navigator.userAgent),e&&e.headers&&\\\"string\\\"==typeof e.headers[\\\"user-agent\\\"]&&(e=e.headers[\\\"user-agent\\\"]),\\\"string\\\"==typeof e&&(t.tablet?i.test(e):n.test(e))}},{}],421:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){var e=typeof t;return null!==t&&(\\\"object\\\"===e||\\\"function\\\"===e)}},{}],422:[function(t,e,r){\\\"use strict\\\";var n=Object.prototype.toString;e.exports=function(t){var e;return\\\"[object Object]\\\"===n.call(t)&&(null===(e=Object.getPrototypeOf(t))||e===Object.getPrototypeOf({}))}},{}],423:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){for(var e,r=t.length,n=0;n<r;n++)if(((e=t.charCodeAt(n))<9||e>13)&&32!==e&&133!==e&&160!==e&&5760!==e&&6158!==e&&(e<8192||e>8205)&&8232!==e&&8233!==e&&8239!==e&&8287!==e&&8288!==e&&12288!==e&&65279!==e)return!1;return!0}},{}],424:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){return\\\"string\\\"==typeof t&&(t=t.trim(),!!(/^[mzlhvcsqta]\\\\s*[-+.0-9][^mlhvzcsqta]+/i.test(t)&&/[\\\\dz]$/i.test(t)&&t.length>4))}},{}],425:[function(t,e,r){e.exports=function(t,e,r){return t*(1-r)+e*r}},{}],426:[function(t,e,r){var n,i;n=this,i=function(){\\\"use strict\\\";var t,e,r;function n(n,i){if(t)if(e){var a=\\\"var sharedChunk = {}; (\\\"+t+\\\")(sharedChunk); (\\\"+e+\\\")(sharedChunk);\\\",o={};t(o),(r=i(o)).workerUrl=window.URL.createObjectURL(new Blob([a],{type:\\\"text/javascript\\\"}))}else e=i;else t=i}return n(0,function(t){function e(t,e){return t(e={exports:{}},e.exports),e.exports}var r=n;function n(t,e,r,n){this.cx=3*t,this.bx=3*(r-t)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*e,this.by=3*(n-e)-this.cy,this.ay=1-this.cy-this.by,this.p1x=t,this.p1y=n,this.p2x=r,this.p2y=n}n.prototype.sampleCurveX=function(t){return((this.ax*t+this.bx)*t+this.cx)*t},n.prototype.sampleCurveY=function(t){return((this.ay*t+this.by)*t+this.cy)*t},n.prototype.sampleCurveDerivativeX=function(t){return(3*this.ax*t+2*this.bx)*t+this.cx},n.prototype.solveCurveX=function(t,e){var r,n,i,a,o;for(void 0===e&&(e=1e-6),i=t,o=0;o<8;o++){if(a=this.sampleCurveX(i)-t,Math.abs(a)<e)return i;var s=this.sampleCurveDerivativeX(i);if(Math.abs(s)<1e-6)break;i-=a/s}if((i=t)<(r=0))return r;if(i>(n=1))return n;for(;r<n;){if(a=this.sampleCurveX(i),Math.abs(a-t)<e)return i;t>a?r=i:n=i,i=.5*(n-r)+r}return i},n.prototype.solve=function(t,e){return this.sampleCurveY(this.solveCurveX(t,e))};var i=a;function a(t,e){this.x=t,this.y=e}function o(t,e){if(Array.isArray(t)){if(!Array.isArray(e)||t.length!==e.length)return!1;for(var r=0;r<t.length;r++)if(!o(t[r],e[r]))return!1;return!0}if(\\\"object\\\"==typeof t&&null!==t&&null!==e){if(\\\"object\\\"!=typeof e)return!1;if(Object.keys(t).length!==Object.keys(e).length)return!1;for(var n in t)if(!o(t[n],e[n]))return!1;return!0}return t===e}function s(t,e,n,i){var a=new r(t,e,n,i);return function(t){return a.solve(t)}}a.prototype={clone:function(){return new a(this.x,this.y)},add:function(t){return this.clone()._add(t)},sub:function(t){return this.clone()._sub(t)},multByPoint:function(t){return this.clone()._multByPoint(t)},divByPoint:function(t){return this.clone()._divByPoint(t)},mult:function(t){return this.clone()._mult(t)},div:function(t){return this.clone()._div(t)},rotate:function(t){return this.clone()._rotate(t)},rotateAround:function(t,e){return this.clone()._rotateAround(t,e)},matMult:function(t){return this.clone()._matMult(t)},unit:function(){return this.clone()._unit()},perp:function(){return this.clone()._perp()},round:function(){return this.clone()._round()},mag:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals:function(t){return this.x===t.x&&this.y===t.y},dist:function(t){return Math.sqrt(this.distSqr(t))},distSqr:function(t){var e=t.x-this.x,r=t.y-this.y;return e*e+r*r},angle:function(){return Math.atan2(this.y,this.x)},angleTo:function(t){return Math.atan2(this.y-t.y,this.x-t.x)},angleWith:function(t){return this.angleWithSep(t.x,t.y)},angleWithSep:function(t,e){return Math.atan2(this.x*e-this.y*t,this.x*t+this.y*e)},_matMult:function(t){var e=t[0]*this.x+t[1]*this.y,r=t[2]*this.x+t[3]*this.y;return this.x=e,this.y=r,this},_add:function(t){return this.x+=t.x,this.y+=t.y,this},_sub:function(t){return this.x-=t.x,this.y-=t.y,this},_mult:function(t){return this.x*=t,this.y*=t,this},_div:function(t){return this.x/=t,this.y/=t,this},_multByPoint:function(t){return this.x*=t.x,this.y*=t.y,this},_divByPoint:function(t){return this.x/=t.x,this.y/=t.y,this},_unit:function(){return this._div(this.mag()),this},_perp:function(){var t=this.y;return this.y=this.x,this.x=-t,this},_rotate:function(t){var e=Math.cos(t),r=Math.sin(t),n=e*this.x-r*this.y,i=r*this.x+e*this.y;return this.x=n,this.y=i,this},_rotateAround:function(t,e){var r=Math.cos(t),n=Math.sin(t),i=e.x+r*(this.x-e.x)-n*(this.y-e.y),a=e.y+n*(this.x-e.x)+r*(this.y-e.y);return this.x=i,this.y=a,this},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}},a.convert=function(t){return t instanceof a?t:Array.isArray(t)?new a(t[0],t[1]):t};var l=s(.25,.1,.25,1);function c(t,e,r){return Math.min(r,Math.max(e,t))}function u(t,e,r){var n=r-e,i=((t-e)%n+n)%n+e;return i===e?r:i}function h(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];for(var n=0,i=e;n<i.length;n+=1){var a=i[n];for(var o in a)t[o]=a[o]}return t}var f=1;function p(){return f++}function d(){return function t(e){return e?(e^16*Math.random()>>e/4).toString(16):([1e7]+-[1e3]+-4e3+-8e3+-1e11).replace(/[018]/g,t)}()}function g(t){return!!t&&/^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(t)}function v(t,e){t.forEach(function(t){e[t]&&(e[t]=e[t].bind(e))})}function m(t,e){return-1!==t.indexOf(e,t.length-e.length)}function y(t,e,r){var n={};for(var i in t)n[i]=e.call(r||this,t[i],i,t);return n}function x(t,e,r){var n={};for(var i in t)e.call(r||this,t[i],i,t)&&(n[i]=t[i]);return n}function b(t){return Array.isArray(t)?t.map(b):\\\"object\\\"==typeof t&&t?y(t,b):t}var _={};function w(t){_[t]||(\\\"undefined\\\"!=typeof console&&console.warn(t),_[t]=!0)}function k(t,e,r){return(r.y-t.y)*(e.x-t.x)>(e.y-t.y)*(r.x-t.x)}function T(t){for(var e=0,r=0,n=t.length,i=n-1,a=void 0,o=void 0;r<n;i=r++)a=t[r],e+=((o=t[i]).x-a.x)*(a.y+o.y);return e}function A(t){var e={};if(t.replace(/(?:^|(?:\\\\s*\\\\,\\\\s*))([^\\\\x00-\\\\x20\\\\(\\\\)<>@\\\\,;\\\\:\\\\\\\\\\\"\\\\/\\\\[\\\\]\\\\?\\\\=\\\\{\\\\}\\\\x7F]+)(?:\\\\=(?:([^\\\\x00-\\\\x20\\\\(\\\\)<>@\\\\,;\\\\:\\\\\\\\\\\"\\\\/\\\\[\\\\]\\\\?\\\\=\\\\{\\\\}\\\\x7F]+)|(?:\\\\\\\"((?:[^\\\"\\\\\\\\]|\\\\\\\\.)*)\\\\\\\")))?/g,function(t,r,n,i){var a=n||i;return e[r]=!a||a.toLowerCase(),\\\"\\\"}),e[\\\"max-age\\\"]){var r=parseInt(e[\\\"max-age\\\"],10);isNaN(r)?delete e[\\\"max-age\\\"]:e[\\\"max-age\\\"]=r}return e}function M(t){try{var e=self[t];return e.setItem(\\\"_mapbox_test_\\\",1),e.removeItem(\\\"_mapbox_test_\\\"),!0}catch(t){return!1}}var S,E,C,L=self.performance&&self.performance.now?self.performance.now.bind(self.performance):Date.now.bind(Date),P=self.requestAnimationFrame||self.mozRequestAnimationFrame||self.webkitRequestAnimationFrame||self.msRequestAnimationFrame,O=self.cancelAnimationFrame||self.mozCancelAnimationFrame||self.webkitCancelAnimationFrame||self.msCancelAnimationFrame,z={now:L,frame:function(t){var e=P(t);return{cancel:function(){return O(e)}}},getImageData:function(t){var e=self.document.createElement(\\\"canvas\\\"),r=e.getContext(\\\"2d\\\");if(!r)throw new Error(\\\"failed to create canvas 2d context\\\");return e.width=t.width,e.height=t.height,r.drawImage(t,0,0,t.width,t.height),r.getImageData(0,0,t.width,t.height)},resolveURL:function(t){return S||(S=self.document.createElement(\\\"a\\\")),S.href=t,S.href},hardwareConcurrency:self.navigator.hardwareConcurrency||4,get devicePixelRatio(){return self.devicePixelRatio}},I={API_URL:\\\"https://api.mapbox.com\\\",get EVENTS_URL(){return this.API_URL?0===this.API_URL.indexOf(\\\"https://api.mapbox.cn\\\")?\\\"https://events.mapbox.cn/events/v2\\\":0===this.API_URL.indexOf(\\\"https://api.mapbox.com\\\")?\\\"https://events.mapbox.com/events/v2\\\":null:null},FEEDBACK_URL:\\\"https://apps.mapbox.com/feedback\\\",REQUIRE_ACCESS_TOKEN:!0,ACCESS_TOKEN:null,MAX_PARALLEL_IMAGE_REQUESTS:16},D={supported:!1,testSupport:function(t){!R&&C&&(F?B(t):E=t)}},R=!1,F=!1;function B(t){var e=t.createTexture();t.bindTexture(t.TEXTURE_2D,e);try{if(t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,C),t.isContextLost())return;D.supported=!0}catch(t){}t.deleteTexture(e),R=!0}self.document&&((C=self.document.createElement(\\\"img\\\")).onload=function(){E&&B(E),E=null,F=!0},C.onerror=function(){R=!0,E=null},C.src=\\\"data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA=\\\");var N=\\\"01\\\",j=function(t){this._transformRequestFn=t,this._createSkuToken()};j.prototype._createSkuToken=function(){var t=function(){for(var t=\\\"\\\",e=0;e<10;e++)t+=\\\"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\\\"[Math.floor(62*Math.random())];return{token:[\\\"1\\\",N,t].join(\\\"\\\"),tokenExpiresAt:Date.now()+432e5}}();this._skuToken=t.token,this._skuTokenExpiresAt=t.tokenExpiresAt},j.prototype._isSkuTokenExpired=function(){return Date.now()>this._skuTokenExpiresAt},j.prototype.transformRequest=function(t,e){return this._transformRequestFn&&this._transformRequestFn(t,e)||{url:t}},j.prototype.normalizeStyleURL=function(t,e){return Y(t,e)},j.prototype.normalizeGlyphsURL=function(t,e){return W(t,e)},j.prototype.normalizeSourceURL=function(t,e){return X(t,e)},j.prototype.normalizeSpriteURL=function(t,e,r,n){return Z(t,e,r,n)},j.prototype.normalizeTileURL=function(t,e,r){return this._isSkuTokenExpired()&&this._createSkuToken(),K(t,e,r,this._skuToken)},j.prototype.canonicalizeTileURL=function(t){return Q(t)},j.prototype.canonicalizeTileset=function(t,e){return tt(t,e)};var U=\\\"See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes\\\";function V(t,e){var r=rt(I.API_URL);if(t.protocol=r.protocol,t.authority=r.authority,\\\"/\\\"!==r.path&&(t.path=\\\"\\\"+r.path+t.path),!I.REQUIRE_ACCESS_TOKEN)return nt(t);if(!(e=e||I.ACCESS_TOKEN))throw new Error(\\\"An API access token is required to use Mapbox GL. \\\"+U);if(\\\"s\\\"===e[0])throw new Error(\\\"Use a public access token (pk.*) with Mapbox GL, not a secret access token (sk.*). \\\"+U);return t.params.push(\\\"access_token=\\\"+e),nt(t)}function q(t){return 0===t.indexOf(\\\"mapbox:\\\")}var H=/^((https?:)?\\\\/\\\\/)?([^\\\\/]+\\\\.)?mapbox\\\\.c(n|om)(\\\\/|\\\\?|$)/i;function G(t){return H.test(t)}var Y=function(t,e){if(!q(t))return t;var r=rt(t);return r.path=\\\"/styles/v1\\\"+r.path,V(r,e)},W=function(t,e){if(!q(t))return t;var r=rt(t);return r.path=\\\"/fonts/v1\\\"+r.path,V(r,e)},X=function(t,e){if(!q(t))return t;var r=rt(t);return r.path=\\\"/v4/\\\"+r.authority+\\\".json\\\",r.params.push(\\\"secure\\\"),V(r,e)},Z=function(t,e,r,n){var i=rt(t);return q(t)?(i.path=\\\"/styles/v1\\\"+i.path+\\\"/sprite\\\"+e+r,V(i,n)):(i.path+=\\\"\\\"+e+r,nt(i))},J=/(\\\\.(png|jpg)\\\\d*)(?=$)/,K=function(t,e,r,n){if(!e||!q(e))return t;var i=rt(t),a=z.devicePixelRatio>=2||512===r?\\\"@2x\\\":\\\"\\\",o=D.supported?\\\".webp\\\":\\\"$1\\\";return i.path=i.path.replace(J,\\\"\\\"+a+o),i.path=\\\"/v4\\\"+i.path,I.REQUIRE_ACCESS_TOKEN&&I.ACCESS_TOKEN&&n&&i.params.push(\\\"sku=\\\"+n),V(i)},$=/\\\\.[\\\\w]+$/,Q=function(t){var e=rt(t);if(!e.path.match(/(^\\\\/v4\\\\/)/)||!e.path.match($))return t;var r=\\\"mapbox://tiles/\\\";r+=e.path.replace(\\\"/v4/\\\",\\\"\\\");var n=e.params.filter(function(t){return!t.match(/^access_token=/)});return n.length&&(r+=\\\"?\\\"+n.join(\\\"&\\\")),r},tt=function(t,e){if(!q(e))return t.tiles||[];for(var r=[],n=0,i=t.tiles;n<i.length;n+=1){var a=i[n],o=Q(a);r.push(o)}return r},et=/^(\\\\w+):\\\\/\\\\/([^\\\\/?]*)(\\\\/[^?]+)?\\\\??(.+)?/;function rt(t){var e=t.match(et);if(!e)throw new Error(\\\"Unable to parse URL object\\\");return{protocol:e[1],authority:e[2],path:e[3]||\\\"/\\\",params:e[4]?e[4].split(\\\"&\\\"):[]}}function nt(t){var e=t.params.length?\\\"?\\\"+t.params.join(\\\"&\\\"):\\\"\\\";return t.protocol+\\\"://\\\"+t.authority+t.path+e}function it(t){if(!t)return null;var e,r=t.split(\\\".\\\");if(!r||3!==r.length)return null;try{return JSON.parse((e=r[1],decodeURIComponent(self.atob(e).split(\\\"\\\").map(function(t){return\\\"%\\\"+(\\\"00\\\"+t.charCodeAt(0).toString(16)).slice(-2)}).join(\\\"\\\"))))}catch(t){return null}}var at=function(t){this.type=t,this.anonId=null,this.eventData={},this.queue=[],this.pendingRequest=null};at.prototype.getStorageKey=function(t){var e,r=it(I.ACCESS_TOKEN),n=\\\"\\\";return r&&r.u?(e=r.u,n=self.btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g,function(t,e){return String.fromCharCode(Number(\\\"0x\\\"+e))}))):n=I.ACCESS_TOKEN||\\\"\\\",t?\\\"mapbox.eventData.\\\"+t+\\\":\\\"+n:\\\"mapbox.eventData:\\\"+n},at.prototype.fetchEventData=function(){var t=M(\\\"localStorage\\\"),e=this.getStorageKey(),r=this.getStorageKey(\\\"uuid\\\");if(t)try{var n=self.localStorage.getItem(e);n&&(this.eventData=JSON.parse(n));var i=self.localStorage.getItem(r);i&&(this.anonId=i)}catch(t){w(\\\"Unable to read from LocalStorage\\\")}},at.prototype.saveEventData=function(){var t=M(\\\"localStorage\\\"),e=this.getStorageKey(),r=this.getStorageKey(\\\"uuid\\\");if(t)try{self.localStorage.setItem(r,this.anonId),Object.keys(this.eventData).length>=1&&self.localStorage.setItem(e,JSON.stringify(this.eventData))}catch(t){w(\\\"Unable to write to LocalStorage\\\")}},at.prototype.processRequests=function(){},at.prototype.postEvent=function(t,e,r){var n=this;if(I.EVENTS_URL){var i=rt(I.EVENTS_URL);i.params.push(\\\"access_token=\\\"+(I.ACCESS_TOKEN||\\\"\\\"));var a={event:this.type,created:new Date(t).toISOString(),sdkIdentifier:\\\"mapbox-gl-js\\\",sdkVersion:\\\"1.1.1\\\",skuId:N,userId:this.anonId},o=e?h(a,e):a,s={url:nt(i),headers:{\\\"Content-Type\\\":\\\"text/plain\\\"},body:JSON.stringify([o])};this.pendingRequest=St(s,function(t){n.pendingRequest=null,r(t),n.saveEventData(),n.processRequests()})}},at.prototype.queueRequest=function(t){this.queue.push(t),this.processRequests()};var ot,st=function(t){function e(){t.call(this,\\\"map.load\\\"),this.success={},this.skuToken=\\\"\\\"}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.postMapLoadEvent=function(t,e,r){this.skuToken=r,I.EVENTS_URL&&I.ACCESS_TOKEN&&Array.isArray(t)&&t.some(function(t){return q(t)||G(t)})&&this.queueRequest({id:e,timestamp:Date.now()})},e.prototype.processRequests=function(){var t=this;if(!this.pendingRequest&&0!==this.queue.length){var e=this.queue.shift(),r=e.id,n=e.timestamp;r&&this.success[r]||(this.anonId||this.fetchEventData(),g(this.anonId)||(this.anonId=d()),this.postEvent(n,{skuToken:this.skuToken},function(e){e||r&&(t.success[r]=!0)}))}},e}(at),lt=new(function(t){function e(){t.call(this,\\\"appUserTurnstile\\\")}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.postTurnstileEvent=function(t){I.EVENTS_URL&&I.ACCESS_TOKEN&&Array.isArray(t)&&t.some(function(t){return q(t)||G(t)})&&this.queueRequest(Date.now())},e.prototype.processRequests=function(){var t=this;if(!this.pendingRequest&&0!==this.queue.length){this.anonId&&this.eventData.lastSuccess&&this.eventData.tokenU||this.fetchEventData();var e=it(I.ACCESS_TOKEN),r=e?e.u:I.ACCESS_TOKEN,n=r!==this.eventData.tokenU;g(this.anonId)||(this.anonId=d(),n=!0);var i=this.queue.shift();if(this.eventData.lastSuccess){var a=new Date(this.eventData.lastSuccess),o=new Date(i),s=(i-this.eventData.lastSuccess)/864e5;n=n||s>=1||s<-1||a.getDate()!==o.getDate()}else n=!0;if(!n)return this.processRequests();this.postEvent(i,{\\\"enabled.telemetry\\\":!1},function(e){e||(t.eventData.lastSuccess=i,t.eventData.tokenU=r)})}},e}(at)),ct=lt.postTurnstileEvent.bind(lt),ut=new st,ht=ut.postMapLoadEvent.bind(ut),ft=\\\"mapbox-tiles\\\",pt=500,dt=50,gt=42e4;function vt(t){var e=t.indexOf(\\\"?\\\");return e<0?t:t.slice(0,e)}var mt=1/0,yt={Unknown:\\\"Unknown\\\",Style:\\\"Style\\\",Source:\\\"Source\\\",Tile:\\\"Tile\\\",Glyphs:\\\"Glyphs\\\",SpriteImage:\\\"SpriteImage\\\",SpriteJSON:\\\"SpriteJSON\\\",Image:\\\"Image\\\"};\\\"function\\\"==typeof Object.freeze&&Object.freeze(yt);var xt=function(t){function e(e,r,n){401===r&&G(n)&&(e+=\\\": you may have provided an invalid Mapbox access token. See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes\\\"),t.call(this,e),this.status=r,this.url=n,this.name=this.constructor.name,this.message=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.toString=function(){return this.name+\\\": \\\"+this.message+\\\" (\\\"+this.status+\\\"): \\\"+this.url},e}(Error);function bt(){return\\\"undefined\\\"!=typeof WorkerGlobalScope&&\\\"undefined\\\"!=typeof self&&self instanceof WorkerGlobalScope}var _t=bt()?function(){return self.worker&&self.worker.referrer}:function(){var t=self.location.origin;if(t&&\\\"null\\\"!==t&&\\\"file://\\\"!==t)return t+self.location.pathname};function wt(t,e){var r,n=new self.AbortController,i=new self.Request(t.url,{method:t.method||\\\"GET\\\",body:t.body,credentials:t.credentials,headers:t.headers,referrer:_t(),signal:n.signal}),a=!1,o=!1,s=(r=i.url).indexOf(\\\"sku=\\\")>0&&G(r);\\\"json\\\"===t.type&&i.headers.set(\\\"Accept\\\",\\\"application/json\\\");var l=function(r,n,a){if(!o){if(r&&\\\"SecurityError\\\"!==r.message&&w(r),n&&a)return c(n);var l=Date.now();self.fetch(i).then(function(r){if(r.ok){var n=s?r.clone():null;return c(r,n,l)}return e(new xt(r.statusText,r.status,t.url))}).catch(function(t){20!==t.code&&e(new Error(t.message))})}},c=function(r,n,s){(\\\"arrayBuffer\\\"===t.type?r.arrayBuffer():\\\"json\\\"===t.type?r.json():r.text()).then(function(t){o||(n&&s&&function(t,e,r){if(self.caches){var n={status:e.status,statusText:e.statusText,headers:new self.Headers};e.headers.forEach(function(t,e){return n.headers.set(e,t)});var i=A(e.headers.get(\\\"Cache-Control\\\")||\\\"\\\");i[\\\"no-store\\\"]||(i[\\\"max-age\\\"]&&n.headers.set(\\\"Expires\\\",new Date(r+1e3*i[\\\"max-age\\\"]).toUTCString()),new Date(n.headers.get(\\\"Expires\\\")).getTime()-r<gt||function(t,e){if(void 0===ot)try{new Response(new ReadableStream),ot=!0}catch(t){ot=!1}ot?e(t.body):t.blob().then(e)}(e,function(e){var r=new self.Response(e,n);self.caches.open(ft).then(function(e){return e.put(vt(t.url),r)})}))}}(i,n,s),a=!0,e(null,t,r.headers.get(\\\"Cache-Control\\\"),r.headers.get(\\\"Expires\\\")))}).catch(function(t){return e(new Error(t.message))})};return s?function(t,e){if(!self.caches)return e(null);var r=vt(t.url);self.caches.open(ft).catch(e).then(function(t){t.match(r).catch(e).then(function(n){var i=function(t){if(!t)return!1;var e=new Date(t.headers.get(\\\"Expires\\\")),r=A(t.headers.get(\\\"Cache-Control\\\")||\\\"\\\");return e>Date.now()&&!r[\\\"no-cache\\\"]}(n);t.delete(r),i&&t.put(r,n.clone()),e(null,n,i)})})}(i,l):l(null,null),{cancel:function(){o=!0,a||n.abort()}}}var kt,Tt,At=function(t,e){if(!/^file:/.test(t.url)){if(self.fetch&&self.Request&&self.AbortController&&self.Request.prototype.hasOwnProperty(\\\"signal\\\"))return wt(t,e);if(bt()&&self.worker&&self.worker.actor)return self.worker.actor.send(\\\"getResource\\\",t,e)}return function(t,e){var r=new self.XMLHttpRequest;for(var n in r.open(t.method||\\\"GET\\\",t.url,!0),\\\"arrayBuffer\\\"===t.type&&(r.responseType=\\\"arraybuffer\\\"),t.headers)r.setRequestHeader(n,t.headers[n]);return\\\"json\\\"===t.type&&r.setRequestHeader(\\\"Accept\\\",\\\"application/json\\\"),r.withCredentials=\\\"include\\\"===t.credentials,r.onerror=function(){e(new Error(r.statusText))},r.onload=function(){if((r.status>=200&&r.status<300||0===r.status)&&null!==r.response){var n=r.response;if(\\\"json\\\"===t.type)try{n=JSON.parse(r.response)}catch(t){return e(t)}e(null,n,r.getResponseHeader(\\\"Cache-Control\\\"),r.getResponseHeader(\\\"Expires\\\"))}else e(new xt(r.statusText,r.status,t.url))},r.send(t.body),{cancel:function(){return r.abort()}}}(t,e)},Mt=function(t,e){return At(h(t,{type:\\\"arrayBuffer\\\"}),e)},St=function(t,e){return At(h(t,{method:\\\"POST\\\"}),e)};kt=[],Tt=0;var Et=function(t,e){if(Tt>=I.MAX_PARALLEL_IMAGE_REQUESTS){var r={requestParameters:t,callback:e,cancelled:!1,cancel:function(){this.cancelled=!0}};return kt.push(r),r}Tt++;var n=!1,i=function(){if(!n)for(n=!0,Tt--;kt.length&&Tt<I.MAX_PARALLEL_IMAGE_REQUESTS;){var t=kt.shift(),e=t.requestParameters,r=t.callback;t.cancelled||(t.cancel=Et(e,r).cancel)}},a=Mt(t,function(t,r,n,a){if(i(),t)e(t);else if(r){var o=new self.Image,s=self.URL||self.webkitURL;o.onload=function(){e(null,o),s.revokeObjectURL(o.src)},o.onerror=function(){return e(new Error(\\\"Could not load image. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.\\\"))};var l=new self.Blob([new Uint8Array(r)],{type:\\\"image/png\\\"});o.cacheControl=n,o.expires=a,o.src=r.byteLength?s.createObjectURL(l):\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=\\\"}});return{cancel:function(){a.cancel(),i()}}};function Ct(t,e,r){r[t]&&-1!==r[t].indexOf(e)||(r[t]=r[t]||[],r[t].push(e))}function Lt(t,e,r){if(r&&r[t]){var n=r[t].indexOf(e);-1!==n&&r[t].splice(n,1)}}var Pt=function(t,e){void 0===e&&(e={}),h(this,e),this.type=t},Ot=function(t){function e(e,r){void 0===r&&(r={}),t.call(this,\\\"error\\\",h({error:e},r))}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Pt),zt=function(){};zt.prototype.on=function(t,e){return this._listeners=this._listeners||{},Ct(t,e,this._listeners),this},zt.prototype.off=function(t,e){return Lt(t,e,this._listeners),Lt(t,e,this._oneTimeListeners),this},zt.prototype.once=function(t,e){return this._oneTimeListeners=this._oneTimeListeners||{},Ct(t,e,this._oneTimeListeners),this},zt.prototype.fire=function(t,e){\\\"string\\\"==typeof t&&(t=new Pt(t,e||{}));var r=t.type;if(this.listens(r)){t.target=this;for(var n=0,i=this._listeners&&this._listeners[r]?this._listeners[r].slice():[];n<i.length;n+=1)i[n].call(this,t);for(var a=0,o=this._oneTimeListeners&&this._oneTimeListeners[r]?this._oneTimeListeners[r].slice():[];a<o.length;a+=1){var s=o[a];Lt(r,s,this._oneTimeListeners),s.call(this,t)}var l=this._eventedParent;l&&(h(t,\\\"function\\\"==typeof this._eventedParentData?this._eventedParentData():this._eventedParentData),l.fire(t))}else t instanceof Ot&&console.error(t.error);return this},zt.prototype.listens=function(t){return this._listeners&&this._listeners[t]&&this._listeners[t].length>0||this._oneTimeListeners&&this._oneTimeListeners[t]&&this._oneTimeListeners[t].length>0||this._eventedParent&&this._eventedParent.listens(t)},zt.prototype.setEventedParent=function(t,e){return this._eventedParent=t,this._eventedParentData=e,this};var It={$version:8,$root:{version:{required:!0,type:\\\"enum\\\",values:[8]},name:{type:\\\"string\\\"},metadata:{type:\\\"*\\\"},center:{type:\\\"array\\\",value:\\\"number\\\"},zoom:{type:\\\"number\\\"},bearing:{type:\\\"number\\\",default:0,period:360,units:\\\"degrees\\\"},pitch:{type:\\\"number\\\",default:0,units:\\\"degrees\\\"},light:{type:\\\"light\\\"},sources:{required:!0,type:\\\"sources\\\"},sprite:{type:\\\"string\\\"},glyphs:{type:\\\"string\\\"},transition:{type:\\\"transition\\\"},layers:{required:!0,type:\\\"array\\\",value:\\\"layer\\\"}},sources:{\\\"*\\\":{type:\\\"source\\\"}},source:[\\\"source_vector\\\",\\\"source_raster\\\",\\\"source_raster_dem\\\",\\\"source_geojson\\\",\\\"source_video\\\",\\\"source_image\\\"],source_vector:{type:{required:!0,type:\\\"enum\\\",values:{vector:{}}},url:{type:\\\"string\\\"},tiles:{type:\\\"array\\\",value:\\\"string\\\"},bounds:{type:\\\"array\\\",value:\\\"number\\\",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:\\\"enum\\\",values:{xyz:{},tms:{}},default:\\\"xyz\\\"},minzoom:{type:\\\"number\\\",default:0},maxzoom:{type:\\\"number\\\",default:22},attribution:{type:\\\"string\\\"},\\\"*\\\":{type:\\\"*\\\"}},source_raster:{type:{required:!0,type:\\\"enum\\\",values:{raster:{}}},url:{type:\\\"string\\\"},tiles:{type:\\\"array\\\",value:\\\"string\\\"},bounds:{type:\\\"array\\\",value:\\\"number\\\",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:\\\"number\\\",default:0},maxzoom:{type:\\\"number\\\",default:22},tileSize:{type:\\\"number\\\",default:512,units:\\\"pixels\\\"},scheme:{type:\\\"enum\\\",values:{xyz:{},tms:{}},default:\\\"xyz\\\"},attribution:{type:\\\"string\\\"},\\\"*\\\":{type:\\\"*\\\"}},source_raster_dem:{type:{required:!0,type:\\\"enum\\\",values:{\\\"raster-dem\\\":{}}},url:{type:\\\"string\\\"},tiles:{type:\\\"array\\\",value:\\\"string\\\"},bounds:{type:\\\"array\\\",value:\\\"number\\\",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:\\\"number\\\",default:0},maxzoom:{type:\\\"number\\\",default:22},tileSize:{type:\\\"number\\\",default:512,units:\\\"pixels\\\"},attribution:{type:\\\"string\\\"},encoding:{type:\\\"enum\\\",values:{terrarium:{},mapbox:{}},default:\\\"mapbox\\\"},\\\"*\\\":{type:\\\"*\\\"}},source_geojson:{type:{required:!0,type:\\\"enum\\\",values:{geojson:{}}},data:{type:\\\"*\\\"},maxzoom:{type:\\\"number\\\",default:18},attribution:{type:\\\"string\\\"},buffer:{type:\\\"number\\\",default:128,maximum:512,minimum:0},tolerance:{type:\\\"number\\\",default:.375},cluster:{type:\\\"boolean\\\",default:!1},clusterRadius:{type:\\\"number\\\",default:50,minimum:0},clusterMaxZoom:{type:\\\"number\\\"},clusterProperties:{type:\\\"*\\\"},lineMetrics:{type:\\\"boolean\\\",default:!1},generateId:{type:\\\"boolean\\\",default:!1}},source_video:{type:{required:!0,type:\\\"enum\\\",values:{video:{}}},urls:{required:!0,type:\\\"array\\\",value:\\\"string\\\"},coordinates:{required:!0,type:\\\"array\\\",length:4,value:{type:\\\"array\\\",length:2,value:\\\"number\\\"}}},source_image:{type:{required:!0,type:\\\"enum\\\",values:{image:{}}},url:{required:!0,type:\\\"string\\\"},coordinates:{required:!0,type:\\\"array\\\",length:4,value:{type:\\\"array\\\",length:2,value:\\\"number\\\"}}},layer:{id:{type:\\\"string\\\",required:!0},type:{type:\\\"enum\\\",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},\\\"fill-extrusion\\\":{},raster:{},hillshade:{},background:{}},required:!0},metadata:{type:\\\"*\\\"},source:{type:\\\"string\\\"},\\\"source-layer\\\":{type:\\\"string\\\"},minzoom:{type:\\\"number\\\",minimum:0,maximum:24},maxzoom:{type:\\\"number\\\",minimum:0,maximum:24},filter:{type:\\\"filter\\\"},layout:{type:\\\"layout\\\"},paint:{type:\\\"paint\\\"}},layout:[\\\"layout_fill\\\",\\\"layout_line\\\",\\\"layout_circle\\\",\\\"layout_heatmap\\\",\\\"layout_fill-extrusion\\\",\\\"layout_symbol\\\",\\\"layout_raster\\\",\\\"layout_hillshade\\\",\\\"layout_background\\\"],layout_background:{visibility:{type:\\\"enum\\\",values:{visible:{},none:{}},default:\\\"visible\\\",\\\"property-type\\\":\\\"constant\\\"}},layout_fill:{visibility:{type:\\\"enum\\\",values:{visible:{},none:{}},default:\\\"visible\\\",\\\"property-type\\\":\\\"constant\\\"}},layout_circle:{visibility:{type:\\\"enum\\\",values:{visible:{},none:{}},default:\\\"visible\\\",\\\"property-type\\\":\\\"constant\\\"}},layout_heatmap:{visibility:{type:\\\"enum\\\",values:{visible:{},none:{}},default:\\\"visible\\\",\\\"property-type\\\":\\\"constant\\\"}},\\\"layout_fill-extrusion\\\":{visibility:{type:\\\"enum\\\",values:{visible:{},none:{}},default:\\\"visible\\\",\\\"property-type\\\":\\\"constant\\\"}},layout_line:{\\\"line-cap\\\":{type:\\\"enum\\\",values:{butt:{},round:{},square:{}},default:\\\"butt\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"line-join\\\":{type:\\\"enum\\\",values:{bevel:{},round:{},miter:{}},default:\\\"miter\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"line-miter-limit\\\":{type:\\\"number\\\",default:2,requires:[{\\\"line-join\\\":\\\"miter\\\"}],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"line-round-limit\\\":{type:\\\"number\\\",default:1.05,requires:[{\\\"line-join\\\":\\\"round\\\"}],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},visibility:{type:\\\"enum\\\",values:{visible:{},none:{}},default:\\\"visible\\\",\\\"property-type\\\":\\\"constant\\\"}},layout_symbol:{\\\"symbol-placement\\\":{type:\\\"enum\\\",values:{point:{},line:{},\\\"line-center\\\":{}},default:\\\"point\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"symbol-spacing\\\":{type:\\\"number\\\",default:250,minimum:1,units:\\\"pixels\\\",requires:[{\\\"symbol-placement\\\":\\\"line\\\"}],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"symbol-avoid-edges\\\":{type:\\\"boolean\\\",default:!1,expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"symbol-sort-key\\\":{type:\\\"number\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"symbol-z-order\\\":{type:\\\"enum\\\",values:{auto:{},\\\"viewport-y\\\":{},source:{}},default:\\\"auto\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"icon-allow-overlap\\\":{type:\\\"boolean\\\",default:!1,requires:[\\\"icon-image\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"icon-ignore-placement\\\":{type:\\\"boolean\\\",default:!1,requires:[\\\"icon-image\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"icon-optional\\\":{type:\\\"boolean\\\",default:!1,requires:[\\\"icon-image\\\",\\\"text-field\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"icon-rotation-alignment\\\":{type:\\\"enum\\\",values:{map:{},viewport:{},auto:{}},default:\\\"auto\\\",requires:[\\\"icon-image\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"icon-size\\\":{type:\\\"number\\\",default:1,minimum:0,units:\\\"factor of the original icon size\\\",requires:[\\\"icon-image\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"icon-text-fit\\\":{type:\\\"enum\\\",values:{none:{},width:{},height:{},both:{}},default:\\\"none\\\",requires:[\\\"icon-image\\\",\\\"text-field\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"icon-text-fit-padding\\\":{type:\\\"array\\\",value:\\\"number\\\",length:4,default:[0,0,0,0],units:\\\"pixels\\\",requires:[\\\"icon-image\\\",\\\"text-field\\\",{\\\"icon-text-fit\\\":[\\\"both\\\",\\\"width\\\",\\\"height\\\"]}],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"icon-image\\\":{type:\\\"string\\\",tokens:!0,expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"icon-rotate\\\":{type:\\\"number\\\",default:0,period:360,units:\\\"degrees\\\",requires:[\\\"icon-image\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"icon-padding\\\":{type:\\\"number\\\",default:2,minimum:0,units:\\\"pixels\\\",requires:[\\\"icon-image\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"icon-keep-upright\\\":{type:\\\"boolean\\\",default:!1,requires:[\\\"icon-image\\\",{\\\"icon-rotation-alignment\\\":\\\"map\\\"},{\\\"symbol-placement\\\":[\\\"line\\\",\\\"line-center\\\"]}],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"icon-offset\\\":{type:\\\"array\\\",value:\\\"number\\\",length:2,default:[0,0],requires:[\\\"icon-image\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"icon-anchor\\\":{type:\\\"enum\\\",values:{center:{},left:{},right:{},top:{},bottom:{},\\\"top-left\\\":{},\\\"top-right\\\":{},\\\"bottom-left\\\":{},\\\"bottom-right\\\":{}},default:\\\"center\\\",requires:[\\\"icon-image\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"icon-pitch-alignment\\\":{type:\\\"enum\\\",values:{map:{},viewport:{},auto:{}},default:\\\"auto\\\",requires:[\\\"icon-image\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-pitch-alignment\\\":{type:\\\"enum\\\",values:{map:{},viewport:{},auto:{}},default:\\\"auto\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-rotation-alignment\\\":{type:\\\"enum\\\",values:{map:{},viewport:{},auto:{}},default:\\\"auto\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-field\\\":{type:\\\"formatted\\\",default:\\\"\\\",tokens:!0,expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-font\\\":{type:\\\"array\\\",value:\\\"string\\\",default:[\\\"Open Sans Regular\\\",\\\"Arial Unicode MS Regular\\\"],requires:[\\\"text-field\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-size\\\":{type:\\\"number\\\",default:16,minimum:0,units:\\\"pixels\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-max-width\\\":{type:\\\"number\\\",default:10,minimum:0,units:\\\"ems\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-line-height\\\":{type:\\\"number\\\",default:1.2,units:\\\"ems\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-letter-spacing\\\":{type:\\\"number\\\",default:0,units:\\\"ems\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-justify\\\":{type:\\\"enum\\\",values:{auto:{},left:{},center:{},right:{}},default:\\\"center\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-radial-offset\\\":{type:\\\"number\\\",units:\\\"ems\\\",default:0,requires:[{\\\"!\\\":\\\"text-offset\\\"}],\\\"property-type\\\":\\\"data-driven\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\"]}},\\\"text-variable-anchor\\\":{type:\\\"array\\\",value:\\\"enum\\\",values:{center:{},left:{},right:{},top:{},bottom:{},\\\"top-left\\\":{},\\\"top-right\\\":{},\\\"bottom-left\\\":{},\\\"bottom-right\\\":{}},requires:[{\\\"!\\\":\\\"text-anchor\\\"},{\\\"!\\\":\\\"text-offset\\\"},{\\\"symbol-placement\\\":[\\\"point\\\"]}],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-anchor\\\":{type:\\\"enum\\\",requires:[\\\"text-field\\\"],values:{center:{},left:{},right:{},top:{},bottom:{},\\\"top-left\\\":{},\\\"top-right\\\":{},\\\"bottom-left\\\":{},\\\"bottom-right\\\":{}},default:\\\"center\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-max-angle\\\":{type:\\\"number\\\",default:45,units:\\\"degrees\\\",requires:[\\\"text-field\\\",{\\\"symbol-placement\\\":[\\\"line\\\",\\\"line-center\\\"]}],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-rotate\\\":{type:\\\"number\\\",default:0,period:360,units:\\\"degrees\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-padding\\\":{type:\\\"number\\\",default:2,minimum:0,units:\\\"pixels\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-keep-upright\\\":{type:\\\"boolean\\\",default:!0,requires:[\\\"text-field\\\",{\\\"text-rotation-alignment\\\":\\\"map\\\"},{\\\"symbol-placement\\\":[\\\"line\\\",\\\"line-center\\\"]}],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-transform\\\":{type:\\\"enum\\\",values:{none:{},uppercase:{},lowercase:{}},default:\\\"none\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-offset\\\":{type:\\\"array\\\",value:\\\"number\\\",units:\\\"ems\\\",length:2,default:[0,0],requires:[\\\"text-field\\\",{\\\"!\\\":\\\"text-radial-offset\\\"}],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-allow-overlap\\\":{type:\\\"boolean\\\",default:!1,requires:[\\\"text-field\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-ignore-placement\\\":{type:\\\"boolean\\\",default:!1,requires:[\\\"text-field\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-optional\\\":{type:\\\"boolean\\\",default:!1,requires:[\\\"text-field\\\",\\\"icon-image\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},visibility:{type:\\\"enum\\\",values:{visible:{},none:{}},default:\\\"visible\\\",\\\"property-type\\\":\\\"constant\\\"}},layout_raster:{visibility:{type:\\\"enum\\\",values:{visible:{},none:{}},default:\\\"visible\\\",\\\"property-type\\\":\\\"constant\\\"}},layout_hillshade:{visibility:{type:\\\"enum\\\",values:{visible:{},none:{}},default:\\\"visible\\\",\\\"property-type\\\":\\\"constant\\\"}},filter:{type:\\\"array\\\",value:\\\"*\\\"},filter_operator:{type:\\\"enum\\\",values:{\\\"==\\\":{},\\\"!=\\\":{},\\\">\\\":{},\\\">=\\\":{},\\\"<\\\":{},\\\"<=\\\":{},in:{},\\\"!in\\\":{},all:{},any:{},none:{},has:{},\\\"!has\\\":{}}},geometry_type:{type:\\\"enum\\\",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:\\\"expression\\\"},stops:{type:\\\"array\\\",value:\\\"function_stop\\\"},base:{type:\\\"number\\\",default:1,minimum:0},property:{type:\\\"string\\\",default:\\\"$zoom\\\"},type:{type:\\\"enum\\\",values:{identity:{},exponential:{},interval:{},categorical:{}},default:\\\"exponential\\\"},colorSpace:{type:\\\"enum\\\",values:{rgb:{},lab:{},hcl:{}},default:\\\"rgb\\\"},default:{type:\\\"*\\\",required:!1}},function_stop:{type:\\\"array\\\",minimum:0,maximum:22,value:[\\\"number\\\",\\\"color\\\"],length:2},expression:{type:\\\"array\\\",value:\\\"*\\\",minimum:1},expression_name:{type:\\\"enum\\\",values:{let:{group:\\\"Variable binding\\\"},var:{group:\\\"Variable binding\\\"},literal:{group:\\\"Types\\\"},array:{group:\\\"Types\\\"},at:{group:\\\"Lookup\\\"},case:{group:\\\"Decision\\\"},match:{group:\\\"Decision\\\"},coalesce:{group:\\\"Decision\\\"},step:{group:\\\"Ramps, scales, curves\\\"},interpolate:{group:\\\"Ramps, scales, curves\\\"},\\\"interpolate-hcl\\\":{group:\\\"Ramps, scales, curves\\\"},\\\"interpolate-lab\\\":{group:\\\"Ramps, scales, curves\\\"},ln2:{group:\\\"Math\\\"},pi:{group:\\\"Math\\\"},e:{group:\\\"Math\\\"},typeof:{group:\\\"Types\\\"},string:{group:\\\"Types\\\"},number:{group:\\\"Types\\\"},boolean:{group:\\\"Types\\\"},object:{group:\\\"Types\\\"},collator:{group:\\\"Types\\\"},format:{group:\\\"Types\\\"},\\\"number-format\\\":{group:\\\"Types\\\"},\\\"to-string\\\":{group:\\\"Types\\\"},\\\"to-number\\\":{group:\\\"Types\\\"},\\\"to-boolean\\\":{group:\\\"Types\\\"},\\\"to-rgba\\\":{group:\\\"Color\\\"},\\\"to-color\\\":{group:\\\"Types\\\"},rgb:{group:\\\"Color\\\"},rgba:{group:\\\"Color\\\"},get:{group:\\\"Lookup\\\"},has:{group:\\\"Lookup\\\"},length:{group:\\\"Lookup\\\"},properties:{group:\\\"Feature data\\\"},\\\"feature-state\\\":{group:\\\"Feature data\\\"},\\\"geometry-type\\\":{group:\\\"Feature data\\\"},id:{group:\\\"Feature data\\\"},zoom:{group:\\\"Zoom\\\"},\\\"heatmap-density\\\":{group:\\\"Heatmap\\\"},\\\"line-progress\\\":{group:\\\"Feature data\\\"},accumulated:{group:\\\"Feature data\\\"},\\\"+\\\":{group:\\\"Math\\\"},\\\"*\\\":{group:\\\"Math\\\"},\\\"-\\\":{group:\\\"Math\\\"},\\\"/\\\":{group:\\\"Math\\\"},\\\"%\\\":{group:\\\"Math\\\"},\\\"^\\\":{group:\\\"Math\\\"},sqrt:{group:\\\"Math\\\"},log10:{group:\\\"Math\\\"},ln:{group:\\\"Math\\\"},log2:{group:\\\"Math\\\"},sin:{group:\\\"Math\\\"},cos:{group:\\\"Math\\\"},tan:{group:\\\"Math\\\"},asin:{group:\\\"Math\\\"},acos:{group:\\\"Math\\\"},atan:{group:\\\"Math\\\"},min:{group:\\\"Math\\\"},max:{group:\\\"Math\\\"},round:{group:\\\"Math\\\"},abs:{group:\\\"Math\\\"},ceil:{group:\\\"Math\\\"},floor:{group:\\\"Math\\\"},\\\"==\\\":{group:\\\"Decision\\\"},\\\"!=\\\":{group:\\\"Decision\\\"},\\\">\\\":{group:\\\"Decision\\\"},\\\"<\\\":{group:\\\"Decision\\\"},\\\">=\\\":{group:\\\"Decision\\\"},\\\"<=\\\":{group:\\\"Decision\\\"},all:{group:\\\"Decision\\\"},any:{group:\\\"Decision\\\"},\\\"!\\\":{group:\\\"Decision\\\"},\\\"is-supported-script\\\":{group:\\\"String\\\"},upcase:{group:\\\"String\\\"},downcase:{group:\\\"String\\\"},concat:{group:\\\"String\\\"},\\\"resolved-locale\\\":{group:\\\"String\\\"}}},light:{anchor:{type:\\\"enum\\\",default:\\\"viewport\\\",values:{map:{},viewport:{}},\\\"property-type\\\":\\\"data-constant\\\",transition:!1,expression:{interpolated:!1,parameters:[\\\"zoom\\\"]}},position:{type:\\\"array\\\",default:[1.15,210,30],length:3,value:\\\"number\\\",\\\"property-type\\\":\\\"data-constant\\\",transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]}},color:{type:\\\"color\\\",\\\"property-type\\\":\\\"data-constant\\\",default:\\\"#ffffff\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},transition:!0},intensity:{type:\\\"number\\\",\\\"property-type\\\":\\\"data-constant\\\",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},transition:!0}},paint:[\\\"paint_fill\\\",\\\"paint_line\\\",\\\"paint_circle\\\",\\\"paint_heatmap\\\",\\\"paint_fill-extrusion\\\",\\\"paint_symbol\\\",\\\"paint_raster\\\",\\\"paint_hillshade\\\",\\\"paint_background\\\"],paint_fill:{\\\"fill-antialias\\\":{type:\\\"boolean\\\",default:!0,expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"fill-opacity\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"fill-color\\\":{type:\\\"color\\\",default:\\\"#000000\\\",transition:!0,requires:[{\\\"!\\\":\\\"fill-pattern\\\"}],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"fill-outline-color\\\":{type:\\\"color\\\",transition:!0,requires:[{\\\"!\\\":\\\"fill-pattern\\\"},{\\\"fill-antialias\\\":!0}],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"fill-translate\\\":{type:\\\"array\\\",value:\\\"number\\\",length:2,default:[0,0],transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"fill-translate-anchor\\\":{type:\\\"enum\\\",values:{map:{},viewport:{}},default:\\\"map\\\",requires:[\\\"fill-translate\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"fill-pattern\\\":{type:\\\"string\\\",transition:!0,expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"cross-faded-data-driven\\\"}},\\\"paint_fill-extrusion\\\":{\\\"fill-extrusion-opacity\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"fill-extrusion-color\\\":{type:\\\"color\\\",default:\\\"#000000\\\",transition:!0,requires:[{\\\"!\\\":\\\"fill-extrusion-pattern\\\"}],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"fill-extrusion-translate\\\":{type:\\\"array\\\",value:\\\"number\\\",length:2,default:[0,0],transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"fill-extrusion-translate-anchor\\\":{type:\\\"enum\\\",values:{map:{},viewport:{}},default:\\\"map\\\",requires:[\\\"fill-extrusion-translate\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"fill-extrusion-pattern\\\":{type:\\\"string\\\",transition:!0,expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"cross-faded-data-driven\\\"},\\\"fill-extrusion-height\\\":{type:\\\"number\\\",default:0,minimum:0,units:\\\"meters\\\",transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"fill-extrusion-base\\\":{type:\\\"number\\\",default:0,minimum:0,units:\\\"meters\\\",transition:!0,requires:[\\\"fill-extrusion-height\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"fill-extrusion-vertical-gradient\\\":{type:\\\"boolean\\\",default:!0,transition:!1,expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"}},paint_line:{\\\"line-opacity\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"line-color\\\":{type:\\\"color\\\",default:\\\"#000000\\\",transition:!0,requires:[{\\\"!\\\":\\\"line-pattern\\\"}],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"line-translate\\\":{type:\\\"array\\\",value:\\\"number\\\",length:2,default:[0,0],transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"line-translate-anchor\\\":{type:\\\"enum\\\",values:{map:{},viewport:{}},default:\\\"map\\\",requires:[\\\"line-translate\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"line-width\\\":{type:\\\"number\\\",default:1,minimum:0,transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"line-gap-width\\\":{type:\\\"number\\\",default:0,minimum:0,transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"line-offset\\\":{type:\\\"number\\\",default:0,transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"line-blur\\\":{type:\\\"number\\\",default:0,minimum:0,transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"line-dasharray\\\":{type:\\\"array\\\",value:\\\"number\\\",minimum:0,transition:!0,units:\\\"line widths\\\",requires:[{\\\"!\\\":\\\"line-pattern\\\"}],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"cross-faded\\\"},\\\"line-pattern\\\":{type:\\\"string\\\",transition:!0,expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]},\\\"property-type\\\":\\\"cross-faded-data-driven\\\"},\\\"line-gradient\\\":{type:\\\"color\\\",transition:!1,requires:[{\\\"!\\\":\\\"line-dasharray\\\"},{\\\"!\\\":\\\"line-pattern\\\"},{source:\\\"geojson\\\",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:[\\\"line-progress\\\"]},\\\"property-type\\\":\\\"color-ramp\\\"}},paint_circle:{\\\"circle-radius\\\":{type:\\\"number\\\",default:5,minimum:0,transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"circle-color\\\":{type:\\\"color\\\",default:\\\"#000000\\\",transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"circle-blur\\\":{type:\\\"number\\\",default:0,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"circle-opacity\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"circle-translate\\\":{type:\\\"array\\\",value:\\\"number\\\",length:2,default:[0,0],transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"circle-translate-anchor\\\":{type:\\\"enum\\\",values:{map:{},viewport:{}},default:\\\"map\\\",requires:[\\\"circle-translate\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"circle-pitch-scale\\\":{type:\\\"enum\\\",values:{map:{},viewport:{}},default:\\\"map\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"circle-pitch-alignment\\\":{type:\\\"enum\\\",values:{map:{},viewport:{}},default:\\\"viewport\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"circle-stroke-width\\\":{type:\\\"number\\\",default:0,minimum:0,transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"circle-stroke-color\\\":{type:\\\"color\\\",default:\\\"#000000\\\",transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"circle-stroke-opacity\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"}},paint_heatmap:{\\\"heatmap-radius\\\":{type:\\\"number\\\",default:30,minimum:1,transition:!0,units:\\\"pixels\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"heatmap-weight\\\":{type:\\\"number\\\",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"heatmap-intensity\\\":{type:\\\"number\\\",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"heatmap-color\\\":{type:\\\"color\\\",default:[\\\"interpolate\\\",[\\\"linear\\\"],[\\\"heatmap-density\\\"],0,\\\"rgba(0, 0, 255, 0)\\\",.1,\\\"royalblue\\\",.3,\\\"cyan\\\",.5,\\\"lime\\\",.7,\\\"yellow\\\",1,\\\"red\\\"],transition:!1,expression:{interpolated:!0,parameters:[\\\"heatmap-density\\\"]},\\\"property-type\\\":\\\"color-ramp\\\"},\\\"heatmap-opacity\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"}},paint_symbol:{\\\"icon-opacity\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,requires:[\\\"icon-image\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"icon-color\\\":{type:\\\"color\\\",default:\\\"#000000\\\",transition:!0,requires:[\\\"icon-image\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"icon-halo-color\\\":{type:\\\"color\\\",default:\\\"rgba(0, 0, 0, 0)\\\",transition:!0,requires:[\\\"icon-image\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"icon-halo-width\\\":{type:\\\"number\\\",default:0,minimum:0,transition:!0,units:\\\"pixels\\\",requires:[\\\"icon-image\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"icon-halo-blur\\\":{type:\\\"number\\\",default:0,minimum:0,transition:!0,units:\\\"pixels\\\",requires:[\\\"icon-image\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"icon-translate\\\":{type:\\\"array\\\",value:\\\"number\\\",length:2,default:[0,0],transition:!0,units:\\\"pixels\\\",requires:[\\\"icon-image\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"icon-translate-anchor\\\":{type:\\\"enum\\\",values:{map:{},viewport:{}},default:\\\"map\\\",requires:[\\\"icon-image\\\",\\\"icon-translate\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-opacity\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-color\\\":{type:\\\"color\\\",default:\\\"#000000\\\",transition:!0,requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-halo-color\\\":{type:\\\"color\\\",default:\\\"rgba(0, 0, 0, 0)\\\",transition:!0,requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-halo-width\\\":{type:\\\"number\\\",default:0,minimum:0,transition:!0,units:\\\"pixels\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-halo-blur\\\":{type:\\\"number\\\",default:0,minimum:0,transition:!0,units:\\\"pixels\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\",\\\"feature\\\",\\\"feature-state\\\"]},\\\"property-type\\\":\\\"data-driven\\\"},\\\"text-translate\\\":{type:\\\"array\\\",value:\\\"number\\\",length:2,default:[0,0],transition:!0,units:\\\"pixels\\\",requires:[\\\"text-field\\\"],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"text-translate-anchor\\\":{type:\\\"enum\\\",values:{map:{},viewport:{}},default:\\\"map\\\",requires:[\\\"text-field\\\",\\\"text-translate\\\"],expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"}},paint_raster:{\\\"raster-opacity\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"raster-hue-rotate\\\":{type:\\\"number\\\",default:0,period:360,transition:!0,units:\\\"degrees\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"raster-brightness-min\\\":{type:\\\"number\\\",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"raster-brightness-max\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"raster-saturation\\\":{type:\\\"number\\\",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"raster-contrast\\\":{type:\\\"number\\\",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"raster-resampling\\\":{type:\\\"enum\\\",values:{linear:{},nearest:{}},default:\\\"linear\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"raster-fade-duration\\\":{type:\\\"number\\\",default:300,minimum:0,transition:!1,units:\\\"milliseconds\\\",expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"}},paint_hillshade:{\\\"hillshade-illumination-direction\\\":{type:\\\"number\\\",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"hillshade-illumination-anchor\\\":{type:\\\"enum\\\",values:{map:{},viewport:{}},default:\\\"viewport\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"hillshade-exaggeration\\\":{type:\\\"number\\\",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"hillshade-shadow-color\\\":{type:\\\"color\\\",default:\\\"#000000\\\",transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"hillshade-highlight-color\\\":{type:\\\"color\\\",default:\\\"#FFFFFF\\\",transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"hillshade-accent-color\\\":{type:\\\"color\\\",default:\\\"#000000\\\",transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"}},paint_background:{\\\"background-color\\\":{type:\\\"color\\\",default:\\\"#000000\\\",transition:!0,requires:[{\\\"!\\\":\\\"background-pattern\\\"}],expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"},\\\"background-pattern\\\":{type:\\\"string\\\",transition:!0,expression:{interpolated:!1,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"cross-faded\\\"},\\\"background-opacity\\\":{type:\\\"number\\\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\\\"zoom\\\"]},\\\"property-type\\\":\\\"data-constant\\\"}},transition:{duration:{type:\\\"number\\\",default:300,minimum:0,units:\\\"milliseconds\\\"},delay:{type:\\\"number\\\",default:0,minimum:0,units:\\\"milliseconds\\\"}},\\\"property-type\\\":{\\\"data-driven\\\":{type:\\\"property-type\\\"},\\\"cross-faded\\\":{type:\\\"property-type\\\"},\\\"cross-faded-data-driven\\\":{type:\\\"property-type\\\"},\\\"color-ramp\\\":{type:\\\"property-type\\\"},\\\"data-constant\\\":{type:\\\"property-type\\\"},constant:{type:\\\"property-type\\\"}}},Dt=function(t,e,r,n){this.message=(t?t+\\\": \\\":\\\"\\\")+r,n&&(this.identifier=n),null!=e&&e.__line__&&(this.line=e.__line__)};function Rt(t){var e=t.key,r=t.value;return r?[new Dt(e,r,\\\"constants have been deprecated as of v8\\\")]:[]}function Ft(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];for(var n=0,i=e;n<i.length;n+=1){var a=i[n];for(var o in a)t[o]=a[o]}return t}function Bt(t){return t instanceof Number||t instanceof String||t instanceof Boolean}function Nt(t){return Bt(t)?t.valueOf():t}function jt(t){if(Array.isArray(t))return t.map(jt);if(t instanceof Object&&!Bt(t)){var e={};for(var r in t)e[r]=jt(t[r]);return e}return Nt(t)}var Ut=function(t){function e(e,r){t.call(this,r),this.message=r,this.key=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error),Vt=function(t,e){void 0===e&&(e=[]),this.parent=t,this.bindings={};for(var r=0,n=e;r<n.length;r+=1){var i=n[r],a=i[0],o=i[1];this.bindings[a]=o}};Vt.prototype.concat=function(t){return new Vt(this,t)},Vt.prototype.get=function(t){if(this.bindings[t])return this.bindings[t];if(this.parent)return this.parent.get(t);throw new Error(t+\\\" not found in scope.\\\")},Vt.prototype.has=function(t){return!!this.bindings[t]||!!this.parent&&this.parent.has(t)};var qt={kind:\\\"null\\\"},Ht={kind:\\\"number\\\"},Gt={kind:\\\"string\\\"},Yt={kind:\\\"boolean\\\"},Wt={kind:\\\"color\\\"},Xt={kind:\\\"object\\\"},Zt={kind:\\\"value\\\"},Jt={kind:\\\"collator\\\"},Kt={kind:\\\"formatted\\\"};function $t(t,e){return{kind:\\\"array\\\",itemType:t,N:e}}function Qt(t){if(\\\"array\\\"===t.kind){var e=Qt(t.itemType);return\\\"number\\\"==typeof t.N?\\\"array<\\\"+e+\\\", \\\"+t.N+\\\">\\\":\\\"value\\\"===t.itemType.kind?\\\"array\\\":\\\"array<\\\"+e+\\\">\\\"}return t.kind}var te=[qt,Ht,Gt,Yt,Wt,Kt,Xt,$t(Zt)];function ee(t,e){if(\\\"error\\\"===e.kind)return null;if(\\\"array\\\"===t.kind){if(\\\"array\\\"===e.kind&&(0===e.N&&\\\"value\\\"===e.itemType.kind||!ee(t.itemType,e.itemType))&&(\\\"number\\\"!=typeof t.N||t.N===e.N))return null}else{if(t.kind===e.kind)return null;if(\\\"value\\\"===t.kind)for(var r=0,n=te;r<n.length;r+=1)if(!ee(n[r],e))return null}return\\\"Expected \\\"+Qt(t)+\\\" but found \\\"+Qt(e)+\\\" instead.\\\"}var re=e(function(t,e){var r={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],rebeccapurple:[102,51,153,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function n(t){return(t=Math.round(t))<0?0:t>255?255:t}function i(t){return t<0?0:t>1?1:t}function a(t){return\\\"%\\\"===t[t.length-1]?n(parseFloat(t)/100*255):n(parseInt(t))}function o(t){return\\\"%\\\"===t[t.length-1]?i(parseFloat(t)/100):i(parseFloat(t))}function s(t,e,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?t+(e-t)*r*6:2*r<1?e:3*r<2?t+(e-t)*(2/3-r)*6:t}try{e.parseCSSColor=function(t){var e,i=t.replace(/ /g,\\\"\\\").toLowerCase();if(i in r)return r[i].slice();if(\\\"#\\\"===i[0])return 4===i.length?(e=parseInt(i.substr(1),16))>=0&&e<=4095?[(3840&e)>>4|(3840&e)>>8,240&e|(240&e)>>4,15&e|(15&e)<<4,1]:null:7===i.length&&(e=parseInt(i.substr(1),16))>=0&&e<=16777215?[(16711680&e)>>16,(65280&e)>>8,255&e,1]:null;var l=i.indexOf(\\\"(\\\"),c=i.indexOf(\\\")\\\");if(-1!==l&&c+1===i.length){var u=i.substr(0,l),h=i.substr(l+1,c-(l+1)).split(\\\",\\\"),f=1;switch(u){case\\\"rgba\\\":if(4!==h.length)return null;f=o(h.pop());case\\\"rgb\\\":return 3!==h.length?null:[a(h[0]),a(h[1]),a(h[2]),f];case\\\"hsla\\\":if(4!==h.length)return null;f=o(h.pop());case\\\"hsl\\\":if(3!==h.length)return null;var p=(parseFloat(h[0])%360+360)%360/360,d=o(h[1]),g=o(h[2]),v=g<=.5?g*(d+1):g+d-g*d,m=2*g-v;return[n(255*s(m,v,p+1/3)),n(255*s(m,v,p)),n(255*s(m,v,p-1/3)),f];default:return null}}return null}}catch(t){}}).parseCSSColor,ne=function(t,e,r,n){void 0===n&&(n=1),this.r=t,this.g=e,this.b=r,this.a=n};ne.parse=function(t){if(t){if(t instanceof ne)return t;if(\\\"string\\\"==typeof t){var e=re(t);if(e)return new ne(e[0]/255*e[3],e[1]/255*e[3],e[2]/255*e[3],e[3])}}},ne.prototype.toString=function(){var t=this.toArray(),e=t[0],r=t[1],n=t[2],i=t[3];return\\\"rgba(\\\"+Math.round(e)+\\\",\\\"+Math.round(r)+\\\",\\\"+Math.round(n)+\\\",\\\"+i+\\\")\\\"},ne.prototype.toArray=function(){var t=this.r,e=this.g,r=this.b,n=this.a;return 0===n?[0,0,0,0]:[255*t/n,255*e/n,255*r/n,n]},ne.black=new ne(0,0,0,1),ne.white=new ne(1,1,1,1),ne.transparent=new ne(0,0,0,0),ne.red=new ne(1,0,0,1);var ie=function(t,e,r){this.sensitivity=t?e?\\\"variant\\\":\\\"case\\\":e?\\\"accent\\\":\\\"base\\\",this.locale=r,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:\\\"search\\\"})};ie.prototype.compare=function(t,e){return this.collator.compare(t,e)},ie.prototype.resolvedLocale=function(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale};var ae=function(t,e,r){this.text=t,this.scale=e,this.fontStack=r},oe=function(t){this.sections=t};function se(t,e,r,n){return\\\"number\\\"==typeof t&&t>=0&&t<=255&&\\\"number\\\"==typeof e&&e>=0&&e<=255&&\\\"number\\\"==typeof r&&r>=0&&r<=255?void 0===n||\\\"number\\\"==typeof n&&n>=0&&n<=1?null:\\\"Invalid rgba value [\\\"+[t,e,r,n].join(\\\", \\\")+\\\"]: 'a' must be between 0 and 1.\\\":\\\"Invalid rgba value [\\\"+(\\\"number\\\"==typeof n?[t,e,r,n]:[t,e,r]).join(\\\", \\\")+\\\"]: 'r', 'g', and 'b' must be between 0 and 255.\\\"}function le(t){if(null===t)return qt;if(\\\"string\\\"==typeof t)return Gt;if(\\\"boolean\\\"==typeof t)return Yt;if(\\\"number\\\"==typeof t)return Ht;if(t instanceof ne)return Wt;if(t instanceof ie)return Jt;if(t instanceof oe)return Kt;if(Array.isArray(t)){for(var e,r=t.length,n=0,i=t;n<i.length;n+=1){var a=le(i[n]);if(e){if(e===a)continue;e=Zt;break}e=a}return $t(e||Zt,r)}return Xt}function ce(t){var e=typeof t;return null===t?\\\"\\\":\\\"string\\\"===e||\\\"number\\\"===e||\\\"boolean\\\"===e?String(t):t instanceof ne||t instanceof oe?t.toString():JSON.stringify(t)}oe.fromString=function(t){return new oe([new ae(t,null,null)])},oe.prototype.toString=function(){return this.sections.map(function(t){return t.text}).join(\\\"\\\")},oe.prototype.serialize=function(){for(var t=[\\\"format\\\"],e=0,r=this.sections;e<r.length;e+=1){var n=r[e];t.push(n.text);var i={};n.fontStack&&(i[\\\"text-font\\\"]=[\\\"literal\\\",n.fontStack.split(\\\",\\\")]),n.scale&&(i[\\\"font-scale\\\"]=n.scale),t.push(i)}return t};var ue=function(t,e){this.type=t,this.value=e};ue.parse=function(t,e){if(2!==t.length)return e.error(\\\"'literal' expression requires exactly one argument, but found \\\"+(t.length-1)+\\\" instead.\\\");if(!function t(e){if(null===e)return!0;if(\\\"string\\\"==typeof e)return!0;if(\\\"boolean\\\"==typeof e)return!0;if(\\\"number\\\"==typeof e)return!0;if(e instanceof ne)return!0;if(e instanceof ie)return!0;if(e instanceof oe)return!0;if(Array.isArray(e)){for(var r=0,n=e;r<n.length;r+=1)if(!t(n[r]))return!1;return!0}if(\\\"object\\\"==typeof e){for(var i in e)if(!t(e[i]))return!1;return!0}return!1}(t[1]))return e.error(\\\"invalid value\\\");var r=t[1],n=le(r),i=e.expectedType;return\\\"array\\\"!==n.kind||0!==n.N||!i||\\\"array\\\"!==i.kind||\\\"number\\\"==typeof i.N&&0!==i.N||(n=i),new ue(n,r)},ue.prototype.evaluate=function(){return this.value},ue.prototype.eachChild=function(){},ue.prototype.possibleOutputs=function(){return[this.value]},ue.prototype.serialize=function(){return\\\"array\\\"===this.type.kind||\\\"object\\\"===this.type.kind?[\\\"literal\\\",this.value]:this.value instanceof ne?[\\\"rgba\\\"].concat(this.value.toArray()):this.value instanceof oe?this.value.serialize():this.value};var he=function(t){this.name=\\\"ExpressionEvaluationError\\\",this.message=t};he.prototype.toJSON=function(){return this.message};var fe={string:Gt,number:Ht,boolean:Yt,object:Xt},pe=function(t,e){this.type=t,this.args=e};pe.parse=function(t,e){if(t.length<2)return e.error(\\\"Expected at least one argument.\\\");var r,n=1,i=t[0];if(\\\"array\\\"===i){var a,o;if(t.length>2){var s=t[1];if(\\\"string\\\"!=typeof s||!(s in fe)||\\\"object\\\"===s)return e.error('The item type argument of \\\"array\\\" must be one of string, number, boolean',1);a=fe[s],n++}else a=Zt;if(t.length>3){if(null!==t[2]&&(\\\"number\\\"!=typeof t[2]||t[2]<0||t[2]!==Math.floor(t[2])))return e.error('The length argument to \\\"array\\\" must be a positive integer literal',2);o=t[2],n++}r=$t(a,o)}else r=fe[i];for(var l=[];n<t.length;n++){var c=e.parse(t[n],n,Zt);if(!c)return null;l.push(c)}return new pe(r,l)},pe.prototype.evaluate=function(t){for(var e=0;e<this.args.length;e++){var r=this.args[e].evaluate(t);if(!ee(this.type,le(r)))return r;if(e===this.args.length-1)throw new he(\\\"Expected value to be of type \\\"+Qt(this.type)+\\\", but found \\\"+Qt(le(r))+\\\" instead.\\\")}return null},pe.prototype.eachChild=function(t){this.args.forEach(t)},pe.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.args.map(function(t){return t.possibleOutputs()}))},pe.prototype.serialize=function(){var t=this.type,e=[t.kind];if(\\\"array\\\"===t.kind){var r=t.itemType;if(\\\"string\\\"===r.kind||\\\"number\\\"===r.kind||\\\"boolean\\\"===r.kind){e.push(r.kind);var n=t.N;(\\\"number\\\"==typeof n||this.args.length>1)&&e.push(n)}}return e.concat(this.args.map(function(t){return t.serialize()}))};var de=function(t){this.type=Kt,this.sections=t};de.parse=function(t,e){if(t.length<3)return e.error(\\\"Expected at least two arguments.\\\");if((t.length-1)%2!=0)return e.error(\\\"Expected an even number of arguments.\\\");for(var r=[],n=1;n<t.length-1;n+=2){var i=e.parse(t[n],1,Zt);if(!i)return null;var a=i.type.kind;if(\\\"string\\\"!==a&&\\\"value\\\"!==a&&\\\"null\\\"!==a)return e.error(\\\"Formatted text type must be 'string', 'value', or 'null'.\\\");var o=t[n+1];if(\\\"object\\\"!=typeof o||Array.isArray(o))return e.error(\\\"Format options argument must be an object.\\\");var s=null;if(o[\\\"font-scale\\\"]&&!(s=e.parse(o[\\\"font-scale\\\"],1,Ht)))return null;var l=null;if(o[\\\"text-font\\\"]&&!(l=e.parse(o[\\\"text-font\\\"],1,$t(Gt))))return null;r.push({text:i,scale:s,font:l})}return new de(r)},de.prototype.evaluate=function(t){return new oe(this.sections.map(function(e){return new ae(ce(e.text.evaluate(t)),e.scale?e.scale.evaluate(t):null,e.font?e.font.evaluate(t).join(\\\",\\\"):null)}))},de.prototype.eachChild=function(t){for(var e=0,r=this.sections;e<r.length;e+=1){var n=r[e];t(n.text),n.scale&&t(n.scale),n.font&&t(n.font)}},de.prototype.possibleOutputs=function(){return[void 0]},de.prototype.serialize=function(){for(var t=[\\\"format\\\"],e=0,r=this.sections;e<r.length;e+=1){var n=r[e];t.push(n.text.serialize());var i={};n.scale&&(i[\\\"font-scale\\\"]=n.scale.serialize()),n.font&&(i[\\\"text-font\\\"]=n.font.serialize()),t.push(i)}return t};var ge={\\\"to-boolean\\\":Yt,\\\"to-color\\\":Wt,\\\"to-number\\\":Ht,\\\"to-string\\\":Gt},ve=function(t,e){this.type=t,this.args=e};ve.parse=function(t,e){if(t.length<2)return e.error(\\\"Expected at least one argument.\\\");var r=t[0];if((\\\"to-boolean\\\"===r||\\\"to-string\\\"===r)&&2!==t.length)return e.error(\\\"Expected one argument.\\\");for(var n=ge[r],i=[],a=1;a<t.length;a++){var o=e.parse(t[a],a,Zt);if(!o)return null;i.push(o)}return new ve(n,i)},ve.prototype.evaluate=function(t){if(\\\"boolean\\\"===this.type.kind)return Boolean(this.args[0].evaluate(t));if(\\\"color\\\"===this.type.kind){for(var e,r,n=0,i=this.args;n<i.length;n+=1){if(r=null,(e=i[n].evaluate(t))instanceof ne)return e;if(\\\"string\\\"==typeof e){var a=t.parseColor(e);if(a)return a}else if(Array.isArray(e)&&!(r=e.length<3||e.length>4?\\\"Invalid rbga value \\\"+JSON.stringify(e)+\\\": expected an array containing either three or four numeric values.\\\":se(e[0],e[1],e[2],e[3])))return new ne(e[0]/255,e[1]/255,e[2]/255,e[3])}throw new he(r||\\\"Could not parse color from value '\\\"+(\\\"string\\\"==typeof e?e:String(JSON.stringify(e)))+\\\"'\\\")}if(\\\"number\\\"===this.type.kind){for(var o=null,s=0,l=this.args;s<l.length;s+=1){if(null===(o=l[s].evaluate(t)))return 0;var c=Number(o);if(!isNaN(c))return c}throw new he(\\\"Could not convert \\\"+JSON.stringify(o)+\\\" to number.\\\")}return\\\"formatted\\\"===this.type.kind?oe.fromString(ce(this.args[0].evaluate(t))):ce(this.args[0].evaluate(t))},ve.prototype.eachChild=function(t){this.args.forEach(t)},ve.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.args.map(function(t){return t.possibleOutputs()}))},ve.prototype.serialize=function(){if(\\\"formatted\\\"===this.type.kind)return new de([{text:this.args[0],scale:null,font:null}]).serialize();var t=[\\\"to-\\\"+this.type.kind];return this.eachChild(function(e){t.push(e.serialize())}),t};var me=[\\\"Unknown\\\",\\\"Point\\\",\\\"LineString\\\",\\\"Polygon\\\"],ye=function(){this.globals=null,this.feature=null,this.featureState=null,this._parseColorCache={}};ye.prototype.id=function(){return this.feature&&\\\"id\\\"in this.feature?this.feature.id:null},ye.prototype.geometryType=function(){return this.feature?\\\"number\\\"==typeof this.feature.type?me[this.feature.type]:this.feature.type:null},ye.prototype.properties=function(){return this.feature&&this.feature.properties||{}},ye.prototype.parseColor=function(t){var e=this._parseColorCache[t];return e||(e=this._parseColorCache[t]=ne.parse(t)),e};var xe=function(t,e,r,n){this.name=t,this.type=e,this._evaluate=r,this.args=n};xe.prototype.evaluate=function(t){return this._evaluate(t,this.args)},xe.prototype.eachChild=function(t){this.args.forEach(t)},xe.prototype.possibleOutputs=function(){return[void 0]},xe.prototype.serialize=function(){return[this.name].concat(this.args.map(function(t){return t.serialize()}))},xe.parse=function(t,e){var r,n=t[0],i=xe.definitions[n];if(!i)return e.error('Unknown expression \\\"'+n+'\\\". If you wanted a literal array, use [\\\"literal\\\", [...]].',0);for(var a=Array.isArray(i)?i[0]:i.type,o=Array.isArray(i)?[[i[1],i[2]]]:i.overloads,s=o.filter(function(e){var r=e[0];return!Array.isArray(r)||r.length===t.length-1}),l=null,c=0,u=s;c<u.length;c+=1){var h=u[c],f=h[0],p=h[1];l=new Ae(e.registry,e.path,null,e.scope);for(var d=[],g=!1,v=1;v<t.length;v++){var m=t[v],y=Array.isArray(f)?f[v-1]:f.type,x=l.parse(m,1+d.length,y);if(!x){g=!0;break}d.push(x)}if(!g)if(Array.isArray(f)&&f.length!==d.length)l.error(\\\"Expected \\\"+f.length+\\\" arguments, but found \\\"+d.length+\\\" instead.\\\");else{for(var b=0;b<d.length;b++){var _=Array.isArray(f)?f[b]:f.type,w=d[b];l.concat(b+1).checkSubtype(_,w.type)}if(0===l.errors.length)return new xe(n,a,p,d)}}if(1===s.length)(r=e.errors).push.apply(r,l.errors);else{for(var k=(s.length?s:o).map(function(t){var e;return e=t[0],Array.isArray(e)?\\\"(\\\"+e.map(Qt).join(\\\", \\\")+\\\")\\\":\\\"(\\\"+Qt(e.type)+\\\"...)\\\"}).join(\\\" | \\\"),T=[],A=1;A<t.length;A++){var M=e.parse(t[A],1+T.length);if(!M)return null;T.push(Qt(M.type))}e.error(\\\"Expected arguments of type \\\"+k+\\\", but found (\\\"+T.join(\\\", \\\")+\\\") instead.\\\")}return null},xe.register=function(t,e){for(var r in xe.definitions=e,e)t[r]=xe};var be=function(t,e,r){this.type=Jt,this.locale=r,this.caseSensitive=t,this.diacriticSensitive=e};function _e(t){if(t instanceof xe){if(\\\"get\\\"===t.name&&1===t.args.length)return!1;if(\\\"feature-state\\\"===t.name)return!1;if(\\\"has\\\"===t.name&&1===t.args.length)return!1;if(\\\"properties\\\"===t.name||\\\"geometry-type\\\"===t.name||\\\"id\\\"===t.name)return!1;if(/^filter-/.test(t.name))return!1}var e=!0;return t.eachChild(function(t){e&&!_e(t)&&(e=!1)}),e}function we(t){if(t instanceof xe&&\\\"feature-state\\\"===t.name)return!1;var e=!0;return t.eachChild(function(t){e&&!we(t)&&(e=!1)}),e}function ke(t,e){if(t instanceof xe&&e.indexOf(t.name)>=0)return!1;var r=!0;return t.eachChild(function(t){r&&!ke(t,e)&&(r=!1)}),r}be.parse=function(t,e){if(2!==t.length)return e.error(\\\"Expected one argument.\\\");var r=t[1];if(\\\"object\\\"!=typeof r||Array.isArray(r))return e.error(\\\"Collator options argument must be an object.\\\");var n=e.parse(void 0!==r[\\\"case-sensitive\\\"]&&r[\\\"case-sensitive\\\"],1,Yt);if(!n)return null;var i=e.parse(void 0!==r[\\\"diacritic-sensitive\\\"]&&r[\\\"diacritic-sensitive\\\"],1,Yt);if(!i)return null;var a=null;return r.locale&&!(a=e.parse(r.locale,1,Gt))?null:new be(n,i,a)},be.prototype.evaluate=function(t){return new ie(this.caseSensitive.evaluate(t),this.diacriticSensitive.evaluate(t),this.locale?this.locale.evaluate(t):null)},be.prototype.eachChild=function(t){t(this.caseSensitive),t(this.diacriticSensitive),this.locale&&t(this.locale)},be.prototype.possibleOutputs=function(){return[void 0]},be.prototype.serialize=function(){var t={};return t[\\\"case-sensitive\\\"]=this.caseSensitive.serialize(),t[\\\"diacritic-sensitive\\\"]=this.diacriticSensitive.serialize(),this.locale&&(t.locale=this.locale.serialize()),[\\\"collator\\\",t]};var Te=function(t,e){this.type=e.type,this.name=t,this.boundExpression=e};Te.parse=function(t,e){if(2!==t.length||\\\"string\\\"!=typeof t[1])return e.error(\\\"'var' expression requires exactly one string literal argument.\\\");var r=t[1];return e.scope.has(r)?new Te(r,e.scope.get(r)):e.error('Unknown variable \\\"'+r+'\\\". Make sure \\\"'+r+'\\\" has been bound in an enclosing \\\"let\\\" expression before using it.',1)},Te.prototype.evaluate=function(t){return this.boundExpression.evaluate(t)},Te.prototype.eachChild=function(){},Te.prototype.possibleOutputs=function(){return[void 0]},Te.prototype.serialize=function(){return[\\\"var\\\",this.name]};var Ae=function(t,e,r,n,i){void 0===e&&(e=[]),void 0===n&&(n=new Vt),void 0===i&&(i=[]),this.registry=t,this.path=e,this.key=e.map(function(t){return\\\"[\\\"+t+\\\"]\\\"}).join(\\\"\\\"),this.scope=n,this.errors=i,this.expectedType=r};function Me(t,e){for(var r,n,i=t.length-1,a=0,o=i,s=0;a<=o;)if(r=t[s=Math.floor((a+o)/2)],n=t[s+1],r<=e){if(s===i||e<n)return s;a=s+1}else{if(!(r>e))throw new he(\\\"Input is not a number.\\\");o=s-1}return 0}Ae.prototype.parse=function(t,e,r,n,i){return void 0===i&&(i={}),e?this.concat(e,r,n)._parse(t,i):this._parse(t,i)},Ae.prototype._parse=function(t,e){function r(t,e,r){return\\\"assert\\\"===r?new pe(e,[t]):\\\"coerce\\\"===r?new ve(e,[t]):t}if(null!==t&&\\\"string\\\"!=typeof t&&\\\"boolean\\\"!=typeof t&&\\\"number\\\"!=typeof t||(t=[\\\"literal\\\",t]),Array.isArray(t)){if(0===t.length)return this.error('Expected an array with at least one element. If you wanted a literal array, use [\\\"literal\\\", []].');var n=t[0];if(\\\"string\\\"!=typeof n)return this.error(\\\"Expression name must be a string, but found \\\"+typeof n+' instead. If you wanted a literal array, use [\\\"literal\\\", [...]].',0),null;var i=this.registry[n];if(i){var a=i.parse(t,this);if(!a)return null;if(this.expectedType){var o=this.expectedType,s=a.type;if(\\\"string\\\"!==o.kind&&\\\"number\\\"!==o.kind&&\\\"boolean\\\"!==o.kind&&\\\"object\\\"!==o.kind&&\\\"array\\\"!==o.kind||\\\"value\\\"!==s.kind)if(\\\"color\\\"!==o.kind&&\\\"formatted\\\"!==o.kind||\\\"value\\\"!==s.kind&&\\\"string\\\"!==s.kind){if(this.checkSubtype(o,s))return null}else a=r(a,o,e.typeAnnotation||\\\"coerce\\\");else a=r(a,o,e.typeAnnotation||\\\"assert\\\")}if(!(a instanceof ue)&&function t(e){if(e instanceof Te)return t(e.boundExpression);if(e instanceof xe&&\\\"error\\\"===e.name)return!1;if(e instanceof be)return!1;var r=e instanceof ve||e instanceof pe,n=!0;return e.eachChild(function(e){n=r?n&&t(e):n&&e instanceof ue}),!!n&&(_e(e)&&ke(e,[\\\"zoom\\\",\\\"heatmap-density\\\",\\\"line-progress\\\",\\\"accumulated\\\",\\\"is-supported-script\\\"]))}(a)){var l=new ye;try{a=new ue(a.type,a.evaluate(l))}catch(t){return this.error(t.message),null}}return a}return this.error('Unknown expression \\\"'+n+'\\\". If you wanted a literal array, use [\\\"literal\\\", [...]].',0)}return void 0===t?this.error(\\\"'undefined' value invalid. Use null instead.\\\"):\\\"object\\\"==typeof t?this.error('Bare objects invalid. Use [\\\"literal\\\", {...}] instead.'):this.error(\\\"Expected an array, but found \\\"+typeof t+\\\" instead.\\\")},Ae.prototype.concat=function(t,e,r){var n=\\\"number\\\"==typeof t?this.path.concat(t):this.path,i=r?this.scope.concat(r):this.scope;return new Ae(this.registry,n,e||null,i,this.errors)},Ae.prototype.error=function(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];var n=\\\"\\\"+this.key+e.map(function(t){return\\\"[\\\"+t+\\\"]\\\"}).join(\\\"\\\");this.errors.push(new Ut(n,t))},Ae.prototype.checkSubtype=function(t,e){var r=ee(t,e);return r&&this.error(r),r};var Se=function(t,e,r){this.type=t,this.input=e,this.labels=[],this.outputs=[];for(var n=0,i=r;n<i.length;n+=1){var a=i[n],o=a[0],s=a[1];this.labels.push(o),this.outputs.push(s)}};function Ee(t,e,r){return t*(1-r)+e*r}Se.parse=function(t,e){if(t.length-1<4)return e.error(\\\"Expected at least 4 arguments, but found only \\\"+(t.length-1)+\\\".\\\");if((t.length-1)%2!=0)return e.error(\\\"Expected an even number of arguments.\\\");var r=e.parse(t[1],1,Ht);if(!r)return null;var n=[],i=null;e.expectedType&&\\\"value\\\"!==e.expectedType.kind&&(i=e.expectedType);for(var a=1;a<t.length;a+=2){var o=1===a?-1/0:t[a],s=t[a+1],l=a,c=a+1;if(\\\"number\\\"!=typeof o)return e.error('Input/output pairs for \\\"step\\\" expressions must be defined using literal numeric values (not computed expressions) for the input values.',l);if(n.length&&n[n.length-1][0]>=o)return e.error('Input/output pairs for \\\"step\\\" expressions must be arranged with input values in strictly ascending order.',l);var u=e.parse(s,c,i);if(!u)return null;i=i||u.type,n.push([o,u])}return new Se(i,r,n)},Se.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);var i=e.length;return n>=e[i-1]?r[i-1].evaluate(t):r[Me(e,n)].evaluate(t)},Se.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e<r.length;e+=1)t(r[e])},Se.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.outputs.map(function(t){return t.possibleOutputs()}))},Se.prototype.serialize=function(){for(var t=[\\\"step\\\",this.input.serialize()],e=0;e<this.labels.length;e++)e>0&&t.push(this.labels[e]),t.push(this.outputs[e].serialize());return t};var Ce=Object.freeze({number:Ee,color:function(t,e,r){return new ne(Ee(t.r,e.r,r),Ee(t.g,e.g,r),Ee(t.b,e.b,r),Ee(t.a,e.a,r))},array:function(t,e,r){return t.map(function(t,n){return Ee(t,e[n],r)})}}),Le=.95047,Pe=1,Oe=1.08883,ze=4/29,Ie=6/29,De=3*Ie*Ie,Re=Ie*Ie*Ie,Fe=Math.PI/180,Be=180/Math.PI;function Ne(t){return t>Re?Math.pow(t,1/3):t/De+ze}function je(t){return t>Ie?t*t*t:De*(t-ze)}function Ue(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Ve(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function qe(t){var e=Ve(t.r),r=Ve(t.g),n=Ve(t.b),i=Ne((.4124564*e+.3575761*r+.1804375*n)/Le),a=Ne((.2126729*e+.7151522*r+.072175*n)/Pe);return{l:116*a-16,a:500*(i-a),b:200*(a-Ne((.0193339*e+.119192*r+.9503041*n)/Oe)),alpha:t.a}}function He(t){var e=(t.l+16)/116,r=isNaN(t.a)?e:e+t.a/500,n=isNaN(t.b)?e:e-t.b/200;return e=Pe*je(e),r=Le*je(r),n=Oe*je(n),new ne(Ue(3.2404542*r-1.5371385*e-.4985314*n),Ue(-.969266*r+1.8760108*e+.041556*n),Ue(.0556434*r-.2040259*e+1.0572252*n),t.alpha)}var Ge={forward:qe,reverse:He,interpolate:function(t,e,r){return{l:Ee(t.l,e.l,r),a:Ee(t.a,e.a,r),b:Ee(t.b,e.b,r),alpha:Ee(t.alpha,e.alpha,r)}}},Ye={forward:function(t){var e=qe(t),r=e.l,n=e.a,i=e.b,a=Math.atan2(i,n)*Be;return{h:a<0?a+360:a,c:Math.sqrt(n*n+i*i),l:r,alpha:t.a}},reverse:function(t){var e=t.h*Fe,r=t.c;return He({l:t.l,a:Math.cos(e)*r,b:Math.sin(e)*r,alpha:t.alpha})},interpolate:function(t,e,r){return{h:function(t,e,r){var n=e-t;return t+r*(n>180||n<-180?n-360*Math.round(n/360):n)}(t.h,e.h,r),c:Ee(t.c,e.c,r),l:Ee(t.l,e.l,r),alpha:Ee(t.alpha,e.alpha,r)}}},We=Object.freeze({lab:Ge,hcl:Ye}),Xe=function(t,e,r,n,i){this.type=t,this.operator=e,this.interpolation=r,this.input=n,this.labels=[],this.outputs=[];for(var a=0,o=i;a<o.length;a+=1){var s=o[a],l=s[0],c=s[1];this.labels.push(l),this.outputs.push(c)}};function Ze(t,e,r,n){var i=n-r,a=t-r;return 0===i?0:1===e?a/i:(Math.pow(e,a)-1)/(Math.pow(e,i)-1)}Xe.interpolationFactor=function(t,e,n,i){var a=0;if(\\\"exponential\\\"===t.name)a=Ze(e,t.base,n,i);else if(\\\"linear\\\"===t.name)a=Ze(e,1,n,i);else if(\\\"cubic-bezier\\\"===t.name){var o=t.controlPoints;a=new r(o[0],o[1],o[2],o[3]).solve(Ze(e,1,n,i))}return a},Xe.parse=function(t,e){var r=t[0],n=t[1],i=t[2],a=t.slice(3);if(!Array.isArray(n)||0===n.length)return e.error(\\\"Expected an interpolation type expression.\\\",1);if(\\\"linear\\\"===n[0])n={name:\\\"linear\\\"};else if(\\\"exponential\\\"===n[0]){var o=n[1];if(\\\"number\\\"!=typeof o)return e.error(\\\"Exponential interpolation requires a numeric base.\\\",1,1);n={name:\\\"exponential\\\",base:o}}else{if(\\\"cubic-bezier\\\"!==n[0])return e.error(\\\"Unknown interpolation type \\\"+String(n[0]),1,0);var s=n.slice(1);if(4!==s.length||s.some(function(t){return\\\"number\\\"!=typeof t||t<0||t>1}))return e.error(\\\"Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.\\\",1);n={name:\\\"cubic-bezier\\\",controlPoints:s}}if(t.length-1<4)return e.error(\\\"Expected at least 4 arguments, but found only \\\"+(t.length-1)+\\\".\\\");if((t.length-1)%2!=0)return e.error(\\\"Expected an even number of arguments.\\\");if(!(i=e.parse(i,2,Ht)))return null;var l=[],c=null;\\\"interpolate-hcl\\\"===r||\\\"interpolate-lab\\\"===r?c=Wt:e.expectedType&&\\\"value\\\"!==e.expectedType.kind&&(c=e.expectedType);for(var u=0;u<a.length;u+=2){var h=a[u],f=a[u+1],p=u+3,d=u+4;if(\\\"number\\\"!=typeof h)return e.error('Input/output pairs for \\\"interpolate\\\" expressions must be defined using literal numeric values (not computed expressions) for the input values.',p);if(l.length&&l[l.length-1][0]>=h)return e.error('Input/output pairs for \\\"interpolate\\\" expressions must be arranged with input values in strictly ascending order.',p);var g=e.parse(f,d,c);if(!g)return null;c=c||g.type,l.push([h,g])}return\\\"number\\\"===c.kind||\\\"color\\\"===c.kind||\\\"array\\\"===c.kind&&\\\"number\\\"===c.itemType.kind&&\\\"number\\\"==typeof c.N?new Xe(c,r,n,i,l):e.error(\\\"Type \\\"+Qt(c)+\\\" is not interpolatable.\\\")},Xe.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);var i=e.length;if(n>=e[i-1])return r[i-1].evaluate(t);var a=Me(e,n),o=e[a],s=e[a+1],l=Xe.interpolationFactor(this.interpolation,n,o,s),c=r[a].evaluate(t),u=r[a+1].evaluate(t);return\\\"interpolate\\\"===this.operator?Ce[this.type.kind.toLowerCase()](c,u,l):\\\"interpolate-hcl\\\"===this.operator?Ye.reverse(Ye.interpolate(Ye.forward(c),Ye.forward(u),l)):Ge.reverse(Ge.interpolate(Ge.forward(c),Ge.forward(u),l))},Xe.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e<r.length;e+=1)t(r[e])},Xe.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.outputs.map(function(t){return t.possibleOutputs()}))},Xe.prototype.serialize=function(){var t;t=\\\"linear\\\"===this.interpolation.name?[\\\"linear\\\"]:\\\"exponential\\\"===this.interpolation.name?1===this.interpolation.base?[\\\"linear\\\"]:[\\\"exponential\\\",this.interpolation.base]:[\\\"cubic-bezier\\\"].concat(this.interpolation.controlPoints);for(var e=[this.operator,t,this.input.serialize()],r=0;r<this.labels.length;r++)e.push(this.labels[r],this.outputs[r].serialize());return e};var Je=function(t,e){this.type=t,this.args=e};Je.parse=function(t,e){if(t.length<2)return e.error(\\\"Expectected at least one argument.\\\");var r=null,n=e.expectedType;n&&\\\"value\\\"!==n.kind&&(r=n);for(var i=[],a=0,o=t.slice(1);a<o.length;a+=1){var s=o[a],l=e.parse(s,1+i.length,r,void 0,{typeAnnotation:\\\"omit\\\"});if(!l)return null;r=r||l.type,i.push(l)}var c=n&&i.some(function(t){return ee(n,t.type)});return new Je(c?Zt:r,i)},Je.prototype.evaluate=function(t){for(var e=null,r=0,n=this.args;r<n.length&&null===(e=n[r].evaluate(t));r+=1);return e},Je.prototype.eachChild=function(t){this.args.forEach(t)},Je.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.args.map(function(t){return t.possibleOutputs()}))},Je.prototype.serialize=function(){var t=[\\\"coalesce\\\"];return this.eachChild(function(e){t.push(e.serialize())}),t};var Ke=function(t,e){this.type=e.type,this.bindings=[].concat(t),this.result=e};Ke.prototype.evaluate=function(t){return this.result.evaluate(t)},Ke.prototype.eachChild=function(t){for(var e=0,r=this.bindings;e<r.length;e+=1)t(r[e][1]);t(this.result)},Ke.parse=function(t,e){if(t.length<4)return e.error(\\\"Expected at least 3 arguments, but found \\\"+(t.length-1)+\\\" instead.\\\");for(var r=[],n=1;n<t.length-1;n+=2){var i=t[n];if(\\\"string\\\"!=typeof i)return e.error(\\\"Expected string, but found \\\"+typeof i+\\\" instead.\\\",n);if(/[^a-zA-Z0-9_]/.test(i))return e.error(\\\"Variable names must contain only alphanumeric characters or '_'.\\\",n);var a=e.parse(t[n+1],n+1);if(!a)return null;r.push([i,a])}var o=e.parse(t[t.length-1],t.length-1,e.expectedType,r);return o?new Ke(r,o):null},Ke.prototype.possibleOutputs=function(){return this.result.possibleOutputs()},Ke.prototype.serialize=function(){for(var t=[\\\"let\\\"],e=0,r=this.bindings;e<r.length;e+=1){var n=r[e],i=n[0],a=n[1];t.push(i,a.serialize())}return t.push(this.result.serialize()),t};var $e=function(t,e,r){this.type=t,this.index=e,this.input=r};$e.parse=function(t,e){if(3!==t.length)return e.error(\\\"Expected 2 arguments, but found \\\"+(t.length-1)+\\\" instead.\\\");var r=e.parse(t[1],1,Ht),n=e.parse(t[2],2,$t(e.expectedType||Zt));if(!r||!n)return null;var i=n.type;return new $e(i.itemType,r,n)},$e.prototype.evaluate=function(t){var e=this.index.evaluate(t),r=this.input.evaluate(t);if(e<0)throw new he(\\\"Array index out of bounds: \\\"+e+\\\" < 0.\\\");if(e>=r.length)throw new he(\\\"Array index out of bounds: \\\"+e+\\\" > \\\"+(r.length-1)+\\\".\\\");if(e!==Math.floor(e))throw new he(\\\"Array index must be an integer, but found \\\"+e+\\\" instead.\\\");return r[e]},$e.prototype.eachChild=function(t){t(this.index),t(this.input)},$e.prototype.possibleOutputs=function(){return[void 0]},$e.prototype.serialize=function(){return[\\\"at\\\",this.index.serialize(),this.input.serialize()]};var Qe=function(t,e,r,n,i,a){this.inputType=t,this.type=e,this.input=r,this.cases=n,this.outputs=i,this.otherwise=a};Qe.parse=function(t,e){if(t.length<5)return e.error(\\\"Expected at least 4 arguments, but found only \\\"+(t.length-1)+\\\".\\\");if(t.length%2!=1)return e.error(\\\"Expected an even number of arguments.\\\");var r,n;e.expectedType&&\\\"value\\\"!==e.expectedType.kind&&(n=e.expectedType);for(var i={},a=[],o=2;o<t.length-1;o+=2){var s=t[o],l=t[o+1];Array.isArray(s)||(s=[s]);var c=e.concat(o);if(0===s.length)return c.error(\\\"Expected at least one branch label.\\\");for(var u=0,h=s;u<h.length;u+=1){var f=h[u];if(\\\"number\\\"!=typeof f&&\\\"string\\\"!=typeof f)return c.error(\\\"Branch labels must be numbers or strings.\\\");if(\\\"number\\\"==typeof f&&Math.abs(f)>Number.MAX_SAFE_INTEGER)return c.error(\\\"Branch labels must be integers no larger than \\\"+Number.MAX_SAFE_INTEGER+\\\".\\\");if(\\\"number\\\"==typeof f&&Math.floor(f)!==f)return c.error(\\\"Numeric branch labels must be integer values.\\\");if(r){if(c.checkSubtype(r,le(f)))return null}else r=le(f);if(void 0!==i[String(f)])return c.error(\\\"Branch labels must be unique.\\\");i[String(f)]=a.length}var p=e.parse(l,o,n);if(!p)return null;n=n||p.type,a.push(p)}var d=e.parse(t[1],1,Zt);if(!d)return null;var g=e.parse(t[t.length-1],t.length-1,n);return g?\\\"value\\\"!==d.type.kind&&e.concat(1).checkSubtype(r,d.type)?null:new Qe(r,n,d,i,a,g):null},Qe.prototype.evaluate=function(t){var e=this.input.evaluate(t);return(le(e)===this.inputType&&this.outputs[this.cases[e]]||this.otherwise).evaluate(t)},Qe.prototype.eachChild=function(t){t(this.input),this.outputs.forEach(t),t(this.otherwise)},Qe.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.outputs.map(function(t){return t.possibleOutputs()})).concat(this.otherwise.possibleOutputs())},Qe.prototype.serialize=function(){for(var t=this,e=[\\\"match\\\",this.input.serialize()],r=[],n={},i=0,a=Object.keys(this.cases).sort();i<a.length;i+=1){var o=a[i];void 0===(h=n[this.cases[o]])?(n[this.cases[o]]=r.length,r.push([this.cases[o],[o]])):r[h][1].push(o)}for(var s=function(e){return\\\"number\\\"===t.inputType.kind?Number(e):e},l=0,c=r;l<c.length;l+=1){var u=c[l],h=u[0],f=u[1];1===f.length?e.push(s(f[0])):e.push(f.map(s)),e.push(this.outputs[outputIndex$1].serialize())}return e.push(this.otherwise.serialize()),e};var tr=function(t,e,r){this.type=t,this.branches=e,this.otherwise=r};function er(t,e){return\\\"==\\\"===t||\\\"!=\\\"===t?\\\"boolean\\\"===e.kind||\\\"string\\\"===e.kind||\\\"number\\\"===e.kind||\\\"null\\\"===e.kind||\\\"value\\\"===e.kind:\\\"string\\\"===e.kind||\\\"number\\\"===e.kind||\\\"value\\\"===e.kind}function rr(t,e,r,n){return 0===n.compare(e,r)}function nr(t,e,r){var n=\\\"==\\\"!==t&&\\\"!=\\\"!==t;return function(){function i(t,e,r){this.type=Yt,this.lhs=t,this.rhs=e,this.collator=r,this.hasUntypedArgument=\\\"value\\\"===t.type.kind||\\\"value\\\"===e.type.kind}return i.parse=function(t,e){if(3!==t.length&&4!==t.length)return e.error(\\\"Expected two or three arguments.\\\");var r=t[0],a=e.parse(t[1],1,Zt);if(!a)return null;if(!er(r,a.type))return e.concat(1).error('\\\"'+r+\\\"\\\\\\\" comparisons are not supported for type '\\\"+Qt(a.type)+\\\"'.\\\");var o=e.parse(t[2],2,Zt);if(!o)return null;if(!er(r,o.type))return e.concat(2).error('\\\"'+r+\\\"\\\\\\\" comparisons are not supported for type '\\\"+Qt(o.type)+\\\"'.\\\");if(a.type.kind!==o.type.kind&&\\\"value\\\"!==a.type.kind&&\\\"value\\\"!==o.type.kind)return e.error(\\\"Cannot compare types '\\\"+Qt(a.type)+\\\"' and '\\\"+Qt(o.type)+\\\"'.\\\");n&&(\\\"value\\\"===a.type.kind&&\\\"value\\\"!==o.type.kind?a=new pe(o.type,[a]):\\\"value\\\"!==a.type.kind&&\\\"value\\\"===o.type.kind&&(o=new pe(a.type,[o])));var s=null;if(4===t.length){if(\\\"string\\\"!==a.type.kind&&\\\"string\\\"!==o.type.kind&&\\\"value\\\"!==a.type.kind&&\\\"value\\\"!==o.type.kind)return e.error(\\\"Cannot use collator to compare non-string types.\\\");if(!(s=e.parse(t[3],3,Jt)))return null}return new i(a,o,s)},i.prototype.evaluate=function(i){var a=this.lhs.evaluate(i),o=this.rhs.evaluate(i);if(n&&this.hasUntypedArgument){var s=le(a),l=le(o);if(s.kind!==l.kind||\\\"string\\\"!==s.kind&&\\\"number\\\"!==s.kind)throw new he('Expected arguments for \\\"'+t+'\\\" to be (string, string) or (number, number), but found ('+s.kind+\\\", \\\"+l.kind+\\\") instead.\\\")}if(this.collator&&!n&&this.hasUntypedArgument){var c=le(a),u=le(o);if(\\\"string\\\"!==c.kind||\\\"string\\\"!==u.kind)return e(i,a,o)}return this.collator?r(i,a,o,this.collator.evaluate(i)):e(i,a,o)},i.prototype.eachChild=function(t){t(this.lhs),t(this.rhs),this.collator&&t(this.collator)},i.prototype.possibleOutputs=function(){return[!0,!1]},i.prototype.serialize=function(){var e=[t];return this.eachChild(function(t){e.push(t.serialize())}),e},i}()}tr.parse=function(t,e){if(t.length<4)return e.error(\\\"Expected at least 3 arguments, but found only \\\"+(t.length-1)+\\\".\\\");if(t.length%2!=0)return e.error(\\\"Expected an odd number of arguments.\\\");var r;e.expectedType&&\\\"value\\\"!==e.expectedType.kind&&(r=e.expectedType);for(var n=[],i=1;i<t.length-1;i+=2){var a=e.parse(t[i],i,Yt);if(!a)return null;var o=e.parse(t[i+1],i+1,r);if(!o)return null;n.push([a,o]),r=r||o.type}var s=e.parse(t[t.length-1],t.length-1,r);return s?new tr(r,n,s):null},tr.prototype.evaluate=function(t){for(var e=0,r=this.branches;e<r.length;e+=1){var n=r[e],i=n[0],a=n[1];if(i.evaluate(t))return a.evaluate(t)}return this.otherwise.evaluate(t)},tr.prototype.eachChild=function(t){for(var e=0,r=this.branches;e<r.length;e+=1){var n=r[e],i=n[0],a=n[1];t(i),t(a)}t(this.otherwise)},tr.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.branches.map(function(t){return t[0],t[1].possibleOutputs()})).concat(this.otherwise.possibleOutputs())},tr.prototype.serialize=function(){var t=[\\\"case\\\"];return this.eachChild(function(e){t.push(e.serialize())}),t};var ir=nr(\\\"==\\\",function(t,e,r){return e===r},rr),ar=nr(\\\"!=\\\",function(t,e,r){return e!==r},function(t,e,r,n){return!rr(0,e,r,n)}),or=nr(\\\"<\\\",function(t,e,r){return e<r},function(t,e,r,n){return n.compare(e,r)<0}),sr=nr(\\\">\\\",function(t,e,r){return e>r},function(t,e,r,n){return n.compare(e,r)>0}),lr=nr(\\\"<=\\\",function(t,e,r){return e<=r},function(t,e,r,n){return n.compare(e,r)<=0}),cr=nr(\\\">=\\\",function(t,e,r){return e>=r},function(t,e,r,n){return n.compare(e,r)>=0}),ur=function(t,e,r,n,i){this.type=Gt,this.number=t,this.locale=e,this.currency=r,this.minFractionDigits=n,this.maxFractionDigits=i};ur.parse=function(t,e){if(3!==t.length)return e.error(\\\"Expected two arguments.\\\");var r=e.parse(t[1],1,Ht);if(!r)return null;var n=t[2];if(\\\"object\\\"!=typeof n||Array.isArray(n))return e.error(\\\"NumberFormat options argument must be an object.\\\");var i=null;if(n.locale&&!(i=e.parse(n.locale,1,Gt)))return null;var a=null;if(n.currency&&!(a=e.parse(n.currency,1,Gt)))return null;var o=null;if(n[\\\"min-fraction-digits\\\"]&&!(o=e.parse(n[\\\"min-fraction-digits\\\"],1,Ht)))return null;var s=null;return n[\\\"max-fraction-digits\\\"]&&!(s=e.parse(n[\\\"max-fraction-digits\\\"],1,Ht))?null:new ur(r,i,a,o,s)},ur.prototype.evaluate=function(t){return new Intl.NumberFormat(this.locale?this.locale.evaluate(t):[],{style:this.currency?\\\"currency\\\":\\\"decimal\\\",currency:this.currency?this.currency.evaluate(t):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(t):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(t):void 0}).format(this.number.evaluate(t))},ur.prototype.eachChild=function(t){t(this.number),this.locale&&t(this.locale),this.currency&&t(this.currency),this.minFractionDigits&&t(this.minFractionDigits),this.maxFractionDigits&&t(this.maxFractionDigits)},ur.prototype.possibleOutputs=function(){return[void 0]},ur.prototype.serialize=function(){var t={};return this.locale&&(t.locale=this.locale.serialize()),this.currency&&(t.currency=this.currency.serialize()),this.minFractionDigits&&(t[\\\"min-fraction-digits\\\"]=this.minFractionDigits.serialize()),this.maxFractionDigits&&(t[\\\"max-fraction-digits\\\"]=this.maxFractionDigits.serialize()),[\\\"number-format\\\",this.number.serialize(),t]};var hr=function(t){this.type=Ht,this.input=t};hr.parse=function(t,e){if(2!==t.length)return e.error(\\\"Expected 1 argument, but found \\\"+(t.length-1)+\\\" instead.\\\");var r=e.parse(t[1],1);return r?\\\"array\\\"!==r.type.kind&&\\\"string\\\"!==r.type.kind&&\\\"value\\\"!==r.type.kind?e.error(\\\"Expected argument of type string or array, but found \\\"+Qt(r.type)+\\\" instead.\\\"):new hr(r):null},hr.prototype.evaluate=function(t){var e=this.input.evaluate(t);if(\\\"string\\\"==typeof e)return e.length;if(Array.isArray(e))return e.length;throw new he(\\\"Expected value to be of type string or array, but found \\\"+Qt(le(e))+\\\" instead.\\\")},hr.prototype.eachChild=function(t){t(this.input)},hr.prototype.possibleOutputs=function(){return[void 0]},hr.prototype.serialize=function(){var t=[\\\"length\\\"];return this.eachChild(function(e){t.push(e.serialize())}),t};var fr={\\\"==\\\":ir,\\\"!=\\\":ar,\\\">\\\":sr,\\\"<\\\":or,\\\">=\\\":cr,\\\"<=\\\":lr,array:pe,at:$e,boolean:pe,case:tr,coalesce:Je,collator:be,format:de,interpolate:Xe,\\\"interpolate-hcl\\\":Xe,\\\"interpolate-lab\\\":Xe,length:hr,let:Ke,literal:ue,match:Qe,number:pe,\\\"number-format\\\":ur,object:pe,step:Se,string:pe,\\\"to-boolean\\\":ve,\\\"to-color\\\":ve,\\\"to-number\\\":ve,\\\"to-string\\\":ve,var:Te};function pr(t,e){var r=e[0],n=e[1],i=e[2],a=e[3];r=r.evaluate(t),n=n.evaluate(t),i=i.evaluate(t);var o=a?a.evaluate(t):1,s=se(r,n,i,o);if(s)throw new he(s);return new ne(r/255*o,n/255*o,i/255*o,o)}function dr(t,e){return t in e}function gr(t,e){var r=e[t];return void 0===r?null:r}function vr(t){return{type:t}}function mr(t){return{result:\\\"success\\\",value:t}}function yr(t){return{result:\\\"error\\\",value:t}}function xr(t){return\\\"data-driven\\\"===t[\\\"property-type\\\"]||\\\"cross-faded-data-driven\\\"===t[\\\"property-type\\\"]}function br(t){return!!t.expression&&t.expression.parameters.indexOf(\\\"zoom\\\")>-1}function _r(t){return!!t.expression&&t.expression.interpolated}function wr(t){return t instanceof Number?\\\"number\\\":t instanceof String?\\\"string\\\":t instanceof Boolean?\\\"boolean\\\":Array.isArray(t)?\\\"array\\\":null===t?\\\"null\\\":typeof t}function kr(t){return\\\"object\\\"==typeof t&&null!==t&&!Array.isArray(t)}function Tr(t){return t}function Ar(t,e,r){return void 0!==t?t:void 0!==e?e:void 0!==r?r:void 0}function Mr(t,e,r,n,i){return Ar(typeof r===i?n[r]:void 0,t.default,e.default)}function Sr(t,e,r){if(\\\"number\\\"!==wr(r))return Ar(t.default,e.default);var n=t.stops.length;if(1===n)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[n-1][0])return t.stops[n-1][1];var i=Me(t.stops.map(function(t){return t[0]}),r);return t.stops[i][1]}function Er(t,e,r){var n=void 0!==t.base?t.base:1;if(\\\"number\\\"!==wr(r))return Ar(t.default,e.default);var i=t.stops.length;if(1===i)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[i-1][0])return t.stops[i-1][1];var a=Me(t.stops.map(function(t){return t[0]}),r),o=function(t,e,r,n){var i=n-r,a=t-r;return 0===i?0:1===e?a/i:(Math.pow(e,a)-1)/(Math.pow(e,i)-1)}(r,n,t.stops[a][0],t.stops[a+1][0]),s=t.stops[a][1],l=t.stops[a+1][1],c=Ce[e.type]||Tr;if(t.colorSpace&&\\\"rgb\\\"!==t.colorSpace){var u=We[t.colorSpace];c=function(t,e){return u.reverse(u.interpolate(u.forward(t),u.forward(e),o))}}return\\\"function\\\"==typeof s.evaluate?{evaluate:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var r=s.evaluate.apply(void 0,t),n=l.evaluate.apply(void 0,t);if(void 0!==r&&void 0!==n)return c(r,n,o)}}:c(s,l,o)}function Cr(t,e,r){return\\\"color\\\"===e.type?r=ne.parse(r):\\\"formatted\\\"===e.type?r=oe.fromString(r.toString()):wr(r)===e.type||\\\"enum\\\"===e.type&&e.values[r]||(r=void 0),Ar(r,t.default,e.default)}xe.register(fr,{error:[{kind:\\\"error\\\"},[Gt],function(t,e){var r=e[0];throw new he(r.evaluate(t))}],typeof:[Gt,[Zt],function(t,e){return Qt(le(e[0].evaluate(t)))}],\\\"to-rgba\\\":[$t(Ht,4),[Wt],function(t,e){return e[0].evaluate(t).toArray()}],rgb:[Wt,[Ht,Ht,Ht],pr],rgba:[Wt,[Ht,Ht,Ht,Ht],pr],has:{type:Yt,overloads:[[[Gt],function(t,e){return dr(e[0].evaluate(t),t.properties())}],[[Gt,Xt],function(t,e){var r=e[0],n=e[1];return dr(r.evaluate(t),n.evaluate(t))}]]},get:{type:Zt,overloads:[[[Gt],function(t,e){return gr(e[0].evaluate(t),t.properties())}],[[Gt,Xt],function(t,e){var r=e[0],n=e[1];return gr(r.evaluate(t),n.evaluate(t))}]]},\\\"feature-state\\\":[Zt,[Gt],function(t,e){return gr(e[0].evaluate(t),t.featureState||{})}],properties:[Xt,[],function(t){return t.properties()}],\\\"geometry-type\\\":[Gt,[],function(t){return t.geometryType()}],id:[Zt,[],function(t){return t.id()}],zoom:[Ht,[],function(t){return t.globals.zoom}],\\\"heatmap-density\\\":[Ht,[],function(t){return t.globals.heatmapDensity||0}],\\\"line-progress\\\":[Ht,[],function(t){return t.globals.lineProgress||0}],accumulated:[Zt,[],function(t){return void 0===t.globals.accumulated?null:t.globals.accumulated}],\\\"+\\\":[Ht,vr(Ht),function(t,e){for(var r=0,n=0,i=e;n<i.length;n+=1)r+=i[n].evaluate(t);return r}],\\\"*\\\":[Ht,vr(Ht),function(t,e){for(var r=1,n=0,i=e;n<i.length;n+=1)r*=i[n].evaluate(t);return r}],\\\"-\\\":{type:Ht,overloads:[[[Ht,Ht],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)-n.evaluate(t)}],[[Ht],function(t,e){return-e[0].evaluate(t)}]]},\\\"/\\\":[Ht,[Ht,Ht],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)/n.evaluate(t)}],\\\"%\\\":[Ht,[Ht,Ht],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)%n.evaluate(t)}],ln2:[Ht,[],function(){return Math.LN2}],pi:[Ht,[],function(){return Math.PI}],e:[Ht,[],function(){return Math.E}],\\\"^\\\":[Ht,[Ht,Ht],function(t,e){var r=e[0],n=e[1];return Math.pow(r.evaluate(t),n.evaluate(t))}],sqrt:[Ht,[Ht],function(t,e){var r=e[0];return Math.sqrt(r.evaluate(t))}],log10:[Ht,[Ht],function(t,e){var r=e[0];return Math.log(r.evaluate(t))/Math.LN10}],ln:[Ht,[Ht],function(t,e){var r=e[0];return Math.log(r.evaluate(t))}],log2:[Ht,[Ht],function(t,e){var r=e[0];return Math.log(r.evaluate(t))/Math.LN2}],sin:[Ht,[Ht],function(t,e){var r=e[0];return Math.sin(r.evaluate(t))}],cos:[Ht,[Ht],function(t,e){var r=e[0];return Math.cos(r.evaluate(t))}],tan:[Ht,[Ht],function(t,e){var r=e[0];return Math.tan(r.evaluate(t))}],asin:[Ht,[Ht],function(t,e){var r=e[0];return Math.asin(r.evaluate(t))}],acos:[Ht,[Ht],function(t,e){var r=e[0];return Math.acos(r.evaluate(t))}],atan:[Ht,[Ht],function(t,e){var r=e[0];return Math.atan(r.evaluate(t))}],min:[Ht,vr(Ht),function(t,e){return Math.min.apply(Math,e.map(function(e){return e.evaluate(t)}))}],max:[Ht,vr(Ht),function(t,e){return Math.max.apply(Math,e.map(function(e){return e.evaluate(t)}))}],abs:[Ht,[Ht],function(t,e){var r=e[0];return Math.abs(r.evaluate(t))}],round:[Ht,[Ht],function(t,e){var r=e[0].evaluate(t);return r<0?-Math.round(-r):Math.round(r)}],floor:[Ht,[Ht],function(t,e){var r=e[0];return Math.floor(r.evaluate(t))}],ceil:[Ht,[Ht],function(t,e){var r=e[0];return Math.ceil(r.evaluate(t))}],\\\"filter-==\\\":[Yt,[Gt,Zt],function(t,e){var r=e[0],n=e[1];return t.properties()[r.value]===n.value}],\\\"filter-id-==\\\":[Yt,[Zt],function(t,e){var r=e[0];return t.id()===r.value}],\\\"filter-type-==\\\":[Yt,[Gt],function(t,e){var r=e[0];return t.geometryType()===r.value}],\\\"filter-<\\\":[Yt,[Gt,Zt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i<a}],\\\"filter-id-<\\\":[Yt,[Zt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n<i}],\\\"filter->\\\":[Yt,[Gt,Zt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i>a}],\\\"filter-id->\\\":[Yt,[Zt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n>i}],\\\"filter-<=\\\":[Yt,[Gt,Zt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i<=a}],\\\"filter-id-<=\\\":[Yt,[Zt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n<=i}],\\\"filter->=\\\":[Yt,[Gt,Zt],function(t,e){var r=e[0],n=e[1],i=t.properties()[r.value],a=n.value;return typeof i==typeof a&&i>=a}],\\\"filter-id->=\\\":[Yt,[Zt],function(t,e){var r=e[0],n=t.id(),i=r.value;return typeof n==typeof i&&n>=i}],\\\"filter-has\\\":[Yt,[Zt],function(t,e){return e[0].value in t.properties()}],\\\"filter-has-id\\\":[Yt,[],function(t){return null!==t.id()}],\\\"filter-type-in\\\":[Yt,[$t(Gt)],function(t,e){return e[0].value.indexOf(t.geometryType())>=0}],\\\"filter-id-in\\\":[Yt,[$t(Zt)],function(t,e){return e[0].value.indexOf(t.id())>=0}],\\\"filter-in-small\\\":[Yt,[Gt,$t(Zt)],function(t,e){var r=e[0];return e[1].value.indexOf(t.properties()[r.value])>=0}],\\\"filter-in-large\\\":[Yt,[Gt,$t(Zt)],function(t,e){var r=e[0],n=e[1];return function(t,e,r,n){for(;r<=n;){var i=r+n>>1;if(e[i]===t)return!0;e[i]>t?n=i-1:r=i+1}return!1}(t.properties()[r.value],n.value,0,n.value.length-1)}],all:{type:Yt,overloads:[[[Yt,Yt],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)&&n.evaluate(t)}],[vr(Yt),function(t,e){for(var r=0,n=e;r<n.length;r+=1)if(!n[r].evaluate(t))return!1;return!0}]]},any:{type:Yt,overloads:[[[Yt,Yt],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)||n.evaluate(t)}],[vr(Yt),function(t,e){for(var r=0,n=e;r<n.length;r+=1)if(n[r].evaluate(t))return!0;return!1}]]},\\\"!\\\":[Yt,[Yt],function(t,e){return!e[0].evaluate(t)}],\\\"is-supported-script\\\":[Yt,[Gt],function(t,e){var r=e[0],n=t.globals&&t.globals.isSupportedScript;return!n||n(r.evaluate(t))}],upcase:[Gt,[Gt],function(t,e){return e[0].evaluate(t).toUpperCase()}],downcase:[Gt,[Gt],function(t,e){return e[0].evaluate(t).toLowerCase()}],concat:[Gt,vr(Zt),function(t,e){return e.map(function(e){return ce(e.evaluate(t))}).join(\\\"\\\")}],\\\"resolved-locale\\\":[Gt,[Jt],function(t,e){return e[0].evaluate(t).resolvedLocale()}]});var Lr=function(t,e){var r;this.expression=t,this._warningHistory={},this._evaluator=new ye,this._defaultValue=e?\\\"color\\\"===(r=e).type&&kr(r.default)?new ne(0,0,0,0):\\\"color\\\"===r.type?ne.parse(r.default)||null:void 0===r.default?null:r.default:null,this._enumValues=e&&\\\"enum\\\"===e.type?e.values:null};function Pr(t){return Array.isArray(t)&&t.length>0&&\\\"string\\\"==typeof t[0]&&t[0]in fr}function Or(t,e){var r=new Ae(fr,[],e?function(t){var e={color:Wt,string:Gt,number:Ht,enum:Gt,boolean:Yt,formatted:Kt};return\\\"array\\\"===t.type?$t(e[t.value]||Zt,t.length):e[t.type]}(e):void 0),n=r.parse(t,void 0,void 0,void 0,e&&\\\"string\\\"===e.type?{typeAnnotation:\\\"coerce\\\"}:void 0);return n?mr(new Lr(n,e)):yr(r.errors)}Lr.prototype.evaluateWithoutErrorHandling=function(t,e,r){return this._evaluator.globals=t,this._evaluator.feature=e,this._evaluator.featureState=r,this.expression.evaluate(this._evaluator)},Lr.prototype.evaluate=function(t,e,r){this._evaluator.globals=t,this._evaluator.feature=e||null,this._evaluator.featureState=r||null;try{var n=this.expression.evaluate(this._evaluator);if(null==n)return this._defaultValue;if(this._enumValues&&!(n in this._enumValues))throw new he(\\\"Expected value to be one of \\\"+Object.keys(this._enumValues).map(function(t){return JSON.stringify(t)}).join(\\\", \\\")+\\\", but found \\\"+JSON.stringify(n)+\\\" instead.\\\");return n}catch(t){return this._warningHistory[t.message]||(this._warningHistory[t.message]=!0,\\\"undefined\\\"!=typeof console&&console.warn(t.message)),this._defaultValue}};var zr=function(t,e){this.kind=t,this._styleExpression=e,this.isStateDependent=\\\"constant\\\"!==t&&!we(e.expression)};zr.prototype.evaluateWithoutErrorHandling=function(t,e,r){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r)},zr.prototype.evaluate=function(t,e,r){return this._styleExpression.evaluate(t,e,r)};var Ir=function(t,e,r){this.kind=t,this.zoomStops=r.labels,this._styleExpression=e,this.isStateDependent=\\\"camera\\\"!==t&&!we(e.expression),r instanceof Xe&&(this.interpolationType=r.interpolation)};function Dr(t,e){if(\\\"error\\\"===(t=Or(t,e)).result)return t;var r=t.value.expression,n=_e(r);if(!n&&!xr(e))return yr([new Ut(\\\"\\\",\\\"data expressions not supported\\\")]);var i=ke(r,[\\\"zoom\\\"]);if(!i&&!br(e))return yr([new Ut(\\\"\\\",\\\"zoom expressions not supported\\\")]);var a=function t(e){var r=null;if(e instanceof Ke)r=t(e.result);else if(e instanceof Je)for(var n=0,i=e.args;n<i.length;n+=1){var a=i[n];if(r=t(a))break}else(e instanceof Se||e instanceof Xe)&&e.input instanceof xe&&\\\"zoom\\\"===e.input.name&&(r=e);return r instanceof Ut?r:(e.eachChild(function(e){var n=t(e);n instanceof Ut?r=n:!r&&n?r=new Ut(\\\"\\\",'\\\"zoom\\\" expression may only be used as input to a top-level \\\"step\\\" or \\\"interpolate\\\" expression.'):r&&n&&r!==n&&(r=new Ut(\\\"\\\",'Only one zoom-based \\\"step\\\" or \\\"interpolate\\\" subexpression may be used in an expression.'))}),r)}(r);return a||i?a instanceof Ut?yr([a]):a instanceof Xe&&!_r(e)?yr([new Ut(\\\"\\\",'\\\"interpolate\\\" expressions cannot be used with this property')]):mr(a?new Ir(n?\\\"camera\\\":\\\"composite\\\",t.value,a):new zr(n?\\\"constant\\\":\\\"source\\\",t.value)):yr([new Ut(\\\"\\\",'\\\"zoom\\\" expression may only be used as input to a top-level \\\"step\\\" or \\\"interpolate\\\" expression.')])}Ir.prototype.evaluateWithoutErrorHandling=function(t,e,r){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r)},Ir.prototype.evaluate=function(t,e,r){return this._styleExpression.evaluate(t,e,r)},Ir.prototype.interpolationFactor=function(t,e,r){return this.interpolationType?Xe.interpolationFactor(this.interpolationType,t,e,r):0};var Rr=function(t,e){this._parameters=t,this._specification=e,Ft(this,function t(e,r){var n,i,a,o=\\\"color\\\"===r.type,s=e.stops&&\\\"object\\\"==typeof e.stops[0][0],l=s||void 0!==e.property,c=s||!l,u=e.type||(_r(r)?\\\"exponential\\\":\\\"interval\\\");if(o&&((e=Ft({},e)).stops&&(e.stops=e.stops.map(function(t){return[t[0],ne.parse(t[1])]})),e.default?e.default=ne.parse(e.default):e.default=ne.parse(r.default)),e.colorSpace&&\\\"rgb\\\"!==e.colorSpace&&!We[e.colorSpace])throw new Error(\\\"Unknown color space: \\\"+e.colorSpace);if(\\\"exponential\\\"===u)n=Er;else if(\\\"interval\\\"===u)n=Sr;else if(\\\"categorical\\\"===u){n=Mr,i=Object.create(null);for(var h=0,f=e.stops;h<f.length;h+=1){var p=f[h];i[p[0]]=p[1]}a=typeof e.stops[0][0]}else{if(\\\"identity\\\"!==u)throw new Error('Unknown function type \\\"'+u+'\\\"');n=Cr}if(s){for(var d={},g=[],v=0;v<e.stops.length;v++){var m=e.stops[v],y=m[0].zoom;void 0===d[y]&&(d[y]={zoom:y,type:e.type,property:e.property,default:e.default,stops:[]},g.push(y)),d[y].stops.push([m[0].value,m[1]])}for(var x=[],b=0,_=g;b<_.length;b+=1){var w=_[b];x.push([d[w].zoom,t(d[w],r)])}var k={name:\\\"linear\\\"};return{kind:\\\"composite\\\",interpolationType:k,interpolationFactor:Xe.interpolationFactor.bind(void 0,k),zoomStops:x.map(function(t){return t[0]}),evaluate:function(t,n){var i=t.zoom;return Er({stops:x,base:e.base},r,i).evaluate(i,n)}}}if(c){var T=\\\"exponential\\\"===u?{name:\\\"exponential\\\",base:void 0!==e.base?e.base:1}:null;return{kind:\\\"camera\\\",interpolationType:T,interpolationFactor:Xe.interpolationFactor.bind(void 0,T),zoomStops:e.stops.map(function(t){return t[0]}),evaluate:function(t){var o=t.zoom;return n(e,r,o,i,a)}}}return{kind:\\\"source\\\",evaluate:function(t,o){var s=o&&o.properties?o.properties[e.property]:void 0;return void 0===s?Ar(e.default,r.default):n(e,r,s,i,a)}}}(this._parameters,this._specification))};function Fr(t){var e=t.key,r=t.value,n=t.valueSpec||{},i=t.objectElementValidators||{},a=t.style,o=t.styleSpec,s=[],l=wr(r);if(\\\"object\\\"!==l)return[new Dt(e,r,\\\"object expected, \\\"+l+\\\" found\\\")];for(var c in r){var u=c.split(\\\".\\\")[0],h=n[u]||n[\\\"*\\\"],f=void 0;if(i[u])f=i[u];else if(n[u])f=ln;else if(i[\\\"*\\\"])f=i[\\\"*\\\"];else{if(!n[\\\"*\\\"]){s.push(new Dt(e,r[c],'unknown property \\\"'+c+'\\\"'));continue}f=ln}s=s.concat(f({key:(e?e+\\\".\\\":e)+c,value:r[c],valueSpec:h,style:a,styleSpec:o,object:r,objectKey:c},r))}for(var p in n)i[p]||n[p].required&&void 0===n[p].default&&void 0===r[p]&&s.push(new Dt(e,r,'missing required property \\\"'+p+'\\\"'));return s}function Br(t){var e=t.value,r=t.valueSpec,n=t.style,i=t.styleSpec,a=t.key,o=t.arrayElementValidator||ln;if(\\\"array\\\"!==wr(e))return[new Dt(a,e,\\\"array expected, \\\"+wr(e)+\\\" found\\\")];if(r.length&&e.length!==r.length)return[new Dt(a,e,\\\"array length \\\"+r.length+\\\" expected, length \\\"+e.length+\\\" found\\\")];if(r[\\\"min-length\\\"]&&e.length<r[\\\"min-length\\\"])return[new Dt(a,e,\\\"array length at least \\\"+r[\\\"min-length\\\"]+\\\" expected, length \\\"+e.length+\\\" found\\\")];var s={type:r.value,values:r.values};i.$version<7&&(s.function=r.function),\\\"object\\\"===wr(r.value)&&(s=r.value);for(var l=[],c=0;c<e.length;c++)l=l.concat(o({array:e,arrayIndex:c,value:e[c],valueSpec:s,style:n,styleSpec:i,key:a+\\\"[\\\"+c+\\\"]\\\"}));return l}function Nr(t){var e=t.key,r=t.value,n=t.valueSpec,i=wr(r);return\\\"number\\\"!==i?[new Dt(e,r,\\\"number expected, \\\"+i+\\\" found\\\")]:\\\"minimum\\\"in n&&r<n.minimum?[new Dt(e,r,r+\\\" is less than the minimum value \\\"+n.minimum)]:\\\"maximum\\\"in n&&r>n.maximum?[new Dt(e,r,r+\\\" is greater than the maximum value \\\"+n.maximum)]:[]}function jr(t){var e,r,n,i=t.valueSpec,a=Nt(t.value.type),o={},s=\\\"categorical\\\"!==a&&void 0===t.value.property,l=!s,c=\\\"array\\\"===wr(t.value.stops)&&\\\"array\\\"===wr(t.value.stops[0])&&\\\"object\\\"===wr(t.value.stops[0][0]),u=Fr({key:t.key,value:t.value,valueSpec:t.styleSpec.function,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{stops:function(t){if(\\\"identity\\\"===a)return[new Dt(t.key,t.value,'identity function may not have a \\\"stops\\\" property')];var e=[],r=t.value;return e=e.concat(Br({key:t.key,value:r,valueSpec:t.valueSpec,style:t.style,styleSpec:t.styleSpec,arrayElementValidator:h})),\\\"array\\\"===wr(r)&&0===r.length&&e.push(new Dt(t.key,r,\\\"array must have at least one stop\\\")),e},default:function(t){return ln({key:t.key,value:t.value,valueSpec:i,style:t.style,styleSpec:t.styleSpec})}}});return\\\"identity\\\"===a&&s&&u.push(new Dt(t.key,t.value,'missing required property \\\"property\\\"')),\\\"identity\\\"===a||t.value.stops||u.push(new Dt(t.key,t.value,'missing required property \\\"stops\\\"')),\\\"exponential\\\"===a&&t.valueSpec.expression&&!_r(t.valueSpec)&&u.push(new Dt(t.key,t.value,\\\"exponential functions not supported\\\")),t.styleSpec.$version>=8&&(l&&!xr(t.valueSpec)?u.push(new Dt(t.key,t.value,\\\"property functions not supported\\\")):s&&!br(t.valueSpec)&&u.push(new Dt(t.key,t.value,\\\"zoom functions not supported\\\"))),\\\"categorical\\\"!==a&&!c||void 0!==t.value.property||u.push(new Dt(t.key,t.value,'\\\"property\\\" property is required')),u;function h(t){var e=[],a=t.value,s=t.key;if(\\\"array\\\"!==wr(a))return[new Dt(s,a,\\\"array expected, \\\"+wr(a)+\\\" found\\\")];if(2!==a.length)return[new Dt(s,a,\\\"array length 2 expected, length \\\"+a.length+\\\" found\\\")];if(c){if(\\\"object\\\"!==wr(a[0]))return[new Dt(s,a,\\\"object expected, \\\"+wr(a[0])+\\\" found\\\")];if(void 0===a[0].zoom)return[new Dt(s,a,\\\"object stop key must have zoom\\\")];if(void 0===a[0].value)return[new Dt(s,a,\\\"object stop key must have value\\\")];if(n&&n>Nt(a[0].zoom))return[new Dt(s,a[0].zoom,\\\"stop zoom values must appear in ascending order\\\")];Nt(a[0].zoom)!==n&&(n=Nt(a[0].zoom),r=void 0,o={}),e=e.concat(Fr({key:s+\\\"[0]\\\",value:a[0],valueSpec:{zoom:{}},style:t.style,styleSpec:t.styleSpec,objectElementValidators:{zoom:Nr,value:f}}))}else e=e.concat(f({key:s+\\\"[0]\\\",value:a[0],valueSpec:{},style:t.style,styleSpec:t.styleSpec},a));return Pr(jt(a[1]))?e.concat([new Dt(s+\\\"[1]\\\",a[1],\\\"expressions are not allowed in function stops.\\\")]):e.concat(ln({key:s+\\\"[1]\\\",value:a[1],valueSpec:i,style:t.style,styleSpec:t.styleSpec}))}function f(t,n){var s=wr(t.value),l=Nt(t.value),c=null!==t.value?t.value:n;if(e){if(s!==e)return[new Dt(t.key,c,s+\\\" stop domain type must match previous stop domain type \\\"+e)]}else e=s;if(\\\"number\\\"!==s&&\\\"string\\\"!==s&&\\\"boolean\\\"!==s)return[new Dt(t.key,c,\\\"stop domain value must be a number, string, or boolean\\\")];if(\\\"number\\\"!==s&&\\\"categorical\\\"!==a){var u=\\\"number expected, \\\"+s+\\\" found\\\";return xr(i)&&void 0===a&&(u+='\\\\nIf you intended to use a categorical function, specify `\\\"type\\\": \\\"categorical\\\"`.'),[new Dt(t.key,c,u)]}return\\\"categorical\\\"!==a||\\\"number\\\"!==s||isFinite(l)&&Math.floor(l)===l?\\\"categorical\\\"!==a&&\\\"number\\\"===s&&void 0!==r&&l<r?[new Dt(t.key,c,\\\"stop domain values must appear in ascending order\\\")]:(r=l,\\\"categorical\\\"===a&&l in o?[new Dt(t.key,c,\\\"stop domain values must be unique\\\")]:(o[l]=!0,[])):[new Dt(t.key,c,\\\"integer expected, found \\\"+l)]}}function Ur(t){var e=(\\\"property\\\"===t.expressionContext?Dr:Or)(jt(t.value),t.valueSpec);if(\\\"error\\\"===e.result)return e.value.map(function(e){return new Dt(\\\"\\\"+t.key+e.key,t.value,e.message)});var r=e.value.expression||e.value._styleExpression.expression;if(\\\"property\\\"===t.expressionContext&&\\\"text-font\\\"===t.propertyKey&&-1!==r.possibleOutputs().indexOf(void 0))return[new Dt(t.key,t.value,'Invalid data expression for \\\"'+t.propertyKey+'\\\". Output values must be contained as literals within the expression.')];if(\\\"property\\\"===t.expressionContext&&\\\"layout\\\"===t.propertyType&&!we(r))return[new Dt(t.key,t.value,'\\\"feature-state\\\" data expressions are not supported with layout properties.')];if(\\\"filter\\\"===t.expressionContext&&!we(r))return[new Dt(t.key,t.value,'\\\"feature-state\\\" data expressions are not supported with filters.')];if(t.expressionContext&&0===t.expressionContext.indexOf(\\\"cluster\\\")){if(!ke(r,[\\\"zoom\\\",\\\"feature-state\\\"]))return[new Dt(t.key,t.value,'\\\"zoom\\\" and \\\"feature-state\\\" expressions are not supported with cluster properties.')];if(\\\"cluster-initial\\\"===t.expressionContext&&!_e(r))return[new Dt(t.key,t.value,\\\"Feature data expressions are not supported with initial expression part of cluster properties.\\\")]}return[]}function Vr(t){var e=t.key,r=t.value,n=t.valueSpec,i=[];return Array.isArray(n.values)?-1===n.values.indexOf(Nt(r))&&i.push(new Dt(e,r,\\\"expected one of [\\\"+n.values.join(\\\", \\\")+\\\"], \\\"+JSON.stringify(r)+\\\" found\\\")):-1===Object.keys(n.values).indexOf(Nt(r))&&i.push(new Dt(e,r,\\\"expected one of [\\\"+Object.keys(n.values).join(\\\", \\\")+\\\"], \\\"+JSON.stringify(r)+\\\" found\\\")),i}function qr(t){if(!0===t||!1===t)return!0;if(!Array.isArray(t)||0===t.length)return!1;switch(t[0]){case\\\"has\\\":return t.length>=2&&\\\"$id\\\"!==t[1]&&\\\"$type\\\"!==t[1];case\\\"in\\\":case\\\"!in\\\":case\\\"!has\\\":case\\\"none\\\":return!1;case\\\"==\\\":case\\\"!=\\\":case\\\">\\\":case\\\">=\\\":case\\\"<\\\":case\\\"<=\\\":return 3!==t.length||Array.isArray(t[1])||Array.isArray(t[2]);case\\\"any\\\":case\\\"all\\\":for(var e=0,r=t.slice(1);e<r.length;e+=1){var n=r[e];if(!qr(n)&&\\\"boolean\\\"!=typeof n)return!1}return!0;default:return!0}}Rr.deserialize=function(t){return new Rr(t._parameters,t._specification)},Rr.serialize=function(t){return{_parameters:t._parameters,_specification:t._specification}};var Hr={type:\\\"boolean\\\",default:!1,transition:!1,\\\"property-type\\\":\\\"data-driven\\\",expression:{interpolated:!1,parameters:[\\\"zoom\\\",\\\"feature\\\"]}};function Gr(t){if(null==t)return function(){return!0};qr(t)||(t=Wr(t));var e=Or(t,Hr);if(\\\"error\\\"===e.result)throw new Error(e.value.map(function(t){return t.key+\\\": \\\"+t.message}).join(\\\", \\\"));return function(t,r){return e.value.evaluate(t,r)}}function Yr(t,e){return t<e?-1:t>e?1:0}function Wr(t){if(!t)return!0;var e,r=t[0];return t.length<=1?\\\"any\\\"!==r:\\\"==\\\"===r?Xr(t[1],t[2],\\\"==\\\"):\\\"!=\\\"===r?Kr(Xr(t[1],t[2],\\\"==\\\")):\\\"<\\\"===r||\\\">\\\"===r||\\\"<=\\\"===r||\\\">=\\\"===r?Xr(t[1],t[2],r):\\\"any\\\"===r?(e=t.slice(1),[\\\"any\\\"].concat(e.map(Wr))):\\\"all\\\"===r?[\\\"all\\\"].concat(t.slice(1).map(Wr)):\\\"none\\\"===r?[\\\"all\\\"].concat(t.slice(1).map(Wr).map(Kr)):\\\"in\\\"===r?Zr(t[1],t.slice(2)):\\\"!in\\\"===r?Kr(Zr(t[1],t.slice(2))):\\\"has\\\"===r?Jr(t[1]):\\\"!has\\\"!==r||Kr(Jr(t[1]))}function Xr(t,e,r){switch(t){case\\\"$type\\\":return[\\\"filter-type-\\\"+r,e];case\\\"$id\\\":return[\\\"filter-id-\\\"+r,e];default:return[\\\"filter-\\\"+r,t,e]}}function Zr(t,e){if(0===e.length)return!1;switch(t){case\\\"$type\\\":return[\\\"filter-type-in\\\",[\\\"literal\\\",e]];case\\\"$id\\\":return[\\\"filter-id-in\\\",[\\\"literal\\\",e]];default:return e.length>200&&!e.some(function(t){return typeof t!=typeof e[0]})?[\\\"filter-in-large\\\",t,[\\\"literal\\\",e.sort(Yr)]]:[\\\"filter-in-small\\\",t,[\\\"literal\\\",e]]}}function Jr(t){switch(t){case\\\"$type\\\":return!0;case\\\"$id\\\":return[\\\"filter-has-id\\\"];default:return[\\\"filter-has\\\",t]}}function Kr(t){return[\\\"!\\\",t]}function $r(t){return qr(jt(t.value))?Ur(Ft({},t,{expressionContext:\\\"filter\\\",valueSpec:{value:\\\"boolean\\\"}})):function t(e){var r=e.value,n=e.key;if(\\\"array\\\"!==wr(r))return[new Dt(n,r,\\\"array expected, \\\"+wr(r)+\\\" found\\\")];var i,a=e.styleSpec,o=[];if(r.length<1)return[new Dt(n,r,\\\"filter array must have at least 1 element\\\")];switch(o=o.concat(Vr({key:n+\\\"[0]\\\",value:r[0],valueSpec:a.filter_operator,style:e.style,styleSpec:e.styleSpec})),Nt(r[0])){case\\\"<\\\":case\\\"<=\\\":case\\\">\\\":case\\\">=\\\":r.length>=2&&\\\"$type\\\"===Nt(r[1])&&o.push(new Dt(n,r,'\\\"$type\\\" cannot be use with operator \\\"'+r[0]+'\\\"'));case\\\"==\\\":case\\\"!=\\\":3!==r.length&&o.push(new Dt(n,r,'filter array for operator \\\"'+r[0]+'\\\" must have 3 elements'));case\\\"in\\\":case\\\"!in\\\":r.length>=2&&\\\"string\\\"!==(i=wr(r[1]))&&o.push(new Dt(n+\\\"[1]\\\",r[1],\\\"string expected, \\\"+i+\\\" found\\\"));for(var s=2;s<r.length;s++)i=wr(r[s]),\\\"$type\\\"===Nt(r[1])?o=o.concat(Vr({key:n+\\\"[\\\"+s+\\\"]\\\",value:r[s],valueSpec:a.geometry_type,style:e.style,styleSpec:e.styleSpec})):\\\"string\\\"!==i&&\\\"number\\\"!==i&&\\\"boolean\\\"!==i&&o.push(new Dt(n+\\\"[\\\"+s+\\\"]\\\",r[s],\\\"string, number, or boolean expected, \\\"+i+\\\" found\\\"));break;case\\\"any\\\":case\\\"all\\\":case\\\"none\\\":for(var l=1;l<r.length;l++)o=o.concat(t({key:n+\\\"[\\\"+l+\\\"]\\\",value:r[l],style:e.style,styleSpec:e.styleSpec}));break;case\\\"has\\\":case\\\"!has\\\":i=wr(r[1]),2!==r.length?o.push(new Dt(n,r,'filter array for \\\"'+r[0]+'\\\" operator must have 2 elements')):\\\"string\\\"!==i&&o.push(new Dt(n+\\\"[1]\\\",r[1],\\\"string expected, \\\"+i+\\\" found\\\"))}return o}(t)}function Qr(t,e){var r=t.key,n=t.style,i=t.styleSpec,a=t.value,o=t.objectKey,s=i[e+\\\"_\\\"+t.layerType];if(!s)return[];var l=o.match(/^(.*)-transition$/);if(\\\"paint\\\"===e&&l&&s[l[1]]&&s[l[1]].transition)return ln({key:r,value:a,valueSpec:i.transition,style:n,styleSpec:i});var c,u=t.valueSpec||s[o];if(!u)return[new Dt(r,a,'unknown property \\\"'+o+'\\\"')];if(\\\"string\\\"===wr(a)&&xr(u)&&!u.tokens&&(c=/^{([^}]+)}$/.exec(a)))return[new Dt(r,a,'\\\"'+o+'\\\" does not support interpolation syntax\\\\nUse an identity property function instead: `{ \\\"type\\\": \\\"identity\\\", \\\"property\\\": '+JSON.stringify(c[1])+\\\" }`.\\\")];var h=[];return\\\"symbol\\\"===t.layerType&&(\\\"text-field\\\"===o&&n&&!n.glyphs&&h.push(new Dt(r,a,'use of \\\"text-field\\\" requires a style \\\"glyphs\\\" property')),\\\"text-font\\\"===o&&kr(jt(a))&&\\\"identity\\\"===Nt(a.type)&&h.push(new Dt(r,a,'\\\"text-font\\\" does not support identity functions'))),h.concat(ln({key:t.key,value:a,valueSpec:u,style:n,styleSpec:i,expressionContext:\\\"property\\\",propertyType:e,propertyKey:o}))}function tn(t){return Qr(t,\\\"paint\\\")}function en(t){return Qr(t,\\\"layout\\\")}function rn(t){var e=[],r=t.value,n=t.key,i=t.style,a=t.styleSpec;r.type||r.ref||e.push(new Dt(n,r,'either \\\"type\\\" or \\\"ref\\\" is required'));var o,s=Nt(r.type),l=Nt(r.ref);if(r.id)for(var c=Nt(r.id),u=0;u<t.arrayIndex;u++){var h=i.layers[u];Nt(h.id)===c&&e.push(new Dt(n,r.id,'duplicate layer id \\\"'+r.id+'\\\", previously used at line '+h.id.__line__))}if(\\\"ref\\\"in r)[\\\"type\\\",\\\"source\\\",\\\"source-layer\\\",\\\"filter\\\",\\\"layout\\\"].forEach(function(t){t in r&&e.push(new Dt(n,r[t],'\\\"'+t+'\\\" is prohibited for ref layers'))}),i.layers.forEach(function(t){Nt(t.id)===l&&(o=t)}),o?o.ref?e.push(new Dt(n,r.ref,\\\"ref cannot reference another ref layer\\\")):s=Nt(o.type):e.push(new Dt(n,r.ref,'ref layer \\\"'+l+'\\\" not found'));else if(\\\"background\\\"!==s)if(r.source){var f=i.sources&&i.sources[r.source],p=f&&Nt(f.type);f?\\\"vector\\\"===p&&\\\"raster\\\"===s?e.push(new Dt(n,r.source,'layer \\\"'+r.id+'\\\" requires a raster source')):\\\"raster\\\"===p&&\\\"raster\\\"!==s?e.push(new Dt(n,r.source,'layer \\\"'+r.id+'\\\" requires a vector source')):\\\"vector\\\"!==p||r[\\\"source-layer\\\"]?\\\"raster-dem\\\"===p&&\\\"hillshade\\\"!==s?e.push(new Dt(n,r.source,\\\"raster-dem source can only be used with layer type 'hillshade'.\\\")):\\\"line\\\"!==s||!r.paint||!r.paint[\\\"line-gradient\\\"]||\\\"geojson\\\"===p&&f.lineMetrics||e.push(new Dt(n,r,'layer \\\"'+r.id+'\\\" specifies a line-gradient, which requires a GeoJSON source with `lineMetrics` enabled.')):e.push(new Dt(n,r,'layer \\\"'+r.id+'\\\" must specify a \\\"source-layer\\\"')):e.push(new Dt(n,r.source,'source \\\"'+r.source+'\\\" not found'))}else e.push(new Dt(n,r,'missing required property \\\"source\\\"'));return e=e.concat(Fr({key:n,value:r,valueSpec:a.layer,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{\\\"*\\\":function(){return[]},type:function(){return ln({key:n+\\\".type\\\",value:r.type,valueSpec:a.layer.type,style:t.style,styleSpec:t.styleSpec,object:r,objectKey:\\\"type\\\"})},filter:$r,layout:function(t){return Fr({layer:r,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{\\\"*\\\":function(t){return en(Ft({layerType:s},t))}}})},paint:function(t){return Fr({layer:r,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{\\\"*\\\":function(t){return tn(Ft({layerType:s},t))}}})}}}))}function nn(t){var e=t.value,r=t.key,n=t.styleSpec,i=t.style;if(!e.type)return[new Dt(r,e,'\\\"type\\\" is required')];var a,o=Nt(e.type);switch(o){case\\\"vector\\\":case\\\"raster\\\":case\\\"raster-dem\\\":if(a=Fr({key:r,value:e,valueSpec:n[\\\"source_\\\"+o.replace(\\\"-\\\",\\\"_\\\")],style:t.style,styleSpec:n}),\\\"url\\\"in e)for(var s in e)[\\\"type\\\",\\\"url\\\",\\\"tileSize\\\"].indexOf(s)<0&&a.push(new Dt(r+\\\".\\\"+s,e[s],'a source with a \\\"url\\\" property may not include a \\\"'+s+'\\\" property'));return a;case\\\"geojson\\\":if(a=Fr({key:r,value:e,valueSpec:n.source_geojson,style:i,styleSpec:n}),e.cluster)for(var l in e.clusterProperties){var c=e.clusterProperties[l],u=c[0],h=c[1],f=\\\"string\\\"==typeof u?[u,[\\\"accumulated\\\"],[\\\"get\\\",l]]:u;a.push.apply(a,Ur({key:r+\\\".\\\"+l+\\\".map\\\",value:h,expressionContext:\\\"cluster-map\\\"})),a.push.apply(a,Ur({key:r+\\\".\\\"+l+\\\".reduce\\\",value:f,expressionContext:\\\"cluster-reduce\\\"}))}return a;case\\\"video\\\":return Fr({key:r,value:e,valueSpec:n.source_video,style:i,styleSpec:n});case\\\"image\\\":return Fr({key:r,value:e,valueSpec:n.source_image,style:i,styleSpec:n});case\\\"canvas\\\":return[new Dt(r,null,\\\"Please use runtime APIs to add canvas sources, rather than including them in stylesheets.\\\",\\\"source.canvas\\\")];default:return Vr({key:r+\\\".type\\\",value:e.type,valueSpec:{values:[\\\"vector\\\",\\\"raster\\\",\\\"raster-dem\\\",\\\"geojson\\\",\\\"video\\\",\\\"image\\\"]},style:i,styleSpec:n})}}function an(t){var e=t.value,r=t.styleSpec,n=r.light,i=t.style,a=[],o=wr(e);if(void 0===e)return a;if(\\\"object\\\"!==o)return a.concat([new Dt(\\\"light\\\",e,\\\"object expected, \\\"+o+\\\" found\\\")]);for(var s in e){var l=s.match(/^(.*)-transition$/);a=l&&n[l[1]]&&n[l[1]].transition?a.concat(ln({key:s,value:e[s],valueSpec:r.transition,style:i,styleSpec:r})):n[s]?a.concat(ln({key:s,value:e[s],valueSpec:n[s],style:i,styleSpec:r})):a.concat([new Dt(s,e[s],'unknown property \\\"'+s+'\\\"')])}return a}function on(t){var e=t.value,r=t.key,n=wr(e);return\\\"string\\\"!==n?[new Dt(r,e,\\\"string expected, \\\"+n+\\\" found\\\")]:[]}var sn={\\\"*\\\":function(){return[]},array:Br,boolean:function(t){var e=t.value,r=t.key,n=wr(e);return\\\"boolean\\\"!==n?[new Dt(r,e,\\\"boolean expected, \\\"+n+\\\" found\\\")]:[]},number:Nr,color:function(t){var e=t.key,r=t.value,n=wr(r);return\\\"string\\\"!==n?[new Dt(e,r,\\\"color expected, \\\"+n+\\\" found\\\")]:null===re(r)?[new Dt(e,r,'color expected, \\\"'+r+'\\\" found')]:[]},constants:Rt,enum:Vr,filter:$r,function:jr,layer:rn,object:Fr,source:nn,light:an,string:on,formatted:function(t){return 0===on(t).length?[]:Ur(t)}};function ln(t){var e=t.value,r=t.valueSpec,n=t.styleSpec;return r.expression&&kr(Nt(e))?jr(t):r.expression&&Pr(jt(e))?Ur(t):r.type&&sn[r.type]?sn[r.type](t):Fr(Ft({},t,{valueSpec:r.type?n[r.type]:r}))}function cn(t){var e=t.value,r=t.key,n=on(t);return n.length?n:(-1===e.indexOf(\\\"{fontstack}\\\")&&n.push(new Dt(r,e,'\\\"glyphs\\\" url must include a \\\"{fontstack}\\\" token')),-1===e.indexOf(\\\"{range}\\\")&&n.push(new Dt(r,e,'\\\"glyphs\\\" url must include a \\\"{range}\\\" token')),n)}function un(t,e){e=e||It;var r=[];return r=r.concat(ln({key:\\\"\\\",value:t,valueSpec:e.$root,styleSpec:e,style:t,objectElementValidators:{glyphs:cn,\\\"*\\\":function(){return[]}}})),t.constants&&(r=r.concat(Rt({key:\\\"constants\\\",value:t.constants,style:t,styleSpec:e}))),hn(r)}function hn(t){return[].concat(t).sort(function(t,e){return t.line-e.line})}function fn(t){return function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];return hn(t.apply(this,e))}}un.source=fn(nn),un.light=fn(an),un.layer=fn(rn),un.filter=fn($r),un.paintProperty=fn(tn),un.layoutProperty=fn(en);var pn=un,dn=pn.light,gn=pn.paintProperty,vn=pn.layoutProperty;function mn(t,e){var r=!1;if(e&&e.length)for(var n=0,i=e;n<i.length;n+=1){var a=i[n];t.fire(new Ot(new Error(a.message))),r=!0}return r}var yn=bn,xn=3;function bn(t,e,r){var n=this.cells=[];if(t instanceof ArrayBuffer){this.arrayBuffer=t;var i=new Int32Array(this.arrayBuffer);t=i[0],e=i[1],r=i[2],this.d=e+2*r;for(var a=0;a<this.d*this.d;a++){var o=i[xn+a],s=i[xn+a+1];n.push(o===s?null:i.subarray(o,s))}var l=i[xn+n.length],c=i[xn+n.length+1];this.keys=i.subarray(l,c),this.bboxes=i.subarray(c),this.insert=this._insertReadonly}else{this.d=e+2*r;for(var u=0;u<this.d*this.d;u++)n.push([]);this.keys=[],this.bboxes=[]}this.n=e,this.extent=t,this.padding=r,this.scale=e/t,this.uid=0;var h=r/e*t;this.min=-h,this.max=t+h}bn.prototype.insert=function(t,e,r,n,i){this._forEachCell(e,r,n,i,this._insertCell,this.uid++),this.keys.push(t),this.bboxes.push(e),this.bboxes.push(r),this.bboxes.push(n),this.bboxes.push(i)},bn.prototype._insertReadonly=function(){throw\\\"Cannot insert into a GridIndex created from an ArrayBuffer.\\\"},bn.prototype._insertCell=function(t,e,r,n,i,a){this.cells[i].push(a)},bn.prototype.query=function(t,e,r,n,i){var a=this.min,o=this.max;if(t<=a&&e<=a&&o<=r&&o<=n&&!i)return Array.prototype.slice.call(this.keys);var s=[];return this._forEachCell(t,e,r,n,this._queryCell,s,{},i),s},bn.prototype._queryCell=function(t,e,r,n,i,a,o,s){var l=this.cells[i];if(null!==l)for(var c=this.keys,u=this.bboxes,h=0;h<l.length;h++){var f=l[h];if(void 0===o[f]){var p=4*f;(s?s(u[p+0],u[p+1],u[p+2],u[p+3]):t<=u[p+2]&&e<=u[p+3]&&r>=u[p+0]&&n>=u[p+1])?(o[f]=!0,a.push(c[f])):o[f]=!1}}},bn.prototype._forEachCell=function(t,e,r,n,i,a,o,s){for(var l=this._convertToCellCoord(t),c=this._convertToCellCoord(e),u=this._convertToCellCoord(r),h=this._convertToCellCoord(n),f=l;f<=u;f++)for(var p=c;p<=h;p++){var d=this.d*p+f;if((!s||s(this._convertFromCellCoord(f),this._convertFromCellCoord(p),this._convertFromCellCoord(f+1),this._convertFromCellCoord(p+1)))&&i.call(this,t,e,r,n,d,a,o,s))return}},bn.prototype._convertFromCellCoord=function(t){return(t-this.padding)/this.scale},bn.prototype._convertToCellCoord=function(t){return Math.max(0,Math.min(this.d-1,Math.floor(t*this.scale)+this.padding))},bn.prototype.toArrayBuffer=function(){if(this.arrayBuffer)return this.arrayBuffer;for(var t=this.cells,e=xn+this.cells.length+1+1,r=0,n=0;n<this.cells.length;n++)r+=this.cells[n].length;var i=new Int32Array(e+r+this.keys.length+this.bboxes.length);i[0]=this.extent,i[1]=this.n,i[2]=this.padding;for(var a=e,o=0;o<t.length;o++){var s=t[o];i[xn+o]=a,i.set(s,a),a+=s.length}return i[xn+t.length]=a,i.set(this.keys,a),a+=this.keys.length,i[xn+t.length+1]=a,i.set(this.bboxes,a),a+=this.bboxes.length,i.buffer};var _n=self.ImageData,wn={};function kn(t,e,r){void 0===r&&(r={}),Object.defineProperty(e,\\\"_classRegistryKey\\\",{value:t,writeable:!1}),wn[t]={klass:e,omit:r.omit||[],shallow:r.shallow||[]}}for(var Tn in kn(\\\"Object\\\",Object),yn.serialize=function(t,e){var r=t.toArrayBuffer();return e&&e.push(r),{buffer:r}},yn.deserialize=function(t){return new yn(t.buffer)},kn(\\\"Grid\\\",yn),kn(\\\"Color\\\",ne),kn(\\\"Error\\\",Error),kn(\\\"StylePropertyFunction\\\",Rr),kn(\\\"StyleExpression\\\",Lr,{omit:[\\\"_evaluator\\\"]}),kn(\\\"ZoomDependentExpression\\\",Ir),kn(\\\"ZoomConstantExpression\\\",zr),kn(\\\"CompoundExpression\\\",xe,{omit:[\\\"_evaluate\\\"]}),fr)fr[Tn]._classRegistryKey||kn(\\\"Expression_\\\"+Tn,fr[Tn]);function An(t,e){if(null==t||\\\"boolean\\\"==typeof t||\\\"number\\\"==typeof t||\\\"string\\\"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp)return t;if(t instanceof ArrayBuffer)return e&&e.push(t),t;if(ArrayBuffer.isView(t)){var r=t;return e&&e.push(r.buffer),r}if(t instanceof _n)return e&&e.push(t.data.buffer),t;if(Array.isArray(t)){for(var n=[],i=0,a=t;i<a.length;i+=1){var o=a[i];n.push(An(o,e))}return n}if(\\\"object\\\"==typeof t){var s=t.constructor,l=s._classRegistryKey;if(!l)throw new Error(\\\"can't serialize object of unregistered class\\\");var c=s.serialize?s.serialize(t,e):{};if(!s.serialize){for(var u in t)if(t.hasOwnProperty(u)&&!(wn[l].omit.indexOf(u)>=0)){var h=t[u];c[u]=wn[l].shallow.indexOf(u)>=0?h:An(h,e)}t instanceof Error&&(c.message=t.message)}if(c.$name)throw new Error(\\\"$name property is reserved for worker serialization logic.\\\");return\\\"Object\\\"!==l&&(c.$name=l),c}throw new Error(\\\"can't serialize object of type \\\"+typeof t)}function Mn(t){if(null==t||\\\"boolean\\\"==typeof t||\\\"number\\\"==typeof t||\\\"string\\\"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp||t instanceof ArrayBuffer||ArrayBuffer.isView(t)||t instanceof _n)return t;if(Array.isArray(t))return t.map(Mn);if(\\\"object\\\"==typeof t){var e=t.$name||\\\"Object\\\",r=wn[e].klass;if(!r)throw new Error(\\\"can't deserialize unregistered class \\\"+e);if(r.deserialize)return r.deserialize(t);for(var n=Object.create(r.prototype),i=0,a=Object.keys(t);i<a.length;i+=1){var o=a[i];if(\\\"$name\\\"!==o){var s=t[o];n[o]=wn[e].shallow.indexOf(o)>=0?s:Mn(s)}}return n}throw new Error(\\\"can't deserialize object of type \\\"+typeof t)}var Sn=function(){this.first=!0};Sn.prototype.update=function(t,e){var r=Math.floor(t);return this.first?(this.first=!1,this.lastIntegerZoom=r,this.lastIntegerZoomTime=0,this.lastZoom=t,this.lastFloorZoom=r,!0):(this.lastFloorZoom>r?(this.lastIntegerZoom=r+1,this.lastIntegerZoomTime=e):this.lastFloorZoom<r&&(this.lastIntegerZoom=r,this.lastIntegerZoomTime=e),t!==this.lastZoom&&(this.lastZoom=t,this.lastFloorZoom=r,!0))};var En={\\\"Latin-1 Supplement\\\":function(t){return t>=128&&t<=255},Arabic:function(t){return t>=1536&&t<=1791},\\\"Arabic Supplement\\\":function(t){return t>=1872&&t<=1919},\\\"Arabic Extended-A\\\":function(t){return t>=2208&&t<=2303},\\\"Hangul Jamo\\\":function(t){return t>=4352&&t<=4607},\\\"Unified Canadian Aboriginal Syllabics\\\":function(t){return t>=5120&&t<=5759},Khmer:function(t){return t>=6016&&t<=6143},\\\"Unified Canadian Aboriginal Syllabics Extended\\\":function(t){return t>=6320&&t<=6399},\\\"General Punctuation\\\":function(t){return t>=8192&&t<=8303},\\\"Letterlike Symbols\\\":function(t){return t>=8448&&t<=8527},\\\"Number Forms\\\":function(t){return t>=8528&&t<=8591},\\\"Miscellaneous Technical\\\":function(t){return t>=8960&&t<=9215},\\\"Control Pictures\\\":function(t){return t>=9216&&t<=9279},\\\"Optical Character Recognition\\\":function(t){return t>=9280&&t<=9311},\\\"Enclosed Alphanumerics\\\":function(t){return t>=9312&&t<=9471},\\\"Geometric Shapes\\\":function(t){return t>=9632&&t<=9727},\\\"Miscellaneous Symbols\\\":function(t){return t>=9728&&t<=9983},\\\"Miscellaneous Symbols and Arrows\\\":function(t){return t>=11008&&t<=11263},\\\"CJK Radicals Supplement\\\":function(t){return t>=11904&&t<=12031},\\\"Kangxi Radicals\\\":function(t){return t>=12032&&t<=12255},\\\"Ideographic Description Characters\\\":function(t){return t>=12272&&t<=12287},\\\"CJK Symbols and Punctuation\\\":function(t){return t>=12288&&t<=12351},Hiragana:function(t){return t>=12352&&t<=12447},Katakana:function(t){return t>=12448&&t<=12543},Bopomofo:function(t){return t>=12544&&t<=12591},\\\"Hangul Compatibility Jamo\\\":function(t){return t>=12592&&t<=12687},Kanbun:function(t){return t>=12688&&t<=12703},\\\"Bopomofo Extended\\\":function(t){return t>=12704&&t<=12735},\\\"CJK Strokes\\\":function(t){return t>=12736&&t<=12783},\\\"Katakana Phonetic Extensions\\\":function(t){return t>=12784&&t<=12799},\\\"Enclosed CJK Letters and Months\\\":function(t){return t>=12800&&t<=13055},\\\"CJK Compatibility\\\":function(t){return t>=13056&&t<=13311},\\\"CJK Unified Ideographs Extension A\\\":function(t){return t>=13312&&t<=19903},\\\"Yijing Hexagram Symbols\\\":function(t){return t>=19904&&t<=19967},\\\"CJK Unified Ideographs\\\":function(t){return t>=19968&&t<=40959},\\\"Yi Syllables\\\":function(t){return t>=40960&&t<=42127},\\\"Yi Radicals\\\":function(t){return t>=42128&&t<=42191},\\\"Hangul Jamo Extended-A\\\":function(t){return t>=43360&&t<=43391},\\\"Hangul Syllables\\\":function(t){return t>=44032&&t<=55215},\\\"Hangul Jamo Extended-B\\\":function(t){return t>=55216&&t<=55295},\\\"Private Use Area\\\":function(t){return t>=57344&&t<=63743},\\\"CJK Compatibility Ideographs\\\":function(t){return t>=63744&&t<=64255},\\\"Arabic Presentation Forms-A\\\":function(t){return t>=64336&&t<=65023},\\\"Vertical Forms\\\":function(t){return t>=65040&&t<=65055},\\\"CJK Compatibility Forms\\\":function(t){return t>=65072&&t<=65103},\\\"Small Form Variants\\\":function(t){return t>=65104&&t<=65135},\\\"Arabic Presentation Forms-B\\\":function(t){return t>=65136&&t<=65279},\\\"Halfwidth and Fullwidth Forms\\\":function(t){return t>=65280&&t<=65519}};function Cn(t){for(var e=0,r=t;e<r.length;e+=1)if(On(r[e].charCodeAt(0)))return!0;return!1}function Ln(t){for(var e=0,r=t;e<r.length;e+=1)if(!Pn(r[e].charCodeAt(0)))return!1;return!0}function Pn(t){return!(En.Arabic(t)||En[\\\"Arabic Supplement\\\"](t)||En[\\\"Arabic Extended-A\\\"](t)||En[\\\"Arabic Presentation Forms-A\\\"](t)||En[\\\"Arabic Presentation Forms-B\\\"](t))}function On(t){return!!(746===t||747===t||!(t<4352)&&(En[\\\"Bopomofo Extended\\\"](t)||En.Bopomofo(t)||En[\\\"CJK Compatibility Forms\\\"](t)&&!(t>=65097&&t<=65103)||En[\\\"CJK Compatibility Ideographs\\\"](t)||En[\\\"CJK Compatibility\\\"](t)||En[\\\"CJK Radicals Supplement\\\"](t)||En[\\\"CJK Strokes\\\"](t)||!(!En[\\\"CJK Symbols and Punctuation\\\"](t)||t>=12296&&t<=12305||t>=12308&&t<=12319||12336===t)||En[\\\"CJK Unified Ideographs Extension A\\\"](t)||En[\\\"CJK Unified Ideographs\\\"](t)||En[\\\"Enclosed CJK Letters and Months\\\"](t)||En[\\\"Hangul Compatibility Jamo\\\"](t)||En[\\\"Hangul Jamo Extended-A\\\"](t)||En[\\\"Hangul Jamo Extended-B\\\"](t)||En[\\\"Hangul Jamo\\\"](t)||En[\\\"Hangul Syllables\\\"](t)||En.Hiragana(t)||En[\\\"Ideographic Description Characters\\\"](t)||En.Kanbun(t)||En[\\\"Kangxi Radicals\\\"](t)||En[\\\"Katakana Phonetic Extensions\\\"](t)||En.Katakana(t)&&12540!==t||!(!En[\\\"Halfwidth and Fullwidth Forms\\\"](t)||65288===t||65289===t||65293===t||t>=65306&&t<=65310||65339===t||65341===t||65343===t||t>=65371&&t<=65503||65507===t||t>=65512&&t<=65519)||!(!En[\\\"Small Form Variants\\\"](t)||t>=65112&&t<=65118||t>=65123&&t<=65126)||En[\\\"Unified Canadian Aboriginal Syllabics\\\"](t)||En[\\\"Unified Canadian Aboriginal Syllabics Extended\\\"](t)||En[\\\"Vertical Forms\\\"](t)||En[\\\"Yijing Hexagram Symbols\\\"](t)||En[\\\"Yi Syllables\\\"](t)||En[\\\"Yi Radicals\\\"](t)))}function zn(t){return!(On(t)||function(t){return!!(En[\\\"Latin-1 Supplement\\\"](t)&&(167===t||169===t||174===t||177===t||188===t||189===t||190===t||215===t||247===t)||En[\\\"General Punctuation\\\"](t)&&(8214===t||8224===t||8225===t||8240===t||8241===t||8251===t||8252===t||8258===t||8263===t||8264===t||8265===t||8273===t)||En[\\\"Letterlike Symbols\\\"](t)||En[\\\"Number Forms\\\"](t)||En[\\\"Miscellaneous Technical\\\"](t)&&(t>=8960&&t<=8967||t>=8972&&t<=8991||t>=8996&&t<=9e3||9003===t||t>=9085&&t<=9114||t>=9150&&t<=9165||9167===t||t>=9169&&t<=9179||t>=9186&&t<=9215)||En[\\\"Control Pictures\\\"](t)&&9251!==t||En[\\\"Optical Character Recognition\\\"](t)||En[\\\"Enclosed Alphanumerics\\\"](t)||En[\\\"Geometric Shapes\\\"](t)||En[\\\"Miscellaneous Symbols\\\"](t)&&!(t>=9754&&t<=9759)||En[\\\"Miscellaneous Symbols and Arrows\\\"](t)&&(t>=11026&&t<=11055||t>=11088&&t<=11097||t>=11192&&t<=11243)||En[\\\"CJK Symbols and Punctuation\\\"](t)||En.Katakana(t)||En[\\\"Private Use Area\\\"](t)||En[\\\"CJK Compatibility Forms\\\"](t)||En[\\\"Small Form Variants\\\"](t)||En[\\\"Halfwidth and Fullwidth Forms\\\"](t)||8734===t||8756===t||8757===t||t>=9984&&t<=10087||t>=10102&&t<=10131||65532===t||65533===t)}(t))}function In(t,e){return!(!e&&(t>=1424&&t<=2303||En[\\\"Arabic Presentation Forms-A\\\"](t)||En[\\\"Arabic Presentation Forms-B\\\"](t))||t>=2304&&t<=3583||t>=3840&&t<=4255||En.Khmer(t))}var Dn,Rn=!1,Fn=null,Bn=!1,Nn=new zt,jn={applyArabicShaping:null,processBidirectionalText:null,processStyledBidirectionalText:null,isLoaded:function(){return Bn||null!=jn.applyArabicShaping}},Un=function(t,e){this.zoom=t,e?(this.now=e.now,this.fadeDuration=e.fadeDuration,this.zoomHistory=e.zoomHistory,this.transition=e.transition):(this.now=0,this.fadeDuration=0,this.zoomHistory=new Sn,this.transition={})};Un.prototype.isSupportedScript=function(t){return function(t,e){for(var r=0,n=t;r<n.length;r+=1)if(!In(n[r].charCodeAt(0),e))return!1;return!0}(t,jn.isLoaded())},Un.prototype.crossFadingFactor=function(){return 0===this.fadeDuration?1:Math.min((this.now-this.zoomHistory.lastIntegerZoomTime)/this.fadeDuration,1)},Un.prototype.getCrossfadeParameters=function(){var t=this.zoom,e=t-Math.floor(t),r=this.crossFadingFactor();return t>this.zoomHistory.lastIntegerZoom?{fromScale:2,toScale:1,t:e+(1-e)*r}:{fromScale:.5,toScale:1,t:1-(1-r)*e}};var Vn=function(t,e){this.property=t,this.value=e,this.expression=function(t,e){if(kr(t))return new Rr(t,e);if(Pr(t)){var r=Dr(t,e);if(\\\"error\\\"===r.result)throw new Error(r.value.map(function(t){return t.key+\\\": \\\"+t.message}).join(\\\", \\\"));return r.value}var n=t;return\\\"string\\\"==typeof t&&\\\"color\\\"===e.type&&(n=ne.parse(t)),{kind:\\\"constant\\\",evaluate:function(){return n}}}(void 0===e?t.specification.default:e,t.specification)};Vn.prototype.isDataDriven=function(){return\\\"source\\\"===this.expression.kind||\\\"composite\\\"===this.expression.kind},Vn.prototype.possiblyEvaluate=function(t){return this.property.possiblyEvaluate(this,t)};var qn=function(t){this.property=t,this.value=new Vn(t,void 0)};qn.prototype.transitioned=function(t,e){return new Gn(this.property,this.value,e,h({},t.transition,this.transition),t.now)},qn.prototype.untransitioned=function(){return new Gn(this.property,this.value,null,{},0)};var Hn=function(t){this._properties=t,this._values=Object.create(t.defaultTransitionablePropertyValues)};Hn.prototype.getValue=function(t){return b(this._values[t].value.value)},Hn.prototype.setValue=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new qn(this._values[t].property)),this._values[t].value=new Vn(this._values[t].property,null===e?void 0:b(e))},Hn.prototype.getTransition=function(t){return b(this._values[t].transition)},Hn.prototype.setTransition=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new qn(this._values[t].property)),this._values[t].transition=b(e)||void 0},Hn.prototype.serialize=function(){for(var t={},e=0,r=Object.keys(this._values);e<r.length;e+=1){var n=r[e],i=this.getValue(n);void 0!==i&&(t[n]=i);var a=this.getTransition(n);void 0!==a&&(t[n+\\\"-transition\\\"]=a)}return t},Hn.prototype.transitioned=function(t,e){for(var r=new Yn(this._properties),n=0,i=Object.keys(this._values);n<i.length;n+=1){var a=i[n];r._values[a]=this._values[a].transitioned(t,e._values[a])}return r},Hn.prototype.untransitioned=function(){for(var t=new Yn(this._properties),e=0,r=Object.keys(this._values);e<r.length;e+=1){var n=r[e];t._values[n]=this._values[n].untransitioned()}return t};var Gn=function(t,e,r,n,i){this.property=t,this.value=e,this.begin=i+n.delay||0,this.end=this.begin+n.duration||0,t.specification.transition&&(n.delay||n.duration)&&(this.prior=r)};Gn.prototype.possiblyEvaluate=function(t){var e=t.now||0,r=this.value.possiblyEvaluate(t),n=this.prior;if(n){if(e>this.end)return this.prior=null,r;if(this.value.isDataDriven())return this.prior=null,r;if(e<this.begin)return n.possiblyEvaluate(t);var i=(e-this.begin)/(this.end-this.begin);return this.property.interpolate(n.possiblyEvaluate(t),r,function(t){if(i<=0)return 0;if(i>=1)return 1;var e=i*i,r=e*i;return 4*(i<.5?r:3*(i-e)+r-.75)}())}return r};var Yn=function(t){this._properties=t,this._values=Object.create(t.defaultTransitioningPropertyValues)};Yn.prototype.possiblyEvaluate=function(t){for(var e=new Zn(this._properties),r=0,n=Object.keys(this._values);r<n.length;r+=1){var i=n[r];e._values[i]=this._values[i].possiblyEvaluate(t)}return e},Yn.prototype.hasTransition=function(){for(var t=0,e=Object.keys(this._values);t<e.length;t+=1){var r=e[t];if(this._values[r].prior)return!0}return!1};var Wn=function(t){this._properties=t,this._values=Object.create(t.defaultPropertyValues)};Wn.prototype.getValue=function(t){return b(this._values[t].value)},Wn.prototype.setValue=function(t,e){this._values[t]=new Vn(this._values[t].property,null===e?void 0:b(e))},Wn.prototype.serialize=function(){for(var t={},e=0,r=Object.keys(this._values);e<r.length;e+=1){var n=r[e],i=this.getValue(n);void 0!==i&&(t[n]=i)}return t},Wn.prototype.possiblyEvaluate=function(t){for(var e=new Zn(this._properties),r=0,n=Object.keys(this._values);r<n.length;r+=1){var i=n[r];e._values[i]=this._values[i].possiblyEvaluate(t)}return e};var Xn=function(t,e,r){this.property=t,this.value=e,this.parameters=r};Xn.prototype.isConstant=function(){return\\\"constant\\\"===this.value.kind},Xn.prototype.constantOr=function(t){return\\\"constant\\\"===this.value.kind?this.value.value:t},Xn.prototype.evaluate=function(t,e){return this.property.evaluate(this.value,this.parameters,t,e)};var Zn=function(t){this._properties=t,this._values=Object.create(t.defaultPossiblyEvaluatedValues)};Zn.prototype.get=function(t){return this._values[t]};var Jn=function(t){this.specification=t};Jn.prototype.possiblyEvaluate=function(t,e){return t.expression.evaluate(e)},Jn.prototype.interpolate=function(t,e,r){var n=Ce[this.specification.type];return n?n(t,e,r):t};var Kn=function(t){this.specification=t};Kn.prototype.possiblyEvaluate=function(t,e){return\\\"constant\\\"===t.expression.kind||\\\"camera\\\"===t.expression.kind?new Xn(this,{kind:\\\"constant\\\",value:t.expression.evaluate(e)},e):new Xn(this,t.expression,e)},Kn.prototype.interpolate=function(t,e,r){if(\\\"constant\\\"!==t.value.kind||\\\"constant\\\"!==e.value.kind)return t;if(void 0===t.value.value||void 0===e.value.value)return new Xn(this,{kind:\\\"constant\\\",value:void 0},t.parameters);var n=Ce[this.specification.type];return n?new Xn(this,{kind:\\\"constant\\\",value:n(t.value.value,e.value.value,r)},t.parameters):t},Kn.prototype.evaluate=function(t,e,r,n){return\\\"constant\\\"===t.kind?t.value:t.evaluate(e,r,n)};var $n=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.possiblyEvaluate=function(t,e){if(void 0===t.value)return new Xn(this,{kind:\\\"constant\\\",value:void 0},e);if(\\\"constant\\\"===t.expression.kind){var r=t.expression.evaluate(e),n=this._calculate(r,r,r,e);return new Xn(this,{kind:\\\"constant\\\",value:n},e)}if(\\\"camera\\\"===t.expression.kind){var i=this._calculate(t.expression.evaluate({zoom:e.zoom-1}),t.expression.evaluate({zoom:e.zoom}),t.expression.evaluate({zoom:e.zoom+1}),e);return new Xn(this,{kind:\\\"constant\\\",value:i},e)}return new Xn(this,t.expression,e)},e.prototype.evaluate=function(t,e,r,n){if(\\\"source\\\"===t.kind){var i=t.evaluate(e,r,n);return this._calculate(i,i,i,e)}return\\\"composite\\\"===t.kind?this._calculate(t.evaluate({zoom:Math.floor(e.zoom)-1},r,n),t.evaluate({zoom:Math.floor(e.zoom)},r,n),t.evaluate({zoom:Math.floor(e.zoom)+1},r,n),e):t.value},e.prototype._calculate=function(t,e,r,n){return n.zoom>n.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},e.prototype.interpolate=function(t){return t},e}(Kn),Qn=function(t){this.specification=t};Qn.prototype.possiblyEvaluate=function(t,e){if(void 0!==t.value){if(\\\"constant\\\"===t.expression.kind){var r=t.expression.evaluate(e);return this._calculate(r,r,r,e)}return this._calculate(t.expression.evaluate(new Un(Math.floor(e.zoom-1),e)),t.expression.evaluate(new Un(Math.floor(e.zoom),e)),t.expression.evaluate(new Un(Math.floor(e.zoom+1),e)),e)}},Qn.prototype._calculate=function(t,e,r,n){return n.zoom>n.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},Qn.prototype.interpolate=function(t){return t};var ti=function(t){this.specification=t};ti.prototype.possiblyEvaluate=function(t,e){return!!t.expression.evaluate(e)},ti.prototype.interpolate=function(){return!1};var ei=function(t){for(var e in this.properties=t,this.defaultPropertyValues={},this.defaultTransitionablePropertyValues={},this.defaultTransitioningPropertyValues={},this.defaultPossiblyEvaluatedValues={},t){var r=t[e],n=this.defaultPropertyValues[e]=new Vn(r,void 0),i=this.defaultTransitionablePropertyValues[e]=new qn(r);this.defaultTransitioningPropertyValues[e]=i.untransitioned(),this.defaultPossiblyEvaluatedValues[e]=n.possiblyEvaluate({})}};kn(\\\"DataDrivenProperty\\\",Kn),kn(\\\"DataConstantProperty\\\",Jn),kn(\\\"CrossFadedDataDrivenProperty\\\",$n),kn(\\\"CrossFadedProperty\\\",Qn),kn(\\\"ColorRampProperty\\\",ti);var ri=function(t){function e(e,r){if(t.call(this),this.id=e.id,this.type=e.type,this._featureFilter=function(){return!0},\\\"custom\\\"!==e.type&&(e=e,this.metadata=e.metadata,this.minzoom=e.minzoom,this.maxzoom=e.maxzoom,\\\"background\\\"!==e.type&&(this.source=e.source,this.sourceLayer=e[\\\"source-layer\\\"],this.filter=e.filter),r.layout&&(this._unevaluatedLayout=new Wn(r.layout)),r.paint)){for(var n in this._transitionablePaint=new Hn(r.paint),e.paint)this.setPaintProperty(n,e.paint[n],{validate:!1});for(var i in e.layout)this.setLayoutProperty(i,e.layout[i],{validate:!1});this._transitioningPaint=this._transitionablePaint.untransitioned()}}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getCrossfadeParameters=function(){return this._crossfadeParameters},e.prototype.getLayoutProperty=function(t){return\\\"visibility\\\"===t?this.visibility:this._unevaluatedLayout.getValue(t)},e.prototype.setLayoutProperty=function(t,e,r){if(void 0===r&&(r={}),null!=e){var n=\\\"layers.\\\"+this.id+\\\".layout.\\\"+t;if(this._validate(vn,n,t,e,r))return}\\\"visibility\\\"!==t?this._unevaluatedLayout.setValue(t,e):this.visibility=e},e.prototype.getPaintProperty=function(t){return m(t,\\\"-transition\\\")?this._transitionablePaint.getTransition(t.slice(0,-\\\"-transition\\\".length)):this._transitionablePaint.getValue(t)},e.prototype.setPaintProperty=function(t,e,r){if(void 0===r&&(r={}),null!=e){var n=\\\"layers.\\\"+this.id+\\\".paint.\\\"+t;if(this._validate(gn,n,t,e,r))return!1}if(m(t,\\\"-transition\\\"))return this._transitionablePaint.setTransition(t.slice(0,-\\\"-transition\\\".length),e||void 0),!1;var i=this._transitionablePaint._values[t],a=\\\"cross-faded-data-driven\\\"===i.property.specification[\\\"property-type\\\"],o=i.value.isDataDriven();return this._transitionablePaint.setValue(t,e),this._handleSpecialPaintPropertyUpdate(t),this._transitionablePaint._values[t].value.isDataDriven()||o||a},e.prototype._handleSpecialPaintPropertyUpdate=function(t){},e.prototype.isHidden=function(t){return!!(this.minzoom&&t<this.minzoom)||!!(this.maxzoom&&t>=this.maxzoom)||\\\"none\\\"===this.visibility},e.prototype.updateTransitions=function(t){this._transitioningPaint=this._transitionablePaint.transitioned(t,this._transitioningPaint)},e.prototype.hasTransition=function(){return this._transitioningPaint.hasTransition()},e.prototype.recalculate=function(t){t.getCrossfadeParameters&&(this._crossfadeParameters=t.getCrossfadeParameters()),this._unevaluatedLayout&&(this.layout=this._unevaluatedLayout.possiblyEvaluate(t)),this.paint=this._transitioningPaint.possiblyEvaluate(t)},e.prototype.serialize=function(){var t={id:this.id,type:this.type,source:this.source,\\\"source-layer\\\":this.sourceLayer,metadata:this.metadata,minzoom:this.minzoom,maxzoom:this.maxzoom,filter:this.filter,layout:this._unevaluatedLayout&&this._unevaluatedLayout.serialize(),paint:this._transitionablePaint&&this._transitionablePaint.serialize()};return this.visibility&&(t.layout=t.layout||{},t.layout.visibility=this.visibility),x(t,function(t,e){return!(void 0===t||\\\"layout\\\"===e&&!Object.keys(t).length||\\\"paint\\\"===e&&!Object.keys(t).length)})},e.prototype._validate=function(t,e,r,n,i){return void 0===i&&(i={}),(!i||!1!==i.validate)&&mn(this,t.call(pn,{key:e,layerType:this.type,objectKey:r,value:n,styleSpec:It,style:{glyphs:!0,sprite:!0}}))},e.prototype.is3D=function(){return!1},e.prototype.isTileClipped=function(){return!1},e.prototype.hasOffscreenPass=function(){return!1},e.prototype.resize=function(){},e.prototype.isStateDependent=function(){for(var t in this.paint._values){var e=this.paint.get(t);if(e instanceof Xn&&xr(e.property.specification)&&(\\\"source\\\"===e.value.kind||\\\"composite\\\"===e.value.kind)&&e.value.isStateDependent)return!0}return!1},e}(zt),ni={Int8:Int8Array,Uint8:Uint8Array,Int16:Int16Array,Uint16:Uint16Array,Int32:Int32Array,Uint32:Uint32Array,Float32:Float32Array},ii=function(t,e){this._structArray=t,this._pos1=e*this.size,this._pos2=this._pos1/2,this._pos4=this._pos1/4,this._pos8=this._pos1/8},ai=function(){this.isTransferred=!1,this.capacity=-1,this.resize(0)};function oi(t,e){void 0===e&&(e=1);var r=0,n=0;return{members:t.map(function(t){var i,a=(i=t.type,ni[i].BYTES_PER_ELEMENT),o=r=si(r,Math.max(e,a)),s=t.components||1;return n=Math.max(n,a),r+=a*s,{name:t.name,type:t.type,components:s,offset:o}}),size:si(r,Math.max(n,e)),alignment:e}}function si(t,e){return Math.ceil(t/e)*e}ai.serialize=function(t,e){return t._trim(),e&&(t.isTransferred=!0,e.push(t.arrayBuffer)),{length:t.length,arrayBuffer:t.arrayBuffer}},ai.deserialize=function(t){var e=Object.create(this.prototype);return e.arrayBuffer=t.arrayBuffer,e.length=t.length,e.capacity=t.arrayBuffer.byteLength/e.bytesPerElement,e._refreshViews(),e},ai.prototype._trim=function(){this.length!==this.capacity&&(this.capacity=this.length,this.arrayBuffer=this.arrayBuffer.slice(0,this.length*this.bytesPerElement),this._refreshViews())},ai.prototype.clear=function(){this.length=0},ai.prototype.resize=function(t){this.reserve(t),this.length=t},ai.prototype.reserve=function(t){if(t>this.capacity){this.capacity=Math.max(t,Math.floor(5*this.capacity),128),this.arrayBuffer=new ArrayBuffer(this.capacity*this.bytesPerElement);var e=this.uint8;this._refreshViews(),e&&this.uint8.set(e)}},ai.prototype._refreshViews=function(){throw new Error(\\\"_refreshViews() must be implemented by each concrete StructArray layout\\\")};var li=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.int16[n+0]=e,this.int16[n+1]=r,t},e}(ai);li.prototype.bytesPerElement=4,kn(\\\"StructArrayLayout2i4\\\",li);var ci=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,i){var a=4*t;return this.int16[a+0]=e,this.int16[a+1]=r,this.int16[a+2]=n,this.int16[a+3]=i,t},e}(ai);ci.prototype.bytesPerElement=8,kn(\\\"StructArrayLayout4i8\\\",ci);var ui=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace=function(t,e,r,n,i,a,o){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.int16[s+2]=n,this.int16[s+3]=i,this.int16[s+4]=a,this.int16[s+5]=o,t},e}(ai);ui.prototype.bytesPerElement=12,kn(\\\"StructArrayLayout2i4i12\\\",ui);var hi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace=function(t,e,r,n,i,a,o){var s=4*t,l=8*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.uint8[l+4]=n,this.uint8[l+5]=i,this.uint8[l+6]=a,this.uint8[l+7]=o,t},e}(ai);hi.prototype.bytesPerElement=8,kn(\\\"StructArrayLayout2i4ub8\\\",hi);var fi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s){var l=this.length;return this.resize(l+1),this.emplace(l,t,e,r,n,i,a,o,s)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,l){var c=8*t;return this.uint16[c+0]=e,this.uint16[c+1]=r,this.uint16[c+2]=n,this.uint16[c+3]=i,this.uint16[c+4]=a,this.uint16[c+5]=o,this.uint16[c+6]=s,this.uint16[c+7]=l,t},e}(ai);fi.prototype.bytesPerElement=16,kn(\\\"StructArrayLayout8ui16\\\",fi);var pi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s){var l=this.length;return this.resize(l+1),this.emplace(l,t,e,r,n,i,a,o,s)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,l){var c=8*t;return this.int16[c+0]=e,this.int16[c+1]=r,this.int16[c+2]=n,this.int16[c+3]=i,this.uint16[c+4]=a,this.uint16[c+5]=o,this.uint16[c+6]=s,this.uint16[c+7]=l,t},e}(ai);pi.prototype.bytesPerElement=16,kn(\\\"StructArrayLayout4i4ui16\\\",pi);var di=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=3*t;return this.float32[i+0]=e,this.float32[i+1]=r,this.float32[i+2]=n,t},e}(ai);di.prototype.bytesPerElement=12,kn(\\\"StructArrayLayout3f12\\\",di);var gi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.uint32[r+0]=e,t},e}(ai);gi.prototype.bytesPerElement=4,kn(\\\"StructArrayLayout1ul4\\\",gi);var vi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,l,c,u){var h=this.length;return this.resize(h+1),this.emplace(h,t,e,r,n,i,a,o,s,l,c,u)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,l,c,u,h){var f=12*t,p=6*t;return this.int16[f+0]=e,this.int16[f+1]=r,this.int16[f+2]=n,this.int16[f+3]=i,this.int16[f+4]=a,this.int16[f+5]=o,this.uint32[p+3]=s,this.uint16[f+8]=l,this.uint16[f+9]=c,this.int16[f+10]=u,this.int16[f+11]=h,t},e}(ai);vi.prototype.bytesPerElement=24,kn(\\\"StructArrayLayout6i1ul2ui2i24\\\",vi);var mi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace=function(t,e,r,n,i,a,o){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.int16[s+2]=n,this.int16[s+3]=i,this.int16[s+4]=a,this.int16[s+5]=o,t},e}(ai);mi.prototype.bytesPerElement=12,kn(\\\"StructArrayLayout2i2i2i12\\\",mi);var yi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,i){var a=12*t,o=3*t;return this.uint8[a+0]=e,this.uint8[a+1]=r,this.float32[o+1]=n,this.float32[o+2]=i,t},e}(ai);yi.prototype.bytesPerElement=12,kn(\\\"StructArrayLayout2ub2f12\\\",yi);var xi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,l,c,u,h,f,p,d){var g=this.length;return this.resize(g+1),this.emplace(g,t,e,r,n,i,a,o,s,l,c,u,h,f,p,d)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,l,c,u,h,f,p,d,g){var v=22*t,m=11*t,y=44*t;return this.int16[v+0]=e,this.int16[v+1]=r,this.uint16[v+2]=n,this.uint16[v+3]=i,this.uint32[m+2]=a,this.uint32[m+3]=o,this.uint32[m+4]=s,this.uint16[v+10]=l,this.uint16[v+11]=c,this.uint16[v+12]=u,this.float32[m+7]=h,this.float32[m+8]=f,this.uint8[y+36]=p,this.uint8[y+37]=d,this.uint32[m+10]=g,t},e}(ai);xi.prototype.bytesPerElement=44,kn(\\\"StructArrayLayout2i2ui3ul3ui2f2ub1ul44\\\",xi);var bi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,i,a,o,s,l,c,u,h,f,p,d,g,v,m){var y=this.length;return this.resize(y+1),this.emplace(y,t,e,r,n,i,a,o,s,l,c,u,h,f,p,d,g,v,m)},e.prototype.emplace=function(t,e,r,n,i,a,o,s,l,c,u,h,f,p,d,g,v,m,y){var x=22*t,b=11*t;return this.int16[x+0]=e,this.int16[x+1]=r,this.int16[x+2]=n,this.int16[x+3]=i,this.int16[x+4]=a,this.int16[x+5]=o,this.uint16[x+6]=s,this.uint16[x+7]=l,this.uint16[x+8]=c,this.uint16[x+9]=u,this.uint16[x+10]=h,this.uint16[x+11]=f,this.uint16[x+12]=p,this.uint16[x+13]=d,this.uint16[x+14]=g,this.uint32[b+8]=v,this.float32[b+9]=m,this.float32[b+10]=y,t},e}(ai);bi.prototype.bytesPerElement=44,kn(\\\"StructArrayLayout6i9ui1ul2f44\\\",bi);var _i=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.float32[r+0]=e,t},e}(ai);_i.prototype.bytesPerElement=4,kn(\\\"StructArrayLayout1f4\\\",_i);var wi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=3*t;return this.int16[i+0]=e,this.int16[i+1]=r,this.int16[i+2]=n,t},e}(ai);wi.prototype.bytesPerElement=6,kn(\\\"StructArrayLayout3i6\\\",wi);var ki=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=2*t,a=4*t;return this.uint32[i+0]=e,this.uint16[a+2]=r,this.uint16[a+3]=n,t},e}(ai);ki.prototype.bytesPerElement=8,kn(\\\"StructArrayLayout1ul2ui8\\\",ki);var Ti=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var i=3*t;return this.uint16[i+0]=e,this.uint16[i+1]=r,this.uint16[i+2]=n,t},e}(ai);Ti.prototype.bytesPerElement=6,kn(\\\"StructArrayLayout3ui6\\\",Ti);var Ai=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.uint16[n+0]=e,this.uint16[n+1]=r,t},e}(ai);Ai.prototype.bytesPerElement=4,kn(\\\"StructArrayLayout2ui4\\\",Ai);var Mi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.uint16[r+0]=e,t},e}(ai);Mi.prototype.bytesPerElement=2,kn(\\\"StructArrayLayout1ui2\\\",Mi);var Si=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.float32[n+0]=e,this.float32[n+1]=r,t},e}(ai);Si.prototype.bytesPerElement=8,kn(\\\"StructArrayLayout2f8\\\",Si);var Ei=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,i){var a=4*t;return this.float32[a+0]=e,this.float32[a+1]=r,this.float32[a+2]=n,this.float32[a+3]=i,t},e}(ai);Ei.prototype.bytesPerElement=16,kn(\\\"StructArrayLayout4f16\\\",Ei);var Ci=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorPointX:{configurable:!0},anchorPointY:{configurable:!0},x1:{configurable:!0},y1:{configurable:!0},x2:{configurable:!0},y2:{configurable:!0},featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0},radius:{configurable:!0},signedDistanceFromAnchor:{configurable:!0},anchorPoint:{configurable:!0}};return r.anchorPointX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorPointX.set=function(t){this._structArray.int16[this._pos2+0]=t},r.anchorPointY.get=function(){return this._structArray.int16[this._pos2+1]},r.anchorPointY.set=function(t){this._structArray.int16[this._pos2+1]=t},r.x1.get=function(){return this._structArray.int16[this._pos2+2]},r.x1.set=function(t){this._structArray.int16[this._pos2+2]=t},r.y1.get=function(){return this._structArray.int16[this._pos2+3]},r.y1.set=function(t){this._structArray.int16[this._pos2+3]=t},r.x2.get=function(){return this._structArray.int16[this._pos2+4]},r.x2.set=function(t){this._structArray.int16[this._pos2+4]=t},r.y2.get=function(){return this._structArray.int16[this._pos2+5]},r.y2.set=function(t){this._structArray.int16[this._pos2+5]=t},r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.featureIndex.set=function(t){this._structArray.uint32[this._pos4+3]=t},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+8]},r.sourceLayerIndex.set=function(t){this._structArray.uint16[this._pos2+8]=t},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+9]},r.bucketIndex.set=function(t){this._structArray.uint16[this._pos2+9]=t},r.radius.get=function(){return this._structArray.int16[this._pos2+10]},r.radius.set=function(t){this._structArray.int16[this._pos2+10]=t},r.signedDistanceFromAnchor.get=function(){return this._structArray.int16[this._pos2+11]},r.signedDistanceFromAnchor.set=function(t){this._structArray.int16[this._pos2+11]=t},r.anchorPoint.get=function(){return new i(this.anchorPointX,this.anchorPointY)},Object.defineProperties(e.prototype,r),e}(ii);Ci.prototype.size=24;var Li=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new Ci(this,t)},e}(vi);kn(\\\"CollisionBoxArray\\\",Li);var Pi=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorX:{configurable:!0},anchorY:{configurable:!0},glyphStartIndex:{configurable:!0},numGlyphs:{configurable:!0},vertexStartIndex:{configurable:!0},lineStartIndex:{configurable:!0},lineLength:{configurable:!0},segment:{configurable:!0},lowerSize:{configurable:!0},upperSize:{configurable:!0},lineOffsetX:{configurable:!0},lineOffsetY:{configurable:!0},writingMode:{configurable:!0},hidden:{configurable:!0},crossTileID:{configurable:!0}};return r.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorX.set=function(t){this._structArray.int16[this._pos2+0]=t},r.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},r.anchorY.set=function(t){this._structArray.int16[this._pos2+1]=t},r.glyphStartIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.glyphStartIndex.set=function(t){this._structArray.uint16[this._pos2+2]=t},r.numGlyphs.get=function(){return this._structArray.uint16[this._pos2+3]},r.numGlyphs.set=function(t){this._structArray.uint16[this._pos2+3]=t},r.vertexStartIndex.get=function(){return this._structArray.uint32[this._pos4+2]},r.vertexStartIndex.set=function(t){this._structArray.uint32[this._pos4+2]=t},r.lineStartIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.lineStartIndex.set=function(t){this._structArray.uint32[this._pos4+3]=t},r.lineLength.get=function(){return this._structArray.uint32[this._pos4+4]},r.lineLength.set=function(t){this._structArray.uint32[this._pos4+4]=t},r.segment.get=function(){return this._structArray.uint16[this._pos2+10]},r.segment.set=function(t){this._structArray.uint16[this._pos2+10]=t},r.lowerSize.get=function(){return this._structArray.uint16[this._pos2+11]},r.lowerSize.set=function(t){this._structArray.uint16[this._pos2+11]=t},r.upperSize.get=function(){return this._structArray.uint16[this._pos2+12]},r.upperSize.set=function(t){this._structArray.uint16[this._pos2+12]=t},r.lineOffsetX.get=function(){return this._structArray.float32[this._pos4+7]},r.lineOffsetX.set=function(t){this._structArray.float32[this._pos4+7]=t},r.lineOffsetY.get=function(){return this._structArray.float32[this._pos4+8]},r.lineOffsetY.set=function(t){this._structArray.float32[this._pos4+8]=t},r.writingMode.get=function(){return this._structArray.uint8[this._pos1+36]},r.writingMode.set=function(t){this._structArray.uint8[this._pos1+36]=t},r.hidden.get=function(){return this._structArray.uint8[this._pos1+37]},r.hidden.set=function(t){this._structArray.uint8[this._pos1+37]=t},r.crossTileID.get=function(){return this._structArray.uint32[this._pos4+10]},r.crossTileID.set=function(t){this._structArray.uint32[this._pos4+10]=t},Object.defineProperties(e.prototype,r),e}(ii);Pi.prototype.size=44;var Oi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new Pi(this,t)},e}(xi);kn(\\\"PlacedSymbolArray\\\",Oi);var zi=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorX:{configurable:!0},anchorY:{configurable:!0},rightJustifiedTextSymbolIndex:{configurable:!0},centerJustifiedTextSymbolIndex:{configurable:!0},leftJustifiedTextSymbolIndex:{configurable:!0},verticalPlacedTextSymbolIndex:{configurable:!0},key:{configurable:!0},textBoxStartIndex:{configurable:!0},textBoxEndIndex:{configurable:!0},iconBoxStartIndex:{configurable:!0},iconBoxEndIndex:{configurable:!0},featureIndex:{configurable:!0},numHorizontalGlyphVertices:{configurable:!0},numVerticalGlyphVertices:{configurable:!0},numIconVertices:{configurable:!0},crossTileID:{configurable:!0},textBoxScale:{configurable:!0},radialTextOffset:{configurable:!0}};return r.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorX.set=function(t){this._structArray.int16[this._pos2+0]=t},r.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},r.anchorY.set=function(t){this._structArray.int16[this._pos2+1]=t},r.rightJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+2]},r.rightJustifiedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+2]=t},r.centerJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+3]},r.centerJustifiedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+3]=t},r.leftJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+4]},r.leftJustifiedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+4]=t},r.verticalPlacedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+5]},r.verticalPlacedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+5]=t},r.key.get=function(){return this._structArray.uint16[this._pos2+6]},r.key.set=function(t){this._structArray.uint16[this._pos2+6]=t},r.textBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+7]},r.textBoxStartIndex.set=function(t){this._structArray.uint16[this._pos2+7]=t},r.textBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+8]},r.textBoxEndIndex.set=function(t){this._structArray.uint16[this._pos2+8]=t},r.iconBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+9]},r.iconBoxStartIndex.set=function(t){this._structArray.uint16[this._pos2+9]=t},r.iconBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+10]},r.iconBoxEndIndex.set=function(t){this._structArray.uint16[this._pos2+10]=t},r.featureIndex.get=function(){return this._structArray.uint16[this._pos2+11]},r.featureIndex.set=function(t){this._structArray.uint16[this._pos2+11]=t},r.numHorizontalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+12]},r.numHorizontalGlyphVertices.set=function(t){this._structArray.uint16[this._pos2+12]=t},r.numVerticalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+13]},r.numVerticalGlyphVertices.set=function(t){this._structArray.uint16[this._pos2+13]=t},r.numIconVertices.get=function(){return this._structArray.uint16[this._pos2+14]},r.numIconVertices.set=function(t){this._structArray.uint16[this._pos2+14]=t},r.crossTileID.get=function(){return this._structArray.uint32[this._pos4+8]},r.crossTileID.set=function(t){this._structArray.uint32[this._pos4+8]=t},r.textBoxScale.get=function(){return this._structArray.float32[this._pos4+9]},r.textBoxScale.set=function(t){this._structArray.float32[this._pos4+9]=t},r.radialTextOffset.get=function(){return this._structArray.float32[this._pos4+10]},r.radialTextOffset.set=function(t){this._structArray.float32[this._pos4+10]=t},Object.defineProperties(e.prototype,r),e}(ii);zi.prototype.size=44;var Ii=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new zi(this,t)},e}(bi);kn(\\\"SymbolInstanceArray\\\",Ii);var Di=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={offsetX:{configurable:!0}};return r.offsetX.get=function(){return this._structArray.float32[this._pos4+0]},r.offsetX.set=function(t){this._structArray.float32[this._pos4+0]=t},Object.defineProperties(e.prototype,r),e}(ii);Di.prototype.size=4;var Ri=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getoffsetX=function(t){return this.float32[1*t+0]},e.prototype.get=function(t){return new Di(this,t)},e}(_i);kn(\\\"GlyphOffsetArray\\\",Ri);var Fi=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={x:{configurable:!0},y:{configurable:!0},tileUnitDistanceFromAnchor:{configurable:!0}};return r.x.get=function(){return this._structArray.int16[this._pos2+0]},r.x.set=function(t){this._structArray.int16[this._pos2+0]=t},r.y.get=function(){return this._structArray.int16[this._pos2+1]},r.y.set=function(t){this._structArray.int16[this._pos2+1]=t},r.tileUnitDistanceFromAnchor.get=function(){return this._structArray.int16[this._pos2+2]},r.tileUnitDistanceFromAnchor.set=function(t){this._structArray.int16[this._pos2+2]=t},Object.defineProperties(e.prototype,r),e}(ii);Fi.prototype.size=6;var Bi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getx=function(t){return this.int16[3*t+0]},e.prototype.gety=function(t){return this.int16[3*t+1]},e.prototype.gettileUnitDistanceFromAnchor=function(t){return this.int16[3*t+2]},e.prototype.get=function(t){return new Fi(this,t)},e}(wi);kn(\\\"SymbolLineVertexArray\\\",Bi);var Ni=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0}};return r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+0]},r.featureIndex.set=function(t){this._structArray.uint32[this._pos4+0]=t},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.sourceLayerIndex.set=function(t){this._structArray.uint16[this._pos2+2]=t},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+3]},r.bucketIndex.set=function(t){this._structArray.uint16[this._pos2+3]=t},Object.defineProperties(e.prototype,r),e}(ii);Ni.prototype.size=8;var ji=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new Ni(this,t)},e}(ki);kn(\\\"FeatureIndexArray\\\",ji);var Ui=oi([{name:\\\"a_pos\\\",components:2,type:\\\"Int16\\\"}],4).members,Vi=function(t){void 0===t&&(t=[]),this.segments=t};function qi(t,e){return 256*(t=c(Math.floor(t),0,255))+c(Math.floor(e),0,255)}Vi.prototype.prepareSegment=function(t,e,r,n){var i=this.segments[this.segments.length-1];return t>Vi.MAX_VERTEX_ARRAY_LENGTH&&w(\\\"Max vertices per segment is \\\"+Vi.MAX_VERTEX_ARRAY_LENGTH+\\\": bucket requested \\\"+t),(!i||i.vertexLength+t>Vi.MAX_VERTEX_ARRAY_LENGTH||i.sortKey!==n)&&(i={vertexOffset:e.length,primitiveOffset:r.length,vertexLength:0,primitiveLength:0},void 0!==n&&(i.sortKey=n),this.segments.push(i)),i},Vi.prototype.get=function(){return this.segments},Vi.prototype.destroy=function(){for(var t=0,e=this.segments;t<e.length;t+=1){var r=e[t];for(var n in r.vaos)r.vaos[n].destroy()}},Vi.simpleSegment=function(t,e,r,n){return new Vi([{vertexOffset:t,primitiveOffset:e,vertexLength:r,primitiveLength:n,vaos:{},sortKey:0}])},Vi.MAX_VERTEX_ARRAY_LENGTH=Math.pow(2,16)-1,kn(\\\"SegmentVector\\\",Vi);var Hi=function(){this.ids=[],this.positions=[],this.indexed=!1};function Gi(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}Hi.prototype.add=function(t,e,r,n){this.ids.push(t),this.positions.push(e,r,n)},Hi.prototype.getPositions=function(t){for(var e=0,r=this.ids.length-1;e<r;){var n=e+r>>1;this.ids[n]>=t?r=n:e=n+1}for(var i=[];this.ids[e]===t;){var a=this.positions[3*e],o=this.positions[3*e+1],s=this.positions[3*e+2];i.push({index:a,start:o,end:s}),e++}return i},Hi.serialize=function(t,e){var r=new Float64Array(t.ids),n=new Uint32Array(t.positions);return function t(e,r,n,i){if(!(n>=i)){for(var a=e[n+i>>1],o=n-1,s=i+1;;){do{o++}while(e[o]<a);do{s--}while(e[s]>a);if(o>=s)break;Gi(e,o,s),Gi(r,3*o,3*s),Gi(r,3*o+1,3*s+1),Gi(r,3*o+2,3*s+2)}t(e,r,n,s),t(e,r,s+1,i)}}(r,n,0,r.length-1),e.push(r.buffer,n.buffer),{ids:r,positions:n}},Hi.deserialize=function(t){var e=new Hi;return e.ids=t.ids,e.positions=t.positions,e.indexed=!0,e},kn(\\\"FeaturePositionMap\\\",Hi);var Yi=function(t,e){this.gl=t.gl,this.location=e},Wi=function(t){function e(e,r){t.call(this,e,r),this.current=0}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1i(this.location,t))},e}(Yi),Xi=function(t){function e(e,r){t.call(this,e,r),this.current=0}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1f(this.location,t))},e}(Yi),Zi=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]||(this.current=t,this.gl.uniform2f(this.location,t[0],t[1]))},e}(Yi),Ji=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]||(this.current=t,this.gl.uniform3f(this.location,t[0],t[1],t[2]))},e}(Yi),Ki=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0,0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]&&t[3]===this.current[3]||(this.current=t,this.gl.uniform4f(this.location,t[0],t[1],t[2],t[3]))},e}(Yi),$i=function(t){function e(e,r){t.call(this,e,r),this.current=ne.transparent}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t.r===this.current.r&&t.g===this.current.g&&t.b===this.current.b&&t.a===this.current.a||(this.current=t,this.gl.uniform4f(this.location,t.r,t.g,t.b,t.a))},e}(Yi),Qi=new Float32Array(16),ta=function(t){function e(e,r){t.call(this,e,r),this.current=Qi}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){if(t[12]!==this.current[12]||t[0]!==this.current[0])return this.current=t,void this.gl.uniformMatrix4fv(this.location,!1,t);for(var e=1;e<16;e++)if(t[e]!==this.current[e]){this.current=t,this.gl.uniformMatrix4fv(this.location,!1,t);break}},e}(Yi);function ea(t){return[qi(255*t.r,255*t.g),qi(255*t.b,255*t.a)]}var ra=function(t,e,r){this.value=t,this.names=e,this.uniformNames=this.names.map(function(t){return\\\"u_\\\"+t}),this.type=r,this.maxValue=-1/0};ra.prototype.defines=function(){return this.names.map(function(t){return\\\"#define HAS_UNIFORM_u_\\\"+t})},ra.prototype.setConstantPatternPositions=function(){},ra.prototype.populatePaintArray=function(){},ra.prototype.updatePaintArray=function(){},ra.prototype.upload=function(){},ra.prototype.destroy=function(){},ra.prototype.setUniforms=function(t,e,r,n){e.set(n.constantOr(this.value))},ra.prototype.getBinding=function(t,e){return\\\"color\\\"===this.type?new $i(t,e):new Xi(t,e)},ra.serialize=function(t){var e=t.value,r=t.names,n=t.type;return{value:An(e),names:r,type:n}},ra.deserialize=function(t){var e=t.value,r=t.names,n=t.type;return new ra(Mn(e),r,n)};var na=function(t,e,r){this.value=t,this.names=e,this.uniformNames=this.names.map(function(t){return\\\"u_\\\"+t}),this.type=r,this.maxValue=-1/0,this.patternPositions={patternTo:null,patternFrom:null}};na.prototype.defines=function(){return this.names.map(function(t){return\\\"#define HAS_UNIFORM_u_\\\"+t})},na.prototype.populatePaintArray=function(){},na.prototype.updatePaintArray=function(){},na.prototype.upload=function(){},na.prototype.destroy=function(){},na.prototype.setConstantPatternPositions=function(t,e){this.patternPositions.patternTo=t.tlbr,this.patternPositions.patternFrom=e.tlbr},na.prototype.setUniforms=function(t,e,r,n,i){var a=this.patternPositions;\\\"u_pattern_to\\\"===i&&a.patternTo&&e.set(a.patternTo),\\\"u_pattern_from\\\"===i&&a.patternFrom&&e.set(a.patternFrom)},na.prototype.getBinding=function(t,e){return new Ki(t,e)};var ia=function(t,e,r,n){this.expression=t,this.names=e,this.type=r,this.uniformNames=this.names.map(function(t){return\\\"a_\\\"+t}),this.maxValue=-1/0,this.paintVertexAttributes=e.map(function(t){return{name:\\\"a_\\\"+t,type:\\\"Float32\\\",components:\\\"color\\\"===r?2:1,offset:0}}),this.paintVertexArray=new n};ia.prototype.defines=function(){return[]},ia.prototype.setConstantPatternPositions=function(){},ia.prototype.populatePaintArray=function(t,e){var r=this.paintVertexArray,n=r.length;r.reserve(t);var i=this.expression.evaluate(new Un(0),e,{});if(\\\"color\\\"===this.type)for(var a=ea(i),o=n;o<t;o++)r.emplaceBack(a[0],a[1]);else{for(var s=n;s<t;s++)r.emplaceBack(i);this.maxValue=Math.max(this.maxValue,i)}},ia.prototype.updatePaintArray=function(t,e,r,n){var i=this.paintVertexArray,a=this.expression.evaluate({zoom:0},r,n);if(\\\"color\\\"===this.type)for(var o=ea(a),s=t;s<e;s++)i.emplace(s,o[0],o[1]);else{for(var l=t;l<e;l++)i.emplace(l,a);this.maxValue=Math.max(this.maxValue,a)}},ia.prototype.upload=function(t){this.paintVertexArray&&this.paintVertexArray.arrayBuffer&&(this.paintVertexBuffer&&this.paintVertexBuffer.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},ia.prototype.destroy=function(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy()},ia.prototype.setUniforms=function(t,e){e.set(0)},ia.prototype.getBinding=function(t,e){return new Xi(t,e)};var aa=function(t,e,r,n,i,a){this.expression=t,this.names=e,this.uniformNames=this.names.map(function(t){return\\\"u_\\\"+t+\\\"_t\\\"}),this.type=r,this.useIntegerZoom=n,this.zoom=i,this.maxValue=-1/0;var o=a;this.paintVertexAttributes=e.map(function(t){return{name:\\\"a_\\\"+t,type:\\\"Float32\\\",components:\\\"color\\\"===r?4:2,offset:0}}),this.paintVertexArray=new o};aa.prototype.defines=function(){return[]},aa.prototype.setConstantPatternPositions=function(){},aa.prototype.populatePaintArray=function(t,e){var r=this.paintVertexArray,n=r.length;r.reserve(t);var i=this.expression.evaluate(new Un(this.zoom),e,{}),a=this.expression.evaluate(new Un(this.zoom+1),e,{});if(\\\"color\\\"===this.type)for(var o=ea(i),s=ea(a),l=n;l<t;l++)r.emplaceBack(o[0],o[1],s[0],s[1]);else{for(var c=n;c<t;c++)r.emplaceBack(i,a);this.maxValue=Math.max(this.maxValue,i,a)}},aa.prototype.updatePaintArray=function(t,e,r,n){var i=this.paintVertexArray,a=this.expression.evaluate({zoom:this.zoom},r,n),o=this.expression.evaluate({zoom:this.zoom+1},r,n);if(\\\"color\\\"===this.type)for(var s=ea(a),l=ea(o),c=t;c<e;c++)i.emplace(c,s[0],s[1],l[0],l[1]);else{for(var u=t;u<e;u++)i.emplace(u,a,o);this.maxValue=Math.max(this.maxValue,a,o)}},aa.prototype.upload=function(t){this.paintVertexArray&&this.paintVertexArray.arrayBuffer&&(this.paintVertexBuffer&&this.paintVertexBuffer.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},aa.prototype.destroy=function(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy()},aa.prototype.interpolationFactor=function(t){return this.useIntegerZoom?this.expression.interpolationFactor(Math.floor(t),this.zoom,this.zoom+1):this.expression.interpolationFactor(t,this.zoom,this.zoom+1)},aa.prototype.setUniforms=function(t,e,r){e.set(this.interpolationFactor(r.zoom))},aa.prototype.getBinding=function(t,e){return new Xi(t,e)};var oa=function(t,e,r,n,i,a,o){this.expression=t,this.names=e,this.type=r,this.uniformNames=this.names.map(function(t){return\\\"u_\\\"+t+\\\"_t\\\"}),this.useIntegerZoom=n,this.zoom=i,this.maxValue=-1/0,this.layerId=o,this.paintVertexAttributes=e.map(function(t){return{name:\\\"a_\\\"+t,type:\\\"Uint16\\\",components:4,offset:0}}),this.zoomInPaintVertexArray=new a,this.zoomOutPaintVertexArray=new a};oa.prototype.defines=function(){return[]},oa.prototype.setConstantPatternPositions=function(){},oa.prototype.populatePaintArray=function(t,e,r){var n=this.zoomInPaintVertexArray,i=this.zoomOutPaintVertexArray,a=this.layerId,o=n.length;if(n.reserve(t),i.reserve(t),r&&e.patterns&&e.patterns[a]){var s=e.patterns[a],l=s.min,c=s.mid,u=s.max,h=r[l],f=r[c],p=r[u];if(!h||!f||!p)return;for(var d=o;d<t;d++)n.emplaceBack(f.tl[0],f.tl[1],f.br[0],f.br[1],h.tl[0],h.tl[1],h.br[0],h.br[1]),i.emplaceBack(f.tl[0],f.tl[1],f.br[0],f.br[1],p.tl[0],p.tl[1],p.br[0],p.br[1])}},oa.prototype.updatePaintArray=function(t,e,r,n,i){var a=this.zoomInPaintVertexArray,o=this.zoomOutPaintVertexArray,s=this.layerId;if(i&&r.patterns&&r.patterns[s]){var l=r.patterns[s],c=l.min,u=l.mid,h=l.max,f=i[c],p=i[u],d=i[h];if(!f||!p||!d)return;for(var g=t;g<e;g++)a.emplace(g,p.tl[0],p.tl[1],p.br[0],p.br[1],f.tl[0],f.tl[1],f.br[0],f.br[1]),o.emplace(g,p.tl[0],p.tl[1],p.br[0],p.br[1],d.tl[0],d.tl[1],d.br[0],d.br[1])}},oa.prototype.upload=function(t){this.zoomInPaintVertexArray&&this.zoomInPaintVertexArray.arrayBuffer&&this.zoomOutPaintVertexArray&&this.zoomOutPaintVertexArray.arrayBuffer&&(this.zoomInPaintVertexBuffer=t.createVertexBuffer(this.zoomInPaintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent),this.zoomOutPaintVertexBuffer=t.createVertexBuffer(this.zoomOutPaintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},oa.prototype.destroy=function(){this.zoomOutPaintVertexBuffer&&this.zoomOutPaintVertexBuffer.destroy(),this.zoomInPaintVertexBuffer&&this.zoomInPaintVertexBuffer.destroy()},oa.prototype.setUniforms=function(t,e){e.set(0)},oa.prototype.getBinding=function(t,e){return new Xi(t,e)};var sa=function(){this.binders={},this.cacheKey=\\\"\\\",this._buffers=[],this._featureMap=new Hi,this._bufferOffset=0};sa.createDynamic=function(t,e,r){var n=new sa,i=[];for(var a in t.paint._values)if(r(a)){var o=t.paint.get(a);if(o instanceof Xn&&xr(o.property.specification)){var s=ca(a,t.type),l=o.property.specification.type,c=o.property.useIntegerZoom;if(\\\"cross-faded\\\"===o.property.specification[\\\"property-type\\\"]||\\\"cross-faded-data-driven\\\"===o.property.specification[\\\"property-type\\\"])if(\\\"constant\\\"===o.value.kind)n.binders[a]=new na(o.value.value,s,l),i.push(\\\"/u_\\\"+a);else{var u=ua(a,l,\\\"source\\\");n.binders[a]=new oa(o.value,s,l,c,e,u,t.id),i.push(\\\"/a_\\\"+a)}else if(\\\"constant\\\"===o.value.kind)n.binders[a]=new ra(o.value.value,s,l),i.push(\\\"/u_\\\"+a);else if(\\\"source\\\"===o.value.kind){var h=ua(a,l,\\\"source\\\");n.binders[a]=new ia(o.value,s,l,h),i.push(\\\"/a_\\\"+a)}else{var f=ua(a,l,\\\"composite\\\");n.binders[a]=new aa(o.value,s,l,c,e,f),i.push(\\\"/z_\\\"+a)}}}return n.cacheKey=i.sort().join(\\\"\\\"),n},sa.prototype.populatePaintArrays=function(t,e,r,n){for(var i in this.binders)this.binders[i].populatePaintArray(t,e,n);void 0!==e.id&&this._featureMap.add(+e.id,r,this._bufferOffset,t),this._bufferOffset=t},sa.prototype.setConstantPatternPositions=function(t,e){for(var r in this.binders)this.binders[r].setConstantPatternPositions(t,e)},sa.prototype.updatePaintArrays=function(t,e,r,n){var i=!1;for(var a in t)for(var o=0,s=this._featureMap.getPositions(+a);o<s.length;o+=1){var l=s[o],c=e.feature(l.index);for(var u in this.binders){var h=this.binders[u];if(!(h instanceof ra||h instanceof na)&&!0===h.expression.isStateDependent){var f=r.paint.get(u);h.expression=f.value,h.updatePaintArray(l.start,l.end,c,t[a],n),i=!0}}}return i},sa.prototype.defines=function(){var t=[];for(var e in this.binders)t.push.apply(t,this.binders[e].defines());return t},sa.prototype.getPaintVertexBuffers=function(){return this._buffers},sa.prototype.getUniforms=function(t,e){var r=[];for(var n in this.binders)for(var i=this.binders[n],a=0,o=i.uniformNames;a<o.length;a+=1){var s=o[a];if(e[s]){var l=i.getBinding(t,e[s]);r.push({name:s,property:n,binding:l})}}return r},sa.prototype.setUniforms=function(t,e,r,n){for(var i=0,a=e;i<a.length;i+=1){var o=a[i],s=o.name,l=o.property,c=o.binding;this.binders[l].setUniforms(t,c,n,r.get(l),s)}},sa.prototype.updatePatternPaintBuffers=function(t){var e=[];for(var r in this.binders){var n=this.binders[r];if(n instanceof oa){var i=2===t.fromScale?n.zoomInPaintVertexBuffer:n.zoomOutPaintVertexBuffer;i&&e.push(i)}else(n instanceof ia||n instanceof aa)&&n.paintVertexBuffer&&e.push(n.paintVertexBuffer)}this._buffers=e},sa.prototype.upload=function(t){for(var e in this.binders)this.binders[e].upload(t);var r=[];for(var n in this.binders){var i=this.binders[n];(i instanceof ia||i instanceof aa)&&i.paintVertexBuffer&&r.push(i.paintVertexBuffer)}this._buffers=r},sa.prototype.destroy=function(){for(var t in this.binders)this.binders[t].destroy()};var la=function(t,e,r,n){void 0===n&&(n=function(){return!0}),this.programConfigurations={};for(var i=0,a=e;i<a.length;i+=1){var o=a[i];this.programConfigurations[o.id]=sa.createDynamic(o,r,n),this.programConfigurations[o.id].layoutAttributes=t}this.needsUpload=!1};function ca(t,e){return{\\\"text-opacity\\\":[\\\"opacity\\\"],\\\"icon-opacity\\\":[\\\"opacity\\\"],\\\"text-color\\\":[\\\"fill_color\\\"],\\\"icon-color\\\":[\\\"fill_color\\\"],\\\"text-halo-color\\\":[\\\"halo_color\\\"],\\\"icon-halo-color\\\":[\\\"halo_color\\\"],\\\"text-halo-blur\\\":[\\\"halo_blur\\\"],\\\"icon-halo-blur\\\":[\\\"halo_blur\\\"],\\\"text-halo-width\\\":[\\\"halo_width\\\"],\\\"icon-halo-width\\\":[\\\"halo_width\\\"],\\\"line-gap-width\\\":[\\\"gapwidth\\\"],\\\"line-pattern\\\":[\\\"pattern_to\\\",\\\"pattern_from\\\"],\\\"fill-pattern\\\":[\\\"pattern_to\\\",\\\"pattern_from\\\"],\\\"fill-extrusion-pattern\\\":[\\\"pattern_to\\\",\\\"pattern_from\\\"]}[t]||[t.replace(e+\\\"-\\\",\\\"\\\").replace(/-/g,\\\"_\\\")]}function ua(t,e,r){var n={color:{source:Si,composite:Ei},number:{source:_i,composite:Si}},i=function(t){return{\\\"line-pattern\\\":{source:fi,composite:fi},\\\"fill-pattern\\\":{source:fi,composite:fi},\\\"fill-extrusion-pattern\\\":{source:fi,composite:fi}}[t]}(t);return i&&i[r]||n[e][r]}la.prototype.populatePaintArrays=function(t,e,r,n){for(var i in this.programConfigurations)this.programConfigurations[i].populatePaintArrays(t,e,r,n);this.needsUpload=!0},la.prototype.updatePaintArrays=function(t,e,r,n){for(var i=0,a=r;i<a.length;i+=1){var o=a[i];this.needsUpload=this.programConfigurations[o.id].updatePaintArrays(t,e,o,n)||this.needsUpload}},la.prototype.get=function(t){return this.programConfigurations[t]},la.prototype.upload=function(t){if(this.needsUpload){for(var e in this.programConfigurations)this.programConfigurations[e].upload(t);this.needsUpload=!1}},la.prototype.destroy=function(){for(var t in this.programConfigurations)this.programConfigurations[t].destroy()},kn(\\\"ConstantBinder\\\",ra),kn(\\\"CrossFadedConstantBinder\\\",na),kn(\\\"SourceExpressionBinder\\\",ia),kn(\\\"CrossFadedCompositeBinder\\\",oa),kn(\\\"CompositeExpressionBinder\\\",aa),kn(\\\"ProgramConfiguration\\\",sa,{omit:[\\\"_buffers\\\"]}),kn(\\\"ProgramConfigurationSet\\\",la);var ha=8192,fa=(16,{min:-1*Math.pow(2,15),max:Math.pow(2,15)-1});function pa(t){for(var e=ha/t.extent,r=t.loadGeometry(),n=0;n<r.length;n++)for(var i=r[n],a=0;a<i.length;a++){var o=i[a];o.x=Math.round(o.x*e),o.y=Math.round(o.y*e),(o.x<fa.min||o.x>fa.max||o.y<fa.min||o.y>fa.max)&&w(\\\"Geometry exceeds allowed extent, reduce your vector tile buffer size\\\")}return r}function da(t,e,r,n,i){t.emplaceBack(2*e+(n+1)/2,2*r+(i+1)/2)}var ga=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new li,this.indexArray=new Ti,this.segments=new Vi,this.programConfigurations=new la(Ui,t.layers,t.zoom),this.stateDependentLayerIds=this.layers.filter(function(t){return t.isStateDependent()}).map(function(t){return t.id})};function va(t,e){for(var r=0;r<t.length;r++)if(Aa(e,t[r]))return!0;for(var n=0;n<e.length;n++)if(Aa(t,e[n]))return!0;return!!ba(t,e)}function ma(t,e,r){return!!Aa(t,e)||!!wa(e,t,r)}function ya(t,e){if(1===t.length)return Ta(e,t[0]);for(var r=0;r<e.length;r++)for(var n=e[r],i=0;i<n.length;i++)if(Aa(t,n[i]))return!0;for(var a=0;a<t.length;a++)if(Ta(e,t[a]))return!0;for(var o=0;o<e.length;o++)if(ba(t,e[o]))return!0;return!1}function xa(t,e,r){if(t.length>1){if(ba(t,e))return!0;for(var n=0;n<e.length;n++)if(wa(e[n],t,r))return!0}for(var i=0;i<t.length;i++)if(wa(t[i],e,r))return!0;return!1}function ba(t,e){if(0===t.length||0===e.length)return!1;for(var r=0;r<t.length-1;r++)for(var n=t[r],i=t[r+1],a=0;a<e.length-1;a++)if(_a(n,i,e[a],e[a+1]))return!0;return!1}function _a(t,e,r,n){return k(t,r,n)!==k(e,r,n)&&k(t,e,r)!==k(t,e,n)}function wa(t,e,r){var n=r*r;if(1===e.length)return t.distSqr(e[0])<n;for(var i=1;i<e.length;i++)if(ka(t,e[i-1],e[i])<n)return!0;return!1}function ka(t,e,r){var n=e.distSqr(r);if(0===n)return t.distSqr(e);var i=((t.x-e.x)*(r.x-e.x)+(t.y-e.y)*(r.y-e.y))/n;return i<0?t.distSqr(e):i>1?t.distSqr(r):t.distSqr(r.sub(e)._mult(i)._add(e))}function Ta(t,e){for(var r,n,i,a=!1,o=0;o<t.length;o++)for(var s=0,l=(r=t[o]).length-1;s<r.length;l=s++)n=r[s],i=r[l],n.y>e.y!=i.y>e.y&&e.x<(i.x-n.x)*(e.y-n.y)/(i.y-n.y)+n.x&&(a=!a);return a}function Aa(t,e){for(var r=!1,n=0,i=t.length-1;n<t.length;i=n++){var a=t[n],o=t[i];a.y>e.y!=o.y>e.y&&e.x<(o.x-a.x)*(e.y-a.y)/(o.y-a.y)+a.x&&(r=!r)}return r}function Ma(t,e,r){var n=r[0],i=r[2];if(t.x<n.x&&e.x<n.x||t.x>i.x&&e.x>i.x||t.y<n.y&&e.y<n.y||t.y>i.y&&e.y>i.y)return!1;var a=k(t,e,r[0]);return a!==k(t,e,r[1])||a!==k(t,e,r[2])||a!==k(t,e,r[3])}function Sa(t,e,r){var n=e.paint.get(t).value;return\\\"constant\\\"===n.kind?n.value:r.programConfigurations.get(e.id).binders[t].maxValue}function Ea(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function Ca(t,e,r,n,a){if(!e[0]&&!e[1])return t;var o=i.convert(e)._mult(a);\\\"viewport\\\"===r&&o._rotate(-n);for(var s=[],l=0;l<t.length;l++){var c=t[l];s.push(c.sub(o))}return s}ga.prototype.populate=function(t,e){for(var r=0,n=t;r<n.length;r+=1){var i=n[r],a=i.feature,o=i.index,s=i.sourceLayerIndex;if(this.layers[0]._featureFilter(new Un(this.zoom),a)){var l=pa(a);this.addFeature(a,l,o),e.featureIndex.insert(a,l,o,s,this.index)}}},ga.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},ga.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},ga.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},ga.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Ui),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},ga.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},ga.prototype.addFeature=function(t,e,r){for(var n=0,i=e;n<i.length;n+=1)for(var a=0,o=i[n];a<o.length;a+=1){var s=o[a],l=s.x,c=s.y;if(!(l<0||l>=ha||c<0||c>=ha)){var u=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray),h=u.vertexLength;da(this.layoutVertexArray,l,c,-1,-1),da(this.layoutVertexArray,l,c,1,-1),da(this.layoutVertexArray,l,c,1,1),da(this.layoutVertexArray,l,c,-1,1),this.indexArray.emplaceBack(h,h+1,h+2),this.indexArray.emplaceBack(h,h+3,h+2),u.vertexLength+=4,u.primitiveLength+=2}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,{})},kn(\\\"CircleBucket\\\",ga,{omit:[\\\"layers\\\"]});var La={paint:new ei({\\\"circle-radius\\\":new Kn(It.paint_circle[\\\"circle-radius\\\"]),\\\"circle-color\\\":new Kn(It.paint_circle[\\\"circle-color\\\"]),\\\"circle-blur\\\":new Kn(It.paint_circle[\\\"circle-blur\\\"]),\\\"circle-opacity\\\":new Kn(It.paint_circle[\\\"circle-opacity\\\"]),\\\"circle-translate\\\":new Jn(It.paint_circle[\\\"circle-translate\\\"]),\\\"circle-translate-anchor\\\":new Jn(It.paint_circle[\\\"circle-translate-anchor\\\"]),\\\"circle-pitch-scale\\\":new Jn(It.paint_circle[\\\"circle-pitch-scale\\\"]),\\\"circle-pitch-alignment\\\":new Jn(It.paint_circle[\\\"circle-pitch-alignment\\\"]),\\\"circle-stroke-width\\\":new Kn(It.paint_circle[\\\"circle-stroke-width\\\"]),\\\"circle-stroke-color\\\":new Kn(It.paint_circle[\\\"circle-stroke-color\\\"]),\\\"circle-stroke-opacity\\\":new Kn(It.paint_circle[\\\"circle-stroke-opacity\\\"])})},Pa=\\\"undefined\\\"!=typeof Float32Array?Float32Array:Array;function Oa(){var t=new Pa(9);return Pa!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t}function za(){var t=new Pa(3);return Pa!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function Ia(t,e,r){var n=new Pa(3);return n[0]=t,n[1]=e,n[2]=r,n}Math.PI;function Da(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3];return t[0]=r[0]*n+r[4]*i+r[8]*a+r[12]*o,t[1]=r[1]*n+r[5]*i+r[9]*a+r[13]*o,t[2]=r[2]*n+r[6]*i+r[10]*a+r[14]*o,t[3]=r[3]*n+r[7]*i+r[11]*a+r[15]*o,t}function Ra(){var t=new Pa(4);return Pa!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t[3]=1,t}za(),function(){var t;t=new Pa(4),Pa!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0)}();za(),Ia(1,0,0),Ia(0,1,0),Ra(),Ra(),Oa(),function(){var t;t=new Pa(2),Pa!=Float32Array&&(t[0]=0,t[1]=0)}();var Fa=function(t){function e(e){t.call(this,e,La)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new ga(t)},e.prototype.queryRadius=function(t){var e=t;return Sa(\\\"circle-radius\\\",this,e)+Sa(\\\"circle-stroke-width\\\",this,e)+Ea(this.paint.get(\\\"circle-translate\\\"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,a,o,s){for(var l=Ca(t,this.paint.get(\\\"circle-translate\\\"),this.paint.get(\\\"circle-translate-anchor\\\"),a.angle,o),c=this.paint.get(\\\"circle-radius\\\").evaluate(e,r)+this.paint.get(\\\"circle-stroke-width\\\").evaluate(e,r),u=\\\"map\\\"===this.paint.get(\\\"circle-pitch-alignment\\\"),h=u?l:function(t,e){return l.map(function(t){return Ba(t,e)})}(0,s),f=u?c*o:c,p=0,d=n;p<d.length;p+=1)for(var g=0,v=d[p];g<v.length;g+=1){var m=v[g],y=u?m:Ba(m,s),x=f,b=Da([],[m.x,m.y,0,1],s);if(\\\"viewport\\\"===this.paint.get(\\\"circle-pitch-scale\\\")&&\\\"map\\\"===this.paint.get(\\\"circle-pitch-alignment\\\")?x*=b[3]/a.cameraToCenterDistance:\\\"map\\\"===this.paint.get(\\\"circle-pitch-scale\\\")&&\\\"viewport\\\"===this.paint.get(\\\"circle-pitch-alignment\\\")&&(x*=a.cameraToCenterDistance/b[3]),ma(h,y,x))return!0}return!1},e}(ri);function Ba(t,e){var r=Da([],[t.x,t.y,0,1],e);return new i(r[0]/r[3],r[1]/r[3])}var Na=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(ga);function ja(t,e,r,n){var i=e.width,a=e.height;if(n){if(n instanceof Uint8ClampedArray)n=new Uint8Array(n.buffer);else if(n.length!==i*a*r)throw new RangeError(\\\"mismatched image size\\\")}else n=new Uint8Array(i*a*r);return t.width=i,t.height=a,t.data=n,t}function Ua(t,e,r){var n=e.width,i=e.height;if(n!==t.width||i!==t.height){var a=ja({},{width:n,height:i},r);Va(t,a,{x:0,y:0},{x:0,y:0},{width:Math.min(t.width,n),height:Math.min(t.height,i)},r),t.width=n,t.height=i,t.data=a.data}}function Va(t,e,r,n,i,a){if(0===i.width||0===i.height)return e;if(i.width>t.width||i.height>t.height||r.x>t.width-i.width||r.y>t.height-i.height)throw new RangeError(\\\"out of range source coordinates for image copy\\\");if(i.width>e.width||i.height>e.height||n.x>e.width-i.width||n.y>e.height-i.height)throw new RangeError(\\\"out of range destination coordinates for image copy\\\");for(var o=t.data,s=e.data,l=0;l<i.height;l++)for(var c=((r.y+l)*t.width+r.x)*a,u=((n.y+l)*e.width+n.x)*a,h=0;h<i.width*a;h++)s[u+h]=o[c+h];return e}kn(\\\"HeatmapBucket\\\",Na,{omit:[\\\"layers\\\"]});var qa=function(t,e){ja(this,t,1,e)};qa.prototype.resize=function(t){Ua(this,t,1)},qa.prototype.clone=function(){return new qa({width:this.width,height:this.height},new Uint8Array(this.data))},qa.copy=function(t,e,r,n,i){Va(t,e,r,n,i,1)};var Ha=function(t,e){ja(this,t,4,e)};Ha.prototype.resize=function(t){Ua(this,t,4)},Ha.prototype.replace=function(t,e){e?this.data.set(t):t instanceof Uint8ClampedArray?this.data=new Uint8Array(t.buffer):this.data=t},Ha.prototype.clone=function(){return new Ha({width:this.width,height:this.height},new Uint8Array(this.data))},Ha.copy=function(t,e,r,n,i){Va(t,e,r,n,i,4)},kn(\\\"AlphaImage\\\",qa),kn(\\\"RGBAImage\\\",Ha);var Ga={paint:new ei({\\\"heatmap-radius\\\":new Kn(It.paint_heatmap[\\\"heatmap-radius\\\"]),\\\"heatmap-weight\\\":new Kn(It.paint_heatmap[\\\"heatmap-weight\\\"]),\\\"heatmap-intensity\\\":new Jn(It.paint_heatmap[\\\"heatmap-intensity\\\"]),\\\"heatmap-color\\\":new ti(It.paint_heatmap[\\\"heatmap-color\\\"]),\\\"heatmap-opacity\\\":new Jn(It.paint_heatmap[\\\"heatmap-opacity\\\"])})};function Ya(t,e){for(var r=new Uint8Array(1024),n={},i=0,a=0;i<256;i++,a+=4){n[e]=i/255;var o=t.evaluate(n);r[a+0]=Math.floor(255*o.r/o.a),r[a+1]=Math.floor(255*o.g/o.a),r[a+2]=Math.floor(255*o.b/o.a),r[a+3]=Math.floor(255*o.a)}return new Ha({width:256,height:1},r)}var Wa=function(t){function e(e){t.call(this,e,Ga),this._updateColorRamp()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new Na(t)},e.prototype._handleSpecialPaintPropertyUpdate=function(t){\\\"heatmap-color\\\"===t&&this._updateColorRamp()},e.prototype._updateColorRamp=function(){var t=this._transitionablePaint._values[\\\"heatmap-color\\\"].value.expression;this.colorRamp=Ya(t,\\\"heatmapDensity\\\"),this.colorRampTexture=null},e.prototype.resize=function(){this.heatmapFbo&&(this.heatmapFbo.destroy(),this.heatmapFbo=null)},e.prototype.queryRadius=function(){return 0},e.prototype.queryIntersectsFeature=function(){return!1},e.prototype.hasOffscreenPass=function(){return 0!==this.paint.get(\\\"heatmap-opacity\\\")&&\\\"none\\\"!==this.visibility},e}(ri),Xa={paint:new ei({\\\"hillshade-illumination-direction\\\":new Jn(It.paint_hillshade[\\\"hillshade-illumination-direction\\\"]),\\\"hillshade-illumination-anchor\\\":new Jn(It.paint_hillshade[\\\"hillshade-illumination-anchor\\\"]),\\\"hillshade-exaggeration\\\":new Jn(It.paint_hillshade[\\\"hillshade-exaggeration\\\"]),\\\"hillshade-shadow-color\\\":new Jn(It.paint_hillshade[\\\"hillshade-shadow-color\\\"]),\\\"hillshade-highlight-color\\\":new Jn(It.paint_hillshade[\\\"hillshade-highlight-color\\\"]),\\\"hillshade-accent-color\\\":new Jn(It.paint_hillshade[\\\"hillshade-accent-color\\\"])})},Za=function(t){function e(e){t.call(this,e,Xa)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.hasOffscreenPass=function(){return 0!==this.paint.get(\\\"hillshade-exaggeration\\\")&&\\\"none\\\"!==this.visibility},e}(ri),Ja=oi([{name:\\\"a_pos\\\",components:2,type:\\\"Int16\\\"}],4).members,Ka=Qa,$a=Qa;function Qa(t,e,r){r=r||2;var n,i,a,o,s,l,c,u=e&&e.length,h=u?e[0]*r:t.length,f=to(t,0,h,r,!0),p=[];if(!f||f.next===f.prev)return p;if(u&&(f=function(t,e,r,n){var i,a,o,s=[];for(i=0,a=e.length;i<a;i++)(o=to(t,e[i]*n,i<a-1?e[i+1]*n:t.length,n,!1))===o.next&&(o.steiner=!0),s.push(uo(o));for(s.sort(so),i=0;i<s.length;i++)lo(s[i],r),r=eo(r,r.next);return r}(t,e,f,r)),t.length>80*r){n=a=t[0],i=o=t[1];for(var d=r;d<h;d+=r)(s=t[d])<n&&(n=s),(l=t[d+1])<i&&(i=l),s>a&&(a=s),l>o&&(o=l);c=0!==(c=Math.max(a-n,o-i))?1/c:0}return ro(f,p,r,n,i,c),p}function to(t,e,r,n,i){var a,o;if(i===wo(t,e,r,n)>0)for(a=e;a<r;a+=n)o=xo(a,t[a],t[a+1],o);else for(a=r-n;a>=e;a-=n)o=xo(a,t[a],t[a+1],o);return o&&go(o,o.next)&&(bo(o),o=o.next),o}function eo(t,e){if(!t)return t;e||(e=t);var r,n=t;do{if(r=!1,n.steiner||!go(n,n.next)&&0!==po(n.prev,n,n.next))n=n.next;else{if(bo(n),(n=e=n.prev)===n.next)break;r=!0}}while(r||n!==e);return e}function ro(t,e,r,n,i,a,o){if(t){!o&&a&&function(t,e,r,n){var i=t;do{null===i.z&&(i.z=co(i.x,i.y,e,r,n)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,function(t){var e,r,n,i,a,o,s,l,c=1;do{for(r=t,t=null,a=null,o=0;r;){for(o++,n=r,s=0,e=0;e<c&&(s++,n=n.nextZ);e++);for(l=c;s>0||l>0&&n;)0!==s&&(0===l||!n||r.z<=n.z)?(i=r,r=r.nextZ,s--):(i=n,n=n.nextZ,l--),a?a.nextZ=i:t=i,i.prevZ=a,a=i;r=n}a.nextZ=null,c*=2}while(o>1)}(i)}(t,n,i,a);for(var s,l,c=t;t.prev!==t.next;)if(s=t.prev,l=t.next,a?io(t,n,i,a):no(t))e.push(s.i/r),e.push(t.i/r),e.push(l.i/r),bo(t),t=l.next,c=l.next;else if((t=l)===c){o?1===o?ro(t=ao(t,e,r),e,r,n,i,a,2):2===o&&oo(t,e,r,n,i,a):ro(eo(t),e,r,n,i,a,1);break}}}function no(t){var e=t.prev,r=t,n=t.next;if(po(e,r,n)>=0)return!1;for(var i=t.next.next;i!==t.prev;){if(ho(e.x,e.y,r.x,r.y,n.x,n.y,i.x,i.y)&&po(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function io(t,e,r,n){var i=t.prev,a=t,o=t.next;if(po(i,a,o)>=0)return!1;for(var s=i.x<a.x?i.x<o.x?i.x:o.x:a.x<o.x?a.x:o.x,l=i.y<a.y?i.y<o.y?i.y:o.y:a.y<o.y?a.y:o.y,c=i.x>a.x?i.x>o.x?i.x:o.x:a.x>o.x?a.x:o.x,u=i.y>a.y?i.y>o.y?i.y:o.y:a.y>o.y?a.y:o.y,h=co(s,l,e,r,n),f=co(c,u,e,r,n),p=t.prevZ,d=t.nextZ;p&&p.z>=h&&d&&d.z<=f;){if(p!==t.prev&&p!==t.next&&ho(i.x,i.y,a.x,a.y,o.x,o.y,p.x,p.y)&&po(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,d!==t.prev&&d!==t.next&&ho(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&po(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(;p&&p.z>=h;){if(p!==t.prev&&p!==t.next&&ho(i.x,i.y,a.x,a.y,o.x,o.y,p.x,p.y)&&po(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;d&&d.z<=f;){if(d!==t.prev&&d!==t.next&&ho(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&po(d.prev,d,d.next)>=0)return!1;d=d.nextZ}return!0}function ao(t,e,r){var n=t;do{var i=n.prev,a=n.next.next;!go(i,a)&&vo(i,n,n.next,a)&&mo(i,a)&&mo(a,i)&&(e.push(i.i/r),e.push(n.i/r),e.push(a.i/r),bo(n),bo(n.next),n=t=a),n=n.next}while(n!==t);return n}function oo(t,e,r,n,i,a){var o=t;do{for(var s=o.next.next;s!==o.prev;){if(o.i!==s.i&&fo(o,s)){var l=yo(o,s);return o=eo(o,o.next),l=eo(l,l.next),ro(o,e,r,n,i,a),void ro(l,e,r,n,i,a)}s=s.next}o=o.next}while(o!==t)}function so(t,e){return t.x-e.x}function lo(t,e){if(e=function(t,e){var r,n=e,i=t.x,a=t.y,o=-1/0;do{if(a<=n.y&&a>=n.next.y&&n.next.y!==n.y){var s=n.x+(a-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s<=i&&s>o){if(o=s,s===i){if(a===n.y)return n;if(a===n.next.y)return n.next}r=n.x<n.next.x?n:n.next}}n=n.next}while(n!==e);if(!r)return null;if(i===o)return r.prev;var l,c=r,u=r.x,h=r.y,f=1/0;for(n=r.next;n!==c;)i>=n.x&&n.x>=u&&i!==n.x&&ho(a<h?i:o,a,u,h,a<h?o:i,a,n.x,n.y)&&((l=Math.abs(a-n.y)/(i-n.x))<f||l===f&&n.x>r.x)&&mo(n,t)&&(r=n,f=l),n=n.next;return r}(t,e)){var r=yo(e,t);eo(r,r.next)}}function co(t,e,r,n,i){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*i)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*i)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function uo(t){var e=t,r=t;do{(e.x<r.x||e.x===r.x&&e.y<r.y)&&(r=e),e=e.next}while(e!==t);return r}function ho(t,e,r,n,i,a,o,s){return(i-o)*(e-s)-(t-o)*(a-s)>=0&&(t-o)*(n-s)-(r-o)*(e-s)>=0&&(r-o)*(a-s)-(i-o)*(n-s)>=0}function fo(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&vo(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}(t,e)&&mo(t,e)&&mo(e,t)&&function(t,e){var r=t,n=!1,i=(t.x+e.x)/2,a=(t.y+e.y)/2;do{r.y>a!=r.next.y>a&&r.next.y!==r.y&&i<(r.next.x-r.x)*(a-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next}while(r!==t);return n}(t,e)}function po(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function go(t,e){return t.x===e.x&&t.y===e.y}function vo(t,e,r,n){return!!(go(t,e)&&go(r,n)||go(t,n)&&go(r,e))||po(t,e,r)>0!=po(t,e,n)>0&&po(r,n,t)>0!=po(r,n,e)>0}function mo(t,e){return po(t.prev,t,t.next)<0?po(t,e,t.next)>=0&&po(t,t.prev,e)>=0:po(t,e,t.prev)<0||po(t,t.next,e)<0}function yo(t,e){var r=new _o(t.i,t.x,t.y),n=new _o(e.i,e.x,e.y),i=t.next,a=e.prev;return t.next=e,e.prev=t,r.next=i,i.prev=r,n.next=r,r.prev=n,a.next=n,n.prev=a,n}function xo(t,e,r,n){var i=new _o(t,e,r);return n?(i.next=n.next,i.prev=n,n.next.prev=i,n.next=i):(i.prev=i,i.next=i),i}function bo(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function _o(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function wo(t,e,r,n){for(var i=0,a=e,o=r-n;a<r;a+=n)i+=(t[o]-t[a])*(t[a+1]+t[o+1]),o=a;return i}function ko(t,e,r,n,i){!function t(e,r,n,i,a){for(;i>n;){if(i-n>600){var o=i-n+1,s=r-n+1,l=Math.log(o),c=.5*Math.exp(2*l/3),u=.5*Math.sqrt(l*c*(o-c)/o)*(s-o/2<0?-1:1);t(e,r,Math.max(n,Math.floor(r-s*c/o+u)),Math.min(i,Math.floor(r+(o-s)*c/o+u)),a)}var h=e[r],f=n,p=i;for(To(e,n,r),a(e[i],h)>0&&To(e,n,i);f<p;){for(To(e,f,p),f++,p--;a(e[f],h)<0;)f++;for(;a(e[p],h)>0;)p--}0===a(e[n],h)?To(e,n,p):To(e,++p,i),p<=r&&(n=p+1),r<=p&&(i=p-1)}}(t,e,r||0,n||t.length-1,i||Ao)}function To(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function Ao(t,e){return t<e?-1:t>e?1:0}function Mo(t,e){var r=t.length;if(r<=1)return[t];for(var n,i,a=[],o=0;o<r;o++){var s=T(t[o]);0!==s&&(t[o].area=Math.abs(s),void 0===i&&(i=s<0),i===s<0?(n&&a.push(n),n=[t[o]]):n.push(t[o]))}if(n&&a.push(n),e>1)for(var l=0;l<a.length;l++)a[l].length<=e||(ko(a[l],e,1,a[l].length-1,So),a[l]=a[l].slice(0,e));return a}function So(t,e){return e.area-t.area}function Eo(t,e,r){for(var n=r.patternDependencies,i=!1,a=0,o=e;a<o.length;a+=1){var s=o[a].paint.get(t+\\\"-pattern\\\");s.isConstant()||(i=!0);var l=s.constantOr(null);l&&(i=!0,n[l.to]=!0,n[l.from]=!0)}return i}function Co(t,e,r,n,i){for(var a=i.patternDependencies,o=0,s=e;o<s.length;o+=1){var l=s[o],c=l.paint.get(t+\\\"-pattern\\\").value;if(\\\"constant\\\"!==c.kind){var u=c.evaluate({zoom:n-1},r,{}),h=c.evaluate({zoom:n},r,{}),f=c.evaluate({zoom:n+1},r,{});a[u]=!0,a[h]=!0,a[f]=!0,r.patterns[l.id]={min:u,mid:h,max:f}}}return r}Qa.deviation=function(t,e,r,n){var i=e&&e.length,a=i?e[0]*r:t.length,o=Math.abs(wo(t,0,a,r));if(i)for(var s=0,l=e.length;s<l;s++){var c=e[s]*r,u=s<l-1?e[s+1]*r:t.length;o-=Math.abs(wo(t,c,u,r))}var h=0;for(s=0;s<n.length;s+=3){var f=n[s]*r,p=n[s+1]*r,d=n[s+2]*r;h+=Math.abs((t[f]-t[d])*(t[p+1]-t[f+1])-(t[f]-t[p])*(t[d+1]-t[f+1]))}return 0===o&&0===h?0:Math.abs((h-o)/o)},Qa.flatten=function(t){for(var e=t[0][0].length,r={vertices:[],holes:[],dimensions:e},n=0,i=0;i<t.length;i++){for(var a=0;a<t[i].length;a++)for(var o=0;o<e;o++)r.vertices.push(t[i][a][o]);i>0&&(n+=t[i-1].length,r.holes.push(n))}return r},Ka.default=$a;var Lo=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new li,this.indexArray=new Ti,this.indexArray2=new Ai,this.programConfigurations=new la(Ja,t.layers,t.zoom),this.segments=new Vi,this.segments2=new Vi,this.stateDependentLayerIds=this.layers.filter(function(t){return t.isStateDependent()}).map(function(t){return t.id})};Lo.prototype.populate=function(t,e){this.features=[],this.hasPattern=Eo(\\\"fill\\\",this.layers,e);for(var r=0,n=t;r<n.length;r+=1){var i=n[r],a=i.feature,o=i.index,s=i.sourceLayerIndex;if(this.layers[0]._featureFilter(new Un(this.zoom),a)){var l=pa(a),c={sourceLayerIndex:s,index:o,geometry:l,properties:a.properties,type:a.type,patterns:{}};void 0!==a.id&&(c.id=a.id),this.hasPattern?this.features.push(Co(\\\"fill\\\",this.layers,c,this.zoom,e)):this.addFeature(c,l,o,{}),e.featureIndex.insert(a,l,o,s,this.index)}}},Lo.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},Lo.prototype.addFeatures=function(t,e){for(var r=0,n=this.features;r<n.length;r+=1){var i=n[r],a=i.geometry;this.addFeature(i,a,i.index,e)}},Lo.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},Lo.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},Lo.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Ja),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.indexBuffer2=t.createIndexBuffer(this.indexArray2)),this.programConfigurations.upload(t),this.uploaded=!0},Lo.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.indexBuffer2.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.segments2.destroy())},Lo.prototype.addFeature=function(t,e,r,n){for(var i=0,a=Mo(e,500);i<a.length;i+=1){for(var o=a[i],s=0,l=0,c=o;l<c.length;l+=1)s+=c[l].length;for(var u=this.segments.prepareSegment(s,this.layoutVertexArray,this.indexArray),h=u.vertexLength,f=[],p=[],d=0,g=o;d<g.length;d+=1){var v=g[d];if(0!==v.length){v!==o[0]&&p.push(f.length/2);var m=this.segments2.prepareSegment(v.length,this.layoutVertexArray,this.indexArray2),y=m.vertexLength;this.layoutVertexArray.emplaceBack(v[0].x,v[0].y),this.indexArray2.emplaceBack(y+v.length-1,y),f.push(v[0].x),f.push(v[0].y);for(var x=1;x<v.length;x++)this.layoutVertexArray.emplaceBack(v[x].x,v[x].y),this.indexArray2.emplaceBack(y+x-1,y+x),f.push(v[x].x),f.push(v[x].y);m.vertexLength+=v.length,m.primitiveLength+=v.length}}for(var b=Ka(f,p),_=0;_<b.length;_+=3)this.indexArray.emplaceBack(h+b[_],h+b[_+1],h+b[_+2]);u.vertexLength+=s,u.primitiveLength+=b.length/3}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,n)},kn(\\\"FillBucket\\\",Lo,{omit:[\\\"layers\\\",\\\"features\\\"]});var Po={paint:new ei({\\\"fill-antialias\\\":new Jn(It.paint_fill[\\\"fill-antialias\\\"]),\\\"fill-opacity\\\":new Kn(It.paint_fill[\\\"fill-opacity\\\"]),\\\"fill-color\\\":new Kn(It.paint_fill[\\\"fill-color\\\"]),\\\"fill-outline-color\\\":new Kn(It.paint_fill[\\\"fill-outline-color\\\"]),\\\"fill-translate\\\":new Jn(It.paint_fill[\\\"fill-translate\\\"]),\\\"fill-translate-anchor\\\":new Jn(It.paint_fill[\\\"fill-translate-anchor\\\"]),\\\"fill-pattern\\\":new $n(It.paint_fill[\\\"fill-pattern\\\"])})},Oo=function(t){function e(e){t.call(this,e,Po)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.recalculate=function(e){t.prototype.recalculate.call(this,e);var r=this.paint._values[\\\"fill-outline-color\\\"];\\\"constant\\\"===r.value.kind&&void 0===r.value.value&&(this.paint._values[\\\"fill-outline-color\\\"]=this.paint._values[\\\"fill-color\\\"])},e.prototype.createBucket=function(t){return new Lo(t)},e.prototype.queryRadius=function(){return Ea(this.paint.get(\\\"fill-translate\\\"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,a,o){return ya(Ca(t,this.paint.get(\\\"fill-translate\\\"),this.paint.get(\\\"fill-translate-anchor\\\"),a.angle,o),n)},e.prototype.isTileClipped=function(){return!0},e}(ri),zo=oi([{name:\\\"a_pos\\\",components:2,type:\\\"Int16\\\"},{name:\\\"a_normal_ed\\\",components:4,type:\\\"Int16\\\"}],4).members,Io=Do;function Do(t,e,r,n,i){this.properties={},this.extent=r,this.type=0,this._pbf=t,this._geometry=-1,this._keys=n,this._values=i,t.readFields(Ro,this,e)}function Ro(t,e,r){1==t?e.id=r.readVarint():2==t?function(t,e){for(var r=t.readVarint()+t.pos;t.pos<r;){var n=e._keys[t.readVarint()],i=e._values[t.readVarint()];e.properties[n]=i}}(r,e):3==t?e.type=r.readVarint():4==t&&(e._geometry=r.pos)}function Fo(t){for(var e,r,n=0,i=0,a=t.length,o=a-1;i<a;o=i++)e=t[i],n+=((r=t[o]).x-e.x)*(e.y+r.y);return n}Do.types=[\\\"Unknown\\\",\\\"Point\\\",\\\"LineString\\\",\\\"Polygon\\\"],Do.prototype.loadGeometry=function(){var t=this._pbf;t.pos=this._geometry;for(var e,r=t.readVarint()+t.pos,n=1,a=0,o=0,s=0,l=[];t.pos<r;){if(a<=0){var c=t.readVarint();n=7&c,a=c>>3}if(a--,1===n||2===n)o+=t.readSVarint(),s+=t.readSVarint(),1===n&&(e&&l.push(e),e=[]),e.push(new i(o,s));else{if(7!==n)throw new Error(\\\"unknown command \\\"+n);e&&e.push(e[0].clone())}}return e&&l.push(e),l},Do.prototype.bbox=function(){var t=this._pbf;t.pos=this._geometry;for(var e=t.readVarint()+t.pos,r=1,n=0,i=0,a=0,o=1/0,s=-1/0,l=1/0,c=-1/0;t.pos<e;){if(n<=0){var u=t.readVarint();r=7&u,n=u>>3}if(n--,1===r||2===r)(i+=t.readSVarint())<o&&(o=i),i>s&&(s=i),(a+=t.readSVarint())<l&&(l=a),a>c&&(c=a);else if(7!==r)throw new Error(\\\"unknown command \\\"+r)}return[o,l,s,c]},Do.prototype.toGeoJSON=function(t,e,r){var n,i,a=this.extent*Math.pow(2,r),o=this.extent*t,s=this.extent*e,l=this.loadGeometry(),c=Do.types[this.type];function u(t){for(var e=0;e<t.length;e++){var r=t[e],n=180-360*(r.y+s)/a;t[e]=[360*(r.x+o)/a-180,360/Math.PI*Math.atan(Math.exp(n*Math.PI/180))-90]}}switch(this.type){case 1:var h=[];for(n=0;n<l.length;n++)h[n]=l[n][0];u(l=h);break;case 2:for(n=0;n<l.length;n++)u(l[n]);break;case 3:for(l=function(t){var e=t.length;if(e<=1)return[t];for(var r,n,i=[],a=0;a<e;a++){var o=Fo(t[a]);0!==o&&(void 0===n&&(n=o<0),n===o<0?(r&&i.push(r),r=[t[a]]):r.push(t[a]))}return r&&i.push(r),i}(l),n=0;n<l.length;n++)for(i=0;i<l[n].length;i++)u(l[n][i])}1===l.length?l=l[0]:c=\\\"Multi\\\"+c;var f={type:\\\"Feature\\\",geometry:{type:c,coordinates:l},properties:this.properties};return\\\"id\\\"in this&&(f.id=this.id),f};var Bo=No;function No(t,e){this.version=1,this.name=null,this.extent=4096,this.length=0,this._pbf=t,this._keys=[],this._values=[],this._features=[],t.readFields(jo,this,e),this.length=this._features.length}function jo(t,e,r){15===t?e.version=r.readVarint():1===t?e.name=r.readString():5===t?e.extent=r.readVarint():2===t?e._features.push(r.pos):3===t?e._keys.push(r.readString()):4===t&&e._values.push(function(t){for(var e=null,r=t.readVarint()+t.pos;t.pos<r;){var n=t.readVarint()>>3;e=1===n?t.readString():2===n?t.readFloat():3===n?t.readDouble():4===n?t.readVarint64():5===n?t.readVarint():6===n?t.readSVarint():7===n?t.readBoolean():null}return e}(r))}function Uo(t,e,r){if(3===t){var n=new Bo(r,r.readVarint()+r.pos);n.length&&(e[n.name]=n)}}No.prototype.feature=function(t){if(t<0||t>=this._features.length)throw new Error(\\\"feature index out of bounds\\\");this._pbf.pos=this._features[t];var e=this._pbf.readVarint()+this._pbf.pos;return new Io(this._pbf,e,this.extent,this._keys,this._values)};var Vo={VectorTile:function(t,e){this.layers=t.readFields(Uo,{},e)},VectorTileFeature:Io,VectorTileLayer:Bo},qo=Vo.VectorTileFeature.types,Ho=Math.pow(2,13);function Go(t,e,r,n,i,a,o,s){t.emplaceBack(e,r,2*Math.floor(n*Ho)+o,i*Ho*2,a*Ho*2,Math.round(s))}var Yo=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new ui,this.indexArray=new Ti,this.programConfigurations=new la(zo,t.layers,t.zoom),this.segments=new Vi,this.stateDependentLayerIds=this.layers.filter(function(t){return t.isStateDependent()}).map(function(t){return t.id})};function Wo(t,e){return t.x===e.x&&(t.x<0||t.x>ha)||t.y===e.y&&(t.y<0||t.y>ha)}function Xo(t){return t.every(function(t){return t.x<0})||t.every(function(t){return t.x>ha})||t.every(function(t){return t.y<0})||t.every(function(t){return t.y>ha})}Yo.prototype.populate=function(t,e){this.features=[],this.hasPattern=Eo(\\\"fill-extrusion\\\",this.layers,e);for(var r=0,n=t;r<n.length;r+=1){var i=n[r],a=i.feature,o=i.index,s=i.sourceLayerIndex;if(this.layers[0]._featureFilter(new Un(this.zoom),a)){var l=pa(a),c={sourceLayerIndex:s,index:o,geometry:l,properties:a.properties,type:a.type,patterns:{}};void 0!==a.id&&(c.id=a.id),this.hasPattern?this.features.push(Co(\\\"fill-extrusion\\\",this.layers,c,this.zoom,e)):this.addFeature(c,l,o,{}),e.featureIndex.insert(a,l,o,s,this.index,!0)}}},Yo.prototype.addFeatures=function(t,e){for(var r=0,n=this.features;r<n.length;r+=1){var i=n[r],a=i.geometry;this.addFeature(i,a,i.index,e)}},Yo.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},Yo.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},Yo.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},Yo.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,zo),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},Yo.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},Yo.prototype.addFeature=function(t,e,r,n){for(var i=0,a=Mo(e,500);i<a.length;i+=1){for(var o=a[i],s=0,l=0,c=o;l<c.length;l+=1)s+=c[l].length;for(var u=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray),h=0,f=o;h<f.length;h+=1){var p=f[h];if(0!==p.length&&!Xo(p))for(var d=0,g=0;g<p.length;g++){var v=p[g];if(g>=1){var m=p[g-1];if(!Wo(v,m)){u.vertexLength+4>Vi.MAX_VERTEX_ARRAY_LENGTH&&(u=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray));var y=v.sub(m)._perp()._unit(),x=m.dist(v);d+x>32768&&(d=0),Go(this.layoutVertexArray,v.x,v.y,y.x,y.y,0,0,d),Go(this.layoutVertexArray,v.x,v.y,y.x,y.y,0,1,d),d+=x,Go(this.layoutVertexArray,m.x,m.y,y.x,y.y,0,0,d),Go(this.layoutVertexArray,m.x,m.y,y.x,y.y,0,1,d);var b=u.vertexLength;this.indexArray.emplaceBack(b,b+2,b+1),this.indexArray.emplaceBack(b+1,b+2,b+3),u.vertexLength+=4,u.primitiveLength+=2}}}}if(u.vertexLength+s>Vi.MAX_VERTEX_ARRAY_LENGTH&&(u=this.segments.prepareSegment(s,this.layoutVertexArray,this.indexArray)),\\\"Polygon\\\"===qo[t.type]){for(var _=[],w=[],k=u.vertexLength,T=0,A=o;T<A.length;T+=1){var M=A[T];if(0!==M.length){M!==o[0]&&w.push(_.length/2);for(var S=0;S<M.length;S++){var E=M[S];Go(this.layoutVertexArray,E.x,E.y,0,0,1,1,0),_.push(E.x),_.push(E.y)}}}for(var C=Ka(_,w),L=0;L<C.length;L+=3)this.indexArray.emplaceBack(k+C[L],k+C[L+2],k+C[L+1]);u.primitiveLength+=C.length/3,u.vertexLength+=s}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,n)},kn(\\\"FillExtrusionBucket\\\",Yo,{omit:[\\\"layers\\\",\\\"features\\\"]});var Zo={paint:new ei({\\\"fill-extrusion-opacity\\\":new Jn(It[\\\"paint_fill-extrusion\\\"][\\\"fill-extrusion-opacity\\\"]),\\\"fill-extrusion-color\\\":new Kn(It[\\\"paint_fill-extrusion\\\"][\\\"fill-extrusion-color\\\"]),\\\"fill-extrusion-translate\\\":new Jn(It[\\\"paint_fill-extrusion\\\"][\\\"fill-extrusion-translate\\\"]),\\\"fill-extrusion-translate-anchor\\\":new Jn(It[\\\"paint_fill-extrusion\\\"][\\\"fill-extrusion-translate-anchor\\\"]),\\\"fill-extrusion-pattern\\\":new $n(It[\\\"paint_fill-extrusion\\\"][\\\"fill-extrusion-pattern\\\"]),\\\"fill-extrusion-height\\\":new Kn(It[\\\"paint_fill-extrusion\\\"][\\\"fill-extrusion-height\\\"]),\\\"fill-extrusion-base\\\":new Kn(It[\\\"paint_fill-extrusion\\\"][\\\"fill-extrusion-base\\\"]),\\\"fill-extrusion-vertical-gradient\\\":new Jn(It[\\\"paint_fill-extrusion\\\"][\\\"fill-extrusion-vertical-gradient\\\"])})},Jo=function(t){function e(e){t.call(this,e,Zo)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new Yo(t)},e.prototype.queryRadius=function(){return Ea(this.paint.get(\\\"fill-extrusion-translate\\\"))},e.prototype.is3D=function(){return!0},e.prototype.queryIntersectsFeature=function(t,e,r,n,a,o,s,l){var c=Ca(t,this.paint.get(\\\"fill-extrusion-translate\\\"),this.paint.get(\\\"fill-extrusion-translate-anchor\\\"),o.angle,s),u=this.paint.get(\\\"fill-extrusion-height\\\").evaluate(e,r),h=this.paint.get(\\\"fill-extrusion-base\\\").evaluate(e,r),f=function(t,e,r,n){for(var a=[],o=0,s=t;o<s.length;o+=1){var l=s[o],c=[l.x,l.y,0,1];Da(c,c,e),a.push(new i(c[0]/c[3],c[1]/c[3]))}return a}(c,l),p=function(t,e,r,n){for(var a=[],o=[],s=n[8]*e,l=n[9]*e,c=n[10]*e,u=n[11]*e,h=n[8]*r,f=n[9]*r,p=n[10]*r,d=n[11]*r,g=0,v=t;g<v.length;g+=1){for(var m=[],y=[],x=0,b=v[g];x<b.length;x+=1){var _=b[x],w=_.x,k=_.y,T=n[0]*w+n[4]*k+n[12],A=n[1]*w+n[5]*k+n[13],M=n[2]*w+n[6]*k+n[14],S=n[3]*w+n[7]*k+n[15],E=M+c,C=S+u,L=T+h,P=A+f,O=M+p,z=S+d,I=new i((T+s)/C,(A+l)/C);I.z=E/C,m.push(I);var D=new i(L/z,P/z);D.z=O/z,y.push(D)}a.push(m),o.push(y)}return[a,o]}(n,h,u,l);return function(t,e,r){var n=1/0;ya(r,e)&&(n=$o(r,e[0]));for(var i=0;i<e.length;i++)for(var a=e[i],o=t[i],s=0;s<a.length-1;s++){var l=a[s],c=a[s+1],u=o[s],h=[l,c,o[s+1],u,l];va(r,h)&&(n=Math.min(n,$o(r,h)))}return n!==1/0&&n}(p[0],p[1],f)},e}(ri);function Ko(t,e){return t.x*e.x+t.y*e.y}function $o(t,e){if(1===t.length){var r=e[0],n=e[1],i=e[3],a=t[0],o=n.sub(r),s=i.sub(r),l=a.sub(r),c=Ko(o,o),u=Ko(o,s),h=Ko(s,s),f=Ko(l,o),p=Ko(l,s),d=c*h-u*u,g=(h*f-u*p)/d,v=(c*p-u*f)/d,m=1-g-v;return r.z*m+n.z*g+i.z*v}for(var y=1/0,x=0,b=e;x<b.length;x+=1){var _=b[x];y=Math.min(y,_.z)}return y}var Qo=oi([{name:\\\"a_pos_normal\\\",components:2,type:\\\"Int16\\\"},{name:\\\"a_data\\\",components:4,type:\\\"Uint8\\\"}],4).members,ts=Vo.VectorTileFeature.types,es=63,rs=Math.cos(Math.PI/180*37.5),ns=.5,is=Math.pow(2,14)/ns;function as(t,e,r,n,i,a,o){t.emplaceBack((e.x<<1)+(n?1:0),(e.y<<1)+(i?1:0),Math.round(es*r.x)+128,Math.round(es*r.y)+128,1+(0===a?0:a<0?-1:1)|(o*ns&63)<<2,o*ns>>6)}var os=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.features=[],this.hasPattern=!1,this.layoutVertexArray=new hi,this.indexArray=new Ti,this.programConfigurations=new la(Qo,t.layers,t.zoom),this.segments=new Vi,this.stateDependentLayerIds=this.layers.filter(function(t){return t.isStateDependent()}).map(function(t){return t.id})};function ss(t,e){return(t/e.tileTotal*(e.end-e.start)+e.start)*(is-1)}os.prototype.populate=function(t,e){this.features=[],this.hasPattern=Eo(\\\"line\\\",this.layers,e);for(var r=0,n=t;r<n.length;r+=1){var i=n[r],a=i.feature,o=i.index,s=i.sourceLayerIndex;if(this.layers[0]._featureFilter(new Un(this.zoom),a)){var l=pa(a),c={sourceLayerIndex:s,index:o,geometry:l,properties:a.properties,type:a.type,patterns:{}};void 0!==a.id&&(c.id=a.id),this.hasPattern?this.features.push(Co(\\\"line\\\",this.layers,c,this.zoom,e)):this.addFeature(c,l,o,{}),e.featureIndex.insert(a,l,o,s,this.index)}}},os.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},os.prototype.addFeatures=function(t,e){for(var r=0,n=this.features;r<n.length;r+=1){var i=n[r],a=i.geometry;this.addFeature(i,a,i.index,e)}},os.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},os.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},os.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Qo),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},os.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},os.prototype.addFeature=function(t,e,r,n){for(var i=this.layers[0].layout,a=i.get(\\\"line-join\\\").evaluate(t,{}),o=i.get(\\\"line-cap\\\"),s=i.get(\\\"line-miter-limit\\\"),l=i.get(\\\"line-round-limit\\\"),c=0,u=e;c<u.length;c+=1){var h=u[c];this.addLine(h,t,a,o,s,l,r,n)}},os.prototype.addLine=function(t,e,r,n,i,a,o,s){var l=null;e.properties&&e.properties.hasOwnProperty(\\\"mapbox_clip_start\\\")&&e.properties.hasOwnProperty(\\\"mapbox_clip_end\\\")&&(l={start:e.properties.mapbox_clip_start,end:e.properties.mapbox_clip_end,tileTotal:void 0});for(var c=\\\"Polygon\\\"===ts[e.type],u=t.length;u>=2&&t[u-1].equals(t[u-2]);)u--;for(var h=0;h<u-1&&t[h].equals(t[h+1]);)h++;if(!(u<(c?3:2))){l&&(l.tileTotal=function(t,e,r){for(var n,i,a=0,o=h;o<r-1;o++)n=t[o],i=t[o+1],a+=n.dist(i);return a}(t,0,u)),\\\"bevel\\\"===r&&(i=1.05);var f=ha/(512*this.overscaling)*15,p=t[h],d=this.segments.prepareSegment(10*u,this.layoutVertexArray,this.indexArray);this.distance=0;var g,v,m,y=n,x=c?\\\"butt\\\":n,b=!0,_=void 0,w=void 0,k=void 0,T=void 0;this.e1=this.e2=this.e3=-1,c&&(g=t[u-2],T=p.sub(g)._unit()._perp());for(var A=h;A<u;A++)if(!(w=c&&A===u-1?t[h+1]:t[A+1])||!t[A].equals(w)){T&&(k=T),g&&(_=g),g=t[A],T=w?w.sub(g)._unit()._perp():k;var M=(k=k||T).add(T);0===M.x&&0===M.y||M._unit();var S=M.x*T.x+M.y*T.y,E=0!==S?1/S:1/0,C=S<rs&&_&&w;if(C&&A>h){var L=g.dist(_);if(L>2*f){var P=g.sub(g.sub(_)._mult(f/L)._round());this.distance+=P.dist(_),this.addCurrentVertex(P,this.distance,k.mult(1),0,0,!1,d,l),_=P}}var O=_&&w,z=O?r:w?y:x;if(O&&\\\"round\\\"===z&&(E<a?z=\\\"miter\\\":E<=2&&(z=\\\"fakeround\\\")),\\\"miter\\\"===z&&E>i&&(z=\\\"bevel\\\"),\\\"bevel\\\"===z&&(E>2&&(z=\\\"flipbevel\\\"),E<i&&(z=\\\"miter\\\")),_&&(this.distance+=g.dist(_)),\\\"miter\\\"===z)M._mult(E),this.addCurrentVertex(g,this.distance,M,0,0,!1,d,l);else if(\\\"flipbevel\\\"===z){if(E>100)M=T.clone().mult(-1);else{var I=k.x*T.y-k.y*T.x>0?-1:1,D=E*k.add(T).mag()/k.sub(T).mag();M._perp()._mult(D*I)}this.addCurrentVertex(g,this.distance,M,0,0,!1,d,l),this.addCurrentVertex(g,this.distance,M.mult(-1),0,0,!1,d,l)}else if(\\\"bevel\\\"===z||\\\"fakeround\\\"===z){var R=k.x*T.y-k.y*T.x>0,F=-Math.sqrt(E*E-1);if(R?(m=0,v=F):(v=0,m=F),b||this.addCurrentVertex(g,this.distance,k,v,m,!1,d,l),\\\"fakeround\\\"===z){for(var B=Math.floor(8*(.5-(S-.5))),N=void 0,j=0;j<B;j++)N=T.mult((j+1)/(B+1))._add(k)._unit(),this.addPieSliceVertex(g,this.distance,N,R,d,l);this.addPieSliceVertex(g,this.distance,M,R,d,l);for(var U=B-1;U>=0;U--)N=k.mult((U+1)/(B+1))._add(T)._unit(),this.addPieSliceVertex(g,this.distance,N,R,d,l)}w&&this.addCurrentVertex(g,this.distance,T,-v,-m,!1,d,l)}else\\\"butt\\\"===z?(b||this.addCurrentVertex(g,this.distance,k,0,0,!1,d,l),w&&this.addCurrentVertex(g,this.distance,T,0,0,!1,d,l)):\\\"square\\\"===z?(b||(this.addCurrentVertex(g,this.distance,k,1,1,!1,d,l),this.e1=this.e2=-1),w&&this.addCurrentVertex(g,this.distance,T,-1,-1,!1,d,l)):\\\"round\\\"===z&&(b||(this.addCurrentVertex(g,this.distance,k,0,0,!1,d,l),this.addCurrentVertex(g,this.distance,k,1,1,!0,d,l),this.e1=this.e2=-1),w&&(this.addCurrentVertex(g,this.distance,T,-1,-1,!0,d,l),this.addCurrentVertex(g,this.distance,T,0,0,!1,d,l)));if(C&&A<u-1){var V=g.dist(w);if(V>2*f){var q=g.add(w.sub(g)._mult(f/V)._round());this.distance+=q.dist(g),this.addCurrentVertex(q,this.distance,T.mult(1),0,0,!1,d,l),g=q}}b=!1}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,e,o,s)}},os.prototype.addCurrentVertex=function(t,e,r,n,i,a,o,s){var l,c=this.layoutVertexArray,u=this.indexArray;s&&(e=ss(e,s)),l=r.clone(),n&&l._sub(r.perp()._mult(n)),as(c,t,l,a,!1,n,e),this.e3=o.vertexLength++,this.e1>=0&&this.e2>=0&&(u.emplaceBack(this.e1,this.e2,this.e3),o.primitiveLength++),this.e1=this.e2,this.e2=this.e3,l=r.mult(-1),i&&l._sub(r.perp()._mult(i)),as(c,t,l,a,!0,-i,e),this.e3=o.vertexLength++,this.e1>=0&&this.e2>=0&&(u.emplaceBack(this.e1,this.e2,this.e3),o.primitiveLength++),this.e1=this.e2,this.e2=this.e3,e>is/2&&!s&&(this.distance=0,this.addCurrentVertex(t,this.distance,r,n,i,a,o))},os.prototype.addPieSliceVertex=function(t,e,r,n,i,a){r=r.mult(n?-1:1);var o=this.layoutVertexArray,s=this.indexArray;a&&(e=ss(e,a)),as(o,t,r,!1,n,0,e),this.e3=i.vertexLength++,this.e1>=0&&this.e2>=0&&(s.emplaceBack(this.e1,this.e2,this.e3),i.primitiveLength++),n?this.e2=this.e3:this.e1=this.e3},kn(\\\"LineBucket\\\",os,{omit:[\\\"layers\\\",\\\"features\\\"]});var ls=new ei({\\\"line-cap\\\":new Jn(It.layout_line[\\\"line-cap\\\"]),\\\"line-join\\\":new Kn(It.layout_line[\\\"line-join\\\"]),\\\"line-miter-limit\\\":new Jn(It.layout_line[\\\"line-miter-limit\\\"]),\\\"line-round-limit\\\":new Jn(It.layout_line[\\\"line-round-limit\\\"])}),cs={paint:new ei({\\\"line-opacity\\\":new Kn(It.paint_line[\\\"line-opacity\\\"]),\\\"line-color\\\":new Kn(It.paint_line[\\\"line-color\\\"]),\\\"line-translate\\\":new Jn(It.paint_line[\\\"line-translate\\\"]),\\\"line-translate-anchor\\\":new Jn(It.paint_line[\\\"line-translate-anchor\\\"]),\\\"line-width\\\":new Kn(It.paint_line[\\\"line-width\\\"]),\\\"line-gap-width\\\":new Kn(It.paint_line[\\\"line-gap-width\\\"]),\\\"line-offset\\\":new Kn(It.paint_line[\\\"line-offset\\\"]),\\\"line-blur\\\":new Kn(It.paint_line[\\\"line-blur\\\"]),\\\"line-dasharray\\\":new Qn(It.paint_line[\\\"line-dasharray\\\"]),\\\"line-pattern\\\":new $n(It.paint_line[\\\"line-pattern\\\"]),\\\"line-gradient\\\":new ti(It.paint_line[\\\"line-gradient\\\"])}),layout:ls},us=new(function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.possiblyEvaluate=function(e,r){return r=new Un(Math.floor(r.zoom),{now:r.now,fadeDuration:r.fadeDuration,zoomHistory:r.zoomHistory,transition:r.transition}),t.prototype.possiblyEvaluate.call(this,e,r)},e.prototype.evaluate=function(e,r,n,i){return r=h({},r,{zoom:Math.floor(r.zoom)}),t.prototype.evaluate.call(this,e,r,n,i)},e}(Kn))(cs.paint.properties[\\\"line-width\\\"].specification);us.useIntegerZoom=!0;var hs=function(t){function e(e){t.call(this,e,cs)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._handleSpecialPaintPropertyUpdate=function(t){\\\"line-gradient\\\"===t&&this._updateGradient()},e.prototype._updateGradient=function(){var t=this._transitionablePaint._values[\\\"line-gradient\\\"].value.expression;this.gradient=Ya(t,\\\"lineProgress\\\"),this.gradientTexture=null},e.prototype.recalculate=function(e){t.prototype.recalculate.call(this,e),this.paint._values[\\\"line-floorwidth\\\"]=us.possiblyEvaluate(this._transitioningPaint._values[\\\"line-width\\\"].value,e)},e.prototype.createBucket=function(t){return new os(t)},e.prototype.queryRadius=function(t){var e=t,r=fs(Sa(\\\"line-width\\\",this,e),Sa(\\\"line-gap-width\\\",this,e)),n=Sa(\\\"line-offset\\\",this,e);return r/2+Math.abs(n)+Ea(this.paint.get(\\\"line-translate\\\"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,a,o,s){var l=Ca(t,this.paint.get(\\\"line-translate\\\"),this.paint.get(\\\"line-translate-anchor\\\"),o.angle,s),c=s/2*fs(this.paint.get(\\\"line-width\\\").evaluate(e,r),this.paint.get(\\\"line-gap-width\\\").evaluate(e,r)),u=this.paint.get(\\\"line-offset\\\").evaluate(e,r);return u&&(n=function(t,e){for(var r=[],n=new i(0,0),a=0;a<t.length;a++){for(var o=t[a],s=[],l=0;l<o.length;l++){var c=o[l-1],u=o[l],h=o[l+1],f=0===l?n:u.sub(c)._unit()._perp(),p=l===o.length-1?n:h.sub(u)._unit()._perp(),d=f._add(p)._unit(),g=d.x*p.x+d.y*p.y;d._mult(1/g),s.push(d._mult(e)._add(u))}r.push(s)}return r}(n,u*s)),function(t,e,r){for(var n=0;n<e.length;n++){var i=e[n];if(t.length>=3)for(var a=0;a<i.length;a++)if(Aa(t,i[a]))return!0;if(xa(t,i,r))return!0}return!1}(l,n,c)},e.prototype.isTileClipped=function(){return!0},e}(ri);function fs(t,e){return e>0?e+2*t:t}var ps=oi([{name:\\\"a_pos_offset\\\",components:4,type:\\\"Int16\\\"},{name:\\\"a_data\\\",components:4,type:\\\"Uint16\\\"}]),ds=oi([{name:\\\"a_projected_pos\\\",components:3,type:\\\"Float32\\\"}],4),gs=(oi([{name:\\\"a_fade_opacity\\\",components:1,type:\\\"Uint32\\\"}],4),oi([{name:\\\"a_placed\\\",components:2,type:\\\"Uint8\\\"},{name:\\\"a_shift\\\",components:2,type:\\\"Float32\\\"}])),vs=(oi([{type:\\\"Int16\\\",name:\\\"anchorPointX\\\"},{type:\\\"Int16\\\",name:\\\"anchorPointY\\\"},{type:\\\"Int16\\\",name:\\\"x1\\\"},{type:\\\"Int16\\\",name:\\\"y1\\\"},{type:\\\"Int16\\\",name:\\\"x2\\\"},{type:\\\"Int16\\\",name:\\\"y2\\\"},{type:\\\"Uint32\\\",name:\\\"featureIndex\\\"},{type:\\\"Uint16\\\",name:\\\"sourceLayerIndex\\\"},{type:\\\"Uint16\\\",name:\\\"bucketIndex\\\"},{type:\\\"Int16\\\",name:\\\"radius\\\"},{type:\\\"Int16\\\",name:\\\"signedDistanceFromAnchor\\\"}]),oi([{name:\\\"a_pos\\\",components:2,type:\\\"Int16\\\"},{name:\\\"a_anchor_pos\\\",components:2,type:\\\"Int16\\\"},{name:\\\"a_extrude\\\",components:2,type:\\\"Int16\\\"}],4)),ms=oi([{name:\\\"a_pos\\\",components:2,type:\\\"Int16\\\"},{name:\\\"a_anchor_pos\\\",components:2,type:\\\"Int16\\\"},{name:\\\"a_extrude\\\",components:2,type:\\\"Int16\\\"}],4);function ys(t,e,r){return t.sections.forEach(function(t){t.text=function(t,e,r){var n=e.layout.get(\\\"text-transform\\\").evaluate(r,{});return\\\"uppercase\\\"===n?t=t.toLocaleUpperCase():\\\"lowercase\\\"===n&&(t=t.toLocaleLowerCase()),jn.applyArabicShaping&&(t=jn.applyArabicShaping(t)),t}(t.text,e,r)}),t}oi([{type:\\\"Int16\\\",name:\\\"anchorX\\\"},{type:\\\"Int16\\\",name:\\\"anchorY\\\"},{type:\\\"Uint16\\\",name:\\\"glyphStartIndex\\\"},{type:\\\"Uint16\\\",name:\\\"numGlyphs\\\"},{type:\\\"Uint32\\\",name:\\\"vertexStartIndex\\\"},{type:\\\"Uint32\\\",name:\\\"lineStartIndex\\\"},{type:\\\"Uint32\\\",name:\\\"lineLength\\\"},{type:\\\"Uint16\\\",name:\\\"segment\\\"},{type:\\\"Uint16\\\",name:\\\"lowerSize\\\"},{type:\\\"Uint16\\\",name:\\\"upperSize\\\"},{type:\\\"Float32\\\",name:\\\"lineOffsetX\\\"},{type:\\\"Float32\\\",name:\\\"lineOffsetY\\\"},{type:\\\"Uint8\\\",name:\\\"writingMode\\\"},{type:\\\"Uint8\\\",name:\\\"hidden\\\"},{type:\\\"Uint32\\\",name:\\\"crossTileID\\\"}]),oi([{type:\\\"Int16\\\",name:\\\"anchorX\\\"},{type:\\\"Int16\\\",name:\\\"anchorY\\\"},{type:\\\"Int16\\\",name:\\\"rightJustifiedTextSymbolIndex\\\"},{type:\\\"Int16\\\",name:\\\"centerJustifiedTextSymbolIndex\\\"},{type:\\\"Int16\\\",name:\\\"leftJustifiedTextSymbolIndex\\\"},{type:\\\"Int16\\\",name:\\\"verticalPlacedTextSymbolIndex\\\"},{type:\\\"Uint16\\\",name:\\\"key\\\"},{type:\\\"Uint16\\\",name:\\\"textBoxStartIndex\\\"},{type:\\\"Uint16\\\",name:\\\"textBoxEndIndex\\\"},{type:\\\"Uint16\\\",name:\\\"iconBoxStartIndex\\\"},{type:\\\"Uint16\\\",name:\\\"iconBoxEndIndex\\\"},{type:\\\"Uint16\\\",name:\\\"featureIndex\\\"},{type:\\\"Uint16\\\",name:\\\"numHorizontalGlyphVertices\\\"},{type:\\\"Uint16\\\",name:\\\"numVerticalGlyphVertices\\\"},{type:\\\"Uint16\\\",name:\\\"numIconVertices\\\"},{type:\\\"Uint32\\\",name:\\\"crossTileID\\\"},{type:\\\"Float32\\\",name:\\\"textBoxScale\\\"},{type:\\\"Float32\\\",name:\\\"radialTextOffset\\\"}]),oi([{type:\\\"Float32\\\",name:\\\"offsetX\\\"}]),oi([{type:\\\"Int16\\\",name:\\\"x\\\"},{type:\\\"Int16\\\",name:\\\"y\\\"},{type:\\\"Int16\\\",name:\\\"tileUnitDistanceFromAnchor\\\"}]);var xs={\\\"!\\\":\\\"\\\\ufe15\\\",\\\"#\\\":\\\"\\\\uff03\\\",$:\\\"\\\\uff04\\\",\\\"%\\\":\\\"\\\\uff05\\\",\\\"&\\\":\\\"\\\\uff06\\\",\\\"(\\\":\\\"\\\\ufe35\\\",\\\")\\\":\\\"\\\\ufe36\\\",\\\"*\\\":\\\"\\\\uff0a\\\",\\\"+\\\":\\\"\\\\uff0b\\\",\\\",\\\":\\\"\\\\ufe10\\\",\\\"-\\\":\\\"\\\\ufe32\\\",\\\".\\\":\\\"\\\\u30fb\\\",\\\"/\\\":\\\"\\\\uff0f\\\",\\\":\\\":\\\"\\\\ufe13\\\",\\\";\\\":\\\"\\\\ufe14\\\",\\\"<\\\":\\\"\\\\ufe3f\\\",\\\"=\\\":\\\"\\\\uff1d\\\",\\\">\\\":\\\"\\\\ufe40\\\",\\\"?\\\":\\\"\\\\ufe16\\\",\\\"@\\\":\\\"\\\\uff20\\\",\\\"[\\\":\\\"\\\\ufe47\\\",\\\"\\\\\\\\\\\":\\\"\\\\uff3c\\\",\\\"]\\\":\\\"\\\\ufe48\\\",\\\"^\\\":\\\"\\\\uff3e\\\",_:\\\"\\\\ufe33\\\",\\\"`\\\":\\\"\\\\uff40\\\",\\\"{\\\":\\\"\\\\ufe37\\\",\\\"|\\\":\\\"\\\\u2015\\\",\\\"}\\\":\\\"\\\\ufe38\\\",\\\"~\\\":\\\"\\\\uff5e\\\",\\\"\\\\xa2\\\":\\\"\\\\uffe0\\\",\\\"\\\\xa3\\\":\\\"\\\\uffe1\\\",\\\"\\\\xa5\\\":\\\"\\\\uffe5\\\",\\\"\\\\xa6\\\":\\\"\\\\uffe4\\\",\\\"\\\\xac\\\":\\\"\\\\uffe2\\\",\\\"\\\\xaf\\\":\\\"\\\\uffe3\\\",\\\"\\\\u2013\\\":\\\"\\\\ufe32\\\",\\\"\\\\u2014\\\":\\\"\\\\ufe31\\\",\\\"\\\\u2018\\\":\\\"\\\\ufe43\\\",\\\"\\\\u2019\\\":\\\"\\\\ufe44\\\",\\\"\\\\u201c\\\":\\\"\\\\ufe41\\\",\\\"\\\\u201d\\\":\\\"\\\\ufe42\\\",\\\"\\\\u2026\\\":\\\"\\\\ufe19\\\",\\\"\\\\u2027\\\":\\\"\\\\u30fb\\\",\\\"\\\\u20a9\\\":\\\"\\\\uffe6\\\",\\\"\\\\u3001\\\":\\\"\\\\ufe11\\\",\\\"\\\\u3002\\\":\\\"\\\\ufe12\\\",\\\"\\\\u3008\\\":\\\"\\\\ufe3f\\\",\\\"\\\\u3009\\\":\\\"\\\\ufe40\\\",\\\"\\\\u300a\\\":\\\"\\\\ufe3d\\\",\\\"\\\\u300b\\\":\\\"\\\\ufe3e\\\",\\\"\\\\u300c\\\":\\\"\\\\ufe41\\\",\\\"\\\\u300d\\\":\\\"\\\\ufe42\\\",\\\"\\\\u300e\\\":\\\"\\\\ufe43\\\",\\\"\\\\u300f\\\":\\\"\\\\ufe44\\\",\\\"\\\\u3010\\\":\\\"\\\\ufe3b\\\",\\\"\\\\u3011\\\":\\\"\\\\ufe3c\\\",\\\"\\\\u3014\\\":\\\"\\\\ufe39\\\",\\\"\\\\u3015\\\":\\\"\\\\ufe3a\\\",\\\"\\\\u3016\\\":\\\"\\\\ufe17\\\",\\\"\\\\u3017\\\":\\\"\\\\ufe18\\\",\\\"\\\\uff01\\\":\\\"\\\\ufe15\\\",\\\"\\\\uff08\\\":\\\"\\\\ufe35\\\",\\\"\\\\uff09\\\":\\\"\\\\ufe36\\\",\\\"\\\\uff0c\\\":\\\"\\\\ufe10\\\",\\\"\\\\uff0d\\\":\\\"\\\\ufe32\\\",\\\"\\\\uff0e\\\":\\\"\\\\u30fb\\\",\\\"\\\\uff1a\\\":\\\"\\\\ufe13\\\",\\\"\\\\uff1b\\\":\\\"\\\\ufe14\\\",\\\"\\\\uff1c\\\":\\\"\\\\ufe3f\\\",\\\"\\\\uff1e\\\":\\\"\\\\ufe40\\\",\\\"\\\\uff1f\\\":\\\"\\\\ufe16\\\",\\\"\\\\uff3b\\\":\\\"\\\\ufe47\\\",\\\"\\\\uff3d\\\":\\\"\\\\ufe48\\\",\\\"\\\\uff3f\\\":\\\"\\\\ufe33\\\",\\\"\\\\uff5b\\\":\\\"\\\\ufe37\\\",\\\"\\\\uff5c\\\":\\\"\\\\u2015\\\",\\\"\\\\uff5d\\\":\\\"\\\\ufe38\\\",\\\"\\\\uff5f\\\":\\\"\\\\ufe35\\\",\\\"\\\\uff60\\\":\\\"\\\\ufe36\\\",\\\"\\\\uff61\\\":\\\"\\\\ufe12\\\",\\\"\\\\uff62\\\":\\\"\\\\ufe41\\\",\\\"\\\\uff63\\\":\\\"\\\\ufe42\\\"},bs=function(t){function e(e,r,n,i){t.call(this,e,r),this.angle=n,void 0!==i&&(this.segment=i)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.clone=function(){return new e(this.x,this.y,this.angle,this.segment)},e}(i);kn(\\\"Anchor\\\",bs);var _s=256;function ws(t,e){var r=e.expression;if(\\\"constant\\\"===r.kind)return{kind:\\\"constant\\\",layoutSize:r.evaluate(new Un(t+1))};if(\\\"source\\\"===r.kind)return{kind:\\\"source\\\"};for(var n=r.zoomStops,i=r.interpolationType,a=0;a<n.length&&n[a]<=t;)a++;for(var o=a=Math.max(0,a-1);o<n.length&&n[o]<t+1;)o++;o=Math.min(n.length-1,o);var s=n[a],l=n[o];return\\\"composite\\\"===r.kind?{kind:\\\"composite\\\",minZoom:s,maxZoom:l,interpolationType:i}:{kind:\\\"camera\\\",minZoom:s,maxZoom:l,minSize:r.evaluate(new Un(s)),maxSize:r.evaluate(new Un(l)),interpolationType:i}}function ks(t,e,r){var n=e.uSize,i=e.uSizeT,a=r.lowerSize,o=r.upperSize;return\\\"source\\\"===t.kind?a/_s:\\\"composite\\\"===t.kind?Ee(a/_s,o/_s,i):n}function Ts(t,e){var r=0,n=0;if(\\\"constant\\\"===t.kind)n=t.layoutSize;else if(\\\"source\\\"!==t.kind){var i=t.interpolationType,a=t.minZoom,o=t.maxZoom,s=i?c(Xe.interpolationFactor(i,e,a,o),0,1):0;\\\"camera\\\"===t.kind?n=Ee(t.minSize,t.maxSize,s):r=s}return{uSizeT:r,uSize:n}}var As=Object.freeze({getSizeData:ws,evaluateSizeForFeature:ks,evaluateSizeForZoom:Ts,SIZE_PACK_FACTOR:_s}),Ms=Vo.VectorTileFeature.types,Ss=[{name:\\\"a_fade_opacity\\\",components:1,type:\\\"Uint8\\\",offset:0}];function Es(t,e,r,n,i,a,o,s){t.emplaceBack(e,r,Math.round(32*n),Math.round(32*i),a,o,s?s[0]:0,s?s[1]:0)}function Cs(t,e,r){t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r)}var Ls=function(t){this.layoutVertexArray=new pi,this.indexArray=new Ti,this.programConfigurations=t,this.segments=new Vi,this.dynamicLayoutVertexArray=new di,this.opacityVertexArray=new gi,this.placedSymbolArray=new Oi};Ls.prototype.upload=function(t,e,r,n){r&&(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,ps.members),this.indexBuffer=t.createIndexBuffer(this.indexArray,e),this.dynamicLayoutVertexBuffer=t.createVertexBuffer(this.dynamicLayoutVertexArray,ds.members,!0),this.opacityVertexBuffer=t.createVertexBuffer(this.opacityVertexArray,Ss,!0),this.opacityVertexBuffer.itemSize=1),(r||n)&&this.programConfigurations.upload(t)},Ls.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.dynamicLayoutVertexBuffer.destroy(),this.opacityVertexBuffer.destroy())},kn(\\\"SymbolBuffers\\\",Ls);var Ps=function(t,e,r){this.layoutVertexArray=new t,this.layoutAttributes=e,this.indexArray=new r,this.segments=new Vi,this.collisionVertexArray=new yi};Ps.prototype.upload=function(t){this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,this.layoutAttributes),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.collisionVertexBuffer=t.createVertexBuffer(this.collisionVertexArray,gs.members,!0)},Ps.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.segments.destroy(),this.collisionVertexBuffer.destroy())},kn(\\\"CollisionBuffers\\\",Ps);var Os=function(t){this.collisionBoxArray=t.collisionBoxArray,this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.pixelRatio=t.pixelRatio,this.sourceLayerIndex=t.sourceLayerIndex,this.hasPattern=!1;var e=this.layers[0]._unevaluatedLayout._values;this.textSizeData=ws(this.zoom,e[\\\"text-size\\\"]),this.iconSizeData=ws(this.zoom,e[\\\"icon-size\\\"]);var r=this.layers[0].layout,n=r.get(\\\"symbol-sort-key\\\"),i=r.get(\\\"symbol-z-order\\\");this.sortFeaturesByKey=\\\"viewport-y\\\"!==i&&void 0!==n.constantOr(1);var a=\\\"viewport-y\\\"===i||\\\"auto\\\"===i&&!this.sortFeaturesByKey;this.sortFeaturesByY=a&&(r.get(\\\"text-allow-overlap\\\")||r.get(\\\"icon-allow-overlap\\\")||r.get(\\\"text-ignore-placement\\\")||r.get(\\\"icon-ignore-placement\\\")),this.stateDependentLayerIds=this.layers.filter(function(t){return t.isStateDependent()}).map(function(t){return t.id}),this.sourceID=t.sourceID};Os.prototype.createArrays=function(){this.text=new Ls(new la(ps.members,this.layers,this.zoom,function(t){return/^text/.test(t)})),this.icon=new Ls(new la(ps.members,this.layers,this.zoom,function(t){return/^icon/.test(t)})),this.collisionBox=new Ps(mi,vs.members,Ai),this.collisionCircle=new Ps(mi,ms.members,Ti),this.glyphOffsetArray=new Ri,this.lineVertexArray=new Bi,this.symbolInstances=new Ii},Os.prototype.calculateGlyphDependencies=function(t,e,r,n){for(var i=0;i<t.length;i++)if(e[t.charCodeAt(i)]=!0,r&&n){var a=xs[t.charAt(i)];a&&(e[a.charCodeAt(0)]=!0)}},Os.prototype.populate=function(t,e){var r=this.layers[0],n=r.layout,i=n.get(\\\"text-font\\\"),a=n.get(\\\"text-field\\\"),o=n.get(\\\"icon-image\\\"),s=(\\\"constant\\\"!==a.value.kind||a.value.value.toString().length>0)&&(\\\"constant\\\"!==i.value.kind||i.value.value.length>0),l=\\\"constant\\\"!==o.value.kind||o.value.value&&o.value.value.length>0,c=n.get(\\\"symbol-sort-key\\\");if(this.features=[],s||l){for(var u=e.iconDependencies,h=e.glyphDependencies,f=new Un(this.zoom),p=0,d=t;p<d.length;p+=1){var g=d[p],v=g.feature,m=g.index,y=g.sourceLayerIndex;if(r._featureFilter(f,v)){var x=void 0;if(s){var b=r.getValueAndResolveTokens(\\\"text-field\\\",v);x=ys(b instanceof oe?b:oe.fromString(b),r,v)}var _=void 0;if(l&&(_=r.getValueAndResolveTokens(\\\"icon-image\\\",v)),x||_){var w=this.sortFeaturesByKey?c.evaluate(v,{}):void 0,k={text:x,icon:_,index:m,sourceLayerIndex:y,geometry:pa(v),properties:v.properties,type:Ms[v.type],sortKey:w};if(void 0!==v.id&&(k.id=v.id),this.features.push(k),_&&(u[_]=!0),x)for(var T=i.evaluate(v,{}).join(\\\",\\\"),A=\\\"map\\\"===n.get(\\\"text-rotation-alignment\\\")&&\\\"point\\\"!==n.get(\\\"symbol-placement\\\"),M=0,S=x.sections;M<S.length;M+=1){var E=S[M],C=Cn(x.toString()),L=E.fontStack||T,P=h[L]=h[L]||{};this.calculateGlyphDependencies(E.text,P,A,C)}}}}\\\"line\\\"===n.get(\\\"symbol-placement\\\")&&(this.features=function(t){var e={},r={},n=[],i=0;function a(e){n.push(t[e]),i++}function o(t,e,i){var a=r[t];return delete r[t],r[e]=a,n[a].geometry[0].pop(),n[a].geometry[0]=n[a].geometry[0].concat(i[0]),a}function s(t,r,i){var a=e[r];return delete e[r],e[t]=a,n[a].geometry[0].shift(),n[a].geometry[0]=i[0].concat(n[a].geometry[0]),a}function l(t,e,r){var n=r?e[0][e[0].length-1]:e[0][0];return t+\\\":\\\"+n.x+\\\":\\\"+n.y}for(var c=0;c<t.length;c++){var u=t[c],h=u.geometry,f=u.text?u.text.toString():null;if(f){var p=l(f,h),d=l(f,h,!0);if(p in r&&d in e&&r[p]!==e[d]){var g=s(p,d,h),v=o(p,d,n[g].geometry);delete e[p],delete r[d],r[l(f,n[v].geometry,!0)]=v,n[g].geometry=null}else p in r?o(p,d,h):d in e?s(p,d,h):(a(c),e[p]=i-1,r[d]=i-1)}else a(c)}return n.filter(function(t){return t.geometry})}(this.features)),this.sortFeaturesByKey&&this.features.sort(function(t,e){return t.sortKey-e.sortKey})}},Os.prototype.update=function(t,e,r){this.stateDependentLayers.length&&(this.text.programConfigurations.updatePaintArrays(t,e,this.layers,r),this.icon.programConfigurations.updatePaintArrays(t,e,this.layers,r))},Os.prototype.isEmpty=function(){return 0===this.symbolInstances.length},Os.prototype.uploadPending=function(){return!this.uploaded||this.text.programConfigurations.needsUpload||this.icon.programConfigurations.needsUpload},Os.prototype.upload=function(t){this.uploaded||(this.collisionBox.upload(t),this.collisionCircle.upload(t)),this.text.upload(t,this.sortFeaturesByY,!this.uploaded,this.text.programConfigurations.needsUpload),this.icon.upload(t,this.sortFeaturesByY,!this.uploaded,this.icon.programConfigurations.needsUpload),this.uploaded=!0},Os.prototype.destroy=function(){this.text.destroy(),this.icon.destroy(),this.collisionBox.destroy(),this.collisionCircle.destroy()},Os.prototype.addToLineVertexArray=function(t,e){var r=this.lineVertexArray.length;if(void 0!==t.segment){for(var n=t.dist(e[t.segment+1]),i=t.dist(e[t.segment]),a={},o=t.segment+1;o<e.length;o++)a[o]={x:e[o].x,y:e[o].y,tileUnitDistanceFromAnchor:n},o<e.length-1&&(n+=e[o+1].dist(e[o]));for(var s=t.segment||0;s>=0;s--)a[s]={x:e[s].x,y:e[s].y,tileUnitDistanceFromAnchor:i},s>0&&(i+=e[s-1].dist(e[s]));for(var l=0;l<e.length;l++){var c=a[l];this.lineVertexArray.emplaceBack(c.x,c.y,c.tileUnitDistanceFromAnchor)}}return{lineStartIndex:r,lineLength:this.lineVertexArray.length-r}},Os.prototype.addSymbols=function(t,e,r,n,i,a,o,s,l,c){for(var u=t.indexArray,h=t.layoutVertexArray,f=t.dynamicLayoutVertexArray,p=t.segments.prepareSegment(4*e.length,t.layoutVertexArray,t.indexArray,a.sortKey),d=this.glyphOffsetArray.length,g=p.vertexLength,v=0,m=e;v<m.length;v+=1){var y=m[v],x=y.tl,b=y.tr,_=y.bl,w=y.br,k=y.tex,T=p.vertexLength,A=y.glyphOffset[1];Es(h,s.x,s.y,x.x,A+x.y,k.x,k.y,r),Es(h,s.x,s.y,b.x,A+b.y,k.x+k.w,k.y,r),Es(h,s.x,s.y,_.x,A+_.y,k.x,k.y+k.h,r),Es(h,s.x,s.y,w.x,A+w.y,k.x+k.w,k.y+k.h,r),Cs(f,s,0),u.emplaceBack(T,T+1,T+2),u.emplaceBack(T+1,T+2,T+3),p.vertexLength+=4,p.primitiveLength+=2,this.glyphOffsetArray.emplaceBack(y.glyphOffset[0])}t.placedSymbolArray.emplaceBack(s.x,s.y,d,this.glyphOffsetArray.length-d,g,l,c,s.segment,r?r[0]:0,r?r[1]:0,n[0],n[1],o,!1,0),t.programConfigurations.populatePaintArrays(t.layoutVertexArray.length,a,a.index,{})},Os.prototype._addCollisionDebugVertex=function(t,e,r,n,i,a){return e.emplaceBack(0,0),t.emplaceBack(r.x,r.y,n,i,Math.round(a.x),Math.round(a.y))},Os.prototype.addCollisionDebugVertices=function(t,e,r,n,a,o,s,l){var c=a.segments.prepareSegment(4,a.layoutVertexArray,a.indexArray),u=c.vertexLength,h=a.layoutVertexArray,f=a.collisionVertexArray,p=s.anchorX,d=s.anchorY;if(this._addCollisionDebugVertex(h,f,o,p,d,new i(t,e)),this._addCollisionDebugVertex(h,f,o,p,d,new i(r,e)),this._addCollisionDebugVertex(h,f,o,p,d,new i(r,n)),this._addCollisionDebugVertex(h,f,o,p,d,new i(t,n)),c.vertexLength+=4,l){var g=a.indexArray;g.emplaceBack(u,u+1,u+2),g.emplaceBack(u,u+2,u+3),c.primitiveLength+=2}else{var v=a.indexArray;v.emplaceBack(u,u+1),v.emplaceBack(u+1,u+2),v.emplaceBack(u+2,u+3),v.emplaceBack(u+3,u),c.primitiveLength+=4}},Os.prototype.addDebugCollisionBoxes=function(t,e,r){for(var n=t;n<e;n++){var i=this.collisionBoxArray.get(n),a=i.x1,o=i.y1,s=i.x2,l=i.y2,c=i.radius>0;this.addCollisionDebugVertices(a,o,s,l,c?this.collisionCircle:this.collisionBox,i.anchorPoint,r,c)}},Os.prototype.generateCollisionDebugBuffers=function(){for(var t=0;t<this.symbolInstances.length;t++){var e=this.symbolInstances.get(t);this.addDebugCollisionBoxes(e.textBoxStartIndex,e.textBoxEndIndex,e),this.addDebugCollisionBoxes(e.iconBoxStartIndex,e.iconBoxEndIndex,e)}},Os.prototype._deserializeCollisionBoxesForSymbol=function(t,e,r,n,i){for(var a={},o=e;o<r;o++){var s=t.get(o);if(0===s.radius){a.textBox={x1:s.x1,y1:s.y1,x2:s.x2,y2:s.y2,anchorPointX:s.anchorPointX,anchorPointY:s.anchorPointY},a.textFeatureIndex=s.featureIndex;break}a.textCircles||(a.textCircles=[],a.textFeatureIndex=s.featureIndex),a.textCircles.push(s.anchorPointX,s.anchorPointY,s.radius,s.signedDistanceFromAnchor,1)}for(var l=n;l<i;l++){var c=t.get(l);if(0===c.radius){a.iconBox={x1:c.x1,y1:c.y1,x2:c.x2,y2:c.y2,anchorPointX:c.anchorPointX,anchorPointY:c.anchorPointY},a.iconFeatureIndex=c.featureIndex;break}}return a},Os.prototype.deserializeCollisionBoxes=function(t){this.collisionArrays=[];for(var e=0;e<this.symbolInstances.length;e++){var r=this.symbolInstances.get(e);this.collisionArrays.push(this._deserializeCollisionBoxesForSymbol(t,r.textBoxStartIndex,r.textBoxEndIndex,r.iconBoxStartIndex,r.iconBoxEndIndex))}},Os.prototype.hasTextData=function(){return this.text.segments.get().length>0},Os.prototype.hasIconData=function(){return this.icon.segments.get().length>0},Os.prototype.hasCollisionBoxData=function(){return this.collisionBox.segments.get().length>0},Os.prototype.hasCollisionCircleData=function(){return this.collisionCircle.segments.get().length>0},Os.prototype.addIndicesForPlacedTextSymbol=function(t){for(var e=this.text.placedSymbolArray.get(t),r=e.vertexStartIndex+4*e.numGlyphs,n=e.vertexStartIndex;n<r;n+=4)this.text.indexArray.emplaceBack(n,n+1,n+2),this.text.indexArray.emplaceBack(n+1,n+2,n+3)},Os.prototype.getSortedSymbolIndexes=function(t){if(this.sortedAngle===t&&void 0!==this.symbolInstanceIndexes)return this.symbolInstanceIndexes;for(var e=Math.sin(t),r=Math.cos(t),n=[],i=[],a=[],o=0;o<this.symbolInstances.length;++o){a.push(o);var s=this.symbolInstances.get(o);n.push(0|Math.round(e*s.anchorX+r*s.anchorY)),i.push(s.featureIndex)}return a.sort(function(t,e){return n[t]-n[e]||i[e]-i[t]}),a},Os.prototype.sortFeatures=function(t){var e=this;if(this.sortFeaturesByY&&this.sortedAngle!==t&&!(this.text.segments.get().length>1||this.icon.segments.get().length>1)){this.symbolInstanceIndexes=this.getSortedSymbolIndexes(t),this.sortedAngle=t,this.text.indexArray.clear(),this.icon.indexArray.clear(),this.featureSortOrder=[];for(var r=0,n=this.symbolInstanceIndexes;r<n.length;r+=1){var i=n[r],a=this.symbolInstances.get(i);this.featureSortOrder.push(a.featureIndex),[a.rightJustifiedTextSymbolIndex,a.centerJustifiedTextSymbolIndex,a.leftJustifiedTextSymbolIndex].forEach(function(t,r,n){t>=0&&n.indexOf(t)===r&&e.addIndicesForPlacedTextSymbol(t)}),a.verticalPlacedTextSymbolIndex>=0&&this.addIndicesForPlacedTextSymbol(a.verticalPlacedTextSymbolIndex);var o=this.icon.placedSymbolArray.get(i);if(o.numGlyphs){var s=o.vertexStartIndex;this.icon.indexArray.emplaceBack(s,s+1,s+2),this.icon.indexArray.emplaceBack(s+1,s+2,s+3)}}this.text.indexBuffer&&this.text.indexBuffer.updateData(this.text.indexArray),this.icon.indexBuffer&&this.icon.indexBuffer.updateData(this.icon.indexArray)}},kn(\\\"SymbolBucket\\\",Os,{omit:[\\\"layers\\\",\\\"collisionBoxArray\\\",\\\"features\\\",\\\"compareText\\\"]}),Os.MAX_GLYPHS=65535,Os.addDynamicAttributes=Cs;var zs=new ei({\\\"symbol-placement\\\":new Jn(It.layout_symbol[\\\"symbol-placement\\\"]),\\\"symbol-spacing\\\":new Jn(It.layout_symbol[\\\"symbol-spacing\\\"]),\\\"symbol-avoid-edges\\\":new Jn(It.layout_symbol[\\\"symbol-avoid-edges\\\"]),\\\"symbol-sort-key\\\":new Kn(It.layout_symbol[\\\"symbol-sort-key\\\"]),\\\"symbol-z-order\\\":new Jn(It.layout_symbol[\\\"symbol-z-order\\\"]),\\\"icon-allow-overlap\\\":new Jn(It.layout_symbol[\\\"icon-allow-overlap\\\"]),\\\"icon-ignore-placement\\\":new Jn(It.layout_symbol[\\\"icon-ignore-placement\\\"]),\\\"icon-optional\\\":new Jn(It.layout_symbol[\\\"icon-optional\\\"]),\\\"icon-rotation-alignment\\\":new Jn(It.layout_symbol[\\\"icon-rotation-alignment\\\"]),\\\"icon-size\\\":new Kn(It.layout_symbol[\\\"icon-size\\\"]),\\\"icon-text-fit\\\":new Jn(It.layout_symbol[\\\"icon-text-fit\\\"]),\\\"icon-text-fit-padding\\\":new Jn(It.layout_symbol[\\\"icon-text-fit-padding\\\"]),\\\"icon-image\\\":new Kn(It.layout_symbol[\\\"icon-image\\\"]),\\\"icon-rotate\\\":new Kn(It.layout_symbol[\\\"icon-rotate\\\"]),\\\"icon-padding\\\":new Jn(It.layout_symbol[\\\"icon-padding\\\"]),\\\"icon-keep-upright\\\":new Jn(It.layout_symbol[\\\"icon-keep-upright\\\"]),\\\"icon-offset\\\":new Kn(It.layout_symbol[\\\"icon-offset\\\"]),\\\"icon-anchor\\\":new Kn(It.layout_symbol[\\\"icon-anchor\\\"]),\\\"icon-pitch-alignment\\\":new Jn(It.layout_symbol[\\\"icon-pitch-alignment\\\"]),\\\"text-pitch-alignment\\\":new Jn(It.layout_symbol[\\\"text-pitch-alignment\\\"]),\\\"text-rotation-alignment\\\":new Jn(It.layout_symbol[\\\"text-rotation-alignment\\\"]),\\\"text-field\\\":new Kn(It.layout_symbol[\\\"text-field\\\"]),\\\"text-font\\\":new Kn(It.layout_symbol[\\\"text-font\\\"]),\\\"text-size\\\":new Kn(It.layout_symbol[\\\"text-size\\\"]),\\\"text-max-width\\\":new Kn(It.layout_symbol[\\\"text-max-width\\\"]),\\\"text-line-height\\\":new Jn(It.layout_symbol[\\\"text-line-height\\\"]),\\\"text-letter-spacing\\\":new Kn(It.layout_symbol[\\\"text-letter-spacing\\\"]),\\\"text-justify\\\":new Kn(It.layout_symbol[\\\"text-justify\\\"]),\\\"text-radial-offset\\\":new Kn(It.layout_symbol[\\\"text-radial-offset\\\"]),\\\"text-variable-anchor\\\":new Jn(It.layout_symbol[\\\"text-variable-anchor\\\"]),\\\"text-anchor\\\":new Kn(It.layout_symbol[\\\"text-anchor\\\"]),\\\"text-max-angle\\\":new Jn(It.layout_symbol[\\\"text-max-angle\\\"]),\\\"text-rotate\\\":new Kn(It.layout_symbol[\\\"text-rotate\\\"]),\\\"text-padding\\\":new Jn(It.layout_symbol[\\\"text-padding\\\"]),\\\"text-keep-upright\\\":new Jn(It.layout_symbol[\\\"text-keep-upright\\\"]),\\\"text-transform\\\":new Kn(It.layout_symbol[\\\"text-transform\\\"]),\\\"text-offset\\\":new Kn(It.layout_symbol[\\\"text-offset\\\"]),\\\"text-allow-overlap\\\":new Jn(It.layout_symbol[\\\"text-allow-overlap\\\"]),\\\"text-ignore-placement\\\":new Jn(It.layout_symbol[\\\"text-ignore-placement\\\"]),\\\"text-optional\\\":new Jn(It.layout_symbol[\\\"text-optional\\\"])}),Is={paint:new ei({\\\"icon-opacity\\\":new Kn(It.paint_symbol[\\\"icon-opacity\\\"]),\\\"icon-color\\\":new Kn(It.paint_symbol[\\\"icon-color\\\"]),\\\"icon-halo-color\\\":new Kn(It.paint_symbol[\\\"icon-halo-color\\\"]),\\\"icon-halo-width\\\":new Kn(It.paint_symbol[\\\"icon-halo-width\\\"]),\\\"icon-halo-blur\\\":new Kn(It.paint_symbol[\\\"icon-halo-blur\\\"]),\\\"icon-translate\\\":new Jn(It.paint_symbol[\\\"icon-translate\\\"]),\\\"icon-translate-anchor\\\":new Jn(It.paint_symbol[\\\"icon-translate-anchor\\\"]),\\\"text-opacity\\\":new Kn(It.paint_symbol[\\\"text-opacity\\\"]),\\\"text-color\\\":new Kn(It.paint_symbol[\\\"text-color\\\"]),\\\"text-halo-color\\\":new Kn(It.paint_symbol[\\\"text-halo-color\\\"]),\\\"text-halo-width\\\":new Kn(It.paint_symbol[\\\"text-halo-width\\\"]),\\\"text-halo-blur\\\":new Kn(It.paint_symbol[\\\"text-halo-blur\\\"]),\\\"text-translate\\\":new Jn(It.paint_symbol[\\\"text-translate\\\"]),\\\"text-translate-anchor\\\":new Jn(It.paint_symbol[\\\"text-translate-anchor\\\"])}),layout:zs},Ds=function(t){function e(e){t.call(this,e,Is)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.recalculate=function(e){t.prototype.recalculate.call(this,e),\\\"auto\\\"===this.layout.get(\\\"icon-rotation-alignment\\\")&&(\\\"point\\\"!==this.layout.get(\\\"symbol-placement\\\")?this.layout._values[\\\"icon-rotation-alignment\\\"]=\\\"map\\\":this.layout._values[\\\"icon-rotation-alignment\\\"]=\\\"viewport\\\"),\\\"auto\\\"===this.layout.get(\\\"text-rotation-alignment\\\")&&(\\\"point\\\"!==this.layout.get(\\\"symbol-placement\\\")?this.layout._values[\\\"text-rotation-alignment\\\"]=\\\"map\\\":this.layout._values[\\\"text-rotation-alignment\\\"]=\\\"viewport\\\"),\\\"auto\\\"===this.layout.get(\\\"text-pitch-alignment\\\")&&(this.layout._values[\\\"text-pitch-alignment\\\"]=this.layout.get(\\\"text-rotation-alignment\\\")),\\\"auto\\\"===this.layout.get(\\\"icon-pitch-alignment\\\")&&(this.layout._values[\\\"icon-pitch-alignment\\\"]=this.layout.get(\\\"icon-rotation-alignment\\\"))},e.prototype.getValueAndResolveTokens=function(t,e){var r,n=this.layout.get(t).evaluate(e,{}),i=this._unevaluatedLayout._values[t];return i.isDataDriven()||Pr(i.value)?n:(r=e.properties,n.replace(/{([^{}]+)}/g,function(t,e){return e in r?String(r[e]):\\\"\\\"}))},e.prototype.createBucket=function(t){return new Os(t)},e.prototype.queryRadius=function(){return 0},e.prototype.queryIntersectsFeature=function(){return!1},e}(ri),Rs={paint:new ei({\\\"background-color\\\":new Jn(It.paint_background[\\\"background-color\\\"]),\\\"background-pattern\\\":new Qn(It.paint_background[\\\"background-pattern\\\"]),\\\"background-opacity\\\":new Jn(It.paint_background[\\\"background-opacity\\\"])})},Fs=function(t){function e(e){t.call(this,e,Rs)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(ri),Bs={paint:new ei({\\\"raster-opacity\\\":new Jn(It.paint_raster[\\\"raster-opacity\\\"]),\\\"raster-hue-rotate\\\":new Jn(It.paint_raster[\\\"raster-hue-rotate\\\"]),\\\"raster-brightness-min\\\":new Jn(It.paint_raster[\\\"raster-brightness-min\\\"]),\\\"raster-brightness-max\\\":new Jn(It.paint_raster[\\\"raster-brightness-max\\\"]),\\\"raster-saturation\\\":new Jn(It.paint_raster[\\\"raster-saturation\\\"]),\\\"raster-contrast\\\":new Jn(It.paint_raster[\\\"raster-contrast\\\"]),\\\"raster-resampling\\\":new Jn(It.paint_raster[\\\"raster-resampling\\\"]),\\\"raster-fade-duration\\\":new Jn(It.paint_raster[\\\"raster-fade-duration\\\"])})},Ns=function(t){function e(e){t.call(this,e,Bs)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(ri),js=function(t){function e(e){t.call(this,e,{}),this.implementation=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.is3D=function(){return\\\"3d\\\"===this.implementation.renderingMode},e.prototype.hasOffscreenPass=function(){return void 0!==this.implementation.prerender},e.prototype.recalculate=function(){},e.prototype.updateTransitions=function(){},e.prototype.hasTransition=function(){},e.prototype.serialize=function(){},e.prototype.onAdd=function(t){this.implementation.onAdd&&this.implementation.onAdd(t,t.painter.context.gl)},e.prototype.onRemove=function(t){this.implementation.onRemove&&this.implementation.onRemove(t,t.painter.context.gl)},e}(ri),Us={circle:Fa,heatmap:Wa,hillshade:Za,fill:Oo,\\\"fill-extrusion\\\":Jo,line:hs,symbol:Ds,background:Fs,raster:Ns};function Vs(t){for(var e=0,r=0,n=0,i=t;n<i.length;n+=1){var a=i[n];e+=a.w*a.h,r=Math.max(r,a.w)}t.sort(function(t,e){return e.h-t.h});for(var o=[{x:0,y:0,w:Math.max(Math.ceil(Math.sqrt(e/.95)),r),h:1/0}],s=0,l=0,c=0,u=t;c<u.length;c+=1)for(var h=u[c],f=o.length-1;f>=0;f--){var p=o[f];if(!(h.w>p.w||h.h>p.h)){if(h.x=p.x,h.y=p.y,l=Math.max(l,h.y+h.h),s=Math.max(s,h.x+h.w),h.w===p.w&&h.h===p.h){var d=o.pop();f<o.length&&(o[f]=d)}else h.h===p.h?(p.x+=h.w,p.w-=h.w):h.w===p.w?(p.y+=h.h,p.h-=h.h):(o.push({x:p.x+h.w,y:p.y,w:p.w-h.w,h:h.h}),p.y+=h.h,p.h-=h.h);break}}return{w:s,h:l,fill:e/(s*l)||0}}var qs=function(t,e){var r=e.pixelRatio,n=e.version;this.paddedRect=t,this.pixelRatio=r,this.version=n},Hs={tl:{configurable:!0},br:{configurable:!0},tlbr:{configurable:!0},displaySize:{configurable:!0}};Hs.tl.get=function(){return[this.paddedRect.x+1,this.paddedRect.y+1]},Hs.br.get=function(){return[this.paddedRect.x+this.paddedRect.w-1,this.paddedRect.y+this.paddedRect.h-1]},Hs.tlbr.get=function(){return this.tl.concat(this.br)},Hs.displaySize.get=function(){return[(this.paddedRect.w-2)/this.pixelRatio,(this.paddedRect.h-2)/this.pixelRatio]},Object.defineProperties(qs.prototype,Hs);var Gs=function(t,e){var r={},n={};this.haveRenderCallbacks=[];var i=[];this.addImages(t,r,i),this.addImages(e,n,i);var a=Vs(i),o=a.w,s=a.h,l=new Ha({width:o||1,height:s||1});for(var c in t){var u=t[c],h=r[c].paddedRect;Ha.copy(u.data,l,{x:0,y:0},{x:h.x+1,y:h.y+1},u.data)}for(var f in e){var p=e[f],d=n[f].paddedRect,g=d.x+1,v=d.y+1,m=p.data.width,y=p.data.height;Ha.copy(p.data,l,{x:0,y:0},{x:g,y:v},p.data),Ha.copy(p.data,l,{x:0,y:y-1},{x:g,y:v-1},{width:m,height:1}),Ha.copy(p.data,l,{x:0,y:0},{x:g,y:v+y},{width:m,height:1}),Ha.copy(p.data,l,{x:m-1,y:0},{x:g-1,y:v},{width:1,height:y}),Ha.copy(p.data,l,{x:0,y:0},{x:g+m,y:v},{width:1,height:y})}this.image=l,this.iconPositions=r,this.patternPositions=n};Gs.prototype.addImages=function(t,e,r){for(var n in t){var i=t[n],a={x:0,y:0,w:i.data.width+2,h:i.data.height+2};r.push(a),e[n]=new qs(a,i),i.hasRenderCallback&&this.haveRenderCallbacks.push(n)}},Gs.prototype.patchUpdatedImages=function(t,e){for(var r in t.dispatchRenderCallbacks(this.haveRenderCallbacks),t.updatedImages)this.patchUpdatedImage(this.iconPositions[r],t.getImage(r),e),this.patchUpdatedImage(this.patternPositions[r],t.getImage(r),e)},Gs.prototype.patchUpdatedImage=function(t,e,r){if(t&&e&&t.version!==e.version){t.version=e.version;var n=t.tl,i=n[0],a=n[1];r.update(e.data,void 0,{x:i,y:a})}},kn(\\\"ImagePosition\\\",qs),kn(\\\"ImageAtlas\\\",Gs);var Ys=self.HTMLImageElement,Ws=self.HTMLCanvasElement,Xs=self.HTMLVideoElement,Zs=self.ImageData,Js=function(t,e,r,n){this.context=t,this.format=r,this.texture=t.gl.createTexture(),this.update(e,n)};Js.prototype.update=function(t,e,r){var n=t.width,i=t.height,a=!(this.size&&this.size[0]===n&&this.size[1]===i||r),o=this.context,s=o.gl;if(this.useMipmap=Boolean(e&&e.useMipmap),s.bindTexture(s.TEXTURE_2D,this.texture),o.pixelStoreUnpackFlipY.set(!1),o.pixelStoreUnpack.set(1),o.pixelStoreUnpackPremultiplyAlpha.set(this.format===s.RGBA&&(!e||!1!==e.premultiply)),a)this.size=[n,i],t instanceof Ys||t instanceof Ws||t instanceof Xs||t instanceof Zs?s.texImage2D(s.TEXTURE_2D,0,this.format,this.format,s.UNSIGNED_BYTE,t):s.texImage2D(s.TEXTURE_2D,0,this.format,n,i,0,this.format,s.UNSIGNED_BYTE,t.data);else{var l=r||{x:0,y:0},c=l.x,u=l.y;t instanceof Ys||t instanceof Ws||t instanceof Xs||t instanceof Zs?s.texSubImage2D(s.TEXTURE_2D,0,c,u,s.RGBA,s.UNSIGNED_BYTE,t):s.texSubImage2D(s.TEXTURE_2D,0,c,u,n,i,s.RGBA,s.UNSIGNED_BYTE,t.data)}this.useMipmap&&this.isSizePowerOfTwo()&&s.generateMipmap(s.TEXTURE_2D)},Js.prototype.bind=function(t,e,r){var n=this.context.gl;n.bindTexture(n.TEXTURE_2D,this.texture),r!==n.LINEAR_MIPMAP_NEAREST||this.isSizePowerOfTwo()||(r=n.LINEAR),t!==this.filter&&(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,t),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,r||t),this.filter=t),e!==this.wrap&&(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,e),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,e),this.wrap=e)},Js.prototype.isSizePowerOfTwo=function(){return this.size[0]===this.size[1]&&Math.log(this.size[0])/Math.LN2%1==0},Js.prototype.destroy=function(){this.context.gl.deleteTexture(this.texture),this.texture=null};var Ks=function(t,e,r,n,i){var a,o,s=8*i-n-1,l=(1<<s)-1,c=l>>1,u=-7,h=r?i-1:0,f=r?-1:1,p=t[e+h];for(h+=f,a=p&(1<<-u)-1,p>>=-u,u+=s;u>0;a=256*a+t[e+h],h+=f,u-=8);for(o=a&(1<<-u)-1,a>>=-u,u+=n;u>0;o=256*o+t[e+h],h+=f,u-=8);if(0===a)a=1-c;else{if(a===l)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,n),a-=c}return(p?-1:1)*o*Math.pow(2,a-n)},$s=function(t,e,r,n,i,a){var o,s,l,c=8*a-i-1,u=(1<<c)-1,h=u>>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:a-1,d=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=u):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+h>=1?f/l:f*Math.pow(2,1-h))*l>=2&&(o++,l/=2),o+h>=u?(s=0,o=u):o+h>=1?(s=(e*l-1)*Math.pow(2,i),o+=h):(s=e*Math.pow(2,h-1)*Math.pow(2,i),o=0));i>=8;t[r+p]=255&s,p+=d,s/=256,i-=8);for(o=o<<i|s,c+=i;c>0;t[r+p]=255&o,p+=d,o/=256,c-=8);t[r+p-d]|=128*g},Qs=tl;function tl(t){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos=0,this.type=0,this.length=this.buf.length}function el(t){return t.type===tl.Bytes?t.readVarint()+t.pos:t.pos+1}function rl(t,e,r){return r?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}function nl(t,e,r){var n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(7*Math.LN2));r.realloc(n);for(var i=r.pos-1;i>=t;i--)r.buf[i+n]=r.buf[i]}function il(t,e){for(var r=0;r<t.length;r++)e.writeVarint(t[r])}function al(t,e){for(var r=0;r<t.length;r++)e.writeSVarint(t[r])}function ol(t,e){for(var r=0;r<t.length;r++)e.writeFloat(t[r])}function sl(t,e){for(var r=0;r<t.length;r++)e.writeDouble(t[r])}function ll(t,e){for(var r=0;r<t.length;r++)e.writeBoolean(t[r])}function cl(t,e){for(var r=0;r<t.length;r++)e.writeFixed32(t[r])}function ul(t,e){for(var r=0;r<t.length;r++)e.writeSFixed32(t[r])}function hl(t,e){for(var r=0;r<t.length;r++)e.writeFixed64(t[r])}function fl(t,e){for(var r=0;r<t.length;r++)e.writeSFixed64(t[r])}function pl(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+16777216*t[e+3]}function dl(t,e,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function gl(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}tl.Varint=0,tl.Fixed64=1,tl.Bytes=2,tl.Fixed32=5,tl.prototype={destroy:function(){this.buf=null},readFields:function(t,e,r){for(r=r||this.length;this.pos<r;){var n=this.readVarint(),i=n>>3,a=this.pos;this.type=7&n,t(i,e,this),this.pos===a&&this.skip(n)}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=pl(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=gl(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=pl(this.buf,this.pos)+4294967296*pl(this.buf,this.pos+4);return this.pos+=8,t},readSFixed64:function(){var t=pl(this.buf,this.pos)+4294967296*gl(this.buf,this.pos+4);return this.pos+=8,t},readFloat:function(){var t=Ks(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=Ks(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,r,n=this.buf;return e=127&(r=n[this.pos++]),r<128?e:(e|=(127&(r=n[this.pos++]))<<7,r<128?e:(e|=(127&(r=n[this.pos++]))<<14,r<128?e:(e|=(127&(r=n[this.pos++]))<<21,r<128?e:function(t,e,r){var n,i,a=r.buf;if(n=(112&(i=a[r.pos++]))>>4,i<128)return rl(t,n,e);if(n|=(127&(i=a[r.pos++]))<<3,i<128)return rl(t,n,e);if(n|=(127&(i=a[r.pos++]))<<10,i<128)return rl(t,n,e);if(n|=(127&(i=a[r.pos++]))<<17,i<128)return rl(t,n,e);if(n|=(127&(i=a[r.pos++]))<<24,i<128)return rl(t,n,e);if(n|=(1&(i=a[r.pos++]))<<31,i<128)return rl(t,n,e);throw new Error(\\\"Expected varint not more than 10 bytes\\\")}(e|=(15&(r=n[this.pos]))<<28,t,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=function(t,e,r){for(var n=\\\"\\\",i=e;i<r;){var a,o,s,l=t[i],c=null,u=l>239?4:l>223?3:l>191?2:1;if(i+u>r)break;1===u?l<128&&(c=l):2===u?128==(192&(a=t[i+1]))&&(c=(31&l)<<6|63&a)<=127&&(c=null):3===u?(a=t[i+1],o=t[i+2],128==(192&a)&&128==(192&o)&&((c=(15&l)<<12|(63&a)<<6|63&o)<=2047||c>=55296&&c<=57343)&&(c=null)):4===u&&(a=t[i+1],o=t[i+2],s=t[i+3],128==(192&a)&&128==(192&o)&&128==(192&s)&&((c=(15&l)<<18|(63&a)<<12|(63&o)<<6|63&s)<=65535||c>=1114112)&&(c=null)),null===c?(c=65533,u=1):c>65535&&(c-=65536,n+=String.fromCharCode(c>>>10&1023|55296),c=56320|1023&c),n+=String.fromCharCode(c),i+=u}return n}(this.buf,this.pos,t);return this.pos=t,e},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){if(this.type!==tl.Bytes)return t.push(this.readVarint(e));var r=el(this);for(t=t||[];this.pos<r;)t.push(this.readVarint(e));return t},readPackedSVarint:function(t){if(this.type!==tl.Bytes)return t.push(this.readSVarint());var e=el(this);for(t=t||[];this.pos<e;)t.push(this.readSVarint());return t},readPackedBoolean:function(t){if(this.type!==tl.Bytes)return t.push(this.readBoolean());var e=el(this);for(t=t||[];this.pos<e;)t.push(this.readBoolean());return t},readPackedFloat:function(t){if(this.type!==tl.Bytes)return t.push(this.readFloat());var e=el(this);for(t=t||[];this.pos<e;)t.push(this.readFloat());return t},readPackedDouble:function(t){if(this.type!==tl.Bytes)return t.push(this.readDouble());var e=el(this);for(t=t||[];this.pos<e;)t.push(this.readDouble());return t},readPackedFixed32:function(t){if(this.type!==tl.Bytes)return t.push(this.readFixed32());var e=el(this);for(t=t||[];this.pos<e;)t.push(this.readFixed32());return t},readPackedSFixed32:function(t){if(this.type!==tl.Bytes)return t.push(this.readSFixed32());var e=el(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed32());return t},readPackedFixed64:function(t){if(this.type!==tl.Bytes)return t.push(this.readFixed64());var e=el(this);for(t=t||[];this.pos<e;)t.push(this.readFixed64());return t},readPackedSFixed64:function(t){if(this.type!==tl.Bytes)return t.push(this.readSFixed64());var e=el(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed64());return t},skip:function(t){var e=7&t;if(e===tl.Varint)for(;this.buf[this.pos++]>127;);else if(e===tl.Bytes)this.pos=this.readVarint()+this.pos;else if(e===tl.Fixed32)this.pos+=4;else{if(e!==tl.Fixed64)throw new Error(\\\"Unimplemented type: \\\"+e);this.pos+=8}},writeTag:function(t,e){this.writeVarint(t<<3|e)},realloc:function(t){for(var e=this.length||16;e<this.pos+t;)e*=2;if(e!==this.length){var r=new Uint8Array(e);r.set(this.buf),this.buf=r,this.length=e}},finish:function(){return this.length=this.pos,this.pos=0,this.buf.subarray(0,this.length)},writeFixed32:function(t){this.realloc(4),dl(this.buf,t,this.pos),this.pos+=4},writeSFixed32:function(t){this.realloc(4),dl(this.buf,t,this.pos),this.pos+=4},writeFixed64:function(t){this.realloc(8),dl(this.buf,-1&t,this.pos),dl(this.buf,Math.floor(t*(1/4294967296)),this.pos+4),this.pos+=8},writeSFixed64:function(t){this.realloc(8),dl(this.buf,-1&t,this.pos),dl(this.buf,Math.floor(t*(1/4294967296)),this.pos+4),this.pos+=8},writeVarint:function(t){(t=+t||0)>268435455||t<0?function(t,e){var r,n;if(t>=0?(r=t%4294967296|0,n=t/4294967296|0):(n=~(-t/4294967296),4294967295^(r=~(-t%4294967296))?r=r+1|0:(r=0,n=n+1|0)),t>=0x10000000000000000||t<-0x10000000000000000)throw new Error(\\\"Given varint doesn't fit into 10 bytes\\\");e.realloc(10),function(t,e,r){r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos]=127&t}(r,0,e),function(t,e){var r=(7&t)<<4;e.buf[e.pos++]|=r|((t>>>=3)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t)))))}(n,e)}(t,this):(this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127))))},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t)},writeBoolean:function(t){this.writeVarint(Boolean(t))},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=function(t,e,r){for(var n,i,a=0;a<e.length;a++){if((n=e.charCodeAt(a))>55295&&n<57344){if(!i){n>56319||a+1===e.length?(t[r++]=239,t[r++]=191,t[r++]=189):i=n;continue}if(n<56320){t[r++]=239,t[r++]=191,t[r++]=189,i=n;continue}n=i-55296<<10|n-56320|65536,i=null}else i&&(t[r++]=239,t[r++]=191,t[r++]=189,i=null);n<128?t[r++]=n:(n<2048?t[r++]=n>>6|192:(n<65536?t[r++]=n>>12|224:(t[r++]=n>>18|240,t[r++]=n>>12&63|128),t[r++]=n>>6&63|128),t[r++]=63&n|128)}return r}(this.buf,t,this.pos);var r=this.pos-e;r>=128&&nl(e,r,this),this.pos=e-1,this.writeVarint(r),this.pos+=r},writeFloat:function(t){this.realloc(4),$s(this.buf,t,this.pos,!0,23,4),this.pos+=4},writeDouble:function(t){this.realloc(8),$s(this.buf,t,this.pos,!0,52,8),this.pos+=8},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var r=0;r<e;r++)this.buf[this.pos++]=t[r]},writeRawMessage:function(t,e){this.pos++;var r=this.pos;t(e,this);var n=this.pos-r;n>=128&&nl(r,n,this),this.pos=r-1,this.writeVarint(n),this.pos+=n},writeMessage:function(t,e,r){this.writeTag(t,tl.Bytes),this.writeRawMessage(e,r)},writePackedVarint:function(t,e){e.length&&this.writeMessage(t,il,e)},writePackedSVarint:function(t,e){e.length&&this.writeMessage(t,al,e)},writePackedBoolean:function(t,e){e.length&&this.writeMessage(t,ll,e)},writePackedFloat:function(t,e){e.length&&this.writeMessage(t,ol,e)},writePackedDouble:function(t,e){e.length&&this.writeMessage(t,sl,e)},writePackedFixed32:function(t,e){e.length&&this.writeMessage(t,cl,e)},writePackedSFixed32:function(t,e){e.length&&this.writeMessage(t,ul,e)},writePackedFixed64:function(t,e){e.length&&this.writeMessage(t,hl,e)},writePackedSFixed64:function(t,e){e.length&&this.writeMessage(t,fl,e)},writeBytesField:function(t,e){this.writeTag(t,tl.Bytes),this.writeBytes(e)},writeFixed32Field:function(t,e){this.writeTag(t,tl.Fixed32),this.writeFixed32(e)},writeSFixed32Field:function(t,e){this.writeTag(t,tl.Fixed32),this.writeSFixed32(e)},writeFixed64Field:function(t,e){this.writeTag(t,tl.Fixed64),this.writeFixed64(e)},writeSFixed64Field:function(t,e){this.writeTag(t,tl.Fixed64),this.writeSFixed64(e)},writeVarintField:function(t,e){this.writeTag(t,tl.Varint),this.writeVarint(e)},writeSVarintField:function(t,e){this.writeTag(t,tl.Varint),this.writeSVarint(e)},writeStringField:function(t,e){this.writeTag(t,tl.Bytes),this.writeString(e)},writeFloatField:function(t,e){this.writeTag(t,tl.Fixed32),this.writeFloat(e)},writeDoubleField:function(t,e){this.writeTag(t,tl.Fixed64),this.writeDouble(e)},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e))}};var vl=3;function ml(t,e,r){1===t&&r.readMessage(yl,e)}function yl(t,e,r){if(3===t){var n=r.readMessage(xl,{}),i=n.id,a=n.bitmap,o=n.width,s=n.height,l=n.left,c=n.top,u=n.advance;e.push({id:i,bitmap:new qa({width:o+2*vl,height:s+2*vl},a),metrics:{width:o,height:s,left:l,top:c,advance:u}})}}function xl(t,e,r){1===t?e.id=r.readVarint():2===t?e.bitmap=r.readBytes():3===t?e.width=r.readVarint():4===t?e.height=r.readVarint():5===t?e.left=r.readSVarint():6===t?e.top=r.readSVarint():7===t&&(e.advance=r.readVarint())}var bl=vl,_l=function(t,e,r){this.target=t,this.parent=e,this.mapId=r,this.callbacks={},this.callbackID=0,v([\\\"receive\\\"],this),this.target.addEventListener(\\\"message\\\",this.receive,!1)};function wl(t,e,r){var n=2*Math.PI*6378137/256/Math.pow(2,r);return[t*n-2*Math.PI*6378137/2,e*n-2*Math.PI*6378137/2]}_l.prototype.send=function(t,e,r,n){var i=this,a=r?this.mapId+\\\":\\\"+this.callbackID++:null;r&&(this.callbacks[a]=r);var o=[];if(this.target.postMessage({targetMapId:n,sourceMapId:this.mapId,type:t,id:String(a),data:An(e,o)},o),r)return{cancel:function(){i.callbacks[a]=null,i.target.postMessage({targetMapId:n,sourceMapId:i.mapId,type:\\\"<cancel>\\\",id:String(a)})}}},_l.prototype.receive=function(t){var e,r=this,n=t.data,i=n.id;if(!n.targetMapId||this.mapId===n.targetMapId){var a=function(t,e){delete r.callbacks[i];var n=[];r.target.postMessage({sourceMapId:r.mapId,type:\\\"<response>\\\",id:String(i),error:t?An(t):null,data:An(e,n)},n)};if(\\\"<response>\\\"===n.type||\\\"<cancel>\\\"===n.type)e=this.callbacks[n.id],delete this.callbacks[n.id],e&&n.error?e(Mn(n.error)):e&&e(null,Mn(n.data));else if(void 0!==n.id&&this.parent[n.type]){this.callbacks[n.id]=null;var o=this.parent[n.type](n.sourceMapId,Mn(n.data),a);o&&null===this.callbacks[n.id]&&(this.callbacks[n.id]=o.cancel)}else if(void 0!==n.id&&this.parent.getWorkerSource){var s=n.type.split(\\\".\\\"),l=Mn(n.data);this.parent.getWorkerSource(n.sourceMapId,s[0],l.source)[s[1]](l,a)}else this.parent[n.type](Mn(n.data))}},_l.prototype.remove=function(){this.target.removeEventListener(\\\"message\\\",this.receive,!1)};var kl=function(t,e){t&&(e?this.setSouthWest(t).setNorthEast(e):4===t.length?this.setSouthWest([t[0],t[1]]).setNorthEast([t[2],t[3]]):this.setSouthWest(t[0]).setNorthEast(t[1]))};kl.prototype.setNorthEast=function(t){return this._ne=t instanceof Tl?new Tl(t.lng,t.lat):Tl.convert(t),this},kl.prototype.setSouthWest=function(t){return this._sw=t instanceof Tl?new Tl(t.lng,t.lat):Tl.convert(t),this},kl.prototype.extend=function(t){var e,r,n=this._sw,i=this._ne;if(t instanceof Tl)e=t,r=t;else{if(!(t instanceof kl))return Array.isArray(t)?t.every(Array.isArray)?this.extend(kl.convert(t)):this.extend(Tl.convert(t)):this;if(e=t._sw,r=t._ne,!e||!r)return this}return n||i?(n.lng=Math.min(e.lng,n.lng),n.lat=Math.min(e.lat,n.lat),i.lng=Math.max(r.lng,i.lng),i.lat=Math.max(r.lat,i.lat)):(this._sw=new Tl(e.lng,e.lat),this._ne=new Tl(r.lng,r.lat)),this},kl.prototype.getCenter=function(){return new Tl((this._sw.lng+this._ne.lng)/2,(this._sw.lat+this._ne.lat)/2)},kl.prototype.getSouthWest=function(){return this._sw},kl.prototype.getNorthEast=function(){return this._ne},kl.prototype.getNorthWest=function(){return new Tl(this.getWest(),this.getNorth())},kl.prototype.getSouthEast=function(){return new Tl(this.getEast(),this.getSouth())},kl.prototype.getWest=function(){return this._sw.lng},kl.prototype.getSouth=function(){return this._sw.lat},kl.prototype.getEast=function(){return this._ne.lng},kl.prototype.getNorth=function(){return this._ne.lat},kl.prototype.toArray=function(){return[this._sw.toArray(),this._ne.toArray()]},kl.prototype.toString=function(){return\\\"LngLatBounds(\\\"+this._sw.toString()+\\\", \\\"+this._ne.toString()+\\\")\\\"},kl.prototype.isEmpty=function(){return!(this._sw&&this._ne)},kl.convert=function(t){return!t||t instanceof kl?t:new kl(t)};var Tl=function(t,e){if(isNaN(t)||isNaN(e))throw new Error(\\\"Invalid LngLat object: (\\\"+t+\\\", \\\"+e+\\\")\\\");if(this.lng=+t,this.lat=+e,this.lat>90||this.lat<-90)throw new Error(\\\"Invalid LngLat latitude value: must be between -90 and 90\\\")};function Al(t){return 2*Math.PI*6378137*Math.cos(t*Math.PI/180)}function Ml(t){return(180+t)/360}function Sl(t){return(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+t*Math.PI/360)))/360}function El(t,e){return t/Al(e)}function Cl(t){var e=180-360*t;return 360/Math.PI*Math.atan(Math.exp(e*Math.PI/180))-90}Tl.prototype.wrap=function(){return new Tl(u(this.lng,-180,180),this.lat)},Tl.prototype.toArray=function(){return[this.lng,this.lat]},Tl.prototype.toString=function(){return\\\"LngLat(\\\"+this.lng+\\\", \\\"+this.lat+\\\")\\\"},Tl.prototype.toBounds=function(t){void 0===t&&(t=0);var e=360*t/40075017,r=e/Math.cos(Math.PI/180*this.lat);return new kl(new Tl(this.lng-r,this.lat-e),new Tl(this.lng+r,this.lat+e))},Tl.convert=function(t){if(t instanceof Tl)return t;if(Array.isArray(t)&&(2===t.length||3===t.length))return new Tl(Number(t[0]),Number(t[1]));if(!Array.isArray(t)&&\\\"object\\\"==typeof t&&null!==t)return new Tl(Number(\\\"lng\\\"in t?t.lng:t.lon),Number(t.lat));throw new Error(\\\"`LngLatLike` argument must be specified as a LngLat instance, an object {lng: <lng>, lat: <lat>}, an object {lon: <lng>, lat: <lat>}, or an array of [<lng>, <lat>]\\\")};var Ll=function(t,e,r){void 0===r&&(r=0),this.x=+t,this.y=+e,this.z=+r};Ll.fromLngLat=function(t,e){void 0===e&&(e=0);var r=Tl.convert(t);return new Ll(Ml(r.lng),Sl(r.lat),El(e,r.lat))},Ll.prototype.toLngLat=function(){return new Tl(360*this.x-180,Cl(this.y))},Ll.prototype.toAltitude=function(){return this.z*Al(Cl(this.y))};var Pl=function(t,e,r){this.z=t,this.x=e,this.y=r,this.key=Il(0,t,e,r)};Pl.prototype.equals=function(t){return this.z===t.z&&this.x===t.x&&this.y===t.y},Pl.prototype.url=function(t,e){var r,n,i,a,o,s=(r=this.x,n=this.y,i=this.z,a=wl(256*r,256*(n=Math.pow(2,i)-n-1),i),o=wl(256*(r+1),256*(n+1),i),a[0]+\\\",\\\"+a[1]+\\\",\\\"+o[0]+\\\",\\\"+o[1]),l=function(t,e,r){for(var n,i=\\\"\\\",a=t;a>0;a--)i+=(e&(n=1<<a-1)?1:0)+(r&n?2:0);return i}(this.z,this.x,this.y);return t[(this.x+this.y)%t.length].replace(\\\"{prefix}\\\",(this.x%16).toString(16)+(this.y%16).toString(16)).replace(\\\"{z}\\\",String(this.z)).replace(\\\"{x}\\\",String(this.x)).replace(\\\"{y}\\\",String(\\\"tms\\\"===e?Math.pow(2,this.z)-this.y-1:this.y)).replace(\\\"{quadkey}\\\",l).replace(\\\"{bbox-epsg-3857}\\\",s)},Pl.prototype.getTilePoint=function(t){var e=Math.pow(2,this.z);return new i((t.x*e-this.x)*ha,(t.y*e-this.y)*ha)};var Ol=function(t,e){this.wrap=t,this.canonical=e,this.key=Il(t,e.z,e.x,e.y)},zl=function(t,e,r,n,i){this.overscaledZ=t,this.wrap=e,this.canonical=new Pl(r,+n,+i),this.key=Il(e,t,n,i)};function Il(t,e,r,n){(t*=2)<0&&(t=-1*t-1);var i=1<<e;return 32*(i*i*t+i*n+r)+e}zl.prototype.equals=function(t){return this.overscaledZ===t.overscaledZ&&this.wrap===t.wrap&&this.canonical.equals(t.canonical)},zl.prototype.scaledTo=function(t){var e=this.canonical.z-t;return t>this.canonical.z?new zl(t,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y):new zl(t,this.wrap,t,this.canonical.x>>e,this.canonical.y>>e)},zl.prototype.isChildOf=function(t){if(t.wrap!==this.wrap)return!1;var e=this.canonical.z-t.canonical.z;return 0===t.overscaledZ||t.overscaledZ<this.overscaledZ&&t.canonical.x===this.canonical.x>>e&&t.canonical.y===this.canonical.y>>e},zl.prototype.children=function(t){if(this.overscaledZ>=t)return[new zl(this.overscaledZ+1,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y)];var e=this.canonical.z+1,r=2*this.canonical.x,n=2*this.canonical.y;return[new zl(e,this.wrap,e,r,n),new zl(e,this.wrap,e,r+1,n),new zl(e,this.wrap,e,r,n+1),new zl(e,this.wrap,e,r+1,n+1)]},zl.prototype.isLessThan=function(t){return this.wrap<t.wrap||!(this.wrap>t.wrap)&&(this.overscaledZ<t.overscaledZ||!(this.overscaledZ>t.overscaledZ)&&(this.canonical.x<t.canonical.x||!(this.canonical.x>t.canonical.x)&&this.canonical.y<t.canonical.y))},zl.prototype.wrapped=function(){return new zl(this.overscaledZ,0,this.canonical.z,this.canonical.x,this.canonical.y)},zl.prototype.unwrapTo=function(t){return new zl(this.overscaledZ,t,this.canonical.z,this.canonical.x,this.canonical.y)},zl.prototype.overscaleFactor=function(){return Math.pow(2,this.overscaledZ-this.canonical.z)},zl.prototype.toUnwrapped=function(){return new Ol(this.wrap,this.canonical)},zl.prototype.toString=function(){return this.overscaledZ+\\\"/\\\"+this.canonical.x+\\\"/\\\"+this.canonical.y},zl.prototype.getTilePoint=function(t){return this.canonical.getTilePoint(new Ll(t.x-this.wrap,t.y))},kn(\\\"CanonicalTileID\\\",Pl),kn(\\\"OverscaledTileID\\\",zl,{omit:[\\\"posMatrix\\\"]});var Dl=function(t,e,r){if(this.uid=t,e.height!==e.width)throw new RangeError(\\\"DEM tiles must be square\\\");if(r&&\\\"mapbox\\\"!==r&&\\\"terrarium\\\"!==r)return w('\\\"'+r+'\\\" is not a valid encoding type. Valid types include \\\"mapbox\\\" and \\\"terrarium\\\".');var n=this.dim=e.height;this.stride=this.dim+2,this.data=new Int32Array(this.stride*this.stride);for(var i=e.data,a=\\\"terrarium\\\"===r?this._unpackTerrarium:this._unpackMapbox,o=0;o<n;o++)for(var s=0;s<n;s++){var l=4*(o*n+s);this.set(s,o,a(i[l],i[l+1],i[l+2]))}for(var c=0;c<n;c++)this.set(-1,c,this.get(0,c)),this.set(n,c,this.get(n-1,c)),this.set(c,-1,this.get(c,0)),this.set(c,n,this.get(c,n-1));this.set(-1,-1,this.get(0,0)),this.set(n,-1,this.get(n-1,0)),this.set(-1,n,this.get(0,n-1)),this.set(n,n,this.get(n-1,n-1))};Dl.prototype.set=function(t,e,r){this.data[this._idx(t,e)]=r+65536},Dl.prototype.get=function(t,e){return this.data[this._idx(t,e)]-65536},Dl.prototype._idx=function(t,e){if(t<-1||t>=this.dim+1||e<-1||e>=this.dim+1)throw new RangeError(\\\"out of range source coordinates for DEM data\\\");return(e+1)*this.stride+(t+1)},Dl.prototype._unpackMapbox=function(t,e,r){return(256*t*256+256*e+r)/10-1e4},Dl.prototype._unpackTerrarium=function(t,e,r){return 256*t+e+r/256-32768},Dl.prototype.getPixels=function(){return new Ha({width:this.stride,height:this.stride},new Uint8Array(this.data.buffer))},Dl.prototype.backfillBorder=function(t,e,r){if(this.dim!==t.dim)throw new Error(\\\"dem dimension mismatch\\\");var n=e*this.dim,i=e*this.dim+this.dim,a=r*this.dim,o=r*this.dim+this.dim;switch(e){case-1:n=i-1;break;case 1:i=n+1}switch(r){case-1:a=o-1;break;case 1:o=a+1}for(var s=-e*this.dim,l=-r*this.dim,c=a;c<o;c++)for(var u=n;u<i;u++)this.set(u,c,t.get(u+s,c+l))},kn(\\\"DEMData\\\",Dl);var Rl=oi([{name:\\\"a_pos\\\",type:\\\"Int16\\\",components:2},{name:\\\"a_texture_pos\\\",type:\\\"Int16\\\",components:2}]),Fl=function(t){this._stringToNumber={},this._numberToString=[];for(var e=0;e<t.length;e++){var r=t[e];this._stringToNumber[r]=e,this._numberToString[e]=r}};Fl.prototype.encode=function(t){return this._stringToNumber[t]},Fl.prototype.decode=function(t){return this._numberToString[t]};var Bl=function(t,e,r,n){this.type=\\\"Feature\\\",this._vectorTileFeature=t,t._z=e,t._x=r,t._y=n,this.properties=t.properties,null!=t.id&&(this.id=t.id)},Nl={geometry:{configurable:!0}};Nl.geometry.get=function(){return void 0===this._geometry&&(this._geometry=this._vectorTileFeature.toGeoJSON(this._vectorTileFeature._x,this._vectorTileFeature._y,this._vectorTileFeature._z).geometry),this._geometry},Nl.geometry.set=function(t){this._geometry=t},Bl.prototype.toJSON=function(){var t={geometry:this.geometry};for(var e in this)\\\"_geometry\\\"!==e&&\\\"_vectorTileFeature\\\"!==e&&(t[e]=this[e]);return t},Object.defineProperties(Bl.prototype,Nl);var jl=function(){this.state={},this.stateChanges={},this.deletedStates={}};jl.prototype.updateState=function(t,e,r){var n=String(e);if(this.stateChanges[t]=this.stateChanges[t]||{},this.stateChanges[t][n]=this.stateChanges[t][n]||{},h(this.stateChanges[t][n],r),null===this.deletedStates[t])for(var i in this.deletedStates[t]={},this.state[t])i!==n&&(this.deletedStates[t][i]=null);else if(this.deletedStates[t]&&null===this.deletedStates[t][n])for(var a in this.deletedStates[t][n]={},this.state[t][n])r[a]||(this.deletedStates[t][n][a]=null);else for(var o in r)this.deletedStates[t]&&this.deletedStates[t][n]&&null===this.deletedStates[t][n][o]&&delete this.deletedStates[t][n][o]},jl.prototype.removeFeatureState=function(t,e,r){if(null!==this.deletedStates[t]){var n=String(e);if(this.deletedStates[t]=this.deletedStates[t]||{},r&&void 0!==e&&e>=0)null!==this.deletedStates[t][n]&&(this.deletedStates[t][n]=this.deletedStates[t][n]||{},this.deletedStates[t][n][r]=null);else if(void 0!==e&&e>=0)if(this.stateChanges[t]&&this.stateChanges[t][n])for(r in this.deletedStates[t][n]={},this.stateChanges[t][n])this.deletedStates[t][n][r]=null;else this.deletedStates[t][n]=null;else this.deletedStates[t]=null}},jl.prototype.getState=function(t,e){var r=String(e),n=this.state[t]||{},i=this.stateChanges[t]||{},a=h({},n[r],i[r]);if(null===this.deletedStates[t])return{};if(this.deletedStates[t]){var o=this.deletedStates[t][e];if(null===o)return{};for(var s in o)delete a[s]}return a},jl.prototype.initializeTileState=function(t,e){t.setFeatureState(this.state,e)},jl.prototype.coalesceChanges=function(t,e){var r={};for(var n in this.stateChanges){this.state[n]=this.state[n]||{};var i={};for(var a in this.stateChanges[n])this.state[n][a]||(this.state[n][a]={}),h(this.state[n][a],this.stateChanges[n][a]),i[a]=this.state[n][a];r[n]=i}for(var o in this.deletedStates){this.state[o]=this.state[o]||{};var s={};if(null===this.deletedStates[o])for(var l in this.state[o])s[l]={},this.state[o][l]={};else for(var c in this.deletedStates[o]){if(null===this.deletedStates[o][c])this.state[o][c]={};else for(var u=0,f=Object.keys(this.deletedStates[o][c]);u<f.length;u+=1){var p=f[u];delete this.state[o][c][p]}s[c]=this.state[o][c]}r[o]=r[o]||{},h(r[o],s)}if(this.stateChanges={},this.deletedStates={},0!==Object.keys(r).length)for(var d in t)t[d].setFeatureState(r,e)};var Ul=function(t,e,r){this.tileID=t,this.x=t.canonical.x,this.y=t.canonical.y,this.z=t.canonical.z,this.grid=e||new yn(ha,16,0),this.grid3D=new yn(ha,16,0),this.featureIndexArray=r||new ji};function Vl(t){for(var e=1/0,r=1/0,n=-1/0,i=-1/0,a=0,o=t;a<o.length;a+=1){var s=o[a];e=Math.min(e,s.x),r=Math.min(r,s.y),n=Math.max(n,s.x),i=Math.max(i,s.y)}return{minX:e,minY:r,maxX:n,maxY:i}}function ql(t,e){return e-t}Ul.prototype.insert=function(t,e,r,n,i,a){var o=this.featureIndexArray.length;this.featureIndexArray.emplaceBack(r,n,i);for(var s=a?this.grid3D:this.grid,l=0;l<e.length;l++){for(var c=e[l],u=[1/0,1/0,-1/0,-1/0],h=0;h<c.length;h++){var f=c[h];u[0]=Math.min(u[0],f.x),u[1]=Math.min(u[1],f.y),u[2]=Math.max(u[2],f.x),u[3]=Math.max(u[3],f.y)}u[0]<ha&&u[1]<ha&&u[2]>=0&&u[3]>=0&&s.insert(o,u[0],u[1],u[2],u[3])}},Ul.prototype.loadVTLayers=function(){return this.vtLayers||(this.vtLayers=new Vo.VectorTile(new Qs(this.rawTileData)).layers,this.sourceLayerCoder=new Fl(this.vtLayers?Object.keys(this.vtLayers).sort():[\\\"_geojsonTileLayer\\\"])),this.vtLayers},Ul.prototype.query=function(t,e,r){var n=this;this.loadVTLayers();for(var a=t.params||{},o=ha/t.tileSize/t.scale,s=Gr(a.filter),l=t.queryGeometry,c=t.queryPadding*o,u=Vl(l),h=this.grid.query(u.minX-c,u.minY-c,u.maxX+c,u.maxY+c),f=Vl(t.cameraQueryGeometry),p=0,d=this.grid3D.query(f.minX-c,f.minY-c,f.maxX+c,f.maxY+c,function(e,r,n,a){return function(t,e,r,n,a){for(var o=0,s=t;o<s.length;o+=1){var l=s[o];if(e<=l.x&&r<=l.y&&n>=l.x&&a>=l.y)return!0}var c=[new i(e,r),new i(e,a),new i(n,a),new i(n,r)];if(t.length>2)for(var u=0,h=c;u<h.length;u+=1)if(Aa(t,h[u]))return!0;for(var f=0;f<t.length-1;f++)if(Ma(t[f],t[f+1],c))return!0;return!1}(t.cameraQueryGeometry,e-c,r-c,n+c,a+c)});p<d.length;p+=1){var g=d[p];h.push(g)}h.sort(ql);for(var v,m={},y=function(i){var c=h[i];if(c!==v){v=c;var u=n.featureIndexArray.get(c),f=null;n.loadMatchingFeature(m,u.bucketIndex,u.sourceLayerIndex,u.featureIndex,s,a.layers,e,function(e,i){f||(f=pa(e));var a={};return e.id&&(a=r.getState(i.sourceLayer||\\\"_geojsonTileLayer\\\",e.id)),i.queryIntersectsFeature(l,e,a,f,n.z,t.transform,o,t.pixelPosMatrix)})}},x=0;x<h.length;x++)y(x);return m},Ul.prototype.loadMatchingFeature=function(t,e,r,n,i,a,o,s){var l=this.bucketLayerIDs[e];if(!a||function(t,e){for(var r=0;r<t.length;r++)if(e.indexOf(t[r])>=0)return!0;return!1}(a,l)){var c=this.sourceLayerCoder.decode(r),u=this.vtLayers[c].feature(n);if(i(new Un(this.tileID.overscaledZ),u))for(var h=0;h<l.length;h++){var f=l[h];if(!(a&&a.indexOf(f)<0)){var p=o[f];if(p){var d=!s||s(u,p);if(d){var g=new Bl(u,this.z,this.x,this.y);g.layer=p.serialize();var v=t[f];void 0===v&&(v=t[f]=[]),v.push({featureIndex:n,feature:g,intersectionZ:d})}}}}}},Ul.prototype.lookupSymbolFeatures=function(t,e,r,n,i,a){var o={};this.loadVTLayers();for(var s=Gr(n),l=0,c=t;l<c.length;l+=1){var u=c[l];this.loadMatchingFeature(o,e,r,u,s,i,a)}return o},Ul.prototype.hasLayer=function(t){for(var e=0,r=this.bucketLayerIDs;e<r.length;e+=1)for(var n=0,i=r[e];n<i.length;n+=1)if(t===i[n])return!0;return!1},kn(\\\"FeatureIndex\\\",Ul,{omit:[\\\"rawTileData\\\",\\\"sourceLayerCoder\\\"]});var Hl=function(t,e){this.tileID=t,this.uid=p(),this.uses=0,this.tileSize=e,this.buckets={},this.expirationTime=null,this.queryPadding=0,this.hasSymbolBuckets=!1,this.expiredRequestCount=0,this.state=\\\"loading\\\"};Hl.prototype.registerFadeDuration=function(t){var e=t+this.timeAdded;e<z.now()||this.fadeEndTime&&e<this.fadeEndTime||(this.fadeEndTime=e)},Hl.prototype.wasRequested=function(){return\\\"errored\\\"===this.state||\\\"loaded\\\"===this.state||\\\"reloading\\\"===this.state},Hl.prototype.loadVectorData=function(t,e,r){if(this.hasData()&&this.unloadVectorData(),this.state=\\\"loaded\\\",t){for(var n in t.featureIndex&&(this.latestFeatureIndex=t.featureIndex,t.rawTileData?(this.latestRawTileData=t.rawTileData,this.latestFeatureIndex.rawTileData=t.rawTileData):this.latestRawTileData&&(this.latestFeatureIndex.rawTileData=this.latestRawTileData)),this.collisionBoxArray=t.collisionBoxArray,this.buckets=function(t,e){var r={};if(!e)return r;for(var n=function(){var t=a[i],n=t.layerIds.map(function(t){return e.getLayer(t)}).filter(Boolean);if(0!==n.length){t.layers=n,t.stateDependentLayerIds&&(t.stateDependentLayers=t.stateDependentLayerIds.map(function(t){return n.filter(function(e){return e.id===t})[0]}));for(var o=0,s=n;o<s.length;o+=1){var l=s[o];r[l.id]=t}}},i=0,a=t;i<a.length;i+=1)n();return r}(t.buckets,e.style),this.hasSymbolBuckets=!1,this.buckets){var i=this.buckets[n];if(i instanceof Os){if(this.hasSymbolBuckets=!0,!r)break;i.justReloaded=!0}}for(var a in this.queryPadding=0,this.buckets){var o=this.buckets[a];this.queryPadding=Math.max(this.queryPadding,e.style.getLayer(a).queryRadius(o))}t.imageAtlas&&(this.imageAtlas=t.imageAtlas),t.glyphAtlasImage&&(this.glyphAtlasImage=t.glyphAtlasImage)}else this.collisionBoxArray=new Li},Hl.prototype.unloadVectorData=function(){for(var t in this.buckets)this.buckets[t].destroy();this.buckets={},this.imageAtlasTexture&&this.imageAtlasTexture.destroy(),this.imageAtlas&&(this.imageAtlas=null),this.glyphAtlasTexture&&this.glyphAtlasTexture.destroy(),this.latestFeatureIndex=null,this.state=\\\"unloaded\\\"},Hl.prototype.unloadDEMData=function(){this.dem=null,this.neighboringTiles=null,this.state=\\\"unloaded\\\"},Hl.prototype.getBucket=function(t){return this.buckets[t.id]},Hl.prototype.upload=function(t){for(var e in this.buckets){var r=this.buckets[e];r.uploadPending()&&r.upload(t)}var n=t.gl;this.imageAtlas&&!this.imageAtlas.uploaded&&(this.imageAtlasTexture=new Js(t,this.imageAtlas.image,n.RGBA),this.imageAtlas.uploaded=!0),this.glyphAtlasImage&&(this.glyphAtlasTexture=new Js(t,this.glyphAtlasImage,n.ALPHA),this.glyphAtlasImage=null)},Hl.prototype.prepare=function(t){this.imageAtlas&&this.imageAtlas.patchUpdatedImages(t,this.imageAtlasTexture)},Hl.prototype.queryRenderedFeatures=function(t,e,r,n,i,a,o,s,l){return this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData?this.latestFeatureIndex.query({queryGeometry:r,cameraQueryGeometry:n,scale:i,tileSize:this.tileSize,pixelPosMatrix:l,transform:o,params:a,queryPadding:this.queryPadding*s},t,e):{}},Hl.prototype.querySourceFeatures=function(t,e){if(this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData){var r=this.latestFeatureIndex.loadVTLayers(),n=e?e.sourceLayer:\\\"\\\",i=r._geojsonTileLayer||r[n];if(i)for(var a=Gr(e&&e.filter),o=this.tileID.canonical,s=o.z,l=o.x,c=o.y,u={z:s,x:l,y:c},h=0;h<i.length;h++){var f=i.feature(h);if(a(new Un(this.tileID.overscaledZ),f)){var p=new Bl(f,s,l,c);p.tile=u,t.push(p)}}}},Hl.prototype.clearMask=function(){this.segments&&(this.segments.destroy(),delete this.segments),this.maskedBoundsBuffer&&(this.maskedBoundsBuffer.destroy(),delete this.maskedBoundsBuffer),this.maskedIndexBuffer&&(this.maskedIndexBuffer.destroy(),delete this.maskedIndexBuffer)},Hl.prototype.setMask=function(t,e){if(!o(this.mask,t)&&(this.mask=t,this.clearMask(),!o(t,{0:!0}))){var r=new ci,n=new Ti;this.segments=new Vi,this.segments.prepareSegment(0,r,n);for(var a=Object.keys(t),s=0;s<a.length;s++){var l=t[+a[s]],c=ha>>l.z,u=new i(l.x*c,l.y*c),h=new i(u.x+c,u.y+c),f=this.segments.prepareSegment(4,r,n);r.emplaceBack(u.x,u.y,u.x,u.y),r.emplaceBack(h.x,u.y,h.x,u.y),r.emplaceBack(u.x,h.y,u.x,h.y),r.emplaceBack(h.x,h.y,h.x,h.y);var p=f.vertexLength;n.emplaceBack(p,p+1,p+2),n.emplaceBack(p+1,p+2,p+3),f.vertexLength+=4,f.primitiveLength+=2}this.maskedBoundsBuffer=e.createVertexBuffer(r,Rl.members),this.maskedIndexBuffer=e.createIndexBuffer(n)}},Hl.prototype.hasData=function(){return\\\"loaded\\\"===this.state||\\\"reloading\\\"===this.state||\\\"expired\\\"===this.state},Hl.prototype.patternsLoaded=function(){return this.imageAtlas&&!!Object.keys(this.imageAtlas.patternPositions).length},Hl.prototype.setExpiryData=function(t){var e=this.expirationTime;if(t.cacheControl){var r=A(t.cacheControl);r[\\\"max-age\\\"]&&(this.expirationTime=Date.now()+1e3*r[\\\"max-age\\\"])}else t.expires&&(this.expirationTime=new Date(t.expires).getTime());if(this.expirationTime){var n=Date.now(),i=!1;if(this.expirationTime>n)i=!1;else if(e)if(this.expirationTime<e)i=!0;else{var a=this.expirationTime-e;a?this.expirationTime=n+Math.max(a,3e4):i=!0}else i=!0;i?(this.expiredRequestCount++,this.state=\\\"expired\\\"):this.expiredRequestCount=0}},Hl.prototype.getExpiryTimeout=function(){if(this.expirationTime)return this.expiredRequestCount?1e3*(1<<Math.min(this.expiredRequestCount-1,31)):Math.min(this.expirationTime-(new Date).getTime(),Math.pow(2,31)-1)},Hl.prototype.setFeatureState=function(t,e){if(this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData&&0!==Object.keys(t).length){var r=this.latestFeatureIndex.loadVTLayers();for(var n in this.buckets){var i=this.buckets[n],a=i.layers[0].sourceLayer||\\\"_geojsonTileLayer\\\",o=r[a],s=t[a];o&&s&&0!==Object.keys(s).length&&(i.update(s,o,this.imageAtlas&&this.imageAtlas.patternPositions||{}),e&&e.style&&(this.queryPadding=Math.max(this.queryPadding,e.style.getLayer(n).queryRadius(i))))}}},Hl.prototype.holdingForFade=function(){return void 0!==this.symbolFadeHoldUntil},Hl.prototype.symbolFadeFinished=function(){return!this.symbolFadeHoldUntil||this.symbolFadeHoldUntil<z.now()},Hl.prototype.clearFadeHold=function(){this.symbolFadeHoldUntil=void 0},Hl.prototype.setHoldDuration=function(t){this.symbolFadeHoldUntil=z.now()+t};var Gl=24,Yl={horizontal:1,vertical:2,horizontalOnly:3},Wl=function(){this.text=\\\"\\\",this.sectionIndex=[],this.sections=[]};function Xl(t,e,r,n,i,a,o,s,l,c){var u,h=Wl.fromFeature(t,r);c===Yl.vertical&&h.verticalizePunctuation();var f=jn.processBidirectionalText,p=jn.processStyledBidirectionalText;if(f&&1===h.sections.length){u=[];for(var d=0,g=f(h.toString(),tc(h,s,n,e));d<g.length;d+=1){var v=g[d],m=new Wl;m.text=v,m.sections=h.sections;for(var y=0;y<v.length;y++)m.sectionIndex.push(0);u.push(m)}}else if(p){u=[];for(var x=0,b=p(h.text,h.sectionIndex,tc(h,s,n,e));x<b.length;x+=1){var _=b[x],w=new Wl;w.text=_[0],w.sectionIndex=_[1],w.sections=h.sections,u.push(w)}}else u=function(t,e){for(var r=[],n=t.text,i=0,a=0,o=e;a<o.length;a+=1){var s=o[a];r.push(t.substring(i,s)),i=s}return i<n.length&&r.push(t.substring(i,n.length)),r}(h,tc(h,s,n,e));var k=[],T={positionedGlyphs:k,text:h.toString(),top:l[1],bottom:l[1],left:l[0],right:l[0],writingMode:c,lineCount:u.length};return function(t,e,r,n,i,a,o,s){for(var l=0,c=-17,u=0,h=t.positionedGlyphs,f=\\\"right\\\"===a?1:\\\"left\\\"===a?0:.5,p=0,d=r;p<d.length;p+=1){var g=d[p];g.trim();var v=g.getMaxScale();if(g.length()){for(var m=h.length,y=0;y<g.length();y++){var x=g.getSection(y),b=g.getCharCode(y),_=24*(v-x.scale),w=e[x.fontStack],k=w&&w[b];k&&(On(b)&&o!==Yl.horizontal?(h.push({glyph:b,x:l,y:_,vertical:!0,scale:x.scale,fontStack:x.fontStack}),l+=Gl*x.scale+s):(h.push({glyph:b,x:l,y:c+_,vertical:!1,scale:x.scale,fontStack:x.fontStack}),l+=k.metrics.advance*x.scale+s))}if(h.length!==m){var T=l-s;u=Math.max(T,u),rc(h,e,m,h.length-1,f)}l=0,c+=n*v}else c+=n}var A=ec(i),M=A.horizontalAlign,S=A.verticalAlign;!function(t,e,r,n,i,a,o){for(var s=(e-r)*i,l=(-n*o+.5)*a,c=0;c<t.length;c++)t[c].x+=s,t[c].y+=l}(h,f,M,S,u,n,r.length);var E=c- -17;t.top+=-S*E,t.bottom=t.top+E,t.left+=-M*u,t.right=t.left+u}(T,e,u,i,a,o,c,s),!!k.length&&T}Wl.fromFeature=function(t,e){for(var r=new Wl,n=0;n<t.sections.length;n++){var i=t.sections[n];r.sections.push({scale:i.scale||1,fontStack:i.fontStack||e}),r.text+=i.text;for(var a=0;a<i.text.length;a++)r.sectionIndex.push(n)}return r},Wl.prototype.length=function(){return this.text.length},Wl.prototype.getSection=function(t){return this.sections[this.sectionIndex[t]]},Wl.prototype.getCharCode=function(t){return this.text.charCodeAt(t)},Wl.prototype.verticalizePunctuation=function(){this.text=function(t){for(var e=\\\"\\\",r=0;r<t.length;r++){var n=t.charCodeAt(r+1)||null,i=t.charCodeAt(r-1)||null;n&&zn(n)&&!xs[t[r+1]]||i&&zn(i)&&!xs[t[r-1]]||!xs[t[r]]?e+=t[r]:e+=xs[t[r]]}return e}(this.text)},Wl.prototype.trim=function(){for(var t=0,e=0;e<this.text.length&&Zl[this.text.charCodeAt(e)];e++)t++;for(var r=this.text.length,n=this.text.length-1;n>=0&&n>=t&&Zl[this.text.charCodeAt(n)];n--)r--;this.text=this.text.substring(t,r),this.sectionIndex=this.sectionIndex.slice(t,r)},Wl.prototype.substring=function(t,e){var r=new Wl;return r.text=this.text.substring(t,e),r.sectionIndex=this.sectionIndex.slice(t,e),r.sections=this.sections,r},Wl.prototype.toString=function(){return this.text},Wl.prototype.getMaxScale=function(){var t=this;return this.sectionIndex.reduce(function(e,r){return Math.max(e,t.sections[r].scale)},0)};var Zl={9:!0,10:!0,11:!0,12:!0,13:!0,32:!0},Jl={};function Kl(t,e,r,n){var i=Math.pow(t-e,2);return n?t<e?i/2:2*i:i+Math.abs(r)*r}function $l(t,e,r){var n=0;return 10===t&&(n-=1e4),r&&(n+=150),40!==t&&65288!==t||(n+=50),41!==e&&65289!==e||(n+=50),n}function Ql(t,e,r,n,i,a){for(var o=null,s=Kl(e,r,i,a),l=0,c=n;l<c.length;l+=1){var u=c[l],h=Kl(e-u.x,r,i,a)+u.badness;h<=s&&(o=u,s=h)}return{index:t,x:e,priorBreak:o,badness:s}}function tc(t,e,r,n){if(!r)return[];if(!t)return[];for(var i,a=[],o=function(t,e,r,n){for(var i=0,a=0;a<t.length();a++){var o=t.getSection(a),s=n[o.fontStack],l=s&&s[t.getCharCode(a)];l&&(i+=l.metrics.advance*o.scale+e)}return i/Math.max(1,Math.ceil(i/r))}(t,e,r,n),s=t.text.indexOf(\\\"\\\\u200b\\\")>=0,l=0,c=0;c<t.length();c++){var u=t.getSection(c),h=t.getCharCode(c),f=n[u.fontStack],p=f&&f[h];if(p&&!Zl[h]&&(l+=p.metrics.advance*u.scale+e),c<t.length()-1){var d=!((i=h)<11904||!(En[\\\"Bopomofo Extended\\\"](i)||En.Bopomofo(i)||En[\\\"CJK Compatibility Forms\\\"](i)||En[\\\"CJK Compatibility Ideographs\\\"](i)||En[\\\"CJK Compatibility\\\"](i)||En[\\\"CJK Radicals Supplement\\\"](i)||En[\\\"CJK Strokes\\\"](i)||En[\\\"CJK Symbols and Punctuation\\\"](i)||En[\\\"CJK Unified Ideographs Extension A\\\"](i)||En[\\\"CJK Unified Ideographs\\\"](i)||En[\\\"Enclosed CJK Letters and Months\\\"](i)||En[\\\"Halfwidth and Fullwidth Forms\\\"](i)||En.Hiragana(i)||En[\\\"Ideographic Description Characters\\\"](i)||En[\\\"Kangxi Radicals\\\"](i)||En[\\\"Katakana Phonetic Extensions\\\"](i)||En.Katakana(i)||En[\\\"Vertical Forms\\\"](i)||En[\\\"Yi Radicals\\\"](i)||En[\\\"Yi Syllables\\\"](i)));(Jl[h]||d)&&a.push(Ql(c+1,l,o,a,$l(h,t.getCharCode(c+1),d&&s),!1))}}return function t(e){return e?t(e.priorBreak).concat(e.index):[]}(Ql(t.length(),l,o,a,0,!0))}function ec(t){var e=.5,r=.5;switch(t){case\\\"right\\\":case\\\"top-right\\\":case\\\"bottom-right\\\":e=1;break;case\\\"left\\\":case\\\"top-left\\\":case\\\"bottom-left\\\":e=0}switch(t){case\\\"bottom\\\":case\\\"bottom-right\\\":case\\\"bottom-left\\\":r=1;break;case\\\"top\\\":case\\\"top-right\\\":case\\\"top-left\\\":r=0}return{horizontalAlign:e,verticalAlign:r}}function rc(t,e,r,n,i){if(i){var a=t[n],o=e[a.fontStack],s=o&&o[a.glyph];if(s)for(var l=s.metrics.advance*a.scale,c=(t[n].x+l)*i,u=r;u<=n;u++)t[u].x-=c}}function nc(t,e,r){var n=ec(r),i=n.horizontalAlign,a=n.verticalAlign,o=e[0],s=e[1],l=o-t.displaySize[0]*i,c=l+t.displaySize[0],u=s-t.displaySize[1]*a;return{image:t,top:u,bottom:u+t.displaySize[1],left:l,right:c}}function ic(t,e,r,n,i){if(void 0===e.segment)return!0;for(var a=e,o=e.segment+1,s=0;s>-r/2;){if(--o<0)return!1;s-=t[o].dist(a),a=t[o]}s+=t[o].dist(t[o+1]),o++;for(var l=[],c=0;s<r/2;){var u=t[o-1],h=t[o],f=t[o+1];if(!f)return!1;var p=u.angleTo(h)-h.angleTo(f);for(p=Math.abs((p+3*Math.PI)%(2*Math.PI)-Math.PI),l.push({distance:s,angleDelta:p}),c+=p;s-l[0].distance>n;)c-=l.shift().angleDelta;if(c>i)return!1;o++,s+=h.dist(f)}return!0}function ac(t){for(var e=0,r=0;r<t.length-1;r++)e+=t[r].dist(t[r+1]);return e}function oc(t,e,r){return t?.6*e*r:0}function sc(t,e){return Math.max(t?t.right-t.left:0,e?e.right-e.left:0)}function lc(t,e,r,n,i,a){for(var o=oc(r,i,a),s=sc(r,n)*a,l=0,c=ac(t)/2,u=0;u<t.length-1;u++){var h=t[u],f=t[u+1],p=h.dist(f);if(l+p>c){var d=(c-l)/p,g=Ee(h.x,f.x,d),v=Ee(h.y,f.y,d),m=new bs(g,v,f.angleTo(h),u);return m._round(),!o||ic(t,m,s,o,e)?m:void 0}l+=p}}function cc(t,e,r,n,i,a,o,s,l){var c=oc(n,a,o),u=sc(n,i),h=u*o,f=0===t[0].x||t[0].x===l||0===t[0].y||t[0].y===l;return e-h<e/4&&(e=h+e/4),function t(e,r,n,i,a,o,s,l,c){for(var u=o/2,h=ac(e),f=0,p=r-n,d=[],g=0;g<e.length-1;g++){for(var v=e[g],m=e[g+1],y=v.dist(m),x=m.angleTo(v);p+n<f+y;){var b=((p+=n)-f)/y,_=Ee(v.x,m.x,b),w=Ee(v.y,m.y,b);if(_>=0&&_<c&&w>=0&&w<c&&p-u>=0&&p+u<=h){var k=new bs(_,w,x,g);k._round(),i&&!ic(e,k,o,i,a)||d.push(k)}}f+=y}return l||d.length||s||(d=t(e,f/2,n,i,a,o,s,!0,c)),d}(t,f?e/2*s%e:(u/2+2*a)*o*s%e,e,c,r,h,f,!1,l)}Jl[10]=!0,Jl[32]=!0,Jl[38]=!0,Jl[40]=!0,Jl[41]=!0,Jl[43]=!0,Jl[45]=!0,Jl[47]=!0,Jl[173]=!0,Jl[183]=!0,Jl[8203]=!0,Jl[8208]=!0,Jl[8211]=!0,Jl[8231]=!0;var uc=function(t,e,r,n,a,o,s,l,c,u,h,f){var p=s.top*l-c,d=s.bottom*l+c,g=s.left*l-c,v=s.right*l+c;if(this.boxStartIndex=t.length,u){var m=d-p,y=v-g;m>0&&(m=Math.max(10*l,m),this._addLineCollisionCircles(t,e,r,r.segment,y,m,n,a,o,h))}else{if(f){var x=new i(g,p),b=new i(v,p),_=new i(g,d),w=new i(v,d),k=f*Math.PI/180;x._rotate(k),b._rotate(k),_._rotate(k),w._rotate(k),g=Math.min(x.x,b.x,_.x,w.x),v=Math.max(x.x,b.x,_.x,w.x),p=Math.min(x.y,b.y,_.y,w.y),d=Math.max(x.y,b.y,_.y,w.y)}t.emplaceBack(r.x,r.y,g,p,v,d,n,a,o,0,0)}this.boxEndIndex=t.length};uc.prototype._addLineCollisionCircles=function(t,e,r,n,i,a,o,s,l,c){var u=a/2,h=Math.floor(i/u)||1,f=1+.4*Math.log(c)/Math.LN2,p=Math.floor(h*f/2),d=-a/2,g=r,v=n+1,m=d,y=-i/2,x=y-i/4;do{if(--v<0){if(m>y)return;v=0;break}m-=e[v].dist(g),g=e[v]}while(m>x);for(var b=e[v].dist(e[v+1]),_=-p;_<h+p;_++){var w=_*u,k=y+w;if(w<0&&(k+=w),w>i&&(k+=w-i),!(k<m)){for(;m+b<k;){if(m+=b,++v+1>=e.length)return;b=e[v].dist(e[v+1])}var T=k-m,A=e[v],M=e[v+1].sub(A)._unit()._mult(T)._add(A)._round(),S=Math.abs(k-d)<u?0:.8*(k-d);t.emplaceBack(M.x,M.y,-a/2,-a/2,a/2,a/2,o,s,l,a/2,S)}}};var hc=function(t,e){if(void 0===t&&(t=[]),void 0===e&&(e=fc),this.data=t,this.length=this.data.length,this.compare=e,this.length>0)for(var r=(this.length>>1)-1;r>=0;r--)this._down(r)};function fc(t,e){return t<e?-1:t>e?1:0}function pc(t,e,r){void 0===e&&(e=1),void 0===r&&(r=!1);for(var n=1/0,a=1/0,o=-1/0,s=-1/0,l=t[0],c=0;c<l.length;c++){var u=l[c];(!c||u.x<n)&&(n=u.x),(!c||u.y<a)&&(a=u.y),(!c||u.x>o)&&(o=u.x),(!c||u.y>s)&&(s=u.y)}var h=o-n,f=s-a,p=Math.min(h,f),d=p/2,g=new hc([],dc);if(0===p)return new i(n,a);for(var v=n;v<o;v+=p)for(var m=a;m<s;m+=p)g.push(new gc(v+d,m+d,d,t));for(var y=function(t){for(var e=0,r=0,n=0,i=t[0],a=0,o=i.length,s=o-1;a<o;s=a++){var l=i[a],c=i[s],u=l.x*c.y-c.x*l.y;r+=(l.x+c.x)*u,n+=(l.y+c.y)*u,e+=3*u}return new gc(r/e,n/e,0,t)}(t),x=g.length;g.length;){var b=g.pop();(b.d>y.d||!y.d)&&(y=b,r&&console.log(\\\"found best %d after %d probes\\\",Math.round(1e4*b.d)/1e4,x)),b.max-y.d<=e||(d=b.h/2,g.push(new gc(b.p.x-d,b.p.y-d,d,t)),g.push(new gc(b.p.x+d,b.p.y-d,d,t)),g.push(new gc(b.p.x-d,b.p.y+d,d,t)),g.push(new gc(b.p.x+d,b.p.y+d,d,t)),x+=4)}return r&&(console.log(\\\"num probes: \\\"+x),console.log(\\\"best distance: \\\"+y.d)),y.p}function dc(t,e){return e.max-t.max}function gc(t,e,r,n){this.p=new i(t,e),this.h=r,this.d=function(t,e){for(var r=!1,n=1/0,i=0;i<e.length;i++)for(var a=e[i],o=0,s=a.length,l=s-1;o<s;l=o++){var c=a[o],u=a[l];c.y>t.y!=u.y>t.y&&t.x<(u.x-c.x)*(t.y-c.y)/(u.y-c.y)+c.x&&(r=!r),n=Math.min(n,ka(t,c,u))}return(r?1:-1)*Math.sqrt(n)}(this.p,n),this.max=this.d+this.h*Math.SQRT2}hc.prototype.push=function(t){this.data.push(t),this.length++,this._up(this.length-1)},hc.prototype.pop=function(){if(0!==this.length){var t=this.data[0];return this.length--,this.length>0&&(this.data[0]=this.data[this.length],this._down(0)),this.data.pop(),t}},hc.prototype.peek=function(){return this.data[0]},hc.prototype._up=function(t){for(var e=this.data,r=this.compare,n=e[t];t>0;){var i=t-1>>1,a=e[i];if(r(n,a)>=0)break;e[t]=a,t=i}e[t]=n},hc.prototype._down=function(t){for(var e=this.data,r=this.compare,n=this.length>>1,i=e[t];t<n;){var a=1+(t<<1),o=e[a],s=a+1;if(s<this.length&&r(e[s],o)<0&&(a=s,o=e[s]),r(o,i)>=0)break;e[t]=o,t=a}e[t]=i};var vc=e(function(t){t.exports=function(t,e){var r,n,i,a,o,s,l,c;for(r=3&t.length,n=t.length-r,i=e,o=3432918353,s=461845907,c=0;c<n;)l=255&t.charCodeAt(c)|(255&t.charCodeAt(++c))<<8|(255&t.charCodeAt(++c))<<16|(255&t.charCodeAt(++c))<<24,++c,i=27492+(65535&(a=5*(65535&(i=(i^=l=(65535&(l=(l=(65535&l)*o+(((l>>>16)*o&65535)<<16)&4294967295)<<15|l>>>17))*s+(((l>>>16)*s&65535)<<16)&4294967295)<<13|i>>>19))+((5*(i>>>16)&65535)<<16)&4294967295))+((58964+(a>>>16)&65535)<<16);switch(l=0,r){case 3:l^=(255&t.charCodeAt(c+2))<<16;case 2:l^=(255&t.charCodeAt(c+1))<<8;case 1:i^=l=(65535&(l=(l=(65535&(l^=255&t.charCodeAt(c)))*o+(((l>>>16)*o&65535)<<16)&4294967295)<<15|l>>>17))*s+(((l>>>16)*s&65535)<<16)&4294967295}return i^=t.length,i=2246822507*(65535&(i^=i>>>16))+((2246822507*(i>>>16)&65535)<<16)&4294967295,i=3266489909*(65535&(i^=i>>>13))+((3266489909*(i>>>16)&65535)<<16)&4294967295,(i^=i>>>16)>>>0}}),mc=e(function(t){t.exports=function(t,e){for(var r,n=t.length,i=e^n,a=0;n>=4;)r=1540483477*(65535&(r=255&t.charCodeAt(a)|(255&t.charCodeAt(++a))<<8|(255&t.charCodeAt(++a))<<16|(255&t.charCodeAt(++a))<<24))+((1540483477*(r>>>16)&65535)<<16),i=1540483477*(65535&i)+((1540483477*(i>>>16)&65535)<<16)^(r=1540483477*(65535&(r^=r>>>24))+((1540483477*(r>>>16)&65535)<<16)),n-=4,++a;switch(n){case 3:i^=(255&t.charCodeAt(a+2))<<16;case 2:i^=(255&t.charCodeAt(a+1))<<8;case 1:i=1540483477*(65535&(i^=255&t.charCodeAt(a)))+((1540483477*(i>>>16)&65535)<<16)}return i=1540483477*(65535&(i^=i>>>13))+((1540483477*(i>>>16)&65535)<<16),(i^=i>>>15)>>>0}}),yc=vc,xc=vc,bc=mc;yc.murmur3=xc,yc.murmur2=bc;var _c=7;function wc(t,e){var r=0,n=0,i=e/Math.sqrt(2);switch(t){case\\\"top-right\\\":case\\\"top-left\\\":n=i-_c;break;case\\\"bottom-right\\\":case\\\"bottom-left\\\":n=-i+_c;break;case\\\"bottom\\\":n=-e+_c;break;case\\\"top\\\":n=e-_c}switch(t){case\\\"top-right\\\":case\\\"bottom-right\\\":r=-i;break;case\\\"top-left\\\":case\\\"bottom-left\\\":r=i;break;case\\\"left\\\":r=e;break;case\\\"right\\\":r=-e}return[r,n]}function kc(t){switch(t){case\\\"right\\\":case\\\"top-right\\\":case\\\"bottom-right\\\":return\\\"right\\\";case\\\"left\\\":case\\\"top-left\\\":case\\\"bottom-left\\\":return\\\"left\\\"}return\\\"center\\\"}function Tc(t,e,r,n,a,o,s){var l=o.layoutTextSize.evaluate(e,{}),c=o.layoutIconSize.evaluate(e,{}),u=o.textMaxSize.evaluate(e,{});void 0===u&&(u=l);var h=t.layers[0].layout,f=h.get(\\\"icon-offset\\\").evaluate(e,{}),p=Sc(r.horizontal),d=l/24,g=t.tilePixelRatio*d,v=t.tilePixelRatio*u/24,m=t.tilePixelRatio*c,y=t.tilePixelRatio*h.get(\\\"symbol-spacing\\\"),x=h.get(\\\"text-padding\\\")*t.tilePixelRatio,b=h.get(\\\"icon-padding\\\")*t.tilePixelRatio,_=h.get(\\\"text-max-angle\\\")/180*Math.PI,k=\\\"map\\\"===h.get(\\\"text-rotation-alignment\\\")&&\\\"point\\\"!==h.get(\\\"symbol-placement\\\"),T=\\\"map\\\"===h.get(\\\"icon-rotation-alignment\\\")&&\\\"point\\\"!==h.get(\\\"symbol-placement\\\"),A=h.get(\\\"symbol-placement\\\"),M=y/2,S=function(l,c){c.x<0||c.x>=ha||c.y<0||c.y>=ha||function(t,e,r,n,a,o,s,l,c,u,h,f,p,d,g,v,m,y,x,b,_){var k,T,A=t.addToLineVertexArray(e,r),M=0,S=0,E=0,C={},L=yc(\\\"\\\"),P=(o.layout.get(\\\"text-radial-offset\\\").evaluate(x,{})||0)*Gl;for(var O in n.horizontal){var z=n.horizontal[O];if(!k){L=yc(z.text);var I=o.layout.get(\\\"text-rotate\\\").evaluate(x,{});k=new uc(s,r,e,l,c,u,z,h,f,p,t.overscaling,I)}var D=1===z.lineCount;if(S+=Mc(t,e,z,o,p,x,d,A,n.vertical?Yl.horizontal:Yl.horizontalOnly,D?Object.keys(n.horizontal):[O],C,b,_),D)break}n.vertical&&(E+=Mc(t,e,n.vertical,o,p,x,d,A,Yl.vertical,[\\\"vertical\\\"],C,b,_));var R=k?k.boxStartIndex:t.collisionBoxArray.length,F=k?k.boxEndIndex:t.collisionBoxArray.length;if(a){var B=function(t,e,r,n,a,o){var s,l,c,u,h=e.image,f=r.layout,p=e.top-1/h.pixelRatio,d=e.left-1/h.pixelRatio,g=e.bottom+1/h.pixelRatio,v=e.right+1/h.pixelRatio;if(\\\"none\\\"!==f.get(\\\"icon-text-fit\\\")&&a){var m=v-d,y=g-p,x=f.get(\\\"text-size\\\").evaluate(o,{})/24,b=a.left*x,_=a.right*x,w=a.top*x,k=_-b,T=a.bottom*x-w,A=f.get(\\\"icon-text-fit-padding\\\")[0],M=f.get(\\\"icon-text-fit-padding\\\")[1],S=f.get(\\\"icon-text-fit-padding\\\")[2],E=f.get(\\\"icon-text-fit-padding\\\")[3],C=\\\"width\\\"===f.get(\\\"icon-text-fit\\\")?.5*(T-y):0,L=\\\"height\\\"===f.get(\\\"icon-text-fit\\\")?.5*(k-m):0,P=\\\"width\\\"===f.get(\\\"icon-text-fit\\\")||\\\"both\\\"===f.get(\\\"icon-text-fit\\\")?k:m,O=\\\"height\\\"===f.get(\\\"icon-text-fit\\\")||\\\"both\\\"===f.get(\\\"icon-text-fit\\\")?T:y;s=new i(b+L-E,w+C-A),l=new i(b+L+M+P,w+C-A),c=new i(b+L+M+P,w+C+S+O),u=new i(b+L-E,w+C+S+O)}else s=new i(d,p),l=new i(v,p),c=new i(v,g),u=new i(d,g);var z=r.layout.get(\\\"icon-rotate\\\").evaluate(o,{})*Math.PI/180;if(z){var I=Math.sin(z),D=Math.cos(z),R=[D,-I,I,D];s._matMult(R),l._matMult(R),u._matMult(R),c._matMult(R)}return[{tl:s,tr:l,bl:u,br:c,tex:h.paddedRect,writingMode:void 0,glyphOffset:[0,0]}]}(0,a,o,0,Sc(n.horizontal),x),N=o.layout.get(\\\"icon-rotate\\\").evaluate(x,{});T=new uc(s,r,e,l,c,u,a,g,v,!1,t.overscaling,N),M=4*B.length;var j=t.iconSizeData,U=null;\\\"source\\\"===j.kind?(U=[_s*o.layout.get(\\\"icon-size\\\").evaluate(x,{})])[0]>Ac&&w(t.layerIds[0]+': Value for \\\"icon-size\\\" is >= 256. Reduce your \\\"icon-size\\\".'):\\\"composite\\\"===j.kind&&((U=[_s*_.compositeIconSizes[0].evaluate(x,{}),_s*_.compositeIconSizes[1].evaluate(x,{})])[0]>Ac||U[1]>Ac)&&w(t.layerIds[0]+': Value for \\\"icon-size\\\" is >= 256. Reduce your \\\"icon-size\\\".'),t.addSymbols(t.icon,B,U,y,m,x,!1,e,A.lineStartIndex,A.lineLength)}var V=T?T.boxStartIndex:t.collisionBoxArray.length,q=T?T.boxEndIndex:t.collisionBoxArray.length;t.glyphOffsetArray.length>=Os.MAX_GLYPHS&&w(\\\"Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907\\\"),t.symbolInstances.emplaceBack(e.x,e.y,C.right>=0?C.right:-1,C.center>=0?C.center:-1,C.left>=0?C.left:-1,C.vertical||-1,L,R,F,V,q,l,S,E,M,0,h,P)}(t,c,l,r,n,t.layers[0],t.collisionBoxArray,e.index,e.sourceLayerIndex,t.index,g,x,k,s,m,b,T,f,e,a,o)};if(\\\"line\\\"===A)for(var E=0,C=function(t,e,r,n,a){for(var o=[],s=0;s<t.length;s++)for(var l=t[s],c=void 0,u=0;u<l.length-1;u++){var h=l[u],f=l[u+1];h.x<0&&f.x<0||(h.x<0?h=new i(0,h.y+(f.y-h.y)*((0-h.x)/(f.x-h.x)))._round():f.x<0&&(f=new i(0,h.y+(f.y-h.y)*((0-h.x)/(f.x-h.x)))._round()),h.y<0&&f.y<0||(h.y<0?h=new i(h.x+(f.x-h.x)*((0-h.y)/(f.y-h.y)),0)._round():f.y<0&&(f=new i(h.x+(f.x-h.x)*((0-h.y)/(f.y-h.y)),0)._round()),h.x>=n&&f.x>=n||(h.x>=n?h=new i(n,h.y+(f.y-h.y)*((n-h.x)/(f.x-h.x)))._round():f.x>=n&&(f=new i(n,h.y+(f.y-h.y)*((n-h.x)/(f.x-h.x)))._round()),h.y>=a&&f.y>=a||(h.y>=a?h=new i(h.x+(f.x-h.x)*((a-h.y)/(f.y-h.y)),a)._round():f.y>=a&&(f=new i(h.x+(f.x-h.x)*((a-h.y)/(f.y-h.y)),a)._round()),c&&h.equals(c[c.length-1])||(c=[h],o.push(c)),c.push(f)))))}return o}(e.geometry,0,0,ha,ha);E<C.length;E+=1)for(var L=C[E],P=0,O=cc(L,y,_,r.vertical||p,n,24,v,t.overscaling,ha);P<O.length;P+=1){var z=O[P];p&&Ec(t,p.text,M,z)||S(L,z)}else if(\\\"line-center\\\"===A)for(var I=0,D=e.geometry;I<D.length;I+=1){var R=D[I];if(R.length>1){var F=lc(R,_,r.vertical||p,n,24,v);F&&S(R,F)}}else if(\\\"Polygon\\\"===e.type)for(var B=0,N=Mo(e.geometry,0);B<N.length;B+=1){var j=N[B],U=pc(j,16);S(j[0],new bs(U.x,U.y,0))}else if(\\\"LineString\\\"===e.type)for(var V=0,q=e.geometry;V<q.length;V+=1){var H=q[V];S(H,new bs(H[0].x,H[0].y,0))}else if(\\\"Point\\\"===e.type)for(var G=0,Y=e.geometry;G<Y.length;G+=1)for(var W=0,X=Y[G];W<X.length;W+=1){var Z=X[W];S([Z],new bs(Z.x,Z.y,0))}}var Ac=65535;function Mc(t,e,r,n,a,o,s,l,c,u,h,f,p){var d=function(t,e,r,n,a,o,s){for(var l=n.layout.get(\\\"text-rotate\\\").evaluate(o,{})*Math.PI/180,c=e.positionedGlyphs,u=[],h=0;h<c.length;h++){var f=c[h],p=s[f.fontStack],d=p&&p[f.glyph];if(d){var g=d.rect;if(g){var v=bl+1,m=d.metrics.advance*f.scale/2,y=a?[f.x+m,f.y]:[0,0],x=a?[0,0]:[f.x+m+r[0],f.y+r[1]],b=(d.metrics.left-v)*f.scale-m+x[0],_=(-d.metrics.top-v)*f.scale+x[1],w=b+g.w*f.scale,k=_+g.h*f.scale,T=new i(b,_),A=new i(w,_),M=new i(b,k),S=new i(w,k);if(a&&f.vertical){var E=new i(-m,m),C=-Math.PI/2,L=new i(5,0);T._rotateAround(C,E)._add(L),A._rotateAround(C,E)._add(L),M._rotateAround(C,E)._add(L),S._rotateAround(C,E)._add(L)}if(l){var P=Math.sin(l),O=Math.cos(l),z=[O,-P,P,O];T._matMult(z),A._matMult(z),M._matMult(z),S._matMult(z)}u.push({tl:T,tr:A,bl:M,br:S,tex:g,writingMode:e.writingMode,glyphOffset:y})}}}return u}(0,r,s,n,a,o,f),g=t.textSizeData,v=null;\\\"source\\\"===g.kind?(v=[_s*n.layout.get(\\\"text-size\\\").evaluate(o,{})])[0]>Ac&&w(t.layerIds[0]+': Value for \\\"text-size\\\" is >= 256. Reduce your \\\"text-size\\\".'):\\\"composite\\\"===g.kind&&((v=[_s*p.compositeTextSizes[0].evaluate(o,{}),_s*p.compositeTextSizes[1].evaluate(o,{})])[0]>Ac||v[1]>Ac)&&w(t.layerIds[0]+': Value for \\\"text-size\\\" is >= 256. Reduce your \\\"text-size\\\".'),t.addSymbols(t.text,d,v,s,a,o,c,e,l.lineStartIndex,l.lineLength);for(var m=0,y=u;m<y.length;m+=1)h[y[m]]=t.text.placedSymbolArray.length-1;return 4*d.length}function Sc(t){for(var e in t)return t[e];return null}function Ec(t,e,r,n){var i=t.compareText;if(e in i){for(var a=i[e],o=a.length-1;o>=0;o--)if(n.dist(a[o])<r)return!0}else i[e]=[];return i[e].push(n),!1}t.Actor=_l,t.AlphaImage=qa,t.CanonicalTileID=Pl,t.CollisionBoxArray=Li,t.Color=ne,t.DEMData=Dl,t.DataConstantProperty=Jn,t.DictionaryCoder=Fl,t.EXTENT=ha,t.ErrorEvent=Ot,t.EvaluationParameters=Un,t.Event=Pt,t.Evented=zt,t.FeatureIndex=Ul,t.FillBucket=Lo,t.FillExtrusionBucket=Yo,t.ImageAtlas=Gs,t.ImagePosition=qs,t.LineBucket=os,t.LngLat=Tl,t.LngLatBounds=kl,t.MercatorCoordinate=Ll,t.ONE_EM=Gl,t.OverscaledTileID=zl,t.Point=i,t.Point$1=i,t.ProgramConfiguration=sa,t.Properties=ei,t.Protobuf=Qs,t.RGBAImage=Ha,t.RequestManager=j,t.ResourceType=yt,t.SegmentVector=Vi,t.SourceFeatureState=jl,t.StructArrayLayout1ui2=Mi,t.StructArrayLayout2i4=li,t.StructArrayLayout2ui4=Ai,t.StructArrayLayout3ui6=Ti,t.StructArrayLayout4i8=ci,t.SymbolBucket=Os,t.Texture=Js,t.Tile=Hl,t.Transitionable=Hn,t.Uniform1f=Xi,t.Uniform1i=Wi,t.Uniform2f=Zi,t.Uniform3f=Ji,t.Uniform4f=Ki,t.UniformColor=$i,t.UniformMatrix4f=ta,t.UnwrappedTileID=Ol,t.ValidationError=Dt,t.WritingMode=Yl,t.ZoomHistory=Sn,t.addDynamicAttributes=Cs,t.asyncAll=function(t,e,r){if(!t.length)return r(null,[]);var n=t.length,i=new Array(t.length),a=null;t.forEach(function(t,o){e(t,function(t,e){t&&(a=t),i[o]=e,0==--n&&r(a,i)})})},t.bezier=s,t.bindAll=v,t.browser=z,t.cacheEntryPossiblyAdded=function(t){++mt>dt&&(t.send(\\\"enforceCacheSizeLimit\\\",pt),mt=0)},t.clamp=c,t.clearTileCache=function(t){var e=self.caches.delete(ft);t&&e.catch(t).then(function(){return t()})},t.clone=function(t){var e=new Pa(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e},t.clone$1=b,t.config=I,t.create=function(){var t=new Pa(16);return Pa!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t},t.create$1=Oa,t.create$2=function(){var t=new Pa(4);return Pa!=Float32Array&&(t[1]=0,t[2]=0),t[0]=1,t[3]=1,t},t.createCommonjsModule=e,t.createExpression=Or,t.createLayout=oi,t.createStyleLayer=function(t){return\\\"custom\\\"===t.type?new js(t):new Us[t.type](t)},t.deepEqual=o,t.ease=l,t.emitValidationErrors=mn,t.endsWith=m,t.enforceCacheSizeLimit=function(t){self.caches&&self.caches.open(ft).then(function(e){e.keys().then(function(r){for(var n=0;n<r.length-t;n++)e.delete(r[n])})})},t.evaluateRadialOffset=wc,t.evaluateSizeForFeature=ks,t.evaluateSizeForZoom=Ts,t.evented=Nn,t.extend=h,t.featureFilter=Gr,t.filterObject=x,t.fromRotation=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=0,t[3]=-r,t[4]=n,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},t.getAnchorAlignment=ec,t.getAnchorJustification=kc,t.getArrayBuffer=Mt,t.getImage=Et,t.getJSON=function(t,e){return At(h(t,{type:\\\"json\\\"}),e)},t.getReferrer=_t,t.getVideo=function(t,e){var r,n,i=self.document.createElement(\\\"video\\\");i.muted=!0,i.onloadstart=function(){e(null,i)};for(var a=0;a<t.length;a++){var o=self.document.createElement(\\\"source\\\");r=t[a],n=void 0,(n=self.document.createElement(\\\"a\\\")).href=r,(n.protocol!==self.document.location.protocol||n.host!==self.document.location.host)&&(i.crossOrigin=\\\"Anonymous\\\"),o.src=t[a],i.appendChild(o)}return{cancel:function(){}}},t.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},t.invert=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],c=e[7],u=e[8],h=e[9],f=e[10],p=e[11],d=e[12],g=e[13],v=e[14],m=e[15],y=r*s-n*o,x=r*l-i*o,b=r*c-a*o,_=n*l-i*s,w=n*c-a*s,k=i*c-a*l,T=u*g-h*d,A=u*v-f*d,M=u*m-p*d,S=h*v-f*g,E=h*m-p*g,C=f*m-p*v,L=y*C-x*E+b*S+_*M-w*A+k*T;return L?(L=1/L,t[0]=(s*C-l*E+c*S)*L,t[1]=(i*E-n*C-a*S)*L,t[2]=(g*k-v*w+m*_)*L,t[3]=(f*w-h*k-p*_)*L,t[4]=(l*M-o*C-c*A)*L,t[5]=(r*C-i*M+a*A)*L,t[6]=(v*b-d*k-m*x)*L,t[7]=(u*k-f*b+p*x)*L,t[8]=(o*E-s*M+c*T)*L,t[9]=(n*M-r*E-a*T)*L,t[10]=(d*w-g*b+m*y)*L,t[11]=(h*b-u*w-p*y)*L,t[12]=(s*A-o*S-l*T)*L,t[13]=(r*S-n*A+i*T)*L,t[14]=(g*x-d*_-v*y)*L,t[15]=(u*_-h*x+f*y)*L,t):null},t.isChar=En,t.isMapboxURL=q,t.keysDifference=function(t,e){var r=[];for(var n in t)n in e||r.push(n);return r},t.makeRequest=At,t.mapObject=y,t.mercatorXfromLng=Ml,t.mercatorYfromLat=Sl,t.mercatorZfromAltitude=El,t.multiply=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],c=e[6],u=e[7],h=e[8],f=e[9],p=e[10],d=e[11],g=e[12],v=e[13],m=e[14],y=e[15],x=r[0],b=r[1],_=r[2],w=r[3];return t[0]=x*n+b*s+_*h+w*g,t[1]=x*i+b*l+_*f+w*v,t[2]=x*a+b*c+_*p+w*m,t[3]=x*o+b*u+_*d+w*y,x=r[4],b=r[5],_=r[6],w=r[7],t[4]=x*n+b*s+_*h+w*g,t[5]=x*i+b*l+_*f+w*v,t[6]=x*a+b*c+_*p+w*m,t[7]=x*o+b*u+_*d+w*y,x=r[8],b=r[9],_=r[10],w=r[11],t[8]=x*n+b*s+_*h+w*g,t[9]=x*i+b*l+_*f+w*v,t[10]=x*a+b*c+_*p+w*m,t[11]=x*o+b*u+_*d+w*y,x=r[12],b=r[13],_=r[14],w=r[15],t[12]=x*n+b*s+_*h+w*g,t[13]=x*i+b*l+_*f+w*v,t[14]=x*a+b*c+_*p+w*m,t[15]=x*o+b*u+_*d+w*y,t},t.mvt=Vo,t.number=Ee,t.ortho=function(t,e,r,n,i,a,o){var s=1/(e-r),l=1/(n-i),c=1/(a-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*c,t[11]=0,t[12]=(e+r)*s,t[13]=(i+n)*l,t[14]=(o+a)*c,t[15]=1,t},t.parseGlyphPBF=function(t){return new Qs(t).readFields(ml,[])},t.pbf=Qs,t.performSymbolLayout=function(t,e,r,n,i,a){t.createArrays();var o=512*t.overscaling;t.tilePixelRatio=ha/o,t.compareText={},t.iconsNeedLinear=!1;var s=t.layers[0].layout,l=t.layers[0]._unevaluatedLayout._values,c={};if(\\\"composite\\\"===t.textSizeData.kind){var u=t.textSizeData,h=u.minZoom,f=u.maxZoom;c.compositeTextSizes=[l[\\\"text-size\\\"].possiblyEvaluate(new Un(h)),l[\\\"text-size\\\"].possiblyEvaluate(new Un(f))]}if(\\\"composite\\\"===t.iconSizeData.kind){var p=t.iconSizeData,d=p.minZoom,g=p.maxZoom;c.compositeIconSizes=[l[\\\"icon-size\\\"].possiblyEvaluate(new Un(d)),l[\\\"icon-size\\\"].possiblyEvaluate(new Un(g))]}c.layoutTextSize=l[\\\"text-size\\\"].possiblyEvaluate(new Un(t.zoom+1)),c.layoutIconSize=l[\\\"icon-size\\\"].possiblyEvaluate(new Un(t.zoom+1)),c.textMaxSize=l[\\\"text-size\\\"].possiblyEvaluate(new Un(18));for(var v=s.get(\\\"text-line-height\\\")*Gl,m=\\\"map\\\"===s.get(\\\"text-rotation-alignment\\\")&&\\\"point\\\"!==s.get(\\\"symbol-placement\\\"),y=s.get(\\\"text-keep-upright\\\"),x=0,b=t.features;x<b.length;x+=1){var _=b[x],k=s.get(\\\"text-font\\\").evaluate(_,{}).join(\\\",\\\"),T=r,A={horizontal:{},vertical:void 0},M=_.text,S=[0,0];if(M){var E=M.toString(),C=s.get(\\\"text-letter-spacing\\\").evaluate(_,{})*Gl,L=Ln(E)?C:0,P=s.get(\\\"text-anchor\\\").evaluate(_,{}),O=s.get(\\\"text-variable-anchor\\\"),z=s.get(\\\"text-radial-offset\\\").evaluate(_,{});O||(S=z?wc(P,z*Gl):s.get(\\\"text-offset\\\").evaluate(_,{}).map(function(t){return t*Gl}));var I=m?\\\"center\\\":s.get(\\\"text-justify\\\").evaluate(_,{}),D=\\\"point\\\"===s.get(\\\"symbol-placement\\\")?s.get(\\\"text-max-width\\\").evaluate(_,{})*Gl:0;if(!m&&O)for(var R=\\\"auto\\\"===I?O.map(function(t){return kc(t)}):[I],F=!1,B=0;B<R.length;B++){var N=R[B];if(!A.horizontal[N])if(F)A.horizontal[N]=A.horizontal[0];else{var j=Xl(M,e,k,D,v,\\\"center\\\",N,L,S,Yl.horizontal);j&&(A.horizontal[N]=j,F=1===j.lineCount)}}else{\\\"auto\\\"===I&&(I=kc(P));var U=Xl(M,e,k,D,v,P,I,L,S,Yl.horizontal);U&&(A.horizontal[I]=U),Cn(E)&&m&&y&&(A.vertical=Xl(M,e,k,D,v,P,I,L,S,Yl.vertical))}}var V=void 0;if(_.icon){var q=n[_.icon];q&&(V=nc(i[_.icon],s.get(\\\"icon-offset\\\").evaluate(_,{}),s.get(\\\"icon-anchor\\\").evaluate(_,{})),void 0===t.sdfIcons?t.sdfIcons=q.sdf:t.sdfIcons!==q.sdf&&w(\\\"Style sheet warning: Cannot mix SDF and non-SDF icons in one buffer\\\"),q.pixelRatio!==t.pixelRatio?t.iconsNeedLinear=!0:0!==s.get(\\\"icon-rotate\\\").constantOr(1)&&(t.iconsNeedLinear=!0))}(Object.keys(A.horizontal).length||V)&&Tc(t,_,A,V,T,c,S)}a&&t.generateCollisionDebugBuffers()},t.perspective=function(t,e,r,n,i){var a,o=1/Math.tan(e/2);return t[0]=o/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=o,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,null!=i&&i!==1/0?(a=1/(n-i),t[10]=(i+n)*a,t[14]=2*i*n*a):(t[10]=-1,t[14]=-2*n),t},t.pick=function(t,e){for(var r={},n=0;n<e.length;n++){var i=e[n];i in t&&(r[i]=t[i])}return r},t.plugin=jn,t.polygonIntersectsPolygon=va,t.postMapLoadEvent=ht,t.postTurnstileEvent=ct,t.potpack=Vs,t.rasterBoundsAttributes=Rl,t.refProperties=[\\\"type\\\",\\\"source\\\",\\\"source-layer\\\",\\\"minzoom\\\",\\\"maxzoom\\\",\\\"filter\\\",\\\"layout\\\"],t.register=kn,t.registerForPluginAvailability=function(t){return Fn?t({pluginURL:Fn,completionCallback:Dn}):Nn.once(\\\"pluginAvailable\\\",t),t},t.rotate=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(r),l=Math.cos(r);return t[0]=n*l+a*s,t[1]=i*l+o*s,t[2]=n*-s+a*l,t[3]=i*-s+o*l,t},t.rotateX=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[4],o=e[5],s=e[6],l=e[7],c=e[8],u=e[9],h=e[10],f=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=a*i+c*n,t[5]=o*i+u*n,t[6]=s*i+h*n,t[7]=l*i+f*n,t[8]=c*i-a*n,t[9]=u*i-o*n,t[10]=h*i-s*n,t[11]=f*i-l*n,t},t.rotateZ=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],c=e[4],u=e[5],h=e[6],f=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i+c*n,t[1]=o*i+u*n,t[2]=s*i+h*n,t[3]=l*i+f*n,t[4]=c*i-a*n,t[5]=u*i-o*n,t[6]=h*i-s*n,t[7]=f*i-l*n,t},t.scale=function(t,e,r){var n=r[0],i=r[1],a=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*a,t[9]=e[9]*a,t[10]=e[10]*a,t[11]=e[11]*a,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t},t.setCacheLimits=function(t,e){pt=t,dt=e},t.setRTLTextPlugin=function(t,e){if(Rn)throw new Error(\\\"setRTLTextPlugin cannot be called multiple times.\\\");Rn=!0,Fn=z.resolveURL(t),Dn=function(t){t?(Rn=!1,Fn=null,e&&e(t)):Bn=!0},Nn.fire(new Pt(\\\"pluginAvailable\\\",{pluginURL:Fn,completionCallback:Dn}))},t.sphericalToCartesian=function(t){var e=t[0],r=t[1],n=t[2];return r+=90,r*=Math.PI/180,n*=Math.PI/180,{x:e*Math.cos(r)*Math.sin(n),y:e*Math.sin(r)*Math.sin(n),z:e*Math.cos(n)}},t.styleSpec=It,t.symbolSize=As,t.transformMat3=function(t,e,r){var n=e[0],i=e[1],a=e[2];return t[0]=n*r[0]+i*r[3]+a*r[6],t[1]=n*r[1]+i*r[4]+a*r[7],t[2]=n*r[2]+i*r[5]+a*r[8],t},t.transformMat4=Da,t.translate=function(t,e,r){var n,i,a,o,s,l,c,u,h,f,p,d,g=r[0],v=r[1],m=r[2];return e===t?(t[12]=e[0]*g+e[4]*v+e[8]*m+e[12],t[13]=e[1]*g+e[5]*v+e[9]*m+e[13],t[14]=e[2]*g+e[6]*v+e[10]*m+e[14],t[15]=e[3]*g+e[7]*v+e[11]*m+e[15]):(n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],c=e[6],u=e[7],h=e[8],f=e[9],p=e[10],d=e[11],t[0]=n,t[1]=i,t[2]=a,t[3]=o,t[4]=s,t[5]=l,t[6]=c,t[7]=u,t[8]=h,t[9]=f,t[10]=p,t[11]=d,t[12]=n*g+s*v+h*m+e[12],t[13]=i*g+l*v+f*m+e[13],t[14]=a*g+c*v+p*m+e[14],t[15]=o*g+u*v+d*m+e[15]),t},t.uniqueId=p,t.validateCustomStyleLayer=function(t){var e=[],r=t.id;return void 0===r&&e.push({message:\\\"layers.\\\"+r+': missing required property \\\"id\\\"'}),void 0===t.render&&e.push({message:\\\"layers.\\\"+r+': missing required method \\\"render\\\"'}),t.renderingMode&&\\\"2d\\\"!==t.renderingMode&&\\\"3d\\\"!==t.renderingMode&&e.push({message:\\\"layers.\\\"+r+': property \\\"renderingMode\\\" must be either \\\"2d\\\" or \\\"3d\\\"'}),e},t.validateLight=dn,t.validateStyle=pn,t.values=function(t){var e=[];for(var r in t)e.push(t[r]);return e},t.vectorTile=Vo,t.version=\\\"1.1.1\\\",t.warnOnce=w,t.webpSupported=D,t.window=self,t.wrap=u}),n(0,function(t){function e(t){var r=typeof t;if(\\\"number\\\"===r||\\\"boolean\\\"===r||\\\"string\\\"===r||null==t)return JSON.stringify(t);if(Array.isArray(t)){for(var n=\\\"[\\\",i=0,a=t;i<a.length;i+=1)n+=e(a[i])+\\\",\\\";return n+\\\"]\\\"}for(var o=Object.keys(t).sort(),s=\\\"{\\\",l=0;l<o.length;l++)s+=JSON.stringify(o[l])+\\\":\\\"+e(t[o[l]])+\\\",\\\";return s+\\\"}\\\"}function r(r){for(var n=\\\"\\\",i=0,a=t.refProperties;i<a.length;i+=1)n+=\\\"/\\\"+e(r[a[i]]);return n}var n=function(t){this.keyCache={},t&&this.replace(t)};n.prototype.replace=function(t){this._layerConfigs={},this._layers={},this.update(t,[])},n.prototype.update=function(e,n){for(var i=this,a=0,o=e;a<o.length;a+=1){var s=o[a];this._layerConfigs[s.id]=s;var l=this._layers[s.id]=t.createStyleLayer(s);l._featureFilter=t.featureFilter(l.filter),this.keyCache[s.id]&&delete this.keyCache[s.id]}for(var c=0,u=n;c<u.length;c+=1){var h=u[c];delete this.keyCache[h],delete this._layerConfigs[h],delete this._layers[h]}this.familiesBySource={};for(var f=0,p=function(t,e){for(var n={},i=0;i<t.length;i++){var a=e&&e[t[i].id]||r(t[i]);e&&(e[t[i].id]=a);var o=n[a];o||(o=n[a]=[]),o.push(t[i])}var s=[];for(var l in n)s.push(n[l]);return s}(t.values(this._layerConfigs),this.keyCache);f<p.length;f+=1){var d=p[f].map(function(t){return i._layers[t.id]}),g=d[0];if(\\\"none\\\"!==g.visibility){var v=g.source||\\\"\\\",m=this.familiesBySource[v];m||(m=this.familiesBySource[v]={});var y=g.sourceLayer||\\\"_geojsonTileLayer\\\",x=m[y];x||(x=m[y]=[]),x.push(d)}}};var i=function(e){var r={},n=[];for(var i in e){var a=e[i],o=r[i]={};for(var s in a){var l=a[+s];if(l&&0!==l.bitmap.width&&0!==l.bitmap.height){var c={x:0,y:0,w:l.bitmap.width+2,h:l.bitmap.height+2};n.push(c),o[s]={rect:c,metrics:l.metrics}}}}var u=t.potpack(n),h=u.w,f=u.h,p=new t.AlphaImage({width:h||1,height:f||1});for(var d in e){var g=e[d];for(var v in g){var m=g[+v];if(m&&0!==m.bitmap.width&&0!==m.bitmap.height){var y=r[d][v].rect;t.AlphaImage.copy(m.bitmap,p,{x:0,y:0},{x:y.x+1,y:y.y+1},m.bitmap)}}}this.image=p,this.positions=r};t.register(\\\"GlyphAtlas\\\",i);var a=function(e){this.tileID=new t.OverscaledTileID(e.tileID.overscaledZ,e.tileID.wrap,e.tileID.canonical.z,e.tileID.canonical.x,e.tileID.canonical.y),this.uid=e.uid,this.zoom=e.zoom,this.pixelRatio=e.pixelRatio,this.tileSize=e.tileSize,this.source=e.source,this.overscaling=this.tileID.overscaleFactor(),this.showCollisionBoxes=e.showCollisionBoxes,this.collectResourceTiming=!!e.collectResourceTiming,this.returnDependencies=!!e.returnDependencies};function o(e,r){for(var n=new t.EvaluationParameters(r),i=0,a=e;i<a.length;i+=1)a[i].recalculate(n)}a.prototype.parse=function(e,r,n,a){var s=this;this.status=\\\"parsing\\\",this.data=e,this.collisionBoxArray=new t.CollisionBoxArray;var l=new t.DictionaryCoder(Object.keys(e.layers).sort()),c=new t.FeatureIndex(this.tileID);c.bucketLayerIDs=[];var u,h,f,p,d={},g={featureIndex:c,iconDependencies:{},patternDependencies:{},glyphDependencies:{}},v=r.familiesBySource[this.source];for(var m in v){var y=e.layers[m];if(y){1===y.version&&t.warnOnce('Vector tile source \\\"'+this.source+'\\\" layer \\\"'+m+'\\\" does not use vector tile spec v2 and therefore may have some rendering errors.');for(var x=l.encode(m),b=[],_=0;_<y.length;_++){var w=y.feature(_);b.push({feature:w,index:_,sourceLayerIndex:x})}for(var k=0,T=v[m];k<T.length;k+=1){var A=T[k],M=A[0];M.minzoom&&this.zoom<Math.floor(M.minzoom)||M.maxzoom&&this.zoom>=M.maxzoom||\\\"none\\\"!==M.visibility&&(o(A,this.zoom),(d[M.id]=M.createBucket({index:c.bucketLayerIDs.length,layers:A,zoom:this.zoom,pixelRatio:this.pixelRatio,overscaling:this.overscaling,collisionBoxArray:this.collisionBoxArray,sourceLayerIndex:x,sourceID:this.source})).populate(b,g),c.bucketLayerIDs.push(A.map(function(t){return t.id})))}}}var S=t.mapObject(g.glyphDependencies,function(t){return Object.keys(t).map(Number)});Object.keys(S).length?n.send(\\\"getGlyphs\\\",{uid:this.uid,stacks:S},function(t,e){u||(u=t,h=e,L.call(s))}):h={};var E=Object.keys(g.iconDependencies);E.length?n.send(\\\"getImages\\\",{icons:E},function(t,e){u||(u=t,f=e,L.call(s))}):f={};var C=Object.keys(g.patternDependencies);function L(){if(u)return a(u);if(h&&f&&p){var e=new i(h),r=new t.ImageAtlas(f,p);for(var n in d){var s=d[n];s instanceof t.SymbolBucket?(o(s.layers,this.zoom),t.performSymbolLayout(s,h,e.positions,f,r.iconPositions,this.showCollisionBoxes)):s.hasPattern&&(s instanceof t.LineBucket||s instanceof t.FillBucket||s instanceof t.FillExtrusionBucket)&&(o(s.layers,this.zoom),s.addFeatures(g,r.patternPositions))}this.status=\\\"done\\\",a(null,{buckets:t.values(d).filter(function(t){return!t.isEmpty()}),featureIndex:c,collisionBoxArray:this.collisionBoxArray,glyphAtlasImage:e.image,imageAtlas:r,glyphMap:this.returnDependencies?h:null,iconMap:this.returnDependencies?f:null,glyphPositions:this.returnDependencies?e.positions:null})}}C.length?n.send(\\\"getImages\\\",{icons:C},function(t,e){u||(u=t,p=e,L.call(s))}):p={},L.call(this)};var s=\\\"undefined\\\"!=typeof performance,l={getEntriesByName:function(t){return!!(s&&performance&&performance.getEntriesByName)&&performance.getEntriesByName(t)},mark:function(t){return!!(s&&performance&&performance.mark)&&performance.mark(t)},measure:function(t,e,r){return!!(s&&performance&&performance.measure)&&performance.measure(t,e,r)},clearMarks:function(t){return!!(s&&performance&&performance.clearMarks)&&performance.clearMarks(t)},clearMeasures:function(t){return!!(s&&performance&&performance.clearMeasures)&&performance.clearMeasures(t)}},c=function(t){this._marks={start:[t.url,\\\"start\\\"].join(\\\"#\\\"),end:[t.url,\\\"end\\\"].join(\\\"#\\\"),measure:t.url.toString()},l.mark(this._marks.start)};function u(e,r){var n=t.getArrayBuffer(e.request,function(e,n,i,a){e?r(e):n&&r(null,{vectorTile:new t.vectorTile.VectorTile(new t.pbf(n)),rawData:n,cacheControl:i,expires:a})});return function(){n.cancel(),r()}}c.prototype.finish=function(){l.mark(this._marks.end);var t=l.getEntriesByName(this._marks.measure);return 0===t.length&&(l.measure(this._marks.measure,this._marks.start,this._marks.end),t=l.getEntriesByName(this._marks.measure),l.clearMarks(this._marks.start),l.clearMarks(this._marks.end),l.clearMeasures(this._marks.measure)),t},l.Performance=c;var h=function(t,e,r){this.actor=t,this.layerIndex=e,this.loadVectorData=r||u,this.loading={},this.loaded={}};h.prototype.loadTile=function(e,r){var n=this,i=e.uid;this.loading||(this.loading={});var o=!!(e&&e.request&&e.request.collectResourceTiming)&&new l.Performance(e.request),s=this.loading[i]=new a(e);s.abort=this.loadVectorData(e,function(e,a){if(delete n.loading[i],e||!a)return s.status=\\\"done\\\",n.loaded[i]=s,r(e);var l=a.rawData,c={};a.expires&&(c.expires=a.expires),a.cacheControl&&(c.cacheControl=a.cacheControl);var u={};if(o){var h=o.finish();h&&(u.resourceTiming=JSON.parse(JSON.stringify(h)))}s.vectorTile=a.vectorTile,s.parse(a.vectorTile,n.layerIndex,n.actor,function(e,n){if(e||!n)return r(e);r(null,t.extend({rawTileData:l.slice(0)},n,c,u))}),n.loaded=n.loaded||{},n.loaded[i]=s})},h.prototype.reloadTile=function(t,e){var r=this.loaded,n=t.uid,i=this;if(r&&r[n]){var a=r[n];a.showCollisionBoxes=t.showCollisionBoxes;var o=function(t,r){var n=a.reloadCallback;n&&(delete a.reloadCallback,a.parse(a.vectorTile,i.layerIndex,i.actor,n)),e(t,r)};\\\"parsing\\\"===a.status?a.reloadCallback=o:\\\"done\\\"===a.status&&(a.vectorTile?a.parse(a.vectorTile,this.layerIndex,this.actor,o):o())}},h.prototype.abortTile=function(t,e){var r=this.loading,n=t.uid;r&&r[n]&&r[n].abort&&(r[n].abort(),delete r[n]),e()},h.prototype.removeTile=function(t,e){var r=this.loaded,n=t.uid;r&&r[n]&&delete r[n],e()};var f=function(){this.loaded={}};f.prototype.loadTile=function(e,r){var n=e.uid,i=e.encoding,a=e.rawImageData,o=new t.DEMData(n,a,i);this.loaded=this.loaded||{},this.loaded[n]=o,r(null,o)},f.prototype.removeTile=function(t){var e=this.loaded,r=t.uid;e&&e[r]&&delete e[r]};var p={RADIUS:6378137,FLATTENING:1/298.257223563,POLAR_RADIUS:6356752.3142};function d(t){var e=0;if(t&&t.length>0){e+=Math.abs(g(t[0]));for(var r=1;r<t.length;r++)e-=Math.abs(g(t[r]))}return e}function g(t){var e,r,n,i,a,o,s=0,l=t.length;if(l>2){for(o=0;o<l;o++)o===l-2?(n=l-2,i=l-1,a=0):o===l-1?(n=l-1,i=0,a=1):(n=o,i=o+1,a=o+2),e=t[n],r=t[i],s+=(v(t[a][0])-v(e[0]))*Math.sin(v(r[1]));s=s*p.RADIUS*p.RADIUS/2}return s}function v(t){return t*Math.PI/180}var m={geometry:function t(e){var r,n=0;switch(e.type){case\\\"Polygon\\\":return d(e.coordinates);case\\\"MultiPolygon\\\":for(r=0;r<e.coordinates.length;r++)n+=d(e.coordinates[r]);return n;case\\\"Point\\\":case\\\"MultiPoint\\\":case\\\"LineString\\\":case\\\"MultiLineString\\\":return 0;case\\\"GeometryCollection\\\":for(r=0;r<e.geometries.length;r++)n+=t(e.geometries[r]);return n}},ring:g};function y(t,e){return function(r){return t(r,e)}}function x(t,e){e=!!e,t[0]=b(t[0],e);for(var r=1;r<t.length;r++)t[r]=b(t[r],!e);return t}function b(t,e){return function(t){return m.ring(t)>=0}(t)===e?t:t.reverse()}var _=t.vectorTile.VectorTileFeature.prototype.toGeoJSON,w=function(e){this._feature=e,this.extent=t.EXTENT,this.type=e.type,this.properties=e.tags,\\\"id\\\"in e&&!isNaN(e.id)&&(this.id=parseInt(e.id,10))};w.prototype.loadGeometry=function(){if(1===this._feature.type){for(var e=[],r=0,n=this._feature.geometry;r<n.length;r+=1){var i=n[r];e.push([new t.Point$1(i[0],i[1])])}return e}for(var a=[],o=0,s=this._feature.geometry;o<s.length;o+=1){for(var l=[],c=0,u=s[o];c<u.length;c+=1){var h=u[c];l.push(new t.Point$1(h[0],h[1]))}a.push(l)}return a},w.prototype.toGeoJSON=function(t,e,r){return _.call(this,t,e,r)};var k=function(e){this.layers={_geojsonTileLayer:this},this.name=\\\"_geojsonTileLayer\\\",this.extent=t.EXTENT,this.length=e.length,this._features=e};k.prototype.feature=function(t){return new w(this._features[t])};var T=t.vectorTile.VectorTileFeature,A=M;function M(t,e){this.options=e||{},this.features=t,this.length=t.length}function S(t,e){this.id=\\\"number\\\"==typeof t.id?t.id:void 0,this.type=t.type,this.rawGeometry=1===t.type?[t.geometry]:t.geometry,this.properties=t.tags,this.extent=e||4096}M.prototype.feature=function(t){return new S(this.features[t],this.options.extent)},S.prototype.loadGeometry=function(){var e=this.rawGeometry;this.geometry=[];for(var r=0;r<e.length;r++){for(var n=e[r],i=[],a=0;a<n.length;a++)i.push(new t.Point$1(n[a][0],n[a][1]));this.geometry.push(i)}return this.geometry},S.prototype.bbox=function(){this.geometry||this.loadGeometry();for(var t=this.geometry,e=1/0,r=-1/0,n=1/0,i=-1/0,a=0;a<t.length;a++)for(var o=t[a],s=0;s<o.length;s++){var l=o[s];e=Math.min(e,l.x),r=Math.max(r,l.x),n=Math.min(n,l.y),i=Math.max(i,l.y)}return[e,n,r,i]},S.prototype.toGeoJSON=T.prototype.toGeoJSON;var E=P,C=P,L=A;function P(e){var r=new t.pbf;return function(t,e){for(var r in t.layers)e.writeMessage(3,O,t.layers[r])}(e,r),r.finish()}function O(t,e){var r;e.writeVarintField(15,t.version||1),e.writeStringField(1,t.name||\\\"\\\"),e.writeVarintField(5,t.extent||4096);var n={keys:[],values:[],keycache:{},valuecache:{}};for(r=0;r<t.length;r++)n.feature=t.feature(r),e.writeMessage(2,z,n);var i=n.keys;for(r=0;r<i.length;r++)e.writeStringField(3,i[r]);var a=n.values;for(r=0;r<a.length;r++)e.writeMessage(4,B,a[r])}function z(t,e){var r=t.feature;void 0!==r.id&&e.writeVarintField(1,r.id),e.writeMessage(2,I,t),e.writeVarintField(3,r.type),e.writeMessage(4,F,r)}function I(t,e){var r=t.feature,n=t.keys,i=t.values,a=t.keycache,o=t.valuecache;for(var s in r.properties){var l=a[s];void 0===l&&(n.push(s),l=n.length-1,a[s]=l),e.writeVarint(l);var c=r.properties[s],u=typeof c;\\\"string\\\"!==u&&\\\"boolean\\\"!==u&&\\\"number\\\"!==u&&(c=JSON.stringify(c));var h=u+\\\":\\\"+c,f=o[h];void 0===f&&(i.push(c),f=i.length-1,o[h]=f),e.writeVarint(f)}}function D(t,e){return(e<<3)+(7&t)}function R(t){return t<<1^t>>31}function F(t,e){for(var r=t.loadGeometry(),n=t.type,i=0,a=0,o=r.length,s=0;s<o;s++){var l=r[s],c=1;1===n&&(c=l.length),e.writeVarint(D(1,c));for(var u=3===n?l.length-1:l.length,h=0;h<u;h++){1===h&&1!==n&&e.writeVarint(D(2,u-1));var f=l[h].x-i,p=l[h].y-a;e.writeVarint(R(f)),e.writeVarint(R(p)),i+=f,a+=p}3===n&&e.writeVarint(D(7,1))}}function B(t,e){var r=typeof t;\\\"string\\\"===r?e.writeStringField(1,t):\\\"boolean\\\"===r?e.writeBooleanField(7,t):\\\"number\\\"===r&&(t%1!=0?e.writeDoubleField(3,t):t<0?e.writeSVarintField(6,t):e.writeVarintField(5,t))}function N(t,e,r,n){j(t,r,n),j(e,2*r,2*n),j(e,2*r+1,2*n+1)}function j(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function U(t,e,r,n){var i=t-r,a=e-n;return i*i+a*a}E.fromVectorTileJs=C,E.fromGeojsonVt=function(t,e){e=e||{};var r={};for(var n in t)r[n]=new A(t[n].features,e),r[n].name=n,r[n].version=e.version,r[n].extent=e.extent;return P({layers:r})},E.GeoJSONWrapper=L;var V=function(t){return t[0]},q=function(t){return t[1]},H=function(t,e,r,n,i){void 0===e&&(e=V),void 0===r&&(r=q),void 0===n&&(n=64),void 0===i&&(i=Float64Array),this.nodeSize=n,this.points=t;for(var a=t.length<65536?Uint16Array:Uint32Array,o=this.ids=new a(t.length),s=this.coords=new i(2*t.length),l=0;l<t.length;l++)o[l]=l,s[2*l]=e(t[l]),s[2*l+1]=r(t[l]);!function t(e,r,n,i,a,o){if(!(a-i<=n)){var s=i+a>>1;!function t(e,r,n,i,a,o){for(;a>i;){if(a-i>600){var s=a-i+1,l=n-i+1,c=Math.log(s),u=.5*Math.exp(2*c/3),h=.5*Math.sqrt(c*u*(s-u)/s)*(l-s/2<0?-1:1);t(e,r,n,Math.max(i,Math.floor(n-l*u/s+h)),Math.min(a,Math.floor(n+(s-l)*u/s+h)),o)}var f=r[2*n+o],p=i,d=a;for(N(e,r,i,n),r[2*a+o]>f&&N(e,r,i,a);p<d;){for(N(e,r,p,d),p++,d--;r[2*p+o]<f;)p++;for(;r[2*d+o]>f;)d--}r[2*i+o]===f?N(e,r,i,d):N(e,r,++d,a),d<=n&&(i=d+1),n<=d&&(a=d-1)}}(e,r,s,i,a,o%2),t(e,r,n,i,s-1,o+1),t(e,r,n,s+1,a,o+1)}}(o,s,n,0,o.length-1,0)};H.prototype.range=function(t,e,r,n){return function(t,e,r,n,i,a,o){for(var s,l,c=[0,t.length-1,0],u=[];c.length;){var h=c.pop(),f=c.pop(),p=c.pop();if(f-p<=o)for(var d=p;d<=f;d++)s=e[2*d],l=e[2*d+1],s>=r&&s<=i&&l>=n&&l<=a&&u.push(t[d]);else{var g=Math.floor((p+f)/2);s=e[2*g],l=e[2*g+1],s>=r&&s<=i&&l>=n&&l<=a&&u.push(t[g]);var v=(h+1)%2;(0===h?r<=s:n<=l)&&(c.push(p),c.push(g-1),c.push(v)),(0===h?i>=s:a>=l)&&(c.push(g+1),c.push(f),c.push(v))}}return u}(this.ids,this.coords,t,e,r,n,this.nodeSize)},H.prototype.within=function(t,e,r){return function(t,e,r,n,i,a){for(var o=[0,t.length-1,0],s=[],l=i*i;o.length;){var c=o.pop(),u=o.pop(),h=o.pop();if(u-h<=a)for(var f=h;f<=u;f++)U(e[2*f],e[2*f+1],r,n)<=l&&s.push(t[f]);else{var p=Math.floor((h+u)/2),d=e[2*p],g=e[2*p+1];U(d,g,r,n)<=l&&s.push(t[p]);var v=(c+1)%2;(0===c?r-i<=d:n-i<=g)&&(o.push(h),o.push(p-1),o.push(v)),(0===c?r+i>=d:n+i>=g)&&(o.push(p+1),o.push(u),o.push(v))}}return s}(this.ids,this.coords,t,e,r,this.nodeSize)};var G={minZoom:0,maxZoom:16,radius:40,extent:512,nodeSize:64,log:!1,reduce:null,map:function(t){return t}},Y=function(t){this.options=Q(Object.create(G),t),this.trees=new Array(this.options.maxZoom+1)};function W(t,e,r,n,i){return{x:t,y:e,zoom:1/0,id:r,parentId:-1,numPoints:n,properties:i}}function X(t,e){var r=t.geometry.coordinates,n=r[0],i=r[1];return{x:K(n),y:$(i),zoom:1/0,index:e,parentId:-1}}function Z(t){return{type:\\\"Feature\\\",id:t.id,properties:J(t),geometry:{type:\\\"Point\\\",coordinates:[(n=t.x,360*(n-.5)),(e=t.y,r=(180-360*e)*Math.PI/180,360*Math.atan(Math.exp(r))/Math.PI-90)]}};var e,r,n}function J(t){var e=t.numPoints,r=e>=1e4?Math.round(e/1e3)+\\\"k\\\":e>=1e3?Math.round(e/100)/10+\\\"k\\\":e;return Q(Q({},t.properties),{cluster:!0,cluster_id:t.id,point_count:e,point_count_abbreviated:r})}function K(t){return t/360+.5}function $(t){var e=Math.sin(t*Math.PI/180),r=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return r<0?0:r>1?1:r}function Q(t,e){for(var r in e)t[r]=e[r];return t}function tt(t){return t.x}function et(t){return t.y}function rt(t,e,r,n,i,a){var o=i-r,s=a-n;if(0!==o||0!==s){var l=((t-r)*o+(e-n)*s)/(o*o+s*s);l>1?(r=i,n=a):l>0&&(r+=o*l,n+=s*l)}return(o=t-r)*o+(s=e-n)*s}function nt(t,e,r,n){var i={id:void 0===t?null:t,type:e,geometry:r,tags:n,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};return function(t){var e=t.geometry,r=t.type;if(\\\"Point\\\"===r||\\\"MultiPoint\\\"===r||\\\"LineString\\\"===r)it(t,e);else if(\\\"Polygon\\\"===r||\\\"MultiLineString\\\"===r)for(var n=0;n<e.length;n++)it(t,e[n]);else if(\\\"MultiPolygon\\\"===r)for(n=0;n<e.length;n++)for(var i=0;i<e[n].length;i++)it(t,e[n][i])}(i),i}function it(t,e){for(var r=0;r<e.length;r+=3)t.minX=Math.min(t.minX,e[r]),t.minY=Math.min(t.minY,e[r+1]),t.maxX=Math.max(t.maxX,e[r]),t.maxY=Math.max(t.maxY,e[r+1])}function at(t,e,r,n){if(e.geometry){var i=e.geometry.coordinates,a=e.geometry.type,o=Math.pow(r.tolerance/((1<<r.maxZoom)*r.extent),2),s=[],l=e.id;if(r.promoteId?l=e.properties[r.promoteId]:r.generateId&&(l=n||0),\\\"Point\\\"===a)ot(i,s);else if(\\\"MultiPoint\\\"===a)for(var c=0;c<i.length;c++)ot(i[c],s);else if(\\\"LineString\\\"===a)st(i,s,o,!1);else if(\\\"MultiLineString\\\"===a){if(r.lineMetrics){for(c=0;c<i.length;c++)s=[],st(i[c],s,o,!1),t.push(nt(l,\\\"LineString\\\",s,e.properties));return}lt(i,s,o,!1)}else if(\\\"Polygon\\\"===a)lt(i,s,o,!0);else{if(\\\"MultiPolygon\\\"!==a){if(\\\"GeometryCollection\\\"===a){for(c=0;c<e.geometry.geometries.length;c++)at(t,{id:l,geometry:e.geometry.geometries[c],properties:e.properties},r,n);return}throw new Error(\\\"Input data is not a valid GeoJSON object.\\\")}for(c=0;c<i.length;c++){var u=[];lt(i[c],u,o,!0),s.push(u)}}t.push(nt(l,a,s,e.properties))}}function ot(t,e){e.push(ct(t[0])),e.push(ut(t[1])),e.push(0)}function st(t,e,r,n){for(var i,a,o=0,s=0;s<t.length;s++){var l=ct(t[s][0]),c=ut(t[s][1]);e.push(l),e.push(c),e.push(0),s>0&&(o+=n?(i*c-l*a)/2:Math.sqrt(Math.pow(l-i,2)+Math.pow(c-a,2))),i=l,a=c}var u=e.length-3;e[2]=1,function t(e,r,n,i){for(var a,o=i,s=n-r>>1,l=n-r,c=e[r],u=e[r+1],h=e[n],f=e[n+1],p=r+3;p<n;p+=3){var d=rt(e[p],e[p+1],c,u,h,f);if(d>o)a=p,o=d;else if(d===o){var g=Math.abs(p-s);g<l&&(a=p,l=g)}}o>i&&(a-r>3&&t(e,r,a,i),e[a+2]=o,n-a>3&&t(e,a,n,i))}(e,0,u,r),e[u+2]=1,e.size=Math.abs(o),e.start=0,e.end=e.size}function lt(t,e,r,n){for(var i=0;i<t.length;i++){var a=[];st(t[i],a,r,n),e.push(a)}}function ct(t){return t/360+.5}function ut(t){var e=Math.sin(t*Math.PI/180),r=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return r<0?0:r>1?1:r}function ht(t,e,r,n,i,a,o,s){if(n/=e,a>=(r/=e)&&o<n)return t;if(o<r||a>=n)return null;for(var l=[],c=0;c<t.length;c++){var u=t[c],h=u.geometry,f=u.type,p=0===i?u.minX:u.minY,d=0===i?u.maxX:u.maxY;if(p>=r&&d<n)l.push(u);else if(!(d<r||p>=n)){var g=[];if(\\\"Point\\\"===f||\\\"MultiPoint\\\"===f)ft(h,g,r,n,i);else if(\\\"LineString\\\"===f)pt(h,g,r,n,i,!1,s.lineMetrics);else if(\\\"MultiLineString\\\"===f)gt(h,g,r,n,i,!1);else if(\\\"Polygon\\\"===f)gt(h,g,r,n,i,!0);else if(\\\"MultiPolygon\\\"===f)for(var v=0;v<h.length;v++){var m=[];gt(h[v],m,r,n,i,!0),m.length&&g.push(m)}if(g.length){if(s.lineMetrics&&\\\"LineString\\\"===f){for(v=0;v<g.length;v++)l.push(nt(u.id,f,g[v],u.tags));continue}\\\"LineString\\\"!==f&&\\\"MultiLineString\\\"!==f||(1===g.length?(f=\\\"LineString\\\",g=g[0]):f=\\\"MultiLineString\\\"),\\\"Point\\\"!==f&&\\\"MultiPoint\\\"!==f||(f=3===g.length?\\\"Point\\\":\\\"MultiPoint\\\"),l.push(nt(u.id,f,g,u.tags))}}}return l.length?l:null}function ft(t,e,r,n,i){for(var a=0;a<t.length;a+=3){var o=t[a+i];o>=r&&o<=n&&(e.push(t[a]),e.push(t[a+1]),e.push(t[a+2]))}}function pt(t,e,r,n,i,a,o){for(var s,l,c=dt(t),u=0===i?mt:yt,h=t.start,f=0;f<t.length-3;f+=3){var p=t[f],d=t[f+1],g=t[f+2],v=t[f+3],m=t[f+4],y=0===i?p:d,x=0===i?v:m,b=!1;o&&(s=Math.sqrt(Math.pow(p-v,2)+Math.pow(d-m,2))),y<r?x>r&&(l=u(c,p,d,v,m,r),o&&(c.start=h+s*l)):y>n?x<n&&(l=u(c,p,d,v,m,n),o&&(c.start=h+s*l)):vt(c,p,d,g),x<r&&y>=r&&(l=u(c,p,d,v,m,r),b=!0),x>n&&y<=n&&(l=u(c,p,d,v,m,n),b=!0),!a&&b&&(o&&(c.end=h+s*l),e.push(c),c=dt(t)),o&&(h+=s)}var _=t.length-3;p=t[_],d=t[_+1],g=t[_+2],(y=0===i?p:d)>=r&&y<=n&&vt(c,p,d,g),_=c.length-3,a&&_>=3&&(c[_]!==c[0]||c[_+1]!==c[1])&&vt(c,c[0],c[1],c[2]),c.length&&e.push(c)}function dt(t){var e=[];return e.size=t.size,e.start=t.start,e.end=t.end,e}function gt(t,e,r,n,i,a){for(var o=0;o<t.length;o++)pt(t[o],e,r,n,i,a,!1)}function vt(t,e,r,n){t.push(e),t.push(r),t.push(n)}function mt(t,e,r,n,i,a){var o=(a-e)/(n-e);return t.push(a),t.push(r+(i-r)*o),t.push(1),o}function yt(t,e,r,n,i,a){var o=(a-r)/(i-r);return t.push(e+(n-e)*o),t.push(a),t.push(1),o}function xt(t,e){for(var r=[],n=0;n<t.length;n++){var i,a=t[n],o=a.type;if(\\\"Point\\\"===o||\\\"MultiPoint\\\"===o||\\\"LineString\\\"===o)i=bt(a.geometry,e);else if(\\\"MultiLineString\\\"===o||\\\"Polygon\\\"===o){i=[];for(var s=0;s<a.geometry.length;s++)i.push(bt(a.geometry[s],e))}else if(\\\"MultiPolygon\\\"===o)for(i=[],s=0;s<a.geometry.length;s++){for(var l=[],c=0;c<a.geometry[s].length;c++)l.push(bt(a.geometry[s][c],e));i.push(l)}r.push(nt(a.id,o,i,a.tags))}return r}function bt(t,e){var r=[];r.size=t.size,void 0!==t.start&&(r.start=t.start,r.end=t.end);for(var n=0;n<t.length;n+=3)r.push(t[n]+e,t[n+1],t[n+2]);return r}function _t(t,e){if(t.transformed)return t;var r,n,i,a=1<<t.z,o=t.x,s=t.y;for(r=0;r<t.features.length;r++){var l=t.features[r],c=l.geometry,u=l.type;if(l.geometry=[],1===u)for(n=0;n<c.length;n+=2)l.geometry.push(wt(c[n],c[n+1],e,a,o,s));else for(n=0;n<c.length;n++){var h=[];for(i=0;i<c[n].length;i+=2)h.push(wt(c[n][i],c[n][i+1],e,a,o,s));l.geometry.push(h)}}return t.transformed=!0,t}function wt(t,e,r,n,i,a){return[Math.round(r*(t*n-i)),Math.round(r*(e*n-a))]}function kt(t,e,r,n,i){for(var a=e===i.maxZoom?0:i.tolerance/((1<<e)*i.extent),o={features:[],numPoints:0,numSimplified:0,numFeatures:0,source:null,x:r,y:n,z:e,transformed:!1,minX:2,minY:1,maxX:-1,maxY:0},s=0;s<t.length;s++){o.numFeatures++,Tt(o,t[s],a,i);var l=t[s].minX,c=t[s].minY,u=t[s].maxX,h=t[s].maxY;l<o.minX&&(o.minX=l),c<o.minY&&(o.minY=c),u>o.maxX&&(o.maxX=u),h>o.maxY&&(o.maxY=h)}return o}function Tt(t,e,r,n){var i=e.geometry,a=e.type,o=[];if(\\\"Point\\\"===a||\\\"MultiPoint\\\"===a)for(var s=0;s<i.length;s+=3)o.push(i[s]),o.push(i[s+1]),t.numPoints++,t.numSimplified++;else if(\\\"LineString\\\"===a)At(o,i,t,r,!1,!1);else if(\\\"MultiLineString\\\"===a||\\\"Polygon\\\"===a)for(s=0;s<i.length;s++)At(o,i[s],t,r,\\\"Polygon\\\"===a,0===s);else if(\\\"MultiPolygon\\\"===a)for(var l=0;l<i.length;l++){var c=i[l];for(s=0;s<c.length;s++)At(o,c[s],t,r,!0,0===s)}if(o.length){var u=e.tags||null;if(\\\"LineString\\\"===a&&n.lineMetrics){for(var h in u={},e.tags)u[h]=e.tags[h];u.mapbox_clip_start=i.start/i.size,u.mapbox_clip_end=i.end/i.size}var f={geometry:o,type:\\\"Polygon\\\"===a||\\\"MultiPolygon\\\"===a?3:\\\"LineString\\\"===a||\\\"MultiLineString\\\"===a?2:1,tags:u};null!==e.id&&(f.id=e.id),t.features.push(f)}}function At(t,e,r,n,i,a){var o=n*n;if(n>0&&e.size<(i?o:n))r.numPoints+=e.length/3;else{for(var s=[],l=0;l<e.length;l+=3)(0===n||e[l+2]>o)&&(r.numSimplified++,s.push(e[l]),s.push(e[l+1])),r.numPoints++;i&&function(t,e){for(var r=0,n=0,i=t.length,a=i-2;n<i;a=n,n+=2)r+=(t[n]-t[a])*(t[n+1]+t[a+1]);if(r>0===e)for(n=0,i=t.length;n<i/2;n+=2){var o=t[n],s=t[n+1];t[n]=t[i-2-n],t[n+1]=t[i-1-n],t[i-2-n]=o,t[i-1-n]=s}}(s,a),t.push(s)}}function Mt(t,e){var r=(e=this.options=function(t,e){for(var r in e)t[r]=e[r];return t}(Object.create(this.options),e)).debug;if(r&&console.time(\\\"preprocess data\\\"),e.maxZoom<0||e.maxZoom>24)throw new Error(\\\"maxZoom should be in the 0-24 range\\\");if(e.promoteId&&e.generateId)throw new Error(\\\"promoteId and generateId cannot be used together.\\\");var n=function(t,e){var r=[];if(\\\"FeatureCollection\\\"===t.type)for(var n=0;n<t.features.length;n++)at(r,t.features[n],e,n);else\\\"Feature\\\"===t.type?at(r,t,e):at(r,{geometry:t},e);return r}(t,e);this.tiles={},this.tileCoords=[],r&&(console.timeEnd(\\\"preprocess data\\\"),console.log(\\\"index: maxZoom: %d, maxPoints: %d\\\",e.indexMaxZoom,e.indexMaxPoints),console.time(\\\"generate tiles\\\"),this.stats={},this.total=0),(n=function(t,e){var r=e.buffer/e.extent,n=t,i=ht(t,1,-1-r,r,0,-1,2,e),a=ht(t,1,1-r,2+r,0,-1,2,e);return(i||a)&&(n=ht(t,1,-r,1+r,0,-1,2,e)||[],i&&(n=xt(i,1).concat(n)),a&&(n=n.concat(xt(a,-1)))),n}(n,e)).length&&this.splitTile(n,0,0,0),r&&(n.length&&console.log(\\\"features: %d, points: %d\\\",this.tiles[0].numFeatures,this.tiles[0].numPoints),console.timeEnd(\\\"generate tiles\\\"),console.log(\\\"tiles generated:\\\",this.total,JSON.stringify(this.stats)))}function St(t,e,r){return 32*((1<<t)*r+e)+t}function Et(t,e){var r=t.tileID.canonical;if(!this._geoJSONIndex)return e(null,null);var n=this._geoJSONIndex.getTile(r.z,r.x,r.y);if(!n)return e(null,null);var i=new k(n.features),a=E(i);0===a.byteOffset&&a.byteLength===a.buffer.byteLength||(a=new Uint8Array(a)),e(null,{vectorTile:i,rawData:a.buffer})}Y.prototype.load=function(t){var e=this.options,r=e.log,n=e.minZoom,i=e.maxZoom,a=e.nodeSize;r&&console.time(\\\"total time\\\");var o=\\\"prepare \\\"+t.length+\\\" points\\\";r&&console.time(o),this.points=t;for(var s=[],l=0;l<t.length;l++)t[l].geometry&&s.push(X(t[l],l));this.trees[i+1]=new H(s,tt,et,a,Float32Array),r&&console.timeEnd(o);for(var c=i;c>=n;c--){var u=+Date.now();s=this._cluster(s,c),this.trees[c]=new H(s,tt,et,a,Float32Array),r&&console.log(\\\"z%d: %d clusters in %dms\\\",c,s.length,+Date.now()-u)}return r&&console.timeEnd(\\\"total time\\\"),this},Y.prototype.getClusters=function(t,e){var r=((t[0]+180)%360+360)%360-180,n=Math.max(-90,Math.min(90,t[1])),i=180===t[2]?180:((t[2]+180)%360+360)%360-180,a=Math.max(-90,Math.min(90,t[3]));if(t[2]-t[0]>=360)r=-180,i=180;else if(r>i){var o=this.getClusters([r,n,180,a],e),s=this.getClusters([-180,n,i,a],e);return o.concat(s)}for(var l=this.trees[this._limitZoom(e)],c=[],u=0,h=l.range(K(r),$(a),K(i),$(n));u<h.length;u+=1){var f=h[u],p=l.points[f];c.push(p.numPoints?Z(p):this.points[p.index])}return c},Y.prototype.getChildren=function(t){var e=t>>5,r=t%32,n=\\\"No cluster with the specified id.\\\",i=this.trees[r];if(!i)throw new Error(n);var a=i.points[e];if(!a)throw new Error(n);for(var o=this.options.radius/(this.options.extent*Math.pow(2,r-1)),s=[],l=0,c=i.within(a.x,a.y,o);l<c.length;l+=1){var u=c[l],h=i.points[u];h.parentId===t&&s.push(h.numPoints?Z(h):this.points[h.index])}if(0===s.length)throw new Error(n);return s},Y.prototype.getLeaves=function(t,e,r){e=e||10,r=r||0;var n=[];return this._appendLeaves(n,t,e,r,0),n},Y.prototype.getTile=function(t,e,r){var n=this.trees[this._limitZoom(t)],i=Math.pow(2,t),a=this.options,o=a.extent,s=a.radius/o,l=(r-s)/i,c=(r+1+s)/i,u={features:[]};return this._addTileFeatures(n.range((e-s)/i,l,(e+1+s)/i,c),n.points,e,r,i,u),0===e&&this._addTileFeatures(n.range(1-s/i,l,1,c),n.points,i,r,i,u),e===i-1&&this._addTileFeatures(n.range(0,l,s/i,c),n.points,-1,r,i,u),u.features.length?u:null},Y.prototype.getClusterExpansionZoom=function(t){for(var e=t%32-1;e<=this.options.maxZoom;){var r=this.getChildren(t);if(e++,1!==r.length)break;t=r[0].properties.cluster_id}return e},Y.prototype._appendLeaves=function(t,e,r,n,i){for(var a=0,o=this.getChildren(e);a<o.length;a+=1){var s=o[a],l=s.properties;if(l&&l.cluster?i+l.point_count<=n?i+=l.point_count:i=this._appendLeaves(t,l.cluster_id,r,n,i):i<n?i++:t.push(s),t.length===r)break}return i},Y.prototype._addTileFeatures=function(t,e,r,n,i,a){for(var o=0,s=t;o<s.length;o+=1){var l=e[s[o]],c={type:1,geometry:[[Math.round(this.options.extent*(l.x*i-r)),Math.round(this.options.extent*(l.y*i-n))]],tags:l.numPoints?J(l):this.points[l.index].properties},u=l.numPoints?l.id:this.points[l.index].id;void 0!==u&&(c.id=u),a.features.push(c)}},Y.prototype._limitZoom=function(t){return Math.max(this.options.minZoom,Math.min(t,this.options.maxZoom+1))},Y.prototype._cluster=function(t,e){for(var r=[],n=this.options,i=n.radius,a=n.extent,o=n.reduce,s=i/(a*Math.pow(2,e)),l=0;l<t.length;l++){var c=t[l];if(!(c.zoom<=e)){c.zoom=e;for(var u=this.trees[e+1],h=u.within(c.x,c.y,s),f=c.numPoints||1,p=c.x*f,d=c.y*f,g=o?this._map(c,!0):null,v=(l<<5)+(e+1),m=0,y=h;m<y.length;m+=1){var x=y[m],b=u.points[x];if(!(b.zoom<=e)){b.zoom=e;var _=b.numPoints||1;p+=b.x*_,d+=b.y*_,f+=_,b.parentId=v,o&&o(g,this._map(b))}}1===f?r.push(c):(c.parentId=v,r.push(W(p/f,d/f,v,f,g)))}}return r},Y.prototype._map=function(t,e){if(t.numPoints)return e?Q({},t.properties):t.properties;var r=this.points[t.index].properties,n=this.options.map(r);return e&&n===r?Q({},n):n},Mt.prototype.options={maxZoom:14,indexMaxZoom:5,indexMaxPoints:1e5,tolerance:3,extent:4096,buffer:64,lineMetrics:!1,promoteId:null,generateId:!1,debug:0},Mt.prototype.splitTile=function(t,e,r,n,i,a,o){for(var s=[t,e,r,n],l=this.options,c=l.debug;s.length;){n=s.pop(),r=s.pop(),e=s.pop(),t=s.pop();var u=1<<e,h=St(e,r,n),f=this.tiles[h];if(!f&&(c>1&&console.time(\\\"creation\\\"),f=this.tiles[h]=kt(t,e,r,n,l),this.tileCoords.push({z:e,x:r,y:n}),c)){c>1&&(console.log(\\\"tile z%d-%d-%d (features: %d, points: %d, simplified: %d)\\\",e,r,n,f.numFeatures,f.numPoints,f.numSimplified),console.timeEnd(\\\"creation\\\"));var p=\\\"z\\\"+e;this.stats[p]=(this.stats[p]||0)+1,this.total++}if(f.source=t,i){if(e===l.maxZoom||e===i)continue;var d=1<<i-e;if(r!==Math.floor(a/d)||n!==Math.floor(o/d))continue}else if(e===l.indexMaxZoom||f.numPoints<=l.indexMaxPoints)continue;if(f.source=null,0!==t.length){c>1&&console.time(\\\"clipping\\\");var g,v,m,y,x,b,_=.5*l.buffer/l.extent,w=.5-_,k=.5+_,T=1+_;g=v=m=y=null,x=ht(t,u,r-_,r+k,0,f.minX,f.maxX,l),b=ht(t,u,r+w,r+T,0,f.minX,f.maxX,l),t=null,x&&(g=ht(x,u,n-_,n+k,1,f.minY,f.maxY,l),v=ht(x,u,n+w,n+T,1,f.minY,f.maxY,l),x=null),b&&(m=ht(b,u,n-_,n+k,1,f.minY,f.maxY,l),y=ht(b,u,n+w,n+T,1,f.minY,f.maxY,l),b=null),c>1&&console.timeEnd(\\\"clipping\\\"),s.push(g||[],e+1,2*r,2*n),s.push(v||[],e+1,2*r,2*n+1),s.push(m||[],e+1,2*r+1,2*n),s.push(y||[],e+1,2*r+1,2*n+1)}}},Mt.prototype.getTile=function(t,e,r){var n=this.options,i=n.extent,a=n.debug;if(t<0||t>24)return null;var o=1<<t,s=St(t,e=(e%o+o)%o,r);if(this.tiles[s])return _t(this.tiles[s],i);a>1&&console.log(\\\"drilling down to z%d-%d-%d\\\",t,e,r);for(var l,c=t,u=e,h=r;!l&&c>0;)c--,u=Math.floor(u/2),h=Math.floor(h/2),l=this.tiles[St(c,u,h)];return l&&l.source?(a>1&&console.log(\\\"found parent tile z%d-%d-%d\\\",c,u,h),a>1&&console.time(\\\"drilling down\\\"),this.splitTile(l.source,c,u,h,t,e,r),a>1&&console.timeEnd(\\\"drilling down\\\"),this.tiles[s]?_t(this.tiles[s],i):null):null};var Ct=function(e){function r(t,r,n){e.call(this,t,r,Et),n&&(this.loadGeoJSON=n)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.loadData=function(t,e){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),this._pendingCallback=e,this._pendingLoadDataParams=t,this._state&&\\\"Idle\\\"!==this._state?this._state=\\\"NeedsLoadData\\\":(this._state=\\\"Coalescing\\\",this._loadData())},r.prototype._loadData=function(){var e=this;if(this._pendingCallback&&this._pendingLoadDataParams){var r=this._pendingCallback,n=this._pendingLoadDataParams;delete this._pendingCallback,delete this._pendingLoadDataParams;var i=!!(n&&n.request&&n.request.collectResourceTiming)&&new l.Performance(n.request);this.loadGeoJSON(n,function(a,o){if(a||!o)return r(a);if(\\\"object\\\"!=typeof o)return r(new Error(\\\"Input data given to '\\\"+n.source+\\\"' is not a valid GeoJSON object.\\\"));!function t(e,r){switch(e&&e.type||null){case\\\"FeatureCollection\\\":return e.features=e.features.map(y(t,r)),e;case\\\"GeometryCollection\\\":return e.geometries=e.geometries.map(y(t,r)),e;case\\\"Feature\\\":return e.geometry=t(e.geometry,r),e;case\\\"Polygon\\\":case\\\"MultiPolygon\\\":return function(t,e){return\\\"Polygon\\\"===t.type?t.coordinates=x(t.coordinates,e):\\\"MultiPolygon\\\"===t.type&&(t.coordinates=t.coordinates.map(y(x,e))),t}(e,r);default:return e}}(o,!0);try{e._geoJSONIndex=n.cluster?new Y(function(e){var r=e.superclusterOptions,n=e.clusterProperties;if(!n||!r)return r;for(var i={},a={},o={accumulated:null,zoom:0},s={properties:null},l=Object.keys(n),c=0,u=l;c<u.length;c+=1){var h=u[c],f=n[h],p=f[0],d=f[1],g=t.createExpression(d),v=t.createExpression(\\\"string\\\"==typeof p?[p,[\\\"accumulated\\\"],[\\\"get\\\",h]]:p);i[h]=g.value,a[h]=v.value}return r.map=function(t){s.properties=t;for(var e={},r=0,n=l;r<n.length;r+=1){var a=n[r];e[a]=i[a].evaluate(o,s)}return e},r.reduce=function(t,e){s.properties=e;for(var r=0,n=l;r<n.length;r+=1){var i=n[r];o.accumulated=t[i],t[i]=a[i].evaluate(o,s)}},r}(n)).load(o.features):new Mt(o,n.geojsonVtOptions)}catch(a){return r(a)}e.loaded={};var s={};if(i){var l=i.finish();l&&(s.resourceTiming={},s.resourceTiming[n.source]=JSON.parse(JSON.stringify(l)))}r(null,s)})}},r.prototype.coalesce=function(){\\\"Coalescing\\\"===this._state?this._state=\\\"Idle\\\":\\\"NeedsLoadData\\\"===this._state&&(this._state=\\\"Coalescing\\\",this._loadData())},r.prototype.reloadTile=function(t,r){var n=this.loaded,i=t.uid;return n&&n[i]?e.prototype.reloadTile.call(this,t,r):this.loadTile(t,r)},r.prototype.loadGeoJSON=function(e,r){if(e.request)t.getJSON(e.request,r);else{if(\\\"string\\\"!=typeof e.data)return r(new Error(\\\"Input data given to '\\\"+e.source+\\\"' is not a valid GeoJSON object.\\\"));try{return r(null,JSON.parse(e.data))}catch(t){return r(new Error(\\\"Input data given to '\\\"+e.source+\\\"' is not a valid GeoJSON object.\\\"))}}},r.prototype.removeSource=function(t,e){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),e()},r.prototype.getClusterExpansionZoom=function(t,e){e(null,this._geoJSONIndex.getClusterExpansionZoom(t.clusterId))},r.prototype.getClusterChildren=function(t,e){e(null,this._geoJSONIndex.getChildren(t.clusterId))},r.prototype.getClusterLeaves=function(t,e){e(null,this._geoJSONIndex.getLeaves(t.clusterId,t.limit,t.offset))},r}(h),Lt=function(e){var r=this;this.self=e,this.actor=new t.Actor(e,this),this.layerIndexes={},this.workerSourceTypes={vector:h,geojson:Ct},this.workerSources={},this.demWorkerSources={},this.self.registerWorkerSource=function(t,e){if(r.workerSourceTypes[t])throw new Error('Worker source with name \\\"'+t+'\\\" already registered.');r.workerSourceTypes[t]=e},this.self.registerRTLTextPlugin=function(e){if(t.plugin.isLoaded())throw new Error(\\\"RTL text plugin already registered.\\\");t.plugin.applyArabicShaping=e.applyArabicShaping,t.plugin.processBidirectionalText=e.processBidirectionalText,t.plugin.processStyledBidirectionalText=e.processStyledBidirectionalText}};return Lt.prototype.setReferrer=function(t,e){this.referrer=e},Lt.prototype.setLayers=function(t,e,r){this.getLayerIndex(t).replace(e),r()},Lt.prototype.updateLayers=function(t,e,r){this.getLayerIndex(t).update(e.layers,e.removedIds),r()},Lt.prototype.loadTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).loadTile(e,r)},Lt.prototype.loadDEMTile=function(t,e,r){this.getDEMWorkerSource(t,e.source).loadTile(e,r)},Lt.prototype.reloadTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).reloadTile(e,r)},Lt.prototype.abortTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).abortTile(e,r)},Lt.prototype.removeTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).removeTile(e,r)},Lt.prototype.removeDEMTile=function(t,e){this.getDEMWorkerSource(t,e.source).removeTile(e)},Lt.prototype.removeSource=function(t,e,r){if(this.workerSources[t]&&this.workerSources[t][e.type]&&this.workerSources[t][e.type][e.source]){var n=this.workerSources[t][e.type][e.source];delete this.workerSources[t][e.type][e.source],void 0!==n.removeSource?n.removeSource(e,r):r()}},Lt.prototype.loadWorkerSource=function(t,e,r){try{this.self.importScripts(e.url),r()}catch(t){r(t.toString())}},Lt.prototype.loadRTLTextPlugin=function(e,r,n){try{t.plugin.isLoaded()||(this.self.importScripts(r),n(t.plugin.isLoaded()?null:new Error(\\\"RTL Text Plugin failed to import scripts from \\\"+r)))}catch(t){n(t.toString())}},Lt.prototype.getLayerIndex=function(t){var e=this.layerIndexes[t];return e||(e=this.layerIndexes[t]=new n),e},Lt.prototype.getWorkerSource=function(t,e,r){var n=this;if(this.workerSources[t]||(this.workerSources[t]={}),this.workerSources[t][e]||(this.workerSources[t][e]={}),!this.workerSources[t][e][r]){var i={send:function(e,r,i){n.actor.send(e,r,i,t)}};this.workerSources[t][e][r]=new this.workerSourceTypes[e](i,this.getLayerIndex(t))}return this.workerSources[t][e][r]},Lt.prototype.getDEMWorkerSource=function(t,e){return this.demWorkerSources[t]||(this.demWorkerSources[t]={}),this.demWorkerSources[t][e]||(this.demWorkerSources[t][e]=new f),this.demWorkerSources[t][e]},Lt.prototype.enforceCacheSizeLimit=function(e,r){t.enforceCacheSizeLimit(r)},\\\"undefined\\\"!=typeof WorkerGlobalScope&&void 0!==t.window&&t.window instanceof WorkerGlobalScope&&(t.window.worker=new Lt(t.window)),Lt}),n(0,function(t){var e=t.createCommonjsModule(function(t){function e(t){return!!(\\\"undefined\\\"!=typeof window&&\\\"undefined\\\"!=typeof document&&Array.prototype&&Array.prototype.every&&Array.prototype.filter&&Array.prototype.forEach&&Array.prototype.indexOf&&Array.prototype.lastIndexOf&&Array.prototype.map&&Array.prototype.some&&Array.prototype.reduce&&Array.prototype.reduceRight&&Array.isArray&&Function.prototype&&Function.prototype.bind&&Object.keys&&Object.create&&Object.getPrototypeOf&&Object.getOwnPropertyNames&&Object.isSealed&&Object.isFrozen&&Object.isExtensible&&Object.getOwnPropertyDescriptor&&Object.defineProperty&&Object.defineProperties&&Object.seal&&Object.freeze&&Object.preventExtensions&&\\\"JSON\\\"in window&&\\\"parse\\\"in JSON&&\\\"stringify\\\"in JSON&&function(){if(!(\\\"Worker\\\"in window&&\\\"Blob\\\"in window&&\\\"URL\\\"in window))return!1;var t,e,r=new Blob([\\\"\\\"],{type:\\\"text/javascript\\\"}),n=URL.createObjectURL(r);try{e=new Worker(n),t=!0}catch(e){t=!1}return e&&e.terminate(),URL.revokeObjectURL(n),t}()&&\\\"Uint8ClampedArray\\\"in window&&ArrayBuffer.isView&&function(t){return void 0===r[t]&&(r[t]=function(t){var r=document.createElement(\\\"canvas\\\"),n=Object.create(e.webGLContextAttributes);return n.failIfMajorPerformanceCaveat=t,r.probablySupportsContext?r.probablySupportsContext(\\\"webgl\\\",n)||r.probablySupportsContext(\\\"experimental-webgl\\\",n):r.supportsContext?r.supportsContext(\\\"webgl\\\",n)||r.supportsContext(\\\"experimental-webgl\\\",n):r.getContext(\\\"webgl\\\",n)||r.getContext(\\\"experimental-webgl\\\",n)}(t)),r[t]}(t&&t.failIfMajorPerformanceCaveat))}t.exports?t.exports=e:window&&(window.mapboxgl=window.mapboxgl||{},window.mapboxgl.supported=e);var r={};e.webGLContextAttributes={antialias:!1,alpha:!0,stencil:!0,depth:!0}}),r={create:function(e,r,n){var i=t.window.document.createElement(e);return void 0!==r&&(i.className=r),n&&n.appendChild(i),i},createNS:function(e,r){return t.window.document.createElementNS(e,r)}},n=t.window.document.documentElement.style;function i(t){if(!n)return t[0];for(var e=0;e<t.length;e++)if(t[e]in n)return t[e];return t[0]}var a,o=i([\\\"userSelect\\\",\\\"MozUserSelect\\\",\\\"WebkitUserSelect\\\",\\\"msUserSelect\\\"]);r.disableDrag=function(){n&&o&&(a=n[o],n[o]=\\\"none\\\")},r.enableDrag=function(){n&&o&&(n[o]=a)};var s=i([\\\"transform\\\",\\\"WebkitTransform\\\"]);r.setTransform=function(t,e){t.style[s]=e};var l=!1;try{var c=Object.defineProperty({},\\\"passive\\\",{get:function(){l=!0}});t.window.addEventListener(\\\"test\\\",c,c),t.window.removeEventListener(\\\"test\\\",c,c)}catch(t){l=!1}r.addEventListener=function(t,e,r,n){void 0===n&&(n={}),\\\"passive\\\"in n&&l?t.addEventListener(e,r,n):t.addEventListener(e,r,n.capture)},r.removeEventListener=function(t,e,r,n){void 0===n&&(n={}),\\\"passive\\\"in n&&l?t.removeEventListener(e,r,n):t.removeEventListener(e,r,n.capture)};var u=function(e){e.preventDefault(),e.stopPropagation(),t.window.removeEventListener(\\\"click\\\",u,!0)};function h(t){var e=t.userImage;return!!(e&&e.render&&e.render())&&(t.data.replace(new Uint8Array(e.data.buffer)),!0)}r.suppressClick=function(){t.window.addEventListener(\\\"click\\\",u,!0),t.window.setTimeout(function(){t.window.removeEventListener(\\\"click\\\",u,!0)},0)},r.mousePos=function(e,r){var n=e.getBoundingClientRect(),i=t.window.TouchEvent&&r instanceof t.window.TouchEvent?r.touches[0]:r;return new t.Point(i.clientX-n.left-e.clientLeft,i.clientY-n.top-e.clientTop)},r.touchPos=function(e,r){for(var n=e.getBoundingClientRect(),i=[],a=\\\"touchend\\\"===r.type?r.changedTouches:r.touches,o=0;o<a.length;o++)i.push(new t.Point(a[o].clientX-n.left-e.clientLeft,a[o].clientY-n.top-e.clientTop));return i},r.mouseButton=function(e){return void 0!==t.window.InstallTrigger&&2===e.button&&e.ctrlKey&&t.window.navigator.platform.toUpperCase().indexOf(\\\"MAC\\\")>=0?0:e.button},r.remove=function(t){t.parentNode&&t.parentNode.removeChild(t)};var f=function(e){function r(){e.call(this),this.images={},this.updatedImages={},this.callbackDispatchedThisFrame={},this.loaded=!1,this.requestors=[],this.patterns={},this.atlasImage=new t.RGBAImage({width:1,height:1}),this.dirty=!0}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.isLoaded=function(){return this.loaded},r.prototype.setLoaded=function(t){if(this.loaded!==t&&(this.loaded=t,t)){for(var e=0,r=this.requestors;e<r.length;e+=1){var n=r[e],i=n.ids,a=n.callback;this._notify(i,a)}this.requestors=[]}},r.prototype.getImage=function(t){return this.images[t]},r.prototype.addImage=function(t,e){this.images[t]=e},r.prototype.updateImage=function(t,e){var r=this.images[t];e.version=r.version+1,this.images[t]=e,this.updatedImages[t]=!0},r.prototype.removeImage=function(t){var e=this.images[t];delete this.images[t],delete this.patterns[t],e.userImage&&e.userImage.onRemove&&e.userImage.onRemove()},r.prototype.listImages=function(){return Object.keys(this.images)},r.prototype.getImages=function(t,e){var r=!0;if(!this.isLoaded())for(var n=0,i=t;n<i.length;n+=1){var a=i[n];this.images[a]||(r=!1)}this.isLoaded()||r?this._notify(t,e):this.requestors.push({ids:t,callback:e})},r.prototype._notify=function(e,r){for(var n={},i=0,a=e;i<a.length;i+=1){var o=a[i];this.images[o]||this.fire(new t.Event(\\\"styleimagemissing\\\",{id:o}));var s=this.images[o];s?n[o]={data:s.data.clone(),pixelRatio:s.pixelRatio,sdf:s.sdf,version:s.version,hasRenderCallback:Boolean(s.userImage&&s.userImage.render)}:t.warnOnce('Image \\\"'+o+'\\\" could not be loaded. Please make sure you have added the image with map.addImage() or a \\\"sprite\\\" property in your style. You can provide missing images by listening for the \\\"styleimagemissing\\\" map event.')}r(null,n)},r.prototype.getPixelSize=function(){var t=this.atlasImage;return{width:t.width,height:t.height}},r.prototype.getPattern=function(e){var r=this.patterns[e],n=this.getImage(e);if(!n)return null;if(r&&r.position.version===n.version)return r.position;if(r)r.position.version=n.version;else{var i={w:n.data.width+2,h:n.data.height+2,x:0,y:0},a=new t.ImagePosition(i,n);this.patterns[e]={bin:i,position:a}}return this._updatePatternAtlas(),this.patterns[e].position},r.prototype.bind=function(e){var r=e.gl;this.atlasTexture?this.dirty&&(this.atlasTexture.update(this.atlasImage),this.dirty=!1):this.atlasTexture=new t.Texture(e,this.atlasImage,r.RGBA),this.atlasTexture.bind(r.LINEAR,r.CLAMP_TO_EDGE)},r.prototype._updatePatternAtlas=function(){var e=[];for(var r in this.patterns)e.push(this.patterns[r].bin);var n=t.potpack(e),i=n.w,a=n.h,o=this.atlasImage;for(var s in o.resize({width:i||1,height:a||1}),this.patterns){var l=this.patterns[s].bin,c=l.x+1,u=l.y+1,h=this.images[s].data,f=h.width,p=h.height;t.RGBAImage.copy(h,o,{x:0,y:0},{x:c,y:u},{width:f,height:p}),t.RGBAImage.copy(h,o,{x:0,y:p-1},{x:c,y:u-1},{width:f,height:1}),t.RGBAImage.copy(h,o,{x:0,y:0},{x:c,y:u+p},{width:f,height:1}),t.RGBAImage.copy(h,o,{x:f-1,y:0},{x:c-1,y:u},{width:1,height:p}),t.RGBAImage.copy(h,o,{x:0,y:0},{x:c+f,y:u},{width:1,height:p})}this.dirty=!0},r.prototype.beginFrame=function(){this.callbackDispatchedThisFrame={}},r.prototype.dispatchRenderCallbacks=function(t){for(var e=0,r=t;e<r.length;e+=1){var n=r[e];if(!this.callbackDispatchedThisFrame[n]){this.callbackDispatchedThisFrame[n]=!0;var i=this.images[n];h(i)&&this.updateImage(n,i)}}},r}(t.Evented),p=g,d=1e20;function g(t,e,r,n,i,a){this.fontSize=t||24,this.buffer=void 0===e?3:e,this.cutoff=n||.25,this.fontFamily=i||\\\"sans-serif\\\",this.fontWeight=a||\\\"normal\\\",this.radius=r||8;var o=this.size=this.fontSize+2*this.buffer;this.canvas=document.createElement(\\\"canvas\\\"),this.canvas.width=this.canvas.height=o,this.ctx=this.canvas.getContext(\\\"2d\\\"),this.ctx.font=this.fontWeight+\\\" \\\"+this.fontSize+\\\"px \\\"+this.fontFamily,this.ctx.textBaseline=\\\"middle\\\",this.ctx.fillStyle=\\\"black\\\",this.gridOuter=new Float64Array(o*o),this.gridInner=new Float64Array(o*o),this.f=new Float64Array(o),this.d=new Float64Array(o),this.z=new Float64Array(o+1),this.v=new Int16Array(o),this.middle=Math.round(o/2*(navigator.userAgent.indexOf(\\\"Gecko/\\\")>=0?1.2:1))}function v(t,e,r,n,i,a,o){for(var s=0;s<e;s++){for(var l=0;l<r;l++)n[l]=t[l*e+s];for(m(n,i,a,o,r),l=0;l<r;l++)t[l*e+s]=i[l]}for(l=0;l<r;l++){for(s=0;s<e;s++)n[s]=t[l*e+s];for(m(n,i,a,o,e),s=0;s<e;s++)t[l*e+s]=Math.sqrt(i[s])}}function m(t,e,r,n,i){r[0]=0,n[0]=-d,n[1]=+d;for(var a=1,o=0;a<i;a++){for(var s=(t[a]+a*a-(t[r[o]]+r[o]*r[o]))/(2*a-2*r[o]);s<=n[o];)o--,s=(t[a]+a*a-(t[r[o]]+r[o]*r[o]))/(2*a-2*r[o]);r[++o]=a,n[o]=s,n[o+1]=+d}for(a=0,o=0;a<i;a++){for(;n[o+1]<a;)o++;e[a]=(a-r[o])*(a-r[o])+t[r[o]]}}g.prototype.draw=function(t){this.ctx.clearRect(0,0,this.size,this.size),this.ctx.fillText(t,this.buffer,this.middle);for(var e=this.ctx.getImageData(0,0,this.size,this.size),r=new Uint8ClampedArray(this.size*this.size),n=0;n<this.size*this.size;n++){var i=e.data[4*n+3]/255;this.gridOuter[n]=1===i?0:0===i?d:Math.pow(Math.max(0,.5-i),2),this.gridInner[n]=1===i?d:0===i?0:Math.pow(Math.max(0,i-.5),2)}for(v(this.gridOuter,this.size,this.size,this.f,this.d,this.v,this.z),v(this.gridInner,this.size,this.size,this.f,this.d,this.v,this.z),n=0;n<this.size*this.size;n++){var a=this.gridOuter[n]-this.gridInner[n];r[n]=Math.max(0,Math.min(255,Math.round(255-255*(a/this.radius+this.cutoff))))}return r};var y=function(t,e){this.requestManager=t,this.localIdeographFontFamily=e,this.entries={}};y.prototype.setURL=function(t){this.url=t},y.prototype.getGlyphs=function(e,r){var n=this,i=[];for(var a in e)for(var o=0,s=e[a];o<s.length;o+=1){var l=s[o];i.push({stack:a,id:l})}t.asyncAll(i,function(t,e){var r=t.stack,i=t.id,a=n.entries[r];a||(a=n.entries[r]={glyphs:{},requests:{}});var o=a.glyphs[i];if(void 0===o)if(o=n._tinySDF(a,r,i))e(null,{stack:r,id:i,glyph:o});else{var s=Math.floor(i/256);if(256*s>65535)e(new Error(\\\"glyphs > 65535 not supported\\\"));else{var l=a.requests[s];l||(l=a.requests[s]=[],y.loadGlyphRange(r,s,n.url,n.requestManager,function(t,e){if(e)for(var r in e)a.glyphs[+r]=e[+r];for(var n=0,i=l;n<i.length;n+=1)(0,i[n])(t,e);delete a.requests[s]})),l.push(function(t,n){t?e(t):n&&e(null,{stack:r,id:i,glyph:n[i]||null})})}}else e(null,{stack:r,id:i,glyph:o})},function(t,e){if(t)r(t);else if(e){for(var n={},i=0,a=e;i<a.length;i+=1){var o=a[i],s=o.stack,l=o.id,c=o.glyph;(n[s]||(n[s]={}))[l]=c&&{id:c.id,bitmap:c.bitmap.clone(),metrics:c.metrics}}r(null,n)}})},y.prototype._tinySDF=function(e,r,n){var i=this.localIdeographFontFamily;if(i&&(t.isChar[\\\"CJK Unified Ideographs\\\"](n)||t.isChar[\\\"Hangul Syllables\\\"](n)||t.isChar.Hiragana(n)||t.isChar.Katakana(n))){var a=e.tinySDF;if(!a){var o=\\\"400\\\";/bold/i.test(r)?o=\\\"900\\\":/medium/i.test(r)?o=\\\"500\\\":/light/i.test(r)&&(o=\\\"200\\\"),a=e.tinySDF=new y.TinySDF(24,3,8,.25,i,o)}return{id:n,bitmap:new t.AlphaImage({width:30,height:30},a.draw(String.fromCharCode(n))),metrics:{width:24,height:24,left:0,top:-8,advance:24}}}},y.loadGlyphRange=function(e,r,n,i,a){var o=256*r,s=o+255,l=i.transformRequest(i.normalizeGlyphsURL(n).replace(\\\"{fontstack}\\\",e).replace(\\\"{range}\\\",o+\\\"-\\\"+s),t.ResourceType.Glyphs);t.getArrayBuffer(l,function(e,r){if(e)a(e);else if(r){for(var n={},i=0,o=t.parseGlyphPBF(r);i<o.length;i+=1){var s=o[i];n[s.id]=s}a(null,n)}})},y.TinySDF=p;var x=function(){this.specification=t.styleSpec.light.position};x.prototype.possiblyEvaluate=function(e,r){return t.sphericalToCartesian(e.expression.evaluate(r))},x.prototype.interpolate=function(e,r,n){return{x:t.number(e.x,r.x,n),y:t.number(e.y,r.y,n),z:t.number(e.z,r.z,n)}};var b=new t.Properties({anchor:new t.DataConstantProperty(t.styleSpec.light.anchor),position:new x,color:new t.DataConstantProperty(t.styleSpec.light.color),intensity:new t.DataConstantProperty(t.styleSpec.light.intensity)}),_=function(e){function r(r){e.call(this),this._transitionable=new t.Transitionable(b),this.setLight(r),this._transitioning=this._transitionable.untransitioned()}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getLight=function(){return this._transitionable.serialize()},r.prototype.setLight=function(e,r){if(void 0===r&&(r={}),!this._validate(t.validateLight,e,r))for(var n in e){var i=e[n];t.endsWith(n,\\\"-transition\\\")?this._transitionable.setTransition(n.slice(0,-\\\"-transition\\\".length),i):this._transitionable.setValue(n,i)}},r.prototype.updateTransitions=function(t){this._transitioning=this._transitionable.transitioned(t,this._transitioning)},r.prototype.hasTransition=function(){return this._transitioning.hasTransition()},r.prototype.recalculate=function(t){this.properties=this._transitioning.possiblyEvaluate(t)},r.prototype._validate=function(e,r,n){return(!n||!1!==n.validate)&&t.emitValidationErrors(this,e.call(t.validateStyle,t.extend({value:r,style:{glyphs:!0,sprite:!0},styleSpec:t.styleSpec})))},r}(t.Evented),w=function(t,e){this.width=t,this.height=e,this.nextRow=0,this.bytes=4,this.data=new Uint8Array(this.width*this.height*this.bytes),this.positions={}};w.prototype.getDash=function(t,e){var r=t.join(\\\",\\\")+String(e);return this.positions[r]||(this.positions[r]=this.addDash(t,e)),this.positions[r]},w.prototype.addDash=function(e,r){var n=r?7:0,i=2*n+1;if(this.nextRow+i>this.height)return t.warnOnce(\\\"LineAtlas out of space\\\"),null;for(var a=0,o=0;o<e.length;o++)a+=e[o];for(var s=this.width/a,l=s/2,c=e.length%2==1,u=-n;u<=n;u++)for(var h=this.nextRow+n+u,f=this.width*h,p=c?-e[e.length-1]:0,d=e[0],g=1,v=0;v<this.width;v++){for(;d<v/s;)p=d,d+=e[g],c&&g===e.length-1&&(d+=e[0]),g++;var m=Math.abs(v-p*s),y=Math.abs(v-d*s),x=Math.min(m,y),b=g%2==1,_=void 0;if(r){var w=n?u/n*(l+1):0;if(b){var k=l-Math.abs(w);_=Math.sqrt(x*x+k*k)}else _=l-Math.sqrt(x*x+w*w)}else _=(b?1:-1)*x;this.data[3+4*(f+v)]=Math.max(0,Math.min(255,_+128))}var T={y:(this.nextRow+n+.5)/this.height,height:2*n/this.height,width:a};return this.nextRow+=i,this.dirty=!0,T},w.prototype.bind=function(t){var e=t.gl;this.texture?(e.bindTexture(e.TEXTURE_2D,this.texture),this.dirty&&(this.dirty=!1,e.texSubImage2D(e.TEXTURE_2D,0,0,0,this.width,this.height,e.RGBA,e.UNSIGNED_BYTE,this.data))):(this.texture=e.createTexture(),e.bindTexture(e.TEXTURE_2D,this.texture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,this.width,this.height,0,e.RGBA,e.UNSIGNED_BYTE,this.data))};var k=function e(r,n){this.workerPool=r,this.actors=[],this.currentActor=0,this.id=t.uniqueId();for(var i=this.workerPool.acquire(this.id),a=0;a<i.length;a++){var o=i[a],s=new e.Actor(o,n,this.id);s.name=\\\"Worker \\\"+a,this.actors.push(s)}};function T(e,r,n){var i=function(i,a){if(i)return n(i);if(a){var o=t.pick(a,[\\\"tiles\\\",\\\"minzoom\\\",\\\"maxzoom\\\",\\\"attribution\\\",\\\"mapbox_logo\\\",\\\"bounds\\\"]);a.vector_layers&&(o.vectorLayers=a.vector_layers,o.vectorLayerIds=o.vectorLayers.map(function(t){return t.id})),e.url&&(o.tiles=r.canonicalizeTileset(o,e.url)),n(null,o)}};return e.url?t.getJSON(r.transformRequest(r.normalizeSourceURL(e.url),t.ResourceType.Source),i):t.browser.frame(function(){return i(null,e)})}k.prototype.broadcast=function(e,r,n){n=n||function(){},t.asyncAll(this.actors,function(t,n){t.send(e,r,n)},n)},k.prototype.send=function(t,e,r,n){return(\\\"number\\\"!=typeof n||isNaN(n))&&(n=this.currentActor=(this.currentActor+1)%this.actors.length),this.actors[n].send(t,e,r),n},k.prototype.remove=function(){this.actors.forEach(function(t){t.remove()}),this.actors=[],this.workerPool.release(this.id)},k.Actor=t.Actor;var A=function(e,r,n){this.bounds=t.LngLatBounds.convert(this.validateBounds(e)),this.minzoom=r||0,this.maxzoom=n||24};A.prototype.validateBounds=function(t){return Array.isArray(t)&&4===t.length?[Math.max(-180,t[0]),Math.max(-90,t[1]),Math.min(180,t[2]),Math.min(90,t[3])]:[-180,-90,180,90]},A.prototype.contains=function(e){var r=Math.pow(2,e.z),n=Math.floor(t.mercatorXfromLng(this.bounds.getWest())*r),i=Math.floor(t.mercatorYfromLat(this.bounds.getNorth())*r),a=Math.ceil(t.mercatorXfromLng(this.bounds.getEast())*r),o=Math.ceil(t.mercatorYfromLat(this.bounds.getSouth())*r);return e.x>=n&&e.x<a&&e.y>=i&&e.y<o};var M=function(e){function r(r,n,i,a){if(e.call(this),this.id=r,this.dispatcher=i,this.type=\\\"vector\\\",this.minzoom=0,this.maxzoom=22,this.scheme=\\\"xyz\\\",this.tileSize=512,this.reparseOverscaled=!0,this.isTileClipped=!0,t.extend(this,t.pick(n,[\\\"url\\\",\\\"scheme\\\",\\\"tileSize\\\"])),this._options=t.extend({type:\\\"vector\\\"},n),this._collectResourceTiming=n.collectResourceTiming,512!==this.tileSize)throw new Error(\\\"vector tile sources must have a tileSize of 512\\\");this.setEventedParent(a)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this.fire(new t.Event(\\\"dataloading\\\",{dataType:\\\"source\\\"})),this._tileJSONRequest=T(this._options,this.map._requestManager,function(r,n){e._tileJSONRequest=null,r?e.fire(new t.ErrorEvent(r)):n&&(t.extend(e,n),n.bounds&&(e.tileBounds=new A(n.bounds,e.minzoom,e.maxzoom)),t.postTurnstileEvent(n.tiles),t.postMapLoadEvent(n.tiles,e.map._getMapId(),e.map._requestManager._skuToken),e.fire(new t.Event(\\\"data\\\",{dataType:\\\"source\\\",sourceDataType:\\\"metadata\\\"})),e.fire(new t.Event(\\\"data\\\",{dataType:\\\"source\\\",sourceDataType:\\\"content\\\"})))})},r.prototype.hasTile=function(t){return!this.tileBounds||this.tileBounds.contains(t.canonical)},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.onRemove=function(){this._tileJSONRequest&&(this._tileJSONRequest.cancel(),this._tileJSONRequest=null)},r.prototype.serialize=function(){return t.extend({},this._options)},r.prototype.loadTile=function(e,r){var n=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.url,null),i={request:this.map._requestManager.transformRequest(n,t.ResourceType.Tile),uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,tileSize:this.tileSize*e.tileID.overscaleFactor(),type:this.type,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes};function a(n,i){return e.aborted?r(null):n&&404!==n.status?r(n):(i&&i.resourceTiming&&(e.resourceTiming=i.resourceTiming),this.map._refreshExpiredTiles&&i&&e.setExpiryData(i),e.loadVectorData(i,this.map.painter),t.cacheEntryPossiblyAdded(this.dispatcher),r(null),void(e.reloadCallback&&(this.loadTile(e,e.reloadCallback),e.reloadCallback=null)))}i.request.collectResourceTiming=this._collectResourceTiming,void 0===e.workerID||\\\"expired\\\"===e.state?e.workerID=this.dispatcher.send(\\\"loadTile\\\",i,a.bind(this)):\\\"loading\\\"===e.state?e.reloadCallback=r:this.dispatcher.send(\\\"reloadTile\\\",i,a.bind(this),e.workerID)},r.prototype.abortTile=function(t){this.dispatcher.send(\\\"abortTile\\\",{uid:t.uid,type:this.type,source:this.id},void 0,t.workerID)},r.prototype.unloadTile=function(t){t.unloadVectorData(),this.dispatcher.send(\\\"removeTile\\\",{uid:t.uid,type:this.type,source:this.id},void 0,t.workerID)},r.prototype.hasTransition=function(){return!1},r}(t.Evented),S=function(e){function r(r,n,i,a){e.call(this),this.id=r,this.dispatcher=i,this.setEventedParent(a),this.type=\\\"raster\\\",this.minzoom=0,this.maxzoom=22,this.roundZoom=!0,this.scheme=\\\"xyz\\\",this.tileSize=512,this._loaded=!1,this._options=t.extend({},n),t.extend(this,t.pick(n,[\\\"url\\\",\\\"scheme\\\",\\\"tileSize\\\"]))}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this.fire(new t.Event(\\\"dataloading\\\",{dataType:\\\"source\\\"})),this._tileJSONRequest=T(this._options,this.map._requestManager,function(r,n){e._tileJSONRequest=null,r?e.fire(new t.ErrorEvent(r)):n&&(t.extend(e,n),n.bounds&&(e.tileBounds=new A(n.bounds,e.minzoom,e.maxzoom)),t.postTurnstileEvent(n.tiles),t.postMapLoadEvent(n.tiles,e.map._getMapId(),e.map._requestManager._skuToken),e.fire(new t.Event(\\\"data\\\",{dataType:\\\"source\\\",sourceDataType:\\\"metadata\\\"})),e.fire(new t.Event(\\\"data\\\",{dataType:\\\"source\\\",sourceDataType:\\\"content\\\"})))})},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.onRemove=function(){this._tileJSONRequest&&(this._tileJSONRequest.cancel(),this._tileJSONRequest=null)},r.prototype.serialize=function(){return t.extend({},this._options)},r.prototype.hasTile=function(t){return!this.tileBounds||this.tileBounds.contains(t.canonical)},r.prototype.loadTile=function(e,r){var n=this,i=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.url,this.tileSize);e.request=t.getImage(this.map._requestManager.transformRequest(i,t.ResourceType.Tile),function(i,a){if(delete e.request,e.aborted)e.state=\\\"unloaded\\\",r(null);else if(i)e.state=\\\"errored\\\",r(i);else if(a){n.map._refreshExpiredTiles&&e.setExpiryData(a),delete a.cacheControl,delete a.expires;var o=n.map.painter.context,s=o.gl;e.texture=n.map.painter.getTileTexture(a.width),e.texture?e.texture.update(a,{useMipmap:!0}):(e.texture=new t.Texture(o,a,s.RGBA,{useMipmap:!0}),e.texture.bind(s.LINEAR,s.CLAMP_TO_EDGE,s.LINEAR_MIPMAP_NEAREST),o.extTextureFilterAnisotropic&&s.texParameterf(s.TEXTURE_2D,o.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,o.extTextureFilterAnisotropicMax)),e.state=\\\"loaded\\\",t.cacheEntryPossiblyAdded(n.dispatcher),r(null)}})},r.prototype.abortTile=function(t,e){t.request&&(t.request.cancel(),delete t.request),e()},r.prototype.unloadTile=function(t,e){t.texture&&this.map.painter.saveTileTexture(t.texture),e()},r.prototype.hasTransition=function(){return!1},r}(t.Evented),E=function(e){function r(r,n,i,a){e.call(this,r,n,i,a),this.type=\\\"raster-dem\\\",this.maxzoom=22,this._options=t.extend({},n),this.encoding=n.encoding||\\\"mapbox\\\"}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.serialize=function(){return{type:\\\"raster-dem\\\",url:this.url,tileSize:this.tileSize,tiles:this.tiles,bounds:this.bounds,encoding:this.encoding}},r.prototype.loadTile=function(e,r){var n=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.url,this.tileSize);e.request=t.getImage(this.map._requestManager.transformRequest(n,t.ResourceType.Tile),function(n,i){if(delete e.request,e.aborted)e.state=\\\"unloaded\\\",r(null);else if(n)e.state=\\\"errored\\\",r(n);else if(i){this.map._refreshExpiredTiles&&e.setExpiryData(i),delete i.cacheControl,delete i.expires;var a=t.browser.getImageData(i),o={uid:e.uid,coord:e.tileID,source:this.id,rawImageData:a,encoding:this.encoding};e.workerID&&\\\"expired\\\"!==e.state||(e.workerID=this.dispatcher.send(\\\"loadDEMTile\\\",o,function(t,n){t&&(e.state=\\\"errored\\\",r(t)),n&&(e.dem=n,e.needsHillshadePrepare=!0,e.state=\\\"loaded\\\",r(null))}.bind(this)))}}.bind(this)),e.neighboringTiles=this._getNeighboringTiles(e.tileID)},r.prototype._getNeighboringTiles=function(e){var r=e.canonical,n=Math.pow(2,r.z),i=(r.x-1+n)%n,a=0===r.x?e.wrap-1:e.wrap,o=(r.x+1+n)%n,s=r.x+1===n?e.wrap+1:e.wrap,l={};return l[new t.OverscaledTileID(e.overscaledZ,a,r.z,i,r.y).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y).key]={backfilled:!1},r.y>0&&(l[new t.OverscaledTileID(e.overscaledZ,a,r.z,i,r.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,e.wrap,r.z,r.x,r.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y-1).key]={backfilled:!1}),r.y+1<n&&(l[new t.OverscaledTileID(e.overscaledZ,a,r.z,i,r.y+1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,e.wrap,r.z,r.x,r.y+1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y+1).key]={backfilled:!1}),l},r.prototype.unloadTile=function(t){t.demTexture&&this.map.painter.saveTileTexture(t.demTexture),t.fbo&&(t.fbo.destroy(),delete t.fbo),t.dem&&delete t.dem,delete t.neighboringTiles,t.state=\\\"unloaded\\\",this.dispatcher.send(\\\"removeDEMTile\\\",{uid:t.uid,source:this.id},void 0,t.workerID)},r}(S),C=function(e){function r(r,n,i,a){e.call(this),this.id=r,this.type=\\\"geojson\\\",this.minzoom=0,this.maxzoom=18,this.tileSize=512,this.isTileClipped=!0,this.reparseOverscaled=!0,this._removed=!1,this.dispatcher=i,this.setEventedParent(a),this._data=n.data,this._options=t.extend({},n),this._collectResourceTiming=n.collectResourceTiming,this._resourceTiming=[],void 0!==n.maxzoom&&(this.maxzoom=n.maxzoom),n.type&&(this.type=n.type),n.attribution&&(this.attribution=n.attribution);var o=t.EXTENT/this.tileSize;this.workerOptions=t.extend({source:this.id,cluster:n.cluster||!1,geojsonVtOptions:{buffer:(void 0!==n.buffer?n.buffer:128)*o,tolerance:(void 0!==n.tolerance?n.tolerance:.375)*o,extent:t.EXTENT,maxZoom:this.maxzoom,lineMetrics:n.lineMetrics||!1,generateId:n.generateId||!1},superclusterOptions:{maxZoom:void 0!==n.clusterMaxZoom?Math.min(n.clusterMaxZoom,this.maxzoom-1):this.maxzoom-1,extent:t.EXTENT,radius:(n.clusterRadius||50)*o,log:!1},clusterProperties:n.clusterProperties},n.workerOptions)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this.fire(new t.Event(\\\"dataloading\\\",{dataType:\\\"source\\\"})),this._updateWorkerData(function(r){if(r)e.fire(new t.ErrorEvent(r));else{var n={dataType:\\\"source\\\",sourceDataType:\\\"metadata\\\"};e._collectResourceTiming&&e._resourceTiming&&e._resourceTiming.length>0&&(n.resourceTiming=e._resourceTiming,e._resourceTiming=[]),e.fire(new t.Event(\\\"data\\\",n))}})},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.setData=function(e){var r=this;return this._data=e,this.fire(new t.Event(\\\"dataloading\\\",{dataType:\\\"source\\\"})),this._updateWorkerData(function(e){if(e)r.fire(new t.ErrorEvent(e));else{var n={dataType:\\\"source\\\",sourceDataType:\\\"content\\\"};r._collectResourceTiming&&r._resourceTiming&&r._resourceTiming.length>0&&(n.resourceTiming=r._resourceTiming,r._resourceTiming=[]),r.fire(new t.Event(\\\"data\\\",n))}}),this},r.prototype.getClusterExpansionZoom=function(t,e){return this.dispatcher.send(\\\"geojson.getClusterExpansionZoom\\\",{clusterId:t,source:this.id},e,this.workerID),this},r.prototype.getClusterChildren=function(t,e){return this.dispatcher.send(\\\"geojson.getClusterChildren\\\",{clusterId:t,source:this.id},e,this.workerID),this},r.prototype.getClusterLeaves=function(t,e,r,n){return this.dispatcher.send(\\\"geojson.getClusterLeaves\\\",{source:this.id,clusterId:t,limit:e,offset:r},n,this.workerID),this},r.prototype._updateWorkerData=function(e){var r=this,n=t.extend({},this.workerOptions),i=this._data;\\\"string\\\"==typeof i?(n.request=this.map._requestManager.transformRequest(t.browser.resolveURL(i),t.ResourceType.Source),n.request.collectResourceTiming=this._collectResourceTiming):n.data=JSON.stringify(i),this.workerID=this.dispatcher.send(this.type+\\\".loadData\\\",n,function(t,i){r._removed||i&&i.abandoned||(r._loaded=!0,i&&i.resourceTiming&&i.resourceTiming[r.id]&&(r._resourceTiming=i.resourceTiming[r.id].slice(0)),r.dispatcher.send(r.type+\\\".coalesce\\\",{source:n.source},null,r.workerID),e(t))},this.workerID)},r.prototype.loadTile=function(e,r){var n=this,i=void 0===e.workerID?\\\"loadTile\\\":\\\"reloadTile\\\",a={type:this.type,uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,maxZoom:this.maxzoom,tileSize:this.tileSize,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes};e.workerID=this.dispatcher.send(i,a,function(t,a){return e.unloadVectorData(),e.aborted?r(null):t?r(t):(e.loadVectorData(a,n.map.painter,\\\"reloadTile\\\"===i),r(null))},this.workerID)},r.prototype.abortTile=function(t){t.aborted=!0},r.prototype.unloadTile=function(t){t.unloadVectorData(),this.dispatcher.send(\\\"removeTile\\\",{uid:t.uid,type:this.type,source:this.id},null,t.workerID)},r.prototype.onRemove=function(){this._removed=!0,this.dispatcher.send(\\\"removeSource\\\",{type:this.type,source:this.id},null,this.workerID)},r.prototype.serialize=function(){return t.extend({},this._options,{type:this.type,data:this._data})},r.prototype.hasTransition=function(){return!1},r}(t.Evented),L=function(e){function r(t,r,n,i){e.call(this),this.id=t,this.dispatcher=n,this.coordinates=r.coordinates,this.type=\\\"image\\\",this.minzoom=0,this.maxzoom=22,this.tileSize=512,this.tiles={},this.setEventedParent(i),this.options=r}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(e,r){var n=this;this.fire(new t.Event(\\\"dataloading\\\",{dataType:\\\"source\\\"})),this.url=this.options.url,t.getImage(this.map._requestManager.transformRequest(this.url,t.ResourceType.Image),function(i,a){i?n.fire(new t.ErrorEvent(i)):a&&(n.image=a,e&&(n.coordinates=e),r&&r(),n._finishLoading())})},r.prototype.updateImage=function(t){var e=this;return this.image&&t.url?(this.options.url=t.url,this.load(t.coordinates,function(){e.texture=null}),this):this},r.prototype._finishLoading=function(){this.map&&(this.setCoordinates(this.coordinates),this.fire(new t.Event(\\\"data\\\",{dataType:\\\"source\\\",sourceDataType:\\\"metadata\\\"})))},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.setCoordinates=function(e){var r=this;this.coordinates=e;var n=e.map(t.MercatorCoordinate.fromLngLat);this.tileID=function(e){for(var r=1/0,n=1/0,i=-1/0,a=-1/0,o=0,s=e;o<s.length;o+=1){var l=s[o];r=Math.min(r,l.x),n=Math.min(n,l.y),i=Math.max(i,l.x),a=Math.max(a,l.y)}var c=i-r,u=a-n,h=Math.max(c,u),f=Math.max(0,Math.floor(-Math.log(h)/Math.LN2)),p=Math.pow(2,f);return new t.CanonicalTileID(f,Math.floor((r+i)/2*p),Math.floor((n+a)/2*p))}(n),this.minzoom=this.maxzoom=this.tileID.z;var i=n.map(function(t){return r.tileID.getTilePoint(t)._round()});return this._boundsArray=new t.StructArrayLayout4i8,this._boundsArray.emplaceBack(i[0].x,i[0].y,0,0),this._boundsArray.emplaceBack(i[1].x,i[1].y,t.EXTENT,0),this._boundsArray.emplaceBack(i[3].x,i[3].y,0,t.EXTENT),this._boundsArray.emplaceBack(i[2].x,i[2].y,t.EXTENT,t.EXTENT),this.boundsBuffer&&(this.boundsBuffer.destroy(),delete this.boundsBuffer),this.fire(new t.Event(\\\"data\\\",{dataType:\\\"source\\\",sourceDataType:\\\"content\\\"})),this},r.prototype.prepare=function(){if(0!==Object.keys(this.tiles).length&&this.image){var e=this.map.painter.context,r=e.gl;for(var n in this.boundsBuffer||(this.boundsBuffer=e.createVertexBuffer(this._boundsArray,t.rasterBoundsAttributes.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture||(this.texture=new t.Texture(e,this.image,r.RGBA),this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE)),this.tiles){var i=this.tiles[n];\\\"loaded\\\"!==i.state&&(i.state=\\\"loaded\\\",i.texture=this.texture)}}},r.prototype.loadTile=function(t,e){this.tileID&&this.tileID.equals(t.tileID.canonical)?(this.tiles[String(t.tileID.wrap)]=t,t.buckets={},e(null)):(t.state=\\\"errored\\\",e(null))},r.prototype.serialize=function(){return{type:\\\"image\\\",url:this.options.url,coordinates:this.coordinates}},r.prototype.hasTransition=function(){return!1},r}(t.Evented),P=function(e){function r(t,r,n,i){e.call(this,t,r,n,i),this.roundZoom=!0,this.type=\\\"video\\\",this.options=r}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this,r=this.options;this.urls=[];for(var n=0,i=r.urls;n<i.length;n+=1){var a=i[n];this.urls.push(this.map._requestManager.transformRequest(a,t.ResourceType.Source).url)}t.getVideo(this.urls,function(r,n){r?e.fire(new t.ErrorEvent(r)):n&&(e.video=n,e.video.loop=!0,e.video.addEventListener(\\\"playing\\\",function(){e.map.triggerRepaint()}),e.map&&e.video.play(),e._finishLoading())})},r.prototype.getVideo=function(){return this.video},r.prototype.onAdd=function(t){this.map||(this.map=t,this.load(),this.video&&(this.video.play(),this.setCoordinates(this.coordinates)))},r.prototype.prepare=function(){if(!(0===Object.keys(this.tiles).length||this.video.readyState<2)){var e=this.map.painter.context,r=e.gl;for(var n in this.boundsBuffer||(this.boundsBuffer=e.createVertexBuffer(this._boundsArray,t.rasterBoundsAttributes.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?this.video.paused||(this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE),r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,this.video)):(this.texture=new t.Texture(e,this.video,r.RGBA),this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE)),this.tiles){var i=this.tiles[n];\\\"loaded\\\"!==i.state&&(i.state=\\\"loaded\\\",i.texture=this.texture)}}},r.prototype.serialize=function(){return{type:\\\"video\\\",urls:this.urls,coordinates:this.coordinates}},r.prototype.hasTransition=function(){return this.video&&!this.video.paused},r}(L),O=function(e){function r(r,n,i,a){e.call(this,r,n,i,a),n.coordinates?Array.isArray(n.coordinates)&&4===n.coordinates.length&&!n.coordinates.some(function(t){return!Array.isArray(t)||2!==t.length||t.some(function(t){return\\\"number\\\"!=typeof t})})||this.fire(new t.ErrorEvent(new t.ValidationError(\\\"sources.\\\"+r,null,'\\\"coordinates\\\" property must be an array of 4 longitude/latitude array pairs'))):this.fire(new t.ErrorEvent(new t.ValidationError(\\\"sources.\\\"+r,null,'missing required property \\\"coordinates\\\"'))),n.animate&&\\\"boolean\\\"!=typeof n.animate&&this.fire(new t.ErrorEvent(new t.ValidationError(\\\"sources.\\\"+r,null,'optional \\\"animate\\\" property must be a boolean value'))),n.canvas?\\\"string\\\"==typeof n.canvas||n.canvas instanceof t.window.HTMLCanvasElement||this.fire(new t.ErrorEvent(new t.ValidationError(\\\"sources.\\\"+r,null,'\\\"canvas\\\" must be either a string representing the ID of the canvas element from which to read, or an HTMLCanvasElement instance'))):this.fire(new t.ErrorEvent(new t.ValidationError(\\\"sources.\\\"+r,null,'missing required property \\\"canvas\\\"'))),this.options=n,this.animate=void 0===n.animate||n.animate}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){this.canvas||(this.canvas=this.options.canvas instanceof t.window.HTMLCanvasElement?this.options.canvas:t.window.document.getElementById(this.options.canvas)),this.width=this.canvas.width,this.height=this.canvas.height,this._hasInvalidDimensions()?this.fire(new t.ErrorEvent(new Error(\\\"Canvas dimensions cannot be less than or equal to zero.\\\"))):(this.play=function(){this._playing=!0,this.map.triggerRepaint()},this.pause=function(){this._playing&&(this.prepare(),this._playing=!1)},this._finishLoading())},r.prototype.getCanvas=function(){return this.canvas},r.prototype.onAdd=function(t){this.map=t,this.load(),this.canvas&&this.animate&&this.play()},r.prototype.onRemove=function(){this.pause()},r.prototype.prepare=function(){var e=!1;if(this.canvas.width!==this.width&&(this.width=this.canvas.width,e=!0),this.canvas.height!==this.height&&(this.height=this.canvas.height,e=!0),!this._hasInvalidDimensions()&&0!==Object.keys(this.tiles).length){var r=this.map.painter.context,n=r.gl;for(var i in this.boundsBuffer||(this.boundsBuffer=r.createVertexBuffer(this._boundsArray,t.rasterBoundsAttributes.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?(e||this._playing)&&this.texture.update(this.canvas,{premultiply:!0}):this.texture=new t.Texture(r,this.canvas,n.RGBA,{premultiply:!0}),this.tiles){var a=this.tiles[i];\\\"loaded\\\"!==a.state&&(a.state=\\\"loaded\\\",a.texture=this.texture)}}},r.prototype.serialize=function(){return{type:\\\"canvas\\\",coordinates:this.coordinates}},r.prototype.hasTransition=function(){return this._playing},r.prototype._hasInvalidDimensions=function(){for(var t=0,e=[this.canvas.width,this.canvas.height];t<e.length;t+=1){var r=e[t];if(isNaN(r)||r<=0)return!0}return!1},r}(L),z={vector:M,raster:S,\\\"raster-dem\\\":E,geojson:C,video:P,image:L,canvas:O},I=function(e,r,n,i){var a=new z[r.type](e,r,n,i);if(a.id!==e)throw new Error(\\\"Expected Source id to be \\\"+e+\\\" instead of \\\"+a.id);return t.bindAll([\\\"load\\\",\\\"abort\\\",\\\"unload\\\",\\\"serialize\\\",\\\"prepare\\\"],a),a};function D(e,r){var n=t.identity([]);return t.translate(n,n,[1,1,0]),t.scale(n,n,[.5*e.width,.5*e.height,1]),t.multiply(n,n,e.calculatePosMatrix(r.toUnwrapped()))}function R(t,e,r,n,i){var a=function(t,e,r){if(t)for(var n=0,i=t;n<i.length;n+=1){var a=e[i[n]];if(a&&a.source===r&&\\\"fill-extrusion\\\"===a.type)return!0}else for(var o in e){var s=e[o];if(s.source===r&&\\\"fill-extrusion\\\"===s.type)return!0}return!1}(n&&n.layers,e,t.id),o=i.maxPitchScaleFactor(),s=t.tilesIn(r,o,a);s.sort(F);for(var l=[],c=0,u=s;c<u.length;c+=1){var h=u[c];l.push({wrappedTileID:h.tileID.wrapped().key,queryResults:h.tile.queryRenderedFeatures(e,t._state,h.queryGeometry,h.cameraQueryGeometry,h.scale,n,i,o,D(t.transform,h.tileID))})}var f=function(t){for(var e={},r={},n=0,i=t;n<i.length;n+=1){var a=i[n],o=a.queryResults,s=a.wrappedTileID,l=r[s]=r[s]||{};for(var c in o)for(var u=o[c],h=l[c]=l[c]||{},f=e[c]=e[c]||[],p=0,d=u;p<d.length;p+=1){var g=d[p];h[g.featureIndex]||(h[g.featureIndex]=!0,f.push(g))}}return e}(l);for(var p in f)f[p].forEach(function(e){var r=e.feature,n=t.getFeatureState(r.layer[\\\"source-layer\\\"],r.id);r.source=r.layer.source,r.layer[\\\"source-layer\\\"]&&(r.sourceLayer=r.layer[\\\"source-layer\\\"]),r.state=n});return f}function F(t,e){var r=t.tileID,n=e.tileID;return r.overscaledZ-n.overscaledZ||r.canonical.y-n.canonical.y||r.wrap-n.wrap||r.canonical.x-n.canonical.x}var B=function(t,e){this.max=t,this.onRemove=e,this.reset()};B.prototype.reset=function(){for(var t in this.data)for(var e=0,r=this.data[t];e<r.length;e+=1){var n=r[e];n.timeout&&clearTimeout(n.timeout),this.onRemove(n.value)}return this.data={},this.order=[],this},B.prototype.add=function(t,e,r){var n=this,i=t.wrapped().key;void 0===this.data[i]&&(this.data[i]=[]);var a={value:e,timeout:void 0};if(void 0!==r&&(a.timeout=setTimeout(function(){n.remove(t,a)},r)),this.data[i].push(a),this.order.push(i),this.order.length>this.max){var o=this._getAndRemoveByKey(this.order[0]);o&&this.onRemove(o)}return this},B.prototype.has=function(t){return t.wrapped().key in this.data},B.prototype.getAndRemove=function(t){return this.has(t)?this._getAndRemoveByKey(t.wrapped().key):null},B.prototype._getAndRemoveByKey=function(t){var e=this.data[t].shift();return e.timeout&&clearTimeout(e.timeout),0===this.data[t].length&&delete this.data[t],this.order.splice(this.order.indexOf(t),1),e.value},B.prototype.get=function(t){return this.has(t)?this.data[t.wrapped().key][0].value:null},B.prototype.remove=function(t,e){if(!this.has(t))return this;var r=t.wrapped().key,n=void 0===e?0:this.data[r].indexOf(e),i=this.data[r][n];return this.data[r].splice(n,1),i.timeout&&clearTimeout(i.timeout),0===this.data[r].length&&delete this.data[r],this.onRemove(i.value),this.order.splice(this.order.indexOf(r),1),this},B.prototype.setMaxSize=function(t){for(this.max=t;this.order.length>this.max;){var e=this._getAndRemoveByKey(this.order[0]);e&&this.onRemove(e)}return this};var N=function(t,e,r){this.context=t;var n=t.gl;this.buffer=n.createBuffer(),this.dynamicDraw=Boolean(r),this.context.unbindVAO(),t.bindElementBuffer.set(this.buffer),n.bufferData(n.ELEMENT_ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?n.DYNAMIC_DRAW:n.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer};N.prototype.bind=function(){this.context.bindElementBuffer.set(this.buffer)},N.prototype.updateData=function(t){var e=this.context.gl;this.context.unbindVAO(),this.bind(),e.bufferSubData(e.ELEMENT_ARRAY_BUFFER,0,t.arrayBuffer)},N.prototype.destroy=function(){var t=this.context.gl;this.buffer&&(t.deleteBuffer(this.buffer),delete this.buffer)};var j={Int8:\\\"BYTE\\\",Uint8:\\\"UNSIGNED_BYTE\\\",Int16:\\\"SHORT\\\",Uint16:\\\"UNSIGNED_SHORT\\\",Int32:\\\"INT\\\",Uint32:\\\"UNSIGNED_INT\\\",Float32:\\\"FLOAT\\\"},U=function(t,e,r,n){this.length=e.length,this.attributes=r,this.itemSize=e.bytesPerElement,this.dynamicDraw=n,this.context=t;var i=t.gl;this.buffer=i.createBuffer(),t.bindVertexBuffer.set(this.buffer),i.bufferData(i.ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?i.DYNAMIC_DRAW:i.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer};U.prototype.bind=function(){this.context.bindVertexBuffer.set(this.buffer)},U.prototype.updateData=function(t){var e=this.context.gl;this.bind(),e.bufferSubData(e.ARRAY_BUFFER,0,t.arrayBuffer)},U.prototype.enableAttributes=function(t,e){for(var r=0;r<this.attributes.length;r++){var n=this.attributes[r],i=e.attributes[n.name];void 0!==i&&t.enableVertexAttribArray(i)}},U.prototype.setVertexAttribPointers=function(t,e,r){for(var n=0;n<this.attributes.length;n++){var i=this.attributes[n],a=e.attributes[i.name];void 0!==a&&t.vertexAttribPointer(a,i.components,t[j[i.type]],!1,this.itemSize,i.offset+this.itemSize*(r||0))}},U.prototype.destroy=function(){var t=this.context.gl;this.buffer&&(t.deleteBuffer(this.buffer),delete this.buffer)};var V=function(t){this.gl=t.gl,this.default=this.getDefault(),this.current=this.default,this.dirty=!1};V.prototype.get=function(){return this.current},V.prototype.set=function(t){},V.prototype.getDefault=function(){return this.default},V.prototype.setDefault=function(){this.set(this.default)};var q=function(e){function r(){e.apply(this,arguments)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getDefault=function(){return t.Color.transparent},r.prototype.set=function(t){var e=this.current;(t.r!==e.r||t.g!==e.g||t.b!==e.b||t.a!==e.a||this.dirty)&&(this.gl.clearColor(t.r,t.g,t.b,t.a),this.current=t,this.dirty=!1)},r}(V),H=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 1},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.clearDepth(t),this.current=t,this.dirty=!1)},e}(V),G=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.clearStencil(t),this.current=t,this.dirty=!1)},e}(V),Y=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return[!0,!0,!0,!0]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||t[3]!==e[3]||this.dirty)&&(this.gl.colorMask(t[0],t[1],t[2],t[3]),this.current=t,this.dirty=!1)},e}(V),W=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.depthMask(t),this.current=t,this.dirty=!1)},e}(V),X=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 255},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.stencilMask(t),this.current=t,this.dirty=!1)},e}(V),Z=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return{func:this.gl.ALWAYS,ref:0,mask:255}},e.prototype.set=function(t){var e=this.current;(t.func!==e.func||t.ref!==e.ref||t.mask!==e.mask||this.dirty)&&(this.gl.stencilFunc(t.func,t.ref,t.mask),this.current=t,this.dirty=!1)},e}(V),J=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[t.KEEP,t.KEEP,t.KEEP]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||this.dirty)&&(this.gl.stencilOp(t[0],t[1],t[2]),this.current=t,this.dirty=!1)},e}(V),K=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.STENCIL_TEST):e.disable(e.STENCIL_TEST),this.current=t,this.dirty=!1}},e}(V),$=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return[0,1]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||this.dirty)&&(this.gl.depthRange(t[0],t[1]),this.current=t,this.dirty=!1)},e}(V),Q=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.DEPTH_TEST):e.disable(e.DEPTH_TEST),this.current=t,this.dirty=!1}},e}(V),tt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.LESS},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.depthFunc(t),this.current=t,this.dirty=!1)},e}(V),et=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.BLEND):e.disable(e.BLEND),this.current=t,this.dirty=!1}},e}(V),rt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[t.ONE,t.ZERO]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||this.dirty)&&(this.gl.blendFunc(t[0],t[1]),this.current=t,this.dirty=!1)},e}(V),nt=function(e){function r(){e.apply(this,arguments)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getDefault=function(){return t.Color.transparent},r.prototype.set=function(t){var e=this.current;(t.r!==e.r||t.g!==e.g||t.b!==e.b||t.a!==e.a||this.dirty)&&(this.gl.blendColor(t.r,t.g,t.b,t.a),this.current=t,this.dirty=!1)},r}(V),it=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.FUNC_ADD},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.blendEquation(t),this.current=t,this.dirty=!1)},e}(V),at=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.CULL_FACE):e.disable(e.CULL_FACE),this.current=t,this.dirty=!1}},e}(V),ot=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.BACK},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.cullFace(t),this.current=t,this.dirty=!1)},e}(V),st=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.CCW},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.frontFace(t),this.current=t,this.dirty=!1)},e}(V),lt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.useProgram(t),this.current=t,this.dirty=!1)},e}(V),ct=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.TEXTURE0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.activeTexture(t),this.current=t,this.dirty=!1)},e}(V),ut=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[0,0,t.drawingBufferWidth,t.drawingBufferHeight]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||t[3]!==e[3]||this.dirty)&&(this.gl.viewport(t[0],t[1],t[2],t[3]),this.current=t,this.dirty=!1)},e}(V),ht=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindFramebuffer(e.FRAMEBUFFER,t),this.current=t,this.dirty=!1}},e}(V),ft=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindRenderbuffer(e.RENDERBUFFER,t),this.current=t,this.dirty=!1}},e}(V),pt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindTexture(e.TEXTURE_2D,t),this.current=t,this.dirty=!1}},e}(V),dt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindBuffer(e.ARRAY_BUFFER,t),this.current=t,this.dirty=!1}},e}(V),gt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){var e=this.gl;e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t),this.current=t,this.dirty=!1},e}(V),vt=function(t){function e(e){t.call(this,e),this.vao=e.extVertexArrayObject}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){this.vao&&(t!==this.current||this.dirty)&&(this.vao.bindVertexArrayOES(t),this.current=t,this.dirty=!1)},e}(V),mt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 4},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_ALIGNMENT,t),this.current=t,this.dirty=!1}},e}(V),yt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t),this.current=t,this.dirty=!1}},e}(V),xt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,t),this.current=t,this.dirty=!1}},e}(V),bt=function(t){function e(e,r){t.call(this,e),this.context=e,this.parent=r}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e}(V),_t=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setDirty=function(){this.dirty=!0},e.prototype.set=function(t){if(t!==this.current||this.dirty){this.context.bindFramebuffer.set(this.parent);var e=this.gl;e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0),this.current=t,this.dirty=!1}},e}(bt),wt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){if(t!==this.current||this.dirty){this.context.bindFramebuffer.set(this.parent);var e=this.gl;e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,t),this.current=t,this.dirty=!1}},e}(bt),kt=function(t,e,r){this.context=t,this.width=e,this.height=r;var n=t.gl,i=this.framebuffer=n.createFramebuffer();this.colorAttachment=new _t(t,i),this.depthAttachment=new wt(t,i)};kt.prototype.destroy=function(){var t=this.context.gl,e=this.colorAttachment.get();e&&t.deleteTexture(e);var r=this.depthAttachment.get();r&&t.deleteRenderbuffer(r),t.deleteFramebuffer(this.framebuffer)};var Tt=function(t,e,r){this.func=t,this.mask=e,this.range=r};Tt.ReadOnly=!1,Tt.ReadWrite=!0,Tt.disabled=new Tt(519,Tt.ReadOnly,[0,1]);var At=function(t,e,r,n,i,a){this.test=t,this.ref=e,this.mask=r,this.fail=n,this.depthFail=i,this.pass=a};At.disabled=new At({func:519,mask:0},0,0,7680,7680,7680);var Mt=function(t,e,r){this.blendFunction=t,this.blendColor=e,this.mask=r};Mt.disabled=new Mt(Mt.Replace=[1,0],t.Color.transparent,[!1,!1,!1,!1]),Mt.unblended=new Mt(Mt.Replace,t.Color.transparent,[!0,!0,!0,!0]),Mt.alphaBlended=new Mt([1,771],t.Color.transparent,[!0,!0,!0,!0]);var St=function(t,e,r){this.enable=t,this.mode=e,this.frontFace=r};St.disabled=new St(!1,1029,2305),St.backCCW=new St(!0,1029,2305);var Et=function(t){this.gl=t,this.extVertexArrayObject=this.gl.getExtension(\\\"OES_vertex_array_object\\\"),this.clearColor=new q(this),this.clearDepth=new H(this),this.clearStencil=new G(this),this.colorMask=new Y(this),this.depthMask=new W(this),this.stencilMask=new X(this),this.stencilFunc=new Z(this),this.stencilOp=new J(this),this.stencilTest=new K(this),this.depthRange=new $(this),this.depthTest=new Q(this),this.depthFunc=new tt(this),this.blend=new et(this),this.blendFunc=new rt(this),this.blendColor=new nt(this),this.blendEquation=new it(this),this.cullFace=new at(this),this.cullFaceSide=new ot(this),this.frontFace=new st(this),this.program=new lt(this),this.activeTexture=new ct(this),this.viewport=new ut(this),this.bindFramebuffer=new ht(this),this.bindRenderbuffer=new ft(this),this.bindTexture=new pt(this),this.bindVertexBuffer=new dt(this),this.bindElementBuffer=new gt(this),this.bindVertexArrayOES=this.extVertexArrayObject&&new vt(this),this.pixelStoreUnpack=new mt(this),this.pixelStoreUnpackPremultiplyAlpha=new yt(this),this.pixelStoreUnpackFlipY=new xt(this),this.extTextureFilterAnisotropic=t.getExtension(\\\"EXT_texture_filter_anisotropic\\\")||t.getExtension(\\\"MOZ_EXT_texture_filter_anisotropic\\\")||t.getExtension(\\\"WEBKIT_EXT_texture_filter_anisotropic\\\"),this.extTextureFilterAnisotropic&&(this.extTextureFilterAnisotropicMax=t.getParameter(this.extTextureFilterAnisotropic.MAX_TEXTURE_MAX_ANISOTROPY_EXT)),this.extTextureHalfFloat=t.getExtension(\\\"OES_texture_half_float\\\"),this.extTextureHalfFloat&&t.getExtension(\\\"OES_texture_half_float_linear\\\")};Et.prototype.setDefault=function(){this.unbindVAO(),this.clearColor.setDefault(),this.clearDepth.setDefault(),this.clearStencil.setDefault(),this.colorMask.setDefault(),this.depthMask.setDefault(),this.stencilMask.setDefault(),this.stencilFunc.setDefault(),this.stencilOp.setDefault(),this.stencilTest.setDefault(),this.depthRange.setDefault(),this.depthTest.setDefault(),this.depthFunc.setDefault(),this.blend.setDefault(),this.blendFunc.setDefault(),this.blendColor.setDefault(),this.blendEquation.setDefault(),this.cullFace.setDefault(),this.cullFaceSide.setDefault(),this.frontFace.setDefault(),this.program.setDefault(),this.activeTexture.setDefault(),this.bindFramebuffer.setDefault(),this.pixelStoreUnpack.setDefault(),this.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.pixelStoreUnpackFlipY.setDefault()},Et.prototype.setDirty=function(){this.clearColor.dirty=!0,this.clearDepth.dirty=!0,this.clearStencil.dirty=!0,this.colorMask.dirty=!0,this.depthMask.dirty=!0,this.stencilMask.dirty=!0,this.stencilFunc.dirty=!0,this.stencilOp.dirty=!0,this.stencilTest.dirty=!0,this.depthRange.dirty=!0,this.depthTest.dirty=!0,this.depthFunc.dirty=!0,this.blend.dirty=!0,this.blendFunc.dirty=!0,this.blendColor.dirty=!0,this.blendEquation.dirty=!0,this.cullFace.dirty=!0,this.cullFaceSide.dirty=!0,this.frontFace.dirty=!0,this.program.dirty=!0,this.activeTexture.dirty=!0,this.viewport.dirty=!0,this.bindFramebuffer.dirty=!0,this.bindRenderbuffer.dirty=!0,this.bindTexture.dirty=!0,this.bindVertexBuffer.dirty=!0,this.bindElementBuffer.dirty=!0,this.extVertexArrayObject&&(this.bindVertexArrayOES.dirty=!0),this.pixelStoreUnpack.dirty=!0,this.pixelStoreUnpackPremultiplyAlpha.dirty=!0,this.pixelStoreUnpackFlipY.dirty=!0},Et.prototype.createIndexBuffer=function(t,e){return new N(this,t,e)},Et.prototype.createVertexBuffer=function(t,e,r){return new U(this,t,e,r)},Et.prototype.createRenderbuffer=function(t,e,r){var n=this.gl,i=n.createRenderbuffer();return this.bindRenderbuffer.set(i),n.renderbufferStorage(n.RENDERBUFFER,t,e,r),this.bindRenderbuffer.set(null),i},Et.prototype.createFramebuffer=function(t,e){return new kt(this,t,e)},Et.prototype.clear=function(t){var e=t.color,r=t.depth,n=this.gl,i=0;e&&(i|=n.COLOR_BUFFER_BIT,this.clearColor.set(e),this.colorMask.set([!0,!0,!0,!0])),void 0!==r&&(i|=n.DEPTH_BUFFER_BIT,this.depthRange.set([0,1]),this.clearDepth.set(r),this.depthMask.set(!0)),n.clear(i)},Et.prototype.setCullFace=function(t){!1===t.enable?this.cullFace.set(!1):(this.cullFace.set(!0),this.cullFaceSide.set(t.mode),this.frontFace.set(t.frontFace))},Et.prototype.setDepthMode=function(t){t.func!==this.gl.ALWAYS||t.mask?(this.depthTest.set(!0),this.depthFunc.set(t.func),this.depthMask.set(t.mask),this.depthRange.set(t.range)):this.depthTest.set(!1)},Et.prototype.setStencilMode=function(t){t.test.func!==this.gl.ALWAYS||t.mask?(this.stencilTest.set(!0),this.stencilMask.set(t.mask),this.stencilOp.set([t.fail,t.depthFail,t.pass]),this.stencilFunc.set({func:t.test.func,ref:t.ref,mask:t.test.mask})):this.stencilTest.set(!1)},Et.prototype.setColorMode=function(e){t.deepEqual(e.blendFunction,Mt.Replace)?this.blend.set(!1):(this.blend.set(!0),this.blendFunc.set(e.blendFunction),this.blendColor.set(e.blendColor)),this.colorMask.set(e.mask)},Et.prototype.unbindVAO=function(){this.extVertexArrayObject&&this.bindVertexArrayOES.set(null)};var Ct=function(e){function r(r,n,i){var a=this;e.call(this),this.id=r,this.dispatcher=i,this.on(\\\"data\\\",function(t){\\\"source\\\"===t.dataType&&\\\"metadata\\\"===t.sourceDataType&&(a._sourceLoaded=!0),a._sourceLoaded&&!a._paused&&\\\"source\\\"===t.dataType&&\\\"content\\\"===t.sourceDataType&&(a.reload(),a.transform&&a.update(a.transform))}),this.on(\\\"error\\\",function(){a._sourceErrored=!0}),this._source=I(r,n,i,this),this._tiles={},this._cache=new B(0,this._unloadTile.bind(this)),this._timers={},this._cacheTimers={},this._maxTileCacheSize=null,this._coveredTiles={},this._state=new t.SourceFeatureState}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.onAdd=function(t){this.map=t,this._maxTileCacheSize=t?t._maxTileCacheSize:null,this._source&&this._source.onAdd&&this._source.onAdd(t)},r.prototype.onRemove=function(t){this._source&&this._source.onRemove&&this._source.onRemove(t)},r.prototype.loaded=function(){if(this._sourceErrored)return!0;if(!this._sourceLoaded)return!1;for(var t in this._tiles){var e=this._tiles[t];if(\\\"loaded\\\"!==e.state&&\\\"errored\\\"!==e.state)return!1}return!0},r.prototype.getSource=function(){return this._source},r.prototype.pause=function(){this._paused=!0},r.prototype.resume=function(){if(this._paused){var t=this._shouldReloadOnResume;this._paused=!1,this._shouldReloadOnResume=!1,t&&this.reload(),this.transform&&this.update(this.transform)}},r.prototype._loadTile=function(t,e){return this._source.loadTile(t,e)},r.prototype._unloadTile=function(t){if(this._source.unloadTile)return this._source.unloadTile(t,function(){})},r.prototype._abortTile=function(t){if(this._source.abortTile)return this._source.abortTile(t,function(){})},r.prototype.serialize=function(){return this._source.serialize()},r.prototype.prepare=function(t){for(var e in this._source.prepare&&this._source.prepare(),this._state.coalesceChanges(this._tiles,this.map?this.map.painter:null),this._tiles){var r=this._tiles[e];r.upload(t),r.prepare(this.map.style.imageManager)}},r.prototype.getIds=function(){return Object.keys(this._tiles).map(Number).sort(Lt)},r.prototype.getRenderableIds=function(e){var r=this,n=[];for(var i in this._tiles)this._isIdRenderable(+i,e)&&n.push(+i);return e?n.sort(function(e,n){var i=r._tiles[e].tileID,a=r._tiles[n].tileID,o=new t.Point(i.canonical.x,i.canonical.y)._rotate(r.transform.angle),s=new t.Point(a.canonical.x,a.canonical.y)._rotate(r.transform.angle);return i.overscaledZ-a.overscaledZ||s.y-o.y||s.x-o.x}):n.sort(Lt)},r.prototype.hasRenderableParent=function(t){var e=this.findLoadedParent(t,0);return!!e&&this._isIdRenderable(e.tileID.key)},r.prototype._isIdRenderable=function(t,e){return this._tiles[t]&&this._tiles[t].hasData()&&!this._coveredTiles[t]&&(e||!this._tiles[t].holdingForFade())},r.prototype.reload=function(){if(this._paused)this._shouldReloadOnResume=!0;else for(var t in this._cache.reset(),this._tiles)\\\"errored\\\"!==this._tiles[t].state&&this._reloadTile(t,\\\"reloading\\\")},r.prototype._reloadTile=function(t,e){var r=this._tiles[t];r&&(\\\"loading\\\"!==r.state&&(r.state=e),this._loadTile(r,this._tileLoaded.bind(this,r,t,e)))},r.prototype._tileLoaded=function(e,r,n,i){if(i)return e.state=\\\"errored\\\",void(404!==i.status?this._source.fire(new t.ErrorEvent(i,{tile:e})):this.update(this.transform));e.timeAdded=t.browser.now(),\\\"expired\\\"===n&&(e.refreshedUponExpiration=!0),this._setTileReloadTimer(r,e),\\\"raster-dem\\\"===this.getSource().type&&e.dem&&this._backfillDEM(e),this._state.initializeTileState(e,this.map?this.map.painter:null),this._source.fire(new t.Event(\\\"data\\\",{dataType:\\\"source\\\",tile:e,coord:e.tileID}))},r.prototype._backfillDEM=function(t){for(var e=this.getRenderableIds(),r=0;r<e.length;r++){var n=e[r];if(t.neighboringTiles&&t.neighboringTiles[n]){var i=this.getTileByID(n);a(t,i),a(i,t)}}function a(t,e){t.needsHillshadePrepare=!0;var r=e.tileID.canonical.x-t.tileID.canonical.x,n=e.tileID.canonical.y-t.tileID.canonical.y,i=Math.pow(2,t.tileID.canonical.z),a=e.tileID.key;0===r&&0===n||Math.abs(n)>1||(Math.abs(r)>1&&(1===Math.abs(r+i)?r+=i:1===Math.abs(r-i)&&(r-=i)),e.dem&&t.dem&&(t.dem.backfillBorder(e.dem,r,n),t.neighboringTiles&&t.neighboringTiles[a]&&(t.neighboringTiles[a].backfilled=!0)))}},r.prototype.getTile=function(t){return this.getTileByID(t.key)},r.prototype.getTileByID=function(t){return this._tiles[t]},r.prototype.getZoom=function(t){return t.zoom+t.scaleZoom(t.tileSize/this._source.tileSize)},r.prototype._retainLoadedChildren=function(t,e,r,n){for(var i in this._tiles){var a=this._tiles[i];if(!(n[i]||!a.hasData()||a.tileID.overscaledZ<=e||a.tileID.overscaledZ>r)){for(var o=a.tileID;a&&a.tileID.overscaledZ>e+1;){var s=a.tileID.scaledTo(a.tileID.overscaledZ-1);(a=this._tiles[s.key])&&a.hasData()&&(o=s)}for(var l=o;l.overscaledZ>e;)if(t[(l=l.scaledTo(l.overscaledZ-1)).key]){n[o.key]=o;break}}}},r.prototype.findLoadedParent=function(t,e){for(var r=t.overscaledZ-1;r>=e;r--){var n=t.scaledTo(r);if(!n)return;var i=String(n.key),a=this._tiles[i];if(a&&a.hasData())return a;if(this._cache.has(n))return this._cache.get(n)}},r.prototype.updateCacheSize=function(t){var e=(Math.ceil(t.width/this._source.tileSize)+1)*(Math.ceil(t.height/this._source.tileSize)+1),r=Math.floor(5*e),n=\\\"number\\\"==typeof this._maxTileCacheSize?Math.min(this._maxTileCacheSize,r):r;this._cache.setMaxSize(n)},r.prototype.handleWrapJump=function(t){var e=(t-(void 0===this._prevLng?t:this._prevLng))/360,r=Math.round(e);if(this._prevLng=t,r){var n={};for(var i in this._tiles){var a=this._tiles[i];a.tileID=a.tileID.unwrapTo(a.tileID.wrap+r),n[a.tileID.key]=a}for(var o in this._tiles=n,this._timers)clearTimeout(this._timers[o]),delete this._timers[o];for(var s in this._tiles){var l=this._tiles[s];this._setTileReloadTimer(s,l)}}},r.prototype.update=function(e){var n=this;if(this.transform=e,this._sourceLoaded&&!this._paused){var i;this.updateCacheSize(e),this.handleWrapJump(this.transform.center.lng),this._coveredTiles={},this.used?this._source.tileID?i=e.getVisibleUnwrappedCoordinates(this._source.tileID).map(function(e){return new t.OverscaledTileID(e.canonical.z,e.wrap,e.canonical.z,e.canonical.x,e.canonical.y)}):(i=e.coveringTiles({tileSize:this._source.tileSize,minzoom:this._source.minzoom,maxzoom:this._source.maxzoom,roundZoom:this._source.roundZoom,reparseOverscaled:this._source.reparseOverscaled}),this._source.hasTile&&(i=i.filter(function(t){return n._source.hasTile(t)}))):i=[];var a=(this._source.roundZoom?Math.round:Math.floor)(this.getZoom(e)),o=Math.max(a-r.maxOverzooming,this._source.minzoom),s=Math.max(a+r.maxUnderzooming,this._source.minzoom),l=this._updateRetainedTiles(i,a);if(Pt(this._source.type)){for(var c={},u={},h=0,f=Object.keys(l);h<f.length;h+=1){var p=f[h],d=l[p],g=this._tiles[p];if(g&&!(g.fadeEndTime&&g.fadeEndTime<=t.browser.now())){var v=this.findLoadedParent(d,o);v&&(this._addTile(v.tileID),c[v.tileID.key]=v.tileID),u[p]=d}}for(var m in this._retainLoadedChildren(u,a,s,l),c)l[m]||(this._coveredTiles[m]=!0,l[m]=c[m])}for(var y in l)this._tiles[y].clearFadeHold();for(var x=0,b=t.keysDifference(this._tiles,l);x<b.length;x+=1){var _=b[x],w=this._tiles[_];w.hasSymbolBuckets&&!w.holdingForFade()?w.setHoldDuration(this.map._fadeDuration):w.hasSymbolBuckets&&!w.symbolFadeFinished()||this._removeTile(_)}}},r.prototype.releaseSymbolFadeTiles=function(){for(var t in this._tiles)this._tiles[t].holdingForFade()&&this._removeTile(t)},r.prototype._updateRetainedTiles=function(t,e){for(var n={},i={},a=Math.max(e-r.maxOverzooming,this._source.minzoom),o=Math.max(e+r.maxUnderzooming,this._source.minzoom),s={},l=0,c=t;l<c.length;l+=1){var u=c[l],h=this._addTile(u);n[u.key]=u,h.hasData()||e<this._source.maxzoom&&(s[u.key]=u)}this._retainLoadedChildren(s,e,o,n);for(var f=0,p=t;f<p.length;f+=1){var d=p[f],g=this._tiles[d.key];if(!g.hasData()){if(e+1>this._source.maxzoom){var v=d.children(this._source.maxzoom)[0],m=this.getTile(v);if(m&&m.hasData()){n[v.key]=v;continue}}else{var y=d.children(this._source.maxzoom);if(n[y[0].key]&&n[y[1].key]&&n[y[2].key]&&n[y[3].key])continue}for(var x=g.wasRequested(),b=d.overscaledZ-1;b>=a;--b){var _=d.scaledTo(b);if(i[_.key])break;if(i[_.key]=!0,!(g=this.getTile(_))&&x&&(g=this._addTile(_)),g&&(n[_.key]=_,x=g.wasRequested(),g.hasData()))break}}}return n},r.prototype._addTile=function(e){var r=this._tiles[e.key];if(r)return r;(r=this._cache.getAndRemove(e))&&(this._setTileReloadTimer(e.key,r),r.tileID=e,this._state.initializeTileState(r,this.map?this.map.painter:null),this._cacheTimers[e.key]&&(clearTimeout(this._cacheTimers[e.key]),delete this._cacheTimers[e.key],this._setTileReloadTimer(e.key,r)));var n=Boolean(r);return n||(r=new t.Tile(e,this._source.tileSize*e.overscaleFactor()),this._loadTile(r,this._tileLoaded.bind(this,r,e.key,r.state))),r?(r.uses++,this._tiles[e.key]=r,n||this._source.fire(new t.Event(\\\"dataloading\\\",{tile:r,coord:r.tileID,dataType:\\\"source\\\"})),r):null},r.prototype._setTileReloadTimer=function(t,e){var r=this;t in this._timers&&(clearTimeout(this._timers[t]),delete this._timers[t]);var n=e.getExpiryTimeout();n&&(this._timers[t]=setTimeout(function(){r._reloadTile(t,\\\"expired\\\"),delete r._timers[t]},n))},r.prototype._removeTile=function(t){var e=this._tiles[t];e&&(e.uses--,delete this._tiles[t],this._timers[t]&&(clearTimeout(this._timers[t]),delete this._timers[t]),e.uses>0||(e.hasData()?this._cache.add(e.tileID,e,e.getExpiryTimeout()):(e.aborted=!0,this._abortTile(e),this._unloadTile(e))))},r.prototype.clearTiles=function(){for(var t in this._shouldReloadOnResume=!1,this._paused=!1,this._tiles)this._removeTile(t);this._cache.reset()},r.prototype.tilesIn=function(e,r,n){var i=this,a=[],o=this.transform;if(!o)return a;for(var s=n?o.getCameraQueryGeometry(e):e,l=e.map(function(t){return o.pointCoordinate(t)}),c=s.map(function(t){return o.pointCoordinate(t)}),u=this.getIds(),h=1/0,f=1/0,p=-1/0,d=-1/0,g=0,v=c;g<v.length;g+=1){var m=v[g];h=Math.min(h,m.x),f=Math.min(f,m.y),p=Math.max(p,m.x),d=Math.max(d,m.y)}for(var y=function(e){var n=i._tiles[u[e]];if(!n.holdingForFade()){var s=n.tileID,g=Math.pow(2,o.zoom-n.tileID.overscaledZ),v=r*n.queryPadding*t.EXTENT/n.tileSize/g,m=[s.getTilePoint(new t.MercatorCoordinate(h,f)),s.getTilePoint(new t.MercatorCoordinate(p,d))];if(m[0].x-v<t.EXTENT&&m[0].y-v<t.EXTENT&&m[1].x+v>=0&&m[1].y+v>=0){var y=l.map(function(t){return s.getTilePoint(t)}),x=c.map(function(t){return s.getTilePoint(t)});a.push({tile:n,tileID:s,queryGeometry:y,cameraQueryGeometry:x,scale:g})}}},x=0;x<u.length;x++)y(x);return a},r.prototype.getVisibleCoordinates=function(t){for(var e=this,r=this.getRenderableIds(t).map(function(t){return e._tiles[t].tileID}),n=0,i=r;n<i.length;n+=1){var a=i[n];a.posMatrix=this.transform.calculatePosMatrix(a.toUnwrapped())}return r},r.prototype.hasTransition=function(){if(this._source.hasTransition())return!0;if(Pt(this._source.type))for(var e in this._tiles){var r=this._tiles[e];if(void 0!==r.fadeEndTime&&r.fadeEndTime>=t.browser.now())return!0}return!1},r.prototype.setFeatureState=function(t,e,r){t=t||\\\"_geojsonTileLayer\\\",this._state.updateState(t,e,r)},r.prototype.removeFeatureState=function(t,e,r){t=t||\\\"_geojsonTileLayer\\\",this._state.removeFeatureState(t,e,r)},r.prototype.getFeatureState=function(t,e){return t=t||\\\"_geojsonTileLayer\\\",this._state.getState(t,e)},r}(t.Evented);function Lt(t,e){return t%32-e%32||e-t}function Pt(t){return\\\"raster\\\"===t||\\\"image\\\"===t||\\\"video\\\"===t}function Ot(){return new t.window.Worker(Jn.workerUrl)}Ct.maxOverzooming=10,Ct.maxUnderzooming=3;var zt=function(){this.active={}};zt.prototype.acquire=function(t){if(!this.workers)for(this.workers=[];this.workers.length<zt.workerCount;)this.workers.push(new Ot);return this.active[t]=!0,this.workers.slice()},zt.prototype.release=function(t){delete this.active[t],0===Object.keys(this.active).length&&(this.workers.forEach(function(t){t.terminate()}),this.workers=null)};var It,Dt=Math.floor(t.browser.hardwareConcurrency/2);function Rt(e,r){var n={};for(var i in e)\\\"ref\\\"!==i&&(n[i]=e[i]);return t.refProperties.forEach(function(t){t in r&&(n[t]=r[t])}),n}function Ft(t){t=t.slice();for(var e=Object.create(null),r=0;r<t.length;r++)e[t[r].id]=t[r];for(var n=0;n<t.length;n++)\\\"ref\\\"in t[n]&&(t[n]=Rt(t[n],e[t[n].ref]));return t}zt.workerCount=Math.max(Math.min(Dt,6),1);var Bt={setStyle:\\\"setStyle\\\",addLayer:\\\"addLayer\\\",removeLayer:\\\"removeLayer\\\",setPaintProperty:\\\"setPaintProperty\\\",setLayoutProperty:\\\"setLayoutProperty\\\",setFilter:\\\"setFilter\\\",addSource:\\\"addSource\\\",removeSource:\\\"removeSource\\\",setGeoJSONSourceData:\\\"setGeoJSONSourceData\\\",setLayerZoomRange:\\\"setLayerZoomRange\\\",setLayerProperty:\\\"setLayerProperty\\\",setCenter:\\\"setCenter\\\",setZoom:\\\"setZoom\\\",setBearing:\\\"setBearing\\\",setPitch:\\\"setPitch\\\",setSprite:\\\"setSprite\\\",setGlyphs:\\\"setGlyphs\\\",setTransition:\\\"setTransition\\\",setLight:\\\"setLight\\\"};function Nt(t,e,r){r.push({command:Bt.addSource,args:[t,e[t]]})}function jt(t,e,r){e.push({command:Bt.removeSource,args:[t]}),r[t]=!0}function Ut(t,e,r,n){jt(t,r,n),Nt(t,e,r)}function Vt(e,r,n){var i;for(i in e[n])if(e[n].hasOwnProperty(i)&&\\\"data\\\"!==i&&!t.deepEqual(e[n][i],r[n][i]))return!1;for(i in r[n])if(r[n].hasOwnProperty(i)&&\\\"data\\\"!==i&&!t.deepEqual(e[n][i],r[n][i]))return!1;return!0}function qt(e,r,n,i,a,o){var s;for(s in r=r||{},e=e||{})e.hasOwnProperty(s)&&(t.deepEqual(e[s],r[s])||n.push({command:o,args:[i,s,r[s],a]}));for(s in r)r.hasOwnProperty(s)&&!e.hasOwnProperty(s)&&(t.deepEqual(e[s],r[s])||n.push({command:o,args:[i,s,r[s],a]}))}function Ht(t){return t.id}function Gt(t,e){return t[e.id]=e,t}var Yt=function(t,e,r){var n=this.boxCells=[],i=this.circleCells=[];this.xCellCount=Math.ceil(t/r),this.yCellCount=Math.ceil(e/r);for(var a=0;a<this.xCellCount*this.yCellCount;a++)n.push([]),i.push([]);this.circleKeys=[],this.boxKeys=[],this.bboxes=[],this.circles=[],this.width=t,this.height=e,this.xScale=this.xCellCount/t,this.yScale=this.yCellCount/e,this.boxUid=0,this.circleUid=0};function Wt(e,r,n,i,a){var o=t.create();return r?(t.scale(o,o,[1/a,1/a,1]),n||t.rotateZ(o,o,i.angle)):t.multiply(o,i.labelPlaneMatrix,e),o}function Xt(e,r,n,i,a){if(r){var o=t.clone(e);return t.scale(o,o,[a,a,1]),n||t.rotateZ(o,o,-i.angle),o}return i.glCoordMatrix}function Zt(e,r){var n=[e.x,e.y,0,1];ae(n,n,r);var i=n[3];return{point:new t.Point(n[0]/i,n[1]/i),signedDistanceFromCamera:i}}function Jt(t,e){var r=t[0]/t[3],n=t[1]/t[3];return r>=-e[0]&&r<=e[0]&&n>=-e[1]&&n<=e[1]}function Kt(e,r,n,i,a,o,s,l){var c=i?e.textSizeData:e.iconSizeData,u=t.evaluateSizeForZoom(c,n.transform.zoom),h=[256/n.width*2+1,256/n.height*2+1],f=i?e.text.dynamicLayoutVertexArray:e.icon.dynamicLayoutVertexArray;f.clear();for(var p=e.lineVertexArray,d=i?e.text.placedSymbolArray:e.icon.placedSymbolArray,g=n.transform.width/n.transform.height,v=!1,m=0;m<d.length;m++){var y=d.get(m);if(y.hidden||y.writingMode===t.WritingMode.vertical&&!v)ie(y.numGlyphs,f);else{v=!1;var x=[y.anchorX,y.anchorY,0,1];if(t.transformMat4(x,x,r),Jt(x,h)){var b=.5+x[3]/n.transform.cameraToCenterDistance*.5,_=t.evaluateSizeForFeature(c,u,y),w=s?_*b:_/b,k=new t.Point(y.anchorX,y.anchorY),T=Zt(k,a).point,A={},M=te(y,w,!1,l,r,a,o,e.glyphOffsetArray,p,f,T,k,A,g);v=M.useVertical,(M.notEnoughRoom||v||M.needsFlipping&&te(y,w,!0,l,r,a,o,e.glyphOffsetArray,p,f,T,k,A,g).notEnoughRoom)&&ie(y.numGlyphs,f)}else ie(y.numGlyphs,f)}}i?e.text.dynamicLayoutVertexBuffer.updateData(f):e.icon.dynamicLayoutVertexBuffer.updateData(f)}function $t(t,e,r,n,i,a,o,s,l,c,u,h){var f=s.glyphStartIndex+s.numGlyphs,p=s.lineStartIndex,d=s.lineStartIndex+s.lineLength,g=e.getoffsetX(s.glyphStartIndex),v=e.getoffsetX(f-1),m=re(t*g,r,n,i,a,o,s.segment,p,d,l,c,u,h);if(!m)return null;var y=re(t*v,r,n,i,a,o,s.segment,p,d,l,c,u,h);return y?{first:m,last:y}:null}function Qt(e,r,n,i){return e===t.WritingMode.horizontal&&Math.abs(n.y-r.y)>Math.abs(n.x-r.x)*i?{useVertical:!0}:(e===t.WritingMode.vertical?r.y<n.y:r.x>n.x)?{needsFlipping:!0}:null}function te(e,r,n,i,a,o,s,l,c,u,h,f,p,d){var g,v=r/24,m=e.lineOffsetX*v,y=e.lineOffsetY*v;if(e.numGlyphs>1){var x=e.glyphStartIndex+e.numGlyphs,b=e.lineStartIndex,_=e.lineStartIndex+e.lineLength,w=$t(v,l,m,y,n,h,f,e,c,o,p,!1);if(!w)return{notEnoughRoom:!0};var k=Zt(w.first.point,s).point,T=Zt(w.last.point,s).point;if(i&&!n){var A=Qt(e.writingMode,k,T,d);if(A)return A}g=[w.first];for(var M=e.glyphStartIndex+1;M<x-1;M++)g.push(re(v*l.getoffsetX(M),m,y,n,h,f,e.segment,b,_,c,o,p,!1));g.push(w.last)}else{if(i&&!n){var S=Zt(f,a).point,E=e.lineStartIndex+e.segment+1,C=new t.Point(c.getx(E),c.gety(E)),L=Zt(C,a),P=L.signedDistanceFromCamera>0?L.point:ee(f,C,S,1,a),O=Qt(e.writingMode,S,P,d);if(O)return O}var z=re(v*l.getoffsetX(e.glyphStartIndex),m,y,n,h,f,e.segment,e.lineStartIndex,e.lineStartIndex+e.lineLength,c,o,p,!1);if(!z)return{notEnoughRoom:!0};g=[z]}for(var I=0,D=g;I<D.length;I+=1){var R=D[I];t.addDynamicAttributes(u,R.point,R.angle)}return{}}function ee(t,e,r,n,i){var a=Zt(t.add(t.sub(e)._unit()),i).point,o=r.sub(a);return r.add(o._mult(n/o.mag()))}function re(e,r,n,i,a,o,s,l,c,u,h,f,p){var d=i?e-r:e+r,g=d>0?1:-1,v=0;i&&(g*=-1,v=Math.PI),g<0&&(v+=Math.PI);for(var m=g>0?l+s:l+s+1,y=m,x=a,b=a,_=0,w=0,k=Math.abs(d);_+w<=k;){if((m+=g)<l||m>=c)return null;if(b=x,void 0===(x=f[m])){var T=new t.Point(u.getx(m),u.gety(m)),A=Zt(T,h);if(A.signedDistanceFromCamera>0)x=f[m]=A.point;else{var M=m-g;x=ee(0===_?o:new t.Point(u.getx(M),u.gety(M)),T,b,k-_+1,h)}}_+=w,w=b.dist(x)}var S=(k-_)/w,E=x.sub(b),C=E.mult(S)._add(b);return C._add(E._unit()._perp()._mult(n*g)),{point:C,angle:v+Math.atan2(x.y-b.y,x.x-b.x),tileDistance:p?{prevTileDistance:m-g===y?0:u.gettileUnitDistanceFromAnchor(m-g),lastSegmentViewportDistance:k-_}:null}}Yt.prototype.keysLength=function(){return this.boxKeys.length+this.circleKeys.length},Yt.prototype.insert=function(t,e,r,n,i){this._forEachCell(e,r,n,i,this._insertBoxCell,this.boxUid++),this.boxKeys.push(t),this.bboxes.push(e),this.bboxes.push(r),this.bboxes.push(n),this.bboxes.push(i)},Yt.prototype.insertCircle=function(t,e,r,n){this._forEachCell(e-n,r-n,e+n,r+n,this._insertCircleCell,this.circleUid++),this.circleKeys.push(t),this.circles.push(e),this.circles.push(r),this.circles.push(n)},Yt.prototype._insertBoxCell=function(t,e,r,n,i,a){this.boxCells[i].push(a)},Yt.prototype._insertCircleCell=function(t,e,r,n,i,a){this.circleCells[i].push(a)},Yt.prototype._query=function(t,e,r,n,i,a){if(r<0||t>this.width||n<0||e>this.height)return!i&&[];var o=[];if(t<=0&&e<=0&&this.width<=r&&this.height<=n){if(i)return!0;for(var s=0;s<this.boxKeys.length;s++)o.push({key:this.boxKeys[s],x1:this.bboxes[4*s],y1:this.bboxes[4*s+1],x2:this.bboxes[4*s+2],y2:this.bboxes[4*s+3]});for(var l=0;l<this.circleKeys.length;l++){var c=this.circles[3*l],u=this.circles[3*l+1],h=this.circles[3*l+2];o.push({key:this.circleKeys[l],x1:c-h,y1:u-h,x2:c+h,y2:u+h})}return a?o.filter(a):o}var f={hitTest:i,seenUids:{box:{},circle:{}}};return this._forEachCell(t,e,r,n,this._queryCell,o,f,a),i?o.length>0:o},Yt.prototype._queryCircle=function(t,e,r,n,i){var a=t-r,o=t+r,s=e-r,l=e+r;if(o<0||a>this.width||l<0||s>this.height)return!n&&[];var c=[],u={hitTest:n,circle:{x:t,y:e,radius:r},seenUids:{box:{},circle:{}}};return this._forEachCell(a,s,o,l,this._queryCellCircle,c,u,i),n?c.length>0:c},Yt.prototype.query=function(t,e,r,n,i){return this._query(t,e,r,n,!1,i)},Yt.prototype.hitTest=function(t,e,r,n,i){return this._query(t,e,r,n,!0,i)},Yt.prototype.hitTestCircle=function(t,e,r,n){return this._queryCircle(t,e,r,!0,n)},Yt.prototype._queryCell=function(t,e,r,n,i,a,o,s){var l=o.seenUids,c=this.boxCells[i];if(null!==c)for(var u=this.bboxes,h=0,f=c;h<f.length;h+=1){var p=f[h];if(!l.box[p]){l.box[p]=!0;var d=4*p;if(t<=u[d+2]&&e<=u[d+3]&&r>=u[d+0]&&n>=u[d+1]&&(!s||s(this.boxKeys[p]))){if(o.hitTest)return a.push(!0),!0;a.push({key:this.boxKeys[p],x1:u[d],y1:u[d+1],x2:u[d+2],y2:u[d+3]})}}}var g=this.circleCells[i];if(null!==g)for(var v=this.circles,m=0,y=g;m<y.length;m+=1){var x=y[m];if(!l.circle[x]){l.circle[x]=!0;var b=3*x;if(this._circleAndRectCollide(v[b],v[b+1],v[b+2],t,e,r,n)&&(!s||s(this.circleKeys[x]))){if(o.hitTest)return a.push(!0),!0;var _=v[b],w=v[b+1],k=v[b+2];a.push({key:this.circleKeys[x],x1:_-k,y1:w-k,x2:_+k,y2:w+k})}}}},Yt.prototype._queryCellCircle=function(t,e,r,n,i,a,o,s){var l=o.circle,c=o.seenUids,u=this.boxCells[i];if(null!==u)for(var h=this.bboxes,f=0,p=u;f<p.length;f+=1){var d=p[f];if(!c.box[d]){c.box[d]=!0;var g=4*d;if(this._circleAndRectCollide(l.x,l.y,l.radius,h[g+0],h[g+1],h[g+2],h[g+3])&&(!s||s(this.boxKeys[d])))return a.push(!0),!0}}var v=this.circleCells[i];if(null!==v)for(var m=this.circles,y=0,x=v;y<x.length;y+=1){var b=x[y];if(!c.circle[b]){c.circle[b]=!0;var _=3*b;if(this._circlesCollide(m[_],m[_+1],m[_+2],l.x,l.y,l.radius)&&(!s||s(this.circleKeys[b])))return a.push(!0),!0}}},Yt.prototype._forEachCell=function(t,e,r,n,i,a,o,s){for(var l=this._convertToXCellCoord(t),c=this._convertToYCellCoord(e),u=this._convertToXCellCoord(r),h=this._convertToYCellCoord(n),f=l;f<=u;f++)for(var p=c;p<=h;p++){var d=this.xCellCount*p+f;if(i.call(this,t,e,r,n,d,a,o,s))return}},Yt.prototype._convertToXCellCoord=function(t){return Math.max(0,Math.min(this.xCellCount-1,Math.floor(t*this.xScale)))},Yt.prototype._convertToYCellCoord=function(t){return Math.max(0,Math.min(this.yCellCount-1,Math.floor(t*this.yScale)))},Yt.prototype._circlesCollide=function(t,e,r,n,i,a){var o=n-t,s=i-e,l=r+a;return l*l>o*o+s*s},Yt.prototype._circleAndRectCollide=function(t,e,r,n,i,a,o){var s=(a-n)/2,l=Math.abs(t-(n+s));if(l>s+r)return!1;var c=(o-i)/2,u=Math.abs(e-(i+c));if(u>c+r)return!1;if(l<=s||u<=c)return!0;var h=l-s,f=u-c;return h*h+f*f<=r*r};var ne=new Float32Array([-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0]);function ie(t,e){for(var r=0;r<t;r++){var n=e.length;e.resize(n+4),e.float32.set(ne,3*n)}}function ae(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[4]*i+r[12],t[1]=r[1]*n+r[5]*i+r[13],t[3]=r[3]*n+r[7]*i+r[15],t}var oe=function(t,e,r){void 0===e&&(e=new Yt(t.width+200,t.height+200,25)),void 0===r&&(r=new Yt(t.width+200,t.height+200,25)),this.transform=t,this.grid=e,this.ignoredGrid=r,this.pitchfactor=Math.cos(t._pitch)*t.cameraToCenterDistance,this.screenRightBoundary=t.width+100,this.screenBottomBoundary=t.height+100,this.gridRightBoundary=t.width+200,this.gridBottomBoundary=t.height+200};function se(t,e,r){t[e+4]=r?1:0}function le(e,r,n){return r*(t.EXTENT/(e.tileSize*Math.pow(2,n-e.tileID.overscaledZ)))}oe.prototype.placeCollisionBox=function(t,e,r,n,i){var a=this.projectAndGetPerspectiveRatio(n,t.anchorPointX,t.anchorPointY),o=r*a.perspectiveRatio,s=t.x1*o+a.point.x,l=t.y1*o+a.point.y,c=t.x2*o+a.point.x,u=t.y2*o+a.point.y;return!this.isInsideGrid(s,l,c,u)||!e&&this.grid.hitTest(s,l,c,u,i)?{box:[],offscreen:!1}:{box:[s,l,c,u],offscreen:this.isOffscreen(s,l,c,u)}},oe.prototype.approximateTileDistance=function(t,e,r,n,i){var a=i?1:n/this.pitchfactor,o=t.lastSegmentViewportDistance*r;return t.prevTileDistance+o+(a-1)*o*Math.abs(Math.sin(e))},oe.prototype.placeCollisionCircles=function(e,r,n,i,a,o,s,l,c,u,h,f,p){var d=[],g=this.projectAnchor(c,a.anchorX,a.anchorY),v=l/24,m=a.lineOffsetX*l,y=a.lineOffsetY*l,x=new t.Point(a.anchorX,a.anchorY),b=$t(v,s,m,y,!1,Zt(x,u).point,x,a,o,u,{},!0),_=!1,w=!1,k=!0,T=g.perspectiveRatio*i,A=1/(i*n),M=0,S=0;b&&(M=this.approximateTileDistance(b.first.tileDistance,b.first.angle,A,g.cameraDistance,f),S=this.approximateTileDistance(b.last.tileDistance,b.last.angle,A,g.cameraDistance,f));for(var E=0;E<e.length;E+=5){var C=e[E],L=e[E+1],P=e[E+2],O=e[E+3];if(!b||O<-M||O>S)se(e,E,!1);else{var z=this.projectPoint(c,C,L),I=P*T;if(d.length>0){var D=z.x-d[d.length-4],R=z.y-d[d.length-3];if(I*I*2>D*D+R*R&&E+8<e.length){var F=e[E+8];if(F>-M&&F<S){se(e,E,!1);continue}}}var B=E/5;d.push(z.x,z.y,I,B),se(e,E,!0);var N=z.x-I,j=z.y-I,U=z.x+I,V=z.y+I;if(k=k&&this.isOffscreen(N,j,U,V),w=w||this.isInsideGrid(N,j,U,V),!r&&this.grid.hitTestCircle(z.x,z.y,I,p)){if(!h)return{circles:[],offscreen:!1};_=!0}}}return{circles:_||!w?[]:d,offscreen:k}},oe.prototype.queryRenderedSymbols=function(e){if(0===e.length||0===this.grid.keysLength()&&0===this.ignoredGrid.keysLength())return{};for(var r=[],n=1/0,i=1/0,a=-1/0,o=-1/0,s=0,l=e;s<l.length;s+=1){var c=l[s],u=new t.Point(c.x+100,c.y+100);n=Math.min(n,u.x),i=Math.min(i,u.y),a=Math.max(a,u.x),o=Math.max(o,u.y),r.push(u)}for(var h={},f={},p=0,d=this.grid.query(n,i,a,o).concat(this.ignoredGrid.query(n,i,a,o));p<d.length;p+=1){var g=d[p],v=g.key;if(void 0===h[v.bucketInstanceId]&&(h[v.bucketInstanceId]={}),!h[v.bucketInstanceId][v.featureIndex]){var m=[new t.Point(g.x1,g.y1),new t.Point(g.x2,g.y1),new t.Point(g.x2,g.y2),new t.Point(g.x1,g.y2)];t.polygonIntersectsPolygon(r,m)&&(h[v.bucketInstanceId][v.featureIndex]=!0,void 0===f[v.bucketInstanceId]&&(f[v.bucketInstanceId]=[]),f[v.bucketInstanceId].push(v.featureIndex))}}return f},oe.prototype.insertCollisionBox=function(t,e,r,n,i){var a={bucketInstanceId:r,featureIndex:n,collisionGroupID:i};(e?this.ignoredGrid:this.grid).insert(a,t[0],t[1],t[2],t[3])},oe.prototype.insertCollisionCircles=function(t,e,r,n,i){for(var a=e?this.ignoredGrid:this.grid,o={bucketInstanceId:r,featureIndex:n,collisionGroupID:i},s=0;s<t.length;s+=4)a.insertCircle(o,t[s],t[s+1],t[s+2])},oe.prototype.projectAnchor=function(t,e,r){var n=[e,r,0,1];return ae(n,n,t),{perspectiveRatio:.5+this.transform.cameraToCenterDistance/n[3]*.5,cameraDistance:n[3]}},oe.prototype.projectPoint=function(e,r,n){var i=[r,n,0,1];return ae(i,i,e),new t.Point((i[0]/i[3]+1)/2*this.transform.width+100,(-i[1]/i[3]+1)/2*this.transform.height+100)},oe.prototype.projectAndGetPerspectiveRatio=function(e,r,n){var i=[r,n,0,1];return ae(i,i,e),{point:new t.Point((i[0]/i[3]+1)/2*this.transform.width+100,(-i[1]/i[3]+1)/2*this.transform.height+100),perspectiveRatio:.5+this.transform.cameraToCenterDistance/i[3]*.5}},oe.prototype.isOffscreen=function(t,e,r,n){return r<100||t>=this.screenRightBoundary||n<100||e>this.screenBottomBoundary},oe.prototype.isInsideGrid=function(t,e,r,n){return r>=0&&t<this.gridRightBoundary&&n>=0&&e<this.gridBottomBoundary};var ce=function(t,e,r,n){this.opacity=t?Math.max(0,Math.min(1,t.opacity+(t.placed?e:-e))):n&&r?1:0,this.placed=r};ce.prototype.isHidden=function(){return 0===this.opacity&&!this.placed};var ue=function(t,e,r,n,i){this.text=new ce(t?t.text:null,e,r,i),this.icon=new ce(t?t.icon:null,e,n,i)};ue.prototype.isHidden=function(){return this.text.isHidden()&&this.icon.isHidden()};var he=function(t,e,r){this.text=t,this.icon=e,this.skipFade=r},fe=function(t,e,r,n,i){this.bucketInstanceId=t,this.featureIndex=e,this.sourceLayerIndex=r,this.bucketIndex=n,this.tileID=i},pe=function(t){this.crossSourceCollisions=t,this.maxGroupID=0,this.collisionGroups={}};function de(e,r,n,i,a){var o=t.getAnchorAlignment(e),s=-(o.horizontalAlign-.5)*r,l=-(o.verticalAlign-.5)*n,c=t.evaluateRadialOffset(e,i);return new t.Point(s+c[0]*a,l+c[1]*a)}pe.prototype.get=function(t){if(this.crossSourceCollisions)return{ID:0,predicate:null};if(!this.collisionGroups[t]){var e=++this.maxGroupID;this.collisionGroups[t]={ID:e,predicate:function(t){return t.collisionGroupID===e}}}return this.collisionGroups[t]};var ge=function(t,e,r,n){this.transform=t.clone(),this.collisionIndex=new oe(this.transform),this.placements={},this.opacities={},this.variableOffsets={},this.stale=!1,this.commitTime=0,this.fadeDuration=e,this.retainedQueryData={},this.collisionGroups=new pe(r),this.prevPlacement=n,n&&(n.prevPlacement=void 0)};function ve(t,e,r,n,i){t.emplaceBack(e?1:0,r?1:0,n||0,i||0),t.emplaceBack(e?1:0,r?1:0,n||0,i||0),t.emplaceBack(e?1:0,r?1:0,n||0,i||0),t.emplaceBack(e?1:0,r?1:0,n||0,i||0)}ge.prototype.placeLayerTile=function(e,r,n,i){var a=r.getBucket(e),o=r.latestFeatureIndex;if(a&&o&&e.id===a.layerIds[0]){var s=r.collisionBoxArray,l=a.layers[0].layout,c=Math.pow(2,this.transform.zoom-r.tileID.overscaledZ),u=r.tileSize/t.EXTENT,h=this.transform.calculatePosMatrix(r.tileID.toUnwrapped()),f=Wt(h,\\\"map\\\"===l.get(\\\"text-pitch-alignment\\\"),\\\"map\\\"===l.get(\\\"text-rotation-alignment\\\"),this.transform,le(r,1,this.transform.zoom)),p=Wt(h,\\\"map\\\"===l.get(\\\"icon-pitch-alignment\\\"),\\\"map\\\"===l.get(\\\"icon-rotation-alignment\\\"),this.transform,le(r,1,this.transform.zoom));this.retainedQueryData[a.bucketInstanceId]=new fe(a.bucketInstanceId,o,a.sourceLayerIndex,a.index,r.tileID),this.placeLayerBucket(a,h,f,p,c,u,n,r.holdingForFade(),i,s)}},ge.prototype.attemptAnchorPlacement=function(e,r,n,i,a,o,s,l,c,u,h,f,p,d){var g,v=de(e,n,i,a,o),m=this.collisionIndex.placeCollisionBox(function(e,r,n,i,a,o){var s=e.x1,l=e.x2,c=e.y1,u=e.y2,h=e.anchorPointX,f=e.anchorPointY,p=new t.Point(r,n);return i&&p._rotate(a?o:-o),{x1:s+p.x,y1:c+p.y,x2:l+p.x,y2:u+p.y,anchorPointX:h,anchorPointY:f}}(r,v.x,v.y,s,l,this.transform.angle),f,c,u,h.predicate);if(m.box.length>0)return this.prevPlacement&&this.prevPlacement.variableOffsets[p.crossTileID]&&this.prevPlacement.placements[p.crossTileID]&&this.prevPlacement.placements[p.crossTileID].text&&(g=this.prevPlacement.variableOffsets[p.crossTileID].anchor),this.variableOffsets[p.crossTileID]={radialOffset:a,width:n,height:i,anchor:e,textBoxScale:o,prevAnchor:g},this.markUsedJustification(d,e,p),m},ge.prototype.placeLayerBucket=function(e,r,n,i,a,o,s,l,c,u){var h=this,f=e.layers[0].layout,p=t.evaluateSizeForZoom(e.textSizeData,this.transform.zoom),d=f.get(\\\"text-optional\\\"),g=f.get(\\\"icon-optional\\\"),v=f.get(\\\"text-allow-overlap\\\"),m=f.get(\\\"icon-allow-overlap\\\"),y=v&&(m||!e.hasIconData()||g),x=m&&(v||!e.hasTextData()||d),b=this.collisionGroups.get(e.sourceID),_=\\\"map\\\"===f.get(\\\"text-rotation-alignment\\\"),w=\\\"map\\\"===f.get(\\\"text-pitch-alignment\\\"),k=\\\"viewport-y\\\"===f.get(\\\"symbol-z-order\\\");!e.collisionArrays&&u&&e.deserializeCollisionBoxes(u);var T=function(i,u){if(!c[i.crossTileID])if(l)h.placements[i.crossTileID]=new he(!1,!1,!1);else{var m=!1,k=!1,T=!0,A=null,M=null,S=null,E=0,C=0;u.textFeatureIndex&&(E=u.textFeatureIndex);var L=u.textBox;if(L)if(f.get(\\\"text-variable-anchor\\\")){var P=L.x2-L.x1,O=L.y2-L.y1,z=i.textBoxScale,I=f.get(\\\"text-variable-anchor\\\");if(h.prevPlacement&&h.prevPlacement.variableOffsets[i.crossTileID]){var D=h.prevPlacement.variableOffsets[i.crossTileID];I[0]!==D.anchor&&(I=I.filter(function(t){return t!==D.anchor})).unshift(D.anchor)}for(var R=0,F=I;R<F.length;R+=1){var B=F[R];if(A=h.attemptAnchorPlacement(B,L,P,O,i.radialTextOffset,z,_,w,o,r,b,v,i,e)){m=!0;break}}if(!h.variableOffsets[i.crossTileID]&&h.prevPlacement){var N=h.prevPlacement.variableOffsets[i.crossTileID];N&&(h.variableOffsets[i.crossTileID]=N,h.markUsedJustification(e,N.anchor,i))}}else m=(A=h.collisionIndex.placeCollisionBox(L,f.get(\\\"text-allow-overlap\\\"),o,r,b.predicate)).box.length>0;T=A&&A.offscreen;var j=u.textCircles;if(j){var U=e.text.placedSymbolArray.get(i.centerJustifiedTextSymbolIndex),V=t.evaluateSizeForFeature(e.textSizeData,p,U);M=h.collisionIndex.placeCollisionCircles(j,f.get(\\\"text-allow-overlap\\\"),a,o,U,e.lineVertexArray,e.glyphOffsetArray,V,r,n,s,w,b.predicate),m=f.get(\\\"text-allow-overlap\\\")||M.circles.length>0,T=T&&M.offscreen}u.iconFeatureIndex&&(C=u.iconFeatureIndex),u.iconBox&&(k=(S=h.collisionIndex.placeCollisionBox(u.iconBox,f.get(\\\"icon-allow-overlap\\\"),o,r,b.predicate)).box.length>0,T=T&&S.offscreen);var q=d||0===i.numHorizontalGlyphVertices&&0===i.numVerticalGlyphVertices,H=g||0===i.numIconVertices;q||H?H?q||(k=k&&m):m=k&&m:k=m=k&&m,m&&A&&h.collisionIndex.insertCollisionBox(A.box,f.get(\\\"text-ignore-placement\\\"),e.bucketInstanceId,E,b.ID),k&&S&&h.collisionIndex.insertCollisionBox(S.box,f.get(\\\"icon-ignore-placement\\\"),e.bucketInstanceId,C,b.ID),m&&M&&h.collisionIndex.insertCollisionCircles(M.circles,f.get(\\\"text-ignore-placement\\\"),e.bucketInstanceId,E,b.ID),h.placements[i.crossTileID]=new he(m||y,k||x,T||e.justReloaded),c[i.crossTileID]=!0}};if(k)for(var A=e.getSortedSymbolIndexes(this.transform.angle),M=A.length-1;M>=0;--M){var S=A[M];T(e.symbolInstances.get(S),e.collisionArrays[S])}else for(var E=0;E<e.symbolInstances.length;++E)T(e.symbolInstances.get(E),e.collisionArrays[E]);e.justReloaded=!1},ge.prototype.markUsedJustification=function(e,r,n){var i={left:n.leftJustifiedTextSymbolIndex,center:n.centerJustifiedTextSymbolIndex,right:n.rightJustifiedTextSymbolIndex},a=i[t.getAnchorJustification(r)];for(var o in i){var s=i[o];s>=0&&(e.text.placedSymbolArray.get(s).crossTileID=a>=0&&s!==a?0:n.crossTileID)}},ge.prototype.commit=function(t){this.commitTime=t;var e=this.prevPlacement,r=!1,n=e&&0!==this.fadeDuration?(this.commitTime-e.commitTime)/this.fadeDuration:1,i=e?e.opacities:{},a=e?e.variableOffsets:{};for(var o in this.placements){var s=this.placements[o],l=i[o];l?(this.opacities[o]=new ue(l,n,s.text,s.icon),r=r||s.text!==l.text.placed||s.icon!==l.icon.placed):(this.opacities[o]=new ue(null,n,s.text,s.icon,s.skipFade),r=r||s.text||s.icon)}for(var c in i){var u=i[c];if(!this.opacities[c]){var h=new ue(u,n,!1,!1);h.isHidden()||(this.opacities[c]=h,r=r||u.text.placed||u.icon.placed)}}for(var f in a)this.variableOffsets[f]||!this.opacities[f]||this.opacities[f].isHidden()||(this.variableOffsets[f]=a[f]);r?this.lastPlacementChangeTime=t:\\\"number\\\"!=typeof this.lastPlacementChangeTime&&(this.lastPlacementChangeTime=e?e.lastPlacementChangeTime:t)},ge.prototype.updateLayerOpacities=function(t,e){for(var r={},n=0,i=e;n<i.length;n+=1){var a=i[n],o=a.getBucket(t);o&&a.latestFeatureIndex&&t.id===o.layerIds[0]&&this.updateBucketOpacities(o,r,a.collisionBoxArray)}},ge.prototype.updateBucketOpacities=function(e,r,n){e.hasTextData()&&e.text.opacityVertexArray.clear(),e.hasIconData()&&e.icon.opacityVertexArray.clear(),e.hasCollisionBoxData()&&e.collisionBox.collisionVertexArray.clear(),e.hasCollisionCircleData()&&e.collisionCircle.collisionVertexArray.clear();var i=e.layers[0].layout,a=new ue(null,0,!1,!1,!0),o=i.get(\\\"text-allow-overlap\\\"),s=i.get(\\\"icon-allow-overlap\\\"),l=i.get(\\\"text-variable-anchor\\\"),c=\\\"map\\\"===i.get(\\\"text-rotation-alignment\\\"),u=\\\"map\\\"===i.get(\\\"text-pitch-alignment\\\"),h=new ue(null,0,o&&(s||!e.hasIconData()||i.get(\\\"icon-optional\\\")),s&&(o||!e.hasTextData()||i.get(\\\"text-optional\\\")),!0);!e.collisionArrays&&n&&(e.hasCollisionBoxData()||e.hasCollisionCircleData())&&e.deserializeCollisionBoxes(n);for(var f=0;f<e.symbolInstances.length;f++){var p=e.symbolInstances.get(f),d=p.numHorizontalGlyphVertices,g=p.numVerticalGlyphVertices,v=p.crossTileID,m=r[v],y=this.opacities[v];m?y=a:y||(y=h,this.opacities[v]=y),r[v]=!0;var x=d>0||g>0,b=p.numIconVertices>0;if(x){for(var _=Te(y.text),w=(d+g)/4,k=0;k<w;k++)e.text.opacityVertexArray.emplaceBack(_);var T=y.text.isHidden()?1:0;[p.rightJustifiedTextSymbolIndex,p.centerJustifiedTextSymbolIndex,p.leftJustifiedTextSymbolIndex,p.verticalPlacedTextSymbolIndex].forEach(function(t){t>=0&&(e.text.placedSymbolArray.get(t).hidden=T)});var A=this.variableOffsets[p.crossTileID];A&&this.markUsedJustification(e,A.anchor,p)}if(b){for(var M=Te(y.icon),S=0;S<p.numIconVertices/4;S++)e.icon.opacityVertexArray.emplaceBack(M);e.icon.placedSymbolArray.get(f).hidden=y.icon.isHidden()}if(e.hasCollisionBoxData()||e.hasCollisionCircleData()){var E=e.collisionArrays[f];if(E){if(E.textBox){var C=new t.Point(0,0),L=!0;if(l){var P=this.variableOffsets[v];P?(C=de(P.anchor,P.width,P.height,P.radialOffset,P.textBoxScale),c&&C._rotate(u?this.transform.angle:-this.transform.angle)):L=!1}ve(e.collisionBox.collisionVertexArray,y.text.placed,!L,C.x,C.y)}E.iconBox&&ve(e.collisionBox.collisionVertexArray,y.icon.placed,!1);var O=E.textCircles;if(O&&e.hasCollisionCircleData())for(var z=0;z<O.length;z+=5){var I=m||0===O[z+4];ve(e.collisionCircle.collisionVertexArray,y.text.placed,I)}}}}e.sortFeatures(this.transform.angle),this.retainedQueryData[e.bucketInstanceId]&&(this.retainedQueryData[e.bucketInstanceId].featureSortOrder=e.featureSortOrder),e.hasTextData()&&e.text.opacityVertexBuffer&&e.text.opacityVertexBuffer.updateData(e.text.opacityVertexArray),e.hasIconData()&&e.icon.opacityVertexBuffer&&e.icon.opacityVertexBuffer.updateData(e.icon.opacityVertexArray),e.hasCollisionBoxData()&&e.collisionBox.collisionVertexBuffer&&e.collisionBox.collisionVertexBuffer.updateData(e.collisionBox.collisionVertexArray),e.hasCollisionCircleData()&&e.collisionCircle.collisionVertexBuffer&&e.collisionCircle.collisionVertexBuffer.updateData(e.collisionCircle.collisionVertexArray)},ge.prototype.symbolFadeChange=function(t){return 0===this.fadeDuration?1:(t-this.commitTime)/this.fadeDuration},ge.prototype.hasTransitions=function(t){return this.stale||t-this.lastPlacementChangeTime<this.fadeDuration},ge.prototype.stillRecent=function(t){return this.commitTime+this.fadeDuration>t},ge.prototype.setStale=function(){this.stale=!0};var me=Math.pow(2,25),ye=Math.pow(2,24),xe=Math.pow(2,17),be=Math.pow(2,16),_e=Math.pow(2,9),we=Math.pow(2,8),ke=Math.pow(2,1);function Te(t){if(0===t.opacity&&!t.placed)return 0;if(1===t.opacity&&t.placed)return 4294967295;var e=t.placed?1:0,r=Math.floor(127*t.opacity);return r*me+e*ye+r*xe+e*be+r*_e+e*we+r*ke+e}var Ae=function(){this._currentTileIndex=0,this._seenCrossTileIDs={}};Ae.prototype.continuePlacement=function(t,e,r,n,i){for(;this._currentTileIndex<t.length;){var a=t[this._currentTileIndex];if(e.placeLayerTile(n,a,r,this._seenCrossTileIDs),this._currentTileIndex++,i())return!0}};var Me=function(t,e,r,n,i,a,o){this.placement=new ge(t,i,a,o),this._currentPlacementIndex=e.length-1,this._forceFullPlacement=r,this._showCollisionBoxes=n,this._done=!1};Me.prototype.isDone=function(){return this._done},Me.prototype.continuePlacement=function(e,r,n){for(var i=this,a=t.browser.now(),o=function(){var e=t.browser.now()-a;return!i._forceFullPlacement&&e>2};this._currentPlacementIndex>=0;){var s=r[e[this._currentPlacementIndex]],l=this.placement.collisionIndex.transform.zoom;if(\\\"symbol\\\"===s.type&&(!s.minzoom||s.minzoom<=l)&&(!s.maxzoom||s.maxzoom>l)){if(this._inProgressLayer||(this._inProgressLayer=new Ae),this._inProgressLayer.continuePlacement(n[s.source],this.placement,this._showCollisionBoxes,s,o))return;delete this._inProgressLayer}this._currentPlacementIndex--}this._done=!0},Me.prototype.commit=function(t){return this.placement.commit(t),this.placement};var Se=512/t.EXTENT/2,Ee=function(t,e,r){this.tileID=t,this.indexedSymbolInstances={},this.bucketInstanceId=r;for(var n=0;n<e.length;n++){var i=e.get(n),a=i.key;this.indexedSymbolInstances[a]||(this.indexedSymbolInstances[a]=[]),this.indexedSymbolInstances[a].push({crossTileID:i.crossTileID,coord:this.getScaledCoordinates(i,t)})}};Ee.prototype.getScaledCoordinates=function(e,r){var n=r.canonical.z-this.tileID.canonical.z,i=Se/Math.pow(2,n);return{x:Math.floor((r.canonical.x*t.EXTENT+e.anchorX)*i),y:Math.floor((r.canonical.y*t.EXTENT+e.anchorY)*i)}},Ee.prototype.findMatches=function(t,e,r){for(var n=this.tileID.canonical.z<e.canonical.z?1:Math.pow(2,this.tileID.canonical.z-e.canonical.z),i=0;i<t.length;i++){var a=t.get(i);if(!a.crossTileID){var o=this.indexedSymbolInstances[a.key];if(o)for(var s=this.getScaledCoordinates(a,e),l=0,c=o;l<c.length;l+=1){var u=c[l];if(Math.abs(u.coord.x-s.x)<=n&&Math.abs(u.coord.y-s.y)<=n&&!r[u.crossTileID]){r[u.crossTileID]=!0,a.crossTileID=u.crossTileID;break}}}}};var Ce=function(){this.maxCrossTileID=0};Ce.prototype.generate=function(){return++this.maxCrossTileID};var Le=function(){this.indexes={},this.usedCrossTileIDs={},this.lng=0};Le.prototype.handleWrapJump=function(t){var e=Math.round((t-this.lng)/360);if(0!==e)for(var r in this.indexes){var n=this.indexes[r],i={};for(var a in n){var o=n[a];o.tileID=o.tileID.unwrapTo(o.tileID.wrap+e),i[o.tileID.key]=o}this.indexes[r]=i}this.lng=t},Le.prototype.addBucket=function(t,e,r){if(this.indexes[t.overscaledZ]&&this.indexes[t.overscaledZ][t.key]){if(this.indexes[t.overscaledZ][t.key].bucketInstanceId===e.bucketInstanceId)return!1;this.removeBucketCrossTileIDs(t.overscaledZ,this.indexes[t.overscaledZ][t.key])}for(var n=0;n<e.symbolInstances.length;n++)e.symbolInstances.get(n).crossTileID=0;this.usedCrossTileIDs[t.overscaledZ]||(this.usedCrossTileIDs[t.overscaledZ]={});var i=this.usedCrossTileIDs[t.overscaledZ];for(var a in this.indexes){var o=this.indexes[a];if(Number(a)>t.overscaledZ)for(var s in o){var l=o[s];l.tileID.isChildOf(t)&&l.findMatches(e.symbolInstances,t,i)}else{var c=o[t.scaledTo(Number(a)).key];c&&c.findMatches(e.symbolInstances,t,i)}}for(var u=0;u<e.symbolInstances.length;u++){var h=e.symbolInstances.get(u);h.crossTileID||(h.crossTileID=r.generate(),i[h.crossTileID]=!0)}return void 0===this.indexes[t.overscaledZ]&&(this.indexes[t.overscaledZ]={}),this.indexes[t.overscaledZ][t.key]=new Ee(t,e.symbolInstances,e.bucketInstanceId),!0},Le.prototype.removeBucketCrossTileIDs=function(t,e){for(var r in e.indexedSymbolInstances)for(var n=0,i=e.indexedSymbolInstances[r];n<i.length;n+=1){var a=i[n];delete this.usedCrossTileIDs[t][a.crossTileID]}},Le.prototype.removeStaleBuckets=function(t){var e=!1;for(var r in this.indexes){var n=this.indexes[r];for(var i in n)t[n[i].bucketInstanceId]||(this.removeBucketCrossTileIDs(r,n[i]),delete n[i],e=!0)}return e};var Pe=function(){this.layerIndexes={},this.crossTileIDs=new Ce,this.maxBucketInstanceId=0,this.bucketsInCurrentPlacement={}};Pe.prototype.addLayer=function(t,e,r){var n=this.layerIndexes[t.id];void 0===n&&(n=this.layerIndexes[t.id]=new Le);var i=!1,a={};n.handleWrapJump(r);for(var o=0,s=e;o<s.length;o+=1){var l=s[o],c=l.getBucket(t);c&&t.id===c.layerIds[0]&&(c.bucketInstanceId||(c.bucketInstanceId=++this.maxBucketInstanceId),n.addBucket(l.tileID,c,this.crossTileIDs)&&(i=!0),a[c.bucketInstanceId]=!0)}return n.removeStaleBuckets(a)&&(i=!0),i},Pe.prototype.pruneUnusedLayers=function(t){var e={};for(var r in t.forEach(function(t){e[t]=!0}),this.layerIndexes)e[r]||delete this.layerIndexes[r]};var Oe=function(e,r){return t.emitValidationErrors(e,r&&r.filter(function(t){return\\\"source.canvas\\\"!==t.identifier}))},ze=t.pick(Bt,[\\\"addLayer\\\",\\\"removeLayer\\\",\\\"setPaintProperty\\\",\\\"setLayoutProperty\\\",\\\"setFilter\\\",\\\"addSource\\\",\\\"removeSource\\\",\\\"setLayerZoomRange\\\",\\\"setLight\\\",\\\"setTransition\\\",\\\"setGeoJSONSourceData\\\"]),Ie=t.pick(Bt,[\\\"setCenter\\\",\\\"setZoom\\\",\\\"setBearing\\\",\\\"setPitch\\\"]),De=function(e){function r(n,i){var a=this;void 0===i&&(i={}),e.call(this),this.map=n,this.dispatcher=new k((It||(It=new zt),It),this),this.imageManager=new f,this.imageManager.setEventedParent(this),this.glyphManager=new y(n._requestManager,i.localIdeographFontFamily),this.lineAtlas=new w(256,512),this.crossTileSymbolIndex=new Pe,this._layers={},this._order=[],this.sourceCaches={},this.zoomHistory=new t.ZoomHistory,this._loaded=!1,this._resetUpdates(),this.dispatcher.broadcast(\\\"setReferrer\\\",t.getReferrer());var o=this;this._rtlTextPluginCallback=r.registerForPluginAvailability(function(t){for(var e in o.dispatcher.broadcast(\\\"loadRTLTextPlugin\\\",t.pluginURL,t.completionCallback),o.sourceCaches)o.sourceCaches[e].reload()}),this.on(\\\"data\\\",function(t){if(\\\"source\\\"===t.dataType&&\\\"metadata\\\"===t.sourceDataType){var e=a.sourceCaches[t.sourceId];if(e){var r=e.getSource();if(r&&r.vectorLayerIds)for(var n in a._layers){var i=a._layers[n];i.source===r.id&&a._validateLayer(i)}}}})}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.loadURL=function(e,r){var n=this;void 0===r&&(r={}),this.fire(new t.Event(\\\"dataloading\\\",{dataType:\\\"style\\\"}));var i=\\\"boolean\\\"==typeof r.validate?r.validate:!t.isMapboxURL(e);e=this.map._requestManager.normalizeStyleURL(e,r.accessToken);var a=this.map._requestManager.transformRequest(e,t.ResourceType.Style);this._request=t.getJSON(a,function(e,r){n._request=null,e?n.fire(new t.ErrorEvent(e)):r&&n._load(r,i)})},r.prototype.loadJSON=function(e,r){var n=this;void 0===r&&(r={}),this.fire(new t.Event(\\\"dataloading\\\",{dataType:\\\"style\\\"})),this._request=t.browser.frame(function(){n._request=null,n._load(e,!1!==r.validate)})},r.prototype._load=function(e,r){var n=this;if(!r||!Oe(this,t.validateStyle(e))){for(var i in this._loaded=!0,this.stylesheet=e,e.sources)this.addSource(i,e.sources[i],{validate:!1});e.sprite?this._spriteRequest=function(e,r,n){var i,a,o,s=t.browser.devicePixelRatio>1?\\\"@2x\\\":\\\"\\\",l=t.getJSON(r.transformRequest(r.normalizeSpriteURL(e,s,\\\".json\\\"),t.ResourceType.SpriteJSON),function(t,e){l=null,o||(o=t,i=e,u())}),c=t.getImage(r.transformRequest(r.normalizeSpriteURL(e,s,\\\".png\\\"),t.ResourceType.SpriteImage),function(t,e){c=null,o||(o=t,a=e,u())});function u(){if(o)n(o);else if(i&&a){var e=t.browser.getImageData(a),r={};for(var s in i){var l=i[s],c=l.width,u=l.height,h=l.x,f=l.y,p=l.sdf,d=l.pixelRatio,g=new t.RGBAImage({width:c,height:u});t.RGBAImage.copy(e,g,{x:h,y:f},{x:0,y:0},{width:c,height:u}),r[s]={data:g,pixelRatio:d,sdf:p}}n(null,r)}}return{cancel:function(){l&&(l.cancel(),l=null),c&&(c.cancel(),c=null)}}}(e.sprite,this.map._requestManager,function(e,r){if(n._spriteRequest=null,e)n.fire(new t.ErrorEvent(e));else if(r)for(var i in r)n.imageManager.addImage(i,r[i]);n.imageManager.setLoaded(!0),n.fire(new t.Event(\\\"data\\\",{dataType:\\\"style\\\"}))}):this.imageManager.setLoaded(!0),this.glyphManager.setURL(e.glyphs);var a=Ft(this.stylesheet.layers);this._order=a.map(function(t){return t.id}),this._layers={};for(var o=0,s=a;o<s.length;o+=1){var l=s[o];(l=t.createStyleLayer(l)).setEventedParent(this,{layer:{id:l.id}}),this._layers[l.id]=l}this.dispatcher.broadcast(\\\"setLayers\\\",this._serializeLayers(this._order)),this.light=new _(this.stylesheet.light),this.fire(new t.Event(\\\"data\\\",{dataType:\\\"style\\\"})),this.fire(new t.Event(\\\"style.load\\\"))}},r.prototype._validateLayer=function(e){var r=this.sourceCaches[e.source];if(r){var n=e.sourceLayer;if(n){var i=r.getSource();(\\\"geojson\\\"===i.type||i.vectorLayerIds&&-1===i.vectorLayerIds.indexOf(n))&&this.fire(new t.ErrorEvent(new Error('Source layer \\\"'+n+'\\\" does not exist on source \\\"'+i.id+'\\\" as specified by style layer \\\"'+e.id+'\\\"')))}}},r.prototype.loaded=function(){if(!this._loaded)return!1;if(Object.keys(this._updatedSources).length)return!1;for(var t in this.sourceCaches)if(!this.sourceCaches[t].loaded())return!1;return!!this.imageManager.isLoaded()},r.prototype._serializeLayers=function(t){for(var e=[],r=0,n=t;r<n.length;r+=1){var i=n[r],a=this._layers[i];\\\"custom\\\"!==a.type&&e.push(a.serialize())}return e},r.prototype.hasTransitions=function(){if(this.light&&this.light.hasTransition())return!0;for(var t in this.sourceCaches)if(this.sourceCaches[t].hasTransition())return!0;for(var e in this._layers)if(this._layers[e].hasTransition())return!0;return!1},r.prototype._checkLoaded=function(){if(!this._loaded)throw new Error(\\\"Style is not done loading\\\")},r.prototype.update=function(e){if(this._loaded){var r=this._changed;if(this._changed){var n=Object.keys(this._updatedLayers),i=Object.keys(this._removedLayers);for(var a in(n.length||i.length)&&this._updateWorkerLayers(n,i),this._updatedSources){var o=this._updatedSources[a];\\\"reload\\\"===o?this._reloadSource(a):\\\"clear\\\"===o&&this._clearSource(a)}for(var s in this._updatedPaintProps)this._layers[s].updateTransitions(e);this.light.updateTransitions(e),this._resetUpdates()}for(var l in this.sourceCaches)this.sourceCaches[l].used=!1;for(var c=0,u=this._order;c<u.length;c+=1){var h=u[c],f=this._layers[h];f.recalculate(e),!f.isHidden(e.zoom)&&f.source&&(this.sourceCaches[f.source].used=!0)}this.light.recalculate(e),this.z=e.zoom,r&&this.fire(new t.Event(\\\"data\\\",{dataType:\\\"style\\\"}))}},r.prototype._updateWorkerLayers=function(t,e){this.dispatcher.broadcast(\\\"updateLayers\\\",{layers:this._serializeLayers(t),removedIds:e})},r.prototype._resetUpdates=function(){this._changed=!1,this._updatedLayers={},this._removedLayers={},this._updatedSources={},this._updatedPaintProps={}},r.prototype.setState=function(e){var r=this;if(this._checkLoaded(),Oe(this,t.validateStyle(e)))return!1;(e=t.clone$1(e)).layers=Ft(e.layers);var n=function(e,r){if(!e)return[{command:Bt.setStyle,args:[r]}];var n=[];try{if(!t.deepEqual(e.version,r.version))return[{command:Bt.setStyle,args:[r]}];t.deepEqual(e.center,r.center)||n.push({command:Bt.setCenter,args:[r.center]}),t.deepEqual(e.zoom,r.zoom)||n.push({command:Bt.setZoom,args:[r.zoom]}),t.deepEqual(e.bearing,r.bearing)||n.push({command:Bt.setBearing,args:[r.bearing]}),t.deepEqual(e.pitch,r.pitch)||n.push({command:Bt.setPitch,args:[r.pitch]}),t.deepEqual(e.sprite,r.sprite)||n.push({command:Bt.setSprite,args:[r.sprite]}),t.deepEqual(e.glyphs,r.glyphs)||n.push({command:Bt.setGlyphs,args:[r.glyphs]}),t.deepEqual(e.transition,r.transition)||n.push({command:Bt.setTransition,args:[r.transition]}),t.deepEqual(e.light,r.light)||n.push({command:Bt.setLight,args:[r.light]});var i={},a=[];!function(e,r,n,i){var a;for(a in r=r||{},e=e||{})e.hasOwnProperty(a)&&(r.hasOwnProperty(a)||jt(a,n,i));for(a in r)r.hasOwnProperty(a)&&(e.hasOwnProperty(a)?t.deepEqual(e[a],r[a])||(\\\"geojson\\\"===e[a].type&&\\\"geojson\\\"===r[a].type&&Vt(e,r,a)?n.push({command:Bt.setGeoJSONSourceData,args:[a,r[a].data]}):Ut(a,r,n,i)):Nt(a,r,n))}(e.sources,r.sources,a,i);var o=[];e.layers&&e.layers.forEach(function(t){i[t.source]?n.push({command:Bt.removeLayer,args:[t.id]}):o.push(t)}),n=n.concat(a),function(e,r,n){r=r||[];var i,a,o,s,l,c,u,h=(e=e||[]).map(Ht),f=r.map(Ht),p=e.reduce(Gt,{}),d=r.reduce(Gt,{}),g=h.slice(),v=Object.create(null);for(i=0,a=0;i<h.length;i++)o=h[i],d.hasOwnProperty(o)?a++:(n.push({command:Bt.removeLayer,args:[o]}),g.splice(g.indexOf(o,a),1));for(i=0,a=0;i<f.length;i++)o=f[f.length-1-i],g[g.length-1-i]!==o&&(p.hasOwnProperty(o)?(n.push({command:Bt.removeLayer,args:[o]}),g.splice(g.lastIndexOf(o,g.length-a),1)):a++,c=g[g.length-i],n.push({command:Bt.addLayer,args:[d[o],c]}),g.splice(g.length-i,0,o),v[o]=!0);for(i=0;i<f.length;i++)if(s=p[o=f[i]],l=d[o],!v[o]&&!t.deepEqual(s,l))if(t.deepEqual(s.source,l.source)&&t.deepEqual(s[\\\"source-layer\\\"],l[\\\"source-layer\\\"])&&t.deepEqual(s.type,l.type)){for(u in qt(s.layout,l.layout,n,o,null,Bt.setLayoutProperty),qt(s.paint,l.paint,n,o,null,Bt.setPaintProperty),t.deepEqual(s.filter,l.filter)||n.push({command:Bt.setFilter,args:[o,l.filter]}),t.deepEqual(s.minzoom,l.minzoom)&&t.deepEqual(s.maxzoom,l.maxzoom)||n.push({command:Bt.setLayerZoomRange,args:[o,l.minzoom,l.maxzoom]}),s)s.hasOwnProperty(u)&&\\\"layout\\\"!==u&&\\\"paint\\\"!==u&&\\\"filter\\\"!==u&&\\\"metadata\\\"!==u&&\\\"minzoom\\\"!==u&&\\\"maxzoom\\\"!==u&&(0===u.indexOf(\\\"paint.\\\")?qt(s[u],l[u],n,o,u.slice(6),Bt.setPaintProperty):t.deepEqual(s[u],l[u])||n.push({command:Bt.setLayerProperty,args:[o,u,l[u]]}));for(u in l)l.hasOwnProperty(u)&&!s.hasOwnProperty(u)&&\\\"layout\\\"!==u&&\\\"paint\\\"!==u&&\\\"filter\\\"!==u&&\\\"metadata\\\"!==u&&\\\"minzoom\\\"!==u&&\\\"maxzoom\\\"!==u&&(0===u.indexOf(\\\"paint.\\\")?qt(s[u],l[u],n,o,u.slice(6),Bt.setPaintProperty):t.deepEqual(s[u],l[u])||n.push({command:Bt.setLayerProperty,args:[o,u,l[u]]}))}else n.push({command:Bt.removeLayer,args:[o]}),c=g[g.lastIndexOf(o)+1],n.push({command:Bt.addLayer,args:[l,c]})}(o,r.layers,n)}catch(t){console.warn(\\\"Unable to compute style diff:\\\",t),n=[{command:Bt.setStyle,args:[r]}]}return n}(this.serialize(),e).filter(function(t){return!(t.command in Ie)});if(0===n.length)return!1;var i=n.filter(function(t){return!(t.command in ze)});if(i.length>0)throw new Error(\\\"Unimplemented: \\\"+i.map(function(t){return t.command}).join(\\\", \\\")+\\\".\\\");return n.forEach(function(t){\\\"setTransition\\\"!==t.command&&r[t.command].apply(r,t.args)}),this.stylesheet=e,!0},r.prototype.addImage=function(e,r){if(this.getImage(e))return this.fire(new t.ErrorEvent(new Error(\\\"An image with this name already exists.\\\")));this.imageManager.addImage(e,r),this.fire(new t.Event(\\\"data\\\",{dataType:\\\"style\\\"}))},r.prototype.updateImage=function(t,e){this.imageManager.updateImage(t,e)},r.prototype.getImage=function(t){return this.imageManager.getImage(t)},r.prototype.removeImage=function(e){if(!this.getImage(e))return this.fire(new t.ErrorEvent(new Error(\\\"No image with this name exists.\\\")));this.imageManager.removeImage(e),this.fire(new t.Event(\\\"data\\\",{dataType:\\\"style\\\"}))},r.prototype.listImages=function(){return this._checkLoaded(),this.imageManager.listImages()},r.prototype.addSource=function(e,r,n){var i=this;if(void 0===n&&(n={}),this._checkLoaded(),void 0!==this.sourceCaches[e])throw new Error(\\\"There is already a source with this ID\\\");if(!r.type)throw new Error(\\\"The type property must be defined, but the only the following properties were given: \\\"+Object.keys(r).join(\\\", \\\")+\\\".\\\");if(!([\\\"vector\\\",\\\"raster\\\",\\\"geojson\\\",\\\"video\\\",\\\"image\\\"].indexOf(r.type)>=0&&this._validate(t.validateStyle.source,\\\"sources.\\\"+e,r,null,n))){this.map&&this.map._collectResourceTiming&&(r.collectResourceTiming=!0);var a=this.sourceCaches[e]=new Ct(e,r,this.dispatcher);a.style=this,a.setEventedParent(this,function(){return{isSourceLoaded:i.loaded(),source:a.serialize(),sourceId:e}}),a.onAdd(this.map),this._changed=!0}},r.prototype.removeSource=function(e){if(this._checkLoaded(),void 0===this.sourceCaches[e])throw new Error(\\\"There is no source with this ID\\\");for(var r in this._layers)if(this._layers[r].source===e)return this.fire(new t.ErrorEvent(new Error('Source \\\"'+e+'\\\" cannot be removed while layer \\\"'+r+'\\\" is using it.')));var n=this.sourceCaches[e];delete this.sourceCaches[e],delete this._updatedSources[e],n.fire(new t.Event(\\\"data\\\",{sourceDataType:\\\"metadata\\\",dataType:\\\"source\\\",sourceId:e})),n.setEventedParent(null),n.clearTiles(),n.onRemove&&n.onRemove(this.map),this._changed=!0},r.prototype.setGeoJSONSourceData=function(t,e){this._checkLoaded(),this.sourceCaches[t].getSource().setData(e),this._changed=!0},r.prototype.getSource=function(t){return this.sourceCaches[t]&&this.sourceCaches[t].getSource()},r.prototype.addLayer=function(e,r,n){void 0===n&&(n={}),this._checkLoaded();var i=e.id;if(this.getLayer(i))this.fire(new t.ErrorEvent(new Error('Layer with id \\\"'+i+'\\\" already exists on this map')));else{var a;if(\\\"custom\\\"===e.type){if(Oe(this,t.validateCustomStyleLayer(e)))return;a=t.createStyleLayer(e)}else{if(\\\"object\\\"==typeof e.source&&(this.addSource(i,e.source),e=t.clone$1(e),e=t.extend(e,{source:i})),this._validate(t.validateStyle.layer,\\\"layers.\\\"+i,e,{arrayIndex:-1},n))return;a=t.createStyleLayer(e),this._validateLayer(a),a.setEventedParent(this,{layer:{id:i}})}var o=r?this._order.indexOf(r):this._order.length;if(r&&-1===o)this.fire(new t.ErrorEvent(new Error('Layer with id \\\"'+r+'\\\" does not exist on this map.')));else{if(this._order.splice(o,0,i),this._layerOrderChanged=!0,this._layers[i]=a,this._removedLayers[i]&&a.source&&\\\"custom\\\"!==a.type){var s=this._removedLayers[i];delete this._removedLayers[i],s.type!==a.type?this._updatedSources[a.source]=\\\"clear\\\":(this._updatedSources[a.source]=\\\"reload\\\",this.sourceCaches[a.source].pause())}this._updateLayer(a),a.onAdd&&a.onAdd(this.map)}}},r.prototype.moveLayer=function(e,r){if(this._checkLoaded(),this._changed=!0,this._layers[e]){if(e!==r){var n=this._order.indexOf(e);this._order.splice(n,1);var i=r?this._order.indexOf(r):this._order.length;r&&-1===i?this.fire(new t.ErrorEvent(new Error('Layer with id \\\"'+r+'\\\" does not exist on this map.'))):(this._order.splice(i,0,e),this._layerOrderChanged=!0)}}else this.fire(new t.ErrorEvent(new Error(\\\"The layer '\\\"+e+\\\"' does not exist in the map's style and cannot be moved.\\\")))},r.prototype.removeLayer=function(e){this._checkLoaded();var r=this._layers[e];if(r){r.setEventedParent(null);var n=this._order.indexOf(e);this._order.splice(n,1),this._layerOrderChanged=!0,this._changed=!0,this._removedLayers[e]=r,delete this._layers[e],delete this._updatedLayers[e],delete this._updatedPaintProps[e],r.onRemove&&r.onRemove(this.map)}else this.fire(new t.ErrorEvent(new Error(\\\"The layer '\\\"+e+\\\"' does not exist in the map's style and cannot be removed.\\\")))},r.prototype.getLayer=function(t){return this._layers[t]},r.prototype.setLayerZoomRange=function(e,r,n){this._checkLoaded();var i=this.getLayer(e);i?i.minzoom===r&&i.maxzoom===n||(null!=r&&(i.minzoom=r),null!=n&&(i.maxzoom=n),this._updateLayer(i)):this.fire(new t.ErrorEvent(new Error(\\\"The layer '\\\"+e+\\\"' does not exist in the map's style and cannot have zoom extent.\\\")))},r.prototype.setFilter=function(e,r,n){void 0===n&&(n={}),this._checkLoaded();var i=this.getLayer(e);if(i){if(!t.deepEqual(i.filter,r))return null==r?(i.filter=void 0,void this._updateLayer(i)):void(this._validate(t.validateStyle.filter,\\\"layers.\\\"+i.id+\\\".filter\\\",r,null,n)||(i.filter=t.clone$1(r),this._updateLayer(i)))}else this.fire(new t.ErrorEvent(new Error(\\\"The layer '\\\"+e+\\\"' does not exist in the map's style and cannot be filtered.\\\")))},r.prototype.getFilter=function(e){return t.clone$1(this.getLayer(e).filter)},r.prototype.setLayoutProperty=function(e,r,n,i){void 0===i&&(i={}),this._checkLoaded();var a=this.getLayer(e);a?t.deepEqual(a.getLayoutProperty(r),n)||(a.setLayoutProperty(r,n,i),this._updateLayer(a)):this.fire(new t.ErrorEvent(new Error(\\\"The layer '\\\"+e+\\\"' does not exist in the map's style and cannot be styled.\\\")))},r.prototype.getLayoutProperty=function(e,r){var n=this.getLayer(e);if(n)return n.getLayoutProperty(r);this.fire(new t.ErrorEvent(new Error(\\\"The layer '\\\"+e+\\\"' does not exist in the map's style.\\\")))},r.prototype.setPaintProperty=function(e,r,n,i){void 0===i&&(i={}),this._checkLoaded();var a=this.getLayer(e);a?t.deepEqual(a.getPaintProperty(r),n)||(a.setPaintProperty(r,n,i)&&this._updateLayer(a),this._changed=!0,this._updatedPaintProps[e]=!0):this.fire(new t.ErrorEvent(new Error(\\\"The layer '\\\"+e+\\\"' does not exist in the map's style and cannot be styled.\\\")))},r.prototype.getPaintProperty=function(t,e){return this.getLayer(t).getPaintProperty(e)},r.prototype.setFeatureState=function(e,r){this._checkLoaded();var n=e.source,i=e.sourceLayer,a=this.sourceCaches[n],o=parseInt(e.id,10);if(void 0!==a){var s=a.getSource().type;\\\"geojson\\\"===s&&i?this.fire(new t.ErrorEvent(new Error(\\\"GeoJSON sources cannot have a sourceLayer parameter.\\\"))):\\\"vector\\\"!==s||i?isNaN(o)||o<0?this.fire(new t.ErrorEvent(new Error(\\\"The feature id parameter must be provided and non-negative.\\\"))):a.setFeatureState(i,o,r):this.fire(new t.ErrorEvent(new Error(\\\"The sourceLayer parameter must be provided for vector source types.\\\")))}else this.fire(new t.ErrorEvent(new Error(\\\"The source '\\\"+n+\\\"' does not exist in the map's style.\\\")))},r.prototype.removeFeatureState=function(e,r){this._checkLoaded();var n=e.source,i=this.sourceCaches[n];if(void 0!==i){var a=i.getSource().type,o=\\\"vector\\\"===a?e.sourceLayer:void 0,s=parseInt(e.id,10);\\\"vector\\\"!==a||o?void 0!==e.id&&isNaN(s)||s<0?this.fire(new t.ErrorEvent(new Error(\\\"The feature id parameter must be non-negative.\\\"))):r&&\\\"string\\\"!=typeof e.id&&\\\"number\\\"!=typeof e.id?this.fire(new t.ErrorEvent(new Error(\\\"A feature id is requred to remove its specific state property.\\\"))):i.removeFeatureState(o,s,r):this.fire(new t.ErrorEvent(new Error(\\\"The sourceLayer parameter must be provided for vector source types.\\\")))}else this.fire(new t.ErrorEvent(new Error(\\\"The source '\\\"+n+\\\"' does not exist in the map's style.\\\")))},r.prototype.getFeatureState=function(e){this._checkLoaded();var r=e.source,n=e.sourceLayer,i=this.sourceCaches[r],a=parseInt(e.id,10);if(void 0!==i)if(\\\"vector\\\"!==i.getSource().type||n){if(!(isNaN(a)||a<0))return i.getFeatureState(n,a);this.fire(new t.ErrorEvent(new Error(\\\"The feature id parameter must be provided and non-negative.\\\")))}else this.fire(new t.ErrorEvent(new Error(\\\"The sourceLayer parameter must be provided for vector source types.\\\")));else this.fire(new t.ErrorEvent(new Error(\\\"The source '\\\"+r+\\\"' does not exist in the map's style.\\\")))},r.prototype.getTransition=function(){return t.extend({duration:300,delay:0},this.stylesheet&&this.stylesheet.transition)},r.prototype.serialize=function(){return t.filterObject({version:this.stylesheet.version,name:this.stylesheet.name,metadata:this.stylesheet.metadata,light:this.stylesheet.light,center:this.stylesheet.center,zoom:this.stylesheet.zoom,bearing:this.stylesheet.bearing,pitch:this.stylesheet.pitch,sprite:this.stylesheet.sprite,glyphs:this.stylesheet.glyphs,transition:this.stylesheet.transition,sources:t.mapObject(this.sourceCaches,function(t){return t.serialize()}),layers:this._serializeLayers(this._order)},function(t){return void 0!==t})},r.prototype._updateLayer=function(t){this._updatedLayers[t.id]=!0,t.source&&!this._updatedSources[t.source]&&(this._updatedSources[t.source]=\\\"reload\\\",this.sourceCaches[t.source].pause()),this._changed=!0},r.prototype._flattenAndSortRenderedFeatures=function(t){for(var e=this,r=function(t){return\\\"fill-extrusion\\\"===e._layers[t].type},n={},i=[],a=this._order.length-1;a>=0;a--){var o=this._order[a];if(r(o)){n[o]=a;for(var s=0,l=t;s<l.length;s+=1){var c=l[s][o];if(c)for(var u=0,h=c;u<h.length;u+=1){var f=h[u];i.push(f)}}}}i.sort(function(t,e){return e.intersectionZ-t.intersectionZ});for(var p=[],d=this._order.length-1;d>=0;d--){var g=this._order[d];if(r(g))for(var v=i.length-1;v>=0;v--){var m=i[v].feature;if(n[m.layer.id]<d)break;p.push(m),i.pop()}else for(var y=0,x=t;y<x.length;y+=1){var b=x[y][g];if(b)for(var _=0,w=b;_<w.length;_+=1){var k=w[_];p.push(k.feature)}}}return p},r.prototype.queryRenderedFeatures=function(e,r,n){r&&r.filter&&this._validate(t.validateStyle.filter,\\\"queryRenderedFeatures.filter\\\",r.filter,null,r);var i={};if(r&&r.layers){if(!Array.isArray(r.layers))return this.fire(new t.ErrorEvent(new Error(\\\"parameters.layers must be an Array.\\\"))),[];for(var a=0,o=r.layers;a<o.length;a+=1){var s=o[a],l=this._layers[s];if(!l)return this.fire(new t.ErrorEvent(new Error(\\\"The layer '\\\"+s+\\\"' does not exist in the map's style and cannot be queried for features.\\\"))),[];i[l.source]=!0}}var c=[];for(var u in this.sourceCaches)r.layers&&!i[u]||c.push(R(this.sourceCaches[u],this._layers,e,r,n));return this.placement&&c.push(function(t,e,r,n,i,a){for(var o={},s=i.queryRenderedSymbols(r),l=[],c=0,u=Object.keys(s).map(Number);c<u.length;c+=1){var h=u[c];l.push(a[h])}l.sort(F);for(var f=function(){var e=d[p],r=e.featureIndex.lookupSymbolFeatures(s[e.bucketInstanceId],e.bucketIndex,e.sourceLayerIndex,n.filter,n.layers,t);for(var i in r){var a=o[i]=o[i]||[],l=r[i];l.sort(function(t,r){var n=e.featureSortOrder;if(n){var i=n.indexOf(t.featureIndex);return n.indexOf(r.featureIndex)-i}return r.featureIndex-t.featureIndex});for(var c=0,u=l;c<u.length;c+=1){var h=u[c];a.push(h)}}},p=0,d=l;p<d.length;p+=1)f();var g=function(r){o[r].forEach(function(n){var i=n.feature,a=t[r],o=e[a.source].getFeatureState(i.layer[\\\"source-layer\\\"],i.id);i.source=i.layer.source,i.layer[\\\"source-layer\\\"]&&(i.sourceLayer=i.layer[\\\"source-layer\\\"]),i.state=o})};for(var v in o)g(v);return o}(this._layers,this.sourceCaches,e,r,this.placement.collisionIndex,this.placement.retainedQueryData)),this._flattenAndSortRenderedFeatures(c)},r.prototype.querySourceFeatures=function(e,r){r&&r.filter&&this._validate(t.validateStyle.filter,\\\"querySourceFeatures.filter\\\",r.filter,null,r);var n=this.sourceCaches[e];return n?function(t,e){for(var r=t.getRenderableIds().map(function(e){return t.getTileByID(e)}),n=[],i={},a=0;a<r.length;a++){var o=r[a],s=o.tileID.canonical.key;i[s]||(i[s]=!0,o.querySourceFeatures(n,e))}return n}(n,r):[]},r.prototype.addSourceType=function(t,e,n){return r.getSourceType(t)?n(new Error('A source type called \\\"'+t+'\\\" already exists.')):(r.setSourceType(t,e),e.workerSourceURL?void this.dispatcher.broadcast(\\\"loadWorkerSource\\\",{name:t,url:e.workerSourceURL},n):n(null,null))},r.prototype.getLight=function(){return this.light.getLight()},r.prototype.setLight=function(e,r){void 0===r&&(r={}),this._checkLoaded();var n=this.light.getLight(),i=!1;for(var a in e)if(!t.deepEqual(e[a],n[a])){i=!0;break}if(i){var o={now:t.browser.now(),transition:t.extend({duration:300,delay:0},this.stylesheet.transition)};this.light.setLight(e,r),this.light.updateTransitions(o)}},r.prototype._validate=function(e,r,n,i,a){return void 0===a&&(a={}),(!a||!1!==a.validate)&&Oe(this,e.call(t.validateStyle,t.extend({key:r,style:this.serialize(),value:n,styleSpec:t.styleSpec},i)))},r.prototype._remove=function(){for(var e in this._request&&(this._request.cancel(),this._request=null),this._spriteRequest&&(this._spriteRequest.cancel(),this._spriteRequest=null),t.evented.off(\\\"pluginAvailable\\\",this._rtlTextPluginCallback),this.sourceCaches)this.sourceCaches[e].clearTiles();this.dispatcher.remove()},r.prototype._clearSource=function(t){this.sourceCaches[t].clearTiles()},r.prototype._reloadSource=function(t){this.sourceCaches[t].resume(),this.sourceCaches[t].reload()},r.prototype._updateSources=function(t){for(var e in this.sourceCaches)this.sourceCaches[e].update(t)},r.prototype._generateCollisionBoxes=function(){for(var t in this.sourceCaches)this._reloadSource(t)},r.prototype._updatePlacement=function(e,r,n,i){for(var a=!1,o=!1,s={},l=0,c=this._order;l<c.length;l+=1){var u=c[l],h=this._layers[u];if(\\\"symbol\\\"===h.type){if(!s[h.source]){var f=this.sourceCaches[h.source];s[h.source]=f.getRenderableIds(!0).map(function(t){return f.getTileByID(t)}).sort(function(t,e){return e.tileID.overscaledZ-t.tileID.overscaledZ||(t.tileID.isLessThan(e.tileID)?-1:1)})}var p=this.crossTileSymbolIndex.addLayer(h,s[h.source],e.center.lng);a=a||p}}this.crossTileSymbolIndex.pruneUnusedLayers(this._order);var d=this._layerOrderChanged||0===n;if((d||!this.pauseablePlacement||this.pauseablePlacement.isDone()&&!this.placement.stillRecent(t.browser.now()))&&(this.pauseablePlacement=new Me(e,this._order,d,r,n,i,this.placement),this._layerOrderChanged=!1),this.pauseablePlacement.isDone()?this.placement.setStale():(this.pauseablePlacement.continuePlacement(this._order,this._layers,s),this.pauseablePlacement.isDone()&&(this.placement=this.pauseablePlacement.commit(t.browser.now()),o=!0),a&&this.pauseablePlacement.placement.setStale()),o||a)for(var g=0,v=this._order;g<v.length;g+=1){var m=v[g],y=this._layers[m];\\\"symbol\\\"===y.type&&this.placement.updateLayerOpacities(y,s[y.source])}return!this.pauseablePlacement.isDone()||this.placement.hasTransitions(t.browser.now())},r.prototype._releaseSymbolFadeTiles=function(){for(var t in this.sourceCaches)this.sourceCaches[t].releaseSymbolFadeTiles()},r.prototype.getImages=function(t,e,r){this.imageManager.getImages(e.icons,r)},r.prototype.getGlyphs=function(t,e,r){this.glyphManager.getGlyphs(e.stacks,r)},r.prototype.getResource=function(e,r,n){return t.makeRequest(r,n)},r}(t.Evented);De.getSourceType=function(t){return z[t]},De.setSourceType=function(t,e){z[t]=e},De.registerForPluginAvailability=t.registerForPluginAvailability;var Re=t.createLayout([{name:\\\"a_pos\\\",type:\\\"Int16\\\",components:2}]),Fe=lr(\\\"#ifdef GL_ES\\\\nprecision mediump float;\\\\n#else\\\\n#if !defined(lowp)\\\\n#define lowp\\\\n#endif\\\\n#if !defined(mediump)\\\\n#define mediump\\\\n#endif\\\\n#if !defined(highp)\\\\n#define highp\\\\n#endif\\\\n#endif\\\",\\\"#ifdef GL_ES\\\\nprecision highp float;\\\\n#else\\\\n#if !defined(lowp)\\\\n#define lowp\\\\n#endif\\\\n#if !defined(mediump)\\\\n#define mediump\\\\n#endif\\\\n#if !defined(highp)\\\\n#define highp\\\\n#endif\\\\n#endif\\\\nvec2 unpack_float(const float packedValue) {int packedIntValue=int(packedValue);int v0=packedIntValue/256;return vec2(v0,packedIntValue-v0*256);}vec2 unpack_opacity(const float packedOpacity) {int intOpacity=int(packedOpacity)/2;return vec2(float(intOpacity)/127.0,mod(packedOpacity,2.0));}vec4 decode_color(const vec2 encodedColor) {return vec4(unpack_float(encodedColor[0])/255.0,unpack_float(encodedColor[1])/255.0\\\\n);}float unpack_mix_vec2(const vec2 packedValue,const float t) {return mix(packedValue[0],packedValue[1],t);}vec4 unpack_mix_color(const vec4 packedColors,const float t) {vec4 minColor=decode_color(vec2(packedColors[0],packedColors[1]));vec4 maxColor=decode_color(vec2(packedColors[2],packedColors[3]));return mix(minColor,maxColor,t);}vec2 get_pattern_pos(const vec2 pixel_coord_upper,const vec2 pixel_coord_lower,const vec2 pattern_size,const float tile_units_to_pixels,const vec2 pos) {vec2 offset=mod(mod(mod(pixel_coord_upper,pattern_size)*256.0,pattern_size)*256.0+pixel_coord_lower,pattern_size);return (tile_units_to_pixels*pos+offset)/pattern_size;}\\\"),Be=lr(\\\"uniform vec4 u_color;uniform float u_opacity;void main() {gl_FragColor=u_color*u_opacity;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}\\\"),Ne=lr(\\\"uniform vec2 u_pattern_tl_a;uniform vec2 u_pattern_br_a;uniform vec2 u_pattern_tl_b;uniform vec2 u_pattern_br_b;uniform vec2 u_texsize;uniform float u_mix;uniform float u_opacity;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;void main() {vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(u_pattern_tl_a/u_texsize,u_pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(u_pattern_tl_b/u_texsize,u_pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);gl_FragColor=mix(color1,color2,u_mix)*u_opacity;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;uniform vec2 u_pattern_size_a;uniform vec2 u_pattern_size_b;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_scale_a;uniform float u_scale_b;uniform float u_tile_units_to_pixels;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_a*u_pattern_size_a,u_tile_units_to_pixels,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_b*u_pattern_size_b,u_tile_units_to_pixels,a_pos);}\\\"),je=lr(\\\"varying vec3 v_data;\\\\n#pragma mapbox: define highp vec4 color\\\\n#pragma mapbox: define mediump float radius\\\\n#pragma mapbox: define lowp float blur\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define highp vec4 stroke_color\\\\n#pragma mapbox: define mediump float stroke_width\\\\n#pragma mapbox: define lowp float stroke_opacity\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 color\\\\n#pragma mapbox: initialize mediump float radius\\\\n#pragma mapbox: initialize lowp float blur\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize highp vec4 stroke_color\\\\n#pragma mapbox: initialize mediump float stroke_width\\\\n#pragma mapbox: initialize lowp float stroke_opacity\\\\nvec2 extrude=v_data.xy;float extrude_length=length(extrude);lowp float antialiasblur=v_data.z;float antialiased_blur=-max(blur,antialiasblur);float opacity_t=smoothstep(0.0,antialiased_blur,extrude_length-1.0);float color_t=stroke_width < 0.01 ? 0.0 : smoothstep(antialiased_blur,0.0,extrude_length-radius/(radius+stroke_width));gl_FragColor=opacity_t*mix(color*opacity,stroke_color*stroke_opacity,color_t);\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;uniform bool u_scale_with_map;uniform bool u_pitch_with_map;uniform vec2 u_extrude_scale;uniform lowp float u_device_pixel_ratio;uniform highp float u_camera_to_center_distance;attribute vec2 a_pos;varying vec3 v_data;\\\\n#pragma mapbox: define highp vec4 color\\\\n#pragma mapbox: define mediump float radius\\\\n#pragma mapbox: define lowp float blur\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define highp vec4 stroke_color\\\\n#pragma mapbox: define mediump float stroke_width\\\\n#pragma mapbox: define lowp float stroke_opacity\\\\nvoid main(void) {\\\\n#pragma mapbox: initialize highp vec4 color\\\\n#pragma mapbox: initialize mediump float radius\\\\n#pragma mapbox: initialize lowp float blur\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize highp vec4 stroke_color\\\\n#pragma mapbox: initialize mediump float stroke_width\\\\n#pragma mapbox: initialize lowp float stroke_opacity\\\\nvec2 extrude=vec2(mod(a_pos,2.0)*2.0-1.0);vec2 circle_center=floor(a_pos*0.5);if (u_pitch_with_map) {vec2 corner_position=circle_center;if (u_scale_with_map) {corner_position+=extrude*(radius+stroke_width)*u_extrude_scale;} else {vec4 projected_center=u_matrix*vec4(circle_center,0,1);corner_position+=extrude*(radius+stroke_width)*u_extrude_scale*(projected_center.w/u_camera_to_center_distance);}gl_Position=u_matrix*vec4(corner_position,0,1);} else {gl_Position=u_matrix*vec4(circle_center,0,1);if (u_scale_with_map) {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*u_camera_to_center_distance;} else {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*gl_Position.w;}}lowp float antialiasblur=1.0/u_device_pixel_ratio/(radius+stroke_width);v_data=vec3(extrude.x,extrude.y,antialiasblur);}\\\"),Ue=lr(\\\"void main() {gl_FragColor=vec4(1.0);}\\\",\\\"attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}\\\"),Ve=lr(\\\"uniform highp float u_intensity;varying vec2 v_extrude;\\\\n#pragma mapbox: define highp float weight\\\\n#define GAUSS_COEF 0.3989422804014327\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp float weight\\\\nfloat d=-0.5*3.0*3.0*dot(v_extrude,v_extrude);float val=weight*u_intensity*GAUSS_COEF*exp(d);gl_FragColor=vec4(val,1.0,1.0,1.0);\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;uniform float u_extrude_scale;uniform float u_opacity;uniform float u_intensity;attribute vec2 a_pos;varying vec2 v_extrude;\\\\n#pragma mapbox: define highp float weight\\\\n#pragma mapbox: define mediump float radius\\\\nconst highp float ZERO=1.0/255.0/16.0;\\\\n#define GAUSS_COEF 0.3989422804014327\\\\nvoid main(void) {\\\\n#pragma mapbox: initialize highp float weight\\\\n#pragma mapbox: initialize mediump float radius\\\\nvec2 unscaled_extrude=vec2(mod(a_pos,2.0)*2.0-1.0);float S=sqrt(-2.0*log(ZERO/weight/u_intensity/GAUSS_COEF))/3.0;v_extrude=S*unscaled_extrude;vec2 extrude=v_extrude*radius*u_extrude_scale;vec4 pos=vec4(floor(a_pos*0.5)+extrude,0,1);gl_Position=u_matrix*pos;}\\\"),qe=lr(\\\"uniform sampler2D u_image;uniform sampler2D u_color_ramp;uniform float u_opacity;varying vec2 v_pos;void main() {float t=texture2D(u_image,v_pos).r;vec4 color=texture2D(u_color_ramp,vec2(t,0.5));gl_FragColor=color*u_opacity;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(0.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;uniform vec2 u_world;attribute vec2 a_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos*u_world,0,1);v_pos.x=a_pos.x;v_pos.y=1.0-a_pos.y;}\\\"),He=lr(\\\"varying float v_placed;varying float v_notUsed;void main() {float alpha=0.5;gl_FragColor=vec4(1.0,0.0,0.0,1.0)*alpha;if (v_placed > 0.5) {gl_FragColor=vec4(0.0,0.0,1.0,0.5)*alpha;}if (v_notUsed > 0.5) {gl_FragColor*=.1;}}\\\",\\\"attribute vec2 a_pos;attribute vec2 a_anchor_pos;attribute vec2 a_extrude;attribute vec2 a_placed;attribute vec2 a_shift;uniform mat4 u_matrix;uniform vec2 u_extrude_scale;uniform float u_camera_to_center_distance;varying float v_placed;varying float v_notUsed;void main() {vec4 projectedPoint=u_matrix*vec4(a_anchor_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);gl_Position=u_matrix*vec4(a_pos,0.0,1.0);gl_Position.xy+=(a_extrude+a_shift)*u_extrude_scale*gl_Position.w*collision_perspective_ratio;v_placed=a_placed.x;v_notUsed=a_placed.y;}\\\"),Ge=lr(\\\"uniform float u_overscale_factor;varying float v_placed;varying float v_notUsed;varying float v_radius;varying vec2 v_extrude;varying vec2 v_extrude_scale;void main() {float alpha=0.5;vec4 color=vec4(1.0,0.0,0.0,1.0)*alpha;if (v_placed > 0.5) {color=vec4(0.0,0.0,1.0,0.5)*alpha;}if (v_notUsed > 0.5) {color*=.2;}float extrude_scale_length=length(v_extrude_scale);float extrude_length=length(v_extrude)*extrude_scale_length;float stroke_width=15.0*extrude_scale_length/u_overscale_factor;float radius=v_radius*extrude_scale_length;float distance_to_edge=abs(extrude_length-radius);float opacity_t=smoothstep(-stroke_width,0.0,-distance_to_edge);gl_FragColor=opacity_t*color;}\\\",\\\"attribute vec2 a_pos;attribute vec2 a_anchor_pos;attribute vec2 a_extrude;attribute vec2 a_placed;uniform mat4 u_matrix;uniform vec2 u_extrude_scale;uniform float u_camera_to_center_distance;varying float v_placed;varying float v_notUsed;varying float v_radius;varying vec2 v_extrude;varying vec2 v_extrude_scale;void main() {vec4 projectedPoint=u_matrix*vec4(a_anchor_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);gl_Position=u_matrix*vec4(a_pos,0.0,1.0);highp float padding_factor=1.2;gl_Position.xy+=a_extrude*u_extrude_scale*padding_factor*gl_Position.w*collision_perspective_ratio;v_placed=a_placed.x;v_notUsed=a_placed.y;v_radius=abs(a_extrude.y);v_extrude=a_extrude*padding_factor;v_extrude_scale=u_extrude_scale*u_camera_to_center_distance*collision_perspective_ratio;}\\\"),Ye=lr(\\\"uniform highp vec4 u_color;void main() {gl_FragColor=u_color;}\\\",\\\"attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}\\\"),We=lr(\\\"#pragma mapbox: define highp vec4 color\\\\n#pragma mapbox: define lowp float opacity\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 color\\\\n#pragma mapbox: initialize lowp float opacity\\\\ngl_FragColor=color*opacity;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"attribute vec2 a_pos;uniform mat4 u_matrix;\\\\n#pragma mapbox: define highp vec4 color\\\\n#pragma mapbox: define lowp float opacity\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 color\\\\n#pragma mapbox: initialize lowp float opacity\\\\ngl_Position=u_matrix*vec4(a_pos,0,1);}\\\"),Xe=lr(\\\"varying vec2 v_pos;\\\\n#pragma mapbox: define highp vec4 outline_color\\\\n#pragma mapbox: define lowp float opacity\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 outline_color\\\\n#pragma mapbox: initialize lowp float opacity\\\\nfloat dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=outline_color*(alpha*opacity);\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"attribute vec2 a_pos;uniform mat4 u_matrix;uniform vec2 u_world;varying vec2 v_pos;\\\\n#pragma mapbox: define highp vec4 outline_color\\\\n#pragma mapbox: define lowp float opacity\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 outline_color\\\\n#pragma mapbox: initialize lowp float opacity\\\\ngl_Position=u_matrix*vec4(a_pos,0,1);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}\\\"),Ze=lr(\\\"uniform vec2 u_texsize;uniform sampler2D u_image;uniform float u_fade;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define lowp vec4 pattern_from\\\\n#pragma mapbox: define lowp vec4 pattern_to\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize mediump vec4 pattern_from\\\\n#pragma mapbox: initialize mediump vec4 pattern_to\\\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);float dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=mix(color1,color2,u_fade)*alpha*opacity;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;uniform vec2 u_world;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec4 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define lowp vec4 pattern_from\\\\n#pragma mapbox: define lowp vec4 pattern_to\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize mediump vec4 pattern_from\\\\n#pragma mapbox: initialize mediump vec4 pattern_to\\\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;gl_Position=u_matrix*vec4(a_pos,0,1);vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,a_pos);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}\\\"),Je=lr(\\\"uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define lowp vec4 pattern_from\\\\n#pragma mapbox: define lowp vec4 pattern_to\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize mediump vec4 pattern_from\\\\n#pragma mapbox: initialize mediump vec4 pattern_to\\\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);gl_FragColor=mix(color1,color2,u_fade)*opacity;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec4 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define lowp vec4 pattern_from\\\\n#pragma mapbox: define lowp vec4 pattern_to\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize mediump vec4 pattern_from\\\\n#pragma mapbox: initialize mediump vec4 pattern_to\\\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileZoomRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);gl_Position=u_matrix*vec4(a_pos,0,1);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileZoomRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileZoomRatio,a_pos);}\\\"),Ke=lr(\\\"varying vec4 v_color;void main() {gl_FragColor=v_color;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;uniform float u_vertical_gradient;uniform lowp float u_opacity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec4 v_color;\\\\n#pragma mapbox: define highp float base\\\\n#pragma mapbox: define highp float height\\\\n#pragma mapbox: define highp vec4 color\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp float base\\\\n#pragma mapbox: initialize highp float height\\\\n#pragma mapbox: initialize highp vec4 color\\\\nvec3 normal=a_normal_ed.xyz;base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);gl_Position=u_matrix*vec4(a_pos,t > 0.0 ? height : base,1);float colorvalue=color.r*0.2126+color.g*0.7152+color.b*0.0722;v_color=vec4(0.0,0.0,0.0,1.0);vec4 ambientlight=vec4(0.03,0.03,0.03,1.0);color+=ambientlight;float directional=clamp(dot(normal/16384.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((1.0-colorvalue+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_color.r+=clamp(color.r*directional*u_lightcolor.r,mix(0.0,0.3,1.0-u_lightcolor.r),1.0);v_color.g+=clamp(color.g*directional*u_lightcolor.g,mix(0.0,0.3,1.0-u_lightcolor.g),1.0);v_color.b+=clamp(color.b*directional*u_lightcolor.b,mix(0.0,0.3,1.0-u_lightcolor.b),1.0);v_color*=u_opacity;}\\\"),$e=lr(\\\"uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\\\\n#pragma mapbox: define lowp float base\\\\n#pragma mapbox: define lowp float height\\\\n#pragma mapbox: define lowp vec4 pattern_from\\\\n#pragma mapbox: define lowp vec4 pattern_to\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float base\\\\n#pragma mapbox: initialize lowp float height\\\\n#pragma mapbox: initialize mediump vec4 pattern_from\\\\n#pragma mapbox: initialize mediump vec4 pattern_to\\\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);vec4 mixedColor=mix(color1,color2,u_fade);gl_FragColor=mixedColor*v_lighting;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_height_factor;uniform vec4 u_scale;uniform float u_vertical_gradient;uniform lowp float u_opacity;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\\\\n#pragma mapbox: define lowp float base\\\\n#pragma mapbox: define lowp float height\\\\n#pragma mapbox: define lowp vec4 pattern_from\\\\n#pragma mapbox: define lowp vec4 pattern_to\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float base\\\\n#pragma mapbox: initialize lowp float height\\\\n#pragma mapbox: initialize mediump vec4 pattern_from\\\\n#pragma mapbox: initialize mediump vec4 pattern_to\\\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;vec3 normal=a_normal_ed.xyz;float edgedistance=a_normal_ed.w;vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);float z=t > 0.0 ? height : base;gl_Position=u_matrix*vec4(a_pos,z,1);vec2 pos=normal.x==1.0 && normal.y==0.0 && normal.z==16384.0\\\\n? a_pos\\\\n: vec2(edgedistance,z*u_height_factor);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,pos);v_lighting=vec4(0.0,0.0,0.0,1.0);float directional=clamp(dot(normal/16383.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((0.5+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_lighting.rgb+=clamp(directional*u_lightcolor,mix(vec3(0.0),vec3(0.3),1.0-u_lightcolor),vec3(1.0));v_lighting*=u_opacity;}\\\"),Qe=lr(\\\"#ifdef GL_ES\\\\nprecision highp float;\\\\n#endif\\\\nuniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_dimension;uniform float u_zoom;uniform float u_maxzoom;float getElevation(vec2 coord,float bias) {vec4 data=texture2D(u_image,coord)*255.0;return (data.r+data.g*256.0+data.b*256.0*256.0)/4.0;}void main() {vec2 epsilon=1.0/u_dimension;float a=getElevation(v_pos+vec2(-epsilon.x,-epsilon.y),0.0);float b=getElevation(v_pos+vec2(0,-epsilon.y),0.0);float c=getElevation(v_pos+vec2(epsilon.x,-epsilon.y),0.0);float d=getElevation(v_pos+vec2(-epsilon.x,0),0.0);float e=getElevation(v_pos,0.0);float f=getElevation(v_pos+vec2(epsilon.x,0),0.0);float g=getElevation(v_pos+vec2(-epsilon.x,epsilon.y),0.0);float h=getElevation(v_pos+vec2(0,epsilon.y),0.0);float i=getElevation(v_pos+vec2(epsilon.x,epsilon.y),0.0);float exaggeration=u_zoom < 2.0 ? 0.4 : u_zoom < 4.5 ? 0.35 : 0.3;vec2 deriv=vec2((c+f+f+i)-(a+d+d+g),(g+h+h+i)-(a+b+b+c))/ pow(2.0,(u_zoom-u_maxzoom)*exaggeration+19.2562-u_zoom);gl_FragColor=clamp(vec4(deriv.x/2.0+0.5,deriv.y/2.0+0.5,1.0,1.0),0.0,1.0);\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;uniform vec2 u_dimension;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);highp vec2 epsilon=1.0/u_dimension;float scale=(u_dimension.x-2.0)/u_dimension.x;v_pos=(a_texture_pos/8192.0)*scale+epsilon;}\\\"),tr=lr(\\\"uniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_latrange;uniform vec2 u_light;uniform vec4 u_shadow;uniform vec4 u_highlight;uniform vec4 u_accent;\\\\n#define PI 3.141592653589793\\\\nvoid main() {vec4 pixel=texture2D(u_image,v_pos);vec2 deriv=((pixel.rg*2.0)-1.0);float scaleFactor=cos(radians((u_latrange[0]-u_latrange[1])*(1.0-v_pos.y)+u_latrange[1]));float slope=atan(1.25*length(deriv)/scaleFactor);float aspect=deriv.x !=0.0 ? atan(deriv.y,-deriv.x) : PI/2.0*(deriv.y > 0.0 ? 1.0 :-1.0);float intensity=u_light.x;float azimuth=u_light.y+PI;float base=1.875-intensity*1.75;float maxValue=0.5*PI;float scaledSlope=intensity !=0.5 ? ((pow(base,slope)-1.0)/(pow(base,maxValue)-1.0))*maxValue : slope;float accent=cos(scaledSlope);vec4 accent_color=(1.0-accent)*u_accent*clamp(intensity*2.0,0.0,1.0);float shade=abs(mod((aspect+azimuth)/PI+0.5,2.0)-1.0);vec4 shade_color=mix(u_shadow,u_highlight,shade)*sin(scaledSlope)*clamp(intensity*2.0,0.0,1.0);gl_FragColor=accent_color*(1.0-shade_color.a)+shade_color;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos=a_texture_pos/8192.0;}\\\"),er=lr(\\\"uniform lowp float u_device_pixel_ratio;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;\\\\n#pragma mapbox: define highp vec4 color\\\\n#pragma mapbox: define lowp float blur\\\\n#pragma mapbox: define lowp float opacity\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 color\\\\n#pragma mapbox: initialize lowp float blur\\\\n#pragma mapbox: initialize lowp float opacity\\\\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);gl_FragColor=color*(alpha*opacity);\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"\\\\n#define scale 0.015873016\\\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform vec2 u_units_to_pixels;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_linesofar;\\\\n#pragma mapbox: define highp vec4 color\\\\n#pragma mapbox: define lowp float blur\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define mediump float gapwidth\\\\n#pragma mapbox: define lowp float offset\\\\n#pragma mapbox: define mediump float width\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 color\\\\n#pragma mapbox: initialize lowp float blur\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize mediump float gapwidth\\\\n#pragma mapbox: initialize lowp float offset\\\\n#pragma mapbox: initialize mediump float width\\\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}\\\"),rr=lr(\\\"uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;varying highp float v_lineprogress;\\\\n#pragma mapbox: define lowp float blur\\\\n#pragma mapbox: define lowp float opacity\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float blur\\\\n#pragma mapbox: initialize lowp float opacity\\\\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);vec4 color=texture2D(u_image,vec2(v_lineprogress,0.5));gl_FragColor=color*(alpha*opacity);\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"\\\\n#define MAX_LINE_DISTANCE 32767.0\\\\n#define scale 0.015873016\\\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_lineprogress;\\\\n#pragma mapbox: define lowp float blur\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define mediump float gapwidth\\\\n#pragma mapbox: define lowp float offset\\\\n#pragma mapbox: define mediump float width\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float blur\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize mediump float gapwidth\\\\n#pragma mapbox: initialize lowp float offset\\\\n#pragma mapbox: initialize mediump float width\\\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_lineprogress=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0/MAX_LINE_DISTANCE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}\\\"),nr=lr(\\\"uniform lowp float u_device_pixel_ratio;uniform vec2 u_texsize;uniform float u_fade;uniform mediump vec4 u_scale;uniform sampler2D u_image;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;\\\\n#pragma mapbox: define lowp vec4 pattern_from\\\\n#pragma mapbox: define lowp vec4 pattern_to\\\\n#pragma mapbox: define lowp float blur\\\\n#pragma mapbox: define lowp float opacity\\\\nvoid main() {\\\\n#pragma mapbox: initialize mediump vec4 pattern_from\\\\n#pragma mapbox: initialize mediump vec4 pattern_to\\\\n#pragma mapbox: initialize lowp float blur\\\\n#pragma mapbox: initialize lowp float opacity\\\\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileZoomRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);vec2 pattern_size_a=vec2(display_size_a.x*fromScale/tileZoomRatio,display_size_a.y);vec2 pattern_size_b=vec2(display_size_b.x*toScale/tileZoomRatio,display_size_b.y);float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float x_a=mod(v_linesofar/pattern_size_a.x,1.0);float x_b=mod(v_linesofar/pattern_size_b.x,1.0);float y_a=0.5+(v_normal.y*clamp(v_width2.s,0.0,(pattern_size_a.y+2.0)/2.0)/pattern_size_a.y);float y_b=0.5+(v_normal.y*clamp(v_width2.s,0.0,(pattern_size_b.y+2.0)/2.0)/pattern_size_b.y);vec2 pos_a=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,vec2(x_a,y_a));vec2 pos_b=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,vec2(x_b,y_b));vec4 color=mix(texture2D(u_image,pos_a),texture2D(u_image,pos_b),u_fade);gl_FragColor=color*alpha*opacity;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"\\\\n#define scale 0.015873016\\\\n#define LINE_DISTANCE_SCALE 2.0\\\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform vec2 u_units_to_pixels;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;\\\\n#pragma mapbox: define lowp float blur\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define lowp float offset\\\\n#pragma mapbox: define mediump float gapwidth\\\\n#pragma mapbox: define mediump float width\\\\n#pragma mapbox: define lowp vec4 pattern_from\\\\n#pragma mapbox: define lowp vec4 pattern_to\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float blur\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize lowp float offset\\\\n#pragma mapbox: initialize mediump float gapwidth\\\\n#pragma mapbox: initialize mediump float width\\\\n#pragma mapbox: initialize mediump vec4 pattern_from\\\\n#pragma mapbox: initialize mediump vec4 pattern_to\\\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_linesofar=a_linesofar;v_width2=vec2(outset,inset);}\\\"),ir=lr(\\\"uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;uniform float u_sdfgamma;uniform float u_mix;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\\\\n#pragma mapbox: define highp vec4 color\\\\n#pragma mapbox: define lowp float blur\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define mediump float width\\\\n#pragma mapbox: define lowp float floorwidth\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 color\\\\n#pragma mapbox: initialize lowp float blur\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize mediump float width\\\\n#pragma mapbox: initialize lowp float floorwidth\\\\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float sdfdist_a=texture2D(u_image,v_tex_a).a;float sdfdist_b=texture2D(u_image,v_tex_b).a;float sdfdist=mix(sdfdist_a,sdfdist_b,u_mix);alpha*=smoothstep(0.5-u_sdfgamma/floorwidth,0.5+u_sdfgamma/floorwidth,sdfdist);gl_FragColor=color*(alpha*opacity);\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"\\\\n#define scale 0.015873016\\\\n#define LINE_DISTANCE_SCALE 2.0\\\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_patternscale_a;uniform float u_tex_y_a;uniform vec2 u_patternscale_b;uniform float u_tex_y_b;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\\\\n#pragma mapbox: define highp vec4 color\\\\n#pragma mapbox: define lowp float blur\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define mediump float gapwidth\\\\n#pragma mapbox: define lowp float offset\\\\n#pragma mapbox: define mediump float width\\\\n#pragma mapbox: define lowp float floorwidth\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 color\\\\n#pragma mapbox: initialize lowp float blur\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize mediump float gapwidth\\\\n#pragma mapbox: initialize lowp float offset\\\\n#pragma mapbox: initialize mediump float width\\\\n#pragma mapbox: initialize lowp float floorwidth\\\\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_tex_a=vec2(a_linesofar*u_patternscale_a.x/floorwidth,normal.y*u_patternscale_a.y+u_tex_y_a);v_tex_b=vec2(a_linesofar*u_patternscale_b.x/floorwidth,normal.y*u_patternscale_b.y+u_tex_y_b);v_width2=vec2(outset,inset);}\\\"),ar=lr(\\\"uniform float u_fade_t;uniform float u_opacity;uniform sampler2D u_image0;uniform sampler2D u_image1;varying vec2 v_pos0;varying vec2 v_pos1;uniform float u_brightness_low;uniform float u_brightness_high;uniform float u_saturation_factor;uniform float u_contrast_factor;uniform vec3 u_spin_weights;void main() {vec4 color0=texture2D(u_image0,v_pos0);vec4 color1=texture2D(u_image1,v_pos1);if (color0.a > 0.0) {color0.rgb=color0.rgb/color0.a;}if (color1.a > 0.0) {color1.rgb=color1.rgb/color1.a;}vec4 color=mix(color0,color1,u_fade_t);color.a*=u_opacity;vec3 rgb=color.rgb;rgb=vec3(dot(rgb,u_spin_weights.xyz),dot(rgb,u_spin_weights.zxy),dot(rgb,u_spin_weights.yzx));float average=(color.r+color.g+color.b)/3.0;rgb+=(average-rgb)*u_saturation_factor;rgb=(rgb-0.5)*u_contrast_factor+0.5;vec3 u_high_vec=vec3(u_brightness_low,u_brightness_low,u_brightness_low);vec3 u_low_vec=vec3(u_brightness_high,u_brightness_high,u_brightness_high);gl_FragColor=vec4(mix(u_high_vec,u_low_vec,rgb)*color.a,color.a);\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"uniform mat4 u_matrix;uniform vec2 u_tl_parent;uniform float u_scale_parent;uniform float u_buffer_scale;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos0;varying vec2 v_pos1;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos0=(((a_texture_pos/8192.0)-0.5)/u_buffer_scale )+0.5;v_pos1=(v_pos0*u_scale_parent)+u_tl_parent;}\\\"),or=lr(\\\"uniform sampler2D u_texture;varying vec2 v_tex;varying float v_fade_opacity;\\\\n#pragma mapbox: define lowp float opacity\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float opacity\\\\nlowp float alpha=opacity*v_fade_opacity;gl_FragColor=texture2D(u_texture,v_tex)*alpha;\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform highp float u_camera_to_center_distance;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform float u_fade_change;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform vec2 u_texsize;varying vec2 v_tex;varying float v_fade_opacity;\\\\n#pragma mapbox: define lowp float opacity\\\\nvoid main() {\\\\n#pragma mapbox: initialize lowp float opacity\\\\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size[0],a_size[1],u_size_t)/256.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size[0]/256.0;} else if (!u_is_size_zoom_constant && u_is_size_feature_constant) {size=u_size;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\\\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale),0.0,1.0);v_tex=a_tex/u_texsize;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;v_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));}\\\"),sr=lr(\\\"#define SDF_PX 8.0\\\\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;uniform bool u_is_text;varying vec2 v_data0;varying vec3 v_data1;\\\\n#pragma mapbox: define highp vec4 fill_color\\\\n#pragma mapbox: define highp vec4 halo_color\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define lowp float halo_width\\\\n#pragma mapbox: define lowp float halo_blur\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 fill_color\\\\n#pragma mapbox: initialize highp vec4 halo_color\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize lowp float halo_width\\\\n#pragma mapbox: initialize lowp float halo_blur\\\\nfloat EDGE_GAMMA=0.105/u_device_pixel_ratio;vec2 tex=v_data0.xy;float gamma_scale=v_data1.x;float size=v_data1.y;float fade_opacity=v_data1[2];float fontScale=u_is_text ? size/24.0 : size;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\\\\n#ifdef OVERDRAW_INSPECTOR\\\\ngl_FragColor=vec4(1.0);\\\\n#endif\\\\n}\\\",\\\"const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;varying vec2 v_data0;varying vec3 v_data1;\\\\n#pragma mapbox: define highp vec4 fill_color\\\\n#pragma mapbox: define highp vec4 halo_color\\\\n#pragma mapbox: define lowp float opacity\\\\n#pragma mapbox: define lowp float halo_width\\\\n#pragma mapbox: define lowp float halo_blur\\\\nvoid main() {\\\\n#pragma mapbox: initialize highp vec4 fill_color\\\\n#pragma mapbox: initialize highp vec4 halo_color\\\\n#pragma mapbox: initialize lowp float opacity\\\\n#pragma mapbox: initialize lowp float halo_width\\\\n#pragma mapbox: initialize lowp float halo_blur\\\\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size[0],a_size[1],u_size_t)/256.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size[0]/256.0;} else if (!u_is_size_zoom_constant && u_is_size_feature_constant) {size=u_size;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\\\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale),0.0,1.0);float gamma_scale=gl_Position.w;vec2 tex=a_tex/u_texsize;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0=vec2(tex.x,tex.y);v_data1=vec3(gamma_scale,size,interpolated_fade_opacity);}\\\");function lr(t,e){var r=/#pragma mapbox: ([\\\\w]+) ([\\\\w]+) ([\\\\w]+) ([\\\\w]+)/g,n={};return{fragmentSource:t=t.replace(r,function(t,e,r,i,a){return n[a]=!0,\\\"define\\\"===e?\\\"\\\\n#ifndef HAS_UNIFORM_u_\\\"+a+\\\"\\\\nvarying \\\"+r+\\\" \\\"+i+\\\" \\\"+a+\\\";\\\\n#else\\\\nuniform \\\"+r+\\\" \\\"+i+\\\" u_\\\"+a+\\\";\\\\n#endif\\\\n\\\":\\\"\\\\n#ifdef HAS_UNIFORM_u_\\\"+a+\\\"\\\\n    \\\"+r+\\\" \\\"+i+\\\" \\\"+a+\\\" = u_\\\"+a+\\\";\\\\n#endif\\\\n\\\"}),vertexSource:e=e.replace(r,function(t,e,r,i,a){var o=\\\"float\\\"===i?\\\"vec2\\\":\\\"vec4\\\",s=a.match(/color/)?\\\"color\\\":o;return n[a]?\\\"define\\\"===e?\\\"\\\\n#ifndef HAS_UNIFORM_u_\\\"+a+\\\"\\\\nuniform lowp float u_\\\"+a+\\\"_t;\\\\nattribute \\\"+r+\\\" \\\"+o+\\\" a_\\\"+a+\\\";\\\\nvarying \\\"+r+\\\" \\\"+i+\\\" \\\"+a+\\\";\\\\n#else\\\\nuniform \\\"+r+\\\" \\\"+i+\\\" u_\\\"+a+\\\";\\\\n#endif\\\\n\\\":\\\"vec4\\\"===s?\\\"\\\\n#ifndef HAS_UNIFORM_u_\\\"+a+\\\"\\\\n    \\\"+a+\\\" = a_\\\"+a+\\\";\\\\n#else\\\\n    \\\"+r+\\\" \\\"+i+\\\" \\\"+a+\\\" = u_\\\"+a+\\\";\\\\n#endif\\\\n\\\":\\\"\\\\n#ifndef HAS_UNIFORM_u_\\\"+a+\\\"\\\\n    \\\"+a+\\\" = unpack_mix_\\\"+s+\\\"(a_\\\"+a+\\\", u_\\\"+a+\\\"_t);\\\\n#else\\\\n    \\\"+r+\\\" \\\"+i+\\\" \\\"+a+\\\" = u_\\\"+a+\\\";\\\\n#endif\\\\n\\\":\\\"define\\\"===e?\\\"\\\\n#ifndef HAS_UNIFORM_u_\\\"+a+\\\"\\\\nuniform lowp float u_\\\"+a+\\\"_t;\\\\nattribute \\\"+r+\\\" \\\"+o+\\\" a_\\\"+a+\\\";\\\\n#else\\\\nuniform \\\"+r+\\\" \\\"+i+\\\" u_\\\"+a+\\\";\\\\n#endif\\\\n\\\":\\\"vec4\\\"===s?\\\"\\\\n#ifndef HAS_UNIFORM_u_\\\"+a+\\\"\\\\n    \\\"+r+\\\" \\\"+i+\\\" \\\"+a+\\\" = a_\\\"+a+\\\";\\\\n#else\\\\n    \\\"+r+\\\" \\\"+i+\\\" \\\"+a+\\\" = u_\\\"+a+\\\";\\\\n#endif\\\\n\\\":\\\"\\\\n#ifndef HAS_UNIFORM_u_\\\"+a+\\\"\\\\n    \\\"+r+\\\" \\\"+i+\\\" \\\"+a+\\\" = unpack_mix_\\\"+s+\\\"(a_\\\"+a+\\\", u_\\\"+a+\\\"_t);\\\\n#else\\\\n    \\\"+r+\\\" \\\"+i+\\\" \\\"+a+\\\" = u_\\\"+a+\\\";\\\\n#endif\\\\n\\\"})}}var cr=Object.freeze({prelude:Fe,background:Be,backgroundPattern:Ne,circle:je,clippingMask:Ue,heatmap:Ve,heatmapTexture:qe,collisionBox:He,collisionCircle:Ge,debug:Ye,fill:We,fillOutline:Xe,fillOutlinePattern:Ze,fillPattern:Je,fillExtrusion:Ke,fillExtrusionPattern:$e,hillshadePrepare:Qe,hillshade:tr,line:er,lineGradient:rr,linePattern:nr,lineSDF:ir,raster:ar,symbolIcon:or,symbolSDF:sr}),ur=function(){this.boundProgram=null,this.boundLayoutVertexBuffer=null,this.boundPaintVertexBuffers=[],this.boundIndexBuffer=null,this.boundVertexOffset=null,this.boundDynamicVertexBuffer=null,this.vao=null};ur.prototype.bind=function(t,e,r,n,i,a,o,s){this.context=t;for(var l=this.boundPaintVertexBuffers.length!==n.length,c=0;!l&&c<n.length;c++)this.boundPaintVertexBuffers[c]!==n[c]&&(l=!0);var u=!this.vao||this.boundProgram!==e||this.boundLayoutVertexBuffer!==r||l||this.boundIndexBuffer!==i||this.boundVertexOffset!==a||this.boundDynamicVertexBuffer!==o||this.boundDynamicVertexBuffer2!==s;!t.extVertexArrayObject||u?this.freshBind(e,r,n,i,a,o,s):(t.bindVertexArrayOES.set(this.vao),o&&o.bind(),i&&i.dynamicDraw&&i.bind(),s&&s.bind())},ur.prototype.freshBind=function(t,e,r,n,i,a,o){var s,l=t.numAttributes,c=this.context,u=c.gl;if(c.extVertexArrayObject)this.vao&&this.destroy(),this.vao=c.extVertexArrayObject.createVertexArrayOES(),c.bindVertexArrayOES.set(this.vao),s=0,this.boundProgram=t,this.boundLayoutVertexBuffer=e,this.boundPaintVertexBuffers=r,this.boundIndexBuffer=n,this.boundVertexOffset=i,this.boundDynamicVertexBuffer=a,this.boundDynamicVertexBuffer2=o;else{s=c.currentNumAttributes||0;for(var h=l;h<s;h++)u.disableVertexAttribArray(h)}e.enableAttributes(u,t);for(var f=0,p=r;f<p.length;f+=1)p[f].enableAttributes(u,t);a&&a.enableAttributes(u,t),o&&o.enableAttributes(u,t),e.bind(),e.setVertexAttribPointers(u,t,i);for(var d=0,g=r;d<g.length;d+=1){var v=g[d];v.bind(),v.setVertexAttribPointers(u,t,i)}a&&(a.bind(),a.setVertexAttribPointers(u,t,i)),n&&n.bind(),o&&(o.bind(),o.setVertexAttribPointers(u,t,i)),c.currentNumAttributes=l},ur.prototype.destroy=function(){this.vao&&(this.context.extVertexArrayObject.deleteVertexArrayOES(this.vao),this.vao=null)};var hr=function(t,e,r,n,i){var a=t.gl;this.program=a.createProgram();var o=r.defines();i&&o.push(\\\"#define OVERDRAW_INSPECTOR;\\\");var s=o.concat(Fe.fragmentSource,e.fragmentSource).join(\\\"\\\\n\\\"),l=o.concat(Fe.vertexSource,e.vertexSource).join(\\\"\\\\n\\\"),c=a.createShader(a.FRAGMENT_SHADER);a.shaderSource(c,s),a.compileShader(c),a.attachShader(this.program,c);var u=a.createShader(a.VERTEX_SHADER);a.shaderSource(u,l),a.compileShader(u),a.attachShader(this.program,u);for(var h=r.layoutAttributes||[],f=0;f<h.length;f++)a.bindAttribLocation(this.program,f,h[f].name);a.linkProgram(this.program),this.numAttributes=a.getProgramParameter(this.program,a.ACTIVE_ATTRIBUTES),this.attributes={};for(var p={},d=0;d<this.numAttributes;d++){var g=a.getActiveAttrib(this.program,d);g&&(this.attributes[g.name]=a.getAttribLocation(this.program,g.name))}for(var v=a.getProgramParameter(this.program,a.ACTIVE_UNIFORMS),m=0;m<v;m++){var y=a.getActiveUniform(this.program,m);y&&(p[y.name]=a.getUniformLocation(this.program,y.name))}this.fixedUniforms=n(t,p),this.binderUniforms=r.getUniforms(t,p)};function fr(e,r,n){var i=1/le(n,1,r.transform.tileZoom),a=Math.pow(2,n.tileID.overscaledZ),o=n.tileSize*Math.pow(2,r.transform.tileZoom)/a,s=o*(n.tileID.canonical.x+n.tileID.wrap*a),l=o*n.tileID.canonical.y;return{u_image:0,u_texsize:n.imageAtlasTexture.size,u_scale:[t.browser.devicePixelRatio,i,e.fromScale,e.toScale],u_fade:e.t,u_pixel_coord_upper:[s>>16,l>>16],u_pixel_coord_lower:[65535&s,65535&l]}}hr.prototype.draw=function(t,e,r,n,i,a,o,s,l,c,u,h,f,p,d,g){var v,m=t.gl;for(var y in t.program.set(this.program),t.setDepthMode(r),t.setStencilMode(n),t.setColorMode(i),t.setCullFace(a),this.fixedUniforms)this.fixedUniforms[y].set(o[y]);p&&p.setUniforms(t,this.binderUniforms,h,{zoom:f});for(var x=(v={},v[m.LINES]=2,v[m.TRIANGLES]=3,v[m.LINE_STRIP]=1,v)[e],b=0,_=u.get();b<_.length;b+=1){var w=_[b],k=w.vaos||(w.vaos={});(k[s]||(k[s]=new ur)).bind(t,this,l,p?p.getPaintVertexBuffers():[],c,w.vertexOffset,d,g),m.drawElements(e,w.primitiveLength*x,m.UNSIGNED_SHORT,w.primitiveOffset*x*2)}};var pr=function(e,r,n,i){var a=r.style.light,o=a.properties.get(\\\"position\\\"),s=[o.x,o.y,o.z],l=t.create$1();\\\"viewport\\\"===a.properties.get(\\\"anchor\\\")&&t.fromRotation(l,-r.transform.angle),t.transformMat3(s,s,l);var c=a.properties.get(\\\"color\\\");return{u_matrix:e,u_lightpos:s,u_lightintensity:a.properties.get(\\\"intensity\\\"),u_lightcolor:[c.r,c.g,c.b],u_vertical_gradient:+n,u_opacity:i}},dr=function(e,r,n,i,a,o,s){return t.extend(pr(e,r,n,i),fr(o,r,s),{u_height_factor:-Math.pow(2,a.overscaledZ)/s.tileSize/8})},gr=function(t){return{u_matrix:t}},vr=function(e,r,n,i){return t.extend(gr(e),fr(n,r,i))},mr=function(t,e){return{u_matrix:t,u_world:e}},yr=function(e,r,n,i,a){return t.extend(vr(e,r,n,i),{u_world:a})},xr=function(e,r,n,i){var a,o,s=e.transform;if(\\\"map\\\"===i.paint.get(\\\"circle-pitch-alignment\\\")){var l=le(n,1,s.zoom);a=!0,o=[l,l]}else a=!1,o=s.pixelsToGLUnits;return{u_camera_to_center_distance:s.cameraToCenterDistance,u_scale_with_map:+(\\\"map\\\"===i.paint.get(\\\"circle-pitch-scale\\\")),u_matrix:e.translatePosMatrix(r.posMatrix,n,i.paint.get(\\\"circle-translate\\\"),i.paint.get(\\\"circle-translate-anchor\\\")),u_pitch_with_map:+a,u_device_pixel_ratio:t.browser.devicePixelRatio,u_extrude_scale:o}},br=function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pixels_to_tile_units:new t.Uniform1f(e,r.u_pixels_to_tile_units),u_extrude_scale:new t.Uniform2f(e,r.u_extrude_scale),u_overscale_factor:new t.Uniform1f(e,r.u_overscale_factor)}},_r=function(t,e,r){var n=le(r,1,e.zoom),i=Math.pow(2,e.zoom-r.tileID.overscaledZ),a=r.tileID.overscaleFactor();return{u_matrix:t,u_camera_to_center_distance:e.cameraToCenterDistance,u_pixels_to_tile_units:n,u_extrude_scale:[e.pixelsToGLUnits[0]/(n*i),e.pixelsToGLUnits[1]/(n*i)],u_overscale_factor:a}},wr=function(t,e){return{u_matrix:t,u_color:e}},kr=function(t){return{u_matrix:t}},Tr=function(t,e,r,n){return{u_matrix:t,u_extrude_scale:le(e,1,r),u_intensity:n}},Ar=function(t,e,r){var n=r.paint.get(\\\"hillshade-shadow-color\\\"),i=r.paint.get(\\\"hillshade-highlight-color\\\"),a=r.paint.get(\\\"hillshade-accent-color\\\"),o=r.paint.get(\\\"hillshade-illumination-direction\\\")*(Math.PI/180);\\\"viewport\\\"===r.paint.get(\\\"hillshade-illumination-anchor\\\")&&(o-=t.transform.angle);var s=!t.options.moving;return{u_matrix:t.transform.calculatePosMatrix(e.tileID.toUnwrapped(),s),u_image:0,u_latrange:Sr(t,e.tileID),u_light:[r.paint.get(\\\"hillshade-exaggeration\\\"),o],u_shadow:n,u_highlight:i,u_accent:a}},Mr=function(e,r){var n=e.dem.stride,i=t.create();return t.ortho(i,0,t.EXTENT,-t.EXTENT,0,0,1),t.translate(i,i,[0,-t.EXTENT,0]),{u_matrix:i,u_image:1,u_dimension:[n,n],u_zoom:e.tileID.overscaledZ,u_maxzoom:r}};function Sr(e,r){var n=Math.pow(2,r.canonical.z),i=r.canonical.y;return[new t.MercatorCoordinate(0,i/n).toLngLat().lat,new t.MercatorCoordinate(0,(i+1)/n).toLngLat().lat]}var Er=function(e,r,n){var i=e.transform;return{u_matrix:zr(e,r,n),u_ratio:1/le(r,1,i.zoom),u_device_pixel_ratio:t.browser.devicePixelRatio,u_units_to_pixels:[1/i.pixelsToGLUnits[0],1/i.pixelsToGLUnits[1]]}},Cr=function(e,r,n){return t.extend(Er(e,r,n),{u_image:0})},Lr=function(e,r,n,i){var a=e.transform,o=Or(r,a);return{u_matrix:zr(e,r,n),u_texsize:r.imageAtlasTexture.size,u_ratio:1/le(r,1,a.zoom),u_device_pixel_ratio:t.browser.devicePixelRatio,u_image:0,u_scale:[t.browser.devicePixelRatio,o,i.fromScale,i.toScale],u_fade:i.t,u_units_to_pixels:[1/a.pixelsToGLUnits[0],1/a.pixelsToGLUnits[1]]}},Pr=function(e,r,n,i,a){var o=e.transform,s=e.lineAtlas,l=Or(r,o),c=\\\"round\\\"===n.layout.get(\\\"line-cap\\\"),u=s.getDash(i.from,c),h=s.getDash(i.to,c),f=u.width*a.fromScale,p=h.width*a.toScale;return t.extend(Er(e,r,n),{u_patternscale_a:[l/f,-u.height/2],u_patternscale_b:[l/p,-h.height/2],u_sdfgamma:s.width/(256*Math.min(f,p)*t.browser.devicePixelRatio)/2,u_image:0,u_tex_y_a:u.y,u_tex_y_b:h.y,u_mix:a.t})};function Or(t,e){return 1/le(t,1,e.tileZoom)}function zr(t,e,r){return t.translatePosMatrix(e.tileID.posMatrix,e,r.paint.get(\\\"line-translate\\\"),r.paint.get(\\\"line-translate-anchor\\\"))}var Ir=function(t,e,r,n,i){return{u_matrix:t,u_tl_parent:e,u_scale_parent:r,u_buffer_scale:1,u_fade_t:n.mix,u_opacity:n.opacity*i.paint.get(\\\"raster-opacity\\\"),u_image0:0,u_image1:1,u_brightness_low:i.paint.get(\\\"raster-brightness-min\\\"),u_brightness_high:i.paint.get(\\\"raster-brightness-max\\\"),u_saturation_factor:(o=i.paint.get(\\\"raster-saturation\\\"),o>0?1-1/(1.001-o):-o),u_contrast_factor:(a=i.paint.get(\\\"raster-contrast\\\"),a>0?1/(1-a):1+a),u_spin_weights:function(t){t*=Math.PI/180;var e=Math.sin(t),r=Math.cos(t);return[(2*r+1)/3,(-Math.sqrt(3)*e-r+1)/3,(Math.sqrt(3)*e-r+1)/3]}(i.paint.get(\\\"raster-hue-rotate\\\"))};var a,o};var Dr=function(t,e,r,n,i,a,o,s,l,c){var u=i.transform;return{u_is_size_zoom_constant:+(\\\"constant\\\"===t||\\\"source\\\"===t),u_is_size_feature_constant:+(\\\"constant\\\"===t||\\\"camera\\\"===t),u_size_t:e?e.uSizeT:0,u_size:e?e.uSize:0,u_camera_to_center_distance:u.cameraToCenterDistance,u_pitch:u.pitch/360*2*Math.PI,u_rotate_symbol:+r,u_aspect_ratio:u.width/u.height,u_fade_change:i.options.fadeDuration?i.symbolFadeChange:1,u_matrix:a,u_label_plane_matrix:o,u_coord_matrix:s,u_is_text:+l,u_pitch_with_map:+n,u_texsize:c,u_texture:0}},Rr=function(e,r,n,i,a,o,s,l,c,u,h){var f=a.transform;return t.extend(Dr(e,r,n,i,a,o,s,l,c,u),{u_gamma_scale:i?Math.cos(f._pitch)*f.cameraToCenterDistance:1,u_device_pixel_ratio:t.browser.devicePixelRatio,u_is_halo:+h})},Fr=function(t,e,r){return{u_matrix:t,u_opacity:e,u_color:r}},Br=function(e,r,n,i,a,o){return t.extend(function(t,e,r,n){var i=r.imageManager.getPattern(t.from),a=r.imageManager.getPattern(t.to),o=r.imageManager.getPixelSize(),s=o.width,l=o.height,c=Math.pow(2,n.tileID.overscaledZ),u=n.tileSize*Math.pow(2,r.transform.tileZoom)/c,h=u*(n.tileID.canonical.x+n.tileID.wrap*c),f=u*n.tileID.canonical.y;return{u_image:0,u_pattern_tl_a:i.tl,u_pattern_br_a:i.br,u_pattern_tl_b:a.tl,u_pattern_br_b:a.br,u_texsize:[s,l],u_mix:e.t,u_pattern_size_a:i.displaySize,u_pattern_size_b:a.displaySize,u_scale_a:e.fromScale,u_scale_b:e.toScale,u_tile_units_to_pixels:1/le(n,1,r.transform.tileZoom),u_pixel_coord_upper:[h>>16,f>>16],u_pixel_coord_lower:[65535&h,65535&f]}}(i,o,n,a),{u_matrix:e,u_opacity:r})},Nr={fillExtrusion:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_lightpos:new t.Uniform3f(e,r.u_lightpos),u_lightintensity:new t.Uniform1f(e,r.u_lightintensity),u_lightcolor:new t.Uniform3f(e,r.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,r.u_vertical_gradient),u_opacity:new t.Uniform1f(e,r.u_opacity)}},fillExtrusionPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_lightpos:new t.Uniform3f(e,r.u_lightpos),u_lightintensity:new t.Uniform1f(e,r.u_lightintensity),u_lightcolor:new t.Uniform3f(e,r.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,r.u_vertical_gradient),u_height_factor:new t.Uniform1f(e,r.u_height_factor),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform4f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade),u_opacity:new t.Uniform1f(e,r.u_opacity)}},fill:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},fillPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform4f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},fillOutline:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world)}},fillOutlinePattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform4f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},circle:function(e,r){return{u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_scale_with_map:new t.Uniform1i(e,r.u_scale_with_map),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_extrude_scale:new t.Uniform2f(e,r.u_extrude_scale),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},collisionBox:br,collisionCircle:br,debug:function(e,r){return{u_color:new t.UniformColor(e,r.u_color),u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},clippingMask:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},heatmap:function(e,r){return{u_extrude_scale:new t.Uniform1f(e,r.u_extrude_scale),u_intensity:new t.Uniform1f(e,r.u_intensity),u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},heatmapTexture:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world),u_image:new t.Uniform1i(e,r.u_image),u_color_ramp:new t.Uniform1i(e,r.u_color_ramp),u_opacity:new t.Uniform1f(e,r.u_opacity)}},hillshade:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_latrange:new t.Uniform2f(e,r.u_latrange),u_light:new t.Uniform2f(e,r.u_light),u_shadow:new t.UniformColor(e,r.u_shadow),u_highlight:new t.UniformColor(e,r.u_highlight),u_accent:new t.UniformColor(e,r.u_accent)}},hillshadePrepare:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_dimension:new t.Uniform2f(e,r.u_dimension),u_zoom:new t.Uniform1f(e,r.u_zoom),u_maxzoom:new t.Uniform1f(e,r.u_maxzoom)}},line:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels)}},lineGradient:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels),u_image:new t.Uniform1i(e,r.u_image)}},linePattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_texsize:new t.Uniform2f(e,r.u_texsize),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_image:new t.Uniform1i(e,r.u_image),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels),u_scale:new t.Uniform4f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},lineSDF:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels),u_patternscale_a:new t.Uniform2f(e,r.u_patternscale_a),u_patternscale_b:new t.Uniform2f(e,r.u_patternscale_b),u_sdfgamma:new t.Uniform1f(e,r.u_sdfgamma),u_image:new t.Uniform1i(e,r.u_image),u_tex_y_a:new t.Uniform1f(e,r.u_tex_y_a),u_tex_y_b:new t.Uniform1f(e,r.u_tex_y_b),u_mix:new t.Uniform1f(e,r.u_mix)}},raster:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_tl_parent:new t.Uniform2f(e,r.u_tl_parent),u_scale_parent:new t.Uniform1f(e,r.u_scale_parent),u_buffer_scale:new t.Uniform1f(e,r.u_buffer_scale),u_fade_t:new t.Uniform1f(e,r.u_fade_t),u_opacity:new t.Uniform1f(e,r.u_opacity),u_image0:new t.Uniform1i(e,r.u_image0),u_image1:new t.Uniform1i(e,r.u_image1),u_brightness_low:new t.Uniform1f(e,r.u_brightness_low),u_brightness_high:new t.Uniform1f(e,r.u_brightness_high),u_saturation_factor:new t.Uniform1f(e,r.u_saturation_factor),u_contrast_factor:new t.Uniform1f(e,r.u_contrast_factor),u_spin_weights:new t.Uniform3f(e,r.u_spin_weights)}},symbolIcon:function(e,r){return{u_is_size_zoom_constant:new t.Uniform1i(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,r.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,r.u_size_t),u_size:new t.Uniform1f(e,r.u_size),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,r.u_pitch),u_rotate_symbol:new t.Uniform1i(e,r.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,r.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,r.u_fade_change),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,r.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,r.u_coord_matrix),u_is_text:new t.Uniform1f(e,r.u_is_text),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_texsize:new t.Uniform2f(e,r.u_texsize),u_texture:new t.Uniform1i(e,r.u_texture)}},symbolSDF:function(e,r){return{u_is_size_zoom_constant:new t.Uniform1i(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,r.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,r.u_size_t),u_size:new t.Uniform1f(e,r.u_size),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,r.u_pitch),u_rotate_symbol:new t.Uniform1i(e,r.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,r.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,r.u_fade_change),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,r.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,r.u_coord_matrix),u_is_text:new t.Uniform1f(e,r.u_is_text),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_texsize:new t.Uniform2f(e,r.u_texsize),u_texture:new t.Uniform1i(e,r.u_texture),u_gamma_scale:new t.Uniform1f(e,r.u_gamma_scale),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_is_halo:new t.Uniform1f(e,r.u_is_halo)}},background:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_opacity:new t.Uniform1f(e,r.u_opacity),u_color:new t.UniformColor(e,r.u_color)}},backgroundPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_opacity:new t.Uniform1f(e,r.u_opacity),u_image:new t.Uniform1i(e,r.u_image),u_pattern_tl_a:new t.Uniform2f(e,r.u_pattern_tl_a),u_pattern_br_a:new t.Uniform2f(e,r.u_pattern_br_a),u_pattern_tl_b:new t.Uniform2f(e,r.u_pattern_tl_b),u_pattern_br_b:new t.Uniform2f(e,r.u_pattern_br_b),u_texsize:new t.Uniform2f(e,r.u_texsize),u_mix:new t.Uniform1f(e,r.u_mix),u_pattern_size_a:new t.Uniform2f(e,r.u_pattern_size_a),u_pattern_size_b:new t.Uniform2f(e,r.u_pattern_size_b),u_scale_a:new t.Uniform1f(e,r.u_scale_a),u_scale_b:new t.Uniform1f(e,r.u_scale_b),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_tile_units_to_pixels:new t.Uniform1f(e,r.u_tile_units_to_pixels)}}};function jr(e,r){for(var n=e.sort(function(t,e){return t.tileID.isLessThan(e.tileID)?-1:e.tileID.isLessThan(t.tileID)?1:0}),i=0;i<n.length;i++){var a={},o=n[i],s=n.slice(i+1);Ur(o.tileID.wrapped(),o.tileID,s,new t.OverscaledTileID(0,o.tileID.wrap+1,0,0,0),a),o.setMask(a,r)}}function Ur(e,r,n,i,a){for(var o=0;o<n.length;o++){var s=n[o];if(i.isLessThan(s.tileID))break;if(r.key===s.tileID.key)return;if(s.tileID.isChildOf(r)){for(var l=r.children(1/0),c=0;c<l.length;c++)Ur(e,l[c],n.slice(o),i,a);return}}var u=r.overscaledZ-e.overscaledZ,h=new t.CanonicalTileID(u,r.canonical.x-(e.canonical.x<<u),r.canonical.y-(e.canonical.y<<u));a[h.key]=a[h.key]||h}function Vr(t,e,r,n,i){for(var a=t.context,o=a.gl,s=i?t.useProgram(\\\"collisionCircle\\\"):t.useProgram(\\\"collisionBox\\\"),l=0;l<n.length;l++){var c=n[l],u=e.getTile(c),h=u.getBucket(r);if(h){var f=i?h.collisionCircle:h.collisionBox;f&&s.draw(a,i?o.TRIANGLES:o.LINES,Tt.disabled,At.disabled,t.colorModeForRenderPass(),St.disabled,_r(c.posMatrix,t.transform,u),r.id,f.layoutVertexBuffer,f.indexBuffer,f.segments,null,t.transform.zoom,null,null,f.collisionVertexBuffer)}}}var qr=t.identity(new Float32Array(16));function Hr(e,r,n,i,a,o){var s=t.getAnchorAlignment(e),l=-(s.horizontalAlign-.5)*r,c=-(s.verticalAlign-.5)*n,u=t.evaluateRadialOffset(e,i);return new t.Point((l/a+u[0])*o,(c/a+u[1])*o)}function Gr(e,r,n,i,a,o,s,l,c,u){var h=e.text.placedSymbolArray,f=e.text.dynamicLayoutVertexArray;f.clear();for(var p=0;p<h.length;p++){var d=h.get(p),g=!d.hidden&&d.crossTileID?i[d.crossTileID]:null;if(g){var v=new t.Point(d.anchorX,d.anchorY),m=Zt(v,n?l:s),y=.5+o.cameraToCenterDistance/m.signedDistanceFromCamera*.5,x=a.evaluateSizeForFeature(e.textSizeData,u,d)*y/t.ONE_EM;n&&(x*=e.tilePixelRatio/c);for(var b=g.width,_=g.height,w=g.radialOffset,k=g.textBoxScale,T=Hr(g.anchor,b,_,w,k,x),A=n?Zt(v.add(T),s).point:m.point.add(r?T.rotate(-o.angle):T),M=0;M<d.numGlyphs;M++)t.addDynamicAttributes(f,A,0)}else ie(d.numGlyphs,f)}e.text.dynamicLayoutVertexBuffer.updateData(f)}function Yr(e,r,n,i,a,o,s,l,c,u,h,f,p){for(var d,g,v=e.context,m=v.gl,y=e.transform,x=\\\"map\\\"===l,b=\\\"map\\\"===c,_=x&&\\\"point\\\"!==n.layout.get(\\\"symbol-placement\\\"),w=x&&!b&&!_,k=void 0!==n.layout.get(\\\"symbol-sort-key\\\").constantOr(1),T=e.depthModeForSublayer(0,Tt.ReadOnly),A=n.layout.get(\\\"text-variable-anchor\\\"),M=[],S=0,E=i;S<E.length;S+=1){var C=E[S],L=r.getTile(C),P=L.getBucket(n);if(P){var O=a?P.text:P.icon;if(O&&O.segments.get().length){var z=O.programConfigurations.get(n.id),I=a||P.sdfIcons,D=a?P.textSizeData:P.iconSizeData;d||(d=e.useProgram(I?\\\"symbolSDF\\\":\\\"symbolIcon\\\",z),g=t.evaluateSizeForZoom(D,y.zoom)),v.activeTexture.set(m.TEXTURE0);var R=void 0,F=void 0,B=void 0;if(a)F=L.glyphAtlasTexture,B=m.LINEAR,R=L.glyphAtlasTexture.size;else{var N=1!==n.layout.get(\\\"icon-size\\\").constantOr(0)||P.iconsNeedLinear,j=b||0!==y.pitch;F=L.imageAtlasTexture,B=I||e.options.rotating||e.options.zooming||N||j?m.LINEAR:m.NEAREST,R=L.imageAtlasTexture.size}var U=le(L,1,e.transform.zoom),V=Wt(C.posMatrix,b,x,e.transform,U),q=Xt(C.posMatrix,b,x,e.transform,U);if(_)Kt(P,C.posMatrix,e,a,V,q,b,u);else if(a&&g&&A){var H=Math.pow(2,y.zoom-L.tileID.overscaledZ);Gr(P,x,b,p,t.symbolSize,y,V,C.posMatrix,H,g)}var G=e.translatePosMatrix(C.posMatrix,L,o,s),Y=_||a&&A?qr:V,W=e.translatePosMatrix(q,L,o,s,!0),X=I&&0!==n.paint.get(a?\\\"text-halo-width\\\":\\\"icon-halo-width\\\").constantOr(1),Z={program:d,buffers:O,uniformValues:I?Rr(D.kind,g,w,b,e,G,Y,W,a,R,!0):Dr(D.kind,g,w,b,e,G,Y,W,a,R),atlasTexture:F,atlasInterpolation:B,isSDF:I,hasHalo:X};if(k)for(var J=0,K=O.segments.get();J<K.length;J+=1){var $=K[J];M.push({segments:new t.SegmentVector([$]),sortKey:$.sortKey,state:Z})}else M.push({segments:O.segments,sortKey:0,state:Z})}}}k&&M.sort(function(t,e){return t.sortKey-e.sortKey});for(var Q=0,tt=M;Q<tt.length;Q+=1){var et=tt[Q],rt=et.state;if(rt.atlasTexture.bind(rt.atlasInterpolation,m.CLAMP_TO_EDGE),rt.isSDF){var nt=rt.uniformValues;rt.hasHalo&&(nt.u_is_halo=1,Wr(rt.buffers,et.segments,n,e,rt.program,T,h,f,nt)),nt.u_is_halo=0}Wr(rt.buffers,et.segments,n,e,rt.program,T,h,f,rt.uniformValues)}}function Wr(t,e,r,n,i,a,o,s,l){var c=n.context,u=c.gl;i.draw(c,u.TRIANGLES,a,o,s,St.disabled,l,r.id,t.layoutVertexBuffer,t.indexBuffer,e,r.paint,n.transform.zoom,t.programConfigurations.get(r.id),t.dynamicLayoutVertexBuffer,t.opacityVertexBuffer)}function Xr(t,e,r,n,i,a,o){var s,l,c,u,h,f=t.context.gl,p=r.paint.get(\\\"fill-pattern\\\"),d=p&&p.constantOr(1),g=r.getCrossfadeParameters();o?(l=d&&!r.getPaintProperty(\\\"fill-outline-color\\\")?\\\"fillOutlinePattern\\\":\\\"fillOutline\\\",s=f.LINES):(l=d?\\\"fillPattern\\\":\\\"fill\\\",s=f.TRIANGLES);for(var v=0,m=n;v<m.length;v+=1){var y=m[v],x=e.getTile(y);if(!d||x.patternsLoaded()){var b=x.getBucket(r);if(b){var _=b.programConfigurations.get(r.id),w=t.useProgram(l,_);d&&(t.context.activeTexture.set(f.TEXTURE0),x.imageAtlasTexture.bind(f.LINEAR,f.CLAMP_TO_EDGE),_.updatePatternPaintBuffers(g));var k=p.constantOr(null);if(k&&x.imageAtlas){var T=x.imageAtlas.patternPositions[k.to],A=x.imageAtlas.patternPositions[k.from];T&&A&&_.setConstantPatternPositions(T,A)}var M=t.translatePosMatrix(y.posMatrix,x,r.paint.get(\\\"fill-translate\\\"),r.paint.get(\\\"fill-translate-anchor\\\"));if(o){u=b.indexBuffer2,h=b.segments2;var S=[f.drawingBufferWidth,f.drawingBufferHeight];c=\\\"fillOutlinePattern\\\"===l&&d?yr(M,t,g,x,S):mr(M,S)}else u=b.indexBuffer,h=b.segments,c=d?vr(M,t,g,x):gr(M);w.draw(t.context,s,i,t.stencilModeForClipping(y),a,St.disabled,c,r.id,b.layoutVertexBuffer,u,h,r.paint,t.transform.zoom,_)}}}}function Zr(t,e,r,n,i,a,o){for(var s=t.context,l=s.gl,c=r.paint.get(\\\"fill-extrusion-pattern\\\"),u=c.constantOr(1),h=r.getCrossfadeParameters(),f=r.paint.get(\\\"fill-extrusion-opacity\\\"),p=0,d=n;p<d.length;p+=1){var g=d[p],v=e.getTile(g),m=v.getBucket(r);if(m){var y=m.programConfigurations.get(r.id),x=t.useProgram(u?\\\"fillExtrusionPattern\\\":\\\"fillExtrusion\\\",y);u&&(t.context.activeTexture.set(l.TEXTURE0),v.imageAtlasTexture.bind(l.LINEAR,l.CLAMP_TO_EDGE),y.updatePatternPaintBuffers(h));var b=c.constantOr(null);if(b&&v.imageAtlas){var _=v.imageAtlas.patternPositions[b.to],w=v.imageAtlas.patternPositions[b.from];_&&w&&y.setConstantPatternPositions(_,w)}var k=t.translatePosMatrix(g.posMatrix,v,r.paint.get(\\\"fill-extrusion-translate\\\"),r.paint.get(\\\"fill-extrusion-translate-anchor\\\")),T=r.paint.get(\\\"fill-extrusion-vertical-gradient\\\"),A=u?dr(k,t,T,f,g,h,v):pr(k,t,T,f);x.draw(s,s.gl.TRIANGLES,i,a,o,St.backCCW,A,r.id,m.layoutVertexBuffer,m.indexBuffer,m.segments,r.paint,t.transform.zoom,y)}}}function Jr(t,e,r,n,i,a){var o=t.context,s=o.gl,l=e.fbo;if(l){var c=t.useProgram(\\\"hillshade\\\");o.activeTexture.set(s.TEXTURE0),s.bindTexture(s.TEXTURE_2D,l.colorAttachment.get());var u=Ar(t,e,r);e.maskedBoundsBuffer&&e.maskedIndexBuffer&&e.segments?c.draw(o,s.TRIANGLES,n,i,a,St.disabled,u,r.id,e.maskedBoundsBuffer,e.maskedIndexBuffer,e.segments):c.draw(o,s.TRIANGLES,n,i,a,St.disabled,u,r.id,t.rasterBoundsBuffer,t.quadTriangleIndexBuffer,t.rasterBoundsSegments)}}function Kr(e,r,n,i,a,o,s){var l=e.context,c=l.gl;if(r.dem&&r.dem.data){var u=r.dem.dim,h=r.dem.stride,f=r.dem.getPixels();if(l.activeTexture.set(c.TEXTURE1),l.pixelStoreUnpackPremultiplyAlpha.set(!1),r.demTexture=r.demTexture||e.getTileTexture(h),r.demTexture){var p=r.demTexture;p.update(f,{premultiply:!1}),p.bind(c.NEAREST,c.CLAMP_TO_EDGE)}else r.demTexture=new t.Texture(l,f,c.RGBA,{premultiply:!1}),r.demTexture.bind(c.NEAREST,c.CLAMP_TO_EDGE);l.activeTexture.set(c.TEXTURE0);var d=r.fbo;if(!d){var g=new t.Texture(l,{width:u,height:u,data:null},c.RGBA);g.bind(c.LINEAR,c.CLAMP_TO_EDGE),(d=r.fbo=l.createFramebuffer(u,u)).colorAttachment.set(g.texture)}l.bindFramebuffer.set(d.framebuffer),l.viewport.set([0,0,u,u]),e.useProgram(\\\"hillshadePrepare\\\").draw(l,c.TRIANGLES,a,o,s,St.disabled,Mr(r,i),n.id,e.rasterBoundsBuffer,e.quadTriangleIndexBuffer,e.rasterBoundsSegments),r.needsHillshadePrepare=!1}}function $r(e,r,n,i,a){var o=i.paint.get(\\\"raster-fade-duration\\\");if(o>0){var s=t.browser.now(),l=(s-e.timeAdded)/o,c=r?(s-r.timeAdded)/o:-1,u=n.getSource(),h=a.coveringZoomLevel({tileSize:u.tileSize,roundZoom:u.roundZoom}),f=!r||Math.abs(r.tileID.overscaledZ-h)>Math.abs(e.tileID.overscaledZ-h),p=f&&e.refreshedUponExpiration?1:t.clamp(f?l:1-c,0,1);return e.refreshedUponExpiration&&l>=1&&(e.refreshedUponExpiration=!1),r?{opacity:1,mix:1-p}:{opacity:p,mix:0}}return{opacity:1,mix:0}}function Qr(e,r,n){var i=e.context,a=i.gl,o=n.posMatrix,s=e.useProgram(\\\"debug\\\"),l=Tt.disabled,c=At.disabled,u=e.colorModeForRenderPass(),h=\\\"$debug\\\";s.draw(i,a.LINE_STRIP,l,c,u,St.disabled,wr(o,t.Color.red),h,e.debugBuffer,e.tileBorderIndexBuffer,e.debugSegments);for(var f=r.getTileByID(n.key).latestRawTileData,p=f&&f.byteLength||0,d=Math.floor(p/1024),g=function(t,e,r,n){n=n||1;var i,a,o,s,l,c,u,h,f=[];for(i=0,a=t.length;i<a;i++)if(l=tn[t[i]]){for(h=null,o=0,s=l[1].length;o<s;o+=2)-1===l[1][o]&&-1===l[1][o+1]?h=null:(c=e+l[1][o]*n,u=200-l[1][o+1]*n,h&&f.push(h.x,h.y,c,u),h={x:c,y:u});e+=l[0]*n}return f}(n.toString()+\\\" \\\"+d+\\\"kb\\\",50,0,5),v=new t.StructArrayLayout2i4,m=new t.StructArrayLayout2ui4,y=0;y<g.length;y+=2)v.emplaceBack(g[y],g[y+1]),m.emplaceBack(y,y+1);for(var x=i.createVertexBuffer(v,Re.members),b=i.createIndexBuffer(m),_=t.SegmentVector.simpleSegment(0,0,v.length/2,v.length/2),w=r.getTile(n).tileSize,k=t.EXTENT/(Math.pow(2,e.transform.zoom-n.overscaledZ)*w),T=[[-1,-1],[-1,1],[1,-1],[1,1]],A=0;A<T.length;A++){var M=T[A];s.draw(i,a.LINES,l,c,u,St.disabled,wr(t.translate([],o,[k*M[0],k*M[1],0]),t.Color.white),h,x,b,_)}s.draw(i,a.LINES,l,c,u,St.disabled,wr(o,t.Color.black),h,x,b,_)}var tn={\\\" \\\":[16,[]],\\\"!\\\":[10,[5,21,5,7,-1,-1,5,2,4,1,5,0,6,1,5,2]],'\\\"':[16,[4,21,4,14,-1,-1,12,21,12,14]],\\\"#\\\":[21,[11,25,4,-7,-1,-1,17,25,10,-7,-1,-1,4,12,18,12,-1,-1,3,6,17,6]],$:[20,[8,25,8,-4,-1,-1,12,25,12,-4,-1,-1,17,18,15,20,12,21,8,21,5,20,3,18,3,16,4,14,5,13,7,12,13,10,15,9,16,8,17,6,17,3,15,1,12,0,8,0,5,1,3,3]],\\\"%\\\":[24,[21,21,3,0,-1,-1,8,21,10,19,10,17,9,15,7,14,5,14,3,16,3,18,4,20,6,21,8,21,10,20,13,19,16,19,19,20,21,21,-1,-1,17,7,15,6,14,4,14,2,16,0,18,0,20,1,21,3,21,5,19,7,17,7]],\\\"&\\\":[26,[23,12,23,13,22,14,21,14,20,13,19,11,17,6,15,3,13,1,11,0,7,0,5,1,4,2,3,4,3,6,4,8,5,9,12,13,13,14,14,16,14,18,13,20,11,21,9,20,8,18,8,16,9,13,11,10,16,3,18,1,20,0,22,0,23,1,23,2]],\\\"'\\\":[10,[5,19,4,20,5,21,6,20,6,18,5,16,4,15]],\\\"(\\\":[14,[11,25,9,23,7,20,5,16,4,11,4,7,5,2,7,-2,9,-5,11,-7]],\\\")\\\":[14,[3,25,5,23,7,20,9,16,10,11,10,7,9,2,7,-2,5,-5,3,-7]],\\\"*\\\":[16,[8,21,8,9,-1,-1,3,18,13,12,-1,-1,13,18,3,12]],\\\"+\\\":[26,[13,18,13,0,-1,-1,4,9,22,9]],\\\",\\\":[10,[6,1,5,0,4,1,5,2,6,1,6,-1,5,-3,4,-4]],\\\"-\\\":[26,[4,9,22,9]],\\\".\\\":[10,[5,2,4,1,5,0,6,1,5,2]],\\\"/\\\":[22,[20,25,2,-7]],0:[20,[9,21,6,20,4,17,3,12,3,9,4,4,6,1,9,0,11,0,14,1,16,4,17,9,17,12,16,17,14,20,11,21,9,21]],1:[20,[6,17,8,18,11,21,11,0]],2:[20,[4,16,4,17,5,19,6,20,8,21,12,21,14,20,15,19,16,17,16,15,15,13,13,10,3,0,17,0]],3:[20,[5,21,16,21,10,13,13,13,15,12,16,11,17,8,17,6,16,3,14,1,11,0,8,0,5,1,4,2,3,4]],4:[20,[13,21,3,7,18,7,-1,-1,13,21,13,0]],5:[20,[15,21,5,21,4,12,5,13,8,14,11,14,14,13,16,11,17,8,17,6,16,3,14,1,11,0,8,0,5,1,4,2,3,4]],6:[20,[16,18,15,20,12,21,10,21,7,20,5,17,4,12,4,7,5,3,7,1,10,0,11,0,14,1,16,3,17,6,17,7,16,10,14,12,11,13,10,13,7,12,5,10,4,7]],7:[20,[17,21,7,0,-1,-1,3,21,17,21]],8:[20,[8,21,5,20,4,18,4,16,5,14,7,13,11,12,14,11,16,9,17,7,17,4,16,2,15,1,12,0,8,0,5,1,4,2,3,4,3,7,4,9,6,11,9,12,13,13,15,14,16,16,16,18,15,20,12,21,8,21]],9:[20,[16,14,15,11,13,9,10,8,9,8,6,9,4,11,3,14,3,15,4,18,6,20,9,21,10,21,13,20,15,18,16,14,16,9,15,4,13,1,10,0,8,0,5,1,4,3]],\\\":\\\":[10,[5,14,4,13,5,12,6,13,5,14,-1,-1,5,2,4,1,5,0,6,1,5,2]],\\\";\\\":[10,[5,14,4,13,5,12,6,13,5,14,-1,-1,6,1,5,0,4,1,5,2,6,1,6,-1,5,-3,4,-4]],\\\"<\\\":[24,[20,18,4,9,20,0]],\\\"=\\\":[26,[4,12,22,12,-1,-1,4,6,22,6]],\\\">\\\":[24,[4,18,20,9,4,0]],\\\"?\\\":[18,[3,16,3,17,4,19,5,20,7,21,11,21,13,20,14,19,15,17,15,15,14,13,13,12,9,10,9,7,-1,-1,9,2,8,1,9,0,10,1,9,2]],\\\"@\\\":[27,[18,13,17,15,15,16,12,16,10,15,9,14,8,11,8,8,9,6,11,5,14,5,16,6,17,8,-1,-1,12,16,10,14,9,11,9,8,10,6,11,5,-1,-1,18,16,17,8,17,6,19,5,21,5,23,7,24,10,24,12,23,15,22,17,20,19,18,20,15,21,12,21,9,20,7,19,5,17,4,15,3,12,3,9,4,6,5,4,7,2,9,1,12,0,15,0,18,1,20,2,21,3,-1,-1,19,16,18,8,18,6,19,5]],A:[18,[9,21,1,0,-1,-1,9,21,17,0,-1,-1,4,7,14,7]],B:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,-1,-1,4,11,13,11,16,10,17,9,18,7,18,4,17,2,16,1,13,0,4,0]],C:[21,[18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5]],D:[21,[4,21,4,0,-1,-1,4,21,11,21,14,20,16,18,17,16,18,13,18,8,17,5,16,3,14,1,11,0,4,0]],E:[19,[4,21,4,0,-1,-1,4,21,17,21,-1,-1,4,11,12,11,-1,-1,4,0,17,0]],F:[18,[4,21,4,0,-1,-1,4,21,17,21,-1,-1,4,11,12,11]],G:[21,[18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,18,8,-1,-1,13,8,18,8]],H:[22,[4,21,4,0,-1,-1,18,21,18,0,-1,-1,4,11,18,11]],I:[8,[4,21,4,0]],J:[16,[12,21,12,5,11,2,10,1,8,0,6,0,4,1,3,2,2,5,2,7]],K:[21,[4,21,4,0,-1,-1,18,21,4,7,-1,-1,9,12,18,0]],L:[17,[4,21,4,0,-1,-1,4,0,16,0]],M:[24,[4,21,4,0,-1,-1,4,21,12,0,-1,-1,20,21,12,0,-1,-1,20,21,20,0]],N:[22,[4,21,4,0,-1,-1,4,21,18,0,-1,-1,18,21,18,0]],O:[22,[9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21]],P:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,14,17,12,16,11,13,10,4,10]],Q:[22,[9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21,-1,-1,12,4,18,-2]],R:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,4,11,-1,-1,11,11,18,0]],S:[20,[17,18,15,20,12,21,8,21,5,20,3,18,3,16,4,14,5,13,7,12,13,10,15,9,16,8,17,6,17,3,15,1,12,0,8,0,5,1,3,3]],T:[16,[8,21,8,0,-1,-1,1,21,15,21]],U:[22,[4,21,4,6,5,3,7,1,10,0,12,0,15,1,17,3,18,6,18,21]],V:[18,[1,21,9,0,-1,-1,17,21,9,0]],W:[24,[2,21,7,0,-1,-1,12,21,7,0,-1,-1,12,21,17,0,-1,-1,22,21,17,0]],X:[20,[3,21,17,0,-1,-1,17,21,3,0]],Y:[18,[1,21,9,11,9,0,-1,-1,17,21,9,11]],Z:[20,[17,21,3,0,-1,-1,3,21,17,21,-1,-1,3,0,17,0]],\\\"[\\\":[14,[4,25,4,-7,-1,-1,5,25,5,-7,-1,-1,4,25,11,25,-1,-1,4,-7,11,-7]],\\\"\\\\\\\\\\\":[14,[0,21,14,-3]],\\\"]\\\":[14,[9,25,9,-7,-1,-1,10,25,10,-7,-1,-1,3,25,10,25,-1,-1,3,-7,10,-7]],\\\"^\\\":[16,[6,15,8,18,10,15,-1,-1,3,12,8,17,13,12,-1,-1,8,17,8,0]],_:[16,[0,-2,16,-2]],\\\"`\\\":[10,[6,21,5,20,4,18,4,16,5,15,6,16,5,17]],a:[19,[15,14,15,0,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],b:[19,[4,21,4,0,-1,-1,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3]],c:[18,[15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],d:[19,[15,21,15,0,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],e:[18,[3,8,15,8,15,10,14,12,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],f:[12,[10,21,8,21,6,20,5,17,5,0,-1,-1,2,14,9,14]],g:[19,[15,14,15,-2,14,-5,13,-6,11,-7,8,-7,6,-6,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],h:[19,[4,21,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0]],i:[8,[3,21,4,20,5,21,4,22,3,21,-1,-1,4,14,4,0]],j:[10,[5,21,6,20,7,21,6,22,5,21,-1,-1,6,14,6,-3,5,-6,3,-7,1,-7]],k:[17,[4,21,4,0,-1,-1,14,14,4,4,-1,-1,8,8,15,0]],l:[8,[4,21,4,0]],m:[30,[4,14,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0,-1,-1,15,10,18,13,20,14,23,14,25,13,26,10,26,0]],n:[19,[4,14,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0]],o:[19,[8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3,16,6,16,8,15,11,13,13,11,14,8,14]],p:[19,[4,14,4,-7,-1,-1,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3]],q:[19,[15,14,15,-7,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],r:[13,[4,14,4,0,-1,-1,4,8,5,11,7,13,9,14,12,14]],s:[17,[14,11,13,13,10,14,7,14,4,13,3,11,4,9,6,8,11,7,13,6,14,4,14,3,13,1,10,0,7,0,4,1,3,3]],t:[12,[5,21,5,4,6,1,8,0,10,0,-1,-1,2,14,9,14]],u:[19,[4,14,4,4,5,1,7,0,10,0,12,1,15,4,-1,-1,15,14,15,0]],v:[16,[2,14,8,0,-1,-1,14,14,8,0]],w:[22,[3,14,7,0,-1,-1,11,14,7,0,-1,-1,11,14,15,0,-1,-1,19,14,15,0]],x:[17,[3,14,14,0,-1,-1,14,14,3,0]],y:[16,[2,14,8,0,-1,-1,14,14,8,0,6,-4,4,-6,2,-7,1,-7]],z:[17,[14,14,3,0,-1,-1,3,14,14,14,-1,-1,3,0,14,0]],\\\"{\\\":[14,[9,25,7,24,6,23,5,21,5,19,6,17,7,16,8,14,8,12,6,10,-1,-1,7,24,6,22,6,20,7,18,8,17,9,15,9,13,8,11,4,9,8,7,9,5,9,3,8,1,7,0,6,-2,6,-4,7,-6,-1,-1,6,8,8,6,8,4,7,2,6,1,5,-1,5,-3,6,-5,7,-6,9,-7]],\\\"|\\\":[8,[4,25,4,-7]],\\\"}\\\":[14,[5,25,7,24,8,23,9,21,9,19,8,17,7,16,6,14,6,12,8,10,-1,-1,7,24,8,22,8,20,7,18,6,17,5,15,5,13,6,11,10,9,6,7,5,5,5,3,6,1,7,0,8,-2,8,-4,7,-6,-1,-1,8,8,6,6,6,4,7,2,8,1,9,-1,9,-3,8,-5,7,-6,5,-7]],\\\"~\\\":[24,[3,6,3,8,4,11,6,12,8,12,10,11,14,8,16,7,18,7,20,8,21,10,-1,-1,3,8,4,10,6,11,8,11,10,10,14,7,16,6,18,6,20,7,21,10,21,12]]},en={symbol:function(t,e,r,n,i){if(\\\"translucent\\\"===t.renderPass){var a=At.disabled,o=t.colorModeForRenderPass();0!==r.paint.get(\\\"icon-opacity\\\").constantOr(1)&&Yr(t,e,r,n,!1,r.paint.get(\\\"icon-translate\\\"),r.paint.get(\\\"icon-translate-anchor\\\"),r.layout.get(\\\"icon-rotation-alignment\\\"),r.layout.get(\\\"icon-pitch-alignment\\\"),r.layout.get(\\\"icon-keep-upright\\\"),a,o,i),0!==r.paint.get(\\\"text-opacity\\\").constantOr(1)&&Yr(t,e,r,n,!0,r.paint.get(\\\"text-translate\\\"),r.paint.get(\\\"text-translate-anchor\\\"),r.layout.get(\\\"text-rotation-alignment\\\"),r.layout.get(\\\"text-pitch-alignment\\\"),r.layout.get(\\\"text-keep-upright\\\"),a,o,i),e.map.showCollisionBoxes&&function(t,e,r,n){Vr(t,e,r,n,!1),Vr(t,e,r,n,!0)}(t,e,r,n)}},circle:function(t,e,r,n){if(\\\"translucent\\\"===t.renderPass){var i=r.paint.get(\\\"circle-opacity\\\"),a=r.paint.get(\\\"circle-stroke-width\\\"),o=r.paint.get(\\\"circle-stroke-opacity\\\");if(0!==i.constantOr(1)||0!==a.constantOr(1)&&0!==o.constantOr(1))for(var s=t.context,l=s.gl,c=t.depthModeForSublayer(0,Tt.ReadOnly),u=At.disabled,h=t.colorModeForRenderPass(),f=0;f<n.length;f++){var p=n[f],d=e.getTile(p),g=d.getBucket(r);if(g){var v=g.programConfigurations.get(r.id);t.useProgram(\\\"circle\\\",v).draw(s,l.TRIANGLES,c,u,h,St.disabled,xr(t,p,d,r),r.id,g.layoutVertexBuffer,g.indexBuffer,g.segments,r.paint,t.transform.zoom,v)}}}},heatmap:function(e,r,n,i){if(0!==n.paint.get(\\\"heatmap-opacity\\\"))if(\\\"offscreen\\\"===e.renderPass){var a=e.context,o=a.gl,s=e.depthModeForSublayer(0,Tt.ReadOnly),l=At.disabled,c=new Mt([o.ONE,o.ONE],t.Color.transparent,[!0,!0,!0,!0]);!function(t,e,r){var n=t.gl;t.activeTexture.set(n.TEXTURE1),t.viewport.set([0,0,e.width/4,e.height/4]);var i=r.heatmapFbo;if(i)n.bindTexture(n.TEXTURE_2D,i.colorAttachment.get()),t.bindFramebuffer.set(i.framebuffer);else{var a=n.createTexture();n.bindTexture(n.TEXTURE_2D,a),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.LINEAR),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.LINEAR),i=r.heatmapFbo=t.createFramebuffer(e.width/4,e.height/4),function t(e,r,n,i){var a=e.gl;a.texImage2D(a.TEXTURE_2D,0,a.RGBA,r.width/4,r.height/4,0,a.RGBA,e.extTextureHalfFloat?e.extTextureHalfFloat.HALF_FLOAT_OES:a.UNSIGNED_BYTE,null),i.colorAttachment.set(n),e.extTextureHalfFloat&&a.checkFramebufferStatus(a.FRAMEBUFFER)!==a.FRAMEBUFFER_COMPLETE&&(e.extTextureHalfFloat=null,i.colorAttachment.setDirty(),t(e,r,n,i))}(t,e,a,i)}}(a,e,n),a.clear({color:t.Color.transparent});for(var u=0;u<i.length;u++){var h=i[u];if(!r.hasRenderableParent(h)){var f=r.getTile(h),p=f.getBucket(n);if(p){var d=p.programConfigurations.get(n.id),g=e.useProgram(\\\"heatmap\\\",d),v=e.transform.zoom;g.draw(a,o.TRIANGLES,s,l,c,St.disabled,Tr(h.posMatrix,f,v,n.paint.get(\\\"heatmap-intensity\\\")),n.id,p.layoutVertexBuffer,p.indexBuffer,p.segments,n.paint,e.transform.zoom,d)}}}a.viewport.set([0,0,e.width,e.height])}else\\\"translucent\\\"===e.renderPass&&(e.context.setColorMode(e.colorModeForRenderPass()),function(e,r){var n=e.context,i=n.gl,a=r.heatmapFbo;if(a){n.activeTexture.set(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,a.colorAttachment.get()),n.activeTexture.set(i.TEXTURE1);var o=r.colorRampTexture;o||(o=r.colorRampTexture=new t.Texture(n,r.colorRamp,i.RGBA)),o.bind(i.LINEAR,i.CLAMP_TO_EDGE),e.useProgram(\\\"heatmapTexture\\\").draw(n,i.TRIANGLES,Tt.disabled,At.disabled,e.colorModeForRenderPass(),St.disabled,function(e,r,n,i){var a=t.create();t.ortho(a,0,e.width,e.height,0,0,1);var o=e.context.gl;return{u_matrix:a,u_world:[o.drawingBufferWidth,o.drawingBufferHeight],u_image:n,u_color_ramp:i,u_opacity:r.paint.get(\\\"heatmap-opacity\\\")}}(e,r,0,1),r.id,e.viewportBuffer,e.quadTriangleIndexBuffer,e.viewportSegments,r.paint,e.transform.zoom)}}(e,n))},line:function(e,r,n,i){if(\\\"translucent\\\"===e.renderPass){var a=n.paint.get(\\\"line-opacity\\\"),o=n.paint.get(\\\"line-width\\\");if(0!==a.constantOr(1)&&0!==o.constantOr(1)){var s=e.depthModeForSublayer(0,Tt.ReadOnly),l=e.colorModeForRenderPass(),c=n.paint.get(\\\"line-dasharray\\\"),u=n.paint.get(\\\"line-pattern\\\"),h=u.constantOr(1),f=n.paint.get(\\\"line-gradient\\\"),p=n.getCrossfadeParameters(),d=c?\\\"lineSDF\\\":h?\\\"linePattern\\\":f?\\\"lineGradient\\\":\\\"line\\\",g=e.context,v=g.gl,m=!0;if(f){g.activeTexture.set(v.TEXTURE0);var y=n.gradientTexture;if(!n.gradient)return;y||(y=n.gradientTexture=new t.Texture(g,n.gradient,v.RGBA)),y.bind(v.LINEAR,v.CLAMP_TO_EDGE)}for(var x=0,b=i;x<b.length;x+=1){var _=b[x],w=r.getTile(_);if(!h||w.patternsLoaded()){var k=w.getBucket(n);if(k){var T=k.programConfigurations.get(n.id),A=e.context.program.get(),M=e.useProgram(d,T),S=m||M.program!==A,E=u.constantOr(null);if(E&&w.imageAtlas){var C=w.imageAtlas.patternPositions[E.to],L=w.imageAtlas.patternPositions[E.from];C&&L&&T.setConstantPatternPositions(C,L)}var P=c?Pr(e,w,n,c,p):h?Lr(e,w,n,p):f?Cr(e,w,n):Er(e,w,n);c&&(S||e.lineAtlas.dirty)?(g.activeTexture.set(v.TEXTURE0),e.lineAtlas.bind(g)):h&&(g.activeTexture.set(v.TEXTURE0),w.imageAtlasTexture.bind(v.LINEAR,v.CLAMP_TO_EDGE),T.updatePatternPaintBuffers(p)),M.draw(g,v.TRIANGLES,s,e.stencilModeForClipping(_),l,St.disabled,P,n.id,k.layoutVertexBuffer,k.indexBuffer,k.segments,n.paint,e.transform.zoom,T),m=!1}}}}}},fill:function(e,r,n,i){var a=n.paint.get(\\\"fill-color\\\"),o=n.paint.get(\\\"fill-opacity\\\");if(0!==o.constantOr(1)){var s=e.colorModeForRenderPass(),l=n.paint.get(\\\"fill-pattern\\\"),c=e.opaquePassEnabledForLayer()&&!l.constantOr(1)&&1===a.constantOr(t.Color.transparent).a&&1===o.constantOr(0)?\\\"opaque\\\":\\\"translucent\\\";if(e.renderPass===c){var u=e.depthModeForSublayer(1,\\\"opaque\\\"===e.renderPass?Tt.ReadWrite:Tt.ReadOnly);Xr(e,r,n,i,u,s,!1)}if(\\\"translucent\\\"===e.renderPass&&n.paint.get(\\\"fill-antialias\\\")){var h=e.depthModeForSublayer(n.getPaintProperty(\\\"fill-outline-color\\\")?2:0,Tt.ReadOnly);Xr(e,r,n,i,h,s,!0)}}},\\\"fill-extrusion\\\":function(t,e,r,n){var i=r.paint.get(\\\"fill-extrusion-opacity\\\");if(0!==i&&\\\"translucent\\\"===t.renderPass){var a=new Tt(t.context.gl.LEQUAL,Tt.ReadWrite,t.depthRangeFor3D);if(1!==i||r.paint.get(\\\"fill-extrusion-pattern\\\").constantOr(1))Zr(t,e,r,n,a,At.disabled,Mt.disabled),Zr(t,e,r,n,a,t.stencilModeFor3D(),t.colorModeForRenderPass());else{var o=t.colorModeForRenderPass();Zr(t,e,r,n,a,At.disabled,o)}}},hillshade:function(t,e,r,n){if(\\\"offscreen\\\"===t.renderPass||\\\"translucent\\\"===t.renderPass){for(var i=t.context,a=e.getSource().maxzoom,o=t.depthModeForSublayer(0,Tt.ReadOnly),s=At.disabled,l=t.colorModeForRenderPass(),c=0,u=n;c<u.length;c+=1){var h=u[c],f=e.getTile(h);f.needsHillshadePrepare&&\\\"offscreen\\\"===t.renderPass?Kr(t,f,r,a,o,s,l):\\\"translucent\\\"===t.renderPass&&Jr(t,f,r,o,s,l)}i.viewport.set([0,0,t.width,t.height])}},raster:function(t,e,r,n){if(\\\"translucent\\\"===t.renderPass&&0!==r.paint.get(\\\"raster-opacity\\\"))for(var i=t.context,a=i.gl,o=e.getSource(),s=t.useProgram(\\\"raster\\\"),l=At.disabled,c=t.colorModeForRenderPass(),u=n.length&&n[0].overscaledZ,h=!t.options.moving,f=0,p=n;f<p.length;f+=1){var d=p[f],g=t.depthModeForSublayer(d.overscaledZ-u,1===r.paint.get(\\\"raster-opacity\\\")?Tt.ReadWrite:Tt.ReadOnly,a.LESS),v=e.getTile(d),m=t.transform.calculatePosMatrix(d.toUnwrapped(),h);v.registerFadeDuration(r.paint.get(\\\"raster-fade-duration\\\"));var y=e.findLoadedParent(d,0),x=$r(v,y,e,r,t.transform),b=void 0,_=void 0,w=\\\"nearest\\\"===r.paint.get(\\\"raster-resampling\\\")?a.NEAREST:a.LINEAR;i.activeTexture.set(a.TEXTURE0),v.texture.bind(w,a.CLAMP_TO_EDGE,a.LINEAR_MIPMAP_NEAREST),i.activeTexture.set(a.TEXTURE1),y?(y.texture.bind(w,a.CLAMP_TO_EDGE,a.LINEAR_MIPMAP_NEAREST),b=Math.pow(2,y.tileID.overscaledZ-v.tileID.overscaledZ),_=[v.tileID.canonical.x*b%1,v.tileID.canonical.y*b%1]):v.texture.bind(w,a.CLAMP_TO_EDGE,a.LINEAR_MIPMAP_NEAREST);var k=Ir(m,_||[0,0],b||1,x,r);o instanceof L?s.draw(i,a.TRIANGLES,g,l,c,St.disabled,k,r.id,o.boundsBuffer,t.quadTriangleIndexBuffer,o.boundsSegments):v.maskedBoundsBuffer&&v.maskedIndexBuffer&&v.segments?s.draw(i,a.TRIANGLES,g,l,c,St.disabled,k,r.id,v.maskedBoundsBuffer,v.maskedIndexBuffer,v.segments,r.paint,t.transform.zoom):s.draw(i,a.TRIANGLES,g,l,c,St.disabled,k,r.id,t.rasterBoundsBuffer,t.quadTriangleIndexBuffer,t.rasterBoundsSegments)}},background:function(t,e,r){var n=r.paint.get(\\\"background-color\\\"),i=r.paint.get(\\\"background-opacity\\\");if(0!==i){var a=t.context,o=a.gl,s=t.transform,l=s.tileSize,c=r.paint.get(\\\"background-pattern\\\");if(!t.isPatternMissing(c)){var u=c||1!==n.a||1!==i?\\\"translucent\\\":\\\"opaque\\\";if(t.renderPass===u){var h=At.disabled,f=t.depthModeForSublayer(0,\\\"opaque\\\"===u?Tt.ReadWrite:Tt.ReadOnly),p=t.colorModeForRenderPass(),d=t.useProgram(c?\\\"backgroundPattern\\\":\\\"background\\\"),g=s.coveringTiles({tileSize:l});c&&(a.activeTexture.set(o.TEXTURE0),t.imageManager.bind(t.context));for(var v=r.getCrossfadeParameters(),m=0,y=g;m<y.length;m+=1){var x=y[m],b=t.transform.calculatePosMatrix(x.toUnwrapped()),_=c?Br(b,i,t,c,{tileID:x,tileSize:l},v):Fr(b,i,n);d.draw(a,o.TRIANGLES,f,h,p,St.disabled,_,r.id,t.tileExtentBuffer,t.quadTriangleIndexBuffer,t.tileExtentSegments)}}}}},debug:function(t,e,r){for(var n=0;n<r.length;n++)Qr(t,e,r[n])},custom:function(t,e,r){var n=t.context,i=r.implementation;if(\\\"offscreen\\\"===t.renderPass){var a=i.prerender;a&&(t.setCustomLayerDefaults(),n.setColorMode(t.colorModeForRenderPass()),a.call(i,n.gl,t.transform.customLayerMatrix()),n.setDirty(),t.setBaseState())}else if(\\\"translucent\\\"===t.renderPass){t.setCustomLayerDefaults(),n.setColorMode(t.colorModeForRenderPass()),n.setStencilMode(At.disabled);var o=\\\"3d\\\"===i.renderingMode?new Tt(t.context.gl.LEQUAL,Tt.ReadWrite,t.depthRangeFor3D):t.depthModeForSublayer(0,Tt.ReadOnly);n.setDepthMode(o),i.render(n.gl,t.transform.customLayerMatrix()),n.setDirty(),t.setBaseState(),n.bindFramebuffer.set(null)}}},rn=function(e,r){this.context=new Et(e),this.transform=r,this._tileTextures={},this.setup(),this.numSublayers=Ct.maxUnderzooming+Ct.maxOverzooming+1,this.depthEpsilon=1/Math.pow(2,16),this.depthRboNeedsClear=!0,this.emptyProgramConfiguration=new t.ProgramConfiguration,this.crossTileSymbolIndex=new Pe};function nn(t,e){if(t.y>e.y){var r=t;t=e,e=r}return{x0:t.x,y0:t.y,x1:e.x,y1:e.y,dx:e.x-t.x,dy:e.y-t.y}}function an(t,e,r,n,i){var a=Math.max(r,Math.floor(e.y0)),o=Math.min(n,Math.ceil(e.y1));if(t.x0===e.x0&&t.y0===e.y0?t.x0+e.dy/t.dy*t.dx<e.x1:t.x1-e.dy/t.dy*t.dx<e.x0){var s=t;t=e,e=s}for(var l=t.dx/t.dy,c=e.dx/e.dy,u=t.dx>0,h=e.dx<0,f=a;f<o;f++){var p=l*Math.max(0,Math.min(t.dy,f+u-t.y0))+t.x0,d=c*Math.max(0,Math.min(e.dy,f+h-e.y0))+e.x0;i(Math.floor(d),Math.ceil(p),f)}}function on(t,e,r,n,i,a){var o,s=nn(t,e),l=nn(e,r),c=nn(r,t);s.dy>l.dy&&(o=s,s=l,l=o),s.dy>c.dy&&(o=s,s=c,c=o),l.dy>c.dy&&(o=l,l=c,c=o),s.dy&&an(c,s,n,i,a),l.dy&&an(c,l,n,i,a)}rn.prototype.resize=function(e,r){var n=this.context.gl;if(this.width=e*t.browser.devicePixelRatio,this.height=r*t.browser.devicePixelRatio,this.context.viewport.set([0,0,this.width,this.height]),this.style)for(var i=0,a=this.style._order;i<a.length;i+=1){var o=a[i];this.style._layers[o].resize()}this.depthRbo&&(n.deleteRenderbuffer(this.depthRbo),this.depthRbo=null)},rn.prototype.setup=function(){var e=this.context,r=new t.StructArrayLayout2i4;r.emplaceBack(0,0),r.emplaceBack(t.EXTENT,0),r.emplaceBack(0,t.EXTENT),r.emplaceBack(t.EXTENT,t.EXTENT),this.tileExtentBuffer=e.createVertexBuffer(r,Re.members),this.tileExtentSegments=t.SegmentVector.simpleSegment(0,0,4,2);var n=new t.StructArrayLayout2i4;n.emplaceBack(0,0),n.emplaceBack(t.EXTENT,0),n.emplaceBack(0,t.EXTENT),n.emplaceBack(t.EXTENT,t.EXTENT),this.debugBuffer=e.createVertexBuffer(n,Re.members),this.debugSegments=t.SegmentVector.simpleSegment(0,0,4,5);var i=new t.StructArrayLayout4i8;i.emplaceBack(0,0,0,0),i.emplaceBack(t.EXTENT,0,t.EXTENT,0),i.emplaceBack(0,t.EXTENT,0,t.EXTENT),i.emplaceBack(t.EXTENT,t.EXTENT,t.EXTENT,t.EXTENT),this.rasterBoundsBuffer=e.createVertexBuffer(i,t.rasterBoundsAttributes.members),this.rasterBoundsSegments=t.SegmentVector.simpleSegment(0,0,4,2);var a=new t.StructArrayLayout2i4;a.emplaceBack(0,0),a.emplaceBack(1,0),a.emplaceBack(0,1),a.emplaceBack(1,1),this.viewportBuffer=e.createVertexBuffer(a,Re.members),this.viewportSegments=t.SegmentVector.simpleSegment(0,0,4,2);var o=new t.StructArrayLayout1ui2;o.emplaceBack(0),o.emplaceBack(1),o.emplaceBack(3),o.emplaceBack(2),o.emplaceBack(0),this.tileBorderIndexBuffer=e.createIndexBuffer(o);var s=new t.StructArrayLayout3ui6;s.emplaceBack(0,1,2),s.emplaceBack(2,1,3),this.quadTriangleIndexBuffer=e.createIndexBuffer(s);var l=this.context.gl;this.stencilClearMode=new At({func:l.ALWAYS,mask:0},0,255,l.ZERO,l.ZERO,l.ZERO)},rn.prototype.clearStencil=function(){var e=this.context,r=e.gl;this.nextStencilID=1,this.currentStencilSource=void 0;var n=t.create();t.ortho(n,0,this.width,this.height,0,0,1),t.scale(n,n,[r.drawingBufferWidth,r.drawingBufferHeight,0]),this.useProgram(\\\"clippingMask\\\").draw(e,r.TRIANGLES,Tt.disabled,this.stencilClearMode,Mt.disabled,St.disabled,kr(n),\\\"$clipping\\\",this.viewportBuffer,this.quadTriangleIndexBuffer,this.viewportSegments)},rn.prototype._renderTileClippingMasks=function(t,e){if(this.currentStencilSource!==t.source&&t.isTileClipped()&&e&&e.length){this.currentStencilSource=t.source;var r=this.context,n=r.gl;this.nextStencilID+e.length>256&&this.clearStencil(),r.setColorMode(Mt.disabled),r.setDepthMode(Tt.disabled);var i=this.useProgram(\\\"clippingMask\\\");this._tileClippingMaskIDs={};for(var a=0,o=e;a<o.length;a+=1){var s=o[a],l=this._tileClippingMaskIDs[s.key]=this.nextStencilID++;i.draw(r,n.TRIANGLES,Tt.disabled,new At({func:n.ALWAYS,mask:0},l,255,n.KEEP,n.KEEP,n.REPLACE),Mt.disabled,St.disabled,kr(s.posMatrix),\\\"$clipping\\\",this.tileExtentBuffer,this.quadTriangleIndexBuffer,this.tileExtentSegments)}}},rn.prototype.stencilModeFor3D=function(){this.nextStencilID+1>256&&this.clearStencil();var t=this.nextStencilID++,e=this.context.gl;return new At({func:e.NOTEQUAL,mask:255},t,255,e.KEEP,e.KEEP,e.REPLACE)},rn.prototype.stencilModeForClipping=function(t){var e=this.context.gl;return new At({func:e.EQUAL,mask:255},this._tileClippingMaskIDs[t.key],0,e.KEEP,e.KEEP,e.REPLACE)},rn.prototype.colorModeForRenderPass=function(){var e=this.context.gl;return this._showOverdrawInspector?new Mt([e.CONSTANT_COLOR,e.ONE],new t.Color(1/8,1/8,1/8,0),[!0,!0,!0,!0]):\\\"opaque\\\"===this.renderPass?Mt.unblended:Mt.alphaBlended},rn.prototype.depthModeForSublayer=function(t,e,r){if(!this.opaquePassEnabledForLayer())return Tt.disabled;var n=1-((1+this.currentLayer)*this.numSublayers+t)*this.depthEpsilon;return new Tt(r||this.context.gl.LEQUAL,e,[n,n])},rn.prototype.opaquePassEnabledForLayer=function(){return this.currentLayer<this.opaquePassCutoff},rn.prototype.render=function(e,r){this.style=e,this.options=r,this.lineAtlas=e.lineAtlas,this.imageManager=e.imageManager,this.glyphManager=e.glyphManager,this.symbolFadeChange=e.placement.symbolFadeChange(t.browser.now()),this.imageManager.beginFrame();var n=this.style._order,i=this.style.sourceCaches;for(var a in i){var o=i[a];o.used&&o.prepare(this.context)}var s={},l={},c={};for(var u in i){var h=i[u];s[u]=h.getVisibleCoordinates(),l[u]=s[u].slice().reverse(),c[u]=h.getVisibleCoordinates(!0).reverse()}for(var f in i){var p=i[f],d=p.getSource();if(\\\"raster\\\"===d.type||\\\"raster-dem\\\"===d.type){for(var g=[],v=0,m=s[f];v<m.length;v+=1){var y=m[v];g.push(p.getTile(y))}jr(g,this.context)}}this.opaquePassCutoff=1/0;for(var x=0;x<n.length;x++){var b=n[x];if(this.style._layers[b].is3D()){this.opaquePassCutoff=x;break}}this.renderPass=\\\"offscreen\\\",this.depthRboNeedsClear=!0;for(var _=0,w=n;_<w.length;_+=1){var k=w[_],T=this.style._layers[k];if(T.hasOffscreenPass()&&!T.isHidden(this.transform.zoom)){var A=l[T.source];(\\\"custom\\\"===T.type||A.length)&&this.renderLayer(this,i[T.source],T,A)}}for(this.context.bindFramebuffer.set(null),this.context.clear({color:r.showOverdrawInspector?t.Color.black:t.Color.transparent,depth:1}),this.clearStencil(),this._showOverdrawInspector=r.showOverdrawInspector,this.depthRangeFor3D=[0,1-(e._order.length+2)*this.numSublayers*this.depthEpsilon],this.renderPass=\\\"opaque\\\",this.currentLayer=n.length-1;this.currentLayer>=0;this.currentLayer--){var M=this.style._layers[n[this.currentLayer]],S=i[M.source],E=s[M.source];this._renderTileClippingMasks(M,E),this.renderLayer(this,S,M,E)}for(this.renderPass=\\\"translucent\\\",this.currentLayer=0;this.currentLayer<n.length;this.currentLayer++){var C=this.style._layers[n[this.currentLayer]],L=i[C.source],P=(\\\"symbol\\\"===C.type?c:l)[C.source];this._renderTileClippingMasks(C,s[C.source]),this.renderLayer(this,L,C,P)}if(this.options.showTileBoundaries)for(var O in i){en.debug(this,i[O],s[O]);break}this.context.setDefault()},rn.prototype.setupOffscreenDepthRenderbuffer=function(){var t=this.context;this.depthRbo||(this.depthRbo=t.createRenderbuffer(t.gl.DEPTH_COMPONENT16,this.width,this.height))},rn.prototype.renderLayer=function(t,e,r,n){r.isHidden(this.transform.zoom)||(\\\"background\\\"===r.type||\\\"custom\\\"===r.type||n.length)&&(this.id=r.id,en[r.type](t,e,r,n,this.style.placement.variableOffsets))},rn.prototype.translatePosMatrix=function(e,r,n,i,a){if(!n[0]&&!n[1])return e;var o=a?\\\"map\\\"===i?this.transform.angle:0:\\\"viewport\\\"===i?-this.transform.angle:0;if(o){var s=Math.sin(o),l=Math.cos(o);n=[n[0]*l-n[1]*s,n[0]*s+n[1]*l]}var c=[a?n[0]:le(r,n[0],this.transform.zoom),a?n[1]:le(r,n[1],this.transform.zoom),0],u=new Float32Array(16);return t.translate(u,e,c),u},rn.prototype.saveTileTexture=function(t){var e=this._tileTextures[t.size[0]];e?e.push(t):this._tileTextures[t.size[0]]=[t]},rn.prototype.getTileTexture=function(t){var e=this._tileTextures[t];return e&&e.length>0?e.pop():null},rn.prototype.isPatternMissing=function(t){if(!t)return!1;var e=this.imageManager.getPattern(t.from),r=this.imageManager.getPattern(t.to);return!e||!r},rn.prototype.useProgram=function(t,e){void 0===e&&(e=this.emptyProgramConfiguration),this.cache=this.cache||{};var r=\\\"\\\"+t+(e.cacheKey||\\\"\\\")+(this._showOverdrawInspector?\\\"/overdraw\\\":\\\"\\\");return this.cache[r]||(this.cache[r]=new hr(this.context,cr[t],e,Nr[t],this._showOverdrawInspector)),this.cache[r]},rn.prototype.setCustomLayerDefaults=function(){this.context.unbindVAO(),this.context.cullFace.setDefault(),this.context.activeTexture.setDefault(),this.context.pixelStoreUnpack.setDefault(),this.context.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.context.pixelStoreUnpackFlipY.setDefault()},rn.prototype.setBaseState=function(){var t=this.context.gl;this.context.cullFace.set(!1),this.context.viewport.set([0,0,this.width,this.height]),this.context.blendEquation.set(t.FUNC_ADD)};var sn=function(e,r,n){this.tileSize=512,this.maxValidLatitude=85.051129,this._renderWorldCopies=void 0===n||n,this._minZoom=e||0,this._maxZoom=r||22,this.setMaxBounds(),this.width=0,this.height=0,this._center=new t.LngLat(0,0),this.zoom=0,this.angle=0,this._fov=.6435011087932844,this._pitch=0,this._unmodified=!0,this._posMatrixCache={},this._alignedPosMatrixCache={}},ln={minZoom:{configurable:!0},maxZoom:{configurable:!0},renderWorldCopies:{configurable:!0},worldSize:{configurable:!0},centerPoint:{configurable:!0},size:{configurable:!0},bearing:{configurable:!0},pitch:{configurable:!0},fov:{configurable:!0},zoom:{configurable:!0},center:{configurable:!0},unmodified:{configurable:!0},point:{configurable:!0}};sn.prototype.clone=function(){var t=new sn(this._minZoom,this._maxZoom,this._renderWorldCopies);return t.tileSize=this.tileSize,t.latRange=this.latRange,t.width=this.width,t.height=this.height,t._center=this._center,t.zoom=this.zoom,t.angle=this.angle,t._fov=this._fov,t._pitch=this._pitch,t._unmodified=this._unmodified,t._calcMatrices(),t},ln.minZoom.get=function(){return this._minZoom},ln.minZoom.set=function(t){this._minZoom!==t&&(this._minZoom=t,this.zoom=Math.max(this.zoom,t))},ln.maxZoom.get=function(){return this._maxZoom},ln.maxZoom.set=function(t){this._maxZoom!==t&&(this._maxZoom=t,this.zoom=Math.min(this.zoom,t))},ln.renderWorldCopies.get=function(){return this._renderWorldCopies},ln.renderWorldCopies.set=function(t){void 0===t?t=!0:null===t&&(t=!1),this._renderWorldCopies=t},ln.worldSize.get=function(){return this.tileSize*this.scale},ln.centerPoint.get=function(){return this.size._div(2)},ln.size.get=function(){return new t.Point(this.width,this.height)},ln.bearing.get=function(){return-this.angle/Math.PI*180},ln.bearing.set=function(e){var r=-t.wrap(e,-180,180)*Math.PI/180;this.angle!==r&&(this._unmodified=!1,this.angle=r,this._calcMatrices(),this.rotationMatrix=t.create$2(),t.rotate(this.rotationMatrix,this.rotationMatrix,this.angle))},ln.pitch.get=function(){return this._pitch/Math.PI*180},ln.pitch.set=function(e){var r=t.clamp(e,0,60)/180*Math.PI;this._pitch!==r&&(this._unmodified=!1,this._pitch=r,this._calcMatrices())},ln.fov.get=function(){return this._fov/Math.PI*180},ln.fov.set=function(t){t=Math.max(.01,Math.min(60,t)),this._fov!==t&&(this._unmodified=!1,this._fov=t/180*Math.PI,this._calcMatrices())},ln.zoom.get=function(){return this._zoom},ln.zoom.set=function(t){var e=Math.min(Math.max(t,this.minZoom),this.maxZoom);this._zoom!==e&&(this._unmodified=!1,this._zoom=e,this.scale=this.zoomScale(e),this.tileZoom=Math.floor(e),this.zoomFraction=e-this.tileZoom,this._constrain(),this._calcMatrices())},ln.center.get=function(){return this._center},ln.center.set=function(t){t.lat===this._center.lat&&t.lng===this._center.lng||(this._unmodified=!1,this._center=t,this._constrain(),this._calcMatrices())},sn.prototype.coveringZoomLevel=function(t){return(t.roundZoom?Math.round:Math.floor)(this.zoom+this.scaleZoom(this.tileSize/t.tileSize))},sn.prototype.getVisibleUnwrappedCoordinates=function(e){var r=[new t.UnwrappedTileID(0,e)];if(this._renderWorldCopies)for(var n=this.pointCoordinate(new t.Point(0,0)),i=this.pointCoordinate(new t.Point(this.width,0)),a=this.pointCoordinate(new t.Point(this.width,this.height)),o=this.pointCoordinate(new t.Point(0,this.height)),s=Math.floor(Math.min(n.x,i.x,a.x,o.x)),l=Math.floor(Math.max(n.x,i.x,a.x,o.x)),c=s-1;c<=l+1;c++)0!==c&&r.push(new t.UnwrappedTileID(c,e));return r},sn.prototype.coveringTiles=function(e){var r=this.coveringZoomLevel(e),n=r;if(void 0!==e.minzoom&&r<e.minzoom)return[];void 0!==e.maxzoom&&r>e.maxzoom&&(r=e.maxzoom);var i=t.MercatorCoordinate.fromLngLat(this.center),a=Math.pow(2,r),o=new t.Point(a*i.x-.5,a*i.y-.5);return function(e,r,n,i){void 0===i&&(i=!0);var a=1<<e,o={};function s(r,s,l){var c,u,h,f;if(l>=0&&l<=a)for(c=r;c<s;c++)u=Math.floor(c/a),h=(c%a+a)%a,0!==u&&!0!==i||(f=new t.OverscaledTileID(n,u,e,h,l),o[f.key]=f)}var l=r.map(function(e){return new t.Point(e.x,e.y)._mult(a)});return on(l[0],l[1],l[2],0,a,s),on(l[2],l[3],l[0],0,a,s),Object.keys(o).map(function(t){return o[t]})}(r,[this.pointCoordinate(new t.Point(0,0)),this.pointCoordinate(new t.Point(this.width,0)),this.pointCoordinate(new t.Point(this.width,this.height)),this.pointCoordinate(new t.Point(0,this.height))],e.reparseOverscaled?n:r,this._renderWorldCopies).sort(function(t,e){return o.dist(t.canonical)-o.dist(e.canonical)})},sn.prototype.resize=function(t,e){this.width=t,this.height=e,this.pixelsToGLUnits=[2/t,-2/e],this._constrain(),this._calcMatrices()},ln.unmodified.get=function(){return this._unmodified},sn.prototype.zoomScale=function(t){return Math.pow(2,t)},sn.prototype.scaleZoom=function(t){return Math.log(t)/Math.LN2},sn.prototype.project=function(e){var r=t.clamp(e.lat,-this.maxValidLatitude,this.maxValidLatitude);return new t.Point(t.mercatorXfromLng(e.lng)*this.worldSize,t.mercatorYfromLat(r)*this.worldSize)},sn.prototype.unproject=function(e){return new t.MercatorCoordinate(e.x/this.worldSize,e.y/this.worldSize).toLngLat()},ln.point.get=function(){return this.project(this.center)},sn.prototype.setLocationAtPoint=function(e,r){var n=this.pointCoordinate(r),i=this.pointCoordinate(this.centerPoint),a=this.locationCoordinate(e),o=new t.MercatorCoordinate(a.x-(n.x-i.x),a.y-(n.y-i.y));this.center=this.coordinateLocation(o),this._renderWorldCopies&&(this.center=this.center.wrap())},sn.prototype.locationPoint=function(t){return this.coordinatePoint(this.locationCoordinate(t))},sn.prototype.pointLocation=function(t){return this.coordinateLocation(this.pointCoordinate(t))},sn.prototype.locationCoordinate=function(e){return t.MercatorCoordinate.fromLngLat(e)},sn.prototype.coordinateLocation=function(t){return t.toLngLat()},sn.prototype.pointCoordinate=function(e){var r=[e.x,e.y,0,1],n=[e.x,e.y,1,1];t.transformMat4(r,r,this.pixelMatrixInverse),t.transformMat4(n,n,this.pixelMatrixInverse);var i=r[3],a=n[3],o=r[0]/i,s=n[0]/a,l=r[1]/i,c=n[1]/a,u=r[2]/i,h=n[2]/a,f=u===h?0:(0-u)/(h-u);return new t.MercatorCoordinate(t.number(o,s,f)/this.worldSize,t.number(l,c,f)/this.worldSize)},sn.prototype.coordinatePoint=function(e){var r=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(r,r,this.pixelMatrix),new t.Point(r[0]/r[3],r[1]/r[3])},sn.prototype.getBounds=function(){return(new t.LngLatBounds).extend(this.pointLocation(new t.Point(0,0))).extend(this.pointLocation(new t.Point(this.width,0))).extend(this.pointLocation(new t.Point(this.width,this.height))).extend(this.pointLocation(new t.Point(0,this.height)))},sn.prototype.getMaxBounds=function(){return this.latRange&&2===this.latRange.length&&this.lngRange&&2===this.lngRange.length?new t.LngLatBounds([this.lngRange[0],this.latRange[0]],[this.lngRange[1],this.latRange[1]]):null},sn.prototype.setMaxBounds=function(t){t?(this.lngRange=[t.getWest(),t.getEast()],this.latRange=[t.getSouth(),t.getNorth()],this._constrain()):(this.lngRange=null,this.latRange=[-this.maxValidLatitude,this.maxValidLatitude])},sn.prototype.calculatePosMatrix=function(e,r){void 0===r&&(r=!1);var n=e.key,i=r?this._alignedPosMatrixCache:this._posMatrixCache;if(i[n])return i[n];var a=e.canonical,o=this.worldSize/this.zoomScale(a.z),s=a.x+Math.pow(2,a.z)*e.wrap,l=t.identity(new Float64Array(16));return t.translate(l,l,[s*o,a.y*o,0]),t.scale(l,l,[o/t.EXTENT,o/t.EXTENT,1]),t.multiply(l,r?this.alignedProjMatrix:this.projMatrix,l),i[n]=new Float32Array(l),i[n]},sn.prototype.customLayerMatrix=function(){return this.mercatorMatrix.slice()},sn.prototype._constrain=function(){if(this.center&&this.width&&this.height&&!this._constraining){this._constraining=!0;var e,r,n,i,a=-90,o=90,s=-180,l=180,c=this.size,u=this._unmodified;if(this.latRange){var h=this.latRange;a=t.mercatorYfromLat(h[1])*this.worldSize,e=(o=t.mercatorYfromLat(h[0])*this.worldSize)-a<c.y?c.y/(o-a):0}if(this.lngRange){var f=this.lngRange;s=t.mercatorXfromLng(f[0])*this.worldSize,r=(l=t.mercatorXfromLng(f[1])*this.worldSize)-s<c.x?c.x/(l-s):0}var p=this.point,d=Math.max(r||0,e||0);if(d)return this.center=this.unproject(new t.Point(r?(l+s)/2:p.x,e?(o+a)/2:p.y)),this.zoom+=this.scaleZoom(d),this._unmodified=u,void(this._constraining=!1);if(this.latRange){var g=p.y,v=c.y/2;g-v<a&&(i=a+v),g+v>o&&(i=o-v)}if(this.lngRange){var m=p.x,y=c.x/2;m-y<s&&(n=s+y),m+y>l&&(n=l-y)}void 0===n&&void 0===i||(this.center=this.unproject(new t.Point(void 0!==n?n:p.x,void 0!==i?i:p.y))),this._unmodified=u,this._constraining=!1}},sn.prototype._calcMatrices=function(){if(this.height){this.cameraToCenterDistance=.5/Math.tan(this._fov/2)*this.height;var e=this._fov/2,r=Math.PI/2+this._pitch,n=Math.sin(e)*this.cameraToCenterDistance/Math.sin(Math.PI-r-e),i=this.point,a=i.x,o=i.y,s=1.01*(Math.cos(Math.PI/2-this._pitch)*n+this.cameraToCenterDistance),l=new Float64Array(16);t.perspective(l,this._fov,this.width/this.height,1,s),t.scale(l,l,[1,-1,1]),t.translate(l,l,[0,0,-this.cameraToCenterDistance]),t.rotateX(l,l,this._pitch),t.rotateZ(l,l,this.angle),t.translate(l,l,[-a,-o,0]),this.mercatorMatrix=t.scale([],l,[this.worldSize,this.worldSize,this.worldSize]),t.scale(l,l,[1,1,t.mercatorZfromAltitude(1,this.center.lat)*this.worldSize,1]),this.projMatrix=l;var c=this.width%2/2,u=this.height%2/2,h=Math.cos(this.angle),f=Math.sin(this.angle),p=a-Math.round(a)+h*c+f*u,d=o-Math.round(o)+h*u+f*c,g=new Float64Array(l);if(t.translate(g,g,[p>.5?p-1:p,d>.5?d-1:d,0]),this.alignedProjMatrix=g,l=t.create(),t.scale(l,l,[this.width/2,-this.height/2,1]),t.translate(l,l,[1,-1,0]),this.labelPlaneMatrix=l,l=t.create(),t.scale(l,l,[1,-1,1]),t.translate(l,l,[-1,-1,0]),t.scale(l,l,[2/this.width,2/this.height,1]),this.glCoordMatrix=l,this.pixelMatrix=t.multiply(new Float64Array(16),this.labelPlaneMatrix,this.projMatrix),!(l=t.invert(new Float64Array(16),this.pixelMatrix)))throw new Error(\\\"failed to invert matrix\\\");this.pixelMatrixInverse=l,this._posMatrixCache={},this._alignedPosMatrixCache={}}},sn.prototype.maxPitchScaleFactor=function(){if(!this.pixelMatrixInverse)return 1;var e=this.pointCoordinate(new t.Point(0,0)),r=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(r,r,this.pixelMatrix)[3]/this.cameraToCenterDistance},sn.prototype.getCameraPoint=function(){var e=this._pitch,r=Math.tan(e)*(this.cameraToCenterDistance||1);return this.centerPoint.add(new t.Point(0,r))},sn.prototype.getCameraQueryGeometry=function(e){var r=this.getCameraPoint();if(1===e.length)return[e[0],r];for(var n=r.x,i=r.y,a=r.x,o=r.y,s=0,l=e;s<l.length;s+=1){var c=l[s];n=Math.min(n,c.x),i=Math.min(i,c.y),a=Math.max(a,c.x),o=Math.max(o,c.y)}return[new t.Point(n,i),new t.Point(a,i),new t.Point(a,o),new t.Point(n,o),new t.Point(n,i)]},Object.defineProperties(sn.prototype,ln);var cn=function(){var e,r,n,i;t.bindAll([\\\"_onHashChange\\\",\\\"_updateHash\\\"],this),this._updateHash=(e=this._updateHashUnthrottled.bind(this),300,r=!1,n=null,i=function(){n=null,r&&(e(),n=setTimeout(i,300),r=!1)},function(){return r=!0,n||i(),n})};cn.prototype.addTo=function(e){return this._map=e,t.window.addEventListener(\\\"hashchange\\\",this._onHashChange,!1),this._map.on(\\\"moveend\\\",this._updateHash),this},cn.prototype.remove=function(){return t.window.removeEventListener(\\\"hashchange\\\",this._onHashChange,!1),this._map.off(\\\"moveend\\\",this._updateHash),clearTimeout(this._updateHash()),delete this._map,this},cn.prototype.getHashString=function(t){var e=this._map.getCenter(),r=Math.round(100*this._map.getZoom())/100,n=Math.ceil((r*Math.LN2+Math.log(512/360/.5))/Math.LN10),i=Math.pow(10,n),a=Math.round(e.lng*i)/i,o=Math.round(e.lat*i)/i,s=this._map.getBearing(),l=this._map.getPitch(),c=\\\"\\\";return c+=t?\\\"#/\\\"+a+\\\"/\\\"+o+\\\"/\\\"+r:\\\"#\\\"+r+\\\"/\\\"+o+\\\"/\\\"+a,(s||l)&&(c+=\\\"/\\\"+Math.round(10*s)/10),l&&(c+=\\\"/\\\"+Math.round(l)),c},cn.prototype._onHashChange=function(){var e=t.window.location.hash.replace(\\\"#\\\",\\\"\\\").split(\\\"/\\\");return e.length>=3&&(this._map.jumpTo({center:[+e[2],+e[1]],zoom:+e[0],bearing:+(e[3]||0),pitch:+(e[4]||0)}),!0)},cn.prototype._updateHashUnthrottled=function(){var e=this.getHashString();try{t.window.history.replaceState(t.window.history.state,\\\"\\\",e)}catch(t){}};var un=function(e){function n(n,i,a,o){void 0===o&&(o={});var s=r.mousePos(i.getCanvasContainer(),a),l=i.unproject(s);e.call(this,n,t.extend({point:s,lngLat:l,originalEvent:a},o)),this._defaultPrevented=!1,this.target=i}e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n;var i={defaultPrevented:{configurable:!0}};return n.prototype.preventDefault=function(){this._defaultPrevented=!0},i.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(n.prototype,i),n}(t.Event),hn=function(e){function n(n,i,a){var o=r.touchPos(i.getCanvasContainer(),a),s=o.map(function(t){return i.unproject(t)}),l=o.reduce(function(t,e,r,n){return t.add(e.div(n.length))},new t.Point(0,0)),c=i.unproject(l);e.call(this,n,{points:o,point:l,lngLats:s,lngLat:c,originalEvent:a}),this._defaultPrevented=!1}e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n;var i={defaultPrevented:{configurable:!0}};return n.prototype.preventDefault=function(){this._defaultPrevented=!0},i.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(n.prototype,i),n}(t.Event),fn=function(t){function e(e,r,n){t.call(this,e,{originalEvent:n}),this._defaultPrevented=!1}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={defaultPrevented:{configurable:!0}};return e.prototype.preventDefault=function(){this._defaultPrevented=!0},r.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(e.prototype,r),e}(t.Event),pn=function(e){this._map=e,this._el=e.getCanvasContainer(),this._delta=0,this._defaultZoomRate=.01,this._wheelZoomRate=1/450,t.bindAll([\\\"_onWheel\\\",\\\"_onTimeout\\\",\\\"_onScrollFrame\\\",\\\"_onScrollFinished\\\"],this)};pn.prototype.setZoomRate=function(t){this._defaultZoomRate=t},pn.prototype.setWheelZoomRate=function(t){this._wheelZoomRate=t},pn.prototype.isEnabled=function(){return!!this._enabled},pn.prototype.isActive=function(){return!!this._active},pn.prototype.isZooming=function(){return!!this._zooming},pn.prototype.enable=function(t){this.isEnabled()||(this._enabled=!0,this._aroundCenter=t&&\\\"center\\\"===t.around)},pn.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},pn.prototype.onWheel=function(e){if(this.isEnabled()){var r=e.deltaMode===t.window.WheelEvent.DOM_DELTA_LINE?40*e.deltaY:e.deltaY,n=t.browser.now(),i=n-(this._lastWheelEventTime||0);this._lastWheelEventTime=n,0!==r&&r%4.000244140625==0?this._type=\\\"wheel\\\":0!==r&&Math.abs(r)<4?this._type=\\\"trackpad\\\":i>400?(this._type=null,this._lastValue=r,this._timeout=setTimeout(this._onTimeout,40,e)):this._type||(this._type=Math.abs(i*r)<200?\\\"trackpad\\\":\\\"wheel\\\",this._timeout&&(clearTimeout(this._timeout),this._timeout=null,r+=this._lastValue)),e.shiftKey&&r&&(r/=4),this._type&&(this._lastWheelEvent=e,this._delta-=r,this.isActive()||this._start(e)),e.preventDefault()}},pn.prototype._onTimeout=function(t){this._type=\\\"wheel\\\",this._delta-=this._lastValue,this.isActive()||this._start(t)},pn.prototype._start=function(e){if(this._delta){this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),this._active=!0,this.isZooming()||(this._zooming=!0,this._map.fire(new t.Event(\\\"movestart\\\",{originalEvent:e})),this._map.fire(new t.Event(\\\"zoomstart\\\",{originalEvent:e}))),this._finishTimeout&&clearTimeout(this._finishTimeout);var n=r.mousePos(this._el,e);this._around=t.LngLat.convert(this._aroundCenter?this._map.getCenter():this._map.unproject(n)),this._aroundPoint=this._map.transform.locationPoint(this._around),this._frameId||(this._frameId=this._map._requestRenderFrame(this._onScrollFrame))}},pn.prototype._onScrollFrame=function(){var e=this;if(this._frameId=null,this.isActive()){var r=this._map.transform;if(0!==this._delta){var n=\\\"wheel\\\"===this._type&&Math.abs(this._delta)>4.000244140625?this._wheelZoomRate:this._defaultZoomRate,i=2/(1+Math.exp(-Math.abs(this._delta*n)));this._delta<0&&0!==i&&(i=1/i);var a=\\\"number\\\"==typeof this._targetZoom?r.zoomScale(this._targetZoom):r.scale;this._targetZoom=Math.min(r.maxZoom,Math.max(r.minZoom,r.scaleZoom(a*i))),\\\"wheel\\\"===this._type&&(this._startZoom=r.zoom,this._easing=this._smoothOutEasing(200)),this._delta=0}var o=\\\"number\\\"==typeof this._targetZoom?this._targetZoom:r.zoom,s=this._startZoom,l=this._easing,c=!1;if(\\\"wheel\\\"===this._type&&s&&l){var u=Math.min((t.browser.now()-this._lastWheelEventTime)/200,1),h=l(u);r.zoom=t.number(s,o,h),u<1?this._frameId||(this._frameId=this._map._requestRenderFrame(this._onScrollFrame)):c=!0}else r.zoom=o,c=!0;r.setLocationAtPoint(this._around,this._aroundPoint),this._map.fire(new t.Event(\\\"move\\\",{originalEvent:this._lastWheelEvent})),this._map.fire(new t.Event(\\\"zoom\\\",{originalEvent:this._lastWheelEvent})),c&&(this._active=!1,this._finishTimeout=setTimeout(function(){e._zooming=!1,e._map.fire(new t.Event(\\\"zoomend\\\",{originalEvent:e._lastWheelEvent})),e._map.fire(new t.Event(\\\"moveend\\\",{originalEvent:e._lastWheelEvent})),delete e._targetZoom},200))}},pn.prototype._smoothOutEasing=function(e){var r=t.ease;if(this._prevEase){var n=this._prevEase,i=(t.browser.now()-n.start)/n.duration,a=n.easing(i+.01)-n.easing(i),o=.27/Math.sqrt(a*a+1e-4)*.01,s=Math.sqrt(.0729-o*o);r=t.bezier(o,s,.25,1)}return this._prevEase={start:t.browser.now(),duration:e,easing:r},r};var dn=function(e,r){this._map=e,this._el=e.getCanvasContainer(),this._container=e.getContainer(),this._clickTolerance=r.clickTolerance||1,t.bindAll([\\\"_onMouseMove\\\",\\\"_onMouseUp\\\",\\\"_onKeyDown\\\"],this)};dn.prototype.isEnabled=function(){return!!this._enabled},dn.prototype.isActive=function(){return!!this._active},dn.prototype.enable=function(){this.isEnabled()||(this._enabled=!0)},dn.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},dn.prototype.onMouseDown=function(e){this.isEnabled()&&e.shiftKey&&0===e.button&&(t.window.document.addEventListener(\\\"mousemove\\\",this._onMouseMove,!1),t.window.document.addEventListener(\\\"keydown\\\",this._onKeyDown,!1),t.window.document.addEventListener(\\\"mouseup\\\",this._onMouseUp,!1),r.disableDrag(),this._startPos=this._lastPos=r.mousePos(this._el,e),this._active=!0)},dn.prototype._onMouseMove=function(t){var e=r.mousePos(this._el,t);if(!(this._lastPos.equals(e)||!this._box&&e.dist(this._startPos)<this._clickTolerance)){var n=this._startPos;this._lastPos=e,this._box||(this._box=r.create(\\\"div\\\",\\\"mapboxgl-boxzoom\\\",this._container),this._container.classList.add(\\\"mapboxgl-crosshair\\\"),this._fireEvent(\\\"boxzoomstart\\\",t));var i=Math.min(n.x,e.x),a=Math.max(n.x,e.x),o=Math.min(n.y,e.y),s=Math.max(n.y,e.y);r.setTransform(this._box,\\\"translate(\\\"+i+\\\"px,\\\"+o+\\\"px)\\\"),this._box.style.width=a-i+\\\"px\\\",this._box.style.height=s-o+\\\"px\\\"}},dn.prototype._onMouseUp=function(e){if(0===e.button){var n=this._startPos,i=r.mousePos(this._el,e);this._finish(),r.suppressClick(),n.x===i.x&&n.y===i.y?this._fireEvent(\\\"boxzoomcancel\\\",e):this._map.fitScreenCoordinates(n,i,this._map.getBearing(),{linear:!0}).fire(new t.Event(\\\"boxzoomend\\\",{originalEvent:e}))}},dn.prototype._onKeyDown=function(t){27===t.keyCode&&(this._finish(),this._fireEvent(\\\"boxzoomcancel\\\",t))},dn.prototype._finish=function(){this._active=!1,t.window.document.removeEventListener(\\\"mousemove\\\",this._onMouseMove,!1),t.window.document.removeEventListener(\\\"keydown\\\",this._onKeyDown,!1),t.window.document.removeEventListener(\\\"mouseup\\\",this._onMouseUp,!1),this._container.classList.remove(\\\"mapboxgl-crosshair\\\"),this._box&&(r.remove(this._box),this._box=null),r.enableDrag(),delete this._startPos,delete this._lastPos},dn.prototype._fireEvent=function(e,r){return this._map.fire(new t.Event(e,{originalEvent:r}))};var gn=t.bezier(0,0,.25,1),vn=function(e,r){this._map=e,this._el=r.element||e.getCanvasContainer(),this._state=\\\"disabled\\\",this._button=r.button||\\\"right\\\",this._bearingSnap=r.bearingSnap||0,this._pitchWithRotate=!1!==r.pitchWithRotate,t.bindAll([\\\"onMouseDown\\\",\\\"_onMouseMove\\\",\\\"_onMouseUp\\\",\\\"_onBlur\\\",\\\"_onDragFrame\\\"],this)};vn.prototype.isEnabled=function(){return\\\"disabled\\\"!==this._state},vn.prototype.isActive=function(){return\\\"active\\\"===this._state},vn.prototype.enable=function(){this.isEnabled()||(this._state=\\\"enabled\\\")},vn.prototype.disable=function(){if(this.isEnabled())switch(this._state){case\\\"active\\\":this._state=\\\"disabled\\\",this._unbind(),this._deactivate(),this._fireEvent(\\\"rotateend\\\"),this._pitchWithRotate&&this._fireEvent(\\\"pitchend\\\"),this._fireEvent(\\\"moveend\\\");break;case\\\"pending\\\":this._state=\\\"disabled\\\",this._unbind();break;default:this._state=\\\"disabled\\\"}},vn.prototype.onMouseDown=function(e){if(\\\"enabled\\\"===this._state){if(\\\"right\\\"===this._button){if(this._eventButton=r.mouseButton(e),this._eventButton!==(e.ctrlKey?0:2))return}else{if(e.ctrlKey||0!==r.mouseButton(e))return;this._eventButton=0}r.disableDrag(),t.window.document.addEventListener(\\\"mousemove\\\",this._onMouseMove,{capture:!0}),t.window.document.addEventListener(\\\"mouseup\\\",this._onMouseUp),t.window.addEventListener(\\\"blur\\\",this._onBlur),this._state=\\\"pending\\\",this._inertia=[[t.browser.now(),this._map.getBearing()]],this._startPos=this._lastPos=r.mousePos(this._el,e),this._center=this._map.transform.centerPoint,e.preventDefault()}},vn.prototype._onMouseMove=function(t){var e=r.mousePos(this._el,t);this._lastPos.equals(e)||(this._lastMoveEvent=t,this._lastPos=e,\\\"pending\\\"===this._state&&(this._state=\\\"active\\\",this._fireEvent(\\\"rotatestart\\\",t),this._fireEvent(\\\"movestart\\\",t),this._pitchWithRotate&&this._fireEvent(\\\"pitchstart\\\",t)),this._frameId||(this._frameId=this._map._requestRenderFrame(this._onDragFrame)))},vn.prototype._onDragFrame=function(){this._frameId=null;var e=this._lastMoveEvent;if(e){var r=this._map.transform,n=this._startPos,i=this._lastPos,a=.8*(n.x-i.x),o=-.5*(n.y-i.y),s=r.bearing-a,l=r.pitch-o,c=this._inertia,u=c[c.length-1];this._drainInertiaBuffer(),c.push([t.browser.now(),this._map._normalizeBearing(s,u[1])]),r.bearing=s,this._pitchWithRotate&&(this._fireEvent(\\\"pitch\\\",e),r.pitch=l),this._fireEvent(\\\"rotate\\\",e),this._fireEvent(\\\"move\\\",e),delete this._lastMoveEvent,this._startPos=this._lastPos}},vn.prototype._onMouseUp=function(t){if(r.mouseButton(t)===this._eventButton)switch(this._state){case\\\"active\\\":this._state=\\\"enabled\\\",r.suppressClick(),this._unbind(),this._deactivate(),this._inertialRotate(t);break;case\\\"pending\\\":this._state=\\\"enabled\\\",this._unbind()}},vn.prototype._onBlur=function(t){switch(this._state){case\\\"active\\\":this._state=\\\"enabled\\\",this._unbind(),this._deactivate(),this._fireEvent(\\\"rotateend\\\",t),this._pitchWithRotate&&this._fireEvent(\\\"pitchend\\\",t),this._fireEvent(\\\"moveend\\\",t);break;case\\\"pending\\\":this._state=\\\"enabled\\\",this._unbind()}},vn.prototype._unbind=function(){t.window.document.removeEventListener(\\\"mousemove\\\",this._onMouseMove,{capture:!0}),t.window.document.removeEventListener(\\\"mouseup\\\",this._onMouseUp),t.window.removeEventListener(\\\"blur\\\",this._onBlur),r.enableDrag()},vn.prototype._deactivate=function(){this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),delete this._lastMoveEvent,delete this._startPos,delete this._lastPos},vn.prototype._inertialRotate=function(t){var e=this;this._fireEvent(\\\"rotateend\\\",t),this._drainInertiaBuffer();var r=this._map,n=r.getBearing(),i=this._inertia,a=function(){Math.abs(n)<e._bearingSnap?r.resetNorth({noMoveStart:!0},{originalEvent:t}):e._fireEvent(\\\"moveend\\\",t),e._pitchWithRotate&&e._fireEvent(\\\"pitchend\\\",t)};if(i.length<2)a();else{var o=i[0],s=i[i.length-1],l=i[i.length-2],c=r._normalizeBearing(n,l[1]),u=s[1]-o[1],h=u<0?-1:1,f=(s[0]-o[0])/1e3;if(0!==u&&0!==f){var p=Math.abs(u*(.25/f));p>180&&(p=180);var d=p/180;c+=h*p*(d/2),Math.abs(r._normalizeBearing(c,0))<this._bearingSnap&&(c=r._normalizeBearing(0,c)),r.rotateTo(c,{duration:1e3*d,easing:gn,noMoveStart:!0},{originalEvent:t})}else a()}},vn.prototype._fireEvent=function(e,r){return this._map.fire(new t.Event(e,r?{originalEvent:r}:{}))},vn.prototype._drainInertiaBuffer=function(){for(var e=this._inertia,r=t.browser.now();e.length>0&&r-e[0][0]>160;)e.shift()};var mn=t.bezier(0,0,.3,1),yn=function(e,r){this._map=e,this._el=e.getCanvasContainer(),this._state=\\\"disabled\\\",this._clickTolerance=r.clickTolerance||1,t.bindAll([\\\"_onMove\\\",\\\"_onMouseUp\\\",\\\"_onTouchEnd\\\",\\\"_onBlur\\\",\\\"_onDragFrame\\\"],this)};yn.prototype.isEnabled=function(){return\\\"disabled\\\"!==this._state},yn.prototype.isActive=function(){return\\\"active\\\"===this._state},yn.prototype.enable=function(){this.isEnabled()||(this._el.classList.add(\\\"mapboxgl-touch-drag-pan\\\"),this._state=\\\"enabled\\\")},yn.prototype.disable=function(){if(this.isEnabled())switch(this._el.classList.remove(\\\"mapboxgl-touch-drag-pan\\\"),this._state){case\\\"active\\\":this._state=\\\"disabled\\\",this._unbind(),this._deactivate(),this._fireEvent(\\\"dragend\\\"),this._fireEvent(\\\"moveend\\\");break;case\\\"pending\\\":this._state=\\\"disabled\\\",this._unbind();break;default:this._state=\\\"disabled\\\"}},yn.prototype.onMouseDown=function(e){\\\"enabled\\\"===this._state&&(e.ctrlKey||0!==r.mouseButton(e)||(r.addEventListener(t.window.document,\\\"mousemove\\\",this._onMove,{capture:!0}),r.addEventListener(t.window.document,\\\"mouseup\\\",this._onMouseUp),this._start(e)))},yn.prototype.onTouchStart=function(e){\\\"enabled\\\"===this._state&&(e.touches.length>1||(r.addEventListener(t.window.document,\\\"touchmove\\\",this._onMove,{capture:!0,passive:!1}),r.addEventListener(t.window.document,\\\"touchend\\\",this._onTouchEnd),this._start(e)))},yn.prototype._start=function(e){t.window.addEventListener(\\\"blur\\\",this._onBlur),this._state=\\\"pending\\\",this._startPos=this._mouseDownPos=this._lastPos=r.mousePos(this._el,e),this._inertia=[[t.browser.now(),this._startPos]]},yn.prototype._onMove=function(e){e.preventDefault();var n=r.mousePos(this._el,e);this._lastPos.equals(n)||\\\"pending\\\"===this._state&&n.dist(this._mouseDownPos)<this._clickTolerance||(this._lastMoveEvent=e,this._lastPos=n,this._drainInertiaBuffer(),this._inertia.push([t.browser.now(),this._lastPos]),\\\"pending\\\"===this._state&&(this._state=\\\"active\\\",this._fireEvent(\\\"dragstart\\\",e),this._fireEvent(\\\"movestart\\\",e)),this._frameId||(this._frameId=this._map._requestRenderFrame(this._onDragFrame)))},yn.prototype._onDragFrame=function(){this._frameId=null;var t=this._lastMoveEvent;if(t){var e=this._map.transform;e.setLocationAtPoint(e.pointLocation(this._startPos),this._lastPos),this._fireEvent(\\\"drag\\\",t),this._fireEvent(\\\"move\\\",t),this._startPos=this._lastPos,delete this._lastMoveEvent}},yn.prototype._onMouseUp=function(t){if(0===r.mouseButton(t))switch(this._state){case\\\"active\\\":this._state=\\\"enabled\\\",r.suppressClick(),this._unbind(),this._deactivate(),this._inertialPan(t);break;case\\\"pending\\\":this._state=\\\"enabled\\\",this._unbind()}},yn.prototype._onTouchEnd=function(t){switch(this._state){case\\\"active\\\":this._state=\\\"enabled\\\",this._unbind(),this._deactivate(),this._inertialPan(t);break;case\\\"pending\\\":this._state=\\\"enabled\\\",this._unbind()}},yn.prototype._onBlur=function(t){switch(this._state){case\\\"active\\\":this._state=\\\"enabled\\\",this._unbind(),this._deactivate(),this._fireEvent(\\\"dragend\\\",t),this._fireEvent(\\\"moveend\\\",t);break;case\\\"pending\\\":this._state=\\\"enabled\\\",this._unbind()}},yn.prototype._unbind=function(){r.removeEventListener(t.window.document,\\\"touchmove\\\",this._onMove,{capture:!0,passive:!1}),r.removeEventListener(t.window.document,\\\"touchend\\\",this._onTouchEnd),r.removeEventListener(t.window.document,\\\"mousemove\\\",this._onMove,{capture:!0}),r.removeEventListener(t.window.document,\\\"mouseup\\\",this._onMouseUp),r.removeEventListener(t.window,\\\"blur\\\",this._onBlur)},yn.prototype._deactivate=function(){this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),delete this._lastMoveEvent,delete this._startPos,delete this._mouseDownPos,delete this._lastPos},yn.prototype._inertialPan=function(t){this._fireEvent(\\\"dragend\\\",t),this._drainInertiaBuffer();var e=this._inertia;if(e.length<2)this._fireEvent(\\\"moveend\\\",t);else{var r=e[e.length-1],n=e[0],i=r[1].sub(n[1]),a=(r[0]-n[0])/1e3;if(0===a||r[1].equals(n[1]))this._fireEvent(\\\"moveend\\\",t);else{var o=i.mult(.3/a),s=o.mag();s>1400&&(s=1400,o._unit()._mult(s));var l=s/750,c=o.mult(-l/2);this._map.panBy(c,{duration:1e3*l,easing:mn,noMoveStart:!0},{originalEvent:t})}}},yn.prototype._fireEvent=function(e,r){return this._map.fire(new t.Event(e,r?{originalEvent:r}:{}))},yn.prototype._drainInertiaBuffer=function(){for(var e=this._inertia,r=t.browser.now();e.length>0&&r-e[0][0]>160;)e.shift()};var xn=function(e){this._map=e,this._el=e.getCanvasContainer(),t.bindAll([\\\"_onKeyDown\\\"],this)};function bn(t){return t*(2-t)}xn.prototype.isEnabled=function(){return!!this._enabled},xn.prototype.enable=function(){this.isEnabled()||(this._el.addEventListener(\\\"keydown\\\",this._onKeyDown,!1),this._enabled=!0)},xn.prototype.disable=function(){this.isEnabled()&&(this._el.removeEventListener(\\\"keydown\\\",this._onKeyDown),this._enabled=!1)},xn.prototype._onKeyDown=function(t){if(!(t.altKey||t.ctrlKey||t.metaKey)){var e=0,r=0,n=0,i=0,a=0;switch(t.keyCode){case 61:case 107:case 171:case 187:e=1;break;case 189:case 109:case 173:e=-1;break;case 37:t.shiftKey?r=-1:(t.preventDefault(),i=-1);break;case 39:t.shiftKey?r=1:(t.preventDefault(),i=1);break;case 38:t.shiftKey?n=1:(t.preventDefault(),a=-1);break;case 40:t.shiftKey?n=-1:(a=1,t.preventDefault());break;default:return}var o=this._map,s=o.getZoom(),l={duration:300,delayEndEvents:500,easing:bn,zoom:e?Math.round(s)+e*(t.shiftKey?2:1):s,bearing:o.getBearing()+15*r,pitch:o.getPitch()+10*n,offset:[100*-i,100*-a],center:o.getCenter()};o.easeTo(l,{originalEvent:t})}};var _n=function(e){this._map=e,t.bindAll([\\\"_onDblClick\\\",\\\"_onZoomEnd\\\"],this)};_n.prototype.isEnabled=function(){return!!this._enabled},_n.prototype.isActive=function(){return!!this._active},_n.prototype.enable=function(){this.isEnabled()||(this._enabled=!0)},_n.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},_n.prototype.onTouchStart=function(t){var e=this;if(this.isEnabled()&&!(t.points.length>1))if(this._tapped){var r=t.points[0],n=this._tappedPoint;if(n&&n.dist(r)<=30){t.originalEvent.preventDefault();var i=function(){e._tapped&&e._zoom(t),e._map.off(\\\"touchcancel\\\",a),e._resetTapped()},a=function(){e._map.off(\\\"touchend\\\",i),e._resetTapped()};this._map.once(\\\"touchend\\\",i),this._map.once(\\\"touchcancel\\\",a)}else this._resetTapped()}else this._tappedPoint=t.points[0],this._tapped=setTimeout(function(){e._tapped=null,e._tappedPoint=null},300)},_n.prototype._resetTapped=function(){clearTimeout(this._tapped),this._tapped=null,this._tappedPoint=null},_n.prototype.onDblClick=function(t){this.isEnabled()&&(t.originalEvent.preventDefault(),this._zoom(t))},_n.prototype._zoom=function(t){this._active=!0,this._map.on(\\\"zoomend\\\",this._onZoomEnd),this._map.zoomTo(this._map.getZoom()+(t.originalEvent.shiftKey?-1:1),{around:t.lngLat},t)},_n.prototype._onZoomEnd=function(){this._active=!1,this._map.off(\\\"zoomend\\\",this._onZoomEnd)};var wn=t.bezier(0,0,.15,1),kn=function(e){this._map=e,this._el=e.getCanvasContainer(),t.bindAll([\\\"_onMove\\\",\\\"_onEnd\\\",\\\"_onTouchFrame\\\"],this)};kn.prototype.isEnabled=function(){return!!this._enabled},kn.prototype.enable=function(t){this.isEnabled()||(this._el.classList.add(\\\"mapboxgl-touch-zoom-rotate\\\"),this._enabled=!0,this._aroundCenter=!!t&&\\\"center\\\"===t.around)},kn.prototype.disable=function(){this.isEnabled()&&(this._el.classList.remove(\\\"mapboxgl-touch-zoom-rotate\\\"),this._enabled=!1)},kn.prototype.disableRotation=function(){this._rotationDisabled=!0},kn.prototype.enableRotation=function(){this._rotationDisabled=!1},kn.prototype.onStart=function(e){if(this.isEnabled()&&2===e.touches.length){var n=r.mousePos(this._el,e.touches[0]),i=r.mousePos(this._el,e.touches[1]),a=n.add(i).div(2);this._startVec=n.sub(i),this._startAround=this._map.transform.pointLocation(a),this._gestureIntent=void 0,this._inertia=[],r.addEventListener(t.window.document,\\\"touchmove\\\",this._onMove,{passive:!1}),r.addEventListener(t.window.document,\\\"touchend\\\",this._onEnd)}},kn.prototype._getTouchEventData=function(t){var e=r.mousePos(this._el,t.touches[0]),n=r.mousePos(this._el,t.touches[1]),i=e.sub(n);return{vec:i,center:e.add(n).div(2),scale:i.mag()/this._startVec.mag(),bearing:this._rotationDisabled?0:180*i.angleWith(this._startVec)/Math.PI}},kn.prototype._onMove=function(e){if(2===e.touches.length){var r=this._getTouchEventData(e),n=r.vec,i=r.scale,a=r.bearing;if(!this._gestureIntent){var o=this._rotationDisabled&&1!==i||Math.abs(1-i)>.15;Math.abs(a)>10?this._gestureIntent=\\\"rotate\\\":o&&(this._gestureIntent=\\\"zoom\\\"),this._gestureIntent&&(this._map.fire(new t.Event(this._gestureIntent+\\\"start\\\",{originalEvent:e})),this._map.fire(new t.Event(\\\"movestart\\\",{originalEvent:e})),this._startVec=n)}this._lastTouchEvent=e,this._frameId||(this._frameId=this._map._requestRenderFrame(this._onTouchFrame)),e.preventDefault()}},kn.prototype._onTouchFrame=function(){this._frameId=null;var e=this._gestureIntent;if(e){var r=this._map.transform;this._startScale||(this._startScale=r.scale,this._startBearing=r.bearing);var n=this._getTouchEventData(this._lastTouchEvent),i=n.center,a=n.bearing,o=n.scale,s=r.pointLocation(i),l=r.locationPoint(s);\\\"rotate\\\"===e&&(r.bearing=this._startBearing+a),r.zoom=r.scaleZoom(this._startScale*o),r.setLocationAtPoint(this._startAround,l),this._map.fire(new t.Event(e,{originalEvent:this._lastTouchEvent})),this._map.fire(new t.Event(\\\"move\\\",{originalEvent:this._lastTouchEvent})),this._drainInertiaBuffer(),this._inertia.push([t.browser.now(),o,i])}},kn.prototype._onEnd=function(e){r.removeEventListener(t.window.document,\\\"touchmove\\\",this._onMove,{passive:!1}),r.removeEventListener(t.window.document,\\\"touchend\\\",this._onEnd);var n=this._gestureIntent,i=this._startScale;if(this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),delete this._gestureIntent,delete this._startScale,delete this._startBearing,delete this._lastTouchEvent,n){this._map.fire(new t.Event(n+\\\"end\\\",{originalEvent:e})),this._drainInertiaBuffer();var a=this._inertia,o=this._map;if(a.length<2)o.snapToNorth({},{originalEvent:e});else{var s=a[a.length-1],l=a[0],c=o.transform.scaleZoom(i*s[1]),u=o.transform.scaleZoom(i*l[1]),h=c-u,f=(s[0]-l[0])/1e3,p=s[2];if(0!==f&&c!==u){var d=.15*h/f;Math.abs(d)>2.5&&(d=d>0?2.5:-2.5);var g=1e3*Math.abs(d/(12*.15)),v=c+d*g/2e3;v<0&&(v=0),o.easeTo({zoom:v,duration:g,easing:wn,around:this._aroundCenter?o.getCenter():o.unproject(p),noMoveStart:!0},{originalEvent:e})}else o.snapToNorth({},{originalEvent:e})}}},kn.prototype._drainInertiaBuffer=function(){for(var e=this._inertia,r=t.browser.now();e.length>2&&r-e[0][0]>160;)e.shift()};var Tn={scrollZoom:pn,boxZoom:dn,dragRotate:vn,dragPan:yn,keyboard:xn,doubleClickZoom:_n,touchZoomRotate:kn},An=function(e){function r(r,n){e.call(this),this._moving=!1,this._zooming=!1,this.transform=r,this._bearingSnap=n.bearingSnap,t.bindAll([\\\"_renderFrameCallback\\\"],this)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getCenter=function(){return new t.LngLat(this.transform.center.lng,this.transform.center.lat)},r.prototype.setCenter=function(t,e){return this.jumpTo({center:t},e)},r.prototype.panBy=function(e,r,n){return e=t.Point.convert(e).mult(-1),this.panTo(this.transform.center,t.extend({offset:e},r),n)},r.prototype.panTo=function(e,r,n){return this.easeTo(t.extend({center:e},r),n)},r.prototype.getZoom=function(){return this.transform.zoom},r.prototype.setZoom=function(t,e){return this.jumpTo({zoom:t},e),this},r.prototype.zoomTo=function(e,r,n){return this.easeTo(t.extend({zoom:e},r),n)},r.prototype.zoomIn=function(t,e){return this.zoomTo(this.getZoom()+1,t,e),this},r.prototype.zoomOut=function(t,e){return this.zoomTo(this.getZoom()-1,t,e),this},r.prototype.getBearing=function(){return this.transform.bearing},r.prototype.setBearing=function(t,e){return this.jumpTo({bearing:t},e),this},r.prototype.rotateTo=function(e,r,n){return this.easeTo(t.extend({bearing:e},r),n)},r.prototype.resetNorth=function(e,r){return this.rotateTo(0,t.extend({duration:1e3},e),r),this},r.prototype.snapToNorth=function(t,e){return Math.abs(this.getBearing())<this._bearingSnap?this.resetNorth(t,e):this},r.prototype.getPitch=function(){return this.transform.pitch},r.prototype.setPitch=function(t,e){return this.jumpTo({pitch:t},e),this},r.prototype.cameraForBounds=function(e,r){return e=t.LngLatBounds.convert(e),this._cameraForBoxAndBearing(e.getNorthWest(),e.getSouthEast(),0,r)},r.prototype._cameraForBoxAndBearing=function(e,r,n,i){if(\\\"number\\\"==typeof(i=t.extend({padding:{top:0,bottom:0,right:0,left:0},offset:[0,0],maxZoom:this.transform.maxZoom},i)).padding){var a=i.padding;i.padding={top:a,bottom:a,right:a,left:a}}if(t.deepEqual(Object.keys(i.padding).sort(function(t,e){return t<e?-1:t>e?1:0}),[\\\"bottom\\\",\\\"left\\\",\\\"right\\\",\\\"top\\\"])){var o=this.transform,s=o.project(t.LngLat.convert(e)),l=o.project(t.LngLat.convert(r)),c=s.rotate(-n*Math.PI/180),u=l.rotate(-n*Math.PI/180),h=new t.Point(Math.max(c.x,u.x),Math.max(c.y,u.y)),f=new t.Point(Math.min(c.x,u.x),Math.min(c.y,u.y)),p=h.sub(f),d=(o.width-i.padding.left-i.padding.right)/p.x,g=(o.height-i.padding.top-i.padding.bottom)/p.y;if(!(g<0||d<0)){var v=Math.min(o.scaleZoom(o.scale*Math.min(d,g)),i.maxZoom),m=t.Point.convert(i.offset),y=(i.padding.left-i.padding.right)/2,x=(i.padding.top-i.padding.bottom)/2,b=new t.Point(m.x+y,m.y+x).mult(o.scale/o.zoomScale(v));return{center:o.unproject(s.add(l).div(2).sub(b)),zoom:v,bearing:n}}t.warnOnce(\\\"Map cannot fit within canvas with the given bounds, padding, and/or offset.\\\")}else t.warnOnce(\\\"options.padding must be a positive number, or an Object with keys 'bottom', 'left', 'right', 'top'\\\")},r.prototype.fitBounds=function(t,e,r){return this._fitInternal(this.cameraForBounds(t,e),e,r)},r.prototype.fitScreenCoordinates=function(e,r,n,i,a){return this._fitInternal(this._cameraForBoxAndBearing(this.transform.pointLocation(t.Point.convert(e)),this.transform.pointLocation(t.Point.convert(r)),n,i),i,a)},r.prototype._fitInternal=function(e,r,n){return e?(r=t.extend(e,r)).linear?this.easeTo(r,n):this.flyTo(r,n):this},r.prototype.jumpTo=function(e,r){this.stop();var n=this.transform,i=!1,a=!1,o=!1;return\\\"zoom\\\"in e&&n.zoom!==+e.zoom&&(i=!0,n.zoom=+e.zoom),void 0!==e.center&&(n.center=t.LngLat.convert(e.center)),\\\"bearing\\\"in e&&n.bearing!==+e.bearing&&(a=!0,n.bearing=+e.bearing),\\\"pitch\\\"in e&&n.pitch!==+e.pitch&&(o=!0,n.pitch=+e.pitch),this.fire(new t.Event(\\\"movestart\\\",r)).fire(new t.Event(\\\"move\\\",r)),i&&this.fire(new t.Event(\\\"zoomstart\\\",r)).fire(new t.Event(\\\"zoom\\\",r)).fire(new t.Event(\\\"zoomend\\\",r)),a&&this.fire(new t.Event(\\\"rotatestart\\\",r)).fire(new t.Event(\\\"rotate\\\",r)).fire(new t.Event(\\\"rotateend\\\",r)),o&&this.fire(new t.Event(\\\"pitchstart\\\",r)).fire(new t.Event(\\\"pitch\\\",r)).fire(new t.Event(\\\"pitchend\\\",r)),this.fire(new t.Event(\\\"moveend\\\",r))},r.prototype.easeTo=function(e,r){var n=this;this.stop(),!1===(e=t.extend({offset:[0,0],duration:500,easing:t.ease},e)).animate&&(e.duration=0);var i=this.transform,a=this.getZoom(),o=this.getBearing(),s=this.getPitch(),l=\\\"zoom\\\"in e?+e.zoom:a,c=\\\"bearing\\\"in e?this._normalizeBearing(e.bearing,o):o,u=\\\"pitch\\\"in e?+e.pitch:s,h=i.centerPoint.add(t.Point.convert(e.offset)),f=i.pointLocation(h),p=t.LngLat.convert(e.center||f);this._normalizeCenter(p);var d,g,v=i.project(f),m=i.project(p).sub(v),y=i.zoomScale(l-a);return e.around&&(d=t.LngLat.convert(e.around),g=i.locationPoint(d)),this._zooming=l!==a,this._rotating=o!==c,this._pitching=u!==s,this._prepareEase(r,e.noMoveStart),clearTimeout(this._easeEndTimeoutID),this._ease(function(e){if(n._zooming&&(i.zoom=t.number(a,l,e)),n._rotating&&(i.bearing=t.number(o,c,e)),n._pitching&&(i.pitch=t.number(s,u,e)),d)i.setLocationAtPoint(d,g);else{var f=i.zoomScale(i.zoom-a),p=l>a?Math.min(2,y):Math.max(.5,y),x=Math.pow(p,1-e),b=i.unproject(v.add(m.mult(e*x)).mult(f));i.setLocationAtPoint(i.renderWorldCopies?b.wrap():b,h)}n._fireMoveEvents(r)},function(){e.delayEndEvents?n._easeEndTimeoutID=setTimeout(function(){return n._afterEase(r)},e.delayEndEvents):n._afterEase(r)},e),this},r.prototype._prepareEase=function(e,r){this._moving=!0,r||this.fire(new t.Event(\\\"movestart\\\",e)),this._zooming&&this.fire(new t.Event(\\\"zoomstart\\\",e)),this._rotating&&this.fire(new t.Event(\\\"rotatestart\\\",e)),this._pitching&&this.fire(new t.Event(\\\"pitchstart\\\",e))},r.prototype._fireMoveEvents=function(e){this.fire(new t.Event(\\\"move\\\",e)),this._zooming&&this.fire(new t.Event(\\\"zoom\\\",e)),this._rotating&&this.fire(new t.Event(\\\"rotate\\\",e)),this._pitching&&this.fire(new t.Event(\\\"pitch\\\",e))},r.prototype._afterEase=function(e){var r=this._zooming,n=this._rotating,i=this._pitching;this._moving=!1,this._zooming=!1,this._rotating=!1,this._pitching=!1,r&&this.fire(new t.Event(\\\"zoomend\\\",e)),n&&this.fire(new t.Event(\\\"rotateend\\\",e)),i&&this.fire(new t.Event(\\\"pitchend\\\",e)),this.fire(new t.Event(\\\"moveend\\\",e))},r.prototype.flyTo=function(e,r){var n=this;this.stop(),e=t.extend({offset:[0,0],speed:1.2,curve:1.42,easing:t.ease},e);var i=this.transform,a=this.getZoom(),o=this.getBearing(),s=this.getPitch(),l=\\\"zoom\\\"in e?t.clamp(+e.zoom,i.minZoom,i.maxZoom):a,c=\\\"bearing\\\"in e?this._normalizeBearing(e.bearing,o):o,u=\\\"pitch\\\"in e?+e.pitch:s,h=i.zoomScale(l-a),f=i.centerPoint.add(t.Point.convert(e.offset)),p=i.pointLocation(f),d=t.LngLat.convert(e.center||p);this._normalizeCenter(d);var g=i.project(p),v=i.project(d).sub(g),m=e.curve,y=Math.max(i.width,i.height),x=y/h,b=v.mag();if(\\\"minZoom\\\"in e){var _=t.clamp(Math.min(e.minZoom,a,l),i.minZoom,i.maxZoom),w=y/i.zoomScale(_-a);m=Math.sqrt(w/b*2)}var k=m*m;function T(t){var e=(x*x-y*y+(t?-1:1)*k*k*b*b)/(2*(t?x:y)*k*b);return Math.log(Math.sqrt(e*e+1)-e)}function A(t){return(Math.exp(t)-Math.exp(-t))/2}function M(t){return(Math.exp(t)+Math.exp(-t))/2}var S=T(0),E=function(t){return M(S)/M(S+m*t)},C=function(t){return y*((M(S)*(A(e=S+m*t)/M(e))-A(S))/k)/b;var e},L=(T(1)-S)/m;if(Math.abs(b)<1e-6||!isFinite(L)){if(Math.abs(y-x)<1e-6)return this.easeTo(e,r);var P=x<y?-1:1;L=Math.abs(Math.log(x/y))/m,C=function(){return 0},E=function(t){return Math.exp(P*m*t)}}if(\\\"duration\\\"in e)e.duration=+e.duration;else{var O=\\\"screenSpeed\\\"in e?+e.screenSpeed/m:+e.speed;e.duration=1e3*L/O}return e.maxDuration&&e.duration>e.maxDuration&&(e.duration=0),this._zooming=!0,this._rotating=o!==c,this._pitching=u!==s,this._prepareEase(r,!1),this._ease(function(e){var h=e*L,p=1/E(h);i.zoom=1===e?l:a+i.scaleZoom(p),n._rotating&&(i.bearing=t.number(o,c,e)),n._pitching&&(i.pitch=t.number(s,u,e));var m=1===e?d:i.unproject(g.add(v.mult(C(h))).mult(p));i.setLocationAtPoint(i.renderWorldCopies?m.wrap():m,f),n._fireMoveEvents(r)},function(){return n._afterEase(r)},e),this},r.prototype.isEasing=function(){return!!this._easeFrameId},r.prototype.stop=function(){if(this._easeFrameId&&(this._cancelRenderFrame(this._easeFrameId),delete this._easeFrameId,delete this._onEaseFrame),this._onEaseEnd){var t=this._onEaseEnd;delete this._onEaseEnd,t.call(this)}return this},r.prototype._ease=function(e,r,n){!1===n.animate||0===n.duration?(e(1),r()):(this._easeStart=t.browser.now(),this._easeOptions=n,this._onEaseFrame=e,this._onEaseEnd=r,this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback))},r.prototype._renderFrameCallback=function(){var e=Math.min((t.browser.now()-this._easeStart)/this._easeOptions.duration,1);this._onEaseFrame(this._easeOptions.easing(e)),e<1?this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback):this.stop()},r.prototype._normalizeBearing=function(e,r){e=t.wrap(e,-180,180);var n=Math.abs(e-r);return Math.abs(e-360-r)<n&&(e-=360),Math.abs(e+360-r)<n&&(e+=360),e},r.prototype._normalizeCenter=function(t){var e=this.transform;if(e.renderWorldCopies&&!e.lngRange){var r=t.lng-e.center.lng;t.lng+=r>180?-360:r<-180?360:0}},r}(t.Evented),Mn=function(e){void 0===e&&(e={}),this.options=e,t.bindAll([\\\"_updateEditLink\\\",\\\"_updateData\\\",\\\"_updateCompact\\\"],this)};Mn.prototype.getDefaultPosition=function(){return\\\"bottom-right\\\"},Mn.prototype.onAdd=function(t){var e=this.options&&this.options.compact;return this._map=t,this._container=r.create(\\\"div\\\",\\\"mapboxgl-ctrl mapboxgl-ctrl-attrib\\\"),this._innerContainer=r.create(\\\"div\\\",\\\"mapboxgl-ctrl-attrib-inner\\\",this._container),e&&this._container.classList.add(\\\"mapboxgl-compact\\\"),this._updateAttributions(),this._updateEditLink(),this._map.on(\\\"styledata\\\",this._updateData),this._map.on(\\\"sourcedata\\\",this._updateData),this._map.on(\\\"moveend\\\",this._updateEditLink),void 0===e&&(this._map.on(\\\"resize\\\",this._updateCompact),this._updateCompact()),this._container},Mn.prototype.onRemove=function(){r.remove(this._container),this._map.off(\\\"styledata\\\",this._updateData),this._map.off(\\\"sourcedata\\\",this._updateData),this._map.off(\\\"moveend\\\",this._updateEditLink),this._map.off(\\\"resize\\\",this._updateCompact),this._map=void 0},Mn.prototype._updateEditLink=function(){var e=this._editLink;e||(e=this._editLink=this._container.querySelector(\\\".mapbox-improve-map\\\"));var r=[{key:\\\"owner\\\",value:this.styleOwner},{key:\\\"id\\\",value:this.styleId},{key:\\\"access_token\\\",value:t.config.ACCESS_TOKEN}];if(e){var n=r.reduce(function(t,e,n){return e.value&&(t+=e.key+\\\"=\\\"+e.value+(n<r.length-1?\\\"&\\\":\\\"\\\")),t},\\\"?\\\");e.href=t.config.FEEDBACK_URL+\\\"/\\\"+n+(this._map._hash?this._map._hash.getHashString(!0):\\\"\\\"),e.rel=\\\"noopener nofollow\\\"}},Mn.prototype._updateData=function(t){!t||\\\"metadata\\\"!==t.sourceDataType&&\\\"style\\\"!==t.dataType||(this._updateAttributions(),this._updateEditLink())},Mn.prototype._updateAttributions=function(){if(this._map.style){var t=[];if(this.options.customAttribution&&(Array.isArray(this.options.customAttribution)?t=t.concat(this.options.customAttribution.map(function(t){return\\\"string\\\"!=typeof t?\\\"\\\":t})):\\\"string\\\"==typeof this.options.customAttribution&&t.push(this.options.customAttribution)),this._map.style.stylesheet){var e=this._map.style.stylesheet;this.styleOwner=e.owner,this.styleId=e.id}var r=this._map.style.sourceCaches;for(var n in r){var i=r[n];if(i.used){var a=i.getSource();a.attribution&&t.indexOf(a.attribution)<0&&t.push(a.attribution)}}t.sort(function(t,e){return t.length-e.length});var o=(t=t.filter(function(e,r){for(var n=r+1;n<t.length;n++)if(t[n].indexOf(e)>=0)return!1;return!0})).join(\\\" | \\\");o!==this._attribHTML&&(this._attribHTML=o,t.length?(this._innerContainer.innerHTML=o,this._container.classList.remove(\\\"mapboxgl-attrib-empty\\\")):this._container.classList.add(\\\"mapboxgl-attrib-empty\\\"),this._editLink=null)}},Mn.prototype._updateCompact=function(){this._map.getCanvasContainer().offsetWidth<=640?this._container.classList.add(\\\"mapboxgl-compact\\\"):this._container.classList.remove(\\\"mapboxgl-compact\\\")};var Sn=function(){t.bindAll([\\\"_updateLogo\\\"],this),t.bindAll([\\\"_updateCompact\\\"],this)};Sn.prototype.onAdd=function(t){this._map=t,this._container=r.create(\\\"div\\\",\\\"mapboxgl-ctrl\\\");var e=r.create(\\\"a\\\",\\\"mapboxgl-ctrl-logo\\\");return e.target=\\\"_blank\\\",e.rel=\\\"noopener nofollow\\\",e.href=\\\"https://www.mapbox.com/\\\",e.setAttribute(\\\"aria-label\\\",\\\"Mapbox logo\\\"),e.setAttribute(\\\"rel\\\",\\\"noopener nofollow\\\"),this._container.appendChild(e),this._container.style.display=\\\"none\\\",this._map.on(\\\"sourcedata\\\",this._updateLogo),this._updateLogo(),this._map.on(\\\"resize\\\",this._updateCompact),this._updateCompact(),this._container},Sn.prototype.onRemove=function(){r.remove(this._container),this._map.off(\\\"sourcedata\\\",this._updateLogo),this._map.off(\\\"resize\\\",this._updateCompact)},Sn.prototype.getDefaultPosition=function(){return\\\"bottom-left\\\"},Sn.prototype._updateLogo=function(t){t&&\\\"metadata\\\"!==t.sourceDataType||(this._container.style.display=this._logoRequired()?\\\"block\\\":\\\"none\\\")},Sn.prototype._logoRequired=function(){if(this._map.style){var t=this._map.style.sourceCaches;for(var e in t)if(t[e].getSource().mapbox_logo)return!0;return!1}},Sn.prototype._updateCompact=function(){var t=this._container.children;if(t.length){var e=t[0];this._map.getCanvasContainer().offsetWidth<250?e.classList.add(\\\"mapboxgl-compact\\\"):e.classList.remove(\\\"mapboxgl-compact\\\")}};var En=function(){this._queue=[],this._id=0,this._cleared=!1,this._currentlyRunning=!1};En.prototype.add=function(t){var e=++this._id;return this._queue.push({callback:t,id:e,cancelled:!1}),e},En.prototype.remove=function(t){for(var e=this._currentlyRunning,r=0,n=e?this._queue.concat(e):this._queue;r<n.length;r+=1){var i=n[r];if(i.id===t)return void(i.cancelled=!0)}},En.prototype.run=function(){var t=this._currentlyRunning=this._queue;this._queue=[];for(var e=0,r=t;e<r.length;e+=1){var n=r[e];if(!n.cancelled&&(n.callback(),this._cleared))break}this._cleared=!1,this._currentlyRunning=!1},En.prototype.clear=function(){this._currentlyRunning&&(this._cleared=!0),this._queue=[]};var Cn=t.window.HTMLImageElement,Ln=t.window.HTMLElement,Pn={center:[0,0],zoom:0,bearing:0,pitch:0,minZoom:0,maxZoom:22,interactive:!0,scrollZoom:!0,boxZoom:!0,dragRotate:!0,dragPan:!0,keyboard:!0,doubleClickZoom:!0,touchZoomRotate:!0,bearingSnap:7,clickTolerance:3,hash:!1,attributionControl:!0,failIfMajorPerformanceCaveat:!1,preserveDrawingBuffer:!1,trackResize:!0,renderWorldCopies:!0,refreshExpiredTiles:!0,maxTileCacheSize:null,localIdeographFontFamily:\\\"sans-serif\\\",transformRequest:null,fadeDuration:300,crossSourceCollisions:!0},On=function(n){function i(e){var i=this;if(null!=(e=t.extend({},Pn,e)).minZoom&&null!=e.maxZoom&&e.minZoom>e.maxZoom)throw new Error(\\\"maxZoom must be greater than minZoom\\\");var a=new sn(e.minZoom,e.maxZoom,e.renderWorldCopies);if(n.call(this,a,e),this._interactive=e.interactive,this._maxTileCacheSize=e.maxTileCacheSize,this._failIfMajorPerformanceCaveat=e.failIfMajorPerformanceCaveat,this._preserveDrawingBuffer=e.preserveDrawingBuffer,this._antialias=e.antialias,this._trackResize=e.trackResize,this._bearingSnap=e.bearingSnap,this._refreshExpiredTiles=e.refreshExpiredTiles,this._fadeDuration=e.fadeDuration,this._crossSourceCollisions=e.crossSourceCollisions,this._crossFadingFactor=1,this._collectResourceTiming=e.collectResourceTiming,this._renderTaskQueue=new En,this._controls=[],this._mapId=t.uniqueId(),this._requestManager=new t.RequestManager(e.transformRequest),\\\"string\\\"==typeof e.container){if(this._container=t.window.document.getElementById(e.container),!this._container)throw new Error(\\\"Container '\\\"+e.container+\\\"' not found.\\\")}else{if(!(e.container instanceof Ln))throw new Error(\\\"Invalid type: 'container' must be a String or HTMLElement.\\\");this._container=e.container}if(e.maxBounds&&this.setMaxBounds(e.maxBounds),t.bindAll([\\\"_onWindowOnline\\\",\\\"_onWindowResize\\\",\\\"_contextLost\\\",\\\"_contextRestored\\\"],this),this._setupContainer(),this._setupPainter(),void 0===this.painter)throw new Error(\\\"Failed to initialize WebGL.\\\");this.on(\\\"move\\\",function(){return i._update(!1)}),this.on(\\\"moveend\\\",function(){return i._update(!1)}),this.on(\\\"zoom\\\",function(){return i._update(!0)}),void 0!==t.window&&(t.window.addEventListener(\\\"online\\\",this._onWindowOnline,!1),t.window.addEventListener(\\\"resize\\\",this._onWindowResize,!1)),function(t,e){var n=t.getCanvasContainer(),i=null,a=!1,o=null;for(var s in Tn)t[s]=new Tn[s](t,e),e.interactive&&e[s]&&t[s].enable(e[s]);r.addEventListener(n,\\\"mouseout\\\",function(e){t.fire(new un(\\\"mouseout\\\",t,e))}),r.addEventListener(n,\\\"mousedown\\\",function(i){a=!0,o=r.mousePos(n,i);var s=new un(\\\"mousedown\\\",t,i);t.fire(s),s.defaultPrevented||(e.interactive&&!t.doubleClickZoom.isActive()&&t.stop(),t.boxZoom.onMouseDown(i),t.boxZoom.isActive()||t.dragPan.isActive()||t.dragRotate.onMouseDown(i),t.boxZoom.isActive()||t.dragRotate.isActive()||t.dragPan.onMouseDown(i))}),r.addEventListener(n,\\\"mouseup\\\",function(e){var r=t.dragRotate.isActive();i&&!r&&t.fire(new un(\\\"contextmenu\\\",t,i)),i=null,a=!1,t.fire(new un(\\\"mouseup\\\",t,e))}),r.addEventListener(n,\\\"mousemove\\\",function(e){if(!t.dragPan.isActive()&&!t.dragRotate.isActive()){for(var r=e.target;r&&r!==n;)r=r.parentNode;r===n&&t.fire(new un(\\\"mousemove\\\",t,e))}}),r.addEventListener(n,\\\"mouseover\\\",function(e){for(var r=e.target;r&&r!==n;)r=r.parentNode;r===n&&t.fire(new un(\\\"mouseover\\\",t,e))}),r.addEventListener(n,\\\"touchstart\\\",function(r){var n=new hn(\\\"touchstart\\\",t,r);t.fire(n),n.defaultPrevented||(e.interactive&&t.stop(),t.boxZoom.isActive()||t.dragRotate.isActive()||t.dragPan.onTouchStart(r),t.touchZoomRotate.onStart(r),t.doubleClickZoom.onTouchStart(n))},{passive:!1}),r.addEventListener(n,\\\"touchmove\\\",function(e){t.fire(new hn(\\\"touchmove\\\",t,e))},{passive:!1}),r.addEventListener(n,\\\"touchend\\\",function(e){t.fire(new hn(\\\"touchend\\\",t,e))}),r.addEventListener(n,\\\"touchcancel\\\",function(e){t.fire(new hn(\\\"touchcancel\\\",t,e))}),r.addEventListener(n,\\\"click\\\",function(i){var a=r.mousePos(n,i);(a.equals(o)||a.dist(o)<e.clickTolerance)&&t.fire(new un(\\\"click\\\",t,i))}),r.addEventListener(n,\\\"dblclick\\\",function(e){var r=new un(\\\"dblclick\\\",t,e);t.fire(r),r.defaultPrevented||t.doubleClickZoom.onDblClick(r)}),r.addEventListener(n,\\\"contextmenu\\\",function(e){var r=t.dragRotate.isActive();a||r?a&&(i=e):t.fire(new un(\\\"contextmenu\\\",t,e)),(t.dragRotate.isEnabled()||t.listens(\\\"contextmenu\\\"))&&e.preventDefault()}),r.addEventListener(n,\\\"wheel\\\",function(r){e.interactive&&t.stop();var n=new fn(\\\"wheel\\\",t,r);t.fire(n),n.defaultPrevented||t.scrollZoom.onWheel(r)},{passive:!1})}(this,e),this._hash=e.hash&&(new cn).addTo(this),this._hash&&this._hash._onHashChange()||(this.jumpTo({center:e.center,zoom:e.zoom,bearing:e.bearing,pitch:e.pitch}),e.bounds&&(this.resize(),this.fitBounds(e.bounds,t.extend({},e.fitBoundsOptions,{duration:0})))),this.resize(),this._localIdeographFontFamily=e.localIdeographFontFamily,e.style&&this.setStyle(e.style,{localIdeographFontFamily:e.localIdeographFontFamily}),e.attributionControl&&this.addControl(new Mn({customAttribution:e.customAttribution})),this.addControl(new Sn,e.logoPosition),this.on(\\\"style.load\\\",function(){i.transform.unmodified&&i.jumpTo(i.style.stylesheet)}),this.on(\\\"data\\\",function(e){i._update(\\\"style\\\"===e.dataType),i.fire(new t.Event(e.dataType+\\\"data\\\",e))}),this.on(\\\"dataloading\\\",function(e){i.fire(new t.Event(e.dataType+\\\"dataloading\\\",e))})}n&&(i.__proto__=n),i.prototype=Object.create(n&&n.prototype),i.prototype.constructor=i;var a={showTileBoundaries:{configurable:!0},showCollisionBoxes:{configurable:!0},showOverdrawInspector:{configurable:!0},repaint:{configurable:!0},vertices:{configurable:!0}};return i.prototype._getMapId=function(){return this._mapId},i.prototype.addControl=function(e,r){if(void 0===r&&e.getDefaultPosition&&(r=e.getDefaultPosition()),void 0===r&&(r=\\\"top-right\\\"),!e||!e.onAdd)return this.fire(new t.ErrorEvent(new Error(\\\"Invalid argument to map.addControl(). Argument must be a control with onAdd and onRemove methods.\\\")));var n=e.onAdd(this);this._controls.push(e);var i=this._controlPositions[r];return-1!==r.indexOf(\\\"bottom\\\")?i.insertBefore(n,i.firstChild):i.appendChild(n),this},i.prototype.removeControl=function(e){if(!e||!e.onRemove)return this.fire(new t.ErrorEvent(new Error(\\\"Invalid argument to map.removeControl(). Argument must be a control with onAdd and onRemove methods.\\\")));var r=this._controls.indexOf(e);return r>-1&&this._controls.splice(r,1),e.onRemove(this),this},i.prototype.resize=function(e){var r=this._containerDimensions(),n=r[0],i=r[1];return this._resizeCanvas(n,i),this.transform.resize(n,i),this.painter.resize(n,i),this.fire(new t.Event(\\\"movestart\\\",e)).fire(new t.Event(\\\"move\\\",e)).fire(new t.Event(\\\"resize\\\",e)).fire(new t.Event(\\\"moveend\\\",e)),this},i.prototype.getBounds=function(){return this.transform.getBounds()},i.prototype.getMaxBounds=function(){return this.transform.getMaxBounds()},i.prototype.setMaxBounds=function(e){return this.transform.setMaxBounds(t.LngLatBounds.convert(e)),this._update()},i.prototype.setMinZoom=function(t){if((t=null==t?0:t)>=0&&t<=this.transform.maxZoom)return this.transform.minZoom=t,this._update(),this.getZoom()<t&&this.setZoom(t),this;throw new Error(\\\"minZoom must be between 0 and the current maxZoom, inclusive\\\")},i.prototype.getMinZoom=function(){return this.transform.minZoom},i.prototype.setMaxZoom=function(t){if((t=null==t?22:t)>=this.transform.minZoom)return this.transform.maxZoom=t,this._update(),this.getZoom()>t&&this.setZoom(t),this;throw new Error(\\\"maxZoom must be greater than the current minZoom\\\")},i.prototype.getRenderWorldCopies=function(){return this.transform.renderWorldCopies},i.prototype.setRenderWorldCopies=function(t){return this.transform.renderWorldCopies=t,this._update()},i.prototype.getMaxZoom=function(){return this.transform.maxZoom},i.prototype.project=function(e){return this.transform.locationPoint(t.LngLat.convert(e))},i.prototype.unproject=function(e){return this.transform.pointLocation(t.Point.convert(e))},i.prototype.isMoving=function(){return this._moving||this.dragPan.isActive()||this.dragRotate.isActive()||this.scrollZoom.isActive()},i.prototype.isZooming=function(){return this._zooming||this.scrollZoom.isZooming()},i.prototype.isRotating=function(){return this._rotating||this.dragRotate.isActive()},i.prototype.on=function(t,e,r){var i=this;if(void 0===r)return n.prototype.on.call(this,t,e);var a=function(){var n;if(\\\"mouseenter\\\"===t||\\\"mouseover\\\"===t){var a=!1;return{layer:e,listener:r,delegates:{mousemove:function(n){var o=i.getLayer(e)?i.queryRenderedFeatures(n.point,{layers:[e]}):[];o.length?a||(a=!0,r.call(i,new un(t,i,n.originalEvent,{features:o}))):a=!1},mouseout:function(){a=!1}}}}if(\\\"mouseleave\\\"===t||\\\"mouseout\\\"===t){var o=!1;return{layer:e,listener:r,delegates:{mousemove:function(n){(i.getLayer(e)?i.queryRenderedFeatures(n.point,{layers:[e]}):[]).length?o=!0:o&&(o=!1,r.call(i,new un(t,i,n.originalEvent)))},mouseout:function(e){o&&(o=!1,r.call(i,new un(t,i,e.originalEvent)))}}}}return{layer:e,listener:r,delegates:(n={},n[t]=function(t){var n=i.getLayer(e)?i.queryRenderedFeatures(t.point,{layers:[e]}):[];n.length&&(t.features=n,r.call(i,t),delete t.features)},n)}}();for(var o in this._delegatedListeners=this._delegatedListeners||{},this._delegatedListeners[t]=this._delegatedListeners[t]||[],this._delegatedListeners[t].push(a),a.delegates)this.on(o,a.delegates[o]);return this},i.prototype.off=function(t,e,r){if(void 0===r)return n.prototype.off.call(this,t,e);if(this._delegatedListeners&&this._delegatedListeners[t])for(var i=this._delegatedListeners[t],a=0;a<i.length;a++){var o=i[a];if(o.layer===e&&o.listener===r){for(var s in o.delegates)this.off(s,o.delegates[s]);return i.splice(a,1),this}}return this},i.prototype.queryRenderedFeatures=function(e,r){if(!this.style)return[];var n;if(void 0!==r||void 0===e||e instanceof t.Point||Array.isArray(e)||(r=e,e=void 0),r=r||{},(e=e||[[0,0],[this.transform.width,this.transform.height]])instanceof t.Point||\\\"number\\\"==typeof e[0])n=[t.Point.convert(e)];else{var i=t.Point.convert(e[0]),a=t.Point.convert(e[1]);n=[i,new t.Point(a.x,i.y),a,new t.Point(i.x,a.y),i]}return this.style.queryRenderedFeatures(n,r,this.transform)},i.prototype.querySourceFeatures=function(t,e){return this.style.querySourceFeatures(t,e)},i.prototype.setStyle=function(e,r){return!1!==(r=t.extend({},{localIdeographFontFamily:Pn.localIdeographFontFamily},r)).diff&&r.localIdeographFontFamily===this._localIdeographFontFamily&&this.style&&e?(this._diffStyle(e,r),this):(this._localIdeographFontFamily=r.localIdeographFontFamily,this._updateStyle(e,r))},i.prototype._updateStyle=function(t,e){return this.style&&(this.style.setEventedParent(null),this.style._remove()),t?(this.style=new De(this,e||{}),this.style.setEventedParent(this,{style:this.style}),\\\"string\\\"==typeof t?this.style.loadURL(t):this.style.loadJSON(t),this):(delete this.style,this)},i.prototype._diffStyle=function(e,r){var n=this;if(\\\"string\\\"==typeof e){var i=this._requestManager.normalizeStyleURL(e),a=this._requestManager.transformRequest(i,t.ResourceType.Style);t.getJSON(a,function(e,i){e?n.fire(new t.ErrorEvent(e)):i&&n._updateDiff(i,r)})}else\\\"object\\\"==typeof e&&this._updateDiff(e,r)},i.prototype._updateDiff=function(e,r){try{this.style.setState(e)&&this._update(!0)}catch(n){t.warnOnce(\\\"Unable to perform style diff: \\\"+(n.message||n.error||n)+\\\".  Rebuilding the style from scratch.\\\"),this._updateStyle(e,r)}},i.prototype.getStyle=function(){if(this.style)return this.style.serialize()},i.prototype.isStyleLoaded=function(){return this.style?this.style.loaded():t.warnOnce(\\\"There is no style added to the map.\\\")},i.prototype.addSource=function(t,e){return this.style.addSource(t,e),this._update(!0)},i.prototype.isSourceLoaded=function(e){var r=this.style&&this.style.sourceCaches[e];if(void 0!==r)return r.loaded();this.fire(new t.ErrorEvent(new Error(\\\"There is no source with ID '\\\"+e+\\\"'\\\")))},i.prototype.areTilesLoaded=function(){var t=this.style&&this.style.sourceCaches;for(var e in t){var r=t[e]._tiles;for(var n in r){var i=r[n];if(\\\"loaded\\\"!==i.state&&\\\"errored\\\"!==i.state)return!1}}return!0},i.prototype.addSourceType=function(t,e,r){return this.style.addSourceType(t,e,r)},i.prototype.removeSource=function(t){return this.style.removeSource(t),this._update(!0)},i.prototype.getSource=function(t){return this.style.getSource(t)},i.prototype.addImage=function(e,r,n){void 0===n&&(n={});var i=n.pixelRatio;void 0===i&&(i=1);var a=n.sdf;if(void 0===a&&(a=!1),r instanceof Cn){var o=t.browser.getImageData(r),s=o.width,l=o.height,c=o.data;this.style.addImage(e,{data:new t.RGBAImage({width:s,height:l},c),pixelRatio:i,sdf:a,version:0})}else{if(void 0===r.width||void 0===r.height)return this.fire(new t.ErrorEvent(new Error(\\\"Invalid arguments to map.addImage(). The second argument must be an `HTMLImageElement`, `ImageData`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`\\\")));var u=r.width,h=r.height,f=r.data,p=r;this.style.addImage(e,{data:new t.RGBAImage({width:u,height:h},new Uint8Array(f)),pixelRatio:i,sdf:a,version:0,userImage:p}),p.onAdd&&p.onAdd(this,e)}},i.prototype.updateImage=function(e,r){var n=this.style.getImage(e);if(!n)return this.fire(new t.ErrorEvent(new Error(\\\"The map has no image with that id. If you are adding a new image use `map.addImage(...)` instead.\\\")));var i=r instanceof Cn?t.browser.getImageData(r):r,a=i.width,o=i.height,s=i.data;if(void 0===a||void 0===o)return this.fire(new t.ErrorEvent(new Error(\\\"Invalid arguments to map.updateImage(). The second argument must be an `HTMLImageElement`, `ImageData`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`\\\")));if(a!==n.data.width||o!==n.data.height)return this.fire(new t.ErrorEvent(new Error(\\\"The width and height of the updated image must be that same as the previous version of the image\\\")));var l=!(r instanceof Cn);n.data.replace(s,l),this.style.updateImage(e,n)},i.prototype.hasImage=function(e){return e?!!this.style.getImage(e):(this.fire(new t.ErrorEvent(new Error(\\\"Missing required image id\\\"))),!1)},i.prototype.removeImage=function(t){this.style.removeImage(t)},i.prototype.loadImage=function(e,r){t.getImage(this._requestManager.transformRequest(e,t.ResourceType.Image),r)},i.prototype.listImages=function(){return this.style.listImages()},i.prototype.addLayer=function(t,e){return this.style.addLayer(t,e),this._update(!0)},i.prototype.moveLayer=function(t,e){return this.style.moveLayer(t,e),this._update(!0)},i.prototype.removeLayer=function(t){return this.style.removeLayer(t),this._update(!0)},i.prototype.getLayer=function(t){return this.style.getLayer(t)},i.prototype.setFilter=function(t,e,r){return void 0===r&&(r={}),this.style.setFilter(t,e,r),this._update(!0)},i.prototype.setLayerZoomRange=function(t,e,r){return this.style.setLayerZoomRange(t,e,r),this._update(!0)},i.prototype.getFilter=function(t){return this.style.getFilter(t)},i.prototype.setPaintProperty=function(t,e,r,n){return void 0===n&&(n={}),this.style.setPaintProperty(t,e,r,n),this._update(!0)},i.prototype.getPaintProperty=function(t,e){return this.style.getPaintProperty(t,e)},i.prototype.setLayoutProperty=function(t,e,r,n){return void 0===n&&(n={}),this.style.setLayoutProperty(t,e,r,n),this._update(!0)},i.prototype.getLayoutProperty=function(t,e){return this.style.getLayoutProperty(t,e)},i.prototype.setLight=function(t,e){return void 0===e&&(e={}),this.style.setLight(t,e),this._update(!0)},i.prototype.getLight=function(){return this.style.getLight()},i.prototype.setFeatureState=function(t,e){return this.style.setFeatureState(t,e),this._update()},i.prototype.removeFeatureState=function(t,e){return this.style.removeFeatureState(t,e),this._update()},i.prototype.getFeatureState=function(t){return this.style.getFeatureState(t)},i.prototype.getContainer=function(){return this._container},i.prototype.getCanvasContainer=function(){return this._canvasContainer},i.prototype.getCanvas=function(){return this._canvas},i.prototype._containerDimensions=function(){var t=0,e=0;return this._container&&(t=this._container.clientWidth||400,e=this._container.clientHeight||300),[t,e]},i.prototype._detectMissingCSS=function(){\\\"rgb(250, 128, 114)\\\"!==t.window.getComputedStyle(this._missingCSSCanary).getPropertyValue(\\\"background-color\\\")&&t.warnOnce(\\\"This page appears to be missing CSS declarations for Mapbox GL JS, which may cause the map to display incorrectly. Please ensure your page includes mapbox-gl.css, as described in https://www.mapbox.com/mapbox-gl-js/api/.\\\")},i.prototype._setupContainer=function(){var t=this._container;t.classList.add(\\\"mapboxgl-map\\\"),(this._missingCSSCanary=r.create(\\\"div\\\",\\\"mapboxgl-canary\\\",t)).style.visibility=\\\"hidden\\\",this._detectMissingCSS();var e=this._canvasContainer=r.create(\\\"div\\\",\\\"mapboxgl-canvas-container\\\",t);this._interactive&&e.classList.add(\\\"mapboxgl-interactive\\\"),this._canvas=r.create(\\\"canvas\\\",\\\"mapboxgl-canvas\\\",e),this._canvas.style.position=\\\"absolute\\\",this._canvas.addEventListener(\\\"webglcontextlost\\\",this._contextLost,!1),this._canvas.addEventListener(\\\"webglcontextrestored\\\",this._contextRestored,!1),this._canvas.setAttribute(\\\"tabindex\\\",\\\"0\\\"),this._canvas.setAttribute(\\\"aria-label\\\",\\\"Map\\\");var n=this._containerDimensions();this._resizeCanvas(n[0],n[1]);var i=this._controlContainer=r.create(\\\"div\\\",\\\"mapboxgl-control-container\\\",t),a=this._controlPositions={};[\\\"top-left\\\",\\\"top-right\\\",\\\"bottom-left\\\",\\\"bottom-right\\\"].forEach(function(t){a[t]=r.create(\\\"div\\\",\\\"mapboxgl-ctrl-\\\"+t,i)})},i.prototype._resizeCanvas=function(e,r){var n=t.window.devicePixelRatio||1;this._canvas.width=n*e,this._canvas.height=n*r,this._canvas.style.width=e+\\\"px\\\",this._canvas.style.height=r+\\\"px\\\"},i.prototype._setupPainter=function(){var r=t.extend({},e.webGLContextAttributes,{failIfMajorPerformanceCaveat:this._failIfMajorPerformanceCaveat,preserveDrawingBuffer:this._preserveDrawingBuffer,antialias:this._antialias||!1}),n=this._canvas.getContext(\\\"webgl\\\",r)||this._canvas.getContext(\\\"experimental-webgl\\\",r);n?(this.painter=new rn(n,this.transform),t.webpSupported.testSupport(n)):this.fire(new t.ErrorEvent(new Error(\\\"Failed to initialize WebGL\\\")))},i.prototype._contextLost=function(e){e.preventDefault(),this._frame&&(this._frame.cancel(),this._frame=null),this.fire(new t.Event(\\\"webglcontextlost\\\",{originalEvent:e}))},i.prototype._contextRestored=function(e){this._setupPainter(),this.resize(),this._update(),this.fire(new t.Event(\\\"webglcontextrestored\\\",{originalEvent:e}))},i.prototype.loaded=function(){return!this._styleDirty&&!this._sourcesDirty&&!!this.style&&this.style.loaded()},i.prototype._update=function(t){return this.style?(this._styleDirty=this._styleDirty||t,this._sourcesDirty=!0,this.triggerRepaint(),this):this},i.prototype._requestRenderFrame=function(t){return this._update(),this._renderTaskQueue.add(t)},i.prototype._cancelRenderFrame=function(t){this._renderTaskQueue.remove(t)},i.prototype._render=function(){this.painter.context.setDirty(),this.painter.setBaseState(),this._renderTaskQueue.run();var e=!1;if(this.style&&this._styleDirty){this._styleDirty=!1;var r=this.transform.zoom,n=t.browser.now();this.style.zoomHistory.update(r,n);var i=new t.EvaluationParameters(r,{now:n,fadeDuration:this._fadeDuration,zoomHistory:this.style.zoomHistory,transition:this.style.getTransition()}),a=i.crossFadingFactor();1===a&&a===this._crossFadingFactor||(e=!0,this._crossFadingFactor=a),this.style.update(i)}return this.style&&this._sourcesDirty&&(this._sourcesDirty=!1,this.style._updateSources(this.transform)),this._placementDirty=this.style&&this.style._updatePlacement(this.painter.transform,this.showCollisionBoxes,this._fadeDuration,this._crossSourceCollisions),this.painter.render(this.style,{showTileBoundaries:this.showTileBoundaries,showOverdrawInspector:this._showOverdrawInspector,rotating:this.isRotating(),zooming:this.isZooming(),moving:this.isMoving(),fadeDuration:this._fadeDuration}),this.fire(new t.Event(\\\"render\\\")),this.loaded()&&!this._loaded&&(this._loaded=!0,this.fire(new t.Event(\\\"load\\\"))),this.style&&(this.style.hasTransitions()||e)&&(this._styleDirty=!0),this.style&&!this._placementDirty&&this.style._releaseSymbolFadeTiles(),this._sourcesDirty||this._repaint||this._styleDirty||this._placementDirty?this.triggerRepaint():!this.isMoving()&&this.loaded()&&this.fire(new t.Event(\\\"idle\\\")),this},i.prototype.remove=function(){this._hash&&this._hash.remove();for(var e=0,r=this._controls;e<r.length;e+=1)r[e].onRemove(this);this._controls=[],this._frame&&(this._frame.cancel(),this._frame=null),this._renderTaskQueue.clear(),this.setStyle(null),void 0!==t.window&&(t.window.removeEventListener(\\\"resize\\\",this._onWindowResize,!1),t.window.removeEventListener(\\\"online\\\",this._onWindowOnline,!1));var n=this.painter.context.gl.getExtension(\\\"WEBGL_lose_context\\\");n&&n.loseContext(),zn(this._canvasContainer),zn(this._controlContainer),zn(this._missingCSSCanary),this._container.classList.remove(\\\"mapboxgl-map\\\"),this.fire(new t.Event(\\\"remove\\\"))},i.prototype.triggerRepaint=function(){var e=this;this.style&&!this._frame&&(this._frame=t.browser.frame(function(){e._frame=null,e._render()}))},i.prototype._onWindowOnline=function(){this._update()},i.prototype._onWindowResize=function(){this._trackResize&&this.resize()._update()},a.showTileBoundaries.get=function(){return!!this._showTileBoundaries},a.showTileBoundaries.set=function(t){this._showTileBoundaries!==t&&(this._showTileBoundaries=t,this._update())},a.showCollisionBoxes.get=function(){return!!this._showCollisionBoxes},a.showCollisionBoxes.set=function(t){this._showCollisionBoxes!==t&&(this._showCollisionBoxes=t,t?this.style._generateCollisionBoxes():this._update())},a.showOverdrawInspector.get=function(){return!!this._showOverdrawInspector},a.showOverdrawInspector.set=function(t){this._showOverdrawInspector!==t&&(this._showOverdrawInspector=t,this._update())},a.repaint.get=function(){return!!this._repaint},a.repaint.set=function(t){this._repaint!==t&&(this._repaint=t,this.triggerRepaint())},a.vertices.get=function(){return!!this._vertices},a.vertices.set=function(t){this._vertices=t,this._update()},i.prototype._setCacheLimits=function(e,r){t.setCacheLimits(e,r)},Object.defineProperties(i.prototype,a),i}(An);function zn(t){t.parentNode&&t.parentNode.removeChild(t)}var In={showCompass:!0,showZoom:!0},Dn=function(e){var n=this;this.options=t.extend({},In,e),this._container=r.create(\\\"div\\\",\\\"mapboxgl-ctrl mapboxgl-ctrl-group\\\"),this._container.addEventListener(\\\"contextmenu\\\",function(t){return t.preventDefault()}),this.options.showZoom&&(t.bindAll([\\\"_updateZoomButtons\\\"],this),this._zoomInButton=this._createButton(\\\"mapboxgl-ctrl-icon mapboxgl-ctrl-zoom-in\\\",\\\"Zoom in\\\",function(){return n._map.zoomIn()}),this._zoomOutButton=this._createButton(\\\"mapboxgl-ctrl-icon mapboxgl-ctrl-zoom-out\\\",\\\"Zoom out\\\",function(){return n._map.zoomOut()})),this.options.showCompass&&(t.bindAll([\\\"_rotateCompassArrow\\\"],this),this._compass=this._createButton(\\\"mapboxgl-ctrl-icon mapboxgl-ctrl-compass\\\",\\\"Reset bearing to north\\\",function(){return n._map.resetNorth()}),this._compassArrow=r.create(\\\"span\\\",\\\"mapboxgl-ctrl-compass-arrow\\\",this._compass))};function Rn(e,r,n){if(e=new t.LngLat(e.lng,e.lat),r){var i=new t.LngLat(e.lng-360,e.lat),a=new t.LngLat(e.lng+360,e.lat),o=n.locationPoint(e).distSqr(r);n.locationPoint(i).distSqr(r)<o?e=i:n.locationPoint(a).distSqr(r)<o&&(e=a)}for(;Math.abs(e.lng-n.center.lng)>180;){var s=n.locationPoint(e);if(s.x>=0&&s.y>=0&&s.x<=n.width&&s.y<=n.height)break;e.lng>n.center.lng?e.lng-=360:e.lng+=360}return e}Dn.prototype._updateZoomButtons=function(){var t=this._map.getZoom();this._zoomInButton.classList.toggle(\\\"mapboxgl-ctrl-icon-disabled\\\",t===this._map.getMaxZoom()),this._zoomOutButton.classList.toggle(\\\"mapboxgl-ctrl-icon-disabled\\\",t===this._map.getMinZoom())},Dn.prototype._rotateCompassArrow=function(){var t=\\\"rotate(\\\"+this._map.transform.angle*(180/Math.PI)+\\\"deg)\\\";this._compassArrow.style.transform=t},Dn.prototype.onAdd=function(t){return this._map=t,this.options.showZoom&&(this._map.on(\\\"zoom\\\",this._updateZoomButtons),this._updateZoomButtons()),this.options.showCompass&&(this._map.on(\\\"rotate\\\",this._rotateCompassArrow),this._rotateCompassArrow(),this._handler=new vn(t,{button:\\\"left\\\",element:this._compass}),r.addEventListener(this._compass,\\\"mousedown\\\",this._handler.onMouseDown),this._handler.enable()),this._container},Dn.prototype.onRemove=function(){r.remove(this._container),this.options.showZoom&&this._map.off(\\\"zoom\\\",this._updateZoomButtons),this.options.showCompass&&(this._map.off(\\\"rotate\\\",this._rotateCompassArrow),r.removeEventListener(this._compass,\\\"mousedown\\\",this._handler.onMouseDown),this._handler.disable(),delete this._handler),delete this._map},Dn.prototype._createButton=function(t,e,n){var i=r.create(\\\"button\\\",t,this._container);return i.type=\\\"button\\\",i.title=e,i.setAttribute(\\\"aria-label\\\",e),i.addEventListener(\\\"click\\\",n),i};var Fn={center:\\\"translate(-50%,-50%)\\\",top:\\\"translate(-50%,0)\\\",\\\"top-left\\\":\\\"translate(0,0)\\\",\\\"top-right\\\":\\\"translate(-100%,0)\\\",bottom:\\\"translate(-50%,-100%)\\\",\\\"bottom-left\\\":\\\"translate(0,-100%)\\\",\\\"bottom-right\\\":\\\"translate(-100%,-100%)\\\",left:\\\"translate(0,-50%)\\\",right:\\\"translate(-100%,-50%)\\\"};function Bn(t,e,r){var n=t.classList;for(var i in Fn)n.remove(\\\"mapboxgl-\\\"+r+\\\"-anchor-\\\"+i);n.add(\\\"mapboxgl-\\\"+r+\\\"-anchor-\\\"+e)}var Nn,jn=function(e){function n(n,i){if(e.call(this),(n instanceof t.window.HTMLElement||i)&&(n=t.extend({element:n},i)),t.bindAll([\\\"_update\\\",\\\"_onMove\\\",\\\"_onUp\\\",\\\"_addDragHandler\\\",\\\"_onMapClick\\\"],this),this._anchor=n&&n.anchor||\\\"center\\\",this._color=n&&n.color||\\\"#3FB1CE\\\",this._draggable=n&&n.draggable||!1,this._state=\\\"inactive\\\",n&&n.element)this._element=n.element,this._offset=t.Point.convert(n&&n.offset||[0,0]);else{this._defaultMarker=!0,this._element=r.create(\\\"div\\\");var a=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"svg\\\");a.setAttributeNS(null,\\\"display\\\",\\\"block\\\"),a.setAttributeNS(null,\\\"height\\\",\\\"41px\\\"),a.setAttributeNS(null,\\\"width\\\",\\\"27px\\\"),a.setAttributeNS(null,\\\"viewBox\\\",\\\"0 0 27 41\\\");var o=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"g\\\");o.setAttributeNS(null,\\\"stroke\\\",\\\"none\\\"),o.setAttributeNS(null,\\\"stroke-width\\\",\\\"1\\\"),o.setAttributeNS(null,\\\"fill\\\",\\\"none\\\"),o.setAttributeNS(null,\\\"fill-rule\\\",\\\"evenodd\\\");var s=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"g\\\");s.setAttributeNS(null,\\\"fill-rule\\\",\\\"nonzero\\\");var l=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"g\\\");l.setAttributeNS(null,\\\"transform\\\",\\\"translate(3.0, 29.0)\\\"),l.setAttributeNS(null,\\\"fill\\\",\\\"#000000\\\");for(var c=0,u=[{rx:\\\"10.5\\\",ry:\\\"5.25002273\\\"},{rx:\\\"10.5\\\",ry:\\\"5.25002273\\\"},{rx:\\\"9.5\\\",ry:\\\"4.77275007\\\"},{rx:\\\"8.5\\\",ry:\\\"4.29549936\\\"},{rx:\\\"7.5\\\",ry:\\\"3.81822308\\\"},{rx:\\\"6.5\\\",ry:\\\"3.34094679\\\"},{rx:\\\"5.5\\\",ry:\\\"2.86367051\\\"},{rx:\\\"4.5\\\",ry:\\\"2.38636864\\\"}];c<u.length;c+=1){var h=u[c],f=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"ellipse\\\");f.setAttributeNS(null,\\\"opacity\\\",\\\"0.04\\\"),f.setAttributeNS(null,\\\"cx\\\",\\\"10.5\\\"),f.setAttributeNS(null,\\\"cy\\\",\\\"5.80029008\\\"),f.setAttributeNS(null,\\\"rx\\\",h.rx),f.setAttributeNS(null,\\\"ry\\\",h.ry),l.appendChild(f)}var p=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"g\\\");p.setAttributeNS(null,\\\"fill\\\",this._color);var d=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"path\\\");d.setAttributeNS(null,\\\"d\\\",\\\"M27,13.5 C27,19.074644 20.250001,27.000002 14.75,34.500002 C14.016665,35.500004 12.983335,35.500004 12.25,34.500002 C6.7499993,27.000002 0,19.222562 0,13.5 C0,6.0441559 6.0441559,0 13.5,0 C20.955844,0 27,6.0441559 27,13.5 Z\\\"),p.appendChild(d);var g=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"g\\\");g.setAttributeNS(null,\\\"opacity\\\",\\\"0.25\\\"),g.setAttributeNS(null,\\\"fill\\\",\\\"#000000\\\");var v=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"path\\\");v.setAttributeNS(null,\\\"d\\\",\\\"M13.5,0 C6.0441559,0 0,6.0441559 0,13.5 C0,19.222562 6.7499993,27 12.25,34.5 C13,35.522727 14.016664,35.500004 14.75,34.5 C20.250001,27 27,19.074644 27,13.5 C27,6.0441559 20.955844,0 13.5,0 Z M13.5,1 C20.415404,1 26,6.584596 26,13.5 C26,15.898657 24.495584,19.181431 22.220703,22.738281 C19.945823,26.295132 16.705119,30.142167 13.943359,33.908203 C13.743445,34.180814 13.612715,34.322738 13.5,34.441406 C13.387285,34.322738 13.256555,34.180814 13.056641,33.908203 C10.284481,30.127985 7.4148684,26.314159 5.015625,22.773438 C2.6163816,19.232715 1,15.953538 1,13.5 C1,6.584596 6.584596,1 13.5,1 Z\\\"),g.appendChild(v);var m=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"g\\\");m.setAttributeNS(null,\\\"transform\\\",\\\"translate(6.0, 7.0)\\\"),m.setAttributeNS(null,\\\"fill\\\",\\\"#FFFFFF\\\");var y=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"g\\\");y.setAttributeNS(null,\\\"transform\\\",\\\"translate(8.0, 8.0)\\\");var x=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"circle\\\");x.setAttributeNS(null,\\\"fill\\\",\\\"#000000\\\"),x.setAttributeNS(null,\\\"opacity\\\",\\\"0.25\\\"),x.setAttributeNS(null,\\\"cx\\\",\\\"5.5\\\"),x.setAttributeNS(null,\\\"cy\\\",\\\"5.5\\\"),x.setAttributeNS(null,\\\"r\\\",\\\"5.4999962\\\");var b=r.createNS(\\\"http://www.w3.org/2000/svg\\\",\\\"circle\\\");b.setAttributeNS(null,\\\"fill\\\",\\\"#FFFFFF\\\"),b.setAttributeNS(null,\\\"cx\\\",\\\"5.5\\\"),b.setAttributeNS(null,\\\"cy\\\",\\\"5.5\\\"),b.setAttributeNS(null,\\\"r\\\",\\\"5.4999962\\\"),y.appendChild(x),y.appendChild(b),s.appendChild(l),s.appendChild(p),s.appendChild(g),s.appendChild(m),s.appendChild(y),a.appendChild(s),this._element.appendChild(a),this._offset=t.Point.convert(n&&n.offset||[0,-14])}this._element.classList.add(\\\"mapboxgl-marker\\\"),this._element.addEventListener(\\\"dragstart\\\",function(t){t.preventDefault()}),Bn(this._element,this._anchor,\\\"marker\\\"),this._popup=null}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.addTo=function(t){return this.remove(),this._map=t,t.getCanvasContainer().appendChild(this._element),t.on(\\\"move\\\",this._update),t.on(\\\"moveend\\\",this._update),this.setDraggable(this._draggable),this._update(),this._map.on(\\\"click\\\",this._onMapClick),this},n.prototype.remove=function(){return this._map&&(this._map.off(\\\"click\\\",this._onMapClick),this._map.off(\\\"move\\\",this._update),this._map.off(\\\"moveend\\\",this._update),this._map.off(\\\"mousedown\\\",this._addDragHandler),this._map.off(\\\"touchstart\\\",this._addDragHandler),this._map.off(\\\"mouseup\\\",this._onUp),this._map.off(\\\"touchend\\\",this._onUp),delete this._map),r.remove(this._element),this._popup&&this._popup.remove(),this},n.prototype.getLngLat=function(){return this._lngLat},n.prototype.setLngLat=function(e){return this._lngLat=t.LngLat.convert(e),this._pos=null,this._popup&&this._popup.setLngLat(this._lngLat),this._update(),this},n.prototype.getElement=function(){return this._element},n.prototype.setPopup=function(t){if(this._popup&&(this._popup.remove(),this._popup=null),t){if(!(\\\"offset\\\"in t.options)){var e=Math.sqrt(Math.pow(13.5,2)/2);t.options.offset=this._defaultMarker?{top:[0,0],\\\"top-left\\\":[0,0],\\\"top-right\\\":[0,0],bottom:[0,-38.1],\\\"bottom-left\\\":[e,-1*(24.6+e)],\\\"bottom-right\\\":[-e,-1*(24.6+e)],left:[13.5,-24.6],right:[-13.5,-24.6]}:this._offset}this._popup=t,this._lngLat&&this._popup.setLngLat(this._lngLat)}return this},n.prototype._onMapClick=function(t){var e=t.originalEvent.target,r=this._element;this._popup&&(e===r||r.contains(e))&&this.togglePopup()},n.prototype.getPopup=function(){return this._popup},n.prototype.togglePopup=function(){var t=this._popup;return t?(t.isOpen()?t.remove():t.addTo(this._map),this):this},n.prototype._update=function(t){this._map&&(this._map.transform.renderWorldCopies&&(this._lngLat=Rn(this._lngLat,this._pos,this._map.transform)),this._pos=this._map.project(this._lngLat)._add(this._offset),t&&\\\"moveend\\\"!==t.type||(this._pos=this._pos.round()),r.setTransform(this._element,Fn[this._anchor]+\\\" translate(\\\"+this._pos.x+\\\"px, \\\"+this._pos.y+\\\"px)\\\"))},n.prototype.getOffset=function(){return this._offset},n.prototype.setOffset=function(e){return this._offset=t.Point.convert(e),this._update(),this},n.prototype._onMove=function(e){this._pos=e.point.sub(this._positionDelta),this._lngLat=this._map.unproject(this._pos),this.setLngLat(this._lngLat),this._element.style.pointerEvents=\\\"none\\\",\\\"pending\\\"===this._state&&(this._state=\\\"active\\\",this.fire(new t.Event(\\\"dragstart\\\"))),this.fire(new t.Event(\\\"drag\\\"))},n.prototype._onUp=function(){this._element.style.pointerEvents=\\\"auto\\\",this._positionDelta=null,this._map.off(\\\"mousemove\\\",this._onMove),this._map.off(\\\"touchmove\\\",this._onMove),\\\"active\\\"===this._state&&this.fire(new t.Event(\\\"dragend\\\")),this._state=\\\"inactive\\\"},n.prototype._addDragHandler=function(t){this._element.contains(t.originalEvent.target)&&(t.preventDefault(),this._positionDelta=t.point.sub(this._pos).add(this._offset),this._state=\\\"pending\\\",this._map.on(\\\"mousemove\\\",this._onMove),this._map.on(\\\"touchmove\\\",this._onMove),this._map.once(\\\"mouseup\\\",this._onUp),this._map.once(\\\"touchend\\\",this._onUp))},n.prototype.setDraggable=function(t){return this._draggable=!!t,this._map&&(t?(this._map.on(\\\"mousedown\\\",this._addDragHandler),this._map.on(\\\"touchstart\\\",this._addDragHandler)):(this._map.off(\\\"mousedown\\\",this._addDragHandler),this._map.off(\\\"touchstart\\\",this._addDragHandler))),this},n.prototype.isDraggable=function(){return this._draggable},n}(t.Evented),Un={positionOptions:{enableHighAccuracy:!1,maximumAge:0,timeout:6e3},fitBoundsOptions:{maxZoom:15},trackUserLocation:!1,showUserLocation:!0},Vn=function(e){function n(r){e.call(this),this.options=t.extend({},Un,r),t.bindAll([\\\"_onSuccess\\\",\\\"_onError\\\",\\\"_finish\\\",\\\"_setupUI\\\",\\\"_updateCamera\\\",\\\"_updateMarker\\\"],this)}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.onAdd=function(e){var n;return this._map=e,this._container=r.create(\\\"div\\\",\\\"mapboxgl-ctrl mapboxgl-ctrl-group\\\"),n=this._setupUI,void 0!==Nn?n(Nn):void 0!==t.window.navigator.permissions?t.window.navigator.permissions.query({name:\\\"geolocation\\\"}).then(function(t){Nn=\\\"denied\\\"!==t.state,n(Nn)}):(Nn=!!t.window.navigator.geolocation,n(Nn)),this._container},n.prototype.onRemove=function(){void 0!==this._geolocationWatchID&&(t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0),this.options.showUserLocation&&this._userLocationDotMarker&&this._userLocationDotMarker.remove(),r.remove(this._container),this._map=void 0},n.prototype._onSuccess=function(e){if(this.options.trackUserLocation)switch(this._lastKnownPosition=e,this._watchState){case\\\"WAITING_ACTIVE\\\":case\\\"ACTIVE_LOCK\\\":case\\\"ACTIVE_ERROR\\\":this._watchState=\\\"ACTIVE_LOCK\\\",this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-waiting\\\"),this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-active-error\\\"),this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-active\\\");break;case\\\"BACKGROUND\\\":case\\\"BACKGROUND_ERROR\\\":this._watchState=\\\"BACKGROUND\\\",this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-waiting\\\"),this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-background-error\\\"),this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-background\\\")}this.options.showUserLocation&&\\\"OFF\\\"!==this._watchState&&this._updateMarker(e),this.options.trackUserLocation&&\\\"ACTIVE_LOCK\\\"!==this._watchState||this._updateCamera(e),this.options.showUserLocation&&this._dotElement.classList.remove(\\\"mapboxgl-user-location-dot-stale\\\"),this.fire(new t.Event(\\\"geolocate\\\",e)),this._finish()},n.prototype._updateCamera=function(e){var r=new t.LngLat(e.coords.longitude,e.coords.latitude),n=e.coords.accuracy,i=this._map.getBearing(),a=t.extend({bearing:i},this.options.fitBoundsOptions);this._map.fitBounds(r.toBounds(n),a,{geolocateSource:!0})},n.prototype._updateMarker=function(t){t?this._userLocationDotMarker.setLngLat([t.coords.longitude,t.coords.latitude]).addTo(this._map):this._userLocationDotMarker.remove()},n.prototype._onError=function(e){if(this.options.trackUserLocation)if(1===e.code)this._watchState=\\\"OFF\\\",this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-waiting\\\"),this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-active\\\"),this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-active-error\\\"),this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-background\\\"),this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-background-error\\\"),void 0!==this._geolocationWatchID&&this._clearWatch();else switch(this._watchState){case\\\"WAITING_ACTIVE\\\":this._watchState=\\\"ACTIVE_ERROR\\\",this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-active\\\"),this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-active-error\\\");break;case\\\"ACTIVE_LOCK\\\":this._watchState=\\\"ACTIVE_ERROR\\\",this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-active\\\"),this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-active-error\\\"),this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-waiting\\\");break;case\\\"BACKGROUND\\\":this._watchState=\\\"BACKGROUND_ERROR\\\",this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-background\\\"),this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-background-error\\\"),this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-waiting\\\")}\\\"OFF\\\"!==this._watchState&&this.options.showUserLocation&&this._dotElement.classList.add(\\\"mapboxgl-user-location-dot-stale\\\"),this.fire(new t.Event(\\\"error\\\",e)),this._finish()},n.prototype._finish=function(){this._timeoutId&&clearTimeout(this._timeoutId),this._timeoutId=void 0},n.prototype._setupUI=function(e){var n=this;!1!==e?(this._container.addEventListener(\\\"contextmenu\\\",function(t){return t.preventDefault()}),this._geolocateButton=r.create(\\\"button\\\",\\\"mapboxgl-ctrl-icon mapboxgl-ctrl-geolocate\\\",this._container),this._geolocateButton.type=\\\"button\\\",this._geolocateButton.setAttribute(\\\"aria-label\\\",\\\"Geolocate\\\"),this.options.trackUserLocation&&(this._geolocateButton.setAttribute(\\\"aria-pressed\\\",\\\"false\\\"),this._watchState=\\\"OFF\\\"),this.options.showUserLocation&&(this._dotElement=r.create(\\\"div\\\",\\\"mapboxgl-user-location-dot\\\"),this._userLocationDotMarker=new jn(this._dotElement),this.options.trackUserLocation&&(this._watchState=\\\"OFF\\\")),this._geolocateButton.addEventListener(\\\"click\\\",this.trigger.bind(this)),this._setup=!0,this.options.trackUserLocation&&this._map.on(\\\"movestart\\\",function(e){e.geolocateSource||\\\"ACTIVE_LOCK\\\"!==n._watchState||(n._watchState=\\\"BACKGROUND\\\",n._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-background\\\"),n._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-active\\\"),n.fire(new t.Event(\\\"trackuserlocationend\\\")))})):t.warnOnce(\\\"Geolocation support is not available, the GeolocateControl will not be visible.\\\")},n.prototype.trigger=function(){if(!this._setup)return t.warnOnce(\\\"Geolocate control triggered before added to a map\\\"),!1;if(this.options.trackUserLocation){switch(this._watchState){case\\\"OFF\\\":this._watchState=\\\"WAITING_ACTIVE\\\",this.fire(new t.Event(\\\"trackuserlocationstart\\\"));break;case\\\"WAITING_ACTIVE\\\":case\\\"ACTIVE_LOCK\\\":case\\\"ACTIVE_ERROR\\\":case\\\"BACKGROUND_ERROR\\\":this._watchState=\\\"OFF\\\",this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-waiting\\\"),this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-active\\\"),this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-active-error\\\"),this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-background\\\"),this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-background-error\\\"),this.fire(new t.Event(\\\"trackuserlocationend\\\"));break;case\\\"BACKGROUND\\\":this._watchState=\\\"ACTIVE_LOCK\\\",this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-background\\\"),this._lastKnownPosition&&this._updateCamera(this._lastKnownPosition),this.fire(new t.Event(\\\"trackuserlocationstart\\\"))}switch(this._watchState){case\\\"WAITING_ACTIVE\\\":this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-waiting\\\"),this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-active\\\");break;case\\\"ACTIVE_LOCK\\\":this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-active\\\");break;case\\\"ACTIVE_ERROR\\\":this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-waiting\\\"),this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-active-error\\\");break;case\\\"BACKGROUND\\\":this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-background\\\");break;case\\\"BACKGROUND_ERROR\\\":this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-waiting\\\"),this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-background-error\\\")}\\\"OFF\\\"===this._watchState&&void 0!==this._geolocationWatchID?this._clearWatch():void 0===this._geolocationWatchID&&(this._geolocateButton.classList.add(\\\"mapboxgl-ctrl-geolocate-waiting\\\"),this._geolocateButton.setAttribute(\\\"aria-pressed\\\",\\\"true\\\"),this._geolocationWatchID=t.window.navigator.geolocation.watchPosition(this._onSuccess,this._onError,this.options.positionOptions))}else t.window.navigator.geolocation.getCurrentPosition(this._onSuccess,this._onError,this.options.positionOptions),this._timeoutId=setTimeout(this._finish,1e4);return!0},n.prototype._clearWatch=function(){t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0,this._geolocateButton.classList.remove(\\\"mapboxgl-ctrl-geolocate-waiting\\\"),this._geolocateButton.setAttribute(\\\"aria-pressed\\\",\\\"false\\\"),this.options.showUserLocation&&this._updateMarker(null)},n}(t.Evented),qn={maxWidth:100,unit:\\\"metric\\\"},Hn=function(e){this.options=t.extend({},qn,e),t.bindAll([\\\"_onMove\\\",\\\"setUnit\\\"],this)};function Gn(t,e,r){var n,i,a,o,s,l,c=r&&r.maxWidth||100,u=t._container.clientHeight/2,h=(n=t.unproject([0,u]),i=t.unproject([c,u]),a=Math.PI/180,o=n.lat*a,s=i.lat*a,l=Math.sin(o)*Math.sin(s)+Math.cos(o)*Math.cos(s)*Math.cos((i.lng-n.lng)*a),6371e3*Math.acos(Math.min(l,1)));if(r&&\\\"imperial\\\"===r.unit){var f=3.2808*h;f>5280?Yn(e,c,f/5280,\\\"mi\\\"):Yn(e,c,f,\\\"ft\\\")}else r&&\\\"nautical\\\"===r.unit?Yn(e,c,h/1852,\\\"nm\\\"):Yn(e,c,h,\\\"m\\\")}function Yn(t,e,r,n){var i,a,o,s=(i=r,(a=Math.pow(10,(\\\"\\\"+Math.floor(i)).length-1))*(o=(o=i/a)>=10?10:o>=5?5:o>=3?3:o>=2?2:o>=1?1:function(t){var e=Math.pow(10,Math.ceil(-Math.log(t)/Math.LN10));return Math.round(t*e)/e}(o))),l=s/r;\\\"m\\\"===n&&s>=1e3&&(s/=1e3,n=\\\"km\\\"),t.style.width=e*l+\\\"px\\\",t.innerHTML=s+n}Hn.prototype.getDefaultPosition=function(){return\\\"bottom-left\\\"},Hn.prototype._onMove=function(){Gn(this._map,this._container,this.options)},Hn.prototype.onAdd=function(t){return this._map=t,this._container=r.create(\\\"div\\\",\\\"mapboxgl-ctrl mapboxgl-ctrl-scale\\\",t.getContainer()),this._map.on(\\\"move\\\",this._onMove),this._onMove(),this._container},Hn.prototype.onRemove=function(){r.remove(this._container),this._map.off(\\\"move\\\",this._onMove),this._map=void 0},Hn.prototype.setUnit=function(t){this.options.unit=t,Gn(this._map,this._container,this.options)};var Wn=function(e){this._fullscreen=!1,e&&e.container&&(e.container instanceof t.window.HTMLElement?this._container=e.container:t.warnOnce(\\\"Full screen control 'container' must be a DOM element.\\\")),t.bindAll([\\\"_onClickFullscreen\\\",\\\"_changeIcon\\\"],this),\\\"onfullscreenchange\\\"in t.window.document?this._fullscreenchange=\\\"fullscreenchange\\\":\\\"onmozfullscreenchange\\\"in t.window.document?this._fullscreenchange=\\\"mozfullscreenchange\\\":\\\"onwebkitfullscreenchange\\\"in t.window.document?this._fullscreenchange=\\\"webkitfullscreenchange\\\":\\\"onmsfullscreenchange\\\"in t.window.document&&(this._fullscreenchange=\\\"MSFullscreenChange\\\"),this._className=\\\"mapboxgl-ctrl\\\"};Wn.prototype.onAdd=function(e){return this._map=e,this._container||(this._container=this._map.getContainer()),this._controlContainer=r.create(\\\"div\\\",this._className+\\\" mapboxgl-ctrl-group\\\"),this._checkFullscreenSupport()?this._setupUI():(this._controlContainer.style.display=\\\"none\\\",t.warnOnce(\\\"This device does not support fullscreen mode.\\\")),this._controlContainer},Wn.prototype.onRemove=function(){r.remove(this._controlContainer),this._map=null,t.window.document.removeEventListener(this._fullscreenchange,this._changeIcon)},Wn.prototype._checkFullscreenSupport=function(){return!!(t.window.document.fullscreenEnabled||t.window.document.mozFullScreenEnabled||t.window.document.msFullscreenEnabled||t.window.document.webkitFullscreenEnabled)},Wn.prototype._setupUI=function(){(this._fullscreenButton=r.create(\\\"button\\\",this._className+\\\"-icon \\\"+this._className+\\\"-fullscreen\\\",this._controlContainer)).type=\\\"button\\\",this._updateTitle(),this._fullscreenButton.addEventListener(\\\"click\\\",this._onClickFullscreen),t.window.document.addEventListener(this._fullscreenchange,this._changeIcon)},Wn.prototype._updateTitle=function(){var t=this._isFullscreen()?\\\"Exit fullscreen\\\":\\\"Enter fullscreen\\\";this._fullscreenButton.setAttribute(\\\"aria-label\\\",t),this._fullscreenButton.title=t},Wn.prototype._isFullscreen=function(){return this._fullscreen},Wn.prototype._changeIcon=function(){(t.window.document.fullscreenElement||t.window.document.mozFullScreenElement||t.window.document.webkitFullscreenElement||t.window.document.msFullscreenElement)===this._container!==this._fullscreen&&(this._fullscreen=!this._fullscreen,this._fullscreenButton.classList.toggle(this._className+\\\"-shrink\\\"),this._fullscreenButton.classList.toggle(this._className+\\\"-fullscreen\\\"),this._updateTitle())},Wn.prototype._onClickFullscreen=function(){this._isFullscreen()?t.window.document.exitFullscreen?t.window.document.exitFullscreen():t.window.document.mozCancelFullScreen?t.window.document.mozCancelFullScreen():t.window.document.msExitFullscreen?t.window.document.msExitFullscreen():t.window.document.webkitCancelFullScreen&&t.window.document.webkitCancelFullScreen():this._container.requestFullscreen?this._container.requestFullscreen():this._container.mozRequestFullScreen?this._container.mozRequestFullScreen():this._container.msRequestFullscreen?this._container.msRequestFullscreen():this._container.webkitRequestFullscreen&&this._container.webkitRequestFullscreen()};var Xn={closeButton:!0,closeOnClick:!0,className:\\\"\\\",maxWidth:\\\"240px\\\"},Zn=function(e){function n(r){e.call(this),this.options=t.extend(Object.create(Xn),r),t.bindAll([\\\"_update\\\",\\\"_onClickClose\\\",\\\"remove\\\"],this)}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.addTo=function(e){var r=this;return this._map=e,this.options.closeOnClick&&this._map.on(\\\"click\\\",this._onClickClose),this._map.on(\\\"remove\\\",this.remove),this._update(),this._trackPointer?(this._map.on(\\\"mousemove\\\",function(t){r._update(t.point)}),this._map.on(\\\"mouseup\\\",function(t){r._update(t.point)}),this._container.classList.add(\\\"mapboxgl-popup-track-pointer\\\"),this._map._canvasContainer.classList.add(\\\"mapboxgl-track-pointer\\\")):this._map.on(\\\"move\\\",this._update),this.fire(new t.Event(\\\"open\\\")),this},n.prototype.isOpen=function(){return!!this._map},n.prototype.remove=function(){return this._content&&r.remove(this._content),this._container&&(r.remove(this._container),delete this._container),this._map&&(this._map.off(\\\"move\\\",this._update),this._map.off(\\\"click\\\",this._onClickClose),this._map.off(\\\"remove\\\",this.remove),this._map.off(\\\"mousemove\\\"),delete this._map),this.fire(new t.Event(\\\"close\\\")),this},n.prototype.getLngLat=function(){return this._lngLat},n.prototype.setLngLat=function(e){return this._lngLat=t.LngLat.convert(e),this._pos=null,this._map&&(this._map.on(\\\"move\\\",this._update),this._map.off(\\\"mousemove\\\"),this._container.classList.remove(\\\"mapboxgl-popup-track-pointer\\\"),this._map._canvasContainer.classList.remove(\\\"mapboxgl-track-pointer\\\")),this._trackPointer=!1,this._update(),this},n.prototype.trackPointer=function(){var t=this;return this._trackPointer=!0,this._pos=null,this._map&&(this._map.off(\\\"move\\\",this._update),this._map.on(\\\"mousemove\\\",function(e){t._update(e.point)}),this._map.on(\\\"drag\\\",function(e){t._update(e.point)}),this._container.classList.add(\\\"mapboxgl-popup-track-pointer\\\"),this._map._canvasContainer.classList.add(\\\"mapboxgl-track-pointer\\\")),this},n.prototype.getElement=function(){return this._container},n.prototype.setText=function(e){return this.setDOMContent(t.window.document.createTextNode(e))},n.prototype.setHTML=function(e){var r,n=t.window.document.createDocumentFragment(),i=t.window.document.createElement(\\\"body\\\");for(i.innerHTML=e;r=i.firstChild;)n.appendChild(r);return this.setDOMContent(n)},n.prototype.getMaxWidth=function(){return this._container.style.maxWidth},n.prototype.setMaxWidth=function(t){return this.options.maxWidth=t,this._update(),this},n.prototype.setDOMContent=function(t){return this._createContent(),this._content.appendChild(t),this._update(),this},n.prototype._createContent=function(){this._content&&r.remove(this._content),this._content=r.create(\\\"div\\\",\\\"mapboxgl-popup-content\\\",this._container),this.options.closeButton&&(this._closeButton=r.create(\\\"button\\\",\\\"mapboxgl-popup-close-button\\\",this._content),this._closeButton.type=\\\"button\\\",this._closeButton.setAttribute(\\\"aria-label\\\",\\\"Close popup\\\"),this._closeButton.innerHTML=\\\"&#215;\\\",this._closeButton.addEventListener(\\\"click\\\",this._onClickClose))},n.prototype._update=function(e){var n=this,i=this._lngLat||this._trackPointer;if(this._map&&i&&this._content&&(this._container||(this._container=r.create(\\\"div\\\",\\\"mapboxgl-popup\\\",this._map.getContainer()),this._tip=r.create(\\\"div\\\",\\\"mapboxgl-popup-tip\\\",this._container),this._container.appendChild(this._content),this.options.className&&this.options.className.split(\\\" \\\").forEach(function(t){return n._container.classList.add(t)})),this.options.maxWidth&&this._container.style.maxWidth!==this.options.maxWidth&&(this._container.style.maxWidth=this.options.maxWidth),this._map.transform.renderWorldCopies&&!this._trackPointer&&(this._lngLat=Rn(this._lngLat,this._pos,this._map.transform)),!this._trackPointer||e)){var a=this._pos=this._trackPointer&&e?e:this._map.project(this._lngLat),o=this.options.anchor,s=function e(r){if(r){if(\\\"number\\\"==typeof r){var n=Math.round(Math.sqrt(.5*Math.pow(r,2)));return{center:new t.Point(0,0),top:new t.Point(0,r),\\\"top-left\\\":new t.Point(n,n),\\\"top-right\\\":new t.Point(-n,n),bottom:new t.Point(0,-r),\\\"bottom-left\\\":new t.Point(n,-n),\\\"bottom-right\\\":new t.Point(-n,-n),left:new t.Point(r,0),right:new t.Point(-r,0)}}if(r instanceof t.Point||Array.isArray(r)){var i=t.Point.convert(r);return{center:i,top:i,\\\"top-left\\\":i,\\\"top-right\\\":i,bottom:i,\\\"bottom-left\\\":i,\\\"bottom-right\\\":i,left:i,right:i}}return{center:t.Point.convert(r.center||[0,0]),top:t.Point.convert(r.top||[0,0]),\\\"top-left\\\":t.Point.convert(r[\\\"top-left\\\"]||[0,0]),\\\"top-right\\\":t.Point.convert(r[\\\"top-right\\\"]||[0,0]),bottom:t.Point.convert(r.bottom||[0,0]),\\\"bottom-left\\\":t.Point.convert(r[\\\"bottom-left\\\"]||[0,0]),\\\"bottom-right\\\":t.Point.convert(r[\\\"bottom-right\\\"]||[0,0]),left:t.Point.convert(r.left||[0,0]),right:t.Point.convert(r.right||[0,0])}}return e(new t.Point(0,0))}(this.options.offset);if(!o){var l,c=this._container.offsetWidth,u=this._container.offsetHeight;l=a.y+s.bottom.y<u?[\\\"top\\\"]:a.y>this._map.transform.height-u?[\\\"bottom\\\"]:[],a.x<c/2?l.push(\\\"left\\\"):a.x>this._map.transform.width-c/2&&l.push(\\\"right\\\"),o=0===l.length?\\\"bottom\\\":l.join(\\\"-\\\")}var h=a.add(s[o]).round();r.setTransform(this._container,Fn[o]+\\\" translate(\\\"+h.x+\\\"px,\\\"+h.y+\\\"px)\\\"),Bn(this._container,o,\\\"popup\\\")}},n.prototype._onClickClose=function(){this.remove()},n}(t.Evented),Jn={version:t.version,supported:e,setRTLTextPlugin:t.setRTLTextPlugin,Map:On,NavigationControl:Dn,GeolocateControl:Vn,AttributionControl:Mn,ScaleControl:Hn,FullscreenControl:Wn,Popup:Zn,Marker:jn,Style:De,LngLat:t.LngLat,LngLatBounds:t.LngLatBounds,Point:t.Point,MercatorCoordinate:t.MercatorCoordinate,Evented:t.Evented,config:t.config,get accessToken(){return t.config.ACCESS_TOKEN},set accessToken(e){t.config.ACCESS_TOKEN=e},get baseApiUrl(){return t.config.API_URL},set baseApiUrl(e){t.config.API_URL=e},get workerCount(){return zt.workerCount},set workerCount(t){zt.workerCount=t},get maxParallelImageRequests(){return t.config.MAX_PARALLEL_IMAGE_REQUESTS},set maxParallelImageRequests(e){t.config.MAX_PARALLEL_IMAGE_REQUESTS=e},clearStorage:function(e){t.clearTileCache(e)},workerUrl:\\\"\\\"};return Jn}),r},\\\"object\\\"==typeof r&&\\\"undefined\\\"!=typeof e?e.exports=i():(n=n||self).mapboxgl=i()},{}],427:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){for(var e=1<<t+1,r=new Array(e),n=0;n<e;++n)r[n]=a(t,n);return r};var n=t(\\\"convex-hull\\\");function i(t,e,r){for(var n=new Array(t),i=0;i<t;++i)n[i]=0,i===e&&(n[i]+=.5),i===r&&(n[i]+=.5);return n}function a(t,e){if(0===e||e===(1<<t+1)-1)return[];for(var r=[],a=[],o=0;o<=t;++o)if(e&1<<o){r.push(i(t,o-1,o-1)),a.push(null);for(var s=0;s<=t;++s)~e&1<<s&&(r.push(i(t,o-1,s-1)),a.push([o,s]))}var l=n(r),c=[];t:for(o=0;o<l.length;++o){var u=l[o],h=[];for(s=0;s<u.length;++s){if(!a[u[s]])continue t;h.push(a[u[s]].slice())}c.push(h)}return c}},{\\\"convex-hull\\\":130}],428:[function(t,e,r){var n=t(\\\"./normalize\\\"),i=t(\\\"gl-mat4/create\\\"),a=t(\\\"gl-mat4/clone\\\"),o=t(\\\"gl-mat4/determinant\\\"),s=t(\\\"gl-mat4/invert\\\"),l=t(\\\"gl-mat4/transpose\\\"),c={length:t(\\\"gl-vec3/length\\\"),normalize:t(\\\"gl-vec3/normalize\\\"),dot:t(\\\"gl-vec3/dot\\\"),cross:t(\\\"gl-vec3/cross\\\")},u=i(),h=i(),f=[0,0,0,0],p=[[0,0,0],[0,0,0],[0,0,0]],d=[0,0,0];function g(t,e,r,n,i){t[0]=e[0]*n+r[0]*i,t[1]=e[1]*n+r[1]*i,t[2]=e[2]*n+r[2]*i}e.exports=function(t,e,r,i,v,m){if(e||(e=[0,0,0]),r||(r=[0,0,0]),i||(i=[0,0,0]),v||(v=[0,0,0,1]),m||(m=[0,0,0,1]),!n(u,t))return!1;if(a(h,u),h[3]=0,h[7]=0,h[11]=0,h[15]=1,Math.abs(o(h)<1e-8))return!1;var y,x,b,_,w,k,T,A=u[3],M=u[7],S=u[11],E=u[12],C=u[13],L=u[14],P=u[15];if(0!==A||0!==M||0!==S){if(f[0]=A,f[1]=M,f[2]=S,f[3]=P,!s(h,h))return!1;l(h,h),y=v,b=h,_=(x=f)[0],w=x[1],k=x[2],T=x[3],y[0]=b[0]*_+b[4]*w+b[8]*k+b[12]*T,y[1]=b[1]*_+b[5]*w+b[9]*k+b[13]*T,y[2]=b[2]*_+b[6]*w+b[10]*k+b[14]*T,y[3]=b[3]*_+b[7]*w+b[11]*k+b[15]*T}else v[0]=v[1]=v[2]=0,v[3]=1;if(e[0]=E,e[1]=C,e[2]=L,function(t,e){t[0][0]=e[0],t[0][1]=e[1],t[0][2]=e[2],t[1][0]=e[4],t[1][1]=e[5],t[1][2]=e[6],t[2][0]=e[8],t[2][1]=e[9],t[2][2]=e[10]}(p,u),r[0]=c.length(p[0]),c.normalize(p[0],p[0]),i[0]=c.dot(p[0],p[1]),g(p[1],p[1],p[0],1,-i[0]),r[1]=c.length(p[1]),c.normalize(p[1],p[1]),i[0]/=r[1],i[1]=c.dot(p[0],p[2]),g(p[2],p[2],p[0],1,-i[1]),i[2]=c.dot(p[1],p[2]),g(p[2],p[2],p[1],1,-i[2]),r[2]=c.length(p[2]),c.normalize(p[2],p[2]),i[1]/=r[2],i[2]/=r[2],c.cross(d,p[1],p[2]),c.dot(p[0],d)<0)for(var O=0;O<3;O++)r[O]*=-1,p[O][0]*=-1,p[O][1]*=-1,p[O][2]*=-1;return m[0]=.5*Math.sqrt(Math.max(1+p[0][0]-p[1][1]-p[2][2],0)),m[1]=.5*Math.sqrt(Math.max(1-p[0][0]+p[1][1]-p[2][2],0)),m[2]=.5*Math.sqrt(Math.max(1-p[0][0]-p[1][1]+p[2][2],0)),m[3]=.5*Math.sqrt(Math.max(1+p[0][0]+p[1][1]+p[2][2],0)),p[2][1]>p[1][2]&&(m[0]=-m[0]),p[0][2]>p[2][0]&&(m[1]=-m[1]),p[1][0]>p[0][1]&&(m[2]=-m[2]),!0}},{\\\"./normalize\\\":429,\\\"gl-mat4/clone\\\":259,\\\"gl-mat4/create\\\":260,\\\"gl-mat4/determinant\\\":261,\\\"gl-mat4/invert\\\":265,\\\"gl-mat4/transpose\\\":276,\\\"gl-vec3/cross\\\":334,\\\"gl-vec3/dot\\\":339,\\\"gl-vec3/length\\\":349,\\\"gl-vec3/normalize\\\":356}],429:[function(t,e,r){e.exports=function(t,e){var r=e[15];if(0===r)return!1;for(var n=1/r,i=0;i<16;i++)t[i]=e[i]*n;return!0}},{}],430:[function(t,e,r){var n=t(\\\"gl-vec3/lerp\\\"),i=t(\\\"mat4-recompose\\\"),a=t(\\\"mat4-decompose\\\"),o=t(\\\"gl-mat4/determinant\\\"),s=t(\\\"quat-slerp\\\"),l=h(),c=h(),u=h();function h(){return{translate:f(),scale:f(1),skew:f(),perspective:[0,0,0,1],quaternion:[0,0,0,1]}}function f(t){return[t||0,t||0,t||0]}e.exports=function(t,e,r,h){if(0===o(e)||0===o(r))return!1;var f=a(e,l.translate,l.scale,l.skew,l.perspective,l.quaternion),p=a(r,c.translate,c.scale,c.skew,c.perspective,c.quaternion);return!(!f||!p||(n(u.translate,l.translate,c.translate,h),n(u.skew,l.skew,c.skew,h),n(u.scale,l.scale,c.scale,h),n(u.perspective,l.perspective,c.perspective,h),s(u.quaternion,l.quaternion,c.quaternion,h),i(t,u.translate,u.scale,u.skew,u.perspective,u.quaternion),0))}},{\\\"gl-mat4/determinant\\\":261,\\\"gl-vec3/lerp\\\":350,\\\"mat4-decompose\\\":428,\\\"mat4-recompose\\\":431,\\\"quat-slerp\\\":483}],431:[function(t,e,r){var n={identity:t(\\\"gl-mat4/identity\\\"),translate:t(\\\"gl-mat4/translate\\\"),multiply:t(\\\"gl-mat4/multiply\\\"),create:t(\\\"gl-mat4/create\\\"),scale:t(\\\"gl-mat4/scale\\\"),fromRotationTranslation:t(\\\"gl-mat4/fromRotationTranslation\\\")},i=(n.create(),n.create());e.exports=function(t,e,r,a,o,s){return n.identity(t),n.fromRotationTranslation(t,s,e),t[3]=o[0],t[7]=o[1],t[11]=o[2],t[15]=o[3],n.identity(i),0!==a[2]&&(i[9]=a[2],n.multiply(t,t,i)),0!==a[1]&&(i[9]=0,i[8]=a[1],n.multiply(t,t,i)),0!==a[0]&&(i[8]=0,i[4]=a[0],n.multiply(t,t,i)),n.scale(t,t,r),t}},{\\\"gl-mat4/create\\\":260,\\\"gl-mat4/fromRotationTranslation\\\":263,\\\"gl-mat4/identity\\\":264,\\\"gl-mat4/multiply\\\":267,\\\"gl-mat4/scale\\\":274,\\\"gl-mat4/translate\\\":275}],432:[function(t,e,r){\\\"use strict\\\";e.exports=Math.log2||function(t){return Math.log(t)*Math.LOG2E}},{}],433:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"binary-search-bounds\\\"),i=t(\\\"mat4-interpolate\\\"),a=t(\\\"gl-mat4/invert\\\"),o=t(\\\"gl-mat4/rotateX\\\"),s=t(\\\"gl-mat4/rotateY\\\"),l=t(\\\"gl-mat4/rotateZ\\\"),c=t(\\\"gl-mat4/lookAt\\\"),u=t(\\\"gl-mat4/translate\\\"),h=(t(\\\"gl-mat4/scale\\\"),t(\\\"gl-vec3/normalize\\\")),f=[0,0,0];function p(t){this._components=t.slice(),this._time=[0],this.prevMatrix=t.slice(),this.nextMatrix=t.slice(),this.computedMatrix=t.slice(),this.computedInverse=t.slice(),this.computedEye=[0,0,0],this.computedUp=[0,0,0],this.computedCenter=[0,0,0],this.computedRadius=[0],this._limits=[-1/0,1/0]}e.exports=function(t){return new p((t=t||{}).matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])};var d=p.prototype;d.recalcMatrix=function(t){var e=this._time,r=n.le(e,t),o=this.computedMatrix;if(!(r<0)){var s=this._components;if(r===e.length-1)for(var l=16*r,c=0;c<16;++c)o[c]=s[l++];else{var u=e[r+1]-e[r],f=(l=16*r,this.prevMatrix),p=!0;for(c=0;c<16;++c)f[c]=s[l++];var d=this.nextMatrix;for(c=0;c<16;++c)d[c]=s[l++],p=p&&f[c]===d[c];if(u<1e-6||p)for(c=0;c<16;++c)o[c]=f[c];else i(o,f,d,(t-e[r])/u)}var g=this.computedUp;g[0]=o[1],g[1]=o[5],g[2]=o[9],h(g,g);var v=this.computedInverse;a(v,o);var m=this.computedEye,y=v[15];m[0]=v[12]/y,m[1]=v[13]/y,m[2]=v[14]/y;var x=this.computedCenter,b=Math.exp(this.computedRadius[0]);for(c=0;c<3;++c)x[c]=m[c]-o[2+4*c]*b}},d.idle=function(t){if(!(t<this.lastT())){for(var e=this._components,r=e.length-16,n=0;n<16;++n)e.push(e[r++]);this._time.push(t)}},d.flush=function(t){var e=n.gt(this._time,t)-2;e<0||(this._time.splice(0,e),this._components.splice(0,16*e))},d.lastT=function(){return this._time[this._time.length-1]},d.lookAt=function(t,e,r,n){this.recalcMatrix(t),e=e||this.computedEye,r=r||f,n=n||this.computedUp,this.setMatrix(t,c(this.computedMatrix,e,r,n));for(var i=0,a=0;a<3;++a)i+=Math.pow(r[a]-e[a],2);i=Math.log(Math.sqrt(i)),this.computedRadius[0]=i},d.rotate=function(t,e,r,n){this.recalcMatrix(t);var i=this.computedInverse;e&&s(i,i,e),r&&o(i,i,r),n&&l(i,i,n),this.setMatrix(t,a(this.computedMatrix,i))};var g=[0,0,0];d.pan=function(t,e,r,n){g[0]=-(e||0),g[1]=-(r||0),g[2]=-(n||0),this.recalcMatrix(t);var i=this.computedInverse;u(i,i,g),this.setMatrix(t,a(i,i))},d.translate=function(t,e,r,n){g[0]=e||0,g[1]=r||0,g[2]=n||0,this.recalcMatrix(t);var i=this.computedMatrix;u(i,i,g),this.setMatrix(t,i)},d.setMatrix=function(t,e){if(!(t<this.lastT())){this._time.push(t);for(var r=0;r<16;++r)this._components.push(e[r])}},d.setDistance=function(t,e){this.computedRadius[0]=e},d.setDistanceLimits=function(t,e){var r=this._limits;r[0]=t,r[1]=e},d.getDistanceLimits=function(t){var e=this._limits;return t?(t[0]=e[0],t[1]=e[1],t):e}},{\\\"binary-search-bounds\\\":91,\\\"gl-mat4/invert\\\":265,\\\"gl-mat4/lookAt\\\":266,\\\"gl-mat4/rotateX\\\":271,\\\"gl-mat4/rotateY\\\":272,\\\"gl-mat4/rotateZ\\\":273,\\\"gl-mat4/scale\\\":274,\\\"gl-mat4/translate\\\":275,\\\"gl-vec3/normalize\\\":356,\\\"mat4-interpolate\\\":430}],434:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){var e=t.length;if(e<3){for(var r=new Array(e),i=0;i<e;++i)r[i]=i;return 2===e&&t[0][0]===t[1][0]&&t[0][1]===t[1][1]?[0]:r}for(var a=new Array(e),i=0;i<e;++i)a[i]=i;a.sort(function(e,r){var n=t[e][0]-t[r][0];return n||t[e][1]-t[r][1]});for(var o=[a[0],a[1]],s=[a[0],a[1]],i=2;i<e;++i){for(var l=a[i],c=t[l],u=o.length;u>1&&n(t[o[u-2]],t[o[u-1]],c)<=0;)u-=1,o.pop();for(o.push(l),u=s.length;u>1&&n(t[s[u-2]],t[s[u-1]],c)>=0;)u-=1,s.pop();s.push(l)}for(var r=new Array(s.length+o.length-2),h=0,i=0,f=o.length;i<f;++i)r[h++]=o[i];for(var p=s.length-2;p>0;--p)r[h++]=s[p];return r};var n=t(\\\"robust-orientation\\\")[3]},{\\\"robust-orientation\\\":510}],435:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){e||(e=t,t=window);var r=0,i=0,a=0,o={shift:!1,alt:!1,control:!1,meta:!1},s=!1;function l(t){var e=!1;return\\\"altKey\\\"in t&&(e=e||t.altKey!==o.alt,o.alt=!!t.altKey),\\\"shiftKey\\\"in t&&(e=e||t.shiftKey!==o.shift,o.shift=!!t.shiftKey),\\\"ctrlKey\\\"in t&&(e=e||t.ctrlKey!==o.control,o.control=!!t.ctrlKey),\\\"metaKey\\\"in t&&(e=e||t.metaKey!==o.meta,o.meta=!!t.metaKey),e}function c(t,s){var c=n.x(s),u=n.y(s);\\\"buttons\\\"in s&&(t=0|s.buttons),(t!==r||c!==i||u!==a||l(s))&&(r=0|t,i=c||0,a=u||0,e&&e(r,i,a,o))}function u(t){c(0,t)}function h(){(r||i||a||o.shift||o.alt||o.meta||o.control)&&(i=a=0,r=0,o.shift=o.alt=o.control=o.meta=!1,e&&e(0,0,0,o))}function f(t){l(t)&&e&&e(r,i,a,o)}function p(t){0===n.buttons(t)?c(0,t):c(r,t)}function d(t){c(r|n.buttons(t),t)}function g(t){c(r&~n.buttons(t),t)}function v(){s||(s=!0,t.addEventListener(\\\"mousemove\\\",p),t.addEventListener(\\\"mousedown\\\",d),t.addEventListener(\\\"mouseup\\\",g),t.addEventListener(\\\"mouseleave\\\",u),t.addEventListener(\\\"mouseenter\\\",u),t.addEventListener(\\\"mouseout\\\",u),t.addEventListener(\\\"mouseover\\\",u),t.addEventListener(\\\"blur\\\",h),t.addEventListener(\\\"keyup\\\",f),t.addEventListener(\\\"keydown\\\",f),t.addEventListener(\\\"keypress\\\",f),t!==window&&(window.addEventListener(\\\"blur\\\",h),window.addEventListener(\\\"keyup\\\",f),window.addEventListener(\\\"keydown\\\",f),window.addEventListener(\\\"keypress\\\",f)))}v();var m={element:t};return Object.defineProperties(m,{enabled:{get:function(){return s},set:function(e){e?v():s&&(s=!1,t.removeEventListener(\\\"mousemove\\\",p),t.removeEventListener(\\\"mousedown\\\",d),t.removeEventListener(\\\"mouseup\\\",g),t.removeEventListener(\\\"mouseleave\\\",u),t.removeEventListener(\\\"mouseenter\\\",u),t.removeEventListener(\\\"mouseout\\\",u),t.removeEventListener(\\\"mouseover\\\",u),t.removeEventListener(\\\"blur\\\",h),t.removeEventListener(\\\"keyup\\\",f),t.removeEventListener(\\\"keydown\\\",f),t.removeEventListener(\\\"keypress\\\",f),t!==window&&(window.removeEventListener(\\\"blur\\\",h),window.removeEventListener(\\\"keyup\\\",f),window.removeEventListener(\\\"keydown\\\",f),window.removeEventListener(\\\"keypress\\\",f)))},enumerable:!0},buttons:{get:function(){return r},enumerable:!0},x:{get:function(){return i},enumerable:!0},y:{get:function(){return a},enumerable:!0},mods:{get:function(){return o},enumerable:!0}}),m};var n=t(\\\"mouse-event\\\")},{\\\"mouse-event\\\":437}],436:[function(t,e,r){var n={left:0,top:0};e.exports=function(t,e,r){e=e||t.currentTarget||t.srcElement,Array.isArray(r)||(r=[0,0]);var i=t.clientX||0,a=t.clientY||0,o=(s=e,s===window||s===document||s===document.body?n:s.getBoundingClientRect());var s;return r[0]=i-o.left,r[1]=a-o.top,r}},{}],437:[function(t,e,r){\\\"use strict\\\";function n(t){return t.target||t.srcElement||window}r.buttons=function(t){if(\\\"object\\\"==typeof t){if(\\\"buttons\\\"in t)return t.buttons;if(\\\"which\\\"in t){if(2===(e=t.which))return 4;if(3===e)return 2;if(e>0)return 1<<e-1}else if(\\\"button\\\"in t){var e;if(1===(e=t.button))return 4;if(2===e)return 2;if(e>=0)return 1<<e}}return 0},r.element=n,r.x=function(t){if(\\\"object\\\"==typeof t){if(\\\"offsetX\\\"in t)return t.offsetX;var e=n(t).getBoundingClientRect();return t.clientX-e.left}return 0},r.y=function(t){if(\\\"object\\\"==typeof t){if(\\\"offsetY\\\"in t)return t.offsetY;var e=n(t).getBoundingClientRect();return t.clientY-e.top}return 0}},{}],438:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"to-px\\\");e.exports=function(t,e,r){\\\"function\\\"==typeof t&&(r=!!e,e=t,t=window);var i=n(\\\"ex\\\",t),a=function(t){r&&t.preventDefault();var n=t.deltaX||0,a=t.deltaY||0,o=t.deltaZ||0,s=t.deltaMode,l=1;switch(s){case 1:l=i;break;case 2:l=window.innerHeight}if(a*=l,o*=l,(n*=l)||a||o)return e(n,a,o,t)};return t.addEventListener(\\\"wheel\\\",a),a}},{\\\"to-px\\\":539}],439:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"typedarray-pool\\\");function i(t){return\\\"a\\\"+t}function a(t){return\\\"d\\\"+t}function o(t,e){return\\\"c\\\"+t+\\\"_\\\"+e}function s(t){return\\\"s\\\"+t}function l(t,e){return\\\"t\\\"+t+\\\"_\\\"+e}function c(t){return\\\"o\\\"+t}function u(t){return\\\"x\\\"+t}function h(t){return\\\"p\\\"+t}function f(t,e){return\\\"d\\\"+t+\\\"_\\\"+e}function p(t){return\\\"i\\\"+t}function d(t,e){return\\\"u\\\"+t+\\\"_\\\"+e}function g(t){return\\\"b\\\"+t}function v(t){return\\\"y\\\"+t}function m(t){return\\\"e\\\"+t}function y(t){return\\\"v\\\"+t}e.exports=function(t){function e(t){throw new Error(\\\"ndarray-extract-contour: \\\"+t)}\\\"object\\\"!=typeof t&&e(\\\"Must specify arguments\\\");var r=t.order;Array.isArray(r)||e(\\\"Must specify order\\\");var M=t.arrayArguments||1;M<1&&e(\\\"Must have at least one array argument\\\");var S=t.scalarArguments||0;S<0&&e(\\\"Scalar arg count must be > 0\\\");\\\"function\\\"!=typeof t.vertex&&e(\\\"Must specify vertex creation function\\\");\\\"function\\\"!=typeof t.cell&&e(\\\"Must specify cell creation function\\\");\\\"function\\\"!=typeof t.phase&&e(\\\"Must specify phase function\\\");for(var E=t.getters||[],C=new Array(M),L=0;L<M;++L)E.indexOf(L)>=0?C[L]=!0:C[L]=!1;return function(t,e,r,M,S,E){var C=E.length,L=S.length;if(L<2)throw new Error(\\\"ndarray-extract-contour: Dimension must be at least 2\\\");for(var P=\\\"extractContour\\\"+S.join(\\\"_\\\"),O=[],z=[],I=[],D=0;D<C;++D)I.push(i(D));for(var D=0;D<M;++D)I.push(u(D));for(var D=0;D<L;++D)z.push(s(D)+\\\"=\\\"+i(0)+\\\".shape[\\\"+D+\\\"]|0\\\");for(var D=0;D<C;++D){z.push(a(D)+\\\"=\\\"+i(D)+\\\".data\\\",c(D)+\\\"=\\\"+i(D)+\\\".offset|0\\\");for(var R=0;R<L;++R)z.push(l(D,R)+\\\"=\\\"+i(D)+\\\".stride[\\\"+R+\\\"]|0\\\")}for(var D=0;D<C;++D){z.push(h(D)+\\\"=\\\"+c(D)),z.push(o(D,0));for(var R=1;R<1<<L;++R){for(var F=[],B=0;B<L;++B)R&1<<B&&F.push(\\\"-\\\"+l(D,B));z.push(f(D,R)+\\\"=(\\\"+F.join(\\\"\\\")+\\\")|0\\\"),z.push(o(D,R)+\\\"=0\\\")}}for(var D=0;D<C;++D)for(var R=0;R<L;++R){var N=[l(D,S[R])];R>0&&N.push(l(D,S[R-1])+\\\"*\\\"+s(S[R-1])),z.push(d(D,S[R])+\\\"=(\\\"+N.join(\\\"-\\\")+\\\")|0\\\")}for(var D=0;D<L;++D)z.push(p(D)+\\\"=0\\\");z.push(_+\\\"=0\\\");for(var j=[\\\"2\\\"],D=L-2;D>=0;--D)j.push(s(S[D]));z.push(w+\\\"=(\\\"+j.join(\\\"*\\\")+\\\")|0\\\",b+\\\"=mallocUint32(\\\"+w+\\\")\\\",x+\\\"=mallocUint32(\\\"+w+\\\")\\\",k+\\\"=0\\\"),z.push(g(0)+\\\"=0\\\");for(var R=1;R<1<<L;++R){for(var U=[],V=[],B=0;B<L;++B)R&1<<B&&(0===V.length?U.push(\\\"1\\\"):U.unshift(V.join(\\\"*\\\"))),V.push(s(S[B]));var q=\\\"\\\";U[0].indexOf(s(S[L-2]))<0&&(q=\\\"-\\\");var H=A(L,R,S);z.push(m(H)+\\\"=(-\\\"+U.join(\\\"-\\\")+\\\")|0\\\",v(H)+\\\"=(\\\"+q+U.join(\\\"-\\\")+\\\")|0\\\",g(H)+\\\"=0\\\")}function G(t,e){O.push(\\\"for(\\\",p(S[t]),\\\"=\\\",e,\\\";\\\",p(S[t]),\\\"<\\\",s(S[t]),\\\";\\\",\\\"++\\\",p(S[t]),\\\"){\\\")}function Y(t){for(var e=0;e<C;++e)O.push(h(e),\\\"+=\\\",d(e,S[t]),\\\";\\\");O.push(\\\"}\\\")}function W(){for(var t=1;t<1<<L;++t)O.push(T,\\\"=\\\",m(t),\\\";\\\",m(t),\\\"=\\\",v(t),\\\";\\\",v(t),\\\"=\\\",T,\\\";\\\")}z.push(y(0)+\\\"=0\\\",T+\\\"=0\\\"),function t(e,r){if(e<0)return void function(t){for(var e=0;e<C;++e)E[e]?O.push(o(e,0),\\\"=\\\",a(e),\\\".get(\\\",h(e),\\\");\\\"):O.push(o(e,0),\\\"=\\\",a(e),\\\"[\\\",h(e),\\\"];\\\");for(var r=[],e=0;e<C;++e)r.push(o(e,0));for(var e=0;e<M;++e)r.push(u(e));O.push(g(0),\\\"=\\\",b,\\\"[\\\",k,\\\"]=phase(\\\",r.join(),\\\");\\\");for(var n=1;n<1<<L;++n)O.push(g(n),\\\"=\\\",b,\\\"[\\\",k,\\\"+\\\",m(n),\\\"];\\\");for(var i=[],n=1;n<1<<L;++n)i.push(\\\"(\\\"+g(0)+\\\"!==\\\"+g(n)+\\\")\\\");O.push(\\\"if(\\\",i.join(\\\"||\\\"),\\\"){\\\");for(var s=[],e=0;e<L;++e)s.push(p(e));for(var e=0;e<C;++e){s.push(o(e,0));for(var n=1;n<1<<L;++n)E[e]?O.push(o(e,n),\\\"=\\\",a(e),\\\".get(\\\",h(e),\\\"+\\\",f(e,n),\\\");\\\"):O.push(o(e,n),\\\"=\\\",a(e),\\\"[\\\",h(e),\\\"+\\\",f(e,n),\\\"];\\\"),s.push(o(e,n))}for(var e=0;e<1<<L;++e)s.push(g(e));for(var e=0;e<M;++e)s.push(u(e));O.push(\\\"vertex(\\\",s.join(),\\\");\\\",y(0),\\\"=\\\",x,\\\"[\\\",k,\\\"]=\\\",_,\\\"++;\\\");for(var l=(1<<L)-1,c=g(l),n=0;n<L;++n)if(0==(t&~(1<<n))){for(var d=l^1<<n,v=g(d),w=[],T=d;T>0;T=T-1&d)w.push(x+\\\"[\\\"+k+\\\"+\\\"+m(T)+\\\"]\\\");w.push(y(0));for(var T=0;T<C;++T)1&n?w.push(o(T,l),o(T,d)):w.push(o(T,d),o(T,l));1&n?w.push(c,v):w.push(v,c);for(var T=0;T<M;++T)w.push(u(T));O.push(\\\"if(\\\",c,\\\"!==\\\",v,\\\"){\\\",\\\"face(\\\",w.join(),\\\")}\\\")}O.push(\\\"}\\\",k,\\\"+=1;\\\")}(r);!function(t){for(var e=t-1;e>=0;--e)G(e,0);for(var r=[],e=0;e<C;++e)E[e]?r.push(a(e)+\\\".get(\\\"+h(e)+\\\")\\\"):r.push(a(e)+\\\"[\\\"+h(e)+\\\"]\\\");for(var e=0;e<M;++e)r.push(u(e));O.push(b,\\\"[\\\",k,\\\"++]=phase(\\\",r.join(),\\\");\\\");for(var e=0;e<t;++e)Y(e);for(var n=0;n<C;++n)O.push(h(n),\\\"+=\\\",d(n,S[t]),\\\";\\\")}(e);O.push(\\\"if(\\\",s(S[e]),\\\">0){\\\",p(S[e]),\\\"=1;\\\");t(e-1,r|1<<S[e]);for(var n=0;n<C;++n)O.push(h(n),\\\"+=\\\",d(n,S[e]),\\\";\\\");e===L-1&&(O.push(k,\\\"=0;\\\"),W());G(e,2);t(e-1,r);e===L-1&&(O.push(\\\"if(\\\",p(S[L-1]),\\\"&1){\\\",k,\\\"=0;}\\\"),W());Y(e);O.push(\\\"}\\\")}(L-1,0),O.push(\\\"freeUint32(\\\",x,\\\");freeUint32(\\\",b,\\\");\\\");var X=[\\\"'use strict';\\\",\\\"function \\\",P,\\\"(\\\",I.join(),\\\"){\\\",\\\"var \\\",z.join(),\\\";\\\",O.join(\\\"\\\"),\\\"}\\\",\\\"return \\\",P].join(\\\"\\\");return new Function(\\\"vertex\\\",\\\"face\\\",\\\"phase\\\",\\\"mallocUint32\\\",\\\"freeUint32\\\",X)(t,e,r,n.mallocUint32,n.freeUint32)}(t.vertex,t.cell,t.phase,S,r,C)};var x=\\\"V\\\",b=\\\"P\\\",_=\\\"N\\\",w=\\\"Q\\\",k=\\\"X\\\",T=\\\"T\\\";function A(t,e,r){for(var n=0,i=0;i<t;++i)e&1<<i&&(n|=1<<r[i]);return n}},{\\\"typedarray-pool\\\":545}],440:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"cwise/lib/wrapper\\\")({args:[\\\"index\\\",\\\"array\\\",\\\"scalar\\\"],pre:{body:\\\"{}\\\",args:[],thisVars:[],localVars:[]},body:{body:\\\"{_inline_1_arg1_=_inline_1_arg2_.apply(void 0,_inline_1_arg0_)}\\\",args:[{name:\\\"_inline_1_arg0_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_1_arg1_\\\",lvalue:!0,rvalue:!1,count:1},{name:\\\"_inline_1_arg2_\\\",lvalue:!1,rvalue:!0,count:1}],thisVars:[],localVars:[]},post:{body:\\\"{}\\\",args:[],thisVars:[],localVars:[]},debug:!1,funcName:\\\"cwise\\\",blockSize:64});e.exports=function(t,e){return n(t,e),t}},{\\\"cwise/lib/wrapper\\\":149}],441:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r){if(Array.isArray(r)){if(r.length!==e.dimension)throw new Error(\\\"ndarray-gradient: invalid boundary conditions\\\")}else r=n(e.dimension,\\\"string\\\"==typeof r?r:\\\"clamp\\\");if(t.dimension!==e.dimension+1)throw new Error(\\\"ndarray-gradient: output dimension must be +1 input dimension\\\");if(t.shape[e.dimension]!==e.dimension)throw new Error(\\\"ndarray-gradient: output shape must match input shape\\\");for(var i=0;i<e.dimension;++i)if(t.shape[i]!==e.shape[i])throw new Error(\\\"ndarray-gradient: shape mismatch\\\");if(0===e.size)return t;if(e.dimension<=0)return t.set(0),t;return function(t){var e=t.join();if(m=o[e])return m;var r=t.length,n=[\\\"function gradient(dst,src){var s=src.shape.slice();\\\"];function i(e){for(var i=r-e.length,a=[],o=[],s=[],l=0;l<r;++l)e.indexOf(l+1)>=0?s.push(\\\"0\\\"):e.indexOf(-(l+1))>=0?s.push(\\\"s[\\\"+l+\\\"]-1\\\"):(s.push(\\\"-1\\\"),a.push(\\\"1\\\"),o.push(\\\"s[\\\"+l+\\\"]-2\\\"));var c=\\\".lo(\\\"+a.join()+\\\").hi(\\\"+o.join()+\\\")\\\";if(0===a.length&&(c=\\\"\\\"),i>0){n.push(\\\"if(1\\\");for(var l=0;l<r;++l)e.indexOf(l+1)>=0||e.indexOf(-(l+1))>=0||n.push(\\\"&&s[\\\",l,\\\"]>2\\\");n.push(\\\"){grad\\\",i,\\\"(src.pick(\\\",s.join(),\\\")\\\",c);for(var l=0;l<r;++l)e.indexOf(l+1)>=0||e.indexOf(-(l+1))>=0||n.push(\\\",dst.pick(\\\",s.join(),\\\",\\\",l,\\\")\\\",c);n.push(\\\");\\\")}for(var l=0;l<e.length;++l){var u=Math.abs(e[l])-1,h=\\\"dst.pick(\\\"+s.join()+\\\",\\\"+u+\\\")\\\"+c;switch(t[u]){case\\\"clamp\\\":var f=s.slice(),p=s.slice();e[l]<0?f[u]=\\\"s[\\\"+u+\\\"]-2\\\":p[u]=\\\"1\\\",0===i?n.push(\\\"if(s[\\\",u,\\\"]>1){dst.set(\\\",s.join(),\\\",\\\",u,\\\",0.5*(src.get(\\\",f.join(),\\\")-src.get(\\\",p.join(),\\\")))}else{dst.set(\\\",s.join(),\\\",\\\",u,\\\",0)};\\\"):n.push(\\\"if(s[\\\",u,\\\"]>1){diff(\\\",h,\\\",src.pick(\\\",f.join(),\\\")\\\",c,\\\",src.pick(\\\",p.join(),\\\")\\\",c,\\\");}else{zero(\\\",h,\\\");};\\\");break;case\\\"mirror\\\":0===i?n.push(\\\"dst.set(\\\",s.join(),\\\",\\\",u,\\\",0);\\\"):n.push(\\\"zero(\\\",h,\\\");\\\");break;case\\\"wrap\\\":var d=s.slice(),g=s.slice();e[l]<0?(d[u]=\\\"s[\\\"+u+\\\"]-2\\\",g[u]=\\\"0\\\"):(d[u]=\\\"s[\\\"+u+\\\"]-1\\\",g[u]=\\\"1\\\"),0===i?n.push(\\\"if(s[\\\",u,\\\"]>2){dst.set(\\\",s.join(),\\\",\\\",u,\\\",0.5*(src.get(\\\",d.join(),\\\")-src.get(\\\",g.join(),\\\")))}else{dst.set(\\\",s.join(),\\\",\\\",u,\\\",0)};\\\"):n.push(\\\"if(s[\\\",u,\\\"]>2){diff(\\\",h,\\\",src.pick(\\\",d.join(),\\\")\\\",c,\\\",src.pick(\\\",g.join(),\\\")\\\",c,\\\");}else{zero(\\\",h,\\\");};\\\");break;default:throw new Error(\\\"ndarray-gradient: Invalid boundary condition\\\")}}i>0&&n.push(\\\"};\\\")}for(var s=0;s<1<<r;++s){for(var h=[],f=0;f<r;++f)s&1<<f&&h.push(f+1);for(var p=0;p<1<<h.length;++p){for(var d=h.slice(),f=0;f<h.length;++f)p&1<<f&&(d[f]=-d[f]);i(d)}}n.push(\\\"return dst;};return gradient\\\");for(var g=[\\\"diff\\\",\\\"zero\\\"],v=[l,c],s=1;s<=r;++s)g.push(\\\"grad\\\"+s),v.push(u(s));g.push(n.join(\\\"\\\"));var m=Function.apply(void 0,g).apply(void 0,v);return a[e]=m,m}(r)(t,e)};var n=t(\\\"dup\\\"),i=t(\\\"cwise-compiler\\\"),a={},o={},s={body:\\\"\\\",args:[],thisVars:[],localVars:[]},l=i({args:[\\\"array\\\",\\\"array\\\",\\\"array\\\"],pre:s,post:s,body:{args:[{name:\\\"out\\\",lvalue:!0,rvalue:!1,count:1},{name:\\\"left\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"right\\\",lvalue:!1,rvalue:!0,count:1}],body:\\\"out=0.5*(left-right)\\\",thisVars:[],localVars:[]},funcName:\\\"cdiff\\\"}),c=i({args:[\\\"array\\\"],pre:s,post:s,body:{args:[{name:\\\"out\\\",lvalue:!0,rvalue:!1,count:1}],body:\\\"out=0\\\",thisVars:[],localVars:[]},funcName:\\\"zero\\\"});function u(t){if(t in a)return a[t];for(var e=[],r=0;r<t;++r)e.push(\\\"out\\\",r,\\\"s=0.5*(inp\\\",r,\\\"l-inp\\\",r,\\\"r);\\\");var o=[\\\"array\\\"],l=[\\\"junk\\\"];for(r=0;r<t;++r){o.push(\\\"array\\\"),l.push(\\\"out\\\"+r+\\\"s\\\");var c=n(t);c[r]=-1,o.push({array:0,offset:c.slice()}),c[r]=1,o.push({array:0,offset:c.slice()}),l.push(\\\"inp\\\"+r+\\\"l\\\",\\\"inp\\\"+r+\\\"r\\\")}return a[t]=i({args:o,pre:s,post:s,body:{body:e.join(\\\"\\\"),args:l.map(function(t){return{name:t,lvalue:0===t.indexOf(\\\"out\\\"),rvalue:0===t.indexOf(\\\"inp\\\"),count:\\\"junk\\\"!==t|0}}),thisVars:[],localVars:[]},funcName:\\\"fdTemplate\\\"+t})}},{\\\"cwise-compiler\\\":146,dup:170}],442:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"ndarray-warp\\\"),i=t(\\\"gl-matrix-invert\\\");e.exports=function(t,e,r){var a=e.dimension,o=i([],r);return n(t,e,function(t,e){for(var r=0;r<a;++r){t[r]=o[(a+1)*a+r];for(var n=0;n<a;++n)t[r]+=o[(a+1)*n+r]*e[n]}var i=o[(a+1)*(a+1)-1];for(n=0;n<a;++n)i+=o[(a+1)*n+a]*e[n];var s=1/i;for(r=0;r<a;++r)t[r]*=s;return t}),t}},{\\\"gl-matrix-invert\\\":277,\\\"ndarray-warp\\\":449}],443:[function(t,e,r){\\\"use strict\\\";function n(t,e){var r=Math.floor(e),n=e-r,i=0<=r&&r<t.shape[0],a=0<=r+1&&r+1<t.shape[0];return(1-n)*(i?+t.get(r):0)+n*(a?+t.get(r+1):0)}function i(t,e,r){var n=Math.floor(e),i=e-n,a=0<=n&&n<t.shape[0],o=0<=n+1&&n+1<t.shape[0],s=Math.floor(r),l=r-s,c=0<=s&&s<t.shape[1],u=0<=s+1&&s+1<t.shape[1],h=a&&c?t.get(n,s):0,f=a&&u?t.get(n,s+1):0;return(1-l)*((1-i)*h+i*(o&&c?t.get(n+1,s):0))+l*((1-i)*f+i*(o&&u?t.get(n+1,s+1):0))}function a(t,e,r,n){var i=Math.floor(e),a=e-i,o=0<=i&&i<t.shape[0],s=0<=i+1&&i+1<t.shape[0],l=Math.floor(r),c=r-l,u=0<=l&&l<t.shape[1],h=0<=l+1&&l+1<t.shape[1],f=Math.floor(n),p=n-f,d=0<=f&&f<t.shape[2],g=0<=f+1&&f+1<t.shape[2],v=o&&u&&d?t.get(i,l,f):0,m=o&&h&&d?t.get(i,l+1,f):0,y=s&&u&&d?t.get(i+1,l,f):0,x=s&&h&&d?t.get(i+1,l+1,f):0,b=o&&u&&g?t.get(i,l,f+1):0,_=o&&h&&g?t.get(i,l+1,f+1):0;return(1-p)*((1-c)*((1-a)*v+a*y)+c*((1-a)*m+a*x))+p*((1-c)*((1-a)*b+a*(s&&u&&g?t.get(i+1,l,f+1):0))+c*((1-a)*_+a*(s&&h&&g?t.get(i+1,l+1,f+1):0)))}e.exports=function(t,e,r,o){switch(t.shape.length){case 0:return 0;case 1:return n(t,e);case 2:return i(t,e,r);case 3:return a(t,e,r,o);default:return function(t){var e,r,n=0|t.shape.length,i=new Array(n),a=new Array(n),o=new Array(n),s=new Array(n);for(e=0;e<n;++e)r=+arguments[e+1],i[e]=Math.floor(r),a[e]=r-i[e],o[e]=0<=i[e]&&i[e]<t.shape[e],s[e]=0<=i[e]+1&&i[e]+1<t.shape[e];var l,c,u,h=0;t:for(e=0;e<1<<n;++e){for(c=1,u=t.offset,l=0;l<n;++l)if(e&1<<l){if(!s[l])continue t;c*=a[l],u+=t.stride[l]*(i[l]+1)}else{if(!o[l])continue t;c*=1-a[l],u+=t.stride[l]*i[l]}h+=c*t.data[u]}return h}.apply(void 0,arguments)}},e.exports.d1=n,e.exports.d2=i,e.exports.d3=a},{}],444:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"cwise-compiler\\\"),i={body:\\\"\\\",args:[],thisVars:[],localVars:[]};function a(t){if(!t)return i;for(var e=0;e<t.args.length;++e){var r=t.args[e];t.args[e]=0===e?{name:r,lvalue:!0,rvalue:!!t.rvalue,count:t.count||1}:{name:r,lvalue:!1,rvalue:!0,count:1}}return t.thisVars||(t.thisVars=[]),t.localVars||(t.localVars=[]),t}function o(t){for(var e=[],r=0;r<t.args.length;++r)e.push(\\\"a\\\"+r);return new Function(\\\"P\\\",[\\\"return function \\\",t.funcName,\\\"_ndarrayops(\\\",e.join(\\\",\\\"),\\\") {P(\\\",e.join(\\\",\\\"),\\\");return a0}\\\"].join(\\\"\\\"))(function(t){return n({args:t.args,pre:a(t.pre),body:a(t.body),post:a(t.proc),funcName:t.funcName})}(t))}var s={add:\\\"+\\\",sub:\\\"-\\\",mul:\\\"*\\\",div:\\\"/\\\",mod:\\\"%\\\",band:\\\"&\\\",bor:\\\"|\\\",bxor:\\\"^\\\",lshift:\\\"<<\\\",rshift:\\\">>\\\",rrshift:\\\">>>\\\"};!function(){for(var t in s){var e=s[t];r[t]=o({args:[\\\"array\\\",\\\"array\\\",\\\"array\\\"],body:{args:[\\\"a\\\",\\\"b\\\",\\\"c\\\"],body:\\\"a=b\\\"+e+\\\"c\\\"},funcName:t}),r[t+\\\"eq\\\"]=o({args:[\\\"array\\\",\\\"array\\\"],body:{args:[\\\"a\\\",\\\"b\\\"],body:\\\"a\\\"+e+\\\"=b\\\"},rvalue:!0,funcName:t+\\\"eq\\\"}),r[t+\\\"s\\\"]=o({args:[\\\"array\\\",\\\"array\\\",\\\"scalar\\\"],body:{args:[\\\"a\\\",\\\"b\\\",\\\"s\\\"],body:\\\"a=b\\\"+e+\\\"s\\\"},funcName:t+\\\"s\\\"}),r[t+\\\"seq\\\"]=o({args:[\\\"array\\\",\\\"scalar\\\"],body:{args:[\\\"a\\\",\\\"s\\\"],body:\\\"a\\\"+e+\\\"=s\\\"},rvalue:!0,funcName:t+\\\"seq\\\"})}}();var l={not:\\\"!\\\",bnot:\\\"~\\\",neg:\\\"-\\\",recip:\\\"1.0/\\\"};!function(){for(var t in l){var e=l[t];r[t]=o({args:[\\\"array\\\",\\\"array\\\"],body:{args:[\\\"a\\\",\\\"b\\\"],body:\\\"a=\\\"+e+\\\"b\\\"},funcName:t}),r[t+\\\"eq\\\"]=o({args:[\\\"array\\\"],body:{args:[\\\"a\\\"],body:\\\"a=\\\"+e+\\\"a\\\"},rvalue:!0,count:2,funcName:t+\\\"eq\\\"})}}();var c={and:\\\"&&\\\",or:\\\"||\\\",eq:\\\"===\\\",neq:\\\"!==\\\",lt:\\\"<\\\",gt:\\\">\\\",leq:\\\"<=\\\",geq:\\\">=\\\"};!function(){for(var t in c){var e=c[t];r[t]=o({args:[\\\"array\\\",\\\"array\\\",\\\"array\\\"],body:{args:[\\\"a\\\",\\\"b\\\",\\\"c\\\"],body:\\\"a=b\\\"+e+\\\"c\\\"},funcName:t}),r[t+\\\"s\\\"]=o({args:[\\\"array\\\",\\\"array\\\",\\\"scalar\\\"],body:{args:[\\\"a\\\",\\\"b\\\",\\\"s\\\"],body:\\\"a=b\\\"+e+\\\"s\\\"},funcName:t+\\\"s\\\"}),r[t+\\\"eq\\\"]=o({args:[\\\"array\\\",\\\"array\\\"],body:{args:[\\\"a\\\",\\\"b\\\"],body:\\\"a=a\\\"+e+\\\"b\\\"},rvalue:!0,count:2,funcName:t+\\\"eq\\\"}),r[t+\\\"seq\\\"]=o({args:[\\\"array\\\",\\\"scalar\\\"],body:{args:[\\\"a\\\",\\\"s\\\"],body:\\\"a=a\\\"+e+\\\"s\\\"},rvalue:!0,count:2,funcName:t+\\\"seq\\\"})}}();var u=[\\\"abs\\\",\\\"acos\\\",\\\"asin\\\",\\\"atan\\\",\\\"ceil\\\",\\\"cos\\\",\\\"exp\\\",\\\"floor\\\",\\\"log\\\",\\\"round\\\",\\\"sin\\\",\\\"sqrt\\\",\\\"tan\\\"];!function(){for(var t=0;t<u.length;++t){var e=u[t];r[e]=o({args:[\\\"array\\\",\\\"array\\\"],pre:{args:[],body:\\\"this_f=Math.\\\"+e,thisVars:[\\\"this_f\\\"]},body:{args:[\\\"a\\\",\\\"b\\\"],body:\\\"a=this_f(b)\\\",thisVars:[\\\"this_f\\\"]},funcName:e}),r[e+\\\"eq\\\"]=o({args:[\\\"array\\\"],pre:{args:[],body:\\\"this_f=Math.\\\"+e,thisVars:[\\\"this_f\\\"]},body:{args:[\\\"a\\\"],body:\\\"a=this_f(a)\\\",thisVars:[\\\"this_f\\\"]},rvalue:!0,count:2,funcName:e+\\\"eq\\\"})}}();var h=[\\\"max\\\",\\\"min\\\",\\\"atan2\\\",\\\"pow\\\"];!function(){for(var t=0;t<h.length;++t){var e=h[t];r[e]=o({args:[\\\"array\\\",\\\"array\\\",\\\"array\\\"],pre:{args:[],body:\\\"this_f=Math.\\\"+e,thisVars:[\\\"this_f\\\"]},body:{args:[\\\"a\\\",\\\"b\\\",\\\"c\\\"],body:\\\"a=this_f(b,c)\\\",thisVars:[\\\"this_f\\\"]},funcName:e}),r[e+\\\"s\\\"]=o({args:[\\\"array\\\",\\\"array\\\",\\\"scalar\\\"],pre:{args:[],body:\\\"this_f=Math.\\\"+e,thisVars:[\\\"this_f\\\"]},body:{args:[\\\"a\\\",\\\"b\\\",\\\"c\\\"],body:\\\"a=this_f(b,c)\\\",thisVars:[\\\"this_f\\\"]},funcName:e+\\\"s\\\"}),r[e+\\\"eq\\\"]=o({args:[\\\"array\\\",\\\"array\\\"],pre:{args:[],body:\\\"this_f=Math.\\\"+e,thisVars:[\\\"this_f\\\"]},body:{args:[\\\"a\\\",\\\"b\\\"],body:\\\"a=this_f(a,b)\\\",thisVars:[\\\"this_f\\\"]},rvalue:!0,count:2,funcName:e+\\\"eq\\\"}),r[e+\\\"seq\\\"]=o({args:[\\\"array\\\",\\\"scalar\\\"],pre:{args:[],body:\\\"this_f=Math.\\\"+e,thisVars:[\\\"this_f\\\"]},body:{args:[\\\"a\\\",\\\"b\\\"],body:\\\"a=this_f(a,b)\\\",thisVars:[\\\"this_f\\\"]},rvalue:!0,count:2,funcName:e+\\\"seq\\\"})}}();var f=[\\\"atan2\\\",\\\"pow\\\"];!function(){for(var t=0;t<f.length;++t){var e=f[t];r[e+\\\"op\\\"]=o({args:[\\\"array\\\",\\\"array\\\",\\\"array\\\"],pre:{args:[],body:\\\"this_f=Math.\\\"+e,thisVars:[\\\"this_f\\\"]},body:{args:[\\\"a\\\",\\\"b\\\",\\\"c\\\"],body:\\\"a=this_f(c,b)\\\",thisVars:[\\\"this_f\\\"]},funcName:e+\\\"op\\\"}),r[e+\\\"ops\\\"]=o({args:[\\\"array\\\",\\\"array\\\",\\\"scalar\\\"],pre:{args:[],body:\\\"this_f=Math.\\\"+e,thisVars:[\\\"this_f\\\"]},body:{args:[\\\"a\\\",\\\"b\\\",\\\"c\\\"],body:\\\"a=this_f(c,b)\\\",thisVars:[\\\"this_f\\\"]},funcName:e+\\\"ops\\\"}),r[e+\\\"opeq\\\"]=o({args:[\\\"array\\\",\\\"array\\\"],pre:{args:[],body:\\\"this_f=Math.\\\"+e,thisVars:[\\\"this_f\\\"]},body:{args:[\\\"a\\\",\\\"b\\\"],body:\\\"a=this_f(b,a)\\\",thisVars:[\\\"this_f\\\"]},rvalue:!0,count:2,funcName:e+\\\"opeq\\\"}),r[e+\\\"opseq\\\"]=o({args:[\\\"array\\\",\\\"scalar\\\"],pre:{args:[],body:\\\"this_f=Math.\\\"+e,thisVars:[\\\"this_f\\\"]},body:{args:[\\\"a\\\",\\\"b\\\"],body:\\\"a=this_f(b,a)\\\",thisVars:[\\\"this_f\\\"]},rvalue:!0,count:2,funcName:e+\\\"opseq\\\"})}}(),r.any=n({args:[\\\"array\\\"],pre:i,body:{args:[{name:\\\"a\\\",lvalue:!1,rvalue:!0,count:1}],body:\\\"if(a){return true}\\\",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:\\\"return false\\\"},funcName:\\\"any\\\"}),r.all=n({args:[\\\"array\\\"],pre:i,body:{args:[{name:\\\"x\\\",lvalue:!1,rvalue:!0,count:1}],body:\\\"if(!x){return false}\\\",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:\\\"return true\\\"},funcName:\\\"all\\\"}),r.sum=n({args:[\\\"array\\\"],pre:{args:[],localVars:[],thisVars:[\\\"this_s\\\"],body:\\\"this_s=0\\\"},body:{args:[{name:\\\"a\\\",lvalue:!1,rvalue:!0,count:1}],body:\\\"this_s+=a\\\",localVars:[],thisVars:[\\\"this_s\\\"]},post:{args:[],localVars:[],thisVars:[\\\"this_s\\\"],body:\\\"return this_s\\\"},funcName:\\\"sum\\\"}),r.prod=n({args:[\\\"array\\\"],pre:{args:[],localVars:[],thisVars:[\\\"this_s\\\"],body:\\\"this_s=1\\\"},body:{args:[{name:\\\"a\\\",lvalue:!1,rvalue:!0,count:1}],body:\\\"this_s*=a\\\",localVars:[],thisVars:[\\\"this_s\\\"]},post:{args:[],localVars:[],thisVars:[\\\"this_s\\\"],body:\\\"return this_s\\\"},funcName:\\\"prod\\\"}),r.norm2squared=n({args:[\\\"array\\\"],pre:{args:[],localVars:[],thisVars:[\\\"this_s\\\"],body:\\\"this_s=0\\\"},body:{args:[{name:\\\"a\\\",lvalue:!1,rvalue:!0,count:2}],body:\\\"this_s+=a*a\\\",localVars:[],thisVars:[\\\"this_s\\\"]},post:{args:[],localVars:[],thisVars:[\\\"this_s\\\"],body:\\\"return this_s\\\"},funcName:\\\"norm2squared\\\"}),r.norm2=n({args:[\\\"array\\\"],pre:{args:[],localVars:[],thisVars:[\\\"this_s\\\"],body:\\\"this_s=0\\\"},body:{args:[{name:\\\"a\\\",lvalue:!1,rvalue:!0,count:2}],body:\\\"this_s+=a*a\\\",localVars:[],thisVars:[\\\"this_s\\\"]},post:{args:[],localVars:[],thisVars:[\\\"this_s\\\"],body:\\\"return Math.sqrt(this_s)\\\"},funcName:\\\"norm2\\\"}),r.norminf=n({args:[\\\"array\\\"],pre:{args:[],localVars:[],thisVars:[\\\"this_s\\\"],body:\\\"this_s=0\\\"},body:{args:[{name:\\\"a\\\",lvalue:!1,rvalue:!0,count:4}],body:\\\"if(-a>this_s){this_s=-a}else if(a>this_s){this_s=a}\\\",localVars:[],thisVars:[\\\"this_s\\\"]},post:{args:[],localVars:[],thisVars:[\\\"this_s\\\"],body:\\\"return this_s\\\"},funcName:\\\"norminf\\\"}),r.norm1=n({args:[\\\"array\\\"],pre:{args:[],localVars:[],thisVars:[\\\"this_s\\\"],body:\\\"this_s=0\\\"},body:{args:[{name:\\\"a\\\",lvalue:!1,rvalue:!0,count:3}],body:\\\"this_s+=a<0?-a:a\\\",localVars:[],thisVars:[\\\"this_s\\\"]},post:{args:[],localVars:[],thisVars:[\\\"this_s\\\"],body:\\\"return this_s\\\"},funcName:\\\"norm1\\\"}),r.sup=n({args:[\\\"array\\\"],pre:{body:\\\"this_h=-Infinity\\\",args:[],thisVars:[\\\"this_h\\\"],localVars:[]},body:{body:\\\"if(_inline_1_arg0_>this_h)this_h=_inline_1_arg0_\\\",args:[{name:\\\"_inline_1_arg0_\\\",lvalue:!1,rvalue:!0,count:2}],thisVars:[\\\"this_h\\\"],localVars:[]},post:{body:\\\"return this_h\\\",args:[],thisVars:[\\\"this_h\\\"],localVars:[]}}),r.inf=n({args:[\\\"array\\\"],pre:{body:\\\"this_h=Infinity\\\",args:[],thisVars:[\\\"this_h\\\"],localVars:[]},body:{body:\\\"if(_inline_1_arg0_<this_h)this_h=_inline_1_arg0_\\\",args:[{name:\\\"_inline_1_arg0_\\\",lvalue:!1,rvalue:!0,count:2}],thisVars:[\\\"this_h\\\"],localVars:[]},post:{body:\\\"return this_h\\\",args:[],thisVars:[\\\"this_h\\\"],localVars:[]}}),r.argmin=n({args:[\\\"index\\\",\\\"array\\\",\\\"shape\\\"],pre:{body:\\\"{this_v=Infinity;this_i=_inline_0_arg2_.slice(0)}\\\",args:[{name:\\\"_inline_0_arg0_\\\",lvalue:!1,rvalue:!1,count:0},{name:\\\"_inline_0_arg1_\\\",lvalue:!1,rvalue:!1,count:0},{name:\\\"_inline_0_arg2_\\\",lvalue:!1,rvalue:!0,count:1}],thisVars:[\\\"this_i\\\",\\\"this_v\\\"],localVars:[]},body:{body:\\\"{if(_inline_1_arg1_<this_v){this_v=_inline_1_arg1_;for(var _inline_1_k=0;_inline_1_k<_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]=_inline_1_arg0_[_inline_1_k]}}}\\\",args:[{name:\\\"_inline_1_arg0_\\\",lvalue:!1,rvalue:!0,count:2},{name:\\\"_inline_1_arg1_\\\",lvalue:!1,rvalue:!0,count:2}],thisVars:[\\\"this_i\\\",\\\"this_v\\\"],localVars:[\\\"_inline_1_k\\\"]},post:{body:\\\"{return this_i}\\\",args:[],thisVars:[\\\"this_i\\\"],localVars:[]}}),r.argmax=n({args:[\\\"index\\\",\\\"array\\\",\\\"shape\\\"],pre:{body:\\\"{this_v=-Infinity;this_i=_inline_0_arg2_.slice(0)}\\\",args:[{name:\\\"_inline_0_arg0_\\\",lvalue:!1,rvalue:!1,count:0},{name:\\\"_inline_0_arg1_\\\",lvalue:!1,rvalue:!1,count:0},{name:\\\"_inline_0_arg2_\\\",lvalue:!1,rvalue:!0,count:1}],thisVars:[\\\"this_i\\\",\\\"this_v\\\"],localVars:[]},body:{body:\\\"{if(_inline_1_arg1_>this_v){this_v=_inline_1_arg1_;for(var _inline_1_k=0;_inline_1_k<_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]=_inline_1_arg0_[_inline_1_k]}}}\\\",args:[{name:\\\"_inline_1_arg0_\\\",lvalue:!1,rvalue:!0,count:2},{name:\\\"_inline_1_arg1_\\\",lvalue:!1,rvalue:!0,count:2}],thisVars:[\\\"this_i\\\",\\\"this_v\\\"],localVars:[\\\"_inline_1_k\\\"]},post:{body:\\\"{return this_i}\\\",args:[],thisVars:[\\\"this_i\\\"],localVars:[]}}),r.random=o({args:[\\\"array\\\"],pre:{args:[],body:\\\"this_f=Math.random\\\",thisVars:[\\\"this_f\\\"]},body:{args:[\\\"a\\\"],body:\\\"a=this_f()\\\",thisVars:[\\\"this_f\\\"]},funcName:\\\"random\\\"}),r.assign=o({args:[\\\"array\\\",\\\"array\\\"],body:{args:[\\\"a\\\",\\\"b\\\"],body:\\\"a=b\\\"},funcName:\\\"assign\\\"}),r.assigns=o({args:[\\\"array\\\",\\\"scalar\\\"],body:{args:[\\\"a\\\",\\\"b\\\"],body:\\\"a=b\\\"},funcName:\\\"assigns\\\"}),r.equals=n({args:[\\\"array\\\",\\\"array\\\"],pre:i,body:{args:[{name:\\\"x\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"y\\\",lvalue:!1,rvalue:!0,count:1}],body:\\\"if(x!==y){return false}\\\",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:\\\"return true\\\"},funcName:\\\"equals\\\"})},{\\\"cwise-compiler\\\":146}],445:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"ndarray\\\"),i=t(\\\"./doConvert.js\\\");e.exports=function(t,e){for(var r=[],a=t,o=1;Array.isArray(a);)r.push(a.length),o*=a.length,a=a[0];return 0===r.length?n():(e||(e=n(new Float64Array(o),r)),i(e,t),e)}},{\\\"./doConvert.js\\\":446,ndarray:450}],446:[function(t,e,r){e.exports=t(\\\"cwise-compiler\\\")({args:[\\\"array\\\",\\\"scalar\\\",\\\"index\\\"],pre:{body:\\\"{}\\\",args:[],thisVars:[],localVars:[]},body:{body:\\\"{\\\\nvar _inline_1_v=_inline_1_arg1_,_inline_1_i\\\\nfor(_inline_1_i=0;_inline_1_i<_inline_1_arg2_.length-1;++_inline_1_i) {\\\\n_inline_1_v=_inline_1_v[_inline_1_arg2_[_inline_1_i]]\\\\n}\\\\n_inline_1_arg0_=_inline_1_v[_inline_1_arg2_[_inline_1_arg2_.length-1]]\\\\n}\\\",args:[{name:\\\"_inline_1_arg0_\\\",lvalue:!0,rvalue:!1,count:1},{name:\\\"_inline_1_arg1_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_1_arg2_\\\",lvalue:!1,rvalue:!0,count:4}],thisVars:[],localVars:[\\\"_inline_1_i\\\",\\\"_inline_1_v\\\"]},post:{body:\\\"{}\\\",args:[],thisVars:[],localVars:[]},funcName:\\\"convert\\\",blockSize:64})},{\\\"cwise-compiler\\\":146}],447:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"typedarray-pool\\\"),i=32;function a(t){switch(t){case\\\"uint8\\\":return[n.mallocUint8,n.freeUint8];case\\\"uint16\\\":return[n.mallocUint16,n.freeUint16];case\\\"uint32\\\":return[n.mallocUint32,n.freeUint32];case\\\"int8\\\":return[n.mallocInt8,n.freeInt8];case\\\"int16\\\":return[n.mallocInt16,n.freeInt16];case\\\"int32\\\":return[n.mallocInt32,n.freeInt32];case\\\"float32\\\":return[n.mallocFloat,n.freeFloat];case\\\"float64\\\":return[n.mallocDouble,n.freeDouble];default:return null}}function o(t){for(var e=[],r=0;r<t;++r)e.push(\\\"s\\\"+r);for(r=0;r<t;++r)e.push(\\\"n\\\"+r);for(r=1;r<t;++r)e.push(\\\"d\\\"+r);for(r=1;r<t;++r)e.push(\\\"e\\\"+r);for(r=1;r<t;++r)e.push(\\\"f\\\"+r);return e}e.exports=function(t,e){var r=[\\\"'use strict'\\\"],n=[\\\"ndarraySortWrapper\\\",t.join(\\\"d\\\"),e].join(\\\"\\\");r.push([\\\"function \\\",n,\\\"(\\\",[\\\"array\\\"].join(\\\",\\\"),\\\"){\\\"].join(\\\"\\\"));for(var s=[\\\"data=array.data,offset=array.offset|0,shape=array.shape,stride=array.stride\\\"],l=0;l<t.length;++l)s.push([\\\"s\\\",l,\\\"=stride[\\\",l,\\\"]|0,n\\\",l,\\\"=shape[\\\",l,\\\"]|0\\\"].join(\\\"\\\"));var c=new Array(t.length),u=[];for(l=0;l<t.length;++l)0!==(p=t[l])&&(0===u.length?c[p]=\\\"1\\\":c[p]=u.join(\\\"*\\\"),u.push(\\\"n\\\"+p));var h=-1,f=-1;for(l=0;l<t.length;++l){var p,d=t[l];0!==d&&(h>0?s.push([\\\"d\\\",d,\\\"=s\\\",d,\\\"-d\\\",h,\\\"*n\\\",h].join(\\\"\\\")):s.push([\\\"d\\\",d,\\\"=s\\\",d].join(\\\"\\\")),h=d),0!=(p=t.length-1-l)&&(f>0?s.push([\\\"e\\\",p,\\\"=s\\\",p,\\\"-e\\\",f,\\\"*n\\\",f,\\\",f\\\",p,\\\"=\\\",c[p],\\\"-f\\\",f,\\\"*n\\\",f].join(\\\"\\\")):s.push([\\\"e\\\",p,\\\"=s\\\",p,\\\",f\\\",p,\\\"=\\\",c[p]].join(\\\"\\\")),f=p)}r.push(\\\"var \\\"+s.join(\\\",\\\"));var g=[\\\"0\\\",\\\"n0-1\\\",\\\"data\\\",\\\"offset\\\"].concat(o(t.length));r.push([\\\"if(n0<=\\\",i,\\\"){\\\",\\\"insertionSort(\\\",g.join(\\\",\\\"),\\\")}else{\\\",\\\"quickSort(\\\",g.join(\\\",\\\"),\\\")}\\\"].join(\\\"\\\")),r.push(\\\"}return \\\"+n);var v=new Function(\\\"insertionSort\\\",\\\"quickSort\\\",r.join(\\\"\\\\n\\\")),m=function(t,e){var r=[\\\"'use strict'\\\"],n=[\\\"ndarrayInsertionSort\\\",t.join(\\\"d\\\"),e].join(\\\"\\\"),i=[\\\"left\\\",\\\"right\\\",\\\"data\\\",\\\"offset\\\"].concat(o(t.length)),s=a(e),l=[\\\"i,j,cptr,ptr=left*s0+offset\\\"];if(t.length>1){for(var c=[],u=1;u<t.length;++u)l.push(\\\"i\\\"+u),c.push(\\\"n\\\"+u);s?l.push(\\\"scratch=malloc(\\\"+c.join(\\\"*\\\")+\\\")\\\"):l.push(\\\"scratch=new Array(\\\"+c.join(\\\"*\\\")+\\\")\\\"),l.push(\\\"dptr\\\",\\\"sptr\\\",\\\"a\\\",\\\"b\\\")}else l.push(\\\"scratch\\\");function h(t){return\\\"generic\\\"===e?[\\\"data.get(\\\",t,\\\")\\\"].join(\\\"\\\"):[\\\"data[\\\",t,\\\"]\\\"].join(\\\"\\\")}function f(t,r){return\\\"generic\\\"===e?[\\\"data.set(\\\",t,\\\",\\\",r,\\\")\\\"].join(\\\"\\\"):[\\\"data[\\\",t,\\\"]=\\\",r].join(\\\"\\\")}if(r.push([\\\"function \\\",n,\\\"(\\\",i.join(\\\",\\\"),\\\"){var \\\",l.join(\\\",\\\")].join(\\\"\\\"),\\\"for(i=left+1;i<=right;++i){\\\",\\\"j=i;ptr+=s0\\\",\\\"cptr=ptr\\\"),t.length>1){for(r.push(\\\"dptr=0;sptr=ptr\\\"),u=t.length-1;u>=0;--u)0!==(p=t[u])&&r.push([\\\"for(i\\\",p,\\\"=0;i\\\",p,\\\"<n\\\",p,\\\";++i\\\",p,\\\"){\\\"].join(\\\"\\\"));for(r.push(\\\"scratch[dptr++]=\\\",h(\\\"sptr\\\")),u=0;u<t.length;++u)0!==(p=t[u])&&r.push(\\\"sptr+=d\\\"+p,\\\"}\\\");for(r.push(\\\"__g:while(j--\\\\x3eleft){\\\",\\\"dptr=0\\\",\\\"sptr=cptr-s0\\\"),u=1;u<t.length;++u)1===u&&r.push(\\\"__l:\\\"),r.push([\\\"for(i\\\",u,\\\"=0;i\\\",u,\\\"<n\\\",u,\\\";++i\\\",u,\\\"){\\\"].join(\\\"\\\"));for(r.push([\\\"a=\\\",h(\\\"sptr\\\"),\\\"\\\\nb=scratch[dptr]\\\\nif(a<b){break __g}\\\\nif(a>b){break __l}\\\"].join(\\\"\\\")),u=t.length-1;u>=1;--u)r.push(\\\"sptr+=e\\\"+u,\\\"dptr+=f\\\"+u,\\\"}\\\");for(r.push(\\\"dptr=cptr;sptr=cptr-s0\\\"),u=t.length-1;u>=0;--u)0!==(p=t[u])&&r.push([\\\"for(i\\\",p,\\\"=0;i\\\",p,\\\"<n\\\",p,\\\";++i\\\",p,\\\"){\\\"].join(\\\"\\\"));for(r.push(f(\\\"dptr\\\",h(\\\"sptr\\\"))),u=0;u<t.length;++u)0!==(p=t[u])&&r.push([\\\"dptr+=d\\\",p,\\\";sptr+=d\\\",p].join(\\\"\\\"),\\\"}\\\");for(r.push(\\\"cptr-=s0\\\\n}\\\"),r.push(\\\"dptr=cptr;sptr=0\\\"),u=t.length-1;u>=0;--u)0!==(p=t[u])&&r.push([\\\"for(i\\\",p,\\\"=0;i\\\",p,\\\"<n\\\",p,\\\";++i\\\",p,\\\"){\\\"].join(\\\"\\\"));for(r.push(f(\\\"dptr\\\",\\\"scratch[sptr++]\\\")),u=0;u<t.length;++u){var p;0!==(p=t[u])&&r.push(\\\"dptr+=d\\\"+p,\\\"}\\\")}}else r.push(\\\"scratch=\\\"+h(\\\"ptr\\\"),\\\"while((j--\\\\x3eleft)&&(\\\"+h(\\\"cptr-s0\\\")+\\\">scratch)){\\\",f(\\\"cptr\\\",h(\\\"cptr-s0\\\")),\\\"cptr-=s0\\\",\\\"}\\\",f(\\\"cptr\\\",\\\"scratch\\\"));return r.push(\\\"}\\\"),t.length>1&&s&&r.push(\\\"free(scratch)\\\"),r.push(\\\"} return \\\"+n),s?new Function(\\\"malloc\\\",\\\"free\\\",r.join(\\\"\\\\n\\\"))(s[0],s[1]):new Function(r.join(\\\"\\\\n\\\"))()}(t,e),y=function(t,e,r){var n=[\\\"'use strict'\\\"],s=[\\\"ndarrayQuickSort\\\",t.join(\\\"d\\\"),e].join(\\\"\\\"),l=[\\\"left\\\",\\\"right\\\",\\\"data\\\",\\\"offset\\\"].concat(o(t.length)),c=a(e),u=0;n.push([\\\"function \\\",s,\\\"(\\\",l.join(\\\",\\\"),\\\"){\\\"].join(\\\"\\\"));var h=[\\\"sixth=((right-left+1)/6)|0\\\",\\\"index1=left+sixth\\\",\\\"index5=right-sixth\\\",\\\"index3=(left+right)>>1\\\",\\\"index2=index3-sixth\\\",\\\"index4=index3+sixth\\\",\\\"el1=index1\\\",\\\"el2=index2\\\",\\\"el3=index3\\\",\\\"el4=index4\\\",\\\"el5=index5\\\",\\\"less=left+1\\\",\\\"great=right-1\\\",\\\"pivots_are_equal=true\\\",\\\"tmp\\\",\\\"tmp0\\\",\\\"x\\\",\\\"y\\\",\\\"z\\\",\\\"k\\\",\\\"ptr0\\\",\\\"ptr1\\\",\\\"ptr2\\\",\\\"comp_pivot1=0\\\",\\\"comp_pivot2=0\\\",\\\"comp=0\\\"];if(t.length>1){for(var f=[],p=1;p<t.length;++p)f.push(\\\"n\\\"+p),h.push(\\\"i\\\"+p);for(p=0;p<8;++p)h.push(\\\"b_ptr\\\"+p);h.push(\\\"ptr3\\\",\\\"ptr4\\\",\\\"ptr5\\\",\\\"ptr6\\\",\\\"ptr7\\\",\\\"pivot_ptr\\\",\\\"ptr_shift\\\",\\\"elementSize=\\\"+f.join(\\\"*\\\")),c?h.push(\\\"pivot1=malloc(elementSize)\\\",\\\"pivot2=malloc(elementSize)\\\"):h.push(\\\"pivot1=new Array(elementSize),pivot2=new Array(elementSize)\\\")}else h.push(\\\"pivot1\\\",\\\"pivot2\\\");function d(t){return[\\\"(offset+\\\",t,\\\"*s0)\\\"].join(\\\"\\\")}function g(t){return\\\"generic\\\"===e?[\\\"data.get(\\\",t,\\\")\\\"].join(\\\"\\\"):[\\\"data[\\\",t,\\\"]\\\"].join(\\\"\\\")}function v(t,r){return\\\"generic\\\"===e?[\\\"data.set(\\\",t,\\\",\\\",r,\\\")\\\"].join(\\\"\\\"):[\\\"data[\\\",t,\\\"]=\\\",r].join(\\\"\\\")}function m(e,r,i){if(1===e.length)n.push(\\\"ptr0=\\\"+d(e[0]));else for(var a=0;a<e.length;++a)n.push([\\\"b_ptr\\\",a,\\\"=s0*\\\",e[a]].join(\\\"\\\"));for(r&&n.push(\\\"pivot_ptr=0\\\"),n.push(\\\"ptr_shift=offset\\\"),a=t.length-1;a>=0;--a)0!==(o=t[a])&&n.push([\\\"for(i\\\",o,\\\"=0;i\\\",o,\\\"<n\\\",o,\\\";++i\\\",o,\\\"){\\\"].join(\\\"\\\"));if(e.length>1)for(a=0;a<e.length;++a)n.push([\\\"ptr\\\",a,\\\"=b_ptr\\\",a,\\\"+ptr_shift\\\"].join(\\\"\\\"));for(n.push(i),r&&n.push(\\\"++pivot_ptr\\\"),a=0;a<t.length;++a){var o;0!==(o=t[a])&&(e.length>1?n.push(\\\"ptr_shift+=d\\\"+o):n.push(\\\"ptr0+=d\\\"+o),n.push(\\\"}\\\"))}}function y(e,r,i,a){if(1===r.length)n.push(\\\"ptr0=\\\"+d(r[0]));else{for(var o=0;o<r.length;++o)n.push([\\\"b_ptr\\\",o,\\\"=s0*\\\",r[o]].join(\\\"\\\"));n.push(\\\"ptr_shift=offset\\\")}for(i&&n.push(\\\"pivot_ptr=0\\\"),e&&n.push(e+\\\":\\\"),o=1;o<t.length;++o)n.push([\\\"for(i\\\",o,\\\"=0;i\\\",o,\\\"<n\\\",o,\\\";++i\\\",o,\\\"){\\\"].join(\\\"\\\"));if(r.length>1)for(o=0;o<r.length;++o)n.push([\\\"ptr\\\",o,\\\"=b_ptr\\\",o,\\\"+ptr_shift\\\"].join(\\\"\\\"));for(n.push(a),o=t.length-1;o>=1;--o)i&&n.push(\\\"pivot_ptr+=f\\\"+o),r.length>1?n.push(\\\"ptr_shift+=e\\\"+o):n.push(\\\"ptr0+=e\\\"+o),n.push(\\\"}\\\")}function x(){t.length>1&&c&&n.push(\\\"free(pivot1)\\\",\\\"free(pivot2)\\\")}function b(e,r){var i=\\\"el\\\"+e,a=\\\"el\\\"+r;if(t.length>1){var o=\\\"__l\\\"+ ++u;y(o,[i,a],!1,[\\\"comp=\\\",g(\\\"ptr0\\\"),\\\"-\\\",g(\\\"ptr1\\\"),\\\"\\\\n\\\",\\\"if(comp>0){tmp0=\\\",i,\\\";\\\",i,\\\"=\\\",a,\\\";\\\",a,\\\"=tmp0;break \\\",o,\\\"}\\\\n\\\",\\\"if(comp<0){break \\\",o,\\\"}\\\"].join(\\\"\\\"))}else n.push([\\\"if(\\\",g(d(i)),\\\">\\\",g(d(a)),\\\"){tmp0=\\\",i,\\\";\\\",i,\\\"=\\\",a,\\\";\\\",a,\\\"=tmp0}\\\"].join(\\\"\\\"))}function _(e,r){t.length>1?m([e,r],!1,v(\\\"ptr0\\\",g(\\\"ptr1\\\"))):n.push(v(d(e),g(d(r))))}function w(e,r,i){if(t.length>1){var a=\\\"__l\\\"+ ++u;y(a,[r],!0,[e,\\\"=\\\",g(\\\"ptr0\\\"),\\\"-pivot\\\",i,\\\"[pivot_ptr]\\\\n\\\",\\\"if(\\\",e,\\\"!==0){break \\\",a,\\\"}\\\"].join(\\\"\\\"))}else n.push([e,\\\"=\\\",g(d(r)),\\\"-pivot\\\",i].join(\\\"\\\"))}function k(e,r){t.length>1?m([e,r],!1,[\\\"tmp=\\\",g(\\\"ptr0\\\"),\\\"\\\\n\\\",v(\\\"ptr0\\\",g(\\\"ptr1\\\")),\\\"\\\\n\\\",v(\\\"ptr1\\\",\\\"tmp\\\")].join(\\\"\\\")):n.push([\\\"ptr0=\\\",d(e),\\\"\\\\n\\\",\\\"ptr1=\\\",d(r),\\\"\\\\n\\\",\\\"tmp=\\\",g(\\\"ptr0\\\"),\\\"\\\\n\\\",v(\\\"ptr0\\\",g(\\\"ptr1\\\")),\\\"\\\\n\\\",v(\\\"ptr1\\\",\\\"tmp\\\")].join(\\\"\\\"))}function T(e,r,i){t.length>1?(m([e,r,i],!1,[\\\"tmp=\\\",g(\\\"ptr0\\\"),\\\"\\\\n\\\",v(\\\"ptr0\\\",g(\\\"ptr1\\\")),\\\"\\\\n\\\",v(\\\"ptr1\\\",g(\\\"ptr2\\\")),\\\"\\\\n\\\",v(\\\"ptr2\\\",\\\"tmp\\\")].join(\\\"\\\")),n.push(\\\"++\\\"+r,\\\"--\\\"+i)):n.push([\\\"ptr0=\\\",d(e),\\\"\\\\n\\\",\\\"ptr1=\\\",d(r),\\\"\\\\n\\\",\\\"ptr2=\\\",d(i),\\\"\\\\n\\\",\\\"++\\\",r,\\\"\\\\n\\\",\\\"--\\\",i,\\\"\\\\n\\\",\\\"tmp=\\\",g(\\\"ptr0\\\"),\\\"\\\\n\\\",v(\\\"ptr0\\\",g(\\\"ptr1\\\")),\\\"\\\\n\\\",v(\\\"ptr1\\\",g(\\\"ptr2\\\")),\\\"\\\\n\\\",v(\\\"ptr2\\\",\\\"tmp\\\")].join(\\\"\\\"))}function A(t,e){k(t,e),n.push(\\\"--\\\"+e)}function M(e,r,i){t.length>1?m([e,r],!0,[v(\\\"ptr0\\\",g(\\\"ptr1\\\")),\\\"\\\\n\\\",v(\\\"ptr1\\\",[\\\"pivot\\\",i,\\\"[pivot_ptr]\\\"].join(\\\"\\\"))].join(\\\"\\\")):n.push(v(d(e),g(d(r))),v(d(r),\\\"pivot\\\"+i))}function S(e,r){n.push([\\\"if((\\\",r,\\\"-\\\",e,\\\")<=\\\",i,\\\"){\\\\n\\\",\\\"insertionSort(\\\",e,\\\",\\\",r,\\\",data,offset,\\\",o(t.length).join(\\\",\\\"),\\\")\\\\n\\\",\\\"}else{\\\\n\\\",s,\\\"(\\\",e,\\\",\\\",r,\\\",data,offset,\\\",o(t.length).join(\\\",\\\"),\\\")\\\\n\\\",\\\"}\\\"].join(\\\"\\\"))}function E(e,r,i){t.length>1?(n.push([\\\"__l\\\",++u,\\\":while(true){\\\"].join(\\\"\\\")),m([e],!0,[\\\"if(\\\",g(\\\"ptr0\\\"),\\\"!==pivot\\\",r,\\\"[pivot_ptr]){break __l\\\",u,\\\"}\\\"].join(\\\"\\\")),n.push(i,\\\"}\\\")):n.push([\\\"while(\\\",g(d(e)),\\\"===pivot\\\",r,\\\"){\\\",i,\\\"}\\\"].join(\\\"\\\"))}return n.push(\\\"var \\\"+h.join(\\\",\\\")),b(1,2),b(4,5),b(1,3),b(2,3),b(1,4),b(3,4),b(2,5),b(2,3),b(4,5),t.length>1?m([\\\"el1\\\",\\\"el2\\\",\\\"el3\\\",\\\"el4\\\",\\\"el5\\\",\\\"index1\\\",\\\"index3\\\",\\\"index5\\\"],!0,[\\\"pivot1[pivot_ptr]=\\\",g(\\\"ptr1\\\"),\\\"\\\\n\\\",\\\"pivot2[pivot_ptr]=\\\",g(\\\"ptr3\\\"),\\\"\\\\n\\\",\\\"pivots_are_equal=pivots_are_equal&&(pivot1[pivot_ptr]===pivot2[pivot_ptr])\\\\n\\\",\\\"x=\\\",g(\\\"ptr0\\\"),\\\"\\\\n\\\",\\\"y=\\\",g(\\\"ptr2\\\"),\\\"\\\\n\\\",\\\"z=\\\",g(\\\"ptr4\\\"),\\\"\\\\n\\\",v(\\\"ptr5\\\",\\\"x\\\"),\\\"\\\\n\\\",v(\\\"ptr6\\\",\\\"y\\\"),\\\"\\\\n\\\",v(\\\"ptr7\\\",\\\"z\\\")].join(\\\"\\\")):n.push([\\\"pivot1=\\\",g(d(\\\"el2\\\")),\\\"\\\\n\\\",\\\"pivot2=\\\",g(d(\\\"el4\\\")),\\\"\\\\n\\\",\\\"pivots_are_equal=pivot1===pivot2\\\\n\\\",\\\"x=\\\",g(d(\\\"el1\\\")),\\\"\\\\n\\\",\\\"y=\\\",g(d(\\\"el3\\\")),\\\"\\\\n\\\",\\\"z=\\\",g(d(\\\"el5\\\")),\\\"\\\\n\\\",v(d(\\\"index1\\\"),\\\"x\\\"),\\\"\\\\n\\\",v(d(\\\"index3\\\"),\\\"y\\\"),\\\"\\\\n\\\",v(d(\\\"index5\\\"),\\\"z\\\")].join(\\\"\\\")),_(\\\"index2\\\",\\\"left\\\"),_(\\\"index4\\\",\\\"right\\\"),n.push(\\\"if(pivots_are_equal){\\\"),n.push(\\\"for(k=less;k<=great;++k){\\\"),w(\\\"comp\\\",\\\"k\\\",1),n.push(\\\"if(comp===0){continue}\\\"),n.push(\\\"if(comp<0){\\\"),n.push(\\\"if(k!==less){\\\"),k(\\\"k\\\",\\\"less\\\"),n.push(\\\"}\\\"),n.push(\\\"++less\\\"),n.push(\\\"}else{\\\"),n.push(\\\"while(true){\\\"),w(\\\"comp\\\",\\\"great\\\",1),n.push(\\\"if(comp>0){\\\"),n.push(\\\"great--\\\"),n.push(\\\"}else if(comp<0){\\\"),T(\\\"k\\\",\\\"less\\\",\\\"great\\\"),n.push(\\\"break\\\"),n.push(\\\"}else{\\\"),A(\\\"k\\\",\\\"great\\\"),n.push(\\\"break\\\"),n.push(\\\"}\\\"),n.push(\\\"}\\\"),n.push(\\\"}\\\"),n.push(\\\"}\\\"),n.push(\\\"}else{\\\"),n.push(\\\"for(k=less;k<=great;++k){\\\"),w(\\\"comp_pivot1\\\",\\\"k\\\",1),n.push(\\\"if(comp_pivot1<0){\\\"),n.push(\\\"if(k!==less){\\\"),k(\\\"k\\\",\\\"less\\\"),n.push(\\\"}\\\"),n.push(\\\"++less\\\"),n.push(\\\"}else{\\\"),w(\\\"comp_pivot2\\\",\\\"k\\\",2),n.push(\\\"if(comp_pivot2>0){\\\"),n.push(\\\"while(true){\\\"),w(\\\"comp\\\",\\\"great\\\",2),n.push(\\\"if(comp>0){\\\"),n.push(\\\"if(--great<k){break}\\\"),n.push(\\\"continue\\\"),n.push(\\\"}else{\\\"),w(\\\"comp\\\",\\\"great\\\",1),n.push(\\\"if(comp<0){\\\"),T(\\\"k\\\",\\\"less\\\",\\\"great\\\"),n.push(\\\"}else{\\\"),A(\\\"k\\\",\\\"great\\\"),n.push(\\\"}\\\"),n.push(\\\"break\\\"),n.push(\\\"}\\\"),n.push(\\\"}\\\"),n.push(\\\"}\\\"),n.push(\\\"}\\\"),n.push(\\\"}\\\"),n.push(\\\"}\\\"),M(\\\"left\\\",\\\"(less-1)\\\",1),M(\\\"right\\\",\\\"(great+1)\\\",2),S(\\\"left\\\",\\\"(less-2)\\\"),S(\\\"(great+2)\\\",\\\"right\\\"),n.push(\\\"if(pivots_are_equal){\\\"),x(),n.push(\\\"return\\\"),n.push(\\\"}\\\"),n.push(\\\"if(less<index1&&great>index5){\\\"),E(\\\"less\\\",1,\\\"++less\\\"),E(\\\"great\\\",2,\\\"--great\\\"),n.push(\\\"for(k=less;k<=great;++k){\\\"),w(\\\"comp_pivot1\\\",\\\"k\\\",1),n.push(\\\"if(comp_pivot1===0){\\\"),n.push(\\\"if(k!==less){\\\"),k(\\\"k\\\",\\\"less\\\"),n.push(\\\"}\\\"),n.push(\\\"++less\\\"),n.push(\\\"}else{\\\"),w(\\\"comp_pivot2\\\",\\\"k\\\",2),n.push(\\\"if(comp_pivot2===0){\\\"),n.push(\\\"while(true){\\\"),w(\\\"comp\\\",\\\"great\\\",2),n.push(\\\"if(comp===0){\\\"),n.push(\\\"if(--great<k){break}\\\"),n.push(\\\"continue\\\"),n.push(\\\"}else{\\\"),w(\\\"comp\\\",\\\"great\\\",1),n.push(\\\"if(comp<0){\\\"),T(\\\"k\\\",\\\"less\\\",\\\"great\\\"),n.push(\\\"}else{\\\"),A(\\\"k\\\",\\\"great\\\"),n.push(\\\"}\\\"),n.push(\\\"break\\\"),n.push(\\\"}\\\"),n.push(\\\"}\\\"),n.push(\\\"}\\\"),n.push(\\\"}\\\"),n.push(\\\"}\\\"),n.push(\\\"}\\\"),x(),S(\\\"less\\\",\\\"great\\\"),n.push(\\\"}return \\\"+s),t.length>1&&c?new Function(\\\"insertionSort\\\",\\\"malloc\\\",\\\"free\\\",n.join(\\\"\\\\n\\\"))(r,c[0],c[1]):new Function(\\\"insertionSort\\\",n.join(\\\"\\\\n\\\"))(r)}(t,e,m);return v(m,y)}},{\\\"typedarray-pool\\\":545}],448:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./lib/compile_sort.js\\\"),i={};e.exports=function(t){var e=t.order,r=t.dtype,a=[e,r].join(\\\":\\\"),o=i[a];return o||(i[a]=o=n(e,r)),o(t),t}},{\\\"./lib/compile_sort.js\\\":447}],449:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"ndarray-linear-interpolate\\\"),i=t(\\\"cwise/lib/wrapper\\\")({args:[\\\"index\\\",\\\"array\\\",\\\"scalar\\\",\\\"scalar\\\",\\\"scalar\\\"],pre:{body:\\\"{this_warped=new Array(_inline_3_arg4_)}\\\",args:[{name:\\\"_inline_3_arg0_\\\",lvalue:!1,rvalue:!1,count:0},{name:\\\"_inline_3_arg1_\\\",lvalue:!1,rvalue:!1,count:0},{name:\\\"_inline_3_arg2_\\\",lvalue:!1,rvalue:!1,count:0},{name:\\\"_inline_3_arg3_\\\",lvalue:!1,rvalue:!1,count:0},{name:\\\"_inline_3_arg4_\\\",lvalue:!1,rvalue:!0,count:1}],thisVars:[\\\"this_warped\\\"],localVars:[]},body:{body:\\\"{_inline_4_arg2_(this_warped,_inline_4_arg0_),_inline_4_arg1_=_inline_4_arg3_.apply(void 0,this_warped)}\\\",args:[{name:\\\"_inline_4_arg0_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_4_arg1_\\\",lvalue:!0,rvalue:!1,count:1},{name:\\\"_inline_4_arg2_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_4_arg3_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_4_arg4_\\\",lvalue:!1,rvalue:!1,count:0}],thisVars:[\\\"this_warped\\\"],localVars:[]},post:{body:\\\"{}\\\",args:[],thisVars:[],localVars:[]},debug:!1,funcName:\\\"warpND\\\",blockSize:64}),a=t(\\\"cwise/lib/wrapper\\\")({args:[\\\"index\\\",\\\"array\\\",\\\"scalar\\\",\\\"scalar\\\",\\\"scalar\\\"],pre:{body:\\\"{this_warped=[0]}\\\",args:[],thisVars:[\\\"this_warped\\\"],localVars:[]},body:{body:\\\"{_inline_7_arg2_(this_warped,_inline_7_arg0_),_inline_7_arg1_=_inline_7_arg3_(_inline_7_arg4_,this_warped[0])}\\\",args:[{name:\\\"_inline_7_arg0_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_7_arg1_\\\",lvalue:!0,rvalue:!1,count:1},{name:\\\"_inline_7_arg2_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_7_arg3_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_7_arg4_\\\",lvalue:!1,rvalue:!0,count:1}],thisVars:[\\\"this_warped\\\"],localVars:[]},post:{body:\\\"{}\\\",args:[],thisVars:[],localVars:[]},debug:!1,funcName:\\\"warp1D\\\",blockSize:64}),o=t(\\\"cwise/lib/wrapper\\\")({args:[\\\"index\\\",\\\"array\\\",\\\"scalar\\\",\\\"scalar\\\",\\\"scalar\\\"],pre:{body:\\\"{this_warped=[0,0]}\\\",args:[],thisVars:[\\\"this_warped\\\"],localVars:[]},body:{body:\\\"{_inline_10_arg2_(this_warped,_inline_10_arg0_),_inline_10_arg1_=_inline_10_arg3_(_inline_10_arg4_,this_warped[0],this_warped[1])}\\\",args:[{name:\\\"_inline_10_arg0_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_10_arg1_\\\",lvalue:!0,rvalue:!1,count:1},{name:\\\"_inline_10_arg2_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_10_arg3_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_10_arg4_\\\",lvalue:!1,rvalue:!0,count:1}],thisVars:[\\\"this_warped\\\"],localVars:[]},post:{body:\\\"{}\\\",args:[],thisVars:[],localVars:[]},debug:!1,funcName:\\\"warp2D\\\",blockSize:64}),s=t(\\\"cwise/lib/wrapper\\\")({args:[\\\"index\\\",\\\"array\\\",\\\"scalar\\\",\\\"scalar\\\",\\\"scalar\\\"],pre:{body:\\\"{this_warped=[0,0,0]}\\\",args:[],thisVars:[\\\"this_warped\\\"],localVars:[]},body:{body:\\\"{_inline_13_arg2_(this_warped,_inline_13_arg0_),_inline_13_arg1_=_inline_13_arg3_(_inline_13_arg4_,this_warped[0],this_warped[1],this_warped[2])}\\\",args:[{name:\\\"_inline_13_arg0_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_13_arg1_\\\",lvalue:!0,rvalue:!1,count:1},{name:\\\"_inline_13_arg2_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_13_arg3_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_13_arg4_\\\",lvalue:!1,rvalue:!0,count:1}],thisVars:[\\\"this_warped\\\"],localVars:[]},post:{body:\\\"{}\\\",args:[],thisVars:[],localVars:[]},debug:!1,funcName:\\\"warp3D\\\",blockSize:64});e.exports=function(t,e,r){switch(e.shape.length){case 1:a(t,r,n.d1,e);break;case 2:o(t,r,n.d2,e);break;case 3:s(t,r,n.d3,e);break;default:i(t,r,n.bind(void 0,e),e.shape.length)}return t}},{\\\"cwise/lib/wrapper\\\":149,\\\"ndarray-linear-interpolate\\\":443}],450:[function(t,e,r){var n=t(\\\"iota-array\\\"),i=t(\\\"is-buffer\\\"),a=\\\"undefined\\\"!=typeof Float64Array;function o(t,e){return t[0]-e[0]}function s(){var t,e=this.stride,r=new Array(e.length);for(t=0;t<r.length;++t)r[t]=[Math.abs(e[t]),t];r.sort(o);var n=new Array(r.length);for(t=0;t<n.length;++t)n[t]=r[t][1];return n}function l(t,e){var r=[\\\"View\\\",e,\\\"d\\\",t].join(\\\"\\\");e<0&&(r=\\\"View_Nil\\\"+t);var i=\\\"generic\\\"===t;if(-1===e){var a=\\\"function \\\"+r+\\\"(a){this.data=a;};var proto=\\\"+r+\\\".prototype;proto.dtype='\\\"+t+\\\"';proto.index=function(){return -1};proto.size=0;proto.dimension=-1;proto.shape=proto.stride=proto.order=[];proto.lo=proto.hi=proto.transpose=proto.step=function(){return new \\\"+r+\\\"(this.data);};proto.get=proto.set=function(){};proto.pick=function(){return null};return function construct_\\\"+r+\\\"(a){return new \\\"+r+\\\"(a);}\\\";return new Function(a)()}if(0===e){a=\\\"function \\\"+r+\\\"(a,d) {this.data = a;this.offset = d};var proto=\\\"+r+\\\".prototype;proto.dtype='\\\"+t+\\\"';proto.index=function(){return this.offset};proto.dimension=0;proto.size=1;proto.shape=proto.stride=proto.order=[];proto.lo=proto.hi=proto.transpose=proto.step=function \\\"+r+\\\"_copy() {return new \\\"+r+\\\"(this.data,this.offset)};proto.pick=function \\\"+r+\\\"_pick(){return TrivialArray(this.data);};proto.valueOf=proto.get=function \\\"+r+\\\"_get(){return \\\"+(i?\\\"this.data.get(this.offset)\\\":\\\"this.data[this.offset]\\\")+\\\"};proto.set=function \\\"+r+\\\"_set(v){return \\\"+(i?\\\"this.data.set(this.offset,v)\\\":\\\"this.data[this.offset]=v\\\")+\\\"};return function construct_\\\"+r+\\\"(a,b,c,d){return new \\\"+r+\\\"(a,d)}\\\";return new Function(\\\"TrivialArray\\\",a)(c[t][0])}a=[\\\"'use strict'\\\"];var o=n(e),l=o.map(function(t){return\\\"i\\\"+t}),u=\\\"this.offset+\\\"+o.map(function(t){return\\\"this.stride[\\\"+t+\\\"]*i\\\"+t}).join(\\\"+\\\"),h=o.map(function(t){return\\\"b\\\"+t}).join(\\\",\\\"),f=o.map(function(t){return\\\"c\\\"+t}).join(\\\",\\\");a.push(\\\"function \\\"+r+\\\"(a,\\\"+h+\\\",\\\"+f+\\\",d){this.data=a\\\",\\\"this.shape=[\\\"+h+\\\"]\\\",\\\"this.stride=[\\\"+f+\\\"]\\\",\\\"this.offset=d|0}\\\",\\\"var proto=\\\"+r+\\\".prototype\\\",\\\"proto.dtype='\\\"+t+\\\"'\\\",\\\"proto.dimension=\\\"+e),a.push(\\\"Object.defineProperty(proto,'size',{get:function \\\"+r+\\\"_size(){return \\\"+o.map(function(t){return\\\"this.shape[\\\"+t+\\\"]\\\"}).join(\\\"*\\\"),\\\"}})\\\"),1===e?a.push(\\\"proto.order=[0]\\\"):(a.push(\\\"Object.defineProperty(proto,'order',{get:\\\"),e<4?(a.push(\\\"function \\\"+r+\\\"_order(){\\\"),2===e?a.push(\\\"return (Math.abs(this.stride[0])>Math.abs(this.stride[1]))?[1,0]:[0,1]}})\\\"):3===e&&a.push(\\\"var s0=Math.abs(this.stride[0]),s1=Math.abs(this.stride[1]),s2=Math.abs(this.stride[2]);if(s0>s1){if(s1>s2){return [2,1,0];}else if(s0>s2){return [1,2,0];}else{return [1,0,2];}}else if(s0>s2){return [2,0,1];}else if(s2>s1){return [0,1,2];}else{return [0,2,1];}}})\\\")):a.push(\\\"ORDER})\\\")),a.push(\\\"proto.set=function \\\"+r+\\\"_set(\\\"+l.join(\\\",\\\")+\\\",v){\\\"),i?a.push(\\\"return this.data.set(\\\"+u+\\\",v)}\\\"):a.push(\\\"return this.data[\\\"+u+\\\"]=v}\\\"),a.push(\\\"proto.get=function \\\"+r+\\\"_get(\\\"+l.join(\\\",\\\")+\\\"){\\\"),i?a.push(\\\"return this.data.get(\\\"+u+\\\")}\\\"):a.push(\\\"return this.data[\\\"+u+\\\"]}\\\"),a.push(\\\"proto.index=function \\\"+r+\\\"_index(\\\",l.join(),\\\"){return \\\"+u+\\\"}\\\"),a.push(\\\"proto.hi=function \\\"+r+\\\"_hi(\\\"+l.join(\\\",\\\")+\\\"){return new \\\"+r+\\\"(this.data,\\\"+o.map(function(t){return[\\\"(typeof i\\\",t,\\\"!=='number'||i\\\",t,\\\"<0)?this.shape[\\\",t,\\\"]:i\\\",t,\\\"|0\\\"].join(\\\"\\\")}).join(\\\",\\\")+\\\",\\\"+o.map(function(t){return\\\"this.stride[\\\"+t+\\\"]\\\"}).join(\\\",\\\")+\\\",this.offset)}\\\");var p=o.map(function(t){return\\\"a\\\"+t+\\\"=this.shape[\\\"+t+\\\"]\\\"}),d=o.map(function(t){return\\\"c\\\"+t+\\\"=this.stride[\\\"+t+\\\"]\\\"});a.push(\\\"proto.lo=function \\\"+r+\\\"_lo(\\\"+l.join(\\\",\\\")+\\\"){var b=this.offset,d=0,\\\"+p.join(\\\",\\\")+\\\",\\\"+d.join(\\\",\\\"));for(var g=0;g<e;++g)a.push(\\\"if(typeof i\\\"+g+\\\"==='number'&&i\\\"+g+\\\">=0){d=i\\\"+g+\\\"|0;b+=c\\\"+g+\\\"*d;a\\\"+g+\\\"-=d}\\\");a.push(\\\"return new \\\"+r+\\\"(this.data,\\\"+o.map(function(t){return\\\"a\\\"+t}).join(\\\",\\\")+\\\",\\\"+o.map(function(t){return\\\"c\\\"+t}).join(\\\",\\\")+\\\",b)}\\\"),a.push(\\\"proto.step=function \\\"+r+\\\"_step(\\\"+l.join(\\\",\\\")+\\\"){var \\\"+o.map(function(t){return\\\"a\\\"+t+\\\"=this.shape[\\\"+t+\\\"]\\\"}).join(\\\",\\\")+\\\",\\\"+o.map(function(t){return\\\"b\\\"+t+\\\"=this.stride[\\\"+t+\\\"]\\\"}).join(\\\",\\\")+\\\",c=this.offset,d=0,ceil=Math.ceil\\\");for(g=0;g<e;++g)a.push(\\\"if(typeof i\\\"+g+\\\"==='number'){d=i\\\"+g+\\\"|0;if(d<0){c+=b\\\"+g+\\\"*(a\\\"+g+\\\"-1);a\\\"+g+\\\"=ceil(-a\\\"+g+\\\"/d)}else{a\\\"+g+\\\"=ceil(a\\\"+g+\\\"/d)}b\\\"+g+\\\"*=d}\\\");a.push(\\\"return new \\\"+r+\\\"(this.data,\\\"+o.map(function(t){return\\\"a\\\"+t}).join(\\\",\\\")+\\\",\\\"+o.map(function(t){return\\\"b\\\"+t}).join(\\\",\\\")+\\\",c)}\\\");var v=new Array(e),m=new Array(e);for(g=0;g<e;++g)v[g]=\\\"a[i\\\"+g+\\\"]\\\",m[g]=\\\"b[i\\\"+g+\\\"]\\\";a.push(\\\"proto.transpose=function \\\"+r+\\\"_transpose(\\\"+l+\\\"){\\\"+l.map(function(t,e){return t+\\\"=(\\\"+t+\\\"===undefined?\\\"+e+\\\":\\\"+t+\\\"|0)\\\"}).join(\\\";\\\"),\\\"var a=this.shape,b=this.stride;return new \\\"+r+\\\"(this.data,\\\"+v.join(\\\",\\\")+\\\",\\\"+m.join(\\\",\\\")+\\\",this.offset)}\\\"),a.push(\\\"proto.pick=function \\\"+r+\\\"_pick(\\\"+l+\\\"){var a=[],b=[],c=this.offset\\\");for(g=0;g<e;++g)a.push(\\\"if(typeof i\\\"+g+\\\"==='number'&&i\\\"+g+\\\">=0){c=(c+this.stride[\\\"+g+\\\"]*i\\\"+g+\\\")|0}else{a.push(this.shape[\\\"+g+\\\"]);b.push(this.stride[\\\"+g+\\\"])}\\\");return a.push(\\\"var ctor=CTOR_LIST[a.length+1];return ctor(this.data,a,b,c)}\\\"),a.push(\\\"return function construct_\\\"+r+\\\"(data,shape,stride,offset){return new \\\"+r+\\\"(data,\\\"+o.map(function(t){return\\\"shape[\\\"+t+\\\"]\\\"}).join(\\\",\\\")+\\\",\\\"+o.map(function(t){return\\\"stride[\\\"+t+\\\"]\\\"}).join(\\\",\\\")+\\\",offset)}\\\"),new Function(\\\"CTOR_LIST\\\",\\\"ORDER\\\",a.join(\\\"\\\\n\\\"))(c[t],s)}var c={float32:[],float64:[],int8:[],int16:[],int32:[],uint8:[],uint16:[],uint32:[],array:[],uint8_clamped:[],buffer:[],generic:[]};e.exports=function(t,e,r,n){if(void 0===t)return(0,c.array[0])([]);\\\"number\\\"==typeof t&&(t=[t]),void 0===e&&(e=[t.length]);var o=e.length;if(void 0===r){r=new Array(o);for(var s=o-1,u=1;s>=0;--s)r[s]=u,u*=e[s]}if(void 0===n)for(n=0,s=0;s<o;++s)r[s]<0&&(n-=(e[s]-1)*r[s]);for(var h=function(t){if(i(t))return\\\"buffer\\\";if(a)switch(Object.prototype.toString.call(t)){case\\\"[object Float64Array]\\\":return\\\"float64\\\";case\\\"[object Float32Array]\\\":return\\\"float32\\\";case\\\"[object Int8Array]\\\":return\\\"int8\\\";case\\\"[object Int16Array]\\\":return\\\"int16\\\";case\\\"[object Int32Array]\\\":return\\\"int32\\\";case\\\"[object Uint8Array]\\\":return\\\"uint8\\\";case\\\"[object Uint16Array]\\\":return\\\"uint16\\\";case\\\"[object Uint32Array]\\\":return\\\"uint32\\\";case\\\"[object Uint8ClampedArray]\\\":return\\\"uint8_clamped\\\"}return Array.isArray(t)?\\\"array\\\":\\\"generic\\\"}(t),f=c[h];f.length<=o+1;)f.push(l(h,f.length-1));return(0,f[o+1])(t,e,r,n)}},{\\\"iota-array\\\":416,\\\"is-buffer\\\":418}],451:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"double-bits\\\"),i=Math.pow(2,-1074),a=-1>>>0;e.exports=function(t,e){if(isNaN(t)||isNaN(e))return NaN;if(t===e)return t;if(0===t)return e<0?-i:i;var r=n.hi(t),o=n.lo(t);e>t==t>0?o===a?(r+=1,o=0):o+=1:0===o?(o=a,r-=1):o-=1;return n.pack(o,r)}},{\\\"double-bits\\\":167}],452:[function(t,e,r){var n=Math.PI,i=c(120);function a(t,e,r,n){return[\\\"C\\\",t,e,r,n,r,n]}function o(t,e,r,n,i,a){return[\\\"C\\\",t/3+2/3*r,e/3+2/3*n,i/3+2/3*r,a/3+2/3*n,i,a]}function s(t,e,r,a,o,c,u,h,f,p){if(p)k=p[0],T=p[1],_=p[2],w=p[3];else{var d=l(t,e,-o);t=d.x,e=d.y;var g=(t-(h=(d=l(h,f,-o)).x))/2,v=(e-(f=d.y))/2,m=g*g/(r*r)+v*v/(a*a);m>1&&(r*=m=Math.sqrt(m),a*=m);var y=r*r,x=a*a,b=(c==u?-1:1)*Math.sqrt(Math.abs((y*x-y*v*v-x*g*g)/(y*v*v+x*g*g)));b==1/0&&(b=1);var _=b*r*v/a+(t+h)/2,w=b*-a*g/r+(e+f)/2,k=Math.asin(((e-w)/a).toFixed(9)),T=Math.asin(((f-w)/a).toFixed(9));(k=t<_?n-k:k)<0&&(k=2*n+k),(T=h<_?n-T:T)<0&&(T=2*n+T),u&&k>T&&(k-=2*n),!u&&T>k&&(T-=2*n)}if(Math.abs(T-k)>i){var A=T,M=h,S=f;T=k+i*(u&&T>k?1:-1);var E=s(h=_+r*Math.cos(T),f=w+a*Math.sin(T),r,a,o,0,u,M,S,[T,A,_,w])}var C=Math.tan((T-k)/4),L=4/3*r*C,P=4/3*a*C,O=[2*t-(t+L*Math.sin(k)),2*e-(e-P*Math.cos(k)),h+L*Math.sin(T),f-P*Math.cos(T),h,f];if(p)return O;E&&(O=O.concat(E));for(var z=0;z<O.length;){var I=l(O[z],O[z+1],o);O[z++]=I.x,O[z++]=I.y}return O}function l(t,e,r){return{x:t*Math.cos(r)-e*Math.sin(r),y:t*Math.sin(r)+e*Math.cos(r)}}function c(t){return t*(n/180)}e.exports=function(t){for(var e,r=[],n=0,i=0,l=0,u=0,h=null,f=null,p=0,d=0,g=0,v=t.length;g<v;g++){var m=t[g],y=m[0];switch(y){case\\\"M\\\":l=m[1],u=m[2];break;case\\\"A\\\":(m=s(p,d,m[1],m[2],c(m[3]),m[4],m[5],m[6],m[7])).unshift(\\\"C\\\"),m.length>7&&(r.push(m.splice(0,7)),m.unshift(\\\"C\\\"));break;case\\\"S\\\":var x=p,b=d;\\\"C\\\"!=e&&\\\"S\\\"!=e||(x+=x-n,b+=b-i),m=[\\\"C\\\",x,b,m[1],m[2],m[3],m[4]];break;case\\\"T\\\":\\\"Q\\\"==e||\\\"T\\\"==e?(h=2*p-h,f=2*d-f):(h=p,f=d),m=o(p,d,h,f,m[1],m[2]);break;case\\\"Q\\\":h=m[1],f=m[2],m=o(p,d,m[1],m[2],m[3],m[4]);break;case\\\"L\\\":m=a(p,d,m[1],m[2]);break;case\\\"H\\\":m=a(p,d,m[1],d);break;case\\\"V\\\":m=a(p,d,p,m[1]);break;case\\\"Z\\\":m=a(p,d,l,u)}e=y,p=m[m.length-2],d=m[m.length-1],m.length>4?(n=m[m.length-4],i=m[m.length-3]):(n=p,i=d),r.push(m)}return r}},{}],453:[function(t,e,r){r.vertexNormals=function(t,e,r){for(var n=e.length,i=new Array(n),a=void 0===r?1e-6:r,o=0;o<n;++o)i[o]=[0,0,0];for(o=0;o<t.length;++o)for(var s=t[o],l=0,c=s[s.length-1],u=s[0],h=0;h<s.length;++h){l=c,c=u,u=s[(h+1)%s.length];for(var f=e[l],p=e[c],d=e[u],g=new Array(3),v=0,m=new Array(3),y=0,x=0;x<3;++x)g[x]=f[x]-p[x],v+=g[x]*g[x],m[x]=d[x]-p[x],y+=m[x]*m[x];if(v*y>a){var b=i[c],_=1/Math.sqrt(v*y);for(x=0;x<3;++x){var w=(x+1)%3,k=(x+2)%3;b[x]+=_*(m[w]*g[k]-m[k]*g[w])}}}for(o=0;o<n;++o){b=i[o];var T=0;for(x=0;x<3;++x)T+=b[x]*b[x];if(T>a)for(_=1/Math.sqrt(T),x=0;x<3;++x)b[x]*=_;else for(x=0;x<3;++x)b[x]=0}return i},r.faceNormals=function(t,e,r){for(var n=t.length,i=new Array(n),a=void 0===r?1e-6:r,o=0;o<n;++o){for(var s=t[o],l=new Array(3),c=0;c<3;++c)l[c]=e[s[c]];var u=new Array(3),h=new Array(3);for(c=0;c<3;++c)u[c]=l[1][c]-l[0][c],h[c]=l[2][c]-l[0][c];var f=new Array(3),p=0;for(c=0;c<3;++c){var d=(c+1)%3,g=(c+2)%3;f[c]=u[d]*h[g]-u[g]*h[d],p+=f[c]*f[c]}p=p>a?1/Math.sqrt(p):0;for(c=0;c<3;++c)f[c]*=p;i[o]=f}return i}},{}],454:[function(t,e,r){\\\"use strict\\\";var n=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var t=new String(\\\"abc\\\");if(t[5]=\\\"de\\\",\\\"5\\\"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},r=0;r<10;r++)e[\\\"_\\\"+String.fromCharCode(r)]=r;if(\\\"0123456789\\\"!==Object.getOwnPropertyNames(e).map(function(t){return e[t]}).join(\\\"\\\"))return!1;var n={};return\\\"abcdefghijklmnopqrst\\\".split(\\\"\\\").forEach(function(t){n[t]=t}),\\\"abcdefghijklmnopqrst\\\"===Object.keys(Object.assign({},n)).join(\\\"\\\")}catch(t){return!1}}()?Object.assign:function(t,e){for(var r,o,s=function(t){if(null==t)throw new TypeError(\\\"Object.assign cannot be called with null or undefined\\\");return Object(t)}(t),l=1;l<arguments.length;l++){for(var c in r=Object(arguments[l]))i.call(r,c)&&(s[c]=r[c]);if(n){o=n(r);for(var u=0;u<o.length;u++)a.call(r,o[u])&&(s[o[u]]=r[o[u]])}}return s}},{}],455:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,n,i,a,o,s,l,c){var u=e+a+c;if(h>0){var h=Math.sqrt(u+1);t[0]=.5*(o-l)/h,t[1]=.5*(s-n)/h,t[2]=.5*(r-a)/h,t[3]=.5*h}else{var f=Math.max(e,a,c),h=Math.sqrt(2*f-u+1);e>=f?(t[0]=.5*h,t[1]=.5*(i+r)/h,t[2]=.5*(s+n)/h,t[3]=.5*(o-l)/h):a>=f?(t[0]=.5*(r+i)/h,t[1]=.5*h,t[2]=.5*(l+o)/h,t[3]=.5*(s-n)/h):(t[0]=.5*(n+s)/h,t[1]=.5*(o+l)/h,t[2]=.5*h,t[3]=.5*(r-i)/h)}return t}},{}],456:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){var e=(t=t||{}).center||[0,0,0],r=t.rotation||[0,0,0,1],n=t.radius||1;e=[].slice.call(e,0,3),u(r=[].slice.call(r,0,4),r);var i=new h(r,e,Math.log(n));i.setDistanceLimits(t.zoomMin,t.zoomMax),(\\\"eye\\\"in t||\\\"up\\\"in t)&&i.lookAt(0,t.eye,t.center,t.up);return i};var n=t(\\\"filtered-vector\\\"),i=t(\\\"gl-mat4/lookAt\\\"),a=t(\\\"gl-mat4/fromQuat\\\"),o=t(\\\"gl-mat4/invert\\\"),s=t(\\\"./lib/quatFromFrame\\\");function l(t,e,r){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2))}function c(t,e,r,n){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2)+Math.pow(n,2))}function u(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=c(r,n,i,a);o>1e-6?(t[0]=r/o,t[1]=n/o,t[2]=i/o,t[3]=a/o):(t[0]=t[1]=t[2]=0,t[3]=1)}function h(t,e,r){this.radius=n([r]),this.center=n(e),this.rotation=n(t),this.computedRadius=this.radius.curve(0),this.computedCenter=this.center.curve(0),this.computedRotation=this.rotation.curve(0),this.computedUp=[.1,0,0],this.computedEye=[.1,0,0],this.computedMatrix=[.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.recalcMatrix(0)}var f=h.prototype;f.lastT=function(){return Math.max(this.radius.lastT(),this.center.lastT(),this.rotation.lastT())},f.recalcMatrix=function(t){this.radius.curve(t),this.center.curve(t),this.rotation.curve(t);var e=this.computedRotation;u(e,e);var r=this.computedMatrix;a(r,e);var n=this.computedCenter,i=this.computedEye,o=this.computedUp,s=Math.exp(this.computedRadius[0]);i[0]=n[0]+s*r[2],i[1]=n[1]+s*r[6],i[2]=n[2]+s*r[10],o[0]=r[1],o[1]=r[5],o[2]=r[9];for(var l=0;l<3;++l){for(var c=0,h=0;h<3;++h)c+=r[l+4*h]*i[h];r[12+l]=-c}},f.getMatrix=function(t,e){this.recalcMatrix(t);var r=this.computedMatrix;if(e){for(var n=0;n<16;++n)e[n]=r[n];return e}return r},f.idle=function(t){this.center.idle(t),this.radius.idle(t),this.rotation.idle(t)},f.flush=function(t){this.center.flush(t),this.radius.flush(t),this.rotation.flush(t)},f.pan=function(t,e,r,n){e=e||0,r=r||0,n=n||0,this.recalcMatrix(t);var i=this.computedMatrix,a=i[1],o=i[5],s=i[9],c=l(a,o,s);a/=c,o/=c,s/=c;var u=i[0],h=i[4],f=i[8],p=u*a+h*o+f*s,d=l(u-=a*p,h-=o*p,f-=s*p);u/=d,h/=d,f/=d;var g=i[2],v=i[6],m=i[10],y=g*a+v*o+m*s,x=g*u+v*h+m*f,b=l(g-=y*a+x*u,v-=y*o+x*h,m-=y*s+x*f);g/=b,v/=b,m/=b;var _=u*e+a*r,w=h*e+o*r,k=f*e+s*r;this.center.move(t,_,w,k);var T=Math.exp(this.computedRadius[0]);T=Math.max(1e-4,T+n),this.radius.set(t,Math.log(T))},f.rotate=function(t,e,r,n){this.recalcMatrix(t),e=e||0,r=r||0;var i=this.computedMatrix,a=i[0],o=i[4],s=i[8],u=i[1],h=i[5],f=i[9],p=i[2],d=i[6],g=i[10],v=e*a+r*u,m=e*o+r*h,y=e*s+r*f,x=-(d*y-g*m),b=-(g*v-p*y),_=-(p*m-d*v),w=Math.sqrt(Math.max(0,1-Math.pow(x,2)-Math.pow(b,2)-Math.pow(_,2))),k=c(x,b,_,w);k>1e-6?(x/=k,b/=k,_/=k,w/=k):(x=b=_=0,w=1);var T=this.computedRotation,A=T[0],M=T[1],S=T[2],E=T[3],C=A*w+E*x+M*_-S*b,L=M*w+E*b+S*x-A*_,P=S*w+E*_+A*b-M*x,O=E*w-A*x-M*b-S*_;if(n){x=p,b=d,_=g;var z=Math.sin(n)/l(x,b,_);x*=z,b*=z,_*=z,O=O*(w=Math.cos(e))-(C=C*w+O*x+L*_-P*b)*x-(L=L*w+O*b+P*x-C*_)*b-(P=P*w+O*_+C*b-L*x)*_}var I=c(C,L,P,O);I>1e-6?(C/=I,L/=I,P/=I,O/=I):(C=L=P=0,O=1),this.rotation.set(t,C,L,P,O)},f.lookAt=function(t,e,r,n){this.recalcMatrix(t),r=r||this.computedCenter,e=e||this.computedEye,n=n||this.computedUp;var a=this.computedMatrix;i(a,e,r,n);var o=this.computedRotation;s(o,a[0],a[1],a[2],a[4],a[5],a[6],a[8],a[9],a[10]),u(o,o),this.rotation.set(t,o[0],o[1],o[2],o[3]);for(var l=0,c=0;c<3;++c)l+=Math.pow(r[c]-e[c],2);this.radius.set(t,.5*Math.log(Math.max(l,1e-6))),this.center.set(t,r[0],r[1],r[2])},f.translate=function(t,e,r,n){this.center.move(t,e||0,r||0,n||0)},f.setMatrix=function(t,e){var r=this.computedRotation;s(r,e[0],e[1],e[2],e[4],e[5],e[6],e[8],e[9],e[10]),u(r,r),this.rotation.set(t,r[0],r[1],r[2],r[3]);var n=this.computedMatrix;o(n,e);var i=n[15];if(Math.abs(i)>1e-6){var a=n[12]/i,l=n[13]/i,c=n[14]/i;this.recalcMatrix(t);var h=Math.exp(this.computedRadius[0]);this.center.set(t,a-n[2]*h,l-n[6]*h,c-n[10]*h),this.radius.idle(t)}else this.center.idle(t),this.radius.idle(t)},f.setDistance=function(t,e){e>0&&this.radius.set(t,Math.log(e))},f.setDistanceLimits=function(t,e){t=t>0?Math.log(t):-1/0,e=e>0?Math.log(e):1/0,e=Math.max(e,t),this.radius.bounds[0][0]=t,this.radius.bounds[1][0]=e},f.getDistanceLimits=function(t){var e=this.radius.bounds;return t?(t[0]=Math.exp(e[0][0]),t[1]=Math.exp(e[1][0]),t):[Math.exp(e[0][0]),Math.exp(e[1][0])]},f.toJSON=function(){return this.recalcMatrix(this.lastT()),{center:this.computedCenter.slice(),rotation:this.computedRotation.slice(),distance:Math.log(this.computedRadius[0]),zoomMin:this.radius.bounds[0][0],zoomMax:this.radius.bounds[1][0]}},f.fromJSON=function(t){var e=this.lastT(),r=t.center;r&&this.center.set(e,r[0],r[1],r[2]);var n=t.rotation;n&&this.rotation.set(e,n[0],n[1],n[2],n[3]);var i=t.distance;i&&i>0&&this.radius.set(e,Math.log(i)),this.setDistanceLimits(t.zoomMin,t.zoomMax)}},{\\\"./lib/quatFromFrame\\\":455,\\\"filtered-vector\\\":226,\\\"gl-mat4/fromQuat\\\":262,\\\"gl-mat4/invert\\\":265,\\\"gl-mat4/lookAt\\\":266}],457:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"repeat-string\\\");e.exports=function(t,e,r){return n(r=\\\"undefined\\\"!=typeof r?r+\\\"\\\":\\\" \\\",e)+t}},{\\\"repeat-string\\\":503}],458:[function(t,e,r){\\\"use strict\\\";function n(t,e){if(\\\"string\\\"!=typeof t)return[t];var r=[t];\\\"string\\\"==typeof e||Array.isArray(e)?e={brackets:e}:e||(e={});var n=e.brackets?Array.isArray(e.brackets)?e.brackets:[e.brackets]:[\\\"{}\\\",\\\"[]\\\",\\\"()\\\"],i=e.escape||\\\"___\\\",a=!!e.flat;n.forEach(function(t){var e=new RegExp([\\\"\\\\\\\\\\\",t[0],\\\"[^\\\\\\\\\\\",t[0],\\\"\\\\\\\\\\\",t[1],\\\"]*\\\\\\\\\\\",t[1]].join(\\\"\\\")),n=[];function a(e,a,o){var s=r.push(e.slice(t[0].length,-t[1].length))-1;return n.push(s),i+s+i}r.forEach(function(t,n){for(var i,o=0;t!=i;)if(i=t,t=t.replace(e,a),o++>1e4)throw Error(\\\"References have circular dependency. Please, check them.\\\");r[n]=t}),n=n.reverse(),r=r.map(function(e){return n.forEach(function(r){e=e.replace(new RegExp(\\\"(\\\\\\\\\\\"+i+r+\\\"\\\\\\\\\\\"+i+\\\")\\\",\\\"g\\\"),t[0]+\\\"$1\\\"+t[1])}),e})});var o=new RegExp(\\\"\\\\\\\\\\\"+i+\\\"([0-9]+)\\\\\\\\\\\"+i);return a?r:function t(e,r,n){for(var i,a=[],s=0;i=o.exec(e);){if(s++>1e4)throw Error(\\\"Circular references in parenthesis\\\");a.push(e.slice(0,i.index)),a.push(t(r[i[1]],r)),e=e.slice(i.index+i[0].length)}return a.push(e),a}(r[0],r)}function i(t,e){if(e&&e.flat){var r,n=e&&e.escape||\\\"___\\\",i=t[0];if(!i)return\\\"\\\";for(var a=new RegExp(\\\"\\\\\\\\\\\"+n+\\\"([0-9]+)\\\\\\\\\\\"+n),o=0;i!=r;){if(o++>1e4)throw Error(\\\"Circular references in \\\"+t);r=i,i=i.replace(a,s)}return i}return t.reduce(function t(e,r){return Array.isArray(r)&&(r=r.reduce(t,\\\"\\\")),e+r},\\\"\\\");function s(e,r){if(null==t[r])throw Error(\\\"Reference \\\"+r+\\\"is undefined\\\");return t[r]}}function a(t,e){return Array.isArray(t)?i(t,e):n(t,e)}a.parse=n,a.stringify=i,e.exports=a},{}],459:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"pick-by-alias\\\");e.exports=function(t){var e;arguments.length>1&&(t=arguments);\\\"string\\\"==typeof t?t=t.split(/\\\\s/).map(parseFloat):\\\"number\\\"==typeof t&&(t=[t]);t.length&&\\\"number\\\"==typeof t[0]?e=1===t.length?{width:t[0],height:t[0],x:0,y:0}:2===t.length?{width:t[0],height:t[1],x:0,y:0}:{x:t[0],y:t[1],width:t[2]-t[0]||0,height:t[3]-t[1]||0}:t&&(t=n(t,{left:\\\"x l left Left\\\",top:\\\"y t top Top\\\",width:\\\"w width W Width\\\",height:\\\"h height W Width\\\",bottom:\\\"b bottom Bottom\\\",right:\\\"r right Right\\\"}),e={x:t.left||0,y:t.top||0},null==t.width?t.right?e.width=t.right-e.x:e.width=0:e.width=t.width,null==t.height?t.bottom?e.height=t.bottom-e.y:e.height=0:e.height=t.height);return e}},{\\\"pick-by-alias\\\":465}],460:[function(t,e,r){e.exports=function(t){var e=[];return t.replace(i,function(t,r,i){var o=r.toLowerCase();for(i=function(t){var e=t.match(a);return e?e.map(Number):[]}(i),\\\"m\\\"==o&&i.length>2&&(e.push([r].concat(i.splice(0,2))),o=\\\"l\\\",r=\\\"m\\\"==r?\\\"l\\\":\\\"L\\\");;){if(i.length==n[o])return i.unshift(r),e.push(i);if(i.length<n[o])throw new Error(\\\"malformed path data\\\");e.push([r].concat(i.splice(0,n[o])))}}),e};var n={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},i=/([astvzqmhlc])([^astvzqmhlc]*)/gi;var a=/-?[0-9]*\\\\.?[0-9]+(?:e[-+]?\\\\d+)?/gi},{}],461:[function(t,e,r){e.exports=function(t,e){e||(e=[0,\\\"\\\"]),t=String(t);var r=parseFloat(t,10);return e[0]=r,e[1]=t.match(/[\\\\d.\\\\-\\\\+]*\\\\s*(.*)/)[1]||\\\"\\\",e}},{}],462:[function(t,e,r){(function(t){(function(){var r,n,i,a,o,s;\\\"undefined\\\"!=typeof performance&&null!==performance&&performance.now?e.exports=function(){return performance.now()}:\\\"undefined\\\"!=typeof t&&null!==t&&t.hrtime?(e.exports=function(){return(r()-o)/1e6},n=t.hrtime,a=(r=function(){var t;return 1e9*(t=n())[0]+t[1]})(),s=1e9*t.uptime(),o=a-s):Date.now?(e.exports=function(){return Date.now()-i},i=Date.now()):(e.exports=function(){return(new Date).getTime()-i},i=(new Date).getTime())}).call(this)}).call(this,t(\\\"_process\\\"))},{_process:482}],463:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){var e=t.length;if(e<n){for(var r=1,a=0;a<e;++a)for(var o=0;o<a;++o)if(t[a]<t[o])r=-r;else if(t[a]===t[o])return 0;return r}for(var s=i.mallocUint8(e),a=0;a<e;++a)s[a]=0;for(var r=1,a=0;a<e;++a)if(!s[a]){var l=1;s[a]=1;for(var o=t[a];o!==a;o=t[o]){if(s[o])return i.freeUint8(s),0;l+=1,s[o]=1}1&l||(r=-r)}return i.freeUint8(s),r};var n=32,i=t(\\\"typedarray-pool\\\")},{\\\"typedarray-pool\\\":545}],464:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"typedarray-pool\\\"),i=t(\\\"invert-permutation\\\");r.rank=function(t){var e=t.length;switch(e){case 0:case 1:return 0;case 2:return t[1]}var r,a,o,s=n.mallocUint32(e),l=n.mallocUint32(e),c=0;for(i(t,l),o=0;o<e;++o)s[o]=t[o];for(o=e-1;o>0;--o)a=l[o],r=s[o],s[o]=s[a],s[a]=r,l[o]=l[r],l[r]=a,c=(c+r)*o;return n.freeUint32(l),n.freeUint32(s),c},r.unrank=function(t,e,r){switch(t){case 0:return r||[];case 1:return r?(r[0]=0,r):[0];case 2:return r?(e?(r[0]=0,r[1]=1):(r[0]=1,r[1]=0),r):e?[0,1]:[1,0]}var n,i,a,o=1;for((r=r||new Array(t))[0]=0,a=1;a<t;++a)r[a]=a,o=o*a|0;for(a=t-1;a>0;--a)e=e-(n=e/o|0)*o|0,o=o/a|0,i=0|r[a],r[a]=0|r[n],r[n]=0|i;return r}},{\\\"invert-permutation\\\":415,\\\"typedarray-pool\\\":545}],465:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r){var n,a,o={};if(\\\"string\\\"==typeof e&&(e=i(e)),Array.isArray(e)){var s={};for(a=0;a<e.length;a++)s[e[a]]=!0;e=s}for(n in e)e[n]=i(e[n]);var l={};for(n in e){var c=e[n];if(Array.isArray(c))for(a=0;a<c.length;a++){var u=c[a];if(r&&(l[u]=!0),u in t){if(o[n]=t[u],r)for(var h=a;h<c.length;h++)l[c[h]]=!0;break}}else n in t&&(e[n]&&(o[n]=t[n]),r&&(l[n]=!0))}if(r)for(n in t)l[n]||(o[n]=t[n]);return o};var n={};function i(t){return n[t]?n[t]:(\\\"string\\\"==typeof t&&(t=n[t]=t.split(/\\\\s*,\\\\s*|\\\\s+/)),t)}},{}],466:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){for(var r=0|e.length,i=t.length,a=[new Array(r),new Array(r)],o=0;o<r;++o)a[0][o]=[],a[1][o]=[];for(var o=0;o<i;++o){var s=t[o];a[0][s[0]].push(s),a[1][s[1]].push(s)}for(var l=[],o=0;o<r;++o)a[0][o].length+a[1][o].length===0&&l.push([o]);function c(t,e){var r=a[e][t[e]];r.splice(r.indexOf(t),1)}function u(t,r,i){for(var o,s,l,u=0;u<2;++u)if(a[u][r].length>0){o=a[u][r][0],l=u;break}s=o[1^l];for(var h=0;h<2;++h)for(var f=a[h][r],p=0;p<f.length;++p){var d=f[p],g=d[1^h],v=n(e[t],e[r],e[s],e[g]);v>0&&(o=d,s=g,l=h)}return i?s:(o&&c(o,l),s)}function h(t,r){var i=a[r][t][0],o=[t];c(i,r);for(var s=i[1^r];;){for(;s!==t;)o.push(s),s=u(o[o.length-2],s,!1);if(a[0][t].length+a[1][t].length===0)break;var l=o[o.length-1],h=t,f=o[1],p=u(l,h,!0);if(n(e[l],e[h],e[f],e[p])<0)break;o.push(t),s=u(l,h)}return o}function f(t,e){return e[1]===e[e.length-1]}for(var o=0;o<r;++o)for(var p=0;p<2;++p){for(var d=[];a[p][o].length>0;){a[0][o].length;var g=h(o,p);f(d,g)?d.push.apply(d,g):(d.length>0&&l.push(d),d=g)}d.length>0&&l.push(d)}return l};var n=t(\\\"compare-angle\\\")},{\\\"compare-angle\\\":127}],467:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){for(var r=n(t,e.length),i=new Array(e.length),a=new Array(e.length),o=[],s=0;s<e.length;++s){var l=r[s].length;a[s]=l,i[s]=!0,l<=1&&o.push(s)}for(;o.length>0;){var c=o.pop();i[c]=!1;for(var u=r[c],s=0;s<u.length;++s){var h=u[s];0==--a[h]&&o.push(h)}}for(var f=new Array(e.length),p=[],s=0;s<e.length;++s)if(i[s]){var c=p.length;f[s]=c,p.push(e[s])}else f[s]=-1;for(var d=[],s=0;s<t.length;++s){var g=t[s];i[g[0]]&&i[g[1]]&&d.push([f[g[0]],f[g[1]]])}return[d,p]};var n=t(\\\"edges-to-adjacency-list\\\")},{\\\"edges-to-adjacency-list\\\":171}],468:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){var r=c(t,e);t=r[0];for(var h=(e=r[1]).length,f=(t.length,n(t,e.length)),p=0;p<h;++p)if(f[p].length%2==1)throw new Error(\\\"planar-graph-to-polyline: graph must be manifold\\\");var d=i(t,e);for(var g=(d=d.filter(function(t){for(var r=t.length,n=[0],i=0;i<r;++i){var a=e[t[i]],l=e[t[(i+1)%r]],c=o(-a[0],a[1]),u=o(-a[0],l[1]),h=o(l[0],a[1]),f=o(l[0],l[1]);n=s(n,s(s(c,u),s(h,f)))}return n[n.length-1]>0})).length,v=new Array(g),m=new Array(g),p=0;p<g;++p){v[p]=p;var y=new Array(g),x=d[p].map(function(t){return e[t]}),b=a([x]),_=0;t:for(var w=0;w<g;++w)if(y[w]=0,p!==w){for(var k=d[w],T=k.length,A=0;A<T;++A){var M=b(e[k[A]]);if(0!==M){M<0&&(y[w]=1,_+=1);continue t}}y[w]=1,_+=1}m[p]=[_,p,y]}m.sort(function(t,e){return e[0]-t[0]});for(var p=0;p<g;++p)for(var y=m[p],S=y[1],E=y[2],w=0;w<g;++w)E[w]&&(v[w]=S);for(var C=function(t){for(var e=new Array(t),r=0;r<t;++r)e[r]=[];return e}(g),p=0;p<g;++p)C[p].push(v[p]),C[v[p]].push(p);for(var L={},P=u(h,!1),p=0;p<g;++p)for(var k=d[p],T=k.length,w=0;w<T;++w){var O=k[w],z=k[(w+1)%T],I=Math.min(O,z)+\\\":\\\"+Math.max(O,z);if(I in L){var D=L[I];C[D].push(p),C[p].push(D),P[O]=P[z]=!0}else L[I]=p}function R(t){for(var e=t.length,r=0;r<e;++r)if(!P[t[r]])return!1;return!0}for(var F=[],B=u(g,-1),p=0;p<g;++p)v[p]!==p||R(d[p])?B[p]=-1:(F.push(p),B[p]=0);var r=[];for(;F.length>0;){var N=F.pop(),j=C[N];l(j,function(t,e){return t-e});var U,V=j.length,q=B[N];if(0===q){var k=d[N];U=[k]}for(var p=0;p<V;++p){var H=j[p];if(!(B[H]>=0)&&(B[H]=1^q,F.push(H),0===q)){var k=d[H];R(k)||(k.reverse(),U.push(k))}}0===q&&r.push(U)}return r};var n=t(\\\"edges-to-adjacency-list\\\"),i=t(\\\"planar-dual\\\"),a=t(\\\"point-in-big-polygon\\\"),o=t(\\\"two-product\\\"),s=t(\\\"robust-sum\\\"),l=t(\\\"uniq\\\"),c=t(\\\"./lib/trim-leaves\\\");function u(t,e){for(var r=new Array(t),n=0;n<t;++n)r[n]=e;return r}},{\\\"./lib/trim-leaves\\\":467,\\\"edges-to-adjacency-list\\\":171,\\\"planar-dual\\\":466,\\\"point-in-big-polygon\\\":472,\\\"robust-sum\\\":515,\\\"two-product\\\":543,uniq:547}],469:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"./quad\\\")},{\\\"./quad\\\":471}],470:[function(t,e,r){arguments[4][111][0].apply(r,arguments)},{dup:111}],471:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"binary-search-bounds\\\"),i=t(\\\"clamp\\\"),a=t(\\\"parse-rect\\\"),o=t(\\\"array-bounds\\\"),s=t(\\\"pick-by-alias\\\"),l=t(\\\"defined\\\"),c=t(\\\"flatten-vertex-data\\\"),u=t(\\\"is-obj\\\"),h=t(\\\"dtype\\\"),f=t(\\\"math-log2\\\");function p(t,e){for(var r=e[0],n=e[1],a=1/(e[2]-r),o=1/(e[3]-n),s=new Array(t.length),l=0,c=t.length/2;l<c;l++)s[2*l]=i((t[2*l]-r)*a,0,1),s[2*l+1]=i((t[2*l+1]-n)*o,0,1);return s}e.exports=function(t,e){e||(e={}),t=c(t,\\\"float64\\\"),e=s(e,{bounds:\\\"range bounds dataBox databox\\\",maxDepth:\\\"depth maxDepth maxdepth level maxLevel maxlevel levels\\\",dtype:\\\"type dtype format out dst output destination\\\"});var r=l(e.maxDepth,255),i=l(e.bounds,o(t,2));i[0]===i[2]&&i[2]++,i[1]===i[3]&&i[3]++;var d,g=p(t,i),v=t.length>>>1;e.dtype||(e.dtype=\\\"array\\\"),\\\"string\\\"==typeof e.dtype?d=new(h(e.dtype))(v):e.dtype&&(d=e.dtype,Array.isArray(d)&&(d.length=v));for(var m=0;m<v;++m)d[m]=m;var y=[],x=[],b=[],_=[];!function t(e,n,i,a,o,s){if(!a.length)return null;var l=y[o]||(y[o]=[]);var c=b[o]||(b[o]=[]);var u=x[o]||(x[o]=[]);var h=l.length;o++;if(o>r){for(var f=0;f<a.length;f++)l.push(a[f]),c.push(s),u.push(null,null,null,null);return h}l.push(a[0]);c.push(s);if(a.length<=1)return u.push(null,null,null,null),h;var p=.5*i;var d=e+p,v=n+p;var m=[],_=[],w=[],k=[];for(var T=1,A=a.length;T<A;T++){var M=a[T],S=g[2*M],E=g[2*M+1];S<d?E<v?m.push(M):_.push(M):E<v?w.push(M):k.push(M)}s<<=2;u.push(t(e,n,p,m,o,s),t(e,v,p,_,o,s+1),t(d,n,p,w,o,s+2),t(d,v,p,k,o,s+3));return h}(0,0,1,d,0,1);for(var w=0,k=0;k<y.length;k++){var T=y[k];if(d.set)d.set(T,w);else for(var A=0,M=T.length;A<M;A++)d[A+w]=T[A];var S=w+y[k].length;_[k]=[w,S],w=S}return d.range=function(){var e,r=[],o=arguments.length;for(;o--;)r[o]=arguments[o];if(u(r[r.length-1])){var c=r.pop();r.length||null==c.x&&null==c.l&&null==c.left||(r=[c],e={}),e=s(c,{level:\\\"level maxLevel\\\",d:\\\"d diam diameter r radius px pxSize pixel pixelSize maxD size minSize\\\",lod:\\\"lod details ranges offsets\\\"})}else e={};r.length||(r=i);var h=a.apply(void 0,r),d=[Math.min(h.x,h.x+h.width),Math.min(h.y,h.y+h.height),Math.max(h.x,h.x+h.width),Math.max(h.y,h.y+h.height)],g=d[0],v=d[1],m=d[2],w=d[3],k=p([g,v,m,w],i),T=k[0],A=k[1],M=k[2],S=k[3],C=l(e.level,y.length);if(null!=e.d){var L;\\\"number\\\"==typeof e.d?L=[e.d,e.d]:e.d.length&&(L=e.d),C=Math.min(Math.max(Math.ceil(-f(Math.abs(L[0])/(i[2]-i[0]))),Math.ceil(-f(Math.abs(L[1])/(i[3]-i[1])))),C)}if(C=Math.min(C,y.length),e.lod)return function(t,e,r,i,a){for(var o=[],s=0;s<a;s++){var l=b[s],c=_[s][0],u=E(t,e,s),h=E(r,i,s),f=n.ge(l,u),p=n.gt(l,h,f,l.length-1);o[s]=[f+c,p+c]}return o}(T,A,M,S,C);var P=[];return function e(r,n,i,a,o,s){if(null!==o&&null!==s){var l=r+i,c=n+i;if(!(T>l||A>c||M<r||S<n||a>=C||o===s)){var u=y[a];void 0===s&&(s=u.length);for(var h=o;h<s;h++){var f=u[h],p=t[2*f],d=t[2*f+1];p>=g&&p<=m&&d>=v&&d<=w&&P.push(f)}var b=x[a],_=b[4*o+0],k=b[4*o+1],E=b[4*o+2],L=b[4*o+3],O=function(t,e){for(var r=null,n=0;null===r;)if(r=t[4*e+n],++n>t.length)return null;return r}(b,o+1),z=.5*i,I=a+1;e(r,n,z,I,_,k||E||L||O),e(r,n+z,z,I,k,E||L||O),e(r+z,n,z,I,E,L||O),e(r+z,n+z,z,I,L,O)}}}(0,0,1,0,0,1),P},d;function E(t,e,r){for(var n=1,i=.5,a=.5,o=.5,s=0;s<r;s++)n<<=2,n+=t<i?e<a?0:1:e<a?2:3,o*=.5,i+=t<i?-o:o,a+=e<a?-o:o;return n}}},{\\\"array-bounds\\\":65,\\\"binary-search-bounds\\\":470,clamp:115,defined:164,dtype:169,\\\"flatten-vertex-data\\\":227,\\\"is-obj\\\":421,\\\"math-log2\\\":432,\\\"parse-rect\\\":459,\\\"pick-by-alias\\\":465}],472:[function(t,e,r){e.exports=function(t){for(var e=t.length,r=[],a=[],s=0;s<e;++s)for(var u=t[s],h=u.length,f=h-1,p=0;p<h;f=p++){var d=u[f],g=u[p];d[0]===g[0]?a.push([d,g]):r.push([d,g])}if(0===r.length)return 0===a.length?c:(v=l(a),function(t){return v(t[0],t[1])?0:1});var v;var m=i(r),y=function(t,e){return function(r){var i=o.le(e,r[0]);if(i<0)return 1;var a=t[i];if(!a){if(!(i>0&&e[i]===r[0]))return 1;a=t[i-1]}for(var s=1;a;){var l=a.key,c=n(r,l[0],l[1]);if(l[0][0]<l[1][0])if(c<0)a=a.left;else{if(!(c>0))return 0;s=-1,a=a.right}else if(c>0)a=a.left;else{if(!(c<0))return 0;s=1,a=a.right}}return s}}(m.slabs,m.coordinates);return 0===a.length?y:function(t,e){return function(r){return t(r[0],r[1])?0:e(r)}}(l(a),y)};var n=t(\\\"robust-orientation\\\")[3],i=t(\\\"slab-decomposition\\\"),a=t(\\\"interval-tree-1d\\\"),o=t(\\\"binary-search-bounds\\\");function s(){return!0}function l(t){for(var e={},r=0;r<t.length;++r){var n=t[r],i=n[0][0],o=n[0][1],l=n[1][1],c=[Math.min(o,l),Math.max(o,l)];i in e?e[i].push(c):e[i]=[c]}var u={},h=Object.keys(e);for(r=0;r<h.length;++r){var f=e[h[r]];u[h[r]]=a(f)}return function(t){return function(e,r){var n=t[e];return!!n&&!!n.queryPoint(r,s)}}(u)}function c(t){return 1}},{\\\"binary-search-bounds\\\":91,\\\"interval-tree-1d\\\":414,\\\"robust-orientation\\\":510,\\\"slab-decomposition\\\":526}],473:[function(t,e,r){var n,i=t(\\\"./lib/build-log\\\"),a=t(\\\"./lib/epsilon\\\"),o=t(\\\"./lib/intersecter\\\"),s=t(\\\"./lib/segment-chainer\\\"),l=t(\\\"./lib/segment-selector\\\"),c=t(\\\"./lib/geojson\\\"),u=!1,h=a();function f(t,e,r){var i=n.segments(t),a=n.segments(e),o=r(n.combine(i,a));return n.polygon(o)}n={buildLog:function(t){return!0===t?u=i():!1===t&&(u=!1),!1!==u&&u.list},epsilon:function(t){return h.epsilon(t)},segments:function(t){var e=o(!0,h,u);return t.regions.forEach(e.addRegion),{segments:e.calculate(t.inverted),inverted:t.inverted}},combine:function(t,e){return{combined:o(!1,h,u).calculate(t.segments,t.inverted,e.segments,e.inverted),inverted1:t.inverted,inverted2:e.inverted}},selectUnion:function(t){return{segments:l.union(t.combined,u),inverted:t.inverted1||t.inverted2}},selectIntersect:function(t){return{segments:l.intersect(t.combined,u),inverted:t.inverted1&&t.inverted2}},selectDifference:function(t){return{segments:l.difference(t.combined,u),inverted:t.inverted1&&!t.inverted2}},selectDifferenceRev:function(t){return{segments:l.differenceRev(t.combined,u),inverted:!t.inverted1&&t.inverted2}},selectXor:function(t){return{segments:l.xor(t.combined,u),inverted:t.inverted1!==t.inverted2}},polygon:function(t){return{regions:s(t.segments,h,u),inverted:t.inverted}},polygonFromGeoJSON:function(t){return c.toPolygon(n,t)},polygonToGeoJSON:function(t){return c.fromPolygon(n,h,t)},union:function(t,e){return f(t,e,n.selectUnion)},intersect:function(t,e){return f(t,e,n.selectIntersect)},difference:function(t,e){return f(t,e,n.selectDifference)},differenceRev:function(t,e){return f(t,e,n.selectDifferenceRev)},xor:function(t,e){return f(t,e,n.selectXor)}},\\\"object\\\"==typeof window&&(window.PolyBool=n),e.exports=n},{\\\"./lib/build-log\\\":474,\\\"./lib/epsilon\\\":475,\\\"./lib/geojson\\\":476,\\\"./lib/intersecter\\\":477,\\\"./lib/segment-chainer\\\":479,\\\"./lib/segment-selector\\\":480}],474:[function(t,e,r){e.exports=function(){var t,e=0,r=!1;function n(e,r){return t.list.push({type:e,data:r?JSON.parse(JSON.stringify(r)):void 0}),t}return t={list:[],segmentId:function(){return e++},checkIntersection:function(t,e){return n(\\\"check\\\",{seg1:t,seg2:e})},segmentChop:function(t,e){return n(\\\"div_seg\\\",{seg:t,pt:e}),n(\\\"chop\\\",{seg:t,pt:e})},statusRemove:function(t){return n(\\\"pop_seg\\\",{seg:t})},segmentUpdate:function(t){return n(\\\"seg_update\\\",{seg:t})},segmentNew:function(t,e){return n(\\\"new_seg\\\",{seg:t,primary:e})},segmentRemove:function(t){return n(\\\"rem_seg\\\",{seg:t})},tempStatus:function(t,e,r){return n(\\\"temp_status\\\",{seg:t,above:e,below:r})},rewind:function(t){return n(\\\"rewind\\\",{seg:t})},status:function(t,e,r){return n(\\\"status\\\",{seg:t,above:e,below:r})},vert:function(e){return e===r?t:(r=e,n(\\\"vert\\\",{x:e}))},log:function(t){return\\\"string\\\"!=typeof t&&(t=JSON.stringify(t,!1,\\\"  \\\")),n(\\\"log\\\",{txt:t})},reset:function(){return n(\\\"reset\\\")},selected:function(t){return n(\\\"selected\\\",{segs:t})},chainStart:function(t){return n(\\\"chain_start\\\",{seg:t})},chainRemoveHead:function(t,e){return n(\\\"chain_rem_head\\\",{index:t,pt:e})},chainRemoveTail:function(t,e){return n(\\\"chain_rem_tail\\\",{index:t,pt:e})},chainNew:function(t,e){return n(\\\"chain_new\\\",{pt1:t,pt2:e})},chainMatch:function(t){return n(\\\"chain_match\\\",{index:t})},chainClose:function(t){return n(\\\"chain_close\\\",{index:t})},chainAddHead:function(t,e){return n(\\\"chain_add_head\\\",{index:t,pt:e})},chainAddTail:function(t,e){return n(\\\"chain_add_tail\\\",{index:t,pt:e})},chainConnect:function(t,e){return n(\\\"chain_con\\\",{index1:t,index2:e})},chainReverse:function(t){return n(\\\"chain_rev\\\",{index:t})},chainJoin:function(t,e){return n(\\\"chain_join\\\",{index1:t,index2:e})},done:function(){return n(\\\"done\\\")}}}},{}],475:[function(t,e,r){e.exports=function(t){\\\"number\\\"!=typeof t&&(t=1e-10);var e={epsilon:function(e){return\\\"number\\\"==typeof e&&(t=e),t},pointAboveOrOnLine:function(e,r,n){var i=r[0],a=r[1],o=n[0],s=n[1],l=e[0];return(o-i)*(e[1]-a)-(s-a)*(l-i)>=-t},pointBetween:function(e,r,n){var i=e[1]-r[1],a=n[0]-r[0],o=e[0]-r[0],s=n[1]-r[1],l=o*a+i*s;return!(l<t||l-(a*a+s*s)>-t)},pointsSameX:function(e,r){return Math.abs(e[0]-r[0])<t},pointsSameY:function(e,r){return Math.abs(e[1]-r[1])<t},pointsSame:function(t,r){return e.pointsSameX(t,r)&&e.pointsSameY(t,r)},pointsCompare:function(t,r){return e.pointsSameX(t,r)?e.pointsSameY(t,r)?0:t[1]<r[1]?-1:1:t[0]<r[0]?-1:1},pointsCollinear:function(e,r,n){var i=e[0]-r[0],a=e[1]-r[1],o=r[0]-n[0],s=r[1]-n[1];return Math.abs(i*s-o*a)<t},linesIntersect:function(e,r,n,i){var a=r[0]-e[0],o=r[1]-e[1],s=i[0]-n[0],l=i[1]-n[1],c=a*l-o*s;if(Math.abs(c)<t)return!1;var u=e[0]-n[0],h=e[1]-n[1],f=(s*h-l*u)/c,p=(a*h-o*u)/c,d={alongA:0,alongB:0,pt:[e[0]+f*a,e[1]+f*o]};return d.alongA=f<=-t?-2:f<t?-1:f-1<=-t?0:f-1<t?1:2,d.alongB=p<=-t?-2:p<t?-1:p-1<=-t?0:p-1<t?1:2,d},pointInsideRegion:function(e,r){for(var n=e[0],i=e[1],a=r[r.length-1][0],o=r[r.length-1][1],s=!1,l=0;l<r.length;l++){var c=r[l][0],u=r[l][1];u-i>t!=o-i>t&&(a-c)*(i-u)/(o-u)+c-n>t&&(s=!s),a=c,o=u}return s}};return e}},{}],476:[function(t,e,r){var n={toPolygon:function(t,e){function r(e){if(e.length<=0)return t.segments({inverted:!1,regions:[]});function r(e){var r=e.slice(0,e.length-1);return t.segments({inverted:!1,regions:[r]})}for(var n=r(e[0]),i=1;i<e.length;i++)n=t.selectDifference(t.combine(n,r(e[i])));return n}if(\\\"Polygon\\\"===e.type)return t.polygon(r(e.coordinates));if(\\\"MultiPolygon\\\"===e.type){for(var n=t.segments({inverted:!1,regions:[]}),i=0;i<e.coordinates.length;i++)n=t.selectUnion(t.combine(n,r(e.coordinates[i])));return t.polygon(n)}throw new Error(\\\"PolyBool: Cannot convert GeoJSON object to PolyBool polygon\\\")},fromPolygon:function(t,e,r){function n(t,r){return e.pointInsideRegion([.5*(t[0][0]+t[1][0]),.5*(t[0][1]+t[1][1])],r)}function i(t){return{region:t,children:[]}}r=t.polygon(t.segments(r));var a=i(null);function o(t,e){for(var r=0;r<t.children.length;r++){if(n(e,(s=t.children[r]).region))return void o(s,e)}var a=i(e);for(r=0;r<t.children.length;r++){var s;n((s=t.children[r]).region,e)&&(a.children.push(s),t.children.splice(r,1),r--)}t.children.push(a)}for(var s=0;s<r.regions.length;s++){var l=r.regions[s];l.length<3||o(a,l)}function c(t,e){for(var r=0,n=t[t.length-1][0],i=t[t.length-1][1],a=[],o=0;o<t.length;o++){var s=t[o][0],l=t[o][1];a.push([s,l]),r+=l*n-s*i,n=s,i=l}return r<0!==e&&a.reverse(),a.push([a[0][0],a[0][1]]),a}var u=[];function h(t){var e=[c(t.region,!1)];u.push(e);for(var r=0;r<t.children.length;r++)e.push(f(t.children[r]))}function f(t){for(var e=0;e<t.children.length;e++)h(t.children[e]);return c(t.region,!0)}for(s=0;s<a.children.length;s++)h(a.children[s]);return u.length<=0?{type:\\\"Polygon\\\",coordinates:[]}:1==u.length?{type:\\\"Polygon\\\",coordinates:u[0]}:{type:\\\"MultiPolygon\\\",coordinates:u}}};e.exports=n},{}],477:[function(t,e,r){var n=t(\\\"./linked-list\\\");e.exports=function(t,e,r){function i(t,e,n){return{id:r?r.segmentId():-1,start:t,end:e,myFill:{above:n.myFill.above,below:n.myFill.below},otherFill:null}}var a=n.create();function o(t,r){a.insertBefore(t,function(n){return function(t,r,n,i,a,o){var s=e.pointsCompare(r,a);return 0!==s?s:e.pointsSame(n,o)?0:t!==i?t?1:-1:e.pointAboveOrOnLine(n,i?a:o,i?o:a)?1:-1}(t.isStart,t.pt,r,n.isStart,n.pt,n.other.pt)<0})}function s(t,e){var r=function(t,e){var r=n.node({isStart:!0,pt:t.start,seg:t,primary:e,other:null,status:null});return o(r,t.end),r}(t,e);return function(t,e,r){var i=n.node({isStart:!1,pt:e.end,seg:e,primary:r,other:t,status:null});t.other=i,o(i,t.pt)}(r,t,e),r}function l(t,e){var n=i(e,t.seg.end,t.seg);return function(t,e){r&&r.segmentChop(t.seg,e),t.other.remove(),t.seg.end=e,t.other.pt=e,o(t.other,t.pt)}(t,e),s(n,t.primary)}function c(i,o){var s=n.create();function c(t){return s.findTransition(function(r){var n,i,a,o,s,l;return n=t,i=r.ev,a=n.seg.start,o=n.seg.end,s=i.seg.start,l=i.seg.end,(e.pointsCollinear(a,s,l)?e.pointsCollinear(o,s,l)?1:e.pointAboveOrOnLine(o,s,l)?1:-1:e.pointAboveOrOnLine(a,s,l)?1:-1)>0})}function u(t,n){var i=t.seg,a=n.seg,o=i.start,s=i.end,c=a.start,u=a.end;r&&r.checkIntersection(i,a);var h=e.linesIntersect(o,s,c,u);if(!1===h){if(!e.pointsCollinear(o,s,c))return!1;if(e.pointsSame(o,u)||e.pointsSame(s,c))return!1;var f=e.pointsSame(o,c),p=e.pointsSame(s,u);if(f&&p)return n;var d=!f&&e.pointBetween(o,c,u),g=!p&&e.pointBetween(s,c,u);if(f)return g?l(n,s):l(t,u),n;d&&(p||(g?l(n,s):l(t,u)),l(n,o))}else 0===h.alongA&&(-1===h.alongB?l(t,c):0===h.alongB?l(t,h.pt):1===h.alongB&&l(t,u)),0===h.alongB&&(-1===h.alongA?l(n,o):0===h.alongA?l(n,h.pt):1===h.alongA&&l(n,s));return!1}for(var h=[];!a.isEmpty();){var f=a.getHead();if(r&&r.vert(f.pt[0]),f.isStart){r&&r.segmentNew(f.seg,f.primary);var p=c(f),d=p.before?p.before.ev:null,g=p.after?p.after.ev:null;function v(){if(d){var t=u(f,d);if(t)return t}return!!g&&u(f,g)}r&&r.tempStatus(f.seg,!!d&&d.seg,!!g&&g.seg);var m,y,x=v();if(x)t?(y=null===f.seg.myFill.below||f.seg.myFill.above!==f.seg.myFill.below)&&(x.seg.myFill.above=!x.seg.myFill.above):x.seg.otherFill=f.seg.myFill,r&&r.segmentUpdate(x.seg),f.other.remove(),f.remove();if(a.getHead()!==f){r&&r.rewind(f.seg);continue}t?(y=null===f.seg.myFill.below||f.seg.myFill.above!==f.seg.myFill.below,f.seg.myFill.below=g?g.seg.myFill.above:i,f.seg.myFill.above=y?!f.seg.myFill.below:f.seg.myFill.below):null===f.seg.otherFill&&(m=g?f.primary===g.primary?g.seg.otherFill.above:g.seg.myFill.above:f.primary?o:i,f.seg.otherFill={above:m,below:m}),r&&r.status(f.seg,!!d&&d.seg,!!g&&g.seg),f.other.status=p.insert(n.node({ev:f}))}else{var b=f.status;if(null===b)throw new Error(\\\"PolyBool: Zero-length segment detected; your epsilon is probably too small or too large\\\");if(s.exists(b.prev)&&s.exists(b.next)&&u(b.prev.ev,b.next.ev),r&&r.statusRemove(b.ev.seg),b.remove(),!f.primary){var _=f.seg.myFill;f.seg.myFill=f.seg.otherFill,f.seg.otherFill=_}h.push(f.seg)}a.getHead().remove()}return r&&r.done(),h}return t?{addRegion:function(t){for(var n,i,a,o=t[t.length-1],l=0;l<t.length;l++){n=o,o=t[l];var c=e.pointsCompare(n,o);0!==c&&s((i=c<0?n:o,a=c<0?o:n,{id:r?r.segmentId():-1,start:i,end:a,myFill:{above:null,below:null},otherFill:null}),!0)}},calculate:function(t){return c(t,!1)}}:{calculate:function(t,e,r,n){return t.forEach(function(t){s(i(t.start,t.end,t),!0)}),r.forEach(function(t){s(i(t.start,t.end,t),!1)}),c(e,n)}}}},{\\\"./linked-list\\\":478}],478:[function(t,e,r){e.exports={create:function(){var t={root:{root:!0,next:null},exists:function(e){return null!==e&&e!==t.root},isEmpty:function(){return null===t.root.next},getHead:function(){return t.root.next},insertBefore:function(e,r){for(var n=t.root,i=t.root.next;null!==i;){if(r(i))return e.prev=i.prev,e.next=i,i.prev.next=e,void(i.prev=e);n=i,i=i.next}n.next=e,e.prev=n,e.next=null},findTransition:function(e){for(var r=t.root,n=t.root.next;null!==n&&!e(n);)r=n,n=n.next;return{before:r===t.root?null:r,after:n,insert:function(t){return t.prev=r,t.next=n,r.next=t,null!==n&&(n.prev=t),t}}}};return t},node:function(t){return t.prev=null,t.next=null,t.remove=function(){t.prev.next=t.next,t.next&&(t.next.prev=t.prev),t.prev=null,t.next=null},t}}},{}],479:[function(t,e,r){e.exports=function(t,e,r){var n=[],i=[];return t.forEach(function(t){var a=t.start,o=t.end;if(e.pointsSame(a,o))console.warn(\\\"PolyBool: Warning: Zero-length segment detected; your epsilon is probably too small or too large\\\");else{r&&r.chainStart(t);for(var s={index:0,matches_head:!1,matches_pt1:!1},l={index:0,matches_head:!1,matches_pt1:!1},c=s,u=0;u<n.length;u++){var h=(v=n[u])[0],f=(v[1],v[v.length-1]);if(v[v.length-2],e.pointsSame(h,a)){if(T(u,!0,!0))break}else if(e.pointsSame(h,o)){if(T(u,!0,!1))break}else if(e.pointsSame(f,a)){if(T(u,!1,!0))break}else if(e.pointsSame(f,o)&&T(u,!1,!1))break}if(c===s)return n.push([a,o]),void(r&&r.chainNew(a,o));if(c===l){r&&r.chainMatch(s.index);var p=s.index,d=s.matches_pt1?o:a,g=s.matches_head,v=n[p],m=g?v[0]:v[v.length-1],y=g?v[1]:v[v.length-2],x=g?v[v.length-1]:v[0],b=g?v[v.length-2]:v[1];return e.pointsCollinear(y,m,d)&&(g?(r&&r.chainRemoveHead(s.index,d),v.shift()):(r&&r.chainRemoveTail(s.index,d),v.pop()),m=y),e.pointsSame(x,d)?(n.splice(p,1),e.pointsCollinear(b,x,m)&&(g?(r&&r.chainRemoveTail(s.index,m),v.pop()):(r&&r.chainRemoveHead(s.index,m),v.shift())),r&&r.chainClose(s.index),void i.push(v)):void(g?(r&&r.chainAddHead(s.index,d),v.unshift(d)):(r&&r.chainAddTail(s.index,d),v.push(d)))}var _=s.index,w=l.index;r&&r.chainConnect(_,w);var k=n[_].length<n[w].length;s.matches_head?l.matches_head?k?(A(_),M(_,w)):(A(w),M(w,_)):M(w,_):l.matches_head?M(_,w):k?(A(_),M(w,_)):(A(w),M(_,w))}function T(t,e,r){return c.index=t,c.matches_head=e,c.matches_pt1=r,c===s?(c=l,!1):(c=null,!0)}function A(t){r&&r.chainReverse(t),n[t].reverse()}function M(t,i){var a=n[t],o=n[i],s=a[a.length-1],l=a[a.length-2],c=o[0],u=o[1];e.pointsCollinear(l,s,c)&&(r&&r.chainRemoveTail(t,s),a.pop(),s=l),e.pointsCollinear(s,c,u)&&(r&&r.chainRemoveHead(i,c),o.shift()),r&&r.chainJoin(t,i),n[t]=a.concat(o),n.splice(i,1)}}),i}},{}],480:[function(t,e,r){function n(t,e,r){var n=[];return t.forEach(function(t){var i=(t.myFill.above?8:0)+(t.myFill.below?4:0)+(t.otherFill&&t.otherFill.above?2:0)+(t.otherFill&&t.otherFill.below?1:0);0!==e[i]&&n.push({id:r?r.segmentId():-1,start:t.start,end:t.end,myFill:{above:1===e[i],below:2===e[i]},otherFill:null})}),r&&r.selected(n),n}var i={union:function(t,e){return n(t,[0,2,1,0,2,2,0,0,1,0,1,0,0,0,0,0],e)},intersect:function(t,e){return n(t,[0,0,0,0,0,2,0,2,0,0,1,1,0,2,1,0],e)},difference:function(t,e){return n(t,[0,0,0,0,2,0,2,0,1,1,0,0,0,1,2,0],e)},differenceRev:function(t,e){return n(t,[0,2,1,0,0,0,1,1,0,2,0,2,0,0,0,0],e)},xor:function(t,e){return n(t,[0,2,1,0,2,0,0,1,1,0,0,2,0,1,2,0],e)}};e.exports=i},{}],481:[function(t,e,r){\\\"use strict\\\";var n=new Float64Array(4),i=new Float64Array(4),a=new Float64Array(4);e.exports=function(t,e,r,o,s){n.length<o.length&&(n=new Float64Array(o.length),i=new Float64Array(o.length),a=new Float64Array(o.length));for(var l=0;l<o.length;++l)n[l]=t[l]-o[l],i[l]=e[l]-t[l],a[l]=r[l]-t[l];var c=0,u=0,h=0,f=0,p=0,d=0;for(l=0;l<o.length;++l){var g=i[l],v=a[l],m=n[l];c+=g*g,u+=g*v,h+=v*v,f+=m*g,p+=m*v,d+=m*m}var y,x,b,_,w,k=Math.abs(c*h-u*u),T=u*p-h*f,A=u*f-c*p;if(T+A<=k)if(T<0)A<0&&f<0?(A=0,-f>=c?(T=1,y=c+2*f+d):y=f*(T=-f/c)+d):(T=0,p>=0?(A=0,y=d):-p>=h?(A=1,y=h+2*p+d):y=p*(A=-p/h)+d);else if(A<0)A=0,f>=0?(T=0,y=d):-f>=c?(T=1,y=c+2*f+d):y=f*(T=-f/c)+d;else{var M=1/k;y=(T*=M)*(c*T+u*(A*=M)+2*f)+A*(u*T+h*A+2*p)+d}else T<0?(b=h+p)>(x=u+f)?(_=b-x)>=(w=c-2*u+h)?(T=1,A=0,y=c+2*f+d):y=(T=_/w)*(c*T+u*(A=1-T)+2*f)+A*(u*T+h*A+2*p)+d:(T=0,b<=0?(A=1,y=h+2*p+d):p>=0?(A=0,y=d):y=p*(A=-p/h)+d):A<0?(b=c+f)>(x=u+p)?(_=b-x)>=(w=c-2*u+h)?(A=1,T=0,y=h+2*p+d):y=(T=1-(A=_/w))*(c*T+u*A+2*f)+A*(u*T+h*A+2*p)+d:(A=0,b<=0?(T=1,y=c+2*f+d):f>=0?(T=0,y=d):y=f*(T=-f/c)+d):(_=h+p-u-f)<=0?(T=0,A=1,y=h+2*p+d):_>=(w=c-2*u+h)?(T=1,A=0,y=c+2*f+d):y=(T=_/w)*(c*T+u*(A=1-T)+2*f)+A*(u*T+h*A+2*p)+d;var S=1-T-A;for(l=0;l<o.length;++l)s[l]=S*t[l]+T*e[l]+A*r[l];return y<0?0:y}},{}],482:[function(t,e,r){var n,i,a=e.exports={};function o(){throw new Error(\\\"setTimeout has not been defined\\\")}function s(){throw new Error(\\\"clearTimeout has not been defined\\\")}function l(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n=\\\"function\\\"==typeof setTimeout?setTimeout:o}catch(t){n=o}try{i=\\\"function\\\"==typeof clearTimeout?clearTimeout:s}catch(t){i=s}}();var c,u=[],h=!1,f=-1;function p(){h&&c&&(h=!1,c.length?u=c.concat(u):f=-1,u.length&&d())}function d(){if(!h){var t=l(p);h=!0;for(var e=u.length;e;){for(c=u,u=[];++f<e;)c&&c[f].run();f=-1,e=u.length}c=null,h=!1,function(t){if(i===clearTimeout)return clearTimeout(t);if((i===s||!i)&&clearTimeout)return i=clearTimeout,clearTimeout(t);try{i(t)}catch(e){try{return i.call(null,t)}catch(e){return i.call(this,t)}}}(t)}}function g(t,e){this.fun=t,this.array=e}function v(){}a.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)e[r-1]=arguments[r];u.push(new g(t,e)),1!==u.length||h||l(d)},g.prototype.run=function(){this.fun.apply(null,this.array)},a.title=\\\"browser\\\",a.browser=!0,a.env={},a.argv=[],a.version=\\\"\\\",a.versions={},a.on=v,a.addListener=v,a.once=v,a.off=v,a.removeListener=v,a.removeAllListeners=v,a.emit=v,a.prependListener=v,a.prependOnceListener=v,a.listeners=function(t){return[]},a.binding=function(t){throw new Error(\\\"process.binding is not supported\\\")},a.cwd=function(){return\\\"/\\\"},a.chdir=function(t){throw new Error(\\\"process.chdir is not supported\\\")},a.umask=function(){return 0}},{}],483:[function(t,e,r){e.exports=t(\\\"gl-quat/slerp\\\")},{\\\"gl-quat/slerp\\\":293}],484:[function(t,e,r){(function(r){for(var n=t(\\\"performance-now\\\"),i=\\\"undefined\\\"==typeof window?r:window,a=[\\\"moz\\\",\\\"webkit\\\"],o=\\\"AnimationFrame\\\",s=i[\\\"request\\\"+o],l=i[\\\"cancel\\\"+o]||i[\\\"cancelRequest\\\"+o],c=0;!s&&c<a.length;c++)s=i[a[c]+\\\"Request\\\"+o],l=i[a[c]+\\\"Cancel\\\"+o]||i[a[c]+\\\"CancelRequest\\\"+o];if(!s||!l){var u=0,h=0,f=[];s=function(t){if(0===f.length){var e=n(),r=Math.max(0,1e3/60-(e-u));u=r+e,setTimeout(function(){var t=f.slice(0);f.length=0;for(var e=0;e<t.length;e++)if(!t[e].cancelled)try{t[e].callback(u)}catch(t){setTimeout(function(){throw t},0)}},Math.round(r))}return f.push({handle:++h,callback:t,cancelled:!1}),h},l=function(t){for(var e=0;e<f.length;e++)f[e].handle===t&&(f[e].cancelled=!0)}}e.exports=function(t){return s.call(i,t)},e.exports.cancel=function(){l.apply(i,arguments)},e.exports.polyfill=function(t){t||(t=i),t.requestAnimationFrame=s,t.cancelAnimationFrame=l}}).call(this,\\\"undefined\\\"!=typeof global?global:\\\"undefined\\\"!=typeof self?self:\\\"undefined\\\"!=typeof window?window:{})},{\\\"performance-now\\\":462}],485:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"big-rat/add\\\");e.exports=function(t,e){for(var r=t.length,i=new Array(r),a=0;a<r;++a)i[a]=n(t[a],e[a]);return i}},{\\\"big-rat/add\\\":75}],486:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){for(var e=new Array(t.length),r=0;r<t.length;++r)e[r]=n(t[r]);return e};var n=t(\\\"big-rat\\\")},{\\\"big-rat\\\":78}],487:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"big-rat\\\"),i=t(\\\"big-rat/mul\\\");e.exports=function(t,e){for(var r=n(e),a=t.length,o=new Array(a),s=0;s<a;++s)o[s]=i(t[s],r);return o}},{\\\"big-rat\\\":78,\\\"big-rat/mul\\\":87}],488:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"big-rat/sub\\\");e.exports=function(t,e){for(var r=t.length,i=new Array(r),a=0;a<r;++a)i[a]=n(t[a],e[a]);return i}},{\\\"big-rat/sub\\\":89}],489:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"compare-cell\\\"),i=t(\\\"compare-oriented-cell\\\"),a=t(\\\"cell-orientation\\\");e.exports=function(t){t.sort(i);for(var e=t.length,r=0,o=0;o<e;++o){var s=t[o],l=a(s);if(0!==l){if(r>0){var c=t[r-1];if(0===n(s,c)&&a(c)!==l){r-=1;continue}}t[r++]=s}}return t.length=r,t}},{\\\"cell-orientation\\\":112,\\\"compare-cell\\\":128,\\\"compare-oriented-cell\\\":129}],490:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"array-bounds\\\"),i=t(\\\"color-normalize\\\"),a=t(\\\"update-diff\\\"),o=t(\\\"pick-by-alias\\\"),s=t(\\\"object-assign\\\"),l=t(\\\"flatten-vertex-data\\\"),c=t(\\\"to-float32\\\"),u=c.float32,h=c.fract32;e.exports=function(t,e){\\\"function\\\"==typeof t?(e||(e={}),e.regl=t):e=t;e.length&&(e.positions=e);if(!(t=e.regl).hasExtension(\\\"ANGLE_instanced_arrays\\\"))throw Error(\\\"regl-error2d: `ANGLE_instanced_arrays` extension should be enabled\\\");var r,c,p,d,g,v,m=t._gl,y={color:\\\"black\\\",capSize:5,lineWidth:1,opacity:1,viewport:null,range:null,offset:0,count:0,bounds:null,positions:[],errors:[]},x=[];return d=t.buffer({usage:\\\"dynamic\\\",type:\\\"uint8\\\",data:new Uint8Array(0)}),c=t.buffer({usage:\\\"dynamic\\\",type:\\\"float\\\",data:new Uint8Array(0)}),p=t.buffer({usage:\\\"dynamic\\\",type:\\\"float\\\",data:new Uint8Array(0)}),g=t.buffer({usage:\\\"dynamic\\\",type:\\\"float\\\",data:new Uint8Array(0)}),v=t.buffer({usage:\\\"static\\\",type:\\\"float\\\",data:f}),k(e),r=t({vert:\\\"\\\\n\\\\t\\\\tprecision highp float;\\\\n\\\\n\\\\t\\\\tattribute vec2 position, positionFract;\\\\n\\\\t\\\\tattribute vec4 error;\\\\n\\\\t\\\\tattribute vec4 color;\\\\n\\\\n\\\\t\\\\tattribute vec2 direction, lineOffset, capOffset;\\\\n\\\\n\\\\t\\\\tuniform vec4 viewport;\\\\n\\\\t\\\\tuniform float lineWidth, capSize;\\\\n\\\\t\\\\tuniform vec2 scale, scaleFract, translate, translateFract;\\\\n\\\\n\\\\t\\\\tvarying vec4 fragColor;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\tfragColor = color / 255.;\\\\n\\\\n\\\\t\\\\t\\\\tvec2 pixelOffset = lineWidth * lineOffset + (capSize + lineWidth) * capOffset;\\\\n\\\\n\\\\t\\\\t\\\\tvec2 dxy = -step(.5, direction.xy) * error.xz + step(direction.xy, vec2(-.5)) * error.yw;\\\\n\\\\n\\\\t\\\\t\\\\tvec2 position = position + dxy;\\\\n\\\\n\\\\t\\\\t\\\\tvec2 pos = (position + translate) * scale\\\\n\\\\t\\\\t\\\\t\\\\t+ (positionFract + translateFract) * scale\\\\n\\\\t\\\\t\\\\t\\\\t+ (position + translate) * scaleFract\\\\n\\\\t\\\\t\\\\t\\\\t+ (positionFract + translateFract) * scaleFract;\\\\n\\\\n\\\\t\\\\t\\\\tpos += pixelOffset / viewport.zw;\\\\n\\\\n\\\\t\\\\t\\\\tgl_Position = vec4(pos * 2. - 1., 0, 1);\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\t\\\",frag:\\\"\\\\n\\\\t\\\\tprecision highp float;\\\\n\\\\n\\\\t\\\\tvarying vec4 fragColor;\\\\n\\\\n\\\\t\\\\tuniform float opacity;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\tgl_FragColor = fragColor;\\\\n\\\\t\\\\t\\\\tgl_FragColor.a *= opacity;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\t\\\",uniforms:{range:t.prop(\\\"range\\\"),lineWidth:t.prop(\\\"lineWidth\\\"),capSize:t.prop(\\\"capSize\\\"),opacity:t.prop(\\\"opacity\\\"),scale:t.prop(\\\"scale\\\"),translate:t.prop(\\\"translate\\\"),scaleFract:t.prop(\\\"scaleFract\\\"),translateFract:t.prop(\\\"translateFract\\\"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]}},attributes:{color:{buffer:d,offset:function(t,e){return 4*e.offset},divisor:1},position:{buffer:c,offset:function(t,e){return 8*e.offset},divisor:1},positionFract:{buffer:p,offset:function(t,e){return 8*e.offset},divisor:1},error:{buffer:g,offset:function(t,e){return 16*e.offset},divisor:1},direction:{buffer:v,stride:24,offset:0},lineOffset:{buffer:v,stride:24,offset:8},capOffset:{buffer:v,stride:24,offset:16}},primitive:\\\"triangles\\\",blend:{enable:!0,color:[0,0,0,0],equation:{rgb:\\\"add\\\",alpha:\\\"add\\\"},func:{srcRGB:\\\"src alpha\\\",dstRGB:\\\"one minus src alpha\\\",srcAlpha:\\\"one minus dst alpha\\\",dstAlpha:\\\"one\\\"}},depth:{enable:!1},scissor:{enable:!0,box:t.prop(\\\"viewport\\\")},viewport:t.prop(\\\"viewport\\\"),stencil:!1,instances:t.prop(\\\"count\\\"),count:f.length}),s(b,{update:k,draw:_,destroy:T,regl:t,gl:m,canvas:m.canvas,groups:x}),b;function b(t){t?k(t):null===t&&T(),_()}function _(e){if(\\\"number\\\"==typeof e)return w(e);e&&!Array.isArray(e)&&(e=[e]),t._refresh(),x.forEach(function(t,r){t&&(e&&(e[r]?t.draw=!0:t.draw=!1),t.draw?w(r):t.draw=!0)})}function w(t){\\\"number\\\"==typeof t&&(t=x[t]),null!=t&&t&&t.count&&t.color&&t.opacity&&t.positions&&t.positions.length>1&&(t.scaleRatio=[t.scale[0]*t.viewport.width,t.scale[1]*t.viewport.height],r(t),t.after&&t.after(t))}function k(t){if(t){null!=t.length?\\\"number\\\"==typeof t[0]&&(t=[{positions:t}]):Array.isArray(t)||(t=[t]);var e=0,r=0;if(b.groups=x=t.map(function(t,c){var u=x[c];return t?(\\\"function\\\"==typeof t?t={after:t}:\\\"number\\\"==typeof t[0]&&(t={positions:t}),t=o(t,{color:\\\"color colors fill\\\",capSize:\\\"capSize cap capsize cap-size\\\",lineWidth:\\\"lineWidth line-width width line thickness\\\",opacity:\\\"opacity alpha\\\",range:\\\"range dataBox\\\",viewport:\\\"viewport viewBox\\\",errors:\\\"errors error\\\",positions:\\\"positions position data points\\\"}),u||(x[c]=u={id:c,scale:null,translate:null,scaleFract:null,translateFract:null,draw:!0},t=s({},y,t)),a(u,t,[{lineWidth:function(t){return.5*+t},capSize:function(t){return.5*+t},opacity:parseFloat,errors:function(t){return t=l(t),r+=t.length,t},positions:function(t,r){return t=l(t,\\\"float64\\\"),r.count=Math.floor(t.length/2),r.bounds=n(t,2),r.offset=e,e+=r.count,t}},{color:function(t,e){var r=e.count;if(t||(t=\\\"transparent\\\"),!Array.isArray(t)||\\\"number\\\"==typeof t[0]){var n=t;t=Array(r);for(var a=0;a<r;a++)t[a]=n}if(t.length<r)throw Error(\\\"Not enough colors\\\");for(var o=new Uint8Array(4*r),s=0;s<r;s++){var l=i(t[s],\\\"uint8\\\");o.set(l,4*s)}return o},range:function(t,e,r){var n=e.bounds;return t||(t=n),e.scale=[1/(t[2]-t[0]),1/(t[3]-t[1])],e.translate=[-t[0],-t[1]],e.scaleFract=h(e.scale),e.translateFract=h(e.translate),t},viewport:function(t){var e;return Array.isArray(t)?e={x:t[0],y:t[1],width:t[2]-t[0],height:t[3]-t[1]}:t?(e={x:t.x||t.left||0,y:t.y||t.top||0},t.right?e.width=t.right-e.x:e.width=t.w||t.width||0,t.bottom?e.height=t.bottom-e.y:e.height=t.h||t.height||0):e={x:0,y:0,width:m.drawingBufferWidth,height:m.drawingBufferHeight},e}}]),u):u}),e||r){var f=x.reduce(function(t,e,r){return t+(e?e.count:0)},0),v=new Float64Array(2*f),_=new Uint8Array(4*f),w=new Float32Array(4*f);x.forEach(function(t,e){if(t){var r=t.positions,n=t.count,i=t.offset,a=t.color,o=t.errors;n&&(_.set(a,4*i),w.set(o,4*i),v.set(r,2*i))}}),c(u(v)),p(h(v)),d(_),g(w)}}}function T(){c.destroy(),p.destroy(),d.destroy(),g.destroy(),v.destroy()}};var f=[[1,0,0,1,0,0],[1,0,0,-1,0,0],[-1,0,0,-1,0,0],[-1,0,0,-1,0,0],[-1,0,0,1,0,0],[1,0,0,1,0,0],[1,0,-1,0,0,1],[1,0,-1,0,0,-1],[1,0,1,0,0,-1],[1,0,1,0,0,-1],[1,0,1,0,0,1],[1,0,-1,0,0,1],[-1,0,-1,0,0,1],[-1,0,-1,0,0,-1],[-1,0,1,0,0,-1],[-1,0,1,0,0,-1],[-1,0,1,0,0,1],[-1,0,-1,0,0,1],[0,1,1,0,0,0],[0,1,-1,0,0,0],[0,-1,-1,0,0,0],[0,-1,-1,0,0,0],[0,1,1,0,0,0],[0,-1,1,0,0,0],[0,1,0,-1,1,0],[0,1,0,-1,-1,0],[0,1,0,1,-1,0],[0,1,0,1,1,0],[0,1,0,-1,1,0],[0,1,0,1,-1,0],[0,-1,0,-1,1,0],[0,-1,0,-1,-1,0],[0,-1,0,1,-1,0],[0,-1,0,1,1,0],[0,-1,0,-1,1,0],[0,-1,0,1,-1,0]]},{\\\"array-bounds\\\":65,\\\"color-normalize\\\":120,\\\"flatten-vertex-data\\\":227,\\\"object-assign\\\":454,\\\"pick-by-alias\\\":465,\\\"to-float32\\\":538,\\\"update-diff\\\":549}],491:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"color-normalize\\\"),i=t(\\\"array-bounds\\\"),a=t(\\\"object-assign\\\"),o=t(\\\"glslify\\\"),s=t(\\\"pick-by-alias\\\"),l=t(\\\"flatten-vertex-data\\\"),c=t(\\\"earcut\\\"),u=t(\\\"array-normalize\\\"),h=t(\\\"to-float32\\\"),f=h.float32,p=h.fract32,d=t(\\\"es6-weak-map\\\"),g=t(\\\"parse-rect\\\");function v(t,e){if(!(this instanceof v))return new v(t,e);if(\\\"function\\\"==typeof t?(e||(e={}),e.regl=t):e=t,e.length&&(e.positions=e),!(t=e.regl).hasExtension(\\\"ANGLE_instanced_arrays\\\"))throw Error(\\\"regl-error2d: `ANGLE_instanced_arrays` extension should be enabled\\\");this.gl=t._gl,this.regl=t,this.passes=[],this.shaders=v.shaders.has(t)?v.shaders.get(t):v.shaders.set(t,v.createShaders(t)).get(t),this.update(e)}e.exports=v,v.dashMult=2,v.maxPatternLength=256,v.precisionThreshold=3e6,v.maxPoints=1e4,v.maxLines=2048,v.shaders=new d,v.createShaders=function(t){var e,r=t.buffer({usage:\\\"static\\\",type:\\\"float\\\",data:[0,1,0,0,1,1,1,0]}),n={primitive:\\\"triangle strip\\\",instances:t.prop(\\\"count\\\"),count:4,offset:0,uniforms:{miterMode:function(t,e){return\\\"round\\\"===e.join?2:1},miterLimit:t.prop(\\\"miterLimit\\\"),scale:t.prop(\\\"scale\\\"),scaleFract:t.prop(\\\"scaleFract\\\"),translateFract:t.prop(\\\"translateFract\\\"),translate:t.prop(\\\"translate\\\"),thickness:t.prop(\\\"thickness\\\"),dashPattern:t.prop(\\\"dashTexture\\\"),opacity:t.prop(\\\"opacity\\\"),pixelRatio:t.context(\\\"pixelRatio\\\"),id:t.prop(\\\"id\\\"),dashSize:t.prop(\\\"dashLength\\\"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]},depth:t.prop(\\\"depth\\\")},blend:{enable:!0,color:[0,0,0,0],equation:{rgb:\\\"add\\\",alpha:\\\"add\\\"},func:{srcRGB:\\\"src alpha\\\",dstRGB:\\\"one minus src alpha\\\",srcAlpha:\\\"one minus dst alpha\\\",dstAlpha:\\\"one\\\"}},depth:{enable:function(t,e){return!e.overlay}},stencil:{enable:!1},scissor:{enable:!0,box:t.prop(\\\"viewport\\\")},viewport:t.prop(\\\"viewport\\\")},i=t(a({vert:o([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec2 aCoord, bCoord, aCoordFract, bCoordFract;\\\\nattribute vec4 color;\\\\nattribute float lineEnd, lineTop;\\\\n\\\\nuniform vec2 scale, scaleFract, translate, translateFract;\\\\nuniform float thickness, pixelRatio, id, depth;\\\\nuniform vec4 viewport;\\\\n\\\\nvarying vec4 fragColor;\\\\nvarying vec2 tangent;\\\\n\\\\nvec2 project(vec2 position, vec2 positionFract, vec2 scale, vec2 scaleFract, vec2 translate, vec2 translateFract) {\\\\n\\\\t// the order is important\\\\n\\\\treturn position * scale + translate\\\\n       + positionFract * scale + translateFract\\\\n       + position * scaleFract\\\\n       + positionFract * scaleFract;\\\\n}\\\\n\\\\nvoid main() {\\\\n\\\\tfloat lineStart = 1. - lineEnd;\\\\n\\\\tfloat lineOffset = lineTop * 2. - 1.;\\\\n\\\\n\\\\tvec2 diff = (bCoord + bCoordFract - aCoord - aCoordFract);\\\\n\\\\ttangent = normalize(diff * scale * viewport.zw);\\\\n\\\\tvec2 normal = vec2(-tangent.y, tangent.x);\\\\n\\\\n\\\\tvec2 position = project(aCoord, aCoordFract, scale, scaleFract, translate, translateFract) * lineStart\\\\n\\\\t\\\\t+ project(bCoord, bCoordFract, scale, scaleFract, translate, translateFract) * lineEnd\\\\n\\\\n\\\\t\\\\t+ thickness * normal * .5 * lineOffset / viewport.zw;\\\\n\\\\n\\\\tgl_Position = vec4(position * 2.0 - 1.0, depth, 1);\\\\n\\\\n\\\\tfragColor = color / 255.;\\\\n}\\\\n\\\"]),frag:o([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nuniform sampler2D dashPattern;\\\\n\\\\nuniform float dashSize, pixelRatio, thickness, opacity, id;\\\\n\\\\nvarying vec4 fragColor;\\\\nvarying vec2 tangent;\\\\n\\\\nvoid main() {\\\\n\\\\tfloat alpha = 1.;\\\\n\\\\n\\\\tfloat t = fract(dot(tangent, gl_FragCoord.xy) / dashSize) * .5 + .25;\\\\n\\\\tfloat dash = texture2D(dashPattern, vec2(t, .5)).r;\\\\n\\\\n\\\\tgl_FragColor = fragColor;\\\\n\\\\tgl_FragColor.a *= alpha * opacity * dash;\\\\n}\\\\n\\\"]),attributes:{lineEnd:{buffer:r,divisor:0,stride:8,offset:0},lineTop:{buffer:r,divisor:0,stride:8,offset:4},aCoord:{buffer:t.prop(\\\"positionBuffer\\\"),stride:8,offset:8,divisor:1},bCoord:{buffer:t.prop(\\\"positionBuffer\\\"),stride:8,offset:16,divisor:1},aCoordFract:{buffer:t.prop(\\\"positionFractBuffer\\\"),stride:8,offset:8,divisor:1},bCoordFract:{buffer:t.prop(\\\"positionFractBuffer\\\"),stride:8,offset:16,divisor:1},color:{buffer:t.prop(\\\"colorBuffer\\\"),stride:4,offset:0,divisor:1}}},n));try{e=t(a({cull:{enable:!0,face:\\\"back\\\"},vert:o([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec2 aCoord, bCoord, nextCoord, prevCoord;\\\\nattribute vec4 aColor, bColor;\\\\nattribute float lineEnd, lineTop;\\\\n\\\\nuniform vec2 scale, translate;\\\\nuniform float thickness, pixelRatio, id, depth;\\\\nuniform vec4 viewport;\\\\nuniform float miterLimit, miterMode;\\\\n\\\\nvarying vec4 fragColor;\\\\nvarying vec4 startCutoff, endCutoff;\\\\nvarying vec2 tangent;\\\\nvarying vec2 startCoord, endCoord;\\\\nvarying float enableStartMiter, enableEndMiter;\\\\n\\\\nconst float REVERSE_THRESHOLD = -.875;\\\\nconst float MIN_DIFF = 1e-6;\\\\n\\\\n// TODO: possible optimizations: avoid overcalculating all for vertices and calc just one instead\\\\n// TODO: precalculate dot products, normalize things beforehead etc.\\\\n// TODO: refactor to rectangular algorithm\\\\n\\\\nfloat distToLine(vec2 p, vec2 a, vec2 b) {\\\\n\\\\tvec2 diff = b - a;\\\\n\\\\tvec2 perp = normalize(vec2(-diff.y, diff.x));\\\\n\\\\treturn dot(p - a, perp);\\\\n}\\\\n\\\\nbool isNaN( float val ){\\\\n  return ( val < 0.0 || 0.0 < val || val == 0.0 ) ? false : true;\\\\n}\\\\n\\\\nvoid main() {\\\\n\\\\tvec2 aCoord = aCoord, bCoord = bCoord, prevCoord = prevCoord, nextCoord = nextCoord;\\\\n\\\\n  vec2 adjustedScale;\\\\n  adjustedScale.x = (abs(scale.x) < MIN_DIFF) ? MIN_DIFF : scale.x;\\\\n  adjustedScale.y = (abs(scale.y) < MIN_DIFF) ? MIN_DIFF : scale.y;\\\\n\\\\n  vec2 scaleRatio = adjustedScale * viewport.zw;\\\\n\\\\tvec2 normalWidth = thickness / scaleRatio;\\\\n\\\\n\\\\tfloat lineStart = 1. - lineEnd;\\\\n\\\\tfloat lineBot = 1. - lineTop;\\\\n\\\\n\\\\tfragColor = (lineStart * aColor + lineEnd * bColor) / 255.;\\\\n\\\\n\\\\tif (isNaN(aCoord.x) || isNaN(aCoord.y) || isNaN(bCoord.x) || isNaN(bCoord.y)) return;\\\\n\\\\n\\\\tif (aCoord == prevCoord) prevCoord = aCoord + normalize(bCoord - aCoord);\\\\n\\\\tif (bCoord == nextCoord) nextCoord = bCoord - normalize(bCoord - aCoord);\\\\n\\\\n\\\\tvec2 prevDiff = aCoord - prevCoord;\\\\n\\\\tvec2 currDiff = bCoord - aCoord;\\\\n\\\\tvec2 nextDiff = nextCoord - bCoord;\\\\n\\\\n\\\\tvec2 prevTangent = normalize(prevDiff * scaleRatio);\\\\n\\\\tvec2 currTangent = normalize(currDiff * scaleRatio);\\\\n\\\\tvec2 nextTangent = normalize(nextDiff * scaleRatio);\\\\n\\\\n\\\\tvec2 prevNormal = vec2(-prevTangent.y, prevTangent.x);\\\\n\\\\tvec2 currNormal = vec2(-currTangent.y, currTangent.x);\\\\n\\\\tvec2 nextNormal = vec2(-nextTangent.y, nextTangent.x);\\\\n\\\\n\\\\tvec2 startJoinDirection = normalize(prevTangent - currTangent);\\\\n\\\\tvec2 endJoinDirection = normalize(currTangent - nextTangent);\\\\n\\\\n\\\\t// collapsed/unidirectional segment cases\\\\n\\\\t// FIXME: there should be more elegant solution\\\\n\\\\tvec2 prevTanDiff = abs(prevTangent - currTangent);\\\\n\\\\tvec2 nextTanDiff = abs(nextTangent - currTangent);\\\\n\\\\tif (max(prevTanDiff.x, prevTanDiff.y) < MIN_DIFF) {\\\\n\\\\t\\\\tstartJoinDirection = currNormal;\\\\n\\\\t}\\\\n\\\\tif (max(nextTanDiff.x, nextTanDiff.y) < MIN_DIFF) {\\\\n\\\\t\\\\tendJoinDirection = currNormal;\\\\n\\\\t}\\\\n\\\\tif (aCoord == bCoord) {\\\\n\\\\t\\\\tendJoinDirection = startJoinDirection;\\\\n\\\\t\\\\tcurrNormal = prevNormal;\\\\n\\\\t\\\\tcurrTangent = prevTangent;\\\\n\\\\t}\\\\n\\\\n\\\\ttangent = currTangent;\\\\n\\\\n\\\\t//calculate join shifts relative to normals\\\\n\\\\tfloat startJoinShift = dot(currNormal, startJoinDirection);\\\\n\\\\tfloat endJoinShift = dot(currNormal, endJoinDirection);\\\\n\\\\n\\\\tfloat startMiterRatio = abs(1. / startJoinShift);\\\\n\\\\tfloat endMiterRatio = abs(1. / endJoinShift);\\\\n\\\\n\\\\tvec2 startJoin = startJoinDirection * startMiterRatio;\\\\n\\\\tvec2 endJoin = endJoinDirection * endMiterRatio;\\\\n\\\\n\\\\tvec2 startTopJoin, startBotJoin, endTopJoin, endBotJoin;\\\\n\\\\tstartTopJoin = sign(startJoinShift) * startJoin * .5;\\\\n\\\\tstartBotJoin = -startTopJoin;\\\\n\\\\n\\\\tendTopJoin = sign(endJoinShift) * endJoin * .5;\\\\n\\\\tendBotJoin = -endTopJoin;\\\\n\\\\n\\\\tvec2 aTopCoord = aCoord + normalWidth * startTopJoin;\\\\n\\\\tvec2 bTopCoord = bCoord + normalWidth * endTopJoin;\\\\n\\\\tvec2 aBotCoord = aCoord + normalWidth * startBotJoin;\\\\n\\\\tvec2 bBotCoord = bCoord + normalWidth * endBotJoin;\\\\n\\\\n\\\\t//miter anti-clipping\\\\n\\\\tfloat baClipping = distToLine(bCoord, aCoord, aBotCoord) / dot(normalize(normalWidth * endBotJoin), normalize(normalWidth.yx * vec2(-startBotJoin.y, startBotJoin.x)));\\\\n\\\\tfloat abClipping = distToLine(aCoord, bCoord, bTopCoord) / dot(normalize(normalWidth * startBotJoin), normalize(normalWidth.yx * vec2(-endBotJoin.y, endBotJoin.x)));\\\\n\\\\n\\\\t//prevent close to reverse direction switch\\\\n\\\\tbool prevReverse = dot(currTangent, prevTangent) <= REVERSE_THRESHOLD && abs(dot(currTangent, prevNormal)) * min(length(prevDiff), length(currDiff)) <  length(normalWidth * currNormal);\\\\n\\\\tbool nextReverse = dot(currTangent, nextTangent) <= REVERSE_THRESHOLD && abs(dot(currTangent, nextNormal)) * min(length(nextDiff), length(currDiff)) <  length(normalWidth * currNormal);\\\\n\\\\n\\\\tif (prevReverse) {\\\\n\\\\t\\\\t//make join rectangular\\\\n\\\\t\\\\tvec2 miterShift = normalWidth * startJoinDirection * miterLimit * .5;\\\\n\\\\t\\\\tfloat normalAdjust = 1. - min(miterLimit / startMiterRatio, 1.);\\\\n\\\\t\\\\taBotCoord = aCoord + miterShift - normalAdjust * normalWidth * currNormal * .5;\\\\n\\\\t\\\\taTopCoord = aCoord + miterShift + normalAdjust * normalWidth * currNormal * .5;\\\\n\\\\t}\\\\n\\\\telse if (!nextReverse && baClipping > 0. && baClipping < length(normalWidth * endBotJoin)) {\\\\n\\\\t\\\\t//handle miter clipping\\\\n\\\\t\\\\tbTopCoord -= normalWidth * endTopJoin;\\\\n\\\\t\\\\tbTopCoord += normalize(endTopJoin * normalWidth) * baClipping;\\\\n\\\\t}\\\\n\\\\n\\\\tif (nextReverse) {\\\\n\\\\t\\\\t//make join rectangular\\\\n\\\\t\\\\tvec2 miterShift = normalWidth * endJoinDirection * miterLimit * .5;\\\\n\\\\t\\\\tfloat normalAdjust = 1. - min(miterLimit / endMiterRatio, 1.);\\\\n\\\\t\\\\tbBotCoord = bCoord + miterShift - normalAdjust * normalWidth * currNormal * .5;\\\\n\\\\t\\\\tbTopCoord = bCoord + miterShift + normalAdjust * normalWidth * currNormal * .5;\\\\n\\\\t}\\\\n\\\\telse if (!prevReverse && abClipping > 0. && abClipping < length(normalWidth * startBotJoin)) {\\\\n\\\\t\\\\t//handle miter clipping\\\\n\\\\t\\\\taBotCoord -= normalWidth * startBotJoin;\\\\n\\\\t\\\\taBotCoord += normalize(startBotJoin * normalWidth) * abClipping;\\\\n\\\\t}\\\\n\\\\n\\\\tvec2 aTopPosition = (aTopCoord) * adjustedScale + translate;\\\\n\\\\tvec2 aBotPosition = (aBotCoord) * adjustedScale + translate;\\\\n\\\\n\\\\tvec2 bTopPosition = (bTopCoord) * adjustedScale + translate;\\\\n\\\\tvec2 bBotPosition = (bBotCoord) * adjustedScale + translate;\\\\n\\\\n\\\\t//position is normalized 0..1 coord on the screen\\\\n\\\\tvec2 position = (aTopPosition * lineTop + aBotPosition * lineBot) * lineStart + (bTopPosition * lineTop + bBotPosition * lineBot) * lineEnd;\\\\n\\\\n\\\\tstartCoord = aCoord * scaleRatio + translate * viewport.zw + viewport.xy;\\\\n\\\\tendCoord = bCoord * scaleRatio + translate * viewport.zw + viewport.xy;\\\\n\\\\n\\\\tgl_Position = vec4(position  * 2.0 - 1.0, depth, 1);\\\\n\\\\n\\\\tenableStartMiter = step(dot(currTangent, prevTangent), .5);\\\\n\\\\tenableEndMiter = step(dot(currTangent, nextTangent), .5);\\\\n\\\\n\\\\t//bevel miter cutoffs\\\\n\\\\tif (miterMode == 1.) {\\\\n\\\\t\\\\tif (enableStartMiter == 1.) {\\\\n\\\\t\\\\t\\\\tvec2 startMiterWidth = vec2(startJoinDirection) * thickness * miterLimit * .5;\\\\n\\\\t\\\\t\\\\tstartCutoff = vec4(aCoord, aCoord);\\\\n\\\\t\\\\t\\\\tstartCutoff.zw += vec2(-startJoinDirection.y, startJoinDirection.x) / scaleRatio;\\\\n\\\\t\\\\t\\\\tstartCutoff = startCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\\\\n\\\\t\\\\t\\\\tstartCutoff += viewport.xyxy;\\\\n\\\\t\\\\t\\\\tstartCutoff += startMiterWidth.xyxy;\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tif (enableEndMiter == 1.) {\\\\n\\\\t\\\\t\\\\tvec2 endMiterWidth = vec2(endJoinDirection) * thickness * miterLimit * .5;\\\\n\\\\t\\\\t\\\\tendCutoff = vec4(bCoord, bCoord);\\\\n\\\\t\\\\t\\\\tendCutoff.zw += vec2(-endJoinDirection.y, endJoinDirection.x)  / scaleRatio;\\\\n\\\\t\\\\t\\\\tendCutoff = endCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\\\\n\\\\t\\\\t\\\\tendCutoff += viewport.xyxy;\\\\n\\\\t\\\\t\\\\tendCutoff += endMiterWidth.xyxy;\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\t//round miter cutoffs\\\\n\\\\telse if (miterMode == 2.) {\\\\n\\\\t\\\\tif (enableStartMiter == 1.) {\\\\n\\\\t\\\\t\\\\tvec2 startMiterWidth = vec2(startJoinDirection) * thickness * abs(dot(startJoinDirection, currNormal)) * .5;\\\\n\\\\t\\\\t\\\\tstartCutoff = vec4(aCoord, aCoord);\\\\n\\\\t\\\\t\\\\tstartCutoff.zw += vec2(-startJoinDirection.y, startJoinDirection.x) / scaleRatio;\\\\n\\\\t\\\\t\\\\tstartCutoff = startCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\\\\n\\\\t\\\\t\\\\tstartCutoff += viewport.xyxy;\\\\n\\\\t\\\\t\\\\tstartCutoff += startMiterWidth.xyxy;\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tif (enableEndMiter == 1.) {\\\\n\\\\t\\\\t\\\\tvec2 endMiterWidth = vec2(endJoinDirection) * thickness * abs(dot(endJoinDirection, currNormal)) * .5;\\\\n\\\\t\\\\t\\\\tendCutoff = vec4(bCoord, bCoord);\\\\n\\\\t\\\\t\\\\tendCutoff.zw += vec2(-endJoinDirection.y, endJoinDirection.x)  / scaleRatio;\\\\n\\\\t\\\\t\\\\tendCutoff = endCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\\\\n\\\\t\\\\t\\\\tendCutoff += viewport.xyxy;\\\\n\\\\t\\\\t\\\\tendCutoff += endMiterWidth.xyxy;\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n}\\\\n\\\"]),frag:o([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nuniform sampler2D dashPattern;\\\\nuniform float dashSize, pixelRatio, thickness, opacity, id, miterMode;\\\\n\\\\nvarying vec4 fragColor;\\\\nvarying vec2 tangent;\\\\nvarying vec4 startCutoff, endCutoff;\\\\nvarying vec2 startCoord, endCoord;\\\\nvarying float enableStartMiter, enableEndMiter;\\\\n\\\\nfloat distToLine(vec2 p, vec2 a, vec2 b) {\\\\n\\\\tvec2 diff = b - a;\\\\n\\\\tvec2 perp = normalize(vec2(-diff.y, diff.x));\\\\n\\\\treturn dot(p - a, perp);\\\\n}\\\\n\\\\nvoid main() {\\\\n\\\\tfloat alpha = 1., distToStart, distToEnd;\\\\n\\\\tfloat cutoff = thickness * .5;\\\\n\\\\n\\\\t//bevel miter\\\\n\\\\tif (miterMode == 1.) {\\\\n\\\\t\\\\tif (enableStartMiter == 1.) {\\\\n\\\\t\\\\t\\\\tdistToStart = distToLine(gl_FragCoord.xy, startCutoff.xy, startCutoff.zw);\\\\n\\\\t\\\\t\\\\tif (distToStart < -1.) {\\\\n\\\\t\\\\t\\\\t\\\\tdiscard;\\\\n\\\\t\\\\t\\\\t\\\\treturn;\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\talpha *= min(max(distToStart + 1., 0.), 1.);\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tif (enableEndMiter == 1.) {\\\\n\\\\t\\\\t\\\\tdistToEnd = distToLine(gl_FragCoord.xy, endCutoff.xy, endCutoff.zw);\\\\n\\\\t\\\\t\\\\tif (distToEnd < -1.) {\\\\n\\\\t\\\\t\\\\t\\\\tdiscard;\\\\n\\\\t\\\\t\\\\t\\\\treturn;\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\talpha *= min(max(distToEnd + 1., 0.), 1.);\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\t// round miter\\\\n\\\\telse if (miterMode == 2.) {\\\\n\\\\t\\\\tif (enableStartMiter == 1.) {\\\\n\\\\t\\\\t\\\\tdistToStart = distToLine(gl_FragCoord.xy, startCutoff.xy, startCutoff.zw);\\\\n\\\\t\\\\t\\\\tif (distToStart < 0.) {\\\\n\\\\t\\\\t\\\\t\\\\tfloat radius = length(gl_FragCoord.xy - startCoord);\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tif(radius > cutoff + .5) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tdiscard;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\treturn;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\talpha -= smoothstep(cutoff - .5, cutoff + .5, radius);\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tif (enableEndMiter == 1.) {\\\\n\\\\t\\\\t\\\\tdistToEnd = distToLine(gl_FragCoord.xy, endCutoff.xy, endCutoff.zw);\\\\n\\\\t\\\\t\\\\tif (distToEnd < 0.) {\\\\n\\\\t\\\\t\\\\t\\\\tfloat radius = length(gl_FragCoord.xy - endCoord);\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tif(radius > cutoff + .5) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tdiscard;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\treturn;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\talpha -= smoothstep(cutoff - .5, cutoff + .5, radius);\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\tfloat t = fract(dot(tangent, gl_FragCoord.xy) / dashSize) * .5 + .25;\\\\n\\\\tfloat dash = texture2D(dashPattern, vec2(t, .5)).r;\\\\n\\\\n\\\\tgl_FragColor = fragColor;\\\\n\\\\tgl_FragColor.a *= alpha * opacity * dash;\\\\n}\\\\n\\\"]),attributes:{lineEnd:{buffer:r,divisor:0,stride:8,offset:0},lineTop:{buffer:r,divisor:0,stride:8,offset:4},aColor:{buffer:t.prop(\\\"colorBuffer\\\"),stride:4,offset:0,divisor:1},bColor:{buffer:t.prop(\\\"colorBuffer\\\"),stride:4,offset:4,divisor:1},prevCoord:{buffer:t.prop(\\\"positionBuffer\\\"),stride:8,offset:0,divisor:1},aCoord:{buffer:t.prop(\\\"positionBuffer\\\"),stride:8,offset:8,divisor:1},bCoord:{buffer:t.prop(\\\"positionBuffer\\\"),stride:8,offset:16,divisor:1},nextCoord:{buffer:t.prop(\\\"positionBuffer\\\"),stride:8,offset:24,divisor:1}}},n))}catch(t){e=i}return{fill:t({primitive:\\\"triangle\\\",elements:function(t,e){return e.triangles},offset:0,vert:o([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute vec2 position, positionFract;\\\\n\\\\nuniform vec4 color;\\\\nuniform vec2 scale, scaleFract, translate, translateFract;\\\\nuniform float pixelRatio, id;\\\\nuniform vec4 viewport;\\\\nuniform float opacity;\\\\n\\\\nvarying vec4 fragColor;\\\\n\\\\nconst float MAX_LINES = 256.;\\\\n\\\\nvoid main() {\\\\n\\\\tfloat depth = (MAX_LINES - 4. - id) / (MAX_LINES);\\\\n\\\\n\\\\tvec2 position = position * scale + translate\\\\n       + positionFract * scale + translateFract\\\\n       + position * scaleFract\\\\n       + positionFract * scaleFract;\\\\n\\\\n\\\\tgl_Position = vec4(position * 2.0 - 1.0, depth, 1);\\\\n\\\\n\\\\tfragColor = color / 255.;\\\\n\\\\tfragColor.a *= opacity;\\\\n}\\\\n\\\"]),frag:o([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nvarying vec4 fragColor;\\\\n\\\\nvoid main() {\\\\n\\\\tgl_FragColor = fragColor;\\\\n}\\\\n\\\"]),uniforms:{scale:t.prop(\\\"scale\\\"),color:t.prop(\\\"fill\\\"),scaleFract:t.prop(\\\"scaleFract\\\"),translateFract:t.prop(\\\"translateFract\\\"),translate:t.prop(\\\"translate\\\"),opacity:t.prop(\\\"opacity\\\"),pixelRatio:t.context(\\\"pixelRatio\\\"),id:t.prop(\\\"id\\\"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]}},attributes:{position:{buffer:t.prop(\\\"positionBuffer\\\"),stride:8,offset:8},positionFract:{buffer:t.prop(\\\"positionFractBuffer\\\"),stride:8,offset:8}},blend:n.blend,depth:{enable:!1},scissor:n.scissor,stencil:n.stencil,viewport:n.viewport}),rect:i,miter:e}},v.defaults={dashes:null,join:\\\"miter\\\",miterLimit:1,thickness:10,cap:\\\"square\\\",color:\\\"black\\\",opacity:1,overlay:!1,viewport:null,range:null,close:!1,fill:null},v.prototype.render=function(){for(var t,e=[],r=arguments.length;r--;)e[r]=arguments[r];e.length&&(t=this).update.apply(t,e),this.draw()},v.prototype.draw=function(){for(var t=this,e=[],r=arguments.length;r--;)e[r]=arguments[r];return(e.length?e:this.passes).forEach(function(e,r){var n;if(e&&Array.isArray(e))return(n=t).draw.apply(n,e);\\\"number\\\"==typeof e&&(e=t.passes[e]),e&&e.count>1&&e.opacity&&(t.regl._refresh(),e.fill&&e.triangles&&e.triangles.length>2&&t.shaders.fill(e),e.thickness&&(e.scale[0]*e.viewport.width>v.precisionThreshold||e.scale[1]*e.viewport.height>v.precisionThreshold?t.shaders.rect(e):\\\"rect\\\"===e.join||!e.join&&(e.thickness<=2||e.count>=v.maxPoints)?t.shaders.rect(e):t.shaders.miter(e)))}),this},v.prototype.update=function(t){var e=this;if(t){null!=t.length?\\\"number\\\"==typeof t[0]&&(t=[{positions:t}]):Array.isArray(t)||(t=[t]);var r=this.regl,o=this.gl;if(t.forEach(function(t,h){var d=e.passes[h];if(void 0!==t)if(null!==t){if(\\\"number\\\"==typeof t[0]&&(t={positions:t}),t=s(t,{positions:\\\"positions points data coords\\\",thickness:\\\"thickness lineWidth lineWidths line-width linewidth width stroke-width strokewidth strokeWidth\\\",join:\\\"lineJoin linejoin join type mode\\\",miterLimit:\\\"miterlimit miterLimit\\\",dashes:\\\"dash dashes dasharray dash-array dashArray\\\",color:\\\"color colour stroke colors colours stroke-color strokeColor\\\",fill:\\\"fill fill-color fillColor\\\",opacity:\\\"alpha opacity\\\",overlay:\\\"overlay crease overlap intersect\\\",close:\\\"closed close closed-path closePath\\\",range:\\\"range dataBox\\\",viewport:\\\"viewport viewBox\\\",hole:\\\"holes hole hollow\\\"}),d||(e.passes[h]=d={id:h,scale:null,scaleFract:null,translate:null,translateFract:null,count:0,hole:[],depth:0,dashLength:1,dashTexture:r.texture({channels:1,data:new Uint8Array([255]),width:1,height:1,mag:\\\"linear\\\",min:\\\"linear\\\"}),colorBuffer:r.buffer({usage:\\\"dynamic\\\",type:\\\"uint8\\\",data:new Uint8Array}),positionBuffer:r.buffer({usage:\\\"dynamic\\\",type:\\\"float\\\",data:new Uint8Array}),positionFractBuffer:r.buffer({usage:\\\"dynamic\\\",type:\\\"float\\\",data:new Uint8Array})},t=a({},v.defaults,t)),null!=t.thickness&&(d.thickness=parseFloat(t.thickness)),null!=t.opacity&&(d.opacity=parseFloat(t.opacity)),null!=t.miterLimit&&(d.miterLimit=parseFloat(t.miterLimit)),null!=t.overlay&&(d.overlay=!!t.overlay,h<v.maxLines&&(d.depth=2*(v.maxLines-1-h%v.maxLines)/v.maxLines-1)),null!=t.join&&(d.join=t.join),null!=t.hole&&(d.hole=t.hole),null!=t.fill&&(d.fill=t.fill?n(t.fill,\\\"uint8\\\"):null),null!=t.viewport&&(d.viewport=g(t.viewport)),d.viewport||(d.viewport=g([o.drawingBufferWidth,o.drawingBufferHeight])),null!=t.close&&(d.close=t.close),null===t.positions&&(t.positions=[]),t.positions){var m,y;if(t.positions.x&&t.positions.y){var x=t.positions.x,b=t.positions.y;y=d.count=Math.max(x.length,b.length),m=new Float64Array(2*y);for(var _=0;_<y;_++)m[2*_]=x[_],m[2*_+1]=b[_]}else m=l(t.positions,\\\"float64\\\"),y=d.count=Math.floor(m.length/2);var w=d.bounds=i(m,2);if(d.fill){for(var k=[],T={},A=0,M=0,S=0,E=d.count;M<E;M++){var C=m[2*M],L=m[2*M+1];isNaN(C)||isNaN(L)||null==C||null==L?(C=m[2*A],L=m[2*A+1],T[M]=A):A=M,k[S++]=C,k[S++]=L}for(var P=c(k,d.hole||[]),O=0,z=P.length;O<z;O++)null!=T[P[O]]&&(P[O]=T[P[O]]);d.triangles=P}var I=new Float64Array(m);u(I,2,w);var D=new Float64Array(2*y+6);d.close?m[0]===m[2*y-2]&&m[1]===m[2*y-1]?(D[0]=I[2*y-4],D[1]=I[2*y-3]):(D[0]=I[2*y-2],D[1]=I[2*y-1]):(D[0]=I[0],D[1]=I[1]),D.set(I,2),d.close?m[0]===m[2*y-2]&&m[1]===m[2*y-1]?(D[2*y+2]=I[2],D[2*y+3]=I[3],d.count-=1):(D[2*y+2]=I[0],D[2*y+3]=I[1],D[2*y+4]=I[2],D[2*y+5]=I[3]):(D[2*y+2]=I[2*y-2],D[2*y+3]=I[2*y-1],D[2*y+4]=I[2*y-2],D[2*y+5]=I[2*y-1]),d.positionBuffer(f(D)),d.positionFractBuffer(p(D))}if(t.range?d.range=t.range:d.range||(d.range=d.bounds),(t.range||t.positions)&&d.count){var R=d.bounds,F=R[2]-R[0],B=R[3]-R[1],N=d.range[2]-d.range[0],j=d.range[3]-d.range[1];d.scale=[F/N,B/j],d.translate=[-d.range[0]/N+R[0]/N||0,-d.range[1]/j+R[1]/j||0],d.scaleFract=p(d.scale),d.translateFract=p(d.translate)}if(t.dashes){var U,V=0;if(!t.dashes||t.dashes.length<2)V=1,U=new Uint8Array([255,255,255,255,255,255,255,255]);else{V=0;for(var q=0;q<t.dashes.length;++q)V+=t.dashes[q];U=new Uint8Array(V*v.dashMult);for(var H=0,G=255,Y=0;Y<2;Y++)for(var W=0;W<t.dashes.length;++W){for(var X=0,Z=t.dashes[W]*v.dashMult*.5;X<Z;++X)U[H++]=G;G^=255}}d.dashLength=V,d.dashTexture({channels:1,data:U,width:U.length,height:1,mag:\\\"linear\\\",min:\\\"linear\\\"},0,0)}if(t.color){var J=d.count,K=t.color;K||(K=\\\"transparent\\\");var $=new Uint8Array(4*J+4);if(Array.isArray(K)&&\\\"number\\\"!=typeof K[0]){for(var Q=0;Q<J;Q++){var tt=n(K[Q],\\\"uint8\\\");$.set(tt,4*Q)}$.set(n(K[0],\\\"uint8\\\"),4*J)}else for(var et=n(K,\\\"uint8\\\"),rt=0;rt<J+1;rt++)$.set(et,4*rt);d.colorBuffer({usage:\\\"dynamic\\\",type:\\\"uint8\\\",data:$})}}else e.passes[h]=null}),t.length<this.passes.length){for(var h=t.length;h<this.passes.length;h++){var d=e.passes[h];d&&(d.colorBuffer.destroy(),d.positionBuffer.destroy(),d.dashTexture.destroy())}this.passes.length=t.length}for(var m=[],y=0;y<this.passes.length;y++)null!==e.passes[y]&&m.push(e.passes[y]);return this.passes=m,this}},v.prototype.destroy=function(){return this.passes.forEach(function(t){t.colorBuffer.destroy(),t.positionBuffer.destroy(),t.dashTexture.destroy()}),this.passes.length=0,this}},{\\\"array-bounds\\\":65,\\\"array-normalize\\\":66,\\\"color-normalize\\\":120,earcut:492,\\\"es6-weak-map\\\":493,\\\"flatten-vertex-data\\\":227,glslify:409,\\\"object-assign\\\":454,\\\"parse-rect\\\":459,\\\"pick-by-alias\\\":465,\\\"to-float32\\\":538}],492:[function(t,e,r){\\\"use strict\\\";function n(t,e,r){r=r||2;var n,s,l,c,u,p,g,v=e&&e.length,m=v?e[0]*r:t.length,y=i(t,0,m,r,!0),x=[];if(!y||y.next===y.prev)return x;if(v&&(y=function(t,e,r,n){var o,s,l,c,u,p=[];for(o=0,s=e.length;o<s;o++)l=e[o]*n,c=o<s-1?e[o+1]*n:t.length,(u=i(t,l,c,n,!1))===u.next&&(u.steiner=!0),p.push(d(u));for(p.sort(h),o=0;o<p.length;o++)f(p[o],r),r=a(r,r.next);return r}(t,e,y,r)),t.length>80*r){n=l=t[0],s=c=t[1];for(var b=r;b<m;b+=r)(u=t[b])<n&&(n=u),(p=t[b+1])<s&&(s=p),u>l&&(l=u),p>c&&(c=p);g=0!==(g=Math.max(l-n,c-s))?1/g:0}return o(y,x,r,n,s,g),x}function i(t,e,r,n,i){var a,o;if(i===A(t,e,r,n)>0)for(a=e;a<r;a+=n)o=w(a,t[a],t[a+1],o);else for(a=r-n;a>=e;a-=n)o=w(a,t[a],t[a+1],o);return o&&y(o,o.next)&&(k(o),o=o.next),o}function a(t,e){if(!t)return t;e||(e=t);var r,n=t;do{if(r=!1,n.steiner||!y(n,n.next)&&0!==m(n.prev,n,n.next))n=n.next;else{if(k(n),(n=e=n.prev)===n.next)break;r=!0}}while(r||n!==e);return e}function o(t,e,r,n,i,h,f){if(t){!f&&h&&function(t,e,r,n){var i=t;do{null===i.z&&(i.z=p(i.x,i.y,e,r,n)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,function(t){var e,r,n,i,a,o,s,l,c=1;do{for(r=t,t=null,a=null,o=0;r;){for(o++,n=r,s=0,e=0;e<c&&(s++,n=n.nextZ);e++);for(l=c;s>0||l>0&&n;)0!==s&&(0===l||!n||r.z<=n.z)?(i=r,r=r.nextZ,s--):(i=n,n=n.nextZ,l--),a?a.nextZ=i:t=i,i.prevZ=a,a=i;r=n}a.nextZ=null,c*=2}while(o>1)}(i)}(t,n,i,h);for(var d,g,v=t;t.prev!==t.next;)if(d=t.prev,g=t.next,h?l(t,n,i,h):s(t))e.push(d.i/r),e.push(t.i/r),e.push(g.i/r),k(t),t=g.next,v=g.next;else if((t=g)===v){f?1===f?o(t=c(t,e,r),e,r,n,i,h,2):2===f&&u(t,e,r,n,i,h):o(a(t),e,r,n,i,h,1);break}}}function s(t){var e=t.prev,r=t,n=t.next;if(m(e,r,n)>=0)return!1;for(var i=t.next.next;i!==t.prev;){if(g(e.x,e.y,r.x,r.y,n.x,n.y,i.x,i.y)&&m(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function l(t,e,r,n){var i=t.prev,a=t,o=t.next;if(m(i,a,o)>=0)return!1;for(var s=i.x<a.x?i.x<o.x?i.x:o.x:a.x<o.x?a.x:o.x,l=i.y<a.y?i.y<o.y?i.y:o.y:a.y<o.y?a.y:o.y,c=i.x>a.x?i.x>o.x?i.x:o.x:a.x>o.x?a.x:o.x,u=i.y>a.y?i.y>o.y?i.y:o.y:a.y>o.y?a.y:o.y,h=p(s,l,e,r,n),f=p(c,u,e,r,n),d=t.prevZ,v=t.nextZ;d&&d.z>=h&&v&&v.z<=f;){if(d!==t.prev&&d!==t.next&&g(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&m(d.prev,d,d.next)>=0)return!1;if(d=d.prevZ,v!==t.prev&&v!==t.next&&g(i.x,i.y,a.x,a.y,o.x,o.y,v.x,v.y)&&m(v.prev,v,v.next)>=0)return!1;v=v.nextZ}for(;d&&d.z>=h;){if(d!==t.prev&&d!==t.next&&g(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&m(d.prev,d,d.next)>=0)return!1;d=d.prevZ}for(;v&&v.z<=f;){if(v!==t.prev&&v!==t.next&&g(i.x,i.y,a.x,a.y,o.x,o.y,v.x,v.y)&&m(v.prev,v,v.next)>=0)return!1;v=v.nextZ}return!0}function c(t,e,r){var n=t;do{var i=n.prev,a=n.next.next;!y(i,a)&&x(i,n,n.next,a)&&b(i,a)&&b(a,i)&&(e.push(i.i/r),e.push(n.i/r),e.push(a.i/r),k(n),k(n.next),n=t=a),n=n.next}while(n!==t);return n}function u(t,e,r,n,i,s){var l=t;do{for(var c=l.next.next;c!==l.prev;){if(l.i!==c.i&&v(l,c)){var u=_(l,c);return l=a(l,l.next),u=a(u,u.next),o(l,e,r,n,i,s),void o(u,e,r,n,i,s)}c=c.next}l=l.next}while(l!==t)}function h(t,e){return t.x-e.x}function f(t,e){if(e=function(t,e){var r,n=e,i=t.x,a=t.y,o=-1/0;do{if(a<=n.y&&a>=n.next.y&&n.next.y!==n.y){var s=n.x+(a-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s<=i&&s>o){if(o=s,s===i){if(a===n.y)return n;if(a===n.next.y)return n.next}r=n.x<n.next.x?n:n.next}}n=n.next}while(n!==e);if(!r)return null;if(i===o)return r.prev;var l,c=r,u=r.x,h=r.y,f=1/0;n=r.next;for(;n!==c;)i>=n.x&&n.x>=u&&i!==n.x&&g(a<h?i:o,a,u,h,a<h?o:i,a,n.x,n.y)&&((l=Math.abs(a-n.y)/(i-n.x))<f||l===f&&n.x>r.x)&&b(n,t)&&(r=n,f=l),n=n.next;return r}(t,e)){var r=_(e,t);a(r,r.next)}}function p(t,e,r,n,i){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*i)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*i)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function d(t){var e=t,r=t;do{(e.x<r.x||e.x===r.x&&e.y<r.y)&&(r=e),e=e.next}while(e!==t);return r}function g(t,e,r,n,i,a,o,s){return(i-o)*(e-s)-(t-o)*(a-s)>=0&&(t-o)*(n-s)-(r-o)*(e-s)>=0&&(r-o)*(a-s)-(i-o)*(n-s)>=0}function v(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&x(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}(t,e)&&b(t,e)&&b(e,t)&&function(t,e){var r=t,n=!1,i=(t.x+e.x)/2,a=(t.y+e.y)/2;do{r.y>a!=r.next.y>a&&r.next.y!==r.y&&i<(r.next.x-r.x)*(a-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next}while(r!==t);return n}(t,e)}function m(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function y(t,e){return t.x===e.x&&t.y===e.y}function x(t,e,r,n){return!!(y(t,e)&&y(r,n)||y(t,n)&&y(r,e))||m(t,e,r)>0!=m(t,e,n)>0&&m(r,n,t)>0!=m(r,n,e)>0}function b(t,e){return m(t.prev,t,t.next)<0?m(t,e,t.next)>=0&&m(t,t.prev,e)>=0:m(t,e,t.prev)<0||m(t,t.next,e)<0}function _(t,e){var r=new T(t.i,t.x,t.y),n=new T(e.i,e.x,e.y),i=t.next,a=e.prev;return t.next=e,e.prev=t,r.next=i,i.prev=r,n.next=r,r.prev=n,a.next=n,n.prev=a,n}function w(t,e,r,n){var i=new T(t,e,r);return n?(i.next=n.next,i.prev=n,n.next.prev=i,n.next=i):(i.prev=i,i.next=i),i}function k(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function T(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function A(t,e,r,n){for(var i=0,a=e,o=r-n;a<r;a+=n)i+=(t[o]-t[a])*(t[a+1]+t[o+1]),o=a;return i}e.exports=n,e.exports.default=n,n.deviation=function(t,e,r,n){var i=e&&e.length,a=i?e[0]*r:t.length,o=Math.abs(A(t,0,a,r));if(i)for(var s=0,l=e.length;s<l;s++){var c=e[s]*r,u=s<l-1?e[s+1]*r:t.length;o-=Math.abs(A(t,c,u,r))}var h=0;for(s=0;s<n.length;s+=3){var f=n[s]*r,p=n[s+1]*r,d=n[s+2]*r;h+=Math.abs((t[f]-t[d])*(t[p+1]-t[f+1])-(t[f]-t[p])*(t[d+1]-t[f+1]))}return 0===o&&0===h?0:Math.abs((h-o)/o)},n.flatten=function(t){for(var e=t[0][0].length,r={vertices:[],holes:[],dimensions:e},n=0,i=0;i<t.length;i++){for(var a=0;a<t[i].length;a++)for(var o=0;o<e;o++)r.vertices.push(t[i][a][o]);i>0&&(n+=t[i-1].length,r.holes.push(n))}return r}},{}],493:[function(t,e,r){arguments[4][318][0].apply(r,arguments)},{\\\"./is-implemented\\\":494,\\\"./polyfill\\\":496,dup:318}],494:[function(t,e,r){arguments[4][319][0].apply(r,arguments)},{dup:319}],495:[function(t,e,r){arguments[4][320][0].apply(r,arguments)},{dup:320}],496:[function(t,e,r){arguments[4][321][0].apply(r,arguments)},{\\\"./is-native-implemented\\\":495,d:151,dup:321,\\\"es5-ext/object/is-value\\\":194,\\\"es5-ext/object/set-prototype-of\\\":200,\\\"es5-ext/object/valid-object\\\":204,\\\"es5-ext/object/valid-value\\\":205,\\\"es5-ext/string/random-uniq\\\":210,\\\"es6-iterator/for-of\\\":212,\\\"es6-iterator/get\\\":213,\\\"es6-symbol\\\":219}],497:[function(t,e,r){\\\"use strict\\\";function n(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=[],n=!0,i=!1,a=void 0;try{for(var o,s=t[Symbol.iterator]();!(n=(o=s.next()).done)&&(r.push(o.value),!e||r.length!==e);n=!0);}catch(t){i=!0,a=t}finally{try{n||null==s.return||s.return()}finally{if(i)throw a}}return r}(t,e)||function(){throw new TypeError(\\\"Invalid attempt to destructure non-iterable instance\\\")}()}function i(t){return function(t){if(Array.isArray(t)){for(var e=0,r=new Array(t.length);e<t.length;e++)r[e]=t[e];return r}}(t)||function(t){if(Symbol.iterator in Object(t)||\\\"[object Arguments]\\\"===Object.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError(\\\"Invalid attempt to spread non-iterable instance\\\")}()}var a=t(\\\"color-normalize\\\"),o=t(\\\"array-bounds\\\"),s=t(\\\"color-id\\\"),l=t(\\\"point-cluster\\\"),c=t(\\\"object-assign\\\"),u=t(\\\"glslify\\\"),h=t(\\\"pick-by-alias\\\"),f=t(\\\"update-diff\\\"),p=t(\\\"flatten-vertex-data\\\"),d=t(\\\"is-iexplorer\\\"),g=t(\\\"to-float32\\\"),v=t(\\\"parse-rect\\\"),m=y;function y(t,e){var r=this;if(!(this instanceof y))return new y(t,e);\\\"function\\\"==typeof t?(e||(e={}),e.regl=t):(e=t,t=null),e&&e.length&&(e.positions=e);var n,i=(t=e.regl)._gl,a=[];this.tooManyColors=d,n=t.texture({data:new Uint8Array(1020),width:255,height:1,type:\\\"uint8\\\",format:\\\"rgba\\\",wrapS:\\\"clamp\\\",wrapT:\\\"clamp\\\",mag:\\\"nearest\\\",min:\\\"nearest\\\"}),c(this,{regl:t,gl:i,groups:[],markerCache:[null],markerTextures:[null],palette:a,paletteIds:{},paletteTexture:n,maxColors:255,maxSize:100,canvas:i.canvas}),this.update(e);var o={uniforms:{pixelRatio:t.context(\\\"pixelRatio\\\"),palette:n,paletteSize:function(t,e){return[r.tooManyColors?0:255,n.height]},scale:t.prop(\\\"scale\\\"),scaleFract:t.prop(\\\"scaleFract\\\"),translate:t.prop(\\\"translate\\\"),translateFract:t.prop(\\\"translateFract\\\"),opacity:t.prop(\\\"opacity\\\"),marker:t.prop(\\\"markerTexture\\\")},attributes:{x:function(t,e){return e.xAttr||{buffer:e.positionBuffer,stride:8,offset:0}},y:function(t,e){return e.yAttr||{buffer:e.positionBuffer,stride:8,offset:4}},xFract:function(t,e){return e.xAttr?{constant:[0,0]}:{buffer:e.positionFractBuffer,stride:8,offset:0}},yFract:function(t,e){return e.yAttr?{constant:[0,0]}:{buffer:e.positionFractBuffer,stride:8,offset:4}},size:function(t,e){return e.size.length?{buffer:e.sizeBuffer,stride:2,offset:0}:{constant:[Math.round(255*e.size/r.maxSize)]}},borderSize:function(t,e){return e.borderSize.length?{buffer:e.sizeBuffer,stride:2,offset:1}:{constant:[Math.round(255*e.borderSize/r.maxSize)]}},colorId:function(t,e){return e.color.length?{buffer:e.colorBuffer,stride:r.tooManyColors?8:4,offset:0}:{constant:r.tooManyColors?a.slice(4*e.color,4*e.color+4):[e.color]}},borderColorId:function(t,e){return e.borderColor.length?{buffer:e.colorBuffer,stride:r.tooManyColors?8:4,offset:r.tooManyColors?4:2}:{constant:r.tooManyColors?a.slice(4*e.borderColor,4*e.borderColor+4):[e.borderColor]}},isActive:function(t,e){return!0===e.activation?{constant:[1]}:e.activation?e.activation:{constant:[0]}}},blend:{enable:!0,color:[0,0,0,1],func:{srcRGB:\\\"src alpha\\\",dstRGB:\\\"one minus src alpha\\\",srcAlpha:\\\"one minus dst alpha\\\",dstAlpha:\\\"one\\\"}},scissor:{enable:!0,box:t.prop(\\\"viewport\\\")},viewport:t.prop(\\\"viewport\\\"),stencil:{enable:!1},depth:{enable:!1},elements:t.prop(\\\"elements\\\"),count:t.prop(\\\"count\\\"),offset:t.prop(\\\"offset\\\"),primitive:\\\"points\\\"},s=c({},o);s.frag=u([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nvarying vec4 fragColor, fragBorderColor;\\\\nvarying float fragWidth, fragBorderColorLevel, fragColorLevel;\\\\n\\\\nuniform sampler2D marker;\\\\nuniform float pixelRatio, opacity;\\\\n\\\\nfloat smoothStep(float x, float y) {\\\\n  return 1.0 / (1.0 + exp(50.0*(x - y)));\\\\n}\\\\n\\\\nvoid main() {\\\\n  float dist = texture2D(marker, gl_PointCoord).r, delta = fragWidth;\\\\n\\\\n  // max-distance alpha\\\\n  if (dist < 0.003) discard;\\\\n\\\\n  // null-border case\\\\n  if (fragBorderColorLevel == fragColorLevel || fragBorderColor.a == 0.) {\\\\n    float colorAmt = smoothstep(.5 - delta, .5 + delta, dist);\\\\n    gl_FragColor = vec4(fragColor.rgb, colorAmt * fragColor.a * opacity);\\\\n  }\\\\n  else {\\\\n    float borderColorAmt = smoothstep(fragBorderColorLevel - delta, fragBorderColorLevel + delta, dist);\\\\n    float colorAmt = smoothstep(fragColorLevel - delta, fragColorLevel + delta, dist);\\\\n\\\\n    vec4 color = fragBorderColor;\\\\n    color.a *= borderColorAmt;\\\\n    color = mix(color, fragColor, colorAmt);\\\\n    color.a *= opacity;\\\\n\\\\n    gl_FragColor = color;\\\\n  }\\\\n\\\\n}\\\\n\\\"]),s.vert=u([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute float x, y, xFract, yFract;\\\\nattribute float size, borderSize;\\\\nattribute vec4 colorId, borderColorId;\\\\nattribute float isActive;\\\\n\\\\nuniform vec2 scale, scaleFract, translate, translateFract, paletteSize;\\\\nuniform float pixelRatio;\\\\nuniform sampler2D palette;\\\\n\\\\nconst float maxSize = 100.;\\\\nconst float borderLevel = .5;\\\\n\\\\nvarying vec4 fragColor, fragBorderColor;\\\\nvarying float fragPointSize, fragBorderRadius, fragWidth, fragBorderColorLevel, fragColorLevel;\\\\n\\\\nbool isDirect = (paletteSize.x < 1.);\\\\n\\\\nvec4 getColor(vec4 id) {\\\\n  return isDirect ? id / 255. : texture2D(palette,\\\\n    vec2(\\\\n      (id.x + .5) / paletteSize.x,\\\\n      (id.y + .5) / paletteSize.y\\\\n    )\\\\n  );\\\\n}\\\\n\\\\nvoid main() {\\\\n  if (isActive == 0.) return;\\\\n\\\\n  vec2 position = vec2(x, y);\\\\n  vec2 positionFract = vec2(xFract, yFract);\\\\n\\\\n  vec4 color = getColor(colorId);\\\\n  vec4 borderColor = getColor(borderColorId);\\\\n\\\\n  float size = size * maxSize / 255.;\\\\n  float borderSize = borderSize * maxSize / 255.;\\\\n\\\\n  gl_PointSize = 2. * size * pixelRatio;\\\\n  fragPointSize = size * pixelRatio;\\\\n\\\\n  vec2 pos = (position + translate) * scale\\\\n      + (positionFract + translateFract) * scale\\\\n      + (position + translate) * scaleFract\\\\n      + (positionFract + translateFract) * scaleFract;\\\\n\\\\n  gl_Position = vec4(pos * 2. - 1., 0, 1);\\\\n\\\\n  fragColor = color;\\\\n  fragBorderColor = borderColor;\\\\n  fragWidth = 1. / gl_PointSize;\\\\n\\\\n  fragBorderColorLevel = clamp(borderLevel - borderLevel * borderSize / size, 0., 1.);\\\\n  fragColorLevel = clamp(borderLevel + (1. - borderLevel) * borderSize / size, 0., 1.);\\\\n}\\\"]),this.drawMarker=t(s);var l=c({},o);l.frag=u([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nvarying vec4 fragColor, fragBorderColor;\\\\n\\\\nuniform float opacity;\\\\nvarying float fragBorderRadius, fragWidth;\\\\n\\\\nfloat smoothStep(float edge0, float edge1, float x) {\\\\n\\\\tfloat t;\\\\n\\\\tt = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\\\\n\\\\treturn t * t * (3.0 - 2.0 * t);\\\\n}\\\\n\\\\nvoid main() {\\\\n\\\\tfloat radius, alpha = 1.0, delta = fragWidth;\\\\n\\\\n\\\\tradius = length(2.0 * gl_PointCoord.xy - 1.0);\\\\n\\\\n\\\\tif (radius > 1.0 + delta) {\\\\n\\\\t\\\\tdiscard;\\\\n\\\\t}\\\\n\\\\n\\\\talpha -= smoothstep(1.0 - delta, 1.0 + delta, radius);\\\\n\\\\n\\\\tfloat borderRadius = fragBorderRadius;\\\\n\\\\tfloat ratio = smoothstep(borderRadius - delta, borderRadius + delta, radius);\\\\n\\\\tvec4 color = mix(fragColor, fragBorderColor, ratio);\\\\n\\\\tcolor.a *= alpha * opacity;\\\\n\\\\tgl_FragColor = color;\\\\n}\\\\n\\\"]),l.vert=u([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nattribute float x, y, xFract, yFract;\\\\nattribute float size, borderSize;\\\\nattribute vec4 colorId, borderColorId;\\\\nattribute float isActive;\\\\n\\\\nuniform vec2 scale, scaleFract, translate, translateFract;\\\\nuniform float pixelRatio;\\\\nuniform sampler2D palette;\\\\nuniform vec2 paletteSize;\\\\n\\\\nconst float maxSize = 100.;\\\\n\\\\nvarying vec4 fragColor, fragBorderColor;\\\\nvarying float fragBorderRadius, fragWidth;\\\\n\\\\nbool isDirect = (paletteSize.x < 1.);\\\\n\\\\nvec4 getColor(vec4 id) {\\\\n  return isDirect ? id / 255. : texture2D(palette,\\\\n    vec2(\\\\n      (id.x + .5) / paletteSize.x,\\\\n      (id.y + .5) / paletteSize.y\\\\n    )\\\\n  );\\\\n}\\\\n\\\\nvoid main() {\\\\n  // ignore inactive points\\\\n  if (isActive == 0.) return;\\\\n\\\\n  vec2 position = vec2(x, y);\\\\n  vec2 positionFract = vec2(xFract, yFract);\\\\n\\\\n  vec4 color = getColor(colorId);\\\\n  vec4 borderColor = getColor(borderColorId);\\\\n\\\\n  float size = size * maxSize / 255.;\\\\n  float borderSize = borderSize * maxSize / 255.;\\\\n\\\\n  gl_PointSize = (size + borderSize) * pixelRatio;\\\\n\\\\n  vec2 pos = (position + translate) * scale\\\\n      + (positionFract + translateFract) * scale\\\\n      + (position + translate) * scaleFract\\\\n      + (positionFract + translateFract) * scaleFract;\\\\n\\\\n  gl_Position = vec4(pos * 2. - 1., 0, 1);\\\\n\\\\n  fragBorderRadius = 1. - 2. * borderSize / (size + borderSize);\\\\n  fragColor = color;\\\\n  fragBorderColor = borderColor.a == 0. || borderSize == 0. ? vec4(color.rgb, 0.) : borderColor;\\\\n  fragWidth = 1. / gl_PointSize;\\\\n}\\\\n\\\"]),d&&(l.frag=l.frag.replace(\\\"smoothstep\\\",\\\"smoothStep\\\"),s.frag=s.frag.replace(\\\"smoothstep\\\",\\\"smoothStep\\\")),this.drawCircle=t(l)}y.defaults={color:\\\"black\\\",borderColor:\\\"transparent\\\",borderSize:0,size:12,opacity:1,marker:void 0,viewport:null,range:null,pixelSize:null,count:0,offset:0,bounds:null,positions:[],snap:1e4},y.prototype.render=function(){return arguments.length&&this.update.apply(this,arguments),this.draw(),this},y.prototype.draw=function(){for(var t=this,e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];var i=this.groups;if(1===r.length&&Array.isArray(r[0])&&(null===r[0][0]||Array.isArray(r[0][0]))&&(r=r[0]),this.regl._refresh(),r.length)for(var a=0;a<r.length;a++)this.drawItem(a,r[a]);else i.forEach(function(e,r){t.drawItem(r)});return this},y.prototype.drawItem=function(t,e){var r=this.groups,n=r[t];if(\\\"number\\\"==typeof e&&(t=e,n=r[e],e=null),n&&n.count&&n.opacity){n.activation[0]&&this.drawCircle(this.getMarkerDrawOptions(0,n,e));for(var a=[],o=1;o<n.activation.length;o++)n.activation[o]&&(!0===n.activation[o]||n.activation[o].data.length)&&a.push.apply(a,i(this.getMarkerDrawOptions(o,n,e)));a.length&&this.drawMarker(a)}},y.prototype.getMarkerDrawOptions=function(t,e,r){var i=e.range,a=e.tree,o=e.viewport,s=e.activation,l=e.selectionBuffer,u=e.count;this.regl;if(!a)return r?[c({},e,{markerTexture:this.markerTextures[t],activation:s[t],count:r.length,elements:r,offset:0})]:[c({},e,{markerTexture:this.markerTextures[t],activation:s[t],offset:0})];var h=[],f=a.range(i,{lod:!0,px:[(i[2]-i[0])/o.width,(i[3]-i[1])/o.height]});if(r){for(var p=s[t].data,d=new Uint8Array(u),g=0;g<r.length;g++){var v=r[g];d[v]=p?p[v]:1}l.subdata(d)}for(var m=f.length;m--;){var y=n(f[m],2),x=y[0],b=y[1];h.push(c({},e,{markerTexture:this.markerTextures[t],activation:r?l:s[t],offset:x,count:b-x}))}return h},y.prototype.update=function(){for(var t=this,e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];if(r.length){1===r.length&&Array.isArray(r[0])&&(r=r[0]);var i=this.groups,a=this.gl,s=this.regl,u=this.maxSize,d=this.maxColors,m=this.palette;this.groups=i=r.map(function(e,r){var n=i[r];if(void 0===e)return n;null===e?e={positions:null}:\\\"function\\\"==typeof e?e={ondraw:e}:\\\"number\\\"==typeof e[0]&&(e={positions:e}),null===(e=h(e,{positions:\\\"positions data points\\\",snap:\\\"snap cluster lod tree\\\",size:\\\"sizes size radius\\\",borderSize:\\\"borderSizes borderSize border-size bordersize borderWidth borderWidths border-width borderwidth stroke-width strokeWidth strokewidth outline\\\",color:\\\"colors color fill fill-color fillColor\\\",borderColor:\\\"borderColors borderColor stroke stroke-color strokeColor\\\",marker:\\\"markers marker shape\\\",range:\\\"range dataBox databox\\\",viewport:\\\"viewport viewPort viewBox viewbox\\\",opacity:\\\"opacity alpha transparency\\\",bounds:\\\"bound bounds boundaries limits\\\",tooManyColors:\\\"tooManyColors palette paletteMode optimizePalette enablePalette\\\"})).positions&&(e.positions=[]),null!=e.tooManyColors&&(t.tooManyColors=e.tooManyColors),n||(i[r]=n={id:r,scale:null,translate:null,scaleFract:null,translateFract:null,activation:[],selectionBuffer:s.buffer({data:new Uint8Array(0),usage:\\\"stream\\\",type:\\\"uint8\\\"}),sizeBuffer:s.buffer({data:new Uint8Array(0),usage:\\\"dynamic\\\",type:\\\"uint8\\\"}),colorBuffer:s.buffer({data:new Uint8Array(0),usage:\\\"dynamic\\\",type:\\\"uint8\\\"}),positionBuffer:s.buffer({data:new Uint8Array(0),usage:\\\"dynamic\\\",type:\\\"float\\\"}),positionFractBuffer:s.buffer({data:new Uint8Array(0),usage:\\\"dynamic\\\",type:\\\"float\\\"})},e=c({},y.defaults,e)),!e.positions||\\\"marker\\\"in e||(e.marker=n.marker,delete n.marker),!e.marker||\\\"positions\\\"in e||(e.positions=n.positions,delete n.positions);var x=0,b=0;if(f(n,e,[{snap:!0,size:function(t,e){return null==t&&(t=y.defaults.size),x+=t&&t.length?1:0,t},borderSize:function(t,e){return null==t&&(t=y.defaults.borderSize),x+=t&&t.length?1:0,t},opacity:parseFloat,color:function(e,r){return null==e&&(e=y.defaults.color),e=t.updateColor(e),b++,e},borderColor:function(e,r){return null==e&&(e=y.defaults.borderColor),e=t.updateColor(e),b++,e},bounds:function(t,e,r){return\\\"range\\\"in r||(r.range=null),t},positions:function(t,e,r){var n=e.snap,i=e.positionBuffer,a=e.positionFractBuffer,c=e.selectionBuffer;if(t.x||t.y)return t.x.length?e.xAttr={buffer:s.buffer(t.x),offset:0,stride:4,count:t.x.length}:e.xAttr={buffer:t.x.buffer,offset:4*t.x.offset||0,stride:4*(t.x.stride||1),count:t.x.count},t.y.length?e.yAttr={buffer:s.buffer(t.y),offset:0,stride:4,count:t.y.length}:e.yAttr={buffer:t.y.buffer,offset:4*t.y.offset||0,stride:4*(t.y.stride||1),count:t.y.count},e.count=Math.max(e.xAttr.count,e.yAttr.count),t;t=p(t,\\\"float64\\\");var u=e.count=Math.floor(t.length/2),h=e.bounds=u?o(t,2):null;if(r.range||e.range||(delete e.range,r.range=h),r.marker||e.marker||(delete e.marker,r.marker=null),n&&(!0===n||u>n)?e.tree=l(t,{bounds:h}):n&&n.length&&(e.tree=n),e.tree){var f={primitive:\\\"points\\\",usage:\\\"static\\\",data:e.tree,type:\\\"uint32\\\"};e.elements?e.elements(f):e.elements=s.elements(f)}return i({data:g.float(t),usage:\\\"dynamic\\\"}),a({data:g.fract(t),usage:\\\"dynamic\\\"}),c({data:new Uint8Array(u),type:\\\"uint8\\\",usage:\\\"stream\\\"}),t}},{marker:function(e,r,n){var i=r.activation;if(i.forEach(function(t){return t&&t.destroy&&t.destroy()}),i.length=0,e&&\\\"number\\\"!=typeof e[0]){for(var a=[],o=0,l=Math.min(e.length,r.count);o<l;o++){var c=t.addMarker(e[o]);a[c]||(a[c]=new Uint8Array(r.count)),a[c][o]=1}for(var u=0;u<a.length;u++)if(a[u]){var h={data:a[u],type:\\\"uint8\\\",usage:\\\"static\\\"};i[u]?i[u](h):i[u]=s.buffer(h),i[u].data=a[u]}}else{i[t.addMarker(e)]=!0}return e},range:function(t,e,r){var n=e.bounds;if(n)return t||(t=n),e.scale=[1/(t[2]-t[0]),1/(t[3]-t[1])],e.translate=[-t[0],-t[1]],e.scaleFract=g.fract(e.scale),e.translateFract=g.fract(e.translate),t},viewport:function(t){return v(t||[a.drawingBufferWidth,a.drawingBufferHeight])}}]),x){var _=n,w=_.count,k=_.size,T=_.borderSize,A=_.sizeBuffer,M=new Uint8Array(2*w);if(k.length||T.length)for(var S=0;S<w;S++)M[2*S]=Math.round(255*(null==k[S]?k:k[S])/u),M[2*S+1]=Math.round(255*(null==T[S]?T:T[S])/u);A({data:M,usage:\\\"dynamic\\\"})}if(b){var E,C=n,L=C.count,P=C.color,O=C.borderColor,z=C.colorBuffer;if(t.tooManyColors){if(P.length||O.length){E=new Uint8Array(8*L);for(var I=0;I<L;I++){var D=P[I];E[8*I]=m[4*D],E[8*I+1]=m[4*D+1],E[8*I+2]=m[4*D+2],E[8*I+3]=m[4*D+3];var R=O[I];E[8*I+4]=m[4*R],E[8*I+5]=m[4*R+1],E[8*I+6]=m[4*R+2],E[8*I+7]=m[4*R+3]}}}else if(P.length||O.length){E=new Uint8Array(4*L+2);for(var F=0;F<L;F++)null!=P[F]&&(E[4*F]=P[F]%d,E[4*F+1]=Math.floor(P[F]/d)),null!=O[F]&&(E[4*F+2]=O[F]%d,E[4*F+3]=Math.floor(O[F]/d))}z({data:E||new Uint8Array(0),type:\\\"uint8\\\",usage:\\\"dynamic\\\"})}return n})}},y.prototype.addMarker=function(t){var e,r=this.markerTextures,n=this.regl,i=this.markerCache,a=null==t?0:i.indexOf(t);if(a>=0)return a;if(t instanceof Uint8Array||t instanceof Uint8ClampedArray)e=t;else{e=new Uint8Array(t.length);for(var o=0,s=t.length;o<s;o++)e[o]=255*t[o]}var l=Math.floor(Math.sqrt(e.length));return a=r.length,i.push(t),r.push(n.texture({channels:1,data:e,radius:l,mag:\\\"linear\\\",min:\\\"linear\\\"})),a},y.prototype.updateColor=function(t){var e=this.paletteIds,r=this.palette,n=this.maxColors;Array.isArray(t)||(t=[t]);var i=[];if(\\\"number\\\"==typeof t[0]){var o=[];if(Array.isArray(t))for(var l=0;l<t.length;l+=4)o.push(t.slice(l,l+4));else for(var c=0;c<t.length;c+=4)o.push(t.subarray(c,c+4));t=o}for(var u=0;u<t.length;u++){var h=t[u];h=a(h,\\\"uint8\\\");var f=s(h,!1);if(null==e[f]){var p=r.length;e[f]=Math.floor(p/4),r[p]=h[0],r[p+1]=h[1],r[p+2]=h[2],r[p+3]=h[3]}i[u]=e[f]}return!this.tooManyColors&&r.length>4*n&&(this.tooManyColors=!0),this.updatePalette(r),1===i.length?i[0]:i},y.prototype.updatePalette=function(t){if(!this.tooManyColors){var e=this.maxColors,r=this.paletteTexture,n=Math.ceil(.25*t.length/e);if(n>1)for(var i=.25*(t=t.slice()).length%e;i<n*e;i++)t.push(0,0,0,0);r.height<n&&r.resize(e,n),r.subimage({width:Math.min(.25*t.length,e),height:n,data:t},0,0)}},y.prototype.destroy=function(){return this.groups.forEach(function(t){t.sizeBuffer.destroy(),t.positionBuffer.destroy(),t.positionFractBuffer.destroy(),t.colorBuffer.destroy(),t.activation.forEach(function(t){return t&&t.destroy&&t.destroy()}),t.selectionBuffer.destroy(),t.elements&&t.elements.destroy()}),this.groups.length=0,this.paletteTexture.destroy(),this.markerTextures.forEach(function(t){return t&&t.destroy&&t.destroy()}),this};var x=t(\\\"object-assign\\\");e.exports=function(t,e){var r=new m(t,e),n=r.render.bind(r);return x(n,{render:n,update:r.update.bind(r),draw:r.draw.bind(r),destroy:r.destroy.bind(r),regl:r.regl,gl:r.gl,canvas:r.gl.canvas,groups:r.groups,markers:r.markerCache,palette:r.palette}),n}},{\\\"array-bounds\\\":65,\\\"color-id\\\":118,\\\"color-normalize\\\":120,\\\"flatten-vertex-data\\\":227,glslify:409,\\\"is-iexplorer\\\":419,\\\"object-assign\\\":454,\\\"parse-rect\\\":459,\\\"pick-by-alias\\\":465,\\\"point-cluster\\\":499,\\\"to-float32\\\":538,\\\"update-diff\\\":549}],498:[function(t,e,r){arguments[4][111][0].apply(r,arguments)},{dup:111}],499:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"./quad\\\")},{\\\"./quad\\\":500}],500:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"binary-search-bounds\\\"),i=t(\\\"clamp\\\"),a=t(\\\"parse-rect\\\"),o=t(\\\"array-bounds\\\"),s=t(\\\"pick-by-alias\\\"),l=t(\\\"defined\\\"),c=t(\\\"flatten-vertex-data\\\"),u=t(\\\"is-obj\\\"),h=t(\\\"dtype\\\"),f=t(\\\"math-log2\\\"),p=1073741824;function d(t,e){for(var r=e[0],n=e[1],a=1/(e[2]-r),o=1/(e[3]-n),s=new Array(t.length),l=0,c=t.length/2;l<c;l++)s[2*l]=i((t[2*l]-r)*a,0,1),s[2*l+1]=i((t[2*l+1]-n)*o,0,1);return s}e.exports=function(t,e){e||(e={}),t=c(t,\\\"float64\\\"),e=s(e,{bounds:\\\"range bounds dataBox databox\\\",maxDepth:\\\"depth maxDepth maxdepth level maxLevel maxlevel levels\\\",dtype:\\\"type dtype format out dst output destination\\\"});var r=l(e.maxDepth,255),i=l(e.bounds,o(t,2));i[0]===i[2]&&i[2]++,i[1]===i[3]&&i[3]++;var g,v=d(t,i),m=t.length>>>1;e.dtype||(e.dtype=\\\"array\\\"),\\\"string\\\"==typeof e.dtype?g=new(h(e.dtype))(m):e.dtype&&(g=e.dtype,Array.isArray(g)&&(g.length=m));for(var y=0;y<m;++y)g[y]=y;var x=[],b=[],_=[],w=[];!function t(e,n,i,a,o,s){if(!a.length)return null;var l=x[o]||(x[o]=[]);var c=_[o]||(_[o]=[]);var u=b[o]||(b[o]=[]);var h=l.length;o++;if(o>r||s>p){for(var f=0;f<a.length;f++)l.push(a[f]),c.push(s),u.push(null,null,null,null);return h}l.push(a[0]);c.push(s);if(a.length<=1)return u.push(null,null,null,null),h;var d=.5*i;var g=e+d,m=n+d;var y=[],w=[],k=[],T=[];for(var A=1,M=a.length;A<M;A++){var S=a[A],E=v[2*S],C=v[2*S+1];E<g?C<m?y.push(S):w.push(S):C<m?k.push(S):T.push(S)}s<<=2;u.push(t(e,n,d,y,o,s),t(e,m,d,w,o,s+1),t(g,n,d,k,o,s+2),t(g,m,d,T,o,s+3));return h}(0,0,1,g,0,1);for(var k=0,T=0;T<x.length;T++){var A=x[T];if(g.set)g.set(A,k);else for(var M=0,S=A.length;M<S;M++)g[M+k]=A[M];var E=k+x[T].length;w[T]=[k,E],k=E}return g.range=function(){var e,r=[],o=arguments.length;for(;o--;)r[o]=arguments[o];if(u(r[r.length-1])){var c=r.pop();r.length||null==c.x&&null==c.l&&null==c.left||(r=[c],e={}),e=s(c,{level:\\\"level maxLevel\\\",d:\\\"d diam diameter r radius px pxSize pixel pixelSize maxD size minSize\\\",lod:\\\"lod details ranges offsets\\\"})}else e={};r.length||(r=i);var h=a.apply(void 0,r),p=[Math.min(h.x,h.x+h.width),Math.min(h.y,h.y+h.height),Math.max(h.x,h.x+h.width),Math.max(h.y,h.y+h.height)],g=p[0],v=p[1],m=p[2],y=p[3],k=d([g,v,m,y],i),T=k[0],A=k[1],M=k[2],S=k[3],E=l(e.level,x.length);if(null!=e.d){var L;\\\"number\\\"==typeof e.d?L=[e.d,e.d]:e.d.length&&(L=e.d),E=Math.min(Math.max(Math.ceil(-f(Math.abs(L[0])/(i[2]-i[0]))),Math.ceil(-f(Math.abs(L[1])/(i[3]-i[1])))),E)}if(E=Math.min(E,x.length),e.lod)return function(t,e,r,i,a){for(var o=[],s=0;s<a;s++){var l=_[s],c=w[s][0],u=C(t,e,s),h=C(r,i,s),f=n.ge(l,u),p=n.gt(l,h,f,l.length-1);o[s]=[f+c,p+c]}return o}(T,A,M,S,E);var P=[];return function e(r,n,i,a,o,s){if(null!==o&&null!==s){var l=r+i,c=n+i;if(!(T>l||A>c||M<r||S<n||a>=E||o===s)){var u=x[a];void 0===s&&(s=u.length);for(var h=o;h<s;h++){var f=u[h],p=t[2*f],d=t[2*f+1];p>=g&&p<=m&&d>=v&&d<=y&&P.push(f)}var _=b[a],w=_[4*o+0],k=_[4*o+1],C=_[4*o+2],L=_[4*o+3],O=function(t,e){for(var r=null,n=0;null===r;)if(r=t[4*e+n],++n>t.length)return null;return r}(_,o+1),z=.5*i,I=a+1;e(r,n,z,I,w,k||C||L||O),e(r,n+z,z,I,k,C||L||O),e(r+z,n,z,I,C,L||O),e(r+z,n+z,z,I,L,O)}}}(0,0,1,0,0,1),P},g;function C(t,e,r){for(var n=1,i=.5,a=.5,o=.5,s=0;s<r;s++)n<<=2,n+=t<i?e<a?0:1:e<a?2:3,o*=.5,i+=t<i?-o:o,a+=e<a?-o:o;return n}}},{\\\"array-bounds\\\":65,\\\"binary-search-bounds\\\":498,clamp:115,defined:164,dtype:169,\\\"flatten-vertex-data\\\":227,\\\"is-obj\\\":421,\\\"math-log2\\\":432,\\\"parse-rect\\\":459,\\\"pick-by-alias\\\":465}],501:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"regl-scatter2d\\\"),i=t(\\\"pick-by-alias\\\"),a=t(\\\"array-bounds\\\"),o=t(\\\"raf\\\"),s=t(\\\"array-range\\\"),l=t(\\\"parse-rect\\\"),c=t(\\\"flatten-vertex-data\\\");function u(t,e){if(!(this instanceof u))return new u(t,e);this.traces=[],this.passes={},this.regl=t,this.scatter=n(t),this.canvas=this.scatter.canvas}function h(t,e,r){return(null!=t.id?t.id:t)<<16|(255&e)<<8|255&r}function f(t,e,r){var n,i,a,o,s=t[e],l=t[r];return s.length>2?(s[0],s[2],n=s[1],i=s[3]):s.length?(n=s[0],i=s[1]):(s.x,n=s.y,s.x+s.width,i=s.y+s.height),l.length>2?(a=l[0],o=l[2],l[1],l[3]):l.length?(a=l[0],o=l[1]):(a=l.x,l.y,o=l.x+l.width,l.y+l.height),[a,n,o,i]}function p(t){if(\\\"number\\\"==typeof t)return[t,t,t,t];if(2===t.length)return[t[0],t[1],t[0],t[1]];var e=l(t);return[e.x,e.y,e.x+e.width,e.y+e.height]}e.exports=u,u.prototype.render=function(){for(var t,e=this,r=[],n=arguments.length;n--;)r[n]=arguments[n];return r.length&&(t=this).update.apply(t,r),this.regl.attributes.preserveDrawingBuffer?this.draw():(this.dirty?null==this.planned&&(this.planned=o(function(){e.draw(),e.dirty=!0,e.planned=null})):(this.draw(),this.dirty=!0,o(function(){e.dirty=!1})),this)},u.prototype.update=function(){for(var t,e=[],r=arguments.length;r--;)e[r]=arguments[r];if(e.length){for(var n=0;n<e.length;n++)this.updateItem(n,e[n]);this.traces=this.traces.filter(Boolean);for(var i=[],a=0,o=0;o<this.traces.length;o++){for(var s=this.traces[o],l=this.traces[o].passes,c=0;c<l.length;c++)i.push(this.passes[l[c]]);s.passOffset=a,a+=s.passes.length}return(t=this.scatter).update.apply(t,i),this}},u.prototype.updateItem=function(t,e){var r=this.regl;if(null===e)return this.traces[t]=null,this;if(!e)return this;var n,o=i(e,{data:\\\"data items columns rows values dimensions samples x\\\",snap:\\\"snap cluster\\\",size:\\\"sizes size radius\\\",color:\\\"colors color fill fill-color fillColor\\\",opacity:\\\"opacity alpha transparency opaque\\\",borderSize:\\\"borderSizes borderSize border-size bordersize borderWidth borderWidths border-width borderwidth stroke-width strokeWidth strokewidth outline\\\",borderColor:\\\"borderColors borderColor bordercolor stroke stroke-color strokeColor\\\",marker:\\\"markers marker shape\\\",range:\\\"range ranges databox dataBox\\\",viewport:\\\"viewport viewBox viewbox\\\",domain:\\\"domain domains area areas\\\",padding:\\\"pad padding paddings pads margin margins\\\",transpose:\\\"transpose transposed\\\",diagonal:\\\"diagonal diag showDiagonal\\\",upper:\\\"upper up top upperhalf upperHalf showupperhalf showUpper showUpperHalf\\\",lower:\\\"lower low bottom lowerhalf lowerHalf showlowerhalf showLowerHalf showLower\\\"}),s=this.traces[t]||(this.traces[t]={id:t,buffer:r.buffer({usage:\\\"dynamic\\\",type:\\\"float\\\",data:new Uint8Array}),color:\\\"black\\\",marker:null,size:12,borderColor:\\\"transparent\\\",borderSize:1,viewport:l([r._gl.drawingBufferWidth,r._gl.drawingBufferHeight]),padding:[0,0,0,0],opacity:1,diagonal:!0,upper:!0,lower:!0});if(null!=o.color&&(s.color=o.color),null!=o.size&&(s.size=o.size),null!=o.marker&&(s.marker=o.marker),null!=o.borderColor&&(s.borderColor=o.borderColor),null!=o.borderSize&&(s.borderSize=o.borderSize),null!=o.opacity&&(s.opacity=o.opacity),o.viewport&&(s.viewport=l(o.viewport)),null!=o.diagonal&&(s.diagonal=o.diagonal),null!=o.upper&&(s.upper=o.upper),null!=o.lower&&(s.lower=o.lower),o.data){s.buffer(c(o.data)),s.columns=o.data.length,s.count=o.data[0].length,s.bounds=[];for(var u=0;u<s.columns;u++)s.bounds[u]=a(o.data[u],1)}o.range&&(s.range=o.range,n=s.range&&\\\"number\\\"!=typeof s.range[0]),o.domain&&(s.domain=o.domain);var d=!1;null!=o.padding&&(Array.isArray(o.padding)&&o.padding.length===s.columns&&\\\"number\\\"==typeof o.padding[o.padding.length-1]?(s.padding=o.padding.map(p),d=!0):s.padding=p(o.padding));var g=s.columns,v=s.count,m=s.viewport.width,y=s.viewport.height,x=s.viewport.x,b=s.viewport.y,_=m/g,w=y/g;s.passes=[];for(var k=0;k<g;k++)for(var T=0;T<g;T++)if((s.diagonal||T!==k)&&(s.upper||!(k>T))&&(s.lower||!(k<T))){var A=h(s.id,k,T),M=this.passes[A]||(this.passes[A]={});if(o.data&&(o.transpose?M.positions={x:{buffer:s.buffer,offset:T,count:v,stride:g},y:{buffer:s.buffer,offset:k,count:v,stride:g}}:M.positions={x:{buffer:s.buffer,offset:T*v,count:v},y:{buffer:s.buffer,offset:k*v,count:v}},M.bounds=f(s.bounds,k,T)),o.domain||o.viewport||o.data){var S=d?f(s.padding,k,T):s.padding;if(s.domain){var E=f(s.domain,k,T),C=E[0],L=E[1],P=E[2],O=E[3];M.viewport=[x+C*m+S[0],b+L*y+S[1],x+P*m-S[2],b+O*y-S[3]]}else M.viewport=[x+T*_+_*S[0],b+k*w+w*S[1],x+(T+1)*_-_*S[2],b+(k+1)*w-w*S[3]]}o.color&&(M.color=s.color),o.size&&(M.size=s.size),o.marker&&(M.marker=s.marker),o.borderSize&&(M.borderSize=s.borderSize),o.borderColor&&(M.borderColor=s.borderColor),o.opacity&&(M.opacity=s.opacity),o.range&&(M.range=n?f(s.range,k,T):s.range||M.bounds),s.passes.push(A)}return this},u.prototype.draw=function(){for(var t,e=[],r=arguments.length;r--;)e[r]=arguments[r];if(e.length){for(var n=[],i=0;i<e.length;i++)if(\\\"number\\\"==typeof e[i]){var a=this.traces[e[i]],o=a.passes,l=a.passOffset;n.push.apply(n,s(l,l+o.length))}else if(e[i].length){var c=e[i],u=this.traces[i],h=u.passes,f=u.passOffset;h=h.map(function(t,e){n[f+e]=c})}(t=this.scatter).draw.apply(t,n)}else this.scatter.draw();return this},u.prototype.destroy=function(){return this.traces.forEach(function(t){t.buffer&&t.buffer.destroy&&t.buffer.destroy()}),this.traces=null,this.passes=null,this.scatter.destroy(),this}},{\\\"array-bounds\\\":65,\\\"array-range\\\":67,\\\"flatten-vertex-data\\\":227,\\\"parse-rect\\\":459,\\\"pick-by-alias\\\":465,raf:484,\\\"regl-scatter2d\\\":497}],502:[function(t,e,r){var n,i;n=this,i=function(){function t(t,e){this.id=U++,this.type=t,this.data=e}function e(t){return\\\"[\\\"+function t(e){if(0===e.length)return[];var r=e.charAt(0),n=e.charAt(e.length-1);if(1<e.length&&r===n&&('\\\"'===r||\\\"'\\\"===r))return['\\\"'+e.substr(1,e.length-2).replace(/\\\\\\\\/g,\\\"\\\\\\\\\\\\\\\\\\\").replace(/\\\"/g,'\\\\\\\\\\\"')+'\\\"'];if(r=/\\\\[(false|true|null|\\\\d+|'[^']*'|\\\"[^\\\"]*\\\")\\\\]/.exec(e))return t(e.substr(0,r.index)).concat(t(r[1])).concat(t(e.substr(r.index+r[0].length)));if(1===(r=e.split(\\\".\\\")).length)return['\\\"'+e.replace(/\\\\\\\\/g,\\\"\\\\\\\\\\\\\\\\\\\").replace(/\\\"/g,'\\\\\\\\\\\"')+'\\\"'];for(e=[],n=0;n<r.length;++n)e=e.concat(t(r[n]));return e}(t).join(\\\"][\\\")+\\\"]\\\"}function r(t){return\\\"string\\\"==typeof t?t.split():t}function n(t){return\\\"string\\\"==typeof t?document.querySelector(t):t}function i(t){var e,i,a,o,s=t||{};t={};var l=[],c=[],u=\\\"undefined\\\"==typeof window?1:window.devicePixelRatio,h=!1,f=function(t){},p=function(){};if(\\\"string\\\"==typeof s?e=document.querySelector(s):\\\"object\\\"==typeof s&&(\\\"string\\\"==typeof s.nodeName&&\\\"function\\\"==typeof s.appendChild&&\\\"function\\\"==typeof s.getBoundingClientRect?e=s:\\\"function\\\"==typeof s.drawArrays||\\\"function\\\"==typeof s.drawElements?a=(o=s).canvas:(\\\"gl\\\"in s?o=s.gl:\\\"canvas\\\"in s?a=n(s.canvas):\\\"container\\\"in s&&(i=n(s.container)),\\\"attributes\\\"in s&&(t=s.attributes),\\\"extensions\\\"in s&&(l=r(s.extensions)),\\\"optionalExtensions\\\"in s&&(c=r(s.optionalExtensions)),\\\"onDone\\\"in s&&(f=s.onDone),\\\"profile\\\"in s&&(h=!!s.profile),\\\"pixelRatio\\\"in s&&(u=+s.pixelRatio))),e&&(\\\"canvas\\\"===e.nodeName.toLowerCase()?a=e:i=e),!o){if(!a){if(!(e=function(t,e,r){function n(){var e=window.innerWidth,n=window.innerHeight;t!==document.body&&(e=(n=t.getBoundingClientRect()).right-n.left,n=n.bottom-n.top),i.width=r*e,i.height=r*n,j(i.style,{width:e+\\\"px\\\",height:n+\\\"px\\\"})}var i=document.createElement(\\\"canvas\\\");return j(i.style,{border:0,margin:0,padding:0,top:0,left:0}),t.appendChild(i),t===document.body&&(i.style.position=\\\"absolute\\\",j(t.style,{margin:0,padding:0})),window.addEventListener(\\\"resize\\\",n,!1),n(),{canvas:i,onDestroy:function(){window.removeEventListener(\\\"resize\\\",n),t.removeChild(i)}}}(i||document.body,0,u)))return null;a=e.canvas,p=e.onDestroy}o=function(t,e){function r(r){try{return t.getContext(r,e)}catch(t){return null}}return r(\\\"webgl\\\")||r(\\\"experimental-webgl\\\")||r(\\\"webgl-experimental\\\")}(a,t)}return o?{gl:o,canvas:a,container:i,extensions:l,optionalExtensions:c,pixelRatio:u,profile:h,onDone:f,onDestroy:p}:(p(),f(\\\"webgl not supported, try upgrading your browser or graphics drivers http://get.webgl.org\\\"),null)}function a(t,e){for(var r=Array(t),n=0;n<t;++n)r[n]=e(n);return r}function o(t){var e,r;return e=(65535<t)<<4,e|=r=(255<(t>>>=e))<<3,(e|=r=(15<(t>>>=r))<<2)|(r=(3<(t>>>=r))<<1)|t>>>r>>1}function s(){function t(t){t:{for(var e=16;268435456>=e;e*=16)if(t<=e){t=e;break t}t=0}return 0<(e=r[o(t)>>2]).length?e.pop():new ArrayBuffer(t)}function e(t){r[o(t.byteLength)>>2].push(t)}var r=a(8,function(){return[]});return{alloc:t,free:e,allocType:function(e,r){var n=null;switch(e){case 5120:n=new Int8Array(t(r),0,r);break;case 5121:n=new Uint8Array(t(r),0,r);break;case 5122:n=new Int16Array(t(2*r),0,r);break;case 5123:n=new Uint16Array(t(2*r),0,r);break;case 5124:n=new Int32Array(t(4*r),0,r);break;case 5125:n=new Uint32Array(t(4*r),0,r);break;case 5126:n=new Float32Array(t(4*r),0,r);break;default:return null}return n.length!==r?n.subarray(0,r):n},freeType:function(t){e(t.buffer)}}}function l(t){return!!t&&\\\"object\\\"==typeof t&&Array.isArray(t.shape)&&Array.isArray(t.stride)&&\\\"number\\\"==typeof t.offset&&t.shape.length===t.stride.length&&(Array.isArray(t.data)||W(t.data))}function c(t,e,r,n,i,a){for(var o=0;o<e;++o)for(var s=t[o],l=0;l<r;++l)for(var c=s[l],u=0;u<n;++u)i[a++]=c[u]}function u(t){return 0|J[Object.prototype.toString.call(t)]}function h(t,e){for(var r=0;r<e.length;++r)t[r]=e[r]}function f(t,e,r,n,i,a,o){for(var s=0,l=0;l<r;++l)for(var c=0;c<n;++c)t[s++]=e[i*l+a*c+o]}function p(t,e,r,n){function i(e){this.id=c++,this.buffer=t.createBuffer(),this.type=e,this.usage=35044,this.byteLength=0,this.dimension=1,this.dtype=5121,this.persistentData=null,r.profile&&(this.stats={size:0})}function a(e,r,n){e.byteLength=r.byteLength,t.bufferData(e.type,r,n)}function o(t,e,r,n,i,o){if(t.usage=r,Array.isArray(e)){if(t.dtype=n||5126,0<e.length)if(Array.isArray(e[0])){i=tt(e);for(var s=n=1;s<i.length;++s)n*=i[s];t.dimension=n,a(t,e=Q(e,i,t.dtype),r),o?t.persistentData=e:G.freeType(e)}else\\\"number\\\"==typeof e[0]?(t.dimension=i,h(i=G.allocType(t.dtype,e.length),e),a(t,i,r),o?t.persistentData=i:G.freeType(i)):W(e[0])&&(t.dimension=e[0].length,t.dtype=n||u(e[0])||5126,a(t,e=Q(e,[e.length,e[0].length],t.dtype),r),o?t.persistentData=e:G.freeType(e))}else if(W(e))t.dtype=n||u(e),t.dimension=i,a(t,e,r),o&&(t.persistentData=new Uint8Array(new Uint8Array(e.buffer)));else if(l(e)){i=e.shape;var c=e.stride,p=(s=e.offset,0),d=0,g=0,v=0;1===i.length?(p=i[0],d=1,g=c[0],v=0):2===i.length&&(p=i[0],d=i[1],g=c[0],v=c[1]),t.dtype=n||u(e.data)||5126,t.dimension=d,f(i=G.allocType(t.dtype,p*d),e.data,p,d,g,v,s),a(t,i,r),o?t.persistentData=i:G.freeType(i)}}function s(r){e.bufferCount--;for(var i=0;i<n.state.length;++i){var a=n.state[i];a.buffer===r&&(t.disableVertexAttribArray(i),a.buffer=null)}t.deleteBuffer(r.buffer),r.buffer=null,delete p[r.id]}var c=0,p={};i.prototype.bind=function(){t.bindBuffer(this.type,this.buffer)},i.prototype.destroy=function(){s(this)};var d=[];return r.profile&&(e.getTotalBufferSize=function(){var t=0;return Object.keys(p).forEach(function(e){t+=p[e].stats.size}),t}),{create:function(n,a,c,d){function g(e){var n=35044,i=null,a=0,s=0,c=1;return Array.isArray(e)||W(e)||l(e)?i=e:\\\"number\\\"==typeof e?a=0|e:e&&(\\\"data\\\"in e&&(i=e.data),\\\"usage\\\"in e&&(n=$[e.usage]),\\\"type\\\"in e&&(s=K[e.type]),\\\"dimension\\\"in e&&(c=0|e.dimension),\\\"length\\\"in e&&(a=0|e.length)),v.bind(),i?o(v,i,n,s,c,d):(a&&t.bufferData(v.type,a,n),v.dtype=s||5121,v.usage=n,v.dimension=c,v.byteLength=a),r.profile&&(v.stats.size=v.byteLength*et[v.dtype]),g}e.bufferCount++;var v=new i(a);return p[v.id]=v,c||g(n),g._reglType=\\\"buffer\\\",g._buffer=v,g.subdata=function(e,r){var n,i=0|(r||0);if(v.bind(),W(e))t.bufferSubData(v.type,i,e);else if(Array.isArray(e)){if(0<e.length)if(\\\"number\\\"==typeof e[0]){var a=G.allocType(v.dtype,e.length);h(a,e),t.bufferSubData(v.type,i,a),G.freeType(a)}else(Array.isArray(e[0])||W(e[0]))&&(n=tt(e),a=Q(e,n,v.dtype),t.bufferSubData(v.type,i,a),G.freeType(a))}else if(l(e)){n=e.shape;var o=e.stride,s=a=0,c=0,p=0;1===n.length?(a=n[0],s=1,c=o[0],p=0):2===n.length&&(a=n[0],s=n[1],c=o[0],p=o[1]),n=Array.isArray(e.data)?v.dtype:u(e.data),f(n=G.allocType(n,a*s),e.data,a,s,c,p,e.offset),t.bufferSubData(v.type,i,n),G.freeType(n)}return g},r.profile&&(g.stats=v.stats),g.destroy=function(){s(v)},g},createStream:function(t,e){var r=d.pop();return r||(r=new i(t)),r.bind(),o(r,e,35040,0,1,!1),r},destroyStream:function(t){d.push(t)},clear:function(){X(p).forEach(s),d.forEach(s)},getBuffer:function(t){return t&&t._buffer instanceof i?t._buffer:null},restore:function(){X(p).forEach(function(e){e.buffer=t.createBuffer(),t.bindBuffer(e.type,e.buffer),t.bufferData(e.type,e.persistentData||e.byteLength,e.usage)})},_initBuffer:o}}function d(t,e,r,n){function i(t){this.id=c++,s[this.id]=this,this.buffer=t,this.primType=4,this.type=this.vertCount=0}function a(n,i,a,o,s,c,u){if(n.buffer.bind(),i){var h=u;u||W(i)&&(!l(i)||W(i.data))||(h=e.oes_element_index_uint?5125:5123),r._initBuffer(n.buffer,i,a,h,3)}else t.bufferData(34963,c,a),n.buffer.dtype=h||5121,n.buffer.usage=a,n.buffer.dimension=3,n.buffer.byteLength=c;if(h=u,!u){switch(n.buffer.dtype){case 5121:case 5120:h=5121;break;case 5123:case 5122:h=5123;break;case 5125:case 5124:h=5125}n.buffer.dtype=h}n.type=h,0>(i=s)&&(i=n.buffer.byteLength,5123===h?i>>=1:5125===h&&(i>>=2)),n.vertCount=i,i=o,0>o&&(i=4,1===(o=n.buffer.dimension)&&(i=0),2===o&&(i=1),3===o&&(i=4)),n.primType=i}function o(t){n.elementsCount--,delete s[t.id],t.buffer.destroy(),t.buffer=null}var s={},c=0,u={uint8:5121,uint16:5123};e.oes_element_index_uint&&(u.uint32=5125),i.prototype.bind=function(){this.buffer.bind()};var h=[];return{create:function(t,e){function s(t){if(t)if(\\\"number\\\"==typeof t)c(t),h.primType=4,h.vertCount=0|t,h.type=5121;else{var e=null,r=35044,n=-1,i=-1,o=0,f=0;Array.isArray(t)||W(t)||l(t)?e=t:(\\\"data\\\"in t&&(e=t.data),\\\"usage\\\"in t&&(r=$[t.usage]),\\\"primitive\\\"in t&&(n=rt[t.primitive]),\\\"count\\\"in t&&(i=0|t.count),\\\"type\\\"in t&&(f=u[t.type]),\\\"length\\\"in t?o=0|t.length:(o=i,5123===f||5122===f?o*=2:5125!==f&&5124!==f||(o*=4))),a(h,e,r,n,i,o,f)}else c(),h.primType=4,h.vertCount=0,h.type=5121;return s}var c=r.create(null,34963,!0),h=new i(c._buffer);return n.elementsCount++,s(t),s._reglType=\\\"elements\\\",s._elements=h,s.subdata=function(t,e){return c.subdata(t,e),s},s.destroy=function(){o(h)},s},createStream:function(t){var e=h.pop();return e||(e=new i(r.create(null,34963,!0,!1)._buffer)),a(e,t,35040,-1,-1,0,0),e},destroyStream:function(t){h.push(t)},getElements:function(t){return\\\"function\\\"==typeof t&&t._elements instanceof i?t._elements:null},clear:function(){X(s).forEach(o)}}}function g(t){for(var e=G.allocType(5123,t.length),r=0;r<t.length;++r)if(isNaN(t[r]))e[r]=65535;else if(1/0===t[r])e[r]=31744;else if(-1/0===t[r])e[r]=64512;else{nt[0]=t[r];var n=(a=it[0])>>>31<<15,i=(a<<1>>>24)-127,a=a>>13&1023;e[r]=-24>i?n:-14>i?n+(a+1024>>-14-i):15<i?n+31744:n+(i+15<<10)+a}return e}function v(t){return Array.isArray(t)||W(t)}function m(t){return\\\"[object \\\"+t+\\\"]\\\"}function y(t){return Array.isArray(t)&&(0===t.length||\\\"number\\\"==typeof t[0])}function x(t){return!(!Array.isArray(t)||0===t.length||!v(t[0]))}function b(t){return Object.prototype.toString.call(t)}function _(t){if(!t)return!1;var e=b(t);return 0<=pt.indexOf(e)||(y(t)||x(t)||l(t))}function w(t,e){36193===t.type?(t.data=g(e),G.freeType(e)):t.data=e}function k(t,e,r,n,i,a){if(t=\\\"undefined\\\"!=typeof gt[t]?gt[t]:st[t]*dt[e],a&&(t*=6),i){for(n=0;1<=r;)n+=t*r*r,r/=2;return n}return t*r*n}function T(t,e,r,n,i,a,o){function s(){this.format=this.internalformat=6408,this.type=5121,this.flipY=this.premultiplyAlpha=this.compressed=!1,this.unpackAlignment=1,this.colorSpace=37444,this.channels=this.height=this.width=0}function c(t,e){t.internalformat=e.internalformat,t.format=e.format,t.type=e.type,t.compressed=e.compressed,t.premultiplyAlpha=e.premultiplyAlpha,t.flipY=e.flipY,t.unpackAlignment=e.unpackAlignment,t.colorSpace=e.colorSpace,t.width=e.width,t.height=e.height,t.channels=e.channels}function u(t,e){if(\\\"object\\\"==typeof e&&e){\\\"premultiplyAlpha\\\"in e&&(t.premultiplyAlpha=e.premultiplyAlpha),\\\"flipY\\\"in e&&(t.flipY=e.flipY),\\\"alignment\\\"in e&&(t.unpackAlignment=e.alignment),\\\"colorSpace\\\"in e&&(t.colorSpace=q[e.colorSpace]),\\\"type\\\"in e&&(t.type=H[e.type]);var r=t.width,n=t.height,i=t.channels,a=!1;\\\"shape\\\"in e?(r=e.shape[0],n=e.shape[1],3===e.shape.length&&(i=e.shape[2],a=!0)):(\\\"radius\\\"in e&&(r=n=e.radius),\\\"width\\\"in e&&(r=e.width),\\\"height\\\"in e&&(n=e.height),\\\"channels\\\"in e&&(i=e.channels,a=!0)),t.width=0|r,t.height=0|n,t.channels=0|i,r=!1,\\\"format\\\"in e&&(r=e.format,n=t.internalformat=Y[r],t.format=pt[n],r in H&&!(\\\"type\\\"in e)&&(t.type=H[r]),r in K&&(t.compressed=!0),r=!0),!a&&r?t.channels=st[t.format]:a&&!r&&t.channels!==ot[t.format]&&(t.format=t.internalformat=ot[t.channels])}}function h(e){t.pixelStorei(37440,e.flipY),t.pixelStorei(37441,e.premultiplyAlpha),t.pixelStorei(37443,e.colorSpace),t.pixelStorei(3317,e.unpackAlignment)}function f(){s.call(this),this.yOffset=this.xOffset=0,this.data=null,this.needsFree=!1,this.element=null,this.needsCopy=!1}function p(t,e){var r=null;if(_(e)?r=e:e&&(u(t,e),\\\"x\\\"in e&&(t.xOffset=0|e.x),\\\"y\\\"in e&&(t.yOffset=0|e.y),_(e.data)&&(r=e.data)),e.copy){var n=i.viewportWidth,a=i.viewportHeight;t.width=t.width||n-t.xOffset,t.height=t.height||a-t.yOffset,t.needsCopy=!0}else if(r){if(W(r))t.channels=t.channels||4,t.data=r,\\\"type\\\"in e||5121!==t.type||(t.type=0|J[Object.prototype.toString.call(r)]);else if(y(r)){switch(t.channels=t.channels||4,a=(n=r).length,t.type){case 5121:case 5123:case 5125:case 5126:(a=G.allocType(t.type,a)).set(n),t.data=a;break;case 36193:t.data=g(n)}t.alignment=1,t.needsFree=!0}else if(l(r)){n=r.data,Array.isArray(n)||5121!==t.type||(t.type=0|J[Object.prototype.toString.call(n)]);a=r.shape;var o,s,c,h,f=r.stride;3===a.length?(c=a[2],h=f[2]):h=c=1,o=a[0],s=a[1],a=f[0],f=f[1],t.alignment=1,t.width=o,t.height=s,t.channels=c,t.format=t.internalformat=ot[c],t.needsFree=!0,o=h,r=r.offset,c=t.width,h=t.height,s=t.channels;for(var p=G.allocType(36193===t.type?5126:t.type,c*h*s),d=0,m=0;m<h;++m)for(var k=0;k<c;++k)for(var T=0;T<s;++T)p[d++]=n[a*k+f*m+o*T+r];w(t,p)}else if(b(r)===lt||b(r)===ct)b(r)===lt?t.element=r:t.element=r.canvas,t.width=t.element.width,t.height=t.element.height,t.channels=4;else if(b(r)===ut)t.element=r,t.width=r.width,t.height=r.height,t.channels=4;else if(b(r)===ht)t.element=r,t.width=r.naturalWidth,t.height=r.naturalHeight,t.channels=4;else if(b(r)===ft)t.element=r,t.width=r.videoWidth,t.height=r.videoHeight,t.channels=4;else if(x(r)){for(n=t.width||r[0].length,a=t.height||r.length,f=t.channels,f=v(r[0][0])?f||r[0][0].length:f||1,o=Z.shape(r),c=1,h=0;h<o.length;++h)c*=o[h];c=G.allocType(36193===t.type?5126:t.type,c),Z.flatten(r,o,\\\"\\\",c),w(t,c),t.alignment=1,t.width=n,t.height=a,t.channels=f,t.format=t.internalformat=ot[f],t.needsFree=!0}}else t.width=t.width||1,t.height=t.height||1,t.channels=t.channels||4}function d(e,r,i,a,o){var s=e.element,l=e.data,c=e.internalformat,u=e.format,f=e.type,p=e.width,d=e.height;h(e),s?t.texSubImage2D(r,o,i,a,u,f,s):e.compressed?t.compressedTexSubImage2D(r,o,i,a,c,p,d,l):e.needsCopy?(n(),t.copyTexSubImage2D(r,o,i,a,e.xOffset,e.yOffset,p,d)):t.texSubImage2D(r,o,i,a,p,d,u,f,l)}function m(){return dt.pop()||new f}function T(t){t.needsFree&&G.freeType(t.data),f.call(t),dt.push(t)}function A(){s.call(this),this.genMipmaps=!1,this.mipmapHint=4352,this.mipmask=0,this.images=Array(16)}function M(t,e,r){var n=t.images[0]=m();t.mipmask=1,n.width=t.width=e,n.height=t.height=r,n.channels=t.channels=4}function S(t,e){var r=null;if(_(e))c(r=t.images[0]=m(),t),p(r,e),t.mipmask=1;else if(u(t,e),Array.isArray(e.mipmap))for(var n=e.mipmap,i=0;i<n.length;++i)c(r=t.images[i]=m(),t),r.width>>=i,r.height>>=i,p(r,n[i]),t.mipmask|=1<<i;else c(r=t.images[0]=m(),t),p(r,e),t.mipmask=1;c(t,t.images[0])}function E(e,r){for(var i=e.images,a=0;a<i.length&&i[a];++a){var o=i[a],s=r,l=a,c=o.element,u=o.data,f=o.internalformat,p=o.format,d=o.type,g=o.width,v=o.height,m=o.channels;h(o),c?t.texImage2D(s,l,p,p,d,c):o.compressed?t.compressedTexImage2D(s,l,f,g,v,0,u):o.needsCopy?(n(),t.copyTexImage2D(s,l,p,o.xOffset,o.yOffset,g,v,0)):((o=!u)&&(u=G.zero.allocType(d,g*v*m)),t.texImage2D(s,l,p,g,v,0,p,d,u),o&&u&&G.zero.freeType(u))}}function C(){var t=gt.pop()||new A;s.call(t);for(var e=t.mipmask=0;16>e;++e)t.images[e]=null;return t}function L(t){for(var e=t.images,r=0;r<e.length;++r)e[r]&&T(e[r]),e[r]=null;gt.push(t)}function P(){this.magFilter=this.minFilter=9728,this.wrapT=this.wrapS=33071,this.anisotropic=1,this.genMipmaps=!1,this.mipmapHint=4352}function O(t,e){\\\"min\\\"in e&&(t.minFilter=V[e.min],0<=at.indexOf(t.minFilter)&&!(\\\"faces\\\"in e)&&(t.genMipmaps=!0)),\\\"mag\\\"in e&&(t.magFilter=U[e.mag]);var r=t.wrapS,n=t.wrapT;if(\\\"wrap\\\"in e){var i=e.wrap;\\\"string\\\"==typeof i?r=n=N[i]:Array.isArray(i)&&(r=N[i[0]],n=N[i[1]])}else\\\"wrapS\\\"in e&&(r=N[e.wrapS]),\\\"wrapT\\\"in e&&(n=N[e.wrapT]);if(t.wrapS=r,t.wrapT=n,\\\"anisotropic\\\"in e&&(t.anisotropic=e.anisotropic),\\\"mipmap\\\"in e){switch(r=!1,typeof e.mipmap){case\\\"string\\\":t.mipmapHint=B[e.mipmap],r=t.genMipmaps=!0;break;case\\\"boolean\\\":r=t.genMipmaps=e.mipmap;break;case\\\"object\\\":t.genMipmaps=!1,r=!0}!r||\\\"min\\\"in e||(t.minFilter=9984)}}function z(r,n){t.texParameteri(n,10241,r.minFilter),t.texParameteri(n,10240,r.magFilter),t.texParameteri(n,10242,r.wrapS),t.texParameteri(n,10243,r.wrapT),e.ext_texture_filter_anisotropic&&t.texParameteri(n,34046,r.anisotropic),r.genMipmaps&&(t.hint(33170,r.mipmapHint),t.generateMipmap(n))}function I(e){s.call(this),this.mipmask=0,this.internalformat=6408,this.id=vt++,this.refCount=1,this.target=e,this.texture=t.createTexture(),this.unit=-1,this.bindCount=0,this.texInfo=new P,o.profile&&(this.stats={size:0})}function D(e){t.activeTexture(33984),t.bindTexture(e.target,e.texture)}function R(){var e=xt[0];e?t.bindTexture(e.target,e.texture):t.bindTexture(3553,null)}function F(e){var r=e.texture,n=e.unit,i=e.target;0<=n&&(t.activeTexture(33984+n),t.bindTexture(i,null),xt[n]=null),t.deleteTexture(r),e.texture=null,e.params=null,e.pixels=null,e.refCount=0,delete mt[e.id],a.textureCount--}var B={\\\"don't care\\\":4352,\\\"dont care\\\":4352,nice:4354,fast:4353},N={repeat:10497,clamp:33071,mirror:33648},U={nearest:9728,linear:9729},V=j({mipmap:9987,\\\"nearest mipmap nearest\\\":9984,\\\"linear mipmap nearest\\\":9985,\\\"nearest mipmap linear\\\":9986,\\\"linear mipmap linear\\\":9987},U),q={none:0,browser:37444},H={uint8:5121,rgba4:32819,rgb565:33635,\\\"rgb5 a1\\\":32820},Y={alpha:6406,luminance:6409,\\\"luminance alpha\\\":6410,rgb:6407,rgba:6408,rgba4:32854,\\\"rgb5 a1\\\":32855,rgb565:36194},K={};e.ext_srgb&&(Y.srgb=35904,Y.srgba=35906),e.oes_texture_float&&(H.float32=H.float=5126),e.oes_texture_half_float&&(H.float16=H[\\\"half float\\\"]=36193),e.webgl_depth_texture&&(j(Y,{depth:6402,\\\"depth stencil\\\":34041}),j(H,{uint16:5123,uint32:5125,\\\"depth stencil\\\":34042})),e.webgl_compressed_texture_s3tc&&j(K,{\\\"rgb s3tc dxt1\\\":33776,\\\"rgba s3tc dxt1\\\":33777,\\\"rgba s3tc dxt3\\\":33778,\\\"rgba s3tc dxt5\\\":33779}),e.webgl_compressed_texture_atc&&j(K,{\\\"rgb atc\\\":35986,\\\"rgba atc explicit alpha\\\":35987,\\\"rgba atc interpolated alpha\\\":34798}),e.webgl_compressed_texture_pvrtc&&j(K,{\\\"rgb pvrtc 4bppv1\\\":35840,\\\"rgb pvrtc 2bppv1\\\":35841,\\\"rgba pvrtc 4bppv1\\\":35842,\\\"rgba pvrtc 2bppv1\\\":35843}),e.webgl_compressed_texture_etc1&&(K[\\\"rgb etc1\\\"]=36196);var $=Array.prototype.slice.call(t.getParameter(34467));Object.keys(K).forEach(function(t){var e=K[t];0<=$.indexOf(e)&&(Y[t]=e)});var Q=Object.keys(Y);r.textureFormats=Q;var tt=[];Object.keys(Y).forEach(function(t){tt[Y[t]]=t});var et=[];Object.keys(H).forEach(function(t){et[H[t]]=t});var rt=[];Object.keys(U).forEach(function(t){rt[U[t]]=t});var nt=[];Object.keys(V).forEach(function(t){nt[V[t]]=t});var it=[];Object.keys(N).forEach(function(t){it[N[t]]=t});var pt=Q.reduce(function(t,e){var r=Y[e];return 6409===r||6406===r||6409===r||6410===r||6402===r||34041===r?t[r]=r:32855===r||0<=e.indexOf(\\\"rgba\\\")?t[r]=6408:t[r]=6407,t},{}),dt=[],gt=[],vt=0,mt={},yt=r.maxTextureUnits,xt=Array(yt).map(function(){return null});return j(I.prototype,{bind:function(){this.bindCount+=1;var e=this.unit;if(0>e){for(var r=0;r<yt;++r){var n=xt[r];if(n){if(0<n.bindCount)continue;n.unit=-1}xt[r]=this,e=r;break}o.profile&&a.maxTextureUnits<e+1&&(a.maxTextureUnits=e+1),this.unit=e,t.activeTexture(33984+e),t.bindTexture(this.target,this.texture)}return e},unbind:function(){--this.bindCount},decRef:function(){0>=--this.refCount&&F(this)}}),o.profile&&(a.getTotalTextureSize=function(){var t=0;return Object.keys(mt).forEach(function(e){t+=mt[e].stats.size}),t}),{create2D:function(e,r){function n(t,e){var r=i.texInfo;P.call(r);var a=C();return\\\"number\\\"==typeof t?M(a,0|t,\\\"number\\\"==typeof e?0|e:0|t):t?(O(r,t),S(a,t)):M(a,1,1),r.genMipmaps&&(a.mipmask=(a.width<<1)-1),i.mipmask=a.mipmask,c(i,a),i.internalformat=a.internalformat,n.width=a.width,n.height=a.height,D(i),E(a,3553),z(r,3553),R(),L(a),o.profile&&(i.stats.size=k(i.internalformat,i.type,a.width,a.height,r.genMipmaps,!1)),n.format=tt[i.internalformat],n.type=et[i.type],n.mag=rt[r.magFilter],n.min=nt[r.minFilter],n.wrapS=it[r.wrapS],n.wrapT=it[r.wrapT],n}var i=new I(3553);return mt[i.id]=i,a.textureCount++,n(e,r),n.subimage=function(t,e,r,a){e|=0,r|=0,a|=0;var o=m();return c(o,i),o.width=0,o.height=0,p(o,t),o.width=o.width||(i.width>>a)-e,o.height=o.height||(i.height>>a)-r,D(i),d(o,3553,e,r,a),R(),T(o),n},n.resize=function(e,r){var a=0|e,s=0|r||a;if(a===i.width&&s===i.height)return n;n.width=i.width=a,n.height=i.height=s,D(i);for(var l,c=i.channels,u=i.type,h=0;i.mipmask>>h;++h){var f=a>>h,p=s>>h;if(!f||!p)break;l=G.zero.allocType(u,f*p*c),t.texImage2D(3553,h,i.format,f,p,0,i.format,i.type,l),l&&G.zero.freeType(l)}return R(),o.profile&&(i.stats.size=k(i.internalformat,i.type,a,s,!1,!1)),n},n._reglType=\\\"texture2d\\\",n._texture=i,o.profile&&(n.stats=i.stats),n.destroy=function(){i.decRef()},n},createCube:function(e,r,n,i,s,l){function h(t,e,r,n,i,a){var s,l=f.texInfo;for(P.call(l),s=0;6>s;++s)g[s]=C();if(\\\"number\\\"!=typeof t&&t){if(\\\"object\\\"==typeof t)if(e)S(g[0],t),S(g[1],e),S(g[2],r),S(g[3],n),S(g[4],i),S(g[5],a);else if(O(l,t),u(f,t),\\\"faces\\\"in t)for(t=t.faces,s=0;6>s;++s)c(g[s],f),S(g[s],t[s]);else for(s=0;6>s;++s)S(g[s],t)}else for(t=0|t||1,s=0;6>s;++s)M(g[s],t,t);for(c(f,g[0]),f.mipmask=l.genMipmaps?(g[0].width<<1)-1:g[0].mipmask,f.internalformat=g[0].internalformat,h.width=g[0].width,h.height=g[0].height,D(f),s=0;6>s;++s)E(g[s],34069+s);for(z(l,34067),R(),o.profile&&(f.stats.size=k(f.internalformat,f.type,h.width,h.height,l.genMipmaps,!0)),h.format=tt[f.internalformat],h.type=et[f.type],h.mag=rt[l.magFilter],h.min=nt[l.minFilter],h.wrapS=it[l.wrapS],h.wrapT=it[l.wrapT],s=0;6>s;++s)L(g[s]);return h}var f=new I(34067);mt[f.id]=f,a.cubeCount++;var g=Array(6);return h(e,r,n,i,s,l),h.subimage=function(t,e,r,n,i){r|=0,n|=0,i|=0;var a=m();return c(a,f),a.width=0,a.height=0,p(a,e),a.width=a.width||(f.width>>i)-r,a.height=a.height||(f.height>>i)-n,D(f),d(a,34069+t,r,n,i),R(),T(a),h},h.resize=function(e){if((e|=0)!==f.width){h.width=f.width=e,h.height=f.height=e,D(f);for(var r=0;6>r;++r)for(var n=0;f.mipmask>>n;++n)t.texImage2D(34069+r,n,f.format,e>>n,e>>n,0,f.format,f.type,null);return R(),o.profile&&(f.stats.size=k(f.internalformat,f.type,h.width,h.height,!1,!0)),h}},h._reglType=\\\"textureCube\\\",h._texture=f,o.profile&&(h.stats=f.stats),h.destroy=function(){f.decRef()},h},clear:function(){for(var e=0;e<yt;++e)t.activeTexture(33984+e),t.bindTexture(3553,null),xt[e]=null;X(mt).forEach(F),a.cubeCount=0,a.textureCount=0},getTexture:function(t){return null},restore:function(){for(var e=0;e<yt;++e){var r=xt[e];r&&(r.bindCount=0,r.unit=-1,xt[e]=null)}X(mt).forEach(function(e){e.texture=t.createTexture(),t.bindTexture(e.target,e.texture);for(var r=0;32>r;++r)if(0!=(e.mipmask&1<<r))if(3553===e.target)t.texImage2D(3553,r,e.internalformat,e.width>>r,e.height>>r,0,e.internalformat,e.type,null);else for(var n=0;6>n;++n)t.texImage2D(34069+n,r,e.internalformat,e.width>>r,e.height>>r,0,e.internalformat,e.type,null);z(e.texInfo,e.target)})}}}function A(t,e,r,n,i,a){function o(t,e,r){this.target=t,this.texture=e,this.renderbuffer=r;var n=t=0;e?(t=e.width,n=e.height):r&&(t=r.width,n=r.height),this.width=t,this.height=n}function s(t){t&&(t.texture&&t.texture._texture.decRef(),t.renderbuffer&&t.renderbuffer._renderbuffer.decRef())}function l(t,e,r){t&&(t.texture?t.texture._texture.refCount+=1:t.renderbuffer._renderbuffer.refCount+=1)}function c(e,r){r&&(r.texture?t.framebufferTexture2D(36160,e,r.target,r.texture._texture.texture,0):t.framebufferRenderbuffer(36160,e,36161,r.renderbuffer._renderbuffer.renderbuffer))}function u(t){var e=3553,r=null,n=null,i=t;return\\\"object\\\"==typeof t&&(i=t.data,\\\"target\\\"in t&&(e=0|t.target)),\\\"texture2d\\\"===(t=i._reglType)?r=i:\\\"textureCube\\\"===t?r=i:\\\"renderbuffer\\\"===t&&(n=i,e=36161),new o(e,r,n)}function h(t,e,r,a,s){return r?((t=n.create2D({width:t,height:e,format:a,type:s}))._texture.refCount=0,new o(3553,t,null)):((t=i.create({width:t,height:e,format:a}))._renderbuffer.refCount=0,new o(36161,null,t))}function f(t){return t&&(t.texture||t.renderbuffer)}function p(t,e,r){t&&(t.texture?t.texture.resize(e,r):t.renderbuffer&&t.renderbuffer.resize(e,r),t.width=e,t.height=r)}function d(){this.id=k++,T[this.id]=this,this.framebuffer=t.createFramebuffer(),this.height=this.width=0,this.colorAttachments=[],this.depthStencilAttachment=this.stencilAttachment=this.depthAttachment=null}function g(t){t.colorAttachments.forEach(s),s(t.depthAttachment),s(t.stencilAttachment),s(t.depthStencilAttachment)}function v(e){t.deleteFramebuffer(e.framebuffer),e.framebuffer=null,a.framebufferCount--,delete T[e.id]}function m(e){var n;t.bindFramebuffer(36160,e.framebuffer);var i=e.colorAttachments;for(n=0;n<i.length;++n)c(36064+n,i[n]);for(n=i.length;n<r.maxColorAttachments;++n)t.framebufferTexture2D(36160,36064+n,3553,null,0);t.framebufferTexture2D(36160,33306,3553,null,0),t.framebufferTexture2D(36160,36096,3553,null,0),t.framebufferTexture2D(36160,36128,3553,null,0),c(36096,e.depthAttachment),c(36128,e.stencilAttachment),c(33306,e.depthStencilAttachment),t.checkFramebufferStatus(36160),t.isContextLost(),t.bindFramebuffer(36160,x.next?x.next.framebuffer:null),x.cur=x.next,t.getError()}function y(t,e){function r(t,e){var i,a=0,o=0,s=!0,c=!0;i=null;var p=!0,d=\\\"rgba\\\",v=\\\"uint8\\\",y=1,x=null,w=null,k=null,T=!1;\\\"number\\\"==typeof t?(a=0|t,o=0|e||a):t?(\\\"shape\\\"in t?(a=(o=t.shape)[0],o=o[1]):(\\\"radius\\\"in t&&(a=o=t.radius),\\\"width\\\"in t&&(a=t.width),\\\"height\\\"in t&&(o=t.height)),(\\\"color\\\"in t||\\\"colors\\\"in t)&&(i=t.color||t.colors,Array.isArray(i)),i||(\\\"colorCount\\\"in t&&(y=0|t.colorCount),\\\"colorTexture\\\"in t&&(p=!!t.colorTexture,d=\\\"rgba4\\\"),\\\"colorType\\\"in t&&(v=t.colorType,!p)&&(\\\"half float\\\"===v||\\\"float16\\\"===v?d=\\\"rgba16f\\\":\\\"float\\\"!==v&&\\\"float32\\\"!==v||(d=\\\"rgba32f\\\")),\\\"colorFormat\\\"in t&&(d=t.colorFormat,0<=b.indexOf(d)?p=!0:0<=_.indexOf(d)&&(p=!1))),(\\\"depthTexture\\\"in t||\\\"depthStencilTexture\\\"in t)&&(T=!(!t.depthTexture&&!t.depthStencilTexture)),\\\"depth\\\"in t&&(\\\"boolean\\\"==typeof t.depth?s=t.depth:(x=t.depth,c=!1)),\\\"stencil\\\"in t&&(\\\"boolean\\\"==typeof t.stencil?c=t.stencil:(w=t.stencil,s=!1)),\\\"depthStencil\\\"in t&&(\\\"boolean\\\"==typeof t.depthStencil?s=c=t.depthStencil:(k=t.depthStencil,c=s=!1))):a=o=1;var A=null,M=null,S=null,E=null;if(Array.isArray(i))A=i.map(u);else if(i)A=[u(i)];else for(A=Array(y),i=0;i<y;++i)A[i]=h(a,o,p,d,v);for(a=a||A[0].width,o=o||A[0].height,x?M=u(x):s&&!c&&(M=h(a,o,T,\\\"depth\\\",\\\"uint32\\\")),w?S=u(w):c&&!s&&(S=h(a,o,!1,\\\"stencil\\\",\\\"uint8\\\")),k?E=u(k):!x&&!w&&c&&s&&(E=h(a,o,T,\\\"depth stencil\\\",\\\"depth stencil\\\")),s=null,i=0;i<A.length;++i)l(A[i]),A[i]&&A[i].texture&&(c=yt[A[i].texture._texture.format]*xt[A[i].texture._texture.type],null===s&&(s=c));return l(M),l(S),l(E),g(n),n.width=a,n.height=o,n.colorAttachments=A,n.depthAttachment=M,n.stencilAttachment=S,n.depthStencilAttachment=E,r.color=A.map(f),r.depth=f(M),r.stencil=f(S),r.depthStencil=f(E),r.width=n.width,r.height=n.height,m(n),r}var n=new d;return a.framebufferCount++,r(t,e),j(r,{resize:function(t,e){var i=Math.max(0|t,1),a=Math.max(0|e||i,1);if(i===n.width&&a===n.height)return r;for(var o=n.colorAttachments,s=0;s<o.length;++s)p(o[s],i,a);return p(n.depthAttachment,i,a),p(n.stencilAttachment,i,a),p(n.depthStencilAttachment,i,a),n.width=r.width=i,n.height=r.height=a,m(n),r},_reglType:\\\"framebuffer\\\",_framebuffer:n,destroy:function(){v(n),g(n)},use:function(t){x.setFBO({framebuffer:r},t)}})}var x={cur:null,next:null,dirty:!1,setFBO:null},b=[\\\"rgba\\\"],_=[\\\"rgba4\\\",\\\"rgb565\\\",\\\"rgb5 a1\\\"];e.ext_srgb&&_.push(\\\"srgba\\\"),e.ext_color_buffer_half_float&&_.push(\\\"rgba16f\\\",\\\"rgb16f\\\"),e.webgl_color_buffer_float&&_.push(\\\"rgba32f\\\");var w=[\\\"uint8\\\"];e.oes_texture_half_float&&w.push(\\\"half float\\\",\\\"float16\\\"),e.oes_texture_float&&w.push(\\\"float\\\",\\\"float32\\\");var k=0,T={};return j(x,{getFramebuffer:function(t){return\\\"function\\\"==typeof t&&\\\"framebuffer\\\"===t._reglType&&(t=t._framebuffer)instanceof d?t:null},create:y,createCube:function(t){function e(t){var i,a={color:null},o=0,s=null;i=\\\"rgba\\\";var l=\\\"uint8\\\",c=1;if(\\\"number\\\"==typeof t?o=0|t:t?(\\\"shape\\\"in t?o=t.shape[0]:(\\\"radius\\\"in t&&(o=0|t.radius),\\\"width\\\"in t?o=0|t.width:\\\"height\\\"in t&&(o=0|t.height)),(\\\"color\\\"in t||\\\"colors\\\"in t)&&(s=t.color||t.colors,Array.isArray(s)),s||(\\\"colorCount\\\"in t&&(c=0|t.colorCount),\\\"colorType\\\"in t&&(l=t.colorType),\\\"colorFormat\\\"in t&&(i=t.colorFormat)),\\\"depth\\\"in t&&(a.depth=t.depth),\\\"stencil\\\"in t&&(a.stencil=t.stencil),\\\"depthStencil\\\"in t&&(a.depthStencil=t.depthStencil)):o=1,s)if(Array.isArray(s))for(t=[],i=0;i<s.length;++i)t[i]=s[i];else t=[s];else for(t=Array(c),s={radius:o,format:i,type:l},i=0;i<c;++i)t[i]=n.createCube(s);for(a.color=Array(t.length),i=0;i<t.length;++i)c=t[i],o=o||c.width,a.color[i]={target:34069,data:t[i]};for(i=0;6>i;++i){for(c=0;c<t.length;++c)a.color[c].target=34069+i;0<i&&(a.depth=r[0].depth,a.stencil=r[0].stencil,a.depthStencil=r[0].depthStencil),r[i]?r[i](a):r[i]=y(a)}return j(e,{width:o,height:o,color:t})}var r=Array(6);return e(t),j(e,{faces:r,resize:function(t){var n=0|t;if(n===e.width)return e;var i=e.color;for(t=0;t<i.length;++t)i[t].resize(n);for(t=0;6>t;++t)r[t].resize(n);return e.width=e.height=n,e},_reglType:\\\"framebufferCube\\\",destroy:function(){r.forEach(function(t){t.destroy()})}})},clear:function(){X(T).forEach(v)},restore:function(){x.cur=null,x.next=null,x.dirty=!0,X(T).forEach(function(e){e.framebuffer=t.createFramebuffer(),m(e)})}})}function M(){this.w=this.z=this.y=this.x=this.state=0,this.buffer=null,this.size=0,this.normalized=!1,this.type=5126,this.divisor=this.stride=this.offset=0}function S(t,e,r,n){function i(t,e,r,n){this.name=t,this.id=e,this.location=r,this.info=n}function a(t,e){for(var r=0;r<t.length;++r)if(t[r].id===e.id)return void(t[r].location=e.location);t.push(e)}function o(r,n,i){if(!(o=(i=35632===r?c:u)[n])){var a=e.str(n),o=t.createShader(r);t.shaderSource(o,a),t.compileShader(o),i[n]=o}return o}function s(t,e){this.id=p++,this.fragId=t,this.vertId=e,this.program=null,this.uniforms=[],this.attributes=[],n.profile&&(this.stats={uniformsCount:0,attributesCount:0})}function l(r,s){var l,c;l=o(35632,r.fragId),c=o(35633,r.vertId);var u=r.program=t.createProgram();t.attachShader(u,l),t.attachShader(u,c),t.linkProgram(u);var h=t.getProgramParameter(u,35718);n.profile&&(r.stats.uniformsCount=h);var f=r.uniforms;for(l=0;l<h;++l)if(c=t.getActiveUniform(u,l))if(1<c.size)for(var p=0;p<c.size;++p){var d=c.name.replace(\\\"[0]\\\",\\\"[\\\"+p+\\\"]\\\");a(f,new i(d,e.id(d),t.getUniformLocation(u,d),c))}else a(f,new i(c.name,e.id(c.name),t.getUniformLocation(u,c.name),c));for(h=t.getProgramParameter(u,35721),n.profile&&(r.stats.attributesCount=h),f=r.attributes,l=0;l<h;++l)(c=t.getActiveAttrib(u,l))&&a(f,new i(c.name,e.id(c.name),t.getAttribLocation(u,c.name),c))}var c={},u={},h={},f=[],p=0;return n.profile&&(r.getMaxUniformsCount=function(){var t=0;return f.forEach(function(e){e.stats.uniformsCount>t&&(t=e.stats.uniformsCount)}),t},r.getMaxAttributesCount=function(){var t=0;return f.forEach(function(e){e.stats.attributesCount>t&&(t=e.stats.attributesCount)}),t}),{clear:function(){var e=t.deleteShader.bind(t);X(c).forEach(e),c={},X(u).forEach(e),u={},f.forEach(function(e){t.deleteProgram(e.program)}),f.length=0,h={},r.shaderCount=0},program:function(t,e,n){var i=h[e];i||(i=h[e]={});var a=i[t];return a||(a=new s(e,t),r.shaderCount++,l(a),i[t]=a,f.push(a)),a},restore:function(){c={},u={};for(var t=0;t<f.length;++t)l(f[t])},shader:o,frag:-1,vert:-1}}function E(t,e,r,n,i,a,o){function s(i){var a;a=null===e.next?5121:e.next.colorAttachments[0].texture._texture.type;var o=0,s=0,l=n.framebufferWidth,c=n.framebufferHeight,u=null;return W(i)?u=i:i&&(o=0|i.x,s=0|i.y,l=0|(i.width||n.framebufferWidth-o),c=0|(i.height||n.framebufferHeight-s),u=i.data||null),r(),i=l*c*4,u||(5121===a?u=new Uint8Array(i):5126===a&&(u=u||new Float32Array(i))),t.pixelStorei(3333,4),t.readPixels(o,s,l,c,6408,a,u),u}return function(t){return t&&\\\"framebuffer\\\"in t?function(t){var r;return e.setFBO({framebuffer:t.framebuffer},function(){r=s(t)}),r}(t):s(t)}}function C(t){return Array.prototype.slice.call(t)}function L(t){return C(t).join(\\\"\\\")}function P(){function t(){var t=[],e=[];return j(function(){t.push.apply(t,C(arguments))},{def:function(){var n=\\\"v\\\"+r++;return e.push(n),0<arguments.length&&(t.push(n,\\\"=\\\"),t.push.apply(t,C(arguments)),t.push(\\\";\\\")),n},toString:function(){return L([0<e.length?\\\"var \\\"+e+\\\";\\\":\\\"\\\",L(t)])}})}function e(){function e(t,e){n(t,e,\\\"=\\\",r.def(t,e),\\\";\\\")}var r=t(),n=t(),i=r.toString,a=n.toString;return j(function(){r.apply(r,C(arguments))},{def:r.def,entry:r,exit:n,save:e,set:function(t,n,i){e(t,n),r(t,n,\\\"=\\\",i,\\\";\\\")},toString:function(){return i()+a()}})}var r=0,n=[],i=[],a=t(),o={};return{global:a,link:function(t){for(var e=0;e<i.length;++e)if(i[e]===t)return n[e];return e=\\\"g\\\"+r++,n.push(e),i.push(t),e},block:t,proc:function(t,r){function n(){var t=\\\"a\\\"+i.length;return i.push(t),t}var i=[];r=r||0;for(var a=0;a<r;++a)n();var s=(a=e()).toString;return o[t]=j(a,{arg:n,toString:function(){return L([\\\"function(\\\",i.join(),\\\"){\\\",s(),\\\"}\\\"])}})},scope:e,cond:function(){var t=L(arguments),r=e(),n=e(),i=r.toString,a=n.toString;return j(r,{then:function(){return r.apply(r,C(arguments)),this},else:function(){return n.apply(n,C(arguments)),this},toString:function(){var e=a();return e&&(e=\\\"else{\\\"+e+\\\"}\\\"),L([\\\"if(\\\",t,\\\"){\\\",i(),\\\"}\\\",e])}})},compile:function(){var t=['\\\"use strict\\\";',a,\\\"return {\\\"];Object.keys(o).forEach(function(e){t.push('\\\"',e,'\\\":',o[e].toString(),\\\",\\\")}),t.push(\\\"}\\\");var e=L(t).replace(/;/g,\\\";\\\\n\\\").replace(/}/g,\\\"}\\\\n\\\").replace(/{/g,\\\"{\\\\n\\\");return Function.apply(null,n.concat(e)).apply(null,i)}}}function O(t){return Array.isArray(t)||W(t)||l(t)}function z(t){return t.sort(function(t,e){return\\\"viewport\\\"===t?-1:\\\"viewport\\\"===e?1:t<e?-1:1})}function I(t,e,r,n){this.thisDep=t,this.contextDep=e,this.propDep=r,this.append=n}function D(t){return t&&!(t.thisDep||t.contextDep||t.propDep)}function R(t){return new I(!1,!1,!1,t)}function F(t,e){var r=t.type;return 0===r?new I(!0,1<=(r=t.data.length),2<=r,e):4===r?new I((r=t.data).thisDep,r.contextDep,r.propDep,e):new I(3===r,2===r,1===r,e)}function B(t,e,r,n,i,o,s,l,c,u,h,f,p,d,g){function m(t){return t.replace(\\\".\\\",\\\"_\\\")}function y(t,e,r){var n=m(t);nt.push(t),et[n]=tt[n]=!!r,it[n]=e}function x(t,e,r){var n=m(t);nt.push(t),Array.isArray(r)?(tt[n]=r.slice(),et[n]=r.slice()):tt[n]=et[n]=r,at[n]=e}function b(){var t=P(),r=t.link,n=t.global;t.id=lt++,t.batchId=\\\"0\\\";var i=r(ot),a=t.shared={props:\\\"a0\\\"};Object.keys(ot).forEach(function(t){a[t]=n.def(i,\\\".\\\",t)});var o=t.next={},s=t.current={};Object.keys(at).forEach(function(t){Array.isArray(tt[t])&&(o[t]=n.def(a.next,\\\".\\\",t),s[t]=n.def(a.current,\\\".\\\",t))});var l=t.constants={};Object.keys(st).forEach(function(t){l[t]=n.def(JSON.stringify(st[t]))}),t.invoke=function(e,n){switch(n.type){case 0:var i=[\\\"this\\\",a.context,a.props,t.batchId];return e.def(r(n.data),\\\".call(\\\",i.slice(0,Math.max(n.data.length+1,4)),\\\")\\\");case 1:return e.def(a.props,n.data);case 2:return e.def(a.context,n.data);case 3:return e.def(\\\"this\\\",n.data);case 4:return n.data.append(t,e),n.data.ref}},t.attribCache={};var c={};return t.scopeAttrib=function(t){if((t=e.id(t))in c)return c[t];var n=u.scope[t];return n||(n=u.scope[t]=new Z),c[t]=r(n)},t}function _(t,e){var r=t.static,n=t.dynamic;if(\\\"framebuffer\\\"in r){var i=r.framebuffer;return i?(i=l.getFramebuffer(i),R(function(t,e){var r=t.link(i),n=t.shared;return e.set(n.framebuffer,\\\".next\\\",r),n=n.context,e.set(n,\\\".framebufferWidth\\\",r+\\\".width\\\"),e.set(n,\\\".framebufferHeight\\\",r+\\\".height\\\"),r})):R(function(t,e){var r=t.shared;return e.set(r.framebuffer,\\\".next\\\",\\\"null\\\"),r=r.context,e.set(r,\\\".framebufferWidth\\\",r+\\\".drawingBufferWidth\\\"),e.set(r,\\\".framebufferHeight\\\",r+\\\".drawingBufferHeight\\\"),\\\"null\\\"})}if(\\\"framebuffer\\\"in n){var a=n.framebuffer;return F(a,function(t,e){var r=t.invoke(e,a),n=t.shared,i=n.framebuffer;r=e.def(i,\\\".getFramebuffer(\\\",r,\\\")\\\");return e.set(i,\\\".next\\\",r),n=n.context,e.set(n,\\\".framebufferWidth\\\",r+\\\"?\\\"+r+\\\".width:\\\"+n+\\\".drawingBufferWidth\\\"),e.set(n,\\\".framebufferHeight\\\",r+\\\"?\\\"+r+\\\".height:\\\"+n+\\\".drawingBufferHeight\\\"),r})}return null}function w(t){function r(t){if(t in n){var r=e.id(n[t]);return(t=R(function(){return r})).id=r,t}if(t in i){var a=i[t];return F(a,function(t,e){var r=t.invoke(e,a);return e.def(t.shared.strings,\\\".id(\\\",r,\\\")\\\")})}return null}var n=t.static,i=t.dynamic,a=r(\\\"frag\\\"),o=r(\\\"vert\\\"),s=null;return D(a)&&D(o)?(s=h.program(o.id,a.id),t=R(function(t,e){return t.link(s)})):t=new I(a&&a.thisDep||o&&o.thisDep,a&&a.contextDep||o&&o.contextDep,a&&a.propDep||o&&o.propDep,function(t,e){var r,n,i=t.shared.shader;return r=a?a.append(t,e):e.def(i,\\\".\\\",\\\"frag\\\"),n=o?o.append(t,e):e.def(i,\\\".\\\",\\\"vert\\\"),e.def(i+\\\".program(\\\"+n+\\\",\\\"+r+\\\")\\\")}),{frag:a,vert:o,progVar:t,program:s}}function k(t,e){function r(t,e){if(t in n){var r=0|n[t];return R(function(t,n){return e&&(t.OFFSET=r),r})}if(t in i){var o=i[t];return F(o,function(t,r){var n=t.invoke(r,o);return e&&(t.OFFSET=n),n})}return e&&a?R(function(t,e){return t.OFFSET=\\\"0\\\",0}):null}var n=t.static,i=t.dynamic,a=function(){if(\\\"elements\\\"in n){var t=n.elements;O(t)?t=o.getElements(o.create(t,!0)):t&&(t=o.getElements(t));var e=R(function(e,r){if(t){var n=e.link(t);return e.ELEMENTS=n}return e.ELEMENTS=null});return e.value=t,e}if(\\\"elements\\\"in i){var r=i.elements;return F(r,function(t,e){var n=(i=t.shared).isBufferArgs,i=i.elements,a=t.invoke(e,r),o=e.def(\\\"null\\\");n=e.def(n,\\\"(\\\",a,\\\")\\\"),a=t.cond(n).then(o,\\\"=\\\",i,\\\".createStream(\\\",a,\\\");\\\").else(o,\\\"=\\\",i,\\\".getElements(\\\",a,\\\");\\\");return e.entry(a),e.exit(t.cond(n).then(i,\\\".destroyStream(\\\",o,\\\");\\\")),t.ELEMENTS=o})}return null}(),s=r(\\\"offset\\\",!0);return{elements:a,primitive:function(){if(\\\"primitive\\\"in n){var t=n.primitive;return R(function(e,r){return rt[t]})}if(\\\"primitive\\\"in i){var e=i.primitive;return F(e,function(t,r){var n=t.constants.primTypes,i=t.invoke(r,e);return r.def(n,\\\"[\\\",i,\\\"]\\\")})}return a?D(a)?a.value?R(function(t,e){return e.def(t.ELEMENTS,\\\".primType\\\")}):R(function(){return 4}):new I(a.thisDep,a.contextDep,a.propDep,function(t,e){var r=t.ELEMENTS;return e.def(r,\\\"?\\\",r,\\\".primType:\\\",4)}):null}(),count:function(){if(\\\"count\\\"in n){var t=0|n.count;return R(function(){return t})}if(\\\"count\\\"in i){var e=i.count;return F(e,function(t,r){return t.invoke(r,e)})}return a?D(a)?a?s?new I(s.thisDep,s.contextDep,s.propDep,function(t,e){return e.def(t.ELEMENTS,\\\".vertCount-\\\",t.OFFSET)}):R(function(t,e){return e.def(t.ELEMENTS,\\\".vertCount\\\")}):R(function(){return-1}):new I(a.thisDep||s.thisDep,a.contextDep||s.contextDep,a.propDep||s.propDep,function(t,e){var r=t.ELEMENTS;return t.OFFSET?e.def(r,\\\"?\\\",r,\\\".vertCount-\\\",t.OFFSET,\\\":-1\\\"):e.def(r,\\\"?\\\",r,\\\".vertCount:-1\\\")}):null}(),instances:r(\\\"instances\\\",!1),offset:s}}function T(t,r){var n=t.static,a=t.dynamic,o={};return Object.keys(n).forEach(function(t){var r=n[t],a=e.id(t),s=new Z;if(O(r))s.state=1,s.buffer=i.getBuffer(i.create(r,34962,!1,!0)),s.type=0;else if(c=i.getBuffer(r))s.state=1,s.buffer=c,s.type=0;else if(\\\"constant\\\"in r){var l=r.constant;s.buffer=\\\"null\\\",s.state=2,\\\"number\\\"==typeof l?s.x=l:bt.forEach(function(t,e){e<l.length&&(s[t]=l[e])})}else{var c=O(r.buffer)?i.getBuffer(i.create(r.buffer,34962,!1,!0)):i.getBuffer(r.buffer),u=0|r.offset,h=0|r.stride,f=0|r.size,p=!!r.normalized,d=0;\\\"type\\\"in r&&(d=K[r.type]),r=0|r.divisor,s.buffer=c,s.state=1,s.size=f,s.normalized=p,s.type=d||c.dtype,s.offset=u,s.stride=h,s.divisor=r}o[t]=R(function(t,e){var r=t.attribCache;if(a in r)return r[a];var n={isStream:!1};return Object.keys(s).forEach(function(t){n[t]=s[t]}),s.buffer&&(n.buffer=t.link(s.buffer),n.type=n.type||n.buffer+\\\".dtype\\\"),r[a]=n})}),Object.keys(a).forEach(function(t){var e=a[t];o[t]=F(e,function(t,r){function n(t){r(l[t],\\\"=\\\",i,\\\".\\\",t,\\\"|0;\\\")}var i=t.invoke(r,e),a=t.shared,o=a.isBufferArgs,s=a.buffer,l={isStream:r.def(!1)},c=new Z;c.state=1,Object.keys(c).forEach(function(t){l[t]=r.def(\\\"\\\"+c[t])});var u=l.buffer,h=l.type;return r(\\\"if(\\\",o,\\\"(\\\",i,\\\")){\\\",l.isStream,\\\"=true;\\\",u,\\\"=\\\",s,\\\".createStream(\\\",34962,\\\",\\\",i,\\\");\\\",h,\\\"=\\\",u,\\\".dtype;\\\",\\\"}else{\\\",u,\\\"=\\\",s,\\\".getBuffer(\\\",i,\\\");\\\",\\\"if(\\\",u,\\\"){\\\",h,\\\"=\\\",u,\\\".dtype;\\\",'}else if(\\\"constant\\\" in ',i,\\\"){\\\",l.state,\\\"=\\\",2,\\\";\\\",\\\"if(typeof \\\"+i+'.constant === \\\"number\\\"){',l[bt[0]],\\\"=\\\",i,\\\".constant;\\\",bt.slice(1).map(function(t){return l[t]}).join(\\\"=\\\"),\\\"=0;\\\",\\\"}else{\\\",bt.map(function(t,e){return l[t]+\\\"=\\\"+i+\\\".constant.length>\\\"+e+\\\"?\\\"+i+\\\".constant[\\\"+e+\\\"]:0;\\\"}).join(\\\"\\\"),\\\"}}else{\\\",\\\"if(\\\",o,\\\"(\\\",i,\\\".buffer)){\\\",u,\\\"=\\\",s,\\\".createStream(\\\",34962,\\\",\\\",i,\\\".buffer);\\\",\\\"}else{\\\",u,\\\"=\\\",s,\\\".getBuffer(\\\",i,\\\".buffer);\\\",\\\"}\\\",h,'=\\\"type\\\" in ',i,\\\"?\\\",a.glTypes,\\\"[\\\",i,\\\".type]:\\\",u,\\\".dtype;\\\",l.normalized,\\\"=!!\\\",i,\\\".normalized;\\\"),n(\\\"size\\\"),n(\\\"offset\\\"),n(\\\"stride\\\"),n(\\\"divisor\\\"),r(\\\"}}\\\"),r.exit(\\\"if(\\\",l.isStream,\\\"){\\\",s,\\\".destroyStream(\\\",u,\\\");\\\",\\\"}\\\"),l})}),o}function A(t,e,r,n,i){var o=_(t),s=function(t,e,r){function n(t){if(t in i){var r=i[t];t=!0;var n,o,s=0|r.x,l=0|r.y;return\\\"width\\\"in r?n=0|r.width:t=!1,\\\"height\\\"in r?o=0|r.height:t=!1,new I(!t&&e&&e.thisDep,!t&&e&&e.contextDep,!t&&e&&e.propDep,function(t,e){var i=t.shared.context,a=n;\\\"width\\\"in r||(a=e.def(i,\\\".\\\",\\\"framebufferWidth\\\",\\\"-\\\",s));var c=o;return\\\"height\\\"in r||(c=e.def(i,\\\".\\\",\\\"framebufferHeight\\\",\\\"-\\\",l)),[s,l,a,c]})}if(t in a){var c=a[t];return t=F(c,function(t,e){var r=t.invoke(e,c),n=t.shared.context,i=e.def(r,\\\".x|0\\\"),a=e.def(r,\\\".y|0\\\");return[i,a,e.def('\\\"width\\\" in ',r,\\\"?\\\",r,\\\".width|0:\\\",\\\"(\\\",n,\\\".\\\",\\\"framebufferWidth\\\",\\\"-\\\",i,\\\")\\\"),r=e.def('\\\"height\\\" in ',r,\\\"?\\\",r,\\\".height|0:\\\",\\\"(\\\",n,\\\".\\\",\\\"framebufferHeight\\\",\\\"-\\\",a,\\\")\\\")]}),e&&(t.thisDep=t.thisDep||e.thisDep,t.contextDep=t.contextDep||e.contextDep,t.propDep=t.propDep||e.propDep),t}return e?new I(e.thisDep,e.contextDep,e.propDep,function(t,e){var r=t.shared.context;return[0,0,e.def(r,\\\".\\\",\\\"framebufferWidth\\\"),e.def(r,\\\".\\\",\\\"framebufferHeight\\\")]}):null}var i=t.static,a=t.dynamic;if(t=n(\\\"viewport\\\")){var o=t;t=new I(t.thisDep,t.contextDep,t.propDep,function(t,e){var r=o.append(t,e),n=t.shared.context;return e.set(n,\\\".viewportWidth\\\",r[2]),e.set(n,\\\".viewportHeight\\\",r[3]),r})}return{viewport:t,scissor_box:n(\\\"scissor.box\\\")}}(t,o),l=k(t),c=function(t,e){var r=t.static,n=t.dynamic,i={};return nt.forEach(function(t){function e(e,a){if(t in r){var s=e(r[t]);i[o]=R(function(){return s})}else if(t in n){var l=n[t];i[o]=F(l,function(t,e){return a(t,e,t.invoke(e,l))})}}var o=m(t);switch(t){case\\\"cull.enable\\\":case\\\"blend.enable\\\":case\\\"dither\\\":case\\\"stencil.enable\\\":case\\\"depth.enable\\\":case\\\"scissor.enable\\\":case\\\"polygonOffset.enable\\\":case\\\"sample.alpha\\\":case\\\"sample.enable\\\":case\\\"depth.mask\\\":return e(function(t){return t},function(t,e,r){return r});case\\\"depth.func\\\":return e(function(t){return kt[t]},function(t,e,r){return e.def(t.constants.compareFuncs,\\\"[\\\",r,\\\"]\\\")});case\\\"depth.range\\\":return e(function(t){return t},function(t,e,r){return[e.def(\\\"+\\\",r,\\\"[0]\\\"),e=e.def(\\\"+\\\",r,\\\"[1]\\\")]});case\\\"blend.func\\\":return e(function(t){return[wt[\\\"srcRGB\\\"in t?t.srcRGB:t.src],wt[\\\"dstRGB\\\"in t?t.dstRGB:t.dst],wt[\\\"srcAlpha\\\"in t?t.srcAlpha:t.src],wt[\\\"dstAlpha\\\"in t?t.dstAlpha:t.dst]]},function(t,e,r){function n(t,n){return e.def('\\\"',t,n,'\\\" in ',r,\\\"?\\\",r,\\\".\\\",t,n,\\\":\\\",r,\\\".\\\",t)}t=t.constants.blendFuncs;var i=n(\\\"src\\\",\\\"RGB\\\"),a=n(\\\"dst\\\",\\\"RGB\\\"),o=(i=e.def(t,\\\"[\\\",i,\\\"]\\\"),e.def(t,\\\"[\\\",n(\\\"src\\\",\\\"Alpha\\\"),\\\"]\\\"));return[i,a=e.def(t,\\\"[\\\",a,\\\"]\\\"),o,t=e.def(t,\\\"[\\\",n(\\\"dst\\\",\\\"Alpha\\\"),\\\"]\\\")]});case\\\"blend.equation\\\":return e(function(t){return\\\"string\\\"==typeof t?[J[t],J[t]]:\\\"object\\\"==typeof t?[J[t.rgb],J[t.alpha]]:void 0},function(t,e,r){var n=t.constants.blendEquations,i=e.def(),a=e.def();return(t=t.cond(\\\"typeof \\\",r,'===\\\"string\\\"')).then(i,\\\"=\\\",a,\\\"=\\\",n,\\\"[\\\",r,\\\"];\\\"),t.else(i,\\\"=\\\",n,\\\"[\\\",r,\\\".rgb];\\\",a,\\\"=\\\",n,\\\"[\\\",r,\\\".alpha];\\\"),e(t),[i,a]});case\\\"blend.color\\\":return e(function(t){return a(4,function(e){return+t[e]})},function(t,e,r){return a(4,function(t){return e.def(\\\"+\\\",r,\\\"[\\\",t,\\\"]\\\")})});case\\\"stencil.mask\\\":return e(function(t){return 0|t},function(t,e,r){return e.def(r,\\\"|0\\\")});case\\\"stencil.func\\\":return e(function(t){return[kt[t.cmp||\\\"keep\\\"],t.ref||0,\\\"mask\\\"in t?t.mask:-1]},function(t,e,r){return[t=e.def('\\\"cmp\\\" in ',r,\\\"?\\\",t.constants.compareFuncs,\\\"[\\\",r,\\\".cmp]\\\",\\\":\\\",7680),e.def(r,\\\".ref|0\\\"),e=e.def('\\\"mask\\\" in ',r,\\\"?\\\",r,\\\".mask|0:-1\\\")]});case\\\"stencil.opFront\\\":case\\\"stencil.opBack\\\":return e(function(e){return[\\\"stencil.opBack\\\"===t?1029:1028,Tt[e.fail||\\\"keep\\\"],Tt[e.zfail||\\\"keep\\\"],Tt[e.zpass||\\\"keep\\\"]]},function(e,r,n){function i(t){return r.def('\\\"',t,'\\\" in ',n,\\\"?\\\",a,\\\"[\\\",n,\\\".\\\",t,\\\"]:\\\",7680)}var a=e.constants.stencilOps;return[\\\"stencil.opBack\\\"===t?1029:1028,i(\\\"fail\\\"),i(\\\"zfail\\\"),i(\\\"zpass\\\")]});case\\\"polygonOffset.offset\\\":return e(function(t){return[0|t.factor,0|t.units]},function(t,e,r){return[e.def(r,\\\".factor|0\\\"),e=e.def(r,\\\".units|0\\\")]});case\\\"cull.face\\\":return e(function(t){var e=0;return\\\"front\\\"===t?e=1028:\\\"back\\\"===t&&(e=1029),e},function(t,e,r){return e.def(r,'===\\\"front\\\"?',1028,\\\":\\\",1029)});case\\\"lineWidth\\\":return e(function(t){return t},function(t,e,r){return r});case\\\"frontFace\\\":return e(function(t){return At[t]},function(t,e,r){return e.def(r+'===\\\"cw\\\"?2304:2305')});case\\\"colorMask\\\":return e(function(t){return t.map(function(t){return!!t})},function(t,e,r){return a(4,function(t){return\\\"!!\\\"+r+\\\"[\\\"+t+\\\"]\\\"})});case\\\"sample.coverage\\\":return e(function(t){return[\\\"value\\\"in t?t.value:1,!!t.invert]},function(t,e,r){return[e.def('\\\"value\\\" in ',r,\\\"?+\\\",r,\\\".value:1\\\"),e=e.def(\\\"!!\\\",r,\\\".invert\\\")]})}}),i}(t),u=w(t),h=s.viewport;return h&&(c.viewport=h),(s=s[h=m(\\\"scissor.box\\\")])&&(c[h]=s),(o={framebuffer:o,draw:l,shader:u,state:c,dirty:s=0<Object.keys(c).length}).profile=function(t){var e,r=t.static;if(t=t.dynamic,\\\"profile\\\"in r){var n=!!r.profile;(e=R(function(t,e){return n})).enable=n}else if(\\\"profile\\\"in t){var i=t.profile;e=F(i,function(t,e){return t.invoke(e,i)})}return e}(t),o.uniforms=function(t,e){var r=t.static,n=t.dynamic,i={};return Object.keys(r).forEach(function(t){var e,n=r[t];if(\\\"number\\\"==typeof n||\\\"boolean\\\"==typeof n)e=R(function(){return n});else if(\\\"function\\\"==typeof n){var o=n._reglType;\\\"texture2d\\\"===o||\\\"textureCube\\\"===o?e=R(function(t){return t.link(n)}):\\\"framebuffer\\\"!==o&&\\\"framebufferCube\\\"!==o||(e=R(function(t){return t.link(n.color[0])}))}else v(n)&&(e=R(function(t){return t.global.def(\\\"[\\\",a(n.length,function(t){return n[t]}),\\\"]\\\")}));e.value=n,i[t]=e}),Object.keys(n).forEach(function(t){var e=n[t];i[t]=F(e,function(t,r){return t.invoke(r,e)})}),i}(r),o.attributes=T(e),o.context=function(t){var e=t.static,r=t.dynamic,n={};return Object.keys(e).forEach(function(t){var r=e[t];n[t]=R(function(t,e){return\\\"number\\\"==typeof r||\\\"boolean\\\"==typeof r?\\\"\\\"+r:t.link(r)})}),Object.keys(r).forEach(function(t){var e=r[t];n[t]=F(e,function(t,r){return t.invoke(r,e)})}),n}(n),o}function M(t,e,r){var n=t.shared.context,i=t.scope();Object.keys(r).forEach(function(a){e.save(n,\\\".\\\"+a),i(n,\\\".\\\",a,\\\"=\\\",r[a].append(t,e),\\\";\\\")}),e(i)}function S(t,e,r,n){var i,a=(s=t.shared).gl,o=s.framebuffer;Q&&(i=e.def(s.extensions,\\\".webgl_draw_buffers\\\"));var s=(l=t.constants).drawBuffer,l=l.backBuffer;t=r?r.append(t,e):e.def(o,\\\".next\\\"),n||e(\\\"if(\\\",t,\\\"!==\\\",o,\\\".cur){\\\"),e(\\\"if(\\\",t,\\\"){\\\",a,\\\".bindFramebuffer(\\\",36160,\\\",\\\",t,\\\".framebuffer);\\\"),Q&&e(i,\\\".drawBuffersWEBGL(\\\",s,\\\"[\\\",t,\\\".colorAttachments.length]);\\\"),e(\\\"}else{\\\",a,\\\".bindFramebuffer(\\\",36160,\\\",null);\\\"),Q&&e(i,\\\".drawBuffersWEBGL(\\\",l,\\\");\\\"),e(\\\"}\\\",o,\\\".cur=\\\",t,\\\";\\\"),n||e(\\\"}\\\")}function E(t,e,r){var n=t.shared,i=n.gl,o=t.current,s=t.next,l=n.current,c=n.next,u=t.cond(l,\\\".dirty\\\");nt.forEach(function(e){var n,h;if(!((e=m(e))in r.state))if(e in s){n=s[e],h=o[e];var f=a(tt[e].length,function(t){return u.def(n,\\\"[\\\",t,\\\"]\\\")});u(t.cond(f.map(function(t,e){return t+\\\"!==\\\"+h+\\\"[\\\"+e+\\\"]\\\"}).join(\\\"||\\\")).then(i,\\\".\\\",at[e],\\\"(\\\",f,\\\");\\\",f.map(function(t,e){return h+\\\"[\\\"+e+\\\"]=\\\"+t}).join(\\\";\\\"),\\\";\\\"))}else n=u.def(c,\\\".\\\",e),f=t.cond(n,\\\"!==\\\",l,\\\".\\\",e),u(f),e in it?f(t.cond(n).then(i,\\\".enable(\\\",it[e],\\\");\\\").else(i,\\\".disable(\\\",it[e],\\\");\\\"),l,\\\".\\\",e,\\\"=\\\",n,\\\";\\\"):f(i,\\\".\\\",at[e],\\\"(\\\",n,\\\");\\\",l,\\\".\\\",e,\\\"=\\\",n,\\\";\\\")}),0===Object.keys(r.state).length&&u(l,\\\".dirty=false;\\\"),e(u)}function C(t,e,r,n){var i=t.shared,a=t.current,o=i.current,s=i.gl;z(Object.keys(r)).forEach(function(i){var l=r[i];if(!n||n(l)){var c=l.append(t,e);if(it[i]){var u=it[i];D(l)?e(s,c?\\\".enable(\\\":\\\".disable(\\\",u,\\\");\\\"):e(t.cond(c).then(s,\\\".enable(\\\",u,\\\");\\\").else(s,\\\".disable(\\\",u,\\\");\\\")),e(o,\\\".\\\",i,\\\"=\\\",c,\\\";\\\")}else if(v(c)){var h=a[i];e(s,\\\".\\\",at[i],\\\"(\\\",c,\\\");\\\",c.map(function(t,e){return h+\\\"[\\\"+e+\\\"]=\\\"+t}).join(\\\";\\\"),\\\";\\\")}else e(s,\\\".\\\",at[i],\\\"(\\\",c,\\\");\\\",o,\\\".\\\",i,\\\"=\\\",c,\\\";\\\")}})}function L(t,e){$&&(t.instancing=e.def(t.shared.extensions,\\\".angle_instanced_arrays\\\"))}function B(t,e,r,n,i){function a(){return\\\"undefined\\\"==typeof performance?\\\"Date.now()\\\":\\\"performance.now()\\\"}function o(t){t(c=e.def(),\\\"=\\\",a(),\\\";\\\"),\\\"string\\\"==typeof i?t(f,\\\".count+=\\\",i,\\\";\\\"):t(f,\\\".count++;\\\"),d&&(n?t(u=e.def(),\\\"=\\\",g,\\\".getNumPendingQueries();\\\"):t(g,\\\".beginQuery(\\\",f,\\\");\\\"))}function s(t){t(f,\\\".cpuTime+=\\\",a(),\\\"-\\\",c,\\\";\\\"),d&&(n?t(g,\\\".pushScopeStats(\\\",u,\\\",\\\",g,\\\".getNumPendingQueries(),\\\",f,\\\");\\\"):t(g,\\\".endQuery();\\\"))}function l(t){var r=e.def(p,\\\".profile\\\");e(p,\\\".profile=\\\",t,\\\";\\\"),e.exit(p,\\\".profile=\\\",r,\\\";\\\")}var c,u,h=t.shared,f=t.stats,p=h.current,g=h.timer;if(r=r.profile){if(D(r))return void(r.enable?(o(e),s(e.exit),l(\\\"true\\\")):l(\\\"false\\\"));l(r=r.append(t,e))}else r=e.def(p,\\\".profile\\\");o(h=t.block()),e(\\\"if(\\\",r,\\\"){\\\",h,\\\"}\\\"),s(t=t.block()),e.exit(\\\"if(\\\",r,\\\"){\\\",t,\\\"}\\\")}function N(t,e,r,n,i){function a(r,n,i){function a(){e(\\\"if(!\\\",u,\\\".buffer){\\\",l,\\\".enableVertexAttribArray(\\\",c,\\\");}\\\");var r,a=i.type;r=i.size?e.def(i.size,\\\"||\\\",n):n,e(\\\"if(\\\",u,\\\".type!==\\\",a,\\\"||\\\",u,\\\".size!==\\\",r,\\\"||\\\",p.map(function(t){return u+\\\".\\\"+t+\\\"!==\\\"+i[t]}).join(\\\"||\\\"),\\\"){\\\",l,\\\".bindBuffer(\\\",34962,\\\",\\\",h,\\\".buffer);\\\",l,\\\".vertexAttribPointer(\\\",[c,r,a,i.normalized,i.stride,i.offset],\\\");\\\",u,\\\".type=\\\",a,\\\";\\\",u,\\\".size=\\\",r,\\\";\\\",p.map(function(t){return u+\\\".\\\"+t+\\\"=\\\"+i[t]+\\\";\\\"}).join(\\\"\\\"),\\\"}\\\"),$&&(a=i.divisor,e(\\\"if(\\\",u,\\\".divisor!==\\\",a,\\\"){\\\",t.instancing,\\\".vertexAttribDivisorANGLE(\\\",[c,a],\\\");\\\",u,\\\".divisor=\\\",a,\\\";}\\\"))}function s(){e(\\\"if(\\\",u,\\\".buffer){\\\",l,\\\".disableVertexAttribArray(\\\",c,\\\");\\\",\\\"}if(\\\",bt.map(function(t,e){return u+\\\".\\\"+t+\\\"!==\\\"+f[e]}).join(\\\"||\\\"),\\\"){\\\",l,\\\".vertexAttrib4f(\\\",c,\\\",\\\",f,\\\");\\\",bt.map(function(t,e){return u+\\\".\\\"+t+\\\"=\\\"+f[e]+\\\";\\\"}).join(\\\"\\\"),\\\"}\\\")}var l=o.gl,c=e.def(r,\\\".location\\\"),u=e.def(o.attributes,\\\"[\\\",c,\\\"]\\\");r=i.state;var h=i.buffer,f=[i.x,i.y,i.z,i.w],p=[\\\"buffer\\\",\\\"normalized\\\",\\\"offset\\\",\\\"stride\\\"];1===r?a():2===r?s():(e(\\\"if(\\\",r,\\\"===\\\",1,\\\"){\\\"),a(),e(\\\"}else{\\\"),s(),e(\\\"}\\\"))}var o=t.shared;n.forEach(function(n){var o,s=n.name,l=r.attributes[s];if(l){if(!i(l))return;o=l.append(t,e)}else{if(!i(Mt))return;var c=t.scopeAttrib(s);o={},Object.keys(new Z).forEach(function(t){o[t]=e.def(c,\\\".\\\",t)})}a(t.link(n),function(t){switch(t){case 35664:case 35667:case 35671:return 2;case 35665:case 35668:case 35672:return 3;case 35666:case 35669:case 35673:return 4;default:return 1}}(n.info.type),o)})}function j(t,r,n,i,o){for(var s,l=t.shared,c=l.gl,u=0;u<i.length;++u){var h,f=(g=i[u]).name,p=g.info.type,d=n.uniforms[f],g=t.link(g)+\\\".location\\\";if(d){if(!o(d))continue;if(D(d)){if(f=d.value,35678===p||35680===p)r(c,\\\".uniform1i(\\\",g,\\\",\\\",(p=t.link(f._texture||f.color[0]._texture))+\\\".bind());\\\"),r.exit(p,\\\".unbind();\\\");else if(35674===p||35675===p||35676===p)d=2,35675===p?d=3:35676===p&&(d=4),r(c,\\\".uniformMatrix\\\",d,\\\"fv(\\\",g,\\\",false,\\\",f=t.global.def(\\\"new Float32Array([\\\"+Array.prototype.slice.call(f)+\\\"])\\\"),\\\");\\\");else{switch(p){case 5126:s=\\\"1f\\\";break;case 35664:s=\\\"2f\\\";break;case 35665:s=\\\"3f\\\";break;case 35666:s=\\\"4f\\\";break;case 35670:case 5124:s=\\\"1i\\\";break;case 35671:case 35667:s=\\\"2i\\\";break;case 35672:case 35668:s=\\\"3i\\\";break;case 35673:s=\\\"4i\\\";break;case 35669:s=\\\"4i\\\"}r(c,\\\".uniform\\\",s,\\\"(\\\",g,\\\",\\\",v(f)?Array.prototype.slice.call(f):f,\\\");\\\")}continue}h=d.append(t,r)}else{if(!o(Mt))continue;h=r.def(l.uniforms,\\\"[\\\",e.id(f),\\\"]\\\")}switch(35678===p?r(\\\"if(\\\",h,\\\"&&\\\",h,'._reglType===\\\"framebuffer\\\"){',h,\\\"=\\\",h,\\\".color[0];\\\",\\\"}\\\"):35680===p&&r(\\\"if(\\\",h,\\\"&&\\\",h,'._reglType===\\\"framebufferCube\\\"){',h,\\\"=\\\",h,\\\".color[0];\\\",\\\"}\\\"),f=1,p){case 35678:case 35680:p=r.def(h,\\\"._texture\\\"),r(c,\\\".uniform1i(\\\",g,\\\",\\\",p,\\\".bind());\\\"),r.exit(p,\\\".unbind();\\\");continue;case 5124:case 35670:s=\\\"1i\\\";break;case 35667:case 35671:s=\\\"2i\\\",f=2;break;case 35668:case 35672:s=\\\"3i\\\",f=3;break;case 35669:case 35673:s=\\\"4i\\\",f=4;break;case 5126:s=\\\"1f\\\";break;case 35664:s=\\\"2f\\\",f=2;break;case 35665:s=\\\"3f\\\",f=3;break;case 35666:s=\\\"4f\\\",f=4;break;case 35674:s=\\\"Matrix2fv\\\";break;case 35675:s=\\\"Matrix3fv\\\";break;case 35676:s=\\\"Matrix4fv\\\"}if(r(c,\\\".uniform\\\",s,\\\"(\\\",g,\\\",\\\"),\\\"M\\\"===s.charAt(0)){g=Math.pow(p-35674+2,2);var m=t.global.def(\\\"new Float32Array(\\\",g,\\\")\\\");r(\\\"false,(Array.isArray(\\\",h,\\\")||\\\",h,\\\" instanceof Float32Array)?\\\",h,\\\":(\\\",a(g,function(t){return m+\\\"[\\\"+t+\\\"]=\\\"+h+\\\"[\\\"+t+\\\"]\\\"}),\\\",\\\",m,\\\")\\\")}else r(1<f?a(f,function(t){return h+\\\"[\\\"+t+\\\"]\\\"}):h);r(\\\");\\\")}}function U(t,e,r,n){function i(i){var a=f[i];return a?a.contextDep&&n.contextDynamic||a.propDep?a.append(t,r):a.append(t,e):e.def(h,\\\".\\\",i)}function a(){function t(){r(l,\\\".drawElementsInstancedANGLE(\\\",[d,v,m,g+\\\"<<((\\\"+m+\\\"-5121)>>1)\\\",s],\\\");\\\")}function e(){r(l,\\\".drawArraysInstancedANGLE(\\\",[d,g,v,s],\\\");\\\")}p?y?t():(r(\\\"if(\\\",p,\\\"){\\\"),t(),r(\\\"}else{\\\"),e(),r(\\\"}\\\")):e()}function o(){function t(){r(u+\\\".drawElements(\\\"+[d,v,m,g+\\\"<<((\\\"+m+\\\"-5121)>>1)\\\"]+\\\");\\\")}function e(){r(u+\\\".drawArrays(\\\"+[d,g,v]+\\\");\\\")}p?y?t():(r(\\\"if(\\\",p,\\\"){\\\"),t(),r(\\\"}else{\\\"),e(),r(\\\"}\\\")):e()}var s,l,c=t.shared,u=c.gl,h=c.draw,f=n.draw,p=function(){var i=f.elements,a=e;return i?((i.contextDep&&n.contextDynamic||i.propDep)&&(a=r),i=i.append(t,a)):i=a.def(h,\\\".\\\",\\\"elements\\\"),i&&a(\\\"if(\\\"+i+\\\")\\\"+u+\\\".bindBuffer(34963,\\\"+i+\\\".buffer.buffer);\\\"),i}(),d=i(\\\"primitive\\\"),g=i(\\\"offset\\\"),v=function(){var i=f.count,a=e;return i?((i.contextDep&&n.contextDynamic||i.propDep)&&(a=r),i=i.append(t,a)):i=a.def(h,\\\".\\\",\\\"count\\\"),i}();if(\\\"number\\\"==typeof v){if(0===v)return}else r(\\\"if(\\\",v,\\\"){\\\"),r.exit(\\\"}\\\");$&&(s=i(\\\"instances\\\"),l=t.instancing);var m=p+\\\".type\\\",y=f.elements&&D(f.elements);$&&(\\\"number\\\"!=typeof s||0<=s)?\\\"string\\\"==typeof s?(r(\\\"if(\\\",s,\\\">0){\\\"),a(),r(\\\"}else if(\\\",s,\\\"<0){\\\"),o(),r(\\\"}\\\")):a():o()}function q(t,e,r,n,i){return i=(e=b()).proc(\\\"body\\\",i),$&&(e.instancing=i.def(e.shared.extensions,\\\".angle_instanced_arrays\\\")),t(e,i,r,n),e.compile().body}function H(t,e,r,n){L(t,e),N(t,e,r,n.attributes,function(){return!0}),j(t,e,r,n.uniforms,function(){return!0}),U(t,e,e,r)}function G(t,e,r,n){function i(){return!0}t.batchId=\\\"a1\\\",L(t,e),N(t,e,r,n.attributes,i),j(t,e,r,n.uniforms,i),U(t,e,e,r)}function Y(t,e,r,n){function i(t){return t.contextDep&&o||t.propDep}function a(t){return!i(t)}L(t,e);var o=r.contextDep,s=e.def(),l=e.def();t.shared.props=l,t.batchId=s;var c=t.scope(),u=t.scope();e(c.entry,\\\"for(\\\",s,\\\"=0;\\\",s,\\\"<\\\",\\\"a1\\\",\\\";++\\\",s,\\\"){\\\",l,\\\"=\\\",\\\"a0\\\",\\\"[\\\",s,\\\"];\\\",u,\\\"}\\\",c.exit),r.needsContext&&M(t,u,r.context),r.needsFramebuffer&&S(t,u,r.framebuffer),C(t,u,r.state,i),r.profile&&i(r.profile)&&B(t,u,r,!1,!0),n?(N(t,c,r,n.attributes,a),N(t,u,r,n.attributes,i),j(t,c,r,n.uniforms,a),j(t,u,r,n.uniforms,i),U(t,c,u,r)):(e=t.global.def(\\\"{}\\\"),n=r.shader.progVar.append(t,u),l=u.def(n,\\\".id\\\"),c=u.def(e,\\\"[\\\",l,\\\"]\\\"),u(t.shared.gl,\\\".useProgram(\\\",n,\\\".program);\\\",\\\"if(!\\\",c,\\\"){\\\",c,\\\"=\\\",e,\\\"[\\\",l,\\\"]=\\\",t.link(function(e){return q(G,t,r,e,2)}),\\\"(\\\",n,\\\");}\\\",c,\\\".call(this,a0[\\\",s,\\\"],\\\",s,\\\");\\\"))}function W(t,r){function n(e){var n=r.shader[e];n&&i.set(a.shader,\\\".\\\"+e,n.append(t,i))}var i=t.proc(\\\"scope\\\",3);t.batchId=\\\"a2\\\";var a=t.shared,o=a.current;M(t,i,r.context),r.framebuffer&&r.framebuffer.append(t,i),z(Object.keys(r.state)).forEach(function(e){var n=r.state[e].append(t,i);v(n)?n.forEach(function(r,n){i.set(t.next[e],\\\"[\\\"+n+\\\"]\\\",r)}):i.set(a.next,\\\".\\\"+e,n)}),B(t,i,r,!0,!0),[\\\"elements\\\",\\\"offset\\\",\\\"count\\\",\\\"instances\\\",\\\"primitive\\\"].forEach(function(e){var n=r.draw[e];n&&i.set(a.draw,\\\".\\\"+e,\\\"\\\"+n.append(t,i))}),Object.keys(r.uniforms).forEach(function(n){i.set(a.uniforms,\\\"[\\\"+e.id(n)+\\\"]\\\",r.uniforms[n].append(t,i))}),Object.keys(r.attributes).forEach(function(e){var n=r.attributes[e].append(t,i),a=t.scopeAttrib(e);Object.keys(new Z).forEach(function(t){i.set(a,\\\".\\\"+t,n[t])})}),n(\\\"vert\\\"),n(\\\"frag\\\"),0<Object.keys(r.state).length&&(i(o,\\\".dirty=true;\\\"),i.exit(o,\\\".dirty=true;\\\")),i(\\\"a1(\\\",t.shared.context,\\\",a0,\\\",t.batchId,\\\");\\\")}function X(t,e,r){var n=e.static[r];if(n&&function(t){if(\\\"object\\\"==typeof t&&!v(t)){for(var e=Object.keys(t),r=0;r<e.length;++r)if(V.isDynamic(t[e[r]]))return!0;return!1}}(n)){var i=t.global,a=Object.keys(n),o=!1,s=!1,l=!1,c=t.global.def(\\\"{}\\\");a.forEach(function(e){var r=n[e];if(V.isDynamic(r))\\\"function\\\"==typeof r&&(r=n[e]=V.unbox(r)),e=F(r,null),o=o||e.thisDep,l=l||e.propDep,s=s||e.contextDep;else{switch(i(c,\\\".\\\",e,\\\"=\\\"),typeof r){case\\\"number\\\":i(r);break;case\\\"string\\\":i('\\\"',r,'\\\"');break;case\\\"object\\\":Array.isArray(r)&&i(\\\"[\\\",r.join(),\\\"]\\\");break;default:i(t.link(r))}i(\\\";\\\")}}),e.dynamic[r]=new V.DynamicVariable(4,{thisDep:o,contextDep:s,propDep:l,ref:c,append:function(t,e){a.forEach(function(r){var i=n[r];V.isDynamic(i)&&(i=t.invoke(e,i),e(c,\\\".\\\",r,\\\"=\\\",i,\\\";\\\"))})}}),delete e.static[r]}}var Z=u.Record,J={add:32774,subtract:32778,\\\"reverse subtract\\\":32779};r.ext_blend_minmax&&(J.min=32775,J.max=32776);var $=r.angle_instanced_arrays,Q=r.webgl_draw_buffers,tt={dirty:!0,profile:g.profile},et={},nt=[],it={},at={};y(\\\"dither\\\",3024),y(\\\"blend.enable\\\",3042),x(\\\"blend.color\\\",\\\"blendColor\\\",[0,0,0,0]),x(\\\"blend.equation\\\",\\\"blendEquationSeparate\\\",[32774,32774]),x(\\\"blend.func\\\",\\\"blendFuncSeparate\\\",[1,0,1,0]),y(\\\"depth.enable\\\",2929,!0),x(\\\"depth.func\\\",\\\"depthFunc\\\",513),x(\\\"depth.range\\\",\\\"depthRange\\\",[0,1]),x(\\\"depth.mask\\\",\\\"depthMask\\\",!0),x(\\\"colorMask\\\",\\\"colorMask\\\",[!0,!0,!0,!0]),y(\\\"cull.enable\\\",2884),x(\\\"cull.face\\\",\\\"cullFace\\\",1029),x(\\\"frontFace\\\",\\\"frontFace\\\",2305),x(\\\"lineWidth\\\",\\\"lineWidth\\\",1),y(\\\"polygonOffset.enable\\\",32823),x(\\\"polygonOffset.offset\\\",\\\"polygonOffset\\\",[0,0]),y(\\\"sample.alpha\\\",32926),y(\\\"sample.enable\\\",32928),x(\\\"sample.coverage\\\",\\\"sampleCoverage\\\",[1,!1]),y(\\\"stencil.enable\\\",2960),x(\\\"stencil.mask\\\",\\\"stencilMask\\\",-1),x(\\\"stencil.func\\\",\\\"stencilFunc\\\",[519,0,-1]),x(\\\"stencil.opFront\\\",\\\"stencilOpSeparate\\\",[1028,7680,7680,7680]),x(\\\"stencil.opBack\\\",\\\"stencilOpSeparate\\\",[1029,7680,7680,7680]),y(\\\"scissor.enable\\\",3089),x(\\\"scissor.box\\\",\\\"scissor\\\",[0,0,t.drawingBufferWidth,t.drawingBufferHeight]),x(\\\"viewport\\\",\\\"viewport\\\",[0,0,t.drawingBufferWidth,t.drawingBufferHeight]);var ot={gl:t,context:p,strings:e,next:et,current:tt,draw:f,elements:o,buffer:i,shader:h,attributes:u.state,uniforms:c,framebuffer:l,extensions:r,timer:d,isBufferArgs:O},st={primTypes:rt,compareFuncs:kt,blendFuncs:wt,blendEquations:J,stencilOps:Tt,glTypes:K,orientationType:At};Q&&(st.backBuffer=[1029],st.drawBuffer=a(n.maxDrawbuffers,function(t){return 0===t?[0]:a(t,function(t){return 36064+t})}));var lt=0;return{next:et,current:tt,procs:function(){var t=b(),e=t.proc(\\\"poll\\\"),r=t.proc(\\\"refresh\\\"),i=t.block();e(i),r(i);var o,s=t.shared,l=s.gl,c=s.next,u=s.current;i(u,\\\".dirty=false;\\\"),S(t,e),S(t,r,null,!0),$&&(o=t.link($));for(var h=0;h<n.maxAttributes;++h){var f=r.def(s.attributes,\\\"[\\\",h,\\\"]\\\"),p=t.cond(f,\\\".buffer\\\");p.then(l,\\\".enableVertexAttribArray(\\\",h,\\\");\\\",l,\\\".bindBuffer(\\\",34962,\\\",\\\",f,\\\".buffer.buffer);\\\",l,\\\".vertexAttribPointer(\\\",h,\\\",\\\",f,\\\".size,\\\",f,\\\".type,\\\",f,\\\".normalized,\\\",f,\\\".stride,\\\",f,\\\".offset);\\\").else(l,\\\".disableVertexAttribArray(\\\",h,\\\");\\\",l,\\\".vertexAttrib4f(\\\",h,\\\",\\\",f,\\\".x,\\\",f,\\\".y,\\\",f,\\\".z,\\\",f,\\\".w);\\\",f,\\\".buffer=null;\\\"),r(p),$&&r(o,\\\".vertexAttribDivisorANGLE(\\\",h,\\\",\\\",f,\\\".divisor);\\\")}return Object.keys(it).forEach(function(n){var a=it[n],o=i.def(c,\\\".\\\",n),s=t.block();s(\\\"if(\\\",o,\\\"){\\\",l,\\\".enable(\\\",a,\\\")}else{\\\",l,\\\".disable(\\\",a,\\\")}\\\",u,\\\".\\\",n,\\\"=\\\",o,\\\";\\\"),r(s),e(\\\"if(\\\",o,\\\"!==\\\",u,\\\".\\\",n,\\\"){\\\",s,\\\"}\\\")}),Object.keys(at).forEach(function(n){var o,s,h=at[n],f=tt[n],p=t.block();p(l,\\\".\\\",h,\\\"(\\\"),v(f)?(h=f.length,o=t.global.def(c,\\\".\\\",n),s=t.global.def(u,\\\".\\\",n),p(a(h,function(t){return o+\\\"[\\\"+t+\\\"]\\\"}),\\\");\\\",a(h,function(t){return s+\\\"[\\\"+t+\\\"]=\\\"+o+\\\"[\\\"+t+\\\"];\\\"}).join(\\\"\\\")),e(\\\"if(\\\",a(h,function(t){return o+\\\"[\\\"+t+\\\"]!==\\\"+s+\\\"[\\\"+t+\\\"]\\\"}).join(\\\"||\\\"),\\\"){\\\",p,\\\"}\\\")):(o=i.def(c,\\\".\\\",n),s=i.def(u,\\\".\\\",n),p(o,\\\");\\\",u,\\\".\\\",n,\\\"=\\\",o,\\\";\\\"),e(\\\"if(\\\",o,\\\"!==\\\",s,\\\"){\\\",p,\\\"}\\\")),r(p)}),t.compile()}(),compile:function(t,e,r,n,i){var a=b();return a.stats=a.link(i),Object.keys(e.static).forEach(function(t){X(a,e,t)}),_t.forEach(function(e){X(a,t,e)}),r=A(t,e,r,n),function(t,e){var r=t.proc(\\\"draw\\\",1);L(t,r),M(t,r,e.context),S(t,r,e.framebuffer),E(t,r,e),C(t,r,e.state),B(t,r,e,!1,!0);var n=e.shader.progVar.append(t,r);if(r(t.shared.gl,\\\".useProgram(\\\",n,\\\".program);\\\"),e.shader.program)H(t,r,e,e.shader.program);else{var i=t.global.def(\\\"{}\\\"),a=r.def(n,\\\".id\\\"),o=r.def(i,\\\"[\\\",a,\\\"]\\\");r(t.cond(o).then(o,\\\".call(this,a0);\\\").else(o,\\\"=\\\",i,\\\"[\\\",a,\\\"]=\\\",t.link(function(r){return q(H,t,e,r,1)}),\\\"(\\\",n,\\\");\\\",o,\\\".call(this,a0);\\\"))}0<Object.keys(e.state).length&&r(t.shared.current,\\\".dirty=true;\\\")}(a,r),W(a,r),function(t,e){function r(t){return t.contextDep&&i||t.propDep}var n=t.proc(\\\"batch\\\",2);t.batchId=\\\"0\\\",L(t,n);var i=!1,a=!0;Object.keys(e.context).forEach(function(t){i=i||e.context[t].propDep}),i||(M(t,n,e.context),a=!1);var o=!1;if((s=e.framebuffer)?(s.propDep?i=o=!0:s.contextDep&&i&&(o=!0),o||S(t,n,s)):S(t,n,null),e.state.viewport&&e.state.viewport.propDep&&(i=!0),E(t,n,e),C(t,n,e.state,function(t){return!r(t)}),e.profile&&r(e.profile)||B(t,n,e,!1,\\\"a1\\\"),e.contextDep=i,e.needsContext=a,e.needsFramebuffer=o,(a=e.shader.progVar).contextDep&&i||a.propDep)Y(t,n,e,null);else if(a=a.append(t,n),n(t.shared.gl,\\\".useProgram(\\\",a,\\\".program);\\\"),e.shader.program)Y(t,n,e,e.shader.program);else{var s=t.global.def(\\\"{}\\\"),l=(o=n.def(a,\\\".id\\\"),n.def(s,\\\"[\\\",o,\\\"]\\\"));n(t.cond(l).then(l,\\\".call(this,a0,a1);\\\").else(l,\\\"=\\\",s,\\\"[\\\",o,\\\"]=\\\",t.link(function(r){return q(Y,t,e,r,2)}),\\\"(\\\",a,\\\");\\\",l,\\\".call(this,a0,a1);\\\"))}0<Object.keys(e.state).length&&n(t.shared.current,\\\".dirty=true;\\\")}(a,r),a.compile()}}}function N(t,e){for(var r=0;r<t.length;++r)if(t[r]===e)return r;return-1}var j=function(t,e){for(var r=Object.keys(e),n=0;n<r.length;++n)t[r[n]]=e[r[n]];return t},U=0,V={DynamicVariable:t,define:function(r,n){return new t(r,e(n+\\\"\\\"))},isDynamic:function(e){return\\\"function\\\"==typeof e&&!e._reglType||e instanceof t},unbox:function(e,r){return\\\"function\\\"==typeof e?new t(0,e):e},accessor:e},q={next:\\\"function\\\"==typeof requestAnimationFrame?function(t){return requestAnimationFrame(t)}:function(t){return setTimeout(t,16)},cancel:\\\"function\\\"==typeof cancelAnimationFrame?function(t){return cancelAnimationFrame(t)}:clearTimeout},H=\\\"undefined\\\"!=typeof performance&&performance.now?function(){return performance.now()}:function(){return+new Date},G=s();G.zero=s();var Y=function(t,e){var r=1;e.ext_texture_filter_anisotropic&&(r=t.getParameter(34047));var n=1,i=1;e.webgl_draw_buffers&&(n=t.getParameter(34852),i=t.getParameter(36063));var a=!!e.oes_texture_float;if(a){a=t.createTexture(),t.bindTexture(3553,a),t.texImage2D(3553,0,6408,1,1,0,6408,5126,null);var o=t.createFramebuffer();if(t.bindFramebuffer(36160,o),t.framebufferTexture2D(36160,36064,3553,a,0),t.bindTexture(3553,null),36053!==t.checkFramebufferStatus(36160))a=!1;else{t.viewport(0,0,1,1),t.clearColor(1,0,0,1),t.clear(16384);var s=G.allocType(5126,4);t.readPixels(0,0,1,1,6408,5126,s),t.getError()?a=!1:(t.deleteFramebuffer(o),t.deleteTexture(a),a=1===s[0]),G.freeType(s)}}return s=!0,\\\"undefined\\\"!=typeof navigator&&(/MSIE/.test(navigator.userAgent)||/Trident\\\\//.test(navigator.appVersion)||/Edge/.test(navigator.userAgent))||(s=t.createTexture(),o=G.allocType(5121,36),t.activeTexture(33984),t.bindTexture(34067,s),t.texImage2D(34069,0,6408,3,3,0,6408,5121,o),G.freeType(o),t.bindTexture(34067,null),t.deleteTexture(s),s=!t.getError()),{colorBits:[t.getParameter(3410),t.getParameter(3411),t.getParameter(3412),t.getParameter(3413)],depthBits:t.getParameter(3414),stencilBits:t.getParameter(3415),subpixelBits:t.getParameter(3408),extensions:Object.keys(e).filter(function(t){return!!e[t]}),maxAnisotropic:r,maxDrawbuffers:n,maxColorAttachments:i,pointSizeDims:t.getParameter(33901),lineWidthDims:t.getParameter(33902),maxViewportDims:t.getParameter(3386),maxCombinedTextureUnits:t.getParameter(35661),maxCubeMapSize:t.getParameter(34076),maxRenderbufferSize:t.getParameter(34024),maxTextureUnits:t.getParameter(34930),maxTextureSize:t.getParameter(3379),maxAttributes:t.getParameter(34921),maxVertexUniforms:t.getParameter(36347),maxVertexTextureUnits:t.getParameter(35660),maxVaryingVectors:t.getParameter(36348),maxFragmentUniforms:t.getParameter(36349),glsl:t.getParameter(35724),renderer:t.getParameter(7937),vendor:t.getParameter(7936),version:t.getParameter(7938),readFloat:a,npotTextureCube:s}},W=function(t){return t instanceof Uint8Array||t instanceof Uint16Array||t instanceof Uint32Array||t instanceof Int8Array||t instanceof Int16Array||t instanceof Int32Array||t instanceof Float32Array||t instanceof Float64Array||t instanceof Uint8ClampedArray},X=function(t){return Object.keys(t).map(function(e){return t[e]})},Z={shape:function(t){for(var e=[];t.length;t=t[0])e.push(t.length);return e},flatten:function(t,e,r,n){var i=1;if(e.length)for(var a=0;a<e.length;++a)i*=e[a];else i=0;switch(r=n||G.allocType(r,i),e.length){case 0:break;case 1:for(n=e[0],e=0;e<n;++e)r[e]=t[e];break;case 2:for(n=e[0],e=e[1],a=i=0;a<n;++a)for(var o=t[a],s=0;s<e;++s)r[i++]=o[s];break;case 3:c(t,e[0],e[1],e[2],r,0);break;default:!function t(e,r,n,i,a){for(var o=1,s=n+1;s<r.length;++s)o*=r[s];var l=r[n];if(4==r.length-n){var u=r[n+1],h=r[n+2];for(r=r[n+3],s=0;s<l;++s)c(e[s],u,h,r,i,a),a+=o}else for(s=0;s<l;++s)t(e[s],r,n+1,i,a),a+=o}(t,e,0,r,0)}return r}},J={\\\"[object Int8Array]\\\":5120,\\\"[object Int16Array]\\\":5122,\\\"[object Int32Array]\\\":5124,\\\"[object Uint8Array]\\\":5121,\\\"[object Uint8ClampedArray]\\\":5121,\\\"[object Uint16Array]\\\":5123,\\\"[object Uint32Array]\\\":5125,\\\"[object Float32Array]\\\":5126,\\\"[object Float64Array]\\\":5121,\\\"[object ArrayBuffer]\\\":5121},K={int8:5120,int16:5122,int32:5124,uint8:5121,uint16:5123,uint32:5125,float:5126,float32:5126},$={dynamic:35048,stream:35040,static:35044},Q=Z.flatten,tt=Z.shape,et=[];et[5120]=1,et[5122]=2,et[5124]=4,et[5121]=1,et[5123]=2,et[5125]=4,et[5126]=4;var rt={points:0,point:0,lines:1,line:1,triangles:4,triangle:4,\\\"line loop\\\":2,\\\"line strip\\\":3,\\\"triangle strip\\\":5,\\\"triangle fan\\\":6},nt=new Float32Array(1),it=new Uint32Array(nt.buffer),at=[9984,9986,9985,9987],ot=[0,6409,6410,6407,6408],st={};st[6409]=st[6406]=st[6402]=1,st[34041]=st[6410]=2,st[6407]=st[35904]=3,st[6408]=st[35906]=4;var lt=m(\\\"HTMLCanvasElement\\\"),ct=m(\\\"CanvasRenderingContext2D\\\"),ut=m(\\\"ImageBitmap\\\"),ht=m(\\\"HTMLImageElement\\\"),ft=m(\\\"HTMLVideoElement\\\"),pt=Object.keys(J).concat([lt,ct,ut,ht,ft]),dt=[];dt[5121]=1,dt[5126]=4,dt[36193]=2,dt[5123]=2,dt[5125]=4;var gt=[];gt[32854]=2,gt[32855]=2,gt[36194]=2,gt[34041]=4,gt[33776]=.5,gt[33777]=.5,gt[33778]=1,gt[33779]=1,gt[35986]=.5,gt[35987]=1,gt[34798]=1,gt[35840]=.5,gt[35841]=.25,gt[35842]=.5,gt[35843]=.25,gt[36196]=.5;var vt=[];vt[32854]=2,vt[32855]=2,vt[36194]=2,vt[33189]=2,vt[36168]=1,vt[34041]=4,vt[35907]=4,vt[34836]=16,vt[34842]=8,vt[34843]=6;var mt=function(t,e,r,n,i){function a(t){this.id=c++,this.refCount=1,this.renderbuffer=t,this.format=32854,this.height=this.width=0,i.profile&&(this.stats={size:0})}function o(e){var r=e.renderbuffer;t.bindRenderbuffer(36161,null),t.deleteRenderbuffer(r),e.renderbuffer=null,e.refCount=0,delete u[e.id],n.renderbufferCount--}var s={rgba4:32854,rgb565:36194,\\\"rgb5 a1\\\":32855,depth:33189,stencil:36168,\\\"depth stencil\\\":34041};e.ext_srgb&&(s.srgba=35907),e.ext_color_buffer_half_float&&(s.rgba16f=34842,s.rgb16f=34843),e.webgl_color_buffer_float&&(s.rgba32f=34836);var l=[];Object.keys(s).forEach(function(t){l[s[t]]=t});var c=0,u={};return a.prototype.decRef=function(){0>=--this.refCount&&o(this)},i.profile&&(n.getTotalRenderbufferSize=function(){var t=0;return Object.keys(u).forEach(function(e){t+=u[e].stats.size}),t}),{create:function(e,r){function o(e,r){var n=0,a=0,u=32854;if(\\\"object\\\"==typeof e&&e?(\\\"shape\\\"in e?(n=0|(a=e.shape)[0],a=0|a[1]):(\\\"radius\\\"in e&&(n=a=0|e.radius),\\\"width\\\"in e&&(n=0|e.width),\\\"height\\\"in e&&(a=0|e.height)),\\\"format\\\"in e&&(u=s[e.format])):\\\"number\\\"==typeof e?(n=0|e,a=\\\"number\\\"==typeof r?0|r:n):e||(n=a=1),n!==c.width||a!==c.height||u!==c.format)return o.width=c.width=n,o.height=c.height=a,c.format=u,t.bindRenderbuffer(36161,c.renderbuffer),t.renderbufferStorage(36161,u,n,a),i.profile&&(c.stats.size=vt[c.format]*c.width*c.height),o.format=l[c.format],o}var c=new a(t.createRenderbuffer());return u[c.id]=c,n.renderbufferCount++,o(e,r),o.resize=function(e,r){var n=0|e,a=0|r||n;return n===c.width&&a===c.height?o:(o.width=c.width=n,o.height=c.height=a,t.bindRenderbuffer(36161,c.renderbuffer),t.renderbufferStorage(36161,c.format,n,a),i.profile&&(c.stats.size=vt[c.format]*c.width*c.height),o)},o._reglType=\\\"renderbuffer\\\",o._renderbuffer=c,i.profile&&(o.stats=c.stats),o.destroy=function(){c.decRef()},o},clear:function(){X(u).forEach(o)},restore:function(){X(u).forEach(function(e){e.renderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,e.renderbuffer),t.renderbufferStorage(36161,e.format,e.width,e.height)}),t.bindRenderbuffer(36161,null)}}},yt=[];yt[6408]=4,yt[6407]=3;var xt=[];xt[5121]=1,xt[5126]=4,xt[36193]=2;var bt=[\\\"x\\\",\\\"y\\\",\\\"z\\\",\\\"w\\\"],_t=\\\"blend.func blend.equation stencil.func stencil.opFront stencil.opBack sample.coverage viewport scissor.box polygonOffset.offset\\\".split(\\\" \\\"),wt={0:0,1:1,zero:0,one:1,\\\"src color\\\":768,\\\"one minus src color\\\":769,\\\"src alpha\\\":770,\\\"one minus src alpha\\\":771,\\\"dst color\\\":774,\\\"one minus dst color\\\":775,\\\"dst alpha\\\":772,\\\"one minus dst alpha\\\":773,\\\"constant color\\\":32769,\\\"one minus constant color\\\":32770,\\\"constant alpha\\\":32771,\\\"one minus constant alpha\\\":32772,\\\"src alpha saturate\\\":776},kt={never:512,less:513,\\\"<\\\":513,equal:514,\\\"=\\\":514,\\\"==\\\":514,\\\"===\\\":514,lequal:515,\\\"<=\\\":515,greater:516,\\\">\\\":516,notequal:517,\\\"!=\\\":517,\\\"!==\\\":517,gequal:518,\\\">=\\\":518,always:519},Tt={0:0,zero:0,keep:7680,replace:7681,increment:7682,decrement:7683,\\\"increment wrap\\\":34055,\\\"decrement wrap\\\":34056,invert:5386},At={cw:2304,ccw:2305},Mt=new I(!1,!1,!1,function(){});return function(t){function e(){if(0===Z.length)w&&w.update(),Q=null;else{Q=q.next(e),h();for(var t=Z.length-1;0<=t;--t){var r=Z[t];r&&r(P,null,0)}v.flush(),w&&w.update()}}function r(){!Q&&0<Z.length&&(Q=q.next(e))}function n(){Q&&(q.cancel(e),Q=null)}function a(t){t.preventDefault(),n(),J.forEach(function(t){t()})}function o(t){v.getError(),y.restore(),D.restore(),z.restore(),R.restore(),F.restore(),U.restore(),w&&w.restore(),G.procs.refresh(),r(),K.forEach(function(t){t()})}function s(t){function e(t){var e={},r={};return Object.keys(t).forEach(function(n){var i=t[n];V.isDynamic(i)?r[n]=V.unbox(i,n):e[n]=i}),{dynamic:r,static:e}}var r=e(t.context||{}),n=e(t.uniforms||{}),i=e(t.attributes||{}),a=e(function(t){function e(t){if(t in r){var e=r[t];delete r[t],Object.keys(e).forEach(function(n){r[t+\\\".\\\"+n]=e[n]})}}var r=j({},t);return delete r.uniforms,delete r.attributes,delete r.context,\\\"stencil\\\"in r&&r.stencil.op&&(r.stencil.opBack=r.stencil.opFront=r.stencil.op,delete r.stencil.op),e(\\\"blend\\\"),e(\\\"depth\\\"),e(\\\"cull\\\"),e(\\\"stencil\\\"),e(\\\"polygonOffset\\\"),e(\\\"scissor\\\"),e(\\\"sample\\\"),r}(t));t={gpuTime:0,cpuTime:0,count:0};var o=(r=G.compile(a,i,n,r,t)).draw,s=r.batch,l=r.scope,c=[];return j(function(t,e){var r;if(\\\"function\\\"==typeof t)return l.call(this,null,t,0);if(\\\"function\\\"==typeof e)if(\\\"number\\\"==typeof t)for(r=0;r<t;++r)l.call(this,null,e,r);else{if(!Array.isArray(t))return l.call(this,t,e,0);for(r=0;r<t.length;++r)l.call(this,t[r],e,r)}else if(\\\"number\\\"==typeof t){if(0<t)return s.call(this,function(t){for(;c.length<t;)c.push(null);return c}(0|t),0|t)}else{if(!Array.isArray(t))return o.call(this,t);if(t.length)return s.call(this,t,t.length)}},{stats:t})}function l(t,e){var r=0;G.procs.poll();var n=e.color;n&&(v.clearColor(+n[0]||0,+n[1]||0,+n[2]||0,+n[3]||0),r|=16384),\\\"depth\\\"in e&&(v.clearDepth(+e.depth),r|=256),\\\"stencil\\\"in e&&(v.clearStencil(0|e.stencil),r|=1024),v.clear(r)}function c(t){return Z.push(t),r(),{cancel:function(){var e=N(Z,t);Z[e]=function t(){var e=N(Z,t);Z[e]=Z[Z.length-1],--Z.length,0>=Z.length&&n()}}}}function u(){var t=W.viewport,e=W.scissor_box;t[0]=t[1]=e[0]=e[1]=0,P.viewportWidth=P.framebufferWidth=P.drawingBufferWidth=t[2]=e[2]=v.drawingBufferWidth,P.viewportHeight=P.framebufferHeight=P.drawingBufferHeight=t[3]=e[3]=v.drawingBufferHeight}function h(){P.tick+=1,P.time=g(),u(),G.procs.poll()}function f(){u(),G.procs.refresh(),w&&w.update()}function g(){return(H()-k)/1e3}if(!(t=i(t)))return null;var v=t.gl,m=v.getContextAttributes();v.isContextLost();var y=function(t,e){function r(e){var r;e=e.toLowerCase();try{r=n[e]=t.getExtension(e)}catch(t){}return!!r}for(var n={},i=0;i<e.extensions.length;++i){var a=e.extensions[i];if(!r(a))return e.onDestroy(),e.onDone('\\\"'+a+'\\\" extension is not supported by the current WebGL context, try upgrading your system or a different browser'),null}return e.optionalExtensions.forEach(r),{extensions:n,restore:function(){Object.keys(n).forEach(function(t){if(n[t]&&!r(t))throw Error(\\\"(regl): error restoring extension \\\"+t)})}}}(v,t);if(!y)return null;var x=function(){var t={\\\"\\\":0},e=[\\\"\\\"];return{id:function(r){var n=t[r];return n||(n=t[r]=e.length,e.push(r),n)},str:function(t){return e[t]}}}(),b={bufferCount:0,elementsCount:0,framebufferCount:0,shaderCount:0,textureCount:0,cubeCount:0,renderbufferCount:0,maxTextureUnits:0},_=y.extensions,w=function(t,e){function r(){this.endQueryIndex=this.startQueryIndex=-1,this.sum=0,this.stats=null}function n(t,e,n){var i=o.pop()||new r;i.startQueryIndex=t,i.endQueryIndex=e,i.sum=0,i.stats=n,s.push(i)}if(!e.ext_disjoint_timer_query)return null;var i=[],a=[],o=[],s=[],l=[],c=[];return{beginQuery:function(t){var r=i.pop()||e.ext_disjoint_timer_query.createQueryEXT();e.ext_disjoint_timer_query.beginQueryEXT(35007,r),a.push(r),n(a.length-1,a.length,t)},endQuery:function(){e.ext_disjoint_timer_query.endQueryEXT(35007)},pushScopeStats:n,update:function(){var t,r;if(0!==(t=a.length)){c.length=Math.max(c.length,t+1),l.length=Math.max(l.length,t+1),l[0]=0;var n=c[0]=0;for(r=t=0;r<a.length;++r){var u=a[r];e.ext_disjoint_timer_query.getQueryObjectEXT(u,34919)?(n+=e.ext_disjoint_timer_query.getQueryObjectEXT(u,34918),i.push(u)):a[t++]=u,l[r+1]=n,c[r+1]=t}for(a.length=t,r=t=0;r<s.length;++r){var h=(n=s[r]).startQueryIndex;u=n.endQueryIndex,n.sum+=l[u]-l[h],h=c[h],(u=c[u])===h?(n.stats.gpuTime+=n.sum/1e6,o.push(n)):(n.startQueryIndex=h,n.endQueryIndex=u,s[t++]=n)}s.length=t}},getNumPendingQueries:function(){return a.length},clear:function(){i.push.apply(i,a);for(var t=0;t<i.length;t++)e.ext_disjoint_timer_query.deleteQueryEXT(i[t]);a.length=0,i.length=0},restore:function(){a.length=0,i.length=0}}}(0,_),k=H(),C=v.drawingBufferWidth,L=v.drawingBufferHeight,P={tick:0,time:0,viewportWidth:C,viewportHeight:L,framebufferWidth:C,framebufferHeight:L,drawingBufferWidth:C,drawingBufferHeight:L,pixelRatio:t.pixelRatio},O=Y(v,_),z=(C=function(t,e,r,n){for(t=r.maxAttributes,e=Array(t),r=0;r<t;++r)e[r]=new M;return{Record:M,scope:{},state:e}}(v,_,O),p(v,b,t,C)),I=d(v,_,z,b),D=S(v,x,b,t),R=T(v,_,O,function(){G.procs.poll()},P,b,t),F=mt(v,_,0,b,t),U=A(v,_,O,R,F,b),G=B(v,x,_,O,z,I,0,U,{},C,D,{elements:null,primitive:4,count:-1,offset:0,instances:-1},P,w,t),W=(x=E(v,U,G.procs.poll,P),G.next),X=v.canvas,Z=[],J=[],K=[],$=[t.onDestroy],Q=null;X&&(X.addEventListener(\\\"webglcontextlost\\\",a,!1),X.addEventListener(\\\"webglcontextrestored\\\",o,!1));var tt=U.setFBO=s({framebuffer:V.define.call(null,1,\\\"framebuffer\\\")});return f(),m=j(s,{clear:function(t){if(\\\"framebuffer\\\"in t)if(t.framebuffer&&\\\"framebufferCube\\\"===t.framebuffer_reglType)for(var e=0;6>e;++e)tt(j({framebuffer:t.framebuffer.faces[e]},t),l);else tt(t,l);else l(0,t)},prop:V.define.bind(null,1),context:V.define.bind(null,2),this:V.define.bind(null,3),draw:s({}),buffer:function(t){return z.create(t,34962,!1,!1)},elements:function(t){return I.create(t,!1)},texture:R.create2D,cube:R.createCube,renderbuffer:F.create,framebuffer:U.create,framebufferCube:U.createCube,attributes:m,frame:c,on:function(t,e){var r;switch(t){case\\\"frame\\\":return c(e);case\\\"lost\\\":r=J;break;case\\\"restore\\\":r=K;break;case\\\"destroy\\\":r=$}return r.push(e),{cancel:function(){for(var t=0;t<r.length;++t)if(r[t]===e){r[t]=r[r.length-1],r.pop();break}}}},limits:O,hasExtension:function(t){return 0<=O.extensions.indexOf(t.toLowerCase())},read:x,destroy:function(){Z.length=0,n(),X&&(X.removeEventListener(\\\"webglcontextlost\\\",a),X.removeEventListener(\\\"webglcontextrestored\\\",o)),D.clear(),U.clear(),F.clear(),R.clear(),I.clear(),z.clear(),w&&w.clear(),$.forEach(function(t){t()})},_gl:v,_refresh:f,poll:function(){h(),w&&w.update()},now:g,stats:b}),t.onDone(null,m),m}},\\\"object\\\"==typeof r&&\\\"undefined\\\"!=typeof e?e.exports=i():n.createREGL=i()},{}],503:[function(t,e,r){\\\"use strict\\\";var n,i=\\\"\\\";e.exports=function(t,e){if(\\\"string\\\"!=typeof t)throw new TypeError(\\\"expected a string\\\");if(1===e)return t;if(2===e)return t+t;var r=t.length*e;if(n!==t||\\\"undefined\\\"==typeof n)n=t,i=\\\"\\\";else if(i.length>=r)return i.substr(0,r);for(;r>i.length&&e>1;)1&e&&(i+=t),e>>=1,t+=t;return i=(i+=t).substr(0,r)}},{}],504:[function(t,e,r){(function(t){e.exports=t.performance&&t.performance.now?function(){return performance.now()}:Date.now||function(){return+new Date}}).call(this,\\\"undefined\\\"!=typeof global?global:\\\"undefined\\\"!=typeof self?self:\\\"undefined\\\"!=typeof window?window:{})},{}],505:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){for(var e=t.length,r=t[t.length-1],n=e,i=e-2;i>=0;--i){var a=r,o=t[i],s=(r=a+o)-a,l=o-s;l&&(t[--n]=r,r=l)}for(var c=0,i=n;i<e;++i){var a=t[i],o=r,s=(r=a+o)-a,l=o-s;l&&(t[c++]=l)}return t[c++]=r,t.length=c,t}},{}],506:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"two-product\\\"),i=t(\\\"robust-sum\\\"),a=t(\\\"robust-scale\\\"),o=t(\\\"robust-compress\\\"),s=6;function l(t,e){for(var r=new Array(t.length-1),n=1;n<t.length;++n)for(var i=r[n-1]=new Array(t.length-1),a=0,o=0;a<t.length;++a)a!==e&&(i[o++]=t[n][a]);return r}function c(t){if(2===t.length)return[\\\"sum(prod(\\\",t[0][0],\\\",\\\",t[1][1],\\\"),prod(-\\\",t[0][1],\\\",\\\",t[1][0],\\\"))\\\"].join(\\\"\\\");for(var e=[],r=0;r<t.length;++r)e.push([\\\"scale(\\\",c(l(t,r)),\\\",\\\",(n=r,1&n?\\\"-\\\":\\\"\\\"),t[0][r],\\\")\\\"].join(\\\"\\\"));return function t(e){if(1===e.length)return e[0];if(2===e.length)return[\\\"sum(\\\",e[0],\\\",\\\",e[1],\\\")\\\"].join(\\\"\\\");var r=e.length>>1;return[\\\"sum(\\\",t(e.slice(0,r)),\\\",\\\",t(e.slice(r)),\\\")\\\"].join(\\\"\\\")}(e);var n}function u(t){return new Function(\\\"sum\\\",\\\"scale\\\",\\\"prod\\\",\\\"compress\\\",[\\\"function robustDeterminant\\\",t,\\\"(m){return compress(\\\",c(function(t){for(var e=new Array(t),r=0;r<t;++r){e[r]=new Array(t);for(var n=0;n<t;++n)e[r][n]=[\\\"m[\\\",r,\\\"][\\\",n,\\\"]\\\"].join(\\\"\\\")}return e}(t)),\\\")};return robustDeterminant\\\",t].join(\\\"\\\"))(i,a,n,o)}var h=[function(){return[0]},function(t){return[t[0][0]]}];!function(){for(;h.length<s;)h.push(u(h.length));for(var t=[],r=[\\\"function robustDeterminant(m){switch(m.length){\\\"],n=0;n<s;++n)t.push(\\\"det\\\"+n),r.push(\\\"case \\\",n,\\\":return det\\\",n,\\\"(m);\\\");r.push(\\\"}var det=CACHE[m.length];if(!det)det=CACHE[m.length]=gen(m.length);return det(m);}return robustDeterminant\\\"),t.push(\\\"CACHE\\\",\\\"gen\\\",r.join(\\\"\\\"));var i=Function.apply(void 0,t);for(e.exports=i.apply(void 0,h.concat([h,u])),n=0;n<h.length;++n)e.exports[n]=h[n]}()},{\\\"robust-compress\\\":505,\\\"robust-scale\\\":512,\\\"robust-sum\\\":515,\\\"two-product\\\":543}],507:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"two-product\\\"),i=t(\\\"robust-sum\\\");e.exports=function(t,e){for(var r=n(t[0],e[0]),a=1;a<t.length;++a)r=i(r,n(t[a],e[a]));return r}},{\\\"robust-sum\\\":515,\\\"two-product\\\":543}],508:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"two-product\\\"),i=t(\\\"robust-sum\\\"),a=t(\\\"robust-subtract\\\"),o=t(\\\"robust-scale\\\"),s=6;function l(t,e){for(var r=new Array(t.length-1),n=1;n<t.length;++n)for(var i=r[n-1]=new Array(t.length-1),a=0,o=0;a<t.length;++a)a!==e&&(i[o++]=t[n][a]);return r}function c(t){if(1===t.length)return t[0];if(2===t.length)return[\\\"sum(\\\",t[0],\\\",\\\",t[1],\\\")\\\"].join(\\\"\\\");var e=t.length>>1;return[\\\"sum(\\\",c(t.slice(0,e)),\\\",\\\",c(t.slice(e)),\\\")\\\"].join(\\\"\\\")}function u(t,e){if(\\\"m\\\"===t.charAt(0)){if(\\\"w\\\"===e.charAt(0)){var r=t.split(\\\"[\\\");return[\\\"w\\\",e.substr(1),\\\"m\\\",r[0].substr(1)].join(\\\"\\\")}return[\\\"prod(\\\",t,\\\",\\\",e,\\\")\\\"].join(\\\"\\\")}return u(e,t)}function h(t){if(2===t.length)return[[\\\"diff(\\\",u(t[0][0],t[1][1]),\\\",\\\",u(t[1][0],t[0][1]),\\\")\\\"].join(\\\"\\\")];for(var e=[],r=0;r<t.length;++r)e.push([\\\"scale(\\\",c(h(l(t,r))),\\\",\\\",(n=r,!0&n?\\\"-\\\":\\\"\\\"),t[0][r],\\\")\\\"].join(\\\"\\\"));return e;var n}function f(t,e){for(var r=[],n=0;n<e-2;++n)r.push([\\\"prod(m\\\",t,\\\"[\\\",n,\\\"],m\\\",t,\\\"[\\\",n,\\\"])\\\"].join(\\\"\\\"));return c(r)}function p(t){for(var e=[],r=[],s=function(t){for(var e=new Array(t),r=0;r<t;++r){e[r]=new Array(t);for(var n=0;n<t;++n)e[r][n]=[\\\"m\\\",n,\\\"[\\\",t-r-2,\\\"]\\\"].join(\\\"\\\")}return e}(t),u=0;u<t;++u)s[0][u]=\\\"1\\\",s[t-1][u]=\\\"w\\\"+u;for(u=0;u<t;++u)0==(1&u)?e.push.apply(e,h(l(s,u))):r.push.apply(r,h(l(s,u)));var p=c(e),d=c(r),g=\\\"exactInSphere\\\"+t,v=[];for(u=0;u<t;++u)v.push(\\\"m\\\"+u);var m=[\\\"function \\\",g,\\\"(\\\",v.join(),\\\"){\\\"];for(u=0;u<t;++u){m.push(\\\"var w\\\",u,\\\"=\\\",f(u,t),\\\";\\\");for(var y=0;y<t;++y)y!==u&&m.push(\\\"var w\\\",u,\\\"m\\\",y,\\\"=scale(w\\\",u,\\\",m\\\",y,\\\"[0]);\\\")}return m.push(\\\"var p=\\\",p,\\\",n=\\\",d,\\\",d=diff(p,n);return d[d.length-1];}return \\\",g),new Function(\\\"sum\\\",\\\"diff\\\",\\\"prod\\\",\\\"scale\\\",m.join(\\\"\\\"))(i,a,n,o)}var d=[function(){return 0},function(){return 0},function(){return 0}];!function(){for(;d.length<=s;)d.push(p(d.length));for(var t=[],r=[\\\"slow\\\"],n=0;n<=s;++n)t.push(\\\"a\\\"+n),r.push(\\\"o\\\"+n);var i=[\\\"function testInSphere(\\\",t.join(),\\\"){switch(arguments.length){case 0:case 1:return 0;\\\"];for(n=2;n<=s;++n)i.push(\\\"case \\\",n,\\\":return o\\\",n,\\\"(\\\",t.slice(0,n).join(),\\\");\\\");i.push(\\\"}var s=new Array(arguments.length);for(var i=0;i<arguments.length;++i){s[i]=arguments[i]};return slow(s);}return testInSphere\\\"),r.push(i.join(\\\"\\\"));var a=Function.apply(void 0,r);for(e.exports=a.apply(void 0,[function(t){var e=d[t.length];return e||(e=d[t.length]=p(t.length)),e.apply(void 0,t)}].concat(d)),n=0;n<=s;++n)e.exports[n]=d[n]}()},{\\\"robust-scale\\\":512,\\\"robust-subtract\\\":514,\\\"robust-sum\\\":515,\\\"two-product\\\":543}],509:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"robust-determinant\\\"),i=6;function a(t){for(var e=\\\"robustLinearSolve\\\"+t+\\\"d\\\",r=[\\\"function \\\",e,\\\"(A,b){return [\\\"],i=0;i<t;++i){r.push(\\\"det([\\\");for(var a=0;a<t;++a){a>0&&r.push(\\\",\\\"),r.push(\\\"[\\\");for(var o=0;o<t;++o)o>0&&r.push(\\\",\\\"),o===i?r.push(\\\"+b[\\\",a,\\\"]\\\"):r.push(\\\"+A[\\\",a,\\\"][\\\",o,\\\"]\\\");r.push(\\\"]\\\")}r.push(\\\"]),\\\")}r.push(\\\"det(A)]}return \\\",e);var s=new Function(\\\"det\\\",r.join(\\\"\\\"));return s(t<6?n[t]:n)}var o=[function(){return[0]},function(t,e){return[[e[0]],[t[0][0]]]}];!function(){for(;o.length<i;)o.push(a(o.length));for(var t=[],r=[\\\"function dispatchLinearSolve(A,b){switch(A.length){\\\"],n=0;n<i;++n)t.push(\\\"s\\\"+n),r.push(\\\"case \\\",n,\\\":return s\\\",n,\\\"(A,b);\\\");r.push(\\\"}var s=CACHE[A.length];if(!s)s=CACHE[A.length]=g(A.length);return s(A,b)}return dispatchLinearSolve\\\"),t.push(\\\"CACHE\\\",\\\"g\\\",r.join(\\\"\\\"));var s=Function.apply(void 0,t);for(e.exports=s.apply(void 0,o.concat([o,a])),n=0;n<i;++n)e.exports[n]=o[n]}()},{\\\"robust-determinant\\\":506}],510:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"two-product\\\"),i=t(\\\"robust-sum\\\"),a=t(\\\"robust-scale\\\"),o=t(\\\"robust-subtract\\\"),s=5;function l(t,e){for(var r=new Array(t.length-1),n=1;n<t.length;++n)for(var i=r[n-1]=new Array(t.length-1),a=0,o=0;a<t.length;++a)a!==e&&(i[o++]=t[n][a]);return r}function c(t){if(1===t.length)return t[0];if(2===t.length)return[\\\"sum(\\\",t[0],\\\",\\\",t[1],\\\")\\\"].join(\\\"\\\");var e=t.length>>1;return[\\\"sum(\\\",c(t.slice(0,e)),\\\",\\\",c(t.slice(e)),\\\")\\\"].join(\\\"\\\")}function u(t){if(2===t.length)return[[\\\"sum(prod(\\\",t[0][0],\\\",\\\",t[1][1],\\\"),prod(-\\\",t[0][1],\\\",\\\",t[1][0],\\\"))\\\"].join(\\\"\\\")];for(var e=[],r=0;r<t.length;++r)e.push([\\\"scale(\\\",c(u(l(t,r))),\\\",\\\",(n=r,1&n?\\\"-\\\":\\\"\\\"),t[0][r],\\\")\\\"].join(\\\"\\\"));return e;var n}function h(t){for(var e=[],r=[],s=function(t){for(var e=new Array(t),r=0;r<t;++r){e[r]=new Array(t);for(var n=0;n<t;++n)e[r][n]=[\\\"m\\\",n,\\\"[\\\",t-r-1,\\\"]\\\"].join(\\\"\\\")}return e}(t),h=[],f=0;f<t;++f)0==(1&f)?e.push.apply(e,u(l(s,f))):r.push.apply(r,u(l(s,f))),h.push(\\\"m\\\"+f);var p=c(e),d=c(r),g=\\\"orientation\\\"+t+\\\"Exact\\\",v=[\\\"function \\\",g,\\\"(\\\",h.join(),\\\"){var p=\\\",p,\\\",n=\\\",d,\\\",d=sub(p,n);return d[d.length-1];};return \\\",g].join(\\\"\\\");return new Function(\\\"sum\\\",\\\"prod\\\",\\\"scale\\\",\\\"sub\\\",v)(i,n,a,o)}var f=h(3),p=h(4),d=[function(){return 0},function(){return 0},function(t,e){return e[0]-t[0]},function(t,e,r){var n,i=(t[1]-r[1])*(e[0]-r[0]),a=(t[0]-r[0])*(e[1]-r[1]),o=i-a;if(i>0){if(a<=0)return o;n=i+a}else{if(!(i<0))return o;if(a>=0)return o;n=-(i+a)}var s=3.3306690738754716e-16*n;return o>=s||o<=-s?o:f(t,e,r)},function(t,e,r,n){var i=t[0]-n[0],a=e[0]-n[0],o=r[0]-n[0],s=t[1]-n[1],l=e[1]-n[1],c=r[1]-n[1],u=t[2]-n[2],h=e[2]-n[2],f=r[2]-n[2],d=a*c,g=o*l,v=o*s,m=i*c,y=i*l,x=a*s,b=u*(d-g)+h*(v-m)+f*(y-x),_=7.771561172376103e-16*((Math.abs(d)+Math.abs(g))*Math.abs(u)+(Math.abs(v)+Math.abs(m))*Math.abs(h)+(Math.abs(y)+Math.abs(x))*Math.abs(f));return b>_||-b>_?b:p(t,e,r,n)}];!function(){for(;d.length<=s;)d.push(h(d.length));for(var t=[],r=[\\\"slow\\\"],n=0;n<=s;++n)t.push(\\\"a\\\"+n),r.push(\\\"o\\\"+n);var i=[\\\"function getOrientation(\\\",t.join(),\\\"){switch(arguments.length){case 0:case 1:return 0;\\\"];for(n=2;n<=s;++n)i.push(\\\"case \\\",n,\\\":return o\\\",n,\\\"(\\\",t.slice(0,n).join(),\\\");\\\");i.push(\\\"}var s=new Array(arguments.length);for(var i=0;i<arguments.length;++i){s[i]=arguments[i]};return slow(s);}return getOrientation\\\"),r.push(i.join(\\\"\\\"));var a=Function.apply(void 0,r);for(e.exports=a.apply(void 0,[function(t){var e=d[t.length];return e||(e=d[t.length]=h(t.length)),e.apply(void 0,t)}].concat(d)),n=0;n<=s;++n)e.exports[n]=d[n]}()},{\\\"robust-scale\\\":512,\\\"robust-subtract\\\":514,\\\"robust-sum\\\":515,\\\"two-product\\\":543}],511:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"robust-sum\\\"),i=t(\\\"robust-scale\\\");e.exports=function(t,e){if(1===t.length)return i(e,t[0]);if(1===e.length)return i(t,e[0]);if(0===t.length||0===e.length)return[0];var r=[0];if(t.length<e.length)for(var a=0;a<t.length;++a)r=n(r,i(e,t[a]));else for(var a=0;a<e.length;++a)r=n(r,i(t,e[a]));return r}},{\\\"robust-scale\\\":512,\\\"robust-sum\\\":515}],512:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"two-product\\\"),i=t(\\\"two-sum\\\");e.exports=function(t,e){var r=t.length;if(1===r){var a=n(t[0],e);return a[0]?a:[a[1]]}var o=new Array(2*r),s=[.1,.1],l=[.1,.1],c=0;n(t[0],e,s),s[0]&&(o[c++]=s[0]);for(var u=1;u<r;++u){n(t[u],e,l);var h=s[1];i(h,l[0],s),s[0]&&(o[c++]=s[0]);var f=l[1],p=s[1],d=f+p,g=d-f,v=p-g;s[1]=d,v&&(o[c++]=v)}s[1]&&(o[c++]=s[1]);0===c&&(o[c++]=0);return o.length=c,o}},{\\\"two-product\\\":543,\\\"two-sum\\\":544}],513:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,i){var a=n(t,r,i),o=n(e,r,i);if(a>0&&o>0||a<0&&o<0)return!1;var s=n(r,t,e),l=n(i,t,e);if(s>0&&l>0||s<0&&l<0)return!1;if(0===a&&0===o&&0===s&&0===l)return function(t,e,r,n){for(var i=0;i<2;++i){var a=t[i],o=e[i],s=Math.min(a,o),l=Math.max(a,o),c=r[i],u=n[i],h=Math.min(c,u),f=Math.max(c,u);if(f<s||l<h)return!1}return!0}(t,e,r,i);return!0};var n=t(\\\"robust-orientation\\\")[3]},{\\\"robust-orientation\\\":510}],514:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){var r=0|t.length,n=0|e.length;if(1===r&&1===n)return function(t,e){var r=t+e,n=r-t,i=t-(r-n)+(e-n);if(i)return[i,r];return[r]}(t[0],-e[0]);var i,a,o=new Array(r+n),s=0,l=0,c=0,u=Math.abs,h=t[l],f=u(h),p=-e[c],d=u(p);f<d?(a=h,(l+=1)<r&&(h=t[l],f=u(h))):(a=p,(c+=1)<n&&(p=-e[c],d=u(p)));l<r&&f<d||c>=n?(i=h,(l+=1)<r&&(h=t[l],f=u(h))):(i=p,(c+=1)<n&&(p=-e[c],d=u(p)));var g,v,m=i+a,y=m-i,x=a-y,b=x,_=m;for(;l<r&&c<n;)f<d?(i=h,(l+=1)<r&&(h=t[l],f=u(h))):(i=p,(c+=1)<n&&(p=-e[c],d=u(p))),(x=(a=b)-(y=(m=i+a)-i))&&(o[s++]=x),b=_-((g=_+m)-(v=g-_))+(m-v),_=g;for(;l<r;)(x=(a=b)-(y=(m=(i=h)+a)-i))&&(o[s++]=x),b=_-((g=_+m)-(v=g-_))+(m-v),_=g,(l+=1)<r&&(h=t[l]);for(;c<n;)(x=(a=b)-(y=(m=(i=p)+a)-i))&&(o[s++]=x),b=_-((g=_+m)-(v=g-_))+(m-v),_=g,(c+=1)<n&&(p=-e[c]);b&&(o[s++]=b);_&&(o[s++]=_);s||(o[s++]=0);return o.length=s,o}},{}],515:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){var r=0|t.length,n=0|e.length;if(1===r&&1===n)return function(t,e){var r=t+e,n=r-t,i=t-(r-n)+(e-n);if(i)return[i,r];return[r]}(t[0],e[0]);var i,a,o=new Array(r+n),s=0,l=0,c=0,u=Math.abs,h=t[l],f=u(h),p=e[c],d=u(p);f<d?(a=h,(l+=1)<r&&(h=t[l],f=u(h))):(a=p,(c+=1)<n&&(p=e[c],d=u(p)));l<r&&f<d||c>=n?(i=h,(l+=1)<r&&(h=t[l],f=u(h))):(i=p,(c+=1)<n&&(p=e[c],d=u(p)));var g,v,m=i+a,y=m-i,x=a-y,b=x,_=m;for(;l<r&&c<n;)f<d?(i=h,(l+=1)<r&&(h=t[l],f=u(h))):(i=p,(c+=1)<n&&(p=e[c],d=u(p))),(x=(a=b)-(y=(m=i+a)-i))&&(o[s++]=x),b=_-((g=_+m)-(v=g-_))+(m-v),_=g;for(;l<r;)(x=(a=b)-(y=(m=(i=h)+a)-i))&&(o[s++]=x),b=_-((g=_+m)-(v=g-_))+(m-v),_=g,(l+=1)<r&&(h=t[l]);for(;c<n;)(x=(a=b)-(y=(m=(i=p)+a)-i))&&(o[s++]=x),b=_-((g=_+m)-(v=g-_))+(m-v),_=g,(c+=1)<n&&(p=e[c]);b&&(o[s++]=b);_&&(o[s++]=_);s||(o[s++]=0);return o.length=s,o}},{}],516:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){return t<0?-1:t>0?1:0}},{}],517:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){return i(n(t))};var n=t(\\\"boundary-cells\\\"),i=t(\\\"reduce-simplicial-complex\\\")},{\\\"boundary-cells\\\":95,\\\"reduce-simplicial-complex\\\":489}],518:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,s){r=r||0,\\\"undefined\\\"==typeof s&&(s=function(t){for(var e=t.length,r=0,n=0;n<e;++n)r=0|Math.max(r,t[n].length);return r-1}(t));if(0===t.length||s<1)return{cells:[],vertexIds:[],vertexWeights:[]};var l=function(t,e){for(var r=t.length,n=i.mallocUint8(r),a=0;a<r;++a)n[a]=t[a]<e|0;return n}(e,+r),c=function(t,e){for(var r=t.length,o=e*(e+1)/2*r|0,s=i.mallocUint32(2*o),l=0,c=0;c<r;++c)for(var u=t[c],e=u.length,h=0;h<e;++h)for(var f=0;f<h;++f){var p=u[f],d=u[h];s[l++]=0|Math.min(p,d),s[l++]=0|Math.max(p,d)}a(n(s,[l/2|0,2]));for(var g=2,c=2;c<l;c+=2)s[c-2]===s[c]&&s[c-1]===s[c+1]||(s[g++]=s[c],s[g++]=s[c+1]);return n(s,[g/2|0,2])}(t,s),u=function(t,e,r,a){for(var o=t.data,s=t.shape[0],l=i.mallocDouble(s),c=0,u=0;u<s;++u){var h=o[2*u],f=o[2*u+1];if(r[h]!==r[f]){var p=e[h],d=e[f];o[2*c]=h,o[2*c+1]=f,l[c++]=(d-a)/(d-p)}}return t.shape[0]=c,n(l,[c])}(c,e,l,+r),h=function(t,e){var r=i.mallocInt32(2*e),n=t.shape[0],a=t.data;r[0]=0;for(var o=0,s=0;s<n;++s){var l=a[2*s];if(l!==o){for(r[2*o+1]=s;++o<l;)r[2*o]=s,r[2*o+1]=s;r[2*o]=s}}r[2*o+1]=n;for(;++o<e;)r[2*o]=r[2*o+1]=n;return r}(c,0|e.length),f=o(s)(t,c.data,h,l),p=function(t){for(var e=0|t.shape[0],r=t.data,n=new Array(e),i=0;i<e;++i)n[i]=[r[2*i],r[2*i+1]];return n}(c),d=[].slice.call(u.data,0,u.shape[0]);return i.free(l),i.free(c.data),i.free(u.data),i.free(h),{cells:f,vertexIds:p,vertexWeights:d}};var n=t(\\\"ndarray\\\"),i=t(\\\"typedarray-pool\\\"),a=t(\\\"ndarray-sort\\\"),o=t(\\\"./lib/codegen\\\")},{\\\"./lib/codegen\\\":519,ndarray:450,\\\"ndarray-sort\\\":448,\\\"typedarray-pool\\\":545}],519:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){var e=a[t];e||(e=a[t]=function(t){var e=0,r=new Array(t+1);r[0]=[[]];for(var a=1;a<=t;++a)for(var o=r[a]=i(a),s=0;s<o.length;++s)e=Math.max(e,o[a].length);var l=[\\\"function B(C,E,i,j){\\\",\\\"var a=Math.min(i,j)|0,b=Math.max(i,j)|0,l=C[2*a],h=C[2*a+1];\\\",\\\"while(l<h){\\\",\\\"var m=(l+h)>>1,v=E[2*m+1];\\\",\\\"if(v===b){return m}\\\",\\\"if(b<v){h=m}else{l=m+1}\\\",\\\"}\\\",\\\"return l;\\\",\\\"};\\\",\\\"function getContour\\\",t,\\\"d(F,E,C,S){\\\",\\\"var n=F.length,R=[];\\\",\\\"for(var i=0;i<n;++i){var c=F[i],l=c.length;\\\"];function c(t){if(!(t.length<=0)){l.push(\\\"R.push(\\\");for(var e=0;e<t.length;++e){var r=t[e];e>0&&l.push(\\\",\\\"),l.push(\\\"[\\\");for(var n=0;n<r.length;++n){var i=r[n];n>0&&l.push(\\\",\\\"),l.push(\\\"B(C,E,c[\\\",i[0],\\\"],c[\\\",i[1],\\\"])\\\")}l.push(\\\"]\\\")}l.push(\\\");\\\")}}for(var a=t+1;a>1;--a){a<t+1&&l.push(\\\"else \\\"),l.push(\\\"if(l===\\\",a,\\\"){\\\");for(var u=[],s=0;s<a;++s)u.push(\\\"(S[c[\\\"+s+\\\"]]<<\\\"+s+\\\")\\\");l.push(\\\"var M=\\\",u.join(\\\"+\\\"),\\\";if(M===0||M===\\\",(1<<a)-1,\\\"){continue}switch(M){\\\");for(var o=r[a-1],s=0;s<o.length;++s)l.push(\\\"case \\\",s,\\\":\\\"),c(o[s]),l.push(\\\"break;\\\");l.push(\\\"}}\\\")}return l.push(\\\"}return R;};return getContour\\\",t,\\\"d\\\"),new Function(\\\"pool\\\",l.join(\\\"\\\"))(n)}(t));return e};var n=t(\\\"typedarray-pool\\\"),i=t(\\\"marching-simplex-table\\\"),a={}},{\\\"marching-simplex-table\\\":427,\\\"typedarray-pool\\\":545}],520:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"bit-twiddle\\\"),i=t(\\\"union-find\\\");function a(t,e){var r=t.length,n=t.length-e.length,i=Math.min;if(n)return n;switch(r){case 0:return 0;case 1:return t[0]-e[0];case 2:return(s=t[0]+t[1]-e[0]-e[1])||i(t[0],t[1])-i(e[0],e[1]);case 3:var a=t[0]+t[1],o=e[0]+e[1];if(s=a+t[2]-(o+e[2]))return s;var s,l=i(t[0],t[1]),c=i(e[0],e[1]);return(s=i(l,t[2])-i(c,e[2]))||i(l+t[2],a)-i(c+e[2],o);default:var u=t.slice(0);u.sort();var h=e.slice(0);h.sort();for(var f=0;f<r;++f)if(n=u[f]-h[f])return n;return 0}}function o(t,e){return a(t[0],e[0])}function s(t,e){if(e){for(var r=t.length,n=new Array(r),i=0;i<r;++i)n[i]=[t[i],e[i]];n.sort(o);for(i=0;i<r;++i)t[i]=n[i][0],e[i]=n[i][1];return t}return t.sort(a),t}function l(t){if(0===t.length)return[];for(var e=1,r=t.length,n=1;n<r;++n){var i=t[n];if(a(i,t[n-1])){if(n===e){e++;continue}t[e++]=i}}return t.length=e,t}function c(t,e){for(var r=0,n=t.length-1,i=-1;r<=n;){var o=r+n>>1,s=a(t[o],e);s<=0?(0===s&&(i=o),r=o+1):s>0&&(n=o-1)}return i}function u(t,e){for(var r=new Array(t.length),i=0,o=r.length;i<o;++i)r[i]=[];for(var s=[],l=(i=0,e.length);i<l;++i)for(var u=e[i],h=u.length,f=1,p=1<<h;f<p;++f){s.length=n.popCount(f);for(var d=0,g=0;g<h;++g)f&1<<g&&(s[d++]=u[g]);var v=c(t,s);if(!(v<0))for(;r[v++].push(i),!(v>=t.length||0!==a(t[v],s)););}return r}function h(t,e){if(e<0)return[];for(var r=[],i=(1<<e+1)-1,a=0;a<t.length;++a)for(var o=t[a],l=i;l<1<<o.length;l=n.nextCombination(l)){for(var c=new Array(e+1),u=0,h=0;h<o.length;++h)l&1<<h&&(c[u++]=o[h]);r.push(c)}return s(r)}r.dimension=function(t){for(var e=0,r=Math.max,n=0,i=t.length;n<i;++n)e=r(e,t[n].length);return e-1},r.countVertices=function(t){for(var e=-1,r=Math.max,n=0,i=t.length;n<i;++n)for(var a=t[n],o=0,s=a.length;o<s;++o)e=r(e,a[o]);return e+1},r.cloneCells=function(t){for(var e=new Array(t.length),r=0,n=t.length;r<n;++r)e[r]=t[r].slice(0);return e},r.compareCells=a,r.normalize=s,r.unique=l,r.findCell=c,r.incidence=u,r.dual=function(t,e){if(!e)return u(l(h(t,0)),t);for(var r=new Array(e),n=0;n<e;++n)r[n]=[];n=0;for(var i=t.length;n<i;++n)for(var a=t[n],o=0,s=a.length;o<s;++o)r[a[o]].push(n);return r},r.explode=function(t){for(var e=[],r=0,n=t.length;r<n;++r)for(var i=t[r],a=0|i.length,o=1,l=1<<a;o<l;++o){for(var c=[],u=0;u<a;++u)o>>>u&1&&c.push(i[u]);e.push(c)}return s(e)},r.skeleton=h,r.boundary=function(t){for(var e=[],r=0,n=t.length;r<n;++r)for(var i=t[r],a=0,o=i.length;a<o;++a){for(var l=new Array(i.length-1),c=0,u=0;c<o;++c)c!==a&&(l[u++]=i[c]);e.push(l)}return s(e)},r.connectedComponents=function(t,e){return e?function(t,e){for(var r=new i(e),n=0;n<t.length;++n)for(var a=t[n],o=0;o<a.length;++o)for(var s=o+1;s<a.length;++s)r.link(a[o],a[s]);var l=[],c=r.ranks;for(n=0;n<c.length;++n)c[n]=-1;for(n=0;n<t.length;++n){var u=r.find(t[n][0]);c[u]<0?(c[u]=l.length,l.push([t[n].slice(0)])):l[c[u]].push(t[n].slice(0))}return l}(t,e):function(t){for(var e=l(s(h(t,0))),r=new i(e.length),n=0;n<t.length;++n)for(var a=t[n],o=0;o<a.length;++o)for(var u=c(e,[a[o]]),f=o+1;f<a.length;++f)r.link(u,c(e,[a[f]]));var p=[],d=r.ranks;for(n=0;n<d.length;++n)d[n]=-1;for(n=0;n<t.length;++n){var g=r.find(c(e,[t[n][0]]));d[g]<0?(d[g]=p.length,p.push([t[n].slice(0)])):p[d[g]].push(t[n].slice(0))}return p}(t)}},{\\\"bit-twiddle\\\":92,\\\"union-find\\\":546}],521:[function(t,e,r){arguments[4][92][0].apply(r,arguments)},{dup:92}],522:[function(t,e,r){arguments[4][520][0].apply(r,arguments)},{\\\"bit-twiddle\\\":521,dup:520,\\\"union-find\\\":523}],523:[function(t,e,r){\\\"use strict\\\";function n(t){this.roots=new Array(t),this.ranks=new Array(t);for(var e=0;e<t;++e)this.roots[e]=e,this.ranks[e]=0}e.exports=n,n.prototype.length=function(){return this.roots.length},n.prototype.makeSet=function(){var t=this.roots.length;return this.roots.push(t),this.ranks.push(0),t},n.prototype.find=function(t){for(var e=this.roots;e[t]!==t;){var r=e[t];e[t]=e[r],t=r}return t},n.prototype.link=function(t,e){var r=this.find(t),n=this.find(e);if(r!==n){var i=this.ranks,a=this.roots,o=i[r],s=i[n];o<s?a[r]=n:s<o?a[n]=r:(a[n]=r,++i[r])}}},{}],524:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r){for(var a=e.length,o=t.length,s=new Array(a),l=new Array(a),c=new Array(a),u=new Array(a),h=0;h<a;++h)s[h]=l[h]=-1,c[h]=1/0,u[h]=!1;for(var h=0;h<o;++h){var f=t[h];if(2!==f.length)throw new Error(\\\"Input must be a graph\\\");var p=f[1],d=f[0];-1!==l[d]?l[d]=-2:l[d]=p,-1!==s[p]?s[p]=-2:s[p]=d}function g(t){if(u[t])return 1/0;var r,i,a,o,c,h=s[t],f=l[t];return h<0||f<0?1/0:(r=e[t],i=e[h],a=e[f],o=Math.abs(n(r,i,a)),c=Math.sqrt(Math.pow(i[0]-a[0],2)+Math.pow(i[1]-a[1],2)),o/c)}function v(t,e){var r=T[t],n=T[e];T[t]=n,T[e]=r,A[r]=e,A[n]=t}function m(t){return c[T[t]]}function y(t){return 1&t?t-1>>1:(t>>1)-1}function x(t){for(var e=m(t);;){var r=e,n=2*t+1,i=2*(t+1),a=t;if(n<S){var o=m(n);o<r&&(a=n,r=o)}if(i<S){var s=m(i);s<r&&(a=i)}if(a===t)return t;v(t,a),t=a}}function b(t){for(var e=m(t);t>0;){var r=y(t);if(r>=0){var n=m(r);if(e<n){v(t,r),t=r;continue}}return t}}function _(){if(S>0){var t=T[0];return v(0,S-1),S-=1,x(0),t}return-1}function w(t,e){var r=T[t];return c[r]===e?t:(c[r]=-1/0,b(t),_(),c[r]=e,b((S+=1)-1))}function k(t){if(!u[t]){u[t]=!0;var e=s[t],r=l[t];s[r]>=0&&(s[r]=e),l[e]>=0&&(l[e]=r),A[e]>=0&&w(A[e],g(e)),A[r]>=0&&w(A[r],g(r))}}for(var T=[],A=new Array(a),h=0;h<a;++h){var M=c[h]=g(h);M<1/0?(A[h]=T.length,T.push(h)):A[h]=-1}for(var S=T.length,h=S>>1;h>=0;--h)x(h);for(;;){var E=_();if(E<0||c[E]>r)break;k(E)}for(var C=[],h=0;h<a;++h)u[h]||(A[h]=C.length,C.push(e[h].slice()));C.length;function L(t,e){if(t[e]<0)return e;var r=e,n=e;do{var i=t[n];if(!u[n]||i<0||i===n)break;if(i=t[n=i],!u[n]||i<0||i===n)break;n=i,r=t[r]}while(r!==n);for(var a=e;a!==n;a=t[a])t[a]=n;return n}var P=[];return t.forEach(function(t){var e=L(s,t[0]),r=L(l,t[1]);if(e>=0&&r>=0&&e!==r){var n=A[e],i=A[r];n!==i&&P.push([n,i])}}),i.unique(i.normalize(P)),{positions:C,edges:P}};var n=t(\\\"robust-orientation\\\"),i=t(\\\"simplicial-complex\\\")},{\\\"robust-orientation\\\":510,\\\"simplicial-complex\\\":522}],525:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){var r,a,o,s;if(e[0][0]<e[1][0])r=e[0],a=e[1];else{if(!(e[0][0]>e[1][0]))return i(e,t);r=e[1],a=e[0]}if(t[0][0]<t[1][0])o=t[0],s=t[1];else{if(!(t[0][0]>t[1][0]))return-i(t,e);o=t[1],s=t[0]}var l=n(r,a,s),c=n(r,a,o);if(l<0){if(c<=0)return l}else if(l>0){if(c>=0)return l}else if(c)return c;if(l=n(s,o,a),c=n(s,o,r),l<0){if(c<=0)return l}else if(l>0){if(c>=0)return l}else if(c)return c;return a[0]-s[0]};var n=t(\\\"robust-orientation\\\");function i(t,e){var r,i,a,o;if(e[0][0]<e[1][0])r=e[0],i=e[1];else{if(!(e[0][0]>e[1][0])){var s=Math.min(t[0][1],t[1][1]),l=Math.max(t[0][1],t[1][1]),c=Math.min(e[0][1],e[1][1]),u=Math.max(e[0][1],e[1][1]);return l<c?l-c:s>u?s-u:l-u}r=e[1],i=e[0]}t[0][1]<t[1][1]?(a=t[0],o=t[1]):(a=t[1],o=t[0]);var h=n(i,r,a);return h||((h=n(i,r,o))||o-i)}},{\\\"robust-orientation\\\":510}],526:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){for(var e=t.length,r=2*e,n=new Array(r),a=0;a<e;++a){var l=t[a],c=l[0][0]<l[1][0];n[2*a]=new h(l[0][0],l,c,a),n[2*a+1]=new h(l[1][0],l,!c,a)}n.sort(function(t,e){var r=t.x-e.x;return r||((r=t.create-e.create)||Math.min(t.segment[0][1],t.segment[1][1])-Math.min(e.segment[0][1],e.segment[1][1]))});for(var f=i(o),p=[],d=[],g=[],a=0;a<r;){for(var v=n[a].x,m=[];a<r;){var y=n[a];if(y.x!==v)break;a+=1,y.segment[0][0]===y.x&&y.segment[1][0]===y.x?y.create&&(y.segment[0][1]<y.segment[1][1]?(m.push(new u(y.segment[0][1],y.index,!0,!0)),m.push(new u(y.segment[1][1],y.index,!1,!1))):(m.push(new u(y.segment[1][1],y.index,!0,!1)),m.push(new u(y.segment[0][1],y.index,!1,!0)))):f=y.create?f.insert(y.segment,y.index):f.remove(y.segment)}p.push(f.root),d.push(v),g.push(m)}return new s(p,d,g)};var n=t(\\\"binary-search-bounds\\\"),i=t(\\\"functional-red-black-tree\\\"),a=t(\\\"robust-orientation\\\"),o=t(\\\"./lib/order-segments\\\");function s(t,e,r){this.slabs=t,this.coordinates=e,this.horizontal=r}function l(t,e){return t.y-e}function c(t,e){for(var r=null;t;){var n,i,o=t.key;o[0][0]<o[1][0]?(n=o[0],i=o[1]):(n=o[1],i=o[0]);var s=a(n,i,e);if(s<0)t=t.left;else if(s>0)if(e[0]!==o[1][0])r=t,t=t.right;else{if(l=c(t.right,e))return l;t=t.left}else{if(e[0]!==o[1][0])return t;var l;if(l=c(t.right,e))return l;t=t.left}}return r}function u(t,e,r,n){this.y=t,this.index=e,this.start=r,this.closed=n}function h(t,e,r,n){this.x=t,this.segment=e,this.create=r,this.index=n}s.prototype.castUp=function(t){var e=n.le(this.coordinates,t[0]);if(e<0)return-1;this.slabs[e];var r=c(this.slabs[e],t),i=-1;if(r&&(i=r.value),this.coordinates[e]===t[0]){var s=null;if(r&&(s=r.key),e>0){var u=c(this.slabs[e-1],t);u&&(s?o(u.key,s)>0&&(s=u.key,i=u.value):(i=u.value,s=u.key))}var h=this.horizontal[e];if(h.length>0){var f=n.ge(h,t[1],l);if(f<h.length){var p=h[f];if(t[1]===p.y){if(p.closed)return p.index;for(;f<h.length-1&&h[f+1].y===t[1];)if((p=h[f+=1]).closed)return p.index;if(p.y===t[1]&&!p.start){if((f+=1)>=h.length)return i;p=h[f]}}if(p.start)if(s){var d=a(s[0],s[1],[t[0],p.y]);s[0][0]>s[1][0]&&(d=-d),d>0&&(i=p.index)}else i=p.index;else p.y!==t[1]&&(i=p.index)}}}return i}},{\\\"./lib/order-segments\\\":525,\\\"binary-search-bounds\\\":91,\\\"functional-red-black-tree\\\":230,\\\"robust-orientation\\\":510}],527:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"robust-dot-product\\\"),i=t(\\\"robust-sum\\\");function a(t,e){var r=i(n(t,e),[e[e.length-1]]);return r[r.length-1]}function o(t,e,r,n){var i=-e/(n-e);i<0?i=0:i>1&&(i=1);for(var a=1-i,o=t.length,s=new Array(o),l=0;l<o;++l)s[l]=i*t[l]+a*r[l];return s}e.exports=function(t,e){for(var r=[],n=[],i=a(t[t.length-1],e),s=t[t.length-1],l=t[0],c=0;c<t.length;++c,s=l){var u=a(l=t[c],e);if(i<0&&u>0||i>0&&u<0){var h=o(s,u,l,i);r.push(h),n.push(h.slice())}u<0?n.push(l.slice()):u>0?r.push(l.slice()):(r.push(l.slice()),n.push(l.slice())),i=u}return{positive:r,negative:n}},e.exports.positive=function(t,e){for(var r=[],n=a(t[t.length-1],e),i=t[t.length-1],s=t[0],l=0;l<t.length;++l,i=s){var c=a(s=t[l],e);(n<0&&c>0||n>0&&c<0)&&r.push(o(i,c,s,n)),c>=0&&r.push(s.slice()),n=c}return r},e.exports.negative=function(t,e){for(var r=[],n=a(t[t.length-1],e),i=t[t.length-1],s=t[0],l=0;l<t.length;++l,i=s){var c=a(s=t[l],e);(n<0&&c>0||n>0&&c<0)&&r.push(o(i,c,s,n)),c<=0&&r.push(s.slice()),n=c}return r}},{\\\"robust-dot-product\\\":507,\\\"robust-sum\\\":515}],528:[function(t,e,r){!function(){\\\"use strict\\\";var t={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\\\\x25]+/,modulo:/^\\\\x25{2}/,placeholder:/^\\\\x25(?:([1-9]\\\\d*)\\\\$|\\\\(([^)]+)\\\\))?(\\\\+)?(0|'[^$])?(-)?(\\\\d+)?(?:\\\\.(\\\\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\\\\d]*)/i,key_access:/^\\\\.([a-z_][a-z_\\\\d]*)/i,index_access:/^\\\\[(\\\\d+)\\\\]/,sign:/^[+-]/};function e(r){return function(r,n){var i,a,o,s,l,c,u,h,f,p=1,d=r.length,g=\\\"\\\";for(a=0;a<d;a++)if(\\\"string\\\"==typeof r[a])g+=r[a];else if(\\\"object\\\"==typeof r[a]){if((s=r[a]).keys)for(i=n[p],o=0;o<s.keys.length;o++){if(null==i)throw new Error(e('[sprintf] Cannot access property \\\"%s\\\" of undefined value \\\"%s\\\"',s.keys[o],s.keys[o-1]));i=i[s.keys[o]]}else i=s.param_no?n[s.param_no]:n[p++];if(t.not_type.test(s.type)&&t.not_primitive.test(s.type)&&i instanceof Function&&(i=i()),t.numeric_arg.test(s.type)&&\\\"number\\\"!=typeof i&&isNaN(i))throw new TypeError(e(\\\"[sprintf] expecting number but found %T\\\",i));switch(t.number.test(s.type)&&(h=i>=0),s.type){case\\\"b\\\":i=parseInt(i,10).toString(2);break;case\\\"c\\\":i=String.fromCharCode(parseInt(i,10));break;case\\\"d\\\":case\\\"i\\\":i=parseInt(i,10);break;case\\\"j\\\":i=JSON.stringify(i,null,s.width?parseInt(s.width):0);break;case\\\"e\\\":i=s.precision?parseFloat(i).toExponential(s.precision):parseFloat(i).toExponential();break;case\\\"f\\\":i=s.precision?parseFloat(i).toFixed(s.precision):parseFloat(i);break;case\\\"g\\\":i=s.precision?String(Number(i.toPrecision(s.precision))):parseFloat(i);break;case\\\"o\\\":i=(parseInt(i,10)>>>0).toString(8);break;case\\\"s\\\":i=String(i),i=s.precision?i.substring(0,s.precision):i;break;case\\\"t\\\":i=String(!!i),i=s.precision?i.substring(0,s.precision):i;break;case\\\"T\\\":i=Object.prototype.toString.call(i).slice(8,-1).toLowerCase(),i=s.precision?i.substring(0,s.precision):i;break;case\\\"u\\\":i=parseInt(i,10)>>>0;break;case\\\"v\\\":i=i.valueOf(),i=s.precision?i.substring(0,s.precision):i;break;case\\\"x\\\":i=(parseInt(i,10)>>>0).toString(16);break;case\\\"X\\\":i=(parseInt(i,10)>>>0).toString(16).toUpperCase()}t.json.test(s.type)?g+=i:(!t.number.test(s.type)||h&&!s.sign?f=\\\"\\\":(f=h?\\\"+\\\":\\\"-\\\",i=i.toString().replace(t.sign,\\\"\\\")),c=s.pad_char?\\\"0\\\"===s.pad_char?\\\"0\\\":s.pad_char.charAt(1):\\\" \\\",u=s.width-(f+i).length,l=s.width&&u>0?c.repeat(u):\\\"\\\",g+=s.align?f+i+l:\\\"0\\\"===c?f+l+i:l+f+i)}return g}(function(e){if(i[e])return i[e];var r,n=e,a=[],o=0;for(;n;){if(null!==(r=t.text.exec(n)))a.push(r[0]);else if(null!==(r=t.modulo.exec(n)))a.push(\\\"%\\\");else{if(null===(r=t.placeholder.exec(n)))throw new SyntaxError(\\\"[sprintf] unexpected placeholder\\\");if(r[2]){o|=1;var s=[],l=r[2],c=[];if(null===(c=t.key.exec(l)))throw new SyntaxError(\\\"[sprintf] failed to parse named argument key\\\");for(s.push(c[1]);\\\"\\\"!==(l=l.substring(c[0].length));)if(null!==(c=t.key_access.exec(l)))s.push(c[1]);else{if(null===(c=t.index_access.exec(l)))throw new SyntaxError(\\\"[sprintf] failed to parse named argument key\\\");s.push(c[1])}r[2]=s}else o|=2;if(3===o)throw new Error(\\\"[sprintf] mixing positional and named placeholders is not (yet) supported\\\");a.push({placeholder:r[0],param_no:r[1],keys:r[2],sign:r[3],pad_char:r[4],align:r[5],width:r[6],precision:r[7],type:r[8]})}n=n.substring(r[0].length)}return i[e]=a}(r),arguments)}function n(t,r){return e.apply(null,[t].concat(r||[]))}var i=Object.create(null);\\\"undefined\\\"!=typeof r&&(r.sprintf=e,r.vsprintf=n),\\\"undefined\\\"!=typeof window&&(window.sprintf=e,window.vsprintf=n)}()},{}],529:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"parenthesis\\\");e.exports=function(t,e,r){if(null==t)throw Error(\\\"First argument should be a string\\\");if(null==e)throw Error(\\\"Separator should be a string or a RegExp\\\");r?(\\\"string\\\"==typeof r||Array.isArray(r))&&(r={ignore:r}):r={},null==r.escape&&(r.escape=!0),null==r.ignore?r.ignore=[\\\"[]\\\",\\\"()\\\",\\\"{}\\\",\\\"<>\\\",'\\\"\\\"',\\\"''\\\",\\\"``\\\",\\\"\\\\u201c\\\\u201d\\\",\\\"\\\\xab\\\\xbb\\\"]:(\\\"string\\\"==typeof r.ignore&&(r.ignore=[r.ignore]),r.ignore=r.ignore.map(function(t){return 1===t.length&&(t+=t),t}));var i=n.parse(t,{flat:!0,brackets:r.ignore}),a=i[0].split(e);if(r.escape){for(var o=[],s=0;s<a.length;s++){var l=a[s],c=a[s+1];\\\"\\\\\\\\\\\"===l[l.length-1]&&\\\"\\\\\\\\\\\"!==l[l.length-2]?(o.push(l+e+c),s++):o.push(l)}a=o}for(s=0;s<a.length;s++)i[0]=a[s],a[s]=n.stringify(i,{flat:!0});return a}},{parenthesis:458}],530:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){for(var e=t.length,r=new Array(e),n=new Array(e),i=new Array(e),a=new Array(e),o=new Array(e),s=new Array(e),l=0;l<e;++l)r[l]=-1,n[l]=0,i[l]=!1,a[l]=0,o[l]=-1,s[l]=[];var c,u=0,h=[],f=[];function p(e){var l=[e],c=[e];for(r[e]=n[e]=u,i[e]=!0,u+=1;c.length>0;){e=c[c.length-1];var p=t[e];if(a[e]<p.length){for(var d=a[e];d<p.length;++d){var g=p[d];if(r[g]<0){r[g]=n[g]=u,i[g]=!0,u+=1,l.push(g),c.push(g);break}i[g]&&(n[e]=0|Math.min(n[e],n[g])),o[g]>=0&&s[e].push(o[g])}a[e]=d}else{if(n[e]===r[e]){for(var v=[],m=[],y=0,d=l.length-1;d>=0;--d){var x=l[d];if(i[x]=!1,v.push(x),m.push(s[x]),y+=s[x].length,o[x]=h.length,x===e){l.length=d;break}}h.push(v);for(var b=new Array(y),d=0;d<m.length;d++)for(var _=0;_<m[d].length;_++)b[--y]=m[d][_];f.push(b)}c.pop()}}}for(var l=0;l<e;++l)r[l]<0&&p(l);for(var l=0;l<f.length;l++){var d=f[l];if(0!==d.length){d.sort(function(t,e){return t-e}),c=[d[0]];for(var g=1;g<d.length;g++)d[g]!==d[g-1]&&c.push(d[g]);f[l]=c}}return{components:h,adjacencyList:f}}},{}],531:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){if(t.dimension<=0)return{positions:[],cells:[]};if(1===t.dimension)return function(t,e){for(var r=a(t,e),n=r.length,i=new Array(n),o=new Array(n),s=0;s<n;++s)i[s]=[r[s]],o[s]=[s];return{positions:i,cells:o}}(t,e);var r=t.order.join()+\\\"-\\\"+t.dtype,s=o[r],e=+e||0;s||(s=o[r]=function(t,e){var r=t.length,a=[\\\"'use strict';\\\"],o=\\\"surfaceNets\\\"+t.join(\\\"_\\\")+\\\"d\\\"+e;a.push(\\\"var contour=genContour({\\\",\\\"order:[\\\",t.join(),\\\"],\\\",\\\"scalarArguments: 3,\\\",\\\"phase:function phaseFunc(p,a,b,c) { return (p > c)|0 },\\\"),\\\"generic\\\"===e&&a.push(\\\"getters:[0],\\\");for(var s=[],l=[],c=0;c<r;++c)s.push(\\\"d\\\"+c),l.push(\\\"d\\\"+c);for(var c=0;c<1<<r;++c)s.push(\\\"v\\\"+c),l.push(\\\"v\\\"+c);for(var c=0;c<1<<r;++c)s.push(\\\"p\\\"+c),l.push(\\\"p\\\"+c);s.push(\\\"a\\\",\\\"b\\\",\\\"c\\\"),l.push(\\\"a\\\",\\\"c\\\"),a.push(\\\"vertex:function vertexFunc(\\\",s.join(),\\\"){\\\");for(var u=[],c=0;c<1<<r;++c)u.push(\\\"(p\\\"+c+\\\"<<\\\"+c+\\\")\\\");a.push(\\\"var m=(\\\",u.join(\\\"+\\\"),\\\")|0;if(m===0||m===\\\",(1<<(1<<r))-1,\\\"){return}\\\");var h=[],f=[];1<<(1<<r)<=128?(a.push(\\\"switch(m){\\\"),f=a):a.push(\\\"switch(m>>>7){\\\");for(var c=0;c<1<<(1<<r);++c){if(1<<(1<<r)>128&&c%128==0){h.length>0&&f.push(\\\"}}\\\");var p=\\\"vExtra\\\"+h.length;a.push(\\\"case \\\",c>>>7,\\\":\\\",p,\\\"(m&0x7f,\\\",l.join(),\\\");break;\\\"),f=[\\\"function \\\",p,\\\"(m,\\\",l.join(),\\\"){switch(m){\\\"],h.push(f)}f.push(\\\"case \\\",127&c,\\\":\\\");for(var d=new Array(r),g=new Array(r),v=new Array(r),m=new Array(r),y=0,x=0;x<r;++x)d[x]=[],g[x]=[],v[x]=0,m[x]=0;for(var x=0;x<1<<r;++x)for(var b=0;b<r;++b){var _=x^1<<b;if(!(_>x)&&!(c&1<<_)!=!(c&1<<x)){var w=1;c&1<<_?g[b].push(\\\"v\\\"+_+\\\"-v\\\"+x):(g[b].push(\\\"v\\\"+x+\\\"-v\\\"+_),w=-w),w<0?(d[b].push(\\\"-v\\\"+x+\\\"-v\\\"+_),v[b]+=2):(d[b].push(\\\"v\\\"+x+\\\"+v\\\"+_),v[b]-=2),y+=1;for(var k=0;k<r;++k)k!==b&&(_&1<<k?m[k]+=1:m[k]-=1)}}for(var T=[],b=0;b<r;++b)if(0===d[b].length)T.push(\\\"d\\\"+b+\\\"-0.5\\\");else{var A=\\\"\\\";v[b]<0?A=v[b]+\\\"*c\\\":v[b]>0&&(A=\\\"+\\\"+v[b]+\\\"*c\\\");var M=d[b].length/y*.5,S=.5+m[b]/y*.5;T.push(\\\"d\\\"+b+\\\"-\\\"+S+\\\"-\\\"+M+\\\"*(\\\"+d[b].join(\\\"+\\\")+A+\\\")/(\\\"+g[b].join(\\\"+\\\")+\\\")\\\")}f.push(\\\"a.push([\\\",T.join(),\\\"]);\\\",\\\"break;\\\")}a.push(\\\"}},\\\"),h.length>0&&f.push(\\\"}}\\\");for(var E=[],c=0;c<1<<r-1;++c)E.push(\\\"v\\\"+c);E.push(\\\"c0\\\",\\\"c1\\\",\\\"p0\\\",\\\"p1\\\",\\\"a\\\",\\\"b\\\",\\\"c\\\"),a.push(\\\"cell:function cellFunc(\\\",E.join(),\\\"){\\\");var C=i(r-1);a.push(\\\"if(p0){b.push(\\\",C.map(function(t){return\\\"[\\\"+t.map(function(t){return\\\"v\\\"+t})+\\\"]\\\"}).join(),\\\")}else{b.push(\\\",C.map(function(t){var e=t.slice();return e.reverse(),\\\"[\\\"+e.map(function(t){return\\\"v\\\"+t})+\\\"]\\\"}).join(),\\\")}}});function \\\",o,\\\"(array,level){var verts=[],cells=[];contour(array,verts,cells,level);return {positions:verts,cells:cells};} return \\\",o,\\\";\\\");for(var c=0;c<h.length;++c)a.push(h[c].join(\\\"\\\"));return new Function(\\\"genContour\\\",a.join(\\\"\\\"))(n)}(t.order,t.dtype));return s(t,e)};var n=t(\\\"ndarray-extract-contour\\\"),i=t(\\\"triangulate-hypercube\\\"),a=t(\\\"zero-crossings\\\");var o={}},{\\\"ndarray-extract-contour\\\":439,\\\"triangulate-hypercube\\\":541,\\\"zero-crossings\\\":574}],532:[function(t,e,r){\\\"use strict\\\";Object.defineProperty(r,\\\"__esModule\\\",{value:!0});var n=function(){return function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var r=[],n=!0,i=!1,a=void 0;try{for(var o,s=t[Symbol.iterator]();!(n=(o=s.next()).done)&&(r.push(o.value),!e||r.length!==e);n=!0);}catch(t){i=!0,a=t}finally{try{!n&&s.return&&s.return()}finally{if(i)throw a}}return r}(t,e);throw new TypeError(\\\"Invalid attempt to destructure non-iterable instance\\\")}}(),i=2*Math.PI,a=function(t,e,r,n,i,a,o){var s=t.x,l=t.y;return{x:n*(s*=e)-i*(l*=r)+a,y:i*s+n*l+o}},o=function(t,e){var r=.551915024494*(e<0?-1:1),n=Math.cos(t),i=Math.sin(t),a=Math.cos(t+e),o=Math.sin(t+e);return[{x:n-i*r,y:i+n*r},{x:a+o*r,y:o-a*r},{x:a,y:o}]},s=function(t,e,r,n){var i=t*n-e*r<0?-1:1,a=(t*r+e*n)/(Math.sqrt(t*t+e*e)*Math.sqrt(t*t+e*e));return a>1&&(a=1),a<-1&&(a=-1),i*Math.acos(a)};r.default=function(t){var e=t.px,r=t.py,l=t.cx,c=t.cy,u=t.rx,h=t.ry,f=t.xAxisRotation,p=void 0===f?0:f,d=t.largeArcFlag,g=void 0===d?0:d,v=t.sweepFlag,m=void 0===v?0:v,y=[];if(0===u||0===h)return[];var x=Math.sin(p*i/360),b=Math.cos(p*i/360),_=b*(e-l)/2+x*(r-c)/2,w=-x*(e-l)/2+b*(r-c)/2;if(0===_&&0===w)return[];u=Math.abs(u),h=Math.abs(h);var k=Math.pow(_,2)/Math.pow(u,2)+Math.pow(w,2)/Math.pow(h,2);k>1&&(u*=Math.sqrt(k),h*=Math.sqrt(k));var T=function(t,e,r,n,a,o,l,c,u,h,f,p){var d=Math.pow(a,2),g=Math.pow(o,2),v=Math.pow(f,2),m=Math.pow(p,2),y=d*g-d*m-g*v;y<0&&(y=0),y/=d*m+g*v;var x=(y=Math.sqrt(y)*(l===c?-1:1))*a/o*p,b=y*-o/a*f,_=h*x-u*b+(t+r)/2,w=u*x+h*b+(e+n)/2,k=(f-x)/a,T=(p-b)/o,A=(-f-x)/a,M=(-p-b)/o,S=s(1,0,k,T),E=s(k,T,A,M);return 0===c&&E>0&&(E-=i),1===c&&E<0&&(E+=i),[_,w,S,E]}(e,r,l,c,u,h,g,m,x,b,_,w),A=n(T,4),M=A[0],S=A[1],E=A[2],C=A[3],L=Math.abs(C)/(i/4);Math.abs(1-L)<1e-7&&(L=1);var P=Math.max(Math.ceil(L),1);C/=P;for(var O=0;O<P;O++)y.push(o(E,C)),E+=C;return y.map(function(t){var e=a(t[0],u,h,b,x,M,S),r=e.x,n=e.y,i=a(t[1],u,h,b,x,M,S),o=i.x,s=i.y,l=a(t[2],u,h,b,x,M,S);return{x1:r,y1:n,x2:o,y2:s,x:l.x,y:l.y}})},e.exports=r.default},{}],533:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"parse-svg-path\\\"),i=t(\\\"abs-svg-path\\\"),a=t(\\\"normalize-svg-path\\\"),o=t(\\\"is-svg-path\\\"),s=t(\\\"assert\\\");e.exports=function(t){Array.isArray(t)&&1===t.length&&\\\"string\\\"==typeof t[0]&&(t=t[0]);\\\"string\\\"==typeof t&&(s(o(t),\\\"String is not an SVG path.\\\"),t=n(t));if(s(Array.isArray(t),\\\"Argument should be a string or an array of path segments.\\\"),t=i(t),!(t=a(t)).length)return[0,0,0,0];for(var e=[1/0,1/0,-1/0,-1/0],r=0,l=t.length;r<l;r++)for(var c=t[r].slice(1),u=0;u<c.length;u+=2)c[u+0]<e[0]&&(e[0]=c[u+0]),c[u+1]<e[1]&&(e[1]=c[u+1]),c[u+0]>e[2]&&(e[2]=c[u+0]),c[u+1]>e[3]&&(e[3]=c[u+1]);return e}},{\\\"abs-svg-path\\\":60,assert:68,\\\"is-svg-path\\\":424,\\\"normalize-svg-path\\\":534,\\\"parse-svg-path\\\":460}],534:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){for(var e,r=[],o=0,s=0,l=0,c=0,u=null,h=null,f=0,p=0,d=0,g=t.length;d<g;d++){var v=t[d],m=v[0];switch(m){case\\\"M\\\":l=v[1],c=v[2];break;case\\\"A\\\":var y=n({px:f,py:p,cx:v[6],cy:v[7],rx:v[1],ry:v[2],xAxisRotation:v[3],largeArcFlag:v[4],sweepFlag:v[5]});if(!y.length)continue;for(var x,b=0;b<y.length;b++)x=y[b],v=[\\\"C\\\",x.x1,x.y1,x.x2,x.y2,x.x,x.y],b<y.length-1&&r.push(v);break;case\\\"S\\\":var _=f,w=p;\\\"C\\\"!=e&&\\\"S\\\"!=e||(_+=_-o,w+=w-s),v=[\\\"C\\\",_,w,v[1],v[2],v[3],v[4]];break;case\\\"T\\\":\\\"Q\\\"==e||\\\"T\\\"==e?(u=2*f-u,h=2*p-h):(u=f,h=p),v=a(f,p,u,h,v[1],v[2]);break;case\\\"Q\\\":u=v[1],h=v[2],v=a(f,p,v[1],v[2],v[3],v[4]);break;case\\\"L\\\":v=i(f,p,v[1],v[2]);break;case\\\"H\\\":v=i(f,p,v[1],p);break;case\\\"V\\\":v=i(f,p,f,v[1]);break;case\\\"Z\\\":v=i(f,p,l,c)}e=m,f=v[v.length-2],p=v[v.length-1],v.length>4?(o=v[v.length-4],s=v[v.length-3]):(o=f,s=p),r.push(v)}return r};var n=t(\\\"svg-arc-to-cubic-bezier\\\");function i(t,e,r,n){return[\\\"C\\\",t,e,r,n,r,n]}function a(t,e,r,n,i,a){return[\\\"C\\\",t/3+2/3*r,e/3+2/3*n,i/3+2/3*r,a/3+2/3*n,i,a]}},{\\\"svg-arc-to-cubic-bezier\\\":532}],535:[function(t,e,r){\\\"use strict\\\";var n,i=t(\\\"svg-path-bounds\\\"),a=t(\\\"parse-svg-path\\\"),o=t(\\\"draw-svg-path\\\"),s=t(\\\"is-svg-path\\\"),l=t(\\\"bitmap-sdf\\\"),c=document.createElement(\\\"canvas\\\"),u=c.getContext(\\\"2d\\\");e.exports=function(t,e){if(!s(t))throw Error(\\\"Argument should be valid svg path string\\\");e||(e={});var r,h;e.shape?(r=e.shape[0],h=e.shape[1]):(r=c.width=e.w||e.width||200,h=c.height=e.h||e.height||200);var f=Math.min(r,h),p=e.stroke||0,d=e.viewbox||e.viewBox||i(t),g=[r/(d[2]-d[0]),h/(d[3]-d[1])],v=Math.min(g[0]||0,g[1]||0)/2;u.fillStyle=\\\"black\\\",u.fillRect(0,0,r,h),u.fillStyle=\\\"white\\\",p&&(\\\"number\\\"!=typeof p&&(p=1),u.strokeStyle=p>0?\\\"white\\\":\\\"black\\\",u.lineWidth=Math.abs(p));if(u.translate(.5*r,.5*h),u.scale(v,v),function(){if(null!=n)return n;var t=document.createElement(\\\"canvas\\\").getContext(\\\"2d\\\");if(t.canvas.width=t.canvas.height=1,!window.Path2D)return n=!1;var e=new Path2D(\\\"M0,0h1v1h-1v-1Z\\\");t.fillStyle=\\\"black\\\",t.fill(e);var r=t.getImageData(0,0,1,1);return n=r&&r.data&&255===r.data[3]}()){var m=new Path2D(t);u.fill(m),p&&u.stroke(m)}else{var y=a(t);o(u,y),u.fill(),p&&u.stroke()}return u.setTransform(1,0,0,1,0,0),l(u,{cutoff:null!=e.cutoff?e.cutoff:.5,radius:null!=e.radius?e.radius:.5*f})}},{\\\"bitmap-sdf\\\":93,\\\"draw-svg-path\\\":168,\\\"is-svg-path\\\":424,\\\"parse-svg-path\\\":460,\\\"svg-path-bounds\\\":533}],536:[function(t,e,r){(function(r){\\\"use strict\\\";e.exports=function t(e,r,i){var i=i||{};var o=a[e];o||(o=a[e]={\\\" \\\":{data:new Float32Array(0),shape:.2}});var s=o[r];if(!s)if(r.length<=1||!/\\\\d/.test(r))s=o[r]=function(t){for(var e=t.cells,r=t.positions,n=new Float32Array(6*e.length),i=0,a=0,o=0;o<e.length;++o)for(var s=e[o],l=0;l<3;++l){var c=r[s[l]];n[i++]=c[0],n[i++]=c[1]+1.4,a=Math.max(c[0],a)}return{data:n,shape:a}}(n(r,{triangles:!0,font:e,textAlign:i.textAlign||\\\"left\\\",textBaseline:\\\"alphabetic\\\",styletags:{breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0}}));else{for(var l=r.split(/(\\\\d|\\\\s)/),c=new Array(l.length),u=0,h=0,f=0;f<l.length;++f)c[f]=t(e,l[f]),u+=c[f].data.length,h+=c[f].shape,f>0&&(h+=.02);for(var p=new Float32Array(u),d=0,g=-.5*h,f=0;f<c.length;++f){for(var v=c[f].data,m=0;m<v.length;m+=2)p[d++]=v[m]+g,p[d++]=v[m+1];g+=c[f].shape+.02}s=o[r]={data:p,shape:h}}return s};var n=t(\\\"vectorize-text\\\"),i=window||r.global||{},a=i.__TEXT_CACHE||{};i.__TEXT_CACHE={}}).call(this,t(\\\"_process\\\"))},{_process:482,\\\"vectorize-text\\\":550}],537:[function(t,e,r){!function(t){var r=/^\\\\s+/,n=/\\\\s+$/,i=0,a=t.round,o=t.min,s=t.max,l=t.random;function c(e,l){if(l=l||{},(e=e||\\\"\\\")instanceof c)return e;if(!(this instanceof c))return new c(e,l);var u=function(e){var i={r:0,g:0,b:0},a=1,l=null,c=null,u=null,h=!1,f=!1;\\\"string\\\"==typeof e&&(e=function(t){t=t.replace(r,\\\"\\\").replace(n,\\\"\\\").toLowerCase();var e,i=!1;if(S[t])t=S[t],i=!0;else if(\\\"transparent\\\"==t)return{r:0,g:0,b:0,a:0,format:\\\"name\\\"};if(e=j.rgb.exec(t))return{r:e[1],g:e[2],b:e[3]};if(e=j.rgba.exec(t))return{r:e[1],g:e[2],b:e[3],a:e[4]};if(e=j.hsl.exec(t))return{h:e[1],s:e[2],l:e[3]};if(e=j.hsla.exec(t))return{h:e[1],s:e[2],l:e[3],a:e[4]};if(e=j.hsv.exec(t))return{h:e[1],s:e[2],v:e[3]};if(e=j.hsva.exec(t))return{h:e[1],s:e[2],v:e[3],a:e[4]};if(e=j.hex8.exec(t))return{r:O(e[1]),g:O(e[2]),b:O(e[3]),a:R(e[4]),format:i?\\\"name\\\":\\\"hex8\\\"};if(e=j.hex6.exec(t))return{r:O(e[1]),g:O(e[2]),b:O(e[3]),format:i?\\\"name\\\":\\\"hex\\\"};if(e=j.hex4.exec(t))return{r:O(e[1]+\\\"\\\"+e[1]),g:O(e[2]+\\\"\\\"+e[2]),b:O(e[3]+\\\"\\\"+e[3]),a:R(e[4]+\\\"\\\"+e[4]),format:i?\\\"name\\\":\\\"hex8\\\"};if(e=j.hex3.exec(t))return{r:O(e[1]+\\\"\\\"+e[1]),g:O(e[2]+\\\"\\\"+e[2]),b:O(e[3]+\\\"\\\"+e[3]),format:i?\\\"name\\\":\\\"hex\\\"};return!1}(e));\\\"object\\\"==typeof e&&(U(e.r)&&U(e.g)&&U(e.b)?(p=e.r,d=e.g,g=e.b,i={r:255*L(p,255),g:255*L(d,255),b:255*L(g,255)},h=!0,f=\\\"%\\\"===String(e.r).substr(-1)?\\\"prgb\\\":\\\"rgb\\\"):U(e.h)&&U(e.s)&&U(e.v)?(l=I(e.s),c=I(e.v),i=function(e,r,n){e=6*L(e,360),r=L(r,100),n=L(n,100);var i=t.floor(e),a=e-i,o=n*(1-r),s=n*(1-a*r),l=n*(1-(1-a)*r),c=i%6;return{r:255*[n,s,o,o,l,n][c],g:255*[l,n,n,s,o,o][c],b:255*[o,o,l,n,n,s][c]}}(e.h,l,c),h=!0,f=\\\"hsv\\\"):U(e.h)&&U(e.s)&&U(e.l)&&(l=I(e.s),u=I(e.l),i=function(t,e,r){var n,i,a;function o(t,e,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t}if(t=L(t,360),e=L(e,100),r=L(r,100),0===e)n=i=a=r;else{var s=r<.5?r*(1+e):r+e-r*e,l=2*r-s;n=o(l,s,t+1/3),i=o(l,s,t),a=o(l,s,t-1/3)}return{r:255*n,g:255*i,b:255*a}}(e.h,l,u),h=!0,f=\\\"hsl\\\"),e.hasOwnProperty(\\\"a\\\")&&(a=e.a));var p,d,g;return a=C(a),{ok:h,format:e.format||f,r:o(255,s(i.r,0)),g:o(255,s(i.g,0)),b:o(255,s(i.b,0)),a:a}}(e);this._originalInput=e,this._r=u.r,this._g=u.g,this._b=u.b,this._a=u.a,this._roundA=a(100*this._a)/100,this._format=l.format||u.format,this._gradientType=l.gradientType,this._r<1&&(this._r=a(this._r)),this._g<1&&(this._g=a(this._g)),this._b<1&&(this._b=a(this._b)),this._ok=u.ok,this._tc_id=i++}function u(t,e,r){t=L(t,255),e=L(e,255),r=L(r,255);var n,i,a=s(t,e,r),l=o(t,e,r),c=(a+l)/2;if(a==l)n=i=0;else{var u=a-l;switch(i=c>.5?u/(2-a-l):u/(a+l),a){case t:n=(e-r)/u+(e<r?6:0);break;case e:n=(r-t)/u+2;break;case r:n=(t-e)/u+4}n/=6}return{h:n,s:i,l:c}}function h(t,e,r){t=L(t,255),e=L(e,255),r=L(r,255);var n,i,a=s(t,e,r),l=o(t,e,r),c=a,u=a-l;if(i=0===a?0:u/a,a==l)n=0;else{switch(a){case t:n=(e-r)/u+(e<r?6:0);break;case e:n=(r-t)/u+2;break;case r:n=(t-e)/u+4}n/=6}return{h:n,s:i,v:c}}function f(t,e,r,n){var i=[z(a(t).toString(16)),z(a(e).toString(16)),z(a(r).toString(16))];return n&&i[0].charAt(0)==i[0].charAt(1)&&i[1].charAt(0)==i[1].charAt(1)&&i[2].charAt(0)==i[2].charAt(1)?i[0].charAt(0)+i[1].charAt(0)+i[2].charAt(0):i.join(\\\"\\\")}function p(t,e,r,n){return[z(D(n)),z(a(t).toString(16)),z(a(e).toString(16)),z(a(r).toString(16))].join(\\\"\\\")}function d(t,e){e=0===e?0:e||10;var r=c(t).toHsl();return r.s-=e/100,r.s=P(r.s),c(r)}function g(t,e){e=0===e?0:e||10;var r=c(t).toHsl();return r.s+=e/100,r.s=P(r.s),c(r)}function v(t){return c(t).desaturate(100)}function m(t,e){e=0===e?0:e||10;var r=c(t).toHsl();return r.l+=e/100,r.l=P(r.l),c(r)}function y(t,e){e=0===e?0:e||10;var r=c(t).toRgb();return r.r=s(0,o(255,r.r-a(-e/100*255))),r.g=s(0,o(255,r.g-a(-e/100*255))),r.b=s(0,o(255,r.b-a(-e/100*255))),c(r)}function x(t,e){e=0===e?0:e||10;var r=c(t).toHsl();return r.l-=e/100,r.l=P(r.l),c(r)}function b(t,e){var r=c(t).toHsl(),n=(r.h+e)%360;return r.h=n<0?360+n:n,c(r)}function _(t){var e=c(t).toHsl();return e.h=(e.h+180)%360,c(e)}function w(t){var e=c(t).toHsl(),r=e.h;return[c(t),c({h:(r+120)%360,s:e.s,l:e.l}),c({h:(r+240)%360,s:e.s,l:e.l})]}function k(t){var e=c(t).toHsl(),r=e.h;return[c(t),c({h:(r+90)%360,s:e.s,l:e.l}),c({h:(r+180)%360,s:e.s,l:e.l}),c({h:(r+270)%360,s:e.s,l:e.l})]}function T(t){var e=c(t).toHsl(),r=e.h;return[c(t),c({h:(r+72)%360,s:e.s,l:e.l}),c({h:(r+216)%360,s:e.s,l:e.l})]}function A(t,e,r){e=e||6,r=r||30;var n=c(t).toHsl(),i=360/r,a=[c(t)];for(n.h=(n.h-(i*e>>1)+720)%360;--e;)n.h=(n.h+i)%360,a.push(c(n));return a}function M(t,e){e=e||6;for(var r=c(t).toHsv(),n=r.h,i=r.s,a=r.v,o=[],s=1/e;e--;)o.push(c({h:n,s:i,v:a})),a=(a+s)%1;return o}c.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},getLuminance:function(){var e,r,n,i=this.toRgb();return e=i.r/255,r=i.g/255,n=i.b/255,.2126*(e<=.03928?e/12.92:t.pow((e+.055)/1.055,2.4))+.7152*(r<=.03928?r/12.92:t.pow((r+.055)/1.055,2.4))+.0722*(n<=.03928?n/12.92:t.pow((n+.055)/1.055,2.4))},setAlpha:function(t){return this._a=C(t),this._roundA=a(100*this._a)/100,this},toHsv:function(){var t=h(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=h(this._r,this._g,this._b),e=a(360*t.h),r=a(100*t.s),n=a(100*t.v);return 1==this._a?\\\"hsv(\\\"+e+\\\", \\\"+r+\\\"%, \\\"+n+\\\"%)\\\":\\\"hsva(\\\"+e+\\\", \\\"+r+\\\"%, \\\"+n+\\\"%, \\\"+this._roundA+\\\")\\\"},toHsl:function(){var t=u(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=u(this._r,this._g,this._b),e=a(360*t.h),r=a(100*t.s),n=a(100*t.l);return 1==this._a?\\\"hsl(\\\"+e+\\\", \\\"+r+\\\"%, \\\"+n+\\\"%)\\\":\\\"hsla(\\\"+e+\\\", \\\"+r+\\\"%, \\\"+n+\\\"%, \\\"+this._roundA+\\\")\\\"},toHex:function(t){return f(this._r,this._g,this._b,t)},toHexString:function(t){return\\\"#\\\"+this.toHex(t)},toHex8:function(t){return function(t,e,r,n,i){var o=[z(a(t).toString(16)),z(a(e).toString(16)),z(a(r).toString(16)),z(D(n))];if(i&&o[0].charAt(0)==o[0].charAt(1)&&o[1].charAt(0)==o[1].charAt(1)&&o[2].charAt(0)==o[2].charAt(1)&&o[3].charAt(0)==o[3].charAt(1))return o[0].charAt(0)+o[1].charAt(0)+o[2].charAt(0)+o[3].charAt(0);return o.join(\\\"\\\")}(this._r,this._g,this._b,this._a,t)},toHex8String:function(t){return\\\"#\\\"+this.toHex8(t)},toRgb:function(){return{r:a(this._r),g:a(this._g),b:a(this._b),a:this._a}},toRgbString:function(){return 1==this._a?\\\"rgb(\\\"+a(this._r)+\\\", \\\"+a(this._g)+\\\", \\\"+a(this._b)+\\\")\\\":\\\"rgba(\\\"+a(this._r)+\\\", \\\"+a(this._g)+\\\", \\\"+a(this._b)+\\\", \\\"+this._roundA+\\\")\\\"},toPercentageRgb:function(){return{r:a(100*L(this._r,255))+\\\"%\\\",g:a(100*L(this._g,255))+\\\"%\\\",b:a(100*L(this._b,255))+\\\"%\\\",a:this._a}},toPercentageRgbString:function(){return 1==this._a?\\\"rgb(\\\"+a(100*L(this._r,255))+\\\"%, \\\"+a(100*L(this._g,255))+\\\"%, \\\"+a(100*L(this._b,255))+\\\"%)\\\":\\\"rgba(\\\"+a(100*L(this._r,255))+\\\"%, \\\"+a(100*L(this._g,255))+\\\"%, \\\"+a(100*L(this._b,255))+\\\"%, \\\"+this._roundA+\\\")\\\"},toName:function(){return 0===this._a?\\\"transparent\\\":!(this._a<1)&&(E[f(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e=\\\"#\\\"+p(this._r,this._g,this._b,this._a),r=e,n=this._gradientType?\\\"GradientType = 1, \\\":\\\"\\\";if(t){var i=c(t);r=\\\"#\\\"+p(i._r,i._g,i._b,i._a)}return\\\"progid:DXImageTransform.Microsoft.gradient(\\\"+n+\\\"startColorstr=\\\"+e+\\\",endColorstr=\\\"+r+\\\")\\\"},toString:function(t){var e=!!t;t=t||this._format;var r=!1,n=this._a<1&&this._a>=0;return e||!n||\\\"hex\\\"!==t&&\\\"hex6\\\"!==t&&\\\"hex3\\\"!==t&&\\\"hex4\\\"!==t&&\\\"hex8\\\"!==t&&\\\"name\\\"!==t?(\\\"rgb\\\"===t&&(r=this.toRgbString()),\\\"prgb\\\"===t&&(r=this.toPercentageRgbString()),\\\"hex\\\"!==t&&\\\"hex6\\\"!==t||(r=this.toHexString()),\\\"hex3\\\"===t&&(r=this.toHexString(!0)),\\\"hex4\\\"===t&&(r=this.toHex8String(!0)),\\\"hex8\\\"===t&&(r=this.toHex8String()),\\\"name\\\"===t&&(r=this.toName()),\\\"hsl\\\"===t&&(r=this.toHslString()),\\\"hsv\\\"===t&&(r=this.toHsvString()),r||this.toHexString()):\\\"name\\\"===t&&0===this._a?this.toName():this.toRgbString()},clone:function(){return c(this.toString())},_applyModification:function(t,e){var r=t.apply(null,[this].concat([].slice.call(e)));return this._r=r._r,this._g=r._g,this._b=r._b,this.setAlpha(r._a),this},lighten:function(){return this._applyModification(m,arguments)},brighten:function(){return this._applyModification(y,arguments)},darken:function(){return this._applyModification(x,arguments)},desaturate:function(){return this._applyModification(d,arguments)},saturate:function(){return this._applyModification(g,arguments)},greyscale:function(){return this._applyModification(v,arguments)},spin:function(){return this._applyModification(b,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(A,arguments)},complement:function(){return this._applyCombination(_,arguments)},monochromatic:function(){return this._applyCombination(M,arguments)},splitcomplement:function(){return this._applyCombination(T,arguments)},triad:function(){return this._applyCombination(w,arguments)},tetrad:function(){return this._applyCombination(k,arguments)}},c.fromRatio=function(t,e){if(\\\"object\\\"==typeof t){var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]=\\\"a\\\"===n?t[n]:I(t[n]));t=r}return c(t,e)},c.equals=function(t,e){return!(!t||!e)&&c(t).toRgbString()==c(e).toRgbString()},c.random=function(){return c.fromRatio({r:l(),g:l(),b:l()})},c.mix=function(t,e,r){r=0===r?0:r||50;var n=c(t).toRgb(),i=c(e).toRgb(),a=r/100;return c({r:(i.r-n.r)*a+n.r,g:(i.g-n.g)*a+n.g,b:(i.b-n.b)*a+n.b,a:(i.a-n.a)*a+n.a})},c.readability=function(e,r){var n=c(e),i=c(r);return(t.max(n.getLuminance(),i.getLuminance())+.05)/(t.min(n.getLuminance(),i.getLuminance())+.05)},c.isReadable=function(t,e,r){var n,i,a=c.readability(t,e);switch(i=!1,(n=function(t){var e,r;e=((t=t||{level:\\\"AA\\\",size:\\\"small\\\"}).level||\\\"AA\\\").toUpperCase(),r=(t.size||\\\"small\\\").toLowerCase(),\\\"AA\\\"!==e&&\\\"AAA\\\"!==e&&(e=\\\"AA\\\");\\\"small\\\"!==r&&\\\"large\\\"!==r&&(r=\\\"small\\\");return{level:e,size:r}}(r)).level+n.size){case\\\"AAsmall\\\":case\\\"AAAlarge\\\":i=a>=4.5;break;case\\\"AAlarge\\\":i=a>=3;break;case\\\"AAAsmall\\\":i=a>=7}return i},c.mostReadable=function(t,e,r){var n,i,a,o,s=null,l=0;i=(r=r||{}).includeFallbackColors,a=r.level,o=r.size;for(var u=0;u<e.length;u++)(n=c.readability(t,e[u]))>l&&(l=n,s=c(e[u]));return c.isReadable(t,s,{level:a,size:o})||!i?s:(r.includeFallbackColors=!1,c.mostReadable(t,[\\\"#fff\\\",\\\"#000\\\"],r))};var S=c.names={aliceblue:\\\"f0f8ff\\\",antiquewhite:\\\"faebd7\\\",aqua:\\\"0ff\\\",aquamarine:\\\"7fffd4\\\",azure:\\\"f0ffff\\\",beige:\\\"f5f5dc\\\",bisque:\\\"ffe4c4\\\",black:\\\"000\\\",blanchedalmond:\\\"ffebcd\\\",blue:\\\"00f\\\",blueviolet:\\\"8a2be2\\\",brown:\\\"a52a2a\\\",burlywood:\\\"deb887\\\",burntsienna:\\\"ea7e5d\\\",cadetblue:\\\"5f9ea0\\\",chartreuse:\\\"7fff00\\\",chocolate:\\\"d2691e\\\",coral:\\\"ff7f50\\\",cornflowerblue:\\\"6495ed\\\",cornsilk:\\\"fff8dc\\\",crimson:\\\"dc143c\\\",cyan:\\\"0ff\\\",darkblue:\\\"00008b\\\",darkcyan:\\\"008b8b\\\",darkgoldenrod:\\\"b8860b\\\",darkgray:\\\"a9a9a9\\\",darkgreen:\\\"006400\\\",darkgrey:\\\"a9a9a9\\\",darkkhaki:\\\"bdb76b\\\",darkmagenta:\\\"8b008b\\\",darkolivegreen:\\\"556b2f\\\",darkorange:\\\"ff8c00\\\",darkorchid:\\\"9932cc\\\",darkred:\\\"8b0000\\\",darksalmon:\\\"e9967a\\\",darkseagreen:\\\"8fbc8f\\\",darkslateblue:\\\"483d8b\\\",darkslategray:\\\"2f4f4f\\\",darkslategrey:\\\"2f4f4f\\\",darkturquoise:\\\"00ced1\\\",darkviolet:\\\"9400d3\\\",deeppink:\\\"ff1493\\\",deepskyblue:\\\"00bfff\\\",dimgray:\\\"696969\\\",dimgrey:\\\"696969\\\",dodgerblue:\\\"1e90ff\\\",firebrick:\\\"b22222\\\",floralwhite:\\\"fffaf0\\\",forestgreen:\\\"228b22\\\",fuchsia:\\\"f0f\\\",gainsboro:\\\"dcdcdc\\\",ghostwhite:\\\"f8f8ff\\\",gold:\\\"ffd700\\\",goldenrod:\\\"daa520\\\",gray:\\\"808080\\\",green:\\\"008000\\\",greenyellow:\\\"adff2f\\\",grey:\\\"808080\\\",honeydew:\\\"f0fff0\\\",hotpink:\\\"ff69b4\\\",indianred:\\\"cd5c5c\\\",indigo:\\\"4b0082\\\",ivory:\\\"fffff0\\\",khaki:\\\"f0e68c\\\",lavender:\\\"e6e6fa\\\",lavenderblush:\\\"fff0f5\\\",lawngreen:\\\"7cfc00\\\",lemonchiffon:\\\"fffacd\\\",lightblue:\\\"add8e6\\\",lightcoral:\\\"f08080\\\",lightcyan:\\\"e0ffff\\\",lightgoldenrodyellow:\\\"fafad2\\\",lightgray:\\\"d3d3d3\\\",lightgreen:\\\"90ee90\\\",lightgrey:\\\"d3d3d3\\\",lightpink:\\\"ffb6c1\\\",lightsalmon:\\\"ffa07a\\\",lightseagreen:\\\"20b2aa\\\",lightskyblue:\\\"87cefa\\\",lightslategray:\\\"789\\\",lightslategrey:\\\"789\\\",lightsteelblue:\\\"b0c4de\\\",lightyellow:\\\"ffffe0\\\",lime:\\\"0f0\\\",limegreen:\\\"32cd32\\\",linen:\\\"faf0e6\\\",magenta:\\\"f0f\\\",maroon:\\\"800000\\\",mediumaquamarine:\\\"66cdaa\\\",mediumblue:\\\"0000cd\\\",mediumorchid:\\\"ba55d3\\\",mediumpurple:\\\"9370db\\\",mediumseagreen:\\\"3cb371\\\",mediumslateblue:\\\"7b68ee\\\",mediumspringgreen:\\\"00fa9a\\\",mediumturquoise:\\\"48d1cc\\\",mediumvioletred:\\\"c71585\\\",midnightblue:\\\"191970\\\",mintcream:\\\"f5fffa\\\",mistyrose:\\\"ffe4e1\\\",moccasin:\\\"ffe4b5\\\",navajowhite:\\\"ffdead\\\",navy:\\\"000080\\\",oldlace:\\\"fdf5e6\\\",olive:\\\"808000\\\",olivedrab:\\\"6b8e23\\\",orange:\\\"ffa500\\\",orangered:\\\"ff4500\\\",orchid:\\\"da70d6\\\",palegoldenrod:\\\"eee8aa\\\",palegreen:\\\"98fb98\\\",paleturquoise:\\\"afeeee\\\",palevioletred:\\\"db7093\\\",papayawhip:\\\"ffefd5\\\",peachpuff:\\\"ffdab9\\\",peru:\\\"cd853f\\\",pink:\\\"ffc0cb\\\",plum:\\\"dda0dd\\\",powderblue:\\\"b0e0e6\\\",purple:\\\"800080\\\",rebeccapurple:\\\"663399\\\",red:\\\"f00\\\",rosybrown:\\\"bc8f8f\\\",royalblue:\\\"4169e1\\\",saddlebrown:\\\"8b4513\\\",salmon:\\\"fa8072\\\",sandybrown:\\\"f4a460\\\",seagreen:\\\"2e8b57\\\",seashell:\\\"fff5ee\\\",sienna:\\\"a0522d\\\",silver:\\\"c0c0c0\\\",skyblue:\\\"87ceeb\\\",slateblue:\\\"6a5acd\\\",slategray:\\\"708090\\\",slategrey:\\\"708090\\\",snow:\\\"fffafa\\\",springgreen:\\\"00ff7f\\\",steelblue:\\\"4682b4\\\",tan:\\\"d2b48c\\\",teal:\\\"008080\\\",thistle:\\\"d8bfd8\\\",tomato:\\\"ff6347\\\",turquoise:\\\"40e0d0\\\",violet:\\\"ee82ee\\\",wheat:\\\"f5deb3\\\",white:\\\"fff\\\",whitesmoke:\\\"f5f5f5\\\",yellow:\\\"ff0\\\",yellowgreen:\\\"9acd32\\\"},E=c.hexNames=function(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[t[r]]=r);return e}(S);function C(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function L(e,r){(function(t){return\\\"string\\\"==typeof t&&-1!=t.indexOf(\\\".\\\")&&1===parseFloat(t)})(e)&&(e=\\\"100%\\\");var n=function(t){return\\\"string\\\"==typeof t&&-1!=t.indexOf(\\\"%\\\")}(e);return e=o(r,s(0,parseFloat(e))),n&&(e=parseInt(e*r,10)/100),t.abs(e-r)<1e-6?1:e%r/parseFloat(r)}function P(t){return o(1,s(0,t))}function O(t){return parseInt(t,16)}function z(t){return 1==t.length?\\\"0\\\"+t:\\\"\\\"+t}function I(t){return t<=1&&(t=100*t+\\\"%\\\"),t}function D(e){return t.round(255*parseFloat(e)).toString(16)}function R(t){return O(t)/255}var F,B,N,j=(B=\\\"[\\\\\\\\s|\\\\\\\\(]+(\\\"+(F=\\\"(?:[-\\\\\\\\+]?\\\\\\\\d*\\\\\\\\.\\\\\\\\d+%?)|(?:[-\\\\\\\\+]?\\\\\\\\d+%?)\\\")+\\\")[,|\\\\\\\\s]+(\\\"+F+\\\")[,|\\\\\\\\s]+(\\\"+F+\\\")\\\\\\\\s*\\\\\\\\)?\\\",N=\\\"[\\\\\\\\s|\\\\\\\\(]+(\\\"+F+\\\")[,|\\\\\\\\s]+(\\\"+F+\\\")[,|\\\\\\\\s]+(\\\"+F+\\\")[,|\\\\\\\\s]+(\\\"+F+\\\")\\\\\\\\s*\\\\\\\\)?\\\",{CSS_UNIT:new RegExp(F),rgb:new RegExp(\\\"rgb\\\"+B),rgba:new RegExp(\\\"rgba\\\"+N),hsl:new RegExp(\\\"hsl\\\"+B),hsla:new RegExp(\\\"hsla\\\"+N),hsv:new RegExp(\\\"hsv\\\"+B),hsva:new RegExp(\\\"hsva\\\"+N),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function U(t){return!!j.CSS_UNIT.exec(t)}\\\"undefined\\\"!=typeof e&&e.exports?e.exports=c:window.tinycolor=c}(Math)},{}],538:[function(t,e,r){\\\"use strict\\\";e.exports=i,e.exports.float32=e.exports.float=i,e.exports.fract32=e.exports.fract=function(t){if(t.length){for(var e=i(t),r=0,n=e.length;r<n;r++)e[r]=t[r]-e[r];return e}return i(t-i(t))};var n=new Float32Array(1);function i(t){if(t.length){if(t instanceof Float32Array)return t;var e=new Float32Array(t);return e.set(t),e}return n[0]=t,n[0]}},{}],539:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"parse-unit\\\");e.exports=o;var i=96;function a(t,e){var r=n(getComputedStyle(t).getPropertyValue(e));return r[0]*o(r[1],t)}function o(t,e){switch(e=e||document.body,t=(t||\\\"px\\\").trim().toLowerCase(),e!==window&&e!==document||(e=document.body),t){case\\\"%\\\":return e.clientHeight/100;case\\\"ch\\\":case\\\"ex\\\":return function(t,e){var r=document.createElement(\\\"div\\\");r.style[\\\"font-size\\\"]=\\\"128\\\"+t,e.appendChild(r);var n=a(r,\\\"font-size\\\")/128;return e.removeChild(r),n}(t,e);case\\\"em\\\":return a(e,\\\"font-size\\\");case\\\"rem\\\":return a(document.body,\\\"font-size\\\");case\\\"vw\\\":return window.innerWidth/100;case\\\"vh\\\":return window.innerHeight/100;case\\\"vmin\\\":return Math.min(window.innerWidth,window.innerHeight)/100;case\\\"vmax\\\":return Math.max(window.innerWidth,window.innerHeight)/100;case\\\"in\\\":return i;case\\\"cm\\\":return i/2.54;case\\\"mm\\\":return i/25.4;case\\\"pt\\\":return i/72;case\\\"pc\\\":return i/6}return 1}},{\\\"parse-unit\\\":461}],540:[function(t,e,r){var n;n=this,function(t){\\\"use strict\\\";var e=function(t){return t},r=function(t){if(null==(r=t.transform))return e;var r,n,i,a=r.scale[0],o=r.scale[1],s=r.translate[0],l=r.translate[1];return function(t,e){return e||(n=i=0),t[0]=(n+=t[0])*a+s,t[1]=(i+=t[1])*o+l,t}},n=function(t){var e=t.bbox;function n(t){l[0]=t[0],l[1]=t[1],s(l),l[0]<c&&(c=l[0]),l[0]>h&&(h=l[0]),l[1]<u&&(u=l[1]),l[1]>f&&(f=l[1])}function i(t){switch(t.type){case\\\"GeometryCollection\\\":t.geometries.forEach(i);break;case\\\"Point\\\":n(t.coordinates);break;case\\\"MultiPoint\\\":t.coordinates.forEach(n)}}if(!e){var a,o,s=r(t),l=new Array(2),c=1/0,u=c,h=-c,f=-c;for(o in t.arcs.forEach(function(t){for(var e=-1,r=t.length;++e<r;)a=t[e],l[0]=a[0],l[1]=a[1],s(l,e),l[0]<c&&(c=l[0]),l[0]>h&&(h=l[0]),l[1]<u&&(u=l[1]),l[1]>f&&(f=l[1])}),t.objects)i(t.objects[o]);e=t.bbox=[c,u,h,f]}return e},i=function(t,e){for(var r,n=t.length,i=n-e;i<--n;)r=t[i],t[i++]=t[n],t[n]=r};function a(t,e){var r=e.id,n=e.bbox,i=null==e.properties?{}:e.properties,a=o(t,e);return null==r&&null==n?{type:\\\"Feature\\\",properties:i,geometry:a}:null==n?{type:\\\"Feature\\\",id:r,properties:i,geometry:a}:{type:\\\"Feature\\\",id:r,bbox:n,properties:i,geometry:a}}function o(t,e){var n=r(t),a=t.arcs;function o(t,e){e.length&&e.pop();for(var r=a[t<0?~t:t],o=0,s=r.length;o<s;++o)e.push(n(r[o].slice(),o));t<0&&i(e,s)}function s(t){return n(t.slice())}function l(t){for(var e=[],r=0,n=t.length;r<n;++r)o(t[r],e);return e.length<2&&e.push(e[0].slice()),e}function c(t){for(var e=l(t);e.length<4;)e.push(e[0].slice());return e}function u(t){return t.map(c)}return function t(e){var r,n=e.type;switch(n){case\\\"GeometryCollection\\\":return{type:n,geometries:e.geometries.map(t)};case\\\"Point\\\":r=s(e.coordinates);break;case\\\"MultiPoint\\\":r=e.coordinates.map(s);break;case\\\"LineString\\\":r=l(e.arcs);break;case\\\"MultiLineString\\\":r=e.arcs.map(l);break;case\\\"Polygon\\\":r=u(e.arcs);break;case\\\"MultiPolygon\\\":r=e.arcs.map(u);break;default:return null}return{type:n,coordinates:r}}(e)}var s=function(t,e){var r={},n={},i={},a=[],o=-1;function s(t,e){for(var n in t){var i=t[n];delete e[i.start],delete i.start,delete i.end,i.forEach(function(t){r[t<0?~t:t]=1}),a.push(i)}}return e.forEach(function(r,n){var i,a=t.arcs[r<0?~r:r];a.length<3&&!a[1][0]&&!a[1][1]&&(i=e[++o],e[o]=r,e[n]=i)}),e.forEach(function(e){var r,a,o=function(e){var r,n=t.arcs[e<0?~e:e],i=n[0];t.transform?(r=[0,0],n.forEach(function(t){r[0]+=t[0],r[1]+=t[1]})):r=n[n.length-1];return e<0?[r,i]:[i,r]}(e),s=o[0],l=o[1];if(r=i[s])if(delete i[r.end],r.push(e),r.end=l,a=n[l]){delete n[a.start];var c=a===r?r:r.concat(a);n[c.start=r.start]=i[c.end=a.end]=c}else n[r.start]=i[r.end]=r;else if(r=n[l])if(delete n[r.start],r.unshift(e),r.start=s,a=i[s]){delete i[a.end];var u=a===r?r:a.concat(r);n[u.start=a.start]=i[u.end=r.end]=u}else n[r.start]=i[r.end]=r;else n[(r=[e]).start=s]=i[r.end=l]=r}),s(i,n),s(n,i),e.forEach(function(t){r[t<0?~t:t]||a.push([t])}),a};function l(t,e,r){var n,i,a;if(arguments.length>1)n=function(t,e,r){var n,i=[],a=[];function o(t){var e=t<0?~t:t;(a[e]||(a[e]=[])).push({i:t,g:n})}function s(t){t.forEach(o)}function l(t){t.forEach(s)}return function t(e){switch(n=e,e.type){case\\\"GeometryCollection\\\":e.geometries.forEach(t);break;case\\\"LineString\\\":s(e.arcs);break;case\\\"MultiLineString\\\":case\\\"Polygon\\\":l(e.arcs);break;case\\\"MultiPolygon\\\":e.arcs.forEach(l)}}(e),a.forEach(null==r?function(t){i.push(t[0].i)}:function(t){r(t[0].g,t[t.length-1].g)&&i.push(t[0].i)}),i}(0,e,r);else for(i=0,n=new Array(a=t.arcs.length);i<a;++i)n[i]=i;return{type:\\\"MultiLineString\\\",arcs:s(t,n)}}function c(t,e){var r={},n=[],i=[];function a(t){t.forEach(function(e){e.forEach(function(e){(r[e=e<0?~e:e]||(r[e]=[])).push(t)})}),n.push(t)}function l(e){return function(t){for(var e,r=-1,n=t.length,i=t[n-1],a=0;++r<n;)e=i,i=t[r],a+=e[0]*i[1]-e[1]*i[0];return Math.abs(a)}(o(t,{type:\\\"Polygon\\\",arcs:[e]}).coordinates[0])}return e.forEach(function t(e){switch(e.type){case\\\"GeometryCollection\\\":e.geometries.forEach(t);break;case\\\"Polygon\\\":a(e.arcs);break;case\\\"MultiPolygon\\\":e.arcs.forEach(a)}}),n.forEach(function(t){if(!t._){var e=[],n=[t];for(t._=1,i.push(e);t=n.pop();)e.push(t),t.forEach(function(t){t.forEach(function(t){r[t<0?~t:t].forEach(function(t){t._||(t._=1,n.push(t))})})})}}),n.forEach(function(t){delete t._}),{type:\\\"MultiPolygon\\\",arcs:i.map(function(e){var n,i=[];if(e.forEach(function(t){t.forEach(function(t){t.forEach(function(t){r[t<0?~t:t].length<2&&i.push(t)})})}),(n=(i=s(t,i)).length)>1)for(var a,o,c=1,u=l(i[0]);c<n;++c)(a=l(i[c]))>u&&(o=i[0],i[0]=i[c],i[c]=o,u=a);return i})}}var u=function(t,e){for(var r=0,n=t.length;r<n;){var i=r+n>>>1;t[i]<e?r=i+1:n=i}return r};t.bbox=n,t.feature=function(t,e){return\\\"GeometryCollection\\\"===e.type?{type:\\\"FeatureCollection\\\",features:e.geometries.map(function(e){return a(t,e)})}:a(t,e)},t.mesh=function(t){return o(t,l.apply(this,arguments))},t.meshArcs=l,t.merge=function(t){return o(t,c.apply(this,arguments))},t.mergeArcs=c,t.neighbors=function(t){var e={},r=t.map(function(){return[]});function n(t,r){t.forEach(function(t){t<0&&(t=~t);var n=e[t];n?n.push(r):e[t]=[r]})}function i(t,e){t.forEach(function(t){n(t,e)})}var a={LineString:n,MultiLineString:i,Polygon:i,MultiPolygon:function(t,e){t.forEach(function(t){i(t,e)})}};for(var o in t.forEach(function t(e,r){\\\"GeometryCollection\\\"===e.type?e.geometries.forEach(function(e){t(e,r)}):e.type in a&&a[e.type](e.arcs,r)}),e)for(var s=e[o],l=s.length,c=0;c<l;++c)for(var h=c+1;h<l;++h){var f,p=s[c],d=s[h];(f=r[p])[o=u(f,d)]!==d&&f.splice(o,0,d),(f=r[d])[o=u(f,p)]!==p&&f.splice(o,0,p)}return r},t.quantize=function(t,e){if(!((e=Math.floor(e))>=2))throw new Error(\\\"n must be \\\\u22652\\\");if(t.transform)throw new Error(\\\"already quantized\\\");var r,i=n(t),a=i[0],o=(i[2]-a)/(e-1)||1,s=i[1],l=(i[3]-s)/(e-1)||1;function c(t){t[0]=Math.round((t[0]-a)/o),t[1]=Math.round((t[1]-s)/l)}function u(t){switch(t.type){case\\\"GeometryCollection\\\":t.geometries.forEach(u);break;case\\\"Point\\\":c(t.coordinates);break;case\\\"MultiPoint\\\":t.coordinates.forEach(c)}}for(r in t.arcs.forEach(function(t){for(var e,r,n,i=1,c=1,u=t.length,h=t[0],f=h[0]=Math.round((h[0]-a)/o),p=h[1]=Math.round((h[1]-s)/l);i<u;++i)h=t[i],r=Math.round((h[0]-a)/o),n=Math.round((h[1]-s)/l),r===f&&n===p||((e=t[c++])[0]=r-f,f=r,e[1]=n-p,p=n);c<2&&((e=t[c++])[0]=0,e[1]=0),t.length=c}),t.objects)u(t.objects[r]);return t.transform={scale:[o,l],translate:[a,s]},t},t.transform=r,t.untransform=function(t){if(null==(r=t.transform))return e;var r,n,i,a=r.scale[0],o=r.scale[1],s=r.translate[0],l=r.translate[1];return function(t,e){e||(n=i=0);var r=Math.round((t[0]-s)/a),c=Math.round((t[1]-l)/o);return t[0]=r-n,n=r,t[1]=c-i,i=c,t}},Object.defineProperty(t,\\\"__esModule\\\",{value:!0})}(\\\"object\\\"==typeof r&&\\\"undefined\\\"!=typeof e?r:n.topojson=n.topojson||{})},{}],541:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){if(t<0)return[];if(0===t)return[[0]];for(var e=0|Math.round(a(t+1)),r=[],o=0;o<e;++o){for(var s=n.unrank(t,o),l=[0],c=0,u=0;u<s.length;++u)c+=1<<s[u],l.push(c);i(s)<1&&(l[0]=c,l[t]=0),r.push(l)}return r};var n=t(\\\"permutation-rank\\\"),i=t(\\\"permutation-parity\\\"),a=t(\\\"gamma\\\")},{gamma:231,\\\"permutation-parity\\\":463,\\\"permutation-rank\\\":464}],542:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){var e=(t=t||{}).center||[0,0,0],r=t.up||[0,1,0],n=t.right||h(r),i=t.radius||1,a=t.theta||0,u=t.phi||0;if(e=[].slice.call(e,0,3),r=[].slice.call(r,0,3),s(r,r),n=[].slice.call(n,0,3),s(n,n),\\\"eye\\\"in t){var p=t.eye,d=[p[0]-e[0],p[1]-e[1],p[2]-e[2]];o(n,d,r),c(n[0],n[1],n[2])<1e-6?n=h(r):s(n,n),i=c(d[0],d[1],d[2]);var g=l(r,d)/i,v=l(n,d)/i;u=Math.acos(g),a=Math.acos(v)}return i=Math.log(i),new f(t.zoomMin,t.zoomMax,e,r,n,i,a,u)};var n=t(\\\"filtered-vector\\\"),i=t(\\\"gl-mat4/invert\\\"),a=t(\\\"gl-mat4/rotate\\\"),o=t(\\\"gl-vec3/cross\\\"),s=t(\\\"gl-vec3/normalize\\\"),l=t(\\\"gl-vec3/dot\\\");function c(t,e,r){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2))}function u(t){return Math.min(1,Math.max(-1,t))}function h(t){var e=Math.abs(t[0]),r=Math.abs(t[1]),n=Math.abs(t[2]),i=[0,0,0];e>Math.max(r,n)?i[2]=1:r>Math.max(e,n)?i[0]=1:i[1]=1;for(var a=0,o=0,l=0;l<3;++l)a+=t[l]*t[l],o+=i[l]*t[l];for(l=0;l<3;++l)i[l]-=o/a*t[l];return s(i,i),i}function f(t,e,r,i,a,o,s,l){this.center=n(r),this.up=n(i),this.right=n(a),this.radius=n([o]),this.angle=n([s,l]),this.angle.bounds=[[-1/0,-Math.PI/2],[1/0,Math.PI/2]],this.setDistanceLimits(t,e),this.computedCenter=this.center.curve(0),this.computedUp=this.up.curve(0),this.computedRight=this.right.curve(0),this.computedRadius=this.radius.curve(0),this.computedAngle=this.angle.curve(0),this.computedToward=[0,0,0],this.computedEye=[0,0,0],this.computedMatrix=new Array(16);for(var c=0;c<16;++c)this.computedMatrix[c]=.5;this.recalcMatrix(0)}var p=f.prototype;p.setDistanceLimits=function(t,e){t=t>0?Math.log(t):-1/0,e=e>0?Math.log(e):1/0,e=Math.max(e,t),this.radius.bounds[0][0]=t,this.radius.bounds[1][0]=e},p.getDistanceLimits=function(t){var e=this.radius.bounds[0];return t?(t[0]=Math.exp(e[0][0]),t[1]=Math.exp(e[1][0]),t):[Math.exp(e[0][0]),Math.exp(e[1][0])]},p.recalcMatrix=function(t){this.center.curve(t),this.up.curve(t),this.right.curve(t),this.radius.curve(t),this.angle.curve(t);for(var e=this.computedUp,r=this.computedRight,n=0,i=0,a=0;a<3;++a)i+=e[a]*r[a],n+=e[a]*e[a];var l=Math.sqrt(n),u=0;for(a=0;a<3;++a)r[a]-=e[a]*i/n,u+=r[a]*r[a],e[a]/=l;var h=Math.sqrt(u);for(a=0;a<3;++a)r[a]/=h;var f=this.computedToward;o(f,e,r),s(f,f);var p=Math.exp(this.computedRadius[0]),d=this.computedAngle[0],g=this.computedAngle[1],v=Math.cos(d),m=Math.sin(d),y=Math.cos(g),x=Math.sin(g),b=this.computedCenter,_=v*y,w=m*y,k=x,T=-v*x,A=-m*x,M=y,S=this.computedEye,E=this.computedMatrix;for(a=0;a<3;++a){var C=_*r[a]+w*f[a]+k*e[a];E[4*a+1]=T*r[a]+A*f[a]+M*e[a],E[4*a+2]=C,E[4*a+3]=0}var L=E[1],P=E[5],O=E[9],z=E[2],I=E[6],D=E[10],R=P*D-O*I,F=O*z-L*D,B=L*I-P*z,N=c(R,F,B);R/=N,F/=N,B/=N,E[0]=R,E[4]=F,E[8]=B;for(a=0;a<3;++a)S[a]=b[a]+E[2+4*a]*p;for(a=0;a<3;++a){u=0;for(var j=0;j<3;++j)u+=E[a+4*j]*S[j];E[12+a]=-u}E[15]=1},p.getMatrix=function(t,e){this.recalcMatrix(t);var r=this.computedMatrix;if(e){for(var n=0;n<16;++n)e[n]=r[n];return e}return r};var d=[0,0,0];p.rotate=function(t,e,r,n){if(this.angle.move(t,e,r),n){this.recalcMatrix(t);var i=this.computedMatrix;d[0]=i[2],d[1]=i[6],d[2]=i[10];for(var o=this.computedUp,s=this.computedRight,l=this.computedToward,c=0;c<3;++c)i[4*c]=o[c],i[4*c+1]=s[c],i[4*c+2]=l[c];a(i,i,n,d);for(c=0;c<3;++c)o[c]=i[4*c],s[c]=i[4*c+1];this.up.set(t,o[0],o[1],o[2]),this.right.set(t,s[0],s[1],s[2])}},p.pan=function(t,e,r,n){e=e||0,r=r||0,n=n||0,this.recalcMatrix(t);var i=this.computedMatrix,a=(Math.exp(this.computedRadius[0]),i[1]),o=i[5],s=i[9],l=c(a,o,s);a/=l,o/=l,s/=l;var u=i[0],h=i[4],f=i[8],p=u*a+h*o+f*s,d=c(u-=a*p,h-=o*p,f-=s*p),g=(u/=d)*e+a*r,v=(h/=d)*e+o*r,m=(f/=d)*e+s*r;this.center.move(t,g,v,m);var y=Math.exp(this.computedRadius[0]);y=Math.max(1e-4,y+n),this.radius.set(t,Math.log(y))},p.translate=function(t,e,r,n){this.center.move(t,e||0,r||0,n||0)},p.setMatrix=function(t,e,r,n){var a=1;\\\"number\\\"==typeof r&&(a=0|r),(a<0||a>3)&&(a=1);var o=(a+2)%3;e||(this.recalcMatrix(t),e=this.computedMatrix);var s=e[a],l=e[a+4],h=e[a+8];if(n){var f=Math.abs(s),p=Math.abs(l),d=Math.abs(h),g=Math.max(f,p,d);f===g?(s=s<0?-1:1,l=h=0):d===g?(h=h<0?-1:1,s=l=0):(l=l<0?-1:1,s=h=0)}else{var v=c(s,l,h);s/=v,l/=v,h/=v}var m,y,x=e[o],b=e[o+4],_=e[o+8],w=x*s+b*l+_*h,k=c(x-=s*w,b-=l*w,_-=h*w),T=l*(_/=k)-h*(b/=k),A=h*(x/=k)-s*_,M=s*b-l*x,S=c(T,A,M);if(T/=S,A/=S,M/=S,this.center.jump(t,H,G,Y),this.radius.idle(t),this.up.jump(t,s,l,h),this.right.jump(t,x,b,_),2===a){var E=e[1],C=e[5],L=e[9],P=E*x+C*b+L*_,O=E*T+C*A+L*M;m=R<0?-Math.PI/2:Math.PI/2,y=Math.atan2(O,P)}else{var z=e[2],I=e[6],D=e[10],R=z*s+I*l+D*h,F=z*x+I*b+D*_,B=z*T+I*A+D*M;m=Math.asin(u(R)),y=Math.atan2(B,F)}this.angle.jump(t,y,m),this.recalcMatrix(t);var N=e[2],j=e[6],U=e[10],V=this.computedMatrix;i(V,e);var q=V[15],H=V[12]/q,G=V[13]/q,Y=V[14]/q,W=Math.exp(this.computedRadius[0]);this.center.jump(t,H-N*W,G-j*W,Y-U*W)},p.lastT=function(){return Math.max(this.center.lastT(),this.up.lastT(),this.right.lastT(),this.radius.lastT(),this.angle.lastT())},p.idle=function(t){this.center.idle(t),this.up.idle(t),this.right.idle(t),this.radius.idle(t),this.angle.idle(t)},p.flush=function(t){this.center.flush(t),this.up.flush(t),this.right.flush(t),this.radius.flush(t),this.angle.flush(t)},p.setDistance=function(t,e){e>0&&this.radius.set(t,Math.log(e))},p.lookAt=function(t,e,r,n){this.recalcMatrix(t),e=e||this.computedEye,r=r||this.computedCenter;var i=(n=n||this.computedUp)[0],a=n[1],o=n[2],s=c(i,a,o);if(!(s<1e-6)){i/=s,a/=s,o/=s;var l=e[0]-r[0],h=e[1]-r[1],f=e[2]-r[2],p=c(l,h,f);if(!(p<1e-6)){l/=p,h/=p,f/=p;var d=this.computedRight,g=d[0],v=d[1],m=d[2],y=i*g+a*v+o*m,x=c(g-=y*i,v-=y*a,m-=y*o);if(!(x<.01&&(x=c(g=a*f-o*h,v=o*l-i*f,m=i*h-a*l))<1e-6)){g/=x,v/=x,m/=x,this.up.set(t,i,a,o),this.right.set(t,g,v,m),this.center.set(t,r[0],r[1],r[2]),this.radius.set(t,Math.log(p));var b=a*m-o*v,_=o*g-i*m,w=i*v-a*g,k=c(b,_,w),T=i*l+a*h+o*f,A=g*l+v*h+m*f,M=(b/=k)*l+(_/=k)*h+(w/=k)*f,S=Math.asin(u(T)),E=Math.atan2(M,A),C=this.angle._state,L=C[C.length-1],P=C[C.length-2];L%=2*Math.PI;var O=Math.abs(L+2*Math.PI-E),z=Math.abs(L-E),I=Math.abs(L-2*Math.PI-E);O<z&&(L+=2*Math.PI),I<z&&(L-=2*Math.PI),this.angle.jump(this.angle.lastT(),L,P),this.angle.set(t,E,S)}}}}},{\\\"filtered-vector\\\":226,\\\"gl-mat4/invert\\\":265,\\\"gl-mat4/rotate\\\":270,\\\"gl-vec3/cross\\\":334,\\\"gl-vec3/dot\\\":339,\\\"gl-vec3/normalize\\\":356}],543:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r){var i=t*e,a=n*t,o=a-(a-t),s=t-o,l=n*e,c=l-(l-e),u=e-c,h=s*u-(i-o*c-s*c-o*u);if(r)return r[0]=h,r[1]=i,r;return[h,i]};var n=+(Math.pow(2,27)+1)},{}],544:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r){var n=t+e,i=n-t,a=e-i,o=t-(n-i);if(r)return r[0]=o+a,r[1]=n,r;return[o+a,n]}},{}],545:[function(t,e,r){(function(e,n){\\\"use strict\\\";var i=t(\\\"bit-twiddle\\\"),a=t(\\\"dup\\\");e.__TYPEDARRAY_POOL||(e.__TYPEDARRAY_POOL={UINT8:a([32,0]),UINT16:a([32,0]),UINT32:a([32,0]),INT8:a([32,0]),INT16:a([32,0]),INT32:a([32,0]),FLOAT:a([32,0]),DOUBLE:a([32,0]),DATA:a([32,0]),UINT8C:a([32,0]),BUFFER:a([32,0])});var o=\\\"undefined\\\"!=typeof Uint8ClampedArray,s=e.__TYPEDARRAY_POOL;s.UINT8C||(s.UINT8C=a([32,0])),s.BUFFER||(s.BUFFER=a([32,0]));var l=s.DATA,c=s.BUFFER;function u(t){if(t){var e=t.length||t.byteLength,r=i.log2(e);l[r].push(t)}}function h(t){t=i.nextPow2(t);var e=i.log2(t),r=l[e];return r.length>0?r.pop():new ArrayBuffer(t)}function f(t){return new Uint8Array(h(t),0,t)}function p(t){return new Uint16Array(h(2*t),0,t)}function d(t){return new Uint32Array(h(4*t),0,t)}function g(t){return new Int8Array(h(t),0,t)}function v(t){return new Int16Array(h(2*t),0,t)}function m(t){return new Int32Array(h(4*t),0,t)}function y(t){return new Float32Array(h(4*t),0,t)}function x(t){return new Float64Array(h(8*t),0,t)}function b(t){return o?new Uint8ClampedArray(h(t),0,t):f(t)}function _(t){return new DataView(h(t),0,t)}function w(t){t=i.nextPow2(t);var e=i.log2(t),r=c[e];return r.length>0?r.pop():new n(t)}r.free=function(t){if(n.isBuffer(t))c[i.log2(t.length)].push(t);else{if(\\\"[object ArrayBuffer]\\\"!==Object.prototype.toString.call(t)&&(t=t.buffer),!t)return;var e=t.length||t.byteLength,r=0|i.log2(e);l[r].push(t)}},r.freeUint8=r.freeUint16=r.freeUint32=r.freeInt8=r.freeInt16=r.freeInt32=r.freeFloat32=r.freeFloat=r.freeFloat64=r.freeDouble=r.freeUint8Clamped=r.freeDataView=function(t){u(t.buffer)},r.freeArrayBuffer=u,r.freeBuffer=function(t){c[i.log2(t.length)].push(t)},r.malloc=function(t,e){if(void 0===e||\\\"arraybuffer\\\"===e)return h(t);switch(e){case\\\"uint8\\\":return f(t);case\\\"uint16\\\":return p(t);case\\\"uint32\\\":return d(t);case\\\"int8\\\":return g(t);case\\\"int16\\\":return v(t);case\\\"int32\\\":return m(t);case\\\"float\\\":case\\\"float32\\\":return y(t);case\\\"double\\\":case\\\"float64\\\":return x(t);case\\\"uint8_clamped\\\":return b(t);case\\\"buffer\\\":return w(t);case\\\"data\\\":case\\\"dataview\\\":return _(t);default:return null}return null},r.mallocArrayBuffer=h,r.mallocUint8=f,r.mallocUint16=p,r.mallocUint32=d,r.mallocInt8=g,r.mallocInt16=v,r.mallocInt32=m,r.mallocFloat32=r.mallocFloat=y,r.mallocFloat64=r.mallocDouble=x,r.mallocUint8Clamped=b,r.mallocDataView=_,r.mallocBuffer=w,r.clearCache=function(){for(var t=0;t<32;++t)s.UINT8[t].length=0,s.UINT16[t].length=0,s.UINT32[t].length=0,s.INT8[t].length=0,s.INT16[t].length=0,s.INT32[t].length=0,s.FLOAT[t].length=0,s.DOUBLE[t].length=0,s.UINT8C[t].length=0,l[t].length=0,c[t].length=0}}).call(this,\\\"undefined\\\"!=typeof global?global:\\\"undefined\\\"!=typeof self?self:\\\"undefined\\\"!=typeof window?window:{},t(\\\"buffer\\\").Buffer)},{\\\"bit-twiddle\\\":92,buffer:105,dup:170}],546:[function(t,e,r){\\\"use strict\\\";function n(t){this.roots=new Array(t),this.ranks=new Array(t);for(var e=0;e<t;++e)this.roots[e]=e,this.ranks[e]=0}e.exports=n;var i=n.prototype;Object.defineProperty(i,\\\"length\\\",{get:function(){return this.roots.length}}),i.makeSet=function(){var t=this.roots.length;return this.roots.push(t),this.ranks.push(0),t},i.find=function(t){for(var e=t,r=this.roots;r[t]!==t;)t=r[t];for(;r[e]!==t;){var n=r[e];r[e]=t,e=n}return t},i.link=function(t,e){var r=this.find(t),n=this.find(e);if(r!==n){var i=this.ranks,a=this.roots,o=i[r],s=i[n];o<s?a[r]=n:s<o?a[n]=r:(a[n]=r,++i[r])}}},{}],547:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r){return 0===t.length?t:e?(r||t.sort(e),function(t,e){for(var r=1,n=t.length,i=t[0],a=t[0],o=1;o<n;++o)if(a=i,e(i=t[o],a)){if(o===r){r++;continue}t[r++]=i}return t.length=r,t}(t,e)):(r||t.sort(),function(t){for(var e=1,r=t.length,n=t[0],i=t[0],a=1;a<r;++a,i=n)if(i=n,(n=t[a])!==i){if(a===e){e++;continue}t[e++]=n}return t.length=e,t}(t))}},{}],548:[function(t,e,r){var n=/[\\\\'\\\\\\\"]/;e.exports=function(t){return t?(n.test(t.charAt(0))&&(t=t.substr(1)),n.test(t.charAt(t.length-1))&&(t=t.substr(0,t.length-1)),t):\\\"\\\"}},{}],549:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r){Array.isArray(r)||(r=[].slice.call(arguments,2));for(var n=0,i=r.length;n<i;n++){var a=r[n];for(var o in a)if((void 0===e[o]||Array.isArray(e[o])||t[o]!==e[o])&&o in e){var s;if(!0===a[o])s=e[o];else{if(!1===a[o])continue;if(\\\"function\\\"==typeof a[o]&&void 0===(s=a[o](e[o],t,e)))continue}t[o]=s}}return t}},{}],550:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){\\\"object\\\"==typeof e&&null!==e||(e={});return n(t,e.canvas||i,e.context||a,e)};var n=t(\\\"./lib/vtext\\\"),i=null,a=null;\\\"undefined\\\"!=typeof document&&((i=document.createElement(\\\"canvas\\\")).width=8192,i.height=1024,a=i.getContext(\\\"2d\\\"))},{\\\"./lib/vtext\\\":551}],551:[function(t,e,r){e.exports=function(t,e,r,n){var a=64,o=1.25,s={breaklines:!1,bolds:!1,italics:!1,subscripts:!1,superscripts:!1};n&&(n.size&&n.size>0&&(a=n.size),n.lineSpacing&&n.lineSpacing>0&&(o=n.lineSpacing),n.styletags&&n.styletags.breaklines&&(s.breaklines=!!n.styletags.breaklines),n.styletags&&n.styletags.bolds&&(s.bolds=!!n.styletags.bolds),n.styletags&&n.styletags.italics&&(s.italics=!!n.styletags.italics),n.styletags&&n.styletags.subscripts&&(s.subscripts=!!n.styletags.subscripts),n.styletags&&n.styletags.superscripts&&(s.superscripts=!!n.styletags.superscripts));return r.font=[n.fontStyle,n.fontVariant,n.fontWeight,a+\\\"px\\\",n.font].filter(function(t){return t}).join(\\\" \\\"),r.textAlign=\\\"start\\\",r.textBaseline=\\\"alphabetic\\\",r.direction=\\\"ltr\\\",w(function(t,e,r,n,a,o){r=r.replace(/\\\\n/g,\\\"\\\"),r=!0===o.breaklines?r.replace(/\\\\<br\\\\>/g,\\\"\\\\n\\\"):r.replace(/\\\\<br\\\\>/g,\\\" \\\");var s=\\\"\\\",l=[];for(k=0;k<r.length;++k)l[k]=s;!0===o.bolds&&(l=x(c,u,r,l)),!0===o.italics&&(l=x(h,f,r,l)),!0===o.superscripts&&(l=x(p,g,r,l)),!0===o.subscripts&&(l=x(v,y,r,l));var b=[],_=\\\"\\\";for(k=0;k<r.length;++k)null!==l[k]&&(_+=r[k],b.push(l[k]));var w,k,T,A,M,S=_.split(\\\"\\\\n\\\"),E=S.length,C=Math.round(a*n),L=n,P=2*n,O=0,z=E*C+P;t.height<z&&(t.height=z),e.fillStyle=\\\"#000\\\",e.fillRect(0,0,t.width,t.height),e.fillStyle=\\\"#fff\\\";var I=0,D=\\\"\\\";function R(){if(\\\"\\\"!==D){var t=e.measureText(D).width;e.fillText(D,L+T,P+A),T+=t}}function F(){return Math.round(M)+\\\"px \\\"}function B(t,r){var n=\\\"\\\"+e.font;if(!0===o.subscripts){var i=t.indexOf(m),a=r.indexOf(m),s=i>-1?parseInt(t[1+i]):0,l=a>-1?parseInt(r[1+a]):0;s!==l&&(n=n.replace(F(),\\\"?px \\\"),M*=Math.pow(.75,l-s),n=n.replace(\\\"?px \\\",F())),A+=.25*C*(l-s)}if(!0===o.superscripts){var c=t.indexOf(d),h=r.indexOf(d),p=c>-1?parseInt(t[1+c]):0,g=h>-1?parseInt(r[1+h]):0;p!==g&&(n=n.replace(F(),\\\"?px \\\"),M*=Math.pow(.75,g-p),n=n.replace(\\\"?px \\\",F())),A-=.25*C*(g-p)}if(!0===o.bolds){var v=t.indexOf(u)>-1,y=r.indexOf(u)>-1;!v&&y&&(n=x?n.replace(\\\"italic \\\",\\\"italic bold \\\"):\\\"bold \\\"+n),v&&!y&&(n=n.replace(\\\"bold \\\",\\\"\\\"))}if(!0===o.italics){var x=t.indexOf(f)>-1,b=r.indexOf(f)>-1;!x&&b&&(n=\\\"italic \\\"+n),x&&!b&&(n=n.replace(\\\"italic \\\",\\\"\\\"))}e.font=n}for(w=0;w<E;++w){var N=S[w]+\\\"\\\\n\\\";for(T=0,A=w*C,M=n,D=\\\"\\\",k=0;k<N.length;++k){var j=k+I<b.length?b[k+I]:b[b.length-1];s===j?D+=N[k]:(R(),D=N[k],void 0!==j&&(B(s,j),s=j))}R(),I+=N.length;var U=0|Math.round(T+2*L);O<U&&(O=U)}var V=O,q=P+C*E;return i(e.getImageData(0,0,V,q).data,[q,V,4]).pick(-1,-1,0).transpose(1,0)}(e,r,t,a,o,s),n,a)},e.exports.processPixels=w;var n=t(\\\"surface-nets\\\"),i=t(\\\"ndarray\\\"),a=t(\\\"simplify-planar-graph\\\"),o=t(\\\"clean-pslg\\\"),s=t(\\\"cdt2d\\\"),l=t(\\\"planar-graph-to-polyline\\\"),c=\\\"b\\\",u=\\\"b|\\\",h=\\\"i\\\",f=\\\"i|\\\",p=\\\"sup\\\",d=\\\"+\\\",g=\\\"+1\\\",v=\\\"sub\\\",m=\\\"-\\\",y=\\\"-1\\\";function x(t,e,r,n){for(var i=\\\"<\\\"+t+\\\">\\\",a=\\\"</\\\"+t+\\\">\\\",o=i.length,s=a.length,l=e[0]===d||e[0]===m,c=0,u=-s;c>-1&&-1!==(c=r.indexOf(i,c))&&-1!==(u=r.indexOf(a,c+o))&&!(u<=c);){for(var h=c;h<u+s;++h)if(h<c+o||h>=u)n[h]=null,r=r.substr(0,h)+\\\" \\\"+r.substr(h+1);else if(null!==n[h]){var f=n[h].indexOf(e[0]);-1===f?n[h]+=e:l&&(n[h]=n[h].substr(0,f+1)+(1+parseInt(n[h][f+1]))+n[h].substr(f+2))}var p=c+o,g=r.substr(p,u-p).indexOf(i);c=-1!==g?g:u+s}return n}function b(t,e){var r=n(t,128);return e?a(r.cells,r.positions,.25):{edges:r.cells,positions:r.positions}}function _(t,e,r,n){var i=b(t,n),a=function(t,e,r){for(var n=e.textAlign||\\\"start\\\",i=e.textBaseline||\\\"alphabetic\\\",a=[1<<30,1<<30],o=[0,0],s=t.length,l=0;l<s;++l)for(var c=t[l],u=0;u<2;++u)a[u]=0|Math.min(a[u],c[u]),o[u]=0|Math.max(o[u],c[u]);var h=0;switch(n){case\\\"center\\\":h=-.5*(a[0]+o[0]);break;case\\\"right\\\":case\\\"end\\\":h=-o[0];break;case\\\"left\\\":case\\\"start\\\":h=-a[0];break;default:throw new Error(\\\"vectorize-text: Unrecognized textAlign: '\\\"+n+\\\"'\\\")}var f=0;switch(i){case\\\"hanging\\\":case\\\"top\\\":f=-a[1];break;case\\\"middle\\\":f=-.5*(a[1]+o[1]);break;case\\\"alphabetic\\\":case\\\"ideographic\\\":f=-3*r;break;case\\\"bottom\\\":f=-o[1];break;default:throw new Error(\\\"vectorize-text: Unrecoginized textBaseline: '\\\"+i+\\\"'\\\")}var p=1/r;return\\\"lineHeight\\\"in e?p*=+e.lineHeight:\\\"width\\\"in e?p=e.width/(o[0]-a[0]):\\\"height\\\"in e&&(p=e.height/(o[1]-a[1])),t.map(function(t){return[p*(t[0]+h),p*(t[1]+f)]})}(i.positions,e,r),c=i.edges,u=\\\"ccw\\\"===e.orientation;if(o(a,c),e.polygons||e.polygon||e.polyline){for(var h=l(c,a),f=new Array(h.length),p=0;p<h.length;++p){for(var d=h[p],g=new Array(d.length),v=0;v<d.length;++v){for(var m=d[v],y=new Array(m.length),x=0;x<m.length;++x)y[x]=a[m[x]].slice();u&&y.reverse(),g[v]=y}f[p]=g}return f}return e.triangles||e.triangulate||e.triangle?{cells:s(a,c,{delaunay:!1,exterior:!1,interior:!0}),positions:a}:{edges:c,positions:a}}function w(t,e,r){try{return _(t,e,r,!0)}catch(t){}try{return _(t,e,r,!1)}catch(t){}return e.polygons||e.polyline||e.polygon?[]:e.triangles||e.triangulate||e.triangle?{cells:[],positions:[]}:{edges:[],positions:[]}}},{cdt2d:106,\\\"clean-pslg\\\":116,ndarray:450,\\\"planar-graph-to-polyline\\\":468,\\\"simplify-planar-graph\\\":524,\\\"surface-nets\\\":531}],552:[function(t,e,r){!function(){\\\"use strict\\\";if(\\\"undefined\\\"==typeof ses||!ses.ok||ses.ok()){\\\"undefined\\\"!=typeof ses&&(ses.weakMapPermitHostObjects=v);var t=!1;if(\\\"function\\\"==typeof WeakMap){var r=WeakMap;if(\\\"undefined\\\"!=typeof navigator&&/Firefox/.test(navigator.userAgent));else{var n=new r,i=Object.freeze({});if(n.set(i,1),1===n.get(i))return void(e.exports=WeakMap);t=!0}}Object.prototype.hasOwnProperty;var a=Object.getOwnPropertyNames,o=Object.defineProperty,s=Object.isExtensible,l=\\\"weakmap:\\\",c=l+\\\"ident:\\\"+Math.random()+\\\"___\\\";if(\\\"undefined\\\"!=typeof crypto&&\\\"function\\\"==typeof crypto.getRandomValues&&\\\"function\\\"==typeof ArrayBuffer&&\\\"function\\\"==typeof Uint8Array){var u=new ArrayBuffer(25),h=new Uint8Array(u);crypto.getRandomValues(h),c=l+\\\"rand:\\\"+Array.prototype.map.call(h,function(t){return(t%36).toString(36)}).join(\\\"\\\")+\\\"___\\\"}if(o(Object,\\\"getOwnPropertyNames\\\",{value:function(t){return a(t).filter(m)}}),\\\"getPropertyNames\\\"in Object){var f=Object.getPropertyNames;o(Object,\\\"getPropertyNames\\\",{value:function(t){return f(t).filter(m)}})}!function(){var t=Object.freeze;o(Object,\\\"freeze\\\",{value:function(e){return y(e),t(e)}});var e=Object.seal;o(Object,\\\"seal\\\",{value:function(t){return y(t),e(t)}});var r=Object.preventExtensions;o(Object,\\\"preventExtensions\\\",{value:function(t){return y(t),r(t)}})}();var p=!1,d=0,g=function(){this instanceof g||b();var t=[],e=[],r=d++;return Object.create(g.prototype,{get___:{value:x(function(n,i){var a,o=y(n);return o?r in o?o[r]:i:(a=t.indexOf(n))>=0?e[a]:i})},has___:{value:x(function(e){var n=y(e);return n?r in n:t.indexOf(e)>=0})},set___:{value:x(function(n,i){var a,o=y(n);return o?o[r]=i:(a=t.indexOf(n))>=0?e[a]=i:(a=t.length,e[a]=i,t[a]=n),this})},delete___:{value:x(function(n){var i,a,o=y(n);return o?r in o&&delete o[r]:!((i=t.indexOf(n))<0||(a=t.length-1,t[i]=void 0,e[i]=e[a],t[i]=t[a],t.length=a,e.length=a,0))})}})};g.prototype=Object.create(Object.prototype,{get:{value:function(t,e){return this.get___(t,e)},writable:!0,configurable:!0},has:{value:function(t){return this.has___(t)},writable:!0,configurable:!0},set:{value:function(t,e){return this.set___(t,e)},writable:!0,configurable:!0},delete:{value:function(t){return this.delete___(t)},writable:!0,configurable:!0}}),\\\"function\\\"==typeof r?function(){function n(){this instanceof g||b();var e,n=new r,i=void 0,a=!1;return e=t?function(t,e){return n.set(t,e),n.has(t)||(i||(i=new g),i.set(t,e)),this}:function(t,e){if(a)try{n.set(t,e)}catch(r){i||(i=new g),i.set___(t,e)}else n.set(t,e);return this},Object.create(g.prototype,{get___:{value:x(function(t,e){return i?n.has(t)?n.get(t):i.get___(t,e):n.get(t,e)})},has___:{value:x(function(t){return n.has(t)||!!i&&i.has___(t)})},set___:{value:x(e)},delete___:{value:x(function(t){var e=!!n.delete(t);return i&&i.delete___(t)||e})},permitHostObjects___:{value:x(function(t){if(t!==v)throw new Error(\\\"bogus call to permitHostObjects___\\\");a=!0})}})}t&&\\\"undefined\\\"!=typeof Proxy&&(Proxy=void 0),n.prototype=g.prototype,e.exports=n,Object.defineProperty(WeakMap.prototype,\\\"constructor\\\",{value:WeakMap,enumerable:!1,configurable:!0,writable:!0})}():(\\\"undefined\\\"!=typeof Proxy&&(Proxy=void 0),e.exports=g)}function v(t){t.permitHostObjects___&&t.permitHostObjects___(v)}function m(t){return!(t.substr(0,l.length)==l&&\\\"___\\\"===t.substr(t.length-3))}function y(t){if(t!==Object(t))throw new TypeError(\\\"Not an object: \\\"+t);var e=t[c];if(e&&e.key===t)return e;if(s(t)){e={key:t};try{return o(t,c,{value:e,writable:!1,enumerable:!1,configurable:!1}),e}catch(t){return}}}function x(t){return t.prototype=null,Object.freeze(t)}function b(){p||\\\"undefined\\\"==typeof console||(p=!0,console.warn(\\\"WeakMap should be invoked as new WeakMap(), not WeakMap(). This will be an error in the future.\\\"))}}()},{}],553:[function(t,e,r){var n=t(\\\"./hidden-store.js\\\");e.exports=function(){var t={};return function(e){if((\\\"object\\\"!=typeof e||null===e)&&\\\"function\\\"!=typeof e)throw new Error(\\\"Weakmap-shim: Key must be object\\\");var r=e.valueOf(t);return r&&r.identity===t?r:n(e,t)}}},{\\\"./hidden-store.js\\\":554}],554:[function(t,e,r){e.exports=function(t,e){var r={identity:e},n=t.valueOf;return Object.defineProperty(t,\\\"valueOf\\\",{value:function(t){return t!==e?n.apply(this,arguments):r},writable:!0}),r}},{}],555:[function(t,e,r){var n=t(\\\"./create-store.js\\\");e.exports=function(){var t=n();return{get:function(e,r){var n=t(e);return n.hasOwnProperty(\\\"value\\\")?n.value:r},set:function(e,r){return t(e).value=r,this},has:function(e){return\\\"value\\\"in t(e)},delete:function(e){return delete t(e).value}}}},{\\\"./create-store.js\\\":553}],556:[function(t,e,r){var n=t(\\\"get-canvas-context\\\");e.exports=function(t){return n(\\\"webgl\\\",t)}},{\\\"get-canvas-context\\\":232}],557:[function(t,e,r){var n=t(\\\"../main\\\"),i=t(\\\"object-assign\\\"),a=n.instance();function o(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}o.prototype=new n.baseCalendar,i(o.prototype,{name:\\\"Chinese\\\",jdEpoch:1721425.5,hasYearZero:!1,minMonth:0,firstMonth:0,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Chinese\\\",epochs:[\\\"BEC\\\",\\\"EC\\\"],monthNumbers:function(t,e){if(\\\"string\\\"==typeof t){var r=t.match(l);return r?r[0]:\\\"\\\"}var n=this._validateYear(t),i=t.month(),a=\\\"\\\"+this.toChineseMonth(n,i);return e&&a.length<2&&(a=\\\"0\\\"+a),this.isIntercalaryMonth(n,i)&&(a+=\\\"i\\\"),a},monthNames:function(t){if(\\\"string\\\"==typeof t){var e=t.match(c);return e?e[0]:\\\"\\\"}var r=this._validateYear(t),n=t.month(),i=[\\\"\\\\u4e00\\\\u6708\\\",\\\"\\\\u4e8c\\\\u6708\\\",\\\"\\\\u4e09\\\\u6708\\\",\\\"\\\\u56db\\\\u6708\\\",\\\"\\\\u4e94\\\\u6708\\\",\\\"\\\\u516d\\\\u6708\\\",\\\"\\\\u4e03\\\\u6708\\\",\\\"\\\\u516b\\\\u6708\\\",\\\"\\\\u4e5d\\\\u6708\\\",\\\"\\\\u5341\\\\u6708\\\",\\\"\\\\u5341\\\\u4e00\\\\u6708\\\",\\\"\\\\u5341\\\\u4e8c\\\\u6708\\\"][this.toChineseMonth(r,n)-1];return this.isIntercalaryMonth(r,n)&&(i=\\\"\\\\u95f0\\\"+i),i},monthNamesShort:function(t){if(\\\"string\\\"==typeof t){var e=t.match(u);return e?e[0]:\\\"\\\"}var r=this._validateYear(t),n=t.month(),i=[\\\"\\\\u4e00\\\",\\\"\\\\u4e8c\\\",\\\"\\\\u4e09\\\",\\\"\\\\u56db\\\",\\\"\\\\u4e94\\\",\\\"\\\\u516d\\\",\\\"\\\\u4e03\\\",\\\"\\\\u516b\\\",\\\"\\\\u4e5d\\\",\\\"\\\\u5341\\\",\\\"\\\\u5341\\\\u4e00\\\",\\\"\\\\u5341\\\\u4e8c\\\"][this.toChineseMonth(r,n)-1];return this.isIntercalaryMonth(r,n)&&(i=\\\"\\\\u95f0\\\"+i),i},parseMonth:function(t,e){t=this._validateYear(t);var r,n=parseInt(e);if(isNaN(n))\\\"\\\\u95f0\\\"===e[0]&&(r=!0,e=e.substring(1)),\\\"\\\\u6708\\\"===e[e.length-1]&&(e=e.substring(0,e.length-1)),n=1+[\\\"\\\\u4e00\\\",\\\"\\\\u4e8c\\\",\\\"\\\\u4e09\\\",\\\"\\\\u56db\\\",\\\"\\\\u4e94\\\",\\\"\\\\u516d\\\",\\\"\\\\u4e03\\\",\\\"\\\\u516b\\\",\\\"\\\\u4e5d\\\",\\\"\\\\u5341\\\",\\\"\\\\u5341\\\\u4e00\\\",\\\"\\\\u5341\\\\u4e8c\\\"].indexOf(e);else{var i=e[e.length-1];r=\\\"i\\\"===i||\\\"I\\\"===i}return this.toMonthIndex(t,n,r)},dayNames:[\\\"Sunday\\\",\\\"Monday\\\",\\\"Tuesday\\\",\\\"Wednesday\\\",\\\"Thursday\\\",\\\"Friday\\\",\\\"Saturday\\\"],dayNamesShort:[\\\"Sun\\\",\\\"Mon\\\",\\\"Tue\\\",\\\"Wed\\\",\\\"Thu\\\",\\\"Fri\\\",\\\"Sat\\\"],dayNamesMin:[\\\"Su\\\",\\\"Mo\\\",\\\"Tu\\\",\\\"We\\\",\\\"Th\\\",\\\"Fr\\\",\\\"Sa\\\"],digits:null,dateFormat:\\\"yyyy/mm/dd\\\",firstDay:1,isRTL:!1}},_validateYear:function(t,e){if(t.year&&(t=t.year()),\\\"number\\\"!=typeof t||t<1888||t>2111)throw e.replace(/\\\\{0\\\\}/,this.local.name);return t},toMonthIndex:function(t,e,r){var i=this.intercalaryMonth(t);if(r&&e!==i||e<1||e>12)throw n.local.invalidMonth.replace(/\\\\{0\\\\}/,this.local.name);return i?!r&&e<=i?e-1:e:e-1},toChineseMonth:function(t,e){t.year&&(e=(t=t.year()).month());var r=this.intercalaryMonth(t);if(e<0||e>(r?12:11))throw n.local.invalidMonth.replace(/\\\\{0\\\\}/,this.local.name);return r?e<r?e+1:e:e+1},intercalaryMonth:function(t){return t=this._validateYear(t),h[t-h[0]]>>13},isIntercalaryMonth:function(t,e){t.year&&(e=(t=t.year()).month());var r=this.intercalaryMonth(t);return!!r&&r===e},leapYear:function(t){return 0!==this.intercalaryMonth(t)},weekOfYear:function(t,e,r){var i,o=this._validateYear(t,n.local.invalidyear),s=f[o-f[0]],l=s>>9&4095,c=s>>5&15,u=31&s;(i=a.newDate(l,c,u)).add(4-(i.dayOfWeek()||7),\\\"d\\\");var h=this.toJD(t,e,r)-i.toJD();return 1+Math.floor(h/7)},monthsInYear:function(t){return this.leapYear(t)?13:12},daysInMonth:function(t,e){t.year&&(e=t.month(),t=t.year()),t=this._validateYear(t);var r=h[t-h[0]];if(e>(r>>13?12:11))throw n.local.invalidMonth.replace(/\\\\{0\\\\}/,this.local.name);return r&1<<12-e?30:29},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,s,r,n.local.invalidDate);t=this._validateYear(i.year()),e=i.month(),r=i.day();var o=this.isIntercalaryMonth(t,e),s=this.toChineseMonth(t,e),l=function(t,e,r,n,i){var a,o,s;if(\\\"object\\\"==typeof t)o=t,a=e||{};else{var l=\\\"number\\\"==typeof t&&t>=1888&&t<=2111;if(!l)throw new Error(\\\"Lunar year outside range 1888-2111\\\");var c=\\\"number\\\"==typeof e&&e>=1&&e<=12;if(!c)throw new Error(\\\"Lunar month outside range 1 - 12\\\");var u,p=\\\"number\\\"==typeof r&&r>=1&&r<=30;if(!p)throw new Error(\\\"Lunar day outside range 1 - 30\\\");\\\"object\\\"==typeof n?(u=!1,a=n):(u=!!n,a=i||{}),o={year:t,month:e,day:r,isIntercalary:u}}s=o.day-1;var d,g=h[o.year-h[0]],v=g>>13;d=v?o.month>v?o.month:o.isIntercalary?o.month:o.month-1:o.month-1;for(var m=0;m<d;m++){var y=g&1<<12-m?30:29;s+=y}var x=f[o.year-f[0]],b=new Date(x>>9&4095,(x>>5&15)-1,(31&x)+s);return a.year=b.getFullYear(),a.month=1+b.getMonth(),a.day=b.getDate(),a}(t,s,r,o);return a.toJD(l.year,l.month,l.day)},fromJD:function(t){var e=a.fromJD(t),r=function(t,e,r,n){var i,a;if(\\\"object\\\"==typeof t)i=t,a=e||{};else{var o=\\\"number\\\"==typeof t&&t>=1888&&t<=2111;if(!o)throw new Error(\\\"Solar year outside range 1888-2111\\\");var s=\\\"number\\\"==typeof e&&e>=1&&e<=12;if(!s)throw new Error(\\\"Solar month outside range 1 - 12\\\");var l=\\\"number\\\"==typeof r&&r>=1&&r<=31;if(!l)throw new Error(\\\"Solar day outside range 1 - 31\\\");i={year:t,month:e,day:r},a=n||{}}var c=f[i.year-f[0]],u=i.year<<9|i.month<<5|i.day;a.year=u>=c?i.year:i.year-1,c=f[a.year-f[0]];var p,d=new Date(c>>9&4095,(c>>5&15)-1,31&c),g=new Date(i.year,i.month-1,i.day);p=Math.round((g-d)/864e5);var v,m=h[a.year-h[0]];for(v=0;v<13;v++){var y=m&1<<12-v?30:29;if(p<y)break;p-=y}var x=m>>13;!x||v<x?(a.isIntercalary=!1,a.month=1+v):v===x?(a.isIntercalary=!0,a.month=v):(a.isIntercalary=!1,a.month=v);return a.day=1+p,a}(e.year(),e.month(),e.day()),n=this.toMonthIndex(r.year,r.month,r.isIntercalary);return this.newDate(r.year,n,r.day)},fromString:function(t){var e=t.match(s),r=this._validateYear(+e[1]),n=+e[2],i=!!e[3],a=this.toMonthIndex(r,n,i),o=+e[4];return this.newDate(r,a,o)},add:function(t,e,r){var n=t.year(),i=t.month(),a=this.isIntercalaryMonth(n,i),s=this.toChineseMonth(n,i),l=Object.getPrototypeOf(o.prototype).add.call(this,t,e,r);if(\\\"y\\\"===r){var c=l.year(),u=l.month(),h=this.isIntercalaryMonth(c,s),f=a&&h?this.toMonthIndex(c,s,!0):this.toMonthIndex(c,s,!1);f!==u&&l.month(f)}return l}});var s=/^\\\\s*(-?\\\\d\\\\d\\\\d\\\\d|\\\\d\\\\d)[-\\\\/](\\\\d?\\\\d)([iI]?)[-\\\\/](\\\\d?\\\\d)/m,l=/^\\\\d?\\\\d[iI]?/m,c=/^\\\\u95f0?\\\\u5341?[\\\\u4e00\\\\u4e8c\\\\u4e09\\\\u56db\\\\u4e94\\\\u516d\\\\u4e03\\\\u516b\\\\u4e5d]?\\\\u6708/m,u=/^\\\\u95f0?\\\\u5341?[\\\\u4e00\\\\u4e8c\\\\u4e09\\\\u56db\\\\u4e94\\\\u516d\\\\u4e03\\\\u516b\\\\u4e5d]?/m;n.calendars.chinese=o;var h=[1887,5780,5802,19157,2742,50359,1198,2646,46378,7466,3412,30122,5482,67949,2396,5294,43597,6732,6954,36181,2772,4954,18781,2396,54427,5274,6730,47781,5800,6868,21210,4790,59703,2350,5270,46667,3402,3496,38325,1388,4782,18735,2350,52374,6804,7498,44457,2906,1388,29294,4700,63789,6442,6804,56138,5802,2772,38235,1210,4698,22827,5418,63125,3476,5802,43701,2484,5302,27223,2646,70954,7466,3412,54698,5482,2412,38062,5294,2636,32038,6954,60245,2772,4826,43357,2394,5274,39501,6730,72357,5800,5844,53978,4790,2358,38039,5270,87627,3402,3496,54708,5484,4782,43311,2350,3222,27978,7498,68965,2904,5484,45677,4700,6444,39573,6804,6986,19285,2772,62811,1210,4698,47403,5418,5780,38570,5546,76469,2420,5302,51799,2646,5414,36501,3412,5546,18869,2412,54446,5276,6732,48422,6822,2900,28010,4826,92509,2394,5274,55883,6730,6820,47956,5812,2778,18779,2358,62615,5270,5450,46757,3492,5556,27318,4718,67887,2350,3222,52554,7498,3428,38252,5468,4700,31022,6444,64149,6804,6986,43861,2772,5338,35421,2650,70955,5418,5780,54954,5546,2740,38074,5302,2646,29991,3366,61011,3412,5546,43445,2412,5294,35406,6732,72998,6820,6996,52586,2778,2396,38045,5274,6698,23333,6820,64338,5812,2746,43355,2358,5270,39499,5450,79525,3492,5548],f=[1887,966732,967231,967733,968265,968766,969297,969798,970298,970829,971330,971830,972362,972863,973395,973896,974397,974928,975428,975929,976461,976962,977462,977994,978494,979026,979526,980026,980558,981059,981559,982091,982593,983124,983624,984124,984656,985157,985656,986189,986690,987191,987722,988222,988753,989254,989754,990286,990788,991288,991819,992319,992851,993352,993851,994383,994885,995385,995917,996418,996918,997450,997949,998481,998982,999483,1000014,1000515,1001016,1001548,1002047,1002578,1003080,1003580,1004111,1004613,1005113,1005645,1006146,1006645,1007177,1007678,1008209,1008710,1009211,1009743,1010243,1010743,1011275,1011775,1012306,1012807,1013308,1013840,1014341,1014841,1015373,1015874,1016404,1016905,1017405,1017937,1018438,1018939,1019471,1019972,1020471,1021002,1021503,1022035,1022535,1023036,1023568,1024069,1024568,1025100,1025601,1026102,1026633,1027133,1027666,1028167,1028666,1029198,1029699,1030199,1030730,1031231,1031763,1032264,1032764,1033296,1033797,1034297,1034828,1035329,1035830,1036362,1036861,1037393,1037894,1038394,1038925,1039427,1039927,1040459,1040959,1041491,1041992,1042492,1043023,1043524,1044024,1044556,1045057,1045558,1046090,1046590,1047121,1047622,1048122,1048654,1049154,1049655,1050187,1050689,1051219,1051720,1052220,1052751,1053252,1053752,1054284,1054786,1055285,1055817,1056317,1056849,1057349,1057850,1058382,1058883,1059383,1059915,1060415,1060947,1061447,1061947,1062479,1062981,1063480,1064012,1064514,1065014,1065545,1066045,1066577,1067078,1067578,1068110,1068611,1069112,1069642,1070142,1070674,1071175,1071675,1072207,1072709,1073209,1073740,1074241,1074741,1075273,1075773,1076305,1076807,1077308,1077839,1078340,1078840,1079372,1079871,1080403,1080904]},{\\\"../main\\\":571,\\\"object-assign\\\":454}],558:[function(t,e,r){var n=t(\\\"../main\\\"),i=t(\\\"object-assign\\\");function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}a.prototype=new n.baseCalendar,i(a.prototype,{name:\\\"Coptic\\\",jdEpoch:1825029.5,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Coptic\\\",epochs:[\\\"BAM\\\",\\\"AM\\\"],monthNames:[\\\"Thout\\\",\\\"Paopi\\\",\\\"Hathor\\\",\\\"Koiak\\\",\\\"Tobi\\\",\\\"Meshir\\\",\\\"Paremhat\\\",\\\"Paremoude\\\",\\\"Pashons\\\",\\\"Paoni\\\",\\\"Epip\\\",\\\"Mesori\\\",\\\"Pi Kogi Enavot\\\"],monthNamesShort:[\\\"Tho\\\",\\\"Pao\\\",\\\"Hath\\\",\\\"Koi\\\",\\\"Tob\\\",\\\"Mesh\\\",\\\"Pat\\\",\\\"Pad\\\",\\\"Pash\\\",\\\"Pao\\\",\\\"Epi\\\",\\\"Meso\\\",\\\"PiK\\\"],dayNames:[\\\"Tkyriaka\\\",\\\"Pesnau\\\",\\\"Pshoment\\\",\\\"Peftoou\\\",\\\"Ptiou\\\",\\\"Psoou\\\",\\\"Psabbaton\\\"],dayNamesShort:[\\\"Tky\\\",\\\"Pes\\\",\\\"Psh\\\",\\\"Pef\\\",\\\"Pti\\\",\\\"Pso\\\",\\\"Psa\\\"],dayNamesMin:[\\\"Tk\\\",\\\"Pes\\\",\\\"Psh\\\",\\\"Pef\\\",\\\"Pt\\\",\\\"Pso\\\",\\\"Psa\\\"],digits:null,dateFormat:\\\"dd/mm/yyyy\\\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==3||t%4==-1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[\\\"\\\"].invalidYear),13},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),\\\"d\\\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(13===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return(t=i.year())<0&&t++,i.day()+30*(i.month()-1)+365*(t-1)+Math.floor(t/4)+this.jdEpoch-1},fromJD:function(t){var e=Math.floor(t)+.5-this.jdEpoch,r=Math.floor((e-Math.floor((e+366)/1461))/365)+1;r<=0&&r--,e=Math.floor(t)+.5-this.newDate(r,1,1).toJD();var n=Math.floor(e/30)+1,i=e-30*(n-1)+1;return this.newDate(r,n,i)}}),n.calendars.coptic=a},{\\\"../main\\\":571,\\\"object-assign\\\":454}],559:[function(t,e,r){var n=t(\\\"../main\\\"),i=t(\\\"object-assign\\\");function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}a.prototype=new n.baseCalendar,i(a.prototype,{name:\\\"Discworld\\\",jdEpoch:1721425.5,daysPerMonth:[16,32,32,32,32,32,32,32,32,32,32,32,32],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Discworld\\\",epochs:[\\\"BUC\\\",\\\"UC\\\"],monthNames:[\\\"Ick\\\",\\\"Offle\\\",\\\"February\\\",\\\"March\\\",\\\"April\\\",\\\"May\\\",\\\"June\\\",\\\"Grune\\\",\\\"August\\\",\\\"Spune\\\",\\\"Sektober\\\",\\\"Ember\\\",\\\"December\\\"],monthNamesShort:[\\\"Ick\\\",\\\"Off\\\",\\\"Feb\\\",\\\"Mar\\\",\\\"Apr\\\",\\\"May\\\",\\\"Jun\\\",\\\"Gru\\\",\\\"Aug\\\",\\\"Spu\\\",\\\"Sek\\\",\\\"Emb\\\",\\\"Dec\\\"],dayNames:[\\\"Sunday\\\",\\\"Octeday\\\",\\\"Monday\\\",\\\"Tuesday\\\",\\\"Wednesday\\\",\\\"Thursday\\\",\\\"Friday\\\",\\\"Saturday\\\"],dayNamesShort:[\\\"Sun\\\",\\\"Oct\\\",\\\"Mon\\\",\\\"Tue\\\",\\\"Wed\\\",\\\"Thu\\\",\\\"Fri\\\",\\\"Sat\\\"],dayNamesMin:[\\\"Su\\\",\\\"Oc\\\",\\\"Mo\\\",\\\"Tu\\\",\\\"We\\\",\\\"Th\\\",\\\"Fr\\\",\\\"Sa\\\"],digits:null,dateFormat:\\\"yyyy/mm/dd\\\",firstDay:2,isRTL:!1}},leapYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),!1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),13},daysInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),400},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),\\\"d\\\"),Math.floor((n.dayOfYear()-1)/8)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]},daysInWeek:function(){return 8},dayOfWeek:function(t,e,r){return(this._validate(t,e,r,n.local.invalidDate).day()+1)%8},weekDay:function(t,e,r){var n=this.dayOfWeek(t,e,r);return n>=2&&n<=6},extraInfo:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return{century:o[Math.floor((i.year()-1)/100)+1]||\\\"\\\"}},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return t=i.year()+(i.year()<0?1:0),e=i.month(),(r=i.day())+(e>1?16:0)+(e>2?32*(e-2):0)+400*(t-1)+this.jdEpoch-1},fromJD:function(t){t=Math.floor(t+.5)-Math.floor(this.jdEpoch)-1;var e=Math.floor(t/400)+1;t-=400*(e-1),t+=t>15?16:0;var r=Math.floor(t/32)+1,n=t-32*(r-1)+1;return this.newDate(e<=0?e-1:e,r,n)}});var o={20:\\\"Fruitbat\\\",21:\\\"Anchovy\\\"};n.calendars.discworld=a},{\\\"../main\\\":571,\\\"object-assign\\\":454}],560:[function(t,e,r){var n=t(\\\"../main\\\"),i=t(\\\"object-assign\\\");function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}a.prototype=new n.baseCalendar,i(a.prototype,{name:\\\"Ethiopian\\\",jdEpoch:1724220.5,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Ethiopian\\\",epochs:[\\\"BEE\\\",\\\"EE\\\"],monthNames:[\\\"Meskerem\\\",\\\"Tikemet\\\",\\\"Hidar\\\",\\\"Tahesas\\\",\\\"Tir\\\",\\\"Yekatit\\\",\\\"Megabit\\\",\\\"Miazia\\\",\\\"Genbot\\\",\\\"Sene\\\",\\\"Hamle\\\",\\\"Nehase\\\",\\\"Pagume\\\"],monthNamesShort:[\\\"Mes\\\",\\\"Tik\\\",\\\"Hid\\\",\\\"Tah\\\",\\\"Tir\\\",\\\"Yek\\\",\\\"Meg\\\",\\\"Mia\\\",\\\"Gen\\\",\\\"Sen\\\",\\\"Ham\\\",\\\"Neh\\\",\\\"Pag\\\"],dayNames:[\\\"Ehud\\\",\\\"Segno\\\",\\\"Maksegno\\\",\\\"Irob\\\",\\\"Hamus\\\",\\\"Arb\\\",\\\"Kidame\\\"],dayNamesShort:[\\\"Ehu\\\",\\\"Seg\\\",\\\"Mak\\\",\\\"Iro\\\",\\\"Ham\\\",\\\"Arb\\\",\\\"Kid\\\"],dayNamesMin:[\\\"Eh\\\",\\\"Se\\\",\\\"Ma\\\",\\\"Ir\\\",\\\"Ha\\\",\\\"Ar\\\",\\\"Ki\\\"],digits:null,dateFormat:\\\"dd/mm/yyyy\\\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==3||t%4==-1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[\\\"\\\"].invalidYear),13},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),\\\"d\\\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(13===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return(t=i.year())<0&&t++,i.day()+30*(i.month()-1)+365*(t-1)+Math.floor(t/4)+this.jdEpoch-1},fromJD:function(t){var e=Math.floor(t)+.5-this.jdEpoch,r=Math.floor((e-Math.floor((e+366)/1461))/365)+1;r<=0&&r--,e=Math.floor(t)+.5-this.newDate(r,1,1).toJD();var n=Math.floor(e/30)+1,i=e-30*(n-1)+1;return this.newDate(r,n,i)}}),n.calendars.ethiopian=a},{\\\"../main\\\":571,\\\"object-assign\\\":454}],561:[function(t,e,r){var n=t(\\\"../main\\\"),i=t(\\\"object-assign\\\");function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}function o(t,e){return t-e*Math.floor(t/e)}a.prototype=new n.baseCalendar,i(a.prototype,{name:\\\"Hebrew\\\",jdEpoch:347995.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29,29],hasYearZero:!1,minMonth:1,firstMonth:7,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Hebrew\\\",epochs:[\\\"BAM\\\",\\\"AM\\\"],monthNames:[\\\"Nisan\\\",\\\"Iyar\\\",\\\"Sivan\\\",\\\"Tammuz\\\",\\\"Av\\\",\\\"Elul\\\",\\\"Tishrei\\\",\\\"Cheshvan\\\",\\\"Kislev\\\",\\\"Tevet\\\",\\\"Shevat\\\",\\\"Adar\\\",\\\"Adar II\\\"],monthNamesShort:[\\\"Nis\\\",\\\"Iya\\\",\\\"Siv\\\",\\\"Tam\\\",\\\"Av\\\",\\\"Elu\\\",\\\"Tis\\\",\\\"Che\\\",\\\"Kis\\\",\\\"Tev\\\",\\\"She\\\",\\\"Ada\\\",\\\"Ad2\\\"],dayNames:[\\\"Yom Rishon\\\",\\\"Yom Sheni\\\",\\\"Yom Shlishi\\\",\\\"Yom Revi'i\\\",\\\"Yom Chamishi\\\",\\\"Yom Shishi\\\",\\\"Yom Shabbat\\\"],dayNamesShort:[\\\"Ris\\\",\\\"She\\\",\\\"Shl\\\",\\\"Rev\\\",\\\"Cha\\\",\\\"Shi\\\",\\\"Sha\\\"],dayNamesMin:[\\\"Ri\\\",\\\"She\\\",\\\"Shl\\\",\\\"Re\\\",\\\"Ch\\\",\\\"Shi\\\",\\\"Sha\\\"],digits:null,dateFormat:\\\"dd/mm/yyyy\\\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return this._leapYear(e.year())},_leapYear:function(t){return o(7*(t=t<0?t+1:t)+1,19)<7},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),this._leapYear(t.year?t.year():t)?13:12},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),\\\"d\\\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){return t=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year(),this.toJD(-1===t?1:t+1,7,1)-this.toJD(t,7,1)},daysInMonth:function(t,e){return t.year&&(e=t.month(),t=t.year()),this._validate(t,e,this.minDay,n.local.invalidMonth),12===e&&this.leapYear(t)?30:8===e&&5===o(this.daysInYear(t),10)?30:9===e&&3===o(this.daysInYear(t),10)?29:this.daysPerMonth[e-1]},weekDay:function(t,e,r){return 6!==this.dayOfWeek(t,e,r)},extraInfo:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return{yearType:(this.leapYear(i)?\\\"embolismic\\\":\\\"common\\\")+\\\" \\\"+[\\\"deficient\\\",\\\"regular\\\",\\\"complete\\\"][this.daysInYear(i)%10-3]}},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);t=i.year(),e=i.month(),r=i.day();var a=t<=0?t+1:t,o=this.jdEpoch+this._delay1(a)+this._delay2(a)+r+1;if(e<7){for(var s=7;s<=this.monthsInYear(t);s++)o+=this.daysInMonth(t,s);for(s=1;s<e;s++)o+=this.daysInMonth(t,s)}else for(s=7;s<e;s++)o+=this.daysInMonth(t,s);return o},_delay1:function(t){var e=Math.floor((235*t-234)/19),r=12084+13753*e,n=29*e+Math.floor(r/25920);return o(3*(n+1),7)<3&&n++,n},_delay2:function(t){var e=this._delay1(t-1),r=this._delay1(t);return this._delay1(t+1)-r==356?2:r-e==382?1:0},fromJD:function(t){t=Math.floor(t)+.5;for(var e=Math.floor(98496*(t-this.jdEpoch)/35975351)-1;t>=this.toJD(-1===e?1:e+1,7,1);)e++;for(var r=t<this.toJD(e,1,1)?7:1;t>this.toJD(e,r,this.daysInMonth(e,r));)r++;var n=t-this.toJD(e,r,1)+1;return this.newDate(e,r,n)}}),n.calendars.hebrew=a},{\\\"../main\\\":571,\\\"object-assign\\\":454}],562:[function(t,e,r){var n=t(\\\"../main\\\"),i=t(\\\"object-assign\\\");function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}a.prototype=new n.baseCalendar,i(a.prototype,{name:\\\"Islamic\\\",jdEpoch:1948439.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Islamic\\\",epochs:[\\\"BH\\\",\\\"AH\\\"],monthNames:[\\\"Muharram\\\",\\\"Safar\\\",\\\"Rabi' al-awwal\\\",\\\"Rabi' al-thani\\\",\\\"Jumada al-awwal\\\",\\\"Jumada al-thani\\\",\\\"Rajab\\\",\\\"Sha'aban\\\",\\\"Ramadan\\\",\\\"Shawwal\\\",\\\"Dhu al-Qi'dah\\\",\\\"Dhu al-Hijjah\\\"],monthNamesShort:[\\\"Muh\\\",\\\"Saf\\\",\\\"Rab1\\\",\\\"Rab2\\\",\\\"Jum1\\\",\\\"Jum2\\\",\\\"Raj\\\",\\\"Sha'\\\",\\\"Ram\\\",\\\"Shaw\\\",\\\"DhuQ\\\",\\\"DhuH\\\"],dayNames:[\\\"Yawm al-ahad\\\",\\\"Yawm al-ithnayn\\\",\\\"Yawm ath-thulaathaa'\\\",\\\"Yawm al-arbi'aa'\\\",\\\"Yawm al-kham\\\\u012bs\\\",\\\"Yawm al-jum'a\\\",\\\"Yawm as-sabt\\\"],dayNamesShort:[\\\"Aha\\\",\\\"Ith\\\",\\\"Thu\\\",\\\"Arb\\\",\\\"Kha\\\",\\\"Jum\\\",\\\"Sab\\\"],dayNamesMin:[\\\"Ah\\\",\\\"It\\\",\\\"Th\\\",\\\"Ar\\\",\\\"Kh\\\",\\\"Ju\\\",\\\"Sa\\\"],digits:null,dateFormat:\\\"yyyy/mm/dd\\\",firstDay:6,isRTL:!1}},leapYear:function(t){return(11*this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year()+14)%30<11},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),\\\"d\\\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){return this.leapYear(t)?355:354},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return t=i.year(),e=i.month(),t=t<=0?t+1:t,(r=i.day())+Math.ceil(29.5*(e-1))+354*(t-1)+Math.floor((3+11*t)/30)+this.jdEpoch-1},fromJD:function(t){t=Math.floor(t)+.5;var e=Math.floor((30*(t-this.jdEpoch)+10646)/10631);e=e<=0?e-1:e;var r=Math.min(12,Math.ceil((t-29-this.toJD(e,1,1))/29.5)+1),n=t-this.toJD(e,r,1)+1;return this.newDate(e,r,n)}}),n.calendars.islamic=a},{\\\"../main\\\":571,\\\"object-assign\\\":454}],563:[function(t,e,r){var n=t(\\\"../main\\\"),i=t(\\\"object-assign\\\");function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}a.prototype=new n.baseCalendar,i(a.prototype,{name:\\\"Julian\\\",jdEpoch:1721423.5,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Julian\\\",epochs:[\\\"BC\\\",\\\"AD\\\"],monthNames:[\\\"January\\\",\\\"February\\\",\\\"March\\\",\\\"April\\\",\\\"May\\\",\\\"June\\\",\\\"July\\\",\\\"August\\\",\\\"September\\\",\\\"October\\\",\\\"November\\\",\\\"December\\\"],monthNamesShort:[\\\"Jan\\\",\\\"Feb\\\",\\\"Mar\\\",\\\"Apr\\\",\\\"May\\\",\\\"Jun\\\",\\\"Jul\\\",\\\"Aug\\\",\\\"Sep\\\",\\\"Oct\\\",\\\"Nov\\\",\\\"Dec\\\"],dayNames:[\\\"Sunday\\\",\\\"Monday\\\",\\\"Tuesday\\\",\\\"Wednesday\\\",\\\"Thursday\\\",\\\"Friday\\\",\\\"Saturday\\\"],dayNamesShort:[\\\"Sun\\\",\\\"Mon\\\",\\\"Tue\\\",\\\"Wed\\\",\\\"Thu\\\",\\\"Fri\\\",\\\"Sat\\\"],dayNamesMin:[\\\"Su\\\",\\\"Mo\\\",\\\"Tu\\\",\\\"We\\\",\\\"Th\\\",\\\"Fr\\\",\\\"Sa\\\"],digits:null,dateFormat:\\\"mm/dd/yyyy\\\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t=e.year()<0?e.year()+1:e.year())%4==0},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(4-(n.dayOfWeek()||7),\\\"d\\\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return t=i.year(),e=i.month(),r=i.day(),t<0&&t++,e<=2&&(t--,e+=12),Math.floor(365.25*(t+4716))+Math.floor(30.6001*(e+1))+r-1524.5},fromJD:function(t){var e=Math.floor(t+.5)+1524,r=Math.floor((e-122.1)/365.25),n=Math.floor(365.25*r),i=Math.floor((e-n)/30.6001),a=i-Math.floor(i<14?1:13),o=r-Math.floor(a>2?4716:4715),s=e-n-Math.floor(30.6001*i);return o<=0&&o--,this.newDate(o,a,s)}}),n.calendars.julian=a},{\\\"../main\\\":571,\\\"object-assign\\\":454}],564:[function(t,e,r){var n=t(\\\"../main\\\"),i=t(\\\"object-assign\\\");function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}function o(t,e){return t-e*Math.floor(t/e)}function s(t,e){return o(t-1,e)+1}a.prototype=new n.baseCalendar,i(a.prototype,{name:\\\"Mayan\\\",jdEpoch:584282.5,hasYearZero:!0,minMonth:0,firstMonth:0,minDay:0,regionalOptions:{\\\"\\\":{name:\\\"Mayan\\\",epochs:[\\\"\\\",\\\"\\\"],monthNames:[\\\"0\\\",\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"4\\\",\\\"5\\\",\\\"6\\\",\\\"7\\\",\\\"8\\\",\\\"9\\\",\\\"10\\\",\\\"11\\\",\\\"12\\\",\\\"13\\\",\\\"14\\\",\\\"15\\\",\\\"16\\\",\\\"17\\\"],monthNamesShort:[\\\"0\\\",\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"4\\\",\\\"5\\\",\\\"6\\\",\\\"7\\\",\\\"8\\\",\\\"9\\\",\\\"10\\\",\\\"11\\\",\\\"12\\\",\\\"13\\\",\\\"14\\\",\\\"15\\\",\\\"16\\\",\\\"17\\\"],dayNames:[\\\"0\\\",\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"4\\\",\\\"5\\\",\\\"6\\\",\\\"7\\\",\\\"8\\\",\\\"9\\\",\\\"10\\\",\\\"11\\\",\\\"12\\\",\\\"13\\\",\\\"14\\\",\\\"15\\\",\\\"16\\\",\\\"17\\\",\\\"18\\\",\\\"19\\\"],dayNamesShort:[\\\"0\\\",\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"4\\\",\\\"5\\\",\\\"6\\\",\\\"7\\\",\\\"8\\\",\\\"9\\\",\\\"10\\\",\\\"11\\\",\\\"12\\\",\\\"13\\\",\\\"14\\\",\\\"15\\\",\\\"16\\\",\\\"17\\\",\\\"18\\\",\\\"19\\\"],dayNamesMin:[\\\"0\\\",\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"4\\\",\\\"5\\\",\\\"6\\\",\\\"7\\\",\\\"8\\\",\\\"9\\\",\\\"10\\\",\\\"11\\\",\\\"12\\\",\\\"13\\\",\\\"14\\\",\\\"15\\\",\\\"16\\\",\\\"17\\\",\\\"18\\\",\\\"19\\\"],digits:null,dateFormat:\\\"YYYY.m.d\\\",firstDay:0,isRTL:!1,haabMonths:[\\\"Pop\\\",\\\"Uo\\\",\\\"Zip\\\",\\\"Zotz\\\",\\\"Tzec\\\",\\\"Xul\\\",\\\"Yaxkin\\\",\\\"Mol\\\",\\\"Chen\\\",\\\"Yax\\\",\\\"Zac\\\",\\\"Ceh\\\",\\\"Mac\\\",\\\"Kankin\\\",\\\"Muan\\\",\\\"Pax\\\",\\\"Kayab\\\",\\\"Cumku\\\",\\\"Uayeb\\\"],tzolkinMonths:[\\\"Imix\\\",\\\"Ik\\\",\\\"Akbal\\\",\\\"Kan\\\",\\\"Chicchan\\\",\\\"Cimi\\\",\\\"Manik\\\",\\\"Lamat\\\",\\\"Muluc\\\",\\\"Oc\\\",\\\"Chuen\\\",\\\"Eb\\\",\\\"Ben\\\",\\\"Ix\\\",\\\"Men\\\",\\\"Cib\\\",\\\"Caban\\\",\\\"Etznab\\\",\\\"Cauac\\\",\\\"Ahau\\\"]}},leapYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),!1},formatYear:function(t){t=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year();var e=Math.floor(t/400);return t%=400,t+=t<0?400:0,e+\\\".\\\"+Math.floor(t/20)+\\\".\\\"+t%20},forYear:function(t){if((t=t.split(\\\".\\\")).length<3)throw\\\"Invalid Mayan year\\\";for(var e=0,r=0;r<t.length;r++){var n=parseInt(t[r],10);if(Math.abs(n)>19||r>0&&n<0)throw\\\"Invalid Mayan year\\\";e=20*e+n}return e},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),18},weekOfYear:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate),0},daysInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),360},daysInMonth:function(t,e){return this._validate(t,e,this.minDay,n.local.invalidMonth),20},daysInWeek:function(){return 5},dayOfWeek:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate).day()},weekDay:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate),!0},extraInfo:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate).toJD(),a=this._toHaab(i),o=this._toTzolkin(i);return{haabMonthName:this.local.haabMonths[a[0]-1],haabMonth:a[0],haabDay:a[1],tzolkinDayName:this.local.tzolkinMonths[o[0]-1],tzolkinDay:o[0],tzolkinTrecena:o[1]}},_toHaab:function(t){var e=o((t-=this.jdEpoch)+8+340,365);return[Math.floor(e/20)+1,o(e,20)]},_toTzolkin:function(t){return[s((t-=this.jdEpoch)+20,20),s(t+4,13)]},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);return i.day()+20*i.month()+360*i.year()+this.jdEpoch},fromJD:function(t){t=Math.floor(t)+.5-this.jdEpoch;var e=Math.floor(t/360);t%=360,t+=t<0?360:0;var r=Math.floor(t/20),n=t%20;return this.newDate(e,r,n)}}),n.calendars.mayan=a},{\\\"../main\\\":571,\\\"object-assign\\\":454}],565:[function(t,e,r){var n=t(\\\"../main\\\"),i=t(\\\"object-assign\\\");function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}a.prototype=new n.baseCalendar;var o=n.instance(\\\"gregorian\\\");i(a.prototype,{name:\\\"Nanakshahi\\\",jdEpoch:2257673.5,daysPerMonth:[31,31,31,31,31,30,30,30,30,30,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Nanakshahi\\\",epochs:[\\\"BN\\\",\\\"AN\\\"],monthNames:[\\\"Chet\\\",\\\"Vaisakh\\\",\\\"Jeth\\\",\\\"Harh\\\",\\\"Sawan\\\",\\\"Bhadon\\\",\\\"Assu\\\",\\\"Katak\\\",\\\"Maghar\\\",\\\"Poh\\\",\\\"Magh\\\",\\\"Phagun\\\"],monthNamesShort:[\\\"Che\\\",\\\"Vai\\\",\\\"Jet\\\",\\\"Har\\\",\\\"Saw\\\",\\\"Bha\\\",\\\"Ass\\\",\\\"Kat\\\",\\\"Mgr\\\",\\\"Poh\\\",\\\"Mgh\\\",\\\"Pha\\\"],dayNames:[\\\"Somvaar\\\",\\\"Mangalvar\\\",\\\"Budhvaar\\\",\\\"Veervaar\\\",\\\"Shukarvaar\\\",\\\"Sanicharvaar\\\",\\\"Etvaar\\\"],dayNamesShort:[\\\"Som\\\",\\\"Mangal\\\",\\\"Budh\\\",\\\"Veer\\\",\\\"Shukar\\\",\\\"Sanichar\\\",\\\"Et\\\"],dayNamesMin:[\\\"So\\\",\\\"Ma\\\",\\\"Bu\\\",\\\"Ve\\\",\\\"Sh\\\",\\\"Sa\\\",\\\"Et\\\"],digits:null,dateFormat:\\\"dd-mm-yyyy\\\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[\\\"\\\"].invalidYear);return o.leapYear(e.year()+(e.year()<1?1:0)+1469)},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(1-(n.dayOfWeek()||7),\\\"d\\\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidMonth);(t=i.year())<0&&t++;for(var a=i.day(),s=1;s<i.month();s++)a+=this.daysPerMonth[s-1];return a+o.toJD(t+1468,3,13)},fromJD:function(t){t=Math.floor(t+.5);for(var e=Math.floor((t-(this.jdEpoch-1))/366);t>=this.toJD(e+1,1,1);)e++;for(var r=t-Math.floor(this.toJD(e,1,1)+.5)+1,n=1;r>this.daysInMonth(e,n);)r-=this.daysInMonth(e,n),n++;return this.newDate(e,n,r)}}),n.calendars.nanakshahi=a},{\\\"../main\\\":571,\\\"object-assign\\\":454}],566:[function(t,e,r){var n=t(\\\"../main\\\"),i=t(\\\"object-assign\\\");function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}a.prototype=new n.baseCalendar,i(a.prototype,{name:\\\"Nepali\\\",jdEpoch:1700709.5,daysPerMonth:[31,31,32,32,31,30,30,29,30,29,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,daysPerYear:365,regionalOptions:{\\\"\\\":{name:\\\"Nepali\\\",epochs:[\\\"BBS\\\",\\\"ABS\\\"],monthNames:[\\\"Baisakh\\\",\\\"Jestha\\\",\\\"Ashadh\\\",\\\"Shrawan\\\",\\\"Bhadra\\\",\\\"Ashwin\\\",\\\"Kartik\\\",\\\"Mangsir\\\",\\\"Paush\\\",\\\"Mangh\\\",\\\"Falgun\\\",\\\"Chaitra\\\"],monthNamesShort:[\\\"Bai\\\",\\\"Je\\\",\\\"As\\\",\\\"Shra\\\",\\\"Bha\\\",\\\"Ash\\\",\\\"Kar\\\",\\\"Mang\\\",\\\"Pau\\\",\\\"Ma\\\",\\\"Fal\\\",\\\"Chai\\\"],dayNames:[\\\"Aaitabaar\\\",\\\"Sombaar\\\",\\\"Manglbaar\\\",\\\"Budhabaar\\\",\\\"Bihibaar\\\",\\\"Shukrabaar\\\",\\\"Shanibaar\\\"],dayNamesShort:[\\\"Aaita\\\",\\\"Som\\\",\\\"Mangl\\\",\\\"Budha\\\",\\\"Bihi\\\",\\\"Shukra\\\",\\\"Shani\\\"],dayNamesMin:[\\\"Aai\\\",\\\"So\\\",\\\"Man\\\",\\\"Bu\\\",\\\"Bi\\\",\\\"Shu\\\",\\\"Sha\\\"],digits:null,dateFormat:\\\"dd/mm/yyyy\\\",firstDay:1,isRTL:!1}},leapYear:function(t){return this.daysInYear(t)!==this.daysPerYear},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),\\\"d\\\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){if(t=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year(),\\\"undefined\\\"==typeof this.NEPALI_CALENDAR_DATA[t])return this.daysPerYear;for(var e=0,r=this.minMonth;r<=12;r++)e+=this.NEPALI_CALENDAR_DATA[t][r];return e},daysInMonth:function(t,e){return t.year&&(e=t.month(),t=t.year()),this._validate(t,e,this.minDay,n.local.invalidMonth),\\\"undefined\\\"==typeof this.NEPALI_CALENDAR_DATA[t]?this.daysPerMonth[e-1]:this.NEPALI_CALENDAR_DATA[t][e]},weekDay:function(t,e,r){return 6!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);t=i.year(),e=i.month(),r=i.day();var a=n.instance(),o=0,s=e,l=t;this._createMissingCalendarData(t);var c=t-(s>9||9===s&&r>=this.NEPALI_CALENDAR_DATA[l][0]?56:57);for(9!==e&&(o=r,s--);9!==s;)s<=0&&(s=12,l--),o+=this.NEPALI_CALENDAR_DATA[l][s],s--;return 9===e?(o+=r-this.NEPALI_CALENDAR_DATA[l][0])<0&&(o+=a.daysInYear(c)):o+=this.NEPALI_CALENDAR_DATA[l][9]-this.NEPALI_CALENDAR_DATA[l][0],a.newDate(c,1,1).add(o,\\\"d\\\").toJD()},fromJD:function(t){var e=n.instance().fromJD(t),r=e.year(),i=e.dayOfYear(),a=r+56;this._createMissingCalendarData(a);for(var o=9,s=this.NEPALI_CALENDAR_DATA[a][0],l=this.NEPALI_CALENDAR_DATA[a][o]-s+1;i>l;)++o>12&&(o=1,a++),l+=this.NEPALI_CALENDAR_DATA[a][o];var c=this.NEPALI_CALENDAR_DATA[a][o]-(l-i);return this.newDate(a,o,c)},_createMissingCalendarData:function(t){var e=this.daysPerMonth.slice(0);e.unshift(17);for(var r=t-1;r<t+2;r++)\\\"undefined\\\"==typeof this.NEPALI_CALENDAR_DATA[r]&&(this.NEPALI_CALENDAR_DATA[r]=e)},NEPALI_CALENDAR_DATA:{1970:[18,31,31,32,31,31,31,30,29,30,29,30,30],1971:[18,31,31,32,31,32,30,30,29,30,29,30,30],1972:[17,31,32,31,32,31,30,30,30,29,29,30,30],1973:[19,30,32,31,32,31,30,30,30,29,30,29,31],1974:[19,31,31,32,30,31,31,30,29,30,29,30,30],1975:[18,31,31,32,32,30,31,30,29,30,29,30,30],1976:[17,31,32,31,32,31,30,30,30,29,29,30,31],1977:[18,31,32,31,32,31,31,29,30,29,30,29,31],1978:[18,31,31,32,31,31,31,30,29,30,29,30,30],1979:[18,31,31,32,32,31,30,30,29,30,29,30,30],1980:[17,31,32,31,32,31,30,30,30,29,29,30,31],1981:[18,31,31,31,32,31,31,29,30,30,29,30,30],1982:[18,31,31,32,31,31,31,30,29,30,29,30,30],1983:[18,31,31,32,32,31,30,30,29,30,29,30,30],1984:[17,31,32,31,32,31,30,30,30,29,29,30,31],1985:[18,31,31,31,32,31,31,29,30,30,29,30,30],1986:[18,31,31,32,31,31,31,30,29,30,29,30,30],1987:[18,31,32,31,32,31,30,30,29,30,29,30,30],1988:[17,31,32,31,32,31,30,30,30,29,29,30,31],1989:[18,31,31,31,32,31,31,30,29,30,29,30,30],1990:[18,31,31,32,31,31,31,30,29,30,29,30,30],1991:[18,31,32,31,32,31,30,30,29,30,29,30,30],1992:[17,31,32,31,32,31,30,30,30,29,30,29,31],1993:[18,31,31,31,32,31,31,30,29,30,29,30,30],1994:[18,31,31,32,31,31,31,30,29,30,29,30,30],1995:[17,31,32,31,32,31,30,30,30,29,29,30,30],1996:[17,31,32,31,32,31,30,30,30,29,30,29,31],1997:[18,31,31,32,31,31,31,30,29,30,29,30,30],1998:[18,31,31,32,31,31,31,30,29,30,29,30,30],1999:[17,31,32,31,32,31,30,30,30,29,29,30,31],2000:[17,30,32,31,32,31,30,30,30,29,30,29,31],2001:[18,31,31,32,31,31,31,30,29,30,29,30,30],2002:[18,31,31,32,32,31,30,30,29,30,29,30,30],2003:[17,31,32,31,32,31,30,30,30,29,29,30,31],2004:[17,30,32,31,32,31,30,30,30,29,30,29,31],2005:[18,31,31,32,31,31,31,30,29,30,29,30,30],2006:[18,31,31,32,32,31,30,30,29,30,29,30,30],2007:[17,31,32,31,32,31,30,30,30,29,29,30,31],2008:[17,31,31,31,32,31,31,29,30,30,29,29,31],2009:[18,31,31,32,31,31,31,30,29,30,29,30,30],2010:[18,31,31,32,32,31,30,30,29,30,29,30,30],2011:[17,31,32,31,32,31,30,30,30,29,29,30,31],2012:[17,31,31,31,32,31,31,29,30,30,29,30,30],2013:[18,31,31,32,31,31,31,30,29,30,29,30,30],2014:[18,31,31,32,32,31,30,30,29,30,29,30,30],2015:[17,31,32,31,32,31,30,30,30,29,29,30,31],2016:[17,31,31,31,32,31,31,29,30,30,29,30,30],2017:[18,31,31,32,31,31,31,30,29,30,29,30,30],2018:[18,31,32,31,32,31,30,30,29,30,29,30,30],2019:[17,31,32,31,32,31,30,30,30,29,30,29,31],2020:[17,31,31,31,32,31,31,30,29,30,29,30,30],2021:[18,31,31,32,31,31,31,30,29,30,29,30,30],2022:[17,31,32,31,32,31,30,30,30,29,29,30,30],2023:[17,31,32,31,32,31,30,30,30,29,30,29,31],2024:[17,31,31,31,32,31,31,30,29,30,29,30,30],2025:[18,31,31,32,31,31,31,30,29,30,29,30,30],2026:[17,31,32,31,32,31,30,30,30,29,29,30,31],2027:[17,30,32,31,32,31,30,30,30,29,30,29,31],2028:[17,31,31,32,31,31,31,30,29,30,29,30,30],2029:[18,31,31,32,31,32,30,30,29,30,29,30,30],2030:[17,31,32,31,32,31,30,30,30,30,30,30,31],2031:[17,31,32,31,32,31,31,31,31,31,31,31,31],2032:[17,32,32,32,32,32,32,32,32,32,32,32,32],2033:[18,31,31,32,32,31,30,30,29,30,29,30,30],2034:[17,31,32,31,32,31,30,30,30,29,29,30,31],2035:[17,30,32,31,32,31,31,29,30,30,29,29,31],2036:[17,31,31,32,31,31,31,30,29,30,29,30,30],2037:[18,31,31,32,32,31,30,30,29,30,29,30,30],2038:[17,31,32,31,32,31,30,30,30,29,29,30,31],2039:[17,31,31,31,32,31,31,29,30,30,29,30,30],2040:[17,31,31,32,31,31,31,30,29,30,29,30,30],2041:[18,31,31,32,32,31,30,30,29,30,29,30,30],2042:[17,31,32,31,32,31,30,30,30,29,29,30,31],2043:[17,31,31,31,32,31,31,29,30,30,29,30,30],2044:[17,31,31,32,31,31,31,30,29,30,29,30,30],2045:[18,31,32,31,32,31,30,30,29,30,29,30,30],2046:[17,31,32,31,32,31,30,30,30,29,29,30,31],2047:[17,31,31,31,32,31,31,30,29,30,29,30,30],2048:[17,31,31,32,31,31,31,30,29,30,29,30,30],2049:[17,31,32,31,32,31,30,30,30,29,29,30,30],2050:[17,31,32,31,32,31,30,30,30,29,30,29,31],2051:[17,31,31,31,32,31,31,30,29,30,29,30,30],2052:[17,31,31,32,31,31,31,30,29,30,29,30,30],2053:[17,31,32,31,32,31,30,30,30,29,29,30,30],2054:[17,31,32,31,32,31,30,30,30,29,30,29,31],2055:[17,31,31,32,31,31,31,30,29,30,30,29,30],2056:[17,31,31,32,31,32,30,30,29,30,29,30,30],2057:[17,31,32,31,32,31,30,30,30,29,29,30,31],2058:[17,30,32,31,32,31,30,30,30,29,30,29,31],2059:[17,31,31,32,31,31,31,30,29,30,29,30,30],2060:[17,31,31,32,32,31,30,30,29,30,29,30,30],2061:[17,31,32,31,32,31,30,30,30,29,29,30,31],2062:[17,30,32,31,32,31,31,29,30,29,30,29,31],2063:[17,31,31,32,31,31,31,30,29,30,29,30,30],2064:[17,31,31,32,32,31,30,30,29,30,29,30,30],2065:[17,31,32,31,32,31,30,30,30,29,29,30,31],2066:[17,31,31,31,32,31,31,29,30,30,29,29,31],2067:[17,31,31,32,31,31,31,30,29,30,29,30,30],2068:[17,31,31,32,32,31,30,30,29,30,29,30,30],2069:[17,31,32,31,32,31,30,30,30,29,29,30,31],2070:[17,31,31,31,32,31,31,29,30,30,29,30,30],2071:[17,31,31,32,31,31,31,30,29,30,29,30,30],2072:[17,31,32,31,32,31,30,30,29,30,29,30,30],2073:[17,31,32,31,32,31,30,30,30,29,29,30,31],2074:[17,31,31,31,32,31,31,30,29,30,29,30,30],2075:[17,31,31,32,31,31,31,30,29,30,29,30,30],2076:[16,31,32,31,32,31,30,30,30,29,29,30,30],2077:[17,31,32,31,32,31,30,30,30,29,30,29,31],2078:[17,31,31,31,32,31,31,30,29,30,29,30,30],2079:[17,31,31,32,31,31,31,30,29,30,29,30,30],2080:[16,31,32,31,32,31,30,30,30,29,29,30,30],2081:[17,31,31,32,32,31,30,30,30,29,30,30,30],2082:[17,31,32,31,32,31,30,30,30,29,30,30,30],2083:[17,31,31,32,31,31,30,30,30,29,30,30,30],2084:[17,31,31,32,31,31,30,30,30,29,30,30,30],2085:[17,31,32,31,32,31,31,30,30,29,30,30,30],2086:[17,31,32,31,32,31,30,30,30,29,30,30,30],2087:[16,31,31,32,31,31,31,30,30,29,30,30,30],2088:[16,30,31,32,32,30,31,30,30,29,30,30,30],2089:[17,31,32,31,32,31,30,30,30,29,30,30,30],2090:[17,31,32,31,32,31,30,30,30,29,30,30,30],2091:[16,31,31,32,31,31,31,30,30,29,30,30,30],2092:[16,31,31,32,32,31,30,30,30,29,30,30,30],2093:[17,31,32,31,32,31,30,30,30,29,30,30,30],2094:[17,31,31,32,31,31,30,30,30,29,30,30,30],2095:[17,31,31,32,31,31,31,30,29,30,30,30,30],2096:[17,30,31,32,32,31,30,30,29,30,29,30,30],2097:[17,31,32,31,32,31,30,30,30,29,30,30,30],2098:[17,31,31,32,31,31,31,29,30,29,30,30,31],2099:[17,31,31,32,31,31,31,30,29,29,30,30,30],2100:[17,31,32,31,32,30,31,30,29,30,29,30,30]}}),n.calendars.nepali=a},{\\\"../main\\\":571,\\\"object-assign\\\":454}],567:[function(t,e,r){var n=t(\\\"../main\\\"),i=t(\\\"object-assign\\\");function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}function o(t,e){return t-e*Math.floor(t/e)}a.prototype=new n.baseCalendar,i(a.prototype,{name:\\\"Persian\\\",jdEpoch:1948320.5,daysPerMonth:[31,31,31,31,31,31,30,30,30,30,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Persian\\\",epochs:[\\\"BP\\\",\\\"AP\\\"],monthNames:[\\\"Farvardin\\\",\\\"Ordibehesht\\\",\\\"Khordad\\\",\\\"Tir\\\",\\\"Mordad\\\",\\\"Shahrivar\\\",\\\"Mehr\\\",\\\"Aban\\\",\\\"Azar\\\",\\\"Day\\\",\\\"Bahman\\\",\\\"Esfand\\\"],monthNamesShort:[\\\"Far\\\",\\\"Ord\\\",\\\"Kho\\\",\\\"Tir\\\",\\\"Mor\\\",\\\"Sha\\\",\\\"Meh\\\",\\\"Aba\\\",\\\"Aza\\\",\\\"Day\\\",\\\"Bah\\\",\\\"Esf\\\"],dayNames:[\\\"Yekshambe\\\",\\\"Doshambe\\\",\\\"Seshambe\\\",\\\"Ch\\\\xe6harshambe\\\",\\\"Panjshambe\\\",\\\"Jom'e\\\",\\\"Shambe\\\"],dayNamesShort:[\\\"Yek\\\",\\\"Do\\\",\\\"Se\\\",\\\"Ch\\\\xe6\\\",\\\"Panj\\\",\\\"Jom\\\",\\\"Sha\\\"],dayNamesMin:[\\\"Ye\\\",\\\"Do\\\",\\\"Se\\\",\\\"Ch\\\",\\\"Pa\\\",\\\"Jo\\\",\\\"Sh\\\"],digits:null,dateFormat:\\\"yyyy/mm/dd\\\",firstDay:6,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return 682*((e.year()-(e.year()>0?474:473))%2820+474+38)%2816<682},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-(n.dayOfWeek()+1)%7,\\\"d\\\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);t=i.year(),e=i.month(),r=i.day();var a=t-(t>=0?474:473),s=474+o(a,2820);return r+(e<=7?31*(e-1):30*(e-1)+6)+Math.floor((682*s-110)/2816)+365*(s-1)+1029983*Math.floor(a/2820)+this.jdEpoch-1},fromJD:function(t){var e=(t=Math.floor(t)+.5)-this.toJD(475,1,1),r=Math.floor(e/1029983),n=o(e,1029983),i=2820;if(1029982!==n){var a=Math.floor(n/366),s=o(n,366);i=Math.floor((2134*a+2816*s+2815)/1028522)+a+1}var l=i+2820*r+474;l=l<=0?l-1:l;var c=t-this.toJD(l,1,1)+1,u=c<=186?Math.ceil(c/31):Math.ceil((c-6)/30),h=t-this.toJD(l,u,1)+1;return this.newDate(l,u,h)}}),n.calendars.persian=a,n.calendars.jalali=a},{\\\"../main\\\":571,\\\"object-assign\\\":454}],568:[function(t,e,r){var n=t(\\\"../main\\\"),i=t(\\\"object-assign\\\"),a=n.instance();function o(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}o.prototype=new n.baseCalendar,i(o.prototype,{name:\\\"Taiwan\\\",jdEpoch:2419402.5,yearsOffset:1911,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Taiwan\\\",epochs:[\\\"BROC\\\",\\\"ROC\\\"],monthNames:[\\\"January\\\",\\\"February\\\",\\\"March\\\",\\\"April\\\",\\\"May\\\",\\\"June\\\",\\\"July\\\",\\\"August\\\",\\\"September\\\",\\\"October\\\",\\\"November\\\",\\\"December\\\"],monthNamesShort:[\\\"Jan\\\",\\\"Feb\\\",\\\"Mar\\\",\\\"Apr\\\",\\\"May\\\",\\\"Jun\\\",\\\"Jul\\\",\\\"Aug\\\",\\\"Sep\\\",\\\"Oct\\\",\\\"Nov\\\",\\\"Dec\\\"],dayNames:[\\\"Sunday\\\",\\\"Monday\\\",\\\"Tuesday\\\",\\\"Wednesday\\\",\\\"Thursday\\\",\\\"Friday\\\",\\\"Saturday\\\"],dayNamesShort:[\\\"Sun\\\",\\\"Mon\\\",\\\"Tue\\\",\\\"Wed\\\",\\\"Thu\\\",\\\"Fri\\\",\\\"Sat\\\"],dayNamesMin:[\\\"Su\\\",\\\"Mo\\\",\\\"Tu\\\",\\\"We\\\",\\\"Th\\\",\\\"Fr\\\",\\\"Sa\\\"],digits:null,dateFormat:\\\"yyyy/mm/dd\\\",firstDay:1,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);t=this._t2gYear(e.year());return a.leapYear(t)},weekOfYear:function(t,e,r){var i=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);t=this._t2gYear(i.year());return a.weekOfYear(t,i.month(),i.day())},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);t=this._t2gYear(i.year());return a.toJD(t,i.month(),i.day())},fromJD:function(t){var e=a.fromJD(t),r=this._g2tYear(e.year());return this.newDate(r,e.month(),e.day())},_t2gYear:function(t){return t+this.yearsOffset+(t>=-this.yearsOffset&&t<=-1?1:0)},_g2tYear:function(t){return t-this.yearsOffset-(t>=1&&t<=this.yearsOffset?1:0)}}),n.calendars.taiwan=o},{\\\"../main\\\":571,\\\"object-assign\\\":454}],569:[function(t,e,r){var n=t(\\\"../main\\\"),i=t(\\\"object-assign\\\"),a=n.instance();function o(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}o.prototype=new n.baseCalendar,i(o.prototype,{name:\\\"Thai\\\",jdEpoch:1523098.5,yearsOffset:543,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Thai\\\",epochs:[\\\"BBE\\\",\\\"BE\\\"],monthNames:[\\\"January\\\",\\\"February\\\",\\\"March\\\",\\\"April\\\",\\\"May\\\",\\\"June\\\",\\\"July\\\",\\\"August\\\",\\\"September\\\",\\\"October\\\",\\\"November\\\",\\\"December\\\"],monthNamesShort:[\\\"Jan\\\",\\\"Feb\\\",\\\"Mar\\\",\\\"Apr\\\",\\\"May\\\",\\\"Jun\\\",\\\"Jul\\\",\\\"Aug\\\",\\\"Sep\\\",\\\"Oct\\\",\\\"Nov\\\",\\\"Dec\\\"],dayNames:[\\\"Sunday\\\",\\\"Monday\\\",\\\"Tuesday\\\",\\\"Wednesday\\\",\\\"Thursday\\\",\\\"Friday\\\",\\\"Saturday\\\"],dayNamesShort:[\\\"Sun\\\",\\\"Mon\\\",\\\"Tue\\\",\\\"Wed\\\",\\\"Thu\\\",\\\"Fri\\\",\\\"Sat\\\"],dayNamesMin:[\\\"Su\\\",\\\"Mo\\\",\\\"Tu\\\",\\\"We\\\",\\\"Th\\\",\\\"Fr\\\",\\\"Sa\\\"],digits:null,dateFormat:\\\"dd/mm/yyyy\\\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);t=this._t2gYear(e.year());return a.leapYear(t)},weekOfYear:function(t,e,r){var i=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);t=this._t2gYear(i.year());return a.weekOfYear(t,i.month(),i.day())},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate);t=this._t2gYear(i.year());return a.toJD(t,i.month(),i.day())},fromJD:function(t){var e=a.fromJD(t),r=this._g2tYear(e.year());return this.newDate(r,e.month(),e.day())},_t2gYear:function(t){return t-this.yearsOffset-(t>=1&&t<=this.yearsOffset?1:0)},_g2tYear:function(t){return t+this.yearsOffset+(t>=-this.yearsOffset&&t<=-1?1:0)}}),n.calendars.thai=o},{\\\"../main\\\":571,\\\"object-assign\\\":454}],570:[function(t,e,r){var n=t(\\\"../main\\\"),i=t(\\\"object-assign\\\");function a(t){this.local=this.regionalOptions[t||\\\"\\\"]||this.regionalOptions[\\\"\\\"]}a.prototype=new n.baseCalendar,i(a.prototype,{name:\\\"UmmAlQura\\\",hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Umm al-Qura\\\",epochs:[\\\"BH\\\",\\\"AH\\\"],monthNames:[\\\"Al-Muharram\\\",\\\"Safar\\\",\\\"Rabi' al-awwal\\\",\\\"Rabi' Al-Thani\\\",\\\"Jumada Al-Awwal\\\",\\\"Jumada Al-Thani\\\",\\\"Rajab\\\",\\\"Sha'aban\\\",\\\"Ramadan\\\",\\\"Shawwal\\\",\\\"Dhu al-Qi'dah\\\",\\\"Dhu al-Hijjah\\\"],monthNamesShort:[\\\"Muh\\\",\\\"Saf\\\",\\\"Rab1\\\",\\\"Rab2\\\",\\\"Jum1\\\",\\\"Jum2\\\",\\\"Raj\\\",\\\"Sha'\\\",\\\"Ram\\\",\\\"Shaw\\\",\\\"DhuQ\\\",\\\"DhuH\\\"],dayNames:[\\\"Yawm al-Ahad\\\",\\\"Yawm al-Ithnain\\\",\\\"Yawm al-Thal\\\\u0101th\\\\u0101\\\\u2019\\\",\\\"Yawm al-Arba\\\\u2018\\\\u0101\\\\u2019\\\",\\\"Yawm al-Kham\\\\u012bs\\\",\\\"Yawm al-Jum\\\\u2018a\\\",\\\"Yawm al-Sabt\\\"],dayNamesMin:[\\\"Ah\\\",\\\"Ith\\\",\\\"Th\\\",\\\"Ar\\\",\\\"Kh\\\",\\\"Ju\\\",\\\"Sa\\\"],digits:null,dateFormat:\\\"yyyy/mm/dd\\\",firstDay:6,isRTL:!0}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return 355===this.daysInYear(e.year())},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),\\\"d\\\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){for(var e=0,r=1;r<=12;r++)e+=this.daysInMonth(t,r);return e},daysInMonth:function(t,e){for(var r=this._validate(t,e,this.minDay,n.local.invalidMonth).toJD()-24e5+.5,i=0,a=0;a<o.length;a++){if(o[a]>r)return o[i]-o[i-1];i++}return 30},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i=this._validate(t,e,r,n.local.invalidDate),a=12*(i.year()-1)+i.month()-15292;return i.day()+o[a-1]-1+24e5-.5},fromJD:function(t){for(var e=t-24e5+.5,r=0,n=0;n<o.length&&!(o[n]>e);n++)r++;var i=r+15292,a=Math.floor((i-1)/12),s=a+1,l=i-12*a,c=e-o[r-1]+1;return this.newDate(s,l,c)},isValid:function(t,e,r){var i=n.baseCalendar.prototype.isValid.apply(this,arguments);return i&&(i=(t=null!=t.year?t.year:t)>=1276&&t<=1500),i},_validate:function(t,e,r,i){var a=n.baseCalendar.prototype._validate.apply(this,arguments);if(a.year<1276||a.year>1500)throw i.replace(/\\\\{0\\\\}/,this.local.name);return a}}),n.calendars.ummalqura=a;var o=[20,50,79,109,138,168,197,227,256,286,315,345,374,404,433,463,492,522,551,581,611,641,670,700,729,759,788,818,847,877,906,936,965,995,1024,1054,1083,1113,1142,1172,1201,1231,1260,1290,1320,1350,1379,1409,1438,1468,1497,1527,1556,1586,1615,1645,1674,1704,1733,1763,1792,1822,1851,1881,1910,1940,1969,1999,2028,2058,2087,2117,2146,2176,2205,2235,2264,2294,2323,2353,2383,2413,2442,2472,2501,2531,2560,2590,2619,2649,2678,2708,2737,2767,2796,2826,2855,2885,2914,2944,2973,3003,3032,3062,3091,3121,3150,3180,3209,3239,3268,3298,3327,3357,3386,3416,3446,3476,3505,3535,3564,3594,3623,3653,3682,3712,3741,3771,3800,3830,3859,3889,3918,3948,3977,4007,4036,4066,4095,4125,4155,4185,4214,4244,4273,4303,4332,4362,4391,4421,4450,4480,4509,4539,4568,4598,4627,4657,4686,4716,4745,4775,4804,4834,4863,4893,4922,4952,4981,5011,5040,5070,5099,5129,5158,5188,5218,5248,5277,5307,5336,5366,5395,5425,5454,5484,5513,5543,5572,5602,5631,5661,5690,5720,5749,5779,5808,5838,5867,5897,5926,5956,5985,6015,6044,6074,6103,6133,6162,6192,6221,6251,6281,6311,6340,6370,6399,6429,6458,6488,6517,6547,6576,6606,6635,6665,6694,6724,6753,6783,6812,6842,6871,6901,6930,6960,6989,7019,7048,7078,7107,7137,7166,7196,7225,7255,7284,7314,7344,7374,7403,7433,7462,7492,7521,7551,7580,7610,7639,7669,7698,7728,7757,7787,7816,7846,7875,7905,7934,7964,7993,8023,8053,8083,8112,8142,8171,8201,8230,8260,8289,8319,8348,8378,8407,8437,8466,8496,8525,8555,8584,8614,8643,8673,8702,8732,8761,8791,8821,8850,8880,8909,8938,8968,8997,9027,9056,9086,9115,9145,9175,9205,9234,9264,9293,9322,9352,9381,9410,9440,9470,9499,9529,9559,9589,9618,9648,9677,9706,9736,9765,9794,9824,9853,9883,9913,9943,9972,10002,10032,10061,10090,10120,10149,10178,10208,10237,10267,10297,10326,10356,10386,10415,10445,10474,10504,10533,10562,10592,10621,10651,10680,10710,10740,10770,10799,10829,10858,10888,10917,10947,10976,11005,11035,11064,11094,11124,11153,11183,11213,11242,11272,11301,11331,11360,11389,11419,11448,11478,11507,11537,11567,11596,11626,11655,11685,11715,11744,11774,11803,11832,11862,11891,11921,11950,11980,12010,12039,12069,12099,12128,12158,12187,12216,12246,12275,12304,12334,12364,12393,12423,12453,12483,12512,12542,12571,12600,12630,12659,12688,12718,12747,12777,12807,12837,12866,12896,12926,12955,12984,13014,13043,13072,13102,13131,13161,13191,13220,13250,13280,13310,13339,13368,13398,13427,13456,13486,13515,13545,13574,13604,13634,13664,13693,13723,13752,13782,13811,13840,13870,13899,13929,13958,13988,14018,14047,14077,14107,14136,14166,14195,14224,14254,14283,14313,14342,14372,14401,14431,14461,14490,14520,14550,14579,14609,14638,14667,14697,14726,14756,14785,14815,14844,14874,14904,14933,14963,14993,15021,15051,15081,15110,15140,15169,15199,15228,15258,15287,15317,15347,15377,15406,15436,15465,15494,15524,15553,15582,15612,15641,15671,15701,15731,15760,15790,15820,15849,15878,15908,15937,15966,15996,16025,16055,16085,16114,16144,16174,16204,16233,16262,16292,16321,16350,16380,16409,16439,16468,16498,16528,16558,16587,16617,16646,16676,16705,16734,16764,16793,16823,16852,16882,16912,16941,16971,17001,17030,17060,17089,17118,17148,17177,17207,17236,17266,17295,17325,17355,17384,17414,17444,17473,17502,17532,17561,17591,17620,17650,17679,17709,17738,17768,17798,17827,17857,17886,17916,17945,17975,18004,18034,18063,18093,18122,18152,18181,18211,18241,18270,18300,18330,18359,18388,18418,18447,18476,18506,18535,18565,18595,18625,18654,18684,18714,18743,18772,18802,18831,18860,18890,18919,18949,18979,19008,19038,19068,19098,19127,19156,19186,19215,19244,19274,19303,19333,19362,19392,19422,19452,19481,19511,19540,19570,19599,19628,19658,19687,19717,19746,19776,19806,19836,19865,19895,19924,19954,19983,20012,20042,20071,20101,20130,20160,20190,20219,20249,20279,20308,20338,20367,20396,20426,20455,20485,20514,20544,20573,20603,20633,20662,20692,20721,20751,20780,20810,20839,20869,20898,20928,20957,20987,21016,21046,21076,21105,21135,21164,21194,21223,21253,21282,21312,21341,21371,21400,21430,21459,21489,21519,21548,21578,21607,21637,21666,21696,21725,21754,21784,21813,21843,21873,21902,21932,21962,21991,22021,22050,22080,22109,22138,22168,22197,22227,22256,22286,22316,22346,22375,22405,22434,22464,22493,22522,22552,22581,22611,22640,22670,22700,22730,22759,22789,22818,22848,22877,22906,22936,22965,22994,23024,23054,23083,23113,23143,23173,23202,23232,23261,23290,23320,23349,23379,23408,23438,23467,23497,23527,23556,23586,23616,23645,23674,23704,23733,23763,23792,23822,23851,23881,23910,23940,23970,23999,24029,24058,24088,24117,24147,24176,24206,24235,24265,24294,24324,24353,24383,24413,24442,24472,24501,24531,24560,24590,24619,24648,24678,24707,24737,24767,24796,24826,24856,24885,24915,24944,24974,25003,25032,25062,25091,25121,25150,25180,25210,25240,25269,25299,25328,25358,25387,25416,25446,25475,25505,25534,25564,25594,25624,25653,25683,25712,25742,25771,25800,25830,25859,25888,25918,25948,25977,26007,26037,26067,26096,26126,26155,26184,26214,26243,26272,26302,26332,26361,26391,26421,26451,26480,26510,26539,26568,26598,26627,26656,26686,26715,26745,26775,26805,26834,26864,26893,26923,26952,26982,27011,27041,27070,27099,27129,27159,27188,27218,27248,27277,27307,27336,27366,27395,27425,27454,27484,27513,27542,27572,27602,27631,27661,27691,27720,27750,27779,27809,27838,27868,27897,27926,27956,27985,28015,28045,28074,28104,28134,28163,28193,28222,28252,28281,28310,28340,28369,28399,28428,28458,28488,28517,28547,28577,28607,28636,28665,28695,28724,28754,28783,28813,28843,28872,28901,28931,28960,28990,29019,29049,29078,29108,29137,29167,29196,29226,29255,29285,29315,29345,29375,29404,29434,29463,29492,29522,29551,29580,29610,29640,29669,29699,29729,29759,29788,29818,29847,29876,29906,29935,29964,29994,30023,30053,30082,30112,30141,30171,30200,30230,30259,30289,30318,30348,30378,30408,30437,30467,30496,30526,30555,30585,30614,30644,30673,30703,30732,30762,30791,30821,30850,30880,30909,30939,30968,30998,31027,31057,31086,31116,31145,31175,31204,31234,31263,31293,31322,31352,31381,31411,31441,31471,31500,31530,31559,31589,31618,31648,31676,31706,31736,31766,31795,31825,31854,31884,31913,31943,31972,32002,32031,32061,32090,32120,32150,32180,32209,32239,32268,32298,32327,32357,32386,32416,32445,32475,32504,32534,32563,32593,32622,32652,32681,32711,32740,32770,32799,32829,32858,32888,32917,32947,32976,33006,33035,33065,33094,33124,33153,33183,33213,33243,33272,33302,33331,33361,33390,33420,33450,33479,33509,33539,33568,33598,33627,33657,33686,33716,33745,33775,33804,33834,33863,33893,33922,33952,33981,34011,34040,34069,34099,34128,34158,34187,34217,34247,34277,34306,34336,34365,34395,34424,34454,34483,34512,34542,34571,34601,34631,34660,34690,34719,34749,34778,34808,34837,34867,34896,34926,34955,34985,35015,35044,35074,35103,35133,35162,35192,35222,35251,35280,35310,35340,35370,35399,35429,35458,35488,35517,35547,35576,35605,35635,35665,35694,35723,35753,35782,35811,35841,35871,35901,35930,35960,35989,36019,36048,36078,36107,36136,36166,36195,36225,36254,36284,36314,36343,36373,36403,36433,36462,36492,36521,36551,36580,36610,36639,36669,36698,36728,36757,36786,36816,36845,36875,36904,36934,36963,36993,37022,37052,37081,37111,37141,37170,37200,37229,37259,37288,37318,37347,37377,37406,37436,37465,37495,37524,37554,37584,37613,37643,37672,37701,37731,37760,37790,37819,37849,37878,37908,37938,37967,37997,38027,38056,38085,38115,38144,38174,38203,38233,38262,38292,38322,38351,38381,38410,38440,38469,38499,38528,38558,38587,38617,38646,38676,38705,38735,38764,38794,38823,38853,38882,38912,38941,38971,39001,39030,39059,39089,39118,39148,39178,39208,39237,39267,39297,39326,39355,39385,39414,39444,39473,39503,39532,39562,39592,39621,39650,39680,39709,39739,39768,39798,39827,39857,39886,39916,39946,39975,40005,40035,40064,40094,40123,40153,40182,40212,40241,40271,40300,40330,40359,40389,40418,40448,40477,40507,40536,40566,40595,40625,40655,40685,40714,40744,40773,40803,40832,40862,40892,40921,40951,40980,41009,41039,41068,41098,41127,41157,41186,41216,41245,41275,41304,41334,41364,41393,41422,41452,41481,41511,41540,41570,41599,41629,41658,41688,41718,41748,41777,41807,41836,41865,41894,41924,41953,41983,42012,42042,42072,42102,42131,42161,42190,42220,42249,42279,42308,42337,42367,42397,42426,42456,42485,42515,42545,42574,42604,42633,42662,42692,42721,42751,42780,42810,42839,42869,42899,42929,42958,42988,43017,43046,43076,43105,43135,43164,43194,43223,43253,43283,43312,43342,43371,43401,43430,43460,43489,43519,43548,43578,43607,43637,43666,43696,43726,43755,43785,43814,43844,43873,43903,43932,43962,43991,44021,44050,44080,44109,44139,44169,44198,44228,44258,44287,44317,44346,44375,44405,44434,44464,44493,44523,44553,44582,44612,44641,44671,44700,44730,44759,44788,44818,44847,44877,44906,44936,44966,44996,45025,45055,45084,45114,45143,45172,45202,45231,45261,45290,45320,45350,45380,45409,45439,45468,45498,45527,45556,45586,45615,45644,45674,45704,45733,45763,45793,45823,45852,45882,45911,45940,45970,45999,46028,46058,46088,46117,46147,46177,46206,46236,46265,46295,46324,46354,46383,46413,46442,46472,46501,46531,46560,46590,46620,46649,46679,46708,46738,46767,46797,46826,46856,46885,46915,46944,46974,47003,47033,47063,47092,47122,47151,47181,47210,47240,47269,47298,47328,47357,47387,47417,47446,47476,47506,47535,47565,47594,47624,47653,47682,47712,47741,47771,47800,47830,47860,47890,47919,47949,47978,48008,48037,48066,48096,48125,48155,48184,48214,48244,48273,48303,48333,48362,48392,48421,48450,48480,48509,48538,48568,48598,48627,48657,48687,48717,48746,48776,48805,48834,48864,48893,48922,48952,48982,49011,49041,49071,49100,49130,49160,49189,49218,49248,49277,49306,49336,49365,49395,49425,49455,49484,49514,49543,49573,49602,49632,49661,49690,49720,49749,49779,49809,49838,49868,49898,49927,49957,49986,50016,50045,50075,50104,50133,50163,50192,50222,50252,50281,50311,50340,50370,50400,50429,50459,50488,50518,50547,50576,50606,50635,50665,50694,50724,50754,50784,50813,50843,50872,50902,50931,50960,50990,51019,51049,51078,51108,51138,51167,51197,51227,51256,51286,51315,51345,51374,51403,51433,51462,51492,51522,51552,51582,51611,51641,51670,51699,51729,51758,51787,51816,51846,51876,51906,51936,51965,51995,52025,52054,52083,52113,52142,52171,52200,52230,52260,52290,52319,52349,52379,52408,52438,52467,52497,52526,52555,52585,52614,52644,52673,52703,52733,52762,52792,52822,52851,52881,52910,52939,52969,52998,53028,53057,53087,53116,53146,53176,53205,53235,53264,53294,53324,53353,53383,53412,53441,53471,53500,53530,53559,53589,53619,53648,53678,53708,53737,53767,53796,53825,53855,53884,53913,53943,53973,54003,54032,54062,54092,54121,54151,54180,54209,54239,54268,54297,54327,54357,54387,54416,54446,54476,54505,54535,54564,54593,54623,54652,54681,54711,54741,54770,54800,54830,54859,54889,54919,54948,54977,55007,55036,55066,55095,55125,55154,55184,55213,55243,55273,55302,55332,55361,55391,55420,55450,55479,55508,55538,55567,55597,55627,55657,55686,55716,55745,55775,55804,55834,55863,55892,55922,55951,55981,56011,56040,56070,56100,56129,56159,56188,56218,56247,56276,56306,56335,56365,56394,56424,56454,56483,56513,56543,56572,56601,56631,56660,56690,56719,56749,56778,56808,56837,56867,56897,56926,56956,56985,57015,57044,57074,57103,57133,57162,57192,57221,57251,57280,57310,57340,57369,57399,57429,57458,57487,57517,57546,57576,57605,57634,57664,57694,57723,57753,57783,57813,57842,57871,57901,57930,57959,57989,58018,58048,58077,58107,58137,58167,58196,58226,58255,58285,58314,58343,58373,58402,58432,58461,58491,58521,58551,58580,58610,58639,58669,58698,58727,58757,58786,58816,58845,58875,58905,58934,58964,58994,59023,59053,59082,59111,59141,59170,59200,59229,59259,59288,59318,59348,59377,59407,59436,59466,59495,59525,59554,59584,59613,59643,59672,59702,59731,59761,59791,59820,59850,59879,59909,59939,59968,59997,60027,60056,60086,60115,60145,60174,60204,60234,60264,60293,60323,60352,60381,60411,60440,60469,60499,60528,60558,60588,60618,60648,60677,60707,60736,60765,60795,60824,60853,60883,60912,60942,60972,61002,61031,61061,61090,61120,61149,61179,61208,61237,61267,61296,61326,61356,61385,61415,61445,61474,61504,61533,61563,61592,61621,61651,61680,61710,61739,61769,61799,61828,61858,61888,61917,61947,61976,62006,62035,62064,62094,62123,62153,62182,62212,62242,62271,62301,62331,62360,62390,62419,62448,62478,62507,62537,62566,62596,62625,62655,62685,62715,62744,62774,62803,62832,62862,62891,62921,62950,62980,63009,63039,63069,63099,63128,63157,63187,63216,63246,63275,63305,63334,63363,63393,63423,63453,63482,63512,63541,63571,63600,63630,63659,63689,63718,63747,63777,63807,63836,63866,63895,63925,63955,63984,64014,64043,64073,64102,64131,64161,64190,64220,64249,64279,64309,64339,64368,64398,64427,64457,64486,64515,64545,64574,64603,64633,64663,64692,64722,64752,64782,64811,64841,64870,64899,64929,64958,64987,65017,65047,65076,65106,65136,65166,65195,65225,65254,65283,65313,65342,65371,65401,65431,65460,65490,65520,65549,65579,65608,65638,65667,65697,65726,65755,65785,65815,65844,65874,65903,65933,65963,65992,66022,66051,66081,66110,66140,66169,66199,66228,66258,66287,66317,66346,66376,66405,66435,66465,66494,66524,66553,66583,66612,66641,66671,66700,66730,66760,66789,66819,66849,66878,66908,66937,66967,66996,67025,67055,67084,67114,67143,67173,67203,67233,67262,67292,67321,67351,67380,67409,67439,67468,67497,67527,67557,67587,67617,67646,67676,67705,67735,67764,67793,67823,67852,67882,67911,67941,67971,68e3,68030,68060,68089,68119,68148,68177,68207,68236,68266,68295,68325,68354,68384,68414,68443,68473,68502,68532,68561,68591,68620,68650,68679,68708,68738,68768,68797,68827,68857,68886,68916,68946,68975,69004,69034,69063,69092,69122,69152,69181,69211,69240,69270,69300,69330,69359,69388,69418,69447,69476,69506,69535,69565,69595,69624,69654,69684,69713,69743,69772,69802,69831,69861,69890,69919,69949,69978,70008,70038,70067,70097,70126,70156,70186,70215,70245,70274,70303,70333,70362,70392,70421,70451,70481,70510,70540,70570,70599,70629,70658,70687,70717,70746,70776,70805,70835,70864,70894,70924,70954,70983,71013,71042,71071,71101,71130,71159,71189,71218,71248,71278,71308,71337,71367,71397,71426,71455,71485,71514,71543,71573,71602,71632,71662,71691,71721,71751,71781,71810,71839,71869,71898,71927,71957,71986,72016,72046,72075,72105,72135,72164,72194,72223,72253,72282,72311,72341,72370,72400,72429,72459,72489,72518,72548,72577,72607,72637,72666,72695,72725,72754,72784,72813,72843,72872,72902,72931,72961,72991,73020,73050,73080,73109,73139,73168,73197,73227,73256,73286,73315,73345,73375,73404,73434,73464,73493,73523,73552,73581,73611,73640,73669,73699,73729,73758,73788,73818,73848,73877,73907,73936,73965,73995,74024,74053,74083,74113,74142,74172,74202,74231,74261,74291,74320,74349,74379,74408,74437,74467,74497,74526,74556,74586,74615,74645,74675,74704,74733,74763,74792,74822,74851,74881,74910,74940,74969,74999,75029,75058,75088,75117,75147,75176,75206,75235,75264,75294,75323,75353,75383,75412,75442,75472,75501,75531,75560,75590,75619,75648,75678,75707,75737,75766,75796,75826,75856,75885,75915,75944,75974,76003,76032,76062,76091,76121,76150,76180,76210,76239,76269,76299,76328,76358,76387,76416,76446,76475,76505,76534,76564,76593,76623,76653,76682,76712,76741,76771,76801,76830,76859,76889,76918,76948,76977,77007,77036,77066,77096,77125,77155,77185,77214,77243,77273,77302,77332,77361,77390,77420,77450,77479,77509,77539,77569,77598,77627,77657,77686,77715,77745,77774,77804,77833,77863,77893,77923,77952,77982,78011,78041,78070,78099,78129,78158,78188,78217,78247,78277,78307,78336,78366,78395,78425,78454,78483,78513,78542,78572,78601,78631,78661,78690,78720,78750,78779,78808,78838,78867,78897,78926,78956,78985,79015,79044,79074,79104,79133,79163,79192,79222,79251,79281,79310,79340,79369,79399,79428,79458,79487,79517,79546,79576,79606,79635,79665,79695,79724,79753,79783,79812,79841,79871,79900,79930,79960,79990]},{\\\"../main\\\":571,\\\"object-assign\\\":454}],571:[function(t,e,r){var n=t(\\\"object-assign\\\");function i(){this.regionalOptions=[],this.regionalOptions[\\\"\\\"]={invalidCalendar:\\\"Calendar {0} not found\\\",invalidDate:\\\"Invalid {0} date\\\",invalidMonth:\\\"Invalid {0} month\\\",invalidYear:\\\"Invalid {0} year\\\",differentCalendars:\\\"Cannot mix {0} and {1} dates\\\"},this.local=this.regionalOptions[\\\"\\\"],this.calendars={},this._localCals={}}function a(t,e,r,n){if(this._calendar=t,this._year=e,this._month=r,this._day=n,0===this._calendar._validateLevel&&!this._calendar.isValid(this._year,this._month,this._day))throw(c.local.invalidDate||c.regionalOptions[\\\"\\\"].invalidDate).replace(/\\\\{0\\\\}/,this._calendar.local.name)}function o(t,e){return\\\"000000\\\".substring(0,e-(t=\\\"\\\"+t).length)+t}function s(){this.shortYearCutoff=\\\"+10\\\"}function l(t){this.local=this.regionalOptions[t]||this.regionalOptions[\\\"\\\"]}n(i.prototype,{instance:function(t,e){t=(t||\\\"gregorian\\\").toLowerCase(),e=e||\\\"\\\";var r=this._localCals[t+\\\"-\\\"+e];if(!r&&this.calendars[t]&&(r=new this.calendars[t](e),this._localCals[t+\\\"-\\\"+e]=r),!r)throw(this.local.invalidCalendar||this.regionalOptions[\\\"\\\"].invalidCalendar).replace(/\\\\{0\\\\}/,t);return r},newDate:function(t,e,r,n,i){return(n=(null!=t&&t.year?t.calendar():\\\"string\\\"==typeof n?this.instance(n,i):n)||this.instance()).newDate(t,e,r)},substituteDigits:function(t){return function(e){return(e+\\\"\\\").replace(/[0-9]/g,function(e){return t[e]})}},substituteChineseDigits:function(t,e){return function(r){for(var n=\\\"\\\",i=0;r>0;){var a=r%10;n=(0===a?\\\"\\\":t[a]+e[i])+n,i++,r=Math.floor(r/10)}return 0===n.indexOf(t[1]+e[1])&&(n=n.substr(1)),n||t[0]}}}),n(a.prototype,{newDate:function(t,e,r){return this._calendar.newDate(null==t?this:t,e,r)},year:function(t){return 0===arguments.length?this._year:this.set(t,\\\"y\\\")},month:function(t){return 0===arguments.length?this._month:this.set(t,\\\"m\\\")},day:function(t){return 0===arguments.length?this._day:this.set(t,\\\"d\\\")},date:function(t,e,r){if(!this._calendar.isValid(t,e,r))throw(c.local.invalidDate||c.regionalOptions[\\\"\\\"].invalidDate).replace(/\\\\{0\\\\}/,this._calendar.local.name);return this._year=t,this._month=e,this._day=r,this},leapYear:function(){return this._calendar.leapYear(this)},epoch:function(){return this._calendar.epoch(this)},formatYear:function(){return this._calendar.formatYear(this)},monthOfYear:function(){return this._calendar.monthOfYear(this)},weekOfYear:function(){return this._calendar.weekOfYear(this)},daysInYear:function(){return this._calendar.daysInYear(this)},dayOfYear:function(){return this._calendar.dayOfYear(this)},daysInMonth:function(){return this._calendar.daysInMonth(this)},dayOfWeek:function(){return this._calendar.dayOfWeek(this)},weekDay:function(){return this._calendar.weekDay(this)},extraInfo:function(){return this._calendar.extraInfo(this)},add:function(t,e){return this._calendar.add(this,t,e)},set:function(t,e){return this._calendar.set(this,t,e)},compareTo:function(t){if(this._calendar.name!==t._calendar.name)throw(c.local.differentCalendars||c.regionalOptions[\\\"\\\"].differentCalendars).replace(/\\\\{0\\\\}/,this._calendar.local.name).replace(/\\\\{1\\\\}/,t._calendar.local.name);var e=this._year!==t._year?this._year-t._year:this._month!==t._month?this.monthOfYear()-t.monthOfYear():this._day-t._day;return 0===e?0:e<0?-1:1},calendar:function(){return this._calendar},toJD:function(){return this._calendar.toJD(this)},fromJD:function(t){return this._calendar.fromJD(t)},toJSDate:function(){return this._calendar.toJSDate(this)},fromJSDate:function(t){return this._calendar.fromJSDate(t)},toString:function(){return(this.year()<0?\\\"-\\\":\\\"\\\")+o(Math.abs(this.year()),4)+\\\"-\\\"+o(this.month(),2)+\\\"-\\\"+o(this.day(),2)}}),n(s.prototype,{_validateLevel:0,newDate:function(t,e,r){return null==t?this.today():(t.year&&(this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[\\\"\\\"].invalidDate),r=t.day(),e=t.month(),t=t.year()),new a(this,t,e,r))},today:function(){return this.fromJSDate(new Date)},epoch:function(t){return this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[\\\"\\\"].invalidYear).year()<0?this.local.epochs[0]:this.local.epochs[1]},formatYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[\\\"\\\"].invalidYear);return(e.year()<0?\\\"-\\\":\\\"\\\")+o(Math.abs(e.year()),4)},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[\\\"\\\"].invalidYear),12},monthOfYear:function(t,e){var r=this._validate(t,e,this.minDay,c.local.invalidMonth||c.regionalOptions[\\\"\\\"].invalidMonth);return(r.month()+this.monthsInYear(r)-this.firstMonth)%this.monthsInYear(r)+this.minMonth},fromMonthOfYear:function(t,e){var r=(e+this.firstMonth-2*this.minMonth)%this.monthsInYear(t)+this.minMonth;return this._validate(t,r,this.minDay,c.local.invalidMonth||c.regionalOptions[\\\"\\\"].invalidMonth),r},daysInYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[\\\"\\\"].invalidYear);return this.leapYear(e)?366:365},dayOfYear:function(t,e,r){var n=this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[\\\"\\\"].invalidDate);return n.toJD()-this.newDate(n.year(),this.fromMonthOfYear(n.year(),this.minMonth),this.minDay).toJD()+1},daysInWeek:function(){return 7},dayOfWeek:function(t,e,r){var n=this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[\\\"\\\"].invalidDate);return(Math.floor(this.toJD(n))+2)%this.daysInWeek()},extraInfo:function(t,e,r){return this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[\\\"\\\"].invalidDate),{}},add:function(t,e,r){return this._validate(t,this.minMonth,this.minDay,c.local.invalidDate||c.regionalOptions[\\\"\\\"].invalidDate),this._correctAdd(t,this._add(t,e,r),e,r)},_add:function(t,e,r){if(this._validateLevel++,\\\"d\\\"===r||\\\"w\\\"===r){var n=t.toJD()+e*(\\\"w\\\"===r?this.daysInWeek():1),i=t.calendar().fromJD(n);return this._validateLevel--,[i.year(),i.month(),i.day()]}try{var a=t.year()+(\\\"y\\\"===r?e:0),o=t.monthOfYear()+(\\\"m\\\"===r?e:0);i=t.day();\\\"y\\\"===r?(t.month()!==this.fromMonthOfYear(a,o)&&(o=this.newDate(a,t.month(),this.minDay).monthOfYear()),o=Math.min(o,this.monthsInYear(a)),i=Math.min(i,this.daysInMonth(a,this.fromMonthOfYear(a,o)))):\\\"m\\\"===r&&(!function(t){for(;o<t.minMonth;)a--,o+=t.monthsInYear(a);for(var e=t.monthsInYear(a);o>e-1+t.minMonth;)a++,o-=e,e=t.monthsInYear(a)}(this),i=Math.min(i,this.daysInMonth(a,this.fromMonthOfYear(a,o))));var s=[a,this.fromMonthOfYear(a,o),i];return this._validateLevel--,s}catch(t){throw this._validateLevel--,t}},_correctAdd:function(t,e,r,n){if(!(this.hasYearZero||\\\"y\\\"!==n&&\\\"m\\\"!==n||0!==e[0]&&t.year()>0==e[0]>0)){var i={y:[1,1,\\\"y\\\"],m:[1,this.monthsInYear(-1),\\\"m\\\"],w:[this.daysInWeek(),this.daysInYear(-1),\\\"d\\\"],d:[1,this.daysInYear(-1),\\\"d\\\"]}[n],a=r<0?-1:1;e=this._add(t,r*i[0]+a*i[1],i[2])}return t.date(e[0],e[1],e[2])},set:function(t,e,r){this._validate(t,this.minMonth,this.minDay,c.local.invalidDate||c.regionalOptions[\\\"\\\"].invalidDate);var n=\\\"y\\\"===r?e:t.year(),i=\\\"m\\\"===r?e:t.month(),a=\\\"d\\\"===r?e:t.day();return\\\"y\\\"!==r&&\\\"m\\\"!==r||(a=Math.min(a,this.daysInMonth(n,i))),t.date(n,i,a)},isValid:function(t,e,r){this._validateLevel++;var n=this.hasYearZero||0!==t;if(n){var i=this.newDate(t,e,this.minDay);n=e>=this.minMonth&&e-this.minMonth<this.monthsInYear(i)&&r>=this.minDay&&r-this.minDay<this.daysInMonth(i)}return this._validateLevel--,n},toJSDate:function(t,e,r){var n=this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[\\\"\\\"].invalidDate);return c.instance().fromJD(this.toJD(n)).toJSDate()},fromJSDate:function(t){return this.fromJD(c.instance().fromJSDate(t).toJD())},_validate:function(t,e,r,n){if(t.year){if(0===this._validateLevel&&this.name!==t.calendar().name)throw(c.local.differentCalendars||c.regionalOptions[\\\"\\\"].differentCalendars).replace(/\\\\{0\\\\}/,this.local.name).replace(/\\\\{1\\\\}/,t.calendar().local.name);return t}try{if(this._validateLevel++,1===this._validateLevel&&!this.isValid(t,e,r))throw n.replace(/\\\\{0\\\\}/,this.local.name);var i=this.newDate(t,e,r);return this._validateLevel--,i}catch(t){throw this._validateLevel--,t}}}),l.prototype=new s,n(l.prototype,{name:\\\"Gregorian\\\",jdEpoch:1721425.5,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\\\"\\\":{name:\\\"Gregorian\\\",epochs:[\\\"BCE\\\",\\\"CE\\\"],monthNames:[\\\"January\\\",\\\"February\\\",\\\"March\\\",\\\"April\\\",\\\"May\\\",\\\"June\\\",\\\"July\\\",\\\"August\\\",\\\"September\\\",\\\"October\\\",\\\"November\\\",\\\"December\\\"],monthNamesShort:[\\\"Jan\\\",\\\"Feb\\\",\\\"Mar\\\",\\\"Apr\\\",\\\"May\\\",\\\"Jun\\\",\\\"Jul\\\",\\\"Aug\\\",\\\"Sep\\\",\\\"Oct\\\",\\\"Nov\\\",\\\"Dec\\\"],dayNames:[\\\"Sunday\\\",\\\"Monday\\\",\\\"Tuesday\\\",\\\"Wednesday\\\",\\\"Thursday\\\",\\\"Friday\\\",\\\"Saturday\\\"],dayNamesShort:[\\\"Sun\\\",\\\"Mon\\\",\\\"Tue\\\",\\\"Wed\\\",\\\"Thu\\\",\\\"Fri\\\",\\\"Sat\\\"],dayNamesMin:[\\\"Su\\\",\\\"Mo\\\",\\\"Tu\\\",\\\"We\\\",\\\"Th\\\",\\\"Fr\\\",\\\"Sa\\\"],digits:null,dateFormat:\\\"mm/dd/yyyy\\\",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[\\\"\\\"].invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==0&&(t%100!=0||t%400==0)},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(4-(n.dayOfWeek()||7),\\\"d\\\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,c.local.invalidMonth||c.regionalOptions[\\\"\\\"].invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var n=this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[\\\"\\\"].invalidDate);t=n.year(),e=n.month(),r=n.day(),t<0&&t++,e<3&&(e+=12,t--);var i=Math.floor(t/100),a=2-i+Math.floor(i/4);return Math.floor(365.25*(t+4716))+Math.floor(30.6001*(e+1))+r+a-1524.5},fromJD:function(t){var e=Math.floor(t+.5),r=Math.floor((e-1867216.25)/36524.25),n=(r=e+1+r-Math.floor(r/4))+1524,i=Math.floor((n-122.1)/365.25),a=Math.floor(365.25*i),o=Math.floor((n-a)/30.6001),s=n-a-Math.floor(30.6001*o),l=o-(o>13.5?13:1),c=i-(l>2.5?4716:4715);return c<=0&&c--,this.newDate(c,l,s)},toJSDate:function(t,e,r){var n=this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[\\\"\\\"].invalidDate),i=new Date(n.year(),n.month()-1,n.day());return i.setHours(0),i.setMinutes(0),i.setSeconds(0),i.setMilliseconds(0),i.setHours(i.getHours()>12?i.getHours()+2:0),i},fromJSDate:function(t){return this.newDate(t.getFullYear(),t.getMonth()+1,t.getDate())}});var c=e.exports=new i;c.cdate=a,c.baseCalendar=s,c.calendars.gregorian=l},{\\\"object-assign\\\":454}],572:[function(t,e,r){var n=t(\\\"object-assign\\\"),i=t(\\\"./main\\\");n(i.regionalOptions[\\\"\\\"],{invalidArguments:\\\"Invalid arguments\\\",invalidFormat:\\\"Cannot format a date from another calendar\\\",missingNumberAt:\\\"Missing number at position {0}\\\",unknownNameAt:\\\"Unknown name at position {0}\\\",unexpectedLiteralAt:\\\"Unexpected literal at position {0}\\\",unexpectedText:\\\"Additional text found at end\\\"}),i.local=i.regionalOptions[\\\"\\\"],n(i.cdate.prototype,{formatDate:function(t,e){return\\\"string\\\"!=typeof t&&(e=t,t=\\\"\\\"),this._calendar.formatDate(t||\\\"\\\",this,e)}}),n(i.baseCalendar.prototype,{UNIX_EPOCH:i.instance().newDate(1970,1,1).toJD(),SECS_PER_DAY:86400,TICKS_EPOCH:i.instance().jdEpoch,TICKS_PER_DAY:864e9,ATOM:\\\"yyyy-mm-dd\\\",COOKIE:\\\"D, dd M yyyy\\\",FULL:\\\"DD, MM d, yyyy\\\",ISO_8601:\\\"yyyy-mm-dd\\\",JULIAN:\\\"J\\\",RFC_822:\\\"D, d M yy\\\",RFC_850:\\\"DD, dd-M-yy\\\",RFC_1036:\\\"D, d M yy\\\",RFC_1123:\\\"D, d M yyyy\\\",RFC_2822:\\\"D, d M yyyy\\\",RSS:\\\"D, d M yy\\\",TICKS:\\\"!\\\",TIMESTAMP:\\\"@\\\",W3C:\\\"yyyy-mm-dd\\\",formatDate:function(t,e,r){if(\\\"string\\\"!=typeof t&&(r=e,e=t,t=\\\"\\\"),!e)return\\\"\\\";if(e.calendar()!==this)throw i.local.invalidFormat||i.regionalOptions[\\\"\\\"].invalidFormat;t=t||this.local.dateFormat;for(var n,a,o,s,l=(r=r||{}).dayNamesShort||this.local.dayNamesShort,c=r.dayNames||this.local.dayNames,u=r.monthNumbers||this.local.monthNumbers,h=r.monthNamesShort||this.local.monthNamesShort,f=r.monthNames||this.local.monthNames,p=(r.calculateWeek||this.local.calculateWeek,function(e,r){for(var n=1;w+n<t.length&&t.charAt(w+n)===e;)n++;return w+=n-1,Math.floor(n/(r||1))>1}),d=function(t,e,r,n){var i=\\\"\\\"+e;if(p(t,n))for(;i.length<r;)i=\\\"0\\\"+i;return i},g=this,v=function(t){return\\\"function\\\"==typeof u?u.call(g,t,p(\\\"m\\\")):x(d(\\\"m\\\",t.month(),2))},m=function(t,e){return e?\\\"function\\\"==typeof f?f.call(g,t):f[t.month()-g.minMonth]:\\\"function\\\"==typeof h?h.call(g,t):h[t.month()-g.minMonth]},y=this.local.digits,x=function(t){return r.localNumbers&&y?y(t):t},b=\\\"\\\",_=!1,w=0;w<t.length;w++)if(_)\\\"'\\\"!==t.charAt(w)||p(\\\"'\\\")?b+=t.charAt(w):_=!1;else switch(t.charAt(w)){case\\\"d\\\":b+=x(d(\\\"d\\\",e.day(),2));break;case\\\"D\\\":b+=(n=\\\"D\\\",a=e.dayOfWeek(),o=l,s=c,p(n)?s[a]:o[a]);break;case\\\"o\\\":b+=d(\\\"o\\\",e.dayOfYear(),3);break;case\\\"w\\\":b+=d(\\\"w\\\",e.weekOfYear(),2);break;case\\\"m\\\":b+=v(e);break;case\\\"M\\\":b+=m(e,p(\\\"M\\\"));break;case\\\"y\\\":b+=p(\\\"y\\\",2)?e.year():(e.year()%100<10?\\\"0\\\":\\\"\\\")+e.year()%100;break;case\\\"Y\\\":p(\\\"Y\\\",2),b+=e.formatYear();break;case\\\"J\\\":b+=e.toJD();break;case\\\"@\\\":b+=(e.toJD()-this.UNIX_EPOCH)*this.SECS_PER_DAY;break;case\\\"!\\\":b+=(e.toJD()-this.TICKS_EPOCH)*this.TICKS_PER_DAY;break;case\\\"'\\\":p(\\\"'\\\")?b+=\\\"'\\\":_=!0;break;default:b+=t.charAt(w)}return b},parseDate:function(t,e,r){if(null==e)throw i.local.invalidArguments||i.regionalOptions[\\\"\\\"].invalidArguments;if(\\\"\\\"===(e=\\\"object\\\"==typeof e?e.toString():e+\\\"\\\"))return null;t=t||this.local.dateFormat;var n=(r=r||{}).shortYearCutoff||this.shortYearCutoff;n=\\\"string\\\"!=typeof n?n:this.today().year()%100+parseInt(n,10);for(var a=r.dayNamesShort||this.local.dayNamesShort,o=r.dayNames||this.local.dayNames,s=r.parseMonth||this.local.parseMonth,l=r.monthNumbers||this.local.monthNumbers,c=r.monthNamesShort||this.local.monthNamesShort,u=r.monthNames||this.local.monthNames,h=-1,f=-1,p=-1,d=-1,g=-1,v=!1,m=!1,y=function(e,r){for(var n=1;M+n<t.length&&t.charAt(M+n)===e;)n++;return M+=n-1,Math.floor(n/(r||1))>1},x=function(t,r){var n=y(t,r),a=[2,3,n?4:2,n?4:2,10,11,20][\\\"oyYJ@!\\\".indexOf(t)+1],o=new RegExp(\\\"^-?\\\\\\\\d{1,\\\"+a+\\\"}\\\"),s=e.substring(A).match(o);if(!s)throw(i.local.missingNumberAt||i.regionalOptions[\\\"\\\"].missingNumberAt).replace(/\\\\{0\\\\}/,A);return A+=s[0].length,parseInt(s[0],10)},b=this,_=function(){if(\\\"function\\\"==typeof l){y(\\\"m\\\");var t=l.call(b,e.substring(A));return A+=t.length,t}return x(\\\"m\\\")},w=function(t,r,n,a){for(var o=y(t,a)?n:r,s=0;s<o.length;s++)if(e.substr(A,o[s].length).toLowerCase()===o[s].toLowerCase())return A+=o[s].length,s+b.minMonth;throw(i.local.unknownNameAt||i.regionalOptions[\\\"\\\"].unknownNameAt).replace(/\\\\{0\\\\}/,A)},k=function(){if(\\\"function\\\"==typeof u){var t=y(\\\"M\\\")?u.call(b,e.substring(A)):c.call(b,e.substring(A));return A+=t.length,t}return w(\\\"M\\\",c,u)},T=function(){if(e.charAt(A)!==t.charAt(M))throw(i.local.unexpectedLiteralAt||i.regionalOptions[\\\"\\\"].unexpectedLiteralAt).replace(/\\\\{0\\\\}/,A);A++},A=0,M=0;M<t.length;M++)if(m)\\\"'\\\"!==t.charAt(M)||y(\\\"'\\\")?T():m=!1;else switch(t.charAt(M)){case\\\"d\\\":d=x(\\\"d\\\");break;case\\\"D\\\":w(\\\"D\\\",a,o);break;case\\\"o\\\":g=x(\\\"o\\\");break;case\\\"w\\\":x(\\\"w\\\");break;case\\\"m\\\":p=_();break;case\\\"M\\\":p=k();break;case\\\"y\\\":var S=M;v=!y(\\\"y\\\",2),M=S,f=x(\\\"y\\\",2);break;case\\\"Y\\\":f=x(\\\"Y\\\",2);break;case\\\"J\\\":h=x(\\\"J\\\")+.5,\\\".\\\"===e.charAt(A)&&(A++,x(\\\"J\\\"));break;case\\\"@\\\":h=x(\\\"@\\\")/this.SECS_PER_DAY+this.UNIX_EPOCH;break;case\\\"!\\\":h=x(\\\"!\\\")/this.TICKS_PER_DAY+this.TICKS_EPOCH;break;case\\\"*\\\":A=e.length;break;case\\\"'\\\":y(\\\"'\\\")?T():m=!0;break;default:T()}if(A<e.length)throw i.local.unexpectedText||i.regionalOptions[\\\"\\\"].unexpectedText;if(-1===f?f=this.today().year():f<100&&v&&(f+=-1===n?1900:this.today().year()-this.today().year()%100-(f<=n?0:100)),\\\"string\\\"==typeof p&&(p=s.call(this,f,p)),g>-1){p=1,d=g;for(var E=this.daysInMonth(f,p);d>E;E=this.daysInMonth(f,p))p++,d-=E}return h>-1?this.fromJD(h):this.newDate(f,p,d)},determineDate:function(t,e,r,n,i){r&&\\\"object\\\"!=typeof r&&(i=n,n=r,r=null),\\\"string\\\"!=typeof n&&(i=n,n=\\\"\\\");var a=this;return e=e?e.newDate():null,t=null==t?e:\\\"string\\\"==typeof t?function(t){try{return a.parseDate(n,t,i)}catch(t){}for(var e=((t=t.toLowerCase()).match(/^c/)&&r?r.newDate():null)||a.today(),o=/([+-]?[0-9]+)\\\\s*(d|w|m|y)?/g,s=o.exec(t);s;)e.add(parseInt(s[1],10),s[2]||\\\"d\\\"),s=o.exec(t);return e}(t):\\\"number\\\"==typeof t?isNaN(t)||t===1/0||t===-1/0?e:a.today().add(t,\\\"d\\\"):a.newDate(t)}})},{\\\"./main\\\":571,\\\"object-assign\\\":454}],573:[function(t,e,r){e.exports=t(\\\"cwise-compiler\\\")({args:[\\\"array\\\",{offset:[1],array:0},\\\"scalar\\\",\\\"scalar\\\",\\\"index\\\"],pre:{body:\\\"{}\\\",args:[],thisVars:[],localVars:[]},post:{body:\\\"{}\\\",args:[],thisVars:[],localVars:[]},body:{body:\\\"{\\\\n        var _inline_1_da = _inline_1_arg0_ - _inline_1_arg3_\\\\n        var _inline_1_db = _inline_1_arg1_ - _inline_1_arg3_\\\\n        if((_inline_1_da >= 0) !== (_inline_1_db >= 0)) {\\\\n          _inline_1_arg2_.push(_inline_1_arg4_[0] + 0.5 + 0.5 * (_inline_1_da + _inline_1_db) / (_inline_1_da - _inline_1_db))\\\\n        }\\\\n      }\\\",args:[{name:\\\"_inline_1_arg0_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_1_arg1_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_1_arg2_\\\",lvalue:!1,rvalue:!0,count:1},{name:\\\"_inline_1_arg3_\\\",lvalue:!1,rvalue:!0,count:2},{name:\\\"_inline_1_arg4_\\\",lvalue:!1,rvalue:!0,count:1}],thisVars:[],localVars:[\\\"_inline_1_da\\\",\\\"_inline_1_db\\\"]},funcName:\\\"zeroCrossings\\\"})},{\\\"cwise-compiler\\\":146}],574:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){var r=[];return e=+e||0,n(t.hi(t.shape[0]-1),r,e),r};var n=t(\\\"./lib/zc-core\\\")},{\\\"./lib/zc-core\\\":573}],575:[function(t,e,r){\\\"use strict\\\";e.exports=[{path:\\\"\\\",backoff:0},{path:\\\"M-2.4,-3V3L0.6,0Z\\\",backoff:.6},{path:\\\"M-3.7,-2.5V2.5L1.3,0Z\\\",backoff:1.3},{path:\\\"M-4.45,-3L-1.65,-0.2V0.2L-4.45,3L1.55,0Z\\\",backoff:1.55},{path:\\\"M-2.2,-2.2L-0.2,-0.2V0.2L-2.2,2.2L-1.4,3L1.6,0L-1.4,-3Z\\\",backoff:1.6},{path:\\\"M-4.4,-2.1L-0.6,-0.2V0.2L-4.4,2.1L-4,3L2,0L-4,-3Z\\\",backoff:2},{path:\\\"M2,0A2,2 0 1,1 0,-2A2,2 0 0,1 2,0Z\\\",backoff:0,noRotate:!0},{path:\\\"M2,2V-2H-2V2Z\\\",backoff:0,noRotate:!0}]},{}],576:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./arrow_paths\\\"),i=t(\\\"../../plots/font_attributes\\\"),a=t(\\\"../../plots/cartesian/constants\\\"),o=t(\\\"../../plot_api/plot_template\\\").templatedArray;e.exports=o(\\\"annotation\\\",{visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc+arraydraw\\\"},text:{valType:\\\"string\\\",editType:\\\"calc+arraydraw\\\"},textangle:{valType:\\\"angle\\\",dflt:0,editType:\\\"calc+arraydraw\\\"},font:i({editType:\\\"calc+arraydraw\\\",colorEditType:\\\"arraydraw\\\"}),width:{valType:\\\"number\\\",min:1,dflt:null,editType:\\\"calc+arraydraw\\\"},height:{valType:\\\"number\\\",min:1,dflt:null,editType:\\\"calc+arraydraw\\\"},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:1,editType:\\\"arraydraw\\\"},align:{valType:\\\"enumerated\\\",values:[\\\"left\\\",\\\"center\\\",\\\"right\\\"],dflt:\\\"center\\\",editType:\\\"arraydraw\\\"},valign:{valType:\\\"enumerated\\\",values:[\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],dflt:\\\"middle\\\",editType:\\\"arraydraw\\\"},bgcolor:{valType:\\\"color\\\",dflt:\\\"rgba(0,0,0,0)\\\",editType:\\\"arraydraw\\\"},bordercolor:{valType:\\\"color\\\",dflt:\\\"rgba(0,0,0,0)\\\",editType:\\\"arraydraw\\\"},borderpad:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"calc+arraydraw\\\"},borderwidth:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"calc+arraydraw\\\"},showarrow:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc+arraydraw\\\"},arrowcolor:{valType:\\\"color\\\",editType:\\\"arraydraw\\\"},arrowhead:{valType:\\\"integer\\\",min:0,max:n.length,dflt:1,editType:\\\"arraydraw\\\"},startarrowhead:{valType:\\\"integer\\\",min:0,max:n.length,dflt:1,editType:\\\"arraydraw\\\"},arrowside:{valType:\\\"flaglist\\\",flags:[\\\"end\\\",\\\"start\\\"],extras:[\\\"none\\\"],dflt:\\\"end\\\",editType:\\\"arraydraw\\\"},arrowsize:{valType:\\\"number\\\",min:.3,dflt:1,editType:\\\"calc+arraydraw\\\"},startarrowsize:{valType:\\\"number\\\",min:.3,dflt:1,editType:\\\"calc+arraydraw\\\"},arrowwidth:{valType:\\\"number\\\",min:.1,editType:\\\"calc+arraydraw\\\"},standoff:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"calc+arraydraw\\\"},startstandoff:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"calc+arraydraw\\\"},ax:{valType:\\\"any\\\",editType:\\\"calc+arraydraw\\\"},ay:{valType:\\\"any\\\",editType:\\\"calc+arraydraw\\\"},axref:{valType:\\\"enumerated\\\",dflt:\\\"pixel\\\",values:[\\\"pixel\\\",a.idRegex.x.toString()],editType:\\\"calc\\\"},ayref:{valType:\\\"enumerated\\\",dflt:\\\"pixel\\\",values:[\\\"pixel\\\",a.idRegex.y.toString()],editType:\\\"calc\\\"},xref:{valType:\\\"enumerated\\\",values:[\\\"paper\\\",a.idRegex.x.toString()],editType:\\\"calc\\\"},x:{valType:\\\"any\\\",editType:\\\"calc+arraydraw\\\"},xanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"left\\\",\\\"center\\\",\\\"right\\\"],dflt:\\\"auto\\\",editType:\\\"calc+arraydraw\\\"},xshift:{valType:\\\"number\\\",dflt:0,editType:\\\"calc+arraydraw\\\"},yref:{valType:\\\"enumerated\\\",values:[\\\"paper\\\",a.idRegex.y.toString()],editType:\\\"calc\\\"},y:{valType:\\\"any\\\",editType:\\\"calc+arraydraw\\\"},yanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],dflt:\\\"auto\\\",editType:\\\"calc+arraydraw\\\"},yshift:{valType:\\\"number\\\",dflt:0,editType:\\\"calc+arraydraw\\\"},clicktoshow:{valType:\\\"enumerated\\\",values:[!1,\\\"onoff\\\",\\\"onout\\\"],dflt:!1,editType:\\\"arraydraw\\\"},xclick:{valType:\\\"any\\\",editType:\\\"arraydraw\\\"},yclick:{valType:\\\"any\\\",editType:\\\"arraydraw\\\"},hovertext:{valType:\\\"string\\\",editType:\\\"arraydraw\\\"},hoverlabel:{bgcolor:{valType:\\\"color\\\",editType:\\\"arraydraw\\\"},bordercolor:{valType:\\\"color\\\",editType:\\\"arraydraw\\\"},font:i({editType:\\\"arraydraw\\\"}),editType:\\\"arraydraw\\\"},captureevents:{valType:\\\"boolean\\\",editType:\\\"arraydraw\\\"},editType:\\\"calc\\\",_deprecated:{ref:{valType:\\\"string\\\",editType:\\\"calc\\\"}}})},{\\\"../../plot_api/plot_template\\\":757,\\\"../../plots/cartesian/constants\\\":773,\\\"../../plots/font_attributes\\\":793,\\\"./arrow_paths\\\":575}],577:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../plots/cartesian/axes\\\"),a=t(\\\"./draw\\\").draw;function o(t){var e=t._fullLayout;n.filterVisible(e.annotations).forEach(function(e){var r=i.getFromId(t,e.xref),n=i.getFromId(t,e.yref);e._extremes={},r&&s(e,r),n&&s(e,n)})}function s(t,e){var r,n=e._id,a=n.charAt(0),o=t[a],s=t[\\\"a\\\"+a],l=t[a+\\\"ref\\\"],c=t[\\\"a\\\"+a+\\\"ref\\\"],u=t[\\\"_\\\"+a+\\\"padplus\\\"],h=t[\\\"_\\\"+a+\\\"padminus\\\"],f={x:1,y:-1}[a]*t[a+\\\"shift\\\"],p=3*t.arrowsize*t.arrowwidth||0,d=p+f,g=p-f,v=3*t.startarrowsize*t.arrowwidth||0,m=v+f,y=v-f;if(c===l){var x=i.findExtremes(e,[e.r2c(o)],{ppadplus:d,ppadminus:g}),b=i.findExtremes(e,[e.r2c(s)],{ppadplus:Math.max(u,m),ppadminus:Math.max(h,y)});r={min:[x.min[0],b.min[0]],max:[x.max[0],b.max[0]]}}else m=s?m+s:m,y=s?y-s:y,r=i.findExtremes(e,[e.r2c(o)],{ppadplus:Math.max(u,d,m),ppadminus:Math.max(h,g,y)});t._extremes[n]=r}e.exports=function(t){var e=t._fullLayout;if(n.filterVisible(e.annotations).length&&t._fullData.length)return n.syncOrAsync([a,o],t)}},{\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767,\\\"./draw\\\":582}],578:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../registry\\\"),a=t(\\\"../../plot_api/plot_template\\\").arrayEditor;function o(t,e){var r,n,i,a,o,l,c,u=t._fullLayout.annotations,h=[],f=[],p=[],d=(e||[]).length;for(r=0;r<u.length;r++)if(a=(i=u[r]).clicktoshow){for(n=0;n<d;n++)if(l=(o=e[n]).xaxis,c=o.yaxis,l._id===i.xref&&c._id===i.yref&&l.d2r(o.x)===s(i._xclick,l)&&c.d2r(o.y)===s(i._yclick,c)){(i.visible?\\\"onout\\\"===a?f:p:h).push(r);break}n===d&&i.visible&&\\\"onout\\\"===a&&f.push(r)}return{on:h,off:f,explicitOff:p}}function s(t,e){return\\\"log\\\"===e.type?e.l2r(t):e.d2r(t)}e.exports={hasClickToShow:function(t,e){var r=o(t,e);return r.on.length>0||r.explicitOff.length>0},onClick:function(t,e){var r,s,l=o(t,e),c=l.on,u=l.off.concat(l.explicitOff),h={},f=t._fullLayout.annotations;if(!c.length&&!u.length)return;for(r=0;r<c.length;r++)(s=a(t.layout,\\\"annotations\\\",f[c[r]])).modifyItem(\\\"visible\\\",!0),n.extendFlat(h,s.getUpdateObj());for(r=0;r<u.length;r++)(s=a(t.layout,\\\"annotations\\\",f[u[r]])).modifyItem(\\\"visible\\\",!1),n.extendFlat(h,s.getUpdateObj());return i.call(\\\"update\\\",t,{},h)}}},{\\\"../../lib\\\":719,\\\"../../plot_api/plot_template\\\":757,\\\"../../registry\\\":847}],579:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../color\\\");e.exports=function(t,e,r,a){a(\\\"opacity\\\");var o=a(\\\"bgcolor\\\"),s=a(\\\"bordercolor\\\"),l=i.opacity(s);a(\\\"borderpad\\\");var c=a(\\\"borderwidth\\\"),u=a(\\\"showarrow\\\");if(a(\\\"text\\\",u?\\\" \\\":r._dfltTitle.annotation),a(\\\"textangle\\\"),n.coerceFont(a,\\\"font\\\",r.font),a(\\\"width\\\"),a(\\\"align\\\"),a(\\\"height\\\")&&a(\\\"valign\\\"),u){var h,f,p=a(\\\"arrowside\\\");-1!==p.indexOf(\\\"end\\\")&&(h=a(\\\"arrowhead\\\"),f=a(\\\"arrowsize\\\")),-1!==p.indexOf(\\\"start\\\")&&(a(\\\"startarrowhead\\\",h),a(\\\"startarrowsize\\\",f)),a(\\\"arrowcolor\\\",l?e.bordercolor:i.defaultLine),a(\\\"arrowwidth\\\",2*(l&&c||1)),a(\\\"standoff\\\"),a(\\\"startstandoff\\\")}var d=a(\\\"hovertext\\\"),g=r.hoverlabel||{};if(d){var v=a(\\\"hoverlabel.bgcolor\\\",g.bgcolor||(i.opacity(o)?i.rgb(o):i.defaultLine)),m=a(\\\"hoverlabel.bordercolor\\\",g.bordercolor||i.contrast(v));n.coerceFont(a,\\\"hoverlabel.font\\\",{family:g.font.family,size:g.font.size,color:g.font.color||m})}a(\\\"captureevents\\\",!!d)}},{\\\"../../lib\\\":719,\\\"../color\\\":593}],580:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../lib/to_log_range\\\");e.exports=function(t,e,r,a){e=e||{};var o=\\\"log\\\"===r&&\\\"linear\\\"===e.type,s=\\\"linear\\\"===r&&\\\"log\\\"===e.type;if(o||s)for(var l,c,u=t._fullLayout.annotations,h=e._id.charAt(0),f=0;f<u.length;f++)l=u[f],c=\\\"annotations[\\\"+f+\\\"].\\\",l[h+\\\"ref\\\"]===e._id&&p(h),l[\\\"a\\\"+h+\\\"ref\\\"]===e._id&&p(\\\"a\\\"+h);function p(t){var r=l[t],s=null;s=o?i(r,e.range):Math.pow(10,r),n(s)||(s=null),a(c+t,s)}}},{\\\"../../lib/to_log_range\\\":745,\\\"fast-isnumeric\\\":225}],581:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../plots/cartesian/axes\\\"),a=t(\\\"../../plots/array_container_defaults\\\"),o=t(\\\"./common_defaults\\\"),s=t(\\\"./attributes\\\");function l(t,e,r){function a(r,i){return n.coerce(t,e,s,r,i)}var l=a(\\\"visible\\\"),c=a(\\\"clicktoshow\\\");if(l||c){o(t,e,r,a);for(var u=e.showarrow,h=[\\\"x\\\",\\\"y\\\"],f=[-10,-30],p={_fullLayout:r},d=0;d<2;d++){var g=h[d],v=i.coerceRef(t,e,p,g,\\\"\\\",\\\"paper\\\");if(\\\"paper\\\"!==v)i.getFromId(p,v)._annIndices.push(e._index);if(i.coercePosition(e,p,a,v,g,.5),u){var m=\\\"a\\\"+g,y=i.coerceRef(t,e,p,m,\\\"pixel\\\");\\\"pixel\\\"!==y&&y!==v&&(y=e[m]=\\\"pixel\\\");var x=\\\"pixel\\\"===y?f[d]:.4;i.coercePosition(e,p,a,y,m,x)}a(g+\\\"anchor\\\"),a(g+\\\"shift\\\")}if(n.noneOrAll(t,e,[\\\"x\\\",\\\"y\\\"]),u&&n.noneOrAll(t,e,[\\\"ax\\\",\\\"ay\\\"]),c){var b=a(\\\"xclick\\\"),_=a(\\\"yclick\\\");e._xclick=void 0===b?e.x:i.cleanPosition(b,p,e.xref),e._yclick=void 0===_?e.y:i.cleanPosition(_,p,e.yref)}}}e.exports=function(t,e){a(t,e,{name:\\\"annotations\\\",handleItemDefaults:l})}},{\\\"../../lib\\\":719,\\\"../../plots/array_container_defaults\\\":763,\\\"../../plots/cartesian/axes\\\":767,\\\"./attributes\\\":576,\\\"./common_defaults\\\":579}],582:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../registry\\\"),a=t(\\\"../../plots/plots\\\"),o=t(\\\"../../lib\\\"),s=t(\\\"../../plots/cartesian/axes\\\"),l=t(\\\"../color\\\"),c=t(\\\"../drawing\\\"),u=t(\\\"../fx\\\"),h=t(\\\"../../lib/svg_text_utils\\\"),f=t(\\\"../../lib/setcursor\\\"),p=t(\\\"../dragelement\\\"),d=t(\\\"../../plot_api/plot_template\\\").arrayEditor,g=t(\\\"./draw_arrow_head\\\");function v(t,e){var r=t._fullLayout.annotations[e]||{},n=s.getFromId(t,r.xref),i=s.getFromId(t,r.yref);n&&n.setScale(),i&&i.setScale(),m(t,r,e,!1,n,i)}function m(t,e,r,a,s,v){var m,y,x=t._fullLayout,b=t._fullLayout._size,_=t._context.edits;a?(m=\\\"annotation-\\\"+a,y=a+\\\".annotations\\\"):(m=\\\"annotation\\\",y=\\\"annotations\\\");var w=d(t.layout,y,e),k=w.modifyBase,T=w.modifyItem,A=w.getUpdateObj;x._infolayer.selectAll(\\\".\\\"+m+'[data-index=\\\"'+r+'\\\"]').remove();var M=\\\"clip\\\"+x._uid+\\\"_ann\\\"+r;if(e._input&&!1!==e.visible){var S={x:{},y:{}},E=+e.textangle||0,C=x._infolayer.append(\\\"g\\\").classed(m,!0).attr(\\\"data-index\\\",String(r)).style(\\\"opacity\\\",e.opacity),L=C.append(\\\"g\\\").classed(\\\"annotation-text-g\\\",!0),P=_[e.showarrow?\\\"annotationTail\\\":\\\"annotationPosition\\\"],O=e.captureevents||_.annotationText||P,z=L.append(\\\"g\\\").style(\\\"pointer-events\\\",O?\\\"all\\\":null).call(f,\\\"pointer\\\").on(\\\"click\\\",function(){t._dragging=!1,t.emit(\\\"plotly_clickannotation\\\",q(n.event))});e.hovertext&&z.on(\\\"mouseover\\\",function(){var r=e.hoverlabel,n=r.font,i=this.getBoundingClientRect(),a=t.getBoundingClientRect();u.loneHover({x0:i.left-a.left,x1:i.right-a.left,y:(i.top+i.bottom)/2-a.top,text:e.hovertext,color:r.bgcolor,borderColor:r.bordercolor,fontFamily:n.family,fontSize:n.size,fontColor:n.color},{container:x._hoverlayer.node(),outerContainer:x._paper.node(),gd:t})}).on(\\\"mouseout\\\",function(){u.loneUnhover(x._hoverlayer.node())});var I=e.borderwidth,D=e.borderpad,R=I+D,F=z.append(\\\"rect\\\").attr(\\\"class\\\",\\\"bg\\\").style(\\\"stroke-width\\\",I+\\\"px\\\").call(l.stroke,e.bordercolor).call(l.fill,e.bgcolor),B=e.width||e.height,N=x._topclips.selectAll(\\\"#\\\"+M).data(B?[0]:[]);N.enter().append(\\\"clipPath\\\").classed(\\\"annclip\\\",!0).attr(\\\"id\\\",M).append(\\\"rect\\\"),N.exit().remove();var j=e.font,U=x._meta?o.templateString(e.text,x._meta):e.text,V=z.append(\\\"text\\\").classed(\\\"annotation-text\\\",!0).text(U);_.annotationText?V.call(h.makeEditable,{delegate:z,gd:t}).call(H).on(\\\"edit\\\",function(r){e.text=r,this.call(H),T(\\\"text\\\",r),s&&s.autorange&&k(s._name+\\\".autorange\\\",!0),v&&v.autorange&&k(v._name+\\\".autorange\\\",!0),i.call(\\\"_guiRelayout\\\",t,A())}):V.call(H)}else n.selectAll(\\\"#\\\"+M).remove();function q(t){var n={index:r,annotation:e._input,fullAnnotation:e,event:t};return a&&(n.subplotId=a),n}function H(r){return r.call(c.font,j).attr({\\\"text-anchor\\\":{left:\\\"start\\\",right:\\\"end\\\"}[e.align]||\\\"middle\\\"}),h.convertToTspans(r,t,G),r}function G(){var r=V.selectAll(\\\"a\\\");1===r.size()&&r.text()===V.text()&&z.insert(\\\"a\\\",\\\":first-child\\\").attr({\\\"xlink:xlink:href\\\":r.attr(\\\"xlink:href\\\"),\\\"xlink:xlink:show\\\":r.attr(\\\"xlink:show\\\")}).style({cursor:\\\"pointer\\\"}).node().appendChild(F.node());var n=z.select(\\\".annotation-text-math-group\\\"),u=!n.empty(),d=c.bBox((u?n:V).node()),m=d.width,y=d.height,w=e.width||m,O=e.height||y,D=Math.round(w+2*R),j=Math.round(O+2*R);function U(t,e){return\\\"auto\\\"===e&&(e=t<1/3?\\\"left\\\":t>2/3?\\\"right\\\":\\\"center\\\"),{center:0,middle:0,left:.5,bottom:-.5,right:-.5,top:.5}[e]}for(var H=!1,G=[\\\"x\\\",\\\"y\\\"],Y=0;Y<G.length;Y++){var W,X,Z,J,K,$=G[Y],Q=e[$+\\\"ref\\\"]||$,tt=e[\\\"a\\\"+$+\\\"ref\\\"],et={x:s,y:v}[$],rt=(E+(\\\"x\\\"===$?0:-90))*Math.PI/180,nt=D*Math.cos(rt),it=j*Math.sin(rt),at=Math.abs(nt)+Math.abs(it),ot=e[$+\\\"anchor\\\"],st=e[$+\\\"shift\\\"]*(\\\"x\\\"===$?1:-1),lt=S[$];if(et){var ct=et.r2fraction(e[$]);(ct<0||ct>1)&&(tt===Q?((ct=et.r2fraction(e[\\\"a\\\"+$]))<0||ct>1)&&(H=!0):H=!0),W=et._offset+et.r2p(e[$]),J=.5}else\\\"x\\\"===$?(Z=e[$],W=b.l+b.w*Z):(Z=1-e[$],W=b.t+b.h*Z),J=e.showarrow?.5:Z;if(e.showarrow){lt.head=W;var ut=e[\\\"a\\\"+$];K=nt*U(.5,e.xanchor)-it*U(.5,e.yanchor),tt===Q?(lt.tail=et._offset+et.r2p(ut),X=K):(lt.tail=W+ut,X=K+ut),lt.text=lt.tail+K;var ht=x[\\\"x\\\"===$?\\\"width\\\":\\\"height\\\"];if(\\\"paper\\\"===Q&&(lt.head=o.constrain(lt.head,1,ht-1)),\\\"pixel\\\"===tt){var ft=-Math.max(lt.tail-3,lt.text),pt=Math.min(lt.tail+3,lt.text)-ht;ft>0?(lt.tail+=ft,lt.text+=ft):pt>0&&(lt.tail-=pt,lt.text-=pt)}lt.tail+=st,lt.head+=st}else X=K=at*U(J,ot),lt.text=W+K;lt.text+=st,K+=st,X+=st,e[\\\"_\\\"+$+\\\"padplus\\\"]=at/2+X,e[\\\"_\\\"+$+\\\"padminus\\\"]=at/2-X,e[\\\"_\\\"+$+\\\"size\\\"]=at,e[\\\"_\\\"+$+\\\"shift\\\"]=K}if(t._dragging||!H){var dt=0,gt=0;if(\\\"left\\\"!==e.align&&(dt=(w-m)*(\\\"center\\\"===e.align?.5:1)),\\\"top\\\"!==e.valign&&(gt=(O-y)*(\\\"middle\\\"===e.valign?.5:1)),u)n.select(\\\"svg\\\").attr({x:R+dt-1,y:R+gt}).call(c.setClipUrl,B?M:null,t);else{var vt=R+gt-d.top,mt=R+dt-d.left;V.call(h.positionText,mt,vt).call(c.setClipUrl,B?M:null,t)}N.select(\\\"rect\\\").call(c.setRect,R,R,w,O),F.call(c.setRect,I/2,I/2,D-I,j-I),z.call(c.setTranslate,Math.round(S.x.text-D/2),Math.round(S.y.text-j/2)),L.attr({transform:\\\"rotate(\\\"+E+\\\",\\\"+S.x.text+\\\",\\\"+S.y.text+\\\")\\\"});var yt,xt=function(r,n){C.selectAll(\\\".annotation-arrow-g\\\").remove();var u=S.x.head,h=S.y.head,f=S.x.tail+r,d=S.y.tail+n,m=S.x.text+r,y=S.y.text+n,x=o.rotationXYMatrix(E,m,y),w=o.apply2DTransform(x),M=o.apply2DTransform2(x),P=+F.attr(\\\"width\\\"),O=+F.attr(\\\"height\\\"),I=m-.5*P,D=I+P,R=y-.5*O,B=R+O,N=[[I,R,I,B],[I,B,D,B],[D,B,D,R],[D,R,I,R]].map(M);if(!N.reduce(function(t,e){return t^!!o.segmentsIntersect(u,h,u+1e6,h+1e6,e[0],e[1],e[2],e[3])},!1)){N.forEach(function(t){var e=o.segmentsIntersect(f,d,u,h,t[0],t[1],t[2],t[3]);e&&(f=e.x,d=e.y)});var j=e.arrowwidth,U=e.arrowcolor,V=e.arrowside,q=C.append(\\\"g\\\").style({opacity:l.opacity(U)}).classed(\\\"annotation-arrow-g\\\",!0),H=q.append(\\\"path\\\").attr(\\\"d\\\",\\\"M\\\"+f+\\\",\\\"+d+\\\"L\\\"+u+\\\",\\\"+h).style(\\\"stroke-width\\\",j+\\\"px\\\").call(l.stroke,l.rgb(U));if(g(H,V,e),_.annotationPosition&&H.node().parentNode&&!a){var G=u,Y=h;if(e.standoff){var W=Math.sqrt(Math.pow(u-f,2)+Math.pow(h-d,2));G+=e.standoff*(f-u)/W,Y+=e.standoff*(d-h)/W}var X,Z,J=q.append(\\\"path\\\").classed(\\\"annotation-arrow\\\",!0).classed(\\\"anndrag\\\",!0).classed(\\\"cursor-move\\\",!0).attr({d:\\\"M3,3H-3V-3H3ZM0,0L\\\"+(f-G)+\\\",\\\"+(d-Y),transform:\\\"translate(\\\"+G+\\\",\\\"+Y+\\\")\\\"}).style(\\\"stroke-width\\\",j+6+\\\"px\\\").call(l.stroke,\\\"rgba(0,0,0,0)\\\").call(l.fill,\\\"rgba(0,0,0,0)\\\");p.init({element:J.node(),gd:t,prepFn:function(){var t=c.getTranslate(z);X=t.x,Z=t.y,s&&s.autorange&&k(s._name+\\\".autorange\\\",!0),v&&v.autorange&&k(v._name+\\\".autorange\\\",!0)},moveFn:function(t,r){var n=w(X,Z),i=n[0]+t,a=n[1]+r;z.call(c.setTranslate,i,a),T(\\\"x\\\",s?s.p2r(s.r2p(e.x)+t):e.x+t/b.w),T(\\\"y\\\",v?v.p2r(v.r2p(e.y)+r):e.y-r/b.h),e.axref===e.xref&&T(\\\"ax\\\",s.p2r(s.r2p(e.ax)+t)),e.ayref===e.yref&&T(\\\"ay\\\",v.p2r(v.r2p(e.ay)+r)),q.attr(\\\"transform\\\",\\\"translate(\\\"+t+\\\",\\\"+r+\\\")\\\"),L.attr({transform:\\\"rotate(\\\"+E+\\\",\\\"+i+\\\",\\\"+a+\\\")\\\"})},doneFn:function(){i.call(\\\"_guiRelayout\\\",t,A());var e=document.querySelector(\\\".js-notes-box-panel\\\");e&&e.redraw(e.selectedObj)}})}}};if(e.showarrow&&xt(0,0),P)p.init({element:z.node(),gd:t,prepFn:function(){yt=L.attr(\\\"transform\\\")},moveFn:function(t,r){var n=\\\"pointer\\\";if(e.showarrow)e.axref===e.xref?T(\\\"ax\\\",s.p2r(s.r2p(e.ax)+t)):T(\\\"ax\\\",e.ax+t),e.ayref===e.yref?T(\\\"ay\\\",v.p2r(v.r2p(e.ay)+r)):T(\\\"ay\\\",e.ay+r),xt(t,r);else{if(a)return;var i,o;if(s)i=s.p2r(s.r2p(e.x)+t);else{var l=e._xsize/b.w,c=e.x+(e._xshift-e.xshift)/b.w-l/2;i=p.align(c+t/b.w,l,0,1,e.xanchor)}if(v)o=v.p2r(v.r2p(e.y)+r);else{var u=e._ysize/b.h,h=e.y-(e._yshift+e.yshift)/b.h-u/2;o=p.align(h-r/b.h,u,0,1,e.yanchor)}T(\\\"x\\\",i),T(\\\"y\\\",o),s&&v||(n=p.getCursor(s?.5:i,v?.5:o,e.xanchor,e.yanchor))}L.attr({transform:\\\"translate(\\\"+t+\\\",\\\"+r+\\\")\\\"+yt}),f(z,n)},clickFn:function(r,n){e.captureevents&&t.emit(\\\"plotly_clickannotation\\\",q(n))},doneFn:function(){f(z),i.call(\\\"_guiRelayout\\\",t,A());var e=document.querySelector(\\\".js-notes-box-panel\\\");e&&e.redraw(e.selectedObj)}})}else z.remove()}}e.exports={draw:function(t){var e=t._fullLayout;e._infolayer.selectAll(\\\".annotation\\\").remove();for(var r=0;r<e.annotations.length;r++)e.annotations[r].visible&&v(t,r);return a.previousPromises(t)},drawOne:v,drawRaw:m}},{\\\"../../lib\\\":719,\\\"../../lib/setcursor\\\":739,\\\"../../lib/svg_text_utils\\\":743,\\\"../../plot_api/plot_template\\\":757,\\\"../../plots/cartesian/axes\\\":767,\\\"../../plots/plots\\\":828,\\\"../../registry\\\":847,\\\"../color\\\":593,\\\"../dragelement\\\":611,\\\"../drawing\\\":614,\\\"../fx\\\":632,\\\"./draw_arrow_head\\\":583,d3:163}],583:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../color\\\"),a=t(\\\"./arrow_paths\\\");e.exports=function(t,e,r){var o,s,l,c,u=t.node(),h=a[r.arrowhead||0],f=a[r.startarrowhead||0],p=(r.arrowwidth||1)*(r.arrowsize||1),d=(r.arrowwidth||1)*(r.startarrowsize||1),g=e.indexOf(\\\"start\\\")>=0,v=e.indexOf(\\\"end\\\")>=0,m=h.backoff*p+r.standoff,y=f.backoff*d+r.startstandoff;if(\\\"line\\\"===u.nodeName){o={x:+t.attr(\\\"x1\\\"),y:+t.attr(\\\"y1\\\")},s={x:+t.attr(\\\"x2\\\"),y:+t.attr(\\\"y2\\\")};var x=o.x-s.x,b=o.y-s.y;if(c=(l=Math.atan2(b,x))+Math.PI,m&&y&&m+y>Math.sqrt(x*x+b*b))return void P();if(m){if(m*m>x*x+b*b)return void P();var _=m*Math.cos(l),w=m*Math.sin(l);s.x+=_,s.y+=w,t.attr({x2:s.x,y2:s.y})}if(y){if(y*y>x*x+b*b)return void P();var k=y*Math.cos(l),T=y*Math.sin(l);o.x-=k,o.y-=T,t.attr({x1:o.x,y1:o.y})}}else if(\\\"path\\\"===u.nodeName){var A=u.getTotalLength(),M=\\\"\\\";if(A<m+y)return void P();var S=u.getPointAtLength(0),E=u.getPointAtLength(.1);l=Math.atan2(S.y-E.y,S.x-E.x),o=u.getPointAtLength(Math.min(y,A)),M=\\\"0px,\\\"+y+\\\"px,\\\";var C=u.getPointAtLength(A),L=u.getPointAtLength(A-.1);c=Math.atan2(C.y-L.y,C.x-L.x),s=u.getPointAtLength(Math.max(0,A-m)),M+=A-(M?y+m:m)+\\\"px,\\\"+A+\\\"px\\\",t.style(\\\"stroke-dasharray\\\",M)}function P(){t.style(\\\"stroke-dasharray\\\",\\\"0px,100px\\\")}function O(e,a,o,s){e.path&&(e.noRotate&&(o=0),n.select(u.parentNode).append(\\\"path\\\").attr({class:t.attr(\\\"class\\\"),d:e.path,transform:\\\"translate(\\\"+a.x+\\\",\\\"+a.y+\\\")\\\"+(o?\\\"rotate(\\\"+180*o/Math.PI+\\\")\\\":\\\"\\\")+\\\"scale(\\\"+s+\\\")\\\"}).style({fill:i.rgb(r.arrowcolor),\\\"stroke-width\\\":0}))}g&&O(f,o,l,d),v&&O(h,s,c,p)}},{\\\"../color\\\":593,\\\"./arrow_paths\\\":575,d3:163}],584:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./draw\\\"),i=t(\\\"./click\\\");e.exports={moduleType:\\\"component\\\",name:\\\"annotations\\\",layoutAttributes:t(\\\"./attributes\\\"),supplyLayoutDefaults:t(\\\"./defaults\\\"),includeBasePlot:t(\\\"../../plots/cartesian/include_components\\\")(\\\"annotations\\\"),calcAutorange:t(\\\"./calc_autorange\\\"),draw:n.draw,drawOne:n.drawOne,drawRaw:n.drawRaw,hasClickToShow:i.hasClickToShow,onClick:i.onClick,convertCoords:t(\\\"./convert_coords\\\")}},{\\\"../../plots/cartesian/include_components\\\":777,\\\"./attributes\\\":576,\\\"./calc_autorange\\\":577,\\\"./click\\\":578,\\\"./convert_coords\\\":580,\\\"./defaults\\\":581,\\\"./draw\\\":582}],585:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../annotations/attributes\\\"),i=t(\\\"../../plot_api/edit_types\\\").overrideAll,a=t(\\\"../../plot_api/plot_template\\\").templatedArray;e.exports=i(a(\\\"annotation\\\",{visible:n.visible,x:{valType:\\\"any\\\"},y:{valType:\\\"any\\\"},z:{valType:\\\"any\\\"},ax:{valType:\\\"number\\\"},ay:{valType:\\\"number\\\"},xanchor:n.xanchor,xshift:n.xshift,yanchor:n.yanchor,yshift:n.yshift,text:n.text,textangle:n.textangle,font:n.font,width:n.width,height:n.height,opacity:n.opacity,align:n.align,valign:n.valign,bgcolor:n.bgcolor,bordercolor:n.bordercolor,borderpad:n.borderpad,borderwidth:n.borderwidth,showarrow:n.showarrow,arrowcolor:n.arrowcolor,arrowhead:n.arrowhead,startarrowhead:n.startarrowhead,arrowside:n.arrowside,arrowsize:n.arrowsize,startarrowsize:n.startarrowsize,arrowwidth:n.arrowwidth,standoff:n.standoff,startstandoff:n.startstandoff,hovertext:n.hovertext,hoverlabel:n.hoverlabel,captureevents:n.captureevents}),\\\"calc\\\",\\\"from-root\\\")},{\\\"../../plot_api/edit_types\\\":750,\\\"../../plot_api/plot_template\\\":757,\\\"../annotations/attributes\\\":576}],586:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../plots/cartesian/axes\\\");function a(t,e){var r=e.fullSceneLayout.domain,a=e.fullLayout._size,o={pdata:null,type:\\\"linear\\\",autorange:!1,range:[-1/0,1/0]};t._xa={},n.extendFlat(t._xa,o),i.setConvert(t._xa),t._xa._offset=a.l+r.x[0]*a.w,t._xa.l2p=function(){return.5*(1+t._pdata[0]/t._pdata[3])*a.w*(r.x[1]-r.x[0])},t._ya={},n.extendFlat(t._ya,o),i.setConvert(t._ya),t._ya._offset=a.t+(1-r.y[1])*a.h,t._ya.l2p=function(){return.5*(1-t._pdata[1]/t._pdata[3])*a.h*(r.y[1]-r.y[0])}}e.exports=function(t){for(var e=t.fullSceneLayout.annotations,r=0;r<e.length;r++)a(e[r],t);t.fullLayout._infolayer.selectAll(\\\".annotation-\\\"+t.id).remove()}},{\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767}],587:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../plots/cartesian/axes\\\"),a=t(\\\"../../plots/array_container_defaults\\\"),o=t(\\\"../annotations/common_defaults\\\"),s=t(\\\"./attributes\\\");function l(t,e,r,a){function l(r,i){return n.coerce(t,e,s,r,i)}function c(t){var n=t+\\\"axis\\\",a={_fullLayout:{}};return a._fullLayout[n]=r[n],i.coercePosition(e,a,l,t,t,.5)}l(\\\"visible\\\")&&(o(t,e,a.fullLayout,l),c(\\\"x\\\"),c(\\\"y\\\"),c(\\\"z\\\"),n.noneOrAll(t,e,[\\\"x\\\",\\\"y\\\",\\\"z\\\"]),e.xref=\\\"x\\\",e.yref=\\\"y\\\",e.zref=\\\"z\\\",l(\\\"xanchor\\\"),l(\\\"yanchor\\\"),l(\\\"xshift\\\"),l(\\\"yshift\\\"),e.showarrow&&(e.axref=\\\"pixel\\\",e.ayref=\\\"pixel\\\",l(\\\"ax\\\",-10),l(\\\"ay\\\",-30),n.noneOrAll(t,e,[\\\"ax\\\",\\\"ay\\\"])))}e.exports=function(t,e,r){a(t,e,{name:\\\"annotations\\\",handleItemDefaults:l,fullLayout:r.fullLayout})}},{\\\"../../lib\\\":719,\\\"../../plots/array_container_defaults\\\":763,\\\"../../plots/cartesian/axes\\\":767,\\\"../annotations/common_defaults\\\":579,\\\"./attributes\\\":585}],588:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../annotations/draw\\\").drawRaw,i=t(\\\"../../plots/gl3d/project\\\"),a=[\\\"x\\\",\\\"y\\\",\\\"z\\\"];e.exports=function(t){for(var e=t.fullSceneLayout,r=t.dataScale,o=e.annotations,s=0;s<o.length;s++){for(var l=o[s],c=!1,u=0;u<3;u++){var h=a[u],f=l[h],p=e[h+\\\"axis\\\"].r2fraction(f);if(p<0||p>1){c=!0;break}}c?t.fullLayout._infolayer.select(\\\".annotation-\\\"+t.id+'[data-index=\\\"'+s+'\\\"]').remove():(l._pdata=i(t.glplot.cameraParams,[e.xaxis.r2l(l.x)*r[0],e.yaxis.r2l(l.y)*r[1],e.zaxis.r2l(l.z)*r[2]]),n(t.graphDiv,l,s,t.id,l._xa,l._ya))}}},{\\\"../../plots/gl3d/project\\\":816,\\\"../annotations/draw\\\":582}],589:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../lib\\\");e.exports={moduleType:\\\"component\\\",name:\\\"annotations3d\\\",schema:{subplots:{scene:{annotations:t(\\\"./attributes\\\")}}},layoutAttributes:t(\\\"./attributes\\\"),handleDefaults:t(\\\"./defaults\\\"),includeBasePlot:function(t,e){var r=n.subplotsRegistry.gl3d;if(!r)return;for(var a=r.attrRegex,o=Object.keys(t),s=0;s<o.length;s++){var l=o[s];a.test(l)&&(t[l].annotations||[]).length&&(i.pushUnique(e._basePlotModules,r),i.pushUnique(e._subplots.gl3d,l))}},convert:t(\\\"./convert\\\"),draw:t(\\\"./draw\\\")}},{\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"./attributes\\\":585,\\\"./convert\\\":586,\\\"./defaults\\\":587,\\\"./draw\\\":588}],590:[function(t,e,r){\\\"use strict\\\";e.exports=t(\\\"world-calendars/dist/main\\\"),t(\\\"world-calendars/dist/plus\\\"),t(\\\"world-calendars/dist/calendars/chinese\\\"),t(\\\"world-calendars/dist/calendars/coptic\\\"),t(\\\"world-calendars/dist/calendars/discworld\\\"),t(\\\"world-calendars/dist/calendars/ethiopian\\\"),t(\\\"world-calendars/dist/calendars/hebrew\\\"),t(\\\"world-calendars/dist/calendars/islamic\\\"),t(\\\"world-calendars/dist/calendars/julian\\\"),t(\\\"world-calendars/dist/calendars/mayan\\\"),t(\\\"world-calendars/dist/calendars/nanakshahi\\\"),t(\\\"world-calendars/dist/calendars/nepali\\\"),t(\\\"world-calendars/dist/calendars/persian\\\"),t(\\\"world-calendars/dist/calendars/taiwan\\\"),t(\\\"world-calendars/dist/calendars/thai\\\"),t(\\\"world-calendars/dist/calendars/ummalqura\\\")},{\\\"world-calendars/dist/calendars/chinese\\\":557,\\\"world-calendars/dist/calendars/coptic\\\":558,\\\"world-calendars/dist/calendars/discworld\\\":559,\\\"world-calendars/dist/calendars/ethiopian\\\":560,\\\"world-calendars/dist/calendars/hebrew\\\":561,\\\"world-calendars/dist/calendars/islamic\\\":562,\\\"world-calendars/dist/calendars/julian\\\":563,\\\"world-calendars/dist/calendars/mayan\\\":564,\\\"world-calendars/dist/calendars/nanakshahi\\\":565,\\\"world-calendars/dist/calendars/nepali\\\":566,\\\"world-calendars/dist/calendars/persian\\\":567,\\\"world-calendars/dist/calendars/taiwan\\\":568,\\\"world-calendars/dist/calendars/thai\\\":569,\\\"world-calendars/dist/calendars/ummalqura\\\":570,\\\"world-calendars/dist/main\\\":571,\\\"world-calendars/dist/plus\\\":572}],591:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./calendars\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../constants/numerical\\\"),o=a.EPOCHJD,s=a.ONEDAY,l={valType:\\\"enumerated\\\",values:Object.keys(n.calendars),editType:\\\"calc\\\",dflt:\\\"gregorian\\\"},c=function(t,e,r,n){var a={};return a[r]=l,i.coerce(t,e,a,r,n)},u=\\\"##\\\",h={d:{0:\\\"dd\\\",\\\"-\\\":\\\"d\\\"},e:{0:\\\"d\\\",\\\"-\\\":\\\"d\\\"},a:{0:\\\"D\\\",\\\"-\\\":\\\"D\\\"},A:{0:\\\"DD\\\",\\\"-\\\":\\\"DD\\\"},j:{0:\\\"oo\\\",\\\"-\\\":\\\"o\\\"},W:{0:\\\"ww\\\",\\\"-\\\":\\\"w\\\"},m:{0:\\\"mm\\\",\\\"-\\\":\\\"m\\\"},b:{0:\\\"M\\\",\\\"-\\\":\\\"M\\\"},B:{0:\\\"MM\\\",\\\"-\\\":\\\"MM\\\"},y:{0:\\\"yy\\\",\\\"-\\\":\\\"yy\\\"},Y:{0:\\\"yyyy\\\",\\\"-\\\":\\\"yyyy\\\"},U:u,w:u,c:{0:\\\"D M d %X yyyy\\\",\\\"-\\\":\\\"D M d %X yyyy\\\"},x:{0:\\\"mm/dd/yyyy\\\",\\\"-\\\":\\\"mm/dd/yyyy\\\"}};var f={};function p(t){var e=f[t];return e||(e=f[t]=n.instance(t))}function d(t){return i.extendFlat({},l,{description:t})}function g(t){return\\\"Sets the calendar system to use with `\\\"+t+\\\"` date data.\\\"}var v={xcalendar:d(g(\\\"x\\\"))},m=i.extendFlat({},v,{ycalendar:d(g(\\\"y\\\"))}),y=i.extendFlat({},m,{zcalendar:d(g(\\\"z\\\"))}),x=d([\\\"Sets the calendar system to use for `range` and `tick0`\\\",\\\"if this is a date axis. This does not set the calendar for\\\",\\\"interpreting data on this axis, that's specified in the trace\\\",\\\"or via the global `layout.calendar`\\\"].join(\\\" \\\"));e.exports={moduleType:\\\"component\\\",name:\\\"calendars\\\",schema:{traces:{scatter:m,bar:m,box:m,heatmap:m,contour:m,histogram:m,histogram2d:m,histogram2dcontour:m,scatter3d:y,surface:y,mesh3d:y,scattergl:m,ohlc:v,candlestick:v},layout:{calendar:d([\\\"Sets the default calendar system to use for interpreting and\\\",\\\"displaying dates throughout the plot.\\\"].join(\\\" \\\"))},subplots:{xaxis:{calendar:x},yaxis:{calendar:x},scene:{xaxis:{calendar:x},yaxis:{calendar:x},zaxis:{calendar:x}},polar:{radialaxis:{calendar:x}}},transforms:{filter:{valuecalendar:d([\\\"Sets the calendar system to use for `value`, if it is a date.\\\"].join(\\\" \\\")),targetcalendar:d([\\\"Sets the calendar system to use for `target`, if it is an\\\",\\\"array of dates. If `target` is a string (eg *x*) we use the\\\",\\\"corresponding trace attribute (eg `xcalendar`) if it exists,\\\",\\\"even if `targetcalendar` is provided.\\\"].join(\\\" \\\"))}}},layoutAttributes:l,handleDefaults:c,handleTraceDefaults:function(t,e,r,n){for(var i=0;i<r.length;i++)c(t,e,r[i]+\\\"calendar\\\",n.calendar)},CANONICAL_SUNDAY:{chinese:\\\"2000-01-02\\\",coptic:\\\"2000-01-03\\\",discworld:\\\"2000-01-03\\\",ethiopian:\\\"2000-01-05\\\",hebrew:\\\"5000-01-01\\\",islamic:\\\"1000-01-02\\\",julian:\\\"2000-01-03\\\",mayan:\\\"5000-01-01\\\",nanakshahi:\\\"1000-01-05\\\",nepali:\\\"2000-01-05\\\",persian:\\\"1000-01-01\\\",jalali:\\\"1000-01-01\\\",taiwan:\\\"1000-01-04\\\",thai:\\\"2000-01-04\\\",ummalqura:\\\"1400-01-06\\\"},CANONICAL_TICK:{chinese:\\\"2000-01-01\\\",coptic:\\\"2000-01-01\\\",discworld:\\\"2000-01-01\\\",ethiopian:\\\"2000-01-01\\\",hebrew:\\\"5000-01-01\\\",islamic:\\\"1000-01-01\\\",julian:\\\"2000-01-01\\\",mayan:\\\"5000-01-01\\\",nanakshahi:\\\"1000-01-01\\\",nepali:\\\"2000-01-01\\\",persian:\\\"1000-01-01\\\",jalali:\\\"1000-01-01\\\",taiwan:\\\"1000-01-01\\\",thai:\\\"2000-01-01\\\",ummalqura:\\\"1400-01-01\\\"},DFLTRANGE:{chinese:[\\\"2000-01-01\\\",\\\"2001-01-01\\\"],coptic:[\\\"1700-01-01\\\",\\\"1701-01-01\\\"],discworld:[\\\"1800-01-01\\\",\\\"1801-01-01\\\"],ethiopian:[\\\"2000-01-01\\\",\\\"2001-01-01\\\"],hebrew:[\\\"5700-01-01\\\",\\\"5701-01-01\\\"],islamic:[\\\"1400-01-01\\\",\\\"1401-01-01\\\"],julian:[\\\"2000-01-01\\\",\\\"2001-01-01\\\"],mayan:[\\\"5200-01-01\\\",\\\"5201-01-01\\\"],nanakshahi:[\\\"0500-01-01\\\",\\\"0501-01-01\\\"],nepali:[\\\"2000-01-01\\\",\\\"2001-01-01\\\"],persian:[\\\"1400-01-01\\\",\\\"1401-01-01\\\"],jalali:[\\\"1400-01-01\\\",\\\"1401-01-01\\\"],taiwan:[\\\"0100-01-01\\\",\\\"0101-01-01\\\"],thai:[\\\"2500-01-01\\\",\\\"2501-01-01\\\"],ummalqura:[\\\"1400-01-01\\\",\\\"1401-01-01\\\"]},getCal:p,worldCalFmt:function(t,e,r){for(var n,i,a,l,c,f=Math.floor((e+.05)/s)+o,d=p(r).fromJD(f),g=0;-1!==(g=t.indexOf(\\\"%\\\",g));)\\\"0\\\"===(n=t.charAt(g+1))||\\\"-\\\"===n||\\\"_\\\"===n?(a=3,i=t.charAt(g+2),\\\"_\\\"===n&&(n=\\\"-\\\")):(i=n,n=\\\"0\\\",a=2),(l=h[i])?(c=l===u?u:d.formatDate(l[n]),t=t.substr(0,g)+c+t.substr(g+a),g+=c.length):g+=a;return t}}},{\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"./calendars\\\":590}],592:[function(t,e,r){\\\"use strict\\\";r.defaults=[\\\"#1f77b4\\\",\\\"#ff7f0e\\\",\\\"#2ca02c\\\",\\\"#d62728\\\",\\\"#9467bd\\\",\\\"#8c564b\\\",\\\"#e377c2\\\",\\\"#7f7f7f\\\",\\\"#bcbd22\\\",\\\"#17becf\\\"],r.defaultLine=\\\"#444\\\",r.lightLine=\\\"#eee\\\",r.background=\\\"#fff\\\",r.borderLine=\\\"#BEC8D9\\\",r.lightFraction=1e3/11},{}],593:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"tinycolor2\\\"),i=t(\\\"fast-isnumeric\\\"),a=e.exports={},o=t(\\\"./attributes\\\");a.defaults=o.defaults;var s=a.defaultLine=o.defaultLine;a.lightLine=o.lightLine;var l=a.background=o.background;function c(t){if(i(t)||\\\"string\\\"!=typeof t)return t;var e=t.trim();if(\\\"rgb\\\"!==e.substr(0,3))return t;var r=e.match(/^rgba?\\\\s*\\\\(([^()]*)\\\\)$/);if(!r)return t;var n=r[1].trim().split(/\\\\s*[\\\\s,]\\\\s*/),a=\\\"a\\\"===e.charAt(3)&&4===n.length;if(!a&&3!==n.length)return t;for(var o=0;o<n.length;o++){if(!n[o].length)return t;if(n[o]=Number(n[o]),!(n[o]>=0))return t;if(3===o)n[o]>1&&(n[o]=1);else if(n[o]>=1)return t}var s=Math.round(255*n[0])+\\\", \\\"+Math.round(255*n[1])+\\\", \\\"+Math.round(255*n[2]);return a?\\\"rgba(\\\"+s+\\\", \\\"+n[3]+\\\")\\\":\\\"rgb(\\\"+s+\\\")\\\"}a.tinyRGB=function(t){var e=t.toRgb();return\\\"rgb(\\\"+Math.round(e.r)+\\\", \\\"+Math.round(e.g)+\\\", \\\"+Math.round(e.b)+\\\")\\\"},a.rgb=function(t){return a.tinyRGB(n(t))},a.opacity=function(t){return t?n(t).getAlpha():0},a.addOpacity=function(t,e){var r=n(t).toRgb();return\\\"rgba(\\\"+Math.round(r.r)+\\\", \\\"+Math.round(r.g)+\\\", \\\"+Math.round(r.b)+\\\", \\\"+e+\\\")\\\"},a.combine=function(t,e){var r=n(t).toRgb();if(1===r.a)return n(t).toRgbString();var i=n(e||l).toRgb(),a=1===i.a?i:{r:255*(1-i.a)+i.r*i.a,g:255*(1-i.a)+i.g*i.a,b:255*(1-i.a)+i.b*i.a},o={r:a.r*(1-r.a)+r.r*r.a,g:a.g*(1-r.a)+r.g*r.a,b:a.b*(1-r.a)+r.b*r.a};return n(o).toRgbString()},a.contrast=function(t,e,r){var i=n(t);return 1!==i.getAlpha()&&(i=n(a.combine(t,l))),(i.isDark()?e?i.lighten(e):l:r?i.darken(r):s).toString()},a.stroke=function(t,e){var r=n(e);t.style({stroke:a.tinyRGB(r),\\\"stroke-opacity\\\":r.getAlpha()})},a.fill=function(t,e){var r=n(e);t.style({fill:a.tinyRGB(r),\\\"fill-opacity\\\":r.getAlpha()})},a.clean=function(t){if(t&&\\\"object\\\"==typeof t){var e,r,n,i,o=Object.keys(t);for(e=0;e<o.length;e++)if(i=t[n=o[e]],\\\"color\\\"===n.substr(n.length-5))if(Array.isArray(i))for(r=0;r<i.length;r++)i[r]=c(i[r]);else t[n]=c(i);else if(\\\"colorscale\\\"===n.substr(n.length-10)&&Array.isArray(i))for(r=0;r<i.length;r++)Array.isArray(i[r])&&(i[r][1]=c(i[r][1]));else if(Array.isArray(i)){var s=i[0];if(!Array.isArray(s)&&s&&\\\"object\\\"==typeof s)for(r=0;r<i.length;r++)a.clean(i[r])}else i&&\\\"object\\\"==typeof i&&a.clean(i)}}},{\\\"./attributes\\\":592,\\\"fast-isnumeric\\\":225,tinycolor2:537}],594:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/cartesian/layout_attributes\\\"),i=t(\\\"../../plots/font_attributes\\\"),a=t(\\\"../../lib/extend\\\").extendFlat,o=t(\\\"../../plot_api/edit_types\\\").overrideAll;e.exports=o({thicknessmode:{valType:\\\"enumerated\\\",values:[\\\"fraction\\\",\\\"pixels\\\"],dflt:\\\"pixels\\\"},thickness:{valType:\\\"number\\\",min:0,dflt:30},lenmode:{valType:\\\"enumerated\\\",values:[\\\"fraction\\\",\\\"pixels\\\"],dflt:\\\"fraction\\\"},len:{valType:\\\"number\\\",min:0,dflt:1},x:{valType:\\\"number\\\",dflt:1.02,min:-2,max:3},xanchor:{valType:\\\"enumerated\\\",values:[\\\"left\\\",\\\"center\\\",\\\"right\\\"],dflt:\\\"left\\\"},xpad:{valType:\\\"number\\\",min:0,dflt:10},y:{valType:\\\"number\\\",dflt:.5,min:-2,max:3},yanchor:{valType:\\\"enumerated\\\",values:[\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],dflt:\\\"middle\\\"},ypad:{valType:\\\"number\\\",min:0,dflt:10},outlinecolor:n.linecolor,outlinewidth:n.linewidth,bordercolor:n.linecolor,borderwidth:{valType:\\\"number\\\",min:0,dflt:0},bgcolor:{valType:\\\"color\\\",dflt:\\\"rgba(0,0,0,0)\\\"},tickmode:n.tickmode,nticks:n.nticks,tick0:n.tick0,dtick:n.dtick,tickvals:n.tickvals,ticktext:n.ticktext,ticks:a({},n.ticks,{dflt:\\\"\\\"}),ticklen:n.ticklen,tickwidth:n.tickwidth,tickcolor:n.tickcolor,showticklabels:n.showticklabels,tickfont:i({}),tickangle:n.tickangle,tickformat:n.tickformat,tickformatstops:n.tickformatstops,tickprefix:n.tickprefix,showtickprefix:n.showtickprefix,ticksuffix:n.ticksuffix,showticksuffix:n.showticksuffix,separatethousands:n.separatethousands,exponentformat:n.exponentformat,showexponent:n.showexponent,title:{text:{valType:\\\"string\\\"},font:i({}),side:{valType:\\\"enumerated\\\",values:[\\\"right\\\",\\\"top\\\",\\\"bottom\\\"],dflt:\\\"top\\\"}},_deprecated:{title:{valType:\\\"string\\\"},titlefont:i({}),titleside:{valType:\\\"enumerated\\\",values:[\\\"right\\\",\\\"top\\\",\\\"bottom\\\"],dflt:\\\"top\\\"}}},\\\"colorbars\\\",\\\"from-root\\\")},{\\\"../../lib/extend\\\":710,\\\"../../plot_api/edit_types\\\":750,\\\"../../plots/cartesian/layout_attributes\\\":779,\\\"../../plots/font_attributes\\\":793}],595:[function(t,e,r){\\\"use strict\\\";e.exports={cn:{colorbar:\\\"colorbar\\\",cbbg:\\\"cbbg\\\",cbfill:\\\"cbfill\\\",cbfills:\\\"cbfills\\\",cbline:\\\"cbline\\\",cblines:\\\"cblines\\\",cbaxis:\\\"cbaxis\\\",cbtitleunshift:\\\"cbtitleunshift\\\",cbtitle:\\\"cbtitle\\\",cboutline:\\\"cboutline\\\",crisp:\\\"crisp\\\",jsPlaceholder:\\\"js-placeholder\\\"}}},{}],596:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../plot_api/plot_template\\\"),a=t(\\\"../../plots/cartesian/tick_value_defaults\\\"),o=t(\\\"../../plots/cartesian/tick_mark_defaults\\\"),s=t(\\\"../../plots/cartesian/tick_label_defaults\\\"),l=t(\\\"./attributes\\\");e.exports=function(t,e,r){var c=i.newContainer(e,\\\"colorbar\\\"),u=t.colorbar||{};function h(t,e){return n.coerce(u,c,l,t,e)}var f=h(\\\"thicknessmode\\\");h(\\\"thickness\\\",\\\"fraction\\\"===f?30/(r.width-r.margin.l-r.margin.r):30);var p=h(\\\"lenmode\\\");h(\\\"len\\\",\\\"fraction\\\"===p?1:r.height-r.margin.t-r.margin.b),h(\\\"x\\\"),h(\\\"xanchor\\\"),h(\\\"xpad\\\"),h(\\\"y\\\"),h(\\\"yanchor\\\"),h(\\\"ypad\\\"),n.noneOrAll(u,c,[\\\"x\\\",\\\"y\\\"]),h(\\\"outlinecolor\\\"),h(\\\"outlinewidth\\\"),h(\\\"bordercolor\\\"),h(\\\"borderwidth\\\"),h(\\\"bgcolor\\\"),a(u,c,h,\\\"linear\\\");var d={outerTicks:!1,font:r.font};s(u,c,h,\\\"linear\\\",d),o(u,c,h,\\\"linear\\\",d),h(\\\"title.text\\\",r._dfltTitle.colorbar),n.coerceFont(h,\\\"title.font\\\",r.font),h(\\\"title.side\\\")}},{\\\"../../lib\\\":719,\\\"../../plot_api/plot_template\\\":757,\\\"../../plots/cartesian/tick_label_defaults\\\":786,\\\"../../plots/cartesian/tick_mark_defaults\\\":787,\\\"../../plots/cartesian/tick_value_defaults\\\":788,\\\"./attributes\\\":594}],597:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"tinycolor2\\\"),a=t(\\\"../../plots/plots\\\"),o=t(\\\"../../registry\\\"),s=t(\\\"../../plots/cartesian/axes\\\"),l=t(\\\"../dragelement\\\"),c=t(\\\"../../lib\\\"),u=t(\\\"../../lib/extend\\\").extendFlat,h=t(\\\"../../lib/setcursor\\\"),f=t(\\\"../drawing\\\"),p=t(\\\"../color\\\"),d=t(\\\"../titles\\\"),g=t(\\\"../../lib/svg_text_utils\\\"),v=t(\\\"../colorscale/helpers\\\").flipScale,m=t(\\\"../../plots/cartesian/axis_defaults\\\"),y=t(\\\"../../plots/cartesian/position_defaults\\\"),x=t(\\\"../../plots/cartesian/layout_attributes\\\"),b=t(\\\"../../constants/alignment\\\"),_=b.LINE_SPACING,w=b.FROM_TL,k=b.FROM_BR,T=t(\\\"./constants\\\").cn;e.exports={draw:function(t){var e=t._fullLayout._infolayer.selectAll(\\\"g.\\\"+T.colorbar).data(function(t){var e,r,n,i,a=t._fullLayout,o=t.calcdata,s=[];function l(t){return u(t,{_fillcolor:null,_line:{color:null,width:null,dash:null},_levels:{start:null,end:null,size:null},_filllevels:null,_fillgradient:null,_zrange:null})}function c(){\\\"function\\\"==typeof i.calc?i.calc(t,n,e):(e._fillgradient=r.reversescale?v(r.colorscale):r.colorscale,e._zrange=[r[i.min],r[i.max]])}for(var h=0;h<o.length;h++){var f=o[h],p=(n=f[0].trace)._module.colorbar;if(!0===n.visible&&p)for(var d=Array.isArray(p),g=d?p:[p],m=0;m<g.length;m++){var y=(i=g[m]).container;(r=y?n[y]:n)&&r.showscale&&((e=l(r.colorbar))._id=\\\"cb\\\"+n.uid+(d&&y?\\\"-\\\"+y:\\\"\\\"),e._traceIndex=n.index,e._propPrefix=(y?y+\\\".\\\":\\\"\\\")+\\\"colorbar.\\\",e._meta=n._meta,c(),s.push(e))}}for(var x in a._colorAxes)if((r=a[x]).showscale){var b=a._colorAxes[x];(e=l(r.colorbar))._id=\\\"cb\\\"+x,e._propPrefix=x+\\\".colorbar.\\\",e._meta=a._meta,i={min:\\\"cmin\\\",max:\\\"cmax\\\"},\\\"heatmap\\\"!==b[0]&&(n=b[1],i.calc=n._module.colorbar.calc),c(),s.push(e)}return s}(t),function(t){return t._id});e.enter().append(\\\"g\\\").attr(\\\"class\\\",function(t){return t._id}).classed(T.colorbar,!0),e.each(function(e){var r=n.select(this);c.ensureSingle(r,\\\"rect\\\",T.cbbg),c.ensureSingle(r,\\\"g\\\",T.cbfills),c.ensureSingle(r,\\\"g\\\",T.cblines),c.ensureSingle(r,\\\"g\\\",T.cbaxis,function(t){t.classed(T.crisp,!0)}),c.ensureSingle(r,\\\"g\\\",T.cbtitleunshift,function(t){t.append(\\\"g\\\").classed(T.cbtitle,!0)}),c.ensureSingle(r,\\\"rect\\\",T.cboutline);var v=function(t,e,r){var o=r._fullLayout,l=o._size,h=e._fillcolor,v=e._line,b=e.title,A=b.side,M=e._zrange||n.extent((\\\"function\\\"==typeof h?h:v.color).domain()),S=\\\"function\\\"==typeof v.color?v.color:function(){return v.color},E=\\\"function\\\"==typeof h?h:function(){return h},C=e._levels,L=function(t,e,r){var n,i,a=e._levels,o=[],s=[],l=a.end+a.size/100,c=a.size,u=1.001*r[0]-.001*r[1],h=1.001*r[1]-.001*r[0];for(i=0;i<1e5&&(n=a.start+i*c,!(c>0?n>=l:n<=l));i++)n>u&&n<h&&o.push(n);if(e._fillgradient)s=[0];else if(\\\"function\\\"==typeof e._fillcolor){var f=e._filllevels;if(f)for(l=f.end+f.size/100,c=f.size,i=0;i<1e5&&(n=f.start+i*c,!(c>0?n>=l:n<=l));i++)n>r[0]&&n<r[1]&&s.push(n);else(s=o.map(function(t){return t-a.size/2})).push(s[s.length-1]+a.size)}else e._fillcolor&&\\\"string\\\"==typeof e._fillcolor&&(s=[0]);return a.size<0&&(o.reverse(),s.reverse()),{line:o,fill:s}}(0,e,M),P=L.fill,O=L.line,z=Math.round(e.thickness*(\\\"fraction\\\"===e.thicknessmode?l.w:1)),I=z/l.w,D=Math.round(e.len*(\\\"fraction\\\"===e.lenmode?l.h:1)),R=D/l.h,F=e.xpad/l.w,B=(e.borderwidth+e.outlinewidth)/2,N=e.ypad/l.h,j=Math.round(e.x*l.w+e.xpad),U=e.x-I*({middle:.5,right:1}[e.xanchor]||0),V=e.y+R*(({top:-.5,bottom:.5}[e.yanchor]||0)-.5),q=Math.round(l.h*(1-V)),H=q-D;e._lenFrac=R,e._thickFrac=I,e._xLeftFrac=U,e._yBottomFrac=V;var G=function(t,e,r){var n=t._fullLayout,i={type:\\\"linear\\\",range:r,tickmode:e.tickmode,nticks:e.nticks,tick0:e.tick0,dtick:e.dtick,tickvals:e.tickvals,ticktext:e.ticktext,ticks:e.ticks,ticklen:e.ticklen,tickwidth:e.tickwidth,tickcolor:e.tickcolor,showticklabels:e.showticklabels,tickfont:e.tickfont,tickangle:e.tickangle,tickformat:e.tickformat,exponentformat:e.exponentformat,separatethousands:e.separatethousands,showexponent:e.showexponent,showtickprefix:e.showtickprefix,tickprefix:e.tickprefix,showticksuffix:e.showticksuffix,ticksuffix:e.ticksuffix,title:e.title,showline:!0,anchor:\\\"free\\\",side:\\\"right\\\",position:1},a={type:\\\"linear\\\",_id:\\\"y\\\"+e._id},o={letter:\\\"y\\\",font:n.font,noHover:!0,noTickson:!0,calendar:n.calendar};function s(t,e){return c.coerce(i,a,x,t,e)}return m(i,a,s,o,n),y(i,a,s,o),a}(r,e,M);if(G.position=e.x+F+I,-1!==[\\\"top\\\",\\\"bottom\\\"].indexOf(A)&&(G.title.side=A,G.titlex=e.x+F,G.titley=V+(\\\"top\\\"===b.side?R-N:N)),v.color&&\\\"auto\\\"===e.tickmode){G.tickmode=\\\"linear\\\",G.tick0=C.start;var Y=C.size,W=c.constrain((q-H)/50,4,15)+1,X=(M[1]-M[0])/((e.nticks||W)*Y);if(X>1){var Z=Math.pow(10,Math.floor(Math.log(X)/Math.LN10));Y*=Z*c.roundUp(X/Z,[2,5,10]),(Math.abs(C.start)/C.size+1e-6)%1<2e-6&&(G.tick0=0)}G.dtick=Y}G.domain=[V+N,V+R-N],G.setScale(),t.attr(\\\"transform\\\",\\\"translate(\\\"+Math.round(l.l)+\\\",\\\"+Math.round(l.t)+\\\")\\\");var J,K=t.select(\\\".\\\"+T.cbtitleunshift).attr(\\\"transform\\\",\\\"translate(-\\\"+Math.round(l.l)+\\\",-\\\"+Math.round(l.t)+\\\")\\\"),$=t.select(\\\".\\\"+T.cbaxis),Q=0;function tt(n,i){var a={propContainer:G,propName:e._propPrefix+\\\"title\\\",traceIndex:e._traceIndex,_meta:e._meta,placeholder:o._dfltTitle.colorbar,containerGroup:t.select(\\\".\\\"+T.cbtitle)},s=\\\"h\\\"===n.charAt(0)?n.substr(1):\\\"h\\\"+n;t.selectAll(\\\".\\\"+s+\\\",.\\\"+s+\\\"-math-group\\\").remove(),d.draw(r,n,u(a,i||{}))}return c.syncOrAsync([a.previousPromises,function(){if(-1!==[\\\"top\\\",\\\"bottom\\\"].indexOf(A)){var t,r=l.l+(e.x+F)*l.w,n=G.title.font.size;t=\\\"top\\\"===A?(1-(V+R-N))*l.h+l.t+3+.75*n:(1-(V+N))*l.h+l.t-3-.25*n,tt(G._id+\\\"title\\\",{attributes:{x:r,y:t,\\\"text-anchor\\\":\\\"start\\\"}})}},function(){if(-1!==[\\\"top\\\",\\\"bottom\\\"].indexOf(A)){var a=t.select(\\\".\\\"+T.cbtitle),o=a.select(\\\"text\\\"),u=[-e.outlinewidth/2,e.outlinewidth/2],h=a.select(\\\".h\\\"+G._id+\\\"title-math-group\\\").node(),p=15.6;if(o.node()&&(p=parseInt(o.node().style.fontSize,10)*_),h?(Q=f.bBox(h).height)>p&&(u[1]-=(Q-p)/2):o.node()&&!o.classed(T.jsPlaceholder)&&(Q=f.bBox(o.node()).height),Q){if(Q+=5,\\\"top\\\"===A)G.domain[1]-=Q/l.h,u[1]*=-1;else{G.domain[0]+=Q/l.h;var d=g.lineCount(o);u[1]+=(1-d)*p}a.attr(\\\"transform\\\",\\\"translate(\\\"+u+\\\")\\\"),G.setScale()}}t.selectAll(\\\".\\\"+T.cbfills+\\\",.\\\"+T.cblines).attr(\\\"transform\\\",\\\"translate(0,\\\"+Math.round(l.h*(1-G.domain[1]))+\\\")\\\"),$.attr(\\\"transform\\\",\\\"translate(0,\\\"+Math.round(-l.t)+\\\")\\\");var m=t.select(\\\".\\\"+T.cbfills).selectAll(\\\"rect.\\\"+T.cbfill).data(P);m.enter().append(\\\"rect\\\").classed(T.cbfill,!0).style(\\\"stroke\\\",\\\"none\\\"),m.exit().remove();var y=M.map(G.c2p).map(Math.round).sort(function(t,e){return t-e});m.each(function(t,a){var o=[0===a?M[0]:(P[a]+P[a-1])/2,a===P.length-1?M[1]:(P[a]+P[a+1])/2].map(G.c2p).map(Math.round);o[1]=c.constrain(o[1]+(o[1]>o[0])?1:-1,y[0],y[1]);var s=n.select(this).attr({x:j,width:Math.max(z,2),y:n.min(o),height:Math.max(n.max(o)-n.min(o),2)});if(e._fillgradient)f.gradient(s,r,e._id,\\\"vertical\\\",e._fillgradient,\\\"fill\\\");else{var l=E(t).replace(\\\"e-\\\",\\\"\\\");s.attr(\\\"fill\\\",i(l).toHexString())}});var x=t.select(\\\".\\\"+T.cblines).selectAll(\\\"path.\\\"+T.cbline).data(v.color&&v.width?O:[]);x.enter().append(\\\"path\\\").classed(T.cbline,!0),x.exit().remove(),x.each(function(t){n.select(this).attr(\\\"d\\\",\\\"M\\\"+j+\\\",\\\"+(Math.round(G.c2p(t))+v.width/2%1)+\\\"h\\\"+z).call(f.lineGroupStyle,v.width,S(t),v.dash)}),$.selectAll(\\\"g.\\\"+G._id+\\\"tick,path\\\").remove();var b=j+z+(e.outlinewidth||0)/2-(\\\"outside\\\"===e.ticks?1:0),w=s.calcTicks(G),k=s.makeTransFn(G),C=s.getTickSigns(G)[2];return s.drawTicks(r,G,{vals:\\\"inside\\\"===G.ticks?s.clipEnds(G,w):w,layer:$,path:s.makeTickPath(G,b,C),transFn:k}),s.drawLabels(r,G,{vals:w,layer:$,transFn:k,labelFns:s.makeLabelFns(G,b)})},function(){if(-1===[\\\"top\\\",\\\"bottom\\\"].indexOf(A)){var t=G.title.font.size,e=G._offset+G._length/2,i=l.l+(G.position||0)*l.w+(\\\"right\\\"===G.side?10+t*(G.showticklabels?1:.5):-10-t*(G.showticklabels?.5:0));tt(\\\"h\\\"+G._id+\\\"title\\\",{avoid:{selection:n.select(r).selectAll(\\\"g.\\\"+G._id+\\\"tick\\\"),side:A,offsetLeft:l.l,offsetTop:0,maxShift:o.width},attributes:{x:i,y:e,\\\"text-anchor\\\":\\\"middle\\\"},transform:{rotate:\\\"-90\\\",offset:0}})}},a.previousPromises,function(){var n=z+e.outlinewidth/2+f.bBox($.node()).width;if((J=K.select(\\\"text\\\")).node()&&!J.classed(T.jsPlaceholder)){var i,o=K.select(\\\".h\\\"+G._id+\\\"title-math-group\\\").node();i=o&&-1!==[\\\"top\\\",\\\"bottom\\\"].indexOf(A)?f.bBox(o).width:f.bBox(K.node()).right-j-l.l,n=Math.max(n,i)}var s=2*e.xpad+n+e.borderwidth+e.outlinewidth/2,c=q-H;t.select(\\\".\\\"+T.cbbg).attr({x:j-e.xpad-(e.borderwidth+e.outlinewidth)/2,y:H-B,width:Math.max(s,2),height:Math.max(c+2*B,2)}).call(p.fill,e.bgcolor).call(p.stroke,e.bordercolor).style(\\\"stroke-width\\\",e.borderwidth),t.selectAll(\\\".\\\"+T.cboutline).attr({x:j,y:H+e.ypad+(\\\"top\\\"===A?Q:0),width:Math.max(z,2),height:Math.max(c-2*e.ypad-Q,2)}).call(p.stroke,e.outlinecolor).style({fill:\\\"none\\\",\\\"stroke-width\\\":e.outlinewidth});var u=({center:.5,right:1}[e.xanchor]||0)*s;t.attr(\\\"transform\\\",\\\"translate(\\\"+(l.l-u)+\\\",\\\"+l.t+\\\")\\\");var h={},d=w[e.yanchor],g=k[e.yanchor];\\\"pixels\\\"===e.lenmode?(h.y=e.y,h.t=c*d,h.b=c*g):(h.t=h.b=0,h.yt=e.y+e.len*d,h.yb=e.y-e.len*g);var v=w[e.xanchor],m=k[e.xanchor];if(\\\"pixels\\\"===e.thicknessmode)h.x=e.x,h.l=s*v,h.r=s*m;else{var y=s-z;h.l=y*v,h.r=y*m,h.xl=e.x-e.thickness*v,h.xr=e.x+e.thickness*m}a.autoMargin(r,e._id,h)}],r)}(r,e,t);v&&v.then&&(t._promises||[]).push(v),t._context.edits.colorbarPosition&&function(t,e,r){var n,i,a,s=r._fullLayout._size;l.init({element:t.node(),gd:r,prepFn:function(){n=t.attr(\\\"transform\\\"),h(t)},moveFn:function(r,o){t.attr(\\\"transform\\\",n+\\\" translate(\\\"+r+\\\",\\\"+o+\\\")\\\"),i=l.align(e._xLeftFrac+r/s.w,e._thickFrac,0,1,e.xanchor),a=l.align(e._yBottomFrac-o/s.h,e._lenFrac,0,1,e.yanchor);var c=l.getCursor(i,a,e.xanchor,e.yanchor);h(t,c)},doneFn:function(){if(h(t),void 0!==i&&void 0!==a){var n={};n[e._propPrefix+\\\"x\\\"]=i,n[e._propPrefix+\\\"y\\\"]=a,void 0!==e._traceIndex?o.call(\\\"_guiRestyle\\\",r,n,e._traceIndex):o.call(\\\"_guiRelayout\\\",r,n)}}})}(r,e,t)}),e.exit().each(function(e){a.autoMargin(t,e._id)}).remove(),e.order()}}},{\\\"../../constants/alignment\\\":688,\\\"../../lib\\\":719,\\\"../../lib/extend\\\":710,\\\"../../lib/setcursor\\\":739,\\\"../../lib/svg_text_utils\\\":743,\\\"../../plots/cartesian/axes\\\":767,\\\"../../plots/cartesian/axis_defaults\\\":769,\\\"../../plots/cartesian/layout_attributes\\\":779,\\\"../../plots/cartesian/position_defaults\\\":782,\\\"../../plots/plots\\\":828,\\\"../../registry\\\":847,\\\"../color\\\":593,\\\"../colorscale/helpers\\\":604,\\\"../dragelement\\\":611,\\\"../drawing\\\":614,\\\"../titles\\\":681,\\\"./constants\\\":595,d3:163,tinycolor2:537}],598:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\");e.exports=function(t){return n.isPlainObject(t.colorbar)}},{\\\"../../lib\\\":719}],599:[function(t,e,r){\\\"use strict\\\";e.exports={moduleType:\\\"component\\\",name:\\\"colorbar\\\",attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),draw:t(\\\"./draw\\\").draw,hasColorbar:t(\\\"./has_colorbar\\\")}},{\\\"./attributes\\\":594,\\\"./defaults\\\":596,\\\"./draw\\\":597,\\\"./has_colorbar\\\":598}],600:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../colorbar/attributes\\\"),i=t(\\\"../../lib/regex\\\").counter,a=t(\\\"./scales.js\\\").scales;Object.keys(a);function o(t){return\\\"`\\\"+t+\\\"`\\\"}e.exports=function(t,e){t=t||\\\"\\\";var r,s=(e=e||{}).cLetter||\\\"c\\\",l=(\\\"onlyIfNumerical\\\"in e?e.onlyIfNumerical:Boolean(t),\\\"noScale\\\"in e?e.noScale:\\\"marker.line\\\"===t),c=\\\"showScaleDflt\\\"in e?e.showScaleDflt:\\\"z\\\"===s,u=\\\"string\\\"==typeof e.colorscaleDflt?a[e.colorscaleDflt]:null,h=e.editTypeOverride||\\\"\\\",f=t?t+\\\".\\\":\\\"\\\";\\\"colorAttr\\\"in e?(r=e.colorAttr,e.colorAttr):o(f+(r={z:\\\"z\\\",c:\\\"color\\\"}[s]));var p=s+\\\"auto\\\",d=s+\\\"min\\\",g=s+\\\"max\\\",v=s+\\\"mid\\\",m=(o(f+p),o(f+d),o(f+g),{});m[d]=m[g]=void 0;var y={};y[p]=!1;var x={};return\\\"color\\\"===r&&(x.color={valType:\\\"color\\\",arrayOk:!0,editType:h||\\\"style\\\"},e.anim&&(x.color.anim=!0)),x[p]={valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\",impliedEdits:m},x[d]={valType:\\\"number\\\",dflt:null,editType:h||\\\"plot\\\",impliedEdits:y},x[g]={valType:\\\"number\\\",dflt:null,editType:h||\\\"plot\\\",impliedEdits:y},x[v]={valType:\\\"number\\\",dflt:null,editType:\\\"calc\\\",impliedEdits:m},x.colorscale={valType:\\\"colorscale\\\",editType:\\\"calc\\\",dflt:u,impliedEdits:{autocolorscale:!1}},x.autocolorscale={valType:\\\"boolean\\\",dflt:!1!==e.autoColorDflt,editType:\\\"calc\\\",impliedEdits:{colorscale:void 0}},x.reversescale={valType:\\\"boolean\\\",dflt:!1,editType:\\\"plot\\\"},l||(x.showscale={valType:\\\"boolean\\\",dflt:c,editType:\\\"calc\\\"},x.colorbar=n),e.noColorAxis||(x.coloraxis={valType:\\\"subplotid\\\",regex:i(\\\"coloraxis\\\"),dflt:null,editType:\\\"calc\\\"}),x}},{\\\"../../lib/regex\\\":735,\\\"../colorbar/attributes\\\":594,\\\"./scales.js\\\":608}],601:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"./helpers\\\").extractOpts;e.exports=function(t,e,r){var o,s=t._fullLayout,l=r.vals,c=r.containerStr,u=c?i.nestedProperty(e,c).get():e,h=a(u),f=!1!==h.auto,p=h.min,d=h.max,g=h.mid,v=function(){return i.aggNums(Math.min,null,l)},m=function(){return i.aggNums(Math.max,null,l)};(void 0===p?p=v():f&&(p=u._colorAx&&n(p)?Math.min(p,v()):v()),void 0===d?d=m():f&&(d=u._colorAx&&n(d)?Math.max(d,m()):m()),f&&void 0!==g&&(d-g>g-p?p=g-(d-g):d-g<g-p&&(d=g+(g-p))),p===d&&(p-=.5,d+=.5),h._sync(\\\"min\\\",p),h._sync(\\\"max\\\",d),h.autocolorscale)&&(o=p*d<0?s.colorscale.diverging:p>=0?s.colorscale.sequential:s.colorscale.sequentialminus,h._sync(\\\"colorscale\\\",o))}},{\\\"../../lib\\\":719,\\\"./helpers\\\":604,\\\"fast-isnumeric\\\":225}],602:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./helpers\\\").hasColorscale,a=t(\\\"./helpers\\\").extractOpts;e.exports=function(t,e){function r(t,e){var r=t[\\\"_\\\"+e];void 0!==r&&(t[e]=r)}function o(t,i){var o=i.container?n.nestedProperty(t,i.container).get():t;if(o)if(o.coloraxis)o._colorAx=e[o.coloraxis];else{var s=a(o),l=s.auto;(l||void 0===s.min)&&r(o,i.min),(l||void 0===s.max)&&r(o,i.max),s.autocolorscale&&r(o,\\\"colorscale\\\")}}for(var s=0;s<t.length;s++){var l=t[s],c=l._module.colorbar;if(c)if(Array.isArray(c))for(var u=0;u<c.length;u++)o(l,c[u]);else o(l,c);i(l,\\\"marker.line\\\")&&o(l,{container:\\\"marker.line\\\",min:\\\"cmin\\\",max:\\\"cmax\\\"})}for(var h in e._colorAxes)o(e[h],{min:\\\"cmin\\\",max:\\\"cmax\\\"})}},{\\\"../../lib\\\":719,\\\"./helpers\\\":604}],603:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../colorbar/has_colorbar\\\"),o=t(\\\"../colorbar/defaults\\\"),s=t(\\\"./scales\\\").isValid,l=t(\\\"../../registry\\\").traceIs;function c(t,e){var r=e.slice(0,e.length-1);return e?i.nestedProperty(t,r).get()||{}:t}e.exports=function t(e,r,u,h,f){var p=f.prefix,d=f.cLetter,g=\\\"_module\\\"in r,v=c(e,p),m=c(r,p),y=c(r._template||{},p)||{},x=function(){return delete e.coloraxis,delete r.coloraxis,t(e,r,u,h,f)};if(g){var b=u._colorAxes||{},_=h(p+\\\"coloraxis\\\");if(_){var w=l(r,\\\"contour\\\")&&i.nestedProperty(r,\\\"contours.coloring\\\").get()||\\\"heatmap\\\",k=b[_];return void(k?(k[2].push(x),k[0]!==w&&(k[0]=!1,i.warn([\\\"Ignoring coloraxis:\\\",_,\\\"setting\\\",\\\"as it is linked to incompatible colorscales.\\\"].join(\\\" \\\")))):b[_]=[w,r,[x]])}}var T=v[d+\\\"min\\\"],A=v[d+\\\"max\\\"],M=n(T)&&n(A)&&T<A;h(p+d+\\\"auto\\\",!M)?h(p+d+\\\"mid\\\"):(h(p+d+\\\"min\\\"),h(p+d+\\\"max\\\"));var S,E,C=v.colorscale,L=y.colorscale;(void 0!==C&&(S=!s(C)),void 0!==L&&(S=!s(L)),h(p+\\\"autocolorscale\\\",S),h(p+\\\"colorscale\\\"),h(p+\\\"reversescale\\\"),\\\"marker.line.\\\"!==p)&&(p&&g&&(E=a(v)),h(p+\\\"showscale\\\",E)&&o(v,m,u))}},{\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"../colorbar/defaults\\\":596,\\\"../colorbar/has_colorbar\\\":598,\\\"./scales\\\":608,\\\"fast-isnumeric\\\":225}],604:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"tinycolor2\\\"),a=t(\\\"fast-isnumeric\\\"),o=t(\\\"../../lib\\\"),s=t(\\\"../color\\\"),l=t(\\\"./scales\\\").isValid;var c=[\\\"showscale\\\",\\\"autocolorscale\\\",\\\"colorscale\\\",\\\"reversescale\\\",\\\"colorbar\\\"],u=[\\\"min\\\",\\\"max\\\",\\\"mid\\\",\\\"auto\\\"];function h(t){var e,r,n,i=t._colorAx,a=i||t,o={};for(r=0;r<c.length;r++)o[n=c[r]]=a[n];if(i)for(e=\\\"c\\\",r=0;r<u.length;r++)o[n=u[r]]=a[\\\"c\\\"+n];else{var s;for(r=0;r<u.length;r++)(s=\\\"c\\\"+(n=u[r]))in a?o[n]=a[s]:(s=\\\"z\\\"+n)in a&&(o[n]=a[s]);e=s.charAt(0)}return o._sync=function(t,r){var n=-1!==u.indexOf(t)?e+t:t;a[n]=a[\\\"_\\\"+n]=r},o}function f(t){for(var e=h(t),r=e.min,n=e.max,i=e.reversescale?p(e.colorscale):e.colorscale,a=i.length,o=new Array(a),s=new Array(a),l=0;l<a;l++){var c=i[l];o[l]=r+c[0]*(n-r),s[l]=c[1]}return{domain:o,range:s}}function p(t){for(var e=t.length,r=new Array(e),n=e-1,i=0;n>=0;n--,i++){var a=t[n];r[i]=[1-a[0],a[1]]}return r}function d(t,e){e=e||{};for(var r=t.domain,o=t.range,l=o.length,c=new Array(l),u=0;u<l;u++){var h=i(o[u]).toRgb();c[u]=[h.r,h.g,h.b,h.a]}var f,p=n.scale.linear().domain(r).range(c).clamp(!0),d=e.noNumericCheck,v=e.returnArray;return(f=d&&v?p:d?function(t){return g(p(t))}:v?function(t){return a(t)?p(t):i(t).isValid()?t:s.defaultLine}:function(t){return a(t)?g(p(t)):i(t).isValid()?t:s.defaultLine}).domain=p.domain,f.range=function(){return o},f}function g(t){var e={r:t[0],g:t[1],b:t[2],a:t[3]};return i(e).toRgbString()}e.exports={hasColorscale:function(t,e){var r=e?o.nestedProperty(t,e).get()||{}:t,n=r.color,i=!1;if(o.isArrayOrTypedArray(n))for(var s=0;s<n.length;s++)if(a(n[s])){i=!0;break}return o.isPlainObject(r)&&(i||!0===r.showscale||a(r.cmin)&&a(r.cmax)||l(r.colorscale)||o.isPlainObject(r.colorbar))},extractOpts:h,extractScale:f,flipScale:p,makeColorScaleFunc:d,makeColorScaleFuncFromTrace:function(t,e){return d(f(t),e)}}},{\\\"../../lib\\\":719,\\\"../color\\\":593,\\\"./scales\\\":608,d3:163,\\\"fast-isnumeric\\\":225,tinycolor2:537}],605:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./scales\\\"),i=t(\\\"./helpers\\\");e.exports={moduleType:\\\"component\\\",name:\\\"colorscale\\\",attributes:t(\\\"./attributes\\\"),layoutAttributes:t(\\\"./layout_attributes\\\"),supplyLayoutDefaults:t(\\\"./layout_defaults\\\"),handleDefaults:t(\\\"./defaults\\\"),crossTraceDefaults:t(\\\"./cross_trace_defaults\\\"),calc:t(\\\"./calc\\\"),scales:n.scales,defaultScale:n.defaultScale,getScale:n.get,isValidScale:n.isValid,hasColorscale:i.hasColorscale,extractOpts:i.extractOpts,extractScale:i.extractScale,flipScale:i.flipScale,makeColorScaleFunc:i.makeColorScaleFunc,makeColorScaleFuncFromTrace:i.makeColorScaleFuncFromTrace}},{\\\"./attributes\\\":600,\\\"./calc\\\":601,\\\"./cross_trace_defaults\\\":602,\\\"./defaults\\\":603,\\\"./helpers\\\":604,\\\"./layout_attributes\\\":606,\\\"./layout_defaults\\\":607,\\\"./scales\\\":608}],606:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib/extend\\\").extendFlat,i=t(\\\"./attributes\\\"),a=t(\\\"./scales\\\").scales;e.exports={editType:\\\"calc\\\",colorscale:{editType:\\\"calc\\\",sequential:{valType:\\\"colorscale\\\",dflt:a.Reds,editType:\\\"calc\\\"},sequentialminus:{valType:\\\"colorscale\\\",dflt:a.Blues,editType:\\\"calc\\\"},diverging:{valType:\\\"colorscale\\\",dflt:a.RdBu,editType:\\\"calc\\\"}},coloraxis:n({_isSubplotObj:!0,editType:\\\"calc\\\"},i(\\\"\\\",{colorAttr:\\\"corresponding trace color array(s)\\\",noColorAxis:!0,showScaleDflt:!0}))}},{\\\"../../lib/extend\\\":710,\\\"./attributes\\\":600,\\\"./scales\\\":608}],607:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../plot_api/plot_template\\\"),a=t(\\\"./layout_attributes\\\"),o=t(\\\"./defaults\\\");e.exports=function(t,e){function r(r,i){return n.coerce(t,e,a,r,i)}r(\\\"colorscale.sequential\\\"),r(\\\"colorscale.sequentialminus\\\"),r(\\\"colorscale.diverging\\\");var s,l,c=e._colorAxes;function u(t,e){return n.coerce(s,l,a.coloraxis,t,e)}for(var h in c){var f=c[h];if(f[0])s=t[h]||{},(l=i.newContainer(e,h,\\\"coloraxis\\\"))._name=h,o(s,l,e,u,{prefix:\\\"\\\",cLetter:\\\"c\\\"});else{for(var p=0;p<f[2].length;p++)f[2][p]();delete e._colorAxes[h]}}}},{\\\"../../lib\\\":719,\\\"../../plot_api/plot_template\\\":757,\\\"./defaults\\\":603,\\\"./layout_attributes\\\":606}],608:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"tinycolor2\\\"),i={Greys:[[0,\\\"rgb(0,0,0)\\\"],[1,\\\"rgb(255,255,255)\\\"]],YlGnBu:[[0,\\\"rgb(8,29,88)\\\"],[.125,\\\"rgb(37,52,148)\\\"],[.25,\\\"rgb(34,94,168)\\\"],[.375,\\\"rgb(29,145,192)\\\"],[.5,\\\"rgb(65,182,196)\\\"],[.625,\\\"rgb(127,205,187)\\\"],[.75,\\\"rgb(199,233,180)\\\"],[.875,\\\"rgb(237,248,217)\\\"],[1,\\\"rgb(255,255,217)\\\"]],Greens:[[0,\\\"rgb(0,68,27)\\\"],[.125,\\\"rgb(0,109,44)\\\"],[.25,\\\"rgb(35,139,69)\\\"],[.375,\\\"rgb(65,171,93)\\\"],[.5,\\\"rgb(116,196,118)\\\"],[.625,\\\"rgb(161,217,155)\\\"],[.75,\\\"rgb(199,233,192)\\\"],[.875,\\\"rgb(229,245,224)\\\"],[1,\\\"rgb(247,252,245)\\\"]],YlOrRd:[[0,\\\"rgb(128,0,38)\\\"],[.125,\\\"rgb(189,0,38)\\\"],[.25,\\\"rgb(227,26,28)\\\"],[.375,\\\"rgb(252,78,42)\\\"],[.5,\\\"rgb(253,141,60)\\\"],[.625,\\\"rgb(254,178,76)\\\"],[.75,\\\"rgb(254,217,118)\\\"],[.875,\\\"rgb(255,237,160)\\\"],[1,\\\"rgb(255,255,204)\\\"]],Bluered:[[0,\\\"rgb(0,0,255)\\\"],[1,\\\"rgb(255,0,0)\\\"]],RdBu:[[0,\\\"rgb(5,10,172)\\\"],[.35,\\\"rgb(106,137,247)\\\"],[.5,\\\"rgb(190,190,190)\\\"],[.6,\\\"rgb(220,170,132)\\\"],[.7,\\\"rgb(230,145,90)\\\"],[1,\\\"rgb(178,10,28)\\\"]],Reds:[[0,\\\"rgb(220,220,220)\\\"],[.2,\\\"rgb(245,195,157)\\\"],[.4,\\\"rgb(245,160,105)\\\"],[1,\\\"rgb(178,10,28)\\\"]],Blues:[[0,\\\"rgb(5,10,172)\\\"],[.35,\\\"rgb(40,60,190)\\\"],[.5,\\\"rgb(70,100,245)\\\"],[.6,\\\"rgb(90,120,245)\\\"],[.7,\\\"rgb(106,137,247)\\\"],[1,\\\"rgb(220,220,220)\\\"]],Picnic:[[0,\\\"rgb(0,0,255)\\\"],[.1,\\\"rgb(51,153,255)\\\"],[.2,\\\"rgb(102,204,255)\\\"],[.3,\\\"rgb(153,204,255)\\\"],[.4,\\\"rgb(204,204,255)\\\"],[.5,\\\"rgb(255,255,255)\\\"],[.6,\\\"rgb(255,204,255)\\\"],[.7,\\\"rgb(255,153,255)\\\"],[.8,\\\"rgb(255,102,204)\\\"],[.9,\\\"rgb(255,102,102)\\\"],[1,\\\"rgb(255,0,0)\\\"]],Rainbow:[[0,\\\"rgb(150,0,90)\\\"],[.125,\\\"rgb(0,0,200)\\\"],[.25,\\\"rgb(0,25,255)\\\"],[.375,\\\"rgb(0,152,255)\\\"],[.5,\\\"rgb(44,255,150)\\\"],[.625,\\\"rgb(151,255,0)\\\"],[.75,\\\"rgb(255,234,0)\\\"],[.875,\\\"rgb(255,111,0)\\\"],[1,\\\"rgb(255,0,0)\\\"]],Portland:[[0,\\\"rgb(12,51,131)\\\"],[.25,\\\"rgb(10,136,186)\\\"],[.5,\\\"rgb(242,211,56)\\\"],[.75,\\\"rgb(242,143,56)\\\"],[1,\\\"rgb(217,30,30)\\\"]],Jet:[[0,\\\"rgb(0,0,131)\\\"],[.125,\\\"rgb(0,60,170)\\\"],[.375,\\\"rgb(5,255,255)\\\"],[.625,\\\"rgb(255,255,0)\\\"],[.875,\\\"rgb(250,0,0)\\\"],[1,\\\"rgb(128,0,0)\\\"]],Hot:[[0,\\\"rgb(0,0,0)\\\"],[.3,\\\"rgb(230,0,0)\\\"],[.6,\\\"rgb(255,210,0)\\\"],[1,\\\"rgb(255,255,255)\\\"]],Blackbody:[[0,\\\"rgb(0,0,0)\\\"],[.2,\\\"rgb(230,0,0)\\\"],[.4,\\\"rgb(230,210,0)\\\"],[.7,\\\"rgb(255,255,255)\\\"],[1,\\\"rgb(160,200,255)\\\"]],Earth:[[0,\\\"rgb(0,0,130)\\\"],[.1,\\\"rgb(0,180,180)\\\"],[.2,\\\"rgb(40,210,40)\\\"],[.4,\\\"rgb(230,230,50)\\\"],[.6,\\\"rgb(120,70,20)\\\"],[1,\\\"rgb(255,255,255)\\\"]],Electric:[[0,\\\"rgb(0,0,0)\\\"],[.15,\\\"rgb(30,0,100)\\\"],[.4,\\\"rgb(120,0,100)\\\"],[.6,\\\"rgb(160,90,0)\\\"],[.8,\\\"rgb(230,200,0)\\\"],[1,\\\"rgb(255,250,220)\\\"]],Viridis:[[0,\\\"#440154\\\"],[.06274509803921569,\\\"#48186a\\\"],[.12549019607843137,\\\"#472d7b\\\"],[.18823529411764706,\\\"#424086\\\"],[.25098039215686274,\\\"#3b528b\\\"],[.3137254901960784,\\\"#33638d\\\"],[.3764705882352941,\\\"#2c728e\\\"],[.4392156862745098,\\\"#26828e\\\"],[.5019607843137255,\\\"#21918c\\\"],[.5647058823529412,\\\"#1fa088\\\"],[.6274509803921569,\\\"#28ae80\\\"],[.6901960784313725,\\\"#3fbc73\\\"],[.7529411764705882,\\\"#5ec962\\\"],[.8156862745098039,\\\"#84d44b\\\"],[.8784313725490196,\\\"#addc30\\\"],[.9411764705882353,\\\"#d8e219\\\"],[1,\\\"#fde725\\\"]],Cividis:[[0,\\\"rgb(0,32,76)\\\"],[.058824,\\\"rgb(0,42,102)\\\"],[.117647,\\\"rgb(0,52,110)\\\"],[.176471,\\\"rgb(39,63,108)\\\"],[.235294,\\\"rgb(60,74,107)\\\"],[.294118,\\\"rgb(76,85,107)\\\"],[.352941,\\\"rgb(91,95,109)\\\"],[.411765,\\\"rgb(104,106,112)\\\"],[.470588,\\\"rgb(117,117,117)\\\"],[.529412,\\\"rgb(131,129,120)\\\"],[.588235,\\\"rgb(146,140,120)\\\"],[.647059,\\\"rgb(161,152,118)\\\"],[.705882,\\\"rgb(176,165,114)\\\"],[.764706,\\\"rgb(192,177,109)\\\"],[.823529,\\\"rgb(209,191,102)\\\"],[.882353,\\\"rgb(225,204,92)\\\"],[.941176,\\\"rgb(243,219,79)\\\"],[1,\\\"rgb(255,233,69)\\\"]]},a=i.RdBu;function o(t){var e=0;if(!Array.isArray(t)||t.length<2)return!1;if(!t[0]||!t[t.length-1])return!1;if(0!=+t[0][0]||1!=+t[t.length-1][0])return!1;for(var r=0;r<t.length;r++){var i=t[r];if(2!==i.length||+i[0]<e||!n(i[1]).isValid())return!1;e=+i[0]}return!0}e.exports={scales:i,defaultScale:a,get:function(t,e){if(e||(e=a),!t)return e;function r(){try{t=i[t]||JSON.parse(t)}catch(r){t=e}}return\\\"string\\\"==typeof t&&(r(),\\\"string\\\"==typeof t&&r()),o(t)?t:e},isValid:function(t){return void 0!==i[t]||o(t)}}},{tinycolor2:537}],609:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,n,i){var a=(t-r)/(n-r),o=a+e/(n-r),s=(a+o)/2;return\\\"left\\\"===i||\\\"bottom\\\"===i?a:\\\"center\\\"===i||\\\"middle\\\"===i?s:\\\"right\\\"===i||\\\"top\\\"===i?o:a<2/3-s?a:o>4/3-s?o:s}},{}],610:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=[[\\\"sw-resize\\\",\\\"s-resize\\\",\\\"se-resize\\\"],[\\\"w-resize\\\",\\\"move\\\",\\\"e-resize\\\"],[\\\"nw-resize\\\",\\\"n-resize\\\",\\\"ne-resize\\\"]];e.exports=function(t,e,r,a){return t=\\\"left\\\"===r?0:\\\"center\\\"===r?1:\\\"right\\\"===r?2:n.constrain(Math.floor(3*t),0,2),e=\\\"bottom\\\"===a?0:\\\"middle\\\"===a?1:\\\"top\\\"===a?2:n.constrain(Math.floor(3*e),0,2),i[e][t]}},{\\\"../../lib\\\":719}],611:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"mouse-event-offset\\\"),i=t(\\\"has-hover\\\"),a=t(\\\"has-passive-events\\\"),o=t(\\\"../../lib\\\").removeElement,s=t(\\\"../../plots/cartesian/constants\\\"),l=e.exports={};l.align=t(\\\"./align\\\"),l.getCursor=t(\\\"./cursor\\\");var c=t(\\\"./unhover\\\");function u(){var t=document.createElement(\\\"div\\\");t.className=\\\"dragcover\\\";var e=t.style;return e.position=\\\"fixed\\\",e.left=0,e.right=0,e.top=0,e.bottom=0,e.zIndex=999999999,e.background=\\\"none\\\",document.body.appendChild(t),t}function h(t){return n(t.changedTouches?t.changedTouches[0]:t,document.body)}l.unhover=c.wrapped,l.unhoverRaw=c.raw,l.init=function(t){var e,r,n,c,f,p,d,g,v=t.gd,m=1,y=v._context.doubleClickDelay,x=t.element;v._mouseDownTime||(v._mouseDownTime=0),x.style.pointerEvents=\\\"all\\\",x.onmousedown=_,a?(x._ontouchstart&&x.removeEventListener(\\\"touchstart\\\",x._ontouchstart),x._ontouchstart=_,x.addEventListener(\\\"touchstart\\\",_,{passive:!1})):x.ontouchstart=_;var b=t.clampFn||function(t,e,r){return Math.abs(t)<r&&(t=0),Math.abs(e)<r&&(e=0),[t,e]};function _(a){v._dragged=!1,v._dragging=!0;var o=h(a);e=o[0],r=o[1],d=a.target,p=a,g=2===a.buttons||a.ctrlKey,\\\"undefined\\\"==typeof a.clientX&&\\\"undefined\\\"==typeof a.clientY&&(a.clientX=e,a.clientY=r),(n=(new Date).getTime())-v._mouseDownTime<y?m+=1:(m=1,v._mouseDownTime=n),t.prepFn&&t.prepFn(a,e,r),i&&!g?(f=u()).style.cursor=window.getComputedStyle(x).cursor:i||(f=document,c=window.getComputedStyle(document.documentElement).cursor,document.documentElement.style.cursor=window.getComputedStyle(x).cursor),document.addEventListener(\\\"mouseup\\\",k),document.addEventListener(\\\"touchend\\\",k),!1!==t.dragmode&&(a.preventDefault(),document.addEventListener(\\\"mousemove\\\",w),document.addEventListener(\\\"touchmove\\\",w))}function w(n){n.preventDefault();var i=h(n),a=t.minDrag||s.MINDRAG,o=b(i[0]-e,i[1]-r,a),c=o[0],u=o[1];(c||u)&&(v._dragged=!0,l.unhover(v)),v._dragged&&t.moveFn&&!g&&(v._dragdata={element:x,dx:c,dy:u},t.moveFn(c,u))}function k(e){if(delete v._dragdata,!1!==t.dragmode&&(e.preventDefault(),document.removeEventListener(\\\"mousemove\\\",w),document.removeEventListener(\\\"touchmove\\\",w)),document.removeEventListener(\\\"mouseup\\\",k),document.removeEventListener(\\\"touchend\\\",k),i?o(f):c&&(f.documentElement.style.cursor=c,c=null),v._dragging){if(v._dragging=!1,(new Date).getTime()-v._mouseDownTime>y&&(m=Math.max(m-1,1)),v._dragged)t.doneFn&&t.doneFn();else if(t.clickFn&&t.clickFn(m,p),!g){var r;try{r=new MouseEvent(\\\"click\\\",e)}catch(t){var n=h(e);(r=document.createEvent(\\\"MouseEvents\\\")).initMouseEvent(\\\"click\\\",e.bubbles,e.cancelable,e.view,e.detail,e.screenX,e.screenY,n[0],n[1],e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,e.relatedTarget)}d.dispatchEvent(r)}v._dragging=!1,v._dragged=!1}else v._dragged=!1}},l.coverSlip=u},{\\\"../../lib\\\":719,\\\"../../plots/cartesian/constants\\\":773,\\\"./align\\\":609,\\\"./cursor\\\":610,\\\"./unhover\\\":612,\\\"has-hover\\\":410,\\\"has-passive-events\\\":411,\\\"mouse-event-offset\\\":436}],612:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib/events\\\"),i=t(\\\"../../lib/throttle\\\"),a=t(\\\"../../lib/dom\\\").getGraphDiv,o=t(\\\"../fx/constants\\\"),s=e.exports={};s.wrapped=function(t,e,r){(t=a(t))._fullLayout&&i.clear(t._fullLayout._uid+o.HOVERID),s.raw(t,e,r)},s.raw=function(t,e){var r=t._fullLayout,i=t._hoverdata;e||(e={}),e.target&&!1===n.triggerHandler(t,\\\"plotly_beforehover\\\",e)||(r._hoverlayer.selectAll(\\\"g\\\").remove(),r._hoverlayer.selectAll(\\\"line\\\").remove(),r._hoverlayer.selectAll(\\\"circle\\\").remove(),t._hoverdata=void 0,e.target&&i&&t.emit(\\\"plotly_unhover\\\",{event:e,points:i}))}},{\\\"../../lib/dom\\\":708,\\\"../../lib/events\\\":709,\\\"../../lib/throttle\\\":744,\\\"../fx/constants\\\":626}],613:[function(t,e,r){\\\"use strict\\\";r.dash={valType:\\\"string\\\",values:[\\\"solid\\\",\\\"dot\\\",\\\"dash\\\",\\\"longdash\\\",\\\"dashdot\\\",\\\"longdashdot\\\"],dflt:\\\"solid\\\",editType:\\\"style\\\"}},{}],614:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"fast-isnumeric\\\"),a=t(\\\"tinycolor2\\\"),o=t(\\\"../../registry\\\"),s=t(\\\"../color\\\"),l=t(\\\"../colorscale\\\"),c=t(\\\"../../lib\\\"),u=t(\\\"../../lib/svg_text_utils\\\"),h=t(\\\"../../constants/xmlns_namespaces\\\"),f=t(\\\"../../constants/alignment\\\").LINE_SPACING,p=t(\\\"../../constants/interactions\\\").DESELECTDIM,d=t(\\\"../../traces/scatter/subtypes\\\"),g=t(\\\"../../traces/scatter/make_bubble_size_func\\\"),v=e.exports={};v.font=function(t,e,r,n){c.isPlainObject(e)&&(n=e.color,r=e.size,e=e.family),e&&t.style(\\\"font-family\\\",e),r+1&&t.style(\\\"font-size\\\",r+\\\"px\\\"),n&&t.call(s.fill,n)},v.setPosition=function(t,e,r){t.attr(\\\"x\\\",e).attr(\\\"y\\\",r)},v.setSize=function(t,e,r){t.attr(\\\"width\\\",e).attr(\\\"height\\\",r)},v.setRect=function(t,e,r,n,i){t.call(v.setPosition,e,r).call(v.setSize,n,i)},v.translatePoint=function(t,e,r,n){var a=r.c2p(t.x),o=n.c2p(t.y);return!!(i(a)&&i(o)&&e.node())&&(\\\"text\\\"===e.node().nodeName?e.attr(\\\"x\\\",a).attr(\\\"y\\\",o):e.attr(\\\"transform\\\",\\\"translate(\\\"+a+\\\",\\\"+o+\\\")\\\"),!0)},v.translatePoints=function(t,e,r){t.each(function(t){var i=n.select(this);v.translatePoint(t,i,e,r)})},v.hideOutsideRangePoint=function(t,e,r,n,i,a){e.attr(\\\"display\\\",r.isPtWithinRange(t,i)&&n.isPtWithinRange(t,a)?null:\\\"none\\\")},v.hideOutsideRangePoints=function(t,e){if(e._hasClipOnAxisFalse){var r=e.xaxis,i=e.yaxis;t.each(function(e){var a=e[0].trace,s=a.xcalendar,l=a.ycalendar,c=o.traceIs(a,\\\"bar-like\\\")?\\\".bartext\\\":\\\".point,.textpoint\\\";t.selectAll(c).each(function(t){v.hideOutsideRangePoint(t,n.select(this),r,i,s,l)})})}},v.crispRound=function(t,e,r){return e&&i(e)?t._context.staticPlot?e:e<1?1:Math.round(e):r||0},v.singleLineStyle=function(t,e,r,n,i){e.style(\\\"fill\\\",\\\"none\\\");var a=(((t||[])[0]||{}).trace||{}).line||{},o=r||a.width||0,l=i||a.dash||\\\"\\\";s.stroke(e,n||a.color),v.dashLine(e,l,o)},v.lineGroupStyle=function(t,e,r,i){t.style(\\\"fill\\\",\\\"none\\\").each(function(t){var a=(((t||[])[0]||{}).trace||{}).line||{},o=e||a.width||0,l=i||a.dash||\\\"\\\";n.select(this).call(s.stroke,r||a.color).call(v.dashLine,l,o)})},v.dashLine=function(t,e,r){r=+r||0,e=v.dashStyle(e,r),t.style({\\\"stroke-dasharray\\\":e,\\\"stroke-width\\\":r+\\\"px\\\"})},v.dashStyle=function(t,e){e=+e||1;var r=Math.max(e,3);return\\\"solid\\\"===t?t=\\\"\\\":\\\"dot\\\"===t?t=r+\\\"px,\\\"+r+\\\"px\\\":\\\"dash\\\"===t?t=3*r+\\\"px,\\\"+3*r+\\\"px\\\":\\\"longdash\\\"===t?t=5*r+\\\"px,\\\"+5*r+\\\"px\\\":\\\"dashdot\\\"===t?t=3*r+\\\"px,\\\"+r+\\\"px,\\\"+r+\\\"px,\\\"+r+\\\"px\\\":\\\"longdashdot\\\"===t&&(t=5*r+\\\"px,\\\"+2*r+\\\"px,\\\"+r+\\\"px,\\\"+2*r+\\\"px\\\"),t},v.singleFillStyle=function(t){var e=(((n.select(t.node()).data()[0]||[])[0]||{}).trace||{}).fillcolor;e&&t.call(s.fill,e)},v.fillGroupStyle=function(t){t.style(\\\"stroke-width\\\",0).each(function(t){var e=n.select(this);t[0].trace&&e.call(s.fill,t[0].trace.fillcolor)})};var m=t(\\\"./symbol_defs\\\");v.symbolNames=[],v.symbolFuncs=[],v.symbolNeedLines={},v.symbolNoDot={},v.symbolNoFill={},v.symbolList=[],Object.keys(m).forEach(function(t){var e=m[t];v.symbolList=v.symbolList.concat([e.n,t,e.n+100,t+\\\"-open\\\"]),v.symbolNames[e.n]=t,v.symbolFuncs[e.n]=e.f,e.needLine&&(v.symbolNeedLines[e.n]=!0),e.noDot?v.symbolNoDot[e.n]=!0:v.symbolList=v.symbolList.concat([e.n+200,t+\\\"-dot\\\",e.n+300,t+\\\"-open-dot\\\"]),e.noFill&&(v.symbolNoFill[e.n]=!0)});var y=v.symbolNames.length,x=\\\"M0,0.5L0.5,0L0,-0.5L-0.5,0Z\\\";function b(t,e){var r=t%100;return v.symbolFuncs[r](e)+(t>=200?x:\\\"\\\")}v.symbolNumber=function(t){if(\\\"string\\\"==typeof t){var e=0;t.indexOf(\\\"-open\\\")>0&&(e=100,t=t.replace(\\\"-open\\\",\\\"\\\")),t.indexOf(\\\"-dot\\\")>0&&(e+=200,t=t.replace(\\\"-dot\\\",\\\"\\\")),(t=v.symbolNames.indexOf(t))>=0&&(t+=e)}return t%100>=y||t>=400?0:Math.floor(Math.max(t,0))};var _={x1:1,x2:0,y1:0,y2:0},w={x1:0,x2:0,y1:1,y2:0},k=n.format(\\\"~.1f\\\"),T={radial:{node:\\\"radialGradient\\\"},radialreversed:{node:\\\"radialGradient\\\",reversed:!0},horizontal:{node:\\\"linearGradient\\\",attrs:_},horizontalreversed:{node:\\\"linearGradient\\\",attrs:_,reversed:!0},vertical:{node:\\\"linearGradient\\\",attrs:w},verticalreversed:{node:\\\"linearGradient\\\",attrs:w,reversed:!0}};v.gradient=function(t,e,r,i,o,l){for(var u=o.length,h=T[i],f=new Array(u),p=0;p<u;p++)h.reversed?f[u-1-p]=[k(100*(1-o[p][0])),o[p][1]]:f[p]=[k(100*o[p][0]),o[p][1]];var d=\\\"g\\\"+e._fullLayout._uid+\\\"-\\\"+r,g=e._fullLayout._defs.select(\\\".gradients\\\").selectAll(\\\"#\\\"+d).data([i+f.join(\\\";\\\")],c.identity);g.exit().remove(),g.enter().append(h.node).each(function(){var t=n.select(this);h.attrs&&t.attr(h.attrs),t.attr(\\\"id\\\",d);var e=t.selectAll(\\\"stop\\\").data(f);e.exit().remove(),e.enter().append(\\\"stop\\\"),e.each(function(t){var e=a(t[1]);n.select(this).attr({offset:t[0]+\\\"%\\\",\\\"stop-color\\\":s.tinyRGB(e),\\\"stop-opacity\\\":e.getAlpha()})})}),t.style(l,I(d,e)).style(l+\\\"-opacity\\\",null)},v.initGradients=function(t){c.ensureSingle(t._fullLayout._defs,\\\"g\\\",\\\"gradients\\\").selectAll(\\\"linearGradient,radialGradient\\\").remove()},v.pointStyle=function(t,e,r){if(t.size()){var i=v.makePointStyleFns(e);t.each(function(t){v.singlePointStyle(t,n.select(this),e,i,r)})}},v.singlePointStyle=function(t,e,r,n,i){var a=r.marker,o=a.line;if(e.style(\\\"opacity\\\",n.selectedOpacityFn?n.selectedOpacityFn(t):void 0===t.mo?a.opacity:t.mo),n.ms2mrc){var l;l=\\\"various\\\"===t.ms||\\\"various\\\"===a.size?3:n.ms2mrc(t.ms),t.mrc=l,n.selectedSizeFn&&(l=t.mrc=n.selectedSizeFn(t));var u=v.symbolNumber(t.mx||a.symbol)||0;t.om=u%200>=100,e.attr(\\\"d\\\",b(u,l))}var h,f,p,d=!1;if(t.so)p=o.outlierwidth,f=o.outliercolor,h=a.outliercolor;else{var g=(o||{}).width;p=(t.mlw+1||g+1||(t.trace?(t.trace.marker.line||{}).width:0)+1)-1||0,f=\\\"mlc\\\"in t?t.mlcc=n.lineScale(t.mlc):c.isArrayOrTypedArray(o.color)?s.defaultLine:o.color,c.isArrayOrTypedArray(a.color)&&(h=s.defaultLine,d=!0),h=\\\"mc\\\"in t?t.mcc=n.markerScale(t.mc):a.color||\\\"rgba(0,0,0,0)\\\",n.selectedColorFn&&(h=n.selectedColorFn(t))}if(t.om)e.call(s.stroke,h).style({\\\"stroke-width\\\":(p||1)+\\\"px\\\",fill:\\\"none\\\"});else{e.style(\\\"stroke-width\\\",p+\\\"px\\\");var m=a.gradient,y=t.mgt;if(y?d=!0:y=m&&m.type,Array.isArray(y)&&(y=y[0],T[y]||(y=0)),y&&\\\"none\\\"!==y){var x=t.mgc;x?d=!0:x=m.color;var _=r.uid;d&&(_+=\\\"-\\\"+t.i),v.gradient(e,i,_,y,[[0,x],[1,h]],\\\"fill\\\")}else s.fill(e,h);p&&s.stroke(e,f)}},v.makePointStyleFns=function(t){var e={},r=t.marker;return e.markerScale=v.tryColorscale(r,\\\"\\\"),e.lineScale=v.tryColorscale(r,\\\"line\\\"),o.traceIs(t,\\\"symbols\\\")&&(e.ms2mrc=d.isBubble(t)?g(t):function(){return(r.size||6)/2}),t.selectedpoints&&c.extendFlat(e,v.makeSelectedPointStyleFns(t)),e},v.makeSelectedPointStyleFns=function(t){var e={},r=t.selected||{},n=t.unselected||{},i=t.marker||{},a=r.marker||{},s=n.marker||{},l=i.opacity,u=a.opacity,h=s.opacity,f=void 0!==u,d=void 0!==h;(c.isArrayOrTypedArray(l)||f||d)&&(e.selectedOpacityFn=function(t){var e=void 0===t.mo?i.opacity:t.mo;return t.selected?f?u:e:d?h:p*e});var g=i.color,v=a.color,m=s.color;(v||m)&&(e.selectedColorFn=function(t){var e=t.mcc||g;return t.selected?v||e:m||e});var y=i.size,x=a.size,b=s.size,_=void 0!==x,w=void 0!==b;return o.traceIs(t,\\\"symbols\\\")&&(_||w)&&(e.selectedSizeFn=function(t){var e=t.mrc||y/2;return t.selected?_?x/2:e:w?b/2:e}),e},v.makeSelectedTextStyleFns=function(t){var e={},r=t.selected||{},n=t.unselected||{},i=t.textfont||{},a=r.textfont||{},o=n.textfont||{},l=i.color,c=a.color,u=o.color;return e.selectedTextColorFn=function(t){var e=t.tc||l;return t.selected?c||e:u||(c?e:s.addOpacity(e,p))},e},v.selectedPointStyle=function(t,e){if(t.size()&&e.selectedpoints){var r=v.makeSelectedPointStyleFns(e),i=e.marker||{},a=[];r.selectedOpacityFn&&a.push(function(t,e){t.style(\\\"opacity\\\",r.selectedOpacityFn(e))}),r.selectedColorFn&&a.push(function(t,e){s.fill(t,r.selectedColorFn(e))}),r.selectedSizeFn&&a.push(function(t,e){var n=e.mx||i.symbol||0,a=r.selectedSizeFn(e);t.attr(\\\"d\\\",b(v.symbolNumber(n),a)),e.mrc2=a}),a.length&&t.each(function(t){for(var e=n.select(this),r=0;r<a.length;r++)a[r](e,t)})}},v.tryColorscale=function(t,e){var r=e?c.nestedProperty(t,e).get():t;if(r){var n=r.color;if((r.colorscale||r._colorAx)&&c.isArrayOrTypedArray(n))return l.makeColorScaleFuncFromTrace(r)}return c.identity};var A={start:1,end:-1,middle:0,bottom:1,top:-1};function M(t,e,r,i){var a=n.select(t.node().parentNode),o=-1!==e.indexOf(\\\"top\\\")?\\\"top\\\":-1!==e.indexOf(\\\"bottom\\\")?\\\"bottom\\\":\\\"middle\\\",s=-1!==e.indexOf(\\\"left\\\")?\\\"end\\\":-1!==e.indexOf(\\\"right\\\")?\\\"start\\\":\\\"middle\\\",l=i?i/.8+1:0,c=(u.lineCount(t)-1)*f+1,h=A[s]*l,p=.75*r+A[o]*l+(A[o]-1)*c*r/2;t.attr(\\\"text-anchor\\\",s),a.attr(\\\"transform\\\",\\\"translate(\\\"+h+\\\",\\\"+p+\\\")\\\")}function S(t,e){var r=t.ts||e.textfont.size;return i(r)&&r>0?r:0}v.textPointStyle=function(t,e,r){if(t.size()){var i;if(e.selectedpoints){var a=v.makeSelectedTextStyleFns(e);i=a.selectedTextColorFn}t.each(function(t){var a=n.select(this),o=c.extractOption(t,e,\\\"tx\\\",\\\"text\\\");if(o||0===o){var s=t.tp||e.textposition,l=S(t,e),h=i?i(t):t.tc||e.textfont.color;a.call(v.font,t.tf||e.textfont.family,l,h).text(o).call(u.convertToTspans,r).call(M,s,l,t.mrc)}else a.remove()})}},v.selectedTextStyle=function(t,e){if(t.size()&&e.selectedpoints){var r=v.makeSelectedTextStyleFns(e);t.each(function(t){var i=n.select(this),a=r.selectedTextColorFn(t),o=t.tp||e.textposition,l=S(t,e);s.fill(i,a),M(i,o,l,t.mrc2||t.mrc)})}};var E=.5;function C(t,e,r,i){var a=t[0]-e[0],o=t[1]-e[1],s=r[0]-e[0],l=r[1]-e[1],c=Math.pow(a*a+o*o,E/2),u=Math.pow(s*s+l*l,E/2),h=(u*u*a-c*c*s)*i,f=(u*u*o-c*c*l)*i,p=3*u*(c+u),d=3*c*(c+u);return[[n.round(e[0]+(p&&h/p),2),n.round(e[1]+(p&&f/p),2)],[n.round(e[0]-(d&&h/d),2),n.round(e[1]-(d&&f/d),2)]]}v.smoothopen=function(t,e){if(t.length<3)return\\\"M\\\"+t.join(\\\"L\\\");var r,n=\\\"M\\\"+t[0],i=[];for(r=1;r<t.length-1;r++)i.push(C(t[r-1],t[r],t[r+1],e));for(n+=\\\"Q\\\"+i[0][0]+\\\" \\\"+t[1],r=2;r<t.length-1;r++)n+=\\\"C\\\"+i[r-2][1]+\\\" \\\"+i[r-1][0]+\\\" \\\"+t[r];return n+=\\\"Q\\\"+i[t.length-3][1]+\\\" \\\"+t[t.length-1]},v.smoothclosed=function(t,e){if(t.length<3)return\\\"M\\\"+t.join(\\\"L\\\")+\\\"Z\\\";var r,n=\\\"M\\\"+t[0],i=t.length-1,a=[C(t[i],t[0],t[1],e)];for(r=1;r<i;r++)a.push(C(t[r-1],t[r],t[r+1],e));for(a.push(C(t[i-1],t[i],t[0],e)),r=1;r<=i;r++)n+=\\\"C\\\"+a[r-1][1]+\\\" \\\"+a[r][0]+\\\" \\\"+t[r];return n+=\\\"C\\\"+a[i][1]+\\\" \\\"+a[0][0]+\\\" \\\"+t[0]+\\\"Z\\\"};var L={hv:function(t,e){return\\\"H\\\"+n.round(e[0],2)+\\\"V\\\"+n.round(e[1],2)},vh:function(t,e){return\\\"V\\\"+n.round(e[1],2)+\\\"H\\\"+n.round(e[0],2)},hvh:function(t,e){return\\\"H\\\"+n.round((t[0]+e[0])/2,2)+\\\"V\\\"+n.round(e[1],2)+\\\"H\\\"+n.round(e[0],2)},vhv:function(t,e){return\\\"V\\\"+n.round((t[1]+e[1])/2,2)+\\\"H\\\"+n.round(e[0],2)+\\\"V\\\"+n.round(e[1],2)}},P=function(t,e){return\\\"L\\\"+n.round(e[0],2)+\\\",\\\"+n.round(e[1],2)};v.steps=function(t){var e=L[t]||P;return function(t){for(var r=\\\"M\\\"+n.round(t[0][0],2)+\\\",\\\"+n.round(t[0][1],2),i=1;i<t.length;i++)r+=e(t[i-1],t[i]);return r}},v.makeTester=function(){var t=c.ensureSingleById(n.select(\\\"body\\\"),\\\"svg\\\",\\\"js-plotly-tester\\\",function(t){t.attr(h.svgAttrs).style({position:\\\"absolute\\\",left:\\\"-10000px\\\",top:\\\"-10000px\\\",width:\\\"9000px\\\",height:\\\"9000px\\\",\\\"z-index\\\":\\\"1\\\"})}),e=c.ensureSingle(t,\\\"path\\\",\\\"js-reference-point\\\",function(t){t.attr(\\\"d\\\",\\\"M0,0H1V1H0Z\\\").style({\\\"stroke-width\\\":0,fill:\\\"black\\\"})});v.tester=t,v.testref=e},v.savedBBoxes={};var O=0;function z(t){var e=t.getAttribute(\\\"data-unformatted\\\");if(null!==e)return e+t.getAttribute(\\\"data-math\\\")+t.getAttribute(\\\"text-anchor\\\")+t.getAttribute(\\\"style\\\")}function I(t,e){if(!t)return null;var r=e._context;return\\\"url('\\\"+(r._exportedPlot?\\\"\\\":r._baseUrl||\\\"\\\")+\\\"#\\\"+t+\\\"')\\\"}v.bBox=function(t,e,r){var i,a,o;if(r||(r=z(t)),r){if(i=v.savedBBoxes[r])return c.extendFlat({},i)}else if(1===t.childNodes.length){var s=t.childNodes[0];if(r=z(s)){var l=+s.getAttribute(\\\"x\\\")||0,h=+s.getAttribute(\\\"y\\\")||0,f=s.getAttribute(\\\"transform\\\");if(!f){var p=v.bBox(s,!1,r);return l&&(p.left+=l,p.right+=l),h&&(p.top+=h,p.bottom+=h),p}if(r+=\\\"~\\\"+l+\\\"~\\\"+h+\\\"~\\\"+f,i=v.savedBBoxes[r])return c.extendFlat({},i)}}e?a=t:(o=v.tester.node(),a=t.cloneNode(!0),o.appendChild(a)),n.select(a).attr(\\\"transform\\\",null).call(u.positionText,0,0);var d=a.getBoundingClientRect(),g=v.testref.node().getBoundingClientRect();e||o.removeChild(a);var m={height:d.height,width:d.width,left:d.left-g.left,top:d.top-g.top,right:d.right-g.left,bottom:d.bottom-g.top};return O>=1e4&&(v.savedBBoxes={},O=0),r&&(v.savedBBoxes[r]=m),O++,c.extendFlat({},m)},v.setClipUrl=function(t,e,r){t.attr(\\\"clip-path\\\",I(e,r))},v.getTranslate=function(t){var e=(t[t.attr?\\\"attr\\\":\\\"getAttribute\\\"](\\\"transform\\\")||\\\"\\\").replace(/.*\\\\btranslate\\\\((-?\\\\d*\\\\.?\\\\d*)[^-\\\\d]*(-?\\\\d*\\\\.?\\\\d*)[^\\\\d].*/,function(t,e,r){return[e,r].join(\\\" \\\")}).split(\\\" \\\");return{x:+e[0]||0,y:+e[1]||0}},v.setTranslate=function(t,e,r){var n=t.attr?\\\"attr\\\":\\\"getAttribute\\\",i=t.attr?\\\"attr\\\":\\\"setAttribute\\\",a=t[n](\\\"transform\\\")||\\\"\\\";return e=e||0,r=r||0,a=a.replace(/(\\\\btranslate\\\\(.*?\\\\);?)/,\\\"\\\").trim(),a=(a+=\\\" translate(\\\"+e+\\\", \\\"+r+\\\")\\\").trim(),t[i](\\\"transform\\\",a),a},v.getScale=function(t){var e=(t[t.attr?\\\"attr\\\":\\\"getAttribute\\\"](\\\"transform\\\")||\\\"\\\").replace(/.*\\\\bscale\\\\((\\\\d*\\\\.?\\\\d*)[^\\\\d]*(\\\\d*\\\\.?\\\\d*)[^\\\\d].*/,function(t,e,r){return[e,r].join(\\\" \\\")}).split(\\\" \\\");return{x:+e[0]||1,y:+e[1]||1}},v.setScale=function(t,e,r){var n=t.attr?\\\"attr\\\":\\\"getAttribute\\\",i=t.attr?\\\"attr\\\":\\\"setAttribute\\\",a=t[n](\\\"transform\\\")||\\\"\\\";return e=e||1,r=r||1,a=a.replace(/(\\\\bscale\\\\(.*?\\\\);?)/,\\\"\\\").trim(),a=(a+=\\\" scale(\\\"+e+\\\", \\\"+r+\\\")\\\").trim(),t[i](\\\"transform\\\",a),a};var D=/\\\\s*sc.*/;v.setPointGroupScale=function(t,e,r){if(e=e||1,r=r||1,t){var n=1===e&&1===r?\\\"\\\":\\\" scale(\\\"+e+\\\",\\\"+r+\\\")\\\";t.each(function(){var t=(this.getAttribute(\\\"transform\\\")||\\\"\\\").replace(D,\\\"\\\");t=(t+=n).trim(),this.setAttribute(\\\"transform\\\",t)})}};var R=/translate\\\\([^)]*\\\\)\\\\s*$/;v.setTextPointsScale=function(t,e,r){t&&t.each(function(){var t,i=n.select(this),a=i.select(\\\"text\\\");if(a.node()){var o=parseFloat(a.attr(\\\"x\\\")||0),s=parseFloat(a.attr(\\\"y\\\")||0),l=(i.attr(\\\"transform\\\")||\\\"\\\").match(R);t=1===e&&1===r?[]:[\\\"translate(\\\"+o+\\\",\\\"+s+\\\")\\\",\\\"scale(\\\"+e+\\\",\\\"+r+\\\")\\\",\\\"translate(\\\"+-o+\\\",\\\"+-s+\\\")\\\"],l&&t.push(l),i.attr(\\\"transform\\\",t.join(\\\" \\\"))}})}},{\\\"../../constants/alignment\\\":688,\\\"../../constants/interactions\\\":694,\\\"../../constants/xmlns_namespaces\\\":696,\\\"../../lib\\\":719,\\\"../../lib/svg_text_utils\\\":743,\\\"../../registry\\\":847,\\\"../../traces/scatter/make_bubble_size_func\\\":1128,\\\"../../traces/scatter/subtypes\\\":1135,\\\"../color\\\":593,\\\"../colorscale\\\":605,\\\"./symbol_defs\\\":615,d3:163,\\\"fast-isnumeric\\\":225,tinycolor2:537}],615:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\");e.exports={circle:{n:0,f:function(t){var e=n.round(t,2);return\\\"M\\\"+e+\\\",0A\\\"+e+\\\",\\\"+e+\\\" 0 1,1 0,-\\\"+e+\\\"A\\\"+e+\\\",\\\"+e+\\\" 0 0,1 \\\"+e+\\\",0Z\\\"}},square:{n:1,f:function(t){var e=n.round(t,2);return\\\"M\\\"+e+\\\",\\\"+e+\\\"H-\\\"+e+\\\"V-\\\"+e+\\\"H\\\"+e+\\\"Z\\\"}},diamond:{n:2,f:function(t){var e=n.round(1.3*t,2);return\\\"M\\\"+e+\\\",0L0,\\\"+e+\\\"L-\\\"+e+\\\",0L0,-\\\"+e+\\\"Z\\\"}},cross:{n:3,f:function(t){var e=n.round(.4*t,2),r=n.round(1.2*t,2);return\\\"M\\\"+r+\\\",\\\"+e+\\\"H\\\"+e+\\\"V\\\"+r+\\\"H-\\\"+e+\\\"V\\\"+e+\\\"H-\\\"+r+\\\"V-\\\"+e+\\\"H-\\\"+e+\\\"V-\\\"+r+\\\"H\\\"+e+\\\"V-\\\"+e+\\\"H\\\"+r+\\\"Z\\\"}},x:{n:4,f:function(t){var e=n.round(.8*t/Math.sqrt(2),2),r=\\\"l\\\"+e+\\\",\\\"+e,i=\\\"l\\\"+e+\\\",-\\\"+e,a=\\\"l-\\\"+e+\\\",-\\\"+e,o=\\\"l-\\\"+e+\\\",\\\"+e;return\\\"M0,\\\"+e+r+i+a+i+a+o+a+o+r+o+r+\\\"Z\\\"}},\\\"triangle-up\\\":{n:5,f:function(t){var e=n.round(2*t/Math.sqrt(3),2);return\\\"M-\\\"+e+\\\",\\\"+n.round(t/2,2)+\\\"H\\\"+e+\\\"L0,-\\\"+n.round(t,2)+\\\"Z\\\"}},\\\"triangle-down\\\":{n:6,f:function(t){var e=n.round(2*t/Math.sqrt(3),2);return\\\"M-\\\"+e+\\\",-\\\"+n.round(t/2,2)+\\\"H\\\"+e+\\\"L0,\\\"+n.round(t,2)+\\\"Z\\\"}},\\\"triangle-left\\\":{n:7,f:function(t){var e=n.round(2*t/Math.sqrt(3),2);return\\\"M\\\"+n.round(t/2,2)+\\\",-\\\"+e+\\\"V\\\"+e+\\\"L-\\\"+n.round(t,2)+\\\",0Z\\\"}},\\\"triangle-right\\\":{n:8,f:function(t){var e=n.round(2*t/Math.sqrt(3),2);return\\\"M-\\\"+n.round(t/2,2)+\\\",-\\\"+e+\\\"V\\\"+e+\\\"L\\\"+n.round(t,2)+\\\",0Z\\\"}},\\\"triangle-ne\\\":{n:9,f:function(t){var e=n.round(.6*t,2),r=n.round(1.2*t,2);return\\\"M-\\\"+r+\\\",-\\\"+e+\\\"H\\\"+e+\\\"V\\\"+r+\\\"Z\\\"}},\\\"triangle-se\\\":{n:10,f:function(t){var e=n.round(.6*t,2),r=n.round(1.2*t,2);return\\\"M\\\"+e+\\\",-\\\"+r+\\\"V\\\"+e+\\\"H-\\\"+r+\\\"Z\\\"}},\\\"triangle-sw\\\":{n:11,f:function(t){var e=n.round(.6*t,2),r=n.round(1.2*t,2);return\\\"M\\\"+r+\\\",\\\"+e+\\\"H-\\\"+e+\\\"V-\\\"+r+\\\"Z\\\"}},\\\"triangle-nw\\\":{n:12,f:function(t){var e=n.round(.6*t,2),r=n.round(1.2*t,2);return\\\"M-\\\"+e+\\\",\\\"+r+\\\"V-\\\"+e+\\\"H\\\"+r+\\\"Z\\\"}},pentagon:{n:13,f:function(t){var e=n.round(.951*t,2),r=n.round(.588*t,2),i=n.round(-t,2),a=n.round(-.309*t,2);return\\\"M\\\"+e+\\\",\\\"+a+\\\"L\\\"+r+\\\",\\\"+n.round(.809*t,2)+\\\"H-\\\"+r+\\\"L-\\\"+e+\\\",\\\"+a+\\\"L0,\\\"+i+\\\"Z\\\"}},hexagon:{n:14,f:function(t){var e=n.round(t,2),r=n.round(t/2,2),i=n.round(t*Math.sqrt(3)/2,2);return\\\"M\\\"+i+\\\",-\\\"+r+\\\"V\\\"+r+\\\"L0,\\\"+e+\\\"L-\\\"+i+\\\",\\\"+r+\\\"V-\\\"+r+\\\"L0,-\\\"+e+\\\"Z\\\"}},hexagon2:{n:15,f:function(t){var e=n.round(t,2),r=n.round(t/2,2),i=n.round(t*Math.sqrt(3)/2,2);return\\\"M-\\\"+r+\\\",\\\"+i+\\\"H\\\"+r+\\\"L\\\"+e+\\\",0L\\\"+r+\\\",-\\\"+i+\\\"H-\\\"+r+\\\"L-\\\"+e+\\\",0Z\\\"}},octagon:{n:16,f:function(t){var e=n.round(.924*t,2),r=n.round(.383*t,2);return\\\"M-\\\"+r+\\\",-\\\"+e+\\\"H\\\"+r+\\\"L\\\"+e+\\\",-\\\"+r+\\\"V\\\"+r+\\\"L\\\"+r+\\\",\\\"+e+\\\"H-\\\"+r+\\\"L-\\\"+e+\\\",\\\"+r+\\\"V-\\\"+r+\\\"Z\\\"}},star:{n:17,f:function(t){var e=1.4*t,r=n.round(.225*e,2),i=n.round(.951*e,2),a=n.round(.363*e,2),o=n.round(.588*e,2),s=n.round(-e,2),l=n.round(-.309*e,2),c=n.round(.118*e,2),u=n.round(.809*e,2);return\\\"M\\\"+r+\\\",\\\"+l+\\\"H\\\"+i+\\\"L\\\"+a+\\\",\\\"+c+\\\"L\\\"+o+\\\",\\\"+u+\\\"L0,\\\"+n.round(.382*e,2)+\\\"L-\\\"+o+\\\",\\\"+u+\\\"L-\\\"+a+\\\",\\\"+c+\\\"L-\\\"+i+\\\",\\\"+l+\\\"H-\\\"+r+\\\"L0,\\\"+s+\\\"Z\\\"}},hexagram:{n:18,f:function(t){var e=n.round(.66*t,2),r=n.round(.38*t,2),i=n.round(.76*t,2);return\\\"M-\\\"+i+\\\",0l-\\\"+r+\\\",-\\\"+e+\\\"h\\\"+i+\\\"l\\\"+r+\\\",-\\\"+e+\\\"l\\\"+r+\\\",\\\"+e+\\\"h\\\"+i+\\\"l-\\\"+r+\\\",\\\"+e+\\\"l\\\"+r+\\\",\\\"+e+\\\"h-\\\"+i+\\\"l-\\\"+r+\\\",\\\"+e+\\\"l-\\\"+r+\\\",-\\\"+e+\\\"h-\\\"+i+\\\"Z\\\"}},\\\"star-triangle-up\\\":{n:19,f:function(t){var e=n.round(t*Math.sqrt(3)*.8,2),r=n.round(.8*t,2),i=n.round(1.6*t,2),a=n.round(4*t,2),o=\\\"A \\\"+a+\\\",\\\"+a+\\\" 0 0 1 \\\";return\\\"M-\\\"+e+\\\",\\\"+r+o+e+\\\",\\\"+r+o+\\\"0,-\\\"+i+o+\\\"-\\\"+e+\\\",\\\"+r+\\\"Z\\\"}},\\\"star-triangle-down\\\":{n:20,f:function(t){var e=n.round(t*Math.sqrt(3)*.8,2),r=n.round(.8*t,2),i=n.round(1.6*t,2),a=n.round(4*t,2),o=\\\"A \\\"+a+\\\",\\\"+a+\\\" 0 0 1 \\\";return\\\"M\\\"+e+\\\",-\\\"+r+o+\\\"-\\\"+e+\\\",-\\\"+r+o+\\\"0,\\\"+i+o+e+\\\",-\\\"+r+\\\"Z\\\"}},\\\"star-square\\\":{n:21,f:function(t){var e=n.round(1.1*t,2),r=n.round(2*t,2),i=\\\"A \\\"+r+\\\",\\\"+r+\\\" 0 0 1 \\\";return\\\"M-\\\"+e+\\\",-\\\"+e+i+\\\"-\\\"+e+\\\",\\\"+e+i+e+\\\",\\\"+e+i+e+\\\",-\\\"+e+i+\\\"-\\\"+e+\\\",-\\\"+e+\\\"Z\\\"}},\\\"star-diamond\\\":{n:22,f:function(t){var e=n.round(1.4*t,2),r=n.round(1.9*t,2),i=\\\"A \\\"+r+\\\",\\\"+r+\\\" 0 0 1 \\\";return\\\"M-\\\"+e+\\\",0\\\"+i+\\\"0,\\\"+e+i+e+\\\",0\\\"+i+\\\"0,-\\\"+e+i+\\\"-\\\"+e+\\\",0Z\\\"}},\\\"diamond-tall\\\":{n:23,f:function(t){var e=n.round(.7*t,2),r=n.round(1.4*t,2);return\\\"M0,\\\"+r+\\\"L\\\"+e+\\\",0L0,-\\\"+r+\\\"L-\\\"+e+\\\",0Z\\\"}},\\\"diamond-wide\\\":{n:24,f:function(t){var e=n.round(1.4*t,2),r=n.round(.7*t,2);return\\\"M0,\\\"+r+\\\"L\\\"+e+\\\",0L0,-\\\"+r+\\\"L-\\\"+e+\\\",0Z\\\"}},hourglass:{n:25,f:function(t){var e=n.round(t,2);return\\\"M\\\"+e+\\\",\\\"+e+\\\"H-\\\"+e+\\\"L\\\"+e+\\\",-\\\"+e+\\\"H-\\\"+e+\\\"Z\\\"},noDot:!0},bowtie:{n:26,f:function(t){var e=n.round(t,2);return\\\"M\\\"+e+\\\",\\\"+e+\\\"V-\\\"+e+\\\"L-\\\"+e+\\\",\\\"+e+\\\"V-\\\"+e+\\\"Z\\\"},noDot:!0},\\\"circle-cross\\\":{n:27,f:function(t){var e=n.round(t,2);return\\\"M0,\\\"+e+\\\"V-\\\"+e+\\\"M\\\"+e+\\\",0H-\\\"+e+\\\"M\\\"+e+\\\",0A\\\"+e+\\\",\\\"+e+\\\" 0 1,1 0,-\\\"+e+\\\"A\\\"+e+\\\",\\\"+e+\\\" 0 0,1 \\\"+e+\\\",0Z\\\"},needLine:!0,noDot:!0},\\\"circle-x\\\":{n:28,f:function(t){var e=n.round(t,2),r=n.round(t/Math.sqrt(2),2);return\\\"M\\\"+r+\\\",\\\"+r+\\\"L-\\\"+r+\\\",-\\\"+r+\\\"M\\\"+r+\\\",-\\\"+r+\\\"L-\\\"+r+\\\",\\\"+r+\\\"M\\\"+e+\\\",0A\\\"+e+\\\",\\\"+e+\\\" 0 1,1 0,-\\\"+e+\\\"A\\\"+e+\\\",\\\"+e+\\\" 0 0,1 \\\"+e+\\\",0Z\\\"},needLine:!0,noDot:!0},\\\"square-cross\\\":{n:29,f:function(t){var e=n.round(t,2);return\\\"M0,\\\"+e+\\\"V-\\\"+e+\\\"M\\\"+e+\\\",0H-\\\"+e+\\\"M\\\"+e+\\\",\\\"+e+\\\"H-\\\"+e+\\\"V-\\\"+e+\\\"H\\\"+e+\\\"Z\\\"},needLine:!0,noDot:!0},\\\"square-x\\\":{n:30,f:function(t){var e=n.round(t,2);return\\\"M\\\"+e+\\\",\\\"+e+\\\"L-\\\"+e+\\\",-\\\"+e+\\\"M\\\"+e+\\\",-\\\"+e+\\\"L-\\\"+e+\\\",\\\"+e+\\\"M\\\"+e+\\\",\\\"+e+\\\"H-\\\"+e+\\\"V-\\\"+e+\\\"H\\\"+e+\\\"Z\\\"},needLine:!0,noDot:!0},\\\"diamond-cross\\\":{n:31,f:function(t){var e=n.round(1.3*t,2);return\\\"M\\\"+e+\\\",0L0,\\\"+e+\\\"L-\\\"+e+\\\",0L0,-\\\"+e+\\\"ZM0,-\\\"+e+\\\"V\\\"+e+\\\"M-\\\"+e+\\\",0H\\\"+e},needLine:!0,noDot:!0},\\\"diamond-x\\\":{n:32,f:function(t){var e=n.round(1.3*t,2),r=n.round(.65*t,2);return\\\"M\\\"+e+\\\",0L0,\\\"+e+\\\"L-\\\"+e+\\\",0L0,-\\\"+e+\\\"ZM-\\\"+r+\\\",-\\\"+r+\\\"L\\\"+r+\\\",\\\"+r+\\\"M-\\\"+r+\\\",\\\"+r+\\\"L\\\"+r+\\\",-\\\"+r},needLine:!0,noDot:!0},\\\"cross-thin\\\":{n:33,f:function(t){var e=n.round(1.4*t,2);return\\\"M0,\\\"+e+\\\"V-\\\"+e+\\\"M\\\"+e+\\\",0H-\\\"+e},needLine:!0,noDot:!0,noFill:!0},\\\"x-thin\\\":{n:34,f:function(t){var e=n.round(t,2);return\\\"M\\\"+e+\\\",\\\"+e+\\\"L-\\\"+e+\\\",-\\\"+e+\\\"M\\\"+e+\\\",-\\\"+e+\\\"L-\\\"+e+\\\",\\\"+e},needLine:!0,noDot:!0,noFill:!0},asterisk:{n:35,f:function(t){var e=n.round(1.2*t,2),r=n.round(.85*t,2);return\\\"M0,\\\"+e+\\\"V-\\\"+e+\\\"M\\\"+e+\\\",0H-\\\"+e+\\\"M\\\"+r+\\\",\\\"+r+\\\"L-\\\"+r+\\\",-\\\"+r+\\\"M\\\"+r+\\\",-\\\"+r+\\\"L-\\\"+r+\\\",\\\"+r},needLine:!0,noDot:!0,noFill:!0},hash:{n:36,f:function(t){var e=n.round(t/2,2),r=n.round(t,2);return\\\"M\\\"+e+\\\",\\\"+r+\\\"V-\\\"+r+\\\"m-\\\"+r+\\\",0V\\\"+r+\\\"M\\\"+r+\\\",\\\"+e+\\\"H-\\\"+r+\\\"m0,-\\\"+r+\\\"H\\\"+r},needLine:!0,noFill:!0},\\\"y-up\\\":{n:37,f:function(t){var e=n.round(1.2*t,2),r=n.round(1.6*t,2),i=n.round(.8*t,2);return\\\"M-\\\"+e+\\\",\\\"+i+\\\"L0,0M\\\"+e+\\\",\\\"+i+\\\"L0,0M0,-\\\"+r+\\\"L0,0\\\"},needLine:!0,noDot:!0,noFill:!0},\\\"y-down\\\":{n:38,f:function(t){var e=n.round(1.2*t,2),r=n.round(1.6*t,2),i=n.round(.8*t,2);return\\\"M-\\\"+e+\\\",-\\\"+i+\\\"L0,0M\\\"+e+\\\",-\\\"+i+\\\"L0,0M0,\\\"+r+\\\"L0,0\\\"},needLine:!0,noDot:!0,noFill:!0},\\\"y-left\\\":{n:39,f:function(t){var e=n.round(1.2*t,2),r=n.round(1.6*t,2),i=n.round(.8*t,2);return\\\"M\\\"+i+\\\",\\\"+e+\\\"L0,0M\\\"+i+\\\",-\\\"+e+\\\"L0,0M-\\\"+r+\\\",0L0,0\\\"},needLine:!0,noDot:!0,noFill:!0},\\\"y-right\\\":{n:40,f:function(t){var e=n.round(1.2*t,2),r=n.round(1.6*t,2),i=n.round(.8*t,2);return\\\"M-\\\"+i+\\\",\\\"+e+\\\"L0,0M-\\\"+i+\\\",-\\\"+e+\\\"L0,0M\\\"+r+\\\",0L0,0\\\"},needLine:!0,noDot:!0,noFill:!0},\\\"line-ew\\\":{n:41,f:function(t){var e=n.round(1.4*t,2);return\\\"M\\\"+e+\\\",0H-\\\"+e},needLine:!0,noDot:!0,noFill:!0},\\\"line-ns\\\":{n:42,f:function(t){var e=n.round(1.4*t,2);return\\\"M0,\\\"+e+\\\"V-\\\"+e},needLine:!0,noDot:!0,noFill:!0},\\\"line-ne\\\":{n:43,f:function(t){var e=n.round(t,2);return\\\"M\\\"+e+\\\",-\\\"+e+\\\"L-\\\"+e+\\\",\\\"+e},needLine:!0,noDot:!0,noFill:!0},\\\"line-nw\\\":{n:44,f:function(t){var e=n.round(t,2);return\\\"M\\\"+e+\\\",\\\"+e+\\\"L-\\\"+e+\\\",-\\\"+e},needLine:!0,noDot:!0,noFill:!0}}},{d3:163}],616:[function(t,e,r){\\\"use strict\\\";e.exports={visible:{valType:\\\"boolean\\\",editType:\\\"calc\\\"},type:{valType:\\\"enumerated\\\",values:[\\\"percent\\\",\\\"constant\\\",\\\"sqrt\\\",\\\"data\\\"],editType:\\\"calc\\\"},symmetric:{valType:\\\"boolean\\\",editType:\\\"calc\\\"},array:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},arrayminus:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},value:{valType:\\\"number\\\",min:0,dflt:10,editType:\\\"calc\\\"},valueminus:{valType:\\\"number\\\",min:0,dflt:10,editType:\\\"calc\\\"},traceref:{valType:\\\"integer\\\",min:0,dflt:0,editType:\\\"style\\\"},tracerefminus:{valType:\\\"integer\\\",min:0,dflt:0,editType:\\\"style\\\"},copy_ystyle:{valType:\\\"boolean\\\",editType:\\\"plot\\\"},copy_zstyle:{valType:\\\"boolean\\\",editType:\\\"style\\\"},color:{valType:\\\"color\\\",editType:\\\"style\\\"},thickness:{valType:\\\"number\\\",min:0,dflt:2,editType:\\\"style\\\"},width:{valType:\\\"number\\\",min:0,editType:\\\"plot\\\"},editType:\\\"calc\\\",_deprecated:{opacity:{valType:\\\"number\\\",editType:\\\"style\\\"}}}},{}],617:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../registry\\\"),a=t(\\\"../../plots/cartesian/axes\\\"),o=t(\\\"../../lib\\\"),s=t(\\\"./compute_error\\\");function l(t,e,r,i){var l=e[\\\"error_\\\"+i]||{},c=[];if(l.visible&&-1!==[\\\"linear\\\",\\\"log\\\"].indexOf(r.type)){for(var u=s(l),h=0;h<t.length;h++){var f=t[h],p=f.i;if(void 0===p)p=h;else if(null===p)continue;var d=f[i];if(n(r.c2l(d))){var g=u(d,p);if(n(g[0])&&n(g[1])){var v=f[i+\\\"s\\\"]=d-g[0],m=f[i+\\\"h\\\"]=d+g[1];c.push(v,m)}}}var y=r._id,x=e._extremes[y],b=a.findExtremes(r,c,o.extendFlat({tozero:x.opts.tozero},{padded:!0}));x.min=x.min.concat(b.min),x.max=x.max.concat(b.max)}}e.exports=function(t){for(var e=t.calcdata,r=0;r<e.length;r++){var n=e[r],o=n[0].trace;if(!0===o.visible&&i.traceIs(o,\\\"errorBarsOK\\\")){var s=a.getFromId(t,o.xaxis),c=a.getFromId(t,o.yaxis);l(n,o,s,\\\"x\\\"),l(n,o,c,\\\"y\\\")}}}},{\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767,\\\"../../registry\\\":847,\\\"./compute_error\\\":618,\\\"fast-isnumeric\\\":225}],618:[function(t,e,r){\\\"use strict\\\";function n(t,e){return\\\"percent\\\"===t?function(t){return Math.abs(t*e/100)}:\\\"constant\\\"===t?function(){return Math.abs(e)}:\\\"sqrt\\\"===t?function(t){return Math.sqrt(Math.abs(t))}:void 0}e.exports=function(t){var e=t.type,r=t.symmetric;if(\\\"data\\\"===e){var i=t.array||[];if(r)return function(t,e){var r=+i[e];return[r,r]};var a=t.arrayminus||[];return function(t,e){var r=+i[e],n=+a[e];return isNaN(r)&&isNaN(n)?[NaN,NaN]:[n||0,r||0]}}var o=n(e,t.value),s=n(e,t.valueminus);return r||void 0===t.valueminus?function(t){var e=o(t);return[e,e]}:function(t){return[s(t),o(t)]}}},{}],619:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../registry\\\"),a=t(\\\"../../lib\\\"),o=t(\\\"../../plot_api/plot_template\\\"),s=t(\\\"./attributes\\\");e.exports=function(t,e,r,l){var c=\\\"error_\\\"+l.axis,u=o.newContainer(e,c),h=t[c]||{};function f(t,e){return a.coerce(h,u,s,t,e)}if(!1!==f(\\\"visible\\\",void 0!==h.array||void 0!==h.value||\\\"sqrt\\\"===h.type)){var p=f(\\\"type\\\",\\\"array\\\"in h?\\\"data\\\":\\\"percent\\\"),d=!0;\\\"sqrt\\\"!==p&&(d=f(\\\"symmetric\\\",!((\\\"data\\\"===p?\\\"arrayminus\\\":\\\"valueminus\\\")in h))),\\\"data\\\"===p?(f(\\\"array\\\"),f(\\\"traceref\\\"),d||(f(\\\"arrayminus\\\"),f(\\\"tracerefminus\\\"))):\\\"percent\\\"!==p&&\\\"constant\\\"!==p||(f(\\\"value\\\"),d||f(\\\"valueminus\\\"));var g=\\\"copy_\\\"+l.inherit+\\\"style\\\";if(l.inherit)(e[\\\"error_\\\"+l.inherit]||{}).visible&&f(g,!(h.color||n(h.thickness)||n(h.width)));l.inherit&&u[g]||(f(\\\"color\\\",r),f(\\\"thickness\\\"),f(\\\"width\\\",i.traceIs(e,\\\"gl3d\\\")?0:4))}}},{\\\"../../lib\\\":719,\\\"../../plot_api/plot_template\\\":757,\\\"../../registry\\\":847,\\\"./attributes\\\":616,\\\"fast-isnumeric\\\":225}],620:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../plot_api/edit_types\\\").overrideAll,a=t(\\\"./attributes\\\"),o={error_x:n.extendFlat({},a),error_y:n.extendFlat({},a)};delete o.error_x.copy_zstyle,delete o.error_y.copy_zstyle,delete o.error_y.copy_ystyle;var s={error_x:n.extendFlat({},a),error_y:n.extendFlat({},a),error_z:n.extendFlat({},a)};delete s.error_x.copy_ystyle,delete s.error_y.copy_ystyle,delete s.error_z.copy_ystyle,delete s.error_z.copy_zstyle,e.exports={moduleType:\\\"component\\\",name:\\\"errorbars\\\",schema:{traces:{scatter:o,bar:o,histogram:o,scatter3d:i(s,\\\"calc\\\",\\\"nested\\\"),scattergl:i(o,\\\"calc\\\",\\\"nested\\\")}},supplyDefaults:t(\\\"./defaults\\\"),calc:t(\\\"./calc\\\"),makeComputeError:t(\\\"./compute_error\\\"),plot:t(\\\"./plot\\\"),style:t(\\\"./style\\\"),hoverInfo:function(t,e,r){(e.error_y||{}).visible&&(r.yerr=t.yh-t.y,e.error_y.symmetric||(r.yerrneg=t.y-t.ys));(e.error_x||{}).visible&&(r.xerr=t.xh-t.x,e.error_x.symmetric||(r.xerrneg=t.x-t.xs))}}},{\\\"../../lib\\\":719,\\\"../../plot_api/edit_types\\\":750,\\\"./attributes\\\":616,\\\"./calc\\\":617,\\\"./compute_error\\\":618,\\\"./defaults\\\":619,\\\"./plot\\\":621,\\\"./style\\\":622}],621:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"fast-isnumeric\\\"),a=t(\\\"../drawing\\\"),o=t(\\\"../../traces/scatter/subtypes\\\");e.exports=function(t,e,r,s){var l=r.xaxis,c=r.yaxis,u=s&&s.duration>0;e.each(function(e){var h,f=e[0].trace,p=f.error_x||{},d=f.error_y||{};f.ids&&(h=function(t){return t.id});var g=o.hasMarkers(f)&&f.marker.maxdisplayed>0;d.visible||p.visible||(e=[]);var v=n.select(this).selectAll(\\\"g.errorbar\\\").data(e,h);if(v.exit().remove(),e.length){p.visible||v.selectAll(\\\"path.xerror\\\").remove(),d.visible||v.selectAll(\\\"path.yerror\\\").remove(),v.style(\\\"opacity\\\",1);var m=v.enter().append(\\\"g\\\").classed(\\\"errorbar\\\",!0);u&&m.style(\\\"opacity\\\",0).transition().duration(s.duration).style(\\\"opacity\\\",1),a.setClipUrl(v,r.layerClipId,t),v.each(function(t){var e=n.select(this),r=function(t,e,r){var n={x:e.c2p(t.x),y:r.c2p(t.y)};void 0!==t.yh&&(n.yh=r.c2p(t.yh),n.ys=r.c2p(t.ys),i(n.ys)||(n.noYS=!0,n.ys=r.c2p(t.ys,!0)));void 0!==t.xh&&(n.xh=e.c2p(t.xh),n.xs=e.c2p(t.xs),i(n.xs)||(n.noXS=!0,n.xs=e.c2p(t.xs,!0)));return n}(t,l,c);if(!g||t.vis){var a,o=e.select(\\\"path.yerror\\\");if(d.visible&&i(r.x)&&i(r.yh)&&i(r.ys)){var h=d.width;a=\\\"M\\\"+(r.x-h)+\\\",\\\"+r.yh+\\\"h\\\"+2*h+\\\"m-\\\"+h+\\\",0V\\\"+r.ys,r.noYS||(a+=\\\"m-\\\"+h+\\\",0h\\\"+2*h),!o.size()?o=e.append(\\\"path\\\").style(\\\"vector-effect\\\",\\\"non-scaling-stroke\\\").classed(\\\"yerror\\\",!0):u&&(o=o.transition().duration(s.duration).ease(s.easing)),o.attr(\\\"d\\\",a)}else o.remove();var f=e.select(\\\"path.xerror\\\");if(p.visible&&i(r.y)&&i(r.xh)&&i(r.xs)){var v=(p.copy_ystyle?d:p).width;a=\\\"M\\\"+r.xh+\\\",\\\"+(r.y-v)+\\\"v\\\"+2*v+\\\"m0,-\\\"+v+\\\"H\\\"+r.xs,r.noXS||(a+=\\\"m0,-\\\"+v+\\\"v\\\"+2*v),!f.size()?f=e.append(\\\"path\\\").style(\\\"vector-effect\\\",\\\"non-scaling-stroke\\\").classed(\\\"xerror\\\",!0):u&&(f=f.transition().duration(s.duration).ease(s.easing)),f.attr(\\\"d\\\",a)}else f.remove()}})}})}},{\\\"../../traces/scatter/subtypes\\\":1135,\\\"../drawing\\\":614,d3:163,\\\"fast-isnumeric\\\":225}],622:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../color\\\");e.exports=function(t){t.each(function(t){var e=t[0].trace,r=e.error_y||{},a=e.error_x||{},o=n.select(this);o.selectAll(\\\"path.yerror\\\").style(\\\"stroke-width\\\",r.thickness+\\\"px\\\").call(i.stroke,r.color),a.copy_ystyle&&(a=r),o.selectAll(\\\"path.xerror\\\").style(\\\"stroke-width\\\",a.thickness+\\\"px\\\").call(i.stroke,a.color)})}},{\\\"../color\\\":593,d3:163}],623:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/font_attributes\\\"),i=t(\\\"./layout_attributes\\\").hoverlabel,a=t(\\\"../../lib/extend\\\").extendFlat;e.exports={hoverlabel:{bgcolor:a({},i.bgcolor,{arrayOk:!0}),bordercolor:a({},i.bordercolor,{arrayOk:!0}),font:n({arrayOk:!0,editType:\\\"none\\\"}),align:a({},i.align,{arrayOk:!0}),namelength:a({},i.namelength,{arrayOk:!0}),editType:\\\"none\\\"}}},{\\\"../../lib/extend\\\":710,\\\"../../plots/font_attributes\\\":793,\\\"./layout_attributes\\\":633}],624:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../registry\\\");function a(t,e,r,i){i=i||n.identity,Array.isArray(t)&&(e[0][r]=i(t))}e.exports=function(t){var e=t.calcdata,r=t._fullLayout;function o(t){return function(e){return n.coerceHoverinfo({hoverinfo:e},{_module:t._module},r)}}for(var s=0;s<e.length;s++){var l=e[s],c=l[0].trace;if(!i.traceIs(c,\\\"pie-like\\\")){var u=i.traceIs(c,\\\"2dMap\\\")?a:n.fillArray;u(c.hoverinfo,l,\\\"hi\\\",o(c)),c.hovertemplate&&u(c.hovertemplate,l,\\\"ht\\\"),c.hoverlabel&&(u(c.hoverlabel.bgcolor,l,\\\"hbg\\\"),u(c.hoverlabel.bordercolor,l,\\\"hbc\\\"),u(c.hoverlabel.font.size,l,\\\"hts\\\"),u(c.hoverlabel.font.color,l,\\\"htc\\\"),u(c.hoverlabel.font.family,l,\\\"htf\\\"),u(c.hoverlabel.namelength,l,\\\"hnl\\\"),u(c.hoverlabel.align,l,\\\"hta\\\"))}}}},{\\\"../../lib\\\":719,\\\"../../registry\\\":847}],625:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"./hover\\\").hover;e.exports=function(t,e,r){var a=n.getComponentMethod(\\\"annotations\\\",\\\"onClick\\\")(t,t._hoverdata);function o(){t.emit(\\\"plotly_click\\\",{points:t._hoverdata,event:e})}void 0!==r&&i(t,e,r,!0),t._hoverdata&&e&&e.target&&(a&&a.then?a.then(o):o(),e.stopImmediatePropagation&&e.stopImmediatePropagation())}},{\\\"../../registry\\\":847,\\\"./hover\\\":629}],626:[function(t,e,r){\\\"use strict\\\";e.exports={YANGLE:60,HOVERARROWSIZE:6,HOVERTEXTPAD:3,HOVERFONTSIZE:13,HOVERFONT:\\\"Arial, sans-serif\\\",HOVERMINTIME:50,HOVERID:\\\"-hover\\\"}},{}],627:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./attributes\\\"),a=t(\\\"./hoverlabel_defaults\\\");e.exports=function(t,e,r,o){var s=n.extendFlat({},o.hoverlabel);e.hovertemplate&&(s.namelength=-1),a(t,e,function(r,a){return n.coerce(t,e,i,r,a)},s)}},{\\\"../../lib\\\":719,\\\"./attributes\\\":623,\\\"./hoverlabel_defaults\\\":630}],628:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\");r.getSubplot=function(t){return t.subplot||t.xaxis+t.yaxis||t.geo},r.isTraceInSubplots=function(t,e){if(\\\"splom\\\"===t.type){for(var n=t.xaxes||[],i=t.yaxes||[],a=0;a<n.length;a++)for(var o=0;o<i.length;o++)if(-1!==e.indexOf(n[a]+i[o]))return!0;return!1}return-1!==e.indexOf(r.getSubplot(t))},r.flat=function(t,e){for(var r=new Array(t.length),n=0;n<t.length;n++)r[n]=e;return r},r.p2c=function(t,e){for(var r=new Array(t.length),n=0;n<t.length;n++)r[n]=t[n].p2c(e);return r},r.getDistanceFunction=function(t,e,n,i){return\\\"closest\\\"===t?i||r.quadrature(e,n):\\\"x\\\"===t?e:n},r.getClosest=function(t,e,r){if(!1!==r.index)r.index>=0&&r.index<t.length?r.distance=0:r.index=!1;else for(var n=0;n<t.length;n++){var i=e(t[n]);i<=r.distance&&(r.index=n,r.distance=i)}return r},r.inbox=function(t,e,r){return t*e<0||0===t?r:1/0},r.quadrature=function(t,e){return function(r){var n=t(r),i=e(r);return Math.sqrt(n*n+i*i)}},r.makeEventData=function(t,e,n){var i=\\\"index\\\"in t?t.index:t.pointNumber,a={data:e._input,fullData:e,curveNumber:e.index,pointNumber:i};if(e._indexToPoints){var o=e._indexToPoints[i];1===o.length?a.pointIndex=o[0]:a.pointIndices=o}else a.pointIndex=i;return e._module.eventData?a=e._module.eventData(a,t,e,n,i):(\\\"xVal\\\"in t?a.x=t.xVal:\\\"x\\\"in t&&(a.x=t.x),\\\"yVal\\\"in t?a.y=t.yVal:\\\"y\\\"in t&&(a.y=t.y),t.xa&&(a.xaxis=t.xa),t.ya&&(a.yaxis=t.ya),void 0!==t.zLabelVal&&(a.z=t.zLabelVal)),r.appendArrayPointValue(a,e,i),a},r.appendArrayPointValue=function(t,e,r){var i=e._arrayAttrs;if(i)for(var s=0;s<i.length;s++){var l=i[s],c=a(l);if(void 0===t[c]){var u=o(n.nestedProperty(e,l).get(),r);void 0!==u&&(t[c]=u)}}},r.appendArrayMultiPointValues=function(t,e,r){var i=e._arrayAttrs;if(i)for(var s=0;s<i.length;s++){var l=i[s],c=a(l);if(void 0===t[c]){for(var u=n.nestedProperty(e,l).get(),h=new Array(r.length),f=0;f<r.length;f++)h[f]=o(u,r[f]);t[c]=h}}};var i={ids:\\\"id\\\",locations:\\\"location\\\",labels:\\\"label\\\",values:\\\"value\\\",\\\"marker.colors\\\":\\\"color\\\",parents:\\\"parent\\\"};function a(t){return i[t]||t}function o(t,e){return Array.isArray(e)?Array.isArray(t)&&Array.isArray(t[e[0]])?t[e[0]][e[1]]:void 0:t[e]}},{\\\"../../lib\\\":719}],629:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"fast-isnumeric\\\"),a=t(\\\"tinycolor2\\\"),o=t(\\\"../../lib\\\"),s=t(\\\"../../lib/events\\\"),l=t(\\\"../../lib/svg_text_utils\\\"),c=t(\\\"../../lib/override_cursor\\\"),u=t(\\\"../drawing\\\"),h=t(\\\"../color\\\"),f=t(\\\"../dragelement\\\"),p=t(\\\"../../plots/cartesian/axes\\\"),d=t(\\\"../../registry\\\"),g=t(\\\"./helpers\\\"),v=t(\\\"./constants\\\"),m=v.YANGLE,y=Math.PI*m/180,x=1/Math.sin(y),b=Math.cos(y),_=Math.sin(y),w=v.HOVERARROWSIZE,k=v.HOVERTEXTPAD;r.hover=function(t,e,r,a){t=o.getGraphDiv(t),o.throttle(t._fullLayout._uid+v.HOVERID,v.HOVERMINTIME,function(){!function(t,e,r,a){r||(r=\\\"xy\\\");var l=Array.isArray(r)?r:[r],u=t._fullLayout,v=u._plots||[],m=v[r],y=u._has(\\\"cartesian\\\");if(m){var b=m.overlays.map(function(t){return t.id});l=l.concat(b)}for(var _=l.length,w=new Array(_),k=new Array(_),T=!1,L=0;L<_;L++){var P=l[L],O=v[P];if(O)T=!0,w[L]=p.getFromId(t,O.xaxis._id),k[L]=p.getFromId(t,O.yaxis._id);else{var z=u[P]._subplot;w[L]=z.xaxis,k[L]=z.yaxis}}var I=e.hovermode||u.hovermode;I&&!T&&(I=\\\"closest\\\");if(-1===[\\\"x\\\",\\\"y\\\",\\\"closest\\\"].indexOf(I)||!t.calcdata||t.querySelector(\\\".zoombox\\\")||t._dragging)return f.unhoverRaw(t,e);var D,R,F,B,N,j,U,V,q,H,G,Y,W,X=-1===u.hoverdistance?1/0:u.hoverdistance,Z=-1===u.spikedistance?1/0:u.spikedistance,J=[],K=[],$={hLinePoint:null,vLinePoint:null},Q=!1;if(Array.isArray(e))for(I=\\\"array\\\",F=0;F<e.length;F++)(N=t.calcdata[e[F].curveNumber||0])&&(j=N[0].trace,\\\"skip\\\"!==N[0].trace.hoverinfo&&(K.push(N),\\\"h\\\"===j.orientation&&(Q=!0)));else{for(B=0;B<t.calcdata.length;B++)N=t.calcdata[B],\\\"skip\\\"!==(j=N[0].trace).hoverinfo&&g.isTraceInSubplots(j,l)&&(K.push(N),\\\"h\\\"===j.orientation&&(Q=!0));var tt,et,rt=!e.target;if(rt)tt=\\\"xpx\\\"in e?e.xpx:w[0]._length/2,et=\\\"ypx\\\"in e?e.ypx:k[0]._length/2;else{if(!1===s.triggerHandler(t,\\\"plotly_beforehover\\\",e))return;var nt=e.target.getBoundingClientRect();if(tt=e.clientX-nt.left,et=e.clientY-nt.top,tt<0||tt>w[0]._length||et<0||et>k[0]._length)return f.unhoverRaw(t,e)}if(e.pointerX=tt+w[0]._offset,e.pointerY=et+k[0]._offset,D=\\\"xval\\\"in e?g.flat(l,e.xval):g.p2c(w,tt),R=\\\"yval\\\"in e?g.flat(l,e.yval):g.p2c(k,et),!i(D[0])||!i(R[0]))return o.warn(\\\"Fx.hover failed\\\",e,t),f.unhoverRaw(t,e)}var it=1/0;for(B=0;B<K.length;B++)if((N=K[B])&&N[0]&&N[0].trace&&!0===(j=N[0].trace).visible&&0!==j._length&&-1===[\\\"carpet\\\",\\\"contourcarpet\\\"].indexOf(j._module.name)){if(\\\"splom\\\"===j.type?U=l[V=0]:(U=g.getSubplot(j),V=l.indexOf(U)),q=I,Y={cd:N,trace:j,xa:w[V],ya:k[V],maxHoverDistance:X,maxSpikeDistance:Z,index:!1,distance:Math.min(it,X),spikeDistance:1/0,xSpike:void 0,ySpike:void 0,color:h.defaultLine,name:j.name,x0:void 0,x1:void 0,y0:void 0,y1:void 0,xLabelVal:void 0,yLabelVal:void 0,zLabelVal:void 0,text:void 0},u[U]&&(Y.subplot=u[U]._subplot),u._splomScenes&&u._splomScenes[j.uid]&&(Y.scene=u._splomScenes[j.uid]),W=J.length,\\\"array\\\"===q){var at=e[B];\\\"pointNumber\\\"in at?(Y.index=at.pointNumber,q=\\\"closest\\\"):(q=\\\"\\\",\\\"xval\\\"in at&&(H=at.xval,q=\\\"x\\\"),\\\"yval\\\"in at&&(G=at.yval,q=q?\\\"closest\\\":\\\"y\\\"))}else H=D[V],G=R[V];if(0!==X)if(j._module&&j._module.hoverPoints){var ot=j._module.hoverPoints(Y,H,G,q,u._hoverlayer);if(ot)for(var st,lt=0;lt<ot.length;lt++)st=ot[lt],i(st.x0)&&i(st.y0)&&J.push(S(st,I))}else o.log(\\\"Unrecognized trace type in hover:\\\",j);if(\\\"closest\\\"===I&&J.length>W&&(J.splice(0,W),it=J[0].distance),y&&0!==Z&&0===J.length){Y.distance=Z,Y.index=!1;var ct=j._module.hoverPoints(Y,H,G,\\\"closest\\\",u._hoverlayer);if(ct&&(ct=ct.filter(function(t){return t.spikeDistance<=Z})),ct&&ct.length){var ut,ht=ct.filter(function(t){return t.xa.showspikes});if(ht.length){var ft=ht[0];i(ft.x0)&&i(ft.y0)&&(ut=vt(ft),(!$.vLinePoint||$.vLinePoint.spikeDistance>ut.spikeDistance)&&($.vLinePoint=ut))}var pt=ct.filter(function(t){return t.ya.showspikes});if(pt.length){var dt=pt[0];i(dt.x0)&&i(dt.y0)&&(ut=vt(dt),(!$.hLinePoint||$.hLinePoint.spikeDistance>ut.spikeDistance)&&($.hLinePoint=ut))}}}}function gt(t,e){for(var r,n=null,i=1/0,a=0;a<t.length;a++)(r=t[a].spikeDistance)<i&&r<=e&&(n=t[a],i=r);return n}function vt(t){return t?{xa:t.xa,ya:t.ya,x:void 0!==t.xSpike?t.xSpike:(t.x0+t.x1)/2,y:void 0!==t.ySpike?t.ySpike:(t.y0+t.y1)/2,distance:t.distance,spikeDistance:t.spikeDistance,curveNumber:t.trace.index,color:t.color,pointNumber:t.index}:null}var mt={fullLayout:u,container:u._hoverlayer,outerContainer:u._paperdiv,event:e},yt=t._spikepoints,xt={vLinePoint:$.vLinePoint,hLinePoint:$.hLinePoint};if(t._spikepoints=xt,y&&0!==Z&&0!==J.length){var bt=J.filter(function(t){return t.ya.showspikes}),_t=gt(bt,Z);$.hLinePoint=vt(_t);var wt=J.filter(function(t){return t.xa.showspikes}),kt=gt(wt,Z);$.vLinePoint=vt(kt)}if(0===J.length){var Tt=f.unhoverRaw(t,e);return!y||null===$.hLinePoint&&null===$.vLinePoint||C(yt)&&E($,mt),Tt}y&&C(yt)&&E($,mt);J.sort(function(t,e){return t.distance-e.distance});var At=t._hoverdata,Mt=[];for(F=0;F<J.length;F++){var St=J[F],Et=g.makeEventData(St,St.trace,St.cd);if(!1!==St.hovertemplate){var Ct=!1;St.cd[St.index]&&St.cd[St.index].ht&&(Ct=St.cd[St.index].ht),St.hovertemplate=Ct||St.trace.hovertemplate||!1}St.eventData=[Et],Mt.push(Et)}t._hoverdata=Mt;var Lt=\\\"y\\\"===I&&(K.length>1||J.length>1)||\\\"closest\\\"===I&&Q&&J.length>1,Pt=h.combine(u.plot_bgcolor||h.background,u.paper_bgcolor),Ot={hovermode:I,rotateLabels:Lt,bgColor:Pt,container:u._hoverlayer,outerContainer:u._paperdiv,commonLabelOpts:u.hoverlabel,hoverdistance:u.hoverdistance},zt=A(J,Ot,t);if(function(t,e,r){var n,i,a,o,s,l,c,u=0,h=1,f=t.size(),p=new Array(f),d=0;function g(t){var e=t[0],r=t[t.length-1];if(i=e.pmin-e.pos-e.dp+e.size,a=r.pos+r.dp+r.size-e.pmax,i>.01){for(s=t.length-1;s>=0;s--)t[s].dp+=i;n=!1}if(!(a<.01)){if(i<-.01){for(s=t.length-1;s>=0;s--)t[s].dp-=a;n=!1}if(n){var c=0;for(o=0;o<t.length;o++)(l=t[o]).pos+l.dp+l.size>e.pmax&&c++;for(o=t.length-1;o>=0&&!(c<=0);o--)(l=t[o]).pos>e.pmax-1&&(l.del=!0,c--);for(o=0;o<t.length&&!(c<=0);o++)if((l=t[o]).pos<e.pmin+1)for(l.del=!0,c--,a=2*l.size,s=t.length-1;s>=0;s--)t[s].dp-=a;for(o=t.length-1;o>=0&&!(c<=0);o--)(l=t[o]).pos+l.dp+l.size>e.pmax&&(l.del=!0,c--)}}}for(t.each(function(t){var n=t[e],i=\\\"x\\\"===n._id.charAt(0),a=n.range;0===d&&a&&a[0]>a[1]!==i&&(h=-1),p[d++]=[{datum:t,traceIndex:t.trace.index,dp:0,pos:t.pos,posref:t.posref,size:t.by*(i?x:1)/2,pmin:0,pmax:i?r.width:r.height}]}),p.sort(function(t,e){return t[0].posref-e[0].posref||h*(e[0].traceIndex-t[0].traceIndex)});!n&&u<=f;){for(u++,n=!0,o=0;o<p.length-1;){var v=p[o],m=p[o+1],y=v[v.length-1],b=m[0];if((i=y.pos+y.dp+y.size-b.pos-b.dp+b.size)>.01&&y.pmin===b.pmin&&y.pmax===b.pmax){for(s=m.length-1;s>=0;s--)m[s].dp+=i;for(v.push.apply(v,m),p.splice(o+1,1),c=0,s=v.length-1;s>=0;s--)c+=v[s].dp;for(a=c/v.length,s=v.length-1;s>=0;s--)v[s].dp-=a;n=!1}else o++}p.forEach(g)}for(o=p.length-1;o>=0;o--){var _=p[o];for(s=_.length-1;s>=0;s--){var w=_[s],k=w.datum;k.offset=w.dp,k.del=w.del}}}(zt,Lt?\\\"xa\\\":\\\"ya\\\",u),M(zt,Lt),e.target&&e.target.tagName){var It=d.getComponentMethod(\\\"annotations\\\",\\\"hasClickToShow\\\")(t,Mt);c(n.select(e.target),It?\\\"pointer\\\":\\\"\\\")}if(!e.target||a||!function(t,e,r){if(!r||r.length!==t._hoverdata.length)return!0;for(var n=r.length-1;n>=0;n--){var i=r[n],a=t._hoverdata[n];if(i.curveNumber!==a.curveNumber||String(i.pointNumber)!==String(a.pointNumber)||String(i.pointNumbers)!==String(a.pointNumbers))return!0}return!1}(t,0,At))return;At&&t.emit(\\\"plotly_unhover\\\",{event:e,points:At});t.emit(\\\"plotly_hover\\\",{event:e,points:t._hoverdata,xaxes:w,yaxes:k,xvals:D,yvals:R})}(t,e,r,a)})},r.loneHover=function(t,e){var r=!0;Array.isArray(t)||(r=!1,t=[t]);var i=t.map(function(t){return{color:t.color||h.defaultLine,x0:t.x0||t.x||0,x1:t.x1||t.x||0,y0:t.y0||t.y||0,y1:t.y1||t.y||0,xLabel:t.xLabel,yLabel:t.yLabel,zLabel:t.zLabel,text:t.text,name:t.name,idealAlign:t.idealAlign,borderColor:t.borderColor,fontFamily:t.fontFamily,fontSize:t.fontSize,fontColor:t.fontColor,nameLength:t.nameLength,textAlign:t.textAlign,trace:t.trace||{index:0,hoverinfo:\\\"\\\"},xa:{_offset:0},ya:{_offset:0},index:0,hovertemplate:t.hovertemplate||!1,eventData:t.eventData||!1,hovertemplateLabels:t.hovertemplateLabels||!1}}),a=n.select(e.container),o=e.outerContainer?n.select(e.outerContainer):a,s={hovermode:\\\"closest\\\",rotateLabels:!1,bgColor:e.bgColor||h.background,container:a,outerContainer:o},l=A(i,s,e.gd),c=0,u=0;return l.sort(function(t,e){return t.y0-e.y0}).each(function(t,r){var n=t.y0-t.by/2;t.offset=n-5<c?c-n+5:0,c=n+t.by+t.offset,r===e.anchorIndex&&(u=t.offset)}).each(function(t){t.offset-=u}),M(l,s.rotateLabels),r?l:l.node()};var T=/<extra>([\\\\s\\\\S]*)<\\\\/extra>/;function A(t,e,r){var i=r._fullLayout,a=e.hovermode,s=e.rotateLabels,c=e.bgColor,f=e.container,p=e.outerContainer,d=e.commonLabelOpts||{},g=e.fontFamily||v.HOVERFONT,y=e.fontSize||v.HOVERFONTSIZE,x=t[0],b=x.xa,_=x.ya,A=\\\"y\\\"===a?\\\"yLabel\\\":\\\"xLabel\\\",M=x[A],S=(String(M)||\\\"\\\").split(\\\" \\\")[0],E=p.node().getBoundingClientRect(),C=E.top,P=E.width,O=E.height,z=void 0!==M&&x.distance<=e.hoverdistance&&(\\\"x\\\"===a||\\\"y\\\"===a);if(z){var I,D,R=!0;for(I=0;I<t.length;I++)if(R&&void 0===t[I].zLabel&&(R=!1),D=t[I].hoverinfo||t[I].trace.hoverinfo){var F=Array.isArray(D)?D:D.split(\\\"+\\\");if(-1===F.indexOf(\\\"all\\\")&&-1===F.indexOf(a)){z=!1;break}}R&&(z=!1)}var B=f.selectAll(\\\"g.axistext\\\").data(z?[0]:[]);B.enter().append(\\\"g\\\").classed(\\\"axistext\\\",!0),B.exit().remove(),B.each(function(){var e=n.select(this),i=o.ensureSingle(e,\\\"path\\\",\\\"\\\",function(t){t.style({\\\"stroke-width\\\":\\\"1px\\\"})}),s=o.ensureSingle(e,\\\"text\\\",\\\"\\\",function(t){t.attr(\\\"data-notex\\\",1)}),c=d.bgcolor||h.defaultLine,f=d.bordercolor||h.contrast(c),p=h.contrast(c);i.style({fill:c,stroke:f}),s.text(M).call(u.font,d.font.family||g,d.font.size||y,d.font.color||p).call(l.positionText,0,0).call(l.convertToTspans,r),e.attr(\\\"transform\\\",\\\"\\\");var v=s.node().getBoundingClientRect();if(\\\"x\\\"===a){s.attr(\\\"text-anchor\\\",\\\"middle\\\").call(l.positionText,0,\\\"top\\\"===b.side?C-v.bottom-w-k:C-v.top+w+k);var m=\\\"top\\\"===b.side?\\\"-\\\":\\\"\\\";i.attr(\\\"d\\\",\\\"M0,0L\\\"+w+\\\",\\\"+m+w+\\\"H\\\"+(k+v.width/2)+\\\"v\\\"+m+(2*k+v.height)+\\\"H-\\\"+(k+v.width/2)+\\\"V\\\"+m+w+\\\"H-\\\"+w+\\\"Z\\\"),e.attr(\\\"transform\\\",\\\"translate(\\\"+(b._offset+(x.x0+x.x1)/2)+\\\",\\\"+(_._offset+(\\\"top\\\"===b.side?0:_._length))+\\\")\\\")}else{s.attr(\\\"text-anchor\\\",\\\"right\\\"===_.side?\\\"start\\\":\\\"end\\\").call(l.positionText,(\\\"right\\\"===_.side?1:-1)*(k+w),C-v.top-v.height/2);var T=\\\"right\\\"===_.side?\\\"\\\":\\\"-\\\";i.attr(\\\"d\\\",\\\"M0,0L\\\"+T+w+\\\",\\\"+w+\\\"V\\\"+(k+v.height/2)+\\\"h\\\"+T+(2*k+v.width)+\\\"V-\\\"+(k+v.height/2)+\\\"H\\\"+T+w+\\\"V-\\\"+w+\\\"Z\\\"),e.attr(\\\"transform\\\",\\\"translate(\\\"+(b._offset+(\\\"right\\\"===_.side?b._length:0))+\\\",\\\"+(_._offset+(x.y0+x.y1)/2)+\\\")\\\")}t=t.filter(function(t){return void 0!==t.zLabelVal||(t[A]||\\\"\\\").split(\\\" \\\")[0]===S})});var N=f.selectAll(\\\"g.hovertext\\\").data(t,function(t){return[t.trace.index,t.index,t.x0,t.y0,t.name,t.attr,t.xa,t.ya||\\\"\\\"].join(\\\",\\\")});return N.enter().append(\\\"g\\\").classed(\\\"hovertext\\\",!0).each(function(){var t=n.select(this);t.append(\\\"rect\\\").call(h.fill,h.addOpacity(c,.8)),t.append(\\\"text\\\").classed(\\\"name\\\",!0),t.append(\\\"path\\\").style(\\\"stroke-width\\\",\\\"1px\\\"),t.append(\\\"text\\\").classed(\\\"nums\\\",!0).call(u.font,g,y)}),N.exit().remove(),N.each(function(t){var e=n.select(this).attr(\\\"transform\\\",\\\"\\\"),f=\\\"\\\",p=\\\"\\\",d=t.bgcolor||t.color,v=h.combine(h.opacity(d)?d:h.defaultLine,c),x=h.combine(h.opacity(t.color)?t.color:h.defaultLine,c),b=t.borderColor||h.contrast(v);void 0!==t.nameOverride&&(t.name=t.nameOverride),t.name&&(t.trace._meta&&(t.name=o.templateString(t.name,t.trace._meta)),f=L(t.name,t.nameLength)),void 0!==t.zLabel?(void 0!==t.xLabel&&(p+=\\\"x: \\\"+t.xLabel+\\\"<br>\\\"),void 0!==t.yLabel&&(p+=\\\"y: \\\"+t.yLabel+\\\"<br>\\\"),\\\"choropleth\\\"!==t.trace.type&&\\\"choroplethmapbox\\\"!==t.trace.type&&(p+=(p?\\\"z: \\\":\\\"\\\")+t.zLabel)):z&&t[a+\\\"Label\\\"]===M?p=t[(\\\"x\\\"===a?\\\"y\\\":\\\"x\\\")+\\\"Label\\\"]||\\\"\\\":void 0===t.xLabel?void 0!==t.yLabel&&\\\"scattercarpet\\\"!==t.trace.type&&(p=t.yLabel):p=void 0===t.yLabel?t.xLabel:\\\"(\\\"+t.xLabel+\\\", \\\"+t.yLabel+\\\")\\\",!t.text&&0!==t.text||Array.isArray(t.text)||(p+=(p?\\\"<br>\\\":\\\"\\\")+t.text),void 0!==t.extraText&&(p+=(p?\\\"<br>\\\":\\\"\\\")+t.extraText),\\\"\\\"!==p||t.hovertemplate||(\\\"\\\"===f&&e.remove(),p=f);var _=i._d3locale,A=t.hovertemplate||!1,S=t.hovertemplateLabels||t,E=t.eventData[0]||{};A&&(p=(p=o.hovertemplateString(A,S,_,E,t.trace._meta)).replace(T,function(e,r){return f=L(r,t.nameLength),\\\"\\\"}));var I=e.select(\\\"text.nums\\\").call(u.font,t.fontFamily||g,t.fontSize||y,t.fontColor||b).text(p).attr(\\\"data-notex\\\",1).call(l.positionText,0,0).call(l.convertToTspans,r),D=e.select(\\\"text.name\\\"),R=0,F=0;if(f&&f!==p){D.call(u.font,t.fontFamily||g,t.fontSize||y,x).text(f).attr(\\\"data-notex\\\",1).call(l.positionText,0,0).call(l.convertToTspans,r);var B=D.node().getBoundingClientRect();R=B.width+2*k,F=B.height+2*k}else D.remove(),e.select(\\\"rect\\\").remove();e.select(\\\"path\\\").style({fill:v,stroke:b});var N,j,U=I.node().getBoundingClientRect(),V=t.xa._offset+(t.x0+t.x1)/2,q=t.ya._offset+(t.y0+t.y1)/2,H=Math.abs(t.x1-t.x0),G=Math.abs(t.y1-t.y0),Y=U.width+w+k+R;if(t.ty0=C-U.top,t.bx=U.width+2*k,t.by=Math.max(U.height+2*k,F),t.anchor=\\\"start\\\",t.txwidth=U.width,t.tx2width=R,t.offset=0,s)t.pos=V,N=q+G/2+Y<=O,j=q-G/2-Y>=0,\\\"top\\\"!==t.idealAlign&&N||!j?N?(q+=G/2,t.anchor=\\\"start\\\"):t.anchor=\\\"middle\\\":(q-=G/2,t.anchor=\\\"end\\\");else if(t.pos=q,N=V+H/2+Y<=P,j=V-H/2-Y>=0,\\\"left\\\"!==t.idealAlign&&N||!j)if(N)V+=H/2,t.anchor=\\\"start\\\";else{t.anchor=\\\"middle\\\";var W=Y/2,X=V+W-P,Z=V-W;X>0&&(V-=X),Z<0&&(V+=-Z)}else V-=H/2,t.anchor=\\\"end\\\";I.attr(\\\"text-anchor\\\",t.anchor),R&&D.attr(\\\"text-anchor\\\",t.anchor),e.attr(\\\"transform\\\",\\\"translate(\\\"+V+\\\",\\\"+q+\\\")\\\"+(s?\\\"rotate(\\\"+m+\\\")\\\":\\\"\\\"))}),N}function M(t,e){t.each(function(t){var r=n.select(this);if(t.del)return r.remove();var i=r.select(\\\"text.nums\\\"),a=t.anchor,o=\\\"end\\\"===a?-1:1,s={start:1,end:-1,middle:0}[a],c=s*(w+k),h=c+s*(t.txwidth+k),f=0,p=t.offset;\\\"middle\\\"===a&&(c-=t.tx2width/2,h+=t.txwidth/2+k),e&&(p*=-_,f=t.offset*b),r.select(\\\"path\\\").attr(\\\"d\\\",\\\"middle\\\"===a?\\\"M-\\\"+(t.bx/2+t.tx2width/2)+\\\",\\\"+(p-t.by/2)+\\\"h\\\"+t.bx+\\\"v\\\"+t.by+\\\"h-\\\"+t.bx+\\\"Z\\\":\\\"M0,0L\\\"+(o*w+f)+\\\",\\\"+(w+p)+\\\"v\\\"+(t.by/2-w)+\\\"h\\\"+o*t.bx+\\\"v-\\\"+t.by+\\\"H\\\"+(o*w+f)+\\\"V\\\"+(p-w)+\\\"Z\\\");var d=c+f,g=p+t.ty0-t.by/2+k,v=t.textAlign||\\\"auto\\\";\\\"auto\\\"!==v&&(\\\"left\\\"===v&&\\\"start\\\"!==a?(i.attr(\\\"text-anchor\\\",\\\"start\\\"),d=\\\"middle\\\"===a?-t.bx/2-t.tx2width/2+k:-t.bx-k):\\\"right\\\"===v&&\\\"end\\\"!==a&&(i.attr(\\\"text-anchor\\\",\\\"end\\\"),d=\\\"middle\\\"===a?t.bx/2-t.tx2width/2-k:t.bx+k)),i.call(l.positionText,d,g),t.tx2width&&(r.select(\\\"text.name\\\").call(l.positionText,h+s*k+f,p+t.ty0-t.by/2+k),r.select(\\\"rect\\\").call(u.setRect,h+(s-1)*t.tx2width/2+f,p-t.by/2-1,t.tx2width,t.by+2))})}function S(t,e){var r=t.index,n=t.trace||{},a=t.cd[0],s=t.cd[r]||{};function l(t){return t||i(t)&&0===t}var c=Array.isArray(r)?function(t,e){var i=o.castOption(a,r,t);return l(i)?i:o.extractOption({},n,\\\"\\\",e)}:function(t,e){return o.extractOption(s,n,t,e)};function u(e,r,n){var i=c(r,n);l(i)&&(t[e]=i)}if(u(\\\"hoverinfo\\\",\\\"hi\\\",\\\"hoverinfo\\\"),u(\\\"bgcolor\\\",\\\"hbg\\\",\\\"hoverlabel.bgcolor\\\"),u(\\\"borderColor\\\",\\\"hbc\\\",\\\"hoverlabel.bordercolor\\\"),u(\\\"fontFamily\\\",\\\"htf\\\",\\\"hoverlabel.font.family\\\"),u(\\\"fontSize\\\",\\\"hts\\\",\\\"hoverlabel.font.size\\\"),u(\\\"fontColor\\\",\\\"htc\\\",\\\"hoverlabel.font.color\\\"),u(\\\"nameLength\\\",\\\"hnl\\\",\\\"hoverlabel.namelength\\\"),u(\\\"textAlign\\\",\\\"hta\\\",\\\"hoverlabel.align\\\"),t.posref=\\\"y\\\"===e||\\\"closest\\\"===e&&\\\"h\\\"===n.orientation?t.xa._offset+(t.x0+t.x1)/2:t.ya._offset+(t.y0+t.y1)/2,t.x0=o.constrain(t.x0,0,t.xa._length),t.x1=o.constrain(t.x1,0,t.xa._length),t.y0=o.constrain(t.y0,0,t.ya._length),t.y1=o.constrain(t.y1,0,t.ya._length),void 0!==t.xLabelVal&&(t.xLabel=\\\"xLabel\\\"in t?t.xLabel:p.hoverLabelText(t.xa,t.xLabelVal),t.xVal=t.xa.c2d(t.xLabelVal)),void 0!==t.yLabelVal&&(t.yLabel=\\\"yLabel\\\"in t?t.yLabel:p.hoverLabelText(t.ya,t.yLabelVal),t.yVal=t.ya.c2d(t.yLabelVal)),void 0!==t.zLabelVal&&void 0===t.zLabel&&(t.zLabel=String(t.zLabelVal)),!(isNaN(t.xerr)||\\\"log\\\"===t.xa.type&&t.xerr<=0)){var h=p.tickText(t.xa,t.xa.c2l(t.xerr),\\\"hover\\\").text;void 0!==t.xerrneg?t.xLabel+=\\\" +\\\"+h+\\\" / -\\\"+p.tickText(t.xa,t.xa.c2l(t.xerrneg),\\\"hover\\\").text:t.xLabel+=\\\" \\\\xb1 \\\"+h,\\\"x\\\"===e&&(t.distance+=1)}if(!(isNaN(t.yerr)||\\\"log\\\"===t.ya.type&&t.yerr<=0)){var f=p.tickText(t.ya,t.ya.c2l(t.yerr),\\\"hover\\\").text;void 0!==t.yerrneg?t.yLabel+=\\\" +\\\"+f+\\\" / -\\\"+p.tickText(t.ya,t.ya.c2l(t.yerrneg),\\\"hover\\\").text:t.yLabel+=\\\" \\\\xb1 \\\"+f,\\\"y\\\"===e&&(t.distance+=1)}var d=t.hoverinfo||t.trace.hoverinfo;return d&&\\\"all\\\"!==d&&(-1===(d=Array.isArray(d)?d:d.split(\\\"+\\\")).indexOf(\\\"x\\\")&&(t.xLabel=void 0),-1===d.indexOf(\\\"y\\\")&&(t.yLabel=void 0),-1===d.indexOf(\\\"z\\\")&&(t.zLabel=void 0),-1===d.indexOf(\\\"text\\\")&&(t.text=void 0),-1===d.indexOf(\\\"name\\\")&&(t.name=void 0)),t}function E(t,e){var r,n,i=e.container,o=e.fullLayout,s=e.event,l=!!t.hLinePoint,c=!!t.vLinePoint;if(i.selectAll(\\\".spikeline\\\").remove(),c||l){var f=h.combine(o.plot_bgcolor,o.paper_bgcolor);if(l){var p,d,g=t.hLinePoint;r=g&&g.xa,\\\"cursor\\\"===(n=g&&g.ya).spikesnap?(p=s.pointerX,d=s.pointerY):(p=r._offset+g.x,d=n._offset+g.y);var v,m,y=a.readability(g.color,f)<1.5?h.contrast(f):g.color,x=n.spikemode,b=n.spikethickness,_=n.spikecolor||y,w=n._boundingBox,k=(w.left+w.right)/2<p?w.right:w.left;-1===x.indexOf(\\\"toaxis\\\")&&-1===x.indexOf(\\\"across\\\")||(-1!==x.indexOf(\\\"toaxis\\\")&&(v=k,m=p),-1!==x.indexOf(\\\"across\\\")&&(v=n._counterSpan[0],m=n._counterSpan[1]),i.insert(\\\"line\\\",\\\":first-child\\\").attr({x1:v,x2:m,y1:d,y2:d,\\\"stroke-width\\\":b,stroke:_,\\\"stroke-dasharray\\\":u.dashStyle(n.spikedash,b)}).classed(\\\"spikeline\\\",!0).classed(\\\"crisp\\\",!0),i.insert(\\\"line\\\",\\\":first-child\\\").attr({x1:v,x2:m,y1:d,y2:d,\\\"stroke-width\\\":b+2,stroke:f}).classed(\\\"spikeline\\\",!0).classed(\\\"crisp\\\",!0)),-1!==x.indexOf(\\\"marker\\\")&&i.insert(\\\"circle\\\",\\\":first-child\\\").attr({cx:k+(\\\"right\\\"!==n.side?b:-b),cy:d,r:b,fill:_}).classed(\\\"spikeline\\\",!0)}if(c){var T,A,M=t.vLinePoint;r=M&&M.xa,n=M&&M.ya,\\\"cursor\\\"===r.spikesnap?(T=s.pointerX,A=s.pointerY):(T=r._offset+M.x,A=n._offset+M.y);var S,E,C=a.readability(M.color,f)<1.5?h.contrast(f):M.color,L=r.spikemode,P=r.spikethickness,O=r.spikecolor||C,z=r._boundingBox,I=(z.top+z.bottom)/2<A?z.bottom:z.top;-1===L.indexOf(\\\"toaxis\\\")&&-1===L.indexOf(\\\"across\\\")||(-1!==L.indexOf(\\\"toaxis\\\")&&(S=I,E=A),-1!==L.indexOf(\\\"across\\\")&&(S=r._counterSpan[0],E=r._counterSpan[1]),i.insert(\\\"line\\\",\\\":first-child\\\").attr({x1:T,x2:T,y1:S,y2:E,\\\"stroke-width\\\":P,stroke:O,\\\"stroke-dasharray\\\":u.dashStyle(r.spikedash,P)}).classed(\\\"spikeline\\\",!0).classed(\\\"crisp\\\",!0),i.insert(\\\"line\\\",\\\":first-child\\\").attr({x1:T,x2:T,y1:S,y2:E,\\\"stroke-width\\\":P+2,stroke:f}).classed(\\\"spikeline\\\",!0).classed(\\\"crisp\\\",!0)),-1!==L.indexOf(\\\"marker\\\")&&i.insert(\\\"circle\\\",\\\":first-child\\\").attr({cx:T,cy:I-(\\\"top\\\"!==r.side?P:-P),r:P,fill:O}).classed(\\\"spikeline\\\",!0)}}}function C(t,e){return!e||(e.vLinePoint!==t._spikepoints.vLinePoint||e.hLinePoint!==t._spikepoints.hLinePoint)}function L(t,e){return l.plainText(t||\\\"\\\",{len:e,allowedTags:[\\\"br\\\",\\\"sub\\\",\\\"sup\\\",\\\"b\\\",\\\"i\\\",\\\"em\\\"]})}},{\\\"../../lib\\\":719,\\\"../../lib/events\\\":709,\\\"../../lib/override_cursor\\\":730,\\\"../../lib/svg_text_utils\\\":743,\\\"../../plots/cartesian/axes\\\":767,\\\"../../registry\\\":847,\\\"../color\\\":593,\\\"../dragelement\\\":611,\\\"../drawing\\\":614,\\\"./constants\\\":626,\\\"./helpers\\\":628,d3:163,\\\"fast-isnumeric\\\":225,tinycolor2:537}],630:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\");e.exports=function(t,e,r,i){r(\\\"hoverlabel.bgcolor\\\",(i=i||{}).bgcolor),r(\\\"hoverlabel.bordercolor\\\",i.bordercolor),r(\\\"hoverlabel.namelength\\\",i.namelength),n.coerceFont(r,\\\"hoverlabel.font\\\",i.font),r(\\\"hoverlabel.align\\\",i.align)}},{\\\"../../lib\\\":719}],631:[function(t,e,r){\\\"use strict\\\";t(\\\"../../constants/docs\\\").FORMAT_LINK;e.exports=function(t,e){t=t||{};(e=e||{}).description&&e.description;var r=e.keys||[];if(r.length>0){for(var n=[],i=0;i<r.length;i++)n[i]=\\\"`\\\"+r[i]+\\\"`\\\";\\\"Finally, the template string has access to \\\",1===r.length?\\\"variable \\\"+n[0]:\\\"variables \\\"+n.slice(0,-1).join(\\\", \\\")+\\\" and \\\"+n.slice(-1)+\\\".\\\"}var a={valType:\\\"string\\\",dflt:\\\"\\\",editType:t.editType||\\\"none\\\"};return!1!==t.arrayOk&&(a.arrayOk=!0),a}},{\\\"../../constants/docs\\\":690}],632:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../dragelement\\\"),o=t(\\\"./helpers\\\"),s=t(\\\"./layout_attributes\\\"),l=t(\\\"./hover\\\");e.exports={moduleType:\\\"component\\\",name:\\\"fx\\\",constants:t(\\\"./constants\\\"),schema:{layout:s},attributes:t(\\\"./attributes\\\"),layoutAttributes:s,supplyLayoutGlobalDefaults:t(\\\"./layout_global_defaults\\\"),supplyDefaults:t(\\\"./defaults\\\"),supplyLayoutDefaults:t(\\\"./layout_defaults\\\"),calc:t(\\\"./calc\\\"),getDistanceFunction:o.getDistanceFunction,getClosest:o.getClosest,inbox:o.inbox,quadrature:o.quadrature,appendArrayPointValue:o.appendArrayPointValue,castHoverOption:function(t,e,r){return i.castOption(t,e,\\\"hoverlabel.\\\"+r)},castHoverinfo:function(t,e,r){return i.castOption(t,r,\\\"hoverinfo\\\",function(r){return i.coerceHoverinfo({hoverinfo:r},{_module:t._module},e)})},hover:l.hover,unhover:a.unhover,loneHover:l.loneHover,loneUnhover:function(t){var e=i.isD3Selection(t)?t:n.select(t);e.selectAll(\\\"g.hovertext\\\").remove(),e.selectAll(\\\".spikeline\\\").remove()},click:t(\\\"./click\\\")}},{\\\"../../lib\\\":719,\\\"../dragelement\\\":611,\\\"./attributes\\\":623,\\\"./calc\\\":624,\\\"./click\\\":625,\\\"./constants\\\":626,\\\"./defaults\\\":627,\\\"./helpers\\\":628,\\\"./hover\\\":629,\\\"./layout_attributes\\\":633,\\\"./layout_defaults\\\":634,\\\"./layout_global_defaults\\\":635,d3:163}],633:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./constants\\\"),i=t(\\\"../../plots/font_attributes\\\")({editType:\\\"none\\\"});i.family.dflt=n.HOVERFONT,i.size.dflt=n.HOVERFONTSIZE,e.exports={clickmode:{valType:\\\"flaglist\\\",flags:[\\\"event\\\",\\\"select\\\"],dflt:\\\"event\\\",editType:\\\"plot\\\",extras:[\\\"none\\\"]},dragmode:{valType:\\\"enumerated\\\",values:[\\\"zoom\\\",\\\"pan\\\",\\\"select\\\",\\\"lasso\\\",\\\"orbit\\\",\\\"turntable\\\",!1],dflt:\\\"zoom\\\",editType:\\\"modebar\\\"},hovermode:{valType:\\\"enumerated\\\",values:[\\\"x\\\",\\\"y\\\",\\\"closest\\\",!1],editType:\\\"modebar\\\"},hoverdistance:{valType:\\\"integer\\\",min:-1,dflt:20,editType:\\\"none\\\"},spikedistance:{valType:\\\"integer\\\",min:-1,dflt:20,editType:\\\"none\\\"},hoverlabel:{bgcolor:{valType:\\\"color\\\",editType:\\\"none\\\"},bordercolor:{valType:\\\"color\\\",editType:\\\"none\\\"},font:i,align:{valType:\\\"enumerated\\\",values:[\\\"left\\\",\\\"right\\\",\\\"auto\\\"],dflt:\\\"auto\\\",editType:\\\"none\\\"},namelength:{valType:\\\"integer\\\",min:-1,dflt:15,editType:\\\"none\\\"},editType:\\\"none\\\"},selectdirection:{valType:\\\"enumerated\\\",values:[\\\"h\\\",\\\"v\\\",\\\"d\\\",\\\"any\\\"],dflt:\\\"any\\\",editType:\\\"none\\\"}}},{\\\"../../plots/font_attributes\\\":793,\\\"./constants\\\":626}],634:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./layout_attributes\\\");e.exports=function(t,e,r){function a(r,a){return n.coerce(t,e,i,r,a)}var o,s=a(\\\"clickmode\\\");\\\"select\\\"===a(\\\"dragmode\\\")&&a(\\\"selectdirection\\\"),e._has(\\\"cartesian\\\")?s.indexOf(\\\"select\\\")>-1?o=\\\"closest\\\":(e._isHoriz=function(t,e){for(var r=e._scatterStackOpts||{},n=0;n<t.length;n++){var i=t[n],a=i.xaxis+i.yaxis,o=r[a]||{},s=o[i.stackgroup]||{};if(\\\"h\\\"!==i.orientation&&\\\"h\\\"!==s.orientation)return!1}return!0}(r,e),o=e._isHoriz?\\\"y\\\":\\\"x\\\"):o=\\\"closest\\\",a(\\\"hovermode\\\",o)&&(a(\\\"hoverdistance\\\"),a(\\\"spikedistance\\\"));var l=e._has(\\\"mapbox\\\"),c=e._has(\\\"geo\\\"),u=e._basePlotModules.length;\\\"zoom\\\"===e.dragmode&&((l||c)&&1===u||l&&c&&2===u)&&(e.dragmode=\\\"pan\\\")}},{\\\"../../lib\\\":719,\\\"./layout_attributes\\\":633}],635:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./hoverlabel_defaults\\\"),a=t(\\\"./layout_attributes\\\");e.exports=function(t,e){i(t,e,function(r,i){return n.coerce(t,e,a,r,i)})}},{\\\"../../lib\\\":719,\\\"./hoverlabel_defaults\\\":630,\\\"./layout_attributes\\\":633}],636:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../lib/regex\\\").counter,a=t(\\\"../../plots/domain\\\").attributes,o=t(\\\"../../plots/cartesian/constants\\\").idRegex,s=t(\\\"../../plot_api/plot_template\\\"),l={rows:{valType:\\\"integer\\\",min:1,editType:\\\"plot\\\"},roworder:{valType:\\\"enumerated\\\",values:[\\\"top to bottom\\\",\\\"bottom to top\\\"],dflt:\\\"top to bottom\\\",editType:\\\"plot\\\"},columns:{valType:\\\"integer\\\",min:1,editType:\\\"plot\\\"},subplots:{valType:\\\"info_array\\\",freeLength:!0,dimensions:2,items:{valType:\\\"enumerated\\\",values:[i(\\\"xy\\\").toString(),\\\"\\\"],editType:\\\"plot\\\"},editType:\\\"plot\\\"},xaxes:{valType:\\\"info_array\\\",freeLength:!0,items:{valType:\\\"enumerated\\\",values:[o.x.toString(),\\\"\\\"],editType:\\\"plot\\\"},editType:\\\"plot\\\"},yaxes:{valType:\\\"info_array\\\",freeLength:!0,items:{valType:\\\"enumerated\\\",values:[o.y.toString(),\\\"\\\"],editType:\\\"plot\\\"},editType:\\\"plot\\\"},pattern:{valType:\\\"enumerated\\\",values:[\\\"independent\\\",\\\"coupled\\\"],dflt:\\\"coupled\\\",editType:\\\"plot\\\"},xgap:{valType:\\\"number\\\",min:0,max:1,editType:\\\"plot\\\"},ygap:{valType:\\\"number\\\",min:0,max:1,editType:\\\"plot\\\"},domain:a({name:\\\"grid\\\",editType:\\\"plot\\\",noGridCell:!0},{}),xside:{valType:\\\"enumerated\\\",values:[\\\"bottom\\\",\\\"bottom plot\\\",\\\"top plot\\\",\\\"top\\\"],dflt:\\\"bottom plot\\\",editType:\\\"plot\\\"},yside:{valType:\\\"enumerated\\\",values:[\\\"left\\\",\\\"left plot\\\",\\\"right plot\\\",\\\"right\\\"],dflt:\\\"left plot\\\",editType:\\\"plot\\\"},editType:\\\"plot\\\"};function c(t,e,r){var n=e[r+\\\"axes\\\"],i=Object.keys((t._splomAxes||{})[r]||{});return Array.isArray(n)?n:i.length?i:void 0}function u(t,e,r,n,i,a){var o=e(t+\\\"gap\\\",r),s=e(\\\"domain.\\\"+t);e(t+\\\"side\\\",n);for(var l=new Array(i),c=s[0],u=(s[1]-c)/(i-o),h=u*(1-o),f=0;f<i;f++){var p=c+u*f;l[a?i-1-f:f]=[p,p+h]}return l}function h(t,e,r,n,i){var a,o=new Array(r);function s(t,r){-1!==e.indexOf(r)&&void 0===n[r]?(o[t]=r,n[r]=t):o[t]=\\\"\\\"}if(Array.isArray(t))for(a=0;a<r;a++)s(a,t[a]);else for(s(0,i),a=1;a<r;a++)s(a,i+(a+1));return o}e.exports={moduleType:\\\"component\\\",name:\\\"grid\\\",schema:{layout:{grid:l}},layoutAttributes:l,sizeDefaults:function(t,e){var r=t.grid||{},i=c(e,r,\\\"x\\\"),a=c(e,r,\\\"y\\\");if(t.grid||i||a){var o,h,f=Array.isArray(r.subplots)&&Array.isArray(r.subplots[0]),p=Array.isArray(i),d=Array.isArray(a),g=p&&i!==r.xaxes&&d&&a!==r.yaxes;f?(o=r.subplots.length,h=r.subplots[0].length):(d&&(o=a.length),p&&(h=i.length));var v=s.newContainer(e,\\\"grid\\\"),m=T(\\\"rows\\\",o),y=T(\\\"columns\\\",h);if(m*y>1){f||p||d||\\\"independent\\\"===T(\\\"pattern\\\")&&(f=!0),v._hasSubplotGrid=f;var x,b,_=\\\"top to bottom\\\"===T(\\\"roworder\\\"),w=f?.2:.1,k=f?.3:.1;g&&e._splomGridDflt&&(x=e._splomGridDflt.xside,b=e._splomGridDflt.yside),v._domains={x:u(\\\"x\\\",T,w,x,y),y:u(\\\"y\\\",T,k,b,m,_)}}else delete e.grid}function T(t,e){return n.coerce(r,v,l,t,e)}},contentDefaults:function(t,e){var r=e.grid;if(r&&r._domains){var n,i,a,o,s,l,u,f=t.grid||{},p=e._subplots,d=r._hasSubplotGrid,g=r.rows,v=r.columns,m=\\\"independent\\\"===r.pattern,y=r._axisMap={};if(d){var x=f.subplots||[];l=r.subplots=new Array(g);var b=1;for(n=0;n<g;n++){var _=l[n]=new Array(v),w=x[n]||[];for(i=0;i<v;i++)if(m?(s=1===b?\\\"xy\\\":\\\"x\\\"+b+\\\"y\\\"+b,b++):s=w[i],_[i]=\\\"\\\",-1!==p.cartesian.indexOf(s)){if(u=s.indexOf(\\\"y\\\"),a=s.slice(0,u),o=s.slice(u),void 0!==y[a]&&y[a]!==i||void 0!==y[o]&&y[o]!==n)continue;_[i]=s,y[a]=i,y[o]=n}}}else{var k=c(e,f,\\\"x\\\"),T=c(e,f,\\\"y\\\");r.xaxes=h(k,p.xaxis,v,y,\\\"x\\\"),r.yaxes=h(T,p.yaxis,g,y,\\\"y\\\")}var A=r._anchors={},M=\\\"top to bottom\\\"===r.roworder;for(var S in y){var E,C,L,P=S.charAt(0),O=r[P+\\\"side\\\"];if(O.length<8)A[S]=\\\"free\\\";else if(\\\"x\\\"===P){if(\\\"t\\\"===O.charAt(0)===M?(E=0,C=1,L=g):(E=g-1,C=-1,L=-1),d){var z=y[S];for(n=E;n!==L;n+=C)if((s=l[n][z])&&(u=s.indexOf(\\\"y\\\"),s.slice(0,u)===S)){A[S]=s.slice(u);break}}else for(n=E;n!==L;n+=C)if(o=r.yaxes[n],-1!==p.cartesian.indexOf(S+o)){A[S]=o;break}}else if(\\\"l\\\"===O.charAt(0)?(E=0,C=1,L=v):(E=v-1,C=-1,L=-1),d){var I=y[S];for(n=E;n!==L;n+=C)if((s=l[I][n])&&(u=s.indexOf(\\\"y\\\"),s.slice(u)===S)){A[S]=s.slice(0,u);break}}else for(n=E;n!==L;n+=C)if(a=r.xaxes[n],-1!==p.cartesian.indexOf(a+S)){A[S]=a;break}}}}}},{\\\"../../lib\\\":719,\\\"../../lib/regex\\\":735,\\\"../../plot_api/plot_template\\\":757,\\\"../../plots/cartesian/constants\\\":773,\\\"../../plots/domain\\\":792}],637:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/cartesian/constants\\\"),i=t(\\\"../../plot_api/plot_template\\\").templatedArray;e.exports=i(\\\"image\\\",{visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"arraydraw\\\"},source:{valType:\\\"string\\\",editType:\\\"arraydraw\\\"},layer:{valType:\\\"enumerated\\\",values:[\\\"below\\\",\\\"above\\\"],dflt:\\\"above\\\",editType:\\\"arraydraw\\\"},sizex:{valType:\\\"number\\\",dflt:0,editType:\\\"arraydraw\\\"},sizey:{valType:\\\"number\\\",dflt:0,editType:\\\"arraydraw\\\"},sizing:{valType:\\\"enumerated\\\",values:[\\\"fill\\\",\\\"contain\\\",\\\"stretch\\\"],dflt:\\\"contain\\\",editType:\\\"arraydraw\\\"},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:1,editType:\\\"arraydraw\\\"},x:{valType:\\\"any\\\",dflt:0,editType:\\\"arraydraw\\\"},y:{valType:\\\"any\\\",dflt:0,editType:\\\"arraydraw\\\"},xanchor:{valType:\\\"enumerated\\\",values:[\\\"left\\\",\\\"center\\\",\\\"right\\\"],dflt:\\\"left\\\",editType:\\\"arraydraw\\\"},yanchor:{valType:\\\"enumerated\\\",values:[\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],dflt:\\\"top\\\",editType:\\\"arraydraw\\\"},xref:{valType:\\\"enumerated\\\",values:[\\\"paper\\\",n.idRegex.x.toString()],dflt:\\\"paper\\\",editType:\\\"arraydraw\\\"},yref:{valType:\\\"enumerated\\\",values:[\\\"paper\\\",n.idRegex.y.toString()],dflt:\\\"paper\\\",editType:\\\"arraydraw\\\"},editType:\\\"arraydraw\\\"})},{\\\"../../plot_api/plot_template\\\":757,\\\"../../plots/cartesian/constants\\\":773}],638:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../lib/to_log_range\\\");e.exports=function(t,e,r,a){e=e||{};var o=\\\"log\\\"===r&&\\\"linear\\\"===e.type,s=\\\"linear\\\"===r&&\\\"log\\\"===e.type;if(o||s)for(var l,c,u=t._fullLayout.images,h=e._id.charAt(0),f=0;f<u.length;f++)if(c=\\\"images[\\\"+f+\\\"].\\\",(l=u[f])[h+\\\"ref\\\"]===e._id){var p=l[h],d=l[\\\"size\\\"+h],g=null,v=null;if(o){g=i(p,e.range);var m=d/Math.pow(10,g)/2;v=2*Math.log(m+Math.sqrt(1+m*m))/Math.LN10}else v=(g=Math.pow(10,p))*(Math.pow(10,d/2)-Math.pow(10,-d/2));n(g)?n(v)||(v=null):(g=null,v=null),a(c+h,g),a(c+\\\"size\\\"+h,v)}}},{\\\"../../lib/to_log_range\\\":745,\\\"fast-isnumeric\\\":225}],639:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../plots/cartesian/axes\\\"),a=t(\\\"../../plots/array_container_defaults\\\"),o=t(\\\"./attributes\\\");function s(t,e,r){function a(r,i){return n.coerce(t,e,o,r,i)}var s=a(\\\"source\\\");if(!a(\\\"visible\\\",!!s))return e;a(\\\"layer\\\"),a(\\\"xanchor\\\"),a(\\\"yanchor\\\"),a(\\\"sizex\\\"),a(\\\"sizey\\\"),a(\\\"sizing\\\"),a(\\\"opacity\\\");for(var l={_fullLayout:r},c=[\\\"x\\\",\\\"y\\\"],u=0;u<2;u++){var h=c[u],f=i.coerceRef(t,e,l,h,\\\"paper\\\");if(\\\"paper\\\"!==f)i.getFromId(l,f)._imgIndices.push(e._index);i.coercePosition(e,l,a,f,h,0)}return e}e.exports=function(t,e){a(t,e,{name:\\\"images\\\",handleItemDefaults:s})}},{\\\"../../lib\\\":719,\\\"../../plots/array_container_defaults\\\":763,\\\"../../plots/cartesian/axes\\\":767,\\\"./attributes\\\":637}],640:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../drawing\\\"),a=t(\\\"../../plots/cartesian/axes\\\"),o=t(\\\"../../constants/xmlns_namespaces\\\");e.exports=function(t){var e,r,s=t._fullLayout,l=[],c={},u=[];for(r=0;r<s.images.length;r++){var h=s.images[r];if(h.visible)if(\\\"below\\\"===h.layer&&\\\"paper\\\"!==h.xref&&\\\"paper\\\"!==h.yref){e=h.xref+h.yref;var f=s._plots[e];if(!f){u.push(h);continue}f.mainplot&&(e=f.mainplot.id),c[e]||(c[e]=[]),c[e].push(h)}else\\\"above\\\"===h.layer?l.push(h):u.push(h)}var p={x:{left:{sizing:\\\"xMin\\\",offset:0},center:{sizing:\\\"xMid\\\",offset:-.5},right:{sizing:\\\"xMax\\\",offset:-1}},y:{top:{sizing:\\\"YMin\\\",offset:0},middle:{sizing:\\\"YMid\\\",offset:-.5},bottom:{sizing:\\\"YMax\\\",offset:-1}}};function d(e){var r=n.select(this);if(!this.img||this.img.src!==e.source){r.attr(\\\"xmlns\\\",o.svg);var i=new Promise(function(t){var n=new Image;function i(){r.remove(),t()}this.img=n,n.setAttribute(\\\"crossOrigin\\\",\\\"anonymous\\\"),n.onerror=i,n.onload=function(){var e=document.createElement(\\\"canvas\\\");e.width=this.width,e.height=this.height,e.getContext(\\\"2d\\\").drawImage(this,0,0);var n=e.toDataURL(\\\"image/png\\\");r.attr(\\\"xlink:href\\\",n),t()},r.on(\\\"error\\\",i),n.src=e.source}.bind(this));t._promises.push(i)}}function g(e){var r=n.select(this),o=a.getFromId(t,e.xref),l=a.getFromId(t,e.yref),c=s._size,u=o?Math.abs(o.l2p(e.sizex)-o.l2p(0)):e.sizex*c.w,h=l?Math.abs(l.l2p(e.sizey)-l.l2p(0)):e.sizey*c.h,f=u*p.x[e.xanchor].offset,d=h*p.y[e.yanchor].offset,g=p.x[e.xanchor].sizing+p.y[e.yanchor].sizing,v=(o?o.r2p(e.x)+o._offset:e.x*c.w+c.l)+f,m=(l?l.r2p(e.y)+l._offset:c.h-e.y*c.h+c.t)+d;switch(e.sizing){case\\\"fill\\\":g+=\\\" slice\\\";break;case\\\"stretch\\\":g=\\\"none\\\"}r.attr({x:v,y:m,width:u,height:h,preserveAspectRatio:g,opacity:e.opacity});var y=(o?o._id:\\\"\\\")+(l?l._id:\\\"\\\");i.setClipUrl(r,y?\\\"clip\\\"+s._uid+y:null,t)}var v=s._imageLowerLayer.selectAll(\\\"image\\\").data(u),m=s._imageUpperLayer.selectAll(\\\"image\\\").data(l);v.enter().append(\\\"image\\\"),m.enter().append(\\\"image\\\"),v.exit().remove(),m.exit().remove(),v.each(function(t){d.bind(this)(t),g.bind(this)(t)}),m.each(function(t){d.bind(this)(t),g.bind(this)(t)});var y=Object.keys(s._plots);for(r=0;r<y.length;r++){e=y[r];var x=s._plots[e];if(x.imagelayer){var b=x.imagelayer.selectAll(\\\"image\\\").data(c[e]||[]);b.enter().append(\\\"image\\\"),b.exit().remove(),b.each(function(t){d.bind(this)(t),g.bind(this)(t)})}}}},{\\\"../../constants/xmlns_namespaces\\\":696,\\\"../../plots/cartesian/axes\\\":767,\\\"../drawing\\\":614,d3:163}],641:[function(t,e,r){\\\"use strict\\\";e.exports={moduleType:\\\"component\\\",name:\\\"images\\\",layoutAttributes:t(\\\"./attributes\\\"),supplyLayoutDefaults:t(\\\"./defaults\\\"),includeBasePlot:t(\\\"../../plots/cartesian/include_components\\\")(\\\"images\\\"),draw:t(\\\"./draw\\\"),convertCoords:t(\\\"./convert_coords\\\")}},{\\\"../../plots/cartesian/include_components\\\":777,\\\"./attributes\\\":637,\\\"./convert_coords\\\":638,\\\"./defaults\\\":639,\\\"./draw\\\":640}],642:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/font_attributes\\\"),i=t(\\\"../color/attributes\\\");e.exports={bgcolor:{valType:\\\"color\\\",editType:\\\"legend\\\"},bordercolor:{valType:\\\"color\\\",dflt:i.defaultLine,editType:\\\"legend\\\"},borderwidth:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"legend\\\"},font:n({editType:\\\"legend\\\"}),orientation:{valType:\\\"enumerated\\\",values:[\\\"v\\\",\\\"h\\\"],dflt:\\\"v\\\",editType:\\\"legend\\\"},traceorder:{valType:\\\"flaglist\\\",flags:[\\\"reversed\\\",\\\"grouped\\\"],extras:[\\\"normal\\\"],editType:\\\"legend\\\"},tracegroupgap:{valType:\\\"number\\\",min:0,dflt:10,editType:\\\"legend\\\"},itemsizing:{valType:\\\"enumerated\\\",values:[\\\"trace\\\",\\\"constant\\\"],dflt:\\\"trace\\\",editType:\\\"legend\\\"},itemclick:{valType:\\\"enumerated\\\",values:[\\\"toggle\\\",\\\"toggleothers\\\",!1],dflt:\\\"toggle\\\",editType:\\\"legend\\\"},itemdoubleclick:{valType:\\\"enumerated\\\",values:[\\\"toggle\\\",\\\"toggleothers\\\",!1],dflt:\\\"toggleothers\\\",editType:\\\"legend\\\"},x:{valType:\\\"number\\\",min:-2,max:3,dflt:1.02,editType:\\\"legend\\\"},xanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"left\\\",\\\"center\\\",\\\"right\\\"],dflt:\\\"left\\\",editType:\\\"legend\\\"},y:{valType:\\\"number\\\",min:-2,max:3,dflt:1,editType:\\\"legend\\\"},yanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],dflt:\\\"auto\\\",editType:\\\"legend\\\"},uirevision:{valType:\\\"any\\\",editType:\\\"none\\\"},valign:{valType:\\\"enumerated\\\",values:[\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],dflt:\\\"middle\\\",editType:\\\"legend\\\"},editType:\\\"legend\\\"}},{\\\"../../plots/font_attributes\\\":793,\\\"../color/attributes\\\":592}],643:[function(t,e,r){\\\"use strict\\\";e.exports={scrollBarWidth:6,scrollBarMinHeight:20,scrollBarColor:\\\"#808BA4\\\",scrollBarMargin:4,textOffsetX:40}},{}],644:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../plot_api/plot_template\\\"),o=t(\\\"./attributes\\\"),s=t(\\\"../../plots/layout_attributes\\\"),l=t(\\\"./helpers\\\");e.exports=function(t,e,r){for(var c,u,h,f,p=t.legend||{},d=0,g=!1,v=\\\"normal\\\",m=0;m<r.length;m++){var y=r[m];y.visible&&((y.showlegend||y._dfltShowLegend)&&(d++,y.showlegend&&(g=!0,(n.traceIs(y,\\\"pie-like\\\")||!0===y._input.showlegend)&&d++)),(n.traceIs(y,\\\"bar\\\")&&\\\"stack\\\"===e.barmode||-1!==[\\\"tonextx\\\",\\\"tonexty\\\"].indexOf(y.fill))&&(v=l.isGrouped({traceorder:v})?\\\"grouped+reversed\\\":\\\"reversed\\\"),void 0!==y.legendgroup&&\\\"\\\"!==y.legendgroup&&(v=l.isReversed({traceorder:v})?\\\"reversed+grouped\\\":\\\"grouped\\\"))}var x=i.coerce(t,e,s,\\\"showlegend\\\",g&&d>1);if(!1!==x||p.uirevision){var b=a.newContainer(e,\\\"legend\\\");if(w(\\\"uirevision\\\",e.uirevision),!1!==x){if(w(\\\"bgcolor\\\",e.paper_bgcolor),w(\\\"bordercolor\\\"),w(\\\"borderwidth\\\"),i.coerceFont(w,\\\"font\\\",e.font),w(\\\"orientation\\\"),\\\"h\\\"===b.orientation){var _=t.xaxis;n.getComponentMethod(\\\"rangeslider\\\",\\\"isVisible\\\")(_)?(c=0,h=\\\"left\\\",u=1.1,f=\\\"bottom\\\"):(c=0,h=\\\"left\\\",u=-.1,f=\\\"top\\\")}w(\\\"traceorder\\\",v),l.isGrouped(e.legend)&&w(\\\"tracegroupgap\\\"),w(\\\"itemsizing\\\"),w(\\\"itemclick\\\"),w(\\\"itemdoubleclick\\\"),w(\\\"x\\\",c),w(\\\"xanchor\\\",h),w(\\\"y\\\",u),w(\\\"yanchor\\\",f),w(\\\"valign\\\"),i.noneOrAll(p,b,[\\\"x\\\",\\\"y\\\"])}}function w(t,e){return i.coerce(p,b,o,t,e)}}},{\\\"../../lib\\\":719,\\\"../../plot_api/plot_template\\\":757,\\\"../../plots/layout_attributes\\\":819,\\\"../../registry\\\":847,\\\"./attributes\\\":642,\\\"./helpers\\\":648}],645:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../plots/plots\\\"),o=t(\\\"../../registry\\\"),s=t(\\\"../../lib/events\\\"),l=t(\\\"../dragelement\\\"),c=t(\\\"../drawing\\\"),u=t(\\\"../color\\\"),h=t(\\\"../../lib/svg_text_utils\\\"),f=t(\\\"./handle_click\\\"),p=t(\\\"./constants\\\"),d=t(\\\"../../constants/alignment\\\"),g=d.LINE_SPACING,v=d.FROM_TL,m=d.FROM_BR,y=t(\\\"./get_legend_data\\\"),x=t(\\\"./style\\\"),b=t(\\\"./helpers\\\");function _(t,e,r,n,i){var a=r.data()[0][0].trace,l={event:i,node:r.node(),curveNumber:a.index,expandedIndex:a._expandedIndex,data:t.data,layout:t.layout,frames:t._transitionData._frames,config:t._context,fullData:t._fullData,fullLayout:t._fullLayout};if(a._group&&(l.group=a._group),o.traceIs(a,\\\"pie-like\\\")&&(l.label=r.datum()[0].label),!1!==s.triggerHandler(t,\\\"plotly_legendclick\\\",l))if(1===n)e._clickTimeout=setTimeout(function(){f(r,t,n)},t._context.doubleClickDelay);else if(2===n){e._clickTimeout&&clearTimeout(e._clickTimeout),t._legendMouseDownTime=0,!1!==s.triggerHandler(t,\\\"plotly_legenddoubleclick\\\",l)&&f(r,t,n)}}function w(t,e,r){var n=t.data()[0][0],a=e._fullLayout,s=n.trace,l=o.traceIs(s,\\\"pie-like\\\"),u=s.index,f=e._context.edits.legendText&&!l,d=l?n.label:s.name;s._meta&&(d=i.templateString(d,s._meta));var v=i.ensureSingle(t,\\\"text\\\",\\\"legendtext\\\");function m(r){h.convertToTspans(r,e,function(){!function(t,e){var r=t.data()[0][0];if(!r.trace.showlegend)return void t.remove();var n,i,a=t.select(\\\"g[class*=math-group]\\\"),o=a.node(),s=e._fullLayout.legend.font.size*g;if(o){var l=c.bBox(o);n=l.height,i=l.width,c.setTranslate(a,0,n/4)}else{var u=t.select(\\\".legendtext\\\"),f=h.lineCount(u),d=u.node();n=s*f,i=d?c.bBox(d).width:0;var v=s*(.3+(1-f)/2);h.positionText(u,p.textOffsetX,v)}r.lineHeight=s,r.height=Math.max(n,16)+3,r.width=i}(t,e)})}v.attr(\\\"text-anchor\\\",\\\"start\\\").classed(\\\"user-select-none\\\",!0).call(c.font,a.legend.font).text(f?k(d,r):d),h.positionText(v,p.textOffsetX,0),f?v.call(h.makeEditable,{gd:e,text:d}).call(m).on(\\\"edit\\\",function(t){this.text(k(t,r)).call(m);var a=n.trace._fullInput||{},s={};if(o.hasTransform(a,\\\"groupby\\\")){var l=o.getTransformIndices(a,\\\"groupby\\\"),c=l[l.length-1],h=i.keyedContainer(a,\\\"transforms[\\\"+c+\\\"].styles\\\",\\\"target\\\",\\\"value.name\\\");h.set(n.trace._group,t),s=h.constructUpdate()}else s.name=t;return o.call(\\\"_guiRestyle\\\",e,s,u)}):m(v)}function k(t,e){var r=Math.max(4,e);if(t&&t.trim().length>=r/2)return t;for(var n=r-(t=t||\\\"\\\").length;n>0;n--)t+=\\\" \\\";return t}function T(t,e){var r,a=e._context.doubleClickDelay,o=1,s=i.ensureSingle(t,\\\"rect\\\",\\\"legendtoggle\\\",function(t){t.style(\\\"cursor\\\",\\\"pointer\\\").attr(\\\"pointer-events\\\",\\\"all\\\").call(u.fill,\\\"rgba(0,0,0,0)\\\")});s.on(\\\"mousedown\\\",function(){(r=(new Date).getTime())-e._legendMouseDownTime<a?o+=1:(o=1,e._legendMouseDownTime=r)}),s.on(\\\"mouseup\\\",function(){if(!e._dragged&&!e._editing){var r=e._fullLayout.legend;(new Date).getTime()-e._legendMouseDownTime>a&&(o=Math.max(o-1,1)),_(e,r,t,o,n.event)}})}function A(t,e,r){var a=t._fullLayout,o=a.legend,s=o.borderwidth,l=b.isGrouped(o),u=0;if(o._width=0,o._height=0,b.isVertical(o))l&&e.each(function(t,e){c.setTranslate(this,0,e*o.tracegroupgap)}),r.each(function(t){var e=t[0],r=e.height,n=e.width;c.setTranslate(this,s,5+s+o._height+r/2),o._height+=r,o._width=Math.max(o._width,n)}),o._width+=45+2*s,o._height+=10+2*s,l&&(o._height+=(o._lgroupsLength-1)*o.tracegroupgap),u=40;else if(l){var h,f=0,p=0,d=e.data(),g=0;for(h=0;h<d.length;h++){var v=d[h],m=v.map(function(t){return t[0].width}),y=i.aggNums(Math.max,null,m),x=v.reduce(function(t,e){return t+e[0].height},0);p=Math.max(p,y),f=Math.max(f,x),g=Math.max(g,v.length)}p+=5,p+=40;var _=[o._width],w=[],k=0;for(h=0;h<d.length;h++){a._size.w<s+o._width+5+p?(_[_.length-1]=_[0],o._width=p,k++):o._width+=p+s;var T=k*f;T+=k>0?o.tracegroupgap:0,w.push(T),_.push(o._width)}e.each(function(t,e){c.setTranslate(this,_[e],w[e])}),e.each(function(){var t=n.select(this).selectAll(\\\"g.traces\\\"),e=0;t.each(function(t){var r=t[0].height;c.setTranslate(this,0,5+s+e+r/2),e+=r})});var A=w[w.length-1]+f;o._height=10+2*s+A;var M=Math.max.apply(null,_);o._width=M+p+40,o._width+=2*s}else{var S=0,E=0,C=0,L=0,P=0;r.each(function(t){C=Math.max(40+t[0].width,C),P+=40+t[0].width+5});var O=a._size.w>s+P-5;r.each(function(t){var e=t[0],r=O?40+t[0].width:C;s+L+5+r>a._size.w&&(L=0,S+=E,o._height+=E,E=0),c.setTranslate(this,s+L,5+s+e.height/2+S),o._width+=5+r,L+=5+r,E=Math.max(e.height,E)}),O?o._height=E:o._height+=E,o._width+=2*s,o._height+=10+2*s}o._width=Math.ceil(o._width),o._height=Math.ceil(o._height);var z=t._context.edits.legendText||t._context.edits.legendPosition;r.each(function(t){var e=t[0],r=n.select(this).select(\\\".legendtoggle\\\");c.setRect(r,0,-e.height/2,(z?0:o._width)+u,e.height)})}function M(t){var e=t._fullLayout.legend,r=\\\"left\\\";i.isRightAnchor(e)?r=\\\"right\\\":i.isCenterAnchor(e)&&(r=\\\"center\\\");var n=\\\"top\\\";i.isBottomAnchor(e)?n=\\\"bottom\\\":i.isMiddleAnchor(e)&&(n=\\\"middle\\\"),a.autoMargin(t,\\\"legend\\\",{x:e.x,y:e.y,l:e._width*v[r],r:e._width*m[r],b:e._height*m[n],t:e._height*v[n]})}e.exports=function(t){var e=t._fullLayout,r=\\\"legend\\\"+e._uid;if(e._infolayer&&t.calcdata){t._legendMouseDownTime||(t._legendMouseDownTime=0);var s=e.legend,h=e.showlegend&&y(t.calcdata,s),f=e.hiddenlabels||[];if(!e.showlegend||!h.length)return e._infolayer.selectAll(\\\".legend\\\").remove(),e._topdefs.select(\\\"#\\\"+r).remove(),void a.autoMargin(t,\\\"legend\\\");for(var d=0,g=0;g<h.length;g++)for(var b=0;b<h[g].length;b++){var k=h[g][b][0],S=k.trace,E=o.traceIs(S,\\\"pie-like\\\")?k.label:S.name;d=Math.max(d,E&&E.length||0)}var C=!1,L=i.ensureSingle(e._infolayer,\\\"g\\\",\\\"legend\\\",function(t){t.attr(\\\"pointer-events\\\",\\\"all\\\"),C=!0}),P=i.ensureSingleById(e._topdefs,\\\"clipPath\\\",r,function(t){t.append(\\\"rect\\\")}),O=i.ensureSingle(L,\\\"rect\\\",\\\"bg\\\",function(t){t.attr(\\\"shape-rendering\\\",\\\"crispEdges\\\")});O.call(u.stroke,s.bordercolor).call(u.fill,s.bgcolor).style(\\\"stroke-width\\\",s.borderwidth+\\\"px\\\");var z=i.ensureSingle(L,\\\"g\\\",\\\"scrollbox\\\"),I=i.ensureSingle(L,\\\"rect\\\",\\\"scrollbar\\\",function(t){t.attr({rx:20,ry:3,width:0,height:0}).call(u.fill,\\\"#808BA4\\\")}),D=z.selectAll(\\\"g.groups\\\").data(h);D.enter().append(\\\"g\\\").attr(\\\"class\\\",\\\"groups\\\"),D.exit().remove();var R=D.selectAll(\\\"g.traces\\\").data(i.identity);R.enter().append(\\\"g\\\").attr(\\\"class\\\",\\\"traces\\\"),R.exit().remove(),R.style(\\\"opacity\\\",function(t){var e=t[0].trace;return o.traceIs(e,\\\"pie-like\\\")?-1!==f.indexOf(t[0].label)?.5:1:\\\"legendonly\\\"===e.visible?.5:1}).each(function(){n.select(this).call(w,t,d)}).call(x,t).each(function(){n.select(this).call(T,t)}),i.syncOrAsync([a.previousPromises,function(){C&&(A(t,D,R),M(t));var u=e.width,h=e.height;A(t,D,R),s._height>h?function(t){var e=t._fullLayout.legend,r=\\\"left\\\";i.isRightAnchor(e)?r=\\\"right\\\":i.isCenterAnchor(e)&&(r=\\\"center\\\");a.autoMargin(t,\\\"legend\\\",{x:e.x,y:.5,l:e._width*v[r],r:e._width*m[r],b:0,t:0})}(t):M(t);var f=e._size,d=f.l+f.w*s.x,g=f.t+f.h*(1-s.y);i.isRightAnchor(s)?d-=s._width:i.isCenterAnchor(s)&&(d-=s._width/2),i.isBottomAnchor(s)?g-=s._height:i.isMiddleAnchor(s)&&(g-=s._height/2);var y=s._width,x=f.w;y>x?(d=f.l,y=x):(d+y>u&&(d=u-y),d<0&&(d=0),y=Math.min(u-d,s._width));var b,w,k,T,S=s._height,E=f.h;if(S>E?(g=f.t,S=E):(g+S>h&&(g=h-S),g<0&&(g=0),S=Math.min(h-g,s._height)),c.setTranslate(L,d,g),I.on(\\\".drag\\\",null),L.on(\\\"wheel\\\",null),s._height<=S||t._context.staticPlot)O.attr({width:y-s.borderwidth,height:S-s.borderwidth,x:s.borderwidth/2,y:s.borderwidth/2}),c.setTranslate(z,0,0),P.select(\\\"rect\\\").attr({width:y-2*s.borderwidth,height:S-2*s.borderwidth,x:s.borderwidth,y:s.borderwidth}),c.setClipUrl(z,r,t),c.setRect(I,0,0,0,0),delete s._scrollY;else{var F,B,N=Math.max(p.scrollBarMinHeight,S*S/s._height),j=S-N-2*p.scrollBarMargin,U=s._height-S,V=j/U,q=Math.min(s._scrollY||0,U);O.attr({width:y-2*s.borderwidth+p.scrollBarWidth+p.scrollBarMargin,height:S-s.borderwidth,x:s.borderwidth/2,y:s.borderwidth/2}),P.select(\\\"rect\\\").attr({width:y-2*s.borderwidth+p.scrollBarWidth+p.scrollBarMargin,height:S-2*s.borderwidth,x:s.borderwidth,y:s.borderwidth+q}),c.setClipUrl(z,r,t),G(q,N,V),L.on(\\\"wheel\\\",function(){G(q=i.constrain(s._scrollY+n.event.deltaY/j*U,0,U),N,V),0!==q&&q!==U&&n.event.preventDefault()});var H=n.behavior.drag().on(\\\"dragstart\\\",function(){F=n.event.sourceEvent.clientY,B=q}).on(\\\"drag\\\",function(){var t=n.event.sourceEvent;2===t.buttons||t.ctrlKey||G(q=i.constrain((t.clientY-F)/V+B,0,U),N,V)});I.call(H)}function G(e,r,n){s._scrollY=t._fullLayout.legend._scrollY=e,c.setTranslate(z,0,-e),c.setRect(I,y,p.scrollBarMargin+e*n,p.scrollBarWidth,r),P.select(\\\"rect\\\").attr({y:s.borderwidth+e})}t._context.edits.legendPosition&&(L.classed(\\\"cursor-move\\\",!0),l.init({element:L.node(),gd:t,prepFn:function(){var t=c.getTranslate(L);k=t.x,T=t.y},moveFn:function(t,e){var r=k+t,n=T+e;c.setTranslate(L,r,n),b=l.align(r,0,f.l,f.l+f.w,s.xanchor),w=l.align(n,0,f.t+f.h,f.t,s.yanchor)},doneFn:function(){void 0!==b&&void 0!==w&&o.call(\\\"_guiRelayout\\\",t,{\\\"legend.x\\\":b,\\\"legend.y\\\":w})},clickFn:function(r,n){var i=e._infolayer.selectAll(\\\"g.traces\\\").filter(function(){var t=this.getBoundingClientRect();return n.clientX>=t.left&&n.clientX<=t.right&&n.clientY>=t.top&&n.clientY<=t.bottom});i.size()>0&&_(t,L,i,r,n)}}))}],t)}}},{\\\"../../constants/alignment\\\":688,\\\"../../lib\\\":719,\\\"../../lib/events\\\":709,\\\"../../lib/svg_text_utils\\\":743,\\\"../../plots/plots\\\":828,\\\"../../registry\\\":847,\\\"../color\\\":593,\\\"../dragelement\\\":611,\\\"../drawing\\\":614,\\\"./constants\\\":643,\\\"./get_legend_data\\\":646,\\\"./handle_click\\\":647,\\\"./helpers\\\":648,\\\"./style\\\":650,d3:163}],646:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"./helpers\\\");e.exports=function(t,e){var r,a,o={},s=[],l=!1,c={},u=0;function h(t,r){if(\\\"\\\"!==t&&i.isGrouped(e))-1===s.indexOf(t)?(s.push(t),l=!0,o[t]=[[r]]):o[t].push([r]);else{var n=\\\"~~i\\\"+u;s.push(n),o[n]=[[r]],u++}}for(r=0;r<t.length;r++){var f=t[r],p=f[0],d=p.trace,g=d.legendgroup;if(d.visible&&d.showlegend)if(n.traceIs(d,\\\"pie-like\\\"))for(c[g]||(c[g]={}),a=0;a<f.length;a++){var v=f[a].label;c[g][v]||(h(g,{label:v,color:f[a].color,i:f[a].i,trace:d,pts:f[a].pts}),c[g][v]=!0)}else h(g,p)}if(!s.length)return[];var m,y,x=s.length;if(l&&i.isGrouped(e))for(y=new Array(x),r=0;r<x;r++)m=o[s[r]],y[r]=i.isReversed(e)?m.reverse():m;else{for(y=[new Array(x)],r=0;r<x;r++)m=o[s[r]][0],y[0][i.isReversed(e)?x-r-1:r]=m;x=1}return e._lgroupsLength=x,y}},{\\\"../../registry\\\":847,\\\"./helpers\\\":648}],647:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../registry\\\"),a=!0;e.exports=function(t,e,r){var o=e._fullLayout;if(!e._dragged&&!e._editing){var s,l=o.legend.itemclick,c=o.legend.itemdoubleclick;if(1===r&&\\\"toggle\\\"===l&&\\\"toggleothers\\\"===c&&a&&e.data&&e._context.showTips?(n.notifier(n._(e,\\\"Double-click on legend to isolate one trace\\\"),\\\"long\\\"),a=!1):a=!1,1===r?s=l:2===r&&(s=c),s){var u,h,f,p,d,g=o.hiddenlabels?o.hiddenlabels.slice():[],v=t.data()[0][0],m=e._fullData,y=v.trace,x=y.legendgroup,b={},_=[],w=[],k=[];if(i.traceIs(y,\\\"pie-like\\\")){var T=v.label,A=g.indexOf(T);\\\"toggle\\\"===s?-1===A?g.push(T):g.splice(A,1):\\\"toggleothers\\\"===s&&(g=[],e.calcdata[0].forEach(function(t){T!==t.label&&g.push(t.label)}),e._fullLayout.hiddenlabels&&e._fullLayout.hiddenlabels.length===g.length&&-1===A&&(g=[])),i.call(\\\"_guiRelayout\\\",e,\\\"hiddenlabels\\\",g)}else{var M,S=x&&x.length,E=[];if(S)for(u=0;u<m.length;u++)(M=m[u]).visible&&M.legendgroup===x&&E.push(u);if(\\\"toggle\\\"===s){var C;switch(y.visible){case!0:C=\\\"legendonly\\\";break;case!1:C=!1;break;case\\\"legendonly\\\":C=!0}if(S)for(u=0;u<m.length;u++)!1!==m[u].visible&&m[u].legendgroup===x&&R(m[u],C);else R(y,C)}else if(\\\"toggleothers\\\"===s){var L,P,O=!0;for(u=0;u<m.length;u++)if(!(m[u]===y)&&!(L=S&&m[u].legendgroup===x)&&!0===m[u].visible&&!i.traceIs(m[u],\\\"notLegendIsolatable\\\")){O=!1;break}for(u=0;u<m.length;u++)if(!1!==m[u].visible&&!i.traceIs(m[u],\\\"notLegendIsolatable\\\"))switch(y.visible){case\\\"legendonly\\\":R(m[u],!0);break;case!0:P=!!O||\\\"legendonly\\\",L=m[u]===y||S&&m[u].legendgroup===x,R(m[u],!!L||P)}}for(u=0;u<w.length;u++)if(f=w[u]){var z=f.constructUpdate(),I=Object.keys(z);for(h=0;h<I.length;h++)p=I[h],(b[p]=b[p]||[])[k[u]]=z[p]}for(d=Object.keys(b),u=0;u<d.length;u++)for(p=d[u],h=0;h<_.length;h++)b[p].hasOwnProperty(h)||(b[p][h]=void 0);i.call(\\\"_guiRestyle\\\",e,b,_)}}}function D(t,e,r){var n=_.indexOf(t),i=b[e];return i||(i=b[e]=[]),-1===_.indexOf(t)&&(_.push(t),n=_.length-1),i[n]=r,n}function R(t,e){var r=t._fullInput;if(i.hasTransform(r,\\\"groupby\\\")){var a=w[r.index];if(!a){var o=i.getTransformIndices(r,\\\"groupby\\\"),s=o[o.length-1];a=n.keyedContainer(r,\\\"transforms[\\\"+s+\\\"].styles\\\",\\\"target\\\",\\\"value.visible\\\"),w[r.index]=a}var l=a.get(t._group);void 0===l&&(l=!0),!1!==l&&a.set(t._group,e),k[r.index]=D(r.index,\\\"visible\\\",!1!==r.visible)}else{var c=!1!==r.visible&&e;D(r.index,\\\"visible\\\",c)}}}},{\\\"../../lib\\\":719,\\\"../../registry\\\":847}],648:[function(t,e,r){\\\"use strict\\\";r.isGrouped=function(t){return-1!==(t.traceorder||\\\"\\\").indexOf(\\\"grouped\\\")},r.isVertical=function(t){return\\\"h\\\"!==t.orientation},r.isReversed=function(t){return-1!==(t.traceorder||\\\"\\\").indexOf(\\\"reversed\\\")}},{}],649:[function(t,e,r){\\\"use strict\\\";e.exports={moduleType:\\\"component\\\",name:\\\"legend\\\",layoutAttributes:t(\\\"./attributes\\\"),supplyLayoutDefaults:t(\\\"./defaults\\\"),draw:t(\\\"./draw\\\"),style:t(\\\"./style\\\")}},{\\\"./attributes\\\":642,\\\"./defaults\\\":644,\\\"./draw\\\":645,\\\"./style\\\":650}],650:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../registry\\\"),a=t(\\\"../../lib\\\"),o=t(\\\"../drawing\\\"),s=t(\\\"../color\\\"),l=t(\\\"../../traces/scatter/subtypes\\\"),c=t(\\\"../../traces/pie/style_one\\\"),u=t(\\\"../../traces/pie/helpers\\\").castOption,h=12,f=5,p=2,d=10,g=5;e.exports=function(t,e){var r=e._fullLayout.legend,v=\\\"constant\\\"===r.itemsizing;function m(t,e,r,n){var i;if(t+1)i=t;else{if(!(e&&e.width>0))return 0;i=e.width}return v?n:Math.min(i,r)}function y(t,e,r){var a=t[0].trace,o=a.marker||{},l=o.line||{},c=r?a.type===r&&a.visible:i.traceIs(a,\\\"bar\\\"),u=n.select(e).select(\\\"g.legendpoints\\\").selectAll(\\\"path.legend\\\"+r).data(c?[t]:[]);u.enter().append(\\\"path\\\").classed(\\\"legend\\\"+r,!0).attr(\\\"d\\\",\\\"M6,6H-6V-6H6Z\\\").attr(\\\"transform\\\",\\\"translate(20,0)\\\"),u.exit().remove(),u.each(function(t){var e=n.select(this),r=t[0],i=m(r.mlw,o.line,g,p);e.style(\\\"stroke-width\\\",i+\\\"px\\\").call(s.fill,r.mc||o.color),i&&s.stroke(e,r.mlc||l.color)})}function x(t,e,r){var o=t[0],s=o.trace,l=r?s.type===r&&s.visible:i.traceIs(s,r),h=n.select(e).select(\\\"g.legendpoints\\\").selectAll(\\\"path.legend\\\"+r).data(l?[t]:[]);if(h.enter().append(\\\"path\\\").classed(\\\"legend\\\"+r,!0).attr(\\\"d\\\",\\\"M6,6H-6V-6H6Z\\\").attr(\\\"transform\\\",\\\"translate(20,0)\\\"),h.exit().remove(),h.size()){var f=(s.marker||{}).line,d=m(u(f.width,o.pts),f,g,p),v=a.minExtend(s,{marker:{line:{width:d}}});v.marker.line.color=f.color;var y=a.minExtend(o,{trace:v});c(h,y,v)}}t.each(function(t){var e=n.select(this),i=a.ensureSingle(e,\\\"g\\\",\\\"layers\\\");i.style(\\\"opacity\\\",t[0].trace.opacity);var o=r.valign,s=t[0].lineHeight,l=t[0].height;if(\\\"middle\\\"!==o&&s&&l){var c={top:1,bottom:-1}[o]*(.5*(s-l+3));i.attr(\\\"transform\\\",\\\"translate(0,\\\"+c+\\\")\\\")}else i.attr(\\\"transform\\\",null);i.selectAll(\\\"g.legendfill\\\").data([t]).enter().append(\\\"g\\\").classed(\\\"legendfill\\\",!0),i.selectAll(\\\"g.legendlines\\\").data([t]).enter().append(\\\"g\\\").classed(\\\"legendlines\\\",!0);var u=i.selectAll(\\\"g.legendsymbols\\\").data([t]);u.enter().append(\\\"g\\\").classed(\\\"legendsymbols\\\",!0),u.selectAll(\\\"g.legendpoints\\\").data([t]).enter().append(\\\"g\\\").classed(\\\"legendpoints\\\",!0)}).each(function(t){var e=t[0].trace,r=[];\\\"waterfall\\\"===e.type&&e.visible&&(r=t[0].hasTotals?[[\\\"increasing\\\",\\\"M-6,-6V6H0Z\\\"],[\\\"totals\\\",\\\"M6,6H0L-6,-6H-0Z\\\"],[\\\"decreasing\\\",\\\"M6,6V-6H0Z\\\"]]:[[\\\"increasing\\\",\\\"M-6,-6V6H6Z\\\"],[\\\"decreasing\\\",\\\"M6,6V-6H-6Z\\\"]]);var i=n.select(this).select(\\\"g.legendpoints\\\").selectAll(\\\"path.legendwaterfall\\\").data(r);i.enter().append(\\\"path\\\").classed(\\\"legendwaterfall\\\",!0).attr(\\\"transform\\\",\\\"translate(20,0)\\\").style(\\\"stroke-miterlimit\\\",1),i.exit().remove(),i.each(function(t){var r=n.select(this),i=e[t[0]].marker,a=m(void 0,i.line,g,p);r.attr(\\\"d\\\",t[1]).style(\\\"stroke-width\\\",a+\\\"px\\\").call(s.fill,i.color),a&&r.call(s.stroke,i.line.color)})}).each(function(t){y(t,this,\\\"funnel\\\")}).each(function(t){y(t,this)}).each(function(t){var r=t[0].trace,l=n.select(this).select(\\\"g.legendpoints\\\").selectAll(\\\"path.legendbox\\\").data(i.traceIs(r,\\\"box-violin\\\")&&r.visible?[t]:[]);l.enter().append(\\\"path\\\").classed(\\\"legendbox\\\",!0).attr(\\\"d\\\",\\\"M6,6H-6V-6H6Z\\\").attr(\\\"transform\\\",\\\"translate(20,0)\\\"),l.exit().remove(),l.each(function(){var t=n.select(this);if(\\\"all\\\"!==r.boxpoints&&\\\"all\\\"!==r.points||0!==s.opacity(r.fillcolor)||0!==s.opacity((r.line||{}).color)){var i=m(void 0,r.line,g,p);t.style(\\\"stroke-width\\\",i+\\\"px\\\").call(s.fill,r.fillcolor),i&&s.stroke(t,r.line.color)}else{var c=a.minExtend(r,{marker:{size:v?h:a.constrain(r.marker.size,2,16),sizeref:1,sizemin:1,sizemode:\\\"diameter\\\"}});l.call(o.pointStyle,c,e)}})}).each(function(t){x(t,this,\\\"funnelarea\\\")}).each(function(t){x(t,this,\\\"pie\\\")}).each(function(t){var r,i,s=t[0],c=s.trace,u=c.visible&&c.fill&&\\\"none\\\"!==c.fill,h=l.hasLines(c),p=c.contours,g=!1,v=!1;if(p){var y=p.coloring;\\\"lines\\\"===y?g=!0:h=\\\"none\\\"===y||\\\"heatmap\\\"===y||p.showlines,\\\"constraint\\\"===p.type?u=\\\"=\\\"!==p._operation:\\\"fill\\\"!==y&&\\\"heatmap\\\"!==y||(v=!0)}var x=l.hasMarkers(c)||l.hasText(c),b=u||v,_=h||g,w=x||!b?\\\"M5,0\\\":_?\\\"M5,-2\\\":\\\"M5,-3\\\",k=n.select(this),T=k.select(\\\".legendfill\\\").selectAll(\\\"path\\\").data(u||v?[t]:[]);if(T.enter().append(\\\"path\\\").classed(\\\"js-fill\\\",!0),T.exit().remove(),T.attr(\\\"d\\\",w+\\\"h30v6h-30z\\\").call(u?o.fillGroupStyle:function(t){if(t.size()){var r=\\\"legendfill-\\\"+c.uid;o.gradient(t,e,r,\\\"horizontalreversed\\\",c.colorscale,\\\"fill\\\")}}),h||g){var A=m(void 0,c.line,d,f);i=a.minExtend(c,{line:{width:A}}),r=[a.minExtend(s,{trace:i})]}var M=k.select(\\\".legendlines\\\").selectAll(\\\"path\\\").data(h||g?[r]:[]);M.enter().append(\\\"path\\\").classed(\\\"js-line\\\",!0),M.exit().remove(),M.attr(\\\"d\\\",w+(g?\\\"l30,0.0001\\\":\\\"h30\\\")).call(h?o.lineGroupStyle:function(t){if(t.size()){var r=\\\"legendline-\\\"+c.uid;o.lineGroupStyle(t),o.gradient(t,e,r,\\\"horizontalreversed\\\",c.colorscale,\\\"stroke\\\")}})}).each(function(t){var r,i,s=t[0],c=s.trace,u=l.hasMarkers(c),d=l.hasText(c),g=l.hasLines(c);function m(t,e,r,n){var i=a.nestedProperty(c,t).get(),o=a.isArrayOrTypedArray(i)&&e?e(i):i;if(v&&o&&void 0!==n&&(o=n),r){if(o<r[0])return r[0];if(o>r[1])return r[1]}return o}function y(t){return t[0]}if(u||d||g){var x={},b={};if(u){x.mc=m(\\\"marker.color\\\",y),x.mx=m(\\\"marker.symbol\\\",y),x.mo=m(\\\"marker.opacity\\\",a.mean,[.2,1]),x.mlc=m(\\\"marker.line.color\\\",y),x.mlw=m(\\\"marker.line.width\\\",a.mean,[0,5],p),b.marker={sizeref:1,sizemin:1,sizemode:\\\"diameter\\\"};var _=m(\\\"marker.size\\\",a.mean,[2,16],h);x.ms=_,b.marker.size=_}g&&(b.line={width:m(\\\"line.width\\\",y,[0,10],f)}),d&&(x.tx=\\\"Aa\\\",x.tp=m(\\\"textposition\\\",y),x.ts=10,x.tc=m(\\\"textfont.color\\\",y),x.tf=m(\\\"textfont.family\\\",y)),r=[a.minExtend(s,x)],(i=a.minExtend(c,b)).selectedpoints=null}var w=n.select(this).select(\\\"g.legendpoints\\\"),k=w.selectAll(\\\"path.scatterpts\\\").data(u?r:[]);k.enter().insert(\\\"path\\\",\\\":first-child\\\").classed(\\\"scatterpts\\\",!0).attr(\\\"transform\\\",\\\"translate(20,0)\\\"),k.exit().remove(),k.call(o.pointStyle,i,e),u&&(r[0].mrc=3);var T=w.selectAll(\\\"g.pointtext\\\").data(d?r:[]);T.enter().append(\\\"g\\\").classed(\\\"pointtext\\\",!0).append(\\\"text\\\").attr(\\\"transform\\\",\\\"translate(20,0)\\\"),T.exit().remove(),T.selectAll(\\\"text\\\").call(o.textPointStyle,i,e)}).each(function(t){var e=t[0].trace,r=n.select(this).select(\\\"g.legendpoints\\\").selectAll(\\\"path.legendcandle\\\").data(\\\"candlestick\\\"===e.type&&e.visible?[t,t]:[]);r.enter().append(\\\"path\\\").classed(\\\"legendcandle\\\",!0).attr(\\\"d\\\",function(t,e){return e?\\\"M-15,0H-8M-8,6V-6H8Z\\\":\\\"M15,0H8M8,-6V6H-8Z\\\"}).attr(\\\"transform\\\",\\\"translate(20,0)\\\").style(\\\"stroke-miterlimit\\\",1),r.exit().remove(),r.each(function(t,r){var i=n.select(this),a=e[r?\\\"increasing\\\":\\\"decreasing\\\"],o=m(void 0,a.line,g,p);i.style(\\\"stroke-width\\\",o+\\\"px\\\").call(s.fill,a.fillcolor),o&&s.stroke(i,a.line.color)})}).each(function(t){var e=t[0].trace,r=n.select(this).select(\\\"g.legendpoints\\\").selectAll(\\\"path.legendohlc\\\").data(\\\"ohlc\\\"===e.type&&e.visible?[t,t]:[]);r.enter().append(\\\"path\\\").classed(\\\"legendohlc\\\",!0).attr(\\\"d\\\",function(t,e){return e?\\\"M-15,0H0M-8,-6V0\\\":\\\"M15,0H0M8,6V0\\\"}).attr(\\\"transform\\\",\\\"translate(20,0)\\\").style(\\\"stroke-miterlimit\\\",1),r.exit().remove(),r.each(function(t,r){var i=n.select(this),a=e[r?\\\"increasing\\\":\\\"decreasing\\\"],l=m(void 0,a.line,g,p);i.style(\\\"fill\\\",\\\"none\\\").call(o.dashLine,a.line.dash,l),l&&s.stroke(i,a.line.color)})})}},{\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"../../traces/pie/helpers\\\":1091,\\\"../../traces/pie/style_one\\\":1097,\\\"../../traces/scatter/subtypes\\\":1135,\\\"../color\\\":593,\\\"../drawing\\\":614,d3:163}],651:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../plots/plots\\\"),a=t(\\\"../../plots/cartesian/axis_ids\\\"),o=t(\\\"../../lib\\\"),s=t(\\\"../../fonts/ploticon\\\"),l=o._,c=e.exports={};function u(t,e){var r,i,o=e.currentTarget,s=o.getAttribute(\\\"data-attr\\\"),l=o.getAttribute(\\\"data-val\\\")||!0,c=t._fullLayout,u={},h=a.list(t,null,!0),f=\\\"on\\\";if(\\\"zoom\\\"===s){var p,d=\\\"in\\\"===l?.5:2,g=(1+d)/2,v=(1-d)/2;for(i=0;i<h.length;i++)if(!(r=h[i]).fixedrange)if(p=r._name,\\\"auto\\\"===l)u[p+\\\".autorange\\\"]=!0;else if(\\\"reset\\\"===l){if(void 0===r._rangeInitial)u[p+\\\".autorange\\\"]=!0;else{var m=r._rangeInitial.slice();u[p+\\\".range[0]\\\"]=m[0],u[p+\\\".range[1]\\\"]=m[1]}void 0!==r._showSpikeInitial&&(u[p+\\\".showspikes\\\"]=r._showSpikeInitial,\\\"on\\\"!==f||r._showSpikeInitial||(f=\\\"off\\\"))}else{var y=[r.r2l(r.range[0]),r.r2l(r.range[1])],x=[g*y[0]+v*y[1],g*y[1]+v*y[0]];u[p+\\\".range[0]\\\"]=r.l2r(x[0]),u[p+\\\".range[1]\\\"]=r.l2r(x[1])}c._cartesianSpikesEnabled=f}else{if(\\\"hovermode\\\"!==s||\\\"x\\\"!==l&&\\\"y\\\"!==l){if(\\\"hovermode\\\"===s&&\\\"closest\\\"===l){for(i=0;i<h.length;i++)r=h[i],\\\"on\\\"!==f||r.showspikes||(f=\\\"off\\\");c._cartesianSpikesEnabled=f}}else l=c._isHoriz?\\\"y\\\":\\\"x\\\",o.setAttribute(\\\"data-val\\\",l);u[s]=l}n.call(\\\"_guiRelayout\\\",t,u)}function h(t,e){for(var r=e.currentTarget,i=r.getAttribute(\\\"data-attr\\\"),a=r.getAttribute(\\\"data-val\\\")||!0,o=t._fullLayout._subplots.gl3d,s={},l=i.split(\\\".\\\"),c=0;c<o.length;c++)s[o[c]+\\\".\\\"+l[1]]=a;var u=\\\"pan\\\"===a?a:\\\"zoom\\\";s.dragmode=u,n.call(\\\"_guiRelayout\\\",t,s)}function f(t,e){for(var r=e.currentTarget.getAttribute(\\\"data-attr\\\"),i=t._fullLayout,a=i._subplots.gl3d,o={},s=0;s<a.length;s++){var l=a[s],c=l+\\\".camera\\\",u=i[l]._scene;\\\"resetLastSave\\\"===r?(o[c+\\\".up\\\"]=u.viewInitial.up,o[c+\\\".eye\\\"]=u.viewInitial.eye,o[c+\\\".center\\\"]=u.viewInitial.center):\\\"resetDefault\\\"===r&&(o[c+\\\".up\\\"]=null,o[c+\\\".eye\\\"]=null,o[c+\\\".center\\\"]=null)}n.call(\\\"_guiRelayout\\\",t,o)}function p(t,e){var r=e.currentTarget,n=r._previousVal,i=t._fullLayout,a=i._subplots.gl3d,o=[\\\"xaxis\\\",\\\"yaxis\\\",\\\"zaxis\\\"],s={},l={};if(n)l=n,r._previousVal=null;else{for(var c=0;c<a.length;c++){var u=a[c],h=i[u],f=u+\\\".hovermode\\\";s[f]=h.hovermode,l[f]=!1;for(var p=0;p<3;p++){var d=o[p],g=u+\\\".\\\"+d+\\\".showspikes\\\";l[g]=!1,s[g]=h[d].showspikes}}r._previousVal=s}return l}function d(t,e){for(var r=e.currentTarget,i=r.getAttribute(\\\"data-attr\\\"),a=r.getAttribute(\\\"data-val\\\")||!0,o=t._fullLayout,s=o._subplots.geo,l=0;l<s.length;l++){var c=s[l],u=o[c];if(\\\"zoom\\\"===i){var h=u.projection.scale,f=\\\"in\\\"===a?2*h:.5*h;n.call(\\\"_guiRelayout\\\",t,c+\\\".projection.scale\\\",f)}else\\\"reset\\\"===i&&m(t,\\\"geo\\\")}}function g(t){var e=t._fullLayout;return!e.hovermode&&(e._has(\\\"cartesian\\\")?e._isHoriz?\\\"y\\\":\\\"x\\\":\\\"closest\\\")}function v(t){var e=g(t);n.call(\\\"_guiRelayout\\\",t,\\\"hovermode\\\",e)}function m(t,e){for(var r=t._fullLayout,i=r._subplots[e],a={},o=0;o<i.length;o++)for(var s=i[o],l=r[s]._subplot.viewInitial,c=Object.keys(l),u=0;u<c.length;u++){var h=c[u];a[s+\\\".\\\"+h]=l[h]}n.call(\\\"_guiRelayout\\\",t,a)}c.toImage={name:\\\"toImage\\\",title:function(t){var e=(t._context.toImageButtonOptions||{}).format||\\\"png\\\";return l(t,\\\"png\\\"===e?\\\"Download plot as a png\\\":\\\"Download plot\\\")},icon:s.camera,click:function(t){var e=t._context.toImageButtonOptions,r={format:e.format||\\\"png\\\"};o.notifier(l(t,\\\"Taking snapshot - this may take a few seconds\\\"),\\\"long\\\"),\\\"svg\\\"!==r.format&&o.isIE()&&(o.notifier(l(t,\\\"IE only supports svg.  Changing format to svg.\\\"),\\\"long\\\"),r.format=\\\"svg\\\"),[\\\"filename\\\",\\\"width\\\",\\\"height\\\",\\\"scale\\\"].forEach(function(t){t in e&&(r[t]=e[t])}),n.call(\\\"downloadImage\\\",t,r).then(function(e){o.notifier(l(t,\\\"Snapshot succeeded\\\")+\\\" - \\\"+e,\\\"long\\\")}).catch(function(){o.notifier(l(t,\\\"Sorry, there was a problem downloading your snapshot!\\\"),\\\"long\\\")})}},c.sendDataToCloud={name:\\\"sendDataToCloud\\\",title:function(t){return l(t,\\\"Edit in Chart Studio\\\")},icon:s.disk,click:function(t){i.sendDataToCloud(t)}},c.editInChartStudio={name:\\\"editInChartStudio\\\",title:function(t){return l(t,\\\"Edit in Chart Studio\\\")},icon:s.pencil,click:function(t){i.sendDataToCloud(t)}},c.zoom2d={name:\\\"zoom2d\\\",title:function(t){return l(t,\\\"Zoom\\\")},attr:\\\"dragmode\\\",val:\\\"zoom\\\",icon:s.zoombox,click:u},c.pan2d={name:\\\"pan2d\\\",title:function(t){return l(t,\\\"Pan\\\")},attr:\\\"dragmode\\\",val:\\\"pan\\\",icon:s.pan,click:u},c.select2d={name:\\\"select2d\\\",title:function(t){return l(t,\\\"Box Select\\\")},attr:\\\"dragmode\\\",val:\\\"select\\\",icon:s.selectbox,click:u},c.lasso2d={name:\\\"lasso2d\\\",title:function(t){return l(t,\\\"Lasso Select\\\")},attr:\\\"dragmode\\\",val:\\\"lasso\\\",icon:s.lasso,click:u},c.zoomIn2d={name:\\\"zoomIn2d\\\",title:function(t){return l(t,\\\"Zoom in\\\")},attr:\\\"zoom\\\",val:\\\"in\\\",icon:s.zoom_plus,click:u},c.zoomOut2d={name:\\\"zoomOut2d\\\",title:function(t){return l(t,\\\"Zoom out\\\")},attr:\\\"zoom\\\",val:\\\"out\\\",icon:s.zoom_minus,click:u},c.autoScale2d={name:\\\"autoScale2d\\\",title:function(t){return l(t,\\\"Autoscale\\\")},attr:\\\"zoom\\\",val:\\\"auto\\\",icon:s.autoscale,click:u},c.resetScale2d={name:\\\"resetScale2d\\\",title:function(t){return l(t,\\\"Reset axes\\\")},attr:\\\"zoom\\\",val:\\\"reset\\\",icon:s.home,click:u},c.hoverClosestCartesian={name:\\\"hoverClosestCartesian\\\",title:function(t){return l(t,\\\"Show closest data on hover\\\")},attr:\\\"hovermode\\\",val:\\\"closest\\\",icon:s.tooltip_basic,gravity:\\\"ne\\\",click:u},c.hoverCompareCartesian={name:\\\"hoverCompareCartesian\\\",title:function(t){return l(t,\\\"Compare data on hover\\\")},attr:\\\"hovermode\\\",val:function(t){return t._fullLayout._isHoriz?\\\"y\\\":\\\"x\\\"},icon:s.tooltip_compare,gravity:\\\"ne\\\",click:u},c.zoom3d={name:\\\"zoom3d\\\",title:function(t){return l(t,\\\"Zoom\\\")},attr:\\\"scene.dragmode\\\",val:\\\"zoom\\\",icon:s.zoombox,click:h},c.pan3d={name:\\\"pan3d\\\",title:function(t){return l(t,\\\"Pan\\\")},attr:\\\"scene.dragmode\\\",val:\\\"pan\\\",icon:s.pan,click:h},c.orbitRotation={name:\\\"orbitRotation\\\",title:function(t){return l(t,\\\"Orbital rotation\\\")},attr:\\\"scene.dragmode\\\",val:\\\"orbit\\\",icon:s[\\\"3d_rotate\\\"],click:h},c.tableRotation={name:\\\"tableRotation\\\",title:function(t){return l(t,\\\"Turntable rotation\\\")},attr:\\\"scene.dragmode\\\",val:\\\"turntable\\\",icon:s[\\\"z-axis\\\"],click:h},c.resetCameraDefault3d={name:\\\"resetCameraDefault3d\\\",title:function(t){return l(t,\\\"Reset camera to default\\\")},attr:\\\"resetDefault\\\",icon:s.home,click:f},c.resetCameraLastSave3d={name:\\\"resetCameraLastSave3d\\\",title:function(t){return l(t,\\\"Reset camera to last save\\\")},attr:\\\"resetLastSave\\\",icon:s.movie,click:f},c.hoverClosest3d={name:\\\"hoverClosest3d\\\",title:function(t){return l(t,\\\"Toggle show closest data on hover\\\")},attr:\\\"hovermode\\\",val:null,toggle:!0,icon:s.tooltip_basic,gravity:\\\"ne\\\",click:function(t,e){var r=p(t,e);n.call(\\\"_guiRelayout\\\",t,r)}},c.zoomInGeo={name:\\\"zoomInGeo\\\",title:function(t){return l(t,\\\"Zoom in\\\")},attr:\\\"zoom\\\",val:\\\"in\\\",icon:s.zoom_plus,click:d},c.zoomOutGeo={name:\\\"zoomOutGeo\\\",title:function(t){return l(t,\\\"Zoom out\\\")},attr:\\\"zoom\\\",val:\\\"out\\\",icon:s.zoom_minus,click:d},c.resetGeo={name:\\\"resetGeo\\\",title:function(t){return l(t,\\\"Reset\\\")},attr:\\\"reset\\\",val:null,icon:s.autoscale,click:d},c.hoverClosestGeo={name:\\\"hoverClosestGeo\\\",title:function(t){return l(t,\\\"Toggle show closest data on hover\\\")},attr:\\\"hovermode\\\",val:null,toggle:!0,icon:s.tooltip_basic,gravity:\\\"ne\\\",click:v},c.hoverClosestGl2d={name:\\\"hoverClosestGl2d\\\",title:function(t){return l(t,\\\"Toggle show closest data on hover\\\")},attr:\\\"hovermode\\\",val:null,toggle:!0,icon:s.tooltip_basic,gravity:\\\"ne\\\",click:v},c.hoverClosestPie={name:\\\"hoverClosestPie\\\",title:function(t){return l(t,\\\"Toggle show closest data on hover\\\")},attr:\\\"hovermode\\\",val:\\\"closest\\\",icon:s.tooltip_basic,gravity:\\\"ne\\\",click:v},c.resetViewSankey={name:\\\"resetSankeyGroup\\\",title:function(t){return l(t,\\\"Reset view\\\")},icon:s.home,click:function(t){for(var e={\\\"node.groups\\\":[],\\\"node.x\\\":[],\\\"node.y\\\":[]},r=0;r<t._fullData.length;r++){var i=t._fullData[r]._viewInitial;e[\\\"node.groups\\\"].push(i.node.groups.slice()),e[\\\"node.x\\\"].push(i.node.x.slice()),e[\\\"node.y\\\"].push(i.node.y.slice())}n.call(\\\"restyle\\\",t,e)}},c.toggleHover={name:\\\"toggleHover\\\",title:function(t){return l(t,\\\"Toggle show closest data on hover\\\")},attr:\\\"hovermode\\\",val:null,toggle:!0,icon:s.tooltip_basic,gravity:\\\"ne\\\",click:function(t,e){var r=p(t,e);r.hovermode=g(t),n.call(\\\"_guiRelayout\\\",t,r)}},c.resetViews={name:\\\"resetViews\\\",title:function(t){return l(t,\\\"Reset views\\\")},icon:s.home,click:function(t,e){var r=e.currentTarget;r.setAttribute(\\\"data-attr\\\",\\\"zoom\\\"),r.setAttribute(\\\"data-val\\\",\\\"reset\\\"),u(t,e),r.setAttribute(\\\"data-attr\\\",\\\"resetLastSave\\\"),f(t,e),m(t,\\\"geo\\\"),m(t,\\\"mapbox\\\")}},c.toggleSpikelines={name:\\\"toggleSpikelines\\\",title:function(t){return l(t,\\\"Toggle Spike Lines\\\")},icon:s.spikeline,attr:\\\"_cartesianSpikesEnabled\\\",val:\\\"on\\\",click:function(t){var e=t._fullLayout;e._cartesianSpikesEnabled=\\\"on\\\"===e._cartesianSpikesEnabled?\\\"off\\\":\\\"on\\\";var r=function(t){for(var e,r,n=t._fullLayout,i=a.list(t,null,!0),o={},s=0;s<i.length;s++)e=i[s],r=e._name,o[r+\\\".showspikes\\\"]=\\\"on\\\"===n._cartesianSpikesEnabled||e._showSpikeInitial;return o}(t);n.call(\\\"_guiRelayout\\\",t,r)}},c.resetViewMapbox={name:\\\"resetViewMapbox\\\",title:function(t){return l(t,\\\"Reset view\\\")},attr:\\\"reset\\\",icon:s.home,click:function(t){m(t,\\\"mapbox\\\")}}},{\\\"../../fonts/ploticon\\\":699,\\\"../../lib\\\":719,\\\"../../plots/cartesian/axis_ids\\\":770,\\\"../../plots/plots\\\":828,\\\"../../registry\\\":847}],652:[function(t,e,r){\\\"use strict\\\";r.manage=t(\\\"./manage\\\")},{\\\"./manage\\\":653}],653:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/cartesian/axis_ids\\\"),i=t(\\\"../../traces/scatter/subtypes\\\"),a=t(\\\"../../registry\\\"),o=t(\\\"./modebar\\\"),s=t(\\\"./buttons\\\");e.exports=function(t){var e=t._fullLayout,r=t._context,l=e._modeBar;if(r.displayModeBar||r.watermark){if(!Array.isArray(r.modeBarButtonsToRemove))throw new Error([\\\"*modeBarButtonsToRemove* configuration options\\\",\\\"must be an array.\\\"].join(\\\" \\\"));if(!Array.isArray(r.modeBarButtonsToAdd))throw new Error([\\\"*modeBarButtonsToAdd* configuration options\\\",\\\"must be an array.\\\"].join(\\\" \\\"));var c,u=r.modeBarButtons;c=Array.isArray(u)&&u.length?function(t){for(var e=0;e<t.length;e++)for(var r=t[e],n=0;n<r.length;n++){var i=r[n];if(\\\"string\\\"==typeof i){if(void 0===s[i])throw new Error([\\\"*modeBarButtons* configuration options\\\",\\\"invalid button name\\\"].join(\\\" \\\"));t[e][n]=s[i]}}return t}(u):!r.displayModeBar&&r.watermark?[]:function(t){var e=t._fullLayout,r=t._fullData,o=t._context,l=o.modeBarButtonsToRemove,c=o.modeBarButtonsToAdd,u=e._has(\\\"cartesian\\\"),h=e._has(\\\"gl3d\\\"),f=e._has(\\\"geo\\\"),p=e._has(\\\"pie\\\"),d=e._has(\\\"funnelarea\\\"),g=e._has(\\\"gl2d\\\"),v=e._has(\\\"ternary\\\"),m=e._has(\\\"mapbox\\\"),y=e._has(\\\"polar\\\"),x=e._has(\\\"sankey\\\"),b=function(t){for(var e=n.list({_fullLayout:t},null,!0),r=0;r<e.length;r++)if(!e[r].fixedrange)return!1;return!0}(e),_=[];function w(t){if(t.length){for(var e=[],r=0;r<t.length;r++){var n=t[r];-1===l.indexOf(n)&&e.push(s[n])}_.push(e)}}var k=[\\\"toImage\\\"];o.showEditInChartStudio?k.push(\\\"editInChartStudio\\\"):o.showSendToCloud&&k.push(\\\"sendDataToCloud\\\");w(k);var T=[],A=[],M=[],S=[];(u||g||p||d||v)+f+h+m+y>1?(A=[\\\"toggleHover\\\"],M=[\\\"resetViews\\\"]):f?(T=[\\\"zoomInGeo\\\",\\\"zoomOutGeo\\\"],A=[\\\"hoverClosestGeo\\\"],M=[\\\"resetGeo\\\"]):h?(A=[\\\"hoverClosest3d\\\"],M=[\\\"resetCameraDefault3d\\\",\\\"resetCameraLastSave3d\\\"]):m?(A=[\\\"toggleHover\\\"],M=[\\\"resetViewMapbox\\\"]):g?A=[\\\"hoverClosestGl2d\\\"]:p?A=[\\\"hoverClosestPie\\\"]:x?(A=[\\\"hoverClosestCartesian\\\",\\\"hoverCompareCartesian\\\"],M=[\\\"resetViewSankey\\\"]):A=[\\\"toggleHover\\\"];u&&(A=[\\\"toggleSpikelines\\\",\\\"hoverClosestCartesian\\\",\\\"hoverCompareCartesian\\\"]);(function(t){for(var e=0;e<t.length;e++)if(!a.traceIs(t[e],\\\"noHover\\\"))return!1;return!0})(r)&&(A=[]);!u&&!g||b||(T=[\\\"zoomIn2d\\\",\\\"zoomOut2d\\\",\\\"autoScale2d\\\"],\\\"resetViews\\\"!==M[0]&&(M=[\\\"resetScale2d\\\"]));h?S=[\\\"zoom3d\\\",\\\"pan3d\\\",\\\"orbitRotation\\\",\\\"tableRotation\\\"]:(u||g)&&!b||v?S=[\\\"zoom2d\\\",\\\"pan2d\\\"]:m||f?S=[\\\"pan2d\\\"]:y&&(S=[\\\"zoom2d\\\"]);(function(t){for(var e=!1,r=0;r<t.length&&!e;r++){var n=t[r];n._module&&n._module.selectPoints&&(a.traceIs(n,\\\"scatter-like\\\")?(i.hasMarkers(n)||i.hasText(n))&&(e=!0):a.traceIs(n,\\\"box-violin\\\")&&\\\"all\\\"!==n.boxpoints&&\\\"all\\\"!==n.points||(e=!0))}return e})(r)&&S.push(\\\"select2d\\\",\\\"lasso2d\\\");return w(S),w(T.concat(M)),w(A),function(t,e){if(e.length)if(Array.isArray(e[0]))for(var r=0;r<e.length;r++)t.push(e[r]);else t.push(e);return t}(_,c)}(t),l?l.update(t,c):e._modeBar=o(t,c)}else l&&(l.destroy(),delete e._modeBar)}},{\\\"../../plots/cartesian/axis_ids\\\":770,\\\"../../registry\\\":847,\\\"../../traces/scatter/subtypes\\\":1135,\\\"./buttons\\\":651,\\\"./modebar\\\":654}],654:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"fast-isnumeric\\\"),a=t(\\\"../../lib\\\"),o=t(\\\"../../fonts/ploticon\\\"),s=new DOMParser;function l(t){this.container=t.container,this.element=document.createElement(\\\"div\\\"),this.update(t.graphInfo,t.buttons),this.container.appendChild(this.element)}var c=l.prototype;c.update=function(t,e){this.graphInfo=t;var r=this.graphInfo._context,n=this.graphInfo._fullLayout,i=\\\"modebar-\\\"+n._uid;this.element.setAttribute(\\\"id\\\",i),this._uid=i,this.element.className=\\\"modebar\\\",\\\"hover\\\"===r.displayModeBar&&(this.element.className+=\\\" modebar--hover ease-bg\\\"),\\\"v\\\"===n.modebar.orientation&&(this.element.className+=\\\" vertical\\\",e=e.reverse());var o=n.modebar,s=\\\"hover\\\"===r.displayModeBar?\\\".js-plotly-plot .plotly:hover \\\":\\\"\\\";a.deleteRelatedStyleRule(i),a.addRelatedStyleRule(i,s+\\\"#\\\"+i+\\\" .modebar-group\\\",\\\"background-color: \\\"+o.bgcolor),a.addRelatedStyleRule(i,\\\"#\\\"+i+\\\" .modebar-btn .icon path\\\",\\\"fill: \\\"+o.color),a.addRelatedStyleRule(i,\\\"#\\\"+i+\\\" .modebar-btn:hover .icon path\\\",\\\"fill: \\\"+o.activecolor),a.addRelatedStyleRule(i,\\\"#\\\"+i+\\\" .modebar-btn.active .icon path\\\",\\\"fill: \\\"+o.activecolor);var l=!this.hasButtons(e),c=this.hasLogo!==r.displaylogo,u=this.locale!==r.locale;if(this.locale=r.locale,(l||c||u)&&(this.removeAllButtons(),this.updateButtons(e),r.watermark||r.displaylogo)){var h=this.getLogo();r.watermark&&(h.className=h.className+\\\" watermark\\\"),\\\"v\\\"===n.modebar.orientation?this.element.insertBefore(h,this.element.childNodes[0]):this.element.appendChild(h),this.hasLogo=!0}this.updateActiveButton()},c.updateButtons=function(t){var e=this;this.buttons=t,this.buttonElements=[],this.buttonsNames=[],this.buttons.forEach(function(t){var r=e.createGroup();t.forEach(function(t){var n=t.name;if(!n)throw new Error(\\\"must provide button 'name' in button config\\\");if(-1!==e.buttonsNames.indexOf(n))throw new Error(\\\"button name '\\\"+n+\\\"' is taken\\\");e.buttonsNames.push(n);var i=e.createButton(t);e.buttonElements.push(i),r.appendChild(i)}),e.element.appendChild(r)})},c.createGroup=function(){var t=document.createElement(\\\"div\\\");return t.className=\\\"modebar-group\\\",t},c.createButton=function(t){var e=this,r=document.createElement(\\\"a\\\");r.setAttribute(\\\"rel\\\",\\\"tooltip\\\"),r.className=\\\"modebar-btn\\\";var i=t.title;void 0===i?i=t.name:\\\"function\\\"==typeof i&&(i=i(this.graphInfo)),(i||0===i)&&r.setAttribute(\\\"data-title\\\",i),void 0!==t.attr&&r.setAttribute(\\\"data-attr\\\",t.attr);var a=t.val;if(void 0!==a&&(\\\"function\\\"==typeof a&&(a=a(this.graphInfo)),r.setAttribute(\\\"data-val\\\",a)),\\\"function\\\"!=typeof t.click)throw new Error(\\\"must provide button 'click' function in button config\\\");r.addEventListener(\\\"click\\\",function(r){t.click(e.graphInfo,r),e.updateActiveButton(r.currentTarget)}),r.setAttribute(\\\"data-toggle\\\",t.toggle||!1),t.toggle&&n.select(r).classed(\\\"active\\\",!0);var s=t.icon;return\\\"function\\\"==typeof s?r.appendChild(s()):r.appendChild(this.createIcon(s||o.question)),r.setAttribute(\\\"data-gravity\\\",t.gravity||\\\"n\\\"),r},c.createIcon=function(t){var e,r=i(t.height)?Number(t.height):t.ascent-t.descent,n=\\\"http://www.w3.org/2000/svg\\\";if(t.path){(e=document.createElementNS(n,\\\"svg\\\")).setAttribute(\\\"viewBox\\\",[0,0,t.width,r].join(\\\" \\\")),e.setAttribute(\\\"class\\\",\\\"icon\\\");var a=document.createElementNS(n,\\\"path\\\");a.setAttribute(\\\"d\\\",t.path),t.transform?a.setAttribute(\\\"transform\\\",t.transform):void 0!==t.ascent&&a.setAttribute(\\\"transform\\\",\\\"matrix(1 0 0 -1 0 \\\"+t.ascent+\\\")\\\"),e.appendChild(a)}t.svg&&(e=s.parseFromString(t.svg,\\\"application/xml\\\").childNodes[0]);return e.setAttribute(\\\"height\\\",\\\"1em\\\"),e.setAttribute(\\\"width\\\",\\\"1em\\\"),e},c.updateActiveButton=function(t){var e=this.graphInfo._fullLayout,r=void 0!==t?t.getAttribute(\\\"data-attr\\\"):null;this.buttonElements.forEach(function(t){var i=t.getAttribute(\\\"data-val\\\")||!0,o=t.getAttribute(\\\"data-attr\\\"),s=\\\"true\\\"===t.getAttribute(\\\"data-toggle\\\"),l=n.select(t);if(s)o===r&&l.classed(\\\"active\\\",!l.classed(\\\"active\\\"));else{var c=null===o?o:a.nestedProperty(e,o).get();l.classed(\\\"active\\\",c===i)}})},c.hasButtons=function(t){var e=this.buttons;if(!e)return!1;if(t.length!==e.length)return!1;for(var r=0;r<t.length;++r){if(t[r].length!==e[r].length)return!1;for(var n=0;n<t[r].length;n++)if(t[r][n].name!==e[r][n].name)return!1}return!0},c.getLogo=function(){var t=this.createGroup(),e=document.createElement(\\\"a\\\");return e.href=\\\"https://plot.ly/\\\",e.target=\\\"_blank\\\",e.setAttribute(\\\"data-title\\\",a._(this.graphInfo,\\\"Produced with Plotly\\\")),e.className=\\\"modebar-btn plotlyjsicon modebar-btn--logo\\\",e.appendChild(this.createIcon(o.newplotlylogo)),t.appendChild(e),t},c.removeAllButtons=function(){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.hasLogo=!1},c.destroy=function(){a.removeElement(this.container.querySelector(\\\".modebar\\\")),a.deleteRelatedStyleRule(this._uid)},e.exports=function(t,e){var r=t._fullLayout,i=new l({graphInfo:t,container:r._modebardiv.node(),buttons:e});return r._privateplot&&n.select(i.element).append(\\\"span\\\").classed(\\\"badge-private float--left\\\",!0).text(\\\"PRIVATE\\\"),i}},{\\\"../../fonts/ploticon\\\":699,\\\"../../lib\\\":719,d3:163,\\\"fast-isnumeric\\\":225}],655:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/font_attributes\\\"),i=t(\\\"../color/attributes\\\"),a=(0,t(\\\"../../plot_api/plot_template\\\").templatedArray)(\\\"button\\\",{visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"plot\\\"},step:{valType:\\\"enumerated\\\",values:[\\\"month\\\",\\\"year\\\",\\\"day\\\",\\\"hour\\\",\\\"minute\\\",\\\"second\\\",\\\"all\\\"],dflt:\\\"month\\\",editType:\\\"plot\\\"},stepmode:{valType:\\\"enumerated\\\",values:[\\\"backward\\\",\\\"todate\\\"],dflt:\\\"backward\\\",editType:\\\"plot\\\"},count:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"plot\\\"},label:{valType:\\\"string\\\",editType:\\\"plot\\\"},editType:\\\"plot\\\"});e.exports={visible:{valType:\\\"boolean\\\",editType:\\\"plot\\\"},buttons:a,x:{valType:\\\"number\\\",min:-2,max:3,editType:\\\"plot\\\"},xanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"left\\\",\\\"center\\\",\\\"right\\\"],dflt:\\\"left\\\",editType:\\\"plot\\\"},y:{valType:\\\"number\\\",min:-2,max:3,editType:\\\"plot\\\"},yanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],dflt:\\\"bottom\\\",editType:\\\"plot\\\"},font:n({editType:\\\"plot\\\"}),bgcolor:{valType:\\\"color\\\",dflt:i.lightLine,editType:\\\"plot\\\"},activecolor:{valType:\\\"color\\\",editType:\\\"plot\\\"},bordercolor:{valType:\\\"color\\\",dflt:i.defaultLine,editType:\\\"plot\\\"},borderwidth:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"plot\\\"},editType:\\\"plot\\\"}},{\\\"../../plot_api/plot_template\\\":757,\\\"../../plots/font_attributes\\\":793,\\\"../color/attributes\\\":592}],656:[function(t,e,r){\\\"use strict\\\";e.exports={yPad:.02,minButtonWidth:30,rx:3,ry:3,lightAmount:25,darkAmount:10}},{}],657:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../color\\\"),a=t(\\\"../../plot_api/plot_template\\\"),o=t(\\\"../../plots/array_container_defaults\\\"),s=t(\\\"./attributes\\\"),l=t(\\\"./constants\\\");function c(t,e,r,i){var a=i.calendar;function o(r,i){return n.coerce(t,e,s.buttons,r,i)}if(o(\\\"visible\\\")){var l=o(\\\"step\\\");\\\"all\\\"!==l&&(!a||\\\"gregorian\\\"===a||\\\"month\\\"!==l&&\\\"year\\\"!==l?o(\\\"stepmode\\\"):e.stepmode=\\\"backward\\\",o(\\\"count\\\")),o(\\\"label\\\")}}e.exports=function(t,e,r,u,h){var f=t.rangeselector||{},p=a.newContainer(e,\\\"rangeselector\\\");function d(t,e){return n.coerce(f,p,s,t,e)}if(d(\\\"visible\\\",o(f,p,{name:\\\"buttons\\\",handleItemDefaults:c,calendar:h}).length>0)){var g=function(t,e,r){for(var n=r.filter(function(r){return e[r].anchor===t._id}),i=0,a=0;a<n.length;a++){var o=e[n[a]].domain;o&&(i=Math.max(o[1],i))}return[t.domain[0],i+l.yPad]}(e,r,u);d(\\\"x\\\",g[0]),d(\\\"y\\\",g[1]),n.noneOrAll(t,e,[\\\"x\\\",\\\"y\\\"]),d(\\\"xanchor\\\"),d(\\\"yanchor\\\"),n.coerceFont(d,\\\"font\\\",r.font);var v=d(\\\"bgcolor\\\");d(\\\"activecolor\\\",i.contrast(v,l.lightAmount,l.darkAmount)),d(\\\"bordercolor\\\"),d(\\\"borderwidth\\\")}}},{\\\"../../lib\\\":719,\\\"../../plot_api/plot_template\\\":757,\\\"../../plots/array_container_defaults\\\":763,\\\"../color\\\":593,\\\"./attributes\\\":655,\\\"./constants\\\":656}],658:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../registry\\\"),a=t(\\\"../../plots/plots\\\"),o=t(\\\"../color\\\"),s=t(\\\"../drawing\\\"),l=t(\\\"../../lib\\\"),c=t(\\\"../../lib/svg_text_utils\\\"),u=t(\\\"../../plots/cartesian/axis_ids\\\"),h=t(\\\"../../constants/alignment\\\"),f=h.LINE_SPACING,p=h.FROM_TL,d=h.FROM_BR,g=t(\\\"./constants\\\"),v=t(\\\"./get_update_object\\\");function m(t){return t._id}function y(t,e,r){var n=l.ensureSingle(t,\\\"rect\\\",\\\"selector-rect\\\",function(t){t.attr(\\\"shape-rendering\\\",\\\"crispEdges\\\")});n.attr({rx:g.rx,ry:g.ry}),n.call(o.stroke,e.bordercolor).call(o.fill,function(t,e){return e._isActive||e._isHovered?t.activecolor:t.bgcolor}(e,r)).style(\\\"stroke-width\\\",e.borderwidth+\\\"px\\\")}function x(t,e,r,n){l.ensureSingle(t,\\\"text\\\",\\\"selector-text\\\",function(t){t.classed(\\\"user-select-none\\\",!0).attr(\\\"text-anchor\\\",\\\"middle\\\")}).call(s.font,e.font).text(function(t,e){if(t.label)return e?l.templateString(t.label,e):t.label;return\\\"all\\\"===t.step?\\\"all\\\":t.count+t.step.charAt(0)}(r,n._fullLayout._meta)).call(function(t){c.convertToTspans(t,n)})}e.exports=function(t){var e=t._fullLayout._infolayer.selectAll(\\\".rangeselector\\\").data(function(t){for(var e=u.list(t,\\\"x\\\",!0),r=[],n=0;n<e.length;n++){var i=e[n];i.rangeselector&&i.rangeselector.visible&&r.push(i)}return r}(t),m);e.enter().append(\\\"g\\\").classed(\\\"rangeselector\\\",!0),e.exit().remove(),e.style({cursor:\\\"pointer\\\",\\\"pointer-events\\\":\\\"all\\\"}),e.each(function(e){var r=n.select(this),o=e,u=o.rangeselector,h=r.selectAll(\\\"g.button\\\").data(l.filterVisible(u.buttons));h.enter().append(\\\"g\\\").classed(\\\"button\\\",!0),h.exit().remove(),h.each(function(e){var r=n.select(this),a=v(o,e);e._isActive=function(t,e,r){if(\\\"all\\\"===e.step)return!0===t.autorange;var n=Object.keys(r);return t.range[0]===r[n[0]]&&t.range[1]===r[n[1]]}(o,e,a),r.call(y,u,e),r.call(x,u,e,t),r.on(\\\"click\\\",function(){t._dragged||i.call(\\\"_guiRelayout\\\",t,a)}),r.on(\\\"mouseover\\\",function(){e._isHovered=!0,r.call(y,u,e)}),r.on(\\\"mouseout\\\",function(){e._isHovered=!1,r.call(y,u,e)})}),function(t,e,r,i,o){var u=0,h=0,v=r.borderwidth;e.each(function(){var t=n.select(this),e=t.select(\\\".selector-text\\\"),i=r.font.size*f,a=Math.max(i*c.lineCount(e),16)+3;h=Math.max(h,a)}),e.each(function(){var t=n.select(this),e=t.select(\\\".selector-rect\\\"),i=t.select(\\\".selector-text\\\"),a=i.node()&&s.bBox(i.node()).width,o=r.font.size*f,l=c.lineCount(i),p=Math.max(a+10,g.minButtonWidth);t.attr(\\\"transform\\\",\\\"translate(\\\"+(v+u)+\\\",\\\"+v+\\\")\\\"),e.attr({x:0,y:0,width:p,height:h}),c.positionText(i,p/2,h/2-(l-1)*o/2+3),u+=p+5});var m=t._fullLayout._size,y=m.l+m.w*r.x,x=m.t+m.h*(1-r.y),b=\\\"left\\\";l.isRightAnchor(r)&&(y-=u,b=\\\"right\\\");l.isCenterAnchor(r)&&(y-=u/2,b=\\\"center\\\");var _=\\\"top\\\";l.isBottomAnchor(r)&&(x-=h,_=\\\"bottom\\\");l.isMiddleAnchor(r)&&(x-=h/2,_=\\\"middle\\\");u=Math.ceil(u),h=Math.ceil(h),y=Math.round(y),x=Math.round(x),a.autoMargin(t,i+\\\"-range-selector\\\",{x:r.x,y:r.y,l:u*p[b],r:u*d[b],b:h*d[_],t:h*p[_]}),o.attr(\\\"transform\\\",\\\"translate(\\\"+y+\\\",\\\"+x+\\\")\\\")}(t,h,u,o._name,r)})}},{\\\"../../constants/alignment\\\":688,\\\"../../lib\\\":719,\\\"../../lib/svg_text_utils\\\":743,\\\"../../plots/cartesian/axis_ids\\\":770,\\\"../../plots/plots\\\":828,\\\"../../registry\\\":847,\\\"../color\\\":593,\\\"../drawing\\\":614,\\\"./constants\\\":656,\\\"./get_update_object\\\":659,d3:163}],659:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\");e.exports=function(t,e){var r=t._name,i={};if(\\\"all\\\"===e.step)i[r+\\\".autorange\\\"]=!0;else{var a=function(t,e){var r,i=t.range,a=new Date(t.r2l(i[1])),o=e.step,s=e.count;switch(e.stepmode){case\\\"backward\\\":r=t.l2r(+n.time[o].utc.offset(a,-s));break;case\\\"todate\\\":var l=n.time[o].utc.offset(a,-s);r=t.l2r(+n.time[o].utc.ceil(l))}var c=i[1];return[r,c]}(t,e);i[r+\\\".range[0]\\\"]=a[0],i[r+\\\".range[1]\\\"]=a[1]}return i}},{d3:163}],660:[function(t,e,r){\\\"use strict\\\";e.exports={moduleType:\\\"component\\\",name:\\\"rangeselector\\\",schema:{subplots:{xaxis:{rangeselector:t(\\\"./attributes\\\")}}},layoutAttributes:t(\\\"./attributes\\\"),handleDefaults:t(\\\"./defaults\\\"),draw:t(\\\"./draw\\\")}},{\\\"./attributes\\\":655,\\\"./defaults\\\":657,\\\"./draw\\\":658}],661:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../color/attributes\\\");e.exports={bgcolor:{valType:\\\"color\\\",dflt:n.background,editType:\\\"plot\\\"},bordercolor:{valType:\\\"color\\\",dflt:n.defaultLine,editType:\\\"plot\\\"},borderwidth:{valType:\\\"integer\\\",dflt:0,min:0,editType:\\\"plot\\\"},autorange:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\",impliedEdits:{\\\"range[0]\\\":void 0,\\\"range[1]\\\":void 0}},range:{valType:\\\"info_array\\\",items:[{valType:\\\"any\\\",editType:\\\"calc\\\",impliedEdits:{\\\"^autorange\\\":!1}},{valType:\\\"any\\\",editType:\\\"calc\\\",impliedEdits:{\\\"^autorange\\\":!1}}],editType:\\\"calc\\\",impliedEdits:{autorange:!1}},thickness:{valType:\\\"number\\\",dflt:.15,min:0,max:1,editType:\\\"plot\\\"},visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},editType:\\\"calc\\\"}},{\\\"../color/attributes\\\":592}],662:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/cartesian/axis_ids\\\").list,i=t(\\\"../../plots/cartesian/autorange\\\").getAutoRange,a=t(\\\"./constants\\\");e.exports=function(t){for(var e=n(t,\\\"x\\\",!0),r=0;r<e.length;r++){var o=e[r],s=o[a.name];s&&s.visible&&s.autorange&&(s._input.autorange=!0,s._input.range=s.range=i(t,o))}}},{\\\"../../plots/cartesian/autorange\\\":766,\\\"../../plots/cartesian/axis_ids\\\":770,\\\"./constants\\\":663}],663:[function(t,e,r){\\\"use strict\\\";e.exports={name:\\\"rangeslider\\\",containerClassName:\\\"rangeslider-container\\\",bgClassName:\\\"rangeslider-bg\\\",rangePlotClassName:\\\"rangeslider-rangeplot\\\",maskMinClassName:\\\"rangeslider-mask-min\\\",maskMaxClassName:\\\"rangeslider-mask-max\\\",slideBoxClassName:\\\"rangeslider-slidebox\\\",grabberMinClassName:\\\"rangeslider-grabber-min\\\",grabAreaMinClassName:\\\"rangeslider-grabarea-min\\\",handleMinClassName:\\\"rangeslider-handle-min\\\",grabberMaxClassName:\\\"rangeslider-grabber-max\\\",grabAreaMaxClassName:\\\"rangeslider-grabarea-max\\\",handleMaxClassName:\\\"rangeslider-handle-max\\\",maskMinOppAxisClassName:\\\"rangeslider-mask-min-opp-axis\\\",maskMaxOppAxisClassName:\\\"rangeslider-mask-max-opp-axis\\\",maskColor:\\\"rgba(0,0,0,0.4)\\\",maskOppAxisColor:\\\"rgba(0,0,0,0.2)\\\",slideBoxFill:\\\"transparent\\\",slideBoxCursor:\\\"ew-resize\\\",grabAreaFill:\\\"transparent\\\",grabAreaCursor:\\\"col-resize\\\",grabAreaWidth:10,handleWidth:4,handleRadius:1,handleStrokeWidth:1,extraPad:15}},{}],664:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../plot_api/plot_template\\\"),a=t(\\\"../../plots/cartesian/axis_ids\\\"),o=t(\\\"./attributes\\\"),s=t(\\\"./oppaxis_attributes\\\");e.exports=function(t,e,r){var l=t[r],c=e[r];if(l.rangeslider||e._requestRangeslider[c._id]){n.isPlainObject(l.rangeslider)||(l.rangeslider={});var u,h,f=l.rangeslider,p=i.newContainer(c,\\\"rangeslider\\\");if(_(\\\"visible\\\")){_(\\\"bgcolor\\\",e.plot_bgcolor),_(\\\"bordercolor\\\"),_(\\\"borderwidth\\\"),_(\\\"thickness\\\"),_(\\\"autorange\\\",!c.isValidRange(f.range)),_(\\\"range\\\");var d=e._subplots;if(d)for(var g=d.cartesian.filter(function(t){return t.substr(0,t.indexOf(\\\"y\\\"))===a.name2id(r)}).map(function(t){return t.substr(t.indexOf(\\\"y\\\"),t.length)}),v=n.simpleMap(g,a.id2name),m=0;m<v.length;m++){var y=v[m];u=f[y]||{},h=i.newContainer(p,y,\\\"yaxis\\\");var x,b=e[y];u.range&&b.isValidRange(u.range)&&(x=\\\"fixed\\\"),\\\"match\\\"!==w(\\\"rangemode\\\",x)&&w(\\\"range\\\",b.range.slice())}p._input=f}}function _(t,e){return n.coerce(f,p,o,t,e)}function w(t,e){return n.coerce(u,h,s,t,e)}}},{\\\"../../lib\\\":719,\\\"../../plot_api/plot_template\\\":757,\\\"../../plots/cartesian/axis_ids\\\":770,\\\"./attributes\\\":661,\\\"./oppaxis_attributes\\\":668}],665:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../registry\\\"),a=t(\\\"../../plots/plots\\\"),o=t(\\\"../../lib\\\"),s=t(\\\"../drawing\\\"),l=t(\\\"../color\\\"),c=t(\\\"../titles\\\"),u=t(\\\"../../plots/cartesian\\\"),h=t(\\\"../../plots/cartesian/axis_ids\\\"),f=t(\\\"../dragelement\\\"),p=t(\\\"../../lib/setcursor\\\"),d=t(\\\"./constants\\\");function g(t,e,r,n){var i=o.ensureSingle(t,\\\"rect\\\",d.bgClassName,function(t){t.attr({x:0,y:0,\\\"shape-rendering\\\":\\\"crispEdges\\\"})}),a=n.borderwidth%2==0?n.borderwidth:n.borderwidth-1,l=-n._offsetShift,c=s.crispRound(e,n.borderwidth);i.attr({width:n._width+a,height:n._height+a,transform:\\\"translate(\\\"+l+\\\",\\\"+l+\\\")\\\",fill:n.bgcolor,stroke:n.bordercolor,\\\"stroke-width\\\":c})}function v(t,e,r,n){var i=e._fullLayout;o.ensureSingleById(i._topdefs,\\\"clipPath\\\",n._clipId,function(t){t.append(\\\"rect\\\").attr({x:0,y:0})}).select(\\\"rect\\\").attr({width:n._width,height:n._height})}function m(t,e,r,i){var l,c=e.calcdata,f=t.selectAll(\\\"g.\\\"+d.rangePlotClassName).data(r._subplotsWith,o.identity);f.enter().append(\\\"g\\\").attr(\\\"class\\\",function(t){return d.rangePlotClassName+\\\" \\\"+t}).call(s.setClipUrl,i._clipId,e),f.order(),f.exit().remove(),f.each(function(t,o){var s=n.select(this),f=0===o,p=h.getFromId(e,t,\\\"y\\\"),d=p._name,g=i[d],v={data:[],layout:{xaxis:{type:r.type,domain:[0,1],range:i.range.slice(),calendar:r.calendar},width:i._width,height:i._height,margin:{t:0,b:0,l:0,r:0}},_context:e._context};v.layout[d]={type:p.type,domain:[0,1],range:\\\"match\\\"!==g.rangemode?g.range.slice():p.range.slice(),calendar:p.calendar},a.supplyDefaults(v);var m=v._fullLayout.xaxis,y=v._fullLayout[d];m.clearCalc(),m.setScale(),y.clearCalc(),y.setScale();var x={id:t,plotgroup:s,xaxis:m,yaxis:y,isRangePlot:!0};f?l=x:(x.mainplot=\\\"xy\\\",x.mainplotinfo=l),u.rangePlot(e,x,function(t,e){for(var r=[],n=0;n<t.length;n++){var i=t[n],a=i[0].trace;a.xaxis+a.yaxis===e&&r.push(i)}return r}(c,t))})}function y(t,e,r,n,i){(o.ensureSingle(t,\\\"rect\\\",d.maskMinClassName,function(t){t.attr({x:0,y:0,\\\"shape-rendering\\\":\\\"crispEdges\\\"})}).attr(\\\"height\\\",n._height).call(l.fill,d.maskColor),o.ensureSingle(t,\\\"rect\\\",d.maskMaxClassName,function(t){t.attr({y:0,\\\"shape-rendering\\\":\\\"crispEdges\\\"})}).attr(\\\"height\\\",n._height).call(l.fill,d.maskColor),\\\"match\\\"!==i.rangemode)&&(o.ensureSingle(t,\\\"rect\\\",d.maskMinOppAxisClassName,function(t){t.attr({y:0,\\\"shape-rendering\\\":\\\"crispEdges\\\"})}).attr(\\\"width\\\",n._width).call(l.fill,d.maskOppAxisColor),o.ensureSingle(t,\\\"rect\\\",d.maskMaxOppAxisClassName,function(t){t.attr({y:0,\\\"shape-rendering\\\":\\\"crispEdges\\\"})}).attr(\\\"width\\\",n._width).style(\\\"border-top\\\",d.maskOppBorder).call(l.fill,d.maskOppAxisColor))}function x(t,e,r,n){e._context.staticPlot||o.ensureSingle(t,\\\"rect\\\",d.slideBoxClassName,function(t){t.attr({y:0,cursor:d.slideBoxCursor,\\\"shape-rendering\\\":\\\"crispEdges\\\"})}).attr({height:n._height,fill:d.slideBoxFill})}function b(t,e,r,n){var i=o.ensureSingle(t,\\\"g\\\",d.grabberMinClassName),a=o.ensureSingle(t,\\\"g\\\",d.grabberMaxClassName),s={x:0,width:d.handleWidth,rx:d.handleRadius,fill:l.background,stroke:l.defaultLine,\\\"stroke-width\\\":d.handleStrokeWidth,\\\"shape-rendering\\\":\\\"crispEdges\\\"},c={y:Math.round(n._height/4),height:Math.round(n._height/2)};if(o.ensureSingle(i,\\\"rect\\\",d.handleMinClassName,function(t){t.attr(s)}).attr(c),o.ensureSingle(a,\\\"rect\\\",d.handleMaxClassName,function(t){t.attr(s)}).attr(c),!e._context.staticPlot){var u={width:d.grabAreaWidth,x:0,y:0,fill:d.grabAreaFill,cursor:d.grabAreaCursor};o.ensureSingle(i,\\\"rect\\\",d.grabAreaMinClassName,function(t){t.attr(u)}).attr(\\\"height\\\",n._height),o.ensureSingle(a,\\\"rect\\\",d.grabAreaMaxClassName,function(t){t.attr(u)}).attr(\\\"height\\\",n._height)}}e.exports=function(t){for(var e=t._fullLayout,r=e._rangeSliderData,a=0;a<r.length;a++){var s=r[a][d.name];s._clipId=s._id+\\\"-\\\"+e._uid}var l=e._infolayer.selectAll(\\\"g.\\\"+d.containerClassName).data(r,function(t){return t._name});l.exit().each(function(t){var r=t[d.name];e._topdefs.select(\\\"#\\\"+r._clipId).remove()}).remove(),0!==r.length&&(l.enter().append(\\\"g\\\").classed(d.containerClassName,!0).attr(\\\"pointer-events\\\",\\\"all\\\"),l.each(function(r){var a=n.select(this),s=r[d.name],l=e[h.id2name(r.anchor)],u=s[h.id2name(r.anchor)];if(s.range){var _,w=o.simpleMap(s.range,r.r2l),k=o.simpleMap(r.range,r.r2l);_=k[0]<k[1]?[Math.min(w[0],k[0]),Math.max(w[1],k[1])]:[Math.max(w[0],k[0]),Math.min(w[1],k[1])],s.range=s._input.range=o.simpleMap(_,r.l2r)}r.cleanRange(\\\"rangeslider.range\\\");var T=e._size,A=r.domain,M=s._tickHeight,S=s._oppBottom;s._width=T.w*(A[1]-A[0]);var E=Math.round(T.l+T.w*A[0]),C=Math.round(T.t+T.h*(1-S)+M+s._offsetShift+d.extraPad);a.attr(\\\"transform\\\",\\\"translate(\\\"+E+\\\",\\\"+C+\\\")\\\");var L=r.r2l(s.range[0]),P=r.r2l(s.range[1]),O=P-L;if(s.p2d=function(t){return t/s._width*O+L},s.d2p=function(t){return(t-L)/O*s._width},s._rl=[L,P],\\\"match\\\"!==u.rangemode){var z=l.r2l(u.range[0]),I=l.r2l(u.range[1])-z;s.d2pOppAxis=function(t){return(t-z)/I*s._height}}a.call(g,t,r,s).call(v,t,r,s).call(m,t,r,s).call(y,t,r,s,u).call(x,t,r,s).call(b,t,r,s),function(t,e,r,a){var s=t.select(\\\"rect.\\\"+d.slideBoxClassName).node(),l=t.select(\\\"rect.\\\"+d.grabAreaMinClassName).node(),c=t.select(\\\"rect.\\\"+d.grabAreaMaxClassName).node();t.on(\\\"mousedown\\\",function(){var u=n.event,h=u.target,d=u.clientX,g=d-t.node().getBoundingClientRect().left,v=a.d2p(r._rl[0]),m=a.d2p(r._rl[1]),y=f.coverSlip();function x(t){var u,f,x,b=+t.clientX-d;switch(h){case s:x=\\\"ew-resize\\\",u=v+b,f=m+b;break;case l:x=\\\"col-resize\\\",u=v+b,f=m;break;case c:x=\\\"col-resize\\\",u=v,f=m+b;break;default:x=\\\"ew-resize\\\",u=g,f=g+b}if(f<u){var _=f;f=u,u=_}a._pixelMin=u,a._pixelMax=f,p(n.select(y),x),function(t,e,r,n){function a(t){return r.l2r(o.constrain(t,n._rl[0],n._rl[1]))}var s=a(n.p2d(n._pixelMin)),l=a(n.p2d(n._pixelMax));window.requestAnimationFrame(function(){i.call(\\\"_guiRelayout\\\",e,r._name+\\\".range\\\",[s,l])})}(0,e,r,a)}y.addEventListener(\\\"mousemove\\\",x),y.addEventListener(\\\"mouseup\\\",function t(){y.removeEventListener(\\\"mousemove\\\",x);y.removeEventListener(\\\"mouseup\\\",t);o.removeElement(y)})})}(a,t,r,s),function(t,e,r,n,i,a){var s=d.handleWidth/2;function l(t){return o.constrain(t,0,n._width)}function c(t){return o.constrain(t,0,n._height)}function u(t){return o.constrain(t,-s,n._width+s)}var h=l(n.d2p(r._rl[0])),f=l(n.d2p(r._rl[1]));if(t.select(\\\"rect.\\\"+d.slideBoxClassName).attr(\\\"x\\\",h).attr(\\\"width\\\",f-h),t.select(\\\"rect.\\\"+d.maskMinClassName).attr(\\\"width\\\",h),t.select(\\\"rect.\\\"+d.maskMaxClassName).attr(\\\"x\\\",f).attr(\\\"width\\\",n._width-f),\\\"match\\\"!==a.rangemode){var p=n._height-c(n.d2pOppAxis(i._rl[1])),g=n._height-c(n.d2pOppAxis(i._rl[0]));t.select(\\\"rect.\\\"+d.maskMinOppAxisClassName).attr(\\\"x\\\",h).attr(\\\"height\\\",p).attr(\\\"width\\\",f-h),t.select(\\\"rect.\\\"+d.maskMaxOppAxisClassName).attr(\\\"x\\\",h).attr(\\\"y\\\",g).attr(\\\"height\\\",n._height-g).attr(\\\"width\\\",f-h),t.select(\\\"rect.\\\"+d.slideBoxClassName).attr(\\\"y\\\",p).attr(\\\"height\\\",g-p)}var v=Math.round(u(h-s))-.5,m=Math.round(u(f-s))+.5;t.select(\\\"g.\\\"+d.grabberMinClassName).attr(\\\"transform\\\",\\\"translate(\\\"+v+\\\",0.5)\\\"),t.select(\\\"g.\\\"+d.grabberMaxClassName).attr(\\\"transform\\\",\\\"translate(\\\"+m+\\\",0.5)\\\")}(a,0,r,s,l,u),\\\"bottom\\\"===r.side&&c.draw(t,r._id+\\\"title\\\",{propContainer:r,propName:r._name+\\\".title\\\",placeholder:e._dfltTitle.x,attributes:{x:r._offset+r._length/2,y:C+s._height+s._offsetShift+10+1.5*r.title.font.size,\\\"text-anchor\\\":\\\"middle\\\"}})}))}},{\\\"../../lib\\\":719,\\\"../../lib/setcursor\\\":739,\\\"../../plots/cartesian\\\":778,\\\"../../plots/cartesian/axis_ids\\\":770,\\\"../../plots/plots\\\":828,\\\"../../registry\\\":847,\\\"../color\\\":593,\\\"../dragelement\\\":611,\\\"../drawing\\\":614,\\\"../titles\\\":681,\\\"./constants\\\":663,d3:163}],666:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/cartesian/axis_ids\\\"),i=t(\\\"./constants\\\"),a=i.name;function o(t){var e=t&&t[a];return e&&e.visible}r.isVisible=o,r.makeData=function(t){var e=n.list({_fullLayout:t},\\\"x\\\",!0),r=t.margin,i=[];if(!t._has(\\\"gl2d\\\"))for(var s=0;s<e.length;s++){var l=e[s];if(o(l)){i.push(l);var c=l[a];c._id=a+l._id,c._height=(t.height-r.b-r.t)*c.thickness,c._offsetShift=Math.floor(c.borderwidth/2)}}t._rangeSliderData=i},r.autoMarginOpts=function(t,e){for(var r=e[a],o=1/0,s=e._counterAxes,l=0;l<s.length;l++){var c=s[l],u=n.getFromId(t,c);o=Math.min(o,u.domain[0])}r._oppBottom=o;var h=\\\"bottom\\\"===e.side&&e._boundingBox.height||0;return r._tickHeight=h,{x:0,y:o,l:0,r:0,t:0,b:r._height+t._fullLayout.margin.b+h,pad:i.extraPad+2*r._offsetShift}}},{\\\"../../plots/cartesian/axis_ids\\\":770,\\\"./constants\\\":663}],667:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./attributes\\\"),a=t(\\\"./oppaxis_attributes\\\"),o=t(\\\"./helpers\\\");e.exports={moduleType:\\\"component\\\",name:\\\"rangeslider\\\",schema:{subplots:{xaxis:{rangeslider:n.extendFlat({},i,{yaxis:a})}}},layoutAttributes:t(\\\"./attributes\\\"),handleDefaults:t(\\\"./defaults\\\"),calcAutorange:t(\\\"./calc_autorange\\\"),draw:t(\\\"./draw\\\"),isVisible:o.isVisible,makeData:o.makeData,autoMarginOpts:o.autoMarginOpts}},{\\\"../../lib\\\":719,\\\"./attributes\\\":661,\\\"./calc_autorange\\\":662,\\\"./defaults\\\":664,\\\"./draw\\\":665,\\\"./helpers\\\":666,\\\"./oppaxis_attributes\\\":668}],668:[function(t,e,r){\\\"use strict\\\";e.exports={_isSubplotObj:!0,rangemode:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"fixed\\\",\\\"match\\\"],dflt:\\\"match\\\",editType:\\\"calc\\\"},range:{valType:\\\"info_array\\\",items:[{valType:\\\"any\\\",editType:\\\"plot\\\"},{valType:\\\"any\\\",editType:\\\"plot\\\"}],editType:\\\"plot\\\"},editType:\\\"calc\\\"}},{}],669:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../annotations/attributes\\\"),i=t(\\\"../../traces/scatter/attributes\\\").line,a=t(\\\"../drawing/attributes\\\").dash,o=t(\\\"../../lib/extend\\\").extendFlat,s=t(\\\"../../plot_api/plot_template\\\").templatedArray;e.exports=s(\\\"shape\\\",{visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc+arraydraw\\\"},type:{valType:\\\"enumerated\\\",values:[\\\"circle\\\",\\\"rect\\\",\\\"path\\\",\\\"line\\\"],editType:\\\"calc+arraydraw\\\"},layer:{valType:\\\"enumerated\\\",values:[\\\"below\\\",\\\"above\\\"],dflt:\\\"above\\\",editType:\\\"arraydraw\\\"},xref:o({},n.xref,{}),xsizemode:{valType:\\\"enumerated\\\",values:[\\\"scaled\\\",\\\"pixel\\\"],dflt:\\\"scaled\\\",editType:\\\"calc+arraydraw\\\"},xanchor:{valType:\\\"any\\\",editType:\\\"calc+arraydraw\\\"},x0:{valType:\\\"any\\\",editType:\\\"calc+arraydraw\\\"},x1:{valType:\\\"any\\\",editType:\\\"calc+arraydraw\\\"},yref:o({},n.yref,{}),ysizemode:{valType:\\\"enumerated\\\",values:[\\\"scaled\\\",\\\"pixel\\\"],dflt:\\\"scaled\\\",editType:\\\"calc+arraydraw\\\"},yanchor:{valType:\\\"any\\\",editType:\\\"calc+arraydraw\\\"},y0:{valType:\\\"any\\\",editType:\\\"calc+arraydraw\\\"},y1:{valType:\\\"any\\\",editType:\\\"calc+arraydraw\\\"},path:{valType:\\\"string\\\",editType:\\\"calc+arraydraw\\\"},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:1,editType:\\\"arraydraw\\\"},line:{color:o({},i.color,{editType:\\\"arraydraw\\\"}),width:o({},i.width,{editType:\\\"calc+arraydraw\\\"}),dash:o({},a,{editType:\\\"arraydraw\\\"}),editType:\\\"calc+arraydraw\\\"},fillcolor:{valType:\\\"color\\\",dflt:\\\"rgba(0,0,0,0)\\\",editType:\\\"arraydraw\\\"},editType:\\\"arraydraw\\\"})},{\\\"../../lib/extend\\\":710,\\\"../../plot_api/plot_template\\\":757,\\\"../../traces/scatter/attributes\\\":1112,\\\"../annotations/attributes\\\":576,\\\"../drawing/attributes\\\":613}],670:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../plots/cartesian/axes\\\"),a=t(\\\"./constants\\\"),o=t(\\\"./helpers\\\");function s(t){return c(t.line.width,t.xsizemode,t.x0,t.x1,t.path,!1)}function l(t){return c(t.line.width,t.ysizemode,t.y0,t.y1,t.path,!0)}function c(t,e,r,i,s,l){var c=t/2,u=l;if(\\\"pixel\\\"===e){var h=s?o.extractPathCoords(s,l?a.paramIsY:a.paramIsX):[r,i],f=n.aggNums(Math.max,null,h),p=n.aggNums(Math.min,null,h),d=p<0?Math.abs(p)+c:c,g=f>0?f+c:c;return{ppad:c,ppadplus:u?d:g,ppadminus:u?g:d}}return{ppad:c}}function u(t,e,r,n,i){var s=\\\"category\\\"===t.type||\\\"multicategory\\\"===t.type?t.r2c:t.d2c;if(void 0!==e)return[s(e),s(r)];if(n){var l,c,u,h,f=1/0,p=-1/0,d=n.match(a.segmentRE);for(\\\"date\\\"===t.type&&(s=o.decodeDate(s)),l=0;l<d.length;l++)void 0!==(c=i[d[l].charAt(0)].drawn)&&(!(u=d[l].substr(1).match(a.paramRE))||u.length<c||((h=s(u[c]))<f&&(f=h),h>p&&(p=h)));return p>=f?[f,p]:void 0}}e.exports=function(t){var e=t._fullLayout,r=n.filterVisible(e.shapes);if(r.length&&t._fullData.length)for(var o=0;o<r.length;o++){var c,h,f=r[o];if(f._extremes={},\\\"paper\\\"!==f.xref){var p=\\\"pixel\\\"===f.xsizemode?f.xanchor:f.x0,d=\\\"pixel\\\"===f.xsizemode?f.xanchor:f.x1;(h=u(c=i.getFromId(t,f.xref),p,d,f.path,a.paramIsX))&&(f._extremes[c._id]=i.findExtremes(c,h,s(f)))}if(\\\"paper\\\"!==f.yref){var g=\\\"pixel\\\"===f.ysizemode?f.yanchor:f.y0,v=\\\"pixel\\\"===f.ysizemode?f.yanchor:f.y1;(h=u(c=i.getFromId(t,f.yref),g,v,f.path,a.paramIsY))&&(f._extremes[c._id]=i.findExtremes(c,h,l(f)))}}}},{\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767,\\\"./constants\\\":671,\\\"./helpers\\\":674}],671:[function(t,e,r){\\\"use strict\\\";e.exports={segmentRE:/[MLHVQCTSZ][^MLHVQCTSZ]*/g,paramRE:/[^\\\\s,]+/g,paramIsX:{M:{0:!0,drawn:0},L:{0:!0,drawn:0},H:{0:!0,drawn:0},V:{},Q:{0:!0,2:!0,drawn:2},C:{0:!0,2:!0,4:!0,drawn:4},T:{0:!0,drawn:0},S:{0:!0,2:!0,drawn:2},Z:{}},paramIsY:{M:{1:!0,drawn:1},L:{1:!0,drawn:1},H:{},V:{0:!0,drawn:0},Q:{1:!0,3:!0,drawn:3},C:{1:!0,3:!0,5:!0,drawn:5},T:{1:!0,drawn:1},S:{1:!0,3:!0,drawn:5},Z:{}},numParams:{M:2,L:2,H:1,V:1,Q:4,C:6,T:2,S:4,Z:0}}},{}],672:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../plots/cartesian/axes\\\"),a=t(\\\"../../plots/array_container_defaults\\\"),o=t(\\\"./attributes\\\"),s=t(\\\"./helpers\\\");function l(t,e,r){function a(r,i){return n.coerce(t,e,o,r,i)}if(a(\\\"visible\\\")){a(\\\"layer\\\"),a(\\\"opacity\\\"),a(\\\"fillcolor\\\"),a(\\\"line.color\\\"),a(\\\"line.width\\\"),a(\\\"line.dash\\\");for(var l=a(\\\"type\\\",t.path?\\\"path\\\":\\\"rect\\\"),c=a(\\\"xsizemode\\\"),u=a(\\\"ysizemode\\\"),h=[\\\"x\\\",\\\"y\\\"],f=0;f<2;f++){var p,d,g,v=h[f],m=v+\\\"anchor\\\",y=\\\"x\\\"===v?c:u,x={_fullLayout:r},b=i.coerceRef(t,e,x,v,\\\"\\\",\\\"paper\\\");if(\\\"paper\\\"!==b?((p=i.getFromId(x,b))._shapeIndices.push(e._index),g=s.rangeToShapePosition(p),d=s.shapePositionToRange(p)):d=g=n.identity,\\\"path\\\"!==l){var _=v+\\\"0\\\",w=v+\\\"1\\\",k=t[_],T=t[w];t[_]=d(t[_],!0),t[w]=d(t[w],!0),\\\"pixel\\\"===y?(a(_,0),a(w,10)):(i.coercePosition(e,x,a,b,_,.25),i.coercePosition(e,x,a,b,w,.75)),e[_]=g(e[_]),e[w]=g(e[w]),t[_]=k,t[w]=T}if(\\\"pixel\\\"===y){var A=t[m];t[m]=d(t[m],!0),i.coercePosition(e,x,a,b,m,.25),e[m]=g(e[m]),t[m]=A}}\\\"path\\\"===l?a(\\\"path\\\"):n.noneOrAll(t,e,[\\\"x0\\\",\\\"x1\\\",\\\"y0\\\",\\\"y1\\\"])}}e.exports=function(t,e){a(t,e,{name:\\\"shapes\\\",handleItemDefaults:l})}},{\\\"../../lib\\\":719,\\\"../../plots/array_container_defaults\\\":763,\\\"../../plots/cartesian/axes\\\":767,\\\"./attributes\\\":669,\\\"./helpers\\\":674}],673:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../plots/cartesian/axes\\\"),o=t(\\\"../color\\\"),s=t(\\\"../drawing\\\"),l=t(\\\"../../plot_api/plot_template\\\").arrayEditor,c=t(\\\"../dragelement\\\"),u=t(\\\"../../lib/setcursor\\\"),h=t(\\\"./constants\\\"),f=t(\\\"./helpers\\\");function p(t,e){t._fullLayout._paperdiv.selectAll('.shapelayer [data-index=\\\"'+e+'\\\"]').remove();var r=t._fullLayout.shapes[e]||{};if(r._input&&!1!==r.visible)if(\\\"below\\\"!==r.layer)m(t._fullLayout._shapeUpperLayer);else if(\\\"paper\\\"===r.xref||\\\"paper\\\"===r.yref)m(t._fullLayout._shapeLowerLayer);else{var p=t._fullLayout._plots[r.xref+r.yref];if(p)m((p.mainplotinfo||p).shapelayer);else m(t._fullLayout._shapeLowerLayer)}function m(p){var m={\\\"data-index\\\":e,\\\"fill-rule\\\":\\\"evenodd\\\",d:g(t,r)},y=r.line.width?r.line.color:\\\"rgba(0,0,0,0)\\\",x=p.append(\\\"path\\\").attr(m).style(\\\"opacity\\\",r.opacity).call(o.stroke,y).call(o.fill,r.fillcolor).call(s.dashLine,r.line.dash,r.line.width);d(x,t,r),t._context.edits.shapePosition&&function(t,e,r,o,p){var m,y,x,b,_,w,k,T,A,M,S,E,C,L,P,O,z=10,I=10,D=\\\"pixel\\\"===r.xsizemode,R=\\\"pixel\\\"===r.ysizemode,F=\\\"line\\\"===r.type,B=\\\"path\\\"===r.type,N=l(t.layout,\\\"shapes\\\",r),j=N.modifyItem,U=a.getFromId(t,r.xref),V=a.getFromId(t,r.yref),q=f.getDataToPixel(t,U),H=f.getDataToPixel(t,V,!0),G=f.getPixelToData(t,U),Y=f.getPixelToData(t,V,!0),W=F?function(){var t=Math.max(r.line.width,10),n=p.append(\\\"g\\\").attr(\\\"data-index\\\",o);n.append(\\\"path\\\").attr(\\\"d\\\",e.attr(\\\"d\\\")).style({cursor:\\\"move\\\",\\\"stroke-width\\\":t,\\\"stroke-opacity\\\":\\\"0\\\"});var i={\\\"fill-opacity\\\":\\\"0\\\"},a=t/2>10?t/2:10;return n.append(\\\"circle\\\").attr({\\\"data-line-point\\\":\\\"start-point\\\",cx:D?q(r.xanchor)+r.x0:q(r.x0),cy:R?H(r.yanchor)-r.y0:H(r.y0),r:a}).style(i).classed(\\\"cursor-grab\\\",!0),n.append(\\\"circle\\\").attr({\\\"data-line-point\\\":\\\"end-point\\\",cx:D?q(r.xanchor)+r.x1:q(r.x1),cy:R?H(r.yanchor)-r.y1:H(r.y1),r:a}).style(i).classed(\\\"cursor-grab\\\",!0),n}():e,X={element:W.node(),gd:t,prepFn:function(n){D&&(_=q(r.xanchor));R&&(w=H(r.yanchor));\\\"path\\\"===r.type?P=r.path:(m=D?r.x0:q(r.x0),y=R?r.y0:H(r.y0),x=D?r.x1:q(r.x1),b=R?r.y1:H(r.y1));m<x?(A=m,C=\\\"x0\\\",M=x,L=\\\"x1\\\"):(A=x,C=\\\"x1\\\",M=m,L=\\\"x0\\\");!R&&y<b||R&&y>b?(k=y,S=\\\"y0\\\",T=b,E=\\\"y1\\\"):(k=b,S=\\\"y1\\\",T=y,E=\\\"y0\\\");Z(n),$(p,r),function(t,e,r){var n=e.xref,i=e.yref,o=a.getFromId(r,n),l=a.getFromId(r,i),c=\\\"\\\";\\\"paper\\\"===n||o.autorange||(c+=n);\\\"paper\\\"===i||l.autorange||(c+=i);s.setClipUrl(t,c?\\\"clip\\\"+r._fullLayout._uid+c:null,r)}(e,r,t),X.moveFn=\\\"move\\\"===O?J:K},doneFn:function(){u(e),Q(p),d(e,t,r),n.call(\\\"_guiRelayout\\\",t,N.getUpdateObj())},clickFn:function(){Q(p)}};function Z(t){if(F)O=\\\"path\\\"===t.target.tagName?\\\"move\\\":\\\"start-point\\\"===t.target.attributes[\\\"data-line-point\\\"].value?\\\"resize-over-start-point\\\":\\\"resize-over-end-point\\\";else{var r=X.element.getBoundingClientRect(),n=r.right-r.left,i=r.bottom-r.top,a=t.clientX-r.left,o=t.clientY-r.top,s=!B&&n>z&&i>I&&!t.shiftKey?c.getCursor(a/n,1-o/i):\\\"move\\\";u(e,s),O=s.split(\\\"-\\\")[0]}}function J(n,i){if(\\\"path\\\"===r.type){var a=function(t){return t},o=a,s=a;D?j(\\\"xanchor\\\",r.xanchor=G(_+n)):(o=function(t){return G(q(t)+n)},U&&\\\"date\\\"===U.type&&(o=f.encodeDate(o))),R?j(\\\"yanchor\\\",r.yanchor=Y(w+i)):(s=function(t){return Y(H(t)+i)},V&&\\\"date\\\"===V.type&&(s=f.encodeDate(s))),j(\\\"path\\\",r.path=v(P,o,s))}else D?j(\\\"xanchor\\\",r.xanchor=G(_+n)):(j(\\\"x0\\\",r.x0=G(m+n)),j(\\\"x1\\\",r.x1=G(x+n))),R?j(\\\"yanchor\\\",r.yanchor=Y(w+i)):(j(\\\"y0\\\",r.y0=Y(y+i)),j(\\\"y1\\\",r.y1=Y(b+i)));e.attr(\\\"d\\\",g(t,r)),$(p,r)}function K(n,i){if(B){var a=function(t){return t},o=a,s=a;D?j(\\\"xanchor\\\",r.xanchor=G(_+n)):(o=function(t){return G(q(t)+n)},U&&\\\"date\\\"===U.type&&(o=f.encodeDate(o))),R?j(\\\"yanchor\\\",r.yanchor=Y(w+i)):(s=function(t){return Y(H(t)+i)},V&&\\\"date\\\"===V.type&&(s=f.encodeDate(s))),j(\\\"path\\\",r.path=v(P,o,s))}else if(F){if(\\\"resize-over-start-point\\\"===O){var l=m+n,c=R?y-i:y+i;j(\\\"x0\\\",r.x0=D?l:G(l)),j(\\\"y0\\\",r.y0=R?c:Y(c))}else if(\\\"resize-over-end-point\\\"===O){var u=x+n,h=R?b-i:b+i;j(\\\"x1\\\",r.x1=D?u:G(u)),j(\\\"y1\\\",r.y1=R?h:Y(h))}}else{var d=~O.indexOf(\\\"n\\\")?k+i:k,N=~O.indexOf(\\\"s\\\")?T+i:T,W=~O.indexOf(\\\"w\\\")?A+n:A,X=~O.indexOf(\\\"e\\\")?M+n:M;~O.indexOf(\\\"n\\\")&&R&&(d=k-i),~O.indexOf(\\\"s\\\")&&R&&(N=T-i),(!R&&N-d>I||R&&d-N>I)&&(j(S,r[S]=R?d:Y(d)),j(E,r[E]=R?N:Y(N))),X-W>z&&(j(C,r[C]=D?W:G(W)),j(L,r[L]=D?X:G(X)))}e.attr(\\\"d\\\",g(t,r)),$(p,r)}function $(t,e){(D||R)&&function(){var r=\\\"path\\\"!==e.type,n=t.selectAll(\\\".visual-cue\\\").data([0]);n.enter().append(\\\"path\\\").attr({fill:\\\"#fff\\\",\\\"fill-rule\\\":\\\"evenodd\\\",stroke:\\\"#000\\\",\\\"stroke-width\\\":1}).classed(\\\"visual-cue\\\",!0);var a=q(D?e.xanchor:i.midRange(r?[e.x0,e.x1]:f.extractPathCoords(e.path,h.paramIsX))),o=H(R?e.yanchor:i.midRange(r?[e.y0,e.y1]:f.extractPathCoords(e.path,h.paramIsY)));if(a=f.roundPositionForSharpStrokeRendering(a,1),o=f.roundPositionForSharpStrokeRendering(o,1),D&&R){var s=\\\"M\\\"+(a-1-1)+\\\",\\\"+(o-1-1)+\\\"h-8v2h8 v8h2v-8 h8v-2h-8 v-8h-2 Z\\\";n.attr(\\\"d\\\",s)}else if(D){var l=\\\"M\\\"+(a-1-1)+\\\",\\\"+(o-9-1)+\\\"v18 h2 v-18 Z\\\";n.attr(\\\"d\\\",l)}else{var c=\\\"M\\\"+(a-9-1)+\\\",\\\"+(o-1-1)+\\\"h18 v2 h-18 Z\\\";n.attr(\\\"d\\\",c)}}()}function Q(t){t.selectAll(\\\".visual-cue\\\").remove()}c.init(X),W.node().onmousemove=Z}(t,x,r,e,p)}}function d(t,e,r){var n=(r.xref+r.yref).replace(/paper/g,\\\"\\\");s.setClipUrl(t,n?\\\"clip\\\"+e._fullLayout._uid+n:null,e)}function g(t,e){var r,n,o,s,l,c,u,p,d=e.type,g=a.getFromId(t,e.xref),v=a.getFromId(t,e.yref),m=t._fullLayout._size;if(g?(r=f.shapePositionToRange(g),n=function(t){return g._offset+g.r2p(r(t,!0))}):n=function(t){return m.l+m.w*t},v?(o=f.shapePositionToRange(v),s=function(t){return v._offset+v.r2p(o(t,!0))}):s=function(t){return m.t+m.h*(1-t)},\\\"path\\\"===d)return g&&\\\"date\\\"===g.type&&(n=f.decodeDate(n)),v&&\\\"date\\\"===v.type&&(s=f.decodeDate(s)),function(t,e,r){var n=t.path,a=t.xsizemode,o=t.ysizemode,s=t.xanchor,l=t.yanchor;return n.replace(h.segmentRE,function(t){var n=0,c=t.charAt(0),u=h.paramIsX[c],f=h.paramIsY[c],p=h.numParams[c],d=t.substr(1).replace(h.paramRE,function(t){return u[n]?t=\\\"pixel\\\"===a?e(s)+Number(t):e(t):f[n]&&(t=\\\"pixel\\\"===o?r(l)-Number(t):r(t)),++n>p&&(t=\\\"X\\\"),t});return n>p&&(d=d.replace(/[\\\\s,]*X.*/,\\\"\\\"),i.log(\\\"Ignoring extra params in segment \\\"+t)),c+d})}(e,n,s);if(\\\"pixel\\\"===e.xsizemode){var y=n(e.xanchor);l=y+e.x0,c=y+e.x1}else l=n(e.x0),c=n(e.x1);if(\\\"pixel\\\"===e.ysizemode){var x=s(e.yanchor);u=x-e.y0,p=x-e.y1}else u=s(e.y0),p=s(e.y1);if(\\\"line\\\"===d)return\\\"M\\\"+l+\\\",\\\"+u+\\\"L\\\"+c+\\\",\\\"+p;if(\\\"rect\\\"===d)return\\\"M\\\"+l+\\\",\\\"+u+\\\"H\\\"+c+\\\"V\\\"+p+\\\"H\\\"+l+\\\"Z\\\";var b=(l+c)/2,_=(u+p)/2,w=Math.abs(b-l),k=Math.abs(_-u),T=\\\"A\\\"+w+\\\",\\\"+k,A=b+w+\\\",\\\"+_;return\\\"M\\\"+A+T+\\\" 0 1,1 \\\"+(b+\\\",\\\"+(_-k))+T+\\\" 0 0,1 \\\"+A+\\\"Z\\\"}function v(t,e,r){return t.replace(h.segmentRE,function(t){var n=0,i=t.charAt(0),a=h.paramIsX[i],o=h.paramIsY[i],s=h.numParams[i];return i+t.substr(1).replace(h.paramRE,function(t){return n>=s?t:(a[n]?t=e(t):o[n]&&(t=r(t)),n++,t)})})}e.exports={draw:function(t){var e=t._fullLayout;for(var r in e._shapeUpperLayer.selectAll(\\\"path\\\").remove(),e._shapeLowerLayer.selectAll(\\\"path\\\").remove(),e._plots){var n=e._plots[r].shapelayer;n&&n.selectAll(\\\"path\\\").remove()}for(var i=0;i<e.shapes.length;i++)e.shapes[i].visible&&p(t,i)},drawOne:p}},{\\\"../../lib\\\":719,\\\"../../lib/setcursor\\\":739,\\\"../../plot_api/plot_template\\\":757,\\\"../../plots/cartesian/axes\\\":767,\\\"../../registry\\\":847,\\\"../color\\\":593,\\\"../dragelement\\\":611,\\\"../drawing\\\":614,\\\"./constants\\\":671,\\\"./helpers\\\":674}],674:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./constants\\\"),i=t(\\\"../../lib\\\");r.rangeToShapePosition=function(t){return\\\"log\\\"===t.type?t.r2d:function(t){return t}},r.shapePositionToRange=function(t){return\\\"log\\\"===t.type?t.d2r:function(t){return t}},r.decodeDate=function(t){return function(e){return e.replace&&(e=e.replace(\\\"_\\\",\\\" \\\")),t(e)}},r.encodeDate=function(t){return function(e){return t(e).replace(\\\" \\\",\\\"_\\\")}},r.extractPathCoords=function(t,e){var r=[];return t.match(n.segmentRE).forEach(function(t){var a=e[t.charAt(0)].drawn;if(void 0!==a){var o=t.substr(1).match(n.paramRE);!o||o.length<a||r.push(i.cleanNumber(o[a]))}}),r},r.getDataToPixel=function(t,e,n){var i,a=t._fullLayout._size;if(e){var o=r.shapePositionToRange(e);i=function(t){return e._offset+e.r2p(o(t,!0))},\\\"date\\\"===e.type&&(i=r.decodeDate(i))}else i=n?function(t){return a.t+a.h*(1-t)}:function(t){return a.l+a.w*t};return i},r.getPixelToData=function(t,e,n){var i,a=t._fullLayout._size;if(e){var o=r.rangeToShapePosition(e);i=function(t){return o(e.p2r(t-e._offset))}}else i=n?function(t){return 1-(t-a.t)/a.h}:function(t){return(t-a.l)/a.w};return i},r.roundPositionForSharpStrokeRendering=function(t,e){var r=1===Math.round(e%2),n=Math.round(t);return r?n+.5:n}},{\\\"../../lib\\\":719,\\\"./constants\\\":671}],675:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./draw\\\");e.exports={moduleType:\\\"component\\\",name:\\\"shapes\\\",layoutAttributes:t(\\\"./attributes\\\"),supplyLayoutDefaults:t(\\\"./defaults\\\"),includeBasePlot:t(\\\"../../plots/cartesian/include_components\\\")(\\\"shapes\\\"),calcAutorange:t(\\\"./calc_autorange\\\"),draw:n.draw,drawOne:n.drawOne}},{\\\"../../plots/cartesian/include_components\\\":777,\\\"./attributes\\\":669,\\\"./calc_autorange\\\":670,\\\"./defaults\\\":672,\\\"./draw\\\":673}],676:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/font_attributes\\\"),i=t(\\\"../../plots/pad_attributes\\\"),a=t(\\\"../../lib/extend\\\").extendDeepAll,o=t(\\\"../../plot_api/edit_types\\\").overrideAll,s=t(\\\"../../plots/animation_attributes\\\"),l=t(\\\"../../plot_api/plot_template\\\").templatedArray,c=t(\\\"./constants\\\"),u=l(\\\"step\\\",{visible:{valType:\\\"boolean\\\",dflt:!0},method:{valType:\\\"enumerated\\\",values:[\\\"restyle\\\",\\\"relayout\\\",\\\"animate\\\",\\\"update\\\",\\\"skip\\\"],dflt:\\\"restyle\\\"},args:{valType:\\\"info_array\\\",freeLength:!0,items:[{valType:\\\"any\\\"},{valType:\\\"any\\\"},{valType:\\\"any\\\"}]},label:{valType:\\\"string\\\"},value:{valType:\\\"string\\\"},execute:{valType:\\\"boolean\\\",dflt:!0}});e.exports=o(l(\\\"slider\\\",{visible:{valType:\\\"boolean\\\",dflt:!0},active:{valType:\\\"number\\\",min:0,dflt:0},steps:u,lenmode:{valType:\\\"enumerated\\\",values:[\\\"fraction\\\",\\\"pixels\\\"],dflt:\\\"fraction\\\"},len:{valType:\\\"number\\\",min:0,dflt:1},x:{valType:\\\"number\\\",min:-2,max:3,dflt:0},pad:a(i({editType:\\\"arraydraw\\\"}),{},{t:{dflt:20}}),xanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"left\\\",\\\"center\\\",\\\"right\\\"],dflt:\\\"left\\\"},y:{valType:\\\"number\\\",min:-2,max:3,dflt:0},yanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],dflt:\\\"top\\\"},transition:{duration:{valType:\\\"number\\\",min:0,dflt:150},easing:{valType:\\\"enumerated\\\",values:s.transition.easing.values,dflt:\\\"cubic-in-out\\\"}},currentvalue:{visible:{valType:\\\"boolean\\\",dflt:!0},xanchor:{valType:\\\"enumerated\\\",values:[\\\"left\\\",\\\"center\\\",\\\"right\\\"],dflt:\\\"left\\\"},offset:{valType:\\\"number\\\",dflt:10},prefix:{valType:\\\"string\\\"},suffix:{valType:\\\"string\\\"},font:n({})},font:n({}),activebgcolor:{valType:\\\"color\\\",dflt:c.gripBgActiveColor},bgcolor:{valType:\\\"color\\\",dflt:c.railBgColor},bordercolor:{valType:\\\"color\\\",dflt:c.railBorderColor},borderwidth:{valType:\\\"number\\\",min:0,dflt:c.railBorderWidth},ticklen:{valType:\\\"number\\\",min:0,dflt:c.tickLength},tickcolor:{valType:\\\"color\\\",dflt:c.tickColor},tickwidth:{valType:\\\"number\\\",min:0,dflt:1},minorticklen:{valType:\\\"number\\\",min:0,dflt:c.minorTickLength}}),\\\"arraydraw\\\",\\\"from-root\\\")},{\\\"../../lib/extend\\\":710,\\\"../../plot_api/edit_types\\\":750,\\\"../../plot_api/plot_template\\\":757,\\\"../../plots/animation_attributes\\\":762,\\\"../../plots/font_attributes\\\":793,\\\"../../plots/pad_attributes\\\":827,\\\"./constants\\\":677}],677:[function(t,e,r){\\\"use strict\\\";e.exports={name:\\\"sliders\\\",containerClassName:\\\"slider-container\\\",groupClassName:\\\"slider-group\\\",inputAreaClass:\\\"slider-input-area\\\",railRectClass:\\\"slider-rail-rect\\\",railTouchRectClass:\\\"slider-rail-touch-rect\\\",gripRectClass:\\\"slider-grip-rect\\\",tickRectClass:\\\"slider-tick-rect\\\",inputProxyClass:\\\"slider-input-proxy\\\",labelsClass:\\\"slider-labels\\\",labelGroupClass:\\\"slider-label-group\\\",labelClass:\\\"slider-label\\\",currentValueClass:\\\"slider-current-value\\\",railHeight:5,menuIndexAttrName:\\\"slider-active-index\\\",autoMarginIdRoot:\\\"slider-\\\",minWidth:30,minHeight:30,textPadX:40,arrowOffsetX:4,railRadius:2,railWidth:5,railBorder:4,railBorderWidth:1,railBorderColor:\\\"#bec8d9\\\",railBgColor:\\\"#f8fafc\\\",railInset:8,stepInset:10,gripRadius:10,gripWidth:20,gripHeight:20,gripBorder:20,gripBorderWidth:1,gripBorderColor:\\\"#bec8d9\\\",gripBgColor:\\\"#f6f8fa\\\",gripBgActiveColor:\\\"#dbdde0\\\",labelPadding:8,labelOffset:0,tickWidth:1,tickColor:\\\"#333\\\",tickOffset:25,tickLength:7,minorTickOffset:25,minorTickColor:\\\"#333\\\",minorTickLength:4,currentValuePadding:8,currentValueInset:0}},{}],678:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../plots/array_container_defaults\\\"),a=t(\\\"./attributes\\\"),o=t(\\\"./constants\\\").name,s=a.steps;function l(t,e,r){function o(r,i){return n.coerce(t,e,a,r,i)}for(var s=i(t,e,{name:\\\"steps\\\",handleItemDefaults:c}),l=0,u=0;u<s.length;u++)s[u].visible&&l++;if(l<2?e.visible=!1:o(\\\"visible\\\")){e._stepCount=l;var h=e._visibleSteps=n.filterVisible(s);(s[o(\\\"active\\\")]||{}).visible||(e.active=h[0]._index),o(\\\"x\\\"),o(\\\"y\\\"),n.noneOrAll(t,e,[\\\"x\\\",\\\"y\\\"]),o(\\\"xanchor\\\"),o(\\\"yanchor\\\"),o(\\\"len\\\"),o(\\\"lenmode\\\"),o(\\\"pad.t\\\"),o(\\\"pad.r\\\"),o(\\\"pad.b\\\"),o(\\\"pad.l\\\"),n.coerceFont(o,\\\"font\\\",r.font),o(\\\"currentvalue.visible\\\")&&(o(\\\"currentvalue.xanchor\\\"),o(\\\"currentvalue.prefix\\\"),o(\\\"currentvalue.suffix\\\"),o(\\\"currentvalue.offset\\\"),n.coerceFont(o,\\\"currentvalue.font\\\",e.font)),o(\\\"transition.duration\\\"),o(\\\"transition.easing\\\"),o(\\\"bgcolor\\\"),o(\\\"activebgcolor\\\"),o(\\\"bordercolor\\\"),o(\\\"borderwidth\\\"),o(\\\"ticklen\\\"),o(\\\"tickwidth\\\"),o(\\\"tickcolor\\\"),o(\\\"minorticklen\\\")}}function c(t,e){function r(r,i){return n.coerce(t,e,s,r,i)}if(\\\"skip\\\"===t.method||Array.isArray(t.args)?r(\\\"visible\\\"):e.visible=!1){r(\\\"method\\\"),r(\\\"args\\\");var i=r(\\\"label\\\",\\\"step-\\\"+e._index);r(\\\"value\\\",i),r(\\\"execute\\\")}}e.exports=function(t,e){i(t,e,{name:o,handleItemDefaults:l})}},{\\\"../../lib\\\":719,\\\"../../plots/array_container_defaults\\\":763,\\\"./attributes\\\":676,\\\"./constants\\\":677}],679:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../plots/plots\\\"),a=t(\\\"../color\\\"),o=t(\\\"../drawing\\\"),s=t(\\\"../../lib\\\"),l=t(\\\"../../lib/svg_text_utils\\\"),c=t(\\\"../../plot_api/plot_template\\\").arrayEditor,u=t(\\\"./constants\\\"),h=t(\\\"../../constants/alignment\\\"),f=h.LINE_SPACING,p=h.FROM_TL,d=h.FROM_BR;function g(t){return u.autoMarginIdRoot+t._index}function v(t){return t._index}function m(t,e){var r=o.tester.selectAll(\\\"g.\\\"+u.labelGroupClass).data(e._visibleSteps);r.enter().append(\\\"g\\\").classed(u.labelGroupClass,!0);var a=0,c=0;r.each(function(t){var r=b(n.select(this),{step:t},e).node();if(r){var i=o.bBox(r);c=Math.max(c,i.height),a=Math.max(a,i.width)}}),r.remove();var h=e._dims={};h.inputAreaWidth=Math.max(u.railWidth,u.gripHeight);var f=t._fullLayout._size;h.lx=f.l+f.w*e.x,h.ly=f.t+f.h*(1-e.y),\\\"fraction\\\"===e.lenmode?h.outerLength=Math.round(f.w*e.len):h.outerLength=e.len,h.inputAreaStart=0,h.inputAreaLength=Math.round(h.outerLength-e.pad.l-e.pad.r);var v=(h.inputAreaLength-2*u.stepInset)/(e._stepCount-1),m=a+u.labelPadding;if(h.labelStride=Math.max(1,Math.ceil(m/v)),h.labelHeight=c,h.currentValueMaxWidth=0,h.currentValueHeight=0,h.currentValueTotalHeight=0,h.currentValueMaxLines=1,e.currentvalue.visible){var x=o.tester.append(\\\"g\\\");r.each(function(t){var r=y(x,e,t.label),n=r.node()&&o.bBox(r.node())||{width:0,height:0},i=l.lineCount(r);h.currentValueMaxWidth=Math.max(h.currentValueMaxWidth,Math.ceil(n.width)),h.currentValueHeight=Math.max(h.currentValueHeight,Math.ceil(n.height)),h.currentValueMaxLines=Math.max(h.currentValueMaxLines,i)}),h.currentValueTotalHeight=h.currentValueHeight+e.currentvalue.offset,x.remove()}h.height=h.currentValueTotalHeight+u.tickOffset+e.ticklen+u.labelOffset+h.labelHeight+e.pad.t+e.pad.b;var _=\\\"left\\\";s.isRightAnchor(e)&&(h.lx-=h.outerLength,_=\\\"right\\\"),s.isCenterAnchor(e)&&(h.lx-=h.outerLength/2,_=\\\"center\\\");var w=\\\"top\\\";s.isBottomAnchor(e)&&(h.ly-=h.height,w=\\\"bottom\\\"),s.isMiddleAnchor(e)&&(h.ly-=h.height/2,w=\\\"middle\\\"),h.outerLength=Math.ceil(h.outerLength),h.height=Math.ceil(h.height),h.lx=Math.round(h.lx),h.ly=Math.round(h.ly);var k={y:e.y,b:h.height*d[w],t:h.height*p[w]};\\\"fraction\\\"===e.lenmode?(k.l=0,k.xl=e.x-e.len*p[_],k.r=0,k.xr=e.x+e.len*d[_]):(k.x=e.x,k.l=h.outerLength*p[_],k.r=h.outerLength*d[_]),i.autoMargin(t,g(e),k)}function y(t,e,r){if(e.currentvalue.visible){var n,i,a=e._dims;switch(e.currentvalue.xanchor){case\\\"right\\\":n=a.inputAreaLength-u.currentValueInset-a.currentValueMaxWidth,i=\\\"left\\\";break;case\\\"center\\\":n=.5*a.inputAreaLength,i=\\\"middle\\\";break;default:n=u.currentValueInset,i=\\\"left\\\"}var c=s.ensureSingle(t,\\\"text\\\",u.labelClass,function(t){t.classed(\\\"user-select-none\\\",!0).attr({\\\"text-anchor\\\":i,\\\"data-notex\\\":1})}),h=e.currentvalue.prefix?e.currentvalue.prefix:\\\"\\\";if(\\\"string\\\"==typeof r)h+=r;else{var p=e.steps[e.active].label,d=e._gd._fullLayout._meta;d&&(p=s.templateString(p,d)),h+=p}e.currentvalue.suffix&&(h+=e.currentvalue.suffix),c.call(o.font,e.currentvalue.font).text(h).call(l.convertToTspans,e._gd);var g=l.lineCount(c),v=(a.currentValueMaxLines+1-g)*e.currentvalue.font.size*f;return l.positionText(c,n,v),c}}function x(t,e,r){s.ensureSingle(t,\\\"rect\\\",u.gripRectClass,function(n){n.call(T,e,t,r).style(\\\"pointer-events\\\",\\\"all\\\")}).attr({width:u.gripWidth,height:u.gripHeight,rx:u.gripRadius,ry:u.gripRadius}).call(a.stroke,r.bordercolor).call(a.fill,r.bgcolor).style(\\\"stroke-width\\\",r.borderwidth+\\\"px\\\")}function b(t,e,r){var n=s.ensureSingle(t,\\\"text\\\",u.labelClass,function(t){t.classed(\\\"user-select-none\\\",!0).attr({\\\"text-anchor\\\":\\\"middle\\\",\\\"data-notex\\\":1})}),i=e.step.label,a=r._gd._fullLayout._meta;return a&&(i=s.templateString(i,a)),n.call(o.font,r.font).text(i).call(l.convertToTspans,r._gd),n}function _(t,e){var r=s.ensureSingle(t,\\\"g\\\",u.labelsClass),i=e._dims,a=r.selectAll(\\\"g.\\\"+u.labelGroupClass).data(i.labelSteps);a.enter().append(\\\"g\\\").classed(u.labelGroupClass,!0),a.exit().remove(),a.each(function(t){var r=n.select(this);r.call(b,t,e),o.setTranslate(r,S(e,t.fraction),u.tickOffset+e.ticklen+e.font.size*f+u.labelOffset+i.currentValueTotalHeight)})}function w(t,e,r,n,i){var a=Math.round(n*(r._stepCount-1)),o=r._visibleSteps[a]._index;o!==r.active&&k(t,e,r,o,!0,i)}function k(t,e,r,n,a,o){var s=r.active;r.active=n,c(t.layout,u.name,r).applyUpdate(\\\"active\\\",n);var l=r.steps[r.active];e.call(M,r,o),e.call(y,r),t.emit(\\\"plotly_sliderchange\\\",{slider:r,step:r.steps[r.active],interaction:a,previousActive:s}),l&&l.method&&a&&(e._nextMethod?(e._nextMethod.step=l,e._nextMethod.doCallback=a,e._nextMethod.doTransition=o):(e._nextMethod={step:l,doCallback:a,doTransition:o},e._nextMethodRaf=window.requestAnimationFrame(function(){var r=e._nextMethod.step;r.method&&(r.execute&&i.executeAPICommand(t,r.method,r.args),e._nextMethod=null,e._nextMethodRaf=null)})))}function T(t,e,r){var i=r.node(),o=n.select(e);function s(){return r.data()[0]}t.on(\\\"mousedown\\\",function(){var t=s();e.emit(\\\"plotly_sliderstart\\\",{slider:t});var l=r.select(\\\".\\\"+u.gripRectClass);n.event.stopPropagation(),n.event.preventDefault(),l.call(a.fill,t.activebgcolor);var c=E(t,n.mouse(i)[0]);w(e,r,t,c,!0),t._dragging=!0,o.on(\\\"mousemove\\\",function(){var t=s(),a=E(t,n.mouse(i)[0]);w(e,r,t,a,!1)}),o.on(\\\"mouseup\\\",function(){var t=s();t._dragging=!1,l.call(a.fill,t.bgcolor),o.on(\\\"mouseup\\\",null),o.on(\\\"mousemove\\\",null),e.emit(\\\"plotly_sliderend\\\",{slider:t,step:t.steps[t.active]})})})}function A(t,e){var r=t.selectAll(\\\"rect.\\\"+u.tickRectClass).data(e._visibleSteps),i=e._dims;r.enter().append(\\\"rect\\\").classed(u.tickRectClass,!0),r.exit().remove(),r.attr({width:e.tickwidth+\\\"px\\\",\\\"shape-rendering\\\":\\\"crispEdges\\\"}),r.each(function(t,r){var s=r%i.labelStride==0,l=n.select(this);l.attr({height:s?e.ticklen:e.minorticklen}).call(a.fill,e.tickcolor),o.setTranslate(l,S(e,r/(e._stepCount-1))-.5*e.tickwidth,(s?u.tickOffset:u.minorTickOffset)+i.currentValueTotalHeight)})}function M(t,e,r){for(var n=t.select(\\\"rect.\\\"+u.gripRectClass),i=0,a=0;a<e._stepCount;a++)if(e._visibleSteps[a]._index===e.active){i=a;break}var o=S(e,i/(e._stepCount-1));if(!e._invokingCommand){var s=n;r&&e.transition.duration>0&&(s=s.transition().duration(e.transition.duration).ease(e.transition.easing)),s.attr(\\\"transform\\\",\\\"translate(\\\"+(o-.5*u.gripWidth)+\\\",\\\"+e._dims.currentValueTotalHeight+\\\")\\\")}}function S(t,e){var r=t._dims;return r.inputAreaStart+u.stepInset+(r.inputAreaLength-2*u.stepInset)*Math.min(1,Math.max(0,e))}function E(t,e){var r=t._dims;return Math.min(1,Math.max(0,(e-u.stepInset-r.inputAreaStart)/(r.inputAreaLength-2*u.stepInset-2*r.inputAreaStart)))}function C(t,e,r){var n=r._dims,i=s.ensureSingle(t,\\\"rect\\\",u.railTouchRectClass,function(n){n.call(T,e,t,r).style(\\\"pointer-events\\\",\\\"all\\\")});i.attr({width:n.inputAreaLength,height:Math.max(n.inputAreaWidth,u.tickOffset+r.ticklen+n.labelHeight)}).call(a.fill,r.bgcolor).attr(\\\"opacity\\\",0),o.setTranslate(i,0,n.currentValueTotalHeight)}function L(t,e){var r=e._dims,n=r.inputAreaLength-2*u.railInset,i=s.ensureSingle(t,\\\"rect\\\",u.railRectClass);i.attr({width:n,height:u.railWidth,rx:u.railRadius,ry:u.railRadius,\\\"shape-rendering\\\":\\\"crispEdges\\\"}).call(a.stroke,e.bordercolor).call(a.fill,e.bgcolor).style(\\\"stroke-width\\\",e.borderwidth+\\\"px\\\"),o.setTranslate(i,u.railInset,.5*(r.inputAreaWidth-u.railWidth)+r.currentValueTotalHeight)}e.exports=function(t){var e=t._fullLayout,r=function(t,e){for(var r=t[u.name],n=[],i=0;i<r.length;i++){var a=r[i];a.visible&&(a._gd=e,n.push(a))}return n}(e,t),a=e._infolayer.selectAll(\\\"g.\\\"+u.containerClassName).data(r.length>0?[0]:[]);function s(e){e._commandObserver&&(e._commandObserver.remove(),delete e._commandObserver),i.autoMargin(t,g(e))}if(a.enter().append(\\\"g\\\").classed(u.containerClassName,!0).style(\\\"cursor\\\",\\\"ew-resize\\\"),a.exit().each(function(){n.select(this).selectAll(\\\"g.\\\"+u.groupClassName).each(s)}).remove(),0!==r.length){var l=a.selectAll(\\\"g.\\\"+u.groupClassName).data(r,v);l.enter().append(\\\"g\\\").classed(u.groupClassName,!0),l.exit().each(s).remove();for(var c=0;c<r.length;c++){var h=r[c];m(t,h)}l.each(function(e){var r=n.select(this);!function(t){var e=t._dims;e.labelSteps=[];for(var r=t._stepCount,n=0;n<r;n+=e.labelStride)e.labelSteps.push({fraction:n/(r-1),step:t._visibleSteps[n]})}(e),i.manageCommandObserver(t,e,e._visibleSteps,function(e){var n=r.data()[0];n.active!==e.index&&(n._dragging||k(t,r,n,e.index,!1,!0))}),function(t,e,r){(r.steps[r.active]||{}).visible||(r.active=r._visibleSteps[0]._index);e.call(y,r).call(L,r).call(_,r).call(A,r).call(C,t,r).call(x,t,r);var n=r._dims;o.setTranslate(e,n.lx+r.pad.l,n.ly+r.pad.t),e.call(M,r,!1),e.call(y,r)}(t,n.select(this),e)})}}},{\\\"../../constants/alignment\\\":688,\\\"../../lib\\\":719,\\\"../../lib/svg_text_utils\\\":743,\\\"../../plot_api/plot_template\\\":757,\\\"../../plots/plots\\\":828,\\\"../color\\\":593,\\\"../drawing\\\":614,\\\"./constants\\\":677,d3:163}],680:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./constants\\\");e.exports={moduleType:\\\"component\\\",name:n.name,layoutAttributes:t(\\\"./attributes\\\"),supplyLayoutDefaults:t(\\\"./defaults\\\"),draw:t(\\\"./draw\\\")}},{\\\"./attributes\\\":676,\\\"./constants\\\":677,\\\"./defaults\\\":678,\\\"./draw\\\":679}],681:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"fast-isnumeric\\\"),a=t(\\\"../../plots/plots\\\"),o=t(\\\"../../registry\\\"),s=t(\\\"../../lib\\\"),l=t(\\\"../drawing\\\"),c=t(\\\"../color\\\"),u=t(\\\"../../lib/svg_text_utils\\\"),h=t(\\\"../../constants/interactions\\\");e.exports={draw:function(t,e,r){var p,d=r.propContainer,g=r.propName,v=r.placeholder,m=r.traceIndex,y=r.avoid||{},x=r.attributes,b=r.transform,_=r.containerGroup,w=t._fullLayout,k=1,T=!1,A=d.title,M=(A&&A.text?A.text:\\\"\\\").trim(),S=A&&A.font?A.font:{},E=S.family,C=S.size,L=S.color;\\\"title.text\\\"===g?p=\\\"titleText\\\":-1!==g.indexOf(\\\"axis\\\")?p=\\\"axisTitleText\\\":g.indexOf(!0)&&(p=\\\"colorbarTitleText\\\");var P=t._context.edits[p];\\\"\\\"===M?k=0:M.replace(f,\\\" % \\\")===v.replace(f,\\\" % \\\")&&(k=.2,T=!0,P||(M=\\\"\\\"));r._meta?M=s.templateString(M,r._meta):w._meta&&(M=s.templateString(M,w._meta));var O=M||P;_||(_=s.ensureSingle(w._infolayer,\\\"g\\\",\\\"g-\\\"+e));var z=_.selectAll(\\\"text\\\").data(O?[0]:[]);if(z.enter().append(\\\"text\\\"),z.text(M).attr(\\\"class\\\",e),z.exit().remove(),!O)return _;function I(t){s.syncOrAsync([D,R],t)}function D(e){var r;return b?(r=\\\"\\\",b.rotate&&(r+=\\\"rotate(\\\"+[b.rotate,x.x,x.y]+\\\")\\\"),b.offset&&(r+=\\\"translate(0, \\\"+b.offset+\\\")\\\")):r=null,e.attr(\\\"transform\\\",r),e.style({\\\"font-family\\\":E,\\\"font-size\\\":n.round(C,2)+\\\"px\\\",fill:c.rgb(L),opacity:k*c.opacity(L),\\\"font-weight\\\":a.fontWeight}).attr(x).call(u.convertToTspans,t),a.previousPromises(t)}function R(t){var e=n.select(t.node().parentNode);if(y&&y.selection&&y.side&&M){e.attr(\\\"transform\\\",null);var r=0,a={left:\\\"right\\\",right:\\\"left\\\",top:\\\"bottom\\\",bottom:\\\"top\\\"}[y.side],o=-1!==[\\\"left\\\",\\\"top\\\"].indexOf(y.side)?-1:1,c=i(y.pad)?y.pad:2,u=l.bBox(e.node()),h={left:0,top:0,right:w.width,bottom:w.height},f=y.maxShift||(h[y.side]-u[y.side])*(\\\"left\\\"===y.side||\\\"top\\\"===y.side?-1:1);if(f<0)r=f;else{var p=y.offsetLeft||0,d=y.offsetTop||0;u.left-=p,u.right-=p,u.top-=d,u.bottom-=d,y.selection.each(function(){var t=l.bBox(this);s.bBoxIntersect(u,t,c)&&(r=Math.max(r,o*(t[y.side]-u[a])+c))}),r=Math.min(f,r)}if(r>0||f<0){var g={left:[-r,0],right:[r,0],top:[0,-r],bottom:[0,r]}[y.side];e.attr(\\\"transform\\\",\\\"translate(\\\"+g+\\\")\\\")}}}z.call(I),P&&(M?z.on(\\\".opacity\\\",null):(k=0,T=!0,z.text(v).on(\\\"mouseover.opacity\\\",function(){n.select(this).transition().duration(h.SHOW_PLACEHOLDER).style(\\\"opacity\\\",1)}).on(\\\"mouseout.opacity\\\",function(){n.select(this).transition().duration(h.HIDE_PLACEHOLDER).style(\\\"opacity\\\",0)})),z.call(u.makeEditable,{gd:t}).on(\\\"edit\\\",function(e){void 0!==m?o.call(\\\"_guiRestyle\\\",t,g,e,m):o.call(\\\"_guiRelayout\\\",t,g,e)}).on(\\\"cancel\\\",function(){this.text(this.attr(\\\"data-unformatted\\\")).call(I)}).on(\\\"input\\\",function(t){this.text(t||\\\" \\\").call(u.positionText,x.x,x.y)}));return z.classed(\\\"js-placeholder\\\",T),_}};var f=/ [XY][0-9]* /},{\\\"../../constants/interactions\\\":694,\\\"../../lib\\\":719,\\\"../../lib/svg_text_utils\\\":743,\\\"../../plots/plots\\\":828,\\\"../../registry\\\":847,\\\"../color\\\":593,\\\"../drawing\\\":614,d3:163,\\\"fast-isnumeric\\\":225}],682:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/font_attributes\\\"),i=t(\\\"../color/attributes\\\"),a=t(\\\"../../lib/extend\\\").extendFlat,o=t(\\\"../../plot_api/edit_types\\\").overrideAll,s=t(\\\"../../plots/pad_attributes\\\"),l=t(\\\"../../plot_api/plot_template\\\").templatedArray,c=l(\\\"button\\\",{visible:{valType:\\\"boolean\\\"},method:{valType:\\\"enumerated\\\",values:[\\\"restyle\\\",\\\"relayout\\\",\\\"animate\\\",\\\"update\\\",\\\"skip\\\"],dflt:\\\"restyle\\\"},args:{valType:\\\"info_array\\\",freeLength:!0,items:[{valType:\\\"any\\\"},{valType:\\\"any\\\"},{valType:\\\"any\\\"}]},label:{valType:\\\"string\\\",dflt:\\\"\\\"},execute:{valType:\\\"boolean\\\",dflt:!0}});e.exports=o(l(\\\"updatemenu\\\",{_arrayAttrRegexps:[/^updatemenus\\\\[(0|[1-9][0-9]+)\\\\]\\\\.buttons/],visible:{valType:\\\"boolean\\\"},type:{valType:\\\"enumerated\\\",values:[\\\"dropdown\\\",\\\"buttons\\\"],dflt:\\\"dropdown\\\"},direction:{valType:\\\"enumerated\\\",values:[\\\"left\\\",\\\"right\\\",\\\"up\\\",\\\"down\\\"],dflt:\\\"down\\\"},active:{valType:\\\"integer\\\",min:-1,dflt:0},showactive:{valType:\\\"boolean\\\",dflt:!0},buttons:c,x:{valType:\\\"number\\\",min:-2,max:3,dflt:-.05},xanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"left\\\",\\\"center\\\",\\\"right\\\"],dflt:\\\"right\\\"},y:{valType:\\\"number\\\",min:-2,max:3,dflt:1},yanchor:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],dflt:\\\"top\\\"},pad:a(s({editType:\\\"arraydraw\\\"}),{}),font:n({}),bgcolor:{valType:\\\"color\\\"},bordercolor:{valType:\\\"color\\\",dflt:i.borderLine},borderwidth:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"arraydraw\\\"}}),\\\"arraydraw\\\",\\\"from-root\\\")},{\\\"../../lib/extend\\\":710,\\\"../../plot_api/edit_types\\\":750,\\\"../../plot_api/plot_template\\\":757,\\\"../../plots/font_attributes\\\":793,\\\"../../plots/pad_attributes\\\":827,\\\"../color/attributes\\\":592}],683:[function(t,e,r){\\\"use strict\\\";e.exports={name:\\\"updatemenus\\\",containerClassName:\\\"updatemenu-container\\\",headerGroupClassName:\\\"updatemenu-header-group\\\",headerClassName:\\\"updatemenu-header\\\",headerArrowClassName:\\\"updatemenu-header-arrow\\\",dropdownButtonGroupClassName:\\\"updatemenu-dropdown-button-group\\\",dropdownButtonClassName:\\\"updatemenu-dropdown-button\\\",buttonClassName:\\\"updatemenu-button\\\",itemRectClassName:\\\"updatemenu-item-rect\\\",itemTextClassName:\\\"updatemenu-item-text\\\",menuIndexAttrName:\\\"updatemenu-active-index\\\",autoMarginIdRoot:\\\"updatemenu-\\\",blankHeaderOpts:{label:\\\"  \\\"},minWidth:30,minHeight:30,textPadX:24,arrowPadX:16,rx:2,ry:2,textOffsetX:12,textOffsetY:3,arrowOffsetX:4,gapButtonHeader:5,gapButton:2,activeColor:\\\"#F4FAFF\\\",hoverColor:\\\"#F4FAFF\\\",arrowSymbol:{left:\\\"\\\\u25c4\\\",right:\\\"\\\\u25ba\\\",up:\\\"\\\\u25b2\\\",down:\\\"\\\\u25bc\\\"}}},{}],684:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../plots/array_container_defaults\\\"),a=t(\\\"./attributes\\\"),o=t(\\\"./constants\\\").name,s=a.buttons;function l(t,e,r){function o(r,i){return n.coerce(t,e,a,r,i)}o(\\\"visible\\\",i(t,e,{name:\\\"buttons\\\",handleItemDefaults:c}).length>0)&&(o(\\\"active\\\"),o(\\\"direction\\\"),o(\\\"type\\\"),o(\\\"showactive\\\"),o(\\\"x\\\"),o(\\\"y\\\"),n.noneOrAll(t,e,[\\\"x\\\",\\\"y\\\"]),o(\\\"xanchor\\\"),o(\\\"yanchor\\\"),o(\\\"pad.t\\\"),o(\\\"pad.r\\\"),o(\\\"pad.b\\\"),o(\\\"pad.l\\\"),n.coerceFont(o,\\\"font\\\",r.font),o(\\\"bgcolor\\\",r.paper_bgcolor),o(\\\"bordercolor\\\"),o(\\\"borderwidth\\\"))}function c(t,e){function r(r,i){return n.coerce(t,e,s,r,i)}r(\\\"visible\\\",\\\"skip\\\"===t.method||Array.isArray(t.args))&&(r(\\\"method\\\"),r(\\\"args\\\"),r(\\\"label\\\"),r(\\\"execute\\\"))}e.exports=function(t,e){i(t,e,{name:o,handleItemDefaults:l})}},{\\\"../../lib\\\":719,\\\"../../plots/array_container_defaults\\\":763,\\\"./attributes\\\":682,\\\"./constants\\\":683}],685:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../plots/plots\\\"),a=t(\\\"../color\\\"),o=t(\\\"../drawing\\\"),s=t(\\\"../../lib\\\"),l=t(\\\"../../lib/svg_text_utils\\\"),c=t(\\\"../../plot_api/plot_template\\\").arrayEditor,u=t(\\\"../../constants/alignment\\\").LINE_SPACING,h=t(\\\"./constants\\\"),f=t(\\\"./scrollbox\\\");function p(t){return t._index}function d(t,e){return+t.attr(h.menuIndexAttrName)===e._index}function g(t,e,r,n,i,a,o,s){e.active=o,c(t.layout,h.name,e).applyUpdate(\\\"active\\\",o),\\\"buttons\\\"===e.type?m(t,n,null,null,e):\\\"dropdown\\\"===e.type&&(i.attr(h.menuIndexAttrName,\\\"-1\\\"),v(t,n,i,a,e),s||m(t,n,i,a,e))}function v(t,e,r,n,i){var a=s.ensureSingle(e,\\\"g\\\",h.headerClassName,function(t){t.style(\\\"pointer-events\\\",\\\"all\\\")}),l=i._dims,c=i.active,u=i.buttons[c]||h.blankHeaderOpts,f={y:i.pad.t,yPad:0,x:i.pad.l,xPad:0,index:0},p={width:l.headerWidth,height:l.headerHeight};a.call(y,i,u,t).call(M,i,f,p),s.ensureSingle(e,\\\"text\\\",h.headerArrowClassName,function(t){t.classed(\\\"user-select-none\\\",!0).attr(\\\"text-anchor\\\",\\\"end\\\").call(o.font,i.font).text(h.arrowSymbol[i.direction])}).attr({x:l.headerWidth-h.arrowOffsetX+i.pad.l,y:l.headerHeight/2+h.textOffsetY+i.pad.t}),a.on(\\\"click\\\",function(){r.call(S,String(d(r,i)?-1:i._index)),m(t,e,r,n,i)}),a.on(\\\"mouseover\\\",function(){a.call(w)}),a.on(\\\"mouseout\\\",function(){a.call(k,i)}),o.setTranslate(e,l.lx,l.ly)}function m(t,e,r,a,o){r||(r=e).attr(\\\"pointer-events\\\",\\\"all\\\");var l=function(t){return-1==+t.attr(h.menuIndexAttrName)}(r)&&\\\"buttons\\\"!==o.type?[]:o.buttons,c=\\\"dropdown\\\"===o.type?h.dropdownButtonClassName:h.buttonClassName,u=r.selectAll(\\\"g.\\\"+c).data(s.filterVisible(l)),f=u.enter().append(\\\"g\\\").classed(c,!0),p=u.exit();\\\"dropdown\\\"===o.type?(f.attr(\\\"opacity\\\",\\\"0\\\").transition().attr(\\\"opacity\\\",\\\"1\\\"),p.transition().attr(\\\"opacity\\\",\\\"0\\\").remove()):p.remove();var d=0,v=0,m=o._dims,x=-1!==[\\\"up\\\",\\\"down\\\"].indexOf(o.direction);\\\"dropdown\\\"===o.type&&(x?v=m.headerHeight+h.gapButtonHeader:d=m.headerWidth+h.gapButtonHeader),\\\"dropdown\\\"===o.type&&\\\"up\\\"===o.direction&&(v=-h.gapButtonHeader+h.gapButton-m.openHeight),\\\"dropdown\\\"===o.type&&\\\"left\\\"===o.direction&&(d=-h.gapButtonHeader+h.gapButton-m.openWidth);var b={x:m.lx+d+o.pad.l,y:m.ly+v+o.pad.t,yPad:h.gapButton,xPad:h.gapButton,index:0},T={l:b.x+o.borderwidth,t:b.y+o.borderwidth};u.each(function(s,l){var c=n.select(this);c.call(y,o,s,t).call(M,o,b),c.on(\\\"click\\\",function(){n.event.defaultPrevented||(g(t,o,0,e,r,a,l),s.execute&&i.executeAPICommand(t,s.method,s.args),t.emit(\\\"plotly_buttonclicked\\\",{menu:o,button:s,active:o.active}))}),c.on(\\\"mouseover\\\",function(){c.call(w)}),c.on(\\\"mouseout\\\",function(){c.call(k,o),u.call(_,o)})}),u.call(_,o),x?(T.w=Math.max(m.openWidth,m.headerWidth),T.h=b.y-T.t):(T.w=b.x-T.l,T.h=Math.max(m.openHeight,m.headerHeight)),T.direction=o.direction,a&&(u.size()?function(t,e,r,n,i,a){var o,s,l,c=i.direction,u=\\\"up\\\"===c||\\\"down\\\"===c,f=i._dims,p=i.active;if(u)for(s=0,l=0;l<p;l++)s+=f.heights[l]+h.gapButton;else for(o=0,l=0;l<p;l++)o+=f.widths[l]+h.gapButton;n.enable(a,o,s),n.hbar&&n.hbar.attr(\\\"opacity\\\",\\\"0\\\").transition().attr(\\\"opacity\\\",\\\"1\\\");n.vbar&&n.vbar.attr(\\\"opacity\\\",\\\"0\\\").transition().attr(\\\"opacity\\\",\\\"1\\\")}(0,0,0,a,o,T):function(t){var e=!!t.hbar,r=!!t.vbar;e&&t.hbar.transition().attr(\\\"opacity\\\",\\\"0\\\").each(\\\"end\\\",function(){e=!1,r||t.disable()});r&&t.vbar.transition().attr(\\\"opacity\\\",\\\"0\\\").each(\\\"end\\\",function(){r=!1,e||t.disable()})}(a))}function y(t,e,r,n){t.call(x,e).call(b,e,r,n)}function x(t,e){s.ensureSingle(t,\\\"rect\\\",h.itemRectClassName,function(t){t.attr({rx:h.rx,ry:h.ry,\\\"shape-rendering\\\":\\\"crispEdges\\\"})}).call(a.stroke,e.bordercolor).call(a.fill,e.bgcolor).style(\\\"stroke-width\\\",e.borderwidth+\\\"px\\\")}function b(t,e,r,n){var i=s.ensureSingle(t,\\\"text\\\",h.itemTextClassName,function(t){t.classed(\\\"user-select-none\\\",!0).attr({\\\"text-anchor\\\":\\\"start\\\",\\\"data-notex\\\":1})}),a=r.label,c=n._fullLayout._meta;c&&(a=s.templateString(a,c)),i.call(o.font,e.font).text(a).call(l.convertToTspans,n)}function _(t,e){var r=e.active;t.each(function(t,i){var o=n.select(this);i===r&&e.showactive&&o.select(\\\"rect.\\\"+h.itemRectClassName).call(a.fill,h.activeColor)})}function w(t){t.select(\\\"rect.\\\"+h.itemRectClassName).call(a.fill,h.hoverColor)}function k(t,e){t.select(\\\"rect.\\\"+h.itemRectClassName).call(a.fill,e.bgcolor)}function T(t,e){var r=e._dims={width1:0,height1:0,heights:[],widths:[],totalWidth:0,totalHeight:0,openWidth:0,openHeight:0,lx:0,ly:0},a=o.tester.selectAll(\\\"g.\\\"+h.dropdownButtonClassName).data(s.filterVisible(e.buttons));a.enter().append(\\\"g\\\").classed(h.dropdownButtonClassName,!0);var c=-1!==[\\\"up\\\",\\\"down\\\"].indexOf(e.direction);a.each(function(i,a){var s=n.select(this);s.call(y,e,i,t);var f=s.select(\\\".\\\"+h.itemTextClassName),p=f.node()&&o.bBox(f.node()).width,d=Math.max(p+h.textPadX,h.minWidth),g=e.font.size*u,v=l.lineCount(f),m=Math.max(g*v,h.minHeight)+h.textOffsetY;m=Math.ceil(m),d=Math.ceil(d),r.widths[a]=d,r.heights[a]=m,r.height1=Math.max(r.height1,m),r.width1=Math.max(r.width1,d),c?(r.totalWidth=Math.max(r.totalWidth,d),r.openWidth=r.totalWidth,r.totalHeight+=m+h.gapButton,r.openHeight+=m+h.gapButton):(r.totalWidth+=d+h.gapButton,r.openWidth+=d+h.gapButton,r.totalHeight=Math.max(r.totalHeight,m),r.openHeight=r.totalHeight)}),c?r.totalHeight-=h.gapButton:r.totalWidth-=h.gapButton,r.headerWidth=r.width1+h.arrowPadX,r.headerHeight=r.height1,\\\"dropdown\\\"===e.type&&(c?(r.width1+=h.arrowPadX,r.totalHeight=r.height1):r.totalWidth=r.width1,r.totalWidth+=h.arrowPadX),a.remove();var f=r.totalWidth+e.pad.l+e.pad.r,p=r.totalHeight+e.pad.t+e.pad.b,d=t._fullLayout._size;r.lx=d.l+d.w*e.x,r.ly=d.t+d.h*(1-e.y);var g=\\\"left\\\";s.isRightAnchor(e)&&(r.lx-=f,g=\\\"right\\\"),s.isCenterAnchor(e)&&(r.lx-=f/2,g=\\\"center\\\");var v=\\\"top\\\";s.isBottomAnchor(e)&&(r.ly-=p,v=\\\"bottom\\\"),s.isMiddleAnchor(e)&&(r.ly-=p/2,v=\\\"middle\\\"),r.totalWidth=Math.ceil(r.totalWidth),r.totalHeight=Math.ceil(r.totalHeight),r.lx=Math.round(r.lx),r.ly=Math.round(r.ly),i.autoMargin(t,A(e),{x:e.x,y:e.y,l:f*({right:1,center:.5}[g]||0),r:f*({left:1,center:.5}[g]||0),b:p*({top:1,middle:.5}[v]||0),t:p*({bottom:1,middle:.5}[v]||0)})}function A(t){return h.autoMarginIdRoot+t._index}function M(t,e,r,n){n=n||{};var i=t.select(\\\".\\\"+h.itemRectClassName),a=t.select(\\\".\\\"+h.itemTextClassName),s=e.borderwidth,c=r.index,f=e._dims;o.setTranslate(t,s+r.x,s+r.y);var p=-1!==[\\\"up\\\",\\\"down\\\"].indexOf(e.direction),d=n.height||(p?f.heights[c]:f.height1);i.attr({x:0,y:0,width:n.width||(p?f.width1:f.widths[c]),height:d});var g=e.font.size*u,v=(l.lineCount(a)-1)*g/2;l.positionText(a,h.textOffsetX,d/2-v+h.textOffsetY),p?r.y+=f.heights[c]+r.yPad:r.x+=f.widths[c]+r.xPad,r.index++}function S(t,e){t.attr(h.menuIndexAttrName,e||\\\"-1\\\").selectAll(\\\"g.\\\"+h.dropdownButtonClassName).remove()}e.exports=function(t){var e=t._fullLayout,r=s.filterVisible(e[h.name]);function a(e){i.autoMargin(t,A(e))}var o=e._menulayer.selectAll(\\\"g.\\\"+h.containerClassName).data(r.length>0?[0]:[]);if(o.enter().append(\\\"g\\\").classed(h.containerClassName,!0).style(\\\"cursor\\\",\\\"pointer\\\"),o.exit().each(function(){n.select(this).selectAll(\\\"g.\\\"+h.headerGroupClassName).each(a)}).remove(),0!==r.length){var l=o.selectAll(\\\"g.\\\"+h.headerGroupClassName).data(r,p);l.enter().append(\\\"g\\\").classed(h.headerGroupClassName,!0);for(var c=s.ensureSingle(o,\\\"g\\\",h.dropdownButtonGroupClassName,function(t){t.style(\\\"pointer-events\\\",\\\"all\\\")}),u=0;u<r.length;u++){var y=r[u];T(t,y)}var x=\\\"updatemenus\\\"+e._uid,b=new f(t,c,x);l.enter().size()&&(c.node().parentNode.appendChild(c.node()),c.call(S)),l.exit().each(function(t){c.call(S),a(t)}).remove(),l.each(function(e){var r=n.select(this),a=\\\"dropdown\\\"===e.type?c:null;i.manageCommandObserver(t,e,e.buttons,function(n){g(t,e,e.buttons[n.index],r,a,b,n.index,!0)}),\\\"dropdown\\\"===e.type?(v(t,r,c,b,e),d(c,e)&&m(t,r,c,b,e)):m(t,r,null,null,e)})}}},{\\\"../../constants/alignment\\\":688,\\\"../../lib\\\":719,\\\"../../lib/svg_text_utils\\\":743,\\\"../../plot_api/plot_template\\\":757,\\\"../../plots/plots\\\":828,\\\"../color\\\":593,\\\"../drawing\\\":614,\\\"./constants\\\":683,\\\"./scrollbox\\\":687,d3:163}],686:[function(t,e,r){arguments[4][680][0].apply(r,arguments)},{\\\"./attributes\\\":682,\\\"./constants\\\":683,\\\"./defaults\\\":684,\\\"./draw\\\":685,dup:680}],687:[function(t,e,r){\\\"use strict\\\";e.exports=s;var n=t(\\\"d3\\\"),i=t(\\\"../color\\\"),a=t(\\\"../drawing\\\"),o=t(\\\"../../lib\\\");function s(t,e,r){this.gd=t,this.container=e,this.id=r,this.position=null,this.translateX=null,this.translateY=null,this.hbar=null,this.vbar=null,this.bg=this.container.selectAll(\\\"rect.scrollbox-bg\\\").data([0]),this.bg.exit().on(\\\".drag\\\",null).on(\\\"wheel\\\",null).remove(),this.bg.enter().append(\\\"rect\\\").classed(\\\"scrollbox-bg\\\",!0).style(\\\"pointer-events\\\",\\\"all\\\").attr({opacity:0,x:0,y:0,width:0,height:0})}s.barWidth=2,s.barLength=20,s.barRadius=2,s.barPad=1,s.barColor=\\\"#808BA4\\\",s.prototype.enable=function(t,e,r){var o=this.gd._fullLayout,l=o.width,c=o.height;this.position=t;var u,h,f,p,d=this.position.l,g=this.position.w,v=this.position.t,m=this.position.h,y=this.position.direction,x=\\\"down\\\"===y,b=\\\"left\\\"===y,_=\\\"up\\\"===y,w=g,k=m;x||b||\\\"right\\\"===y||_||(this.position.direction=\\\"down\\\",x=!0),x||_?(h=(u=d)+w,x?(f=v,k=(p=Math.min(f+k,c))-f):k=(p=v+k)-(f=Math.max(p-k,0))):(p=(f=v)+k,b?w=(h=d+w)-(u=Math.max(h-w,0)):(u=d,w=(h=Math.min(u+w,l))-u)),this._box={l:u,t:f,w:w,h:k};var T=g>w,A=s.barLength+2*s.barPad,M=s.barWidth+2*s.barPad,S=d,E=v+m;E+M>c&&(E=c-M);var C=this.container.selectAll(\\\"rect.scrollbar-horizontal\\\").data(T?[0]:[]);C.exit().on(\\\".drag\\\",null).remove(),C.enter().append(\\\"rect\\\").classed(\\\"scrollbar-horizontal\\\",!0).call(i.fill,s.barColor),T?(this.hbar=C.attr({rx:s.barRadius,ry:s.barRadius,x:S,y:E,width:A,height:M}),this._hbarXMin=S+A/2,this._hbarTranslateMax=w-A):(delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax);var L=m>k,P=s.barWidth+2*s.barPad,O=s.barLength+2*s.barPad,z=d+g,I=v;z+P>l&&(z=l-P);var D=this.container.selectAll(\\\"rect.scrollbar-vertical\\\").data(L?[0]:[]);D.exit().on(\\\".drag\\\",null).remove(),D.enter().append(\\\"rect\\\").classed(\\\"scrollbar-vertical\\\",!0).call(i.fill,s.barColor),L?(this.vbar=D.attr({rx:s.barRadius,ry:s.barRadius,x:z,y:I,width:P,height:O}),this._vbarYMin=I+O/2,this._vbarTranslateMax=k-O):(delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax);var R=this.id,F=u-.5,B=L?h+P+.5:h+.5,N=f-.5,j=T?p+M+.5:p+.5,U=o._topdefs.selectAll(\\\"#\\\"+R).data(T||L?[0]:[]);if(U.exit().remove(),U.enter().append(\\\"clipPath\\\").attr(\\\"id\\\",R).append(\\\"rect\\\"),T||L?(this._clipRect=U.select(\\\"rect\\\").attr({x:Math.floor(F),y:Math.floor(N),width:Math.ceil(B)-Math.floor(F),height:Math.ceil(j)-Math.floor(N)}),this.container.call(a.setClipUrl,R,this.gd),this.bg.attr({x:d,y:v,width:g,height:m})):(this.bg.attr({width:0,height:0}),this.container.on(\\\"wheel\\\",null).on(\\\".drag\\\",null).call(a.setClipUrl,null),delete this._clipRect),T||L){var V=n.behavior.drag().on(\\\"dragstart\\\",function(){n.event.sourceEvent.preventDefault()}).on(\\\"drag\\\",this._onBoxDrag.bind(this));this.container.on(\\\"wheel\\\",null).on(\\\"wheel\\\",this._onBoxWheel.bind(this)).on(\\\".drag\\\",null).call(V);var q=n.behavior.drag().on(\\\"dragstart\\\",function(){n.event.sourceEvent.preventDefault(),n.event.sourceEvent.stopPropagation()}).on(\\\"drag\\\",this._onBarDrag.bind(this));T&&this.hbar.on(\\\".drag\\\",null).call(q),L&&this.vbar.on(\\\".drag\\\",null).call(q)}this.setTranslate(e,r)},s.prototype.disable=function(){(this.hbar||this.vbar)&&(this.bg.attr({width:0,height:0}),this.container.on(\\\"wheel\\\",null).on(\\\".drag\\\",null).call(a.setClipUrl,null),delete this._clipRect),this.hbar&&(this.hbar.on(\\\".drag\\\",null),this.hbar.remove(),delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax),this.vbar&&(this.vbar.on(\\\".drag\\\",null),this.vbar.remove(),delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax)},s.prototype._onBoxDrag=function(){var t=this.translateX,e=this.translateY;this.hbar&&(t-=n.event.dx),this.vbar&&(e-=n.event.dy),this.setTranslate(t,e)},s.prototype._onBoxWheel=function(){var t=this.translateX,e=this.translateY;this.hbar&&(t+=n.event.deltaY),this.vbar&&(e+=n.event.deltaY),this.setTranslate(t,e)},s.prototype._onBarDrag=function(){var t=this.translateX,e=this.translateY;if(this.hbar){var r=t+this._hbarXMin,i=r+this._hbarTranslateMax;t=(o.constrain(n.event.x,r,i)-r)/(i-r)*(this.position.w-this._box.w)}if(this.vbar){var a=e+this._vbarYMin,s=a+this._vbarTranslateMax;e=(o.constrain(n.event.y,a,s)-a)/(s-a)*(this.position.h-this._box.h)}this.setTranslate(t,e)},s.prototype.setTranslate=function(t,e){var r=this.position.w-this._box.w,n=this.position.h-this._box.h;if(t=o.constrain(t||0,0,r),e=o.constrain(e||0,0,n),this.translateX=t,this.translateY=e,this.container.call(a.setTranslate,this._box.l-this.position.l-t,this._box.t-this.position.t-e),this._clipRect&&this._clipRect.attr({x:Math.floor(this.position.l+t-.5),y:Math.floor(this.position.t+e-.5)}),this.hbar){var i=t/r;this.hbar.call(a.setTranslate,t+i*this._hbarTranslateMax,e)}if(this.vbar){var s=e/n;this.vbar.call(a.setTranslate,t,e+s*this._vbarTranslateMax)}}},{\\\"../../lib\\\":719,\\\"../color\\\":593,\\\"../drawing\\\":614,d3:163}],688:[function(t,e,r){\\\"use strict\\\";e.exports={FROM_BL:{left:0,center:.5,right:1,bottom:0,middle:.5,top:1},FROM_TL:{left:0,center:.5,right:1,bottom:1,middle:.5,top:0},FROM_BR:{left:1,center:.5,right:0,bottom:0,middle:.5,top:1},LINE_SPACING:1.3,CAP_SHIFT:.7,MID_SHIFT:.35,OPPOSITE_SIDE:{left:\\\"right\\\",right:\\\"left\\\",top:\\\"bottom\\\",bottom:\\\"top\\\"}}},{}],689:[function(t,e,r){\\\"use strict\\\";e.exports={INCREASING:{COLOR:\\\"#3D9970\\\",SYMBOL:\\\"\\\\u25b2\\\"},DECREASING:{COLOR:\\\"#FF4136\\\",SYMBOL:\\\"\\\\u25bc\\\"}}},{}],690:[function(t,e,r){\\\"use strict\\\";e.exports={FORMAT_LINK:\\\"https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md#d3_format\\\",DATE_FORMAT_LINK:\\\"https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Formatting.md#format\\\"}},{}],691:[function(t,e,r){\\\"use strict\\\";e.exports={COMPARISON_OPS:[\\\"=\\\",\\\"!=\\\",\\\"<\\\",\\\">=\\\",\\\">\\\",\\\"<=\\\"],COMPARISON_OPS2:[\\\"=\\\",\\\"<\\\",\\\">=\\\",\\\">\\\",\\\"<=\\\"],INTERVAL_OPS:[\\\"[]\\\",\\\"()\\\",\\\"[)\\\",\\\"(]\\\",\\\"][\\\",\\\")(\\\",\\\"](\\\",\\\")[\\\"],SET_OPS:[\\\"{}\\\",\\\"}{\\\"],CONSTRAINT_REDUCTION:{\\\"=\\\":\\\"=\\\",\\\"<\\\":\\\"<\\\",\\\"<=\\\":\\\"<\\\",\\\">\\\":\\\">\\\",\\\">=\\\":\\\">\\\",\\\"[]\\\":\\\"[]\\\",\\\"()\\\":\\\"[]\\\",\\\"[)\\\":\\\"[]\\\",\\\"(]\\\":\\\"[]\\\",\\\"][\\\":\\\"][\\\",\\\")(\\\":\\\"][\\\",\\\"](\\\":\\\"][\\\",\\\")[\\\":\\\"][\\\"}}},{}],692:[function(t,e,r){\\\"use strict\\\";e.exports={solid:[[],0],dot:[[.5,1],200],dash:[[.5,1],50],longdash:[[.5,1],10],dashdot:[[.5,.625,.875,1],50],longdashdot:[[.5,.7,.8,1],10]}},{}],693:[function(t,e,r){\\\"use strict\\\";e.exports={circle:\\\"\\\\u25cf\\\",\\\"circle-open\\\":\\\"\\\\u25cb\\\",square:\\\"\\\\u25a0\\\",\\\"square-open\\\":\\\"\\\\u25a1\\\",diamond:\\\"\\\\u25c6\\\",\\\"diamond-open\\\":\\\"\\\\u25c7\\\",cross:\\\"+\\\",x:\\\"\\\\u274c\\\"}},{}],694:[function(t,e,r){\\\"use strict\\\";e.exports={SHOW_PLACEHOLDER:100,HIDE_PLACEHOLDER:1e3,DESELECTDIM:.2}},{}],695:[function(t,e,r){\\\"use strict\\\";e.exports={BADNUM:void 0,FP_SAFE:Number.MAX_VALUE/1e4,ONEAVGYEAR:315576e5,ONEAVGMONTH:26298e5,ONEDAY:864e5,ONEHOUR:36e5,ONEMIN:6e4,ONESEC:1e3,EPOCHJD:2440587.5,ALMOST_EQUAL:1-1e-6,LOG_CLIP:10,MINUS_SIGN:\\\"\\\\u2212\\\"}},{}],696:[function(t,e,r){\\\"use strict\\\";r.xmlns=\\\"http://www.w3.org/2000/xmlns/\\\",r.svg=\\\"http://www.w3.org/2000/svg\\\",r.xlink=\\\"http://www.w3.org/1999/xlink\\\",r.svgAttrs={xmlns:r.svg,\\\"xmlns:xlink\\\":r.xlink}},{}],697:[function(t,e,r){\\\"use strict\\\";r.version=\\\"1.49.4\\\",t(\\\"es6-promise\\\").polyfill(),t(\\\"../build/plotcss\\\"),t(\\\"./fonts/mathjax_config\\\")();for(var n=t(\\\"./registry\\\"),i=r.register=n.register,a=t(\\\"./plot_api\\\"),o=Object.keys(a),s=0;s<o.length;s++){var l=o[s];\\\"_\\\"!==l.charAt(0)&&(r[l]=a[l]),i({moduleType:\\\"apiMethod\\\",name:l,fn:a[l]})}i(t(\\\"./traces/scatter\\\")),i([t(\\\"./components/fx\\\"),t(\\\"./components/legend\\\"),t(\\\"./components/annotations\\\"),t(\\\"./components/annotations3d\\\"),t(\\\"./components/shapes\\\"),t(\\\"./components/images\\\"),t(\\\"./components/updatemenus\\\"),t(\\\"./components/sliders\\\"),t(\\\"./components/rangeslider\\\"),t(\\\"./components/rangeselector\\\"),t(\\\"./components/grid\\\"),t(\\\"./components/errorbars\\\"),t(\\\"./components/colorscale\\\"),t(\\\"./components/colorbar\\\")]),i([t(\\\"./locale-en\\\"),t(\\\"./locale-en-us\\\")]),r.Icons=t(\\\"./fonts/ploticon\\\"),r.Plots=t(\\\"./plots/plots\\\"),r.Fx=t(\\\"./components/fx\\\"),r.Snapshot=t(\\\"./snapshot\\\"),r.PlotSchema=t(\\\"./plot_api/plot_schema\\\"),r.Queue=t(\\\"./lib/queue\\\"),r.d3=t(\\\"d3\\\")},{\\\"../build/plotcss\\\":1,\\\"./components/annotations\\\":584,\\\"./components/annotations3d\\\":589,\\\"./components/colorbar\\\":599,\\\"./components/colorscale\\\":605,\\\"./components/errorbars\\\":620,\\\"./components/fx\\\":632,\\\"./components/grid\\\":636,\\\"./components/images\\\":641,\\\"./components/legend\\\":649,\\\"./components/rangeselector\\\":660,\\\"./components/rangeslider\\\":667,\\\"./components/shapes\\\":675,\\\"./components/sliders\\\":680,\\\"./components/updatemenus\\\":686,\\\"./fonts/mathjax_config\\\":698,\\\"./fonts/ploticon\\\":699,\\\"./lib/queue\\\":734,\\\"./locale-en\\\":748,\\\"./locale-en-us\\\":747,\\\"./plot_api\\\":752,\\\"./plot_api/plot_schema\\\":756,\\\"./plots/plots\\\":828,\\\"./registry\\\":847,\\\"./snapshot\\\":852,\\\"./traces/scatter\\\":1123,d3:163,\\\"es6-promise\\\":218}],698:[function(t,e,r){\\\"use strict\\\";e.exports=function(){\\\"undefined\\\"!=typeof MathJax&&(\\\"local\\\"!==(window.PlotlyConfig||{}).MathJaxConfig&&(MathJax.Hub.Config({messageStyle:\\\"none\\\",skipStartupTypeset:!0,displayAlign:\\\"left\\\",tex2jax:{inlineMath:[[\\\"$\\\",\\\"$\\\"],[\\\"\\\\\\\\(\\\",\\\"\\\\\\\\)\\\"]]}}),MathJax.Hub.Configured()))}},{}],699:[function(t,e,r){\\\"use strict\\\";e.exports={undo:{width:857.1,height:1e3,path:\\\"m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},home:{width:928.6,height:1e3,path:\\\"m786 296v-267q0-15-11-26t-25-10h-214v214h-143v-214h-214q-15 0-25 10t-11 26v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-4-7 2-12 7l-35 41q-4 5-3 13t6 12l401 334q18 15 42 15t43-15l136-114v109q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q5-5 6-12t-4-13z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},\\\"camera-retro\\\":{width:1e3,height:1e3,path:\\\"m518 386q0 8-5 13t-13 5q-37 0-63-27t-26-63q0-8 5-13t13-5 12 5 5 13q0 23 16 38t38 16q8 0 13 5t5 13z m125-73q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m-572-320h858v71h-858v-71z m643 320q0 89-62 152t-152 62-151-62-63-152 63-151 151-63 152 63 62 151z m-571 358h214v72h-214v-72z m-72-107h858v143h-462l-36-71h-360v-72z m929 143v-714q0-30-21-51t-50-21h-858q-29 0-50 21t-21 51v714q0 30 21 51t50 21h858q29 0 50-21t21-51z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},zoombox:{width:1e3,height:1e3,path:\\\"m1000-25l-250 251c40 63 63 138 63 218 0 224-182 406-407 406-224 0-406-182-406-406s183-406 407-406c80 0 155 22 218 62l250-250 125 125z m-812 250l0 438 437 0 0-438-437 0z m62 375l313 0 0-312-313 0 0 312z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},pan:{width:1e3,height:1e3,path:\\\"m1000 350l-187 188 0-125-250 0 0 250 125 0-188 187-187-187 125 0 0-250-250 0 0 125-188-188 186-187 0 125 252 0 0-250-125 0 187-188 188 188-125 0 0 250 250 0 0-126 187 188z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},zoom_plus:{width:875,height:1e3,path:\\\"m1 787l0-875 875 0 0 875-875 0z m687-500l-187 0 0-187-125 0 0 187-188 0 0 125 188 0 0 187 125 0 0-187 187 0 0-125z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},zoom_minus:{width:875,height:1e3,path:\\\"m0 788l0-876 875 0 0 876-875 0z m688-500l-500 0 0 125 500 0 0-125z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},autoscale:{width:1e3,height:1e3,path:\\\"m250 850l-187 0-63 0 0-62 0-188 63 0 0 188 187 0 0 62z m688 0l-188 0 0-62 188 0 0-188 62 0 0 188 0 62-62 0z m-875-938l0 188-63 0 0-188 0-62 63 0 187 0 0 62-187 0z m875 188l0-188-188 0 0-62 188 0 62 0 0 62 0 188-62 0z m-125 188l-1 0-93-94-156 156 156 156 92-93 2 0 0 250-250 0 0-2 93-92-156-156-156 156 94 92 0 2-250 0 0-250 0 0 93 93 157-156-157-156-93 94 0 0 0-250 250 0 0 0-94 93 156 157 156-157-93-93 0 0 250 0 0 250z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},tooltip_basic:{width:1500,height:1e3,path:\\\"m375 725l0 0-375-375 375-374 0-1 1125 0 0 750-1125 0z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},tooltip_compare:{width:1125,height:1e3,path:\\\"m187 786l0 2-187-188 188-187 0 0 937 0 0 373-938 0z m0-499l0 1-187-188 188-188 0 0 937 0 0 376-938-1z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},plotlylogo:{width:1542,height:1e3,path:\\\"m0-10h182v-140h-182v140z m228 146h183v-286h-183v286z m225 714h182v-1000h-182v1000z m225-285h182v-715h-182v715z m225 142h183v-857h-183v857z m231-428h182v-429h-182v429z m225-291h183v-138h-183v138z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},\\\"z-axis\\\":{width:1e3,height:1e3,path:\\\"m833 5l-17 108v41l-130-65 130-66c0 0 0 38 0 39 0-1 36-14 39-25 4-15-6-22-16-30-15-12-39-16-56-20-90-22-187-23-279-23-261 0-341 34-353 59 3 60 228 110 228 110-140-8-351-35-351-116 0-120 293-142 474-142 155 0 477 22 477 142 0 50-74 79-163 96z m-374 94c-58-5-99-21-99-40 0-24 65-43 144-43 79 0 143 19 143 43 0 19-42 34-98 40v216h87l-132 135-133-135h88v-216z m167 515h-136v1c16 16 31 34 46 52l84 109v54h-230v-71h124v-1c-16-17-28-32-44-51l-89-114v-51h245v72z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},\\\"3d_rotate\\\":{width:1e3,height:1e3,path:\\\"m922 660c-5 4-9 7-14 11-359 263-580-31-580-31l-102 28 58-400c0 1 1 1 2 2 118 108 351 249 351 249s-62 27-100 42c88 83 222 183 347 122 16-8 30-17 44-27-2 1-4 2-6 4z m36-329c0 0 64 229-88 296-62 27-124 14-175-11 157-78 225-208 249-266 8-19 11-31 11-31 2 5 6 15 11 32-5-13-8-20-8-20z m-775-239c70-31 117-50 198-32-121 80-199 346-199 346l-96-15-58-12c0 0 55-226 155-287z m603 133l-317-139c0 0 4-4 19-14 7-5 24-15 24-15s-177-147-389 4c235-287 536-112 536-112l31-22 100 299-4-1z m-298-153c6-4 14-9 24-15 0 0-17 10-24 15z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},camera:{width:1e3,height:1e3,path:\\\"m500 450c-83 0-150-67-150-150 0-83 67-150 150-150 83 0 150 67 150 150 0 83-67 150-150 150z m400 150h-120c-16 0-34 13-39 29l-31 93c-6 15-23 28-40 28h-340c-16 0-34-13-39-28l-31-94c-6-15-23-28-40-28h-120c-55 0-100-45-100-100v-450c0-55 45-100 100-100h800c55 0 100 45 100 100v450c0 55-45 100-100 100z m-400-550c-138 0-250 112-250 250 0 138 112 250 250 250 138 0 250-112 250-250 0-138-112-250-250-250z m365 380c-19 0-35 16-35 35 0 19 16 35 35 35 19 0 35-16 35-35 0-19-16-35-35-35z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},movie:{width:1e3,height:1e3,path:\\\"m938 413l-188-125c0 37-17 71-44 94 64 38 107 107 107 187 0 121-98 219-219 219-121 0-219-98-219-219 0-61 25-117 66-156h-115c30 33 49 76 49 125 0 103-84 187-187 187s-188-84-188-187c0-57 26-107 65-141-38-22-65-62-65-109v-250c0-70 56-126 125-126h500c69 0 125 56 125 126l188-126c34 0 62 28 62 63v375c0 35-28 63-62 63z m-750 0c-69 0-125 56-125 125s56 125 125 125 125-56 125-125-56-125-125-125z m406-1c-87 0-157 70-157 157 0 86 70 156 157 156s156-70 156-156-70-157-156-157z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},question:{width:857.1,height:1e3,path:\\\"m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},disk:{width:857.1,height:1e3,path:\\\"m214-7h429v214h-429v-214z m500 0h72v500q0 8-6 21t-11 20l-157 156q-5 6-19 12t-22 5v-232q0-22-15-38t-38-16h-322q-22 0-37 16t-16 38v232h-72v-714h72v232q0 22 16 38t37 16h465q22 0 38-16t15-38v-232z m-214 518v178q0 8-5 13t-13 5h-107q-7 0-13-5t-5-13v-178q0-8 5-13t13-5h107q7 0 13 5t5 13z m357-18v-518q0-22-15-38t-38-16h-750q-23 0-38 16t-16 38v750q0 22 16 38t38 16h517q23 0 50-12t42-26l156-157q16-15 27-42t11-49z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},lasso:{width:1031,height:1e3,path:\\\"m1018 538c-36 207-290 336-568 286-277-48-473-256-436-463 10-57 36-108 76-151-13-66 11-137 68-183 34-28 75-41 114-42l-55-70 0 0c-2-1-3-2-4-3-10-14-8-34 5-45 14-11 34-8 45 4 1 1 2 3 2 5l0 0 113 140c16 11 31 24 45 40 4 3 6 7 8 11 48-3 100 0 151 9 278 48 473 255 436 462z m-624-379c-80 14-149 48-197 96 42 42 109 47 156 9 33-26 47-66 41-105z m-187-74c-19 16-33 37-39 60 50-32 109-55 174-68-42-25-95-24-135 8z m360 75c-34-7-69-9-102-8 8 62-16 128-68 170-73 59-175 54-244-5-9 20-16 40-20 61-28 159 121 317 333 354s407-60 434-217c28-159-121-318-333-355z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},selectbox:{width:1e3,height:1e3,path:\\\"m0 850l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-285l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z\\\",transform:\\\"matrix(1 0 0 -1 0 850)\\\"},spikeline:{width:1e3,height:1e3,path:\\\"M512 409c0-57-46-104-103-104-57 0-104 47-104 104 0 57 47 103 104 103 57 0 103-46 103-103z m-327-39l92 0 0 92-92 0z m-185 0l92 0 0 92-92 0z m370-186l92 0 0 93-92 0z m0-184l92 0 0 92-92 0z\\\",transform:\\\"matrix(1.5 0 0 -1.5 0 850)\\\"},pencil:{width:1792,height:1792,path:\\\"M491 1536l91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192l416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z\\\",transform:\\\"matrix(1 0 0 1 0 1)\\\"},newplotlylogo:{name:\\\"newplotlylogo\\\",svg:\\\"<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 132 132'><defs><style>.cls-1 {fill: #119dff;} .cls-2 {fill: #25fefd;} .cls-3 {fill: #fff;}</style></defs><title>plotly-logomark</title><g id='symbol'><rect class='cls-1' width='132' height='132' rx='6' ry='6'/><circle class='cls-2' cx='78' cy='54' r='6'/><circle class='cls-2' cx='102' cy='30' r='6'/><circle class='cls-2' cx='78' cy='30' r='6'/><circle class='cls-2' cx='54' cy='30' r='6'/><circle class='cls-2' cx='30' cy='30' r='6'/><circle class='cls-2' cx='30' cy='54' r='6'/><path class='cls-3' d='M30,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,30,72Z'/><path class='cls-3' d='M78,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,78,72Z'/><path class='cls-3' d='M54,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,54,48Z'/><path class='cls-3' d='M102,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,102,48Z'/></g></svg>\\\"}}},{}],700:[function(t,e,r){\\\"use strict\\\";r.isLeftAnchor=function(t){return\\\"left\\\"===t.xanchor||\\\"auto\\\"===t.xanchor&&t.x<=1/3},r.isCenterAnchor=function(t){return\\\"center\\\"===t.xanchor||\\\"auto\\\"===t.xanchor&&t.x>1/3&&t.x<2/3},r.isRightAnchor=function(t){return\\\"right\\\"===t.xanchor||\\\"auto\\\"===t.xanchor&&t.x>=2/3},r.isTopAnchor=function(t){return\\\"top\\\"===t.yanchor||\\\"auto\\\"===t.yanchor&&t.y>=2/3},r.isMiddleAnchor=function(t){return\\\"middle\\\"===t.yanchor||\\\"auto\\\"===t.yanchor&&t.y>1/3&&t.y<2/3},r.isBottomAnchor=function(t){return\\\"bottom\\\"===t.yanchor||\\\"auto\\\"===t.yanchor&&t.y<=1/3}},{}],701:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./mod\\\"),i=n.mod,a=n.modHalf,o=Math.PI,s=2*o;function l(t){return Math.abs(t[1]-t[0])>s-1e-14}function c(t,e){return a(e-t,s)}function u(t,e){if(l(e))return!0;var r,n;e[0]<e[1]?(r=e[0],n=e[1]):(r=e[1],n=e[0]),(r=i(r,s))>(n=i(n,s))&&(n+=s);var a=i(t,s),o=a+s;return a>=r&&a<=n||o>=r&&o<=n}function h(t,e,r,n,i,a,c){i=i||0,a=a||0;var u,h,f,p,d,g=l([r,n]);function v(t,e){return[t*Math.cos(e)+i,a-t*Math.sin(e)]}g?(u=0,h=o,f=s):r<n?(u=r,f=n):(u=n,f=r),t<e?(p=t,d=e):(p=e,d=t);var m,y=Math.abs(f-u)<=o?0:1;function x(t,e,r){return\\\"A\\\"+[t,t]+\\\" \\\"+[0,y,r]+\\\" \\\"+v(t,e)}return g?m=null===p?\\\"M\\\"+v(d,u)+x(d,h,0)+x(d,f,0)+\\\"Z\\\":\\\"M\\\"+v(p,u)+x(p,h,0)+x(p,f,0)+\\\"ZM\\\"+v(d,u)+x(d,h,1)+x(d,f,1)+\\\"Z\\\":null===p?(m=\\\"M\\\"+v(d,u)+x(d,f,0),c&&(m+=\\\"L0,0Z\\\")):m=\\\"M\\\"+v(p,u)+\\\"L\\\"+v(d,u)+x(d,f,0)+\\\"L\\\"+v(p,f)+x(p,u,1)+\\\"Z\\\",m}e.exports={deg2rad:function(t){return t/180*o},rad2deg:function(t){return t/o*180},angleDelta:c,angleDist:function(t,e){return Math.abs(c(t,e))},isFullCircle:l,isAngleInsideSector:u,isPtInsideSector:function(t,e,r,n){return!!u(e,n)&&(r[0]<r[1]?(i=r[0],a=r[1]):(i=r[1],a=r[0]),t>=i&&t<=a);var i,a},pathArc:function(t,e,r,n,i){return h(null,t,e,r,n,i,0)},pathSector:function(t,e,r,n,i){return h(null,t,e,r,n,i,1)},pathAnnulus:function(t,e,r,n,i,a){return h(t,e,r,n,i,a,1)}}},{\\\"./mod\\\":726}],702:[function(t,e,r){\\\"use strict\\\";var n=Array.isArray,i=\\\"undefined\\\"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer:{isView:function(){return!1}},a=\\\"undefined\\\"==typeof DataView?function(){}:DataView;function o(t){return i.isView(t)&&!(t instanceof a)}function s(t){return n(t)||o(t)}function l(t,e,r){if(s(t)){if(s(t[0])){for(var n=r,i=0;i<t.length;i++)n=e(n,t[i].length);return n}return t.length}return 0}r.isTypedArray=o,r.isArrayOrTypedArray=s,r.isArray1D=function(t){return!s(t[0])},r.ensureArray=function(t,e){return n(t)||(t=[]),t.length=e,t},r.concat=function(){var t,e,r,i,a,o,s,l,c=[],u=!0,h=0;for(r=0;r<arguments.length;r++)(o=(i=arguments[r]).length)&&(e?c.push(i):(e=i,a=o),n(i)?t=!1:(u=!1,h?t!==i.constructor&&(t=!1):t=i.constructor),h+=o);if(!h)return[];if(!c.length)return e;if(u)return e.concat.apply(e,c);if(t){for((s=new t(h)).set(e),r=0;r<c.length;r++)i=c[r],s.set(i,a),a+=i.length;return s}for(s=new Array(h),l=0;l<e.length;l++)s[l]=e[l];for(r=0;r<c.length;r++){for(i=c[r],l=0;l<i.length;l++)s[a+l]=i[l];a+=l}return s},r.maxRowLength=function(t){return l(t,Math.max,0)},r.minRowLength=function(t){return l(t,Math.min,1/0)}},{}],703:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../constants/numerical\\\").BADNUM,a=/^['\\\"%,$#\\\\s']+|[, ]|['\\\"%,$#\\\\s']+$/g;e.exports=function(t){return\\\"string\\\"==typeof t&&(t=t.replace(a,\\\"\\\")),n(t)?Number(t):i}},{\\\"../constants/numerical\\\":695,\\\"fast-isnumeric\\\":225}],704:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){var e=t._fullLayout;e._glcanvas&&e._glcanvas.size()&&e._glcanvas.each(function(t){t.regl&&t.regl.clear({color:!0,depth:!0})})}},{}],705:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){t._responsiveChartHandler&&(window.removeEventListener(\\\"resize\\\",t._responsiveChartHandler),delete t._responsiveChartHandler)}},{}],706:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"tinycolor2\\\"),a=t(\\\"../plots/attributes\\\"),o=t(\\\"../components/colorscale/scales\\\"),s=t(\\\"../constants/interactions\\\").DESELECTDIM,l=t(\\\"./nested_property\\\"),c=t(\\\"./regex\\\").counter,u=t(\\\"./mod\\\").modHalf,h=t(\\\"./array\\\").isArrayOrTypedArray;function f(t,e){var n=r.valObjectMeta[e.valType];if(e.arrayOk&&h(t))return!0;if(n.validateFunction)return n.validateFunction(t,e);var i={},a=i,o={set:function(t){a=t}};return n.coerceFunction(t,o,i,e),a!==i}r.valObjectMeta={data_array:{coerceFunction:function(t,e,r){h(t)?e.set(t):void 0!==r&&e.set(r)}},enumerated:{coerceFunction:function(t,e,r,n){n.coerceNumber&&(t=+t),-1===n.values.indexOf(t)?e.set(r):e.set(t)},validateFunction:function(t,e){e.coerceNumber&&(t=+t);for(var r=e.values,n=0;n<r.length;n++){var i=String(r[n]);if(\\\"/\\\"===i.charAt(0)&&\\\"/\\\"===i.charAt(i.length-1)){if(new RegExp(i.substr(1,i.length-2)).test(t))return!0}else if(t===r[n])return!0}return!1}},boolean:{coerceFunction:function(t,e,r){!0===t||!1===t?e.set(t):e.set(r)}},number:{coerceFunction:function(t,e,r,i){!n(t)||void 0!==i.min&&t<i.min||void 0!==i.max&&t>i.max?e.set(r):e.set(+t)}},integer:{coerceFunction:function(t,e,r,i){t%1||!n(t)||void 0!==i.min&&t<i.min||void 0!==i.max&&t>i.max?e.set(r):e.set(+t)}},string:{coerceFunction:function(t,e,r,n){if(\\\"string\\\"!=typeof t){var i=\\\"number\\\"==typeof t;!0!==n.strict&&i?e.set(String(t)):e.set(r)}else n.noBlank&&!t?e.set(r):e.set(t)}},color:{coerceFunction:function(t,e,r){i(t).isValid()?e.set(t):e.set(r)}},colorlist:{coerceFunction:function(t,e,r){Array.isArray(t)&&t.length&&t.every(function(t){return i(t).isValid()})?e.set(t):e.set(r)}},colorscale:{coerceFunction:function(t,e,r){e.set(o.get(t,r))}},angle:{coerceFunction:function(t,e,r){\\\"auto\\\"===t?e.set(\\\"auto\\\"):n(t)?e.set(u(+t,360)):e.set(r)}},subplotid:{coerceFunction:function(t,e,r,n){var i=n.regex||c(r);\\\"string\\\"==typeof t&&i.test(t)?e.set(t):e.set(r)},validateFunction:function(t,e){var r=e.dflt;return t===r||\\\"string\\\"==typeof t&&!!c(r).test(t)}},flaglist:{coerceFunction:function(t,e,r,n){if(\\\"string\\\"==typeof t)if(-1===(n.extras||[]).indexOf(t)){for(var i=t.split(\\\"+\\\"),a=0;a<i.length;){var o=i[a];-1===n.flags.indexOf(o)||i.indexOf(o)<a?i.splice(a,1):a++}i.length?e.set(i.join(\\\"+\\\")):e.set(r)}else e.set(t);else e.set(r)}},any:{coerceFunction:function(t,e,r){void 0===t?e.set(r):e.set(t)}},info_array:{coerceFunction:function(t,e,n,i){function a(t,e,n){var i,a={set:function(t){i=t}};return void 0===n&&(n=e.dflt),r.valObjectMeta[e.valType].coerceFunction(t,a,n,e),i}var o=2===i.dimensions||\\\"1-2\\\"===i.dimensions&&Array.isArray(t)&&Array.isArray(t[0]);if(Array.isArray(t)){var s,l,c,u,h,f,p=i.items,d=[],g=Array.isArray(p),v=g&&o&&Array.isArray(p[0]),m=o&&g&&!v,y=g&&!m?p.length:t.length;if(n=Array.isArray(n)?n:[],o)for(s=0;s<y;s++)for(d[s]=[],c=Array.isArray(t[s])?t[s]:[],h=m?p.length:g?p[s].length:c.length,l=0;l<h;l++)u=m?p[l]:g?p[s][l]:p,void 0!==(f=a(c[l],u,(n[s]||[])[l]))&&(d[s][l]=f);else for(s=0;s<y;s++)void 0!==(f=a(t[s],g?p[s]:p,n[s]))&&(d[s]=f);e.set(d)}else e.set(n)},validateFunction:function(t,e){if(!Array.isArray(t))return!1;var r=e.items,n=Array.isArray(r),i=2===e.dimensions;if(!e.freeLength&&t.length!==r.length)return!1;for(var a=0;a<t.length;a++)if(i){if(!Array.isArray(t[a])||!e.freeLength&&t[a].length!==r[a].length)return!1;for(var o=0;o<t[a].length;o++)if(!f(t[a][o],n?r[a][o]:r))return!1}else if(!f(t[a],n?r[a]:r))return!1;return!0}}},r.coerce=function(t,e,n,i,a){var o=l(n,i).get(),s=l(t,i),c=l(e,i),u=s.get(),p=e._template;if(void 0===u&&p&&(u=l(p,i).get(),p=0),void 0===a&&(a=o.dflt),o.arrayOk&&h(u))return c.set(u),u;var d=r.valObjectMeta[o.valType].coerceFunction;d(u,c,a,o);var g=c.get();return p&&g===a&&!f(u,o)&&(d(u=l(p,i).get(),c,a,o),g=c.get()),g},r.coerce2=function(t,e,n,i,a){var o=l(t,i),s=r.coerce(t,e,n,i,a),c=o.get();return null!=c&&s},r.coerceFont=function(t,e,r){var n={};return r=r||{},n.family=t(e+\\\".family\\\",r.family),n.size=t(e+\\\".size\\\",r.size),n.color=t(e+\\\".color\\\",r.color),n},r.coerceHoverinfo=function(t,e,n){var i,o=e._module.attributes,s=o.hoverinfo?o:a,l=s.hoverinfo;if(1===n._dataLength){var c=\\\"all\\\"===l.dflt?l.flags.slice():l.dflt.split(\\\"+\\\");c.splice(c.indexOf(\\\"name\\\"),1),i=c.join(\\\"+\\\")}return r.coerce(t,e,s,\\\"hoverinfo\\\",i)},r.coerceSelectionMarkerOpacity=function(t,e){if(t.marker){var r,n,i=t.marker.opacity;if(void 0!==i)h(i)||t.selected||t.unselected||(r=i,n=s*i),e(\\\"selected.marker.opacity\\\",r),e(\\\"unselected.marker.opacity\\\",n)}},r.validate=f},{\\\"../components/colorscale/scales\\\":608,\\\"../constants/interactions\\\":694,\\\"../plots/attributes\\\":764,\\\"./array\\\":702,\\\"./mod\\\":726,\\\"./nested_property\\\":727,\\\"./regex\\\":735,\\\"fast-isnumeric\\\":225,tinycolor2:537}],707:[function(t,e,r){\\\"use strict\\\";var n,i,a=t(\\\"d3\\\"),o=t(\\\"fast-isnumeric\\\"),s=t(\\\"./loggers\\\"),l=t(\\\"./mod\\\").mod,c=t(\\\"../constants/numerical\\\"),u=c.BADNUM,h=c.ONEDAY,f=c.ONEHOUR,p=c.ONEMIN,d=c.ONESEC,g=c.EPOCHJD,v=t(\\\"../registry\\\"),m=a.time.format.utc,y=/^\\\\s*(-?\\\\d\\\\d\\\\d\\\\d|\\\\d\\\\d)(-(\\\\d?\\\\d)(-(\\\\d?\\\\d)([ Tt]([01]?\\\\d|2[0-3])(:([0-5]\\\\d)(:([0-5]\\\\d(\\\\.\\\\d+)?))?(Z|z|[+\\\\-]\\\\d\\\\d:?\\\\d\\\\d)?)?)?)?)?\\\\s*$/m,x=/^\\\\s*(-?\\\\d\\\\d\\\\d\\\\d|\\\\d\\\\d)(-(\\\\d?\\\\di?)(-(\\\\d?\\\\d)([ Tt]([01]?\\\\d|2[0-3])(:([0-5]\\\\d)(:([0-5]\\\\d(\\\\.\\\\d+)?))?(Z|z|[+\\\\-]\\\\d\\\\d:?\\\\d\\\\d)?)?)?)?)?\\\\s*$/m,b=(new Date).getFullYear()-70;function _(t){return t&&v.componentsRegistry.calendars&&\\\"string\\\"==typeof t&&\\\"gregorian\\\"!==t}function w(t,e){return String(t+Math.pow(10,e)).substr(1)}r.dateTick0=function(t,e){return _(t)?e?v.getComponentMethod(\\\"calendars\\\",\\\"CANONICAL_SUNDAY\\\")[t]:v.getComponentMethod(\\\"calendars\\\",\\\"CANONICAL_TICK\\\")[t]:e?\\\"2000-01-02\\\":\\\"2000-01-01\\\"},r.dfltRange=function(t){return _(t)?v.getComponentMethod(\\\"calendars\\\",\\\"DFLTRANGE\\\")[t]:[\\\"2000-01-01\\\",\\\"2001-01-01\\\"]},r.isJSDate=function(t){return\\\"object\\\"==typeof t&&null!==t&&\\\"function\\\"==typeof t.getTime},r.dateTime2ms=function(t,e){if(r.isJSDate(t)){var a=t.getTimezoneOffset()*p,o=(t.getUTCMinutes()-t.getMinutes())*p+(t.getUTCSeconds()-t.getSeconds())*d+(t.getUTCMilliseconds()-t.getMilliseconds());if(o){var s=3*p;a=a-s/2+l(o-a+s/2,s)}return(t=Number(t)-a)>=n&&t<=i?t:u}if(\\\"string\\\"!=typeof t&&\\\"number\\\"!=typeof t)return u;t=String(t);var c=_(e),m=t.charAt(0);!c||\\\"G\\\"!==m&&\\\"g\\\"!==m||(t=t.substr(1),e=\\\"\\\");var w=c&&\\\"chinese\\\"===e.substr(0,7),k=t.match(w?x:y);if(!k)return u;var T=k[1],A=k[3]||\\\"1\\\",M=Number(k[5]||1),S=Number(k[7]||0),E=Number(k[9]||0),C=Number(k[11]||0);if(c){if(2===T.length)return u;var L;T=Number(T);try{var P=v.getComponentMethod(\\\"calendars\\\",\\\"getCal\\\")(e);if(w){var O=\\\"i\\\"===A.charAt(A.length-1);A=parseInt(A,10),L=P.newDate(T,P.toMonthIndex(T,A,O),M)}else L=P.newDate(T,Number(A),M)}catch(t){return u}return L?(L.toJD()-g)*h+S*f+E*p+C*d:u}T=2===T.length?(Number(T)+2e3-b)%100+b:Number(T),A-=1;var z=new Date(Date.UTC(2e3,A,M,S,E));return z.setUTCFullYear(T),z.getUTCMonth()!==A?u:z.getUTCDate()!==M?u:z.getTime()+C*d},n=r.MIN_MS=r.dateTime2ms(\\\"-9999\\\"),i=r.MAX_MS=r.dateTime2ms(\\\"9999-12-31 23:59:59.9999\\\"),r.isDateTime=function(t,e){return r.dateTime2ms(t,e)!==u};var k=90*h,T=3*f,A=5*p;function M(t,e,r,n,i){if((e||r||n||i)&&(t+=\\\" \\\"+w(e,2)+\\\":\\\"+w(r,2),(n||i)&&(t+=\\\":\\\"+w(n,2),i))){for(var a=4;i%10==0;)a-=1,i/=10;t+=\\\".\\\"+w(i,a)}return t}r.ms2DateTime=function(t,e,r){if(\\\"number\\\"!=typeof t||!(t>=n&&t<=i))return u;e||(e=0);var a,o,s,c,y,x,b=Math.floor(10*l(t+.05,1)),w=Math.round(t-b/10);if(_(r)){var S=Math.floor(w/h)+g,E=Math.floor(l(t,h));try{a=v.getComponentMethod(\\\"calendars\\\",\\\"getCal\\\")(r).fromJD(S).formatDate(\\\"yyyy-mm-dd\\\")}catch(t){a=m(\\\"G%Y-%m-%d\\\")(new Date(w))}if(\\\"-\\\"===a.charAt(0))for(;a.length<11;)a=\\\"-0\\\"+a.substr(1);else for(;a.length<10;)a=\\\"0\\\"+a;o=e<k?Math.floor(E/f):0,s=e<k?Math.floor(E%f/p):0,c=e<T?Math.floor(E%p/d):0,y=e<A?E%d*10+b:0}else x=new Date(w),a=m(\\\"%Y-%m-%d\\\")(x),o=e<k?x.getUTCHours():0,s=e<k?x.getUTCMinutes():0,c=e<T?x.getUTCSeconds():0,y=e<A?10*x.getUTCMilliseconds()+b:0;return M(a,o,s,c,y)},r.ms2DateTimeLocal=function(t){if(!(t>=n+h&&t<=i-h))return u;var e=Math.floor(10*l(t+.05,1)),r=new Date(Math.round(t-e/10));return M(a.time.format(\\\"%Y-%m-%d\\\")(r),r.getHours(),r.getMinutes(),r.getSeconds(),10*r.getUTCMilliseconds()+e)},r.cleanDate=function(t,e,n){if(t===u)return e;if(r.isJSDate(t)||\\\"number\\\"==typeof t&&isFinite(t)){if(_(n))return s.error(\\\"JS Dates and milliseconds are incompatible with world calendars\\\",t),e;if(!(t=r.ms2DateTimeLocal(+t))&&void 0!==e)return e}else if(!r.isDateTime(t,n))return s.error(\\\"unrecognized date\\\",t),e;return t};var S=/%\\\\d?f/g;function E(t,e,r,n){t=t.replace(S,function(t){var r=Math.min(+t.charAt(1)||6,6);return(e/1e3%1+2).toFixed(r).substr(2).replace(/0+$/,\\\"\\\")||\\\"0\\\"});var i=new Date(Math.floor(e+.05));if(_(n))try{t=v.getComponentMethod(\\\"calendars\\\",\\\"worldCalFmt\\\")(t,e,n)}catch(t){return\\\"Invalid\\\"}return r(t)(i)}var C=[59,59.9,59.99,59.999,59.9999];r.formatDate=function(t,e,r,n,i,a){if(i=_(i)&&i,!e)if(\\\"y\\\"===r)e=a.year;else if(\\\"m\\\"===r)e=a.month;else{if(\\\"d\\\"!==r)return function(t,e){var r=l(t+.05,h),n=w(Math.floor(r/f),2)+\\\":\\\"+w(l(Math.floor(r/p),60),2);if(\\\"M\\\"!==e){o(e)||(e=0);var i=(100+Math.min(l(t/d,60),C[e])).toFixed(e).substr(1);e>0&&(i=i.replace(/0+$/,\\\"\\\").replace(/[\\\\.]$/,\\\"\\\")),n+=\\\":\\\"+i}return n}(t,r)+\\\"\\\\n\\\"+E(a.dayMonthYear,t,n,i);e=a.dayMonth+\\\"\\\\n\\\"+a.year}return E(e,t,n,i)};var L=3*h;r.incrementMonth=function(t,e,r){r=_(r)&&r;var n=l(t,h);if(t=Math.round(t-n),r)try{var i=Math.round(t/h)+g,a=v.getComponentMethod(\\\"calendars\\\",\\\"getCal\\\")(r),o=a.fromJD(i);return e%12?a.add(o,e,\\\"m\\\"):a.add(o,e/12,\\\"y\\\"),(o.toJD()-g)*h+n}catch(e){s.error(\\\"invalid ms \\\"+t+\\\" in calendar \\\"+r)}var c=new Date(t+L);return c.setUTCMonth(c.getUTCMonth()+e)+n-L},r.findExactDates=function(t,e){for(var r,n,i=0,a=0,s=0,l=0,c=_(e)&&v.getComponentMethod(\\\"calendars\\\",\\\"getCal\\\")(e),u=0;u<t.length;u++)if(n=t[u],o(n)){if(!(n%h))if(c)try{1===(r=c.fromJD(n/h+g)).day()?1===r.month()?i++:a++:s++}catch(t){}else 1===(r=new Date(n)).getUTCDate()?0===r.getUTCMonth()?i++:a++:s++}else l++;s+=a+=i;var f=t.length-l;return{exactYears:i/f,exactMonths:a/f,exactDays:s/f}}},{\\\"../constants/numerical\\\":695,\\\"../registry\\\":847,\\\"./loggers\\\":723,\\\"./mod\\\":726,d3:163,\\\"fast-isnumeric\\\":225}],708:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"./loggers\\\");function a(t){var e=t&&t.parentNode;e&&e.removeChild(t)}function o(t,e,r){var n=\\\"plotly.js-style-\\\"+t,a=document.getElementById(n);a||((a=document.createElement(\\\"style\\\")).setAttribute(\\\"id\\\",n),a.appendChild(document.createTextNode(\\\"\\\")),document.head.appendChild(a));var o=a.sheet;o.insertRule?o.insertRule(e+\\\"{\\\"+r+\\\"}\\\",0):o.addRule?o.addRule(e,r,0):i.warn(\\\"addStyleRule failed\\\")}e.exports={getGraphDiv:function(t){var e;if(\\\"string\\\"==typeof t){if(null===(e=document.getElementById(t)))throw new Error(\\\"No DOM element with id '\\\"+t+\\\"' exists on the page.\\\");return e}if(null==t)throw new Error(\\\"DOM element provided is null or undefined\\\");return t},isPlotDiv:function(t){var e=n.select(t);return e.node()instanceof HTMLElement&&e.size()&&e.classed(\\\"js-plotly-plot\\\")},removeElement:a,addStyleRule:function(t,e){o(\\\"global\\\",t,e)},addRelatedStyleRule:o,deleteRelatedStyleRule:function(t){var e=\\\"plotly.js-style-\\\"+t,r=document.getElementById(e);r&&a(r)}}},{\\\"./loggers\\\":723,d3:163}],709:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"events\\\").EventEmitter,i={init:function(t){if(t._ev instanceof n)return t;var e=new n,r=new n;return t._ev=e,t._internalEv=r,t.on=e.on.bind(e),t.once=e.once.bind(e),t.removeListener=e.removeListener.bind(e),t.removeAllListeners=e.removeAllListeners.bind(e),t._internalOn=r.on.bind(r),t._internalOnce=r.once.bind(r),t._removeInternalListener=r.removeListener.bind(r),t._removeAllInternalListeners=r.removeAllListeners.bind(r),t.emit=function(n,i){\\\"undefined\\\"!=typeof jQuery&&jQuery(t).trigger(n,i),e.emit(n,i),r.emit(n,i)},t},triggerHandler:function(t,e,r){var n,i;\\\"undefined\\\"!=typeof jQuery&&(n=jQuery(t).triggerHandler(e,r));var a=t._ev;if(!a)return n;var o,s=a._events[e];if(!s)return n;function l(t){return t.listener?(a.removeListener(e,t.listener),t.fired?void 0:(t.fired=!0,t.listener.apply(a,[r]))):t.apply(a,[r])}for(s=Array.isArray(s)?s:[s],o=0;o<s.length-1;o++)l(s[o]);return i=l(s[o]),void 0!==n?n:i},purge:function(t){return delete t._ev,delete t.on,delete t.once,delete t.removeListener,delete t.removeAllListeners,delete t.emit,delete t._ev,delete t._internalEv,delete t._internalOn,delete t._internalOnce,delete t._removeInternalListener,delete t._removeAllInternalListeners,t}};e.exports=i},{events:104}],710:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./is_plain_object.js\\\"),i=Array.isArray;function a(t,e,r,o){var s,l,c,u,h,f,p=t[0],d=t.length;if(2===d&&i(p)&&i(t[1])&&0===p.length){if(function(t,e){var r,n;for(r=0;r<t.length;r++){if(null!==(n=t[r])&&\\\"object\\\"==typeof n)return!1;void 0!==n&&(e[r]=n)}return!0}(t[1],p))return p;p.splice(0,p.length)}for(var g=1;g<d;g++)for(l in s=t[g])c=p[l],u=s[l],o&&i(u)?p[l]=u:e&&u&&(n(u)||(h=i(u)))?(h?(h=!1,f=c&&i(c)?c:[]):f=c&&n(c)?c:{},p[l]=a([f,u],e,r,o)):(\\\"undefined\\\"!=typeof u||r)&&(p[l]=u);return p}r.extendFlat=function(){return a(arguments,!1,!1,!1)},r.extendDeep=function(){return a(arguments,!0,!1,!1)},r.extendDeepAll=function(){return a(arguments,!0,!0,!1)},r.extendDeepNoArrays=function(){return a(arguments,!0,!1,!0)}},{\\\"./is_plain_object.js\\\":720}],711:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){for(var e={},r=[],n=0,i=0;i<t.length;i++){var a=t[i];1!==e[a]&&(e[a]=1,r[n++]=a)}return r}},{}],712:[function(t,e,r){\\\"use strict\\\";function n(t){return!0===t.visible}function i(t){var e=t[0].trace;return!0===e.visible&&0!==e._length}e.exports=function(t){for(var e,r=(e=t,Array.isArray(e)&&Array.isArray(e[0])&&e[0][0]&&e[0][0].trace?i:n),a=[],o=0;o<t.length;o++){var s=t[o];r(s)&&a.push(s)}return a}},{}],713:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"country-regex\\\"),i=t(\\\"../lib\\\"),a=Object.keys(n),o={\\\"ISO-3\\\":i.identity,\\\"USA-states\\\":i.identity,\\\"country names\\\":function(t){for(var e=0;e<a.length;e++){var r=a[e],o=new RegExp(n[r]);if(o.test(t.trim().toLowerCase()))return r}return i.log(\\\"Unrecognized country name: \\\"+t+\\\".\\\"),!1}};e.exports={locationToFeature:function(t,e,r){if(!e||\\\"string\\\"!=typeof e)return!1;var n,a,s,l=o[t](e);if(l){if(\\\"USA-states\\\"===t)for(n=[],s=0;s<r.length;s++)(a=r[s]).properties&&a.properties.gu&&\\\"USA\\\"===a.properties.gu&&n.push(a);else n=r;for(s=0;s<n.length;s++)if((a=n[s]).id===l)return a;i.log([\\\"Location with id\\\",l,\\\"does not have a matching topojson feature at this resolution.\\\"].join(\\\" \\\"))}return!1}}},{\\\"../lib\\\":719,\\\"country-regex\\\":134}],714:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../constants/numerical\\\").BADNUM;r.calcTraceToLineCoords=function(t){for(var e=t[0].trace.connectgaps,r=[],i=[],a=0;a<t.length;a++){var o=t[a].lonlat;o[0]!==n?i.push(o):!e&&i.length>0&&(r.push(i),i=[])}return i.length>0&&r.push(i),r},r.makeLine=function(t){return 1===t.length?{type:\\\"LineString\\\",coordinates:t[0]}:{type:\\\"MultiLineString\\\",coordinates:t}},r.makePolygon=function(t){if(1===t.length)return{type:\\\"Polygon\\\",coordinates:t};for(var e=new Array(t.length),r=0;r<t.length;r++)e[r]=[t[r]];return{type:\\\"MultiPolygon\\\",coordinates:e}},r.makeBlank=function(){return{type:\\\"Point\\\",coordinates:[]}}},{\\\"../constants/numerical\\\":695}],715:[function(t,e,r){\\\"use strict\\\";var n,i,a,o=t(\\\"./mod\\\").mod;function s(t,e,r,n,i,a,o,s){var l=r-t,c=i-t,u=o-i,h=n-e,f=a-e,p=s-a,d=l*p-u*h;if(0===d)return null;var g=(c*p-u*f)/d,v=(c*h-l*f)/d;return v<0||v>1||g<0||g>1?null:{x:t+l*g,y:e+h*g}}function l(t,e,r,n,i){var a=n*t+i*e;if(a<0)return n*n+i*i;if(a>r){var o=n-t,s=i-e;return o*o+s*s}var l=n*e-i*t;return l*l/r}r.segmentsIntersect=s,r.segmentDistance=function(t,e,r,n,i,a,o,c){if(s(t,e,r,n,i,a,o,c))return 0;var u=r-t,h=n-e,f=o-i,p=c-a,d=u*u+h*h,g=f*f+p*p,v=Math.min(l(u,h,d,i-t,a-e),l(u,h,d,o-t,c-e),l(f,p,g,t-i,e-a),l(f,p,g,r-i,n-a));return Math.sqrt(v)},r.getTextLocation=function(t,e,r,s){if(t===i&&s===a||(n={},i=t,a=s),n[r])return n[r];var l=t.getPointAtLength(o(r-s/2,e)),c=t.getPointAtLength(o(r+s/2,e)),u=Math.atan((c.y-l.y)/(c.x-l.x)),h=t.getPointAtLength(o(r,e)),f={x:(4*h.x+l.x+c.x)/6,y:(4*h.y+l.y+c.y)/6,theta:u};return n[r]=f,f},r.clearLocationCache=function(){i=null},r.getVisibleSegment=function(t,e,r){var n,i,a=e.left,o=e.right,s=e.top,l=e.bottom,c=0,u=t.getTotalLength(),h=u;function f(e){var r=t.getPointAtLength(e);0===e?n=r:e===u&&(i=r);var c=r.x<a?a-r.x:r.x>o?r.x-o:0,h=r.y<s?s-r.y:r.y>l?r.y-l:0;return Math.sqrt(c*c+h*h)}for(var p=f(c);p;){if((c+=p+r)>h)return;p=f(c)}for(p=f(h);p;){if(c>(h-=p+r))return;p=f(h)}return{min:c,max:h,len:h-c,total:u,isClosed:0===c&&h===u&&Math.abs(n.x-i.x)<.1&&Math.abs(n.y-i.y)<.1}},r.findPointOnPath=function(t,e,r,n){for(var i,a,o,s=(n=n||{}).pathLength||t.getTotalLength(),l=n.tolerance||.001,c=n.iterationLimit||30,u=t.getPointAtLength(0)[r]>t.getPointAtLength(s)[r]?-1:1,h=0,f=0,p=s;h<c;){if(i=(f+p)/2,o=(a=t.getPointAtLength(i))[r]-e,Math.abs(o)<l)return a;u*o>0?p=i:f=i,h++}return a}},{\\\"./mod\\\":726}],716:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"tinycolor2\\\"),a=t(\\\"color-normalize\\\"),o=t(\\\"../components/colorscale\\\"),s=t(\\\"../components/color/attributes\\\").defaultLine,l=t(\\\"./array\\\").isArrayOrTypedArray,c=a(s),u=1;function h(t,e){var r=t;return r[3]*=e,r}function f(t){if(n(t))return c;var e=a(t);return e.length?e:c}function p(t){return n(t)?t:u}e.exports={formatColor:function(t,e,r){var n,i,s,d,g,v=t.color,m=l(v),y=l(e),x=o.extractOpts(t),b=[];if(n=void 0!==x.colorscale?o.makeColorScaleFuncFromTrace(t):f,i=m?function(t,e){return void 0===t[e]?c:a(n(t[e]))}:f,s=y?function(t,e){return void 0===t[e]?u:p(t[e])}:p,m||y)for(var _=0;_<r;_++)d=i(v,_),g=s(e,_),b[_]=h(d,g);else b=h(a(v),e);return b},parseColorScale:function(t,e){void 0===e&&(e=1);var r=o.extractOpts(t);return(r.reversescale?o.flipScale(r.colorscale):r.colorscale).map(function(t){var r=t[0],n=i(t[1]).toRgb();return{index:r,rgb:[n.r,n.g,n.b,e]}})}}},{\\\"../components/color/attributes\\\":592,\\\"../components/colorscale\\\":605,\\\"./array\\\":702,\\\"color-normalize\\\":120,\\\"fast-isnumeric\\\":225,tinycolor2:537}],717:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./identity\\\");function i(t){return[t]}e.exports={keyFun:function(t){return t.key},repeat:i,descend:n,wrap:i,unwrap:function(t){return t[0]}}},{\\\"./identity\\\":718}],718:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){return t}},{}],719:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"fast-isnumeric\\\"),a=t(\\\"../constants/numerical\\\"),o=a.FP_SAFE,s=a.BADNUM,l=e.exports={};l.nestedProperty=t(\\\"./nested_property\\\"),l.keyedContainer=t(\\\"./keyed_container\\\"),l.relativeAttr=t(\\\"./relative_attr\\\"),l.isPlainObject=t(\\\"./is_plain_object\\\"),l.toLogRange=t(\\\"./to_log_range\\\"),l.relinkPrivateKeys=t(\\\"./relink_private\\\");var c=t(\\\"./array\\\");l.isTypedArray=c.isTypedArray,l.isArrayOrTypedArray=c.isArrayOrTypedArray,l.isArray1D=c.isArray1D,l.ensureArray=c.ensureArray,l.concat=c.concat,l.maxRowLength=c.maxRowLength,l.minRowLength=c.minRowLength;var u=t(\\\"./mod\\\");l.mod=u.mod,l.modHalf=u.modHalf;var h=t(\\\"./coerce\\\");l.valObjectMeta=h.valObjectMeta,l.coerce=h.coerce,l.coerce2=h.coerce2,l.coerceFont=h.coerceFont,l.coerceHoverinfo=h.coerceHoverinfo,l.coerceSelectionMarkerOpacity=h.coerceSelectionMarkerOpacity,l.validate=h.validate;var f=t(\\\"./dates\\\");l.dateTime2ms=f.dateTime2ms,l.isDateTime=f.isDateTime,l.ms2DateTime=f.ms2DateTime,l.ms2DateTimeLocal=f.ms2DateTimeLocal,l.cleanDate=f.cleanDate,l.isJSDate=f.isJSDate,l.formatDate=f.formatDate,l.incrementMonth=f.incrementMonth,l.dateTick0=f.dateTick0,l.dfltRange=f.dfltRange,l.findExactDates=f.findExactDates,l.MIN_MS=f.MIN_MS,l.MAX_MS=f.MAX_MS;var p=t(\\\"./search\\\");l.findBin=p.findBin,l.sorterAsc=p.sorterAsc,l.sorterDes=p.sorterDes,l.distinctVals=p.distinctVals,l.roundUp=p.roundUp,l.sort=p.sort,l.findIndexOfMin=p.findIndexOfMin;var d=t(\\\"./stats\\\");l.aggNums=d.aggNums,l.len=d.len,l.mean=d.mean,l.median=d.median,l.midRange=d.midRange,l.variance=d.variance,l.stdev=d.stdev,l.interp=d.interp;var g=t(\\\"./matrix\\\");l.init2dArray=g.init2dArray,l.transposeRagged=g.transposeRagged,l.dot=g.dot,l.translationMatrix=g.translationMatrix,l.rotationMatrix=g.rotationMatrix,l.rotationXYMatrix=g.rotationXYMatrix,l.apply2DTransform=g.apply2DTransform,l.apply2DTransform2=g.apply2DTransform2;var v=t(\\\"./angles\\\");l.deg2rad=v.deg2rad,l.rad2deg=v.rad2deg,l.angleDelta=v.angleDelta,l.angleDist=v.angleDist,l.isFullCircle=v.isFullCircle,l.isAngleInsideSector=v.isAngleInsideSector,l.isPtInsideSector=v.isPtInsideSector,l.pathArc=v.pathArc,l.pathSector=v.pathSector,l.pathAnnulus=v.pathAnnulus;var m=t(\\\"./anchor_utils\\\");l.isLeftAnchor=m.isLeftAnchor,l.isCenterAnchor=m.isCenterAnchor,l.isRightAnchor=m.isRightAnchor,l.isTopAnchor=m.isTopAnchor,l.isMiddleAnchor=m.isMiddleAnchor,l.isBottomAnchor=m.isBottomAnchor;var y=t(\\\"./geometry2d\\\");l.segmentsIntersect=y.segmentsIntersect,l.segmentDistance=y.segmentDistance,l.getTextLocation=y.getTextLocation,l.clearLocationCache=y.clearLocationCache,l.getVisibleSegment=y.getVisibleSegment,l.findPointOnPath=y.findPointOnPath;var x=t(\\\"./extend\\\");l.extendFlat=x.extendFlat,l.extendDeep=x.extendDeep,l.extendDeepAll=x.extendDeepAll,l.extendDeepNoArrays=x.extendDeepNoArrays;var b=t(\\\"./loggers\\\");l.log=b.log,l.warn=b.warn,l.error=b.error;var _=t(\\\"./regex\\\");l.counterRegex=_.counter;var w=t(\\\"./throttle\\\");l.throttle=w.throttle,l.throttleDone=w.done,l.clearThrottle=w.clear;var k=t(\\\"./dom\\\");function T(t){var e={};for(var r in t)for(var n=t[r],i=0;i<n.length;i++)e[n[i]]=+r;return e}l.getGraphDiv=k.getGraphDiv,l.isPlotDiv=k.isPlotDiv,l.removeElement=k.removeElement,l.addStyleRule=k.addStyleRule,l.addRelatedStyleRule=k.addRelatedStyleRule,l.deleteRelatedStyleRule=k.deleteRelatedStyleRule,l.clearResponsive=t(\\\"./clear_responsive\\\"),l.makeTraceGroups=t(\\\"./make_trace_groups\\\"),l._=t(\\\"./localize\\\"),l.notifier=t(\\\"./notifier\\\"),l.filterUnique=t(\\\"./filter_unique\\\"),l.filterVisible=t(\\\"./filter_visible\\\"),l.pushUnique=t(\\\"./push_unique\\\"),l.cleanNumber=t(\\\"./clean_number\\\"),l.ensureNumber=function(t){return i(t)?(t=Number(t))<-o||t>o?s:i(t)?Number(t):s:s},l.isIndex=function(t,e){return!(void 0!==e&&t>=e)&&(i(t)&&t>=0&&t%1==0)},l.noop=t(\\\"./noop\\\"),l.identity=t(\\\"./identity\\\"),l.repeat=function(t,e){for(var r=new Array(e),n=0;n<e;n++)r[n]=t;return r},l.swapAttrs=function(t,e,r,n){r||(r=\\\"x\\\"),n||(n=\\\"y\\\");for(var i=0;i<e.length;i++){var a=e[i],o=l.nestedProperty(t,a.replace(\\\"?\\\",r)),s=l.nestedProperty(t,a.replace(\\\"?\\\",n)),c=o.get();o.set(s.get()),s.set(c)}},l.raiseToTop=function(t){t.parentNode.appendChild(t)},l.cancelTransition=function(t){return t.transition().duration(0)},l.constrain=function(t,e,r){return e>r?Math.max(r,Math.min(e,t)):Math.max(e,Math.min(r,t))},l.bBoxIntersect=function(t,e,r){return r=r||0,t.left<=e.right+r&&e.left<=t.right+r&&t.top<=e.bottom+r&&e.top<=t.bottom+r},l.simpleMap=function(t,e,r,n){for(var i=t.length,a=new Array(i),o=0;o<i;o++)a[o]=e(t[o],r,n);return a},l.randstr=function t(e,r,n,i){if(n||(n=16),void 0===r&&(r=24),r<=0)return\\\"0\\\";var a,o,s=Math.log(Math.pow(2,r))/Math.log(n),c=\\\"\\\";for(a=2;s===1/0;a*=2)s=Math.log(Math.pow(2,r/a))/Math.log(n)*a;var u=s-Math.floor(s);for(a=0;a<Math.floor(s);a++)c=Math.floor(Math.random()*n).toString(n)+c;u&&(o=Math.pow(n,u),c=Math.floor(Math.random()*o).toString(n)+c);var h=parseInt(c,n);return e&&e[c]||h!==1/0&&h>=Math.pow(2,r)?i>10?(l.warn(\\\"randstr failed uniqueness\\\"),c):t(e,r,n,(i||0)+1):c},l.OptionControl=function(t,e){t||(t={}),e||(e=\\\"opt\\\");var r={optionList:[],_newoption:function(n){n[e]=t,r[n.name]=n,r.optionList.push(n)}};return r[\\\"_\\\"+e]=t,r},l.smooth=function(t,e){if((e=Math.round(e)||0)<2)return t;var r,n,i,a,o=t.length,s=2*o,l=2*e-1,c=new Array(l),u=new Array(o);for(r=0;r<l;r++)c[r]=(1-Math.cos(Math.PI*(r+1)/e))/(2*e);for(r=0;r<o;r++){for(a=0,n=0;n<l;n++)(i=r+n+1-e)<-o?i-=s*Math.round(i/s):i>=s&&(i-=s*Math.floor(i/s)),i<0?i=-1-i:i>=o&&(i=s-1-i),a+=t[i]*c[n];u[r]=a}return u},l.syncOrAsync=function(t,e,r){var n;function i(){return l.syncOrAsync(t,e,r)}for(;t.length;)if((n=(0,t.splice(0,1)[0])(e))&&n.then)return n.then(i).then(void 0,l.promiseError);return r&&r(e)},l.stripTrailingSlash=function(t){return\\\"/\\\"===t.substr(-1)?t.substr(0,t.length-1):t},l.noneOrAll=function(t,e,r){if(t){var n,i=!1,a=!0;for(n=0;n<r.length;n++)null!=t[r[n]]?i=!0:a=!1;if(i&&!a)for(n=0;n<r.length;n++)t[r[n]]=e[r[n]]}},l.mergeArray=function(t,e,r,n){var i=\\\"function\\\"==typeof n;if(l.isArrayOrTypedArray(t))for(var a=Math.min(t.length,e.length),o=0;o<a;o++){var s=t[o];e[o][r]=i?n(s):s}},l.mergeArrayCastPositive=function(t,e,r){return l.mergeArray(t,e,r,function(t){var e=+t;return isFinite(e)&&e>0?e:0})},l.fillArray=function(t,e,r,n){if(n=n||l.identity,l.isArrayOrTypedArray(t))for(var i=0;i<e.length;i++)e[i][r]=n(t[i])},l.castOption=function(t,e,r,n){n=n||l.identity;var i=l.nestedProperty(t,r).get();return l.isArrayOrTypedArray(i)?Array.isArray(e)&&l.isArrayOrTypedArray(i[e[0]])?n(i[e[0]][e[1]]):n(i[e]):i},l.extractOption=function(t,e,r,n){if(r in t)return t[r];var i=l.nestedProperty(e,n).get();return Array.isArray(i)?void 0:i},l.tagSelected=function(t,e,r){var n,i,a=e.selectedpoints,o=e._indexToPoints;o&&(n=T(o));for(var s=0;s<a.length;s++){var c=a[s];if(l.isIndex(c)){var u=n?n[c]:c,h=r?r[u]:u;void 0!==(i=h)&&i<t.length&&(t[h].selected=1)}}},l.selIndices2selPoints=function(t){var e=t.selectedpoints,r=t._indexToPoints;if(r){for(var n=T(r),i=[],a=0;a<e.length;a++){var o=e[a];if(l.isIndex(o)){var s=n[o];l.isIndex(s)&&i.push(s)}}return i}return e},l.getTargetArray=function(t,e){var r=e.target;if(\\\"string\\\"==typeof r&&r){var n=l.nestedProperty(t,r).get();return!!Array.isArray(n)&&n}return!!Array.isArray(r)&&r},l.minExtend=function(t,e){var r={};\\\"object\\\"!=typeof e&&(e={});var n,i,a,o=Object.keys(t);for(n=0;n<o.length;n++)a=t[i=o[n]],\\\"_\\\"!==i.charAt(0)&&\\\"function\\\"!=typeof a&&(\\\"module\\\"===i?r[i]=a:Array.isArray(a)?r[i]=\\\"colorscale\\\"===i?a.slice():a.slice(0,3):r[i]=a&&\\\"object\\\"==typeof a?l.minExtend(t[i],e[i]):a);for(o=Object.keys(e),n=0;n<o.length;n++)\\\"object\\\"==typeof(a=e[i=o[n]])&&i in r&&\\\"object\\\"==typeof r[i]||(r[i]=a);return r},l.titleCase=function(t){return t.charAt(0).toUpperCase()+t.substr(1)},l.containsAny=function(t,e){for(var r=0;r<e.length;r++)if(-1!==t.indexOf(e[r]))return!0;return!1},l.isIE=function(){return\\\"undefined\\\"!=typeof window.navigator.msSaveBlob};var A=/MSIE [1-9]\\\\./;l.isIE9orBelow=function(){return l.isIE()&&A.test(window.navigator.userAgent)};var M=/Version\\\\/[\\\\d\\\\.]+.*Safari/;l.isSafari=function(){return M.test(window.navigator.userAgent)},l.isD3Selection=function(t){return t&&\\\"function\\\"==typeof t.classed},l.ensureSingle=function(t,e,r,n){var i=t.select(e+(r?\\\".\\\"+r:\\\"\\\"));if(i.size())return i;var a=t.append(e);return r&&a.classed(r,!0),n&&a.call(n),a},l.ensureSingleById=function(t,e,r,n){var i=t.select(e+\\\"#\\\"+r);if(i.size())return i;var a=t.append(e).attr(\\\"id\\\",r);return n&&a.call(n),a},l.objectFromPath=function(t,e){for(var r,n=t.split(\\\".\\\"),i=r={},a=0;a<n.length;a++){var o=n[a],s=null,l=n[a].match(/(.*)\\\\[([0-9]+)\\\\]/);l?(o=l[1],s=l[2],r=r[o]=[],a===n.length-1?r[s]=e:r[s]={},r=r[s]):(a===n.length-1?r[o]=e:r[o]={},r=r[o])}return i};var S=/^([^\\\\[\\\\.]+)\\\\.(.+)?/,E=/^([^\\\\.]+)\\\\[([0-9]+)\\\\](\\\\.)?(.+)?/;l.expandObjectPaths=function(t){var e,r,n,i,a,o,s;if(\\\"object\\\"==typeof t&&!Array.isArray(t))for(r in t)t.hasOwnProperty(r)&&((e=r.match(S))?(i=t[r],n=e[1],delete t[r],t[n]=l.extendDeepNoArrays(t[n]||{},l.objectFromPath(r,l.expandObjectPaths(i))[n])):(e=r.match(E))?(i=t[r],n=e[1],a=parseInt(e[2]),delete t[r],t[n]=t[n]||[],\\\".\\\"===e[3]?(s=e[4],o=t[n][a]=t[n][a]||{},l.extendDeepNoArrays(o,l.objectFromPath(s,l.expandObjectPaths(i)))):t[n][a]=l.expandObjectPaths(i)):t[r]=l.expandObjectPaths(t[r]));return t},l.numSeparate=function(t,e,r){if(r||(r=!1),\\\"string\\\"!=typeof e||0===e.length)throw new Error(\\\"Separator string required for formatting!\\\");\\\"number\\\"==typeof t&&(t=String(t));var n=/(\\\\d+)(\\\\d{3})/,i=e.charAt(0),a=e.charAt(1),o=t.split(\\\".\\\"),s=o[0],l=o.length>1?i+o[1]:\\\"\\\";if(a&&(o.length>1||s.length>4||r))for(;n.test(s);)s=s.replace(n,\\\"$1\\\"+a+\\\"$2\\\");return s+l},l.TEMPLATE_STRING_REGEX=/%{([^\\\\s%{}:]*)(:[^}]*)?}/g;var C=/^\\\\w*$/;l.templateString=function(t,e){var r={};return t.replace(l.TEMPLATE_STRING_REGEX,function(t,n){return C.test(n)?e[n]||\\\"\\\":(r[n]=r[n]||l.nestedProperty(e,n).get,r[n]()||\\\"\\\")})};var L=/^:/,P=0;l.hovertemplateString=function(t,e,r){var i=arguments,a={};return t.replace(l.TEMPLATE_STRING_REGEX,function(t,o,s){var c,u,h;for(h=3;h<i.length;h++){if((c=i[h]).hasOwnProperty(o)){u=c[o];break}if(C.test(o)||(u=a[o]||l.nestedProperty(c,o).get())&&(a[o]=u),void 0!==u)break}(void 0===u&&(P<10&&(l.warn(\\\"Variable '\\\"+o+\\\"' in hovertemplate could not be found!\\\"),u=t),10===P&&l.warn(\\\"Too many hovertemplate warnings - additional warnings will be suppressed\\\"),P++),s)?u=(r?r.numberFormat:n.format)(s.replace(L,\\\"\\\"))(u):e.hasOwnProperty(o+\\\"Label\\\")&&(u=e[o+\\\"Label\\\"]);return u})};l.subplotSort=function(t,e){for(var r=Math.min(t.length,e.length)+1,n=0,i=0,a=0;a<r;a++){var o=t.charCodeAt(a)||0,s=e.charCodeAt(a)||0,l=o>=48&&o<=57,c=s>=48&&s<=57;if(l&&(n=10*n+o-48),c&&(i=10*i+s-48),!l||!c){if(n!==i)return n-i;if(o!==s)return o-s}}return i-n};var O=2e9;l.seedPseudoRandom=function(){O=2e9},l.pseudoRandom=function(){var t=O;return O=(69069*O+1)%4294967296,Math.abs(O-t)<429496729?l.pseudoRandom():O/4294967296},l.fillText=function(t,e,r){var n=Array.isArray(r)?function(t){r.push(t)}:function(t){r.text=t},i=l.extractOption(t,e,\\\"htx\\\",\\\"hovertext\\\");if(l.isValidTextValue(i))return n(i);var a=l.extractOption(t,e,\\\"tx\\\",\\\"text\\\");return l.isValidTextValue(a)?n(a):void 0},l.isValidTextValue=function(t){return t||0===t},l.formatPercent=function(t,e){e=e||0;for(var r=(Math.round(100*t*Math.pow(10,e))*Math.pow(.1,e)).toFixed(e)+\\\"%\\\",n=0;n<e;n++)-1!==r.indexOf(\\\".\\\")&&(r=(r=r.replace(\\\"0%\\\",\\\"%\\\")).replace(\\\".%\\\",\\\"%\\\"));return r},l.isHidden=function(t){var e=window.getComputedStyle(t).display;return!e||\\\"none\\\"===e}},{\\\"../constants/numerical\\\":695,\\\"./anchor_utils\\\":700,\\\"./angles\\\":701,\\\"./array\\\":702,\\\"./clean_number\\\":703,\\\"./clear_responsive\\\":705,\\\"./coerce\\\":706,\\\"./dates\\\":707,\\\"./dom\\\":708,\\\"./extend\\\":710,\\\"./filter_unique\\\":711,\\\"./filter_visible\\\":712,\\\"./geometry2d\\\":715,\\\"./identity\\\":718,\\\"./is_plain_object\\\":720,\\\"./keyed_container\\\":721,\\\"./localize\\\":722,\\\"./loggers\\\":723,\\\"./make_trace_groups\\\":724,\\\"./matrix\\\":725,\\\"./mod\\\":726,\\\"./nested_property\\\":727,\\\"./noop\\\":728,\\\"./notifier\\\":729,\\\"./push_unique\\\":733,\\\"./regex\\\":735,\\\"./relative_attr\\\":736,\\\"./relink_private\\\":737,\\\"./search\\\":738,\\\"./stats\\\":741,\\\"./throttle\\\":744,\\\"./to_log_range\\\":745,d3:163,\\\"fast-isnumeric\\\":225}],720:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){return window&&window.process&&window.process.versions?\\\"[object Object]\\\"===Object.prototype.toString.call(t):\\\"[object Object]\\\"===Object.prototype.toString.call(t)&&Object.getPrototypeOf(t)===Object.prototype}},{}],721:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./nested_property\\\"),i=/^\\\\w*$/;e.exports=function(t,e,r,a){var o,s,l;r=r||\\\"name\\\",a=a||\\\"value\\\";var c={};e&&e.length?(l=n(t,e),s=l.get()):s=t,e=e||\\\"\\\";var u={};if(s)for(o=0;o<s.length;o++)u[s[o][r]]=o;var h=i.test(a),f={set:function(t,e){var i=null===e?4:0;if(!s){if(!l||4===i)return;s=[],l.set(s)}var o=u[t];if(void 0===o){if(4===i)return;i|=3,o=s.length,u[t]=o}else e!==(h?s[o][a]:n(s[o],a).get())&&(i|=2);var p=s[o]=s[o]||{};return p[r]=t,h?p[a]=e:n(p,a).set(e),null!==e&&(i&=-5),c[o]=c[o]|i,f},get:function(t){if(s){var e=u[t];return void 0===e?void 0:h?s[e][a]:n(s[e],a).get()}},rename:function(t,e){var n=u[t];return void 0===n?f:(c[n]=1|c[n],u[e]=n,delete u[t],s[n][r]=e,f)},remove:function(t){var e=u[t];if(void 0===e)return f;var i=s[e];if(Object.keys(i).length>2)return c[e]=2|c[e],f.set(t,null);if(h){for(o=e;o<s.length;o++)c[o]=3|c[o];for(o=e;o<s.length;o++)u[s[o][r]]--;s.splice(e,1),delete u[t]}else n(i,a).set(null),c[e]=6|c[e];return f},constructUpdate:function(){for(var t,i,o={},l=Object.keys(c),u=0;u<l.length;u++)i=l[u],t=e+\\\"[\\\"+i+\\\"]\\\",s[i]?(1&c[i]&&(o[t+\\\".\\\"+r]=s[i][r]),2&c[i]&&(o[t+\\\".\\\"+a]=h?4&c[i]?null:s[i][a]:4&c[i]?null:n(s[i],a).get())):o[t]=null;return o}};return f}},{\\\"./nested_property\\\":727}],722:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../registry\\\");e.exports=function(t,e){for(var r=t._context.locale,i=0;i<2;i++){for(var a=t._context.locales,o=0;o<2;o++){var s=(a[r]||{}).dictionary;if(s){var l=s[e];if(l)return l}a=n.localeRegistry}var c=r.split(\\\"-\\\")[0];if(c===r)break;r=c}return e}},{\\\"../registry\\\":847}],723:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../plot_api/plot_config\\\").dfltConfig,i=e.exports={};function a(t,e){if(t&&t.apply)try{return void t.apply(console,e)}catch(t){}for(var r=0;r<e.length;r++)try{t(e[r])}catch(t){console.log(e[r])}}i.log=function(){if(n.logging>1){for(var t=[\\\"LOG:\\\"],e=0;e<arguments.length;e++)t.push(arguments[e]);a(console.trace||console.log,t)}},i.warn=function(){if(n.logging>0){for(var t=[\\\"WARN:\\\"],e=0;e<arguments.length;e++)t.push(arguments[e]);a(console.trace||console.log,t)}},i.error=function(){if(n.logging>0){for(var t=[\\\"ERROR:\\\"],e=0;e<arguments.length;e++)t.push(arguments[e]);a(console.error,t)}}},{\\\"../plot_api/plot_config\\\":755}],724:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\");e.exports=function(t,e,r){var i=t.selectAll(\\\"g.\\\"+r.replace(/\\\\s/g,\\\".\\\")).data(e,function(t){return t[0].trace.uid});i.exit().remove(),i.enter().append(\\\"g\\\").attr(\\\"class\\\",r),i.order();var a=t.classed(\\\"rangeplot\\\")?\\\"nodeRangePlot3\\\":\\\"node3\\\";return i.each(function(t){t[0][a]=n.select(this)}),i}},{d3:163}],725:[function(t,e,r){\\\"use strict\\\";r.init2dArray=function(t,e){for(var r=new Array(t),n=0;n<t;n++)r[n]=new Array(e);return r},r.transposeRagged=function(t){var e,r,n=0,i=t.length;for(e=0;e<i;e++)n=Math.max(n,t[e].length);var a=new Array(n);for(e=0;e<n;e++)for(a[e]=new Array(i),r=0;r<i;r++)a[e][r]=t[r][e];return a},r.dot=function(t,e){if(!t.length||!e.length||t.length!==e.length)return null;var n,i,a=t.length;if(t[0].length)for(n=new Array(a),i=0;i<a;i++)n[i]=r.dot(t[i],e);else if(e[0].length){var o=r.transposeRagged(e);for(n=new Array(o.length),i=0;i<o.length;i++)n[i]=r.dot(t,o[i])}else for(n=0,i=0;i<a;i++)n+=t[i]*e[i];return n},r.translationMatrix=function(t,e){return[[1,0,t],[0,1,e],[0,0,1]]},r.rotationMatrix=function(t){var e=t*Math.PI/180;return[[Math.cos(e),-Math.sin(e),0],[Math.sin(e),Math.cos(e),0],[0,0,1]]},r.rotationXYMatrix=function(t,e,n){return r.dot(r.dot(r.translationMatrix(e,n),r.rotationMatrix(t)),r.translationMatrix(-e,-n))},r.apply2DTransform=function(t){return function(){var e=arguments;3===e.length&&(e=e[0]);var n=1===arguments.length?e[0]:[e[0],e[1]];return r.dot(t,[n[0],n[1],1]).slice(0,2)}},r.apply2DTransform2=function(t){var e=r.apply2DTransform(t);return function(t){return e(t.slice(0,2)).concat(e(t.slice(2,4)))}}},{}],726:[function(t,e,r){\\\"use strict\\\";e.exports={mod:function(t,e){var r=t%e;return r<0?r+e:r},modHalf:function(t,e){return Math.abs(t)>e/2?t-Math.round(t/e)*e:t}}},{}],727:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"./array\\\").isArrayOrTypedArray;e.exports=function(t,e){if(n(e))e=String(e);else if(\\\"string\\\"!=typeof e||\\\"[-1]\\\"===e.substr(e.length-4))throw\\\"bad property string\\\";for(var r,a,o,l=0,c=e.split(\\\".\\\");l<c.length;){if(r=String(c[l]).match(/^([^\\\\[\\\\]]*)((\\\\[\\\\-?[0-9]*\\\\])+)$/)){if(r[1])c[l]=r[1];else{if(0!==l)throw\\\"bad property string\\\";c.splice(0,1)}for(a=r[2].substr(1,r[2].length-2).split(\\\"][\\\"),o=0;o<a.length;o++)l++,c.splice(l,0,Number(a[o]))}l++}return\\\"object\\\"!=typeof t?function(t,e,r){return{set:function(){throw\\\"bad container\\\"},get:function(){},astr:e,parts:r,obj:t}}(t,e,c):{set:s(t,c,e),get:function t(e,r){return function(){var n,a,o,s,l,c=e;for(s=0;s<r.length-1;s++){if(-1===(n=r[s])){for(a=!0,o=[],l=0;l<c.length;l++)o[l]=t(c[l],r.slice(s+1))(),o[l]!==o[0]&&(a=!1);return a?o[0]:o}if(\\\"number\\\"==typeof n&&!i(c))return;if(\\\"object\\\"!=typeof(c=c[n])||null===c)return}if(\\\"object\\\"==typeof c&&null!==c&&null!==(o=c[r[s]]))return o}}(t,c),astr:e,parts:c,obj:t}};var a=/(^|\\\\.)args\\\\[/;function o(t,e){return void 0===t||null===t&&!e.match(a)}function s(t,e,r){return function(n){var a,s,h=t,f=\\\"\\\",p=[[t,f]],d=o(n,r);for(s=0;s<e.length-1;s++){if(\\\"number\\\"==typeof(a=e[s])&&!i(h))throw\\\"array index but container is not an array\\\";if(-1===a){if(d=!c(h,e.slice(s+1),n,r))break;return}if(!u(h,a,e[s+1],d))break;if(\\\"object\\\"!=typeof(h=h[a])||null===h)throw\\\"container is not an object\\\";f=l(f,a),p.push([h,f])}if(d){if(s===e.length-1&&(delete h[e[s]],Array.isArray(h)&&+e[s]==h.length-1))for(;h.length&&void 0===h[h.length-1];)h.pop()}else h[e[s]]=n}}function l(t,e){var r=e;return n(e)?r=\\\"[\\\"+e+\\\"]\\\":t&&(r=\\\".\\\"+e),t+r}function c(t,e,r,n){var a,l=i(r),c=!0,h=r,f=n.replace(\\\"-1\\\",0),p=!l&&o(r,f),d=e[0];for(a=0;a<t.length;a++)f=n.replace(\\\"-1\\\",a),l&&(p=o(h=r[a%r.length],f)),p&&(c=!1),u(t,a,d,p)&&s(t[a],e,n.replace(\\\"-1\\\",a))(h);return c}function u(t,e,r,n){if(void 0===t[e]){if(n)return!1;t[e]=\\\"number\\\"==typeof r?[]:{}}return!0}},{\\\"./array\\\":702,\\\"fast-isnumeric\\\":225}],728:[function(t,e,r){\\\"use strict\\\";e.exports=function(){}},{}],729:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"fast-isnumeric\\\"),a=[];e.exports=function(t,e){if(-1===a.indexOf(t)){a.push(t);var r=1e3;i(e)?r=e:\\\"long\\\"===e&&(r=3e3);var o=n.select(\\\"body\\\").selectAll(\\\".plotly-notifier\\\").data([0]);o.enter().append(\\\"div\\\").classed(\\\"plotly-notifier\\\",!0),o.selectAll(\\\".notifier-note\\\").data(a).enter().append(\\\"div\\\").classed(\\\"notifier-note\\\",!0).style(\\\"opacity\\\",0).each(function(t){var e=n.select(this);e.append(\\\"button\\\").classed(\\\"notifier-close\\\",!0).html(\\\"&times;\\\").on(\\\"click\\\",function(){e.transition().call(s)});for(var i=e.append(\\\"p\\\"),a=t.split(/<br\\\\s*\\\\/?>/g),o=0;o<a.length;o++)o&&i.append(\\\"br\\\"),i.append(\\\"span\\\").text(a[o]);e.transition().duration(700).style(\\\"opacity\\\",1).transition().delay(r).call(s)})}function s(t){t.duration(700).style(\\\"opacity\\\",0).each(\\\"end\\\",function(t){var e=a.indexOf(t);-1!==e&&a.splice(e,1),n.select(this).remove()})}}},{d3:163,\\\"fast-isnumeric\\\":225}],730:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./setcursor\\\"),i=\\\"data-savedcursor\\\";e.exports=function(t,e){var r=t.attr(i);if(e){if(!r){for(var a=(t.attr(\\\"class\\\")||\\\"\\\").split(\\\" \\\"),o=0;o<a.length;o++){var s=a[o];0===s.indexOf(\\\"cursor-\\\")&&t.attr(i,s.substr(7)).classed(s,!1)}t.attr(i)||t.attr(i,\\\"!!\\\")}n(t,e)}else r&&(t.attr(i,null),\\\"!!\\\"===r?n(t):n(t,r))}},{\\\"./setcursor\\\":739}],731:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./matrix\\\").dot,i=t(\\\"../constants/numerical\\\").BADNUM,a=e.exports={};a.tester=function(t){var e,r=t.slice(),n=r[0][0],a=n,o=r[0][1],s=o;for(r.push(r[0]),e=1;e<r.length;e++)n=Math.min(n,r[e][0]),a=Math.max(a,r[e][0]),o=Math.min(o,r[e][1]),s=Math.max(s,r[e][1]);var l,c=!1;5===r.length&&(r[0][0]===r[1][0]?r[2][0]===r[3][0]&&r[0][1]===r[3][1]&&r[1][1]===r[2][1]&&(c=!0,l=function(t){return t[0]===r[0][0]}):r[0][1]===r[1][1]&&r[2][1]===r[3][1]&&r[0][0]===r[3][0]&&r[1][0]===r[2][0]&&(c=!0,l=function(t){return t[1]===r[0][1]}));var u=!0,h=r[0];for(e=1;e<r.length;e++)if(h[0]!==r[e][0]||h[1]!==r[e][1]){u=!1;break}return{xmin:n,xmax:a,ymin:o,ymax:s,pts:r,contains:c?function(t,e){var r=t[0],c=t[1];return!(r===i||r<n||r>a||c===i||c<o||c>s||e&&l(t))}:function(t,e){var l=t[0],c=t[1];if(l===i||l<n||l>a||c===i||c<o||c>s)return!1;var u,h,f,p,d,g=r.length,v=r[0][0],m=r[0][1],y=0;for(u=1;u<g;u++)if(h=v,f=m,v=r[u][0],m=r[u][1],!(l<(p=Math.min(h,v))||l>Math.max(h,v)||c>Math.max(f,m)))if(c<Math.min(f,m))l!==p&&y++;else{if(c===(d=v===h?c:f+(l-h)*(m-f)/(v-h)))return 1!==u||!e;c<=d&&l!==p&&y++}return y%2==1},isRect:c,degenerate:u}},a.isSegmentBent=function(t,e,r,i){var a,o,s,l=t[e],c=[t[r][0]-l[0],t[r][1]-l[1]],u=n(c,c),h=Math.sqrt(u),f=[-c[1]/h,c[0]/h];for(a=e+1;a<r;a++)if(o=[t[a][0]-l[0],t[a][1]-l[1]],(s=n(o,c))<0||s>u||Math.abs(n(o,f))>i)return!0;return!1},a.filter=function(t,e){var r=[t[0]],n=0,i=0;function o(o){t.push(o);var s=r.length,l=n;r.splice(i+1);for(var c=l+1;c<t.length;c++)(c===t.length-1||a.isSegmentBent(t,l,c+1,e))&&(r.push(t[c]),r.length<s-2&&(n=c,i=r.length-1),l=c)}t.length>1&&o(t.pop());return{addPt:o,raw:t,filtered:r}}},{\\\"../constants/numerical\\\":695,\\\"./matrix\\\":725}],732:[function(t,e,r){(function(r){\\\"use strict\\\";var n=t(\\\"./show_no_webgl_msg\\\"),i=t(\\\"regl\\\");e.exports=function(t,e){var a=t._fullLayout,o=!0;return a._glcanvas.each(function(n){if(!n.regl&&(!n.pick||a._has(\\\"parcoords\\\"))){try{n.regl=i({canvas:this,attributes:{antialias:!n.pick,preserveDrawingBuffer:!0},pixelRatio:t._context.plotGlPixelRatio||r.devicePixelRatio,extensions:e||[]})}catch(t){o=!1}o&&this.addEventListener(\\\"webglcontextlost\\\",function(e){t&&t.emit&&t.emit(\\\"plotly_webglcontextlost\\\",{event:e,layer:n.key})},!1)}}),o||n({container:a._glcontainer.node()}),o}}).call(this,\\\"undefined\\\"!=typeof global?global:\\\"undefined\\\"!=typeof self?self:\\\"undefined\\\"!=typeof window?window:{})},{\\\"./show_no_webgl_msg\\\":740,regl:502}],733:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){if(e instanceof RegExp){for(var r=e.toString(),n=0;n<t.length;n++)if(t[n]instanceof RegExp&&t[n].toString()===r)return t;t.push(e)}else!e&&0!==e||-1!==t.indexOf(e)||t.push(e);return t}},{}],734:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../lib\\\"),i=t(\\\"../plot_api/plot_config\\\").dfltConfig;var a={add:function(t,e,r,n,a){var o,s;t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},s=t.undoQueue.index,t.autoplay?t.undoQueue.inSequence||(t.autoplay=!1):(!t.undoQueue.sequence||t.undoQueue.beginSequence?(o={undo:{calls:[],args:[]},redo:{calls:[],args:[]}},t.undoQueue.queue.splice(s,t.undoQueue.queue.length-s,o),t.undoQueue.index+=1):o=t.undoQueue.queue[s-1],t.undoQueue.beginSequence=!1,o&&(o.undo.calls.unshift(e),o.undo.args.unshift(r),o.redo.calls.push(n),o.redo.args.push(a)),t.undoQueue.queue.length>i.queueLength&&(t.undoQueue.queue.shift(),t.undoQueue.index--))},startSequence:function(t){t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence=!0,t.undoQueue.beginSequence=!0},stopSequence:function(t){t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence=!1,t.undoQueue.beginSequence=!1},undo:function(t){var e,r;if(t.framework&&t.framework.isPolar)t.framework.undo();else if(!(void 0===t.undoQueue||isNaN(t.undoQueue.index)||t.undoQueue.index<=0)){for(t.undoQueue.index--,e=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,r=0;r<e.undo.calls.length;r++)a.plotDo(t,e.undo.calls[r],e.undo.args[r]);t.undoQueue.inSequence=!1,t.autoplay=!1}},redo:function(t){var e,r;if(t.framework&&t.framework.isPolar)t.framework.redo();else if(!(void 0===t.undoQueue||isNaN(t.undoQueue.index)||t.undoQueue.index>=t.undoQueue.queue.length)){for(e=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,r=0;r<e.redo.calls.length;r++)a.plotDo(t,e.redo.calls[r],e.redo.args[r]);t.undoQueue.inSequence=!1,t.autoplay=!1,t.undoQueue.index++}}};a.plotDo=function(t,e,r){t.autoplay=!0,r=function(t,e){for(var r,i=[],a=0;a<e.length;a++)r=e[a],i[a]=r===t?r:\\\"object\\\"==typeof r?Array.isArray(r)?n.extendDeep([],r):n.extendDeepAll({},r):r;return i}(t,r),e.apply(null,r)},e.exports=a},{\\\"../lib\\\":719,\\\"../plot_api/plot_config\\\":755}],735:[function(t,e,r){\\\"use strict\\\";r.counter=function(t,e,r,n){var i=(e||\\\"\\\")+(r?\\\"\\\":\\\"$\\\"),a=!1===n?\\\"\\\":\\\"^\\\";return\\\"xy\\\"===t?new RegExp(a+\\\"x([2-9]|[1-9][0-9]+)?y([2-9]|[1-9][0-9]+)?\\\"+i):new RegExp(a+t+\\\"([2-9]|[1-9][0-9]+)?\\\"+i)}},{}],736:[function(t,e,r){\\\"use strict\\\";var n=/^(.*)(\\\\.[^\\\\.\\\\[\\\\]]+|\\\\[\\\\d\\\\])$/,i=/^[^\\\\.\\\\[\\\\]]+$/;e.exports=function(t,e){for(;e;){var r=t.match(n);if(r)t=r[1];else{if(!t.match(i))throw new Error(\\\"bad relativeAttr call:\\\"+[t,e]);t=\\\"\\\"}if(\\\"^\\\"!==e.charAt(0))break;e=e.slice(1)}return t&&\\\"[\\\"!==e.charAt(0)?t+\\\".\\\"+e:t+e}},{}],737:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./array\\\").isArrayOrTypedArray,i=t(\\\"./is_plain_object\\\");e.exports=function t(e,r){for(var a in r){var o=r[a],s=e[a];if(s!==o)if(\\\"_\\\"===a.charAt(0)||\\\"function\\\"==typeof o){if(a in e)continue;e[a]=o}else if(n(o)&&n(s)&&i(o[0])){if(\\\"customdata\\\"===a||\\\"ids\\\"===a)continue;for(var l=Math.min(o.length,s.length),c=0;c<l;c++)s[c]!==o[c]&&i(o[c])&&i(s[c])&&t(s[c],o[c])}else i(o)&&i(s)&&(t(s,o),Object.keys(s).length||delete e[a])}}},{\\\"./array\\\":702,\\\"./is_plain_object\\\":720}],738:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"./loggers\\\"),a=t(\\\"./identity\\\");function o(t,e){return t<e}function s(t,e){return t<=e}function l(t,e){return t>e}function c(t,e){return t>=e}r.findBin=function(t,e,r){if(n(e.start))return r?Math.ceil((t-e.start)/e.size-1e-9)-1:Math.floor((t-e.start)/e.size+1e-9);var a,u,h=0,f=e.length,p=0,d=f>1?(e[f-1]-e[0])/(f-1):1;for(u=d>=0?r?o:s:r?c:l,t+=1e-9*d*(r?-1:1)*(d>=0?1:-1);h<f&&p++<100;)u(e[a=Math.floor((h+f)/2)],t)?h=a+1:f=a;return p>90&&i.log(\\\"Long binary search...\\\"),h-1},r.sorterAsc=function(t,e){return t-e},r.sorterDes=function(t,e){return e-t},r.distinctVals=function(t){var e=t.slice();e.sort(r.sorterAsc);for(var n=e.length-1,i=e[n]-e[0]||1,a=i/(n||1)/1e4,o=[e[0]],s=0;s<n;s++)e[s+1]>e[s]+a&&(i=Math.min(i,e[s+1]-e[s]),o.push(e[s+1]));return{vals:o,minDiff:i}},r.roundUp=function(t,e,r){for(var n,i=0,a=e.length-1,o=0,s=r?0:1,l=r?1:0,c=r?Math.ceil:Math.floor;i<a&&o++<100;)e[n=c((i+a)/2)]<=t?i=n+s:a=n-l;return e[i]},r.sort=function(t,e){for(var r=0,n=0,i=1;i<t.length;i++){var a=e(t[i],t[i-1]);if(a<0?r=1:a>0&&(n=1),r&&n)return t.sort(e)}return n?t:t.reverse()},r.findIndexOfMin=function(t,e){e=e||a;for(var r,n=1/0,i=0;i<t.length;i++){var o=e(t[i]);o<n&&(n=o,r=i)}return r}},{\\\"./identity\\\":718,\\\"./loggers\\\":723,\\\"fast-isnumeric\\\":225}],739:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){(t.attr(\\\"class\\\")||\\\"\\\").split(\\\" \\\").forEach(function(e){0===e.indexOf(\\\"cursor-\\\")&&t.classed(e,!1)}),e&&t.classed(\\\"cursor-\\\"+e,!0)}},{}],740:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../components/color\\\"),i=function(){};e.exports=function(t){for(var e in t)\\\"function\\\"==typeof t[e]&&(t[e]=i);t.destroy=function(){t.container.parentNode.removeChild(t.container)};var r=document.createElement(\\\"div\\\");r.className=\\\"no-webgl\\\",r.style.cursor=\\\"pointer\\\",r.style.fontSize=\\\"24px\\\",r.style.color=n.defaults[0],r.style.position=\\\"absolute\\\",r.style.left=r.style.top=\\\"0px\\\",r.style.width=r.style.height=\\\"100%\\\",r.style[\\\"background-color\\\"]=n.lightLine,r.style[\\\"z-index\\\"]=30;var a=document.createElement(\\\"p\\\");return a.textContent=\\\"WebGL is not supported by your browser - visit https://get.webgl.org for more info\\\",a.style.position=\\\"relative\\\",a.style.top=\\\"50%\\\",a.style.left=\\\"50%\\\",a.style.height=\\\"30%\\\",a.style.width=\\\"50%\\\",a.style.margin=\\\"-15% 0 0 -25%\\\",r.appendChild(a),t.container.appendChild(r),t.container.style.background=\\\"#FFFFFF\\\",t.container.onclick=function(){window.open(\\\"https://get.webgl.org\\\")},!1}},{\\\"../components/color\\\":593}],741:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"./array\\\").isArrayOrTypedArray;r.aggNums=function(t,e,a,o){var s,l;if((!o||o>a.length)&&(o=a.length),n(e)||(e=!1),i(a[0])){for(l=new Array(o),s=0;s<o;s++)l[s]=r.aggNums(t,e,a[s]);a=l}for(s=0;s<o;s++)n(e)?n(a[s])&&(e=t(+e,+a[s])):e=a[s];return e},r.len=function(t){return r.aggNums(function(t){return t+1},0,t)},r.mean=function(t,e){return e||(e=r.len(t)),r.aggNums(function(t,e){return t+e},0,t)/e},r.midRange=function(t){if(void 0!==t&&0!==t.length)return(r.aggNums(Math.max,null,t)+r.aggNums(Math.min,null,t))/2},r.variance=function(t,e,i){return e||(e=r.len(t)),n(i)||(i=r.mean(t,e)),r.aggNums(function(t,e){return t+Math.pow(e-i,2)},0,t)/e},r.stdev=function(t,e,n){return Math.sqrt(r.variance(t,e,n))},r.median=function(t){var e=t.slice().sort();return r.interp(e,.5)},r.interp=function(t,e){if(!n(e))throw\\\"n should be a finite number\\\";if((e=e*t.length-.5)<0)return t[0];if(e>t.length-1)return t[t.length-1];var r=e%1;return r*t[Math.ceil(e)]+(1-r)*t[Math.floor(e)]}},{\\\"./array\\\":702,\\\"fast-isnumeric\\\":225}],742:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"color-normalize\\\");e.exports=function(t){return t?n(t):[0,0,0,1]}},{\\\"color-normalize\\\":120}],743:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../lib\\\"),a=t(\\\"../constants/xmlns_namespaces\\\"),o=t(\\\"../constants/alignment\\\").LINE_SPACING;function s(t,e){return t.node().getBoundingClientRect()[e]}var l=/([^$]*)([$]+[^$]*[$]+)([^$]*)/;r.convertToTspans=function(t,e,M){var S=t.text(),C=!t.attr(\\\"data-notex\\\")&&\\\"undefined\\\"!=typeof MathJax&&S.match(l),L=n.select(t.node().parentNode);if(!L.empty()){var P=t.attr(\\\"class\\\")?t.attr(\\\"class\\\").split(\\\" \\\")[0]:\\\"text\\\";return P+=\\\"-math\\\",L.selectAll(\\\"svg.\\\"+P).remove(),L.selectAll(\\\"g.\\\"+P+\\\"-group\\\").remove(),t.style(\\\"display\\\",null).attr({\\\"data-unformatted\\\":S,\\\"data-math\\\":\\\"N\\\"}),C?(e&&e._promises||[]).push(new Promise(function(e){t.style(\\\"display\\\",\\\"none\\\");var r=parseInt(t.node().style.fontSize,10),a={fontSize:r};!function(t,e,r){var a,o,s,l;MathJax.Hub.Queue(function(){return o=i.extendDeepAll({},MathJax.Hub.config),s=MathJax.Hub.processSectionDelay,void 0!==MathJax.Hub.processSectionDelay&&(MathJax.Hub.processSectionDelay=0),MathJax.Hub.Config({messageStyle:\\\"none\\\",tex2jax:{inlineMath:[[\\\"$\\\",\\\"$\\\"],[\\\"\\\\\\\\(\\\",\\\"\\\\\\\\)\\\"]]},displayAlign:\\\"left\\\"})},function(){if(\\\"SVG\\\"!==(a=MathJax.Hub.config.menuSettings.renderer))return MathJax.Hub.setRenderer(\\\"SVG\\\")},function(){var r=\\\"math-output-\\\"+i.randstr({},64);return l=n.select(\\\"body\\\").append(\\\"div\\\").attr({id:r}).style({visibility:\\\"hidden\\\",position:\\\"absolute\\\"}).style({\\\"font-size\\\":e.fontSize+\\\"px\\\"}).text(t.replace(c,\\\"\\\\\\\\lt \\\").replace(u,\\\"\\\\\\\\gt \\\")),MathJax.Hub.Typeset(l.node())},function(){var e=n.select(\\\"body\\\").select(\\\"#MathJax_SVG_glyphs\\\");if(l.select(\\\".MathJax_SVG\\\").empty()||!l.select(\\\"svg\\\").node())i.log(\\\"There was an error in the tex syntax.\\\",t),r();else{var o=l.select(\\\"svg\\\").node().getBoundingClientRect();r(l.select(\\\".MathJax_SVG\\\"),e,o)}if(l.remove(),\\\"SVG\\\"!==a)return MathJax.Hub.setRenderer(a)},function(){return void 0!==s&&(MathJax.Hub.processSectionDelay=s),MathJax.Hub.Config(o)})}(C[2],a,function(n,i,a){L.selectAll(\\\"svg.\\\"+P).remove(),L.selectAll(\\\"g.\\\"+P+\\\"-group\\\").remove();var o=n&&n.select(\\\"svg\\\");if(!o||!o.node())return O(),void e();var l=L.append(\\\"g\\\").classed(P+\\\"-group\\\",!0).attr({\\\"pointer-events\\\":\\\"none\\\",\\\"data-unformatted\\\":S,\\\"data-math\\\":\\\"Y\\\"});l.node().appendChild(o.node()),i&&i.node()&&o.node().insertBefore(i.node().cloneNode(!0),o.node().firstChild),o.attr({class:P,height:a.height,preserveAspectRatio:\\\"xMinYMin meet\\\"}).style({overflow:\\\"visible\\\",\\\"pointer-events\\\":\\\"none\\\"});var c=t.node().style.fill||\\\"black\\\",u=o.select(\\\"g\\\");u.attr({fill:c,stroke:c});var h=s(u,\\\"width\\\"),f=s(u,\\\"height\\\"),p=+t.attr(\\\"x\\\")-h*{start:0,middle:.5,end:1}[t.attr(\\\"text-anchor\\\")||\\\"start\\\"],d=-(r||s(t,\\\"height\\\"))/4;\\\"y\\\"===P[0]?(l.attr({transform:\\\"rotate(\\\"+[-90,+t.attr(\\\"x\\\"),+t.attr(\\\"y\\\")]+\\\") translate(\\\"+[-h/2,d-f/2]+\\\")\\\"}),o.attr({x:+t.attr(\\\"x\\\"),y:+t.attr(\\\"y\\\")})):\\\"l\\\"===P[0]?o.attr({x:t.attr(\\\"x\\\"),y:d-f/2}):\\\"a\\\"===P[0]&&0!==P.indexOf(\\\"atitle\\\")?o.attr({x:0,y:d}):o.attr({x:p,y:+t.attr(\\\"y\\\")+d-f/2}),M&&M.call(t,l),e(l)})})):O(),t}function O(){L.empty()||(P=t.attr(\\\"class\\\")+\\\"-math\\\",L.select(\\\"svg.\\\"+P).remove()),t.text(\\\"\\\").style(\\\"white-space\\\",\\\"pre\\\"),function(t,e){e=e.replace(v,\\\" \\\");var r,s=!1,l=[],c=-1;function u(){c++;var e=document.createElementNS(a.svg,\\\"tspan\\\");n.select(e).attr({class:\\\"line\\\",dy:c*o+\\\"em\\\"}),t.appendChild(e),r=e;var i=l;if(l=[{node:e}],i.length>1)for(var s=1;s<i.length;s++)M(i[s])}function M(t){var e,i=t.type,o={};if(\\\"a\\\"===i){e=\\\"a\\\";var s=t.target,c=t.href,u=t.popup;c&&(o={\\\"xlink:xlink:show\\\":\\\"_blank\\\"===s||\\\"_\\\"!==s.charAt(0)?\\\"new\\\":\\\"replace\\\",target:s,\\\"xlink:xlink:href\\\":c},u&&(o.onclick='window.open(this.href.baseVal,this.target.baseVal,\\\"'+u+'\\\");return false;'))}else e=\\\"tspan\\\";t.style&&(o.style=t.style);var h=document.createElementNS(a.svg,e);if(\\\"sup\\\"===i||\\\"sub\\\"===i){S(r,d),r.appendChild(h);var g=document.createElementNS(a.svg,\\\"tspan\\\");S(g,d),n.select(g).attr(\\\"dy\\\",p[i]),o.dy=f[i],r.appendChild(h),r.appendChild(g)}else r.appendChild(h);n.select(h).attr(o),r=t.node=h,l.push(t)}function S(t,e){t.appendChild(document.createTextNode(e))}function C(t){if(1!==l.length){var n=l.pop();t!==n.type&&i.log(\\\"Start tag <\\\"+n.type+\\\"> doesnt match end tag <\\\"+t+\\\">. Pretending it did match.\\\",e),r=l[l.length-1].node}else i.log(\\\"Ignoring unexpected end tag </\\\"+t+\\\">.\\\",e)}x.test(e)?u():(r=t,l=[{node:t}]);for(var L=e.split(m),P=0;P<L.length;P++){var O=L[P],z=O.match(y),I=z&&z[2].toLowerCase(),D=h[I];if(\\\"br\\\"===I)u();else if(void 0===D)S(r,E(O));else if(z[1])C(I);else{var R=z[4],F={type:I},B=T(R,b);if(B?(B=B.replace(A,\\\"$1 fill:\\\"),D&&(B+=\\\";\\\"+D)):D&&(B=D),B&&(F.style=B),\\\"a\\\"===I){s=!0;var N=T(R,_);if(N){var j=document.createElement(\\\"a\\\");j.href=N,-1!==g.indexOf(j.protocol)&&(F.href=encodeURI(decodeURI(N)),F.target=T(R,w)||\\\"_blank\\\",F.popup=T(R,k))}}M(F)}}return s}(t.node(),S)&&t.style(\\\"pointer-events\\\",\\\"all\\\"),r.positionText(t),M&&M.call(t)}};var c=/(<|&lt;|&#60;)/g,u=/(>|&gt;|&#62;)/g;var h={sup:\\\"font-size:70%\\\",sub:\\\"font-size:70%\\\",b:\\\"font-weight:bold\\\",i:\\\"font-style:italic\\\",a:\\\"cursor:pointer\\\",span:\\\"\\\",em:\\\"font-style:italic;font-weight:bold\\\"},f={sub:\\\"0.3em\\\",sup:\\\"-0.6em\\\"},p={sub:\\\"-0.21em\\\",sup:\\\"0.42em\\\"},d=\\\"\\\\u200b\\\",g=[\\\"http:\\\",\\\"https:\\\",\\\"mailto:\\\",\\\"\\\",void 0,\\\":\\\"],v=/(\\\\r\\\\n?|\\\\n)/g,m=/(<[^<>]*>)/,y=/<(\\\\/?)([^ >]*)(\\\\s+(.*))?>/i,x=/<br(\\\\s+.*)?>/i,b=/(^|[\\\\s\\\"'])style\\\\s*=\\\\s*(\\\"([^\\\"]*);?\\\"|'([^']*);?')/i,_=/(^|[\\\\s\\\"'])href\\\\s*=\\\\s*(\\\"([^\\\"]*)\\\"|'([^']*)')/i,w=/(^|[\\\\s\\\"'])target\\\\s*=\\\\s*(\\\"([^\\\"\\\\s]*)\\\"|'([^'\\\\s]*)')/i,k=/(^|[\\\\s\\\"'])popup\\\\s*=\\\\s*(\\\"([\\\\w=,]*)\\\"|'([\\\\w=,]*)')/i;function T(t,e){if(!t)return null;var r=t.match(e),n=r&&(r[3]||r[4]);return n&&E(n)}var A=/(^|;)\\\\s*color:/;r.plainText=function(t,e){for(var r=void 0!==(e=e||{}).len&&-1!==e.len?e.len:1/0,n=void 0!==e.allowedTags?e.allowedTags:[\\\"br\\\"],i=\\\"...\\\".length,a=t.split(m),o=[],s=\\\"\\\",l=0,c=0;c<a.length;c++){var u=a[c],h=u.match(y),f=h&&h[2].toLowerCase();if(f)-1!==n.indexOf(f)&&(o.push(u),s=f);else{var p=u.length;if(l+p<r)o.push(u),l+=p;else if(l<r){var d=r-l;s&&(\\\"br\\\"!==s||d<=i||p<=i)&&o.pop(),r>i?o.push(u.substr(0,d-i)+\\\"...\\\"):o.push(u.substr(0,d));break}s=\\\"\\\"}}return o.join(\\\"\\\")};var M={mu:\\\"\\\\u03bc\\\",amp:\\\"&\\\",lt:\\\"<\\\",gt:\\\">\\\",nbsp:\\\"\\\\xa0\\\",times:\\\"\\\\xd7\\\",plusmn:\\\"\\\\xb1\\\",deg:\\\"\\\\xb0\\\"},S=/&(#\\\\d+|#x[\\\\da-fA-F]+|[a-z]+);/g;function E(t){return t.replace(S,function(t,e){return(\\\"#\\\"===e.charAt(0)?function(t){if(t>1114111)return;var e=String.fromCodePoint;if(e)return e(t);var r=String.fromCharCode;return t<=65535?r(t):r(55232+(t>>10),t%1024+56320)}(\\\"x\\\"===e.charAt(1)?parseInt(e.substr(2),16):parseInt(e.substr(1),10)):M[e])||t})}function C(t,e,r){var n,i,a,o=r.horizontalAlign,s=r.verticalAlign||\\\"top\\\",l=t.node().getBoundingClientRect(),c=e.node().getBoundingClientRect();return i=\\\"bottom\\\"===s?function(){return l.bottom-n.height}:\\\"middle\\\"===s?function(){return l.top+(l.height-n.height)/2}:function(){return l.top},a=\\\"right\\\"===o?function(){return l.right-n.width}:\\\"center\\\"===o?function(){return l.left+(l.width-n.width)/2}:function(){return l.left},function(){return n=this.node().getBoundingClientRect(),this.style({top:i()-c.top+\\\"px\\\",left:a()-c.left+\\\"px\\\",\\\"z-index\\\":1e3}),this}}r.convertEntities=E,r.lineCount=function(t){return t.selectAll(\\\"tspan.line\\\").size()||1},r.positionText=function(t,e,r){return t.each(function(){var t=n.select(this);function i(e,r){return void 0===r?null===(r=t.attr(e))&&(t.attr(e,0),r=0):t.attr(e,r),r}var a=i(\\\"x\\\",e),o=i(\\\"y\\\",r);\\\"text\\\"===this.nodeName&&t.selectAll(\\\"tspan.line\\\").attr({x:a,y:o})})},r.makeEditable=function(t,e){var r=e.gd,i=e.delegate,a=n.dispatch(\\\"edit\\\",\\\"input\\\",\\\"cancel\\\"),o=i||t;if(t.style({\\\"pointer-events\\\":i?\\\"none\\\":\\\"all\\\"}),1!==t.size())throw new Error(\\\"boo\\\");function s(){!function(){var i=n.select(r).select(\\\".svg-container\\\"),o=i.append(\\\"div\\\"),s=t.node().style,c=parseFloat(s.fontSize||12),u=e.text;void 0===u&&(u=t.attr(\\\"data-unformatted\\\"));o.classed(\\\"plugin-editable editable\\\",!0).style({position:\\\"absolute\\\",\\\"font-family\\\":s.fontFamily||\\\"Arial\\\",\\\"font-size\\\":c,color:e.fill||s.fill||\\\"black\\\",opacity:1,\\\"background-color\\\":e.background||\\\"transparent\\\",outline:\\\"#ffffff33 1px solid\\\",margin:[-c/8+1,0,0,-1].join(\\\"px \\\")+\\\"px\\\",padding:\\\"0\\\",\\\"box-sizing\\\":\\\"border-box\\\"}).attr({contenteditable:!0}).text(u).call(C(t,i,e)).on(\\\"blur\\\",function(){r._editing=!1,t.text(this.textContent).style({opacity:1});var e,i=n.select(this).attr(\\\"class\\\");(e=i?\\\".\\\"+i.split(\\\" \\\")[0]+\\\"-math-group\\\":\\\"[class*=-math-group]\\\")&&n.select(t.node().parentNode).select(e).style({opacity:0});var o=this.textContent;n.select(this).transition().duration(0).remove(),n.select(document).on(\\\"mouseup\\\",null),a.edit.call(t,o)}).on(\\\"focus\\\",function(){var t=this;r._editing=!0,n.select(document).on(\\\"mouseup\\\",function(){if(n.event.target===t)return!1;document.activeElement===o.node()&&o.node().blur()})}).on(\\\"keyup\\\",function(){27===n.event.which?(r._editing=!1,t.style({opacity:1}),n.select(this).style({opacity:0}).on(\\\"blur\\\",function(){return!1}).transition().remove(),a.cancel.call(t,this.textContent)):(a.input.call(t,this.textContent),n.select(this).call(C(t,i,e)))}).on(\\\"keydown\\\",function(){13===n.event.which&&this.blur()}).call(l)}(),t.style({opacity:0});var i,s=o.attr(\\\"class\\\");(i=s?\\\".\\\"+s.split(\\\" \\\")[0]+\\\"-math-group\\\":\\\"[class*=-math-group]\\\")&&n.select(t.node().parentNode).select(i).style({opacity:0})}function l(t){var e=t.node(),r=document.createRange();r.selectNodeContents(e);var n=window.getSelection();n.removeAllRanges(),n.addRange(r),e.focus()}return e.immediate?s():o.on(\\\"click\\\",s),n.rebind(t,a,\\\"on\\\")}},{\\\"../constants/alignment\\\":688,\\\"../constants/xmlns_namespaces\\\":696,\\\"../lib\\\":719,d3:163}],744:[function(t,e,r){\\\"use strict\\\";var n={};function i(t){t&&null!==t.timer&&(clearTimeout(t.timer),t.timer=null)}r.throttle=function(t,e,r){var a=n[t],o=Date.now();if(!a){for(var s in n)n[s].ts<o-6e4&&delete n[s];a=n[t]={ts:0,timer:null}}function l(){r(),a.ts=Date.now(),a.onDone&&(a.onDone(),a.onDone=null)}i(a),o>a.ts+e?l():a.timer=setTimeout(function(){l(),a.timer=null},e)},r.done=function(t){var e=n[t];return e&&e.timer?new Promise(function(t){var r=e.onDone;e.onDone=function(){r&&r(),t(),e.onDone=null}}):Promise.resolve()},r.clear=function(t){if(t)i(n[t]),delete n[t];else for(var e in n)r.clear(e)}},{}],745:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\");e.exports=function(t,e){if(t>0)return Math.log(t)/Math.LN10;var r=Math.log(Math.min(e[0],e[1]))/Math.LN10;return n(r)||(r=Math.log(Math.max(e[0],e[1]))/Math.LN10-6),r}},{\\\"fast-isnumeric\\\":225}],746:[function(t,e,r){\\\"use strict\\\";var n=e.exports={},i=t(\\\"../plots/geo/constants\\\").locationmodeToLayer,a=t(\\\"topojson-client\\\").feature;n.getTopojsonName=function(t){return[t.scope.replace(/ /g,\\\"-\\\"),\\\"_\\\",t.resolution.toString(),\\\"m\\\"].join(\\\"\\\")},n.getTopojsonPath=function(t,e){return t+e+\\\".json\\\"},n.getTopojsonFeatures=function(t,e){var r=i[t.locationmode],n=e.objects[r];return a(e,n).features}},{\\\"../plots/geo/constants\\\":795,\\\"topojson-client\\\":540}],747:[function(t,e,r){\\\"use strict\\\";e.exports={moduleType:\\\"locale\\\",name:\\\"en-US\\\",dictionary:{\\\"Click to enter Colorscale title\\\":\\\"Click to enter Colorscale title\\\"},format:{date:\\\"%m/%d/%Y\\\"}}},{}],748:[function(t,e,r){\\\"use strict\\\";e.exports={moduleType:\\\"locale\\\",name:\\\"en\\\",dictionary:{\\\"Click to enter Colorscale title\\\":\\\"Click to enter Colourscale title\\\"},format:{days:[\\\"Sunday\\\",\\\"Monday\\\",\\\"Tuesday\\\",\\\"Wednesday\\\",\\\"Thursday\\\",\\\"Friday\\\",\\\"Saturday\\\"],shortDays:[\\\"Sun\\\",\\\"Mon\\\",\\\"Tue\\\",\\\"Wed\\\",\\\"Thu\\\",\\\"Fri\\\",\\\"Sat\\\"],months:[\\\"January\\\",\\\"February\\\",\\\"March\\\",\\\"April\\\",\\\"May\\\",\\\"June\\\",\\\"July\\\",\\\"August\\\",\\\"September\\\",\\\"October\\\",\\\"November\\\",\\\"December\\\"],shortMonths:[\\\"Jan\\\",\\\"Feb\\\",\\\"Mar\\\",\\\"Apr\\\",\\\"May\\\",\\\"Jun\\\",\\\"Jul\\\",\\\"Aug\\\",\\\"Sep\\\",\\\"Oct\\\",\\\"Nov\\\",\\\"Dec\\\"],periods:[\\\"AM\\\",\\\"PM\\\"],dateTime:\\\"%a %b %e %X %Y\\\",date:\\\"%d/%m/%Y\\\",time:\\\"%H:%M:%S\\\",decimal:\\\".\\\",thousands:\\\",\\\",grouping:[3],currency:[\\\"$\\\",\\\"\\\"],year:\\\"%Y\\\",month:\\\"%b %Y\\\",dayMonth:\\\"%b %-d\\\",dayMonthYear:\\\"%b %-d, %Y\\\"}}},{}],749:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../registry\\\");e.exports=function(t){for(var e,r,i=n.layoutArrayContainers,a=n.layoutArrayRegexes,o=t.split(\\\"[\\\")[0],s=0;s<a.length;s++)if((r=t.match(a[s]))&&0===r.index){e=r[0];break}if(e||(e=i[i.indexOf(o)]),!e)return!1;var l=t.substr(e.length);return l?!!(r=l.match(/^\\\\[(0|[1-9][0-9]*)\\\\](\\\\.(.+))?$/))&&{array:e,index:Number(r[1]),property:r[3]||\\\"\\\"}:{array:e,index:\\\"\\\",property:\\\"\\\"}}},{\\\"../registry\\\":847}],750:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../lib\\\"),i=n.extendFlat,a=n.isPlainObject,o={valType:\\\"flaglist\\\",extras:[\\\"none\\\"],flags:[\\\"calc\\\",\\\"clearAxisTypes\\\",\\\"plot\\\",\\\"style\\\",\\\"markerSize\\\",\\\"colorbars\\\"]},s={valType:\\\"flaglist\\\",extras:[\\\"none\\\"],flags:[\\\"calc\\\",\\\"plot\\\",\\\"legend\\\",\\\"ticks\\\",\\\"axrange\\\",\\\"layoutstyle\\\",\\\"modebar\\\",\\\"camera\\\",\\\"arraydraw\\\",\\\"colorbars\\\"]},l=o.flags.slice().concat([\\\"fullReplot\\\"]),c=s.flags.slice().concat(\\\"layoutReplot\\\");function u(t){for(var e={},r=0;r<t.length;r++)e[t[r]]=!1;return e}function h(t,e,r){var n=i({},t);for(var o in n){var s=n[o];a(s)&&(n[o]=f(s,e,r,o))}return\\\"from-root\\\"===r&&(n.editType=e),n}function f(t,e,r,n){if(t.valType){var a=i({},t);if(a.editType=e,Array.isArray(t.items)){a.items=new Array(t.items.length);for(var o=0;o<t.items.length;o++)a.items[o]=f(t.items[o],e,\\\"from-root\\\")}return a}return h(t,e,\\\"_\\\"===n.charAt(0)?\\\"nested\\\":\\\"from-root\\\")}e.exports={traces:o,layout:s,traceFlags:function(){return u(l)},layoutFlags:function(){return u(c)},update:function(t,e){var r=e.editType;if(r&&\\\"none\\\"!==r)for(var n=r.split(\\\"+\\\"),i=0;i<n.length;i++)t[n[i]]=!0},overrideAll:h}},{\\\"../lib\\\":719}],751:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"gl-mat4/fromQuat\\\"),a=t(\\\"../registry\\\"),o=t(\\\"../lib\\\"),s=t(\\\"../plots/plots\\\"),l=t(\\\"../plots/cartesian/axis_ids\\\"),c=t(\\\"../components/color\\\"),u=l.cleanId,h=l.getFromTrace,f=a.traceIs;function p(t,e){var r=t[e],n=e.charAt(0);r&&\\\"paper\\\"!==r&&(t[e]=u(r,n))}function d(t){function e(e,r){var n=t[e],i=t.title&&t.title[r];n&&!i&&(t.title||(t.title={}),t.title[r]=t[e],delete t[e])}t&&(\\\"string\\\"!=typeof t.title&&\\\"number\\\"!=typeof t.title||(t.title={text:t.title}),e(\\\"titlefont\\\",\\\"font\\\"),e(\\\"titleposition\\\",\\\"position\\\"),e(\\\"titleside\\\",\\\"side\\\"),e(\\\"titleoffset\\\",\\\"offset\\\"))}function g(t){if(!o.isPlainObject(t))return!1;var e=t.name;return delete t.name,delete t.showlegend,(\\\"string\\\"==typeof e||\\\"number\\\"==typeof e)&&String(e)}function v(t,e,r,n){if(r&&!n)return t;if(n&&!r)return e;if(!t.trim())return e;if(!e.trim())return t;var i,a=Math.min(t.length,e.length);for(i=0;i<a&&t.charAt(i)===e.charAt(i);i++);return t.substr(0,i).trim()}function m(t){var e=\\\"middle\\\",r=\\\"center\\\";return\\\"string\\\"==typeof t&&(-1!==t.indexOf(\\\"top\\\")?e=\\\"top\\\":-1!==t.indexOf(\\\"bottom\\\")&&(e=\\\"bottom\\\"),-1!==t.indexOf(\\\"left\\\")?r=\\\"left\\\":-1!==t.indexOf(\\\"right\\\")&&(r=\\\"right\\\")),e+\\\" \\\"+r}function y(t,e){return e in t&&\\\"object\\\"==typeof t[e]&&0===Object.keys(t[e]).length}r.clearPromiseQueue=function(t){Array.isArray(t._promises)&&t._promises.length>0&&o.log(\\\"Clearing previous rejected promises from queue.\\\"),t._promises=[]},r.cleanLayout=function(t){var e,n;t||(t={}),t.xaxis1&&(t.xaxis||(t.xaxis=t.xaxis1),delete t.xaxis1),t.yaxis1&&(t.yaxis||(t.yaxis=t.yaxis1),delete t.yaxis1),t.scene1&&(t.scene||(t.scene=t.scene1),delete t.scene1);var a=(s.subplotsRegistry.cartesian||{}).attrRegex,l=(s.subplotsRegistry.polar||{}).attrRegex,h=(s.subplotsRegistry.ternary||{}).attrRegex,f=(s.subplotsRegistry.gl3d||{}).attrRegex,g=Object.keys(t);for(e=0;e<g.length;e++){var v=g[e];if(a&&a.test(v)){var m=t[v];m.anchor&&\\\"free\\\"!==m.anchor&&(m.anchor=u(m.anchor)),m.overlaying&&(m.overlaying=u(m.overlaying)),m.type||(m.isdate?m.type=\\\"date\\\":m.islog?m.type=\\\"log\\\":!1===m.isdate&&!1===m.islog&&(m.type=\\\"linear\\\")),\\\"withzero\\\"!==m.autorange&&\\\"tozero\\\"!==m.autorange||(m.autorange=!0,m.rangemode=\\\"tozero\\\"),delete m.islog,delete m.isdate,delete m.categories,y(m,\\\"domain\\\")&&delete m.domain,void 0!==m.autotick&&(void 0===m.tickmode&&(m.tickmode=m.autotick?\\\"auto\\\":\\\"linear\\\"),delete m.autotick),d(m)}else if(l&&l.test(v)){d(t[v].radialaxis)}else if(h&&h.test(v)){var x=t[v];d(x.aaxis),d(x.baxis),d(x.caxis)}else if(f&&f.test(v)){var b=t[v],_=b.cameraposition;if(Array.isArray(_)&&4===_[0].length){var w=_[0],k=_[1],T=_[2],A=i([],w),M=[];for(n=0;n<3;++n)M[n]=k[n]+T*A[2+4*n];b.camera={eye:{x:M[0],y:M[1],z:M[2]},center:{x:k[0],y:k[1],z:k[2]},up:{x:0,y:0,z:1}},delete b.cameraposition}d(b.xaxis),d(b.yaxis),d(b.zaxis)}}var S=Array.isArray(t.annotations)?t.annotations.length:0;for(e=0;e<S;e++){var E=t.annotations[e];o.isPlainObject(E)&&(E.ref&&(\\\"paper\\\"===E.ref?(E.xref=\\\"paper\\\",E.yref=\\\"paper\\\"):\\\"data\\\"===E.ref&&(E.xref=\\\"x\\\",E.yref=\\\"y\\\"),delete E.ref),p(E,\\\"xref\\\"),p(E,\\\"yref\\\"))}var C=Array.isArray(t.shapes)?t.shapes.length:0;for(e=0;e<C;e++){var L=t.shapes[e];o.isPlainObject(L)&&(p(L,\\\"xref\\\"),p(L,\\\"yref\\\"))}var P=t.legend;return P&&(P.x>3?(P.x=1.02,P.xanchor=\\\"left\\\"):P.x<-2&&(P.x=-.02,P.xanchor=\\\"right\\\"),P.y>3?(P.y=1.02,P.yanchor=\\\"bottom\\\"):P.y<-2&&(P.y=-.02,P.yanchor=\\\"top\\\")),d(t),\\\"rotate\\\"===t.dragmode&&(t.dragmode=\\\"orbit\\\"),c.clean(t),t.template&&t.template.layout&&r.cleanLayout(t.template.layout),t},r.cleanData=function(t){for(var e=0;e<t.length;e++){var n,i=t[e];if(\\\"histogramy\\\"===i.type&&\\\"xbins\\\"in i&&!(\\\"ybins\\\"in i)&&(i.ybins=i.xbins,delete i.xbins),i.error_y&&\\\"opacity\\\"in i.error_y){var l=c.defaults,h=i.error_y.color||(f(i,\\\"bar\\\")?c.defaultLine:l[e%l.length]);i.error_y.color=c.addOpacity(c.rgb(h),c.opacity(h)*i.error_y.opacity),delete i.error_y.opacity}if(\\\"bardir\\\"in i&&(\\\"h\\\"!==i.bardir||!f(i,\\\"bar\\\")&&\\\"histogram\\\"!==i.type.substr(0,9)||(i.orientation=\\\"h\\\",r.swapXYData(i)),delete i.bardir),\\\"histogramy\\\"===i.type&&r.swapXYData(i),\\\"histogramx\\\"!==i.type&&\\\"histogramy\\\"!==i.type||(i.type=\\\"histogram\\\"),\\\"scl\\\"in i&&!(\\\"colorscale\\\"in i)&&(i.colorscale=i.scl,delete i.scl),\\\"reversescl\\\"in i&&!(\\\"reversescale\\\"in i)&&(i.reversescale=i.reversescl,delete i.reversescl),i.xaxis&&(i.xaxis=u(i.xaxis,\\\"x\\\")),i.yaxis&&(i.yaxis=u(i.yaxis,\\\"y\\\")),f(i,\\\"gl3d\\\")&&i.scene&&(i.scene=s.subplotsRegistry.gl3d.cleanId(i.scene)),!f(i,\\\"pie-like\\\")&&!f(i,\\\"bar-like\\\"))if(Array.isArray(i.textposition))for(n=0;n<i.textposition.length;n++)i.textposition[n]=m(i.textposition[n]);else i.textposition&&(i.textposition=m(i.textposition));var p=a.getModule(i);if(p&&p.colorbar){var x=p.colorbar.container,b=x?i[x]:i;b&&b.colorscale&&(\\\"YIGnBu\\\"===b.colorscale&&(b.colorscale=\\\"YlGnBu\\\"),\\\"YIOrRd\\\"===b.colorscale&&(b.colorscale=\\\"YlOrRd\\\"))}if(\\\"surface\\\"===i.type&&o.isPlainObject(i.contours)){var _=[\\\"x\\\",\\\"y\\\",\\\"z\\\"];for(n=0;n<_.length;n++){var w=i.contours[_[n]];o.isPlainObject(w)&&(w.highlightColor&&(w.highlightcolor=w.highlightColor,delete w.highlightColor),w.highlightWidth&&(w.highlightwidth=w.highlightWidth,delete w.highlightWidth))}}if(\\\"candlestick\\\"===i.type||\\\"ohlc\\\"===i.type){var k=!1!==(i.increasing||{}).showlegend,T=!1!==(i.decreasing||{}).showlegend,A=g(i.increasing),M=g(i.decreasing);if(!1!==A&&!1!==M){var S=v(A,M,k,T);S&&(i.name=S)}else!A&&!M||i.name||(i.name=A||M)}if(Array.isArray(i.transforms)){var E=i.transforms;for(n=0;n<E.length;n++){var C=E[n];if(o.isPlainObject(C))switch(C.type){case\\\"filter\\\":C.filtersrc&&(C.target=C.filtersrc,delete C.filtersrc),C.calendar&&(C.valuecalendar||(C.valuecalendar=C.calendar),delete C.calendar);break;case\\\"groupby\\\":if(C.styles=C.styles||C.style,C.styles&&!Array.isArray(C.styles)){var L=C.styles,P=Object.keys(L);C.styles=[];for(var O=0;O<P.length;O++)C.styles.push({target:P[O],value:L[P[O]]})}}}}y(i,\\\"line\\\")&&delete i.line,\\\"marker\\\"in i&&(y(i.marker,\\\"line\\\")&&delete i.marker.line,y(i,\\\"marker\\\")&&delete i.marker),c.clean(i),i.autobinx&&(delete i.autobinx,delete i.xbins),i.autobiny&&(delete i.autobiny,delete i.ybins),d(i),i.colorbar&&d(i.colorbar),i.marker&&i.marker.colorbar&&d(i.marker.colorbar),i.line&&i.line.colorbar&&d(i.line.colorbar),i.aaxis&&d(i.aaxis),i.baxis&&d(i.baxis)}},r.swapXYData=function(t){var e;if(o.swapAttrs(t,[\\\"?\\\",\\\"?0\\\",\\\"d?\\\",\\\"?bins\\\",\\\"nbins?\\\",\\\"autobin?\\\",\\\"?src\\\",\\\"error_?\\\"]),Array.isArray(t.z)&&Array.isArray(t.z[0])&&(t.transpose?delete t.transpose:t.transpose=!0),t.error_x&&t.error_y){var r=t.error_y,n=\\\"copy_ystyle\\\"in r?r.copy_ystyle:!(r.color||r.thickness||r.width);o.swapAttrs(t,[\\\"error_?.copy_ystyle\\\"]),n&&o.swapAttrs(t,[\\\"error_?.color\\\",\\\"error_?.thickness\\\",\\\"error_?.width\\\"])}if(\\\"string\\\"==typeof t.hoverinfo){var i=t.hoverinfo.split(\\\"+\\\");for(e=0;e<i.length;e++)\\\"x\\\"===i[e]?i[e]=\\\"y\\\":\\\"y\\\"===i[e]&&(i[e]=\\\"x\\\");t.hoverinfo=i.join(\\\"+\\\")}},r.coerceTraceIndices=function(t,e){if(n(e))return[e];if(!Array.isArray(e)||!e.length)return t.data.map(function(t,e){return e});if(Array.isArray(e)){for(var r=[],i=0;i<e.length;i++)o.isIndex(e[i],t.data.length)?r.push(e[i]):o.warn(\\\"trace index (\\\",e[i],\\\") is not a number or is out of bounds\\\");return r}return e},r.manageArrayContainers=function(t,e,r){var i=t.obj,a=t.parts,s=a.length,l=a[s-1],c=n(l);if(c&&null===e){var u=a.slice(0,s-1).join(\\\".\\\");o.nestedProperty(i,u).get().splice(l,1)}else c&&void 0===t.get()?(void 0===t.get()&&(r[t.astr]=null),t.set(e)):t.set(e)};var x=/(\\\\.[^\\\\[\\\\]\\\\.]+|\\\\[[^\\\\[\\\\]\\\\.]+\\\\])$/;function b(t){var e=t.search(x);if(e>0)return t.substr(0,e)}r.hasParent=function(t,e){for(var r=b(e);r;){if(r in t)return!0;r=b(r)}return!1};var _=[\\\"x\\\",\\\"y\\\",\\\"z\\\"];r.clearAxisTypes=function(t,e,r){for(var n=0;n<e.length;n++)for(var i=t._fullData[n],a=0;a<3;a++){var s=h(t,i,_[a]);if(s&&\\\"log\\\"!==s.type){var l=s._name,c=s._id.substr(1);if(\\\"scene\\\"===c.substr(0,5)){if(void 0!==r[c])continue;l=c+\\\".\\\"+l}var u=l+\\\".type\\\";void 0===r[l]&&void 0===r[u]&&o.nestedProperty(t.layout,u).set(null)}}}},{\\\"../components/color\\\":593,\\\"../lib\\\":719,\\\"../plots/cartesian/axis_ids\\\":770,\\\"../plots/plots\\\":828,\\\"../registry\\\":847,\\\"fast-isnumeric\\\":225,\\\"gl-mat4/fromQuat\\\":262}],752:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./plot_api\\\");r.plot=n.plot,r.newPlot=n.newPlot,r.restyle=n.restyle,r.relayout=n.relayout,r.redraw=n.redraw,r.update=n.update,r._guiRestyle=n._guiRestyle,r._guiRelayout=n._guiRelayout,r._guiUpdate=n._guiUpdate,r._storeDirectGUIEdit=n._storeDirectGUIEdit,r.react=n.react,r.extendTraces=n.extendTraces,r.prependTraces=n.prependTraces,r.addTraces=n.addTraces,r.deleteTraces=n.deleteTraces,r.moveTraces=n.moveTraces,r.purge=n.purge,r.addFrames=n.addFrames,r.deleteFrames=n.deleteFrames,r.animate=n.animate,r.setPlotConfig=n.setPlotConfig,r.toImage=t(\\\"./to_image\\\"),r.validate=t(\\\"./validate\\\"),r.downloadImage=t(\\\"../snapshot/download\\\");var i=t(\\\"./template_api\\\");r.makeTemplate=i.makeTemplate,r.validateTemplate=i.validateTemplate},{\\\"../snapshot/download\\\":849,\\\"./plot_api\\\":754,\\\"./template_api\\\":759,\\\"./to_image\\\":760,\\\"./validate\\\":761}],753:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../lib/is_plain_object\\\"),i=t(\\\"../lib/noop\\\"),a=t(\\\"../lib/loggers\\\"),o=t(\\\"../lib/search\\\").sorterAsc,s=t(\\\"../registry\\\");r.containerArrayMatch=t(\\\"./container_array_match\\\");var l=r.isAddVal=function(t){return\\\"add\\\"===t||n(t)},c=r.isRemoveVal=function(t){return null===t||\\\"remove\\\"===t};r.applyContainerArrayChanges=function(t,e,r,n,u){var h=e.astr,f=s.getComponentMethod(h,\\\"supplyLayoutDefaults\\\"),p=s.getComponentMethod(h,\\\"draw\\\"),d=s.getComponentMethod(h,\\\"drawOne\\\"),g=n.replot||n.recalc||f===i||p===i,v=t.layout,m=t._fullLayout;if(r[\\\"\\\"]){Object.keys(r).length>1&&a.warn(\\\"Full array edits are incompatible with other edits\\\",h);var y=r[\\\"\\\"][\\\"\\\"];if(c(y))e.set(null);else{if(!Array.isArray(y))return a.warn(\\\"Unrecognized full array edit value\\\",h,y),!0;e.set(y)}return!g&&(f(v,m),p(t),!0)}var x,b,_,w,k,T,A,M,S=Object.keys(r).map(Number).sort(o),E=e.get(),C=E||[],L=u(m,h).get(),P=[],O=-1,z=C.length;for(x=0;x<S.length;x++)if(w=r[_=S[x]],k=Object.keys(w),T=w[\\\"\\\"],A=l(T),_<0||_>C.length-(A?0:1))a.warn(\\\"index out of range\\\",h,_);else if(void 0!==T)k.length>1&&a.warn(\\\"Insertion & removal are incompatible with edits to the same index.\\\",h,_),c(T)?P.push(_):A?(\\\"add\\\"===T&&(T={}),C.splice(_,0,T),L&&L.splice(_,0,{})):a.warn(\\\"Unrecognized full object edit value\\\",h,_,T),-1===O&&(O=_);else for(b=0;b<k.length;b++)M=h+\\\"[\\\"+_+\\\"].\\\",u(C[_],k[b],M).set(w[k[b]]);for(x=P.length-1;x>=0;x--)C.splice(P[x],1),L&&L.splice(P[x],1);if(C.length?E||e.set(C):e.set(null),g)return!1;if(f(v,m),d!==i){var I;if(-1===O)I=S;else{for(z=Math.max(C.length,z),I=[],x=0;x<S.length&&!((_=S[x])>=O);x++)I.push(_);for(x=O;x<z;x++)I.push(x)}for(x=0;x<I.length;x++)d(t,I[x])}else p(t);return!0}},{\\\"../lib/is_plain_object\\\":720,\\\"../lib/loggers\\\":723,\\\"../lib/noop\\\":728,\\\"../lib/search\\\":738,\\\"../registry\\\":847,\\\"./container_array_match\\\":749}],754:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"fast-isnumeric\\\"),a=t(\\\"has-hover\\\"),o=t(\\\"../lib\\\"),s=o.nestedProperty,l=t(\\\"../lib/events\\\"),c=t(\\\"../lib/queue\\\"),u=t(\\\"../registry\\\"),h=t(\\\"./plot_schema\\\"),f=t(\\\"../plots/plots\\\"),p=t(\\\"../plots/polar/legacy\\\"),d=t(\\\"../plots/cartesian/axes\\\"),g=t(\\\"../components/drawing\\\"),v=t(\\\"../components/color\\\"),m=t(\\\"../plots/cartesian/graph_interact\\\").initInteractions,y=t(\\\"../constants/xmlns_namespaces\\\"),x=t(\\\"../lib/svg_text_utils\\\"),b=t(\\\"../plots/cartesian/select\\\").clearSelect,_=t(\\\"./plot_config\\\").dfltConfig,w=t(\\\"./manage_arrays\\\"),k=t(\\\"./helpers\\\"),T=t(\\\"./subroutines\\\"),A=t(\\\"./edit_types\\\"),M=t(\\\"../plots/cartesian/constants\\\").AX_NAME_PATTERN,S=0,E=5;function C(t){var e=t._fullLayout;e._redrawFromAutoMarginCount?e._redrawFromAutoMarginCount--:t.emit(\\\"plotly_afterplot\\\")}function L(t,e){try{t._fullLayout._paper.style(\\\"background\\\",e)}catch(t){o.error(t)}}function P(t,e){L(t,v.combine(e,\\\"white\\\"))}function O(t,e){if(!t._context){t._context=o.extendDeep({},_);var r=n.select(\\\"base\\\");t._context._baseUrl=r.size()&&r.attr(\\\"href\\\")?window.location.href.split(\\\"#\\\")[0]:\\\"\\\"}var i,s,l,c=t._context;if(e){for(s=Object.keys(e),i=0;i<s.length;i++)\\\"editable\\\"!==(l=s[i])&&\\\"edits\\\"!==l&&l in c&&(\\\"setBackground\\\"===l&&\\\"opaque\\\"===e[l]?c[l]=P:c[l]=e[l]);e.plot3dPixelRatio&&!c.plotGlPixelRatio&&(c.plotGlPixelRatio=c.plot3dPixelRatio);var u=e.editable;if(void 0!==u)for(c.editable=u,s=Object.keys(c.edits),i=0;i<s.length;i++)c.edits[s[i]]=u;if(e.edits)for(s=Object.keys(e.edits),i=0;i<s.length;i++)(l=s[i])in c.edits&&(c.edits[l]=e.edits[l]);c._exportedPlot=e._exportedPlot}c.staticPlot&&(c.editable=!1,c.edits={},c.autosizable=!1,c.scrollZoom=!1,c.doubleClick=!1,c.showTips=!1,c.showLink=!1,c.displayModeBar=!1),\\\"hover\\\"!==c.displayModeBar||a||(c.displayModeBar=!0),\\\"transparent\\\"!==c.setBackground&&\\\"function\\\"==typeof c.setBackground||(c.setBackground=L),c._hasZeroHeight=c._hasZeroHeight||0===t.clientHeight,c._hasZeroWidth=c._hasZeroWidth||0===t.clientWidth;var h=c.scrollZoom,f=c._scrollZoom={};if(!0===h)f.cartesian=1,f.gl3d=1,f.geo=1,f.mapbox=1;else if(\\\"string\\\"==typeof h){var p=h.split(\\\"+\\\");for(i=0;i<p.length;i++)f[p[i]]=1}else!1!==h&&(f.gl3d=1,f.geo=1,f.mapbox=1)}function z(t,e){var r,n,i=e+1,a=[];for(r=0;r<t.length;r++)(n=t[r])<0?a.push(i+n):a.push(n);return a}function I(t,e,r){var n,i;for(n=0;n<e.length;n++){if((i=e[n])!==parseInt(i,10))throw new Error(\\\"all values in \\\"+r+\\\" must be integers\\\");if(i>=t.data.length||i<-t.data.length)throw new Error(r+\\\" must be valid indices for gd.data.\\\");if(e.indexOf(i,n+1)>-1||i>=0&&e.indexOf(-t.data.length+i)>-1||i<0&&e.indexOf(t.data.length+i)>-1)throw new Error(\\\"each index in \\\"+r+\\\" must be unique.\\\")}}function D(t,e,r){if(!Array.isArray(t.data))throw new Error(\\\"gd.data must be an array.\\\");if(\\\"undefined\\\"==typeof e)throw new Error(\\\"currentIndices is a required argument.\\\");if(Array.isArray(e)||(e=[e]),I(t,e,\\\"currentIndices\\\"),\\\"undefined\\\"==typeof r||Array.isArray(r)||(r=[r]),\\\"undefined\\\"!=typeof r&&I(t,r,\\\"newIndices\\\"),\\\"undefined\\\"!=typeof r&&e.length!==r.length)throw new Error(\\\"current and new indices must be of equal length.\\\")}function R(t,e,r,n,a){!function(t,e,r,n){var i=o.isPlainObject(n);if(!Array.isArray(t.data))throw new Error(\\\"gd.data must be an array\\\");if(!o.isPlainObject(e))throw new Error(\\\"update must be a key:value object\\\");if(\\\"undefined\\\"==typeof r)throw new Error(\\\"indices must be an integer or array of integers\\\");for(var a in I(t,r,\\\"indices\\\"),e){if(!Array.isArray(e[a])||e[a].length!==r.length)throw new Error(\\\"attribute \\\"+a+\\\" must be an array of length equal to indices array length\\\");if(i&&(!(a in n)||!Array.isArray(n[a])||n[a].length!==e[a].length))throw new Error(\\\"when maxPoints is set as a key:value object it must contain a 1:1 corrispondence with the keys and number of traces in the update object\\\")}}(t,e,r,n);for(var l=function(t,e,r,n){var a,l,c,u,h,f=o.isPlainObject(n),p=[];for(var d in Array.isArray(r)||(r=[r]),r=z(r,t.data.length-1),e)for(var g=0;g<r.length;g++){if(a=t.data[r[g]],l=(c=s(a,d)).get(),u=e[d][g],!o.isArrayOrTypedArray(u))throw new Error(\\\"attribute: \\\"+d+\\\" index: \\\"+g+\\\" must be an array\\\");if(!o.isArrayOrTypedArray(l))throw new Error(\\\"cannot extend missing or non-array attribute: \\\"+d);if(l.constructor!==u.constructor)throw new Error(\\\"cannot extend array with an array of a different type: \\\"+d);h=f?n[d][g]:n,i(h)||(h=-1),p.push({prop:c,target:l,insert:u,maxp:Math.floor(h)})}return p}(t,e,r,n),c={},u={},h=0;h<l.length;h++){var f=l[h].prop,p=l[h].maxp,d=a(l[h].target,l[h].insert,p);f.set(d[0]),Array.isArray(c[f.astr])||(c[f.astr]=[]),c[f.astr].push(d[1]),Array.isArray(u[f.astr])||(u[f.astr]=[]),u[f.astr].push(l[h].target.length)}return{update:c,maxPoints:u}}function F(t,e){var r=new t.constructor(t.length+e.length);return r.set(t),r.set(e,t.length),r}function B(t,e,n,i){t=o.getGraphDiv(t),k.clearPromiseQueue(t);var a={};if(\\\"string\\\"==typeof e)a[e]=n;else{if(!o.isPlainObject(e))return o.warn(\\\"Restyle fail.\\\",e,n,i),Promise.reject();a=o.extendFlat({},e),void 0===i&&(i=n)}Object.keys(a).length&&(t.changed=!0);var s=k.coerceTraceIndices(t,i),l=V(t,a,s),u=l.flags;u.calc&&(t.calcdata=void 0),u.clearAxisTypes&&k.clearAxisTypes(t,s,{});var h=[];u.fullReplot?h.push(r.plot):(h.push(f.previousPromises),f.supplyDefaults(t),u.markerSize&&(f.doCalcdata(t),Y(h)),u.style&&h.push(T.doTraceStyle),u.colorbars&&h.push(T.doColorBars),h.push(C)),h.push(f.rehover,f.redrag),c.add(t,B,[t,l.undoit,l.traces],B,[t,l.redoit,l.traces]);var p=o.syncOrAsync(h,t);return p&&p.then||(p=Promise.resolve()),p.then(function(){return t.emit(\\\"plotly_restyle\\\",l.eventData),t})}function N(t){return void 0===t?null:t}function j(t,e){return e?function(e,r,n){var i=s(e,r),a=i.set;return i.set=function(e){U((n||\\\"\\\")+r,i.get(),e,t),a(e)},i}:s}function U(t,e,r,n){if(Array.isArray(e)||Array.isArray(r))for(var i=Array.isArray(e)?e:[],a=Array.isArray(r)?r:[],s=Math.max(i.length,a.length),l=0;l<s;l++)U(t+\\\"[\\\"+l+\\\"]\\\",i[l],a[l],n);else if(o.isPlainObject(e)||o.isPlainObject(r)){var c=o.isPlainObject(e)?e:{},u=o.isPlainObject(r)?r:{},h=o.extendFlat({},c,u);for(var f in h)U(t+\\\".\\\"+f,c[f],u[f],n)}else void 0===n[t]&&(n[t]=N(e))}function V(t,e,r){var n,i=t._fullLayout,a=t._fullData,l=t.data,c=i._guiEditing,p=j(i._preGUI,c),g=o.extendDeepAll({},e);q(e);var v,m=A.traceFlags(),y={},x={};function b(){return r.map(function(){})}function _(t){var e=d.id2name(t);-1===v.indexOf(e)&&v.push(e)}function w(t){return\\\"LAYOUT\\\"+t+\\\".autorange\\\"}function T(t){return\\\"LAYOUT\\\"+t+\\\".range\\\"}function M(t){for(var e=t;e<a.length;e++)if(a[e]._input===l[t])return a[e]}function S(n,a,o){if(Array.isArray(n))n.forEach(function(t){S(t,a,o)});else if(!(n in e||k.hasParent(e,n))){var s;if(\\\"LAYOUT\\\"===n.substr(0,6))s=p(t.layout,n.replace(\\\"LAYOUT\\\",\\\"\\\"));else{var u=r[o];s=j(i._tracePreGUI[M(u)._fullInput.uid],c)(l[u],n)}n in x||(x[n]=b()),void 0===x[n][o]&&(x[n][o]=N(s.get())),void 0!==a&&s.set(a)}}function E(t){return function(e){return a[e][t]}}function C(t){return function(e,n){return!1===e?a[r[n]][t]:null}}for(var L in e){if(k.hasParent(e,L))throw new Error(\\\"cannot set \\\"+L+\\\" and a parent attribute simultaneously\\\");var P,O,z,I,D,R,F=e[L];if(\\\"autobinx\\\"!==L&&\\\"autobiny\\\"!==L||(L=L.charAt(L.length-1)+\\\"bins\\\",F=Array.isArray(F)?F.map(C(L)):!1===F?r.map(E(L)):null),y[L]=F,\\\"LAYOUT\\\"!==L.substr(0,6)){for(x[L]=b(),n=0;n<r.length;n++){if(P=l[r[n]],O=M(r[n]),I=(z=j(i._tracePreGUI[O._fullInput.uid],c)(P,L)).get(),void 0!==(D=Array.isArray(F)?F[n%F.length]:F)){var B=z.parts[z.parts.length-1],U=L.substr(0,L.length-B.length-1),V=U?U+\\\".\\\":\\\"\\\",H=U?s(O,U).get():O;if((R=h.getTraceValObject(O,z.parts))&&R.impliedEdits&&null!==D)for(var G in R.impliedEdits)S(o.relativeAttr(L,G),R.impliedEdits[G],n);else if(\\\"thicknessmode\\\"!==B&&\\\"lenmode\\\"!==B||I===D||\\\"fraction\\\"!==D&&\\\"pixels\\\"!==D||!H){if(\\\"type\\\"===L&&(\\\"pie\\\"===D!=(\\\"pie\\\"===I)||\\\"funnelarea\\\"===D!=(\\\"funnelarea\\\"===I))){var Y=\\\"x\\\",W=\\\"y\\\";\\\"bar\\\"!==D&&\\\"bar\\\"!==I||\\\"h\\\"!==P.orientation||(Y=\\\"y\\\",W=\\\"x\\\"),o.swapAttrs(P,[\\\"?\\\",\\\"?src\\\"],\\\"labels\\\",Y),o.swapAttrs(P,[\\\"d?\\\",\\\"?0\\\"],\\\"label\\\",Y),o.swapAttrs(P,[\\\"?\\\",\\\"?src\\\"],\\\"values\\\",W),\\\"pie\\\"===I||\\\"funnelarea\\\"===I?(s(P,\\\"marker.color\\\").set(s(P,\\\"marker.colors\\\").get()),i._pielayer.selectAll(\\\"g.trace\\\").remove()):u.traceIs(P,\\\"cartesian\\\")&&s(P,\\\"marker.colors\\\").set(s(P,\\\"marker.color\\\").get())}}else{var X=i._size,Z=H.orient,J=\\\"top\\\"===Z||\\\"bottom\\\"===Z;if(\\\"thicknessmode\\\"===B){var K=J?X.h:X.w;S(V+\\\"thickness\\\",H.thickness*(\\\"fraction\\\"===D?1/K:K),n)}else{var $=J?X.w:X.h;S(V+\\\"len\\\",H.len*(\\\"fraction\\\"===D?1/$:$),n)}}x[L][n]=N(I);if(-1!==[\\\"swapxy\\\",\\\"swapxyaxes\\\",\\\"orientation\\\",\\\"orientationaxes\\\"].indexOf(L)){if(\\\"orientation\\\"===L){z.set(D);var Q=P.x&&!P.y?\\\"h\\\":\\\"v\\\";if((z.get()||Q)===O.orientation)continue}else\\\"orientationaxes\\\"===L&&(P.orientation={v:\\\"h\\\",h:\\\"v\\\"}[O.orientation]);k.swapXYData(P),m.calc=m.clearAxisTypes=!0}else-1!==f.dataArrayContainers.indexOf(z.parts[0])?(k.manageArrayContainers(z,D,x),m.calc=!0):(R?R.arrayOk&&!u.traceIs(O,\\\"regl\\\")&&(o.isArrayOrTypedArray(D)||o.isArrayOrTypedArray(I))?m.calc=!0:A.update(m,R):m.calc=!0,z.set(D))}}if(-1!==[\\\"swapxyaxes\\\",\\\"orientationaxes\\\"].indexOf(L)&&d.swap(t,r),\\\"orientationaxes\\\"===L){var tt=s(t.layout,\\\"hovermode\\\");\\\"x\\\"===tt.get()?tt.set(\\\"y\\\"):\\\"y\\\"===tt.get()&&tt.set(\\\"x\\\")}if(-1!==[\\\"orientation\\\",\\\"type\\\"].indexOf(L)){for(v=[],n=0;n<r.length;n++){var et=l[r[n]];u.traceIs(et,\\\"cartesian\\\")&&(_(et.xaxis||\\\"x\\\"),_(et.yaxis||\\\"y\\\"))}S(v.map(w),!0,0),S(v.map(T),[0,1],0)}}else z=p(t.layout,L.replace(\\\"LAYOUT\\\",\\\"\\\")),x[L]=[N(z.get())],z.set(Array.isArray(F)?F[0]:F),m.calc=!0}return(m.calc||m.plot)&&(m.fullReplot=!0),{flags:m,undoit:x,redoit:y,traces:r,eventData:o.extendDeepNoArrays([],[g,r])}}function q(t){var e,r,n,i=o.counterRegex(\\\"axis\\\",\\\".title\\\",!1,!1),a=/colorbar\\\\.title$/,s=Object.keys(t);for(e=0;e<s.length;e++)r=s[e],n=t[r],\\\"title\\\"!==r&&!i.test(r)&&!a.test(r)||\\\"string\\\"!=typeof n&&\\\"number\\\"!=typeof n?r.indexOf(\\\"titlefont\\\")>-1?l(r,r.replace(\\\"titlefont\\\",\\\"title.font\\\")):r.indexOf(\\\"titleposition\\\")>-1?l(r,r.replace(\\\"titleposition\\\",\\\"title.position\\\")):r.indexOf(\\\"titleside\\\")>-1?l(r,r.replace(\\\"titleside\\\",\\\"title.side\\\")):r.indexOf(\\\"titleoffset\\\")>-1&&l(r,r.replace(\\\"titleoffset\\\",\\\"title.offset\\\")):l(r,r.replace(\\\"title\\\",\\\"title.text\\\"));function l(e,r){t[r]=t[e],delete t[e]}}function H(t,e,r){if(t=o.getGraphDiv(t),k.clearPromiseQueue(t),t.framework&&t.framework.isPolar)return Promise.resolve(t);var n={};if(\\\"string\\\"==typeof e)n[e]=r;else{if(!o.isPlainObject(e))return o.warn(\\\"Relayout fail.\\\",e,r),Promise.reject();n=o.extendFlat({},e)}Object.keys(n).length&&(t.changed=!0);var i=J(t,n),a=i.flags;a.calc&&(t.calcdata=void 0);var s=[f.previousPromises];a.layoutReplot?s.push(T.layoutReplot):Object.keys(n).length&&(G(t,a,i)||f.supplyDefaults(t),a.legend&&s.push(T.doLegend),a.layoutstyle&&s.push(T.layoutStyles),a.axrange&&Y(s,i.rangesAltered),a.ticks&&s.push(T.doTicksRelayout),a.modebar&&s.push(T.doModeBar),a.camera&&s.push(T.doCamera),a.colorbars&&s.push(T.doColorBars),s.push(C)),s.push(f.rehover,f.redrag),c.add(t,H,[t,i.undoit],H,[t,i.redoit]);var l=o.syncOrAsync(s,t);return l&&l.then||(l=Promise.resolve(t)),l.then(function(){return t.emit(\\\"plotly_relayout\\\",i.eventData),t})}function G(t,e,r){var n=t._fullLayout;if(!e.axrange)return!1;for(var i in e)if(\\\"axrange\\\"!==i&&e[i])return!1;for(var a in r.rangesAltered){var o=d.id2name(a),s=t.layout[o],l=n[o];if(l.autorange=s.autorange,l.range=s.range.slice(),l.cleanRange(),l._matchGroup)for(var c in l._matchGroup)if(c!==a){var u=n[d.id2name(c)];u.autorange=l.autorange,u.range=l.range.slice(),u._input.range=l.range.slice()}}return!0}function Y(t,e){var r=e?function(t){var r=[],n=!0;for(var i in e){var a=d.getFromId(t,i);if(r.push(i),a._matchGroup)for(var o in a._matchGroup)e[o]||r.push(o);a.automargin&&(n=!1)}return d.draw(t,r,{skipTitle:n})}:function(t){return d.draw(t,\\\"redraw\\\")};t.push(b,T.doAutoRangeAndConstraints,r,T.drawData,T.finalDraw)}var W=/^[xyz]axis[0-9]*\\\\.range(\\\\[[0|1]\\\\])?$/,X=/^[xyz]axis[0-9]*\\\\.autorange$/,Z=/^[xyz]axis[0-9]*\\\\.domain(\\\\[[0|1]\\\\])?$/;function J(t,e){var r,n,i,a=t.layout,l=t._fullLayout,c=l._guiEditing,f=j(l._preGUI,c),p=Object.keys(e),g=d.list(t),v=o.extendDeepAll({},e),m={};for(q(e),p=Object.keys(e),n=0;n<p.length;n++)if(0===p[n].indexOf(\\\"allaxes\\\")){for(i=0;i<g.length;i++){var y=g[i]._id.substr(1),x=-1!==y.indexOf(\\\"scene\\\")?y+\\\".\\\":\\\"\\\",b=p[n].replace(\\\"allaxes\\\",x+g[i]._name);e[b]||(e[b]=e[p[n]])}delete e[p[n]]}var _=A.layoutFlags(),T={},S={};function E(t,r){if(Array.isArray(t))t.forEach(function(t){E(t,r)});else if(!(t in e||k.hasParent(e,t))){var n=f(a,t);t in S||(S[t]=N(n.get())),void 0!==r&&n.set(r)}}var C,L={};function P(t){var e=d.name2id(t.split(\\\".\\\")[0]);return L[e]=1,e}for(var O in e){if(k.hasParent(e,O))throw new Error(\\\"cannot set \\\"+O+\\\" and a parent attribute simultaneously\\\");for(var z=f(a,O),I=e[O],D=z.parts.length-1;D>0&&\\\"string\\\"!=typeof z.parts[D];)D--;var R=z.parts[D],F=z.parts[D-1]+\\\".\\\"+R,B=z.parts.slice(0,D).join(\\\".\\\"),U=s(t.layout,B).get(),V=s(l,B).get(),H=z.get();if(void 0!==I){T[O]=I,S[O]=\\\"reverse\\\"===R?I:N(H);var G=h.getLayoutValObject(l,z.parts);if(G&&G.impliedEdits&&null!==I)for(var Y in G.impliedEdits)E(o.relativeAttr(O,Y),G.impliedEdits[Y]);if(-1!==[\\\"width\\\",\\\"height\\\"].indexOf(O))if(I){E(\\\"autosize\\\",null);var J=\\\"height\\\"===O?\\\"width\\\":\\\"height\\\";E(J,l[J])}else l[O]=t._initialAutoSize[O];else if(\\\"autosize\\\"===O)E(\\\"width\\\",I?null:l.width),E(\\\"height\\\",I?null:l.height);else if(F.match(W))P(F),s(l,B+\\\"._inputRange\\\").set(null);else if(F.match(X)){P(F),s(l,B+\\\"._inputRange\\\").set(null);var $=s(l,B).get();$._inputDomain&&($._input.domain=$._inputDomain.slice())}else F.match(Z)&&s(l,B+\\\"._inputDomain\\\").set(null);if(\\\"type\\\"===R){var Q=U,tt=\\\"linear\\\"===V.type&&\\\"log\\\"===I,et=\\\"log\\\"===V.type&&\\\"linear\\\"===I;if(tt||et){if(Q&&Q.range)if(V.autorange)tt&&(Q.range=Q.range[1]>Q.range[0]?[1,2]:[2,1]);else{var rt=Q.range[0],nt=Q.range[1];tt?(rt<=0&&nt<=0&&E(B+\\\".autorange\\\",!0),rt<=0?rt=nt/1e6:nt<=0&&(nt=rt/1e6),E(B+\\\".range[0]\\\",Math.log(rt)/Math.LN10),E(B+\\\".range[1]\\\",Math.log(nt)/Math.LN10)):(E(B+\\\".range[0]\\\",Math.pow(10,rt)),E(B+\\\".range[1]\\\",Math.pow(10,nt)))}else E(B+\\\".autorange\\\",!0);Array.isArray(l._subplots.polar)&&l._subplots.polar.length&&l[z.parts[0]]&&\\\"radialaxis\\\"===z.parts[1]&&delete l[z.parts[0]]._subplot.viewInitial[\\\"radialaxis.range\\\"],u.getComponentMethod(\\\"annotations\\\",\\\"convertCoords\\\")(t,V,I,E),u.getComponentMethod(\\\"images\\\",\\\"convertCoords\\\")(t,V,I,E)}else E(B+\\\".autorange\\\",!0),E(B+\\\".range\\\",null);s(l,B+\\\"._inputRange\\\").set(null)}else if(R.match(M)){var it=s(l,O).get(),at=(I||{}).type;at&&\\\"-\\\"!==at||(at=\\\"linear\\\"),u.getComponentMethod(\\\"annotations\\\",\\\"convertCoords\\\")(t,it,at,E),u.getComponentMethod(\\\"images\\\",\\\"convertCoords\\\")(t,it,at,E)}var ot=w.containerArrayMatch(O);if(ot){r=ot.array,n=ot.index;var st=ot.property,lt=G||{editType:\\\"calc\\\"};\\\"\\\"!==n&&\\\"\\\"===st&&(w.isAddVal(I)?S[O]=null:w.isRemoveVal(I)?S[O]=(s(a,r).get()||[])[n]:o.warn(\\\"unrecognized full object value\\\",e)),A.update(_,lt),m[r]||(m[r]={});var ct=m[r][n];ct||(ct=m[r][n]={}),ct[st]=I,delete e[O]}else\\\"reverse\\\"===R?(U.range?U.range.reverse():(E(B+\\\".autorange\\\",!0),U.range=[1,0]),V.autorange?_.calc=!0:_.plot=!0):(l._has(\\\"scatter-like\\\")&&l._has(\\\"regl\\\")&&\\\"dragmode\\\"===O&&(\\\"lasso\\\"===I||\\\"select\\\"===I)&&\\\"lasso\\\"!==H&&\\\"select\\\"!==H?_.plot=!0:l._has(\\\"gl2d\\\")?_.plot=!0:G?A.update(_,G):_.calc=!0,z.set(I))}}for(r in m){w.applyContainerArrayChanges(t,f(a,r),m[r],_,f)||(_.plot=!0)}var ut=l._axisConstraintGroups||[];for(C in L)for(n=0;n<ut.length;n++){var ht=ut[n];if(ht[C])for(var ft in _.calc=!0,ht)L[ft]||(d.getFromId(t,ft)._constraintShrinkable=!0)}return(K(t)||e.height||e.width)&&(_.plot=!0),(_.plot||_.calc)&&(_.layoutReplot=!0),{flags:_,rangesAltered:L,undoit:S,redoit:T,eventData:v}}function K(t){var e=t._fullLayout,r=e.width,n=e.height;return t.layout.autosize&&f.plotAutoSize(t,t.layout,e),e.width!==r||e.height!==n}function $(t,e,n,i){if(t=o.getGraphDiv(t),k.clearPromiseQueue(t),t.framework&&t.framework.isPolar)return Promise.resolve(t);o.isPlainObject(e)||(e={}),o.isPlainObject(n)||(n={}),Object.keys(e).length&&(t.changed=!0),Object.keys(n).length&&(t.changed=!0);var a=k.coerceTraceIndices(t,i),s=V(t,o.extendFlat({},e),a),l=s.flags,u=J(t,o.extendFlat({},n)),h=u.flags;(l.calc||h.calc)&&(t.calcdata=void 0),l.clearAxisTypes&&k.clearAxisTypes(t,a,n);var p=[];h.layoutReplot?p.push(T.layoutReplot):l.fullReplot?p.push(r.plot):(p.push(f.previousPromises),G(t,h,u)||f.supplyDefaults(t),l.style&&p.push(T.doTraceStyle),(l.colorbars||h.colorbars)&&p.push(T.doColorBars),h.legend&&p.push(T.doLegend),h.layoutstyle&&p.push(T.layoutStyles),h.axrange&&Y(p,u.rangesAltered),h.ticks&&p.push(T.doTicksRelayout),h.modebar&&p.push(T.doModeBar),h.camera&&p.push(T.doCamera),p.push(C)),p.push(f.rehover,f.redrag),c.add(t,$,[t,s.undoit,u.undoit,s.traces],$,[t,s.redoit,u.redoit,s.traces]);var d=o.syncOrAsync(p,t);return d&&d.then||(d=Promise.resolve(t)),d.then(function(){return t.emit(\\\"plotly_update\\\",{data:s.eventData,layout:u.eventData}),t})}function Q(t){return function(e){e._fullLayout._guiEditing=!0;var r=t.apply(null,arguments);return e._fullLayout._guiEditing=!1,r}}var tt=[{pattern:/^hiddenlabels/,attr:\\\"legend.uirevision\\\"},{pattern:/^((x|y)axis\\\\d*)\\\\.((auto)?range|title\\\\.text)/},{pattern:/axis\\\\d*\\\\.showspikes$/,attr:\\\"modebar.uirevision\\\"},{pattern:/(hover|drag)mode$/,attr:\\\"modebar.uirevision\\\"},{pattern:/^(scene\\\\d*)\\\\.camera/},{pattern:/^(geo\\\\d*)\\\\.(projection|center)/},{pattern:/^(ternary\\\\d*\\\\.[abc]axis)\\\\.(min|title\\\\.text)$/},{pattern:/^(polar\\\\d*\\\\.radialaxis)\\\\.((auto)?range|angle|title\\\\.text)/},{pattern:/^(polar\\\\d*\\\\.angularaxis)\\\\.rotation/},{pattern:/^(mapbox\\\\d*)\\\\.(center|zoom|bearing|pitch)/},{pattern:/^legend\\\\.(x|y)$/,attr:\\\"editrevision\\\"},{pattern:/^(shapes|annotations)/,attr:\\\"editrevision\\\"},{pattern:/^title\\\\.text$/,attr:\\\"editrevision\\\"}],et=[{pattern:/^selectedpoints$/,attr:\\\"selectionrevision\\\"},{pattern:/(^|value\\\\.)visible$/,attr:\\\"legend.uirevision\\\"},{pattern:/^dimensions\\\\[\\\\d+\\\\]\\\\.constraintrange/},{pattern:/^node\\\\.(x|y|groups)/},{pattern:/^level$/},{pattern:/(^|value\\\\.)name$/},{pattern:/colorbar\\\\.title\\\\.text$/},{pattern:/colorbar\\\\.(x|y)$/,attr:\\\"editrevision\\\"}];function rt(t,e){for(var r=0;r<e.length;r++){var n=e[r],i=t.match(n.pattern);if(i)return{head:i[1],attr:n.attr}}}function nt(t,e){var r=s(e,t).get();if(void 0!==r)return r;var n=t.split(\\\".\\\");for(n.pop();n.length>1;)if(n.pop(),void 0!==(r=s(e,n.join(\\\".\\\")+\\\".uirevision\\\").get()))return r;return e.uirevision}function it(t,e){for(var r=0;r<e.length;r++)if(e[r]._fullInput.uid===t)return r;return-1}function at(t,e,r){for(var n=0;n<e.length;n++)if(e[n].uid===t)return n;return!e[r]||e[r].uid?-1:r}function ot(t,e){var r=o.isPlainObject(t),n=Array.isArray(t);return r||n?(r&&o.isPlainObject(e)||n&&Array.isArray(e))&&JSON.stringify(t)===JSON.stringify(e):t===e}function st(t,e,r,n){var i,a,l,c=n.getValObject,u=n.flags,h=n.immutable,f=n.inArray,p=n.arrayIndex;function d(){var t=i.editType;f&&-1!==t.indexOf(\\\"arraydraw\\\")?o.pushUnique(u.arrays[f],p):(A.update(u,i),\\\"none\\\"!==t&&u.nChanges++,n.transition&&i.anim&&u.nChangesAnim++,(W.test(l)||X.test(l))&&(u.rangesAltered[r[0]]=1),Z.test(l)&&s(e,\\\"_inputDomain\\\").set(null),\\\"datarevision\\\"===a&&(u.newDataRevision=1))}function g(t){return\\\"data_array\\\"===t.valType||t.arrayOk}for(a in t){if(u.calc&&!n.transition)return;var v=t[a],m=e[a],y=r.concat(a);if(l=y.join(\\\".\\\"),\\\"_\\\"!==a.charAt(0)&&\\\"function\\\"!=typeof v&&v!==m){if((\\\"tick0\\\"===a||\\\"dtick\\\"===a)&&\\\"geo\\\"!==r[0]){var x=e.tickmode;if(\\\"auto\\\"===x||\\\"array\\\"===x||!x)continue}if((\\\"range\\\"!==a||!e.autorange)&&(\\\"zmin\\\"!==a&&\\\"zmax\\\"!==a||\\\"contourcarpet\\\"!==e.type)&&(i=c(y))&&(!i._compareAsJSON||JSON.stringify(v)!==JSON.stringify(m))){var b,_=i.valType,w=g(i),k=Array.isArray(v),T=Array.isArray(m);if(k&&T){var M=\\\"_input_\\\"+a,S=t[M],E=e[M];if(Array.isArray(S)&&S===E)continue}if(void 0===m)w&&k?u.calc=!0:d();else if(i._isLinkedToArray){var C=[],L=!1;f||(u.arrays[a]=C);var P=Math.min(v.length,m.length),O=Math.max(v.length,m.length);if(P!==O){if(\\\"arraydraw\\\"!==i.editType){d();continue}L=!0}for(b=0;b<P;b++)st(v[b],m[b],y.concat(b),o.extendFlat({inArray:a,arrayIndex:b},n));if(L)for(b=P;b<O;b++)C.push(b)}else!_&&o.isPlainObject(v)?st(v,m,y,n):w?k&&T?(h&&(u.calc=!0),(h||n.newDataRevision)&&d()):k!==T?u.calc=!0:d():k&&T&&v.length===m.length&&String(v)===String(m)||d()}}}for(a in e)if(!(a in t||\\\"_\\\"===a.charAt(0)||\\\"function\\\"==typeof e[a])){if(g(i=c(r.concat(a)))&&Array.isArray(e[a]))return void(u.calc=!0);d()}}function lt(t){var e=n.select(t),r=t._fullLayout;if(r._container=e.selectAll(\\\".plot-container\\\").data([0]),r._container.enter().insert(\\\"div\\\",\\\":first-child\\\").classed(\\\"plot-container\\\",!0).classed(\\\"plotly\\\",!0),r._paperdiv=r._container.selectAll(\\\".svg-container\\\").data([0]),r._paperdiv.enter().append(\\\"div\\\").classed(\\\"svg-container\\\",!0).style(\\\"position\\\",\\\"relative\\\"),r._glcontainer=r._paperdiv.selectAll(\\\".gl-container\\\").data([{}]),r._glcontainer.enter().append(\\\"div\\\").classed(\\\"gl-container\\\",!0),r._paperdiv.selectAll(\\\".main-svg\\\").remove(),r._paperdiv.select(\\\".modebar-container\\\").remove(),r._paper=r._paperdiv.insert(\\\"svg\\\",\\\":first-child\\\").classed(\\\"main-svg\\\",!0),r._toppaper=r._paperdiv.append(\\\"svg\\\").classed(\\\"main-svg\\\",!0),r._modebardiv=r._paperdiv.append(\\\"div\\\"),r._hoverpaper=r._paperdiv.append(\\\"svg\\\").classed(\\\"main-svg\\\",!0),!r._uid){var i={};n.selectAll(\\\"defs\\\").each(function(){this.id&&(i[this.id.split(\\\"-\\\")[1]]=1)}),r._uid=o.randstr(i)}r._paperdiv.selectAll(\\\".main-svg\\\").attr(y.svgAttrs),r._defs=r._paper.append(\\\"defs\\\").attr(\\\"id\\\",\\\"defs-\\\"+r._uid),r._clips=r._defs.append(\\\"g\\\").classed(\\\"clips\\\",!0),r._topdefs=r._toppaper.append(\\\"defs\\\").attr(\\\"id\\\",\\\"topdefs-\\\"+r._uid),r._topclips=r._topdefs.append(\\\"g\\\").classed(\\\"clips\\\",!0),r._bgLayer=r._paper.append(\\\"g\\\").classed(\\\"bglayer\\\",!0),r._draggers=r._paper.append(\\\"g\\\").classed(\\\"draglayer\\\",!0);var a=r._paper.append(\\\"g\\\").classed(\\\"layer-below\\\",!0);r._imageLowerLayer=a.append(\\\"g\\\").classed(\\\"imagelayer\\\",!0),r._shapeLowerLayer=a.append(\\\"g\\\").classed(\\\"shapelayer\\\",!0),r._cartesianlayer=r._paper.append(\\\"g\\\").classed(\\\"cartesianlayer\\\",!0),r._polarlayer=r._paper.append(\\\"g\\\").classed(\\\"polarlayer\\\",!0),r._ternarylayer=r._paper.append(\\\"g\\\").classed(\\\"ternarylayer\\\",!0),r._geolayer=r._paper.append(\\\"g\\\").classed(\\\"geolayer\\\",!0),r._funnelarealayer=r._paper.append(\\\"g\\\").classed(\\\"funnelarealayer\\\",!0),r._pielayer=r._paper.append(\\\"g\\\").classed(\\\"pielayer\\\",!0),r._sunburstlayer=r._paper.append(\\\"g\\\").classed(\\\"sunburstlayer\\\",!0),r._indicatorlayer=r._toppaper.append(\\\"g\\\").classed(\\\"indicatorlayer\\\",!0),r._glimages=r._paper.append(\\\"g\\\").classed(\\\"glimages\\\",!0);var s=r._toppaper.append(\\\"g\\\").classed(\\\"layer-above\\\",!0);r._imageUpperLayer=s.append(\\\"g\\\").classed(\\\"imagelayer\\\",!0),r._shapeUpperLayer=s.append(\\\"g\\\").classed(\\\"shapelayer\\\",!0),r._infolayer=r._toppaper.append(\\\"g\\\").classed(\\\"infolayer\\\",!0),r._menulayer=r._toppaper.append(\\\"g\\\").classed(\\\"menulayer\\\",!0),r._zoomlayer=r._toppaper.append(\\\"g\\\").classed(\\\"zoomlayer\\\",!0),r._hoverlayer=r._hoverpaper.append(\\\"g\\\").classed(\\\"hoverlayer\\\",!0),r._modebardiv.classed(\\\"modebar-container\\\",!0).style(\\\"position\\\",\\\"absolute\\\").style(\\\"top\\\",\\\"0px\\\").style(\\\"right\\\",\\\"0px\\\"),t.emit(\\\"plotly_framework\\\")}r.animate=function(t,e,r){if(t=o.getGraphDiv(t),!o.isPlotDiv(t))throw new Error(\\\"This element is not a Plotly plot: \\\"+t+\\\". It's likely that you've failed to create a plot before animating it. For more details, see https://plot.ly/javascript/animations/\\\");var n=t._transitionData;n._frameQueue||(n._frameQueue=[]);var i=(r=f.supplyAnimationDefaults(r)).transition,a=r.frame;function s(t){return Array.isArray(i)?t>=i.length?i[0]:i[t]:i}function l(t){return Array.isArray(a)?t>=a.length?a[0]:a[t]:a}function c(t,e){var r=0;return function(){if(t&&++r===e)return t()}}return void 0===n._frameWaitingCnt&&(n._frameWaitingCnt=0),new Promise(function(a,u){function h(){n._currentFrame&&n._currentFrame.onComplete&&n._currentFrame.onComplete();var e=n._currentFrame=n._frameQueue.shift();if(e){var r=e.name?e.name.toString():null;t._fullLayout._currentFrame=r,n._lastFrameAt=Date.now(),n._timeToNext=e.frameOpts.duration,f.transition(t,e.frame.data,e.frame.layout,k.coerceTraceIndices(t,e.frame.traces),e.frameOpts,e.transitionOpts).then(function(){e.onComplete&&e.onComplete()}),t.emit(\\\"plotly_animatingframe\\\",{name:r,frame:e.frame,animation:{frame:e.frameOpts,transition:e.transitionOpts}})}else t.emit(\\\"plotly_animated\\\"),window.cancelAnimationFrame(n._animationRaf),n._animationRaf=null}function p(){t.emit(\\\"plotly_animating\\\"),n._lastFrameAt=-1/0,n._timeToNext=0,n._runningTransitions=0,n._currentFrame=null;var e=function(){n._animationRaf=window.requestAnimationFrame(e),Date.now()-n._lastFrameAt>n._timeToNext&&h()};e()}var d,g,v=0;function m(t){return Array.isArray(i)?v>=i.length?t.transitionOpts=i[v]:t.transitionOpts=i[0]:t.transitionOpts=i,v++,t}var y=[],x=null==e,b=Array.isArray(e);if(x||b||!o.isPlainObject(e)){if(x||-1!==[\\\"string\\\",\\\"number\\\"].indexOf(typeof e))for(d=0;d<n._frames.length;d++)(g=n._frames[d])&&(x||String(g.group)===String(e))&&y.push({type:\\\"byname\\\",name:String(g.name),data:m({name:g.name})});else if(b)for(d=0;d<e.length;d++){var _=e[d];-1!==[\\\"number\\\",\\\"string\\\"].indexOf(typeof _)?(_=String(_),y.push({type:\\\"byname\\\",name:_,data:m({name:_})})):o.isPlainObject(_)&&y.push({type:\\\"object\\\",data:m(o.extendFlat({},_))})}}else y.push({type:\\\"object\\\",data:m(o.extendFlat({},e))});for(d=0;d<y.length;d++)if(\\\"byname\\\"===(g=y[d]).type&&!n._frameHash[g.data.name])return o.warn('animate failure: frame not found: \\\"'+g.data.name+'\\\"'),void u();-1!==[\\\"next\\\",\\\"immediate\\\"].indexOf(r.mode)&&function(){if(0!==n._frameQueue.length){for(;n._frameQueue.length;){var e=n._frameQueue.pop();e.onInterrupt&&e.onInterrupt()}t.emit(\\\"plotly_animationinterrupted\\\",[])}}(),\\\"reverse\\\"===r.direction&&y.reverse();var w=t._fullLayout._currentFrame;if(w&&r.fromcurrent){var T=-1;for(d=0;d<y.length;d++)if(\\\"byname\\\"===(g=y[d]).type&&g.name===w){T=d;break}if(T>0&&T<y.length-1){var A=[];for(d=0;d<y.length;d++)g=y[d],(\\\"byname\\\"!==y[d].type||d>T)&&A.push(g);y=A}}y.length>0?function(e){if(0!==e.length){for(var i=0;i<e.length;i++){var o;o=\\\"byname\\\"===e[i].type?f.computeFrame(t,e[i].name):e[i].data;var h=l(i),d=s(i);d.duration=Math.min(d.duration,h.duration);var g={frame:o,name:e[i].name,frameOpts:h,transitionOpts:d};i===e.length-1&&(g.onComplete=c(a,2),g.onInterrupt=u),n._frameQueue.push(g)}\\\"immediate\\\"===r.mode&&(n._lastFrameAt=-1/0),n._animationRaf||p()}}(y):(t.emit(\\\"plotly_animated\\\"),a())})},r.addFrames=function(t,e,r){if(t=o.getGraphDiv(t),null==e)return Promise.resolve();if(!o.isPlotDiv(t))throw new Error(\\\"This element is not a Plotly plot: \\\"+t+\\\". It's likely that you've failed to create a plot before adding frames. For more details, see https://plot.ly/javascript/animations/\\\");var n,i,a,s,l=t._transitionData._frames,u=t._transitionData._frameHash;if(!Array.isArray(e))throw new Error(\\\"addFrames failure: frameList must be an Array of frame definitions\\\"+e);var h=l.length+2*e.length,p=[],d={};for(n=e.length-1;n>=0;n--)if(o.isPlainObject(e[n])){var g=e[n].name,v=(u[g]||d[g]||{}).name,m=e[n].name,y=u[v]||d[v];v&&m&&\\\"number\\\"==typeof m&&y&&S<E&&(S++,o.warn('addFrames: overwriting frame \\\"'+(u[v]||d[v]).name+'\\\" with a frame whose name of type \\\"number\\\" also equates to \\\"'+v+'\\\". This is valid but may potentially lead to unexpected behavior since all plotly.js frame names are stored internally as strings.'),S===E&&o.warn(\\\"addFrames: This API call has yielded too many of these warnings. For the rest of this call, further warnings about numeric frame names will be suppressed.\\\")),d[g]={name:g},p.push({frame:f.supplyFrameDefaults(e[n]),index:r&&void 0!==r[n]&&null!==r[n]?r[n]:h+n})}p.sort(function(t,e){return t.index>e.index?-1:t.index<e.index?1:0});var x=[],b=[],_=l.length;for(n=p.length-1;n>=0;n--){if(\\\"number\\\"==typeof(i=p[n].frame).name&&o.warn(\\\"Warning: addFrames accepts frames with numeric names, but the numbers areimplicitly cast to strings\\\"),!i.name)for(;u[i.name=\\\"frame \\\"+t._transitionData._counter++];);if(u[i.name]){for(a=0;a<l.length&&(l[a]||{}).name!==i.name;a++);x.push({type:\\\"replace\\\",index:a,value:i}),b.unshift({type:\\\"replace\\\",index:a,value:l[a]})}else s=Math.max(0,Math.min(p[n].index,_)),x.push({type:\\\"insert\\\",index:s,value:i}),b.unshift({type:\\\"delete\\\",index:s}),_++}var w=f.modifyFrames,k=f.modifyFrames,T=[t,b],A=[t,x];return c&&c.add(t,w,T,k,A),f.modifyFrames(t,x)},r.deleteFrames=function(t,e){if(t=o.getGraphDiv(t),!o.isPlotDiv(t))throw new Error(\\\"This element is not a Plotly plot: \\\"+t);var r,n,i=t._transitionData._frames,a=[],s=[];if(!e)for(e=[],r=0;r<i.length;r++)e.push(r);for((e=e.slice()).sort(),r=e.length-1;r>=0;r--)n=e[r],a.push({type:\\\"delete\\\",index:n}),s.unshift({type:\\\"insert\\\",index:n,value:i[n]});var l=f.modifyFrames,u=f.modifyFrames,h=[t,s],p=[t,a];return c&&c.add(t,l,h,u,p),f.modifyFrames(t,a)},r.addTraces=function t(e,n,i){e=o.getGraphDiv(e);var a,s,l=[],u=r.deleteTraces,h=t,f=[e,l],p=[e,n];for(function(t,e,r){var n,i;if(!Array.isArray(t.data))throw new Error(\\\"gd.data must be an array.\\\");if(\\\"undefined\\\"==typeof e)throw new Error(\\\"traces must be defined.\\\");for(Array.isArray(e)||(e=[e]),n=0;n<e.length;n++)if(\\\"object\\\"!=typeof(i=e[n])||Array.isArray(i)||null===i)throw new Error(\\\"all values in traces array must be non-array objects\\\");if(\\\"undefined\\\"==typeof r||Array.isArray(r)||(r=[r]),\\\"undefined\\\"!=typeof r&&r.length!==e.length)throw new Error(\\\"if indices is specified, traces.length must equal indices.length\\\")}(e,n,i),Array.isArray(n)||(n=[n]),n=n.map(function(t){return o.extendFlat({},t)}),k.cleanData(n),a=0;a<n.length;a++)e.data.push(n[a]);for(a=0;a<n.length;a++)l.push(-n.length+a);if(\\\"undefined\\\"==typeof i)return s=r.redraw(e),c.add(e,u,f,h,p),s;Array.isArray(i)||(i=[i]);try{D(e,l,i)}catch(t){throw e.data.splice(e.data.length-n.length,n.length),t}return c.startSequence(e),c.add(e,u,f,h,p),s=r.moveTraces(e,l,i),c.stopSequence(e),s},r.deleteTraces=function t(e,n){e=o.getGraphDiv(e);var i,a,s=[],l=r.addTraces,u=t,h=[e,s,n],f=[e,n];if(\\\"undefined\\\"==typeof n)throw new Error(\\\"indices must be an integer or array of integers.\\\");for(Array.isArray(n)||(n=[n]),I(e,n,\\\"indices\\\"),(n=z(n,e.data.length-1)).sort(o.sorterDes),i=0;i<n.length;i+=1)a=e.data.splice(n[i],1)[0],s.push(a);var p=r.redraw(e);return c.add(e,l,h,u,f),p},r.extendTraces=function t(e,n,i,a){var s=R(e=o.getGraphDiv(e),n,i,a,function(t,e,r){var n,i;if(o.isTypedArray(t))if(r<0){var a=new t.constructor(0),s=F(t,e);r<0?(n=s,i=a):(n=a,i=s)}else if(n=new t.constructor(r),i=new t.constructor(t.length+e.length-r),r===e.length)n.set(e),i.set(t);else if(r<e.length){var l=e.length-r;n.set(e.subarray(l)),i.set(t),i.set(e.subarray(0,l),t.length)}else{var c=r-e.length,u=t.length-c;n.set(t.subarray(u)),n.set(e,c),i.set(t.subarray(0,u))}else n=t.concat(e),i=r>=0&&r<n.length?n.splice(0,n.length-r):[];return[n,i]}),l=r.redraw(e),u=[e,s.update,i,s.maxPoints];return c.add(e,r.prependTraces,u,t,arguments),l},r.moveTraces=function t(e,n,i){var a,s=[],l=[],u=t,h=t,f=[e=o.getGraphDiv(e),i,n],p=[e,n,i];if(D(e,n,i),n=Array.isArray(n)?n:[n],\\\"undefined\\\"==typeof i)for(i=[],a=0;a<n.length;a++)i.push(-n.length+a);for(i=Array.isArray(i)?i:[i],n=z(n,e.data.length-1),i=z(i,e.data.length-1),a=0;a<e.data.length;a++)-1===n.indexOf(a)&&s.push(e.data[a]);for(a=0;a<n.length;a++)l.push({newIndex:i[a],trace:e.data[n[a]]});for(l.sort(function(t,e){return t.newIndex-e.newIndex}),a=0;a<l.length;a+=1)s.splice(l[a].newIndex,0,l[a].trace);e.data=s;var d=r.redraw(e);return c.add(e,u,f,h,p),d},r.prependTraces=function t(e,n,i,a){var s=R(e=o.getGraphDiv(e),n,i,a,function(t,e,r){var n,i;if(o.isTypedArray(t))if(r<=0){var a=new t.constructor(0),s=F(e,t);r<0?(n=s,i=a):(n=a,i=s)}else if(n=new t.constructor(r),i=new t.constructor(t.length+e.length-r),r===e.length)n.set(e),i.set(t);else if(r<e.length){var l=e.length-r;n.set(e.subarray(0,l)),i.set(e.subarray(l)),i.set(t,l)}else{var c=r-e.length;n.set(e),n.set(t.subarray(0,c),e.length),i.set(t.subarray(c))}else n=e.concat(t),i=r>=0&&r<n.length?n.splice(r,n.length):[];return[n,i]}),l=r.redraw(e),u=[e,s.update,i,s.maxPoints];return c.add(e,r.extendTraces,u,t,arguments),l},r.newPlot=function(t,e,n,i){return t=o.getGraphDiv(t),f.cleanPlot([],{},t._fullData||[],t._fullLayout||{}),f.purge(t),r.plot(t,e,n,i)},r.plot=function(t,e,i,a){var s;if(t=o.getGraphDiv(t),l.init(t),o.isPlainObject(e)){var c=e;e=c.data,i=c.layout,a=c.config,s=c.frames}if(!1===l.triggerHandler(t,\\\"plotly_beforeplot\\\",[e,i,a]))return Promise.reject();e||i||o.isPlotDiv(t)||o.warn(\\\"Calling Plotly.plot as if redrawing but this container doesn't yet have a plot.\\\",t),O(t,a),i||(i={}),n.select(t).classed(\\\"js-plotly-plot\\\",!0),g.makeTester(),Array.isArray(t._promises)||(t._promises=[]);var h=0===(t.data||[]).length&&Array.isArray(e);Array.isArray(e)&&(k.cleanData(e),h?t.data=e:t.data.push.apply(t.data,e),t.empty=!1),t.layout&&!h||(t.layout=k.cleanLayout(i)),f.supplyDefaults(t);var v=t._fullLayout,y=v._has(\\\"cartesian\\\");if(!v._has(\\\"polar\\\")&&e&&e[0]&&e[0].r)return o.log(\\\"Legacy polar charts are deprecated!\\\"),function(t,e,r){var i=n.select(t).selectAll(\\\".plot-container\\\").data([0]);i.enter().insert(\\\"div\\\",\\\":first-child\\\").classed(\\\"plot-container plotly\\\",!0);var a=i.selectAll(\\\".svg-container\\\").data([0]);a.enter().append(\\\"div\\\").classed(\\\"svg-container\\\",!0).style(\\\"position\\\",\\\"relative\\\"),a.html(\\\"\\\"),e&&(t.data=e),r&&(t.layout=r),p.manager.fillLayout(t),a.style({width:t._fullLayout.width+\\\"px\\\",height:t._fullLayout.height+\\\"px\\\"}),t.framework=p.manager.framework(t),t.framework({data:t.data,layout:t.layout},a.node()),t.framework.setUndoPoint();var s=t.framework.svg(),l=1,c=t._fullLayout.title?t._fullLayout.title.text:\\\"\\\";\\\"\\\"!==c&&c||(l=0);var u=function(){this.call(x.convertToTspans,t)},h=s.select(\\\".title-group text\\\").call(u);if(t._context.edits.titleText){var d=o._(t,\\\"Click to enter Plot title\\\");c&&c!==d||(l=.2,h.attr({\\\"data-unformatted\\\":d}).text(d).style({opacity:l}).on(\\\"mouseover.opacity\\\",function(){n.select(this).transition().duration(100).style(\\\"opacity\\\",1)}).on(\\\"mouseout.opacity\\\",function(){n.select(this).transition().duration(1e3).style(\\\"opacity\\\",0)}));var g=function(){this.call(x.makeEditable,{gd:t}).on(\\\"edit\\\",function(e){t.framework({layout:{title:{text:e}}}),this.text(e).call(u),this.call(g)}).on(\\\"cancel\\\",function(){var t=this.attr(\\\"data-unformatted\\\");this.text(t).call(u)})};h.call(g)}return t._context.setBackground(t,t._fullLayout.paper_bgcolor),f.addLinks(t),Promise.resolve()}(t,e,i);v._replotting=!0,h&&lt(t),t.framework!==lt&&(t.framework=lt,lt(t)),g.initGradients(t),h&&d.saveShowSpikeInitial(t);var b=!t.calcdata||t.calcdata.length!==(t._fullData||[]).length;b&&f.doCalcdata(t);for(var _=0;_<t.calcdata.length;_++)t.calcdata[_][0].trace=t._fullData[_];t._context.responsive?t._responsiveChartHandler||(t._responsiveChartHandler=function(){o.isHidden(t)||f.resize(t)},window.addEventListener(\\\"resize\\\",t._responsiveChartHandler)):o.clearResponsive(t);var w=o.extendFlat({},v._size),A=0;function M(){return f.clearAutoMarginIds(t),T.drawMarginPushers(t),d.allowAutoMargin(t),f.doAutoMargin(t),f.previousPromises(t)}function S(){t._transitioning||(T.doAutoRangeAndConstraints(t),h&&d.saveRangeInitial(t),u.getComponentMethod(\\\"rangeslider\\\",\\\"calcAutorange\\\")(t))}var E=[f.previousPromises,function(){if(s)return r.addFrames(t,s)},function e(){for(var r=v._basePlotModules,n=0;n<r.length;n++)r[n].drawFramework&&r[n].drawFramework(t);if(!v._glcanvas&&v._has(\\\"gl\\\")&&(v._glcanvas=v._glcontainer.selectAll(\\\".gl-canvas\\\").data([{key:\\\"contextLayer\\\",context:!0,pick:!1},{key:\\\"focusLayer\\\",context:!1,pick:!1},{key:\\\"pickLayer\\\",context:!1,pick:!0}],function(t){return t.key}),v._glcanvas.enter().append(\\\"canvas\\\").attr(\\\"class\\\",function(t){return\\\"gl-canvas gl-canvas-\\\"+t.key.replace(\\\"Layer\\\",\\\"\\\")}).style({position:\\\"absolute\\\",top:0,left:0,overflow:\\\"visible\\\",\\\"pointer-events\\\":\\\"none\\\"})),v._glcanvas){v._glcanvas.attr(\\\"width\\\",v.width).attr(\\\"height\\\",v.height);var i=v._glcanvas.data()[0].regl;if(i&&(Math.floor(v.width)!==i._gl.drawingBufferWidth||Math.floor(v.height)!==i._gl.drawingBufferHeight)){var a=\\\"WebGL context buffer and canvas dimensions do not match due to browser/WebGL bug.\\\";if(!A)return o.log(a+\\\" Clearing graph and plotting again.\\\"),f.cleanPlot([],{},t._fullData,v),f.supplyDefaults(t),v=t._fullLayout,f.doCalcdata(t),A++,e();o.error(a)}}return\\\"h\\\"===v.modebar.orientation?v._modebardiv.style(\\\"height\\\",null).style(\\\"width\\\",\\\"100%\\\"):v._modebardiv.style(\\\"width\\\",null).style(\\\"height\\\",v.height+\\\"px\\\"),f.previousPromises(t)},M,function(){if(f.didMarginChange(w,v._size))return o.syncOrAsync([M,T.layoutStyles],t)}];y&&E.push(function(){if(b)return o.syncOrAsync([u.getComponentMethod(\\\"shapes\\\",\\\"calcAutorange\\\"),u.getComponentMethod(\\\"annotations\\\",\\\"calcAutorange\\\"),S],t);S()}),E.push(T.layoutStyles),y&&E.push(function(){return d.draw(t,h?\\\"\\\":\\\"redraw\\\")}),E.push(T.drawData,T.finalDraw,m,f.addLinks,f.rehover,f.redrag,f.doAutoMargin,f.previousPromises);var L=o.syncOrAsync(E,t);return L&&L.then||(L=Promise.resolve()),L.then(function(){return C(t),t})},r.purge=function(t){var e=(t=o.getGraphDiv(t))._fullLayout||{},r=t._fullData||[];return f.cleanPlot([],{},r,e),f.purge(t),l.purge(t),e._container&&e._container.remove(),delete t._context,t},r.react=function(t,e,n,i){var a,l,c=(t=o.getGraphDiv(t))._fullData,p=t._fullLayout;if(o.isPlotDiv(t)&&c&&p){if(o.isPlainObject(e)){var d=e;e=d.data,n=d.layout,i=d.config,a=d.frames}var g=!1;if(i){var v=o.extendDeep({},t._context);t._context=void 0,O(t,i),g=function t(e,r){var n;for(n in e)if(\\\"_\\\"!==n.charAt(0)){var i=e[n],a=r[n];if(i!==a)if(o.isPlainObject(i)&&o.isPlainObject(a)){if(t(i,a))return!0}else{if(!Array.isArray(i)||!Array.isArray(a))return!0;if(i.length!==a.length)return!0;for(var s=0;s<i.length;s++)if(i[s]!==a[s]){if(!o.isPlainObject(i[s])||!o.isPlainObject(a[s]))return!0;if(t(i[s],a[s]))return!0}}}}(v,t._context)}t.data=e||[],k.cleanData(t.data),t.layout=n||{},k.cleanLayout(t.layout),function(t,e,r,n){var i,a,l,c,u,h,f,p,d=n._preGUI,g=[],v={};for(i in d){if(u=rt(i,tt)){if(a=u.attr||u.head+\\\".uirevision\\\",(c=(l=s(n,a).get())&&nt(a,e))&&c===l&&(null===(h=d[i])&&(h=void 0),ot(p=(f=s(e,i)).get(),h))){void 0===p&&\\\"autorange\\\"===i.substr(i.length-9)&&g.push(i.substr(0,i.length-10)),f.set(N(s(n,i).get()));continue}}else o.warn(\\\"unrecognized GUI edit: \\\"+i);delete d[i],\\\"range[\\\"===i.substr(i.length-8,6)&&(v[i.substr(0,i.length-9)]=1)}for(var m=0;m<g.length;m++){var y=g[m];if(v[y]){var x=s(e,y).get();x&&delete x.autorange}}var b=n._tracePreGUI;for(var _ in b){var w,k=b[_],T=null;for(i in k){if(!T){var A=it(_,r);if(A<0){delete b[_];break}var M=at(_,t,(w=r[A]._fullInput).index);if(M<0){delete b[_];break}T=t[M]}if(u=rt(i,et)){if(u.attr?c=(l=s(n,u.attr).get())&&nt(u.attr,e):(l=w.uirevision,void 0===(c=T.uirevision)&&(c=e.uirevision)),c&&c===l&&(null===(h=k[i])&&(h=void 0),ot(p=(f=s(T,i)).get(),h))){f.set(N(s(w,i).get()));continue}}else o.warn(\\\"unrecognized GUI edit: \\\"+i+\\\" in trace uid \\\"+_);delete k[i]}}}(t.data,t.layout,c,p),f.supplyDefaults(t,{skipUpdateCalc:!0});var m=t._fullData,y=t._fullLayout,x=void 0===y.datarevision,b=y.transition,_=function(t,e,r,n,i){var a=A.layoutFlags();return a.arrays={},a.rangesAltered={},a.nChanges=0,a.nChangesAnim=0,st(e,r,[],{getValObject:function(t){return h.getLayoutValObject(r,t)},flags:a,immutable:n,transition:i,gd:t}),(a.plot||a.calc)&&(a.layoutReplot=!0),i&&a.nChanges&&a.nChangesAnim&&(a.anim=a.nChanges===a.nChangesAnim?\\\"all\\\":\\\"some\\\"),a}(t,p,y,x,b),w=_.newDataRevision,M=function(t,e,r,n,i,a){var o=e.length===r.length;if(!i&&!o)return{fullReplot:!0,calc:!0};var s,l,c=A.traceFlags();c.arrays={},c.nChanges=0,c.nChangesAnim=0;var u={getValObject:function(t){var e=h.getTraceValObject(l,t);return!l._module.animatable&&e.anim&&(e.anim=!1),e},flags:c,immutable:n,transition:i,newDataRevision:a,gd:t},p={};for(s=0;s<e.length;s++)if(r[s]){if(l=r[s]._fullInput,f.hasMakesDataTransform(l)&&(l=r[s]),p[l.uid])continue;p[l.uid]=1,st(e[s]._fullInput,l,[],u)}return(c.calc||c.plot)&&(c.fullReplot=!0),i&&c.nChanges&&c.nChangesAnim&&(c.anim=c.nChanges===c.nChangesAnim&&o?\\\"all\\\":\\\"some\\\"),c}(t,c,m,x,b,w);K(t)&&(_.layoutReplot=!0),M.calc||_.calc?t.calcdata=void 0:f.supplyDefaultsUpdateCalc(t.calcdata,m);var S=[];if(a&&(t._transitionData={},f.createTransitionData(t),S.push(function(){return r.addFrames(t,a)})),y.transition&&!g&&(M.anim||_.anim))f.doCalcdata(t),T.doAutoRangeAndConstraints(t),S.push(function(){return f.transitionFromReact(t,M,_,p)});else if(M.fullReplot||_.layoutReplot||g)t._fullLayout._skipDefaults=!0,S.push(r.plot);else{for(var E in _.arrays){var L=_.arrays[E];if(L.length){var P=u.getComponentMethod(E,\\\"drawOne\\\");if(P!==o.noop)for(var z=0;z<L.length;z++)P(t,L[z]);else{var I=u.getComponentMethod(E,\\\"draw\\\");if(I===o.noop)throw new Error(\\\"cannot draw components: \\\"+E);I(t)}}}S.push(f.previousPromises),M.style&&S.push(T.doTraceStyle),(M.colorbars||_.colorbars)&&S.push(T.doColorBars),_.legend&&S.push(T.doLegend),_.layoutstyle&&S.push(T.layoutStyles),_.axrange&&Y(S),_.ticks&&S.push(T.doTicksRelayout),_.modebar&&S.push(T.doModeBar),_.camera&&S.push(T.doCamera),S.push(C)}S.push(f.rehover,f.redrag),(l=o.syncOrAsync(S,t))&&l.then||(l=Promise.resolve(t))}else l=r.newPlot(t,e,n,i);return l.then(function(){return t.emit(\\\"plotly_react\\\",{data:e,layout:n}),t})},r.redraw=function(t){if(t=o.getGraphDiv(t),!o.isPlotDiv(t))throw new Error(\\\"This element is not a Plotly plot: \\\"+t);return k.cleanData(t.data),k.cleanLayout(t.layout),t.calcdata=void 0,r.plot(t).then(function(){return t.emit(\\\"plotly_redraw\\\"),t})},r.relayout=H,r.restyle=B,r.setPlotConfig=function(t){return o.extendFlat(_,t)},r.update=$,r._guiRelayout=Q(H),r._guiRestyle=Q(B),r._guiUpdate=Q($),r._storeDirectGUIEdit=function(t,e,r){for(var n in r)U(n,s(t,n).get(),r[n],e)}},{\\\"../components/color\\\":593,\\\"../components/drawing\\\":614,\\\"../constants/xmlns_namespaces\\\":696,\\\"../lib\\\":719,\\\"../lib/events\\\":709,\\\"../lib/queue\\\":734,\\\"../lib/svg_text_utils\\\":743,\\\"../plots/cartesian/axes\\\":767,\\\"../plots/cartesian/constants\\\":773,\\\"../plots/cartesian/graph_interact\\\":776,\\\"../plots/cartesian/select\\\":784,\\\"../plots/plots\\\":828,\\\"../plots/polar/legacy\\\":836,\\\"../registry\\\":847,\\\"./edit_types\\\":750,\\\"./helpers\\\":751,\\\"./manage_arrays\\\":753,\\\"./plot_config\\\":755,\\\"./plot_schema\\\":756,\\\"./subroutines\\\":758,d3:163,\\\"fast-isnumeric\\\":225,\\\"has-hover\\\":410}],755:[function(t,e,r){\\\"use strict\\\";var n={staticPlot:{valType:\\\"boolean\\\",dflt:!1},plotlyServerURL:{valType:\\\"string\\\",dflt:\\\"https://plot.ly\\\"},editable:{valType:\\\"boolean\\\",dflt:!1},edits:{annotationPosition:{valType:\\\"boolean\\\",dflt:!1},annotationTail:{valType:\\\"boolean\\\",dflt:!1},annotationText:{valType:\\\"boolean\\\",dflt:!1},axisTitleText:{valType:\\\"boolean\\\",dflt:!1},colorbarPosition:{valType:\\\"boolean\\\",dflt:!1},colorbarTitleText:{valType:\\\"boolean\\\",dflt:!1},legendPosition:{valType:\\\"boolean\\\",dflt:!1},legendText:{valType:\\\"boolean\\\",dflt:!1},shapePosition:{valType:\\\"boolean\\\",dflt:!1},titleText:{valType:\\\"boolean\\\",dflt:!1}},autosizable:{valType:\\\"boolean\\\",dflt:!1},responsive:{valType:\\\"boolean\\\",dflt:!1},fillFrame:{valType:\\\"boolean\\\",dflt:!1},frameMargins:{valType:\\\"number\\\",dflt:0,min:0,max:.5},scrollZoom:{valType:\\\"flaglist\\\",flags:[\\\"cartesian\\\",\\\"gl3d\\\",\\\"geo\\\",\\\"mapbox\\\"],extras:[!0,!1],dflt:\\\"gl3d+geo+mapbox\\\"},doubleClick:{valType:\\\"enumerated\\\",values:[!1,\\\"reset\\\",\\\"autosize\\\",\\\"reset+autosize\\\"],dflt:\\\"reset+autosize\\\"},doubleClickDelay:{valType:\\\"number\\\",dflt:300,min:0},showAxisDragHandles:{valType:\\\"boolean\\\",dflt:!0},showAxisRangeEntryBoxes:{valType:\\\"boolean\\\",dflt:!0},showTips:{valType:\\\"boolean\\\",dflt:!0},showLink:{valType:\\\"boolean\\\",dflt:!1},linkText:{valType:\\\"string\\\",dflt:\\\"Edit chart\\\",noBlank:!0},sendData:{valType:\\\"boolean\\\",dflt:!0},showSources:{valType:\\\"any\\\",dflt:!1},displayModeBar:{valType:\\\"enumerated\\\",values:[\\\"hover\\\",!0,!1],dflt:\\\"hover\\\"},showSendToCloud:{valType:\\\"boolean\\\",dflt:!1},showEditInChartStudio:{valType:\\\"boolean\\\",dflt:!1},modeBarButtonsToRemove:{valType:\\\"any\\\",dflt:[]},modeBarButtonsToAdd:{valType:\\\"any\\\",dflt:[]},modeBarButtons:{valType:\\\"any\\\",dflt:!1},toImageButtonOptions:{valType:\\\"any\\\",dflt:{}},displaylogo:{valType:\\\"boolean\\\",dflt:!0},watermark:{valType:\\\"boolean\\\",dflt:!1},plotGlPixelRatio:{valType:\\\"number\\\",dflt:2,min:1,max:4},setBackground:{valType:\\\"any\\\",dflt:\\\"transparent\\\"},topojsonURL:{valType:\\\"string\\\",noBlank:!0,dflt:\\\"https://cdn.plot.ly/\\\"},mapboxAccessToken:{valType:\\\"string\\\",dflt:null},logging:{valType:\\\"boolean\\\",dflt:1},queueLength:{valType:\\\"integer\\\",min:0,dflt:0},globalTransforms:{valType:\\\"any\\\",dflt:[]},locale:{valType:\\\"string\\\",dflt:\\\"en-US\\\"},locales:{valType:\\\"any\\\",dflt:{}}},i={};!function t(e,r){for(var n in e){var i=e[n];i.valType?r[n]=i.dflt:(r[n]||(r[n]={}),t(i,r[n]))}}(n,i),e.exports={configAttributes:n,dfltConfig:i}},{}],756:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../registry\\\"),i=t(\\\"../lib\\\"),a=t(\\\"../plots/attributes\\\"),o=t(\\\"../plots/layout_attributes\\\"),s=t(\\\"../plots/frame_attributes\\\"),l=t(\\\"../plots/animation_attributes\\\"),c=t(\\\"./plot_config\\\").configAttributes,u=t(\\\"../plots/polar/legacy/area_attributes\\\"),h=t(\\\"../plots/polar/legacy/axis_attributes\\\"),f=t(\\\"./edit_types\\\"),p=i.extendFlat,d=i.extendDeepAll,g=i.isPlainObject,v=i.isArrayOrTypedArray,m=i.nestedProperty,y=i.valObjectMeta,x=\\\"_isSubplotObj\\\",b=\\\"_isLinkedToArray\\\",_=[x,b,\\\"_arrayAttrRegexps\\\",\\\"_deprecated\\\"];function w(t,e,r){if(!t)return!1;if(t._isLinkedToArray)if(k(e[r]))r++;else if(r<e.length)return!1;for(;r<e.length;r++){var n=t[e[r]];if(!g(n))break;if(t=n,r===e.length-1)break;if(t._isLinkedToArray){if(!k(e[++r]))return!1}else if(\\\"info_array\\\"===t.valType){var i=e[++r];if(!k(i))return!1;var a=t.items;if(Array.isArray(a)){if(i>=a.length)return!1;if(2===t.dimensions){if(r++,e.length===r)return t;var o=e[r];if(!k(o))return!1;t=a[i][o]}else t=a[i]}else t=a}}return t}function k(t){return t===Math.round(t)&&t>=0}function T(t){return function(t){r.crawl(t,function(t,e,n){r.isValObject(t)?\\\"data_array\\\"===t.valType?(t.role=\\\"data\\\",n[e+\\\"src\\\"]={valType:\\\"string\\\",editType:\\\"none\\\"}):!0===t.arrayOk&&(n[e+\\\"src\\\"]={valType:\\\"string\\\",editType:\\\"none\\\"}):g(t)&&(t.role=\\\"object\\\")})}(t),function(t){r.crawl(t,function(t,e,r){if(!t)return;var n=t[b];if(!n)return;delete t[b],r[e]={items:{}},r[e].items[n]=t,r[e].role=\\\"object\\\"})}(t),function(t){!function t(e){for(var r in e)if(g(e[r]))t(e[r]);else if(Array.isArray(e[r]))for(var n=0;n<e[r].length;n++)t(e[r][n]);else e[r]instanceof RegExp&&(e[r]=e[r].toString())}(t)}(t),t}function A(t,e,r){var n=m(t,r),i=d({},e.layoutAttributes);i[x]=!0,n.set(i)}function M(t,e,r){var n=m(t,r);n.set(d(n.get()||{},e))}r.IS_SUBPLOT_OBJ=x,r.IS_LINKED_TO_ARRAY=b,r.DEPRECATED=\\\"_deprecated\\\",r.UNDERSCORE_ATTRS=_,r.get=function(){var t={};n.allTypes.concat(\\\"area\\\").forEach(function(e){t[e]=function(t){var e,i;\\\"area\\\"===t?(e={attributes:u},i={}):(e=n.modules[t]._module,i=e.basePlotModule);var o={type:null},s=d({},a),l=d({},e.attributes);r.crawl(l,function(t,e,r,n,i){m(s,i).set(void 0),void 0===t&&m(l,i).set(void 0)}),d(o,s),n.traceIs(t,\\\"noOpacity\\\")&&delete o.opacity;n.traceIs(t,\\\"showLegend\\\")||(delete o.showlegend,delete o.legendgroup);n.traceIs(t,\\\"noHover\\\")&&(delete o.hoverinfo,delete o.hoverlabel);e.selectPoints||delete o.selectedpoints;d(o,l),i.attributes&&d(o,i.attributes);o.type=t;var c={meta:e.meta||{},categories:e.categories||{},animatable:Boolean(e.animatable),type:t,attributes:T(o)};if(e.layoutAttributes){var h={};d(h,e.layoutAttributes),c.layoutAttributes=T(h)}e.animatable||r.crawl(c,function(t){r.isValObject(t)&&\\\"anim\\\"in t&&delete t.anim});return c}(e)});var e,i={};return Object.keys(n.transformsRegistry).forEach(function(t){i[t]=function(t){var e=n.transformsRegistry[t],r=d({},e.attributes);return Object.keys(n.componentsRegistry).forEach(function(e){var i=n.componentsRegistry[e];i.schema&&i.schema.transforms&&i.schema.transforms[t]&&Object.keys(i.schema.transforms[t]).forEach(function(e){M(r,i.schema.transforms[t][e],e)})}),{attributes:T(r)}}(t)}),{defs:{valObjects:y,metaKeys:_.concat([\\\"description\\\",\\\"role\\\",\\\"editType\\\",\\\"impliedEdits\\\"]),editType:{traces:f.traces,layout:f.layout},impliedEdits:{}},traces:t,layout:function(){var t,e,r={};for(t in d(r,o),n.subplotsRegistry)if((e=n.subplotsRegistry[t]).layoutAttributes)if(Array.isArray(e.attr))for(var i=0;i<e.attr.length;i++)A(r,e,e.attr[i]);else{var a=\\\"subplot\\\"===e.attr?e.name:e.attr;A(r,e,a)}for(t in r=function(t){return p(t,{radialaxis:h.radialaxis,angularaxis:h.angularaxis}),p(t,h.layout),t}(r),n.componentsRegistry){var s=(e=n.componentsRegistry[t]).schema;if(s&&(s.subplots||s.layout)){var l=s.subplots;if(l&&l.xaxis&&!l.yaxis)for(var c in l.xaxis)delete r.yaxis[c]}else\\\"colorscale\\\"===e.name?d(r,e.layoutAttributes):e.layoutAttributes&&M(r,e.layoutAttributes,e.name)}return{layoutAttributes:T(r)}}(),transforms:i,frames:(e={frames:d({},s)},T(e),e.frames),animation:T(l),config:T(c)}},r.crawl=function(t,e,n,i){var a=n||0;i=i||\\\"\\\",Object.keys(t).forEach(function(n){var o=t[n];if(-1===_.indexOf(n)){var s=(i?i+\\\".\\\":\\\"\\\")+n;e(o,n,t,a,s),r.isValObject(o)||g(o)&&\\\"impliedEdits\\\"!==n&&r.crawl(o,e,a+1,s)}})},r.isValObject=function(t){return t&&void 0!==t.valType},r.findArrayAttributes=function(t){var e,n,i=[],o=[],s=[];function l(t,r,a,l){o=o.slice(0,l).concat([r]),s=s.slice(0,l).concat([t&&t._isLinkedToArray]),t&&(\\\"data_array\\\"===t.valType||!0===t.arrayOk)&&!(\\\"colorbar\\\"===o[l-1]&&(\\\"ticktext\\\"===r||\\\"tickvals\\\"===r))&&function t(e,r,a){var l=e[o[r]];var c=a+o[r];if(r===o.length-1)v(l)&&i.push(n+c);else if(s[r]){if(Array.isArray(l))for(var u=0;u<l.length;u++)g(l[u])&&t(l[u],r+1,c+\\\"[\\\"+u+\\\"].\\\")}else g(l)&&t(l,r+1,c+\\\".\\\")}(e,0,\\\"\\\")}e=t,n=\\\"\\\",r.crawl(a,l),t._module&&t._module.attributes&&r.crawl(t._module.attributes,l);var c=t.transforms;if(c)for(var u=0;u<c.length;u++){var h=c[u],f=h._module;f&&(n=\\\"transforms[\\\"+u+\\\"].\\\",e=h,r.crawl(f.attributes,l))}return i},r.getTraceValObject=function(t,e){var r,i,o=e[0],s=1;if(\\\"transforms\\\"===o){if(1===e.length)return a.transforms;var l=t.transforms;if(!Array.isArray(l)||!l.length)return!1;var c=e[1];if(!k(c)||c>=l.length)return!1;i=(r=(n.transformsRegistry[l[c].type]||{}).attributes)&&r[e[2]],s=3}else if(\\\"area\\\"===t.type)i=u[o];else{var h=t._module;if(h||(h=(n.modules[t.type||a.type.dflt]||{})._module),!h)return!1;if(!(i=(r=h.attributes)&&r[o])){var f=h.basePlotModule;f&&f.attributes&&(i=f.attributes[o])}i||(i=a[o])}return w(i,e,s)},r.getLayoutValObject=function(t,e){return w(function(t,e){var r,i,a,s,l=t._basePlotModules;if(l){var c;for(r=0;r<l.length;r++){if((a=l[r]).attrRegex&&a.attrRegex.test(e)){if(a.layoutAttrOverrides)return a.layoutAttrOverrides;!c&&a.layoutAttributes&&(c=a.layoutAttributes)}var u=a.baseLayoutAttrOverrides;if(u&&e in u)return u[e]}if(c)return c}var f=t._modules;if(f)for(r=0;r<f.length;r++)if((s=f[r].layoutAttributes)&&e in s)return s[e];for(i in n.componentsRegistry){if(\\\"colorscale\\\"===(a=n.componentsRegistry[i]).name&&0===e.indexOf(\\\"coloraxis\\\"))return a.layoutAttributes[e];if(!a.schema&&e===a.name)return a.layoutAttributes}if(e in o)return o[e];if(\\\"radialaxis\\\"===e||\\\"angularaxis\\\"===e)return h[e];return h.layout[e]||!1}(t,e[0]),e,1)}},{\\\"../lib\\\":719,\\\"../plots/animation_attributes\\\":762,\\\"../plots/attributes\\\":764,\\\"../plots/frame_attributes\\\":794,\\\"../plots/layout_attributes\\\":819,\\\"../plots/polar/legacy/area_attributes\\\":834,\\\"../plots/polar/legacy/axis_attributes\\\":835,\\\"../registry\\\":847,\\\"./edit_types\\\":750,\\\"./plot_config\\\":755}],757:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../lib\\\"),i=t(\\\"../plots/attributes\\\"),a=\\\"templateitemname\\\",o={name:{valType:\\\"string\\\",editType:\\\"none\\\"}};function s(t){return t&&\\\"string\\\"==typeof t}function l(t){var e=t.length-1;return\\\"s\\\"!==t.charAt(e)&&n.warn(\\\"bad argument to arrayDefaultKey: \\\"+t),t.substr(0,t.length-1)+\\\"defaults\\\"}o[a]={valType:\\\"string\\\",editType:\\\"calc\\\"},r.templatedArray=function(t,e){return e._isLinkedToArray=t,e.name=o.name,e[a]=o[a],e},r.traceTemplater=function(t){var e,r,a={};for(e in t)r=t[e],Array.isArray(r)&&r.length&&(a[e]=0);return{newTrace:function(o){var s={type:e=n.coerce(o,{},i,\\\"type\\\"),_template:null};if(e in a){r=t[e];var l=a[e]%r.length;a[e]++,s._template=r[l]}return s}}},r.newContainer=function(t,e,r){var i=t._template,a=i&&(i[e]||r&&i[r]);return n.isPlainObject(a)||(a=null),t[e]={_template:a}},r.arrayTemplater=function(t,e,r){var n=t._template,i=n&&n[l(e)],o=n&&n[e];Array.isArray(o)&&o.length||(o=[]);var c={};return{newItem:function(t){var e={name:t.name,_input:t},n=e[a]=t[a];if(!s(n))return e._template=i,e;for(var l=0;l<o.length;l++){var u=o[l];if(u.name===n)return c[n]=1,e._template=u,e}return e[r]=t[r]||!1,e._template=!1,e},defaultItems:function(){for(var t=[],e=0;e<o.length;e++){var r=o[e],n=r.name;if(s(n)&&!c[n]){var i={_template:r,name:n,_input:{_templateitemname:n}};i[a]=r[a],t.push(i),c[n]=1}}return t}}},r.arrayDefaultKey=l,r.arrayEditor=function(t,e,r){var i=(n.nestedProperty(t,e).get()||[]).length,o=r._index,s=o>=i&&(r._input||{})._templateitemname;s&&(o=i);var l,c=e+\\\"[\\\"+o+\\\"]\\\";function u(){l={},s&&(l[c]={},l[c][a]=s)}function h(t,e){s?n.nestedProperty(l[c],t).set(e):l[c+\\\".\\\"+t]=e}function f(){var t=l;return u(),t}return u(),{modifyBase:function(t,e){l[t]=e},modifyItem:h,getUpdateObj:f,applyUpdate:function(e,r){e&&h(e,r);var i=f();for(var a in i)n.nestedProperty(t,a).set(i[a])}}}},{\\\"../lib\\\":719,\\\"../plots/attributes\\\":764}],758:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../registry\\\"),a=t(\\\"../plots/plots\\\"),o=t(\\\"../lib\\\"),s=t(\\\"../lib/clear_gl_canvases\\\"),l=t(\\\"../components/color\\\"),c=t(\\\"../components/drawing\\\"),u=t(\\\"../components/titles\\\"),h=t(\\\"../components/modebar\\\"),f=t(\\\"../plots/cartesian/axes\\\"),p=t(\\\"../constants/alignment\\\"),d=t(\\\"../plots/cartesian/constraints\\\"),g=d.enforce,v=d.clean,m=t(\\\"../plots/cartesian/autorange\\\").doAutoRange,y=\\\"start\\\",x=\\\"middle\\\",b=\\\"end\\\";function _(t,e,r){for(var n=0;n<r.length;n++){var i=r[n][0],a=r[n][1];if(!(i[0]>=t[1]||i[1]<=t[0])&&(a[0]<e[1]&&a[1]>e[0]))return!0}return!1}function w(t){var e,i,a,s,u,d,g=t._fullLayout,v=g._size,m=v.p,y=f.list(t,\\\"\\\",!0);if(g._paperdiv.style({width:t._context.responsive&&g.autosize&&!t._context._hasZeroWidth&&!t.layout.width?\\\"100%\\\":g.width+\\\"px\\\",height:t._context.responsive&&g.autosize&&!t._context._hasZeroHeight&&!t.layout.height?\\\"100%\\\":g.height+\\\"px\\\"}).selectAll(\\\".main-svg\\\").call(c.setSize,g.width,g.height),t._context.setBackground(t,g.paper_bgcolor),r.drawMainTitle(t),h.manage(t),!g._has(\\\"cartesian\\\"))return t._promises.length&&Promise.all(t._promises);function x(t,e,r){var n=t._lw/2;return\\\"x\\\"===t._id.charAt(0)?e?\\\"top\\\"===r?e._offset-m-n:e._offset+e._length+m+n:v.t+v.h*(1-(t.position||0))+n%1:e?\\\"right\\\"===r?e._offset+e._length+m+n:e._offset-m-n:v.l+v.w*(t.position||0)+n%1}for(e=0;e<y.length;e++){var b=(s=y[e])._anchorAxis;s._linepositions={},s._lw=c.crispRound(t,s.linewidth,1),s._mainLinePosition=x(s,b,s.side),s._mainMirrorPosition=s.mirror&&b?x(s,b,p.OPPOSITE_SIDE[s.side]):null}var w=[],T=[],M=[],S=1===l.opacity(g.paper_bgcolor)&&1===l.opacity(g.plot_bgcolor)&&g.paper_bgcolor===g.plot_bgcolor;for(i in g._plots)if((a=g._plots[i]).mainplot)a.bg&&a.bg.remove(),a.bg=void 0;else{var E=a.xaxis.domain,C=a.yaxis.domain,L=a.plotgroup;if(_(E,C,M)){var P=L.node(),O=a.bg=o.ensureSingle(L,\\\"rect\\\",\\\"bg\\\");P.insertBefore(O.node(),P.childNodes[0]),T.push(i)}else L.select(\\\"rect.bg\\\").remove(),M.push([E,C]),S||(w.push(i),T.push(i))}var z,I,D,R,F,B,N,j,U,V,q,H,G,Y=g._bgLayer.selectAll(\\\".bg\\\").data(w);for(Y.enter().append(\\\"rect\\\").classed(\\\"bg\\\",!0),Y.exit().remove(),Y.each(function(t){g._plots[t].bg=n.select(this)}),e=0;e<T.length;e++)a=g._plots[T[e]],u=a.xaxis,d=a.yaxis,a.bg&&a.bg.call(c.setRect,u._offset-m,d._offset-m,u._length+2*m,d._length+2*m).call(l.fill,g.plot_bgcolor).style(\\\"stroke-width\\\",0);if(!g._hasOnlyLargeSploms)for(i in g._plots){a=g._plots[i],u=a.xaxis,d=a.yaxis;var W,X,Z=a.clipId=\\\"clip\\\"+g._uid+i+\\\"plot\\\",J=o.ensureSingleById(g._clips,\\\"clipPath\\\",Z,function(t){t.classed(\\\"plotclip\\\",!0).append(\\\"rect\\\")});a.clipRect=J.select(\\\"rect\\\").attr({width:u._length,height:d._length}),c.setTranslate(a.plot,u._offset,d._offset),a._hasClipOnAxisFalse?(W=null,X=Z):(W=Z,X=null),c.setClipUrl(a.plot,W,t),a.layerClipId=X}function K(t){return\\\"M\\\"+z+\\\",\\\"+t+\\\"H\\\"+I}function $(t){return\\\"M\\\"+u._offset+\\\",\\\"+t+\\\"h\\\"+u._length}function Q(t){return\\\"M\\\"+t+\\\",\\\"+j+\\\"V\\\"+N}function tt(t){return\\\"M\\\"+t+\\\",\\\"+d._offset+\\\"v\\\"+d._length}function et(t,e,r){if(!t.showline||i!==t._mainSubplot)return\\\"\\\";if(!t._anchorAxis)return r(t._mainLinePosition);var n=e(t._mainLinePosition);return t.mirror&&(n+=e(t._mainMirrorPosition)),n}for(i in g._plots){a=g._plots[i],u=a.xaxis,d=a.yaxis;var rt=\\\"M0,0\\\";k(u,i)&&(F=A(u,\\\"left\\\",d,y),z=u._offset-(F?m+F:0),B=A(u,\\\"right\\\",d,y),I=u._offset+u._length+(B?m+B:0),D=x(u,d,\\\"bottom\\\"),R=x(u,d,\\\"top\\\"),!(G=!u._anchorAxis||i!==u._mainSubplot)||\\\"allticks\\\"!==u.mirror&&\\\"all\\\"!==u.mirror||(u._linepositions[i]=[D,R]),rt=et(u,K,$),G&&u.showline&&(\\\"all\\\"===u.mirror||\\\"allticks\\\"===u.mirror)&&(rt+=K(D)+K(R)),a.xlines.style(\\\"stroke-width\\\",u._lw+\\\"px\\\").call(l.stroke,u.showline?u.linecolor:\\\"rgba(0,0,0,0)\\\")),a.xlines.attr(\\\"d\\\",rt);var nt=\\\"M0,0\\\";k(d,i)&&(q=A(d,\\\"bottom\\\",u,y),N=d._offset+d._length+(q?m:0),H=A(d,\\\"top\\\",u,y),j=d._offset-(H?m:0),U=x(d,u,\\\"left\\\"),V=x(d,u,\\\"right\\\"),!(G=!d._anchorAxis||i!==d._mainSubplot)||\\\"allticks\\\"!==d.mirror&&\\\"all\\\"!==d.mirror||(d._linepositions[i]=[U,V]),nt=et(d,Q,tt),G&&d.showline&&(\\\"all\\\"===d.mirror||\\\"allticks\\\"===d.mirror)&&(nt+=Q(U)+Q(V)),a.ylines.style(\\\"stroke-width\\\",d._lw+\\\"px\\\").call(l.stroke,d.showline?d.linecolor:\\\"rgba(0,0,0,0)\\\")),a.ylines.attr(\\\"d\\\",nt)}return f.makeClipPaths(t),t._promises.length&&Promise.all(t._promises)}function k(t,e){return(t.ticks||t.showline)&&(e===t._mainSubplot||\\\"all\\\"===t.mirror||\\\"allticks\\\"===t.mirror)}function T(t,e,r){if(!r.showline||!r._lw)return!1;if(\\\"all\\\"===r.mirror||\\\"allticks\\\"===r.mirror)return!0;var n=r._anchorAxis;if(!n)return!1;var i=p.FROM_BL[e];return r.side===e?n.domain[i]===t.domain[i]:r.mirror&&n.domain[1-i]===t.domain[1-i]}function A(t,e,r,n){if(T(t,e,r))return r._lw;for(var i=0;i<n.length;i++){var a=n[i];if(a._mainAxis===r._mainAxis&&T(t,e,a))return a._lw}return 0}r.layoutStyles=function(t){return o.syncOrAsync([a.doAutoMargin,w],t)},r.drawMainTitle=function(t){var e=t._fullLayout,r=function(t){var e=t.title,r=x;o.isRightAnchor(e)?r=b:o.isLeftAnchor(e)&&(r=y);return r}(e),n=function(t){var e=t.title,r=\\\"0em\\\";o.isTopAnchor(e)?r=p.CAP_SHIFT+\\\"em\\\":o.isMiddleAnchor(e)&&(r=p.MID_SHIFT+\\\"em\\\");return r}(e);u.draw(t,\\\"gtitle\\\",{propContainer:e,propName:\\\"title.text\\\",placeholder:e._dfltTitle.plot,attributes:{x:function(t,e){var r=t.title,n=t._size,i=0;e===y?i=r.pad.l:e===b&&(i=-r.pad.r);switch(r.xref){case\\\"paper\\\":return n.l+n.w*r.x+i;case\\\"container\\\":default:return t.width*r.x+i}}(e,r),y:function(t,e){var r=t.title,n=t._size,i=0;\\\"0em\\\"!==e&&e?e===p.CAP_SHIFT+\\\"em\\\"&&(i=r.pad.t):i=-r.pad.b;if(\\\"auto\\\"===r.y)return n.t/2;switch(r.yref){case\\\"paper\\\":return n.t+n.h-n.h*r.y+i;case\\\"container\\\":default:return t.height-t.height*r.y+i}}(e,n),\\\"text-anchor\\\":r,dy:n}})},r.doTraceStyle=function(t){var e,n=t.calcdata,o=[];for(e=0;e<n.length;e++){var l=n[e],c=l[0]||{},u=c.trace||{},h=u._module||{},f=h.arraysToCalcdata;f&&f(l,u);var p=h.editStyle;p&&o.push({fn:p,cd0:c})}if(o.length){for(e=0;e<o.length;e++){var d=o[e];d.fn(t,d.cd0)}s(t),r.redrawReglTraces(t)}return a.style(t),i.getComponentMethod(\\\"legend\\\",\\\"draw\\\")(t),a.previousPromises(t)},r.doColorBars=function(t){return i.getComponentMethod(\\\"colorbar\\\",\\\"draw\\\")(t),a.previousPromises(t)},r.layoutReplot=function(t){var e=t.layout;return t.layout=void 0,i.call(\\\"plot\\\",t,\\\"\\\",e)},r.doLegend=function(t){return i.getComponentMethod(\\\"legend\\\",\\\"draw\\\")(t),a.previousPromises(t)},r.doTicksRelayout=function(t){return f.draw(t,\\\"redraw\\\"),t._fullLayout._hasOnlyLargeSploms&&(i.subplotsRegistry.splom.updateGrid(t),s(t),r.redrawReglTraces(t)),r.drawMainTitle(t),a.previousPromises(t)},r.doModeBar=function(t){var e=t._fullLayout;h.manage(t);for(var r=0;r<e._basePlotModules.length;r++){var n=e._basePlotModules[r].updateFx;n&&n(t)}return a.previousPromises(t)},r.doCamera=function(t){for(var e=t._fullLayout,r=e._subplots.gl3d,n=0;n<r.length;n++){var i=e[r[n]],a=i._scene,o=i.camera;a.setCamera(o)}},r.drawData=function(t){var e=t._fullLayout;s(t);for(var n=e._basePlotModules,o=0;o<n.length;o++)n[o].plot(t);return r.redrawReglTraces(t),a.style(t),i.getComponentMethod(\\\"shapes\\\",\\\"draw\\\")(t),i.getComponentMethod(\\\"annotations\\\",\\\"draw\\\")(t),e._replotting=!1,a.previousPromises(t)},r.redrawReglTraces=function(t){var e=t._fullLayout;if(e._has(\\\"regl\\\")){var r,n,i=t._fullData,a=[],s=[];for(e._hasOnlyLargeSploms&&e._splomGrid.draw(),r=0;r<i.length;r++){var l=i[r];!0===l.visible&&0!==l._length&&(\\\"splom\\\"===l.type?e._splomScenes[l.uid].draw():\\\"scattergl\\\"===l.type?o.pushUnique(a,l.xaxis+l.yaxis):\\\"scatterpolargl\\\"===l.type&&o.pushUnique(s,l.subplot))}for(r=0;r<a.length;r++)(n=e._plots[a[r]])._scene&&n._scene.draw();for(r=0;r<s.length;r++)(n=e[s[r]]._subplot)._scene&&n._scene.draw()}},r.doAutoRangeAndConstraints=function(t){for(var e,r,n=t._fullLayout,i=f.list(t,\\\"\\\",!0),a=n._axisMatchGroups||[],s=0;s<i.length;s++)e=i[s],v(t,e),m(t,e);g(t);t:for(var l=0;l<a.length;l++){var c,u=a[l],h=null;for(c in u){if(!1===(e=f.getFromId(t,c)).autorange)continue t;r=o.simpleMap(e.range,e.r2l),h?h[0]<h[1]?(h[0]=Math.min(h[0],r[0]),h[1]=Math.max(h[1],r[1])):(h[0]=Math.max(h[0],r[0]),h[1]=Math.min(h[1],r[1])):h=r}for(c in u)(e=f.getFromId(t,c)).range=o.simpleMap(h,e.l2r),e._input.range=e.range.slice(),e.setScale()}},r.finalDraw=function(t){i.getComponentMethod(\\\"shapes\\\",\\\"draw\\\")(t),i.getComponentMethod(\\\"images\\\",\\\"draw\\\")(t),i.getComponentMethod(\\\"annotations\\\",\\\"draw\\\")(t),i.getComponentMethod(\\\"rangeslider\\\",\\\"draw\\\")(t),i.getComponentMethod(\\\"rangeselector\\\",\\\"draw\\\")(t)},r.drawMarginPushers=function(t){i.getComponentMethod(\\\"legend\\\",\\\"draw\\\")(t),i.getComponentMethod(\\\"rangeselector\\\",\\\"draw\\\")(t),i.getComponentMethod(\\\"sliders\\\",\\\"draw\\\")(t),i.getComponentMethod(\\\"updatemenus\\\",\\\"draw\\\")(t),i.getComponentMethod(\\\"colorbar\\\",\\\"draw\\\")(t)}},{\\\"../components/color\\\":593,\\\"../components/drawing\\\":614,\\\"../components/modebar\\\":652,\\\"../components/titles\\\":681,\\\"../constants/alignment\\\":688,\\\"../lib\\\":719,\\\"../lib/clear_gl_canvases\\\":704,\\\"../plots/cartesian/autorange\\\":766,\\\"../plots/cartesian/axes\\\":767,\\\"../plots/cartesian/constraints\\\":774,\\\"../plots/plots\\\":828,\\\"../registry\\\":847,d3:163}],759:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../lib\\\"),i=n.isPlainObject,a=t(\\\"./plot_schema\\\"),o=t(\\\"../plots/plots\\\"),s=t(\\\"../plots/attributes\\\"),l=t(\\\"./plot_template\\\"),c=t(\\\"./plot_config\\\").dfltConfig;function u(t,e){t=n.extendDeep({},t);var r,a,o=Object.keys(t).sort();function s(e,r,n){if(i(r)&&i(e))u(e,r);else if(Array.isArray(r)&&Array.isArray(e)){var o=l.arrayTemplater({_template:t},n);for(a=0;a<r.length;a++){var s=r[a],c=o.newItem(s)._template;c&&u(c,s)}var h=o.defaultItems();for(a=0;a<h.length;a++)r.push(h[a]._template);for(a=0;a<r.length;a++)delete r[a].templateitemname}}for(r=0;r<o.length;r++){var c=o[r],f=t[c];if(c in e?s(f,e[c],c):e[c]=f,h(c)===c)for(var p in e){var d=h(p);p===d||d!==c||p in t||s(f,e[p],c)}}}function h(t){return t.replace(/[0-9]+$/,\\\"\\\")}function f(t,e,r,a,o){var s=o&&r(o);for(var c in t){var u=t[c],d=p(t,c,a),g=p(t,c,o),v=r(g);if(!v){var m=h(c);m!==c&&(v=r(g=p(t,m,o)))}if((!s||s!==v)&&!(!v||v._noTemplating||\\\"data_array\\\"===v.valType||v.arrayOk&&Array.isArray(u)))if(!v.valType&&i(u))f(u,e,r,d,g);else if(v._isLinkedToArray&&Array.isArray(u))for(var y=!1,x=0,b={},_=0;_<u.length;_++){var w=u[_];if(i(w)){var k=w.name;if(k)b[k]||(f(w,e,r,p(u,x,d),p(u,x,g)),x++,b[k]=1);else if(!y){var T=p(t,l.arrayDefaultKey(c),a),A=p(u,x,d);f(w,e,r,A,p(u,x,g));var M=n.nestedProperty(e,A);n.nestedProperty(e,T).set(M.get()),M.set(null),y=!0}}}else{n.nestedProperty(e,d).set(u)}}}function p(t,e,r){return r?Array.isArray(t)?r+\\\"[\\\"+e+\\\"]\\\":r+\\\".\\\"+e:e}function d(t){for(var e=0;e<t.length;e++)if(i(t[e]))return!0}function g(t){var e;switch(t.code){case\\\"data\\\":e=\\\"The template has no key data.\\\";break;case\\\"layout\\\":e=\\\"The template has no key layout.\\\";break;case\\\"missing\\\":e=t.path?\\\"There are no templates for item \\\"+t.path+\\\" with name \\\"+t.templateitemname:\\\"There are no templates for trace \\\"+t.index+\\\", of type \\\"+t.traceType+\\\".\\\";break;case\\\"unused\\\":e=t.path?\\\"The template item at \\\"+t.path+\\\" was not used in constructing the plot.\\\":t.dataCount?\\\"Some of the templates of type \\\"+t.traceType+\\\" were not used. The template has \\\"+t.templateCount+\\\" traces, the data only has \\\"+t.dataCount+\\\" of this type.\\\":\\\"The template has \\\"+t.templateCount+\\\" traces of type \\\"+t.traceType+\\\" but there are none in the data.\\\";break;case\\\"reused\\\":e=\\\"Some of the templates of type \\\"+t.traceType+\\\" were used more than once. The template has \\\"+t.templateCount+\\\" traces, the data has \\\"+t.dataCount+\\\" of this type.\\\"}return t.msg=e,t}r.makeTemplate=function(t){t=n.isPlainObject(t)?t:n.getGraphDiv(t),t=n.extendDeep({_context:c},{data:t.data,layout:t.layout}),o.supplyDefaults(t);var e=t.data||[],r=t.layout||{};r._basePlotModules=t._fullLayout._basePlotModules,r._modules=t._fullLayout._modules;var l={data:{},layout:{}};e.forEach(function(t){var e={};f(t,e,function(t,e){return a.getTraceValObject(t,n.nestedProperty({},e).parts)}.bind(null,t));var r=n.coerce(t,{},s,\\\"type\\\"),i=l.data[r];i||(i=l.data[r]=[]),i.push(e)}),f(r,l.layout,function(t,e){return a.getLayoutValObject(t,n.nestedProperty({},e).parts)}.bind(null,r)),delete l.layout.template;var h=r.template;if(i(h)){var p,d,g,v,m,y,x=h.layout;i(x)&&u(x,l.layout);var b=h.data;if(i(b)){for(d in l.data)if(g=b[d],Array.isArray(g)){for(y=(m=l.data[d]).length,v=g.length,p=0;p<y;p++)u(g[p%v],m[p]);for(p=y;p<v;p++)m.push(n.extendDeep({},g[p]))}for(d in b)d in l.data||(l.data[d]=n.extendDeep([],b[d]))}}return l},r.validateTemplate=function(t,e){var r=n.extendDeep({},{_context:c,data:t.data,layout:t.layout}),a=r.layout||{};i(e)||(e=a.template||{});var s=e.layout,l=e.data,u=[];r.layout=a,r.layout.template=e,o.supplyDefaults(r);var f=r._fullLayout,v=r._fullData,m={};if(i(s)?(!function t(e,r){for(var n in e)if(\\\"_\\\"!==n.charAt(0)&&i(e[n])){var a,o=h(n),s=[];for(a=0;a<r.length;a++)s.push(p(e,n,r[a])),o!==n&&s.push(p(e,o,r[a]));for(a=0;a<s.length;a++)m[s[a]]=1;t(e[n],s)}}(f,[\\\"layout\\\"]),function t(e,r){for(var n in e)if(-1===n.indexOf(\\\"defaults\\\")&&i(e[n])){var a=p(e,n,r);m[a]?t(e[n],a):u.push({code:\\\"unused\\\",path:a})}}(s,\\\"layout\\\")):u.push({code:\\\"layout\\\"}),i(l)){for(var y,x={},b=0;b<v.length;b++){var _=v[b];x[y=_.type]=(x[y]||0)+1,_._fullInput._template||u.push({code:\\\"missing\\\",index:_._fullInput.index,traceType:y})}for(y in l){var w=l[y].length,k=x[y]||0;w>k?u.push({code:\\\"unused\\\",traceType:y,templateCount:w,dataCount:k}):k>w&&u.push({code:\\\"reused\\\",traceType:y,templateCount:w,dataCount:k})}}else u.push({code:\\\"data\\\"});if(function t(e,r){for(var n in e)if(\\\"_\\\"!==n.charAt(0)){var a=e[n],o=p(e,n,r);i(a)?(Array.isArray(e)&&!1===a._template&&a.templateitemname&&u.push({code:\\\"missing\\\",path:o,templateitemname:a.templateitemname}),t(a,o)):Array.isArray(a)&&d(a)&&t(a,o)}}({data:v,layout:f},\\\"\\\"),u.length)return u.map(g)}},{\\\"../lib\\\":719,\\\"../plots/attributes\\\":764,\\\"../plots/plots\\\":828,\\\"./plot_config\\\":755,\\\"./plot_schema\\\":756,\\\"./plot_template\\\":757}],760:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"./plot_api\\\"),a=t(\\\"../lib\\\"),o=t(\\\"../snapshot/helpers\\\"),s=t(\\\"../snapshot/tosvg\\\"),l=t(\\\"../snapshot/svgtoimg\\\"),c={format:{valType:\\\"enumerated\\\",values:[\\\"png\\\",\\\"jpeg\\\",\\\"webp\\\",\\\"svg\\\"],dflt:\\\"png\\\"},width:{valType:\\\"number\\\",min:1},height:{valType:\\\"number\\\",min:1},scale:{valType:\\\"number\\\",min:0,dflt:1},setBackground:{valType:\\\"any\\\",dflt:!1},imageDataOnly:{valType:\\\"boolean\\\",dflt:!1}};e.exports=function(t,e){var r,u,h,f;function p(t){return!(t in e)||a.validate(e[t],c[t])}if(e=e||{},a.isPlainObject(t)?(r=t.data||[],u=t.layout||{},h=t.config||{},f={}):(t=a.getGraphDiv(t),r=a.extendDeep([],t.data),u=a.extendDeep({},t.layout),h=t._context,f=t._fullLayout||{}),!p(\\\"width\\\")&&null!==e.width||!p(\\\"height\\\")&&null!==e.height)throw new Error(\\\"Height and width should be pixel values.\\\");if(!p(\\\"format\\\"))throw new Error(\\\"Image format is not jpeg, png, svg or webp.\\\");var d={};function g(t,r){return a.coerce(e,d,c,t,r)}var v=g(\\\"format\\\"),m=g(\\\"width\\\"),y=g(\\\"height\\\"),x=g(\\\"scale\\\"),b=g(\\\"setBackground\\\"),_=g(\\\"imageDataOnly\\\"),w=document.createElement(\\\"div\\\");w.style.position=\\\"absolute\\\",w.style.left=\\\"-5000px\\\",document.body.appendChild(w);var k=a.extendFlat({},u);m?k.width=m:null===e.width&&n(f.width)&&(k.width=f.width),y?k.height=y:null===e.height&&n(f.height)&&(k.height=f.height);var T=a.extendFlat({},h,{_exportedPlot:!0,staticPlot:!0,setBackground:b}),A=o.getRedrawFunc(w);function M(){return new Promise(function(t){setTimeout(t,o.getDelay(w._fullLayout))})}function S(){return new Promise(function(t,e){var r=s(w,v,x),n=w._fullLayout.width,c=w._fullLayout.height;if(i.purge(w),document.body.removeChild(w),\\\"svg\\\"===v)return t(_?r:o.encodeSVG(r));var u=document.createElement(\\\"canvas\\\");u.id=a.randstr(),l({format:v,width:n,height:c,scale:x,canvas:u,svg:r,promise:!0}).then(t).catch(e)})}return new Promise(function(t,e){i.plot(w,r,k,T).then(A).then(M).then(S).then(function(e){t(function(t){return _?t.replace(o.IMAGE_URL_PREFIX,\\\"\\\"):t}(e))}).catch(function(t){e(t)})})}},{\\\"../lib\\\":719,\\\"../snapshot/helpers\\\":851,\\\"../snapshot/svgtoimg\\\":853,\\\"../snapshot/tosvg\\\":855,\\\"./plot_api\\\":754,\\\"fast-isnumeric\\\":225}],761:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../lib\\\"),i=t(\\\"../plots/plots\\\"),a=t(\\\"./plot_schema\\\"),o=t(\\\"./plot_config\\\").dfltConfig,s=n.isPlainObject,l=Array.isArray,c=n.isArrayOrTypedArray;function u(t,e,r,i,a,o){o=o||[];for(var h=Object.keys(t),f=0;f<h.length;f++){var v=h[f];if(\\\"transforms\\\"!==v){var m=o.slice();m.push(v);var y=t[v],x=e[v],b=g(r,v),_=\\\"info_array\\\"===(b||{}).valType,w=\\\"colorscale\\\"===(b||{}).valType,k=(b||{}).items;if(d(r,v))if(s(y)&&s(x))u(y,x,b,i,a,m);else if(_&&l(y)){y.length>x.length&&i.push(p(\\\"unused\\\",a,m.concat(x.length)));var T,A,M,S,E,C=x.length,L=Array.isArray(k);if(L&&(C=Math.min(C,k.length)),2===b.dimensions)for(A=0;A<C;A++)if(l(y[A])){y[A].length>x[A].length&&i.push(p(\\\"unused\\\",a,m.concat(A,x[A].length)));var P=x[A].length;for(T=0;T<(L?Math.min(P,k[A].length):P);T++)M=L?k[A][T]:k,S=y[A][T],E=x[A][T],n.validate(S,M)?E!==S&&E!==+S&&i.push(p(\\\"dynamic\\\",a,m.concat(A,T),S,E)):i.push(p(\\\"value\\\",a,m.concat(A,T),S))}else i.push(p(\\\"array\\\",a,m.concat(A),y[A]));else for(A=0;A<C;A++)M=L?k[A]:k,S=y[A],E=x[A],n.validate(S,M)?E!==S&&E!==+S&&i.push(p(\\\"dynamic\\\",a,m.concat(A),S,E)):i.push(p(\\\"value\\\",a,m.concat(A),S))}else if(b.items&&!_&&l(y)){var O,z,I=k[Object.keys(k)[0]],D=[];for(O=0;O<x.length;O++){var R=x[O]._index||O;if((z=m.slice()).push(R),s(y[R])&&s(x[O])){D.push(R);var F=y[R],B=x[O];s(F)&&!1!==F.visible&&!1===B.visible?i.push(p(\\\"invisible\\\",a,z)):u(F,B,I,i,a,z)}}for(O=0;O<y.length;O++)(z=m.slice()).push(O),s(y[O])?-1===D.indexOf(O)&&i.push(p(\\\"unused\\\",a,z)):i.push(p(\\\"object\\\",a,z,y[O]))}else!s(y)&&s(x)?i.push(p(\\\"object\\\",a,m,y)):c(y)||!c(x)||_||w?v in e?n.validate(y,b)?\\\"enumerated\\\"===b.valType&&(b.coerceNumber&&y!==+x||y!==x)&&i.push(p(\\\"dynamic\\\",a,m,y,x)):i.push(p(\\\"value\\\",a,m,y)):i.push(p(\\\"unused\\\",a,m,y)):i.push(p(\\\"array\\\",a,m,y));else i.push(p(\\\"schema\\\",a,m))}}return i}e.exports=function(t,e){var r,c,h=a.get(),f=[],d={_context:n.extendFlat({},o)};l(t)?(d.data=n.extendDeep([],t),r=t):(d.data=[],r=[],f.push(p(\\\"array\\\",\\\"data\\\"))),s(e)?(d.layout=n.extendDeep({},e),c=e):(d.layout={},c={},arguments.length>1&&f.push(p(\\\"object\\\",\\\"layout\\\"))),i.supplyDefaults(d);for(var g=d._fullData,v=r.length,m=0;m<v;m++){var y=r[m],x=[\\\"data\\\",m];if(s(y)){var b=g[m],_=b.type,w=h.traces[_].attributes;w.type={valType:\\\"enumerated\\\",values:[_]},!1===b.visible&&!1!==y.visible&&f.push(p(\\\"invisible\\\",x)),u(y,b,w,f,x);var k=y.transforms,T=b.transforms;if(k){l(k)||f.push(p(\\\"array\\\",x,[\\\"transforms\\\"])),x.push(\\\"transforms\\\");for(var A=0;A<k.length;A++){var M=[\\\"transforms\\\",A],S=k[A].type;if(s(k[A])){var E=h.transforms[S]?h.transforms[S].attributes:{};E.type={valType:\\\"enumerated\\\",values:Object.keys(h.transforms)},u(k[A],T[A],E,f,x,M)}else f.push(p(\\\"object\\\",x,M))}}}else f.push(p(\\\"object\\\",x))}return u(c,d._fullLayout,function(t,e){for(var r=t.layout.layoutAttributes,i=0;i<e.length;i++){var a=e[i],o=t.traces[a.type],s=o.layoutAttributes;s&&(a.subplot?n.extendFlat(r[o.attributes.subplot.dflt],s):n.extendFlat(r,s))}return r}(h,g),f,\\\"layout\\\"),0===f.length?void 0:f};var h={object:function(t,e){return(\\\"layout\\\"===t&&\\\"\\\"===e?\\\"The layout argument\\\":\\\"data\\\"===t[0]&&\\\"\\\"===e?\\\"Trace \\\"+t[1]+\\\" in the data argument\\\":f(t)+\\\"key \\\"+e)+\\\" must be linked to an object container\\\"},array:function(t,e){return(\\\"data\\\"===t?\\\"The data argument\\\":f(t)+\\\"key \\\"+e)+\\\" must be linked to an array container\\\"},schema:function(t,e){return f(t)+\\\"key \\\"+e+\\\" is not part of the schema\\\"},unused:function(t,e,r){var n=s(r)?\\\"container\\\":\\\"key\\\";return f(t)+n+\\\" \\\"+e+\\\" did not get coerced\\\"},dynamic:function(t,e,r,n){return[f(t)+\\\"key\\\",e,\\\"(set to '\\\"+r+\\\"')\\\",\\\"got reset to\\\",\\\"'\\\"+n+\\\"'\\\",\\\"during defaults.\\\"].join(\\\" \\\")},invisible:function(t,e){return(e?f(t)+\\\"item \\\"+e:\\\"Trace \\\"+t[1])+\\\" got defaulted to be not visible\\\"},value:function(t,e,r){return[f(t)+\\\"key \\\"+e,\\\"is set to an invalid value (\\\"+r+\\\")\\\"].join(\\\" \\\")}};function f(t){return l(t)?\\\"In data trace \\\"+t[1]+\\\", \\\":\\\"In \\\"+t+\\\", \\\"}function p(t,e,r,i,a){var o,s;r=r||\\\"\\\",l(e)?(o=e[0],s=e[1]):(o=e,s=null);var c=function(t){if(!l(t))return String(t);for(var e=\\\"\\\",r=0;r<t.length;r++){var n=t[r];\\\"number\\\"==typeof n?e=e.substr(0,e.length-1)+\\\"[\\\"+n+\\\"]\\\":e+=n,r<t.length-1&&(e+=\\\".\\\")}return e}(r),u=h[t](e,c,i,a);return n.log(u),{code:t,container:o,trace:s,path:r,astr:c,msg:u}}function d(t,e){var r=m(e),n=r.keyMinusId,i=r.id;return!!(n in t&&t[n]._isSubplotObj&&i)||e in t}function g(t,e){return e in t?t[e]:t[m(e).keyMinusId]}var v=n.counterRegex(\\\"([a-z]+)\\\");function m(t){var e=t.match(v);return{keyMinusId:e&&e[1],id:e&&e[2]}}},{\\\"../lib\\\":719,\\\"../plots/plots\\\":828,\\\"./plot_config\\\":755,\\\"./plot_schema\\\":756}],762:[function(t,e,r){\\\"use strict\\\";e.exports={mode:{valType:\\\"enumerated\\\",dflt:\\\"afterall\\\",values:[\\\"immediate\\\",\\\"next\\\",\\\"afterall\\\"]},direction:{valType:\\\"enumerated\\\",values:[\\\"forward\\\",\\\"reverse\\\"],dflt:\\\"forward\\\"},fromcurrent:{valType:\\\"boolean\\\",dflt:!1},frame:{duration:{valType:\\\"number\\\",min:0,dflt:500},redraw:{valType:\\\"boolean\\\",dflt:!0}},transition:{duration:{valType:\\\"number\\\",min:0,dflt:500,editType:\\\"none\\\"},easing:{valType:\\\"enumerated\\\",dflt:\\\"cubic-in-out\\\",values:[\\\"linear\\\",\\\"quad\\\",\\\"cubic\\\",\\\"sin\\\",\\\"exp\\\",\\\"circle\\\",\\\"elastic\\\",\\\"back\\\",\\\"bounce\\\",\\\"linear-in\\\",\\\"quad-in\\\",\\\"cubic-in\\\",\\\"sin-in\\\",\\\"exp-in\\\",\\\"circle-in\\\",\\\"elastic-in\\\",\\\"back-in\\\",\\\"bounce-in\\\",\\\"linear-out\\\",\\\"quad-out\\\",\\\"cubic-out\\\",\\\"sin-out\\\",\\\"exp-out\\\",\\\"circle-out\\\",\\\"elastic-out\\\",\\\"back-out\\\",\\\"bounce-out\\\",\\\"linear-in-out\\\",\\\"quad-in-out\\\",\\\"cubic-in-out\\\",\\\"sin-in-out\\\",\\\"exp-in-out\\\",\\\"circle-in-out\\\",\\\"elastic-in-out\\\",\\\"back-in-out\\\",\\\"bounce-in-out\\\"],editType:\\\"none\\\"},ordering:{valType:\\\"enumerated\\\",values:[\\\"layout first\\\",\\\"traces first\\\"],dflt:\\\"layout first\\\",editType:\\\"none\\\"}}}},{}],763:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../lib\\\"),i=t(\\\"../plot_api/plot_template\\\");e.exports=function(t,e,r){var a,o,s=r.name,l=r.inclusionAttr||\\\"visible\\\",c=e[s],u=n.isArrayOrTypedArray(t[s])?t[s]:[],h=e[s]=[],f=i.arrayTemplater(e,s,l);for(a=0;a<u.length;a++){var p=u[a];n.isPlainObject(p)?o=f.newItem(p):(o=f.newItem({}))[l]=!1,o._index=a,!1!==o[l]&&r.handleItemDefaults(p,o,e,r),h.push(o)}var d=f.defaultItems();for(a=0;a<d.length;a++)(o=d[a])._index=h.length,r.handleItemDefaults({},o,e,r,{}),h.push(o);if(n.isArrayOrTypedArray(c)){var g=Math.min(c.length,h.length);for(a=0;a<g;a++)n.relinkPrivateKeys(h[a],c[a])}return h}},{\\\"../lib\\\":719,\\\"../plot_api/plot_template\\\":757}],764:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../components/fx/attributes\\\");e.exports={type:{valType:\\\"enumerated\\\",values:[],dflt:\\\"scatter\\\",editType:\\\"calc+clearAxisTypes\\\",_noTemplating:!0},visible:{valType:\\\"enumerated\\\",values:[!0,!1,\\\"legendonly\\\"],dflt:!0,editType:\\\"calc\\\"},showlegend:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"style\\\"},legendgroup:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"style\\\"},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:1,editType:\\\"style\\\"},name:{valType:\\\"string\\\",editType:\\\"style\\\"},uid:{valType:\\\"string\\\",editType:\\\"plot\\\",anim:!0},ids:{valType:\\\"data_array\\\",editType:\\\"calc\\\",anim:!0},customdata:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},meta:{valType:\\\"any\\\",arrayOk:!0,editType:\\\"plot\\\"},selectedpoints:{valType:\\\"any\\\",editType:\\\"calc\\\"},hoverinfo:{valType:\\\"flaglist\\\",flags:[\\\"x\\\",\\\"y\\\",\\\"z\\\",\\\"text\\\",\\\"name\\\"],extras:[\\\"all\\\",\\\"none\\\",\\\"skip\\\"],arrayOk:!0,dflt:\\\"all\\\",editType:\\\"none\\\"},hoverlabel:n.hoverlabel,stream:{token:{valType:\\\"string\\\",noBlank:!0,strict:!0,editType:\\\"calc\\\"},maxpoints:{valType:\\\"number\\\",min:0,max:1e4,dflt:500,editType:\\\"calc\\\"},editType:\\\"calc\\\"},transforms:{_isLinkedToArray:\\\"transform\\\",editType:\\\"calc\\\"},uirevision:{valType:\\\"any\\\",editType:\\\"none\\\"}}},{\\\"../components/fx/attributes\\\":623}],765:[function(t,e,r){\\\"use strict\\\";e.exports={xaxis:{valType:\\\"subplotid\\\",dflt:\\\"x\\\",editType:\\\"calc+clearAxisTypes\\\"},yaxis:{valType:\\\"subplotid\\\",dflt:\\\"y\\\",editType:\\\"calc+clearAxisTypes\\\"}}},{}],766:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../constants/numerical\\\").FP_SAFE,o=t(\\\"../../registry\\\");function s(t,e){var r,n,a=[],o=l(e),s=c(t,e),u=s.min,h=s.max;if(0===u.length||0===h.length)return i.simpleMap(e.range,e.r2l);var f=u[0].val,p=h[0].val;for(r=1;r<u.length&&f===p;r++)f=Math.min(f,u[r].val);for(r=1;r<h.length&&f===p;r++)p=Math.max(p,h[r].val);var d=!1;if(e.range){var g=i.simpleMap(e.range,e.r2l);d=g[1]<g[0]}\\\"reversed\\\"===e.autorange&&(d=!0,e.autorange=!0);var v,m,y,x,b,_,w=e.rangemode,k=\\\"tozero\\\"===w,T=\\\"nonnegative\\\"===w,A=e._length,M=A/10,S=0;for(r=0;r<u.length;r++)for(v=u[r],n=0;n<h.length;n++)(_=(m=h[n]).val-v.val)>0&&((b=A-o(v)-o(m))>M?_/b>S&&(y=v,x=m,S=_/b):_/A>S&&(y={val:v.val,pad:0},x={val:m.val,pad:0},S=_/A));if(f===p){var E=f-1,C=f+1;if(k)if(0===f)a=[0,1];else{var L=(f>0?h:u).reduce(function(t,e){return Math.max(t,o(e))},0),P=f/(1-Math.min(.5,L/A));a=f>0?[0,P]:[P,0]}else a=T?[Math.max(0,E),Math.max(1,C)]:[E,C]}else k?(y.val>=0&&(y={val:0,pad:0}),x.val<=0&&(x={val:0,pad:0})):T&&(y.val-S*o(y)<0&&(y={val:0,pad:0}),x.val<=0&&(x={val:1,pad:0})),S=(x.val-y.val)/(A-o(y)-o(x)),a=[y.val-S*o(y),x.val+S*o(x)];return d&&a.reverse(),i.simpleMap(a,e.l2r||Number)}function l(t){var e=t._length/20;return\\\"domain\\\"===t.constrain&&t._inputDomain&&(e*=(t._inputDomain[1]-t._inputDomain[0])/(t.domain[1]-t.domain[0])),function(t){return t.pad+(t.extrapad?e:0)}}function c(t,e){var r,n,i,a=e._id,o=t._fullData,s=t._fullLayout,l=[],c=[];function f(t,e){for(r=0;r<e.length;r++){var o=t[e[r]],s=(o._extremes||{})[a];if(!0===o.visible&&s){for(n=0;n<s.min.length;n++)i=s.min[n],u(l,i.val,i.pad,{extrapad:i.extrapad});for(n=0;n<s.max.length;n++)i=s.max[n],h(c,i.val,i.pad,{extrapad:i.extrapad})}}}return f(o,e._traceIndices),f(s.annotations||[],e._annIndices||[]),f(s.shapes||[],e._shapeIndices||[]),{min:l,max:c}}function u(t,e,r,n){f(t,e,r,n,d)}function h(t,e,r,n){f(t,e,r,n,g)}function f(t,e,r,n,i){for(var a=n.tozero,o=n.extrapad,s=!0,l=0;l<t.length&&s;l++){var c=t[l];if(i(c.val,e)&&c.pad>=r&&(c.extrapad||!o)){s=!1;break}i(e,c.val)&&c.pad<=r&&(o||!c.extrapad)&&(t.splice(l,1),l--)}if(s){var u=a&&0===e;t.push({val:e,pad:u?0:r,extrapad:!u&&o})}}function p(t){return n(t)&&Math.abs(t)<a}function d(t,e){return t<=e}function g(t,e){return t>=e}e.exports={getAutoRange:s,makePadFn:l,doAutoRange:function(t,e){if(e.setScale(),e.autorange){e.range=s(t,e),e._r=e.range.slice(),e._rl=i.simpleMap(e._r,e.r2l);var r=e._input,n={};n[e._attr+\\\".range\\\"]=e.range,n[e._attr+\\\".autorange\\\"]=e.autorange,o.call(\\\"_storeDirectGUIEdit\\\",t.layout,t._fullLayout._preGUI,n),r.range=e.range.slice(),r.autorange=e.autorange}var a=e._anchorAxis;if(a&&a.rangeslider){var l=a.rangeslider[e._name];l&&\\\"auto\\\"===l.rangemode&&(l.range=s(t,e)),a._input.rangeslider[e._name]=i.extendFlat({},l)}},findExtremes:function(t,e,r){r||(r={});t._m||t.setScale();var i,o,s,l,c,f,d,g,v,m=[],y=[],x=e.length,b=r.padded||!1,_=r.tozero&&(\\\"linear\\\"===t.type||\\\"-\\\"===t.type),w=\\\"log\\\"===t.type,k=!1;function T(t){if(Array.isArray(t))return k=!0,function(e){return Math.max(Number(t[e]||0),0)};var e=Math.max(Number(t||0),0);return function(){return e}}var A=T((t._m>0?r.ppadplus:r.ppadminus)||r.ppad||0),M=T((t._m>0?r.ppadminus:r.ppadplus)||r.ppad||0),S=T(r.vpadplus||r.vpad),E=T(r.vpadminus||r.vpad);if(!k){if(g=1/0,v=-1/0,w)for(i=0;i<x;i++)(o=e[i])<g&&o>0&&(g=o),o>v&&o<a&&(v=o);else for(i=0;i<x;i++)(o=e[i])<g&&o>-a&&(g=o),o>v&&o<a&&(v=o);e=[g,v],x=2}var C={tozero:_,extrapad:b};function L(r){s=e[r],n(s)&&(f=A(r),d=M(r),g=s-E(r),v=s+S(r),w&&g<v/10&&(g=v/10),l=t.c2l(g),c=t.c2l(v),_&&(l=Math.min(0,l),c=Math.max(0,c)),p(l)&&u(m,l,d,C),p(c)&&h(y,c,f,C))}var P=Math.min(6,x);for(i=0;i<P;i++)L(i);for(i=x-1;i>=P;i--)L(i);return{min:m,max:y,opts:r}},concatExtremes:c}},{\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"fast-isnumeric\\\":225}],767:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"fast-isnumeric\\\"),a=t(\\\"../../plots/plots\\\"),o=t(\\\"../../registry\\\"),s=t(\\\"../../lib\\\"),l=t(\\\"../../lib/svg_text_utils\\\"),c=t(\\\"../../components/titles\\\"),u=t(\\\"../../components/color\\\"),h=t(\\\"../../components/drawing\\\"),f=t(\\\"./layout_attributes\\\"),p=t(\\\"./clean_ticks\\\"),d=t(\\\"../../constants/numerical\\\"),g=d.ONEAVGYEAR,v=d.ONEAVGMONTH,m=d.ONEDAY,y=d.ONEHOUR,x=d.ONEMIN,b=d.ONESEC,_=d.MINUS_SIGN,w=d.BADNUM,k=t(\\\"../../constants/alignment\\\").MID_SHIFT,T=t(\\\"../../constants/alignment\\\").LINE_SPACING,A=e.exports={};A.setConvert=t(\\\"./set_convert\\\");var M=t(\\\"./axis_autotype\\\"),S=t(\\\"./axis_ids\\\");A.id2name=S.id2name,A.name2id=S.name2id,A.cleanId=S.cleanId,A.list=S.list,A.listIds=S.listIds,A.getFromId=S.getFromId,A.getFromTrace=S.getFromTrace;var E=t(\\\"./autorange\\\");A.getAutoRange=E.getAutoRange,A.findExtremes=E.findExtremes,A.coerceRef=function(t,e,r,n,i,a){var o=n.charAt(n.length-1),l=r._fullLayout._subplots[o+\\\"axis\\\"],c=n+\\\"ref\\\",u={};return i||(i=l[0]||a),a||(a=i),u[c]={valType:\\\"enumerated\\\",values:l.concat(a?[a]:[]),dflt:i},s.coerce(t,e,u,c)},A.coercePosition=function(t,e,r,n,i,a){var o,l;if(\\\"paper\\\"===n||\\\"pixel\\\"===n)o=s.ensureNumber,l=r(i,a);else{var c=A.getFromId(e,n);l=r(i,a=c.fraction2r(a)),o=c.cleanPos}t[i]=o(l)},A.cleanPosition=function(t,e,r){return(\\\"paper\\\"===r||\\\"pixel\\\"===r?s.ensureNumber:A.getFromId(e,r).cleanPos)(t)},A.redrawComponents=function(t,e){e=e||A.listIds(t);var r=t._fullLayout;function n(n,i,a,s){for(var l=o.getComponentMethod(n,i),c={},u=0;u<e.length;u++)for(var h=r[A.id2name(e[u])][a],f=0;f<h.length;f++){var p=h[f];if(!c[p]&&(l(t,p),c[p]=1,s))return}}n(\\\"annotations\\\",\\\"drawOne\\\",\\\"_annIndices\\\"),n(\\\"shapes\\\",\\\"drawOne\\\",\\\"_shapeIndices\\\"),n(\\\"images\\\",\\\"draw\\\",\\\"_imgIndices\\\",!0)};var C=A.getDataConversions=function(t,e,r,n){var i,a=\\\"x\\\"===r||\\\"y\\\"===r||\\\"z\\\"===r?r:n;if(Array.isArray(a)){if(i={type:M(n),_categories:[]},A.setConvert(i),\\\"category\\\"===i.type)for(var o=0;o<n.length;o++)i.d2c(n[o])}else i=A.getFromTrace(t,e,a);return i?{d2c:i.d2c,c2d:i.c2d}:\\\"ids\\\"===a?{d2c:P,c2d:P}:{d2c:L,c2d:L}};function L(t){return+t}function P(t){return String(t)}A.getDataToCoordFunc=function(t,e,r,n){return C(t,e,r,n).d2c},A.counterLetter=function(t){var e=t.charAt(0);return\\\"x\\\"===e?\\\"y\\\":\\\"y\\\"===e?\\\"x\\\":void 0},A.minDtick=function(t,e,r,n){-1===[\\\"log\\\",\\\"category\\\",\\\"multicategory\\\"].indexOf(t.type)&&n?void 0===t._minDtick?(t._minDtick=e,t._forceTick0=r):t._minDtick&&((t._minDtick/e+1e-6)%1<2e-6&&((r-t._forceTick0)/e%1+1.000001)%1<2e-6?(t._minDtick=e,t._forceTick0=r):((e/t._minDtick+1e-6)%1>2e-6||((r-t._forceTick0)/t._minDtick%1+1.000001)%1>2e-6)&&(t._minDtick=0)):t._minDtick=0},A.saveRangeInitial=function(t,e){for(var r=A.list(t,\\\"\\\",!0),n=!1,i=0;i<r.length;i++){var a=r[i],o=void 0===a._rangeInitial,s=o||!(a.range[0]===a._rangeInitial[0]&&a.range[1]===a._rangeInitial[1]);(o&&!1===a.autorange||e&&s)&&(a._rangeInitial=a.range.slice(),n=!0)}return n},A.saveShowSpikeInitial=function(t,e){for(var r=A.list(t,\\\"\\\",!0),n=!1,i=\\\"on\\\",a=0;a<r.length;a++){var o=r[a],s=void 0===o._showSpikeInitial,l=s||!(o.showspikes===o._showspikes);(s||e&&l)&&(o._showSpikeInitial=o.showspikes,n=!0),\\\"on\\\"!==i||o.showspikes||(i=\\\"off\\\")}return t._fullLayout._cartesianSpikesEnabled=i,n},A.autoBin=function(t,e,r,n,a,o){var l,c=s.aggNums(Math.min,null,t),u=s.aggNums(Math.max,null,t);if(\\\"category\\\"===e.type||\\\"multicategory\\\"===e.type)return{start:c-.5,end:u+.5,size:Math.max(1,Math.round(o)||1),_dataSpan:u-c};if(a||(a=e.calendar),l=\\\"log\\\"===e.type?{type:\\\"linear\\\",range:[c,u]}:{type:e.type,range:s.simpleMap([c,u],e.c2r,0,a),calendar:a},A.setConvert(l),o=o&&p.dtick(o,l.type))l.dtick=o,l.tick0=p.tick0(void 0,l.type,a);else{var h;if(r)h=(u-c)/r;else{var f=s.distinctVals(t),d=Math.pow(10,Math.floor(Math.log(f.minDiff)/Math.LN10)),g=d*s.roundUp(f.minDiff/d,[.9,1.9,4.9,9.9],!0);h=Math.max(g,2*s.stdev(t)/Math.pow(t.length,n?.25:.4)),i(h)||(h=1)}A.autoTicks(l,h)}var v,y=l.dtick,x=A.tickIncrement(A.tickFirst(l),y,\\\"reverse\\\",a);if(\\\"number\\\"==typeof y)v=(x=function(t,e,r,n,a){var o=0,s=0,l=0,c=0;function u(e){return(1+100*(e-t)/r.dtick)%100<2}for(var h=0;h<e.length;h++)e[h]%1==0?l++:i(e[h])||c++,u(e[h])&&o++,u(e[h]+r.dtick/2)&&s++;var f=e.length-c;if(l===f&&\\\"date\\\"!==r.type)r.dtick<1?t=n-.5*r.dtick:(t-=.5)+r.dtick<n&&(t+=r.dtick);else if(s<.1*f&&(o>.3*f||u(n)||u(a))){var p=r.dtick/2;t+=t+p<n?p:-p}return t}(x,t,l,c,u))+(1+Math.floor((u-x)/y))*y;else for(\\\"M\\\"===l.dtick.charAt(0)&&(x=function(t,e,r,n,i){var a=s.findExactDates(e,i);if(a.exactDays>.8){var o=Number(r.substr(1));a.exactYears>.8&&o%12==0?t=A.tickIncrement(t,\\\"M6\\\",\\\"reverse\\\")+1.5*m:a.exactMonths>.8?t=A.tickIncrement(t,\\\"M1\\\",\\\"reverse\\\")+15.5*m:t-=m/2;var l=A.tickIncrement(t,r);if(l<=n)return l}return t}(x,t,y,c,a)),v=x,0;v<=u;)v=A.tickIncrement(v,y,!1,a),0;return{start:e.c2r(x,0,a),end:e.c2r(v,0,a),size:y,_dataSpan:u-c}},A.prepTicks=function(t){var e=s.simpleMap(t.range,t.r2l);if(\\\"auto\\\"===t.tickmode||!t.dtick){var r,n=t.nticks;n||(\\\"category\\\"===t.type||\\\"multicategory\\\"===t.type?(r=t.tickfont?1.2*(t.tickfont.size||12):15,n=t._length/r):(r=\\\"y\\\"===t._id.charAt(0)?40:80,n=s.constrain(t._length/r,4,9)+1),\\\"radialaxis\\\"===t._name&&(n*=2)),\\\"array\\\"===t.tickmode&&(n*=100),A.autoTicks(t,Math.abs(e[1]-e[0])/n),t._minDtick>0&&t.dtick<2*t._minDtick&&(t.dtick=t._minDtick,t.tick0=t.l2r(t._forceTick0))}t.tick0||(t.tick0=\\\"date\\\"===t.type?\\\"2000-01-01\\\":0),\\\"date\\\"===t.type&&t.dtick<.1&&(t.dtick=.1),j(t)},A.calcTicks=function(t){A.prepTicks(t);var e=s.simpleMap(t.range,t.r2l);if(\\\"array\\\"===t.tickmode)return function(t){var e=t.tickvals,r=t.ticktext,n=new Array(e.length),i=s.simpleMap(t.range,t.r2l),a=1.0001*i[0]-1e-4*i[1],o=1.0001*i[1]-1e-4*i[0],l=Math.min(a,o),c=Math.max(a,o),u=0;Array.isArray(r)||(r=[]);var h=\\\"category\\\"===t.type?t.d2l_noadd:t.d2l;\\\"log\\\"===t.type&&\\\"L\\\"!==String(t.dtick).charAt(0)&&(t.dtick=\\\"L\\\"+Math.pow(10,Math.floor(Math.min(t.range[0],t.range[1]))-1));for(var f=0;f<e.length;f++){var p=h(e[f]);p>l&&p<c&&(void 0===r[f]?n[u]=A.tickText(t,p):n[u]=U(t,p,String(r[f])),u++)}u<e.length&&n.splice(u,e.length-u);return n}(t);t._tmin=A.tickFirst(t);var r=1.0001*e[0]-1e-4*e[1],n=1.0001*e[1]-1e-4*e[0],a=e[1]<e[0];if(t._tmin<r!==a)return[];var o=[];\\\"category\\\"!==t.type&&\\\"multicategory\\\"!==t.type||(n=a?Math.max(-.5,n):Math.min(t._categories.length-.5,n));for(var l=\\\"log\\\"===t.type&&!(i(t.dtick)||\\\"L\\\"===t.dtick.charAt(0)),c=null,u=Math.max(1e3,t._length||0),h=t._tmin;(a?h>=n:h<=n)&&!(o.length>u||h===c);h=A.tickIncrement(h,t.dtick,a,t.calendar)){c=h;var f=!1;l&&h!==(0|h)&&(f=!0),o.push({minor:f,value:h})}rt(t)&&360===Math.abs(e[1]-e[0])&&o.pop(),t._tmax=(o[o.length-1]||{}).value,t._prevDateHead=\\\"\\\",t._inCalcTicks=!0;for(var p=new Array(o.length),d=0;d<o.length;d++)p[d]=A.tickText(t,o[d].value,!1,o[d].minor);return t._inCalcTicks=!1,p};var O=[2,5,10],z=[1,2,3,6,12],I=[1,2,5,10,15,30],D=[1,2,3,7,14],R=[-.046,0,.301,.477,.602,.699,.778,.845,.903,.954,1],F=[-.301,0,.301,.699,1],B=[15,30,45,90,180];function N(t,e,r){return e*s.roundUp(t/e,r)}function j(t){var e=t.dtick;if(t._tickexponent=0,i(e)||\\\"string\\\"==typeof e||(e=1),\\\"category\\\"!==t.type&&\\\"multicategory\\\"!==t.type||(t._tickround=null),\\\"date\\\"===t.type){var r=t.r2l(t.tick0),n=t.l2r(r).replace(/(^-|i)/g,\\\"\\\"),a=n.length;if(\\\"M\\\"===String(e).charAt(0))a>10||\\\"01-01\\\"!==n.substr(5)?t._tickround=\\\"d\\\":t._tickround=+e.substr(1)%12==0?\\\"y\\\":\\\"m\\\";else if(e>=m&&a<=10||e>=15*m)t._tickround=\\\"d\\\";else if(e>=x&&a<=16||e>=y)t._tickround=\\\"M\\\";else if(e>=b&&a<=19||e>=x)t._tickround=\\\"S\\\";else{var o=t.l2r(r+e).replace(/^-/,\\\"\\\").length;t._tickround=Math.max(a,o)-20,t._tickround<0&&(t._tickround=4)}}else if(i(e)||\\\"L\\\"===e.charAt(0)){var s=t.range.map(t.r2d||Number);i(e)||(e=Number(e.substr(1))),t._tickround=2-Math.floor(Math.log(e)/Math.LN10+.01);var l=Math.max(Math.abs(s[0]),Math.abs(s[1])),c=Math.floor(Math.log(l)/Math.LN10+.01);Math.abs(c)>3&&(q(t.exponentformat)&&!H(c)?t._tickexponent=3*Math.round((c-1)/3):t._tickexponent=c)}else t._tickround=null}function U(t,e,r){var n=t.tickfont||{};return{x:e,dx:0,dy:0,text:r||\\\"\\\",fontSize:n.size,font:n.family,fontColor:n.color}}A.autoTicks=function(t,e){var r;function n(t){return Math.pow(t,Math.floor(Math.log(e)/Math.LN10))}if(\\\"date\\\"===t.type){t.tick0=s.dateTick0(t.calendar);var a=2*e;a>g?(e/=g,r=n(10),t.dtick=\\\"M\\\"+12*N(e,r,O)):a>v?(e/=v,t.dtick=\\\"M\\\"+N(e,1,z)):a>m?(t.dtick=N(e,m,D),t.tick0=s.dateTick0(t.calendar,!0)):a>y?t.dtick=N(e,y,z):a>x?t.dtick=N(e,x,I):a>b?t.dtick=N(e,b,I):(r=n(10),t.dtick=N(e,r,O))}else if(\\\"log\\\"===t.type){t.tick0=0;var o=s.simpleMap(t.range,t.r2l);if(e>.7)t.dtick=Math.ceil(e);else if(Math.abs(o[1]-o[0])<1){var l=1.5*Math.abs((o[1]-o[0])/e);e=Math.abs(Math.pow(10,o[1])-Math.pow(10,o[0]))/l,r=n(10),t.dtick=\\\"L\\\"+N(e,r,O)}else t.dtick=e>.3?\\\"D2\\\":\\\"D1\\\"}else\\\"category\\\"===t.type||\\\"multicategory\\\"===t.type?(t.tick0=0,t.dtick=Math.ceil(Math.max(e,1))):rt(t)?(t.tick0=0,r=1,t.dtick=N(e,r,B)):(t.tick0=0,r=n(10),t.dtick=N(e,r,O));if(0===t.dtick&&(t.dtick=1),!i(t.dtick)&&\\\"string\\\"!=typeof t.dtick){var c=t.dtick;throw t.dtick=1,\\\"ax.dtick error: \\\"+String(c)}},A.tickIncrement=function(t,e,r,a){var o=r?-1:1;if(i(e))return t+o*e;var l=e.charAt(0),c=o*Number(e.substr(1));if(\\\"M\\\"===l)return s.incrementMonth(t,c,a);if(\\\"L\\\"===l)return Math.log(Math.pow(10,t)+c)/Math.LN10;if(\\\"D\\\"===l){var u=\\\"D2\\\"===e?F:R,h=t+.01*o,f=s.roundUp(s.mod(h,1),u,r);return Math.floor(h)+Math.log(n.round(Math.pow(10,f),1))/Math.LN10}throw\\\"unrecognized dtick \\\"+String(e)},A.tickFirst=function(t){var e=t.r2l||Number,r=s.simpleMap(t.range,e),a=r[1]<r[0],o=a?Math.floor:Math.ceil,l=1.0001*r[0]-1e-4*r[1],c=t.dtick,u=e(t.tick0);if(i(c)){var h=o((l-u)/c)*c+u;return\\\"category\\\"!==t.type&&\\\"multicategory\\\"!==t.type||(h=s.constrain(h,0,t._categories.length-1)),h}var f=c.charAt(0),p=Number(c.substr(1));if(\\\"M\\\"===f){for(var d,g,v,m=0,y=u;m<10;){if(((d=A.tickIncrement(y,c,a,t.calendar))-l)*(y-l)<=0)return a?Math.min(y,d):Math.max(y,d);g=(l-(y+d)/2)/(d-y),v=f+(Math.abs(Math.round(g))||1)*p,y=A.tickIncrement(y,v,g<0?!a:a,t.calendar),m++}return s.error(\\\"tickFirst did not converge\\\",t),y}if(\\\"L\\\"===f)return Math.log(o((Math.pow(10,l)-u)/p)*p+u)/Math.LN10;if(\\\"D\\\"===f){var x=\\\"D2\\\"===c?F:R,b=s.roundUp(s.mod(l,1),x,a);return Math.floor(l)+Math.log(n.round(Math.pow(10,b),1))/Math.LN10}throw\\\"unrecognized dtick \\\"+String(c)},A.tickText=function(t,e,r,n){var a,o=U(t,e),l=\\\"array\\\"===t.tickmode,c=r||l,u=t.type,h=\\\"category\\\"===u?t.d2l_noadd:t.d2l;if(l&&Array.isArray(t.ticktext)){var f=s.simpleMap(t.range,t.r2l),p=Math.abs(f[1]-f[0])/1e4;for(a=0;a<t.ticktext.length&&!(Math.abs(e-h(t.tickvals[a]))<p);a++);if(a<t.ticktext.length)return o.text=String(t.ticktext[a]),o}function d(n){if(void 0===n)return!0;if(r)return\\\"none\\\"===n;var i={first:t._tmin,last:t._tmax}[n];return\\\"all\\\"!==n&&e!==i}var g=r?\\\"never\\\":\\\"none\\\"!==t.exponentformat&&d(t.showexponent)?\\\"hide\\\":\\\"\\\";if(\\\"date\\\"===u?function(t,e,r,n){var a=t._tickround,o=r&&t.hoverformat||A.getTickFormat(t);n&&(a=i(a)?4:{y:\\\"m\\\",m:\\\"d\\\",d:\\\"M\\\",M:\\\"S\\\",S:4}[a]);var l,c=s.formatDate(e.x,o,a,t._dateFormat,t.calendar,t._extraFormat),u=c.indexOf(\\\"\\\\n\\\");-1!==u&&(l=c.substr(u+1),c=c.substr(0,u));n&&(\\\"00:00:00\\\"===c||\\\"00:00\\\"===c?(c=l,l=\\\"\\\"):8===c.length&&(c=c.replace(/:00$/,\\\"\\\")));l&&(r?\\\"d\\\"===a?c+=\\\", \\\"+l:c=l+(c?\\\", \\\"+c:\\\"\\\"):t._inCalcTicks&&l===t._prevDateHead||(c+=\\\"<br>\\\"+l,t._prevDateHead=l));e.text=c}(t,o,r,c):\\\"log\\\"===u?function(t,e,r,n,a){var o=t.dtick,l=e.x,c=t.tickformat,u=\\\"string\\\"==typeof o&&o.charAt(0);\\\"never\\\"===a&&(a=\\\"\\\");n&&\\\"L\\\"!==u&&(o=\\\"L3\\\",u=\\\"L\\\");if(c||\\\"L\\\"===u)e.text=G(Math.pow(10,l),t,a,n);else if(i(o)||\\\"D\\\"===u&&s.mod(l+.01,1)<.1){var h=Math.round(l),f=Math.abs(h),p=t.exponentformat;\\\"power\\\"===p||q(p)&&H(h)?(e.text=0===h?1:1===h?\\\"10\\\":\\\"10<sup>\\\"+(h>1?\\\"\\\":_)+f+\\\"</sup>\\\",e.fontSize*=1.25):(\\\"e\\\"===p||\\\"E\\\"===p)&&f>2?e.text=\\\"1\\\"+p+(h>0?\\\"+\\\":_)+f:(e.text=G(Math.pow(10,l),t,\\\"\\\",\\\"fakehover\\\"),\\\"D1\\\"===o&&\\\"y\\\"===t._id.charAt(0)&&(e.dy-=e.fontSize/6))}else{if(\\\"D\\\"!==u)throw\\\"unrecognized dtick \\\"+String(o);e.text=String(Math.round(Math.pow(10,s.mod(l,1)))),e.fontSize*=.75}if(\\\"D1\\\"===t.dtick){var d=String(e.text).charAt(0);\\\"0\\\"!==d&&\\\"1\\\"!==d||(\\\"y\\\"===t._id.charAt(0)?e.dx-=e.fontSize/4:(e.dy+=e.fontSize/2,e.dx+=(t.range[1]>t.range[0]?1:-1)*e.fontSize*(l<0?.5:.25)))}}(t,o,0,c,g):\\\"category\\\"===u?function(t,e){var r=t._categories[Math.round(e.x)];void 0===r&&(r=\\\"\\\");e.text=String(r)}(t,o):\\\"multicategory\\\"===u?function(t,e,r){var n=Math.round(e.x),i=t._categories[n]||[],a=void 0===i[1]?\\\"\\\":String(i[1]),o=void 0===i[0]?\\\"\\\":String(i[0]);r?e.text=o+\\\" - \\\"+a:(e.text=a,e.text2=o)}(t,o,r):rt(t)?function(t,e,r,n,i){if(\\\"radians\\\"!==t.thetaunit||r)e.text=G(e.x,t,i,n);else{var a=e.x/180;if(0===a)e.text=\\\"0\\\";else{var o=function(t){function e(t,e){return Math.abs(t-e)<=1e-6}var r=function(t){var r=1;for(;!e(Math.round(t*r)/r,t);)r*=10;return r}(t),n=t*r,i=Math.abs(function t(r,n){return e(n,0)?r:t(n,r%n)}(n,r));return[Math.round(n/i),Math.round(r/i)]}(a);if(o[1]>=100)e.text=G(s.deg2rad(e.x),t,i,n);else{var l=e.x<0;1===o[1]?1===o[0]?e.text=\\\"\\\\u03c0\\\":e.text=o[0]+\\\"\\\\u03c0\\\":e.text=[\\\"<sup>\\\",o[0],\\\"</sup>\\\",\\\"\\\\u2044\\\",\\\"<sub>\\\",o[1],\\\"</sub>\\\",\\\"\\\\u03c0\\\"].join(\\\"\\\"),l&&(e.text=_+e.text)}}}}(t,o,r,c,g):function(t,e,r,n,i){\\\"never\\\"===i?i=\\\"\\\":\\\"all\\\"===t.showexponent&&Math.abs(e.x/t.dtick)<1e-6&&(i=\\\"hide\\\");e.text=G(e.x,t,i,n)}(t,o,0,c,g),n||(t.tickprefix&&!d(t.showtickprefix)&&(o.text=t.tickprefix+o.text),t.ticksuffix&&!d(t.showticksuffix)&&(o.text+=t.ticksuffix)),\\\"boundaries\\\"===t.tickson||t.showdividers){var v=function(e){var r=t.l2p(e);return r>=0&&r<=t._length?e:null};o.xbnd=[v(o.x-.5),v(o.x+t.dtick-.5)]}return o},A.hoverLabelText=function(t,e,r){if(r!==w&&r!==e)return A.hoverLabelText(t,e)+\\\" - \\\"+A.hoverLabelText(t,r);var n=\\\"log\\\"===t.type&&e<=0,i=A.tickText(t,t.c2l(n?-e:e),\\\"hover\\\").text;return n?0===e?\\\"0\\\":_+i:i};var V=[\\\"f\\\",\\\"p\\\",\\\"n\\\",\\\"\\\\u03bc\\\",\\\"m\\\",\\\"\\\",\\\"k\\\",\\\"M\\\",\\\"G\\\",\\\"T\\\"];function q(t){return\\\"SI\\\"===t||\\\"B\\\"===t}function H(t){return t>14||t<-15}function G(t,e,r,n){var a=t<0,o=e._tickround,l=r||e.exponentformat||\\\"B\\\",c=e._tickexponent,u=A.getTickFormat(e),h=e.separatethousands;if(n){var f={exponentformat:l,dtick:\\\"none\\\"===e.showexponent?e.dtick:i(t)&&Math.abs(t)||1,range:\\\"none\\\"===e.showexponent?e.range.map(e.r2d):[0,t||1]};j(f),o=(Number(f._tickround)||0)+4,c=f._tickexponent,e.hoverformat&&(u=e.hoverformat)}if(u)return e._numFormat(u)(t).replace(/-/g,_);var p,d=Math.pow(10,-o)/2;if(\\\"none\\\"===l&&(c=0),(t=Math.abs(t))<d)t=\\\"0\\\",a=!1;else{if(t+=d,c&&(t*=Math.pow(10,-c),o+=c),0===o)t=String(Math.floor(t));else if(o<0){t=(t=String(Math.round(t))).substr(0,t.length+o);for(var g=o;g<0;g++)t+=\\\"0\\\"}else{var v=(t=String(t)).indexOf(\\\".\\\")+1;v&&(t=t.substr(0,v+o).replace(/\\\\.?0+$/,\\\"\\\"))}t=s.numSeparate(t,e._separators,h)}c&&\\\"hide\\\"!==l&&(q(l)&&H(c)&&(l=\\\"power\\\"),p=c<0?_+-c:\\\"power\\\"!==l?\\\"+\\\"+c:String(c),\\\"e\\\"===l||\\\"E\\\"===l?t+=l+p:\\\"power\\\"===l?t+=\\\"\\\\xd710<sup>\\\"+p+\\\"</sup>\\\":\\\"B\\\"===l&&9===c?t+=\\\"B\\\":q(l)&&(t+=V[c/3+5]));return a?_+t:t}function Y(t,e){var r=t._id.charAt(0),n=t._tickAngles[e]||0,i=s.deg2rad(n),a=Math.sin(i),o=Math.cos(i),l=0,c=0;return t._selections[e].each(function(){var t=J(this),e=h.bBox(t.node()),r=e.width,n=e.height;l=Math.max(l,o*r,a*n),c=Math.max(c,a*r,o*n)}),{x:c,y:l}[r]}function W(t){return[t.text,t.x,t.axInfo,t.font,t.fontSize,t.fontColor].join(\\\"_\\\")}function X(t,e){var r,n=t._fullLayout._size,i=e._id.charAt(0),a=e.side;return\\\"free\\\"!==e.anchor?r=S.getFromId(t,e.anchor):\\\"x\\\"===i?r={_offset:n.t+(1-(e.position||0))*n.h,_length:0}:\\\"y\\\"===i&&(r={_offset:n.l+(e.position||0)*n.w,_length:0}),\\\"top\\\"===a||\\\"left\\\"===a?r._offset:\\\"bottom\\\"===a||\\\"right\\\"===a?r._offset+r._length:void 0}function Z(t,e){var r=t.l2p(e);return r>1&&r<t._length-1}function J(t){var e=n.select(t),r=e.select(\\\".text-math-group\\\");return r.empty()?e.select(\\\"text\\\"):r}function K(t){return t._id+\\\".automargin\\\"}function $(t){return t._id+\\\".rangeslider\\\"}function Q(t,e){for(var r=0;r<e.length;r++)-1===t.indexOf(e[r])&&t.push(e[r])}function tt(t,e,r){var n,i,a=[],o=[],l=t.layout;for(n=0;n<e.length;n++)a.push(A.getFromId(t,e[n]));for(n=0;n<r.length;n++)o.push(A.getFromId(t,r[n]));var c=Object.keys(f),u=[\\\"anchor\\\",\\\"domain\\\",\\\"overlaying\\\",\\\"position\\\",\\\"side\\\",\\\"tickangle\\\",\\\"editType\\\"],h=[\\\"linear\\\",\\\"log\\\"];for(n=0;n<c.length;n++){var p=c[n],d=a[0][p],g=o[0][p],v=!0,m=!1,y=!1;if(\\\"_\\\"!==p.charAt(0)&&\\\"function\\\"!=typeof d&&-1===u.indexOf(p)){for(i=1;i<a.length&&v;i++){var x=a[i][p];\\\"type\\\"===p&&-1!==h.indexOf(d)&&-1!==h.indexOf(x)&&d!==x?m=!0:x!==d&&(v=!1)}for(i=1;i<o.length&&v;i++){var b=o[i][p];\\\"type\\\"===p&&-1!==h.indexOf(g)&&-1!==h.indexOf(b)&&g!==b?y=!0:o[i][p]!==g&&(v=!1)}v&&(m&&(l[a[0]._name].type=\\\"linear\\\"),y&&(l[o[0]._name].type=\\\"linear\\\"),et(l,p,a,o,t._fullLayout._dfltTitle))}}for(n=0;n<t._fullLayout.annotations.length;n++){var _=t._fullLayout.annotations[n];-1!==e.indexOf(_.xref)&&-1!==r.indexOf(_.yref)&&s.swapAttrs(l.annotations[n],[\\\"?\\\"])}}function et(t,e,r,n,i){var a,o=s.nestedProperty,l=o(t[r[0]._name],e).get(),c=o(t[n[0]._name],e).get();for(\\\"title\\\"===e&&(l&&l.text===i.x&&(l.text=i.y),c&&c.text===i.y&&(c.text=i.x)),a=0;a<r.length;a++)o(t,r[a]._name+\\\".\\\"+e).set(c);for(a=0;a<n.length;a++)o(t,n[a]._name+\\\".\\\"+e).set(l)}function rt(t){return\\\"angularaxis\\\"===t._id}A.getTickFormat=function(t){var e,r,n,i,a,o,s,l;function c(t){return\\\"string\\\"!=typeof t?t:Number(t.replace(\\\"M\\\",\\\"\\\"))*v}function u(t,e){var r=[\\\"L\\\",\\\"D\\\"];if(typeof t==typeof e){if(\\\"number\\\"==typeof t)return t-e;var n=r.indexOf(t.charAt(0)),i=r.indexOf(e.charAt(0));return n===i?Number(t.replace(/(L|D)/g,\\\"\\\"))-Number(e.replace(/(L|D)/g,\\\"\\\")):n-i}return\\\"number\\\"==typeof t?1:-1}function h(t,e){var r=null===e[0],n=null===e[1],i=u(t,e[0])>=0,a=u(t,e[1])<=0;return(r||i)&&(n||a)}if(t.tickformatstops&&t.tickformatstops.length>0)switch(t.type){case\\\"date\\\":case\\\"linear\\\":for(e=0;e<t.tickformatstops.length;e++)if((n=t.tickformatstops[e]).enabled&&(i=t.dtick,a=n.dtickrange,o=void 0,void 0,void 0,o=c||function(t){return t},s=a[0],l=a[1],(!s&&\\\"number\\\"!=typeof s||o(s)<=o(i))&&(!l&&\\\"number\\\"!=typeof l||o(l)>=o(i)))){r=n;break}break;case\\\"log\\\":for(e=0;e<t.tickformatstops.length;e++)if((n=t.tickformatstops[e]).enabled&&h(t.dtick,n.dtickrange)){r=n;break}}return r?r.value:t.tickformat},A.getSubplots=function(t,e){var r=t._fullLayout._subplots,n=r.cartesian.concat(r.gl2d||[]),i=e?A.findSubplotsWithAxis(n,e):n;return i.sort(function(t,e){var r=t.substr(1).split(\\\"y\\\"),n=e.substr(1).split(\\\"y\\\");return r[0]===n[0]?+r[1]-+n[1]:+r[0]-+n[0]}),i},A.findSubplotsWithAxis=function(t,e){for(var r=new RegExp(\\\"x\\\"===e._id.charAt(0)?\\\"^\\\"+e._id+\\\"y\\\":e._id+\\\"$\\\"),n=[],i=0;i<t.length;i++){var a=t[i];r.test(a)&&n.push(a)}return n},A.makeClipPaths=function(t){var e=t._fullLayout;if(!e._hasOnlyLargeSploms){var r,i,a={_offset:0,_length:e.width,_id:\\\"\\\"},o={_offset:0,_length:e.height,_id:\\\"\\\"},s=A.list(t,\\\"x\\\",!0),l=A.list(t,\\\"y\\\",!0),c=[];for(r=0;r<s.length;r++)for(c.push({x:s[r],y:o}),i=0;i<l.length;i++)0===r&&c.push({x:a,y:l[i]}),c.push({x:s[r],y:l[i]});var u=e._clips.selectAll(\\\".axesclip\\\").data(c,function(t){return t.x._id+t.y._id});u.enter().append(\\\"clipPath\\\").classed(\\\"axesclip\\\",!0).attr(\\\"id\\\",function(t){return\\\"clip\\\"+e._uid+t.x._id+t.y._id}).append(\\\"rect\\\"),u.exit().remove(),u.each(function(t){n.select(this).select(\\\"rect\\\").attr({x:t.x._offset||0,y:t.y._offset||0,width:t.x._length||1,height:t.y._length||1})})}},A.draw=function(t,e,r){var n=t._fullLayout;\\\"redraw\\\"===e&&n._paper.selectAll(\\\"g.subplot\\\").each(function(t){var e=t[0],r=n._plots[e],i=r.xaxis,a=r.yaxis;r.xaxislayer.selectAll(\\\".\\\"+i._id+\\\"tick\\\").remove(),r.yaxislayer.selectAll(\\\".\\\"+a._id+\\\"tick\\\").remove(),r.xaxislayer.selectAll(\\\".\\\"+i._id+\\\"tick2\\\").remove(),r.yaxislayer.selectAll(\\\".\\\"+a._id+\\\"tick2\\\").remove(),r.xaxislayer.selectAll(\\\".\\\"+i._id+\\\"divider\\\").remove(),r.yaxislayer.selectAll(\\\".\\\"+a._id+\\\"divider\\\").remove(),r.gridlayer&&r.gridlayer.selectAll(\\\"path\\\").remove(),r.zerolinelayer&&r.zerolinelayer.selectAll(\\\"path\\\").remove(),n._infolayer.select(\\\".g-\\\"+i._id+\\\"title\\\").remove(),n._infolayer.select(\\\".g-\\\"+a._id+\\\"title\\\").remove()});var i=e&&\\\"redraw\\\"!==e?e:A.listIds(t);return s.syncOrAsync(i.map(function(e){return function(){if(e){var n=A.getFromId(t,e),i=A.drawOne(t,n,r);return n._r=n.range.slice(),n._rl=s.simpleMap(n._r,n.r2l),i}}}))},A.drawOne=function(t,e,r){var n,i,l;r=r||{},e.setScale();var f=t._fullLayout,p=e._id,d=p.charAt(0),g=A.counterLetter(p),v=e._mainSubplot,m=e._mainLinePosition,y=e._mainMirrorPosition,x=f._plots[v][d+\\\"axislayer\\\"],b=e._subplotsWith,_=e._vals=A.calcTicks(e),w=[e.mirror,m,y].join(\\\"_\\\");for(n=0;n<_.length;n++)_[n].axInfo=w;if(e.visible){e._selections={},e._tickAngles={};var k,M,S=A.makeTransFn(e);if(\\\"boundaries\\\"===e.tickson){var E=function(t,e){var r,n=[],i=function(t,e){var r=t.xbnd[e];null!==r&&n.push(s.extendFlat({},t,{x:r}))};if(e.length){for(r=0;r<e.length;r++)i(e[r],0);i(e[r-1],1)}return n}(0,_);M=A.clipEnds(e,E),k=\\\"inside\\\"===e.ticks?M:E}else M=A.clipEnds(e,_),k=\\\"inside\\\"===e.ticks?M:_;var C=e._gridVals=M,L=function(t,e){var r,n,i=[],a=function(t,e){var r=t.xbnd[e];null!==r&&i.push(s.extendFlat({},t,{x:r}))};if(t.showdividers&&e.length){for(r=0;r<e.length;r++){var o=e[r];o.text2!==n&&a(o,0),n=o.text2}a(e[r-1],1)}return i}(e,_);if(!f._hasOnlyLargeSploms){var P={};for(n=0;n<b.length;n++){i=b[n];var O=(l=f._plots[i])[g+\\\"axis\\\"],z=O._mainAxis._id;if(!P[z]){P[z]=1;var I=\\\"x\\\"===d?\\\"M0,\\\"+O._offset+\\\"v\\\"+O._length:\\\"M\\\"+O._offset+\\\",0h\\\"+O._length;A.drawGrid(t,e,{vals:C,counterAxis:O,layer:l.gridlayer.select(\\\".\\\"+p),path:I,transFn:S}),A.drawZeroLine(t,e,{counterAxis:O,layer:l.zerolinelayer,path:I,transFn:S})}}}var D=A.getTickSigns(e),R=[];if(e.ticks){var F,B,N,j=A.makeTickPath(e,m,D[2]);if(e._anchorAxis&&e.mirror&&!0!==e.mirror?(F=A.makeTickPath(e,y,D[3]),B=j+F):(F=\\\"\\\",B=j),e.showdividers&&\\\"outside\\\"===e.ticks&&\\\"boundaries\\\"===e.tickson){var V={};for(n=0;n<L.length;n++)V[L[n].x]=1;N=function(t){return V[t.x]?F:B}}else N=B;A.drawTicks(t,e,{vals:k,layer:x,path:N,transFn:S}),\\\"allticks\\\"===e.mirror&&(R=Object.keys(e._linepositions||{}))}for(n=0;n<R.length;n++){i=R[n],l=f._plots[i];var q=e._linepositions[i]||[],H=A.makeTickPath(e,q[0],D[0])+A.makeTickPath(e,q[1],D[1]);A.drawTicks(t,e,{vals:k,layer:l[d+\\\"axislayer\\\"],path:H,transFn:S})}var G=[];if(G.push(function(){return A.drawLabels(t,e,{vals:_,layer:x,transFn:S,labelFns:A.makeLabelFns(e,m)})}),\\\"multicategory\\\"===e.type){var Z=0,J={x:2,y:10}[d],Q=D[2]*(\\\"inside\\\"===e.ticks?-1:1);G.push(function(){return Z+=Y(e,p+\\\"tick\\\")+J,Z+=e._tickAngles[p+\\\"tick\\\"]?e.tickfont.size*T:0,A.drawLabels(t,e,{vals:function(t,e){for(var r=[],n={},i=0;i<e.length;i++){var a=e[i];n[a.text2]?n[a.text2].push(a.x):n[a.text2]=[a.x]}for(var o in n)r.push(U(t,s.interp(n[o],.5),o));return r}(e,_),layer:x,cls:p+\\\"tick2\\\",repositionOnUpdate:!0,secondary:!0,transFn:S,labelFns:A.makeLabelFns(e,m+Z*Q)})}),G.push(function(){return Z+=Y(e,p+\\\"tick2\\\"),e._labelLength=Z,function(t,e,r){var n=e._id+\\\"divider\\\",i=r.vals,a=r.layer.selectAll(\\\"path.\\\"+n).data(i,W);a.exit().remove(),a.enter().insert(\\\"path\\\",\\\":first-child\\\").classed(n,1).classed(\\\"crisp\\\",1).call(u.stroke,e.dividercolor).style(\\\"stroke-width\\\",h.crispRound(t,e.dividerwidth,1)+\\\"px\\\"),a.attr(\\\"transform\\\",r.transFn).attr(\\\"d\\\",r.path)}(t,e,{vals:L,layer:x,path:A.makeTickPath(e,m,Q,Z),transFn:S})})}var tt=o.getComponentMethod(\\\"rangeslider\\\",\\\"isVisible\\\")(e);return G.push(function(){if(e.showticklabels){var r=t.getBoundingClientRect(),n=x.node().getBoundingClientRect();e._boundingBox={width:n.width,height:n.height,left:n.left-r.left,right:n.right-r.left,top:n.top-r.top,bottom:n.bottom-r.top}}else{var i,a=f._size;\\\"x\\\"===d?(i=\\\"free\\\"===e.anchor?a.t+a.h*(1-e.position):a.t+a.h*(1-e._anchorAxis.domain[{bottom:0,top:1}[e.side]]),e._boundingBox={top:i,bottom:i,left:e._offset,right:e._offset+e._length,width:e._length,height:0}):(i=\\\"free\\\"===e.anchor?a.l+a.w*e.position:a.l+a.w*e._anchorAxis.domain[{left:0,right:1}[e.side]],e._boundingBox={left:i,right:i,bottom:e._offset+e._length,top:e._offset,height:e._length,width:0})}if(b){for(var o=e._counterSpan=[1/0,-1/0],s=0;s<b.length;s++){var l=f._plots[b[s]][\\\"x\\\"===d?\\\"yaxis\\\":\\\"xaxis\\\"];et(o,[l._offset,l._offset+l._length])}\\\"free\\\"===e.anchor&&et(o,\\\"x\\\"===d?[e._boundingBox.bottom,e._boundingBox.top]:[e._boundingBox.right,e._boundingBox.left])}},function(){var r,n,i=e.side.charAt(0);if(tt&&(n=o.getComponentMethod(\\\"rangeslider\\\",\\\"autoMarginOpts\\\")(t,e)),a.autoMargin(t,$(e),n),e.automargin&&(!tt||\\\"b\\\"!==i)){r={x:0,y:0,r:0,l:0,t:0,b:0};var s,l,c=e._boundingBox,u=X(t,e);switch(d+i){case\\\"xb\\\":s=0,l=c.top-u,r[i]=c.height;break;case\\\"xt\\\":s=1,l=u-c.bottom,r[i]=c.height;break;case\\\"yl\\\":s=0,l=u-c.right,r[i]=c.width;break;case\\\"yr\\\":s=1,l=c.left-u,r[i]=c.width}if(r[g]=\\\"free\\\"===e.anchor?e.position:e._anchorAxis.domain[s],r[i]>0&&(r[i]+=l),e.title.text!==f._dfltTitle[d]&&(r[i]+=e.title.font.size),\\\"x\\\"===d&&c.width>0){var h=c.right-(e._offset+e._length);h>0&&(r.x=1,r.r=h);var p=e._offset-c.left;p>0&&(r.x=0,r.l=p)}else if(\\\"y\\\"===d&&c.height>0){var v=c.bottom-(e._offset+e._length);v>0&&(r.y=0,r.b=v);var m=e._offset-c.top;m>0&&(r.y=1,r.t=m)}}a.autoMargin(t,K(e),r)}),r.skipTitle||tt&&e._boundingBox&&\\\"bottom\\\"===e.side||G.push(function(){return function(t,e){var r,n=t._fullLayout,i=e._id,a=i.charAt(0),o=e.title.font.size;if(\\\"multicategory\\\"===e.type)r=e._labelLength;else{r=10+1.5*o+(e.linewidth?e.linewidth-1:0)}var s,l,u,f,p=X(t,e);\\\"x\\\"===a?(l=e._offset+e._length/2,u=\\\"top\\\"===e.side?-r-o*(e.showticklabels?1:0):r+o*(e.showticklabels?1.5:.5),u+=p):(u=e._offset+e._length/2,l=\\\"right\\\"===e.side?r+o*(e.showticklabels?1:.5):-r-o*(e.showticklabels?.5:0),l+=p,s={rotate:\\\"-90\\\",offset:0});if(\\\"multicategory\\\"!==e.type){var d=e._selections[e._id+\\\"tick\\\"];if(f={selection:d,side:e.side},d&&d.node()&&d.node().parentNode){var g=h.getTranslate(d.node().parentNode);f.offsetLeft=g.x,f.offsetTop=g.y}}return c.draw(t,i+\\\"title\\\",{propContainer:e,propName:e._name+\\\".title.text\\\",placeholder:n._dfltTitle[a],avoid:f,transform:s,attributes:{x:l,y:u,\\\"text-anchor\\\":\\\"middle\\\"}})}(t,e)}),s.syncOrAsync(G)}function et(t,e){t[0]=Math.min(t[0],e[0]),t[1]=Math.max(t[1],e[1])}},A.getTickSigns=function(t){var e=t._id.charAt(0),r={x:\\\"top\\\",y:\\\"right\\\"}[e],n=t.side===r?1:-1,i=[-1,1,n,-n];return\\\"inside\\\"!==t.ticks==(\\\"x\\\"===e)&&(i=i.map(function(t){return-t})),i},A.makeTransFn=function(t){var e=t._id.charAt(0),r=t._offset;return\\\"x\\\"===e?function(e){return\\\"translate(\\\"+(r+t.l2p(e.x))+\\\",0)\\\"}:function(e){return\\\"translate(0,\\\"+(r+t.l2p(e.x))+\\\")\\\"}},A.makeTickPath=function(t,e,r,n){n=void 0!==n?n:t.ticklen;var i=t._id.charAt(0),a=(t.linewidth||1)/2;return\\\"x\\\"===i?\\\"M0,\\\"+(e+a*r)+\\\"v\\\"+n*r:\\\"M\\\"+(e+a*r)+\\\",0h\\\"+n*r},A.makeLabelFns=function(t,e,r){var n=t._id.charAt(0),a=\\\"boundaries\\\"!==t.tickson&&\\\"outside\\\"===t.ticks,o=0,l=0;if(a&&(o+=t.ticklen),r&&\\\"outside\\\"===t.ticks){var c=s.deg2rad(r);o=t.ticklen*Math.cos(c)+1,l=t.ticklen*Math.sin(c)}t.showticklabels&&(a||t.showline)&&(o+=.2*t.tickfont.size);var u,h,f,p,d={labelStandoff:o+=(t.linewidth||1)/2,labelShift:l};return\\\"x\\\"===n?(p=\\\"bottom\\\"===t.side?1:-1,u=l*p,h=e+o*p,f=\\\"bottom\\\"===t.side?1:-.2,d.xFn=function(t){return t.dx+u},d.yFn=function(t){return t.dy+h+t.fontSize*f},d.anchorFn=function(t,e){return i(e)&&0!==e&&180!==e?e*p<0?\\\"end\\\":\\\"start\\\":\\\"middle\\\"},d.heightFn=function(e,r,n){return r<-60||r>60?-.5*n:\\\"top\\\"===t.side?-n:0}):\\\"y\\\"===n&&(p=\\\"right\\\"===t.side?1:-1,u=o,h=-l*p,f=90===Math.abs(t.tickangle)?.5:0,d.xFn=function(t){return t.dx+e+(u+t.fontSize*f)*p},d.yFn=function(t){return t.dy+h+t.fontSize*k},d.anchorFn=function(e,r){return i(r)&&90===Math.abs(r)?\\\"middle\\\":\\\"right\\\"===t.side?\\\"start\\\":\\\"end\\\"},d.heightFn=function(e,r,n){return(r*=\\\"left\\\"===t.side?1:-1)<-30?-n:r<30?-.5*n:0}),d},A.drawTicks=function(t,e,r){r=r||{};var n=e._id+\\\"tick\\\",i=r.layer.selectAll(\\\"path.\\\"+n).data(e.ticks?r.vals:[],W);i.exit().remove(),i.enter().append(\\\"path\\\").classed(n,1).classed(\\\"ticks\\\",1).classed(\\\"crisp\\\",!1!==r.crisp).call(u.stroke,e.tickcolor).style(\\\"stroke-width\\\",h.crispRound(t,e.tickwidth,1)+\\\"px\\\").attr(\\\"d\\\",r.path),i.attr(\\\"transform\\\",r.transFn)},A.drawGrid=function(t,e,r){r=r||{};var n=e._id+\\\"grid\\\",i=r.vals,a=r.counterAxis;if(!1===e.showgrid)i=[];else if(a&&A.shouldShowZeroLine(t,e,a))for(var o=\\\"array\\\"===e.tickmode,s=0;s<i.length;s++){var l=i[s].x;if(o?!l:Math.abs(l)<e.dtick/100){if(i=i.slice(0,s).concat(i.slice(s+1)),!o)break;s--}}var c=r.layer.selectAll(\\\"path.\\\"+n).data(i,W);c.exit().remove(),c.enter().append(\\\"path\\\").classed(n,1).classed(\\\"crisp\\\",!1!==r.crisp),e._gw=h.crispRound(t,e.gridwidth,1),c.attr(\\\"transform\\\",r.transFn).attr(\\\"d\\\",r.path).call(u.stroke,e.gridcolor||\\\"#ddd\\\").style(\\\"stroke-width\\\",e._gw+\\\"px\\\"),\\\"function\\\"==typeof r.path&&c.attr(\\\"d\\\",r.path)},A.drawZeroLine=function(t,e,r){r=r||r;var n=e._id+\\\"zl\\\",i=A.shouldShowZeroLine(t,e,r.counterAxis),a=r.layer.selectAll(\\\"path.\\\"+n).data(i?[{x:0,id:e._id}]:[]);a.exit().remove(),a.enter().append(\\\"path\\\").classed(n,1).classed(\\\"zl\\\",1).classed(\\\"crisp\\\",!1!==r.crisp).each(function(){r.layer.selectAll(\\\"path\\\").sort(function(t,e){return S.idSort(t.id,e.id)})}),a.attr(\\\"transform\\\",r.transFn).attr(\\\"d\\\",r.path).call(u.stroke,e.zerolinecolor||u.defaultLine).style(\\\"stroke-width\\\",h.crispRound(t,e.zerolinewidth,e._gw||1)+\\\"px\\\")},A.drawLabels=function(t,e,r){r=r||{};var a=e._id,o=a.charAt(0),c=r.cls||a+\\\"tick\\\",u=r.vals,f=r.labelFns,p=r.secondary?0:e.tickangle,d=(e._tickAngles||{})[c],g=r.layer.selectAll(\\\"g.\\\"+c).data(e.showticklabels?u:[],W),v=[];function m(t,e){t.each(function(t){var a=n.select(this),o=a.select(\\\".text-math-group\\\"),s=f.anchorFn(t,e),c=r.transFn.call(a.node(),t)+(i(e)&&0!=+e?\\\" rotate(\\\"+e+\\\",\\\"+f.xFn(t)+\\\",\\\"+(f.yFn(t)-t.fontSize/2)+\\\")\\\":\\\"\\\"),u=l.lineCount(a),p=T*t.fontSize,d=f.heightFn(t,i(e)?+e:0,(u-1)*p);if(d&&(c+=\\\" translate(0, \\\"+d+\\\")\\\"),o.empty())a.select(\\\"text\\\").attr({transform:c,\\\"text-anchor\\\":s});else{var g=h.bBox(o.node()).width*{end:-.5,start:.5}[s];o.attr(\\\"transform\\\",c+(g?\\\"translate(\\\"+g+\\\",0)\\\":\\\"\\\"))}})}g.enter().append(\\\"g\\\").classed(c,1).append(\\\"text\\\").attr(\\\"text-anchor\\\",\\\"middle\\\").each(function(e){var r=n.select(this),i=t._promises.length;r.call(l.positionText,f.xFn(e),f.yFn(e)).call(h.font,e.font,e.fontSize,e.fontColor).text(e.text).call(l.convertToTspans,t),t._promises[i]?v.push(t._promises.pop().then(function(){m(r,p)})):m(r,p)}),g.exit().remove(),r.repositionOnUpdate&&g.each(function(t){n.select(this).select(\\\"text\\\").call(l.positionText,f.xFn(t),f.yFn(t))}),m(g,d||p),e._selections&&(e._selections[c]=g);var y=s.syncOrAsync([function(){return v.length&&Promise.all(v)},function(){m(g,p);var t=null;if(u.length&&\\\"x\\\"===o&&!i(p)&&(\\\"log\\\"!==e.type||\\\"D\\\"!==String(e.dtick).charAt(0))){t=0;var n,a=0,l=[];if(g.each(function(t){a=Math.max(a,t.fontSize);var r=e.l2p(t.x),n=J(this),i=h.bBox(n.node());l.push({top:0,bottom:10,height:10,left:r-i.width/2,right:r+i.width/2+2,width:i.width+2})}),\\\"boundaries\\\"!==e.tickson&&!e.showdividers||r.secondary){var f=u.length,d=Math.abs((u[f-1].x-u[0].x)*e._m)/(f-1)<2.5*a||\\\"multicategory\\\"===e.type;for(n=0;n<l.length-1;n++)if(s.bBoxIntersect(l[n],l[n+1])){t=d?90:30;break}}else{var v=2;for(e.ticks&&(v+=e.tickwidth/2),n=0;n<l.length;n++){var y=u[n].xbnd,x=l[n];if(null!==y[0]&&x.left-e.l2p(y[0])<v||null!==y[1]&&e.l2p(y[1])-x.right<v){t=90;break}}}t&&m(g,t)}e._tickAngles&&(e._tickAngles[c]=null===t?i(p)?p:0:t)}]);return y&&y.then&&t._promises.push(y),y},A.shouldShowZeroLine=function(t,e,r){var n=s.simpleMap(e.range,e.r2l);return n[0]*n[1]<=0&&e.zeroline&&(\\\"linear\\\"===e.type||\\\"-\\\"===e.type)&&e._gridVals.length&&(Z(e,0)||!function(t,e,r,n){var i=r._mainAxis;if(!i)return;var a=t._fullLayout,o=e._id.charAt(0),s=A.counterLetter(e._id),l=e._offset+(Math.abs(n[0])<Math.abs(n[1])==(\\\"x\\\"===o)?0:e._length);function c(t){if(!t.showline||!t.linewidth)return!1;var r=Math.max((t.linewidth+e.zerolinewidth)/2,1);function n(t){return\\\"number\\\"==typeof t&&Math.abs(t-l)<r}if(n(t._mainLinePosition)||n(t._mainMirrorPosition))return!0;var i=t._linepositions||{};for(var a in i)if(n(i[a][0])||n(i[a][1]))return!0}var u=a._plots[r._mainSubplot];if(!(u.mainplotinfo||u).overlays.length)return c(r);for(var h=A.list(t,s),f=0;f<h.length;f++){var p=h[f];if(p._mainAxis===i&&c(p))return!0}}(t,e,r,n)||function(t,e){for(var r=t._fullData,n=e._mainSubplot,i=e._id.charAt(0),a=0;a<r.length;a++){var s=r[a];if(!0===s.visible&&s.xaxis+s.yaxis===n){if(o.traceIs(s,\\\"bar-like\\\")&&s.orientation==={x:\\\"h\\\",y:\\\"v\\\"}[i])return!0;if(s.fill&&s.fill.charAt(s.fill.length-1)===i)return!0}}return!1}(t,e))},A.clipEnds=function(t,e){return e.filter(function(e){return Z(t,e.x)})},A.allowAutoMargin=function(t){for(var e=A.list(t,\\\"\\\",!0),r=0;r<e.length;r++){var n=e[r];n.automargin&&a.allowAutoMargin(t,K(n)),o.getComponentMethod(\\\"rangeslider\\\",\\\"isVisible\\\")(n)&&a.allowAutoMargin(t,$(n))}},A.swap=function(t,e){for(var r=function(t,e){var r,n,i=[];for(r=0;r<e.length;r++){var a=[],o=t._fullData[e[r]].xaxis,s=t._fullData[e[r]].yaxis;if(o&&s){for(n=0;n<i.length;n++)-1===i[n].x.indexOf(o)&&-1===i[n].y.indexOf(s)||a.push(n);if(a.length){var l,c=i[a[0]];if(a.length>1)for(n=1;n<a.length;n++)l=i[a[n]],Q(c.x,l.x),Q(c.y,l.y);Q(c.x,[o]),Q(c.y,[s])}else i.push({x:[o],y:[s]})}}return i}(t,e),n=0;n<r.length;n++)tt(t,r[n].x,r[n].y)}},{\\\"../../components/color\\\":593,\\\"../../components/drawing\\\":614,\\\"../../components/titles\\\":681,\\\"../../constants/alignment\\\":688,\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"../../lib/svg_text_utils\\\":743,\\\"../../plots/plots\\\":828,\\\"../../registry\\\":847,\\\"./autorange\\\":766,\\\"./axis_autotype\\\":768,\\\"./axis_ids\\\":770,\\\"./clean_ticks\\\":772,\\\"./layout_attributes\\\":779,\\\"./set_convert\\\":785,d3:163,\\\"fast-isnumeric\\\":225}],768:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../constants/numerical\\\").BADNUM;e.exports=function(t,e,r){return!(r=r||{}).noMultiCategory&&(o=t,i.isArrayOrTypedArray(o[0])&&i.isArrayOrTypedArray(o[1]))?\\\"multicategory\\\":function(t,e){for(var r=Math.max(1,(t.length-1)/1e3),a=0,o=0,s={},l=0;l<t.length;l+=r){var c=t[Math.round(l)],u=String(c);s[u]||(s[u]=1,i.isDateTime(c,e)&&(a+=1),n(c)&&(o+=1))}return a>2*o}(t,e)?\\\"date\\\":function(t){for(var e=Math.max(1,(t.length-1)/1e3),r=0,n=0,o={},s=0;s<t.length;s+=e){var l=t[Math.round(s)],c=String(l);o[c]||(o[c]=1,\\\"boolean\\\"==typeof l?n++:i.cleanNumber(l)!==a?r++:\\\"string\\\"==typeof l&&n++)}return n>2*r}(t)?\\\"category\\\":function(t){if(!t)return!1;for(var e=0;e<t.length;e++)if(n(t[e]))return!0;return!1}(t)?\\\"linear\\\":\\\"-\\\";var o}},{\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"fast-isnumeric\\\":225}],769:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"./layout_attributes\\\"),o=t(\\\"./tick_value_defaults\\\"),s=t(\\\"./tick_mark_defaults\\\"),l=t(\\\"./tick_label_defaults\\\"),c=t(\\\"./category_order_defaults\\\"),u=t(\\\"./line_grid_defaults\\\"),h=t(\\\"./set_convert\\\");e.exports=function(t,e,r,f,p){var d=f.letter,g=f.font||{},v=f.splomStash||{},m=r(\\\"visible\\\",!f.visibleDflt),y=e.type;\\\"date\\\"===y&&n.getComponentMethod(\\\"calendars\\\",\\\"handleDefaults\\\")(t,e,\\\"calendar\\\",f.calendar);h(e,p);var x=!e.isValidRange(t.range);x&&f.reverseDflt&&(x=\\\"reversed\\\"),!r(\\\"autorange\\\",x)||\\\"linear\\\"!==y&&\\\"-\\\"!==y||r(\\\"rangemode\\\"),r(\\\"range\\\"),e.cleanRange(),c(t,e,r,f),\\\"category\\\"===y||f.noHover||r(\\\"hoverformat\\\");var b=r(\\\"color\\\"),_=b!==a.color.dflt?b:g.color,w=v.label||p._dfltTitle[d];if(l(t,e,r,y,f,{pass:1}),!m)return e;r(\\\"title.text\\\",w),i.coerceFont(r,\\\"title.font\\\",{family:g.family,size:Math.round(1.2*g.size),color:_}),o(t,e,r,y),l(t,e,r,y,f,{pass:2}),s(t,e,r,f),u(t,e,r,{dfltColor:b,bgColor:f.bgColor,showGrid:f.showGrid,attributes:a}),(e.showline||e.ticks)&&r(\\\"mirror\\\"),f.automargin&&r(\\\"automargin\\\");var k,T=\\\"multicategory\\\"===e.type;f.noTickson||\\\"category\\\"!==e.type&&!T||!e.ticks&&!e.showgrid||(T&&(k=\\\"boundaries\\\"),r(\\\"tickson\\\",k));T&&(r(\\\"showdividers\\\")&&(r(\\\"dividercolor\\\"),r(\\\"dividerwidth\\\")));return e}},{\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"./category_order_defaults\\\":771,\\\"./layout_attributes\\\":779,\\\"./line_grid_defaults\\\":781,\\\"./set_convert\\\":785,\\\"./tick_label_defaults\\\":786,\\\"./tick_mark_defaults\\\":787,\\\"./tick_value_defaults\\\":788}],770:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"./constants\\\");r.id2name=function(t){if(\\\"string\\\"==typeof t&&t.match(i.AX_ID_PATTERN)){var e=t.substr(1);return\\\"1\\\"===e&&(e=\\\"\\\"),t.charAt(0)+\\\"axis\\\"+e}},r.name2id=function(t){if(t.match(i.AX_NAME_PATTERN)){var e=t.substr(5);return\\\"1\\\"===e&&(e=\\\"\\\"),t.charAt(0)+e}},r.cleanId=function(t,e){if(t.match(i.AX_ID_PATTERN)&&(!e||t.charAt(0)===e)){var r=t.substr(1).replace(/^0+/,\\\"\\\");return\\\"1\\\"===r&&(r=\\\"\\\"),t.charAt(0)+r}},r.list=function(t,e,n){var i=t._fullLayout;if(!i)return[];var a,o=r.listIds(t,e),s=new Array(o.length);for(a=0;a<o.length;a++){var l=o[a];s[a]=i[l.charAt(0)+\\\"axis\\\"+l.substr(1)]}if(!n){var c=i._subplots.gl3d||[];for(a=0;a<c.length;a++){var u=i[c[a]];e?s.push(u[e+\\\"axis\\\"]):s.push(u.xaxis,u.yaxis,u.zaxis)}}return s},r.listIds=function(t,e){var r=t._fullLayout;if(!r)return[];var n=r._subplots;return e?n[e+\\\"axis\\\"]:n.xaxis.concat(n.yaxis)},r.getFromId=function(t,e,n){var i=t._fullLayout;return\\\"x\\\"===n?e=e.replace(/y[0-9]*/,\\\"\\\"):\\\"y\\\"===n&&(e=e.replace(/x[0-9]*/,\\\"\\\")),i[r.id2name(e)]},r.getFromTrace=function(t,e,i){var a=t._fullLayout,o=null;if(n.traceIs(e,\\\"gl3d\\\")){var s=e.scene;\\\"scene\\\"===s.substr(0,5)&&(o=a[s][i+\\\"axis\\\"])}else o=r.getFromId(t,e[i+\\\"axis\\\"]||i);return o},r.idSort=function(t,e){var r=t.charAt(0),n=e.charAt(0);return r!==n?r>n?1:-1:+(t.substr(1)||1)-+(e.substr(1)||1)},r.getAxisGroup=function(t,e){for(var r=t._axisMatchGroups,n=0;n<r.length;n++){if(r[n][e])return\\\"g\\\"+n}return e}},{\\\"../../registry\\\":847,\\\"./constants\\\":773}],771:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,n){if(\\\"category\\\"===e.type){var i,a=t.categoryarray,o=Array.isArray(a)&&a.length>0;o&&(i=\\\"array\\\");var s,l=r(\\\"categoryorder\\\",i);\\\"array\\\"===l&&(s=r(\\\"categoryarray\\\")),o||\\\"array\\\"!==l||(l=e.categoryorder=\\\"trace\\\"),\\\"trace\\\"===l?e._initialCategories=[]:\\\"array\\\"===l?e._initialCategories=s.slice():(s=function(t,e){var r,n,i,a=e.dataAttr||t._id.charAt(0),o={};if(e.axData)r=e.axData;else for(r=[],n=0;n<e.data.length;n++){var s=e.data[n];s[a+\\\"axis\\\"]===t._id&&r.push(s)}for(n=0;n<r.length;n++){var l=r[n][a];for(i=0;i<l.length;i++){var c=l[i];null!=c&&(o[c]=1)}}return Object.keys(o)}(e,n).sort(),\\\"category ascending\\\"===l?e._initialCategories=s:\\\"category descending\\\"===l&&(e._initialCategories=s.reverse()))}}},{}],772:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../constants/numerical\\\").ONEDAY;r.dtick=function(t,e){var r=\\\"log\\\"===e,i=\\\"date\\\"===e,o=\\\"category\\\"===e,s=i?a:1;if(!t)return s;if(n(t))return(t=Number(t))<=0?s:o?Math.max(1,Math.round(t)):i?Math.max(.1,t):t;if(\\\"string\\\"!=typeof t||!i&&!r)return s;var l=t.charAt(0),c=t.substr(1);return(c=n(c)?Number(c):0)<=0||!(i&&\\\"M\\\"===l&&c===Math.round(c)||r&&\\\"L\\\"===l||r&&\\\"D\\\"===l&&(1===c||2===c))?s:t},r.tick0=function(t,e,r,a){return\\\"date\\\"===e?i.cleanDate(t,i.dateTick0(r)):\\\"D1\\\"!==a&&\\\"D2\\\"!==a?n(t)?Number(t):0:void 0}},{\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"fast-isnumeric\\\":225}],773:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib/regex\\\").counter;e.exports={idRegex:{x:n(\\\"x\\\"),y:n(\\\"y\\\")},attrRegex:n(\\\"[xy]axis\\\"),xAxisMatch:n(\\\"xaxis\\\"),yAxisMatch:n(\\\"yaxis\\\"),AX_ID_PATTERN:/^[xyz][0-9]*$/,AX_NAME_PATTERN:/^[xyz]axis[0-9]*$/,SUBPLOT_PATTERN:/^x([0-9]*)y([0-9]*)$/,MINDRAG:8,MINSELECT:12,MINZOOM:20,DRAGGERSIZE:20,BENDPX:1.5,REDRAWDELAY:50,SELECTDELAY:100,SELECTID:\\\"-select\\\",DFLTRANGEX:[-1,6],DFLTRANGEY:[-1,4],traceLayerClasses:[\\\"heatmaplayer\\\",\\\"contourcarpetlayer\\\",\\\"contourlayer\\\",\\\"funnellayer\\\",\\\"waterfalllayer\\\",\\\"barlayer\\\",\\\"carpetlayer\\\",\\\"violinlayer\\\",\\\"boxlayer\\\",\\\"ohlclayer\\\",\\\"scattercarpetlayer\\\",\\\"scatterlayer\\\"],clipOnAxisFalseQuery:[\\\".scatterlayer\\\",\\\".barlayer\\\",\\\".funnellayer\\\",\\\".waterfalllayer\\\"],layerValue2layerClass:{\\\"above traces\\\":\\\"above\\\",\\\"below traces\\\":\\\"below\\\"}}},{\\\"../../lib/regex\\\":735}],774:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./axis_ids\\\").id2name,a=t(\\\"./scale_zoom\\\"),o=t(\\\"./autorange\\\").makePadFn,s=t(\\\"./autorange\\\").concatExtremes,l=t(\\\"../../constants/numerical\\\").ALMOST_EQUAL,c=t(\\\"../../constants/alignment\\\").FROM_BL;function u(t,e,r,n,a){var o,s,l,c,u=\\\"range\\\"!==a,h=n[i(e)].type,f=[];for(s=0;s<r.length;s++)if((l=r[s])!==e&&(c=n[i(l)]).type===h)if(c.fixedrange){if(u&&c.anchor){n[i(c.anchor)].fixedrange&&f.push(l)}}else f.push(l);for(o=0;o<t.length;o++)if(t[o][e]){var p=t[o],d=[];for(s=0;s<f.length;s++)p[l=f[s]]||d.push(l);return{linkableAxes:d,thisGroup:p}}return{linkableAxes:f,thisGroup:null}}function h(t,e,r,n,i){var a,o,s,l,c;null===e?((e={})[r]=1,c=t.length,t.push(e)):c=t.indexOf(e);var u=Object.keys(e);for(a=0;a<t.length;a++)if(s=t[a],a!==c&&s[n]){var h=s[n];for(o=0;o<u.length;o++)s[l=u[o]]=h*i*e[l];return void t.splice(c,1)}if(1!==i)for(o=0;o<u.length;o++)e[u[o]]*=i;e[n]=1}function f(t,e){var r=t._inputDomain,n=c[t.constraintoward],i=r[0]+(r[1]-r[0])*n;t.domain=t._input.domain=[i+(r[0]-i)/e,i+(r[1]-i)/e],t.setScale()}r.handleConstraintDefaults=function(t,e,r,i,a){var o,s,l,c,f=a._axisConstraintGroups,p=a._axisMatchGroups,d=e._id,g=d.charAt(0),v=((a._splomAxes||{})[g]||{})[d]||{},m=e._id,y=m.charAt(0),x=r(\\\"constrain\\\");if(n.coerce(t,e,{constraintoward:{valType:\\\"enumerated\\\",values:\\\"x\\\"===y?[\\\"left\\\",\\\"center\\\",\\\"right\\\"]:[\\\"bottom\\\",\\\"middle\\\",\\\"top\\\"],dflt:\\\"x\\\"===y?\\\"center\\\":\\\"middle\\\"}},\\\"constraintoward\\\"),!t.matches&&!v.matches||e.fixedrange||(s=u(p,m,i,a),o=n.coerce(t,e,{matches:{valType:\\\"enumerated\\\",values:s.linkableAxes||[],dflt:v.matches}},\\\"matches\\\")),o||!t.scaleanchor||e.fixedrange&&\\\"domain\\\"!==x||(c=u(f,m,i,a,x),l=n.coerce(t,e,{scaleanchor:{valType:\\\"enumerated\\\",values:c.linkableAxes||[]}},\\\"scaleanchor\\\")),o?(delete e.constrain,h(p,s.thisGroup,m,o,1)):-1!==i.indexOf(t.matches)&&n.warn(\\\"ignored \\\"+e._name+'.matches: \\\"'+t.matches+'\\\" to avoid either an infinite loop or because the target axis has fixed range.'),l){var b=r(\\\"scaleratio\\\");b||(b=e.scaleratio=1),h(f,c.thisGroup,m,l,b)}else-1!==i.indexOf(t.scaleanchor)&&n.warn(\\\"ignored \\\"+e._name+'.scaleanchor: \\\"'+t.scaleanchor+'\\\" to avoid either an infinite loop and possibly inconsistent scaleratios, or because the target axis has fixed range or this axis declares a *matches* constraint.')},r.enforce=function(t){var e,r,n,c,u,h,p,d=t._fullLayout,g=d._axisConstraintGroups||[];for(e=0;e<g.length;e++){var v=g[e],m=Object.keys(v),y=1/0,x=0,b=1/0,_={},w={},k=!1;for(r=0;r<m.length;r++)w[n=m[r]]=c=d[i(n)],c._inputDomain?c.domain=c._inputDomain.slice():c._inputDomain=c.domain.slice(),c._inputRange||(c._inputRange=c.range.slice()),c.setScale(),_[n]=u=Math.abs(c._m)/v[n],y=Math.min(y,u),\\\"domain\\\"!==c.constrain&&c._constraintShrinkable||(b=Math.min(b,u)),delete c._constraintShrinkable,x=Math.max(x,u),\\\"domain\\\"===c.constrain&&(k=!0);if(!(y>l*x)||k)for(r=0;r<m.length;r++)if(u=_[n=m[r]],h=(c=w[n]).constrain,u!==b||\\\"domain\\\"===h)if(p=u/b,\\\"range\\\"===h)a(c,p);else{var T=c._inputDomain,A=(c.domain[1]-c.domain[0])/(T[1]-T[0]),M=(c.r2l(c.range[1])-c.r2l(c.range[0]))/(c.r2l(c._inputRange[1])-c.r2l(c._inputRange[0]));if((p/=A)*M<1){c.domain=c._input.domain=T.slice(),a(c,p);continue}if(M<1&&(c.range=c._input.range=c._inputRange.slice(),p*=M),c.autorange){var S=c.r2l(c.range[0]),E=c.r2l(c.range[1]),C=(S+E)/2,L=C,P=C,O=Math.abs(E-C),z=C-O*p*1.0001,I=C+O*p*1.0001,D=o(c);f(c,p);var R,F,B=Math.abs(c._m),N=s(t,c),j=N.min,U=N.max;for(F=0;F<j.length;F++)(R=j[F].val-D(j[F])/B)>z&&R<L&&(L=R);for(F=0;F<U.length;F++)(R=U[F].val+D(U[F])/B)<I&&R>P&&(P=R);p/=(P-L)/(2*O),L=c.l2r(L),P=c.l2r(P),c.range=c._input.range=S<E?[L,P]:[P,L]}f(c,p)}}},r.clean=function(t,e){if(e._inputDomain){for(var r=!1,n=e._id,i=t._fullLayout._axisConstraintGroups,a=0;a<i.length;a++)if(i[a][n]){r=!0;break}r&&\\\"domain\\\"===e.constrain||(e._input.domain=e.domain=e._inputDomain,delete e._inputDomain)}}},{\\\"../../constants/alignment\\\":688,\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"./autorange\\\":766,\\\"./axis_ids\\\":770,\\\"./scale_zoom\\\":783}],775:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"tinycolor2\\\"),a=t(\\\"has-passive-events\\\"),o=t(\\\"../../registry\\\"),s=t(\\\"../../lib\\\"),l=t(\\\"../../lib/svg_text_utils\\\"),c=t(\\\"../../components/color\\\"),u=t(\\\"../../components/drawing\\\"),h=t(\\\"../../components/fx\\\"),f=t(\\\"./axes\\\"),p=t(\\\"../../lib/setcursor\\\"),d=t(\\\"../../components/dragelement\\\"),g=t(\\\"../../constants/alignment\\\").FROM_TL,v=t(\\\"../../lib/clear_gl_canvases\\\"),m=t(\\\"../../plot_api/subroutines\\\").redrawReglTraces,y=t(\\\"../plots\\\"),x=t(\\\"./axis_ids\\\").getFromId,b=t(\\\"./select\\\").prepSelect,_=t(\\\"./select\\\").clearSelect,w=t(\\\"./select\\\").selectOnClick,k=t(\\\"./scale_zoom\\\"),T=t(\\\"./constants\\\"),A=T.MINDRAG,M=T.MINZOOM,S=!0;function E(t,e,r,n){var i=s.ensureSingle(t.draglayer,e,r,function(e){e.classed(\\\"drag\\\",!0).style({fill:\\\"transparent\\\",\\\"stroke-width\\\":0}).attr(\\\"data-subplot\\\",t.id)});return i.call(p,n),i.node()}function C(t,e,r,i,a,o,s){var l=E(t,\\\"rect\\\",e,r);return n.select(l).call(u.setRect,i,a,o,s),l}function L(t,e){for(var r=0;r<t.length;r++)if(!t[r].fixedrange)return e;return\\\"\\\"}function P(t,e,r,n,i){for(var a=0;a<t.length;a++){var o=t[a];if(!o.fixedrange){var s=o._rl[0],l=o._rl[1]-s;n[o._name+\\\".range[0]\\\"]=o.l2r(s+l*e),n[o._name+\\\".range[1]\\\"]=o.l2r(s+l*r)}}if(i&&i.length){var c=(e+(1-r))/2;P(i,c,1-c,n,[])}}function O(t,e){for(var r=0;r<t.length;r++){var n=t[r];n.fixedrange||(n.range=[n.l2r(n._rl[0]-e/n._m),n.l2r(n._rl[1]-e/n._m)])}}function z(t){return 1-(t>=0?Math.min(t,.9):1/(1/Math.max(t,-.3)+3.222))}function I(t,e,r,n,i){return t.append(\\\"path\\\").attr(\\\"class\\\",\\\"zoombox\\\").style({fill:e>.2?\\\"rgba(0,0,0,0)\\\":\\\"rgba(255,255,255,0)\\\",\\\"stroke-width\\\":0}).attr(\\\"transform\\\",\\\"translate(\\\"+r+\\\", \\\"+n+\\\")\\\").attr(\\\"d\\\",i+\\\"Z\\\")}function D(t,e,r){return t.append(\\\"path\\\").attr(\\\"class\\\",\\\"zoombox-corners\\\").style({fill:c.background,stroke:c.defaultLine,\\\"stroke-width\\\":1,opacity:0}).attr(\\\"transform\\\",\\\"translate(\\\"+e+\\\", \\\"+r+\\\")\\\").attr(\\\"d\\\",\\\"M0,0Z\\\")}function R(t,e,r,n,i,a){t.attr(\\\"d\\\",n+\\\"M\\\"+r.l+\\\",\\\"+r.t+\\\"v\\\"+r.h+\\\"h\\\"+r.w+\\\"v-\\\"+r.h+\\\"h-\\\"+r.w+\\\"Z\\\"),F(t,e,i,a)}function F(t,e,r,n){r||(t.transition().style(\\\"fill\\\",n>.2?\\\"rgba(0,0,0,0.4)\\\":\\\"rgba(255,255,255,0.3)\\\").duration(200),e.transition().style(\\\"opacity\\\",1).duration(200))}function B(t){n.select(t).selectAll(\\\".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners\\\").remove()}function N(t){S&&t.data&&t._context.showTips&&(s.notifier(s._(t,\\\"Double-click to zoom back out\\\"),\\\"long\\\"),S=!1)}function j(t){return\\\"lasso\\\"===t||\\\"select\\\"===t}function U(t){var e=Math.floor(Math.min(t.b-t.t,t.r-t.l,M)/2);return\\\"M\\\"+(t.l-3.5)+\\\",\\\"+(t.t-.5+e)+\\\"h3v\\\"+-e+\\\"h\\\"+e+\\\"v-3h-\\\"+(e+3)+\\\"ZM\\\"+(t.r+3.5)+\\\",\\\"+(t.t-.5+e)+\\\"h-3v\\\"+-e+\\\"h\\\"+-e+\\\"v-3h\\\"+(e+3)+\\\"ZM\\\"+(t.r+3.5)+\\\",\\\"+(t.b+.5-e)+\\\"h-3v\\\"+e+\\\"h\\\"+-e+\\\"v3h\\\"+(e+3)+\\\"ZM\\\"+(t.l-3.5)+\\\",\\\"+(t.b+.5-e)+\\\"h3v\\\"+e+\\\"h\\\"+e+\\\"v3h-\\\"+(e+3)+\\\"Z\\\"}function V(t,e,r,n){for(var i,a,o,l,c=!1,u={},h={},f=0;f<e.length;f++){var p=e[f];for(i in r)if(p[i]){for(o in p)(\\\"x\\\"===o.charAt(0)?r:n)[o]||(u[o]=i);for(a in n)p[a]&&(c=!0)}for(a in n)if(p[a])for(l in p)(\\\"x\\\"===l.charAt(0)?r:n)[l]||(h[l]=a)}c&&(s.extendFlat(u,h),h={});var d={},g=[];for(o in u){var v=x(t,o);g.push(v),d[v._id]=v}var m={},y=[];for(l in h){var b=x(t,l);y.push(b),m[b._id]=b}return{xaHash:d,yaHash:m,xaxes:g,yaxes:y,xLinks:u,yLinks:h,isSubplotConstrained:c}}function q(t,e){if(a){var r=void 0!==t.onwheel?\\\"wheel\\\":\\\"mousewheel\\\";t._onwheel&&t.removeEventListener(r,t._onwheel),t._onwheel=e,t.addEventListener(r,e,{passive:!1})}else void 0!==t.onwheel?t.onwheel=e:void 0!==t.onmousewheel&&(t.onmousewheel=e)}function H(t){var e=[];for(var r in t)e.push(t[r]);return e}e.exports={makeDragBox:function(t,e,r,a,c,p,S,E){var F,G,Y,W,X,Z,J,K,$,Q,tt,et,rt,nt,it,at,ot,st,lt,ct,ut,ht=t._fullLayout._zoomlayer,ft=S+E===\\\"nsew\\\",pt=1===(S+E).length;function dt(){if(F=e.xaxis,G=e.yaxis,$=F._length,Q=G._length,J=F._offset,K=G._offset,(Y={})[F._id]=F,(W={})[G._id]=G,S&&E)for(var r=e.overlays,n=0;n<r.length;n++){var i=r[n].xaxis;Y[i._id]=i;var a=r[n].yaxis;W[a._id]=a}X=H(Y),Z=H(W),rt=L(X,E),nt=L(Z,S),it=!nt&&!rt,tt=V(t,t._fullLayout._axisConstraintGroups,Y,W),et=V(t,t._fullLayout._axisMatchGroups,Y,W),at=E||tt.isSubplotConstrained||et.isSubplotConstrained,ot=S||tt.isSubplotConstrained||et.isSubplotConstrained;var o=t._fullLayout;st=o._has(\\\"scattergl\\\"),lt=o._has(\\\"splom\\\"),ct=o._has(\\\"svg\\\")}dt();var gt=function(t,e,r){return t?\\\"nsew\\\"===t?r?\\\"\\\":\\\"pan\\\"===e?\\\"move\\\":\\\"crosshair\\\":t.toLowerCase()+\\\"-resize\\\":\\\"pointer\\\"}(nt+rt,t._fullLayout.dragmode,ft),vt=C(e,S+E+\\\"drag\\\",gt,r,a,c,p);if(it&&!ft)return vt.onmousedown=null,vt.style.pointerEvents=\\\"none\\\",vt;var mt,yt,xt,bt,_t,wt,kt,Tt,At,Mt,St={element:vt,gd:t,plotinfo:e};function Et(){St.plotinfo.selection=!1,_(t)}function Ct(r,i){var a=t._fullLayout.clickmode;if(B(t),2!==r||pt||function(){if(!t._transitioningWithDuration){var e=t._context.doubleClick,r=[];rt&&(r=r.concat(X)),nt&&(r=r.concat(Z)),et.xaxes&&(r=r.concat(et.xaxes)),et.yaxes&&(r=r.concat(et.yaxes));var n,i,a,s={};if(\\\"reset+autosize\\\"===e)for(e=\\\"autosize\\\",i=0;i<r.length;i++)if((n=r[i])._rangeInitial&&(n.range[0]!==n._rangeInitial[0]||n.range[1]!==n._rangeInitial[1])||!n._rangeInitial&&!n.autorange){e=\\\"reset\\\";break}if(\\\"autosize\\\"===e)for(i=0;i<r.length;i++)(n=r[i]).fixedrange||(s[n._name+\\\".autorange\\\"]=!0);else if(\\\"reset\\\"===e)for((rt||tt.isSubplotConstrained)&&(r=r.concat(tt.xaxes)),nt&&!tt.isSubplotConstrained&&(r=r.concat(tt.yaxes)),tt.isSubplotConstrained&&(rt?nt||(r=r.concat(Z)):r=r.concat(X)),i=0;i<r.length;i++)(n=r[i]).fixedrange||(n._rangeInitial?(a=n._rangeInitial,s[n._name+\\\".range[0]\\\"]=a[0],s[n._name+\\\".range[1]\\\"]=a[1]):s[n._name+\\\".autorange\\\"]=!0);t.emit(\\\"plotly_doubleclick\\\",null),o.call(\\\"_guiRelayout\\\",t,s)}}(),ft)a.indexOf(\\\"select\\\")>-1&&w(i,t,X,Z,e.id,St),a.indexOf(\\\"event\\\")>-1&&h.click(t,i,e.id);else if(1===r&&pt){var s=S?G:F,c=\\\"s\\\"===S||\\\"w\\\"===E?0:1,u=s._name+\\\".range[\\\"+c+\\\"]\\\",f=function(t,e){var r,i=t.range[e],a=Math.abs(i-t.range[1-e]);return\\\"date\\\"===t.type?i:\\\"log\\\"===t.type?(r=Math.ceil(Math.max(0,-Math.log(a)/Math.LN10))+3,n.format(\\\".\\\"+r+\\\"g\\\")(Math.pow(10,i))):(r=Math.floor(Math.log(Math.abs(i))/Math.LN10)-Math.floor(Math.log(a)/Math.LN10)+4,n.format(\\\".\\\"+String(r)+\\\"g\\\")(i))}(s,c),p=\\\"left\\\",d=\\\"middle\\\";if(s.fixedrange)return;S?(d=\\\"n\\\"===S?\\\"top\\\":\\\"bottom\\\",\\\"right\\\"===s.side&&(p=\\\"right\\\")):\\\"e\\\"===E&&(p=\\\"right\\\"),t._context.showAxisRangeEntryBoxes&&n.select(vt).call(l.makeEditable,{gd:t,immediate:!0,background:t._fullLayout.paper_bgcolor,text:String(f),fill:s.tickfont?s.tickfont.color:\\\"#444\\\",horizontalAlign:p,verticalAlign:d}).on(\\\"edit\\\",function(e){var r=s.d2r(e);void 0!==r&&o.call(\\\"_guiRelayout\\\",t,u,r)})}}function Lt(e,r){if(t._transitioningWithDuration)return!1;var n=Math.max(0,Math.min($,e+mt)),i=Math.max(0,Math.min(Q,r+yt)),a=Math.abs(n-mt),o=Math.abs(i-yt);function s(){kt=\\\"\\\",xt.r=xt.l,xt.t=xt.b,At.attr(\\\"d\\\",\\\"M0,0Z\\\")}if(xt.l=Math.min(mt,n),xt.r=Math.max(mt,n),xt.t=Math.min(yt,i),xt.b=Math.max(yt,i),tt.isSubplotConstrained)a>M||o>M?(kt=\\\"xy\\\",a/$>o/Q?(o=a*Q/$,yt>i?xt.t=yt-o:xt.b=yt+o):(a=o*$/Q,mt>n?xt.l=mt-a:xt.r=mt+a),At.attr(\\\"d\\\",U(xt))):s();else if(et.isSubplotConstrained)if(a>M||o>M){kt=\\\"xy\\\";var l=Math.min(xt.l/$,(Q-xt.b)/Q),c=Math.max(xt.r/$,(Q-xt.t)/Q);xt.l=l*$,xt.r=c*$,xt.b=(1-l)*Q,xt.t=(1-c)*Q,At.attr(\\\"d\\\",U(xt))}else s();else!nt||o<Math.min(Math.max(.6*a,A),M)?a<A||!rt?s():(xt.t=0,xt.b=Q,kt=\\\"x\\\",At.attr(\\\"d\\\",function(t,e){return\\\"M\\\"+(t.l-.5)+\\\",\\\"+(e-M-.5)+\\\"h-3v\\\"+(2*M+1)+\\\"h3ZM\\\"+(t.r+.5)+\\\",\\\"+(e-M-.5)+\\\"h3v\\\"+(2*M+1)+\\\"h-3Z\\\"}(xt,yt))):!rt||a<Math.min(.6*o,M)?(xt.l=0,xt.r=$,kt=\\\"y\\\",At.attr(\\\"d\\\",function(t,e){return\\\"M\\\"+(e-M-.5)+\\\",\\\"+(t.t-.5)+\\\"v-3h\\\"+(2*M+1)+\\\"v3ZM\\\"+(e-M-.5)+\\\",\\\"+(t.b+.5)+\\\"v3h\\\"+(2*M+1)+\\\"v-3Z\\\"}(xt,mt))):(kt=\\\"xy\\\",At.attr(\\\"d\\\",U(xt)));xt.w=xt.r-xt.l,xt.h=xt.b-xt.t,kt&&(Mt=!0),t._dragged=Mt,R(Tt,At,xt,_t,wt,bt),Pt(),t.emit(\\\"plotly_relayouting\\\",ut),wt=!0}function Pt(){ut={},\\\"xy\\\"!==kt&&\\\"x\\\"!==kt||(P(X,xt.l/$,xt.r/$,ut,tt.xaxes),Bt(\\\"x\\\",ut)),\\\"xy\\\"!==kt&&\\\"y\\\"!==kt||(P(Z,(Q-xt.b)/Q,(Q-xt.t)/Q,ut,tt.yaxes),Bt(\\\"y\\\",ut))}function Ot(){if(Math.min(xt.h,xt.w)<2*A)return B(t);Pt(),B(t),jt(),N(t)}St.prepFn=function(e,r,n){var a=St.dragmode,o=t._fullLayout.dragmode;o!==a&&(St.dragmode=o),dt(),it||(ft?e.shiftKey?\\\"pan\\\"===o?o=\\\"zoom\\\":j(o)||(o=\\\"pan\\\"):e.ctrlKey&&(o=\\\"pan\\\"):o=\\\"pan\\\"),St.minDrag=\\\"lasso\\\"===o?1:void 0,j(o)?(St.xaxes=X,St.yaxes=Z,b(e,r,n,St,o)):(St.clickFn=Ct,j(a)&&Et(),it||(\\\"zoom\\\"===o?(St.moveFn=Lt,St.doneFn=Ot,St.minDrag=1,function(e,r,n){var a=vt.getBoundingClientRect();mt=r-a.left,yt=n-a.top,xt={l:mt,r:mt,w:0,t:yt,b:yt,h:0},bt=t._hmpixcount?t._hmlumcount/t._hmpixcount:i(t._fullLayout.plot_bgcolor).getLuminance(),wt=!1,kt=\\\"xy\\\",Mt=!1,Tt=I(ht,bt,J,K,_t=\\\"M0,0H\\\"+$+\\\"V\\\"+Q+\\\"H0V0\\\"),At=D(ht,J,K)}(0,r,n)):\\\"pan\\\"===o&&(St.moveFn=Ft,St.doneFn=jt))),t._fullLayout._redrag=function(){var e=t._dragdata;e&&e.element===vt&&(j(t._fullLayout.dragmode)||(dt(),Ut([0,0,$,Q]),St.moveFn(e.dx,e.dy)))}},d.init(St);var zt=[0,0,$,Q],It=null,Dt=T.REDRAWDELAY,Rt=e.mainplot?t._fullLayout._plots[e.mainplot]:e;function Ft(e,r){if(!t._transitioningWithDuration){if(t._fullLayout._replotting=!0,\\\"ew\\\"===rt||\\\"ns\\\"===nt)return rt&&(O(X,e),Bt(\\\"x\\\")),nt&&(O(Z,r),Bt(\\\"y\\\")),Ut([rt?-e:0,nt?-r:0,$,Q]),Nt(),void t.emit(\\\"plotly_relayouting\\\",ut);if(tt.isSubplotConstrained&&rt&&nt){var n=\\\"w\\\"===rt==(\\\"n\\\"===nt)?1:-1,i=(e/$+n*r/Q)/2;e=i*$,r=n*i*Q}\\\"w\\\"===rt?e=l(X,0,e):\\\"e\\\"===rt?e=l(X,1,-e):rt||(e=0),\\\"n\\\"===nt?r=l(Z,1,r):\\\"s\\\"===nt?r=l(Z,0,-r):nt||(r=0);var a=\\\"w\\\"===rt?e:0,o=\\\"n\\\"===nt?r:0;if(tt.isSubplotConstrained){var s;if(!rt&&1===nt.length){for(s=0;s<X.length;s++)X[s].range=X[s]._r.slice(),k(X[s],1-r/Q);a=(e=r*$/Q)/2}if(!nt&&1===rt.length){for(s=0;s<Z.length;s++)Z[s].range=Z[s]._r.slice(),k(Z[s],1-e/$);o=(r=e*Q/$)/2}}Bt(\\\"x\\\"),Bt(\\\"y\\\"),Ut([a,o,$-e,Q-r]),Nt(),t.emit(\\\"plotly_relayouting\\\",ut)}function l(t,e,r){for(var n,i,a=1-e,o=0;o<t.length;o++){var s=t[o];if(!s.fixedrange){n=s,i=s._rl[a]+(s._rl[e]-s._rl[a])/z(r/s._length);var l=s.l2r(i);!1!==l&&void 0!==l&&(s.range[e]=l)}}return n._length*(n._rl[e]-i)/(n._rl[e]-n._rl[a])}}function Bt(t,e){for(var r=et.isSubplotConstrained?{x:Z,y:X}[t]:et[t+\\\"axes\\\"],n=et.isSubplotConstrained?{x:X,y:Z}[t]:[],i=0;i<r.length;i++){var a=r[i],o=a._id,s=et.xLinks[o]||et.yLinks[o],l=n[0]||Y[s]||W[s];l&&(e?(e[a._name+\\\".range[0]\\\"]=e[l._name+\\\".range[0]\\\"],e[a._name+\\\".range[1]\\\"]=e[l._name+\\\".range[1]\\\"]):a.range=l.range.slice())}}function Nt(){var e,r=[];function n(t){for(e=0;e<t.length;e++)t[e].fixedrange||r.push(t[e]._id)}for(at&&(n(X),n(tt.xaxes),n(et.xaxes)),ot&&(n(Z),n(tt.yaxes),n(et.yaxes)),ut={},e=0;e<r.length;e++){var i=r[e],a=x(t,i);f.drawOne(t,a,{skipTitle:!0}),ut[a._name+\\\".range[0]\\\"]=a.range[0],ut[a._name+\\\".range[1]\\\"]=a.range[1]}f.redrawComponents(t,r)}function jt(){Ut([0,0,$,Q]),s.syncOrAsync([y.previousPromises,function(){t._fullLayout._replotting=!1,o.call(\\\"_guiRelayout\\\",t,ut)}],t)}function Ut(e){var r,n,i,a,l=t._fullLayout,c=l._plots,h=l._subplots.cartesian;if(lt&&o.subplotsRegistry.splom.drag(t),st)for(r=0;r<h.length;r++)if(i=(n=c[h[r]]).xaxis,a=n.yaxis,n._scene){var f=s.simpleMap(i.range,i.r2l),p=s.simpleMap(a.range,a.r2l);n._scene.update({range:[f[0],p[0],f[1],p[1]]})}if((lt||st)&&(v(t),m(t)),ct){var d=e[2]/F._length,g=e[3]/G._length;for(r=0;r<h.length;r++){i=(n=c[h[r]]).xaxis,a=n.yaxis;var y,x,b,_,w=at&&!i.fixedrange&&Y[i._id],k=ot&&!a.fixedrange&&W[a._id];if(w?(y=d,b=E?e[0]:Ht(i,y)):et.xaHash[i._id]?(y=d,b=e[0]*i._length/F._length):et.yaHash[i._id]?(y=g,b=\\\"ns\\\"===nt?-e[1]*i._length/G._length:Ht(i,y,{n:\\\"top\\\",s:\\\"bottom\\\"}[nt])):b=qt(i,y=Vt(i,d,g)),k?(x=g,_=S?e[1]:Ht(a,x)):et.yaHash[a._id]?(x=g,_=e[1]*a._length/G._length):et.xaHash[a._id]?(x=d,_=\\\"ew\\\"===rt?-e[0]*a._length/F._length:Ht(a,x,{e:\\\"right\\\",w:\\\"left\\\"}[rt])):_=qt(a,x=Vt(a,d,g)),y||x){y||(y=1),x||(x=1);var T=i._offset-b/y,A=a._offset-_/x;n.clipRect.call(u.setTranslate,b,_).call(u.setScale,y,x),n.plot.call(u.setTranslate,T,A).call(u.setScale,1/y,1/x),y===n.xScaleFactor&&x===n.yScaleFactor||(u.setPointGroupScale(n.zoomScalePts,y,x),u.setTextPointsScale(n.zoomScaleTxt,y,x)),u.hideOutsideRangePoints(n.clipOnAxisFalseTraces,n),n.xScaleFactor=y,n.yScaleFactor=x}}}}function Vt(t,e,r){return t.fixedrange?0:at&&tt.xaHash[t._id]?e:ot&&(tt.isSubplotConstrained?tt.xaHash:tt.yaHash)[t._id]?r:0}function qt(t,e){return e?(t.range=t._r.slice(),k(t,e),Ht(t,e)):0}function Ht(t,e,r){return t._length*(1-e)*g[r||t.constraintoward||\\\"middle\\\"]}return S.length*E.length!=1&&q(vt,function(e){if(t._context._scrollZoom.cartesian||t._fullLayout._enablescrollzoom){if(Et(),t._transitioningWithDuration)return e.preventDefault(),void e.stopPropagation();dt(),clearTimeout(It);var r=-e.deltaY;if(isFinite(r)||(r=e.wheelDelta/10),isFinite(r)){var n,i=Math.exp(-Math.min(Math.max(r,-20),20)/200),a=Rt.draglayer.select(\\\".nsewdrag\\\").node().getBoundingClientRect(),o=(e.clientX-a.left)/a.width,l=(a.bottom-e.clientY)/a.height;if(at){for(E||(o=.5),n=0;n<X.length;n++)c(X[n],o,i);Bt(\\\"x\\\"),zt[2]*=i,zt[0]+=zt[2]*o*(1/i-1)}if(ot){for(S||(l=.5),n=0;n<Z.length;n++)c(Z[n],l,i);Bt(\\\"y\\\"),zt[3]*=i,zt[1]+=zt[3]*(1-l)*(1/i-1)}Ut(zt),Nt(),t.emit(\\\"plotly_relayouting\\\",ut),It=setTimeout(function(){zt=[0,0,$,Q],jt()},Dt),e.preventDefault()}else s.log(\\\"Did not find wheel motion attributes: \\\",e)}function c(t,e,r){if(!t.fixedrange){var n=s.simpleMap(t.range,t.r2l),i=n[0]+(n[1]-n[0])*e;t.range=n.map(function(e){return t.l2r(i+(e-i)*r)})}}}),vt},makeDragger:E,makeRectDragger:C,makeZoombox:I,makeCorners:D,updateZoombox:R,xyCorners:U,transitionZoombox:F,removeZoombox:B,showDoubleClickNotifier:N,attachWheelEventHandler:q}},{\\\"../../components/color\\\":593,\\\"../../components/dragelement\\\":611,\\\"../../components/drawing\\\":614,\\\"../../components/fx\\\":632,\\\"../../constants/alignment\\\":688,\\\"../../lib\\\":719,\\\"../../lib/clear_gl_canvases\\\":704,\\\"../../lib/setcursor\\\":739,\\\"../../lib/svg_text_utils\\\":743,\\\"../../plot_api/subroutines\\\":758,\\\"../../registry\\\":847,\\\"../plots\\\":828,\\\"./axes\\\":767,\\\"./axis_ids\\\":770,\\\"./constants\\\":773,\\\"./scale_zoom\\\":783,\\\"./select\\\":784,d3:163,\\\"has-passive-events\\\":411,tinycolor2:537}],776:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../components/fx\\\"),a=t(\\\"../../components/dragelement\\\"),o=t(\\\"../../lib/setcursor\\\"),s=t(\\\"./dragbox\\\").makeDragBox,l=t(\\\"./constants\\\").DRAGGERSIZE;r.initInteractions=function(t){var e=t._fullLayout;if(t._context.staticPlot)n.select(t).selectAll(\\\".drag\\\").remove();else if(e._has(\\\"cartesian\\\")||e._has(\\\"splom\\\")){Object.keys(e._plots||{}).sort(function(t,r){if((e._plots[t].mainplot&&!0)===(e._plots[r].mainplot&&!0)){var n=t.split(\\\"y\\\"),i=r.split(\\\"y\\\");return n[0]===i[0]?Number(n[1]||1)-Number(i[1]||1):Number(n[0]||1)-Number(i[0]||1)}return e._plots[t].mainplot?1:-1}).forEach(function(r){var n=e._plots[r],o=n.xaxis,c=n.yaxis;if(!n.mainplot){var u=s(t,n,o._offset,c._offset,o._length,c._length,\\\"ns\\\",\\\"ew\\\");u.onmousemove=function(e){t._fullLayout._rehover=function(){t._fullLayout._hoversubplot===r&&i.hover(t,e,r)},i.hover(t,e,r),t._fullLayout._lasthover=u,t._fullLayout._hoversubplot=r},u.onmouseout=function(e){t._dragging||(t._fullLayout._hoversubplot=null,a.unhover(t,e))},t._context.showAxisDragHandles&&(s(t,n,o._offset-l,c._offset-l,l,l,\\\"n\\\",\\\"w\\\"),s(t,n,o._offset+o._length,c._offset-l,l,l,\\\"n\\\",\\\"e\\\"),s(t,n,o._offset-l,c._offset+c._length,l,l,\\\"s\\\",\\\"w\\\"),s(t,n,o._offset+o._length,c._offset+c._length,l,l,\\\"s\\\",\\\"e\\\"))}if(t._context.showAxisDragHandles){if(r===o._mainSubplot){var h=o._mainLinePosition;\\\"top\\\"===o.side&&(h-=l),s(t,n,o._offset+.1*o._length,h,.8*o._length,l,\\\"\\\",\\\"ew\\\"),s(t,n,o._offset,h,.1*o._length,l,\\\"\\\",\\\"w\\\"),s(t,n,o._offset+.9*o._length,h,.1*o._length,l,\\\"\\\",\\\"e\\\")}if(r===c._mainSubplot){var f=c._mainLinePosition;\\\"right\\\"!==c.side&&(f-=l),s(t,n,f,c._offset+.1*c._length,l,.8*c._length,\\\"ns\\\",\\\"\\\"),s(t,n,f,c._offset+.9*c._length,l,.1*c._length,\\\"s\\\",\\\"\\\"),s(t,n,f,c._offset,l,.1*c._length,\\\"n\\\",\\\"\\\")}}});var o=e._hoverlayer.node();o.onmousemove=function(r){r.target=t._fullLayout._lasthover,i.hover(t,r,e._hoversubplot)},o.onclick=function(e){e.target=t._fullLayout._lasthover,i.click(t,e)},o.onmousedown=function(e){t._fullLayout._lasthover.onmousedown(e)},r.updateFx(t)}},r.updateFx=function(t){var e=t._fullLayout,r=\\\"pan\\\"===e.dragmode?\\\"move\\\":\\\"crosshair\\\";o(e._draggers,r)}},{\\\"../../components/dragelement\\\":611,\\\"../../components/fx\\\":632,\\\"../../lib/setcursor\\\":739,\\\"./constants\\\":773,\\\"./dragbox\\\":775,d3:163}],777:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../lib\\\");e.exports=function(t){return function(e,r){var a=e[t];if(Array.isArray(a))for(var o=n.subplotsRegistry.cartesian,s=o.idRegex,l=r._subplots,c=l.xaxis,u=l.yaxis,h=l.cartesian,f=r._has(\\\"cartesian\\\")||r._has(\\\"gl2d\\\"),p=0;p<a.length;p++){var d=a[p];if(i.isPlainObject(d)){var g=d.xref,v=d.yref,m=s.x.test(g),y=s.y.test(v);if(m||y){f||i.pushUnique(r._basePlotModules,o);var x=!1;m&&-1===c.indexOf(g)&&(c.push(g),x=!0),y&&-1===u.indexOf(v)&&(u.push(v),x=!0),x&&m&&y&&h.push(g+v)}}}}}},{\\\"../../lib\\\":719,\\\"../../registry\\\":847}],778:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../registry\\\"),a=t(\\\"../../lib\\\"),o=t(\\\"../plots\\\"),s=t(\\\"../../components/drawing\\\"),l=t(\\\"../get_data\\\").getModuleCalcData,c=t(\\\"./axis_ids\\\"),u=t(\\\"./constants\\\"),h=t(\\\"../../constants/xmlns_namespaces\\\"),f=a.ensureSingle;function p(t,e,r){return a.ensureSingle(t,e,r,function(t){t.datum(r)})}function d(t,e,r,a,o){for(var c,h,f,p=u.traceLayerClasses,d=t._fullLayout,g=d._modules,v=[],m=[],y=0;y<g.length;y++){var x=(c=g[y]).name,b=i.modules[x].categories;if(b.svg){var _=c.layerName||x+\\\"layer\\\",w=c.plot;f=(h=l(r,w))[0],r=h[1],f.length&&v.push({i:p.indexOf(_),className:_,plotMethod:w,cdModule:f}),b.zoomScale&&m.push(\\\".\\\"+_)}}v.sort(function(t,e){return t.i-e.i});var k=e.plot.selectAll(\\\"g.mlayer\\\").data(v,function(t){return t.className});if(k.enter().append(\\\"g\\\").attr(\\\"class\\\",function(t){return t.className}).classed(\\\"mlayer\\\",!0).classed(\\\"rangeplot\\\",e.isRangePlot),k.exit().remove(),k.order(),k.each(function(r){var i=n.select(this),l=r.className;r.plotMethod(t,e,r.cdModule,i,a,o),-1===u.clipOnAxisFalseQuery.indexOf(\\\".\\\"+l)&&s.setClipUrl(i,e.layerClipId,t)}),d._has(\\\"scattergl\\\")&&(c=i.getModule(\\\"scattergl\\\"),f=l(r,c)[0],c.plot(t,e,f)),!t._context.staticPlot&&(e._hasClipOnAxisFalse&&(e.clipOnAxisFalseTraces=e.plot.selectAll(u.clipOnAxisFalseQuery.join(\\\",\\\")).selectAll(\\\".trace\\\")),m.length)){var T=e.plot.selectAll(m.join(\\\",\\\")).selectAll(\\\".trace\\\");e.zoomScalePts=T.selectAll(\\\"path.point\\\"),e.zoomScaleTxt=T.selectAll(\\\".textpoint\\\")}}function g(t,e){var r=e.plotgroup,n=e.id,i=u.layerValue2layerClass[e.xaxis.layer],a=u.layerValue2layerClass[e.yaxis.layer],o=t._fullLayout._hasOnlyLargeSploms;if(e.mainplot){var s=e.mainplotinfo,l=s.plotgroup,h=n+\\\"-x\\\",d=n+\\\"-y\\\";e.gridlayer=s.gridlayer,e.zerolinelayer=s.zerolinelayer,f(s.overlinesBelow,\\\"path\\\",h),f(s.overlinesBelow,\\\"path\\\",d),f(s.overaxesBelow,\\\"g\\\",h),f(s.overaxesBelow,\\\"g\\\",d),e.plot=f(s.overplot,\\\"g\\\",n),f(s.overlinesAbove,\\\"path\\\",h),f(s.overlinesAbove,\\\"path\\\",d),f(s.overaxesAbove,\\\"g\\\",h),f(s.overaxesAbove,\\\"g\\\",d),e.xlines=l.select(\\\".overlines-\\\"+i).select(\\\".\\\"+h),e.ylines=l.select(\\\".overlines-\\\"+a).select(\\\".\\\"+d),e.xaxislayer=l.select(\\\".overaxes-\\\"+i).select(\\\".\\\"+h),e.yaxislayer=l.select(\\\".overaxes-\\\"+a).select(\\\".\\\"+d)}else if(o)e.xlines=f(r,\\\"path\\\",\\\"xlines-above\\\"),e.ylines=f(r,\\\"path\\\",\\\"ylines-above\\\"),e.xaxislayer=f(r,\\\"g\\\",\\\"xaxislayer-above\\\"),e.yaxislayer=f(r,\\\"g\\\",\\\"yaxislayer-above\\\");else{var g=f(r,\\\"g\\\",\\\"layer-subplot\\\");e.shapelayer=f(g,\\\"g\\\",\\\"shapelayer\\\"),e.imagelayer=f(g,\\\"g\\\",\\\"imagelayer\\\"),e.gridlayer=f(r,\\\"g\\\",\\\"gridlayer\\\"),e.zerolinelayer=f(r,\\\"g\\\",\\\"zerolinelayer\\\"),f(r,\\\"path\\\",\\\"xlines-below\\\"),f(r,\\\"path\\\",\\\"ylines-below\\\"),e.overlinesBelow=f(r,\\\"g\\\",\\\"overlines-below\\\"),f(r,\\\"g\\\",\\\"xaxislayer-below\\\"),f(r,\\\"g\\\",\\\"yaxislayer-below\\\"),e.overaxesBelow=f(r,\\\"g\\\",\\\"overaxes-below\\\"),e.plot=f(r,\\\"g\\\",\\\"plot\\\"),e.overplot=f(r,\\\"g\\\",\\\"overplot\\\"),e.xlines=f(r,\\\"path\\\",\\\"xlines-above\\\"),e.ylines=f(r,\\\"path\\\",\\\"ylines-above\\\"),e.overlinesAbove=f(r,\\\"g\\\",\\\"overlines-above\\\"),f(r,\\\"g\\\",\\\"xaxislayer-above\\\"),f(r,\\\"g\\\",\\\"yaxislayer-above\\\"),e.overaxesAbove=f(r,\\\"g\\\",\\\"overaxes-above\\\"),e.xlines=r.select(\\\".xlines-\\\"+i),e.ylines=r.select(\\\".ylines-\\\"+a),e.xaxislayer=r.select(\\\".xaxislayer-\\\"+i),e.yaxislayer=r.select(\\\".yaxislayer-\\\"+a)}o||(p(e.gridlayer,\\\"g\\\",e.xaxis._id),p(e.gridlayer,\\\"g\\\",e.yaxis._id),e.gridlayer.selectAll(\\\"g\\\").map(function(t){return t[0]}).sort(c.idSort)),e.xlines.style(\\\"fill\\\",\\\"none\\\").classed(\\\"crisp\\\",!0),e.ylines.style(\\\"fill\\\",\\\"none\\\").classed(\\\"crisp\\\",!0)}function v(t,e){if(t){var r={};for(var i in t.each(function(t){var i=t[0];n.select(this).remove(),m(i,e),r[i]=!0}),e._plots)for(var a=e._plots[i].overlays||[],o=0;o<a.length;o++){var s=a[o];r[s.id]&&s.plot.selectAll(\\\".trace\\\").remove()}}}function m(t,e){e._draggers.selectAll(\\\"g.\\\"+t).remove(),e._defs.select(\\\"#clip\\\"+e._uid+t+\\\"plot\\\").remove()}r.name=\\\"cartesian\\\",r.attr=[\\\"xaxis\\\",\\\"yaxis\\\"],r.idRoot=[\\\"x\\\",\\\"y\\\"],r.idRegex=u.idRegex,r.attrRegex=u.attrRegex,r.attributes=t(\\\"./attributes\\\"),r.layoutAttributes=t(\\\"./layout_attributes\\\"),r.supplyLayoutDefaults=t(\\\"./layout_defaults\\\"),r.transitionAxes=t(\\\"./transition_axes\\\"),r.finalizeSubplots=function(t,e){var r,n,i,o=e._subplots,s=o.xaxis,l=o.yaxis,h=o.cartesian,f=h.concat(o.gl2d||[]),p={},d={};for(r=0;r<f.length;r++){var g=f[r].split(\\\"y\\\");p[g[0]]=1,d[\\\"y\\\"+g[1]]=1}for(r=0;r<s.length;r++)p[n=s[r]]||(i=(t[c.id2name(n)]||{}).anchor,u.idRegex.y.test(i)||(i=\\\"y\\\"),h.push(n+i),f.push(n+i),d[i]||(d[i]=1,a.pushUnique(l,i)));for(r=0;r<l.length;r++)d[i=l[r]]||(n=(t[c.id2name(i)]||{}).anchor,u.idRegex.x.test(n)||(n=\\\"x\\\"),h.push(n+i),f.push(n+i),p[n]||(p[n]=1,a.pushUnique(s,n)));if(!f.length){for(var v in n=\\\"\\\",i=\\\"\\\",t){if(u.attrRegex.test(v))\\\"x\\\"===v.charAt(0)?(!n||+v.substr(5)<+n.substr(5))&&(n=v):(!i||+v.substr(5)<+i.substr(5))&&(i=v)}n=n?c.name2id(n):\\\"x\\\",i=i?c.name2id(i):\\\"y\\\",s.push(n),l.push(i),h.push(n+i)}},r.plot=function(t,e,r,n){var i,a=t._fullLayout,o=a._subplots.cartesian,s=t.calcdata;if(!Array.isArray(e))for(e=[],i=0;i<s.length;i++)e.push(i);for(i=0;i<o.length;i++){for(var l,c=o[i],u=a._plots[c],h=[],f=0;f<s.length;f++){var p=s[f],g=p[0].trace;g.xaxis+g.yaxis===c&&((-1!==e.indexOf(g.index)||g.carpet)&&(l&&l[0].trace.xaxis+l[0].trace.yaxis===c&&-1!==[\\\"tonextx\\\",\\\"tonexty\\\",\\\"tonext\\\"].indexOf(g.fill)&&-1===h.indexOf(l)&&h.push(l),h.push(p)),l=p)}d(t,u,h,r,n)}},r.clean=function(t,e,r,n){var i,a,o,s=n._plots||{},l=e._plots||{},u=n._subplots||{};if(n._hasOnlyLargeSploms&&!e._hasOnlyLargeSploms)for(o in s)(i=s[o]).plotgroup&&i.plotgroup.remove();var h=n._has&&n._has(\\\"gl\\\"),f=e._has&&e._has(\\\"gl\\\");if(h&&!f)for(o in s)(i=s[o])._scene&&i._scene.destroy();if(u.xaxis&&u.yaxis){var p=c.listIds({_fullLayout:n});for(a=0;a<p.length;a++){var d=p[a];e[c.id2name(d)]||n._infolayer.selectAll(\\\".g-\\\"+d+\\\"title\\\").remove()}}var g=n._has&&n._has(\\\"cartesian\\\"),y=e._has&&e._has(\\\"cartesian\\\");if(g&&!y)v(n._cartesianlayer.selectAll(\\\".subplot\\\"),n),n._defs.selectAll(\\\".axesclip\\\").remove(),delete n._axisConstraintGroups;else if(u.cartesian)for(a=0;a<u.cartesian.length;a++){var x=u.cartesian[a];if(!l[x]){var b=\\\".\\\"+x+\\\",.\\\"+x+\\\"-x,.\\\"+x+\\\"-y\\\";n._cartesianlayer.selectAll(b).remove(),m(x,n)}}},r.drawFramework=function(t){var e=t._fullLayout,r=function(t){var e,r,n,i,a,o,s=t._fullLayout,l=s._subplots.cartesian,c=l.length,u=[],h=[];for(e=0;e<c;e++){n=l[e],i=s._plots[n],a=i.xaxis,o=i.yaxis;var f=a._mainAxis,p=o._mainAxis,d=f._id+p._id,g=s._plots[d];i.overlays=[],d!==n&&g?(i.mainplot=d,i.mainplotinfo=g,h.push(n)):(i.mainplot=void 0,i.mainPlotinfo=void 0,u.push(n))}for(e=0;e<h.length;e++)n=h[e],(i=s._plots[n]).mainplotinfo.overlays.push(i);var v=u.concat(h),m=new Array(c);for(e=0;e<c;e++){n=v[e],i=s._plots[n],a=i.xaxis,o=i.yaxis;var y=[n,a.layer,o.layer,a.overlaying||\\\"\\\",o.overlaying||\\\"\\\"];for(r=0;r<i.overlays.length;r++)y.push(i.overlays[r].id);m[e]=y}return m}(t),i=e._cartesianlayer.selectAll(\\\".subplot\\\").data(r,String);i.enter().append(\\\"g\\\").attr(\\\"class\\\",function(t){return\\\"subplot \\\"+t[0]}),i.order(),i.exit().call(v,e),i.each(function(r){var i=r[0],a=e._plots[i];a.plotgroup=n.select(this),g(t,a),a.draglayer=f(e._draggers,\\\"g\\\",i)})},r.rangePlot=function(t,e,r){g(t,e),d(t,e,r),o.style(t)},r.toSVG=function(t){var e=t._fullLayout._glimages,r=n.select(t).selectAll(\\\".svg-container\\\");r.filter(function(t,e){return e===r.size()-1}).selectAll(\\\".gl-canvas-context, .gl-canvas-focus\\\").each(function(){var t=this.toDataURL(\\\"image/png\\\");e.append(\\\"svg:image\\\").attr({xmlns:h.svg,\\\"xlink:href\\\":t,preserveAspectRatio:\\\"none\\\",x:0,y:0,width:this.width,height:this.height})})},r.updateFx=t(\\\"./graph_interact\\\").updateFx},{\\\"../../components/drawing\\\":614,\\\"../../constants/xmlns_namespaces\\\":696,\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"../get_data\\\":802,\\\"../plots\\\":828,\\\"./attributes\\\":765,\\\"./axis_ids\\\":770,\\\"./constants\\\":773,\\\"./graph_interact\\\":776,\\\"./layout_attributes\\\":779,\\\"./layout_defaults\\\":780,\\\"./transition_axes\\\":789,d3:163}],779:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../font_attributes\\\"),i=t(\\\"../../components/color/attributes\\\"),a=t(\\\"../../components/drawing/attributes\\\").dash,o=t(\\\"../../lib/extend\\\").extendFlat,s=t(\\\"../../plot_api/plot_template\\\").templatedArray,l=(t(\\\"../../constants/docs\\\").FORMAT_LINK,t(\\\"../../constants/docs\\\").DATE_FORMAT_LINK,t(\\\"./constants\\\"));e.exports={visible:{valType:\\\"boolean\\\",editType:\\\"plot\\\"},color:{valType:\\\"color\\\",dflt:i.defaultLine,editType:\\\"ticks\\\"},title:{text:{valType:\\\"string\\\",editType:\\\"ticks\\\"},font:n({editType:\\\"ticks\\\"}),editType:\\\"ticks\\\"},type:{valType:\\\"enumerated\\\",values:[\\\"-\\\",\\\"linear\\\",\\\"log\\\",\\\"date\\\",\\\"category\\\",\\\"multicategory\\\"],dflt:\\\"-\\\",editType:\\\"calc\\\",_noTemplating:!0},autorange:{valType:\\\"enumerated\\\",values:[!0,!1,\\\"reversed\\\"],dflt:!0,editType:\\\"axrange\\\",impliedEdits:{\\\"range[0]\\\":void 0,\\\"range[1]\\\":void 0}},rangemode:{valType:\\\"enumerated\\\",values:[\\\"normal\\\",\\\"tozero\\\",\\\"nonnegative\\\"],dflt:\\\"normal\\\",editType:\\\"plot\\\"},range:{valType:\\\"info_array\\\",items:[{valType:\\\"any\\\",editType:\\\"axrange\\\",impliedEdits:{\\\"^autorange\\\":!1},anim:!0},{valType:\\\"any\\\",editType:\\\"axrange\\\",impliedEdits:{\\\"^autorange\\\":!1},anim:!0}],editType:\\\"axrange\\\",impliedEdits:{autorange:!1},anim:!0},fixedrange:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},scaleanchor:{valType:\\\"enumerated\\\",values:[l.idRegex.x.toString(),l.idRegex.y.toString()],editType:\\\"plot\\\"},scaleratio:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"plot\\\"},constrain:{valType:\\\"enumerated\\\",values:[\\\"range\\\",\\\"domain\\\"],dflt:\\\"range\\\",editType:\\\"plot\\\"},constraintoward:{valType:\\\"enumerated\\\",values:[\\\"left\\\",\\\"center\\\",\\\"right\\\",\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],editType:\\\"plot\\\"},matches:{valType:\\\"enumerated\\\",values:[l.idRegex.x.toString(),l.idRegex.y.toString()],editType:\\\"calc\\\"},tickmode:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"linear\\\",\\\"array\\\"],editType:\\\"ticks\\\",impliedEdits:{tick0:void 0,dtick:void 0}},nticks:{valType:\\\"integer\\\",min:0,dflt:0,editType:\\\"ticks\\\"},tick0:{valType:\\\"any\\\",editType:\\\"ticks\\\",impliedEdits:{tickmode:\\\"linear\\\"}},dtick:{valType:\\\"any\\\",editType:\\\"ticks\\\",impliedEdits:{tickmode:\\\"linear\\\"}},tickvals:{valType:\\\"data_array\\\",editType:\\\"ticks\\\"},ticktext:{valType:\\\"data_array\\\",editType:\\\"ticks\\\"},ticks:{valType:\\\"enumerated\\\",values:[\\\"outside\\\",\\\"inside\\\",\\\"\\\"],editType:\\\"ticks\\\"},tickson:{valType:\\\"enumerated\\\",values:[\\\"labels\\\",\\\"boundaries\\\"],dflt:\\\"labels\\\",editType:\\\"ticks\\\"},mirror:{valType:\\\"enumerated\\\",values:[!0,\\\"ticks\\\",!1,\\\"all\\\",\\\"allticks\\\"],dflt:!1,editType:\\\"ticks+layoutstyle\\\"},ticklen:{valType:\\\"number\\\",min:0,dflt:5,editType:\\\"ticks\\\"},tickwidth:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"ticks\\\"},tickcolor:{valType:\\\"color\\\",dflt:i.defaultLine,editType:\\\"ticks\\\"},showticklabels:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"ticks\\\"},automargin:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"ticks\\\"},showspikes:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"modebar\\\"},spikecolor:{valType:\\\"color\\\",dflt:null,editType:\\\"none\\\"},spikethickness:{valType:\\\"number\\\",dflt:3,editType:\\\"none\\\"},spikedash:o({},a,{dflt:\\\"dash\\\",editType:\\\"none\\\"}),spikemode:{valType:\\\"flaglist\\\",flags:[\\\"toaxis\\\",\\\"across\\\",\\\"marker\\\"],dflt:\\\"toaxis\\\",editType:\\\"none\\\"},spikesnap:{valType:\\\"enumerated\\\",values:[\\\"data\\\",\\\"cursor\\\"],dflt:\\\"data\\\",editType:\\\"none\\\"},tickfont:n({editType:\\\"ticks\\\"}),tickangle:{valType:\\\"angle\\\",dflt:\\\"auto\\\",editType:\\\"ticks\\\"},tickprefix:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"ticks\\\"},showtickprefix:{valType:\\\"enumerated\\\",values:[\\\"all\\\",\\\"first\\\",\\\"last\\\",\\\"none\\\"],dflt:\\\"all\\\",editType:\\\"ticks\\\"},ticksuffix:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"ticks\\\"},showticksuffix:{valType:\\\"enumerated\\\",values:[\\\"all\\\",\\\"first\\\",\\\"last\\\",\\\"none\\\"],dflt:\\\"all\\\",editType:\\\"ticks\\\"},showexponent:{valType:\\\"enumerated\\\",values:[\\\"all\\\",\\\"first\\\",\\\"last\\\",\\\"none\\\"],dflt:\\\"all\\\",editType:\\\"ticks\\\"},exponentformat:{valType:\\\"enumerated\\\",values:[\\\"none\\\",\\\"e\\\",\\\"E\\\",\\\"power\\\",\\\"SI\\\",\\\"B\\\"],dflt:\\\"B\\\",editType:\\\"ticks\\\"},separatethousands:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"ticks\\\"},tickformat:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"ticks\\\"},tickformatstops:s(\\\"tickformatstop\\\",{enabled:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"ticks\\\"},dtickrange:{valType:\\\"info_array\\\",items:[{valType:\\\"any\\\",editType:\\\"ticks\\\"},{valType:\\\"any\\\",editType:\\\"ticks\\\"}],editType:\\\"ticks\\\"},value:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"ticks\\\"},editType:\\\"ticks\\\"}),hoverformat:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"none\\\"},showline:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"ticks+layoutstyle\\\"},linecolor:{valType:\\\"color\\\",dflt:i.defaultLine,editType:\\\"layoutstyle\\\"},linewidth:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"ticks+layoutstyle\\\"},showgrid:{valType:\\\"boolean\\\",editType:\\\"ticks\\\"},gridcolor:{valType:\\\"color\\\",dflt:i.lightLine,editType:\\\"ticks\\\"},gridwidth:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"ticks\\\"},zeroline:{valType:\\\"boolean\\\",editType:\\\"ticks\\\"},zerolinecolor:{valType:\\\"color\\\",dflt:i.defaultLine,editType:\\\"ticks\\\"},zerolinewidth:{valType:\\\"number\\\",dflt:1,editType:\\\"ticks\\\"},showdividers:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"ticks\\\"},dividercolor:{valType:\\\"color\\\",dflt:i.defaultLine,editType:\\\"ticks\\\"},dividerwidth:{valType:\\\"number\\\",dflt:1,editType:\\\"ticks\\\"},anchor:{valType:\\\"enumerated\\\",values:[\\\"free\\\",l.idRegex.x.toString(),l.idRegex.y.toString()],editType:\\\"plot\\\"},side:{valType:\\\"enumerated\\\",values:[\\\"top\\\",\\\"bottom\\\",\\\"left\\\",\\\"right\\\"],editType:\\\"plot\\\"},overlaying:{valType:\\\"enumerated\\\",values:[\\\"free\\\",l.idRegex.x.toString(),l.idRegex.y.toString()],editType:\\\"plot\\\"},layer:{valType:\\\"enumerated\\\",values:[\\\"above traces\\\",\\\"below traces\\\"],dflt:\\\"above traces\\\",editType:\\\"plot\\\"},domain:{valType:\\\"info_array\\\",items:[{valType:\\\"number\\\",min:0,max:1,editType:\\\"plot\\\"},{valType:\\\"number\\\",min:0,max:1,editType:\\\"plot\\\"}],dflt:[0,1],editType:\\\"plot\\\"},position:{valType:\\\"number\\\",min:0,max:1,dflt:0,editType:\\\"plot\\\"},categoryorder:{valType:\\\"enumerated\\\",values:[\\\"trace\\\",\\\"category ascending\\\",\\\"category descending\\\",\\\"array\\\",\\\"total ascending\\\",\\\"total descending\\\",\\\"min ascending\\\",\\\"min descending\\\",\\\"max ascending\\\",\\\"max descending\\\",\\\"sum ascending\\\",\\\"sum descending\\\",\\\"mean ascending\\\",\\\"mean descending\\\",\\\"median ascending\\\",\\\"median descending\\\"],dflt:\\\"trace\\\",editType:\\\"calc\\\"},categoryarray:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},uirevision:{valType:\\\"any\\\",editType:\\\"none\\\"},editType:\\\"calc\\\",_deprecated:{autotick:{valType:\\\"boolean\\\",editType:\\\"ticks\\\"},title:{valType:\\\"string\\\",editType:\\\"ticks\\\"},titlefont:n({editType:\\\"ticks\\\"})}}},{\\\"../../components/color/attributes\\\":592,\\\"../../components/drawing/attributes\\\":613,\\\"../../constants/docs\\\":690,\\\"../../lib/extend\\\":710,\\\"../../plot_api/plot_template\\\":757,\\\"../font_attributes\\\":793,\\\"./constants\\\":773}],780:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../components/color\\\"),a=t(\\\"../../plot_api/plot_template\\\"),o=t(\\\"../layout_attributes\\\"),s=t(\\\"./layout_attributes\\\"),l=t(\\\"./type_defaults\\\"),c=t(\\\"./axis_defaults\\\"),u=t(\\\"./constraints\\\").handleConstraintDefaults,h=t(\\\"./position_defaults\\\"),f=t(\\\"./axis_ids\\\"),p=f.id2name,d=f.name2id,g=t(\\\"../../registry\\\"),v=g.traceIs,m=g.getComponentMethod;function y(t,e,r){Array.isArray(t[e])?t[e].push(r):t[e]=[r]}e.exports=function(t,e,r){var f,g,x={},b={},_={},w={},k={},T={},A={},M={},S={};for(f=0;f<r.length;f++){var E=r[f];if(v(E,\\\"cartesian\\\")||v(E,\\\"gl2d\\\")){var C,L;if(E.xaxis)y(x,C=p(E.xaxis),E);else if(E.xaxes)for(g=0;g<E.xaxes.length;g++)y(x,p(E.xaxes[g]),E);if(E.yaxis)y(x,L=p(E.yaxis),E);else if(E.yaxes)for(g=0;g<E.yaxes.length;g++)y(x,p(E.yaxes[g]),E);if(\\\"funnel\\\"===E.type?\\\"h\\\"===E.orientation?(C&&(b[C]=!0),L&&(A[L]=!0)):L&&(_[L]=!0):(L&&(k[L]=!0,T[L]=!0),v(E,\\\"carpet\\\")&&(\\\"carpet\\\"!==E.type||E._cheater)||C&&(w[C]=!0)),\\\"carpet\\\"===E.type&&E._cheater&&C&&(b[C]=!0),v(E,\\\"2dMap\\\")&&(M[C]=!0,M[L]=!0),v(E,\\\"oriented\\\"))S[\\\"h\\\"===E.orientation?L:C]=!0}}var P=e._subplots,O=P.xaxis,z=P.yaxis,I=n.simpleMap(O,p),D=n.simpleMap(z,p),R=I.concat(D),F=i.background;O.length&&z.length&&(F=n.coerce(t,e,o,\\\"plot_bgcolor\\\"));var B,N,j,U,V=i.combine(F,e.paper_bgcolor);function q(t,e){return n.coerce(j,U,s,t,e)}function H(t,e){return n.coerce2(j,U,s,t,e)}function G(t){return\\\"x\\\"===t?z:O}var Y={x:G(\\\"x\\\"),y:G(\\\"y\\\")},W=Y.x.concat(Y.y);function X(e,r){for(var n=\\\"x\\\"===e?I:D,i=[],a=0;a<n.length;a++){var o=n[a];o===r||(t[o]||{}).overlaying||i.push(d(o))}return i}for(f=0;f<R.length;f++){N=(B=R[f]).charAt(0),n.isPlainObject(t[B])||(t[B]={}),j=t[B],U=a.newContainer(e,B,N+\\\"axis\\\");var Z=x[B]||[];U._traceIndices=Z.map(function(t){return t._expandedIndex}),U._annIndices=[],U._shapeIndices=[],U._imgIndices=[],U._subplotsWith=[],U._counterAxes=[],U._name=U._attr=B;var J=U._id=d(B),K=X(N,B),$=\\\"x\\\"===N&&!w[B]&&b[B]||\\\"y\\\"===N&&!k[B]&&_[B],Q=\\\"y\\\"===N&&!T[B]&&A[B],tt={letter:N,font:e.font,outerTicks:M[B],showGrid:!S[B],data:Z,bgColor:V,calendar:e.calendar,automargin:!0,visibleDflt:$,reverseDflt:Q,splomStash:((e._splomAxes||{})[N]||{})[J]};q(\\\"uirevision\\\",e.uirevision),l(j,U,q,tt),c(j,U,q,tt,e);var et=H(\\\"spikecolor\\\"),rt=H(\\\"spikethickness\\\"),nt=H(\\\"spikedash\\\"),it=H(\\\"spikemode\\\"),at=H(\\\"spikesnap\\\");q(\\\"showspikes\\\",!!(et||rt||nt||it||at))||(delete U.spikecolor,delete U.spikethickness,delete U.spikedash,delete U.spikemode,delete U.spikesnap),h(j,U,q,{letter:N,counterAxes:Y[N],overlayableAxes:K,grid:e.grid}),U._input=j}var ot=m(\\\"rangeslider\\\",\\\"handleDefaults\\\"),st=m(\\\"rangeselector\\\",\\\"handleDefaults\\\");for(f=0;f<I.length;f++)B=I[f],j=t[B],U=e[B],ot(t,e,B),\\\"date\\\"===U.type&&st(j,U,e,D,U.calendar),q(\\\"fixedrange\\\");for(f=0;f<D.length;f++){B=D[f],j=t[B],U=e[B];var lt=e[p(U.anchor)];q(\\\"fixedrange\\\",m(\\\"rangeslider\\\",\\\"isVisible\\\")(lt))}var ct=e._axisConstraintGroups=[],ut=e._axisMatchGroups=[];for(f=0;f<R.length;f++)N=(B=R[f]).charAt(0),j=t[B],U=e[B],u(j,U,q,W,e);for(f=0;f<ut.length;f++){var ht,ft=ut[f],pt=null,dt=null;for(ht in ft)(U=e[p(ht)]).matches||(pt=U.range,dt=U.autorange);if(null===pt||null===dt)for(ht in ft){pt=(U=e[p(ht)]).range,dt=U.autorange;break}for(ht in ft)(U=e[p(ht)]).matches&&(U.range=pt.slice(),U.autorange=dt),U._matchGroup=ft;if(ct.length)for(ht in ft)for(g=0;g<ct.length;g++){var gt=ct[g];for(var vt in gt)ht===vt&&(n.warn(\\\"Axis \\\"+vt+\\\" is set with both a *scaleanchor* and *matches* constraint; ignoring the scale constraint.\\\"),delete gt[vt],Object.keys(gt).length<2&&ct.splice(g,1))}}}},{\\\"../../components/color\\\":593,\\\"../../lib\\\":719,\\\"../../plot_api/plot_template\\\":757,\\\"../../registry\\\":847,\\\"../layout_attributes\\\":819,\\\"./axis_defaults\\\":769,\\\"./axis_ids\\\":770,\\\"./constraints\\\":774,\\\"./layout_attributes\\\":779,\\\"./position_defaults\\\":782,\\\"./type_defaults\\\":790}],781:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"tinycolor2\\\").mix,i=t(\\\"../../components/color/attributes\\\").lightFraction,a=t(\\\"../../lib\\\");e.exports=function(t,e,r,o){var s=(o=o||{}).dfltColor;function l(r,n){return a.coerce2(t,e,o.attributes,r,n)}var c=l(\\\"linecolor\\\",s),u=l(\\\"linewidth\\\");r(\\\"showline\\\",o.showLine||!!c||!!u)||(delete e.linecolor,delete e.linewidth);var h=l(\\\"gridcolor\\\",n(s,o.bgColor,o.blend||i).toRgbString()),f=l(\\\"gridwidth\\\");if(r(\\\"showgrid\\\",o.showGrid||!!h||!!f)||(delete e.gridcolor,delete e.gridwidth),!o.noZeroLine){var p=l(\\\"zerolinecolor\\\",s),d=l(\\\"zerolinewidth\\\");r(\\\"zeroline\\\",o.showGrid||!!p||!!d)||(delete e.zerolinecolor,delete e.zerolinewidth)}}},{\\\"../../components/color/attributes\\\":592,\\\"../../lib\\\":719,tinycolor2:537}],782:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../lib\\\");e.exports=function(t,e,r,a){var o,s,l,c,u=a.counterAxes||[],h=a.overlayableAxes||[],f=a.letter,p=a.grid;p&&(s=p._domains[f][p._axisMap[e._id]],o=p._anchors[e._id],s&&(l=p[f+\\\"side\\\"].split(\\\" \\\")[0],c=p.domain[f][\\\"right\\\"===l||\\\"top\\\"===l?1:0])),s=s||[0,1],o=o||(n(t.position)?\\\"free\\\":u[0]||\\\"free\\\"),l=l||(\\\"x\\\"===f?\\\"bottom\\\":\\\"left\\\"),c=c||0,\\\"free\\\"===i.coerce(t,e,{anchor:{valType:\\\"enumerated\\\",values:[\\\"free\\\"].concat(u),dflt:o}},\\\"anchor\\\")&&r(\\\"position\\\",c),i.coerce(t,e,{side:{valType:\\\"enumerated\\\",values:\\\"x\\\"===f?[\\\"bottom\\\",\\\"top\\\"]:[\\\"left\\\",\\\"right\\\"],dflt:l}},\\\"side\\\");var d=!1;if(h.length&&(d=i.coerce(t,e,{overlaying:{valType:\\\"enumerated\\\",values:[!1].concat(h),dflt:!1}},\\\"overlaying\\\")),!d){var g=r(\\\"domain\\\",s);g[0]>g[1]-1/4096&&(e.domain=s),i.noneOrAll(t.domain,e.domain,s)}return r(\\\"layer\\\"),e}},{\\\"../../lib\\\":719,\\\"fast-isnumeric\\\":225}],783:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../constants/alignment\\\").FROM_BL;e.exports=function(t,e,r){void 0===r&&(r=n[t.constraintoward||\\\"center\\\"]);var i=[t.r2l(t.range[0]),t.r2l(t.range[1])],a=i[0]+(i[1]-i[0])*r;t.range=t._input.range=[t.l2r(a+(i[0]-a)*e),t.l2r(a+(i[1]-a)*e)]}},{\\\"../../constants/alignment\\\":688}],784:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"polybooljs\\\"),i=t(\\\"../../registry\\\"),a=t(\\\"../../components/color\\\"),o=t(\\\"../../components/fx\\\"),s=t(\\\"../../lib\\\"),l=t(\\\"../../lib/polygon\\\"),c=t(\\\"../../lib/throttle\\\"),u=t(\\\"../../components/fx/helpers\\\").makeEventData,h=t(\\\"./axis_ids\\\").getFromId,f=t(\\\"../../lib/clear_gl_canvases\\\"),p=t(\\\"../../plot_api/subroutines\\\").redrawReglTraces,d=t(\\\"./constants\\\"),g=d.MINSELECT,v=l.filter,m=l.tester;function y(t){return t._id}function x(t,e,r,n,i,a,o){var s,l,c,u,h,f,p,d,g,v=e._hoverdata,m=e._fullLayout.clickmode.indexOf(\\\"event\\\")>-1,y=[];if(function(t){return t&&Array.isArray(t)&&!0!==t[0].hoverOnBox}(v)){k(t,e,a);var x=function(t,e){var r,n,i=t[0],a=-1,o=[];for(n=0;n<e.length;n++)if(r=e[n],i.fullData._expandedIndex===r.cd[0].trace._expandedIndex){if(!0===i.hoverOnBox)break;void 0!==i.pointNumber?a=i.pointNumber:void 0!==i.binNumber&&(a=i.binNumber,o=i.pointNumbers);break}return{pointNumber:a,pointNumbers:o,searchInfo:r}}(v,s=A(e,r,n,i));if(x.pointNumbers.length>0?function(t,e){var r,n,i,a=[];for(i=0;i<t.length;i++)(r=t[i]).cd[0].trace.selectedpoints&&r.cd[0].trace.selectedpoints.length>0&&a.push(r);if(1===a.length&&a[0]===e.searchInfo&&(n=e.searchInfo.cd[0].trace).selectedpoints.length===e.pointNumbers.length){for(i=0;i<e.pointNumbers.length;i++)if(n.selectedpoints.indexOf(e.pointNumbers[i])<0)return!1;return!0}return!1}(s,x):function(t){var e,r,n,i=0;for(n=0;n<t.length;n++)if(e=t[n],(r=e.cd[0].trace).selectedpoints){if(r.selectedpoints.length>1)return!1;if((i+=r.selectedpoints.length)>1)return!1}return 1===i}(s)&&(f=S(x))){for(o&&o.remove(),g=0;g<s.length;g++)(l=s[g])._module.selectPoints(l,!1);E(e,s),T(a),m&&e.emit(\\\"plotly_deselect\\\",null)}else{for(p=t.shiftKey&&(void 0!==f?f:S(x)),c=function(t,e,r){return{pointNumber:t,searchInfo:e,subtract:r}}(x.pointNumber,x.searchInfo,p),u=w(a.selectionDefs.concat([c])),g=0;g<s.length;g++)if(h=C(s[g]._module.selectPoints(s[g],u),s[g]),y.length)for(var b=0;b<h.length;b++)y.push(h[b]);else y=h;E(e,s,d={points:y}),c&&a&&a.selectionDefs.push(c),o&&M(a.mergedPolygons,o),m&&e.emit(\\\"plotly_selected\\\",d)}}}function b(t){return\\\"pointNumber\\\"in t&&\\\"searchInfo\\\"in t}function _(t){return{xmin:0,xmax:0,ymin:0,ymax:0,pts:[],contains:function(e,r,n,i){var a=t.searchInfo.cd[0].trace._expandedIndex;return i.cd[0].trace._expandedIndex===a&&n===t.pointNumber},isRect:!1,degenerate:!1,subtract:t.subtract}}function w(t){for(var e=[],r=b(t[0])?0:t[0][0][0],n=r,i=b(t[0])?0:t[0][0][1],a=i,o=0;o<t.length;o++)if(b(t[o]))e.push(_(t[o]));else{var s=l.tester(t[o]);s.subtract=t[o].subtract,e.push(s),r=Math.min(r,s.xmin),n=Math.max(n,s.xmax),i=Math.min(i,s.ymin),a=Math.max(a,s.ymax)}return{xmin:r,xmax:n,ymin:i,ymax:a,pts:[],contains:function(t,r,n,i){for(var a=!1,o=0;o<e.length;o++)e[o].contains(t,r,n,i)&&(a=!1===e[o].subtract);return a},isRect:!1,degenerate:!1}}function k(t,e,r){var n=e._fullLayout,i=r.plotinfo,a=n._lastSelectedSubplot&&n._lastSelectedSubplot===i.id,o=t.shiftKey||t.altKey;a&&o&&i.selection&&i.selection.selectionDefs&&!r.selectionDefs?(r.selectionDefs=i.selection.selectionDefs,r.mergedPolygons=i.selection.mergedPolygons):o&&i.selection||T(r),a||(L(e),n._lastSelectedSubplot=i.id)}function T(t){var e=t.plotinfo;e.selection={},e.selection.selectionDefs=t.selectionDefs=[],e.selection.mergedPolygons=t.mergedPolygons=[]}function A(t,e,r,n){var i,a,o,s=[],l=e.map(y),c=r.map(y);for(o=0;o<t.calcdata.length;o++)if(!0===(a=(i=t.calcdata[o])[0].trace).visible&&a._module&&a._module.selectPoints)if(!n||a.subplot!==n&&a.geo!==n)if(\\\"splom\\\"===a.type&&a._xaxes[l[0]]&&a._yaxes[c[0]]){var u=p(a._module,i,e[0],r[0]);u.scene=t._fullLayout._splomScenes[a.uid],s.push(u)}else if(\\\"sankey\\\"===a.type){var f=p(a._module,i,e[0],r[0]);s.push(f)}else{if(-1===l.indexOf(a.xaxis))continue;if(-1===c.indexOf(a.yaxis))continue;s.push(p(a._module,i,h(t,a.xaxis),h(t,a.yaxis)))}else s.push(p(a._module,i,e[0],r[0]));return s;function p(t,e,r,n){return{_module:t,cd:e,xaxis:r,yaxis:n}}}function M(t,e){var r,n,i=[];for(r=0;r<t.length;r++){var a=t[r];i.push(a.join(\\\"L\\\")+\\\"L\\\"+a[0])}n=t.length>0?\\\"M\\\"+i.join(\\\"M\\\")+\\\"Z\\\":\\\"M0,0Z\\\",e.attr(\\\"d\\\",n)}function S(t){var e=t.searchInfo.cd[0].trace,r=t.pointNumber,n=t.pointNumbers,i=n.length>0?n[0]:r;return!!e.selectedpoints&&e.selectedpoints.indexOf(i)>-1}function E(t,e,r){var n,a,o,s;for(n=0;n<e.length;n++){var l=e[n].cd[0].trace._fullInput,c=t._fullLayout._tracePreGUI[l.uid]||{};void 0===c.selectedpoints&&(c.selectedpoints=l._input.selectedpoints||null)}if(r){var u=r.points||[];for(n=0;n<e.length;n++)(s=e[n].cd[0].trace)._input.selectedpoints=s._fullInput.selectedpoints=[],s._fullInput!==s&&(s.selectedpoints=[]);for(n=0;n<u.length;n++){var h=u[n],d=h.data,g=h.fullData;h.pointIndices?([].push.apply(d.selectedpoints,h.pointIndices),s._fullInput!==s&&[].push.apply(g.selectedpoints,h.pointIndices)):(d.selectedpoints.push(h.pointIndex),s._fullInput!==s&&g.selectedpoints.push(h.pointIndex))}}else for(n=0;n<e.length;n++)delete(s=e[n].cd[0].trace).selectedpoints,delete s._input.selectedpoints,s._fullInput!==s&&delete s._fullInput.selectedpoints;var v=!1;for(n=0;n<e.length;n++){s=(o=(a=e[n]).cd)[0].trace,i.traceIs(s,\\\"regl\\\")&&(v=!0);var m=a._module,y=m.styleOnSelect||m.style;y&&(y(t,o,o[0].node3),o[0].nodeRangePlot3&&y(t,o,o[0].nodeRangePlot3))}v&&(f(t),p(t))}function C(t,e){if(Array.isArray(t))for(var r=e.cd,n=e.cd[0].trace,i=0;i<t.length;i++)t[i]=u(t[i],n,r);return t}function L(t){var e=(t._fullLayout||{})._zoomlayer;e&&e.selectAll(\\\".select-outline\\\").remove()}e.exports={prepSelect:function(t,e,r,i,l){var u,h,f,p,y,b,_,S=i.gd,L=S._fullLayout,P=L._zoomlayer,O=i.element.getBoundingClientRect(),z=i.plotinfo,I=z.xaxis._offset,D=z.yaxis._offset,R=e-O.left,F=r-O.top,B=R,N=F,j=\\\"M\\\"+R+\\\",\\\"+F,U=i.xaxes[0]._length,V=i.yaxes[0]._length,q=i.xaxes.concat(i.yaxes),H=t.altKey;k(t,S,i),\\\"lasso\\\"===l&&(u=v([[R,F]],d.BENDPX));var G=P.selectAll(\\\"path.select-outline-\\\"+z.id).data([1,2]);G.enter().append(\\\"path\\\").attr(\\\"class\\\",function(t){return\\\"select-outline select-outline-\\\"+t+\\\" select-outline-\\\"+z.id}).attr(\\\"transform\\\",\\\"translate(\\\"+I+\\\", \\\"+D+\\\")\\\").attr(\\\"d\\\",j+\\\"Z\\\");var Y,W=P.append(\\\"path\\\").attr(\\\"class\\\",\\\"zoombox-corners\\\").style({fill:a.background,stroke:a.defaultLine,\\\"stroke-width\\\":1}).attr(\\\"transform\\\",\\\"translate(\\\"+I+\\\", \\\"+D+\\\")\\\").attr(\\\"d\\\",\\\"M0,0Z\\\"),X=L._uid+d.SELECTID,Z=[],J=A(S,i.xaxes,i.yaxes,i.subplot);function K(t,e){return\\\"log\\\"===t.type?t.p2d(e):t.p2r(e)}function $(t){var e=\\\"y\\\"===t._id.charAt(0)?1:0;return function(r){return K(t,r[e])}}function Q(t,e){return t-e}Y=z.fillRangeItems?z.fillRangeItems:\\\"select\\\"===l?function(t,e){var r=t.range={};for(y=0;y<q.length;y++){var n=q[y],i=n._id.charAt(0);r[n._id]=[K(n,e[i+\\\"min\\\"]),K(n,e[i+\\\"max\\\"])].sort(Q)}}:function(t,e,r){var n=t.lassoPoints={};for(y=0;y<q.length;y++){var i=q[y];n[i._id]=r.filtered.map($(i))}},i.moveFn=function(t,e){B=Math.max(0,Math.min(U,t+R)),N=Math.max(0,Math.min(V,e+F));var r=Math.abs(B-R),a=Math.abs(N-F);if(\\\"select\\\"===l){var o=L.selectdirection;\\\"h\\\"===(o=\\\"any\\\"===L.selectdirection?a<Math.min(.6*r,g)?\\\"h\\\":r<Math.min(.6*a,g)?\\\"v\\\":\\\"d\\\":L.selectdirection)?((p=[[R,0],[R,V],[B,V],[B,0]]).xmin=Math.min(R,B),p.xmax=Math.max(R,B),p.ymin=Math.min(0,V),p.ymax=Math.max(0,V),W.attr(\\\"d\\\",\\\"M\\\"+p.xmin+\\\",\\\"+(F-g)+\\\"h-4v\\\"+2*g+\\\"h4ZM\\\"+(p.xmax-1)+\\\",\\\"+(F-g)+\\\"h4v\\\"+2*g+\\\"h-4Z\\\")):\\\"v\\\"===o?((p=[[0,F],[0,N],[U,N],[U,F]]).xmin=Math.min(0,U),p.xmax=Math.max(0,U),p.ymin=Math.min(F,N),p.ymax=Math.max(F,N),W.attr(\\\"d\\\",\\\"M\\\"+(R-g)+\\\",\\\"+p.ymin+\\\"v-4h\\\"+2*g+\\\"v4ZM\\\"+(R-g)+\\\",\\\"+(p.ymax-1)+\\\"v4h\\\"+2*g+\\\"v-4Z\\\")):\\\"d\\\"===o&&((p=[[R,F],[R,N],[B,N],[B,F]]).xmin=Math.min(R,B),p.xmax=Math.max(R,B),p.ymin=Math.min(F,N),p.ymax=Math.max(F,N),W.attr(\\\"d\\\",\\\"M0,0Z\\\"))}else\\\"lasso\\\"===l&&(u.addPt([B,N]),p=u.filtered);i.selectionDefs&&i.selectionDefs.length?(f=function(t,e,r){return r?n.difference({regions:t,inverted:!1},{regions:[e],inverted:!1}).regions:n.union({regions:t,inverted:!1},{regions:[e],inverted:!1}).regions}(i.mergedPolygons,p,H),p.subtract=H,h=w(i.selectionDefs.concat([p]))):(f=[p],h=m(p)),M(f,G),c.throttle(X,d.SELECTDELAY,function(){var t;Z=[];var e,r=[];for(y=0;y<J.length;y++)if(e=(b=J[y])._module.selectPoints(b,h),r.push(e),t=C(e,b),Z.length)for(var n=0;n<t.length;n++)Z.push(t[n]);else Z=t;E(S,J,_={points:Z}),Y(_,p,u),i.gd.emit(\\\"plotly_selecting\\\",_)})},i.clickFn=function(t,e){var r=L.clickmode;W.remove(),c.done(X).then(function(){if(c.clear(X),2===t){for(G.remove(),y=0;y<J.length;y++)(b=J[y])._module.selectPoints(b,!1);E(S,J),T(i),S.emit(\\\"plotly_deselect\\\",null)}else r.indexOf(\\\"select\\\")>-1&&x(e,S,i.xaxes,i.yaxes,i.subplot,i,G),\\\"event\\\"===r&&S.emit(\\\"plotly_selected\\\",void 0);o.click(S,e)}).catch(s.error)},i.doneFn=function(){W.remove(),c.done(X).then(function(){c.clear(X),i.gd.emit(\\\"plotly_selected\\\",_),p&&i.selectionDefs&&(p.subtract=H,i.selectionDefs.push(p),i.mergedPolygons.length=0,[].push.apply(i.mergedPolygons,f)),i.doneFnCompleted&&i.doneFnCompleted(Z)}).catch(s.error)}},clearSelect:L,selectOnClick:x}},{\\\"../../components/color\\\":593,\\\"../../components/fx\\\":632,\\\"../../components/fx/helpers\\\":628,\\\"../../lib\\\":719,\\\"../../lib/clear_gl_canvases\\\":704,\\\"../../lib/polygon\\\":731,\\\"../../lib/throttle\\\":744,\\\"../../plot_api/subroutines\\\":758,\\\"../../registry\\\":847,\\\"./axis_ids\\\":770,\\\"./constants\\\":773,polybooljs:473}],785:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"fast-isnumeric\\\"),a=t(\\\"../../lib\\\"),o=a.cleanNumber,s=a.ms2DateTime,l=a.dateTime2ms,c=a.ensureNumber,u=a.isArrayOrTypedArray,h=t(\\\"../../constants/numerical\\\"),f=h.FP_SAFE,p=h.BADNUM,d=h.LOG_CLIP,g=t(\\\"./constants\\\"),v=t(\\\"./axis_ids\\\");function m(t){return Math.pow(10,t)}function y(t){return null!=t}e.exports=function(t,e){e=e||{};var r=t._id||\\\"x\\\",h=r.charAt(0);function x(e,r){if(e>0)return Math.log(e)/Math.LN10;if(e<=0&&r&&t.range&&2===t.range.length){var n=t.range[0],i=t.range[1];return.5*(n+i-2*d*Math.abs(n-i))}return p}function b(e,r,n){var o=l(e,n||t.calendar);if(o===p){if(!i(e))return p;e=+e;var s=Math.floor(10*a.mod(e+.05,1)),c=Math.round(e-s/10);o=l(new Date(c))+s/10}return o}function _(e,r,n){return s(e,r,n||t.calendar)}function w(e){return t._categories[Math.round(e)]}function k(e){if(y(e)){if(void 0===t._categoriesMap&&(t._categoriesMap={}),void 0!==t._categoriesMap[e])return t._categoriesMap[e];t._categories.push(\\\"number\\\"==typeof e?String(e):e);var r=t._categories.length-1;return t._categoriesMap[e]=r,r}return p}function T(e){if(t._categoriesMap)return t._categoriesMap[e]}function A(t){var e=T(t);return void 0!==e?e:i(t)?+t:void 0}function M(e){return i(e)?n.round(t._b+t._m*e,2):p}function S(e){return(e-t._b)/t._m}t.c2l=\\\"log\\\"===t.type?x:c,t.l2c=\\\"log\\\"===t.type?m:c,t.l2p=M,t.p2l=S,t.c2p=\\\"log\\\"===t.type?function(t,e){return M(x(t,e))}:M,t.p2c=\\\"log\\\"===t.type?function(t){return m(S(t))}:S,-1!==[\\\"linear\\\",\\\"-\\\"].indexOf(t.type)?(t.d2r=t.r2d=t.d2c=t.r2c=t.d2l=t.r2l=o,t.c2d=t.c2r=t.l2d=t.l2r=c,t.d2p=t.r2p=function(e){return t.l2p(o(e))},t.p2d=t.p2r=S,t.cleanPos=c):\\\"log\\\"===t.type?(t.d2r=t.d2l=function(t,e){return x(o(t),e)},t.r2d=t.r2c=function(t){return m(o(t))},t.d2c=t.r2l=o,t.c2d=t.l2r=c,t.c2r=x,t.l2d=m,t.d2p=function(e,r){return t.l2p(t.d2r(e,r))},t.p2d=function(t){return m(S(t))},t.r2p=function(e){return t.l2p(o(e))},t.p2r=S,t.cleanPos=c):\\\"date\\\"===t.type?(t.d2r=t.r2d=a.identity,t.d2c=t.r2c=t.d2l=t.r2l=b,t.c2d=t.c2r=t.l2d=t.l2r=_,t.d2p=t.r2p=function(e,r,n){return t.l2p(b(e,0,n))},t.p2d=t.p2r=function(t,e,r){return _(S(t),e,r)},t.cleanPos=function(e){return a.cleanDate(e,p,t.calendar)}):\\\"category\\\"===t.type?(t.d2c=t.d2l=k,t.r2d=t.c2d=t.l2d=w,t.d2r=t.d2l_noadd=A,t.r2c=function(e){var r=A(e);return void 0!==r?r:t.fraction2r(.5)},t.l2r=t.c2r=c,t.r2l=A,t.d2p=function(e){return t.l2p(t.r2c(e))},t.p2d=function(t){return w(S(t))},t.r2p=t.d2p,t.p2r=S,t.cleanPos=function(t){return\\\"string\\\"==typeof t&&\\\"\\\"!==t?t:c(t)}):\\\"multicategory\\\"===t.type&&(t.r2d=t.c2d=t.l2d=w,t.d2r=t.d2l_noadd=A,t.r2c=function(e){var r=A(e);return void 0!==r?r:t.fraction2r(.5)},t.r2c_just_indices=T,t.l2r=t.c2r=c,t.r2l=A,t.d2p=function(e){return t.l2p(t.r2c(e))},t.p2d=function(t){return w(S(t))},t.r2p=t.d2p,t.p2r=S,t.cleanPos=function(t){return Array.isArray(t)||\\\"string\\\"==typeof t&&\\\"\\\"!==t?t:c(t)},t.setupMultiCategory=function(n){var i,o,s=t._traceIndices,l=e._axisMatchGroups;if(l&&l.length&&0===t._categories.length)for(i=0;i<l.length;i++){var c=l[i];if(c[r])for(var f in c)if(f!==r){var p=e[v.id2name(f)];s=s.concat(p._traceIndices)}}var d=[[0,{}],[0,{}]],g=[];for(i=0;i<s.length;i++){var m=n[s[i]];if(h in m){var x=m[h],b=m._length||a.minRowLength(x);if(u(x[0])&&u(x[1]))for(o=0;o<b;o++){var _=x[0][o],w=x[1][o];y(_)&&y(w)&&(g.push([_,w]),_ in d[0][1]||(d[0][1][_]=d[0][0]++),w in d[1][1]||(d[1][1][w]=d[1][0]++))}}}for(g.sort(function(t,e){var r=d[0][1],n=r[t[0]]-r[e[0]];if(n)return n;var i=d[1][1];return i[t[1]]-i[e[1]]}),i=0;i<g.length;i++)k(g[i])}),t.fraction2r=function(e){var r=t.r2l(t.range[0]),n=t.r2l(t.range[1]);return t.l2r(r+e*(n-r))},t.r2fraction=function(e){var r=t.r2l(t.range[0]),n=t.r2l(t.range[1]);return(t.r2l(e)-r)/(n-r)},t.cleanRange=function(e,r){r||(r={}),e||(e=\\\"range\\\");var n,o,s=a.nestedProperty(t,e).get();if(o=(o=\\\"date\\\"===t.type?a.dfltRange(t.calendar):\\\"y\\\"===h?g.DFLTRANGEY:r.dfltRange||g.DFLTRANGEX).slice(),s&&2===s.length)for(\\\"date\\\"!==t.type||t.autorange||(s[0]=a.cleanDate(s[0],p,t.calendar),s[1]=a.cleanDate(s[1],p,t.calendar)),n=0;n<2;n++)if(\\\"date\\\"===t.type){if(!a.isDateTime(s[n],t.calendar)){t[e]=o;break}if(t.r2l(s[0])===t.r2l(s[1])){var l=a.constrain(t.r2l(s[0]),a.MIN_MS+1e3,a.MAX_MS-1e3);s[0]=t.l2r(l-1e3),s[1]=t.l2r(l+1e3);break}}else{if(!i(s[n])){if(!i(s[1-n])){t[e]=o;break}s[n]=s[1-n]*(n?10:.1)}if(s[n]<-f?s[n]=-f:s[n]>f&&(s[n]=f),s[0]===s[1]){var c=Math.max(1,Math.abs(1e-6*s[0]));s[0]-=c,s[1]+=c}}else a.nestedProperty(t,e).set(o)},t.setScale=function(r){var n=e._size;if(t.overlaying){var i=v.getFromId({_fullLayout:e},t.overlaying);t.domain=i.domain}var a=r&&t._r?\\\"_r\\\":\\\"range\\\",o=t.calendar;t.cleanRange(a);var s=t.r2l(t[a][0],o),l=t.r2l(t[a][1],o);if(\\\"y\\\"===h?(t._offset=n.t+(1-t.domain[1])*n.h,t._length=n.h*(t.domain[1]-t.domain[0]),t._m=t._length/(s-l),t._b=-t._m*l):(t._offset=n.l+t.domain[0]*n.w,t._length=n.w*(t.domain[1]-t.domain[0]),t._m=t._length/(l-s),t._b=-t._m*s),!isFinite(t._m)||!isFinite(t._b)||t._length<0)throw e._replotting=!1,new Error(\\\"Something went wrong with axis scaling\\\")},t.makeCalcdata=function(e,r){var n,i,o,s,l=t.type,c=\\\"date\\\"===l&&e[r+\\\"calendar\\\"];if(r in e){if(n=e[r],s=e._length||a.minRowLength(n),a.isTypedArray(n)&&(\\\"linear\\\"===l||\\\"log\\\"===l)){if(s===n.length)return n;if(n.subarray)return n.subarray(0,s)}if(\\\"multicategory\\\"===l)return function(t,e){for(var r=new Array(e),n=0;n<e;n++){var i=(t[0]||[])[n],a=(t[1]||[])[n];r[n]=T([i,a])}return r}(n,s);for(i=new Array(s),o=0;o<s;o++)i[o]=t.d2c(n[o],0,c)}else{var u=r+\\\"0\\\"in e?t.d2c(e[r+\\\"0\\\"],0,c):0,h=e[\\\"d\\\"+r]?Number(e[\\\"d\\\"+r]):1;for(n=e[{x:\\\"y\\\",y:\\\"x\\\"}[r]],s=e._length||n.length,i=new Array(s),o=0;o<s;o++)i[o]=u+o*h}return i},t.isValidRange=function(e){return Array.isArray(e)&&2===e.length&&i(t.r2l(e[0]))&&i(t.r2l(e[1]))},t.isPtWithinRange=function(e,r){var n=t.c2l(e[h],null,r),i=t.r2l(t.range[0]),a=t.r2l(t.range[1]);return i<a?i<=n&&n<=a:a<=n&&n<=i},t.clearCalc=function(){var n=function(){t._categories=[],t._categoriesMap={}},i=e._axisMatchGroups;if(i&&i.length){for(var a=!1,o=0;o<i.length;o++){var s=i[o];if(s[r]){a=!0;var l=null,c=null;for(var u in s){var h=e[v.id2name(u)];if(h._categories){l=h._categories,c=h._categoriesMap;break}}l&&c?(t._categories=l,t._categoriesMap=c):n();break}}a||n()}else n();if(t._initialCategories)for(var f=0;f<t._initialCategories.length;f++)k(t._initialCategories[f])},t.sortByInitialCategories=function(){var n=[];if(t._categories=[],t._categoriesMap={},t._initialCategories)for(var i=0;i<t._initialCategories.length;i++)k(t._initialCategories[i]);n=n.concat(t._traceIndices);var a=t._matchGroup;for(var o in a)if(r!==o){var s=e[v.id2name(o)];s._categories=t._categories,s._categoriesMap=t._categoriesMap,n=n.concat(s._traceIndices)}return n};var E=e._d3locale;\\\"date\\\"===t.type&&(t._dateFormat=E?E.timeFormat.utc:n.time.format.utc,t._extraFormat=e._extraFormat),t._separators=e.separators,t._numFormat=E?E.numberFormat:n.format,delete t._minDtick,delete t._forceTick0}},{\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"./axis_ids\\\":770,\\\"./constants\\\":773,d3:163,\\\"fast-isnumeric\\\":225}],786:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./layout_attributes\\\"),a=t(\\\"../array_container_defaults\\\");function o(t){var e=[\\\"showexponent\\\",\\\"showtickprefix\\\",\\\"showticksuffix\\\"].filter(function(e){return void 0!==t[e]});if(e.every(function(r){return t[r]===t[e[0]]})||1===e.length)return t[e[0]]}function s(t,e){function r(r,a){return n.coerce(t,e,i.tickformatstops,r,a)}r(\\\"enabled\\\")&&(r(\\\"dtickrange\\\"),r(\\\"value\\\"))}e.exports=function(t,e,r,l,c,u){u&&1!==u.pass||function(t,e,r,n,i){var a=o(t);r(\\\"tickprefix\\\")&&r(\\\"showtickprefix\\\",a);r(\\\"ticksuffix\\\",i.tickSuffixDflt)&&r(\\\"showticksuffix\\\",a)}(t,0,r,0,c),u&&2!==u.pass||function(t,e,r,l,c){var u=o(t);r(\\\"tickprefix\\\")&&r(\\\"showtickprefix\\\",u);r(\\\"ticksuffix\\\",c.tickSuffixDflt)&&r(\\\"showticksuffix\\\",u);if(r(\\\"showticklabels\\\")){var h=c.font||{},f=e.color,p=f&&f!==i.color.dflt?f:h.color;if(n.coerceFont(r,\\\"tickfont\\\",{family:h.family,size:h.size,color:p}),r(\\\"tickangle\\\"),\\\"category\\\"!==l){var d=r(\\\"tickformat\\\"),g=t.tickformatstops;Array.isArray(g)&&g.length&&a(t,e,{name:\\\"tickformatstops\\\",inclusionAttr:\\\"enabled\\\",handleItemDefaults:s}),d||\\\"date\\\"===l||(r(\\\"showexponent\\\",u),r(\\\"exponentformat\\\"),r(\\\"separatethousands\\\"))}}}(t,e,r,l,c)}},{\\\"../../lib\\\":719,\\\"../array_container_defaults\\\":763,\\\"./layout_attributes\\\":779}],787:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./layout_attributes\\\");e.exports=function(t,e,r,a){var o=n.coerce2(t,e,i,\\\"ticklen\\\"),s=n.coerce2(t,e,i,\\\"tickwidth\\\"),l=n.coerce2(t,e,i,\\\"tickcolor\\\",e.color);r(\\\"ticks\\\",a.outerTicks||o||s||l?\\\"outside\\\":\\\"\\\")||(delete e.ticklen,delete e.tickwidth,delete e.tickcolor)}},{\\\"../../lib\\\":719,\\\"./layout_attributes\\\":779}],788:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./clean_ticks\\\");e.exports=function(t,e,r,i){var a;\\\"array\\\"!==t.tickmode||\\\"log\\\"!==i&&\\\"date\\\"!==i?a=r(\\\"tickmode\\\",Array.isArray(t.tickvals)?\\\"array\\\":t.dtick?\\\"linear\\\":\\\"auto\\\"):a=e.tickmode=\\\"auto\\\";if(\\\"auto\\\"===a)r(\\\"nticks\\\");else if(\\\"linear\\\"===a){var o=e.dtick=n.dtick(t.dtick,i);e.tick0=n.tick0(t.tick0,i,e.calendar,o)}else if(\\\"multicategory\\\"!==i){void 0===r(\\\"tickvals\\\")?e.tickmode=\\\"auto\\\":r(\\\"ticktext\\\")}}},{\\\"./clean_ticks\\\":772}],789:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../registry\\\"),a=t(\\\"../../components/drawing\\\"),o=t(\\\"./axes\\\");e.exports=function(t,e,r,s){var l=t._fullLayout;if(0!==e.length){var c,u,h,f;s&&(c=s());var p=n.ease(r.easing);return t._transitionData._interruptCallbacks.push(function(){return window.cancelAnimationFrame(f),f=null,function(){for(var r={},n=0;n<e.length;n++){var a=e[n];a.xr0&&(r[a.plotinfo.xaxis._name+\\\".range\\\"]=a.xr0.slice()),a.yr0&&(r[a.plotinfo.yaxis._name+\\\".range\\\"]=a.yr0.slice())}return i.call(\\\"relayout\\\",t,r).then(function(){for(var t=0;t<e.length;t++)d(e[t].plotinfo)})}()}),u=Date.now(),f=window.requestAnimationFrame(function n(){h=Date.now();for(var a=Math.min(1,(h-u)/r.duration),o=p(a),s=0;s<e.length;s++)g(e[s],o);h-u>r.duration?(function(){for(var r={},n=0;n<e.length;n++){var a=e[n];a.xr1&&(r[a.plotinfo.xaxis._name+\\\".range\\\"]=a.xr1.slice()),a.yr1&&(r[a.plotinfo.yaxis._name+\\\".range\\\"]=a.yr1.slice())}c&&c(),i.call(\\\"relayout\\\",t,r).then(function(){for(var t=0;t<e.length;t++)d(e[t].plotinfo)})}(),f=window.cancelAnimationFrame(n)):f=window.requestAnimationFrame(n)}),Promise.resolve()}function d(t){var e=t.xaxis,r=t.yaxis;l._defs.select(\\\"#\\\"+t.clipId+\\\"> rect\\\").call(a.setTranslate,0,0).call(a.setScale,1,1),t.plot.call(a.setTranslate,e._offset,r._offset).call(a.setScale,1,1);var n=t.plot.selectAll(\\\".scatterlayer .trace\\\");n.selectAll(\\\".point\\\").call(a.setPointGroupScale,1,1),n.selectAll(\\\".textpoint\\\").call(a.setTextPointsScale,1,1),n.call(a.hideOutsideRangePoints,t)}function g(e,r){var n=e.plotinfo,i=n.xaxis,s=n.yaxis,l=e.xr0,c=e.xr1,u=i._length,h=e.yr0,f=e.yr1,p=s._length,d=!!c,g=!!f,v=[];if(d){var m=l[1]-l[0],y=c[1]-c[0];v[0]=(l[0]*(1-r)+r*c[0]-l[0])/(l[1]-l[0])*u,v[2]=u*(1-r+r*y/m),i.range[0]=l[0]*(1-r)+r*c[0],i.range[1]=l[1]*(1-r)+r*c[1]}else v[0]=0,v[2]=u;if(g){var x=h[1]-h[0],b=f[1]-f[0];v[1]=(h[1]*(1-r)+r*f[1]-h[1])/(h[0]-h[1])*p,v[3]=p*(1-r+r*b/x),s.range[0]=h[0]*(1-r)+r*f[0],s.range[1]=h[1]*(1-r)+r*f[1]}else v[1]=0,v[3]=p;o.drawOne(t,i,{skipTitle:!0}),o.drawOne(t,s,{skipTitle:!0}),o.redrawComponents(t,[i._id,s._id]);var _=d?u/v[2]:1,w=g?p/v[3]:1,k=d?v[0]:0,T=g?v[1]:0,A=d?v[0]/v[2]*u:0,M=g?v[1]/v[3]*p:0,S=i._offset-A,E=s._offset-M;n.clipRect.call(a.setTranslate,k,T).call(a.setScale,1/_,1/w),n.plot.call(a.setTranslate,S,E).call(a.setScale,_,w),a.setPointGroupScale(n.zoomScalePts,1/_,1/w),a.setTextPointsScale(n.zoomScaleTxt,1/_,1/w)}o.redrawComponents(t)}},{\\\"../../components/drawing\\\":614,\\\"../../registry\\\":847,\\\"./axes\\\":767,d3:163}],790:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\").traceIs,i=t(\\\"./axis_autotype\\\");function a(t){return{v:\\\"x\\\",h:\\\"y\\\"}[t.orientation||\\\"v\\\"]}function o(t,e){var r=a(t),i=n(t,\\\"box-violin\\\"),o=n(t._fullInput||{},\\\"candlestick\\\");return i&&!o&&e===r&&void 0===t[r]&&void 0===t[r+\\\"0\\\"]}e.exports=function(t,e,r,s){\\\"-\\\"===r(\\\"type\\\",(s.splomStash||{}).type)&&(!function(t,e){if(\\\"-\\\"!==t.type)return;var r=t._id,s=r.charAt(0);-1!==r.indexOf(\\\"scene\\\")&&(r=s);var l=function(t,e,r){for(var n=0;n<t.length;n++){var i=t[n];if(\\\"splom\\\"===i.type&&i._length>0&&(i[\\\"_\\\"+r+\\\"axes\\\"]||{})[e])return i;if((i[r+\\\"axis\\\"]||r)===e){if(o(i,r))return i;if((i[r]||[]).length||i[r+\\\"0\\\"])return i}}}(e,r,s);if(!l)return;if(\\\"histogram\\\"===l.type&&s==={v:\\\"y\\\",h:\\\"x\\\"}[l.orientation||\\\"v\\\"])return void(t.type=\\\"linear\\\");var c,u=s+\\\"calendar\\\",h=l[u],f={noMultiCategory:!n(l,\\\"cartesian\\\")||n(l,\\\"noMultiCategory\\\")};if(o(l,s)){var p=a(l),d=[];for(c=0;c<e.length;c++){var g=e[c];n(g,\\\"box-violin\\\")&&(g[s+\\\"axis\\\"]||s)===r&&(void 0!==g[p]?d.push(g[p][0]):void 0!==g.name?d.push(g.name):d.push(\\\"text\\\"),g[u]!==h&&(h=void 0))}t.type=i(d,h,f)}else if(\\\"splom\\\"===l.type){var v=l.dimensions,m=v[l._axesDim[r]];m.visible&&(t.type=i(m.values,h,f))}else t.type=i(l[s]||[l[s+\\\"0\\\"]],h,f)}(e,s.data),\\\"-\\\"===e.type?e.type=\\\"linear\\\":t.type=e.type)}},{\\\"../../registry\\\":847,\\\"./axis_autotype\\\":768}],791:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../registry\\\"),i=t(\\\"../lib\\\");function a(t,e,r){var n,a,o,s=!1;if(\\\"data\\\"===e.type)n=t._fullData[null!==e.traces?e.traces[0]:0];else{if(\\\"layout\\\"!==e.type)return!1;n=t._fullLayout}return a=i.nestedProperty(n,e.prop).get(),(o=r[e.type]=r[e.type]||{}).hasOwnProperty(e.prop)&&o[e.prop]!==a&&(s=!0),o[e.prop]=a,{changed:s,value:a}}function o(t,e){var r=[],n=e[0],a={};if(\\\"string\\\"==typeof n)a[n]=e[1];else{if(!i.isPlainObject(n))return r;a=n}return l(a,function(t,e,n){r.push({type:\\\"layout\\\",prop:t,value:n})},\\\"\\\",0),r}function s(t,e){var r,n,a,o,s=[];if(n=e[0],a=e[1],r=e[2],o={},\\\"string\\\"==typeof n)o[n]=a;else{if(!i.isPlainObject(n))return s;o=n,void 0===r&&(r=a)}return void 0===r&&(r=null),l(o,function(e,n,i){var a,o;if(Array.isArray(i)){o=i.slice();var l=Math.min(o.length,t.data.length);r&&(l=Math.min(l,r.length)),a=[];for(var c=0;c<l;c++)a[c]=r?r[c]:c}else o=i,a=r?r.slice():null;if(null===a)Array.isArray(o)&&(o=o[0]);else if(Array.isArray(a)){if(!Array.isArray(o)){var u=o;o=[];for(var h=0;h<a.length;h++)o[h]=u}o.length=Math.min(a.length,o.length)}s.push({type:\\\"data\\\",prop:e,traces:a,value:o})},\\\"\\\",0),s}function l(t,e,r,n){Object.keys(t).forEach(function(a){var o=t[a];if(\\\"_\\\"!==a[0]){var s=r+(n>0?\\\".\\\":\\\"\\\")+a;i.isPlainObject(o)?l(o,e,s,n+1):e(s,a,o)}})}r.manageCommandObserver=function(t,e,n,o){var s={},l=!0;e&&e._commandObserver&&(s=e._commandObserver),s.cache||(s.cache={}),s.lookupTable={};var c=r.hasSimpleAPICommandBindings(t,n,s.lookupTable);if(e&&e._commandObserver){if(c)return s;if(e._commandObserver.remove)return e._commandObserver.remove(),e._commandObserver=null,s}if(c){a(t,c,s.cache),s.check=function(){if(l){var e=a(t,c,s.cache);return e.changed&&o&&void 0!==s.lookupTable[e.value]&&(s.disable(),Promise.resolve(o({value:e.value,type:c.type,prop:c.prop,traces:c.traces,index:s.lookupTable[e.value]})).then(s.enable,s.enable)),e.changed}};for(var u=[\\\"plotly_relayout\\\",\\\"plotly_redraw\\\",\\\"plotly_restyle\\\",\\\"plotly_update\\\",\\\"plotly_animatingframe\\\",\\\"plotly_afterplot\\\"],h=0;h<u.length;h++)t._internalOn(u[h],s.check);s.remove=function(){for(var e=0;e<u.length;e++)t._removeInternalListener(u[e],s.check)}}else i.log(\\\"Unable to automatically bind plot updates to API command\\\"),s.lookupTable={},s.remove=function(){};return s.disable=function(){l=!1},s.enable=function(){l=!0},e&&(e._commandObserver=s),s},r.hasSimpleAPICommandBindings=function(t,e,n){var i,a,o=e.length;for(i=0;i<o;i++){var s,l=e[i],c=l.method,u=l.args;if(Array.isArray(u)||(u=[]),!c)return!1;var h=r.computeAPICommandBindings(t,c,u);if(1!==h.length)return!1;if(a){if((s=h[0]).type!==a.type)return!1;if(s.prop!==a.prop)return!1;if(Array.isArray(a.traces)){if(!Array.isArray(s.traces))return!1;s.traces.sort();for(var f=0;f<a.traces.length;f++)if(a.traces[f]!==s.traces[f])return!1}else if(s.prop!==a.prop)return!1}else a=h[0],Array.isArray(a.traces)&&a.traces.sort();var p=(s=h[0]).value;if(Array.isArray(p)){if(1!==p.length)return!1;p=p[0]}n&&(n[p]=i)}return a},r.executeAPICommand=function(t,e,r){if(\\\"skip\\\"===e)return Promise.resolve();var a=n.apiMethodRegistry[e],o=[t];Array.isArray(r)||(r=[]);for(var s=0;s<r.length;s++)o.push(r[s]);return a.apply(null,o).catch(function(t){return i.warn(\\\"API call to Plotly.\\\"+e+\\\" rejected.\\\",t),Promise.reject(t)})},r.computeAPICommandBindings=function(t,e,r){var n;switch(Array.isArray(r)||(r=[]),e){case\\\"restyle\\\":n=s(t,r);break;case\\\"relayout\\\":n=o(t,r);break;case\\\"update\\\":n=s(t,[r[0],r[2]]).concat(o(t,[r[1]]));break;case\\\"animate\\\":n=function(t,e){return Array.isArray(e[0])&&1===e[0].length&&-1!==[\\\"string\\\",\\\"number\\\"].indexOf(typeof e[0][0])?[{type:\\\"layout\\\",prop:\\\"_currentFrame\\\",value:e[0][0].toString()}]:[]}(0,r);break;default:n=[]}return n}},{\\\"../lib\\\":719,\\\"../registry\\\":847}],792:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../lib/extend\\\").extendFlat;r.attributes=function(t,e){e=e||{};var r={valType:\\\"info_array\\\",editType:(t=t||{}).editType,items:[{valType:\\\"number\\\",min:0,max:1,editType:t.editType},{valType:\\\"number\\\",min:0,max:1,editType:t.editType}],dflt:[0,1]},i=(t.name&&t.name,t.trace,e.description&&e.description,{x:n({},r,{}),y:n({},r,{}),editType:t.editType});return t.noGridCell||(i.row={valType:\\\"integer\\\",min:0,dflt:0,editType:t.editType},i.column={valType:\\\"integer\\\",min:0,dflt:0,editType:t.editType}),i},r.defaults=function(t,e,r,n){var i=n&&n.x||[0,1],a=n&&n.y||[0,1],o=e.grid;if(o){var s=r(\\\"domain.column\\\");void 0!==s&&(s<o.columns?i=o._domains.x[s]:delete t.domain.column);var l=r(\\\"domain.row\\\");void 0!==l&&(l<o.rows?a=o._domains.y[l]:delete t.domain.row)}r(\\\"domain.x\\\",i),r(\\\"domain.y\\\",a)}},{\\\"../lib/extend\\\":710}],793:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){var e=t.editType,r=t.colorEditType;void 0===r&&(r=e);var n={family:{valType:\\\"string\\\",noBlank:!0,strict:!0,editType:e},size:{valType:\\\"number\\\",min:1,editType:e},color:{valType:\\\"color\\\",editType:r},editType:e};return t.arrayOk&&(n.family.arrayOk=!0,n.size.arrayOk=!0,n.color.arrayOk=!0),n}},{}],794:[function(t,e,r){\\\"use strict\\\";e.exports={_isLinkedToArray:\\\"frames_entry\\\",group:{valType:\\\"string\\\"},name:{valType:\\\"string\\\"},traces:{valType:\\\"any\\\"},baseframe:{valType:\\\"string\\\"},data:{valType:\\\"any\\\"},layout:{valType:\\\"any\\\"}}},{}],795:[function(t,e,r){\\\"use strict\\\";r.projNames={equirectangular:\\\"equirectangular\\\",mercator:\\\"mercator\\\",orthographic:\\\"orthographic\\\",\\\"natural earth\\\":\\\"naturalEarth\\\",kavrayskiy7:\\\"kavrayskiy7\\\",miller:\\\"miller\\\",robinson:\\\"robinson\\\",eckert4:\\\"eckert4\\\",\\\"azimuthal equal area\\\":\\\"azimuthalEqualArea\\\",\\\"azimuthal equidistant\\\":\\\"azimuthalEquidistant\\\",\\\"conic equal area\\\":\\\"conicEqualArea\\\",\\\"conic conformal\\\":\\\"conicConformal\\\",\\\"conic equidistant\\\":\\\"conicEquidistant\\\",gnomonic:\\\"gnomonic\\\",stereographic:\\\"stereographic\\\",mollweide:\\\"mollweide\\\",hammer:\\\"hammer\\\",\\\"transverse mercator\\\":\\\"transverseMercator\\\",\\\"albers usa\\\":\\\"albersUsa\\\",\\\"winkel tripel\\\":\\\"winkel3\\\",aitoff:\\\"aitoff\\\",sinusoidal:\\\"sinusoidal\\\"},r.axesNames=[\\\"lonaxis\\\",\\\"lataxis\\\"],r.lonaxisSpan={orthographic:180,\\\"azimuthal equal area\\\":360,\\\"azimuthal equidistant\\\":360,\\\"conic conformal\\\":180,gnomonic:160,stereographic:180,\\\"transverse mercator\\\":180,\\\"*\\\":360},r.lataxisSpan={\\\"conic conformal\\\":150,stereographic:179.5,\\\"*\\\":180},r.scopeDefaults={world:{lonaxisRange:[-180,180],lataxisRange:[-90,90],projType:\\\"equirectangular\\\",projRotate:[0,0,0]},usa:{lonaxisRange:[-180,-50],lataxisRange:[15,80],projType:\\\"albers usa\\\"},europe:{lonaxisRange:[-30,60],lataxisRange:[30,85],projType:\\\"conic conformal\\\",projRotate:[15,0,0],projParallels:[0,60]},asia:{lonaxisRange:[22,160],lataxisRange:[-15,55],projType:\\\"mercator\\\",projRotate:[0,0,0]},africa:{lonaxisRange:[-30,60],lataxisRange:[-40,40],projType:\\\"mercator\\\",projRotate:[0,0,0]},\\\"north america\\\":{lonaxisRange:[-180,-45],lataxisRange:[5,85],projType:\\\"conic conformal\\\",projRotate:[-100,0,0],projParallels:[29.5,45.5]},\\\"south america\\\":{lonaxisRange:[-100,-30],lataxisRange:[-60,15],projType:\\\"mercator\\\",projRotate:[0,0,0]}},r.clipPad=.001,r.precision=.1,r.landColor=\\\"#F0DC82\\\",r.waterColor=\\\"#3399FF\\\",r.locationmodeToLayer={\\\"ISO-3\\\":\\\"countries\\\",\\\"USA-states\\\":\\\"subunits\\\",\\\"country names\\\":\\\"countries\\\"},r.sphereSVG={type:\\\"Sphere\\\"},r.fillLayers={ocean:1,land:1,lakes:1},r.lineLayers={subunits:1,countries:1,coastlines:1,rivers:1,frame:1},r.layers=[\\\"bg\\\",\\\"ocean\\\",\\\"land\\\",\\\"lakes\\\",\\\"subunits\\\",\\\"countries\\\",\\\"coastlines\\\",\\\"rivers\\\",\\\"lataxis\\\",\\\"lonaxis\\\",\\\"frame\\\",\\\"backplot\\\",\\\"frontplot\\\"],r.layersForChoropleth=[\\\"bg\\\",\\\"ocean\\\",\\\"land\\\",\\\"subunits\\\",\\\"countries\\\",\\\"coastlines\\\",\\\"lataxis\\\",\\\"lonaxis\\\",\\\"frame\\\",\\\"backplot\\\",\\\"rivers\\\",\\\"lakes\\\",\\\"frontplot\\\"],r.layerNameToAdjective={ocean:\\\"ocean\\\",land:\\\"land\\\",lakes:\\\"lake\\\",subunits:\\\"subunit\\\",countries:\\\"country\\\",coastlines:\\\"coastline\\\",rivers:\\\"river\\\",frame:\\\"frame\\\"}},{}],796:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../registry\\\"),a=t(\\\"../../lib\\\"),o=t(\\\"../../components/color\\\"),s=t(\\\"../../components/drawing\\\"),l=t(\\\"../../components/fx\\\"),c=t(\\\"../plots\\\"),u=t(\\\"../cartesian/axes\\\"),h=t(\\\"../../components/dragelement\\\"),f=t(\\\"../cartesian/select\\\").prepSelect,p=t(\\\"../cartesian/select\\\").selectOnClick,d=t(\\\"./zoom\\\"),g=t(\\\"./constants\\\"),v=t(\\\"../../lib/topojson_utils\\\"),m=t(\\\"topojson-client\\\").feature;function y(t){this.id=t.id,this.graphDiv=t.graphDiv,this.container=t.container,this.topojsonURL=t.topojsonURL,this.isStatic=t.staticPlot,this.topojsonName=null,this.topojson=null,this.projection=null,this.scope=null,this.viewInitial=null,this.fitScale=null,this.bounds=null,this.midPt=null,this.hasChoropleth=!1,this.traceHash={},this.layers={},this.basePaths={},this.dataPaths={},this.dataPoints={},this.clipDef=null,this.clipRect=null,this.bgRect=null,this.makeFramework()}t(\\\"./projections\\\")(n);var x=y.prototype;e.exports=function(t){return new y(t)},x.plot=function(t,e,r){var n=this,i=e[this.id],a=!1;for(var o in g.layerNameToAdjective)if(\\\"frame\\\"!==o&&i[\\\"show\\\"+o]){a=!0;break}for(var s=0;s<t.length;s++)if(t[0][0].trace.locationmode){a=!0;break}if(!a)return n.update(t,e);var l=v.getTopojsonName(i);null===n.topojson||l!==n.topojsonName?(n.topojsonName=l,void 0===PlotlyGeoAssets.topojson[n.topojsonName]?r.push(n.fetchTopojson().then(function(r){PlotlyGeoAssets.topojson[n.topojsonName]=r,n.topojson=r,n.update(t,e)})):(n.topojson=PlotlyGeoAssets.topojson[n.topojsonName],n.update(t,e))):n.update(t,e)},x.fetchTopojson=function(){var t=v.getTopojsonPath(this.topojsonURL,this.topojsonName);return new Promise(function(e,r){n.json(t,function(n,i){if(n)return 404===n.status?r(new Error([\\\"plotly.js could not find topojson file at\\\",t,\\\".\\\",\\\"Make sure the *topojsonURL* plot config option\\\",\\\"is set properly.\\\"].join(\\\" \\\"))):r(new Error([\\\"unexpected error while fetching topojson file at\\\",t].join(\\\" \\\")));e(i)})})},x.update=function(t,e){var r=e[this.id];if(!this.updateProjection(e,r)){this.hasChoropleth=!1;for(var n=0;n<t.length;n++)if(\\\"choropleth\\\"===t[n][0].trace.type){this.hasChoropleth=!0;break}this.viewInitial&&this.scope===r.scope||this.saveViewInitial(r),this.scope=r.scope,this.updateBaseLayers(e,r),this.updateDims(e,r),this.updateFx(e,r),c.generalUpdatePerTraceModule(this.graphDiv,this,t,r);var i=this.layers.frontplot.select(\\\".scatterlayer\\\");this.dataPoints.point=i.selectAll(\\\".point\\\"),this.dataPoints.text=i.selectAll(\\\"text\\\"),this.dataPaths.line=i.selectAll(\\\".js-line\\\");var a=this.layers.backplot.select(\\\".choroplethlayer\\\");this.dataPaths.choropleth=a.selectAll(\\\"path\\\"),this.render()}},x.updateProjection=function(t,e){var r=t._size,o=e.domain,s=e.projection,l=s.rotation||{},c=e.center||{},u=this.projection=function(t){for(var e=t.projection.type,r=n.geo[g.projNames[e]](),i=t._isClipped?g.lonaxisSpan[e]/2:null,a=[\\\"center\\\",\\\"rotate\\\",\\\"parallels\\\",\\\"clipExtent\\\"],o=function(t){return t?r:[]},s=0;s<a.length;s++){var l=a[s];\\\"function\\\"!=typeof r[l]&&(r[l]=o)}r.isLonLatOverEdges=function(t){if(null===r(t))return!0;if(i){var e=r.rotate();return n.geo.distance(t,[-e[0],-e[1]])>i*Math.PI/180}return!1},r.getPath=function(){return n.geo.path().projection(r)},r.getBounds=function(t){return r.getPath().bounds(t)},r.fitExtent=function(t,e){var n=t[1][0]-t[0][0],i=t[1][1]-t[0][1],a=r.clipExtent&&r.clipExtent();r.scale(150).translate([0,0]),a&&r.clipExtent(null);var o=r.getBounds(e),s=Math.min(n/(o[1][0]-o[0][0]),i/(o[1][1]-o[0][1])),l=+t[0][0]+(n-s*(o[1][0]+o[0][0]))/2,c=+t[0][1]+(i-s*(o[1][1]+o[0][1]))/2;return a&&r.clipExtent(a),r.scale(150*s).translate([l,c])},r.precision(g.precision),i&&r.clipAngle(i-g.clipPad);return r}(e);u.center([c.lon-l.lon,c.lat-l.lat]).rotate([-l.lon,-l.lat,l.roll]).parallels(s.parallels);var h=[[r.l+r.w*o.x[0],r.t+r.h*(1-o.y[1])],[r.l+r.w*o.x[1],r.t+r.h*(1-o.y[0])]],f=e.lonaxis,p=e.lataxis,d=function(t,e){var r=g.clipPad,n=t[0]+r,i=t[1]-r,a=e[0]+r,o=e[1]-r;n>0&&i<0&&(i+=360);var s=(i-n)/4;return{type:\\\"Polygon\\\",coordinates:[[[n,a],[n,o],[n+s,o],[n+2*s,o],[n+3*s,o],[i,o],[i,a],[i-s,a],[i-2*s,a],[i-3*s,a],[n,a]]]}}(f.range,p.range);u.fitExtent(h,d);var v=this.bounds=u.getBounds(d),m=this.fitScale=u.scale(),y=u.translate();if(!isFinite(v[0][0])||!isFinite(v[0][1])||!isFinite(v[1][0])||!isFinite(v[1][1])||isNaN(y[0])||isNaN(y[0])){for(var x=this.graphDiv,b=[\\\"projection.rotation\\\",\\\"center\\\",\\\"lonaxis.range\\\",\\\"lataxis.range\\\"],_=\\\"Invalid geo settings, relayout'ing to default view.\\\",w={},k=0;k<b.length;k++)w[this.id+\\\".\\\"+b[k]]=null;return this.viewInitial=null,a.warn(_),x._promises.push(i.call(\\\"relayout\\\",x,w)),_}var T=this.midPt=[(v[0][0]+v[1][0])/2,(v[0][1]+v[1][1])/2];if(u.scale(s.scale*m).translate([y[0]+(T[0]-y[0]),y[1]+(T[1]-y[1])]).clipExtent(v),e._isAlbersUsa){var A=u([c.lon,c.lat]),M=u.translate();u.translate([M[0]-(A[0]-M[0]),M[1]-(A[1]-M[1])])}},x.updateBaseLayers=function(t,e){var r=this,i=r.topojson,a=r.layers,l=r.basePaths;function c(t){return\\\"lonaxis\\\"===t||\\\"lataxis\\\"===t}function h(t){return Boolean(g.lineLayers[t])}function f(t){return Boolean(g.fillLayers[t])}var p=(this.hasChoropleth?g.layersForChoropleth:g.layers).filter(function(t){return h(t)||f(t)?e[\\\"show\\\"+t]:!c(t)||e[t].showgrid}),d=r.framework.selectAll(\\\".layer\\\").data(p,String);d.exit().each(function(t){delete a[t],delete l[t],n.select(this).remove()}),d.enter().append(\\\"g\\\").attr(\\\"class\\\",function(t){return\\\"layer \\\"+t}).each(function(t){var e=a[t]=n.select(this);\\\"bg\\\"===t?r.bgRect=e.append(\\\"rect\\\").style(\\\"pointer-events\\\",\\\"all\\\"):c(t)?l[t]=e.append(\\\"path\\\").style(\\\"fill\\\",\\\"none\\\"):\\\"backplot\\\"===t?e.append(\\\"g\\\").classed(\\\"choroplethlayer\\\",!0):\\\"frontplot\\\"===t?e.append(\\\"g\\\").classed(\\\"scatterlayer\\\",!0):h(t)?l[t]=e.append(\\\"path\\\").style(\\\"fill\\\",\\\"none\\\").style(\\\"stroke-miterlimit\\\",2):f(t)&&(l[t]=e.append(\\\"path\\\").style(\\\"stroke\\\",\\\"none\\\"))}),d.order(),d.each(function(r){var n=l[r],a=g.layerNameToAdjective[r];\\\"frame\\\"===r?n.datum(g.sphereSVG):h(r)||f(r)?n.datum(m(i,i.objects[r])):c(r)&&n.datum(function(t,e,r){var n,i,a,o=e[t],s=g.scopeDefaults[e.scope];\\\"lonaxis\\\"===t?(n=s.lonaxisRange,i=s.lataxisRange,a=function(t,e){return[t,e]}):\\\"lataxis\\\"===t&&(n=s.lataxisRange,i=s.lonaxisRange,a=function(t,e){return[e,t]});var l={type:\\\"linear\\\",range:[n[0],n[1]-1e-6],tick0:o.tick0,dtick:o.dtick};u.setConvert(l,r);var c=u.calcTicks(l);e.isScoped||\\\"lonaxis\\\"!==t||c.pop();for(var h=c.length,f=new Array(h),p=0;p<h;p++)for(var d=c[p].x,v=f[p]=[],m=i[0];m<i[1]+2.5;m+=2.5)v.push(a(d,m));return{type:\\\"MultiLineString\\\",coordinates:f}}(r,e,t)).call(o.stroke,e[r].gridcolor).call(s.dashLine,\\\"\\\",e[r].gridwidth),h(r)?n.call(o.stroke,e[a+\\\"color\\\"]).call(s.dashLine,\\\"\\\",e[a+\\\"width\\\"]):f(r)&&n.call(o.fill,e[a+\\\"color\\\"])})},x.updateDims=function(t,e){var r=this.bounds,n=(e.framewidth||0)/2,i=r[0][0]-n,a=r[0][1]-n,l=r[1][0]-i+n,c=r[1][1]-a+n;s.setRect(this.clipRect,i,a,l,c),this.bgRect.call(s.setRect,i,a,l,c).call(o.fill,e.bgcolor),this.xaxis._offset=i,this.xaxis._length=l,this.yaxis._offset=a,this.yaxis._length=c},x.updateFx=function(t,e){var r=this,a=r.graphDiv,o=r.bgRect,s=t.dragmode,c=t.clickmode;if(!r.isStatic){var u;\\\"select\\\"===s?u=function(t,e){(t.range={})[r.id]=[v([e.xmin,e.ymin]),v([e.xmax,e.ymax])]}:\\\"lasso\\\"===s&&(u=function(t,e,n){(t.lassoPoints={})[r.id]=n.filtered.map(v)});var g={element:r.bgRect.node(),gd:a,plotinfo:{id:r.id,xaxis:r.xaxis,yaxis:r.yaxis,fillRangeItems:u},xaxes:[r.xaxis],yaxes:[r.yaxis],subplot:r.id,clickFn:function(e){2===e&&t._zoomlayer.selectAll(\\\".select-outline\\\").remove()}};\\\"pan\\\"===s?(o.node().onmousedown=null,o.call(d(r,e)),o.on(\\\"dblclick.zoom\\\",function(){var t=r.viewInitial,e={};for(var n in t)e[r.id+\\\".\\\"+n]=t[n];i.call(\\\"_guiRelayout\\\",a,e),a.emit(\\\"plotly_doubleclick\\\",null)}),a._context._scrollZoom.geo||o.on(\\\"wheel.zoom\\\",null)):\\\"select\\\"!==s&&\\\"lasso\\\"!==s||(o.on(\\\".zoom\\\",null),g.prepFn=function(t,e,r){f(t,e,r,g,s)},h.init(g)),o.on(\\\"mousemove\\\",function(){var t=r.projection.invert(n.mouse(this));if(!t||isNaN(t[0])||isNaN(t[1]))return h.unhover(a,n.event);r.xaxis.p2c=function(){return t[0]},r.yaxis.p2c=function(){return t[1]},l.hover(a,n.event,r.id)}),o.on(\\\"mouseout\\\",function(){a._dragging||h.unhover(a,n.event)}),o.on(\\\"click\\\",function(){\\\"select\\\"!==s&&\\\"lasso\\\"!==s&&(c.indexOf(\\\"select\\\")>-1&&p(n.event,a,[r.xaxis],[r.yaxis],r.id,g),c.indexOf(\\\"event\\\")>-1&&l.click(a,n.event))})}function v(t){return r.projection.invert([t[0]+r.xaxis._offset,t[1]+r.yaxis._offset])}},x.makeFramework=function(){var t=this,e=t.graphDiv,r=e._fullLayout,i=\\\"clip\\\"+r._uid+t.id;t.clipDef=r._clips.append(\\\"clipPath\\\").attr(\\\"id\\\",i),t.clipRect=t.clipDef.append(\\\"rect\\\"),t.framework=n.select(t.container).append(\\\"g\\\").attr(\\\"class\\\",\\\"geo \\\"+t.id).call(s.setClipUrl,i,e),t.project=function(e){var r=t.projection(e);return r?[r[0]-t.xaxis._offset,r[1]-t.yaxis._offset]:[null,null]},t.xaxis={_id:\\\"x\\\",c2p:function(e){return t.project(e)[0]}},t.yaxis={_id:\\\"y\\\",c2p:function(e){return t.project(e)[1]}},t.mockAxis={type:\\\"linear\\\",showexponent:\\\"all\\\",exponentformat:\\\"B\\\"},u.setConvert(t.mockAxis,r)},x.saveViewInitial=function(t){var e=t.center||{},r=t.projection,n=r.rotation||{};t._isScoped?this.viewInitial={\\\"center.lon\\\":e.lon,\\\"center.lat\\\":e.lat,\\\"projection.scale\\\":r.scale}:t._isClipped?this.viewInitial={\\\"projection.scale\\\":r.scale,\\\"projection.rotation.lon\\\":n.lon,\\\"projection.rotation.lat\\\":n.lat}:this.viewInitial={\\\"center.lon\\\":e.lon,\\\"center.lat\\\":e.lat,\\\"projection.scale\\\":r.scale,\\\"projection.rotation.lon\\\":n.lon}},x.render=function(){var t,e=this.projection,r=e.getPath();function n(t){var r=e(t.lonlat);return r?\\\"translate(\\\"+r[0]+\\\",\\\"+r[1]+\\\")\\\":null}function i(t){return e.isLonLatOverEdges(t.lonlat)?\\\"none\\\":null}for(t in this.basePaths)this.basePaths[t].attr(\\\"d\\\",r);for(t in this.dataPaths)this.dataPaths[t].attr(\\\"d\\\",function(t){return r(t.geojson)});for(t in this.dataPoints)this.dataPoints[t].attr(\\\"display\\\",i).attr(\\\"transform\\\",n)}},{\\\"../../components/color\\\":593,\\\"../../components/dragelement\\\":611,\\\"../../components/drawing\\\":614,\\\"../../components/fx\\\":632,\\\"../../lib\\\":719,\\\"../../lib/topojson_utils\\\":746,\\\"../../registry\\\":847,\\\"../cartesian/axes\\\":767,\\\"../cartesian/select\\\":784,\\\"../plots\\\":828,\\\"./constants\\\":795,\\\"./projections\\\":800,\\\"./zoom\\\":801,d3:163,\\\"topojson-client\\\":540}],797:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/get_data\\\").getSubplotCalcData,i=t(\\\"../../lib\\\").counterRegex,a=t(\\\"./geo\\\"),o=\\\"geo\\\",s=i(o),l={};l[o]={valType:\\\"subplotid\\\",dflt:o,editType:\\\"calc\\\"},e.exports={attr:o,name:o,idRoot:o,idRegex:s,attrRegex:s,attributes:l,layoutAttributes:t(\\\"./layout_attributes\\\"),supplyLayoutDefaults:t(\\\"./layout_defaults\\\"),plot:function(t){for(var e=t._fullLayout,r=t.calcdata,i=e._subplots[o],s=0;s<i.length;s++){var l=i[s],c=n(r,o,l),u=e[l]._subplot;u||(u=a({id:l,graphDiv:t,container:e._geolayer.node(),topojsonURL:t._context.topojsonURL,staticPlot:t._context.staticPlot}),e[l]._subplot=u),u.plot(c,e,t._promises)}},updateFx:function(t){for(var e=t._fullLayout,r=e._subplots[o],n=0;n<r.length;n++){var i=e[r[n]];i._subplot.updateFx(e,i)}},clean:function(t,e,r,n){for(var i=n._subplots[o]||[],a=0;a<i.length;a++){var s=i[a],l=n[s]._subplot;!e[s]&&l&&(l.framework.remove(),l.clipDef.remove())}}}},{\\\"../../lib\\\":719,\\\"../../plots/get_data\\\":802,\\\"./geo\\\":796,\\\"./layout_attributes\\\":798,\\\"./layout_defaults\\\":799}],798:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/color/attributes\\\"),i=t(\\\"../domain\\\").attributes,a=t(\\\"./constants\\\"),o=t(\\\"../../plot_api/edit_types\\\").overrideAll,s={range:{valType:\\\"info_array\\\",items:[{valType:\\\"number\\\"},{valType:\\\"number\\\"}]},showgrid:{valType:\\\"boolean\\\",dflt:!1},tick0:{valType:\\\"number\\\",dflt:0},dtick:{valType:\\\"number\\\"},gridcolor:{valType:\\\"color\\\",dflt:n.lightLine},gridwidth:{valType:\\\"number\\\",min:0,dflt:1}};(e.exports=o({domain:i({name:\\\"geo\\\"},{}),resolution:{valType:\\\"enumerated\\\",values:[110,50],dflt:110,coerceNumber:!0},scope:{valType:\\\"enumerated\\\",values:Object.keys(a.scopeDefaults),dflt:\\\"world\\\"},projection:{type:{valType:\\\"enumerated\\\",values:Object.keys(a.projNames)},rotation:{lon:{valType:\\\"number\\\"},lat:{valType:\\\"number\\\"},roll:{valType:\\\"number\\\"}},parallels:{valType:\\\"info_array\\\",items:[{valType:\\\"number\\\"},{valType:\\\"number\\\"}]},scale:{valType:\\\"number\\\",min:0,dflt:1}},center:{lon:{valType:\\\"number\\\"},lat:{valType:\\\"number\\\"}},showcoastlines:{valType:\\\"boolean\\\"},coastlinecolor:{valType:\\\"color\\\",dflt:n.defaultLine},coastlinewidth:{valType:\\\"number\\\",min:0,dflt:1},showland:{valType:\\\"boolean\\\",dflt:!1},landcolor:{valType:\\\"color\\\",dflt:a.landColor},showocean:{valType:\\\"boolean\\\",dflt:!1},oceancolor:{valType:\\\"color\\\",dflt:a.waterColor},showlakes:{valType:\\\"boolean\\\",dflt:!1},lakecolor:{valType:\\\"color\\\",dflt:a.waterColor},showrivers:{valType:\\\"boolean\\\",dflt:!1},rivercolor:{valType:\\\"color\\\",dflt:a.waterColor},riverwidth:{valType:\\\"number\\\",min:0,dflt:1},showcountries:{valType:\\\"boolean\\\"},countrycolor:{valType:\\\"color\\\",dflt:n.defaultLine},countrywidth:{valType:\\\"number\\\",min:0,dflt:1},showsubunits:{valType:\\\"boolean\\\"},subunitcolor:{valType:\\\"color\\\",dflt:n.defaultLine},subunitwidth:{valType:\\\"number\\\",min:0,dflt:1},showframe:{valType:\\\"boolean\\\"},framecolor:{valType:\\\"color\\\",dflt:n.defaultLine},framewidth:{valType:\\\"number\\\",min:0,dflt:1},bgcolor:{valType:\\\"color\\\",dflt:n.background},lonaxis:s,lataxis:s},\\\"plot\\\",\\\"from-root\\\")).uirevision={valType:\\\"any\\\",editType:\\\"none\\\"}},{\\\"../../components/color/attributes\\\":592,\\\"../../plot_api/edit_types\\\":750,\\\"../domain\\\":792,\\\"./constants\\\":795}],799:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../subplot_defaults\\\"),i=t(\\\"./constants\\\"),a=t(\\\"./layout_attributes\\\"),o=i.axesNames;function s(t,e,r){var n=r(\\\"resolution\\\"),a=r(\\\"scope\\\"),s=i.scopeDefaults[a],l=r(\\\"projection.type\\\",s.projType),c=e._isAlbersUsa=\\\"albers usa\\\"===l;c&&(a=e.scope=\\\"usa\\\");var u=e._isScoped=\\\"world\\\"!==a,h=e._isConic=-1!==l.indexOf(\\\"conic\\\");e._isClipped=!!i.lonaxisSpan[l];for(var f=0;f<o.length;f++){var p,d=o[f],g=[30,10][f];if(u)p=s[d+\\\"Range\\\"];else{var v=i[d+\\\"Span\\\"],m=(v[l]||v[\\\"*\\\"])/2,y=r(\\\"projection.rotation.\\\"+d.substr(0,3),s.projRotate[f]);p=[y-m,y+m]}r(d+\\\".range\\\",p),r(d+\\\".tick0\\\"),r(d+\\\".dtick\\\",g),r(d+\\\".showgrid\\\")&&(r(d+\\\".gridcolor\\\"),r(d+\\\".gridwidth\\\"))}var x=e.lonaxis.range,b=e.lataxis.range,_=x[0],w=x[1];_>0&&w<0&&(w+=360);var k,T,A,M=(_+w)/2;if(!c){var S=u?s.projRotate:[M,0,0];k=r(\\\"projection.rotation.lon\\\",S[0]),r(\\\"projection.rotation.lat\\\",S[1]),r(\\\"projection.rotation.roll\\\",S[2]),r(\\\"showcoastlines\\\",!u)&&(r(\\\"coastlinecolor\\\"),r(\\\"coastlinewidth\\\")),r(\\\"showocean\\\")&&r(\\\"oceancolor\\\")}(c?(T=-96.6,A=38.7):(T=u?M:k,A=(b[0]+b[1])/2),r(\\\"center.lon\\\",T),r(\\\"center.lat\\\",A),h)&&r(\\\"projection.parallels\\\",s.projParallels||[0,60]);r(\\\"projection.scale\\\"),r(\\\"showland\\\")&&r(\\\"landcolor\\\"),r(\\\"showlakes\\\")&&r(\\\"lakecolor\\\"),r(\\\"showrivers\\\")&&(r(\\\"rivercolor\\\"),r(\\\"riverwidth\\\")),r(\\\"showcountries\\\",u&&\\\"usa\\\"!==a)&&(r(\\\"countrycolor\\\"),r(\\\"countrywidth\\\")),(\\\"usa\\\"===a||\\\"north america\\\"===a&&50===n)&&(r(\\\"showsubunits\\\",!0),r(\\\"subunitcolor\\\"),r(\\\"subunitwidth\\\")),u||r(\\\"showframe\\\",!0)&&(r(\\\"framecolor\\\"),r(\\\"framewidth\\\")),r(\\\"bgcolor\\\")}e.exports=function(t,e,r){n(t,e,r,{type:\\\"geo\\\",attributes:a,handleDefaults:s,partition:\\\"y\\\"})}},{\\\"../subplot_defaults\\\":842,\\\"./constants\\\":795,\\\"./layout_attributes\\\":798}],800:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){function e(t,e){return{type:\\\"Feature\\\",id:t.id,properties:t.properties,geometry:r(t.geometry,e)}}function r(e,n){if(!e)return null;if(\\\"GeometryCollection\\\"===e.type)return{type:\\\"GeometryCollection\\\",geometries:object.geometries.map(function(t){return r(t,n)})};if(!c.hasOwnProperty(e.type))return null;var i=c[e.type];return t.geo.stream(e,n(i)),i.result()}t.geo.project=function(t,e){var i=e.stream;if(!i)throw new Error(\\\"not yet supported\\\");return(t&&n.hasOwnProperty(t.type)?n[t.type]:r)(t,i)};var n={Feature:e,FeatureCollection:function(t,r){return{type:\\\"FeatureCollection\\\",features:t.features.map(function(t){return e(t,r)})}}},i=[],a=[],o={point:function(t,e){i.push([t,e])},result:function(){var t=i.length?i.length<2?{type:\\\"Point\\\",coordinates:i[0]}:{type:\\\"MultiPoint\\\",coordinates:i}:null;return i=[],t}},s={lineStart:u,point:function(t,e){i.push([t,e])},lineEnd:function(){i.length&&(a.push(i),i=[])},result:function(){var t=a.length?a.length<2?{type:\\\"LineString\\\",coordinates:a[0]}:{type:\\\"MultiLineString\\\",coordinates:a}:null;return a=[],t}},l={polygonStart:u,lineStart:u,point:function(t,e){i.push([t,e])},lineEnd:function(){var t=i.length;if(t){do{i.push(i[0].slice())}while(++t<4);a.push(i),i=[]}},polygonEnd:u,result:function(){if(!a.length)return null;var t=[],e=[];return a.forEach(function(r){!function(t){if((e=t.length)<4)return!1;for(var e,r=0,n=t[e-1][1]*t[0][0]-t[e-1][0]*t[0][1];++r<e;)n+=t[r-1][1]*t[r][0]-t[r-1][0]*t[r][1];return n<=0}(r)?e.push(r):t.push([r])}),e.forEach(function(e){var r=e[0];t.some(function(t){if(function(t,e){for(var r=e[0],n=e[1],i=!1,a=0,o=t.length,s=o-1;a<o;s=a++){var l=t[a],c=l[0],u=l[1],h=t[s],f=h[0],p=h[1];u>n^p>n&&r<(f-c)*(n-u)/(p-u)+c&&(i=!i)}return i}(t[0],r))return t.push(e),!0})||t.push([e])}),a=[],t.length?t.length>1?{type:\\\"MultiPolygon\\\",coordinates:t}:{type:\\\"Polygon\\\",coordinates:t[0]}:null}},c={Point:o,MultiPoint:o,LineString:s,MultiLineString:s,Polygon:l,MultiPolygon:l,Sphere:l};function u(){}var h=1e-6,f=h*h,p=Math.PI,d=p/2,g=(Math.sqrt(p),p/180),v=180/p;function m(t){return t>1?d:t<-1?-d:Math.asin(t)}function y(t){return t>1?0:t<-1?p:Math.acos(t)}var x=t.geo.projection,b=t.geo.projectionMutator;function _(t,e){var r=(2+d)*Math.sin(e);e/=2;for(var n=0,i=1/0;n<10&&Math.abs(i)>h;n++){var a=Math.cos(e);e-=i=(e+Math.sin(e)*(a+2)-r)/(2*a*(1+a))}return[2/Math.sqrt(p*(4+p))*t*(1+Math.cos(e)),2*Math.sqrt(p/(4+p))*Math.sin(e)]}t.geo.interrupt=function(e){var r,n=[[[[-p,0],[0,d],[p,0]]],[[[-p,0],[0,-d],[p,0]]]];function i(t,r){for(var i=r<0?-1:1,a=n[+(r<0)],o=0,s=a.length-1;o<s&&t>a[o][2][0];++o);var l=e(t-a[o][1][0],r);return l[0]+=e(a[o][1][0],i*r>i*a[o][0][1]?a[o][0][1]:r)[0],l}e.invert&&(i.invert=function(t,a){for(var o=r[+(a<0)],s=n[+(a<0)],c=0,u=o.length;c<u;++c){var h=o[c];if(h[0][0]<=t&&t<h[1][0]&&h[0][1]<=a&&a<h[1][1]){var f=e.invert(t-e(s[c][1][0],0)[0],a);return f[0]+=s[c][1][0],l(i(f[0],f[1]),[t,a])?f:null}}});var a=t.geo.projection(i),o=a.stream;function s(t,e){for(var r,n,i,a=-1,o=t.length,s=t[0],l=[];++a<o;){n=((r=t[a])[0]-s[0])/e,i=(r[1]-s[1])/e;for(var c=0;c<e;++c)l.push([s[0]+c*n,s[1]+c*i]);s=r}return l.push(r),l}function l(t,e){return Math.abs(t[0]-e[0])<h&&Math.abs(t[1]-e[1])<h}return a.stream=function(e){var r=a.rotate(),i=o(e),l=(a.rotate([0,0]),o(e));return a.rotate(r),i.sphere=function(){t.geo.stream(function(){for(var e=1e-6,r=[],i=0,a=n[0].length;i<a;++i){var o=n[0][i],l=180*o[0][0]/p,c=180*o[0][1]/p,u=180*o[1][1]/p,h=180*o[2][0]/p,f=180*o[2][1]/p;r.push(s([[l+e,c+e],[l+e,u-e],[h-e,u-e],[h-e,f+e]],30))}for(var i=n[1].length-1;i>=0;--i){var o=n[1][i],l=180*o[0][0]/p,c=180*o[0][1]/p,u=180*o[1][1]/p,h=180*o[2][0]/p,f=180*o[2][1]/p;r.push(s([[h-e,f-e],[h-e,u+e],[l+e,u+e],[l+e,c-e]],30))}return{type:\\\"Polygon\\\",coordinates:[t.merge(r)]}}(),l)},i},a.lobes=function(t){return arguments.length?(n=t.map(function(t){return t.map(function(t){return[[t[0][0]*p/180,t[0][1]*p/180],[t[1][0]*p/180,t[1][1]*p/180],[t[2][0]*p/180,t[2][1]*p/180]]})}),r=n.map(function(t){return t.map(function(t){var r,n=e(t[0][0],t[0][1])[0],i=e(t[2][0],t[2][1])[0],a=e(t[1][0],t[0][1])[1],o=e(t[1][0],t[1][1])[1];return a>o&&(r=a,a=o,o=r),[[n,a],[i,o]]})}),a):n.map(function(t){return t.map(function(t){return[[180*t[0][0]/p,180*t[0][1]/p],[180*t[1][0]/p,180*t[1][1]/p],[180*t[2][0]/p,180*t[2][1]/p]]})})},a},_.invert=function(t,e){var r=.5*e*Math.sqrt((4+p)/p),n=m(r),i=Math.cos(n);return[t/(2/Math.sqrt(p*(4+p))*(1+i)),m((n+r*(i+2))/(2+d))]},(t.geo.eckert4=function(){return x(_)}).raw=_;var w=t.geo.azimuthalEqualArea.raw;function k(t,e){if(arguments.length<2&&(e=t),1===e)return w;if(e===1/0)return T;function r(r,n){var i=w(r/e,n);return i[0]*=t,i}return r.invert=function(r,n){var i=w.invert(r/t,n);return i[0]*=e,i},r}function T(t,e){return[t*Math.cos(e)/Math.cos(e/=2),2*Math.sin(e)]}function A(t,e){return[3*t/(2*p)*Math.sqrt(p*p/3-e*e),e]}function M(t,e){return[t,1.25*Math.log(Math.tan(p/4+.4*e))]}function S(t){return function(e){var r,n=t*Math.sin(e),i=30;do{e-=r=(e+Math.sin(e)-n)/(1+Math.cos(e))}while(Math.abs(r)>h&&--i>0);return e/2}}T.invert=function(t,e){var r=2*m(e/2);return[t*Math.cos(r/2)/Math.cos(r),r]},(t.geo.hammer=function(){var t=2,e=b(k),r=e(t);return r.coefficient=function(r){return arguments.length?e(t=+r):t},r}).raw=k,A.invert=function(t,e){return[2/3*p*t/Math.sqrt(p*p/3-e*e),e]},(t.geo.kavrayskiy7=function(){return x(A)}).raw=A,M.invert=function(t,e){return[t,2.5*Math.atan(Math.exp(.8*e))-.625*p]},(t.geo.miller=function(){return x(M)}).raw=M,S(p);var E=function(t,e,r){var n=S(r);function i(r,i){return[t*r*Math.cos(i=n(i)),e*Math.sin(i)]}return i.invert=function(n,i){var a=m(i/e);return[n/(t*Math.cos(a)),m((2*a+Math.sin(2*a))/r)]},i}(Math.SQRT2/d,Math.SQRT2,p);function C(t,e){var r=e*e,n=r*r;return[t*(.8707-.131979*r+n*(n*(.003971*r-.001529*n)-.013791)),e*(1.007226+r*(.015085+n*(.028874*r-.044475-.005916*n)))]}(t.geo.mollweide=function(){return x(E)}).raw=E,C.invert=function(t,e){var r,n=e,i=25;do{var a=n*n,o=a*a;n-=r=(n*(1.007226+a*(.015085+o*(.028874*a-.044475-.005916*o)))-e)/(1.007226+a*(.045255+o*(.259866*a-.311325-.005916*11*o)))}while(Math.abs(r)>h&&--i>0);return[t/(.8707+(a=n*n)*(a*(a*a*a*(.003971-.001529*a)-.013791)-.131979)),n]},(t.geo.naturalEarth=function(){return x(C)}).raw=C;var L=[[.9986,-.062],[1,0],[.9986,.062],[.9954,.124],[.99,.186],[.9822,.248],[.973,.31],[.96,.372],[.9427,.434],[.9216,.4958],[.8962,.5571],[.8679,.6176],[.835,.6769],[.7986,.7346],[.7597,.7903],[.7186,.8435],[.6732,.8936],[.6213,.9394],[.5722,.9761],[.5322,1]];function P(t,e){var r,n=Math.min(18,36*Math.abs(e)/p),i=Math.floor(n),a=n-i,o=(r=L[i])[0],s=r[1],l=(r=L[++i])[0],c=r[1],u=(r=L[Math.min(19,++i)])[0],h=r[1];return[t*(l+a*(u-o)/2+a*a*(u-2*l+o)/2),(e>0?d:-d)*(c+a*(h-s)/2+a*a*(h-2*c+s)/2)]}function O(t,e){return[t*Math.cos(e),e]}function z(t,e){var r,n=Math.cos(e),i=(r=y(n*Math.cos(t/=2)))?r/Math.sin(r):1;return[2*n*Math.sin(t)*i,Math.sin(e)*i]}function I(t,e){var r=z(t,e);return[(r[0]+t/d)/2,(r[1]+e)/2]}L.forEach(function(t){t[1]*=1.0144}),P.invert=function(t,e){var r=e/d,n=90*r,i=Math.min(18,Math.abs(n/5)),a=Math.max(0,Math.floor(i));do{var o=L[a][1],s=L[a+1][1],l=L[Math.min(19,a+2)][1],c=l-o,u=l-2*s+o,h=2*(Math.abs(r)-s)/c,p=u/c,m=h*(1-p*h*(1-2*p*h));if(m>=0||1===a){n=(e>=0?5:-5)*(m+i);var y,x=50;do{m=(i=Math.min(18,Math.abs(n)/5))-(a=Math.floor(i)),o=L[a][1],s=L[a+1][1],l=L[Math.min(19,a+2)][1],n-=(y=(e>=0?d:-d)*(s+m*(l-o)/2+m*m*(l-2*s+o)/2)-e)*v}while(Math.abs(y)>f&&--x>0);break}}while(--a>=0);var b=L[a][0],_=L[a+1][0],w=L[Math.min(19,a+2)][0];return[t/(_+m*(w-b)/2+m*m*(w-2*_+b)/2),n*g]},(t.geo.robinson=function(){return x(P)}).raw=P,O.invert=function(t,e){return[t/Math.cos(e),e]},(t.geo.sinusoidal=function(){return x(O)}).raw=O,z.invert=function(t,e){if(!(t*t+4*e*e>p*p+h)){var r=t,n=e,i=25;do{var a,o=Math.sin(r),s=Math.sin(r/2),l=Math.cos(r/2),c=Math.sin(n),u=Math.cos(n),f=Math.sin(2*n),d=c*c,g=u*u,v=s*s,m=1-g*l*l,x=m?y(u*l)*Math.sqrt(a=1/m):a=0,b=2*x*u*s-t,_=x*c-e,w=a*(g*v+x*u*l*d),k=a*(.5*o*f-2*x*c*s),T=.25*a*(f*s-x*c*g*o),A=a*(d*l+x*v*u),M=k*T-A*w;if(!M)break;var S=(_*k-b*A)/M,E=(b*T-_*w)/M;r-=S,n-=E}while((Math.abs(S)>h||Math.abs(E)>h)&&--i>0);return[r,n]}},(t.geo.aitoff=function(){return x(z)}).raw=z,I.invert=function(t,e){var r=t,n=e,i=25;do{var a,o=Math.cos(n),s=Math.sin(n),l=Math.sin(2*n),c=s*s,u=o*o,f=Math.sin(r),p=Math.cos(r/2),g=Math.sin(r/2),v=g*g,m=1-u*p*p,x=m?y(o*p)*Math.sqrt(a=1/m):a=0,b=.5*(2*x*o*g+r/d)-t,_=.5*(x*s+n)-e,w=.5*a*(u*v+x*o*p*c)+.5/d,k=a*(f*l/4-x*s*g),T=.125*a*(l*g-x*s*u*f),A=.5*a*(c*p+x*v*o)+.5,M=k*T-A*w,S=(_*k-b*A)/M,E=(b*T-_*w)/M;r-=S,n-=E}while((Math.abs(S)>h||Math.abs(E)>h)&&--i>0);return[r,n]},(t.geo.winkel3=function(){return x(I)}).raw=I}},{}],801:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../registry\\\"),o=Math.PI/180,s=180/Math.PI,l={cursor:\\\"pointer\\\"},c={cursor:\\\"auto\\\"};function u(t,e){return n.behavior.zoom().translate(e.translate()).scale(e.scale())}function h(t,e,r){var n=t.id,o=t.graphDiv,s=o.layout,l=s[n],c=o._fullLayout,u=c[n],h={},f={};function p(t,e){h[n+\\\".\\\"+t]=i.nestedProperty(l,t).get(),a.call(\\\"_storeDirectGUIEdit\\\",s,c._preGUI,h);var r=i.nestedProperty(u,t);r.get()!==e&&(r.set(e),i.nestedProperty(l,t).set(e),f[n+\\\".\\\"+t]=e)}r(p),p(\\\"projection.scale\\\",e.scale()/t.fitScale),o.emit(\\\"plotly_relayout\\\",f)}function f(t,e){var r=u(0,e);function i(r){var n=e.invert(t.midPt);r(\\\"center.lon\\\",n[0]),r(\\\"center.lat\\\",n[1])}return r.on(\\\"zoomstart\\\",function(){n.select(this).style(l)}).on(\\\"zoom\\\",function(){e.scale(n.event.scale).translate(n.event.translate),t.render();var r=e.invert(t.midPt);t.graphDiv.emit(\\\"plotly_relayouting\\\",{\\\"geo.projection.scale\\\":e.scale()/t.fitScale,\\\"geo.center.lon\\\":r[0],\\\"geo.center.lat\\\":r[1]})}).on(\\\"zoomend\\\",function(){n.select(this).style(c),h(t,e,i)}),r}function p(t,e){var r,i,a,o,s,f,p,d,g,v=u(0,e),m=2;function y(t){return e.invert(t)}function x(r){var n=e.rotate(),i=e.invert(t.midPt);r(\\\"projection.rotation.lon\\\",-n[0]),r(\\\"center.lon\\\",i[0]),r(\\\"center.lat\\\",i[1])}return v.on(\\\"zoomstart\\\",function(){n.select(this).style(l),r=n.mouse(this),i=e.rotate(),a=e.translate(),o=i,s=y(r)}).on(\\\"zoom\\\",function(){if(f=n.mouse(this),function(t){var r=y(t);if(!r)return!0;var n=e(r);return Math.abs(n[0]-t[0])>m||Math.abs(n[1]-t[1])>m}(r))return v.scale(e.scale()),void v.translate(e.translate());e.scale(n.event.scale),e.translate([a[0],n.event.translate[1]]),s?y(f)&&(d=y(f),p=[o[0]+(d[0]-s[0]),i[1],i[2]],e.rotate(p),o=p):s=y(r=f),g=!0,t.render();var l=e.rotate(),c=e.invert(t.midPt);t.graphDiv.emit(\\\"plotly_relayouting\\\",{\\\"geo.projection.scale\\\":e.scale()/t.fitScale,\\\"geo.center.lon\\\":c[0],\\\"geo.center.lat\\\":c[1],\\\"geo.projection.rotation.lon\\\":-l[0]})}).on(\\\"zoomend\\\",function(){n.select(this).style(c),g&&h(t,e,x)}),v}function d(t,e){var r,i={r:e.rotate(),k:e.scale()},a=u(0,e),f=function(t){var e=0,r=arguments.length,i=[];for(;++e<r;)i.push(arguments[e]);var a=n.dispatch.apply(null,i);return a.of=function(e,r){return function(i){var o;try{o=i.sourceEvent=n.event,i.target=t,n.event=i,a[i.type].apply(e,r)}finally{n.event=o}}},a}(a,\\\"zoomstart\\\",\\\"zoom\\\",\\\"zoomend\\\"),p=0,d=a.on;function m(t){var r=e.rotate();t(\\\"projection.rotation.lon\\\",-r[0]),t(\\\"projection.rotation.lat\\\",-r[1])}return a.on(\\\"zoomstart\\\",function(){n.select(this).style(l);var t,c,u,h,m,b,_,w,k,T,A,M=n.mouse(this),S=e.rotate(),E=S,C=e.translate(),L=(c=.5*(t=S)[0]*o,u=.5*t[1]*o,h=.5*t[2]*o,m=Math.sin(c),b=Math.cos(c),_=Math.sin(u),w=Math.cos(u),k=Math.sin(h),T=Math.cos(h),[b*w*T+m*_*k,m*w*T-b*_*k,b*_*T+m*w*k,b*w*k-m*_*T]);r=g(e,M),d.call(a,\\\"zoom\\\",function(){var t,a,o,l,c,u,h,p,d,m,b=n.mouse(this);if(e.scale(i.k=n.event.scale),r){if(g(e,b)){e.rotate(S).translate(C);var _=g(e,b),w=function(t,e){if(!t||!e)return;var r=function(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}(t,e),n=Math.sqrt(x(r,r)),i=.5*Math.acos(Math.max(-1,Math.min(1,x(t,e)))),a=Math.sin(i)/n;return n&&[Math.cos(i),r[2]*a,-r[1]*a,r[0]*a]}(r,_),k=function(t){return[Math.atan2(2*(t[0]*t[1]+t[2]*t[3]),1-2*(t[1]*t[1]+t[2]*t[2]))*s,Math.asin(Math.max(-1,Math.min(1,2*(t[0]*t[2]-t[3]*t[1]))))*s,Math.atan2(2*(t[0]*t[3]+t[1]*t[2]),1-2*(t[2]*t[2]+t[3]*t[3]))*s]}((a=w,o=(t=L)[0],l=t[1],c=t[2],u=t[3],h=a[0],p=a[1],d=a[2],m=a[3],[o*h-l*p-c*d-u*m,o*p+l*h+c*m-u*d,o*d-l*m+c*h+u*p,o*m+l*d-c*p+u*h])),T=i.r=function(t,e,r){var n=y(e,2,t[0]);n=y(n,1,t[1]),n=y(n,0,t[2]-r[2]);var i,a,o=e[0],l=e[1],c=e[2],u=n[0],h=n[1],f=n[2],p=Math.atan2(l,o)*s,d=Math.sqrt(o*o+l*l);Math.abs(h)>d?(a=(h>0?90:-90)-p,i=0):(a=Math.asin(h/d)*s-p,i=Math.sqrt(d*d-h*h));var g=180-a-2*p,m=(Math.atan2(f,u)-Math.atan2(c,i))*s,x=(Math.atan2(f,u)-Math.atan2(c,-i))*s,b=v(r[0],r[1],a,m),_=v(r[0],r[1],g,x);return b<=_?[a,m,r[2]]:[g,x,r[2]]}(k,r,E);isFinite(T[0])&&isFinite(T[1])&&isFinite(T[2])||(T=E),e.rotate(T),E=T}}else r=g(e,M=b);f.of(this,arguments)({type:\\\"zoom\\\"})}),A=f.of(this,arguments),p++||A({type:\\\"zoomstart\\\"})}).on(\\\"zoomend\\\",function(){var r;n.select(this).style(c),d.call(a,\\\"zoom\\\",null),r=f.of(this,arguments),--p||r({type:\\\"zoomend\\\"}),h(t,e,m)}).on(\\\"zoom.redraw\\\",function(){t.render();var r=e.rotate();t.graphDiv.emit(\\\"plotly_relayouting\\\",{\\\"geo.projection.scale\\\":e.scale()/t.fitScale,\\\"geo.projection.rotation.lon\\\":-r[0],\\\"geo.projection.rotation.lat\\\":-r[1]})}),n.rebind(a,f,\\\"on\\\")}function g(t,e){var r=t.invert(e);return r&&isFinite(r[0])&&isFinite(r[1])&&function(t){var e=t[0]*o,r=t[1]*o,n=Math.cos(r);return[n*Math.cos(e),n*Math.sin(e),Math.sin(r)]}(r)}function v(t,e,r,n){var i=m(r-t),a=m(n-e);return Math.sqrt(i*i+a*a)}function m(t){return(t%360+540)%360-180}function y(t,e,r){var n=r*o,i=t.slice(),a=0===e?1:0,s=2===e?1:2,l=Math.cos(n),c=Math.sin(n);return i[a]=t[a]*l-t[s]*c,i[s]=t[s]*l+t[a]*c,i}function x(t,e){for(var r=0,n=0,i=t.length;n<i;++n)r+=t[n]*e[n];return r}e.exports=function(t,e){var r=t.projection;return(e._isScoped?f:e._isClipped?d:p)(t,r)}},{\\\"../../lib\\\":719,\\\"../../registry\\\":847,d3:163}],802:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../registry\\\"),i=t(\\\"./cartesian/constants\\\").SUBPLOT_PATTERN;r.getSubplotCalcData=function(t,e,r){var i=n.subplotsRegistry[e];if(!i)return[];for(var a=i.attr,o=[],s=0;s<t.length;s++){var l=t[s];l[0].trace[a]===r&&o.push(l)}return o},r.getModuleCalcData=function(t,e){var r,i=[],a=[];if(!(r=\\\"string\\\"==typeof e?n.getModule(e).plot:\\\"function\\\"==typeof e?e:e.plot))return[i,t];for(var o=0;o<t.length;o++){var s=t[o],l=s[0].trace;!0===l.visible&&0!==l._length&&(l._module.plot===r?i.push(s):a.push(s))}return[i,a]},r.getSubplotData=function(t,e,r){if(!n.subplotsRegistry[e])return[];var a,o,s,l=n.subplotsRegistry[e].attr,c=[];if(\\\"gl2d\\\"===e){var u=r.match(i);o=\\\"x\\\"+u[1],s=\\\"y\\\"+u[2]}for(var h=0;h<t.length;h++)a=t[h],\\\"gl2d\\\"===e&&n.traceIs(a,\\\"gl2d\\\")?a[l[0]]===o&&a[l[1]]===s&&c.push(a):a[l]===r&&c.push(a);return c}},{\\\"../registry\\\":847,\\\"./cartesian/constants\\\":773}],803:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"mouse-change\\\"),i=t(\\\"mouse-wheel\\\"),a=t(\\\"mouse-event-offset\\\"),o=t(\\\"../cartesian/constants\\\"),s=t(\\\"has-passive-events\\\");function l(t,e){this.element=t,this.plot=e,this.mouseListener=null,this.wheelListener=null,this.lastInputTime=Date.now(),this.lastPos=[0,0],this.boxEnabled=!1,this.boxInited=!1,this.boxStart=[0,0],this.boxEnd=[0,0],this.dragStart=[0,0]}e.exports=function(t){var e=t.mouseContainer,r=t.glplot,c=new l(e,r);function u(){t.xaxis.autorange=!1,t.yaxis.autorange=!1}function h(e,n,i){var a,s,l=t.calcDataBox(),h=r.viewBox,f=c.lastPos[0],p=c.lastPos[1],d=o.MINDRAG*r.pixelRatio,g=o.MINZOOM*r.pixelRatio;function v(e,r,n){var i=Math.min(r,n),a=Math.max(r,n);i!==a?(l[e]=i,l[e+2]=a,c.dataBox=l,t.setRanges(l)):(t.selectBox.selectBox=[0,0,1,1],t.glplot.setDirty())}switch(n*=r.pixelRatio,i*=r.pixelRatio,i=h[3]-h[1]-i,t.fullLayout.dragmode){case\\\"zoom\\\":if(e){var m=n/(h[2]-h[0])*(l[2]-l[0])+l[0],y=i/(h[3]-h[1])*(l[3]-l[1])+l[1];c.boxInited||(c.boxStart[0]=m,c.boxStart[1]=y,c.dragStart[0]=n,c.dragStart[1]=i),c.boxEnd[0]=m,c.boxEnd[1]=y,c.boxInited=!0,c.boxEnabled||c.boxStart[0]===c.boxEnd[0]&&c.boxStart[1]===c.boxEnd[1]||(c.boxEnabled=!0);var x=Math.abs(c.dragStart[0]-n)<g,b=Math.abs(c.dragStart[1]-i)<g;if(!function(){for(var e=t.graphDiv._fullLayout._axisConstraintGroups,r=t.xaxis._id,n=t.yaxis._id,i=0;i<e.length;i++)if(-1!==e[i][r]){if(-1!==e[i][n])return!0;break}return!1}()||x&&b)x&&(c.boxEnd[0]=c.boxStart[0]),b&&(c.boxEnd[1]=c.boxStart[1]);else{a=c.boxEnd[0]-c.boxStart[0],s=c.boxEnd[1]-c.boxStart[1];var _=(l[3]-l[1])/(l[2]-l[0]);Math.abs(a*_)>Math.abs(s)?(c.boxEnd[1]=c.boxStart[1]+Math.abs(a)*_*(s>=0?1:-1),c.boxEnd[1]<l[1]?(c.boxEnd[1]=l[1],c.boxEnd[0]=c.boxStart[0]+(l[1]-c.boxStart[1])/Math.abs(_)):c.boxEnd[1]>l[3]&&(c.boxEnd[1]=l[3],c.boxEnd[0]=c.boxStart[0]+(l[3]-c.boxStart[1])/Math.abs(_))):(c.boxEnd[0]=c.boxStart[0]+Math.abs(s)/_*(a>=0?1:-1),c.boxEnd[0]<l[0]?(c.boxEnd[0]=l[0],c.boxEnd[1]=c.boxStart[1]+(l[0]-c.boxStart[0])*Math.abs(_)):c.boxEnd[0]>l[2]&&(c.boxEnd[0]=l[2],c.boxEnd[1]=c.boxStart[1]+(l[2]-c.boxStart[0])*Math.abs(_)))}}else c.boxEnabled?(a=c.boxStart[0]!==c.boxEnd[0],s=c.boxStart[1]!==c.boxEnd[1],a||s?(a&&(v(0,c.boxStart[0],c.boxEnd[0]),t.xaxis.autorange=!1),s&&(v(1,c.boxStart[1],c.boxEnd[1]),t.yaxis.autorange=!1),t.relayoutCallback()):t.glplot.setDirty(),c.boxEnabled=!1,c.boxInited=!1):c.boxInited&&(c.boxInited=!1);break;case\\\"pan\\\":c.boxEnabled=!1,c.boxInited=!1,e?(c.panning||(c.dragStart[0]=n,c.dragStart[1]=i),Math.abs(c.dragStart[0]-n)<d&&(n=c.dragStart[0]),Math.abs(c.dragStart[1]-i)<d&&(i=c.dragStart[1]),a=(f-n)*(l[2]-l[0])/(r.viewBox[2]-r.viewBox[0]),s=(p-i)*(l[3]-l[1])/(r.viewBox[3]-r.viewBox[1]),l[0]+=a,l[2]+=a,l[1]+=s,l[3]+=s,t.setRanges(l),c.panning=!0,c.lastInputTime=Date.now(),u(),t.cameraChanged(),t.handleAnnotations()):c.panning&&(c.panning=!1,t.relayoutCallback())}c.lastPos[0]=n,c.lastPos[1]=i}return c.mouseListener=n(e,h),e.addEventListener(\\\"touchstart\\\",function(t){var r=a(t.changedTouches[0],e);h(0,r[0],r[1]),h(1,r[0],r[1]),t.preventDefault()},!!s&&{passive:!1}),e.addEventListener(\\\"touchmove\\\",function(t){t.preventDefault();var r=a(t.changedTouches[0],e);h(1,r[0],r[1]),t.preventDefault()},!!s&&{passive:!1}),e.addEventListener(\\\"touchend\\\",function(t){h(0,c.lastPos[0],c.lastPos[1]),t.preventDefault()},!!s&&{passive:!1}),c.wheelListener=i(e,function(e,n){if(!t.scrollZoom)return!1;var i=t.calcDataBox(),a=r.viewBox,o=c.lastPos[0],s=c.lastPos[1],l=Math.exp(5*n/(a[3]-a[1])),h=o/(a[2]-a[0])*(i[2]-i[0])+i[0],f=s/(a[3]-a[1])*(i[3]-i[1])+i[1];return i[0]=(i[0]-h)*l+h,i[2]=(i[2]-h)*l+h,i[1]=(i[1]-f)*l+f,i[3]=(i[3]-f)*l+f,t.setRanges(i),c.lastInputTime=Date.now(),u(),t.cameraChanged(),t.handleAnnotations(),t.relayoutCallback(),!0},!0),c}},{\\\"../cartesian/constants\\\":773,\\\"has-passive-events\\\":411,\\\"mouse-change\\\":435,\\\"mouse-event-offset\\\":436,\\\"mouse-wheel\\\":438}],804:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../cartesian/axes\\\"),i=t(\\\"../../lib/str2rgbarray\\\");function a(t){this.scene=t,this.gl=t.gl,this.pixelRatio=t.pixelRatio,this.screenBox=[0,0,1,1],this.viewBox=[0,0,1,1],this.dataBox=[-1,-1,1,1],this.borderLineEnable=[!1,!1,!1,!1],this.borderLineWidth=[1,1,1,1],this.borderLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.ticks=[[],[]],this.tickEnable=[!0,!0,!1,!1],this.tickPad=[15,15,15,15],this.tickAngle=[0,0,0,0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickMarkLength=[0,0,0,0],this.tickMarkWidth=[0,0,0,0],this.tickMarkColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labels=[\\\"x\\\",\\\"y\\\"],this.labelEnable=[!0,!0,!1,!1],this.labelAngle=[0,Math.PI/2,0,3*Math.PI/2],this.labelPad=[15,15,15,15],this.labelSize=[12,12],this.labelFont=[\\\"sans-serif\\\",\\\"sans-serif\\\"],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.title=\\\"\\\",this.titleEnable=!0,this.titleCenter=[0,0,0,0],this.titleAngle=0,this.titleColor=[0,0,0,1],this.titleFont=\\\"sans-serif\\\",this.titleSize=18,this.gridLineEnable=[!0,!0],this.gridLineColor=[[0,0,0,.5],[0,0,0,.5]],this.gridLineWidth=[1,1],this.zeroLineEnable=[!0,!0],this.zeroLineWidth=[1,1],this.zeroLineColor=[[0,0,0,1],[0,0,0,1]],this.borderColor=[0,0,0,0],this.backgroundColor=[0,0,0,0],this.static=this.scene.staticPlot}var o=a.prototype,s=[\\\"xaxis\\\",\\\"yaxis\\\"];o.merge=function(t){var e,r,n,a,o,l,c,u,h,f,p;for(this.titleEnable=!1,this.backgroundColor=i(t.plot_bgcolor),f=0;f<2;++f){var d=(e=s[f]).charAt(0);for(n=(r=t[this.scene[e]._name]).title.text===this.scene.fullLayout._dfltTitle[d]?\\\"\\\":r.title.text,p=0;p<=2;p+=2)this.labelEnable[f+p]=!1,this.labels[f+p]=n,this.labelColor[f+p]=i(r.title.font.color),this.labelFont[f+p]=r.title.font.family,this.labelSize[f+p]=r.title.font.size,this.labelPad[f+p]=this.getLabelPad(e,r),this.tickEnable[f+p]=!1,this.tickColor[f+p]=i((r.tickfont||{}).color),this.tickAngle[f+p]=\\\"auto\\\"===r.tickangle?0:Math.PI*-r.tickangle/180,this.tickPad[f+p]=this.getTickPad(r),this.tickMarkLength[f+p]=0,this.tickMarkWidth[f+p]=r.tickwidth||0,this.tickMarkColor[f+p]=i(r.tickcolor),this.borderLineEnable[f+p]=!1,this.borderLineColor[f+p]=i(r.linecolor),this.borderLineWidth[f+p]=r.linewidth||0;c=this.hasSharedAxis(r),o=this.hasAxisInDfltPos(e,r)&&!c,l=this.hasAxisInAltrPos(e,r)&&!c,a=r.mirror||!1,u=c?-1!==String(a).indexOf(\\\"all\\\"):!!a,h=c?\\\"allticks\\\"===a:-1!==String(a).indexOf(\\\"ticks\\\"),o?this.labelEnable[f]=!0:l&&(this.labelEnable[f+2]=!0),o?this.tickEnable[f]=r.showticklabels:l&&(this.tickEnable[f+2]=r.showticklabels),(o||u)&&(this.borderLineEnable[f]=r.showline),(l||u)&&(this.borderLineEnable[f+2]=r.showline),(o||h)&&(this.tickMarkLength[f]=this.getTickMarkLength(r)),(l||h)&&(this.tickMarkLength[f+2]=this.getTickMarkLength(r)),this.gridLineEnable[f]=r.showgrid,this.gridLineColor[f]=i(r.gridcolor),this.gridLineWidth[f]=r.gridwidth,this.zeroLineEnable[f]=r.zeroline,this.zeroLineColor[f]=i(r.zerolinecolor),this.zeroLineWidth[f]=r.zerolinewidth}},o.hasSharedAxis=function(t){var e=this.scene,r=e.fullLayout._subplots.gl2d;return 0!==n.findSubplotsWithAxis(r,t).indexOf(e.id)},o.hasAxisInDfltPos=function(t,e){var r=e.side;return\\\"xaxis\\\"===t?\\\"bottom\\\"===r:\\\"yaxis\\\"===t?\\\"left\\\"===r:void 0},o.hasAxisInAltrPos=function(t,e){var r=e.side;return\\\"xaxis\\\"===t?\\\"top\\\"===r:\\\"yaxis\\\"===t?\\\"right\\\"===r:void 0},o.getLabelPad=function(t,e){var r=e.title.font.size,n=e.showticklabels;return\\\"xaxis\\\"===t?\\\"top\\\"===e.side?r*(1.5+(n?1:0))-10:r*(1.5+(n?.5:0))-10:\\\"yaxis\\\"===t?\\\"right\\\"===e.side?10+r*(1.5+(n?1:.5)):10+r*(1.5+(n?.5:0)):void 0},o.getTickPad=function(t){return\\\"outside\\\"===t.ticks?10+t.ticklen:15},o.getTickMarkLength=function(t){if(!t.ticks)return 0;var e=t.ticklen;return\\\"inside\\\"===t.ticks?-e:e},e.exports=function(t){return new a(t)}},{\\\"../../lib/str2rgbarray\\\":742,\\\"../cartesian/axes\\\":767}],805:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plot_api/edit_types\\\").overrideAll,i=t(\\\"./scene2d\\\"),a=t(\\\"../layout_attributes\\\"),o=t(\\\"../../constants/xmlns_namespaces\\\"),s=t(\\\"../cartesian/constants\\\"),l=t(\\\"../cartesian\\\"),c=t(\\\"../../components/fx/layout_attributes\\\"),u=t(\\\"../get_data\\\").getSubplotData;r.name=\\\"gl2d\\\",r.attr=[\\\"xaxis\\\",\\\"yaxis\\\"],r.idRoot=[\\\"x\\\",\\\"y\\\"],r.idRegex=s.idRegex,r.attrRegex=s.attrRegex,r.attributes=t(\\\"../cartesian/attributes\\\"),r.supplyLayoutDefaults=function(t,e,r){e._has(\\\"cartesian\\\")||l.supplyLayoutDefaults(t,e,r)},r.layoutAttrOverrides=n(l.layoutAttributes,\\\"plot\\\",\\\"from-root\\\"),r.baseLayoutAttrOverrides=n({plot_bgcolor:a.plot_bgcolor,hoverlabel:c.hoverlabel},\\\"plot\\\",\\\"nested\\\"),r.plot=function(t){for(var e=t._fullLayout,r=t._fullData,n=e._subplots.gl2d,a=0;a<n.length;a++){var o=n[a],s=e._plots[o],l=u(r,\\\"gl2d\\\",o),c=s._scene2d;void 0===c&&(c=new i({id:o,graphDiv:t,container:t.querySelector(\\\".gl-container\\\"),staticPlot:t._context.staticPlot,plotGlPixelRatio:t._context.plotGlPixelRatio},e),s._scene2d=c),c.plot(l,t.calcdata,e,t.layout)}},r.clean=function(t,e,r,n){for(var i=n._subplots.gl2d||[],a=0;a<i.length;a++){var o=i[a],s=n._plots[o];if(s._scene2d)0===u(t,\\\"gl2d\\\",o).length&&(s._scene2d.destroy(),delete n._plots[o])}l.clean.apply(this,arguments)},r.drawFramework=function(t){t._context.staticPlot||l.drawFramework(t)},r.toSVG=function(t){for(var e=t._fullLayout,r=e._subplots.gl2d,n=0;n<r.length;n++){var i=e._plots[r[n]]._scene2d,a=i.toImage(\\\"png\\\");e._glimages.append(\\\"svg:image\\\").attr({xmlns:o.svg,\\\"xlink:href\\\":a,x:0,y:0,width:\\\"100%\\\",height:\\\"100%\\\",preserveAspectRatio:\\\"none\\\"}),i.destroy()}},r.updateFx=function(t){for(var e=t._fullLayout,r=e._subplots.gl2d,n=0;n<r.length;n++){e._plots[r[n]]._scene2d.updateFx(e.dragmode)}}},{\\\"../../components/fx/layout_attributes\\\":633,\\\"../../constants/xmlns_namespaces\\\":696,\\\"../../plot_api/edit_types\\\":750,\\\"../cartesian\\\":778,\\\"../cartesian/attributes\\\":765,\\\"../cartesian/constants\\\":773,\\\"../get_data\\\":802,\\\"../layout_attributes\\\":819,\\\"./scene2d\\\":806}],806:[function(t,e,r){\\\"use strict\\\";var n,i,a=t(\\\"../../registry\\\"),o=t(\\\"../../plots/cartesian/axes\\\"),s=t(\\\"../../components/fx\\\"),l=t(\\\"gl-plot2d\\\"),c=t(\\\"gl-spikes2d\\\"),u=t(\\\"gl-select-box\\\"),h=t(\\\"webgl-context\\\"),f=t(\\\"./convert\\\"),p=t(\\\"./camera\\\"),d=t(\\\"../../lib/show_no_webgl_msg\\\"),g=t(\\\"../cartesian/constraints\\\"),v=g.enforce,m=g.clean,y=t(\\\"../cartesian/autorange\\\").doAutoRange,x=[\\\"xaxis\\\",\\\"yaxis\\\"],b=t(\\\"../cartesian/constants\\\").SUBPLOT_PATTERN;function _(t,e){this.container=t.container,this.graphDiv=t.graphDiv,this.pixelRatio=t.plotGlPixelRatio||window.devicePixelRatio,this.id=t.id,this.staticPlot=!!t.staticPlot,this.scrollZoom=this.graphDiv._context._scrollZoom.cartesian,this.fullData=null,this.updateRefs(e),this.makeFramework(),this.stopped||(this.glplotOptions=f(this),this.glplotOptions.merge(e),this.glplot=l(this.glplotOptions),this.camera=p(this),this.traces={},this.spikes=c(this.glplot),this.selectBox=u(this.glplot,{innerFill:!1,outerFill:!0}),this.lastButtonState=0,this.pickResult=null,this.isMouseOver=!0,this.stopped=!1,this.redraw=this.draw.bind(this),this.redraw())}e.exports=_;var w=_.prototype;w.makeFramework=function(){if(this.staticPlot){if(!(i||(n=document.createElement(\\\"canvas\\\"),i=h({canvas:n,preserveDrawingBuffer:!1,premultipliedAlpha:!0,antialias:!0}))))throw new Error(\\\"Error creating static canvas/context for image server\\\");this.canvas=n,this.gl=i}else{var t=this.container.querySelector(\\\".gl-canvas-focus\\\"),e=h({canvas:t,preserveDrawingBuffer:!0,premultipliedAlpha:!0});if(!e)return d(this),void(this.stopped=!0);this.canvas=t,this.gl=e}var r=this.canvas;r.style.width=\\\"100%\\\",r.style.height=\\\"100%\\\",r.style.position=\\\"absolute\\\",r.style.top=\\\"0px\\\",r.style.left=\\\"0px\\\",r.style[\\\"pointer-events\\\"]=\\\"none\\\",this.updateSize(r),r.className+=\\\" user-select-none\\\";var a=this.svgContainer=document.createElementNS(\\\"http://www.w3.org/2000/svg\\\",\\\"svg\\\");a.style.position=\\\"absolute\\\",a.style.top=a.style.left=\\\"0px\\\",a.style.width=a.style.height=\\\"100%\\\",a.style[\\\"z-index\\\"]=20,a.style[\\\"pointer-events\\\"]=\\\"none\\\";var o=this.mouseContainer=document.createElement(\\\"div\\\");o.style.position=\\\"absolute\\\",o.style[\\\"pointer-events\\\"]=\\\"auto\\\",this.pickCanvas=this.container.querySelector(\\\".gl-canvas-pick\\\");var s=this.container;s.appendChild(a),s.appendChild(o);var l=this;o.addEventListener(\\\"mouseout\\\",function(){l.isMouseOver=!1,l.unhover()}),o.addEventListener(\\\"mouseover\\\",function(){l.isMouseOver=!0})},w.toImage=function(t){t||(t=\\\"png\\\"),this.stopped=!0,this.staticPlot&&this.container.appendChild(n),this.updateSize(this.canvas);var e=this.glplot.gl,r=e.drawingBufferWidth,i=e.drawingBufferHeight;e.clearColor(1,1,1,0),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT),this.glplot.setDirty(),this.glplot.draw(),e.bindFramebuffer(e.FRAMEBUFFER,null);var a=new Uint8Array(r*i*4);e.readPixels(0,0,r,i,e.RGBA,e.UNSIGNED_BYTE,a);for(var o=0,s=i-1;o<s;++o,--s)for(var l=0;l<r;++l)for(var c=0;c<4;++c){var u=a[4*(r*o+l)+c];a[4*(r*o+l)+c]=a[4*(r*s+l)+c],a[4*(r*s+l)+c]=u}var h=document.createElement(\\\"canvas\\\");h.width=r,h.height=i;var f,p=h.getContext(\\\"2d\\\"),d=p.createImageData(r,i);switch(d.data.set(a),p.putImageData(d,0,0),t){case\\\"jpeg\\\":f=h.toDataURL(\\\"image/jpeg\\\");break;case\\\"webp\\\":f=h.toDataURL(\\\"image/webp\\\");break;default:f=h.toDataURL(\\\"image/png\\\")}return this.staticPlot&&this.container.removeChild(n),f},w.updateSize=function(t){t||(t=this.canvas);var e=this.pixelRatio,r=this.fullLayout,n=r.width,i=r.height,a=0|Math.ceil(e*n),o=0|Math.ceil(e*i);return t.width===a&&t.height===o||(t.width=a,t.height=o),t},w.computeTickMarks=function(){this.xaxis.setScale(),this.yaxis.setScale();for(var t=[o.calcTicks(this.xaxis),o.calcTicks(this.yaxis)],e=0;e<2;++e)for(var r=0;r<t[e].length;++r)t[e][r].text=t[e][r].text+\\\"\\\";return t},w.updateRefs=function(t){this.fullLayout=t;var e=this.id.match(b),r=\\\"xaxis\\\"+e[1],n=\\\"yaxis\\\"+e[2];this.xaxis=this.fullLayout[r],this.yaxis=this.fullLayout[n]},w.relayoutCallback=function(){var t=this.graphDiv,e=this.xaxis,r=this.yaxis,n=t.layout,i={},o=i[e._name+\\\".range\\\"]=e.range.slice(),s=i[r._name+\\\".range\\\"]=r.range.slice();i[e._name+\\\".autorange\\\"]=e.autorange,i[r._name+\\\".autorange\\\"]=r.autorange,a.call(\\\"_storeDirectGUIEdit\\\",t.layout,t._fullLayout._preGUI,i);var l=n[e._name];l.range=o,l.autorange=e.autorange;var c=n[r._name];c.range=s,c.autorange=r.autorange,i.lastInputTime=this.camera.lastInputTime,t.emit(\\\"plotly_relayout\\\",i)},w.cameraChanged=function(){var t=this.camera;this.glplot.setDataBox(this.calcDataBox());var e=this.computeTickMarks();(function(t,e){for(var r=0;r<2;++r){var n=t[r],i=e[r];if(n.length!==i.length)return!0;for(var a=0;a<n.length;++a)if(n[a].x!==i[a].x)return!0}return!1})(e,this.glplotOptions.ticks)&&(this.glplotOptions.ticks=e,this.glplotOptions.dataBox=t.dataBox,this.glplot.update(this.glplotOptions),this.handleAnnotations())},w.handleAnnotations=function(){for(var t=this.graphDiv,e=this.fullLayout.annotations,r=0;r<e.length;r++){var n=e[r];n.xref===this.xaxis._id&&n.yref===this.yaxis._id&&a.getComponentMethod(\\\"annotations\\\",\\\"drawOne\\\")(t,r)}},w.destroy=function(){if(this.glplot){var t=this.traces;t&&Object.keys(t).map(function(e){t[e].dispose(),delete t[e]}),this.glplot.dispose(),this.container.removeChild(this.svgContainer),this.container.removeChild(this.mouseContainer),this.fullData=null,this.glplot=null,this.stopped=!0,this.camera.mouseListener.enabled=!1,this.mouseContainer.removeEventListener(\\\"wheel\\\",this.camera.wheelListener),this.camera=null}},w.plot=function(t,e,r){var n=this.glplot;this.updateRefs(r),this.xaxis.clearCalc(),this.yaxis.clearCalc(),this.updateTraces(t,e),this.updateFx(r.dragmode);var i=r.width,a=r.height;this.updateSize(this.canvas);var o=this.glplotOptions;o.merge(r),o.screenBox=[0,0,i,a];var s={_fullLayout:{_axisConstraintGroups:this.graphDiv._fullLayout._axisConstraintGroups,xaxis:this.xaxis,yaxis:this.yaxis}};m(s,this.xaxis),m(s,this.yaxis);var l,c,u=r._size,h=this.xaxis.domain,f=this.yaxis.domain;for(o.viewBox=[u.l+h[0]*u.w,u.b+f[0]*u.h,i-u.r-(1-h[1])*u.w,a-u.t-(1-f[1])*u.h],this.mouseContainer.style.width=u.w*(h[1]-h[0])+\\\"px\\\",this.mouseContainer.style.height=u.h*(f[1]-f[0])+\\\"px\\\",this.mouseContainer.height=u.h*(f[1]-f[0]),this.mouseContainer.style.left=u.l+h[0]*u.w+\\\"px\\\",this.mouseContainer.style.top=u.t+(1-f[1])*u.h+\\\"px\\\",c=0;c<2;++c)(l=this[x[c]])._length=o.viewBox[c+2]-o.viewBox[c],y(this.graphDiv,l),l.setScale();v(s),o.ticks=this.computeTickMarks(),o.dataBox=this.calcDataBox(),o.merge(r),n.update(o),this.glplot.draw()},w.calcDataBox=function(){var t=this.xaxis,e=this.yaxis,r=t.range,n=e.range,i=t.r2l,a=e.r2l;return[i(r[0]),a(n[0]),i(r[1]),a(n[1])]},w.setRanges=function(t){var e=this.xaxis,r=this.yaxis,n=e.l2r,i=r.l2r;e.range=[n(t[0]),n(t[2])],r.range=[i(t[1]),i(t[3])]},w.updateTraces=function(t,e){var r,n,i,a=Object.keys(this.traces);this.fullData=t;t:for(r=0;r<a.length;r++){var o=a[r],s=this.traces[o];for(n=0;n<t.length;n++)if((i=t[n]).uid===o&&i.type===s.type)continue t;s.dispose(),delete this.traces[o]}for(r=0;r<t.length;r++){i=t[r];var l=e[r],c=this.traces[i.uid];c?c.update(i,l):(c=i._module.plot(this,i,l),this.traces[i.uid]=c)}this.glplot.objects.sort(function(t,e){return t._trace.index-e._trace.index})},w.updateFx=function(t){\\\"lasso\\\"===t||\\\"select\\\"===t?(this.pickCanvas.style[\\\"pointer-events\\\"]=\\\"none\\\",this.mouseContainer.style[\\\"pointer-events\\\"]=\\\"none\\\"):(this.pickCanvas.style[\\\"pointer-events\\\"]=\\\"auto\\\",this.mouseContainer.style[\\\"pointer-events\\\"]=\\\"auto\\\"),this.mouseContainer.style.cursor=\\\"pan\\\"===t?\\\"move\\\":\\\"zoom\\\"===t?\\\"crosshair\\\":null},w.emitPointAction=function(t,e){for(var r,n=t.trace.uid,i=t.pointIndex,a=0;a<this.fullData.length;a++)this.fullData[a].uid===n&&(r=this.fullData[a]);var o={x:t.traceCoord[0],y:t.traceCoord[1],curveNumber:r.index,pointNumber:i,data:r._input,fullData:this.fullData,xaxis:this.xaxis,yaxis:this.yaxis};s.appendArrayPointValue(o,r,i),this.graphDiv.emit(e,{points:[o]})},w.draw=function(){if(!this.stopped){requestAnimationFrame(this.redraw);var t=this.glplot,e=this.camera,r=e.mouseListener,n=1===this.lastButtonState&&0===r.buttons,i=this.fullLayout;this.lastButtonState=r.buttons,this.cameraChanged();var a,o=r.x*t.pixelRatio,l=this.canvas.height-t.pixelRatio*r.y;if(e.boxEnabled&&\\\"zoom\\\"===i.dragmode){this.selectBox.enabled=!0;for(var c=this.selectBox.selectBox=[Math.min(e.boxStart[0],e.boxEnd[0]),Math.min(e.boxStart[1],e.boxEnd[1]),Math.max(e.boxStart[0],e.boxEnd[0]),Math.max(e.boxStart[1],e.boxEnd[1])],u=0;u<2;u++)e.boxStart[u]===e.boxEnd[u]&&(c[u]=t.dataBox[u],c[u+2]=t.dataBox[u+2]);t.setDirty()}else if(!e.panning&&this.isMouseOver){this.selectBox.enabled=!1;var h=i._size,f=this.xaxis.domain,p=this.yaxis.domain,d=(a=t.pick(o/t.pixelRatio+h.l+f[0]*h.w,l/t.pixelRatio-(h.t+(1-p[1])*h.h)))&&a.object._trace.handlePick(a);if(d&&n&&this.emitPointAction(d,\\\"plotly_click\\\"),a&&\\\"skip\\\"!==a.object._trace.hoverinfo&&i.hovermode&&d&&(!this.lastPickResult||this.lastPickResult.traceUid!==d.trace.uid||this.lastPickResult.dataCoord[0]!==d.dataCoord[0]||this.lastPickResult.dataCoord[1]!==d.dataCoord[1])){var g=d;this.lastPickResult={traceUid:d.trace?d.trace.uid:null,dataCoord:d.dataCoord.slice()},this.spikes.update({center:a.dataCoord}),g.screenCoord=[((t.viewBox[2]-t.viewBox[0])*(a.dataCoord[0]-t.dataBox[0])/(t.dataBox[2]-t.dataBox[0])+t.viewBox[0])/t.pixelRatio,(this.canvas.height-(t.viewBox[3]-t.viewBox[1])*(a.dataCoord[1]-t.dataBox[1])/(t.dataBox[3]-t.dataBox[1])-t.viewBox[1])/t.pixelRatio],this.emitPointAction(d,\\\"plotly_hover\\\");var v=this.fullData[g.trace.index]||{},m=g.pointIndex,y=s.castHoverinfo(v,i,m);if(y&&\\\"all\\\"!==y){var x=y.split(\\\"+\\\");-1===x.indexOf(\\\"x\\\")&&(g.traceCoord[0]=void 0),-1===x.indexOf(\\\"y\\\")&&(g.traceCoord[1]=void 0),-1===x.indexOf(\\\"z\\\")&&(g.traceCoord[2]=void 0),-1===x.indexOf(\\\"text\\\")&&(g.textLabel=void 0),-1===x.indexOf(\\\"name\\\")&&(g.name=void 0)}s.loneHover({x:g.screenCoord[0],y:g.screenCoord[1],xLabel:this.hoverFormatter(\\\"xaxis\\\",g.traceCoord[0]),yLabel:this.hoverFormatter(\\\"yaxis\\\",g.traceCoord[1]),zLabel:g.traceCoord[2],text:g.textLabel,name:g.name,color:s.castHoverOption(v,m,\\\"bgcolor\\\")||g.color,borderColor:s.castHoverOption(v,m,\\\"bordercolor\\\"),fontFamily:s.castHoverOption(v,m,\\\"font.family\\\"),fontSize:s.castHoverOption(v,m,\\\"font.size\\\"),fontColor:s.castHoverOption(v,m,\\\"font.color\\\"),nameLength:s.castHoverOption(v,m,\\\"namelength\\\"),textAlign:s.castHoverOption(v,m,\\\"align\\\")},{container:this.svgContainer,gd:this.graphDiv})}}a||this.unhover(),t.draw()}},w.unhover=function(){this.lastPickResult&&(this.spikes.update({}),this.lastPickResult=null,this.graphDiv.emit(\\\"plotly_unhover\\\"),s.loneUnhover(this.svgContainer))},w.hoverFormatter=function(t,e){if(void 0!==e){var r=this[t];return o.tickText(r,r.c2l(e),\\\"hover\\\").text}}},{\\\"../../components/fx\\\":632,\\\"../../lib/show_no_webgl_msg\\\":740,\\\"../../plots/cartesian/axes\\\":767,\\\"../../registry\\\":847,\\\"../cartesian/autorange\\\":766,\\\"../cartesian/constants\\\":773,\\\"../cartesian/constraints\\\":774,\\\"./camera\\\":803,\\\"./convert\\\":804,\\\"gl-plot2d\\\":287,\\\"gl-select-box\\\":299,\\\"gl-spikes2d\\\":308,\\\"webgl-context\\\":556}],807:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plot_api/edit_types\\\").overrideAll,i=t(\\\"../../components/fx/layout_attributes\\\"),a=t(\\\"./scene\\\"),o=t(\\\"../get_data\\\").getSubplotData,s=t(\\\"../../lib\\\"),l=t(\\\"../../constants/xmlns_namespaces\\\");r.name=\\\"gl3d\\\",r.attr=\\\"scene\\\",r.idRoot=\\\"scene\\\",r.idRegex=r.attrRegex=s.counterRegex(\\\"scene\\\"),r.attributes=t(\\\"./layout/attributes\\\"),r.layoutAttributes=t(\\\"./layout/layout_attributes\\\"),r.baseLayoutAttrOverrides=n({hoverlabel:i.hoverlabel},\\\"plot\\\",\\\"nested\\\"),r.supplyLayoutDefaults=t(\\\"./layout/defaults\\\"),r.plot=function(t){for(var e=t._fullLayout,r=t._fullData,n=e._subplots.gl3d,i=0;i<n.length;i++){var s=n[i],l=o(r,\\\"gl3d\\\",s),c=e[s],u=c.camera,h=c._scene;h||(h=new a({id:s,graphDiv:t,container:t.querySelector(\\\".gl-container\\\"),staticPlot:t._context.staticPlot,plotGlPixelRatio:t._context.plotGlPixelRatio,camera:u},e),c._scene=h),h.viewInitial||(h.viewInitial={up:{x:u.up.x,y:u.up.y,z:u.up.z},eye:{x:u.eye.x,y:u.eye.y,z:u.eye.z},center:{x:u.center.x,y:u.center.y,z:u.center.z}}),h.plot(l,e,t.layout)}},r.clean=function(t,e,r,n){for(var i=n._subplots.gl3d||[],a=0;a<i.length;a++){var o=i[a];!e[o]&&n[o]._scene&&(n[o]._scene.destroy(),n._infolayer&&n._infolayer.selectAll(\\\".annotation-\\\"+o).remove())}},r.toSVG=function(t){for(var e=t._fullLayout,r=e._subplots.gl3d,n=e._size,i=0;i<r.length;i++){var a=e[r[i]],o=a.domain,s=a._scene,c=s.toImage(\\\"png\\\");e._glimages.append(\\\"svg:image\\\").attr({xmlns:l.svg,\\\"xlink:href\\\":c,x:n.l+n.w*o.x[0],y:n.t+n.h*(1-o.y[1]),width:n.w*(o.x[1]-o.x[0]),height:n.h*(o.y[1]-o.y[0]),preserveAspectRatio:\\\"none\\\"}),s.destroy()}},r.cleanId=function(t){if(t.match(/^scene[0-9]*$/)){var e=t.substr(5);return\\\"1\\\"===e&&(e=\\\"\\\"),\\\"scene\\\"+e}},r.updateFx=function(t){for(var e=t._fullLayout,r=e._subplots.gl3d,n=0;n<r.length;n++){e[r[n]]._scene.updateFx(e.dragmode,e.hovermode)}}},{\\\"../../components/fx/layout_attributes\\\":633,\\\"../../constants/xmlns_namespaces\\\":696,\\\"../../lib\\\":719,\\\"../../plot_api/edit_types\\\":750,\\\"../get_data\\\":802,\\\"./layout/attributes\\\":808,\\\"./layout/defaults\\\":812,\\\"./layout/layout_attributes\\\":813,\\\"./scene\\\":817}],808:[function(t,e,r){\\\"use strict\\\";e.exports={scene:{valType:\\\"subplotid\\\",dflt:\\\"scene\\\",editType:\\\"calc+clearAxisTypes\\\"}}},{}],809:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../../components/color\\\"),i=t(\\\"../../cartesian/layout_attributes\\\"),a=t(\\\"../../../lib/extend\\\").extendFlat,o=t(\\\"../../../plot_api/edit_types\\\").overrideAll;e.exports=o({visible:i.visible,showspikes:{valType:\\\"boolean\\\",dflt:!0},spikesides:{valType:\\\"boolean\\\",dflt:!0},spikethickness:{valType:\\\"number\\\",min:0,dflt:2},spikecolor:{valType:\\\"color\\\",dflt:n.defaultLine},showbackground:{valType:\\\"boolean\\\",dflt:!1},backgroundcolor:{valType:\\\"color\\\",dflt:\\\"rgba(204, 204, 204, 0.5)\\\"},showaxeslabels:{valType:\\\"boolean\\\",dflt:!0},color:i.color,categoryorder:i.categoryorder,categoryarray:i.categoryarray,title:i.title,type:a({},i.type,{values:[\\\"-\\\",\\\"linear\\\",\\\"log\\\",\\\"date\\\",\\\"category\\\"]}),autorange:i.autorange,rangemode:i.rangemode,range:a({},i.range,{items:[{valType:\\\"any\\\",editType:\\\"plot\\\",impliedEdits:{\\\"^autorange\\\":!1}},{valType:\\\"any\\\",editType:\\\"plot\\\",impliedEdits:{\\\"^autorange\\\":!1}}],anim:!1}),tickmode:i.tickmode,nticks:i.nticks,tick0:i.tick0,dtick:i.dtick,tickvals:i.tickvals,ticktext:i.ticktext,ticks:i.ticks,mirror:i.mirror,ticklen:i.ticklen,tickwidth:i.tickwidth,tickcolor:i.tickcolor,showticklabels:i.showticklabels,tickfont:i.tickfont,tickangle:i.tickangle,tickprefix:i.tickprefix,showtickprefix:i.showtickprefix,ticksuffix:i.ticksuffix,showticksuffix:i.showticksuffix,showexponent:i.showexponent,exponentformat:i.exponentformat,separatethousands:i.separatethousands,tickformat:i.tickformat,tickformatstops:i.tickformatstops,hoverformat:i.hoverformat,showline:i.showline,linecolor:i.linecolor,linewidth:i.linewidth,showgrid:i.showgrid,gridcolor:a({},i.gridcolor,{dflt:\\\"rgb(204, 204, 204)\\\"}),gridwidth:i.gridwidth,zeroline:i.zeroline,zerolinecolor:i.zerolinecolor,zerolinewidth:i.zerolinewidth,_deprecated:{title:i._deprecated.title,titlefont:i._deprecated.titlefont}},\\\"plot\\\",\\\"from-root\\\")},{\\\"../../../components/color\\\":593,\\\"../../../lib/extend\\\":710,\\\"../../../plot_api/edit_types\\\":750,\\\"../../cartesian/layout_attributes\\\":779}],810:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"tinycolor2\\\").mix,i=t(\\\"../../../lib\\\"),a=t(\\\"../../../plot_api/plot_template\\\"),o=t(\\\"./axis_attributes\\\"),s=t(\\\"../../cartesian/type_defaults\\\"),l=t(\\\"../../cartesian/axis_defaults\\\"),c=[\\\"xaxis\\\",\\\"yaxis\\\",\\\"zaxis\\\"];e.exports=function(t,e,r){var u,h;function f(t,e){return i.coerce(u,h,o,t,e)}for(var p=0;p<c.length;p++){var d=c[p];u=t[d]||{},(h=a.newContainer(e,d))._id=d[0]+r.scene,h._name=d,s(u,h,f,r),l(u,h,f,{font:r.font,letter:d[0],data:r.data,showGrid:!0,noTickson:!0,bgColor:r.bgColor,calendar:r.calendar},r.fullLayout),f(\\\"gridcolor\\\",n(h.color,r.bgColor,13600/187).toRgbString()),f(\\\"title.text\\\",d[0]),h.setScale=i.noop,f(\\\"showspikes\\\")&&(f(\\\"spikesides\\\"),f(\\\"spikethickness\\\"),f(\\\"spikecolor\\\",h.color)),f(\\\"showaxeslabels\\\"),f(\\\"showbackground\\\")&&f(\\\"backgroundcolor\\\")}}},{\\\"../../../lib\\\":719,\\\"../../../plot_api/plot_template\\\":757,\\\"../../cartesian/axis_defaults\\\":769,\\\"../../cartesian/type_defaults\\\":790,\\\"./axis_attributes\\\":809,tinycolor2:537}],811:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../../lib/str2rgbarray\\\"),i=t(\\\"../../../lib\\\"),a=[\\\"xaxis\\\",\\\"yaxis\\\",\\\"zaxis\\\"];function o(){this.bounds=[[-10,-10,-10],[10,10,10]],this.ticks=[[],[],[]],this.tickEnable=[!0,!0,!0],this.tickFont=[\\\"sans-serif\\\",\\\"sans-serif\\\",\\\"sans-serif\\\"],this.tickSize=[12,12,12],this.tickAngle=[0,0,0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[18,18,18],this.labels=[\\\"x\\\",\\\"y\\\",\\\"z\\\"],this.labelEnable=[!0,!0,!0],this.labelFont=[\\\"Open Sans\\\",\\\"Open Sans\\\",\\\"Open Sans\\\"],this.labelSize=[20,20,20],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[30,30,30],this.lineEnable=[!0,!0,!0],this.lineMirror=[!1,!1,!1],this.lineWidth=[1,1,1],this.lineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.lineTickEnable=[!0,!0,!0],this.lineTickMirror=[!1,!1,!1],this.lineTickLength=[10,10,10],this.lineTickWidth=[1,1,1],this.lineTickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.gridEnable=[!0,!0,!0],this.gridWidth=[1,1,1],this.gridColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroEnable=[!0,!0,!0],this.zeroLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroLineWidth=[2,2,2],this.backgroundEnable=[!0,!0,!0],this.backgroundColor=[[.8,.8,.8,.5],[.8,.8,.8,.5],[.8,.8,.8,.5]],this._defaultTickPad=this.tickPad.slice(),this._defaultLabelPad=this.labelPad.slice(),this._defaultLineTickLength=this.lineTickLength.slice()}o.prototype.merge=function(t,e){for(var r=0;r<3;++r){var o=e[a[r]];o.visible?(this.labels[r]=t._meta?i.templateString(o.title.text,t._meta):o.title.text,\\\"font\\\"in o.title&&(o.title.font.color&&(this.labelColor[r]=n(o.title.font.color)),o.title.font.family&&(this.labelFont[r]=o.title.font.family),o.title.font.size&&(this.labelSize[r]=o.title.font.size)),\\\"showline\\\"in o&&(this.lineEnable[r]=o.showline),\\\"linecolor\\\"in o&&(this.lineColor[r]=n(o.linecolor)),\\\"linewidth\\\"in o&&(this.lineWidth[r]=o.linewidth),\\\"showgrid\\\"in o&&(this.gridEnable[r]=o.showgrid),\\\"gridcolor\\\"in o&&(this.gridColor[r]=n(o.gridcolor)),\\\"gridwidth\\\"in o&&(this.gridWidth[r]=o.gridwidth),\\\"log\\\"===o.type?this.zeroEnable[r]=!1:\\\"zeroline\\\"in o&&(this.zeroEnable[r]=o.zeroline),\\\"zerolinecolor\\\"in o&&(this.zeroLineColor[r]=n(o.zerolinecolor)),\\\"zerolinewidth\\\"in o&&(this.zeroLineWidth[r]=o.zerolinewidth),\\\"ticks\\\"in o&&o.ticks?this.lineTickEnable[r]=!0:this.lineTickEnable[r]=!1,\\\"ticklen\\\"in o&&(this.lineTickLength[r]=this._defaultLineTickLength[r]=o.ticklen),\\\"tickcolor\\\"in o&&(this.lineTickColor[r]=n(o.tickcolor)),\\\"tickwidth\\\"in o&&(this.lineTickWidth[r]=o.tickwidth),\\\"tickangle\\\"in o&&(this.tickAngle[r]=\\\"auto\\\"===o.tickangle?-3600:Math.PI*-o.tickangle/180),\\\"showticklabels\\\"in o&&(this.tickEnable[r]=o.showticklabels),\\\"tickfont\\\"in o&&(o.tickfont.color&&(this.tickColor[r]=n(o.tickfont.color)),o.tickfont.family&&(this.tickFont[r]=o.tickfont.family),o.tickfont.size&&(this.tickSize[r]=o.tickfont.size)),\\\"mirror\\\"in o?-1!==[\\\"ticks\\\",\\\"all\\\",\\\"allticks\\\"].indexOf(o.mirror)?(this.lineTickMirror[r]=!0,this.lineMirror[r]=!0):!0===o.mirror?(this.lineTickMirror[r]=!1,this.lineMirror[r]=!0):(this.lineTickMirror[r]=!1,this.lineMirror[r]=!1):this.lineMirror[r]=!1,\\\"showbackground\\\"in o&&!1!==o.showbackground?(this.backgroundEnable[r]=!0,this.backgroundColor[r]=n(o.backgroundcolor)):this.backgroundEnable[r]=!1):(this.tickEnable[r]=!1,this.labelEnable[r]=!1,this.lineEnable[r]=!1,this.lineTickEnable[r]=!1,this.gridEnable[r]=!1,this.zeroEnable[r]=!1,this.backgroundEnable[r]=!1)}},e.exports=function(t,e){var r=new o;return r.merge(t,e),r}},{\\\"../../../lib\\\":719,\\\"../../../lib/str2rgbarray\\\":742}],812:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../../lib\\\"),i=t(\\\"../../../components/color\\\"),a=t(\\\"../../../registry\\\"),o=t(\\\"../../subplot_defaults\\\"),s=t(\\\"./axis_defaults\\\"),l=t(\\\"./layout_attributes\\\"),c=t(\\\"../../get_data\\\").getSubplotData,u=\\\"gl3d\\\";function h(t,e,r,n){for(var o=r(\\\"bgcolor\\\"),l=i.combine(o,n.paper_bgcolor),h=[\\\"up\\\",\\\"center\\\",\\\"eye\\\"],f=0;f<h.length;f++)r(\\\"camera.\\\"+h[f]+\\\".x\\\"),r(\\\"camera.\\\"+h[f]+\\\".y\\\"),r(\\\"camera.\\\"+h[f]+\\\".z\\\");r(\\\"camera.projection.type\\\");var p=!!r(\\\"aspectratio.x\\\")&&!!r(\\\"aspectratio.y\\\")&&!!r(\\\"aspectratio.z\\\"),d=r(\\\"aspectmode\\\",p?\\\"manual\\\":\\\"auto\\\");p||(t.aspectratio=e.aspectratio={x:1,y:1,z:1},\\\"manual\\\"===d&&(e.aspectmode=\\\"auto\\\"),t.aspectmode=e.aspectmode);var g=c(n.fullData,u,n.id);s(t,e,{font:n.font,scene:n.id,data:g,bgColor:l,calendar:n.calendar,fullLayout:n.fullLayout}),a.getComponentMethod(\\\"annotations3d\\\",\\\"handleDefaults\\\")(t,e,n);var v=n.getDfltFromLayout(\\\"dragmode\\\");if(!1!==v&&!v)if(v=\\\"orbit\\\",t.camera&&t.camera.up){var m=t.camera.up.x,y=t.camera.up.y,x=t.camera.up.z;0!==x&&(m&&y&&x?x/Math.sqrt(m*m+y*y+x*x)>.999&&(v=\\\"turntable\\\"):v=\\\"turntable\\\")}else v=\\\"turntable\\\";r(\\\"dragmode\\\",v),r(\\\"hovermode\\\",n.getDfltFromLayout(\\\"hovermode\\\"))}e.exports=function(t,e,r){var i=e._basePlotModules.length>1;o(t,e,r,{type:u,attributes:l,handleDefaults:h,fullLayout:e,font:e.font,fullData:r,getDfltFromLayout:function(e){if(!i)return n.validate(t[e],l[e])?t[e]:void 0},paper_bgcolor:e.paper_bgcolor,calendar:e.calendar})}},{\\\"../../../components/color\\\":593,\\\"../../../lib\\\":719,\\\"../../../registry\\\":847,\\\"../../get_data\\\":802,\\\"../../subplot_defaults\\\":842,\\\"./axis_defaults\\\":810,\\\"./layout_attributes\\\":813}],813:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./axis_attributes\\\"),i=t(\\\"../../domain\\\").attributes,a=t(\\\"../../../lib/extend\\\").extendFlat,o=t(\\\"../../../lib\\\").counterRegex;function s(t,e,r){return{x:{valType:\\\"number\\\",dflt:t,editType:\\\"camera\\\"},y:{valType:\\\"number\\\",dflt:e,editType:\\\"camera\\\"},z:{valType:\\\"number\\\",dflt:r,editType:\\\"camera\\\"},editType:\\\"camera\\\"}}e.exports={_arrayAttrRegexps:[o(\\\"scene\\\",\\\".annotations\\\",!0)],bgcolor:{valType:\\\"color\\\",dflt:\\\"rgba(0,0,0,0)\\\",editType:\\\"plot\\\"},camera:{up:a(s(0,0,1),{}),center:a(s(0,0,0),{}),eye:a(s(1.25,1.25,1.25),{}),projection:{type:{valType:\\\"enumerated\\\",values:[\\\"perspective\\\",\\\"orthographic\\\"],dflt:\\\"perspective\\\",editType:\\\"calc\\\"},editType:\\\"calc\\\"},editType:\\\"camera\\\"},domain:i({name:\\\"scene\\\",editType:\\\"plot\\\"}),aspectmode:{valType:\\\"enumerated\\\",values:[\\\"auto\\\",\\\"cube\\\",\\\"data\\\",\\\"manual\\\"],dflt:\\\"auto\\\",editType:\\\"plot\\\",impliedEdits:{\\\"aspectratio.x\\\":void 0,\\\"aspectratio.y\\\":void 0,\\\"aspectratio.z\\\":void 0}},aspectratio:{x:{valType:\\\"number\\\",min:0,editType:\\\"plot\\\",impliedEdits:{\\\"^aspectmode\\\":\\\"manual\\\"}},y:{valType:\\\"number\\\",min:0,editType:\\\"plot\\\",impliedEdits:{\\\"^aspectmode\\\":\\\"manual\\\"}},z:{valType:\\\"number\\\",min:0,editType:\\\"plot\\\",impliedEdits:{\\\"^aspectmode\\\":\\\"manual\\\"}},editType:\\\"plot\\\",impliedEdits:{aspectmode:\\\"manual\\\"}},xaxis:n,yaxis:n,zaxis:n,dragmode:{valType:\\\"enumerated\\\",values:[\\\"orbit\\\",\\\"turntable\\\",\\\"zoom\\\",\\\"pan\\\",!1],editType:\\\"plot\\\"},hovermode:{valType:\\\"enumerated\\\",values:[\\\"closest\\\",!1],dflt:\\\"closest\\\",editType:\\\"modebar\\\"},uirevision:{valType:\\\"any\\\",editType:\\\"none\\\"},editType:\\\"plot\\\",_deprecated:{cameraposition:{valType:\\\"info_array\\\",editType:\\\"camera\\\"}}}},{\\\"../../../lib\\\":719,\\\"../../../lib/extend\\\":710,\\\"../../domain\\\":792,\\\"./axis_attributes\\\":809}],814:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../../lib/str2rgbarray\\\"),i=[\\\"xaxis\\\",\\\"yaxis\\\",\\\"zaxis\\\"];function a(){this.enabled=[!0,!0,!0],this.colors=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.drawSides=[!0,!0,!0],this.lineWidth=[1,1,1]}a.prototype.merge=function(t){for(var e=0;e<3;++e){var r=t[i[e]];r.visible?(this.enabled[e]=r.showspikes,this.colors[e]=n(r.spikecolor),this.drawSides[e]=r.spikesides,this.lineWidth[e]=r.spikethickness):(this.enabled[e]=!1,this.drawSides[e]=!1)}},e.exports=function(t){var e=new a;return e.merge(t),e}},{\\\"../../../lib/str2rgbarray\\\":742}],815:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){for(var e=t.axesOptions,r=t.glplot.axesPixels,s=t.fullSceneLayout,l=[[],[],[]],c=0;c<3;++c){var u=s[a[c]];if(u._length=(r[c].hi-r[c].lo)*r[c].pixelsPerDataUnit/t.dataScale[c],Math.abs(u._length)===1/0||isNaN(u._length))l[c]=[];else{u._input_range=u.range.slice(),u.range[0]=r[c].lo/t.dataScale[c],u.range[1]=r[c].hi/t.dataScale[c],u._m=1/(t.dataScale[c]*r[c].pixelsPerDataUnit),u.range[0]===u.range[1]&&(u.range[0]-=1,u.range[1]+=1);var h=u.tickmode;if(\\\"auto\\\"===u.tickmode){u.tickmode=\\\"linear\\\";var f=u.nticks||i.constrain(u._length/40,4,9);n.autoTicks(u,Math.abs(u.range[1]-u.range[0])/f)}for(var p=n.calcTicks(u),d=0;d<p.length;++d)p[d].x=p[d].x*t.dataScale[c],\\\"date\\\"===u.type&&(p[d].text=p[d].text.replace(/\\\\<br\\\\>/g,\\\" \\\"));l[c]=p,u.tickmode=h}}e.ticks=l;for(var c=0;c<3;++c){o[c]=.5*(t.glplot.bounds[0][c]+t.glplot.bounds[1][c]);for(var d=0;d<2;++d)e.bounds[d][c]=t.glplot.bounds[d][c]}t.contourLevels=function(t){for(var e=new Array(3),r=0;r<3;++r){for(var n=t[r],i=new Array(n.length),a=0;a<n.length;++a)i[a]=n[a].x;e[r]=i}return e}(l)};var n=t(\\\"../../cartesian/axes\\\"),i=t(\\\"../../../lib\\\"),a=[\\\"xaxis\\\",\\\"yaxis\\\",\\\"zaxis\\\"],o=[0,0,0]},{\\\"../../../lib\\\":719,\\\"../../cartesian/axes\\\":767}],816:[function(t,e,r){\\\"use strict\\\";function n(t,e){var r,n,i=[0,0,0,0];for(r=0;r<4;++r)for(n=0;n<4;++n)i[n]+=t[4*r+n]*e[r];return i}e.exports=function(t,e){return n(t.projection,n(t.view,n(t.model,[e[0],e[1],e[2],1])))}},{}],817:[function(t,e,r){\\\"use strict\\\";var n,i,a=t(\\\"gl-plot3d\\\").createCamera,o=t(\\\"gl-plot3d\\\").createScene,s=t(\\\"webgl-context\\\"),l=t(\\\"has-passive-events\\\"),c=t(\\\"../../registry\\\"),u=t(\\\"../../lib\\\"),h=t(\\\"../../plots/cartesian/axes\\\"),f=t(\\\"../../components/fx\\\"),p=t(\\\"../../lib/str2rgbarray\\\"),d=t(\\\"../../lib/show_no_webgl_msg\\\"),g=t(\\\"./project\\\"),v=t(\\\"./layout/convert\\\"),m=t(\\\"./layout/spikes\\\"),y=t(\\\"./layout/tick_marks\\\");function x(t,e,r,a){if(t.initializeGLCamera(),!function(t,e,r,a,l){var c={canvas:a,gl:l,container:t.container,axes:t.axesOptions,spikes:t.spikeOptions,pickRadius:10,snapToData:!0,autoScale:!0,autoBounds:!1,cameraObject:e,pixelRatio:r};if(t.staticMode){if(!(i||(n=document.createElement(\\\"canvas\\\"),i=s({canvas:n,preserveDrawingBuffer:!0,premultipliedAlpha:!0,antialias:!0}))))throw new Error(\\\"error creating static canvas/context for image server\\\");c.pixelRatio=t.pixelRatio,c.gl=i,c.canvas=n}try{t.glplot=o(c)}catch(t){return!1}return!0}(t,t.camera,e,r,a))return d(t);var c=t.graphDiv,p=function(t){if(!1!==t.fullSceneLayout.dragmode){var e={};e[t.id+\\\".camera\\\"]=T(t.camera),t.saveCamera(c.layout),t.graphDiv.emit(\\\"plotly_relayout\\\",e)}};return t.glplot.canvas.addEventListener(\\\"mouseup\\\",function(){p(t)}),t.glplot.canvas.addEventListener(\\\"wheel\\\",function(){c._context._scrollZoom.gl3d&&p(t)},!!l&&{passive:!1}),t.glplot.canvas.addEventListener(\\\"mousemove\\\",function(){if(!1!==t.fullSceneLayout.dragmode&&0!==t.camera.mouseListener.buttons){var e={};e[t.id+\\\".camera\\\"]=T(t.camera),t.graphDiv.emit(\\\"plotly_relayouting\\\",e)}}),t.staticMode||t.glplot.canvas.addEventListener(\\\"webglcontextlost\\\",function(e){c&&c.emit&&c.emit(\\\"plotly_webglcontextlost\\\",{event:e,layer:t.id})},!1),t.glplot.camera=t.camera,t.glplot.oncontextloss=function(){t.recoverContext()},t.glplot.onrender=function(t){var e,r=t.graphDiv,n=t.svgContainer,i=t.container.getBoundingClientRect(),a=i.width,o=i.height;n.setAttributeNS(null,\\\"viewBox\\\",\\\"0 0 \\\"+a+\\\" \\\"+o),n.setAttributeNS(null,\\\"width\\\",a),n.setAttributeNS(null,\\\"height\\\",o),y(t),t.glplot.axes.update(t.axesOptions);for(var s,l=Object.keys(t.traces),c=null,p=t.glplot.selection,d=0;d<l.length;++d)\\\"skip\\\"!==(e=t.traces[l[d]]).data.hoverinfo&&e.handlePick(p)&&(c=e),e.setContourLevels&&e.setContourLevels();function v(e,r){var n=t.fullSceneLayout[e];return h.tickText(n,n.d2l(r),\\\"hover\\\").text}if(null!==c){var m=g(t.glplot.cameraParams,p.dataCoordinate);e=c.data;var x,b=r._fullData[e.index],_=p.index,w={xLabel:v(\\\"xaxis\\\",p.traceCoordinate[0]),yLabel:v(\\\"yaxis\\\",p.traceCoordinate[1]),zLabel:v(\\\"zaxis\\\",p.traceCoordinate[2])},k=f.castHoverinfo(b,t.fullLayout,_),T=(k||\\\"\\\").split(\\\"+\\\"),A=k&&\\\"all\\\"===k;b.hovertemplate||A||(-1===T.indexOf(\\\"x\\\")&&(w.xLabel=void 0),-1===T.indexOf(\\\"y\\\")&&(w.yLabel=void 0),-1===T.indexOf(\\\"z\\\")&&(w.zLabel=void 0),-1===T.indexOf(\\\"text\\\")&&(p.textLabel=void 0),-1===T.indexOf(\\\"name\\\")&&(c.name=void 0));var M=[];\\\"cone\\\"===e.type||\\\"streamtube\\\"===e.type?(w.uLabel=v(\\\"xaxis\\\",p.traceCoordinate[3]),(A||-1!==T.indexOf(\\\"u\\\"))&&M.push(\\\"u: \\\"+w.uLabel),w.vLabel=v(\\\"yaxis\\\",p.traceCoordinate[4]),(A||-1!==T.indexOf(\\\"v\\\"))&&M.push(\\\"v: \\\"+w.vLabel),w.wLabel=v(\\\"zaxis\\\",p.traceCoordinate[5]),(A||-1!==T.indexOf(\\\"w\\\"))&&M.push(\\\"w: \\\"+w.wLabel),w.normLabel=p.traceCoordinate[6].toPrecision(3),(A||-1!==T.indexOf(\\\"norm\\\"))&&M.push(\\\"norm: \\\"+w.normLabel),\\\"streamtube\\\"===e.type&&(w.divergenceLabel=p.traceCoordinate[7].toPrecision(3),(A||-1!==T.indexOf(\\\"divergence\\\"))&&M.push(\\\"divergence: \\\"+w.divergenceLabel)),p.textLabel&&M.push(p.textLabel),x=M.join(\\\"<br>\\\")):\\\"isosurface\\\"===e.type||\\\"volume\\\"===e.type?(w.valueLabel=h.tickText(t.mockAxis,t.mockAxis.d2l(p.traceCoordinate[3]),\\\"hover\\\").text,M.push(\\\"value: \\\"+w.valueLabel),p.textLabel&&M.push(p.textLabel),x=M.join(\\\"<br>\\\")):x=p.textLabel;var S={x:p.traceCoordinate[0],y:p.traceCoordinate[1],z:p.traceCoordinate[2],data:b._input,fullData:b,curveNumber:b.index,pointNumber:_};f.appendArrayPointValue(S,b,_),e._module.eventData&&(S=b._module.eventData(S,p,b,{},_));var E={points:[S]};t.fullSceneLayout.hovermode&&f.loneHover({trace:b,x:(.5+.5*m[0]/m[3])*a,y:(.5-.5*m[1]/m[3])*o,xLabel:w.xLabel,yLabel:w.yLabel,zLabel:w.zLabel,text:x,name:c.name,color:f.castHoverOption(b,_,\\\"bgcolor\\\")||c.color,borderColor:f.castHoverOption(b,_,\\\"bordercolor\\\"),fontFamily:f.castHoverOption(b,_,\\\"font.family\\\"),fontSize:f.castHoverOption(b,_,\\\"font.size\\\"),fontColor:f.castHoverOption(b,_,\\\"font.color\\\"),nameLength:f.castHoverOption(b,_,\\\"namelength\\\"),textAlign:f.castHoverOption(b,_,\\\"align\\\"),hovertemplate:u.castOption(b,_,\\\"hovertemplate\\\"),hovertemplateLabels:u.extendFlat({},S,w),eventData:[S]},{container:n,gd:r}),p.buttons&&p.distance<5?r.emit(\\\"plotly_click\\\",E):r.emit(\\\"plotly_hover\\\",E),s=E}else f.loneUnhover(n),r.emit(\\\"plotly_unhover\\\",s);t.drawAnnotations(t)}.bind(null,t),t.traces={},t.make4thDimension(),!0}function b(t,e){var r=document.createElement(\\\"div\\\"),n=t.container;this.graphDiv=t.graphDiv;var i=document.createElementNS(\\\"http://www.w3.org/2000/svg\\\",\\\"svg\\\");i.style.position=\\\"absolute\\\",i.style.top=i.style.left=\\\"0px\\\",i.style.width=i.style.height=\\\"100%\\\",i.style[\\\"z-index\\\"]=20,i.style[\\\"pointer-events\\\"]=\\\"none\\\",r.appendChild(i),this.svgContainer=i,r.id=t.id,r.style.position=\\\"absolute\\\",r.style.top=r.style.left=\\\"0px\\\",r.style.width=r.style.height=\\\"100%\\\",n.appendChild(r),this.fullLayout=e,this.id=t.id||\\\"scene\\\",this.fullSceneLayout=e[this.id],this.plotArgs=[[],{},{}],this.axesOptions=v(e,e[this.id]),this.spikeOptions=m(e[this.id]),this.container=r,this.staticMode=!!t.staticPlot,this.pixelRatio=this.pixelRatio||t.plotGlPixelRatio||2,this.dataScale=[1,1,1],this.contourLevels=[[],[],[]],this.convertAnnotations=c.getComponentMethod(\\\"annotations3d\\\",\\\"convert\\\"),this.drawAnnotations=c.getComponentMethod(\\\"annotations3d\\\",\\\"draw\\\"),x(this,this.pixelRatio)}var _=b.prototype;_.initializeGLCamera=function(){var t=this.fullSceneLayout.camera,e=\\\"orthographic\\\"===t.projection.type;this.camera=a(this.container,{center:[t.center.x,t.center.y,t.center.z],eye:[t.eye.x,t.eye.y,t.eye.z],up:[t.up.x,t.up.y,t.up.z],_ortho:e,zoomMin:.01,zoomMax:100,mode:\\\"orbit\\\"})},_.recoverContext=function(){var t=this,e=this.glplot.gl,r=this.glplot.canvas,n=this.glplot.camera,i=this.glplot.pixelRatio;this.glplot.dispose(),requestAnimationFrame(function a(){e.isContextLost()?requestAnimationFrame(a):x(t,n,i,r)?t.plot.apply(t,t.plotArgs):u.error(\\\"Catastrophic and unrecoverable WebGL error. Context lost.\\\")})};var w=[\\\"xaxis\\\",\\\"yaxis\\\",\\\"zaxis\\\"];function k(t,e,r){for(var n=t.fullSceneLayout,i=0;i<3;i++){var a=w[i],o=a.charAt(0),s=n[a],l=e[o],c=e[o+\\\"calendar\\\"],h=e[\\\"_\\\"+o+\\\"length\\\"];if(u.isArrayOrTypedArray(l))for(var f,p=0;p<(h||l.length);p++)if(u.isArrayOrTypedArray(l[p]))for(var d=0;d<l[p].length;++d)f=s.d2l(l[p][d],0,c),!isNaN(f)&&isFinite(f)&&(r[0][i]=Math.min(r[0][i],f),r[1][i]=Math.max(r[1][i],f));else f=s.d2l(l[p],0,c),!isNaN(f)&&isFinite(f)&&(r[0][i]=Math.min(r[0][i],f),r[1][i]=Math.max(r[1][i],f));else r[0][i]=Math.min(r[0][i],0),r[1][i]=Math.max(r[1][i],h-1)}}function T(t){return{up:{x:t.up[0],y:t.up[1],z:t.up[2]},center:{x:t.center[0],y:t.center[1],z:t.center[2]},eye:{x:t.eye[0],y:t.eye[1],z:t.eye[2]},projection:{type:!0===t._ortho?\\\"orthographic\\\":\\\"perspective\\\"}}}_.plot=function(t,e,r){if(this.plotArgs=[t,e,r],!this.glplot.contextLost){var n,i,a,o,s,l,c=e[this.id],u=r[this.id];c.bgcolor?this.glplot.clearColor=p(c.bgcolor):this.glplot.clearColor=[0,0,0,0],this.glplot.snapToData=!0,this.fullLayout=e,this.fullSceneLayout=c,this.glplotLayout=c,this.axesOptions.merge(e,c),this.spikeOptions.merge(c),this.setCamera(c.camera),this.updateFx(c.dragmode,c.hovermode),this.camera.enableWheel=this.graphDiv._context._scrollZoom.gl3d,this.glplot.update({}),this.setConvert(s),t?Array.isArray(t)||(t=[t]):t=[];var h=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(a=0;a<t.length;++a)!0===(n=t[a]).visible&&0!==n._length&&k(this,n,h);!function(t,e){for(var r=t.fullSceneLayout,n=r.annotations||[],i=0;i<3;i++)for(var a=w[i],o=a.charAt(0),s=r[a],l=0;l<n.length;l++){var c=n[l];if(c.visible){var u=s.r2l(c[o]);!isNaN(u)&&isFinite(u)&&(e[0][i]=Math.min(e[0][i],u),e[1][i]=Math.max(e[1][i],u))}}}(this,h);var f=[1,1,1];for(o=0;o<3;++o)h[1][o]===h[0][o]?f[o]=1:f[o]=1/(h[1][o]-h[0][o]);for(this.dataScale=f,this.convertAnnotations(this),a=0;a<t.length;++a)!0===(n=t[a]).visible&&0!==n._length&&((i=this.traces[n.uid])?i.data.type===n.type?i.update(n):(i.dispose(),i=n._module.plot(this,n),this.traces[n.uid]=i):(i=n._module.plot(this,n),this.traces[n.uid]=i),i.name=n.name);var d=Object.keys(this.traces);t:for(a=0;a<d.length;++a){for(o=0;o<t.length;++o)if(t[o].uid===d[a]&&!0===t[o].visible&&0!==t[o]._length)continue t;(i=this.traces[d[a]]).dispose(),delete this.traces[d[a]]}this.glplot.objects.sort(function(t,e){return t._trace.data.index-e._trace.data.index});var g=[[0,0,0],[0,0,0]],v=[],m={};for(a=0;a<3;++a){if((l=(s=c[w[a]]).type)in m?(m[l].acc*=f[a],m[l].count+=1):m[l]={acc:f[a],count:1},s.autorange){g[0][a]=1/0,g[1][a]=-1/0;var y=this.glplot.objects,x=this.fullSceneLayout.annotations||[],b=s._name.charAt(0);for(o=0;o<y.length;o++){var _=y[o],T=_.bounds,A=_._trace.data._pad||0;\\\"ErrorBars\\\"===_.constructor.name&&s._lowerLogErrorBound?g[0][a]=Math.min(g[0][a],s._lowerLogErrorBound):g[0][a]=Math.min(g[0][a],T[0][a]/f[a]-A),g[1][a]=Math.max(g[1][a],T[1][a]/f[a]+A)}for(o=0;o<x.length;o++){var M=x[o];if(M.visible){var S=s.r2l(M[b]);g[0][a]=Math.min(g[0][a],S),g[1][a]=Math.max(g[1][a],S)}}if(\\\"rangemode\\\"in s&&\\\"tozero\\\"===s.rangemode&&(g[0][a]=Math.min(g[0][a],0),g[1][a]=Math.max(g[1][a],0)),g[0][a]>g[1][a])g[0][a]=-1,g[1][a]=1;else{var E=g[1][a]-g[0][a];g[0][a]-=E/32,g[1][a]+=E/32}if(\\\"reversed\\\"===s.autorange){var C=g[0][a];g[0][a]=g[1][a],g[1][a]=C}}else{var L=s.range;g[0][a]=s.r2l(L[0]),g[1][a]=s.r2l(L[1])}g[0][a]===g[1][a]&&(g[0][a]-=1,g[1][a]+=1),v[a]=g[1][a]-g[0][a],this.glplot.bounds[0][a]=g[0][a]*f[a],this.glplot.bounds[1][a]=g[1][a]*f[a]}var P=[1,1,1];for(a=0;a<3;++a){var O=m[l=(s=c[w[a]]).type];P[a]=Math.pow(O.acc,1/O.count)/f[a]}var z;if(\\\"auto\\\"===c.aspectmode)z=Math.max.apply(null,P)/Math.min.apply(null,P)<=4?P:[1,1,1];else if(\\\"cube\\\"===c.aspectmode)z=[1,1,1];else if(\\\"data\\\"===c.aspectmode)z=P;else{if(\\\"manual\\\"!==c.aspectmode)throw new Error(\\\"scene.js aspectRatio was not one of the enumerated types\\\");var I=c.aspectratio;z=[I.x,I.y,I.z]}c.aspectratio.x=u.aspectratio.x=z[0],c.aspectratio.y=u.aspectratio.y=z[1],c.aspectratio.z=u.aspectratio.z=z[2],this.glplot.aspect=z;var D=c.domain||null,R=e._size||null;if(D&&R){var F=this.container.style;F.position=\\\"absolute\\\",F.left=R.l+D.x[0]*R.w+\\\"px\\\",F.top=R.t+(1-D.y[1])*R.h+\\\"px\\\",F.width=R.w*(D.x[1]-D.x[0])+\\\"px\\\",F.height=R.h*(D.y[1]-D.y[0])+\\\"px\\\"}this.glplot.redraw()}},_.destroy=function(){this.glplot&&(this.camera.mouseListener.enabled=!1,this.container.removeEventListener(\\\"wheel\\\",this.camera.wheelListener),this.camera=this.glplot.camera=null,this.glplot.dispose(),this.container.parentNode.removeChild(this.container),this.glplot=null)},_.getCamera=function(){return this.glplot.camera.view.recalcMatrix(this.camera.view.lastT()),T(this.glplot.camera)},_.setCamera=function(t){var e;this.glplot.camera.lookAt.apply(this,[[(e=t).eye.x,e.eye.y,e.eye.z],[e.center.x,e.center.y,e.center.z],[e.up.x,e.up.y,e.up.z]]);var r=\\\"orthographic\\\"===t.projection.type;if(r!==this.glplot.camera._ortho){this.glplot.redraw();var n=this.glplot.pixelRatio,i=this.glplot.clearColor;this.glplot.gl.clearColor(i[0],i[1],i[2],i[3]),this.glplot.gl.clear(this.glplot.gl.DEPTH_BUFFER_BIT|this.glplot.gl.COLOR_BUFFER_BIT),this.glplot.dispose(),x(this,n),this.glplot.camera._ortho=r}},_.saveCamera=function(t){var e=this.fullLayout,r=this.getCamera(),n=u.nestedProperty(t,this.id+\\\".camera\\\"),i=n.get(),a=!1;function o(t,e,r,n){var i=[\\\"up\\\",\\\"center\\\",\\\"eye\\\"],a=[\\\"x\\\",\\\"y\\\",\\\"z\\\"];return e[i[r]]&&t[i[r]][a[n]]===e[i[r]][a[n]]}if(void 0===i)a=!0;else{for(var s=0;s<3;s++)for(var l=0;l<3;l++)if(!o(r,i,s,l)){a=!0;break}(!i.projection||r.projection&&r.projection.type!==i.projection.type)&&(a=!0)}if(a){var h={};h[this.id+\\\".camera\\\"]=i,c.call(\\\"_storeDirectGUIEdit\\\",t,e._preGUI,h),n.set(r),u.nestedProperty(e,this.id+\\\".camera\\\").set(r)}return a},_.updateFx=function(t,e){var r=this.camera;if(r)if(\\\"orbit\\\"===t)r.mode=\\\"orbit\\\",r.keyBindingMode=\\\"rotate\\\";else if(\\\"turntable\\\"===t){r.up=[0,0,1],r.mode=\\\"turntable\\\",r.keyBindingMode=\\\"rotate\\\";var n=this.graphDiv,i=n._fullLayout,a=this.fullSceneLayout.camera,o=a.up.x,s=a.up.y,l=a.up.z;if(l/Math.sqrt(o*o+s*s+l*l)<.999){var h=this.id+\\\".camera.up\\\",f={x:0,y:0,z:1},p={};p[h]=f;var d=n.layout;c.call(\\\"_storeDirectGUIEdit\\\",d,i._preGUI,p),a.up=f,u.nestedProperty(d,h).set(f)}}else r.keyBindingMode=t;this.fullSceneLayout.hovermode=e},_.toImage=function(t){t||(t=\\\"png\\\"),this.staticMode&&this.container.appendChild(n),this.glplot.redraw();var e=this.glplot.gl,r=e.drawingBufferWidth,i=e.drawingBufferHeight;e.bindFramebuffer(e.FRAMEBUFFER,null);var a=new Uint8Array(r*i*4);e.readPixels(0,0,r,i,e.RGBA,e.UNSIGNED_BYTE,a);for(var o=0,s=i-1;o<s;++o,--s)for(var l=0;l<r;++l)for(var c=0;c<4;++c){var u=a[4*(r*o+l)+c];a[4*(r*o+l)+c]=a[4*(r*s+l)+c],a[4*(r*s+l)+c]=u}var h=document.createElement(\\\"canvas\\\");h.width=r,h.height=i;var f,p=h.getContext(\\\"2d\\\"),d=p.createImageData(r,i);switch(d.data.set(a),p.putImageData(d,0,0),t){case\\\"jpeg\\\":f=h.toDataURL(\\\"image/jpeg\\\");break;case\\\"webp\\\":f=h.toDataURL(\\\"image/webp\\\");break;default:f=h.toDataURL(\\\"image/png\\\")}return this.staticMode&&this.container.removeChild(n),f},_.setConvert=function(){for(var t=0;t<3;t++){var e=this.fullSceneLayout[w[t]];h.setConvert(e,this.fullLayout),e.setScale=u.noop}},_.make4thDimension=function(){var t=this.graphDiv._fullLayout;this.mockAxis={type:\\\"linear\\\",showexponent:\\\"all\\\",exponentformat:\\\"B\\\"},h.setConvert(this.mockAxis,t)},e.exports=b},{\\\"../../components/fx\\\":632,\\\"../../lib\\\":719,\\\"../../lib/show_no_webgl_msg\\\":740,\\\"../../lib/str2rgbarray\\\":742,\\\"../../plots/cartesian/axes\\\":767,\\\"../../registry\\\":847,\\\"./layout/convert\\\":811,\\\"./layout/spikes\\\":814,\\\"./layout/tick_marks\\\":815,\\\"./project\\\":816,\\\"gl-plot3d\\\":290,\\\"has-passive-events\\\":411,\\\"webgl-context\\\":556}],818:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,n){n=n||t.length;for(var i=new Array(n),a=0;a<n;a++)i[a]=[t[a],e[a],r[a]];return i}},{}],819:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./font_attributes\\\"),i=t(\\\"./animation_attributes\\\"),a=t(\\\"../components/color/attributes\\\"),o=t(\\\"./pad_attributes\\\"),s=t(\\\"../lib/extend\\\").extendFlat,l=n({editType:\\\"calc\\\"});l.family.dflt='\\\"Open Sans\\\", verdana, arial, sans-serif',l.size.dflt=12,l.color.dflt=a.defaultLine,e.exports={font:l,title:{text:{valType:\\\"string\\\",editType:\\\"layoutstyle\\\"},font:n({editType:\\\"layoutstyle\\\"}),xref:{valType:\\\"enumerated\\\",dflt:\\\"container\\\",values:[\\\"container\\\",\\\"paper\\\"],editType:\\\"layoutstyle\\\"},yref:{valType:\\\"enumerated\\\",dflt:\\\"container\\\",values:[\\\"container\\\",\\\"paper\\\"],editType:\\\"layoutstyle\\\"},x:{valType:\\\"number\\\",min:0,max:1,dflt:.5,editType:\\\"layoutstyle\\\"},y:{valType:\\\"number\\\",min:0,max:1,dflt:\\\"auto\\\",editType:\\\"layoutstyle\\\"},xanchor:{valType:\\\"enumerated\\\",dflt:\\\"auto\\\",values:[\\\"auto\\\",\\\"left\\\",\\\"center\\\",\\\"right\\\"],editType:\\\"layoutstyle\\\"},yanchor:{valType:\\\"enumerated\\\",dflt:\\\"auto\\\",values:[\\\"auto\\\",\\\"top\\\",\\\"middle\\\",\\\"bottom\\\"],editType:\\\"layoutstyle\\\"},pad:s(o({editType:\\\"layoutstyle\\\"}),{}),editType:\\\"layoutstyle\\\"},autosize:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"none\\\"},width:{valType:\\\"number\\\",min:10,dflt:700,editType:\\\"plot\\\"},height:{valType:\\\"number\\\",min:10,dflt:450,editType:\\\"plot\\\"},margin:{l:{valType:\\\"number\\\",min:0,dflt:80,editType:\\\"plot\\\"},r:{valType:\\\"number\\\",min:0,dflt:80,editType:\\\"plot\\\"},t:{valType:\\\"number\\\",min:0,dflt:100,editType:\\\"plot\\\"},b:{valType:\\\"number\\\",min:0,dflt:80,editType:\\\"plot\\\"},pad:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"plot\\\"},autoexpand:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"plot\\\"},editType:\\\"plot\\\"},paper_bgcolor:{valType:\\\"color\\\",dflt:a.background,editType:\\\"plot\\\"},plot_bgcolor:{valType:\\\"color\\\",dflt:a.background,editType:\\\"layoutstyle\\\"},separators:{valType:\\\"string\\\",editType:\\\"plot\\\"},hidesources:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"plot\\\"},showlegend:{valType:\\\"boolean\\\",editType:\\\"legend\\\"},colorway:{valType:\\\"colorlist\\\",dflt:a.defaults,editType:\\\"calc\\\"},datarevision:{valType:\\\"any\\\",editType:\\\"calc\\\"},uirevision:{valType:\\\"any\\\",editType:\\\"none\\\"},editrevision:{valType:\\\"any\\\",editType:\\\"none\\\"},selectionrevision:{valType:\\\"any\\\",editType:\\\"none\\\"},template:{valType:\\\"any\\\",editType:\\\"calc\\\"},modebar:{orientation:{valType:\\\"enumerated\\\",values:[\\\"v\\\",\\\"h\\\"],dflt:\\\"h\\\",editType:\\\"modebar\\\"},bgcolor:{valType:\\\"color\\\",editType:\\\"modebar\\\"},color:{valType:\\\"color\\\",editType:\\\"modebar\\\"},activecolor:{valType:\\\"color\\\",editType:\\\"modebar\\\"},uirevision:{valType:\\\"any\\\",editType:\\\"none\\\"},editType:\\\"modebar\\\"},meta:{valType:\\\"any\\\",arrayOk:!0,editType:\\\"plot\\\"},transition:s({},i.transition,{editType:\\\"none\\\"}),_deprecated:{title:{valType:\\\"string\\\",editType:\\\"layoutstyle\\\"},titlefont:n({editType:\\\"layoutstyle\\\"})}}},{\\\"../components/color/attributes\\\":592,\\\"../lib/extend\\\":710,\\\"./animation_attributes\\\":762,\\\"./font_attributes\\\":793,\\\"./pad_attributes\\\":827}],820:[function(t,e,r){\\\"use strict\\\";var n={\\\"open-street-map\\\":{id:\\\"osm\\\",version:8,sources:{\\\"plotly-osm-tiles\\\":{type:\\\"raster\\\",attribution:'<a href=\\\"http://www.openstreetmap.org/about/\\\" target=\\\"_blank\\\">\\\\xa9 OpenStreetMap</a>',tiles:[\\\"https://a.tile.openstreetmap.org/{z}/{x}/{y}.png\\\",\\\"https://b.tile.openstreetmap.org/{z}/{x}/{y}.png\\\"],tileSize:256}},layers:[{id:\\\"plotly-osm-tiles\\\",type:\\\"raster\\\",source:\\\"plotly-osm-tiles\\\",minzoom:0,maxzoom:22}]},\\\"white-bg\\\":{id:\\\"white-bg\\\",version:8,sources:{},layers:[{id:\\\"white-bg\\\",type:\\\"background\\\",paint:{\\\"background-color\\\":\\\"#FFFFFF\\\"},minzoom:0,maxzoom:22}]},\\\"carto-positron\\\":{id:\\\"carto-positron\\\",version:8,sources:{\\\"plotly-carto-positron\\\":{type:\\\"raster\\\",attribution:'<a href=\\\"https://carto.com/\\\" target=\\\"_blank\\\">\\\\xa9 CARTO</a>',tiles:[\\\"https://cartodb-basemaps-c.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png\\\"],tileSize:256}},layers:[{id:\\\"plotly-carto-positron\\\",type:\\\"raster\\\",source:\\\"plotly-carto-positron\\\",minzoom:0,maxzoom:22}]},\\\"carto-darkmatter\\\":{id:\\\"carto-darkmatter\\\",version:8,sources:{\\\"plotly-carto-darkmatter\\\":{type:\\\"raster\\\",attribution:'<a href=\\\"https://carto.com/\\\" target=\\\"_blank\\\">\\\\xa9 CARTO</a>',tiles:[\\\"https://cartodb-basemaps-c.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png\\\"],tileSize:256}},layers:[{id:\\\"plotly-carto-darkmatter\\\",type:\\\"raster\\\",source:\\\"plotly-carto-darkmatter\\\",minzoom:0,maxzoom:22}]},\\\"stamen-terrain\\\":{id:\\\"stamen-terrain\\\",version:8,sources:{\\\"plotly-stamen-terrain\\\":{type:\\\"raster\\\",attribution:'Map tiles by <a href=\\\"http://stamen.com\\\">Stamen Design</a>, under <a href=\\\"http://creativecommons.org/licenses/by/3.0\\\">CC BY 3.0</a> | Data by <a href=\\\"http://openstreetmap.org\\\">OpenStreetMap</a>, under <a href=\\\"http://www.openstreetmap.org/copyright\\\">ODbL</a>.',tiles:[\\\"https://stamen-tiles.a.ssl.fastly.net/terrain/{z}/{x}/{y}.png\\\"],tileSize:256}},layers:[{id:\\\"plotly-stamen-terrain\\\",type:\\\"raster\\\",source:\\\"plotly-stamen-terrain\\\",minzoom:0,maxzoom:22}]},\\\"stamen-toner\\\":{id:\\\"stamen-toner\\\",version:8,sources:{\\\"plotly-stamen-toner\\\":{type:\\\"raster\\\",attribution:'Map tiles by <a href=\\\"http://stamen.com\\\">Stamen Design</a>, under <a href=\\\"http://creativecommons.org/licenses/by/3.0\\\">CC BY 3.0</a> | Data by <a href=\\\"http://openstreetmap.org\\\">OpenStreetMap</a>, under <a href=\\\"http://www.openstreetmap.org/copyright\\\">ODbL</a>.',tiles:[\\\"https://stamen-tiles.a.ssl.fastly.net/toner/{z}/{x}/{y}.png\\\"],tileSize:256}},layers:[{id:\\\"plotly-stamen-toner\\\",type:\\\"raster\\\",source:\\\"plotly-stamen-toner\\\",minzoom:0,maxzoom:22}]},\\\"stamen-watercolor\\\":{id:\\\"stamen-watercolor\\\",version:8,sources:{\\\"plotly-stamen-watercolor\\\":{type:\\\"raster\\\",attribution:'Map tiles by <a href=\\\"http://stamen.com\\\">Stamen Design</a>, under <a href=\\\"http://creativecommons.org/licenses/by/3.0\\\">CC BY 3.0</a> | Data by <a href=\\\"http://openstreetmap.org\\\">OpenStreetMap</a>, under <a href=\\\"http://creativecommons.org/licenses/by-sa/3.0\\\">CC BY SA</a>.',tiles:[\\\"https://stamen-tiles.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.png\\\"],tileSize:256}},layers:[{id:\\\"plotly-stamen-watercolor\\\",type:\\\"raster\\\",source:\\\"plotly-stamen-watercolor\\\",minzoom:0,maxzoom:22}]}},i=Object.keys(n);e.exports={requiredVersion:\\\"1.1.1\\\",styleUrlPrefix:\\\"mapbox://styles/mapbox/\\\",styleUrlSuffix:\\\"v9\\\",styleValuesMapbox:[\\\"basic\\\",\\\"streets\\\",\\\"outdoors\\\",\\\"light\\\",\\\"dark\\\",\\\"satellite\\\",\\\"satellite-streets\\\"],styleValueDflt:\\\"basic\\\",stylesNonMapbox:n,styleValuesNonMapbox:i,traceLayerPrefix:\\\"plotly-trace-layer-\\\",layoutLayerPrefix:\\\"plotly-layout-layer-\\\",wrongVersionErrorMsg:[\\\"Your custom plotly.js bundle is not using the correct mapbox-gl version\\\",\\\"Please install mapbox-gl@1.1.1.\\\"].join(\\\"\\\\n\\\"),noAccessTokenErrorMsg:[\\\"Missing Mapbox access token.\\\",\\\"Mapbox trace type require a Mapbox access token to be registered.\\\",\\\"For example:\\\",\\\"  Plotly.plot(gd, data, layout, { mapboxAccessToken: 'my-access-token' });\\\",\\\"More info here: https://www.mapbox.com/help/define-access-token/\\\"].join(\\\"\\\\n\\\"),missingStyleErrorMsg:[\\\"No valid mapbox style found, please set `mapbox.style` to one of:\\\",i.join(\\\", \\\"),\\\"or register a Mapbox access token to use a Mapbox-served style.\\\"].join(\\\"\\\\n\\\"),multipleTokensErrorMsg:[\\\"Set multiple mapbox access token across different mapbox subplot,\\\",\\\"using first token found as mapbox-gl does not allow multipleaccess tokens on the same page.\\\"].join(\\\"\\\\n\\\"),mapOnErrorMsg:\\\"Mapbox error.\\\",mapboxLogo:{path0:\\\"m 10.5,1.24 c -5.11,0 -9.25,4.15 -9.25,9.25 0,5.1 4.15,9.25 9.25,9.25 5.1,0 9.25,-4.15 9.25,-9.25 0,-5.11 -4.14,-9.25 -9.25,-9.25 z m 4.39,11.53 c -1.93,1.93 -4.78,2.31 -6.7,2.31 -0.7,0 -1.41,-0.05 -2.1,-0.16 0,0 -1.02,-5.64 2.14,-8.81 0.83,-0.83 1.95,-1.28 3.13,-1.28 1.27,0 2.49,0.51 3.39,1.42 1.84,1.84 1.89,4.75 0.14,6.52 z\\\",path1:\\\"M 10.5,-0.01 C 4.7,-0.01 0,4.7 0,10.49 c 0,5.79 4.7,10.5 10.5,10.5 5.8,0 10.5,-4.7 10.5,-10.5 C 20.99,4.7 16.3,-0.01 10.5,-0.01 Z m 0,19.75 c -5.11,0 -9.25,-4.15 -9.25,-9.25 0,-5.1 4.14,-9.26 9.25,-9.26 5.11,0 9.25,4.15 9.25,9.25 0,5.13 -4.14,9.26 -9.25,9.26 z\\\",path2:\\\"M 14.74,6.25 C 12.9,4.41 9.98,4.35 8.23,6.1 5.07,9.27 6.09,14.91 6.09,14.91 c 0,0 5.64,1.02 8.81,-2.14 C 16.64,11 16.59,8.09 14.74,6.25 Z m -2.27,4.09 -0.91,1.87 -0.9,-1.87 -1.86,-0.91 1.86,-0.9 0.9,-1.87 0.91,1.87 1.86,0.9 z\\\",polygon:\\\"11.56,12.21 10.66,10.34 8.8,9.43 10.66,8.53 11.56,6.66 12.47,8.53 14.33,9.43 12.47,10.34\\\"},styleRules:{map:\\\"overflow:hidden;position:relative;\\\",\\\"missing-css\\\":\\\"display:none;\\\",canary:\\\"background-color:salmon;\\\",\\\"ctrl-bottom-left\\\":\\\"position: absolute; pointer-events: none; z-index: 2; bottom: 0; left: 0;\\\",\\\"ctrl-bottom-right\\\":\\\"position: absolute; pointer-events: none; z-index: 2; right: 0; bottom: 0;\\\",ctrl:\\\"clear: both; pointer-events: auto; transform: translate(0, 0);\\\",\\\"ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner\\\":\\\"display: none;\\\",\\\"ctrl-attrib.mapboxgl-compact:hover .mapboxgl-ctrl-attrib-inner\\\":\\\"display: block; margin-top:2px\\\",\\\"ctrl-attrib.mapboxgl-compact:hover\\\":\\\"padding: 2px 24px 2px 4px; visibility: visible; margin-top: 6px;\\\",\\\"ctrl-attrib.mapboxgl-compact::after\\\":'content: \\\"\\\"; cursor: pointer; position: absolute; background-image: url(\\\\'data:image/svg+xml;charset=utf-8,%3Csvg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"%3E %3Cpath fill=\\\"%23333333\\\" fill-rule=\\\"evenodd\\\" d=\\\"M4,10a6,6 0 1,0 12,0a6,6 0 1,0 -12,0 M9,7a1,1 0 1,0 2,0a1,1 0 1,0 -2,0 M9,10a1,1 0 1,1 2,0l0,3a1,1 0 1,1 -2,0\\\"/%3E %3C/svg%3E\\\\'); background-color: rgba(255, 255, 255, 0.5); width: 24px; height: 24px; box-sizing: border-box; border-radius: 12px;',\\\"ctrl-attrib.mapboxgl-compact\\\":\\\"min-height: 20px; padding: 0; margin: 10px; position: relative; background-color: #fff; border-radius: 3px 12px 12px 3px;\\\",\\\"ctrl-bottom-right > .mapboxgl-ctrl-attrib.mapboxgl-compact::after\\\":\\\"bottom: 0; right: 0\\\",\\\"ctrl-bottom-left > .mapboxgl-ctrl-attrib.mapboxgl-compact::after\\\":\\\"bottom: 0; left: 0\\\",\\\"ctrl-bottom-left .mapboxgl-ctrl\\\":\\\"margin: 0 0 10px 10px; float: left;\\\",\\\"ctrl-bottom-right .mapboxgl-ctrl\\\":\\\"margin: 0 10px 10px 0; float: right;\\\",\\\"ctrl-attrib\\\":\\\"color: rgba(0, 0, 0, 0.75); text-decoration: none; font-size: 12px\\\",\\\"ctrl-attrib a\\\":\\\"color: rgba(0, 0, 0, 0.75); text-decoration: none; font-size: 12px\\\",\\\"ctrl-attrib a:hover\\\":\\\"color: inherit; text-decoration: underline;\\\",\\\"ctrl-attrib .mapbox-improve-map\\\":\\\"font-weight: bold; margin-left: 2px;\\\",\\\"attrib-empty\\\":\\\"display: none;\\\",\\\"ctrl-logo\\\":'display:block; width: 21px; height: 21px; background-image: url(\\\\'data:image/svg+xml;charset=utf-8,%3C?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?%3E %3Csvg version=\\\"1.1\\\" id=\\\"Layer_1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" x=\\\"0px\\\" y=\\\"0px\\\" viewBox=\\\"0 0 21 21\\\" style=\\\"enable-background:new 0 0 21 21;\\\" xml:space=\\\"preserve\\\"%3E%3Cg transform=\\\"translate(0,0.01)\\\"%3E%3Cpath d=\\\"m 10.5,1.24 c -5.11,0 -9.25,4.15 -9.25,9.25 0,5.1 4.15,9.25 9.25,9.25 5.1,0 9.25,-4.15 9.25,-9.25 0,-5.11 -4.14,-9.25 -9.25,-9.25 z m 4.39,11.53 c -1.93,1.93 -4.78,2.31 -6.7,2.31 -0.7,0 -1.41,-0.05 -2.1,-0.16 0,0 -1.02,-5.64 2.14,-8.81 0.83,-0.83 1.95,-1.28 3.13,-1.28 1.27,0 2.49,0.51 3.39,1.42 1.84,1.84 1.89,4.75 0.14,6.52 z\\\" style=\\\"opacity:0.9;fill:%23ffffff;enable-background:new\\\" class=\\\"st0\\\"/%3E%3Cpath d=\\\"M 10.5,-0.01 C 4.7,-0.01 0,4.7 0,10.49 c 0,5.79 4.7,10.5 10.5,10.5 5.8,0 10.5,-4.7 10.5,-10.5 C 20.99,4.7 16.3,-0.01 10.5,-0.01 Z m 0,19.75 c -5.11,0 -9.25,-4.15 -9.25,-9.25 0,-5.1 4.14,-9.26 9.25,-9.26 5.11,0 9.25,4.15 9.25,9.25 0,5.13 -4.14,9.26 -9.25,9.26 z\\\" style=\\\"opacity:0.35;enable-background:new\\\" class=\\\"st1\\\"/%3E%3Cpath d=\\\"M 14.74,6.25 C 12.9,4.41 9.98,4.35 8.23,6.1 5.07,9.27 6.09,14.91 6.09,14.91 c 0,0 5.64,1.02 8.81,-2.14 C 16.64,11 16.59,8.09 14.74,6.25 Z m -2.27,4.09 -0.91,1.87 -0.9,-1.87 -1.86,-0.91 1.86,-0.9 0.9,-1.87 0.91,1.87 1.86,0.9 z\\\" style=\\\"opacity:0.35;enable-background:new\\\" class=\\\"st1\\\"/%3E%3Cpolygon points=\\\"11.56,12.21 10.66,10.34 8.8,9.43 10.66,8.53 11.56,6.66 12.47,8.53 14.33,9.43 12.47,10.34 \\\" style=\\\"opacity:0.9;fill:%23ffffff;enable-background:new\\\" class=\\\"st0\\\"/%3E%3C/g%3E%3C/svg%3E\\\\')'}}},{}],821:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\");e.exports=function(t,e){var r=t.split(\\\" \\\"),i=r[0],a=r[1],o=n.isArrayOrTypedArray(e)?n.mean(e):e,s=.5+o/100,l=1.5+o/100,c=[\\\"\\\",\\\"\\\"],u=[0,0];switch(i){case\\\"top\\\":c[0]=\\\"top\\\",u[1]=-l;break;case\\\"bottom\\\":c[0]=\\\"bottom\\\",u[1]=l}switch(a){case\\\"left\\\":c[1]=\\\"right\\\",u[0]=-s;break;case\\\"right\\\":c[1]=\\\"left\\\",u[0]=s}return{anchor:c[0]&&c[1]?c.join(\\\"-\\\"):c[0]?c[0]:c[1]?c[1]:\\\"center\\\",offset:u}}},{\\\"../../lib\\\":719}],822:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"mapbox-gl\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../plots/get_data\\\").getSubplotCalcData,o=t(\\\"../../constants/xmlns_namespaces\\\"),s=t(\\\"d3\\\"),l=t(\\\"../../components/drawing\\\"),c=t(\\\"../../lib/svg_text_utils\\\"),u=t(\\\"./mapbox\\\"),h=r.constants=t(\\\"./constants\\\");function f(t){return\\\"string\\\"==typeof t&&(-1!==h.styleValuesMapbox.indexOf(t)||0===t.indexOf(\\\"mapbox://\\\"))}r.name=\\\"mapbox\\\",r.attr=\\\"subplot\\\",r.idRoot=\\\"mapbox\\\",r.idRegex=r.attrRegex=i.counterRegex(\\\"mapbox\\\"),r.attributes={subplot:{valType:\\\"subplotid\\\",dflt:\\\"mapbox\\\",editType:\\\"calc\\\"}},r.layoutAttributes=t(\\\"./layout_attributes\\\"),r.supplyLayoutDefaults=t(\\\"./layout_defaults\\\"),r.plot=function(t){var e=t._fullLayout,r=t.calcdata,o=e._subplots.mapbox;if(n.version!==h.requiredVersion)throw new Error(h.wrongVersionErrorMsg);var s=function(t,e){var r=t._fullLayout;if(\\\"\\\"===t._context.mapboxAccessToken)return\\\"\\\";for(var n=[],a=[],o=!1,s=!1,l=0;l<e.length;l++){var c=r[e[l]],u=c.accesstoken;f(c.style)&&(u?i.pushUnique(n,u):(f(c._input.style)&&(i.error(\\\"Uses Mapbox map style, but did not set an access token.\\\"),o=!0),s=!0)),u&&i.pushUnique(a,u)}if(s){var p=o?h.noAccessTokenErrorMsg:h.missingStyleErrorMsg;throw new Error(p)}return n.length?(n.length>1&&i.warn(h.multipleTokensErrorMsg),n[0]):(a.length&&i.log([\\\"Listed mapbox access token(s)\\\",a.join(\\\",\\\"),\\\"but did not use a Mapbox map style, ignoring token(s).\\\"].join(\\\" \\\")),\\\"\\\")}(t,o);n.accessToken=s;for(var l=0;l<o.length;l++){var c=o[l],p=a(r,\\\"mapbox\\\",c),d=e[c],g=d._subplot;g||(g=new u(t,c),e[c]._subplot=g),g.viewInitial||(g.viewInitial={center:i.extendFlat({},d.center),zoom:d.zoom,bearing:d.bearing,pitch:d.pitch}),g.plot(p,e,t._promises)}},r.clean=function(t,e,r,n){for(var i=n._subplots.mapbox||[],a=0;a<i.length;a++){var o=i[a];!e[o]&&n[o]._subplot&&n[o]._subplot.destroy()}},r.toSVG=function(t){for(var e=t._fullLayout,r=e._subplots.mapbox,n=e._size,i=0;i<r.length;i++){var a=e[r[i]],u=a.domain,f=a._subplot.toImage(\\\"png\\\");e._glimages.append(\\\"svg:image\\\").attr({xmlns:o.svg,\\\"xlink:href\\\":f,x:n.l+n.w*u.x[0],y:n.t+n.h*(1-u.y[1]),width:n.w*(u.x[1]-u.x[0]),height:n.h*(u.y[1]-u.y[0]),preserveAspectRatio:\\\"none\\\"});var p=s.select(a._subplot.div);if(!(null===p.select(\\\".mapboxgl-ctrl-logo\\\").node().offsetParent)){var d=e._glimages.append(\\\"g\\\");d.attr(\\\"transform\\\",\\\"translate(\\\"+(n.l+n.w*u.x[0]+10)+\\\", \\\"+(n.t+n.h*(1-u.y[0])-31)+\\\")\\\"),d.append(\\\"path\\\").attr(\\\"d\\\",h.mapboxLogo.path0).style({opacity:.9,fill:\\\"#ffffff\\\",\\\"enable-background\\\":\\\"new\\\"}),d.append(\\\"path\\\").attr(\\\"d\\\",h.mapboxLogo.path1).style(\\\"opacity\\\",.35).style(\\\"enable-background\\\",\\\"new\\\"),d.append(\\\"path\\\").attr(\\\"d\\\",h.mapboxLogo.path2).style(\\\"opacity\\\",.35).style(\\\"enable-background\\\",\\\"new\\\"),d.append(\\\"polygon\\\").attr(\\\"points\\\",h.mapboxLogo.polygon).style({opacity:.9,fill:\\\"#ffffff\\\",\\\"enable-background\\\":\\\"new\\\"})}var g=p.select(\\\".mapboxgl-ctrl-attrib\\\").text().replace(\\\"Improve this map\\\",\\\"\\\"),v=e._glimages.append(\\\"g\\\"),m=v.append(\\\"text\\\");m.text(g).classed(\\\"static-attribution\\\",!0).attr({\\\"font-size\\\":12,\\\"font-family\\\":\\\"Arial\\\",color:\\\"rgba(0, 0, 0, 0.75)\\\",\\\"text-anchor\\\":\\\"end\\\",\\\"data-unformatted\\\":g});var y=l.bBox(m.node()),x=n.w*(u.x[1]-u.x[0]);if(y.width>x/2){var b=g.split(\\\"|\\\").join(\\\"<br>\\\");m.text(b).attr(\\\"data-unformatted\\\",b).call(c.convertToTspans,t),y=l.bBox(m.node())}m.attr(\\\"transform\\\",\\\"translate(-3, \\\"+(8-y.height)+\\\")\\\"),v.insert(\\\"rect\\\",\\\".static-attribution\\\").attr({x:-y.width-6,y:-y.height-3,width:y.width+6,height:y.height+3,fill:\\\"rgba(255, 255, 255, 0.75)\\\"});var _=1;y.width+6>x&&(_=x/(y.width+6));var w=[n.l+n.w*u.x[1],n.t+n.h*(1-u.y[0])];v.attr(\\\"transform\\\",\\\"translate(\\\"+w[0]+\\\",\\\"+w[1]+\\\") scale(\\\"+_+\\\")\\\")}},r.updateFx=function(t){for(var e=t._fullLayout,r=e._subplots.mapbox,n=0;n<r.length;n++){e[r[n]]._subplot.updateFx(e)}}},{\\\"../../components/drawing\\\":614,\\\"../../constants/xmlns_namespaces\\\":696,\\\"../../lib\\\":719,\\\"../../lib/svg_text_utils\\\":743,\\\"../../plots/get_data\\\":802,\\\"./constants\\\":820,\\\"./layout_attributes\\\":824,\\\"./layout_defaults\\\":825,\\\"./mapbox\\\":826,d3:163,\\\"mapbox-gl\\\":426}],823:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./convert_text_opts\\\"),a=t(\\\"./constants\\\");function o(t,e){this.subplot=t,this.uid=t.uid+\\\"-\\\"+e,this.index=e,this.idSource=\\\"source-\\\"+this.uid,this.idLayer=a.layoutLayerPrefix+this.uid,this.sourceType=null,this.source=null,this.layerType=null,this.below=null,this.visible=!1}var s=o.prototype;function l(t){var e=t.source;return t.visible&&(n.isPlainObject(e)||(\\\"string\\\"==typeof e||Array.isArray(e))&&e.length>0)}function c(t){var e={},r={};switch(t.type){case\\\"circle\\\":n.extendFlat(r,{\\\"circle-radius\\\":t.circle.radius,\\\"circle-color\\\":t.color,\\\"circle-opacity\\\":t.opacity});break;case\\\"line\\\":n.extendFlat(r,{\\\"line-width\\\":t.line.width,\\\"line-color\\\":t.color,\\\"line-opacity\\\":t.opacity,\\\"line-dasharray\\\":t.line.dash});break;case\\\"fill\\\":n.extendFlat(r,{\\\"fill-color\\\":t.color,\\\"fill-outline-color\\\":t.fill.outlinecolor,\\\"fill-opacity\\\":t.opacity});break;case\\\"symbol\\\":var a=t.symbol,o=i(a.textposition,a.iconsize);n.extendFlat(e,{\\\"icon-image\\\":a.icon+\\\"-15\\\",\\\"icon-size\\\":a.iconsize/10,\\\"text-field\\\":a.text,\\\"text-size\\\":a.textfont.size,\\\"text-anchor\\\":o.anchor,\\\"text-offset\\\":o.offset,\\\"symbol-placement\\\":a.placement}),n.extendFlat(r,{\\\"icon-color\\\":t.color,\\\"text-color\\\":a.textfont.color,\\\"text-opacity\\\":t.opacity})}return{layout:e,paint:r}}s.update=function(t){this.visible?this.needsNewSource(t)?(this.removeLayer(),this.updateSource(t),this.updateLayer(t)):this.needsNewLayer(t)?this.updateLayer(t):this.updateStyle(t):(this.updateSource(t),this.updateLayer(t)),this.visible=l(t)},s.needsNewSource=function(t){return this.sourceType!==t.sourcetype||this.source!==t.source||this.layerType!==t.type},s.needsNewLayer=function(t){return this.layerType!==t.type||this.below!==this.subplot.belowLookup[\\\"layout-\\\"+this.index]},s.updateSource=function(t){var e=this.subplot.map;if(e.getSource(this.idSource)&&e.removeSource(this.idSource),this.sourceType=t.sourcetype,this.source=t.source,l(t)){var r=function(t){var e,r=t.sourcetype,n=t.source,i={type:r};\\\"geojson\\\"===r?e=\\\"data\\\":\\\"vector\\\"===r?e=\\\"string\\\"==typeof n?\\\"url\\\":\\\"tiles\\\":\\\"raster\\\"===r?(e=\\\"tiles\\\",i.tileSize=256):\\\"image\\\"===r&&(e=\\\"url\\\",i.coordinates=t.coordinates);i[e]=n,t.sourceattribution&&(i.attribution=t.sourceattribution);return i}(t);e.addSource(this.idSource,r)}},s.updateLayer=function(t){var e,r=this.subplot,n=c(t),i=this.subplot.belowLookup[\\\"layout-\\\"+this.index];if(\\\"traces\\\"===i)for(var o=r.getMapLayers(),s=0;s<o.length;s++){var u=o[s].id;if(\\\"string\\\"==typeof u&&0===u.indexOf(a.traceLayerPrefix)){e=u;break}}else e=i;this.removeLayer(),l(t)&&r.addLayer({id:this.idLayer,source:this.idSource,\\\"source-layer\\\":t.sourcelayer||\\\"\\\",type:t.type,minzoom:t.minzoom,maxzoom:t.maxzoom,layout:n.layout,paint:n.paint},e),this.layerType=t.type,this.below=i},s.updateStyle=function(t){if(l(t)){var e=c(t);this.subplot.setOptions(this.idLayer,\\\"setLayoutProperty\\\",e.layout),this.subplot.setOptions(this.idLayer,\\\"setPaintProperty\\\",e.paint)}},s.removeLayer=function(){var t=this.subplot.map;t.getLayer(this.idLayer)&&t.removeLayer(this.idLayer)},s.dispose=function(){var t=this.subplot.map;t.removeLayer(this.idLayer),t.removeSource(this.idSource)},e.exports=function(t,e,r){var n=new o(t,e);return n.update(r),n}},{\\\"../../lib\\\":719,\\\"./constants\\\":820,\\\"./convert_text_opts\\\":821}],824:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../components/color\\\").defaultLine,a=t(\\\"../domain\\\").attributes,o=t(\\\"../font_attributes\\\"),s=t(\\\"../../traces/scatter/attributes\\\").textposition,l=t(\\\"../../plot_api/edit_types\\\").overrideAll,c=t(\\\"../../plot_api/plot_template\\\").templatedArray,u=t(\\\"./constants\\\"),h=o({});h.family.dflt=\\\"Open Sans Regular, Arial Unicode MS Regular\\\",(e.exports=l({_arrayAttrRegexps:[n.counterRegex(\\\"mapbox\\\",\\\".layers\\\",!0)],domain:a({name:\\\"mapbox\\\"}),accesstoken:{valType:\\\"string\\\",noBlank:!0,strict:!0},style:{valType:\\\"any\\\",values:u.styleValuesMapbox.concat(u.styleValuesNonMapbox),dflt:u.styleValueDflt},center:{lon:{valType:\\\"number\\\",dflt:0},lat:{valType:\\\"number\\\",dflt:0}},zoom:{valType:\\\"number\\\",dflt:1},bearing:{valType:\\\"number\\\",dflt:0},pitch:{valType:\\\"number\\\",dflt:0},layers:c(\\\"layer\\\",{visible:{valType:\\\"boolean\\\",dflt:!0},sourcetype:{valType:\\\"enumerated\\\",values:[\\\"geojson\\\",\\\"vector\\\",\\\"raster\\\",\\\"image\\\"],dflt:\\\"geojson\\\"},source:{valType:\\\"any\\\"},sourcelayer:{valType:\\\"string\\\",dflt:\\\"\\\"},sourceattribution:{valType:\\\"string\\\"},type:{valType:\\\"enumerated\\\",values:[\\\"circle\\\",\\\"line\\\",\\\"fill\\\",\\\"symbol\\\",\\\"raster\\\"],dflt:\\\"circle\\\"},coordinates:{valType:\\\"any\\\"},below:{valType:\\\"string\\\"},color:{valType:\\\"color\\\",dflt:i},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:1},minzoom:{valType:\\\"number\\\",min:0,max:24,dflt:0},maxzoom:{valType:\\\"number\\\",min:0,max:24,dflt:24},circle:{radius:{valType:\\\"number\\\",dflt:15}},line:{width:{valType:\\\"number\\\",dflt:2},dash:{valType:\\\"data_array\\\"}},fill:{outlinecolor:{valType:\\\"color\\\",dflt:i}},symbol:{icon:{valType:\\\"string\\\",dflt:\\\"marker\\\"},iconsize:{valType:\\\"number\\\",dflt:10},text:{valType:\\\"string\\\",dflt:\\\"\\\"},placement:{valType:\\\"enumerated\\\",values:[\\\"point\\\",\\\"line\\\",\\\"line-center\\\"],dflt:\\\"point\\\"},textfont:h,textposition:n.extendFlat({},s,{arrayOk:!1})}})},\\\"plot\\\",\\\"from-root\\\")).uirevision={valType:\\\"any\\\",editType:\\\"none\\\"}},{\\\"../../components/color\\\":593,\\\"../../lib\\\":719,\\\"../../plot_api/edit_types\\\":750,\\\"../../plot_api/plot_template\\\":757,\\\"../../traces/scatter/attributes\\\":1112,\\\"../domain\\\":792,\\\"../font_attributes\\\":793,\\\"./constants\\\":820}],825:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../subplot_defaults\\\"),a=t(\\\"../array_container_defaults\\\"),o=t(\\\"./layout_attributes\\\");function s(t,e,r,n){r(\\\"accesstoken\\\",n.accessToken),r(\\\"style\\\"),r(\\\"center.lon\\\"),r(\\\"center.lat\\\"),r(\\\"zoom\\\"),r(\\\"bearing\\\"),r(\\\"pitch\\\"),a(t,e,{name:\\\"layers\\\",handleItemDefaults:l}),e._input=t}function l(t,e){function r(r,i){return n.coerce(t,e,o.layers,r,i)}if(r(\\\"visible\\\")){var i,a=r(\\\"sourcetype\\\"),s=\\\"raster\\\"===a||\\\"image\\\"===a;r(\\\"source\\\"),r(\\\"sourceattribution\\\"),\\\"vector\\\"===a&&r(\\\"sourcelayer\\\"),\\\"image\\\"===a&&r(\\\"coordinates\\\"),s&&(i=\\\"raster\\\");var l=r(\\\"type\\\",i);s&&\\\"raster\\\"!==l&&(l=e.type=\\\"raster\\\",n.log(\\\"Source types *raster* and *image* must drawn *raster* layer type.\\\")),r(\\\"below\\\"),r(\\\"color\\\"),r(\\\"opacity\\\"),r(\\\"minzoom\\\"),r(\\\"maxzoom\\\"),\\\"circle\\\"===l&&r(\\\"circle.radius\\\"),\\\"line\\\"===l&&(r(\\\"line.width\\\"),r(\\\"line.dash\\\")),\\\"fill\\\"===l&&r(\\\"fill.outlinecolor\\\"),\\\"symbol\\\"===l&&(r(\\\"symbol.icon\\\"),r(\\\"symbol.iconsize\\\"),r(\\\"symbol.text\\\"),n.coerceFont(r,\\\"symbol.textfont\\\"),r(\\\"symbol.textposition\\\"),r(\\\"symbol.placement\\\"))}}e.exports=function(t,e,r){i(t,e,r,{type:\\\"mapbox\\\",attributes:o,handleDefaults:s,partition:\\\"y\\\",accessToken:e._mapboxAccessToken})}},{\\\"../../lib\\\":719,\\\"../array_container_defaults\\\":763,\\\"../subplot_defaults\\\":842,\\\"./layout_attributes\\\":824}],826:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"mapbox-gl\\\"),i=t(\\\"d3\\\"),a=t(\\\"../../components/fx\\\"),o=t(\\\"../../lib\\\"),s=t(\\\"../../registry\\\"),l=t(\\\"../cartesian/axes\\\"),c=t(\\\"../../components/dragelement\\\"),u=t(\\\"../cartesian/select\\\").prepSelect,h=t(\\\"../cartesian/select\\\").selectOnClick,f=t(\\\"./constants\\\"),p=t(\\\"./layers\\\");function d(t,e){this.id=e,this.gd=t;var r=t._fullLayout,n=t._context;this.container=r._glcontainer.node(),this.isStatic=n.staticPlot,this.uid=r._uid+\\\"-\\\"+this.id,this.div=null,this.xaxis=null,this.yaxis=null,this.createFramework(r),this.map=null,this.accessToken=null,this.styleObj=null,this.traceHash={},this.layerList=[],this.belowLookup={}}var g=d.prototype;g.plot=function(t,e,r){var n,i=this,a=e[i.id];i.map&&a.accesstoken!==i.accessToken&&(i.map.remove(),i.map=null,i.styleObj=null,i.traceHash=[],i.layerList={}),n=i.map?new Promise(function(r,n){i.updateMap(t,e,r,n)}):new Promise(function(r,n){i.createMap(t,e,r,n)}),r.push(n)},g.createMap=function(t,e,r,i){var a=this,o=e[a.id],s=a.styleObj=m(o.style);a.accessToken=o.accesstoken;var l=a.map=new n.Map({container:a.div,style:s.style,center:x(o.center),zoom:o.zoom,bearing:o.bearing,pitch:o.pitch,interactive:!a.isStatic,preserveDrawingBuffer:a.isStatic,doubleClickZoom:!1,boxZoom:!1,attributionControl:!1}).addControl(new n.AttributionControl({compact:!0}));l._canvas.style.left=\\\"0px\\\",l._canvas.style.top=\\\"0px\\\",a.rejectOnError(i),a.isStatic||a.initFx(t,e);var c=[];c.push(new Promise(function(t){l.once(\\\"load\\\",t)})),c=c.concat(a.fetchMapData(t,e)),Promise.all(c).then(function(){a.fillBelowLookup(t,e),a.updateData(t),a.updateLayout(e),a.resolveOnRender(r)}).catch(i)},g.fetchMapData=function(t){var e=[];function r(t){return new Promise(function(e,r){i.json(t,function(n,i){if(n){delete PlotlyGeoAssets[t];var a=404===n.status?'GeoJSON at URL \\\"'+t+'\\\" does not exist.':\\\"Unexpected error while fetching from \\\"+t;return r(new Error(a))}PlotlyGeoAssets[t]=i,e(i)})})}for(var n=0;n<t.length;n++){var a=t[n][0].trace.geojson;\\\"string\\\"!=typeof a||PlotlyGeoAssets[a]||(PlotlyGeoAssets[a]=\\\"pending\\\",e.push(r(a)))}return e},g.updateMap=function(t,e,r,n){var i=this,a=i.map,o=e[this.id];i.rejectOnError(n);var s=[],l=m(o.style);i.styleObj.id!==l.id&&(i.styleObj=l,a.setStyle(l.style),i.traceHash={},s.push(new Promise(function(t){a.once(\\\"styledata\\\",t)}))),s=s.concat(i.fetchMapData(t,e)),Promise.all(s).then(function(){i.fillBelowLookup(t,e),i.updateData(t),i.updateLayout(e),i.resolveOnRender(r)}).catch(n)},g.fillBelowLookup=function(t,e){var r,n,i=e[this.id].layers,a=this.belowLookup={},o=!1;for(r=0;r<t.length;r++){var s=t[r][0].trace,l=s._module;\\\"string\\\"==typeof s.below?n=s.below:l.getBelow&&(n=l.getBelow(s,this)),\\\"\\\"===n&&(o=!0),a[\\\"trace-\\\"+s.uid]=n||\\\"\\\"}for(r=0;r<i.length;r++){var c=i[r];n=\\\"string\\\"==typeof c.below?c.below:o?\\\"traces\\\":\\\"\\\",a[\\\"layout-\\\"+r]=n}var u,h,f={};for(u in a)f[n=a[u]]?f[n].push(u):f[n]=[u];for(n in f){var p=f[n];if(p.length>1)for(r=0;r<p.length;r++)0===(u=p[r]).indexOf(\\\"trace-\\\")?(h=u.split(\\\"trace-\\\")[1],this.traceHash[h]&&(this.traceHash[h].below=null)):0===u.indexOf(\\\"layout-\\\")&&(h=u.split(\\\"layout-\\\")[1],this.layerList[h]&&(this.layerList[h].below=null))}};var v={choroplethmapbox:0,densitymapbox:1,scattermapbox:2};function m(t){var e={};return o.isPlainObject(t)?(e.id=t.id,e.style=t):\\\"string\\\"==typeof t?(e.id=t,-1!==f.styleValuesMapbox.indexOf(t)?e.style=y(t):f.stylesNonMapbox[t]?e.style=f.stylesNonMapbox[t]:e.style=t):(e.id=f.styleValueDflt,e.style=y(f.styleValueDflt)),e.transition={duration:0,delay:0},e}function y(t){return f.styleUrlPrefix+t+\\\"-\\\"+f.styleUrlSuffix}function x(t){return[t.lon,t.lat]}g.updateData=function(t){var e,r,n,i,a=this.traceHash,o=t.slice().sort(function(t,e){return v[t[0].trace.type]-v[e[0].trace.type]});for(n=0;n<o.length;n++){var s=o[n];(e=a[(r=s[0].trace).uid])?e.update(s):r._module&&(a[r.uid]=r._module.plot(this,s))}var l=Object.keys(a);t:for(n=0;n<l.length;n++){var c=l[n];for(i=0;i<t.length;i++)if(c===(r=t[i][0].trace).uid)continue t;(e=a[c]).dispose(),delete a[c]}},g.updateLayout=function(t){var e=this.map,r=t[this.id];e.setCenter(x(r.center)),e.setZoom(r.zoom),e.setBearing(r.bearing),e.setPitch(r.pitch),this.updateLayers(t),this.updateFramework(t),this.updateFx(t),this.map.resize(),this.gd._context._scrollZoom.mapbox?e.scrollZoom.enable():e.scrollZoom.disable()},g.resolveOnRender=function(t){var e=this.map;e.on(\\\"render\\\",function r(){e.loaded()&&(e.off(\\\"render\\\",r),setTimeout(t,0))})},g.rejectOnError=function(t){var e=this.map;function r(){t(new Error(f.mapOnErrorMsg))}e.once(\\\"error\\\",r),e.once(\\\"style.error\\\",r),e.once(\\\"source.error\\\",r),e.once(\\\"tile.error\\\",r),e.once(\\\"layer.error\\\",r)},g.createFramework=function(t){var e=this,r=e.div=document.createElement(\\\"div\\\");r.id=e.uid,r.style.position=\\\"absolute\\\",e.container.appendChild(r),e.xaxis={_id:\\\"x\\\",c2p:function(t){return e.project(t).x}},e.yaxis={_id:\\\"y\\\",c2p:function(t){return e.project(t).y}},e.updateFramework(t),e.mockAxis={type:\\\"linear\\\",showexponent:\\\"all\\\",exponentformat:\\\"B\\\"},l.setConvert(e.mockAxis,t)},g.initFx=function(t,e){var r=this,n=r.gd,i=r.map,o=!1;function l(){a.loneUnhover(e._hoverlayer)}function c(){var t=r.getView();n.emit(\\\"plotly_relayouting\\\",r.getViewEdits(t))}i.on(\\\"moveend\\\",function(t){if(r.map){var e=n._fullLayout;if(t.originalEvent||o){var i=e[r.id];s.call(\\\"_storeDirectGUIEdit\\\",n.layout,e._preGUI,r.getViewEdits(i));var a=r.getView();i._input.center=i.center=a.center,i._input.zoom=i.zoom=a.zoom,i._input.bearing=i.bearing=a.bearing,i._input.pitch=i.pitch=a.pitch,n.emit(\\\"plotly_relayout\\\",r.getViewEdits(a))}o=!1,e._rehover&&e._rehover()}}),i.on(\\\"wheel\\\",function(){o=!0}),i.on(\\\"mousemove\\\",function(t){var e=r.div.getBoundingClientRect();t.clientX=t.point.x+e.left,t.clientY=t.point.y+e.top,t.target.getBoundingClientRect=function(){return e},r.xaxis.p2c=function(){return t.lngLat.lng},r.yaxis.p2c=function(){return t.lngLat.lat},n._fullLayout._rehover=function(){n._fullLayout._hoversubplot===r.id&&a.hover(n,t,r.id)},a.hover(n,t,r.id),n._fullLayout._hoversubplot=r.id}),i.on(\\\"dragstart\\\",l),i.on(\\\"zoomstart\\\",l),i.on(\\\"mouseout\\\",function(){n._fullLayout._hoversubplot=null}),i.on(\\\"drag\\\",c),i.on(\\\"zoom\\\",c),i.on(\\\"dblclick\\\",function(){var t=n._fullLayout[r.id];s.call(\\\"_storeDirectGUIEdit\\\",n.layout,n._fullLayout._preGUI,r.getViewEdits(t));var e=r.viewInitial;i.setCenter(x(e.center)),i.setZoom(e.zoom),i.setBearing(e.bearing),i.setPitch(e.pitch);var a=r.getView();t._input.center=t.center=a.center,t._input.zoom=t.zoom=a.zoom,t._input.bearing=t.bearing=a.bearing,t._input.pitch=t.pitch=a.pitch,n.emit(\\\"plotly_doubleclick\\\",null),n.emit(\\\"plotly_relayout\\\",r.getViewEdits(a))}),r.clearSelect=function(){n._fullLayout._zoomlayer.selectAll(\\\".select-outline\\\").remove()},r.onClickInPanFn=function(t){return function(e){var i=n._fullLayout.clickmode;i.indexOf(\\\"select\\\")>-1&&h(e.originalEvent,n,[r.xaxis],[r.yaxis],r.id,t),i.indexOf(\\\"event\\\")>-1&&a.click(n,e.originalEvent)}}},g.updateFx=function(t){var e=this,r=e.map,n=e.gd;if(!e.isStatic){var i,a=t.dragmode;i=\\\"select\\\"===a?function(t,r){(t.range={})[e.id]=[l([r.xmin,r.ymin]),l([r.xmax,r.ymax])]}:function(t,r,n){(t.lassoPoints={})[e.id]=n.filtered.map(l)};var s=e.dragOptions;e.dragOptions=o.extendDeep(s||{},{element:e.div,gd:n,plotinfo:{id:e.id,xaxis:e.xaxis,yaxis:e.yaxis,fillRangeItems:i},xaxes:[e.xaxis],yaxes:[e.yaxis],subplot:e.id}),r.off(\\\"click\\\",e.onClickInPanHandler),\\\"select\\\"===a||\\\"lasso\\\"===a?(r.dragPan.disable(),r.on(\\\"zoomstart\\\",e.clearSelect),e.dragOptions.prepFn=function(t,r,n){u(t,r,n,e.dragOptions,a)},c.init(e.dragOptions)):(r.dragPan.enable(),r.off(\\\"zoomstart\\\",e.clearSelect),e.div.onmousedown=null,e.onClickInPanHandler=e.onClickInPanFn(e.dragOptions),r.on(\\\"click\\\",e.onClickInPanHandler))}function l(t){var r=e.map.unproject(t);return[r.lng,r.lat]}},g.updateFramework=function(t){var e=t[this.id].domain,r=t._size,n=this.div.style;n.width=r.w*(e.x[1]-e.x[0])+\\\"px\\\",n.height=r.h*(e.y[1]-e.y[0])+\\\"px\\\",n.left=r.l+e.x[0]*r.w+\\\"px\\\",n.top=r.t+(1-e.y[1])*r.h+\\\"px\\\",this.xaxis._offset=r.l+e.x[0]*r.w,this.xaxis._length=r.w*(e.x[1]-e.x[0]),this.yaxis._offset=r.t+(1-e.y[1])*r.h,this.yaxis._length=r.h*(e.y[1]-e.y[0])},g.updateLayers=function(t){var e,r=t[this.id].layers,n=this.layerList;if(r.length!==n.length){for(e=0;e<n.length;e++)n[e].dispose();for(n=this.layerList=[],e=0;e<r.length;e++)n.push(p(this,e,r[e]))}else for(e=0;e<r.length;e++)n[e].update(r[e])},g.destroy=function(){this.map&&(this.map.remove(),this.map=null,this.container.removeChild(this.div))},g.toImage=function(){return this.map.stop(),this.map.getCanvas().toDataURL()},g.setOptions=function(t,e,r){for(var n in r)this.map[e](t,n,r[n])},g.getMapLayers=function(){return this.map.getStyle().layers},g.addLayer=function(t,e){var r=this.map;if(\\\"string\\\"==typeof e){if(\\\"\\\"===e)return void r.addLayer(t,e);for(var n=this.getMapLayers(),i=0;i<n.length;i++)if(e===n[i].id)return void r.addLayer(t,e);o.warn([\\\"Trying to add layer with *below* value\\\",e,\\\"referencing a layer that does not exist\\\",\\\"or that does not yet exist.\\\"].join(\\\" \\\"))}r.addLayer(t)},g.project=function(t){return this.map.project(new n.LngLat(t[0],t[1]))},g.getView=function(){var t=this.map,e=t.getCenter();return{center:{lon:e.lng,lat:e.lat},zoom:t.getZoom(),bearing:t.getBearing(),pitch:t.getPitch()}},g.getViewEdits=function(t){for(var e=this.id,r=[\\\"center\\\",\\\"zoom\\\",\\\"bearing\\\",\\\"pitch\\\"],n={},i=0;i<r.length;i++){var a=r[i];n[e+\\\".\\\"+a]=t[a]}return n},e.exports=d},{\\\"../../components/dragelement\\\":611,\\\"../../components/fx\\\":632,\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"../cartesian/axes\\\":767,\\\"../cartesian/select\\\":784,\\\"./constants\\\":820,\\\"./layers\\\":823,d3:163,\\\"mapbox-gl\\\":426}],827:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){var e=t.editType;return{t:{valType:\\\"number\\\",dflt:0,editType:e},r:{valType:\\\"number\\\",dflt:0,editType:e},b:{valType:\\\"number\\\",dflt:0,editType:e},l:{valType:\\\"number\\\",dflt:0,editType:e},editType:e}}},{}],828:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"fast-isnumeric\\\"),a=t(\\\"../registry\\\"),o=t(\\\"../plot_api/plot_schema\\\"),s=t(\\\"../plot_api/plot_template\\\"),l=t(\\\"../lib\\\"),c=t(\\\"../components/color\\\"),u=t(\\\"../constants/numerical\\\").BADNUM,h=t(\\\"./cartesian/axis_ids\\\"),f=t(\\\"./animation_attributes\\\"),p=t(\\\"./frame_attributes\\\"),d=l.relinkPrivateKeys,g=l._,v=e.exports={};l.extendFlat(v,a),v.attributes=t(\\\"./attributes\\\"),v.attributes.type.values=v.allTypes,v.fontAttrs=t(\\\"./font_attributes\\\"),v.layoutAttributes=t(\\\"./layout_attributes\\\"),v.fontWeight=\\\"normal\\\";var m=v.transformsRegistry,y=t(\\\"./command\\\");v.executeAPICommand=y.executeAPICommand,v.computeAPICommandBindings=y.computeAPICommandBindings,v.manageCommandObserver=y.manageCommandObserver,v.hasSimpleAPICommandBindings=y.hasSimpleAPICommandBindings,v.redrawText=function(t){var e=(t=l.getGraphDiv(t))._fullLayout||{};if(!(!(e._has&&e._has(\\\"polar\\\"))&&t.data&&t.data[0]&&t.data[0].r))return new Promise(function(e){setTimeout(function(){a.getComponentMethod(\\\"annotations\\\",\\\"draw\\\")(t),a.getComponentMethod(\\\"legend\\\",\\\"draw\\\")(t),a.getComponentMethod(\\\"colorbar\\\",\\\"draw\\\")(t),e(v.previousPromises(t))},300)})},v.resize=function(t){return t=l.getGraphDiv(t),new Promise(function(e,r){t&&!l.isHidden(t)||r(new Error(\\\"Resize must be passed a displayed plot div element.\\\")),t._redrawTimer&&clearTimeout(t._redrawTimer),t._redrawTimer=setTimeout(function(){if(!t.layout||t.layout.width&&t.layout.height||l.isHidden(t))e(t);else{delete t.layout.width,delete t.layout.height;var r=t.changed;t.autoplay=!0,a.call(\\\"relayout\\\",t,{autosize:!0}).then(function(){t.changed=r,e(t)})}},100)})},v.previousPromises=function(t){if((t._promises||[]).length)return Promise.all(t._promises).then(function(){t._promises=[]})},v.addLinks=function(t){if(t._context.showLink||t._context.showSources){var e=t._fullLayout,r=l.ensureSingle(e._paper,\\\"text\\\",\\\"js-plot-link-container\\\",function(t){t.style({\\\"font-family\\\":'\\\"Open Sans\\\", Arial, sans-serif',\\\"font-size\\\":\\\"12px\\\",fill:c.defaultLine,\\\"pointer-events\\\":\\\"all\\\"}).each(function(){var t=n.select(this);t.append(\\\"tspan\\\").classed(\\\"js-link-to-tool\\\",!0),t.append(\\\"tspan\\\").classed(\\\"js-link-spacer\\\",!0),t.append(\\\"tspan\\\").classed(\\\"js-sourcelinks\\\",!0)})}),i=r.node(),a={y:e._paper.attr(\\\"height\\\")-9};document.body.contains(i)&&i.getComputedTextLength()>=e.width-20?(a[\\\"text-anchor\\\"]=\\\"start\\\",a.x=5):(a[\\\"text-anchor\\\"]=\\\"end\\\",a.x=e._paper.attr(\\\"width\\\")-7),r.attr(a);var o=r.select(\\\".js-link-to-tool\\\"),s=r.select(\\\".js-link-spacer\\\"),u=r.select(\\\".js-sourcelinks\\\");t._context.showSources&&t._context.showSources(t),t._context.showLink&&function(t,e){e.text(\\\"\\\");var r=e.append(\\\"a\\\").attr({\\\"xlink:xlink:href\\\":\\\"#\\\",class:\\\"link--impt link--embedview\\\",\\\"font-weight\\\":\\\"bold\\\"}).text(t._context.linkText+\\\" \\\"+String.fromCharCode(187));if(t._context.sendData)r.on(\\\"click\\\",function(){v.sendDataToCloud(t)});else{var n=window.location.pathname.split(\\\"/\\\"),i=window.location.search;r.attr({\\\"xlink:xlink:show\\\":\\\"new\\\",\\\"xlink:xlink:href\\\":\\\"/\\\"+n[2].split(\\\".\\\")[0]+\\\"/\\\"+n[1]+i})}}(t,o),s.text(o.text()&&u.text()?\\\" - \\\":\\\"\\\")}},v.sendDataToCloud=function(t){t.emit(\\\"plotly_beforeexport\\\");var e=(window.PLOTLYENV||{}).BASE_URL||t._context.plotlyServerURL,r=n.select(t).append(\\\"div\\\").attr(\\\"id\\\",\\\"hiddenform\\\").style(\\\"display\\\",\\\"none\\\"),i=r.append(\\\"form\\\").attr({action:e+\\\"/external\\\",method:\\\"post\\\",target:\\\"_blank\\\"});return i.append(\\\"input\\\").attr({type:\\\"text\\\",name:\\\"data\\\"}).node().value=v.graphJson(t,!1,\\\"keepdata\\\"),i.node().submit(),r.remove(),t.emit(\\\"plotly_afterexport\\\"),!1};var x=[\\\"days\\\",\\\"shortDays\\\",\\\"months\\\",\\\"shortMonths\\\",\\\"periods\\\",\\\"dateTime\\\",\\\"date\\\",\\\"time\\\",\\\"decimal\\\",\\\"thousands\\\",\\\"grouping\\\",\\\"currency\\\"],b=[\\\"year\\\",\\\"month\\\",\\\"dayMonth\\\",\\\"dayMonthYear\\\"];function _(t,e){var r=t._context.locale,n=!1,i={};function o(t){for(var r=!0,a=0;a<e.length;a++){var o=e[a];i[o]||(t[o]?i[o]=t[o]:r=!1)}r&&(n=!0)}for(var s=0;s<2;s++){for(var l=t._context.locales,c=0;c<2;c++){var u=(l[r]||{}).format;if(u&&(o(u),n))break;l=a.localeRegistry}var h=r.split(\\\"-\\\")[0];if(n||h===r)break;r=h}return n||o(a.localeRegistry.en.format),i}function w(t,e){var r={_fullLayout:e},n=\\\"x\\\"===t._id.charAt(0),i=t._mainAxis._anchorAxis,a=\\\"\\\",o=\\\"\\\",s=\\\"\\\";if(i&&(s=i._mainAxis._id,a=n?t._id+s:s+t._id),!a||!e._plots[a]){a=\\\"\\\";for(var l=t._counterAxes,c=0;c<l.length;c++){var u=l[c],f=n?t._id+u:u+t._id;o||(o=f);var p=h.getFromId(r,u);if(s&&p.overlaying===s){a=f;break}}}return a||o}function k(t){var e=t.transforms;if(Array.isArray(e)&&e.length)for(var r=0;r<e.length;r++){var n=e[r],i=n._module||m[n.type];if(i&&i.makesData)return!0}return!1}function T(t,e,r,n){for(var i=t.transforms,a=[t],o=0;o<i.length;o++){var s=i[o],l=m[s.type];l&&l.transform&&(a=l.transform(a,{transform:s,fullTrace:t,fullData:e,layout:r,fullLayout:n,transformIndex:o}))}return a}function A(t){var e=t.margin;if(!t._size){var r=t._size={l:Math.round(e.l),r:Math.round(e.r),t:Math.round(e.t),b:Math.round(e.b),p:Math.round(e.pad)};r.w=Math.round(t.width)-r.l-r.r,r.h=Math.round(t.height)-r.t-r.b}t._pushmargin||(t._pushmargin={}),t._pushmarginIds||(t._pushmarginIds={})}v.supplyDefaults=function(t,e){var r=e&&e.skipUpdateCalc,i=t._fullLayout||{};if(i._skipDefaults)delete i._skipDefaults;else{var o,s=t._fullLayout={},c=t.layout||{},u=t._fullData||[],h=t._fullData=[],f=t.data||[],p=t.calcdata||[],m=t._context||{};t._transitionData||v.createTransitionData(t),s._dfltTitle={plot:g(t,\\\"Click to enter Plot title\\\"),x:g(t,\\\"Click to enter X axis title\\\"),y:g(t,\\\"Click to enter Y axis title\\\"),colorbar:g(t,\\\"Click to enter Colorscale title\\\"),annotation:g(t,\\\"new text\\\")},s._traceWord=g(t,\\\"trace\\\");var y=_(t,x);if(s._mapboxAccessToken=m.mapboxAccessToken,i._initialAutoSizeIsDone){var w=i.width,k=i.height;v.supplyLayoutGlobalDefaults(c,s,y),c.width||(s.width=w),c.height||(s.height=k),v.sanitizeMargins(s)}else{v.supplyLayoutGlobalDefaults(c,s,y);var T=!c.width||!c.height,M=s.autosize,S=m.autosizable;T&&(M||S)?v.plotAutoSize(t,c,s):T&&v.sanitizeMargins(s),!M&&T&&(c.width=s.width,c.height=s.height)}s._d3locale=function(t,e){return t.decimal=e.charAt(0),t.thousands=e.charAt(1),n.locale(t)}(y,s.separators),s._extraFormat=_(t,b),s._initialAutoSizeIsDone=!0,s._dataLength=f.length,s._modules=[],s._visibleModules=[],s._basePlotModules=[];var E=s._subplots=function(){var t,e,r=a.collectableSubplotTypes,n={};if(!r){r=[];var i=a.subplotsRegistry;for(var o in i){var s=i[o],c=s.attr;if(c&&(r.push(o),Array.isArray(c)))for(e=0;e<c.length;e++)l.pushUnique(r,c[e])}}for(t=0;t<r.length;t++)n[r[t]]=[];return n}(),C=s._splomAxes={x:{},y:{}},L=s._splomSubplots={};s._splomGridDflt={},s._scatterStackOpts={},s._firstScatter={},s._alignmentOpts={},s._colorAxes={},s._requestRangeslider={},s._traceUids=function(t,e){var r,n,i=e.length,a=[];for(r=0;r<t.length;r++){var o=t[r]._fullInput;o!==n&&a.push(o),n=o}var s=a.length,c=new Array(i),u={};function h(t,e){c[e]=t,u[t]=1}function f(t,e){if(t&&\\\"string\\\"==typeof t&&!u[t])return h(t,e),!0}for(r=0;r<i;r++){var p=e[r].uid;\\\"number\\\"==typeof p&&(p=String(p)),f(p,r)||(r<s&&f(a[r].uid,r)||h(l.randstr(u),r))}return c}(u,f),s._globalTransforms=(t._context||{}).globalTransforms,v.supplyDataDefaults(f,h,c,s);var P=Object.keys(C.x),O=Object.keys(C.y);if(P.length>1&&O.length>1){for(a.getComponentMethod(\\\"grid\\\",\\\"sizeDefaults\\\")(c,s),o=0;o<P.length;o++)l.pushUnique(E.xaxis,P[o]);for(o=0;o<O.length;o++)l.pushUnique(E.yaxis,O[o]);for(var z in L)l.pushUnique(E.cartesian,z)}if(s._has=v._hasPlotType.bind(s),u.length===h.length)for(o=0;o<h.length;o++)d(h[o],u[o]);v.supplyLayoutModuleDefaults(c,s,h,t._transitionData);var I=s._visibleModules,D=[];for(o=0;o<I.length;o++){var R=I[o].crossTraceDefaults;R&&l.pushUnique(D,R)}for(o=0;o<D.length;o++)D[o](h,s);s._hasOnlyLargeSploms=1===s._basePlotModules.length&&\\\"splom\\\"===s._basePlotModules[0].name&&P.length>15&&O.length>15&&0===s.shapes.length&&0===s.images.length,s._hasCartesian=s._has(\\\"cartesian\\\"),s._hasGeo=s._has(\\\"geo\\\"),s._hasGL3D=s._has(\\\"gl3d\\\"),s._hasGL2D=s._has(\\\"gl2d\\\"),s._hasTernary=s._has(\\\"ternary\\\"),s._hasPie=s._has(\\\"pie\\\"),v.linkSubplots(h,s,u,i),v.cleanPlot(h,s,u,i),i._zoomlayer&&!t._dragging&&i._zoomlayer.selectAll(\\\".select-outline\\\").remove(),function(t,e){var r,n=[];e.meta&&(r=e._meta={meta:e.meta,layout:{meta:e.meta}});for(var i=0;i<t.length;i++){var a=t[i];a.meta?n[a.index]=a._meta={meta:a.meta}:e.meta&&(a._meta={meta:e.meta}),e.meta&&(a._meta.layout={meta:e.meta})}n.length&&(r||(r=e._meta={}),r.data=n)}(h,s),d(s,i),a.getComponentMethod(\\\"colorscale\\\",\\\"crossTraceDefaults\\\")(h,s),s._preGUI||(s._preGUI={}),s._tracePreGUI||(s._tracePreGUI={});var F,B=s._tracePreGUI,N={};for(F in B)N[F]=\\\"old\\\";for(o=0;o<h.length;o++)N[F=h[o]._fullInput.uid]||(B[F]={}),N[F]=\\\"new\\\";for(F in N)\\\"old\\\"===N[F]&&delete B[F];A(s),a.getComponentMethod(\\\"rangeslider\\\",\\\"makeData\\\")(s),r||p.length!==h.length||v.supplyDefaultsUpdateCalc(p,h)}},v.supplyDefaultsUpdateCalc=function(t,e){for(var r=0;r<e.length;r++){var n=e[r],i=(t[r]||[])[0];if(i&&i.trace){var a=i.trace;if(a._hasCalcTransform){var o,s,c,u=a._arrayAttrs;for(o=0;o<u.length;o++)s=u[o],c=l.nestedProperty(a,s).get().slice(),l.nestedProperty(n,s).set(c)}i.trace=n}}},v.createTransitionData=function(t){t._transitionData||(t._transitionData={}),t._transitionData._frames||(t._transitionData._frames=[]),t._transitionData._frameHash||(t._transitionData._frameHash={}),t._transitionData._counter||(t._transitionData._counter=0),t._transitionData._interruptCallbacks||(t._transitionData._interruptCallbacks=[])},v._hasPlotType=function(t){var e,r=this._basePlotModules||[];for(e=0;e<r.length;e++)if(r[e].name===t)return!0;var n=this._modules||[];for(e=0;e<n.length;e++){var i=n[e].name;if(i===t)return!0;var o=a.modules[i];if(o&&o.categories[t])return!0}return!1},v.cleanPlot=function(t,e,r,n){var i,a,o=n._basePlotModules||[];for(i=0;i<o.length;i++){var s=o[i];s.clean&&s.clean(t,e,r,n)}var l=n._has&&n._has(\\\"gl\\\"),c=e._has&&e._has(\\\"gl\\\");l&&!c&&void 0!==n._glcontainer&&(n._glcontainer.selectAll(\\\".gl-canvas\\\").remove(),n._glcontainer.selectAll(\\\".no-webgl\\\").remove(),n._glcanvas=null);var u=!!n._infolayer;t:for(i=0;i<r.length;i++){var h=r[i].uid;for(a=0;a<t.length;a++){if(h===t[a].uid)continue t}u&&n._infolayer.select(\\\".cb\\\"+h).remove()}},v.linkSubplots=function(t,e,r,n){var i,a,o=n._plots||{},s=e._plots={},c=e._subplots,u={_fullData:t,_fullLayout:e},f=c.cartesian.concat(c.gl2d||[]);for(i=0;i<f.length;i++){var p,d=f[i],g=o[d],v=h.getFromId(u,d,\\\"x\\\"),m=h.getFromId(u,d,\\\"y\\\");for(g?p=s[d]=g:(p=s[d]={}).id=d,v._counterAxes.push(m._id),m._counterAxes.push(v._id),v._subplotsWith.push(d),m._subplotsWith.push(d),p.xaxis=v,p.yaxis=m,p._hasClipOnAxisFalse=!1,a=0;a<t.length;a++){var y=t[a];if(y.xaxis===p.xaxis._id&&y.yaxis===p.yaxis._id&&!1===y.cliponaxis){p._hasClipOnAxisFalse=!0;break}}}var x,b=h.list(u,null,!0);for(i=0;i<b.length;i++){var _=null;(x=b[i]).overlaying&&(_=h.getFromId(u,x.overlaying))&&_.overlaying&&(x.overlaying=!1,_=null),x._mainAxis=_||x,_&&(x.domain=_.domain.slice()),x._anchorAxis=\\\"free\\\"===x.anchor?null:h.getFromId(u,x.anchor)}for(i=0;i<b.length;i++)(x=b[i])._counterAxes.sort(h.idSort),x._subplotsWith.sort(l.subplotSort),x._mainSubplot=w(x,e)},v.clearExpandedTraceDefaultColors=function(t){var e,r,n;for(r=[],(e=t._module._colorAttrs)||(t._module._colorAttrs=e=[],o.crawl(t._module.attributes,function(t,n,i,a){r[a]=n,r.length=a+1,\\\"color\\\"===t.valType&&void 0===t.dflt&&e.push(r.join(\\\".\\\"))})),n=0;n<e.length;n++){l.nestedProperty(t,\\\"_input.\\\"+e[n]).get()||l.nestedProperty(t,e[n]).set(null)}},v.supplyDataDefaults=function(t,e,r,n){var i,o,c,u=n._modules,h=n._visibleModules,f=n._basePlotModules,p=0,g=0;function m(t){e.push(t);var r=t._module;r&&(l.pushUnique(u,r),!0===t.visible&&l.pushUnique(h,r),l.pushUnique(f,t._module.basePlotModule),p++,!1!==t._input.visible&&g++)}n._transformModules=[];var y={},x=[],b=(r.template||{}).data||{},_=s.traceTemplater(b);for(i=0;i<t.length;i++){if(c=t[i],(o=_.newTrace(c)).uid=n._traceUids[i],v.supplyTraceDefaults(c,o,g,n,i),o.index=i,o._input=c,o._expandedIndex=p,o.transforms&&o.transforms.length)for(var w=!1!==c.visible&&!1===o.visible,k=T(o,e,r,n),A=0;A<k.length;A++){var M=k[A],S={_template:o._template,type:o.type,uid:o.uid+A};w&&!1===M.visible&&delete M.visible,v.supplyTraceDefaults(M,S,p,n,i),d(S,M),S.index=i,S._input=c,S._fullInput=o,S._expandedIndex=p,S._expandedInput=M,m(S)}else o._fullInput=o,o._expandedInput=o,m(o);a.traceIs(o,\\\"carpetAxis\\\")&&(y[o.carpet]=o),a.traceIs(o,\\\"carpetDependent\\\")&&x.push(i)}for(i=0;i<x.length;i++)if((o=e[x[i]]).visible){var E=y[o.carpet];o._carpet=E,E&&E.visible?(o.xaxis=E.xaxis,o.yaxis=E.yaxis):o.visible=!1}},v.supplyAnimationDefaults=function(t){var e;t=t||{};var r={};function n(e,n){return l.coerce(t||{},r,f,e,n)}if(n(\\\"mode\\\"),n(\\\"direction\\\"),n(\\\"fromcurrent\\\"),Array.isArray(t.frame))for(r.frame=[],e=0;e<t.frame.length;e++)r.frame[e]=v.supplyAnimationFrameDefaults(t.frame[e]||{});else r.frame=v.supplyAnimationFrameDefaults(t.frame||{});if(Array.isArray(t.transition))for(r.transition=[],e=0;e<t.transition.length;e++)r.transition[e]=v.supplyAnimationTransitionDefaults(t.transition[e]||{});else r.transition=v.supplyAnimationTransitionDefaults(t.transition||{});return r},v.supplyAnimationFrameDefaults=function(t){var e={};function r(r,n){return l.coerce(t||{},e,f.frame,r,n)}return r(\\\"duration\\\"),r(\\\"redraw\\\"),e},v.supplyAnimationTransitionDefaults=function(t){var e={};function r(r,n){return l.coerce(t||{},e,f.transition,r,n)}return r(\\\"duration\\\"),r(\\\"easing\\\"),e},v.supplyFrameDefaults=function(t){var e={};function r(r,n){return l.coerce(t,e,p,r,n)}return r(\\\"group\\\"),r(\\\"name\\\"),r(\\\"traces\\\"),r(\\\"baseframe\\\"),r(\\\"data\\\"),r(\\\"layout\\\"),e},v.supplyTraceDefaults=function(t,e,r,n,i){var o,s=n.colorway||c.defaults,u=s[r%s.length];function h(r,n){return l.coerce(t,e,v.attributes,r,n)}var f=h(\\\"visible\\\");h(\\\"type\\\"),h(\\\"name\\\",n._traceWord+\\\" \\\"+i),h(\\\"uirevision\\\",n.uirevision);var p=v.getModule(e);if(e._module=p,p){var d=p.basePlotModule,g=d.attr,m=d.attributes;if(g&&m){var y=n._subplots,x=\\\"\\\";if(\\\"gl2d\\\"!==d.name||f){if(Array.isArray(g))for(o=0;o<g.length;o++){var b=g[o],_=l.coerce(t,e,m,b);y[b]&&l.pushUnique(y[b],_),x+=_}else x=l.coerce(t,e,m,g);y[d.name]&&l.pushUnique(y[d.name],x)}}}return f&&(h(\\\"customdata\\\"),h(\\\"ids\\\"),h(\\\"meta\\\"),a.traceIs(e,\\\"showLegend\\\")?(e._dfltShowLegend=!0,h(\\\"showlegend\\\"),h(\\\"legendgroup\\\")):e._dfltShowLegend=!1,p&&p.supplyDefaults(t,e,u,n),a.traceIs(e,\\\"noOpacity\\\")||h(\\\"opacity\\\"),a.traceIs(e,\\\"notLegendIsolatable\\\")&&(e.visible=!!e.visible),a.traceIs(e,\\\"noHover\\\")||(e.hovertemplate||l.coerceHoverinfo(t,e,n),\\\"parcats\\\"!==e.type&&a.getComponentMethod(\\\"fx\\\",\\\"supplyDefaults\\\")(t,e,u,n)),p&&p.selectPoints&&h(\\\"selectedpoints\\\"),v.supplyTransformDefaults(t,e,n)),e},v.hasMakesDataTransform=k,v.supplyTransformDefaults=function(t,e,r){if(e._length||k(t)){var n=r._globalTransforms||[],i=r._transformModules||[];if(Array.isArray(t.transforms)||0!==n.length)for(var a=t.transforms||[],o=n.concat(a),s=e.transforms=[],c=0;c<o.length;c++){var u,h=o[c],f=h.type,p=m[f],d=!(h._module&&h._module===p),g=p&&\\\"function\\\"==typeof p.transform;p||l.warn(\\\"Unrecognized transform type \\\"+f+\\\".\\\"),p&&p.supplyDefaults&&(d||g)?((u=p.supplyDefaults(h,e,r,t)).type=f,u._module=p,l.pushUnique(i,p)):u=l.extendFlat({},h),s.push(u)}}},v.supplyLayoutGlobalDefaults=function(t,e,r){function n(r,n){return l.coerce(t,e,v.layoutAttributes,r,n)}var i=t.template;l.isPlainObject(i)&&(e.template=i,e._template=i.layout,e._dataTemplate=i.data);var o=l.coerceFont(n,\\\"font\\\");n(\\\"title.text\\\",e._dfltTitle.plot),l.coerceFont(n,\\\"title.font\\\",{family:o.family,size:Math.round(1.4*o.size),color:o.color}),n(\\\"title.xref\\\"),n(\\\"title.yref\\\"),n(\\\"title.x\\\"),n(\\\"title.y\\\"),n(\\\"title.xanchor\\\"),n(\\\"title.yanchor\\\"),n(\\\"title.pad.t\\\"),n(\\\"title.pad.r\\\"),n(\\\"title.pad.b\\\"),n(\\\"title.pad.l\\\"),n(\\\"autosize\\\",!(t.width&&t.height)),n(\\\"width\\\"),n(\\\"height\\\"),n(\\\"margin.l\\\"),n(\\\"margin.r\\\"),n(\\\"margin.t\\\"),n(\\\"margin.b\\\"),n(\\\"margin.pad\\\"),n(\\\"margin.autoexpand\\\"),t.width&&t.height&&v.sanitizeMargins(e),a.getComponentMethod(\\\"grid\\\",\\\"sizeDefaults\\\")(t,e),n(\\\"paper_bgcolor\\\"),n(\\\"separators\\\",r.decimal+r.thousands),n(\\\"hidesources\\\"),n(\\\"colorway\\\"),n(\\\"datarevision\\\");var s=n(\\\"uirevision\\\");n(\\\"editrevision\\\",s),n(\\\"selectionrevision\\\",s),n(\\\"modebar.orientation\\\"),n(\\\"modebar.bgcolor\\\",c.addOpacity(e.paper_bgcolor,.5));var u=c.contrast(c.rgb(e.modebar.bgcolor));n(\\\"modebar.color\\\",c.addOpacity(u,.3)),n(\\\"modebar.activecolor\\\",c.addOpacity(u,.7)),n(\\\"modebar.uirevision\\\",s),n(\\\"meta\\\"),l.isPlainObject(t.transition)&&(n(\\\"transition.duration\\\"),n(\\\"transition.easing\\\"),n(\\\"transition.ordering\\\")),a.getComponentMethod(\\\"calendars\\\",\\\"handleDefaults\\\")(t,e,\\\"calendar\\\"),a.getComponentMethod(\\\"fx\\\",\\\"supplyLayoutGlobalDefaults\\\")(t,e,n)},v.plotAutoSize=function(t,e,r){var n,a,o=t._context||{},s=o.frameMargins,c=l.isPlotDiv(t);if(c&&t.emit(\\\"plotly_autosize\\\"),o.fillFrame)n=window.innerWidth,a=window.innerHeight,document.body.style.overflow=\\\"hidden\\\";else{var u=c?window.getComputedStyle(t):{};if(n=parseFloat(u.width)||parseFloat(u.maxWidth)||r.width,a=parseFloat(u.height)||parseFloat(u.maxHeight)||r.height,i(s)&&s>0){var h=1-2*s;n=Math.round(h*n),a=Math.round(h*a)}}var f=v.layoutAttributes.width.min,p=v.layoutAttributes.height.min;n<f&&(n=f),a<p&&(a=p);var d=!e.width&&Math.abs(r.width-n)>1,g=!e.height&&Math.abs(r.height-a)>1;(g||d)&&(d&&(r.width=n),g&&(r.height=a)),t._initialAutoSize||(t._initialAutoSize={width:n,height:a}),v.sanitizeMargins(r)},v.supplyLayoutModuleDefaults=function(t,e,r,n){var i,o,s,c=a.componentsRegistry,u=e._basePlotModules,h=a.subplotsRegistry.cartesian;for(i in c)(s=c[i]).includeBasePlot&&s.includeBasePlot(t,e);for(var f in u.length||u.push(h),e._has(\\\"cartesian\\\")&&(a.getComponentMethod(\\\"grid\\\",\\\"contentDefaults\\\")(t,e),h.finalizeSubplots(t,e)),e._subplots)e._subplots[f].sort(l.subplotSort);for(o=0;o<u.length;o++)(s=u[o]).supplyLayoutDefaults&&s.supplyLayoutDefaults(t,e,r);var p=e._modules;for(o=0;o<p.length;o++)(s=p[o]).supplyLayoutDefaults&&s.supplyLayoutDefaults(t,e,r);var d=e._transformModules;for(o=0;o<d.length;o++)(s=d[o]).supplyLayoutDefaults&&s.supplyLayoutDefaults(t,e,r,n);for(i in c)(s=c[i]).supplyLayoutDefaults&&s.supplyLayoutDefaults(t,e,r)},v.purge=function(t){var e=t._fullLayout||{};void 0!==e._glcontainer&&(e._glcontainer.selectAll(\\\".gl-canvas\\\").remove(),e._glcontainer.remove(),e._glcanvas=null),void 0!==e._geocontainer&&e._geocontainer.remove(),e._modeBar&&e._modeBar.destroy(),t._transitionData&&(t._transitionData._interruptCallbacks&&(t._transitionData._interruptCallbacks.length=0),t._transitionData._animationRaf&&window.cancelAnimationFrame(t._transitionData._animationRaf)),l.clearThrottle(),l.clearResponsive(t),delete t.data,delete t.layout,delete t._fullData,delete t._fullLayout,delete t.calcdata,delete t.framework,delete t.empty,delete t.fid,delete t.undoqueue,delete t.undonum,delete t.autoplay,delete t.changed,delete t._promises,delete t._redrawTimer,delete t._hmlumcount,delete t._hmpixcount,delete t._transitionData,delete t._transitioning,delete t._initialAutoSize,delete t._transitioningWithDuration,delete t._dragging,delete t._dragged,delete t._dragdata,delete t._hoverdata,delete t._snapshotInProgress,delete t._editing,delete t._mouseDownTime,delete t._legendMouseDownTime,t.removeAllListeners&&t.removeAllListeners()},v.style=function(t){var e,r=t._fullLayout._visibleModules,n=[];for(e=0;e<r.length;e++){var i=r[e];i.style&&l.pushUnique(n,i.style)}for(e=0;e<n.length;e++)n[e](t)},v.sanitizeMargins=function(t){if(t&&t.margin){var e,r=t.width,n=t.height,i=t.margin,a=r-(i.l+i.r),o=n-(i.t+i.b);a<0&&(e=(r-1)/(i.l+i.r),i.l=Math.floor(e*i.l),i.r=Math.floor(e*i.r)),o<0&&(e=(n-1)/(i.t+i.b),i.t=Math.floor(e*i.t),i.b=Math.floor(e*i.b))}},v.clearAutoMarginIds=function(t){t._fullLayout._pushmarginIds={}},v.allowAutoMargin=function(t,e){t._fullLayout._pushmarginIds[e]=1},v.autoMargin=function(t,e,r){var n=t._fullLayout,i=n._pushmargin,a=n._pushmarginIds;if(!1!==n.margin.autoexpand){if(r){var o=r.pad;if(void 0===o){var s=n.margin;o=Math.min(12,s.l,s.r,s.t,s.b)}r.l+r.r>.5*n.width&&(r.l=r.r=0),r.b+r.t>.5*n.height&&(r.b=r.t=0);var l=void 0!==r.xl?r.xl:r.x,c=void 0!==r.xr?r.xr:r.x,u=void 0!==r.yt?r.yt:r.y,h=void 0!==r.yb?r.yb:r.y;i[e]={l:{val:l,size:r.l+o},r:{val:c,size:r.r+o},b:{val:h,size:r.b+o},t:{val:u,size:r.t+o}},a[e]=1}else delete i[e],delete a[e];n._replotting||v.doAutoMargin(t)}},v.doAutoMargin=function(t){var e=t._fullLayout;e._size||(e._size={}),A(e);var r=e._size,n=e.margin,o=l.extendFlat({},r),s=n.l,c=n.r,u=n.t,h=n.b,f=e.width,p=e.height,d=e._pushmargin,g=e._pushmarginIds;if(!1!==e.margin.autoexpand){for(var m in d)g[m]||delete d[m];for(var y in d.base={l:{val:0,size:s},r:{val:1,size:c},t:{val:1,size:u},b:{val:0,size:h}},d){var x=d[y].l||{},b=d[y].b||{},_=x.val,w=x.size,k=b.val,T=b.size;for(var M in d){if(i(w)&&d[M].r){var S=d[M].r.val,E=d[M].r.size;if(S>_){var C=(w*S+(E-f)*_)/(S-_),L=(E*(1-_)+(w-f)*(1-S))/(S-_);C>=0&&L>=0&&f-(C+L)>0&&C+L>s+c&&(s=C,c=L)}}if(i(T)&&d[M].t){var P=d[M].t.val,O=d[M].t.size;if(P>k){var z=(T*P+(O-p)*k)/(P-k),I=(O*(1-k)+(T-p)*(1-P))/(P-k);z>=0&&I>=0&&p-(I+z)>0&&z+I>h+u&&(h=z,u=I)}}}}}if(r.l=Math.round(s),r.r=Math.round(c),r.t=Math.round(u),r.b=Math.round(h),r.p=Math.round(n.pad),r.w=Math.round(f)-r.l-r.r,r.h=Math.round(p)-r.t-r.b,!e._replotting&&v.didMarginChange(o,r))return\\\"_redrawFromAutoMarginCount\\\"in e?e._redrawFromAutoMarginCount++:e._redrawFromAutoMarginCount=1,a.call(\\\"plot\\\",t)};var M=[\\\"l\\\",\\\"r\\\",\\\"t\\\",\\\"b\\\",\\\"p\\\",\\\"w\\\",\\\"h\\\"];function S(t,e,r){var n=!1;var i=[v.previousPromises,function(){if(t._transitionData)return t._transitioning=!1,function(t){var e=Promise.resolve();if(!t)return e;for(;t.length;)e=e.then(t.shift());return e}(t._transitionData._interruptCallbacks)},r.prepareFn,v.rehover,function(){return t.emit(\\\"plotly_transitioning\\\",[]),new Promise(function(i){t._transitioning=!0,e.duration>0&&(t._transitioningWithDuration=!0),t._transitionData._interruptCallbacks.push(function(){n=!0}),r.redraw&&t._transitionData._interruptCallbacks.push(function(){return a.call(\\\"redraw\\\",t)}),t._transitionData._interruptCallbacks.push(function(){t.emit(\\\"plotly_transitioninterrupted\\\",[])});var o=0,s=0;function l(){return o++,function(){var e;s++,n||s!==o||(e=i,t._transitionData&&(function(t){if(t)for(;t.length;)t.shift()}(t._transitionData._interruptCallbacks),Promise.resolve().then(function(){if(r.redraw)return a.call(\\\"redraw\\\",t)}).then(function(){t._transitioning=!1,t._transitioningWithDuration=!1,t.emit(\\\"plotly_transitioned\\\",[])}).then(e)))}}r.runFn(l),setTimeout(l())})}],o=l.syncOrAsync(i,t);return o&&o.then||(o=Promise.resolve()),o.then(function(){return t})}v.didMarginChange=function(t,e){for(var r=0;r<M.length;r++){var n=M[r],a=t[n],o=e[n];if(!i(a)||Math.abs(o-a)>1)return!0}return!1},v.graphJson=function(t,e,r,n,i){(i&&e&&!t._fullData||i&&!e&&!t._fullLayout)&&v.supplyDefaults(t);var a=i?t._fullData:t.data,o=i?t._fullLayout:t.layout,s=(t._transitionData||{})._frames;function c(t){if(\\\"function\\\"==typeof t)return null;if(l.isPlainObject(t)){var e,n,i={};for(e in t)if(\\\"function\\\"!=typeof t[e]&&-1===[\\\"_\\\",\\\"[\\\"].indexOf(e.charAt(0))){if(\\\"keepdata\\\"===r){if(\\\"src\\\"===e.substr(e.length-3))continue}else if(\\\"keepstream\\\"===r){if(\\\"string\\\"==typeof(n=t[e+\\\"src\\\"])&&n.indexOf(\\\":\\\")>0&&!l.isPlainObject(t.stream))continue}else if(\\\"keepall\\\"!==r&&\\\"string\\\"==typeof(n=t[e+\\\"src\\\"])&&n.indexOf(\\\":\\\")>0)continue;i[e]=c(t[e])}return i}return Array.isArray(t)?t.map(c):l.isTypedArray(t)?l.simpleMap(t,l.identity):l.isJSDate(t)?l.ms2DateTimeLocal(+t):t}var u={data:(a||[]).map(function(t){var r=c(t);return e&&delete r.fit,r})};return e||(u.layout=c(o)),t.framework&&t.framework.isPolar&&(u=t.framework.getConfig()),s&&(u.frames=c(s)),\\\"object\\\"===n?u:JSON.stringify(u)},v.modifyFrames=function(t,e){var r,n,i,a=t._transitionData._frames,o=t._transitionData._frameHash;for(r=0;r<e.length;r++)switch((n=e[r]).type){case\\\"replace\\\":i=n.value;var s=(a[n.index]||{}).name,l=i.name;a[n.index]=o[l]=i,l!==s&&(delete o[s],o[l]=i);break;case\\\"insert\\\":o[(i=n.value).name]=i,a.splice(n.index,0,i);break;case\\\"delete\\\":delete o[(i=a[n.index]).name],a.splice(n.index,1)}return Promise.resolve()},v.computeFrame=function(t,e){var r,n,i,a,o=t._transitionData._frameHash;if(!e)throw new Error(\\\"computeFrame must be given a string frame name\\\");var s=o[e.toString()];if(!s)return!1;for(var l=[s],c=[s.name];s.baseframe&&(s=o[s.baseframe.toString()])&&-1===c.indexOf(s.name);)l.push(s),c.push(s.name);for(var u={};s=l.pop();)if(s.layout&&(u.layout=v.extendLayout(u.layout,s.layout)),s.data){if(u.data||(u.data=[]),!(n=s.traces))for(n=[],r=0;r<s.data.length;r++)n[r]=r;for(u.traces||(u.traces=[]),r=0;r<s.data.length;r++)null!=(i=n[r])&&(-1===(a=u.traces.indexOf(i))&&(a=u.data.length,u.traces[a]=i),u.data[a]=v.extendTrace(u.data[a],s.data[r]))}return u},v.recomputeFrameHash=function(t){for(var e=t._transitionData._frameHash={},r=t._transitionData._frames,n=0;n<r.length;n++){var i=r[n];i&&i.name&&(e[i.name]=i)}},v.extendObjectWithContainers=function(t,e,r){var n,i,a,o,s,c,u,h=l.extendDeepNoArrays({},e||{}),f=l.expandObjectPaths(h),p={};if(r&&r.length)for(a=0;a<r.length;a++)void 0===(i=(n=l.nestedProperty(f,r[a])).get())?l.nestedProperty(p,r[a]).set(null):(n.set(null),l.nestedProperty(p,r[a]).set(i));if(t=l.extendDeepNoArrays(t||{},f),r&&r.length)for(a=0;a<r.length;a++)if(c=l.nestedProperty(p,r[a]).get()){for(u=(s=l.nestedProperty(t,r[a])).get(),Array.isArray(u)||(u=[],s.set(u)),o=0;o<c.length;o++){var d=c[o];u[o]=null===d?null:v.extendObjectWithContainers(u[o],d)}s.set(u)}return t},v.dataArrayContainers=[\\\"transforms\\\",\\\"dimensions\\\"],v.layoutArrayContainers=a.layoutArrayContainers,v.extendTrace=function(t,e){return v.extendObjectWithContainers(t,e,v.dataArrayContainers)},v.extendLayout=function(t,e){return v.extendObjectWithContainers(t,e,v.layoutArrayContainers)},v.transition=function(t,e,r,n,i,a){var o={redraw:i.redraw},s={},c=[];return o.prepareFn=function(){for(var i=Array.isArray(e)?e.length:0,a=n.slice(0,i),o=0;o<a.length;o++){var u=a[o],h=t._fullData[u]._module;if(h){if(h.animatable){var f=h.basePlotModule.name;s[f]||(s[f]=[]),s[f].push(u)}t.data[a[o]]=v.extendTrace(t.data[a[o]],e[o])}}var p=l.expandObjectPaths(l.extendDeepNoArrays({},r)),d=/^[xy]axis[0-9]*$/;for(var g in p)d.test(g)&&delete p[g].range;v.extendLayout(t.layout,p),delete t.calcdata,v.supplyDefaults(t),v.doCalcdata(t);var m=l.expandObjectPaths(r);if(m){var y=t._fullLayout._plots;for(var x in y){var b,_,w,k,T=y[x],A=T.xaxis,M=T.yaxis,S=A.range.slice(),E=M.range.slice();Array.isArray(m[A._name+\\\".range\\\"])?b=m[A._name+\\\".range\\\"].slice():Array.isArray((m[A._name]||{}).range)&&(b=m[A._name].range.slice()),Array.isArray(m[M._name+\\\".range\\\"])?_=m[M._name+\\\".range\\\"].slice():Array.isArray((m[M._name]||{}).range)&&(_=m[M._name].range.slice()),S&&b&&(S[0]!==b[0]||S[1]!==b[1])&&(w={xr0:S,xr1:b}),E&&_&&(E[0]!==_[0]||E[1]!==_[1])&&(k={yr0:E,yr1:_}),(w||k)&&c.push(l.extendFlat({plotinfo:T},w,k))}}return Promise.resolve()},o.runFn=function(e){var n,i,o=t._fullLayout._basePlotModules,u=c.length;if(r)for(i=0;i<o.length;i++)o[i].transitionAxes&&o[i].transitionAxes(t,c,a,e);for(var h in u?((n=l.extendFlat({},a)).duration=0,delete s.cartesian):n=a,s){var f=s[h];t._fullData[f[0]]._module.basePlotModule.plot(t,f,n,e)}},S(t,a,o)},v.transitionFromReact=function(t,e,r,n){var i=t._fullLayout,a=i.transition,o={},s=[];return o.prepareFn=function(){var t=i._plots;for(var a in o.redraw=!1,\\\"some\\\"===e.anim&&(o.redraw=!0),\\\"some\\\"===r.anim&&(o.redraw=!0),t){var c,u,h=t[a],f=h.xaxis,p=h.yaxis,d=n[f._name].range.slice(),g=n[p._name].range.slice(),v=f.range.slice(),m=p.range.slice();f.setScale(),p.setScale(),d[0]===v[0]&&d[1]===v[1]||(c={xr0:d,xr1:v}),g[0]===m[0]&&g[1]===m[1]||(u={yr0:g,yr1:m}),(c||u)&&s.push(l.extendFlat({plotinfo:h},c,u))}return Promise.resolve()},o.runFn=function(r){for(var n,i,o,c=t._fullData,u=t._fullLayout._basePlotModules,h=[],f=0;f<c.length;f++)h.push(f);function p(){for(var e=0;e<u.length;e++)u[e].transitionAxes&&u[e].transitionAxes(t,s,n,r)}function d(){for(var e=0;e<u.length;e++)u[e].plot(t,o,i,r)}s.length&&e.anim?\\\"traces first\\\"===a.ordering?(n=l.extendFlat({},a,{duration:0}),o=h,i=a,d(),setTimeout(p,a.duration)):(n=a,o=null,i=l.extendFlat({},a,{duration:0}),p(),d()):s.length?(n=a,p()):e.anim&&(o=h,i=a,d())},S(t,a,o)},v.doCalcdata=function(t,e){var r,n,i,s,c=h.list(t),f=t._fullData,p=t._fullLayout,d=new Array(f.length),g=(t.calcdata||[]).slice();for(t.calcdata=d,p._numBoxes=0,p._numViolins=0,p._violinScaleGroupStats={},t._hmpixcount=0,t._hmlumcount=0,p._piecolormap={},p._sunburstcolormap={},p._funnelareacolormap={},i=0;i<f.length;i++)Array.isArray(e)&&-1===e.indexOf(i)&&(d[i]=g[i]);for(i=0;i<f.length;i++)(r=f[i])._arrayAttrs=o.findArrayAttributes(r),r._extremes={};var v=p._subplots.polar||[];for(i=0;i<v.length;i++)c.push(p[v[i]].radialaxis,p[v[i]].angularaxis);var y=!1;function x(e){if(r=f[e],n=r._module,!0===r.visible&&r.transforms){if(n&&n.calc){var i=n.calc(t,r);i[0]&&i[0].t&&i[0].t._scene&&delete i[0].t._scene.dirty}for(s=0;s<r.transforms.length;s++){var a=r.transforms[s];(n=m[a.type])&&n.calcTransform&&(r._hasCalcTransform=!0,y=!0,n.calcTransform(t,r,a))}}}function b(e,i){if(r=f[e],!!(n=r._module).isContainer===i){var a=[];if(!0===r.visible&&0!==r._length){delete r._indexToPoints;var o=r.transforms||[];for(s=o.length-1;s>=0;s--)if(o[s].enabled){r._indexToPoints=o[s]._indexToPoints;break}n&&n.calc&&(a=n.calc(t,r))}Array.isArray(a)&&a[0]||(a=[{x:u,y:u}]),a[0].t||(a[0].t={}),a[0].trace=r,d[e]=a}}for(C(c,f),i=0;i<f.length;i++)b(i,!0);for(i=0;i<f.length;i++)x(i);for(y&&C(c,f),i=0;i<f.length;i++)b(i,!0);for(i=0;i<f.length;i++)b(i,!1);L(t);var _=function(t,e){var r,n,i,o,s,c=[];function u(t,r,n){var i=r._id.charAt(0);if(\\\"histogram2dcontour\\\"===t){var a=r._counterAxes[0],o=h.getFromId(e,a),s=\\\"x\\\"===i||\\\"x\\\"===a&&\\\"category\\\"===o.type,l=\\\"y\\\"===i||\\\"y\\\"===a&&\\\"category\\\"===o.type;return function(t,e){return 0===t||0===e?-1:s&&t===n[e].length-1?-1:l&&e===n.length-1?-1:(\\\"y\\\"===i?e:t)-1}}return function(t,e){return\\\"y\\\"===i?e:t}}var f={min:function(t){return l.aggNums(Math.min,null,t)},max:function(t){return l.aggNums(Math.max,null,t)},sum:function(t){return l.aggNums(function(t,e){return t+e},null,t)},total:function(t){return l.aggNums(function(t,e){return t+e},null,t)},mean:function(t){return l.mean(t)},median:function(t){return l.median(t)}};for(r=0;r<t.length;r++){var p=t[r];if(\\\"category\\\"===p.type){var d=p.categoryorder.match(E);if(d){var g=d[1],v=d[2],m=[];for(n=0;n<p._categories.length;n++)m.push([p._categories[n],[]]);for(n=0;n<p._traceIndices.length;n++){var y=p._traceIndices[n],x=e._fullData[y],b=p._id.charAt(0);if(!0===x.visible){var _=x.type;a.traceIs(x,\\\"histogram\\\")&&(delete x._xautoBinFinished,delete x._yautoBinFinished);var w=e.calcdata[y];for(i=0;i<w.length;i++){var k,T,A,M=w[i];if(\\\"splom\\\"===_){var S=x._axesDim[p._id];if(\\\"y\\\"===b){var C=x._diag[S][0];C&&(p=e._fullLayout[h.id2name(C)])}var L=M.trace.dimensions[S].values;for(o=0;o<L.length;o++)for(k=L[o],T=p._categoriesMap[k],s=0;s<M.trace.dimensions.length;s++)if(s!==S){var P=M.trace.dimensions[s];m[T][1].push(P.values[o])}}else if(\\\"scattergl\\\"===_){for(o=0;o<M.t.x.length;o++)\\\"x\\\"===b&&(k=M.t.x[o],T=k,A=M.t.y[o]),\\\"y\\\"===b&&(k=M.t.y[o],T=k,A=M.t.x[o]),m[T][1].push(A);M.t&&M.t._scene&&delete M.t._scene.dirty}else if(M.hasOwnProperty(\\\"z\\\")){A=M.z;var O=u(x.type,p,A);for(o=0;o<A.length;o++)for(s=0;s<A[o].length;s++)(T=O(s,o))+1&&m[T][1].push(A[o][s])}else for(\\\"x\\\"===b?(k=M.p+1?M.p:M.x,A=M.s||M.v||M.y):\\\"y\\\"===b&&(k=M.p+1?M.p:M.y,A=M.s||M.v||M.x),Array.isArray(A)||(A=[A]),o=0;o<A.length;o++)m[k][1].push(A[o])}}}p._categoriesValue=m;var z=[];for(n=0;n<m.length;n++)z.push([m[n][0],f[g](m[n][1])]);z.sort(function(t,e){return t[1]-e[1]}),p._categoriesAggregatedValue=z,p._initialCategories=z.map(function(t){return t[0]}),\\\"descending\\\"===v&&p._initialCategories.reverse(),c=c.concat(p.sortByInitialCategories())}}}return c}(c,t);if(_.length){for(p._numBoxes=0,p._numViolins=0,i=0;i<_.length;i++)b(_[i],!0);for(i=0;i<_.length;i++)b(_[i],!1);L(t)}a.getComponentMethod(\\\"fx\\\",\\\"calc\\\")(t),a.getComponentMethod(\\\"errorbars\\\",\\\"calc\\\")(t)};var E=/(total|sum|min|max|mean|median) (ascending|descending)/;function C(t,e){for(var r=0;r<t.length;r++){var n=t[r];n.clearCalc(),\\\"multicategory\\\"===n.type&&n.setupMultiCategory(e)}}function L(t){var e,r,n,i=t._fullLayout,a=i._visibleModules,o={};for(r=0;r<a.length;r++){var s=a[r],c=s.crossTraceCalc;if(c){var u=s.basePlotModule.name;o[u]?l.pushUnique(o[u],c):o[u]=[c]}}for(n in o){var h=o[n],f=i._subplots[n];if(Array.isArray(f))for(e=0;e<f.length;e++){var p=f[e],d=\\\"cartesian\\\"===n?i._plots[p]:i[p];for(r=0;r<h.length;r++)h[r](t,d,p)}else for(r=0;r<h.length;r++)h[r](t)}}v.rehover=function(t){t._fullLayout._rehover&&t._fullLayout._rehover()},v.redrag=function(t){t._fullLayout._redrag&&t._fullLayout._redrag()},v.generalUpdatePerTraceModule=function(t,e,r,n){var i,a=e.traceHash,o={};for(i=0;i<r.length;i++){var s=r[i],c=s[0].trace;c.visible&&(o[c.type]=o[c.type]||[],o[c.type].push(s))}for(var u in a)if(!o[u]){var h=a[u][0];h[0].trace.visible=!1,o[u]=[h]}for(var f in o){var p=o[f];p[0][0].trace._module.plot(t,e,l.filterVisible(p),n)}e.traceHash=o}},{\\\"../components/color\\\":593,\\\"../constants/numerical\\\":695,\\\"../lib\\\":719,\\\"../plot_api/plot_schema\\\":756,\\\"../plot_api/plot_template\\\":757,\\\"../registry\\\":847,\\\"./animation_attributes\\\":762,\\\"./attributes\\\":764,\\\"./cartesian/axis_ids\\\":770,\\\"./command\\\":791,\\\"./font_attributes\\\":793,\\\"./frame_attributes\\\":794,\\\"./layout_attributes\\\":819,d3:163,\\\"fast-isnumeric\\\":225}],829:[function(t,e,r){\\\"use strict\\\";e.exports={attr:\\\"subplot\\\",name:\\\"polar\\\",axisNames:[\\\"angularaxis\\\",\\\"radialaxis\\\"],axisName2dataArray:{angularaxis:\\\"theta\\\",radialaxis:\\\"r\\\"},layerNames:[\\\"draglayer\\\",\\\"plotbg\\\",\\\"backplot\\\",\\\"angular-grid\\\",\\\"radial-grid\\\",\\\"frontplot\\\",\\\"angular-line\\\",\\\"radial-line\\\",\\\"angular-axis\\\",\\\"radial-axis\\\"],radialDragBoxSize:50,angularDragBoxSize:30,cornerLen:25,cornerHalfWidth:2,MINDRAG:8,MINZOOM:20,OFFEDGE:20}},{}],830:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../lib/polygon\\\").tester,a=n.findIndexOfMin,o=n.isAngleInsideSector,s=n.angleDelta,l=n.angleDist;function c(t,e,r,n){var i,a,o=n[0],s=n[1],l=h(Math.sin(e)-Math.sin(t)),c=h(Math.cos(e)-Math.cos(t)),u=Math.tan(r),f=h(1/u),p=l/c,d=s-p*o;return f?l&&c?a=u*(i=d/(u-p)):c?(i=s*f,a=s):(i=o,a=o*u):l&&c?(i=0,a=d):c?(i=0,a=s):i=a=NaN,[i,a]}function u(t,e,r,i){return n.isFullCircle([e,r])?function(t,e){var r,n=e.length,i=new Array(n+1);for(r=0;r<n;r++){var a=e[r];i[r]=[t*Math.cos(a),t*Math.sin(a)]}return i[r]=i[0].slice(),i}(t,i):function(t,e,r,i){var s,u,h=i.length,f=[];function p(e){return[t*Math.cos(e),t*Math.sin(e)]}function d(t,e,r){return c(t,e,r,p(t))}function g(t){return n.mod(t,h)}function v(t){return o(t,[e,r])}var m=a(i,function(t){return v(t)?l(t,e):1/0}),y=d(i[m],i[g(m-1)],e);for(f.push(y),s=m,u=0;u<h;s++,u++){var x=i[g(s)];if(!v(x))break;f.push(p(x))}var b=a(i,function(t){return v(t)?l(t,r):1/0}),_=d(i[b],i[g(b+1)],r);return f.push(_),f.push([0,0]),f.push(f[0].slice()),f}(t,e,r,i)}function h(t){return Math.abs(t)>1e-10?t:0}function f(t,e,r){e=e||0,r=r||0;for(var n=t.length,i=new Array(n),a=0;a<n;a++){var o=t[a];i[a]=[e+o[0],r-o[1]]}return i}e.exports={isPtInsidePolygon:function(t,e,r,n,a){if(!o(e,n))return!1;var s,l;r[0]<r[1]?(s=r[0],l=r[1]):(s=r[1],l=r[0]);var c=i(u(s,n[0],n[1],a)),h=i(u(l,n[0],n[1],a)),f=[t*Math.cos(e),t*Math.sin(e)];return h.contains(f)&&!c.contains(f)},findPolygonOffset:function(t,e,r,n){for(var i=1/0,a=1/0,o=u(t,e,r,n),s=0;s<o.length;s++){var l=o[s];i=Math.min(i,l[0]),a=Math.min(a,-l[1])}return[i,a]},findEnclosingVertexAngles:function(t,e){var r=a(e,function(e){var r=s(e,t);return r>0?r:1/0}),i=n.mod(r+1,e.length);return[e[r],e[i]]},findIntersectionXY:c,findXYatLength:function(t,e,r,n){var i=-e*r,a=e*e+1,o=2*(e*i-r),s=i*i+r*r-t*t,l=Math.sqrt(o*o-4*a*s),c=(-o+l)/(2*a),u=(-o-l)/(2*a);return[[c,e*c+i+n],[u,e*u+i+n]]},clampTiny:h,pathPolygon:function(t,e,r,n,i,a){return\\\"M\\\"+f(u(t,e,r,n),i,a).join(\\\"L\\\")},pathPolygonAnnulus:function(t,e,r,n,i,a,o){var s,l;t<e?(s=t,l=e):(s=e,l=t);var c=f(u(s,r,n,i),a,o);return\\\"M\\\"+f(u(l,r,n,i),a,o).reverse().join(\\\"L\\\")+\\\"M\\\"+c.join(\\\"L\\\")}}},{\\\"../../lib\\\":719,\\\"../../lib/polygon\\\":731}],831:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../get_data\\\").getSubplotCalcData,i=t(\\\"../../lib\\\").counterRegex,a=t(\\\"./polar\\\"),o=t(\\\"./constants\\\"),s=o.attr,l=o.name,c=i(l),u={};u[s]={valType:\\\"subplotid\\\",dflt:l,editType:\\\"calc\\\"},e.exports={attr:s,name:l,idRoot:l,idRegex:c,attrRegex:c,attributes:u,layoutAttributes:t(\\\"./layout_attributes\\\"),supplyLayoutDefaults:t(\\\"./layout_defaults\\\"),plot:function(t){for(var e=t._fullLayout,r=t.calcdata,i=e._subplots[l],o=0;o<i.length;o++){var s=i[o],c=n(r,l,s),u=e[s]._subplot;u||(u=a(t,s),e[s]._subplot=u),u.plot(c,e,t._promises)}},clean:function(t,e,r,n){for(var i=n._subplots[l]||[],a=n._has&&n._has(\\\"gl\\\"),o=e._has&&e._has(\\\"gl\\\"),s=a&&!o,c=0;c<i.length;c++){var u=i[c],h=n[u]._subplot;if(!e[u]&&h)for(var f in h.framework.remove(),h.layers[\\\"radial-axis-title\\\"].remove(),h.clipPaths)h.clipPaths[f].remove();s&&h._scene&&(h._scene.destroy(),h._scene=null)}},toSVG:t(\\\"../cartesian\\\").toSVG}},{\\\"../../lib\\\":719,\\\"../cartesian\\\":778,\\\"../get_data\\\":802,\\\"./constants\\\":829,\\\"./layout_attributes\\\":832,\\\"./layout_defaults\\\":833,\\\"./polar\\\":840}],832:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/color/attributes\\\"),i=t(\\\"../cartesian/layout_attributes\\\"),a=t(\\\"../domain\\\").attributes,o=t(\\\"../../lib\\\").extendFlat,s=t(\\\"../../plot_api/edit_types\\\").overrideAll,l=s({color:i.color,showline:o({},i.showline,{dflt:!0}),linecolor:i.linecolor,linewidth:i.linewidth,showgrid:o({},i.showgrid,{dflt:!0}),gridcolor:i.gridcolor,gridwidth:i.gridwidth},\\\"plot\\\",\\\"from-root\\\"),c=s({tickmode:i.tickmode,nticks:i.nticks,tick0:i.tick0,dtick:i.dtick,tickvals:i.tickvals,ticktext:i.ticktext,ticks:i.ticks,ticklen:i.ticklen,tickwidth:i.tickwidth,tickcolor:i.tickcolor,showticklabels:i.showticklabels,showtickprefix:i.showtickprefix,tickprefix:i.tickprefix,showticksuffix:i.showticksuffix,ticksuffix:i.ticksuffix,showexponent:i.showexponent,exponentformat:i.exponentformat,separatethousands:i.separatethousands,tickfont:i.tickfont,tickangle:i.tickangle,tickformat:i.tickformat,tickformatstops:i.tickformatstops,layer:i.layer},\\\"plot\\\",\\\"from-root\\\"),u={visible:o({},i.visible,{dflt:!0}),type:o({},i.type,{values:[\\\"-\\\",\\\"linear\\\",\\\"log\\\",\\\"date\\\",\\\"category\\\"]}),autorange:o({},i.autorange,{editType:\\\"plot\\\"}),rangemode:{valType:\\\"enumerated\\\",values:[\\\"tozero\\\",\\\"nonnegative\\\",\\\"normal\\\"],dflt:\\\"tozero\\\",editType:\\\"calc\\\"},range:o({},i.range,{items:[{valType:\\\"any\\\",editType:\\\"plot\\\",impliedEdits:{\\\"^autorange\\\":!1}},{valType:\\\"any\\\",editType:\\\"plot\\\",impliedEdits:{\\\"^autorange\\\":!1}}],editType:\\\"plot\\\"}),categoryorder:i.categoryorder,categoryarray:i.categoryarray,angle:{valType:\\\"angle\\\",editType:\\\"plot\\\"},side:{valType:\\\"enumerated\\\",values:[\\\"clockwise\\\",\\\"counterclockwise\\\"],dflt:\\\"clockwise\\\",editType:\\\"plot\\\"},title:s(i.title,\\\"plot\\\",\\\"from-root\\\"),hoverformat:i.hoverformat,uirevision:{valType:\\\"any\\\",editType:\\\"none\\\"},editType:\\\"calc\\\",_deprecated:{title:i._deprecated.title,titlefont:i._deprecated.titlefont}};u.title.text.dflt=\\\"\\\",o(u,l,c);var h={visible:o({},i.visible,{dflt:!0}),type:{valType:\\\"enumerated\\\",values:[\\\"-\\\",\\\"linear\\\",\\\"category\\\"],dflt:\\\"-\\\",editType:\\\"calc\\\",_noTemplating:!0},categoryorder:i.categoryorder,categoryarray:i.categoryarray,thetaunit:{valType:\\\"enumerated\\\",values:[\\\"radians\\\",\\\"degrees\\\"],dflt:\\\"degrees\\\",editType:\\\"calc\\\"},period:{valType:\\\"number\\\",editType:\\\"calc\\\",min:0},direction:{valType:\\\"enumerated\\\",values:[\\\"counterclockwise\\\",\\\"clockwise\\\"],dflt:\\\"counterclockwise\\\",editType:\\\"calc\\\"},rotation:{valType:\\\"angle\\\",editType:\\\"calc\\\"},hoverformat:i.hoverformat,uirevision:{valType:\\\"any\\\",editType:\\\"none\\\"},editType:\\\"calc\\\"};o(h,l,c),e.exports={domain:a({name:\\\"polar\\\",editType:\\\"plot\\\"}),sector:{valType:\\\"info_array\\\",items:[{valType:\\\"number\\\",editType:\\\"plot\\\"},{valType:\\\"number\\\",editType:\\\"plot\\\"}],dflt:[0,360],editType:\\\"plot\\\"},hole:{valType:\\\"number\\\",min:0,max:1,dflt:0,editType:\\\"plot\\\"},bgcolor:{valType:\\\"color\\\",editType:\\\"plot\\\",dflt:n.background},radialaxis:u,angularaxis:h,gridshape:{valType:\\\"enumerated\\\",values:[\\\"circular\\\",\\\"linear\\\"],dflt:\\\"circular\\\",editType:\\\"plot\\\"},uirevision:{valType:\\\"any\\\",editType:\\\"none\\\"},editType:\\\"calc\\\"}},{\\\"../../components/color/attributes\\\":592,\\\"../../lib\\\":719,\\\"../../plot_api/edit_types\\\":750,\\\"../cartesian/layout_attributes\\\":779,\\\"../domain\\\":792}],833:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../components/color\\\"),a=t(\\\"../../plot_api/plot_template\\\"),o=t(\\\"../subplot_defaults\\\"),s=t(\\\"../get_data\\\").getSubplotData,l=t(\\\"../cartesian/tick_value_defaults\\\"),c=t(\\\"../cartesian/tick_mark_defaults\\\"),u=t(\\\"../cartesian/tick_label_defaults\\\"),h=t(\\\"../cartesian/category_order_defaults\\\"),f=t(\\\"../cartesian/line_grid_defaults\\\"),p=t(\\\"../cartesian/axis_autotype\\\"),d=t(\\\"./layout_attributes\\\"),g=t(\\\"./set_convert\\\"),v=t(\\\"./constants\\\"),m=v.axisNames;function y(t,e,r,o){var p=r(\\\"bgcolor\\\");o.bgColor=i.combine(p,o.paper_bgcolor);var y=r(\\\"sector\\\");r(\\\"hole\\\");var b,_=s(o.fullData,v.name,o.id),w=o.layoutOut;function k(t,e){return r(b+\\\".\\\"+t,e)}for(var T=0;T<m.length;T++){b=m[T],n.isPlainObject(t[b])||(t[b]={});var A=t[b],M=a.newContainer(e,b);M._id=M._name=b,M._attr=o.id+\\\".\\\"+b,M._traceIndices=_.map(function(t){return t._expandedIndex});var S=v.axisName2dataArray[b],E=x(A,M,k,_,S);h(A,M,k,{axData:_,dataAttr:S});var C,L,P=k(\\\"visible\\\");switch(g(M,e,w),k(\\\"uirevision\\\",e.uirevision),P&&(L=(C=k(\\\"color\\\"))===A.color?C:o.font.color),M._m=1,b){case\\\"radialaxis\\\":var O=k(\\\"autorange\\\",!M.isValidRange(A.range));A.autorange=O,!O||\\\"linear\\\"!==E&&\\\"-\\\"!==E||k(\\\"rangemode\\\"),\\\"reversed\\\"===O&&(M._m=-1),k(\\\"range\\\"),M.cleanRange(\\\"range\\\",{dfltRange:[0,1]}),P&&(k(\\\"side\\\"),k(\\\"angle\\\",y[0]),k(\\\"title.text\\\"),n.coerceFont(k,\\\"title.font\\\",{family:o.font.family,size:Math.round(1.2*o.font.size),color:L}));break;case\\\"angularaxis\\\":if(\\\"date\\\"===E){n.log(\\\"Polar plots do not support date angular axes yet.\\\");for(var z=0;z<_.length;z++)_[z].visible=!1;E=A.type=M.type=\\\"linear\\\"}k(\\\"linear\\\"===E?\\\"thetaunit\\\":\\\"period\\\");var I=k(\\\"direction\\\");k(\\\"rotation\\\",{counterclockwise:0,clockwise:90}[I])}if(P)l(A,M,k,M.type),u(A,M,k,M.type,{tickSuffixDflt:\\\"degrees\\\"===M.thetaunit?\\\"\\\\xb0\\\":void 0}),c(A,M,k,{outerTicks:!0}),k(\\\"showticklabels\\\")&&(n.coerceFont(k,\\\"tickfont\\\",{family:o.font.family,size:o.font.size,color:L}),k(\\\"tickangle\\\"),k(\\\"tickformat\\\")),f(A,M,k,{dfltColor:C,bgColor:o.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:d[b]}),k(\\\"layer\\\");\\\"category\\\"!==E&&k(\\\"hoverformat\\\"),M._input=A}\\\"category\\\"===e.angularaxis.type&&r(\\\"gridshape\\\")}function x(t,e,r,n,i){if(\\\"-\\\"===r(\\\"type\\\")){for(var a,o=0;o<n.length;o++)if(n[o].visible){a=n[o];break}a&&a[i]&&(e.type=p(a[i],\\\"gregorian\\\")),\\\"-\\\"===e.type?e.type=\\\"linear\\\":t.type=e.type}return e.type}e.exports=function(t,e,r){o(t,e,r,{type:v.name,attributes:d,handleDefaults:y,font:e.font,paper_bgcolor:e.paper_bgcolor,fullData:r,layoutOut:e})}},{\\\"../../components/color\\\":593,\\\"../../lib\\\":719,\\\"../../plot_api/plot_template\\\":757,\\\"../cartesian/axis_autotype\\\":768,\\\"../cartesian/category_order_defaults\\\":771,\\\"../cartesian/line_grid_defaults\\\":781,\\\"../cartesian/tick_label_defaults\\\":786,\\\"../cartesian/tick_mark_defaults\\\":787,\\\"../cartesian/tick_value_defaults\\\":788,\\\"../get_data\\\":802,\\\"../subplot_defaults\\\":842,\\\"./constants\\\":829,\\\"./layout_attributes\\\":832,\\\"./set_convert\\\":841}],834:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../../traces/scatter/attributes\\\"),i=n.marker,a=t(\\\"../../../lib/extend\\\").extendFlat;[\\\"Area traces are deprecated!\\\",\\\"Please switch to the *barpolar* trace type.\\\"].join(\\\" \\\");e.exports={r:a({},n.r,{}),t:a({},n.t,{}),marker:{color:a({},i.color,{}),size:a({},i.size,{}),symbol:a({},i.symbol,{}),opacity:a({},i.opacity,{}),editType:\\\"calc\\\"}}},{\\\"../../../lib/extend\\\":710,\\\"../../../traces/scatter/attributes\\\":1112}],835:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../cartesian/layout_attributes\\\"),i=t(\\\"../../../lib/extend\\\").extendFlat,a=t(\\\"../../../plot_api/edit_types\\\").overrideAll,o=[\\\"Legacy polar charts are deprecated!\\\",\\\"Please switch to *polar* subplots.\\\"].join(\\\" \\\"),s=i({},n.domain,{});function l(t,e){return i({},e,{showline:{valType:\\\"boolean\\\"},showticklabels:{valType:\\\"boolean\\\"},tickorientation:{valType:\\\"enumerated\\\",values:[\\\"horizontal\\\",\\\"vertical\\\"]},ticklen:{valType:\\\"number\\\",min:0},tickcolor:{valType:\\\"color\\\"},ticksuffix:{valType:\\\"string\\\"},endpadding:{valType:\\\"number\\\",description:o},visible:{valType:\\\"boolean\\\"}})}e.exports=a({radialaxis:l(0,{range:{valType:\\\"info_array\\\",items:[{valType:\\\"number\\\"},{valType:\\\"number\\\"}]},domain:s,orientation:{valType:\\\"number\\\"}}),angularaxis:l(0,{range:{valType:\\\"info_array\\\",items:[{valType:\\\"number\\\",dflt:0},{valType:\\\"number\\\",dflt:360}]},domain:s}),layout:{direction:{valType:\\\"enumerated\\\",values:[\\\"clockwise\\\",\\\"counterclockwise\\\"]},orientation:{valType:\\\"angle\\\"}}},\\\"plot\\\",\\\"nested\\\")},{\\\"../../../lib/extend\\\":710,\\\"../../../plot_api/edit_types\\\":750,\\\"../../cartesian/layout_attributes\\\":779}],836:[function(t,e,r){\\\"use strict\\\";(e.exports=t(\\\"./micropolar\\\")).manager=t(\\\"./micropolar_manager\\\")},{\\\"./micropolar\\\":837,\\\"./micropolar_manager\\\":838}],837:[function(t,e,r){var n=t(\\\"d3\\\"),i=t(\\\"../../../lib\\\").extendDeepAll,a=t(\\\"../../../constants/alignment\\\").MID_SHIFT,o=e.exports={version:\\\"0.2.2\\\"};o.Axis=function(){var t,e,r,s,l={data:[],layout:{}},c={},u={},h=n.dispatch(\\\"hover\\\"),f={};return f.render=function(c){return function(c){e=c||e;var h=l.data,f=l.layout;(\\\"string\\\"==typeof e||e.nodeName)&&(e=n.select(e)),e.datum(h).each(function(e,l){var c=e.slice();u={data:o.util.cloneJson(c),layout:o.util.cloneJson(f)};var h=0;c.forEach(function(t,e){t.color||(t.color=f.defaultColorRange[h],h=(h+1)%f.defaultColorRange.length),t.strokeColor||(t.strokeColor=\\\"LinePlot\\\"===t.geometry?t.color:n.rgb(t.color).darker().toString()),u.data[e].color=t.color,u.data[e].strokeColor=t.strokeColor,u.data[e].strokeDash=t.strokeDash,u.data[e].strokeSize=t.strokeSize});var p=c.filter(function(t,e){var r=t.visible;return\\\"undefined\\\"==typeof r||!0===r}),d=!1,g=p.map(function(t,e){return d=d||\\\"undefined\\\"!=typeof t.groupId,t});if(d){var v=n.nest().key(function(t,e){return\\\"undefined\\\"!=typeof t.groupId?t.groupId:\\\"unstacked\\\"}).entries(g),m=[],y=v.map(function(t,e){if(\\\"unstacked\\\"===t.key)return t.values;var r=t.values[0].r.map(function(t,e){return 0});return t.values.forEach(function(t,e,n){t.yStack=[r],m.push(r),r=o.util.sumArrays(t.r,r)}),t.values});p=n.merge(y)}p.forEach(function(t,e){t.t=Array.isArray(t.t[0])?t.t:[t.t],t.r=Array.isArray(t.r[0])?t.r:[t.r]});var x=Math.min(f.width-f.margin.left-f.margin.right,f.height-f.margin.top-f.margin.bottom)/2;x=Math.max(10,x);var b,_=[f.margin.left+x,f.margin.top+x];b=d?[0,n.max(o.util.sumArrays(o.util.arrayLast(p).r[0],o.util.arrayLast(m)))]:n.extent(o.util.flattenArray(p.map(function(t,e){return t.r}))),f.radialAxis.domain!=o.DATAEXTENT&&(b[0]=0),r=n.scale.linear().domain(f.radialAxis.domain!=o.DATAEXTENT&&f.radialAxis.domain?f.radialAxis.domain:b).range([0,x]),u.layout.radialAxis.domain=r.domain();var w,k=o.util.flattenArray(p.map(function(t,e){return t.t})),T=\\\"string\\\"==typeof k[0];T&&(k=o.util.deduplicate(k),w=k.slice(),k=n.range(k.length),p=p.map(function(t,e){var r=t;return t.t=[k],d&&(r.yStack=t.yStack),r}));var A=p.filter(function(t,e){return\\\"LinePlot\\\"===t.geometry||\\\"DotPlot\\\"===t.geometry}).length===p.length,M=null===f.needsEndSpacing?T||!A:f.needsEndSpacing,S=f.angularAxis.domain&&f.angularAxis.domain!=o.DATAEXTENT&&!T&&f.angularAxis.domain[0]>=0?f.angularAxis.domain:n.extent(k),E=Math.abs(k[1]-k[0]);A&&!T&&(E=0);var C=S.slice();M&&T&&(C[1]+=E);var L=f.angularAxis.ticksCount||4;L>8&&(L=L/(L/8)+L%8),f.angularAxis.ticksStep&&(L=(C[1]-C[0])/L);var P=f.angularAxis.ticksStep||(C[1]-C[0])/(L*(f.minorTicks+1));w&&(P=Math.max(Math.round(P),1)),C[2]||(C[2]=P);var O=n.range.apply(this,C);if(O=O.map(function(t,e){return parseFloat(t.toPrecision(12))}),s=n.scale.linear().domain(C.slice(0,2)).range(\\\"clockwise\\\"===f.direction?[0,360]:[360,0]),u.layout.angularAxis.domain=s.domain(),u.layout.angularAxis.endPadding=M?E:0,\\\"undefined\\\"==typeof(t=n.select(this).select(\\\"svg.chart-root\\\"))||t.empty()){var z=(new DOMParser).parseFromString(\\\"<svg xmlns='http://www.w3.org/2000/svg' class='chart-root'>' + '<g class='outer-group'>' + '<g class='chart-group'>' + '<circle class='background-circle'></circle>' + '<g class='geometry-group'></g>' + '<g class='radial axis-group'>' + '<circle class='outside-circle'></circle>' + '</g>' + '<g class='angular axis-group'></g>' + '<g class='guides-group'><line></line><circle r='0'></circle></g>' + '</g>' + '<g class='legend-group'></g>' + '<g class='tooltips-group'></g>' + '<g class='title-group'><text></text></g>' + '</g>' + '</svg>\\\",\\\"application/xml\\\"),I=this.appendChild(this.ownerDocument.importNode(z.documentElement,!0));t=n.select(I)}t.select(\\\".guides-group\\\").style({\\\"pointer-events\\\":\\\"none\\\"}),t.select(\\\".angular.axis-group\\\").style({\\\"pointer-events\\\":\\\"none\\\"}),t.select(\\\".radial.axis-group\\\").style({\\\"pointer-events\\\":\\\"none\\\"});var D,R=t.select(\\\".chart-group\\\"),F={fill:\\\"none\\\",stroke:f.tickColor},B={\\\"font-size\\\":f.font.size,\\\"font-family\\\":f.font.family,fill:f.font.color,\\\"text-shadow\\\":[\\\"-1px 0px\\\",\\\"1px -1px\\\",\\\"-1px 1px\\\",\\\"1px 1px\\\"].map(function(t,e){return\\\" \\\"+t+\\\" 0 \\\"+f.font.outlineColor}).join(\\\",\\\")};if(f.showLegend){D=t.select(\\\".legend-group\\\").attr({transform:\\\"translate(\\\"+[x,f.margin.top]+\\\")\\\"}).style({display:\\\"block\\\"});var N=p.map(function(t,e){var r=o.util.cloneJson(t);return r.symbol=\\\"DotPlot\\\"===t.geometry?t.dotType||\\\"circle\\\":\\\"LinePlot\\\"!=t.geometry?\\\"square\\\":\\\"line\\\",r.visibleInLegend=\\\"undefined\\\"==typeof t.visibleInLegend||t.visibleInLegend,r.color=\\\"LinePlot\\\"===t.geometry?t.strokeColor:t.color,r});o.Legend().config({data:p.map(function(t,e){return t.name||\\\"Element\\\"+e}),legendConfig:i({},o.Legend.defaultConfig().legendConfig,{container:D,elements:N,reverseOrder:f.legend.reverseOrder})})();var j=D.node().getBBox();x=Math.min(f.width-j.width-f.margin.left-f.margin.right,f.height-f.margin.top-f.margin.bottom)/2,x=Math.max(10,x),_=[f.margin.left+x,f.margin.top+x],r.range([0,x]),u.layout.radialAxis.domain=r.domain(),D.attr(\\\"transform\\\",\\\"translate(\\\"+[_[0]+x,_[1]-x]+\\\")\\\")}else D=t.select(\\\".legend-group\\\").style({display:\\\"none\\\"});t.attr({width:f.width,height:f.height}).style({opacity:f.opacity}),R.attr(\\\"transform\\\",\\\"translate(\\\"+_+\\\")\\\").style({cursor:\\\"crosshair\\\"});var U=[(f.width-(f.margin.left+f.margin.right+2*x+(j?j.width:0)))/2,(f.height-(f.margin.top+f.margin.bottom+2*x))/2];if(U[0]=Math.max(0,U[0]),U[1]=Math.max(0,U[1]),t.select(\\\".outer-group\\\").attr(\\\"transform\\\",\\\"translate(\\\"+U+\\\")\\\"),f.title&&f.title.text){var V=t.select(\\\"g.title-group text\\\").style(B).text(f.title.text),q=V.node().getBBox();V.attr({x:_[0]-q.width/2,y:_[1]-x-20})}var H=t.select(\\\".radial.axis-group\\\");if(f.radialAxis.gridLinesVisible){var G=H.selectAll(\\\"circle.grid-circle\\\").data(r.ticks(5));G.enter().append(\\\"circle\\\").attr({class:\\\"grid-circle\\\"}).style(F),G.attr(\\\"r\\\",r),G.exit().remove()}H.select(\\\"circle.outside-circle\\\").attr({r:x}).style(F);var Y=t.select(\\\"circle.background-circle\\\").attr({r:x}).style({fill:f.backgroundColor,stroke:f.stroke});function W(t,e){return s(t)%360+f.orientation}if(f.radialAxis.visible){var X=n.svg.axis().scale(r).ticks(5).tickSize(5);H.call(X).attr({transform:\\\"rotate(\\\"+f.radialAxis.orientation+\\\")\\\"}),H.selectAll(\\\".domain\\\").style(F),H.selectAll(\\\"g>text\\\").text(function(t,e){return this.textContent+f.radialAxis.ticksSuffix}).style(B).style({\\\"text-anchor\\\":\\\"start\\\"}).attr({x:0,y:0,dx:0,dy:0,transform:function(t,e){return\\\"horizontal\\\"===f.radialAxis.tickOrientation?\\\"rotate(\\\"+-f.radialAxis.orientation+\\\") translate(\\\"+[0,B[\\\"font-size\\\"]]+\\\")\\\":\\\"translate(\\\"+[0,B[\\\"font-size\\\"]]+\\\")\\\"}}),H.selectAll(\\\"g>line\\\").style({stroke:\\\"black\\\"})}var Z=t.select(\\\".angular.axis-group\\\").selectAll(\\\"g.angular-tick\\\").data(O),J=Z.enter().append(\\\"g\\\").classed(\\\"angular-tick\\\",!0);Z.attr({transform:function(t,e){return\\\"rotate(\\\"+W(t)+\\\")\\\"}}).style({display:f.angularAxis.visible?\\\"block\\\":\\\"none\\\"}),Z.exit().remove(),J.append(\\\"line\\\").classed(\\\"grid-line\\\",!0).classed(\\\"major\\\",function(t,e){return e%(f.minorTicks+1)==0}).classed(\\\"minor\\\",function(t,e){return!(e%(f.minorTicks+1)==0)}).style(F),J.selectAll(\\\".minor\\\").style({stroke:f.minorTickColor}),Z.select(\\\"line.grid-line\\\").attr({x1:f.tickLength?x-f.tickLength:0,x2:x}).style({display:f.angularAxis.gridLinesVisible?\\\"block\\\":\\\"none\\\"}),J.append(\\\"text\\\").classed(\\\"axis-text\\\",!0).style(B);var K=Z.select(\\\"text.axis-text\\\").attr({x:x+f.labelOffset,dy:a+\\\"em\\\",transform:function(t,e){var r=W(t),n=x+f.labelOffset,i=f.angularAxis.tickOrientation;return\\\"horizontal\\\"==i?\\\"rotate(\\\"+-r+\\\" \\\"+n+\\\" 0)\\\":\\\"radial\\\"==i?r<270&&r>90?\\\"rotate(180 \\\"+n+\\\" 0)\\\":null:\\\"rotate(\\\"+(r<=180&&r>0?-90:90)+\\\" \\\"+n+\\\" 0)\\\"}}).style({\\\"text-anchor\\\":\\\"middle\\\",display:f.angularAxis.labelsVisible?\\\"block\\\":\\\"none\\\"}).text(function(t,e){return e%(f.minorTicks+1)!=0?\\\"\\\":w?w[t]+f.angularAxis.ticksSuffix:t+f.angularAxis.ticksSuffix}).style(B);f.angularAxis.rewriteTicks&&K.text(function(t,e){return e%(f.minorTicks+1)!=0?\\\"\\\":f.angularAxis.rewriteTicks(this.textContent,e)});var $=n.max(R.selectAll(\\\".angular-tick text\\\")[0].map(function(t,e){return t.getCTM().e+t.getBBox().width}));D.attr({transform:\\\"translate(\\\"+[x+$,f.margin.top]+\\\")\\\"});var Q=t.select(\\\"g.geometry-group\\\").selectAll(\\\"g\\\").size()>0,tt=t.select(\\\"g.geometry-group\\\").selectAll(\\\"g.geometry\\\").data(p);if(tt.enter().append(\\\"g\\\").attr({class:function(t,e){return\\\"geometry geometry\\\"+e}}),tt.exit().remove(),p[0]||Q){var et=[];p.forEach(function(t,e){var n={};n.radialScale=r,n.angularScale=s,n.container=tt.filter(function(t,r){return r==e}),n.geometry=t.geometry,n.orientation=f.orientation,n.direction=f.direction,n.index=e,et.push({data:t,geometryConfig:n})});var rt=n.nest().key(function(t,e){return\\\"undefined\\\"!=typeof t.data.groupId||\\\"unstacked\\\"}).entries(et),nt=[];rt.forEach(function(t,e){\\\"unstacked\\\"===t.key?nt=nt.concat(t.values.map(function(t,e){return[t]})):nt.push(t.values)}),nt.forEach(function(t,e){var r;r=Array.isArray(t)?t[0].geometryConfig.geometry:t.geometryConfig.geometry;var n=t.map(function(t,e){return i(o[r].defaultConfig(),t)});o[r]().config(n)()})}var it,at,ot=t.select(\\\".guides-group\\\"),st=t.select(\\\".tooltips-group\\\"),lt=o.tooltipPanel().config({container:st,fontSize:8})(),ct=o.tooltipPanel().config({container:st,fontSize:8})(),ut=o.tooltipPanel().config({container:st,hasTick:!0})();if(!T){var ht=ot.select(\\\"line\\\").attr({x1:0,y1:0,y2:0}).style({stroke:\\\"grey\\\",\\\"pointer-events\\\":\\\"none\\\"});R.on(\\\"mousemove.angular-guide\\\",function(t,e){var r=o.util.getMousePos(Y).angle;ht.attr({x2:-x,transform:\\\"rotate(\\\"+r+\\\")\\\"}).style({opacity:.5});var n=(r+180+360-f.orientation)%360;it=s.invert(n);var i=o.util.convertToCartesian(x+12,r+180);lt.text(o.util.round(it)).move([i[0]+_[0],i[1]+_[1]])}).on(\\\"mouseout.angular-guide\\\",function(t,e){ot.select(\\\"line\\\").style({opacity:0})})}var ft=ot.select(\\\"circle\\\").style({stroke:\\\"grey\\\",fill:\\\"none\\\"});R.on(\\\"mousemove.radial-guide\\\",function(t,e){var n=o.util.getMousePos(Y).radius;ft.attr({r:n}).style({opacity:.5}),at=r.invert(o.util.getMousePos(Y).radius);var i=o.util.convertToCartesian(n,f.radialAxis.orientation);ct.text(o.util.round(at)).move([i[0]+_[0],i[1]+_[1]])}).on(\\\"mouseout.radial-guide\\\",function(t,e){ft.style({opacity:0}),ut.hide(),lt.hide(),ct.hide()}),t.selectAll(\\\".geometry-group .mark\\\").on(\\\"mouseover.tooltip\\\",function(e,r){var i=n.select(this),a=this.style.fill,s=\\\"black\\\",l=this.style.opacity||1;if(i.attr({\\\"data-opacity\\\":l}),a&&\\\"none\\\"!==a){i.attr({\\\"data-fill\\\":a}),s=n.hsl(a).darker().toString(),i.style({fill:s,opacity:1});var c={t:o.util.round(e[0]),r:o.util.round(e[1])};T&&(c.t=w[e[0]]);var u=\\\"t: \\\"+c.t+\\\", r: \\\"+c.r,h=this.getBoundingClientRect(),f=t.node().getBoundingClientRect(),p=[h.left+h.width/2-U[0]-f.left,h.top+h.height/2-U[1]-f.top];ut.config({color:s}).text(u),ut.move(p)}else a=this.style.stroke||\\\"black\\\",i.attr({\\\"data-stroke\\\":a}),s=n.hsl(a).darker().toString(),i.style({stroke:s,opacity:1})}).on(\\\"mousemove.tooltip\\\",function(t,e){if(0!=n.event.which)return!1;n.select(this).attr(\\\"data-fill\\\")&&ut.show()}).on(\\\"mouseout.tooltip\\\",function(t,e){ut.hide();var r=n.select(this),i=r.attr(\\\"data-fill\\\");i?r.style({fill:i,opacity:r.attr(\\\"data-opacity\\\")}):r.style({stroke:r.attr(\\\"data-stroke\\\"),opacity:r.attr(\\\"data-opacity\\\")})})})}(c),this},f.config=function(t){if(!arguments.length)return l;var e=o.util.cloneJson(t);return e.data.forEach(function(t,e){l.data[e]||(l.data[e]={}),i(l.data[e],o.Axis.defaultConfig().data[0]),i(l.data[e],t)}),i(l.layout,o.Axis.defaultConfig().layout),i(l.layout,e.layout),this},f.getLiveConfig=function(){return u},f.getinputConfig=function(){return c},f.radialScale=function(t){return r},f.angularScale=function(t){return s},f.svg=function(){return t},n.rebind(f,h,\\\"on\\\"),f},o.Axis.defaultConfig=function(t,e){return{data:[{t:[1,2,3,4],r:[10,11,12,13],name:\\\"Line1\\\",geometry:\\\"LinePlot\\\",color:null,strokeDash:\\\"solid\\\",strokeColor:null,strokeSize:\\\"1\\\",visibleInLegend:!0,opacity:1}],layout:{defaultColorRange:n.scale.category10().range(),title:null,height:450,width:500,margin:{top:40,right:40,bottom:40,left:40},font:{size:12,color:\\\"gray\\\",outlineColor:\\\"white\\\",family:\\\"Tahoma, sans-serif\\\"},direction:\\\"clockwise\\\",orientation:0,labelOffset:10,radialAxis:{domain:null,orientation:-45,ticksSuffix:\\\"\\\",visible:!0,gridLinesVisible:!0,tickOrientation:\\\"horizontal\\\",rewriteTicks:null},angularAxis:{domain:[0,360],ticksSuffix:\\\"\\\",visible:!0,gridLinesVisible:!0,labelsVisible:!0,tickOrientation:\\\"horizontal\\\",rewriteTicks:null,ticksCount:null,ticksStep:null},minorTicks:0,tickLength:null,tickColor:\\\"silver\\\",minorTickColor:\\\"#eee\\\",backgroundColor:\\\"none\\\",needsEndSpacing:null,showLegend:!0,legend:{reverseOrder:!1},opacity:1}}},o.util={},o.DATAEXTENT=\\\"dataExtent\\\",o.AREA=\\\"AreaChart\\\",o.LINE=\\\"LinePlot\\\",o.DOT=\\\"DotPlot\\\",o.BAR=\\\"BarChart\\\",o.util._override=function(t,e){for(var r in t)r in e&&(e[r]=t[r])},o.util._extend=function(t,e){for(var r in t)e[r]=t[r]},o.util._rndSnd=function(){return 2*Math.random()-1+(2*Math.random()-1)+(2*Math.random()-1)},o.util.dataFromEquation2=function(t,e){var r=e||6;return n.range(0,360+r,r).map(function(e,r){var n=e*Math.PI/180;return[e,t(n)]})},o.util.dataFromEquation=function(t,e,r){var i=e||6,a=[],o=[];n.range(0,360+i,i).forEach(function(e,r){var n=e*Math.PI/180,i=t(n);a.push(e),o.push(i)});var s={t:a,r:o};return r&&(s.name=r),s},o.util.ensureArray=function(t,e){if(\\\"undefined\\\"==typeof t)return null;var r=[].concat(t);return n.range(e).map(function(t,e){return r[e]||r[0]})},o.util.fillArrays=function(t,e,r){return e.forEach(function(e,n){t[e]=o.util.ensureArray(t[e],r)}),t},o.util.cloneJson=function(t){return JSON.parse(JSON.stringify(t))},o.util.validateKeys=function(t,e){\\\"string\\\"==typeof e&&(e=e.split(\\\".\\\"));var r=e.shift();return t[r]&&(!e.length||objHasKeys(t[r],e))},o.util.sumArrays=function(t,e){return n.zip(t,e).map(function(t,e){return n.sum(t)})},o.util.arrayLast=function(t){return t[t.length-1]},o.util.arrayEqual=function(t,e){for(var r=Math.max(t.length,e.length,1);r-- >=0&&t[r]===e[r];);return-2===r},o.util.flattenArray=function(t){for(var e=[];!o.util.arrayEqual(e,t);)e=t,t=[].concat.apply([],t);return t},o.util.deduplicate=function(t){return t.filter(function(t,e,r){return r.indexOf(t)==e})},o.util.convertToCartesian=function(t,e){var r=e*Math.PI/180;return[t*Math.cos(r),t*Math.sin(r)]},o.util.round=function(t,e){var r=e||2,n=Math.pow(10,r);return Math.round(t*n)/n},o.util.getMousePos=function(t){var e=n.mouse(t.node()),r=e[0],i=e[1],a={};return a.x=r,a.y=i,a.pos=e,a.angle=180*(Math.atan2(i,r)+Math.PI)/Math.PI,a.radius=Math.sqrt(r*r+i*i),a},o.util.duplicatesCount=function(t){for(var e,r={},n={},i=0,a=t.length;i<a;i++)(e=t[i])in r?(r[e]++,n[e]=r[e]):r[e]=1;return n},o.util.duplicates=function(t){return Object.keys(o.util.duplicatesCount(t))},o.util.translator=function(t,e,r,n){if(n){var i=r.slice();r=e,e=i}var a=e.reduce(function(t,e){if(\\\"undefined\\\"!=typeof t)return t[e]},t);\\\"undefined\\\"!=typeof a&&(e.reduce(function(t,r,n){if(\\\"undefined\\\"!=typeof t)return n===e.length-1&&delete t[r],t[r]},t),r.reduce(function(t,e,n){return\\\"undefined\\\"==typeof t[e]&&(t[e]={}),n===r.length-1&&(t[e]=a),t[e]},t))},o.PolyChart=function(){var t=[o.PolyChart.defaultConfig()],e=n.dispatch(\\\"hover\\\"),r={solid:\\\"none\\\",dash:[5,2],dot:[2,5]};function a(){var e=t[0].geometryConfig,i=e.container;\\\"string\\\"==typeof i&&(i=n.select(i)),i.datum(t).each(function(t,i){var a=!!t[0].data.yStack,o=t.map(function(t,e){return a?n.zip(t.data.t[0],t.data.r[0],t.data.yStack[0]):n.zip(t.data.t[0],t.data.r[0])}),s=e.angularScale,l=e.radialScale.domain()[0],c={bar:function(r,i,a){var o=t[a].data,l=e.radialScale(r[1])-e.radialScale(0),c=e.radialScale(r[2]||0),u=o.barWidth;n.select(this).attr({class:\\\"mark bar\\\",d:\\\"M\\\"+[[l+c,-u/2],[l+c,u/2],[c,u/2],[c,-u/2]].join(\\\"L\\\")+\\\"Z\\\",transform:function(t,r){return\\\"rotate(\\\"+(e.orientation+s(t[0]))+\\\")\\\"}})}};c.dot=function(r,i,a){var o=r[2]?[r[0],r[1]+r[2]]:r,s=n.svg.symbol().size(t[a].data.dotSize).type(t[a].data.dotType)(r,i);n.select(this).attr({class:\\\"mark dot\\\",d:s,transform:function(t,r){var n,i,a,s=(n=function(t,r){var n=e.radialScale(t[1]),i=(e.angularScale(t[0])+e.orientation)*Math.PI/180;return{r:n,t:i}}(o),i=n.r*Math.cos(n.t),a=n.r*Math.sin(n.t),{x:i,y:a});return\\\"translate(\\\"+[s.x,s.y]+\\\")\\\"}})};var u=n.svg.line.radial().interpolate(t[0].data.lineInterpolation).radius(function(t){return e.radialScale(t[1])}).angle(function(t){return e.angularScale(t[0])*Math.PI/180});c.line=function(r,i,a){var s=r[2]?o[a].map(function(t,e){return[t[0],t[1]+t[2]]}):o[a];if(n.select(this).each(c.dot).style({opacity:function(e,r){return+t[a].data.dotVisible},fill:d.stroke(r,i,a)}).attr({class:\\\"mark dot\\\"}),!(i>0)){var l=n.select(this.parentNode).selectAll(\\\"path.line\\\").data([0]);l.enter().insert(\\\"path\\\"),l.attr({class:\\\"line\\\",d:u(s),transform:function(t,r){return\\\"rotate(\\\"+(e.orientation+90)+\\\")\\\"},\\\"pointer-events\\\":\\\"none\\\"}).style({fill:function(t,e){return d.fill(r,i,a)},\\\"fill-opacity\\\":0,stroke:function(t,e){return d.stroke(r,i,a)},\\\"stroke-width\\\":function(t,e){return d[\\\"stroke-width\\\"](r,i,a)},\\\"stroke-dasharray\\\":function(t,e){return d[\\\"stroke-dasharray\\\"](r,i,a)},opacity:function(t,e){return d.opacity(r,i,a)},display:function(t,e){return d.display(r,i,a)}})}};var h=e.angularScale.range(),f=Math.abs(h[1]-h[0])/o[0].length*Math.PI/180,p=n.svg.arc().startAngle(function(t){return-f/2}).endAngle(function(t){return f/2}).innerRadius(function(t){return e.radialScale(l+(t[2]||0))}).outerRadius(function(t){return e.radialScale(l+(t[2]||0))+e.radialScale(t[1])});c.arc=function(t,r,i){n.select(this).attr({class:\\\"mark arc\\\",d:p,transform:function(t,r){return\\\"rotate(\\\"+(e.orientation+s(t[0])+90)+\\\")\\\"}})};var d={fill:function(e,r,n){return t[n].data.color},stroke:function(e,r,n){return t[n].data.strokeColor},\\\"stroke-width\\\":function(e,r,n){return t[n].data.strokeSize+\\\"px\\\"},\\\"stroke-dasharray\\\":function(e,n,i){return r[t[i].data.strokeDash]},opacity:function(e,r,n){return t[n].data.opacity},display:function(e,r,n){return\\\"undefined\\\"==typeof t[n].data.visible||t[n].data.visible?\\\"block\\\":\\\"none\\\"}},g=n.select(this).selectAll(\\\"g.layer\\\").data(o);g.enter().append(\\\"g\\\").attr({class:\\\"layer\\\"});var v=g.selectAll(\\\"path.mark\\\").data(function(t,e){return t});v.enter().append(\\\"path\\\").attr({class:\\\"mark\\\"}),v.style(d).each(c[e.geometryType]),v.exit().remove(),g.exit().remove()})}return a.config=function(e){return arguments.length?(e.forEach(function(e,r){t[r]||(t[r]={}),i(t[r],o.PolyChart.defaultConfig()),i(t[r],e)}),this):t},a.getColorScale=function(){},n.rebind(a,e,\\\"on\\\"),a},o.PolyChart.defaultConfig=function(){return{data:{name:\\\"geom1\\\",t:[[1,2,3,4]],r:[[1,2,3,4]],dotType:\\\"circle\\\",dotSize:64,dotVisible:!1,barWidth:20,color:\\\"#ffa500\\\",strokeSize:1,strokeColor:\\\"silver\\\",strokeDash:\\\"solid\\\",opacity:1,index:0,visible:!0,visibleInLegend:!0},geometryConfig:{geometry:\\\"LinePlot\\\",geometryType:\\\"arc\\\",direction:\\\"clockwise\\\",orientation:0,container:\\\"body\\\",radialScale:null,angularScale:null,colorScale:n.scale.category20()}}},o.BarChart=function(){return o.PolyChart()},o.BarChart.defaultConfig=function(){return{geometryConfig:{geometryType:\\\"bar\\\"}}},o.AreaChart=function(){return o.PolyChart()},o.AreaChart.defaultConfig=function(){return{geometryConfig:{geometryType:\\\"arc\\\"}}},o.DotPlot=function(){return o.PolyChart()},o.DotPlot.defaultConfig=function(){return{geometryConfig:{geometryType:\\\"dot\\\",dotType:\\\"circle\\\"}}},o.LinePlot=function(){return o.PolyChart()},o.LinePlot.defaultConfig=function(){return{geometryConfig:{geometryType:\\\"line\\\"}}},o.Legend=function(){var t=o.Legend.defaultConfig(),e=n.dispatch(\\\"hover\\\");function r(){var e=t.legendConfig,a=t.data.map(function(t,r){return[].concat(t).map(function(t,n){var a=i({},e.elements[r]);return a.name=t,a.color=[].concat(e.elements[r].color)[n],a})}),o=n.merge(a);o=o.filter(function(t,r){return e.elements[r]&&(e.elements[r].visibleInLegend||\\\"undefined\\\"==typeof e.elements[r].visibleInLegend)}),e.reverseOrder&&(o=o.reverse());var s=e.container;(\\\"string\\\"==typeof s||s.nodeName)&&(s=n.select(s));var l=o.map(function(t,e){return t.color}),c=e.fontSize,u=null==e.isContinuous?\\\"number\\\"==typeof o[0]:e.isContinuous,h=u?e.height:c*o.length,f=s.classed(\\\"legend-group\\\",!0).selectAll(\\\"svg\\\").data([0]),p=f.enter().append(\\\"svg\\\").attr({width:300,height:h+c,xmlns:\\\"http://www.w3.org/2000/svg\\\",\\\"xmlns:xlink\\\":\\\"http://www.w3.org/1999/xlink\\\",version:\\\"1.1\\\"});p.append(\\\"g\\\").classed(\\\"legend-axis\\\",!0),p.append(\\\"g\\\").classed(\\\"legend-marks\\\",!0);var d=n.range(o.length),g=n.scale[u?\\\"linear\\\":\\\"ordinal\\\"]().domain(d).range(l),v=n.scale[u?\\\"linear\\\":\\\"ordinal\\\"]().domain(d)[u?\\\"range\\\":\\\"rangePoints\\\"]([0,h]);if(u){var m=f.select(\\\".legend-marks\\\").append(\\\"defs\\\").append(\\\"linearGradient\\\").attr({id:\\\"grad1\\\",x1:\\\"0%\\\",y1:\\\"0%\\\",x2:\\\"0%\\\",y2:\\\"100%\\\"}).selectAll(\\\"stop\\\").data(l);m.enter().append(\\\"stop\\\"),m.attr({offset:function(t,e){return e/(l.length-1)*100+\\\"%\\\"}}).style({\\\"stop-color\\\":function(t,e){return t}}),f.append(\\\"rect\\\").classed(\\\"legend-mark\\\",!0).attr({height:e.height,width:e.colorBandWidth,fill:\\\"url(#grad1)\\\"})}else{var y=f.select(\\\".legend-marks\\\").selectAll(\\\"path.legend-mark\\\").data(o);y.enter().append(\\\"path\\\").classed(\\\"legend-mark\\\",!0),y.attr({transform:function(t,e){return\\\"translate(\\\"+[c/2,v(e)+c/2]+\\\")\\\"},d:function(t,e){var r,i,a,o=t.symbol;return a=3*(i=c),\\\"line\\\"===(r=o)?\\\"M\\\"+[[-i/2,-i/12],[i/2,-i/12],[i/2,i/12],[-i/2,i/12]]+\\\"Z\\\":-1!=n.svg.symbolTypes.indexOf(r)?n.svg.symbol().type(r).size(a)():n.svg.symbol().type(\\\"square\\\").size(a)()},fill:function(t,e){return g(e)}}),y.exit().remove()}var x=n.svg.axis().scale(v).orient(\\\"right\\\"),b=f.select(\\\"g.legend-axis\\\").attr({transform:\\\"translate(\\\"+[u?e.colorBandWidth:c,c/2]+\\\")\\\"}).call(x);return b.selectAll(\\\".domain\\\").style({fill:\\\"none\\\",stroke:\\\"none\\\"}),b.selectAll(\\\"line\\\").style({fill:\\\"none\\\",stroke:u?e.textColor:\\\"none\\\"}),b.selectAll(\\\"text\\\").style({fill:e.textColor,\\\"font-size\\\":e.fontSize}).text(function(t,e){return o[e].name}),r}return r.config=function(e){return arguments.length?(i(t,e),this):t},n.rebind(r,e,\\\"on\\\"),r},o.Legend.defaultConfig=function(t,e){return{data:[\\\"a\\\",\\\"b\\\",\\\"c\\\"],legendConfig:{elements:[{symbol:\\\"line\\\",color:\\\"red\\\"},{symbol:\\\"square\\\",color:\\\"yellow\\\"},{symbol:\\\"diamond\\\",color:\\\"limegreen\\\"}],height:150,colorBandWidth:30,fontSize:12,container:\\\"body\\\",isContinuous:null,textColor:\\\"grey\\\",reverseOrder:!1}}},o.tooltipPanel=function(){var t,e,r,a={container:null,hasTick:!1,fontSize:12,color:\\\"white\\\",padding:5},s=\\\"tooltip-\\\"+o.tooltipPanel.uid++,l=10,c=function(){var n=(t=a.container.selectAll(\\\"g.\\\"+s).data([0])).enter().append(\\\"g\\\").classed(s,!0).style({\\\"pointer-events\\\":\\\"none\\\",display:\\\"none\\\"});return r=n.append(\\\"path\\\").style({fill:\\\"white\\\",\\\"fill-opacity\\\":.9}).attr({d:\\\"M0 0\\\"}),e=n.append(\\\"text\\\").attr({dx:a.padding+l,dy:.3*+a.fontSize}),c};return c.text=function(i){var o=n.hsl(a.color).l,s=o>=.5?\\\"#aaa\\\":\\\"white\\\",u=o>=.5?\\\"black\\\":\\\"white\\\",h=i||\\\"\\\";e.style({fill:u,\\\"font-size\\\":a.fontSize+\\\"px\\\"}).text(h);var f=a.padding,p=e.node().getBBox(),d={fill:a.color,stroke:s,\\\"stroke-width\\\":\\\"2px\\\"},g=p.width+2*f+l,v=p.height+2*f;return r.attr({d:\\\"M\\\"+[[l,-v/2],[l,-v/4],[a.hasTick?0:l,0],[l,v/4],[l,v/2],[g,v/2],[g,-v/2]].join(\\\"L\\\")+\\\"Z\\\"}).style(d),t.attr({transform:\\\"translate(\\\"+[l,-v/2+2*f]+\\\")\\\"}),t.style({display:\\\"block\\\"}),c},c.move=function(e){if(t)return t.attr({transform:\\\"translate(\\\"+[e[0],e[1]]+\\\")\\\"}).style({display:\\\"block\\\"}),c},c.hide=function(){if(t)return t.style({display:\\\"none\\\"}),c},c.show=function(){if(t)return t.style({display:\\\"block\\\"}),c},c.config=function(t){return i(a,t),c},c},o.tooltipPanel.uid=1,o.adapter={},o.adapter.plotly=function(){var t={convert:function(t,e){var r={};if(t.data&&(r.data=t.data.map(function(t,r){var n=i({},t);return[[n,[\\\"marker\\\",\\\"color\\\"],[\\\"color\\\"]],[n,[\\\"marker\\\",\\\"opacity\\\"],[\\\"opacity\\\"]],[n,[\\\"marker\\\",\\\"line\\\",\\\"color\\\"],[\\\"strokeColor\\\"]],[n,[\\\"marker\\\",\\\"line\\\",\\\"dash\\\"],[\\\"strokeDash\\\"]],[n,[\\\"marker\\\",\\\"line\\\",\\\"width\\\"],[\\\"strokeSize\\\"]],[n,[\\\"marker\\\",\\\"symbol\\\"],[\\\"dotType\\\"]],[n,[\\\"marker\\\",\\\"size\\\"],[\\\"dotSize\\\"]],[n,[\\\"marker\\\",\\\"barWidth\\\"],[\\\"barWidth\\\"]],[n,[\\\"line\\\",\\\"interpolation\\\"],[\\\"lineInterpolation\\\"]],[n,[\\\"showlegend\\\"],[\\\"visibleInLegend\\\"]]].forEach(function(t,r){o.util.translator.apply(null,t.concat(e))}),e||delete n.marker,e&&delete n.groupId,e?(\\\"LinePlot\\\"===n.geometry?(n.type=\\\"scatter\\\",!0===n.dotVisible?(delete n.dotVisible,n.mode=\\\"lines+markers\\\"):n.mode=\\\"lines\\\"):\\\"DotPlot\\\"===n.geometry?(n.type=\\\"scatter\\\",n.mode=\\\"markers\\\"):\\\"AreaChart\\\"===n.geometry?n.type=\\\"area\\\":\\\"BarChart\\\"===n.geometry&&(n.type=\\\"bar\\\"),delete n.geometry):(\\\"scatter\\\"===n.type?\\\"lines\\\"===n.mode?n.geometry=\\\"LinePlot\\\":\\\"markers\\\"===n.mode?n.geometry=\\\"DotPlot\\\":\\\"lines+markers\\\"===n.mode&&(n.geometry=\\\"LinePlot\\\",n.dotVisible=!0):\\\"area\\\"===n.type?n.geometry=\\\"AreaChart\\\":\\\"bar\\\"===n.type&&(n.geometry=\\\"BarChart\\\"),delete n.mode,delete n.type),n}),!e&&t.layout&&\\\"stack\\\"===t.layout.barmode)){var a=o.util.duplicates(r.data.map(function(t,e){return t.geometry}));r.data.forEach(function(t,e){var n=a.indexOf(t.geometry);-1!=n&&(r.data[e].groupId=n)})}if(t.layout){var s=i({},t.layout);if([[s,[\\\"plot_bgcolor\\\"],[\\\"backgroundColor\\\"]],[s,[\\\"showlegend\\\"],[\\\"showLegend\\\"]],[s,[\\\"radialaxis\\\"],[\\\"radialAxis\\\"]],[s,[\\\"angularaxis\\\"],[\\\"angularAxis\\\"]],[s.angularaxis,[\\\"showline\\\"],[\\\"gridLinesVisible\\\"]],[s.angularaxis,[\\\"showticklabels\\\"],[\\\"labelsVisible\\\"]],[s.angularaxis,[\\\"nticks\\\"],[\\\"ticksCount\\\"]],[s.angularaxis,[\\\"tickorientation\\\"],[\\\"tickOrientation\\\"]],[s.angularaxis,[\\\"ticksuffix\\\"],[\\\"ticksSuffix\\\"]],[s.angularaxis,[\\\"range\\\"],[\\\"domain\\\"]],[s.angularaxis,[\\\"endpadding\\\"],[\\\"endPadding\\\"]],[s.radialaxis,[\\\"showline\\\"],[\\\"gridLinesVisible\\\"]],[s.radialaxis,[\\\"tickorientation\\\"],[\\\"tickOrientation\\\"]],[s.radialaxis,[\\\"ticksuffix\\\"],[\\\"ticksSuffix\\\"]],[s.radialaxis,[\\\"range\\\"],[\\\"domain\\\"]],[s.angularAxis,[\\\"showline\\\"],[\\\"gridLinesVisible\\\"]],[s.angularAxis,[\\\"showticklabels\\\"],[\\\"labelsVisible\\\"]],[s.angularAxis,[\\\"nticks\\\"],[\\\"ticksCount\\\"]],[s.angularAxis,[\\\"tickorientation\\\"],[\\\"tickOrientation\\\"]],[s.angularAxis,[\\\"ticksuffix\\\"],[\\\"ticksSuffix\\\"]],[s.angularAxis,[\\\"range\\\"],[\\\"domain\\\"]],[s.angularAxis,[\\\"endpadding\\\"],[\\\"endPadding\\\"]],[s.radialAxis,[\\\"showline\\\"],[\\\"gridLinesVisible\\\"]],[s.radialAxis,[\\\"tickorientation\\\"],[\\\"tickOrientation\\\"]],[s.radialAxis,[\\\"ticksuffix\\\"],[\\\"ticksSuffix\\\"]],[s.radialAxis,[\\\"range\\\"],[\\\"domain\\\"]],[s.font,[\\\"outlinecolor\\\"],[\\\"outlineColor\\\"]],[s.legend,[\\\"traceorder\\\"],[\\\"reverseOrder\\\"]],[s,[\\\"labeloffset\\\"],[\\\"labelOffset\\\"]],[s,[\\\"defaultcolorrange\\\"],[\\\"defaultColorRange\\\"]]].forEach(function(t,r){o.util.translator.apply(null,t.concat(e))}),e?(\\\"undefined\\\"!=typeof s.tickLength&&(s.angularaxis.ticklen=s.tickLength,delete s.tickLength),s.tickColor&&(s.angularaxis.tickcolor=s.tickColor,delete s.tickColor)):(s.angularAxis&&\\\"undefined\\\"!=typeof s.angularAxis.ticklen&&(s.tickLength=s.angularAxis.ticklen),s.angularAxis&&\\\"undefined\\\"!=typeof s.angularAxis.tickcolor&&(s.tickColor=s.angularAxis.tickcolor)),s.legend&&\\\"boolean\\\"!=typeof s.legend.reverseOrder&&(s.legend.reverseOrder=\\\"normal\\\"!=s.legend.reverseOrder),s.legend&&\\\"boolean\\\"==typeof s.legend.traceorder&&(s.legend.traceorder=s.legend.traceorder?\\\"reversed\\\":\\\"normal\\\",delete s.legend.reverseOrder),s.margin&&\\\"undefined\\\"!=typeof s.margin.t){var l=[\\\"t\\\",\\\"r\\\",\\\"b\\\",\\\"l\\\",\\\"pad\\\"],c=[\\\"top\\\",\\\"right\\\",\\\"bottom\\\",\\\"left\\\",\\\"pad\\\"],u={};n.entries(s.margin).forEach(function(t,e){u[c[l.indexOf(t.key)]]=t.value}),s.margin=u}e&&(delete s.needsEndSpacing,delete s.minorTickColor,delete s.minorTicks,delete s.angularaxis.ticksCount,delete s.angularaxis.ticksCount,delete s.angularaxis.ticksStep,delete s.angularaxis.rewriteTicks,delete s.angularaxis.nticks,delete s.radialaxis.ticksCount,delete s.radialaxis.ticksCount,delete s.radialaxis.ticksStep,delete s.radialaxis.rewriteTicks,delete s.radialaxis.nticks),r.layout=s}return r}};return t}},{\\\"../../../constants/alignment\\\":688,\\\"../../../lib\\\":719,d3:163}],838:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../../lib\\\"),a=t(\\\"../../../components/color\\\"),o=t(\\\"./micropolar\\\"),s=t(\\\"./undo_manager\\\"),l=i.extendDeepAll,c=e.exports={};c.framework=function(t){var e,r,i,a,u,h=new s;function f(r,s){return s&&(u=s),n.select(n.select(u).node().parentNode).selectAll(\\\".svg-container>*:not(.chart-root)\\\").remove(),e=e?l(e,r):r,i||(i=o.Axis()),a=o.adapter.plotly().convert(e),i.config(a).render(u),t.data=e.data,t.layout=e.layout,c.fillLayout(t),e}return f.isPolar=!0,f.svg=function(){return i.svg()},f.getConfig=function(){return e},f.getLiveConfig=function(){return o.adapter.plotly().convert(i.getLiveConfig(),!0)},f.getLiveScales=function(){return{t:i.angularScale(),r:i.radialScale()}},f.setUndoPoint=function(){var t,n,i=this,a=o.util.cloneJson(e);t=a,n=r,h.add({undo:function(){n&&i(n)},redo:function(){i(t)}}),r=o.util.cloneJson(a)},f.undo=function(){h.undo()},f.redo=function(){h.redo()},f},c.fillLayout=function(t){var e=n.select(t).selectAll(\\\".plot-container\\\"),r=e.selectAll(\\\".svg-container\\\"),i=t.framework&&t.framework.svg&&t.framework.svg(),o={width:800,height:600,paper_bgcolor:a.background,_container:e,_paperdiv:r,_paper:i};t._fullLayout=l(o,t.layout)}},{\\\"../../../components/color\\\":593,\\\"../../../lib\\\":719,\\\"./micropolar\\\":837,\\\"./undo_manager\\\":839,d3:163}],839:[function(t,e,r){\\\"use strict\\\";e.exports=function(){var t,e=[],r=-1,n=!1;function i(t,e){return t?(n=!0,t[e](),n=!1,this):this}return{add:function(t){return n?this:(e.splice(r+1,e.length-r),e.push(t),r=e.length-1,this)},setCallback:function(e){t=e},undo:function(){var n=e[r];return n?(i(n,\\\"undo\\\"),r-=1,t&&t(n.undo),this):this},redo:function(){var n=e[r+1];return n?(i(n,\\\"redo\\\"),r+=1,t&&t(n.redo),this):this},clear:function(){e=[],r=-1},hasUndo:function(){return-1!==r},hasRedo:function(){return r<e.length-1},getCommands:function(){return e},getPreviousCommand:function(){return e[r-1]},getIndex:function(){return r}}}},{}],840:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"tinycolor2\\\"),a=t(\\\"../../registry\\\"),o=t(\\\"../../lib\\\"),s=t(\\\"../../components/color\\\"),l=t(\\\"../../components/drawing\\\"),c=t(\\\"../plots\\\"),u=t(\\\"../../plots/cartesian/axes\\\"),h=t(\\\"../cartesian/set_convert\\\"),f=t(\\\"./set_convert\\\"),p=t(\\\"../cartesian/autorange\\\").doAutoRange,d=t(\\\"../cartesian/dragbox\\\"),g=t(\\\"../../components/dragelement\\\"),v=t(\\\"../../components/fx\\\"),m=t(\\\"../../components/titles\\\"),y=t(\\\"../cartesian/select\\\").prepSelect,x=t(\\\"../cartesian/select\\\").selectOnClick,b=t(\\\"../cartesian/select\\\").clearSelect,_=t(\\\"../../lib/setcursor\\\"),w=t(\\\"../../lib/clear_gl_canvases\\\"),k=t(\\\"../../plot_api/subroutines\\\").redrawReglTraces,T=t(\\\"../../constants/alignment\\\").MID_SHIFT,A=t(\\\"./constants\\\"),M=t(\\\"./helpers\\\"),S=o._,E=o.mod,C=o.deg2rad,L=o.rad2deg;function P(t,e){this.id=e,this.gd=t,this._hasClipOnAxisFalse=null,this.vangles=null,this.radialAxisAngle=null,this.traceHash={},this.layers={},this.clipPaths={},this.clipIds={},this.viewInitial={};var r=t._fullLayout,n=\\\"clip\\\"+r._uid+e;this.clipIds.forTraces=n+\\\"-for-traces\\\",this.clipPaths.forTraces=r._clips.append(\\\"clipPath\\\").attr(\\\"id\\\",this.clipIds.forTraces),this.clipPaths.forTraces.append(\\\"path\\\"),this.framework=r._polarlayer.append(\\\"g\\\").attr(\\\"class\\\",e),this.radialTickLayout=null,this.angularTickLayout=null}var O=P.prototype;function z(t){var e=t.ticks+String(t.ticklen)+String(t.showticklabels);return\\\"side\\\"in t&&(e+=t.side),e}function I(t,e){return e[o.findIndexOfMin(e,function(e){return o.angleDist(t,e)})]}function D(t,e,r){return e?(t.attr(\\\"display\\\",null),t.attr(r)):t&&t.attr(\\\"display\\\",\\\"none\\\"),t}function R(t,e){return\\\"translate(\\\"+t+\\\",\\\"+e+\\\")\\\"}function F(t){return\\\"rotate(\\\"+t+\\\")\\\"}e.exports=function(t,e){return new P(t,e)},O.plot=function(t,e){var r=e[this.id];this._hasClipOnAxisFalse=!1;for(var n=0;n<t.length;n++){if(!1===t[n][0].trace.cliponaxis){this._hasClipOnAxisFalse=!0;break}}this.updateLayers(e,r),this.updateLayout(e,r),c.generalUpdatePerTraceModule(this.gd,this,t,r),this.updateFx(e,r)},O.updateLayers=function(t,e){var r=this.layers,i=e.radialaxis,a=e.angularaxis,o=A.layerNames,s=o.indexOf(\\\"frontplot\\\"),l=o.slice(0,s),c=\\\"below traces\\\"===a.layer,u=\\\"below traces\\\"===i.layer;c&&l.push(\\\"angular-line\\\"),u&&l.push(\\\"radial-line\\\"),c&&l.push(\\\"angular-axis\\\"),u&&l.push(\\\"radial-axis\\\"),l.push(\\\"frontplot\\\"),c||l.push(\\\"angular-line\\\"),u||l.push(\\\"radial-line\\\"),c||l.push(\\\"angular-axis\\\"),u||l.push(\\\"radial-axis\\\");var h=this.framework.selectAll(\\\".polarsublayer\\\").data(l,String);h.enter().append(\\\"g\\\").attr(\\\"class\\\",function(t){return\\\"polarsublayer \\\"+t}).each(function(t){var e=r[t]=n.select(this);switch(t){case\\\"frontplot\\\":e.append(\\\"g\\\").classed(\\\"barlayer\\\",!0),e.append(\\\"g\\\").classed(\\\"scatterlayer\\\",!0);break;case\\\"backplot\\\":e.append(\\\"g\\\").classed(\\\"maplayer\\\",!0);break;case\\\"plotbg\\\":r.bg=e.append(\\\"path\\\");break;case\\\"radial-grid\\\":case\\\"angular-grid\\\":e.style(\\\"fill\\\",\\\"none\\\");break;case\\\"radial-line\\\":e.append(\\\"line\\\").style(\\\"fill\\\",\\\"none\\\");break;case\\\"angular-line\\\":e.append(\\\"path\\\").style(\\\"fill\\\",\\\"none\\\")}}),h.order()},O.updateLayout=function(t,e){var r=this.layers,n=t._size,i=e.radialaxis,a=e.angularaxis,o=e.domain.x,c=e.domain.y;this.xOffset=n.l+n.w*o[0],this.yOffset=n.t+n.h*(1-c[1]);var u=this.xLength=n.w*(o[1]-o[0]),h=this.yLength=n.h*(c[1]-c[0]),f=e.sector;this.sectorInRad=f.map(C);var p,d,g,v,m,y=this.sectorBBox=function(t){var e,r,n,i,a=t[0],o=t[1]-a,s=E(a,360),l=s+o,c=Math.cos(C(s)),u=Math.sin(C(s)),h=Math.cos(C(l)),f=Math.sin(C(l));i=s<=90&&l>=90||s>90&&l>=450?1:u<=0&&f<=0?0:Math.max(u,f);e=s<=180&&l>=180||s>180&&l>=540?-1:c>=0&&h>=0?0:Math.min(c,h);r=s<=270&&l>=270||s>270&&l>=630?-1:u>=0&&f>=0?0:Math.min(u,f);n=l>=360?1:c<=0&&h<=0?0:Math.max(c,h);return[e,r,n,i]}(f),x=y[2]-y[0],b=y[3]-y[1],_=h/u,w=Math.abs(b/x);_>w?(p=u,m=(h-(d=u*w))/n.h/2,g=[o[0],o[1]],v=[c[0]+m,c[1]-m]):(d=h,m=(u-(p=h/w))/n.w/2,g=[o[0]+m,o[1]-m],v=[c[0],c[1]]),this.xLength2=p,this.yLength2=d,this.xDomain2=g,this.yDomain2=v;var k=this.xOffset2=n.l+n.w*g[0],T=this.yOffset2=n.t+n.h*(1-v[1]),A=this.radius=p/x,M=this.innerRadius=e.hole*A,S=this.cx=k-A*y[0],L=this.cy=T+A*y[3],P=this.cxx=S-k,O=this.cyy=L-T;this.radialAxis=this.mockAxis(t,e,i,{_id:\\\"x\\\",side:{counterclockwise:\\\"top\\\",clockwise:\\\"bottom\\\"}[i.side],domain:[M/n.w,A/n.w]}),this.angularAxis=this.mockAxis(t,e,a,{side:\\\"right\\\",domain:[0,Math.PI],autorange:!1}),this.doAutoRange(t,e),this.updateAngularAxis(t,e),this.updateRadialAxis(t,e),this.updateRadialAxisTitle(t,e),this.xaxis=this.mockCartesianAxis(t,e,{_id:\\\"x\\\",domain:g}),this.yaxis=this.mockCartesianAxis(t,e,{_id:\\\"y\\\",domain:v});var z=this.pathSubplot();this.clipPaths.forTraces.select(\\\"path\\\").attr(\\\"d\\\",z).attr(\\\"transform\\\",R(P,O)),r.frontplot.attr(\\\"transform\\\",R(k,T)).call(l.setClipUrl,this._hasClipOnAxisFalse?null:this.clipIds.forTraces,this.gd),r.bg.attr(\\\"d\\\",z).attr(\\\"transform\\\",R(S,L)).call(s.fill,e.bgcolor)},O.mockAxis=function(t,e,r,n){var i=o.extendFlat({anchor:\\\"free\\\",position:0},r,n);return f(i,e,t),i},O.mockCartesianAxis=function(t,e,r){var n=this,i=r._id,a=o.extendFlat({type:\\\"linear\\\"},r);h(a,t);var s={x:[0,2],y:[1,3]};return a.setRange=function(){var t=n.sectorBBox,r=s[i],o=n.radialAxis._rl,l=(o[1]-o[0])/(1-e.hole);a.range=[t[r[0]]*l,t[r[1]]*l]},a.isPtWithinRange=\\\"x\\\"===i?function(t){return n.isPtInside(t)}:function(){return!0},a.setRange(),a.setScale(),a},O.doAutoRange=function(t,e){var r=this.gd,n=this.radialAxis,i=e.radialaxis;n.setScale(),p(r,n);var a=n.range;i.range=a.slice(),i._input.range=a.slice(),n._rl=[n.r2l(a[0],null,\\\"gregorian\\\"),n.r2l(a[1],null,\\\"gregorian\\\")]},O.updateRadialAxis=function(t,e){var r=this,n=r.gd,i=r.layers,a=r.radius,l=r.innerRadius,c=r.cx,h=r.cy,f=e.radialaxis,p=E(e.sector[0],360),d=r.radialAxis,g=l<a;r.fillViewInitialKey(\\\"radialaxis.angle\\\",f.angle),r.fillViewInitialKey(\\\"radialaxis.range\\\",d.range.slice()),d.setGeometry(),\\\"auto\\\"===d.tickangle&&p>90&&p<=270&&(d.tickangle=180);var v=function(t){return\\\"translate(\\\"+(d.l2p(t.x)+l)+\\\",0)\\\"},m=z(f);if(r.radialTickLayout!==m&&(i[\\\"radial-axis\\\"].selectAll(\\\".xtick\\\").remove(),r.radialTickLayout=m),g){d.setScale();var y=u.calcTicks(d),x=u.clipEnds(d,y),b=u.getTickSigns(d)[2];u.drawTicks(n,d,{vals:y,layer:i[\\\"radial-axis\\\"],path:u.makeTickPath(d,0,b),transFn:v,crisp:!1}),u.drawGrid(n,d,{vals:x,layer:i[\\\"radial-grid\\\"],path:function(t){return r.pathArc(d.r2p(t.x)+l)},transFn:o.noop,crisp:!1}),u.drawLabels(n,d,{vals:y,layer:i[\\\"radial-axis\\\"],transFn:v,labelFns:u.makeLabelFns(d,0)})}var _=r.radialAxisAngle=r.vangles?L(I(C(f.angle),r.vangles)):f.angle,w=R(c,h),k=w+F(-_);D(i[\\\"radial-axis\\\"],g&&(f.showticklabels||f.ticks),{transform:k}),D(i[\\\"radial-grid\\\"],g&&f.showgrid,{transform:w}),D(i[\\\"radial-line\\\"].select(\\\"line\\\"),g&&f.showline,{x1:l,y1:0,x2:a,y2:0,transform:k}).attr(\\\"stroke-width\\\",f.linewidth).call(s.stroke,f.linecolor)},O.updateRadialAxisTitle=function(t,e,r){var n=this.gd,i=this.radius,a=this.cx,o=this.cy,s=e.radialaxis,c=this.id+\\\"title\\\",u=void 0!==r?r:this.radialAxisAngle,h=C(u),f=Math.cos(h),p=Math.sin(h),d=0;if(s.title){var g=l.bBox(this.layers[\\\"radial-axis\\\"].node()).height,v=s.title.font.size;d=\\\"counterclockwise\\\"===s.side?-g-.4*v:g+.8*v}this.layers[\\\"radial-axis-title\\\"]=m.draw(n,c,{propContainer:s,propName:this.id+\\\".radialaxis.title\\\",placeholder:S(n,\\\"Click to enter radial axis title\\\"),attributes:{x:a+i/2*f+d*p,y:o-i/2*p+d*f,\\\"text-anchor\\\":\\\"middle\\\"},transform:{rotate:-u}})},O.updateAngularAxis=function(t,e){var r=this,n=r.gd,i=r.layers,a=r.radius,l=r.innerRadius,c=r.cx,h=r.cy,f=e.angularaxis,p=r.angularAxis;r.fillViewInitialKey(\\\"angularaxis.rotation\\\",f.rotation),p.setGeometry(),p.setScale();var d=function(t){return p.t2g(t.x)};\\\"linear\\\"===p.type&&\\\"radians\\\"===p.thetaunit&&(p.tick0=L(p.tick0),p.dtick=L(p.dtick));var g=function(t){return R(c+a*Math.cos(t),h-a*Math.sin(t))},v=u.makeLabelFns(p,0).labelStandoff,m={xFn:function(t){var e=d(t);return Math.cos(e)*v},yFn:function(t){var e=d(t),r=Math.sin(e)>0?.2:1;return-Math.sin(e)*(v+t.fontSize*r)+Math.abs(Math.cos(e))*(t.fontSize*T)},anchorFn:function(t){var e=d(t),r=Math.cos(e);return Math.abs(r)<.1?\\\"middle\\\":r>0?\\\"start\\\":\\\"end\\\"},heightFn:function(t,e,r){var n=d(t);return-.5*(1+Math.sin(n))*r}},y=z(f);r.angularTickLayout!==y&&(i[\\\"angular-axis\\\"].selectAll(\\\".\\\"+p._id+\\\"tick\\\").remove(),r.angularTickLayout=y);var x,b=u.calcTicks(p);if(\\\"linear\\\"===e.gridshape?(x=b.map(d),o.angleDelta(x[0],x[1])<0&&(x=x.slice().reverse())):x=null,r.vangles=x,\\\"category\\\"===p.type&&(b=b.filter(function(t){return o.isAngleInsideSector(d(t),r.sectorInRad)})),p.visible){var _=\\\"inside\\\"===p.ticks?-1:1,w=(p.linewidth||1)/2;u.drawTicks(n,p,{vals:b,layer:i[\\\"angular-axis\\\"],path:\\\"M\\\"+_*w+\\\",0h\\\"+_*p.ticklen,transFn:function(t){var e=d(t);return g(e)+F(-L(e))},crisp:!1}),u.drawGrid(n,p,{vals:b,layer:i[\\\"angular-grid\\\"],path:function(t){var e=d(t),r=Math.cos(e),n=Math.sin(e);return\\\"M\\\"+[c+l*r,h-l*n]+\\\"L\\\"+[c+a*r,h-a*n]},transFn:o.noop,crisp:!1}),u.drawLabels(n,p,{vals:b,layer:i[\\\"angular-axis\\\"],repositionOnUpdate:!0,transFn:function(t){return g(d(t))},labelFns:m})}D(i[\\\"angular-line\\\"].select(\\\"path\\\"),f.showline,{d:r.pathSubplot(),transform:R(c,h)}).attr(\\\"stroke-width\\\",f.linewidth).call(s.stroke,f.linecolor)},O.updateFx=function(t,e){this.gd._context.staticPlot||(this.updateAngularDrag(t),this.updateRadialDrag(t,e,0),this.updateRadialDrag(t,e,1),this.updateMainDrag(t))},O.updateMainDrag=function(t){var e=this,r=e.gd,o=e.layers,s=t._zoomlayer,l=A.MINZOOM,c=A.OFFEDGE,u=e.radius,h=e.innerRadius,f=e.cx,p=e.cy,m=e.cxx,_=e.cyy,w=e.sectorInRad,k=e.vangles,T=e.radialAxis,S=M.clampTiny,E=M.findXYatLength,C=M.findEnclosingVertexAngles,L=A.cornerHalfWidth,P=A.cornerLen/2,O=d.makeDragger(o,\\\"path\\\",\\\"maindrag\\\",\\\"crosshair\\\");n.select(O).attr(\\\"d\\\",e.pathSubplot()).attr(\\\"transform\\\",R(f,p));var z,I,D,F,B,N,j,U,V,q={element:O,gd:r,subplot:e.id,plotinfo:{id:e.id,xaxis:e.xaxis,yaxis:e.yaxis},xaxes:[e.xaxis],yaxes:[e.yaxis]};function H(t,e){return Math.sqrt(t*t+e*e)}function G(t,e){return H(t-m,e-_)}function Y(t,e){return Math.atan2(_-e,t-m)}function W(t,e){return[t*Math.cos(e),t*Math.sin(-e)]}function X(t,r){if(0===t)return e.pathSector(2*L);var n=P/t,i=r-n,a=r+n,o=Math.max(0,Math.min(t,u)),s=o-L,l=o+L;return\\\"M\\\"+W(s,i)+\\\"A\\\"+[s,s]+\\\" 0,0,0 \\\"+W(s,a)+\\\"L\\\"+W(l,a)+\\\"A\\\"+[l,l]+\\\" 0,0,1 \\\"+W(l,i)+\\\"Z\\\"}function Z(t,r,n){if(0===t)return e.pathSector(2*L);var i,a,o=W(t,r),s=W(t,n),l=S((o[0]+s[0])/2),c=S((o[1]+s[1])/2);if(l&&c){var u=c/l,h=-1/u,f=E(L,u,l,c);i=E(P,h,f[0][0],f[0][1]),a=E(P,h,f[1][0],f[1][1])}else{var p,d;c?(p=P,d=L):(p=L,d=P),i=[[l-p,c-d],[l+p,c-d]],a=[[l-p,c+d],[l+p,c+d]]}return\\\"M\\\"+i.join(\\\"L\\\")+\\\"L\\\"+a.reverse().join(\\\"L\\\")+\\\"Z\\\"}function J(t,e){return e=Math.max(Math.min(e,u),h),t<c?t=0:u-t<c?t=u:e<c?e=0:u-e<c&&(e=u),Math.abs(e-t)>l?(t<e?(D=t,F=e):(D=e,F=t),!0):(D=null,F=null,!1)}function K(t,e){t=t||B,e=e||\\\"M0,0Z\\\",U.attr(\\\"d\\\",t),V.attr(\\\"d\\\",e),d.transitionZoombox(U,V,N,j),N=!0;var n={};rt(n),r.emit(\\\"plotly_relayouting\\\",n)}function $(t,r){var n,i,a=z+t,o=I+r,s=G(z,I),l=Math.min(G(a,o),u),c=Y(z,I);J(s,l)&&(n=B+e.pathSector(F),D&&(n+=e.pathSector(D)),i=X(D,c)+X(F,c)),K(n,i)}function Q(t,e,r,n){var i=M.findIntersectionXY(r,n,r,[t-m,_-e]);return H(i[0],i[1])}function tt(t,r){var n,i,a=z+t,o=I+r,s=Y(z,I),l=Y(a,o),c=C(s,k),h=C(l,k);J(Q(z,I,c[0],c[1]),Math.min(Q(a,o,h[0],h[1]),u))&&(n=B+e.pathSector(F),D&&(n+=e.pathSector(D)),i=[Z(D,c[0],c[1]),Z(F,c[0],c[1])].join(\\\" \\\")),K(n,i)}function et(){if(d.removeZoombox(r),null!==D&&null!==F){var t={};rt(t),d.showDoubleClickNotifier(r),a.call(\\\"_guiRelayout\\\",r,t)}}function rt(t){var r=T._rl,n=(r[1]-r[0])/(1-h/u)/u,i=[r[0]+(D-h)*n,r[0]+(F-h)*n];t[e.id+\\\".radialaxis.range\\\"]=i}function nt(t,n){var i=r._fullLayout.clickmode;if(d.removeZoombox(r),2===t){var o={};for(var s in e.viewInitial)o[e.id+\\\".\\\"+s]=e.viewInitial[s];r.emit(\\\"plotly_doubleclick\\\",null),a.call(\\\"_guiRelayout\\\",r,o)}i.indexOf(\\\"select\\\")>-1&&1===t&&x(n,r,[e.xaxis],[e.yaxis],e.id,q),i.indexOf(\\\"event\\\")>-1&&v.click(r,n,e.id)}q.prepFn=function(t,n,a){var o=r._fullLayout.dragmode,l=O.getBoundingClientRect();if(z=n-l.left,I=a-l.top,k){var c=M.findPolygonOffset(u,w[0],w[1],k);z+=m+c[0],I+=_+c[1]}switch(o){case\\\"zoom\\\":q.moveFn=k?tt:$,q.clickFn=nt,q.doneFn=et,function(){D=null,F=null,B=e.pathSubplot(),N=!1;var t=r._fullLayout[e.id];j=i(t.bgcolor).getLuminance(),(U=d.makeZoombox(s,j,f,p,B)).attr(\\\"fill-rule\\\",\\\"evenodd\\\"),V=d.makeCorners(s,f,p),b(r)}();break;case\\\"select\\\":case\\\"lasso\\\":y(t,n,a,q,o)}},O.onmousemove=function(t){v.hover(r,t,e.id),r._fullLayout._lasthover=O,r._fullLayout._hoversubplot=e.id},O.onmouseout=function(t){r._dragging||g.unhover(r,t)},g.init(q)},O.updateRadialDrag=function(t,e,r){var i=this,s=i.gd,l=i.layers,c=i.radius,u=i.innerRadius,h=i.cx,f=i.cy,p=i.radialAxis,v=A.radialDragBoxSize,m=v/2;if(p.visible){var y,x,_,T=C(i.radialAxisAngle),M=p._rl,S=M[0],E=M[1],P=M[r],O=.75*(M[1]-M[0])/(1-e.hole)/c;r?(y=h+(c+m)*Math.cos(T),x=f-(c+m)*Math.sin(T),_=\\\"radialdrag\\\"):(y=h+(u-m)*Math.cos(T),x=f-(u-m)*Math.sin(T),_=\\\"radialdrag-inner\\\");var z,B,N,j=d.makeRectDragger(l,_,\\\"crosshair\\\",-m,-m,v,v),U={element:j,gd:s};D(n.select(j),p.visible&&u<c,{transform:R(y,x)}),U.prepFn=function(){z=null,B=null,N=null,U.moveFn=V,U.doneFn=q,b(s)},U.clampFn=function(t,e){return Math.sqrt(t*t+e*e)<A.MINDRAG&&(t=0,e=0),[t,e]},g.init(U)}function V(t,e){if(z)z(t,e);else{var n=[t,-e],a=[Math.cos(T),Math.sin(T)],l=Math.abs(o.dot(n,a)/Math.sqrt(o.dot(n,n)));isNaN(l)||(z=l<.5?H:G)}var c={};!function(t){null!==B?t[i.id+\\\".radialaxis.angle\\\"]=B:null!==N&&(t[i.id+\\\".radialaxis.range[\\\"+r+\\\"]\\\"]=N)}(c),s.emit(\\\"plotly_relayouting\\\",c)}function q(){null!==B?a.call(\\\"_guiRelayout\\\",s,i.id+\\\".radialaxis.angle\\\",B):null!==N&&a.call(\\\"_guiRelayout\\\",s,i.id+\\\".radialaxis.range[\\\"+r+\\\"]\\\",N)}function H(t,e){if(0!==r){var n=y+t,a=x+e;B=Math.atan2(f-a,n-h),i.vangles&&(B=I(B,i.vangles)),B=L(B);var o=R(h,f)+F(-B);l[\\\"radial-axis\\\"].attr(\\\"transform\\\",o),l[\\\"radial-line\\\"].select(\\\"line\\\").attr(\\\"transform\\\",o);var s=i.gd._fullLayout,c=s[i.id];i.updateRadialAxisTitle(s,c,B)}}function G(t,e){var n=o.dot([t,-e],[Math.cos(T),Math.sin(T)]);if(N=P-O*n,O>0==(r?N>S:N<E)){var l=s._fullLayout,c=l[i.id];p.range[r]=N,p._rl[r]=N,i.updateRadialAxis(l,c),i.xaxis.setRange(),i.xaxis.setScale(),i.yaxis.setRange(),i.yaxis.setScale();var u=!1;for(var h in i.traceHash){var f=i.traceHash[h],d=o.filterVisible(f);f[0][0].trace._module.plot(s,i,d,c),a.traceIs(h,\\\"gl\\\")&&d.length&&(u=!0)}u&&(w(s),k(s))}else N=null}},O.updateAngularDrag=function(t){var e=this,r=e.gd,i=e.layers,s=e.radius,c=e.angularAxis,u=e.cx,h=e.cy,f=e.cxx,p=e.cyy,v=A.angularDragBoxSize,m=d.makeDragger(i,\\\"path\\\",\\\"angulardrag\\\",\\\"move\\\"),y={element:m,gd:r};function x(t,e){return Math.atan2(p+v-e,t-f-v)}n.select(m).attr(\\\"d\\\",e.pathAnnulus(s,s+v)).attr(\\\"transform\\\",R(u,h)).call(_,\\\"move\\\");var T,M,S,E,C,P,O=i.frontplot.select(\\\".scatterlayer\\\").selectAll(\\\".trace\\\"),z=O.selectAll(\\\".point\\\"),I=O.selectAll(\\\".textpoint\\\");function D(t,s){var d=e.gd._fullLayout,g=d[e.id],v=x(T+t,M+s),m=L(v-P);if(E=S+m,i.frontplot.attr(\\\"transform\\\",R(e.xOffset2,e.yOffset2)+F([-m,f,p])),e.vangles){C=e.radialAxisAngle+m;var y=R(u,h)+F(-m),b=R(u,h)+F(-C);i.bg.attr(\\\"transform\\\",y),i[\\\"radial-grid\\\"].attr(\\\"transform\\\",y),i[\\\"radial-axis\\\"].attr(\\\"transform\\\",b),i[\\\"radial-line\\\"].select(\\\"line\\\").attr(\\\"transform\\\",b),e.updateRadialAxisTitle(d,g,C)}else e.clipPaths.forTraces.select(\\\"path\\\").attr(\\\"transform\\\",R(f,p)+F(m));z.each(function(){var t=n.select(this),e=l.getTranslate(t);t.attr(\\\"transform\\\",R(e.x,e.y)+F([m]))}),I.each(function(){var t=n.select(this),e=t.select(\\\"text\\\"),r=l.getTranslate(t);t.attr(\\\"transform\\\",F([m,e.attr(\\\"x\\\"),e.attr(\\\"y\\\")])+R(r.x,r.y))}),c.rotation=o.modHalf(E,360),e.updateAngularAxis(d,g),e._hasClipOnAxisFalse&&!o.isFullCircle(e.sectorInRad)&&O.call(l.hideOutsideRangePoints,e);var _=!1;for(var A in e.traceHash)if(a.traceIs(A,\\\"gl\\\")){var D=e.traceHash[A],N=o.filterVisible(D);D[0][0].trace._module.plot(r,e,N,g),N.length&&(_=!0)}_&&(w(r),k(r));var j={};B(j),r.emit(\\\"plotly_relayouting\\\",j)}function B(t){t[e.id+\\\".angularaxis.rotation\\\"]=E,e.vangles&&(t[e.id+\\\".radialaxis.angle\\\"]=C)}function N(){I.select(\\\"text\\\").attr(\\\"transform\\\",null);var t={};B(t),a.call(\\\"_guiRelayout\\\",r,t)}y.prepFn=function(n,i,a){var o=t[e.id];S=o.angularaxis.rotation;var s=m.getBoundingClientRect();T=i-s.left,M=a-s.top,P=x(T,M),y.moveFn=D,y.doneFn=N,b(r)},e.vangles&&!o.isFullCircle(e.sectorInRad)&&(y.prepFn=o.noop,_(n.select(m),null)),g.init(y)},O.isPtInside=function(t){var e=this.sectorInRad,r=this.vangles,n=this.angularAxis.c2g(t.theta),i=this.radialAxis,a=i.c2l(t.r),s=i._rl;return(r?M.isPtInsidePolygon:o.isPtInsideSector)(a,n,s,e,r)},O.pathArc=function(t){var e=this.sectorInRad,r=this.vangles;return(r?M.pathPolygon:o.pathArc)(t,e[0],e[1],r)},O.pathSector=function(t){var e=this.sectorInRad,r=this.vangles;return(r?M.pathPolygon:o.pathSector)(t,e[0],e[1],r)},O.pathAnnulus=function(t,e){var r=this.sectorInRad,n=this.vangles;return(n?M.pathPolygonAnnulus:o.pathAnnulus)(t,e,r[0],r[1],n)},O.pathSubplot=function(){var t=this.innerRadius,e=this.radius;return t?this.pathAnnulus(t,e):this.pathSector(e)},O.fillViewInitialKey=function(t,e){t in this.viewInitial||(this.viewInitial[t]=e)}},{\\\"../../components/color\\\":593,\\\"../../components/dragelement\\\":611,\\\"../../components/drawing\\\":614,\\\"../../components/fx\\\":632,\\\"../../components/titles\\\":681,\\\"../../constants/alignment\\\":688,\\\"../../lib\\\":719,\\\"../../lib/clear_gl_canvases\\\":704,\\\"../../lib/setcursor\\\":739,\\\"../../plot_api/subroutines\\\":758,\\\"../../plots/cartesian/axes\\\":767,\\\"../../registry\\\":847,\\\"../cartesian/autorange\\\":766,\\\"../cartesian/dragbox\\\":775,\\\"../cartesian/select\\\":784,\\\"../cartesian/set_convert\\\":785,\\\"../plots\\\":828,\\\"./constants\\\":829,\\\"./helpers\\\":830,\\\"./set_convert\\\":841,d3:163,tinycolor2:537}],841:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../cartesian/set_convert\\\"),a=n.deg2rad,o=n.rad2deg;e.exports=function(t,e,r){switch(i(t,r),t._id){case\\\"x\\\":case\\\"radialaxis\\\":!function(t,e){var r=e._subplot;t.setGeometry=function(){var e=t._rl[0],n=t._rl[1],i=r.innerRadius,a=(r.radius-i)/(n-e),o=i/a,s=e>n?function(t){return t<=0}:function(t){return t>=0};t.c2g=function(r){var n=t.c2l(r)-e;return(s(n)?n:0)+o},t.g2c=function(r){return t.l2c(r+e-o)},t.g2p=function(t){return t*a},t.c2p=function(e){return t.g2p(t.c2g(e))}}}(t,e);break;case\\\"angularaxis\\\":!function(t,e){var r=t.type;if(\\\"linear\\\"===r){var i=t.d2c,s=t.c2d;t.d2c=function(t,e){return function(t,e){return\\\"degrees\\\"===e?a(t):t}(i(t),e)},t.c2d=function(t,e){return s(function(t,e){return\\\"degrees\\\"===e?o(t):t}(t,e))}}t.makeCalcdata=function(e,i){var a,o,s=e[i],l=e._length,c=function(r){return t.d2c(r,e.thetaunit)};if(s){if(n.isTypedArray(s)&&\\\"linear\\\"===r){if(l===s.length)return s;if(s.subarray)return s.subarray(0,l)}for(a=new Array(l),o=0;o<l;o++)a[o]=c(s[o])}else{var u=i+\\\"0\\\",h=\\\"d\\\"+i,f=u in e?c(e[u]):0,p=e[h]?c(e[h]):(t.period||2*Math.PI)/l;for(a=new Array(l),o=0;o<l;o++)a[o]=f+o*p}return a},t.setGeometry=function(){var i,s,l,c,u=e.sector,h=u.map(a),f={clockwise:-1,counterclockwise:1}[t.direction],p=a(t.rotation),d=function(t){return f*t+p},g=function(t){return(t-p)/f};switch(r){case\\\"linear\\\":s=i=n.identity,c=a,l=o,t.range=n.isFullCircle(h)?[u[0],u[0]+360]:h.map(g).map(o);break;case\\\"category\\\":var v=t._categories.length,m=t.period?Math.max(t.period,v):v;0===m&&(m=1),s=c=function(t){return 2*t*Math.PI/m},i=l=function(t){return t*m/Math.PI/2},t.range=[0,m]}t.c2g=function(t){return d(s(t))},t.g2c=function(t){return i(g(t))},t.t2g=function(t){return d(c(t))},t.g2t=function(t){return l(g(t))}}}(t,e)}}},{\\\"../../lib\\\":719,\\\"../cartesian/set_convert\\\":785}],842:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../lib\\\"),i=t(\\\"../plot_api/plot_template\\\"),a=t(\\\"./domain\\\").defaults;e.exports=function(t,e,r,o){var s,l,c=o.type,u=o.attributes,h=o.handleDefaults,f=o.partition||\\\"x\\\",p=e._subplots[c],d=p.length,g=d&&p[0].replace(/\\\\d+$/,\\\"\\\");function v(t,e){return n.coerce(s,l,u,t,e)}for(var m=0;m<d;m++){var y=p[m];s=t[y]?t[y]:t[y]={},l=i.newContainer(e,y,g),v(\\\"uirevision\\\",e.uirevision);var x={};x[f]=[m/d,(m+1)/d],a(l,e,v,x),o.id=y,h(s,l,v,o)}}},{\\\"../lib\\\":719,\\\"../plot_api/plot_template\\\":757,\\\"./domain\\\":792}],843:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./ternary\\\"),i=t(\\\"../../plots/get_data\\\").getSubplotCalcData,a=t(\\\"../../lib\\\").counterRegex;r.name=\\\"ternary\\\";var o=r.attr=\\\"subplot\\\";r.idRoot=\\\"ternary\\\",r.idRegex=r.attrRegex=a(\\\"ternary\\\"),(r.attributes={})[o]={valType:\\\"subplotid\\\",dflt:\\\"ternary\\\",editType:\\\"calc\\\"},r.layoutAttributes=t(\\\"./layout_attributes\\\"),r.supplyLayoutDefaults=t(\\\"./layout_defaults\\\"),r.plot=function(t){for(var e=t._fullLayout,r=t.calcdata,a=e._subplots.ternary,o=0;o<a.length;o++){var s=a[o],l=i(r,\\\"ternary\\\",s),c=e[s]._subplot;c||(c=new n({id:s,graphDiv:t,container:e._ternarylayer.node()},e),e[s]._subplot=c),c.plot(l,e,t._promises)}},r.clean=function(t,e,r,n){for(var i=n._subplots.ternary||[],a=0;a<i.length;a++){var o=i[a],s=n[o]._subplot;!e[o]&&s&&(s.plotContainer.remove(),s.clipDef.remove(),s.clipDefRelative.remove(),s.layers[\\\"a-title\\\"].remove(),s.layers[\\\"b-title\\\"].remove(),s.layers[\\\"c-title\\\"].remove())}}},{\\\"../../lib\\\":719,\\\"../../plots/get_data\\\":802,\\\"./layout_attributes\\\":844,\\\"./layout_defaults\\\":845,\\\"./ternary\\\":846}],844:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/color/attributes\\\"),i=t(\\\"../domain\\\").attributes,a=t(\\\"../cartesian/layout_attributes\\\"),o=t(\\\"../../plot_api/edit_types\\\").overrideAll,s=t(\\\"../../lib/extend\\\").extendFlat,l={title:a.title,color:a.color,tickmode:a.tickmode,nticks:s({},a.nticks,{dflt:6,min:1}),tick0:a.tick0,dtick:a.dtick,tickvals:a.tickvals,ticktext:a.ticktext,ticks:a.ticks,ticklen:a.ticklen,tickwidth:a.tickwidth,tickcolor:a.tickcolor,showticklabels:a.showticklabels,showtickprefix:a.showtickprefix,tickprefix:a.tickprefix,showticksuffix:a.showticksuffix,ticksuffix:a.ticksuffix,showexponent:a.showexponent,exponentformat:a.exponentformat,separatethousands:a.separatethousands,tickfont:a.tickfont,tickangle:a.tickangle,tickformat:a.tickformat,tickformatstops:a.tickformatstops,hoverformat:a.hoverformat,showline:s({},a.showline,{dflt:!0}),linecolor:a.linecolor,linewidth:a.linewidth,showgrid:s({},a.showgrid,{dflt:!0}),gridcolor:a.gridcolor,gridwidth:a.gridwidth,layer:a.layer,min:{valType:\\\"number\\\",dflt:0,min:0},_deprecated:{title:a._deprecated.title,titlefont:a._deprecated.titlefont}},c=e.exports=o({domain:i({name:\\\"ternary\\\"}),bgcolor:{valType:\\\"color\\\",dflt:n.background},sum:{valType:\\\"number\\\",dflt:1,min:0},aaxis:l,baxis:l,caxis:l},\\\"plot\\\",\\\"from-root\\\");c.uirevision={valType:\\\"any\\\",editType:\\\"none\\\"},c.aaxis.uirevision=c.baxis.uirevision=c.caxis.uirevision={valType:\\\"any\\\",editType:\\\"none\\\"}},{\\\"../../components/color/attributes\\\":592,\\\"../../lib/extend\\\":710,\\\"../../plot_api/edit_types\\\":750,\\\"../cartesian/layout_attributes\\\":779,\\\"../domain\\\":792}],845:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/color\\\"),i=t(\\\"../../plot_api/plot_template\\\"),a=t(\\\"../../lib\\\"),o=t(\\\"../subplot_defaults\\\"),s=t(\\\"../cartesian/tick_label_defaults\\\"),l=t(\\\"../cartesian/tick_mark_defaults\\\"),c=t(\\\"../cartesian/tick_value_defaults\\\"),u=t(\\\"../cartesian/line_grid_defaults\\\"),h=t(\\\"./layout_attributes\\\"),f=[\\\"aaxis\\\",\\\"baxis\\\",\\\"caxis\\\"];function p(t,e,r,a){var o,s,l,c=r(\\\"bgcolor\\\"),u=r(\\\"sum\\\");a.bgColor=n.combine(c,a.paper_bgcolor);for(var h=0;h<f.length;h++)s=t[o=f[h]]||{},(l=i.newContainer(e,o))._name=o,d(s,l,a,e);var p=e.aaxis,g=e.baxis,v=e.caxis;p.min+g.min+v.min>=u&&(p.min=0,g.min=0,v.min=0,t.aaxis&&delete t.aaxis.min,t.baxis&&delete t.baxis.min,t.caxis&&delete t.caxis.min)}function d(t,e,r,n){var i=h[e._name];function o(r,n){return a.coerce(t,e,i,r,n)}o(\\\"uirevision\\\",n.uirevision),e.type=\\\"linear\\\";var f=o(\\\"color\\\"),p=f!==i.color.dflt?f:r.font.color,d=e._name.charAt(0).toUpperCase(),g=\\\"Component \\\"+d,v=o(\\\"title.text\\\",g);e._hovertitle=v===g?v:d,a.coerceFont(o,\\\"title.font\\\",{family:r.font.family,size:Math.round(1.2*r.font.size),color:p}),o(\\\"min\\\"),c(t,e,o,\\\"linear\\\"),s(t,e,o,\\\"linear\\\",{}),l(t,e,o,{outerTicks:!0}),o(\\\"showticklabels\\\")&&(a.coerceFont(o,\\\"tickfont\\\",{family:r.font.family,size:r.font.size,color:p}),o(\\\"tickangle\\\"),o(\\\"tickformat\\\")),u(t,e,o,{dfltColor:f,bgColor:r.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:i}),o(\\\"hoverformat\\\"),o(\\\"layer\\\")}e.exports=function(t,e,r){o(t,e,r,{type:\\\"ternary\\\",attributes:h,handleDefaults:p,font:e.font,paper_bgcolor:e.paper_bgcolor})}},{\\\"../../components/color\\\":593,\\\"../../lib\\\":719,\\\"../../plot_api/plot_template\\\":757,\\\"../cartesian/line_grid_defaults\\\":781,\\\"../cartesian/tick_label_defaults\\\":786,\\\"../cartesian/tick_mark_defaults\\\":787,\\\"../cartesian/tick_value_defaults\\\":788,\\\"../subplot_defaults\\\":842,\\\"./layout_attributes\\\":844}],846:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"tinycolor2\\\"),a=t(\\\"../../registry\\\"),o=t(\\\"../../lib\\\"),s=o._,l=t(\\\"../../components/color\\\"),c=t(\\\"../../components/drawing\\\"),u=t(\\\"../cartesian/set_convert\\\"),h=t(\\\"../../lib/extend\\\").extendFlat,f=t(\\\"../plots\\\"),p=t(\\\"../cartesian/axes\\\"),d=t(\\\"../../components/dragelement\\\"),g=t(\\\"../../components/fx\\\"),v=t(\\\"../../components/titles\\\"),m=t(\\\"../cartesian/select\\\").prepSelect,y=t(\\\"../cartesian/select\\\").selectOnClick,x=t(\\\"../cartesian/select\\\").clearSelect,b=t(\\\"../cartesian/constants\\\");function _(t,e){this.id=t.id,this.graphDiv=t.graphDiv,this.init(e),this.makeFramework(e),this.aTickLayout=null,this.bTickLayout=null,this.cTickLayout=null}e.exports=_;var w=_.prototype;w.init=function(t){this.container=t._ternarylayer,this.defs=t._defs,this.layoutId=t._uid,this.traceHash={},this.layers={}},w.plot=function(t,e){var r=e[this.id],n=e._size;this._hasClipOnAxisFalse=!1;for(var i=0;i<t.length;i++){if(!1===t[i][0].trace.cliponaxis){this._hasClipOnAxisFalse=!0;break}}this.updateLayers(r),this.adjustLayout(r,n),f.generalUpdatePerTraceModule(this.graphDiv,this,t,r),this.layers.plotbg.select(\\\"path\\\").call(l.fill,r.bgcolor)},w.makeFramework=function(t){var e=this.graphDiv,r=t[this.id],n=this.clipId=\\\"clip\\\"+this.layoutId+this.id,i=this.clipIdRelative=\\\"clip-relative\\\"+this.layoutId+this.id;this.clipDef=o.ensureSingleById(t._clips,\\\"clipPath\\\",n,function(t){t.append(\\\"path\\\").attr(\\\"d\\\",\\\"M0,0Z\\\")}),this.clipDefRelative=o.ensureSingleById(t._clips,\\\"clipPath\\\",i,function(t){t.append(\\\"path\\\").attr(\\\"d\\\",\\\"M0,0Z\\\")}),this.plotContainer=o.ensureSingle(this.container,\\\"g\\\",this.id),this.updateLayers(r),c.setClipUrl(this.layers.backplot,n,e),c.setClipUrl(this.layers.grids,n,e)},w.updateLayers=function(t){var e=this.layers,r=[\\\"draglayer\\\",\\\"plotbg\\\",\\\"backplot\\\",\\\"grids\\\"];\\\"below traces\\\"===t.aaxis.layer&&r.push(\\\"aaxis\\\",\\\"aline\\\"),\\\"below traces\\\"===t.baxis.layer&&r.push(\\\"baxis\\\",\\\"bline\\\"),\\\"below traces\\\"===t.caxis.layer&&r.push(\\\"caxis\\\",\\\"cline\\\"),r.push(\\\"frontplot\\\"),\\\"above traces\\\"===t.aaxis.layer&&r.push(\\\"aaxis\\\",\\\"aline\\\"),\\\"above traces\\\"===t.baxis.layer&&r.push(\\\"baxis\\\",\\\"bline\\\"),\\\"above traces\\\"===t.caxis.layer&&r.push(\\\"caxis\\\",\\\"cline\\\");var i=this.plotContainer.selectAll(\\\"g.toplevel\\\").data(r,String),a=[\\\"agrid\\\",\\\"bgrid\\\",\\\"cgrid\\\"];i.enter().append(\\\"g\\\").attr(\\\"class\\\",function(t){return\\\"toplevel \\\"+t}).each(function(t){var r=n.select(this);e[t]=r,\\\"frontplot\\\"===t?r.append(\\\"g\\\").classed(\\\"scatterlayer\\\",!0):\\\"backplot\\\"===t?r.append(\\\"g\\\").classed(\\\"maplayer\\\",!0):\\\"plotbg\\\"===t?r.append(\\\"path\\\").attr(\\\"d\\\",\\\"M0,0Z\\\"):\\\"aline\\\"===t||\\\"bline\\\"===t||\\\"cline\\\"===t?r.append(\\\"path\\\"):\\\"grids\\\"===t&&a.forEach(function(t){e[t]=r.append(\\\"g\\\").classed(\\\"grid \\\"+t,!0)})}),i.order()};var k=Math.sqrt(4/3);w.adjustLayout=function(t,e){var r,n,i,a,o,s,f=this,p=t.domain,d=(p.x[0]+p.x[1])/2,g=(p.y[0]+p.y[1])/2,v=p.x[1]-p.x[0],m=p.y[1]-p.y[0],y=v*e.w,x=m*e.h,b=t.sum,_=t.aaxis.min,w=t.baxis.min,T=t.caxis.min;y>k*x?i=(a=x)*k:a=(i=y)/k,o=v*i/y,s=m*a/x,r=e.l+e.w*d-i/2,n=e.t+e.h*(1-g)-a/2,f.x0=r,f.y0=n,f.w=i,f.h=a,f.sum=b,f.xaxis={type:\\\"linear\\\",range:[_+2*T-b,b-_-2*w],domain:[d-o/2,d+o/2],_id:\\\"x\\\"},u(f.xaxis,f.graphDiv._fullLayout),f.xaxis.setScale(),f.xaxis.isPtWithinRange=function(t){return t.a>=f.aaxis.range[0]&&t.a<=f.aaxis.range[1]&&t.b>=f.baxis.range[1]&&t.b<=f.baxis.range[0]&&t.c>=f.caxis.range[1]&&t.c<=f.caxis.range[0]},f.yaxis={type:\\\"linear\\\",range:[_,b-w-T],domain:[g-s/2,g+s/2],_id:\\\"y\\\"},u(f.yaxis,f.graphDiv._fullLayout),f.yaxis.setScale(),f.yaxis.isPtWithinRange=function(){return!0};var A=f.yaxis.domain[0],M=f.aaxis=h({},t.aaxis,{range:[_,b-w-T],side:\\\"left\\\",tickangle:(+t.aaxis.tickangle||0)-30,domain:[A,A+s*k],anchor:\\\"free\\\",position:0,_id:\\\"y\\\",_length:i});u(M,f.graphDiv._fullLayout),M.setScale();var S=f.baxis=h({},t.baxis,{range:[b-_-T,w],side:\\\"bottom\\\",domain:f.xaxis.domain,anchor:\\\"free\\\",position:0,_id:\\\"x\\\",_length:i});u(S,f.graphDiv._fullLayout),S.setScale();var E=f.caxis=h({},t.caxis,{range:[b-_-w,T],side:\\\"right\\\",tickangle:(+t.caxis.tickangle||0)+30,domain:[A,A+s*k],anchor:\\\"free\\\",position:0,_id:\\\"y\\\",_length:i});u(E,f.graphDiv._fullLayout),E.setScale();var C=\\\"M\\\"+r+\\\",\\\"+(n+a)+\\\"h\\\"+i+\\\"l-\\\"+i/2+\\\",-\\\"+a+\\\"Z\\\";f.clipDef.select(\\\"path\\\").attr(\\\"d\\\",C),f.layers.plotbg.select(\\\"path\\\").attr(\\\"d\\\",C);var L=\\\"M0,\\\"+a+\\\"h\\\"+i+\\\"l-\\\"+i/2+\\\",-\\\"+a+\\\"Z\\\";f.clipDefRelative.select(\\\"path\\\").attr(\\\"d\\\",L);var P=\\\"translate(\\\"+r+\\\",\\\"+n+\\\")\\\";f.plotContainer.selectAll(\\\".scatterlayer,.maplayer\\\").attr(\\\"transform\\\",P),f.clipDefRelative.select(\\\"path\\\").attr(\\\"transform\\\",null);var O=\\\"translate(\\\"+(r-S._offset)+\\\",\\\"+(n+a)+\\\")\\\";f.layers.baxis.attr(\\\"transform\\\",O),f.layers.bgrid.attr(\\\"transform\\\",O);var z=\\\"translate(\\\"+(r+i/2)+\\\",\\\"+n+\\\")rotate(30)translate(0,\\\"+-M._offset+\\\")\\\";f.layers.aaxis.attr(\\\"transform\\\",z),f.layers.agrid.attr(\\\"transform\\\",z);var I=\\\"translate(\\\"+(r+i/2)+\\\",\\\"+n+\\\")rotate(-30)translate(0,\\\"+-E._offset+\\\")\\\";f.layers.caxis.attr(\\\"transform\\\",I),f.layers.cgrid.attr(\\\"transform\\\",I),f.drawAxes(!0),f.layers.aline.select(\\\"path\\\").attr(\\\"d\\\",M.showline?\\\"M\\\"+r+\\\",\\\"+(n+a)+\\\"l\\\"+i/2+\\\",-\\\"+a:\\\"M0,0\\\").call(l.stroke,M.linecolor||\\\"#000\\\").style(\\\"stroke-width\\\",(M.linewidth||0)+\\\"px\\\"),f.layers.bline.select(\\\"path\\\").attr(\\\"d\\\",S.showline?\\\"M\\\"+r+\\\",\\\"+(n+a)+\\\"h\\\"+i:\\\"M0,0\\\").call(l.stroke,S.linecolor||\\\"#000\\\").style(\\\"stroke-width\\\",(S.linewidth||0)+\\\"px\\\"),f.layers.cline.select(\\\"path\\\").attr(\\\"d\\\",E.showline?\\\"M\\\"+(r+i/2)+\\\",\\\"+n+\\\"l\\\"+i/2+\\\",\\\"+a:\\\"M0,0\\\").call(l.stroke,E.linecolor||\\\"#000\\\").style(\\\"stroke-width\\\",(E.linewidth||0)+\\\"px\\\"),f.graphDiv._context.staticPlot||f.initInteractions(),c.setClipUrl(f.layers.frontplot,f._hasClipOnAxisFalse?null:f.clipId,f.graphDiv)},w.drawAxes=function(t){var e=this.graphDiv,r=this.id.substr(7)+\\\"title\\\",n=this.layers,i=this.aaxis,a=this.baxis,o=this.caxis;if(this.drawAx(i),this.drawAx(a),this.drawAx(o),t){var l=Math.max(i.showticklabels?i.tickfont.size/2:0,(o.showticklabels?.75*o.tickfont.size:0)+(\\\"outside\\\"===o.ticks?.87*o.ticklen:0)),c=(a.showticklabels?a.tickfont.size:0)+(\\\"outside\\\"===a.ticks?a.ticklen:0)+3;n[\\\"a-title\\\"]=v.draw(e,\\\"a\\\"+r,{propContainer:i,propName:this.id+\\\".aaxis.title\\\",placeholder:s(e,\\\"Click to enter Component A title\\\"),attributes:{x:this.x0+this.w/2,y:this.y0-i.title.font.size/3-l,\\\"text-anchor\\\":\\\"middle\\\"}}),n[\\\"b-title\\\"]=v.draw(e,\\\"b\\\"+r,{propContainer:a,propName:this.id+\\\".baxis.title\\\",placeholder:s(e,\\\"Click to enter Component B title\\\"),attributes:{x:this.x0-c,y:this.y0+this.h+.83*a.title.font.size+c,\\\"text-anchor\\\":\\\"middle\\\"}}),n[\\\"c-title\\\"]=v.draw(e,\\\"c\\\"+r,{propContainer:o,propName:this.id+\\\".caxis.title\\\",placeholder:s(e,\\\"Click to enter Component C title\\\"),attributes:{x:this.x0+this.w+c,y:this.y0+this.h+.83*o.title.font.size+c,\\\"text-anchor\\\":\\\"middle\\\"}})}},w.drawAx=function(t){var e,r=this.graphDiv,n=t._name,i=n.charAt(0),a=t._id,s=this.layers[n],l=i+\\\"tickLayout\\\",c=(e=t).ticks+String(e.ticklen)+String(e.showticklabels);this[l]!==c&&(s.selectAll(\\\".\\\"+a+\\\"tick\\\").remove(),this[l]=c),t.setScale();var u=p.calcTicks(t),h=p.clipEnds(t,u),f=p.makeTransFn(t),d=p.getTickSigns(t)[2],g=o.deg2rad(30),v=d*(t.linewidth||1)/2,m=d*t.ticklen,y=this.w,x=this.h,b=\\\"b\\\"===i?\\\"M0,\\\"+v+\\\"l\\\"+Math.sin(g)*m+\\\",\\\"+Math.cos(g)*m:\\\"M\\\"+v+\\\",0l\\\"+Math.cos(g)*m+\\\",\\\"+-Math.sin(g)*m,_={a:\\\"M0,0l\\\"+x+\\\",-\\\"+y/2,b:\\\"M0,0l-\\\"+y/2+\\\",-\\\"+x,c:\\\"M0,0l-\\\"+x+\\\",\\\"+y/2}[i];p.drawTicks(r,t,{vals:\\\"inside\\\"===t.ticks?h:u,layer:s,path:b,transFn:f,crisp:!1}),p.drawGrid(r,t,{vals:h,layer:this.layers[i+\\\"grid\\\"],path:_,transFn:f,crisp:!1}),p.drawLabels(r,t,{vals:u,layer:s,transFn:f,labelFns:p.makeLabelFns(t,0,30)})};var T=b.MINZOOM/2+.87,A=\\\"m-0.87,.5h\\\"+T+\\\"v3h-\\\"+(T+5.2)+\\\"l\\\"+(T/2+2.6)+\\\",-\\\"+(.87*T+4.5)+\\\"l2.6,1.5l-\\\"+T/2+\\\",\\\"+.87*T+\\\"Z\\\",M=\\\"m0.87,.5h-\\\"+T+\\\"v3h\\\"+(T+5.2)+\\\"l-\\\"+(T/2+2.6)+\\\",-\\\"+(.87*T+4.5)+\\\"l-2.6,1.5l\\\"+T/2+\\\",\\\"+.87*T+\\\"Z\\\",S=\\\"m0,1l\\\"+T/2+\\\",\\\"+.87*T+\\\"l2.6,-1.5l-\\\"+(T/2+2.6)+\\\",-\\\"+(.87*T+4.5)+\\\"l-\\\"+(T/2+2.6)+\\\",\\\"+(.87*T+4.5)+\\\"l2.6,1.5l\\\"+T/2+\\\",-\\\"+.87*T+\\\"Z\\\",E=\\\"m0.5,0.5h5v-2h-5v-5h-2v5h-5v2h5v5h2Z\\\",C=!0;function L(t){n.select(t).selectAll(\\\".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners\\\").remove()}w.initInteractions=function(){var t,e,r,n,u,h,f,p,v,_,w=this,T=w.layers.plotbg.select(\\\"path\\\").node(),P=w.graphDiv,O=P._fullLayout._zoomlayer,z={element:T,gd:P,plotinfo:{id:w.id,xaxis:w.xaxis,yaxis:w.yaxis},subplot:w.id,prepFn:function(a,o,s){z.xaxes=[w.xaxis],z.yaxes=[w.yaxis];var c=P._fullLayout.dragmode;z.minDrag=\\\"lasso\\\"===c?1:void 0,\\\"zoom\\\"===c?(z.moveFn=N,z.clickFn=D,z.doneFn=j,function(a,o,s){var c=T.getBoundingClientRect();t=o-c.left,e=s-c.top,r={a:w.aaxis.range[0],b:w.baxis.range[1],c:w.caxis.range[1]},u=r,n=w.aaxis.range[1]-r.a,h=i(w.graphDiv._fullLayout[w.id].bgcolor).getLuminance(),f=\\\"M0,\\\"+w.h+\\\"L\\\"+w.w/2+\\\", 0L\\\"+w.w+\\\",\\\"+w.h+\\\"Z\\\",p=!1,v=O.append(\\\"path\\\").attr(\\\"class\\\",\\\"zoombox\\\").attr(\\\"transform\\\",\\\"translate(\\\"+w.x0+\\\", \\\"+w.y0+\\\")\\\").style({fill:h>.2?\\\"rgba(0,0,0,0)\\\":\\\"rgba(255,255,255,0)\\\",\\\"stroke-width\\\":0}).attr(\\\"d\\\",f),_=O.append(\\\"path\\\").attr(\\\"class\\\",\\\"zoombox-corners\\\").attr(\\\"transform\\\",\\\"translate(\\\"+w.x0+\\\", \\\"+w.y0+\\\")\\\").style({fill:l.background,stroke:l.defaultLine,\\\"stroke-width\\\":1,opacity:0}).attr(\\\"d\\\",\\\"M0,0Z\\\"),x(P)}(0,o,s)):\\\"pan\\\"===c?(z.moveFn=U,z.clickFn=D,z.doneFn=V,r={a:w.aaxis.range[0],b:w.baxis.range[1],c:w.caxis.range[1]},u=r,x(P)):\\\"select\\\"!==c&&\\\"lasso\\\"!==c||m(a,o,s,z,c)}};function I(t){var e={};return e[w.id+\\\".aaxis.min\\\"]=t.a,e[w.id+\\\".baxis.min\\\"]=t.b,e[w.id+\\\".caxis.min\\\"]=t.c,e}function D(t,e){var r=P._fullLayout.clickmode;L(P),2===t&&(P.emit(\\\"plotly_doubleclick\\\",null),a.call(\\\"_guiRelayout\\\",P,I({a:0,b:0,c:0}))),r.indexOf(\\\"select\\\")>-1&&1===t&&y(e,P,[w.xaxis],[w.yaxis],w.id,z),r.indexOf(\\\"event\\\")>-1&&g.click(P,e,w.id)}function R(t,e){return 1-e/w.h}function F(t,e){return 1-(t+(w.h-e)/Math.sqrt(3))/w.w}function B(t,e){return(t-(w.h-e)/Math.sqrt(3))/w.w}function N(i,a){var o=t+i,s=e+a,l=Math.max(0,Math.min(1,R(0,e),R(0,s))),c=Math.max(0,Math.min(1,F(t,e),F(o,s))),d=Math.max(0,Math.min(1,B(t,e),B(o,s))),g=(l/2+d)*w.w,m=(1-l/2-c)*w.w,y=(g+m)/2,x=m-g,T=(1-l)*w.h,C=T-x/k;x<b.MINZOOM?(u=r,v.attr(\\\"d\\\",f),_.attr(\\\"d\\\",\\\"M0,0Z\\\")):(u={a:r.a+l*n,b:r.b+c*n,c:r.c+d*n},v.attr(\\\"d\\\",f+\\\"M\\\"+g+\\\",\\\"+T+\\\"H\\\"+m+\\\"L\\\"+y+\\\",\\\"+C+\\\"L\\\"+g+\\\",\\\"+T+\\\"Z\\\"),_.attr(\\\"d\\\",\\\"M\\\"+t+\\\",\\\"+e+E+\\\"M\\\"+g+\\\",\\\"+T+A+\\\"M\\\"+m+\\\",\\\"+T+M+\\\"M\\\"+y+\\\",\\\"+C+S)),p||(v.transition().style(\\\"fill\\\",h>.2?\\\"rgba(0,0,0,0.4)\\\":\\\"rgba(255,255,255,0.3)\\\").duration(200),_.transition().style(\\\"opacity\\\",1).duration(200),p=!0),P.emit(\\\"plotly_relayouting\\\",I(u))}function j(){L(P),u!==r&&(a.call(\\\"_guiRelayout\\\",P,I(u)),C&&P.data&&P._context.showTips&&(o.notifier(s(P,\\\"Double-click to zoom back out\\\"),\\\"long\\\"),C=!1))}function U(t,e){var n=t/w.xaxis._m,i=e/w.yaxis._m,a=[(u={a:r.a-i,b:r.b+(n+i)/2,c:r.c-(n-i)/2}).a,u.b,u.c].sort(),o=a.indexOf(u.a),s=a.indexOf(u.b),l=a.indexOf(u.c);a[0]<0&&(a[1]+a[0]/2<0?(a[2]+=a[0]+a[1],a[0]=a[1]=0):(a[2]+=a[0]/2,a[1]+=a[0]/2,a[0]=0),u={a:a[o],b:a[s],c:a[l]},e=(r.a-u.a)*w.yaxis._m,t=(r.c-u.c-r.b+u.b)*w.xaxis._m);var h=\\\"translate(\\\"+(w.x0+t)+\\\",\\\"+(w.y0+e)+\\\")\\\";w.plotContainer.selectAll(\\\".scatterlayer,.maplayer\\\").attr(\\\"transform\\\",h);var f=\\\"translate(\\\"+-t+\\\",\\\"+-e+\\\")\\\";w.clipDefRelative.select(\\\"path\\\").attr(\\\"transform\\\",f),w.aaxis.range=[u.a,w.sum-u.b-u.c],w.baxis.range=[w.sum-u.a-u.c,u.b],w.caxis.range=[w.sum-u.a-u.b,u.c],w.drawAxes(!1),w._hasClipOnAxisFalse&&w.plotContainer.select(\\\".scatterlayer\\\").selectAll(\\\".trace\\\").call(c.hideOutsideRangePoints,w),P.emit(\\\"plotly_relayouting\\\",I(u))}function V(){a.call(\\\"_guiRelayout\\\",P,I(u))}T.onmousemove=function(t){g.hover(P,t,w.id),P._fullLayout._lasthover=T,P._fullLayout._hoversubplot=w.id},T.onmouseout=function(t){P._dragging||d.unhover(P,t)},d.init(z)}},{\\\"../../components/color\\\":593,\\\"../../components/dragelement\\\":611,\\\"../../components/drawing\\\":614,\\\"../../components/fx\\\":632,\\\"../../components/titles\\\":681,\\\"../../lib\\\":719,\\\"../../lib/extend\\\":710,\\\"../../registry\\\":847,\\\"../cartesian/axes\\\":767,\\\"../cartesian/constants\\\":773,\\\"../cartesian/select\\\":784,\\\"../cartesian/set_convert\\\":785,\\\"../plots\\\":828,d3:163,tinycolor2:537}],847:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./lib/loggers\\\"),i=t(\\\"./lib/noop\\\"),a=t(\\\"./lib/push_unique\\\"),o=t(\\\"./lib/is_plain_object\\\"),s=t(\\\"./lib/dom\\\").addStyleRule,l=t(\\\"./lib/extend\\\"),c=t(\\\"./plots/attributes\\\"),u=t(\\\"./plots/layout_attributes\\\"),h=l.extendFlat,f=l.extendDeepAll;function p(t){var e=t.name,i=t.categories,a=t.meta;if(r.modules[e])n.log(\\\"Type \\\"+e+\\\" already registered\\\");else{r.subplotsRegistry[t.basePlotModule.name]||function(t){var e=t.name;if(r.subplotsRegistry[e])return void n.log(\\\"Plot type \\\"+e+\\\" already registered.\\\");for(var i in m(t),r.subplotsRegistry[e]=t,r.componentsRegistry)b(i,t.name)}(t.basePlotModule);for(var o={},l=0;l<i.length;l++)o[i[l]]=!0,r.allCategories[i[l]]=!0;for(var c in r.modules[e]={_module:t,categories:o},a&&Object.keys(a).length&&(r.modules[e].meta=a),r.allTypes.push(e),r.componentsRegistry)y(c,e);t.layoutAttributes&&h(r.traceLayoutAttributes,t.layoutAttributes);var u=t.basePlotModule,f=u.name;if(\\\"mapbox\\\"===f){var p=u.constants.styleRules;for(var d in p)s(\\\".js-plotly-plot .plotly .mapboxgl-\\\"+d,p[d])}\\\"geo\\\"!==f&&\\\"mapbox\\\"!==f||void 0===typeof window||void 0!==window.PlotlyGeoAssets||(window.PlotlyGeoAssets={topojson:{}})}}function d(t){if(\\\"string\\\"!=typeof t.name)throw new Error(\\\"Component module *name* must be a string.\\\");var e=t.name;for(var n in r.componentsRegistry[e]=t,t.layoutAttributes&&(t.layoutAttributes._isLinkedToArray&&a(r.layoutArrayContainers,e),m(t)),r.modules)y(e,n);for(var i in r.subplotsRegistry)b(e,i);for(var o in r.transformsRegistry)x(e,o);t.schema&&t.schema.layout&&f(u,t.schema.layout)}function g(t){if(\\\"string\\\"!=typeof t.name)throw new Error(\\\"Transform module *name* must be a string.\\\");var e=\\\"Transform module \\\"+t.name,i=\\\"function\\\"==typeof t.transform,a=\\\"function\\\"==typeof t.calcTransform;if(!i&&!a)throw new Error(e+\\\" is missing a *transform* or *calcTransform* method.\\\");for(var s in i&&a&&n.log([e+\\\" has both a *transform* and *calcTransform* methods.\\\",\\\"Please note that all *transform* methods are executed\\\",\\\"before all *calcTransform* methods.\\\"].join(\\\" \\\")),o(t.attributes)||n.log(e+\\\" registered without an *attributes* object.\\\"),\\\"function\\\"!=typeof t.supplyDefaults&&n.log(e+\\\" registered without a *supplyDefaults* method.\\\"),r.transformsRegistry[t.name]=t,r.componentsRegistry)x(s,t.name)}function v(t){var e=t.name,n=e.split(\\\"-\\\")[0],i=t.dictionary,a=t.format,o=i&&Object.keys(i).length,s=a&&Object.keys(a).length,l=r.localeRegistry,c=l[e];if(c||(l[e]=c={}),n!==e){var u=l[n];u||(l[n]=u={}),o&&u.dictionary===c.dictionary&&(u.dictionary=i),s&&u.format===c.format&&(u.format=a)}o&&(c.dictionary=i),s&&(c.format=a)}function m(t){if(t.layoutAttributes){var e=t.layoutAttributes._arrayAttrRegexps;if(e)for(var n=0;n<e.length;n++)a(r.layoutArrayRegexes,e[n])}}function y(t,e){var n=r.componentsRegistry[t].schema;if(n&&n.traces){var i=n.traces[e];i&&f(r.modules[e]._module.attributes,i)}}function x(t,e){var n=r.componentsRegistry[t].schema;if(n&&n.transforms){var i=n.transforms[e];i&&f(r.transformsRegistry[e].attributes,i)}}function b(t,e){var n=r.componentsRegistry[t].schema;if(n&&n.subplots){var i=r.subplotsRegistry[e],a=i.layoutAttributes,o=\\\"subplot\\\"===i.attr?i.name:i.attr;Array.isArray(o)&&(o=o[0]);var s=n.subplots[o];a&&s&&f(a,s)}}function _(t){return\\\"object\\\"==typeof t&&(t=t.type),t}r.modules={},r.allCategories={},r.allTypes=[],r.subplotsRegistry={},r.transformsRegistry={},r.componentsRegistry={},r.layoutArrayContainers=[],r.layoutArrayRegexes=[],r.traceLayoutAttributes={},r.localeRegistry={},r.apiMethodRegistry={},r.collectableSubplotTypes=null,r.register=function(t){if(r.collectableSubplotTypes=null,!t)throw new Error(\\\"No argument passed to Plotly.register.\\\");t&&!Array.isArray(t)&&(t=[t]);for(var e=0;e<t.length;e++){var n=t[e];if(!n)throw new Error(\\\"Invalid module was attempted to be registered!\\\");switch(n.moduleType){case\\\"trace\\\":p(n);break;case\\\"transform\\\":g(n);break;case\\\"component\\\":d(n);break;case\\\"locale\\\":v(n);break;case\\\"apiMethod\\\":var i=n.name;r.apiMethodRegistry[i]=n.fn;break;default:throw new Error(\\\"Invalid module was attempted to be registered!\\\")}}},r.getModule=function(t){var e=r.modules[_(t)];return!!e&&e._module},r.traceIs=function(t,e){if(\\\"various\\\"===(t=_(t)))return!1;var i=r.modules[t];return i||(t&&\\\"area\\\"!==t&&n.log(\\\"Unrecognized trace type \\\"+t+\\\".\\\"),i=r.modules[c.type.dflt]),!!i.categories[e]},r.getTransformIndices=function(t,e){for(var r=[],n=t.transforms||[],i=0;i<n.length;i++)n[i].type===e&&r.push(i);return r},r.hasTransform=function(t,e){for(var r=t.transforms||[],n=0;n<r.length;n++)if(r[n].type===e)return!0;return!1},r.getComponentMethod=function(t,e){var n=r.componentsRegistry[t];return n&&n[e]||i},r.call=function(){var t=arguments[0],e=[].slice.call(arguments,1);return r.apiMethodRegistry[t].apply(null,e)}},{\\\"./lib/dom\\\":708,\\\"./lib/extend\\\":710,\\\"./lib/is_plain_object\\\":720,\\\"./lib/loggers\\\":723,\\\"./lib/noop\\\":728,\\\"./lib/push_unique\\\":733,\\\"./plots/attributes\\\":764,\\\"./plots/layout_attributes\\\":819}],848:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../registry\\\"),i=t(\\\"../lib\\\"),a=i.extendFlat,o=i.extendDeep;function s(t){var e;switch(t){case\\\"themes__thumb\\\":e={autosize:!0,width:150,height:150,title:{text:\\\"\\\"},showlegend:!1,margin:{l:5,r:5,t:5,b:5,pad:0},annotations:[]};break;case\\\"thumbnail\\\":e={title:{text:\\\"\\\"},hidesources:!0,showlegend:!1,borderwidth:0,bordercolor:\\\"\\\",margin:{l:1,r:1,t:1,b:1,pad:0},annotations:[]};break;default:e={}}return e}e.exports=function(t,e){var r;t.framework&&t.framework.isPolar&&(t=t.framework.getConfig());var i,l=t.data,c=t.layout,u=o([],l),h=o({},c,s(e.tileClass)),f=t._context||{};if(e.width&&(h.width=e.width),e.height&&(h.height=e.height),\\\"thumbnail\\\"===e.tileClass||\\\"themes__thumb\\\"===e.tileClass){h.annotations=[];var p=Object.keys(h);for(r=0;r<p.length;r++)i=p[r],[\\\"xaxis\\\",\\\"yaxis\\\",\\\"zaxis\\\"].indexOf(i.slice(0,5))>-1&&(h[p[r]].title={text:\\\"\\\"});for(r=0;r<u.length;r++){var d=u[r];d.showscale=!1,d.marker&&(d.marker.showscale=!1),n.traceIs(d,\\\"pie-like\\\")&&(d.textposition=\\\"none\\\")}}if(Array.isArray(e.annotations))for(r=0;r<e.annotations.length;r++)h.annotations.push(e.annotations[r]);var g=Object.keys(h).filter(function(t){return t.match(/^scene\\\\d*$/)});if(g.length){var v={};for(\\\"thumbnail\\\"===e.tileClass&&(v={title:{text:\\\"\\\"},showaxeslabels:!1,showticklabels:!1,linetickenable:!1}),r=0;r<g.length;r++){var m=h[g[r]];m.xaxis||(m.xaxis={}),m.yaxis||(m.yaxis={}),m.zaxis||(m.zaxis={}),a(m.xaxis,v),a(m.yaxis,v),a(m.zaxis,v),m._scene=null}}var y=document.createElement(\\\"div\\\");e.tileClass&&(y.className=e.tileClass);var x={gd:y,td:y,layout:h,data:u,config:{staticPlot:void 0===e.staticPlot||e.staticPlot,plotGlPixelRatio:void 0===e.plotGlPixelRatio?2:e.plotGlPixelRatio,displaylogo:e.displaylogo||!1,showLink:e.showLink||!1,showTips:e.showTips||!1,mapboxAccessToken:f.mapboxAccessToken}};return\\\"transparent\\\"!==e.setBackground&&(x.config.setBackground=e.setBackground||\\\"opaque\\\"),x.gd.defaultLayout=s(e.tileClass),x}},{\\\"../lib\\\":719,\\\"../registry\\\":847}],849:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../lib\\\"),i=t(\\\"../plot_api/to_image\\\"),a=t(\\\"./filesaver\\\"),o=t(\\\"./helpers\\\");e.exports=function(t,e){var r;return n.isPlainObject(t)||(r=n.getGraphDiv(t)),(e=e||{}).format=e.format||\\\"png\\\",e.imageDataOnly=!0,new Promise(function(s,l){r&&r._snapshotInProgress&&l(new Error(\\\"Snapshotting already in progress.\\\")),n.isIE()&&\\\"svg\\\"!==e.format&&l(new Error(o.MSG_IE_BAD_FORMAT)),r&&(r._snapshotInProgress=!0);var c=i(t,e),u=e.filename||t.fn||\\\"newplot\\\";u+=\\\".\\\"+e.format,c.then(function(t){return r&&(r._snapshotInProgress=!1),a(t,u,e.format)}).then(function(t){s(t)}).catch(function(t){r&&(r._snapshotInProgress=!1),l(t)})})}},{\\\"../lib\\\":719,\\\"../plot_api/to_image\\\":760,\\\"./filesaver\\\":850,\\\"./helpers\\\":851}],850:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../lib\\\"),i=t(\\\"./helpers\\\");e.exports=function(t,e,r){var a=document.createElement(\\\"a\\\"),o=\\\"download\\\"in a;return new Promise(function(s,l){var c,u;if(n.isIE9orBelow()&&l(new Error(\\\"IE < 10 unsupported\\\")),n.isSafari()){var h=\\\"svg\\\"===r?\\\",\\\":\\\";base64,\\\";return i.octetStream(h+encodeURIComponent(t)),s(e)}return n.isIE()?(c=i.createBlob(t,\\\"svg\\\"),window.navigator.msSaveBlob(c,e),c=null,s(e)):o?(c=i.createBlob(t,r),u=i.createObjectURL(c),a.href=u,a.download=e,document.body.appendChild(a),a.click(),document.body.removeChild(a),i.revokeObjectURL(u),c=null,s(e)):void l(new Error(\\\"download error\\\"))})}},{\\\"../lib\\\":719,\\\"./helpers\\\":851}],851:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../registry\\\");r.getDelay=function(t){return t._has&&(t._has(\\\"gl3d\\\")||t._has(\\\"gl2d\\\")||t._has(\\\"mapbox\\\"))?500:0},r.getRedrawFunc=function(t){return function(){var e=t._fullLayout||{};!(e._has&&e._has(\\\"polar\\\"))&&t.data&&t.data[0]&&t.data[0].r||n.getComponentMethod(\\\"colorbar\\\",\\\"draw\\\")(t)}},r.encodeSVG=function(t){return\\\"data:image/svg+xml,\\\"+encodeURIComponent(t)};var i=window.URL||window.webkitURL;r.createObjectURL=function(t){return i.createObjectURL(t)},r.revokeObjectURL=function(t){return i.revokeObjectURL(t)},r.createBlob=function(t,e){if(\\\"svg\\\"===e)return new window.Blob([t],{type:\\\"image/svg+xml;charset=utf-8\\\"});var r=function(t){for(var e=t.length,r=new ArrayBuffer(e),n=new Uint8Array(r),i=0;i<e;i++)n[i]=t.charCodeAt(i);return r}(window.atob(t));return new window.Blob([r],{type:\\\"image/\\\"+e})},r.octetStream=function(t){document.location.href=\\\"data:application/octet-stream\\\"+t},r.IMAGE_URL_PREFIX=/^data:image\\\\/\\\\w+;base64,/,r.MSG_IE_BAD_FORMAT=\\\"Sorry IE does not support downloading from canvas. Try {format:'svg'} instead.\\\"},{\\\"../registry\\\":847}],852:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./helpers\\\"),i={getDelay:n.getDelay,getRedrawFunc:n.getRedrawFunc,clone:t(\\\"./cloneplot\\\"),toSVG:t(\\\"./tosvg\\\"),svgToImg:t(\\\"./svgtoimg\\\"),toImage:t(\\\"./toimage\\\"),downloadImage:t(\\\"./download\\\")};e.exports=i},{\\\"./cloneplot\\\":848,\\\"./download\\\":849,\\\"./helpers\\\":851,\\\"./svgtoimg\\\":853,\\\"./toimage\\\":854,\\\"./tosvg\\\":855}],853:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../lib\\\"),i=t(\\\"events\\\").EventEmitter,a=t(\\\"./helpers\\\");e.exports=function(t){var e=t.emitter||new i,r=new Promise(function(i,o){var s=window.Image,l=t.svg,c=t.format||\\\"png\\\";if(n.isIE()&&\\\"svg\\\"!==c){var u=new Error(a.MSG_IE_BAD_FORMAT);return o(u),t.promise?r:e.emit(\\\"error\\\",u)}var h,f,p=t.canvas,d=t.scale||1,g=t.width||300,v=t.height||150,m=d*g,y=d*v,x=p.getContext(\\\"2d\\\"),b=new s;\\\"svg\\\"===c||n.isIE9orBelow()||n.isSafari()?f=a.encodeSVG(l):(h=a.createBlob(l,\\\"svg\\\"),f=a.createObjectURL(h)),p.width=m,p.height=y,b.onload=function(){var r;switch(h=null,a.revokeObjectURL(f),\\\"svg\\\"!==c&&x.drawImage(b,0,0,m,y),c){case\\\"jpeg\\\":r=p.toDataURL(\\\"image/jpeg\\\");break;case\\\"png\\\":r=p.toDataURL(\\\"image/png\\\");break;case\\\"webp\\\":r=p.toDataURL(\\\"image/webp\\\");break;case\\\"svg\\\":r=f;break;default:var n=\\\"Image format is not jpeg, png, svg or webp.\\\";if(o(new Error(n)),!t.promise)return e.emit(\\\"error\\\",n)}i(r),t.promise||e.emit(\\\"success\\\",r)},b.onerror=function(r){if(h=null,a.revokeObjectURL(f),o(r),!t.promise)return e.emit(\\\"error\\\",r)},b.src=f});return t.promise?r:e}},{\\\"../lib\\\":719,\\\"./helpers\\\":851,events:104}],854:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"events\\\").EventEmitter,i=t(\\\"../registry\\\"),a=t(\\\"../lib\\\"),o=t(\\\"./helpers\\\"),s=t(\\\"./cloneplot\\\"),l=t(\\\"./tosvg\\\"),c=t(\\\"./svgtoimg\\\");e.exports=function(t,e){var r=new n,u=s(t,{format:\\\"png\\\"}),h=u.gd;h.style.position=\\\"absolute\\\",h.style.left=\\\"-5000px\\\",document.body.appendChild(h);var f=o.getRedrawFunc(h);return i.call(\\\"plot\\\",h,u.data,u.layout,u.config).then(f).then(function(){var t=o.getDelay(h._fullLayout);setTimeout(function(){var t=l(h),n=document.createElement(\\\"canvas\\\");n.id=a.randstr(),(r=c({format:e.format,width:h._fullLayout.width,height:h._fullLayout.height,canvas:n,emitter:r,svg:t})).clean=function(){h&&document.body.removeChild(h)}},t)}).catch(function(t){r.emit(\\\"error\\\",t)}),r}},{\\\"../lib\\\":719,\\\"../registry\\\":847,\\\"./cloneplot\\\":848,\\\"./helpers\\\":851,\\\"./svgtoimg\\\":853,\\\"./tosvg\\\":855,events:104}],855:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../lib\\\"),a=t(\\\"../components/drawing\\\"),o=t(\\\"../components/color\\\"),s=t(\\\"../constants/xmlns_namespaces\\\"),l=/\\\"/g,c=new RegExp('(\\\"TOBESTRIPPED)|(TOBESTRIPPED\\\")',\\\"g\\\");e.exports=function(t,e,r){var u,h=t._fullLayout,f=h._paper,p=h._toppaper,d=h.width,g=h.height;f.insert(\\\"rect\\\",\\\":first-child\\\").call(a.setRect,0,0,d,g).call(o.fill,h.paper_bgcolor);var v=h._basePlotModules||[];for(u=0;u<v.length;u++){var m=v[u];m.toSVG&&m.toSVG(t)}if(p){var y=p.node().childNodes,x=Array.prototype.slice.call(y);for(u=0;u<x.length;u++){var b=x[u];b.childNodes.length&&f.node().appendChild(b)}}h._draggers&&h._draggers.remove(),f.node().style.background=\\\"\\\",f.selectAll(\\\"text\\\").attr({\\\"data-unformatted\\\":null,\\\"data-math\\\":null}).each(function(){var t=n.select(this);if(\\\"hidden\\\"!==this.style.visibility&&\\\"none\\\"!==this.style.display){t.style({visibility:null,display:null});var e=this.style.fontFamily;e&&-1!==e.indexOf('\\\"')&&t.style(\\\"font-family\\\",e.replace(l,\\\"TOBESTRIPPED\\\"))}else t.remove()}),f.selectAll(\\\".point, .scatterpts, .legendfill>path, .legendlines>path, .cbfill\\\").each(function(){var t=n.select(this),e=this.style.fill;e&&-1!==e.indexOf(\\\"url(\\\")&&t.style(\\\"fill\\\",e.replace(l,\\\"TOBESTRIPPED\\\"));var r=this.style.stroke;r&&-1!==r.indexOf(\\\"url(\\\")&&t.style(\\\"stroke\\\",r.replace(l,\\\"TOBESTRIPPED\\\"))}),\\\"pdf\\\"!==e&&\\\"eps\\\"!==e||f.selectAll(\\\"#MathJax_SVG_glyphs path\\\").attr(\\\"stroke-width\\\",0),f.node().setAttributeNS(s.xmlns,\\\"xmlns\\\",s.svg),f.node().setAttributeNS(s.xmlns,\\\"xmlns:xlink\\\",s.xlink),\\\"svg\\\"===e&&r&&(f.attr(\\\"width\\\",r*d),f.attr(\\\"height\\\",r*g),f.attr(\\\"viewBox\\\",\\\"0 0 \\\"+d+\\\" \\\"+g));var _=(new window.XMLSerializer).serializeToString(f.node());return _=function(t){var e=n.select(\\\"body\\\").append(\\\"div\\\").style({display:\\\"none\\\"}).html(\\\"\\\"),r=t.replace(/(&[^;]*;)/gi,function(t){return\\\"&lt;\\\"===t?\\\"&#60;\\\":\\\"&rt;\\\"===t?\\\"&#62;\\\":-1!==t.indexOf(\\\"<\\\")||-1!==t.indexOf(\\\">\\\")?\\\"\\\":e.html(t).text()});return e.remove(),r}(_),_=(_=_.replace(/&(?!\\\\w+;|\\\\#[0-9]+;| \\\\#x[0-9A-F]+;)/g,\\\"&amp;\\\")).replace(c,\\\"'\\\"),i.isIE()&&(_=(_=(_=_.replace(/\\\"/gi,\\\"'\\\")).replace(/(\\\\('#)([^']*)('\\\\))/gi,'(\\\"#$2\\\")')).replace(/(\\\\\\\\')/gi,'\\\"')),_}},{\\\"../components/color\\\":593,\\\"../components/drawing\\\":614,\\\"../constants/xmlns_namespaces\\\":696,\\\"../lib\\\":719,d3:163}],856:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\");e.exports=function(t,e){for(var r=0;r<t.length;r++)t[r].i=r;n.mergeArray(e.text,t,\\\"tx\\\"),n.mergeArray(e.hovertext,t,\\\"htx\\\");var i=e.marker;if(i){n.mergeArray(i.opacity,t,\\\"mo\\\",!0),n.mergeArray(i.color,t,\\\"mc\\\");var a=i.line;a&&(n.mergeArray(a.color,t,\\\"mlc\\\"),n.mergeArrayCastPositive(a.width,t,\\\"mlw\\\"))}}},{\\\"../../lib\\\":719}],857:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../scatter/attributes\\\"),i=t(\\\"../../components/fx/hovertemplate_attributes\\\"),a=t(\\\"../../components/colorscale/attributes\\\"),o=t(\\\"../../plots/font_attributes\\\"),s=t(\\\"./constants.js\\\"),l=t(\\\"../../lib/extend\\\").extendFlat,c=o({editType:\\\"calc\\\",arrayOk:!0,colorEditType:\\\"style\\\"}),u=l({},n.marker.line.width,{dflt:0}),h=l({width:u,editType:\\\"calc\\\"},a(\\\"marker.line\\\")),f=l({line:h,editType:\\\"calc\\\"},a(\\\"marker\\\"),{opacity:{valType:\\\"number\\\",arrayOk:!0,dflt:1,min:0,max:1,editType:\\\"style\\\"}});e.exports={x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,text:n.text,hovertext:n.hovertext,hovertemplate:i({},{keys:s.eventDataKeys}),textposition:{valType:\\\"enumerated\\\",values:[\\\"inside\\\",\\\"outside\\\",\\\"auto\\\",\\\"none\\\"],dflt:\\\"none\\\",arrayOk:!0,editType:\\\"calc\\\"},insidetextanchor:{valType:\\\"enumerated\\\",values:[\\\"end\\\",\\\"middle\\\",\\\"start\\\"],dflt:\\\"end\\\",editType:\\\"plot\\\"},textangle:{valType:\\\"angle\\\",dflt:\\\"auto\\\",editType:\\\"plot\\\"},textfont:l({},c,{}),insidetextfont:l({},c,{}),outsidetextfont:l({},c,{}),constraintext:{valType:\\\"enumerated\\\",values:[\\\"inside\\\",\\\"outside\\\",\\\"both\\\",\\\"none\\\"],dflt:\\\"both\\\",editType:\\\"calc\\\"},cliponaxis:l({},n.cliponaxis,{}),orientation:{valType:\\\"enumerated\\\",values:[\\\"v\\\",\\\"h\\\"],editType:\\\"calc+clearAxisTypes\\\"},base:{valType:\\\"any\\\",dflt:null,arrayOk:!0,editType:\\\"calc\\\"},offset:{valType:\\\"number\\\",dflt:null,arrayOk:!0,editType:\\\"calc\\\"},width:{valType:\\\"number\\\",dflt:null,min:0,arrayOk:!0,editType:\\\"calc\\\"},marker:f,offsetgroup:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},alignmentgroup:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},selected:{marker:{opacity:n.selected.marker.opacity,color:n.selected.marker.color,editType:\\\"style\\\"},textfont:n.selected.textfont,editType:\\\"style\\\"},unselected:{marker:{opacity:n.unselected.marker.opacity,color:n.unselected.marker.color,editType:\\\"style\\\"},textfont:n.unselected.textfont,editType:\\\"style\\\"},r:n.r,t:n.t,_deprecated:{bardir:{valType:\\\"enumerated\\\",editType:\\\"calc\\\",values:[\\\"v\\\",\\\"h\\\"]}}}},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../../plots/font_attributes\\\":793,\\\"../scatter/attributes\\\":1112,\\\"./constants.js\\\":859}],858:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/cartesian/axes\\\"),i=t(\\\"../../components/colorscale/helpers\\\").hasColorscale,a=t(\\\"../../components/colorscale/calc\\\"),o=t(\\\"./arrays_to_calcdata\\\"),s=t(\\\"../scatter/calc_selection\\\");e.exports=function(t,e){var r,l,c=n.getFromId(t,e.xaxis||\\\"x\\\"),u=n.getFromId(t,e.yaxis||\\\"y\\\");\\\"h\\\"===e.orientation?(r=c.makeCalcdata(e,\\\"x\\\"),l=u.makeCalcdata(e,\\\"y\\\")):(r=u.makeCalcdata(e,\\\"y\\\"),l=c.makeCalcdata(e,\\\"x\\\"));for(var h=Math.min(l.length,r.length),f=new Array(h),p=0;p<h;p++)f[p]={p:l[p],s:r[p]},e.ids&&(f[p].id=String(e.ids[p]));return i(e,\\\"marker\\\")&&a(t,e,{vals:e.marker.color,containerStr:\\\"marker\\\",cLetter:\\\"c\\\"}),i(e,\\\"marker.line\\\")&&a(t,e,{vals:e.marker.line.color,containerStr:\\\"marker.line\\\",cLetter:\\\"c\\\"}),o(f,e),s(f,e),f}},{\\\"../../components/colorscale/calc\\\":601,\\\"../../components/colorscale/helpers\\\":604,\\\"../../plots/cartesian/axes\\\":767,\\\"../scatter/calc_selection\\\":1114,\\\"./arrays_to_calcdata\\\":856}],859:[function(t,e,r){\\\"use strict\\\";e.exports={eventDataKeys:[]}},{}],860:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../lib\\\").isArrayOrTypedArray,a=t(\\\"../../constants/numerical\\\").BADNUM,o=t(\\\"../../registry\\\"),s=t(\\\"../../plots/cartesian/axes\\\"),l=t(\\\"../../plots/cartesian/axis_ids\\\").getAxisGroup,c=t(\\\"./sieve.js\\\");function u(t,e,r,o,u){if(o.length){var b,_,w,k;switch(function(t,e){var r,a;for(r=0;r<e.length;r++){var o,s=e[r],l=s[0].trace,c=\\\"funnel\\\"===l.type?l._base:l.base,u=\\\"h\\\"===l.orientation?l.xcalendar:l.ycalendar,h=\\\"category\\\"===t.type||\\\"multicategory\\\"===t.type?function(){return null}:t.d2c;if(i(c)){for(a=0;a<Math.min(c.length,s.length);a++)o=h(c[a],0,u),n(o)?(s[a].b=+o,s[a].hasB=1):s[a].b=0;for(;a<s.length;a++)s[a].b=0}else{o=h(c,0,u);var f=n(o);for(o=f?o:0,a=0;a<s.length;a++)s[a].b=o,f&&(s[a].hasB=1)}}}(r,o),u.mode){case\\\"overlay\\\":h(e,r,o,u);break;case\\\"group\\\":for(b=[],_=[],w=0;w<o.length;w++)void 0===(k=o[w])[0].trace.offset?_.push(k):b.push(k);_.length&&function(t,e,r,n,i){var o=new c(n,{sepNegVal:!1,overlapNoMerge:!i.norm});(function(t,e,r,n){for(var i=t._fullLayout,a=r.positions,o=r.distinctPositions,s=r.minDiff,c=r.traces,u=c.length,h=a.length!==o.length,f=s*(1-n.gap),v=l(i,e._id)+c[0][0].trace.orientation,m=i._alignmentOpts[v]||{},y=0;y<u;y++){var x,b,_=c[y],w=_[0].trace,k=m[w.alignmentgroup]||{},T=Object.keys(k.offsetGroups||{}).length,A=(x=T?f/T:h?f/u:f)*(1-(n.groupgap||0));b=T?((2*w._offsetIndex+1-T)*x-A)/2:h?((2*y+1-u)*x-A)/2:-A/2;var M=_[0].t;M.barwidth=A,M.poffset=b,M.bargroupwidth=f,M.bardelta=s}r.binWidth=c[0][0].t.barwidth/100,p(r),d(e,r),g(e,r,h)})(t,e,o,i),function(t){for(var e=t.traces,r=0;r<e.length;r++){var n=e[r],i=n[0].trace;if(void 0===i.base)for(var o=new c([n],{sepNegVal:!0,overlapNoMerge:!0}),s=0;s<n.length;s++){var l=n[s];if(l.p!==a){var u=o.put(l.p,l.b+l.s);u&&(l.b=u)}}}}(o),i.norm?(m(o),y(r,o,i)):v(r,o)}(t,e,r,_,u),b.length&&h(e,r,b,u);break;case\\\"stack\\\":case\\\"relative\\\":for(b=[],_=[],w=0;w<o.length;w++)void 0===(k=o[w])[0].trace.base?_.push(k):b.push(k);_.length&&function(t,e,r,n,i){var o=new c(n,{sepNegVal:\\\"relative\\\"===i.mode,overlapNoMerge:!(i.norm||\\\"stack\\\"===i.mode||\\\"relative\\\"===i.mode)});f(e,o,i),function(t,e,r){var n,i,o,l,c,u,h=x(t),f=e.traces;for(l=0;l<f.length;l++)if(n=f[l],\\\"funnel\\\"===(i=n[0].trace).type)for(c=0;c<n.length;c++)(u=n[c]).s!==a&&e.put(u.p,-.5*u.s);for(l=0;l<f.length;l++){n=f[l],i=n[0].trace,o=\\\"funnel\\\"===i.type;var p=[];for(c=0;c<n.length;c++)if((u=n[c]).s!==a){var d;d=o?u.s:u.s+u.b;var g=e.put(u.p,d),v=g+d;u.b=g,u[h]=v,r.norm||(p.push(v),u.hasB&&p.push(g))}r.norm||(i._extremes[t._id]=s.findExtremes(t,p,{tozero:!0,padded:!0}))}}(r,o,i);for(var l=0;l<n.length;l++)for(var u=n[l],h=0;h<u.length;h++){var p=u[h];if(p.s!==a){var d=p.b+p.s===o.get(p.p,p.s);d&&(p._outmost=!0)}}i.norm&&y(r,o,i)}(0,e,r,_,u),b.length&&h(e,r,b,u)}!function(t,e){var r,i,a,o=x(e),s={},l=1/0,c=-1/0;for(r=0;r<t.length;r++)for(a=t[r],i=0;i<a.length;i++){var u=a[i].p;n(u)&&(l=Math.min(l,u),c=Math.max(c,u))}var h=1e4/(c-l),f=s.round=function(t){return String(Math.round(h*(t-l)))};for(r=0;r<t.length;r++){(a=t[r])[0].t.extents=s;var p=a[0].t.poffset,d=Array.isArray(p);for(i=0;i<a.length;i++){var g=a[i],v=g[o]-g.w/2;if(n(v)){var m=g[o]+g.w/2,y=f(g.p);s[y]?s[y]=[Math.min(v,s[y][0]),Math.max(m,s[y][1])]:s[y]=[v,m]}g.p0=g.p+(d?p[i]:p),g.p1=g.p0+g.w,g.s0=g.b,g.s1=g.s0+g.s}}}(o,e)}}function h(t,e,r,n){for(var i=0;i<r.length;i++){var a=r[i],o=new c([a],{sepNegVal:!1,overlapNoMerge:!n.norm});f(t,o,n),n.norm?(m(o),y(e,o,n)):v(e,o)}}function f(t,e,r){for(var n=e.minDiff,i=e.traces,a=n*(1-r.gap),o=a*(1-(r.groupgap||0)),s=-o/2,l=0;l<i.length;l++){var c=i[l][0].t;c.barwidth=o,c.poffset=s,c.bargroupwidth=a,c.bardelta=n}e.binWidth=i[0][0].t.barwidth/100,p(e),d(t,e),g(t,e)}function p(t){var e,r,a=t.traces;for(e=0;e<a.length;e++){var o,s=a[e],l=s[0],c=l.trace,u=l.t,h=c._offset||c.offset,f=u.poffset;if(i(h)){for(o=Array.prototype.slice.call(h,0,s.length),r=0;r<o.length;r++)n(o[r])||(o[r]=f);for(r=o.length;r<s.length;r++)o.push(f);u.poffset=o}else void 0!==h&&(u.poffset=h);var p=c._width||c.width,d=u.barwidth;if(i(p)){var g=Array.prototype.slice.call(p,0,s.length);for(r=0;r<g.length;r++)n(g[r])||(g[r]=d);for(r=g.length;r<s.length;r++)g.push(d);if(u.barwidth=g,void 0===h){for(o=[],r=0;r<s.length;r++)o.push(f+(d-g[r])/2);u.poffset=o}}else void 0!==p&&(u.barwidth=p,void 0===h&&(u.poffset=f+(d-p)/2))}}function d(t,e){for(var r=e.traces,n=x(t),i=0;i<r.length;i++)for(var a=r[i],o=a[0].t,s=o.poffset,l=Array.isArray(s),c=o.barwidth,u=Array.isArray(c),h=0;h<a.length;h++){var f=a[h],p=f.w=u?c[h]:c;f[n]=f.p+(l?s[h]:s)+p/2}}function g(t,e,r){var n=e.traces,i=e.minDiff/2;s.minDtick(t,e.minDiff,e.distinctPositions[0],r);for(var a=0;a<n.length;a++){var o,l,c,u,h=n[a],f=h[0],p=f.trace,d=[];for(u=0;u<h.length;u++)l=(o=h[u]).p-i,c=o.p+i,d.push(l,c);if(p.width||p.offset){var g=f.t,v=g.poffset,m=g.barwidth,y=Array.isArray(v),x=Array.isArray(m);for(u=0;u<h.length;u++){o=h[u];var b=y?v[u]:v,_=x?m[u]:m;c=(l=o.p+b)+_,d.push(l,c)}}p._extremes[t._id]=s.findExtremes(t,d,{padded:!1})}}function v(t,e){for(var r=e.traces,n=x(t),i=0;i<r.length;i++){for(var a=r[i],o=a[0].trace,l=[],c=!0,u=0;u<a.length;u++){var h=a[u],f=h.b,p=f+h.s;h[n]=p,l.push(p),h.hasB&&l.push(f),h.hasB&&h.b>0&&h.s>0||(c=!1)}o._extremes[t._id]=s.findExtremes(t,l,{tozero:!c,padded:!0})}}function m(t){for(var e=t.traces,r=0;r<e.length;r++)for(var n=e[r],i=0;i<n.length;i++){var o=n[i];o.s!==a&&t.put(o.p,o.b+o.s)}}function y(t,e,r){var i=e.traces,o=x(t),l=\\\"fraction\\\"===r.norm?1:100,c=l/1e9,u=t.l2c(t.c2l(0)),h=\\\"stack\\\"===r.mode?l:u;function f(e){return n(t.c2l(e))&&(e<u-c||e>h+c||!n(u))}for(var p=0;p<i.length;p++){for(var d=i[p],g=d[0].trace,v=[],m=!0,y=!1,b=0;b<d.length;b++){var _=d[b];if(_.s!==a){var w=Math.abs(l/e.get(_.p,_.s));_.b*=w,_.s*=w;var k=_.b,T=k+_.s;_[o]=T,v.push(T),y=y||f(T),_.hasB&&(v.push(k),y=y||f(k)),_.hasB&&_.b>0&&_.s>0||(m=!1)}}g._extremes[t._id]=s.findExtremes(t,v,{tozero:!m,padded:y})}}function x(t){return t._id.charAt(0)}e.exports={crossTraceCalc:function(t,e){for(var r=e.xaxis,n=e.yaxis,i=t._fullLayout,a=t._fullData,s=t.calcdata,l=[],c=[],h=0;h<a.length;h++){var f=a[h];!0===f.visible&&o.traceIs(f,\\\"bar\\\")&&f.xaxis===r._id&&f.yaxis===n._id&&(\\\"h\\\"===f.orientation?l.push(s[h]):c.push(s[h]))}var p={mode:i.barmode,norm:i.barnorm,gap:i.bargap,groupgap:i.bargroupgap};u(t,r,n,c,p),u(t,n,r,l,p)},setGroupPositions:u}},{\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767,\\\"../../plots/cartesian/axis_ids\\\":770,\\\"../../registry\\\":847,\\\"./sieve.js\\\":869,\\\"fast-isnumeric\\\":225}],861:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../components/color\\\"),a=t(\\\"../../registry\\\"),o=t(\\\"../scatter/xy_defaults\\\"),s=t(\\\"./style_defaults\\\"),l=t(\\\"../../plots/cartesian/axis_ids\\\").getAxisGroup,c=t(\\\"./attributes\\\"),u=n.coerceFont;function h(t,e,r,n){var i=e.orientation,a=e[{v:\\\"x\\\",h:\\\"y\\\"}[i]+\\\"axis\\\"],o=l(r,a)+i,s=r._alignmentOpts||{},c=n(\\\"alignmentgroup\\\"),u=s[o];u||(u=s[o]={});var h=u[c];h?h.traces.push(e):h=u[c]={traces:[e],alignmentIndex:Object.keys(u).length,offsetGroups:{}};var f=n(\\\"offsetgroup\\\"),p=h.offsetGroups,d=p[f];f&&(d||(d=p[f]={offsetIndex:Object.keys(p).length}),e._offsetIndex=d.offsetIndex)}function f(t,e,r,i,a,o){var s=!(!1===(o=o||{}).moduleHasSelected),l=!(!1===o.moduleHasUnselected),c=!(!1===o.moduleHasConstrain),h=!(!1===o.moduleHasCliponaxis),f=!(!1===o.moduleHasTextangle),p=!(!1===o.moduleHasInsideanchor),d=Array.isArray(a)||\\\"auto\\\"===a,g=d||\\\"inside\\\"===a,v=d||\\\"outside\\\"===a;if(g||v){var m=u(i,\\\"textfont\\\",r.font),y=n.extendFlat({},m);!(t.textfont&&t.textfont.color)&&delete y.color,u(i,\\\"insidetextfont\\\",y),v&&u(i,\\\"outsidetextfont\\\",m),s&&i(\\\"selected.textfont.color\\\"),l&&i(\\\"unselected.textfont.color\\\"),c&&i(\\\"constraintext\\\"),h&&i(\\\"cliponaxis\\\"),f&&i(\\\"textangle\\\")}g&&p&&i(\\\"insidetextanchor\\\")}e.exports={supplyDefaults:function(t,e,r,l){function u(r,i){return n.coerce(t,e,c,r,i)}if(o(t,e,l,u)){u(\\\"orientation\\\",e.x&&!e.y?\\\"h\\\":\\\"v\\\"),u(\\\"base\\\"),u(\\\"offset\\\"),u(\\\"width\\\"),u(\\\"text\\\"),u(\\\"hovertext\\\"),u(\\\"hovertemplate\\\");var h=u(\\\"textposition\\\");f(t,0,l,u,h,{moduleHasSelected:!0,moduleHasUnselected:!0,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),s(t,e,u,r,l);var p=(e.marker.line||{}).color,d=a.getComponentMethod(\\\"errorbars\\\",\\\"supplyDefaults\\\");d(t,e,p||i.defaultLine,{axis:\\\"y\\\"}),d(t,e,p||i.defaultLine,{axis:\\\"x\\\",inherit:\\\"y\\\"}),n.coerceSelectionMarkerOpacity(e,u)}else e.visible=!1},crossTraceDefaults:function(t,e){var r;function i(t){return n.coerce(r._input,r,c,t)}if(\\\"group\\\"===e.barmode)for(var a=0;a<t.length;a++)\\\"bar\\\"===(r=t[a]).type&&(r._input,h(0,r,e,i))},handleGroupingDefaults:h,handleText:f}},{\\\"../../components/color\\\":593,\\\"../../lib\\\":719,\\\"../../plots/cartesian/axis_ids\\\":770,\\\"../../registry\\\":847,\\\"../scatter/xy_defaults\\\":1137,\\\"./attributes\\\":857,\\\"./style_defaults\\\":871}],862:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"tinycolor2\\\"),a=t(\\\"../../lib\\\").isArrayOrTypedArray;r.coerceString=function(t,e,r){if(\\\"string\\\"==typeof e){if(e||!t.noBlank)return e}else if((\\\"number\\\"==typeof e||!0===e)&&!t.strict)return String(e);return void 0!==r?r:t.dflt},r.coerceNumber=function(t,e,r){if(n(e)){e=+e;var i=t.min,a=t.max;if(!(void 0!==i&&e<i||void 0!==a&&e>a))return e}return void 0!==r?r:t.dflt},r.coerceColor=function(t,e,r){return i(e).isValid()?e:void 0!==r?r:t.dflt},r.coerceEnumerated=function(t,e,r){return t.coerceNumber&&(e=+e),-1!==t.values.indexOf(e)?e:void 0!==r?r:t.dflt},r.getValue=function(t,e){var r;return Array.isArray(t)?e<t.length&&(r=t[e]):r=t,r},r.getLineWidth=function(t,e){return 0<e.mlw?e.mlw:a(t.marker.line.width)?0:t.marker.line.width}},{\\\"../../lib\\\":719,\\\"fast-isnumeric\\\":225,tinycolor2:537}],863:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/fx\\\"),i=t(\\\"../../registry\\\"),a=t(\\\"../../components/color\\\"),o=t(\\\"../../lib\\\").fillText,s=t(\\\"./helpers\\\").getLineWidth;function l(t,e,r,i){var a,s,l,c,u,h,f,p=t.cd,d=p[0].trace,g=p[0].t,v=\\\"closest\\\"===i,m=\\\"waterfall\\\"===d.type,y=t.maxHoverDistance,x=t.maxSpikeDistance;function b(t){return t[l]-t.w/2}function _(t){return t[l]+t.w/2}var w=v?b:function(t){return Math.min(b(t),t.p-g.bardelta/2)},k=v?_:function(t){return Math.max(_(t),t.p+g.bardelta/2)};function T(t,e){return n.inbox(t-a,e-a,y+Math.min(1,Math.abs(e-t)/f)-1)}function A(t){return T(w(t),k(t))}function M(t){var e=s,r=t.b,i=t[c];return m&&(i+=Math.abs(t.rawS||0)),n.inbox(r-e,i-e,y+(i-e)/(i-r)-1)}\\\"h\\\"===d.orientation?(a=r,s=e,l=\\\"y\\\",c=\\\"x\\\",u=M,h=A):(a=e,s=r,l=\\\"x\\\",c=\\\"y\\\",h=M,u=A);var S=t[l+\\\"a\\\"],E=t[c+\\\"a\\\"];f=Math.abs(S.r2c(S.range[1])-S.r2c(S.range[0]));var C=n.getDistanceFunction(i,u,h,function(t){return(u(t)+h(t))/2});if(n.getClosest(p,C,t),!1!==t.index){v||(w=function(t){return Math.min(b(t),t.p-g.bargroupwidth/2)},k=function(t){return Math.max(_(t),t.p+g.bargroupwidth/2)});var L=p[t.index],P=d.base?L.b+L.s:L.s;t[c+\\\"0\\\"]=t[c+\\\"1\\\"]=E.c2p(L[c],!0),t[c+\\\"LabelVal\\\"]=P;var O=g.extents[g.extents.round(L.p)];return t[l+\\\"0\\\"]=S.c2p(v?w(L):O[0],!0),t[l+\\\"1\\\"]=S.c2p(v?k(L):O[1],!0),t[l+\\\"LabelVal\\\"]=L.p,t.spikeDistance=(M(L)+function(t){return T(b(t),_(t))}(L))/2+x-y,t[l+\\\"Spike\\\"]=S.c2p(L.p,!0),o(L,d,t),t.hovertemplate=d.hovertemplate,t}}function c(t,e){var r=e.mcc||t.marker.color,n=e.mlcc||t.marker.line.color,i=s(t,e);return a.opacity(r)?r:a.opacity(n)&&i?n:void 0}e.exports={hoverPoints:function(t,e,r,n){var a=l(t,e,r,n);if(a){var o=a.cd,s=o[0].trace,u=o[a.index];return a.color=c(s,u),i.getComponentMethod(\\\"errorbars\\\",\\\"hoverInfo\\\")(u,s,a),[a]}},hoverOnBars:l,getTraceColor:c}},{\\\"../../components/color\\\":593,\\\"../../components/fx\\\":632,\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"./helpers\\\":862}],864:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),layoutAttributes:t(\\\"./layout_attributes\\\"),supplyDefaults:t(\\\"./defaults\\\").supplyDefaults,crossTraceDefaults:t(\\\"./defaults\\\").crossTraceDefaults,supplyLayoutDefaults:t(\\\"./layout_defaults\\\"),calc:t(\\\"./calc\\\"),crossTraceCalc:t(\\\"./cross_trace_calc\\\").crossTraceCalc,colorbar:t(\\\"../scatter/marker_colorbar\\\"),arraysToCalcdata:t(\\\"./arrays_to_calcdata\\\"),plot:t(\\\"./plot\\\").plot,style:t(\\\"./style\\\").style,styleOnSelect:t(\\\"./style\\\").styleOnSelect,hoverPoints:t(\\\"./hover\\\").hoverPoints,selectPoints:t(\\\"./select\\\"),moduleType:\\\"trace\\\",name:\\\"bar\\\",basePlotModule:t(\\\"../../plots/cartesian\\\"),categories:[\\\"bar-like\\\",\\\"cartesian\\\",\\\"svg\\\",\\\"bar\\\",\\\"oriented\\\",\\\"errorBarsOK\\\",\\\"showLegend\\\",\\\"zoomScale\\\"],meta:{}}},{\\\"../../plots/cartesian\\\":778,\\\"../scatter/marker_colorbar\\\":1129,\\\"./arrays_to_calcdata\\\":856,\\\"./attributes\\\":857,\\\"./calc\\\":858,\\\"./cross_trace_calc\\\":860,\\\"./defaults\\\":861,\\\"./hover\\\":863,\\\"./layout_attributes\\\":865,\\\"./layout_defaults\\\":866,\\\"./plot\\\":867,\\\"./select\\\":868,\\\"./style\\\":870}],865:[function(t,e,r){\\\"use strict\\\";e.exports={barmode:{valType:\\\"enumerated\\\",values:[\\\"stack\\\",\\\"group\\\",\\\"overlay\\\",\\\"relative\\\"],dflt:\\\"group\\\",editType:\\\"calc\\\"},barnorm:{valType:\\\"enumerated\\\",values:[\\\"\\\",\\\"fraction\\\",\\\"percent\\\"],dflt:\\\"\\\",editType:\\\"calc\\\"},bargap:{valType:\\\"number\\\",min:0,max:1,editType:\\\"calc\\\"},bargroupgap:{valType:\\\"number\\\",min:0,max:1,dflt:0,editType:\\\"calc\\\"}}},{}],866:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../plots/cartesian/axes\\\"),a=t(\\\"../../lib\\\"),o=t(\\\"./layout_attributes\\\");e.exports=function(t,e,r){function s(r,n){return a.coerce(t,e,o,r,n)}for(var l=!1,c=!1,u=!1,h={},f=s(\\\"barmode\\\"),p=0;p<r.length;p++){var d=r[p];if(n.traceIs(d,\\\"bar\\\")&&d.visible){if(l=!0,\\\"group\\\"===f){var g=d.xaxis+d.yaxis;h[g]&&(u=!0),h[g]=!0}if(d.visible&&\\\"histogram\\\"===d.type)\\\"category\\\"!==i.getFromId({_fullLayout:e},d[\\\"v\\\"===d.orientation?\\\"xaxis\\\":\\\"yaxis\\\"]).type&&(c=!0)}}l?(\\\"overlay\\\"!==f&&s(\\\"barnorm\\\"),s(\\\"bargap\\\",c&&!u?0:.2),s(\\\"bargroupgap\\\")):delete e.barmode}},{\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767,\\\"../../registry\\\":847,\\\"./layout_attributes\\\":865}],867:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"fast-isnumeric\\\"),a=t(\\\"../../lib\\\"),o=t(\\\"../../lib/svg_text_utils\\\"),s=t(\\\"../../components/color\\\"),l=t(\\\"../../components/drawing\\\"),c=t(\\\"../../registry\\\"),u=t(\\\"../../plots/cartesian/axes\\\").tickText,h=t(\\\"./style\\\"),f=t(\\\"./helpers\\\"),p=t(\\\"./attributes\\\"),d=p.text,g=p.textposition,v=3;function m(t,e){return t<e?1:-1}function y(t){return\\\"auto\\\"===t?0:t}function x(t,e,r,n,i,a){var o=!!a.isHorizontal,s=!!a.constrained,l=a.angle||0,c=a.anchor||0,u=i.width,h=i.height,f=Math.abs(e-t),p=Math.abs(n-r),d=f>2*v&&p>2*v?v:0;f-=2*d,p-=2*d;var g=!1;if(!(\\\"auto\\\"===l)||u<=f&&h<=p||!(u>f||h>p)||(u>p||h>f)&&u<h==f<p||(g=!0),g){var x=p;p=f,f=x}var b=y(l),_=Math.abs(Math.sin(Math.PI/180*b)),w=Math.abs(Math.cos(Math.PI/180*b)),k=Math.max(f*w,p*_),T=Math.max(f*_,p*w),A=s?Math.min(k/u,T/h):Math.max(w,_);A=Math.min(1,A);var M=(t+e)/2,S=(r+n)/2;\\\"middle\\\"!==c&&(d+=.5*(A*(o!==g?h:u)*_+A*(o!==g?u:h)*w),o?(d*=m(t,e),M=\\\"start\\\"===c?t+d:e-d):(d*=m(r,n),S=\\\"start\\\"===c?r+d:n-d));return g&&(b+=90),{textX:(i.left+i.right)/2,textY:(i.top+i.bottom)/2,targetX:M,targetY:S,scale:A,rotate:b}}function b(t,e,r,n,i,a){var o,s=!!a.isHorizontal,l=!!a.constrained,c=a.angle||0,u=i.width,h=i.height,f=Math.abs(e-t),p=Math.abs(n-r);o=s?p>2*v?v:0:f>2*v?v:0;var d=1;l&&(d=s?Math.min(1,p/h):Math.min(1,f/u));var g=y(c);o+=.5*(d*(s?h:u)*Math.abs(Math.sin(Math.PI/180*g))+d*(s?u:h)*Math.abs(Math.cos(Math.PI/180*g)));var x=(t+e)/2,b=(r+n)/2;return s?x=e-o*m(e,t):b=n+o*m(r,n),{textX:(i.left+i.right)/2,textY:(i.top+i.bottom)/2,targetX:x,targetY:b,scale:d,rotate:g}}function _(t){var e,r=t.textX,n=t.textY,i=t.targetX,a=t.targetY,o=t.scale,s=t.rotate;return o<1?e=\\\"scale(\\\"+o+\\\") \\\":(o=1,e=\\\"\\\"),\\\"translate(\\\"+(i-o*r)+\\\" \\\"+(a-o*n)+\\\")\\\"+e+(s?\\\"rotate(\\\"+s+\\\" \\\"+r+\\\" \\\"+n+\\\") \\\":\\\"\\\")}e.exports={plot:function(t,e,r,p,y){var w=e.xaxis,k=e.yaxis,T=t._fullLayout;y||(y={mode:T.barmode,norm:T.barmode,gap:T.bargap,groupgap:T.bargroupgap});var A=a.makeTraceGroups(p,r,\\\"trace bars\\\").each(function(r){var c=n.select(this),p=r[0].trace,T=\\\"waterfall\\\"===p.type,A=\\\"funnel\\\"===p.type,M=\\\"bar\\\"===p.type||A,S=0;T&&p.connector.visible&&\\\"between\\\"===p.connector.mode&&(S=p.connector.line.width/2);var E=\\\"h\\\"===p.orientation,C=a.ensureSingle(c,\\\"g\\\",\\\"points\\\").selectAll(\\\"g.point\\\").data(a.identity);C.enter().append(\\\"g\\\").classed(\\\"point\\\",!0),C.exit().remove(),C.each(function(c,T){var A,C,L=n.select(this),P=function(t,e,r,n){var i=[],a=[],o=n?e:r,s=n?r:e;return i[0]=o.c2p(t.s0,!0),a[0]=s.c2p(t.p0,!0),i[1]=o.c2p(t.s1,!0),a[1]=s.c2p(t.p1,!0),n?[i,a]:[a,i]}(c,w,k,E),O=P[0][0],z=P[0][1],I=P[1][0],D=P[1][1],R=!(O!==z&&I!==D&&i(O)&&i(z)&&i(I)&&i(D));if(R&&M&&f.getLineWidth(p,c)&&(E?z-O==0:D-I==0)&&(R=!1),c.isBlank=R,S&&(E?(O-=m(O,z)*S,z+=m(O,z)*S):(I-=m(I,D)*S,D+=m(I,D)*S)),\\\"waterfall\\\"===p.type){if(!R){var F=p[c.dir].marker;A=F.line.width,C=F.color}}else A=f.getLineWidth(p,c),C=c.mc||p.marker.color;var B=n.round(A/2%1,2);function N(t){return 0===y.gap&&0===y.groupgap?n.round(Math.round(t)-B,2):t}if(!t._context.staticPlot){var j=s.opacity(C)<1||A>.01?N:function(t,e){return Math.abs(t-e)>=2?N(t):t>e?Math.ceil(t):Math.floor(t)};O=j(O,z),z=j(z,O),I=j(I,D),D=j(D,I)}a.ensureSingle(L,\\\"path\\\").style(\\\"vector-effect\\\",\\\"non-scaling-stroke\\\").attr(\\\"d\\\",R?\\\"M0,0Z\\\":\\\"M\\\"+O+\\\",\\\"+I+\\\"V\\\"+D+\\\"H\\\"+z+\\\"V\\\"+I+\\\"Z\\\").call(l.setClipUrl,e.layerClipId,t),function(t,e,r,n,i,s,c,p,m,y){var w,k=e.xaxis,T=e.yaxis,A=t._fullLayout;function M(e,r,n){var i=a.ensureSingle(e,\\\"text\\\").text(r).attr({class:\\\"bartext bartext-\\\"+w,transform:\\\"\\\",\\\"text-anchor\\\":\\\"middle\\\",\\\"data-notex\\\":1}).call(l.font,n).call(o.convertToTspans,t);return i}var S=n[0].trace,E=\\\"h\\\"===S.orientation,C=function(t,e,r,n){var i,o=t[0].trace;return i=o.textinfo?function(t,e,r,n){var i=t[0].trace,o=\\\"h\\\"===i.orientation,s=\\\"waterfall\\\"===i.type,l=\\\"funnel\\\"===i.type;function c(t){var e=o?r:n;return u(e,+t,!0).text}var h,f,p=i.textinfo,d=t[e],g=p.split(\\\"+\\\"),v=[],m=function(t){return-1!==g.indexOf(t)};if(m(\\\"label\\\")&&v.push((f=t[e].p,u(o?n:r,f,!0).text)),m(\\\"text\\\")&&(0===(h=a.castOption(i,d.i,\\\"text\\\"))||h)&&v.push(h),s){var y=+d.rawS||d.s,x=d.v,b=x-y;m(\\\"initial\\\")&&v.push(c(b)),m(\\\"delta\\\")&&v.push(c(y)),m(\\\"final\\\")&&v.push(c(x))}if(l){m(\\\"value\\\")&&v.push(c(d.s));var _=0;m(\\\"percent initial\\\")&&_++,m(\\\"percent previous\\\")&&_++,m(\\\"percent total\\\")&&_++;var w=_>1;m(\\\"percent initial\\\")&&(h=a.formatPercent(d.begR),w&&(h+=\\\" of initial\\\"),v.push(h)),m(\\\"percent previous\\\")&&(h=a.formatPercent(d.difR),w&&(h+=\\\" of previous\\\"),v.push(h)),m(\\\"percent total\\\")&&(h=a.formatPercent(d.sumR),w&&(h+=\\\" of total\\\"),v.push(h))}return v.join(\\\"<br>\\\")}(t,e,r,n):f.getValue(o.text,e),f.coerceString(d,i)}(n,i,k,T);w=function(t,e){var r=f.getValue(t.textposition,e);return f.coerceEnumerated(g,r)}(S,i);var L=\\\"stack\\\"===y.mode||\\\"relative\\\"===y.mode,P=n[i],O=!L||P._outmost;if(C&&\\\"none\\\"!==w&&(!P.isBlank&&s!==c&&p!==m||\\\"auto\\\"!==w&&\\\"inside\\\"!==w)){var z=A.font,I=h.getBarColor(n[i],S),D=h.getInsideTextFont(S,i,z,I),R=h.getOutsideTextFont(S,i,z),F=r.datum();E?\\\"log\\\"===k.type&&F.s0<=0&&(s=k.range[0]<k.range[1]?0:k._length):\\\"log\\\"===T.type&&F.s0<=0&&(p=T.range[0]<T.range[1]?T._length:0);var B,N,j,U,V,q,H=Math.abs(c-s)-2*v,G=Math.abs(m-p)-2*v;if(\\\"outside\\\"===w&&(O||P.hasB||(w=\\\"inside\\\")),\\\"auto\\\"===w)if(O){w=\\\"inside\\\",B=M(r,C,D),N=l.bBox(B.node()),j=N.width,U=N.height;var Y=j>0&&U>0,W=j<=H&&U<=G,X=j<=G&&U<=H,Z=E?H>=j*(G/U):G>=U*(H/j);Y&&(W||X||Z)?w=\\\"inside\\\":(w=\\\"outside\\\",B.remove(),B=null)}else w=\\\"inside\\\";!B&&(B=M(r,C,\\\"outside\\\"===w?R:D),N=l.bBox(B.node()),j=N.width,U=N.height,j<=0||U<=0)?B.remove():(\\\"outside\\\"===w?(q=\\\"both\\\"===S.constraintext||\\\"outside\\\"===S.constraintext,V=_(b(s,c,p,m,N,{isHorizontal:E,constrained:q,angle:S.textangle}))):(q=\\\"both\\\"===S.constraintext||\\\"inside\\\"===S.constraintext,V=_(x(s,c,p,m,N,{isHorizontal:E,constrained:q,angle:S.textangle,anchor:S.insidetextanchor}))),B.attr(\\\"transform\\\",V))}else r.select(\\\"text\\\").remove()}(t,e,L,r,T,O,z,I,D,y),e.layerClipId&&l.hideOutsideRangePoint(c,L.select(\\\"text\\\"),w,k,p.xcalendar,p.ycalendar)});var L=!1===p.cliponaxis;l.setClipUrl(c,L?null:e.layerClipId,t)});c.getComponentMethod(\\\"errorbars\\\",\\\"plot\\\")(t,A,e)},getTransform:_,toMoveInsideBar:x,toMoveOutsideBar:b}},{\\\"../../components/color\\\":593,\\\"../../components/drawing\\\":614,\\\"../../lib\\\":719,\\\"../../lib/svg_text_utils\\\":743,\\\"../../plots/cartesian/axes\\\":767,\\\"../../registry\\\":847,\\\"./attributes\\\":857,\\\"./helpers\\\":862,\\\"./style\\\":870,d3:163,\\\"fast-isnumeric\\\":225}],868:[function(t,e,r){\\\"use strict\\\";function n(t,e,r,n,i){var a=e.c2p(n?t.s0:t.p0,!0),o=e.c2p(n?t.s1:t.p1,!0),s=r.c2p(n?t.p0:t.s0,!0),l=r.c2p(n?t.p1:t.s1,!0);return i?[(a+o)/2,(s+l)/2]:n?[o,(s+l)/2]:[(a+o)/2,l]}e.exports=function(t,e){var r,i=t.cd,a=t.xaxis,o=t.yaxis,s=i[0].trace,l=\\\"funnel\\\"===s.type,c=\\\"h\\\"===s.orientation,u=[];if(!1===e)for(r=0;r<i.length;r++)i[r].selected=0;else for(r=0;r<i.length;r++){var h=i[r],f=\\\"ct\\\"in h?h.ct:n(h,a,o,c,l);e.contains(f,!1,r,t)?(u.push({pointNumber:r,x:a.c2d(h.x),y:o.c2d(h.y)}),h.selected=1):h.selected=0}return u}},{}],869:[function(t,e,r){\\\"use strict\\\";e.exports=a;var n=t(\\\"../../lib\\\").distinctVals,i=t(\\\"../../constants/numerical\\\").BADNUM;function a(t,e){this.traces=t,this.sepNegVal=e.sepNegVal,this.overlapNoMerge=e.overlapNoMerge;for(var r=1/0,a=[],o=0;o<t.length;o++){for(var s=t[o],l=0;l<s.length;l++){var c=s[l];c.p!==i&&a.push(c.p)}s[0]&&s[0].width1&&(r=Math.min(s[0].width1,r))}this.positions=a;var u=n(a);this.distinctPositions=u.vals,1===u.vals.length&&r!==1/0?this.minDiff=r:this.minDiff=Math.min(u.minDiff,r),this.binWidth=this.minDiff,this.bins={}}a.prototype.put=function(t,e){var r=this.getLabel(t,e),n=this.bins[r]||0;return this.bins[r]=n+e,n},a.prototype.get=function(t,e){var r=this.getLabel(t,e);return this.bins[r]||0},a.prototype.getLabel=function(t,e){return(e<0&&this.sepNegVal?\\\"v\\\":\\\"^\\\")+(this.overlapNoMerge?t:Math.round(t/this.binWidth))}},{\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719}],870:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../components/color\\\"),a=t(\\\"../../components/drawing\\\"),o=t(\\\"../../lib\\\"),s=t(\\\"../../registry\\\"),l=t(\\\"./attributes\\\"),c=l.textfont,u=l.insidetextfont,h=l.outsidetextfont,f=t(\\\"./helpers\\\");function p(t,e,r){a.pointStyle(t.selectAll(\\\"path\\\"),e,r),d(t,e,r)}function d(t,e,r){t.selectAll(\\\"text\\\").each(function(t){var i=n.select(this),o=g(i,t,e,r);a.font(i,o)})}function g(t,e,r,n){var i=n._fullLayout.font,a=r.textfont;if(t.classed(\\\"bartext-inside\\\")){var o=b(e,r);a=m(r,e.i,i,o)}else t.classed(\\\"bartext-outside\\\")&&(a=y(r,e.i,i));return a}function v(t,e,r){return x(c,t.textfont,e,r)}function m(t,e,r,n){var a=v(t,e,r);return(void 0===t._input.textfont||void 0===t._input.textfont.color||Array.isArray(t.textfont.color)&&void 0===t.textfont.color[e])&&(a={color:i.contrast(n),family:a.family,size:a.size}),x(u,t.insidetextfont,e,a)}function y(t,e,r){var n=v(t,e,r);return x(h,t.outsidetextfont,e,n)}function x(t,e,r,n){e=e||{};var i=f.getValue(e.family,r),a=f.getValue(e.size,r),o=f.getValue(e.color,r);return{family:f.coerceString(t.family,i,n.family),size:f.coerceNumber(t.size,a,n.size),color:f.coerceColor(t.color,o,n.color)}}function b(t,e){return\\\"waterfall\\\"===e.type?e[t.dir].marker.color:t.mc||e.marker.color}e.exports={style:function(t){var e=n.select(t).selectAll(\\\"g.barlayer\\\").selectAll(\\\"g.trace\\\"),r=e.size(),i=t._fullLayout;e.style(\\\"opacity\\\",function(t){return t[0].trace.opacity}).each(function(t){(\\\"stack\\\"===i.barmode&&r>1||0===i.bargap&&0===i.bargroupgap&&!t[0].trace.marker.line.width)&&n.select(this).attr(\\\"shape-rendering\\\",\\\"crispEdges\\\")}),e.selectAll(\\\"g.points\\\").each(function(e){p(n.select(this),e[0].trace,t)}),s.getComponentMethod(\\\"errorbars\\\",\\\"style\\\")(e)},styleTextPoints:d,styleOnSelect:function(t,e,r){var i=e[0].trace;i.selectedpoints?function(t,e,r){a.selectedPointStyle(t.selectAll(\\\"path\\\"),e),function(t,e,r){t.each(function(t){var i,s=n.select(this);if(t.selected){i=o.extendFlat({},g(s,t,e,r));var l=e.selected.textfont&&e.selected.textfont.color;l&&(i.color=l),a.font(s,i)}else a.selectedTextStyle(s,e)})}(t.selectAll(\\\"text\\\"),e,r)}(r,i,t):(p(r,i,t),s.getComponentMethod(\\\"errorbars\\\",\\\"style\\\")(r))},getInsideTextFont:m,getOutsideTextFont:y,getBarColor:b}},{\\\"../../components/color\\\":593,\\\"../../components/drawing\\\":614,\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"./attributes\\\":857,\\\"./helpers\\\":862,d3:163}],871:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/color\\\"),i=t(\\\"../../components/colorscale/helpers\\\").hasColorscale,a=t(\\\"../../components/colorscale/defaults\\\");e.exports=function(t,e,r,o,s){r(\\\"marker.color\\\",o),i(t,\\\"marker\\\")&&a(t,e,s,r,{prefix:\\\"marker.\\\",cLetter:\\\"c\\\"}),r(\\\"marker.line.color\\\",n.defaultLine),i(t,\\\"marker.line\\\")&&a(t,e,s,r,{prefix:\\\"marker.line.\\\",cLetter:\\\"c\\\"}),r(\\\"marker.line.width\\\"),r(\\\"marker.opacity\\\"),r(\\\"selected.marker.color\\\"),r(\\\"unselected.marker.color\\\")}},{\\\"../../components/color\\\":593,\\\"../../components/colorscale/defaults\\\":603,\\\"../../components/colorscale/helpers\\\":604}],872:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/fx/hovertemplate_attributes\\\"),i=t(\\\"../../lib/extend\\\").extendFlat,a=t(\\\"../scatterpolar/attributes\\\"),o=t(\\\"../bar/attributes\\\");e.exports={r:a.r,theta:a.theta,r0:a.r0,dr:a.dr,theta0:a.theta0,dtheta:a.dtheta,thetaunit:a.thetaunit,base:i({},o.base,{}),offset:i({},o.offset,{}),width:i({},o.width,{}),text:i({},o.text,{}),hovertext:i({},o.hovertext,{}),marker:o.marker,hoverinfo:a.hoverinfo,hovertemplate:n(),selected:o.selected,unselected:o.unselected}},{\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../bar/attributes\\\":857,\\\"../scatterpolar/attributes\\\":1179}],873:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/colorscale/helpers\\\").hasColorscale,i=t(\\\"../../components/colorscale/calc\\\"),a=t(\\\"../bar/arrays_to_calcdata\\\"),o=t(\\\"../bar/cross_trace_calc\\\").setGroupPositions,s=t(\\\"../scatter/calc_selection\\\"),l=t(\\\"../../registry\\\").traceIs,c=t(\\\"../../lib\\\").extendFlat;e.exports={calc:function(t,e){for(var r=t._fullLayout,o=e.subplot,l=r[o].radialaxis,c=r[o].angularaxis,u=l.makeCalcdata(e,\\\"r\\\"),h=c.makeCalcdata(e,\\\"theta\\\"),f=e._length,p=new Array(f),d=u,g=h,v=0;v<f;v++)p[v]={p:g[v],s:d[v]};function m(t){var r=e[t];void 0!==r&&(e[\\\"_\\\"+t]=Array.isArray(r)?c.makeCalcdata(e,t):c.d2c(r,e.thetaunit))}return\\\"linear\\\"===c.type&&(m(\\\"width\\\"),m(\\\"offset\\\")),n(e,\\\"marker\\\")&&i(t,e,{vals:e.marker.color,containerStr:\\\"marker\\\",cLetter:\\\"c\\\"}),n(e,\\\"marker.line\\\")&&i(t,e,{vals:e.marker.line.color,containerStr:\\\"marker.line\\\",cLetter:\\\"c\\\"}),a(p,e),s(p,e),p},crossTraceCalc:function(t,e,r){for(var n=t.calcdata,i=[],a=0;a<n.length;a++){var s=n[a],u=s[0].trace;!0===u.visible&&l(u,\\\"bar\\\")&&u.subplot===r&&i.push(s)}var h=c({},e.radialaxis,{_id:\\\"x\\\"}),f=e.angularaxis;o(t,f,h,i,{mode:e.barmode,norm:e.barnorm,gap:e.bargap,groupgap:e.bargroupgap})}}},{\\\"../../components/colorscale/calc\\\":601,\\\"../../components/colorscale/helpers\\\":604,\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"../bar/arrays_to_calcdata\\\":856,\\\"../bar/cross_trace_calc\\\":860,\\\"../scatter/calc_selection\\\":1114}],874:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../scatterpolar/defaults\\\").handleRThetaDefaults,a=t(\\\"../bar/style_defaults\\\"),o=t(\\\"./attributes\\\");e.exports=function(t,e,r,s){function l(r,i){return n.coerce(t,e,o,r,i)}i(t,e,s,l)?(l(\\\"thetaunit\\\"),l(\\\"base\\\"),l(\\\"offset\\\"),l(\\\"width\\\"),l(\\\"text\\\"),l(\\\"hovertext\\\"),l(\\\"hovertemplate\\\"),a(t,e,l,r,s),n.coerceSelectionMarkerOpacity(e,l)):e.visible=!1}},{\\\"../../lib\\\":719,\\\"../bar/style_defaults\\\":871,\\\"../scatterpolar/defaults\\\":1181,\\\"./attributes\\\":872}],875:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/fx\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../bar/hover\\\").getTraceColor,o=i.fillText,s=t(\\\"../scatterpolar/hover\\\").makeHoverPointText,l=t(\\\"../../plots/polar/helpers\\\").isPtInsidePolygon;e.exports=function(t,e,r){var c=t.cd,u=c[0].trace,h=t.subplot,f=h.radialAxis,p=h.angularAxis,d=h.vangles,g=d?l:i.isPtInsideSector,v=t.maxHoverDistance,m=p._period||2*Math.PI,y=Math.abs(f.g2p(Math.sqrt(e*e+r*r))),x=Math.atan2(r,e);f.range[0]>f.range[1]&&(x+=Math.PI);if(n.getClosest(c,function(t){return g(y,x,[t.rp0,t.rp1],[t.thetag0,t.thetag1],d)?v+Math.min(1,Math.abs(t.thetag1-t.thetag0)/m)-1+(t.rp1-y)/(t.rp1-t.rp0)-1:1/0},t),!1!==t.index){var b=c[t.index];t.x0=t.x1=b.ct[0],t.y0=t.y1=b.ct[1];var _=i.extendFlat({},b,{r:b.s,theta:b.p});return o(b,u,t),s(_,u,h,t),t.hovertemplate=u.hovertemplate,t.color=a(u,b),t.xLabelVal=t.yLabelVal=void 0,b.s<0&&(t.idealAlign=\\\"left\\\"),[t]}}},{\\\"../../components/fx\\\":632,\\\"../../lib\\\":719,\\\"../../plots/polar/helpers\\\":830,\\\"../bar/hover\\\":863,\\\"../scatterpolar/hover\\\":1182}],876:[function(t,e,r){\\\"use strict\\\";e.exports={moduleType:\\\"trace\\\",name:\\\"barpolar\\\",basePlotModule:t(\\\"../../plots/polar\\\"),categories:[\\\"polar\\\",\\\"bar\\\",\\\"showLegend\\\"],attributes:t(\\\"./attributes\\\"),layoutAttributes:t(\\\"./layout_attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),supplyLayoutDefaults:t(\\\"./layout_defaults\\\"),calc:t(\\\"./calc\\\").calc,crossTraceCalc:t(\\\"./calc\\\").crossTraceCalc,plot:t(\\\"./plot\\\"),colorbar:t(\\\"../scatter/marker_colorbar\\\"),style:t(\\\"../bar/style\\\").style,styleOnSelect:t(\\\"../bar/style\\\").styleOnSelect,hoverPoints:t(\\\"./hover\\\"),selectPoints:t(\\\"../bar/select\\\"),meta:{}}},{\\\"../../plots/polar\\\":831,\\\"../bar/select\\\":868,\\\"../bar/style\\\":870,\\\"../scatter/marker_colorbar\\\":1129,\\\"./attributes\\\":872,\\\"./calc\\\":873,\\\"./defaults\\\":874,\\\"./hover\\\":875,\\\"./layout_attributes\\\":877,\\\"./layout_defaults\\\":878,\\\"./plot\\\":879}],877:[function(t,e,r){\\\"use strict\\\";e.exports={barmode:{valType:\\\"enumerated\\\",values:[\\\"stack\\\",\\\"overlay\\\"],dflt:\\\"stack\\\",editType:\\\"calc\\\"},bargap:{valType:\\\"number\\\",dflt:.1,min:0,max:1,editType:\\\"calc\\\"}}},{}],878:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./layout_attributes\\\");e.exports=function(t,e,r){var a,o={};function s(r,o){return n.coerce(t[a]||{},e[a],i,r,o)}for(var l=0;l<r.length;l++){var c=r[l];\\\"barpolar\\\"===c.type&&!0===c.visible&&(o[a=c.subplot]||(s(\\\"barmode\\\"),s(\\\"bargap\\\"),o[a]=1))}}},{\\\"../../lib\\\":719,\\\"./layout_attributes\\\":877}],879:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"fast-isnumeric\\\"),a=t(\\\"../../lib\\\"),o=t(\\\"../../components/drawing\\\"),s=t(\\\"../../plots/polar/helpers\\\");e.exports=function(t,e,r){var l=e.xaxis,c=e.yaxis,u=e.radialAxis,h=e.angularAxis,f=function(t){var e=t.cxx,r=t.cyy;if(t.vangles)return function(n,i,o,l){var c,u;a.angleDelta(o,l)>0?(c=o,u=l):(c=l,u=o);var h=s.findEnclosingVertexAngles(c,t.vangles)[0],f=s.findEnclosingVertexAngles(u,t.vangles)[1],p=[h,(c+u)/2,f];return s.pathPolygonAnnulus(n,i,c,u,p,e,r)};return function(t,n,i,o){return a.pathAnnulus(t,n,i,o,e,r)}}(e),p=e.layers.frontplot.select(\\\"g.barlayer\\\");a.makeTraceGroups(p,r,\\\"trace bars\\\").each(function(){var r=n.select(this),s=a.ensureSingle(r,\\\"g\\\",\\\"points\\\").selectAll(\\\"g.point\\\").data(a.identity);s.enter().append(\\\"g\\\").style(\\\"vector-effect\\\",\\\"non-scaling-stroke\\\").style(\\\"stroke-miterlimit\\\",2).classed(\\\"point\\\",!0),s.exit().remove(),s.each(function(t){var e,r=n.select(this),o=t.rp0=u.c2p(t.s0),s=t.rp1=u.c2p(t.s1),p=t.thetag0=h.c2g(t.p0),d=t.thetag1=h.c2g(t.p1);if(i(o)&&i(s)&&i(p)&&i(d)&&o!==s&&p!==d){var g=u.c2g(t.s1),v=(p+d)/2;t.ct=[l.c2p(g*Math.cos(v)),c.c2p(g*Math.sin(v))],e=f(o,s,p,d)}else e=\\\"M0,0Z\\\";a.ensureSingle(r,\\\"path\\\").attr(\\\"d\\\",e)}),o.setClipUrl(r,e._hasClipOnAxisFalse?e.clipIds.forTraces:null,t)})}},{\\\"../../components/drawing\\\":614,\\\"../../lib\\\":719,\\\"../../plots/polar/helpers\\\":830,d3:163,\\\"fast-isnumeric\\\":225}],880:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../scatter/attributes\\\"),i=t(\\\"../bar/attributes\\\"),a=t(\\\"../../components/color/attributes\\\"),o=t(\\\"../../components/fx/hovertemplate_attributes\\\"),s=t(\\\"../../lib/extend\\\").extendFlat,l=n.marker,c=l.line;e.exports={y:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},x:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},x0:{valType:\\\"any\\\",editType:\\\"calc+clearAxisTypes\\\"},y0:{valType:\\\"any\\\",editType:\\\"calc+clearAxisTypes\\\"},name:{valType:\\\"string\\\",editType:\\\"calc+clearAxisTypes\\\"},text:s({},n.text,{}),hovertext:s({},n.hovertext,{}),hovertemplate:o({}),whiskerwidth:{valType:\\\"number\\\",min:0,max:1,dflt:.5,editType:\\\"calc\\\"},notched:{valType:\\\"boolean\\\",editType:\\\"calc\\\"},notchwidth:{valType:\\\"number\\\",min:0,max:.5,dflt:.25,editType:\\\"calc\\\"},boxpoints:{valType:\\\"enumerated\\\",values:[\\\"all\\\",\\\"outliers\\\",\\\"suspectedoutliers\\\",!1],dflt:\\\"outliers\\\",editType:\\\"calc\\\"},boxmean:{valType:\\\"enumerated\\\",values:[!0,\\\"sd\\\",!1],dflt:!1,editType:\\\"calc\\\"},jitter:{valType:\\\"number\\\",min:0,max:1,editType:\\\"calc\\\"},pointpos:{valType:\\\"number\\\",min:-2,max:2,editType:\\\"calc\\\"},orientation:{valType:\\\"enumerated\\\",values:[\\\"v\\\",\\\"h\\\"],editType:\\\"calc+clearAxisTypes\\\"},width:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"calc\\\"},marker:{outliercolor:{valType:\\\"color\\\",dflt:\\\"rgba(0, 0, 0, 0)\\\",editType:\\\"style\\\"},symbol:s({},l.symbol,{arrayOk:!1,editType:\\\"plot\\\"}),opacity:s({},l.opacity,{arrayOk:!1,dflt:1,editType:\\\"style\\\"}),size:s({},l.size,{arrayOk:!1,editType:\\\"calc\\\"}),color:s({},l.color,{arrayOk:!1,editType:\\\"style\\\"}),line:{color:s({},c.color,{arrayOk:!1,dflt:a.defaultLine,editType:\\\"style\\\"}),width:s({},c.width,{arrayOk:!1,dflt:0,editType:\\\"style\\\"}),outliercolor:{valType:\\\"color\\\",editType:\\\"style\\\"},outlierwidth:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"style\\\"},editType:\\\"style\\\"},editType:\\\"plot\\\"},line:{color:{valType:\\\"color\\\",editType:\\\"style\\\"},width:{valType:\\\"number\\\",min:0,dflt:2,editType:\\\"style\\\"},editType:\\\"plot\\\"},fillcolor:n.fillcolor,offsetgroup:i.offsetgroup,alignmentgroup:i.alignmentgroup,selected:{marker:n.selected.marker,editType:\\\"style\\\"},unselected:{marker:n.unselected.marker,editType:\\\"style\\\"},hoveron:{valType:\\\"flaglist\\\",flags:[\\\"boxes\\\",\\\"points\\\"],dflt:\\\"boxes+points\\\",editType:\\\"style\\\"}}},{\\\"../../components/color/attributes\\\":592,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../bar/attributes\\\":857,\\\"../scatter/attributes\\\":1112}],881:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../lib\\\"),a=i._,o=t(\\\"../../plots/cartesian/axes\\\");function s(t,e,r){var n={text:\\\"tx\\\",hovertext:\\\"htx\\\"};for(var i in n)Array.isArray(e[i])&&(t[n[i]]=e[i][r])}function l(t,e){return t.v-e.v}function c(t){return t.v}e.exports=function(t,e){var r,u,h,f,p,d=t._fullLayout,g=o.getFromId(t,e.xaxis||\\\"x\\\"),v=o.getFromId(t,e.yaxis||\\\"y\\\"),m=[],y=\\\"violin\\\"===e.type?\\\"_numViolins\\\":\\\"_numBoxes\\\";\\\"h\\\"===e.orientation?(u=g,h=\\\"x\\\",f=v,p=\\\"y\\\"):(u=v,h=\\\"y\\\",f=g,p=\\\"x\\\");var x,b=u.makeCalcdata(e,h),_=function(t,e,r,a,o){if(e in t)return r.makeCalcdata(t,e);var s;s=e+\\\"0\\\"in t?t[e+\\\"0\\\"]:\\\"name\\\"in t&&(\\\"category\\\"===r.type||n(t.name)&&-1!==[\\\"linear\\\",\\\"log\\\"].indexOf(r.type)||i.isDateTime(t.name)&&\\\"date\\\"===r.type)?t.name:o;var l=\\\"multicategory\\\"===r.type?r.r2c_just_indices(s):r.d2c(s,0,t[e+\\\"calendar\\\"]);return a.map(function(){return l})}(e,p,f,b,d[y]),w=i.distinctVals(_),k=w.vals,T=w.minDiff/2,A=function(t,e){for(var r=t.length,n=new Array(r+1),i=0;i<r;i++)n[i]=t[i]-e;return n[r]=t[r-1]+e,n}(k,T),M=k.length,S=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=[];return e}(M);for(r=0;r<e._length;r++){var E=b[r];if(n(E)){var C=i.findBin(_[r],A);if(C>=0&&C<M){var L={v:E,i:r};s(L,e,r),S[C].push(L)}}}var P=\\\"all\\\"===(e.boxpoints||e.points)?i.identity:function(t){return t.v<x.lf||t.v>x.uf};for(r=0;r<M;r++)if(S[r].length>0){var O=S[r].sort(l),z=O.map(c),I=z.length;(x={}).pos=k[r],x.pts=O,x[p]=x.pos,x[h]=x.pts.map(function(t){return t.v}),x.min=z[0],x.max=z[I-1],x.mean=i.mean(z,I),x.sd=i.stdev(z,I,x.mean),x.q1=i.interp(z,.25),x.med=i.interp(z,.5),x.q3=i.interp(z,.75),x.lf=Math.min(x.q1,z[Math.min(i.findBin(2.5*x.q1-1.5*x.q3,z,!0)+1,I-1)]),x.uf=Math.max(x.q3,z[Math.max(i.findBin(2.5*x.q3-1.5*x.q1,z),0)]),x.lo=4*x.q1-3*x.q3,x.uo=4*x.q3-3*x.q1;var D=1.57*(x.q3-x.q1)/Math.sqrt(I);x.ln=x.med-D,x.un=x.med+D,x.pts2=O.filter(P),m.push(x)}!function(t,e){if(i.isArrayOrTypedArray(e.selectedpoints))for(var r=0;r<t.length;r++){for(var n=t[r].pts||[],a={},o=0;o<n.length;o++)a[n[o].i]=o;i.tagSelected(n,e,a)}}(m,e);var R=o.findExtremes(u,b,{padded:!0});return e._extremes[u._id]=R,m.length>0?(m[0].t={num:d[y],dPos:T,posLetter:p,valLetter:h,labels:{med:a(t,\\\"median:\\\"),min:a(t,\\\"min:\\\"),q1:a(t,\\\"q1:\\\"),q3:a(t,\\\"q3:\\\"),max:a(t,\\\"max:\\\"),mean:\\\"sd\\\"===e.boxmean?a(t,\\\"mean \\\\xb1 \\\\u03c3:\\\"):a(t,\\\"mean:\\\"),lf:a(t,\\\"lower fence:\\\"),uf:a(t,\\\"upper fence:\\\")}},d[y]++,m):[{t:{empty:!0}}]}},{\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767,\\\"fast-isnumeric\\\":225}],882:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/cartesian/axes\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../plots/cartesian/axis_ids\\\").getAxisGroup,o=[\\\"v\\\",\\\"h\\\"];function s(t,e,r,o){var s,l,c,u=e.calcdata,h=e._fullLayout,f=o._id,p=f.charAt(0),d=[],g=0;for(s=0;s<r.length;s++)for(c=u[r[s]],l=0;l<c.length;l++)d.push(c[l].pos),g+=(c[l].pts2||[]).length;if(d.length){var v=i.distinctVals(d),m=v.minDiff/2;n.minDtick(o,v.minDiff,v.vals[0],!0);var y=h[\\\"violin\\\"===t?\\\"_numViolins\\\":\\\"_numBoxes\\\"],x=\\\"group\\\"===h[t+\\\"mode\\\"]&&y>1,b=1-h[t+\\\"gap\\\"],_=1-h[t+\\\"groupgap\\\"];for(s=0;s<r.length;s++){var w,k,T,A,M,S,E=(c=u[r[s]])[0].trace,C=c[0].t,L=E.width,P=E.side;if(L)w=k=A=L/2,T=0;else if(w=m,x){var O=a(h,o._id)+E.orientation,z=(h._alignmentOpts[O]||{})[E.alignmentgroup]||{},I=Object.keys(z.offsetGroups||{}).length,D=I||y;k=w*b*_/D,T=2*w*(((I?E._offsetIndex:C.num)+.5)/D-.5)*b,A=w*b/D}else k=w*b*_,T=0,A=w;C.dPos=w,C.bPos=T,C.bdPos=k,C.wHover=A;var R,F,B,N,j,U,V=T+k,q=Boolean(L);if(\\\"positive\\\"===P?(M=w*(L?1:.5),R=V,S=R=T):\\\"negative\\\"===P?(M=R=T,S=w*(L?1:.5),F=V):(M=S=w,R=F=V),(E.boxpoints||E.points)&&g>0){var H=E.pointpos,G=E.jitter,Y=E.marker.size/2,W=0;H+G>=0&&((W=V*(H+G))>M?(q=!0,j=Y,B=W):W>R&&(j=Y,B=M)),W<=M&&(B=M);var X=0;H-G<=0&&((X=-V*(H-G))>S?(q=!0,U=Y,N=X):X>F&&(U=Y,N=S)),X<=S&&(N=S)}else B=M,N=S;var Z=new Array(c.length);for(l=0;l<c.length;l++)Z[l]=c[l].pos;E._extremes[f]=n.findExtremes(o,Z,{padded:q,vpadminus:N,vpadplus:B,ppadminus:{x:U,y:j}[p],ppadplus:{x:j,y:U}[p]})}}}e.exports={crossTraceCalc:function(t,e){for(var r=t.calcdata,n=e.xaxis,i=e.yaxis,a=0;a<o.length;a++){for(var l=o[a],c=\\\"h\\\"===l?i:n,u=[],h=0;h<r.length;h++){var f=r[h],p=f[0].t,d=f[0].trace;!0!==d.visible||\\\"box\\\"!==d.type&&\\\"candlestick\\\"!==d.type||p.empty||(d.orientation||\\\"v\\\")!==l||d.xaxis!==n._id||d.yaxis!==i._id||u.push(h)}s(\\\"box\\\",t,u,c)}},setPositionOffset:s}},{\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767,\\\"../../plots/cartesian/axis_ids\\\":770}],883:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../registry\\\"),a=t(\\\"../../components/color\\\"),o=t(\\\"../bar/defaults\\\").handleGroupingDefaults,s=t(\\\"./attributes\\\");function l(t,e,r,a){var o,s,l=r(\\\"y\\\"),c=r(\\\"x\\\"),u=c&&c.length;if(l&&l.length)o=\\\"v\\\",u?s=Math.min(n.minRowLength(c),n.minRowLength(l)):(r(\\\"x0\\\"),s=n.minRowLength(l));else{if(!u)return void(e.visible=!1);o=\\\"h\\\",r(\\\"y0\\\"),s=n.minRowLength(c)}e._length=s,i.getComponentMethod(\\\"calendars\\\",\\\"handleTraceDefaults\\\")(t,e,[\\\"x\\\",\\\"y\\\"],a),r(\\\"orientation\\\",o)}function c(t,e,r,i){var a=i.prefix,o=n.coerce2(t,e,s,\\\"marker.outliercolor\\\"),l=r(\\\"marker.line.outliercolor\\\"),c=r(a+\\\"points\\\",o||l?\\\"suspectedoutliers\\\":void 0);c?(r(\\\"jitter\\\",\\\"all\\\"===c?.3:0),r(\\\"pointpos\\\",\\\"all\\\"===c?-1.5:0),r(\\\"marker.symbol\\\"),r(\\\"marker.opacity\\\"),r(\\\"marker.size\\\"),r(\\\"marker.color\\\",e.line.color),r(\\\"marker.line.color\\\"),r(\\\"marker.line.width\\\"),\\\"suspectedoutliers\\\"===c&&(r(\\\"marker.line.outliercolor\\\",e.marker.color),r(\\\"marker.line.outlierwidth\\\")),r(\\\"selected.marker.color\\\"),r(\\\"unselected.marker.color\\\"),r(\\\"selected.marker.size\\\"),r(\\\"unselected.marker.size\\\"),r(\\\"text\\\"),r(\\\"hovertext\\\")):delete e.marker;var u=r(\\\"hoveron\\\");\\\"all\\\"!==u&&-1===u.indexOf(\\\"points\\\")||r(\\\"hovertemplate\\\"),n.coerceSelectionMarkerOpacity(e,r)}e.exports={supplyDefaults:function(t,e,r,i){function o(r,i){return n.coerce(t,e,s,r,i)}l(t,e,o,i),!1!==e.visible&&(o(\\\"line.color\\\",(t.marker||{}).color||r),o(\\\"line.width\\\"),o(\\\"fillcolor\\\",a.addOpacity(e.line.color,.5)),o(\\\"whiskerwidth\\\"),o(\\\"boxmean\\\"),o(\\\"width\\\"),o(\\\"notched\\\",void 0!==t.notchwidth)&&o(\\\"notchwidth\\\"),c(t,e,o,{prefix:\\\"box\\\"}))},crossTraceDefaults:function(t,e){var r,i;function a(t){return n.coerce(i._input,i,s,t)}for(var l=0;l<t.length;l++){var c=(i=t[l]).type;\\\"box\\\"!==c&&\\\"violin\\\"!==c||(r=i._input,\\\"group\\\"===e[c+\\\"mode\\\"]&&o(r,i,e,a))}},handleSampleDefaults:l,handlePointsDefaults:c}},{\\\"../../components/color\\\":593,\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"../bar/defaults\\\":861,\\\"./attributes\\\":880}],884:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){return e.hoverOnBox&&(t.hoverOnBox=e.hoverOnBox),\\\"xVal\\\"in e&&(t.x=e.xVal),\\\"yVal\\\"in e&&(t.y=e.yVal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t}},{}],885:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/cartesian/axes\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../components/fx\\\"),o=t(\\\"../../components/color\\\"),s=i.fillText;function l(t,e,r,s){var l,c,u,h,f,p,d,g,v,m,y,x,b,_,w=t.cd,k=t.xa,T=t.ya,A=w[0].trace,M=w[0].t,S=\\\"violin\\\"===A.type,E=[],C=M.bdPos,L=M.wHover,P=function(t){return t.pos+M.bPos-p};S&&\\\"both\\\"!==A.side?(\\\"positive\\\"===A.side&&(v=function(t){var e=P(t);return a.inbox(e,e+L,m)},x=C,b=0),\\\"negative\\\"===A.side&&(v=function(t){var e=P(t);return a.inbox(e-L,e,m)},x=0,b=C)):(v=function(t){var e=P(t);return a.inbox(e-L,e+L,m)},x=b=C),_=S?function(t){return a.inbox(t.span[0]-f,t.span[1]-f,m)}:function(t){return a.inbox(t.min-f,t.max-f,m)},\\\"h\\\"===A.orientation?(f=e,p=r,d=_,g=v,l=\\\"y\\\",u=T,c=\\\"x\\\",h=k):(f=r,p=e,d=v,g=_,l=\\\"x\\\",u=k,c=\\\"y\\\",h=T);var O=Math.min(1,C/Math.abs(u.r2c(u.range[1])-u.r2c(u.range[0])));function z(t){return(d(t)+g(t))/2}m=t.maxHoverDistance-O,y=t.maxSpikeDistance-O;var I=a.getDistanceFunction(s,d,g,z);if(a.getClosest(w,I,t),!1===t.index)return[];var D=w[t.index],R=A.line.color,F=(A.marker||{}).color;o.opacity(R)&&A.line.width?t.color=R:o.opacity(F)&&A.boxpoints?t.color=F:t.color=A.fillcolor,t[l+\\\"0\\\"]=u.c2p(D.pos+M.bPos-b,!0),t[l+\\\"1\\\"]=u.c2p(D.pos+M.bPos+x,!0),t[l+\\\"LabelVal\\\"]=D.pos;var B=l+\\\"Spike\\\";t.spikeDistance=z(D)*y/m,t[B]=u.c2p(D.pos,!0);var N={},j=[\\\"med\\\",\\\"q1\\\",\\\"q3\\\",\\\"min\\\",\\\"max\\\"];(A.boxmean||(A.meanline||{}).visible)&&j.push(\\\"mean\\\"),(A.boxpoints||A.points)&&j.push(\\\"lf\\\",\\\"uf\\\");for(var U=0;U<j.length;U++){var V=j[U];if(V in D&&!(D[V]in N)){N[D[V]]=!0;var q=D[V],H=h.c2p(q,!0),G=i.extendFlat({},t);G.attr=V,G[c+\\\"0\\\"]=G[c+\\\"1\\\"]=H,G[c+\\\"LabelVal\\\"]=q,G[c+\\\"Label\\\"]=(M.labels?M.labels[V]+\\\" \\\":\\\"\\\")+n.hoverLabelText(h,q),G.hoverOnBox=!0,\\\"mean\\\"===V&&\\\"sd\\\"in D&&\\\"sd\\\"===A.boxmean&&(G[c+\\\"err\\\"]=D.sd),t.name=\\\"\\\",t.spikeDistance=void 0,t[B]=void 0,G.hovertemplate=!1,E.push(G)}}return E}function c(t,e,r){for(var n,o,l,c=t.cd,u=t.xa,h=t.ya,f=c[0].trace,p=u.c2p(e),d=h.c2p(r),g=a.quadrature(function(t){var e=Math.max(3,t.mrc||0);return Math.max(Math.abs(u.c2p(t.x)-p)-e,1-3/e)},function(t){var e=Math.max(3,t.mrc||0);return Math.max(Math.abs(h.c2p(t.y)-d)-e,1-3/e)}),v=!1,m=0;m<c.length;m++){o=c[m];for(var y=0;y<(o.pts||[]).length;y++){var x=g(l=o.pts[y]);x<=t.distance&&(t.distance=x,v=[m,y])}}if(!v)return!1;l=(o=c[v[0]]).pts[v[1]];var b,_=u.c2p(l.x,!0),w=h.c2p(l.y,!0),k=l.mrc||1;return n=i.extendFlat({},t,{index:l.i,color:(f.marker||{}).color,name:f.name,x0:_-k,x1:_+k,y0:w-k,y1:w+k,spikeDistance:t.distance,hovertemplate:f.hovertemplate}),\\\"h\\\"===f.orientation?(b=h,n.xLabelVal=l.x,n.yLabelVal=o.pos):(b=u,n.xLabelVal=o.pos,n.yLabelVal=l.y),n[b._id.charAt(0)+\\\"Spike\\\"]=b.c2p(o.pos,!0),s(l,f,n),n}e.exports={hoverPoints:function(t,e,r,n){var i,a=t.cd[0].trace.hoveron,o=[];return-1!==a.indexOf(\\\"boxes\\\")&&(o=o.concat(l(t,e,r,n))),-1!==a.indexOf(\\\"points\\\")&&(i=c(t,e,r)),\\\"closest\\\"===n?i?[i]:o:i?(o.push(i),o):o},hoverOnBoxes:l,hoverOnPoints:c}},{\\\"../../components/color\\\":593,\\\"../../components/fx\\\":632,\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767}],886:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),layoutAttributes:t(\\\"./layout_attributes\\\"),supplyDefaults:t(\\\"./defaults\\\").supplyDefaults,crossTraceDefaults:t(\\\"./defaults\\\").crossTraceDefaults,supplyLayoutDefaults:t(\\\"./layout_defaults\\\").supplyLayoutDefaults,calc:t(\\\"./calc\\\"),crossTraceCalc:t(\\\"./cross_trace_calc\\\").crossTraceCalc,plot:t(\\\"./plot\\\").plot,style:t(\\\"./style\\\").style,styleOnSelect:t(\\\"./style\\\").styleOnSelect,hoverPoints:t(\\\"./hover\\\").hoverPoints,eventData:t(\\\"./event_data\\\"),selectPoints:t(\\\"./select\\\"),moduleType:\\\"trace\\\",name:\\\"box\\\",basePlotModule:t(\\\"../../plots/cartesian\\\"),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"symbols\\\",\\\"oriented\\\",\\\"box-violin\\\",\\\"showLegend\\\",\\\"boxLayout\\\",\\\"zoomScale\\\"],meta:{}}},{\\\"../../plots/cartesian\\\":778,\\\"./attributes\\\":880,\\\"./calc\\\":881,\\\"./cross_trace_calc\\\":882,\\\"./defaults\\\":883,\\\"./event_data\\\":884,\\\"./hover\\\":885,\\\"./layout_attributes\\\":887,\\\"./layout_defaults\\\":888,\\\"./plot\\\":889,\\\"./select\\\":890,\\\"./style\\\":891}],887:[function(t,e,r){\\\"use strict\\\";e.exports={boxmode:{valType:\\\"enumerated\\\",values:[\\\"group\\\",\\\"overlay\\\"],dflt:\\\"overlay\\\",editType:\\\"calc\\\"},boxgap:{valType:\\\"number\\\",min:0,max:1,dflt:.3,editType:\\\"calc\\\"},boxgroupgap:{valType:\\\"number\\\",min:0,max:1,dflt:.3,editType:\\\"calc\\\"}}},{}],888:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"./layout_attributes\\\");function o(t,e,r,i,a){for(var o=a+\\\"Layout\\\",s=!1,l=0;l<r.length;l++){var c=r[l];if(n.traceIs(c,o)){s=!0;break}}s&&(i(a+\\\"mode\\\"),i(a+\\\"gap\\\"),i(a+\\\"groupgap\\\"))}e.exports={supplyLayoutDefaults:function(t,e,r){o(0,0,r,function(r,n){return i.coerce(t,e,a,r,n)},\\\"box\\\")},_supply:o}},{\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"./layout_attributes\\\":887}],889:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../components/drawing\\\"),o=5,s=.01;function l(t,e,r,a){var o,s,l=e.pos,c=e.val,u=a.bPos,h=a.wdPos||0,f=a.bPosPxOffset||0,p=r.whiskerwidth||0,d=r.notched||!1,g=d?1-2*r.notchwidth:1;Array.isArray(a.bdPos)?(o=a.bdPos[0],s=a.bdPos[1]):(o=a.bdPos,s=a.bdPos);var v=t.selectAll(\\\"path.box\\\").data(\\\"violin\\\"!==r.type||r.box.visible?i.identity:[]);v.enter().append(\\\"path\\\").style(\\\"vector-effect\\\",\\\"non-scaling-stroke\\\").attr(\\\"class\\\",\\\"box\\\"),v.exit().remove(),v.each(function(t){if(t.empty)return\\\"M0,0Z\\\";var e=t.pos,a=l.c2p(e+u,!0)+f,v=l.c2p(e+u-o,!0)+f,m=l.c2p(e+u+s,!0)+f,y=l.c2p(e+u-h,!0)+f,x=l.c2p(e+u+h,!0)+f,b=l.c2p(e+u-o*g,!0)+f,_=l.c2p(e+u+s*g,!0)+f,w=c.c2p(t.q1,!0),k=c.c2p(t.q3,!0),T=i.constrain(c.c2p(t.med,!0),Math.min(w,k)+1,Math.max(w,k)-1),A=void 0===t.lf||!1===r.boxpoints,M=c.c2p(A?t.min:t.lf,!0),S=c.c2p(A?t.max:t.uf,!0),E=c.c2p(t.ln,!0),C=c.c2p(t.un,!0);\\\"h\\\"===r.orientation?n.select(this).attr(\\\"d\\\",\\\"M\\\"+T+\\\",\\\"+b+\\\"V\\\"+_+\\\"M\\\"+w+\\\",\\\"+v+\\\"V\\\"+m+(d?\\\"H\\\"+E+\\\"L\\\"+T+\\\",\\\"+_+\\\"L\\\"+C+\\\",\\\"+m:\\\"\\\")+\\\"H\\\"+k+\\\"V\\\"+v+(d?\\\"H\\\"+C+\\\"L\\\"+T+\\\",\\\"+b+\\\"L\\\"+E+\\\",\\\"+v:\\\"\\\")+\\\"ZM\\\"+w+\\\",\\\"+a+\\\"H\\\"+M+\\\"M\\\"+k+\\\",\\\"+a+\\\"H\\\"+S+(0===p?\\\"\\\":\\\"M\\\"+M+\\\",\\\"+y+\\\"V\\\"+x+\\\"M\\\"+S+\\\",\\\"+y+\\\"V\\\"+x)):n.select(this).attr(\\\"d\\\",\\\"M\\\"+b+\\\",\\\"+T+\\\"H\\\"+_+\\\"M\\\"+v+\\\",\\\"+w+\\\"H\\\"+m+(d?\\\"V\\\"+E+\\\"L\\\"+_+\\\",\\\"+T+\\\"L\\\"+m+\\\",\\\"+C:\\\"\\\")+\\\"V\\\"+k+\\\"H\\\"+v+(d?\\\"V\\\"+C+\\\"L\\\"+b+\\\",\\\"+T+\\\"L\\\"+v+\\\",\\\"+E:\\\"\\\")+\\\"ZM\\\"+a+\\\",\\\"+w+\\\"V\\\"+M+\\\"M\\\"+a+\\\",\\\"+k+\\\"V\\\"+S+(0===p?\\\"\\\":\\\"M\\\"+y+\\\",\\\"+M+\\\"H\\\"+x+\\\"M\\\"+y+\\\",\\\"+S+\\\"H\\\"+x))})}function c(t,e,r,n){var l=e.x,c=e.y,u=n.bdPos,h=n.bPos,f=r.boxpoints||r.points;i.seedPseudoRandom();var p=t.selectAll(\\\"g.points\\\").data(f?function(t){return t.forEach(function(t){t.t=n,t.trace=r}),t}:[]);p.enter().append(\\\"g\\\").attr(\\\"class\\\",\\\"points\\\"),p.exit().remove();var d=p.selectAll(\\\"path\\\").data(function(t){var e,n,a=t.pts2,l=Math.max((t.max-t.min)/10,t.q3-t.q1),c=1e-9*l,p=l*s,d=[],g=0;if(r.jitter){if(0===l)for(g=1,d=new Array(a.length),e=0;e<a.length;e++)d[e]=1;else for(e=0;e<a.length;e++){var v=Math.max(0,e-o),m=a[v].v,y=Math.min(a.length-1,e+o),x=a[y].v;\\\"all\\\"!==f&&(a[e].v<t.lf?x=Math.min(x,t.lf):m=Math.max(m,t.uf));var b=Math.sqrt(p*(y-v)/(x-m+c))||0;b=i.constrain(Math.abs(b),0,1),d.push(b),g=Math.max(b,g)}n=2*r.jitter/(g||1)}for(e=0;e<a.length;e++){var _=a[e],w=_.v,k=r.jitter?n*d[e]*(i.pseudoRandom()-.5):0,T=t.pos+h+u*(r.pointpos+k);\\\"h\\\"===r.orientation?(_.y=T,_.x=w):(_.x=T,_.y=w),\\\"suspectedoutliers\\\"===f&&w<t.uo&&w>t.lo&&(_.so=!0)}return a});d.enter().append(\\\"path\\\").classed(\\\"point\\\",!0),d.exit().remove(),d.call(a.translatePoints,l,c)}function u(t,e,r,a){var o,s,l=e.pos,c=e.val,u=a.bPos,h=a.bPosPxOffset||0,f=r.boxmean||(r.meanline||{}).visible;Array.isArray(a.bdPos)?(o=a.bdPos[0],s=a.bdPos[1]):(o=a.bdPos,s=a.bdPos);var p=t.selectAll(\\\"path.mean\\\").data(\\\"box\\\"===r.type&&r.boxmean||\\\"violin\\\"===r.type&&r.box.visible&&r.meanline.visible?i.identity:[]);p.enter().append(\\\"path\\\").attr(\\\"class\\\",\\\"mean\\\").style({fill:\\\"none\\\",\\\"vector-effect\\\":\\\"non-scaling-stroke\\\"}),p.exit().remove(),p.each(function(t){var e=l.c2p(t.pos+u,!0)+h,i=l.c2p(t.pos+u-o,!0)+h,a=l.c2p(t.pos+u+s,!0)+h,p=c.c2p(t.mean,!0),d=c.c2p(t.mean-t.sd,!0),g=c.c2p(t.mean+t.sd,!0);\\\"h\\\"===r.orientation?n.select(this).attr(\\\"d\\\",\\\"M\\\"+p+\\\",\\\"+i+\\\"V\\\"+a+(\\\"sd\\\"===f?\\\"m0,0L\\\"+d+\\\",\\\"+e+\\\"L\\\"+p+\\\",\\\"+i+\\\"L\\\"+g+\\\",\\\"+e+\\\"Z\\\":\\\"\\\")):n.select(this).attr(\\\"d\\\",\\\"M\\\"+i+\\\",\\\"+p+\\\"H\\\"+a+(\\\"sd\\\"===f?\\\"m0,0L\\\"+e+\\\",\\\"+d+\\\"L\\\"+i+\\\",\\\"+p+\\\"L\\\"+e+\\\",\\\"+g+\\\"Z\\\":\\\"\\\"))})}e.exports={plot:function(t,e,r,a){var o=e.xaxis,s=e.yaxis;i.makeTraceGroups(a,r,\\\"trace boxes\\\").each(function(t){var e,r,i=n.select(this),a=t[0],h=a.t,f=a.trace;h.wdPos=h.bdPos*f.whiskerwidth,!0!==f.visible||h.empty?i.remove():(\\\"h\\\"===f.orientation?(e=s,r=o):(e=o,r=s),l(i,{pos:e,val:r},f,h),c(i,{x:o,y:s},f,h),u(i,{pos:e,val:r},f,h))})},plotBoxAndWhiskers:l,plotPoints:c,plotBoxMean:u}},{\\\"../../components/drawing\\\":614,\\\"../../lib\\\":719,d3:163}],890:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){var r,n,i=t.cd,a=t.xaxis,o=t.yaxis,s=[];if(!1===e)for(r=0;r<i.length;r++)for(n=0;n<(i[r].pts||[]).length;n++)i[r].pts[n].selected=0;else for(r=0;r<i.length;r++)for(n=0;n<(i[r].pts||[]).length;n++){var l=i[r].pts[n],c=a.c2p(l.x),u=o.c2p(l.y);e.contains([c,u],null,l.i,t)?(s.push({pointNumber:l.i,x:a.c2d(l.x),y:o.c2d(l.y)}),l.selected=1):l.selected=0}return s}},{}],891:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../components/color\\\"),a=t(\\\"../../components/drawing\\\");e.exports={style:function(t,e,r){var o=r||n.select(t).selectAll(\\\"g.trace.boxes\\\");o.style(\\\"opacity\\\",function(t){return t[0].trace.opacity}),o.each(function(e){var r=n.select(this),o=e[0].trace,s=o.line.width;function l(t,e,r,n){t.style(\\\"stroke-width\\\",e+\\\"px\\\").call(i.stroke,r).call(i.fill,n)}var c=r.selectAll(\\\"path.box\\\");if(\\\"candlestick\\\"===o.type)c.each(function(t){if(!t.empty){var e=n.select(this),r=o[t.dir];l(e,r.line.width,r.line.color,r.fillcolor),e.style(\\\"opacity\\\",o.selectedpoints&&!t.selected?.3:1)}});else{l(c,s,o.line.color,o.fillcolor),r.selectAll(\\\"path.mean\\\").style({\\\"stroke-width\\\":s,\\\"stroke-dasharray\\\":2*s+\\\"px,\\\"+s+\\\"px\\\"}).call(i.stroke,o.line.color);var u=r.selectAll(\\\"path.point\\\");a.pointStyle(u,o,t)}})},styleOnSelect:function(t,e,r){var n=e[0].trace,i=r.selectAll(\\\"path.point\\\");n.selectedpoints?a.selectedPointStyle(i,n):a.pointStyle(i,n,t)}}},{\\\"../../components/color\\\":593,\\\"../../components/drawing\\\":614,d3:163}],892:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\").extendFlat,i=t(\\\"../ohlc/attributes\\\"),a=t(\\\"../box/attributes\\\");function o(t){return{line:{color:n({},a.line.color,{dflt:t}),width:a.line.width,editType:\\\"style\\\"},fillcolor:a.fillcolor,editType:\\\"style\\\"}}e.exports={x:i.x,open:i.open,high:i.high,low:i.low,close:i.close,line:{width:n({},a.line.width,{}),editType:\\\"style\\\"},increasing:o(i.increasing.line.color.dflt),decreasing:o(i.decreasing.line.color.dflt),text:i.text,hovertext:i.hovertext,whiskerwidth:n({},a.whiskerwidth,{dflt:0}),hoverlabel:i.hoverlabel}},{\\\"../../lib\\\":719,\\\"../box/attributes\\\":880,\\\"../ohlc/attributes\\\":1058}],893:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../plots/cartesian/axes\\\"),a=t(\\\"../ohlc/calc\\\").calcCommon;function o(t,e,r,n){return{min:r,q1:Math.min(t,n),med:n,q3:Math.max(t,n),max:e}}e.exports=function(t,e){var r=t._fullLayout,s=i.getFromId(t,e.xaxis),l=i.getFromId(t,e.yaxis),c=s.makeCalcdata(e,\\\"x\\\"),u=a(t,e,c,l,o);return u.length?(n.extendFlat(u[0].t,{num:r._numBoxes,dPos:n.distinctVals(c).minDiff/2,posLetter:\\\"x\\\",valLetter:\\\"y\\\"}),r._numBoxes++,u):[{t:{empty:!0}}]}},{\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767,\\\"../ohlc/calc\\\":1059}],894:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../components/color\\\"),a=t(\\\"../ohlc/ohlc_defaults\\\"),o=t(\\\"./attributes\\\");function s(t,e,r,n){var a=r(n+\\\".line.color\\\");r(n+\\\".line.width\\\",e.line.width),r(n+\\\".fillcolor\\\",i.addOpacity(a,.5))}e.exports=function(t,e,r,i){function l(r,i){return n.coerce(t,e,o,r,i)}a(t,e,l,i)?(l(\\\"line.width\\\"),s(t,e,l,\\\"increasing\\\"),s(t,e,l,\\\"decreasing\\\"),l(\\\"text\\\"),l(\\\"hovertext\\\"),l(\\\"whiskerwidth\\\"),i._requestRangeslider[e.xaxis]=!0):e.visible=!1}},{\\\"../../components/color\\\":593,\\\"../../lib\\\":719,\\\"../ohlc/ohlc_defaults\\\":1063,\\\"./attributes\\\":892}],895:[function(t,e,r){\\\"use strict\\\";e.exports={moduleType:\\\"trace\\\",name:\\\"candlestick\\\",basePlotModule:t(\\\"../../plots/cartesian\\\"),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"showLegend\\\",\\\"candlestick\\\",\\\"boxLayout\\\"],meta:{},attributes:t(\\\"./attributes\\\"),layoutAttributes:t(\\\"../box/layout_attributes\\\"),supplyLayoutDefaults:t(\\\"../box/layout_defaults\\\").supplyLayoutDefaults,crossTraceCalc:t(\\\"../box/cross_trace_calc\\\").crossTraceCalc,supplyDefaults:t(\\\"./defaults\\\"),calc:t(\\\"./calc\\\"),plot:t(\\\"../box/plot\\\").plot,layerName:\\\"boxlayer\\\",style:t(\\\"../box/style\\\").style,hoverPoints:t(\\\"../ohlc/hover\\\").hoverPoints,selectPoints:t(\\\"../ohlc/select\\\")}},{\\\"../../plots/cartesian\\\":778,\\\"../box/cross_trace_calc\\\":882,\\\"../box/layout_attributes\\\":887,\\\"../box/layout_defaults\\\":888,\\\"../box/plot\\\":889,\\\"../box/style\\\":891,\\\"../ohlc/hover\\\":1061,\\\"../ohlc/select\\\":1065,\\\"./attributes\\\":892,\\\"./calc\\\":893,\\\"./defaults\\\":894}],896:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./axis_defaults\\\"),i=t(\\\"../../plot_api/plot_template\\\");e.exports=function(t,e,r,a,o){a(\\\"a\\\")||(a(\\\"da\\\"),a(\\\"a0\\\")),a(\\\"b\\\")||(a(\\\"db\\\"),a(\\\"b0\\\")),function(t,e,r,a){[\\\"aaxis\\\",\\\"baxis\\\"].forEach(function(o){var s=o.charAt(0),l=t[o]||{},c=i.newContainer(e,o),u={tickfont:\\\"x\\\",id:s+\\\"axis\\\",letter:s,font:e.font,name:o,data:t[s],calendar:e.calendar,dfltColor:a,bgColor:r.paper_bgcolor,fullLayout:r};n(l,c,u),c._categories=c._categories||[],t[o]||\\\"-\\\"===l.type||(t[o]={type:l.type})})}(t,e,r,o)}},{\\\"../../plot_api/plot_template\\\":757,\\\"./axis_defaults\\\":901}],897:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\").isArrayOrTypedArray;e.exports=function(t){return function t(e,r){if(!n(e)||r>=10)return null;var i=1/0;var a=-1/0;var o=e.length;for(var s=0;s<o;s++){var l=e[s];if(n(l)){var c=t(l,r+1);c&&(i=Math.min(c[0],i),a=Math.max(c[1],a))}else i=Math.min(l,i),a=Math.max(l,a)}return[i,a]}(t,0)}},{\\\"../../lib\\\":719}],898:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/font_attributes\\\"),i=t(\\\"./axis_attributes\\\"),a=t(\\\"../../components/color/attributes\\\"),o=n({editType:\\\"calc\\\"});o.family.dflt='\\\"Open Sans\\\", verdana, arial, sans-serif',o.size.dflt=12,o.color.dflt=a.defaultLine,e.exports={carpet:{valType:\\\"string\\\",editType:\\\"calc\\\"},x:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},y:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},a:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},a0:{valType:\\\"number\\\",dflt:0,editType:\\\"calc\\\"},da:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\"},b:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},b0:{valType:\\\"number\\\",dflt:0,editType:\\\"calc\\\"},db:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\"},cheaterslope:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\"},aaxis:i,baxis:i,font:o,color:{valType:\\\"color\\\",dflt:a.defaultLine,editType:\\\"plot\\\"},transforms:void 0}},{\\\"../../components/color/attributes\\\":592,\\\"../../plots/font_attributes\\\":793,\\\"./axis_attributes\\\":900}],899:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\").isArrayOrTypedArray;e.exports=function(t,e,r,i){var a,o,s,l,c,u,h,f,p,d,g,v,m,y=n(r)?\\\"a\\\":\\\"b\\\",x=(\\\"a\\\"===y?t.aaxis:t.baxis).smoothing,b=\\\"a\\\"===y?t.a2i:t.b2j,_=\\\"a\\\"===y?r:i,w=\\\"a\\\"===y?i:r,k=\\\"a\\\"===y?e.a.length:e.b.length,T=\\\"a\\\"===y?e.b.length:e.a.length,A=Math.floor(\\\"a\\\"===y?t.b2j(w):t.a2i(w)),M=\\\"a\\\"===y?function(e){return t.evalxy([],e,A)}:function(e){return t.evalxy([],A,e)};x&&(s=Math.max(0,Math.min(T-2,A)),l=A-s,o=\\\"a\\\"===y?function(e,r){return t.dxydi([],e,s,r,l)}:function(e,r){return t.dxydj([],s,e,l,r)});var S=b(_[0]),E=b(_[1]),C=S<E?1:-1,L=1e-8*(E-S),P=C>0?Math.floor:Math.ceil,O=C>0?Math.ceil:Math.floor,z=C>0?Math.min:Math.max,I=C>0?Math.max:Math.min,D=P(S+L),R=O(E-L),F=[[h=M(S)]];for(a=D;a*C<R*C;a+=C)c=[],g=I(S,a),m=(v=z(E,a+C))-g,u=Math.max(0,Math.min(k-2,Math.floor(.5*(g+v)))),f=M(v),x&&(p=o(u,g-u),d=o(u,v-u),c.push([h[0]+p[0]/3*m,h[1]+p[1]/3*m]),c.push([f[0]-d[0]/3*m,f[1]-d[1]/3*m])),c.push(f),F.push(c),h=f;return F}},{\\\"../../lib\\\":719}],900:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/font_attributes\\\"),i=t(\\\"../../components/color/attributes\\\"),a=t(\\\"../../plots/cartesian/layout_attributes\\\"),o=t(\\\"../../plot_api/edit_types\\\").overrideAll;t(\\\"../../constants/docs\\\").FORMAT_LINK,t(\\\"../../constants/docs\\\").TIME_FORMAT_LINK;e.exports={color:{valType:\\\"color\\\",editType:\\\"calc\\\"},smoothing:{valType:\\\"number\\\",dflt:1,min:0,max:1.3,editType:\\\"calc\\\"},title:{text:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},font:n({editType:\\\"calc\\\"}),offset:{valType:\\\"number\\\",dflt:10,editType:\\\"calc\\\"},editType:\\\"calc\\\"},type:{valType:\\\"enumerated\\\",values:[\\\"-\\\",\\\"linear\\\",\\\"date\\\",\\\"category\\\"],dflt:\\\"-\\\",editType:\\\"calc\\\"},autorange:{valType:\\\"enumerated\\\",values:[!0,!1,\\\"reversed\\\"],dflt:!0,editType:\\\"calc\\\"},rangemode:{valType:\\\"enumerated\\\",values:[\\\"normal\\\",\\\"tozero\\\",\\\"nonnegative\\\"],dflt:\\\"normal\\\",editType:\\\"calc\\\"},range:{valType:\\\"info_array\\\",editType:\\\"calc\\\",items:[{valType:\\\"any\\\",editType:\\\"calc\\\"},{valType:\\\"any\\\",editType:\\\"calc\\\"}]},fixedrange:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},cheatertype:{valType:\\\"enumerated\\\",values:[\\\"index\\\",\\\"value\\\"],dflt:\\\"value\\\",editType:\\\"calc\\\"},tickmode:{valType:\\\"enumerated\\\",values:[\\\"linear\\\",\\\"array\\\"],dflt:\\\"array\\\",editType:\\\"calc\\\"},nticks:{valType:\\\"integer\\\",min:0,dflt:0,editType:\\\"calc\\\"},tickvals:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},ticktext:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},showticklabels:{valType:\\\"enumerated\\\",values:[\\\"start\\\",\\\"end\\\",\\\"both\\\",\\\"none\\\"],dflt:\\\"start\\\",editType:\\\"calc\\\"},tickfont:n({editType:\\\"calc\\\"}),tickangle:{valType:\\\"angle\\\",dflt:\\\"auto\\\",editType:\\\"calc\\\"},tickprefix:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},showtickprefix:{valType:\\\"enumerated\\\",values:[\\\"all\\\",\\\"first\\\",\\\"last\\\",\\\"none\\\"],dflt:\\\"all\\\",editType:\\\"calc\\\"},ticksuffix:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},showticksuffix:{valType:\\\"enumerated\\\",values:[\\\"all\\\",\\\"first\\\",\\\"last\\\",\\\"none\\\"],dflt:\\\"all\\\",editType:\\\"calc\\\"},showexponent:{valType:\\\"enumerated\\\",values:[\\\"all\\\",\\\"first\\\",\\\"last\\\",\\\"none\\\"],dflt:\\\"all\\\",editType:\\\"calc\\\"},exponentformat:{valType:\\\"enumerated\\\",values:[\\\"none\\\",\\\"e\\\",\\\"E\\\",\\\"power\\\",\\\"SI\\\",\\\"B\\\"],dflt:\\\"B\\\",editType:\\\"calc\\\"},separatethousands:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},tickformat:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},tickformatstops:o(a.tickformatstops,\\\"calc\\\",\\\"from-root\\\"),categoryorder:{valType:\\\"enumerated\\\",values:[\\\"trace\\\",\\\"category ascending\\\",\\\"category descending\\\",\\\"array\\\"],dflt:\\\"trace\\\",editType:\\\"calc\\\"},categoryarray:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},labelpadding:{valType:\\\"integer\\\",dflt:10,editType:\\\"calc\\\"},labelprefix:{valType:\\\"string\\\",editType:\\\"calc\\\"},labelsuffix:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},showline:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},linecolor:{valType:\\\"color\\\",dflt:i.defaultLine,editType:\\\"calc\\\"},linewidth:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"calc\\\"},gridcolor:{valType:\\\"color\\\",editType:\\\"calc\\\"},gridwidth:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"calc\\\"},showgrid:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},minorgridcount:{valType:\\\"integer\\\",min:0,dflt:0,editType:\\\"calc\\\"},minorgridwidth:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"calc\\\"},minorgridcolor:{valType:\\\"color\\\",dflt:i.lightLine,editType:\\\"calc\\\"},startline:{valType:\\\"boolean\\\",editType:\\\"calc\\\"},startlinecolor:{valType:\\\"color\\\",editType:\\\"calc\\\"},startlinewidth:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\"},endline:{valType:\\\"boolean\\\",editType:\\\"calc\\\"},endlinewidth:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\"},endlinecolor:{valType:\\\"color\\\",editType:\\\"calc\\\"},tick0:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"calc\\\"},dtick:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"calc\\\"},arraytick0:{valType:\\\"integer\\\",min:0,dflt:0,editType:\\\"calc\\\"},arraydtick:{valType:\\\"integer\\\",min:1,dflt:1,editType:\\\"calc\\\"},_deprecated:{title:{valType:\\\"string\\\",editType:\\\"calc\\\"},titlefont:n({editType:\\\"calc\\\"}),titleoffset:{valType:\\\"number\\\",dflt:10,editType:\\\"calc\\\"}},editType:\\\"calc\\\"}},{\\\"../../components/color/attributes\\\":592,\\\"../../constants/docs\\\":690,\\\"../../plot_api/edit_types\\\":750,\\\"../../plots/cartesian/layout_attributes\\\":779,\\\"../../plots/font_attributes\\\":793}],901:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./attributes\\\"),i=t(\\\"../../components/color\\\").addOpacity,a=t(\\\"../../registry\\\"),o=t(\\\"../../lib\\\"),s=t(\\\"../../plots/cartesian/tick_value_defaults\\\"),l=t(\\\"../../plots/cartesian/tick_label_defaults\\\"),c=t(\\\"../../plots/cartesian/category_order_defaults\\\"),u=t(\\\"../../plots/cartesian/set_convert\\\"),h=t(\\\"../../plots/cartesian/axis_autotype\\\");e.exports=function(t,e,r){var f=r.letter,p=r.font||{},d=n[f+\\\"axis\\\"];function g(r,n){return o.coerce(t,e,d,r,n)}function v(r,n){return o.coerce2(t,e,d,r,n)}r.name&&(e._name=r.name,e._id=r.name);var m=g(\\\"type\\\");(\\\"-\\\"===m&&(r.data&&function(t,e){if(\\\"-\\\"!==t.type)return;var r=t._id.charAt(0),n=t[r+\\\"calendar\\\"];t.type=h(e,n)}(e,r.data),\\\"-\\\"===e.type?e.type=\\\"linear\\\":m=t.type=e.type),g(\\\"smoothing\\\"),g(\\\"cheatertype\\\"),g(\\\"showticklabels\\\"),g(\\\"labelprefix\\\",f+\\\" = \\\"),g(\\\"labelsuffix\\\"),g(\\\"showtickprefix\\\"),g(\\\"showticksuffix\\\"),g(\\\"separatethousands\\\"),g(\\\"tickformat\\\"),g(\\\"exponentformat\\\"),g(\\\"showexponent\\\"),g(\\\"categoryorder\\\"),g(\\\"tickmode\\\"),g(\\\"tickvals\\\"),g(\\\"ticktext\\\"),g(\\\"tick0\\\"),g(\\\"dtick\\\"),\\\"array\\\"===e.tickmode&&(g(\\\"arraytick0\\\"),g(\\\"arraydtick\\\")),g(\\\"labelpadding\\\"),e._hovertitle=f,\\\"date\\\"===m)&&a.getComponentMethod(\\\"calendars\\\",\\\"handleDefaults\\\")(t,e,\\\"calendar\\\",r.calendar);u(e,r.fullLayout),e.c2p=o.identity;var y=g(\\\"color\\\",r.dfltColor),x=y===t.color?y:p.color;g(\\\"title.text\\\")&&(o.coerceFont(g,\\\"title.font\\\",{family:p.family,size:Math.round(1.2*p.size),color:x}),g(\\\"title.offset\\\")),g(\\\"tickangle\\\"),g(\\\"autorange\\\",!e.isValidRange(t.range))&&g(\\\"rangemode\\\"),g(\\\"range\\\"),e.cleanRange(),g(\\\"fixedrange\\\"),s(t,e,g,m),l(t,e,g,m,r),c(t,e,g,{data:r.data,dataAttr:f});var b=v(\\\"gridcolor\\\",i(y,.3)),_=v(\\\"gridwidth\\\"),w=g(\\\"showgrid\\\");w||(delete e.gridcolor,delete e.gridwidth);var k=v(\\\"startlinecolor\\\",y),T=v(\\\"startlinewidth\\\",_);g(\\\"startline\\\",e.showgrid||!!k||!!T)||(delete e.startlinecolor,delete e.startlinewidth);var A=v(\\\"endlinecolor\\\",y),M=v(\\\"endlinewidth\\\",_);return g(\\\"endline\\\",e.showgrid||!!A||!!M)||(delete e.endlinecolor,delete e.endlinewidth),w?(g(\\\"minorgridcount\\\"),g(\\\"minorgridwidth\\\",_),g(\\\"minorgridcolor\\\",i(b,.06)),e.minorgridcount||(delete e.minorgridwidth,delete e.minorgridcolor)):(delete e.gridcolor,delete e.gridWidth),\\\"none\\\"===e.showticklabels&&(delete e.tickfont,delete e.tickangle,delete e.showexponent,delete e.exponentformat,delete e.tickformat,delete e.showticksuffix,delete e.showtickprefix),e.showticksuffix||delete e.ticksuffix,e.showtickprefix||delete e.tickprefix,g(\\\"tickmode\\\"),e}},{\\\"../../components/color\\\":593,\\\"../../lib\\\":719,\\\"../../plots/cartesian/axis_autotype\\\":768,\\\"../../plots/cartesian/category_order_defaults\\\":771,\\\"../../plots/cartesian/set_convert\\\":785,\\\"../../plots/cartesian/tick_label_defaults\\\":786,\\\"../../plots/cartesian/tick_value_defaults\\\":788,\\\"../../registry\\\":847,\\\"./attributes\\\":898}],902:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/cartesian/axes\\\"),i=t(\\\"../../lib\\\").isArray1D,a=t(\\\"./cheater_basis\\\"),o=t(\\\"./array_minmax\\\"),s=t(\\\"./calc_gridlines\\\"),l=t(\\\"./calc_labels\\\"),c=t(\\\"./calc_clippath\\\"),u=t(\\\"../heatmap/clean_2d_array\\\"),h=t(\\\"./smooth_fill_2d_array\\\"),f=t(\\\"../heatmap/convert_column_xyz\\\"),p=t(\\\"./set_convert\\\");e.exports=function(t,e){var r=n.getFromId(t,e.xaxis),d=n.getFromId(t,e.yaxis),g=e.aaxis,v=e.baxis,m=e.x,y=e.y,x=[];m&&i(m)&&x.push(\\\"x\\\"),y&&i(y)&&x.push(\\\"y\\\"),x.length&&f(e,g,v,\\\"a\\\",\\\"b\\\",x);var b=e._a=e._a||e.a,_=e._b=e._b||e.b;m=e._x||e.x,y=e._y||e.y;var w={};if(e._cheater){var k=\\\"index\\\"===g.cheatertype?b.length:b,T=\\\"index\\\"===v.cheatertype?_.length:_;m=a(k,T,e.cheaterslope)}e._x=m=u(m),e._y=y=u(y),h(m,b,_),h(y,b,_),p(e),e.setScale();var A=o(m),M=o(y),S=.5*(A[1]-A[0]),E=.5*(A[1]+A[0]),C=.5*(M[1]-M[0]),L=.5*(M[1]+M[0]);return A=[E-1.3*S,E+1.3*S],M=[L-1.3*C,L+1.3*C],e._extremes[r._id]=n.findExtremes(r,A,{padded:!0}),e._extremes[d._id]=n.findExtremes(d,M,{padded:!0}),s(e,\\\"a\\\",\\\"b\\\"),s(e,\\\"b\\\",\\\"a\\\"),l(e,g),l(e,v),w.clipsegments=c(e._xctrl,e._yctrl,g,v),w.x=m,w.y=y,w.a=b,w.b=_,[w]}},{\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767,\\\"../heatmap/clean_2d_array\\\":1003,\\\"../heatmap/convert_column_xyz\\\":1005,\\\"./array_minmax\\\":897,\\\"./calc_clippath\\\":903,\\\"./calc_gridlines\\\":904,\\\"./calc_labels\\\":905,\\\"./cheater_basis\\\":907,\\\"./set_convert\\\":920,\\\"./smooth_fill_2d_array\\\":921}],903:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,n){var i,a,o,s=[],l=!!r.smoothing,c=!!n.smoothing,u=t[0].length-1,h=t.length-1;for(i=0,a=[],o=[];i<=u;i++)a[i]=t[0][i],o[i]=e[0][i];for(s.push({x:a,y:o,bicubic:l}),i=0,a=[],o=[];i<=h;i++)a[i]=t[i][u],o[i]=e[i][u];for(s.push({x:a,y:o,bicubic:c}),i=u,a=[],o=[];i>=0;i--)a[u-i]=t[h][i],o[u-i]=e[h][i];for(s.push({x:a,y:o,bicubic:l}),i=h,a=[],o=[];i>=0;i--)a[h-i]=t[i][0],o[h-i]=e[i][0];return s.push({x:a,y:o,bicubic:c}),s}},{}],904:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/cartesian/axes\\\"),i=t(\\\"../../lib/extend\\\").extendFlat;e.exports=function(t,e,r){var a,o,s,l,c,u,h,f,p,d,g,v,m,y,x=t[\\\"_\\\"+e],b=t[e+\\\"axis\\\"],_=b._gridlines=[],w=b._minorgridlines=[],k=b._boundarylines=[],T=t[\\\"_\\\"+r],A=t[r+\\\"axis\\\"];\\\"array\\\"===b.tickmode&&(b.tickvals=x.slice());var M=t._xctrl,S=t._yctrl,E=M[0].length,C=M.length,L=t._a.length,P=t._b.length;n.prepTicks(b),\\\"array\\\"===b.tickmode&&delete b.tickvals;var O=b.smoothing?3:1;function z(n){var i,a,o,s,l,c,u,h,p,d,g,v,m=[],y=[],x={};if(\\\"b\\\"===e)for(a=t.b2j(n),o=Math.floor(Math.max(0,Math.min(P-2,a))),s=a-o,x.length=P,x.crossLength=L,x.xy=function(e){return t.evalxy([],e,a)},x.dxy=function(e,r){return t.dxydi([],e,o,r,s)},i=0;i<L;i++)c=Math.min(L-2,i),u=i-c,h=t.evalxy([],i,a),A.smoothing&&i>0&&(p=t.dxydi([],i-1,o,0,s),m.push(l[0]+p[0]/3),y.push(l[1]+p[1]/3),d=t.dxydi([],i-1,o,1,s),m.push(h[0]-d[0]/3),y.push(h[1]-d[1]/3)),m.push(h[0]),y.push(h[1]),l=h;else for(i=t.a2i(n),c=Math.floor(Math.max(0,Math.min(L-2,i))),u=i-c,x.length=L,x.crossLength=P,x.xy=function(e){return t.evalxy([],i,e)},x.dxy=function(e,r){return t.dxydj([],c,e,u,r)},a=0;a<P;a++)o=Math.min(P-2,a),s=a-o,h=t.evalxy([],i,a),A.smoothing&&a>0&&(g=t.dxydj([],c,a-1,u,0),m.push(l[0]+g[0]/3),y.push(l[1]+g[1]/3),v=t.dxydj([],c,a-1,u,1),m.push(h[0]-v[0]/3),y.push(h[1]-v[1]/3)),m.push(h[0]),y.push(h[1]),l=h;return x.axisLetter=e,x.axis=b,x.crossAxis=A,x.value=n,x.constvar=r,x.index=f,x.x=m,x.y=y,x.smoothing=A.smoothing,x}function I(n){var i,a,o,s,l,c=[],u=[],h={};if(h.length=x.length,h.crossLength=T.length,\\\"b\\\"===e)for(o=Math.max(0,Math.min(P-2,n)),l=Math.min(1,Math.max(0,n-o)),h.xy=function(e){return t.evalxy([],e,n)},h.dxy=function(e,r){return t.dxydi([],e,o,r,l)},i=0;i<E;i++)c[i]=M[n*O][i],u[i]=S[n*O][i];else for(a=Math.max(0,Math.min(L-2,n)),s=Math.min(1,Math.max(0,n-a)),h.xy=function(e){return t.evalxy([],n,e)},h.dxy=function(e,r){return t.dxydj([],a,e,s,r)},i=0;i<C;i++)c[i]=M[i][n*O],u[i]=S[i][n*O];return h.axisLetter=e,h.axis=b,h.crossAxis=A,h.value=x[n],h.constvar=r,h.index=n,h.x=c,h.y=u,h.smoothing=A.smoothing,h}if(\\\"array\\\"===b.tickmode){for(l=5e-15,u=(c=[Math.floor((x.length-1-b.arraytick0)/b.arraydtick*(1+l)),Math.ceil(-b.arraytick0/b.arraydtick/(1+l))].sort(function(t,e){return t-e}))[0]-1,h=c[1]+1,f=u;f<h;f++)(o=b.arraytick0+b.arraydtick*f)<0||o>x.length-1||_.push(i(I(o),{color:b.gridcolor,width:b.gridwidth}));for(f=u;f<h;f++)if(s=b.arraytick0+b.arraydtick*f,g=Math.min(s+b.arraydtick,x.length-1),!(s<0||s>x.length-1||g<0||g>x.length-1))for(v=x[s],m=x[g],a=0;a<b.minorgridcount;a++)(y=g-s)<=0||(d=v+(m-v)*(a+1)/(b.minorgridcount+1)*(b.arraydtick/y))<x[0]||d>x[x.length-1]||w.push(i(z(d),{color:b.minorgridcolor,width:b.minorgridwidth}));b.startline&&k.push(i(I(0),{color:b.startlinecolor,width:b.startlinewidth})),b.endline&&k.push(i(I(x.length-1),{color:b.endlinecolor,width:b.endlinewidth}))}else{for(l=5e-15,u=(c=[Math.floor((x[x.length-1]-b.tick0)/b.dtick*(1+l)),Math.ceil((x[0]-b.tick0)/b.dtick/(1+l))].sort(function(t,e){return t-e}))[0],h=c[1],f=u;f<=h;f++)p=b.tick0+b.dtick*f,_.push(i(z(p),{color:b.gridcolor,width:b.gridwidth}));for(f=u-1;f<h+1;f++)for(p=b.tick0+b.dtick*f,a=0;a<b.minorgridcount;a++)(d=p+b.dtick*(a+1)/(b.minorgridcount+1))<x[0]||d>x[x.length-1]||w.push(i(z(d),{color:b.minorgridcolor,width:b.minorgridwidth}));b.startline&&k.push(i(z(x[0]),{color:b.startlinecolor,width:b.startlinewidth})),b.endline&&k.push(i(z(x[x.length-1]),{color:b.endlinecolor,width:b.endlinewidth}))}}},{\\\"../../lib/extend\\\":710,\\\"../../plots/cartesian/axes\\\":767}],905:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/cartesian/axes\\\"),i=t(\\\"../../lib/extend\\\").extendFlat;e.exports=function(t,e){var r,a,o,s=e._labels=[],l=e._gridlines;for(r=0;r<l.length;r++)o=l[r],-1!==[\\\"start\\\",\\\"both\\\"].indexOf(e.showticklabels)&&(a=n.tickText(e,o.value),i(a,{prefix:void 0,suffix:void 0,endAnchor:!0,xy:o.xy(0),dxy:o.dxy(0,0),axis:o.axis,length:o.crossAxis.length,font:o.axis.tickfont,isFirst:0===r,isLast:r===l.length-1}),s.push(a)),-1!==[\\\"end\\\",\\\"both\\\"].indexOf(e.showticklabels)&&(a=n.tickText(e,o.value),i(a,{endAnchor:!1,xy:o.xy(o.crossLength-1),dxy:o.dxy(o.crossLength-2,1),axis:o.axis,length:o.crossAxis.length,font:o.axis.tickfont,isFirst:0===r,isLast:r===l.length-1}),s.push(a))}},{\\\"../../lib/extend\\\":710,\\\"../../plots/cartesian/axes\\\":767}],906:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,n){var i=t[0]-e[0],a=t[1]-e[1],o=r[0]-e[0],s=r[1]-e[1],l=Math.pow(i*i+a*a,.25),c=Math.pow(o*o+s*s,.25),u=(c*c*i-l*l*o)*n,h=(c*c*a-l*l*s)*n,f=c*(l+c)*3,p=l*(l+c)*3;return[[e[0]+(f&&u/f),e[1]+(f&&h/f)],[e[0]-(p&&u/p),e[1]-(p&&h/p)]]}},{}],907:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\").isArrayOrTypedArray;e.exports=function(t,e,r){var i,a,o,s,l,c,u=[],h=n(t)?t.length:t,f=n(e)?e.length:e,p=n(t)?t:null,d=n(e)?e:null;p&&(o=(p.length-1)/(p[p.length-1]-p[0])/(h-1)),d&&(s=(d.length-1)/(d[d.length-1]-d[0])/(f-1));var g=1/0,v=-1/0;for(a=0;a<f;a++)for(u[a]=[],l=d?(d[a]-d[0])*s:a/(f-1),i=0;i<h;i++)c=(p?(p[i]-p[0])*o:i/(h-1))-l*r,g=Math.min(c,g),v=Math.max(c,v),u[a][i]=c;var m=1/(v-g),y=-g*m;for(a=0;a<f;a++)for(i=0;i<h;i++)u[a][i]=m*u[a][i]+y;return u}},{\\\"../../lib\\\":719}],908:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./catmull_rom\\\"),i=t(\\\"../../lib\\\").ensureArray;function a(t,e,r){var n=-.5*r[0]+1.5*e[0],i=-.5*r[1]+1.5*e[1];return[(2*n+t[0])/3,(2*i+t[1])/3]}e.exports=function(t,e,r,o,s,l){var c,u,h,f,p,d,g,v,m,y,x=r[0].length,b=r.length,_=s?3*x-2:x,w=l?3*b-2:b;for(t=i(t,w),e=i(e,w),h=0;h<w;h++)t[h]=i(t[h],_),e[h]=i(e[h],_);for(u=0,f=0;u<b;u++,f+=l?3:1)for(p=t[f],d=e[f],g=r[u],v=o[u],c=0,h=0;c<x;c++,h+=s?3:1)p[h]=g[c],d[h]=v[c];if(s)for(u=0,f=0;u<b;u++,f+=l?3:1){for(c=1,h=3;c<x-1;c++,h+=3)m=n([r[u][c-1],o[u][c-1]],[r[u][c],o[u][c]],[r[u][c+1],o[u][c+1]],s),t[f][h-1]=m[0][0],e[f][h-1]=m[0][1],t[f][h+1]=m[1][0],e[f][h+1]=m[1][1];y=a([t[f][0],e[f][0]],[t[f][2],e[f][2]],[t[f][3],e[f][3]]),t[f][1]=y[0],e[f][1]=y[1],y=a([t[f][_-1],e[f][_-1]],[t[f][_-3],e[f][_-3]],[t[f][_-4],e[f][_-4]]),t[f][_-2]=y[0],e[f][_-2]=y[1]}if(l)for(h=0;h<_;h++){for(f=3;f<w-3;f+=3)m=n([t[f-3][h],e[f-3][h]],[t[f][h],e[f][h]],[t[f+3][h],e[f+3][h]],l),t[f-1][h]=m[0][0],e[f-1][h]=m[0][1],t[f+1][h]=m[1][0],e[f+1][h]=m[1][1];y=a([t[0][h],e[0][h]],[t[2][h],e[2][h]],[t[3][h],e[3][h]]),t[1][h]=y[0],e[1][h]=y[1],y=a([t[w-1][h],e[w-1][h]],[t[w-3][h],e[w-3][h]],[t[w-4][h],e[w-4][h]]),t[w-2][h]=y[0],e[w-2][h]=y[1]}if(s&&l)for(f=1;f<w;f+=(f+1)%3==0?2:1){for(h=3;h<_-3;h+=3)m=n([t[f][h-3],e[f][h-3]],[t[f][h],e[f][h]],[t[f][h+3],e[f][h+3]],s),t[f][h-1]=.5*(t[f][h-1]+m[0][0]),e[f][h-1]=.5*(e[f][h-1]+m[0][1]),t[f][h+1]=.5*(t[f][h+1]+m[1][0]),e[f][h+1]=.5*(e[f][h+1]+m[1][1]);y=a([t[f][0],e[f][0]],[t[f][2],e[f][2]],[t[f][3],e[f][3]]),t[f][1]=.5*(t[f][1]+y[0]),e[f][1]=.5*(e[f][1]+y[1]),y=a([t[f][_-1],e[f][_-1]],[t[f][_-3],e[f][_-3]],[t[f][_-4],e[f][_-4]]),t[f][_-2]=.5*(t[f][_-2]+y[0]),e[f][_-2]=.5*(e[f][_-2]+y[1])}return[t,e]}},{\\\"../../lib\\\":719,\\\"./catmull_rom\\\":906}],909:[function(t,e,r){\\\"use strict\\\";e.exports={RELATIVE_CULL_TOLERANCE:1e-6}},{}],910:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r){return e&&r?function(e,r,n,i,a){var o,s,l,c,u,h;e||(e=[]),r*=3,n*=3;var f=i*i,p=1-i,d=p*p,g=p*i*2,v=-3*d,m=3*(d-g),y=3*(g-f),x=3*f,b=a*a,_=b*a,w=1-a,k=w*w,T=k*w;for(h=0;h<t.length;h++)o=v*(u=t[h])[n][r]+m*u[n][r+1]+y*u[n][r+2]+x*u[n][r+3],s=v*u[n+1][r]+m*u[n+1][r+1]+y*u[n+1][r+2]+x*u[n+1][r+3],l=v*u[n+2][r]+m*u[n+2][r+1]+y*u[n+2][r+2]+x*u[n+2][r+3],c=v*u[n+3][r]+m*u[n+3][r+1]+y*u[n+3][r+2]+x*u[n+3][r+3],e[h]=T*o+3*(k*a*s+w*b*l)+_*c;return e}:e?function(e,r,n,i,a){var o,s,l,c;e||(e=[]),r*=3;var u=i*i,h=1-i,f=h*h,p=h*i*2,d=-3*f,g=3*(f-p),v=3*(p-u),m=3*u,y=1-a;for(l=0;l<t.length;l++)o=d*(c=t[l])[n][r]+g*c[n][r+1]+v*c[n][r+2]+m*c[n][r+3],s=d*c[n+1][r]+g*c[n+1][r+1]+v*c[n+1][r+2]+m*c[n+1][r+3],e[l]=y*o+a*s;return e}:r?function(e,r,n,i,a){var o,s,l,c,u,h;e||(e=[]),n*=3;var f=a*a,p=f*a,d=1-a,g=d*d,v=g*d;for(u=0;u<t.length;u++)o=(h=t[u])[n][r+1]-h[n][r],s=h[n+1][r+1]-h[n+1][r],l=h[n+2][r+1]-h[n+2][r],c=h[n+3][r+1]-h[n+3][r],e[u]=v*o+3*(g*a*s+d*f*l)+p*c;return e}:function(e,r,n,i,a){var o,s,l,c;e||(e=[]);var u=1-a;for(l=0;l<t.length;l++)o=(c=t[l])[n][r+1]-c[n][r],s=c[n+1][r+1]-c[n+1][r],e[l]=u*o+a*s;return e}}},{}],911:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r){return e&&r?function(e,r,n,i,a){var o,s,l,c,u,h;e||(e=[]),r*=3,n*=3;var f=i*i,p=f*i,d=1-i,g=d*d,v=g*d,m=a*a,y=1-a,x=y*y,b=y*a*2,_=-3*x,w=3*(x-b),k=3*(b-m),T=3*m;for(h=0;h<t.length;h++)o=_*(u=t[h])[n][r]+w*u[n+1][r]+k*u[n+2][r]+T*u[n+3][r],s=_*u[n][r+1]+w*u[n+1][r+1]+k*u[n+2][r+1]+T*u[n+3][r+1],l=_*u[n][r+2]+w*u[n+1][r+2]+k*u[n+2][r+2]+T*u[n+3][r+2],c=_*u[n][r+3]+w*u[n+1][r+3]+k*u[n+2][r+3]+T*u[n+3][r+3],e[h]=v*o+3*(g*i*s+d*f*l)+p*c;return e}:e?function(e,r,n,i,a){var o,s,l,c,u,h;e||(e=[]),r*=3;var f=a*a,p=f*a,d=1-a,g=d*d,v=g*d;for(u=0;u<t.length;u++)o=(h=t[u])[n+1][r]-h[n][r],s=h[n+1][r+1]-h[n][r+1],l=h[n+1][r+2]-h[n][r+2],c=h[n+1][r+3]-h[n][r+3],e[u]=v*o+3*(g*a*s+d*f*l)+p*c;return e}:r?function(e,r,n,i,a){var o,s,l,c;e||(e=[]),n*=3;var u=1-i,h=a*a,f=1-a,p=f*f,d=f*a*2,g=-3*p,v=3*(p-d),m=3*(d-h),y=3*h;for(l=0;l<t.length;l++)o=g*(c=t[l])[n][r]+v*c[n+1][r]+m*c[n+2][r]+y*c[n+3][r],s=g*c[n][r+1]+v*c[n+1][r+1]+m*c[n+2][r+1]+y*c[n+3][r+1],e[l]=u*o+i*s;return e}:function(e,r,n,i,a){var o,s,l,c;e||(e=[]);var u=1-i;for(l=0;l<t.length;l++)o=(c=t[l])[n+1][r]-c[n][r],s=c[n+1][r+1]-c[n][r+1],e[l]=u*o+i*s;return e}}},{}],912:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,n,i){var a=e-2,o=r-2;return n&&i?function(e,r,n){var i,s,l,c,u,h;e||(e=[]);var f=Math.max(0,Math.min(Math.floor(r),a)),p=Math.max(0,Math.min(Math.floor(n),o)),d=Math.max(0,Math.min(1,r-f)),g=Math.max(0,Math.min(1,n-p));f*=3,p*=3;var v=d*d,m=v*d,y=1-d,x=y*y,b=x*y,_=g*g,w=_*g,k=1-g,T=k*k,A=T*k;for(h=0;h<t.length;h++)i=b*(u=t[h])[p][f]+3*(x*d*u[p][f+1]+y*v*u[p][f+2])+m*u[p][f+3],s=b*u[p+1][f]+3*(x*d*u[p+1][f+1]+y*v*u[p+1][f+2])+m*u[p+1][f+3],l=b*u[p+2][f]+3*(x*d*u[p+2][f+1]+y*v*u[p+2][f+2])+m*u[p+2][f+3],c=b*u[p+3][f]+3*(x*d*u[p+3][f+1]+y*v*u[p+3][f+2])+m*u[p+3][f+3],e[h]=A*i+3*(T*g*s+k*_*l)+w*c;return e}:n?function(e,r,n){e||(e=[]);var i,s,l,c,u,h,f=Math.max(0,Math.min(Math.floor(r),a)),p=Math.max(0,Math.min(Math.floor(n),o)),d=Math.max(0,Math.min(1,r-f)),g=Math.max(0,Math.min(1,n-p));f*=3;var v=d*d,m=v*d,y=1-d,x=y*y,b=x*y,_=1-g;for(u=0;u<t.length;u++)i=_*(h=t[u])[p][f]+g*h[p+1][f],s=_*h[p][f+1]+g*h[p+1][f+1],l=_*h[p][f+2]+g*h[p+1][f+1],c=_*h[p][f+3]+g*h[p+1][f+1],e[u]=b*i+3*(x*d*s+y*v*l)+m*c;return e}:i?function(e,r,n){e||(e=[]);var i,s,l,c,u,h,f=Math.max(0,Math.min(Math.floor(r),a)),p=Math.max(0,Math.min(Math.floor(n),o)),d=Math.max(0,Math.min(1,r-f)),g=Math.max(0,Math.min(1,n-p));p*=3;var v=g*g,m=v*g,y=1-g,x=y*y,b=x*y,_=1-d;for(u=0;u<t.length;u++)i=_*(h=t[u])[p][f]+d*h[p][f+1],s=_*h[p+1][f]+d*h[p+1][f+1],l=_*h[p+2][f]+d*h[p+2][f+1],c=_*h[p+3][f]+d*h[p+3][f+1],e[u]=b*i+3*(x*g*s+y*v*l)+m*c;return e}:function(e,r,n){e||(e=[]);var i,s,l,c,u=Math.max(0,Math.min(Math.floor(r),a)),h=Math.max(0,Math.min(Math.floor(n),o)),f=Math.max(0,Math.min(1,r-u)),p=Math.max(0,Math.min(1,n-h)),d=1-p,g=1-f;for(l=0;l<t.length;l++)i=g*(c=t[l])[h][u]+f*c[h][u+1],s=g*c[h+1][u]+f*c[h+1][u+1],e[l]=d*i+p*s;return e}}},{}],913:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./xy_defaults\\\"),a=t(\\\"./ab_defaults\\\"),o=t(\\\"./attributes\\\"),s=t(\\\"../../components/color/attributes\\\");e.exports=function(t,e,r,l){function c(r,i){return n.coerce(t,e,o,r,i)}e._clipPathId=\\\"clip\\\"+e.uid+\\\"carpet\\\";var u=c(\\\"color\\\",s.defaultLine);(n.coerceFont(c,\\\"font\\\"),c(\\\"carpet\\\"),a(t,e,l,c,u),e.a&&e.b)?(e.a.length<3&&(e.aaxis.smoothing=0),e.b.length<3&&(e.baxis.smoothing=0),i(t,e,c)||(e.visible=!1),e._cheater&&c(\\\"cheaterslope\\\")):e.visible=!1}},{\\\"../../components/color/attributes\\\":592,\\\"../../lib\\\":719,\\\"./ab_defaults\\\":896,\\\"./attributes\\\":898,\\\"./xy_defaults\\\":922}],914:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),plot:t(\\\"./plot\\\"),calc:t(\\\"./calc\\\"),animatable:!0,isContainer:!0,moduleType:\\\"trace\\\",name:\\\"carpet\\\",basePlotModule:t(\\\"../../plots/cartesian\\\"),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"carpet\\\",\\\"carpetAxis\\\",\\\"notLegendIsolatable\\\",\\\"noMultiCategory\\\"],meta:{}}},{\\\"../../plots/cartesian\\\":778,\\\"./attributes\\\":898,\\\"./calc\\\":902,\\\"./defaults\\\":913,\\\"./plot\\\":919}],915:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){for(var r,n=t._fullData.length,i=0;i<n;i++){var a=t._fullData[i];if(a.index!==e.index&&(\\\"carpet\\\"===a.type&&(r||(r=a),a.carpet===e.carpet)))return a}return r}},{}],916:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r){if(0===t.length)return\\\"\\\";var n,i=[],a=r?3:1;for(n=0;n<t.length;n+=a)i.push(t[n]+\\\",\\\"+e[n]),r&&n<t.length-a&&(i.push(\\\"C\\\"),i.push([t[n+1]+\\\",\\\"+e[n+1],t[n+2]+\\\",\\\"+e[n+2]+\\\" \\\"].join(\\\" \\\")));return i.join(r?\\\"\\\":\\\"L\\\")}},{}],917:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\").isArrayOrTypedArray;e.exports=function(t,e,r){var i;for(n(t)?t.length>e.length&&(t=t.slice(0,e.length)):t=[],i=0;i<e.length;i++)t[i]=r(e[i]);return t}},{\\\"../../lib\\\":719}],918:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,n,i,a){var o=i[0]*t.dpdx(e),s=i[1]*t.dpdy(r),l=1,c=1;if(a){var u=Math.sqrt(i[0]*i[0]+i[1]*i[1]),h=Math.sqrt(a[0]*a[0]+a[1]*a[1]),f=(i[0]*a[0]+i[1]*a[1])/u/h;c=Math.max(0,f)}var p=180*Math.atan2(s,o)/Math.PI;return p<-90?(p+=180,l=-l):p>90&&(p-=180,l=-l),{angle:p,flip:l,p:t.c2p(n,e,r),offsetMultplier:c}}},{}],919:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../components/drawing\\\"),a=t(\\\"./map_1d_array\\\"),o=t(\\\"./makepath\\\"),s=t(\\\"./orient_text\\\"),l=t(\\\"../../lib/svg_text_utils\\\"),c=t(\\\"../../lib\\\"),u=t(\\\"../../constants/alignment\\\");function h(t,e,r,i,s,l){var c=\\\"const-\\\"+s+\\\"-lines\\\",u=r.selectAll(\\\".\\\"+c).data(l);u.enter().append(\\\"path\\\").classed(c,!0).style(\\\"vector-effect\\\",\\\"non-scaling-stroke\\\"),u.each(function(r){var i=r,s=i.x,l=i.y,c=a([],s,t.c2p),u=a([],l,e.c2p),h=\\\"M\\\"+o(c,u,i.smoothing);n.select(this).attr(\\\"d\\\",h).style(\\\"stroke-width\\\",i.width).style(\\\"stroke\\\",i.color).style(\\\"fill\\\",\\\"none\\\")}),u.exit().remove()}function f(t,e,r,a,o,c,u,h){var f=c.selectAll(\\\"text.\\\"+h).data(u);f.enter().append(\\\"text\\\").classed(h,!0);var p=0,d={};return f.each(function(o,c){var u;if(\\\"auto\\\"===o.axis.tickangle)u=s(a,e,r,o.xy,o.dxy);else{var h=(o.axis.tickangle+180)*Math.PI/180;u=s(a,e,r,o.xy,[Math.cos(h),Math.sin(h)])}c||(d={angle:u.angle,flip:u.flip});var f=(o.endAnchor?-1:1)*u.flip,g=n.select(this).attr({\\\"text-anchor\\\":f>0?\\\"start\\\":\\\"end\\\",\\\"data-notex\\\":1}).call(i.font,o.font).text(o.text).call(l.convertToTspans,t),v=i.bBox(this);g.attr(\\\"transform\\\",\\\"translate(\\\"+u.p[0]+\\\",\\\"+u.p[1]+\\\") rotate(\\\"+u.angle+\\\")translate(\\\"+o.axis.labelpadding*f+\\\",\\\"+.3*v.height+\\\")\\\"),p=Math.max(p,v.width+o.axis.labelpadding)}),f.exit().remove(),d.maxExtent=p,d}e.exports=function(t,e,r,i){var l=e.xaxis,u=e.yaxis,p=t._fullLayout._clips;c.makeTraceGroups(i,r,\\\"trace\\\").each(function(e){var r=n.select(this),i=e[0],d=i.trace,v=d.aaxis,m=d.baxis,y=c.ensureSingle(r,\\\"g\\\",\\\"minorlayer\\\"),x=c.ensureSingle(r,\\\"g\\\",\\\"majorlayer\\\"),b=c.ensureSingle(r,\\\"g\\\",\\\"boundarylayer\\\"),_=c.ensureSingle(r,\\\"g\\\",\\\"labellayer\\\");r.style(\\\"opacity\\\",d.opacity),h(l,u,x,v,\\\"a\\\",v._gridlines),h(l,u,x,m,\\\"b\\\",m._gridlines),h(l,u,y,v,\\\"a\\\",v._minorgridlines),h(l,u,y,m,\\\"b\\\",m._minorgridlines),h(l,u,b,v,\\\"a-boundary\\\",v._boundarylines),h(l,u,b,m,\\\"b-boundary\\\",m._boundarylines);var w=f(t,l,u,d,i,_,v._labels,\\\"a-label\\\"),k=f(t,l,u,d,i,_,m._labels,\\\"b-label\\\");!function(t,e,r,n,i,a,o,l){var u,h,f,p,d=c.aggNums(Math.min,null,r.a),v=c.aggNums(Math.max,null,r.a),m=c.aggNums(Math.min,null,r.b),y=c.aggNums(Math.max,null,r.b);u=.5*(d+v),h=m,f=r.ab2xy(u,h,!0),p=r.dxyda_rough(u,h),void 0===o.angle&&c.extendFlat(o,s(r,i,a,f,r.dxydb_rough(u,h)));g(t,e,r,n,f,p,r.aaxis,i,a,o,\\\"a-title\\\"),u=d,h=.5*(m+y),f=r.ab2xy(u,h,!0),p=r.dxydb_rough(u,h),void 0===l.angle&&c.extendFlat(l,s(r,i,a,f,r.dxyda_rough(u,h)));g(t,e,r,n,f,p,r.baxis,i,a,l,\\\"b-title\\\")}(t,_,d,i,l,u,w,k),function(t,e,r,n,i){var s,l,u,h,f=r.select(\\\"#\\\"+t._clipPathId);f.size()||(f=r.append(\\\"clipPath\\\").classed(\\\"carpetclip\\\",!0));var p=c.ensureSingle(f,\\\"path\\\",\\\"carpetboundary\\\"),d=e.clipsegments,g=[];for(h=0;h<d.length;h++)s=d[h],l=a([],s.x,n.c2p),u=a([],s.y,i.c2p),g.push(o(l,u,s.bicubic));var v=\\\"M\\\"+g.join(\\\"L\\\")+\\\"Z\\\";f.attr(\\\"id\\\",t._clipPathId),p.attr(\\\"d\\\",v)}(d,i,p,l,u)})};var p=u.LINE_SPACING,d=(1-u.MID_SHIFT)/p+1;function g(t,e,r,a,o,c,u,h,f,g,v){var m=[];u.title.text&&m.push(u.title.text);var y=e.selectAll(\\\"text.\\\"+v).data(m),x=g.maxExtent;y.enter().append(\\\"text\\\").classed(v,!0),y.each(function(){var e=s(r,h,f,o,c);-1===[\\\"start\\\",\\\"both\\\"].indexOf(u.showticklabels)&&(x=0);var a=u.title.font.size;x+=a+u.title.offset;var v=(g.angle+(g.flip<0?180:0)-e.angle+450)%360,m=v>90&&v<270,y=n.select(this);y.text(u.title.text).call(l.convertToTspans,t),m&&(x=(-l.lineCount(y)+d)*p*a-x),y.attr(\\\"transform\\\",\\\"translate(\\\"+e.p[0]+\\\",\\\"+e.p[1]+\\\") rotate(\\\"+e.angle+\\\") translate(0,\\\"+x+\\\")\\\").classed(\\\"user-select-none\\\",!0).attr(\\\"text-anchor\\\",\\\"middle\\\").call(i.font,u.title.font)}),y.exit().remove()}},{\\\"../../components/drawing\\\":614,\\\"../../constants/alignment\\\":688,\\\"../../lib\\\":719,\\\"../../lib/svg_text_utils\\\":743,\\\"./makepath\\\":916,\\\"./map_1d_array\\\":917,\\\"./orient_text\\\":918,d3:163}],920:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./constants\\\"),i=t(\\\"../../lib/search\\\").findBin,a=t(\\\"./compute_control_points\\\"),o=t(\\\"./create_spline_evaluator\\\"),s=t(\\\"./create_i_derivative_evaluator\\\"),l=t(\\\"./create_j_derivative_evaluator\\\");e.exports=function(t){var e=t._a,r=t._b,c=e.length,u=r.length,h=t.aaxis,f=t.baxis,p=e[0],d=e[c-1],g=r[0],v=r[u-1],m=e[e.length-1]-e[0],y=r[r.length-1]-r[0],x=m*n.RELATIVE_CULL_TOLERANCE,b=y*n.RELATIVE_CULL_TOLERANCE;p-=x,d+=x,g-=b,v+=b,t.isVisible=function(t,e){return t>p&&t<d&&e>g&&e<v},t.isOccluded=function(t,e){return t<p||t>d||e<g||e>v},t.setScale=function(){var e=t._x,r=t._y,n=a(t._xctrl,t._yctrl,e,r,h.smoothing,f.smoothing);t._xctrl=n[0],t._yctrl=n[1],t.evalxy=o([t._xctrl,t._yctrl],c,u,h.smoothing,f.smoothing),t.dxydi=s([t._xctrl,t._yctrl],h.smoothing,f.smoothing),t.dxydj=l([t._xctrl,t._yctrl],h.smoothing,f.smoothing)},t.i2a=function(t){var r=Math.max(0,Math.floor(t[0]),c-2),n=t[0]-r;return(1-n)*e[r]+n*e[r+1]},t.j2b=function(t){var e=Math.max(0,Math.floor(t[1]),c-2),n=t[1]-e;return(1-n)*r[e]+n*r[e+1]},t.ij2ab=function(e){return[t.i2a(e[0]),t.j2b(e[1])]},t.a2i=function(t){var r=Math.max(0,Math.min(i(t,e),c-2)),n=e[r],a=e[r+1];return Math.max(0,Math.min(c-1,r+(t-n)/(a-n)))},t.b2j=function(t){var e=Math.max(0,Math.min(i(t,r),u-2)),n=r[e],a=r[e+1];return Math.max(0,Math.min(u-1,e+(t-n)/(a-n)))},t.ab2ij=function(e){return[t.a2i(e[0]),t.b2j(e[1])]},t.i2c=function(e,r){return t.evalxy([],e,r)},t.ab2xy=function(n,i,a){if(!a&&(n<e[0]||n>e[c-1]|i<r[0]||i>r[u-1]))return[!1,!1];var o=t.a2i(n),s=t.b2j(i),l=t.evalxy([],o,s);if(a){var h,f,p,d,g=0,v=0,m=[];n<e[0]?(h=0,f=0,g=(n-e[0])/(e[1]-e[0])):n>e[c-1]?(h=c-2,f=1,g=(n-e[c-1])/(e[c-1]-e[c-2])):f=o-(h=Math.max(0,Math.min(c-2,Math.floor(o)))),i<r[0]?(p=0,d=0,v=(i-r[0])/(r[1]-r[0])):i>r[u-1]?(p=u-2,d=1,v=(i-r[u-1])/(r[u-1]-r[u-2])):d=s-(p=Math.max(0,Math.min(u-2,Math.floor(s)))),g&&(t.dxydi(m,h,p,f,d),l[0]+=m[0]*g,l[1]+=m[1]*g),v&&(t.dxydj(m,h,p,f,d),l[0]+=m[0]*v,l[1]+=m[1]*v)}return l},t.c2p=function(t,e,r){return[e.c2p(t[0]),r.c2p(t[1])]},t.p2x=function(t,e,r){return[e.p2c(t[0]),r.p2c(t[1])]},t.dadi=function(t){var r=Math.max(0,Math.min(e.length-2,t));return e[r+1]-e[r]},t.dbdj=function(t){var e=Math.max(0,Math.min(r.length-2,t));return r[e+1]-r[e]},t.dxyda=function(e,r,n,i){var a=t.dxydi(null,e,r,n,i),o=t.dadi(e,n);return[a[0]/o,a[1]/o]},t.dxydb=function(e,r,n,i){var a=t.dxydj(null,e,r,n,i),o=t.dbdj(r,i);return[a[0]/o,a[1]/o]},t.dxyda_rough=function(e,r,n){var i=m*(n||.1),a=t.ab2xy(e+i,r,!0),o=t.ab2xy(e-i,r,!0);return[.5*(a[0]-o[0])/i,.5*(a[1]-o[1])/i]},t.dxydb_rough=function(e,r,n){var i=y*(n||.1),a=t.ab2xy(e,r+i,!0),o=t.ab2xy(e,r-i,!0);return[.5*(a[0]-o[0])/i,.5*(a[1]-o[1])/i]},t.dpdx=function(t){return t._m},t.dpdy=function(t){return t._m}}},{\\\"../../lib/search\\\":738,\\\"./compute_control_points\\\":908,\\\"./constants\\\":909,\\\"./create_i_derivative_evaluator\\\":910,\\\"./create_j_derivative_evaluator\\\":911,\\\"./create_spline_evaluator\\\":912}],921:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\");e.exports=function(t,e,r){var i,a,o,s=[],l=[],c=t[0].length,u=t.length;function h(e,r){var n,i=0,a=0;return e>0&&void 0!==(n=t[r][e-1])&&(a++,i+=n),e<c-1&&void 0!==(n=t[r][e+1])&&(a++,i+=n),r>0&&void 0!==(n=t[r-1][e])&&(a++,i+=n),r<u-1&&void 0!==(n=t[r+1][e])&&(a++,i+=n),i/Math.max(1,a)}var f,p,d,g,v,m,y,x,b,_,w,k=0;for(i=0;i<c;i++)for(a=0;a<u;a++)void 0===t[a][i]&&(s.push(i),l.push(a),t[a][i]=h(i,a)),k=Math.max(k,Math.abs(t[a][i]));if(!s.length)return t;var T=0,A=0,M=s.length;do{for(T=0,o=0;o<M;o++){i=s[o],a=l[o];var S,E,C,L,P,O,z=0,I=0;0===i?(C=e[P=Math.min(c-1,2)],L=e[1],S=t[a][P],I+=(E=t[a][1])+(E-S)*(e[0]-L)/(L-C),z++):i===c-1&&(C=e[P=Math.max(0,c-3)],L=e[c-2],S=t[a][P],I+=(E=t[a][c-2])+(E-S)*(e[c-1]-L)/(L-C),z++),(0===i||i===c-1)&&a>0&&a<u-1&&(f=r[a+1]-r[a],I+=((p=r[a]-r[a-1])*t[a+1][i]+f*t[a-1][i])/(p+f),z++),0===a?(C=r[O=Math.min(u-1,2)],L=r[1],S=t[O][i],I+=(E=t[1][i])+(E-S)*(r[0]-L)/(L-C),z++):a===u-1&&(C=r[O=Math.max(0,u-3)],L=r[u-2],S=t[O][i],I+=(E=t[u-2][i])+(E-S)*(r[u-1]-L)/(L-C),z++),(0===a||a===u-1)&&i>0&&i<c-1&&(f=e[i+1]-e[i],I+=((p=e[i]-e[i-1])*t[a][i+1]+f*t[a][i-1])/(p+f),z++),z?I/=z:(d=e[i+1]-e[i],g=e[i]-e[i-1],x=(v=r[a+1]-r[a])*(m=r[a]-r[a-1])*(v+m),I=((y=d*g*(d+g))*(m*t[a+1][i]+v*t[a-1][i])+x*(g*t[a][i+1]+d*t[a][i-1]))/(x*(g+d)+y*(m+v))),T+=(_=(b=I-t[a][i])/k)*_,w=z?0:.85,t[a][i]+=b*(1+w)}T=Math.sqrt(T)}while(A++<100&&T>1e-5);return n.log(\\\"Smoother converged to\\\",T,\\\"after\\\",A,\\\"iterations\\\"),t}},{\\\"../../lib\\\":719}],922:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\").isArray1D;e.exports=function(t,e,r){var i=r(\\\"x\\\"),a=i&&i.length,o=r(\\\"y\\\"),s=o&&o.length;if(!a&&!s)return!1;if(e._cheater=!i,a&&!n(i)||s&&!n(o))e._length=null;else{var l=a?i.length:1/0;s&&(l=Math.min(l,o.length)),e.a&&e.a.length&&(l=Math.min(l,e.a.length)),e.b&&e.b.length&&(l=Math.min(l,e.b.length)),e._length=l}return!0}},{\\\"../../lib\\\":719}],923:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/fx/hovertemplate_attributes\\\"),i=t(\\\"../scattergeo/attributes\\\"),a=t(\\\"../../components/colorscale/attributes\\\"),o=t(\\\"../../plots/attributes\\\"),s=t(\\\"../../components/color/attributes\\\").defaultLine,l=t(\\\"../../lib/extend\\\").extendFlat,c=i.marker.line;e.exports=l({locations:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},locationmode:i.locationmode,z:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},text:l({},i.text,{}),hovertext:l({},i.hovertext,{}),marker:{line:{color:l({},c.color,{dflt:s}),width:l({},c.width,{dflt:1}),editType:\\\"calc\\\"},opacity:{valType:\\\"number\\\",arrayOk:!0,min:0,max:1,dflt:1,editType:\\\"style\\\"},editType:\\\"calc\\\"},selected:{marker:{opacity:i.selected.marker.opacity,editType:\\\"plot\\\"},editType:\\\"plot\\\"},unselected:{marker:{opacity:i.unselected.marker.opacity,editType:\\\"plot\\\"},editType:\\\"plot\\\"},hoverinfo:l({},o.hoverinfo,{editType:\\\"calc\\\",flags:[\\\"location\\\",\\\"z\\\",\\\"text\\\",\\\"name\\\"]}),hovertemplate:n()},a(\\\"\\\",{cLetter:\\\"z\\\",editTypeOverride:\\\"calc\\\"}))},{\\\"../../components/color/attributes\\\":592,\\\"../../components/colorscale/attributes\\\":600,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../../plots/attributes\\\":764,\\\"../scattergeo/attributes\\\":1151}],924:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../constants/numerical\\\").BADNUM,a=t(\\\"../../components/colorscale/calc\\\"),o=t(\\\"../scatter/arrays_to_calcdata\\\"),s=t(\\\"../scatter/calc_selection\\\");function l(t){return t&&\\\"string\\\"==typeof t}e.exports=function(t,e){var r,c=e._length,u=new Array(c);r=e.geojson?function(t){return l(t)||n(t)}:l;for(var h=0;h<c;h++){var f=u[h]={},p=e.locations[h],d=e.z[h];r(p)&&n(d)?(f.loc=p,f.z=d):(f.loc=null,f.z=i),f.index=h}return o(u,e),a(t,e,{vals:e.z,containerStr:\\\"\\\",cLetter:\\\"z\\\"}),s(u,e),u}},{\\\"../../components/colorscale/calc\\\":601,\\\"../../constants/numerical\\\":695,\\\"../scatter/arrays_to_calcdata\\\":1111,\\\"../scatter/calc_selection\\\":1114,\\\"fast-isnumeric\\\":225}],925:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../components/colorscale/defaults\\\"),a=t(\\\"./attributes\\\");e.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l=s(\\\"locations\\\"),c=s(\\\"z\\\");l&&l.length&&n.isArrayOrTypedArray(c)&&c.length?(e._length=Math.min(l.length,c.length),s(\\\"locationmode\\\"),s(\\\"text\\\"),s(\\\"hovertext\\\"),s(\\\"hovertemplate\\\"),s(\\\"marker.line.width\\\")&&s(\\\"marker.line.color\\\"),s(\\\"marker.opacity\\\"),i(t,e,o,s,{prefix:\\\"\\\",cLetter:\\\"z\\\"}),n.coerceSelectionMarkerOpacity(e,s)):e.visible=!1}},{\\\"../../components/colorscale/defaults\\\":603,\\\"../../lib\\\":719,\\\"./attributes\\\":923}],926:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,n,i){t.location=e.location,t.z=e.z;var a=n[i];return a.fIn&&(t.properties=a.fIn.properties),t}},{}],927:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/cartesian/axes\\\"),i=t(\\\"./attributes\\\"),a=t(\\\"../../lib\\\").fillText;e.exports=function(t,e,r){var o,s,l,c,u=t.cd,h=u[0].trace,f=t.subplot;for(s=0;s<u.length;s++)if(c=!1,(o=u[s])._polygons){for(l=0;l<o._polygons.length;l++)o._polygons[l].contains([e,r])&&(c=!c),o._polygons[l].contains([e+360,r])&&(c=!c);if(c)break}if(c&&o)return t.x0=t.x1=t.xa.c2p(o.ct),t.y0=t.y1=t.ya.c2p(o.ct),t.index=o.index,t.location=o.loc,t.z=o.z,t.zLabel=n.tickText(f.mockAxis,f.mockAxis.c2l(o.z),\\\"hover\\\").text,t.hovertemplate=o.hovertemplate,function(t,e,r){if(e.hovertemplate)return;var n=r.hi||e.hoverinfo,o=\\\"all\\\"===n?i.hoverinfo.flags:n.split(\\\"+\\\"),s=-1!==o.indexOf(\\\"name\\\"),l=-1!==o.indexOf(\\\"location\\\"),c=-1!==o.indexOf(\\\"z\\\"),u=-1!==o.indexOf(\\\"text\\\"),h=[];!s&&l?t.nameOverride=r.loc:(s&&(t.nameOverride=e.name),l&&h.push(r.loc));c&&h.push(t.zLabel);u&&a(r,e,h);t.extraText=h.join(\\\"<br>\\\")}(t,h,o,f.mockAxis),[t]}},{\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767,\\\"./attributes\\\":923}],928:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),colorbar:t(\\\"../heatmap/colorbar\\\"),calc:t(\\\"./calc\\\"),plot:t(\\\"./plot\\\").plot,style:t(\\\"./style\\\").style,styleOnSelect:t(\\\"./style\\\").styleOnSelect,hoverPoints:t(\\\"./hover\\\"),eventData:t(\\\"./event_data\\\"),selectPoints:t(\\\"./select\\\"),moduleType:\\\"trace\\\",name:\\\"choropleth\\\",basePlotModule:t(\\\"../../plots/geo\\\"),categories:[\\\"geo\\\",\\\"noOpacity\\\"],meta:{}}},{\\\"../../plots/geo\\\":797,\\\"../heatmap/colorbar\\\":1004,\\\"./attributes\\\":923,\\\"./calc\\\":924,\\\"./defaults\\\":925,\\\"./event_data\\\":926,\\\"./hover\\\":927,\\\"./plot\\\":929,\\\"./select\\\":930,\\\"./style\\\":931}],929:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../lib/polygon\\\"),o=t(\\\"../../lib/topojson_utils\\\").getTopojsonFeatures,s=t(\\\"../../lib/geo_location_utils\\\").locationToFeature,l=t(\\\"./style\\\").style;function c(t,e){for(var r=t[0].trace,n=t.length,i=o(r,e),a=0;a<n;a++){var l=t[a],c=s(r.locationmode,l.loc,i);c?(l.geojson=c,l.ct=c.properties.ct,l._polygons=u(c)):l.geojson=null}}function u(t){var e,r,n,i,o=t.geometry,s=o.coordinates,l=t.id,c=[];function u(t){for(var e=0;e<t.length-1;e++)if(t[e][0]>0&&t[e+1][0]<0)return e;return null}switch(e=\\\"RUS\\\"===l||\\\"FJI\\\"===l?function(t){var e;if(null===u(t))e=t;else for(e=new Array(t.length),i=0;i<t.length;i++)e[i]=[t[i][0]<0?t[i][0]+360:t[i][0],t[i][1]];c.push(a.tester(e))}:\\\"ATA\\\"===l?function(t){var e=u(t);if(null===e)return c.push(a.tester(t));var r=new Array(t.length+1),n=0;for(i=0;i<t.length;i++)i>e?r[n++]=[t[i][0]+360,t[i][1]]:i===e?(r[n++]=t[i],r[n++]=[t[i][0],-90]):r[n++]=t[i];var o=a.tester(r);o.pts.pop(),c.push(o)}:function(t){c.push(a.tester(t))},o.type){case\\\"MultiPolygon\\\":for(r=0;r<s.length;r++)for(n=0;n<s[r].length;n++)e(s[r][n]);break;case\\\"Polygon\\\":for(r=0;r<s.length;r++)e(s[r])}return c}e.exports={plot:function(t,e,r){for(var a=0;a<r.length;a++)c(r[a],e.topojson);var o=e.layers.backplot.select(\\\".choroplethlayer\\\");i.makeTraceGroups(o,r,\\\"trace choropleth\\\").each(function(e){var r=n.select(this).selectAll(\\\"path.choroplethlocation\\\").data(i.identity);r.enter().append(\\\"path\\\").classed(\\\"choroplethlocation\\\",!0),r.exit().remove(),l(t,e)})},feature2polygons:u}},{\\\"../../lib\\\":719,\\\"../../lib/geo_location_utils\\\":713,\\\"../../lib/polygon\\\":731,\\\"../../lib/topojson_utils\\\":746,\\\"./style\\\":931,d3:163}],930:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){var r,n,i,a,o,s=t.cd,l=t.xaxis,c=t.yaxis,u=[];if(!1===e)for(r=0;r<s.length;r++)s[r].selected=0;else for(r=0;r<s.length;r++)(i=(n=s[r]).ct)&&(a=l.c2p(i),o=c.c2p(i),e.contains([a,o],null,r,t)?(u.push({pointNumber:r,lon:i[0],lat:i[1]}),n.selected=1):n.selected=0);return u}},{}],931:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../components/color\\\"),a=t(\\\"../../components/drawing\\\"),o=t(\\\"../../components/colorscale\\\");function s(t,e){var r=e[0].trace,s=e[0].node3.selectAll(\\\".choroplethlocation\\\"),l=r.marker||{},c=l.line||{},u=o.makeColorScaleFuncFromTrace(r);s.each(function(t){n.select(this).attr(\\\"fill\\\",u(t.z)).call(i.stroke,t.mlc||c.color).call(a.dashLine,\\\"\\\",t.mlw||c.width||0).style(\\\"opacity\\\",l.opacity)}),a.selectedPointStyle(s,r,t)}e.exports={style:function(t,e){e&&s(t,e)},styleOnSelect:function(t,e){var r=e[0].node3,n=e[0].trace;n.selectedpoints?a.selectedPointStyle(r.selectAll(\\\".choroplethlocation\\\"),n,t):s(t,e)}}},{\\\"../../components/color\\\":593,\\\"../../components/colorscale\\\":605,\\\"../../components/drawing\\\":614,d3:163}],932:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../choropleth/attributes\\\"),i=t(\\\"../../components/colorscale/attributes\\\"),a=t(\\\"../../components/fx/hovertemplate_attributes\\\"),o=t(\\\"../../lib/extend\\\").extendFlat;e.exports=o({locations:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},z:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},geojson:{valType:\\\"any\\\",editType:\\\"calc\\\"},below:{valType:\\\"string\\\",editType:\\\"plot\\\"},text:n.text,hovertext:n.hovertext,marker:{line:{color:o({},n.marker.line.color,{editType:\\\"plot\\\"}),width:o({},n.marker.line.width,{editType:\\\"plot\\\"}),editType:\\\"calc\\\"},opacity:o({},n.marker.opacity,{editType:\\\"plot\\\"}),editType:\\\"calc\\\"},selected:{marker:{opacity:o({},n.selected.marker.opacity,{editType:\\\"plot\\\"}),editType:\\\"plot\\\"},editType:\\\"plot\\\"},unselected:{marker:{opacity:o({},n.unselected.marker.opacity,{editType:\\\"plot\\\"}),editType:\\\"plot\\\"},editType:\\\"plot\\\"},hoverinfo:n.hoverinfo,hovertemplate:a({},{keys:[\\\"properties\\\"]})},i(\\\"\\\",{cLetter:\\\"z\\\",editTypeOverride:\\\"calc\\\"}))},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../choropleth/attributes\\\":923}],933:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"@turf/area\\\"),a=t(\\\"@turf/centroid\\\"),o=t(\\\"../../lib\\\"),s=t(\\\"../../components/colorscale\\\"),l=t(\\\"../../components/drawing\\\"),c=t(\\\"../../lib/geojson_utils\\\").makeBlank,u=t(\\\"../choropleth/plot\\\").feature2polygons;function h(t){var e,r=t[0].trace,n=r._opts;if(r.selectedpoints){for(var i=l.makeSelectedPointStyleFns(r),a=0;a<t.length;a++){var s=t[a];s.fOut&&(s.fOut.properties.mo2=i.selectedOpacityFn(s))}e={type:\\\"identity\\\",property:\\\"mo2\\\"}}else e=o.isArrayOrTypedArray(r.marker.opacity)?{type:\\\"identity\\\",property:\\\"mo\\\"}:r.marker.opacity;return o.extendFlat(n.fill.paint,{\\\"fill-opacity\\\":e}),o.extendFlat(n.line.paint,{\\\"line-opacity\\\":e}),n}e.exports={convert:function(t){var e=t[0].trace,r=!0===e.visible&&0!==e._length,l={layout:{visibility:\\\"none\\\"},paint:{}},f={layout:{visibility:\\\"none\\\"},paint:{}},p=e._opts={fill:l,line:f,geojson:c()};if(!r)return p;var d=\\\"string\\\"==typeof e.geojson?(window.PlotlyGeoAssets||{})[e.geojson]:e.geojson;if(!o.isPlainObject(d))return o.error(\\\"Oops ... something when wrong when fetching \\\"+e.geojson),p;var g,v={},m=[];for(g=0;g<t.length;g++){var y=t[g];y.loc&&(v[y.loc]=y)}var x,b,_,w=s.makeColorScaleFuncFromTrace(e),k=e.marker,T=k.line||{};function A(t){var e=v[t.id];if(e){var r=t.geometry;if(\\\"Polygon\\\"===r.type||\\\"MultiPolygon\\\"===r.type){var n={fc:w(e.z)};x&&(n.mo=x(e)),b&&(n.mlc=b(e)),_&&(n.mlw=_(e));var s={type:\\\"Feature\\\",geometry:r,properties:n};e._polygons=u(s),e.ct=function(t){var e,r=t.geometry;if(\\\"MultiPolygon\\\"===r.type)for(var n=r.coordinates,o=0,s=0;s<n.length;s++){var l={type:\\\"Polygon\\\",coordinates:n[s]},c=i.default(l);c>o&&(o=c,e=l)}else e=r;return a.default(e).geometry.coordinates}(s),e.fIn=t,e.fOut=s,m.push(s)}else o.log([\\\"Location with id\\\",e.loc,\\\"does not have a valid GeoJSON geometry,\\\",\\\"choroplethmapbox traces only support *Polygon* and *MultiPolygon* geometries.\\\"].join(\\\" \\\"))}delete v[t.id]}switch(o.isArrayOrTypedArray(k.opacity)&&(x=function(t){var e=t.mo;return n(e)?+o.constrain(e,0,1):0}),o.isArrayOrTypedArray(T.color)&&(b=function(t){return t.mlc}),o.isArrayOrTypedArray(T.width)&&(_=function(t){return t.mlw}),d.type){case\\\"FeatureCollection\\\":var M=d.features;for(g=0;g<M.length;g++)A(M[g]);break;case\\\"Feature\\\":A(d);break;default:return o.warn([\\\"Invalid GeoJSON type\\\",(d.type||\\\"none\\\")+\\\",\\\",\\\"choroplethmapbox traces only support *FeatureCollection* and *Feature* types.\\\"].join(\\\" \\\")),p}for(var S in v)o.log(\\\"Location with id \\\"+S+\\\" does not have a matching feature\\\");var E=x?{type:\\\"identity\\\",property:\\\"mo\\\"}:k.opacity;return o.extendFlat(l.paint,{\\\"fill-color\\\":{type:\\\"identity\\\",property:\\\"fc\\\"},\\\"fill-opacity\\\":E}),o.extendFlat(f.paint,{\\\"line-color\\\":b?{type:\\\"identity\\\",property:\\\"mlc\\\"}:T.color,\\\"line-width\\\":_?{type:\\\"identity\\\",property:\\\"mlw\\\"}:T.width,\\\"line-opacity\\\":E}),l.layout.visibility=\\\"visible\\\",f.layout.visibility=\\\"visible\\\",p.geojson={type:\\\"FeatureCollection\\\",features:m},h(t),p},convertOnSelect:h}},{\\\"../../components/colorscale\\\":605,\\\"../../components/drawing\\\":614,\\\"../../lib\\\":719,\\\"../../lib/geojson_utils\\\":714,\\\"../choropleth/plot\\\":929,\\\"@turf/area\\\":55,\\\"@turf/centroid\\\":56,\\\"fast-isnumeric\\\":225}],934:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../components/colorscale/defaults\\\"),a=t(\\\"./attributes\\\");e.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l=s(\\\"locations\\\"),c=s(\\\"z\\\"),u=s(\\\"geojson\\\");n.isArrayOrTypedArray(l)&&l.length&&n.isArrayOrTypedArray(c)&&c.length&&(\\\"string\\\"==typeof u&&\\\"\\\"!==u||n.isPlainObject(u))?(e._length=Math.min(l.length,c.length),s(\\\"below\\\"),s(\\\"text\\\"),s(\\\"hovertext\\\"),s(\\\"hovertemplate\\\"),s(\\\"marker.line.width\\\")&&s(\\\"marker.line.color\\\"),s(\\\"marker.opacity\\\"),i(t,e,o,s,{prefix:\\\"\\\",cLetter:\\\"z\\\"}),n.coerceSelectionMarkerOpacity(e,s)):e.visible=!1}},{\\\"../../components/colorscale/defaults\\\":603,\\\"../../lib\\\":719,\\\"./attributes\\\":932}],935:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),colorbar:t(\\\"../heatmap/colorbar\\\"),calc:t(\\\"../choropleth/calc\\\"),plot:t(\\\"./plot\\\"),hoverPoints:t(\\\"../choropleth/hover\\\"),eventData:t(\\\"../choropleth/event_data\\\"),selectPoints:t(\\\"../choropleth/select\\\"),styleOnSelect:function(t,e){e&&e[0].trace._glTrace.updateOnSelect(e)},getBelow:function(t,e){for(var r=e.getMapLayers(),n=r.length-2;n>=0;n--){var i=r[n].id;if(\\\"string\\\"==typeof i&&0===i.indexOf(\\\"water\\\"))for(var a=n+1;a<r.length;a++)if(\\\"string\\\"==typeof(i=r[a].id)&&-1===i.indexOf(\\\"plotly-\\\"))return i}},moduleType:\\\"trace\\\",name:\\\"choroplethmapbox\\\",basePlotModule:t(\\\"../../plots/mapbox\\\"),categories:[\\\"mapbox\\\",\\\"gl\\\",\\\"noOpacity\\\"],meta:{hr_name:\\\"choropleth_mapbox\\\"}}},{\\\"../../plots/mapbox\\\":822,\\\"../choropleth/calc\\\":924,\\\"../choropleth/event_data\\\":926,\\\"../choropleth/hover\\\":927,\\\"../choropleth/select\\\":930,\\\"../heatmap/colorbar\\\":1004,\\\"./attributes\\\":932,\\\"./defaults\\\":934,\\\"./plot\\\":936}],936:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./convert\\\").convert,i=t(\\\"./convert\\\").convertOnSelect,a=t(\\\"../../plots/mapbox/constants\\\").traceLayerPrefix;function o(t,e){this.subplot=t,this.uid=e,this.sourceId=\\\"source-\\\"+e,this.layerList=[[\\\"fill\\\",a+e+\\\"-fill\\\"],[\\\"line\\\",a+e+\\\"-line\\\"]],this.below=null}var s=o.prototype;s.update=function(t){this._update(n(t))},s.updateOnSelect=function(t){this._update(i(t))},s._update=function(t){var e=this.subplot,r=this.layerList,n=e.belowLookup[\\\"trace-\\\"+this.uid];e.map.getSource(this.sourceId).setData(t.geojson),n!==this.below&&(this._removeLayers(),this._addLayers(t,n),this.below=n);for(var i=0;i<r.length;i++){var a=r[i],o=a[0],s=a[1],l=t[o];e.setOptions(s,\\\"setLayoutProperty\\\",l.layout),\\\"visible\\\"===l.layout.visibility&&e.setOptions(s,\\\"setPaintProperty\\\",l.paint)}},s._addLayers=function(t,e){for(var r=this.subplot,n=this.layerList,i=this.sourceId,a=0;a<n.length;a++){var o=n[a],s=o[0],l=t[s];r.addLayer({type:s,id:o[1],source:i,layout:l.layout,paint:l.paint},e)}},s._removeLayers=function(){for(var t=this.subplot.map,e=this.layerList,r=e.length-1;r>=0;r--)t.removeLayer(e[r][1])},s.dispose=function(){var t=this.subplot.map;this._removeLayers(),t.removeSource(this.sourceId)},e.exports=function(t,e){var r=e[0].trace,i=new o(t,r.uid),a=i.sourceId,s=n(e),l=i.below=t.belowLookup[\\\"trace-\\\"+r.uid];return t.map.addSource(a,{type:\\\"geojson\\\",data:s.geojson}),i._addLayers(s,l),e[0].trace._glTrace=i,i}},{\\\"../../plots/mapbox/constants\\\":820,\\\"./convert\\\":933}],937:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/colorscale/attributes\\\"),i=t(\\\"../../components/fx/hovertemplate_attributes\\\"),a=t(\\\"../mesh3d/attributes\\\"),o=t(\\\"../../plots/attributes\\\"),s=t(\\\"../../lib/extend\\\").extendFlat,l={x:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},y:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},z:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},u:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},v:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},w:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},sizemode:{valType:\\\"enumerated\\\",values:[\\\"scaled\\\",\\\"absolute\\\"],editType:\\\"calc\\\",dflt:\\\"scaled\\\"},sizeref:{valType:\\\"number\\\",editType:\\\"calc\\\",min:0},anchor:{valType:\\\"enumerated\\\",editType:\\\"calc\\\",values:[\\\"tip\\\",\\\"tail\\\",\\\"cm\\\",\\\"center\\\"],dflt:\\\"cm\\\"},text:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0,editType:\\\"calc\\\"},hovertext:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0,editType:\\\"calc\\\"},hovertemplate:i({editType:\\\"calc\\\"},{keys:[\\\"norm\\\"]})};s(l,n(\\\"\\\",{colorAttr:\\\"u/v/w norm\\\",showScaleDflt:!0,editTypeOverride:\\\"calc\\\"}));[\\\"opacity\\\",\\\"lightposition\\\",\\\"lighting\\\"].forEach(function(t){l[t]=a[t]}),l.hoverinfo=s({},o.hoverinfo,{editType:\\\"calc\\\",flags:[\\\"x\\\",\\\"y\\\",\\\"z\\\",\\\"u\\\",\\\"v\\\",\\\"w\\\",\\\"norm\\\",\\\"text\\\",\\\"name\\\"],dflt:\\\"x+y+z+norm+text+name\\\"}),l.transforms=void 0,e.exports=l},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../../plots/attributes\\\":764,\\\"../mesh3d/attributes\\\":1053}],938:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/colorscale/calc\\\");e.exports=function(t,e){for(var r=e.u,i=e.v,a=e.w,o=Math.min(e.x.length,e.y.length,e.z.length,r.length,i.length,a.length),s=-1/0,l=1/0,c=0;c<o;c++){var u=r[c],h=i[c],f=a[c],p=Math.sqrt(u*u+h*h+f*f);s=Math.max(s,p),l=Math.min(l,p)}e._len=o,e._normMax=s,n(t,e,{vals:[l,s],containerStr:\\\"\\\",cLetter:\\\"c\\\"})}},{\\\"../../components/colorscale/calc\\\":601}],939:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"gl-cone3d\\\"),i=t(\\\"gl-cone3d\\\").createConeMesh,a=t(\\\"../../lib\\\").simpleMap,o=t(\\\"../../lib/gl_format_color\\\").parseColorScale,s=t(\\\"../../components/colorscale\\\").extractOpts,l=t(\\\"../../plots/gl3d/zip3\\\");function c(t,e){this.scene=t,this.uid=e,this.mesh=null,this.data=null}var u=c.prototype;u.handlePick=function(t){if(t.object===this.mesh){var e=t.index=t.data.index,r=this.data.x[e],n=this.data.y[e],i=this.data.z[e],a=this.data.u[e],o=this.data.v[e],s=this.data.w[e];t.traceCoordinate=[r,n,i,a,o,s,Math.sqrt(a*a+o*o+s*s)];var l=this.data.hovertext||this.data.text;return Array.isArray(l)&&void 0!==l[e]?t.textLabel=l[e]:l&&(t.textLabel=l),!0}};var h={xaxis:0,yaxis:1,zaxis:2},f={tip:1,tail:0,cm:.25,center:.5},p={tip:1,tail:1,cm:.75,center:.5};function d(t,e){var r=t.fullSceneLayout,i=t.dataScale,c={};function u(t,e){var n=r[e],o=i[h[e]];return a(t,function(t){return n.d2l(t)*o})}c.vectors=l(u(e.u,\\\"xaxis\\\"),u(e.v,\\\"yaxis\\\"),u(e.w,\\\"zaxis\\\"),e._len),c.positions=l(u(e.x,\\\"xaxis\\\"),u(e.y,\\\"yaxis\\\"),u(e.z,\\\"zaxis\\\"),e._len);var d=s(e);c.colormap=o(e),c.vertexIntensityBounds=[d.min/e._normMax,d.max/e._normMax],c.coneOffset=f[e.anchor],\\\"scaled\\\"===e.sizemode?c.coneSize=e.sizeref||.5:c.coneSize=e.sizeref&&e._normMax?e.sizeref/e._normMax:.5;var g=n(c),v=e.lightposition;return g.lightPosition=[v.x,v.y,v.z],g.ambient=e.lighting.ambient,g.diffuse=e.lighting.diffuse,g.specular=e.lighting.specular,g.roughness=e.lighting.roughness,g.fresnel=e.lighting.fresnel,g.opacity=e.opacity,e._pad=p[e.anchor]*g.vectorScale*g.coneScale*e._normMax,g}u.update=function(t){this.data=t;var e=d(this.scene,t);this.mesh.update(e)},u.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports=function(t,e){var r=t.glplot.gl,n=d(t,e),a=i(r,n),o=new c(t,e.uid);return o.mesh=a,o.data=e,a._trace=o,t.glplot.add(a),o}},{\\\"../../components/colorscale\\\":605,\\\"../../lib\\\":719,\\\"../../lib/gl_format_color\\\":716,\\\"../../plots/gl3d/zip3\\\":818,\\\"gl-cone3d\\\":242}],940:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../components/colorscale/defaults\\\"),a=t(\\\"./attributes\\\");e.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l=s(\\\"u\\\"),c=s(\\\"v\\\"),u=s(\\\"w\\\"),h=s(\\\"x\\\"),f=s(\\\"y\\\"),p=s(\\\"z\\\");l&&l.length&&c&&c.length&&u&&u.length&&h&&h.length&&f&&f.length&&p&&p.length?(s(\\\"sizeref\\\"),s(\\\"sizemode\\\"),s(\\\"anchor\\\"),s(\\\"lighting.ambient\\\"),s(\\\"lighting.diffuse\\\"),s(\\\"lighting.specular\\\"),s(\\\"lighting.roughness\\\"),s(\\\"lighting.fresnel\\\"),s(\\\"lightposition.x\\\"),s(\\\"lightposition.y\\\"),s(\\\"lightposition.z\\\"),i(t,e,o,s,{prefix:\\\"\\\",cLetter:\\\"c\\\"}),s(\\\"text\\\"),s(\\\"hovertext\\\"),s(\\\"hovertemplate\\\"),e._length=null):e.visible=!1}},{\\\"../../components/colorscale/defaults\\\":603,\\\"../../lib\\\":719,\\\"./attributes\\\":937}],941:[function(t,e,r){\\\"use strict\\\";e.exports={moduleType:\\\"trace\\\",name:\\\"cone\\\",basePlotModule:t(\\\"../../plots/gl3d\\\"),categories:[\\\"gl3d\\\"],attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),colorbar:{min:\\\"cmin\\\",max:\\\"cmax\\\"},calc:t(\\\"./calc\\\"),plot:t(\\\"./convert\\\"),eventData:function(t,e){return t.norm=e.traceCoordinate[6],t},meta:{}}},{\\\"../../plots/gl3d\\\":807,\\\"./attributes\\\":937,\\\"./calc\\\":938,\\\"./convert\\\":939,\\\"./defaults\\\":940}],942:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../heatmap/attributes\\\"),i=t(\\\"../scatter/attributes\\\"),a=t(\\\"../../components/colorscale/attributes\\\"),o=t(\\\"../../components/drawing/attributes\\\").dash,s=t(\\\"../../plots/font_attributes\\\"),l=t(\\\"../../lib/extend\\\").extendFlat,c=t(\\\"../../constants/filter_ops\\\"),u=c.COMPARISON_OPS2,h=c.INTERVAL_OPS,f=(t(\\\"../../constants/docs\\\").FORMAT_LINK,i.line);e.exports=l({z:n.z,x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,text:n.text,hovertext:n.hovertext,transpose:n.transpose,xtype:n.xtype,ytype:n.ytype,zhoverformat:n.zhoverformat,hovertemplate:n.hovertemplate,connectgaps:n.connectgaps,fillcolor:{valType:\\\"color\\\",editType:\\\"calc\\\"},autocontour:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\",impliedEdits:{\\\"contours.start\\\":void 0,\\\"contours.end\\\":void 0,\\\"contours.size\\\":void 0}},ncontours:{valType:\\\"integer\\\",dflt:15,min:1,editType:\\\"calc\\\"},contours:{type:{valType:\\\"enumerated\\\",values:[\\\"levels\\\",\\\"constraint\\\"],dflt:\\\"levels\\\",editType:\\\"calc\\\"},start:{valType:\\\"number\\\",dflt:null,editType:\\\"plot\\\",impliedEdits:{\\\"^autocontour\\\":!1}},end:{valType:\\\"number\\\",dflt:null,editType:\\\"plot\\\",impliedEdits:{\\\"^autocontour\\\":!1}},size:{valType:\\\"number\\\",dflt:null,min:0,editType:\\\"plot\\\",impliedEdits:{\\\"^autocontour\\\":!1}},coloring:{valType:\\\"enumerated\\\",values:[\\\"fill\\\",\\\"heatmap\\\",\\\"lines\\\",\\\"none\\\"],dflt:\\\"fill\\\",editType:\\\"calc\\\"},showlines:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"plot\\\"},showlabels:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"plot\\\"},labelfont:s({editType:\\\"plot\\\",colorEditType:\\\"style\\\"}),labelformat:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"plot\\\"},operation:{valType:\\\"enumerated\\\",values:[].concat(u).concat(h),dflt:\\\"=\\\",editType:\\\"calc\\\"},value:{valType:\\\"any\\\",dflt:0,editType:\\\"calc\\\"},editType:\\\"calc\\\",impliedEdits:{autocontour:!1}},line:{color:l({},f.color,{editType:\\\"style+colorbars\\\"}),width:l({},f.width,{editType:\\\"style+colorbars\\\"}),dash:o,smoothing:l({},f.smoothing,{}),editType:\\\"plot\\\"}},a(\\\"\\\",{cLetter:\\\"z\\\",autoColorDflt:!1,editTypeOverride:\\\"calc\\\"}))},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../components/drawing/attributes\\\":613,\\\"../../constants/docs\\\":690,\\\"../../constants/filter_ops\\\":691,\\\"../../lib/extend\\\":710,\\\"../../plots/font_attributes\\\":793,\\\"../heatmap/attributes\\\":1001,\\\"../scatter/attributes\\\":1112}],943:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/colorscale\\\"),i=t(\\\"../heatmap/calc\\\"),a=t(\\\"./set_contours\\\"),o=t(\\\"./end_plus\\\");e.exports=function(t,e){var r=i(t,e),s=r[0].z;a(e,s);var l,c=e.contours,u=n.extractOpts(e);if(\\\"heatmap\\\"===c.coloring&&u.auto&&!1===e.autocontour){var h=c.start,f=o(c),p=c.size||1,d=Math.floor((f-h)/p)+1;isFinite(p)||(p=1,d=1);var g=h-p/2;l=[g,g+d*p]}else l=s;return n.calc(t,e,{vals:l,cLetter:\\\"z\\\"}),r}},{\\\"../../components/colorscale\\\":605,\\\"../heatmap/calc\\\":1002,\\\"./end_plus\\\":953,\\\"./set_contours\\\":961}],944:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,n){var i,a,o,s=t[0],l=s.x.length,c=s.y.length,u=s.z,h=n.contours,f=-1/0,p=1/0;for(i=0;i<c;i++)p=Math.min(p,u[i][0]),p=Math.min(p,u[i][l-1]),f=Math.max(f,u[i][0]),f=Math.max(f,u[i][l-1]);for(i=1;i<l-1;i++)p=Math.min(p,u[0][i]),p=Math.min(p,u[c-1][i]),f=Math.max(f,u[0][i]),f=Math.max(f,u[c-1][i]);switch(s.prefixBoundary=!1,e){case\\\">\\\":h.value>f&&(s.prefixBoundary=!0);break;case\\\"<\\\":h.value<p&&(s.prefixBoundary=!0);break;case\\\"[]\\\":a=Math.min.apply(null,h.value),((o=Math.max.apply(null,h.value))<p||a>f)&&(s.prefixBoundary=!0);break;case\\\"][\\\":a=Math.min.apply(null,h.value),o=Math.max.apply(null,h.value),a<p&&o>f&&(s.prefixBoundary=!0)}}},{}],945:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/colorscale\\\").extractOpts,i=t(\\\"./make_color_map\\\"),a=t(\\\"./end_plus\\\");e.exports={min:\\\"zmin\\\",max:\\\"zmax\\\",calc:function(t,e,r){var o=e.contours,s=e.line,l=o.size||1,c=o.coloring,u=i(e,{isColorbar:!0});if(\\\"heatmap\\\"===c){var h=n(e);r._fillgradient=e.colorscale,r._zrange=[h.min,h.max]}else\\\"fill\\\"===c&&(r._fillcolor=u);r._line={color:\\\"lines\\\"===c?u:s.color,width:!1!==o.showlines?s.width:0,dash:s.dash},r._levels={start:o.start,end:a(o),size:l}}}},{\\\"../../components/colorscale\\\":605,\\\"./end_plus\\\":953,\\\"./make_color_map\\\":958}],946:[function(t,e,r){\\\"use strict\\\";e.exports={BOTTOMSTART:[1,9,13,104,713],TOPSTART:[4,6,7,104,713],LEFTSTART:[8,12,14,208,1114],RIGHTSTART:[2,3,11,208,1114],NEWDELTA:[null,[-1,0],[0,-1],[-1,0],[1,0],null,[0,-1],[-1,0],[0,1],[0,1],null,[0,1],[1,0],[1,0],[0,-1]],CHOOSESADDLE:{104:[4,1],208:[2,8],713:[7,13],1114:[11,14]},SADDLEREMAINDER:{1:4,2:8,4:1,7:13,8:2,11:14,13:7,14:11},LABELDISTANCE:2,LABELINCREASE:10,LABELMIN:3,LABELMAX:10,LABELOPTIMIZER:{EDGECOST:1,ANGLECOST:1,NEIGHBORCOST:5,SAMELEVELFACTOR:10,SAMELEVELDISTANCE:5,MAXCOST:100,INITIALSEARCHPOINTS:10,ITERATIONS:5}}},{}],947:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"./label_defaults\\\"),a=t(\\\"../../components/color\\\"),o=a.addOpacity,s=a.opacity,l=t(\\\"../../constants/filter_ops\\\"),c=l.CONSTRAINT_REDUCTION,u=l.COMPARISON_OPS2;e.exports=function(t,e,r,a,l,h){var f,p,d,g=e.contours,v=r(\\\"contours.operation\\\");(g._operation=c[v],function(t,e){var r;-1===u.indexOf(e.operation)?(t(\\\"contours.value\\\",[0,1]),Array.isArray(e.value)?e.value.length>2?e.value=e.value.slice(2):0===e.length?e.value=[0,1]:e.length<2?(r=parseFloat(e.value[0]),e.value=[r,r+1]):e.value=[parseFloat(e.value[0]),parseFloat(e.value[1])]:n(e.value)&&(r=parseFloat(e.value),e.value=[r,r+1])):(t(\\\"contours.value\\\",0),n(e.value)||(Array.isArray(e.value)?e.value=parseFloat(e.value[0]):e.value=0))}(r,g),\\\"=\\\"===v?f=g.showlines=!0:(f=r(\\\"contours.showlines\\\"),d=r(\\\"fillcolor\\\",o((t.line||{}).color||l,.5))),f)&&(p=r(\\\"line.color\\\",d&&s(d)?o(e.fillcolor,1):l),r(\\\"line.width\\\",2),r(\\\"line.dash\\\"));r(\\\"line.smoothing\\\"),i(r,a,p,h)}},{\\\"../../components/color\\\":593,\\\"../../constants/filter_ops\\\":691,\\\"./label_defaults\\\":957,\\\"fast-isnumeric\\\":225}],948:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../constants/filter_ops\\\"),i=t(\\\"fast-isnumeric\\\");function a(t,e){var r,a=Array.isArray(e);function o(t){return i(t)?+t:null}return-1!==n.COMPARISON_OPS2.indexOf(t)?r=o(a?e[0]:e):-1!==n.INTERVAL_OPS.indexOf(t)?r=a?[o(e[0]),o(e[1])]:[o(e),o(e)]:-1!==n.SET_OPS.indexOf(t)&&(r=a?e.map(o):[o(e)]),r}function o(t){return function(e){e=a(t,e);var r=Math.min(e[0],e[1]),n=Math.max(e[0],e[1]);return{start:r,end:n,size:n-r}}}function s(t){return function(e){return{start:e=a(t,e),end:1/0,size:1/0}}}e.exports={\\\"[]\\\":o(\\\"[]\\\"),\\\"][\\\":o(\\\"][\\\"),\\\">\\\":s(\\\">\\\"),\\\"<\\\":s(\\\"<\\\"),\\\"=\\\":s(\\\"=\\\")}},{\\\"../../constants/filter_ops\\\":691,\\\"fast-isnumeric\\\":225}],949:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,n){var i=n(\\\"contours.start\\\"),a=n(\\\"contours.end\\\"),o=!1===i||!1===a,s=r(\\\"contours.size\\\");!(o?e.autocontour=!0:r(\\\"autocontour\\\",!1))&&s||r(\\\"ncontours\\\")}},{}],950:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\");function i(t){return n.extendFlat({},t,{edgepaths:n.extendDeep([],t.edgepaths),paths:n.extendDeep([],t.paths)})}e.exports=function(t,e){var r,a,o,s=function(t){return t.reverse()},l=function(t){return t};switch(e){case\\\"=\\\":case\\\"<\\\":return t;case\\\">\\\":for(1!==t.length&&n.warn(\\\"Contour data invalid for the specified inequality operation.\\\"),a=t[0],r=0;r<a.edgepaths.length;r++)a.edgepaths[r]=s(a.edgepaths[r]);for(r=0;r<a.paths.length;r++)a.paths[r]=s(a.paths[r]);return t;case\\\"][\\\":var c=s;s=l,l=c;case\\\"[]\\\":for(2!==t.length&&n.warn(\\\"Contour data invalid for the specified inequality range operation.\\\"),a=i(t[0]),o=i(t[1]),r=0;r<a.edgepaths.length;r++)a.edgepaths[r]=s(a.edgepaths[r]);for(r=0;r<a.paths.length;r++)a.paths[r]=s(a.paths[r]);for(;o.edgepaths.length;)a.edgepaths.push(l(o.edgepaths.shift()));for(;o.paths.length;)a.paths.push(l(o.paths.shift()));return[a]}}},{\\\"../../lib\\\":719}],951:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../heatmap/xyz_defaults\\\"),a=t(\\\"./constraint_defaults\\\"),o=t(\\\"./contours_defaults\\\"),s=t(\\\"./style_defaults\\\"),l=t(\\\"./attributes\\\");e.exports=function(t,e,r,c){function u(r,i){return n.coerce(t,e,l,r,i)}if(i(t,e,u,c)){u(\\\"text\\\"),u(\\\"hovertext\\\"),u(\\\"hovertemplate\\\");var h=\\\"constraint\\\"===u(\\\"contours.type\\\");u(\\\"connectgaps\\\",n.isArray1D(e.z)),h?a(t,e,u,c,r):(o(t,e,u,function(r){return n.coerce2(t,e,l,r)}),s(t,e,u,c))}else e.visible=!1}},{\\\"../../lib\\\":719,\\\"../heatmap/xyz_defaults\\\":1015,\\\"./attributes\\\":942,\\\"./constraint_defaults\\\":947,\\\"./contours_defaults\\\":949,\\\"./style_defaults\\\":963}],952:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./constraint_mapping\\\"),a=t(\\\"./end_plus\\\");e.exports=function(t,e,r){for(var o=\\\"constraint\\\"===t.type?i[t._operation](t.value):t,s=o.size,l=[],c=a(o),u=r.trace._carpetTrace,h=u?{xaxis:u.aaxis,yaxis:u.baxis,x:r.a,y:r.b}:{xaxis:e.xaxis,yaxis:e.yaxis,x:r.x,y:r.y},f=o.start;f<c;f+=s)if(l.push(n.extendFlat({level:f,crossings:{},starts:[],edgepaths:[],paths:[],z:r.z,smoothing:r.trace.line.smoothing},h)),l.length>1e3){n.warn(\\\"Too many contours, clipping at 1000\\\",t);break}return l}},{\\\"../../lib\\\":719,\\\"./constraint_mapping\\\":948,\\\"./end_plus\\\":953}],953:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){return t.end+t.size/1e6}},{}],954:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./constants\\\");function a(t,e,r,n){return Math.abs(t[0]-e[0])<r&&Math.abs(t[1]-e[1])<n}function o(t,e,r,o,l){var c,u=e.join(\\\",\\\"),h=u,f=t.crossings[h],p=function(t,e,r){var n=0,a=0;t>20&&e?208===t||1114===t?n=0===r[0]?1:-1:a=0===r[1]?1:-1:-1!==i.BOTTOMSTART.indexOf(t)?a=1:-1!==i.LEFTSTART.indexOf(t)?n=1:-1!==i.TOPSTART.indexOf(t)?a=-1:n=-1;return[n,a]}(f,r,e),d=[s(t,e,[-p[0],-p[1]])],g=p.join(\\\",\\\"),v=t.z.length,m=t.z[0].length;for(c=0;c<1e4;c++){if(f>20?(f=i.CHOOSESADDLE[f][(p[0]||p[1])<0?0:1],t.crossings[h]=i.SADDLEREMAINDER[f]):delete t.crossings[h],!(p=i.NEWDELTA[f])){n.log(\\\"Found bad marching index:\\\",f,e,t.level);break}d.push(s(t,e,p)),e[0]+=p[0],e[1]+=p[1],a(d[d.length-1],d[d.length-2],o,l)&&d.pop(),h=e.join(\\\",\\\");var y=p[0]&&(e[0]<0||e[0]>m-2)||p[1]&&(e[1]<0||e[1]>v-2);if(h===u&&p.join(\\\",\\\")===g||r&&y)break;f=t.crossings[h]}1e4===c&&n.log(\\\"Infinite loop in contour?\\\");var x,b,_,w,k,T,A,M,S,E,C,L,P,O,z,I=a(d[0],d[d.length-1],o,l),D=0,R=.2*t.smoothing,F=[],B=0;for(c=1;c<d.length;c++)L=d[c],P=d[c-1],void 0,void 0,O=L[2]-P[2],z=L[3]-P[3],D+=A=Math.sqrt(O*O+z*z),F.push(A);var N=D/F.length*R;function j(t){return d[t%d.length]}for(c=d.length-2;c>=B;c--)if((x=F[c])<N){for(_=0,b=c-1;b>=B&&x+F[b]<N;b--)x+=F[b];if(I&&c===d.length-2)for(_=0;_<b&&x+F[_]<N;_++)x+=F[_];k=c-b+_+1,T=Math.floor((c+b+_+2)/2),w=I||c!==d.length-2?I||-1!==b?k%2?j(T):[(j(T)[0]+j(T+1)[0])/2,(j(T)[1]+j(T+1)[1])/2]:d[0]:d[d.length-1],d.splice(b+1,c-b+1,w),c=b+1,_&&(B=_),I&&(c===d.length-2?d[_]=d[d.length-1]:0===c&&(d[d.length-1]=d[0]))}for(d.splice(0,B),c=0;c<d.length;c++)d[c].length=2;if(!(d.length<2))if(I)d.pop(),t.paths.push(d);else{r||n.log(\\\"Unclosed interior contour?\\\",t.level,u,d.join(\\\"L\\\"));var U=!1;for(M=0;M<t.edgepaths.length;M++)if(E=t.edgepaths[M],!U&&a(E[0],d[d.length-1],o,l)){d.pop(),U=!0;var V=!1;for(S=0;S<t.edgepaths.length;S++)if(a((C=t.edgepaths[S])[C.length-1],d[0],o,l)){V=!0,d.shift(),t.edgepaths.splice(M,1),S===M?t.paths.push(d.concat(C)):(S>M&&S--,t.edgepaths[S]=C.concat(d,E));break}V||(t.edgepaths[M]=d.concat(E))}for(M=0;M<t.edgepaths.length&&!U;M++)a((E=t.edgepaths[M])[E.length-1],d[0],o,l)&&(d.shift(),t.edgepaths[M]=E.concat(d),U=!0);U||t.edgepaths.push(d)}}function s(t,e,r){var n=e[0]+Math.max(r[0],0),i=e[1]+Math.max(r[1],0),a=t.z[i][n],o=t.xaxis,s=t.yaxis;if(r[1]){var l=(t.level-a)/(t.z[i][n+1]-a);return[o.c2p((1-l)*t.x[n]+l*t.x[n+1],!0),s.c2p(t.y[i],!0),n+l,i]}var c=(t.level-a)/(t.z[i+1][n]-a);return[o.c2p(t.x[n],!0),s.c2p((1-c)*t.y[i]+c*t.y[i+1],!0),n,i+c]}e.exports=function(t,e,r){var i,a,s,l;for(e=e||.01,r=r||.01,a=0;a<t.length;a++){for(s=t[a],l=0;l<s.starts.length;l++)o(s,s.starts[l],\\\"edge\\\",e,r);for(i=0;Object.keys(s.crossings).length&&i<1e4;)i++,o(s,Object.keys(s.crossings)[0].split(\\\",\\\").map(Number),void 0,e,r);1e4===i&&n.log(\\\"Infinite loop in contour?\\\")}}},{\\\"../../lib\\\":719,\\\"./constants\\\":946}],955:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/color\\\"),i=t(\\\"../heatmap/hover\\\");e.exports=function(t,e,r,a,o){var s=i(t,e,r,a,o,!0);return s&&s.forEach(function(t){var e=t.trace;\\\"constraint\\\"===e.contours.type&&(e.fillcolor&&n.opacity(e.fillcolor)?t.color=n.addOpacity(e.fillcolor,1):e.contours.showlines&&n.opacity(e.line.color)&&(t.color=n.addOpacity(e.line.color,1)))}),s}},{\\\"../../components/color\\\":593,\\\"../heatmap/hover\\\":1008}],956:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),calc:t(\\\"./calc\\\"),plot:t(\\\"./plot\\\").plot,style:t(\\\"./style\\\"),colorbar:t(\\\"./colorbar\\\"),hoverPoints:t(\\\"./hover\\\"),moduleType:\\\"trace\\\",name:\\\"contour\\\",basePlotModule:t(\\\"../../plots/cartesian\\\"),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"2dMap\\\",\\\"contour\\\",\\\"showLegend\\\"],meta:{}}},{\\\"../../plots/cartesian\\\":778,\\\"./attributes\\\":942,\\\"./calc\\\":943,\\\"./colorbar\\\":945,\\\"./defaults\\\":951,\\\"./hover\\\":955,\\\"./plot\\\":960,\\\"./style\\\":962}],957:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\");e.exports=function(t,e,r,i){if(i||(i={}),t(\\\"contours.showlabels\\\")){var a=e.font;n.coerceFont(t,\\\"contours.labelfont\\\",{family:a.family,size:a.size,color:r}),t(\\\"contours.labelformat\\\")}!1!==i.hasHover&&t(\\\"zhoverformat\\\")}},{\\\"../../lib\\\":719}],958:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../components/colorscale\\\"),a=t(\\\"./end_plus\\\");e.exports=function(t){var e=t.contours,r=e.start,o=a(e),s=e.size||1,l=Math.floor((o-r)/s)+1,c=\\\"lines\\\"===e.coloring?0:1,u=i.extractOpts(t);isFinite(s)||(s=1,l=1);var h,f,p=u.reversescale?i.flipScale(u.colorscale):u.colorscale,d=p.length,g=new Array(d),v=new Array(d);if(\\\"heatmap\\\"===e.coloring){var m=u.min,y=u.max;for(f=0;f<d;f++)h=p[f],g[f]=h[0]*(y-m)+m,v[f]=h[1];var x=n.extent([m,y,e.start,e.start+s*(l-1)]),b=x[m<y?0:1],_=x[m<y?1:0];b!==m&&(g.splice(0,0,b),v.splice(0,0,v[0])),_!==y&&(g.push(_),v.push(v[v.length-1]))}else for(f=0;f<d;f++)h=p[f],g[f]=(h[0]*(l+c-1)-c/2)*s+r,v[f]=h[1];return i.makeColorScaleFunc({domain:g,range:v},{noNumericCheck:!0})}},{\\\"../../components/colorscale\\\":605,\\\"./end_plus\\\":953,d3:163}],959:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./constants\\\");function i(t,e){var r=(e[0][0]>t?0:1)+(e[0][1]>t?0:2)+(e[1][1]>t?0:4)+(e[1][0]>t?0:8);return 5===r||10===r?t>(e[0][0]+e[0][1]+e[1][0]+e[1][1])/4?5===r?713:1114:5===r?104:208:15===r?0:r}e.exports=function(t){var e,r,a,o,s,l,c,u,h,f=t[0].z,p=f.length,d=f[0].length,g=2===p||2===d;for(r=0;r<p-1;r++)for(o=[],0===r&&(o=o.concat(n.BOTTOMSTART)),r===p-2&&(o=o.concat(n.TOPSTART)),e=0;e<d-1;e++)for(a=o.slice(),0===e&&(a=a.concat(n.LEFTSTART)),e===d-2&&(a=a.concat(n.RIGHTSTART)),s=e+\\\",\\\"+r,l=[[f[r][e],f[r][e+1]],[f[r+1][e],f[r+1][e+1]]],h=0;h<t.length;h++)(c=i((u=t[h]).level,l))&&(u.crossings[s]=c,-1!==a.indexOf(c)&&(u.starts.push([e,r]),g&&-1!==a.indexOf(c,a.indexOf(c)+1)&&u.starts.push([e,r])))}},{\\\"./constants\\\":946}],960:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../components/drawing\\\"),o=t(\\\"../../lib/svg_text_utils\\\"),s=t(\\\"../../plots/cartesian/axes\\\"),l=t(\\\"../../plots/cartesian/set_convert\\\"),c=t(\\\"../heatmap/plot\\\"),u=t(\\\"./make_crossings\\\"),h=t(\\\"./find_all_paths\\\"),f=t(\\\"./empty_pathinfo\\\"),p=t(\\\"./convert_to_constraints\\\"),d=t(\\\"./close_boundaries\\\"),g=t(\\\"./constants\\\"),v=g.LABELOPTIMIZER;function m(t,e){var r,n,o,s,l,c,u,h=function(t,e){var r=t.prefixBoundary;if(void 0===r){var n=Math.min(t.z[0][0],t.z[0][1]);r=!t.edgepaths.length&&n>t.level}return r?\\\"M\\\"+e.join(\\\"L\\\")+\\\"Z\\\":\\\"\\\"}(t,e),f=0,p=t.edgepaths.map(function(t,e){return e}),d=!0;function g(t){return Math.abs(t[1]-e[2][1])<.01}function v(t){return Math.abs(t[0]-e[0][0])<.01}function m(t){return Math.abs(t[0]-e[2][0])<.01}for(;p.length;){for(c=a.smoothopen(t.edgepaths[f],t.smoothing),h+=d?c:c.replace(/^M/,\\\"L\\\"),p.splice(p.indexOf(f),1),r=t.edgepaths[f][t.edgepaths[f].length-1],s=-1,o=0;o<4;o++){if(!r){i.log(\\\"Missing end?\\\",f,t);break}for(u=r,Math.abs(u[1]-e[0][1])<.01&&!m(r)?n=e[1]:v(r)?n=e[0]:g(r)?n=e[3]:m(r)&&(n=e[2]),l=0;l<t.edgepaths.length;l++){var y=t.edgepaths[l][0];Math.abs(r[0]-n[0])<.01?Math.abs(r[0]-y[0])<.01&&(y[1]-r[1])*(n[1]-y[1])>=0&&(n=y,s=l):Math.abs(r[1]-n[1])<.01?Math.abs(r[1]-y[1])<.01&&(y[0]-r[0])*(n[0]-y[0])>=0&&(n=y,s=l):i.log(\\\"endpt to newendpt is not vert. or horz.\\\",r,n,y)}if(r=n,s>=0)break;h+=\\\"L\\\"+n}if(s===t.edgepaths.length){i.log(\\\"unclosed perimeter path\\\");break}f=s,(d=-1===p.indexOf(f))&&(f=p[0],h+=\\\"Z\\\")}for(f=0;f<t.paths.length;f++)h+=a.smoothclosed(t.paths[f],t.smoothing);return h}function y(t,e,r,n){var a=e.width/2,o=e.height/2,s=t.x,l=t.y,c=t.theta,u=Math.cos(c)*a,h=Math.sin(c)*a,f=(s>n.center?n.right-s:s-n.left)/(u+Math.abs(Math.sin(c)*o)),p=(l>n.middle?n.bottom-l:l-n.top)/(Math.abs(h)+Math.cos(c)*o);if(f<1||p<1)return 1/0;var d=v.EDGECOST*(1/(f-1)+1/(p-1));d+=v.ANGLECOST*c*c;for(var g=s-u,m=l-h,y=s+u,x=l+h,b=0;b<r.length;b++){var _=r[b],w=Math.cos(_.theta)*_.width/2,k=Math.sin(_.theta)*_.width/2,T=2*i.segmentDistance(g,m,y,x,_.x-w,_.y-k,_.x+w,_.y+k)/(e.height+_.height),A=_.level===e.level,M=A?v.SAMELEVELDISTANCE:1;if(T<=M)return 1/0;d+=v.NEIGHBORCOST*(A?v.SAMELEVELFACTOR:1)/(T-M)}return d}r.plot=function(t,e,o,s){var l=e.xaxis,v=e.yaxis;i.makeTraceGroups(s,o,\\\"contour\\\").each(function(o){var s=n.select(this),y=o[0],x=y.trace,b=y.x,_=y.y,w=x.contours,k=f(w,e,y),T=i.ensureSingle(s,\\\"g\\\",\\\"heatmapcoloring\\\"),A=[];\\\"heatmap\\\"===w.coloring&&(A=[o]),c(t,e,A,T),u(k),h(k);var M=l.c2p(b[0],!0),S=l.c2p(b[b.length-1],!0),E=v.c2p(_[0],!0),C=v.c2p(_[_.length-1],!0),L=[[M,C],[S,C],[S,E],[M,E]],P=k;\\\"constraint\\\"===w.type&&(P=p(k,w._operation),d(P,w._operation,L,x)),function(t,e,r){var n=i.ensureSingle(t,\\\"g\\\",\\\"contourbg\\\").selectAll(\\\"path\\\").data(\\\"fill\\\"===r.coloring?[0]:[]);n.enter().append(\\\"path\\\"),n.exit().remove(),n.attr(\\\"d\\\",\\\"M\\\"+e.join(\\\"L\\\")+\\\"Z\\\").style(\\\"stroke\\\",\\\"none\\\")}(s,L,w),function(t,e,r,a){var o=i.ensureSingle(t,\\\"g\\\",\\\"contourfill\\\").selectAll(\\\"path\\\").data(\\\"fill\\\"===a.coloring||\\\"constraint\\\"===a.type&&\\\"=\\\"!==a._operation?e:[]);o.enter().append(\\\"path\\\"),o.exit().remove(),o.each(function(t){var e=m(t,r);e?n.select(this).attr(\\\"d\\\",e).style(\\\"stroke\\\",\\\"none\\\"):n.select(this).remove()})}(s,P,L,w),function(t,e,o,s,l){var c=i.ensureSingle(t,\\\"g\\\",\\\"contourlines\\\"),u=!1!==l.showlines,h=l.showlabels,f=u&&h,p=r.createLines(c,u||h,e),d=r.createLineClip(c,f,o,s.trace.uid),v=t.selectAll(\\\"g.contourlabels\\\").data(h?[0]:[]);if(v.exit().remove(),v.enter().append(\\\"g\\\").classed(\\\"contourlabels\\\",!0),h){var m=[],y=[];i.clearLocationCache();var x=r.labelFormatter(l,s.t.cb,o._fullLayout),b=a.tester.append(\\\"text\\\").attr(\\\"data-notex\\\",1).call(a.font,l.labelfont),_=e[0].xaxis,w=e[0].yaxis,k=_._length,T=w._length,A=_.range,M=w.range,S=i.aggNums(Math.min,null,s.x),E=i.aggNums(Math.max,null,s.x),C=i.aggNums(Math.min,null,s.y),L=i.aggNums(Math.max,null,s.y),P=Math.max(_.c2p(S,!0),0),O=Math.min(_.c2p(E,!0),k),z=Math.max(w.c2p(L,!0),0),I=Math.min(w.c2p(C,!0),T),D={};A[0]<A[1]?(D.left=P,D.right=O):(D.left=O,D.right=P),M[0]<M[1]?(D.top=z,D.bottom=I):(D.top=I,D.bottom=z),D.middle=(D.top+D.bottom)/2,D.center=(D.left+D.right)/2,m.push([[D.left,D.top],[D.right,D.top],[D.right,D.bottom],[D.left,D.bottom]]);var R=Math.sqrt(k*k+T*T),F=g.LABELDISTANCE*R/Math.max(1,e.length/g.LABELINCREASE);p.each(function(t){var e=r.calcTextOpts(t.level,x,b,o);n.select(this).selectAll(\\\"path\\\").each(function(){var t=i.getVisibleSegment(this,D,e.height/2);if(t&&!(t.len<(e.width+e.height)*g.LABELMIN))for(var n=Math.min(Math.ceil(t.len/F),g.LABELMAX),a=0;a<n;a++){var o=r.findBestTextLocation(this,t,e,y,D);if(!o)break;r.addLabelData(o,e,y,m)}})}),b.remove(),r.drawLabels(v,y,o,d,f?m:null)}h&&!u&&p.remove()}(s,k,t,y,w),function(t,e,r,n,o){var s=r._fullLayout._clips,l=\\\"clip\\\"+n.trace.uid,c=s.selectAll(\\\"#\\\"+l).data(n.trace.connectgaps?[]:[0]);if(c.enter().append(\\\"clipPath\\\").classed(\\\"contourclip\\\",!0).attr(\\\"id\\\",l),c.exit().remove(),!1===n.trace.connectgaps){var f={level:.9,crossings:{},starts:[],edgepaths:[],paths:[],xaxis:e.xaxis,yaxis:e.yaxis,x:n.x,y:n.y,z:function(t){var e,r,n=t.trace._emptypoints,i=[],a=t.z.length,o=t.z[0].length,s=[];for(e=0;e<o;e++)s.push(1);for(e=0;e<a;e++)i.push(s.slice());for(e=0;e<n.length;e++)r=n[e],i[r[0]][r[1]]=0;return t.zmask=i,i}(n),smoothing:0};u([f]),h([f]);var p=m(f,o),d=i.ensureSingle(c,\\\"path\\\",\\\"\\\");d.attr(\\\"d\\\",p)}else l=null;a.setClipUrl(t,l,r)}(s,e,t,y,L)})},r.createLines=function(t,e,r){var n=r[0].smoothing,i=t.selectAll(\\\"g.contourlevel\\\").data(e?r:[]);if(i.exit().remove(),i.enter().append(\\\"g\\\").classed(\\\"contourlevel\\\",!0),e){var o=i.selectAll(\\\"path.openline\\\").data(function(t){return t.pedgepaths||t.edgepaths});o.exit().remove(),o.enter().append(\\\"path\\\").classed(\\\"openline\\\",!0),o.attr(\\\"d\\\",function(t){return a.smoothopen(t,n)}).style(\\\"stroke-miterlimit\\\",1).style(\\\"vector-effect\\\",\\\"non-scaling-stroke\\\");var s=i.selectAll(\\\"path.closedline\\\").data(function(t){return t.ppaths||t.paths});s.exit().remove(),s.enter().append(\\\"path\\\").classed(\\\"closedline\\\",!0),s.attr(\\\"d\\\",function(t){return a.smoothclosed(t,n)}).style(\\\"stroke-miterlimit\\\",1).style(\\\"vector-effect\\\",\\\"non-scaling-stroke\\\")}return i},r.createLineClip=function(t,e,r,n){var i=e?\\\"clipline\\\"+n:null,o=r._fullLayout._clips.selectAll(\\\"#\\\"+i).data(e?[0]:[]);return o.exit().remove(),o.enter().append(\\\"clipPath\\\").classed(\\\"contourlineclip\\\",!0).attr(\\\"id\\\",i),a.setClipUrl(t,i,r),o},r.labelFormatter=function(t,e,r){if(t.labelformat)return r._d3locale.numberFormat(t.labelformat);var n;if(e)n=e.axis;else{if(n={type:\\\"linear\\\",_id:\\\"ycontour\\\",showexponent:\\\"all\\\",exponentformat:\\\"B\\\"},\\\"constraint\\\"===t.type){var i=t.value;Array.isArray(i)?n.range=[i[0],i[i.length-1]]:n.range=[i,i]}else n.range=[t.start,t.end],n.nticks=(t.end-t.start)/t.size;n.range[0]===n.range[1]&&(n.range[1]+=n.range[0]||1),n.nticks||(n.nticks=1e3),l(n,r),s.prepTicks(n),n._tmin=null,n._tmax=null}return function(t){return s.tickText(n,t).text}},r.calcTextOpts=function(t,e,r,n){var i=e(t);r.text(i).call(o.convertToTspans,n);var s=a.bBox(r.node(),!0);return{text:i,width:s.width,height:s.height,level:t,dy:(s.top+s.bottom)/2}},r.findBestTextLocation=function(t,e,r,n,a){var o,s,l,c,u,h=r.width;e.isClosed?(s=e.len/v.INITIALSEARCHPOINTS,o=e.min+s/2,l=e.max):(s=(e.len-h)/(v.INITIALSEARCHPOINTS+1),o=e.min+s+h/2,l=e.max-(s+h)/2);for(var f=1/0,p=0;p<v.ITERATIONS;p++){for(var d=o;d<l;d+=s){var g=i.getTextLocation(t,e.total,d,h),m=y(g,r,n,a);m<f&&(f=m,u=g,c=d)}if(f>2*v.MAXCOST)break;p&&(s/=2),l=(o=c-s/2)+1.5*s}if(f<=v.MAXCOST)return u},r.addLabelData=function(t,e,r,n){var i=e.width/2,a=e.height/2,o=t.x,s=t.y,l=t.theta,c=Math.sin(l),u=Math.cos(l),h=i*u,f=a*c,p=i*c,d=-a*u,g=[[o-h-f,s-p-d],[o+h-f,s+p-d],[o+h+f,s+p+d],[o-h+f,s-p+d]];r.push({text:e.text,x:o,y:s,dy:e.dy,theta:l,level:e.level,width:e.width,height:e.height}),n.push(g)},r.drawLabels=function(t,e,r,a,s){var l=t.selectAll(\\\"text\\\").data(e,function(t){return t.text+\\\",\\\"+t.x+\\\",\\\"+t.y+\\\",\\\"+t.theta});if(l.exit().remove(),l.enter().append(\\\"text\\\").attr({\\\"data-notex\\\":1,\\\"text-anchor\\\":\\\"middle\\\"}).each(function(t){var e=t.x+Math.sin(t.theta)*t.dy,i=t.y-Math.cos(t.theta)*t.dy;n.select(this).text(t.text).attr({x:e,y:i,transform:\\\"rotate(\\\"+180*t.theta/Math.PI+\\\" \\\"+e+\\\" \\\"+i+\\\")\\\"}).call(o.convertToTspans,r)}),s){for(var c=\\\"\\\",u=0;u<s.length;u++)c+=\\\"M\\\"+s[u].join(\\\"L\\\")+\\\"Z\\\";i.ensureSingle(a,\\\"path\\\",\\\"\\\").attr(\\\"d\\\",c)}}},{\\\"../../components/drawing\\\":614,\\\"../../lib\\\":719,\\\"../../lib/svg_text_utils\\\":743,\\\"../../plots/cartesian/axes\\\":767,\\\"../../plots/cartesian/set_convert\\\":785,\\\"../heatmap/plot\\\":1012,\\\"./close_boundaries\\\":944,\\\"./constants\\\":946,\\\"./convert_to_constraints\\\":950,\\\"./empty_pathinfo\\\":952,\\\"./find_all_paths\\\":954,\\\"./make_crossings\\\":959,d3:163}],961:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/cartesian/axes\\\"),i=t(\\\"../../lib\\\");function a(t,e,r){var i={type:\\\"linear\\\",range:[t,e]};return n.autoTicks(i,(e-t)/(r||15)),i}e.exports=function(t,e){var r=t.contours;if(t.autocontour){var o=t.zmin,s=t.zmax;(t.zauto||void 0===o)&&(o=i.aggNums(Math.min,null,e)),(t.zauto||void 0===s)&&(s=i.aggNums(Math.max,null,e));var l=a(o,s,t.ncontours);r.size=l.dtick,r.start=n.tickFirst(l),l.range.reverse(),r.end=n.tickFirst(l),r.start===o&&(r.start+=r.size),r.end===s&&(r.end-=r.size),r.start>r.end&&(r.start=r.end=(r.start+r.end)/2),t._input.contours||(t._input.contours={}),i.extendFlat(t._input.contours,{start:r.start,end:r.end,size:r.size}),t._input.autocontour=!0}else if(\\\"constraint\\\"!==r.type){var c,u=r.start,h=r.end,f=t._input.contours;if(u>h&&(r.start=f.start=h,h=r.end=f.end=u,u=r.start),!(r.size>0))c=u===h?1:a(u,h,t.ncontours).dtick,f.size=r.size=c}}},{\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767}],962:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../components/drawing\\\"),a=t(\\\"../heatmap/style\\\"),o=t(\\\"./make_color_map\\\");e.exports=function(t){var e=n.select(t).selectAll(\\\"g.contour\\\");e.style(\\\"opacity\\\",function(t){return t[0].trace.opacity}),e.each(function(t){var e=n.select(this),r=t[0].trace,a=r.contours,s=r.line,l=a.size||1,c=a.start,u=\\\"constraint\\\"===a.type,h=!u&&\\\"lines\\\"===a.coloring,f=!u&&\\\"fill\\\"===a.coloring,p=h||f?o(r):null;e.selectAll(\\\"g.contourlevel\\\").each(function(t){n.select(this).selectAll(\\\"path\\\").call(i.lineGroupStyle,s.width,h?p(t.level):s.color,s.dash)});var d=a.labelfont;if(e.selectAll(\\\"g.contourlabels text\\\").each(function(t){i.font(n.select(this),{family:d.family,size:d.size,color:d.color||(h?p(t.level):s.color)})}),u)e.selectAll(\\\"g.contourfill path\\\").style(\\\"fill\\\",r.fillcolor);else if(f){var g;e.selectAll(\\\"g.contourfill path\\\").style(\\\"fill\\\",function(t){return void 0===g&&(g=t.level),p(t.level+.5*l)}),void 0===g&&(g=c),e.selectAll(\\\"g.contourbg path\\\").style(\\\"fill\\\",p(g-.5*l))}}),a(t)}},{\\\"../../components/drawing\\\":614,\\\"../heatmap/style\\\":1013,\\\"./make_color_map\\\":958,d3:163}],963:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/colorscale/defaults\\\"),i=t(\\\"./label_defaults\\\");e.exports=function(t,e,r,a,o){var s,l=r(\\\"contours.coloring\\\"),c=\\\"\\\";\\\"fill\\\"===l&&(s=r(\\\"contours.showlines\\\")),!1!==s&&(\\\"lines\\\"!==l&&(c=r(\\\"line.color\\\",\\\"#000\\\")),r(\\\"line.width\\\",.5),r(\\\"line.dash\\\")),\\\"none\\\"!==l&&(!0!==t.showlegend&&(e.showlegend=!1),e._dfltShowLegend=!1,n(t,e,a,r,{prefix:\\\"\\\",cLetter:\\\"z\\\"})),r(\\\"line.smoothing\\\"),i(r,a,c,o)}},{\\\"../../components/colorscale/defaults\\\":603,\\\"./label_defaults\\\":957}],964:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../heatmap/attributes\\\"),i=t(\\\"../contour/attributes\\\"),a=i.contours,o=t(\\\"../scatter/attributes\\\"),s=t(\\\"../../components/colorscale/attributes\\\"),l=t(\\\"../../lib/extend\\\").extendFlat,c=o.line;e.exports=l({carpet:{valType:\\\"string\\\",editType:\\\"calc\\\"},z:n.z,a:n.x,a0:n.x0,da:n.dx,b:n.y,b0:n.y0,db:n.dy,text:n.text,hovertext:n.hovertext,transpose:n.transpose,atype:n.xtype,btype:n.ytype,fillcolor:i.fillcolor,autocontour:i.autocontour,ncontours:i.ncontours,contours:{type:a.type,start:a.start,end:a.end,size:a.size,coloring:{valType:\\\"enumerated\\\",values:[\\\"fill\\\",\\\"lines\\\",\\\"none\\\"],dflt:\\\"fill\\\",editType:\\\"calc\\\"},showlines:a.showlines,showlabels:a.showlabels,labelfont:a.labelfont,labelformat:a.labelformat,operation:a.operation,value:a.value,editType:\\\"calc\\\",impliedEdits:{autocontour:!1}},line:{color:l({},c.color,{}),width:c.width,dash:c.dash,smoothing:l({},c.smoothing,{}),editType:\\\"plot\\\"},transforms:void 0},s(\\\"\\\",{cLetter:\\\"z\\\",autoColorDflt:!1}))},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../lib/extend\\\":710,\\\"../contour/attributes\\\":942,\\\"../heatmap/attributes\\\":1001,\\\"../scatter/attributes\\\":1112}],965:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/colorscale/calc\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../heatmap/convert_column_xyz\\\"),o=t(\\\"../heatmap/clean_2d_array\\\"),s=t(\\\"../heatmap/interp2d\\\"),l=t(\\\"../heatmap/find_empties\\\"),c=t(\\\"../heatmap/make_bound_array\\\"),u=t(\\\"./defaults\\\"),h=t(\\\"../carpet/lookup_carpetid\\\"),f=t(\\\"../contour/set_contours\\\");e.exports=function(t,e){var r=e._carpetTrace=h(t,e);if(r&&r.visible&&\\\"legendonly\\\"!==r.visible){if(!e.a||!e.b){var p=t.data[r.index],d=t.data[e.index];d.a||(d.a=p.a),d.b||(d.b=p.b),u(d,e,e._defaultColor,t._fullLayout)}var g=function(t,e){var r,u,h,f,p,d,g,v=e._carpetTrace,m=v.aaxis,y=v.baxis;m._minDtick=0,y._minDtick=0,i.isArray1D(e.z)&&a(e,m,y,\\\"a\\\",\\\"b\\\",[\\\"z\\\"]);r=e._a=e._a||e.a,f=e._b=e._b||e.b,r=r?m.makeCalcdata(e,\\\"_a\\\"):[],f=f?y.makeCalcdata(e,\\\"_b\\\"):[],u=e.a0||0,h=e.da||1,p=e.b0||0,d=e.db||1,g=e._z=o(e._z||e.z,e.transpose),e._emptypoints=l(g),s(g,e._emptypoints);var x=i.maxRowLength(g),b=\\\"scaled\\\"===e.xtype?\\\"\\\":r,_=c(e,b,u,h,x,m),w=\\\"scaled\\\"===e.ytype?\\\"\\\":f,k=c(e,w,p,d,g.length,y),T={a:_,b:k,z:g};\\\"levels\\\"===e.contours.type&&\\\"none\\\"!==e.contours.coloring&&n(t,e,{vals:g,containerStr:\\\"\\\",cLetter:\\\"z\\\"});return[T]}(t,e);return f(e,e._z),g}}},{\\\"../../components/colorscale/calc\\\":601,\\\"../../lib\\\":719,\\\"../carpet/lookup_carpetid\\\":915,\\\"../contour/set_contours\\\":961,\\\"../heatmap/clean_2d_array\\\":1003,\\\"../heatmap/convert_column_xyz\\\":1005,\\\"../heatmap/find_empties\\\":1007,\\\"../heatmap/interp2d\\\":1010,\\\"../heatmap/make_bound_array\\\":1011,\\\"./defaults\\\":966}],966:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../heatmap/xyz_defaults\\\"),a=t(\\\"./attributes\\\"),o=t(\\\"../contour/constraint_defaults\\\"),s=t(\\\"../contour/contours_defaults\\\"),l=t(\\\"../contour/style_defaults\\\");e.exports=function(t,e,r,c){function u(r,i){return n.coerce(t,e,a,r,i)}if(u(\\\"carpet\\\"),t.a&&t.b){if(!i(t,e,u,c,\\\"a\\\",\\\"b\\\"))return void(e.visible=!1);u(\\\"text\\\"),\\\"constraint\\\"===u(\\\"contours.type\\\")?o(t,e,u,c,r,{hasHover:!1}):(s(t,e,u,function(r){return n.coerce2(t,e,a,r)}),l(t,e,u,c,{hasHover:!1}))}else e._defaultColor=r,e._length=null}},{\\\"../../lib\\\":719,\\\"../contour/constraint_defaults\\\":947,\\\"../contour/contours_defaults\\\":949,\\\"../contour/style_defaults\\\":963,\\\"../heatmap/xyz_defaults\\\":1015,\\\"./attributes\\\":964}],967:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),colorbar:t(\\\"../contour/colorbar\\\"),calc:t(\\\"./calc\\\"),plot:t(\\\"./plot\\\"),style:t(\\\"../contour/style\\\"),moduleType:\\\"trace\\\",name:\\\"contourcarpet\\\",basePlotModule:t(\\\"../../plots/cartesian\\\"),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"carpet\\\",\\\"contour\\\",\\\"symbols\\\",\\\"showLegend\\\",\\\"hasLines\\\",\\\"carpetDependent\\\"],meta:{}}},{\\\"../../plots/cartesian\\\":778,\\\"../contour/colorbar\\\":945,\\\"../contour/style\\\":962,\\\"./attributes\\\":964,\\\"./calc\\\":965,\\\"./defaults\\\":966,\\\"./plot\\\":970}],968:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/drawing\\\"),i=t(\\\"../carpet/axis_aligned_line\\\"),a=t(\\\"../../lib\\\");e.exports=function(t,e,r,o,s,l,c,u){var h,f,p,d,g,v,m,y=\\\"\\\",x=e.edgepaths.map(function(t,e){return e}),b=!0,_=1e-4*Math.abs(r[0][0]-r[2][0]),w=1e-4*Math.abs(r[0][1]-r[2][1]);function k(t){return Math.abs(t[1]-r[0][1])<w}function T(t){return Math.abs(t[1]-r[2][1])<w}function A(t){return Math.abs(t[0]-r[0][0])<_}function M(t){return Math.abs(t[0]-r[2][0])<_}function S(t,e){var r,n,a,o,h=\\\"\\\";for(k(t)&&!M(t)||T(t)&&!A(t)?(o=s.aaxis,a=i(s,l,[t[0],e[0]],.5*(t[1]+e[1]))):(o=s.baxis,a=i(s,l,.5*(t[0]+e[0]),[t[1],e[1]])),r=1;r<a.length;r++)for(h+=o.smoothing?\\\"C\\\":\\\"L\\\",n=0;n<a[r].length;n++){var f=a[r][n];h+=[c.c2p(f[0]),u.c2p(f[1])]+\\\" \\\"}return h}for(h=0,f=null;x.length;){var E=e.edgepaths[h][0];for(f&&(y+=S(f,E)),m=n.smoothopen(e.edgepaths[h].map(o),e.smoothing),y+=b?m:m.replace(/^M/,\\\"L\\\"),x.splice(x.indexOf(h),1),f=e.edgepaths[h][e.edgepaths[h].length-1],g=-1,d=0;d<4;d++){if(!f){a.log(\\\"Missing end?\\\",h,e);break}for(k(f)&&!M(f)?p=r[1]:A(f)?p=r[0]:T(f)?p=r[3]:M(f)&&(p=r[2]),v=0;v<e.edgepaths.length;v++){var C=e.edgepaths[v][0];Math.abs(f[0]-p[0])<_?Math.abs(f[0]-C[0])<_&&(C[1]-f[1])*(p[1]-C[1])>=0&&(p=C,g=v):Math.abs(f[1]-p[1])<w?Math.abs(f[1]-C[1])<w&&(C[0]-f[0])*(p[0]-C[0])>=0&&(p=C,g=v):a.log(\\\"endpt to newendpt is not vert. or horz.\\\",f,p,C)}if(g>=0)break;y+=S(f,p),f=p}if(g===e.edgepaths.length){a.log(\\\"unclosed perimeter path\\\");break}h=g,(b=-1===x.indexOf(h))&&(h=x[0],y+=S(f,p)+\\\"Z\\\",f=null)}for(h=0;h<e.paths.length;h++)y+=n.smoothclosed(e.paths[h].map(o),e.smoothing);return y}},{\\\"../../components/drawing\\\":614,\\\"../../lib\\\":719,\\\"../carpet/axis_aligned_line\\\":899}],969:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){var r,n,i,a,o,s,l,c,u;for(r=0;r<t.length;r++){for(o=(a=t[r]).pedgepaths=[],s=a.ppaths=[],n=0;n<a.edgepaths.length;n++){for(u=a.edgepaths[n],l=[],i=0;i<u.length;i++)l[i]=e(u[i]);o.push(l)}for(n=0;n<a.paths.length;n++){for(u=a.paths[n],c=[],i=0;i<u.length;i++)c[i]=e(u[i]);s.push(c)}}}},{}],970:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../carpet/map_1d_array\\\"),a=t(\\\"../carpet/makepath\\\"),o=t(\\\"../../components/drawing\\\"),s=t(\\\"../../lib\\\"),l=t(\\\"../contour/make_crossings\\\"),c=t(\\\"../contour/find_all_paths\\\"),u=t(\\\"../contour/plot\\\"),h=t(\\\"../contour/constants\\\"),f=t(\\\"../contour/convert_to_constraints\\\"),p=t(\\\"./join_all_paths\\\"),d=t(\\\"../contour/empty_pathinfo\\\"),g=t(\\\"./map_pathinfo\\\"),v=t(\\\"../carpet/lookup_carpetid\\\"),m=t(\\\"../contour/close_boundaries\\\");function y(t,e,r){var n=t.getPointAtLength(e),i=t.getPointAtLength(r),a=i.x-n.x,o=i.y-n.y,s=Math.sqrt(a*a+o*o);return[a/s,o/s]}function x(t){var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]);return[t[0]/e,t[1]/e]}function b(t,e){var r=Math.abs(t[0]*e[0]+t[1]*e[1]);return Math.sqrt(1-r*r)/r}e.exports=function(t,e,r,_){var w=e.xaxis,k=e.yaxis;s.makeTraceGroups(_,r,\\\"contour\\\").each(function(r){var _=n.select(this),T=r[0],A=T.trace,M=A._carpetTrace=v(t,A),S=t.calcdata[M.index][0];if(M.visible&&\\\"legendonly\\\"!==M.visible){var E=T.a,C=T.b,L=A.contours,P=d(L,e,T),O=\\\"constraint\\\"===L.type,z=L._operation,I=O?\\\"=\\\"===z?\\\"lines\\\":\\\"fill\\\":L.coloring,D=[[E[0],C[C.length-1]],[E[E.length-1],C[C.length-1]],[E[E.length-1],C[0]],[E[0],C[0]]];l(P);var R=1e-8*(E[E.length-1]-E[0]),F=1e-8*(C[C.length-1]-C[0]);c(P,R,F);var B,N,j,U,V=P;\\\"constraint\\\"===L.type&&(V=f(P,z),m(V,z,D,A)),g(P,G);var q=[];for(U=S.clipsegments.length-1;U>=0;U--)B=S.clipsegments[U],N=i([],B.x,w.c2p),j=i([],B.y,k.c2p),N.reverse(),j.reverse(),q.push(a(N,j,B.bicubic));var H=\\\"M\\\"+q.join(\\\"L\\\")+\\\"Z\\\";!function(t,e,r,n,o,l){var c,u,h,f,p=s.ensureSingle(t,\\\"g\\\",\\\"contourbg\\\").selectAll(\\\"path\\\").data(\\\"fill\\\"!==l||o?[]:[0]);p.enter().append(\\\"path\\\"),p.exit().remove();var d=[];for(f=0;f<e.length;f++)c=e[f],u=i([],c.x,r.c2p),h=i([],c.y,n.c2p),d.push(a(u,h,c.bicubic));p.attr(\\\"d\\\",\\\"M\\\"+d.join(\\\"L\\\")+\\\"Z\\\").style(\\\"stroke\\\",\\\"none\\\")}(_,S.clipsegments,w,k,O,I),function(t,e,r,i,a,o,l,c,u,h,f){var d=s.ensureSingle(e,\\\"g\\\",\\\"contourfill\\\").selectAll(\\\"path\\\").data(\\\"fill\\\"===h?a:[]);d.enter().append(\\\"path\\\"),d.exit().remove(),d.each(function(e){var a=p(t,e,o,l,c,u,r,i);e.prefixBoundary&&(a=f+a),a?n.select(this).attr(\\\"d\\\",a).style(\\\"stroke\\\",\\\"none\\\"):n.select(this).remove()})}(A,_,w,k,V,D,G,M,S,I,H),function(t,e,r,i,a,l,c){var f=s.ensureSingle(t,\\\"g\\\",\\\"contourlines\\\"),p=!1!==a.showlines,d=a.showlabels,g=p&&d,v=u.createLines(f,p||d,e),m=u.createLineClip(f,g,r,i.trace.uid),_=t.selectAll(\\\"g.contourlabels\\\").data(d?[0]:[]);if(_.exit().remove(),_.enter().append(\\\"g\\\").classed(\\\"contourlabels\\\",!0),d){var w=l.xaxis,k=l.yaxis,T=w._length,A=k._length,M=[[[0,0],[T,0],[T,A],[0,A]]],S=[];s.clearLocationCache();var E=u.labelFormatter(a,i.t.cb,r._fullLayout),C=o.tester.append(\\\"text\\\").attr(\\\"data-notex\\\",1).call(o.font,a.labelfont),L={left:0,right:T,center:T/2,top:0,bottom:A,middle:A/2},P=Math.sqrt(T*T+A*A),O=h.LABELDISTANCE*P/Math.max(1,e.length/h.LABELINCREASE);v.each(function(t){var e=u.calcTextOpts(t.level,E,C,r);n.select(this).selectAll(\\\"path\\\").each(function(r){var n=s.getVisibleSegment(this,L,e.height/2);if(n&&(function(t,e,r,n,i,a){for(var o,s=0;s<r.pedgepaths.length;s++)e===r.pedgepaths[s]&&(o=r.edgepaths[s]);if(!o)return;var l=i.a[0],c=i.a[i.a.length-1],u=i.b[0],h=i.b[i.b.length-1];function f(t,e){var r,n=0;return(Math.abs(t[0]-l)<.1||Math.abs(t[0]-c)<.1)&&(r=x(i.dxydb_rough(t[0],t[1],.1)),n=Math.max(n,a*b(e,r)/2)),(Math.abs(t[1]-u)<.1||Math.abs(t[1]-h)<.1)&&(r=x(i.dxyda_rough(t[0],t[1],.1)),n=Math.max(n,a*b(e,r)/2)),n}var p=y(t,0,1),d=y(t,n.total,n.total-1),g=f(o[0],p),v=n.total-f(o[o.length-1],d);n.min<g&&(n.min=g);n.max>v&&(n.max=v);n.len=n.max-n.min}(this,r,t,n,c,e.height),!(n.len<(e.width+e.height)*h.LABELMIN)))for(var i=Math.min(Math.ceil(n.len/O),h.LABELMAX),a=0;a<i;a++){var o=u.findBestTextLocation(this,n,e,S,L);if(!o)break;u.addLabelData(o,e,S,M)}})}),C.remove(),u.drawLabels(_,S,r,m,g?M:null)}d&&!p&&v.remove()}(_,P,t,T,L,e,M),o.setClipUrl(_,M._clipPathId,t)}function G(t){var e=M.ab2xy(t[0],t[1],!0);return[w.c2p(e[0]),k.c2p(e[1])]}})}},{\\\"../../components/drawing\\\":614,\\\"../../lib\\\":719,\\\"../carpet/lookup_carpetid\\\":915,\\\"../carpet/makepath\\\":916,\\\"../carpet/map_1d_array\\\":917,\\\"../contour/close_boundaries\\\":944,\\\"../contour/constants\\\":946,\\\"../contour/convert_to_constraints\\\":950,\\\"../contour/empty_pathinfo\\\":952,\\\"../contour/find_all_paths\\\":954,\\\"../contour/make_crossings\\\":959,\\\"../contour/plot\\\":960,\\\"./join_all_paths\\\":968,\\\"./map_pathinfo\\\":969,d3:163}],971:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/colorscale/attributes\\\"),i=t(\\\"../../components/fx/hovertemplate_attributes\\\"),a=t(\\\"../../plots/attributes\\\"),o=t(\\\"../scattermapbox/attributes\\\"),s=t(\\\"../../lib/extend\\\").extendFlat;e.exports=s({lon:o.lon,lat:o.lat,z:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},radius:{valType:\\\"number\\\",editType:\\\"plot\\\",arrayOk:!0,min:1,dflt:30},below:{valType:\\\"string\\\",editType:\\\"plot\\\"},text:o.text,hovertext:o.hovertext,hoverinfo:s({},a.hoverinfo,{flags:[\\\"lon\\\",\\\"lat\\\",\\\"z\\\",\\\"text\\\",\\\"name\\\"]}),hovertemplate:i()},n(\\\"\\\",{cLetter:\\\"z\\\",editTypeOverride:\\\"calc\\\"}))},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../../plots/attributes\\\":764,\\\"../scattermapbox/attributes\\\":1171}],972:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../lib\\\").isArrayOrTypedArray,a=t(\\\"../../constants/numerical\\\").BADNUM,o=t(\\\"../../components/colorscale/calc\\\"),s=t(\\\"../../lib\\\")._;e.exports=function(t,e){for(var r=e._length,l=new Array(r),c=e.z,u=i(c)&&c.length,h=0;h<r;h++){var f=l[h]={},p=e.lon[h],d=e.lat[h];if(f.lonlat=n(p)&&n(d)?[+p,+d]:[a,a],u){var g=c[h];f.z=n(g)?g:a}}return o(t,e,{vals:u?c:[0,1],containerStr:\\\"\\\",cLetter:\\\"z\\\"}),r&&(l[0].t={labels:{lat:s(t,\\\"lat:\\\")+\\\" \\\",lon:s(t,\\\"lon:\\\")+\\\" \\\"}}),l}},{\\\"../../components/colorscale/calc\\\":601,\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"fast-isnumeric\\\":225}],973:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../components/color\\\"),o=t(\\\"../../components/colorscale\\\"),s=t(\\\"../../constants/numerical\\\").BADNUM,l=t(\\\"../../lib/geojson_utils\\\").makeBlank;e.exports=function(t){var e=t[0].trace,r=!0===e.visible&&0!==e._length,c=e._opts={heatmap:{layout:{visibility:\\\"none\\\"},paint:{}},geojson:l()};if(!r)return c;var u,h=[],f=e.z,p=e.radius,d=i.isArrayOrTypedArray(f)&&f.length,g=i.isArrayOrTypedArray(p);for(u=0;u<t.length;u++){var v=t[u],m=v.lonlat;if(m[0]!==s){var y={};if(d){var x=v.z;y.z=x!==s?x:0}g&&(y.r=n(p[u])&&p[u]>0?+p[u]:0),h.push({type:\\\"Feature\\\",geometry:{type:\\\"Point\\\",coordinates:m},properties:y})}}var b=o.extractOpts(e),_=b.reversescale?o.flipScale(b.colorscale):b.colorscale,w=_[0][1],k=[\\\"interpolate\\\",[\\\"linear\\\"],[\\\"heatmap-density\\\"],0,a.opacity(w)<1?w:a.addOpacity(w,0)];for(u=1;u<_.length;u++)k.push(_[u][0],_[u][1]);var T=[\\\"interpolate\\\",[\\\"linear\\\"],[\\\"get\\\",\\\"z\\\"],b.min,0,b.max,1];return i.extendFlat(c.heatmap.paint,{\\\"heatmap-weight\\\":d?T:1/(b.max-b.min),\\\"heatmap-color\\\":k,\\\"heatmap-radius\\\":g?{type:\\\"identity\\\",property:\\\"r\\\"}:e.radius,\\\"heatmap-opacity\\\":e.opacity}),c.geojson={type:\\\"FeatureCollection\\\",features:h},c.heatmap.layout.visibility=\\\"visible\\\",c}},{\\\"../../components/color\\\":593,\\\"../../components/colorscale\\\":605,\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"../../lib/geojson_utils\\\":714,\\\"fast-isnumeric\\\":225}],974:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../components/colorscale/defaults\\\"),a=t(\\\"./attributes\\\");e.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l=s(\\\"lon\\\")||[],c=s(\\\"lat\\\")||[],u=Math.min(l.length,c.length);u?(e._length=u,s(\\\"z\\\"),s(\\\"radius\\\"),s(\\\"below\\\"),s(\\\"text\\\"),s(\\\"hovertext\\\"),s(\\\"hovertemplate\\\"),i(t,e,o,s,{prefix:\\\"\\\",cLetter:\\\"z\\\"})):e.visible=!1}},{\\\"../../components/colorscale/defaults\\\":603,\\\"../../lib\\\":719,\\\"./attributes\\\":971}],975:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){return t.lon=e.lon,t.lat=e.lat,t.z=e.z,t}},{}],976:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../plots/cartesian/axes\\\"),a=t(\\\"../scattermapbox/hover\\\");e.exports=function(t,e,r){var o=a(t,e,r);if(o){var s=o[0],l=s.cd,c=l[0].trace,u=l[s.index];if(delete s.color,\\\"z\\\"in u){var h=s.subplot.mockAxis;s.z=u.z,s.zLabel=i.tickText(h,h.c2l(u.z),\\\"hover\\\").text}return s.extraText=function(t,e,r){if(t.hovertemplate)return;var i=(e.hi||t.hoverinfo).split(\\\"+\\\"),a=-1!==i.indexOf(\\\"all\\\"),o=-1!==i.indexOf(\\\"lon\\\"),s=-1!==i.indexOf(\\\"lat\\\"),l=e.lonlat,c=[];function u(t){return t+\\\"\\\\xb0\\\"}a||o&&s?c.push(\\\"(\\\"+u(l[0])+\\\", \\\"+u(l[1])+\\\")\\\"):o?c.push(r.lon+u(l[0])):s&&c.push(r.lat+u(l[1]));(a||-1!==i.indexOf(\\\"text\\\"))&&n.fillText(e,t,c);return c.join(\\\"<br>\\\")}(c,u,l[0].t.labels),[s]}}},{\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767,\\\"../scattermapbox/hover\\\":1175}],977:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),colorbar:t(\\\"../heatmap/colorbar\\\"),calc:t(\\\"./calc\\\"),plot:t(\\\"./plot\\\"),hoverPoints:t(\\\"./hover\\\"),eventData:t(\\\"./event_data\\\"),getBelow:function(t,e){for(var r=e.getMapLayers(),n=0;n<r.length;n++){var i=r[n],a=i.id;if(\\\"symbol\\\"===i.type&&\\\"string\\\"==typeof a&&-1===a.indexOf(\\\"plotly-\\\"))return a}},moduleType:\\\"trace\\\",name:\\\"densitymapbox\\\",basePlotModule:t(\\\"../../plots/mapbox\\\"),categories:[\\\"mapbox\\\",\\\"gl\\\"],meta:{hr_name:\\\"density_mapbox\\\"}}},{\\\"../../plots/mapbox\\\":822,\\\"../heatmap/colorbar\\\":1004,\\\"./attributes\\\":971,\\\"./calc\\\":972,\\\"./defaults\\\":974,\\\"./event_data\\\":975,\\\"./hover\\\":976,\\\"./plot\\\":978}],978:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./convert\\\"),i=t(\\\"../../plots/mapbox/constants\\\").traceLayerPrefix;function a(t,e){this.subplot=t,this.uid=e,this.sourceId=\\\"source-\\\"+e,this.layerList=[[\\\"heatmap\\\",i+e+\\\"-heatmap\\\"]],this.below=null}var o=a.prototype;o.update=function(t){var e=this.subplot,r=this.layerList,i=n(t),a=e.belowLookup[\\\"trace-\\\"+this.uid];e.map.getSource(this.sourceId).setData(i.geojson),a!==this.below&&(this._removeLayers(),this._addLayers(i,a),this.below=a);for(var o=0;o<r.length;o++){var s=r[o],l=s[0],c=s[1],u=i[l];e.setOptions(c,\\\"setLayoutProperty\\\",u.layout),\\\"visible\\\"===u.layout.visibility&&e.setOptions(c,\\\"setPaintProperty\\\",u.paint)}},o._addLayers=function(t,e){for(var r=this.subplot,n=this.layerList,i=this.sourceId,a=0;a<n.length;a++){var o=n[a],s=o[0],l=t[s];r.addLayer({type:s,id:o[1],source:i,layout:l.layout,paint:l.paint},e)}},o._removeLayers=function(){for(var t=this.subplot.map,e=this.layerList,r=e.length-1;r>=0;r--)t.removeLayer(e[r][1])},o.dispose=function(){var t=this.subplot.map;this._removeLayers(),t.removeSource(this.sourceId)},e.exports=function(t,e){var r=e[0].trace,i=new a(t,r.uid),o=i.sourceId,s=n(e),l=i.below=t.belowLookup[\\\"trace-\\\"+r.uid];return t.map.addSource(o,{type:\\\"geojson\\\",data:s.geojson}),i._addLayers(s,l),i}},{\\\"../../plots/mapbox/constants\\\":820,\\\"./convert\\\":973}],979:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\");e.exports=function(t,e){for(var r=0;r<t.length;r++)t[r].i=r;n.mergeArray(e.text,t,\\\"tx\\\"),n.mergeArray(e.hovertext,t,\\\"htx\\\");var i=e.marker;if(i){n.mergeArray(i.opacity,t,\\\"mo\\\"),n.mergeArray(i.color,t,\\\"mc\\\");var a=i.line;a&&(n.mergeArray(a.color,t,\\\"mlc\\\"),n.mergeArrayCastPositive(a.width,t,\\\"mlw\\\"))}}},{\\\"../../lib\\\":719}],980:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../bar/attributes\\\"),i=t(\\\"../scatter/attributes\\\").line,a=t(\\\"../../plots/attributes\\\"),o=t(\\\"../../components/fx/hovertemplate_attributes\\\"),s=t(\\\"./constants\\\"),l=t(\\\"../../lib/extend\\\").extendFlat,c=t(\\\"../../components/color\\\");e.exports={x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,hovertext:n.hovertext,hovertemplate:o({},{keys:s.eventDataKeys}),hoverinfo:l({},a.hoverinfo,{flags:[\\\"name\\\",\\\"x\\\",\\\"y\\\",\\\"text\\\",\\\"percent initial\\\",\\\"percent previous\\\",\\\"percent total\\\"]}),textinfo:{valType:\\\"flaglist\\\",flags:[\\\"label\\\",\\\"text\\\",\\\"percent initial\\\",\\\"percent previous\\\",\\\"percent total\\\",\\\"value\\\"],extras:[\\\"none\\\"],editType:\\\"plot\\\",arrayOk:!1},text:n.text,textposition:l({},n.textposition,{dflt:\\\"auto\\\"}),insidetextanchor:l({},n.insidetextanchor,{dflt:\\\"middle\\\"}),textangle:l({},n.textangle,{dflt:0}),textfont:n.textfont,insidetextfont:n.insidetextfont,outsidetextfont:n.outsidetextfont,constraintext:n.constraintext,cliponaxis:n.cliponaxis,orientation:l({},n.orientation,{}),offset:l({},n.offset,{arrayOk:!1}),width:l({},n.width,{arrayOk:!1}),marker:n.marker,connector:{fillcolor:{valType:\\\"color\\\",editType:\\\"style\\\"},line:{color:l({},i.color,{dflt:c.defaultLine}),width:l({},i.width,{dflt:0,editType:\\\"plot\\\"}),dash:i.dash,editType:\\\"style\\\"},visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"plot\\\"},editType:\\\"plot\\\"},offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup}},{\\\"../../components/color\\\":593,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../../plots/attributes\\\":764,\\\"../bar/attributes\\\":857,\\\"../scatter/attributes\\\":1112,\\\"./constants\\\":982}],981:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/cartesian/axes\\\"),i=t(\\\"./arrays_to_calcdata\\\"),a=t(\\\"../scatter/calc_selection\\\"),o=t(\\\"../../constants/numerical\\\").BADNUM;function s(t){return t===o?0:t}e.exports=function(t,e){var r,l,c,u,h=n.getFromId(t,e.xaxis||\\\"x\\\"),f=n.getFromId(t,e.yaxis||\\\"y\\\");\\\"h\\\"===e.orientation?(r=h.makeCalcdata(e,\\\"x\\\"),l=f.makeCalcdata(e,\\\"y\\\")):(r=f.makeCalcdata(e,\\\"y\\\"),l=h.makeCalcdata(e,\\\"x\\\"));var p,d=Math.min(l.length,r.length),g=new Array(d);for(e._base=[],c=0;c<d;c++){r[c]<0&&(r[c]=o);var v=!1;r[c]!==o&&c+1<d&&r[c+1]!==o&&(v=!0),u=g[c]={p:l[c],s:r[c],cNext:v},e._base[c]=-.5*u.s,e.ids&&(u.id=String(e.ids[c])),0===c&&(g[0].vTotal=0),g[0].vTotal+=s(u.s),u.begR=s(u.s)/s(g[0].s)}for(c=0;c<d;c++)(u=g[c]).s!==o&&(u.sumR=u.s/g[0].vTotal,u.difR=void 0!==p?u.s/p:1,p=u.s);return i(g,e),a(g,e),g}},{\\\"../../constants/numerical\\\":695,\\\"../../plots/cartesian/axes\\\":767,\\\"../scatter/calc_selection\\\":1114,\\\"./arrays_to_calcdata\\\":979}],982:[function(t,e,r){\\\"use strict\\\";e.exports={eventDataKeys:[\\\"percentInitial\\\",\\\"percentPrevious\\\",\\\"percentTotal\\\"]}},{}],983:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../bar/cross_trace_calc\\\").setGroupPositions;e.exports=function(t,e){var r,i,a=t._fullLayout,o=t._fullData,s=t.calcdata,l=e.xaxis,c=e.yaxis,u=[],h=[],f=[];for(i=0;i<o.length;i++){var p=o[i],d=\\\"h\\\"===p.orientation;!0===p.visible&&p.xaxis===l._id&&p.yaxis===c._id&&\\\"funnel\\\"===p.type&&(r=s[i],d?f.push(r):h.push(r),u.push(r))}var g={mode:a.funnelmode,norm:a.funnelnorm,gap:a.funnelgap,groupgap:a.funnelgroupgap};for(n(t,l,c,h,g),n(t,c,l,f,g),i=0;i<u.length;i++){r=u[i];for(var v=0;v<r.length;v++)v+1<r.length&&(r[v].nextP0=r[v+1].p0,r[v].nextS0=r[v+1].s0,r[v].nextP1=r[v+1].p1,r[v].nextS1=r[v+1].s1)}}},{\\\"../bar/cross_trace_calc\\\":860}],984:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../bar/defaults\\\").handleGroupingDefaults,a=t(\\\"../bar/defaults\\\").handleText,o=t(\\\"../scatter/xy_defaults\\\"),s=t(\\\"./attributes\\\"),l=t(\\\"../../components/color\\\");e.exports={supplyDefaults:function(t,e,r,i){function c(r,i){return n.coerce(t,e,s,r,i)}if(o(t,e,i,c)){c(\\\"orientation\\\",e.y&&!e.x?\\\"v\\\":\\\"h\\\"),c(\\\"offset\\\"),c(\\\"width\\\");var u=c(\\\"text\\\");c(\\\"hovertext\\\"),c(\\\"hovertemplate\\\");var h=c(\\\"textposition\\\");a(t,e,i,c,h,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),\\\"none\\\"!==e.textposition&&c(\\\"textinfo\\\",Array.isArray(u)?\\\"text+value\\\":\\\"value\\\");var f=c(\\\"marker.color\\\",r);c(\\\"marker.line.color\\\",l.defaultLine),c(\\\"marker.line.width\\\"),c(\\\"connector.visible\\\")&&(c(\\\"connector.fillcolor\\\",function(t){var e=n.isArrayOrTypedArray(t)?\\\"#000\\\":t;return l.addOpacity(e,.5*l.opacity(e))}(f)),c(\\\"connector.line.width\\\")&&(c(\\\"connector.line.color\\\"),c(\\\"connector.line.dash\\\")))}else e.visible=!1},crossTraceDefaults:function(t,e){var r,a;function o(t){return n.coerce(a._input,a,s,t)}if(\\\"group\\\"===e.funnelmode)for(var l=0;l<t.length;l++)r=(a=t[l])._input,i(r,a,e,o)}}},{\\\"../../components/color\\\":593,\\\"../../lib\\\":719,\\\"../bar/defaults\\\":861,\\\"../scatter/xy_defaults\\\":1137,\\\"./attributes\\\":980}],985:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){return t.x=\\\"xVal\\\"in e?e.xVal:e.x,t.y=\\\"yVal\\\"in e?e.yVal:e.y,\\\"percentInitial\\\"in e&&(t.percentInitial=e.percentInitial),\\\"percentPrevious\\\"in e&&(t.percentPrevious=e.percentPrevious),\\\"percentTotal\\\"in e&&(t.percentTotal=e.percentTotal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t}},{}],986:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/color\\\").opacity,i=t(\\\"../bar/hover\\\").hoverOnBars,a=t(\\\"../../lib\\\").formatPercent;e.exports=function(t,e,r,o){var s=i(t,e,r,o);if(s){var l=s.cd,c=l[0].trace,u=\\\"h\\\"===c.orientation,h=l[s.index];s[(u?\\\"x\\\":\\\"y\\\")+\\\"LabelVal\\\"]=h.s,s.percentInitial=h.begR,s.percentInitialLabel=a(h.begR,1),s.percentPrevious=h.difR,s.percentPreviousLabel=a(h.difR,1),s.percentTotal=h.sumR,s.percentTotalLabel=a(h.sumR,1);var f=h.hi||c.hoverinfo,p=[];if(f&&\\\"none\\\"!==f&&\\\"skip\\\"!==f){var d=\\\"all\\\"===f,g=f.split(\\\"+\\\"),v=function(t){return d||-1!==g.indexOf(t)};v(\\\"percent initial\\\")&&p.push(s.percentInitialLabel+\\\" of initial\\\"),v(\\\"percent previous\\\")&&p.push(s.percentPreviousLabel+\\\" of previous\\\"),v(\\\"percent total\\\")&&p.push(s.percentTotalLabel+\\\" of total\\\")}return s.extraText=p.join(\\\"<br>\\\"),s.color=function(t,e){var r=t.marker,i=e.mc||r.color,a=e.mlc||r.line.color,o=e.mlw||r.line.width;if(n(i))return i;if(n(a)&&o)return a}(c,h),[s]}}},{\\\"../../components/color\\\":593,\\\"../../lib\\\":719,\\\"../bar/hover\\\":863}],987:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),layoutAttributes:t(\\\"./layout_attributes\\\"),supplyDefaults:t(\\\"./defaults\\\").supplyDefaults,crossTraceDefaults:t(\\\"./defaults\\\").crossTraceDefaults,supplyLayoutDefaults:t(\\\"./layout_defaults\\\"),calc:t(\\\"./calc\\\"),crossTraceCalc:t(\\\"./cross_trace_calc\\\"),plot:t(\\\"./plot\\\"),style:t(\\\"./style\\\").style,hoverPoints:t(\\\"./hover\\\"),eventData:t(\\\"./event_data\\\"),selectPoints:t(\\\"../bar/select\\\"),moduleType:\\\"trace\\\",name:\\\"funnel\\\",basePlotModule:t(\\\"../../plots/cartesian\\\"),categories:[\\\"bar-like\\\",\\\"cartesian\\\",\\\"svg\\\",\\\"oriented\\\",\\\"showLegend\\\",\\\"zoomScale\\\"],meta:{}}},{\\\"../../plots/cartesian\\\":778,\\\"../bar/select\\\":868,\\\"./attributes\\\":980,\\\"./calc\\\":981,\\\"./cross_trace_calc\\\":983,\\\"./defaults\\\":984,\\\"./event_data\\\":985,\\\"./hover\\\":986,\\\"./layout_attributes\\\":988,\\\"./layout_defaults\\\":989,\\\"./plot\\\":990,\\\"./style\\\":991}],988:[function(t,e,r){\\\"use strict\\\";e.exports={funnelmode:{valType:\\\"enumerated\\\",values:[\\\"stack\\\",\\\"group\\\",\\\"overlay\\\"],dflt:\\\"stack\\\",editType:\\\"calc\\\"},funnelgap:{valType:\\\"number\\\",min:0,max:1,editType:\\\"calc\\\"},funnelgroupgap:{valType:\\\"number\\\",min:0,max:1,dflt:0,editType:\\\"calc\\\"}}},{}],989:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./layout_attributes\\\");e.exports=function(t,e,r){var a=!1;function o(r,a){return n.coerce(t,e,i,r,a)}for(var s=0;s<r.length;s++){var l=r[s];if(l.visible&&\\\"funnel\\\"===l.type){a=!0;break}}a&&(o(\\\"funnelmode\\\"),o(\\\"funnelgap\\\",.2),o(\\\"funnelgroupgap\\\"))}},{\\\"../../lib\\\":719,\\\"./layout_attributes\\\":988}],990:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../components/drawing\\\"),o=t(\\\"../bar/plot\\\").plot;function s(t,e,r,n){var i=[],a=[],o=n?e:r,s=n?r:e;return i[0]=o.c2p(t.s0,!0),a[0]=s.c2p(t.p0,!0),i[1]=o.c2p(t.s1,!0),a[1]=s.c2p(t.p1,!0),i[2]=o.c2p(t.nextS0,!0),a[2]=s.c2p(t.nextP0,!0),i[3]=o.c2p(t.nextS1,!0),a[3]=s.c2p(t.nextP1,!0),n?[i,a]:[a,i]}e.exports=function(t,e,r,l){var c=t._fullLayout;!function(t,e,r,o){var l=e.xaxis,c=e.yaxis;i.makeTraceGroups(o,r,\\\"trace bars\\\").each(function(r){var o=n.select(this),u=r[0].trace,h=i.ensureSingle(o,\\\"g\\\",\\\"regions\\\");if(u.connector&&u.connector.visible){var f=\\\"h\\\"===u.orientation,p=h.selectAll(\\\"g.region\\\").data(i.identity);p.enter().append(\\\"g\\\").classed(\\\"region\\\",!0),p.exit().remove();var d=p.size();p.each(function(r,o){if(o===d-1||r.cNext){var u=s(r,l,c,f),h=u[0],p=u[1],g=\\\"\\\";void 0!==h[3]&&void 0!==p[3]&&(g+=f?\\\"M\\\"+h[0]+\\\",\\\"+p[1]+\\\"L\\\"+h[2]+\\\",\\\"+p[2]+\\\"H\\\"+h[3]+\\\"L\\\"+h[1]+\\\",\\\"+p[1]+\\\"Z\\\":\\\"M\\\"+h[1]+\\\",\\\"+p[1]+\\\"L\\\"+h[2]+\\\",\\\"+p[3]+\\\"V\\\"+p[2]+\\\"L\\\"+h[1]+\\\",\\\"+p[0]+\\\"Z\\\"),i.ensureSingle(n.select(this),\\\"path\\\").attr(\\\"d\\\",g).call(a.setClipUrl,e.layerClipId,t)}})}else h.remove()})}(t,e,r,l),function(t,e,r,o){var l=e.xaxis,c=e.yaxis;i.makeTraceGroups(o,r,\\\"trace bars\\\").each(function(r){var o=n.select(this),u=r[0].trace,h=i.ensureSingle(o,\\\"g\\\",\\\"lines\\\");if(u.connector&&u.connector.visible&&u.connector.line.width){var f=\\\"h\\\"===u.orientation,p=h.selectAll(\\\"g.line\\\").data(i.identity);p.enter().append(\\\"g\\\").classed(\\\"line\\\",!0),p.exit().remove();var d=p.size();p.each(function(r,o){if(o===d-1||r.cNext){var u=s(r,l,c,f),h=u[0],p=u[1],g=\\\"\\\";void 0!==h[3]&&void 0!==p[3]&&(f?(g+=\\\"M\\\"+h[0]+\\\",\\\"+p[1]+\\\"L\\\"+h[2]+\\\",\\\"+p[2],g+=\\\"M\\\"+h[1]+\\\",\\\"+p[1]+\\\"L\\\"+h[3]+\\\",\\\"+p[2]):(g+=\\\"M\\\"+h[1]+\\\",\\\"+p[1]+\\\"L\\\"+h[2]+\\\",\\\"+p[3],g+=\\\"M\\\"+h[1]+\\\",\\\"+p[0]+\\\"L\\\"+h[2]+\\\",\\\"+p[2])),\\\"\\\"===g&&(g=\\\"M0,0Z\\\"),i.ensureSingle(n.select(this),\\\"path\\\").attr(\\\"d\\\",g).call(a.setClipUrl,e.layerClipId,t)}})}else h.remove()})}(t,e,r,l),o(t,e,r,l,{mode:c.funnelmode,norm:c.funnelmode,gap:c.funnelgap,groupgap:c.funnelgroupgap})}},{\\\"../../components/drawing\\\":614,\\\"../../lib\\\":719,\\\"../bar/plot\\\":867,d3:163}],991:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../components/drawing\\\"),a=t(\\\"../../components/color\\\"),o=t(\\\"../../constants/interactions\\\").DESELECTDIM,s=t(\\\"../bar/style\\\").styleTextPoints;e.exports={style:function(t,e,r){var l=r||n.select(t).selectAll(\\\"g.funnellayer\\\").selectAll(\\\"g.trace\\\");l.style(\\\"opacity\\\",function(t){return t[0].trace.opacity}),l.each(function(e){var r=n.select(this),l=e[0].trace;r.selectAll(\\\".point > path\\\").each(function(t){if(!t.isBlank){var e=l.marker;n.select(this).call(a.fill,t.mc||e.color).call(a.stroke,t.mlc||e.line.color).call(i.dashLine,e.line.dash,t.mlw||e.line.width).style(\\\"opacity\\\",l.selectedpoints&&!t.selected?o:1)}}),s(r,l,t),r.selectAll(\\\".regions\\\").each(function(){n.select(this).selectAll(\\\"path\\\").style(\\\"stroke-width\\\",0).call(a.fill,l.connector.fillcolor)}),r.selectAll(\\\".lines\\\").each(function(){var t=l.connector.line;i.lineGroupStyle(n.select(this).selectAll(\\\"path\\\"),t.width,t.color,t.dash)})})}}},{\\\"../../components/color\\\":593,\\\"../../components/drawing\\\":614,\\\"../../constants/interactions\\\":694,\\\"../bar/style\\\":870,d3:163}],992:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../pie/attributes\\\"),i=t(\\\"../../plots/attributes\\\"),a=t(\\\"../../plots/domain\\\").attributes,o=t(\\\"../../components/fx/hovertemplate_attributes\\\"),s=t(\\\"../../lib/extend\\\").extendFlat;e.exports={labels:n.labels,label0:n.label0,dlabel:n.dlabel,values:n.values,marker:{colors:n.marker.colors,line:{color:s({},n.marker.line.color,{dflt:null}),width:s({},n.marker.line.width,{dflt:1}),editType:\\\"calc\\\"},editType:\\\"calc\\\"},text:n.text,hovertext:n.hovertext,scalegroup:s({},n.scalegroup,{}),textinfo:s({},n.textinfo,{flags:[\\\"label\\\",\\\"text\\\",\\\"value\\\",\\\"percent\\\"]}),hoverinfo:s({},i.hoverinfo,{flags:[\\\"label\\\",\\\"text\\\",\\\"value\\\",\\\"percent\\\",\\\"name\\\"]}),hovertemplate:o({},{keys:[\\\"label\\\",\\\"color\\\",\\\"value\\\",\\\"percent\\\",\\\"text\\\"]}),textposition:s({},n.textposition,{values:[\\\"inside\\\",\\\"none\\\"],dflt:\\\"inside\\\"}),textfont:n.textfont,insidetextfont:n.insidetextfont,title:{text:n.title.text,font:n.title.font,position:s({},n.title.position,{values:[\\\"top left\\\",\\\"top center\\\",\\\"top right\\\"],dflt:\\\"top center\\\"}),editType:\\\"plot\\\"},domain:a({name:\\\"funnelarea\\\",trace:!0,editType:\\\"calc\\\"}),aspectratio:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"plot\\\"},baseratio:{valType:\\\"number\\\",min:0,max:1,dflt:.333,editType:\\\"plot\\\"}}},{\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../../plots/attributes\\\":764,\\\"../../plots/domain\\\":792,\\\"../pie/attributes\\\":1086}],993:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../plots/get_data\\\").getModuleCalcData;r.name=\\\"funnelarea\\\",r.plot=function(t){var e=n.getModule(\\\"funnelarea\\\"),r=i(t.calcdata,e)[0];e.plot(t,r)},r.clean=function(t,e,r,n){var i=n._has&&n._has(\\\"funnelarea\\\"),a=e._has&&e._has(\\\"funnelarea\\\");i&&!a&&n._funnelarealayer.selectAll(\\\"g.trace\\\").remove()}},{\\\"../../plots/get_data\\\":802,\\\"../../registry\\\":847}],994:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../pie/calc\\\");e.exports={calc:function(t,e){return n.calc(t,e)},crossTraceCalc:function(t){n.crossTraceCalc(t,{type:\\\"funnelarea\\\"})}}},{\\\"../pie/calc\\\":1088}],995:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./attributes\\\"),a=t(\\\"../../plots/domain\\\").defaults,o=t(\\\"../bar/defaults\\\").handleText;e.exports=function(t,e,r,s){function l(r,a){return n.coerce(t,e,i,r,a)}var c,u=l(\\\"values\\\"),h=n.isArrayOrTypedArray(u),f=l(\\\"labels\\\");if(Array.isArray(f)?(c=f.length,h&&(c=Math.min(c,u.length))):h&&(c=u.length,l(\\\"label0\\\"),l(\\\"dlabel\\\")),c){e._length=c,l(\\\"marker.line.width\\\")&&l(\\\"marker.line.color\\\",s.paper_bgcolor),l(\\\"marker.colors\\\"),l(\\\"scalegroup\\\");var p=l(\\\"text\\\"),d=l(\\\"textinfo\\\",Array.isArray(p)?\\\"text+percent\\\":\\\"percent\\\");if(l(\\\"hovertext\\\"),l(\\\"hovertemplate\\\"),d&&\\\"none\\\"!==d){var g=l(\\\"textposition\\\");o(t,e,s,l,g,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1})}a(e,s,l),l(\\\"title.text\\\")&&(l(\\\"title.position\\\"),n.coerceFont(l,\\\"title.font\\\",s.font)),l(\\\"aspectratio\\\"),l(\\\"baseratio\\\")}else e.visible=!1}},{\\\"../../lib\\\":719,\\\"../../plots/domain\\\":792,\\\"../bar/defaults\\\":861,\\\"./attributes\\\":992}],996:[function(t,e,r){\\\"use strict\\\";e.exports={moduleType:\\\"trace\\\",name:\\\"funnelarea\\\",basePlotModule:t(\\\"./base_plot\\\"),categories:[\\\"pie-like\\\",\\\"funnelarea\\\",\\\"showLegend\\\"],attributes:t(\\\"./attributes\\\"),layoutAttributes:t(\\\"./layout_attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),supplyLayoutDefaults:t(\\\"./layout_defaults\\\"),calc:t(\\\"./calc\\\").calc,crossTraceCalc:t(\\\"./calc\\\").crossTraceCalc,plot:t(\\\"./plot\\\"),style:t(\\\"./style\\\"),styleOne:t(\\\"../pie/style_one\\\"),meta:{}}},{\\\"../pie/style_one\\\":1097,\\\"./attributes\\\":992,\\\"./base_plot\\\":993,\\\"./calc\\\":994,\\\"./defaults\\\":995,\\\"./layout_attributes\\\":997,\\\"./layout_defaults\\\":998,\\\"./plot\\\":999,\\\"./style\\\":1e3}],997:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../pie/layout_attributes\\\").hiddenlabels;e.exports={hiddenlabels:n,funnelareacolorway:{valType:\\\"colorlist\\\",editType:\\\"calc\\\"},extendfunnelareacolors:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"}}},{\\\"../pie/layout_attributes\\\":1093}],998:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./layout_attributes\\\");e.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\\\"hiddenlabels\\\"),r(\\\"funnelareacolorway\\\",e.colorway),r(\\\"extendfunnelareacolors\\\")}},{\\\"../../lib\\\":719,\\\"./layout_attributes\\\":997}],999:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../components/drawing\\\"),a=t(\\\"../../lib\\\"),o=t(\\\"../../lib/svg_text_utils\\\"),s=t(\\\"../bar/plot\\\"),l=s.getTransform,c=s.toMoveInsideBar,u=t(\\\"../pie/helpers\\\"),h=t(\\\"../pie/plot\\\"),f=h.attachFxHandlers,p=h.determineInsideTextFont,d=h.layoutAreas,g=h.prerenderTitles,v=h.positionTitleOutside;function m(t,e){return\\\"l\\\"+(e[0]-t[0])+\\\",\\\"+(e[1]-t[1])}e.exports=function(t,e){var r=t._fullLayout;g(e,t),d(e,r._size),a.makeTraceGroups(r._funnelarealayer,e,\\\"trace\\\").each(function(e){var s=n.select(this),h=e[0],d=h.trace;!function(t){if(!t.length)return;var e=t[0],r=e.trace,n=r.aspectratio,i=r.baseratio;i>.999&&(i=.999);var a,o=Math.pow(i,2),s=e.vTotal,l=s,c=s*o/(1-o)/s;function u(){var t,e={x:t=Math.sqrt(c),y:-t};return[e.x,e.y]}var h,f,p=[];for(p.push(u()),h=t.length-1;h>-1;h--)if(!(f=t[h]).hidden){var d=f.v/l;c+=d,p.push(u())}var g=1/0,v=-1/0;for(h=0;h<p.length;h++)a=p[h],g=Math.min(g,a[1]),v=Math.max(v,a[1]);for(h=0;h<p.length;h++)p[h][1]-=(v+g)/2;var m=p[p.length-1][0],y=e.r,x=(v-g)/2,b=y/m,_=y/x*n;for(e.r=_*x,h=0;h<p.length;h++)p[h][0]*=b,p[h][1]*=_;var w=[-(a=p[0])[0],a[1]],k=[a[0],a[1]],T=0;for(h=t.length-1;h>-1;h--)if(!(f=t[h]).hidden){var A=p[T+=1][0],M=p[T][1];f.TL=[-A,M],f.TR=[A,M],f.BL=w,f.BR=k,f.pxmid=(S=f.TR,E=f.BR,[.5*(S[0]+E[0]),.5*(S[1]+E[1])]),w=f.TL,k=f.TR}var S,E}(e),s.each(function(){var s=n.select(this).selectAll(\\\"g.slice\\\").data(e);s.enter().append(\\\"g\\\").classed(\\\"slice\\\",!0),s.exit().remove(),s.each(function(r){if(r.hidden)n.select(this).selectAll(\\\"path,g\\\").remove();else{r.pointNumber=r.i,r.curveNumber=d.index;var s=h.cx,g=h.cy,v=n.select(this),y=v.selectAll(\\\"path.surface\\\").data([r]);y.enter().append(\\\"path\\\").classed(\\\"surface\\\",!0).style({\\\"pointer-events\\\":\\\"all\\\"}),v.call(f,t,e);var x=\\\"M\\\"+(s+r.TR[0])+\\\",\\\"+(g+r.TR[1])+m(r.TR,r.BR)+m(r.BR,r.BL)+m(r.BL,r.TL)+\\\"Z\\\";y.attr(\\\"d\\\",x);var b=u.castOption(d.textposition,r.pts),_=v.selectAll(\\\"g.slicetext\\\").data(r.text&&\\\"none\\\"!==b?[0]:[]);_.enter().append(\\\"g\\\").classed(\\\"slicetext\\\",!0),_.exit().remove(),_.each(function(){var e=a.ensureSingle(n.select(this),\\\"text\\\",\\\"\\\",function(t){t.attr(\\\"data-notex\\\",1)});e.text(r.text).attr({class:\\\"slicetext\\\",transform:\\\"\\\",\\\"text-anchor\\\":\\\"middle\\\"}).call(i.font,p(d,r,t._fullLayout.font)).call(o.convertToTspans,t);var u,h,f,v=i.bBox(e.node()),m=Math.min(r.BL[1],r.BR[1]),y=Math.max(r.TL[1],r.TR[1]);h=Math.max(r.TL[0],r.BL[0]),f=Math.min(r.TR[0],r.BR[0]),u=l(c(h,f,m,y,v,{isHorizontal:!0,constrained:!0,angle:0,anchor:\\\"middle\\\"})),e.attr(\\\"transform\\\",\\\"translate(\\\"+s+\\\",\\\"+g+\\\")\\\"+u)})}});var g=n.select(this).selectAll(\\\"g.titletext\\\").data(d.title.text?[0]:[]);g.enter().append(\\\"g\\\").classed(\\\"titletext\\\",!0),g.exit().remove(),g.each(function(){var e=a.ensureSingle(n.select(this),\\\"text\\\",\\\"\\\",function(t){t.attr(\\\"data-notex\\\",1)}),s=d.title.text;d._meta&&(s=a.templateString(s,d._meta)),e.text(s).attr({class:\\\"titletext\\\",transform:\\\"\\\",\\\"text-anchor\\\":\\\"middle\\\"}).call(i.font,d.title.font).call(o.convertToTspans,t);var l=v(h,r._size);e.attr(\\\"transform\\\",\\\"translate(\\\"+l.x+\\\",\\\"+l.y+\\\")\\\"+(l.scale<1?\\\"scale(\\\"+l.scale+\\\")\\\":\\\"\\\")+\\\"translate(\\\"+l.tx+\\\",\\\"+l.ty+\\\")\\\")})})})}},{\\\"../../components/drawing\\\":614,\\\"../../lib\\\":719,\\\"../../lib/svg_text_utils\\\":743,\\\"../bar/plot\\\":867,\\\"../pie/helpers\\\":1091,\\\"../pie/plot\\\":1095,d3:163}],1000:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../pie/style_one\\\");e.exports=function(t){t._fullLayout._funnelarealayer.selectAll(\\\".trace\\\").each(function(t){var e=t[0].trace,r=n.select(this);r.style({opacity:e.opacity}),r.selectAll(\\\"path.surface\\\").each(function(t){n.select(this).call(i,t,e)})})}},{\\\"../pie/style_one\\\":1097,d3:163}],1001:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../scatter/attributes\\\"),i=t(\\\"../../components/fx/hovertemplate_attributes\\\"),a=t(\\\"../../components/colorscale/attributes\\\"),o=(t(\\\"../../constants/docs\\\").FORMAT_LINK,t(\\\"../../lib/extend\\\").extendFlat);e.exports=o({z:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},x:o({},n.x,{impliedEdits:{xtype:\\\"array\\\"}}),x0:o({},n.x0,{impliedEdits:{xtype:\\\"scaled\\\"}}),dx:o({},n.dx,{impliedEdits:{xtype:\\\"scaled\\\"}}),y:o({},n.y,{impliedEdits:{ytype:\\\"array\\\"}}),y0:o({},n.y0,{impliedEdits:{ytype:\\\"scaled\\\"}}),dy:o({},n.dy,{impliedEdits:{ytype:\\\"scaled\\\"}}),text:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},hovertext:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},transpose:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},xtype:{valType:\\\"enumerated\\\",values:[\\\"array\\\",\\\"scaled\\\"],editType:\\\"calc+clearAxisTypes\\\"},ytype:{valType:\\\"enumerated\\\",values:[\\\"array\\\",\\\"scaled\\\"],editType:\\\"calc+clearAxisTypes\\\"},zsmooth:{valType:\\\"enumerated\\\",values:[\\\"fast\\\",\\\"best\\\",!1],dflt:!1,editType:\\\"calc\\\"},connectgaps:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},xgap:{valType:\\\"number\\\",dflt:0,min:0,editType:\\\"plot\\\"},ygap:{valType:\\\"number\\\",dflt:0,min:0,editType:\\\"plot\\\"},zhoverformat:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"none\\\"},hovertemplate:i()},{transforms:void 0},a(\\\"\\\",{cLetter:\\\"z\\\",autoColorDflt:!1}))},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../constants/docs\\\":690,\\\"../../lib/extend\\\":710,\\\"../scatter/attributes\\\":1112}],1002:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../plots/cartesian/axes\\\"),o=t(\\\"../histogram2d/calc\\\"),s=t(\\\"../../components/colorscale/calc\\\"),l=t(\\\"./convert_column_xyz\\\"),c=t(\\\"./clean_2d_array\\\"),u=t(\\\"./interp2d\\\"),h=t(\\\"./find_empties\\\"),f=t(\\\"./make_bound_array\\\");e.exports=function(t,e){var r,p,d,g,v,m,y,x,b,_=a.getFromId(t,e.xaxis||\\\"x\\\"),w=a.getFromId(t,e.yaxis||\\\"y\\\"),k=n.traceIs(e,\\\"contour\\\"),T=n.traceIs(e,\\\"histogram\\\"),A=n.traceIs(e,\\\"gl2d\\\"),M=k?\\\"best\\\":e.zsmooth;if(_._minDtick=0,w._minDtick=0,T)r=(b=o(t,e)).x,p=b.x0,d=b.dx,g=b.y,v=b.y0,m=b.dy,y=b.z;else{var S=e.z;i.isArray1D(S)?(l(e,_,w,\\\"x\\\",\\\"y\\\",[\\\"z\\\"]),r=e._x,g=e._y,S=e._z):(r=e._x=e.x?_.makeCalcdata(e,\\\"x\\\"):[],g=e._y=e.y?w.makeCalcdata(e,\\\"y\\\"):[]),p=e.x0,d=e.dx,v=e.y0,m=e.dy,y=c(S,e,_,w),(k||e.connectgaps)&&(e._emptypoints=h(y),u(y,e._emptypoints))}function E(t){M=e._input.zsmooth=e.zsmooth=!1,i.warn('cannot use zsmooth: \\\"fast\\\": '+t)}if(\\\"fast\\\"===M)if(\\\"log\\\"===_.type||\\\"log\\\"===w.type)E(\\\"log axis found\\\");else if(!T){if(r.length){var C=(r[r.length-1]-r[0])/(r.length-1),L=Math.abs(C/100);for(x=0;x<r.length-1;x++)if(Math.abs(r[x+1]-r[x]-C)>L){E(\\\"x scale is not linear\\\");break}}if(g.length&&\\\"fast\\\"===M){var P=(g[g.length-1]-g[0])/(g.length-1),O=Math.abs(P/100);for(x=0;x<g.length-1;x++)if(Math.abs(g[x+1]-g[x]-P)>O){E(\\\"y scale is not linear\\\");break}}}var z=i.maxRowLength(y),I=\\\"scaled\\\"===e.xtype?\\\"\\\":r,D=f(e,I,p,d,z,_),R=\\\"scaled\\\"===e.ytype?\\\"\\\":g,F=f(e,R,v,m,y.length,w);A||(e._extremes[_._id]=a.findExtremes(_,D),e._extremes[w._id]=a.findExtremes(w,F));var B={x:D,y:F,z:y,text:e._text||e.text,hovertext:e._hovertext||e.hovertext};if(I&&I.length===D.length-1&&(B.xCenter=I),R&&R.length===F.length-1&&(B.yCenter=R),T&&(B.xRanges=b.xRanges,B.yRanges=b.yRanges,B.pts=b.pts),k||s(t,e,{vals:y,cLetter:\\\"z\\\"}),k&&e.contours&&\\\"heatmap\\\"===e.contours.coloring){var N={type:\\\"contour\\\"===e.type?\\\"heatmap\\\":\\\"histogram2d\\\",xcalendar:e.xcalendar,ycalendar:e.ycalendar};B.xfill=f(N,I,p,d,z,_),B.yfill=f(N,R,v,m,y.length,w)}return[B]}},{\\\"../../components/colorscale/calc\\\":601,\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767,\\\"../../registry\\\":847,\\\"../histogram2d/calc\\\":1033,\\\"./clean_2d_array\\\":1003,\\\"./convert_column_xyz\\\":1005,\\\"./find_empties\\\":1007,\\\"./interp2d\\\":1010,\\\"./make_bound_array\\\":1011}],1003:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../constants/numerical\\\").BADNUM;e.exports=function(t,e,r,o){var s,l,c,u,h,f;function p(t){if(n(t))return+t}if(e&&e.transpose){for(s=0,h=0;h<t.length;h++)s=Math.max(s,t[h].length);if(0===s)return!1;c=function(t){return t.length},u=function(t,e,r){return(t[r]||[])[e]}}else s=t.length,c=function(t,e){return t[e].length},u=function(t,e,r){return(t[e]||[])[r]};var d=function(t,e,r){return e===a||r===a?a:u(t,e,r)};function g(t){if(e&&\\\"carpet\\\"!==e.type&&\\\"contourcarpet\\\"!==e.type&&t&&\\\"category\\\"===t.type&&e[\\\"_\\\"+t._id.charAt(0)].length){var r=t._id.charAt(0),n={},o=e[\\\"_\\\"+r+\\\"CategoryMap\\\"]||e[r];for(h=0;h<o.length;h++)n[o[h]]=h;return function(e){var r=n[t._categories[e]];return r+1?r:a}}return i.identity}var v=g(r),m=g(o);o&&\\\"category\\\"===o.type&&(s=o._categories.length);var y=new Array(s);for(h=0;h<s;h++)for(l=r&&\\\"category\\\"===r.type?r._categories.length:c(t,h),y[h]=new Array(l),f=0;f<l;f++)y[h][f]=p(d(t,m(h),v(f)));return y}},{\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"fast-isnumeric\\\":225}],1004:[function(t,e,r){\\\"use strict\\\";e.exports={min:\\\"zmin\\\",max:\\\"zmax\\\"}},{}],1005:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../constants/numerical\\\").BADNUM;e.exports=function(t,e,r,a,o,s){var l,c,u,h,f=t._length,p=e.makeCalcdata(t,a),d=r.makeCalcdata(t,o),g=t.text,v=void 0!==g&&n.isArray1D(g),m=t.hovertext,y=void 0!==m&&n.isArray1D(m),x=n.distinctVals(p),b=x.vals,_=n.distinctVals(d),w=_.vals,k=[];for(l=0;l<s.length;l++)k[l]=n.init2dArray(w.length,b.length);for(v&&(u=n.init2dArray(w.length,b.length)),y&&(h=n.init2dArray(w.length,b.length)),l=0;l<f;l++)if(p[l]!==i&&d[l]!==i){var T=n.findBin(p[l]+x.minDiff/2,b),A=n.findBin(d[l]+_.minDiff/2,w);for(c=0;c<s.length;c++){var M=t[s[c]];k[c][A][T]=M[l]}v&&(u[A][T]=g[l]),y&&(h[A][T]=m[l])}for(t[\\\"_\\\"+a]=b,t[\\\"_\\\"+o]=w,c=0;c<s.length;c++)t[\\\"_\\\"+s[c]]=k[c];v&&(t._text=u),y&&(t._hovertext=h),e&&\\\"category\\\"===e.type&&(t[\\\"_\\\"+a+\\\"CategoryMap\\\"]=b.map(function(t){return e._categories[t]})),r&&\\\"category\\\"===r.type&&(t[\\\"_\\\"+o+\\\"CategoryMap\\\"]=w.map(function(t){return r._categories[t]}))}},{\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719}],1006:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./xyz_defaults\\\"),a=t(\\\"./style_defaults\\\"),o=t(\\\"../../components/colorscale/defaults\\\"),s=t(\\\"./attributes\\\");e.exports=function(t,e,r,l){function c(r,i){return n.coerce(t,e,s,r,i)}i(t,e,c,l)?(c(\\\"text\\\"),c(\\\"hovertext\\\"),c(\\\"hovertemplate\\\"),a(t,e,c,l),c(\\\"connectgaps\\\",n.isArray1D(e.z)&&!1!==e.zsmooth),o(t,e,l,c,{prefix:\\\"\\\",cLetter:\\\"z\\\"})):e.visible=!1}},{\\\"../../components/colorscale/defaults\\\":603,\\\"../../lib\\\":719,\\\"./attributes\\\":1001,\\\"./style_defaults\\\":1014,\\\"./xyz_defaults\\\":1015}],1007:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\").maxRowLength;e.exports=function(t){var e,r,i,a,o,s,l,c,u=[],h={},f=[],p=t[0],d=[],g=[0,0,0],v=n(t);for(r=0;r<t.length;r++)for(e=d,d=p,p=t[r+1]||[],i=0;i<v;i++)void 0===d[i]&&((s=(void 0!==d[i-1]?1:0)+(void 0!==d[i+1]?1:0)+(void 0!==e[i]?1:0)+(void 0!==p[i]?1:0))?(0===r&&s++,0===i&&s++,r===t.length-1&&s++,i===d.length-1&&s++,s<4&&(h[[r,i]]=[r,i,s]),u.push([r,i,s])):f.push([r,i]));for(;f.length;){for(l={},c=!1,o=f.length-1;o>=0;o--)(s=((h[[(r=(a=f[o])[0])-1,i=a[1]]]||g)[2]+(h[[r+1,i]]||g)[2]+(h[[r,i-1]]||g)[2]+(h[[r,i+1]]||g)[2])/20)&&(l[a]=[r,i,s],f.splice(o,1),c=!0);if(!c)throw\\\"findEmpties iterated with no new neighbors\\\";for(a in l)h[a]=l[a],u.push(l[a])}return u.sort(function(t,e){return e[2]-t[2]})}},{\\\"../../lib\\\":719}],1008:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/fx\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../plots/cartesian/axes\\\"),o=t(\\\"../../components/colorscale\\\").extractOpts;e.exports=function(t,e,r,s,l,c){var u,h,f,p,d=t.cd[0],g=d.trace,v=t.xa,m=t.ya,y=d.x,x=d.y,b=d.z,_=d.xCenter,w=d.yCenter,k=d.zmask,T=g.zhoverformat,A=y,M=x;if(!1!==t.index){try{f=Math.round(t.index[1]),p=Math.round(t.index[0])}catch(e){return void i.error(\\\"Error hovering on heatmap, pointNumber must be [row,col], found:\\\",t.index)}if(f<0||f>=b[0].length||p<0||p>b.length)return}else{if(n.inbox(e-y[0],e-y[y.length-1],0)>0||n.inbox(r-x[0],r-x[x.length-1],0)>0)return;if(c){var S;for(A=[2*y[0]-y[1]],S=1;S<y.length;S++)A.push((y[S]+y[S-1])/2);for(A.push([2*y[y.length-1]-y[y.length-2]]),M=[2*x[0]-x[1]],S=1;S<x.length;S++)M.push((x[S]+x[S-1])/2);M.push([2*x[x.length-1]-x[x.length-2]])}f=Math.max(0,Math.min(A.length-2,i.findBin(e,A))),p=Math.max(0,Math.min(M.length-2,i.findBin(r,M)))}var E=v.c2p(y[f]),C=v.c2p(y[f+1]),L=m.c2p(x[p]),P=m.c2p(x[p+1]);c?(C=E,u=y[f],P=L,h=x[p]):(u=_?_[f]:(y[f]+y[f+1])/2,h=w?w[p]:(x[p]+x[p+1])/2,v&&\\\"category\\\"===v.type&&(u=y[f]),m&&\\\"category\\\"===m.type&&(h=x[p]),g.zsmooth&&(E=C=v.c2p(u),L=P=m.c2p(h)));var O,z=b[p][f];k&&!k[p][f]&&(z=void 0),Array.isArray(d.hovertext)&&Array.isArray(d.hovertext[p])?O=d.hovertext[p][f]:Array.isArray(d.text)&&Array.isArray(d.text[p])&&(O=d.text[p][f]);var I=o(g),D={type:\\\"linear\\\",range:[I.min,I.max],hoverformat:T,_separators:v._separators,_numFormat:v._numFormat},R=a.tickText(D,z,\\\"hover\\\").text;return[i.extendFlat(t,{index:[p,f],distance:t.maxHoverDistance,spikeDistance:t.maxSpikeDistance,x0:E,x1:C,y0:L,y1:P,xLabelVal:u,yLabelVal:h,zLabelVal:z,zLabel:R,text:O})]}},{\\\"../../components/colorscale\\\":605,\\\"../../components/fx\\\":632,\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767}],1009:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),calc:t(\\\"./calc\\\"),plot:t(\\\"./plot\\\"),colorbar:t(\\\"./colorbar\\\"),style:t(\\\"./style\\\"),hoverPoints:t(\\\"./hover\\\"),moduleType:\\\"trace\\\",name:\\\"heatmap\\\",basePlotModule:t(\\\"../../plots/cartesian\\\"),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"2dMap\\\"],meta:{}}},{\\\"../../plots/cartesian\\\":778,\\\"./attributes\\\":1001,\\\"./calc\\\":1002,\\\"./colorbar\\\":1004,\\\"./defaults\\\":1006,\\\"./hover\\\":1008,\\\"./plot\\\":1012,\\\"./style\\\":1013}],1010:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=[[-1,0],[1,0],[0,-1],[0,1]];function a(t){return.5-.25*Math.min(1,.5*t)}function o(t,e,r){var n,a,o,s,l,c,u,h,f,p,d,g,v,m=0;for(s=0;s<e.length;s++){for(a=(n=e[s])[0],o=n[1],d=t[a][o],p=0,f=0,l=0;l<4;l++)(u=t[a+(c=i[l])[0]])&&void 0!==(h=u[o+c[1]])&&(0===p?g=v=h:(g=Math.min(g,h),v=Math.max(v,h)),f++,p+=h);if(0===f)throw\\\"iterateInterp2d order is wrong: no defined neighbors\\\";t[a][o]=p/f,void 0===d?f<4&&(m=1):(t[a][o]=(1+r)*t[a][o]-r*d,v>g&&(m=Math.max(m,Math.abs(t[a][o]-d)/(v-g))))}return m}e.exports=function(t,e){var r,i=1;for(o(t,e),r=0;r<e.length&&!(e[r][2]<4);r++);for(e=e.slice(r),r=0;r<100&&i>.01;r++)i=o(t,e,a(i));return i>.01&&n.log(\\\"interp2d didn't converge quickly\\\",i),t}},{\\\"../../lib\\\":719}],1011:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../lib\\\").isArrayOrTypedArray;e.exports=function(t,e,r,a,o,s){var l,c,u,h=[],f=n.traceIs(t,\\\"contour\\\"),p=n.traceIs(t,\\\"histogram\\\"),d=n.traceIs(t,\\\"gl2d\\\");if(i(e)&&e.length>1&&!p&&\\\"category\\\"!==s.type){var g=e.length;if(!(g<=o))return f?e.slice(0,o):e.slice(0,o+1);if(f||d)h=e.slice(0,o);else if(1===o)h=[e[0]-.5,e[0]+.5];else{for(h=[1.5*e[0]-.5*e[1]],u=1;u<g;u++)h.push(.5*(e[u-1]+e[u]));h.push(1.5*e[g-1]-.5*e[g-2])}if(g<o){var v=h[h.length-1],m=v-h[h.length-2];for(u=g;u<o;u++)v+=m,h.push(v)}}else{var y=t[s._id.charAt(0)+\\\"calendar\\\"];if(p)l=s.r2c(r,0,y);else if(i(e)&&1===e.length)l=e[0];else if(void 0===r)l=0;else{l=(\\\"log\\\"===s.type?s.d2c:s.r2c)(r,0,y)}for(c=a||1,u=f||d?0:-.5;u<o;u++)h.push(l+c*u)}return h}},{\\\"../../lib\\\":719,\\\"../../registry\\\":847}],1012:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"tinycolor2\\\"),a=t(\\\"../../registry\\\"),o=t(\\\"../../lib\\\"),s=t(\\\"../../components/colorscale\\\").makeColorScaleFuncFromTrace,l=t(\\\"../../constants/xmlns_namespaces\\\");function c(t,e){var r=e.length-2,n=o.constrain(o.findBin(t,e),0,r),i=e[n],a=e[n+1],s=o.constrain(n+(t-i)/(a-i)-.5,0,r),l=Math.round(s),c=Math.abs(s-l);return s&&s!==r&&c?{bin0:l,frac:c,bin1:Math.round(l+c/(s-l))}:{bin0:l,bin1:l,frac:0}}function u(t,e){var r=e.length-1,n=o.constrain(o.findBin(t,e),0,r),i=e[n],a=(t-i)/(e[n+1]-i)||0;return a<=0?{bin0:n,bin1:n,frac:0}:a<.5?{bin0:n,bin1:n+1,frac:a}:{bin0:n+1,bin1:n,frac:1-a}}function h(t,e,r){t[e]=r[0],t[e+1]=r[1],t[e+2]=r[2],t[e+3]=Math.round(255*r[3])}e.exports=function(t,e,r,f){var p=e.xaxis,d=e.yaxis;o.makeTraceGroups(f,r,\\\"hm\\\").each(function(e){var r,f,g,v,m,y,x=n.select(this),b=e[0],_=b.trace,w=b.z,k=b.x,T=b.y,A=b.xCenter,M=b.yCenter,S=a.traceIs(_,\\\"contour\\\"),E=S?\\\"best\\\":_.zsmooth,C=w.length,L=o.maxRowLength(w),P=!1,O=!1;for(y=0;void 0===r&&y<k.length-1;)r=p.c2p(k[y]),y++;for(y=k.length-1;void 0===f&&y>0;)f=p.c2p(k[y]),y--;for(f<r&&(g=f,f=r,r=g,P=!0),y=0;void 0===v&&y<T.length-1;)v=d.c2p(T[y]),y++;for(y=T.length-1;void 0===m&&y>0;)m=d.c2p(T[y]),y--;if(m<v&&(g=v,v=m,m=g,O=!0),S&&(A=k,M=T,k=b.xfill,T=b.yfill),\\\"fast\\\"!==E){var z=\\\"best\\\"===E?0:.5;r=Math.max(-z*p._length,r),f=Math.min((1+z)*p._length,f),v=Math.max(-z*d._length,v),m=Math.min((1+z)*d._length,m)}var I=Math.round(f-r),D=Math.round(m-v);if(I<=0||D<=0){x.selectAll(\\\"image\\\").data([]).exit().remove()}else{var R,F;\\\"fast\\\"===E?(R=L,F=C):(R=I,F=D);var B=document.createElement(\\\"canvas\\\");B.width=R,B.height=F;var N,j,U=B.getContext(\\\"2d\\\"),V=s(_,{noNumericCheck:!0,returnArray:!0});\\\"fast\\\"===E?(N=P?function(t){return L-1-t}:o.identity,j=O?function(t){return C-1-t}:o.identity):(N=function(t){return o.constrain(Math.round(p.c2p(k[t])-r),0,I)},j=function(t){return o.constrain(Math.round(d.c2p(T[t])-v),0,D)});var q,H,G,Y,W,X=j(0),Z=[X,X],J=P?0:1,K=O?0:1,$=0,Q=0,tt=0,et=0;if(E){var rt,nt=0;try{rt=new Uint8Array(I*D*4)}catch(t){rt=new Array(I*D*4)}if(\\\"best\\\"===E){var it,at,ot,st=A||k,lt=M||T,ct=new Array(st.length),ut=new Array(lt.length),ht=new Array(I),ft=A?u:c,pt=M?u:c;for(y=0;y<st.length;y++)ct[y]=Math.round(p.c2p(st[y])-r);for(y=0;y<lt.length;y++)ut[y]=Math.round(d.c2p(lt[y])-v);for(y=0;y<I;y++)ht[y]=ft(y,ct);for(H=0;H<D;H++)for(at=w[(it=pt(H,ut)).bin0],ot=w[it.bin1],y=0;y<I;y++,nt+=4)h(rt,nt,W=Tt(at,ot,ht[y],it))}else for(H=0;H<C;H++)for(Y=w[H],Z=j(H),y=0;y<I;y++)W=kt(Y[y],1),h(rt,nt=4*(Z*I+N(y)),W);var dt=U.createImageData(I,D);try{dt.data.set(rt)}catch(t){var gt=dt.data,vt=gt.length;for(H=0;H<vt;H++)gt[H]=rt[H]}U.putImageData(dt,0,0)}else{var mt=_.xgap,yt=_.ygap,xt=Math.floor(mt/2),bt=Math.floor(yt/2);for(H=0;H<C;H++)if(Y=w[H],Z.reverse(),Z[K]=j(H+1),Z[0]!==Z[1]&&void 0!==Z[0]&&void 0!==Z[1])for(q=[G=N(0),G],y=0;y<L;y++)q.reverse(),q[J]=N(y+1),q[0]!==q[1]&&void 0!==q[0]&&void 0!==q[1]&&(W=kt(Y[y],(q[1]-q[0])*(Z[1]-Z[0])),U.fillStyle=\\\"rgba(\\\"+W.join(\\\",\\\")+\\\")\\\",U.fillRect(q[0]+xt,Z[0]+bt,q[1]-q[0]-mt,Z[1]-Z[0]-yt))}Q=Math.round(Q/$),tt=Math.round(tt/$),et=Math.round(et/$);var _t=i(\\\"rgb(\\\"+Q+\\\",\\\"+tt+\\\",\\\"+et+\\\")\\\");t._hmpixcount=(t._hmpixcount||0)+$,t._hmlumcount=(t._hmlumcount||0)+$*_t.getLuminance();var wt=x.selectAll(\\\"image\\\").data(e);wt.enter().append(\\\"svg:image\\\").attr({xmlns:l.svg,preserveAspectRatio:\\\"none\\\"}),wt.attr({height:D,width:I,x:r,y:v,\\\"xlink:href\\\":B.toDataURL(\\\"image/png\\\")})}function kt(t,e){if(void 0!==t){var r=V(t);return r[0]=Math.round(r[0]),r[1]=Math.round(r[1]),r[2]=Math.round(r[2]),$+=e,Q+=r[0]*e,tt+=r[1]*e,et+=r[2]*e,r}return[0,0,0,0]}function Tt(t,e,r,n){var i=t[r.bin0];if(void 0===i)return kt(void 0,1);var a,o=t[r.bin1],s=e[r.bin0],l=e[r.bin1],c=o-i||0,u=s-i||0;return a=void 0===o?void 0===l?0:void 0===s?2*(l-i):2*(2*l-s-i)/3:void 0===l?void 0===s?0:2*(2*i-o-s)/3:void 0===s?2*(2*l-o-i)/3:l+i-o-s,kt(i+r.frac*c+n.frac*(u+r.frac*a))}})}},{\\\"../../components/colorscale\\\":605,\\\"../../constants/xmlns_namespaces\\\":696,\\\"../../lib\\\":719,\\\"../../registry\\\":847,d3:163,tinycolor2:537}],1013:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\");e.exports=function(t){n.select(t).selectAll(\\\".hm image\\\").style(\\\"opacity\\\",function(t){return t.trace.opacity})}},{d3:163}],1014:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r){!1===r(\\\"zsmooth\\\")&&(r(\\\"xgap\\\"),r(\\\"ygap\\\")),r(\\\"zhoverformat\\\")}},{}],1015:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../registry\\\");function o(t,e){var r=e(t);return\\\"scaled\\\"===(r?e(t+\\\"type\\\",\\\"array\\\"):\\\"scaled\\\")&&(e(t+\\\"0\\\"),e(\\\"d\\\"+t)),r}e.exports=function(t,e,r,s,l,c){var u,h,f=r(\\\"z\\\");if(l=l||\\\"x\\\",c=c||\\\"y\\\",void 0===f||!f.length)return 0;if(i.isArray1D(t.z)){u=r(l),h=r(c);var p=i.minRowLength(u),d=i.minRowLength(h);if(0===p||0===d)return 0;e._length=Math.min(p,d,f.length)}else{if(u=o(l,r),h=o(c,r),!function(t){for(var e,r=!0,a=!1,o=!1,s=0;s<t.length;s++){if(e=t[s],!i.isArrayOrTypedArray(e)){r=!1;break}e.length>0&&(a=!0);for(var l=0;l<e.length;l++)if(n(e[l])){o=!0;break}}return r&&a&&o}(f))return 0;r(\\\"transpose\\\"),e._length=null}return a.getComponentMethod(\\\"calendars\\\",\\\"handleTraceDefaults\\\")(t,e,[l,c],s),!0}},{\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"fast-isnumeric\\\":225}],1016:[function(t,e,r){\\\"use strict\\\";for(var n=t(\\\"../heatmap/attributes\\\"),i=t(\\\"../../components/colorscale/attributes\\\"),a=t(\\\"../../lib/extend\\\").extendFlat,o=t(\\\"../../plot_api/edit_types\\\").overrideAll,s=[\\\"z\\\",\\\"x\\\",\\\"x0\\\",\\\"dx\\\",\\\"y\\\",\\\"y0\\\",\\\"dy\\\",\\\"text\\\",\\\"transpose\\\",\\\"xtype\\\",\\\"ytype\\\"],l={},c=0;c<s.length;c++){var u=s[c];l[u]=n[u]}a(l,i(\\\"\\\",{cLetter:\\\"z\\\",autoColorDflt:!1})),e.exports=o(l,\\\"calc\\\",\\\"nested\\\")},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../lib/extend\\\":710,\\\"../../plot_api/edit_types\\\":750,\\\"../heatmap/attributes\\\":1001}],1017:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"gl-heatmap2d\\\"),i=t(\\\"../../plots/cartesian/axes\\\"),a=t(\\\"../../lib/str2rgbarray\\\");function o(t,e){this.scene=t,this.uid=e,this.type=\\\"heatmapgl\\\",this.name=\\\"\\\",this.hoverinfo=\\\"all\\\",this.xData=[],this.yData=[],this.zData=[],this.textLabels=[],this.idToIndex=[],this.bounds=[0,0,0,0],this.options={z:[],x:[],y:[],shape:[0,0],colorLevels:[0],colorValues:[0,0,0,1]},this.heatmap=n(t.glplot,this.options),this.heatmap._trace=this}var s=o.prototype;s.handlePick=function(t){var e=this.options,r=e.shape,n=t.pointId,i=n%r[0],a=Math.floor(n/r[0]),o=n;return{trace:this,dataCoord:t.dataCoord,traceCoord:[e.x[i],e.y[a],e.z[o]],textLabel:this.textLabels[n],name:this.name,pointIndex:[a,i],hoverinfo:this.hoverinfo}},s.update=function(t,e){var r=e[0];this.index=t.index,this.name=t.name,this.hoverinfo=t.hoverinfo;var n=r.z;this.options.z=[].concat.apply([],n);var o=n[0].length,s=n.length;this.options.shape=[o,s],this.options.x=r.x,this.options.y=r.y;var l=function(t){for(var e=t.colorscale,r=t.zmin,n=t.zmax,i=e.length,o=new Array(i),s=new Array(4*i),l=0;l<i;l++){var c=e[l],u=a(c[1]);o[l]=r+c[0]*(n-r);for(var h=0;h<4;h++)s[4*l+h]=u[h]}return{colorLevels:o,colorValues:s}}(t);this.options.colorLevels=l.colorLevels,this.options.colorValues=l.colorValues,this.textLabels=[].concat.apply([],t.text),this.heatmap.update(this.options);var c=this.scene.xaxis,u=this.scene.yaxis;t._extremes[c._id]=i.findExtremes(c,r.x),t._extremes[u._id]=i.findExtremes(u,r.y)},s.dispose=function(){this.heatmap.dispose()},e.exports=function(t,e,r){var n=new o(t,e.uid);return n.update(e,r),n}},{\\\"../../lib/str2rgbarray\\\":742,\\\"../../plots/cartesian/axes\\\":767,\\\"gl-heatmap2d\\\":251}],1018:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"../heatmap/defaults\\\"),colorbar:t(\\\"../heatmap/colorbar\\\"),calc:t(\\\"../heatmap/calc\\\"),plot:t(\\\"./convert\\\"),moduleType:\\\"trace\\\",name:\\\"heatmapgl\\\",basePlotModule:t(\\\"../../plots/gl2d\\\"),categories:[\\\"gl\\\",\\\"gl2d\\\",\\\"2dMap\\\"],meta:{}}},{\\\"../../plots/gl2d\\\":805,\\\"../heatmap/calc\\\":1002,\\\"../heatmap/colorbar\\\":1004,\\\"../heatmap/defaults\\\":1006,\\\"./attributes\\\":1016,\\\"./convert\\\":1017}],1019:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../bar/attributes\\\"),i=t(\\\"../../components/fx/hovertemplate_attributes\\\"),a=t(\\\"./bin_attributes\\\"),o=t(\\\"./constants\\\"),s=t(\\\"../../lib/extend\\\").extendFlat;e.exports={x:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},y:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},text:s({},n.text,{}),hovertext:s({},n.hovertext,{}),orientation:n.orientation,histfunc:{valType:\\\"enumerated\\\",values:[\\\"count\\\",\\\"sum\\\",\\\"avg\\\",\\\"min\\\",\\\"max\\\"],dflt:\\\"count\\\",editType:\\\"calc\\\"},histnorm:{valType:\\\"enumerated\\\",values:[\\\"\\\",\\\"percent\\\",\\\"probability\\\",\\\"density\\\",\\\"probability density\\\"],dflt:\\\"\\\",editType:\\\"calc\\\"},cumulative:{enabled:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},direction:{valType:\\\"enumerated\\\",values:[\\\"increasing\\\",\\\"decreasing\\\"],dflt:\\\"increasing\\\",editType:\\\"calc\\\"},currentbin:{valType:\\\"enumerated\\\",values:[\\\"include\\\",\\\"exclude\\\",\\\"half\\\"],dflt:\\\"include\\\",editType:\\\"calc\\\"},editType:\\\"calc\\\"},nbinsx:{valType:\\\"integer\\\",min:0,dflt:0,editType:\\\"calc\\\"},xbins:a(\\\"x\\\",!0),nbinsy:{valType:\\\"integer\\\",min:0,dflt:0,editType:\\\"calc\\\"},ybins:a(\\\"y\\\",!0),autobinx:{valType:\\\"boolean\\\",dflt:null,editType:\\\"calc\\\"},autobiny:{valType:\\\"boolean\\\",dflt:null,editType:\\\"calc\\\"},bingroup:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},hovertemplate:i({},{keys:o.eventDataKeys}),marker:n.marker,offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup,selected:n.selected,unselected:n.unselected,_deprecated:{bardir:n._deprecated.bardir}}},{\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../bar/attributes\\\":857,\\\"./bin_attributes\\\":1021,\\\"./constants\\\":1025}],1020:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){for(var r=t.length,n=0,i=0;i<r;i++)e[i]?(t[i]/=e[i],n+=t[i]):t[i]=null;return n}},{}],1021:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){return{start:{valType:\\\"any\\\",editType:\\\"calc\\\"},end:{valType:\\\"any\\\",editType:\\\"calc\\\"},size:{valType:\\\"any\\\",editType:\\\"calc\\\"},editType:\\\"calc\\\"}}},{}],1022:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\");e.exports={count:function(t,e,r){return r[t]++,1},sum:function(t,e,r,i){var a=i[e];return n(a)?(a=Number(a),r[t]+=a,a):0},avg:function(t,e,r,i,a){var o=i[e];return n(o)&&(o=Number(o),r[t]+=o,a[t]++),0},min:function(t,e,r,i){var a=i[e];if(n(a)){if(a=Number(a),!n(r[t]))return r[t]=a,a;if(r[t]>a){var o=a-r[t];return r[t]=a,o}}return 0},max:function(t,e,r,i){var a=i[e];if(n(a)){if(a=Number(a),!n(r[t]))return r[t]=a,a;if(r[t]<a){var o=a-r[t];return r[t]=a,o}}return 0}}},{\\\"fast-isnumeric\\\":225}],1023:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../constants/numerical\\\"),i=n.ONEAVGYEAR,a=n.ONEAVGMONTH,o=n.ONEDAY,s=n.ONEHOUR,l=n.ONEMIN,c=n.ONESEC,u=t(\\\"../../plots/cartesian/axes\\\").tickIncrement;function h(t,e,r,n){if(t*e<=0)return 1/0;for(var i=Math.abs(e-t),a=\\\"date\\\"===r.type,o=f(i,a),s=0;s<10;s++){var l=f(80*o,a);if(o===l)break;if(!p(l,t,e,a,r,n))break;o=l}return o}function f(t,e){return e&&t>c?t>o?t>1.1*i?i:t>1.1*a?a:o:t>s?s:t>l?l:c:Math.pow(10,Math.floor(Math.log(t)/Math.LN10))}function p(t,e,r,n,a,s){if(n&&t>o){var l=d(e,a,s),c=d(r,a,s),u=t===i?0:1;return l[u]!==c[u]}return Math.floor(r/t)-Math.floor(e/t)>.1}function d(t,e,r){var n=e.c2d(t,i,r).split(\\\"-\\\");return\\\"\\\"===n[0]&&(n.unshift(),n[0]=\\\"-\\\"+n[0]),n}e.exports=function(t,e,r,n,a){var s,l,c=-1.1*e,f=-.1*e,p=t-f,d=r[0],g=r[1],v=Math.min(h(d+f,d+p,n,a),h(g+f,g+p,n,a)),m=Math.min(h(d+c,d+f,n,a),h(g+c,g+f,n,a));if(v>m&&m<Math.abs(g-d)/4e3?(s=v,l=!1):(s=Math.min(v,m),l=!0),\\\"date\\\"===n.type&&s>o){var y=s===i?1:6,x=s===i?\\\"M12\\\":\\\"M1\\\";return function(e,r){var o=n.c2d(e,i,a),s=o.indexOf(\\\"-\\\",y);s>0&&(o=o.substr(0,s));var c=n.d2c(o,0,a);if(c<e){var h=u(c,x,!1,a);(c+h)/2<e+t&&(c=h)}return r&&l?u(c,x,!0,a):c}}return function(e,r){var n=s*Math.round(e/s);return n+s/10<e&&n+.9*s<e+t&&(n+=s),r&&l&&(n-=s),n}}},{\\\"../../constants/numerical\\\":695,\\\"../../plots/cartesian/axes\\\":767}],1024:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../registry\\\"),o=t(\\\"../../plots/cartesian/axes\\\"),s=t(\\\"../bar/arrays_to_calcdata\\\"),l=t(\\\"./bin_functions\\\"),c=t(\\\"./norm_functions\\\"),u=t(\\\"./average\\\"),h=t(\\\"./bin_label_vals\\\");function f(t,e,r,s,l){var c,u,h,p,d,g,v,m=s+\\\"bins\\\",y=t._fullLayout,x=e[\\\"_\\\"+s+\\\"bingroup\\\"],b=y._histogramBinOpts[x],_=\\\"overlay\\\"===y.barmode,w=function(t){return r.r2c(t,0,p)},k=function(t){return r.c2r(t,0,p)},T=\\\"date\\\"===r.type?function(t){return t||0===t?i.cleanDate(t,null,p):null}:function(t){return n(t)?Number(t):null};function A(t,e,r){e[t+\\\"Found\\\"]?(e[t]=T(e[t]),null===e[t]&&(e[t]=r[t])):(g[t]=e[t]=r[t],i.nestedProperty(u[0],m+\\\".\\\"+t).set(r[t]))}if(e[\\\"_\\\"+s+\\\"autoBinFinished\\\"])delete e[\\\"_\\\"+s+\\\"autoBinFinished\\\"];else{u=b.traces;var M=[],S=!0,E=!1,C=!1;for(c=0;c<u.length;c++)if((h=u[c]).visible){var L=b.dirs[c];d=h[\\\"_\\\"+L+\\\"pos0\\\"]=r.makeCalcdata(h,L),M=i.concat(M,d),delete h[\\\"_\\\"+s+\\\"autoBinFinished\\\"],!0===e.visible&&(S?S=!1:(delete h._autoBin,h[\\\"_\\\"+s+\\\"autoBinFinished\\\"]=1),a.traceIs(h,\\\"2dMap\\\")&&(E=!0),\\\"histogram2dcontour\\\"===h.type&&(C=!0))}p=u[0][s+\\\"calendar\\\"];var P=o.autoBin(M,r,b.nbins,E,p,b.sizeFound&&b.size),O=u[0]._autoBin={};if(g=O[b.dirs[0]]={},C&&(b.size||(P.start=k(o.tickIncrement(w(P.start),P.size,!0,p))),void 0===b.end&&(P.end=k(o.tickIncrement(w(P.end),P.size,!1,p)))),_&&!a.traceIs(e,\\\"2dMap\\\")&&0===P._dataSpan&&\\\"category\\\"!==r.type&&\\\"multicategory\\\"!==r.type){if(l)return[P,d,!0];P=function(t,e,r,n,a){var o,s,l,c=t._fullLayout,u=function(t,e){for(var r=e.xaxis,n=e.yaxis,i=e.orientation,a=[],o=t._fullData,s=0;s<o.length;s++){var l=o[s];\\\"histogram\\\"===l.type&&!0===l.visible&&l.orientation===i&&l.xaxis===r&&l.yaxis===n&&a.push(l)}return a}(t,e),h=!1,p=1/0,d=[e];for(o=0;o<u.length;o++)if((s=u[o])===e)h=!0;else if(h){var g=f(t,s,r,n,!0),v=g[0],m=g[2];s[\\\"_\\\"+n+\\\"autoBinFinished\\\"]=1,s[\\\"_\\\"+n+\\\"pos0\\\"]=g[1],m?d.push(s):p=Math.min(p,v.size)}else l=c._histogramBinOpts[s[\\\"_\\\"+n+\\\"bingroup\\\"]],p=Math.min(p,l.size||s[a].size);var y=new Array(d.length);for(o=0;o<d.length;o++)for(var x=d[o][\\\"_\\\"+n+\\\"pos0\\\"],b=0;b<x.length;b++)if(void 0!==x[b]){y[o]=x[b];break}isFinite(p)||(p=i.distinctVals(y).minDiff);for(o=0;o<d.length;o++){var _=(s=d[o])[n+\\\"calendar\\\"],w={start:r.c2r(y[o]-p/2,0,_),end:r.c2r(y[o]+p/2,0,_),size:p};s._input[a]=s[a]=w,(l=c._histogramBinOpts[s[\\\"_\\\"+n+\\\"bingroup\\\"]])&&i.extendFlat(l,w)}return e[a]}(t,e,r,s,m)}(v=h.cumulative||{}).enabled&&\\\"include\\\"!==v.currentbin&&(\\\"decreasing\\\"===v.direction?P.start=k(o.tickIncrement(w(P.start),P.size,!0,p)):P.end=k(o.tickIncrement(w(P.end),P.size,!1,p))),b.size=P.size,b.sizeFound||(g.size=P.size,i.nestedProperty(u[0],m+\\\".size\\\").set(P.size)),A(\\\"start\\\",b,P),A(\\\"end\\\",b,P)}d=e[\\\"_\\\"+s+\\\"pos0\\\"],delete e[\\\"_\\\"+s+\\\"pos0\\\"];var z=e._input[m]||{},I=i.extendFlat({},b),D=b.start,R=r.r2l(z.start),F=void 0!==R;if((b.startFound||F)&&R!==r.r2l(D)){var B=F?R:i.aggNums(Math.min,null,d),N={type:\\\"category\\\"===r.type||\\\"multicategory\\\"===r.type?\\\"linear\\\":r.type,r2l:r.r2l,dtick:b.size,tick0:D,calendar:p,range:[B,o.tickIncrement(B,b.size,!1,p)].map(r.l2r)},j=o.tickFirst(N);j>r.r2l(B)&&(j=o.tickIncrement(j,b.size,!0,p)),I.start=r.l2r(j),F||i.nestedProperty(e,m+\\\".start\\\").set(I.start)}var U=b.end,V=r.r2l(z.end),q=void 0!==V;if((b.endFound||q)&&V!==r.r2l(U)){var H=q?V:i.aggNums(Math.max,null,d);I.end=r.l2r(H),q||i.nestedProperty(e,m+\\\".start\\\").set(I.end)}var G=\\\"autobin\\\"+s;return!1===e._input[G]&&(e._input[m]=i.extendFlat({},e[m]||{}),delete e._input[G],delete e[G]),[I,d]}e.exports={calc:function(t,e){var r,a,p,d,g=[],v=[],m=o.getFromId(t,\\\"h\\\"===e.orientation?e.yaxis:e.xaxis),y=\\\"h\\\"===e.orientation?\\\"y\\\":\\\"x\\\",x={x:\\\"y\\\",y:\\\"x\\\"}[y],b=e[y+\\\"calendar\\\"],_=e.cumulative,w=f(t,e,m,y),k=w[0],T=w[1],A=\\\"string\\\"==typeof k.size,M=[],S=A?M:k,E=[],C=[],L=[],P=0,O=e.histnorm,z=e.histfunc,I=-1!==O.indexOf(\\\"density\\\");_.enabled&&I&&(O=O.replace(/ ?density$/,\\\"\\\"),I=!1);var D,R=\\\"max\\\"===z||\\\"min\\\"===z?null:0,F=l.count,B=c[O],N=!1,j=function(t){return m.r2c(t,0,b)};for(i.isArrayOrTypedArray(e[x])&&\\\"count\\\"!==z&&(D=e[x],N=\\\"avg\\\"===z,F=l[z]),r=j(k.start),p=j(k.end)+(r-o.tickIncrement(r,k.size,!1,b))/1e6;r<p&&g.length<1e6&&(a=o.tickIncrement(r,k.size,!1,b),g.push((r+a)/2),v.push(R),L.push([]),M.push(r),I&&E.push(1/(a-r)),N&&C.push(0),!(a<=r));)r=a;M.push(r),A||\\\"date\\\"!==m.type||(S={start:j(S.start),end:j(S.end),size:S.size});var U,V=v.length,q=!0,H=1/0,G=1/0,Y={};for(r=0;r<T.length;r++){var W=T[r];(d=i.findBin(W,S))>=0&&d<V&&(P+=F(d,r,v,D,C),q&&L[d].length&&W!==T[L[d][0]]&&(q=!1),L[d].push(r),Y[r]=d,H=Math.min(H,W-M[d]),G=Math.min(G,M[d+1]-W))}q||(U=h(H,G,M,m,b)),N&&(P=u(v,C)),B&&B(v,P,E),_.enabled&&function(t,e,r){var n,i,a;function o(e){a=t[e],t[e]/=2}function s(e){i=t[e],t[e]=a+i/2,a+=i}if(\\\"half\\\"===r)if(\\\"increasing\\\"===e)for(o(0),n=1;n<t.length;n++)s(n);else for(o(t.length-1),n=t.length-2;n>=0;n--)s(n);else if(\\\"increasing\\\"===e){for(n=1;n<t.length;n++)t[n]+=t[n-1];\\\"exclude\\\"===r&&(t.unshift(0),t.pop())}else{for(n=t.length-2;n>=0;n--)t[n]+=t[n+1];\\\"exclude\\\"===r&&(t.push(0),t.shift())}}(v,_.direction,_.currentbin);var X=Math.min(g.length,v.length),Z=[],J=0,K=X-1;for(r=0;r<X;r++)if(v[r]){J=r;break}for(r=X-1;r>=J;r--)if(v[r]){K=r;break}for(r=J;r<=K;r++)if(n(g[r])&&n(v[r])){var $={p:g[r],s:v[r],b:0};_.enabled||($.pts=L[r],q?$.ph0=$.ph1=L[r].length?T[L[r][0]]:g[r]:($.ph0=U(M[r]),$.ph1=U(M[r+1],!0))),Z.push($)}return 1===Z.length&&(Z[0].width1=o.tickIncrement(Z[0].p,k.size,!1,b)-Z[0].p),s(Z,e),i.isArrayOrTypedArray(e.selectedpoints)&&i.tagSelected(Z,e,Y),Z},calcAllAutoBins:f}},{\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767,\\\"../../registry\\\":847,\\\"../bar/arrays_to_calcdata\\\":856,\\\"./average\\\":1020,\\\"./bin_functions\\\":1022,\\\"./bin_label_vals\\\":1023,\\\"./norm_functions\\\":1031,\\\"fast-isnumeric\\\":225}],1025:[function(t,e,r){\\\"use strict\\\";e.exports={eventDataKeys:[\\\"binNumber\\\"]}},{}],1026:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../plots/cartesian/axis_ids\\\"),a=t(\\\"../../registry\\\").traceIs,o=t(\\\"../bar/defaults\\\").handleGroupingDefaults,s=n.nestedProperty,l=i.getAxisGroup,c=[{aStr:{x:\\\"xbins.start\\\",y:\\\"ybins.start\\\"},name:\\\"start\\\"},{aStr:{x:\\\"xbins.end\\\",y:\\\"ybins.end\\\"},name:\\\"end\\\"},{aStr:{x:\\\"xbins.size\\\",y:\\\"ybins.size\\\"},name:\\\"size\\\"},{aStr:{x:\\\"nbinsx\\\",y:\\\"nbinsy\\\"},name:\\\"nbins\\\"}],u=[\\\"x\\\",\\\"y\\\"];e.exports=function(t,e){var r,h,f,p,d,g,v,m=e._histogramBinOpts={},y=[],x={},b=[];function _(t,e){return n.coerce(r._input,r,r._module.attributes,t,e)}function w(t){return\\\"v\\\"===t.orientation?\\\"x\\\":\\\"y\\\"}function k(t,r,a){var o=t.uid+\\\"__\\\"+a;r||(r=o);var s=function(t,r){return i.getFromTrace({_fullLayout:e},t,r).type}(t,a),l=t[a+\\\"calendar\\\"],c=m[r],u=!0;c&&(s===c.axType&&l===c.calendar?(u=!1,c.traces.push(t),c.dirs.push(a)):(r=o,s!==c.axType&&n.warn([\\\"Attempted to group the bins of trace\\\",t.index,\\\"set on a\\\",\\\"type:\\\"+s,\\\"axis\\\",\\\"with bins on\\\",\\\"type:\\\"+c.axType,\\\"axis.\\\"].join(\\\" \\\")),l!==c.calendar&&n.warn([\\\"Attempted to group the bins of trace\\\",t.index,\\\"set with a\\\",l,\\\"calendar\\\",\\\"with bins\\\",c.calendar?\\\"on a \\\"+c.calendar+\\\" calendar\\\":\\\"w/o a set calendar\\\"].join(\\\" \\\")))),u&&(m[r]={traces:[t],dirs:[a],axType:s,calendar:t[a+\\\"calendar\\\"]||\\\"\\\"}),t[\\\"_\\\"+a+\\\"bingroup\\\"]=r}for(d=0;d<t.length;d++)r=t[d],a(r,\\\"histogram\\\")&&(y.push(r),delete r._xautoBinFinished,delete r._yautoBinFinished,a(r,\\\"2dMap\\\")||o(r._input,r,e,_));var T=e._alignmentOpts||{};for(d=0;d<y.length;d++){if(r=y[d],f=\\\"\\\",!a(r,\\\"2dMap\\\")){if(p=w(r),\\\"group\\\"===e.barmode&&r.alignmentgroup){var A=r[p+\\\"axis\\\"],M=l(e,A)+r.orientation;(T[M]||{})[r.alignmentgroup]&&(f=M)}f||\\\"overlay\\\"===e.barmode||(f=l(e,r.xaxis)+l(e,r.yaxis)+w(r))}f?(x[f]||(x[f]=[]),x[f].push(r)):b.push(r)}for(f in x)if(1!==(h=x[f]).length){var S=!1;for(d=0;d<h.length;d++){r=h[d],S=_(\\\"bingroup\\\");break}for(f=S||f,d=0;d<h.length;d++){var E=(r=h[d])._input.bingroup;E&&E!==f&&n.warn([\\\"Trace\\\",r.index,\\\"must match\\\",\\\"within bingroup\\\",f+\\\".\\\",\\\"Ignoring its bingroup:\\\",E,\\\"setting.\\\"].join(\\\" \\\")),r.bingroup=f,k(r,f,w(r))}}else b.push(h[0]);for(d=0;d<b.length;d++){r=b[d];var C=_(\\\"bingroup\\\");if(a(r,\\\"2dMap\\\"))for(v=0;v<2;v++){var L=_((p=u[v])+\\\"bingroup\\\",C?C+\\\"__\\\"+p:null);k(r,L,p)}else k(r,C,w(r))}for(f in m){var P=m[f];for(h=P.traces,g=0;g<c.length;g++){var O,z,I=c[g],D=I.name;if(\\\"nbins\\\"!==D||!P.sizeFound){for(d=0;d<h.length;d++){if(r=h[d],p=P.dirs[d],O=I.aStr[p],void 0!==s(r._input,O).get()){P[D]=_(O),P[D+\\\"Found\\\"]=!0;break}(z=(r._autoBin||{})[p]||{})[D]&&s(r,O).set(z[D])}if(\\\"start\\\"===D||\\\"end\\\"===D)for(;d<h.length;d++)(r=h[d])[\\\"_\\\"+p+\\\"bingroup\\\"]&&_(O,(z=(r._autoBin||{})[p]||{})[D]);\\\"nbins\\\"!==D||P.sizeFound||P.nbinsFound||(r=h[0],P[D]=_(O))}}}}},{\\\"../../lib\\\":719,\\\"../../plots/cartesian/axis_ids\\\":770,\\\"../../registry\\\":847,\\\"../bar/defaults\\\":861}],1027:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../components/color\\\"),o=t(\\\"../bar/style_defaults\\\"),s=t(\\\"./attributes\\\");e.exports=function(t,e,r,l){function c(r,n){return i.coerce(t,e,s,r,n)}var u=c(\\\"x\\\"),h=c(\\\"y\\\");c(\\\"cumulative.enabled\\\")&&(c(\\\"cumulative.direction\\\"),c(\\\"cumulative.currentbin\\\")),c(\\\"text\\\"),c(\\\"hovertext\\\"),c(\\\"hovertemplate\\\");var f=c(\\\"orientation\\\",h&&!u?\\\"h\\\":\\\"v\\\"),p=\\\"v\\\"===f?\\\"x\\\":\\\"y\\\",d=\\\"v\\\"===f?\\\"y\\\":\\\"x\\\",g=u&&h?Math.min(i.minRowLength(u)&&i.minRowLength(h)):i.minRowLength(e[p]||[]);if(g){e._length=g,n.getComponentMethod(\\\"calendars\\\",\\\"handleTraceDefaults\\\")(t,e,[\\\"x\\\",\\\"y\\\"],l),e[d]&&c(\\\"histfunc\\\"),c(\\\"histnorm\\\"),c(\\\"autobin\\\"+p),o(t,e,c,r,l),i.coerceSelectionMarkerOpacity(e,c);var v=(e.marker.line||{}).color,m=n.getComponentMethod(\\\"errorbars\\\",\\\"supplyDefaults\\\");m(t,e,v||a.defaultLine,{axis:\\\"y\\\"}),m(t,e,v||a.defaultLine,{axis:\\\"x\\\",inherit:\\\"y\\\"})}else e.visible=!1}},{\\\"../../components/color\\\":593,\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"../bar/style_defaults\\\":871,\\\"./attributes\\\":1019}],1028:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,n,i){if(t.x=\\\"xVal\\\"in e?e.xVal:e.x,t.y=\\\"yVal\\\"in e?e.yVal:e.y,\\\"zLabelVal\\\"in e&&(t.z=e.zLabelVal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),!(r.cumulative||{}).enabled){var a,o=Array.isArray(i)?n[0].pts[i[0]][i[1]]:n[i].pts;if(t.pointNumbers=o,t.binNumber=t.pointNumber,delete t.pointNumber,delete t.pointIndex,r._indexToPoints){a=[];for(var s=0;s<o.length;s++)a=a.concat(r._indexToPoints[o[s]])}else a=o;t.pointIndices=a}return t}},{}],1029:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../bar/hover\\\").hoverPoints,i=t(\\\"../../plots/cartesian/axes\\\").hoverLabelText;e.exports=function(t,e,r,a){var o=n(t,e,r,a);if(o){var s=(t=o[0]).cd[t.index],l=t.cd[0].trace;if(!l.cumulative.enabled){var c=\\\"h\\\"===l.orientation?\\\"y\\\":\\\"x\\\";t[c+\\\"Label\\\"]=i(t[c+\\\"a\\\"],s.ph0,s.ph1)}return l.hovermplate&&(t.hovertemplate=l.hovertemplate),o}}},{\\\"../../plots/cartesian/axes\\\":767,\\\"../bar/hover\\\":863}],1030:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),layoutAttributes:t(\\\"../bar/layout_attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),crossTraceDefaults:t(\\\"./cross_trace_defaults\\\"),supplyLayoutDefaults:t(\\\"../bar/layout_defaults\\\"),calc:t(\\\"./calc\\\").calc,crossTraceCalc:t(\\\"../bar/cross_trace_calc\\\").crossTraceCalc,plot:t(\\\"../bar/plot\\\").plot,layerName:\\\"barlayer\\\",style:t(\\\"../bar/style\\\").style,styleOnSelect:t(\\\"../bar/style\\\").styleOnSelect,colorbar:t(\\\"../scatter/marker_colorbar\\\"),hoverPoints:t(\\\"./hover\\\"),selectPoints:t(\\\"../bar/select\\\"),eventData:t(\\\"./event_data\\\"),moduleType:\\\"trace\\\",name:\\\"histogram\\\",basePlotModule:t(\\\"../../plots/cartesian\\\"),categories:[\\\"bar-like\\\",\\\"cartesian\\\",\\\"svg\\\",\\\"bar\\\",\\\"histogram\\\",\\\"oriented\\\",\\\"errorBarsOK\\\",\\\"showLegend\\\"],meta:{}}},{\\\"../../plots/cartesian\\\":778,\\\"../bar/cross_trace_calc\\\":860,\\\"../bar/layout_attributes\\\":865,\\\"../bar/layout_defaults\\\":866,\\\"../bar/plot\\\":867,\\\"../bar/select\\\":868,\\\"../bar/style\\\":870,\\\"../scatter/marker_colorbar\\\":1129,\\\"./attributes\\\":1019,\\\"./calc\\\":1024,\\\"./cross_trace_defaults\\\":1026,\\\"./defaults\\\":1027,\\\"./event_data\\\":1028,\\\"./hover\\\":1029}],1031:[function(t,e,r){\\\"use strict\\\";e.exports={percent:function(t,e){for(var r=t.length,n=100/e,i=0;i<r;i++)t[i]*=n},probability:function(t,e){for(var r=t.length,n=0;n<r;n++)t[n]/=e},density:function(t,e,r,n){var i=t.length;n=n||1;for(var a=0;a<i;a++)t[a]*=r[a]*n},\\\"probability density\\\":function(t,e,r,n){var i=t.length;n&&(e/=n);for(var a=0;a<i;a++)t[a]*=r[a]/e}}},{}],1032:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../histogram/attributes\\\"),i=t(\\\"../histogram/bin_attributes\\\"),a=t(\\\"../heatmap/attributes\\\"),o=t(\\\"../../components/fx/hovertemplate_attributes\\\"),s=t(\\\"../../components/colorscale/attributes\\\"),l=t(\\\"../../lib/extend\\\").extendFlat;e.exports=l({x:n.x,y:n.y,z:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},marker:{color:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},editType:\\\"calc\\\"},histnorm:n.histnorm,histfunc:n.histfunc,nbinsx:n.nbinsx,xbins:i(\\\"x\\\"),nbinsy:n.nbinsy,ybins:i(\\\"y\\\"),autobinx:n.autobinx,autobiny:n.autobiny,bingroup:l({},n.bingroup,{}),xbingroup:l({},n.bingroup,{}),ybingroup:l({},n.bingroup,{}),xgap:a.xgap,ygap:a.ygap,zsmooth:a.zsmooth,zhoverformat:a.zhoverformat,hovertemplate:o({},{keys:\\\"z\\\"})},s(\\\"\\\",{cLetter:\\\"z\\\",autoColorDflt:!1}))},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../heatmap/attributes\\\":1001,\\\"../histogram/attributes\\\":1019,\\\"../histogram/bin_attributes\\\":1021}],1033:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../plots/cartesian/axes\\\"),a=t(\\\"../histogram/bin_functions\\\"),o=t(\\\"../histogram/norm_functions\\\"),s=t(\\\"../histogram/average\\\"),l=t(\\\"../histogram/bin_label_vals\\\"),c=t(\\\"../histogram/calc\\\").calcAllAutoBins;function u(t,e,r,n){var i,a=new Array(t);if(n)for(i=0;i<t;i++)a[i]=1/(e[i+1]-e[i]);else{var o=1/r;for(i=0;i<t;i++)a[i]=o}return a}function h(t,e){return{start:t(e.start),end:t(e.end),size:e.size}}function f(t,e,r,n,i,a){var o,s=t.length-1,c=new Array(s),u=l(r,n,t,i,a);for(o=0;o<s;o++){var h=(e||[])[o];c[o]=void 0===h?[u(t[o]),u(t[o+1],!0)]:[h,h]}return c}e.exports=function(t,e){var r,l,p,d,g=i.getFromId(t,e.xaxis),v=i.getFromId(t,e.yaxis),m=e.xcalendar,y=e.ycalendar,x=function(t){return g.r2c(t,0,m)},b=function(t){return v.r2c(t,0,y)},_=c(t,e,g,\\\"x\\\"),w=_[0],k=_[1],T=c(t,e,v,\\\"y\\\"),A=T[0],M=T[1],S=e._length;k.length>S&&k.splice(S,k.length-S),M.length>S&&M.splice(S,M.length-S);var E=[],C=[],L=[],P=\\\"string\\\"==typeof w.size,O=\\\"string\\\"==typeof A.size,z=[],I=[],D=P?z:w,R=O?I:A,F=0,B=[],N=[],j=e.histnorm,U=e.histfunc,V=-1!==j.indexOf(\\\"density\\\"),q=\\\"max\\\"===U||\\\"min\\\"===U?null:0,H=a.count,G=o[j],Y=!1,W=[],X=[],Z=\\\"z\\\"in e?e.z:\\\"marker\\\"in e&&Array.isArray(e.marker.color)?e.marker.color:\\\"\\\";Z&&\\\"count\\\"!==U&&(Y=\\\"avg\\\"===U,H=a[U]);var J=w.size,K=x(w.start),$=x(w.end)+(K-i.tickIncrement(K,J,!1,m))/1e6;for(r=K;r<$;r=i.tickIncrement(r,J,!1,m))C.push(q),z.push(r),Y&&L.push(0);z.push(r);var Q,tt=C.length,et=(r-K)/tt,rt=(Q=K+et/2,g.c2r(Q,0,m)),nt=A.size,it=b(A.start),at=b(A.end)+(it-i.tickIncrement(it,nt,!1,y))/1e6;for(r=it;r<at;r=i.tickIncrement(r,nt,!1,y)){E.push(C.slice()),I.push(r);var ot=new Array(tt);for(l=0;l<tt;l++)ot[l]=[];N.push(ot),Y&&B.push(L.slice())}I.push(r);var st=E.length,lt=(r-it)/st,ct=function(t){return v.c2r(t,0,y)}(it+lt/2);V&&(W=u(C.length,D,et,P),X=u(E.length,R,lt,O)),P||\\\"date\\\"!==g.type||(D=h(x,D)),O||\\\"date\\\"!==v.type||(R=h(b,R));var ut=!0,ht=!0,ft=new Array(tt),pt=new Array(st),dt=1/0,gt=1/0,vt=1/0,mt=1/0;for(r=0;r<S;r++){var yt=k[r],xt=M[r];p=n.findBin(yt,D),d=n.findBin(xt,R),p>=0&&p<tt&&d>=0&&d<st&&(F+=H(p,r,E[d],Z,B[d]),N[d][p].push(r),ut&&(void 0===ft[p]?ft[p]=yt:ft[p]!==yt&&(ut=!1)),ht&&(void 0===pt[d]?pt[d]=xt:pt[d]!==xt&&(ht=!1)),dt=Math.min(dt,yt-z[p]),gt=Math.min(gt,z[p+1]-yt),vt=Math.min(vt,xt-I[d]),mt=Math.min(mt,I[d+1]-xt))}if(Y)for(d=0;d<st;d++)F+=s(E[d],B[d]);if(G)for(d=0;d<st;d++)G(E[d],F,W,X[d]);return{x:k,xRanges:f(z,ut&&ft,dt,gt,g,m),x0:rt,dx:et,y:M,yRanges:f(I,ht&&pt,vt,mt,v,y),y0:ct,dy:lt,z:E,pts:N}}},{\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767,\\\"../histogram/average\\\":1020,\\\"../histogram/bin_functions\\\":1022,\\\"../histogram/bin_label_vals\\\":1023,\\\"../histogram/calc\\\":1024,\\\"../histogram/norm_functions\\\":1031}],1034:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./sample_defaults\\\"),a=t(\\\"../heatmap/style_defaults\\\"),o=t(\\\"../../components/colorscale/defaults\\\"),s=t(\\\"./attributes\\\");e.exports=function(t,e,r,l){function c(r,i){return n.coerce(t,e,s,r,i)}i(t,e,c,l),!1!==e.visible&&(a(t,e,c,l),o(t,e,l,c,{prefix:\\\"\\\",cLetter:\\\"z\\\"}),c(\\\"hovertemplate\\\"))}},{\\\"../../components/colorscale/defaults\\\":603,\\\"../../lib\\\":719,\\\"../heatmap/style_defaults\\\":1014,\\\"./attributes\\\":1032,\\\"./sample_defaults\\\":1037}],1035:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../heatmap/hover\\\"),i=t(\\\"../../plots/cartesian/axes\\\").hoverLabelText;e.exports=function(t,e,r,a,o,s){var l=n(t,e,r,a,o,s);if(l){var c=(t=l[0]).index,u=c[0],h=c[1],f=t.cd[0],p=f.xRanges[h],d=f.yRanges[u];return t.xLabel=i(t.xa,p[0],p[1]),t.yLabel=i(t.ya,d[0],d[1]),l}}},{\\\"../../plots/cartesian/axes\\\":767,\\\"../heatmap/hover\\\":1008}],1036:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),crossTraceDefaults:t(\\\"../histogram/cross_trace_defaults\\\"),calc:t(\\\"../heatmap/calc\\\"),plot:t(\\\"../heatmap/plot\\\"),layerName:\\\"heatmaplayer\\\",colorbar:t(\\\"../heatmap/colorbar\\\"),style:t(\\\"../heatmap/style\\\"),hoverPoints:t(\\\"./hover\\\"),eventData:t(\\\"../histogram/event_data\\\"),moduleType:\\\"trace\\\",name:\\\"histogram2d\\\",basePlotModule:t(\\\"../../plots/cartesian\\\"),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"2dMap\\\",\\\"histogram\\\"],meta:{}}},{\\\"../../plots/cartesian\\\":778,\\\"../heatmap/calc\\\":1002,\\\"../heatmap/colorbar\\\":1004,\\\"../heatmap/plot\\\":1012,\\\"../heatmap/style\\\":1013,\\\"../histogram/cross_trace_defaults\\\":1026,\\\"../histogram/event_data\\\":1028,\\\"./attributes\\\":1032,\\\"./defaults\\\":1034,\\\"./hover\\\":1035}],1037:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../lib\\\");e.exports=function(t,e,r,a){var o=r(\\\"x\\\"),s=r(\\\"y\\\"),l=i.minRowLength(o),c=i.minRowLength(s);l&&c?(e._length=Math.min(l,c),n.getComponentMethod(\\\"calendars\\\",\\\"handleTraceDefaults\\\")(t,e,[\\\"x\\\",\\\"y\\\"],a),(r(\\\"z\\\")||r(\\\"marker.color\\\"))&&r(\\\"histfunc\\\"),r(\\\"histnorm\\\"),r(\\\"autobinx\\\"),r(\\\"autobiny\\\")):e.visible=!1}},{\\\"../../lib\\\":719,\\\"../../registry\\\":847}],1038:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../histogram2d/attributes\\\"),i=t(\\\"../contour/attributes\\\"),a=t(\\\"../../components/colorscale/attributes\\\"),o=t(\\\"../../lib/extend\\\").extendFlat;e.exports=o({x:n.x,y:n.y,z:n.z,marker:n.marker,histnorm:n.histnorm,histfunc:n.histfunc,nbinsx:n.nbinsx,xbins:n.xbins,nbinsy:n.nbinsy,ybins:n.ybins,autobinx:n.autobinx,autobiny:n.autobiny,bingroup:n.bingroup,xbingroup:n.xbingroup,ybingroup:n.ybingroup,autocontour:i.autocontour,ncontours:i.ncontours,contours:i.contours,line:i.line,zhoverformat:n.zhoverformat,hovertemplate:n.hovertemplate},a(\\\"\\\",{cLetter:\\\"z\\\",editTypeOverride:\\\"calc\\\"}))},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../lib/extend\\\":710,\\\"../contour/attributes\\\":942,\\\"../histogram2d/attributes\\\":1032}],1039:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../histogram2d/sample_defaults\\\"),a=t(\\\"../contour/contours_defaults\\\"),o=t(\\\"../contour/style_defaults\\\"),s=t(\\\"./attributes\\\");e.exports=function(t,e,r,l){function c(r,i){return n.coerce(t,e,s,r,i)}i(t,e,c,l),!1!==e.visible&&(a(t,e,c,function(r){return n.coerce2(t,e,s,r)}),o(t,e,c,l),c(\\\"hovertemplate\\\"))}},{\\\"../../lib\\\":719,\\\"../contour/contours_defaults\\\":949,\\\"../contour/style_defaults\\\":963,\\\"../histogram2d/sample_defaults\\\":1037,\\\"./attributes\\\":1038}],1040:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),crossTraceDefaults:t(\\\"../histogram/cross_trace_defaults\\\"),calc:t(\\\"../contour/calc\\\"),plot:t(\\\"../contour/plot\\\").plot,layerName:\\\"contourlayer\\\",style:t(\\\"../contour/style\\\"),colorbar:t(\\\"../contour/colorbar\\\"),hoverPoints:t(\\\"../contour/hover\\\"),moduleType:\\\"trace\\\",name:\\\"histogram2dcontour\\\",basePlotModule:t(\\\"../../plots/cartesian\\\"),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"2dMap\\\",\\\"contour\\\",\\\"histogram\\\",\\\"showLegend\\\"],meta:{}}},{\\\"../../plots/cartesian\\\":778,\\\"../contour/calc\\\":943,\\\"../contour/colorbar\\\":945,\\\"../contour/hover\\\":955,\\\"../contour/plot\\\":960,\\\"../contour/style\\\":962,\\\"../histogram/cross_trace_defaults\\\":1026,\\\"./attributes\\\":1038,\\\"./defaults\\\":1039}],1041:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib/extend\\\").extendFlat,i=t(\\\"../../lib/extend\\\").extendDeep,a=t(\\\"../../plot_api/edit_types\\\").overrideAll,o=t(\\\"../../plots/font_attributes\\\"),s=t(\\\"../../components/color/attributes\\\"),l=t(\\\"../../plots/domain\\\").attributes,c=t(\\\"../../plots/cartesian/layout_attributes\\\"),u=t(\\\"../../plot_api/plot_template\\\").templatedArray,h=t(\\\"../../constants/delta.js\\\"),f=(t(\\\"../../constants/docs\\\").FORMAT_LINK,o({editType:\\\"plot\\\",colorEditType:\\\"plot\\\"})),p={color:{valType:\\\"color\\\",editType:\\\"plot\\\"},line:{color:{valType:\\\"color\\\",dflt:s.defaultLine,editType:\\\"plot\\\"},width:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"plot\\\"},editType:\\\"calc\\\"},thickness:{valType:\\\"number\\\",min:0,max:1,dflt:1,editType:\\\"plot\\\"},editType:\\\"calc\\\"},d={valType:\\\"info_array\\\",items:[{valType:\\\"number\\\",editType:\\\"plot\\\"},{valType:\\\"number\\\",editType:\\\"plot\\\"}],editType:\\\"plot\\\"},g=u(\\\"step\\\",i({},p,{range:d}));e.exports={mode:{valType:\\\"flaglist\\\",editType:\\\"calc\\\",flags:[\\\"number\\\",\\\"delta\\\",\\\"gauge\\\"],dflt:\\\"number\\\"},value:{valType:\\\"number\\\",editType:\\\"calc\\\",anim:!0},align:{valType:\\\"enumerated\\\",values:[\\\"left\\\",\\\"center\\\",\\\"right\\\"],editType:\\\"plot\\\"},domain:l({name:\\\"indicator\\\",trace:!0,editType:\\\"calc\\\"}),title:{text:{valType:\\\"string\\\",editType:\\\"plot\\\"},align:{valType:\\\"enumerated\\\",values:[\\\"left\\\",\\\"center\\\",\\\"right\\\"],editType:\\\"plot\\\"},font:n({},f,{}),editType:\\\"plot\\\"},number:{valueformat:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"plot\\\"},font:n({},f,{}),prefix:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"plot\\\"},suffix:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"plot\\\"},editType:\\\"plot\\\"},delta:{reference:{valType:\\\"number\\\",editType:\\\"calc\\\"},position:{valType:\\\"enumerated\\\",values:[\\\"top\\\",\\\"bottom\\\",\\\"left\\\",\\\"right\\\"],dflt:\\\"bottom\\\",editType:\\\"plot\\\"},relative:{valType:\\\"boolean\\\",editType:\\\"plot\\\",dflt:!1},valueformat:{valType:\\\"string\\\",editType:\\\"plot\\\"},increasing:{symbol:{valType:\\\"string\\\",dflt:h.INCREASING.SYMBOL,editType:\\\"plot\\\"},color:{valType:\\\"color\\\",dflt:h.INCREASING.COLOR,editType:\\\"plot\\\"},editType:\\\"plot\\\"},decreasing:{symbol:{valType:\\\"string\\\",dflt:h.DECREASING.SYMBOL,editType:\\\"plot\\\"},color:{valType:\\\"color\\\",dflt:h.DECREASING.COLOR,editType:\\\"plot\\\"},editType:\\\"plot\\\"},font:n({},f,{}),editType:\\\"calc\\\"},gauge:{shape:{valType:\\\"enumerated\\\",editType:\\\"plot\\\",dflt:\\\"angular\\\",values:[\\\"angular\\\",\\\"bullet\\\"]},bar:i({},p,{color:{dflt:\\\"green\\\"}}),bgcolor:{valType:\\\"color\\\",editType:\\\"plot\\\"},bordercolor:{valType:\\\"color\\\",dflt:s.defaultLine,editType:\\\"plot\\\"},borderwidth:{valType:\\\"number\\\",min:0,dflt:1,editType:\\\"plot\\\"},axis:a({range:d,visible:n({},c.visible,{dflt:!0}),tickmode:c.tickmode,nticks:c.nticks,tick0:c.tick0,dtick:c.dtick,tickvals:c.tickvals,ticktext:c.ticktext,ticks:n({},c.ticks,{dflt:\\\"outside\\\"}),ticklen:c.ticklen,tickwidth:c.tickwidth,tickcolor:c.tickcolor,showticklabels:c.showticklabels,tickfont:o({}),tickangle:c.tickangle,tickformat:c.tickformat,tickformatstops:c.tickformatstops,tickprefix:c.tickprefix,showtickprefix:c.showtickprefix,ticksuffix:c.ticksuffix,showticksuffix:c.showticksuffix,separatethousands:c.separatethousands,exponentformat:c.exponentformat,showexponent:c.showexponent,editType:\\\"plot\\\"},\\\"plot\\\"),steps:g,threshold:{line:{color:n({},p.line.color,{}),width:n({},p.line.width,{dflt:1}),editType:\\\"plot\\\"},thickness:n({},p.thickness,{dflt:.85}),value:{valType:\\\"number\\\",editType:\\\"calc\\\",dflt:!1},editType:\\\"plot\\\"},editType:\\\"plot\\\"}}},{\\\"../../components/color/attributes\\\":592,\\\"../../constants/delta.js\\\":689,\\\"../../constants/docs\\\":690,\\\"../../lib/extend\\\":710,\\\"../../plot_api/edit_types\\\":750,\\\"../../plot_api/plot_template\\\":757,\\\"../../plots/cartesian/layout_attributes\\\":779,\\\"../../plots/domain\\\":792,\\\"../../plots/font_attributes\\\":793}],1042:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../plots/get_data\\\").getModuleCalcData,a=r.name=\\\"indicator\\\";r.plot=function(t,e,r,o){var s=n.getModule(a),l=i(t.calcdata,s)[0];s.plot(t,l,r,o)},r.clean=function(t,e,r,n){var i=n._has&&n._has(a),o=e._has&&e._has(a);i&&!o&&n._indicatorlayer.selectAll(\\\"g.trace\\\").remove()}},{\\\"../../plots/get_data\\\":802,\\\"../../registry\\\":847}],1043:[function(t,e,r){\\\"use strict\\\";e.exports={calc:function(t,e){var r=[],n=e.value;\\\"number\\\"!=typeof e._lastValue&&(e._lastValue=e.value);var i=e._lastValue,a=i;return e._hasDelta&&\\\"number\\\"==typeof e.delta.reference&&(a=e.delta.reference),r[0]={y:n,lastY:i,delta:n-a,relativeDelta:(n-a)/a},r}}},{}],1044:[function(t,e,r){\\\"use strict\\\";e.exports={defaultNumberFontSize:80,bulletNumberDomainSize:.25,bulletPadding:.025,innerRadius:.75,valueThickness:.5,titlePadding:5,horizontalPadding:10}},{}],1045:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./attributes\\\"),a=t(\\\"../../plots/domain\\\").defaults,o=t(\\\"../../plot_api/plot_template\\\"),s=t(\\\"../../plots/array_container_defaults\\\"),l=t(\\\"./constants.js\\\"),c=t(\\\"../../plots/cartesian/tick_value_defaults\\\"),u=t(\\\"../../plots/cartesian/tick_mark_defaults\\\"),h=t(\\\"../../plots/cartesian/tick_label_defaults\\\");function f(t,e){function r(r,a){return n.coerce(t,e,i.gauge.steps,r,a)}r(\\\"color\\\"),r(\\\"line.color\\\"),r(\\\"line.width\\\"),r(\\\"range\\\"),r(\\\"thickness\\\")}e.exports={supplyDefaults:function(t,e,r,p){function d(r,a){return n.coerce(t,e,i,r,a)}a(e,p,d),d(\\\"mode\\\"),e._hasNumber=-1!==e.mode.indexOf(\\\"number\\\"),e._hasDelta=-1!==e.mode.indexOf(\\\"delta\\\"),e._hasGauge=-1!==e.mode.indexOf(\\\"gauge\\\");var g=d(\\\"value\\\");e._range=[0,\\\"number\\\"==typeof g?1.5*g:1];var v,m,y,x,b,_,w=new Array(2);function k(t,e){return n.coerce(y,x,i.gauge,t,e)}function T(t,e){return n.coerce(b,_,i.gauge.axis,t,e)}if(e._hasNumber&&(d(\\\"number.valueformat\\\"),d(\\\"number.font.color\\\",p.font.color),d(\\\"number.font.family\\\",p.font.family),d(\\\"number.font.size\\\"),void 0===e.number.font.size&&(e.number.font.size=l.defaultNumberFontSize,w[0]=!0),d(\\\"number.prefix\\\"),d(\\\"number.suffix\\\"),v=e.number.font.size),e._hasDelta&&(d(\\\"delta.font.color\\\",p.font.color),d(\\\"delta.font.family\\\",p.font.family),d(\\\"delta.font.size\\\"),void 0===e.delta.font.size&&(e.delta.font.size=(e._hasNumber?.5:1)*(v||l.defaultNumberFontSize),w[1]=!0),d(\\\"delta.reference\\\",e.value),d(\\\"delta.relative\\\"),d(\\\"delta.valueformat\\\",e.delta.relative?\\\"2%\\\":\\\"\\\"),d(\\\"delta.increasing.symbol\\\"),d(\\\"delta.increasing.color\\\"),d(\\\"delta.decreasing.symbol\\\"),d(\\\"delta.decreasing.color\\\"),d(\\\"delta.position\\\"),m=e.delta.font.size),e._scaleNumbers=(!e._hasNumber||w[0])&&(!e._hasDelta||w[1])||!1,d(\\\"title.font.color\\\",p.font.color),d(\\\"title.font.family\\\",p.font.family),d(\\\"title.font.size\\\",.25*(v||m||l.defaultNumberFontSize)),d(\\\"title.text\\\"),e._hasGauge){(y=t.gauge)||(y={}),x=o.newContainer(e,\\\"gauge\\\"),k(\\\"shape\\\"),(e._isBullet=\\\"bullet\\\"===e.gauge.shape)||d(\\\"title.align\\\",\\\"center\\\"),(e._isAngular=\\\"angular\\\"===e.gauge.shape)||d(\\\"align\\\",\\\"center\\\"),k(\\\"bgcolor\\\",p.paper_bgcolor),k(\\\"borderwidth\\\"),k(\\\"bordercolor\\\"),k(\\\"bar.color\\\"),k(\\\"bar.line.color\\\"),k(\\\"bar.line.width\\\"),k(\\\"bar.thickness\\\",l.valueThickness*(\\\"bullet\\\"===e.gauge.shape?.5:1)),s(y,x,{name:\\\"steps\\\",handleItemDefaults:f}),k(\\\"threshold.value\\\"),k(\\\"threshold.thickness\\\"),k(\\\"threshold.line.width\\\"),k(\\\"threshold.line.color\\\"),b={},y&&(b=y.axis||{}),_=o.newContainer(x,\\\"axis\\\"),T(\\\"visible\\\"),e._range=T(\\\"range\\\",e._range);var A={outerTicks:!0};c(b,_,T,\\\"linear\\\"),h(b,_,T,\\\"linear\\\",A),u(b,_,T,A)}else d(\\\"title.align\\\",\\\"center\\\"),d(\\\"align\\\",\\\"center\\\"),e._isAngular=e._isBullet=!1;e._length=null}}},{\\\"../../lib\\\":719,\\\"../../plot_api/plot_template\\\":757,\\\"../../plots/array_container_defaults\\\":763,\\\"../../plots/cartesian/tick_label_defaults\\\":786,\\\"../../plots/cartesian/tick_mark_defaults\\\":787,\\\"../../plots/cartesian/tick_value_defaults\\\":788,\\\"../../plots/domain\\\":792,\\\"./attributes\\\":1041,\\\"./constants.js\\\":1044}],1046:[function(t,e,r){\\\"use strict\\\";e.exports={moduleType:\\\"trace\\\",name:\\\"indicator\\\",basePlotModule:t(\\\"./base_plot\\\"),categories:[\\\"svg\\\",\\\"noOpacity\\\",\\\"noHover\\\"],animatable:!0,attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\").supplyDefaults,calc:t(\\\"./calc\\\").calc,plot:t(\\\"./plot\\\"),meta:{}}},{\\\"./attributes\\\":1041,\\\"./base_plot\\\":1042,\\\"./calc\\\":1043,\\\"./defaults\\\":1045,\\\"./plot\\\":1047}],1047:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../lib\\\"),a=i.rad2deg,o=t(\\\"../../constants/alignment\\\").MID_SHIFT,s=t(\\\"../../components/drawing\\\"),l=t(\\\"./constants\\\"),c=t(\\\"../../lib/svg_text_utils\\\"),u=t(\\\"../../plots/cartesian/axes\\\"),h=t(\\\"../../plots/cartesian/axis_defaults\\\"),f=t(\\\"../../plots/cartesian/position_defaults\\\"),p=t(\\\"../../plots/cartesian/layout_attributes\\\"),d=t(\\\"../../components/color\\\"),g={left:\\\"start\\\",center:\\\"middle\\\",right:\\\"end\\\"},v={left:0,center:.5,right:1},m=/[yzafpn\\\\xb5mkMGTPEZY]/;function y(t){return t&&t.duration>0}function x(t){t.each(function(t){d.stroke(n.select(this),t.line.color)}).each(function(t){d.fill(n.select(this),t.color)}).style(\\\"stroke-width\\\",function(t){return t.line.width})}function b(t,e,r){var n=t._fullLayout,a=i.extendFlat({type:\\\"linear\\\",ticks:\\\"outside\\\",range:r,showline:!0},e),o={type:\\\"linear\\\",_id:\\\"x\\\"+e._id},s={letter:\\\"x\\\",font:n.font,noHover:!0,noTickson:!0};function l(t,e){return i.coerce(a,o,p,t,e)}return h(a,o,l,s,n),f(a,o,l,s),o}function _(t,e){return\\\"translate(\\\"+t+\\\",\\\"+e+\\\")\\\"}function w(t,e,r){return[Math.min(e/t.width,r/t.height),t,e+\\\"x\\\"+r]}function k(t,e,r,i){var a=document.createElementNS(\\\"http://www.w3.org/2000/svg\\\",\\\"text\\\"),o=n.select(a);return o.text(t).attr(\\\"x\\\",0).attr(\\\"y\\\",0).attr(\\\"text-anchor\\\",r).attr(\\\"data-unformatted\\\",t).call(c.convertToTspans,i).call(s.font,e),s.bBox(o.node())}function T(t,e,r,n,a,o){var s=\\\"_cache\\\"+e;t[s]&&t[s].key===a||(t[s]={key:a,value:r});var l=i.aggNums(o,null,[t[s].value,n],2);return t[s].value=l,l}e.exports=function(t,e,r,h){var f,p=t._fullLayout;y(r)&&h&&(f=h()),i.makeTraceGroups(p._indicatorlayer,e,\\\"trace\\\").each(function(e){var h,A,M,S,E,C=e[0].trace,L=n.select(this),P=C._hasGauge,O=C._isAngular,z=C._isBullet,I=C.domain,D={w:p._size.w*(I.x[1]-I.x[0]),h:p._size.h*(I.y[1]-I.y[0]),l:p._size.l+p._size.w*I.x[0],r:p._size.r+p._size.w*(1-I.x[1]),t:p._size.t+p._size.h*(1-I.y[1]),b:p._size.b+p._size.h*I.y[0]},R=D.l+D.w/2,F=D.t+D.h/2,B=Math.min(D.w/2,D.h),N=l.innerRadius*B,j=C.align||\\\"center\\\";if(A=F,P){if(O&&(h=R,A=F+B/2,M=function(t){return e=t,r=.9*N,n=Math.sqrt(e.width/2*(e.width/2)+e.height*e.height),[r/n,e,r];var e,r,n}),z){var U=l.bulletPadding,V=1-l.bulletNumberDomainSize+U;h=D.l+(V+(1-V)*v[j])*D.w,M=function(t){return w(t,(l.bulletNumberDomainSize-U)*D.w,D.h)}}}else h=D.l+v[j]*D.w,M=function(t){return w(t,D.w,D.h)};!function(t,e,r,a){var o,l,h,f=r[0].trace,p=a.numbersX,x=a.numbersY,w=f.align||\\\"center\\\",A=g[w],M=a.transitionOpts,S=a.onComplete,E=i.ensureSingle(e,\\\"g\\\",\\\"numbers\\\"),C=[];f._hasNumber&&C.push(\\\"number\\\");f._hasDelta&&(C.push(\\\"delta\\\"),\\\"left\\\"===f.delta.position&&C.reverse());var L=E.selectAll(\\\"text\\\").data(C);function P(e,r,n,i){if(!e.match(\\\"s\\\")||n>=0==i>=0||r(n).slice(-1).match(m)||r(i).slice(-1).match(m))return r;var a=e.slice().replace(\\\"s\\\",\\\"f\\\").replace(/\\\\d+/,function(t){return parseInt(t)-1}),o=b(t,{tickformat:a});return function(t){return Math.abs(t)<1?u.tickText(o,t).text:r(t)}}L.enter().append(\\\"text\\\"),L.attr(\\\"text-anchor\\\",function(){return A}).attr(\\\"class\\\",function(t){return t}).attr(\\\"x\\\",null).attr(\\\"y\\\",null).attr(\\\"dx\\\",null).attr(\\\"dy\\\",null),L.exit().remove();var O,z=f.mode+f.align;f._hasDelta&&(O=function(){var e=b(t,{tickformat:f.delta.valueformat},f._range);e.setScale(),u.prepTicks(e);var i=function(t){return u.tickText(e,t).text},a=function(t){var e=f.delta.relative?t.relativeDelta:t.delta;return e},o=function(t,e){return 0===t||\\\"number\\\"!=typeof t||isNaN(t)?\\\"-\\\":(t>0?f.delta.increasing.symbol:f.delta.decreasing.symbol)+e(t)},h=function(t){return t.delta>=0?f.delta.increasing.color:f.delta.decreasing.color};void 0===f._deltaLastValue&&(f._deltaLastValue=a(r[0]));var p=E.select(\\\"text.delta\\\");function g(){p.text(o(a(r[0]),i)).call(d.fill,h(r[0])).call(c.convertToTspans,t)}p.call(s.font,f.delta.font).call(d.fill,h({delta:f._deltaLastValue})),y(M)?p.transition().duration(M.duration).ease(M.easing).tween(\\\"text\\\",function(){var t=n.select(this),e=a(r[0]),s=f._deltaLastValue,l=P(f.delta.valueformat,i,s,e),c=n.interpolateNumber(s,e);return f._deltaLastValue=e,function(e){t.text(o(c(e),l)),t.call(d.fill,h({delta:c(e)}))}}).each(\\\"end\\\",function(){g(),S&&S()}).each(\\\"interrupt\\\",function(){g(),S&&S()}):g();return l=k(o(a(r[0]),i),f.delta.font,A,t),p}(),z+=f.delta.position+f.delta.font.size+f.delta.font.family+f.delta.valueformat,z+=f.delta.increasing.symbol+f.delta.decreasing.symbol,h=l);f._hasNumber&&(!function(){var e=b(t,{tickformat:f.number.valueformat},f._range);e.setScale(),u.prepTicks(e);var i=function(t){return u.tickText(e,t).text},a=f.number.suffix,l=f.number.prefix,h=E.select(\\\"text.number\\\");function p(){var e=\\\"number\\\"==typeof r[0].y?l+i(r[0].y)+a:\\\"-\\\";h.text(e).call(s.font,f.number.font).call(c.convertToTspans,t)}y(M)?h.transition().duration(M.duration).ease(M.easing).each(\\\"end\\\",function(){p(),S&&S()}).each(\\\"interrupt\\\",function(){p(),S&&S()}).attrTween(\\\"text\\\",function(){var t=n.select(this),e=n.interpolateNumber(r[0].lastY,r[0].y);f._lastValue=r[0].y;var o=P(f.number.valueformat,i,r[0].lastY,r[0].y);return function(r){t.text(l+o(e(r))+a)}}):p();o=k(l+i(r[0].y)+a,f.number.font,A,t)}(),z+=f.number.font.size+f.number.font.family+f.number.valueformat+f.number.suffix+f.number.prefix,h=o);if(f._hasDelta&&f._hasNumber){var I,D,R=[(o.left+o.right)/2,(o.top+o.bottom)/2],F=[(l.left+l.right)/2,(l.top+l.bottom)/2],B=.75*f.delta.font.size;\\\"left\\\"===f.delta.position&&(I=T(f,\\\"deltaPos\\\",0,-1*(o.width*v[f.align]+l.width*(1-v[f.align])+B),z,Math.min),D=R[1]-F[1],h={width:o.width+l.width+B,height:Math.max(o.height,l.height),left:l.left+I,right:o.right,top:Math.min(o.top,l.top+D),bottom:Math.max(o.bottom,l.bottom+D)}),\\\"right\\\"===f.delta.position&&(I=T(f,\\\"deltaPos\\\",0,o.width*(1-v[f.align])+l.width*v[f.align]+B,z,Math.max),D=R[1]-F[1],h={width:o.width+l.width+B,height:Math.max(o.height,l.height),left:o.left,right:l.right+I,top:Math.min(o.top,l.top+D),bottom:Math.max(o.bottom,l.bottom+D)}),\\\"bottom\\\"===f.delta.position&&(I=null,D=l.height,h={width:Math.max(o.width,l.width),height:o.height+l.height,left:Math.min(o.left,l.left),right:Math.max(o.right,l.right),top:o.bottom-o.height,bottom:o.bottom+l.height}),\\\"top\\\"===f.delta.position&&(I=null,D=o.top,h={width:Math.max(o.width,l.width),height:o.height+l.height,left:Math.min(o.left,l.left),right:Math.max(o.right,l.right),top:o.bottom-o.height-l.height,bottom:o.bottom}),O.attr({dx:I,dy:D})}(f._hasNumber||f._hasDelta)&&E.attr(\\\"transform\\\",function(){var t=a.numbersScaler(h);z+=t[2];var e,r=T(f,\\\"numbersScale\\\",1,t[0],z,Math.min);f._scaleNumbers||(r=1),e=f._isAngular?x-r*h.bottom:x-r*(h.top+h.bottom)/2,f._numbersTop=r*h.top+e;var n=h[w];\\\"center\\\"===w&&(n=(h.left+h.right)/2);var i=p-r*n;return _(i=T(f,\\\"numbersTranslate\\\",0,i,z,Math.max),e)+\\\" scale(\\\"+r+\\\")\\\"})}(t,L,e,{numbersX:h,numbersY:A,numbersScaler:M,transitionOpts:r,onComplete:f}),P&&(S={range:C.gauge.axis.range,color:C.gauge.bgcolor,line:{color:C.gauge.bordercolor,width:0},thickness:1},E={range:C.gauge.axis.range,color:\\\"rgba(0, 0, 0, 0)\\\",line:{color:C.gauge.bordercolor,width:C.gauge.borderwidth},thickness:1});var q=L.selectAll(\\\"g.angular\\\").data(O?e:[]);q.exit().remove();var H=L.selectAll(\\\"g.angularaxis\\\").data(O?e:[]);H.exit().remove(),O&&function(t,e,r,i){var s,l,c,h,f=r[0].trace,p=i.size,d=i.radius,g=i.innerRadius,v=i.gaugeBg,m=i.gaugeOutline,w=[p.l+p.w/2,p.t+p.h/2+d/2],k=i.gauge,T=i.layer,A=i.transitionOpts,M=i.onComplete,S=Math.PI/2;function E(t){var e=f.gauge.axis.range[0],r=f.gauge.axis.range[1],n=(t-e)/(r-e)*Math.PI-S;return n<-S?-S:n>S?S:n}function C(t){return n.svg.arc().innerRadius((g+d)/2-t/2*(d-g)).outerRadius((g+d)/2+t/2*(d-g)).startAngle(-S)}function L(t){t.attr(\\\"d\\\",function(t){return C(t.thickness).startAngle(E(t.range[0])).endAngle(E(t.range[1]))()})}k.enter().append(\\\"g\\\").classed(\\\"angular\\\",!0),k.attr(\\\"transform\\\",_(w[0],w[1])),T.enter().append(\\\"g\\\").classed(\\\"angularaxis\\\",!0).classed(\\\"crisp\\\",!0),T.selectAll(\\\"g.xangularaxistick,path,text\\\").remove(),(s=b(t,f.gauge.axis)).type=\\\"linear\\\",s.range=f.gauge.axis.range,s._id=\\\"xangularaxis\\\",s.setScale();var P=function(t){return(s.range[0]-t.x)/(s.range[1]-s.range[0])*Math.PI+Math.PI},O={},z=u.makeLabelFns(s,0).labelStandoff;O.xFn=function(t){var e=P(t);return Math.cos(e)*z},O.yFn=function(t){var e=P(t),r=Math.sin(e)>0?.2:1;return-Math.sin(e)*(z+t.fontSize*r)+Math.abs(Math.cos(e))*(t.fontSize*o)},O.anchorFn=function(t){var e=P(t),r=Math.cos(e);return Math.abs(r)<.1?\\\"middle\\\":r>0?\\\"start\\\":\\\"end\\\"},O.heightFn=function(t,e,r){var n=P(t);return-.5*(1+Math.sin(n))*r};var I=function(t){return _(w[0]+d*Math.cos(t),w[1]-d*Math.sin(t))};c=function(t){return I(P(t))};if(l=u.calcTicks(s),h=u.getTickSigns(s)[2],s.visible){h=\\\"inside\\\"===s.ticks?-1:1;var D=(s.linewidth||1)/2;u.drawTicks(t,s,{vals:l,layer:T,path:\\\"M\\\"+h*D+\\\",0h\\\"+h*s.ticklen,transFn:function(t){var e=P(t);return I(e)+\\\"rotate(\\\"+-a(e)+\\\")\\\"}}),u.drawLabels(t,s,{vals:l,layer:T,transFn:c,labelFns:O})}var R=[v].concat(f.gauge.steps),F=k.selectAll(\\\"g.bg-arc\\\").data(R);F.enter().append(\\\"g\\\").classed(\\\"bg-arc\\\",!0).append(\\\"path\\\"),F.select(\\\"path\\\").call(L).call(x),F.exit().remove();var B=C(f.gauge.bar.thickness),N=k.selectAll(\\\"g.value-arc\\\").data([f.gauge.bar]);N.enter().append(\\\"g\\\").classed(\\\"value-arc\\\",!0).append(\\\"path\\\");var j=N.select(\\\"path\\\");y(A)?(j.transition().duration(A.duration).ease(A.easing).each(\\\"end\\\",function(){M&&M()}).each(\\\"interrupt\\\",function(){M&&M()}).attrTween(\\\"d\\\",(U=B,V=E(r[0].lastY),q=E(r[0].y),function(){var t=n.interpolate(V,q);return function(e){return U.endAngle(t(e))()}})),f._lastValue=r[0].y):j.attr(\\\"d\\\",\\\"number\\\"==typeof r[0].y?B.endAngle(E(r[0].y)):\\\"M0,0Z\\\");var U,V,q;j.call(x),N.exit().remove(),R=[];var H=f.gauge.threshold.value;H&&R.push({range:[H,H],color:f.gauge.threshold.color,line:{color:f.gauge.threshold.line.color,width:f.gauge.threshold.line.width},thickness:f.gauge.threshold.thickness});var G=k.selectAll(\\\"g.threshold-arc\\\").data(R);G.enter().append(\\\"g\\\").classed(\\\"threshold-arc\\\",!0).append(\\\"path\\\"),G.select(\\\"path\\\").call(L).call(x),G.exit().remove();var Y=k.selectAll(\\\"g.gauge-outline\\\").data([m]);Y.enter().append(\\\"g\\\").classed(\\\"gauge-outline\\\",!0).append(\\\"path\\\"),Y.select(\\\"path\\\").call(L).call(x),Y.exit().remove()}(t,0,e,{radius:B,innerRadius:N,gauge:q,layer:H,size:D,gaugeBg:S,gaugeOutline:E,transitionOpts:r,onComplete:f});var G=L.selectAll(\\\"g.bullet\\\").data(z?e:[]);G.exit().remove();var Y=L.selectAll(\\\"g.bulletaxis\\\").data(z?e:[]);Y.exit().remove(),z&&function(t,e,r,n){var i,a,o,s,c,h=r[0].trace,f=n.gauge,p=n.layer,g=n.gaugeBg,v=n.gaugeOutline,m=n.size,_=h.domain,w=n.transitionOpts,k=n.onComplete;f.enter().append(\\\"g\\\").classed(\\\"bullet\\\",!0),f.attr(\\\"transform\\\",\\\"translate(\\\"+m.l+\\\", \\\"+m.t+\\\")\\\"),p.enter().append(\\\"g\\\").classed(\\\"bulletaxis\\\",!0).classed(\\\"crisp\\\",!0),p.selectAll(\\\"g.xbulletaxistick,path,text\\\").remove();var T=m.h,A=h.gauge.bar.thickness*T,M=_.x[0],S=_.x[0]+(_.x[1]-_.x[0])*(h._hasNumber||h._hasDelta?1-l.bulletNumberDomainSize:1);(i=b(t,h.gauge.axis))._id=\\\"xbulletaxis\\\",i.domain=[M,S],i.setScale(),a=u.calcTicks(i),o=u.makeTransFn(i),s=u.getTickSigns(i)[2],c=m.t+m.h,i.visible&&(u.drawTicks(t,i,{vals:\\\"inside\\\"===i.ticks?u.clipEnds(i,a):a,layer:p,path:u.makeTickPath(i,c,s),transFn:o}),u.drawLabels(t,i,{vals:a,layer:p,transFn:o,labelFns:u.makeLabelFns(i,c)}));function E(t){t.attr(\\\"width\\\",function(t){return Math.max(0,i.c2p(t.range[1])-i.c2p(t.range[0]))}).attr(\\\"x\\\",function(t){return i.c2p(t.range[0])}).attr(\\\"y\\\",function(t){return.5*(1-t.thickness)*T}).attr(\\\"height\\\",function(t){return t.thickness*T})}var C=[g].concat(h.gauge.steps),L=f.selectAll(\\\"g.bg-bullet\\\").data(C);L.enter().append(\\\"g\\\").classed(\\\"bg-bullet\\\",!0).append(\\\"rect\\\"),L.select(\\\"rect\\\").call(E).call(x),L.exit().remove();var P=f.selectAll(\\\"g.value-bullet\\\").data([h.gauge.bar]);P.enter().append(\\\"g\\\").classed(\\\"value-bullet\\\",!0).append(\\\"rect\\\"),P.select(\\\"rect\\\").attr(\\\"height\\\",A).attr(\\\"y\\\",(T-A)/2).call(x),y(w)?P.select(\\\"rect\\\").transition().duration(w.duration).ease(w.easing).each(\\\"end\\\",function(){k&&k()}).each(\\\"interrupt\\\",function(){k&&k()}).attr(\\\"width\\\",Math.max(0,i.c2p(Math.min(h.gauge.axis.range[1],r[0].y)))):P.select(\\\"rect\\\").attr(\\\"width\\\",\\\"number\\\"==typeof r[0].y?Math.max(0,i.c2p(Math.min(h.gauge.axis.range[1],r[0].y))):0);P.exit().remove();var O=r.filter(function(){return h.gauge.threshold.value}),z=f.selectAll(\\\"g.threshold-bullet\\\").data(O);z.enter().append(\\\"g\\\").classed(\\\"threshold-bullet\\\",!0).append(\\\"line\\\"),z.select(\\\"line\\\").attr(\\\"x1\\\",i.c2p(h.gauge.threshold.value)).attr(\\\"x2\\\",i.c2p(h.gauge.threshold.value)).attr(\\\"y1\\\",(1-h.gauge.threshold.thickness)/2*T).attr(\\\"y2\\\",(1-(1-h.gauge.threshold.thickness)/2)*T).call(d.stroke,h.gauge.threshold.line.color).style(\\\"stroke-width\\\",h.gauge.threshold.line.width),z.exit().remove();var I=f.selectAll(\\\"g.gauge-outline\\\").data([v]);I.enter().append(\\\"g\\\").classed(\\\"gauge-outline\\\",!0).append(\\\"rect\\\"),I.select(\\\"rect\\\").call(E).call(x),I.exit().remove()}(t,0,e,{gauge:G,layer:Y,size:D,gaugeBg:S,gaugeOutline:E,transitionOpts:r,onComplete:f});var W=L.selectAll(\\\"text.title\\\").data(e);W.exit().remove(),W.enter().append(\\\"text\\\").classed(\\\"title\\\",!0),W.attr(\\\"text-anchor\\\",function(){return z?g.right:g[C.title.align]}).text(C.title.text).call(s.font,C.title.font).call(c.convertToTspans,t),W.attr(\\\"transform\\\",function(){var t,e=D.l+D.w*v[C.title.align],r=l.titlePadding,n=s.bBox(W.node());if(P){if(O)if(C.gauge.axis.visible)t=s.bBox(H.node()).top-r-n.bottom;else t=D.t+D.h/2-B/2-n.bottom-r;z&&(t=A-(n.top+n.bottom)/2,e=D.l-l.bulletPadding*D.w)}else t=C._numbersTop-r-n.bottom;return _(e,t)})})}},{\\\"../../components/color\\\":593,\\\"../../components/drawing\\\":614,\\\"../../constants/alignment\\\":688,\\\"../../lib\\\":719,\\\"../../lib/svg_text_utils\\\":743,\\\"../../plots/cartesian/axes\\\":767,\\\"../../plots/cartesian/axis_defaults\\\":769,\\\"../../plots/cartesian/layout_attributes\\\":779,\\\"../../plots/cartesian/position_defaults\\\":782,\\\"./constants\\\":1044,d3:163}],1048:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/colorscale/attributes\\\"),i=t(\\\"../../components/fx/hovertemplate_attributes\\\"),a=t(\\\"../mesh3d/attributes\\\"),o=t(\\\"../../plots/attributes\\\"),s=t(\\\"../../lib/extend\\\").extendFlat,l=t(\\\"../../plot_api/edit_types\\\").overrideAll;var c=e.exports=l(s({x:{valType:\\\"data_array\\\"},y:{valType:\\\"data_array\\\"},z:{valType:\\\"data_array\\\"},value:{valType:\\\"data_array\\\"},isomin:{valType:\\\"number\\\"},isomax:{valType:\\\"number\\\"},surface:{show:{valType:\\\"boolean\\\",dflt:!0},count:{valType:\\\"integer\\\",dflt:2,min:1},fill:{valType:\\\"number\\\",min:0,max:1,dflt:1},pattern:{valType:\\\"flaglist\\\",flags:[\\\"A\\\",\\\"B\\\",\\\"C\\\",\\\"D\\\",\\\"E\\\"],extras:[\\\"all\\\",\\\"odd\\\",\\\"even\\\"],dflt:\\\"all\\\"}},spaceframe:{show:{valType:\\\"boolean\\\",dflt:!1},fill:{valType:\\\"number\\\",min:0,max:1,dflt:.15}},slices:{x:{show:{valType:\\\"boolean\\\",dflt:!1},locations:{valType:\\\"data_array\\\",dflt:[]},fill:{valType:\\\"number\\\",min:0,max:1,dflt:1}},y:{show:{valType:\\\"boolean\\\",dflt:!1},locations:{valType:\\\"data_array\\\",dflt:[]},fill:{valType:\\\"number\\\",min:0,max:1,dflt:1}},z:{show:{valType:\\\"boolean\\\",dflt:!1},locations:{valType:\\\"data_array\\\",dflt:[]},fill:{valType:\\\"number\\\",min:0,max:1,dflt:1}}},caps:{x:{show:{valType:\\\"boolean\\\",dflt:!0},fill:{valType:\\\"number\\\",min:0,max:1,dflt:1}},y:{show:{valType:\\\"boolean\\\",dflt:!0},fill:{valType:\\\"number\\\",min:0,max:1,dflt:1}},z:{show:{valType:\\\"boolean\\\",dflt:!0},fill:{valType:\\\"number\\\",min:0,max:1,dflt:1}}},text:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0},hovertext:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0},hovertemplate:i()},n(\\\"\\\",{colorAttr:\\\"`value`\\\",showScaleDflt:!0,editTypeOverride:\\\"calc\\\"}),{opacity:a.opacity,lightposition:a.lightposition,lighting:a.lighting,flatshading:a.flatshading,contour:a.contour,hoverinfo:s({},o.hoverinfo)}),\\\"calc\\\",\\\"nested\\\");c.flatshading.dflt=!0,c.lighting.facenormalsepsilon.dflt=0,c.x.editType=c.y.editType=c.z.editType=c.value.editType=\\\"calc+clearAxisTypes\\\",c.transforms=void 0},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../../plot_api/edit_types\\\":750,\\\"../../plots/attributes\\\":764,\\\"../mesh3d/attributes\\\":1053}],1049:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/colorscale/calc\\\");e.exports=function(t,e){e._len=Math.min(e.x.length,e.y.length,e.z.length,e.value.length);for(var r=1/0,i=-1/0,a=e.value.length,o=0;o<a;o++){var s=e.value[o];r=Math.min(r,s),i=Math.max(i,s)}e._minValues=r,e._maxValues=i,e._vMin=void 0===e.isomin||null===e.isomin?r:e.isomin,e._vMax=void 0===e.isomax||null===e.isomin?i:e.isomax,n(t,e,{vals:[e._vMin,e._vMax],containerStr:\\\"\\\",cLetter:\\\"c\\\"})}},{\\\"../../components/colorscale/calc\\\":601}],1050:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"gl-mesh3d\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../lib/gl_format_color\\\").parseColorScale,o=t(\\\"../../lib/str2rgbarray\\\"),s=t(\\\"../../components/colorscale\\\").extractOpts,l=t(\\\"../../plots/gl3d/zip3\\\");function c(t){return i.distinctVals(t).vals}var u=function(t,e){for(var r=e.length-1;r>0;r--){var n=Math.min(e[r],e[r-1]),i=Math.max(e[r],e[r-1]);if(i>n&&n<t&&t<=i)return{id:r,distRatio:(i-t)/(i-n)}}return{id:0,distRatio:0}};function h(t,e,r){this.scene=t,this.uid=r,this.mesh=e,this.name=\\\"\\\",this.data=null,this.showContour=!1}var f=h.prototype;function p(t){t._i=[],t._j=[],t._k=[];var e,r,n=t.surface.show,i=t.spaceframe.show,a=t.surface.fill,o=t.spaceframe.fill,s=!1,l=!1,h=0,f=c(t.x.slice(0,t._len)),p=c(t.y.slice(0,t._len)),d=c(t.z.slice(0,t._len)),g=f.length,v=p.length,m=d.length;function y(t,e,r){return r+m*e+m*v*t}var x,b,_,w,k,T=t._minValues,A=t._maxValues,M=t._vMin,S=t._vMax;function E(t,e,n){for(var i=w.length,a=r;a<i;a++)if(t===x[a]&&e===b[a]&&n===_[a])return a;return-1}function C(){r=e}function L(){x=[],b=[],_=[],w=[],e=0,C()}function P(t,r,n,i){return x.push(t),b.push(r),_.push(n),w.push(i),++e-1}function O(t,e,r){for(var n=[],i=0;i<t.length;i++)n[i]=t[i]*(1-r)+r*e[i];return n}function z(t){k=t}function I(t,e){return\\\"all\\\"===t||null===t||t.indexOf(e)>-1}function D(t,e){return null===t?e:t}function R(e,r,n){C();var i,a,o,s=[r],l=[n];if(k>=1)s=[r],l=[n];else if(k>0){var c=function(t,e){var r=t[0],n=t[1],i=t[2],a=function(t,e,r){for(var n=[],i=0;i<t.length;i++)n[i]=(t[i]+e[i]+r[i])/3;return n}(r,n,i),o=Math.sqrt(1-k),s=O(a,r,o),l=O(a,n,o),c=O(a,i,o),u=e[0],h=e[1],f=e[2];return{xyzv:[[r,n,l],[l,s,r],[n,i,c],[c,l,n],[i,r,s],[s,c,i]],abc:[[u,h,-1],[-1,-1,u],[h,f,-1],[-1,-1,h],[f,u,-1],[-1,-1,f]]}}(r,n);s=c.xyzv,l=c.abc}for(var u=0;u<s.length;u++){r=s[u],n=l[u];for(var f=[],p=0;p<3;p++){var d=r[p][0],g=r[p][1],v=r[p][2],m=r[p][3],y=n[p]>-1?n[p]:E(d,g,v);f[p]=y>-1?y:P(d,g,v,D(e,m))}i=f[0],a=f[1],o=f[2],t._i.push(i),t._j.push(a),t._k.push(o),++h}}function F(t,e,r,n){var i=t[3];i<r&&(i=r),i>n&&(i=n);for(var a=(t[3]-i)/(t[3]-e[3]+1e-9),o=[],s=0;s<4;s++)o[s]=(1-a)*t[s]+a*e[s];return o}function B(t,e,r){return t>=e&&t<=r}function N(t){var e=.001*(S-M);return t>=M-e&&t<=S+e}function j(e){for(var r=[],n=0;n<4;n++){var i=e[n];r.push([t.x[i],t.y[i],t.z[i],t.value[i]])}return r}var U=3;function V(t,e,r,n,i,a){a||(a=1),r=[-1,-1,-1];var o=!1,s=[B(e[0][3],n,i),B(e[1][3],n,i),B(e[2][3],n,i)];if(!s[0]&&!s[1]&&!s[2])return!1;var l=function(t,e,r){return N(e[0][3])&&N(e[1][3])&&N(e[2][3])?(R(t,e,r),!0):a<U&&V(t,e,r,M,S,++a)};if(s[0]&&s[1]&&s[2])return l(t,e,r)||o;var c=!1;return[[0,1,2],[2,0,1],[1,2,0]].forEach(function(a){if(s[a[0]]&&s[a[1]]&&!s[a[2]]){var u=e[a[0]],h=e[a[1]],f=e[a[2]],p=F(f,u,n,i),d=F(f,h,n,i);o=l(t,[d,p,u],[-1,-1,r[a[0]]])||o,o=l(t,[u,h,d],[r[a[0]],r[a[1]],-1])||o,c=!0}}),c?o:([[0,1,2],[1,2,0],[2,0,1]].forEach(function(a){if(s[a[0]]&&!s[a[1]]&&!s[a[2]]){var u=e[a[0]],h=e[a[1]],f=e[a[2]],p=F(h,u,n,i),d=F(f,u,n,i);o=l(t,[d,p,u],[-1,-1,r[a[0]]])||o,c=!0}}),o)}function q(t,e,r,n){var i=!1,a=j(e),o=[B(a[0][3],r,n),B(a[1][3],r,n),B(a[2][3],r,n),B(a[3][3],r,n)];if(!(o[0]||o[1]||o[2]||o[3]))return i;if(o[0]&&o[1]&&o[2]&&o[3])return l&&(i=function(t,e,r){var n=function(n,i,a){R(t,[e[n],e[i],e[a]],[r[n],r[i],r[a]])};n(0,1,2),n(3,0,1),n(2,3,0),n(1,2,3)}(t,a,e)||i),i;var s=!1;return[[0,1,2,3],[3,0,1,2],[2,3,0,1],[1,2,3,0]].forEach(function(c){if(o[c[0]]&&o[c[1]]&&o[c[2]]&&!o[c[3]]){var u=a[c[0]],h=a[c[1]],f=a[c[2]],p=a[c[3]];if(l)i=R(t,[u,h,f],[e[c[0]],e[c[1]],e[c[2]]])||i;else{var d=F(p,u,r,n),g=F(p,h,r,n),v=F(p,f,r,n);i=R(null,[d,g,v],[-1,-1,-1])||i}s=!0}}),s?i:([[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2],[0,2,3,1],[1,3,2,0]].forEach(function(c){if(o[c[0]]&&o[c[1]]&&!o[c[2]]&&!o[c[3]]){var u=a[c[0]],h=a[c[1]],f=a[c[2]],p=a[c[3]],d=F(f,u,r,n),g=F(f,h,r,n),v=F(p,h,r,n),m=F(p,u,r,n);l?(i=R(t,[u,m,d],[e[c[0]],-1,-1])||i,i=R(t,[h,g,v],[e[c[1]],-1,-1])||i):i=function(t,e,r){var n=function(n,i,a){R(t,[e[n],e[i],e[a]],[r[n],r[i],r[a]])};n(0,1,2),n(2,3,0)}(null,[d,g,v,m],[-1,-1,-1,-1])||i,s=!0}}),s?i:([[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2]].forEach(function(c){if(o[c[0]]&&!o[c[1]]&&!o[c[2]]&&!o[c[3]]){var u=a[c[0]],h=a[c[1]],f=a[c[2]],p=a[c[3]],d=F(h,u,r,n),g=F(f,u,r,n),v=F(p,u,r,n);l?(i=R(t,[u,d,g],[e[c[0]],-1,-1])||i,i=R(t,[u,g,v],[e[c[0]],-1,-1])||i,i=R(t,[u,v,d],[e[c[0]],-1,-1])||i):i=R(null,[d,g,v],[-1,-1,-1])||i,s=!0}}),i))}function H(t,e,r,n,i,a,o,c,u,h,f){var p=!1;return s&&(I(t,\\\"A\\\")&&(p=q(null,[e,r,n,a],h,f)||p),I(t,\\\"B\\\")&&(p=q(null,[r,n,i,u],h,f)||p),I(t,\\\"C\\\")&&(p=q(null,[r,a,o,u],h,f)||p),I(t,\\\"D\\\")&&(p=q(null,[n,a,c,u],h,f)||p),I(t,\\\"E\\\")&&(p=q(null,[r,n,a,u],h,f)||p)),l&&(p=q(t,[r,n,a,u],h,f)||p),p}function G(t,e,r,n,i,a,o,s){return[!0===s[0]||V(t,j([e,r,n]),[e,r,n],a,o),!0===s[1]||V(t,j([n,i,e]),[n,i,e],a,o)]}function Y(t,e,r,n,i,a,o,s,l){return s?G(t,e,r,i,n,a,o,l):G(t,r,i,n,e,a,o,l)}function W(t,e,r,n,i,a,o){var s,l,c,u,h=!1,f=function(){h=V(t,[s,l,c],[-1,-1,-1],i,a)||h,h=V(t,[c,u,s],[-1,-1,-1],i,a)||h},p=o[0],d=o[1],g=o[2];return p&&(s=O(j([y(e,r-0,n-0)])[0],j([y(e-1,r-0,n-0)])[0],p),l=O(j([y(e,r-0,n-1)])[0],j([y(e-1,r-0,n-1)])[0],p),c=O(j([y(e,r-1,n-1)])[0],j([y(e-1,r-1,n-1)])[0],p),u=O(j([y(e,r-1,n-0)])[0],j([y(e-1,r-1,n-0)])[0],p),f()),d&&(s=O(j([y(e-0,r,n-0)])[0],j([y(e-0,r-1,n-0)])[0],d),l=O(j([y(e-0,r,n-1)])[0],j([y(e-0,r-1,n-1)])[0],d),c=O(j([y(e-1,r,n-1)])[0],j([y(e-1,r-1,n-1)])[0],d),u=O(j([y(e-1,r,n-0)])[0],j([y(e-1,r-1,n-0)])[0],d),f()),g&&(s=O(j([y(e-0,r-0,n)])[0],j([y(e-0,r-0,n-1)])[0],g),l=O(j([y(e-0,r-1,n)])[0],j([y(e-0,r-1,n-1)])[0],g),c=O(j([y(e-1,r-1,n)])[0],j([y(e-1,r-1,n-1)])[0],g),u=O(j([y(e-1,r-0,n)])[0],j([y(e-1,r-0,n-1)])[0],g),f()),h}function X(t,e,r,n,i,a,o,l,c,u,h,f){var p=t;return f?(s&&\\\"even\\\"===t&&(p=null),H(p,e,r,n,i,a,o,l,c,u,h)):(s&&\\\"odd\\\"===t&&(p=null),H(p,c,l,o,a,i,n,r,e,u,h))}function Z(t,e,r,n,i){for(var a=[],o=0,s=0;s<e.length;s++)for(var l=e[s],c=1;c<m;c++)for(var u=1;u<v;u++)a.push(Y(t,y(l,u-1,c-1),y(l,u-1,c),y(l,u,c-1),y(l,u,c),r,n,(l+u+c)%2,i&&i[o]?i[o]:[])),o++;return a}function J(t,e,r,n,i){for(var a=[],o=0,s=0;s<e.length;s++)for(var l=e[s],c=1;c<g;c++)for(var u=1;u<m;u++)a.push(Y(t,y(c-1,l,u-1),y(c,l,u-1),y(c-1,l,u),y(c,l,u),r,n,(c+l+u)%2,i&&i[o]?i[o]:[])),o++;return a}function K(t,e,r,n,i){for(var a=[],o=0,s=0;s<e.length;s++)for(var l=e[s],c=1;c<v;c++)for(var u=1;u<g;u++)a.push(Y(t,y(u-1,c-1,l),y(u-1,c,l),y(u,c-1,l),y(u,c,l),r,n,(u+c+l)%2,i&&i[o]?i[o]:[])),o++;return a}function $(t,e,r){for(var n=1;n<m;n++)for(var i=1;i<v;i++)for(var a=1;a<g;a++)X(t,y(a-1,i-1,n-1),y(a-1,i-1,n),y(a-1,i,n-1),y(a-1,i,n),y(a,i-1,n-1),y(a,i-1,n),y(a,i,n-1),y(a,i,n),e,r,(a+i+n)%2)}function Q(t,e,r){s=!0,$(t,e,r),s=!1}function tt(t,e,r,n,i,a){for(var o=[],s=0,l=0;l<e.length;l++)for(var c=e[l],u=1;u<m;u++)for(var h=1;h<v;h++)o.push(W(t,c,h,u,r,n,i[l],a&&a[s]&&a[s])),s++;return o}function et(t,e,r,n,i,a){for(var o=[],s=0,l=0;l<e.length;l++)for(var c=e[l],u=1;u<g;u++)for(var h=1;h<m;h++)o.push(W(t,u,c,h,r,n,i[l],a&&a[s]&&a[s])),s++;return o}function rt(t,e,r,n,i,a){for(var o=[],s=0,l=0;l<e.length;l++)for(var c=e[l],u=1;u<v;u++)for(var h=1;h<g;h++)o.push(W(t,h,u,c,r,n,i[l],a&&a[s]&&a[s])),s++;return o}function nt(t,e){for(var r=[],n=t;n<e;n++)r.push(n);return r}return function(){if(L(),function(){for(var e=0;e<g;e++)for(var r=0;r<v;r++)for(var n=0;n<m;n++){var i=y(e,r,n);P(t.x[i],t.y[i],t.z[i],t.value[i])}}(),i&&o&&(z(o),l=!0,$(null,M,S),l=!1),n&&a){z(a);for(var e=t.surface.pattern,r=t.surface.count,s=0;s<r;s++){var c=1===r?.5:s/(r-1),k=(1-c)*M+c*S,E=Math.abs(k-T)>Math.abs(k-A)?[T,k]:[k,A];Q(e,E[0],E[1])}}var C=[[Math.min(M,A),Math.max(M,A)],[Math.min(T,S),Math.max(T,S)]];[\\\"x\\\",\\\"y\\\",\\\"z\\\"].forEach(function(e){for(var r=[],n=0;n<C.length;n++){var i=0,a=C[n][0],o=C[n][1],s=t.slices[e];if(s.show&&s.fill){z(s.fill);var l=[],c=[],h=[];if(s.locations.length)for(var y=0;y<s.locations.length;y++){var x=u(s.locations[y],\\\"x\\\"===e?f:\\\"y\\\"===e?p:d);0===x.distRatio?l.push(x.id):x.id>0&&(c.push(x.id),\\\"x\\\"===e?h.push([x.distRatio,0,0]):\\\"y\\\"===e?h.push([0,x.distRatio,0]):h.push([0,0,x.distRatio]))}else l=nt(1,\\\"x\\\"===e?g-1:\\\"y\\\"===e?v-1:m-1);c.length>0&&(r[i]=\\\"x\\\"===e?tt(null,c,a,o,h,r[i]):\\\"y\\\"===e?et(null,c,a,o,h,r[i]):rt(null,c,a,o,h,r[i]),i++),l.length>0&&(r[i]=\\\"x\\\"===e?Z(null,l,a,o,r[i]):\\\"y\\\"===e?J(null,l,a,o,r[i]):K(null,l,a,o,r[i]),i++)}var b=t.caps[e];b.show&&b.fill&&(z(b.fill),r[i]=\\\"x\\\"===e?Z(null,[0,g-1],a,o,r[i]):\\\"y\\\"===e?J(null,[0,v-1],a,o,r[i]):K(null,[0,m-1],a,o,r[i]),i++)}}),0===h&&L(),t._x=x,t._y=b,t._z=_,t._intensity=w,t._Xs=f,t._Ys=p,t._Zs=d}(),t}f.handlePick=function(t){if(t.object===this.mesh){var e=t.data.index,r=this.data._x[e],n=this.data._y[e],i=this.data._z[e],a=this.data._Ys.length,o=this.data._Zs.length,s=u(r,this.data._Xs).id,l=u(n,this.data._Ys).id,c=u(i,this.data._Zs).id,h=t.index=c+o*l+o*a*s;t.traceCoordinate=[this.data._x[h],this.data._y[h],this.data._z[h],this.data.value[h]];var f=this.data.hovertext||this.data.text;return Array.isArray(f)&&void 0!==f[h]?t.textLabel=f[h]:f&&(t.textLabel=f),!0}},f.update=function(t){var e=this.scene,r=e.fullSceneLayout;function n(t,e,r,n){return e.map(function(e){return t.d2l(e,0,n)*r})}this.data=p(t);var i={positions:l(n(r.xaxis,t._x,e.dataScale[0],t.xcalendar),n(r.yaxis,t._y,e.dataScale[1],t.ycalendar),n(r.zaxis,t._z,e.dataScale[2],t.zcalendar)),cells:l(t._i,t._j,t._k),lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,contourEnable:t.contour.show,contourColor:o(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading},c=s(t);i.vertexIntensity=t._intensity,i.vertexIntensityBounds=[c.min,c.max],i.colormap=a(t),this.mesh.update(i)},f.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports={findNearestOnAxis:u,generateIsoMeshes:p,createIsosurfaceTrace:function(t,e){var r=t.glplot.gl,i=n({gl:r}),a=new h(t,i,e.uid);return i._trace=a,a.update(e),t.glplot.add(i),a}}},{\\\"../../components/colorscale\\\":605,\\\"../../lib\\\":719,\\\"../../lib/gl_format_color\\\":716,\\\"../../lib/str2rgbarray\\\":742,\\\"../../plots/gl3d/zip3\\\":818,\\\"gl-mesh3d\\\":280}],1051:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../registry\\\"),a=t(\\\"./attributes\\\"),o=t(\\\"../../components/colorscale/defaults\\\");function s(t,e,r,n,a){var s=a(\\\"isomin\\\"),l=a(\\\"isomax\\\");null!=l&&null!=s&&s>l&&(e.isomin=null,e.isomax=null);var c=a(\\\"x\\\"),u=a(\\\"y\\\"),h=a(\\\"z\\\"),f=a(\\\"value\\\");c&&c.length&&u&&u.length&&h&&h.length&&f&&f.length?(i.getComponentMethod(\\\"calendars\\\",\\\"handleTraceDefaults\\\")(t,e,[\\\"x\\\",\\\"y\\\",\\\"z\\\"],n),[\\\"x\\\",\\\"y\\\",\\\"z\\\"].forEach(function(t){var e=\\\"caps.\\\"+t;a(e+\\\".show\\\")&&a(e+\\\".fill\\\");var r=\\\"slices.\\\"+t;a(r+\\\".show\\\")&&(a(r+\\\".fill\\\"),a(r+\\\".locations\\\"))}),a(\\\"spaceframe.show\\\")&&a(\\\"spaceframe.fill\\\"),a(\\\"surface.show\\\")&&(a(\\\"surface.count\\\"),a(\\\"surface.fill\\\"),a(\\\"surface.pattern\\\")),a(\\\"contour.show\\\")&&(a(\\\"contour.color\\\"),a(\\\"contour.width\\\")),[\\\"text\\\",\\\"hovertext\\\",\\\"hovertemplate\\\",\\\"lighting.ambient\\\",\\\"lighting.diffuse\\\",\\\"lighting.specular\\\",\\\"lighting.roughness\\\",\\\"lighting.fresnel\\\",\\\"lighting.vertexnormalsepsilon\\\",\\\"lighting.facenormalsepsilon\\\",\\\"lightposition.x\\\",\\\"lightposition.y\\\",\\\"lightposition.z\\\",\\\"flatshading\\\",\\\"opacity\\\"].forEach(function(t){a(t)}),o(t,e,n,a,{prefix:\\\"\\\",cLetter:\\\"c\\\"}),e._length=null):e.visible=!1}e.exports={supplyDefaults:function(t,e,r,i){s(t,e,0,i,function(r,i){return n.coerce(t,e,a,r,i)})},supplyIsoDefaults:s}},{\\\"../../components/colorscale/defaults\\\":603,\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"./attributes\\\":1048}],1052:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\").supplyDefaults,calc:t(\\\"./calc\\\"),colorbar:{min:\\\"cmin\\\",max:\\\"cmax\\\"},plot:t(\\\"./convert\\\").createIsosurfaceTrace,moduleType:\\\"trace\\\",name:\\\"isosurface\\\",basePlotModule:t(\\\"../../plots/gl3d\\\"),categories:[\\\"gl3d\\\"],meta:{}}},{\\\"../../plots/gl3d\\\":807,\\\"./attributes\\\":1048,\\\"./calc\\\":1049,\\\"./convert\\\":1050,\\\"./defaults\\\":1051}],1053:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/colorscale/attributes\\\"),i=t(\\\"../../components/fx/hovertemplate_attributes\\\"),a=t(\\\"../surface/attributes\\\"),o=t(\\\"../../plots/attributes\\\"),s=t(\\\"../../lib/extend\\\").extendFlat;e.exports=s({x:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},y:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},z:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},i:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},j:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},k:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},text:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0,editType:\\\"calc\\\"},hovertext:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0,editType:\\\"calc\\\"},hovertemplate:i({editType:\\\"calc\\\"}),delaunayaxis:{valType:\\\"enumerated\\\",values:[\\\"x\\\",\\\"y\\\",\\\"z\\\"],dflt:\\\"z\\\",editType:\\\"calc\\\"},alphahull:{valType:\\\"number\\\",dflt:-1,editType:\\\"calc\\\"},intensity:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},color:{valType:\\\"color\\\",editType:\\\"calc\\\"},vertexcolor:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},facecolor:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},transforms:void 0},n(\\\"\\\",{colorAttr:\\\"`intensity`\\\",showScaleDflt:!0,editTypeOverride:\\\"calc\\\"}),{opacity:a.opacity,flatshading:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},contour:{show:s({},a.contours.x.show,{}),color:a.contours.x.color,width:a.contours.x.width,editType:\\\"calc\\\"},lightposition:{x:s({},a.lightposition.x,{dflt:1e5}),y:s({},a.lightposition.y,{dflt:1e5}),z:s({},a.lightposition.z,{dflt:0}),editType:\\\"calc\\\"},lighting:s({vertexnormalsepsilon:{valType:\\\"number\\\",min:0,max:1,dflt:1e-12,editType:\\\"calc\\\"},facenormalsepsilon:{valType:\\\"number\\\",min:0,max:1,dflt:1e-6,editType:\\\"calc\\\"},editType:\\\"calc\\\"},a.lighting),hoverinfo:s({},o.hoverinfo,{editType:\\\"calc\\\"})})},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../../plots/attributes\\\":764,\\\"../surface/attributes\\\":1225}],1054:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/colorscale/calc\\\");e.exports=function(t,e){e.intensity&&n(t,e,{vals:e.intensity,containerStr:\\\"\\\",cLetter:\\\"c\\\"})}},{\\\"../../components/colorscale/calc\\\":601}],1055:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"gl-mesh3d\\\"),i=t(\\\"delaunay-triangulate\\\"),a=t(\\\"alpha-shape\\\"),o=t(\\\"convex-hull\\\"),s=t(\\\"../../lib/gl_format_color\\\").parseColorScale,l=t(\\\"../../lib/str2rgbarray\\\"),c=t(\\\"../../components/colorscale\\\").extractOpts,u=t(\\\"../../plots/gl3d/zip3\\\");function h(t,e,r){this.scene=t,this.uid=r,this.mesh=e,this.name=\\\"\\\",this.color=\\\"#fff\\\",this.data=null,this.showContour=!1}var f=h.prototype;function p(t){for(var e=[],r=t.length,n=0;n<r;n++)e[n]=l(t[n]);return e}function d(t,e,r,n){for(var i=[],a=e.length,o=0;o<a;o++)i[o]=t.d2l(e[o],0,n)*r;return i}function g(t){for(var e=[],r=t.length,n=0;n<r;n++)e[n]=Math.round(t[n]);return e}function v(t,e){for(var r=t.length,n=0;n<r;n++)if(t[n]<=-.5||t[n]>=e-.5)return!1;return!0}f.handlePick=function(t){if(t.object===this.mesh){var e=t.index=t.data.index;t.traceCoordinate=[this.data.x[e],this.data.y[e],this.data.z[e]];var r=this.data.hovertext||this.data.text;return Array.isArray(r)&&void 0!==r[e]?t.textLabel=r[e]:r&&(t.textLabel=r),!0}},f.update=function(t){var e=this.scene,r=e.fullSceneLayout;this.data=t;var n,h=t.x.length,f=u(d(r.xaxis,t.x,e.dataScale[0],t.xcalendar),d(r.yaxis,t.y,e.dataScale[1],t.ycalendar),d(r.zaxis,t.z,e.dataScale[2],t.zcalendar));if(t.i&&t.j&&t.k){if(t.i.length!==t.j.length||t.j.length!==t.k.length||!v(t.i,h)||!v(t.j,h)||!v(t.k,h))return;n=u(g(t.i),g(t.j),g(t.k))}else n=0===t.alphahull?o(f):t.alphahull>0?a(t.alphahull,f):function(t,e){for(var r=[\\\"x\\\",\\\"y\\\",\\\"z\\\"].indexOf(t),n=[],a=e.length,o=0;o<a;o++)n[o]=[e[o][(r+1)%3],e[o][(r+2)%3]];return i(n)}(t.delaunayaxis,f);var m={positions:f,cells:n,lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,contourEnable:t.contour.show,contourColor:l(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading};if(t.intensity){var y=c(t);this.color=\\\"#fff\\\",m.vertexIntensity=t.intensity,m.vertexIntensityBounds=[y.min,y.max],m.colormap=s(t)}else t.vertexcolor?(this.color=t.vertexcolor[0],m.vertexColors=p(t.vertexcolor)):t.facecolor?(this.color=t.facecolor[0],m.cellColors=p(t.facecolor)):(this.color=t.color,m.meshColor=l(t.color));this.mesh.update(m)},f.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports=function(t,e){var r=t.glplot.gl,i=n({gl:r}),a=new h(t,i,e.uid);return i._trace=a,a.update(e),t.glplot.add(i),a}},{\\\"../../components/colorscale\\\":605,\\\"../../lib/gl_format_color\\\":716,\\\"../../lib/str2rgbarray\\\":742,\\\"../../plots/gl3d/zip3\\\":818,\\\"alpha-shape\\\":64,\\\"convex-hull\\\":130,\\\"delaunay-triangulate\\\":165,\\\"gl-mesh3d\\\":280}],1056:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../components/colorscale/defaults\\\"),o=t(\\\"./attributes\\\");e.exports=function(t,e,r,s){function l(r,n){return i.coerce(t,e,o,r,n)}function c(t){var e=t.map(function(t){var e=l(t);return e&&i.isArrayOrTypedArray(e)?e:null});return e.every(function(t){return t&&t.length===e[0].length})&&e}c([\\\"x\\\",\\\"y\\\",\\\"z\\\"])?(c([\\\"i\\\",\\\"j\\\",\\\"k\\\"]),(!e.i||e.j&&e.k)&&(!e.j||e.k&&e.i)&&(!e.k||e.i&&e.j)?(n.getComponentMethod(\\\"calendars\\\",\\\"handleTraceDefaults\\\")(t,e,[\\\"x\\\",\\\"y\\\",\\\"z\\\"],s),[\\\"lighting.ambient\\\",\\\"lighting.diffuse\\\",\\\"lighting.specular\\\",\\\"lighting.roughness\\\",\\\"lighting.fresnel\\\",\\\"lighting.vertexnormalsepsilon\\\",\\\"lighting.facenormalsepsilon\\\",\\\"lightposition.x\\\",\\\"lightposition.y\\\",\\\"lightposition.z\\\",\\\"contour.show\\\",\\\"contour.color\\\",\\\"contour.width\\\",\\\"colorscale\\\",\\\"reversescale\\\",\\\"flatshading\\\",\\\"alphahull\\\",\\\"delaunayaxis\\\",\\\"opacity\\\"].forEach(function(t){l(t)}),\\\"intensity\\\"in t?(l(\\\"intensity\\\"),a(t,e,s,l,{prefix:\\\"\\\",cLetter:\\\"c\\\"})):(e.showscale=!1,\\\"facecolor\\\"in t?l(\\\"facecolor\\\"):\\\"vertexcolor\\\"in t?l(\\\"vertexcolor\\\"):l(\\\"color\\\",r)),l(\\\"text\\\"),l(\\\"hovertext\\\"),l(\\\"hovertemplate\\\"),e._length=null):e.visible=!1):e.visible=!1}},{\\\"../../components/colorscale/defaults\\\":603,\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"./attributes\\\":1053}],1057:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),calc:t(\\\"./calc\\\"),colorbar:{min:\\\"cmin\\\",max:\\\"cmax\\\"},plot:t(\\\"./convert\\\"),moduleType:\\\"trace\\\",name:\\\"mesh3d\\\",basePlotModule:t(\\\"../../plots/gl3d\\\"),categories:[\\\"gl3d\\\"],meta:{}}},{\\\"../../plots/gl3d\\\":807,\\\"./attributes\\\":1053,\\\"./calc\\\":1054,\\\"./convert\\\":1055,\\\"./defaults\\\":1056}],1058:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\").extendFlat,i=t(\\\"../scatter/attributes\\\"),a=t(\\\"../../components/drawing/attributes\\\").dash,o=t(\\\"../../components/fx/attributes\\\"),s=t(\\\"../../constants/delta.js\\\"),l=s.INCREASING.COLOR,c=s.DECREASING.COLOR,u=i.line;function h(t){return{line:{color:n({},u.color,{dflt:t}),width:u.width,dash:a,editType:\\\"style\\\"},editType:\\\"style\\\"}}e.exports={x:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},open:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},high:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},low:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},close:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},line:{width:n({},u.width,{}),dash:n({},a,{}),editType:\\\"style\\\"},increasing:h(l),decreasing:h(c),text:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0,editType:\\\"calc\\\"},hovertext:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0,editType:\\\"calc\\\"},tickwidth:{valType:\\\"number\\\",min:0,max:.5,dflt:.3,editType:\\\"calc\\\"},hoverlabel:n({},o.hoverlabel,{split:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"style\\\"}})}},{\\\"../../components/drawing/attributes\\\":613,\\\"../../components/fx/attributes\\\":623,\\\"../../constants/delta.js\\\":689,\\\"../../lib\\\":719,\\\"../scatter/attributes\\\":1112}],1059:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=n._,a=t(\\\"../../plots/cartesian/axes\\\"),o=t(\\\"../../constants/numerical\\\").BADNUM;function s(t,e,r,n){return{o:t,h:e,l:r,c:n}}function l(t,e,r,s,l){for(var c=s.makeCalcdata(e,\\\"open\\\"),u=s.makeCalcdata(e,\\\"high\\\"),h=s.makeCalcdata(e,\\\"low\\\"),f=s.makeCalcdata(e,\\\"close\\\"),p=Array.isArray(e.text),d=Array.isArray(e.hovertext),g=!0,v=null,m=[],y=0;y<r.length;y++){var x=r[y],b=c[y],_=u[y],w=h[y],k=f[y];if(x!==o&&b!==o&&_!==o&&w!==o&&k!==o){k===b?null!==v&&k!==v&&(g=k>v):g=k>b,v=k;var T=l(b,_,w,k);T.pos=x,T.yc=(b+k)/2,T.i=y,T.dir=g?\\\"increasing\\\":\\\"decreasing\\\",T.x=T.pos,T.y=[w,_],p&&(T.tx=e.text[y]),d&&(T.htx=e.hovertext[y]),m.push(T)}else m.push({pos:x,empty:!0})}return e._extremes[s._id]=a.findExtremes(s,n.concat(h,u),{padded:!0}),m.length&&(m[0].t={labels:{open:i(t,\\\"open:\\\")+\\\" \\\",high:i(t,\\\"high:\\\")+\\\" \\\",low:i(t,\\\"low:\\\")+\\\" \\\",close:i(t,\\\"close:\\\")+\\\" \\\"}}),m}e.exports={calc:function(t,e){var r=a.getFromId(t,e.xaxis),i=a.getFromId(t,e.yaxis),o=function(t,e,r){var i=r._minDiff;if(!i){var a,o=t._fullData,s=[];for(i=1/0,a=0;a<o.length;a++){var l=o[a];if(\\\"ohlc\\\"===l.type&&!0===l.visible&&l.xaxis===e._id){s.push(l);var c=e.makeCalcdata(l,\\\"x\\\");l._xcalc=c;var u=n.distinctVals(c).minDiff;u&&isFinite(u)&&(i=Math.min(i,u))}}for(i===1/0&&(i=1),a=0;a<s.length;a++)s[a]._minDiff=i}return i*r.tickwidth}(t,r,e),c=e._minDiff;e._minDiff=null;var u=e._xcalc;e._xcalc=null;var h=l(t,e,u,i,s);return e._extremes[r._id]=a.findExtremes(r,u,{vpad:c/2}),h.length?(n.extendFlat(h[0].t,{wHover:c/2,tickLen:o}),h):[{t:{empty:!0}}]},calcCommon:l}},{\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767}],1060:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./ohlc_defaults\\\"),a=t(\\\"./attributes\\\");function o(t,e,r,n){r(n+\\\".line.color\\\"),r(n+\\\".line.width\\\",e.line.width),r(n+\\\".line.dash\\\",e.line.dash)}e.exports=function(t,e,r,s){function l(r,i){return n.coerce(t,e,a,r,i)}i(t,e,l,s)?(l(\\\"line.width\\\"),l(\\\"line.dash\\\"),o(t,e,l,\\\"increasing\\\"),o(t,e,l,\\\"decreasing\\\"),l(\\\"text\\\"),l(\\\"hovertext\\\"),l(\\\"tickwidth\\\"),s._requestRangeslider[e.xaxis]=!0):e.visible=!1}},{\\\"../../lib\\\":719,\\\"./attributes\\\":1058,\\\"./ohlc_defaults\\\":1063}],1061:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/cartesian/axes\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../components/fx\\\"),o=t(\\\"../../components/color\\\"),s=t(\\\"../../lib\\\").fillText,l=t(\\\"../../constants/delta.js\\\"),c={increasing:l.INCREASING.SYMBOL,decreasing:l.DECREASING.SYMBOL};function u(t,e,r,n){var i,s,l=t.cd,c=t.xa,u=l[0].trace,h=l[0].t,f=u.type,p=\\\"ohlc\\\"===f?\\\"l\\\":\\\"min\\\",d=\\\"ohlc\\\"===f?\\\"h\\\":\\\"max\\\",g=h.bPos||0,v=function(t){return t.pos+g-e},m=h.bdPos||h.tickLen,y=h.wHover,x=Math.min(1,m/Math.abs(c.r2c(c.range[1])-c.r2c(c.range[0])));function b(t){var e=v(t);return a.inbox(e-y,e+y,i)}function _(t){var e=t[p],n=t[d];return e===n||a.inbox(e-r,n-r,i)}function w(t){return(b(t)+_(t))/2}i=t.maxHoverDistance-x,s=t.maxSpikeDistance-x;var k=a.getDistanceFunction(n,b,_,w);if(a.getClosest(l,k,t),!1===t.index)return null;var T=l[t.index];if(T.empty)return null;var A=u[T.dir],M=A.line.color;return o.opacity(M)&&A.line.width?t.color=M:t.color=A.fillcolor,t.x0=c.c2p(T.pos+g-m,!0),t.x1=c.c2p(T.pos+g+m,!0),t.xLabelVal=T.pos,t.spikeDistance=w(T)*s/i,t.xSpike=c.c2p(T.pos,!0),t}function h(t,e,r,a){var o=t.cd,s=t.ya,l=o[0].trace,c=o[0].t,h=[],f=u(t,e,r,a);if(!f)return[];var p=o[f.index].hi||l.hoverinfo,d=p.split(\\\"+\\\");if(!(\\\"all\\\"===p||-1!==d.indexOf(\\\"y\\\")))return[];for(var g=[\\\"high\\\",\\\"open\\\",\\\"close\\\",\\\"low\\\"],v={},m=0;m<g.length;m++){var y,x=g[m],b=l[x][f.index],_=s.c2p(b,!0);b in v?(y=v[b]).yLabel+=\\\"<br>\\\"+c.labels[x]+n.hoverLabelText(s,b):((y=i.extendFlat({},f)).y0=y.y1=_,y.yLabelVal=b,y.yLabel=c.labels[x]+n.hoverLabelText(s,b),y.name=\\\"\\\",h.push(y),v[b]=y)}return h}function f(t,e,r,i){var a=t.cd,o=t.ya,l=a[0].trace,h=a[0].t,f=u(t,e,r,i);if(!f)return[];var p=a[f.index],d=f.index=p.i,g=p.dir;function v(t){return h.labels[t]+n.hoverLabelText(o,l[t][d])}var m=p.hi||l.hoverinfo,y=m.split(\\\"+\\\"),x=\\\"all\\\"===m,b=x||-1!==y.indexOf(\\\"y\\\"),_=x||-1!==y.indexOf(\\\"text\\\"),w=b?[v(\\\"open\\\"),v(\\\"high\\\"),v(\\\"low\\\"),v(\\\"close\\\")+\\\"  \\\"+c[g]]:[];return _&&s(p,l,w),f.extraText=w.join(\\\"<br>\\\"),f.y0=f.y1=o.c2p(p.yc,!0),[f]}e.exports={hoverPoints:function(t,e,r,n){return t.cd[0].trace.hoverlabel.split?h(t,e,r,n):f(t,e,r,n)},hoverSplit:h,hoverOnPoints:f}},{\\\"../../components/color\\\":593,\\\"../../components/fx\\\":632,\\\"../../constants/delta.js\\\":689,\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767}],1062:[function(t,e,r){\\\"use strict\\\";e.exports={moduleType:\\\"trace\\\",name:\\\"ohlc\\\",basePlotModule:t(\\\"../../plots/cartesian\\\"),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"showLegend\\\"],meta:{},attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),calc:t(\\\"./calc\\\").calc,plot:t(\\\"./plot\\\"),style:t(\\\"./style\\\"),hoverPoints:t(\\\"./hover\\\").hoverPoints,selectPoints:t(\\\"./select\\\")}},{\\\"../../plots/cartesian\\\":778,\\\"./attributes\\\":1058,\\\"./calc\\\":1059,\\\"./defaults\\\":1060,\\\"./hover\\\":1061,\\\"./plot\\\":1064,\\\"./select\\\":1065,\\\"./style\\\":1066}],1063:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../lib\\\");e.exports=function(t,e,r,a){var o=r(\\\"x\\\"),s=r(\\\"open\\\"),l=r(\\\"high\\\"),c=r(\\\"low\\\"),u=r(\\\"close\\\");if(r(\\\"hoverlabel.split\\\"),n.getComponentMethod(\\\"calendars\\\",\\\"handleTraceDefaults\\\")(t,e,[\\\"x\\\"],a),s&&l&&c&&u){var h=Math.min(s.length,l.length,c.length,u.length);return o&&(h=Math.min(h,i.minRowLength(o))),e._length=h,h}}},{\\\"../../lib\\\":719,\\\"../../registry\\\":847}],1064:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../lib\\\");e.exports=function(t,e,r,a){var o=e.xaxis,s=e.yaxis;i.makeTraceGroups(a,r,\\\"trace ohlc\\\").each(function(t){var e=n.select(this),r=t[0],a=r.t;if(!0!==r.trace.visible||a.empty)e.remove();else{var l=a.tickLen,c=e.selectAll(\\\"path\\\").data(i.identity);c.enter().append(\\\"path\\\"),c.exit().remove(),c.attr(\\\"d\\\",function(t){if(t.empty)return\\\"M0,0Z\\\";var e=o.c2p(t.pos,!0),r=o.c2p(t.pos-l,!0),n=o.c2p(t.pos+l,!0);return\\\"M\\\"+r+\\\",\\\"+s.c2p(t.o,!0)+\\\"H\\\"+e+\\\"M\\\"+e+\\\",\\\"+s.c2p(t.h,!0)+\\\"V\\\"+s.c2p(t.l,!0)+\\\"M\\\"+n+\\\",\\\"+s.c2p(t.c,!0)+\\\"H\\\"+e})}})}},{\\\"../../lib\\\":719,d3:163}],1065:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){var r,n=t.cd,i=t.xaxis,a=t.yaxis,o=[],s=n[0].t.bPos||0;if(!1===e)for(r=0;r<n.length;r++)n[r].selected=0;else for(r=0;r<n.length;r++){var l=n[r];e.contains([i.c2p(l.pos+s),a.c2p(l.yc)],null,l.i,t)?(o.push({pointNumber:l.i,x:i.c2d(l.pos),y:a.c2d(l.yc)}),l.selected=1):l.selected=0}return o}},{}],1066:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../components/drawing\\\"),a=t(\\\"../../components/color\\\");e.exports=function(t,e,r){var o=r||n.select(t).selectAll(\\\"g.ohlclayer\\\").selectAll(\\\"g.trace\\\");o.style(\\\"opacity\\\",function(t){return t[0].trace.opacity}),o.each(function(t){var e=t[0].trace;n.select(this).selectAll(\\\"path\\\").each(function(t){if(!t.empty){var r=e[t.dir].line;n.select(this).style(\\\"fill\\\",\\\"none\\\").call(a.stroke,r.color).call(i.dashLine,r.dash,r.width).style(\\\"opacity\\\",e.selectedpoints&&!t.selected?.3:1)}})})}},{\\\"../../components/color\\\":593,\\\"../../components/drawing\\\":614,d3:163}],1067:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib/extend\\\").extendFlat,i=t(\\\"../../plots/attributes\\\"),a=t(\\\"../../plots/font_attributes\\\"),o=t(\\\"../../components/colorscale/attributes\\\"),s=t(\\\"../../components/fx/hovertemplate_attributes\\\"),l=t(\\\"../../plots/domain\\\").attributes,c=n({editType:\\\"calc\\\"},o(\\\"line\\\",{editTypeOverride:\\\"calc\\\"}),{shape:{valType:\\\"enumerated\\\",values:[\\\"linear\\\",\\\"hspline\\\"],dflt:\\\"linear\\\",editType:\\\"plot\\\"},hovertemplate:s({editType:\\\"plot\\\",arrayOk:!1},{keys:[\\\"count\\\",\\\"probability\\\"]})});e.exports={domain:l({name:\\\"parcats\\\",trace:!0,editType:\\\"calc\\\"}),hoverinfo:n({},i.hoverinfo,{flags:[\\\"count\\\",\\\"probability\\\"],editType:\\\"plot\\\",arrayOk:!1}),hoveron:{valType:\\\"enumerated\\\",values:[\\\"category\\\",\\\"color\\\",\\\"dimension\\\"],dflt:\\\"category\\\",editType:\\\"plot\\\"},hovertemplate:s({editType:\\\"plot\\\",arrayOk:!1},{keys:[\\\"count\\\",\\\"probability\\\",\\\"category\\\",\\\"categorycount\\\",\\\"colorcount\\\",\\\"bandcolorcount\\\"]}),arrangement:{valType:\\\"enumerated\\\",values:[\\\"perpendicular\\\",\\\"freeform\\\",\\\"fixed\\\"],dflt:\\\"perpendicular\\\",editType:\\\"plot\\\"},bundlecolors:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"plot\\\"},sortpaths:{valType:\\\"enumerated\\\",values:[\\\"forward\\\",\\\"backward\\\"],dflt:\\\"forward\\\",editType:\\\"plot\\\"},labelfont:a({editType:\\\"calc\\\"}),tickfont:a({editType:\\\"calc\\\"}),dimensions:{_isLinkedToArray:\\\"dimension\\\",label:{valType:\\\"string\\\",editType:\\\"calc\\\"},categoryorder:{valType:\\\"enumerated\\\",values:[\\\"trace\\\",\\\"category ascending\\\",\\\"category descending\\\",\\\"array\\\"],dflt:\\\"trace\\\",editType:\\\"calc\\\"},categoryarray:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},ticktext:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},values:{valType:\\\"data_array\\\",dflt:[],editType:\\\"calc\\\"},displayindex:{valType:\\\"integer\\\",editType:\\\"calc\\\"},editType:\\\"calc\\\",visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"}},line:c,counts:{valType:\\\"number\\\",min:0,dflt:1,arrayOk:!0,editType:\\\"calc\\\"},customdata:void 0,hoverlabel:void 0,ids:void 0,legendgroup:void 0,opacity:void 0,selectedpoints:void 0,showlegend:void 0}},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../../plots/attributes\\\":764,\\\"../../plots/domain\\\":792,\\\"../../plots/font_attributes\\\":793}],1068:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/get_data\\\").getModuleCalcData,i=t(\\\"./plot\\\");r.name=\\\"parcats\\\",r.plot=function(t,e,r,a){var o=n(t.calcdata,\\\"parcats\\\");if(o.length){var s=o[0];i(t,s,r,a)}},r.clean=function(t,e,r,n){var i=n._has&&n._has(\\\"parcats\\\"),a=e._has&&e._has(\\\"parcats\\\");i&&!a&&n._paperdiv.selectAll(\\\".parcats\\\").remove()}},{\\\"../../plots/get_data\\\":802,\\\"./plot\\\":1073}],1069:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib/gup\\\").wrap,i=t(\\\"../../components/colorscale/helpers\\\").hasColorscale,a=t(\\\"../../components/colorscale/calc\\\"),o=t(\\\"../../lib/filter_unique.js\\\"),s=t(\\\"../../components/drawing\\\"),l=t(\\\"../../lib\\\");function c(t,e,r){t.valueInds.push(e),t.count+=r}function u(t,e,r){t.valueInds.push(e),t.count+=r}e.exports=function(t,e){var r=l.filterVisible(e.dimensions);if(0===r.length)return[];var h,f,p,d=r.map(function(t){var e;return\\\"trace\\\"===t.categoryorder?e=null:\\\"array\\\"===t.categoryorder?e=t.categoryarray:(e=o(t.values).sort(),\\\"category descending\\\"===t.categoryorder&&(e=e.reverse())),function(t,e){e=null==e?[]:e.map(function(t){return t});var r={},n={},i=[];e.forEach(function(t,e){r[t]=0,n[t]=e});for(var a=0;a<t.length;a++){var o,s=t[a];void 0===r[s]?(r[s]=1,o=e.push(s)-1,n[s]=o):(r[s]++,o=n[s]),i.push(o)}var l=e.map(function(t){return r[t]});return{uniqueValues:e,uniqueCounts:l,inds:i}}(t.values,e)});h=l.isArrayOrTypedArray(e.counts)?e.counts:[e.counts],function(t){var e;if(function(t){for(var e=new Array(t.length),r=0;r<t.length;r++){if(t[r]<0||t[r]>=t.length)return!1;if(void 0!==e[t[r]])return!1;e[t[r]]=!0}return!0}(t.map(function(t){return t.displayindex})))for(e=0;e<t.length;e++)t[e]._displayindex=t[e].displayindex;else for(e=0;e<t.length;e++)t[e]._displayindex=e}(r),r.forEach(function(t,e){!function(t,e){t._categoryarray=e.uniqueValues,null===t.ticktext||void 0===t.ticktext?t._ticktext=[]:t._ticktext=t.ticktext.slice();for(var r=t._ticktext.length;r<e.uniqueValues.length;r++)t._ticktext.push(e.uniqueValues[r])}(t,d[e])});var g,v=e.line;v?(i(e,\\\"line\\\")&&a(t,e,{vals:e.line.color,containerStr:\\\"line\\\",cLetter:\\\"c\\\"}),g=s.tryColorscale(v)):g=l.identity;var m,y,x,b,_=r[0].values.length,w={},k=d.map(function(t){return t.inds});for(p=0,m=0;m<_;m++){var T=[];for(y=0;y<k.length;y++)T.push(k[y][m]);f=h[m%h.length],p+=f;var A=(x=m,b=void 0,b=l.isArrayOrTypedArray(v.color)?v.color[x%v.color.length]:v.color,{color:g(b),rawColor:b}),M=T+\\\"-\\\"+A.rawColor;void 0===w[M]&&(w[M]={categoryInds:T,color:A.color,rawColor:A.rawColor,valueInds:[],count:0}),u(w[M],m,f)}var S,E=r.map(function(t,e){return r=e,n=t._index,i=t._displayindex,a=t.label,{dimensionInd:r,containerInd:n,displayInd:i,dimensionLabel:a,count:p,categories:[],dragX:null};var r,n,i,a});for(m=0;m<_;m++)for(f=h[m%h.length],y=0;y<E.length;y++){var C=E[y].containerInd,L=d[y].inds[m],P=E[y].categories;if(void 0===P[L]){var O=e.dimensions[C]._categoryarray[L],z=e.dimensions[C]._ticktext[L];P[L]={dimensionInd:y,categoryInd:S=L,categoryValue:O,displayInd:S,categoryLabel:z,valueInds:[],count:0,dragY:null}}c(P[L],m,f)}return n(function(t,e,r){var n=t.map(function(t){return t.categories.length}).reduce(function(t,e){return Math.max(t,e)});return{dimensions:t,paths:e,trace:void 0,maxCats:n,count:r}}(E,w,p))}},{\\\"../../components/colorscale/calc\\\":601,\\\"../../components/colorscale/helpers\\\":604,\\\"../../components/drawing\\\":614,\\\"../../lib\\\":719,\\\"../../lib/filter_unique.js\\\":711,\\\"../../lib/gup\\\":717}],1070:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../components/colorscale/helpers\\\").hasColorscale,a=t(\\\"../../components/colorscale/defaults\\\"),o=t(\\\"../../plots/domain\\\").defaults,s=t(\\\"../../plots/array_container_defaults\\\"),l=t(\\\"./attributes\\\"),c=t(\\\"../parcoords/merge_length\\\");function u(t,e){function r(r,i){return n.coerce(t,e,l.dimensions,r,i)}var i=r(\\\"values\\\"),a=r(\\\"visible\\\");if(i&&i.length||(a=e.visible=!1),a){r(\\\"label\\\"),r(\\\"displayindex\\\",e._index);var o,s=t.categoryarray,c=Array.isArray(s)&&s.length>0;c&&(o=\\\"array\\\");var u=r(\\\"categoryorder\\\",o);\\\"array\\\"===u?(r(\\\"categoryarray\\\"),r(\\\"ticktext\\\")):(delete t.categoryarray,delete t.ticktext),c||\\\"array\\\"!==u||(e.categoryorder=\\\"trace\\\")}}e.exports=function(t,e,r,h){function f(r,i){return n.coerce(t,e,l,r,i)}var p=s(t,e,{name:\\\"dimensions\\\",handleItemDefaults:u}),d=function(t,e,r,o,s){s(\\\"line.shape\\\"),s(\\\"line.hovertemplate\\\");var l=s(\\\"line.color\\\",o.colorway[0]);if(i(t,\\\"line\\\")&&n.isArrayOrTypedArray(l)){if(l.length)return s(\\\"line.colorscale\\\"),a(t,e,o,s,{prefix:\\\"line.\\\",cLetter:\\\"c\\\"}),l.length;e.line.color=r}return 1/0}(t,e,r,h,f);o(e,h,f),Array.isArray(p)&&p.length||(e.visible=!1),c(e,p,\\\"values\\\",d),f(\\\"hoveron\\\"),f(\\\"hovertemplate\\\"),f(\\\"arrangement\\\"),f(\\\"bundlecolors\\\"),f(\\\"sortpaths\\\"),f(\\\"counts\\\");var g={family:h.font.family,size:Math.round(h.font.size),color:h.font.color};n.coerceFont(f,\\\"labelfont\\\",g);var v={family:h.font.family,size:Math.round(h.font.size/1.2),color:h.font.color};n.coerceFont(f,\\\"tickfont\\\",v)}},{\\\"../../components/colorscale/defaults\\\":603,\\\"../../components/colorscale/helpers\\\":604,\\\"../../lib\\\":719,\\\"../../plots/array_container_defaults\\\":763,\\\"../../plots/domain\\\":792,\\\"../parcoords/merge_length\\\":1083,\\\"./attributes\\\":1067}],1071:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),calc:t(\\\"./calc\\\"),plot:t(\\\"./plot\\\"),colorbar:{container:\\\"line\\\",min:\\\"cmin\\\",max:\\\"cmax\\\"},moduleType:\\\"trace\\\",name:\\\"parcats\\\",basePlotModule:t(\\\"./base_plot\\\"),categories:[\\\"noOpacity\\\"],meta:{}}},{\\\"./attributes\\\":1067,\\\"./base_plot\\\":1068,\\\"./calc\\\":1069,\\\"./defaults\\\":1070,\\\"./plot\\\":1073}],1072:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../plot_api/plot_api\\\"),a=t(\\\"../../components/fx\\\"),o=t(\\\"../../lib\\\"),s=t(\\\"../../components/drawing\\\"),l=t(\\\"tinycolor2\\\"),c=t(\\\"../../lib/svg_text_utils\\\");function u(t,e,r,i){var a=t.map(function(t,e,r){var n,i=r[0],a=e.margin||{l:80,r:80,t:100,b:80},o=i.trace,s=o.domain,l=e.width,c=e.height,u=Math.floor(l*(s.x[1]-s.x[0])),h=Math.floor(c*(s.y[1]-s.y[0])),f=s.x[0]*l+a.l,p=e.height-s.y[1]*e.height+a.t,d=o.line.shape;n=\\\"all\\\"===o.hoverinfo?[\\\"count\\\",\\\"probability\\\"]:(o.hoverinfo||\\\"\\\").split(\\\"+\\\");var g={trace:o,key:o.uid,model:i,x:f,y:p,width:u,height:h,hoveron:o.hoveron,hoverinfoItems:n,arrangement:o.arrangement,bundlecolors:o.bundlecolors,sortpaths:o.sortpaths,labelfont:o.labelfont,categorylabelfont:o.tickfont,pathShape:d,dragDimension:null,margin:a,paths:[],dimensions:[],graphDiv:t,traceSelection:null,pathSelection:null,dimensionSelection:null};i.dimensions&&(R(g),D(g));return g}.bind(0,e,r)),l=i.selectAll(\\\"g.parcatslayer\\\").data([null]);l.enter().append(\\\"g\\\").attr(\\\"class\\\",\\\"parcatslayer\\\").style(\\\"pointer-events\\\",\\\"all\\\");var u=l.selectAll(\\\"g.trace.parcats\\\").data(a,h),v=u.enter().append(\\\"g\\\").attr(\\\"class\\\",\\\"trace parcats\\\");u.attr(\\\"transform\\\",function(t){return\\\"translate(\\\"+t.x+\\\", \\\"+t.y+\\\")\\\"}),v.append(\\\"g\\\").attr(\\\"class\\\",\\\"paths\\\");var x=u.select(\\\"g.paths\\\").selectAll(\\\"path.path\\\").data(function(t){return t.paths},h);x.attr(\\\"fill\\\",function(t){return t.model.color});var w=x.enter().append(\\\"path\\\").attr(\\\"class\\\",\\\"path\\\").attr(\\\"stroke-opacity\\\",0).attr(\\\"fill\\\",function(t){return t.model.color}).attr(\\\"fill-opacity\\\",0);y(w),x.attr(\\\"d\\\",function(t){return t.svgD}),w.empty()||x.sort(p),x.exit().remove(),x.on(\\\"mouseover\\\",d).on(\\\"mouseout\\\",g).on(\\\"click\\\",m),v.append(\\\"g\\\").attr(\\\"class\\\",\\\"dimensions\\\");var k=u.select(\\\"g.dimensions\\\").selectAll(\\\"g.dimension\\\").data(function(t){return t.dimensions},h);k.enter().append(\\\"g\\\").attr(\\\"class\\\",\\\"dimension\\\"),k.attr(\\\"transform\\\",function(t){return\\\"translate(\\\"+t.x+\\\", 0)\\\"}),k.exit().remove();var T=k.selectAll(\\\"g.category\\\").data(function(t){return t.categories},h),A=T.enter().append(\\\"g\\\").attr(\\\"class\\\",\\\"category\\\");T.attr(\\\"transform\\\",function(t){return\\\"translate(0, \\\"+t.y+\\\")\\\"}),A.append(\\\"rect\\\").attr(\\\"class\\\",\\\"catrect\\\").attr(\\\"pointer-events\\\",\\\"none\\\"),T.select(\\\"rect.catrect\\\").attr(\\\"fill\\\",\\\"none\\\").attr(\\\"width\\\",function(t){return t.width}).attr(\\\"height\\\",function(t){return t.height}),b(A);var P=T.selectAll(\\\"rect.bandrect\\\").data(function(t){return t.bands},h);P.each(function(){o.raiseToTop(this)}),P.attr(\\\"fill\\\",function(t){return t.color});var O=P.enter().append(\\\"rect\\\").attr(\\\"class\\\",\\\"bandrect\\\").attr(\\\"stroke-opacity\\\",0).attr(\\\"fill\\\",function(t){return t.color}).attr(\\\"fill-opacity\\\",0);P.attr(\\\"fill\\\",function(t){return t.color}).attr(\\\"width\\\",function(t){return t.width}).attr(\\\"height\\\",function(t){return t.height}).attr(\\\"y\\\",function(t){return t.y}).attr(\\\"cursor\\\",function(t){return\\\"fixed\\\"===t.parcatsViewModel.arrangement?\\\"default\\\":\\\"perpendicular\\\"===t.parcatsViewModel.arrangement?\\\"ns-resize\\\":\\\"move\\\"}),_(O),P.exit().remove(),A.append(\\\"text\\\").attr(\\\"class\\\",\\\"catlabel\\\").attr(\\\"pointer-events\\\",\\\"none\\\");var z=e._fullLayout.paper_bgcolor;T.select(\\\"text.catlabel\\\").attr(\\\"text-anchor\\\",function(t){return f(t)?\\\"start\\\":\\\"end\\\"}).attr(\\\"alignment-baseline\\\",\\\"middle\\\").style(\\\"text-shadow\\\",z+\\\" -1px  1px 2px, \\\"+z+\\\" 1px  1px 2px, \\\"+z+\\\"  1px -1px 2px, \\\"+z+\\\" -1px -1px 2px\\\").style(\\\"fill\\\",\\\"rgb(0, 0, 0)\\\").attr(\\\"x\\\",function(t){return f(t)?t.width+5:-5}).attr(\\\"y\\\",function(t){return t.height/2}).text(function(t){return t.model.categoryLabel}).each(function(t){s.font(n.select(this),t.parcatsViewModel.categorylabelfont),c.convertToTspans(n.select(this),e)}),A.append(\\\"text\\\").attr(\\\"class\\\",\\\"dimlabel\\\"),T.select(\\\"text.dimlabel\\\").attr(\\\"text-anchor\\\",\\\"middle\\\").attr(\\\"alignment-baseline\\\",\\\"baseline\\\").attr(\\\"cursor\\\",function(t){return\\\"fixed\\\"===t.parcatsViewModel.arrangement?\\\"default\\\":\\\"ew-resize\\\"}).attr(\\\"x\\\",function(t){return t.width/2}).attr(\\\"y\\\",-5).text(function(t,e){return 0===e?t.parcatsViewModel.model.dimensions[t.model.dimensionInd].dimensionLabel:null}).each(function(t){s.font(n.select(this),t.parcatsViewModel.labelfont)}),T.selectAll(\\\"rect.bandrect\\\").on(\\\"mouseover\\\",M).on(\\\"mouseout\\\",S),T.exit().remove(),k.call(n.behavior.drag().origin(function(t){return{x:t.x,y:0}}).on(\\\"dragstart\\\",E).on(\\\"drag\\\",C).on(\\\"dragend\\\",L)),u.each(function(t){t.traceSelection=n.select(this),t.pathSelection=n.select(this).selectAll(\\\"g.paths\\\").selectAll(\\\"path.path\\\"),t.dimensionSelection=n.select(this).selectAll(\\\"g.dimensions\\\").selectAll(\\\"g.dimension\\\")}),u.exit().remove()}function h(t){return t.key}function f(t){var e=t.parcatsViewModel.dimensions.length,r=t.parcatsViewModel.dimensions[e-1].model.dimensionInd;return t.model.dimensionInd===r}function p(t,e){return t.model.rawColor>e.model.rawColor?1:t.model.rawColor<e.model.rawColor?-1:0}function d(t){if(!t.parcatsViewModel.dragDimension&&-1===t.parcatsViewModel.hoverinfoItems.indexOf(\\\"skip\\\")){o.raiseToTop(this),x(n.select(this));var e=v(t);if(t.parcatsViewModel.graphDiv.emit(\\\"plotly_hover\\\",{points:e,event:n.event}),-1===t.parcatsViewModel.hoverinfoItems.indexOf(\\\"none\\\")){var r,i,s,c=n.mouse(this)[0],u=t.parcatsViewModel.graphDiv,h=t.parcatsViewModel.trace,f=u._fullLayout,p=f._paperdiv.node().getBoundingClientRect(),d=t.parcatsViewModel.graphDiv.getBoundingClientRect();for(s=0;s<t.leftXs.length-1;s++)if(t.leftXs[s]+t.dimWidths[s]-2<=c&&c<=t.leftXs[s+1]+2){var g=t.parcatsViewModel.dimensions[s],m=t.parcatsViewModel.dimensions[s+1];r=(g.x+g.width+m.x)/2,i=(t.topYs[s]+t.topYs[s+1]+t.height)/2;break}var y=t.parcatsViewModel.x+r,b=t.parcatsViewModel.y+i,_=l.mostReadable(t.model.color,[\\\"black\\\",\\\"white\\\"]),w=t.model.count,k=w/t.parcatsViewModel.model.count,T={countLabel:w,probabilityLabel:k.toFixed(3)},A=[];-1!==t.parcatsViewModel.hoverinfoItems.indexOf(\\\"count\\\")&&A.push([\\\"Count:\\\",T.countLabel].join(\\\" \\\")),-1!==t.parcatsViewModel.hoverinfoItems.indexOf(\\\"probability\\\")&&A.push([\\\"P:\\\",T.probabilityLabel].join(\\\" \\\"));var M=A.join(\\\"<br>\\\"),S=n.mouse(u)[0];a.loneHover({trace:h,x:y-p.left+d.left,y:b-p.top+d.top,text:M,color:t.model.color,borderColor:\\\"black\\\",fontFamily:'Monaco, \\\"Courier New\\\", monospace',fontSize:10,fontColor:_,idealAlign:S<y?\\\"right\\\":\\\"left\\\",hovertemplate:(h.line||{}).hovertemplate,hovertemplateLabels:T,eventData:[{data:h._input,fullData:h,count:w,probability:k}]},{container:f._hoverlayer.node(),outerContainer:f._paper.node(),gd:u})}}}function g(t){if(!t.parcatsViewModel.dragDimension&&(y(n.select(this)),a.loneUnhover(t.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()),t.parcatsViewModel.pathSelection.sort(p),-1===t.parcatsViewModel.hoverinfoItems.indexOf(\\\"skip\\\"))){var e=v(t);t.parcatsViewModel.graphDiv.emit(\\\"plotly_unhover\\\",{points:e,event:n.event})}}function v(t){for(var e=[],r=P(t.parcatsViewModel),n=0;n<t.model.valueInds.length;n++){var i=t.model.valueInds[n];e.push({curveNumber:r,pointNumber:i})}return e}function m(t){if(-1===t.parcatsViewModel.hoverinfoItems.indexOf(\\\"skip\\\")){var e=v(t);t.parcatsViewModel.graphDiv.emit(\\\"plotly_click\\\",{points:e,event:n.event})}}function y(t){t.attr(\\\"fill\\\",function(t){return t.model.color}).attr(\\\"fill-opacity\\\",.6).attr(\\\"stroke\\\",\\\"lightgray\\\").attr(\\\"stroke-width\\\",.2).attr(\\\"stroke-opacity\\\",1)}function x(t){t.attr(\\\"fill-opacity\\\",.8).attr(\\\"stroke\\\",function(t){return l.mostReadable(t.model.color,[\\\"black\\\",\\\"white\\\"])}).attr(\\\"stroke-width\\\",.3)}function b(t){t.select(\\\"rect.catrect\\\").attr(\\\"stroke\\\",\\\"black\\\").attr(\\\"stroke-width\\\",1).attr(\\\"stroke-opacity\\\",1)}function _(t){t.attr(\\\"stroke\\\",\\\"black\\\").attr(\\\"stroke-width\\\",.2).attr(\\\"stroke-opacity\\\",1).attr(\\\"fill-opacity\\\",1)}function w(t){var e=t.parcatsViewModel.pathSelection,r=t.categoryViewModel.model.dimensionInd,n=t.categoryViewModel.model.categoryInd;return e.filter(function(e){return e.model.categoryInds[r]===n&&e.model.color===t.color})}function k(t,e,r){var i=n.select(t).datum().parcatsViewModel.graphDiv,a=n.select(t.parentNode).selectAll(\\\"rect.bandrect\\\"),o=[];a.each(function(t){w(t).each(function(t){Array.prototype.push.apply(o,v(t))})}),i.emit(e,{points:o,event:r})}function T(t,e,r){var i=n.select(t).datum(),a=i.parcatsViewModel.graphDiv,o=w(i),s=[];o.each(function(t){Array.prototype.push.apply(s,v(t))}),a.emit(e,{points:s,event:r})}function A(t,e){var r,i,a=n.select(e.parentNode).select(\\\"rect.catrect\\\"),o=a.node().getBoundingClientRect(),s=a.datum(),l=s.parcatsViewModel,c=l.model.dimensions[s.model.dimensionInd],u=l.trace,h=o.top+o.height/2;l.dimensions.length>1&&c.displayInd===l.dimensions.length-1?(r=o.left,i=\\\"left\\\"):(r=o.left+o.width,i=\\\"right\\\");var f=s.model.count,p=s.model.categoryLabel,d=f/s.parcatsViewModel.model.count,g={countLabel:f,categoryLabel:p,probabilityLabel:d.toFixed(3)},v=[];-1!==s.parcatsViewModel.hoverinfoItems.indexOf(\\\"count\\\")&&v.push([\\\"Count:\\\",g.countLabel].join(\\\" \\\")),-1!==s.parcatsViewModel.hoverinfoItems.indexOf(\\\"probability\\\")&&v.push([\\\"P(\\\"+g.categoryLabel+\\\"):\\\",g.probabilityLabel].join(\\\" \\\"));var m=v.join(\\\"<br>\\\");return{trace:u,x:r-t.left,y:h-t.top,text:m,color:\\\"lightgray\\\",borderColor:\\\"black\\\",fontFamily:'Monaco, \\\"Courier New\\\", monospace',fontSize:12,fontColor:\\\"black\\\",idealAlign:i,hovertemplate:u.hovertemplate,hovertemplateLabels:g,eventData:[{data:u._input,fullData:u,count:f,category:p,probability:d}]}}function M(t){if(!t.parcatsViewModel.dragDimension&&-1===t.parcatsViewModel.hoverinfoItems.indexOf(\\\"skip\\\")){if(n.mouse(this)[1]<-1)return;var e,r=t.parcatsViewModel.graphDiv,i=r._fullLayout,s=i._paperdiv.node().getBoundingClientRect(),c=t.parcatsViewModel.hoveron;if(\\\"color\\\"===c?(!function(t){var e=n.select(t).datum(),r=w(e);x(r),r.each(function(){o.raiseToTop(this)}),n.select(t.parentNode).selectAll(\\\"rect.bandrect\\\").filter(function(t){return t.color===e.color}).each(function(){o.raiseToTop(this),n.select(this).attr(\\\"stroke\\\",\\\"black\\\").attr(\\\"stroke-width\\\",1.5)})}(this),T(this,\\\"plotly_hover\\\",n.event)):(!function(t){n.select(t.parentNode).selectAll(\\\"rect.bandrect\\\").each(function(t){var e=w(t);x(e),e.each(function(){o.raiseToTop(this)})}),n.select(t.parentNode).select(\\\"rect.catrect\\\").attr(\\\"stroke\\\",\\\"black\\\").attr(\\\"stroke-width\\\",2.5)}(this),k(this,\\\"plotly_hover\\\",n.event)),-1===t.parcatsViewModel.hoverinfoItems.indexOf(\\\"none\\\"))\\\"category\\\"===c?e=A(s,this):\\\"color\\\"===c?e=function(t,e){var r,i,a=e.getBoundingClientRect(),o=n.select(e).datum(),s=o.categoryViewModel,c=s.parcatsViewModel,u=c.model.dimensions[s.model.dimensionInd],h=c.trace,f=a.y+a.height/2;c.dimensions.length>1&&u.displayInd===c.dimensions.length-1?(r=a.left,i=\\\"left\\\"):(r=a.left+a.width,i=\\\"right\\\");var p=s.model.categoryLabel,d=o.parcatsViewModel.model.count,g=0;o.categoryViewModel.bands.forEach(function(t){t.color===o.color&&(g+=t.count)});var v=s.model.count,m=0;c.pathSelection.each(function(t){t.model.color===o.color&&(m+=t.model.count)});var y=g/d,x=g/m,b=g/v,_={countLabel:d,categoryLabel:p,probabilityLabel:y.toFixed(3)},w=[];-1!==s.parcatsViewModel.hoverinfoItems.indexOf(\\\"count\\\")&&w.push([\\\"Count:\\\",_.countLabel].join(\\\" \\\")),-1!==s.parcatsViewModel.hoverinfoItems.indexOf(\\\"probability\\\")&&(w.push(\\\"P(color \\\\u2229 \\\"+p+\\\"): \\\"+_.probabilityLabel),w.push(\\\"P(\\\"+p+\\\" | color): \\\"+x.toFixed(3)),w.push(\\\"P(color | \\\"+p+\\\"): \\\"+b.toFixed(3)));var k=w.join(\\\"<br>\\\"),T=l.mostReadable(o.color,[\\\"black\\\",\\\"white\\\"]);return{trace:h,x:r-t.left,y:f-t.top,text:k,color:o.color,borderColor:\\\"black\\\",fontFamily:'Monaco, \\\"Courier New\\\", monospace',fontColor:T,fontSize:10,idealAlign:i,hovertemplate:h.hovertemplate,hovertemplateLabels:_,eventData:[{data:h._input,fullData:h,category:p,count:d,probability:y,categorycount:v,colorcount:m,bandcolorcount:g}]}}(s,this):\\\"dimension\\\"===c&&(e=function(t,e){var r=[];return n.select(e.parentNode.parentNode).selectAll(\\\"g.category\\\").select(\\\"rect.catrect\\\").each(function(){r.push(A(t,this))}),r}(s,this)),e&&a.loneHover(e,{container:i._hoverlayer.node(),outerContainer:i._paper.node(),gd:r})}}function S(t){var e=t.parcatsViewModel;if(!e.dragDimension&&(y(e.pathSelection),b(e.dimensionSelection.selectAll(\\\"g.category\\\")),_(e.dimensionSelection.selectAll(\\\"g.category\\\").selectAll(\\\"rect.bandrect\\\")),a.loneUnhover(e.graphDiv._fullLayout._hoverlayer.node()),e.pathSelection.sort(p),-1===e.hoverinfoItems.indexOf(\\\"skip\\\"))){\\\"color\\\"===t.parcatsViewModel.hoveron?T(this,\\\"plotly_unhover\\\",n.event):k(this,\\\"plotly_unhover\\\",n.event)}}function E(t){\\\"fixed\\\"!==t.parcatsViewModel.arrangement&&(t.dragDimensionDisplayInd=t.model.displayInd,t.initialDragDimensionDisplayInds=t.parcatsViewModel.model.dimensions.map(function(t){return t.displayInd}),t.dragHasMoved=!1,t.dragCategoryDisplayInd=null,n.select(this).selectAll(\\\"g.category\\\").select(\\\"rect.catrect\\\").each(function(e){var r=n.mouse(this)[0],i=n.mouse(this)[1];-2<=r&&r<=e.width+2&&-2<=i&&i<=e.height+2&&(t.dragCategoryDisplayInd=e.model.displayInd,t.initialDragCategoryDisplayInds=t.model.categories.map(function(t){return t.displayInd}),e.model.dragY=e.y,o.raiseToTop(this.parentNode),n.select(this.parentNode).selectAll(\\\"rect.bandrect\\\").each(function(e){e.y<i&&i<=e.y+e.height&&(t.potentialClickBand=this)}))}),t.parcatsViewModel.dragDimension=t,a.loneUnhover(t.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()))}function C(t){if(\\\"fixed\\\"!==t.parcatsViewModel.arrangement&&(t.dragHasMoved=!0,null!==t.dragDimensionDisplayInd)){var e=t.dragDimensionDisplayInd,r=e-1,i=e+1,a=t.parcatsViewModel.dimensions[e];if(null!==t.dragCategoryDisplayInd){var o=a.categories[t.dragCategoryDisplayInd];o.model.dragY+=n.event.dy;var s=o.model.dragY,l=o.model.displayInd,c=a.categories,u=c[l-1],h=c[l+1];void 0!==u&&s<u.y+u.height/2&&(o.model.displayInd=u.model.displayInd,u.model.displayInd=l),void 0!==h&&s+o.height>h.y+h.height/2&&(o.model.displayInd=h.model.displayInd,h.model.displayInd=l),t.dragCategoryDisplayInd=o.model.displayInd}if(null===t.dragCategoryDisplayInd||\\\"freeform\\\"===t.parcatsViewModel.arrangement){a.model.dragX=n.event.x;var f=t.parcatsViewModel.dimensions[r],p=t.parcatsViewModel.dimensions[i];void 0!==f&&a.model.dragX<f.x+f.width&&(a.model.displayInd=f.model.displayInd,f.model.displayInd=e),void 0!==p&&a.model.dragX+a.width>p.x&&(a.model.displayInd=p.model.displayInd,p.model.displayInd=t.dragDimensionDisplayInd),t.dragDimensionDisplayInd=a.model.displayInd}R(t.parcatsViewModel),D(t.parcatsViewModel),z(t.parcatsViewModel),O(t.parcatsViewModel)}}function L(t){if(\\\"fixed\\\"!==t.parcatsViewModel.arrangement&&null!==t.dragDimensionDisplayInd){n.select(this).selectAll(\\\"text\\\").attr(\\\"font-weight\\\",\\\"normal\\\");var e={},r=P(t.parcatsViewModel),a=t.parcatsViewModel.model.dimensions.map(function(t){return t.displayInd}),o=t.initialDragDimensionDisplayInds.some(function(t,e){return t!==a[e]});o&&a.forEach(function(r,n){var i=t.parcatsViewModel.model.dimensions[n].containerInd;e[\\\"dimensions[\\\"+i+\\\"].displayindex\\\"]=r});var s=!1;if(null!==t.dragCategoryDisplayInd){var l=t.model.categories.map(function(t){return t.displayInd});if(s=t.initialDragCategoryDisplayInds.some(function(t,e){return t!==l[e]})){var c=t.model.categories.slice().sort(function(t,e){return t.displayInd-e.displayInd}),u=c.map(function(t){return t.categoryValue}),h=c.map(function(t){return t.categoryLabel});e[\\\"dimensions[\\\"+t.model.containerInd+\\\"].categoryarray\\\"]=[u],e[\\\"dimensions[\\\"+t.model.containerInd+\\\"].ticktext\\\"]=[h],e[\\\"dimensions[\\\"+t.model.containerInd+\\\"].categoryorder\\\"]=\\\"array\\\"}}if(-1===t.parcatsViewModel.hoverinfoItems.indexOf(\\\"skip\\\")&&!t.dragHasMoved&&t.potentialClickBand&&(\\\"color\\\"===t.parcatsViewModel.hoveron?T(t.potentialClickBand,\\\"plotly_click\\\",n.event.sourceEvent):k(t.potentialClickBand,\\\"plotly_click\\\",n.event.sourceEvent)),t.model.dragX=null,null!==t.dragCategoryDisplayInd)t.parcatsViewModel.dimensions[t.dragDimensionDisplayInd].categories[t.dragCategoryDisplayInd].model.dragY=null,t.dragCategoryDisplayInd=null;t.dragDimensionDisplayInd=null,t.parcatsViewModel.dragDimension=null,t.dragHasMoved=null,t.potentialClickBand=null,R(t.parcatsViewModel),D(t.parcatsViewModel),n.transition().duration(300).ease(\\\"cubic-in-out\\\").each(function(){z(t.parcatsViewModel,!0),O(t.parcatsViewModel,!0)}).each(\\\"end\\\",function(){(o||s)&&i.restyle(t.parcatsViewModel.graphDiv,e,[r])})}}function P(t){for(var e,r=t.graphDiv._fullData,n=0;n<r.length;n++)if(t.key===r[n].uid){e=n;break}return e}function O(t,e){var r;void 0===e&&(e=!1),t.pathSelection.data(function(t){return t.paths},h),(r=t.pathSelection,e?r.transition():r).attr(\\\"d\\\",function(t){return t.svgD})}function z(t,e){function r(t){return e?t.transition():t}void 0===e&&(e=!1),t.dimensionSelection.data(function(t){return t.dimensions},h);var i=t.dimensionSelection.selectAll(\\\"g.category\\\").data(function(t){return t.categories},h);r(t.dimensionSelection).attr(\\\"transform\\\",function(t){return\\\"translate(\\\"+t.x+\\\", 0)\\\"}),r(i).attr(\\\"transform\\\",function(t){return\\\"translate(0, \\\"+t.y+\\\")\\\"}),i.select(\\\".dimlabel\\\").text(function(t,e){return 0===e?t.parcatsViewModel.model.dimensions[t.model.dimensionInd].dimensionLabel:null}),i.select(\\\".catlabel\\\").attr(\\\"text-anchor\\\",function(t){return f(t)?\\\"start\\\":\\\"end\\\"}).attr(\\\"x\\\",function(t){return f(t)?t.width+5:-5}).each(function(t){var e,r;f(t)?(e=t.width+5,r=\\\"start\\\"):(e=-5,r=\\\"end\\\"),n.select(this).selectAll(\\\"tspan\\\").attr(\\\"x\\\",e).attr(\\\"text-anchor\\\",r)});var a=i.selectAll(\\\"rect.bandrect\\\").data(function(t){return t.bands},h),s=a.enter().append(\\\"rect\\\").attr(\\\"class\\\",\\\"bandrect\\\").attr(\\\"cursor\\\",\\\"move\\\").attr(\\\"stroke-opacity\\\",0).attr(\\\"fill\\\",function(t){return t.color}).attr(\\\"fill-opacity\\\",0);a.attr(\\\"fill\\\",function(t){return t.color}).attr(\\\"width\\\",function(t){return t.width}).attr(\\\"height\\\",function(t){return t.height}).attr(\\\"y\\\",function(t){return t.y}),_(s),a.each(function(){o.raiseToTop(this)}),a.exit().remove()}function I(t,e,r,i,a){var o,s,l=[],c=[];for(s=0;s<r.length-1;s++)o=n.interpolateNumber(r[s]+t[s],t[s+1]),l.push(o(a)),c.push(o(1-a));var u=\\\"M \\\"+t[0]+\\\",\\\"+e[0];for(u+=\\\"l\\\"+r[0]+\\\",0 \\\",s=1;s<r.length;s++)u+=\\\"C\\\"+l[s-1]+\\\",\\\"+e[s-1]+\\\" \\\"+c[s-1]+\\\",\\\"+e[s]+\\\" \\\"+t[s]+\\\",\\\"+e[s],u+=\\\"l\\\"+r[s]+\\\",0 \\\";for(u+=\\\"l0,\\\"+i+\\\" \\\",u+=\\\"l -\\\"+r[r.length-1]+\\\",0 \\\",s=r.length-2;s>=0;s--)u+=\\\"C\\\"+c[s]+\\\",\\\"+(e[s+1]+i)+\\\" \\\"+l[s]+\\\",\\\"+(e[s]+i)+\\\" \\\"+(t[s]+r[s])+\\\",\\\"+(e[s]+i),u+=\\\"l-\\\"+r[s]+\\\",0 \\\";return u+=\\\"Z\\\"}function D(t){var e=t.dimensions,r=t.model,n=e.map(function(t){return t.categories.map(function(t){return t.y})}),i=t.model.dimensions.map(function(t){return t.categories.map(function(t){return t.displayInd})}),a=t.model.dimensions.map(function(t){return t.displayInd}),o=t.dimensions.map(function(t){return t.model.dimensionInd}),s=e.map(function(t){return t.x}),l=e.map(function(t){return t.width}),c=[];for(var u in r.paths)r.paths.hasOwnProperty(u)&&c.push(r.paths[u]);function h(t){var e=t.categoryInds.map(function(t,e){return i[e][t]});return o.map(function(t){return e[t]})}c.sort(function(e,r){var n=h(e),i=h(r);return\\\"backward\\\"===t.sortpaths&&(n.reverse(),i.reverse()),n.push(e.valueInds[0]),i.push(r.valueInds[0]),t.bundlecolors&&(n.unshift(e.rawColor),i.unshift(r.rawColor)),n<i?-1:n>i?1:0});for(var f=new Array(c.length),p=e[0].model.count,d=e[0].categories.map(function(t){return t.height}).reduce(function(t,e){return t+e}),g=0;g<c.length;g++){var v,m=c[g];v=p>0?d*(m.count/p):0;for(var y,x=new Array(n.length),b=0;b<m.categoryInds.length;b++){var _=m.categoryInds[b],w=i[b][_],k=a[b];x[k]=n[k][w],n[k][w]+=v;var T=t.dimensions[k].categories[w],A=T.bands.length,M=T.bands[A-1];if(void 0===M||m.rawColor!==M.rawColor){var S=void 0===M?0:M.y+M.height;T.bands.push({key:S,color:m.color,rawColor:m.rawColor,height:v,width:T.width,count:m.count,y:S,categoryViewModel:T,parcatsViewModel:t})}else{var E=T.bands[A-1];E.height+=v,E.count+=m.count}}y=\\\"hspline\\\"===t.pathShape?I(s,x,l,v,.5):I(s,x,l,v,0),f[g]={key:m.valueInds[0],model:m,height:v,leftXs:s,topYs:x,dimWidths:l,svgD:y,parcatsViewModel:t}}t.paths=f}function R(t){var e=t.model.dimensions.map(function(t){return{displayInd:t.displayInd,dimensionInd:t.dimensionInd}});e.sort(function(t,e){return t.displayInd-e.displayInd});var r=[];for(var n in e){var i=e[n].dimensionInd,a=t.model.dimensions[i];r.push(F(t,a))}t.dimensions=r}function F(t,e){var r,n=t.model.dimensions.length,i=e.displayInd;r=40+(n>1?(t.width-80-16)/(n-1):0)*i;var a,o,s,l,c,u=[],h=t.model.maxCats,f=e.categories.length,p=e.count,d=t.height-8*(h-1),g=8*(h-f)/2,v=e.categories.map(function(t){return{displayInd:t.displayInd,categoryInd:t.categoryInd}});for(v.sort(function(t,e){return t.displayInd-e.displayInd}),c=0;c<f;c++)l=v[c].categoryInd,o=e.categories[l],a=p>0?o.count/p*d:0,s={key:o.valueInds[0],model:o,width:16,height:a,y:null!==o.dragY?o.dragY:g,bands:[],parcatsViewModel:t},g=g+a+8,u.push(s);return{key:e.dimensionInd,x:null!==e.dragX?e.dragX:r,y:0,width:16,model:e,categories:u,parcatsViewModel:t,dragCategoryDisplayInd:null,dragDimensionDisplayInd:null,initialDragDimensionDisplayInds:null,initialDragCategoryDisplayInds:null,dragHasMoved:null,potentialClickBand:null}}e.exports=function(t,e,r,n){u(r,t,n,e)}},{\\\"../../components/drawing\\\":614,\\\"../../components/fx\\\":632,\\\"../../lib\\\":719,\\\"../../lib/svg_text_utils\\\":743,\\\"../../plot_api/plot_api\\\":754,d3:163,tinycolor2:537}],1073:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./parcats\\\");e.exports=function(t,e,r,i){var a=t._fullLayout,o=a._paper,s=a._size;n(t,o,e,{width:s.w,height:s.h,margin:{t:s.t,r:s.r,b:s.b,l:s.l}},r,i)}},{\\\"./parcats\\\":1072}],1074:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/colorscale/attributes\\\"),i=t(\\\"../../plots/cartesian/layout_attributes\\\"),a=t(\\\"../../plots/font_attributes\\\"),o=t(\\\"../../plots/domain\\\").attributes,s=t(\\\"../../lib/extend\\\").extendFlat,l=t(\\\"../../plot_api/plot_template\\\").templatedArray;e.exports={domain:o({name:\\\"parcoords\\\",trace:!0,editType:\\\"plot\\\"}),labelangle:{valType:\\\"angle\\\",dflt:0,editType:\\\"plot\\\"},labelside:{valType:\\\"enumerated\\\",values:[\\\"top\\\",\\\"bottom\\\"],dflt:\\\"top\\\",editType:\\\"plot\\\"},labelfont:a({editType:\\\"plot\\\"}),tickfont:a({editType:\\\"plot\\\"}),rangefont:a({editType:\\\"plot\\\"}),dimensions:l(\\\"dimension\\\",{label:{valType:\\\"string\\\",editType:\\\"plot\\\"},tickvals:s({},i.tickvals,{editType:\\\"plot\\\"}),ticktext:s({},i.ticktext,{editType:\\\"plot\\\"}),tickformat:s({},i.tickformat,{editType:\\\"plot\\\"}),visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"plot\\\"},range:{valType:\\\"info_array\\\",items:[{valType:\\\"number\\\",editType:\\\"plot\\\"},{valType:\\\"number\\\",editType:\\\"plot\\\"}],editType:\\\"plot\\\"},constraintrange:{valType:\\\"info_array\\\",freeLength:!0,dimensions:\\\"1-2\\\",items:[{valType:\\\"number\\\",editType:\\\"plot\\\"},{valType:\\\"number\\\",editType:\\\"plot\\\"}],editType:\\\"plot\\\"},multiselect:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"plot\\\"},values:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},editType:\\\"calc\\\"}),line:s({editType:\\\"calc\\\"},n(\\\"line\\\",{colorscaleDflt:\\\"Viridis\\\",autoColorDflt:!1,editTypeOverride:\\\"calc\\\"}))}},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../lib/extend\\\":710,\\\"../../plot_api/plot_template\\\":757,\\\"../../plots/cartesian/layout_attributes\\\":779,\\\"../../plots/domain\\\":792,\\\"../../plots/font_attributes\\\":793}],1075:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./constants\\\"),i=t(\\\"d3\\\"),a=t(\\\"../../lib/gup\\\").keyFun,o=t(\\\"../../lib/gup\\\").repeat,s=t(\\\"../../lib\\\").sorterAsc,l=n.bar.snapRatio;function c(t,e){return t*(1-l)+e*l}var u=n.bar.snapClose;function h(t,e){return t*(1-u)+e*u}function f(t,e,r,n){if(function(t,e){for(var r=0;r<e.length;r++)if(t>=e[r][0]&&t<=e[r][1])return!0;return!1}(r,n))return r;var i=t?-1:1,a=0,o=e.length-1;if(i<0){var s=a;a=o,o=s}for(var l=e[a],u=l,f=a;i*f<i*o;f+=i){var p=f+i,d=e[p];if(i*r<i*h(l,d))return c(l,u);if(i*r<i*d||p===o)return c(d,l);u=l,l=d}}function p(t){t.attr(\\\"x\\\",-n.bar.captureWidth/2).attr(\\\"width\\\",n.bar.captureWidth)}function d(t){t.attr(\\\"visibility\\\",\\\"visible\\\").style(\\\"visibility\\\",\\\"visible\\\").attr(\\\"fill\\\",\\\"yellow\\\").attr(\\\"opacity\\\",0)}function g(t){if(!t.brush.filterSpecified)return\\\"0,\\\"+t.height;for(var e,r,n,i=v(t.brush.filter.getConsolidated(),t.height),a=[0],o=i.length?i[0][0]:null,s=0;s<i.length;s++)r=(e=i[s])[1]-e[0],a.push(o),a.push(r),(n=s+1)<i.length&&(o=i[n][0]-e[1]);return a.push(t.height),a}function v(t,e){return t.map(function(t){return t.map(function(t){return Math.max(0,t*e)}).sort(s)})}function m(){i.select(document.body).style(\\\"cursor\\\",null)}function y(t){t.attr(\\\"stroke-dasharray\\\",g)}function x(t,e){var r=i.select(t).selectAll(\\\".highlight, .highlight-shadow\\\");y(e?r.transition().duration(n.bar.snapDuration).each(\\\"end\\\",e):r)}function b(t,e){var r,i=t.brush,a=NaN,o={};if(i.filterSpecified){var s=t.height,l=i.filter.getConsolidated(),c=v(l,s),u=NaN,h=NaN,f=NaN;for(r=0;r<=c.length;r++){var p=c[r];if(p&&p[0]<=e&&e<=p[1]){u=r;break}if(h=r?r-1:NaN,p&&p[0]>e){f=r;break}}if(a=u,isNaN(a)&&(a=isNaN(h)||isNaN(f)?isNaN(h)?f:h:e-c[h][1]<c[f][0]-e?h:f),!isNaN(a)){var d=c[a],g=function(t,e){var r=n.bar.handleHeight;if(!(e>t[1]+r||e<t[0]-r))return e>=.9*t[1]+.1*t[0]?\\\"n\\\":e<=.9*t[0]+.1*t[1]?\\\"s\\\":\\\"ns\\\"}(d,e);g&&(o.interval=l[a],o.intervalPix=d,o.region=g)}}if(t.ordinal&&!o.region){var m=t.unitTickvals,y=t.unitToPaddedPx.invert(e);for(r=0;r<m.length;r++){var x=[.25*m[Math.max(r-1,0)]+.75*m[r],.25*m[Math.min(r+1,m.length-1)]+.75*m[r]];if(y>=x[0]&&y<=x[1]){o.clickableOrdinalRange=x;break}}}return o}function _(t,e){i.event.sourceEvent.stopPropagation();var r=e.height-i.mouse(t)[1]-2*n.verticalPadding,a=e.brush.svgBrush;a.wasDragged=!0,a._dragging=!0,a.grabbingBar?a.newExtent=[r-a.grabPoint,r+a.barLength-a.grabPoint].map(e.unitToPaddedPx.invert):a.newExtent=[a.startExtent,e.unitToPaddedPx.invert(r)].sort(s),e.brush.filterSpecified=!0,a.extent=a.stayingIntervals.concat([a.newExtent]),a.brushCallback(e),x(t.parentNode)}function w(t,e){var r=b(e,e.height-i.mouse(t)[1]-2*n.verticalPadding),a=\\\"crosshair\\\";r.clickableOrdinalRange?a=\\\"pointer\\\":r.region&&(a=r.region+\\\"-resize\\\"),i.select(document.body).style(\\\"cursor\\\",a)}function k(t){t.on(\\\"mousemove\\\",function(t){i.event.preventDefault(),t.parent.inBrushDrag||w(this,t)}).on(\\\"mouseleave\\\",function(t){t.parent.inBrushDrag||m()}).call(i.behavior.drag().on(\\\"dragstart\\\",function(t){!function(t,e){i.event.sourceEvent.stopPropagation();var r=e.height-i.mouse(t)[1]-2*n.verticalPadding,a=e.unitToPaddedPx.invert(r),o=e.brush,s=b(e,r),l=s.interval,c=o.svgBrush;if(c.wasDragged=!1,c.grabbingBar=\\\"ns\\\"===s.region,c.grabbingBar){var u=l.map(e.unitToPaddedPx);c.grabPoint=r-u[0]-n.verticalPadding,c.barLength=u[1]-u[0]}c.clickableOrdinalRange=s.clickableOrdinalRange,c.stayingIntervals=e.multiselect&&o.filterSpecified?o.filter.getConsolidated():[],l&&(c.stayingIntervals=c.stayingIntervals.filter(function(t){return t[0]!==l[0]&&t[1]!==l[1]})),c.startExtent=s.region?l[\\\"s\\\"===s.region?1:0]:a,e.parent.inBrushDrag=!0,c.brushStartCallback()}(this,t)}).on(\\\"drag\\\",function(t){_(this,t)}).on(\\\"dragend\\\",function(t){!function(t,e){var r=e.brush,n=r.filter,a=r.svgBrush;a._dragging||(w(t,e),_(t,e),e.brush.svgBrush.wasDragged=!1),a._dragging=!1,i.event.sourceEvent.stopPropagation();var o=a.grabbingBar;if(a.grabbingBar=!1,a.grabLocation=void 0,e.parent.inBrushDrag=!1,m(),!a.wasDragged)return a.wasDragged=void 0,a.clickableOrdinalRange?r.filterSpecified&&e.multiselect?a.extent.push(a.clickableOrdinalRange):(a.extent=[a.clickableOrdinalRange],r.filterSpecified=!0):o?(a.extent=a.stayingIntervals,0===a.extent.length&&A(r)):A(r),a.brushCallback(e),x(t.parentNode),void a.brushEndCallback(r.filterSpecified?n.getConsolidated():[]);var s=function(){n.set(n.getConsolidated())};if(e.ordinal){var l=e.unitTickvals;l[l.length-1]<l[0]&&l.reverse(),a.newExtent=[f(0,l,a.newExtent[0],a.stayingIntervals),f(1,l,a.newExtent[1],a.stayingIntervals)];var c=a.newExtent[1]>a.newExtent[0];a.extent=a.stayingIntervals.concat(c?[a.newExtent]:[]),a.extent.length||A(r),a.brushCallback(e),c?x(t.parentNode,s):(s(),x(t.parentNode))}else s();a.brushEndCallback(r.filterSpecified?n.getConsolidated():[])}(this,t)}))}function T(t,e){return t[0]-e[0]}function A(t){t.filterSpecified=!1,t.svgBrush.extent=[[-1/0,1/0]]}function M(t){for(var e,r=t.slice(),n=[],i=r.shift();i;){for(e=i.slice();(i=r.shift())&&i[0]<=e[1];)e[1]=Math.max(e[1],i[1]);n.push(e)}return n}e.exports={makeBrush:function(t,e,r,n,i,a){var o,l=function(){var t,e,r=[];return{set:function(n){1===(r=n.map(function(t){return t.slice().sort(s)}).sort(T)).length&&r[0][0]===-1/0&&r[0][1]===1/0&&(r=[[0,-1]]),t=M(r),e=r.reduce(function(t,e){return[Math.min(t[0],e[0]),Math.max(t[1],e[1])]},[1/0,-1/0])},get:function(){return r.slice()},getConsolidated:function(){return t},getBounds:function(){return e}}}();return l.set(r),{filter:l,filterSpecified:e,svgBrush:{extent:[],brushStartCallback:n,brushCallback:(o=i,function(t){var e=t.brush,r=function(t){return t.svgBrush.extent.map(function(t){return t.slice()})}(e).slice();e.filter.set(r),o()}),brushEndCallback:a}}},ensureAxisBrush:function(t){var e=t.selectAll(\\\".\\\"+n.cn.axisBrush).data(o,a);e.enter().append(\\\"g\\\").classed(n.cn.axisBrush,!0),function(t){var e=t.selectAll(\\\".background\\\").data(o);e.enter().append(\\\"rect\\\").classed(\\\"background\\\",!0).call(p).call(d).style(\\\"pointer-events\\\",\\\"auto\\\").attr(\\\"transform\\\",\\\"translate(0 \\\"+n.verticalPadding+\\\")\\\"),e.call(k).attr(\\\"height\\\",function(t){return t.height-n.verticalPadding});var r=t.selectAll(\\\".highlight-shadow\\\").data(o);r.enter().append(\\\"line\\\").classed(\\\"highlight-shadow\\\",!0).attr(\\\"x\\\",-n.bar.width/2).attr(\\\"stroke-width\\\",n.bar.width+n.bar.strokeWidth).attr(\\\"stroke\\\",n.bar.strokeColor).attr(\\\"opacity\\\",n.bar.strokeOpacity).attr(\\\"stroke-linecap\\\",\\\"butt\\\"),r.attr(\\\"y1\\\",function(t){return t.height}).call(y);var i=t.selectAll(\\\".highlight\\\").data(o);i.enter().append(\\\"line\\\").classed(\\\"highlight\\\",!0).attr(\\\"x\\\",-n.bar.width/2).attr(\\\"stroke-width\\\",n.bar.width-n.bar.strokeWidth).attr(\\\"stroke\\\",n.bar.fillColor).attr(\\\"opacity\\\",n.bar.fillOpacity).attr(\\\"stroke-linecap\\\",\\\"butt\\\"),i.attr(\\\"y1\\\",function(t){return t.height}).call(y)}(e)},cleanRanges:function(t,e){if(Array.isArray(t[0])?(t=t.map(function(t){return t.sort(s)}),t=e.multiselect?M(t.sort(T)):[t[0]]):t=[t.sort(s)],e.tickvals){var r=e.tickvals.slice().sort(s);if(!(t=t.map(function(t){var e=[f(0,r,t[0],[]),f(1,r,t[1],[])];if(e[1]>e[0])return e}).filter(function(t){return t})).length)return}return t.length>1?t:t[0]}}},{\\\"../../lib\\\":719,\\\"../../lib/gup\\\":717,\\\"./constants\\\":1078,d3:163}],1076:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../plots/get_data\\\").getModuleCalcData,a=t(\\\"./plot\\\"),o=t(\\\"../../constants/xmlns_namespaces\\\");r.name=\\\"parcoords\\\",r.plot=function(t){var e=i(t.calcdata,\\\"parcoords\\\")[0];e.length&&a(t,e)},r.clean=function(t,e,r,n){var i=n._has&&n._has(\\\"parcoords\\\"),a=e._has&&e._has(\\\"parcoords\\\");i&&!a&&(n._paperdiv.selectAll(\\\".parcoords\\\").remove(),n._glimages.selectAll(\\\"*\\\").remove())},r.toSVG=function(t){var e=t._fullLayout._glimages,r=n.select(t).selectAll(\\\".svg-container\\\");r.filter(function(t,e){return e===r.size()-1}).selectAll(\\\".gl-canvas-context, .gl-canvas-focus\\\").each(function(){var t=this.toDataURL(\\\"image/png\\\");e.append(\\\"svg:image\\\").attr({xmlns:o.svg,\\\"xlink:href\\\":t,preserveAspectRatio:\\\"none\\\",x:0,y:0,width:this.width,height:this.height})}),window.setTimeout(function(){n.selectAll(\\\"#filterBarPattern\\\").attr(\\\"id\\\",\\\"filterBarPattern\\\")},60)}},{\\\"../../constants/xmlns_namespaces\\\":696,\\\"../../plots/get_data\\\":802,\\\"./plot\\\":1085,d3:163}],1077:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\").isArrayOrTypedArray,i=t(\\\"../../components/colorscale\\\"),a=t(\\\"../../lib/gup\\\").wrap;e.exports=function(t,e){var r,o;return i.hasColorscale(e,\\\"line\\\")&&n(e.line.color)?(r=e.line.color,o=i.extractOpts(e.line).colorscale,i.calc(t,e,{vals:r,containerStr:\\\"line\\\",cLetter:\\\"c\\\"})):(r=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=.5;return e}(e._length),o=[[0,e.line.color],[1,e.line.color]]),a({lineColor:r,cscale:o})}},{\\\"../../components/colorscale\\\":605,\\\"../../lib\\\":719,\\\"../../lib/gup\\\":717}],1078:[function(t,e,r){\\\"use strict\\\";e.exports={maxDimensionCount:60,overdrag:45,verticalPadding:2,tickDistance:50,canvasPixelRatio:1,blockLineCount:5e3,layers:[\\\"contextLineLayer\\\",\\\"focusLineLayer\\\",\\\"pickLineLayer\\\"],axisTitleOffset:28,axisExtentOffset:10,deselectedLineColor:\\\"#777\\\",bar:{width:4,captureWidth:10,fillColor:\\\"magenta\\\",fillOpacity:1,snapDuration:150,snapRatio:.25,snapClose:.01,strokeColor:\\\"white\\\",strokeOpacity:1,strokeWidth:1,handleHeight:8,handleOpacity:1,handleOverlap:0},cn:{axisExtentText:\\\"axis-extent-text\\\",parcoordsLineLayers:\\\"parcoords-line-layers\\\",parcoordsLineLayer:\\\"parcoords-lines\\\",parcoords:\\\"parcoords\\\",parcoordsControlView:\\\"parcoords-control-view\\\",yAxis:\\\"y-axis\\\",axisOverlays:\\\"axis-overlays\\\",axis:\\\"axis\\\",axisHeading:\\\"axis-heading\\\",axisTitle:\\\"axis-title\\\",axisExtent:\\\"axis-extent\\\",axisExtentTop:\\\"axis-extent-top\\\",axisExtentTopText:\\\"axis-extent-top-text\\\",axisExtentBottom:\\\"axis-extent-bottom\\\",axisExtentBottomText:\\\"axis-extent-bottom-text\\\",axisBrush:\\\"axis-brush\\\"},id:{filterBarPattern:\\\"filter-bar-pattern\\\"}}},{}],1079:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../components/colorscale/helpers\\\").hasColorscale,a=t(\\\"../../components/colorscale/defaults\\\"),o=t(\\\"../../plots/domain\\\").defaults,s=t(\\\"../../plots/array_container_defaults\\\"),l=t(\\\"../../plots/cartesian/axes\\\"),c=t(\\\"./attributes\\\"),u=t(\\\"./axisbrush\\\"),h=t(\\\"./constants\\\").maxDimensionCount,f=t(\\\"./merge_length\\\");function p(t,e,r,i){function a(r,i){return n.coerce(t,e,c.dimensions,r,i)}var o=a(\\\"values\\\"),s=a(\\\"visible\\\");if(o&&o.length||(s=e.visible=!1),s){a(\\\"label\\\"),a(\\\"tickvals\\\"),a(\\\"ticktext\\\"),a(\\\"tickformat\\\");var h=a(\\\"range\\\");e._ax={_id:\\\"y\\\",type:\\\"linear\\\",showexponent:\\\"all\\\",exponentformat:\\\"B\\\",range:h},l.setConvert(e._ax,i.layout),a(\\\"multiselect\\\");var f=a(\\\"constraintrange\\\");f&&(e.constraintrange=u.cleanRanges(f,e))}}e.exports=function(t,e,r,l){function u(r,i){return n.coerce(t,e,c,r,i)}var d=t.dimensions;Array.isArray(d)&&d.length>h&&(n.log(\\\"parcoords traces support up to \\\"+h+\\\" dimensions at the moment\\\"),d.splice(h));var g=s(t,e,{name:\\\"dimensions\\\",layout:l,handleItemDefaults:p}),v=function(t,e,r,o,s){var l=s(\\\"line.color\\\",r);if(i(t,\\\"line\\\")&&n.isArrayOrTypedArray(l)){if(l.length)return s(\\\"line.colorscale\\\"),a(t,e,o,s,{prefix:\\\"line.\\\",cLetter:\\\"c\\\"}),l.length;e.line.color=r}return 1/0}(t,e,r,l,u);o(e,l,u),Array.isArray(g)&&g.length||(e.visible=!1),f(e,g,\\\"values\\\",v);var m={family:l.font.family,size:Math.round(l.font.size/1.2),color:l.font.color};n.coerceFont(u,\\\"labelfont\\\",m),n.coerceFont(u,\\\"tickfont\\\",m),n.coerceFont(u,\\\"rangefont\\\",m),u(\\\"labelangle\\\"),u(\\\"labelside\\\")}},{\\\"../../components/colorscale/defaults\\\":603,\\\"../../components/colorscale/helpers\\\":604,\\\"../../lib\\\":719,\\\"../../plots/array_container_defaults\\\":763,\\\"../../plots/cartesian/axes\\\":767,\\\"../../plots/domain\\\":792,\\\"./attributes\\\":1074,\\\"./axisbrush\\\":1075,\\\"./constants\\\":1078,\\\"./merge_length\\\":1083}],1080:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\").isTypedArray;r.convertTypedArray=function(t){return n(t)?Array.prototype.slice.call(t):t},r.isOrdinal=function(t){return!!t.tickvals},r.isVisible=function(t){return t.visible||!(\\\"visible\\\"in t)}},{\\\"../../lib\\\":719}],1081:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),calc:t(\\\"./calc\\\"),plot:t(\\\"./plot\\\"),colorbar:{container:\\\"line\\\",min:\\\"cmin\\\",max:\\\"cmax\\\"},moduleType:\\\"trace\\\",name:\\\"parcoords\\\",basePlotModule:t(\\\"./base_plot\\\"),categories:[\\\"gl\\\",\\\"regl\\\",\\\"noOpacity\\\",\\\"noHover\\\"],meta:{}}},{\\\"./attributes\\\":1074,\\\"./base_plot\\\":1076,\\\"./calc\\\":1077,\\\"./defaults\\\":1079,\\\"./plot\\\":1085}],1082:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"glslify\\\"),i=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nvarying vec4 fragColor;\\\\n\\\\nattribute vec4 p01_04, p05_08, p09_12, p13_16,\\\\n               p17_20, p21_24, p25_28, p29_32,\\\\n               p33_36, p37_40, p41_44, p45_48,\\\\n               p49_52, p53_56, p57_60, colors;\\\\n\\\\nuniform mat4 dim0A, dim1A, dim0B, dim1B, dim0C, dim1C, dim0D, dim1D,\\\\n             loA, hiA, loB, hiB, loC, hiC, loD, hiD;\\\\n\\\\nuniform vec2 resolution, viewBoxPos, viewBoxSize;\\\\nuniform sampler2D mask, palette;\\\\nuniform float maskHeight;\\\\nuniform float drwLayer; // 0: context, 1: focus, 2: pick\\\\nuniform vec4 contextColor;\\\\n\\\\nbool isPick    = (drwLayer > 1.5);\\\\nbool isContext = (drwLayer < 0.5);\\\\n\\\\nconst vec4 ZEROS = vec4(0.0, 0.0, 0.0, 0.0);\\\\nconst vec4 UNITS = vec4(1.0, 1.0, 1.0, 1.0);\\\\n\\\\nfloat val(mat4 p, mat4 v) {\\\\n    return dot(matrixCompMult(p, v) * UNITS, UNITS);\\\\n}\\\\n\\\\nfloat axisY(float ratio, mat4 A, mat4 B, mat4 C, mat4 D) {\\\\n    float y1 = val(A, dim0A) + val(B, dim0B) + val(C, dim0C) + val(D, dim0D);\\\\n    float y2 = val(A, dim1A) + val(B, dim1B) + val(C, dim1C) + val(D, dim1D);\\\\n    return y1 * (1.0 - ratio) + y2 * ratio;\\\\n}\\\\n\\\\nint iMod(int a, int b) {\\\\n    return a - b * (a / b);\\\\n}\\\\n\\\\nbool fOutside(float p, float lo, float hi) {\\\\n    return (lo < hi) && (lo > p || p > hi);\\\\n}\\\\n\\\\nbool vOutside(vec4 p, vec4 lo, vec4 hi) {\\\\n    return (\\\\n        fOutside(p[0], lo[0], hi[0]) ||\\\\n        fOutside(p[1], lo[1], hi[1]) ||\\\\n        fOutside(p[2], lo[2], hi[2]) ||\\\\n        fOutside(p[3], lo[3], hi[3])\\\\n    );\\\\n}\\\\n\\\\nbool mOutside(mat4 p, mat4 lo, mat4 hi) {\\\\n    return (\\\\n        vOutside(p[0], lo[0], hi[0]) ||\\\\n        vOutside(p[1], lo[1], hi[1]) ||\\\\n        vOutside(p[2], lo[2], hi[2]) ||\\\\n        vOutside(p[3], lo[3], hi[3])\\\\n    );\\\\n}\\\\n\\\\nbool outsideBoundingBox(mat4 A, mat4 B, mat4 C, mat4 D) {\\\\n    return mOutside(A, loA, hiA) ||\\\\n           mOutside(B, loB, hiB) ||\\\\n           mOutside(C, loC, hiC) ||\\\\n           mOutside(D, loD, hiD);\\\\n}\\\\n\\\\nbool outsideRasterMask(mat4 A, mat4 B, mat4 C, mat4 D) {\\\\n    mat4 pnts[4];\\\\n    pnts[0] = A;\\\\n    pnts[1] = B;\\\\n    pnts[2] = C;\\\\n    pnts[3] = D;\\\\n\\\\n    for(int i = 0; i < 4; ++i) {\\\\n        for(int j = 0; j < 4; ++j) {\\\\n            for(int k = 0; k < 4; ++k) {\\\\n                if(0 == iMod(\\\\n                    int(255.0 * texture2D(mask,\\\\n                        vec2(\\\\n                            (float(i * 2 + j / 2) + 0.5) / 8.0,\\\\n                            (pnts[i][j][k] * (maskHeight - 1.0) + 1.0) / maskHeight\\\\n                        ))[3]\\\\n                    ) / int(pow(2.0, float(iMod(j * 4 + k, 8)))),\\\\n                    2\\\\n                )) return true;\\\\n            }\\\\n        }\\\\n    }\\\\n    return false;\\\\n}\\\\n\\\\nvec4 position(bool isContext, float v, mat4 A, mat4 B, mat4 C, mat4 D) {\\\\n    float x = 0.5 * sign(v) + 0.5;\\\\n    float y = axisY(x, A, B, C, D);\\\\n    float z = 1.0 - abs(v);\\\\n\\\\n    z += isContext ? 0.0 : 2.0 * float(\\\\n        outsideBoundingBox(A, B, C, D) ||\\\\n        outsideRasterMask(A, B, C, D)\\\\n    );\\\\n\\\\n    return vec4(\\\\n        2.0 * (vec2(x, y) * viewBoxSize + viewBoxPos) / resolution - 1.0,\\\\n        z,\\\\n        1.0\\\\n    );\\\\n}\\\\n\\\\nvoid main() {\\\\n    mat4 A = mat4(p01_04, p05_08, p09_12, p13_16);\\\\n    mat4 B = mat4(p17_20, p21_24, p25_28, p29_32);\\\\n    mat4 C = mat4(p33_36, p37_40, p41_44, p45_48);\\\\n    mat4 D = mat4(p49_52, p53_56, p57_60, ZEROS);\\\\n\\\\n    float v = colors[3];\\\\n\\\\n    gl_Position = position(isContext, v, A, B, C, D);\\\\n\\\\n    fragColor =\\\\n        isContext ? vec4(contextColor) :\\\\n        isPick ? vec4(colors.rgb, 1.0) : texture2D(palette, vec2(abs(v), 0.5));\\\\n}\\\\n\\\"]),a=n([\\\"precision highp float;\\\\n#define GLSLIFY 1\\\\n\\\\nvarying vec4 fragColor;\\\\n\\\\nvoid main() {\\\\n    gl_FragColor = fragColor;\\\\n}\\\\n\\\"]),o=t(\\\"./constants\\\").maxDimensionCount,s=t(\\\"../../lib\\\"),l=1e-6,c=2048,u=new Uint8Array(4),h=new Uint8Array(4),f={shape:[256,1],format:\\\"rgba\\\",type:\\\"uint8\\\",mag:\\\"nearest\\\",min:\\\"nearest\\\"};function p(t,e,r,n,i){var a=t._gl;a.enable(a.SCISSOR_TEST),a.scissor(e,r,n,i),t.clear({color:[0,0,0,0],depth:1})}function d(t,e,r,n,i,a){var o=a.key;r.drawCompleted||(!function(t){t.read({x:0,y:0,width:1,height:1,data:u})}(t),r.drawCompleted=!0),function s(l){var c=Math.min(n,i-l*n);0===l&&(window.cancelAnimationFrame(r.currentRafs[o]),delete r.currentRafs[o],p(t,a.scissorX,a.scissorY,a.scissorWidth,a.viewBoxSize[1])),r.clearOnly||(a.count=2*c,a.offset=2*l*n,e(a),l*n+c<i&&(r.currentRafs[o]=window.requestAnimationFrame(function(){s(l+1)})),r.drawCompleted=!1)}(0)}function g(t,e){return(t>>>8*e)%256/255}function v(t,e,r){for(var n=new Array(8*e),i=0,a=0;a<e;a++)for(var o=0;o<2;o++)for(var s=0;s<4;s++){var l=4*t+s,c=r[64*a+l];63===l&&0===o&&(c*=-1),n[i++]=c}return n}function m(t){var e=\\\"0\\\"+t;return e.substr(e.length-2)}function y(t){return t<o?\\\"p\\\"+m(t+1)+\\\"_\\\"+m(t+4):\\\"colors\\\"}function x(t,e,r,n,i,a,o,l,c,u,h,f,p){for(var d=[[],[]],g=0;g<64;g++)d[0][g]=g===i?1:0,d[1][g]=g===a?1:0;var v=t.lines.canvasOverdrag,m=t.domain,y=t.canvasWidth,x=t.canvasHeight,b=t.deselectedLines.color;return s.extendFlat({key:h,resolution:[y,x],viewBoxPos:[o+v,l],viewBoxSize:[c,u],i0:i,i1:a,dim0A:d[0].slice(0,16),dim0B:d[0].slice(16,32),dim0C:d[0].slice(32,48),dim0D:d[0].slice(48,64),dim1A:d[1].slice(0,16),dim1B:d[1].slice(16,32),dim1C:d[1].slice(32,48),dim1D:d[1].slice(48,64),drwLayer:f,contextColor:[b[0]/255,b[1]/255,b[2]/255,b[3]<1?b[3]:Math.max(1/255,Math.pow(1/t.lines.color.length,1/3))],scissorX:(n===e?0:o+v)+(t.pad.l-v)+t.layoutWidth*m.x[0],scissorWidth:(n===r?y-o+v:c+.5)+(n===e?o+v:0),scissorY:l+t.pad.b+t.layoutHeight*m.y[0],scissorHeight:u,viewportX:t.pad.l-v+t.layoutWidth*m.x[0],viewportY:t.pad.b+t.layoutHeight*m.y[0],viewportWidth:y,viewportHeight:x},p)}function b(t){var e=c-1,r=Math.max(0,Math.floor(t[0]*e),0),n=Math.min(e,Math.ceil(t[1]*e),e);return[Math.min(r,n),Math.max(r,n)]}e.exports=function(t,e){var r,n,u,m,_,w=e.context,k=e.pick,T=e.regl,A={currentRafs:{},drawCompleted:!0,clearOnly:!1},M=function(t){for(var e={},r=0;r<=o;r+=4)e[y(r)]=t.buffer({usage:\\\"dynamic\\\",type:\\\"float\\\",data:new Uint8Array(0)});return e}(T),S=T.texture(f),E=[];L(e);var C=T({profile:!1,blend:{enable:w,func:{srcRGB:\\\"src alpha\\\",dstRGB:\\\"one minus src alpha\\\",srcAlpha:1,dstAlpha:1},equation:{rgb:\\\"add\\\",alpha:\\\"add\\\"},color:[0,0,0,0]},depth:{enable:!w,mask:!0,func:\\\"less\\\",range:[0,1]},cull:{enable:!0,face:\\\"back\\\"},scissor:{enable:!0,box:{x:T.prop(\\\"scissorX\\\"),y:T.prop(\\\"scissorY\\\"),width:T.prop(\\\"scissorWidth\\\"),height:T.prop(\\\"scissorHeight\\\")}},viewport:{x:T.prop(\\\"viewportX\\\"),y:T.prop(\\\"viewportY\\\"),width:T.prop(\\\"viewportWidth\\\"),height:T.prop(\\\"viewportHeight\\\")},dither:!1,vert:i,frag:a,primitive:\\\"lines\\\",lineWidth:1,attributes:M,uniforms:{resolution:T.prop(\\\"resolution\\\"),viewBoxPos:T.prop(\\\"viewBoxPos\\\"),viewBoxSize:T.prop(\\\"viewBoxSize\\\"),dim0A:T.prop(\\\"dim0A\\\"),dim1A:T.prop(\\\"dim1A\\\"),dim0B:T.prop(\\\"dim0B\\\"),dim1B:T.prop(\\\"dim1B\\\"),dim0C:T.prop(\\\"dim0C\\\"),dim1C:T.prop(\\\"dim1C\\\"),dim0D:T.prop(\\\"dim0D\\\"),dim1D:T.prop(\\\"dim1D\\\"),loA:T.prop(\\\"loA\\\"),hiA:T.prop(\\\"hiA\\\"),loB:T.prop(\\\"loB\\\"),hiB:T.prop(\\\"hiB\\\"),loC:T.prop(\\\"loC\\\"),hiC:T.prop(\\\"hiC\\\"),loD:T.prop(\\\"loD\\\"),hiD:T.prop(\\\"hiD\\\"),palette:S,contextColor:T.prop(\\\"contextColor\\\"),mask:T.prop(\\\"maskTexture\\\"),drwLayer:T.prop(\\\"drwLayer\\\"),maskHeight:T.prop(\\\"maskHeight\\\")},offset:T.prop(\\\"offset\\\"),count:T.prop(\\\"count\\\")});function L(t){r=t.model,n=t.viewModel,u=n.dimensions.slice(),m=u[0]?u[0].values.length:0;var e=r.lines,i=k?e.color.map(function(t,r){return r/e.color.length}):e.color,a=function(t,e,r){for(var n,i=new Array(t*(o+4)),a=0,s=0;s<t;s++){for(var c=0;c<o;c++)i[a++]=c<e.length?e[c].paddedUnitValues[s]:.5;i[a++]=g(s,2),i[a++]=g(s,1),i[a++]=g(s,0),i[a++]=(n=r[s],Math.max(l,Math.min(1-l,n)))}return i}(m,u,i);!function(t,e,r){for(var n=0;n<=o;n+=4)t[y(n)](v(n/4,e,r))}(M,m,a),w||k||(S=T.texture(s.extendFlat({data:function(t,e){for(var r=new Array(256),n=0;n<256;n++)r[n]=t(n/255).concat(e);return r}(r.unitToColor,255)},f)))}return{render:function(t,e,n){var i,a,o,s=t.length,l=1/0,h=-1/0;for(i=0;i<s;i++)t[i].dim0.canvasX<l&&(l=t[i].dim0.canvasX,a=i),t[i].dim1.canvasX>h&&(h=t[i].dim1.canvasX,o=i);0===s&&p(T,0,0,r.canvasWidth,r.canvasHeight);var f=function(t){var e,r,n,i=[[],[]];for(n=0;n<64;n++){var a=!t&&n<u.length?u[n].brush.filter.getBounds():[-1/0,1/0];i[0][n]=a[0],i[1][n]=a[1]}var o=8*c,s=new Array(o);for(e=0;e<o;e++)s[e]=255;if(!t)for(e=0;e<u.length;e++){var l=e%8,h=(e-l)/8,f=Math.pow(2,l),p=u[e].brush.filter.get();if(!(p.length<2)){var d=b(p[0])[1];for(r=1;r<p.length;r++){var g=b(p[r]);for(n=d+1;n<g[0];n++)s[8*n+h]&=~f;d=Math.max(d,g[1])}}}var v={shape:[8,c],format:\\\"alpha\\\",type:\\\"uint8\\\",mag:\\\"nearest\\\",min:\\\"nearest\\\",data:s};return _?_(v):_=T.texture(v),{maskTexture:_,maskHeight:c,loA:i[0].slice(0,16),loB:i[0].slice(16,32),loC:i[0].slice(32,48),loD:i[0].slice(48,64),hiA:i[1].slice(0,16),hiB:i[1].slice(16,32),hiC:i[1].slice(32,48),hiD:i[1].slice(48,64)}}(w);for(i=0;i<s;i++){var g=t[i],v=g.dim0.crossfilterDimensionIndex,y=g.dim1.crossfilterDimensionIndex,M=g.canvasX,S=g.canvasY,L=M+g.panelSizeX;if(e||!E[v]||E[v][0]!==M||E[v][1]!==L){E[v]=[M,L];var P=x(r,a,o,i,v,y,M,S,g.panelSizeX,g.panelSizeY,g.dim0.crossfilterDimensionIndex,w?0:k?2:1,f);A.clearOnly=n;var O=e?r.lines.blockLineCount:m;d(T,C,A,O,m,P)}}},readPixel:function(t,e){return T.read({x:t,y:e,width:1,height:1,data:h}),h},readPixels:function(t,e,r,n){var i=new Uint8Array(4*r*n);return T.read({x:t,y:e,width:r,height:n,data:i}),i},destroy:function(){for(var e in t.style[\\\"pointer-events\\\"]=\\\"none\\\",S.destroy(),_&&_.destroy(),M)M[e].destroy()},update:L}}},{\\\"../../lib\\\":719,\\\"./constants\\\":1078,glslify:409}],1083:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,n){var i,a;for(n||(n=1/0),i=0;i<e.length;i++)(a=e[i]).visible&&(n=Math.min(n,a[r].length));for(n===1/0&&(n=0),t._length=n,i=0;i<e.length;i++)(a=e[i]).visible&&(a._length=n);return n}},{}],1084:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"color-rgba\\\"),a=t(\\\"../../plots/cartesian/axes\\\"),o=t(\\\"../../lib\\\"),s=t(\\\"../../lib/svg_text_utils\\\"),l=t(\\\"../../components/drawing\\\"),c=t(\\\"../../components/colorscale\\\"),u=t(\\\"../../lib/gup\\\"),h=u.keyFun,f=u.repeat,p=u.unwrap,d=t(\\\"./helpers\\\"),g=t(\\\"./constants\\\"),v=t(\\\"./axisbrush\\\"),m=t(\\\"./lines\\\");function y(t,e,r){return o.aggNums(t,null,e,r)}function x(t,e){return _(y(Math.min,t,e),y(Math.max,t,e))}function b(t){var e=t.range;return e?_(e[0],e[1]):x(t.values,t._length)}function _(t,e){return!isNaN(t)&&isFinite(t)||(t=0),!isNaN(e)&&isFinite(e)||(e=0),t===e&&(0===t?(t-=1,e+=1):(t*=.9,e*=1.1)),[t,e]}function w(t){return t.dimensions.some(function(t){return t.brush.filterSpecified})}function k(t,e,r){var a=p(e),s=a.trace,l=d.convertTypedArray(a.lineColor),u=s.line,h={color:i(g.deselectedLineColor)},f=c.extractOpts(u),v=f.reversescale?c.flipScale(a.cscale):a.cscale,m=s.domain,y=s.dimensions,x=t.width,_=s.labelangle,w=s.labelside,k=s.labelfont,T=s.tickfont,A=s.rangefont,M=o.extendDeepNoArrays({},u,{color:l.map(n.scale.linear().domain(b({values:l,range:[f.min,f.max],_length:s._length}))),blockLineCount:g.blockLineCount,canvasOverdrag:g.overdrag*g.canvasPixelRatio}),S=Math.floor(x*(m.x[1]-m.x[0])),E=Math.floor(t.height*(m.y[1]-m.y[0])),C=t.margin||{l:80,r:80,t:100,b:80},L=S,P=E;return{key:r,colCount:y.filter(d.isVisible).length,dimensions:y,tickDistance:g.tickDistance,unitToColor:function(t){var e=t.map(function(t){return t[0]}),r=t.map(function(t){var e=i(t[1]);return n.rgb(\\\"rgb(\\\"+e[0]+\\\",\\\"+e[1]+\\\",\\\"+e[2]+\\\")\\\")}),a=\\\"rgb\\\".split(\\\"\\\").map(function(t){return n.scale.linear().clamp(!0).domain(e).range(r.map((i=t,function(t){return t[i]})));var i});return function(t){return a.map(function(e){return e(t)})}}(v),lines:M,deselectedLines:h,labelAngle:_,labelSide:w,labelFont:k,tickFont:T,rangeFont:A,layoutWidth:x,layoutHeight:t.height,domain:m,translateX:m.x[0]*x,translateY:t.height-m.y[1]*t.height,pad:C,canvasWidth:L*g.canvasPixelRatio+2*M.canvasOverdrag,canvasHeight:P*g.canvasPixelRatio,width:L,height:P,canvasPixelRatio:g.canvasPixelRatio}}function T(t,e,r){var i=r.width,a=r.height,s=r.dimensions,l=r.canvasPixelRatio,c=function(t){return i*t/Math.max(1,r.colCount-1)},u=g.verticalPadding/a,h=function(t,e){return n.scale.linear().range([e,t-e])}(a,g.verticalPadding),f={key:r.key,xScale:c,model:r,inBrushDrag:!1},p={};return f.dimensions=s.filter(d.isVisible).map(function(i,s){var m=function(t,e){return n.scale.linear().domain(b(t)).range([e,1-e])}(i,u),y=p[i.label];p[i.label]=(y||0)+1;var x=i.label+(y?\\\"__\\\"+y:\\\"\\\"),_=i.constraintrange,k=_&&_.length;k&&!Array.isArray(_[0])&&(_=[_]);var T=k?_.map(function(t){return t.map(m)}):[[-1/0,1/0]],A=i.values;A.length>i._length&&(A=A.slice(0,i._length));var M,S=i.tickvals;function E(t,e){return{val:t,text:M[e]}}function C(t,e){return t.val-e.val}if(Array.isArray(S)&&S.length){M=i.ticktext,Array.isArray(M)&&M.length?M.length>S.length?M=M.slice(0,S.length):S.length>M.length&&(S=S.slice(0,M.length)):M=S.map(n.format(i.tickformat));for(var L=1;L<S.length;L++)if(S[L]<S[L-1]){for(var P=S.map(E).sort(C),O=0;O<S.length;O++)S[O]=P[O].val,M[O]=P[O].text;break}}else S=void 0;return A=d.convertTypedArray(A),A=d.convertTypedArray(A),{key:x,label:i.label,tickFormat:i.tickformat,tickvals:S,ticktext:M,ordinal:d.isOrdinal(i),multiselect:i.multiselect,xIndex:s,crossfilterDimensionIndex:s,visibleIndex:i._index,height:a,values:A,paddedUnitValues:A.map(m),unitTickvals:S&&S.map(m),xScale:c,x:c(s),canvasX:c(s)*l,unitToPaddedPx:h,domainScale:function(t,e,r,i,a){var o,s,l=b(r);return i?n.scale.ordinal().domain(i.map((o=n.format(r.tickformat),s=a,s?function(t,e){var r=s[e];return null==r?o(t):r}:o))).range(i.map(function(r){var n=(r-l[0])/(l[1]-l[0]);return t-e+n*(2*e-t)})):n.scale.linear().domain(l).range([t-e,e])}(a,g.verticalPadding,i,S,M),ordinalScale:function(t){if(t.tickvals){var e=b(t);return n.scale.ordinal().domain(t.tickvals).range(t.tickvals.map(function(t){return(t-e[0])/(e[1]-e[0])}))}}(i),parent:f,model:r,brush:v.makeBrush(t,k,T,function(){t.linePickActive(!1)},function(){var e=f;e.focusLayer&&e.focusLayer.render(e.panels,!0);var r=w(e);!t.contextShown()&&r?(e.contextLayer&&e.contextLayer.render(e.panels,!0),t.contextShown(!0)):t.contextShown()&&!r&&(e.contextLayer&&e.contextLayer.render(e.panels,!0,!0),t.contextShown(!1))},function(r){if(f.focusLayer.render(f.panels,!0),f.pickLayer&&f.pickLayer.render(f.panels,!0),t.linePickActive(!0),e&&e.filterChanged){var n=m.invert,a=r.map(function(t){return t.map(n).sort(o.sorterAsc)}).sort(function(t,e){return t[0]-e[0]});e.filterChanged(f.key,i._index,a)}})}}),f}function A(t){t.classed(g.cn.axisExtentText,!0).attr(\\\"text-anchor\\\",\\\"middle\\\").style(\\\"cursor\\\",\\\"default\\\").style(\\\"user-select\\\",\\\"none\\\")}function M(t,e){var r=\\\"top\\\"===e?1:-1,n=t*Math.PI/180;return{dir:r,dx:Math.sin(n),dy:Math.cos(n),degrees:t}}function S(t,e){for(var r=e.panels||(e.panels=[]),n=t.data(),i=0;i<n.length-1;i++){var a=r[i]||(r[i]={}),o=n[i],s=n[i+1];a.dim0=o,a.dim1=s,a.canvasX=o.canvasX,a.panelSizeX=s.canvasX-o.canvasX,a.panelSizeY=e.model.canvasHeight,a.y=0,a.canvasY=0}}function E(t,e){return a.tickText(t._ax,e,!1).text}function C(t,e){if(t.ordinal)return\\\"\\\";var r=t.domainScale.domain(),n=r[e?r.length-1:0];return E(t.model.dimensions[t.visibleIndex],n)}e.exports=function(t,e,r,i){var c=t._fullLayout,u=c._toppaper,y=c._glcontainer;!function(t){for(var e=0;e<t.length;e++)for(var r=0;r<t[e].length;r++)for(var n=t[e][r].trace,i=n.dimensions,o=0;o<i.length;o++){var s=i[o].values,l=i[o]._ax;l&&(l.range?l.range=_(l.range[0],l.range[1]):l.range=x(s,n._length),l.dtick||(l.dtick=.01*(Math.abs(l.range[1]-l.range[0])||1)),l.tickformat=i[o].tickformat,a.calcTicks(l),l.cleanRange())}}(e);var b,L,P=(b=!0,L=!1,{linePickActive:function(t){return arguments.length?b=!!t:b},contextShown:function(t){return arguments.length?L=!!t:L}}),O=e.filter(function(t){return p(t).trace.visible}).map(k.bind(0,r)).map(T.bind(0,P,i));y.each(function(t,e){return o.extendFlat(t,O[e])});var z=y.selectAll(\\\".gl-canvas\\\").each(function(t){t.viewModel=O[0],t.model=t.viewModel?t.viewModel.model:null}),I=null;z.filter(function(t){return t.pick}).style(\\\"pointer-events\\\",\\\"auto\\\").on(\\\"mousemove\\\",function(t){if(P.linePickActive()&&t.lineLayer&&i&&i.hover){var e=n.event,r=this.width,a=this.height,o=n.mouse(this),s=o[0],l=o[1];if(s<0||l<0||s>=r||l>=a)return;var c=t.lineLayer.readPixel(s,a-1-l),u=0!==c[3],h=u?c[2]+256*(c[1]+256*c[0]):null,f={x:s,y:l,clientX:e.clientX,clientY:e.clientY,dataIndex:t.model.key,curveNumber:h};h!==I&&(u?i.hover(f):i.unhover&&i.unhover(f),I=h)}}),z.style(\\\"opacity\\\",function(t){return t.pick?0:1}),u.style(\\\"background\\\",\\\"rgba(255, 255, 255, 0)\\\");var D=u.selectAll(\\\".\\\"+g.cn.parcoords).data(O,h);D.exit().remove(),D.enter().append(\\\"g\\\").classed(g.cn.parcoords,!0).style(\\\"shape-rendering\\\",\\\"crispEdges\\\").style(\\\"pointer-events\\\",\\\"none\\\"),D.attr(\\\"transform\\\",function(t){return\\\"translate(\\\"+t.model.translateX+\\\",\\\"+t.model.translateY+\\\")\\\"});var R=D.selectAll(\\\".\\\"+g.cn.parcoordsControlView).data(f,h);R.enter().append(\\\"g\\\").classed(g.cn.parcoordsControlView,!0),R.attr(\\\"transform\\\",function(t){return\\\"translate(\\\"+t.model.pad.l+\\\",\\\"+t.model.pad.t+\\\")\\\"});var F=R.selectAll(\\\".\\\"+g.cn.yAxis).data(function(t){return t.dimensions},h);F.enter().append(\\\"g\\\").classed(g.cn.yAxis,!0),R.each(function(t){S(F,t)}),z.each(function(t){if(t.viewModel){!t.lineLayer||i?t.lineLayer=m(this,t):t.lineLayer.update(t),(t.key||0===t.key)&&(t.viewModel[t.key]=t.lineLayer);var e=!t.context||i;t.lineLayer.render(t.viewModel.panels,e)}}),F.attr(\\\"transform\\\",function(t){return\\\"translate(\\\"+t.xScale(t.xIndex)+\\\", 0)\\\"}),F.call(n.behavior.drag().origin(function(t){return t}).on(\\\"drag\\\",function(t){var e=t.parent;P.linePickActive(!1),t.x=Math.max(-g.overdrag,Math.min(t.model.width+g.overdrag,n.event.x)),t.canvasX=t.x*t.model.canvasPixelRatio,F.sort(function(t,e){return t.x-e.x}).each(function(e,r){e.xIndex=r,e.x=t===e?e.x:e.xScale(e.xIndex),e.canvasX=e.x*e.model.canvasPixelRatio}),S(F,e),F.filter(function(e){return 0!==Math.abs(t.xIndex-e.xIndex)}).attr(\\\"transform\\\",function(t){return\\\"translate(\\\"+t.xScale(t.xIndex)+\\\", 0)\\\"}),n.select(this).attr(\\\"transform\\\",\\\"translate(\\\"+t.x+\\\", 0)\\\"),F.each(function(r,n,i){i===t.parent.key&&(e.dimensions[n]=r)}),e.contextLayer&&e.contextLayer.render(e.panels,!1,!w(e)),e.focusLayer.render&&e.focusLayer.render(e.panels)}).on(\\\"dragend\\\",function(t){var e=t.parent;t.x=t.xScale(t.xIndex),t.canvasX=t.x*t.model.canvasPixelRatio,S(F,e),n.select(this).attr(\\\"transform\\\",function(t){return\\\"translate(\\\"+t.x+\\\", 0)\\\"}),e.contextLayer&&e.contextLayer.render(e.panels,!1,!w(e)),e.focusLayer&&e.focusLayer.render(e.panels),e.pickLayer&&e.pickLayer.render(e.panels,!0),P.linePickActive(!0),i&&i.axesMoved&&i.axesMoved(e.key,e.dimensions.map(function(t){return t.crossfilterDimensionIndex}))})),F.exit().remove();var B=F.selectAll(\\\".\\\"+g.cn.axisOverlays).data(f,h);B.enter().append(\\\"g\\\").classed(g.cn.axisOverlays,!0),B.selectAll(\\\".\\\"+g.cn.axis).remove();var N=B.selectAll(\\\".\\\"+g.cn.axis).data(f,h);N.enter().append(\\\"g\\\").classed(g.cn.axis,!0),N.each(function(t){var e=t.model.height/t.model.tickDistance,r=t.domainScale,i=r.domain();n.select(this).call(n.svg.axis().orient(\\\"left\\\").tickSize(4).outerTickSize(2).ticks(e,t.tickFormat).tickValues(t.ordinal?i:null).tickFormat(function(e){return d.isOrdinal(t)?e:E(t.model.dimensions[t.visibleIndex],e)}).scale(r)),l.font(N.selectAll(\\\"text\\\"),t.model.tickFont)}),N.selectAll(\\\".domain, .tick>line\\\").attr(\\\"fill\\\",\\\"none\\\").attr(\\\"stroke\\\",\\\"black\\\").attr(\\\"stroke-opacity\\\",.25).attr(\\\"stroke-width\\\",\\\"1px\\\"),N.selectAll(\\\"text\\\").style(\\\"text-shadow\\\",\\\"1px 1px 1px #fff, -1px -1px 1px #fff, 1px -1px 1px #fff, -1px 1px 1px #fff\\\").style(\\\"cursor\\\",\\\"default\\\").style(\\\"user-select\\\",\\\"none\\\");var j=B.selectAll(\\\".\\\"+g.cn.axisHeading).data(f,h);j.enter().append(\\\"g\\\").classed(g.cn.axisHeading,!0);var U=j.selectAll(\\\".\\\"+g.cn.axisTitle).data(f,h);U.enter().append(\\\"text\\\").classed(g.cn.axisTitle,!0).attr(\\\"text-anchor\\\",\\\"middle\\\").style(\\\"cursor\\\",\\\"ew-resize\\\").style(\\\"user-select\\\",\\\"none\\\").style(\\\"pointer-events\\\",\\\"auto\\\"),U.text(function(t){return t.label}).each(function(e){var r=n.select(this);l.font(r,e.model.labelFont),s.convertToTspans(r,t)}).attr(\\\"transform\\\",function(t){var e=M(t.model.labelAngle,t.model.labelSide),r=g.axisTitleOffset;return(e.dir>0?\\\"\\\":\\\"translate(0,\\\"+(2*r+t.model.height)+\\\")\\\")+\\\"rotate(\\\"+e.degrees+\\\")translate(\\\"+-r*e.dx+\\\",\\\"+-r*e.dy+\\\")\\\"}).attr(\\\"text-anchor\\\",function(t){var e=M(t.model.labelAngle,t.model.labelSide);return 2*Math.abs(e.dx)>Math.abs(e.dy)?e.dir*e.dx<0?\\\"start\\\":\\\"end\\\":\\\"middle\\\"});var V=B.selectAll(\\\".\\\"+g.cn.axisExtent).data(f,h);V.enter().append(\\\"g\\\").classed(g.cn.axisExtent,!0);var q=V.selectAll(\\\".\\\"+g.cn.axisExtentTop).data(f,h);q.enter().append(\\\"g\\\").classed(g.cn.axisExtentTop,!0),q.attr(\\\"transform\\\",\\\"translate(0,\\\"+-g.axisExtentOffset+\\\")\\\");var H=q.selectAll(\\\".\\\"+g.cn.axisExtentTopText).data(f,h);H.enter().append(\\\"text\\\").classed(g.cn.axisExtentTopText,!0).call(A),H.text(function(t){return C(t,!0)}).each(function(t){l.font(n.select(this),t.model.rangeFont)});var G=V.selectAll(\\\".\\\"+g.cn.axisExtentBottom).data(f,h);G.enter().append(\\\"g\\\").classed(g.cn.axisExtentBottom,!0),G.attr(\\\"transform\\\",function(t){return\\\"translate(0,\\\"+(t.model.height+g.axisExtentOffset)+\\\")\\\"});var Y=G.selectAll(\\\".\\\"+g.cn.axisExtentBottomText).data(f,h);Y.enter().append(\\\"text\\\").classed(g.cn.axisExtentBottomText,!0).attr(\\\"dy\\\",\\\"0.75em\\\").call(A),Y.text(function(t){return C(t,!1)}).each(function(t){l.font(n.select(this),t.model.rangeFont)}),v.ensureAxisBrush(B)}},{\\\"../../components/colorscale\\\":605,\\\"../../components/drawing\\\":614,\\\"../../lib\\\":719,\\\"../../lib/gup\\\":717,\\\"../../lib/svg_text_utils\\\":743,\\\"../../plots/cartesian/axes\\\":767,\\\"./axisbrush\\\":1075,\\\"./constants\\\":1078,\\\"./helpers\\\":1080,\\\"./lines\\\":1082,\\\"color-rgba\\\":122,d3:163}],1085:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./parcoords\\\"),i=t(\\\"../../lib/prepare_regl\\\"),a=t(\\\"./helpers\\\").isVisible;function o(t,e,r){var n=e.indexOf(r),i=t.indexOf(n);return-1===i&&(i+=e.length),i}e.exports=function(t,e){var r=t._fullLayout;if(i(t)){var s={},l={},c={},u={},h=r._size;e.forEach(function(e,r){var n=e[0].trace;c[r]=n.index;var i=u[r]=n._fullInput.index;s[r]=t.data[i].dimensions,l[r]=t.data[i].dimensions.slice()});n(t,e,{width:h.w,height:h.h,margin:{t:h.t,r:h.r,b:h.b,l:h.l}},{filterChanged:function(e,n,i){var a=l[e][n],o=i.map(function(t){return t.slice()}),s=\\\"dimensions[\\\"+n+\\\"].constraintrange\\\",h=r._tracePreGUI[t._fullData[c[e]]._fullInput.uid];if(void 0===h[s]){var f=a.constraintrange;h[s]=f||null}var p=t._fullData[c[e]].dimensions[n];o.length?(1===o.length&&(o=o[0]),a.constraintrange=o,p.constraintrange=o.slice(),o=[o]):(delete a.constraintrange,delete p.constraintrange,o=null);var d={};d[s]=o,t.emit(\\\"plotly_restyle\\\",[d,[u[e]]])},hover:function(e){t.emit(\\\"plotly_hover\\\",e)},unhover:function(e){t.emit(\\\"plotly_unhover\\\",e)},axesMoved:function(e,r){var n=function(t,e){return function(r,n){return o(t,e,r)-o(t,e,n)}}(r,l[e].filter(a));s[e].sort(n),l[e].filter(function(t){return!a(t)}).sort(function(t){return l[e].indexOf(t)}).forEach(function(t){s[e].splice(s[e].indexOf(t),1),s[e].splice(l[e].indexOf(t),0,t)}),t.emit(\\\"plotly_restyle\\\",[{dimensions:[s[e]]},[u[e]]])}})}}},{\\\"../../lib/prepare_regl\\\":732,\\\"./helpers\\\":1080,\\\"./parcoords\\\":1084}],1086:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/attributes\\\"),i=t(\\\"../../plots/domain\\\").attributes,a=t(\\\"../../plots/font_attributes\\\"),o=t(\\\"../../components/color/attributes\\\"),s=t(\\\"../../components/fx/hovertemplate_attributes\\\"),l=t(\\\"../../lib/extend\\\").extendFlat,c=a({editType:\\\"plot\\\",arrayOk:!0,colorEditType:\\\"plot\\\"});e.exports={labels:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},label0:{valType:\\\"number\\\",dflt:0,editType:\\\"calc\\\"},dlabel:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\"},values:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},marker:{colors:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},line:{color:{valType:\\\"color\\\",dflt:o.defaultLine,arrayOk:!0,editType:\\\"style\\\"},width:{valType:\\\"number\\\",min:0,dflt:0,arrayOk:!0,editType:\\\"style\\\"},editType:\\\"calc\\\"},editType:\\\"calc\\\"},text:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},hovertext:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0,editType:\\\"style\\\"},scalegroup:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},textinfo:{valType:\\\"flaglist\\\",flags:[\\\"label\\\",\\\"text\\\",\\\"value\\\",\\\"percent\\\"],extras:[\\\"none\\\"],editType:\\\"calc\\\"},hoverinfo:l({},n.hoverinfo,{flags:[\\\"label\\\",\\\"text\\\",\\\"value\\\",\\\"percent\\\",\\\"name\\\"]}),hovertemplate:s({},{keys:[\\\"label\\\",\\\"color\\\",\\\"value\\\",\\\"percent\\\",\\\"text\\\"]}),textposition:{valType:\\\"enumerated\\\",values:[\\\"inside\\\",\\\"outside\\\",\\\"auto\\\",\\\"none\\\"],dflt:\\\"auto\\\",arrayOk:!0,editType:\\\"plot\\\"},textfont:l({},c,{}),insidetextfont:l({},c,{}),outsidetextfont:l({},c,{}),title:{text:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"plot\\\"},font:l({},c,{}),position:{valType:\\\"enumerated\\\",values:[\\\"top left\\\",\\\"top center\\\",\\\"top right\\\",\\\"middle center\\\",\\\"bottom left\\\",\\\"bottom center\\\",\\\"bottom right\\\"],editType:\\\"plot\\\"},editType:\\\"plot\\\"},domain:i({name:\\\"pie\\\",trace:!0,editType:\\\"calc\\\"}),hole:{valType:\\\"number\\\",min:0,max:1,dflt:0,editType:\\\"calc\\\"},sort:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},direction:{valType:\\\"enumerated\\\",values:[\\\"clockwise\\\",\\\"counterclockwise\\\"],dflt:\\\"counterclockwise\\\",editType:\\\"calc\\\"},rotation:{valType:\\\"number\\\",min:-360,max:360,dflt:0,editType:\\\"calc\\\"},pull:{valType:\\\"number\\\",min:0,max:1,dflt:0,arrayOk:!0,editType:\\\"calc\\\"},_deprecated:{title:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},titlefont:l({},c,{}),titleposition:{valType:\\\"enumerated\\\",values:[\\\"top left\\\",\\\"top center\\\",\\\"top right\\\",\\\"middle center\\\",\\\"bottom left\\\",\\\"bottom center\\\",\\\"bottom right\\\"],editType:\\\"calc\\\"}}}},{\\\"../../components/color/attributes\\\":592,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../../plots/attributes\\\":764,\\\"../../plots/domain\\\":792,\\\"../../plots/font_attributes\\\":793}],1087:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../plots/get_data\\\").getModuleCalcData;r.name=\\\"pie\\\",r.plot=function(t){var e=n.getModule(\\\"pie\\\"),r=i(t.calcdata,e)[0];e.plot(t,r)},r.clean=function(t,e,r,n){var i=n._has&&n._has(\\\"pie\\\"),a=e._has&&e._has(\\\"pie\\\");i&&!a&&n._pielayer.selectAll(\\\"g.trace\\\").remove()}},{\\\"../../plots/get_data\\\":802,\\\"../../registry\\\":847}],1088:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../lib\\\").isArrayOrTypedArray,a=t(\\\"tinycolor2\\\"),o=t(\\\"../../components/color\\\"),s=t(\\\"./helpers\\\"),l=t(\\\"../../lib\\\").isValidTextValue,c={};function u(t){return function(e,r){return!!e&&(!!(e=a(e)).isValid()&&(e=o.addOpacity(e,e.getAlpha()),t[r]||(t[r]=e),e))}}function h(t,e){var r,n=JSON.stringify(t),i=e[n];if(!i){for(i=t.slice(),r=0;r<t.length;r++)i.push(a(t[r]).lighten(20).toHexString());for(r=0;r<t.length;r++)i.push(a(t[r]).darken(20).toHexString());e[n]=i}return i}e.exports={calc:function(t,e){var r,a,o=[],c=t._fullLayout,h=c.hiddenlabels||[],f=e.labels,p=e.marker.colors||[],d=e.values,g=i(d)&&d.length;if(e.dlabel)for(f=new Array(d.length),r=0;r<d.length;r++)f[r]=String(e.label0+r*e.dlabel);var v={},m=u(c[\\\"_\\\"+e.type+\\\"colormap\\\"]),y=(g?d:f).length,x=0,b=!1;for(r=0;r<y;r++){var _,w,k;if(g){if(_=d[r],!n(_))continue;if((_=+_)<0)continue}else _=1;void 0!==(w=f[r])&&\\\"\\\"!==w||(w=r);var T=v[w=String(w)];void 0===T?(v[w]=o.length,(k=-1!==h.indexOf(w))||(x+=_),o.push({v:_,label:w,color:m(p[r],w),i:r,pts:[r],hidden:k})):(b=!0,(a=o[T]).v+=_,a.pts.push(r),a.hidden||(x+=_),!1===a.color&&p[r]&&(a.color=m(p[r],w)))}(\\\"funnelarea\\\"===e.type?b:e.sort)&&o.sort(function(t,e){return e.v-t.v}),o[0]&&(o[0].vTotal=x);var A=e.textinfo;if(A&&\\\"none\\\"!==A){var M,S=A.split(\\\"+\\\"),E=function(t){return-1!==S.indexOf(t)},C=E(\\\"label\\\"),L=E(\\\"text\\\"),P=E(\\\"value\\\"),O=E(\\\"percent\\\"),z=c.separators;for(r=0;r<o.length;r++){if(a=o[r],M=C?[a.label]:[],L){var I=s.getFirstFilled(e.text,a.pts);l(I)&&M.push(I)}P&&M.push(s.formatPieValue(a.v,z)),O&&M.push(s.formatPiePercent(a.v/x,z)),a.text=M.join(\\\"<br>\\\")}}return o},crossTraceCalc:function(t,e){var r=(e||{}).type;r||(r=\\\"pie\\\");var n=t._fullLayout,i=t.calcdata,a=n[r+\\\"colorway\\\"],o=n[\\\"_\\\"+r+\\\"colormap\\\"];n[\\\"extend\\\"+r+\\\"colors\\\"]&&(a=h(a,c));for(var s=0,l=0;l<i.length;l++){var u=i[l];if(u[0].trace.type===r)for(var f=0;f<u.length;f++){var p=u[f];!1===p.color&&(o[p.label]?p.color=o[p.label]:(o[p.label]=p.color=a[s%a.length],s++))}}},makePullColorFn:u,generateExtendedColors:h}},{\\\"../../components/color\\\":593,\\\"../../lib\\\":719,\\\"./helpers\\\":1091,\\\"fast-isnumeric\\\":225,tinycolor2:537}],1089:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./attributes\\\"),a=t(\\\"../../plots/domain\\\").defaults,o=t(\\\"../bar/defaults\\\").handleText;e.exports=function(t,e,r,s){function l(r,a){return n.coerce(t,e,i,r,a)}var c,u=l(\\\"values\\\"),h=n.isArrayOrTypedArray(u),f=l(\\\"labels\\\");if(Array.isArray(f)?(c=f.length,h&&(c=Math.min(c,u.length))):h&&(c=u.length,l(\\\"label0\\\"),l(\\\"dlabel\\\")),c){e._length=c,l(\\\"marker.line.width\\\")&&l(\\\"marker.line.color\\\"),l(\\\"marker.colors\\\"),l(\\\"scalegroup\\\");var p=l(\\\"text\\\"),d=l(\\\"textinfo\\\",Array.isArray(p)?\\\"text+percent\\\":\\\"percent\\\");if(l(\\\"hovertext\\\"),l(\\\"hovertemplate\\\"),d&&\\\"none\\\"!==d){var g=l(\\\"textposition\\\");o(t,e,s,l,g,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1})}a(e,s,l);var v=l(\\\"hole\\\");if(l(\\\"title.text\\\")){var m=l(\\\"title.position\\\",v?\\\"middle center\\\":\\\"top center\\\");v||\\\"middle center\\\"!==m||(e.title.position=\\\"top center\\\"),n.coerceFont(l,\\\"title.font\\\",s.font)}l(\\\"sort\\\"),l(\\\"direction\\\"),l(\\\"rotation\\\"),l(\\\"pull\\\")}else e.visible=!1}},{\\\"../../lib\\\":719,\\\"../../plots/domain\\\":792,\\\"../bar/defaults\\\":861,\\\"./attributes\\\":1086}],1090:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/fx/helpers\\\").appendArrayMultiPointValues;e.exports=function(t,e){var r={curveNumber:e.index,pointNumbers:t.pts,data:e._input,fullData:e,label:t.label,color:t.color,value:t.v,percent:t.percent,text:t.text,v:t.v};return 1===t.pts.length&&(r.pointNumber=r.i=t.pts[0]),n(r,e,t.pts),\\\"funnelarea\\\"===e.type&&(delete r.v,delete r.i),r}},{\\\"../../components/fx/helpers\\\":628}],1091:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\");r.formatPiePercent=function(t,e){var r=(100*t).toPrecision(3);return-1!==r.lastIndexOf(\\\".\\\")&&(r=r.replace(/[.]?0+$/,\\\"\\\")),n.numSeparate(r,e)+\\\"%\\\"},r.formatPieValue=function(t,e){var r=t.toPrecision(10);return-1!==r.lastIndexOf(\\\".\\\")&&(r=r.replace(/[.]?0+$/,\\\"\\\")),n.numSeparate(r,e)},r.getFirstFilled=function(t,e){if(Array.isArray(t))for(var r=0;r<e.length;r++){var n=t[e[r]];if(n||0===n)return n}},r.castOption=function(t,e){return Array.isArray(t)?r.getFirstFilled(t,e):t||void 0}},{\\\"../../lib\\\":719}],1092:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),supplyLayoutDefaults:t(\\\"./layout_defaults\\\"),layoutAttributes:t(\\\"./layout_attributes\\\"),calc:t(\\\"./calc\\\").calc,crossTraceCalc:t(\\\"./calc\\\").crossTraceCalc,plot:t(\\\"./plot\\\").plot,style:t(\\\"./style\\\"),styleOne:t(\\\"./style_one\\\"),moduleType:\\\"trace\\\",name:\\\"pie\\\",basePlotModule:t(\\\"./base_plot\\\"),categories:[\\\"pie-like\\\",\\\"pie\\\",\\\"showLegend\\\"],meta:{}}},{\\\"./attributes\\\":1086,\\\"./base_plot\\\":1087,\\\"./calc\\\":1088,\\\"./defaults\\\":1089,\\\"./layout_attributes\\\":1093,\\\"./layout_defaults\\\":1094,\\\"./plot\\\":1095,\\\"./style\\\":1096,\\\"./style_one\\\":1097}],1093:[function(t,e,r){\\\"use strict\\\";e.exports={hiddenlabels:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},piecolorway:{valType:\\\"colorlist\\\",editType:\\\"calc\\\"},extendpiecolors:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"}}},{}],1094:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./layout_attributes\\\");e.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\\\"hiddenlabels\\\"),r(\\\"piecolorway\\\",e.colorway),r(\\\"extendpiecolors\\\")}},{\\\"../../lib\\\":719,\\\"./layout_attributes\\\":1093}],1095:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../components/fx\\\"),a=t(\\\"../../components/color\\\"),o=t(\\\"../../components/drawing\\\"),s=t(\\\"../../lib\\\"),l=t(\\\"../../lib/svg_text_utils\\\"),c=t(\\\"./helpers\\\"),u=t(\\\"./event_data\\\");function h(t,e,r){var a=r[0],o=a.trace,l=a.cx,h=a.cy;\\\"_hasHoverLabel\\\"in o||(o._hasHoverLabel=!1),\\\"_hasHoverEvent\\\"in o||(o._hasHoverEvent=!1),t.on(\\\"mouseover\\\",function(t){var r=e._fullLayout,f=e._fullData[o.index];if(!e._dragging&&!1!==r.hovermode){var p=f.hoverinfo;if(Array.isArray(p)&&(p=i.castHoverinfo({hoverinfo:[c.castOption(p,t.pts)],_module:o._module},r,0)),\\\"all\\\"===p&&(p=\\\"label+text+value+percent+name\\\"),f.hovertemplate||\\\"none\\\"!==p&&\\\"skip\\\"!==p&&p){var d=t.rInscribed||0,g=l+t.pxmid[0]*(1-d),v=h+t.pxmid[1]*(1-d),m=r.separators,y=[];if(p&&-1!==p.indexOf(\\\"label\\\")&&y.push(t.label),t.text=c.castOption(f.hovertext||f.text,t.pts),p&&-1!==p.indexOf(\\\"text\\\")){var x=t.text;s.isValidTextValue(x)&&y.push(x)}t.value=t.v,t.valueLabel=c.formatPieValue(t.v,m),p&&-1!==p.indexOf(\\\"value\\\")&&y.push(t.valueLabel),t.percent=t.v/a.vTotal,t.percentLabel=c.formatPiePercent(t.percent,m),p&&-1!==p.indexOf(\\\"percent\\\")&&y.push(t.percentLabel);var b=f.hoverlabel,_=b.font;i.loneHover({trace:o,x0:g-d*a.r,x1:g+d*a.r,y:v,text:y.join(\\\"<br>\\\"),name:f.hovertemplate||-1!==p.indexOf(\\\"name\\\")?f.name:void 0,idealAlign:t.pxmid[0]<0?\\\"left\\\":\\\"right\\\",color:c.castOption(b.bgcolor,t.pts)||t.color,borderColor:c.castOption(b.bordercolor,t.pts),fontFamily:c.castOption(_.family,t.pts),fontSize:c.castOption(_.size,t.pts),fontColor:c.castOption(_.color,t.pts),nameLength:c.castOption(b.namelength,t.pts),textAlign:c.castOption(b.align,t.pts),hovertemplate:c.castOption(f.hovertemplate,t.pts),hovertemplateLabels:t,eventData:[u(t,f)]},{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:e}),o._hasHoverLabel=!0}o._hasHoverEvent=!0,e.emit(\\\"plotly_hover\\\",{points:[u(t,f)],event:n.event})}}),t.on(\\\"mouseout\\\",function(t){var r=e._fullLayout,a=e._fullData[o.index],s=n.select(this).datum();o._hasHoverEvent&&(t.originalEvent=n.event,e.emit(\\\"plotly_unhover\\\",{points:[u(s,a)],event:n.event}),o._hasHoverEvent=!1),o._hasHoverLabel&&(i.loneUnhover(r._hoverlayer.node()),o._hasHoverLabel=!1)}),t.on(\\\"click\\\",function(t){var r=e._fullLayout,a=e._fullData[o.index];e._dragging||!1===r.hovermode||(e._hoverdata=[u(t,a)],i.click(e,n.event))})}function f(t,e,r){var n=c.castOption(t.insidetextfont.color,e.pts);!n&&t._input.textfont&&(n=c.castOption(t._input.textfont.color,e.pts));var i=c.castOption(t.insidetextfont.family,e.pts)||c.castOption(t.textfont.family,e.pts)||r.family,o=c.castOption(t.insidetextfont.size,e.pts)||c.castOption(t.textfont.size,e.pts)||r.size;return{color:n||a.contrast(e.color),family:i,size:o}}function p(t,e){for(var r,n,i=0;i<t.length;i++)if((n=(r=t[i][0]).trace).title.text){var a=n.title.text;n._meta&&(a=s.templateString(a,n._meta));var c=o.tester.append(\\\"text\\\").attr(\\\"data-notex\\\",1).text(a).call(o.font,n.title.font).call(l.convertToTspans,e),u=o.bBox(c.node(),!0);r.titleBox={width:u.width,height:u.height},c.remove()}}function d(t,e,r){var n=Math.sqrt(t.width*t.width+t.height*t.height),i=t.width/t.height,a=e.halfangle,o=e.ring,s=e.rInscribed,l=r.r||e.rpx1,c={scale:s*l*2/n,rCenter:1-s,rotate:0};if(c.scale>=1)return c;var u=i+1/(2*Math.tan(a)),h=l*Math.min(1/(Math.sqrt(u*u+.5)+u),o/(Math.sqrt(i*i+o/2)+i)),f={scale:2*h/t.height,rCenter:Math.cos(h/l)-h*i/l,rotate:(180/Math.PI*e.midangle+720)%180-90},p=1/i,d=p+1/(2*Math.tan(a)),g=l*Math.min(1/(Math.sqrt(d*d+.5)+d),o/(Math.sqrt(p*p+o/2)+p)),v={scale:2*g/t.width,rCenter:Math.cos(g/l)-g/i/l,rotate:(180/Math.PI*e.midangle+810)%180-90},m=v.scale>f.scale?v:f;return c.scale<1&&m.scale>c.scale?m:c}function g(t,e){return t.v!==e.vTotal||e.trace.hole?Math.min(1/(1+1/Math.sin(t.halfangle)),t.ring/2):1}function v(t,e){var r=e.pxmid[0],n=e.pxmid[1],i=t.width/2,a=t.height/2;return r<0&&(i*=-1),n<0&&(a*=-1),{scale:1,rCenter:1,rotate:0,x:i+Math.abs(a)*(i>0?1:-1)/2,y:a/(1+r*r/(n*n)),outside:!0}}function m(t,e){var r,n,i,a=t.trace,o={x:t.cx,y:t.cy},s={tx:0,ty:0};s.ty+=a.title.font.size,i=x(a),-1!==a.title.position.indexOf(\\\"top\\\")?(o.y-=(1+i)*t.r,s.ty-=t.titleBox.height):-1!==a.title.position.indexOf(\\\"bottom\\\")&&(o.y+=(1+i)*t.r);var l,c,u=(l=t.r,c=t.trace.aspectratio,l/(void 0===c?1:c)),h=e.w*(a.domain.x[1]-a.domain.x[0])/2;return-1!==a.title.position.indexOf(\\\"left\\\")?(h+=u,o.x-=(1+i)*u,s.tx+=t.titleBox.width/2):-1!==a.title.position.indexOf(\\\"center\\\")?h*=2:-1!==a.title.position.indexOf(\\\"right\\\")&&(h+=u,o.x+=(1+i)*u,s.tx-=t.titleBox.width/2),r=h/t.titleBox.width,n=y(t,e)/t.titleBox.height,{x:o.x,y:o.y,scale:Math.min(r,n),tx:s.tx,ty:s.ty}}function y(t,e){var r=t.trace,n=e.h*(r.domain.y[1]-r.domain.y[0]);return Math.min(t.titleBox.height,n/2)}function x(t){var e,r=t.pull;if(!r)return 0;if(Array.isArray(r))for(r=0,e=0;e<t.pull.length;e++)t.pull[e]>r&&(r=t.pull[e]);return r}function b(t,e){for(var r=[],n=0;n<t.length;n++){var i=t[n][0],a=i.trace,o=a.domain,s=e.w*(o.x[1]-o.x[0]),l=e.h*(o.y[1]-o.y[0]);a.title.text&&\\\"middle center\\\"!==a.title.position&&(l-=y(i,e));var c=s/2,u=l/2;\\\"funnelarea\\\"!==a.type||a.scalegroup||(u/=a.aspectratio),i.r=Math.min(c,u)/(1+x(a)),i.cx=e.l+e.w*(a.domain.x[1]+a.domain.x[0])/2,i.cy=e.t+e.h*(1-a.domain.y[0])-l/2,a.title.text&&-1!==a.title.position.indexOf(\\\"bottom\\\")&&(i.cy-=y(i,e)),a.scalegroup&&-1===r.indexOf(a.scalegroup)&&r.push(a.scalegroup)}!function(t,e){for(var r,n,i,a=0;a<e.length;a++){var o=1/0,s=e[a];for(n=0;n<t.length;n++)if(r=t[n][0],(i=r.trace).scalegroup===s){var l;if(\\\"pie\\\"===i.type)l=r.r*r.r;else if(\\\"funnelarea\\\"===i.type){var c,u;i.aspectratio>1?(c=r.r,u=c/i.aspectratio):(u=r.r,c=u*i.aspectratio),c*=(1+i.baseratio)/2,l=c*u}o=Math.min(o,l/r.vTotal)}for(n=0;n<t.length;n++)if(r=t[n][0],(i=r.trace).scalegroup===s){var h=o*r.vTotal;\\\"funnelarea\\\"===i.type&&(h/=(1+i.baseratio)/2,h/=i.aspectratio),r.r=Math.sqrt(h)}}}(t,r)}e.exports={plot:function(t,e){var r=t._fullLayout;p(e,t),b(e,r._size);var i=s.makeTraceGroups(r._pielayer,e,\\\"trace\\\").each(function(e){var i=n.select(this),u=e[0],p=u.trace;!function(t){var e,r,n,i=t[0],a=i.trace,o=a.rotation*Math.PI/180,s=2*Math.PI/i.vTotal,l=\\\"px0\\\",c=\\\"px1\\\";if(\\\"counterclockwise\\\"===a.direction){for(e=0;e<t.length&&t[e].hidden;e++);if(e===t.length)return;o+=s*t[e].v,s*=-1,l=\\\"px1\\\",c=\\\"px0\\\"}function u(t){return[i.r*Math.sin(t),-i.r*Math.cos(t)]}for(n=u(o),e=0;e<t.length;e++)(r=t[e]).hidden||(r[l]=n,o+=s*r.v/2,r.pxmid=u(o),r.midangle=o,o+=s*r.v/2,n=u(o),r[c]=n,r.largeArc=r.v>i.vTotal/2?1:0,r.halfangle=Math.PI*Math.min(r.v/i.vTotal,.5),r.ring=1-a.hole,r.rInscribed=g(r,i))}(e),i.attr(\\\"stroke-linejoin\\\",\\\"round\\\"),i.each(function(){var i=n.select(this).selectAll(\\\"g.slice\\\").data(e);i.enter().append(\\\"g\\\").classed(\\\"slice\\\",!0),i.exit().remove();var g=[[[],[]],[[],[]]],y=!1;i.each(function(r){if(r.hidden)n.select(this).selectAll(\\\"path,g\\\").remove();else{r.pointNumber=r.i,r.curveNumber=p.index,g[r.pxmid[1]<0?0:1][r.pxmid[0]<0?0:1].push(r);var i=u.cx,a=u.cy,m=n.select(this),x=m.selectAll(\\\"path.surface\\\").data([r]);if(x.enter().append(\\\"path\\\").classed(\\\"surface\\\",!0).style({\\\"pointer-events\\\":\\\"all\\\"}),m.call(h,t,e),p.pull){var b=+c.castOption(p.pull,r.pts)||0;b>0&&(i+=b*r.pxmid[0],a+=b*r.pxmid[1])}r.cxFinal=i,r.cyFinal=a;var _=p.hole;if(r.v===u.vTotal){var w=\\\"M\\\"+(i+r.px0[0])+\\\",\\\"+(a+r.px0[1])+S(r.px0,r.pxmid,!0,1)+S(r.pxmid,r.px0,!0,1)+\\\"Z\\\";_?x.attr(\\\"d\\\",\\\"M\\\"+(i+_*r.px0[0])+\\\",\\\"+(a+_*r.px0[1])+S(r.px0,r.pxmid,!1,_)+S(r.pxmid,r.px0,!1,_)+\\\"Z\\\"+w):x.attr(\\\"d\\\",w)}else{var k=S(r.px0,r.px1,!0,1);if(_){var T=1-_;x.attr(\\\"d\\\",\\\"M\\\"+(i+_*r.px1[0])+\\\",\\\"+(a+_*r.px1[1])+S(r.px1,r.px0,!1,_)+\\\"l\\\"+T*r.px0[0]+\\\",\\\"+T*r.px0[1]+k+\\\"Z\\\")}else x.attr(\\\"d\\\",\\\"M\\\"+i+\\\",\\\"+a+\\\"l\\\"+r.px0[0]+\\\",\\\"+r.px0[1]+k+\\\"Z\\\")}var A=c.castOption(p.textposition,r.pts),M=m.selectAll(\\\"g.slicetext\\\").data(r.text&&\\\"none\\\"!==A?[0]:[]);M.enter().append(\\\"g\\\").classed(\\\"slicetext\\\",!0),M.exit().remove(),M.each(function(){var e=s.ensureSingle(n.select(this),\\\"text\\\",\\\"\\\",function(t){t.attr(\\\"data-notex\\\",1)});e.text(r.text).attr({class:\\\"slicetext\\\",transform:\\\"\\\",\\\"text-anchor\\\":\\\"middle\\\"}).call(o.font,\\\"outside\\\"===A?function(t,e,r){var n=c.castOption(t.outsidetextfont.color,e.pts)||c.castOption(t.textfont.color,e.pts)||r.color,i=c.castOption(t.outsidetextfont.family,e.pts)||c.castOption(t.textfont.family,e.pts)||r.family,a=c.castOption(t.outsidetextfont.size,e.pts)||c.castOption(t.textfont.size,e.pts)||r.size;return{color:n,family:i,size:a}}(p,r,t._fullLayout.font):f(p,r,t._fullLayout.font)).call(l.convertToTspans,t);var h,g=o.bBox(e.node());\\\"outside\\\"===A?h=v(g,r):(h=d(g,r,u),\\\"auto\\\"===A&&h.scale<1&&(e.call(o.font,p.outsidetextfont),p.outsidetextfont.family===p.insidetextfont.family&&p.outsidetextfont.size===p.insidetextfont.size||(g=o.bBox(e.node())),h=v(g,r)));var m=i+r.pxmid[0]*h.rCenter+(h.x||0),x=a+r.pxmid[1]*h.rCenter+(h.y||0);h.outside&&(r.yLabelMin=x-g.height/2,r.yLabelMid=x,r.yLabelMax=x+g.height/2,r.labelExtraX=0,r.labelExtraY=0,y=!0),e.attr(\\\"transform\\\",\\\"translate(\\\"+m+\\\",\\\"+x+\\\")\\\"+(h.scale<1?\\\"scale(\\\"+h.scale+\\\")\\\":\\\"\\\")+(h.rotate?\\\"rotate(\\\"+h.rotate+\\\")\\\":\\\"\\\")+\\\"translate(\\\"+-(g.left+g.right)/2+\\\",\\\"+-(g.top+g.bottom)/2+\\\")\\\")})}function S(t,e,n,i){var a=i*(e[0]-t[0]),o=i*(e[1]-t[1]);return\\\"a\\\"+i*u.r+\\\",\\\"+i*u.r+\\\" 0 \\\"+r.largeArc+(n?\\\" 1 \\\":\\\" 0 \\\")+a+\\\",\\\"+o}});var x=n.select(this).selectAll(\\\"g.titletext\\\").data(p.title.text?[0]:[]);x.enter().append(\\\"g\\\").classed(\\\"titletext\\\",!0),x.exit().remove(),x.each(function(){var e,i=s.ensureSingle(n.select(this),\\\"text\\\",\\\"\\\",function(t){t.attr(\\\"data-notex\\\",1)}),a=p.title.text;p._meta&&(a=s.templateString(a,p._meta)),i.text(a).attr({class:\\\"titletext\\\",transform:\\\"\\\",\\\"text-anchor\\\":\\\"middle\\\"}).call(o.font,p.title.font).call(l.convertToTspans,t),e=\\\"middle center\\\"===p.title.position?function(t){var e=Math.sqrt(t.titleBox.width*t.titleBox.width+t.titleBox.height*t.titleBox.height);return{x:t.cx,y:t.cy,scale:t.trace.hole*t.r*2/e,tx:0,ty:-t.titleBox.height/2+t.trace.title.font.size}}(u):m(u,r._size),i.attr(\\\"transform\\\",\\\"translate(\\\"+e.x+\\\",\\\"+e.y+\\\")\\\"+(e.scale<1?\\\"scale(\\\"+e.scale+\\\")\\\":\\\"\\\")+\\\"translate(\\\"+e.tx+\\\",\\\"+e.ty+\\\")\\\")}),y&&function(t,e){var r,n,i,a,o,s,l,u,h,f,p,d,g;function v(t,e){return t.pxmid[1]-e.pxmid[1]}function m(t,e){return e.pxmid[1]-t.pxmid[1]}function y(t,r){r||(r={});var i,u,h,p,d,g,v=r.labelExtraY+(n?r.yLabelMax:r.yLabelMin),m=n?t.yLabelMin:t.yLabelMax,y=n?t.yLabelMax:t.yLabelMin,x=t.cyFinal+o(t.px0[1],t.px1[1]),b=v-m;if(b*l>0&&(t.labelExtraY=b),Array.isArray(e.pull))for(u=0;u<f.length;u++)(h=f[u])===t||(c.castOption(e.pull,t.pts)||0)>=(c.castOption(e.pull,h.pts)||0)||((t.pxmid[1]-h.pxmid[1])*l>0?(p=h.cyFinal+o(h.px0[1],h.px1[1]),(b=p-m-t.labelExtraY)*l>0&&(t.labelExtraY+=b)):(y+t.labelExtraY-x)*l>0&&(i=3*s*Math.abs(u-f.indexOf(t)),d=h.cxFinal+a(h.px0[0],h.px1[0]),(g=d+i-(t.cxFinal+t.pxmid[0])-t.labelExtraX)*s>0&&(t.labelExtraX+=g)))}for(n=0;n<2;n++)for(i=n?v:m,o=n?Math.max:Math.min,l=n?1:-1,r=0;r<2;r++){for(a=r?Math.max:Math.min,s=r?1:-1,(u=t[n][r]).sort(i),h=t[1-n][r],f=h.concat(u),d=[],p=0;p<u.length;p++)void 0!==u[p].yLabelMid&&d.push(u[p]);for(g=!1,p=0;n&&p<h.length;p++)if(void 0!==h[p].yLabelMid){g=h[p];break}for(p=0;p<d.length;p++){var x=p&&d[p-1];g&&!p&&(x=g),y(d[p],x)}}}(g,p),function(t,e){t.each(function(t){var r=n.select(this);if(t.labelExtraX||t.labelExtraY){var i=r.select(\\\"g.slicetext text\\\");i.attr(\\\"transform\\\",\\\"translate(\\\"+t.labelExtraX+\\\",\\\"+t.labelExtraY+\\\")\\\"+i.attr(\\\"transform\\\"));var o=t.cxFinal+t.pxmid[0],l=t.cyFinal+t.pxmid[1],c=\\\"M\\\"+o+\\\",\\\"+l,u=(t.yLabelMax-t.yLabelMin)*(t.pxmid[0]<0?-1:1)/4;if(t.labelExtraX){var h=t.labelExtraX*t.pxmid[1]/t.pxmid[0],f=t.yLabelMid+t.labelExtraY-(t.cyFinal+t.pxmid[1]);Math.abs(h)>Math.abs(f)?c+=\\\"l\\\"+f*t.pxmid[0]/t.pxmid[1]+\\\",\\\"+f+\\\"H\\\"+(o+t.labelExtraX+u):c+=\\\"l\\\"+t.labelExtraX+\\\",\\\"+h+\\\"v\\\"+(f-h)+\\\"h\\\"+u}else c+=\\\"V\\\"+(t.yLabelMid+t.labelExtraY)+\\\"h\\\"+u;s.ensureSingle(r,\\\"path\\\",\\\"textline\\\").call(a.stroke,e.outsidetextfont.color).attr({\\\"stroke-width\\\":Math.min(2,e.outsidetextfont.size/8),d:c,fill:\\\"none\\\"})}else r.select(\\\"path.textline\\\").remove()})}(i,p)})});setTimeout(function(){i.selectAll(\\\"tspan\\\").each(function(){var t=n.select(this);t.attr(\\\"dy\\\")&&t.attr(\\\"dy\\\",t.attr(\\\"dy\\\"))})},0)},transformInsideText:d,determineInsideTextFont:f,positionTitleOutside:m,prerenderTitles:p,layoutAreas:b,attachFxHandlers:h}},{\\\"../../components/color\\\":593,\\\"../../components/drawing\\\":614,\\\"../../components/fx\\\":632,\\\"../../lib\\\":719,\\\"../../lib/svg_text_utils\\\":743,\\\"./event_data\\\":1090,\\\"./helpers\\\":1091,d3:163}],1096:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"./style_one\\\");e.exports=function(t){t._fullLayout._pielayer.selectAll(\\\".trace\\\").each(function(t){var e=t[0].trace,r=n.select(this);r.style({opacity:e.opacity}),r.selectAll(\\\"path.surface\\\").each(function(t){n.select(this).call(i,t,e)})})}},{\\\"./style_one\\\":1097,d3:163}],1097:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/color\\\"),i=t(\\\"./helpers\\\").castOption;e.exports=function(t,e,r){var a=r.marker.line,o=i(a.color,e.pts)||n.defaultLine,s=i(a.width,e.pts)||0;t.style(\\\"stroke-width\\\",s).call(n.fill,e.color).call(n.stroke,o)}},{\\\"../../components/color\\\":593,\\\"./helpers\\\":1091}],1098:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../scatter/attributes\\\");e.exports={x:n.x,y:n.y,xy:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},indices:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},xbounds:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},ybounds:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},text:n.text,marker:{color:{valType:\\\"color\\\",arrayOk:!1,editType:\\\"calc\\\"},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:1,arrayOk:!1,editType:\\\"calc\\\"},blend:{valType:\\\"boolean\\\",dflt:null,editType:\\\"calc\\\"},sizemin:{valType:\\\"number\\\",min:.1,max:2,dflt:.5,editType:\\\"calc\\\"},sizemax:{valType:\\\"number\\\",min:.1,dflt:20,editType:\\\"calc\\\"},border:{color:{valType:\\\"color\\\",arrayOk:!1,editType:\\\"calc\\\"},arearatio:{valType:\\\"number\\\",min:0,max:1,dflt:0,editType:\\\"calc\\\"},editType:\\\"calc\\\"},editType:\\\"calc\\\"},transforms:void 0}},{\\\"../scatter/attributes\\\":1112}],1099:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"gl-pointcloud2d\\\"),i=t(\\\"../../lib/str2rgbarray\\\"),a=t(\\\"../../plots/cartesian/autorange\\\").findExtremes,o=t(\\\"../scatter/get_trace_color\\\");function s(t,e){this.scene=t,this.uid=e,this.type=\\\"pointcloud\\\",this.pickXData=[],this.pickYData=[],this.xData=[],this.yData=[],this.textLabels=[],this.color=\\\"rgb(0, 0, 0)\\\",this.name=\\\"\\\",this.hoverinfo=\\\"all\\\",this.idToIndex=new Int32Array(0),this.bounds=[0,0,0,0],this.pointcloudOptions={positions:new Float32Array(0),idToIndex:this.idToIndex,sizemin:.5,sizemax:12,color:[0,0,0,1],areaRatio:1,borderColor:[0,0,0,1]},this.pointcloud=n(t.glplot,this.pointcloudOptions),this.pointcloud._trace=this}var l=s.prototype;l.handlePick=function(t){var e=this.idToIndex[t.pointId];return{trace:this,dataCoord:t.dataCoord,traceCoord:this.pickXYData?[this.pickXYData[2*e],this.pickXYData[2*e+1]]:[this.pickXData[e],this.pickYData[e]],textLabel:Array.isArray(this.textLabels)?this.textLabels[e]:this.textLabels,color:this.color,name:this.name,pointIndex:e,hoverinfo:this.hoverinfo}},l.update=function(t){this.index=t.index,this.textLabels=t.text,this.name=t.name,this.hoverinfo=t.hoverinfo,this.bounds=[1/0,1/0,-1/0,-1/0],this.updateFast(t),this.color=o(t,{})},l.updateFast=function(t){var e,r,n,o,s,l,c=this.xData=this.pickXData=t.x,u=this.yData=this.pickYData=t.y,h=this.pickXYData=t.xy,f=t.xbounds&&t.ybounds,p=t.indices,d=this.bounds;if(h){if(n=h,e=h.length>>>1,f)d[0]=t.xbounds[0],d[2]=t.xbounds[1],d[1]=t.ybounds[0],d[3]=t.ybounds[1];else for(l=0;l<e;l++)o=n[2*l],s=n[2*l+1],o<d[0]&&(d[0]=o),o>d[2]&&(d[2]=o),s<d[1]&&(d[1]=s),s>d[3]&&(d[3]=s);if(p)r=p;else for(r=new Int32Array(e),l=0;l<e;l++)r[l]=l}else for(e=c.length,n=new Float32Array(2*e),r=new Int32Array(e),l=0;l<e;l++)o=c[l],s=u[l],r[l]=l,n[2*l]=o,n[2*l+1]=s,o<d[0]&&(d[0]=o),o>d[2]&&(d[2]=o),s<d[1]&&(d[1]=s),s>d[3]&&(d[3]=s);this.idToIndex=r,this.pointcloudOptions.idToIndex=r,this.pointcloudOptions.positions=n;var g=i(t.marker.color),v=i(t.marker.border.color),m=t.opacity*t.marker.opacity;g[3]*=m,this.pointcloudOptions.color=g;var y=t.marker.blend;if(null===y){y=c.length<100||u.length<100}this.pointcloudOptions.blend=y,v[3]*=m,this.pointcloudOptions.borderColor=v;var x=t.marker.sizemin,b=Math.max(t.marker.sizemax,t.marker.sizemin);this.pointcloudOptions.sizeMin=x,this.pointcloudOptions.sizeMax=b,this.pointcloudOptions.areaRatio=t.marker.border.arearatio,this.pointcloud.update(this.pointcloudOptions);var _=this.scene.xaxis,w=this.scene.yaxis,k=b/2||.5;t._extremes[_._id]=a(_,[d[0],d[2]],{ppad:k}),t._extremes[w._id]=a(w,[d[1],d[3]],{ppad:k})},l.dispose=function(){this.pointcloud.dispose()},e.exports=function(t,e){var r=new s(t,e.uid);return r.update(e),r}},{\\\"../../lib/str2rgbarray\\\":742,\\\"../../plots/cartesian/autorange\\\":766,\\\"../scatter/get_trace_color\\\":1121,\\\"gl-pointcloud2d\\\":292}],1100:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./attributes\\\");e.exports=function(t,e,r){function a(r,a){return n.coerce(t,e,i,r,a)}a(\\\"x\\\"),a(\\\"y\\\"),a(\\\"xbounds\\\"),a(\\\"ybounds\\\"),t.xy&&t.xy instanceof Float32Array&&(e.xy=t.xy),t.indices&&t.indices instanceof Int32Array&&(e.indices=t.indices),a(\\\"text\\\"),a(\\\"marker.color\\\",r),a(\\\"marker.opacity\\\"),a(\\\"marker.blend\\\"),a(\\\"marker.sizemin\\\"),a(\\\"marker.sizemax\\\"),a(\\\"marker.border.color\\\",r),a(\\\"marker.border.arearatio\\\"),e._length=null}},{\\\"../../lib\\\":719,\\\"./attributes\\\":1098}],1101:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),calc:t(\\\"../scatter3d/calc\\\"),plot:t(\\\"./convert\\\"),moduleType:\\\"trace\\\",name:\\\"pointcloud\\\",basePlotModule:t(\\\"../../plots/gl2d\\\"),categories:[\\\"gl\\\",\\\"gl2d\\\",\\\"showLegend\\\"],meta:{}}},{\\\"../../plots/gl2d\\\":805,\\\"../scatter3d/calc\\\":1139,\\\"./attributes\\\":1098,\\\"./convert\\\":1099,\\\"./defaults\\\":1100}],1102:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/font_attributes\\\"),i=t(\\\"../../plots/attributes\\\"),a=t(\\\"../../components/color/attributes\\\"),o=t(\\\"../../components/fx/attributes\\\"),s=t(\\\"../../plots/domain\\\").attributes,l=t(\\\"../../components/fx/hovertemplate_attributes\\\"),c=t(\\\"../../components/colorscale/attributes\\\"),u=t(\\\"../../plot_api/plot_template\\\").templatedArray,h=t(\\\"../../lib/extend\\\").extendFlat,f=t(\\\"../../plot_api/edit_types\\\").overrideAll;t(\\\"../../constants/docs\\\").FORMAT_LINK;(e.exports=f({hoverinfo:h({},i.hoverinfo,{flags:[],arrayOk:!1}),hoverlabel:o.hoverlabel,domain:s({name:\\\"sankey\\\",trace:!0}),orientation:{valType:\\\"enumerated\\\",values:[\\\"v\\\",\\\"h\\\"],dflt:\\\"h\\\"},valueformat:{valType:\\\"string\\\",dflt:\\\".3s\\\"},valuesuffix:{valType:\\\"string\\\",dflt:\\\"\\\"},arrangement:{valType:\\\"enumerated\\\",values:[\\\"snap\\\",\\\"perpendicular\\\",\\\"freeform\\\",\\\"fixed\\\"],dflt:\\\"snap\\\"},textfont:n({}),node:{label:{valType:\\\"data_array\\\",dflt:[]},groups:{valType:\\\"info_array\\\",impliedEdits:{x:[],y:[]},dimensions:2,freeLength:!0,dflt:[],items:{valType:\\\"number\\\",editType:\\\"calc\\\"}},x:{valType:\\\"data_array\\\",dflt:[]},y:{valType:\\\"data_array\\\",dflt:[]},color:{valType:\\\"color\\\",arrayOk:!0},line:{color:{valType:\\\"color\\\",dflt:a.defaultLine,arrayOk:!0},width:{valType:\\\"number\\\",min:0,dflt:.5,arrayOk:!0}},pad:{valType:\\\"number\\\",arrayOk:!1,min:0,dflt:20},thickness:{valType:\\\"number\\\",arrayOk:!1,min:1,dflt:20},hoverinfo:{valType:\\\"enumerated\\\",values:[\\\"all\\\",\\\"none\\\",\\\"skip\\\"],dflt:\\\"all\\\"},hoverlabel:o.hoverlabel,hovertemplate:l({},{keys:[\\\"value\\\",\\\"label\\\"]})},link:{label:{valType:\\\"data_array\\\",dflt:[]},color:{valType:\\\"color\\\",arrayOk:!0},line:{color:{valType:\\\"color\\\",dflt:a.defaultLine,arrayOk:!0},width:{valType:\\\"number\\\",min:0,dflt:0,arrayOk:!0}},source:{valType:\\\"data_array\\\",dflt:[]},target:{valType:\\\"data_array\\\",dflt:[]},value:{valType:\\\"data_array\\\",dflt:[]},hoverinfo:{valType:\\\"enumerated\\\",values:[\\\"all\\\",\\\"none\\\",\\\"skip\\\"],dflt:\\\"all\\\"},hoverlabel:o.hoverlabel,hovertemplate:l({},{keys:[\\\"value\\\",\\\"label\\\"]}),colorscales:u(\\\"concentrationscales\\\",{editType:\\\"calc\\\",label:{valType:\\\"string\\\",editType:\\\"calc\\\",dflt:\\\"\\\"},cmax:{valType:\\\"number\\\",editType:\\\"calc\\\",dflt:1},cmin:{valType:\\\"number\\\",editType:\\\"calc\\\",dflt:0},colorscale:h(c().colorscale,{dflt:[[0,\\\"white\\\"],[1,\\\"black\\\"]]})})}},\\\"calc\\\",\\\"nested\\\")).transforms=void 0},{\\\"../../components/color/attributes\\\":592,\\\"../../components/colorscale/attributes\\\":600,\\\"../../components/fx/attributes\\\":623,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../constants/docs\\\":690,\\\"../../lib/extend\\\":710,\\\"../../plot_api/edit_types\\\":750,\\\"../../plot_api/plot_template\\\":757,\\\"../../plots/attributes\\\":764,\\\"../../plots/domain\\\":792,\\\"../../plots/font_attributes\\\":793}],1103:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plot_api/edit_types\\\").overrideAll,i=t(\\\"../../plots/get_data\\\").getModuleCalcData,a=t(\\\"./plot\\\"),o=t(\\\"../../components/fx/layout_attributes\\\"),s=t(\\\"../../lib/setcursor\\\"),l=t(\\\"../../components/dragelement\\\"),c=t(\\\"../../plots/cartesian/select\\\").prepSelect,u=t(\\\"../../lib\\\"),h=t(\\\"../../registry\\\");function f(t,e){var r=t._fullData[e],n=t._fullLayout,i=n.dragmode,a=\\\"pan\\\"===n.dragmode?\\\"move\\\":\\\"crosshair\\\",o=r._bgRect;if(\\\"pan\\\"!==i&&\\\"zoom\\\"!==i){s(o,a);var f={_id:\\\"x\\\",c2p:u.identity,_offset:r._sankey.translateX,_length:r._sankey.width},p={_id:\\\"y\\\",c2p:u.identity,_offset:r._sankey.translateY,_length:r._sankey.height},d={gd:t,element:o.node(),plotinfo:{id:e,xaxis:f,yaxis:p,fillRangeItems:u.noop},subplot:e,xaxes:[f],yaxes:[p],doneFnCompleted:function(r){var n,i=t._fullData[e],a=i.node.groups.slice(),o=[];function s(t){for(var e=i._sankey.graph.nodes,r=0;r<e.length;r++)if(e[r].pointNumber===t)return e[r]}for(var l=0;l<r.length;l++){var c=s(r[l].pointNumber);if(c)if(c.group){for(var u=0;u<c.childrenNodes.length;u++)o.push(c.childrenNodes[u].pointNumber);a[c.pointNumber-i.node._count]=!1}else o.push(c.pointNumber)}n=a.filter(Boolean).concat([o]),h.call(\\\"_guiRestyle\\\",t,{\\\"node.groups\\\":[n]},e)},prepFn:function(t,e,r){c(t,e,r,d,i)}};l.init(d)}}r.name=\\\"sankey\\\",r.baseLayoutAttrOverrides=n({hoverlabel:o.hoverlabel},\\\"plot\\\",\\\"nested\\\"),r.plot=function(t){var e=i(t.calcdata,\\\"sankey\\\")[0];a(t,e),r.updateFx(t)},r.clean=function(t,e,r,n){var i=n._has&&n._has(\\\"sankey\\\"),a=e._has&&e._has(\\\"sankey\\\");i&&!a&&(n._paperdiv.selectAll(\\\".sankey\\\").remove(),n._paperdiv.selectAll(\\\".bgsankey\\\").remove())},r.updateFx=function(t){for(var e=0;e<t._fullData.length;e++)f(t,e)}},{\\\"../../components/dragelement\\\":611,\\\"../../components/fx/layout_attributes\\\":633,\\\"../../lib\\\":719,\\\"../../lib/setcursor\\\":739,\\\"../../plot_api/edit_types\\\":750,\\\"../../plots/cartesian/select\\\":784,\\\"../../plots/get_data\\\":802,\\\"../../registry\\\":847,\\\"./plot\\\":1108}],1104:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"strongly-connected-components\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../lib/gup\\\").wrap,o=i.isArrayOrTypedArray,s=i.isIndex,l=t(\\\"../../components/colorscale\\\");function c(t){var e,r=t.node,a=t.link,c=[],u=o(a.color),h={},f={},p=a.colorscales.length;for(e=0;e<p;e++){var d=a.colorscales[e],g=l.extractScale(d,{cLetter:\\\"c\\\"}),v=l.makeColorScaleFunc(g);f[d.label]=v}var m=0;for(e=0;e<a.value.length;e++)a.source[e]>m&&(m=a.source[e]),a.target[e]>m&&(m=a.target[e]);var y,x=m+1;t.node._count=x;var b=t.node.groups,_={};for(e=0;e<b.length;e++){var w=b[e];for(y=0;y<w.length;y++){var k=w[y],T=x+e;_.hasOwnProperty(k)?i.warn(\\\"Node \\\"+k+\\\" is already part of a group.\\\"):_[k]=T}}var A={source:[],target:[]};for(e=0;e<a.value.length;e++){var M=a.value[e],S=a.source[e],E=a.target[e];if(M>0&&s(S,x)&&s(E,x)&&(!_.hasOwnProperty(S)||!_.hasOwnProperty(E)||_[S]!==_[E])){_.hasOwnProperty(E)&&(E=_[E]),_.hasOwnProperty(S)&&(S=_[S]),E=+E,h[S=+S]=h[E]=!0;var C=\\\"\\\";a.label&&a.label[e]&&(C=a.label[e]);var L=null;C&&f.hasOwnProperty(C)&&(L=f[C]),c.push({pointNumber:e,label:C,color:u?a.color[e]:a.color,concentrationscale:L,source:S,target:E,value:+M}),A.source.push(S),A.target.push(E)}}var P=x+b.length,O=o(r.color),z=[];for(e=0;e<P;e++)if(h[e]){var I=r.label[e];z.push({group:e>x-1,childrenNodes:[],pointNumber:e,label:I,color:O?r.color[e]:r.color})}var D=!1;return function(t,e,r){for(var a=i.init2dArray(t,0),o=0;o<Math.min(e.length,r.length);o++)if(i.isIndex(e[o],t)&&i.isIndex(r[o],t)){if(e[o]===r[o])return!0;a[e[o]].push(r[o])}return n(a).components.some(function(t){return t.length>1})}(P,A.source,A.target)&&(D=!0),{circular:D,links:c,nodes:z,groups:b,groupLookup:_}}e.exports=function(t,e){var r=c(e);return a({circular:r.circular,_nodes:r.nodes,_links:r.links,_groups:r.groups,_groupLookup:r.groupLookup})}},{\\\"../../components/colorscale\\\":605,\\\"../../lib\\\":719,\\\"../../lib/gup\\\":717,\\\"strongly-connected-components\\\":530}],1105:[function(t,e,r){\\\"use strict\\\";e.exports={nodeTextOffsetHorizontal:4,nodeTextOffsetVertical:3,nodePadAcross:10,sankeyIterations:50,forceIterations:5,forceTicksPerFrame:10,duration:500,ease:\\\"linear\\\",cn:{sankey:\\\"sankey\\\",sankeyLinks:\\\"sankey-links\\\",sankeyLink:\\\"sankey-link\\\",sankeyNodeSet:\\\"sankey-node-set\\\",sankeyNode:\\\"sankey-node\\\",nodeRect:\\\"node-rect\\\",nodeCapture:\\\"node-capture\\\",nodeCentered:\\\"node-entered\\\",nodeLabelGuide:\\\"node-label-guide\\\",nodeLabel:\\\"node-label\\\",nodeLabelTextPath:\\\"node-label-text-path\\\"}}},{}],1106:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./attributes\\\"),a=t(\\\"../../components/color\\\"),o=t(\\\"tinycolor2\\\"),s=t(\\\"../../plots/domain\\\").defaults,l=t(\\\"../../components/fx/hoverlabel_defaults\\\"),c=t(\\\"../../plot_api/plot_template\\\"),u=t(\\\"../../plots/array_container_defaults\\\");function h(t,e){function r(r,a){return n.coerce(t,e,i.link.colorscales,r,a)}r(\\\"label\\\"),r(\\\"cmin\\\"),r(\\\"cmax\\\"),r(\\\"colorscale\\\")}e.exports=function(t,e,r,f){function p(r,a){return n.coerce(t,e,i,r,a)}var d=n.extendDeep(f.hoverlabel,t.hoverlabel),g=t.node,v=c.newContainer(e,\\\"node\\\");function m(t,e){return n.coerce(g,v,i.node,t,e)}m(\\\"label\\\"),m(\\\"groups\\\"),m(\\\"x\\\"),m(\\\"y\\\"),m(\\\"pad\\\"),m(\\\"thickness\\\"),m(\\\"line.color\\\"),m(\\\"line.width\\\"),m(\\\"hoverinfo\\\",t.hoverinfo),l(g,v,m,d),m(\\\"hovertemplate\\\");var y=f.colorway;m(\\\"color\\\",v.label.map(function(t,e){return a.addOpacity(function(t){return y[t%y.length]}(e),.8)}));var x=t.link||{},b=c.newContainer(e,\\\"link\\\");function _(t,e){return n.coerce(x,b,i.link,t,e)}_(\\\"label\\\"),_(\\\"source\\\"),_(\\\"target\\\"),_(\\\"value\\\"),_(\\\"line.color\\\"),_(\\\"line.width\\\"),_(\\\"hoverinfo\\\",t.hoverinfo),l(x,b,_,d),_(\\\"hovertemplate\\\");var w,k=o(f.paper_bgcolor).getLuminance()<.333?\\\"rgba(255, 255, 255, 0.6)\\\":\\\"rgba(0, 0, 0, 0.2)\\\";_(\\\"color\\\",n.repeat(k,b.value.length)),u(x,b,{name:\\\"colorscales\\\",handleItemDefaults:h}),s(e,f,p),p(\\\"orientation\\\"),p(\\\"valueformat\\\"),p(\\\"valuesuffix\\\"),v.x.length&&v.y.length&&(w=\\\"freeform\\\"),p(\\\"arrangement\\\",w),n.coerceFont(p,\\\"textfont\\\",n.extendFlat({},f.font)),e._length=null}},{\\\"../../components/color\\\":593,\\\"../../components/fx/hoverlabel_defaults\\\":630,\\\"../../lib\\\":719,\\\"../../plot_api/plot_template\\\":757,\\\"../../plots/array_container_defaults\\\":763,\\\"../../plots/domain\\\":792,\\\"./attributes\\\":1102,tinycolor2:537}],1107:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),calc:t(\\\"./calc\\\"),plot:t(\\\"./plot\\\"),moduleType:\\\"trace\\\",name:\\\"sankey\\\",basePlotModule:t(\\\"./base_plot\\\"),selectPoints:t(\\\"./select.js\\\"),categories:[\\\"noOpacity\\\"],meta:{}}},{\\\"./attributes\\\":1102,\\\"./base_plot\\\":1103,\\\"./calc\\\":1104,\\\"./defaults\\\":1106,\\\"./plot\\\":1108,\\\"./select.js\\\":1110}],1108:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"./render\\\"),a=t(\\\"../../components/fx\\\"),o=t(\\\"../../components/color\\\"),s=t(\\\"../../lib\\\"),l=t(\\\"./constants\\\").cn,c=s._;function u(t){return\\\"\\\"!==t}function h(t,e){return t.filter(function(t){return t.key===e.traceId})}function f(t,e){n.select(t).select(\\\"path\\\").style(\\\"fill-opacity\\\",e),n.select(t).select(\\\"rect\\\").style(\\\"fill-opacity\\\",e)}function p(t){n.select(t).select(\\\"text.name\\\").style(\\\"fill\\\",\\\"black\\\")}function d(t){return function(e){return-1!==t.node.sourceLinks.indexOf(e.link)||-1!==t.node.targetLinks.indexOf(e.link)}}function g(t){return function(e){return-1!==e.node.sourceLinks.indexOf(t.link)||-1!==e.node.targetLinks.indexOf(t.link)}}function v(t,e,r){e&&r&&h(r,e).selectAll(\\\".\\\"+l.sankeyLink).filter(d(e)).call(y.bind(0,e,r,!1))}function m(t,e,r){e&&r&&h(r,e).selectAll(\\\".\\\"+l.sankeyLink).filter(d(e)).call(x.bind(0,e,r,!1))}function y(t,e,r,n){var i=n.datum().link.label;n.style(\\\"fill-opacity\\\",function(t){if(!t.link.concentrationscale)return.4}),i&&h(e,t).selectAll(\\\".\\\"+l.sankeyLink).filter(function(t){return t.link.label===i}).style(\\\"fill-opacity\\\",function(t){if(!t.link.concentrationscale)return.4}),r&&h(e,t).selectAll(\\\".\\\"+l.sankeyNode).filter(g(t)).call(v)}function x(t,e,r,n){var i=n.datum().link.label;n.style(\\\"fill-opacity\\\",function(t){return t.tinyColorAlpha}),i&&h(e,t).selectAll(\\\".\\\"+l.sankeyLink).filter(function(t){return t.link.label===i}).style(\\\"fill-opacity\\\",function(t){return t.tinyColorAlpha}),r&&h(e,t).selectAll(l.sankeyNode).filter(g(t)).call(m)}function b(t,e){var r=t.hoverlabel||{},n=s.nestedProperty(r,e).get();return!Array.isArray(n)&&n}e.exports=function(t,e){for(var r=t._fullLayout,s=r._paper,h=r._size,d=0;d<t._fullData.length;d++)if(t._fullData[d].visible&&t._fullData[d].type===l.sankey&&!t._fullData[d]._viewInitial){var g=t._fullData[d].node;t._fullData[d]._viewInitial={node:{groups:g.groups.slice(),x:g.x.slice(),y:g.y.slice()}}}var _=c(t,\\\"source:\\\")+\\\" \\\",w=c(t,\\\"target:\\\")+\\\" \\\",k=c(t,\\\"concentration:\\\")+\\\" \\\",T=c(t,\\\"incoming flow count:\\\")+\\\" \\\",A=c(t,\\\"outgoing flow count:\\\")+\\\" \\\";i(t,s,e,{width:h.w,height:h.h,margin:{t:h.t,r:h.r,b:h.b,l:h.l}},{linkEvents:{hover:function(e,r,i){!1!==t._fullLayout.hovermode&&(n.select(e).call(y.bind(0,r,i,!0)),\\\"skip\\\"!==r.link.trace.link.hoverinfo&&(r.link.fullData=r.link.trace,t.emit(\\\"plotly_hover\\\",{event:n.event,points:[r.link]})))},follow:function(e,i){if(!1!==t._fullLayout.hovermode){var s=i.link.trace.link;if(\\\"none\\\"!==s.hoverinfo&&\\\"skip\\\"!==s.hoverinfo){for(var l=[],c=0,h=0;h<i.flow.links.length;h++){var d=i.flow.links[h];if(\\\"closest\\\"!==t._fullLayout.hovermode||i.link.pointNumber===d.pointNumber){i.link.pointNumber===d.pointNumber&&(c=h),d.fullData=d.trace,s=i.link.trace.link;var g=m(d),v={valueLabel:n.format(i.valueFormat)(d.value)+i.valueSuffix};l.push({x:g[0],y:g[1],name:v.valueLabel,text:[d.label||\\\"\\\",_+d.source.label,w+d.target.label,d.concentrationscale?k+n.format(\\\"%0.2f\\\")(d.flow.labelConcentration):\\\"\\\"].filter(u).join(\\\"<br>\\\"),color:b(s,\\\"bgcolor\\\")||o.addOpacity(d.color,1),borderColor:b(s,\\\"bordercolor\\\"),fontFamily:b(s,\\\"font.family\\\"),fontSize:b(s,\\\"font.size\\\"),fontColor:b(s,\\\"font.color\\\"),nameLength:b(s,\\\"namelength\\\"),textAlign:b(s,\\\"align\\\"),idealAlign:n.event.x<g[0]?\\\"right\\\":\\\"left\\\",hovertemplate:s.hovertemplate,hovertemplateLabels:v,eventData:[d]})}}a.loneHover(l,{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:t,anchorIndex:c}).each(function(){i.link.concentrationscale||f(this,.65),p(this)})}}function m(t){var e,r;return t.circular?(e=(t.circularPathData.leftInnerExtent+t.circularPathData.rightInnerExtent)/2+i.parent.translateX,r=t.circularPathData.verticalFullExtent+i.parent.translateY):(e=(t.source.x1+t.target.x0)/2+i.parent.translateX,r=(t.y0+t.y1)/2+i.parent.translateY),[e,r]}},unhover:function(e,i,o){!1!==t._fullLayout.hovermode&&(n.select(e).call(x.bind(0,i,o,!0)),\\\"skip\\\"!==i.link.trace.link.hoverinfo&&(i.link.fullData=i.link.trace,t.emit(\\\"plotly_unhover\\\",{event:n.event,points:[i.link]})),a.loneUnhover(r._hoverlayer.node()))},select:function(e,r){var i=r.link;i.originalEvent=n.event,t._hoverdata=[i],a.click(t,{target:!0})}},nodeEvents:{hover:function(e,r,i){!1!==t._fullLayout.hovermode&&(n.select(e).call(v,r,i),\\\"skip\\\"!==r.node.trace.node.hoverinfo&&(r.node.fullData=r.node.trace,t.emit(\\\"plotly_hover\\\",{event:n.event,points:[r.node]})))},follow:function(e,i){if(!1!==t._fullLayout.hovermode){var o=i.node.trace.node;if(\\\"none\\\"!==o.hoverinfo&&\\\"skip\\\"!==o.hoverinfo){var s=n.select(e).select(\\\".\\\"+l.nodeRect),c=t._fullLayout._paperdiv.node().getBoundingClientRect(),h=s.node().getBoundingClientRect(),d=h.left-2-c.left,g=h.right+2-c.left,v=h.top+h.height/4-c.top,m={valueLabel:n.format(i.valueFormat)(i.node.value)+i.valueSuffix};i.node.fullData=i.node.trace;var y=a.loneHover({x0:d,x1:g,y:v,name:n.format(i.valueFormat)(i.node.value)+i.valueSuffix,text:[i.node.label,T+i.node.targetLinks.length,A+i.node.sourceLinks.length].filter(u).join(\\\"<br>\\\"),color:b(o,\\\"bgcolor\\\")||i.tinyColorHue,borderColor:b(o,\\\"bordercolor\\\"),fontFamily:b(o,\\\"font.family\\\"),fontSize:b(o,\\\"font.size\\\"),fontColor:b(o,\\\"font.color\\\"),nameLength:b(o,\\\"namelength\\\"),textAlign:b(o,\\\"align\\\"),idealAlign:\\\"left\\\",hovertemplate:o.hovertemplate,hovertemplateLabels:m,eventData:[i.node]},{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:t});f(y,.85),p(y)}}},unhover:function(e,i,o){!1!==t._fullLayout.hovermode&&(n.select(e).call(m,i,o),\\\"skip\\\"!==i.node.trace.node.hoverinfo&&(i.node.fullData=i.node.trace,t.emit(\\\"plotly_unhover\\\",{event:n.event,points:[i.node]})),a.loneUnhover(r._hoverlayer.node()))},select:function(e,r,i){var o=r.node;o.originalEvent=n.event,t._hoverdata=[o],n.select(e).call(m,r,i),a.click(t,{target:!0})}}})}},{\\\"../../components/color\\\":593,\\\"../../components/fx\\\":632,\\\"../../lib\\\":719,\\\"./constants\\\":1105,\\\"./render\\\":1109,d3:163}],1109:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./constants\\\"),i=t(\\\"d3\\\"),a=t(\\\"tinycolor2\\\"),o=t(\\\"../../components/color\\\"),s=t(\\\"../../components/drawing\\\"),l=t(\\\"@plotly/d3-sankey\\\"),c=t(\\\"@plotly/d3-sankey-circular\\\"),u=t(\\\"d3-force\\\"),h=t(\\\"../../lib\\\"),f=t(\\\"../../lib/gup\\\"),p=f.keyFun,d=f.repeat,g=f.unwrap,v=t(\\\"d3-interpolate\\\").interpolateNumber,m=t(\\\"../../registry\\\");function y(){var t=.5;return function(e){if(e.link.circular)return r=e.link,n=r.width/2,i=r.circularPathData,\\\"top\\\"===r.circularLinkType?\\\"M \\\"+i.targetX+\\\" \\\"+(i.targetY+n)+\\\" L\\\"+i.rightInnerExtent+\\\" \\\"+(i.targetY+n)+\\\"A\\\"+(i.rightLargeArcRadius+n)+\\\" \\\"+(i.rightSmallArcRadius+n)+\\\" 0 0 1 \\\"+(i.rightFullExtent-n)+\\\" \\\"+(i.targetY-i.rightSmallArcRadius)+\\\"L\\\"+(i.rightFullExtent-n)+\\\" \\\"+i.verticalRightInnerExtent+\\\"A\\\"+(i.rightLargeArcRadius+n)+\\\" \\\"+(i.rightLargeArcRadius+n)+\\\" 0 0 1 \\\"+i.rightInnerExtent+\\\" \\\"+(i.verticalFullExtent-n)+\\\"L\\\"+i.leftInnerExtent+\\\" \\\"+(i.verticalFullExtent-n)+\\\"A\\\"+(i.leftLargeArcRadius+n)+\\\" \\\"+(i.leftLargeArcRadius+n)+\\\" 0 0 1 \\\"+(i.leftFullExtent+n)+\\\" \\\"+i.verticalLeftInnerExtent+\\\"L\\\"+(i.leftFullExtent+n)+\\\" \\\"+(i.sourceY-i.leftSmallArcRadius)+\\\"A\\\"+(i.leftLargeArcRadius+n)+\\\" \\\"+(i.leftSmallArcRadius+n)+\\\" 0 0 1 \\\"+i.leftInnerExtent+\\\" \\\"+(i.sourceY+n)+\\\"L\\\"+i.sourceX+\\\" \\\"+(i.sourceY+n)+\\\"L\\\"+i.sourceX+\\\" \\\"+(i.sourceY-n)+\\\"L\\\"+i.leftInnerExtent+\\\" \\\"+(i.sourceY-n)+\\\"A\\\"+(i.leftLargeArcRadius-n)+\\\" \\\"+(i.leftSmallArcRadius-n)+\\\" 0 0 0 \\\"+(i.leftFullExtent-n)+\\\" \\\"+(i.sourceY-i.leftSmallArcRadius)+\\\"L\\\"+(i.leftFullExtent-n)+\\\" \\\"+i.verticalLeftInnerExtent+\\\"A\\\"+(i.leftLargeArcRadius-n)+\\\" \\\"+(i.leftLargeArcRadius-n)+\\\" 0 0 0 \\\"+i.leftInnerExtent+\\\" \\\"+(i.verticalFullExtent+n)+\\\"L\\\"+i.rightInnerExtent+\\\" \\\"+(i.verticalFullExtent+n)+\\\"A\\\"+(i.rightLargeArcRadius-n)+\\\" \\\"+(i.rightLargeArcRadius-n)+\\\" 0 0 0 \\\"+(i.rightFullExtent+n)+\\\" \\\"+i.verticalRightInnerExtent+\\\"L\\\"+(i.rightFullExtent+n)+\\\" \\\"+(i.targetY-i.rightSmallArcRadius)+\\\"A\\\"+(i.rightLargeArcRadius-n)+\\\" \\\"+(i.rightSmallArcRadius-n)+\\\" 0 0 0 \\\"+i.rightInnerExtent+\\\" \\\"+(i.targetY-n)+\\\"L\\\"+i.targetX+\\\" \\\"+(i.targetY-n)+\\\"Z\\\":\\\"M \\\"+i.targetX+\\\" \\\"+(i.targetY-n)+\\\" L\\\"+i.rightInnerExtent+\\\" \\\"+(i.targetY-n)+\\\"A\\\"+(i.rightLargeArcRadius+n)+\\\" \\\"+(i.rightSmallArcRadius+n)+\\\" 0 0 0 \\\"+(i.rightFullExtent-n)+\\\" \\\"+(i.targetY+i.rightSmallArcRadius)+\\\"L\\\"+(i.rightFullExtent-n)+\\\" \\\"+i.verticalRightInnerExtent+\\\"A\\\"+(i.rightLargeArcRadius+n)+\\\" \\\"+(i.rightLargeArcRadius+n)+\\\" 0 0 0 \\\"+i.rightInnerExtent+\\\" \\\"+(i.verticalFullExtent+n)+\\\"L\\\"+i.leftInnerExtent+\\\" \\\"+(i.verticalFullExtent+n)+\\\"A\\\"+(i.leftLargeArcRadius+n)+\\\" \\\"+(i.leftLargeArcRadius+n)+\\\" 0 0 0 \\\"+(i.leftFullExtent+n)+\\\" \\\"+i.verticalLeftInnerExtent+\\\"L\\\"+(i.leftFullExtent+n)+\\\" \\\"+(i.sourceY+i.leftSmallArcRadius)+\\\"A\\\"+(i.leftLargeArcRadius+n)+\\\" \\\"+(i.leftSmallArcRadius+n)+\\\" 0 0 0 \\\"+i.leftInnerExtent+\\\" \\\"+(i.sourceY-n)+\\\"L\\\"+i.sourceX+\\\" \\\"+(i.sourceY-n)+\\\"L\\\"+i.sourceX+\\\" \\\"+(i.sourceY+n)+\\\"L\\\"+i.leftInnerExtent+\\\" \\\"+(i.sourceY+n)+\\\"A\\\"+(i.leftLargeArcRadius-n)+\\\" \\\"+(i.leftSmallArcRadius-n)+\\\" 0 0 1 \\\"+(i.leftFullExtent-n)+\\\" \\\"+(i.sourceY+i.leftSmallArcRadius)+\\\"L\\\"+(i.leftFullExtent-n)+\\\" \\\"+i.verticalLeftInnerExtent+\\\"A\\\"+(i.leftLargeArcRadius-n)+\\\" \\\"+(i.leftLargeArcRadius-n)+\\\" 0 0 1 \\\"+i.leftInnerExtent+\\\" \\\"+(i.verticalFullExtent-n)+\\\"L\\\"+i.rightInnerExtent+\\\" \\\"+(i.verticalFullExtent-n)+\\\"A\\\"+(i.rightLargeArcRadius-n)+\\\" \\\"+(i.rightLargeArcRadius-n)+\\\" 0 0 1 \\\"+(i.rightFullExtent+n)+\\\" \\\"+i.verticalRightInnerExtent+\\\"L\\\"+(i.rightFullExtent+n)+\\\" \\\"+(i.targetY+i.rightSmallArcRadius)+\\\"A\\\"+(i.rightLargeArcRadius-n)+\\\" \\\"+(i.rightSmallArcRadius-n)+\\\" 0 0 1 \\\"+i.rightInnerExtent+\\\" \\\"+(i.targetY+n)+\\\"L\\\"+i.targetX+\\\" \\\"+(i.targetY+n)+\\\"Z\\\";var r,n,i,a=e.link.source.x1,o=e.link.target.x0,s=v(a,o),l=s(t),c=s(1-t),u=e.link.y0-e.link.width/2,h=e.link.y0+e.link.width/2,f=e.link.y1-e.link.width/2,p=e.link.y1+e.link.width/2;return\\\"M\\\"+a+\\\",\\\"+u+\\\"C\\\"+l+\\\",\\\"+u+\\\" \\\"+c+\\\",\\\"+f+\\\" \\\"+o+\\\",\\\"+f+\\\"L\\\"+o+\\\",\\\"+p+\\\"C\\\"+c+\\\",\\\"+p+\\\" \\\"+l+\\\",\\\"+h+\\\" \\\"+a+\\\",\\\"+h+\\\"Z\\\"}}function x(t){t.attr(\\\"transform\\\",function(t){return\\\"translate(\\\"+t.node.x0.toFixed(3)+\\\", \\\"+t.node.y0.toFixed(3)+\\\")\\\"})}function b(t){t.call(x)}function _(t,e){t.call(b),e.attr(\\\"d\\\",y())}function w(t){t.attr(\\\"width\\\",function(t){return t.node.x1-t.node.x0}).attr(\\\"height\\\",function(t){return t.visibleHeight})}function k(t){return t.link.width>1||t.linkLineWidth>0}function T(t){return\\\"translate(\\\"+t.translateX+\\\",\\\"+t.translateY+\\\")\\\"+(t.horizontal?\\\"matrix(1 0 0 1 0 0)\\\":\\\"matrix(0 1 1 0 0 0)\\\")}function A(t){return\\\"translate(\\\"+(t.horizontal?0:t.labelY)+\\\" \\\"+(t.horizontal?t.labelY:0)+\\\")\\\"}function M(t){return i.svg.line()([[t.horizontal?t.left?-t.sizeAcross:t.visibleWidth+n.nodeTextOffsetHorizontal:n.nodeTextOffsetHorizontal,0],[t.horizontal?t.left?-n.nodeTextOffsetHorizontal:t.sizeAcross:t.visibleHeight-n.nodeTextOffsetHorizontal,0]])}function S(t){return t.horizontal?\\\"matrix(1 0 0 1 0 0)\\\":\\\"matrix(0 1 1 0 0 0)\\\"}function E(t){return t.horizontal?\\\"scale(1 1)\\\":\\\"scale(-1 1)\\\"}function C(t){return t.darkBackground&&!t.horizontal?\\\"rgb(255,255,255)\\\":\\\"rgb(0,0,0)\\\"}function L(t){return t.horizontal&&t.left?\\\"100%\\\":\\\"0%\\\"}function P(t,e,r){t.on(\\\".basic\\\",null).on(\\\"mouseover.basic\\\",function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.hover(this,t,e),t.interactionState.hovered=[this,t])}).on(\\\"mousemove.basic\\\",function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.follow(this,t),t.interactionState.hovered=[this,t])}).on(\\\"mouseout.basic\\\",function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.unhover(this,t,e),t.interactionState.hovered=!1)}).on(\\\"click.basic\\\",function(t){t.interactionState.hovered&&(r.unhover(this,t,e),t.interactionState.hovered=!1),t.interactionState.dragInProgress||t.partOfGroup||r.select(this,t,e)})}function O(t,e,r,a){var o=i.behavior.drag().origin(function(t){return{x:t.node.x0+t.visibleWidth/2,y:t.node.y0+t.visibleHeight/2}}).on(\\\"dragstart\\\",function(i){if(\\\"fixed\\\"!==i.arrangement&&(h.ensureSingle(a._fullLayout._infolayer,\\\"g\\\",\\\"dragcover\\\",function(t){a._fullLayout._dragCover=t}),h.raiseToTop(this),i.interactionState.dragInProgress=i.node,I(i.node),i.interactionState.hovered&&(r.nodeEvents.unhover.apply(0,i.interactionState.hovered),i.interactionState.hovered=!1),\\\"snap\\\"===i.arrangement)){var o=i.traceId+\\\"|\\\"+i.key;i.forceLayouts[o]?i.forceLayouts[o].alpha(1):function(t,e,r,i){!function(t){for(var e=0;e<t.length;e++)t[e].y=(t[e].y0+t[e].y1)/2,t[e].x=(t[e].x0+t[e].x1)/2}(r.graph.nodes);var a=r.graph.nodes.filter(function(t){return t.originalX===r.node.originalX}).filter(function(t){return!t.partOfGroup});r.forceLayouts[e]=u.forceSimulation(a).alphaDecay(0).force(\\\"collide\\\",u.forceCollide().radius(function(t){return t.dy/2+r.nodePad/2}).strength(1).iterations(n.forceIterations)).force(\\\"constrain\\\",function(t,e,r,i){return function(){for(var t=0,a=0;a<r.length;a++){var o=r[a];o===i.interactionState.dragInProgress?(o.x=o.lastDraggedX,o.y=o.lastDraggedY):(o.vx=(o.originalX-o.x)/n.forceTicksPerFrame,o.y=Math.min(i.size-o.dy/2,Math.max(o.dy/2,o.y))),t=Math.max(t,Math.abs(o.vx),Math.abs(o.vy))}!i.interactionState.dragInProgress&&t<.1&&i.forceLayouts[e].alpha()>0&&i.forceLayouts[e].alpha(0)}}(0,e,a,r)).stop()}(0,o,i),function(t,e,r,i,a){window.requestAnimationFrame(function o(){var s;for(s=0;s<n.forceTicksPerFrame;s++)r.forceLayouts[i].tick();var l=r.graph.nodes;if(function(t){for(var e=0;e<t.length;e++)t[e].y0=t[e].y-t[e].dy/2,t[e].y1=t[e].y0+t[e].dy,t[e].x0=t[e].x-t[e].dx/2,t[e].x1=t[e].x0+t[e].dx}(l),r.sankey.update(r.graph),_(t.filter(D(r)),e),r.forceLayouts[i].alpha()>0)window.requestAnimationFrame(o);else{var c=r.node.originalX;r.node.x0=c-r.visibleWidth/2,r.node.x1=c+r.visibleWidth/2,z(r,a)}})}(t,e,i,o,a)}}).on(\\\"drag\\\",function(r){if(\\\"fixed\\\"!==r.arrangement){var n=i.event.x,a=i.event.y;\\\"snap\\\"===r.arrangement?(r.node.x0=n-r.visibleWidth/2,r.node.x1=n+r.visibleWidth/2,r.node.y0=a-r.visibleHeight/2,r.node.y1=a+r.visibleHeight/2):(\\\"freeform\\\"===r.arrangement&&(r.node.x0=n-r.visibleWidth/2,r.node.x1=n+r.visibleWidth/2),a=Math.max(0,Math.min(r.size-r.visibleHeight/2,a)),r.node.y0=a-r.visibleHeight/2,r.node.y1=a+r.visibleHeight/2),I(r.node),\\\"snap\\\"!==r.arrangement&&(r.sankey.update(r.graph),_(t.filter(D(r)),e))}}).on(\\\"dragend\\\",function(t){if(\\\"fixed\\\"!==t.arrangement){t.interactionState.dragInProgress=!1;for(var e=0;e<t.node.childrenNodes.length;e++)t.node.childrenNodes[e].x=t.node.x,t.node.childrenNodes[e].y=t.node.y;\\\"snap\\\"!==t.arrangement&&z(t,a)}});t.on(\\\".drag\\\",null).call(o)}function z(t,e){for(var r=[],n=[],i=0;i<t.graph.nodes.length;i++){var a=(t.graph.nodes[i].x0+t.graph.nodes[i].x1)/2,o=(t.graph.nodes[i].y0+t.graph.nodes[i].y1)/2;r.push(a/t.figure.width),n.push(o/t.figure.height)}m.call(\\\"_guiRestyle\\\",e,{\\\"node.x\\\":[r],\\\"node.y\\\":[n]},t.trace.index).then(function(){e._fullLayout._dragCover&&e._fullLayout._dragCover.remove()})}function I(t){t.lastDraggedX=t.x0+t.dx/2,t.lastDraggedY=t.y0+t.dy/2}function D(t){return function(e){return e.node.originalX===t.node.originalX}}e.exports=function(t,e,r,u,f){var v=!1;h.ensureSingle(t._fullLayout._infolayer,\\\"g\\\",\\\"first-render\\\",function(){v=!0});var m=t._fullLayout._dragCover,b=r.filter(function(t){return g(t).trace.visible}).map(function(t,e,r){var i,o=g(e),s=o.trace,u=s.domain,f=\\\"h\\\"===s.orientation,p=s.node.pad,d=s.node.thickness,v=t.width*(u.x[1]-u.x[0]),m=t.height*(u.y[1]-u.y[0]),y=o._nodes,x=o._links,b=o.circular;(i=b?c.sankeyCircular().circularLinkGap(0):l.sankey()).iterations(n.sankeyIterations).size(f?[v,m]:[m,v]).nodeWidth(d).nodePadding(p).nodeId(function(t){return t.pointNumber}).nodes(y).links(x);var _,w,k,T=i();for(var A in i.nodePadding()<p&&h.warn(\\\"node.pad was reduced to \\\",i.nodePadding(),\\\" to fit within the figure.\\\"),o._groupLookup){var M,S=parseInt(o._groupLookup[A]);for(_=0;_<T.nodes.length;_++)if(T.nodes[_].pointNumber===S){M=T.nodes[_];break}if(M){var E={pointNumber:parseInt(A),x0:M.x0,x1:M.x1,y0:M.y0,y1:M.y1,partOfGroup:!0,sourceLinks:[],targetLinks:[]};T.nodes.unshift(E),M.childrenNodes.unshift(E)}}if(function(){for(_=0;_<T.nodes.length;_++){var t,e,r=T.nodes[_],n={};for(w=0;w<r.targetLinks.length;w++)t=(e=r.targetLinks[w]).source.pointNumber+\\\":\\\"+e.target.pointNumber,n.hasOwnProperty(t)||(n[t]=[]),n[t].push(e);var i=Object.keys(n);for(w=0;w<i.length;w++){var o=n[t=i[w]],s=0,l={};for(k=0;k<o.length;k++)l[(e=o[k]).label]||(l[e.label]=0),l[e.label]+=e.value,s+=e.value;for(k=0;k<o.length;k++)(e=o[k]).flow={value:s,labelConcentration:l[e.label]/s,concentration:e.value/s,links:o},e.concentrationscale&&(e.color=a(e.concentrationscale(e.flow.labelConcentration)))}var c=0;for(w=0;w<r.sourceLinks.length;w++)c+=r.sourceLinks[w].value;for(w=0;w<r.sourceLinks.length;w++)(e=r.sourceLinks[w]).concentrationOut=e.value/c;var u=0;for(w=0;w<r.targetLinks.length;w++)u+=r.targetLinks[w].value;for(w=0;w<r.targetLinks.length;w++)(e=r.targetLinks[w]).concenrationIn=e.value/u}}(),s.node.x.length&&s.node.y.length){for(_=0;_<Math.min(s.node.x.length,s.node.y.length,T.nodes.length);_++)if(s.node.x[_]&&s.node.y[_]){var C=[s.node.x[_]*v,s.node.y[_]*m];T.nodes[_].x0=C[0]-d/2,T.nodes[_].x1=C[0]+d/2;var L=T.nodes[_].y1-T.nodes[_].y0;T.nodes[_].y0=C[1]-L/2,T.nodes[_].y1=C[1]+L/2}\\\"snap\\\"===s.arrangement&&function(t){t.forEach(function(t){var e,r,n,i=0,a=t.length;for(t.sort(function(t,e){return t.y0-e.y0}),n=0;n<a;++n)(e=t[n]).y0>=i||(r=i-e.y0)>1e-6&&(e.y0+=r,e.y1+=r),i=e.y1+p})}(function(t){var e,r,n=t.map(function(t,e){return{x0:t.x0,index:e}}).sort(function(t,e){return t.x0-e.x0}),i=[],a=-1,o=-1/0;for(_=0;_<n.length;_++){var s=t[n[_].index];s.x0>o+d&&(a+=1,e=s.x0),o=s.x0,i[a]||(i[a]=[]),i[a].push(s),r=e-s.x0,s.x0+=r,s.x1+=r}return i}(y=T.nodes)),i.update(T)}return{circular:b,key:r,trace:s,guid:h.randstr(),horizontal:f,width:v,height:m,nodePad:s.node.pad,nodeLineColor:s.node.line.color,nodeLineWidth:s.node.line.width,linkLineColor:s.link.line.color,linkLineWidth:s.link.line.width,valueFormat:s.valueformat,valueSuffix:s.valuesuffix,textFont:s.textfont,translateX:u.x[0]*t.width+t.margin.l,translateY:t.height-u.y[1]*t.height+t.margin.t,dragParallel:f?m:v,dragPerpendicular:f?v:m,arrangement:s.arrangement,sankey:i,graph:T,forceLayouts:{},interactionState:{dragInProgress:!1,hovered:!1}}}.bind(null,u)),_=e.selectAll(\\\".\\\"+n.cn.sankey).data(b,p);_.exit().remove(),_.enter().append(\\\"g\\\").classed(n.cn.sankey,!0).style(\\\"box-sizing\\\",\\\"content-box\\\").style(\\\"position\\\",\\\"absolute\\\").style(\\\"left\\\",0).style(\\\"shape-rendering\\\",\\\"geometricPrecision\\\").style(\\\"pointer-events\\\",\\\"auto\\\").attr(\\\"transform\\\",T),_.each(function(e,r){t._fullData[r]._sankey=e;var n=\\\"bgsankey-\\\"+e.trace.uid+\\\"-\\\"+r;h.ensureSingle(t._fullLayout._draggers,\\\"rect\\\",n),t._fullData[r]._bgRect=i.select(\\\".\\\"+n),t._fullData[r]._bgRect.style(\\\"pointer-events\\\",\\\"all\\\").attr(\\\"width\\\",e.width).attr(\\\"height\\\",e.height).attr(\\\"x\\\",e.translateX).attr(\\\"y\\\",e.translateY).classed(\\\"bgsankey\\\",!0).style({fill:\\\"transparent\\\",\\\"stroke-width\\\":0})}),_.transition().ease(n.ease).duration(n.duration).attr(\\\"transform\\\",T);var z=_.selectAll(\\\".\\\"+n.cn.sankeyLinks).data(d,p);z.enter().append(\\\"g\\\").classed(n.cn.sankeyLinks,!0).style(\\\"fill\\\",\\\"none\\\");var I=z.selectAll(\\\".\\\"+n.cn.sankeyLink).data(function(t){return t.graph.links.filter(function(t){return t.value}).map(function(t,e,r){var n=a(e.color),i=e.source.label+\\\"|\\\"+e.target.label+\\\"__\\\"+r;return e.trace=t.trace,e.curveNumber=t.trace.index,{circular:t.circular,key:i,traceId:t.key,pointNumber:e.pointNumber,link:e,tinyColorHue:o.tinyRGB(n),tinyColorAlpha:n.getAlpha(),linkPath:y,linkLineColor:t.linkLineColor,linkLineWidth:t.linkLineWidth,valueFormat:t.valueFormat,valueSuffix:t.valueSuffix,sankey:t.sankey,parent:t,interactionState:t.interactionState,flow:e.flow}}.bind(null,t))},p);I.enter().append(\\\"path\\\").classed(n.cn.sankeyLink,!0).call(P,_,f.linkEvents),I.style(\\\"stroke\\\",function(t){return k(t)?o.tinyRGB(a(t.linkLineColor)):t.tinyColorHue}).style(\\\"stroke-opacity\\\",function(t){return k(t)?o.opacity(t.linkLineColor):t.tinyColorAlpha}).style(\\\"fill\\\",function(t){return t.tinyColorHue}).style(\\\"fill-opacity\\\",function(t){return t.tinyColorAlpha}).style(\\\"stroke-width\\\",function(t){return k(t)?t.linkLineWidth:1}).attr(\\\"d\\\",y()),I.style(\\\"opacity\\\",function(){return t._context.staticPlot||v||m?1:0}).transition().ease(n.ease).duration(n.duration).style(\\\"opacity\\\",1),I.exit().transition().ease(n.ease).duration(n.duration).style(\\\"opacity\\\",0).remove();var D=_.selectAll(\\\".\\\"+n.cn.sankeyNodeSet).data(d,p);D.enter().append(\\\"g\\\").classed(n.cn.sankeyNodeSet,!0),D.style(\\\"cursor\\\",function(t){switch(t.arrangement){case\\\"fixed\\\":return\\\"default\\\";case\\\"perpendicular\\\":return\\\"ns-resize\\\";default:return\\\"move\\\"}});var R=D.selectAll(\\\".\\\"+n.cn.sankeyNode).data(function(t){var e=t.graph.nodes;return function(t){var e,r=[];for(e=0;e<t.length;e++)t[e].originalX=(t[e].x0+t[e].x1)/2,t[e].originalY=(t[e].y0+t[e].y1)/2,-1===r.indexOf(t[e].originalX)&&r.push(t[e].originalX);for(r.sort(function(t,e){return t-e}),e=0;e<t.length;e++)t[e].originalLayerIndex=r.indexOf(t[e].originalX),t[e].originalLayer=t[e].originalLayerIndex/(r.length-1)}(e),e.map(function(t,e){var r=a(e.color),i=n.nodePadAcross,s=t.nodePad/2;e.dx=e.x1-e.x0,e.dy=e.y1-e.y0;var l=e.dx,c=Math.max(.5,e.dy),u=\\\"node_\\\"+e.pointNumber;return e.group&&(u=h.randstr()),e.trace=t.trace,e.curveNumber=t.trace.index,{index:e.pointNumber,key:u,partOfGroup:e.partOfGroup||!1,group:e.group,traceId:t.key,trace:t.trace,node:e,nodePad:t.nodePad,nodeLineColor:t.nodeLineColor,nodeLineWidth:t.nodeLineWidth,textFont:t.textFont,size:t.horizontal?t.height:t.width,visibleWidth:Math.ceil(l),visibleHeight:c,zoneX:-i,zoneY:-s,zoneWidth:l+2*i,zoneHeight:c+2*s,labelY:t.horizontal?e.dy/2+1:e.dx/2+1,left:1===e.originalLayer,sizeAcross:t.width,forceLayouts:t.forceLayouts,horizontal:t.horizontal,darkBackground:r.getBrightness()<=128,tinyColorHue:o.tinyRGB(r),tinyColorAlpha:r.getAlpha(),valueFormat:t.valueFormat,valueSuffix:t.valueSuffix,sankey:t.sankey,graph:t.graph,arrangement:t.arrangement,uniqueNodeLabelPathId:[t.guid,t.key,u].join(\\\"_\\\"),interactionState:t.interactionState,figure:t}}.bind(null,t))},p);R.enter().append(\\\"g\\\").classed(n.cn.sankeyNode,!0).call(x).style(\\\"opacity\\\",function(e){return!t._context.staticPlot&&!v||e.partOfGroup?0:1}),R.call(P,_,f.nodeEvents).call(O,I,f,t),R.transition().ease(n.ease).duration(n.duration).call(x).style(\\\"opacity\\\",function(t){return t.partOfGroup?0:1}),R.exit().transition().ease(n.ease).duration(n.duration).style(\\\"opacity\\\",0).remove();var F=R.selectAll(\\\".\\\"+n.cn.nodeRect).data(d);F.enter().append(\\\"rect\\\").classed(n.cn.nodeRect,!0).call(w),F.style(\\\"stroke-width\\\",function(t){return t.nodeLineWidth}).style(\\\"stroke\\\",function(t){return o.tinyRGB(a(t.nodeLineColor))}).style(\\\"stroke-opacity\\\",function(t){return o.opacity(t.nodeLineColor)}).style(\\\"fill\\\",function(t){return t.tinyColorHue}).style(\\\"fill-opacity\\\",function(t){return t.tinyColorAlpha}),F.transition().ease(n.ease).duration(n.duration).call(w);var B=R.selectAll(\\\".\\\"+n.cn.nodeCapture).data(d);B.enter().append(\\\"rect\\\").classed(n.cn.nodeCapture,!0).style(\\\"fill-opacity\\\",0),B.attr(\\\"x\\\",function(t){return t.zoneX}).attr(\\\"y\\\",function(t){return t.zoneY}).attr(\\\"width\\\",function(t){return t.zoneWidth}).attr(\\\"height\\\",function(t){return t.zoneHeight});var N=R.selectAll(\\\".\\\"+n.cn.nodeCentered).data(d);N.enter().append(\\\"g\\\").classed(n.cn.nodeCentered,!0).attr(\\\"transform\\\",A),N.transition().ease(n.ease).duration(n.duration).attr(\\\"transform\\\",A);var j=N.selectAll(\\\".\\\"+n.cn.nodeLabelGuide).data(d);j.enter().append(\\\"path\\\").classed(n.cn.nodeLabelGuide,!0).attr(\\\"id\\\",function(t){return t.uniqueNodeLabelPathId}).attr(\\\"d\\\",M).attr(\\\"transform\\\",S),j.transition().ease(n.ease).duration(n.duration).attr(\\\"d\\\",M).attr(\\\"transform\\\",S);var U=N.selectAll(\\\".\\\"+n.cn.nodeLabel).data(d);U.enter().append(\\\"text\\\").classed(n.cn.nodeLabel,!0).attr(\\\"transform\\\",E).style(\\\"user-select\\\",\\\"none\\\").style(\\\"cursor\\\",\\\"default\\\").style(\\\"fill\\\",\\\"black\\\"),U.style(\\\"text-shadow\\\",function(t){return t.horizontal?\\\"-1px 1px 1px #fff, 1px 1px 1px #fff, 1px -1px 1px #fff, -1px -1px 1px #fff\\\":\\\"none\\\"}).each(function(t){s.font(U,t.textFont)}),U.transition().ease(n.ease).duration(n.duration).attr(\\\"transform\\\",E);var V=U.selectAll(\\\".\\\"+n.cn.nodeLabelTextPath).data(d);V.enter().append(\\\"textPath\\\").classed(n.cn.nodeLabelTextPath,!0).attr(\\\"alignment-baseline\\\",\\\"middle\\\").attr(\\\"xlink:href\\\",function(t){return\\\"#\\\"+t.uniqueNodeLabelPathId}).attr(\\\"startOffset\\\",L).style(\\\"fill\\\",C),V.text(function(t){return t.horizontal||t.node.dy>5?t.node.label:\\\"\\\"}).attr(\\\"text-anchor\\\",function(t){return t.horizontal&&t.left?\\\"end\\\":\\\"start\\\"}),V.transition().ease(n.ease).duration(n.duration).attr(\\\"startOffset\\\",L).style(\\\"fill\\\",C)}},{\\\"../../components/color\\\":593,\\\"../../components/drawing\\\":614,\\\"../../lib\\\":719,\\\"../../lib/gup\\\":717,\\\"../../registry\\\":847,\\\"./constants\\\":1105,\\\"@plotly/d3-sankey\\\":54,\\\"@plotly/d3-sankey-circular\\\":53,d3:163,\\\"d3-force\\\":156,\\\"d3-interpolate\\\":158,tinycolor2:537}],1110:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){for(var r=[],n=t.cd[0].trace,i=n._sankey.graph.nodes,a=0;a<i.length;a++){var o=i[a];if(!o.partOfGroup){var s=[(o.x0+o.x1)/2,(o.y0+o.y1)/2];\\\"v\\\"===n.orientation&&s.reverse(),e&&e.contains(s,!1,a,t)&&r.push({pointNumber:o.pointNumber})}}return r}},{}],1111:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\");e.exports=function(t,e){for(var r=0;r<t.length;r++)t[r].i=r;n.mergeArray(e.text,t,\\\"tx\\\"),n.mergeArray(e.hovertext,t,\\\"htx\\\"),n.mergeArray(e.customdata,t,\\\"data\\\"),n.mergeArray(e.textposition,t,\\\"tp\\\"),e.textfont&&(n.mergeArrayCastPositive(e.textfont.size,t,\\\"ts\\\"),n.mergeArray(e.textfont.color,t,\\\"tc\\\"),n.mergeArray(e.textfont.family,t,\\\"tf\\\"));var i=e.marker;if(i){n.mergeArrayCastPositive(i.size,t,\\\"ms\\\"),n.mergeArrayCastPositive(i.opacity,t,\\\"mo\\\"),n.mergeArray(i.symbol,t,\\\"mx\\\"),n.mergeArray(i.color,t,\\\"mc\\\");var a=i.line;i.line&&(n.mergeArray(a.color,t,\\\"mlc\\\"),n.mergeArrayCastPositive(a.width,t,\\\"mlw\\\"));var o=i.gradient;o&&\\\"none\\\"!==o.type&&(n.mergeArray(o.type,t,\\\"mgt\\\"),n.mergeArray(o.color,t,\\\"mgc\\\"))}}},{\\\"../../lib\\\":719}],1112:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/fx/hovertemplate_attributes\\\"),i=t(\\\"../../components/colorscale/attributes\\\"),a=t(\\\"../../plots/font_attributes\\\"),o=t(\\\"../../components/drawing/attributes\\\").dash,s=t(\\\"../../components/drawing\\\"),l=t(\\\"./constants\\\"),c=t(\\\"../../lib/extend\\\").extendFlat;e.exports={x:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\",anim:!0},x0:{valType:\\\"any\\\",dflt:0,editType:\\\"calc+clearAxisTypes\\\",anim:!0},dx:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\",anim:!0},y:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\",anim:!0},y0:{valType:\\\"any\\\",dflt:0,editType:\\\"calc+clearAxisTypes\\\",anim:!0},dy:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\",anim:!0},stackgroup:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},orientation:{valType:\\\"enumerated\\\",values:[\\\"v\\\",\\\"h\\\"],editType:\\\"calc\\\"},groupnorm:{valType:\\\"enumerated\\\",values:[\\\"\\\",\\\"fraction\\\",\\\"percent\\\"],dflt:\\\"\\\",editType:\\\"calc\\\"},stackgaps:{valType:\\\"enumerated\\\",values:[\\\"infer zero\\\",\\\"interpolate\\\"],dflt:\\\"infer zero\\\",editType:\\\"calc\\\"},text:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0,editType:\\\"calc\\\"},hovertext:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0,editType:\\\"style\\\"},mode:{valType:\\\"flaglist\\\",flags:[\\\"lines\\\",\\\"markers\\\",\\\"text\\\"],extras:[\\\"none\\\"],editType:\\\"calc\\\"},hoveron:{valType:\\\"flaglist\\\",flags:[\\\"points\\\",\\\"fills\\\"],editType:\\\"style\\\"},hovertemplate:n({},{keys:l.eventDataKeys}),line:{color:{valType:\\\"color\\\",editType:\\\"style\\\",anim:!0},width:{valType:\\\"number\\\",min:0,dflt:2,editType:\\\"style\\\",anim:!0},shape:{valType:\\\"enumerated\\\",values:[\\\"linear\\\",\\\"spline\\\",\\\"hv\\\",\\\"vh\\\",\\\"hvh\\\",\\\"vhv\\\"],dflt:\\\"linear\\\",editType:\\\"plot\\\"},smoothing:{valType:\\\"number\\\",min:0,max:1.3,dflt:1,editType:\\\"plot\\\"},dash:c({},o,{editType:\\\"style\\\"}),simplify:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"plot\\\"},editType:\\\"plot\\\"},connectgaps:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},cliponaxis:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"plot\\\"},fill:{valType:\\\"enumerated\\\",values:[\\\"none\\\",\\\"tozeroy\\\",\\\"tozerox\\\",\\\"tonexty\\\",\\\"tonextx\\\",\\\"toself\\\",\\\"tonext\\\"],editType:\\\"calc\\\"},fillcolor:{valType:\\\"color\\\",editType:\\\"style\\\",anim:!0},marker:c({symbol:{valType:\\\"enumerated\\\",values:s.symbolList,dflt:\\\"circle\\\",arrayOk:!0,editType:\\\"style\\\"},opacity:{valType:\\\"number\\\",min:0,max:1,arrayOk:!0,editType:\\\"style\\\",anim:!0},size:{valType:\\\"number\\\",min:0,dflt:6,arrayOk:!0,editType:\\\"calc\\\",anim:!0},maxdisplayed:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"plot\\\"},sizeref:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\"},sizemin:{valType:\\\"number\\\",min:0,dflt:0,editType:\\\"calc\\\"},sizemode:{valType:\\\"enumerated\\\",values:[\\\"diameter\\\",\\\"area\\\"],dflt:\\\"diameter\\\",editType:\\\"calc\\\"},line:c({width:{valType:\\\"number\\\",min:0,arrayOk:!0,editType:\\\"style\\\",anim:!0},editType:\\\"calc\\\"},i(\\\"marker.line\\\",{anim:!0})),gradient:{type:{valType:\\\"enumerated\\\",values:[\\\"radial\\\",\\\"horizontal\\\",\\\"vertical\\\",\\\"none\\\"],arrayOk:!0,dflt:\\\"none\\\",editType:\\\"calc\\\"},color:{valType:\\\"color\\\",arrayOk:!0,editType:\\\"calc\\\"},editType:\\\"calc\\\"},editType:\\\"calc\\\"},i(\\\"marker\\\",{anim:!0})),selected:{marker:{opacity:{valType:\\\"number\\\",min:0,max:1,editType:\\\"style\\\"},color:{valType:\\\"color\\\",editType:\\\"style\\\"},size:{valType:\\\"number\\\",min:0,editType:\\\"style\\\"},editType:\\\"style\\\"},textfont:{color:{valType:\\\"color\\\",editType:\\\"style\\\"},editType:\\\"style\\\"},editType:\\\"style\\\"},unselected:{marker:{opacity:{valType:\\\"number\\\",min:0,max:1,editType:\\\"style\\\"},color:{valType:\\\"color\\\",editType:\\\"style\\\"},size:{valType:\\\"number\\\",min:0,editType:\\\"style\\\"},editType:\\\"style\\\"},textfont:{color:{valType:\\\"color\\\",editType:\\\"style\\\"},editType:\\\"style\\\"},editType:\\\"style\\\"},textposition:{valType:\\\"enumerated\\\",values:[\\\"top left\\\",\\\"top center\\\",\\\"top right\\\",\\\"middle left\\\",\\\"middle center\\\",\\\"middle right\\\",\\\"bottom left\\\",\\\"bottom center\\\",\\\"bottom right\\\"],dflt:\\\"middle center\\\",arrayOk:!0,editType:\\\"calc\\\"},textfont:a({editType:\\\"calc\\\",colorEditType:\\\"style\\\",arrayOk:!0}),r:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},t:{valType:\\\"data_array\\\",editType:\\\"calc\\\"}}},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../components/drawing\\\":614,\\\"../../components/drawing/attributes\\\":613,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../../plots/font_attributes\\\":793,\\\"./constants\\\":1116}],1113:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../plots/cartesian/axes\\\"),o=t(\\\"../../constants/numerical\\\").BADNUM,s=t(\\\"./subtypes\\\"),l=t(\\\"./colorscale_calc\\\"),c=t(\\\"./arrays_to_calcdata\\\"),u=t(\\\"./calc_selection\\\");function h(t,e,r,n,i,o,l){var c=e._length,u=t._fullLayout,h=r._id,f=n._id,p=u._firstScatter[d(e)]===e.uid,v=(g(e,u,r,n)||{}).orientation,m=e.fill;r._minDtick=0,n._minDtick=0;var y={padded:!0},x={padded:!0};l&&(y.ppad=x.ppad=l);var b=c<2||i[0]!==i[c-1]||o[0]!==o[c-1];b&&(\\\"tozerox\\\"===m||\\\"tonextx\\\"===m&&(p||\\\"h\\\"===v))?y.tozero=!0:(e.error_y||{}).visible||\\\"tonexty\\\"!==m&&\\\"tozeroy\\\"!==m&&(s.hasMarkers(e)||s.hasText(e))||(y.padded=!1,y.ppad=0),b&&(\\\"tozeroy\\\"===m||\\\"tonexty\\\"===m&&(p||\\\"v\\\"===v))?x.tozero=!0:\\\"tonextx\\\"!==m&&\\\"tozerox\\\"!==m||(x.padded=!1),h&&(e._extremes[h]=a.findExtremes(r,i,y)),f&&(e._extremes[f]=a.findExtremes(n,o,x))}function f(t,e){if(s.hasMarkers(t)){var r,n=t.marker,o=1.6*(t.marker.sizeref||1);if(r=\\\"area\\\"===t.marker.sizemode?function(t){return Math.max(Math.sqrt((t||0)/o),3)}:function(t){return Math.max((t||0)/o,3)},i.isArrayOrTypedArray(n.size)){var l={type:\\\"linear\\\"};a.setConvert(l);for(var c=l.makeCalcdata(t.marker,\\\"size\\\"),u=new Array(e),h=0;h<e;h++)u[h]=r(c[h]);return u}return r(n.size)}}function p(t,e){var r=d(e),n=t._firstScatter;n[r]||(n[r]=e.uid)}function d(t){var e=t.stackgroup;return t.xaxis+t.yaxis+t.type+(e?\\\"-\\\"+e:\\\"\\\")}function g(t,e,r,n){var i=t.stackgroup;if(i){var a=e._scatterStackOpts[r._id+n._id][i],o=\\\"v\\\"===a.orientation?n:r;return\\\"linear\\\"===o.type||\\\"log\\\"===o.type?a:void 0}}e.exports={calc:function(t,e){var r,s,d,v,m,y,x=t._fullLayout,b=a.getFromId(t,e.xaxis||\\\"x\\\"),_=a.getFromId(t,e.yaxis||\\\"y\\\"),w=b.makeCalcdata(e,\\\"x\\\"),k=_.makeCalcdata(e,\\\"y\\\"),T=e._length,A=new Array(T),M=e.ids,S=g(e,x,b,_),E=!1;p(x,e);var C,L=\\\"x\\\",P=\\\"y\\\";for(S?(i.pushUnique(S.traceIndices,e._expandedIndex),(r=\\\"v\\\"===S.orientation)?(P=\\\"s\\\",C=\\\"x\\\"):(L=\\\"s\\\",C=\\\"y\\\"),m=\\\"interpolate\\\"===S.stackgaps):h(t,e,b,_,w,k,f(e,T)),s=0;s<T;s++){var O=A[s]={},z=n(w[s]),I=n(k[s]);z&&I?(O[L]=w[s],O[P]=k[s]):S&&(r?z:I)?(O[C]=r?w[s]:k[s],O.gap=!0,m?(O.s=o,E=!0):O.s=0):O[L]=O[P]=o,M&&(O.id=String(M[s]))}if(c(A,e),l(t,e),u(A,e),S){for(s=0;s<A.length;)A[s][C]===o?A.splice(s,1):s++;if(i.sort(A,function(t,e){return t[C]-e[C]||t.i-e.i}),E){for(s=0;s<A.length-1&&A[s].gap;)s++;for((y=A[s].s)||(y=A[s].s=0),d=0;d<s;d++)A[d].s=y;for(v=A.length-1;v>s&&A[v].gap;)v--;for(y=A[v].s,d=A.length-1;d>v;d--)A[d].s=y;for(;s<v;)if(A[++s].gap){for(d=s+1;A[d].gap;)d++;for(var D=A[s-1][C],R=A[s-1].s,F=(A[d].s-R)/(A[d][C]-D);s<d;)A[s].s=R+(A[s][C]-D)*F,s++}}}return A},calcMarkerSize:f,calcAxisExpansion:h,setFirstScatter:p,getStackOpts:g}},{\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767,\\\"./arrays_to_calcdata\\\":1111,\\\"./calc_selection\\\":1114,\\\"./colorscale_calc\\\":1115,\\\"./subtypes\\\":1135,\\\"fast-isnumeric\\\":225}],1114:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\");e.exports=function(t,e){n.isArrayOrTypedArray(e.selectedpoints)&&n.tagSelected(t,e)}},{\\\"../../lib\\\":719}],1115:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/colorscale/helpers\\\").hasColorscale,i=t(\\\"../../components/colorscale/calc\\\"),a=t(\\\"./subtypes\\\");e.exports=function(t,e){a.hasLines(e)&&n(e,\\\"line\\\")&&i(t,e,{vals:e.line.color,containerStr:\\\"line\\\",cLetter:\\\"c\\\"}),a.hasMarkers(e)&&(n(e,\\\"marker\\\")&&i(t,e,{vals:e.marker.color,containerStr:\\\"marker\\\",cLetter:\\\"c\\\"}),n(e,\\\"marker.line\\\")&&i(t,e,{vals:e.marker.line.color,containerStr:\\\"marker.line\\\",cLetter:\\\"c\\\"}))}},{\\\"../../components/colorscale/calc\\\":601,\\\"../../components/colorscale/helpers\\\":604,\\\"./subtypes\\\":1135}],1116:[function(t,e,r){\\\"use strict\\\";e.exports={PTS_LINESONLY:20,minTolerance:.2,toleranceGrowth:10,maxScreensAway:20,eventDataKeys:[]}},{}],1117:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./calc\\\");function i(t,e,r,n,i,a,o){i[n]=!0;var s={i:null,gap:!0,s:0};if(s[o]=r,t.splice(e,0,s),e&&r===t[e-1][o]){var l=t[e-1];s.s=l.s,s.i=l.i,s.gap=l.gap}else a&&(s.s=function(t,e,r,n){var i=t[e-1],a=t[e+1];return a?i?i.s+(a.s-i.s)*(r-i[n])/(a[n]-i[n]):a.s:i.s}(t,e,r,o));e||(t[0].t=t[1].t,t[0].trace=t[1].trace,delete t[1].t,delete t[1].trace)}e.exports=function(t,e){var r=e.xaxis,a=e.yaxis,o=r._id+a._id,s=t._fullLayout._scatterStackOpts[o];if(s){var l,c,u,h,f,p,d,g,v,m,y,x,b,_,w,k=t.calcdata;for(var T in s){var A=(m=s[T]).traceIndices;if(A.length){for(y=\\\"interpolate\\\"===m.stackgaps,x=m.groupnorm,\\\"v\\\"===m.orientation?(b=\\\"x\\\",_=\\\"y\\\"):(b=\\\"y\\\",_=\\\"x\\\"),w=new Array(A.length),l=0;l<w.length;l++)w[l]=!1;p=k[A[0]];var M=new Array(p.length);for(l=0;l<p.length;l++)M[l]=p[l][b];for(l=1;l<A.length;l++){for(f=k[A[l]],c=u=0;c<f.length;c++){for(d=f[c][b];d>M[u]&&u<M.length;u++)i(f,c,M[u],l,w,y,b),c++;if(d!==M[u]){for(h=0;h<l;h++)i(k[A[h]],u,d,h,w,y,b);M.splice(u,0,d)}u++}for(;u<M.length;u++)i(f,c,M[u],l,w,y,b),c++}var S=M.length;for(c=0;c<p.length;c++){for(g=p[c][_]=p[c].s,l=1;l<A.length;l++)(f=k[A[l]])[0].trace._rawLength=f[0].trace._length,f[0].trace._length=S,g+=f[c].s,f[c][_]=g;if(x)for(v=(\\\"fraction\\\"===x?g:g/100)||1,l=0;l<A.length;l++){var E=k[A[l]][c];E[_]/=v,E.sNorm=E.s/v}}for(l=0;l<A.length;l++){var C=(f=k[A[l]])[0].trace,L=n.calcMarkerSize(C,C._rawLength),P=Array.isArray(L);if(L&&w[l]||P){var O=L;for(L=new Array(S),c=0;c<S;c++)L[c]=f[c].gap?0:P?O[f[c].i]:O}var z=new Array(S),I=new Array(S);for(c=0;c<S;c++)z[c]=f[c].x,I[c]=f[c].y;n.calcAxisExpansion(t,C,r,a,z,I,L),f[0].t.orientation=m.orientation}}}}}},{\\\"./calc\\\":1113}],1118:[function(t,e,r){\\\"use strict\\\";e.exports=function(t){for(var e=0;e<t.length;e++){var r=t[e];if(\\\"scatter\\\"===r.type){var n=r.fill;if(\\\"none\\\"!==n&&\\\"toself\\\"!==n&&(r.opacity=void 0,\\\"tonexty\\\"===n||\\\"tonextx\\\"===n))for(var i=e-1;i>=0;i--){var a=t[i];if(\\\"scatter\\\"===a.type&&a.xaxis===r.xaxis&&a.yaxis===r.yaxis){a.opacity=void 0;break}}}}}},{}],1119:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../registry\\\"),a=t(\\\"./attributes\\\"),o=t(\\\"./constants\\\"),s=t(\\\"./subtypes\\\"),l=t(\\\"./xy_defaults\\\"),c=t(\\\"./stack_defaults\\\"),u=t(\\\"./marker_defaults\\\"),h=t(\\\"./line_defaults\\\"),f=t(\\\"./line_shape_defaults\\\"),p=t(\\\"./text_defaults\\\"),d=t(\\\"./fillcolor_defaults\\\");e.exports=function(t,e,r,g){function v(r,i){return n.coerce(t,e,a,r,i)}var m=l(t,e,g,v);if(m||(e.visible=!1),e.visible){var y=c(t,e,g,v),x=!y&&m<o.PTS_LINESONLY?\\\"lines+markers\\\":\\\"lines\\\";v(\\\"text\\\"),v(\\\"hovertext\\\"),v(\\\"mode\\\",x),s.hasLines(e)&&(h(t,e,r,g,v),f(t,e,v),v(\\\"connectgaps\\\"),v(\\\"line.simplify\\\")),s.hasMarkers(e)&&u(t,e,r,g,v,{gradient:!0}),s.hasText(e)&&p(t,e,g,v);var b=[];(s.hasMarkers(e)||s.hasText(e))&&(v(\\\"cliponaxis\\\"),v(\\\"marker.maxdisplayed\\\"),b.push(\\\"points\\\")),v(\\\"fill\\\",y?y.fillDflt:\\\"none\\\"),\\\"none\\\"!==e.fill&&(d(t,e,r,v),s.hasLines(e)||f(t,e,v));var _=(e.line||{}).color,w=(e.marker||{}).color;\\\"tonext\\\"!==e.fill&&\\\"toself\\\"!==e.fill||b.push(\\\"fills\\\"),v(\\\"hoveron\\\",b.join(\\\"+\\\")||\\\"points\\\"),\\\"fills\\\"!==e.hoveron&&v(\\\"hovertemplate\\\");var k=i.getComponentMethod(\\\"errorbars\\\",\\\"supplyDefaults\\\");k(t,e,_||w||r,{axis:\\\"y\\\"}),k(t,e,_||w||r,{axis:\\\"x\\\",inherit:\\\"y\\\"}),n.coerceSelectionMarkerOpacity(e,v)}}},{\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"./attributes\\\":1112,\\\"./constants\\\":1116,\\\"./fillcolor_defaults\\\":1120,\\\"./line_defaults\\\":1124,\\\"./line_shape_defaults\\\":1126,\\\"./marker_defaults\\\":1130,\\\"./stack_defaults\\\":1133,\\\"./subtypes\\\":1135,\\\"./text_defaults\\\":1136,\\\"./xy_defaults\\\":1137}],1120:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/color\\\"),i=t(\\\"../../lib\\\").isArrayOrTypedArray;e.exports=function(t,e,r,a){var o=!1;if(e.marker){var s=e.marker.color,l=(e.marker.line||{}).color;s&&!i(s)?o=s:l&&!i(l)&&(o=l)}a(\\\"fillcolor\\\",n.addOpacity((e.line||{}).color||o||r,.5))}},{\\\"../../components/color\\\":593,\\\"../../lib\\\":719}],1121:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/color\\\"),i=t(\\\"./subtypes\\\");e.exports=function(t,e){var r,a;if(\\\"lines\\\"===t.mode)return(r=t.line.color)&&n.opacity(r)?r:t.fillcolor;if(\\\"none\\\"===t.mode)return t.fill?t.fillcolor:\\\"\\\";var o=e.mcc||(t.marker||{}).color,s=e.mlcc||((t.marker||{}).line||{}).color;return(a=o&&n.opacity(o)?o:s&&n.opacity(s)&&(e.mlw||((t.marker||{}).line||{}).width)?s:\\\"\\\")?n.opacity(a)<.3?n.addOpacity(a,.3):a:(r=(t.line||{}).color)&&n.opacity(r)&&i.hasLines(t)&&t.line.width?r:t.fillcolor}},{\\\"../../components/color\\\":593,\\\"./subtypes\\\":1135}],1122:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../components/fx\\\"),a=t(\\\"../../registry\\\"),o=t(\\\"./get_trace_color\\\"),s=t(\\\"../../components/color\\\"),l=n.fillText;e.exports=function(t,e,r,c){var u=t.cd,h=u[0].trace,f=t.xa,p=t.ya,d=f.c2p(e),g=p.c2p(r),v=[d,g],m=h.hoveron||\\\"\\\",y=-1!==h.mode.indexOf(\\\"markers\\\")?3:.5;if(-1!==m.indexOf(\\\"points\\\")){var x=function(t){var e=Math.max(y,t.mrc||0),r=f.c2p(t.x)-d,n=p.c2p(t.y)-g;return Math.max(Math.sqrt(r*r+n*n)-e,1-y/e)},b=i.getDistanceFunction(c,function(t){var e=Math.max(3,t.mrc||0),r=1-1/e,n=Math.abs(f.c2p(t.x)-d);return n<e?r*n/e:n-e+r},function(t){var e=Math.max(3,t.mrc||0),r=1-1/e,n=Math.abs(p.c2p(t.y)-g);return n<e?r*n/e:n-e+r},x);if(i.getClosest(u,b,t),!1!==t.index){var _=u[t.index],w=f.c2p(_.x,!0),k=p.c2p(_.y,!0),T=_.mrc||1;t.index=_.i;var A=u[0].t.orientation,M=A&&(_.sNorm||_.s),S=\\\"h\\\"===A?M:_.x,E=\\\"v\\\"===A?M:_.y;return n.extendFlat(t,{color:o(h,_),x0:w-T,x1:w+T,xLabelVal:S,y0:k-T,y1:k+T,yLabelVal:E,spikeDistance:x(_),hovertemplate:h.hovertemplate}),l(_,h,t),a.getComponentMethod(\\\"errorbars\\\",\\\"hoverInfo\\\")(_,h,t),[t]}}if(-1!==m.indexOf(\\\"fills\\\")&&h._polygons){var C,L,P,O,z,I,D,R,F,B=h._polygons,N=[],j=!1,U=1/0,V=-1/0,q=1/0,H=-1/0;for(C=0;C<B.length;C++)(P=B[C]).contains(v)&&(j=!j,N.push(P),q=Math.min(q,P.ymin),H=Math.max(H,P.ymax));if(j){var G=((q=Math.max(q,0))+(H=Math.min(H,p._length)))/2;for(C=0;C<N.length;C++)for(O=N[C].pts,L=1;L<O.length;L++)(R=O[L-1][1])>G!=(F=O[L][1])>=G&&(I=O[L-1][0],D=O[L][0],F-R&&(z=I+(D-I)*(G-R)/(F-R),U=Math.min(U,z),V=Math.max(V,z)));U=Math.max(U,0),V=Math.min(V,f._length);var Y=s.defaultLine;return s.opacity(h.fillcolor)?Y=h.fillcolor:s.opacity((h.line||{}).color)&&(Y=h.line.color),n.extendFlat(t,{distance:t.maxHoverDistance,x0:U,x1:V,y0:G,y1:G,color:Y,hovertemplate:!1}),delete t.index,h.text&&!Array.isArray(h.text)?t.text=String(h.text):t.text=h.name,[t]}}}},{\\\"../../components/color\\\":593,\\\"../../components/fx\\\":632,\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"./get_trace_color\\\":1121}],1123:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./subtypes\\\");e.exports={hasLines:n.hasLines,hasMarkers:n.hasMarkers,hasText:n.hasText,isBubble:n.isBubble,attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),crossTraceDefaults:t(\\\"./cross_trace_defaults\\\"),calc:t(\\\"./calc\\\").calc,crossTraceCalc:t(\\\"./cross_trace_calc\\\"),arraysToCalcdata:t(\\\"./arrays_to_calcdata\\\"),plot:t(\\\"./plot\\\"),colorbar:t(\\\"./marker_colorbar\\\"),style:t(\\\"./style\\\").style,styleOnSelect:t(\\\"./style\\\").styleOnSelect,hoverPoints:t(\\\"./hover\\\"),selectPoints:t(\\\"./select\\\"),animatable:!0,moduleType:\\\"trace\\\",name:\\\"scatter\\\",basePlotModule:t(\\\"../../plots/cartesian\\\"),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"symbols\\\",\\\"errorBarsOK\\\",\\\"showLegend\\\",\\\"scatter-like\\\",\\\"zoomScale\\\"],meta:{}}},{\\\"../../plots/cartesian\\\":778,\\\"./arrays_to_calcdata\\\":1111,\\\"./attributes\\\":1112,\\\"./calc\\\":1113,\\\"./cross_trace_calc\\\":1117,\\\"./cross_trace_defaults\\\":1118,\\\"./defaults\\\":1119,\\\"./hover\\\":1122,\\\"./marker_colorbar\\\":1129,\\\"./plot\\\":1131,\\\"./select\\\":1132,\\\"./style\\\":1134,\\\"./subtypes\\\":1135}],1124:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\").isArrayOrTypedArray,i=t(\\\"../../components/colorscale/helpers\\\").hasColorscale,a=t(\\\"../../components/colorscale/defaults\\\");e.exports=function(t,e,r,o,s,l){var c=(t.marker||{}).color;(s(\\\"line.color\\\",r),i(t,\\\"line\\\"))?a(t,e,o,s,{prefix:\\\"line.\\\",cLetter:\\\"c\\\"}):s(\\\"line.color\\\",!n(c)&&c||r);s(\\\"line.width\\\"),(l||{}).noDash||s(\\\"line.dash\\\")}},{\\\"../../components/colorscale/defaults\\\":603,\\\"../../components/colorscale/helpers\\\":604,\\\"../../lib\\\":719}],1125:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../constants/numerical\\\"),i=n.BADNUM,a=n.LOG_CLIP,o=a+.5,s=a-.5,l=t(\\\"../../lib\\\"),c=l.segmentsIntersect,u=l.constrain,h=t(\\\"./constants\\\");e.exports=function(t,e){var r,n,a,f,p,d,g,v,m,y,x,b,_,w,k,T,A,M,S=e.xaxis,E=e.yaxis,C=\\\"log\\\"===S.type,L=\\\"log\\\"===E.type,P=S._length,O=E._length,z=e.connectGaps,I=e.baseTolerance,D=e.shape,R=\\\"linear\\\"===D,F=e.fill&&\\\"none\\\"!==e.fill,B=[],N=h.minTolerance,j=t.length,U=new Array(j),V=0;function q(e){var r=t[e];if(!r)return!1;var n=S.c2p(r.x),a=E.c2p(r.y);if(n===i){if(C&&(n=S.c2p(r.x,!0)),n===i)return!1;L&&a===i&&(n*=Math.abs(S._m*O*(S._m>0?o:s)/(E._m*P*(E._m>0?o:s)))),n*=1e3}if(a===i){if(L&&(a=E.c2p(r.y,!0)),a===i)return!1;a*=1e3}return[n,a]}function H(t,e,r,n){var i=r-t,a=n-e,o=.5-t,s=.5-e,l=i*i+a*a,c=i*o+a*s;if(c>0&&c<l){var u=o*a-s*i;if(u*u<l)return!0}}function G(t,e){var r=t[0]/P,n=t[1]/O,i=Math.max(0,-r,r-1,-n,n-1);return i&&void 0!==A&&H(r,n,A,M)&&(i=0),i&&e&&H(r,n,e[0]/P,e[1]/O)&&(i=0),(1+h.toleranceGrowth*i)*I}function Y(t,e){var r=t[0]-e[0],n=t[1]-e[1];return Math.sqrt(r*r+n*n)}var W,X,Z,J,K,$,Q,tt=h.maxScreensAway,et=-P*tt,rt=P*(1+tt),nt=-O*tt,it=O*(1+tt),at=[[et,nt,rt,nt],[rt,nt,rt,it],[rt,it,et,it],[et,it,et,nt]];function ot(t){if(t[0]<et||t[0]>rt||t[1]<nt||t[1]>it)return[u(t[0],et,rt),u(t[1],nt,it)]}function st(t,e){return t[0]===e[0]&&(t[0]===et||t[0]===rt)||(t[1]===e[1]&&(t[1]===nt||t[1]===it)||void 0)}function lt(t,e,r){return function(n,i){var a=ot(n),o=ot(i),s=[];if(a&&o&&st(a,o))return s;a&&s.push(a),o&&s.push(o);var c=2*l.constrain((n[t]+i[t])/2,e,r)-((a||n)[t]+(o||i)[t]);c&&((a&&o?c>0==a[t]>o[t]?a:o:a||o)[t]+=c);return s}}function ct(t){var e=t[0],r=t[1],n=e===U[V-1][0],i=r===U[V-1][1];if(!n||!i)if(V>1){var a=e===U[V-2][0],o=r===U[V-2][1];n&&(e===et||e===rt)&&a?o?V--:U[V-1]=t:i&&(r===nt||r===it)&&o?a?V--:U[V-1]=t:U[V++]=t}else U[V++]=t}function ut(t){U[V-1][0]!==t[0]&&U[V-1][1]!==t[1]&&ct([Z,J]),ct(t),K=null,Z=J=0}function ht(t){if(A=t[0]/P,M=t[1]/O,W=t[0]<et?et:t[0]>rt?rt:0,X=t[1]<nt?nt:t[1]>it?it:0,W||X){if(V)if(K){var e=Q(K,t);e.length>1&&(ut(e[0]),U[V++]=e[1])}else $=Q(U[V-1],t)[0],U[V++]=$;else U[V++]=[W||t[0],X||t[1]];var r=U[V-1];W&&X&&(r[0]!==W||r[1]!==X)?(K&&(Z!==W&&J!==X?ct(Z&&J?(n=K,a=(i=t)[0]-n[0],o=(i[1]-n[1])/a,(n[1]*i[0]-i[1]*n[0])/a>0?[o>0?et:rt,it]:[o>0?rt:et,nt]):[Z||W,J||X]):Z&&J&&ct([Z,J])),ct([W,X])):Z-W&&J-X&&ct([W||Z,X||J]),K=t,Z=W,J=X}else K&&ut(Q(K,t)[0]),U[V++]=t;var n,i,a,o}for(\\\"linear\\\"===D||\\\"spline\\\"===D?Q=function(t,e){for(var r=[],n=0,i=0;i<4;i++){var a=at[i],o=c(t[0],t[1],e[0],e[1],a[0],a[1],a[2],a[3]);o&&(!n||Math.abs(o.x-r[0][0])>1||Math.abs(o.y-r[0][1])>1)&&(o=[o.x,o.y],n&&Y(o,t)<Y(r[0],t)?r.unshift(o):r.push(o),n++)}return r}:\\\"hv\\\"===D||\\\"vh\\\"===D?Q=function(t,e){var r=[],n=ot(t),i=ot(e);return n&&i&&st(n,i)?r:(n&&r.push(n),i&&r.push(i),r)}:\\\"hvh\\\"===D?Q=lt(0,et,rt):\\\"vhv\\\"===D&&(Q=lt(1,nt,it)),r=0;r<j;r++)if(n=q(r)){for(V=0,K=null,ht(n),r++;r<j;r++){if(!(f=q(r))){if(z)continue;break}if(R&&e.simplify){var ft=q(r+1);if(y=Y(f,n),F&&(0===V||V===j-1)||!(y<G(f,ft)*N)){for(v=[(f[0]-n[0])/y,(f[1]-n[1])/y],p=n,x=y,b=w=k=0,g=!1,a=f,r++;r<t.length;r++){if(d=ft,ft=q(r+1),!d){if(z)continue;break}if(T=(m=[d[0]-n[0],d[1]-n[1]])[0]*v[1]-m[1]*v[0],w=Math.min(w,T),(k=Math.max(k,T))-w>G(d,ft))break;a=d,(_=m[0]*v[0]+m[1]*v[1])>x?(x=_,f=d,g=!1):_<b&&(b=_,p=d,g=!0)}if(g?(ht(f),a!==p&&ht(p)):(p!==n&&ht(p),a!==f&&ht(f)),ht(a),r>=t.length||!d)break;ht(d),n=d}}else ht(f)}K&&ct([Z||K[0],J||K[1]]),B.push(U.slice(0,V))}return B}},{\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"./constants\\\":1116}],1126:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r){\\\"spline\\\"===r(\\\"line.shape\\\")&&r(\\\"line.smoothing\\\")}},{}],1127:[function(t,e,r){\\\"use strict\\\";var n={tonextx:1,tonexty:1,tonext:1};e.exports=function(t,e,r){var i,a,o,s,l,c={},u=!1,h=-1,f=0,p=-1;for(a=0;a<r.length;a++)(o=(i=r[a][0].trace).stackgroup||\\\"\\\")?o in c?l=c[o]:(l=c[o]=f,f++):i.fill in n&&p>=0?l=p:(l=p=f,f++),l<h&&(u=!0),i._groupIndex=h=l;var d=r.slice();u&&d.sort(function(t,e){var r=t[0].trace,n=e[0].trace;return r._groupIndex-n._groupIndex||r.index-n.index});var g={};for(a=0;a<d.length;a++)o=(i=d[a][0].trace).stackgroup||\\\"\\\",!0===i.visible?(i._nexttrace=null,i.fill in n&&(s=g[o],i._prevtrace=s||null,s&&(s._nexttrace=i)),i._ownfill=i.fill&&(\\\"tozero\\\"===i.fill.substr(0,6)||\\\"toself\\\"===i.fill||\\\"to\\\"===i.fill.substr(0,2)&&!i._prevtrace),g[o]=i):i._prevtrace=i._nexttrace=i._ownfill=null;return d}},{}],1128:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\");e.exports=function(t){var e=t.marker,r=e.sizeref||1,i=e.sizemin||0,a=\\\"area\\\"===e.sizemode?function(t){return Math.sqrt(t/r)}:function(t){return t/r};return function(t){var e=a(t/2);return n(e)&&e>0?Math.max(e,i):0}}},{\\\"fast-isnumeric\\\":225}],1129:[function(t,e,r){\\\"use strict\\\";e.exports={container:\\\"marker\\\",min:\\\"cmin\\\",max:\\\"cmax\\\"}},{}],1130:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/color\\\"),i=t(\\\"../../components/colorscale/helpers\\\").hasColorscale,a=t(\\\"../../components/colorscale/defaults\\\"),o=t(\\\"./subtypes\\\");e.exports=function(t,e,r,s,l,c){var u=o.isBubble(t),h=(t.line||{}).color;(c=c||{},h&&(r=h),l(\\\"marker.symbol\\\"),l(\\\"marker.opacity\\\",u?.7:1),l(\\\"marker.size\\\"),l(\\\"marker.color\\\",r),i(t,\\\"marker\\\")&&a(t,e,s,l,{prefix:\\\"marker.\\\",cLetter:\\\"c\\\"}),c.noSelect||(l(\\\"selected.marker.color\\\"),l(\\\"unselected.marker.color\\\"),l(\\\"selected.marker.size\\\"),l(\\\"unselected.marker.size\\\")),c.noLine||(l(\\\"marker.line.color\\\",h&&!Array.isArray(h)&&e.marker.color!==h?h:u?n.background:n.defaultLine),i(t,\\\"marker.line\\\")&&a(t,e,s,l,{prefix:\\\"marker.line.\\\",cLetter:\\\"c\\\"}),l(\\\"marker.line.width\\\",u?1:0)),u&&(l(\\\"marker.sizeref\\\"),l(\\\"marker.sizemin\\\"),l(\\\"marker.sizemode\\\")),c.gradient)&&(\\\"none\\\"!==l(\\\"marker.gradient.type\\\")&&l(\\\"marker.gradient.color\\\"))}},{\\\"../../components/color\\\":593,\\\"../../components/colorscale/defaults\\\":603,\\\"../../components/colorscale/helpers\\\":604,\\\"./subtypes\\\":1135}],1131:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../registry\\\"),a=t(\\\"../../lib\\\"),o=a.ensureSingle,s=a.identity,l=t(\\\"../../components/drawing\\\"),c=t(\\\"./subtypes\\\"),u=t(\\\"./line_points\\\"),h=t(\\\"./link_traces\\\"),f=t(\\\"../../lib/polygon\\\").tester;function p(t,e,r,h,p,d,g){var v;!function(t,e,r,i,o){var s=r.xaxis,l=r.yaxis,u=n.extent(a.simpleMap(s.range,s.r2c)),h=n.extent(a.simpleMap(l.range,l.r2c)),f=i[0].trace;if(!c.hasMarkers(f))return;var p=f.marker.maxdisplayed;if(0===p)return;var d=i.filter(function(t){return t.x>=u[0]&&t.x<=u[1]&&t.y>=h[0]&&t.y<=h[1]}),g=Math.ceil(d.length/p),v=0;o.forEach(function(t,r){var n=t[0].trace;c.hasMarkers(n)&&n.marker.maxdisplayed>0&&r<e&&v++});var m=Math.round(v*g/3+Math.floor(v/3)*g/7.1);i.forEach(function(t){delete t.vis}),d.forEach(function(t,e){0===Math.round((e+m)%g)&&(t.vis=!0)})}(0,e,r,h,p);var m=!!g&&g.duration>0;function y(t){return m?t.transition():t}var x=r.xaxis,b=r.yaxis,_=h[0].trace,w=_.line,k=n.select(d),T=o(k,\\\"g\\\",\\\"errorbars\\\"),A=o(k,\\\"g\\\",\\\"lines\\\"),M=o(k,\\\"g\\\",\\\"points\\\"),S=o(k,\\\"g\\\",\\\"text\\\");if(i.getComponentMethod(\\\"errorbars\\\",\\\"plot\\\")(t,T,r,g),!0===_.visible){var E,C;y(k).style(\\\"opacity\\\",_.opacity);var L=_.fill.charAt(_.fill.length-1);\\\"x\\\"!==L&&\\\"y\\\"!==L&&(L=\\\"\\\"),h[0][r.isRangePlot?\\\"nodeRangePlot3\\\":\\\"node3\\\"]=k;var P,O,z=\\\"\\\",I=[],D=_._prevtrace;D&&(z=D._prevRevpath||\\\"\\\",C=D._nextFill,I=D._polygons);var R,F,B,N,j,U,V,q=\\\"\\\",H=\\\"\\\",G=[],Y=a.noop;if(E=_._ownFill,c.hasLines(_)||\\\"none\\\"!==_.fill){for(C&&C.datum(h),-1!==[\\\"hv\\\",\\\"vh\\\",\\\"hvh\\\",\\\"vhv\\\"].indexOf(w.shape)?(R=l.steps(w.shape),F=l.steps(w.shape.split(\\\"\\\").reverse().join(\\\"\\\"))):R=F=\\\"spline\\\"===w.shape?function(t){var e=t[t.length-1];return t.length>1&&t[0][0]===e[0]&&t[0][1]===e[1]?l.smoothclosed(t.slice(1),w.smoothing):l.smoothopen(t,w.smoothing)}:function(t){return\\\"M\\\"+t.join(\\\"L\\\")},B=function(t){return F(t.reverse())},G=u(h,{xaxis:x,yaxis:b,connectGaps:_.connectgaps,baseTolerance:Math.max(w.width||1,3)/4,shape:w.shape,simplify:w.simplify,fill:_.fill}),V=_._polygons=new Array(G.length),v=0;v<G.length;v++)_._polygons[v]=f(G[v]);G.length&&(N=G[0][0],U=(j=G[G.length-1])[j.length-1]),Y=function(t){return function(e){if(P=R(e),O=B(e),q?L?(q+=\\\"L\\\"+P.substr(1),H=O+\\\"L\\\"+H.substr(1)):(q+=\\\"Z\\\"+P,H=O+\\\"Z\\\"+H):(q=P,H=O),c.hasLines(_)&&e.length>1){var r=n.select(this);if(r.datum(h),t)y(r.style(\\\"opacity\\\",0).attr(\\\"d\\\",P).call(l.lineGroupStyle)).style(\\\"opacity\\\",1);else{var i=y(r);i.attr(\\\"d\\\",P),l.singleLineStyle(h,i)}}}}}var W=A.selectAll(\\\".js-line\\\").data(G);y(W.exit()).style(\\\"opacity\\\",0).remove(),W.each(Y(!1)),W.enter().append(\\\"path\\\").classed(\\\"js-line\\\",!0).style(\\\"vector-effect\\\",\\\"non-scaling-stroke\\\").call(l.lineGroupStyle).each(Y(!0)),l.setClipUrl(W,r.layerClipId,t),G.length?(E?(E.datum(h),N&&U&&(L?(\\\"y\\\"===L?N[1]=U[1]=b.c2p(0,!0):\\\"x\\\"===L&&(N[0]=U[0]=x.c2p(0,!0)),y(E).attr(\\\"d\\\",\\\"M\\\"+U+\\\"L\\\"+N+\\\"L\\\"+q.substr(1)).call(l.singleFillStyle)):y(E).attr(\\\"d\\\",q+\\\"Z\\\").call(l.singleFillStyle))):C&&(\\\"tonext\\\"===_.fill.substr(0,6)&&q&&z?(\\\"tonext\\\"===_.fill?y(C).attr(\\\"d\\\",q+\\\"Z\\\"+z+\\\"Z\\\").call(l.singleFillStyle):y(C).attr(\\\"d\\\",q+\\\"L\\\"+z.substr(1)+\\\"Z\\\").call(l.singleFillStyle),_._polygons=_._polygons.concat(I)):(Z(C),_._polygons=null)),_._prevRevpath=H,_._prevPolygons=V):(E?Z(E):C&&Z(C),_._polygons=_._prevRevpath=_._prevPolygons=null),M.datum(h),S.datum(h),function(e,i,a){var o,u=a[0].trace,h=c.hasMarkers(u),f=c.hasText(u),p=tt(u),d=et,g=et;if(h||f){var v=s,_=u.stackgroup,w=_&&\\\"infer zero\\\"===t._fullLayout._scatterStackOpts[x._id+b._id][_].stackgaps;u.marker.maxdisplayed||u._needsCull?v=w?K:J:_&&!w&&(v=$),h&&(d=v),f&&(g=v)}var k,T=(o=e.selectAll(\\\"path.point\\\").data(d,p)).enter().append(\\\"path\\\").classed(\\\"point\\\",!0);m&&T.call(l.pointStyle,u,t).call(l.translatePoints,x,b).style(\\\"opacity\\\",0).transition().style(\\\"opacity\\\",1),o.order(),h&&(k=l.makePointStyleFns(u)),o.each(function(e){var i=n.select(this),a=y(i);l.translatePoint(e,a,x,b)?(l.singlePointStyle(e,a,u,k,t),r.layerClipId&&l.hideOutsideRangePoint(e,a,x,b,u.xcalendar,u.ycalendar),u.customdata&&i.classed(\\\"plotly-customdata\\\",null!==e.data&&void 0!==e.data)):a.remove()}),m?o.exit().transition().style(\\\"opacity\\\",0).remove():o.exit().remove(),(o=i.selectAll(\\\"g\\\").data(g,p)).enter().append(\\\"g\\\").classed(\\\"textpoint\\\",!0).append(\\\"text\\\"),o.order(),o.each(function(t){var e=n.select(this),i=y(e.select(\\\"text\\\"));l.translatePoint(t,i,x,b)?r.layerClipId&&l.hideOutsideRangePoint(t,e,x,b,u.xcalendar,u.ycalendar):e.remove()}),o.selectAll(\\\"text\\\").call(l.textPointStyle,u,t).each(function(t){var e=x.c2p(t.x),r=b.c2p(t.y);n.select(this).selectAll(\\\"tspan.line\\\").each(function(){y(n.select(this)).attr({x:e,y:r})})}),o.exit().remove()}(M,S,h);var X=!1===_.cliponaxis?null:r.layerClipId;l.setClipUrl(M,X,t),l.setClipUrl(S,X,t)}function Z(t){y(t).attr(\\\"d\\\",\\\"M0,0Z\\\")}function J(t){return t.filter(function(t){return!t.gap&&t.vis})}function K(t){return t.filter(function(t){return t.vis})}function $(t){return t.filter(function(t){return!t.gap})}function Q(t){return t.id}function tt(t){if(t.ids)return Q}function et(){return!1}}e.exports=function(t,e,r,i,a,c){var u,f,d=!a,g=!!a&&a.duration>0,v=h(t,e,r);((u=i.selectAll(\\\"g.trace\\\").data(v,function(t){return t[0].trace.uid})).enter().append(\\\"g\\\").attr(\\\"class\\\",function(t){return\\\"trace scatter trace\\\"+t[0].trace.uid}).style(\\\"stroke-miterlimit\\\",2),u.order(),function(t,e,r){e.each(function(e){var i=o(n.select(this),\\\"g\\\",\\\"fills\\\");l.setClipUrl(i,r.layerClipId,t);var a=e[0].trace,c=[];a._ownfill&&c.push(\\\"_ownFill\\\"),a._nexttrace&&c.push(\\\"_nextFill\\\");var u=i.selectAll(\\\"g\\\").data(c,s);u.enter().append(\\\"g\\\"),u.exit().each(function(t){a[t]=null}).remove(),u.order().each(function(t){a[t]=o(n.select(this),\\\"path\\\",\\\"js-fill\\\")})})}(t,u,e),g)?(c&&(f=c()),n.transition().duration(a.duration).ease(a.easing).each(\\\"end\\\",function(){f&&f()}).each(\\\"interrupt\\\",function(){f&&f()}).each(function(){i.selectAll(\\\"g.trace\\\").each(function(r,n){p(t,n,e,r,v,this,a)})})):u.each(function(r,n){p(t,n,e,r,v,this,a)});d&&u.exit().remove(),i.selectAll(\\\"path:not([d])\\\").remove()}},{\\\"../../components/drawing\\\":614,\\\"../../lib\\\":719,\\\"../../lib/polygon\\\":731,\\\"../../registry\\\":847,\\\"./line_points\\\":1125,\\\"./link_traces\\\":1127,\\\"./subtypes\\\":1135,d3:163}],1132:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./subtypes\\\");e.exports=function(t,e){var r,i,a,o,s=t.cd,l=t.xaxis,c=t.yaxis,u=[],h=s[0].trace;if(!n.hasMarkers(h)&&!n.hasText(h))return[];if(!1===e)for(r=0;r<s.length;r++)s[r].selected=0;else for(r=0;r<s.length;r++)i=s[r],a=l.c2p(i.x),o=c.c2p(i.y),null!==i.i&&e.contains([a,o],!1,r,t)?(u.push({pointNumber:i.i,x:l.c2d(i.x),y:c.c2d(i.y)}),i.selected=1):i.selected=0;return u}},{\\\"./subtypes\\\":1135}],1133:[function(t,e,r){\\\"use strict\\\";var n=[\\\"orientation\\\",\\\"groupnorm\\\",\\\"stackgaps\\\"];e.exports=function(t,e,r,i){var a=r._scatterStackOpts,o=i(\\\"stackgroup\\\");if(o){var s=e.xaxis+e.yaxis,l=a[s];l||(l=a[s]={});var c=l[o],u=!1;c?c.traces.push(e):(c=l[o]={traceIndices:[],traces:[e]},u=!0);for(var h={orientation:e.x&&!e.y?\\\"h\\\":\\\"v\\\"},f=0;f<n.length;f++){var p=n[f],d=p+\\\"Found\\\";if(!c[d]){var g=void 0!==t[p],v=\\\"orientation\\\"===p;if((g||u)&&(c[p]=i(p,h[p]),v&&(c.fillDflt=\\\"h\\\"===c[p]?\\\"tonextx\\\":\\\"tonexty\\\"),g&&(c[d]=!0,!u&&(delete c.traces[0][p],v))))for(var m=0;m<c.traces.length-1;m++){var y=c.traces[m];y._input.fill!==y.fill&&(y.fill=c.fillDflt)}}}return c}}},{}],1134:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../components/drawing\\\"),a=t(\\\"../../registry\\\");function o(t,e,r){i.pointStyle(t.selectAll(\\\"path.point\\\"),e,r)}function s(t,e,r){i.textPointStyle(t.selectAll(\\\"text\\\"),e,r)}e.exports={style:function(t){var e=n.select(t).selectAll(\\\"g.trace.scatter\\\");e.style(\\\"opacity\\\",function(t){return t[0].trace.opacity}),e.selectAll(\\\"g.points\\\").each(function(e){o(n.select(this),e.trace||e[0].trace,t)}),e.selectAll(\\\"g.text\\\").each(function(e){s(n.select(this),e.trace||e[0].trace,t)}),e.selectAll(\\\"g.trace path.js-line\\\").call(i.lineGroupStyle),e.selectAll(\\\"g.trace path.js-fill\\\").call(i.fillGroupStyle),a.getComponentMethod(\\\"errorbars\\\",\\\"style\\\")(e)},stylePoints:o,styleText:s,styleOnSelect:function(t,e,r){var n=e[0].trace;n.selectedpoints?(i.selectedPointStyle(r.selectAll(\\\"path.point\\\"),n),i.selectedTextStyle(r.selectAll(\\\"text\\\"),n)):(o(r,n,t),s(r,n,t))}}},{\\\"../../components/drawing\\\":614,\\\"../../registry\\\":847,d3:163}],1135:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\");e.exports={hasLines:function(t){return t.visible&&t.mode&&-1!==t.mode.indexOf(\\\"lines\\\")},hasMarkers:function(t){return t.visible&&(t.mode&&-1!==t.mode.indexOf(\\\"markers\\\")||\\\"splom\\\"===t.type)},hasText:function(t){return t.visible&&t.mode&&-1!==t.mode.indexOf(\\\"text\\\")},isBubble:function(t){return n.isPlainObject(t.marker)&&n.isArrayOrTypedArray(t.marker.size)}}},{\\\"../../lib\\\":719}],1136:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\");e.exports=function(t,e,r,i,a){a=a||{},i(\\\"textposition\\\"),n.coerceFont(i,\\\"textfont\\\",r.font),a.noSelect||(i(\\\"selected.textfont.color\\\"),i(\\\"unselected.textfont.color\\\"))}},{\\\"../../lib\\\":719}],1137:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../registry\\\");e.exports=function(t,e,r,a){var o,s=a(\\\"x\\\"),l=a(\\\"y\\\");if(i.getComponentMethod(\\\"calendars\\\",\\\"handleTraceDefaults\\\")(t,e,[\\\"x\\\",\\\"y\\\"],r),s){var c=n.minRowLength(s);l?o=Math.min(c,n.minRowLength(l)):(o=c,a(\\\"y0\\\"),a(\\\"dy\\\"))}else{if(!l)return 0;o=n.minRowLength(l),a(\\\"x0\\\"),a(\\\"dx\\\")}return e._length=o,o}},{\\\"../../lib\\\":719,\\\"../../registry\\\":847}],1138:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../scatter/attributes\\\"),i=t(\\\"../../components/colorscale/attributes\\\"),a=t(\\\"../../components/fx/hovertemplate_attributes\\\"),o=t(\\\"../../plots/attributes\\\"),s=t(\\\"../../constants/gl3d_dashes\\\"),l=t(\\\"../../constants/gl3d_markers\\\"),c=t(\\\"../../lib/extend\\\").extendFlat,u=t(\\\"../../plot_api/edit_types\\\").overrideAll,h=n.line,f=n.marker,p=f.line,d=c({width:h.width,dash:{valType:\\\"enumerated\\\",values:Object.keys(s),dflt:\\\"solid\\\"}},i(\\\"line\\\"));var g=e.exports=u({x:n.x,y:n.y,z:{valType:\\\"data_array\\\"},text:c({},n.text,{}),hovertext:c({},n.hovertext,{}),hovertemplate:a(),mode:c({},n.mode,{dflt:\\\"lines+markers\\\"}),surfaceaxis:{valType:\\\"enumerated\\\",values:[-1,0,1,2],dflt:-1},surfacecolor:{valType:\\\"color\\\"},projection:{x:{show:{valType:\\\"boolean\\\",dflt:!1},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:1},scale:{valType:\\\"number\\\",min:0,max:10,dflt:2/3}},y:{show:{valType:\\\"boolean\\\",dflt:!1},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:1},scale:{valType:\\\"number\\\",min:0,max:10,dflt:2/3}},z:{show:{valType:\\\"boolean\\\",dflt:!1},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:1},scale:{valType:\\\"number\\\",min:0,max:10,dflt:2/3}}},connectgaps:n.connectgaps,line:d,marker:c({symbol:{valType:\\\"enumerated\\\",values:Object.keys(l),dflt:\\\"circle\\\",arrayOk:!0},size:c({},f.size,{dflt:8}),sizeref:f.sizeref,sizemin:f.sizemin,sizemode:f.sizemode,opacity:c({},f.opacity,{arrayOk:!1}),colorbar:f.colorbar,line:c({width:c({},p.width,{arrayOk:!1})},i(\\\"marker.line\\\"))},i(\\\"marker\\\")),textposition:c({},n.textposition,{dflt:\\\"top center\\\"}),textfont:{color:n.textfont.color,size:n.textfont.size,family:c({},n.textfont.family,{arrayOk:!1})},hoverinfo:c({},o.hoverinfo)},\\\"calc\\\",\\\"nested\\\");g.x.editType=g.y.editType=g.z.editType=\\\"calc+clearAxisTypes\\\"},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../constants/gl3d_dashes\\\":692,\\\"../../constants/gl3d_markers\\\":693,\\\"../../lib/extend\\\":710,\\\"../../plot_api/edit_types\\\":750,\\\"../../plots/attributes\\\":764,\\\"../scatter/attributes\\\":1112}],1139:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../scatter/arrays_to_calcdata\\\"),i=t(\\\"../scatter/colorscale_calc\\\");e.exports=function(t,e){var r=[{x:!1,y:!1,trace:e,t:{}}];return n(r,e),i(t,e),r}},{\\\"../scatter/arrays_to_calcdata\\\":1111,\\\"../scatter/colorscale_calc\\\":1115}],1140:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\");function i(t,e,r,i){if(!e||!e.visible)return null;for(var a=n.getComponentMethod(\\\"errorbars\\\",\\\"makeComputeError\\\")(e),o=new Array(t.length),s=0;s<t.length;s++){var l=a(+t[s],s);if(\\\"log\\\"===i.type){var c=i.c2l(t[s]),u=t[s]-l[0],h=t[s]+l[1];if(o[s]=[(i.c2l(u,!0)-c)*r,(i.c2l(h,!0)-c)*r],u>0){var f=i.c2l(u);i._lowerLogErrorBound||(i._lowerLogErrorBound=f),i._lowerErrorBound=Math.min(i._lowerLogErrorBound,f)}}else o[s]=[-l[0]*r,l[1]*r]}return o}e.exports=function(t,e,r){var n=[i(t.x,t.error_x,e[0],r.xaxis),i(t.y,t.error_y,e[1],r.yaxis),i(t.z,t.error_z,e[2],r.zaxis)],a=function(t){for(var e=0;e<t.length;e++)if(t[e])return t[e].length;return 0}(n);if(0===a)return null;for(var o=new Array(a),s=0;s<a;s++){for(var l=[[0,0,0],[0,0,0]],c=0;c<3;c++)if(n[c])for(var u=0;u<2;u++)l[u][c]=n[c][s][u];o[s]=l}return o}},{\\\"../../registry\\\":847}],1141:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"gl-line3d\\\"),i=t(\\\"gl-scatter3d\\\"),a=t(\\\"gl-error3d\\\"),o=t(\\\"gl-mesh3d\\\"),s=t(\\\"delaunay-triangulate\\\"),l=t(\\\"../../lib\\\"),c=t(\\\"../../lib/str2rgbarray\\\"),u=t(\\\"../../lib/gl_format_color\\\").formatColor,h=t(\\\"../scatter/make_bubble_size_func\\\"),f=t(\\\"../../constants/gl3d_dashes\\\"),p=t(\\\"../../constants/gl3d_markers\\\"),d=t(\\\"./calc_errors\\\");function g(t,e){this.scene=t,this.uid=e,this.linePlot=null,this.scatterPlot=null,this.errorBars=null,this.textMarkers=null,this.delaunayMesh=null,this.color=null,this.mode=\\\"\\\",this.dataPoints=[],this.axesBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.textLabels=null,this.data=null}var v=g.prototype;function m(t){return null==t?0:t.indexOf(\\\"left\\\")>-1?-1:t.indexOf(\\\"right\\\")>-1?1:0}function y(t){return null==t?0:t.indexOf(\\\"top\\\")>-1?-1:t.indexOf(\\\"bottom\\\")>-1?1:0}function x(t,e){return e(4*t)}function b(t){return p[t]}function _(t,e,r,n,i){var a=null;if(l.isArrayOrTypedArray(t)){a=[];for(var o=0;o<e;o++)void 0===t[o]?a[o]=n:a[o]=r(t[o],i)}else a=r(t,l.identity);return a}function w(t,e){var r,n,i,a,o,s,f=[],p=t.fullSceneLayout,g=t.dataScale,v=p.xaxis,w=p.yaxis,k=p.zaxis,T=e.marker,A=e.line,M=e.x||[],S=e.y||[],E=e.z||[],C=M.length,L=e.xcalendar,P=e.ycalendar,O=e.zcalendar;for(o=0;o<C;o++)r=v.d2l(M[o],0,L)*g[0],n=w.d2l(S[o],0,P)*g[1],i=k.d2l(E[o],0,O)*g[2],f[o]=[r,n,i];if(Array.isArray(e.text))s=e.text;else if(void 0!==e.text)for(s=new Array(C),o=0;o<C;o++)s[o]=e.text;if(a={position:f,mode:e.mode,text:s},\\\"line\\\"in e&&(a.lineColor=u(A,1,C),a.lineWidth=A.width,a.lineDashes=A.dash),\\\"marker\\\"in e){var z=h(e);a.scatterColor=u(T,1,C),a.scatterSize=_(T.size,C,x,20,z),a.scatterMarker=_(T.symbol,C,b,\\\"\\\\u25cf\\\"),a.scatterLineWidth=T.line.width,a.scatterLineColor=u(T.line,1,C),a.scatterAngle=0}\\\"textposition\\\"in e&&(a.textOffset=function(t){var e=[0,0];if(Array.isArray(t))for(var r=0;r<t.length;r++)e[r]=[0,0],t[r]&&(e[r][0]=m(t[r]),e[r][1]=y(t[r]));else e[0]=m(t),e[1]=y(t);return e}(e.textposition),a.textColor=u(e.textfont,1,C),a.textSize=_(e.textfont.size,C,l.identity,12),a.textFont=e.textfont.family,a.textAngle=0);var I=[\\\"x\\\",\\\"y\\\",\\\"z\\\"];for(a.project=[!1,!1,!1],a.projectScale=[1,1,1],a.projectOpacity=[1,1,1],o=0;o<3;++o){var D=e.projection[I[o]];(a.project[o]=D.show)&&(a.projectOpacity[o]=D.opacity,a.projectScale[o]=D.scale)}a.errorBounds=d(e,g,p);var R=function(t){for(var e=[0,0,0],r=[[0,0,0],[0,0,0],[0,0,0]],n=[1,1,1],i=0;i<3;i++){var a=t[i];a&&!1!==a.copy_zstyle&&!1!==t[2].visible&&(a=t[2]),a&&a.visible&&(e[i]=a.width/2,r[i]=c(a.color),n[i]=a.thickness)}return{capSize:e,color:r,lineWidth:n}}([e.error_x,e.error_y,e.error_z]);return a.errorColor=R.color,a.errorLineWidth=R.lineWidth,a.errorCapSize=R.capSize,a.delaunayAxis=e.surfaceaxis,a.delaunayColor=c(e.surfacecolor),a}function k(t){if(Array.isArray(t)){var e=t[0];return Array.isArray(e)&&(t=e),\\\"rgb(\\\"+t.slice(0,3).map(function(t){return Math.round(255*t)})+\\\")\\\"}return null}v.handlePick=function(t){if(t.object&&(t.object===this.linePlot||t.object===this.delaunayMesh||t.object===this.textMarkers||t.object===this.scatterPlot)){var e=t.index=t.data.index;return t.object.highlight&&t.object.highlight(null),this.scatterPlot&&(t.object=this.scatterPlot,this.scatterPlot.highlight(t.data)),t.textLabel=\\\"\\\",this.textLabels&&(Array.isArray(this.textLabels)?(this.textLabels[e]||0===this.textLabels[e])&&(t.textLabel=this.textLabels[e]):t.textLabel=this.textLabels),t.traceCoordinate=[this.data.x[e],this.data.y[e],this.data.z[e]],!0}},v.update=function(t){var e,r,l,c,u=this.scene.glplot.gl,h=f.solid;this.data=t;var p=w(this.scene,t);\\\"mode\\\"in p&&(this.mode=p.mode),\\\"lineDashes\\\"in p&&p.lineDashes in f&&(h=f[p.lineDashes]),this.color=k(p.scatterColor)||k(p.lineColor),this.dataPoints=p.position,e={gl:this.scene.glplot.gl,position:p.position,color:p.lineColor,lineWidth:p.lineWidth||1,dashes:h[0],dashScale:h[1],opacity:t.opacity,connectGaps:t.connectgaps},-1!==this.mode.indexOf(\\\"lines\\\")?this.linePlot?this.linePlot.update(e):(this.linePlot=n(e),this.linePlot._trace=this,this.scene.glplot.add(this.linePlot)):this.linePlot&&(this.scene.glplot.remove(this.linePlot),this.linePlot.dispose(),this.linePlot=null);var d=t.opacity;if(t.marker&&t.marker.opacity&&(d*=t.marker.opacity),r={gl:this.scene.glplot.gl,position:p.position,color:p.scatterColor,size:p.scatterSize,glyph:p.scatterMarker,opacity:d,orthographic:!0,lineWidth:p.scatterLineWidth,lineColor:p.scatterLineColor,project:p.project,projectScale:p.projectScale,projectOpacity:p.projectOpacity},-1!==this.mode.indexOf(\\\"markers\\\")?this.scatterPlot?this.scatterPlot.update(r):(this.scatterPlot=i(r),this.scatterPlot._trace=this,this.scatterPlot.highlightScale=1,this.scene.glplot.add(this.scatterPlot)):this.scatterPlot&&(this.scene.glplot.remove(this.scatterPlot),this.scatterPlot.dispose(),this.scatterPlot=null),c={gl:this.scene.glplot.gl,position:p.position,glyph:p.text,color:p.textColor,size:p.textSize,angle:p.textAngle,alignment:p.textOffset,font:p.textFont,orthographic:!0,lineWidth:0,project:!1,opacity:t.opacity},this.textLabels=t.hovertext||t.text,-1!==this.mode.indexOf(\\\"text\\\")?this.textMarkers?this.textMarkers.update(c):(this.textMarkers=i(c),this.textMarkers._trace=this,this.textMarkers.highlightScale=1,this.scene.glplot.add(this.textMarkers)):this.textMarkers&&(this.scene.glplot.remove(this.textMarkers),this.textMarkers.dispose(),this.textMarkers=null),l={gl:this.scene.glplot.gl,position:p.position,color:p.errorColor,error:p.errorBounds,lineWidth:p.errorLineWidth,capSize:p.errorCapSize,opacity:t.opacity},this.errorBars?p.errorBounds?this.errorBars.update(l):(this.scene.glplot.remove(this.errorBars),this.errorBars.dispose(),this.errorBars=null):p.errorBounds&&(this.errorBars=a(l),this.errorBars._trace=this,this.scene.glplot.add(this.errorBars)),p.delaunayAxis>=0){var g=function(t,e,r){var n,i=(r+1)%3,a=(r+2)%3,o=[],l=[];for(n=0;n<t.length;++n){var c=t[n];!isNaN(c[i])&&isFinite(c[i])&&!isNaN(c[a])&&isFinite(c[a])&&(o.push([c[i],c[a]]),l.push(n))}var u=s(o);for(n=0;n<u.length;++n)for(var h=u[n],f=0;f<h.length;++f)h[f]=l[h[f]];return{positions:t,cells:u,meshColor:e}}(p.position,p.delaunayColor,p.delaunayAxis);g.opacity=t.opacity,this.delaunayMesh?this.delaunayMesh.update(g):(g.gl=u,this.delaunayMesh=o(g),this.delaunayMesh._trace=this,this.scene.glplot.add(this.delaunayMesh))}else this.delaunayMesh&&(this.scene.glplot.remove(this.delaunayMesh),this.delaunayMesh.dispose(),this.delaunayMesh=null)},v.dispose=function(){this.linePlot&&(this.scene.glplot.remove(this.linePlot),this.linePlot.dispose()),this.scatterPlot&&(this.scene.glplot.remove(this.scatterPlot),this.scatterPlot.dispose()),this.errorBars&&(this.scene.glplot.remove(this.errorBars),this.errorBars.dispose()),this.textMarkers&&(this.scene.glplot.remove(this.textMarkers),this.textMarkers.dispose()),this.delaunayMesh&&(this.scene.glplot.remove(this.delaunayMesh),this.delaunayMesh.dispose())},e.exports=function(t,e){var r=new g(t,e.uid);return r.update(e),r}},{\\\"../../constants/gl3d_dashes\\\":692,\\\"../../constants/gl3d_markers\\\":693,\\\"../../lib\\\":719,\\\"../../lib/gl_format_color\\\":716,\\\"../../lib/str2rgbarray\\\":742,\\\"../scatter/make_bubble_size_func\\\":1128,\\\"./calc_errors\\\":1140,\\\"delaunay-triangulate\\\":165,\\\"gl-error3d\\\":247,\\\"gl-line3d\\\":255,\\\"gl-mesh3d\\\":280,\\\"gl-scatter3d\\\":297}],1142:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../scatter/subtypes\\\"),o=t(\\\"../scatter/marker_defaults\\\"),s=t(\\\"../scatter/line_defaults\\\"),l=t(\\\"../scatter/text_defaults\\\"),c=t(\\\"./attributes\\\");e.exports=function(t,e,r,u){function h(r,n){return i.coerce(t,e,c,r,n)}if(function(t,e,r,i){var a=0,o=r(\\\"x\\\"),s=r(\\\"y\\\"),l=r(\\\"z\\\");n.getComponentMethod(\\\"calendars\\\",\\\"handleTraceDefaults\\\")(t,e,[\\\"x\\\",\\\"y\\\",\\\"z\\\"],i),o&&s&&l&&(a=Math.min(o.length,s.length,l.length),e._length=e._xlength=e._ylength=e._zlength=a);return a}(t,e,h,u)){h(\\\"text\\\"),h(\\\"hovertext\\\"),h(\\\"hovertemplate\\\"),h(\\\"mode\\\"),a.hasLines(e)&&(h(\\\"connectgaps\\\"),s(t,e,r,u,h)),a.hasMarkers(e)&&o(t,e,r,u,h,{noSelect:!0}),a.hasText(e)&&l(t,e,u,h,{noSelect:!0});var f=(e.line||{}).color,p=(e.marker||{}).color;h(\\\"surfaceaxis\\\")>=0&&h(\\\"surfacecolor\\\",f||p);for(var d=[\\\"x\\\",\\\"y\\\",\\\"z\\\"],g=0;g<3;++g){var v=\\\"projection.\\\"+d[g];h(v+\\\".show\\\")&&(h(v+\\\".opacity\\\"),h(v+\\\".scale\\\"))}var m=n.getComponentMethod(\\\"errorbars\\\",\\\"supplyDefaults\\\");m(t,e,f||p||r,{axis:\\\"z\\\"}),m(t,e,f||p||r,{axis:\\\"y\\\",inherit:\\\"z\\\"}),m(t,e,f||p||r,{axis:\\\"x\\\",inherit:\\\"z\\\"})}else e.visible=!1}},{\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"../scatter/line_defaults\\\":1124,\\\"../scatter/marker_defaults\\\":1130,\\\"../scatter/subtypes\\\":1135,\\\"../scatter/text_defaults\\\":1136,\\\"./attributes\\\":1138}],1143:[function(t,e,r){\\\"use strict\\\";e.exports={plot:t(\\\"./convert\\\"),attributes:t(\\\"./attributes\\\"),markerSymbols:t(\\\"../../constants/gl3d_markers\\\"),supplyDefaults:t(\\\"./defaults\\\"),colorbar:[{container:\\\"marker\\\",min:\\\"cmin\\\",max:\\\"cmax\\\"},{container:\\\"line\\\",min:\\\"cmin\\\",max:\\\"cmax\\\"}],calc:t(\\\"./calc\\\"),moduleType:\\\"trace\\\",name:\\\"scatter3d\\\",basePlotModule:t(\\\"../../plots/gl3d\\\"),categories:[\\\"gl3d\\\",\\\"symbols\\\",\\\"showLegend\\\"],meta:{}}},{\\\"../../constants/gl3d_markers\\\":693,\\\"../../plots/gl3d\\\":807,\\\"./attributes\\\":1138,\\\"./calc\\\":1139,\\\"./convert\\\":1141,\\\"./defaults\\\":1142}],1144:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../scatter/attributes\\\"),i=t(\\\"../../plots/attributes\\\"),a=t(\\\"../../components/fx/hovertemplate_attributes\\\"),o=t(\\\"../../components/colorscale/attributes\\\"),s=t(\\\"../../lib/extend\\\").extendFlat,l=n.marker,c=n.line,u=l.line;e.exports={carpet:{valType:\\\"string\\\",editType:\\\"calc\\\"},a:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},b:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},mode:s({},n.mode,{dflt:\\\"markers\\\"}),text:s({},n.text,{}),hovertext:s({},n.hovertext,{}),line:{color:c.color,width:c.width,dash:c.dash,shape:s({},c.shape,{values:[\\\"linear\\\",\\\"spline\\\"]}),smoothing:c.smoothing,editType:\\\"calc\\\"},connectgaps:n.connectgaps,fill:s({},n.fill,{values:[\\\"none\\\",\\\"toself\\\",\\\"tonext\\\"],dflt:\\\"none\\\"}),fillcolor:n.fillcolor,marker:s({symbol:l.symbol,opacity:l.opacity,maxdisplayed:l.maxdisplayed,size:l.size,sizeref:l.sizeref,sizemin:l.sizemin,sizemode:l.sizemode,line:s({width:u.width,editType:\\\"calc\\\"},o(\\\"marker.line\\\")),gradient:l.gradient,editType:\\\"calc\\\"},o(\\\"marker\\\")),textfont:n.textfont,textposition:n.textposition,selected:n.selected,unselected:n.unselected,hoverinfo:s({},i.hoverinfo,{flags:[\\\"a\\\",\\\"b\\\",\\\"text\\\",\\\"name\\\"]}),hoveron:n.hoveron,hovertemplate:a()}},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../../plots/attributes\\\":764,\\\"../scatter/attributes\\\":1112}],1145:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../scatter/colorscale_calc\\\"),a=t(\\\"../scatter/arrays_to_calcdata\\\"),o=t(\\\"../scatter/calc_selection\\\"),s=t(\\\"../scatter/calc\\\").calcMarkerSize,l=t(\\\"../carpet/lookup_carpetid\\\");e.exports=function(t,e){var r=e._carpetTrace=l(t,e);if(r&&r.visible&&\\\"legendonly\\\"!==r.visible){var c;e.xaxis=r.xaxis,e.yaxis=r.yaxis;var u,h,f=e._length,p=new Array(f),d=!1;for(c=0;c<f;c++)if(u=e.a[c],h=e.b[c],n(u)&&n(h)){var g=r.ab2xy(+u,+h,!0),v=r.isVisible(+u,+h);v||(d=!0),p[c]={x:g[0],y:g[1],a:u,b:h,vis:v}}else p[c]={x:!1,y:!1};return e._needsCull=d,p[0].carpet=r,p[0].trace=e,s(e,f),i(t,e),a(p,e),o(p,e),p}}},{\\\"../carpet/lookup_carpetid\\\":915,\\\"../scatter/arrays_to_calcdata\\\":1111,\\\"../scatter/calc\\\":1113,\\\"../scatter/calc_selection\\\":1114,\\\"../scatter/colorscale_calc\\\":1115,\\\"fast-isnumeric\\\":225}],1146:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../scatter/constants\\\"),a=t(\\\"../scatter/subtypes\\\"),o=t(\\\"../scatter/marker_defaults\\\"),s=t(\\\"../scatter/line_defaults\\\"),l=t(\\\"../scatter/line_shape_defaults\\\"),c=t(\\\"../scatter/text_defaults\\\"),u=t(\\\"../scatter/fillcolor_defaults\\\"),h=t(\\\"./attributes\\\");e.exports=function(t,e,r,f){function p(r,i){return n.coerce(t,e,h,r,i)}p(\\\"carpet\\\"),e.xaxis=\\\"x\\\",e.yaxis=\\\"y\\\";var d=p(\\\"a\\\"),g=p(\\\"b\\\"),v=Math.min(d.length,g.length);if(v){e._length=v,p(\\\"text\\\"),p(\\\"hovertext\\\"),p(\\\"mode\\\",v<i.PTS_LINESONLY?\\\"lines+markers\\\":\\\"lines\\\"),a.hasLines(e)&&(s(t,e,r,f,p),l(t,e,p),p(\\\"connectgaps\\\")),a.hasMarkers(e)&&o(t,e,r,f,p,{gradient:!0}),a.hasText(e)&&c(t,e,f,p);var m=[];(a.hasMarkers(e)||a.hasText(e))&&(p(\\\"marker.maxdisplayed\\\"),m.push(\\\"points\\\")),p(\\\"fill\\\"),\\\"none\\\"!==e.fill&&(u(t,e,r,p),a.hasLines(e)||l(t,e,p)),\\\"tonext\\\"!==e.fill&&\\\"toself\\\"!==e.fill||m.push(\\\"fills\\\"),\\\"fills\\\"!==p(\\\"hoveron\\\",m.join(\\\"+\\\")||\\\"points\\\")&&p(\\\"hovertemplate\\\"),n.coerceSelectionMarkerOpacity(e,p)}else e.visible=!1}},{\\\"../../lib\\\":719,\\\"../scatter/constants\\\":1116,\\\"../scatter/fillcolor_defaults\\\":1120,\\\"../scatter/line_defaults\\\":1124,\\\"../scatter/line_shape_defaults\\\":1126,\\\"../scatter/marker_defaults\\\":1130,\\\"../scatter/subtypes\\\":1135,\\\"../scatter/text_defaults\\\":1136,\\\"./attributes\\\":1144}],1147:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,n,i){var a=n[i];return t.a=a.a,t.b=a.b,t.y=a.y,t}},{}],1148:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../scatter/hover\\\"),i=t(\\\"../../lib\\\").fillText;e.exports=function(t,e,r,a){var o=n(t,e,r,a);if(o&&!1!==o[0].index){var s=o[0];if(void 0===s.index){var l=1-s.y0/t.ya._length,c=t.xa._length,u=c*l/2,h=c-u;return s.x0=Math.max(Math.min(s.x0,h),u),s.x1=Math.max(Math.min(s.x1,h),u),o}var f=s.cd[s.index];s.a=f.a,s.b=f.b,s.xLabelVal=void 0,s.yLabelVal=void 0;var p=s.trace,d=p._carpet,g=d.ab2ij([f.a,f.b]),v=Math.floor(g[0]),m=g[0]-v,y=Math.floor(g[1]),x=g[1]-y,b=d.evalxy([],v,y,m,x);s.yLabel=b[1].toFixed(3),delete s.text;var _=[];if(!p.hovertemplate){var w=(f.hi||p.hoverinfo).split(\\\"+\\\");-1!==w.indexOf(\\\"all\\\")&&(w=[\\\"a\\\",\\\"b\\\",\\\"text\\\"]),-1!==w.indexOf(\\\"a\\\")&&k(d.aaxis,f.a),-1!==w.indexOf(\\\"b\\\")&&k(d.baxis,f.b),_.push(\\\"y: \\\"+s.yLabel),-1!==w.indexOf(\\\"text\\\")&&i(f,p,_),s.extraText=_.join(\\\"<br>\\\")}return o}function k(t,e){var r;r=t.labelprefix&&t.labelprefix.length>0?t.labelprefix.replace(/ = $/,\\\"\\\"):t._hovertitle,_.push(r+\\\": \\\"+e.toFixed(3)+t.labelsuffix)}}},{\\\"../../lib\\\":719,\\\"../scatter/hover\\\":1122}],1149:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),colorbar:t(\\\"../scatter/marker_colorbar\\\"),calc:t(\\\"./calc\\\"),plot:t(\\\"./plot\\\"),style:t(\\\"../scatter/style\\\").style,styleOnSelect:t(\\\"../scatter/style\\\").styleOnSelect,hoverPoints:t(\\\"./hover\\\"),selectPoints:t(\\\"../scatter/select\\\"),eventData:t(\\\"./event_data\\\"),moduleType:\\\"trace\\\",name:\\\"scattercarpet\\\",basePlotModule:t(\\\"../../plots/cartesian\\\"),categories:[\\\"svg\\\",\\\"carpet\\\",\\\"symbols\\\",\\\"showLegend\\\",\\\"carpetDependent\\\",\\\"zoomScale\\\"],meta:{}}},{\\\"../../plots/cartesian\\\":778,\\\"../scatter/marker_colorbar\\\":1129,\\\"../scatter/select\\\":1132,\\\"../scatter/style\\\":1134,\\\"./attributes\\\":1144,\\\"./calc\\\":1145,\\\"./defaults\\\":1146,\\\"./event_data\\\":1147,\\\"./hover\\\":1148,\\\"./plot\\\":1150}],1150:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../scatter/plot\\\"),i=t(\\\"../../plots/cartesian/axes\\\"),a=t(\\\"../../components/drawing\\\");e.exports=function(t,e,r,o){var s,l,c,u=r[0][0].carpet,h={xaxis:i.getFromId(t,u.xaxis||\\\"x\\\"),yaxis:i.getFromId(t,u.yaxis||\\\"y\\\"),plot:e.plot};for(n(t,h,r,o),s=0;s<r.length;s++)l=r[s][0].trace,c=o.selectAll(\\\"g.trace\\\"+l.uid+\\\" .js-line\\\"),a.setClipUrl(c,r[s][0].carpet._clipPathId,t)}},{\\\"../../components/drawing\\\":614,\\\"../../plots/cartesian/axes\\\":767,\\\"../scatter/plot\\\":1131}],1151:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/fx/hovertemplate_attributes\\\"),i=t(\\\"../scatter/attributes\\\"),a=t(\\\"../../plots/attributes\\\"),o=t(\\\"../../components/colorscale/attributes\\\"),s=t(\\\"../../components/drawing/attributes\\\").dash,l=t(\\\"../../lib/extend\\\").extendFlat,c=t(\\\"../../plot_api/edit_types\\\").overrideAll,u=i.marker,h=i.line,f=u.line;e.exports=c({lon:{valType:\\\"data_array\\\"},lat:{valType:\\\"data_array\\\"},locations:{valType:\\\"data_array\\\"},locationmode:{valType:\\\"enumerated\\\",values:[\\\"ISO-3\\\",\\\"USA-states\\\",\\\"country names\\\"],dflt:\\\"ISO-3\\\"},mode:l({},i.mode,{dflt:\\\"markers\\\"}),text:l({},i.text,{}),hovertext:l({},i.hovertext,{}),textfont:i.textfont,textposition:i.textposition,line:{color:h.color,width:h.width,dash:s},connectgaps:i.connectgaps,marker:l({symbol:u.symbol,opacity:u.opacity,size:u.size,sizeref:u.sizeref,sizemin:u.sizemin,sizemode:u.sizemode,colorbar:u.colorbar,line:l({width:f.width},o(\\\"marker.line\\\")),gradient:u.gradient},o(\\\"marker\\\")),fill:{valType:\\\"enumerated\\\",values:[\\\"none\\\",\\\"toself\\\"],dflt:\\\"none\\\"},fillcolor:i.fillcolor,selected:i.selected,unselected:i.unselected,hoverinfo:l({},a.hoverinfo,{flags:[\\\"lon\\\",\\\"lat\\\",\\\"location\\\",\\\"text\\\",\\\"name\\\"]}),hovertemplate:n()},\\\"calc\\\",\\\"nested\\\")},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../components/drawing/attributes\\\":613,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../../plot_api/edit_types\\\":750,\\\"../../plots/attributes\\\":764,\\\"../scatter/attributes\\\":1112}],1152:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../constants/numerical\\\").BADNUM,a=t(\\\"../scatter/colorscale_calc\\\"),o=t(\\\"../scatter/arrays_to_calcdata\\\"),s=t(\\\"../scatter/calc_selection\\\"),l=t(\\\"../../lib\\\")._;e.exports=function(t,e){for(var r=Array.isArray(e.locations),c=r?e.locations.length:e._length,u=new Array(c),h=0;h<c;h++){var f=u[h]={};if(r){var p=e.locations[h];f.loc=\\\"string\\\"==typeof p?p:null}else{var d=e.lon[h],g=e.lat[h];n(d)&&n(g)?f.lonlat=[+d,+g]:f.lonlat=[i,i]}}return o(u,e),a(t,e),s(u,e),c&&(u[0].t={labels:{lat:l(t,\\\"lat:\\\")+\\\" \\\",lon:l(t,\\\"lon:\\\")+\\\" \\\"}}),u}},{\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"../scatter/arrays_to_calcdata\\\":1111,\\\"../scatter/calc_selection\\\":1114,\\\"../scatter/colorscale_calc\\\":1115,\\\"fast-isnumeric\\\":225}],1153:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../scatter/subtypes\\\"),a=t(\\\"../scatter/marker_defaults\\\"),o=t(\\\"../scatter/line_defaults\\\"),s=t(\\\"../scatter/text_defaults\\\"),l=t(\\\"../scatter/fillcolor_defaults\\\"),c=t(\\\"./attributes\\\");e.exports=function(t,e,r,u){function h(r,i){return n.coerce(t,e,c,r,i)}!function(t,e,r){var n,i,a=0,o=r(\\\"locations\\\");if(o)return r(\\\"locationmode\\\"),a=o.length;return n=r(\\\"lon\\\")||[],i=r(\\\"lat\\\")||[],a=Math.min(n.length,i.length),e._length=a,a}(0,e,h)?e.visible=!1:(h(\\\"text\\\"),h(\\\"hovertext\\\"),h(\\\"hovertemplate\\\"),h(\\\"mode\\\"),i.hasLines(e)&&(o(t,e,r,u,h),h(\\\"connectgaps\\\")),i.hasMarkers(e)&&a(t,e,r,u,h,{gradient:!0}),i.hasText(e)&&s(t,e,u,h),h(\\\"fill\\\"),\\\"none\\\"!==e.fill&&l(t,e,r,h),n.coerceSelectionMarkerOpacity(e,h))}},{\\\"../../lib\\\":719,\\\"../scatter/fillcolor_defaults\\\":1120,\\\"../scatter/line_defaults\\\":1124,\\\"../scatter/marker_defaults\\\":1130,\\\"../scatter/subtypes\\\":1135,\\\"../scatter/text_defaults\\\":1136,\\\"./attributes\\\":1151}],1154:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){return t.lon=e.lon,t.lat=e.lat,t.location=e.loc?e.loc:null,t}},{}],1155:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/fx\\\"),i=t(\\\"../../plots/cartesian/axes\\\"),a=t(\\\"../../constants/numerical\\\").BADNUM,o=t(\\\"../scatter/get_trace_color\\\"),s=t(\\\"../../lib\\\").fillText,l=t(\\\"./attributes\\\");e.exports=function(t,e,r){var c=t.cd,u=c[0].trace,h=t.xa,f=t.ya,p=t.subplot,d=p.projection.isLonLatOverEdges,g=p.project;if(n.getClosest(c,function(t){var n=t.lonlat;if(n[0]===a)return 1/0;if(d(n))return 1/0;var i=g(n),o=g([e,r]),s=Math.abs(i[0]-o[0]),l=Math.abs(i[1]-o[1]),c=Math.max(3,t.mrc||0);return Math.max(Math.sqrt(s*s+l*l)-c,1-3/c)},t),!1!==t.index){var v=c[t.index],m=v.lonlat,y=[h.c2p(m),f.c2p(m)],x=v.mrc||1;t.x0=y[0]-x,t.x1=y[0]+x,t.y0=y[1]-x,t.y1=y[1]+x,t.loc=v.loc,t.lon=m[0],t.lat=m[1];var b=p.mockAxis;return t.lonLabel=i.tickText(b,b.c2l(t.lon),\\\"hover\\\").text,t.latLabel=i.tickText(b,b.c2l(t.lat),\\\"hover\\\").text,t.color=o(u,v),t.extraText=function(t,e,r,n){if(t.hovertemplate)return;var i=e.hi||t.hoverinfo,a=\\\"all\\\"===i?l.hoverinfo.flags:i.split(\\\"+\\\"),o=-1!==a.indexOf(\\\"location\\\")&&Array.isArray(t.locations),c=-1!==a.indexOf(\\\"lon\\\"),u=-1!==a.indexOf(\\\"lat\\\"),h=-1!==a.indexOf(\\\"text\\\"),f=[];function p(t){return t+\\\"\\\\xb0\\\"}o?f.push(e.loc):c&&u?f.push(\\\"(\\\"+p(r.lonLabel)+\\\", \\\"+p(r.latLabel)+\\\")\\\"):c?f.push(n.lon+p(r.lonLabel)):u&&f.push(n.lat+p(r.latLabel));h&&s(e,t,f);return f.join(\\\"<br>\\\")}(u,v,t,c[0].t.labels),t.hovertemplate=u.hovertemplate,[t]}}},{\\\"../../components/fx\\\":632,\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767,\\\"../scatter/get_trace_color\\\":1121,\\\"./attributes\\\":1151}],1156:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),colorbar:t(\\\"../scatter/marker_colorbar\\\"),calc:t(\\\"./calc\\\"),plot:t(\\\"./plot\\\"),style:t(\\\"./style\\\"),styleOnSelect:t(\\\"../scatter/style\\\").styleOnSelect,hoverPoints:t(\\\"./hover\\\"),eventData:t(\\\"./event_data\\\"),selectPoints:t(\\\"./select\\\"),moduleType:\\\"trace\\\",name:\\\"scattergeo\\\",basePlotModule:t(\\\"../../plots/geo\\\"),categories:[\\\"geo\\\",\\\"symbols\\\",\\\"showLegend\\\",\\\"scatter-like\\\"],meta:{}}},{\\\"../../plots/geo\\\":797,\\\"../scatter/marker_colorbar\\\":1129,\\\"../scatter/style\\\":1134,\\\"./attributes\\\":1151,\\\"./calc\\\":1152,\\\"./defaults\\\":1153,\\\"./event_data\\\":1154,\\\"./hover\\\":1155,\\\"./plot\\\":1157,\\\"./select\\\":1158,\\\"./style\\\":1159}],1157:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../constants/numerical\\\").BADNUM,o=t(\\\"../../lib/topojson_utils\\\").getTopojsonFeatures,s=t(\\\"../../lib/geo_location_utils\\\").locationToFeature,l=t(\\\"../../lib/geojson_utils\\\"),c=t(\\\"../scatter/subtypes\\\"),u=t(\\\"./style\\\");function h(t,e){var r=t[0].trace;if(Array.isArray(r.locations))for(var n=o(r,e),i=r.locationmode,l=0;l<t.length;l++){var c=t[l],u=s(i,c.loc,n);c.lonlat=u?u.properties.ct:[a,a]}}e.exports=function(t,e,r){for(var o=0;o<r.length;o++)h(r[o],e.topojson);function s(t,e){t.lonlat[0]===a&&n.select(e).remove()}var f=e.layers.frontplot.select(\\\".scatterlayer\\\"),p=i.makeTraceGroups(f,r,\\\"trace scattergeo\\\");p.selectAll(\\\"*\\\").remove(),p.each(function(e){var r=n.select(this),a=e[0].trace;if(c.hasLines(a)||\\\"none\\\"!==a.fill){var o=l.calcTraceToLineCoords(e),h=\\\"none\\\"!==a.fill?l.makePolygon(o):l.makeLine(o);r.selectAll(\\\"path.js-line\\\").data([{geojson:h,trace:a}]).enter().append(\\\"path\\\").classed(\\\"js-line\\\",!0).style(\\\"stroke-miterlimit\\\",2)}c.hasMarkers(a)&&r.selectAll(\\\"path.point\\\").data(i.identity).enter().append(\\\"path\\\").classed(\\\"point\\\",!0).each(function(t){s(t,this)}),c.hasText(a)&&r.selectAll(\\\"g\\\").data(i.identity).enter().append(\\\"g\\\").append(\\\"text\\\").each(function(t){s(t,this)}),u(t,e)})}},{\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"../../lib/geo_location_utils\\\":713,\\\"../../lib/geojson_utils\\\":714,\\\"../../lib/topojson_utils\\\":746,\\\"../scatter/subtypes\\\":1135,\\\"./style\\\":1159,d3:163}],1158:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../scatter/subtypes\\\"),i=t(\\\"../../constants/numerical\\\").BADNUM;e.exports=function(t,e){var r,a,o,s,l,c=t.cd,u=t.xaxis,h=t.yaxis,f=[],p=c[0].trace;if(!n.hasMarkers(p)&&!n.hasText(p))return[];if(!1===e)for(l=0;l<c.length;l++)c[l].selected=0;else for(l=0;l<c.length;l++)(a=(r=c[l]).lonlat)[0]!==i&&(o=u.c2p(a),s=h.c2p(a),e.contains([o,s],null,l,t)?(f.push({pointNumber:l,lon:a[0],lat:a[1]}),r.selected=1):r.selected=0);return f}},{\\\"../../constants/numerical\\\":695,\\\"../scatter/subtypes\\\":1135}],1159:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../components/drawing\\\"),a=t(\\\"../../components/color\\\"),o=t(\\\"../scatter/style\\\"),s=o.stylePoints,l=o.styleText;e.exports=function(t,e){e&&function(t,e){var r=e[0].trace,o=e[0].node3;o.style(\\\"opacity\\\",e[0].trace.opacity),s(o,r,t),l(o,r,t),o.selectAll(\\\"path.js-line\\\").style(\\\"fill\\\",\\\"none\\\").each(function(t){var e=n.select(this),r=t.trace,o=r.line||{};e.call(a.stroke,o.color).call(i.dashLine,o.dash||\\\"\\\",o.width||0),\\\"none\\\"!==r.fill&&e.call(a.fill,r.fillcolor)})}(t,e)}},{\\\"../../components/color\\\":593,\\\"../../components/drawing\\\":614,\\\"../scatter/style\\\":1134,d3:163}],1160:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/attributes\\\"),i=t(\\\"../scatter/attributes\\\"),a=t(\\\"../../components/colorscale/attributes\\\"),o=t(\\\"../../lib/extend\\\").extendFlat,s=t(\\\"../../plot_api/edit_types\\\").overrideAll,l=t(\\\"./constants\\\").DASHES,c=i.line,u=i.marker,h=u.line,f=e.exports=s({x:i.x,x0:i.x0,dx:i.dx,y:i.y,y0:i.y0,dy:i.dy,text:i.text,hovertext:i.hovertext,textposition:i.textposition,textfont:i.textfont,mode:{valType:\\\"flaglist\\\",flags:[\\\"lines\\\",\\\"markers\\\",\\\"text\\\"],extras:[\\\"none\\\"]},line:{color:c.color,width:c.width,shape:{valType:\\\"enumerated\\\",values:[\\\"linear\\\",\\\"hv\\\",\\\"vh\\\",\\\"hvh\\\",\\\"vhv\\\"],dflt:\\\"linear\\\",editType:\\\"plot\\\"},dash:{valType:\\\"enumerated\\\",values:Object.keys(l),dflt:\\\"solid\\\"}},marker:o({},a(\\\"marker\\\"),{symbol:u.symbol,size:u.size,sizeref:u.sizeref,sizemin:u.sizemin,sizemode:u.sizemode,opacity:u.opacity,colorbar:u.colorbar,line:o({},a(\\\"marker.line\\\"),{width:h.width})}),connectgaps:i.connectgaps,fill:o({},i.fill,{dflt:\\\"none\\\"}),fillcolor:i.fillcolor,selected:{marker:i.selected.marker,textfont:i.selected.textfont},unselected:{marker:i.unselected.marker,textfont:i.unselected.textfont},opacity:n.opacity},\\\"calc\\\",\\\"nested\\\");f.x.editType=f.y.editType=f.x0.editType=f.y0.editType=\\\"calc+clearAxisTypes\\\",f.hovertemplate=i.hovertemplate},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../lib/extend\\\":710,\\\"../../plot_api/edit_types\\\":750,\\\"../../plots/attributes\\\":764,\\\"../scatter/attributes\\\":1112,\\\"./constants\\\":1162}],1161:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"point-cluster\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../plots/cartesian/axis_ids\\\"),o=t(\\\"../../plots/cartesian/autorange\\\").findExtremes,s=t(\\\"../scatter/calc\\\"),l=s.calcMarkerSize,c=s.calcAxisExpansion,u=s.setFirstScatter,h=t(\\\"../scatter/colorscale_calc\\\"),f=t(\\\"./convert\\\"),p=t(\\\"./scene_update\\\"),d=t(\\\"../../constants/numerical\\\").BADNUM,g=t(\\\"./constants\\\").TOO_MANY_POINTS;function v(t,e,r){var n=t._extremes[e._id],i=o(e,r._bnds,{padded:!0});n.min=n.min.concat(i.min),n.max=n.max.concat(i.max)}e.exports=function(t,e){var r,o,s,m=t._fullLayout,y=a.getFromId(t,e.xaxis),x=a.getFromId(t,e.yaxis),b=m._plots[e.xaxis+e.yaxis],_=e._length,w=_>=g,k=2*_,T={},A=y.makeCalcdata(e,\\\"x\\\"),M=x.makeCalcdata(e,\\\"y\\\"),S=new Array(k);for(r=0;r<_;r++)o=A[r],s=M[r],S[2*r]=o===d?NaN:o,S[2*r+1]=s===d?NaN:s;if(\\\"log\\\"===y.type)for(r=0;r<k;r+=2)S[r]=y.c2l(S[r]);if(\\\"log\\\"===x.type)for(r=1;r<k;r+=2)S[r]=x.c2l(S[r]);if(w&&\\\"log\\\"!==y.type&&\\\"log\\\"!==x.type)T.tree=n(S);else{var E=T.ids=new Array(_);for(r=0;r<_;r++)E[r]=r}h(t,e);var C,L=function(t,e,r,n,a,o){var s=f.style(t,r);s.marker&&(s.marker.positions=n);s.line&&n.length>1&&i.extendFlat(s.line,f.linePositions(t,r,n));if(s.errorX||s.errorY){var l=f.errorBarPositions(t,r,n,a,o);s.errorX&&i.extendFlat(s.errorX,l.x),s.errorY&&i.extendFlat(s.errorY,l.y)}s.text&&(i.extendFlat(s.text,{positions:n},f.textPosition(t,r,s.text,s.marker)),i.extendFlat(s.textSel,{positions:n},f.textPosition(t,r,s.text,s.markerSel)),i.extendFlat(s.textUnsel,{positions:n},f.textPosition(t,r,s.text,s.markerUnsel)));return s}(t,0,e,S,A,M),P=p(t,b);return u(m,e),w?L.marker&&(C=2*(L.marker.sizeAvg||Math.max(L.marker.size,3))):C=l(e,_),c(t,e,y,x,A,M,C),L.errorX&&v(e,y,L.errorX),L.errorY&&v(e,x,L.errorY),L.fill&&!P.fill2d&&(P.fill2d=!0),L.marker&&!P.scatter2d&&(P.scatter2d=!0),L.line&&!P.line2d&&(P.line2d=!0),!L.errorX&&!L.errorY||P.error2d||(P.error2d=!0),L.text&&!P.glText&&(P.glText=!0),L.marker&&(L.marker.snap=T.tree||g),P.lineOptions.push(L.line),P.errorXOptions.push(L.errorX),P.errorYOptions.push(L.errorY),P.fillOptions.push(L.fill),P.markerOptions.push(L.marker),P.markerSelectedOptions.push(L.markerSel),P.markerUnselectedOptions.push(L.markerUnsel),P.textOptions.push(L.text),P.textSelectedOptions.push(L.textSel),P.textUnselectedOptions.push(L.textUnsel),P.selectBatch.push([]),P.unselectBatch.push([]),T._scene=P,T.index=P.count,T.x=A,T.y=M,T.positions=S,P.count++,[{x:!1,y:!1,t:T,trace:e}]}},{\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"../../plots/cartesian/autorange\\\":766,\\\"../../plots/cartesian/axis_ids\\\":770,\\\"../scatter/calc\\\":1113,\\\"../scatter/colorscale_calc\\\":1115,\\\"./constants\\\":1162,\\\"./convert\\\":1163,\\\"./scene_update\\\":1169,\\\"point-cluster\\\":469}],1162:[function(t,e,r){\\\"use strict\\\";e.exports={TOO_MANY_POINTS:1e5,SYMBOL_SDF_SIZE:200,SYMBOL_SIZE:20,SYMBOL_STROKE:1,DOT_RE:/-dot/,OPEN_RE:/-open/,DASHES:{solid:[1],dot:[1,1],dash:[4,1],longdash:[8,1],dashdot:[4,1,1,1],longdashdot:[8,1,1,1]}}},{}],1163:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"svg-path-sdf\\\"),a=t(\\\"color-normalize\\\"),o=t(\\\"../../registry\\\"),s=t(\\\"../../lib\\\"),l=t(\\\"../../components/drawing\\\"),c=t(\\\"../../plots/cartesian/axis_ids\\\"),u=t(\\\"../../lib/gl_format_color\\\").formatColor,h=t(\\\"../scatter/subtypes\\\"),f=t(\\\"../scatter/make_bubble_size_func\\\"),p=t(\\\"./constants\\\"),d=t(\\\"../../constants/interactions\\\").DESELECTDIM,g={start:1,left:1,end:-1,right:-1,middle:0,center:0,bottom:1,top:-1};function v(t){var e,r=t._length,i=t.textfont,a=t.textposition,o=Array.isArray(a)?a:[a],s=i.color,l=i.size,c=i.family,u={};if(u.text=t.text,Array.isArray(u.text)&&u.text.length<r)for(u.text=t.text.slice(),e=u.text.length;e<r;e++)u.text[e]=\\\"\\\";for(u.opacity=t.opacity,u.font={},u.align=[],u.baseline=[],e=0;e<o.length;e++){var h=o[e].split(/\\\\s+/);switch(h[1]){case\\\"left\\\":u.align.push(\\\"right\\\");break;case\\\"right\\\":u.align.push(\\\"left\\\");break;default:u.align.push(h[1])}switch(h[0]){case\\\"top\\\":u.baseline.push(\\\"bottom\\\");break;case\\\"bottom\\\":u.baseline.push(\\\"top\\\");break;default:u.baseline.push(h[0])}}if(Array.isArray(s))for(u.color=new Array(r),e=0;e<r;e++)u.color[e]=s[e];else u.color=s;if(Array.isArray(l)||Array.isArray(c))for(u.font=new Array(r),e=0;e<r;e++){var f=u.font[e]={};f.size=Array.isArray(l)?n(l[e])?l[e]:0:l,f.family=Array.isArray(c)?c[e]:c}else u.font={size:l,family:c};return u}function m(t){var e,r,n=t._length,i=t.marker,o={},l=Array.isArray(i.symbol),c=s.isArrayOrTypedArray(i.color),h=s.isArrayOrTypedArray(i.line.color),d=s.isArrayOrTypedArray(i.opacity),g=s.isArrayOrTypedArray(i.size),v=s.isArrayOrTypedArray(i.line.width);if(l||(r=p.OPEN_RE.test(i.symbol)),l||c||h||d){o.colors=new Array(n),o.borderColors=new Array(n);var m=u(i,i.opacity,n),y=u(i.line,i.opacity,n);if(!Array.isArray(y[0])){var x=y;for(y=Array(n),e=0;e<n;e++)y[e]=x}if(!Array.isArray(m[0])){var b=m;for(m=Array(n),e=0;e<n;e++)m[e]=b}for(o.colors=m,o.borderColors=y,e=0;e<n;e++){if(l){var _=i.symbol[e];r=p.OPEN_RE.test(_)}r&&(y[e]=m[e].slice(),m[e]=m[e].slice(),m[e][3]=0)}o.opacity=t.opacity}else r?(o.color=a(i.color,\\\"uint8\\\"),o.color[3]=0,o.borderColor=a(i.color,\\\"uint8\\\")):(o.color=a(i.color,\\\"uint8\\\"),o.borderColor=a(i.line.color,\\\"uint8\\\")),o.opacity=t.opacity*i.opacity;if(l)for(o.markers=new Array(n),e=0;e<n;e++)o.markers[e]=M(i.symbol[e]);else o.marker=M(i.symbol);var w,k=f(t);if(g||v){var T,A=o.sizes=new Array(n),S=o.borderSizes=new Array(n),E=0;if(g){for(e=0;e<n;e++)A[e]=k(i.size[e]),E+=A[e];T=E/n}else for(w=k(i.size),e=0;e<n;e++)A[e]=w;if(v)for(e=0;e<n;e++)S[e]=i.line.width[e]/2;else for(w=i.line.width/2,e=0;e<n;e++)S[e]=w;o.sizeAvg=T}else o.size=k(i&&i.size||10),o.borderSizes=k(i.line.width);return o}function y(t,e){var r=t.marker,n={};return e?(e.marker&&e.marker.symbol?n=m(s.extendFlat({},r,e.marker)):e.marker&&(e.marker.size&&(n.size=e.marker.size/2),e.marker.color&&(n.colors=e.marker.color),void 0!==e.marker.opacity&&(n.opacity=e.marker.opacity)),n):n}function x(t,e){var r={};if(!e)return r;if(e.textfont){var n={opacity:1,text:t.text,textposition:t.textposition,textfont:s.extendFlat({},t.textfont)};e.textfont&&s.extendFlat(n.textfont,e.textfont),r=v(n)}return r}function b(t,e){var r={capSize:2*e.width,lineWidth:e.thickness,color:e.color};return e.copy_ystyle&&(r=t.error_y),r}var _=p.SYMBOL_SDF_SIZE,w=p.SYMBOL_SIZE,k=p.SYMBOL_STROKE,T={},A=l.symbolFuncs[0](.05*w);function M(t){if(\\\"circle\\\"===t)return null;var e,r,n=l.symbolNumber(t),a=l.symbolFuncs[n%100],o=!!l.symbolNoDot[n%100],s=!!l.symbolNoFill[n%100],c=p.DOT_RE.test(t);return T[t]?T[t]:(e=c&&!o?a(1.1*w)+A:a(w),r=i(e,{w:_,h:_,viewBox:[-w,-w,w,w],stroke:s?k:-k}),T[t]=r,r||null)}e.exports={style:function(t,e){var r,n={marker:void 0,markerSel:void 0,markerUnsel:void 0,line:void 0,fill:void 0,errorX:void 0,errorY:void 0,text:void 0,textSel:void 0,textUnsel:void 0};if(!0!==e.visible)return n;if(h.hasText(e)&&(n.text=v(e),n.textSel=x(e,e.selected),n.textUnsel=x(e,e.unselected)),h.hasMarkers(e)&&(n.marker=m(e),n.markerSel=y(e,e.selected),n.markerUnsel=y(e,e.unselected),!e.unselected&&Array.isArray(e.marker.opacity))){var i=e.marker.opacity;for(n.markerUnsel.opacity=new Array(i.length),r=0;r<i.length;r++)n.markerUnsel.opacity[r]=d*i[r]}if(h.hasLines(e)){n.line={overlay:!0,thickness:e.line.width,color:e.line.color,opacity:e.opacity};var a=(p.DASHES[e.line.dash]||[1]).slice();for(r=0;r<a.length;++r)a[r]*=e.line.width;n.line.dashes=a}return e.error_x&&e.error_x.visible&&(n.errorX=b(e,e.error_x)),e.error_y&&e.error_y.visible&&(n.errorY=b(e,e.error_y)),e.fill&&\\\"none\\\"!==e.fill&&(n.fill={closed:!0,fill:e.fillcolor,thickness:0}),n},markerStyle:m,markerSelection:y,linePositions:function(t,e,r){var n,i,a=r.length,o=a/2;if(h.hasLines(e)&&o)if(\\\"hv\\\"===e.line.shape){for(n=[],i=0;i<o-1;i++)isNaN(r[2*i])||isNaN(r[2*i+1])?n.push(NaN,NaN,NaN,NaN):(n.push(r[2*i],r[2*i+1]),isNaN(r[2*i+2])||isNaN(r[2*i+3])?n.push(NaN,NaN):n.push(r[2*i+2],r[2*i+1]));n.push(r[a-2],r[a-1])}else if(\\\"hvh\\\"===e.line.shape){for(n=[],i=0;i<o-1;i++)if(isNaN(r[2*i])||isNaN(r[2*i+1])||isNaN(r[2*i+2])||isNaN(r[2*i+3]))isNaN(r[2*i])||isNaN(r[2*i+1])?n.push(NaN,NaN):n.push(r[2*i],r[2*i+1]),n.push(NaN,NaN);else{var s=(r[2*i]+r[2*i+2])/2;n.push(r[2*i],r[2*i+1],s,r[2*i+1],s,r[2*i+3])}n.push(r[a-2],r[a-1])}else if(\\\"vhv\\\"===e.line.shape){for(n=[],i=0;i<o-1;i++)if(isNaN(r[2*i])||isNaN(r[2*i+1])||isNaN(r[2*i+2])||isNaN(r[2*i+3]))isNaN(r[2*i])||isNaN(r[2*i+1])?n.push(NaN,NaN):n.push(r[2*i],r[2*i+1]),n.push(NaN,NaN);else{var l=(r[2*i+1]+r[2*i+3])/2;n.push(r[2*i],r[2*i+1],r[2*i],l,r[2*i+2],l)}n.push(r[a-2],r[a-1])}else if(\\\"vh\\\"===e.line.shape){for(n=[],i=0;i<o-1;i++)isNaN(r[2*i])||isNaN(r[2*i+1])?n.push(NaN,NaN,NaN,NaN):(n.push(r[2*i],r[2*i+1]),isNaN(r[2*i+2])||isNaN(r[2*i+3])?n.push(NaN,NaN):n.push(r[2*i],r[2*i+3]));n.push(r[a-2],r[a-1])}else n=r;var c=!1;for(i=0;i<n.length;i++)if(isNaN(n[i])){c=!0;break}var u=c||n.length>p.TOO_MANY_POINTS?\\\"rect\\\":h.hasMarkers(e)?\\\"rect\\\":\\\"round\\\";if(c&&e.connectgaps){var f=n[0],d=n[1];for(i=0;i<n.length;i+=2)isNaN(n[i])||isNaN(n[i+1])?(n[i]=f,n[i+1]=d):(f=n[i],d=n[i+1])}return{join:u,positions:n}},errorBarPositions:function(t,e,r,i,a){var s=o.getComponentMethod(\\\"errorbars\\\",\\\"makeComputeError\\\"),l=c.getFromId(t,e.xaxis),u=c.getFromId(t,e.yaxis),h=r.length/2,f={};function p(t,i){var a=i._id.charAt(0),o=e[\\\"error_\\\"+a];if(o&&o.visible&&(\\\"linear\\\"===i.type||\\\"log\\\"===i.type)){for(var l=s(o),c={x:0,y:1}[a],u={x:[0,1,2,3],y:[2,3,0,1]}[a],p=new Float64Array(4*h),d=1/0,g=-1/0,v=0,m=0;v<h;v++,m+=4){var y=t[v];if(n(y)){var x=r[2*v+c],b=l(y,v),_=b[0],w=b[1];if(n(_)&&n(w)){var k=y-_,T=y+w;p[m+u[0]]=x-i.c2l(k),p[m+u[1]]=i.c2l(T)-x,p[m+u[2]]=0,p[m+u[3]]=0,d=Math.min(d,y-_),g=Math.max(g,y+w)}}}f[a]={positions:r,errors:p,_bnds:[d,g]}}}return p(i,l),p(a,u),f},textPosition:function(t,e,r,n){var i,a=e._length,o={};if(h.hasMarkers(e)){var s=r.font,l=r.align,c=r.baseline;for(o.offset=new Array(a),i=0;i<a;i++){var u=n.sizes?n.sizes[i]:n.size,f=Array.isArray(s)?s[i].size:s.size,p=Array.isArray(l)?l.length>1?l[i]:l[0]:l,d=Array.isArray(c)?c.length>1?c[i]:c[0]:c,v=g[p],m=g[d],y=u?u/.8+1:0,x=-m*y-.5*m;o.offset[i]=[v*y/f,x/f]}}return o}}},{\\\"../../components/drawing\\\":614,\\\"../../constants/interactions\\\":694,\\\"../../lib\\\":719,\\\"../../lib/gl_format_color\\\":716,\\\"../../plots/cartesian/axis_ids\\\":770,\\\"../../registry\\\":847,\\\"../scatter/make_bubble_size_func\\\":1128,\\\"../scatter/subtypes\\\":1135,\\\"./constants\\\":1162,\\\"color-normalize\\\":120,\\\"fast-isnumeric\\\":225,\\\"svg-path-sdf\\\":535}],1164:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../registry\\\"),a=t(\\\"./attributes\\\"),o=t(\\\"../scatter/constants\\\"),s=t(\\\"../scatter/subtypes\\\"),l=t(\\\"../scatter/xy_defaults\\\"),c=t(\\\"../scatter/marker_defaults\\\"),u=t(\\\"../scatter/line_defaults\\\"),h=t(\\\"../scatter/fillcolor_defaults\\\"),f=t(\\\"../scatter/text_defaults\\\");e.exports=function(t,e,r,p){function d(r,i){return n.coerce(t,e,a,r,i)}var g=!!t.marker&&/-open/.test(t.marker.symbol),v=s.isBubble(t),m=l(t,e,p,d);if(m){var y=m<o.PTS_LINESONLY?\\\"lines+markers\\\":\\\"lines\\\";d(\\\"text\\\"),d(\\\"hovertext\\\"),d(\\\"hovertemplate\\\"),d(\\\"mode\\\",y),s.hasLines(e)&&(d(\\\"connectgaps\\\"),u(t,e,r,p,d),d(\\\"line.shape\\\")),s.hasMarkers(e)&&(c(t,e,r,p,d),d(\\\"marker.line.width\\\",g||v?1:0)),s.hasText(e)&&f(t,e,p,d);var x=(e.line||{}).color,b=(e.marker||{}).color;d(\\\"fill\\\"),\\\"none\\\"!==e.fill&&h(t,e,r,d);var _=i.getComponentMethod(\\\"errorbars\\\",\\\"supplyDefaults\\\");_(t,e,x||b||r,{axis:\\\"y\\\"}),_(t,e,x||b||r,{axis:\\\"x\\\",inherit:\\\"y\\\"}),n.coerceSelectionMarkerOpacity(e,d)}else e.visible=!1}},{\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"../scatter/constants\\\":1116,\\\"../scatter/fillcolor_defaults\\\":1120,\\\"../scatter/line_defaults\\\":1124,\\\"../scatter/marker_defaults\\\":1130,\\\"../scatter/subtypes\\\":1135,\\\"../scatter/text_defaults\\\":1136,\\\"../scatter/xy_defaults\\\":1137,\\\"./attributes\\\":1160}],1165:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../components/color\\\"),a=t(\\\"../../constants/interactions\\\").DESELECTDIM;e.exports={styleTextSelection:function(t){var e,r,o=t[0],s=o.trace,l=o.t,c=l._scene,u=l.index,h=c.selectBatch[u],f=c.unselectBatch[u],p=c.textOptions[u],d=c.textSelectedOptions[u]||{},g=c.textUnselectedOptions[u]||{},v=n.extendFlat({},p);if(h.length||f.length){var m=d.color,y=g.color,x=p.color,b=Array.isArray(x);for(v.color=new Array(s._length),e=0;e<h.length;e++)r=h[e],v.color[r]=m||(b?x[r]:x);for(e=0;e<f.length;e++){r=f[e];var _=b?x[r]:x;v.color[r]=y||(m?_:i.addOpacity(_,a))}}c.glText[u].update(v)}}},{\\\"../../components/color\\\":593,\\\"../../constants/interactions\\\":694,\\\"../../lib\\\":719}],1166:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../scatter/get_trace_color\\\");function o(t,e,r,o){var s=t.xa,l=t.ya,c=t.distance,u=t.dxy,h=t.index,f={pointNumber:h,x:e[h],y:r[h]};f.tx=Array.isArray(o.text)?o.text[h]:o.text,f.htx=Array.isArray(o.hovertext)?o.hovertext[h]:o.hovertext,f.data=Array.isArray(o.customdata)?o.customdata[h]:o.customdata,f.tp=Array.isArray(o.textposition)?o.textposition[h]:o.textposition;var p=o.textfont;p&&(f.ts=Array.isArray(p.size)?p.size[h]:p.size,f.tc=Array.isArray(p.color)?p.color[h]:p.color,f.tf=Array.isArray(p.family)?p.family[h]:p.family);var d=o.marker;d&&(f.ms=i.isArrayOrTypedArray(d.size)?d.size[h]:d.size,f.mo=i.isArrayOrTypedArray(d.opacity)?d.opacity[h]:d.opacity,f.mx=Array.isArray(d.symbol)?d.symbol[h]:d.symbol,f.mc=i.isArrayOrTypedArray(d.color)?d.color[h]:d.color);var g=d&&d.line;g&&(f.mlc=Array.isArray(g.color)?g.color[h]:g.color,f.mlw=i.isArrayOrTypedArray(g.width)?g.width[h]:g.width);var v=d&&d.gradient;v&&\\\"none\\\"!==v.type&&(f.mgt=Array.isArray(v.type)?v.type[h]:v.type,f.mgc=Array.isArray(v.color)?v.color[h]:v.color);var m=s.c2p(f.x,!0),y=l.c2p(f.y,!0),x=f.mrc||1,b=o.hoverlabel;b&&(f.hbg=Array.isArray(b.bgcolor)?b.bgcolor[h]:b.bgcolor,f.hbc=Array.isArray(b.bordercolor)?b.bordercolor[h]:b.bordercolor,f.hts=Array.isArray(b.font.size)?b.font.size[h]:b.font.size,f.htc=Array.isArray(b.font.color)?b.font.color[h]:b.font.color,f.htf=Array.isArray(b.font.family)?b.font.family[h]:b.font.family,f.hnl=Array.isArray(b.namelength)?b.namelength[h]:b.namelength);var _=o.hoverinfo;_&&(f.hi=Array.isArray(_)?_[h]:_);var w=o.hovertemplate;w&&(f.ht=Array.isArray(w)?w[h]:w);var k={};return k[t.index]=f,i.extendFlat(t,{color:a(o,f),x0:m-x,x1:m+x,xLabelVal:f.x,y0:y-x,y1:y+x,yLabelVal:f.y,cd:k,distance:c,spikeDistance:u,hovertemplate:f.ht}),f.htx?t.text=f.htx:f.tx?t.text=f.tx:o.text&&(t.text=o.text),i.fillText(f,o,t),n.getComponentMethod(\\\"errorbars\\\",\\\"hoverInfo\\\")(f,o,t),t}e.exports={hoverPoints:function(t,e,r,n){var i,a,s,l,c,u,h,f,p,d=t.cd,g=d[0].t,v=d[0].trace,m=t.xa,y=t.ya,x=g.x,b=g.y,_=m.c2p(e),w=y.c2p(r),k=t.distance;if(g.tree){var T=m.p2c(_-k),A=m.p2c(_+k),M=y.p2c(w-k),S=y.p2c(w+k);i=\\\"x\\\"===n?g.tree.range(Math.min(T,A),Math.min(y._rl[0],y._rl[1]),Math.max(T,A),Math.max(y._rl[0],y._rl[1])):g.tree.range(Math.min(T,A),Math.min(M,S),Math.max(T,A),Math.max(M,S))}else{if(!g.ids)return[t];i=g.ids}var E=k;if(\\\"x\\\"===n)for(c=0;c<i.length;c++)s=x[i[c]],(u=Math.abs(m.c2p(s)-_))<E&&(E=u,h=y.c2p(b[i[c]])-w,p=Math.sqrt(u*u+h*h),a=i[c]);else for(c=i.length-1;c>-1;c--)s=x[i[c]],l=b[i[c]],u=m.c2p(s)-_,h=y.c2p(l)-w,(f=Math.sqrt(u*u+h*h))<E&&(E=p=f,a=i[c]);return t.index=a,t.distance=E,t.dxy=p,void 0===a?[t]:(o(t,x,b,v),[t])},calcHover:o}},{\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"../scatter/get_trace_color\\\":1121}],1167:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./hover\\\");e.exports={moduleType:\\\"trace\\\",name:\\\"scattergl\\\",basePlotModule:t(\\\"../../plots/cartesian\\\"),categories:[\\\"gl\\\",\\\"regl\\\",\\\"cartesian\\\",\\\"symbols\\\",\\\"errorBarsOK\\\",\\\"showLegend\\\",\\\"scatter-like\\\"],attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),crossTraceDefaults:t(\\\"../scatter/cross_trace_defaults\\\"),colorbar:t(\\\"../scatter/marker_colorbar\\\"),calc:t(\\\"./calc\\\"),plot:t(\\\"./plot\\\"),hoverPoints:n.hoverPoints,selectPoints:t(\\\"./select\\\"),meta:{}}},{\\\"../../plots/cartesian\\\":778,\\\"../scatter/cross_trace_defaults\\\":1118,\\\"../scatter/marker_colorbar\\\":1129,\\\"./attributes\\\":1160,\\\"./calc\\\":1161,\\\"./defaults\\\":1164,\\\"./hover\\\":1166,\\\"./plot\\\":1168,\\\"./select\\\":1170}],1168:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"regl-scatter2d\\\"),i=t(\\\"regl-line2d\\\"),a=t(\\\"regl-error2d\\\"),o=t(\\\"gl-text\\\"),s=t(\\\"../../lib\\\"),l=t(\\\"../../lib/prepare_regl\\\"),c=t(\\\"../scatter/subtypes\\\"),u=t(\\\"../scatter/link_traces\\\"),h=t(\\\"./edit_style\\\").styleTextSelection;e.exports=function(t,e,r){if(r.length){var f,p,d=t._fullLayout,g=e._scene,v=e.xaxis,m=e.yaxis;if(g)if(l(t,[\\\"ANGLE_instanced_arrays\\\",\\\"OES_element_index_uint\\\"])){var y=g.count,x=d._glcanvas.data()[0].regl;if(u(t,e,r),g.dirty){if(!0===g.error2d&&(g.error2d=a(x)),!0===g.line2d&&(g.line2d=i(x)),!0===g.scatter2d&&(g.scatter2d=n(x)),!0===g.fill2d&&(g.fill2d=i(x)),!0===g.glText)for(g.glText=new Array(y),f=0;f<y;f++)g.glText[f]=new o(x);if(g.glText){if(y>g.glText.length){var b=y-g.glText.length;for(f=0;f<b;f++)g.glText.push(new o(x))}else if(y<g.glText.length){var _=g.glText.length-y;g.glText.splice(y,_).forEach(function(t){t.destroy()})}for(f=0;f<y;f++)g.glText[f].update(g.textOptions[f])}if(g.line2d&&(g.line2d.update(g.lineOptions),g.lineOptions=g.lineOptions.map(function(t){if(t&&t.positions){for(var e=t.positions,r=0;r<e.length&&(isNaN(e[r])||isNaN(e[r+1]));)r+=2;for(var n=e.length-2;n>r&&(isNaN(e[n])||isNaN(e[n+1]));)n-=2;t.positions=e.slice(r,n+2)}return t}),g.line2d.update(g.lineOptions)),g.error2d){var w=(g.errorXOptions||[]).concat(g.errorYOptions||[]);g.error2d.update(w)}g.scatter2d&&g.scatter2d.update(g.markerOptions),g.fillOrder=s.repeat(null,y),g.fill2d&&(g.fillOptions=g.fillOptions.map(function(t,e){var n=r[e];if(t&&n&&n[0]&&n[0].trace){var i,a,o=n[0],s=o.trace,l=o.t,c=g.lineOptions[e],u=[];s._ownfill&&u.push(e),s._nexttrace&&u.push(e+1),u.length&&(g.fillOrder[e]=u);var h,f,p=[],d=c&&c.positions||l.positions;if(\\\"tozeroy\\\"===s.fill){for(h=0;h<d.length&&isNaN(d[h+1]);)h+=2;for(f=d.length-2;f>h&&isNaN(d[f+1]);)f-=2;0!==d[h+1]&&(p=[d[h],0]),p=p.concat(d.slice(h,f+2)),0!==d[f+1]&&(p=p.concat([d[f],0]))}else if(\\\"tozerox\\\"===s.fill){for(h=0;h<d.length&&isNaN(d[h]);)h+=2;for(f=d.length-2;f>h&&isNaN(d[f]);)f-=2;0!==d[h]&&(p=[0,d[h+1]]),p=p.concat(d.slice(h,f+2)),0!==d[f]&&(p=p.concat([0,d[f+1]]))}else if(\\\"toself\\\"===s.fill||\\\"tonext\\\"===s.fill){for(p=[],i=0,a=0;a<d.length;a+=2)(isNaN(d[a])||isNaN(d[a+1]))&&((p=p.concat(d.slice(i,a))).push(d[i],d[i+1]),i=a+2);p=p.concat(d.slice(i)),i&&p.push(d[i],d[i+1])}else{var v=s._nexttrace;if(v){var m=g.lineOptions[e+1];if(m){var y=m.positions;if(\\\"tonexty\\\"===s.fill){for(p=d.slice(),e=Math.floor(y.length/2);e--;){var x=y[2*e],b=y[2*e+1];isNaN(x)||isNaN(b)||p.push(x,b)}t.fill=v.fillcolor}}}}if(s._prevtrace&&\\\"tonext\\\"===s._prevtrace.fill){var _=g.lineOptions[e-1].positions,w=p.length/2,k=[i=w];for(a=0;a<_.length;a+=2)(isNaN(_[a])||isNaN(_[a+1]))&&(k.push(a/2+w+1),i=a+2);p=p.concat(_),t.hole=k}return t.fillmode=s.fill,t.opacity=s.opacity,t.positions=p,t}}),g.fill2d.update(g.fillOptions))}var k=d.dragmode,T=\\\"lasso\\\"===k||\\\"select\\\"===k,A=d.clickmode.indexOf(\\\"select\\\")>-1;for(f=0;f<y;f++){var M=r[f][0],S=M.trace,E=M.t,C=E.index,L=S._length,P=E.x,O=E.y;if(S.selectedpoints||T||A){if(T||(T=!0),S.selectedpoints){var z=g.selectBatch[C]=s.selIndices2selPoints(S),I={};for(p=0;p<z.length;p++)I[z[p]]=1;var D=[];for(p=0;p<L;p++)I[p]||D.push(p);g.unselectBatch[C]=D}var R=E.xpx=new Array(L),F=E.ypx=new Array(L);for(p=0;p<L;p++)R[p]=v.c2p(P[p]),F[p]=m.c2p(O[p])}else E.xpx=E.ypx=null}if(T){if(g.select2d||(g.select2d=n(d._glcanvas.data()[1].regl)),g.scatter2d){var B=new Array(y);for(f=0;f<y;f++)B[f]=g.selectBatch[f].length||g.unselectBatch[f].length?g.markerUnselectedOptions[f]:{};g.scatter2d.update(B)}g.select2d&&(g.select2d.update(g.markerOptions),g.select2d.update(g.markerSelectedOptions)),g.glText&&r.forEach(function(t){var e=((t||[])[0]||{}).trace||{};c.hasText(e)&&h(t)})}else g.scatter2d&&g.scatter2d.update(g.markerOptions);var N={viewport:function(t,e,r){var n=t._size,i=t.width,a=t.height;return[n.l+e.domain[0]*n.w,n.b+r.domain[0]*n.h,i-n.r-(1-e.domain[1])*n.w,a-n.t-(1-r.domain[1])*n.h]}(d,v,m),range:[(v._rl||v.range)[0],(m._rl||m.range)[0],(v._rl||v.range)[1],(m._rl||m.range)[1]]},j=s.repeat(N,g.count);g.fill2d&&g.fill2d.update(j),g.line2d&&g.line2d.update(j),g.error2d&&g.error2d.update(j.concat(j)),g.scatter2d&&g.scatter2d.update(j),g.select2d&&g.select2d.update(j),g.glText&&g.glText.forEach(function(t){t.update(N)})}else g.init()}}},{\\\"../../lib\\\":719,\\\"../../lib/prepare_regl\\\":732,\\\"../scatter/link_traces\\\":1127,\\\"../scatter/subtypes\\\":1135,\\\"./edit_style\\\":1165,\\\"gl-text\\\":317,\\\"regl-error2d\\\":490,\\\"regl-line2d\\\":491,\\\"regl-scatter2d\\\":497}],1169:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\");e.exports=function(t,e){var r=e._scene,i={count:0,dirty:!0,lineOptions:[],fillOptions:[],markerOptions:[],markerSelectedOptions:[],markerUnselectedOptions:[],errorXOptions:[],errorYOptions:[],textOptions:[],textSelectedOptions:[],textUnselectedOptions:[],selectBatch:[],unselectBatch:[]},a={fill2d:!1,scatter2d:!1,error2d:!1,line2d:!1,glText:!1,select2d:!1};return e._scene||((r=e._scene={}).init=function(){n.extendFlat(r,a,i)},r.init(),r.update=function(t){var e=n.repeat(t,r.count);if(r.fill2d&&r.fill2d.update(e),r.scatter2d&&r.scatter2d.update(e),r.line2d&&r.line2d.update(e),r.error2d&&r.error2d.update(e.concat(e)),r.select2d&&r.select2d.update(e),r.glText)for(var i=0;i<r.count;i++)r.glText[i].update(t)},r.draw=function(){for(var t=r.count,e=r.fill2d,i=r.error2d,a=r.line2d,o=r.scatter2d,s=r.glText,l=r.select2d,c=r.selectBatch,u=r.unselectBatch,h=0;h<t;h++){if(e&&r.fillOrder[h]&&e.draw(r.fillOrder[h]),a&&r.lineOptions[h]&&a.draw(h),i&&(r.errorXOptions[h]&&i.draw(h),r.errorYOptions[h]&&i.draw(h+t)),o&&r.markerOptions[h])if(u[h].length){var f=n.repeat([],r.count);f[h]=u[h],o.draw(f)}else c[h].length||o.draw(h);s[h]&&r.textOptions[h]&&s[h].render()}l&&l.draw(c),r.dirty=!1},r.destroy=function(){r.fill2d&&r.fill2d.destroy&&r.fill2d.destroy(),r.scatter2d&&r.scatter2d.destroy&&r.scatter2d.destroy(),r.error2d&&r.error2d.destroy&&r.error2d.destroy(),r.line2d&&r.line2d.destroy&&r.line2d.destroy(),r.select2d&&r.select2d.destroy&&r.select2d.destroy(),r.glText&&r.glText.forEach(function(t){t.destroy&&t.destroy()}),r.lineOptions=null,r.fillOptions=null,r.markerOptions=null,r.markerSelectedOptions=null,r.markerUnselectedOptions=null,r.errorXOptions=null,r.errorYOptions=null,r.textOptions=null,r.textSelectedOptions=null,r.textUnselectedOptions=null,r.selectBatch=null,r.unselectBatch=null,e._scene=null}),r.dirty||n.extendFlat(r,i),r}},{\\\"../../lib\\\":719}],1170:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../scatter/subtypes\\\"),i=t(\\\"./edit_style\\\").styleTextSelection;e.exports=function(t,e){var r=t.cd,a=[],o=r[0].trace,s=r[0].t,l=o._length,c=s.x,u=s.y,h=s._scene,f=s.index;if(!h)return a;var p=n.hasText(o),d=n.hasMarkers(o),g=!d&&!p;if(!0!==o.visible||g)return a;var v=[],m=[];if(!1!==e&&!e.degenerate)for(var y=0;y<l;y++)e.contains([s.xpx[y],s.ypx[y]],!1,y,t)?(v.push(y),a.push({pointNumber:y,x:c[y],y:u[y]})):m.push(y);if(d){var x=h.scatter2d;if(v.length||m.length){if(!h.selectBatch[f].length&&!h.unselectBatch[f].length){var b=new Array(h.count);b[f]=h.markerUnselectedOptions[f],x.update.apply(x,b)}}else{var _=new Array(h.count);_[f]=h.markerOptions[f],x.update.apply(x,_)}}return h.selectBatch[f]=v,h.unselectBatch[f]=m,p&&i(r),a}},{\\\"../scatter/subtypes\\\":1135,\\\"./edit_style\\\":1165}],1171:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/fx/hovertemplate_attributes\\\"),i=t(\\\"../scattergeo/attributes\\\"),a=t(\\\"../scatter/attributes\\\"),o=t(\\\"../../plots/mapbox/layout_attributes\\\"),s=t(\\\"../../plots/attributes\\\"),l=t(\\\"../../components/colorscale/attributes\\\"),c=t(\\\"../../lib/extend\\\").extendFlat,u=t(\\\"../../plot_api/edit_types\\\").overrideAll,h=i.line,f=i.marker;e.exports=u({lon:i.lon,lat:i.lat,mode:c({},a.mode,{dflt:\\\"markers\\\"}),text:c({},a.text,{}),hovertext:c({},a.hovertext,{}),line:{color:h.color,width:h.width},connectgaps:a.connectgaps,marker:c({symbol:{valType:\\\"string\\\",dflt:\\\"circle\\\",arrayOk:!0},opacity:f.opacity,size:f.size,sizeref:f.sizeref,sizemin:f.sizemin,sizemode:f.sizemode},l(\\\"marker\\\")),fill:i.fill,fillcolor:a.fillcolor,textfont:o.layers.symbol.textfont,textposition:o.layers.symbol.textposition,below:{valType:\\\"string\\\"},selected:{marker:a.selected.marker},unselected:{marker:a.unselected.marker},hoverinfo:c({},s.hoverinfo,{flags:[\\\"lon\\\",\\\"lat\\\",\\\"text\\\",\\\"name\\\"]}),hovertemplate:n()},\\\"calc\\\",\\\"nested\\\")},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../../plot_api/edit_types\\\":750,\\\"../../plots/attributes\\\":764,\\\"../../plots/mapbox/layout_attributes\\\":824,\\\"../scatter/attributes\\\":1112,\\\"../scattergeo/attributes\\\":1151}],1172:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../constants/numerical\\\").BADNUM,o=t(\\\"../../lib/geojson_utils\\\"),s=t(\\\"../../components/colorscale\\\"),l=t(\\\"../../components/drawing\\\"),c=t(\\\"../scatter/make_bubble_size_func\\\"),u=t(\\\"../scatter/subtypes\\\"),h=t(\\\"../../plots/mapbox/convert_text_opts\\\");function f(){return{geojson:o.makeBlank(),layout:{visibility:\\\"none\\\"},paint:{}}}function p(t){return i.isArrayOrTypedArray(t)?function(t){return t}:t?function(){return t}:d}function d(){return\\\"\\\"}function g(t){return t[0]===a}e.exports=function(t){var e,r=t[0].trace,a=!0===r.visible&&0!==r._length,v=\\\"none\\\"!==r.fill,m=u.hasLines(r),y=u.hasMarkers(r),x=u.hasText(r),b=y&&\\\"circle\\\"===r.marker.symbol,_=y&&\\\"circle\\\"!==r.marker.symbol,w=f(),k=f(),T=f(),A=f(),M={fill:w,line:k,circle:T,symbol:A};if(!a)return M;if((v||m)&&(e=o.calcTraceToLineCoords(t)),v&&(w.geojson=o.makePolygon(e),w.layout.visibility=\\\"visible\\\",i.extendFlat(w.paint,{\\\"fill-color\\\":r.fillcolor})),m&&(k.geojson=o.makeLine(e),k.layout.visibility=\\\"visible\\\",i.extendFlat(k.paint,{\\\"line-width\\\":r.line.width,\\\"line-color\\\":r.line.color,\\\"line-opacity\\\":r.opacity})),b){var S=function(t){var e,r,a,o,u=t[0].trace,h=u.marker,f=u.selectedpoints,p=i.isArrayOrTypedArray(h.color),d=i.isArrayOrTypedArray(h.size),v=i.isArrayOrTypedArray(h.opacity);function m(t){return u.opacity*t}p&&(r=s.hasColorscale(u,\\\"marker\\\")?s.makeColorScaleFuncFromTrace(h):i.identity);d&&(a=c(u));v&&(o=function(t){var e=n(t)?+i.constrain(t,0,1):0;return m(e)});var y,x=[];for(e=0;e<t.length;e++){var b=t[e],_=b.lonlat;if(!g(_)){var w={};r&&(w.mcc=b.mcc=r(b.mc)),a&&(w.mrc=b.mrc=a(b.ms)),o&&(w.mo=o(b.mo)),f&&(w.selected=b.selected||0),x.push({type:\\\"Feature\\\",geometry:{type:\\\"Point\\\",coordinates:_},properties:w})}}if(f)for(y=l.makeSelectedPointStyleFns(u),e=0;e<x.length;e++){var k=x[e].properties;y.selectedOpacityFn&&(k.mo=m(y.selectedOpacityFn(k))),y.selectedColorFn&&(k.mcc=y.selectedColorFn(k)),y.selectedSizeFn&&(k.mrc=y.selectedSizeFn(k))}return{geojson:{type:\\\"FeatureCollection\\\",features:x},mcc:p||y&&y.selectedColorFn?{type:\\\"identity\\\",property:\\\"mcc\\\"}:h.color,mrc:d||y&&y.selectedSizeFn?{type:\\\"identity\\\",property:\\\"mrc\\\"}:(T=h.size,T/2),mo:v||y&&y.selectedOpacityFn?{type:\\\"identity\\\",property:\\\"mo\\\"}:m(h.opacity)};var T}(t);T.geojson=S.geojson,T.layout.visibility=\\\"visible\\\",i.extendFlat(T.paint,{\\\"circle-color\\\":S.mcc,\\\"circle-radius\\\":S.mrc,\\\"circle-opacity\\\":S.mo})}if((_||x)&&(A.geojson=function(t){for(var e=t[0].trace,r=(e.marker||{}).symbol,n=e.text,i=\\\"circle\\\"!==r?p(r):d,a=u.hasText(e)?p(n):d,o=[],s=0;s<t.length;s++){var l=t[s];g(l.lonlat)||o.push({type:\\\"Feature\\\",geometry:{type:\\\"Point\\\",coordinates:l.lonlat},properties:{symbol:i(l.mx),text:a(l.tx)}})}return{type:\\\"FeatureCollection\\\",features:o}}(t),i.extendFlat(A.layout,{visibility:\\\"visible\\\",\\\"icon-image\\\":\\\"{symbol}-15\\\",\\\"text-field\\\":\\\"{text}\\\"}),_&&(i.extendFlat(A.layout,{\\\"icon-size\\\":r.marker.size/10}),i.extendFlat(A.paint,{\\\"icon-opacity\\\":r.opacity*r.marker.opacity,\\\"icon-color\\\":r.marker.color})),x)){var E=(r.marker||{}).size,C=h(r.textposition,E);i.extendFlat(A.layout,{\\\"text-size\\\":r.textfont.size,\\\"text-anchor\\\":C.anchor,\\\"text-offset\\\":C.offset}),i.extendFlat(A.paint,{\\\"text-color\\\":r.textfont.color,\\\"text-opacity\\\":r.opacity})}return M}},{\\\"../../components/colorscale\\\":605,\\\"../../components/drawing\\\":614,\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"../../lib/geojson_utils\\\":714,\\\"../../plots/mapbox/convert_text_opts\\\":821,\\\"../scatter/make_bubble_size_func\\\":1128,\\\"../scatter/subtypes\\\":1135,\\\"fast-isnumeric\\\":225}],1173:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../scatter/subtypes\\\"),a=t(\\\"../scatter/marker_defaults\\\"),o=t(\\\"../scatter/line_defaults\\\"),s=t(\\\"../scatter/text_defaults\\\"),l=t(\\\"../scatter/fillcolor_defaults\\\"),c=t(\\\"./attributes\\\");e.exports=function(t,e,r,u){function h(r,i){return n.coerce(t,e,c,r,i)}if(function(t,e,r){var n=r(\\\"lon\\\")||[],i=r(\\\"lat\\\")||[],a=Math.min(n.length,i.length);return e._length=a,a}(0,e,h)){if(h(\\\"text\\\"),h(\\\"hovertext\\\"),h(\\\"hovertemplate\\\"),h(\\\"mode\\\"),h(\\\"below\\\"),i.hasLines(e)&&(o(t,e,r,u,h,{noDash:!0}),h(\\\"connectgaps\\\")),i.hasMarkers(e)){a(t,e,r,u,h,{noLine:!0});var f=e.marker;\\\"circle\\\"!==f.symbol&&(n.isArrayOrTypedArray(f.size)&&(f.size=f.size[0]),n.isArrayOrTypedArray(f.color)&&(f.color=f.color[0]))}i.hasText(e)&&s(t,e,u,h,{noSelect:!0}),h(\\\"fill\\\"),\\\"none\\\"!==e.fill&&l(t,e,r,h),n.coerceSelectionMarkerOpacity(e,h)}else e.visible=!1}},{\\\"../../lib\\\":719,\\\"../scatter/fillcolor_defaults\\\":1120,\\\"../scatter/line_defaults\\\":1124,\\\"../scatter/marker_defaults\\\":1130,\\\"../scatter/subtypes\\\":1135,\\\"../scatter/text_defaults\\\":1136,\\\"./attributes\\\":1171}],1174:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){return t.lon=e.lon,t.lat=e.lat,t}},{}],1175:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/fx\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../scatter/get_trace_color\\\"),o=i.fillText,s=t(\\\"../../constants/numerical\\\").BADNUM;e.exports=function(t,e,r){var l=t.cd,c=l[0].trace,u=t.xa,h=t.ya,f=t.subplot,p=360*(e>=0?Math.floor((e+180)/360):Math.ceil((e-180)/360)),d=e-p;if(n.getClosest(l,function(t){var e=t.lonlat;if(e[0]===s)return 1/0;var n=i.modHalf(e[0],360),a=e[1],o=f.project([n,a]),l=o.x-u.c2p([d,a]),c=o.y-h.c2p([n,r]),p=Math.max(3,t.mrc||0);return Math.max(Math.sqrt(l*l+c*c)-p,1-3/p)},t),!1!==t.index){var g=l[t.index],v=g.lonlat,m=[i.modHalf(v[0],360)+p,v[1]],y=u.c2p(m),x=h.c2p(m),b=g.mrc||1;return t.x0=y-b,t.x1=y+b,t.y0=x-b,t.y1=x+b,t.color=a(c,g),t.extraText=function(t,e,r){if(t.hovertemplate)return;var n=(e.hi||t.hoverinfo).split(\\\"+\\\"),i=-1!==n.indexOf(\\\"all\\\"),a=-1!==n.indexOf(\\\"lon\\\"),s=-1!==n.indexOf(\\\"lat\\\"),l=e.lonlat,c=[];function u(t){return t+\\\"\\\\xb0\\\"}i||a&&s?c.push(\\\"(\\\"+u(l[0])+\\\", \\\"+u(l[1])+\\\")\\\"):a?c.push(r.lon+u(l[0])):s&&c.push(r.lat+u(l[1]));(i||-1!==n.indexOf(\\\"text\\\"))&&o(e,t,c);return c.join(\\\"<br>\\\")}(c,g,l[0].t.labels),t.hovertemplate=c.hovertemplate,[t]}}},{\\\"../../components/fx\\\":632,\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"../scatter/get_trace_color\\\":1121}],1176:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),colorbar:t(\\\"../scatter/marker_colorbar\\\"),calc:t(\\\"../scattergeo/calc\\\"),plot:t(\\\"./plot\\\"),hoverPoints:t(\\\"./hover\\\"),eventData:t(\\\"./event_data\\\"),selectPoints:t(\\\"./select\\\"),styleOnSelect:function(t,e){e&&e[0].trace._glTrace.update(e)},moduleType:\\\"trace\\\",name:\\\"scattermapbox\\\",basePlotModule:t(\\\"../../plots/mapbox\\\"),categories:[\\\"mapbox\\\",\\\"gl\\\",\\\"symbols\\\",\\\"showLegend\\\",\\\"scatterlike\\\"],meta:{}}},{\\\"../../plots/mapbox\\\":822,\\\"../scatter/marker_colorbar\\\":1129,\\\"../scattergeo/calc\\\":1152,\\\"./attributes\\\":1171,\\\"./defaults\\\":1173,\\\"./event_data\\\":1174,\\\"./hover\\\":1175,\\\"./plot\\\":1177,\\\"./select\\\":1178}],1177:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./convert\\\"),i=t(\\\"../../plots/mapbox/constants\\\").traceLayerPrefix,a=[\\\"fill\\\",\\\"line\\\",\\\"circle\\\",\\\"symbol\\\"];function o(t,e){this.subplot=t,this.uid=e,this.sourceIds={fill:\\\"source-\\\"+e+\\\"-fill\\\",line:\\\"source-\\\"+e+\\\"-line\\\",circle:\\\"source-\\\"+e+\\\"-circle\\\",symbol:\\\"source-\\\"+e+\\\"-symbol\\\"},this.layerIds={fill:i+e+\\\"-fill\\\",line:i+e+\\\"-line\\\",circle:i+e+\\\"-circle\\\",symbol:i+e+\\\"-symbol\\\"},this.below=null}var s=o.prototype;s.addSource=function(t,e){this.subplot.map.addSource(this.sourceIds[t],{type:\\\"geojson\\\",data:e.geojson})},s.setSourceData=function(t,e){this.subplot.map.getSource(this.sourceIds[t]).setData(e.geojson)},s.addLayer=function(t,e,r){this.subplot.addLayer({type:t,id:this.layerIds[t],source:this.sourceIds[t],layout:e.layout,paint:e.paint},r)},s.update=function(t){var e,r,i,o=this.subplot,s=o.map,l=n(t),c=o.belowLookup[\\\"trace-\\\"+this.uid];if(c!==this.below){for(e=a.length-1;e>=0;e--)r=a[e],s.removeLayer(this.layerIds[r]);for(e=0;e<a.length;e++)i=l[r=a[e]],this.addLayer(r,i,c);this.below=c}for(e=0;e<a.length;e++)i=l[r=a[e]],o.setOptions(this.layerIds[r],\\\"setLayoutProperty\\\",i.layout),\\\"visible\\\"===i.layout.visibility&&(this.setSourceData(r,i),o.setOptions(this.layerIds[r],\\\"setPaintProperty\\\",i.paint));t[0].trace._glTrace=this},s.dispose=function(){for(var t=this.subplot.map,e=a.length-1;e>=0;e--){var r=a[e];t.removeLayer(this.layerIds[r]),t.removeSource(this.sourceIds[r])}},e.exports=function(t,e){for(var r=e[0].trace,i=new o(t,r.uid),s=n(e),l=i.below=t.belowLookup[\\\"trace-\\\"+r.uid],c=0;c<a.length;c++){var u=a[c],h=s[u];i.addSource(u,h),i.addLayer(u,h,l)}return e[0].trace._glTrace=i,i}},{\\\"../../plots/mapbox/constants\\\":820,\\\"./convert\\\":1172}],1178:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../scatter/subtypes\\\"),a=t(\\\"../../constants/numerical\\\").BADNUM;e.exports=function(t,e){var r,o=t.cd,s=t.xaxis,l=t.yaxis,c=[],u=o[0].trace;if(!i.hasMarkers(u))return[];if(!1===e)for(r=0;r<o.length;r++)o[r].selected=0;else for(r=0;r<o.length;r++){var h=o[r],f=h.lonlat;if(f[0]!==a){var p=[n.modHalf(f[0],360),f[1]],d=[s.c2p(p),l.c2p(p)];e.contains(d,null,r,t)?(c.push({pointNumber:r,lon:f[0],lat:f[1]}),h.selected=1):h.selected=0}}return c}},{\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"../scatter/subtypes\\\":1135}],1179:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/fx/hovertemplate_attributes\\\"),i=t(\\\"../../lib/extend\\\").extendFlat,a=t(\\\"../scatter/attributes\\\"),o=t(\\\"../../plots/attributes\\\"),s=a.line;e.exports={mode:a.mode,r:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},theta:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},r0:{valType:\\\"any\\\",dflt:0,editType:\\\"calc+clearAxisTypes\\\"},dr:{valType:\\\"number\\\",dflt:1,editType:\\\"calc\\\"},theta0:{valType:\\\"any\\\",dflt:0,editType:\\\"calc+clearAxisTypes\\\"},dtheta:{valType:\\\"number\\\",editType:\\\"calc\\\"},thetaunit:{valType:\\\"enumerated\\\",values:[\\\"radians\\\",\\\"degrees\\\",\\\"gradians\\\"],dflt:\\\"degrees\\\",editType:\\\"calc+clearAxisTypes\\\"},text:a.text,hovertext:a.hovertext,line:{color:s.color,width:s.width,dash:s.dash,shape:i({},s.shape,{values:[\\\"linear\\\",\\\"spline\\\"]}),smoothing:s.smoothing,editType:\\\"calc\\\"},connectgaps:a.connectgaps,marker:a.marker,cliponaxis:i({},a.cliponaxis,{dflt:!1}),textposition:a.textposition,textfont:a.textfont,fill:i({},a.fill,{values:[\\\"none\\\",\\\"toself\\\",\\\"tonext\\\"],dflt:\\\"none\\\"}),fillcolor:a.fillcolor,hoverinfo:i({},o.hoverinfo,{flags:[\\\"r\\\",\\\"theta\\\",\\\"text\\\",\\\"name\\\"]}),hoveron:a.hoveron,hovertemplate:n(),selected:a.selected,unselected:a.unselected}},{\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../../plots/attributes\\\":764,\\\"../scatter/attributes\\\":1112}],1180:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../../constants/numerical\\\").BADNUM,a=t(\\\"../../plots/cartesian/axes\\\"),o=t(\\\"../scatter/colorscale_calc\\\"),s=t(\\\"../scatter/arrays_to_calcdata\\\"),l=t(\\\"../scatter/calc_selection\\\"),c=t(\\\"../scatter/calc\\\").calcMarkerSize;e.exports=function(t,e){for(var r=t._fullLayout,u=e.subplot,h=r[u].radialaxis,f=r[u].angularaxis,p=h.makeCalcdata(e,\\\"r\\\"),d=f.makeCalcdata(e,\\\"theta\\\"),g=e._length,v=new Array(g),m=0;m<g;m++){var y=p[m],x=d[m],b=v[m]={};n(y)&&n(x)?(b.r=y,b.theta=x):b.r=i}var _=c(e,g);return e._extremes.x=a.findExtremes(h,p,{ppad:_}),o(t,e),s(v,e),l(v,e),v}},{\\\"../../constants/numerical\\\":695,\\\"../../plots/cartesian/axes\\\":767,\\\"../scatter/arrays_to_calcdata\\\":1111,\\\"../scatter/calc\\\":1113,\\\"../scatter/calc_selection\\\":1114,\\\"../scatter/colorscale_calc\\\":1115,\\\"fast-isnumeric\\\":225}],1181:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../scatter/subtypes\\\"),a=t(\\\"../scatter/marker_defaults\\\"),o=t(\\\"../scatter/line_defaults\\\"),s=t(\\\"../scatter/line_shape_defaults\\\"),l=t(\\\"../scatter/text_defaults\\\"),c=t(\\\"../scatter/fillcolor_defaults\\\"),u=t(\\\"../scatter/constants\\\").PTS_LINESONLY,h=t(\\\"./attributes\\\");function f(t,e,r,n){var i,a=n(\\\"r\\\"),o=n(\\\"theta\\\");if(a)o?i=Math.min(a.length,o.length):(i=a.length,n(\\\"theta0\\\"),n(\\\"dtheta\\\"));else{if(!o)return 0;i=e.theta.length,n(\\\"r0\\\"),n(\\\"dr\\\")}return e._length=i,i}e.exports={handleRThetaDefaults:f,supplyDefaults:function(t,e,r,p){function d(r,i){return n.coerce(t,e,h,r,i)}var g=f(0,e,0,d);if(g){d(\\\"thetaunit\\\"),d(\\\"mode\\\",g<u?\\\"lines+markers\\\":\\\"lines\\\"),d(\\\"text\\\"),d(\\\"hovertext\\\"),\\\"fills\\\"!==e.hoveron&&d(\\\"hovertemplate\\\"),i.hasLines(e)&&(o(t,e,r,p,d),s(t,e,d),d(\\\"connectgaps\\\")),i.hasMarkers(e)&&a(t,e,r,p,d,{gradient:!0}),i.hasText(e)&&l(t,e,p,d);var v=[];(i.hasMarkers(e)||i.hasText(e))&&(d(\\\"cliponaxis\\\"),d(\\\"marker.maxdisplayed\\\"),v.push(\\\"points\\\")),d(\\\"fill\\\"),\\\"none\\\"!==e.fill&&(c(t,e,r,d),i.hasLines(e)||s(t,e,d)),\\\"tonext\\\"!==e.fill&&\\\"toself\\\"!==e.fill||v.push(\\\"fills\\\"),d(\\\"hoveron\\\",v.join(\\\"+\\\")||\\\"points\\\"),n.coerceSelectionMarkerOpacity(e,d)}else e.visible=!1}}},{\\\"../../lib\\\":719,\\\"../scatter/constants\\\":1116,\\\"../scatter/fillcolor_defaults\\\":1120,\\\"../scatter/line_defaults\\\":1124,\\\"../scatter/line_shape_defaults\\\":1126,\\\"../scatter/marker_defaults\\\":1130,\\\"../scatter/subtypes\\\":1135,\\\"../scatter/text_defaults\\\":1136,\\\"./attributes\\\":1179}],1182:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../scatter/hover\\\"),i=t(\\\"../../plots/cartesian/axes\\\"),a=t(\\\"../../lib\\\");function o(t,e,r,n){var o=r.radialAxis,s=r.angularAxis;o._hovertitle=\\\"r\\\",s._hovertitle=\\\"\\\\u03b8\\\";var l=o.c2l(t.r);n.rLabel=i.tickText(o,l,\\\"hover\\\").text;var c=\\\"degrees\\\"===s.thetaunit?a.rad2deg(t.theta):t.theta;n.thetaLabel=i.tickText(s,c,\\\"hover\\\").text;var u=t.hi||e.hoverinfo,h=[];function f(t,e){h.push(t._hovertitle+\\\": \\\"+e)}if(!e.hovertemplate){var p=u.split(\\\"+\\\");-1!==p.indexOf(\\\"all\\\")&&(p=[\\\"r\\\",\\\"theta\\\",\\\"text\\\"]),-1!==p.indexOf(\\\"r\\\")&&f(o,n.rLabel),-1!==p.indexOf(\\\"theta\\\")&&f(s,n.thetaLabel),-1!==p.indexOf(\\\"text\\\")&&n.text&&(h.push(n.text),delete n.text),n.extraText=h.join(\\\"<br>\\\")}}e.exports={hoverPoints:function(t,e,r,i){var a=n(t,e,r,i);if(a&&!1!==a[0].index){var s=a[0];if(void 0===s.index)return a;var l=t.subplot,c=s.cd[s.index],u=s.trace;if(l.isPtInside(c))return s.xLabelVal=void 0,s.yLabelVal=void 0,o(c,u,l,s),s.hovertemplate=u.hovertemplate,a}},makeHoverPointText:o}},{\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767,\\\"../scatter/hover\\\":1122}],1183:[function(t,e,r){\\\"use strict\\\";e.exports={moduleType:\\\"trace\\\",name:\\\"scatterpolar\\\",basePlotModule:t(\\\"../../plots/polar\\\"),categories:[\\\"polar\\\",\\\"symbols\\\",\\\"showLegend\\\",\\\"scatter-like\\\"],attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\").supplyDefaults,colorbar:t(\\\"../scatter/marker_colorbar\\\"),calc:t(\\\"./calc\\\"),plot:t(\\\"./plot\\\"),style:t(\\\"../scatter/style\\\").style,styleOnSelect:t(\\\"../scatter/style\\\").styleOnSelect,hoverPoints:t(\\\"./hover\\\").hoverPoints,selectPoints:t(\\\"../scatter/select\\\"),meta:{}}},{\\\"../../plots/polar\\\":831,\\\"../scatter/marker_colorbar\\\":1129,\\\"../scatter/select\\\":1132,\\\"../scatter/style\\\":1134,\\\"./attributes\\\":1179,\\\"./calc\\\":1180,\\\"./defaults\\\":1181,\\\"./hover\\\":1182,\\\"./plot\\\":1184}],1184:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../scatter/plot\\\"),i=t(\\\"../../constants/numerical\\\").BADNUM;e.exports=function(t,e,r){for(var a=e.layers.frontplot.select(\\\"g.scatterlayer\\\"),o={xaxis:e.xaxis,yaxis:e.yaxis,plot:e.framework,layerClipId:e._hasClipOnAxisFalse?e.clipIds.forTraces:null},s=e.radialAxis,l=e.angularAxis,c=0;c<r.length;c++)for(var u=r[c],h=0;h<u.length;h++){var f=u[h],p=f.r;if(p===i)f.x=f.y=i;else{var d=s.c2g(p),g=l.c2g(f.theta);f.x=d*Math.cos(g),f.y=d*Math.sin(g)}}n(t,o,r,a)}},{\\\"../../constants/numerical\\\":695,\\\"../scatter/plot\\\":1131}],1185:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../scatterpolar/attributes\\\"),i=t(\\\"../scattergl/attributes\\\");e.exports={mode:n.mode,r:n.r,theta:n.theta,r0:n.r0,dr:n.dr,theta0:n.theta0,dtheta:n.dtheta,thetaunit:n.thetaunit,text:n.text,hovertext:n.hovertext,hovertemplate:n.hovertemplate,line:i.line,connectgaps:i.connectgaps,marker:i.marker,fill:i.fill,fillcolor:i.fillcolor,textposition:i.textposition,textfont:i.textfont,hoverinfo:n.hoverinfo,selected:n.selected,unselected:n.unselected}},{\\\"../scattergl/attributes\\\":1160,\\\"../scatterpolar/attributes\\\":1179}],1186:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../scatter/colorscale_calc\\\"),i=t(\\\"../scatter/calc\\\").calcMarkerSize,a=t(\\\"../scattergl/convert\\\"),o=t(\\\"../../plots/cartesian/axes\\\"),s=t(\\\"../scattergl/constants\\\").TOO_MANY_POINTS;e.exports=function(t,e){var r=t._fullLayout,l=e.subplot,c=r[l].radialaxis,u=r[l].angularaxis,h=c.makeCalcdata(e,\\\"r\\\"),f=u.makeCalcdata(e,\\\"theta\\\"),p=e._length,d={};p<h.length&&(h=h.slice(0,p)),p<f.length&&(f=f.slice(0,p)),d.r=h,d.theta=f,n(t,e);var g,v=d.opts=a.style(t,e);return p<s?g=i(e,p):v.marker&&(g=2*(v.marker.sizeAvg||Math.max(v.marker.size,3))),e._extremes.x=o.findExtremes(c,h,{ppad:g}),[{x:!1,y:!1,t:d,trace:e}]}},{\\\"../../plots/cartesian/axes\\\":767,\\\"../scatter/calc\\\":1113,\\\"../scatter/colorscale_calc\\\":1115,\\\"../scattergl/constants\\\":1162,\\\"../scattergl/convert\\\":1163}],1187:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../scatter/subtypes\\\"),a=t(\\\"../scatterpolar/defaults\\\").handleRThetaDefaults,o=t(\\\"../scatter/marker_defaults\\\"),s=t(\\\"../scatter/line_defaults\\\"),l=t(\\\"../scatter/text_defaults\\\"),c=t(\\\"../scatter/fillcolor_defaults\\\"),u=t(\\\"../scatter/constants\\\").PTS_LINESONLY,h=t(\\\"./attributes\\\");e.exports=function(t,e,r,f){function p(r,i){return n.coerce(t,e,h,r,i)}var d=a(t,e,f,p);d?(p(\\\"thetaunit\\\"),p(\\\"mode\\\",d<u?\\\"lines+markers\\\":\\\"lines\\\"),p(\\\"text\\\"),p(\\\"hovertext\\\"),\\\"fills\\\"!==e.hoveron&&p(\\\"hovertemplate\\\"),i.hasLines(e)&&(s(t,e,r,f,p),p(\\\"connectgaps\\\")),i.hasMarkers(e)&&o(t,e,r,f,p),i.hasText(e)&&l(t,e,f,p),p(\\\"fill\\\"),\\\"none\\\"!==e.fill&&c(t,e,r,p),n.coerceSelectionMarkerOpacity(e,p)):e.visible=!1}},{\\\"../../lib\\\":719,\\\"../scatter/constants\\\":1116,\\\"../scatter/fillcolor_defaults\\\":1120,\\\"../scatter/line_defaults\\\":1124,\\\"../scatter/marker_defaults\\\":1130,\\\"../scatter/subtypes\\\":1135,\\\"../scatter/text_defaults\\\":1136,\\\"../scatterpolar/defaults\\\":1181,\\\"./attributes\\\":1185}],1188:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../scattergl/hover\\\"),i=t(\\\"../scatterpolar/hover\\\").makeHoverPointText;e.exports={hoverPoints:function(t,e,r,a){var o=t.cd[0].t,s=o.r,l=o.theta,c=n.hoverPoints(t,e,r,a);if(c&&!1!==c[0].index){var u=c[0];if(void 0===u.index)return c;var h=t.subplot,f=u.cd[u.index],p=u.trace;if(f.r=s[u.index],f.theta=l[u.index],h.isPtInside(f))return u.xLabelVal=void 0,u.yLabelVal=void 0,i(f,p,h,u),c}}}},{\\\"../scattergl/hover\\\":1166,\\\"../scatterpolar/hover\\\":1182}],1189:[function(t,e,r){\\\"use strict\\\";e.exports={moduleType:\\\"trace\\\",name:\\\"scatterpolargl\\\",basePlotModule:t(\\\"../../plots/polar\\\"),categories:[\\\"gl\\\",\\\"regl\\\",\\\"polar\\\",\\\"symbols\\\",\\\"showLegend\\\",\\\"scatter-like\\\"],attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),colorbar:t(\\\"../scatter/marker_colorbar\\\"),calc:t(\\\"./calc\\\"),plot:t(\\\"./plot\\\"),hoverPoints:t(\\\"./hover\\\").hoverPoints,selectPoints:t(\\\"../scattergl/select\\\"),meta:{}}},{\\\"../../plots/polar\\\":831,\\\"../scatter/marker_colorbar\\\":1129,\\\"../scattergl/select\\\":1170,\\\"./attributes\\\":1185,\\\"./calc\\\":1186,\\\"./defaults\\\":1187,\\\"./hover\\\":1188,\\\"./plot\\\":1190}],1190:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"point-cluster\\\"),i=t(\\\"fast-isnumeric\\\"),a=t(\\\"../scattergl/plot\\\"),o=t(\\\"../scattergl/scene_update\\\"),s=t(\\\"../scattergl/convert\\\"),l=t(\\\"../../lib\\\"),c=t(\\\"../scattergl/constants\\\").TOO_MANY_POINTS;e.exports=function(t,e,r){if(r.length){var u=e.radialAxis,h=e.angularAxis,f=o(t,e);return r.forEach(function(r){if(r&&r[0]&&r[0].trace){var a,o=r[0],p=o.trace,d=o.t,g=p._length,v=d.r,m=d.theta,y=d.opts,x=v.slice(),b=m.slice();for(a=0;a<v.length;a++)e.isPtInside({r:v[a],theta:m[a]})||(x[a]=NaN,b[a]=NaN);var _=new Array(2*g),w=Array(g),k=Array(g);for(a=0;a<g;a++){var T,A,M=x[a];if(i(M)){var S=u.c2g(M),E=h.c2g(b[a],p.thetaunit);T=S*Math.cos(E),A=S*Math.sin(E)}else T=A=NaN;w[a]=_[2*a]=T,k[a]=_[2*a+1]=A}d.tree=n(_),y.marker&&g>=c&&(y.marker.cluster=d.tree),y.marker&&(y.markerSel.positions=y.markerUnsel.positions=y.marker.positions=_),y.line&&_.length>1&&l.extendFlat(y.line,s.linePositions(t,p,_)),y.text&&(l.extendFlat(y.text,{positions:_},s.textPosition(t,p,y.text,y.marker)),l.extendFlat(y.textSel,{positions:_},s.textPosition(t,p,y.text,y.markerSel)),l.extendFlat(y.textUnsel,{positions:_},s.textPosition(t,p,y.text,y.markerUnsel))),y.fill&&!f.fill2d&&(f.fill2d=!0),y.marker&&!f.scatter2d&&(f.scatter2d=!0),y.line&&!f.line2d&&(f.line2d=!0),y.text&&!f.glText&&(f.glText=!0),f.lineOptions.push(y.line),f.fillOptions.push(y.fill),f.markerOptions.push(y.marker),f.markerSelectedOptions.push(y.markerSel),f.markerUnselectedOptions.push(y.markerUnsel),f.textOptions.push(y.text),f.textSelectedOptions.push(y.textSel),f.textUnselectedOptions.push(y.textUnsel),f.selectBatch.push([]),f.unselectBatch.push([]),d.x=w,d.y=k,d.rawx=w,d.rawy=k,d.r=v,d.theta=m,d.positions=_,d._scene=f,d.index=f.count,f.count++}}),a(t,e,r)}}},{\\\"../../lib\\\":719,\\\"../scattergl/constants\\\":1162,\\\"../scattergl/convert\\\":1163,\\\"../scattergl/plot\\\":1168,\\\"../scattergl/scene_update\\\":1169,\\\"fast-isnumeric\\\":225,\\\"point-cluster\\\":469}],1191:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/fx/hovertemplate_attributes\\\"),i=t(\\\"../scatter/attributes\\\"),a=t(\\\"../../plots/attributes\\\"),o=t(\\\"../../components/colorscale/attributes\\\"),s=t(\\\"../../components/drawing/attributes\\\").dash,l=t(\\\"../../lib/extend\\\").extendFlat,c=i.marker,u=i.line,h=c.line;e.exports={a:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},b:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},c:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},sum:{valType:\\\"number\\\",dflt:0,min:0,editType:\\\"calc\\\"},mode:l({},i.mode,{dflt:\\\"markers\\\"}),text:l({},i.text,{}),hovertext:l({},i.hovertext,{}),line:{color:u.color,width:u.width,dash:s,shape:l({},u.shape,{values:[\\\"linear\\\",\\\"spline\\\"]}),smoothing:u.smoothing,editType:\\\"calc\\\"},connectgaps:i.connectgaps,cliponaxis:i.cliponaxis,fill:l({},i.fill,{values:[\\\"none\\\",\\\"toself\\\",\\\"tonext\\\"],dflt:\\\"none\\\"}),fillcolor:i.fillcolor,marker:l({symbol:c.symbol,opacity:c.opacity,maxdisplayed:c.maxdisplayed,size:c.size,sizeref:c.sizeref,sizemin:c.sizemin,sizemode:c.sizemode,line:l({width:h.width,editType:\\\"calc\\\"},o(\\\"marker.line\\\")),gradient:c.gradient,editType:\\\"calc\\\"},o(\\\"marker\\\")),textfont:i.textfont,textposition:i.textposition,selected:i.selected,unselected:i.unselected,hoverinfo:l({},a.hoverinfo,{flags:[\\\"a\\\",\\\"b\\\",\\\"c\\\",\\\"text\\\",\\\"name\\\"]}),hoveron:i.hoveron,hovertemplate:n()}},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../components/drawing/attributes\\\":613,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../../plots/attributes\\\":764,\\\"../scatter/attributes\\\":1112}],1192:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"fast-isnumeric\\\"),i=t(\\\"../scatter/colorscale_calc\\\"),a=t(\\\"../scatter/arrays_to_calcdata\\\"),o=t(\\\"../scatter/calc_selection\\\"),s=t(\\\"../scatter/calc\\\").calcMarkerSize,l=[\\\"a\\\",\\\"b\\\",\\\"c\\\"],c={a:[\\\"b\\\",\\\"c\\\"],b:[\\\"a\\\",\\\"c\\\"],c:[\\\"a\\\",\\\"b\\\"]};e.exports=function(t,e){var r,u,h,f,p,d,g=t._fullLayout[e.subplot].sum,v=e.sum||g,m={a:e.a,b:e.b,c:e.c};for(r=0;r<l.length;r++)if(!m[h=l[r]]){for(p=m[c[h][0]],d=m[c[h][1]],f=new Array(p.length),u=0;u<p.length;u++)f[u]=v-p[u]-d[u];m[h]=f}var y,x,b,_,w,k,T=e._length,A=new Array(T);for(r=0;r<T;r++)y=m.a[r],x=m.b[r],b=m.c[r],n(y)&&n(x)&&n(b)?(1!==(_=g/((y=+y)+(x=+x)+(b=+b)))&&(y*=_,x*=_,b*=_),k=y,w=b-x,A[r]={x:w,y:k,a:y,b:x,c:b}):A[r]={x:!1,y:!1};return s(e,T),i(t,e),a(A,e),o(A,e),A}},{\\\"../scatter/arrays_to_calcdata\\\":1111,\\\"../scatter/calc\\\":1113,\\\"../scatter/calc_selection\\\":1114,\\\"../scatter/colorscale_calc\\\":1115,\\\"fast-isnumeric\\\":225}],1193:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../scatter/constants\\\"),a=t(\\\"../scatter/subtypes\\\"),o=t(\\\"../scatter/marker_defaults\\\"),s=t(\\\"../scatter/line_defaults\\\"),l=t(\\\"../scatter/line_shape_defaults\\\"),c=t(\\\"../scatter/text_defaults\\\"),u=t(\\\"../scatter/fillcolor_defaults\\\"),h=t(\\\"./attributes\\\");e.exports=function(t,e,r,f){function p(r,i){return n.coerce(t,e,h,r,i)}var d,g=p(\\\"a\\\"),v=p(\\\"b\\\"),m=p(\\\"c\\\");if(g?(d=g.length,v?(d=Math.min(d,v.length),m&&(d=Math.min(d,m.length))):d=m?Math.min(d,m.length):0):v&&m&&(d=Math.min(v.length,m.length)),d){e._length=d,p(\\\"sum\\\"),p(\\\"text\\\"),p(\\\"hovertext\\\"),\\\"fills\\\"!==e.hoveron&&p(\\\"hovertemplate\\\"),p(\\\"mode\\\",d<i.PTS_LINESONLY?\\\"lines+markers\\\":\\\"lines\\\"),a.hasLines(e)&&(s(t,e,r,f,p),l(t,e,p),p(\\\"connectgaps\\\")),a.hasMarkers(e)&&o(t,e,r,f,p,{gradient:!0}),a.hasText(e)&&c(t,e,f,p);var y=[];(a.hasMarkers(e)||a.hasText(e))&&(p(\\\"cliponaxis\\\"),p(\\\"marker.maxdisplayed\\\"),y.push(\\\"points\\\")),p(\\\"fill\\\"),\\\"none\\\"!==e.fill&&(u(t,e,r,p),a.hasLines(e)||l(t,e,p)),\\\"tonext\\\"!==e.fill&&\\\"toself\\\"!==e.fill||y.push(\\\"fills\\\"),p(\\\"hoveron\\\",y.join(\\\"+\\\")||\\\"points\\\"),n.coerceSelectionMarkerOpacity(e,p)}else e.visible=!1}},{\\\"../../lib\\\":719,\\\"../scatter/constants\\\":1116,\\\"../scatter/fillcolor_defaults\\\":1120,\\\"../scatter/line_defaults\\\":1124,\\\"../scatter/line_shape_defaults\\\":1126,\\\"../scatter/marker_defaults\\\":1130,\\\"../scatter/subtypes\\\":1135,\\\"../scatter/text_defaults\\\":1136,\\\"./attributes\\\":1191}],1194:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e,r,n,i){if(e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),n[i]){var a=n[i];t.a=a.a,t.b=a.b,t.c=a.c}else t.a=e.a,t.b=e.b,t.c=e.c;return t}},{}],1195:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../scatter/hover\\\"),i=t(\\\"../../plots/cartesian/axes\\\");e.exports=function(t,e,r,a){var o=n(t,e,r,a);if(o&&!1!==o[0].index){var s=o[0];if(void 0===s.index){var l=1-s.y0/t.ya._length,c=t.xa._length,u=c*l/2,h=c-u;return s.x0=Math.max(Math.min(s.x0,h),u),s.x1=Math.max(Math.min(s.x1,h),u),o}var f=s.cd[s.index];s.a=f.a,s.b=f.b,s.c=f.c,s.xLabelVal=void 0,s.yLabelVal=void 0;var p=s.subplot;s.aLabel=i.tickText(p.aaxis,f.a,\\\"hover\\\").text,s.bLabel=i.tickText(p.baxis,f.b,\\\"hover\\\").text,s.cLabel=i.tickText(p.caxis,f.c,\\\"hover\\\").text;var d=s.trace,g=f.hi||d.hoverinfo,v=[];if(!d.hovertemplate){var m=g.split(\\\"+\\\");-1!==m.indexOf(\\\"all\\\")&&(m=[\\\"a\\\",\\\"b\\\",\\\"c\\\"]),-1!==m.indexOf(\\\"a\\\")&&y(p.aaxis,s.aLabel),-1!==m.indexOf(\\\"b\\\")&&y(p.baxis,s.bLabel),-1!==m.indexOf(\\\"c\\\")&&y(p.caxis,s.cLabel)}return s.extraText=v.join(\\\"<br>\\\"),s.hovertemplate=d.hovertemplate,o}function y(t,e){v.push(t._hovertitle+\\\": \\\"+e)}}},{\\\"../../plots/cartesian/axes\\\":767,\\\"../scatter/hover\\\":1122}],1196:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),colorbar:t(\\\"../scatter/marker_colorbar\\\"),calc:t(\\\"./calc\\\"),plot:t(\\\"./plot\\\"),style:t(\\\"../scatter/style\\\").style,styleOnSelect:t(\\\"../scatter/style\\\").styleOnSelect,hoverPoints:t(\\\"./hover\\\"),selectPoints:t(\\\"../scatter/select\\\"),eventData:t(\\\"./event_data\\\"),moduleType:\\\"trace\\\",name:\\\"scatterternary\\\",basePlotModule:t(\\\"../../plots/ternary\\\"),categories:[\\\"ternary\\\",\\\"symbols\\\",\\\"showLegend\\\",\\\"scatter-like\\\"],meta:{}}},{\\\"../../plots/ternary\\\":843,\\\"../scatter/marker_colorbar\\\":1129,\\\"../scatter/select\\\":1132,\\\"../scatter/style\\\":1134,\\\"./attributes\\\":1191,\\\"./calc\\\":1192,\\\"./defaults\\\":1193,\\\"./event_data\\\":1194,\\\"./hover\\\":1195,\\\"./plot\\\":1197}],1197:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../scatter/plot\\\");e.exports=function(t,e,r){var i=e.plotContainer;i.select(\\\".scatterlayer\\\").selectAll(\\\"*\\\").remove();var a={xaxis:e.xaxis,yaxis:e.yaxis,plot:i,layerClipId:e._hasClipOnAxisFalse?e.clipIdRelative:null},o=e.layers.frontplot.select(\\\"g.scatterlayer\\\");n(t,a,r,o)}},{\\\"../scatter/plot\\\":1131}],1198:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../scatter/attributes\\\"),i=t(\\\"../../components/colorscale/attributes\\\"),a=t(\\\"../../components/fx/hovertemplate_attributes\\\"),o=t(\\\"../scattergl/attributes\\\"),s=t(\\\"../../plots/cartesian/constants\\\").idRegex,l=t(\\\"../../plot_api/plot_template\\\").templatedArray,c=t(\\\"../../lib/extend\\\").extendFlat,u=n.marker,h=u.line,f=c(i(\\\"marker.line\\\",{editTypeOverride:\\\"calc\\\"}),{width:c({},h.width,{editType:\\\"calc\\\"}),editType:\\\"calc\\\"}),p=c(i(\\\"marker\\\"),{symbol:u.symbol,size:c({},u.size,{editType:\\\"markerSize\\\"}),sizeref:u.sizeref,sizemin:u.sizemin,sizemode:u.sizemode,opacity:u.opacity,colorbar:u.colorbar,line:f,editType:\\\"calc\\\"});function d(t){return{valType:\\\"info_array\\\",freeLength:!0,editType:\\\"calc\\\",items:{valType:\\\"subplotid\\\",regex:s[t],editType:\\\"plot\\\"}}}p.color.editType=p.cmin.editType=p.cmax.editType=\\\"style\\\",e.exports={dimensions:l(\\\"dimension\\\",{visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},label:{valType:\\\"string\\\",editType:\\\"calc\\\"},values:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},axis:{type:{valType:\\\"enumerated\\\",values:[\\\"linear\\\",\\\"log\\\",\\\"date\\\",\\\"category\\\"],editType:\\\"calc+clearAxisTypes\\\"},matches:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},editType:\\\"calc+clearAxisTypes\\\"},editType:\\\"calc+clearAxisTypes\\\"}),text:c({},o.text,{}),hovertext:c({},o.hovertext,{}),hovertemplate:a(),marker:p,xaxes:d(\\\"x\\\"),yaxes:d(\\\"y\\\"),diagonal:{visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},editType:\\\"calc\\\"},showupperhalf:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},showlowerhalf:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},selected:{marker:o.selected.marker,editType:\\\"calc\\\"},unselected:{marker:o.unselected.marker,editType:\\\"calc\\\"},opacity:o.opacity}},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../../plot_api/plot_template\\\":757,\\\"../../plots/cartesian/constants\\\":773,\\\"../scatter/attributes\\\":1112,\\\"../scattergl/attributes\\\":1160}],1199:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"regl-line2d\\\"),i=t(\\\"../../registry\\\"),a=t(\\\"../../lib/prepare_regl\\\"),o=t(\\\"../../plots/get_data\\\").getModuleCalcData,s=t(\\\"../../plots/cartesian\\\"),l=t(\\\"../../plots/cartesian/axis_ids\\\").getFromId,c=t(\\\"../../plots/cartesian/axes\\\").shouldShowZeroLine,u=\\\"splom\\\";function h(t,e,r){for(var n=r.matrixOptions.data.length,i=e._visibleDims,a=r.viewOpts.ranges=new Array(n),o=0;o<i.length;o++){var s=i[o],c=a[o]=new Array(4),u=l(t,e._diag[s][0]);u&&(c[0]=u.r2l(u.range[0]),c[2]=u.r2l(u.range[1]));var h=l(t,e._diag[s][1]);h&&(c[1]=h.r2l(h.range[0]),c[3]=h.r2l(h.range[1]))}r.selectBatch.length||r.unselectBatch.length?r.matrix.update({ranges:a},{ranges:a}):r.matrix.update({ranges:a})}function f(t){var e=t._fullLayout,r=e._glcanvas.data()[0].regl,i=e._splomGrid;i||(i=e._splomGrid=n(r)),i.update(function(t){var e,r=t._fullLayout,n=r._size,i=[0,0,r.width,r.height],a={};function o(t,e,r,n,o,s){var l=e[t+\\\"color\\\"],c=e[t+\\\"width\\\"],u=String(l+c);u in a?a[u].data.push(NaN,NaN,r,n,o,s):a[u]={data:[r,n,o,s],join:\\\"rect\\\",thickness:c,color:l,viewport:i,range:i,overlay:!1}}for(e in r._splomSubplots){var s,l,u=r._plots[e],h=u.xaxis,f=u.yaxis,p=h._vals,d=f._vals,g=n.b+f.domain[0]*n.h,v=-f._m,m=-v*f.r2l(f.range[0],f.calendar);if(h.showgrid)for(e=0;e<p.length;e++)s=h._offset+h.l2p(p[e].x),o(\\\"grid\\\",h,s,g,s,g+f._length);if(f.showgrid)for(e=0;e<d.length;e++)l=g+m+v*d[e].x,o(\\\"grid\\\",f,h._offset,l,h._offset+h._length,l);c(t,h,f)&&(s=h._offset+h.l2p(0),o(\\\"zeroline\\\",h,s,g,s,g+f._length)),c(t,f,h)&&(l=g+m+0,o(\\\"zeroline\\\",f,h._offset,l,h._offset+h._length,l))}var y=[];for(e in a)y.push(a[e]);return y}(t))}e.exports={name:u,attr:s.attr,attrRegex:s.attrRegex,layoutAttributes:s.layoutAttributes,supplyLayoutDefaults:s.supplyLayoutDefaults,drawFramework:s.drawFramework,plot:function(t){var e=t._fullLayout,r=i.getModule(u),n=o(t.calcdata,r)[0];a(t,[\\\"ANGLE_instanced_arrays\\\",\\\"OES_element_index_uint\\\"])&&(e._hasOnlyLargeSploms&&f(t),r.plot(t,{},n))},drag:function(t){var e=t.calcdata,r=t._fullLayout;r._hasOnlyLargeSploms&&f(t);for(var n=0;n<e.length;n++){var i=e[n][0].trace,a=r._splomScenes[i.uid];\\\"splom\\\"===i.type&&a&&a.matrix&&h(t,i,a)}},updateGrid:f,clean:function(t,e,r,n){var i,a={};if(n._splomScenes){for(i=0;i<t.length;i++){var o=t[i];\\\"splom\\\"===o.type&&(a[o.uid]=1)}for(i=0;i<r.length;i++){var l=r[i];if(!a[l.uid]){var c=n._splomScenes[l.uid];c&&c.destroy&&c.destroy(),n._splomScenes[l.uid]=null,delete n._splomScenes[l.uid]}}}0===Object.keys(n._splomScenes||{}).length&&delete n._splomScenes,n._splomGrid&&!e._hasOnlyLargeSploms&&n._hasOnlyLargeSploms&&(n._splomGrid.destroy(),n._splomGrid=null,delete n._splomGrid),s.clean(t,e,r,n)},updateFx:s.updateFx,toSVG:s.toSVG}},{\\\"../../lib/prepare_regl\\\":732,\\\"../../plots/cartesian\\\":778,\\\"../../plots/cartesian/axes\\\":767,\\\"../../plots/cartesian/axis_ids\\\":770,\\\"../../plots/get_data\\\":802,\\\"../../registry\\\":847,\\\"regl-line2d\\\":491}],1200:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../plots/cartesian/axis_ids\\\"),a=t(\\\"../scatter/calc\\\").calcMarkerSize,o=t(\\\"../scatter/calc\\\").calcAxisExpansion,s=t(\\\"../scatter/colorscale_calc\\\"),l=t(\\\"../scattergl/convert\\\").markerSelection,c=t(\\\"../scattergl/convert\\\").markerStyle,u=t(\\\"./scene_update\\\"),h=t(\\\"../../constants/numerical\\\").BADNUM,f=t(\\\"../scattergl/constants\\\").TOO_MANY_POINTS;e.exports=function(t,e){var r,p,d,g,v,m,y=e.dimensions,x=e._length,b={},_=b.cdata=[],w=b.data=[],k=e._visibleDims=[];function T(t,r){for(var i=t.makeCalcdata({v:r.values,vcalendar:e.calendar},\\\"v\\\"),a=0;a<i.length;a++)i[a]=i[a]===h?NaN:i[a];_.push(i),w.push(\\\"log\\\"===t.type?n.simpleMap(i,t.c2l):i)}for(r=0;r<y.length;r++)if((d=y[r]).visible){if(g=i.getFromId(t,e._diag[r][0]),v=i.getFromId(t,e._diag[r][1]),g&&v&&g.type!==v.type){n.log(\\\"Skipping splom dimension \\\"+r+\\\" with conflicting axis types\\\");continue}g?(T(g,d),v&&\\\"category\\\"===v.type&&(v._categories=g._categories.slice())):T(v,d),k.push(r)}for(s(t,e),n.extendFlat(b,c(e)),m=_.length*x>f?2*(b.sizeAvg||Math.max(b.size,3)):a(e,x),p=0;p<k.length;p++)d=y[r=k[p]],g=i.getFromId(t,e._diag[r][0])||{},v=i.getFromId(t,e._diag[r][1])||{},o(t,e,g,v,_[p],_[p],m);var A=u(t,e);return A.matrix||(A.matrix=!0),A.matrixOptions=b,A.selectedOptions=l(e,e.selected),A.unselectedOptions=l(e,e.unselected),[{x:!1,y:!1,t:{},trace:e}]}},{\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"../../plots/cartesian/axis_ids\\\":770,\\\"../scatter/calc\\\":1113,\\\"../scatter/colorscale_calc\\\":1115,\\\"../scattergl/constants\\\":1162,\\\"../scattergl/convert\\\":1163,\\\"./scene_update\\\":1207}],1201:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../plots/array_container_defaults\\\"),a=t(\\\"./attributes\\\"),o=t(\\\"../scatter/subtypes\\\"),s=t(\\\"../scatter/marker_defaults\\\"),l=t(\\\"../parcoords/merge_length\\\"),c=/-open/;function u(t,e){function r(r,i){return n.coerce(t,e,a.dimensions,r,i)}r(\\\"label\\\");var i=r(\\\"values\\\");i&&i.length?r(\\\"visible\\\"):e.visible=!1,r(\\\"axis.type\\\"),r(\\\"axis.matches\\\")}e.exports=function(t,e,r,h){function f(r,i){return n.coerce(t,e,a,r,i)}var p=i(t,e,{name:\\\"dimensions\\\",handleItemDefaults:u}),d=f(\\\"diagonal.visible\\\"),g=f(\\\"showupperhalf\\\"),v=f(\\\"showlowerhalf\\\");if(l(e,p,\\\"values\\\")&&(d||g||v)){f(\\\"text\\\"),f(\\\"hovertext\\\"),f(\\\"hovertemplate\\\"),s(t,e,r,h,f);var m=c.test(e.marker.symbol),y=o.isBubble(e);f(\\\"marker.line.width\\\",m||y?1:0),function(t,e,r,n){var i,a,o=e.dimensions,s=o.length,l=e.showupperhalf,c=e.showlowerhalf,u=e.diagonal.visible,h=new Array(s),f=new Array(s);for(i=0;i<s;i++){var p=i?i+1:\\\"\\\";h[i]=\\\"x\\\"+p,f[i]=\\\"y\\\"+p}var d=n(\\\"xaxes\\\",h),g=n(\\\"yaxes\\\",f),v=e._diag=new Array(s);e._xaxes={},e._yaxes={};var m=[],y=[];function x(t,n,i,a){if(t){var o=t.charAt(0),s=r._splomAxes[o];if(e[\\\"_\\\"+o+\\\"axes\\\"][t]=1,a.push(t),!(t in s)){var l=s[t]={};i&&(l.label=i.label||\\\"\\\",i.visible&&i.axis&&(i.axis.type&&(l.type=i.axis.type),i.axis.matches&&(l.matches=n)))}}}var b=!u&&!c,_=!u&&!l;for(e._axesDim={},i=0;i<s;i++){var w=o[i],k=0===i,T=i===s-1,A=k&&b||T&&_?void 0:d[i],M=k&&_||T&&b?void 0:g[i];x(A,M,w,m),x(M,A,w,y),v[i]=[A,M],e._axesDim[A]=i,e._axesDim[M]=i}for(i=0;i<m.length;i++)for(a=0;a<y.length;a++){var S=m[i]+y[a];i>a&&l?r._splomSubplots[S]=1:i<a&&c?r._splomSubplots[S]=1:i!==a||!u&&c&&l||(r._splomSubplots[S]=1)}(!c||!u&&l&&c)&&(r._splomGridDflt.xside=\\\"bottom\\\",r._splomGridDflt.yside=\\\"left\\\")}(0,e,h,f),n.coerceSelectionMarkerOpacity(e,f)}else e.visible=!1}},{\\\"../../lib\\\":719,\\\"../../plots/array_container_defaults\\\":763,\\\"../parcoords/merge_length\\\":1083,\\\"../scatter/marker_defaults\\\":1130,\\\"../scatter/subtypes\\\":1135,\\\"./attributes\\\":1198}],1202:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../scatter/colorscale_calc\\\"),a=t(\\\"../scattergl/convert\\\").markerStyle;e.exports=function(t,e){var r=e.trace,o=t._fullLayout._splomScenes[r.uid];if(o){i(t,r),n.extendFlat(o.matrixOptions,a(r));var s=n.extendFlat({},o.matrixOptions,o.viewOpts);o.matrix.update(s,null)}}},{\\\"../../lib\\\":719,\\\"../scatter/colorscale_calc\\\":1115,\\\"../scattergl/convert\\\":1163}],1203:[function(t,e,r){\\\"use strict\\\";r.getDimIndex=function(t,e){for(var r=e._id,n={x:0,y:1}[r.charAt(0)],i=t._visibleDims,a=0;a<i.length;a++){var o=i[a];if(t._diag[o][n]===r)return a}return!1}},{}],1204:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./helpers\\\"),i=t(\\\"../scattergl/hover\\\").calcHover;e.exports={hoverPoints:function(t,e,r){var a=t.cd[0].trace,o=t.scene.matrixOptions.cdata,s=t.xa,l=t.ya,c=s.c2p(e),u=l.c2p(r),h=t.distance,f=n.getDimIndex(a,s),p=n.getDimIndex(a,l);if(!1===f||!1===p)return[t];for(var d,g,v=o[f],m=o[p],y=h,x=0;x<v.length;x++){var b=v[x],_=m[x],w=s.c2p(b)-c,k=l.c2p(_)-u,T=Math.sqrt(w*w+k*k);T<y&&(y=g=T,d=x)}return t.index=d,t.distance=y,t.dxy=g,void 0===d?[t]:(i(t,v,m,a),[t])}}},{\\\"../scattergl/hover\\\":1166,\\\"./helpers\\\":1203}],1205:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../components/grid\\\");e.exports={moduleType:\\\"trace\\\",name:\\\"splom\\\",basePlotModule:t(\\\"./base_plot\\\"),categories:[\\\"gl\\\",\\\"regl\\\",\\\"cartesian\\\",\\\"symbols\\\",\\\"showLegend\\\",\\\"scatter-like\\\"],attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),colorbar:t(\\\"../scatter/marker_colorbar\\\"),calc:t(\\\"./calc\\\"),plot:t(\\\"./plot\\\"),hoverPoints:t(\\\"./hover\\\").hoverPoints,selectPoints:t(\\\"./select\\\"),editStyle:t(\\\"./edit_style\\\"),meta:{}},n.register(i)},{\\\"../../components/grid\\\":636,\\\"../../registry\\\":847,\\\"../scatter/marker_colorbar\\\":1129,\\\"./attributes\\\":1198,\\\"./base_plot\\\":1199,\\\"./calc\\\":1200,\\\"./defaults\\\":1201,\\\"./edit_style\\\":1202,\\\"./hover\\\":1204,\\\"./plot\\\":1206,\\\"./select\\\":1208}],1206:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"regl-splom\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../plots/cartesian/axis_ids\\\");function o(t,e){var r,o,s,l,c,u=t._fullLayout,h=u._size,f=e.trace,p=e.t,d=u._splomScenes[f.uid],g=d.matrixOptions,v=g.cdata,m=u._glcanvas.data()[0].regl,y=u.dragmode;if(0!==v.length){g.lower=f.showupperhalf,g.upper=f.showlowerhalf,g.diagonal=f.diagonal.visible;var x=f._visibleDims,b=v.length,_=d.viewOpts={};for(_.ranges=new Array(b),_.domains=new Array(b),c=0;c<x.length;c++){s=x[c];var w=_.ranges[c]=new Array(4),k=_.domains[c]=new Array(4);(r=a.getFromId(t,f._diag[s][0]))&&(w[0]=r._rl[0],w[2]=r._rl[1],k[0]=r.domain[0],k[2]=r.domain[1]),(o=a.getFromId(t,f._diag[s][1]))&&(w[1]=o._rl[0],w[3]=o._rl[1],k[1]=o.domain[0],k[3]=o.domain[1])}_.viewport=[h.l,h.b,h.w+h.l,h.h+h.b],!0===d.matrix&&(d.matrix=n(m));var T=u.clickmode.indexOf(\\\"select\\\")>-1,A=!0;if(\\\"lasso\\\"===y||\\\"select\\\"===y||!!f.selectedpoints||T){var M=f._length;if(f.selectedpoints){d.selectBatch=f.selectedpoints;var S=f.selectedpoints,E={};for(s=0;s<S.length;s++)E[S[s]]=!0;var C=[];for(s=0;s<M;s++)E[s]||C.push(s);d.unselectBatch=C}var L=p.xpx=new Array(b),P=p.ypx=new Array(b);for(c=0;c<x.length;c++){if(s=x[c],r=a.getFromId(t,f._diag[s][0]))for(L[c]=new Array(M),l=0;l<M;l++)L[c][l]=r.c2p(v[c][l]);if(o=a.getFromId(t,f._diag[s][1]))for(P[c]=new Array(M),l=0;l<M;l++)P[c][l]=o.c2p(v[c][l])}if(d.selectBatch.length||d.unselectBatch.length){var O=i.extendFlat({},g,d.unselectedOptions,_),z=i.extendFlat({},g,d.selectedOptions,_);d.matrix.update(O,z),A=!1}}else p.xpx=p.ypx=null;if(A){var I=i.extendFlat({},g,_);d.matrix.update(I,null)}}}e.exports=function(t,e,r){if(r.length)for(var n=0;n<r.length;n++)o(t,r[n][0])}},{\\\"../../lib\\\":719,\\\"../../plots/cartesian/axis_ids\\\":770,\\\"regl-splom\\\":501}],1207:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\");e.exports=function(t,e){var r=t._fullLayout,i=e.uid,a=r._splomScenes;a||(a=r._splomScenes={});var o={dirty:!0},s=a[e.uid];return s||((s=a[i]=n.extendFlat({},o,{matrix:!1,selectBatch:[],unselectBatch:[]})).draw=function(){s.matrix&&s.matrix.draw&&(s.selectBatch.length||s.unselectBatch.length?s.matrix.draw(s.unselectBatch,s.selectBatch):s.matrix.draw()),s.dirty=!1},s.destroy=function(){s.matrix&&s.matrix.destroy&&s.matrix.destroy(),s.matrixOptions=null,s.selectBatch=null,s.unselectBatch=null,s=null}),s.dirty||n.extendFlat(s,o),s}},{\\\"../../lib\\\":719}],1208:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../scatter/subtypes\\\"),a=t(\\\"./helpers\\\");e.exports=function(t,e){var r=t.cd,o=r[0].trace,s=r[0].t,l=t.scene,c=l.matrixOptions.cdata,u=t.xaxis,h=t.yaxis,f=[];if(!l)return f;var p=!i.hasMarkers(o)&&!i.hasText(o);if(!0!==o.visible||p)return f;var d=a.getDimIndex(o,u),g=a.getDimIndex(o,h);if(!1===d||!1===g)return f;var v=s.xpx[d],m=s.ypx[g],y=c[d],x=c[g],b=[],_=[];if(!1!==e&&!e.degenerate)for(var w=0;w<y.length;w++)e.contains([v[w],m[w]],null,w,t)?(b.push(w),f.push({pointNumber:w,x:y[w],y:x[w]})):_.push(w);var k=l.matrixOptions;return b.length||_.length?l.selectBatch.length||l.unselectBatch.length||l.matrix.update(l.unselectedOptions,n.extendFlat({},k,l.selectedOptions,l.viewOpts)):l.matrix.update(k,null),l.selectBatch=b,l.unselectBatch=_,f}},{\\\"../../lib\\\":719,\\\"../scatter/subtypes\\\":1135,\\\"./helpers\\\":1203}],1209:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/colorscale/attributes\\\"),i=t(\\\"../../components/fx/hovertemplate_attributes\\\"),a=t(\\\"../mesh3d/attributes\\\"),o=t(\\\"../../plots/attributes\\\"),s=t(\\\"../../lib/extend\\\").extendFlat,l={x:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},y:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},z:{valType:\\\"data_array\\\",editType:\\\"calc+clearAxisTypes\\\"},u:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},v:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},w:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},starts:{x:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},y:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},z:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},editType:\\\"calc\\\"},maxdisplayed:{valType:\\\"integer\\\",min:0,dflt:1e3,editType:\\\"calc\\\"},sizeref:{valType:\\\"number\\\",editType:\\\"calc\\\",min:0,dflt:1},text:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},hovertext:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},hovertemplate:i({editType:\\\"calc\\\"},{keys:[\\\"tubex\\\",\\\"tubey\\\",\\\"tubez\\\",\\\"tubeu\\\",\\\"tubev\\\",\\\"tubew\\\",\\\"norm\\\",\\\"divergence\\\"]})};s(l,n(\\\"\\\",{colorAttr:\\\"u/v/w norm\\\",showScaleDflt:!0,editTypeOverride:\\\"calc\\\"}));[\\\"opacity\\\",\\\"lightposition\\\",\\\"lighting\\\"].forEach(function(t){l[t]=a[t]}),l.hoverinfo=s({},o.hoverinfo,{editType:\\\"calc\\\",flags:[\\\"x\\\",\\\"y\\\",\\\"z\\\",\\\"u\\\",\\\"v\\\",\\\"w\\\",\\\"norm\\\",\\\"divergence\\\",\\\"text\\\",\\\"name\\\"],dflt:\\\"x+y+z+norm+text+name\\\"}),l.transforms=void 0,e.exports=l},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../../plots/attributes\\\":764,\\\"../mesh3d/attributes\\\":1053}],1210:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/colorscale/calc\\\");e.exports=function(t,e){var r,i,a,o,s=e.u,l=e.v,c=e.w,u=e.x,h=e.y,f=e.z,p=Math.min(u.length,h.length,f.length,s.length,l.length,c.length),d=0;e.starts&&(i=e.starts.x||[],a=e.starts.y||[],o=e.starts.z||[],d=Math.min(i.length,a.length,o.length));var g=0,v=1/0;for(r=0;r<p;r++){var m=s[r],y=l[r],x=c[r],b=Math.sqrt(m*m+y*y+x*x);g=Math.max(g,b),v=Math.min(v,b)}n(t,e,{vals:[v,g],containerStr:\\\"\\\",cLetter:\\\"c\\\"});var _=-1/0,w=1/0,k=-1/0,T=1/0,A=-1/0,M=1/0;for(r=0;r<p;r++){var S=u[r];_=Math.max(_,S),w=Math.min(w,S);var E=h[r];k=Math.max(k,E),T=Math.min(T,E);var C=f[r];A=Math.max(A,C),M=Math.min(M,C)}for(r=0;r<d;r++){var L=i[r];_=Math.max(_,L),w=Math.min(w,L);var P=a[r];k=Math.max(k,P),T=Math.min(T,P);var O=o[r];A=Math.max(A,O),M=Math.min(M,O)}e._len=p,e._slen=d,e._normMax=g,e._xbnds=[w,_],e._ybnds=[T,k],e._zbnds=[M,A]}},{\\\"../../components/colorscale/calc\\\":601}],1211:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"gl-streamtube3d\\\"),i=n.createTubeMesh,a=t(\\\"../../lib\\\"),o=t(\\\"../../lib/gl_format_color\\\").parseColorScale,s=t(\\\"../../components/colorscale\\\").extractOpts,l=t(\\\"../../plots/gl3d/zip3\\\"),c={xaxis:0,yaxis:1,zaxis:2};function u(t,e){this.scene=t,this.uid=e,this.mesh=null,this.data=null}var h=u.prototype;function f(t){return a.distinctVals(t).vals}function p(t){var e=t.length;return e>2?t.slice(1,e-1):2===e?[(t[0]+t[1])/2]:t}function d(t){var e=t.length;return 1===e?[.5,.5]:[t[1]-t[0],t[e-1]-t[e-2]]}function g(t,e){var r=t.fullSceneLayout,i=t.dataScale,u=e._len,h={};function g(t,e){var n=r[e],o=i[c[e]];return a.simpleMap(t,function(t){return n.d2l(t)*o})}h.vectors=l(g(e.u,\\\"xaxis\\\"),g(e.v,\\\"yaxis\\\"),g(e.w,\\\"zaxis\\\"),u);var v=f(e.x.slice(0,u)),m=f(e.y.slice(0,u)),y=f(e.z.slice(0,u));if(v.length*m.length*y.length>u)return{positions:[],cells:[]};var x=g(v,\\\"xaxis\\\"),b=g(m,\\\"yaxis\\\"),_=g(y,\\\"zaxis\\\");if(h.meshgrid=[x,b,_],e.starts){var w=e._slen;h.startingPositions=l(g(e.starts.x.slice(0,w),\\\"xaxis\\\"),g(e.starts.y.slice(0,w),\\\"yaxis\\\"),g(e.starts.z.slice(0,w),\\\"zaxis\\\"))}else{for(var k=b[0],T=p(x),A=p(_),M=new Array(T.length*A.length),S=0,E=0;E<T.length;E++)for(var C=0;C<A.length;C++)M[S++]=[T[E],k,A[C]];h.startingPositions=M}h.colormap=o(e),h.tubeSize=e.sizeref,h.maxLength=e.maxdisplayed;var L=g(e._xbnds,\\\"xaxis\\\"),P=g(e._ybnds,\\\"yaxis\\\"),O=g(e._zbnds,\\\"zaxis\\\"),z=d(x),I=d(b),D=d(_),R=[[L[0]-z[0],P[0]-I[0],O[0]-D[0]],[L[1]+z[1],P[1]+I[1],O[1]+D[1]]],F=n(h,R),B=s(e);F.vertexIntensityBounds=[B.min/e._normMax,B.max/e._normMax];var N=e.lightposition;return F.lightPosition=[N.x,N.y,N.z],F.ambient=e.lighting.ambient,F.diffuse=e.lighting.diffuse,F.specular=e.lighting.specular,F.roughness=e.lighting.roughness,F.fresnel=e.lighting.fresnel,F.opacity=e.opacity,e._pad=F.tubeScale*e.sizeref*2,F}h.handlePick=function(t){var e=this.scene.fullSceneLayout,r=this.scene.dataScale;function n(t,n){var i=e[n],a=r[c[n]];return i.l2c(t)/a}if(t.object===this.mesh){var i=t.data.position,a=t.data.velocity;return t.traceCoordinate=[n(i[0],\\\"xaxis\\\"),n(i[1],\\\"yaxis\\\"),n(i[2],\\\"zaxis\\\"),n(a[0],\\\"xaxis\\\"),n(a[1],\\\"yaxis\\\"),n(a[2],\\\"zaxis\\\"),t.data.intensity*this.data._normMax,t.data.divergence],t.textLabel=this.data.hovertext||this.data.text,!0}},h.update=function(t){this.data=t;var e=g(this.scene,t);this.mesh.update(e)},h.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports=function(t,e){var r=t.glplot.gl,n=g(t,e),a=i(r,n),o=new u(t,e.uid);return o.mesh=a,o.data=e,a._trace=o,t.glplot.add(a),o}},{\\\"../../components/colorscale\\\":605,\\\"../../lib\\\":719,\\\"../../lib/gl_format_color\\\":716,\\\"../../plots/gl3d/zip3\\\":818,\\\"gl-streamtube3d\\\":313}],1212:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../components/colorscale/defaults\\\"),a=t(\\\"./attributes\\\");e.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l=s(\\\"u\\\"),c=s(\\\"v\\\"),u=s(\\\"w\\\"),h=s(\\\"x\\\"),f=s(\\\"y\\\"),p=s(\\\"z\\\");l&&l.length&&c&&c.length&&u&&u.length&&h&&h.length&&f&&f.length&&p&&p.length?(s(\\\"starts.x\\\"),s(\\\"starts.y\\\"),s(\\\"starts.z\\\"),s(\\\"maxdisplayed\\\"),s(\\\"sizeref\\\"),s(\\\"lighting.ambient\\\"),s(\\\"lighting.diffuse\\\"),s(\\\"lighting.specular\\\"),s(\\\"lighting.roughness\\\"),s(\\\"lighting.fresnel\\\"),s(\\\"lightposition.x\\\"),s(\\\"lightposition.y\\\"),s(\\\"lightposition.z\\\"),i(t,e,o,s,{prefix:\\\"\\\",cLetter:\\\"c\\\"}),s(\\\"text\\\"),s(\\\"hovertext\\\"),s(\\\"hovertemplate\\\"),e._length=null):e.visible=!1}},{\\\"../../components/colorscale/defaults\\\":603,\\\"../../lib\\\":719,\\\"./attributes\\\":1209}],1213:[function(t,e,r){\\\"use strict\\\";e.exports={moduleType:\\\"trace\\\",name:\\\"streamtube\\\",basePlotModule:t(\\\"../../plots/gl3d\\\"),categories:[\\\"gl3d\\\"],attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),colorbar:{min:\\\"cmin\\\",max:\\\"cmax\\\"},calc:t(\\\"./calc\\\"),plot:t(\\\"./convert\\\"),eventData:function(t,e){return t.tubex=t.x,t.tubey=t.y,t.tubez=t.z,t.tubeu=e.traceCoordinate[3],t.tubev=e.traceCoordinate[4],t.tubew=e.traceCoordinate[5],t.norm=e.traceCoordinate[6],t.divergence=e.traceCoordinate[7],delete t.x,delete t.y,delete t.z,t},meta:{}}},{\\\"../../plots/gl3d\\\":807,\\\"./attributes\\\":1209,\\\"./calc\\\":1210,\\\"./convert\\\":1211,\\\"./defaults\\\":1212}],1214:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/attributes\\\"),i=t(\\\"../../components/fx/hovertemplate_attributes\\\"),a=t(\\\"../../plots/domain\\\").attributes,o=t(\\\"../pie/attributes\\\"),s=t(\\\"../../lib/extend\\\").extendFlat;e.exports={labels:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},parents:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},values:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},branchvalues:{valType:\\\"enumerated\\\",values:[\\\"remainder\\\",\\\"total\\\"],dflt:\\\"remainder\\\",editType:\\\"calc\\\"},level:{valType:\\\"any\\\",editType:\\\"plot\\\",anim:!0},maxdepth:{valType:\\\"integer\\\",editType:\\\"plot\\\",dflt:-1},marker:{colors:{valType:\\\"data_array\\\",editType:\\\"calc\\\"},line:{color:s({},o.marker.line.color,{dflt:null}),width:s({},o.marker.line.width,{dflt:1}),editType:\\\"calc\\\"},editType:\\\"calc\\\"},leaf:{opacity:{valType:\\\"number\\\",editType:\\\"style\\\",min:0,max:1,dflt:.7},editType:\\\"plot\\\"},text:o.text,textinfo:s({},o.textinfo,{editType:\\\"plot\\\",flags:[\\\"label\\\",\\\"text\\\",\\\"value\\\"]}),textfont:o.textfont,hovertext:o.hovertext,hoverinfo:s({},n.hoverinfo,{flags:[\\\"label\\\",\\\"text\\\",\\\"value\\\",\\\"name\\\"]}),hovertemplate:i(),insidetextfont:o.insidetextfont,outsidetextfont:o.outsidetextfont,domain:a({name:\\\"sunburst\\\",trace:!0,editType:\\\"calc\\\"})}},{\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../../plots/attributes\\\":764,\\\"../../plots/domain\\\":792,\\\"../pie/attributes\\\":1086}],1215:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../plots/get_data\\\").getModuleCalcData,a=r.name=\\\"sunburst\\\";r.plot=function(t,e,r,o){var s=n.getModule(a),l=i(t.calcdata,s)[0];s.plot(t,l,r,o)},r.clean=function(t,e,r,n){var i=n._has&&n._has(a),o=e._has&&e._has(a);i&&!o&&n._sunburstlayer.selectAll(\\\"g.trace\\\").remove()}},{\\\"../../plots/get_data\\\":802,\\\"../../registry\\\":847}],1216:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3-hierarchy\\\"),i=t(\\\"fast-isnumeric\\\"),a=t(\\\"../../lib\\\"),o=t(\\\"../pie/calc\\\").makePullColorFn,s=t(\\\"../pie/calc\\\").generateExtendedColors,l=a.isArrayOrTypedArray,c={};r.calc=function(t,e){var r,s,c,u,h,f,p=t._fullLayout,d=e.ids,g=l(d),v=e.labels,m=e.parents,y=e.values,x=l(y),b=[],_={},w={},k=function(t){return t||\\\"number\\\"==typeof t},T=function(t){return!x||i(y[t])&&y[t]>=0};g?(r=Math.min(d.length,m.length),s=function(t){return k(d[t])&&T(t)},c=function(t){return String(d[t])}):(r=Math.min(v.length,m.length),s=function(t){return k(v[t])&&T(t)},c=function(t){return String(v[t])}),x&&(r=Math.min(r,y.length));for(var A=0;A<r;A++)if(s(A)){var M=c(A),S=k(m[A])?String(m[A]):\\\"\\\",E={i:A,id:M,pid:S,label:k(v[A])?String(v[A]):\\\"\\\"};x&&(E.v=+y[A]),b.push(E),h=M,_[u=S]?_[u].push(h):_[u]=[h],w[h]=1}if(_[\\\"\\\"]){if(_[\\\"\\\"].length>1){for(var C=a.randstr(),L=0;L<b.length;L++)\\\"\\\"===b[L].pid&&(b[L].pid=C);b.unshift({hasMultipleRoots:!0,id:C,pid:\\\"\\\"})}}else{var P,O=[];for(P in _)w[P]||O.push(P);if(1!==O.length)return a.warn(\\\"Multiple implied roots, cannot build sunburst hierarchy.\\\");P=O[0],b.unshift({id:P,pid:\\\"\\\",label:P})}try{f=n.stratify().id(function(t){return t.id}).parentId(function(t){return t.pid})(b)}catch(t){return a.warn(\\\"Failed to build sunburst hierarchy. Error: \\\"+t.message)}var z=n.hierarchy(f),I=!1;if(x)switch(e.branchvalues){case\\\"remainder\\\":z.sum(function(t){return t.data.v});break;case\\\"total\\\":z.each(function(t){var e=t.data.data.v;if(t.children&&e<t.children.reduce(function(t,e){return t+e.data.data.v},0))return I=!0,a.warn([\\\"Total value for node\\\",t.data.data.id,\\\"is smaller than the sum of its children.\\\"].join(\\\" \\\"));t.value=e})}else z.count();if(!I){z.sort(function(t,e){return e.value-t.value});var D=e.marker.colors||[],R=o(p._sunburstcolormap);return z.each(function(t){var e=t.data.data,r=e.id;e.color=R(D[e.i],r)}),b[0].hierarchy=z,b}},r.crossTraceCalc=function(t){var e=t._fullLayout,r=t.calcdata,n=e.sunburstcolorway,i=e._sunburstcolormap;e.extendsunburstcolors&&(n=s(n,c));var a=0;function o(t){var e=t.data.data,r=e.id;!1===e.color&&(i[r]?e.color=i[r]:t.parent?t.parent.parent?e.color=t.parent.data.data.color:(i[r]=e.color=n[a%n.length],a++):e.color=\\\"rgba(0,0,0,0)\\\")}for(var l=0;l<r.length;l++){var u=r[l][0];\\\"sunburst\\\"===u.trace.type&&u.hierarchy&&u.hierarchy.each(o)}}},{\\\"../../lib\\\":719,\\\"../pie/calc\\\":1088,\\\"d3-hierarchy\\\":157,\\\"fast-isnumeric\\\":225}],1217:[function(t,e,r){\\\"use strict\\\";e.exports={CLICK_TRANSITION_TIME:750,CLICK_TRANSITION_EASING:\\\"linear\\\"}},{}],1218:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./attributes\\\"),a=t(\\\"../../plots/domain\\\").defaults,o=t(\\\"../bar/defaults\\\").handleText;e.exports=function(t,e,r,s){function l(r,a){return n.coerce(t,e,i,r,a)}var c=l(\\\"labels\\\"),u=l(\\\"parents\\\");if(c&&c.length&&u&&u.length){var h=l(\\\"values\\\");h&&h.length&&l(\\\"branchvalues\\\"),l(\\\"level\\\"),l(\\\"maxdepth\\\"),l(\\\"marker.line.width\\\")&&l(\\\"marker.line.color\\\",s.paper_bgcolor),l(\\\"marker.colors\\\"),l(\\\"leaf.opacity\\\");var f=l(\\\"text\\\");l(\\\"textinfo\\\",Array.isArray(f)?\\\"text+label\\\":\\\"label\\\"),l(\\\"hovertext\\\"),l(\\\"hovertemplate\\\");o(t,e,s,l,\\\"auto\\\",{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),a(e,s,l),e._length=null}else e.visible=!1}},{\\\"../../lib\\\":719,\\\"../../plots/domain\\\":792,\\\"../bar/defaults\\\":861,\\\"./attributes\\\":1214}],1219:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../components/color\\\"),a=t(\\\"../../lib/setcursor\\\"),o=t(\\\"../../components/fx/helpers\\\").appendArrayPointValue;r.makeEventData=function(t,e){var r=t.data.data,n={curveNumber:e.index,pointNumber:r.i,data:e._input,fullData:e};return o(n,e,r.i),n},r.findEntryWithLevel=function(t,e){var n;return e&&t.eachAfter(function(t){if(r.getPtId(t)===e)return n=t.copy()}),n||t},r.findEntryWithChild=function(t,e){var n;return t.eachAfter(function(t){for(var i=t.children||[],a=0;a<i.length;a++){var o=i[a];if(r.getPtId(o)===e)return n=t.copy()}}),n||t},r.isHierachyRoot=function(t){return\\\"\\\"===t.data.data.pid},r.isEntry=function(t){return!t.parent},r.isLeaf=function(t){return!t.children},r.getPtId=function(t){return t.data.data.id},r.setSliceCursor=function(t,e,n){var i=t.datum(),o=(n||{}).isTransitioning;a(t,o||r.isLeaf(i)||r.isHierachyRoot(i)?null:\\\"pointer\\\")},r.determineOutsideTextFont=function(t,e,r){var i=e.data.data.i;return{color:n.castOption(t,i,\\\"outsidetextfont.color\\\")||n.castOption(t,i,\\\"textfont.color\\\")||r.color,family:n.castOption(t,i,\\\"outsidetextfont.family\\\")||n.castOption(t,i,\\\"textfont.family\\\")||r.family,size:n.castOption(t,i,\\\"outsidetextfont.size\\\")||n.castOption(t,i,\\\"textfont.size\\\")||r.size}},r.determineInsideTextFont=function(t,e,r){var a=e.data.data,o=a.i,s=n.castOption(t,o,\\\"insidetextfont.color\\\");!s&&t._input.textfont&&(s=n.castOption(t._input,o,\\\"textfont.color\\\"));var l=n.castOption(t,o,\\\"insidetextfont.family\\\")||n.castOption(t,o,\\\"textfont.family\\\")||r.family,c=n.castOption(t,o,\\\"insidetextfont.size\\\")||n.castOption(t,o,\\\"textfont.size\\\")||r.size;return{color:s||i.contrast(a.color),family:l,size:c}}},{\\\"../../components/color\\\":593,\\\"../../components/fx/helpers\\\":628,\\\"../../lib\\\":719,\\\"../../lib/setcursor\\\":739}],1220:[function(t,e,r){\\\"use strict\\\";e.exports={moduleType:\\\"trace\\\",name:\\\"sunburst\\\",basePlotModule:t(\\\"./base_plot\\\"),categories:[],animatable:!0,attributes:t(\\\"./attributes\\\"),layoutAttributes:t(\\\"./layout_attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),supplyLayoutDefaults:t(\\\"./layout_defaults\\\"),calc:t(\\\"./calc\\\").calc,crossTraceCalc:t(\\\"./calc\\\").crossTraceCalc,plot:t(\\\"./plot\\\"),style:t(\\\"./style\\\").style,meta:{}}},{\\\"./attributes\\\":1214,\\\"./base_plot\\\":1215,\\\"./calc\\\":1216,\\\"./defaults\\\":1218,\\\"./layout_attributes\\\":1221,\\\"./layout_defaults\\\":1222,\\\"./plot\\\":1223,\\\"./style\\\":1224}],1221:[function(t,e,r){\\\"use strict\\\";e.exports={sunburstcolorway:{valType:\\\"colorlist\\\",editType:\\\"calc\\\"},extendsunburstcolors:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"}}},{}],1222:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./layout_attributes\\\");e.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\\\"sunburstcolorway\\\",e.colorway),r(\\\"extendsunburstcolors\\\")}},{\\\"../../lib\\\":719,\\\"./layout_attributes\\\":1221}],1223:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"d3-hierarchy\\\"),a=t(\\\"../../registry\\\"),o=t(\\\"../../components/fx\\\"),s=t(\\\"../../components/drawing\\\"),l=t(\\\"../../lib\\\"),c=t(\\\"../../lib/events\\\"),u=t(\\\"../../lib/svg_text_utils\\\"),h=t(\\\"../pie/plot\\\").transformInsideText,f=t(\\\"../pie/helpers\\\").formatPieValue,p=t(\\\"./style\\\").styleOne,d=t(\\\"./constants\\\"),g=t(\\\"./helpers\\\");function v(t,e,r,a){var o=t._fullLayout,c=a&&a.duration>0,d=n.select(r).selectAll(\\\"g.slice\\\"),v=e[0],x=v.trace,b=m(v.hierarchy,x.level),_=x.maxdepth>=0?x.maxdepth:1/0,w=o._size,k=x.domain,T=w.w*(k.x[1]-k.x[0]),A=w.h*(k.y[1]-k.y[0]),M=.5*Math.min(T,A),S=v.cx=w.l+w.w*(k.x[1]+k.x[0])/2,E=v.cy=w.t+w.h*(1-k.y[0])-A/2;if(!b)return d.remove();var C=null,L={};c&&d.each(function(t){L[g.getPtId(t)]={rpx0:t.rpx0,rpx1:t.rpx1,x0:t.x0,x1:t.x1,transform:t.transform},!C&&g.isEntry(t)&&(C=t)});var P=function(t){return i.partition().size([2*Math.PI,t.height+1])(t)}(b).descendants(),O=b.height+1,z=0,I=_;v.hasMultipleRoots&&g.isHierachyRoot(b)&&(P=P.slice(1),O-=1,z=1,I+=1),P=P.filter(function(t){return t.y1<=I});var D=Math.min(O,_),R=function(t){return(t-z)/D*M},F=function(t,e){return[t*Math.cos(e),-t*Math.sin(e)]},B=function(t){return l.pathAnnulus(t.rpx0,t.rpx1,t.x0,t.x1,S,E)},N=function(t){return S+t.pxmid[0]*t.transform.rCenter+(t.transform.x||0)},j=function(t){return E+t.pxmid[1]*t.transform.rCenter+(t.transform.y||0)};(d=d.data(P,function(t){return g.getPtId(t)})).enter().append(\\\"g\\\").classed(\\\"slice\\\",!0),c?d.exit().transition().each(function(){var t=n.select(this);t.select(\\\"path.surface\\\").transition().attrTween(\\\"d\\\",function(t){var e=function(t){var e,r=g.getPtId(t),i=L[r],a=L[g.getPtId(b)];if(a){var o=t.x1>a.x1?2*Math.PI:0;e=t.rpx1<a.rpx1?{rpx0:0,rpx1:0}:{x0:o,x1:o}}else{var s,l=g.getPtId(t.parent);d.each(function(t){if(g.getPtId(t)===l)return s=t});var c,u=s.children;u.forEach(function(t,e){if(g.getPtId(t)===r)return c=e});var h=u.length,f=n.interpolate(s.x0,s.x1);e={rpx0:M,rpx1:M,x0:f(c/h),x1:f((c+1)/h)}}return n.interpolate(i,e)}(t);return function(t){return B(e(t))}}),t.select(\\\"g.slicetext\\\").attr(\\\"opacity\\\",0)}).remove():d.exit().remove(),d.order();var U=null;if(c&&C){var V=g.getPtId(C);d.each(function(t){null===U&&g.getPtId(t)===V&&(U=t.x1)})}var q=d;function H(t){var e=t.parent,r=L[g.getPtId(e)],i={};if(r){var a=e.children,o=a.indexOf(t),s=a.length,l=n.interpolate(r.x0,r.x1);i.x0=l(o/s),i.x1=l(o/s)}else i.x0=i.x1=0;return i}c&&(q=q.transition().each(\\\"end\\\",function(){var e=n.select(this);g.setSliceCursor(e,t,{isTransitioning:!1})})),q.each(function(r){var i=n.select(this),a=l.ensureSingle(i,\\\"path\\\",\\\"surface\\\",function(t){t.style(\\\"pointer-events\\\",\\\"all\\\")});r.rpx0=R(r.y0),r.rpx1=R(r.y1),r.xmid=(r.x0+r.x1)/2,r.pxmid=F(r.rpx1,r.xmid),r.midangle=-(r.xmid-Math.PI/2),r.halfangle=.5*Math.min(l.angleDelta(r.x0,r.x1)||Math.PI,Math.PI),r.ring=1-r.rpx0/r.rpx1,r.rInscribed=function(t){return 0===t.rpx0&&l.isFullCircle([t.x0,t.x1])?1:Math.max(0,Math.min(1/(1+1/Math.sin(t.halfangle)),t.ring/2))}(r),c?a.transition().attrTween(\\\"d\\\",function(t){var e=function(t){var e,r=L[g.getPtId(t)],i={x0:t.x0,x1:t.x1,rpx0:t.rpx0,rpx1:t.rpx1};if(r)e=r;else if(C)if(t.parent)if(U){var a=t.x1>U?2*Math.PI:0;e={x0:a,x1:a}}else e={rpx0:M,rpx1:M},l.extendFlat(e,H(t));else e={rpx0:0,rpx1:0};else e={x0:0,x1:0};return n.interpolate(e,i)}(t);return function(t){return B(e(t))}}):a.attr(\\\"d\\\",B),i.call(y,t,e).call(g.setSliceCursor,t,{isTransitioning:t._transitioning}),a.call(p,r,x);var d=l.ensureSingle(i,\\\"g\\\",\\\"slicetext\\\"),m=l.ensureSingle(d,\\\"text\\\",\\\"\\\",function(t){t.attr(\\\"data-notex\\\",1)});m.text(function(t,e,r){var n=e.textinfo;if(!n||\\\"none\\\"===n)return\\\"\\\";var i=t.data.data,a=r.separators,o=n.split(\\\"+\\\"),s=function(t){return-1!==o.indexOf(t)},c=[];s(\\\"label\\\")&&i.label&&c.push(i.label);i.hasOwnProperty(\\\"v\\\")&&s(\\\"value\\\")&&c.push(f(i.v,a));if(s(\\\"text\\\")){var u=l.castOption(e,i.i,\\\"text\\\");l.isValidTextValue(u)&&c.push(u)}return c.join(\\\"<br>\\\")}(r,x,o)).classed(\\\"slicetext\\\",!0).attr(\\\"text-anchor\\\",\\\"middle\\\").call(s.font,g.isHierachyRoot(r)?g.determineOutsideTextFont(x,r,o.font):g.determineInsideTextFont(x,r,o.font)).call(u.convertToTspans,t);var b=s.bBox(m.node());r.transform=h(b,r,v),r.translateX=N(r),r.translateY=j(r);var _=function(t,e){return\\\"translate(\\\"+t.translateX+\\\",\\\"+t.translateY+\\\")\\\"+(t.transform.scale<1?\\\"scale(\\\"+t.transform.scale+\\\")\\\":\\\"\\\")+(t.transform.rotate?\\\"rotate(\\\"+t.transform.rotate+\\\")\\\":\\\"\\\")+\\\"translate(\\\"+-(e.left+e.right)/2+\\\",\\\"+-(e.top+e.bottom)/2+\\\")\\\"};c?m.transition().attrTween(\\\"transform\\\",function(t){var e=function(t){var e,r=L[g.getPtId(t)],i=t.transform;if(r)e=r;else if(e={rpx1:t.rpx1,transform:{scale:0,rotate:i.rotate,rCenter:i.rCenter,x:i.x,y:i.y}},C)if(t.parent)if(U){var a=t.x1>U?2*Math.PI:0;e.x0=e.x1=a}else l.extendFlat(e,H(t));else e.x0=e.x1=0;else e.x0=e.x1=0;var o=n.interpolate(e.rpx1,t.rpx1),s=n.interpolate(e.x0,t.x0),c=n.interpolate(e.x1,t.x1),u=n.interpolate(e.transform.scale,i.scale),h=n.interpolate(e.transform.rotate,i.rotate),f=0===i.rCenter?3:0===e.transform.rCenter?1/3:1,p=n.interpolate(e.transform.rCenter,i.rCenter);return function(t){var e=o(t),r=s(t),n=c(t),a=function(t){return p(Math.pow(t,f))}(t),l={pxmid:F(e,(r+n)/2),transform:{rCenter:a,x:i.x,y:i.y}},d={rpx1:o(t),translateX:N(l),translateY:j(l),transform:{scale:u(t),rotate:h(t),rCenter:a}};return d}}(t);return function(t){return _(e(t),b)}}):m.attr(\\\"transform\\\",_(r,b))})}function m(t,e){var r;return e&&t.eachAfter(function(t){if(g.getPtId(t)===e)return r=t.copy()}),r||t}function y(t,e,r){var i=r[0],s=i.trace;\\\"_hasHoverLabel\\\"in s||(s._hasHoverLabel=!1),\\\"_hasHoverEvent\\\"in s||(s._hasHoverEvent=!1),t.on(\\\"mouseover\\\",function(t){var r=e._fullLayout;if(!e._dragging&&!1!==r.hovermode){var a=e._fullData[s.index],c=t.data.data,u=c.i,h=function(t){return l.castOption(a,u,t)},p=h(\\\"hovertemplate\\\"),d=o.castHoverinfo(a,r,u),v=r.separators;if(p||d&&\\\"none\\\"!==d&&\\\"skip\\\"!==d){var m=t.rInscribed,y=i.cx+t.pxmid[0]*(1-m),x=i.cy+t.pxmid[1]*(1-m),b={},_=[],w=[],k=function(t){return-1!==_.indexOf(t)};if(d&&(_=\\\"all\\\"===d?a._module.attributes.hoverinfo.flags:d.split(\\\"+\\\")),b.label=c.label,k(\\\"label\\\")&&b.label&&w.push(b.label),c.hasOwnProperty(\\\"v\\\")&&(b.value=c.v,b.valueLabel=f(b.value,v),k(\\\"value\\\")&&w.push(b.valueLabel)),b.text=h(\\\"hovertext\\\")||h(\\\"text\\\"),k(\\\"text\\\")){var T=b.text;l.isValidTextValue(T)&&w.push(T)}o.loneHover({trace:a,x0:y-m*t.rpx1,x1:y+m*t.rpx1,y:x,idealAlign:t.pxmid[0]<0?\\\"left\\\":\\\"right\\\",text:w.join(\\\"<br>\\\"),name:p||k(\\\"name\\\")?a.name:void 0,color:h(\\\"hoverlabel.bgcolor\\\")||c.color,borderColor:h(\\\"hoverlabel.bordercolor\\\"),fontFamily:h(\\\"hoverlabel.font.family\\\"),fontSize:h(\\\"hoverlabel.font.size\\\"),fontColor:h(\\\"hoverlabel.font.color\\\"),nameLength:h(\\\"hoverlabel.namelength\\\"),textAlign:h(\\\"hoverlabel.align\\\"),hovertemplate:p,hovertemplateLabels:b,eventData:[g.makeEventData(t,a)]},{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:e}),s._hasHoverLabel=!0}s._hasHoverEvent=!0,e.emit(\\\"plotly_hover\\\",{points:[g.makeEventData(t,a)],event:n.event})}}),t.on(\\\"mouseout\\\",function(t){var r=e._fullLayout,i=e._fullData[s.index],a=n.select(this).datum();s._hasHoverEvent&&(t.originalEvent=n.event,e.emit(\\\"plotly_unhover\\\",{points:[g.makeEventData(a,i)],event:n.event}),s._hasHoverEvent=!1),s._hasHoverLabel&&(o.loneUnhover(r._hoverlayer.node()),s._hasHoverLabel=!1)}),t.on(\\\"click\\\",function(t){var r=e._fullLayout,l=e._fullData[s.index];if(!1===c.triggerHandler(e,\\\"plotly_sunburstclick\\\",{points:[g.makeEventData(t,l)],event:n.event})||g.isLeaf(t)||g.isHierachyRoot(t))r.hovermode&&(e._hoverdata=[g.makeEventData(t,l)],o.click(e,n.event));else if(!e._dragging&&!e._transitioning){a.call(\\\"_storeDirectGUIEdit\\\",l,r._tracePreGUI[l.uid],{level:l.level});var u=i.hierarchy,h=g.getPtId(t),f=g.isEntry(t)?function(t,e){var r;return t.eachAfter(function(t){for(var n=t.children||[],i=0;i<n.length;i++){var a=n[i];if(g.getPtId(a)===e)return r=t.copy()}}),r||t}(u,h):m(u,h),p={data:[{level:g.getPtId(f)}],traces:[s.index]},v={frame:{redraw:!1,duration:d.CLICK_TRANSITION_TIME},transition:{duration:d.CLICK_TRANSITION_TIME,easing:d.CLICK_TRANSITION_EASING},mode:\\\"immediate\\\",fromcurrent:!0};o.loneUnhover(r._hoverlayer.node()),a.call(\\\"animate\\\",e,p,v)}})}e.exports=function(t,e,r,i){var a,o,s=t._fullLayout._sunburstlayer,l=!r,c=r&&r.duration>0;((a=s.selectAll(\\\"g.trace.sunburst\\\").data(e,function(t){return t[0].trace.uid})).enter().append(\\\"g\\\").classed(\\\"trace\\\",!0).classed(\\\"sunburst\\\",!0).attr(\\\"stroke-linejoin\\\",\\\"round\\\"),a.order(),c)?(i&&(o=i()),n.transition().duration(r.duration).ease(r.easing).each(\\\"end\\\",function(){o&&o()}).each(\\\"interrupt\\\",function(){o&&o()}).each(function(){s.selectAll(\\\"g.trace\\\").each(function(e){v(t,e,this,r)})})):a.each(function(e){v(t,e,this,r)});l&&a.exit().remove()}},{\\\"../../components/drawing\\\":614,\\\"../../components/fx\\\":632,\\\"../../lib\\\":719,\\\"../../lib/events\\\":709,\\\"../../lib/svg_text_utils\\\":743,\\\"../../registry\\\":847,\\\"../pie/helpers\\\":1091,\\\"../pie/plot\\\":1095,\\\"./constants\\\":1217,\\\"./helpers\\\":1219,\\\"./style\\\":1224,d3:163,\\\"d3-hierarchy\\\":157}],1224:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../components/color\\\"),a=t(\\\"../../lib\\\");function o(t,e,r){var n=e.data.data,o=!e.children,s=n.i,l=a.castOption(r,s,\\\"marker.line.color\\\")||i.defaultLine,c=a.castOption(r,s,\\\"marker.line.width\\\")||0;t.style(\\\"stroke-width\\\",c).call(i.fill,n.color).call(i.stroke,l).style(\\\"opacity\\\",o?r.leaf.opacity:null)}e.exports={style:function(t){t._fullLayout._sunburstlayer.selectAll(\\\".trace\\\").each(function(t){var e=n.select(this),r=t[0].trace;e.style(\\\"opacity\\\",r.opacity),e.selectAll(\\\"path.surface\\\").each(function(t){n.select(this).call(o,t,r)})})},styleOne:o}},{\\\"../../components/color\\\":593,\\\"../../lib\\\":719,d3:163}],1225:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/color\\\"),i=t(\\\"../../components/colorscale/attributes\\\"),a=t(\\\"../../components/fx/hovertemplate_attributes\\\"),o=t(\\\"../../plots/attributes\\\"),s=t(\\\"../../lib/extend\\\").extendFlat,l=t(\\\"../../plot_api/edit_types\\\").overrideAll;function c(t){return{show:{valType:\\\"boolean\\\",dflt:!1},start:{valType:\\\"number\\\",dflt:null,editType:\\\"plot\\\"},end:{valType:\\\"number\\\",dflt:null,editType:\\\"plot\\\"},size:{valType:\\\"number\\\",dflt:null,min:0,editType:\\\"plot\\\"},project:{x:{valType:\\\"boolean\\\",dflt:!1},y:{valType:\\\"boolean\\\",dflt:!1},z:{valType:\\\"boolean\\\",dflt:!1}},color:{valType:\\\"color\\\",dflt:n.defaultLine},usecolormap:{valType:\\\"boolean\\\",dflt:!1},width:{valType:\\\"number\\\",min:1,max:16,dflt:2},highlight:{valType:\\\"boolean\\\",dflt:!0},highlightcolor:{valType:\\\"color\\\",dflt:n.defaultLine},highlightwidth:{valType:\\\"number\\\",min:1,max:16,dflt:2}}}var u=e.exports=l(s({z:{valType:\\\"data_array\\\"},x:{valType:\\\"data_array\\\"},y:{valType:\\\"data_array\\\"},text:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0},hovertext:{valType:\\\"string\\\",dflt:\\\"\\\",arrayOk:!0},hovertemplate:a(),connectgaps:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},surfacecolor:{valType:\\\"data_array\\\"}},i(\\\"\\\",{colorAttr:\\\"z or surfacecolor\\\",showScaleDflt:!0,autoColorDflt:!1,editTypeOverride:\\\"calc\\\"}),{contours:{x:c(),y:c(),z:c()},hidesurface:{valType:\\\"boolean\\\",dflt:!1},lightposition:{x:{valType:\\\"number\\\",min:-1e5,max:1e5,dflt:10},y:{valType:\\\"number\\\",min:-1e5,max:1e5,dflt:1e4},z:{valType:\\\"number\\\",min:-1e5,max:1e5,dflt:0}},lighting:{ambient:{valType:\\\"number\\\",min:0,max:1,dflt:.8},diffuse:{valType:\\\"number\\\",min:0,max:1,dflt:.8},specular:{valType:\\\"number\\\",min:0,max:2,dflt:.05},roughness:{valType:\\\"number\\\",min:0,max:1,dflt:.5},fresnel:{valType:\\\"number\\\",min:0,max:5,dflt:.2}},opacity:{valType:\\\"number\\\",min:0,max:1,dflt:1},_deprecated:{zauto:s({},i.zauto,{}),zmin:s({},i.zmin,{}),zmax:s({},i.zmax,{})},hoverinfo:s({},o.hoverinfo)}),\\\"calc\\\",\\\"nested\\\");u.x.editType=u.y.editType=u.z.editType=\\\"calc+clearAxisTypes\\\",u.transforms=void 0},{\\\"../../components/color\\\":593,\\\"../../components/colorscale/attributes\\\":600,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../../plot_api/edit_types\\\":750,\\\"../../plots/attributes\\\":764}],1226:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/colorscale/calc\\\");e.exports=function(t,e){e.surfacecolor?n(t,e,{vals:e.surfacecolor,containerStr:\\\"\\\",cLetter:\\\"c\\\"}):n(t,e,{vals:e.z,containerStr:\\\"\\\",cLetter:\\\"c\\\"})}},{\\\"../../components/colorscale/calc\\\":601}],1227:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"gl-surface3d\\\"),i=t(\\\"ndarray\\\"),a=t(\\\"ndarray-homography\\\"),o=t(\\\"ndarray-fill\\\"),s=t(\\\"../../lib\\\").isArrayOrTypedArray,l=t(\\\"../../lib/gl_format_color\\\").parseColorScale,c=t(\\\"../../lib/str2rgbarray\\\"),u=t(\\\"../../components/colorscale\\\").extractOpts,h=t(\\\"../heatmap/interp2d\\\"),f=t(\\\"../heatmap/find_empties\\\");function p(t,e,r){this.scene=t,this.uid=r,this.surface=e,this.data=null,this.showContour=[!1,!1,!1],this.contourStart=[null,null,null],this.contourEnd=[null,null,null],this.contourSize=[0,0,0],this.minValues=[1/0,1/0,1/0],this.maxValues=[-1/0,-1/0,-1/0],this.dataScaleX=1,this.dataScaleY=1,this.refineData=!0,this.objectOffset=[0,0,0]}var d=p.prototype;d.getXat=function(t,e,r,n){var i=s(this.data.x)?s(this.data.x[0])?this.data.x[e][t]:this.data.x[t]:t;return void 0===r?i:n.d2l(i,0,r)},d.getYat=function(t,e,r,n){var i=s(this.data.y)?s(this.data.y[0])?this.data.y[e][t]:this.data.y[e]:e;return void 0===r?i:n.d2l(i,0,r)},d.getZat=function(t,e,r,n){var i=this.data.z[e][t];return null===i&&this.data.connectgaps&&this.data._interpolatedZ&&(i=this.data._interpolatedZ[e][t]),void 0===r?i:n.d2l(i,0,r)},d.handlePick=function(t){if(t.object===this.surface){var e=(t.data.index[0]-1)/this.dataScaleX-1,r=(t.data.index[1]-1)/this.dataScaleY-1,n=Math.max(Math.min(Math.round(e),this.data.z[0].length-1),0),i=Math.max(Math.min(Math.round(r),this.data._ylength-1),0);t.index=[n,i],t.traceCoordinate=[this.getXat(n,i),this.getYat(n,i),this.getZat(n,i)],t.dataCoordinate=[this.getXat(n,i,this.data.xcalendar,this.scene.fullSceneLayout.xaxis),this.getYat(n,i,this.data.ycalendar,this.scene.fullSceneLayout.yaxis),this.getZat(n,i,this.data.zcalendar,this.scene.fullSceneLayout.zaxis)];for(var a=0;a<3;a++){var o=t.dataCoordinate[a];null!=o&&(t.dataCoordinate[a]*=this.scene.dataScale[a])}var s=this.data.hovertext||this.data.text;return Array.isArray(s)&&s[i]&&void 0!==s[i][n]?t.textLabel=s[i][n]:t.textLabel=s||\\\"\\\",t.data.dataCoordinate=t.dataCoordinate.slice(),this.surface.highlight(t.data),this.scene.glplot.spikes.position=t.dataCoordinate,!0}};var g=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,1279,1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489,1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,1597,1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,1669,1693,1697,1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801,1811,1823,1831,1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913,1931,1933,1949,1951,1973,1979,1987,1993,1997,1999,2003,2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,2113,2129,2131,2137,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239,2243,2251,2267,2269,2273,2281,2287,2293,2297,2309,2311,2333,2339,2341,2347,2351,2357,2371,2377,2381,2383,2389,2393,2399,2411,2417,2423,2437,2441,2447,2459,2467,2473,2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591,2593,2609,2617,2621,2633,2647,2657,2659,2663,2671,2677,2683,2687,2689,2693,2699,2707,2711,2713,2719,2729,2731,2741,2749,2753,2767,2777,2789,2791,2797,2801,2803,2819,2833,2837,2843,2851,2857,2861,2879,2887,2897,2903,2909,2917,2927,2939,2953,2957,2963,2969,2971,2999];function v(t,e){if(t<e)return 0;for(var r=0;0===Math.floor(t%e);)t/=e,r++;return r}function m(t){for(var e=[],r=0;r<g.length;r++){var n=g[r];e.push(v(t,n))}return e}function y(t){for(var e=m(t),r=t,n=0;n<g.length;n++)if(e[n]>0){r=g[n];break}return r}function x(t,e){if(!(t<1||e<1)){for(var r=m(t),n=m(e),i=1,a=0;a<g.length;a++)i*=Math.pow(g[a],Math.max(r[a],n[a]));return i}}d.calcXnums=function(t){var e,r=[];for(e=1;e<t;e++){var n=this.getXat(e-1,0),i=this.getXat(e,0);r[e-1]=i!==n&&null!=n&&null!=i?Math.abs(i-n):0}var a=0;for(e=1;e<t;e++)a+=r[e-1];for(e=1;e<t;e++)0===r[e-1]?r[e-1]=1:r[e-1]=Math.round(a/r[e-1]);return r},d.calcYnums=function(t){var e,r=[];for(e=1;e<t;e++){var n=this.getYat(0,e-1),i=this.getYat(0,e);r[e-1]=i!==n&&null!=n&&null!=i?Math.abs(i-n):0}var a=0;for(e=1;e<t;e++)a+=r[e-1];for(e=1;e<t;e++)0===r[e-1]?r[e-1]=1:r[e-1]=Math.round(a/r[e-1]);return r};var b=[1,2,4,6,12,24,36,48,60,120,180,240,360,720,840,1260],_=b[9],w=b[13];function k(t,e){for(var r=!1,n=0;n<t.length;n++)if(e===t[n]){r=!0;break}!1===r&&t.push(e)}d.estimateScale=function(t,e){for(var r=1+function(t){if(0!==t.length){for(var e=1,r=0;r<t.length;r++)e=x(e,t[r]);return e}}(0===e?this.calcXnums(t):this.calcYnums(t));r<_;)r*=2;for(;r>w;)r--,r/=y(r),++r<_&&(r=w);var n=Math.round(r/t);return n>1?n:1},d.refineCoords=function(t){for(var e=this.dataScaleX,r=this.dataScaleY,n=t[0].shape[0],o=t[0].shape[1],s=0|Math.floor(t[0].shape[0]*e+1),l=0|Math.floor(t[0].shape[1]*r+1),c=1+n+1,u=1+o+1,h=i(new Float32Array(c*u),[c,u]),f=0;f<t.length;++f){this.surface.padField(h,t[f]);var p=i(new Float32Array(s*l),[s,l]);a(p,h,[e,0,0,0,r,0,0,0,1]),t[f]=p}},d.setContourLevels=function(){var t,e,r,n=[[],[],[]],i=[!1,!1,!1],a=!1;for(t=0;t<3;++t)if(this.showContour[t]&&(a=!0,this.contourSize[t]>0&&null!==this.contourStart[t]&&null!==this.contourEnd[t]&&this.contourEnd[t]>this.contourStart[t]))for(i[t]=!0,e=this.contourStart[t];e<this.contourEnd[t];e+=this.contourSize[t])r=e*this.scene.dataScale[t],k(n[t],r);if(a){var o=[[],[],[]];for(t=0;t<3;++t)this.showContour[t]&&(o[t]=i[t]?n[t]:this.scene.contourLevels[t]);this.surface.update({levels:o})}},d.update=function(t){var e,r,n,a,s=this.scene,p=s.fullSceneLayout,d=this.surface,g=t.opacity,v=l(t,g),m=s.dataScale,y=t.z[0].length,x=t._ylength,b=s.contourLevels;this.data=t;var _=[];for(e=0;e<3;e++)for(_[e]=[],r=0;r<y;r++)_[e][r]=[];for(r=0;r<y;r++)for(n=0;n<x;n++)_[0][r][n]=this.getXat(r,n,t.xcalendar,p.xaxis),_[1][r][n]=this.getYat(r,n,t.ycalendar,p.yaxis),_[2][r][n]=this.getZat(r,n,t.zcalendar,p.zaxis);if(t.connectgaps)for(t._emptypoints=f(_[2]),h(_[2],t._emptypoints),t._interpolatedZ=[],r=0;r<y;r++)for(t._interpolatedZ[r]=[],n=0;n<x;n++)t._interpolatedZ[r][n]=_[2][r][n];for(e=0;e<3;e++)for(r=0;r<y;r++)for(n=0;n<x;n++)null==(a=_[e][r][n])?_[e][r][n]=NaN:a=_[e][r][n]*=m[e];for(e=0;e<3;e++)for(r=0;r<y;r++)for(n=0;n<x;n++)null!=(a=_[e][r][n])&&(this.minValues[e]>a&&(this.minValues[e]=a),this.maxValues[e]<a&&(this.maxValues[e]=a));for(e=0;e<3;e++)this.objectOffset[e]=.5*(this.minValues[e]+this.maxValues[e]);for(e=0;e<3;e++)for(r=0;r<y;r++)for(n=0;n<x;n++)null!=(a=_[e][r][n])&&(_[e][r][n]-=this.objectOffset[e]);var k=[i(new Float32Array(y*x),[y,x]),i(new Float32Array(y*x),[y,x]),i(new Float32Array(y*x),[y,x])];o(k[0],function(t,e){return _[0][t][e]}),o(k[1],function(t,e){return _[1][t][e]}),o(k[2],function(t,e){return _[2][t][e]}),_=[];var T={colormap:v,levels:[[],[],[]],showContour:[!0,!0,!0],showSurface:!t.hidesurface,contourProject:[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],contourWidth:[1,1,1],contourColor:[[1,1,1,1],[1,1,1,1],[1,1,1,1]],contourTint:[1,1,1],dynamicColor:[[1,1,1,1],[1,1,1,1],[1,1,1,1]],dynamicWidth:[1,1,1],dynamicTint:[1,1,1],opacity:t.opacity},A=u(t);if(T.intensityBounds=[A.min,A.max],t.surfacecolor){var M=i(new Float32Array(y*x),[y,x]);o(M,function(e,r){return t.surfacecolor[r][e]}),k.push(M)}else T.intensityBounds[0]*=m[2],T.intensityBounds[1]*=m[2];(w<k[0].shape[0]||w<k[0].shape[1])&&(this.refineData=!1),!0===this.refineData&&(this.dataScaleX=this.estimateScale(k[0].shape[0],0),this.dataScaleY=this.estimateScale(k[0].shape[1],1),1===this.dataScaleX&&1===this.dataScaleY||this.refineCoords(k)),t.surfacecolor&&(T.intensity=k.pop());var S=[!0,!0,!0],E=[\\\"x\\\",\\\"y\\\",\\\"z\\\"];for(e=0;e<3;++e){var C=t.contours[E[e]];S[e]=C.highlight,T.showContour[e]=C.show||C.highlight,T.showContour[e]&&(T.contourProject[e]=[C.project.x,C.project.y,C.project.z],C.show?(this.showContour[e]=!0,T.levels[e]=b[e],d.highlightColor[e]=T.contourColor[e]=c(C.color),C.usecolormap?d.highlightTint[e]=T.contourTint[e]=0:d.highlightTint[e]=T.contourTint[e]=1,T.contourWidth[e]=C.width,this.contourStart[e]=C.start,this.contourEnd[e]=C.end,this.contourSize[e]=C.size):(this.showContour[e]=!1,this.contourStart[e]=null,this.contourEnd[e]=null,this.contourSize[e]=0),C.highlight&&(T.dynamicColor[e]=c(C.highlightcolor),T.dynamicWidth[e]=C.highlightwidth))}(function(t){var e=t[0].rgb,r=t[t.length-1].rgb;return e[0]===r[0]&&e[1]===r[1]&&e[2]===r[2]&&e[3]===r[3]})(v)&&(T.vertexColor=!0),T.objectOffset=this.objectOffset,T.coords=k,d.update(T),d.visible=t.visible,d.enableDynamic=S,d.enableHighlight=S,d.snapToData=!0,\\\"lighting\\\"in t&&(d.ambientLight=t.lighting.ambient,d.diffuseLight=t.lighting.diffuse,d.specularLight=t.lighting.specular,d.roughness=t.lighting.roughness,d.fresnel=t.lighting.fresnel),\\\"lightposition\\\"in t&&(d.lightPosition=[t.lightposition.x,t.lightposition.y,t.lightposition.z]),g&&g<1&&(d.supportsTransparency=!0)},d.dispose=function(){this.scene.glplot.remove(this.surface),this.surface.dispose()},e.exports=function(t,e){var r=t.glplot.gl,i=n({gl:r}),a=new p(t,i,e.uid);return i._trace=a,a.update(e),t.glplot.add(i),a}},{\\\"../../components/colorscale\\\":605,\\\"../../lib\\\":719,\\\"../../lib/gl_format_color\\\":716,\\\"../../lib/str2rgbarray\\\":742,\\\"../heatmap/find_empties\\\":1007,\\\"../heatmap/interp2d\\\":1010,\\\"gl-surface3d\\\":316,ndarray:450,\\\"ndarray-fill\\\":440,\\\"ndarray-homography\\\":442}],1228:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../registry\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../components/colorscale/defaults\\\"),o=t(\\\"./attributes\\\");function s(t,e,r){e in t&&!(r in t)&&(t[r]=t[e])}e.exports=function(t,e,r,l){var c,u;function h(r,n){return i.coerce(t,e,o,r,n)}var f=h(\\\"x\\\"),p=h(\\\"y\\\"),d=h(\\\"z\\\");if(!d||!d.length||f&&f.length<1||p&&p.length<1)e.visible=!1;else{e._xlength=Array.isArray(f)&&i.isArrayOrTypedArray(f[0])?d.length:d[0].length,e._ylength=d.length,n.getComponentMethod(\\\"calendars\\\",\\\"handleTraceDefaults\\\")(t,e,[\\\"x\\\",\\\"y\\\",\\\"z\\\"],l),h(\\\"text\\\"),h(\\\"hovertext\\\"),h(\\\"hovertemplate\\\"),[\\\"lighting.ambient\\\",\\\"lighting.diffuse\\\",\\\"lighting.specular\\\",\\\"lighting.roughness\\\",\\\"lighting.fresnel\\\",\\\"lightposition.x\\\",\\\"lightposition.y\\\",\\\"lightposition.z\\\",\\\"hidesurface\\\",\\\"connectgaps\\\",\\\"opacity\\\"].forEach(function(t){h(t)});var g=h(\\\"surfacecolor\\\"),v=[\\\"x\\\",\\\"y\\\",\\\"z\\\"];for(c=0;c<3;++c){var m=\\\"contours.\\\"+v[c],y=h(m+\\\".show\\\"),x=h(m+\\\".highlight\\\");if(y||x)for(u=0;u<3;++u)h(m+\\\".project.\\\"+v[u]);y&&(h(m+\\\".color\\\"),h(m+\\\".width\\\"),h(m+\\\".usecolormap\\\")),x&&(h(m+\\\".highlightcolor\\\"),h(m+\\\".highlightwidth\\\")),h(m+\\\".start\\\"),h(m+\\\".end\\\"),h(m+\\\".size\\\")}g||(s(t,\\\"zmin\\\",\\\"cmin\\\"),s(t,\\\"zmax\\\",\\\"cmax\\\"),s(t,\\\"zauto\\\",\\\"cauto\\\")),a(t,e,l,h,{prefix:\\\"\\\",cLetter:\\\"c\\\"}),e._length=null}}},{\\\"../../components/colorscale/defaults\\\":603,\\\"../../lib\\\":719,\\\"../../registry\\\":847,\\\"./attributes\\\":1225}],1229:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),colorbar:{min:\\\"cmin\\\",max:\\\"cmax\\\"},calc:t(\\\"./calc\\\"),plot:t(\\\"./convert\\\"),moduleType:\\\"trace\\\",name:\\\"surface\\\",basePlotModule:t(\\\"../../plots/gl3d\\\"),categories:[\\\"gl3d\\\",\\\"2dMap\\\",\\\"noOpacity\\\"],meta:{}}},{\\\"../../plots/gl3d\\\":807,\\\"./attributes\\\":1225,\\\"./calc\\\":1226,\\\"./convert\\\":1227,\\\"./defaults\\\":1228}],1230:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/annotations/attributes\\\"),i=t(\\\"../../lib/extend\\\").extendFlat,a=t(\\\"../../plot_api/edit_types\\\").overrideAll,o=t(\\\"../../plots/font_attributes\\\"),s=t(\\\"../../plots/domain\\\").attributes;t(\\\"../../constants/docs\\\").FORMAT_LINK;(e.exports=a({domain:s({name:\\\"table\\\",trace:!0}),columnwidth:{valType:\\\"number\\\",arrayOk:!0,dflt:null},columnorder:{valType:\\\"data_array\\\"},header:{values:{valType:\\\"data_array\\\",dflt:[]},format:{valType:\\\"data_array\\\",dflt:[]},prefix:{valType:\\\"string\\\",arrayOk:!0,dflt:null},suffix:{valType:\\\"string\\\",arrayOk:!0,dflt:null},height:{valType:\\\"number\\\",dflt:28},align:i({},n.align,{arrayOk:!0}),line:{width:{valType:\\\"number\\\",arrayOk:!0,dflt:1},color:{valType:\\\"color\\\",arrayOk:!0,dflt:\\\"grey\\\"}},fill:{color:{valType:\\\"color\\\",arrayOk:!0,dflt:\\\"white\\\"}},font:i({},o({arrayOk:!0}))},cells:{values:{valType:\\\"data_array\\\",dflt:[]},format:{valType:\\\"data_array\\\",dflt:[]},prefix:{valType:\\\"string\\\",arrayOk:!0,dflt:null},suffix:{valType:\\\"string\\\",arrayOk:!0,dflt:null},height:{valType:\\\"number\\\",dflt:20},align:i({},n.align,{arrayOk:!0}),line:{width:{valType:\\\"number\\\",arrayOk:!0,dflt:1},color:{valType:\\\"color\\\",arrayOk:!0,dflt:\\\"grey\\\"}},fill:{color:{valType:\\\"color\\\",arrayOk:!0,dflt:\\\"white\\\"}},font:i({},o({arrayOk:!0}))}},\\\"calc\\\",\\\"from-root\\\")).transforms=void 0},{\\\"../../components/annotations/attributes\\\":576,\\\"../../constants/docs\\\":690,\\\"../../lib/extend\\\":710,\\\"../../plot_api/edit_types\\\":750,\\\"../../plots/domain\\\":792,\\\"../../plots/font_attributes\\\":793}],1231:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/get_data\\\").getModuleCalcData,i=t(\\\"./plot\\\");r.name=\\\"table\\\",r.plot=function(t){var e=n(t.calcdata,\\\"table\\\")[0];e.length&&i(t,e)},r.clean=function(t,e,r,n){var i=n._has&&n._has(\\\"table\\\"),a=e._has&&e._has(\\\"table\\\");i&&!a&&n._paperdiv.selectAll(\\\".table\\\").remove()}},{\\\"../../plots/get_data\\\":802,\\\"./plot\\\":1238}],1232:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib/gup\\\").wrap;e.exports=function(){return n({})}},{\\\"../../lib/gup\\\":717}],1233:[function(t,e,r){\\\"use strict\\\";e.exports={cellPad:8,columnExtentOffset:10,columnTitleOffset:28,emptyHeaderHeight:16,latexCheck:/^\\\\$.*\\\\$$/,goldenRatio:1.618,lineBreaker:\\\"<br>\\\",maxDimensionCount:60,overdrag:45,releaseTransitionDuration:120,releaseTransitionEase:\\\"cubic-out\\\",scrollbarCaptureWidth:18,scrollbarHideDelay:1e3,scrollbarHideDuration:1e3,scrollbarOffset:5,scrollbarWidth:8,transitionDuration:100,transitionEase:\\\"cubic-out\\\",uplift:5,wrapSpacer:\\\" \\\",wrapSplitCharacter:\\\" \\\",cn:{table:\\\"table\\\",tableControlView:\\\"table-control-view\\\",scrollBackground:\\\"scroll-background\\\",yColumn:\\\"y-column\\\",columnBlock:\\\"column-block\\\",scrollAreaClip:\\\"scroll-area-clip\\\",scrollAreaClipRect:\\\"scroll-area-clip-rect\\\",columnBoundary:\\\"column-boundary\\\",columnBoundaryClippath:\\\"column-boundary-clippath\\\",columnBoundaryRect:\\\"column-boundary-rect\\\",columnCells:\\\"column-cells\\\",columnCell:\\\"column-cell\\\",cellRect:\\\"cell-rect\\\",cellText:\\\"cell-text\\\",cellTextHolder:\\\"cell-text-holder\\\",scrollbarKit:\\\"scrollbar-kit\\\",scrollbar:\\\"scrollbar\\\",scrollbarSlider:\\\"scrollbar-slider\\\",scrollbarGlyph:\\\"scrollbar-glyph\\\",scrollbarCaptureZone:\\\"scrollbar-capture-zone\\\"}}},{}],1234:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./constants\\\"),i=t(\\\"../../lib/extend\\\").extendFlat,a=t(\\\"fast-isnumeric\\\");function o(t){if(Array.isArray(t)){for(var e=0,r=0;r<t.length;r++)e=Math.max(e,o(t[r]));return e}return t}function s(t,e){return t+e}function l(t){var e,r=t.slice(),n=1/0,i=0;for(e=0;e<r.length;e++)Array.isArray(r[e])||(r[e]=[r[e]]),n=Math.min(n,r[e].length),i=Math.max(i,r[e].length);if(n!==i)for(e=0;e<r.length;e++){var a=i-r[e].length;a&&(r[e]=r[e].concat(c(a)))}return r}function c(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=\\\"\\\";return e}function u(t){return t.calcdata.columns.reduce(function(e,r){return r.xIndex<t.xIndex?e+r.columnWidth:e},0)}function h(t,e){return Object.keys(t).map(function(r){return i({},t[r],{auxiliaryBlocks:e})})}function f(t,e){for(var r,n={},i=0,a=0,o={firstRowIndex:null,lastRowIndex:null,rows:[]},s=0,l=0,c=0;c<t.length;c++)r=t[c],o.rows.push({rowIndex:c,rowHeight:r}),((a+=r)>=e||c===t.length-1)&&(n[i]=o,o.key=l++,o.firstRowIndex=s,o.lastRowIndex=c,o={firstRowIndex:null,lastRowIndex:null,rows:[]},i+=a,s=c+1,a=0);return n}e.exports=function(t,e){var r=l(e.cells.values),p=function(t){return t.slice(e.header.values.length,t.length)},d=l(e.header.values);d.length&&!d[0].length&&(d[0]=[\\\"\\\"],d=l(d));var g=d.concat(p(r).map(function(){return c((d[0]||[\\\"\\\"]).length)})),v=e.domain,m=Math.floor(t._fullLayout._size.w*(v.x[1]-v.x[0])),y=Math.floor(t._fullLayout._size.h*(v.y[1]-v.y[0])),x=e.header.values.length?g[0].map(function(){return e.header.height}):[n.emptyHeaderHeight],b=r.length?r[0].map(function(){return e.cells.height}):[],_=x.reduce(s,0),w=f(b,y-_+n.uplift),k=h(f(x,_),[]),T=h(w,k),A={},M=e._fullInput.columnorder.concat(p(r.map(function(t,e){return e}))),S=g.map(function(t,r){var n=Array.isArray(e.columnwidth)?e.columnwidth[Math.min(r,e.columnwidth.length-1)]:e.columnwidth;return a(n)?Number(n):1}),E=S.reduce(s,0);S=S.map(function(t){return t/E*m});var C=Math.max(o(e.header.line.width),o(e.cells.line.width)),L={key:e.uid+t._context.staticPlot,translateX:v.x[0]*t._fullLayout._size.w,translateY:t._fullLayout._size.h*(1-v.y[1]),size:t._fullLayout._size,width:m,maxLineWidth:C,height:y,columnOrder:M,groupHeight:y,rowBlocks:T,headerRowBlocks:k,scrollY:0,cells:i({},e.cells,{values:r}),headerCells:i({},e.header,{values:g}),gdColumns:g.map(function(t){return t[0]}),gdColumnsOriginalOrder:g.map(function(t){return t[0]}),prevPages:[0,0],scrollbarState:{scrollbarScrollInProgress:!1},columns:g.map(function(t,e){var r=A[t];return A[t]=(r||0)+1,{key:t+\\\"__\\\"+A[t],label:t,specIndex:e,xIndex:M[e],xScale:u,x:void 0,calcdata:void 0,columnWidth:S[e]}})};return L.columns.forEach(function(t){t.calcdata=L,t.x=u(t)}),L}},{\\\"../../lib/extend\\\":710,\\\"./constants\\\":1233,\\\"fast-isnumeric\\\":225}],1235:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib/extend\\\").extendFlat;r.splitToPanels=function(t){var e=[0,0],r=n({},t,{key:\\\"header\\\",type:\\\"header\\\",page:0,prevPages:e,currentRepaint:[null,null],dragHandle:!0,values:t.calcdata.headerCells.values[t.specIndex],rowBlocks:t.calcdata.headerRowBlocks,calcdata:n({},t.calcdata,{cells:t.calcdata.headerCells})});return[n({},t,{key:\\\"cells1\\\",type:\\\"cells\\\",page:0,prevPages:e,currentRepaint:[null,null],dragHandle:!1,values:t.calcdata.cells.values[t.specIndex],rowBlocks:t.calcdata.rowBlocks}),n({},t,{key:\\\"cells2\\\",type:\\\"cells\\\",page:1,prevPages:e,currentRepaint:[null,null],dragHandle:!1,values:t.calcdata.cells.values[t.specIndex],rowBlocks:t.calcdata.rowBlocks}),r]},r.splitToCells=function(t){var e=function(t){var e=t.rowBlocks[t.page],r=e?e.rows[0].rowIndex:0,n=e?r+e.rows.length:0;return[r,n]}(t);return(t.values||[]).slice(e[0],e[1]).map(function(r,n){return{keyWithinBlock:n+(\\\"string\\\"==typeof r&&r.match(/[<$&> ]/)?\\\"_keybuster_\\\"+Math.random():\\\"\\\"),key:e[0]+n,column:t,calcdata:t.calcdata,page:t.page,rowBlocks:t.rowBlocks,value:r}})}},{\\\"../../lib/extend\\\":710}],1236:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./attributes\\\"),a=t(\\\"../../plots/domain\\\").defaults;e.exports=function(t,e,r,o){function s(r,a){return n.coerce(t,e,i,r,a)}a(e,o,s),s(\\\"columnwidth\\\"),s(\\\"header.values\\\"),s(\\\"header.format\\\"),s(\\\"header.align\\\"),s(\\\"header.prefix\\\"),s(\\\"header.suffix\\\"),s(\\\"header.height\\\"),s(\\\"header.line.width\\\"),s(\\\"header.line.color\\\"),s(\\\"header.fill.color\\\"),n.coerceFont(s,\\\"header.font\\\",n.extendFlat({},o.font)),function(t,e){for(var r=t.columnorder||[],n=t.header.values.length,i=r.slice(0,n),a=i.slice().sort(function(t,e){return t-e}),o=i.map(function(t){return a.indexOf(t)}),s=o.length;s<n;s++)o.push(s);e(\\\"columnorder\\\",o)}(e,s),s(\\\"cells.values\\\"),s(\\\"cells.format\\\"),s(\\\"cells.align\\\"),s(\\\"cells.prefix\\\"),s(\\\"cells.suffix\\\"),s(\\\"cells.height\\\"),s(\\\"cells.line.width\\\"),s(\\\"cells.line.color\\\"),s(\\\"cells.fill.color\\\"),n.coerceFont(s,\\\"cells.font\\\",n.extendFlat({},o.font)),e._length=null}},{\\\"../../lib\\\":719,\\\"../../plots/domain\\\":792,\\\"./attributes\\\":1230}],1237:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),calc:t(\\\"./calc\\\"),plot:t(\\\"./plot\\\"),moduleType:\\\"trace\\\",name:\\\"table\\\",basePlotModule:t(\\\"./base_plot\\\"),categories:[\\\"noOpacity\\\"],meta:{}}},{\\\"./attributes\\\":1230,\\\"./base_plot\\\":1231,\\\"./calc\\\":1232,\\\"./defaults\\\":1236,\\\"./plot\\\":1238}],1238:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"./constants\\\"),i=t(\\\"d3\\\"),a=t(\\\"../../lib/gup\\\"),o=t(\\\"../../components/drawing\\\"),s=t(\\\"../../lib/svg_text_utils\\\"),l=t(\\\"../../lib\\\").raiseToTop,c=t(\\\"../../lib\\\").cancelTransition,u=t(\\\"./data_preparation_helper\\\"),h=t(\\\"./data_split_helpers\\\"),f=t(\\\"../../components/color\\\");function p(t){return Math.ceil(t.calcdata.maxLineWidth/2)}function d(t,e){return\\\"clip\\\"+t._fullLayout._uid+\\\"_scrollAreaBottomClip_\\\"+e.key}function g(t,e){return\\\"clip\\\"+t._fullLayout._uid+\\\"_columnBoundaryClippath_\\\"+e.calcdata.key+\\\"_\\\"+e.specIndex}function v(t){return[].concat.apply([],t.map(function(t){return t})).map(function(t){return t.__data__})}function m(t,e,r){var o=t.selectAll(\\\".\\\"+n.cn.scrollbarKit).data(a.repeat,a.keyFun);o.enter().append(\\\"g\\\").classed(n.cn.scrollbarKit,!0).style(\\\"shape-rendering\\\",\\\"geometricPrecision\\\"),o.each(function(t){var e=t.scrollbarState;e.totalHeight=function(t){var e=t.rowBlocks;return z(e,e.length-1)+(e.length?I(e[e.length-1],1/0):1)}(t),e.scrollableAreaHeight=t.groupHeight-A(t),e.currentlyVisibleHeight=Math.min(e.totalHeight,e.scrollableAreaHeight),e.ratio=e.currentlyVisibleHeight/e.totalHeight,e.barLength=Math.max(e.ratio*e.currentlyVisibleHeight,n.goldenRatio*n.scrollbarWidth),e.barWiggleRoom=e.currentlyVisibleHeight-e.barLength,e.wiggleRoom=Math.max(0,e.totalHeight-e.scrollableAreaHeight),e.topY=0===e.barWiggleRoom?0:t.scrollY/e.wiggleRoom*e.barWiggleRoom,e.bottomY=e.topY+e.barLength,e.dragMultiplier=e.wiggleRoom/e.barWiggleRoom}).attr(\\\"transform\\\",function(t){return\\\"translate(\\\"+(t.width+n.scrollbarWidth/2+n.scrollbarOffset)+\\\" \\\"+A(t)+\\\")\\\"});var s=o.selectAll(\\\".\\\"+n.cn.scrollbar).data(a.repeat,a.keyFun);s.enter().append(\\\"g\\\").classed(n.cn.scrollbar,!0);var l=s.selectAll(\\\".\\\"+n.cn.scrollbarSlider).data(a.repeat,a.keyFun);l.enter().append(\\\"g\\\").classed(n.cn.scrollbarSlider,!0),l.attr(\\\"transform\\\",function(t){return\\\"translate(0 \\\"+(t.scrollbarState.topY||0)+\\\")\\\"});var c=l.selectAll(\\\".\\\"+n.cn.scrollbarGlyph).data(a.repeat,a.keyFun);c.enter().append(\\\"line\\\").classed(n.cn.scrollbarGlyph,!0).attr(\\\"stroke\\\",\\\"black\\\").attr(\\\"stroke-width\\\",n.scrollbarWidth).attr(\\\"stroke-linecap\\\",\\\"round\\\").attr(\\\"y1\\\",n.scrollbarWidth/2),c.attr(\\\"y2\\\",function(t){return t.scrollbarState.barLength-n.scrollbarWidth/2}).attr(\\\"stroke-opacity\\\",function(t){return t.columnDragInProgress||!t.scrollbarState.barWiggleRoom||r?0:.4}),c.transition().delay(0).duration(0),c.transition().delay(n.scrollbarHideDelay).duration(n.scrollbarHideDuration).attr(\\\"stroke-opacity\\\",0);var u=s.selectAll(\\\".\\\"+n.cn.scrollbarCaptureZone).data(a.repeat,a.keyFun);u.enter().append(\\\"line\\\").classed(n.cn.scrollbarCaptureZone,!0).attr(\\\"stroke\\\",\\\"white\\\").attr(\\\"stroke-opacity\\\",.01).attr(\\\"stroke-width\\\",n.scrollbarCaptureWidth).attr(\\\"stroke-linecap\\\",\\\"butt\\\").attr(\\\"y1\\\",0).on(\\\"mousedown\\\",function(r){var n=i.event.y,a=this.getBoundingClientRect(),o=r.scrollbarState,s=n-a.top,l=i.scale.linear().domain([0,o.scrollableAreaHeight]).range([0,o.totalHeight]).clamp(!0);o.topY<=s&&s<=o.bottomY||S(e,t,null,l(s-o.barLength/2))(r)}).call(i.behavior.drag().origin(function(t){return i.event.stopPropagation(),t.scrollbarState.scrollbarScrollInProgress=!0,t}).on(\\\"drag\\\",S(e,t)).on(\\\"dragend\\\",function(){})),u.attr(\\\"y2\\\",function(t){return t.scrollbarState.scrollableAreaHeight}),e._context.staticPlot&&(c.remove(),u.remove())}function y(t,e,r,s){var l=function(t){var e=t.selectAll(\\\".\\\"+n.cn.columnCell).data(h.splitToCells,function(t){return t.keyWithinBlock});return e.enter().append(\\\"g\\\").classed(n.cn.columnCell,!0),e.exit().remove(),e}(function(t){var e=t.selectAll(\\\".\\\"+n.cn.columnCells).data(a.repeat,a.keyFun);return e.enter().append(\\\"g\\\").classed(n.cn.columnCells,!0),e.exit().remove(),e}(r));!function(t){t.each(function(t,e){var r=t.calcdata.cells.font,n=t.column.specIndex,i={size:_(r.size,n,e),color:_(r.color,n,e),family:_(r.family,n,e)};t.rowNumber=t.key,t.align=_(t.calcdata.cells.align,n,e),t.cellBorderWidth=_(t.calcdata.cells.line.width,n,e),t.font=i})}(l),function(t){t.attr(\\\"width\\\",function(t){return t.column.columnWidth}).attr(\\\"stroke-width\\\",function(t){return t.cellBorderWidth}).each(function(t){var e=i.select(this);f.stroke(e,_(t.calcdata.cells.line.color,t.column.specIndex,t.rowNumber)),f.fill(e,_(t.calcdata.cells.fill.color,t.column.specIndex,t.rowNumber))})}(function(t){var e=t.selectAll(\\\".\\\"+n.cn.cellRect).data(a.repeat,function(t){return t.keyWithinBlock});return e.enter().append(\\\"rect\\\").classed(n.cn.cellRect,!0),e}(l));var c=function(t){var e=t.selectAll(\\\".\\\"+n.cn.cellText).data(a.repeat,function(t){return t.keyWithinBlock});return e.enter().append(\\\"text\\\").classed(n.cn.cellText,!0).style(\\\"cursor\\\",function(){return\\\"auto\\\"}).on(\\\"mousedown\\\",function(){i.event.stopPropagation()}),e}(function(t){var e=t.selectAll(\\\".\\\"+n.cn.cellTextHolder).data(a.repeat,function(t){return t.keyWithinBlock});return e.enter().append(\\\"g\\\").classed(n.cn.cellTextHolder,!0).style(\\\"shape-rendering\\\",\\\"geometricPrecision\\\"),e}(l));!function(t){t.each(function(t){o.font(i.select(this),t.font)})}(c),x(c,e,s,t),O(l)}function x(t,e,r,a){t.text(function(t){var e=t.column.specIndex,r=t.rowNumber,a=t.value,o=\\\"string\\\"==typeof a,s=o&&a.match(/<br>/i),l=!o||s;t.mayHaveMarkup=o&&a.match(/[<&>]/);var c,u=\\\"string\\\"==typeof(c=a)&&c.match(n.latexCheck);t.latex=u;var h,f,p=u?\\\"\\\":_(t.calcdata.cells.prefix,e,r)||\\\"\\\",d=u?\\\"\\\":_(t.calcdata.cells.suffix,e,r)||\\\"\\\",g=u?null:_(t.calcdata.cells.format,e,r)||null,v=p+(g?i.format(g)(t.value):t.value)+d;if(t.wrappingNeeded=!t.wrapped&&!l&&!u&&(h=b(v)),t.cellHeightMayIncrease=s||u||t.mayHaveMarkup||(void 0===h?b(v):h),t.needsConvertToTspans=t.mayHaveMarkup||t.wrappingNeeded||t.latex,t.wrappingNeeded){var m=(\\\" \\\"===n.wrapSplitCharacter?v.replace(/<a href=/gi,\\\"<a_href=\\\"):v).split(n.wrapSplitCharacter),y=\\\" \\\"===n.wrapSplitCharacter?m.map(function(t){return t.replace(/<a_href=/gi,\\\"<a href=\\\")}):m;t.fragments=y.map(function(t){return{text:t,width:null}}),t.fragments.push({fragment:n.wrapSpacer,width:null}),f=y.join(n.lineBreaker)+n.lineBreaker+n.wrapSpacer}else delete t.fragments,f=v;return f}).attr(\\\"dy\\\",function(t){return t.needsConvertToTspans?0:\\\"0.75em\\\"}).each(function(t){var o=i.select(this),l=t.wrappingNeeded?C:L;t.needsConvertToTspans?s.convertToTspans(o,a,l(r,this,e,a,t)):i.select(this.parentNode).attr(\\\"transform\\\",function(t){return\\\"translate(\\\"+P(t)+\\\" \\\"+n.cellPad+\\\")\\\"}).attr(\\\"text-anchor\\\",function(t){return{left:\\\"start\\\",center:\\\"middle\\\",right:\\\"end\\\"}[t.align]})})}function b(t){return-1!==t.indexOf(n.wrapSplitCharacter)}function _(t,e,r){if(Array.isArray(t)){var n=t[Math.min(e,t.length-1)];return Array.isArray(n)?n[Math.min(r,n.length-1)]:n}return t}function w(t,e,r){t.transition().ease(n.releaseTransitionEase).duration(n.releaseTransitionDuration).attr(\\\"transform\\\",\\\"translate(\\\"+e.x+\\\" \\\"+r+\\\")\\\")}function k(t){return\\\"cells\\\"===t.type}function T(t){return\\\"header\\\"===t.type}function A(t){return(t.rowBlocks.length?t.rowBlocks[0].auxiliaryBlocks:[]).reduce(function(t,e){return t+I(e,1/0)},0)}function M(t,e,r){var n=v(e)[0];if(void 0!==n){var i=n.rowBlocks,a=n.calcdata,o=z(i,i.length),s=n.calcdata.groupHeight-A(n),l=a.scrollY=Math.max(0,Math.min(o-s,a.scrollY)),c=function(t,e,r){for(var n=[],i=0,a=0;a<t.length;a++){for(var o=t[a],s=o.rows,l=0,c=0;c<s.length;c++)l+=s[c].rowHeight;o.allRowsHeight=l,e<i+l&&e+r>i&&n.push(a),i+=l}return n}(i,l,s);1===c.length&&(c[0]===i.length-1?c.unshift(c[0]-1):c.push(c[0]+1)),c[0]%2&&c.reverse(),e.each(function(t,e){t.page=c[e],t.scrollY=l}),e.attr(\\\"transform\\\",function(t){return\\\"translate(0 \\\"+(z(t.rowBlocks,t.page)-t.scrollY)+\\\")\\\"}),t&&(E(t,r,e,c,n.prevPages,n,0),E(t,r,e,c,n.prevPages,n,1),m(r,t))}}function S(t,e,r,a){return function(o){var s=o.calcdata?o.calcdata:o,l=e.filter(function(t){return s.key===t.key}),c=r||s.scrollbarState.dragMultiplier,u=s.scrollY;s.scrollY=void 0===a?s.scrollY+c*i.event.dy:a;var h=l.selectAll(\\\".\\\"+n.cn.yColumn).selectAll(\\\".\\\"+n.cn.columnBlock).filter(k);return M(t,h,l),s.scrollY===u}}function E(t,e,r,n,i,a,o){n[o]!==i[o]&&(clearTimeout(a.currentRepaint[o]),a.currentRepaint[o]=setTimeout(function(){var a=r.filter(function(t,e){return e===o&&n[e]!==i[e]});y(t,e,a,r),i[o]=n[o]}))}function C(t,e,r,a){return function(){var o=i.select(e.parentNode);o.each(function(t){var e=t.fragments;o.selectAll(\\\"tspan.line\\\").each(function(t,r){e[r].width=this.getComputedTextLength()});var r,i,a=e[e.length-1].width,s=e.slice(0,-1),l=[],c=0,u=t.column.columnWidth-2*n.cellPad;for(t.value=\\\"\\\";s.length;)c+(i=(r=s.shift()).width+a)>u&&(t.value+=l.join(n.wrapSpacer)+n.lineBreaker,l=[],c=0),l.push(r.text),c+=i;c&&(t.value+=l.join(n.wrapSpacer)),t.wrapped=!0}),o.selectAll(\\\"tspan.line\\\").remove(),x(o.select(\\\".\\\"+n.cn.cellText),r,t,a),i.select(e.parentNode.parentNode).call(O)}}function L(t,e,r,a,o){return function(){if(!o.settledY){var s=i.select(e.parentNode),l=R(o),c=o.key-l.firstRowIndex,u=l.rows[c].rowHeight,h=o.cellHeightMayIncrease?e.parentNode.getBoundingClientRect().height+2*n.cellPad:u,f=Math.max(h,u);f-l.rows[c].rowHeight&&(l.rows[c].rowHeight=f,t.selectAll(\\\".\\\"+n.cn.columnCell).call(O),M(null,t.filter(k),0),m(r,a,!0)),s.attr(\\\"transform\\\",function(){var t=this.parentNode.getBoundingClientRect(),e=i.select(this.parentNode).select(\\\".\\\"+n.cn.cellRect).node().getBoundingClientRect(),r=this.transform.baseVal.consolidate(),a=e.top-t.top+(r?r.matrix.f:n.cellPad);return\\\"translate(\\\"+P(o,i.select(this.parentNode).select(\\\".\\\"+n.cn.cellTextHolder).node().getBoundingClientRect().width)+\\\" \\\"+a+\\\")\\\"}),o.settledY=!0}}}function P(t,e){switch(t.align){case\\\"left\\\":return n.cellPad;case\\\"right\\\":return t.column.columnWidth-(e||0)-n.cellPad;case\\\"center\\\":return(t.column.columnWidth-(e||0))/2;default:return n.cellPad}}function O(t){t.attr(\\\"transform\\\",function(t){var e=t.rowBlocks[0].auxiliaryBlocks.reduce(function(t,e){return t+I(e,1/0)},0);return\\\"translate(0 \\\"+(I(R(t),t.key)+e)+\\\")\\\"}).selectAll(\\\".\\\"+n.cn.cellRect).attr(\\\"height\\\",function(t){return(e=R(t),r=t.key,e.rows[r-e.firstRowIndex]).rowHeight;var e,r})}function z(t,e){for(var r=0,n=e-1;n>=0;n--)r+=D(t[n]);return r}function I(t,e){for(var r=0,n=0;n<t.rows.length&&t.rows[n].rowIndex<e;n++)r+=t.rows[n].rowHeight;return r}function D(t){var e=t.allRowsHeight;if(void 0!==e)return e;for(var r=0,n=0;n<t.rows.length;n++)r+=t.rows[n].rowHeight;return t.allRowsHeight=r,r}function R(t){return t.rowBlocks[t.page]}e.exports=function(t,e){var r=!t._context.staticPlot,s=t._fullLayout._paper.selectAll(\\\".\\\"+n.cn.table).data(e.map(function(e){var r=a.unwrap(e).trace;return u(t,r)}),a.keyFun);s.exit().remove(),s.enter().append(\\\"g\\\").classed(n.cn.table,!0).attr(\\\"overflow\\\",\\\"visible\\\").style(\\\"box-sizing\\\",\\\"content-box\\\").style(\\\"position\\\",\\\"absolute\\\").style(\\\"left\\\",0).style(\\\"overflow\\\",\\\"visible\\\").style(\\\"shape-rendering\\\",\\\"crispEdges\\\").style(\\\"pointer-events\\\",\\\"all\\\"),s.attr(\\\"width\\\",function(t){return t.width+t.size.l+t.size.r}).attr(\\\"height\\\",function(t){return t.height+t.size.t+t.size.b}).attr(\\\"transform\\\",function(t){return\\\"translate(\\\"+t.translateX+\\\",\\\"+t.translateY+\\\")\\\"});var f=s.selectAll(\\\".\\\"+n.cn.tableControlView).data(a.repeat,a.keyFun),x=f.enter().append(\\\"g\\\").classed(n.cn.tableControlView,!0).style(\\\"box-sizing\\\",\\\"content-box\\\");r&&x.on(\\\"mousemove\\\",function(e){f.filter(function(t){return e===t}).call(m,t)}).on(\\\"mousewheel\\\",function(e){if(!e.scrollbarState.wheeling){e.scrollbarState.wheeling=!0;var r=e.scrollY+i.event.deltaY;S(t,f,null,r)(e)||(i.event.stopPropagation(),i.event.preventDefault()),e.scrollbarState.wheeling=!1}}).call(m,t,!0),f.attr(\\\"transform\\\",function(t){return\\\"translate(\\\"+t.size.l+\\\" \\\"+t.size.t+\\\")\\\"});var b=f.selectAll(\\\".\\\"+n.cn.scrollBackground).data(a.repeat,a.keyFun);b.enter().append(\\\"rect\\\").classed(n.cn.scrollBackground,!0).attr(\\\"fill\\\",\\\"none\\\"),b.attr(\\\"width\\\",function(t){return t.width}).attr(\\\"height\\\",function(t){return t.height}),f.each(function(e){o.setClipUrl(i.select(this),d(t,e),t)});var _=f.selectAll(\\\".\\\"+n.cn.yColumn).data(function(t){return t.columns},a.keyFun);_.enter().append(\\\"g\\\").classed(n.cn.yColumn,!0),_.exit().remove(),_.attr(\\\"transform\\\",function(t){return\\\"translate(\\\"+t.x+\\\" 0)\\\"}),r&&_.call(i.behavior.drag().origin(function(e){return w(i.select(this),e,-n.uplift),l(this),e.calcdata.columnDragInProgress=!0,m(f.filter(function(t){return e.calcdata.key===t.key}),t),e}).on(\\\"drag\\\",function(t){var e=i.select(this),r=function(e){return(t===e?i.event.x:e.x)+e.columnWidth/2};t.x=Math.max(-n.overdrag,Math.min(t.calcdata.width+n.overdrag-t.columnWidth,i.event.x)),v(_).filter(function(e){return e.calcdata.key===t.calcdata.key}).sort(function(t,e){return r(t)-r(e)}).forEach(function(e,r){e.xIndex=r,e.x=t===e?e.x:e.xScale(e)}),_.filter(function(e){return t!==e}).transition().ease(n.transitionEase).duration(n.transitionDuration).attr(\\\"transform\\\",function(t){return\\\"translate(\\\"+t.x+\\\" 0)\\\"}),e.call(c).attr(\\\"transform\\\",\\\"translate(\\\"+t.x+\\\" -\\\"+n.uplift+\\\" )\\\")}).on(\\\"dragend\\\",function(e){var r=i.select(this),n=e.calcdata;e.x=e.xScale(e),e.calcdata.columnDragInProgress=!1,w(r,e,0),function(t,e,r){var n=e.gdColumnsOriginalOrder;e.gdColumns.sort(function(t,e){return r[n.indexOf(t)]-r[n.indexOf(e)]}),e.columnorder=r,t.emit(\\\"plotly_restyle\\\")}(t,n,n.columns.map(function(t){return t.xIndex}))})),_.each(function(e){o.setClipUrl(i.select(this),g(t,e),t)});var A=_.selectAll(\\\".\\\"+n.cn.columnBlock).data(h.splitToPanels,a.keyFun);A.enter().append(\\\"g\\\").classed(n.cn.columnBlock,!0).attr(\\\"id\\\",function(t){return t.key}),A.style(\\\"cursor\\\",function(t){return t.dragHandle?\\\"ew-resize\\\":t.calcdata.scrollbarState.barWiggleRoom?\\\"ns-resize\\\":\\\"default\\\"});var E=A.filter(T),C=A.filter(k);r&&C.call(i.behavior.drag().origin(function(t){return i.event.stopPropagation(),t}).on(\\\"drag\\\",S(t,f,-1)).on(\\\"dragend\\\",function(){})),y(t,f,E,A),y(t,f,C,A);var L=f.selectAll(\\\".\\\"+n.cn.scrollAreaClip).data(a.repeat,a.keyFun);L.enter().append(\\\"clipPath\\\").classed(n.cn.scrollAreaClip,!0).attr(\\\"id\\\",function(e){return d(t,e)});var P=L.selectAll(\\\".\\\"+n.cn.scrollAreaClipRect).data(a.repeat,a.keyFun);P.enter().append(\\\"rect\\\").classed(n.cn.scrollAreaClipRect,!0).attr(\\\"x\\\",-n.overdrag).attr(\\\"y\\\",-n.uplift).attr(\\\"fill\\\",\\\"none\\\"),P.attr(\\\"width\\\",function(t){return t.width+2*n.overdrag}).attr(\\\"height\\\",function(t){return t.height+n.uplift}),_.selectAll(\\\".\\\"+n.cn.columnBoundary).data(a.repeat,a.keyFun).enter().append(\\\"g\\\").classed(n.cn.columnBoundary,!0);var O=_.selectAll(\\\".\\\"+n.cn.columnBoundaryClippath).data(a.repeat,a.keyFun);O.enter().append(\\\"clipPath\\\").classed(n.cn.columnBoundaryClippath,!0),O.attr(\\\"id\\\",function(e){return g(t,e)});var z=O.selectAll(\\\".\\\"+n.cn.columnBoundaryRect).data(a.repeat,a.keyFun);z.enter().append(\\\"rect\\\").classed(n.cn.columnBoundaryRect,!0).attr(\\\"fill\\\",\\\"none\\\"),z.attr(\\\"width\\\",function(t){return t.columnWidth+2*p(t)}).attr(\\\"height\\\",function(t){return t.calcdata.height+2*p(t)+n.uplift}).attr(\\\"x\\\",function(t){return-p(t)}).attr(\\\"y\\\",function(t){return-p(t)}),M(null,C,f)}},{\\\"../../components/color\\\":593,\\\"../../components/drawing\\\":614,\\\"../../lib\\\":719,\\\"../../lib/gup\\\":717,\\\"../../lib/svg_text_utils\\\":743,\\\"./constants\\\":1233,\\\"./data_preparation_helper\\\":1234,\\\"./data_split_helpers\\\":1235,d3:163}],1239:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../box/attributes\\\"),i=t(\\\"../../lib/extend\\\").extendFlat;e.exports={y:n.y,x:n.x,x0:n.x0,y0:n.y0,name:i({},n.name,{}),orientation:i({},n.orientation,{}),bandwidth:{valType:\\\"number\\\",min:0,editType:\\\"calc\\\"},scalegroup:{valType:\\\"string\\\",dflt:\\\"\\\",editType:\\\"calc\\\"},scalemode:{valType:\\\"enumerated\\\",values:[\\\"width\\\",\\\"count\\\"],dflt:\\\"width\\\",editType:\\\"calc\\\"},spanmode:{valType:\\\"enumerated\\\",values:[\\\"soft\\\",\\\"hard\\\",\\\"manual\\\"],dflt:\\\"soft\\\",editType:\\\"calc\\\"},span:{valType:\\\"info_array\\\",items:[{valType:\\\"any\\\",editType:\\\"calc\\\"},{valType:\\\"any\\\",editType:\\\"calc\\\"}],editType:\\\"calc\\\"},line:{color:{valType:\\\"color\\\",editType:\\\"style\\\"},width:{valType:\\\"number\\\",min:0,dflt:2,editType:\\\"style\\\"},editType:\\\"plot\\\"},fillcolor:n.fillcolor,points:i({},n.boxpoints,{}),jitter:i({},n.jitter,{}),pointpos:i({},n.pointpos,{}),width:i({},n.width,{}),marker:n.marker,text:n.text,hovertext:n.hovertext,hovertemplate:n.hovertemplate,box:{visible:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"plot\\\"},width:{valType:\\\"number\\\",min:0,max:1,dflt:.25,editType:\\\"plot\\\"},fillcolor:{valType:\\\"color\\\",editType:\\\"style\\\"},line:{color:{valType:\\\"color\\\",editType:\\\"style\\\"},width:{valType:\\\"number\\\",min:0,editType:\\\"style\\\"},editType:\\\"style\\\"},editType:\\\"plot\\\"},meanline:{visible:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"plot\\\"},color:{valType:\\\"color\\\",editType:\\\"style\\\"},width:{valType:\\\"number\\\",min:0,editType:\\\"style\\\"},editType:\\\"plot\\\"},side:{valType:\\\"enumerated\\\",values:[\\\"both\\\",\\\"positive\\\",\\\"negative\\\"],dflt:\\\"both\\\",editType:\\\"calc\\\"},offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup,selected:n.selected,unselected:n.unselected,hoveron:{valType:\\\"flaglist\\\",flags:[\\\"violins\\\",\\\"points\\\",\\\"kde\\\"],dflt:\\\"violins+points+kde\\\",extras:[\\\"all\\\"],editType:\\\"style\\\"}}},{\\\"../../lib/extend\\\":710,\\\"../box/attributes\\\":880}],1240:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../plots/cartesian/axes\\\"),a=t(\\\"../box/calc\\\"),o=t(\\\"./helpers\\\"),s=t(\\\"../../constants/numerical\\\").BADNUM;function l(t,e,r){var i=e.max-e.min;if(!i)return t.bandwidth?t.bandwidth:0;if(t.bandwidth)return Math.max(t.bandwidth,i/1e4);var a=r.length,o=n.stdev(r,a-1,e.mean);return Math.max(function(t,e,r){return 1.059*Math.min(e,r/1.349)*Math.pow(t,-.2)}(a,o,e.q3-e.q1),i/100)}function c(t,e,r,n){var a,o=t.spanmode,l=t.span||[],c=[e.min,e.max],u=[e.min-2*n,e.max+2*n];function h(n){var i=l[n],a=\\\"multicategory\\\"===r.type?r.r2c(i):r.d2c(i,0,t[e.valLetter+\\\"calendar\\\"]);return a===s?u[n]:a}var f={type:\\\"linear\\\",range:a=\\\"soft\\\"===o?u:\\\"hard\\\"===o?c:[h(0),h(1)]};return i.setConvert(f),f.cleanRange(),a}e.exports=function(t,e){var r=a(t,e);if(r[0].t.empty)return r;for(var s=t._fullLayout,u=i.getFromId(t,e[\\\"h\\\"===e.orientation?\\\"xaxis\\\":\\\"yaxis\\\"]),h=1/0,f=-1/0,p=0,d=0,g=0;g<r.length;g++){var v=r[g],m=v.pts.map(o.extractVal),y=v.bandwidth=l(e,v,m),x=v.span=c(e,v,u,y);if(v.min===v.max&&0===y)x=v.span=[v.min,v.max],v.density=[{v:1,t:x[0]}],v.bandwidth=y,p=Math.max(p,1);else{var b=x[1]-x[0],_=Math.ceil(b/(y/3)),w=b/_;if(!isFinite(w)||!isFinite(_))return n.error(\\\"Something went wrong with computing the violin span\\\"),r[0].t.empty=!0,r;var k=o.makeKDE(v,e,m);v.density=new Array(_);for(var T=0,A=x[0];A<x[1]+w/2;T++,A+=w){var M=k(A);v.density[T]={v:M,t:A},p=Math.max(p,M)}}d=Math.max(d,m.length),h=Math.min(h,x[0]),f=Math.max(f,x[1])}var S=i.findExtremes(u,[h,f],{padded:!0});if(e._extremes[u._id]=S,e.width)r[0].t.maxKDE=p;else{var E=s._violinScaleGroupStats,C=e.scalegroup,L=E[C];L?(L.maxKDE=Math.max(L.maxKDE,p),L.maxCount=Math.max(L.maxCount,d)):E[C]={maxKDE:p,maxCount:d}}return r[0].t.labels.kde=n._(t,\\\"kde:\\\"),r}},{\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767,\\\"../box/calc\\\":881,\\\"./helpers\\\":1243}],1241:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../box/cross_trace_calc\\\").setPositionOffset,i=[\\\"v\\\",\\\"h\\\"];e.exports=function(t,e){for(var r=t.calcdata,a=e.xaxis,o=e.yaxis,s=0;s<i.length;s++){for(var l=i[s],c=\\\"h\\\"===l?o:a,u=[],h=0;h<r.length;h++){var f=r[h],p=f[0].t,d=f[0].trace;!0!==d.visible||\\\"violin\\\"!==d.type||p.empty||d.orientation!==l||d.xaxis!==a._id||d.yaxis!==o._id||u.push(h)}n(\\\"violin\\\",t,u,c)}}},{\\\"../box/cross_trace_calc\\\":882}],1242:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../components/color\\\"),a=t(\\\"../box/defaults\\\"),o=t(\\\"./attributes\\\");e.exports=function(t,e,r,s){function l(r,i){return n.coerce(t,e,o,r,i)}function c(r,i){return n.coerce2(t,e,o,r,i)}if(a.handleSampleDefaults(t,e,l,s),!1!==e.visible){l(\\\"bandwidth\\\"),l(\\\"side\\\"),l(\\\"width\\\")||(l(\\\"scalegroup\\\",e.name),l(\\\"scalemode\\\"));var u,h=l(\\\"span\\\");Array.isArray(h)&&(u=\\\"manual\\\"),l(\\\"spanmode\\\",u);var f=l(\\\"line.color\\\",(t.marker||{}).color||r),p=l(\\\"line.width\\\"),d=l(\\\"fillcolor\\\",i.addOpacity(e.line.color,.5));a.handlePointsDefaults(t,e,l,{prefix:\\\"\\\"});var g=c(\\\"box.width\\\"),v=c(\\\"box.fillcolor\\\",d),m=c(\\\"box.line.color\\\",f),y=c(\\\"box.line.width\\\",p);l(\\\"box.visible\\\",Boolean(g||v||m||y))||(e.box={visible:!1});var x=c(\\\"meanline.color\\\",f),b=c(\\\"meanline.width\\\",p);l(\\\"meanline.visible\\\",Boolean(x||b))||(e.meanline={visible:!1})}}},{\\\"../../components/color\\\":593,\\\"../../lib\\\":719,\\\"../box/defaults\\\":883,\\\"./attributes\\\":1239}],1243:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=function(t){return 1/Math.sqrt(2*Math.PI)*Math.exp(-.5*t*t)};r.makeKDE=function(t,e,r){var n=r.length,a=i,o=t.bandwidth,s=1/(n*o);return function(t){for(var e=0,i=0;i<n;i++)e+=a((t-r[i])/o);return s*e}},r.getPositionOnKdePath=function(t,e,r){var i,a;\\\"h\\\"===e.orientation?(i=\\\"y\\\",a=\\\"x\\\"):(i=\\\"x\\\",a=\\\"y\\\");var o=n.findPointOnPath(t.path,r,a,{pathLength:t.pathLength}),s=t.posCenterPx,l=o[i];return[l,\\\"both\\\"===e.side?2*s-l:s]},r.getKdeValue=function(t,e,n){var i=t.pts.map(r.extractVal);return r.makeKDE(t,e,i)(n)/t.posDensityScale},r.extractVal=function(t){return t.v}},{\\\"../../lib\\\":719}],1244:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../../plots/cartesian/axes\\\"),a=t(\\\"../box/hover\\\"),o=t(\\\"./helpers\\\");e.exports=function(t,e,r,s,l){var c,u,h=t.cd,f=h[0].trace,p=f.hoveron,d=-1!==p.indexOf(\\\"violins\\\"),g=-1!==p.indexOf(\\\"kde\\\"),v=[];if(d||g){var m=a.hoverOnBoxes(t,e,r,s);if(g&&m.length>0){var y,x,b,_,w,k=t.xa,T=t.ya;\\\"h\\\"===f.orientation?(w=e,y=\\\"y\\\",b=T,x=\\\"x\\\",_=k):(w=r,y=\\\"x\\\",b=k,x=\\\"y\\\",_=T);var A=h[t.index];if(w>=A.span[0]&&w<=A.span[1]){var M=n.extendFlat({},t),S=_.c2p(w,!0),E=o.getKdeValue(A,f,w),C=o.getPositionOnKdePath(A,f,S),L=b._offset,P=b._length;M[y+\\\"0\\\"]=C[0],M[y+\\\"1\\\"]=C[1],M[x+\\\"0\\\"]=M[x+\\\"1\\\"]=S,M[x+\\\"Label\\\"]=x+\\\": \\\"+i.hoverLabelText(_,w)+\\\", \\\"+h[0].t.labels.kde+\\\" \\\"+E.toFixed(3),M.spikeDistance=m[0].spikeDistance;var O=y+\\\"Spike\\\";M[O]=m[0][O],m[0].spikeDistance=void 0,m[0][O]=void 0,M.hovertemplate=!1,v.push(M),(u={stroke:t.color})[y+\\\"1\\\"]=n.constrain(L+C[0],L,L+P),u[y+\\\"2\\\"]=n.constrain(L+C[1],L,L+P),u[x+\\\"1\\\"]=u[x+\\\"2\\\"]=_._offset+S}}d&&(v=v.concat(m))}-1!==p.indexOf(\\\"points\\\")&&(c=a.hoverOnPoints(t,e,r));var z=l.selectAll(\\\".violinline-\\\"+f.uid).data(u?[0]:[]);return z.enter().append(\\\"line\\\").classed(\\\"violinline-\\\"+f.uid,!0).attr(\\\"stroke-width\\\",1.5),z.exit().remove(),z.attr(u),\\\"closest\\\"===s?c?[c]:v:c?(v.push(c),v):v}},{\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767,\\\"../box/hover\\\":885,\\\"./helpers\\\":1243}],1245:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),layoutAttributes:t(\\\"./layout_attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),crossTraceDefaults:t(\\\"../box/defaults\\\").crossTraceDefaults,supplyLayoutDefaults:t(\\\"./layout_defaults\\\"),calc:t(\\\"./calc\\\"),crossTraceCalc:t(\\\"./cross_trace_calc\\\"),plot:t(\\\"./plot\\\"),style:t(\\\"./style\\\"),styleOnSelect:t(\\\"../scatter/style\\\").styleOnSelect,hoverPoints:t(\\\"./hover\\\"),selectPoints:t(\\\"../box/select\\\"),moduleType:\\\"trace\\\",name:\\\"violin\\\",basePlotModule:t(\\\"../../plots/cartesian\\\"),categories:[\\\"cartesian\\\",\\\"svg\\\",\\\"symbols\\\",\\\"oriented\\\",\\\"box-violin\\\",\\\"showLegend\\\",\\\"violinLayout\\\",\\\"zoomScale\\\"],meta:{}}},{\\\"../../plots/cartesian\\\":778,\\\"../box/defaults\\\":883,\\\"../box/select\\\":890,\\\"../scatter/style\\\":1134,\\\"./attributes\\\":1239,\\\"./calc\\\":1240,\\\"./cross_trace_calc\\\":1241,\\\"./defaults\\\":1242,\\\"./hover\\\":1244,\\\"./layout_attributes\\\":1246,\\\"./layout_defaults\\\":1247,\\\"./plot\\\":1248,\\\"./style\\\":1249}],1246:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../box/layout_attributes\\\"),i=t(\\\"../../lib\\\").extendFlat;e.exports={violinmode:i({},n.boxmode,{}),violingap:i({},n.boxgap,{}),violingroupgap:i({},n.boxgroupgap,{})}},{\\\"../../lib\\\":719,\\\"../box/layout_attributes\\\":887}],1247:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./layout_attributes\\\"),a=t(\\\"../box/layout_defaults\\\");e.exports=function(t,e,r){a._supply(t,e,r,function(r,a){return n.coerce(t,e,i,r,a)},\\\"violin\\\")}},{\\\"../../lib\\\":719,\\\"../box/layout_defaults\\\":888,\\\"./layout_attributes\\\":1246}],1248:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../components/drawing\\\"),o=t(\\\"../box/plot\\\"),s=t(\\\"../scatter/line_points\\\"),l=t(\\\"./helpers\\\");e.exports=function(t,e,r,c){var u=t._fullLayout,h=e.xaxis,f=e.yaxis;function p(t){var e=s(t,{xaxis:h,yaxis:f,connectGaps:!0,baseTolerance:.75,shape:\\\"spline\\\",simplify:!0});return a.smoothopen(e[0],1)}i.makeTraceGroups(c,r,\\\"trace violins\\\").each(function(t){var r=n.select(this),a=t[0],s=a.t,c=a.trace;if(!0!==c.visible||s.empty)r.remove();else{var d=s.bPos,g=s.bdPos,v=e[s.valLetter+\\\"axis\\\"],m=e[s.posLetter+\\\"axis\\\"],y=\\\"both\\\"===c.side,x=y||\\\"positive\\\"===c.side,b=y||\\\"negative\\\"===c.side,_=r.selectAll(\\\"path.violin\\\").data(i.identity);_.enter().append(\\\"path\\\").style(\\\"vector-effect\\\",\\\"non-scaling-stroke\\\").attr(\\\"class\\\",\\\"violin\\\"),_.exit().remove(),_.each(function(t){var e,r,i,a,o,l,h,f,_=n.select(this),w=t.density,k=w.length,T=t.pos+d,A=m.c2p(T);if(c.width)e=s.maxKDE/g;else{var M=u._violinScaleGroupStats[c.scalegroup];e=\\\"count\\\"===c.scalemode?M.maxKDE/g*(M.maxCount/t.pts.length):M.maxKDE/g}if(x){for(h=new Array(k),o=0;o<k;o++)(f=h[o]={})[s.posLetter]=T+w[o].v/e,f[s.valLetter]=w[o].t;r=p(h)}if(b){for(h=new Array(k),l=0,o=k-1;l<k;l++,o--)(f=h[l]={})[s.posLetter]=T-w[o].v/e,f[s.valLetter]=w[o].t;i=p(h)}if(y)a=r+\\\"L\\\"+i.substr(1)+\\\"Z\\\";else{var S=[A,v.c2p(w[0].t)],E=[A,v.c2p(w[k-1].t)];\\\"h\\\"===c.orientation&&(S.reverse(),E.reverse()),a=x?\\\"M\\\"+S+\\\"L\\\"+r.substr(1)+\\\"L\\\"+E:\\\"M\\\"+E+\\\"L\\\"+i.substr(1)+\\\"L\\\"+S}_.attr(\\\"d\\\",a),t.posCenterPx=A,t.posDensityScale=e*g,t.path=_.node(),t.pathLength=t.path.getTotalLength()/(y?2:1)});var w,k,T,A=c.box,M=A.width,S=(A.line||{}).width;y?(w=g*M,k=0):x?(w=[0,g*M/2],k=-S):(w=[g*M/2,0],k=S),o.plotBoxAndWhiskers(r,{pos:m,val:v},c,{bPos:d,bdPos:w,bPosPxOffset:k}),o.plotBoxMean(r,{pos:m,val:v},c,{bPos:d,bdPos:w,bPosPxOffset:k}),!c.box.visible&&c.meanline.visible&&(T=i.identity);var E=r.selectAll(\\\"path.meanline\\\").data(T||[]);E.enter().append(\\\"path\\\").attr(\\\"class\\\",\\\"meanline\\\").style(\\\"fill\\\",\\\"none\\\").style(\\\"vector-effect\\\",\\\"non-scaling-stroke\\\"),E.exit().remove(),E.each(function(t){var e=v.c2p(t.mean,!0),r=l.getPositionOnKdePath(t,c,e);n.select(this).attr(\\\"d\\\",\\\"h\\\"===c.orientation?\\\"M\\\"+e+\\\",\\\"+r[0]+\\\"V\\\"+r[1]:\\\"M\\\"+r[0]+\\\",\\\"+e+\\\"H\\\"+r[1])}),o.plotPoints(r,{x:h,y:f},c,s)}})}},{\\\"../../components/drawing\\\":614,\\\"../../lib\\\":719,\\\"../box/plot\\\":889,\\\"../scatter/line_points\\\":1125,\\\"./helpers\\\":1243,d3:163}],1249:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../components/color\\\"),a=t(\\\"../scatter/style\\\").stylePoints;e.exports=function(t){var e=n.select(t).selectAll(\\\"g.trace.violins\\\");e.style(\\\"opacity\\\",function(t){return t[0].trace.opacity}),e.each(function(e){var r=e[0].trace,o=n.select(this),s=r.box||{},l=s.line||{},c=r.meanline||{},u=c.width;o.selectAll(\\\"path.violin\\\").style(\\\"stroke-width\\\",r.line.width+\\\"px\\\").call(i.stroke,r.line.color).call(i.fill,r.fillcolor),o.selectAll(\\\"path.box\\\").style(\\\"stroke-width\\\",l.width+\\\"px\\\").call(i.stroke,l.color).call(i.fill,s.fillcolor);var h={\\\"stroke-width\\\":u+\\\"px\\\",\\\"stroke-dasharray\\\":2*u+\\\"px,\\\"+u+\\\"px\\\"};o.selectAll(\\\"path.mean\\\").style(h).call(i.stroke,c.color),o.selectAll(\\\"path.meanline\\\").style(h).call(i.stroke,c.color),a(o,r,t)})}},{\\\"../../components/color\\\":593,\\\"../scatter/style\\\":1134,d3:163}],1250:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../components/colorscale/attributes\\\"),i=t(\\\"../isosurface/attributes\\\"),a=t(\\\"../../plots/attributes\\\"),o=t(\\\"../../lib/extend\\\").extendFlat,s=t(\\\"../../plot_api/edit_types\\\").overrideAll,l=e.exports=s(o({x:i.x,y:i.y,z:i.z,value:i.value,isomin:i.isomin,isomax:i.isomax,surface:i.surface,spaceframe:{show:{valType:\\\"boolean\\\",dflt:!1},fill:{valType:\\\"number\\\",min:0,max:1,dflt:1}},slices:i.slices,caps:i.caps,text:i.text,hovertext:i.hovertext,hovertemplate:i.hovertemplate},n(\\\"\\\",{colorAttr:\\\"`value`\\\",showScaleDflt:!0,editTypeOverride:\\\"calc\\\"}),{colorbar:i.colorbar,opacity:i.opacity,opacityscale:{valType:\\\"any\\\",editType:\\\"calc\\\"},lightposition:i.lightposition,lighting:i.lighting,flatshading:i.flatshading,contour:i.contour,hoverinfo:o({},a.hoverinfo)}),\\\"calc\\\",\\\"nested\\\");l.x.editType=l.y.editType=l.z.editType=l.value.editType=\\\"calc+clearAxisTypes\\\",l.transforms=void 0},{\\\"../../components/colorscale/attributes\\\":600,\\\"../../lib/extend\\\":710,\\\"../../plot_api/edit_types\\\":750,\\\"../../plots/attributes\\\":764,\\\"../isosurface/attributes\\\":1048}],1251:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"gl-mesh3d\\\"),i=t(\\\"../../lib/gl_format_color\\\").parseColorScale,a=t(\\\"../../lib/str2rgbarray\\\"),o=t(\\\"../../components/colorscale\\\").extractOpts,s=t(\\\"../../plots/gl3d/zip3\\\"),l=t(\\\"../isosurface/convert\\\").findNearestOnAxis,c=t(\\\"../isosurface/convert\\\").generateIsoMeshes;function u(t,e,r){this.scene=t,this.uid=r,this.mesh=e,this.name=\\\"\\\",this.data=null,this.showContour=!1}var h=u.prototype;h.handlePick=function(t){if(t.object===this.mesh){var e=t.data.index,r=this.data._x[e],n=this.data._y[e],i=this.data._z[e],a=this.data._Ys.length,o=this.data._Zs.length,s=l(r,this.data._Xs).id,c=l(n,this.data._Ys).id,u=l(i,this.data._Zs).id,h=t.index=u+o*c+o*a*s;t.traceCoordinate=[this.data._x[h],this.data._y[h],this.data._z[h],this.data.value[h]];var f=this.data.hovertext||this.data.text;return Array.isArray(f)&&void 0!==f[h]?t.textLabel=f[h]:f&&(t.textLabel=f),!0}},h.update=function(t){var e=this.scene,r=e.fullSceneLayout;function n(t,e,r,n){return e.map(function(e){return t.d2l(e,0,n)*r})}this.data=c(t);var l={positions:s(n(r.xaxis,t._x,e.dataScale[0],t.xcalendar),n(r.yaxis,t._y,e.dataScale[1],t.ycalendar),n(r.zaxis,t._z,e.dataScale[2],t.zcalendar)),cells:s(t._i,t._j,t._k),lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,opacityscale:t.opacityscale,contourEnable:t.contour.show,contourColor:a(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading},u=o(t);l.vertexIntensity=t._intensity,l.vertexIntensityBounds=[u.min,u.max],l.colormap=i(t),this.mesh.update(l)},h.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports=function(t,e){var r=t.glplot.gl,i=n({gl:r}),a=new u(t,i,e.uid);return i._trace=a,a.update(e),t.glplot.add(i),a}},{\\\"../../components/colorscale\\\":605,\\\"../../lib/gl_format_color\\\":716,\\\"../../lib/str2rgbarray\\\":742,\\\"../../plots/gl3d/zip3\\\":818,\\\"../isosurface/convert\\\":1050,\\\"gl-mesh3d\\\":280}],1252:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./attributes\\\"),a=t(\\\"../isosurface/defaults\\\").supplyIsoDefaults;e.exports=function(t,e,r,o){function s(r,a){return n.coerce(t,e,i,r,a)}a(t,e,r,o,s);var l=s(\\\"opacityscale\\\");\\\"max\\\"===l?e.opacityscale=[[0,.1],[1,1]]:\\\"min\\\"===l?e.opacityscale=[[0,1],[1,.1]]:\\\"extremes\\\"===l?e.opacityscale=function(t,e){for(var r=[],n=0;n<32;n++){var i=n/31,a=e+(1-e)*(1-Math.pow(Math.sin(t*i*Math.PI),2));r.push([i,Math.max(1,Math.min(0,a))])}return r}(1,.1):function(t){var e=0;if(!Array.isArray(t)||t.length<2)return!1;if(!t[0]||!t[t.length-1])return!1;if(0!=+t[0][0]||1!=+t[t.length-1][0])return!1;for(var r=0;r<t.length;r++){var n=t[r];if(2!==n.length||+n[0]<e)return!1;e=+n[0]}return!0}(l)||(e.opacityscale=void 0)}},{\\\"../../lib\\\":719,\\\"../isosurface/defaults\\\":1051,\\\"./attributes\\\":1250}],1253:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),supplyDefaults:t(\\\"./defaults\\\"),calc:t(\\\"../isosurface/calc\\\"),colorbar:{min:\\\"cmin\\\",max:\\\"cmax\\\"},plot:t(\\\"./convert\\\"),moduleType:\\\"trace\\\",name:\\\"volume\\\",basePlotModule:t(\\\"../../plots/gl3d\\\"),categories:[\\\"gl3d\\\"],meta:{}}},{\\\"../../plots/gl3d\\\":807,\\\"../isosurface/calc\\\":1049,\\\"./attributes\\\":1250,\\\"./convert\\\":1251,\\\"./defaults\\\":1252}],1254:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../bar/attributes\\\"),i=t(\\\"../scatter/attributes\\\").line,a=t(\\\"../../plots/attributes\\\"),o=t(\\\"../../components/fx/hovertemplate_attributes\\\"),s=t(\\\"./constants\\\"),l=t(\\\"../../lib/extend\\\").extendFlat,c=t(\\\"../../components/color\\\");function u(t){return{marker:{color:l({},n.marker.color,{arrayOk:!1,editType:\\\"style\\\"}),line:{color:l({},n.marker.line.color,{arrayOk:!1,editType:\\\"style\\\"}),width:l({},n.marker.line.width,{arrayOk:!1,editType:\\\"style\\\"}),editType:\\\"style\\\"},editType:\\\"style\\\"},editType:\\\"style\\\"}}e.exports={measure:{valType:\\\"data_array\\\",dflt:[],editType:\\\"calc\\\"},base:{valType:\\\"number\\\",dflt:null,arrayOk:!1,editType:\\\"calc\\\"},x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,hovertext:n.hovertext,hovertemplate:o({},{keys:s.eventDataKeys}),hoverinfo:l({},a.hoverinfo,{flags:[\\\"name\\\",\\\"x\\\",\\\"y\\\",\\\"text\\\",\\\"initial\\\",\\\"delta\\\",\\\"final\\\"]}),textinfo:{valType:\\\"flaglist\\\",flags:[\\\"label\\\",\\\"text\\\",\\\"initial\\\",\\\"delta\\\",\\\"final\\\"],extras:[\\\"none\\\"],editType:\\\"plot\\\",arrayOk:!1},text:n.text,textposition:n.textposition,insidetextanchor:n.insidetextanchor,textangle:n.textangle,textfont:n.textfont,insidetextfont:n.insidetextfont,outsidetextfont:n.outsidetextfont,constraintext:n.constraintext,cliponaxis:n.cliponaxis,orientation:n.orientation,offset:n.offset,width:n.width,increasing:u(),decreasing:u(),totals:u(),connector:{line:{color:l({},i.color,{dflt:c.defaultLine}),width:l({},i.width,{editType:\\\"plot\\\"}),dash:i.dash,editType:\\\"plot\\\"},mode:{valType:\\\"enumerated\\\",values:[\\\"spanning\\\",\\\"between\\\"],dflt:\\\"between\\\",editType:\\\"plot\\\"},visible:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"plot\\\"},editType:\\\"plot\\\"},offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup}},{\\\"../../components/color\\\":593,\\\"../../components/fx/hovertemplate_attributes\\\":631,\\\"../../lib/extend\\\":710,\\\"../../plots/attributes\\\":764,\\\"../bar/attributes\\\":857,\\\"../scatter/attributes\\\":1112,\\\"./constants\\\":1256}],1255:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/cartesian/axes\\\"),i=t(\\\"../../lib\\\").mergeArray,a=t(\\\"../scatter/calc_selection\\\"),o=t(\\\"../../constants/numerical\\\").BADNUM;function s(t){return\\\"a\\\"===t||\\\"absolute\\\"===t}function l(t){return\\\"t\\\"===t||\\\"total\\\"===t}e.exports=function(t,e){var r,c,u=n.getFromId(t,e.xaxis||\\\"x\\\"),h=n.getFromId(t,e.yaxis||\\\"y\\\");\\\"h\\\"===e.orientation?(r=u.makeCalcdata(e,\\\"x\\\"),c=h.makeCalcdata(e,\\\"y\\\")):(r=h.makeCalcdata(e,\\\"y\\\"),c=u.makeCalcdata(e,\\\"x\\\"));for(var f,p=Math.min(c.length,r.length),d=new Array(p),g=0,v=!1,m=0;m<p;m++){var y=r[m]||0,x=!1;(r[m]!==o||l(e.measure[m])||s(e.measure[m]))&&m+1<p&&(r[m+1]!==o||l(e.measure[m+1])||s(e.measure[m+1]))&&(x=!0);var b=d[m]={i:m,p:c[m],s:y,rawS:y,cNext:x};s(e.measure[m])?(g=b.s,b.isSum=!0,b.dir=\\\"totals\\\",b.s=g):l(e.measure[m])?(b.isSum=!0,b.dir=\\\"totals\\\",b.s=g):(b.isSum=!1,b.dir=b.rawS<0?\\\"decreasing\\\":\\\"increasing\\\",f=b.s,b.s=g+f,g+=f),\\\"totals\\\"===b.dir&&(v=!0),e.ids&&(b.id=String(e.ids[m])),b.v=(e.base||0)+g}return d.length&&(d[0].hasTotals=v),i(e.text,d,\\\"tx\\\"),i(e.hovertext,d,\\\"htx\\\"),a(d,e),d}},{\\\"../../constants/numerical\\\":695,\\\"../../lib\\\":719,\\\"../../plots/cartesian/axes\\\":767,\\\"../scatter/calc_selection\\\":1114}],1256:[function(t,e,r){\\\"use strict\\\";e.exports={eventDataKeys:[\\\"initial\\\",\\\"delta\\\",\\\"final\\\"]}},{}],1257:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../bar/cross_trace_calc\\\").setGroupPositions;e.exports=function(t,e){var r,i,a=t._fullLayout,o=t._fullData,s=t.calcdata,l=e.xaxis,c=e.yaxis,u=[],h=[],f=[];for(i=0;i<o.length;i++){var p=o[i];!0===p.visible&&p.xaxis===l._id&&p.yaxis===c._id&&\\\"waterfall\\\"===p.type&&(r=s[i],\\\"h\\\"===p.orientation?f.push(r):h.push(r),u.push(r))}var d={mode:a.waterfallmode,norm:a.waterfallnorm,gap:a.waterfallgap,groupgap:a.waterfallgroupgap};for(n(t,l,c,h,d),n(t,c,l,f,d),i=0;i<u.length;i++){r=u[i];for(var g=0;g<r.length;g++){var v=r[g];!1===v.isSum&&(v.s0+=0===g?0:r[g-1].s),g+1<r.length&&(r[g].nextP0=r[g+1].p0,r[g].nextS0=r[g+1].s0)}}}},{\\\"../bar/cross_trace_calc\\\":860}],1258:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"../bar/defaults\\\").handleGroupingDefaults,a=t(\\\"../bar/defaults\\\").handleText,o=t(\\\"../scatter/xy_defaults\\\"),s=t(\\\"./attributes\\\"),l=t(\\\"../../components/color\\\"),c=t(\\\"../../constants/delta.js\\\"),u=c.INCREASING.COLOR,h=c.DECREASING.COLOR,f=\\\"#4499FF\\\";function p(t,e,r){t(e+\\\".marker.color\\\",r),t(e+\\\".marker.line.color\\\",l.defaultLine),t(e+\\\".marker.line.width\\\")}e.exports={supplyDefaults:function(t,e,r,i){function l(r,i){return n.coerce(t,e,s,r,i)}if(o(t,e,i,l)){l(\\\"measure\\\"),l(\\\"orientation\\\",e.x&&!e.y?\\\"h\\\":\\\"v\\\"),l(\\\"base\\\"),l(\\\"offset\\\"),l(\\\"width\\\"),l(\\\"text\\\"),l(\\\"hovertext\\\"),l(\\\"hovertemplate\\\");var c=l(\\\"textposition\\\");a(t,e,i,l,c,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),\\\"none\\\"!==e.textposition&&l(\\\"textinfo\\\"),p(l,\\\"increasing\\\",u),p(l,\\\"decreasing\\\",h),p(l,\\\"totals\\\",f),l(\\\"connector.visible\\\")&&(l(\\\"connector.mode\\\"),l(\\\"connector.line.width\\\")&&(l(\\\"connector.line.color\\\"),l(\\\"connector.line.dash\\\")))}else e.visible=!1},crossTraceDefaults:function(t,e){var r,a;function o(t){return n.coerce(a._input,a,s,t)}if(\\\"group\\\"===e.waterfallmode)for(var l=0;l<t.length;l++)r=(a=t[l])._input,i(r,a,e,o)}}},{\\\"../../components/color\\\":593,\\\"../../constants/delta.js\\\":689,\\\"../../lib\\\":719,\\\"../bar/defaults\\\":861,\\\"../scatter/xy_defaults\\\":1137,\\\"./attributes\\\":1254}],1259:[function(t,e,r){\\\"use strict\\\";e.exports=function(t,e){return t.x=\\\"xVal\\\"in e?e.xVal:e.x,t.y=\\\"yVal\\\"in e?e.yVal:e.y,\\\"initial\\\"in e&&(t.initial=e.initial),\\\"delta\\\"in e&&(t.delta=e.delta),\\\"final\\\"in e&&(t.final=e.final),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t}},{}],1260:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../plots/cartesian/axes\\\").hoverLabelText,i=t(\\\"../../components/color\\\").opacity,a=t(\\\"../bar/hover\\\").hoverOnBars,o=t(\\\"../../constants/delta.js\\\"),s=o.INCREASING.SYMBOL,l=o.DECREASING.SYMBOL;e.exports=function(t,e,r,o){var c=a(t,e,r,o);if(c){var u=c.cd,h=u[0].trace,f=\\\"h\\\"===h.orientation,p=f?t.xa:t.ya,d=u[c.index],g=d.isSum?d.b+d.s:d.rawS;if(!d.isSum){c.initial=d.b+d.s-g,c.delta=g,c.final=c.initial+c.delta;var v=w(Math.abs(c.delta));c.deltaLabel=g<0?\\\"(\\\"+v+\\\")\\\":v,c.finalLabel=w(c.final),c.initialLabel=w(c.initial)}var m=d.hi||h.hoverinfo,y=[];if(m&&\\\"none\\\"!==m&&\\\"skip\\\"!==m){var x=\\\"all\\\"===m,b=m.split(\\\"+\\\"),_=function(t){return x||-1!==b.indexOf(t)};d.isSum||(!_(\\\"final\\\")||_(f?\\\"x\\\":\\\"y\\\")||y.push(c.finalLabel),_(\\\"delta\\\")&&(g<0?y.push(c.deltaLabel+\\\" \\\"+l):y.push(c.deltaLabel+\\\" \\\"+s)),_(\\\"initial\\\")&&y.push(\\\"Initial: \\\"+c.initialLabel))}return y.length&&(c.extraText=y.join(\\\"<br>\\\")),c.color=function(t,e){var r=t[e.dir].marker,n=r.color,a=r.line.color,o=r.line.width;if(i(n))return n;if(i(a)&&o)return a}(h,d),[c]}function w(t){return n(p,t)}}},{\\\"../../components/color\\\":593,\\\"../../constants/delta.js\\\":689,\\\"../../plots/cartesian/axes\\\":767,\\\"../bar/hover\\\":863}],1261:[function(t,e,r){\\\"use strict\\\";e.exports={attributes:t(\\\"./attributes\\\"),layoutAttributes:t(\\\"./layout_attributes\\\"),supplyDefaults:t(\\\"./defaults\\\").supplyDefaults,crossTraceDefaults:t(\\\"./defaults\\\").crossTraceDefaults,supplyLayoutDefaults:t(\\\"./layout_defaults\\\"),calc:t(\\\"./calc\\\"),crossTraceCalc:t(\\\"./cross_trace_calc\\\"),plot:t(\\\"./plot\\\"),style:t(\\\"./style\\\").style,hoverPoints:t(\\\"./hover\\\"),eventData:t(\\\"./event_data\\\"),selectPoints:t(\\\"../bar/select\\\"),moduleType:\\\"trace\\\",name:\\\"waterfall\\\",basePlotModule:t(\\\"../../plots/cartesian\\\"),categories:[\\\"bar-like\\\",\\\"cartesian\\\",\\\"svg\\\",\\\"oriented\\\",\\\"showLegend\\\",\\\"zoomScale\\\"],meta:{}}},{\\\"../../plots/cartesian\\\":778,\\\"../bar/select\\\":868,\\\"./attributes\\\":1254,\\\"./calc\\\":1255,\\\"./cross_trace_calc\\\":1257,\\\"./defaults\\\":1258,\\\"./event_data\\\":1259,\\\"./hover\\\":1260,\\\"./layout_attributes\\\":1262,\\\"./layout_defaults\\\":1263,\\\"./plot\\\":1264,\\\"./style\\\":1265}],1262:[function(t,e,r){\\\"use strict\\\";e.exports={waterfallmode:{valType:\\\"enumerated\\\",values:[\\\"group\\\",\\\"overlay\\\"],dflt:\\\"group\\\",editType:\\\"calc\\\"},waterfallgap:{valType:\\\"number\\\",min:0,max:1,editType:\\\"calc\\\"},waterfallgroupgap:{valType:\\\"number\\\",min:0,max:1,dflt:0,editType:\\\"calc\\\"}}},{}],1263:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../../lib\\\"),i=t(\\\"./layout_attributes\\\");e.exports=function(t,e,r){var a=!1;function o(r,a){return n.coerce(t,e,i,r,a)}for(var s=0;s<r.length;s++){var l=r[s];if(l.visible&&\\\"waterfall\\\"===l.type){a=!0;break}}a&&(o(\\\"waterfallmode\\\"),o(\\\"waterfallgap\\\",.2),o(\\\"waterfallgroupgap\\\"))}},{\\\"../../lib\\\":719,\\\"./layout_attributes\\\":1262}],1264:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../lib\\\"),a=t(\\\"../../components/drawing\\\"),o=t(\\\"../bar/plot\\\").plot;e.exports=function(t,e,r,s){var l=t._fullLayout;o(t,e,r,s,{mode:l.waterfallmode,norm:l.waterfallmode,gap:l.waterfallgap,groupgap:l.waterfallgroupgap}),function(t,e,r,o){var s=e.xaxis,l=e.yaxis;i.makeTraceGroups(o,r,\\\"trace bars\\\").each(function(r){var o=n.select(this),c=r[0].trace,u=i.ensureSingle(o,\\\"g\\\",\\\"lines\\\");if(c.connector&&c.connector.visible){var h=\\\"h\\\"===c.orientation,f=c.connector.mode,p=u.selectAll(\\\"g.line\\\").data(i.identity);p.enter().append(\\\"g\\\").classed(\\\"line\\\",!0),p.exit().remove();var d=p.size();p.each(function(r,o){if(o===d-1||r.cNext){var c=function(t,e,r,n){var i=[],a=[],o=n?e:r,s=n?r:e;return i[0]=o.c2p(t.s0,!0),a[0]=s.c2p(t.p0,!0),i[1]=o.c2p(t.s1,!0),a[1]=s.c2p(t.p1,!0),i[2]=o.c2p(t.nextS0,!0),a[2]=s.c2p(t.nextP0,!0),n?[i,a]:[a,i]}(r,s,l,h),u=c[0],p=c[1],g=\\\"\\\";\\\"spanning\\\"===f&&!r.isSum&&o>0&&(g+=h?\\\"M\\\"+u[0]+\\\",\\\"+p[1]+\\\"V\\\"+p[0]:\\\"M\\\"+u[1]+\\\",\\\"+p[0]+\\\"H\\\"+u[0]),\\\"between\\\"!==f&&(r.isSum||o<d-1)&&(g+=h?\\\"M\\\"+u[1]+\\\",\\\"+p[0]+\\\"V\\\"+p[1]:\\\"M\\\"+u[0]+\\\",\\\"+p[1]+\\\"H\\\"+u[1]),void 0!==u[2]&&void 0!==p[2]&&(g+=h?\\\"M\\\"+u[1]+\\\",\\\"+p[1]+\\\"V\\\"+p[2]:\\\"M\\\"+u[1]+\\\",\\\"+p[1]+\\\"H\\\"+u[2]),\\\"\\\"===g&&(g=\\\"M0,0Z\\\"),i.ensureSingle(n.select(this),\\\"path\\\").attr(\\\"d\\\",g).call(a.setClipUrl,e.layerClipId,t)}})}else u.remove()})}(t,e,r,s)}},{\\\"../../components/drawing\\\":614,\\\"../../lib\\\":719,\\\"../bar/plot\\\":867,d3:163}],1265:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"d3\\\"),i=t(\\\"../../components/drawing\\\"),a=t(\\\"../../components/color\\\"),o=t(\\\"../../constants/interactions\\\").DESELECTDIM,s=t(\\\"../bar/style\\\").styleTextPoints;e.exports={style:function(t,e,r){var l=r||n.select(t).selectAll(\\\"g.waterfalllayer\\\").selectAll(\\\"g.trace\\\");l.style(\\\"opacity\\\",function(t){return t[0].trace.opacity}),l.each(function(e){var r=n.select(this),l=e[0].trace;r.selectAll(\\\".point > path\\\").each(function(t){if(!t.isBlank){var e=l[t.dir].marker;n.select(this).call(a.fill,e.color).call(a.stroke,e.line.color).call(i.dashLine,e.line.dash,e.line.width).style(\\\"opacity\\\",l.selectedpoints&&!t.selected?o:1)}}),s(r,l,t),r.selectAll(\\\".lines\\\").each(function(){var t=l.connector.line;i.lineGroupStyle(n.select(this).selectAll(\\\"path\\\"),t.width,t.color,t.dash)})})}}},{\\\"../../components/color\\\":593,\\\"../../components/drawing\\\":614,\\\"../../constants/interactions\\\":694,\\\"../bar/style\\\":870,d3:163}],1266:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../plots/cartesian/axes\\\"),i=t(\\\"../lib\\\"),a=t(\\\"../plot_api/plot_schema\\\"),o=t(\\\"./helpers\\\").pointsAccessorFunction,s=t(\\\"../constants/numerical\\\").BADNUM;r.moduleType=\\\"transform\\\",r.name=\\\"aggregate\\\";var l=r.attributes={enabled:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},groups:{valType:\\\"string\\\",strict:!0,noBlank:!0,arrayOk:!0,dflt:\\\"x\\\",editType:\\\"calc\\\"},aggregations:{_isLinkedToArray:\\\"aggregation\\\",target:{valType:\\\"string\\\",editType:\\\"calc\\\"},func:{valType:\\\"enumerated\\\",values:[\\\"count\\\",\\\"sum\\\",\\\"avg\\\",\\\"median\\\",\\\"mode\\\",\\\"rms\\\",\\\"stddev\\\",\\\"min\\\",\\\"max\\\",\\\"first\\\",\\\"last\\\",\\\"change\\\",\\\"range\\\"],dflt:\\\"first\\\",editType:\\\"calc\\\"},funcmode:{valType:\\\"enumerated\\\",values:[\\\"sample\\\",\\\"population\\\"],dflt:\\\"sample\\\",editType:\\\"calc\\\"},enabled:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},editType:\\\"calc\\\"},editType:\\\"calc\\\"},c=l.aggregations;function u(t,e,r,a){if(a.enabled){for(var o=a.target,l=i.nestedProperty(e,o),c=l.get(),u=function(t,e){var r=t.func,n=e.d2c,i=e.c2d;switch(r){case\\\"count\\\":return h;case\\\"first\\\":return f;case\\\"last\\\":return p;case\\\"sum\\\":return function(t,e){for(var r=0,a=0;a<e.length;a++){var o=n(t[e[a]]);o!==s&&(r+=o)}return i(r)};case\\\"avg\\\":return function(t,e){for(var r=0,a=0,o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&(r+=l,a++)}return a?i(r/a):s};case\\\"min\\\":return function(t,e){for(var r=1/0,a=0;a<e.length;a++){var o=n(t[e[a]]);o!==s&&(r=Math.min(r,o))}return r===1/0?s:i(r)};case\\\"max\\\":return function(t,e){for(var r=-1/0,a=0;a<e.length;a++){var o=n(t[e[a]]);o!==s&&(r=Math.max(r,o))}return r===-1/0?s:i(r)};case\\\"range\\\":return function(t,e){for(var r=1/0,a=-1/0,o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&(r=Math.min(r,l),a=Math.max(a,l))}return a===-1/0||r===1/0?s:i(a-r)};case\\\"change\\\":return function(t,e){var r=n(t[e[0]]),a=n(t[e[e.length-1]]);return r===s||a===s?s:i(a-r)};case\\\"median\\\":return function(t,e){for(var r=[],a=0;a<e.length;a++){var o=n(t[e[a]]);o!==s&&r.push(o)}if(!r.length)return s;r.sort();var l=(r.length-1)/2;return i((r[Math.floor(l)]+r[Math.ceil(l)])/2)};case\\\"mode\\\":return function(t,e){for(var r={},a=0,o=s,l=0;l<e.length;l++){var c=n(t[e[l]]);if(c!==s){var u=r[c]=(r[c]||0)+1;u>a&&(a=u,o=c)}}return a?i(o):s};case\\\"rms\\\":return function(t,e){for(var r=0,a=0,o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&(r+=l*l,a++)}return a?i(Math.sqrt(r/a)):s};case\\\"stddev\\\":return function(e,r){var i,a=0,o=0,l=1,c=s;for(i=0;i<r.length&&c===s;i++)c=n(e[r[i]]);if(c===s)return s;for(;i<r.length;i++){var u=n(e[r[i]]);if(u!==s){var h=u-c;a+=h,o+=h*h,l++}}var f=\\\"sample\\\"===t.funcmode?l-1:l;return f?Math.sqrt((o-a*a/l)/f):0}}}(a,n.getDataConversions(t,e,o,c)),d=new Array(r.length),g=0;g<r.length;g++)d[g]=u(c,r[g]);l.set(d),\\\"count\\\"===a.func&&i.pushUnique(e._arrayAttrs,o)}}function h(t,e){return e.length}function f(t,e){return t[e[0]]}function p(t,e){return t[e[e.length-1]]}r.supplyDefaults=function(t,e){var r,n={};function o(e,r){return i.coerce(t,n,l,e,r)}if(!o(\\\"enabled\\\"))return n;var s=a.findArrayAttributes(e),u={};for(r=0;r<s.length;r++)u[s[r]]=1;var h=o(\\\"groups\\\");if(!Array.isArray(h)){if(!u[h])return n.enabled=!1,n;u[h]=0}var f,p=t.aggregations||[],d=n.aggregations=new Array(p.length);function g(t,e){return i.coerce(p[r],f,c,t,e)}for(r=0;r<p.length;r++){f={_index:r};var v=g(\\\"target\\\"),m=g(\\\"func\\\");g(\\\"enabled\\\")&&v&&(u[v]||\\\"count\\\"===m&&void 0===u[v])?(\\\"stddev\\\"===m&&g(\\\"funcmode\\\"),u[v]=0,d[r]=f):d[r]={enabled:!1,_index:r}}for(r=0;r<s.length;r++)u[s[r]]&&d.push({target:s[r],func:c.func.dflt,enabled:!0,_index:-1});return n},r.calcTransform=function(t,e,r){if(r.enabled){var n=r.groups,a=i.getTargetArray(e,{target:n});if(a){var s,l,c,h,f={},p={},d=[],g=o(e.transforms,r),v=a.length;for(e._length&&(v=Math.min(v,e._length)),s=0;s<v;s++)void 0===(c=f[l=a[s]])?(f[l]=d.length,h=[s],d.push(h),p[f[l]]=g(s)):(d[c].push(s),p[f[l]]=(p[f[l]]||[]).concat(g(s)));r._indexToPoints=p;var m=r.aggregations;for(s=0;s<m.length;s++)u(t,e,d,m[s]);\\\"string\\\"==typeof n&&u(t,e,d,{target:n,func:\\\"first\\\",enabled:!0}),e._length=d.length}}}},{\\\"../constants/numerical\\\":695,\\\"../lib\\\":719,\\\"../plot_api/plot_schema\\\":756,\\\"../plots/cartesian/axes\\\":767,\\\"./helpers\\\":1269}],1267:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../lib\\\"),i=t(\\\"../registry\\\"),a=t(\\\"../plots/cartesian/axes\\\"),o=t(\\\"./helpers\\\").pointsAccessorFunction,s=t(\\\"../constants/filter_ops\\\"),l=s.COMPARISON_OPS,c=s.INTERVAL_OPS,u=s.SET_OPS;r.moduleType=\\\"transform\\\",r.name=\\\"filter\\\",r.attributes={enabled:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},target:{valType:\\\"string\\\",strict:!0,noBlank:!0,arrayOk:!0,dflt:\\\"x\\\",editType:\\\"calc\\\"},operation:{valType:\\\"enumerated\\\",values:[].concat(l).concat(c).concat(u),dflt:\\\"=\\\",editType:\\\"calc\\\"},value:{valType:\\\"any\\\",dflt:0,editType:\\\"calc\\\"},preservegaps:{valType:\\\"boolean\\\",dflt:!1,editType:\\\"calc\\\"},editType:\\\"calc\\\"},r.supplyDefaults=function(t){var e={};function a(i,a){return n.coerce(t,e,r.attributes,i,a)}if(a(\\\"enabled\\\")){var o=a(\\\"target\\\");if(n.isArrayOrTypedArray(o)&&0===o.length)return e.enabled=!1,e;a(\\\"preservegaps\\\"),a(\\\"operation\\\"),a(\\\"value\\\");var s=i.getComponentMethod(\\\"calendars\\\",\\\"handleDefaults\\\");s(t,e,\\\"valuecalendar\\\",null),s(t,e,\\\"targetcalendar\\\",null)}return e},r.calcTransform=function(t,e,r){if(r.enabled){var i=n.getTargetArray(e,r);if(i){var s=r.target,h=i.length;e._length&&(h=Math.min(h,e._length));var f=r.targetcalendar,p=e._arrayAttrs,d=r.preservegaps;if(\\\"string\\\"==typeof s){var g=n.nestedProperty(e,s+\\\"calendar\\\").get();g&&(f=g)}var v,m,y=function(t,e,r){var n=t.operation,i=t.value,a=Array.isArray(i);function o(t){return-1!==t.indexOf(n)}var s,h=function(r){return e(r,0,t.valuecalendar)},f=function(t){return e(t,0,r)};o(l)?s=h(a?i[0]:i):o(c)?s=a?[h(i[0]),h(i[1])]:[h(i),h(i)]:o(u)&&(s=a?i.map(h):[h(i)]);switch(n){case\\\"=\\\":return function(t){return f(t)===s};case\\\"!=\\\":return function(t){return f(t)!==s};case\\\"<\\\":return function(t){return f(t)<s};case\\\"<=\\\":return function(t){return f(t)<=s};case\\\">\\\":return function(t){return f(t)>s};case\\\">=\\\":return function(t){return f(t)>=s};case\\\"[]\\\":return function(t){var e=f(t);return e>=s[0]&&e<=s[1]};case\\\"()\\\":return function(t){var e=f(t);return e>s[0]&&e<s[1]};case\\\"[)\\\":return function(t){var e=f(t);return e>=s[0]&&e<s[1]};case\\\"(]\\\":return function(t){var e=f(t);return e>s[0]&&e<=s[1]};case\\\"][\\\":return function(t){var e=f(t);return e<=s[0]||e>=s[1]};case\\\")(\\\":return function(t){var e=f(t);return e<s[0]||e>s[1]};case\\\"](\\\":return function(t){var e=f(t);return e<=s[0]||e>s[1]};case\\\")[\\\":return function(t){var e=f(t);return e<s[0]||e>=s[1]};case\\\"{}\\\":return function(t){return-1!==s.indexOf(f(t))};case\\\"}{\\\":return function(t){return-1===s.indexOf(f(t))}}}(r,a.getDataToCoordFunc(t,e,s,i),f),x={},b={},_=0;d?(v=function(t){x[t.astr]=n.extendDeep([],t.get()),t.set(new Array(h))},m=function(t,e){var r=x[t.astr][e];t.get()[e]=r}):(v=function(t){x[t.astr]=n.extendDeep([],t.get()),t.set([])},m=function(t,e){var r=x[t.astr][e];t.get().push(r)}),T(v);for(var w=o(e.transforms,r),k=0;k<h;k++){y(i[k])?(T(m,k),b[_++]=w(k)):d&&_++}r._indexToPoints=b,e._length=_}}function T(t,r){for(var i=0;i<p.length;i++){t(n.nestedProperty(e,p[i]),r)}}}},{\\\"../constants/filter_ops\\\":691,\\\"../lib\\\":719,\\\"../plots/cartesian/axes\\\":767,\\\"../registry\\\":847,\\\"./helpers\\\":1269}],1268:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../lib\\\"),i=t(\\\"../plot_api/plot_schema\\\"),a=t(\\\"../plots/plots\\\"),o=t(\\\"./helpers\\\").pointsAccessorFunction;function s(t,e){var r,s,l,c,u,h,f,p,d,g,v=e.transform,m=e.transformIndex,y=t.transforms[m].groups,x=o(t.transforms,v);if(!Array.isArray(y)||0===y.length)return[t];var b=n.filterUnique(y),_=new Array(b.length),w=y.length,k=i.findArrayAttributes(t),T=v.styles||[],A={};for(r=0;r<T.length;r++)A[T[r].target]=T[r].value;v.styles&&(g=n.keyedContainer(v,\\\"styles\\\",\\\"target\\\",\\\"value.name\\\"));var M={},S={};for(r=0;r<b.length;r++){M[h=b[r]]=r,S[h]=0,(f=_[r]=n.extendDeepNoArrays({},t))._group=h,f.transforms[m]._indexToPoints={};var E=null;for(g&&(E=g.get(h)),f.name=E||\\\"\\\"===E?E:n.templateString(v.nameformat,{trace:t.name,group:h}),p=f.transforms,f.transforms=[],s=0;s<p.length;s++)f.transforms[s]=n.extendDeepNoArrays({},p[s]);for(s=0;s<k.length;s++)n.nestedProperty(f,k[s]).set([])}for(l=0;l<k.length;l++){for(c=k[l],s=0,d=[];s<b.length;s++)d[s]=n.nestedProperty(_[s],c).get();for(u=n.nestedProperty(t,c).get(),s=0;s<w;s++)d[M[y[s]]].push(u[s])}for(s=0;s<w;s++){(f=_[M[y[s]]]).transforms[m]._indexToPoints[S[y[s]]]=x(s),S[y[s]]++}for(r=0;r<b.length;r++)h=b[r],f=_[r],a.clearExpandedTraceDefaultColors(f),f=n.extendDeepNoArrays(f,A[h]||{});return _}r.moduleType=\\\"transform\\\",r.name=\\\"groupby\\\",r.attributes={enabled:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},groups:{valType:\\\"data_array\\\",dflt:[],editType:\\\"calc\\\"},nameformat:{valType:\\\"string\\\",editType:\\\"calc\\\"},styles:{_isLinkedToArray:\\\"style\\\",target:{valType:\\\"string\\\",editType:\\\"calc\\\"},value:{valType:\\\"any\\\",dflt:{},editType:\\\"calc\\\",_compareAsJSON:!0},editType:\\\"calc\\\"},editType:\\\"calc\\\"},r.supplyDefaults=function(t,e,i){var a,o={};function s(e,i){return n.coerce(t,o,r.attributes,e,i)}if(!s(\\\"enabled\\\"))return o;s(\\\"groups\\\"),s(\\\"nameformat\\\",i._dataLength>1?\\\"%{group} (%{trace})\\\":\\\"%{group}\\\");var l=t.styles,c=o.styles=[];if(l)for(a=0;a<l.length;a++){var u=c[a]={};n.coerce(l[a],c[a],r.attributes.styles,\\\"target\\\");var h=n.coerce(l[a],c[a],r.attributes.styles,\\\"value\\\");n.isPlainObject(h)?u.value=n.extendDeep({},h):h&&delete u.value}return o},r.transform=function(t,e){var r,n,i,a=[];for(n=0;n<t.length;n++)for(r=s(t[n],e),i=0;i<r.length;i++)a.push(r[i]);return a}},{\\\"../lib\\\":719,\\\"../plot_api/plot_schema\\\":756,\\\"../plots/plots\\\":828,\\\"./helpers\\\":1269}],1269:[function(t,e,r){\\\"use strict\\\";r.pointsAccessorFunction=function(t,e){for(var r,n,i=0;i<t.length&&(r=t[i])!==e;i++)r._indexToPoints&&!1!==r.enabled&&(n=r._indexToPoints);return n?function(t){return n[t]}:function(t){return[t]}}},{}],1270:[function(t,e,r){\\\"use strict\\\";var n=t(\\\"../lib\\\"),i=t(\\\"../plots/cartesian/axes\\\"),a=t(\\\"./helpers\\\").pointsAccessorFunction;r.moduleType=\\\"transform\\\",r.name=\\\"sort\\\",r.attributes={enabled:{valType:\\\"boolean\\\",dflt:!0,editType:\\\"calc\\\"},target:{valType:\\\"string\\\",strict:!0,noBlank:!0,arrayOk:!0,dflt:\\\"x\\\",editType:\\\"calc\\\"},order:{valType:\\\"enumerated\\\",values:[\\\"ascending\\\",\\\"descending\\\"],dflt:\\\"ascending\\\",editType:\\\"calc\\\"},editType:\\\"calc\\\"},r.supplyDefaults=function(t){var e={};function i(i,a){return n.coerce(t,e,r.attributes,i,a)}return i(\\\"enabled\\\")&&(i(\\\"target\\\"),i(\\\"order\\\")),e},r.calcTransform=function(t,e,r){if(r.enabled){var o=n.getTargetArray(e,r);if(o){var s=r.target,l=o.length;e._length&&(l=Math.min(l,e._length));var c,u,h=e._arrayAttrs,f=function(t,e,r,n){var i,a=new Array(n),o=new Array(n);for(i=0;i<n;i++)a[i]={v:e[i],i:i};for(a.sort(function(t,e){switch(t.order){case\\\"ascending\\\":return function(t,r){return e(t.v)-e(r.v)};case\\\"descending\\\":return function(t,r){return e(r.v)-e(t.v)}}}(t,r)),i=0;i<n;i++)o[i]=a[i].i;return o}(r,o,i.getDataToCoordFunc(t,e,s,o),l),p=a(e.transforms,r),d={};for(c=0;c<h.length;c++){var g=n.nestedProperty(e,h[c]),v=g.get(),m=new Array(l);for(u=0;u<l;u++)m[u]=v[f[u]];g.set(m)}for(u=0;u<l;u++)d[u]=p(f[u]);r._indexToPoints=d,e._length=l}}}},{\\\"../lib\\\":719,\\\"../plots/cartesian/axes\\\":767,\\\"./helpers\\\":1269}]},{},[25])(25)});\\n\",\n       \"        });\\n\",\n       \"        require(['plotly'], function(Plotly) {\\n\",\n       \"            window._Plotly = Plotly;\\n\",\n       \"        });\\n\",\n       \"        }\\n\",\n       \"        </script>\\n\",\n       \"        \"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"application/vnd.plotly.v1+json\": {\n       \"config\": {\n        \"plotlyServerURL\": \"https://plot.ly\"\n       },\n       \"data\": [\n        {\n         \"name\": \"open\",\n         \"type\": \"bar\",\n         \"x\": [\n          \"effort/1-day\",\n          \"effort/1-days\",\n          \"effort/3-days\",\n          \"effort/5-days\",\n          \"effort/2-weeks\"\n         ],\n         \"y\": [\n          4,\n          6,\n          7,\n          7,\n          7\n         ]\n        },\n        {\n         \"name\": \"total\",\n         \"type\": \"bar\",\n         \"x\": [\n          \"effort/1-day\",\n          \"effort/1-days\",\n          \"effort/3-days\",\n          \"effort/5-days\",\n          \"effort/2-weeks\"\n         ],\n         \"y\": [\n          4,\n          6,\n          7,\n          7,\n          7\n         ]\n        }\n       ],\n       \"layout\": {\n        \"template\": {\n         \"data\": {\n          \"bar\": [\n           {\n            \"error_x\": {\n             \"color\": \"#2a3f5f\"\n            },\n            \"error_y\": {\n             \"color\": \"#2a3f5f\"\n            },\n            \"marker\": {\n             \"line\": {\n              \"color\": \"#E5ECF6\",\n              \"width\": 0.5\n             }\n            },\n            \"type\": \"bar\"\n           }\n          ],\n          \"barpolar\": [\n           {\n            \"marker\": {\n             \"line\": {\n              \"color\": \"#E5ECF6\",\n              \"width\": 0.5\n             }\n            },\n            \"type\": \"barpolar\"\n           }\n          ],\n          \"carpet\": [\n           {\n            \"aaxis\": {\n             \"endlinecolor\": \"#2a3f5f\",\n             \"gridcolor\": \"white\",\n             \"linecolor\": \"white\",\n             \"minorgridcolor\": \"white\",\n             \"startlinecolor\": \"#2a3f5f\"\n            },\n            \"baxis\": {\n             \"endlinecolor\": \"#2a3f5f\",\n             \"gridcolor\": \"white\",\n             \"linecolor\": \"white\",\n             \"minorgridcolor\": \"white\",\n             \"startlinecolor\": \"#2a3f5f\"\n            },\n            \"type\": \"carpet\"\n           }\n          ],\n          \"choropleth\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"choropleth\"\n           }\n          ],\n          \"contour\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"contour\"\n           }\n          ],\n          \"contourcarpet\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"contourcarpet\"\n           }\n          ],\n          \"heatmap\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"heatmap\"\n           }\n          ],\n          \"heatmapgl\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"heatmapgl\"\n           }\n          ],\n          \"histogram\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"histogram\"\n           }\n          ],\n          \"histogram2d\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"histogram2d\"\n           }\n          ],\n          \"histogram2dcontour\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"histogram2dcontour\"\n           }\n          ],\n          \"mesh3d\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"mesh3d\"\n           }\n          ],\n          \"parcoords\": [\n           {\n            \"line\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"parcoords\"\n           }\n          ],\n          \"scatter\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatter\"\n           }\n          ],\n          \"scatter3d\": [\n           {\n            \"line\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatter3d\"\n           }\n          ],\n          \"scattercarpet\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattercarpet\"\n           }\n          ],\n          \"scattergeo\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattergeo\"\n           }\n          ],\n          \"scattergl\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattergl\"\n           }\n          ],\n          \"scattermapbox\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattermapbox\"\n           }\n          ],\n          \"scatterpolar\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterpolar\"\n           }\n          ],\n          \"scatterpolargl\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterpolargl\"\n           }\n          ],\n          \"scatterternary\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterternary\"\n           }\n          ],\n          \"surface\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"surface\"\n           }\n          ],\n          \"table\": [\n           {\n            \"cells\": {\n             \"fill\": {\n              \"color\": \"#EBF0F8\"\n             },\n             \"line\": {\n              \"color\": \"white\"\n             }\n            },\n            \"header\": {\n             \"fill\": {\n              \"color\": \"#C8D4E3\"\n             },\n             \"line\": {\n              \"color\": \"white\"\n             }\n            },\n            \"type\": \"table\"\n           }\n          ]\n         },\n         \"layout\": {\n          \"annotationdefaults\": {\n           \"arrowcolor\": \"#2a3f5f\",\n           \"arrowhead\": 0,\n           \"arrowwidth\": 1\n          },\n          \"colorscale\": {\n           \"diverging\": [\n            [\n             0,\n             \"#8e0152\"\n            ],\n            [\n             0.1,\n             \"#c51b7d\"\n            ],\n            [\n             0.2,\n             \"#de77ae\"\n            ],\n            [\n             0.3,\n             \"#f1b6da\"\n            ],\n            [\n             0.4,\n             \"#fde0ef\"\n            ],\n            [\n             0.5,\n             \"#f7f7f7\"\n            ],\n            [\n             0.6,\n             \"#e6f5d0\"\n            ],\n            [\n             0.7,\n             \"#b8e186\"\n            ],\n            [\n             0.8,\n             \"#7fbc41\"\n            ],\n            [\n             0.9,\n             \"#4d9221\"\n            ],\n            [\n             1,\n             \"#276419\"\n            ]\n           ],\n           \"sequential\": [\n            [\n             0,\n             \"#0d0887\"\n            ],\n            [\n             0.1111111111111111,\n             \"#46039f\"\n            ],\n            [\n             0.2222222222222222,\n             \"#7201a8\"\n            ],\n            [\n             0.3333333333333333,\n             \"#9c179e\"\n            ],\n            [\n             0.4444444444444444,\n             \"#bd3786\"\n            ],\n            [\n             0.5555555555555556,\n             \"#d8576b\"\n            ],\n            [\n             0.6666666666666666,\n             \"#ed7953\"\n            ],\n            [\n             0.7777777777777778,\n             \"#fb9f3a\"\n            ],\n            [\n             0.8888888888888888,\n             \"#fdca26\"\n            ],\n            [\n             1,\n             \"#f0f921\"\n            ]\n           ],\n           \"sequentialminus\": [\n            [\n             0,\n             \"#0d0887\"\n            ],\n            [\n             0.1111111111111111,\n             \"#46039f\"\n            ],\n            [\n             0.2222222222222222,\n             \"#7201a8\"\n            ],\n            [\n             0.3333333333333333,\n             \"#9c179e\"\n            ],\n            [\n             0.4444444444444444,\n             \"#bd3786\"\n            ],\n            [\n             0.5555555555555556,\n             \"#d8576b\"\n            ],\n            [\n             0.6666666666666666,\n             \"#ed7953\"\n            ],\n            [\n             0.7777777777777778,\n             \"#fb9f3a\"\n            ],\n            [\n             0.8888888888888888,\n             \"#fdca26\"\n            ],\n            [\n             1,\n             \"#f0f921\"\n            ]\n           ]\n          },\n          \"colorway\": [\n           \"#636efa\",\n           \"#EF553B\",\n           \"#00cc96\",\n           \"#ab63fa\",\n           \"#FFA15A\",\n           \"#19d3f3\",\n           \"#FF6692\",\n           \"#B6E880\",\n           \"#FF97FF\",\n           \"#FECB52\"\n          ],\n          \"font\": {\n           \"color\": \"#2a3f5f\"\n          },\n          \"geo\": {\n           \"bgcolor\": \"white\",\n           \"lakecolor\": \"white\",\n           \"landcolor\": \"#E5ECF6\",\n           \"showlakes\": true,\n           \"showland\": true,\n           \"subunitcolor\": \"white\"\n          },\n          \"hoverlabel\": {\n           \"align\": \"left\"\n          },\n          \"hovermode\": \"closest\",\n          \"mapbox\": {\n           \"style\": \"light\"\n          },\n          \"paper_bgcolor\": \"white\",\n          \"plot_bgcolor\": \"#E5ECF6\",\n          \"polar\": {\n           \"angularaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"bgcolor\": \"#E5ECF6\",\n           \"radialaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           }\n          },\n          \"scene\": {\n           \"xaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           },\n           \"yaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           },\n           \"zaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           }\n          },\n          \"shapedefaults\": {\n           \"line\": {\n            \"color\": \"#2a3f5f\"\n           }\n          },\n          \"ternary\": {\n           \"aaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"baxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"bgcolor\": \"#E5ECF6\",\n           \"caxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           }\n          },\n          \"title\": {\n           \"x\": 0.05\n          },\n          \"xaxis\": {\n           \"automargin\": true,\n           \"gridcolor\": \"white\",\n           \"linecolor\": \"white\",\n           \"ticks\": \"\",\n           \"zerolinecolor\": \"white\",\n           \"zerolinewidth\": 2\n          },\n          \"yaxis\": {\n           \"automargin\": true,\n           \"gridcolor\": \"white\",\n           \"linecolor\": \"white\",\n           \"ticks\": \"\",\n           \"zerolinecolor\": \"white\",\n           \"zerolinewidth\": 2\n          }\n         }\n        }\n       }\n      },\n      \"text/html\": [\n       \"<div>\\n\",\n       \"        \\n\",\n       \"        \\n\",\n       \"            <div id=\\\"0acdf4a3-a796-446d-bf92-9316cb3a5b86\\\" class=\\\"plotly-graph-div\\\" style=\\\"height:525px; width:100%;\\\"></div>\\n\",\n       \"            <script type=\\\"text/javascript\\\">\\n\",\n       \"                require([\\\"plotly\\\"], function(Plotly) {\\n\",\n       \"                    window.PLOTLYENV=window.PLOTLYENV || {};\\n\",\n       \"                    \\n\",\n       \"                if (document.getElementById(\\\"0acdf4a3-a796-446d-bf92-9316cb3a5b86\\\")) {\\n\",\n       \"                    Plotly.newPlot(\\n\",\n       \"                        '0acdf4a3-a796-446d-bf92-9316cb3a5b86',\\n\",\n       \"                        [{\\\"name\\\": \\\"open\\\", \\\"type\\\": \\\"bar\\\", \\\"x\\\": [\\\"effort/1-day\\\", \\\"effort/1-days\\\", \\\"effort/3-days\\\", \\\"effort/5-days\\\", \\\"effort/2-weeks\\\"], \\\"y\\\": [4, 6, 7, 7, 7]}, {\\\"name\\\": \\\"total\\\", \\\"type\\\": \\\"bar\\\", \\\"x\\\": [\\\"effort/1-day\\\", \\\"effort/1-days\\\", \\\"effort/3-days\\\", \\\"effort/5-days\\\", \\\"effort/2-weeks\\\"], \\\"y\\\": [4, 6, 7, 7, 7]}],\\n\",\n       \"                        {\\\"template\\\": {\\\"data\\\": {\\\"bar\\\": [{\\\"error_x\\\": {\\\"color\\\": \\\"#2a3f5f\\\"}, \\\"error_y\\\": {\\\"color\\\": \\\"#2a3f5f\\\"}, \\\"marker\\\": {\\\"line\\\": {\\\"color\\\": \\\"#E5ECF6\\\", \\\"width\\\": 0.5}}, \\\"type\\\": \\\"bar\\\"}], \\\"barpolar\\\": [{\\\"marker\\\": {\\\"line\\\": {\\\"color\\\": \\\"#E5ECF6\\\", \\\"width\\\": 0.5}}, \\\"type\\\": \\\"barpolar\\\"}], \\\"carpet\\\": [{\\\"aaxis\\\": {\\\"endlinecolor\\\": \\\"#2a3f5f\\\", \\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"minorgridcolor\\\": \\\"white\\\", \\\"startlinecolor\\\": \\\"#2a3f5f\\\"}, \\\"baxis\\\": {\\\"endlinecolor\\\": \\\"#2a3f5f\\\", \\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"minorgridcolor\\\": \\\"white\\\", \\\"startlinecolor\\\": \\\"#2a3f5f\\\"}, \\\"type\\\": \\\"carpet\\\"}], \\\"choropleth\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"type\\\": \\\"choropleth\\\"}], \\\"contour\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"contour\\\"}], \\\"contourcarpet\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"type\\\": \\\"contourcarpet\\\"}], \\\"heatmap\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"heatmap\\\"}], \\\"heatmapgl\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"heatmapgl\\\"}], \\\"histogram\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"histogram\\\"}], \\\"histogram2d\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"histogram2d\\\"}], \\\"histogram2dcontour\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"histogram2dcontour\\\"}], \\\"mesh3d\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"type\\\": \\\"mesh3d\\\"}], \\\"parcoords\\\": [{\\\"line\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"parcoords\\\"}], \\\"scatter\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scatter\\\"}], \\\"scatter3d\\\": [{\\\"line\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scatter3d\\\"}], \\\"scattercarpet\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scattercarpet\\\"}], \\\"scattergeo\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scattergeo\\\"}], \\\"scattergl\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scattergl\\\"}], \\\"scattermapbox\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scattermapbox\\\"}], \\\"scatterpolar\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scatterpolar\\\"}], \\\"scatterpolargl\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scatterpolargl\\\"}], \\\"scatterternary\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scatterternary\\\"}], \\\"surface\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"surface\\\"}], \\\"table\\\": [{\\\"cells\\\": {\\\"fill\\\": {\\\"color\\\": \\\"#EBF0F8\\\"}, \\\"line\\\": {\\\"color\\\": \\\"white\\\"}}, \\\"header\\\": {\\\"fill\\\": {\\\"color\\\": \\\"#C8D4E3\\\"}, \\\"line\\\": {\\\"color\\\": \\\"white\\\"}}, \\\"type\\\": \\\"table\\\"}]}, \\\"layout\\\": {\\\"annotationdefaults\\\": {\\\"arrowcolor\\\": \\\"#2a3f5f\\\", \\\"arrowhead\\\": 0, \\\"arrowwidth\\\": 1}, \\\"colorscale\\\": {\\\"diverging\\\": [[0, \\\"#8e0152\\\"], [0.1, \\\"#c51b7d\\\"], [0.2, \\\"#de77ae\\\"], [0.3, \\\"#f1b6da\\\"], [0.4, \\\"#fde0ef\\\"], [0.5, \\\"#f7f7f7\\\"], [0.6, \\\"#e6f5d0\\\"], [0.7, \\\"#b8e186\\\"], [0.8, \\\"#7fbc41\\\"], [0.9, \\\"#4d9221\\\"], [1, \\\"#276419\\\"]], \\\"sequential\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"sequentialminus\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]]}, \\\"colorway\\\": [\\\"#636efa\\\", \\\"#EF553B\\\", \\\"#00cc96\\\", \\\"#ab63fa\\\", \\\"#FFA15A\\\", \\\"#19d3f3\\\", \\\"#FF6692\\\", \\\"#B6E880\\\", \\\"#FF97FF\\\", \\\"#FECB52\\\"], \\\"font\\\": {\\\"color\\\": \\\"#2a3f5f\\\"}, \\\"geo\\\": {\\\"bgcolor\\\": \\\"white\\\", \\\"lakecolor\\\": \\\"white\\\", \\\"landcolor\\\": \\\"#E5ECF6\\\", \\\"showlakes\\\": true, \\\"showland\\\": true, \\\"subunitcolor\\\": \\\"white\\\"}, \\\"hoverlabel\\\": {\\\"align\\\": \\\"left\\\"}, \\\"hovermode\\\": \\\"closest\\\", \\\"mapbox\\\": {\\\"style\\\": \\\"light\\\"}, \\\"paper_bgcolor\\\": \\\"white\\\", \\\"plot_bgcolor\\\": \\\"#E5ECF6\\\", \\\"polar\\\": {\\\"angularaxis\\\": {\\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\"}, \\\"bgcolor\\\": \\\"#E5ECF6\\\", \\\"radialaxis\\\": {\\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\"}}, \\\"scene\\\": {\\\"xaxis\\\": {\\\"backgroundcolor\\\": \\\"#E5ECF6\\\", \\\"gridcolor\\\": \\\"white\\\", \\\"gridwidth\\\": 2, \\\"linecolor\\\": \\\"white\\\", \\\"showbackground\\\": true, \\\"ticks\\\": \\\"\\\", \\\"zerolinecolor\\\": \\\"white\\\"}, \\\"yaxis\\\": {\\\"backgroundcolor\\\": \\\"#E5ECF6\\\", \\\"gridcolor\\\": \\\"white\\\", \\\"gridwidth\\\": 2, \\\"linecolor\\\": \\\"white\\\", \\\"showbackground\\\": true, \\\"ticks\\\": \\\"\\\", \\\"zerolinecolor\\\": \\\"white\\\"}, \\\"zaxis\\\": {\\\"backgroundcolor\\\": \\\"#E5ECF6\\\", \\\"gridcolor\\\": \\\"white\\\", \\\"gridwidth\\\": 2, \\\"linecolor\\\": \\\"white\\\", \\\"showbackground\\\": true, \\\"ticks\\\": \\\"\\\", \\\"zerolinecolor\\\": \\\"white\\\"}}, \\\"shapedefaults\\\": {\\\"line\\\": {\\\"color\\\": \\\"#2a3f5f\\\"}}, \\\"ternary\\\": {\\\"aaxis\\\": {\\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\"}, \\\"baxis\\\": {\\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\"}, \\\"bgcolor\\\": \\\"#E5ECF6\\\", \\\"caxis\\\": {\\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\"}}, \\\"title\\\": {\\\"x\\\": 0.05}, \\\"xaxis\\\": {\\\"automargin\\\": true, \\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\", \\\"zerolinecolor\\\": \\\"white\\\", \\\"zerolinewidth\\\": 2}, \\\"yaxis\\\": {\\\"automargin\\\": true, \\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\", \\\"zerolinecolor\\\": \\\"white\\\", \\\"zerolinewidth\\\": 2}}}},\\n\",\n       \"                        {\\\"responsive\\\": true}\\n\",\n       \"                    ).then(function(){\\n\",\n       \"                            \\n\",\n       \"var gd = document.getElementById('0acdf4a3-a796-446d-bf92-9316cb3a5b86');\\n\",\n       \"var x = new MutationObserver(function (mutations, observer) {{\\n\",\n       \"        var display = window.getComputedStyle(gd).display;\\n\",\n       \"        if (!display || display === 'none') {{\\n\",\n       \"            console.log([gd, 'removed!']);\\n\",\n       \"            Plotly.purge(gd);\\n\",\n       \"            observer.disconnect();\\n\",\n       \"        }}\\n\",\n       \"}});\\n\",\n       \"\\n\",\n       \"// Listen for the removal of the full notebook cells\\n\",\n       \"var notebookContainer = gd.closest('#notebook-container');\\n\",\n       \"if (notebookContainer) {{\\n\",\n       \"    x.observe(notebookContainer, {childList: true});\\n\",\n       \"}}\\n\",\n       \"\\n\",\n       \"// Listen for the clearing of the current output cell\\n\",\n       \"var outputEl = gd.closest('.output');\\n\",\n       \"if (outputEl) {{\\n\",\n       \"    x.observe(outputEl, {childList: true});\\n\",\n       \"}}\\n\",\n       \"\\n\",\n       \"                        })\\n\",\n       \"                };\\n\",\n       \"                });\\n\",\n       \"            </script>\\n\",\n       \"        </div>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"df = pandas.DataFrame({}, index = effort_labels)\\n\",\n    \"df['open'] = open_effort_distribution(c.stats).values[0]\\n\",\n    \"df['total'] = total_effort_distribution(c.stats).values[0]\\n\",\n    \"\\n\",\n    \"data = [\\n\",\n    \"   go.Bar(\\n\",\n    \"    x=effort_labels,\\n\",\n    \"    y=df[col].values,\\n\",\n    \"    name=col\\n\",\n    \"    ) for col in df.columns\\n\",\n    \"]\\n\",\n    \"\\n\",\n    \"go.Figure(data)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Compute Tracking Issue Stats\\n\",\n    \"\\n\",\n    \"The following section computes the progress/completion tracking stats for the components of Kubeflow targeted for 1.0. For all those components, we categorize the issues under the application requirements set by https://github.com/kubeflow/community/blob/master/guidelines/application_requirements.md\\n\",\n    \"\\n\",\n    \"For each Application & Category combination the following code computes the total issues filed vs. those that are closed. This information is used to produce a completion heat map across the applications and categories.\\n\",\n    \"\\n\",\n    \"The information is extracted as following:\\n\",\n    \"\\n\",\n    \"    - The tracking issues for all components are listed below.\\n\",\n    \"    - They follow a well defined template for listing requirement categories and associated Github issues.\\n\",\n    \"    - The parser downloads the issue body and extract sections for each of those categories.\\n\",\n    \"    - It then extracts the referenced github issues from those sections and computes the stats on total referenced issues vs. closed issues.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import os\\n\",\n    \"import re\\n\",\n    \"from github import Github\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Tracking issues for KF 1.0\\n\",\n    \"kf1_tracking_issues = {\\n\",\n    \"    'Kfctl' : 'https://github.com/kubeflow/kfctl/issues/18',\\n\",\n    \"    'Central Dashboard' : 'https://github.com/kubeflow/kubeflow/issues/4026',\\n\",\n    \"    'Notebooks Manager UI' : 'https://github.com/kubeflow/kubeflow/issues/4062',\\n\",\n    \"    'Notebooks Controller' : 'https://github.com/kubeflow/kubeflow/issues/3656',\\n\",\n    \"    'Profiles Controller' : 'https://github.com/kubeflow/kubeflow/issues/4058',\\n\",\n    \"    'KFServing Deployments' : 'https://github.com/kubeflow/kubeflow/issues/4061',\\n\",\n    \"}\\n\",\n    \"\\n\",\n    \"kf1_tracking_cats = [\\n\",\n    \"    'Configuration and deployment',\\n\",\n    \"    'Logging and monitoring',\\n\",\n    \"    'CI/CD',\\n\",\n    \"    'Docs'\\n\",\n    \"]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"'Kubeflow'\"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# NOTE: Setup GITHUB_TOKEN environment variable to your Github access token\\n\",\n    \"gh = Github(os.environ['GITHUB_TOKEN'])\\n\",\n    \"kf_org, = [o for o in gh.get_user().get_orgs() if o.name == 'Kubeflow']\\n\",\n    \"kf_org.name\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def parse_issue_url(url_str):\\n\",\n    \"    \\\"\\\"\\\" Parse a github issue url to extrac the repo name and the issue id.\\n\",\n    \"        url_str: url for the issue.\\n\",\n    \"        return (repo_name, issue_id)\\n\",\n    \"    \\\"\\\"\\\"\\n\",\n    \"    url_parts = url_str.split('/')\\n\",\n    \"    issue_id = url_parts[-1]\\n\",\n    \"    repo_name = url_parts[-3]\\n\",\n    \"    return (repo_name, int(issue_id))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def get_issue(gh_org, repo_name, issue_id):\\n\",\n    \"    \\\"\\\"\\\" Fetch the specified Github Issue.\\n\",\n    \"        gh_org: Org The Github org that owns the repo.\\n\",\n    \"        repo_name: string Name of the repo\\n\",\n    \"        issue_id: int\\n\",\n    \"    \\\"\\\"\\\"\\n\",\n    \"    return gh_org.get_repo(repo_name).get_issue(issue_id)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 16,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def extract_referenced_issues(content):\\n\",\n    \"    \\\"\\\"\\\"Collect a list of github issues referenced in the content.\\n\",\n    \"       \\n\",\n    \"       content: string markdown representing the body of the tracking issue.\\n\",\n    \"    \\\"\\\"\\\"\\n\",\n    \"    ref_issues = re.findall(r'[a-z/]*#\\\\d+', content)\\n\",\n    \"    return ref_issues\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 17,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def get_issue_status(fq_issue_id, cur_repo):\\n\",\n    \"    \\\"\\\"\\\"Identify if the github issue is open or close.\\n\",\n    \"        fq_issue_id: string representing github format for the issue id.\\n\",\n    \"        cur_repo: string reponame of the current repository. All short form issues\\n\",\n    \"                         are assumed to belong to this repository.\\n\",\n    \"        \\n\",\n    \"        returns 'open' or 'closed'.\\n\",\n    \"    \\\"\\\"\\\"\\n\",\n    \"    parts = fq_issue_id.split('#')\\n\",\n    \"    issue_id = int(parts[-1])\\n\",\n    \"    repo_name = cur_repo\\n\",\n    \"    if len(parts[0]) > 0:\\n\",\n    \"        repo_name = parts[0].split('/')[-1]\\n\",\n    \"    iss = get_issue(kf_org, repo_name, issue_id)\\n\",\n    \"    return iss.state\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 18,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def get_ref_issues_stats(repo_name, content):\\n\",\n    \"    \\\"\\\"\\\"Compute state of issues referenced in the content.\\n\",\n    \"    \\\"\\\"\\\"\\n\",\n    \"    ref_issues = extract_referenced_issues(content)\\n\",\n    \"    total_issues = len(ref_issues)\\n\",\n    \"    ref_issue_states = [get_issue_status(r, repo_name) for r in ref_issues]\\n\",\n    \"    closed = ref_issue_states.count('closed')\\n\",\n    \"    return(closed, total_issues)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 19,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def tracking_issue_state(issue_url):\\n\",\n    \"    \\\"\\\"\\\" Compute the tracking issue state given the tracking issue url\\n\",\n    \"    \\\"\\\"\\\"\\n\",\n    \"    repo_name, tr_issue_id = parse_issue_url(issue_url)\\n\",\n    \"    tr_issue = get_issue(kf_org, repo_name, tr_issue_id)\\n\",\n    \"    return get_ref_issues_stats(repo_name, tr_issue.body) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 20,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def get_sections(content):\\n\",\n    \"    \\\"\\\"\\\" Split trakcing issue content into separate sections for each set of 1.0 requirements.\\n\",\n    \"    \\\"\\\"\\\"\\n\",\n    \"    headers = re.findall(r'### [A-Za-z/ ]+', content)\\n\",\n    \"    sec_content = re.split(r'### [A-Za-z/ ]+', content)[1:] # Skip content previous to first header\\n\",\n    \"    lower_kf1_tracking_cats = [cat.lower() for cat in kf1_tracking_cats]\\n\",\n    \"    sections = {}\\n\",\n    \"    for h,s in zip(headers, sec_content):\\n\",\n    \"        hh = h[4:]\\n\",\n    \"        if hh.lower() in lower_kf1_tracking_cats:\\n\",\n    \"            sections[hh] = s\\n\",\n    \"            \\n\",\n    \"    return sections\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 21,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def plot_tracking_stats():\\n\",\n    \"    tracking_df = pandas.DataFrame({}, columns=['closed', 'total', 'percent'])\\n\",\n    \"    print('Fetching stats on...')\\n\",\n    \"    for k,v in kf1_tracking_issues.items():\\n\",\n    \"        print(k)\\n\",\n    \"        closed, total = tracking_issue_state(v)\\n\",\n    \"        tracking_df.loc[k] = [closed, total, closed * 100.0 / total]\\n\",\n    \"    print(\\\"Done\\\")\\n\",\n    \"    bar_texts = [str(tracking_df.loc[i, 'closed']) + '/' + str(tracking_df.loc[i, 'total']) for i in tracking_df.index.values]\\n\",\n    \"    data = [\\n\",\n    \"       go.Bar(\\n\",\n    \"        y=tracking_df.index.values,\\n\",\n    \"        x=tracking_df['percent'],\\n\",\n    \"        orientation = 'h',\\n\",\n    \"        text = bar_texts,\\n\",\n    \"        ) \\n\",\n    \"    ]\\n\",\n    \"\\n\",\n    \"    return go.Figure(data)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 22,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Fetching stats on...\\n\",\n      \"Kfctl\\n\",\n      \"Central Dashboard\\n\",\n      \"Notebooks Manager UI\\n\",\n      \"Notebooks Controller\\n\",\n      \"Profiles Controller\\n\",\n      \"KFServing Deployments\\n\",\n      \"Done\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"application/vnd.plotly.v1+json\": {\n       \"config\": {\n        \"plotlyServerURL\": \"https://plot.ly\"\n       },\n       \"data\": [\n        {\n         \"orientation\": \"h\",\n         \"text\": [\n          \"0.0/21.0\",\n          \"1.0/8.0\",\n          \"1.0/7.0\",\n          \"2.0/17.0\",\n          \"1.0/13.0\",\n          \"1.0/1.0\"\n         ],\n         \"type\": \"bar\",\n         \"x\": [\n          0,\n          12.5,\n          14.285714285714286,\n          11.764705882352942,\n          7.6923076923076925,\n          100\n         ],\n         \"y\": [\n          \"Kfctl\",\n          \"Central Dashboard\",\n          \"Notebooks Manager UI\",\n          \"Notebooks Controller\",\n          \"Profiles Controller\",\n          \"KFServing Deployments\"\n         ]\n        }\n       ],\n       \"layout\": {\n        \"template\": {\n         \"data\": {\n          \"bar\": [\n           {\n            \"error_x\": {\n             \"color\": \"#2a3f5f\"\n            },\n            \"error_y\": {\n             \"color\": \"#2a3f5f\"\n            },\n            \"marker\": {\n             \"line\": {\n              \"color\": \"#E5ECF6\",\n              \"width\": 0.5\n             }\n            },\n            \"type\": \"bar\"\n           }\n          ],\n          \"barpolar\": [\n           {\n            \"marker\": {\n             \"line\": {\n              \"color\": \"#E5ECF6\",\n              \"width\": 0.5\n             }\n            },\n            \"type\": \"barpolar\"\n           }\n          ],\n          \"carpet\": [\n           {\n            \"aaxis\": {\n             \"endlinecolor\": \"#2a3f5f\",\n             \"gridcolor\": \"white\",\n             \"linecolor\": \"white\",\n             \"minorgridcolor\": \"white\",\n             \"startlinecolor\": \"#2a3f5f\"\n            },\n            \"baxis\": {\n             \"endlinecolor\": \"#2a3f5f\",\n             \"gridcolor\": \"white\",\n             \"linecolor\": \"white\",\n             \"minorgridcolor\": \"white\",\n             \"startlinecolor\": \"#2a3f5f\"\n            },\n            \"type\": \"carpet\"\n           }\n          ],\n          \"choropleth\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"choropleth\"\n           }\n          ],\n          \"contour\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"contour\"\n           }\n          ],\n          \"contourcarpet\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"contourcarpet\"\n           }\n          ],\n          \"heatmap\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"heatmap\"\n           }\n          ],\n          \"heatmapgl\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"heatmapgl\"\n           }\n          ],\n          \"histogram\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"histogram\"\n           }\n          ],\n          \"histogram2d\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"histogram2d\"\n           }\n          ],\n          \"histogram2dcontour\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"histogram2dcontour\"\n           }\n          ],\n          \"mesh3d\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"mesh3d\"\n           }\n          ],\n          \"parcoords\": [\n           {\n            \"line\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"parcoords\"\n           }\n          ],\n          \"scatter\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatter\"\n           }\n          ],\n          \"scatter3d\": [\n           {\n            \"line\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatter3d\"\n           }\n          ],\n          \"scattercarpet\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattercarpet\"\n           }\n          ],\n          \"scattergeo\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattergeo\"\n           }\n          ],\n          \"scattergl\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattergl\"\n           }\n          ],\n          \"scattermapbox\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattermapbox\"\n           }\n          ],\n          \"scatterpolar\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterpolar\"\n           }\n          ],\n          \"scatterpolargl\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterpolargl\"\n           }\n          ],\n          \"scatterternary\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterternary\"\n           }\n          ],\n          \"surface\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"surface\"\n           }\n          ],\n          \"table\": [\n           {\n            \"cells\": {\n             \"fill\": {\n              \"color\": \"#EBF0F8\"\n             },\n             \"line\": {\n              \"color\": \"white\"\n             }\n            },\n            \"header\": {\n             \"fill\": {\n              \"color\": \"#C8D4E3\"\n             },\n             \"line\": {\n              \"color\": \"white\"\n             }\n            },\n            \"type\": \"table\"\n           }\n          ]\n         },\n         \"layout\": {\n          \"annotationdefaults\": {\n           \"arrowcolor\": \"#2a3f5f\",\n           \"arrowhead\": 0,\n           \"arrowwidth\": 1\n          },\n          \"colorscale\": {\n           \"diverging\": [\n            [\n             0,\n             \"#8e0152\"\n            ],\n            [\n             0.1,\n             \"#c51b7d\"\n            ],\n            [\n             0.2,\n             \"#de77ae\"\n            ],\n            [\n             0.3,\n             \"#f1b6da\"\n            ],\n            [\n             0.4,\n             \"#fde0ef\"\n            ],\n            [\n             0.5,\n             \"#f7f7f7\"\n            ],\n            [\n             0.6,\n             \"#e6f5d0\"\n            ],\n            [\n             0.7,\n             \"#b8e186\"\n            ],\n            [\n             0.8,\n             \"#7fbc41\"\n            ],\n            [\n             0.9,\n             \"#4d9221\"\n            ],\n            [\n             1,\n             \"#276419\"\n            ]\n           ],\n           \"sequential\": [\n            [\n             0,\n             \"#0d0887\"\n            ],\n            [\n             0.1111111111111111,\n             \"#46039f\"\n            ],\n            [\n             0.2222222222222222,\n             \"#7201a8\"\n            ],\n            [\n             0.3333333333333333,\n             \"#9c179e\"\n            ],\n            [\n             0.4444444444444444,\n             \"#bd3786\"\n            ],\n            [\n             0.5555555555555556,\n             \"#d8576b\"\n            ],\n            [\n             0.6666666666666666,\n             \"#ed7953\"\n            ],\n            [\n             0.7777777777777778,\n             \"#fb9f3a\"\n            ],\n            [\n             0.8888888888888888,\n             \"#fdca26\"\n            ],\n            [\n             1,\n             \"#f0f921\"\n            ]\n           ],\n           \"sequentialminus\": [\n            [\n             0,\n             \"#0d0887\"\n            ],\n            [\n             0.1111111111111111,\n             \"#46039f\"\n            ],\n            [\n             0.2222222222222222,\n             \"#7201a8\"\n            ],\n            [\n             0.3333333333333333,\n             \"#9c179e\"\n            ],\n            [\n             0.4444444444444444,\n             \"#bd3786\"\n            ],\n            [\n             0.5555555555555556,\n             \"#d8576b\"\n            ],\n            [\n             0.6666666666666666,\n             \"#ed7953\"\n            ],\n            [\n             0.7777777777777778,\n             \"#fb9f3a\"\n            ],\n            [\n             0.8888888888888888,\n             \"#fdca26\"\n            ],\n            [\n             1,\n             \"#f0f921\"\n            ]\n           ]\n          },\n          \"colorway\": [\n           \"#636efa\",\n           \"#EF553B\",\n           \"#00cc96\",\n           \"#ab63fa\",\n           \"#FFA15A\",\n           \"#19d3f3\",\n           \"#FF6692\",\n           \"#B6E880\",\n           \"#FF97FF\",\n           \"#FECB52\"\n          ],\n          \"font\": {\n           \"color\": \"#2a3f5f\"\n          },\n          \"geo\": {\n           \"bgcolor\": \"white\",\n           \"lakecolor\": \"white\",\n           \"landcolor\": \"#E5ECF6\",\n           \"showlakes\": true,\n           \"showland\": true,\n           \"subunitcolor\": \"white\"\n          },\n          \"hoverlabel\": {\n           \"align\": \"left\"\n          },\n          \"hovermode\": \"closest\",\n          \"mapbox\": {\n           \"style\": \"light\"\n          },\n          \"paper_bgcolor\": \"white\",\n          \"plot_bgcolor\": \"#E5ECF6\",\n          \"polar\": {\n           \"angularaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"bgcolor\": \"#E5ECF6\",\n           \"radialaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           }\n          },\n          \"scene\": {\n           \"xaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           },\n           \"yaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           },\n           \"zaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           }\n          },\n          \"shapedefaults\": {\n           \"line\": {\n            \"color\": \"#2a3f5f\"\n           }\n          },\n          \"ternary\": {\n           \"aaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"baxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"bgcolor\": \"#E5ECF6\",\n           \"caxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           }\n          },\n          \"title\": {\n           \"x\": 0.05\n          },\n          \"xaxis\": {\n           \"automargin\": true,\n           \"gridcolor\": \"white\",\n           \"linecolor\": \"white\",\n           \"ticks\": \"\",\n           \"zerolinecolor\": \"white\",\n           \"zerolinewidth\": 2\n          },\n          \"yaxis\": {\n           \"automargin\": true,\n           \"gridcolor\": \"white\",\n           \"linecolor\": \"white\",\n           \"ticks\": \"\",\n           \"zerolinecolor\": \"white\",\n           \"zerolinewidth\": 2\n          }\n         }\n        }\n       }\n      },\n      \"text/html\": [\n       \"<div>\\n\",\n       \"        \\n\",\n       \"        \\n\",\n       \"            <div id=\\\"3ca270a5-453f-416c-9cef-259ec4f73948\\\" class=\\\"plotly-graph-div\\\" style=\\\"height:525px; width:100%;\\\"></div>\\n\",\n       \"            <script type=\\\"text/javascript\\\">\\n\",\n       \"                require([\\\"plotly\\\"], function(Plotly) {\\n\",\n       \"                    window.PLOTLYENV=window.PLOTLYENV || {};\\n\",\n       \"                    \\n\",\n       \"                if (document.getElementById(\\\"3ca270a5-453f-416c-9cef-259ec4f73948\\\")) {\\n\",\n       \"                    Plotly.newPlot(\\n\",\n       \"                        '3ca270a5-453f-416c-9cef-259ec4f73948',\\n\",\n       \"                        [{\\\"orientation\\\": \\\"h\\\", \\\"text\\\": [\\\"0.0/21.0\\\", \\\"1.0/8.0\\\", \\\"1.0/7.0\\\", \\\"2.0/17.0\\\", \\\"1.0/13.0\\\", \\\"1.0/1.0\\\"], \\\"type\\\": \\\"bar\\\", \\\"x\\\": [0.0, 12.5, 14.285714285714286, 11.764705882352942, 7.6923076923076925, 100.0], \\\"y\\\": [\\\"Kfctl\\\", \\\"Central Dashboard\\\", \\\"Notebooks Manager UI\\\", \\\"Notebooks Controller\\\", \\\"Profiles Controller\\\", \\\"KFServing Deployments\\\"]}],\\n\",\n       \"                        {\\\"template\\\": {\\\"data\\\": {\\\"bar\\\": [{\\\"error_x\\\": {\\\"color\\\": \\\"#2a3f5f\\\"}, \\\"error_y\\\": {\\\"color\\\": \\\"#2a3f5f\\\"}, \\\"marker\\\": {\\\"line\\\": {\\\"color\\\": \\\"#E5ECF6\\\", \\\"width\\\": 0.5}}, \\\"type\\\": \\\"bar\\\"}], \\\"barpolar\\\": [{\\\"marker\\\": {\\\"line\\\": {\\\"color\\\": \\\"#E5ECF6\\\", \\\"width\\\": 0.5}}, \\\"type\\\": \\\"barpolar\\\"}], \\\"carpet\\\": [{\\\"aaxis\\\": {\\\"endlinecolor\\\": \\\"#2a3f5f\\\", \\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"minorgridcolor\\\": \\\"white\\\", \\\"startlinecolor\\\": \\\"#2a3f5f\\\"}, \\\"baxis\\\": {\\\"endlinecolor\\\": \\\"#2a3f5f\\\", \\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"minorgridcolor\\\": \\\"white\\\", \\\"startlinecolor\\\": \\\"#2a3f5f\\\"}, \\\"type\\\": \\\"carpet\\\"}], \\\"choropleth\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"type\\\": \\\"choropleth\\\"}], \\\"contour\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"contour\\\"}], \\\"contourcarpet\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"type\\\": \\\"contourcarpet\\\"}], \\\"heatmap\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"heatmap\\\"}], \\\"heatmapgl\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"heatmapgl\\\"}], \\\"histogram\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"histogram\\\"}], \\\"histogram2d\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"histogram2d\\\"}], \\\"histogram2dcontour\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"histogram2dcontour\\\"}], \\\"mesh3d\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"type\\\": \\\"mesh3d\\\"}], \\\"parcoords\\\": [{\\\"line\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"parcoords\\\"}], \\\"scatter\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scatter\\\"}], \\\"scatter3d\\\": [{\\\"line\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scatter3d\\\"}], \\\"scattercarpet\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scattercarpet\\\"}], \\\"scattergeo\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scattergeo\\\"}], \\\"scattergl\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scattergl\\\"}], \\\"scattermapbox\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scattermapbox\\\"}], \\\"scatterpolar\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scatterpolar\\\"}], \\\"scatterpolargl\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scatterpolargl\\\"}], \\\"scatterternary\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scatterternary\\\"}], \\\"surface\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"surface\\\"}], \\\"table\\\": [{\\\"cells\\\": {\\\"fill\\\": {\\\"color\\\": \\\"#EBF0F8\\\"}, \\\"line\\\": {\\\"color\\\": \\\"white\\\"}}, \\\"header\\\": {\\\"fill\\\": {\\\"color\\\": \\\"#C8D4E3\\\"}, \\\"line\\\": {\\\"color\\\": \\\"white\\\"}}, \\\"type\\\": \\\"table\\\"}]}, \\\"layout\\\": {\\\"annotationdefaults\\\": {\\\"arrowcolor\\\": \\\"#2a3f5f\\\", \\\"arrowhead\\\": 0, \\\"arrowwidth\\\": 1}, \\\"colorscale\\\": {\\\"diverging\\\": [[0, \\\"#8e0152\\\"], [0.1, \\\"#c51b7d\\\"], [0.2, \\\"#de77ae\\\"], [0.3, \\\"#f1b6da\\\"], [0.4, \\\"#fde0ef\\\"], [0.5, \\\"#f7f7f7\\\"], [0.6, \\\"#e6f5d0\\\"], [0.7, \\\"#b8e186\\\"], [0.8, \\\"#7fbc41\\\"], [0.9, \\\"#4d9221\\\"], [1, \\\"#276419\\\"]], \\\"sequential\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"sequentialminus\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]]}, \\\"colorway\\\": [\\\"#636efa\\\", \\\"#EF553B\\\", \\\"#00cc96\\\", \\\"#ab63fa\\\", \\\"#FFA15A\\\", \\\"#19d3f3\\\", \\\"#FF6692\\\", \\\"#B6E880\\\", \\\"#FF97FF\\\", \\\"#FECB52\\\"], \\\"font\\\": {\\\"color\\\": \\\"#2a3f5f\\\"}, \\\"geo\\\": {\\\"bgcolor\\\": \\\"white\\\", \\\"lakecolor\\\": \\\"white\\\", \\\"landcolor\\\": \\\"#E5ECF6\\\", \\\"showlakes\\\": true, \\\"showland\\\": true, \\\"subunitcolor\\\": \\\"white\\\"}, \\\"hoverlabel\\\": {\\\"align\\\": \\\"left\\\"}, \\\"hovermode\\\": \\\"closest\\\", \\\"mapbox\\\": {\\\"style\\\": \\\"light\\\"}, \\\"paper_bgcolor\\\": \\\"white\\\", \\\"plot_bgcolor\\\": \\\"#E5ECF6\\\", \\\"polar\\\": {\\\"angularaxis\\\": {\\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\"}, \\\"bgcolor\\\": \\\"#E5ECF6\\\", \\\"radialaxis\\\": {\\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\"}}, \\\"scene\\\": {\\\"xaxis\\\": {\\\"backgroundcolor\\\": \\\"#E5ECF6\\\", \\\"gridcolor\\\": \\\"white\\\", \\\"gridwidth\\\": 2, \\\"linecolor\\\": \\\"white\\\", \\\"showbackground\\\": true, \\\"ticks\\\": \\\"\\\", \\\"zerolinecolor\\\": \\\"white\\\"}, \\\"yaxis\\\": {\\\"backgroundcolor\\\": \\\"#E5ECF6\\\", \\\"gridcolor\\\": \\\"white\\\", \\\"gridwidth\\\": 2, \\\"linecolor\\\": \\\"white\\\", \\\"showbackground\\\": true, \\\"ticks\\\": \\\"\\\", \\\"zerolinecolor\\\": \\\"white\\\"}, \\\"zaxis\\\": {\\\"backgroundcolor\\\": \\\"#E5ECF6\\\", \\\"gridcolor\\\": \\\"white\\\", \\\"gridwidth\\\": 2, \\\"linecolor\\\": \\\"white\\\", \\\"showbackground\\\": true, \\\"ticks\\\": \\\"\\\", \\\"zerolinecolor\\\": \\\"white\\\"}}, \\\"shapedefaults\\\": {\\\"line\\\": {\\\"color\\\": \\\"#2a3f5f\\\"}}, \\\"ternary\\\": {\\\"aaxis\\\": {\\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\"}, \\\"baxis\\\": {\\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\"}, \\\"bgcolor\\\": \\\"#E5ECF6\\\", \\\"caxis\\\": {\\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\"}}, \\\"title\\\": {\\\"x\\\": 0.05}, \\\"xaxis\\\": {\\\"automargin\\\": true, \\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\", \\\"zerolinecolor\\\": \\\"white\\\", \\\"zerolinewidth\\\": 2}, \\\"yaxis\\\": {\\\"automargin\\\": true, \\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\", \\\"zerolinecolor\\\": \\\"white\\\", \\\"zerolinewidth\\\": 2}}}},\\n\",\n       \"                        {\\\"responsive\\\": true}\\n\",\n       \"                    ).then(function(){\\n\",\n       \"                            \\n\",\n       \"var gd = document.getElementById('3ca270a5-453f-416c-9cef-259ec4f73948');\\n\",\n       \"var x = new MutationObserver(function (mutations, observer) {{\\n\",\n       \"        var display = window.getComputedStyle(gd).display;\\n\",\n       \"        if (!display || display === 'none') {{\\n\",\n       \"            console.log([gd, 'removed!']);\\n\",\n       \"            Plotly.purge(gd);\\n\",\n       \"            observer.disconnect();\\n\",\n       \"        }}\\n\",\n       \"}});\\n\",\n       \"\\n\",\n       \"// Listen for the removal of the full notebook cells\\n\",\n       \"var notebookContainer = gd.closest('#notebook-container');\\n\",\n       \"if (notebookContainer) {{\\n\",\n       \"    x.observe(notebookContainer, {childList: true});\\n\",\n       \"}}\\n\",\n       \"\\n\",\n       \"// Listen for the clearing of the current output cell\\n\",\n       \"var outputEl = gd.closest('.output');\\n\",\n       \"if (outputEl) {{\\n\",\n       \"    x.observe(outputEl, {childList: true});\\n\",\n       \"}}\\n\",\n       \"\\n\",\n       \"                        })\\n\",\n       \"                };\\n\",\n       \"                });\\n\",\n       \"            </script>\\n\",\n       \"        </div>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"plot_tracking_stats()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 23,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def tracking_heatmap():\\n\",\n    \"    \\\"\\\"\\\"Compute and display tracking heatmap across all components and categories.\\n\",\n    \"    \\\"\\\"\\\"\\n\",\n    \"    closed_df = pandas.DataFrame({}, columns=kf1_tracking_cats, index=kf1_tracking_issues.keys())\\n\",\n    \"    total_df = pandas.DataFrame({}, columns=kf1_tracking_cats, index=kf1_tracking_issues.keys())\\n\",\n    \"    percent_df = pandas.DataFrame({}, columns=kf1_tracking_cats, index=kf1_tracking_issues.keys())\\n\",\n    \"    \\n\",\n    \"    print('Fetching stats on...')\\n\",\n    \"    for k,v in kf1_tracking_issues.items():\\n\",\n    \"        print(k)\\n\",\n    \"        print(v)\\n\",\n    \"        repo_name, tr_issue_id = parse_issue_url(v)\\n\",\n    \"        tr_issue = get_issue(kf_org, repo_name, tr_issue_id)\\n\",\n    \"        sections = get_sections(tr_issue.body)\\n\",\n    \"        for st, sc in sections.items():\\n\",\n    \"            print('>>>' + st)\\n\",\n    \"            closed, total = get_ref_issues_stats(repo_name, sc)\\n\",\n    \"            closed_df.loc[k, st] = closed\\n\",\n    \"            total_df.loc[k, st] = total\\n\",\n    \"            if total != 0:\\n\",\n    \"                percent_df.loc[k, st] = closed * 100.0 / total\\n\",\n    \"            else:\\n\",\n    \"                percent_df.loc[k, st] = 0.0\\n\",\n    \"                \\n\",\n    \"    print(\\\"Done\\\")\\n\",\n    \"            \\n\",\n    \"    display(HTML(closed_df.to_html()))\\n\",\n    \"    display(HTML(total_df.to_html()))\\n\",\n    \"    display(HTML(percent_df.to_html()))\\n\",\n    \"    \\n\",\n    \"    fig = go.Figure(data=go.Heatmap(\\n\",\n    \"                   z= percent_df,\\n\",\n    \"                   x= percent_df.columns.values,\\n\",\n    \"                   y= percent_df.index.values))\\n\",\n    \"    fig.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 24,\n   \"metadata\": {\n    \"scrolled\": true\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Fetching stats on...\\n\",\n      \"Kfctl\\n\",\n      \"https://github.com/kubeflow/kfctl/issues/18\\n\",\n      \"Central Dashboard\\n\",\n      \"https://github.com/kubeflow/kubeflow/issues/4026\\n\",\n      \">>>Configuration and deployment\\n\",\n      \">>>Logging and monitoring\\n\",\n      \">>>CI/CD\\n\",\n      \">>>Docs\\n\",\n      \"Notebooks Manager UI\\n\",\n      \"https://github.com/kubeflow/kubeflow/issues/4062\\n\",\n      \">>>Configuration and deployment\\n\",\n      \">>>Logging and monitoring\\n\",\n      \">>>CI/CD\\n\",\n      \">>>Docs\\n\",\n      \"Notebooks Controller\\n\",\n      \"https://github.com/kubeflow/kubeflow/issues/3656\\n\",\n      \">>>Configuration and deployment\\n\",\n      \">>>Logging and monitoring\\n\",\n      \">>>CI/CD\\n\",\n      \">>>Docs\\n\",\n      \"Profiles Controller\\n\",\n      \"https://github.com/kubeflow/kubeflow/issues/4058\\n\",\n      \">>>Configuration and deployment\\n\",\n      \">>>Logging and monitoring\\n\",\n      \">>>CI/CD\\n\",\n      \">>>Docs\\n\",\n      \"KFServing Deployments\\n\",\n      \"https://github.com/kubeflow/kubeflow/issues/4061\\n\",\n      \">>>Configuration and deployment\\n\",\n      \">>>Logging and monitoring\\n\",\n      \">>>CI/CD\\n\",\n      \">>>Docs\\n\",\n      \"Done\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Configuration and deployment</th>\\n\",\n       \"      <th>Logging and monitoring</th>\\n\",\n       \"      <th>CI/CD</th>\\n\",\n       \"      <th>Docs</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Kfctl</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Central Dashboard</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Notebooks Manager UI</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Notebooks Controller</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Profiles Controller</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>KFServing Deployments</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Configuration and deployment</th>\\n\",\n       \"      <th>Logging and monitoring</th>\\n\",\n       \"      <th>CI/CD</th>\\n\",\n       \"      <th>Docs</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Kfctl</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Central Dashboard</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Notebooks Manager UI</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Notebooks Controller</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Profiles Controller</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>KFServing Deployments</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Configuration and deployment</th>\\n\",\n       \"      <th>Logging and monitoring</th>\\n\",\n       \"      <th>CI/CD</th>\\n\",\n       \"      <th>Docs</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Kfctl</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Central Dashboard</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Notebooks Manager UI</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Notebooks Controller</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Profiles Controller</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>KFServing Deployments</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"application/vnd.plotly.v1+json\": {\n       \"config\": {\n        \"plotlyServerURL\": \"https://plot.ly\"\n       },\n       \"data\": [\n        {\n         \"type\": \"heatmap\",\n         \"x\": [\n          \"Configuration and deployment\",\n          \"Logging and monitoring\",\n          \"CI/CD\",\n          \"Docs\"\n         ],\n         \"y\": [\n          \"Kfctl\",\n          \"Central Dashboard\",\n          \"Notebooks Manager UI\",\n          \"Notebooks Controller\",\n          \"Profiles Controller\",\n          \"KFServing Deployments\"\n         ],\n         \"z\": [\n          [\n           null,\n           null,\n           null,\n           null\n          ],\n          [\n           0,\n           0,\n           0,\n           0\n          ],\n          [\n           0,\n           0,\n           0,\n           0\n          ],\n          [\n           0,\n           0,\n           0,\n           0\n          ],\n          [\n           0,\n           0,\n           0,\n           0\n          ],\n          [\n           0,\n           0,\n           0,\n           0\n          ]\n         ]\n        }\n       ],\n       \"layout\": {\n        \"template\": {\n         \"data\": {\n          \"bar\": [\n           {\n            \"error_x\": {\n             \"color\": \"#2a3f5f\"\n            },\n            \"error_y\": {\n             \"color\": \"#2a3f5f\"\n            },\n            \"marker\": {\n             \"line\": {\n              \"color\": \"#E5ECF6\",\n              \"width\": 0.5\n             }\n            },\n            \"type\": \"bar\"\n           }\n          ],\n          \"barpolar\": [\n           {\n            \"marker\": {\n             \"line\": {\n              \"color\": \"#E5ECF6\",\n              \"width\": 0.5\n             }\n            },\n            \"type\": \"barpolar\"\n           }\n          ],\n          \"carpet\": [\n           {\n            \"aaxis\": {\n             \"endlinecolor\": \"#2a3f5f\",\n             \"gridcolor\": \"white\",\n             \"linecolor\": \"white\",\n             \"minorgridcolor\": \"white\",\n             \"startlinecolor\": \"#2a3f5f\"\n            },\n            \"baxis\": {\n             \"endlinecolor\": \"#2a3f5f\",\n             \"gridcolor\": \"white\",\n             \"linecolor\": \"white\",\n             \"minorgridcolor\": \"white\",\n             \"startlinecolor\": \"#2a3f5f\"\n            },\n            \"type\": \"carpet\"\n           }\n          ],\n          \"choropleth\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"choropleth\"\n           }\n          ],\n          \"contour\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"contour\"\n           }\n          ],\n          \"contourcarpet\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"contourcarpet\"\n           }\n          ],\n          \"heatmap\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"heatmap\"\n           }\n          ],\n          \"heatmapgl\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"heatmapgl\"\n           }\n          ],\n          \"histogram\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"histogram\"\n           }\n          ],\n          \"histogram2d\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"histogram2d\"\n           }\n          ],\n          \"histogram2dcontour\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"histogram2dcontour\"\n           }\n          ],\n          \"mesh3d\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"mesh3d\"\n           }\n          ],\n          \"parcoords\": [\n           {\n            \"line\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"parcoords\"\n           }\n          ],\n          \"scatter\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatter\"\n           }\n          ],\n          \"scatter3d\": [\n           {\n            \"line\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatter3d\"\n           }\n          ],\n          \"scattercarpet\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattercarpet\"\n           }\n          ],\n          \"scattergeo\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattergeo\"\n           }\n          ],\n          \"scattergl\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattergl\"\n           }\n          ],\n          \"scattermapbox\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattermapbox\"\n           }\n          ],\n          \"scatterpolar\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterpolar\"\n           }\n          ],\n          \"scatterpolargl\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterpolargl\"\n           }\n          ],\n          \"scatterternary\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterternary\"\n           }\n          ],\n          \"surface\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"surface\"\n           }\n          ],\n          \"table\": [\n           {\n            \"cells\": {\n             \"fill\": {\n              \"color\": \"#EBF0F8\"\n             },\n             \"line\": {\n              \"color\": \"white\"\n             }\n            },\n            \"header\": {\n             \"fill\": {\n              \"color\": \"#C8D4E3\"\n             },\n             \"line\": {\n              \"color\": \"white\"\n             }\n            },\n            \"type\": \"table\"\n           }\n          ]\n         },\n         \"layout\": {\n          \"annotationdefaults\": {\n           \"arrowcolor\": \"#2a3f5f\",\n           \"arrowhead\": 0,\n           \"arrowwidth\": 1\n          },\n          \"colorscale\": {\n           \"diverging\": [\n            [\n             0,\n             \"#8e0152\"\n            ],\n            [\n             0.1,\n             \"#c51b7d\"\n            ],\n            [\n             0.2,\n             \"#de77ae\"\n            ],\n            [\n             0.3,\n             \"#f1b6da\"\n            ],\n            [\n             0.4,\n             \"#fde0ef\"\n            ],\n            [\n             0.5,\n             \"#f7f7f7\"\n            ],\n            [\n             0.6,\n             \"#e6f5d0\"\n            ],\n            [\n             0.7,\n             \"#b8e186\"\n            ],\n            [\n             0.8,\n             \"#7fbc41\"\n            ],\n            [\n             0.9,\n             \"#4d9221\"\n            ],\n            [\n             1,\n             \"#276419\"\n            ]\n           ],\n           \"sequential\": [\n            [\n             0,\n             \"#0d0887\"\n            ],\n            [\n             0.1111111111111111,\n             \"#46039f\"\n            ],\n            [\n             0.2222222222222222,\n             \"#7201a8\"\n            ],\n            [\n             0.3333333333333333,\n             \"#9c179e\"\n            ],\n            [\n             0.4444444444444444,\n             \"#bd3786\"\n            ],\n            [\n             0.5555555555555556,\n             \"#d8576b\"\n            ],\n            [\n             0.6666666666666666,\n             \"#ed7953\"\n            ],\n            [\n             0.7777777777777778,\n             \"#fb9f3a\"\n            ],\n            [\n             0.8888888888888888,\n             \"#fdca26\"\n            ],\n            [\n             1,\n             \"#f0f921\"\n            ]\n           ],\n           \"sequentialminus\": [\n            [\n             0,\n             \"#0d0887\"\n            ],\n            [\n             0.1111111111111111,\n             \"#46039f\"\n            ],\n            [\n             0.2222222222222222,\n             \"#7201a8\"\n            ],\n            [\n             0.3333333333333333,\n             \"#9c179e\"\n            ],\n            [\n             0.4444444444444444,\n             \"#bd3786\"\n            ],\n            [\n             0.5555555555555556,\n             \"#d8576b\"\n            ],\n            [\n             0.6666666666666666,\n             \"#ed7953\"\n            ],\n            [\n             0.7777777777777778,\n             \"#fb9f3a\"\n            ],\n            [\n             0.8888888888888888,\n             \"#fdca26\"\n            ],\n            [\n             1,\n             \"#f0f921\"\n            ]\n           ]\n          },\n          \"colorway\": [\n           \"#636efa\",\n           \"#EF553B\",\n           \"#00cc96\",\n           \"#ab63fa\",\n           \"#FFA15A\",\n           \"#19d3f3\",\n           \"#FF6692\",\n           \"#B6E880\",\n           \"#FF97FF\",\n           \"#FECB52\"\n          ],\n          \"font\": {\n           \"color\": \"#2a3f5f\"\n          },\n          \"geo\": {\n           \"bgcolor\": \"white\",\n           \"lakecolor\": \"white\",\n           \"landcolor\": \"#E5ECF6\",\n           \"showlakes\": true,\n           \"showland\": true,\n           \"subunitcolor\": \"white\"\n          },\n          \"hoverlabel\": {\n           \"align\": \"left\"\n          },\n          \"hovermode\": \"closest\",\n          \"mapbox\": {\n           \"style\": \"light\"\n          },\n          \"paper_bgcolor\": \"white\",\n          \"plot_bgcolor\": \"#E5ECF6\",\n          \"polar\": {\n           \"angularaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"bgcolor\": \"#E5ECF6\",\n           \"radialaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           }\n          },\n          \"scene\": {\n           \"xaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           },\n           \"yaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           },\n           \"zaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           }\n          },\n          \"shapedefaults\": {\n           \"line\": {\n            \"color\": \"#2a3f5f\"\n           }\n          },\n          \"ternary\": {\n           \"aaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"baxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"bgcolor\": \"#E5ECF6\",\n           \"caxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           }\n          },\n          \"title\": {\n           \"x\": 0.05\n          },\n          \"xaxis\": {\n           \"automargin\": true,\n           \"gridcolor\": \"white\",\n           \"linecolor\": \"white\",\n           \"ticks\": \"\",\n           \"zerolinecolor\": \"white\",\n           \"zerolinewidth\": 2\n          },\n          \"yaxis\": {\n           \"automargin\": true,\n           \"gridcolor\": \"white\",\n           \"linecolor\": \"white\",\n           \"ticks\": \"\",\n           \"zerolinecolor\": \"white\",\n           \"zerolinewidth\": 2\n          }\n         }\n        }\n       }\n      },\n      \"text/html\": [\n       \"<div>\\n\",\n       \"        \\n\",\n       \"        \\n\",\n       \"            <div id=\\\"6b34ee3a-db2b-4009-841f-8ade9faa70b9\\\" class=\\\"plotly-graph-div\\\" style=\\\"height:525px; width:100%;\\\"></div>\\n\",\n       \"            <script type=\\\"text/javascript\\\">\\n\",\n       \"                require([\\\"plotly\\\"], function(Plotly) {\\n\",\n       \"                    window.PLOTLYENV=window.PLOTLYENV || {};\\n\",\n       \"                    \\n\",\n       \"                if (document.getElementById(\\\"6b34ee3a-db2b-4009-841f-8ade9faa70b9\\\")) {\\n\",\n       \"                    Plotly.newPlot(\\n\",\n       \"                        '6b34ee3a-db2b-4009-841f-8ade9faa70b9',\\n\",\n       \"                        [{\\\"type\\\": \\\"heatmap\\\", \\\"x\\\": [\\\"Configuration and deployment\\\", \\\"Logging and monitoring\\\", \\\"CI/CD\\\", \\\"Docs\\\"], \\\"y\\\": [\\\"Kfctl\\\", \\\"Central Dashboard\\\", \\\"Notebooks Manager UI\\\", \\\"Notebooks Controller\\\", \\\"Profiles Controller\\\", \\\"KFServing Deployments\\\"], \\\"z\\\": [[null, null, null, null], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]]}],\\n\",\n       \"                        {\\\"template\\\": {\\\"data\\\": {\\\"bar\\\": [{\\\"error_x\\\": {\\\"color\\\": \\\"#2a3f5f\\\"}, \\\"error_y\\\": {\\\"color\\\": \\\"#2a3f5f\\\"}, \\\"marker\\\": {\\\"line\\\": {\\\"color\\\": \\\"#E5ECF6\\\", \\\"width\\\": 0.5}}, \\\"type\\\": \\\"bar\\\"}], \\\"barpolar\\\": [{\\\"marker\\\": {\\\"line\\\": {\\\"color\\\": \\\"#E5ECF6\\\", \\\"width\\\": 0.5}}, \\\"type\\\": \\\"barpolar\\\"}], \\\"carpet\\\": [{\\\"aaxis\\\": {\\\"endlinecolor\\\": \\\"#2a3f5f\\\", \\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"minorgridcolor\\\": \\\"white\\\", \\\"startlinecolor\\\": \\\"#2a3f5f\\\"}, \\\"baxis\\\": {\\\"endlinecolor\\\": \\\"#2a3f5f\\\", \\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"minorgridcolor\\\": \\\"white\\\", \\\"startlinecolor\\\": \\\"#2a3f5f\\\"}, \\\"type\\\": \\\"carpet\\\"}], \\\"choropleth\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"type\\\": \\\"choropleth\\\"}], \\\"contour\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"contour\\\"}], \\\"contourcarpet\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"type\\\": \\\"contourcarpet\\\"}], \\\"heatmap\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"heatmap\\\"}], \\\"heatmapgl\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"heatmapgl\\\"}], \\\"histogram\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"histogram\\\"}], \\\"histogram2d\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"histogram2d\\\"}], \\\"histogram2dcontour\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"histogram2dcontour\\\"}], \\\"mesh3d\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"type\\\": \\\"mesh3d\\\"}], \\\"parcoords\\\": [{\\\"line\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"parcoords\\\"}], \\\"scatter\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scatter\\\"}], \\\"scatter3d\\\": [{\\\"line\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scatter3d\\\"}], \\\"scattercarpet\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scattercarpet\\\"}], \\\"scattergeo\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scattergeo\\\"}], \\\"scattergl\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scattergl\\\"}], \\\"scattermapbox\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scattermapbox\\\"}], \\\"scatterpolar\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scatterpolar\\\"}], \\\"scatterpolargl\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scatterpolargl\\\"}], \\\"scatterternary\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scatterternary\\\"}], \\\"surface\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"surface\\\"}], \\\"table\\\": [{\\\"cells\\\": {\\\"fill\\\": {\\\"color\\\": \\\"#EBF0F8\\\"}, \\\"line\\\": {\\\"color\\\": \\\"white\\\"}}, \\\"header\\\": {\\\"fill\\\": {\\\"color\\\": \\\"#C8D4E3\\\"}, \\\"line\\\": {\\\"color\\\": \\\"white\\\"}}, \\\"type\\\": \\\"table\\\"}]}, \\\"layout\\\": {\\\"annotationdefaults\\\": {\\\"arrowcolor\\\": \\\"#2a3f5f\\\", \\\"arrowhead\\\": 0, \\\"arrowwidth\\\": 1}, \\\"colorscale\\\": {\\\"diverging\\\": [[0, \\\"#8e0152\\\"], [0.1, \\\"#c51b7d\\\"], [0.2, \\\"#de77ae\\\"], [0.3, \\\"#f1b6da\\\"], [0.4, \\\"#fde0ef\\\"], [0.5, \\\"#f7f7f7\\\"], [0.6, \\\"#e6f5d0\\\"], [0.7, \\\"#b8e186\\\"], [0.8, \\\"#7fbc41\\\"], [0.9, \\\"#4d9221\\\"], [1, \\\"#276419\\\"]], \\\"sequential\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"sequentialminus\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]]}, \\\"colorway\\\": [\\\"#636efa\\\", \\\"#EF553B\\\", \\\"#00cc96\\\", \\\"#ab63fa\\\", \\\"#FFA15A\\\", \\\"#19d3f3\\\", \\\"#FF6692\\\", \\\"#B6E880\\\", \\\"#FF97FF\\\", \\\"#FECB52\\\"], \\\"font\\\": {\\\"color\\\": \\\"#2a3f5f\\\"}, \\\"geo\\\": {\\\"bgcolor\\\": \\\"white\\\", \\\"lakecolor\\\": \\\"white\\\", \\\"landcolor\\\": \\\"#E5ECF6\\\", \\\"showlakes\\\": true, \\\"showland\\\": true, \\\"subunitcolor\\\": \\\"white\\\"}, \\\"hoverlabel\\\": {\\\"align\\\": \\\"left\\\"}, \\\"hovermode\\\": \\\"closest\\\", \\\"mapbox\\\": {\\\"style\\\": \\\"light\\\"}, \\\"paper_bgcolor\\\": \\\"white\\\", \\\"plot_bgcolor\\\": \\\"#E5ECF6\\\", \\\"polar\\\": {\\\"angularaxis\\\": {\\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\"}, \\\"bgcolor\\\": \\\"#E5ECF6\\\", \\\"radialaxis\\\": {\\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\"}}, \\\"scene\\\": {\\\"xaxis\\\": {\\\"backgroundcolor\\\": \\\"#E5ECF6\\\", \\\"gridcolor\\\": \\\"white\\\", \\\"gridwidth\\\": 2, \\\"linecolor\\\": \\\"white\\\", \\\"showbackground\\\": true, \\\"ticks\\\": \\\"\\\", \\\"zerolinecolor\\\": \\\"white\\\"}, \\\"yaxis\\\": {\\\"backgroundcolor\\\": \\\"#E5ECF6\\\", \\\"gridcolor\\\": \\\"white\\\", \\\"gridwidth\\\": 2, \\\"linecolor\\\": \\\"white\\\", \\\"showbackground\\\": true, \\\"ticks\\\": \\\"\\\", \\\"zerolinecolor\\\": \\\"white\\\"}, \\\"zaxis\\\": {\\\"backgroundcolor\\\": \\\"#E5ECF6\\\", \\\"gridcolor\\\": \\\"white\\\", \\\"gridwidth\\\": 2, \\\"linecolor\\\": \\\"white\\\", \\\"showbackground\\\": true, \\\"ticks\\\": \\\"\\\", \\\"zerolinecolor\\\": \\\"white\\\"}}, \\\"shapedefaults\\\": {\\\"line\\\": {\\\"color\\\": \\\"#2a3f5f\\\"}}, \\\"ternary\\\": {\\\"aaxis\\\": {\\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\"}, \\\"baxis\\\": {\\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\"}, \\\"bgcolor\\\": \\\"#E5ECF6\\\", \\\"caxis\\\": {\\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\"}}, \\\"title\\\": {\\\"x\\\": 0.05}, \\\"xaxis\\\": {\\\"automargin\\\": true, \\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\", \\\"zerolinecolor\\\": \\\"white\\\", \\\"zerolinewidth\\\": 2}, \\\"yaxis\\\": {\\\"automargin\\\": true, \\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\", \\\"zerolinecolor\\\": \\\"white\\\", \\\"zerolinewidth\\\": 2}}}},\\n\",\n       \"                        {\\\"responsive\\\": true}\\n\",\n       \"                    ).then(function(){\\n\",\n       \"                            \\n\",\n       \"var gd = document.getElementById('6b34ee3a-db2b-4009-841f-8ade9faa70b9');\\n\",\n       \"var x = new MutationObserver(function (mutations, observer) {{\\n\",\n       \"        var display = window.getComputedStyle(gd).display;\\n\",\n       \"        if (!display || display === 'none') {{\\n\",\n       \"            console.log([gd, 'removed!']);\\n\",\n       \"            Plotly.purge(gd);\\n\",\n       \"            observer.disconnect();\\n\",\n       \"        }}\\n\",\n       \"}});\\n\",\n       \"\\n\",\n       \"// Listen for the removal of the full notebook cells\\n\",\n       \"var notebookContainer = gd.closest('#notebook-container');\\n\",\n       \"if (notebookContainer) {{\\n\",\n       \"    x.observe(notebookContainer, {childList: true});\\n\",\n       \"}}\\n\",\n       \"\\n\",\n       \"// Listen for the clearing of the current output cell\\n\",\n       \"var outputEl = gd.closest('.output');\\n\",\n       \"if (outputEl) {{\\n\",\n       \"    x.observe(outputEl, {childList: true});\\n\",\n       \"}}\\n\",\n       \"\\n\",\n       \"                        })\\n\",\n       \"                };\\n\",\n       \"                });\\n\",\n       \"            </script>\\n\",\n       \"        </div>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"tracking_heatmap()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 25,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"51 issues are missing effort labels\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"def issues_missing_effort_labels(stats_df):\\n\",\n    \"    e = total_effort_distribution(stats_df)\\n\",\n    \"    num_issues_with_effort = sum([e.iloc[0, e.columns.get_loc(l)] for l in effort_labels])\\n\",\n    \"\\n\",\n    \"    projects = kf_org.get_projects()\\n\",\n    \"    kf1_proj = [p for p in projects if p.name == 'KF1.0'][0]\\n\",\n    \"    kf1_cols = kf1_proj.get_columns()\\n\",\n    \"    all_issues = 0\\n\",\n    \"    for col in kf1_cols:\\n\",\n    \"        l = col.get_cards()\\n\",\n    \"        for i in l:\\n\",\n    \"            all_issues = all_issues + 1\\n\",\n    \"    \\n\",\n    \"    return all_issues - num_issues_with_effort\\n\",\n    \"\\n\",\n    \"print(issues_missing_effort_labels(c.stats), \\\"issues are missing effort labels\\\")\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.7.3\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "scripts/open_pr_stats.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Background\\n\",\n    \"This notebook uses the [GitHub GraphQL API](https://developer.github.com/v4/) to report Kubeflow **open PRs** whcih needs attention according to:\\n\",\n    \"* The time interval they have been open,  \\n\",\n    \"* Last time they have been edited or updated.\\n\",\n    \"\\n\",\n    \"It then list the following PRs:\\n\",\n    \"* PRs whcih need autors' attention\\n\",\n    \"* PRs which need editors' attention\\n\",\n    \"* PRs whhch have been quiet for over a week\\n\",\n    \"* PRs whcih have been open for over a mounth\\n\",\n    \"\\n\",\n    \"# Github Setup\\n\",\n    \"You will need a GitHub personal access token in order to use the GitHub API\\n\",\n    \"* See these [instructions](https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line) for creating a personal access token\\n\",\n    \"* Set the environment variable GITHUB_TOKEN to pass your token to the code\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 89,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import argparse\\n\",\n    \"import datetime\\n\",\n    \"from dateutil import parser as date_parser\\n\",\n    \"import json\\n\",\n    \"import logging\\n\",\n    \"import numpy as np\\n\",\n    \"import os\\n\",\n    \"import pandas as pd\\n\",\n    \"import pprint\\n\",\n    \"import requests\\n\",\n    \"from pandas.io.json import json_normalize \\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 57,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"query_template=\\\"\\\"\\\"{{\\n\",\n    \"  search(query: \\\"org:kubeflow is:pr is:open created:>2019-01-01\\\", type: ISSUE, first: 100, {cursor}) {{\\n\",\n    \"    edges {{\\n\",\n    \"      node {{\\n\",\n    \"        ... on PullRequest {{\\n\",\n    \"          title\\n\",\n    \"                    url\\n\",\n    \"                    number\\n\",\n    \"                    createdAt\\n\",\n    \"                    lastEditedAt\\n\",\n    \"                    updatedAt\\n\",\n    \"                    editor {{\\n\",\n    \"                      login\\n\",\n    \"                    }}\\n\",\n    \"                    author {{\\n\",\n    \"                      login\\n\",\n    \"                    }}\\n\",\n    \"        }}\\n\",\n    \"      }}\\n\",\n    \"     }}\\n\",\n    \"     pageInfo {{\\n\",\n    \"                    endCursor\\n\",\n    \"                    hasNextPage\\n\",\n    \"    }}\\n\",\n    \"      \\n\",\n    \"  }}\\n\",\n    \"}}\\\"\\\"\\\"\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 59,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"headers = {\\\"Authorization\\\": \\\"Bearer {0}\\\".format(os.getenv(\\\"GITHUB_TOKEN\\\"))}\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 60,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"('getting data fo page ', 0)\\n\",\n      \"('request code ', 200)\\n\",\n      \"('nomer of nodes found in this page', 100)\\n\",\n      \"('getting data fo page ', 1)\\n\",\n      \"('request code ', 200)\\n\",\n      \"('nomer of nodes found in this page', 59)\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"search_cursor = None\\n\",\n    \"hasNextPage = True\\n\",\n    \"df = pd.DataFrame()\\n\",\n    \"cursor_text = \\\"\\\"\\n\",\n    \"pageno=0\\n\",\n    \"while hasNextPage:\\n\",\n    \"    print('getting data fo page ',pageno)\\n\",\n    \"    if search_cursor:\\n\",\n    \"          cursor_text = \\\"after:\\\\\\\"{0}\\\\\\\"\\\".format(search_cursor)\\n\",\n    \"    query = query_template.format(cursor=cursor_text)\\n\",\n    \"    request = requests.post('https://api.github.com/graphql', json={'query': query}, headers=headers)\\n\",\n    \"    print('request code ',request.status_code)\\n\",\n    \"    rtext=request.text\\n\",\n    \"    rdict=json.loads(rtext)\\n\",\n    \"    prnodes = rdict[\\\"data\\\"][\\\"search\\\"][\\\"edges\\\"]\\n\",\n    \"    search_cursor = rdict[\\\"data\\\"][\\\"search\\\"][\\\"pageInfo\\\"][\\\"endCursor\\\"]\\n\",\n    \"    hasNextPage = rdict[\\\"data\\\"][\\\"search\\\"][\\\"pageInfo\\\"][\\\"hasNextPage\\\"]\\n\",\n    \"    print('nomer of nodes found in this page', len(prnodes))\\n\",\n    \"    rawdf = pd.DataFrame.from_dict(prnodes)[['node']]\\n\",\n    \"    newdf = pd.DataFrame.from_records(rawdf['node'])  #decompose column node to multiple columns\\n\",\n    \"    df  =  pd.concat([df,newdf])\\n\",\n    \"    pageno = pageno +1    \\n\",\n    \"    \\n\",\n    \"     \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 61,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"df['createdAt'] = df['createdAt'].apply(lambda x: pd.Timestamp(x))\\n\",\n    \"df['lastEditedAt'] = df['lastEditedAt'].apply(lambda x: pd.Timestamp(x))\\n\",\n    \"df['updatedAt'] = df['updatedAt'].apply(lambda x: pd.Timestamp(x))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 62,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def getTimeDeltaFromNowH(x):\\n\",\n    \"    td = pd.Timestamp.utcnow() - pd.Timestamp(x)\\n\",\n    \"    days, hours, minutes = td.days, td.seconds // 3600, td.seconds % 3600 / 60.0\\n\",\n    \"    return days*24 + hours\\n\",\n    \"    \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 63,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"df['creationAge'] = df['createdAt'].apply(lambda x: getTimeDeltaFromNowH(x))\\n\",\n    \"df['lastEditAge'] = df['lastEditedAt'].apply(lambda x: getTimeDeltaFromNowH(x))\\n\",\n    \"df['updateAge'] = df['updatedAt'].apply(lambda x: getTimeDeltaFromNowH(x))\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Distribution of PRs' open time (age)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 87,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAtoAAAHwCAYAAACYMcj+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi40LCBodHRwOi8vbWF0cGxvdGxpYi5vcmcv7US4rQAAIABJREFUeJzt3XuYZXdZJ/rvS8JFaa4GWwhIYORwBjFmTAtG0VMRxZDxiGK4ZHwgKjwRRkTGA0pGD4I+iswc8Yg45olj5CLQyiVjxABGpUQ4gZAwIQn3EEASkAjh1tycwHv+qNVhU1RVV3fvX+2u6s/nefZTa//W2mu9+2VX5cvq316rujsAAMB83WLRBQAAwE4kaAMAwACCNgAADCBoAwDAAII2AAAMIGgDAMAAgjbAUaSqXlNVZy26DoCjgaANsENV1TOr6s9mx7r7od39wjke46erqqvqUfPaJ8BOIWgDHKGq6thF17AJZyW5McljF10IwJFG0AZYgKq6R1W9qqr+pao+UVXPn84Ov6mqfq+qPpHkmdO2P1tV76qqT1bV66rqnjP7+f2q+nBVfaaqLq+q75/GT0vyn5M8qqr2VdXbp/Hlqnr8tHyLqvq1qvpQVd1QVS+qqjtM606YzlSfVVX/VFUfr6pfXfUe7pnk/0hydpIfqapvWbX+l6vqo1X1kap6/LS/b5vW3bqq/p9p3x+rqnOr6huGNBtgQQRtgC1WVcckeXWSDyU5IcnxSfZOqx+Y5Noku5P8VlU9LCuB+eFJ7pLkH5O8bGZ3b01yUpI7J3lpkpdX1W26+7VJfjvJn3f3ru7+zjVK+enpcWqSeyfZleT5q7Z5UJL7JnlwkmdU1b+dWffYJJd19yuTvCvJT828x9OS/FKSH0rybUmWVu33d5L8b1Pt3zb14Blr1AiwbQnaAFvvAUnuluRp3f257v5id79xWveR7v6D7r6pu7+Q5AlJnt3d7+rum7ISnk/af1a7u/+suz8xbf+7SW6dlWC8GT+V5LndfW1370tyTpJHr5qy8qzu/kJ3vz3J25PMBvbHZiXcZ/o5O33kkUn+tLvf0d2fz3R2PkmqqrJyFvw/dfeN3f3Z6X09epN1A2wLgjbA1rtHkg9NwXm1D696fs8kv19Vn6qqT2VlPnRl5Qxwquqp07SST0/r75DkuE3WcbesnFXf70NJjs3K2fT9/nlm+fNZOeudqvq+JPfKV8/EvzTJd1TVSTP7nn0vs8t3SfKNSS6feV+vncYBdozt8EUbgJ3mw0m+taqOXSNs9xrb/lZ3v2T1Tqb52L+clWkd7+jur1TVJ7MSxNfa12ofyUqQ3+9bk9yU5GNJ7n6A1541HeeKlRPUXzN+RZKPrtrHPWaWP57kC0m+vbuvP8BxALYtZ7QBtt6lWQmiv1NVt62q20xniNdybpJzqurbk6Sq7lBVj5jW3S4rwfhfkhxbVc9IcvuZ134syQlVtd7f+pcl+U9Vda+q2pWvzule60z7zarqNlmZGnJ2VuZY73/8QpL/ME09+YskP1NV/7aqvjHJ/73/9d39lSR/nOT3quqbp30eX1U/stFxAbYbQRtgi3X3l5P8n1n5EuA/JbkuyZrXoe7uC5I8J8neqvpMkquTPHRa/bqsTLl4b1amfXwxXztF4+XTz09U1dvW2P35SV6c5A1JPjC9/hc28RZ+PCtnpF/U3f+8/zHt79gkp3X3a5I8L8nrk1yT5M3Ta780/fyV/ePT+/rbbH5uOcC2UN0H+pdFADg809VKrk5y6wOdMQfYKZzRBmCIqvqJ6XrZd8rKWfm/ErKBo4mgDcAoP5fkhiTvT/LlJE9cbDkAW8vUEQAAGMAZbQAAGEDQBgCAAXbUDWuOO+64PuGEE7b8uJ/73Ody29vedsuPuxPp5Xzp5/zo5Xzp5/zo5Xzp53zt1H5efvnlH+/uA97NdkcF7RNOOCGXXXbZlh93eXk5S0tLW37cnUgv50s/50cv50s/50cv50s/52un9rOqPrSZ7UwdAQCAAQRtAAAYQNAGAIABBG0AABhA0AYAgAEEbQAAGEDQBgCAAQRtAAAYQNAGAIABBG0AABhA0AYAgAEEbQAAGEDQBgCAAQRtAAAYQNAGAIABBG0AABhA0AYAgAEEbQAAGEDQBgCAAY5ddAE7wSW5MpcsX5kkOWfpyQuuBgCAI4Ez2gAAMICgDQAAAwjaAAAwgKANAAADCNoAADCAoA0AAAMMu7xfVZ2f5EeT3NDd95/G/jzJfadN7pjkU9190hqv/WCSzyb5cpKbunvPqDoBAGCEkdfRfkGS5yd50f6B7n7U/uWq+t0kn97g9ad298eHVQcAAAMNC9rd/YaqOmGtdVVVSR6Z5AdHHR8AABZpUXO0vz/Jx7r7feus7yR/U1WXV9XZW1gXAADMRXX3uJ2vnNF+9f452jPjf5Tkmu7+3XVed3x3X19V35zk4iS/0N1vWGfbs5OcnSS7d+8+ee/evXN8B5tzSa68efmUnLjlx99J9u3bl127di26jB1DP+dHL+dLP+dHL+dLP+drp/bz1FNPvXwz3yEcOUd7TVV1bJKHJzl5vW26+/rp5w1VdUGSByRZM2h393lJzkuSPXv29NLS0rxLPqBLlr8atBdx/J1keXlZD+dIP+dHL+dLP+dHL+dLP+fraO/nIqaO/FCSd3f3dWutrKrbVtXt9i8neUiSq7ewPgAAOGzDgnZVvSzJJUnuW1XXVdXjplWPTvKyVdveraoump7uTvLGqnp7kkuT/HV3v3ZUnQAAMMLIq46cuc74T68x9pEkp0/L1yb5zlF1AQDAVnBnSAAAGEDQBgCAAQRtAAAYQNAGAIABBG0AABhA0AYAgAEEbQAAGEDQBgCAAQRtAAAYQNAGAIABBG0AABhA0AYAgAEEbQAAGEDQBgCAAQRtAAAYQNAGAIABBG0AABhA0AYAgAEEbQAAGEDQBgCAAQRtAAAYQNAGAIABBG0AABhA0AYAgAEEbQAAGEDQBgCAAQRtAAAYQNAGAIABBG0AABhA0AYAgAEEbQAAGEDQBgCAAQRtAAAYQNAGAIABBG0AABhA0AYAgAEEbQAAGEDQBgCAAQRtAAAYQNAGAIABBG0AABhA0AYAgAEEbQAAGEDQBgCAAQRtAAAYQNAGAIABBG0AABhA0AYAgAEEbQAAGGBY0K6q86vqhqq6embsmVV1fVVdMT1OX+e1p1XVe6rqmqp6+qgaAQBglJFntF+Q5LQ1xn+vu0+aHhetXllVxyT5wyQPTXK/JGdW1f0G1gkAAHM3LGh39xuS3HgIL31Akmu6+9ru/tcke5M8bK7FAQDAYIuYo/2kqrpymlpypzXWH5/kwzPPr5vGAABg26juHrfzqhOSvLq77z89353k40k6yW8muWt3/+yq15yR5LTufvz0/DFJHtjdT1rnGGcnOTtJdu/effLevXvHvJkNXJIrb14+JSdu+fF3kn379mXXrl2LLmPH0M/50cv50s/50cv50s/52qn9PPXUUy/v7j0H2u7YrShmv+7+2P7lqvrjJK9eY7Prk9xj5vndp7H19nlekvOSZM+ePb20tDSXWg/GJctfDdqLOP5Osry8rIdzpJ/zo5fzpZ/zo5fzpZ/zdbT3c0unjlTVXWee/kSSq9fY7K1J7lNV96qqWyV5dJILt6I+AACYl2FntKvqZUmWkhxXVdcl+fUkS1V1Ulamjnwwyc9N294tyX/v7tO7+6aqelKS1yU5Jsn53f2OUXUCAMAIw4J2d5+5xvCfrLPtR5KcPvP8oiRfd+k/AADYLtwZEgAABhC0AQBgAEEbAAAGELQBAGAAQRsAAAYQtAEAYABBGwAABhC0AQBgAEEbAAAGELQBAGAAQRsAAAYQtAEAYABBGwAABhC0AQBgAEEbAAAGELQBAGAAQRsAAAYQtAEAYABBGwAABhC0AQBgAEEbAAAGELQBAGAAQRsAAAYQtAEAYABBGwAABhC0AQBgAEEbAAAGELQBAGAAQRsAAAYQtAEAYABBGwAABhC0AQBgAEEbAAAGELQBAGAAQRsAAAYQtAEAYABBGwAABhC0AQBgAEEbAAAGELQBAGAAQRsAAAY4dtEF7DTPXn7ezcvnLD35gOMAAOxMzmgDAMAAgjYAAAwgaAMAwACCNgAADCBoAwDAAII2AAAMMCxoV9X5VXVDVV09M/Zfq+rdVXVlVV1QVXdc57UfrKqrquqKqrpsVI0AADDKyDPaL0hy2qqxi5Pcv7tPTPLeJOds8PpTu/uk7t4zqD4AABhmWNDu7jckuXHV2N90903T0zcnufuo4wMAwCItco72zyZ5zTrrOsnfVNXlVXX2FtYEAABzUd09budVJyR5dXfff9X4rybZk+ThvUYBVXV8d19fVd+clekmvzCdIV/rGGcnOTtJdu/effLevXvn+yY24ZJcueb4KTlxzW1mx/la+/bty65duxZdxo6hn/Ojl/Oln/Ojl/Oln/O1U/t56qmnXr6Z6c3HbkUxs6rqp5P8aJIHrxWyk6S7r59+3lBVFyR5QJI1g3Z3n5fkvCTZs2dPLy0tDah6Y5csrx20Z2uZ3WYRNW4Xy8vL+jNH+jk/ejlf+jk/ejlf+jlfR3s/t3TqSFWdluSXk/xYd39+nW1uW1W327+c5CFJrl5rWwAAOFKNvLzfy5JckuS+VXVdVT0uyfOT3C7JxdOl+86dtr1bVV00vXR3kjdW1duTXJrkr7v7taPqBACAEYZNHenuM9cY/pN1tv1IktOn5WuTfOeougAAYCu4MyQAAAwgaAMAwACCNgAADCBoAwDAAII2AAAMIGgDAMAAgjYAAAwgaAMAwACCNgAADCBoAwDAAII2AAAMIGgDAMAAgjYAAAwgaAMAwACCNgAADCBoAwDAAII2AAAMcFBBu6ruVFUnjioGAAB2igMG7aparqrbV9Wdk7wtyR9X1XPHlwYAANvXZs5o36G7P5Pk4Ule1N0PTPJDY8sCAIDtbTNB+9iqumuSRyZ59eB6AABgR9hM0P6NJK9Lck13v7Wq7p3kfWPLAgCA7e3YA23Q3S9P8vKZ59dW1WOHVgUAANvchme0q+r4qtpTVbeann9zVf12nNEGAIANrRu0q+opSa5I8gdJ3lxVj0/yriTfkOTkrSkPAAC2p42mjpyd5L7dfWNVfWuS9yb5vu6+fGtKAwCA7WujqSNf7O4bk6S7/ynJe4RsAADYnI3OaN+9qp438/yus8+7+8njygIAgO1to6D9tFXPnc0GAIBNWjdod/cLq+ouSe6ZlWtof2rrygIAgO1to6uOPD7JO7Jy1ZF3V9WPbVlVAACwzW00deQpSb69u/9luhvkS5JcuDVlAQDA9rbRVUf+tbv/JVm5G2SSW29NSQAAsP0dzFVH7u6qIwAAsDmuOgIAAANseNWRrSwEAAB2ko3maAMAAIdI0AYAgAE2uo72c6afj9i6cgAAYGfY6Iz26VVVSc7ZqmIAAGCn2OiqI69N8skku6rqM0kqSe//2d2334L6AABgW1r3jHZ3P62775jkr7v79t19u9mfW1gjAABsOxud0U6SdPfDqmp3ku+eht6y/46RAADA2g541ZHpy5CXJnlEkkcmubSqzhhdGAAAbGcHPKOd5NeSfHd335AkVXWXJH+b5BUjCwMAgO1sM9fRvsX+kD35xCZfBwAAR63NnNF+bVW9LsnLpuePSnLRuJIAAGD728yXIZ9WVQ9P8qBp6LzuvmBsWQAAsL1t5ox2uvtVSV41uBYAANgxhs61rqrzq+qGqrp6ZuzOVXVxVb1v+nmndV571rTN+6rqrJF1AgDAvI3+UuMLkpy2auzpSf6uu++T5O+m51+jqu6c5NeTPDDJA5L8+nqBHAAAjkQbBu2qOqaqXnKoO+/uNyS5cdXww5K8cFp+YZIfX+OlP5Lk4u6+sbs/meTifH1gBwCAI9aGQbu7v5zknlV1qzkec3d3f3Ra/ucku9fY5vgkH555ft00BgAA28Jmvgx5bZI3VdWFST63f7C7n3u4B+/urqo+nH1U1dlJzk6S3bt3Z3l5+XDLmpv1ajmSajzS7Nu3T3/mSD/nRy/nSz/nRy/nSz/n62jv52aC9vunxy2S3G4Ox/xYVd21uz9aVXdNcsMa21yfZGnm+d2TLK+1s+4+L8l5SbJnz55eWlpaa7OhLlm+cs3x2Vpmt1lEjdvF8vKy/syRfs6PXs6Xfs6PXs6Xfs7X0d7PzVxH+1lJUlXf2N2fn8MxL0xyVpLfmX7+5RrbvC7Jb898AfIhSc6Zw7EBAGBLHPCqI1V1SlW9M8m7p+ffWVX/bTM7r6qXJbkkyX2r6rqqelxWAvYPV9X7kvzQ9DxVtaeq/nuSdPeNSX4zyVunx29MYwAAsC1sZurI/5uVq4BcmCTd/faq+oHN7Ly7z1xn1YPX2PayJI+feX5+kvM3cxwAADjSbOo62t394VVDXx5QCwAA7BibOaP94ar63iRdVbdM8otJ3jW2LAAA2N42c0b7CUl+PivXsf5IkpOm5wAAwDo2c9WRjyf5qS2oBQAAdozNXHXk3lX1V1X1L1V1Q1X9ZVXdeyuKAwCA7WozU0demuQvktw1yd2SvDzJy0YWBQAA291mgvY3dveLu/um6fFnSW4zujAAANjO1p2jXVV3nhZfU1VPT7I3SSd5VJKLtqA2AADYtjb6MuTlWQnWNT3/uZl1HbdEBwCAda0btLv7XltZCAAA7CQHvLxfVR2T5N8nOWF2++5+7riyAABge9vMnSH/KskXk1yV5CtjywEAgJ1hM0H77t194vBKAABgB9nM5f1eU1UPGV4JAADsIJs5o/3mJBdU1S2S/K+sXIWku/v2QysDAIBtbDNB+7lJTklyVXf34HoAAGBH2MzUkQ8nuVrIBgCAzdvMGe1rkyxX1WuSfGn/oMv7AQDA+jYTtD8wPW41PQAAgAM4YNDu7mdtRSEAALCTbObOkK9P8nXzs7v7B4dUBAAAO8Bmpo48dWb5Nkl+MslNY8oBAICdYTNTRy5fNfSmqrp0UD0AALAjbGbqyJ1nnt4iyclJ7jCsIgAA2AE2M3Xk8qzM0a6sTBn5QJLHjSwKAAC2u81MHbnXVhQCAAA7yWbOaKeqvjfJCbPbd/eLBtUEAADb3mbmaL84yb9JckWSL0/DnUTQBgCAdWzmjPaeJPfr7q+7ljYAALC2W2xim6uTfMvoQgAAYCfZzBnt45K8c7p29pf2D3b3jw2rCgAAtrnNBO1nji4CAAB2ms1c3u8ftqIQAADYSTYzRxsAADhIgjYAAAwgaAMAwADrztGuqquycmOar1uVpLv7xGFVAQDANrfRlyF/dMuqAACAHWbdoN3dH9rKQgAAYCc54BztqvqeqnprVe2rqn+tqi9X1We2ojgAANiuNvNlyOcnOTPJ+5J8Q5LHJ/nDkUUBAMB2t6mrjnT3NUmO6e4vd/efJjltbFkAALC9beYW7J+vqlsluaKq/kuSj8ZlAQEAYEObCcyPmbZ7UpLPJblHkoePLAoAALa7zQTtH+/uL3b3Z7r7Wd39S3HpPwAA2NBmgvZZa4z99JzrAACAHWWjO0OemeQ/JLlXVV04s+r2SW4cXRgAAGxnG30Z8v/Lyhcfj0vyuzPjn01y5ciiAABguzvQnSE/lOSUqtqd5LunVe/q7pu2ojgAANiuNnNnyEckuTTJI5I8MslbquqMQz1gVd23qq6YeXymqp6yapulqvr0zDbPONTjAQDAImzmOtq/luS7u/uGJKmquyT52ySvOJQDdvd7kpw07euYJNcnuWCNTf+xu13dBACAbWkzVx25xf6QPfnEJl+3GQ9O8v5pmgoAAOwY1d0bb1D1X5OcmORl09CjklzV3b982AevOj/J27r7+avGl5K8Msl1ST6S5Knd/Y519nF2krOTZPfu3Sfv3bv3cMs6aJes893QU3LimtvMjvO19u3bl127di26jB1DP+dHL+dLP+dHL+dLP+drp/bz1FNPvby79xxouwNOHenup1XVw5M8aBo6r7vXmupxUKbbuv9YknPWWP22JPfs7n1VdXqS/5HkPuvUd16S85Jkz549vbS0dLilHbRLltcO2rO1zG6ziBq3i+XlZf2ZI/2cH72cL/2cH72cL/2cr6O9n5v5MuRzuvtV3f1L0+OCqnrOHI790Kyczf7Y6hXTXSj3TcsXJbllVR03h2MCAMCW2Mxc6x9eY+yhczj2mfnqdJSvUVXfUlU1LT8gK3V+Yg7HBACALbHRnSGfmOQ/Jrl3Vc3OjbhdkjcdzkGr6rZZCfA/NzP2hCTp7nOTnJHkiVV1U5IvJHl0H2gyOQAAHEE2mqP90iSvSfLsJE+fGf9sdx/WLdi7+3NJvmnV2Lkzy89P8vzVrwMAgO1ioztDfjrJp7MyxQMAADgI87oeNgAAMEPQBgCAAQRtAAAYQNAGAIABBG0AABjggLdgZ/6evfy8m5fPWXryAisBAGAUZ7QBAGAAQRsAAAYQtAEAYABBGwAABhC0AQBgAEEbAAAGELQBAGAAQRsAAAYQtAEAYABBGwAABhC0AQBgAEEbAAAGELQBAGAAQRsAAAYQtAEAYABBGwAABhC0AQBgAEEbAAAGELQBAGAAQRsAAAYQtAEAYABBGwAABhC0AQBgAEEbAAAGELQBAGAAQRsAAAYQtAEAYABBGwAABhC0AQBgAEEbAAAGELQBAGAAQRsAAAYQtAEAYABBGwAABhC0AQBgAEEbAAAGELQBAGAAQRsAAAYQtAEAYABBGwAABhC0AQBggIUF7ar6YFVdVVVXVNVla6yvqnpeVV1TVVdW1Xctok4AADgUxy74+Kd298fXWffQJPeZHg9M8kfTTwAAOOIdyVNHHpbkRb3izUnuWFV3XXRRAACwGYsM2p3kb6rq8qo6e431xyf58Mzz66YxAAA44lV3L+bAVcd39/VV9c1JLk7yC939hpn1r07yO939xun53yX5le6+bNV+zk5ydpLs3r375L17927Ze9jvklx5yK89JScecJ/rbbMT7du3L7t27Vp0GTuGfs6PXs6Xfs6PXs6Xfs7XTu3nqaeeenl37znQdgubo93d108/b6iqC5I8IMkbZja5Psk9Zp7ffRpbvZ/zkpyXJHv27OmlpaVRJa/rkuVDD9rr1Tu7z0W8p0VZXl4+qt7vaPo5P3o5X/o5P3o5X/o5X0d7PxcydaSqbltVt9u/nOQhSa5etdmFSR47XX3ke5J8urs/usWlAgDAIVnUGe3dSS6oqv01vLS7X1tVT0iS7j43yUVJTk9yTZLPJ/mZBdUKAAAHbSFBu7uvTfKda4yfO7PcSX5+K+sCAIB5OZIv7wcAANuWoA0AAAMI2gAAMICgDQAAAwjaAAAwgKANAAADCNoAADCAoA0AAAMI2gAAMICgDQAAAwjaAAAwgKANAAADCNoAADCAoA0AAAMI2gAAMICgDQAAAwjaAAAwgKANAAADHLvoAjg4z15+3s3L5yw9eUuPsRXHXsSxAABGcEYbAAAGELQBAGAAQRsAAAYQtAEAYABBGwAABhC0AQBgAEEbAAAGELQBAGAAQRsAAAYQtAEAYABBGwAABhC0AQBgAEEbAAAGELQBAGAAQRsAAAYQtAEAYABBGwAABhC0AQBgAEEbAAAGELQBAGAAQRsAAAYQtAEAYIBjF10AsDM9e/l5a46fs/TkLa4E2Glm/774m8KRzBltAAAYQNAGAIABBG0AABhA0AYAgAEEbQAAGEDQBgCAAQRtAAAYYMuDdlXdo6peX1XvrKp3VNUvrrHNUlV9uqqumB7P2Oo6AQDgcCzihjU3Jfm/uvttVXW7JJdX1cXd/c5V2/1jd//oAuoDAIDDtuVntLv7o939tmn5s0neleT4ra4DAABGqu5e3MGrTkjyhiT37+7PzIwvJXllkuuSfCTJU7v7Hevs4+wkZyfJ7t27T967d+/YotdwSa485NeekhMPuM/ZbdYbn6dFHnvfvn3ZtWvXlhzraLC/n4uw3u/Fdv3fc5G93In0c36Oxl6O/G/E0djPkXZqP0899dTLu3vPgbZbxNSRJElV7cpKmH7KbMievC3JPbt7X1WdnuR/JLnPWvvp7vOSnJcke/bs6aWlpXFFr+OS5UMP2uvVO7vP2W3WG5+nRR57eXk5S0tLW3Kso8H+fi7Cer8X2/V/z0X2cifSz/k5Gns58r8RR2M/Rzra+7mQq45U1S2zErJf0t2vWr2+uz/T3fum5YuS3LKqjtviMgEA4JAt4qojleRPkryru5+7zjbfMm2XqnpAVur8xNZVCQAAh2cRU0e+L8ljklxVVVdMY/85ybcmSXefm+SMJE+sqpuSfCHJo3uRk8kBAOAgbXnQ7u43JqkDbPP8JM/fmooAAGD+3BkSAAAGELQBAGAAQRsAAAYQtAEAYABBGwAABhC0AQBggIXdgp3D9+zl5928fM7Sk9dcd87Sk79m+XCOsSjr1XAo72et/W60n416vB1ckitvvlXxRp+RRdnu/T1S7LQ+LvL9HAm/Fyze6s/gkfy5GPH7stP+piySM9oAADCAoA0AAAMI2gAAMICgDQAAAwjaAAAwgKANAAADCNoAADCAoA0AAAMI2gAAMICgDQAAAwjaAAAwgKANAAADCNoAADCAoA0AAAMI2gAAMICgDQAAAwjaAAAwgKANAAADCNoAADCAoA0AAAMI2gAAMICgDQAAAxy76AKOds9eft6iS9hy673nc5aePJd9rt7P/nWHs/95Wq/WzXwWtuI9HGy/Nur9POtZvf+D7eOo3m3m/R9sj+bV08Pdz7x+d46U93Ow+5l9/5vpxeH0a1G/R4ezryPlb+qs0X1c73ijPhejbUW/LsmVuWT5yk3/Hm3GVv/vfDic0QYAgAEEbQAAGEDQBgCAAQRtAAAYQNAGAIABBG0AABhA0AYAgAEEbQAAGEDQBgCAAQRtAAAYQNAGAIABBG0AABhA0AYAgAEEbQAAGEDQBgCAAQRtAAAYQNAGAIABBG0AABhgIUG7qk6rqvdU1TVV9fQ11t+6qv58Wv+Wqjph66sEAIBDt+VBu6qOSfKHSR6a5H5Jzqyq+63a7HFJPtnd35bk95I8Z2urBACAw7OIM9oPSHJNd1/b3f+aZG+Sh63a5mFJXjhBcqNRAAAJV0lEQVQtvyLJg6uqtrBGAAA4LIsI2scn+fDM8+umsTW36e6bknw6yTdtSXUAADAH1d1be8CqM5Kc1t2Pn54/JskDu/tJM9tcPW1z3fT8/dM2H19jf2cnOXt6et8k7xn8FtZyXJKvq41DopfzpZ/zo5fzpZ/zo5fzpZ/ztVP7ec/uvsuBNjp2KypZ5fok95h5fvdpbK1trquqY5PcIckn1tpZd5+X5LwBdW5aVV3W3XsWWcNOoZfzpZ/zo5fzpZ/zo5fzpZ/zdbT3cxFTR96a5D5Vda+qulWSRye5cNU2FyY5a1o+I8nf91afegcAgMOw5We0u/umqnpSktclOSbJ+d39jqr6jSSXdfeFSf4kyYur6pokN2YljAMAwLaxiKkj6e6Lkly0auwZM8tfTPKIra7rMCx06soOo5fzpZ/zo5fzpZ/zo5fzpZ/zdVT3c8u/DAkAAEcDt2AHAIABBO3DcKBbybO2qvpgVV1VVVdU1WXT2J2r6uKqet/0807TeFXV86YeX1lV37XY6herqs6vqhumS2DuHzvo3lXVWdP276uqs9Y61tFgnX4+s6qunz6fV1TV6TPrzpn6+Z6q+pGZ8aP+b0FV3aOqXl9V76yqd1TVL07jPp+HYIN++nwepKq6TVVdWlVvn3r5rGn8XlX1lqkvfz5doCFVdevp+TXT+hNm9rVmj48mG/TzBVX1gZnP5knT+NH9u97dHofwyMoXOd+f5N5JbpXk7Unut+i6tsMjyQeTHLdq7L8kefq0/PQkz5mWT0/ymiSV5HuSvGXR9S+4dz+Q5LuSXH2ovUty5yTXTj/vNC3fadHv7Qjq5zOTPHWNbe83/Z7fOsm9pt//Y/wtuLk/d03yXdPy7ZK8d+qZz+d8++nzefC9rCS7puVbJnnL9Jn7iySPnsbPTfLEafk/Jjl3Wn50kj/fqMeLfn9HUD9fkOSMNbY/qn/XndE+dJu5lTyb97AkL5yWX5jkx2fGX9Qr3pzkjlV110UUeCTo7jdk5Uo8sw62dz+S5OLuvrG7P5nk4iSnja/+yLNOP9fzsCR7u/tL3f2BJNdk5e+AvwVJuvuj3f22afmzSd6Vlbv8+nwegg36uR6fz3VMn7F909NbTo9O8oNJXjGNr/5s7v/MviLJg6uqsn6Pjyob9HM9R/XvuqB96DZzK3nW1kn+pqour5U7eybJ7u7+6LT8z0l2T8v6fGAH2zs9PbAnTf/Eef7+qQ7Rz02b/qn932XlTJfP52Fa1c/E5/OgVdUxVXVFkhuyEujen+RT3X3TtMlsX27u2bT+00m+KXp5s9X97O79n83fmj6bv1dVt57GjurPpqDNIjyou78ryUOT/HxV/cDsyl75NyWXwzkEejcXf5Tk3yQ5KclHk/zuYsvZXqpqV5JXJnlKd39mdp3P58Fbo58+n4egu7/c3Sdl5W7UD0jyvy+4pG1tdT+r6v5JzslKX787K9NBfmWBJR4xBO1Dt5lbybOG7r5++nlDkguy8kfvY/unhEw/b5g21+cDO9je6ekGuvtj039EvpLkj/PVfxrWzwOoqltmJRS+pLtfNQ37fB6itfrp83l4uvtTSV6f5JSsTGHYfz+R2b7c3LNp/R2SfCJ6+XVm+nnaNN2pu/tLSf40PptJBO3DsZlbybNKVd22qm63fznJQ5JcnZXe7f/G8VlJ/nJavjDJY6dvLX9Pkk/P/DM0Kw62d69L8pCqutP0z84PmcbIzWFwv5/IyuczWenno6crEtwryX2SXBp/C5KsXFkgK3f1fVd3P3dmlc/nIVivnz6fB6+q7lJVd5yWvyHJD2dlzvvrk5wxbbb6s7n/M3tGkr+f/jVmvR4fVdbp57tn/g91ZWW+++xn8+j9Xd/Kb17utEdWvkn73qzM9frVRdezHR5Z+eb726fHO/b3LSvz3/4uyfuS/G2SO0/jleQPpx5flWTPot/Dgvv3sqz8c/H/ysp8tscdSu+S/GxWvshzTZKfWfT7OsL6+eKpX1dm5T8Qd53Z/lenfr4nyUNnxo/6vwVJHpSVaSFXJrliepzu8zn3fvp8HnwvT0zyP6eeXZ3kGdP4vbMSlK9J8vIkt57GbzM9v2Zaf+8D9fhoemzQz7+fPptXJ/mzfPXKJEf177o7QwIAwACmjgAAwACCNgAADCBoAwDAAII2AAAMIGgDAMAAgjbAEaKqfryquqrmdte6qnpCVT32ILZfqqpXz+v4AEczQRvgyHFmkjdOP+eiu8/t7hfNa3+HauYOfABHDUEb4AhQVbuycpOSx2Xl7n37x29RVf+tqt5dVRdX1UVVdca07uSq+oequryqXrfqroH7X//MqnrqtLxcVc+pqkur6r1V9f3rlLOrql4xHfMl053eUlUPrqr/WVVXVdX5VXXrafyDVXXctLynqpZnjv3iqnpTkhdX1bdPx76iqq6sqvvMq38ARyJBG+DI8LAkr+3u9yb5RFWdPI0/PMkJSe6X5DFJTkmSqrplkj9IckZ3n5zk/CS/tYnjHNvdD0jylCS/vs42/25af7+s3D3v+6rqNklekORR3f0dSY5N8sRNHO9+SX6ou89M8oQkv9/dJyXZk5W7cQLsWII2wJHhzCR7p+W9+er0kQcleXl3f6W7/znJ66fx+ya5f5KLq+qKJL+W5O6bOM6rpp+XZyXAr+XS7r6uu7+SlVt/nzAd7wPT/xFIkhcm+YFNHO/C7v7CtHxJkv9cVb+S5J4z4wA7kjlzAAtWVXdO8oNJvqOqOskxSbqqnrbRy5K8o7tPOcjDfWn6+eWs/9+AL80sb7TdfjflqydubrNq3ef2L3T3S6vqLUn+fZKLqurnuvvvN1U1wDbkjDbA4p2R5MXdfc/uPqG775HkA0m+P8mbkvzkNFd7d5Kl6TXvSXKXqrp5KklVffvAGt+T5ISq+rbp+WOS/MO0/MEk+6e6/OR6O6iqeye5trufl+Qvk5w4plSAI4OgDbB4Zya5YNXYK6fxV2ZlLvM7k/xZkrcl+XR3/2tWAvpzqurtWZni8b2jCuzuLyb5mSQvr6qrknwlybnT6mcl+f2quiwrZ8DX88gkV09TXe6fZOFXQwEYqbp70TUAsIGq2tXd+6rqm5JcmuT7pvnaABzBzNEGOPK9uqrumORWSX5TyAbYHpzRBgCAAczRBgCAAQRtAAAYQNAGAIABBG0AABhA0AYAgAEEbQAAGOD/B/car6R+QyuUAAAAAElFTkSuQmCC\\n\",\n      \"text/plain\": [\n       \"<Figure size 864x576 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"hist = df.hist(column='creationAge', bins=200,figsize=(12,8), color='#86bf91', zorder=2, rwidth=0.9)\\n\",\n    \"ax = hist[0]\\n\",\n    \"for x in ax:\\n\",\n    \"    x.set_xlabel(\\\"Age in hours\\\")\\n\",\n    \"    x.set_ylabel(\\\"total number of PRs\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# PRs which need attention\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"A huristic solution is to list prs which have either of the following conditions:\\n\",\n    \"* No activity is recoreded for the pr for a long time (i.e., both updateAge and lastEditedAge exceeds a threshold).\\n\",\n    \"* Has been open for a long time (i.e., creationAge exceeds a threshold)\\n\",\n    \"* Needs author's attention (i.e. it has been edited for a long time but has not been updated afterwards)\\n\",\n    \"* Needs editor's attention (i.e., it has been updated for a long time but has not been edited afterwards)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 74,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"MAX_AGE = 24*30\\n\",\n    \"MAX_QUIET_TIME = 7*24\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 75,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>author</th>\\n\",\n       \"      <th>createdAt</th>\\n\",\n       \"      <th>editor</th>\\n\",\n       \"      <th>lastEditedAt</th>\\n\",\n       \"      <th>number</th>\\n\",\n       \"      <th>title</th>\\n\",\n       \"      <th>updatedAt</th>\\n\",\n       \"      <th>url</th>\\n\",\n       \"      <th>creationAge</th>\\n\",\n       \"      <th>lastEditAge</th>\\n\",\n       \"      <th>updateAge</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>68</th>\\n\",\n       \"      <td>{u'login': u'jeremiahkellick'}</td>\\n\",\n       \"      <td>2019-05-29 15:53:23+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-29 15:53:29+00:00</td>\\n\",\n       \"      <td>108</td>\\n\",\n       \"      <td>Add jeremiahkellick to org.yaml</td>\\n\",\n       \"      <td>2019-05-29 16:56:10+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/internal-acls/pull...</td>\\n\",\n       \"      <td>197</td>\\n\",\n       \"      <td>197.0</td>\\n\",\n       \"      <td>196</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>70</th>\\n\",\n       \"      <td>{u'login': u'ggaaooppeenngg'}</td>\\n\",\n       \"      <td>2019-05-28 04:23:09+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-28 04:23:14+00:00</td>\\n\",\n       \"      <td>20</td>\\n\",\n       \"      <td>support frozen model</td>\\n\",\n       \"      <td>2019-05-28 04:23:23+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/batch-predict/pull/20</td>\\n\",\n       \"      <td>233</td>\\n\",\n       \"      <td>233.0</td>\\n\",\n       \"      <td>233</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>74</th>\\n\",\n       \"      <td>{u'login': u'aakashbajaj'}</td>\\n\",\n       \"      <td>2019-05-24 09:47:58+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-24 09:48:05+00:00</td>\\n\",\n       \"      <td>1384</td>\\n\",\n       \"      <td>gcp cred bug fix for multiple credentials in s...</td>\\n\",\n       \"      <td>2019-05-24 10:07:10+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1384</td>\\n\",\n       \"      <td>323</td>\\n\",\n       \"      <td>323.0</td>\\n\",\n       \"      <td>323</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>75</th>\\n\",\n       \"      <td>{u'login': u'gyliu513'}</td>\\n\",\n       \"      <td>2019-05-24 08:09:49+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-24 08:09:58+00:00</td>\\n\",\n       \"      <td>586</td>\\n\",\n       \"      <td>WIP Do not use /tmp/katib as host path.</td>\\n\",\n       \"      <td>2019-05-29 03:02:45+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/586</td>\\n\",\n       \"      <td>325</td>\\n\",\n       \"      <td>325.0</td>\\n\",\n       \"      <td>210</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>80</th>\\n\",\n       \"      <td>{u'login': u'M00nF1sh'}</td>\\n\",\n       \"      <td>2019-05-22 23:28:30+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-22 23:28:36+00:00</td>\\n\",\n       \"      <td>3340</td>\\n\",\n       \"      <td>templatize istio k8s version for aws</td>\\n\",\n       \"      <td>2019-05-23 18:45:23+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3340</td>\\n\",\n       \"      <td>358</td>\\n\",\n       \"      <td>358.0</td>\\n\",\n       \"      <td>338</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>81</th>\\n\",\n       \"      <td>{u'login': u'M00nF1sh'}</td>\\n\",\n       \"      <td>2019-05-22 22:32:49+00:00</td>\\n\",\n       \"      <td>{u'login': u'M00nF1sh'}</td>\\n\",\n       \"      <td>2019-05-22 22:35:54+00:00</td>\\n\",\n       \"      <td>3337</td>\\n\",\n       \"      <td>Update OWNERS file and make ingress configurab...</td>\\n\",\n       \"      <td>2019-05-29 23:15:34+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3337</td>\\n\",\n       \"      <td>359</td>\\n\",\n       \"      <td>358.0</td>\\n\",\n       \"      <td>190</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>83</th>\\n\",\n       \"      <td>{u'login': u'kkasravi'}</td>\\n\",\n       \"      <td>2019-05-18 14:47:09+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-18 14:47:14+00:00</td>\\n\",\n       \"      <td>3311</td>\\n\",\n       \"      <td>add kkasravi to OWNERS</td>\\n\",\n       \"      <td>2019-05-18 14:47:23+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3311</td>\\n\",\n       \"      <td>462</td>\\n\",\n       \"      <td>462.0</td>\\n\",\n       \"      <td>462</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>85</th>\\n\",\n       \"      <td>{u'login': u'elikatsis'}</td>\\n\",\n       \"      <td>2019-05-16 13:49:06+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-16 13:49:17+00:00</td>\\n\",\n       \"      <td>3294</td>\\n\",\n       \"      <td>Add verb \\\"create\\\" for Secrets to ClusterRole \\\"...</td>\\n\",\n       \"      <td>2019-05-16 21:06:24+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3294</td>\\n\",\n       \"      <td>511</td>\\n\",\n       \"      <td>511.0</td>\\n\",\n       \"      <td>504</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>86</th>\\n\",\n       \"      <td>{u'login': u'chenhan1218'}</td>\\n\",\n       \"      <td>2019-05-16 10:17:15+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-16 10:17:21+00:00</td>\\n\",\n       \"      <td>3290</td>\\n\",\n       \"      <td>fix #2863, postpone check kubeflow ready</td>\\n\",\n       \"      <td>2019-05-16 19:49:23+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3290</td>\\n\",\n       \"      <td>515</td>\\n\",\n       \"      <td>515.0</td>\\n\",\n       \"      <td>505</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>88</th>\\n\",\n       \"      <td>{u'login': u'ryandawsonuk'}</td>\\n\",\n       \"      <td>2019-05-16 08:29:16+00:00</td>\\n\",\n       \"      <td>{u'login': u'ryandawsonuk'}</td>\\n\",\n       \"      <td>2019-05-16 08:29:52+00:00</td>\\n\",\n       \"      <td>103</td>\\n\",\n       \"      <td>seldon org update</td>\\n\",\n       \"      <td>2019-05-16 08:29:52+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/internal-acls/pull...</td>\\n\",\n       \"      <td>517</td>\\n\",\n       \"      <td>517.0</td>\\n\",\n       \"      <td>517</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>89</th>\\n\",\n       \"      <td>{u'login': u'yanniszark'}</td>\\n\",\n       \"      <td>2019-05-15 17:43:21+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-15 17:43:27+00:00</td>\\n\",\n       \"      <td>3278</td>\\n\",\n       \"      <td>basic-auth: make kflogin work with NodePort</td>\\n\",\n       \"      <td>2019-05-18 17:53:55+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3278</td>\\n\",\n       \"      <td>531</td>\\n\",\n       \"      <td>531.0</td>\\n\",\n       \"      <td>459</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>90</th>\\n\",\n       \"      <td>{u'login': u'ryandawsonuk'}</td>\\n\",\n       \"      <td>2019-05-15 17:18:21+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-15 17:18:32+00:00</td>\\n\",\n       \"      <td>269</td>\\n\",\n       \"      <td>add rd@seldon.io to member_organizations.yaml</td>\\n\",\n       \"      <td>2019-05-16 05:09:11+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/community/pull/269</td>\\n\",\n       \"      <td>532</td>\\n\",\n       \"      <td>532.0</td>\\n\",\n       \"      <td>520</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>92</th>\\n\",\n       \"      <td>{u'login': u'johnugeorge'}</td>\\n\",\n       \"      <td>2019-05-14 12:53:32+00:00</td>\\n\",\n       \"      <td>{u'login': u'johnugeorge'}</td>\\n\",\n       \"      <td>2019-05-14 12:54:17+00:00</td>\\n\",\n       \"      <td>267</td>\\n\",\n       \"      <td>Update github_users.json to the latest</td>\\n\",\n       \"      <td>2019-05-14 12:54:17+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/community/pull/267</td>\\n\",\n       \"      <td>560</td>\\n\",\n       \"      <td>560.0</td>\\n\",\n       \"      <td>560</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>93</th>\\n\",\n       \"      <td>{u'login': u'gaocegege'}</td>\\n\",\n       \"      <td>2019-05-13 02:13:15+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-13 02:13:20+00:00</td>\\n\",\n       \"      <td>500</td>\\n\",\n       \"      <td>WIP feat(suggestion): Define new API for sugge...</td>\\n\",\n       \"      <td>2019-05-13 05:59:01+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/500</td>\\n\",\n       \"      <td>595</td>\\n\",\n       \"      <td>595.0</td>\\n\",\n       \"      <td>591</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>94</th>\\n\",\n       \"      <td>{u'login': u'achalshant'}</td>\\n\",\n       \"      <td>2019-05-11 17:45:09+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-11 17:45:15+00:00</td>\\n\",\n       \"      <td>498</td>\\n\",\n       \"      <td>Decoupling DB interface from katib manager</td>\\n\",\n       \"      <td>2019-05-27 18:16:21+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/498</td>\\n\",\n       \"      <td>627</td>\\n\",\n       \"      <td>627.0</td>\\n\",\n       \"      <td>243</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>95</th>\\n\",\n       \"      <td>{u'login': u'solovyevt'}</td>\\n\",\n       \"      <td>2019-05-10 11:15:12+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-10 11:15:18+00:00</td>\\n\",\n       \"      <td>695</td>\\n\",\n       \"      <td>update Getting Started / Kubfelow on Kubernete...</td>\\n\",\n       \"      <td>2019-05-18 05:08:50+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/website/pull/695</td>\\n\",\n       \"      <td>658</td>\\n\",\n       \"      <td>658.0</td>\\n\",\n       \"      <td>472</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>96</th>\\n\",\n       \"      <td>{u'login': u'karthikv2k'}</td>\\n\",\n       \"      <td>2019-05-10 00:54:15+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-10 00:54:19+00:00</td>\\n\",\n       \"      <td>241</td>\\n\",\n       \"      <td>PyTorch notebook examples</td>\\n\",\n       \"      <td>2019-05-10 01:11:21+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/fairing/pull/241</td>\\n\",\n       \"      <td>668</td>\\n\",\n       \"      <td>668.0</td>\\n\",\n       \"      <td>668</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>97</th>\\n\",\n       \"      <td>{u'login': u'rileyjbauer'}</td>\\n\",\n       \"      <td>2019-05-07 17:40:05+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-07 17:40:13+00:00</td>\\n\",\n       \"      <td>1294</td>\\n\",\n       \"      <td>Correct input height</td>\\n\",\n       \"      <td>2019-05-22 20:24:38+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1294</td>\\n\",\n       \"      <td>723</td>\\n\",\n       \"      <td>723.0</td>\\n\",\n       \"      <td>361</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>98</th>\\n\",\n       \"      <td>{u'login': u'yaronha'}</td>\\n\",\n       \"      <td>2019-05-07 13:59:51+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-07 14:00:01+00:00</td>\\n\",\n       \"      <td>1293</td>\\n\",\n       \"      <td>add support for flexible config (via env var) ...</td>\\n\",\n       \"      <td>2019-06-05 21:38:03+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1293</td>\\n\",\n       \"      <td>727</td>\\n\",\n       \"      <td>727.0</td>\\n\",\n       \"      <td>23</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>99</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-05-02 21:26:09+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-02 21:26:20+00:00</td>\\n\",\n       \"      <td>3179</td>\\n\",\n       \"      <td>Update Pipelines to version 0.1.18 (#3121)</td>\\n\",\n       \"      <td>2019-05-02 22:17:52+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3179</td>\\n\",\n       \"      <td>840</td>\\n\",\n       \"      <td>840.0</td>\\n\",\n       \"      <td>839</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>{u'login': u'cliveseldon'}</td>\\n\",\n       \"      <td>2019-04-30 18:49:30+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-30 18:49:37+00:00</td>\\n\",\n       \"      <td>36</td>\\n\",\n       \"      <td>add seldon</td>\\n\",\n       \"      <td>2019-05-14 15:55:27+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/manifests/pull/36</td>\\n\",\n       \"      <td>890</td>\\n\",\n       \"      <td>890.0</td>\\n\",\n       \"      <td>557</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>{u'login': u'animeshsingh'}</td>\\n\",\n       \"      <td>2019-04-30 07:04:30+00:00</td>\\n\",\n       \"      <td>{u'login': u'animeshsingh'}</td>\\n\",\n       \"      <td>2019-04-30 07:19:09+00:00</td>\\n\",\n       \"      <td>1264</td>\\n\",\n       \"      <td>updating components and samples owners file</td>\\n\",\n       \"      <td>2019-05-03 05:13:38+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1264</td>\\n\",\n       \"      <td>902</td>\\n\",\n       \"      <td>902.0</td>\\n\",\n       \"      <td>832</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>{u'login': u'holdenk'}</td>\\n\",\n       \"      <td>2019-04-29 11:31:03+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-29 11:31:09+00:00</td>\\n\",\n       \"      <td>3137</td>\\n\",\n       \"      <td>[KUBEFLOW-3136] Fix OAUTH requirement in gke u...</td>\\n\",\n       \"      <td>2019-04-29 11:31:17+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3137</td>\\n\",\n       \"      <td>922</td>\\n\",\n       \"      <td>922.0</td>\\n\",\n       \"      <td>922</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>{u'login': u'jingzhang36'}</td>\\n\",\n       \"      <td>2019-04-25 22:16:11+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-25 22:16:16+00:00</td>\\n\",\n       \"      <td>1237</td>\\n\",\n       \"      <td>Add a helper function to create tensorboard crd</td>\\n\",\n       \"      <td>2019-05-31 07:21:34+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1237</td>\\n\",\n       \"      <td>1007</td>\\n\",\n       \"      <td>1007.0</td>\\n\",\n       \"      <td>158</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>{u'login': u'lluunn'}</td>\\n\",\n       \"      <td>2019-04-25 21:16:54+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-25 21:17:06+00:00</td>\\n\",\n       \"      <td>3114</td>\\n\",\n       \"      <td>WIP don't review</td>\\n\",\n       \"      <td>2019-04-26 23:16:24+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3114</td>\\n\",\n       \"      <td>1008</td>\\n\",\n       \"      <td>1008.0</td>\\n\",\n       \"      <td>982</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>{u'login': u'rohithreddy'}</td>\\n\",\n       \"      <td>2019-04-23 22:23:26+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-23 22:23:33+00:00</td>\\n\",\n       \"      <td>3089</td>\\n\",\n       \"      <td>Add emacs package to the Jupyter Image</td>\\n\",\n       \"      <td>2019-04-24 02:06:01+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3089</td>\\n\",\n       \"      <td>1055</td>\\n\",\n       \"      <td>1055.0</td>\\n\",\n       \"      <td>1051</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>{u'login': u'rileyjbauer'}</td>\\n\",\n       \"      <td>2019-04-23 21:23:26+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-23 21:23:32+00:00</td>\\n\",\n       \"      <td>1208</td>\\n\",\n       \"      <td>[WIP] Initial attempt to migrate from react-sc...</td>\\n\",\n       \"      <td>2019-05-03 01:52:17+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1208</td>\\n\",\n       \"      <td>1056</td>\\n\",\n       \"      <td>1056.0</td>\\n\",\n       \"      <td>835</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-04-22 22:29:35+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-22 22:29:45+00:00</td>\\n\",\n       \"      <td>1200</td>\\n\",\n       \"      <td>SDK - Improved test script compatibility with ...</td>\\n\",\n       \"      <td>2019-06-05 23:13:36+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1200</td>\\n\",\n       \"      <td>1079</td>\\n\",\n       \"      <td>1079.0</td>\\n\",\n       \"      <td>22</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>{u'login': u'swiftdiaries'}</td>\\n\",\n       \"      <td>2019-04-19 18:59:56+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-19 19:00:09+00:00</td>\\n\",\n       \"      <td>3060</td>\\n\",\n       \"      <td>kfctl go binary - kustomize e2e test</td>\\n\",\n       \"      <td>2019-06-06 01:45:36+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3060</td>\\n\",\n       \"      <td>1154</td>\\n\",\n       \"      <td>1154.0</td>\\n\",\n       \"      <td>19</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>{u'login': u'wukong1992'}</td>\\n\",\n       \"      <td>2019-04-18 06:40:38+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-18 06:40:44+00:00</td>\\n\",\n       \"      <td>458</td>\\n\",\n       \"      <td>support request count</td>\\n\",\n       \"      <td>2019-05-27 04:14:53+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/458</td>\\n\",\n       \"      <td>1190</td>\\n\",\n       \"      <td>1190.0</td>\\n\",\n       \"      <td>257</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>{u'login': u'zionwu'}</td>\\n\",\n       \"      <td>2019-03-13 12:20:46+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-13 12:20:52+00:00</td>\\n\",\n       \"      <td>959</td>\\n\",\n       \"      <td>Delete pod on lost node</td>\\n\",\n       \"      <td>2019-04-11 13:30:29+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/tf-operator/pull/959</td>\\n\",\n       \"      <td>2049</td>\\n\",\n       \"      <td>2049.0</td>\\n\",\n       \"      <td>1352</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>{u'login': u'dreamryx'}</td>\\n\",\n       \"      <td>2019-03-13 08:49:35+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-13 08:49:40+00:00</td>\\n\",\n       \"      <td>430</td>\\n\",\n       \"      <td>update dockerfile for power build</td>\\n\",\n       \"      <td>2019-04-24 09:02:36+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/430</td>\\n\",\n       \"      <td>2052</td>\\n\",\n       \"      <td>2052.0</td>\\n\",\n       \"      <td>1044</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>31</th>\\n\",\n       \"      <td>{u'login': u'animeshsingh'}</td>\\n\",\n       \"      <td>2019-03-12 00:41:45+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-12 00:41:50+00:00</td>\\n\",\n       \"      <td>71</td>\\n\",\n       \"      <td>Update org.yaml</td>\\n\",\n       \"      <td>2019-03-12 00:41:59+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/internal-acls/pull/71</td>\\n\",\n       \"      <td>2084</td>\\n\",\n       \"      <td>2084.0</td>\\n\",\n       \"      <td>2084</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>32</th>\\n\",\n       \"      <td>{u'login': u'avdaredevil'}</td>\\n\",\n       \"      <td>2019-03-07 09:39:43+00:00</td>\\n\",\n       \"      <td>{u'login': u'avdaredevil'}</td>\\n\",\n       \"      <td>2019-03-07 09:47:58+00:00</td>\\n\",\n       \"      <td>2650</td>\\n\",\n       \"      <td>[Windows] Windows Scripts for Setting up Kubeflow</td>\\n\",\n       \"      <td>2019-05-09 23:03:20+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/2650</td>\\n\",\n       \"      <td>2195</td>\\n\",\n       \"      <td>2195.0</td>\\n\",\n       \"      <td>670</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>33</th>\\n\",\n       \"      <td>{u'login': u'IronPan'}</td>\\n\",\n       \"      <td>2019-03-06 00:39:35+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-06 00:39:42+00:00</td>\\n\",\n       \"      <td>918</td>\\n\",\n       \"      <td>Add test suit to upgrade pipeline</td>\\n\",\n       \"      <td>2019-04-24 17:19:34+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/918</td>\\n\",\n       \"      <td>2228</td>\\n\",\n       \"      <td>2228.0</td>\\n\",\n       \"      <td>1036</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>34</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-03-05 21:33:50+00:00</td>\\n\",\n       \"      <td>{u'login': u'IronPan'}</td>\\n\",\n       \"      <td>2019-03-05 21:33:58+00:00</td>\\n\",\n       \"      <td>912</td>\\n\",\n       \"      <td>[WIP]Improved the sample Keras classifier comp...</td>\\n\",\n       \"      <td>2019-03-07 07:59:06+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/912</td>\\n\",\n       \"      <td>2232</td>\\n\",\n       \"      <td>2232.0</td>\\n\",\n       \"      <td>2197</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>35</th>\\n\",\n       \"      <td>{u'login': u'lluunn'}</td>\\n\",\n       \"      <td>2019-03-04 21:47:17+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-04 21:47:26+00:00</td>\\n\",\n       \"      <td>2616</td>\\n\",\n       \"      <td>WIP</td>\\n\",\n       \"      <td>2019-06-02 22:23:26+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/2616</td>\\n\",\n       \"      <td>2255</td>\\n\",\n       \"      <td>2255.0</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>36</th>\\n\",\n       \"      <td>{u'login': u'toshiiw'}</td>\\n\",\n       \"      <td>2019-03-04 02:42:22+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-04 02:42:27+00:00</td>\\n\",\n       \"      <td>417</td>\\n\",\n       \"      <td>Print verbose error when studyjob updates fail</td>\\n\",\n       \"      <td>2019-03-05 06:08:42+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/417</td>\\n\",\n       \"      <td>2274</td>\\n\",\n       \"      <td>2274.0</td>\\n\",\n       \"      <td>2247</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>37</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-03-01 23:16:42+00:00</td>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-03-02 08:44:49+00:00</td>\\n\",\n       \"      <td>898</td>\\n\",\n       \"      <td>Collecting coverage when running python tests</td>\\n\",\n       \"      <td>2019-04-25 00:56:00+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/898</td>\\n\",\n       \"      <td>2326</td>\\n\",\n       \"      <td>2316.0</td>\\n\",\n       \"      <td>1028</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>38</th>\\n\",\n       \"      <td>{u'login': u'toshiiw'}</td>\\n\",\n       \"      <td>2019-02-26 08:04:33+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-26 08:04:38+00:00</td>\\n\",\n       \"      <td>411</td>\\n\",\n       \"      <td>Retry studyjobcontroller</td>\\n\",\n       \"      <td>2019-05-17 09:25:27+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/411</td>\\n\",\n       \"      <td>2413</td>\\n\",\n       \"      <td>2413.0</td>\\n\",\n       \"      <td>492</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>39</th>\\n\",\n       \"      <td>{u'login': u'knkski'}</td>\\n\",\n       \"      <td>2019-02-19 21:27:13+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-19 21:27:22+00:00</td>\\n\",\n       \"      <td>2508</td>\\n\",\n       \"      <td>Update kubespawner property name</td>\\n\",\n       \"      <td>2019-04-25 05:02:36+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/2508</td>\\n\",\n       \"      <td>2568</td>\\n\",\n       \"      <td>2568.0</td>\\n\",\n       \"      <td>1024</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>40</th>\\n\",\n       \"      <td>{u'login': u'jayunit100'}</td>\\n\",\n       \"      <td>2019-02-15 16:59:16+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-15 16:59:28+00:00</td>\\n\",\n       \"      <td>385</td>\\n\",\n       \"      <td>Vendoring</td>\\n\",\n       \"      <td>2019-02-20 17:47:08+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/385</td>\\n\",\n       \"      <td>2668</td>\\n\",\n       \"      <td>2668.0</td>\\n\",\n       \"      <td>2547</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>41</th>\\n\",\n       \"      <td>{u'login': u'yehiyam'}</td>\\n\",\n       \"      <td>2019-02-07 10:33:40+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-07 10:33:49+00:00</td>\\n\",\n       \"      <td>502</td>\\n\",\n       \"      <td>fix typo</td>\\n\",\n       \"      <td>2019-02-26 23:12:45+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/examples/pull/502</td>\\n\",\n       \"      <td>2867</td>\\n\",\n       \"      <td>2867.0</td>\\n\",\n       \"      <td>2398</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>42</th>\\n\",\n       \"      <td>{u'login': u'YujiOshima'}</td>\\n\",\n       \"      <td>2019-02-07 08:14:16+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-07 08:14:22+00:00</td>\\n\",\n       \"      <td>362</td>\\n\",\n       \"      <td>DB: add studyjob table and extend worker table</td>\\n\",\n       \"      <td>2019-03-04 09:53:25+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/362</td>\\n\",\n       \"      <td>2869</td>\\n\",\n       \"      <td>2869.0</td>\\n\",\n       \"      <td>2267</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>43</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-02-07 07:30:11+00:00</td>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-05-17 01:16:28+00:00</td>\\n\",\n       \"      <td>791</td>\\n\",\n       \"      <td>SDK - Added support for raw input artifact arg...</td>\\n\",\n       \"      <td>2019-05-23 01:24:26+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/791</td>\\n\",\n       \"      <td>2870</td>\\n\",\n       \"      <td>500.0</td>\\n\",\n       \"      <td>356</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>44</th>\\n\",\n       \"      <td>{u'login': u'hongye-sun'}</td>\\n\",\n       \"      <td>2019-02-06 00:18:49+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-06 00:18:54+00:00</td>\\n\",\n       \"      <td>787</td>\\n\",\n       \"      <td>Add GPU test back</td>\\n\",\n       \"      <td>2019-02-27 00:59:08+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/787</td>\\n\",\n       \"      <td>2901</td>\\n\",\n       \"      <td>2901.0</td>\\n\",\n       \"      <td>2396</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>45</th>\\n\",\n       \"      <td>{u'login': u'DmitryBe'}</td>\\n\",\n       \"      <td>2019-02-01 05:22:32+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-01 05:22:36+00:00</td>\\n\",\n       \"      <td>766</td>\\n\",\n       \"      <td>Added AWS S3 support for storing artefacts.</td>\\n\",\n       \"      <td>2019-04-27 18:19:11+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/766</td>\\n\",\n       \"      <td>3016</td>\\n\",\n       \"      <td>3016.0</td>\\n\",\n       \"      <td>963</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>46</th>\\n\",\n       \"      <td>{u'login': u'DmitryBe'}</td>\\n\",\n       \"      <td>2019-02-01 05:18:20+00:00</td>\\n\",\n       \"      <td>{u'login': u'DmitryBe'}</td>\\n\",\n       \"      <td>2019-02-10 14:33:00+00:00</td>\\n\",\n       \"      <td>765</td>\\n\",\n       \"      <td>Added configArtifactRepository method into `sd...</td>\\n\",\n       \"      <td>2019-04-30 00:35:10+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/765</td>\\n\",\n       \"      <td>3016</td>\\n\",\n       \"      <td>2791.0</td>\\n\",\n       \"      <td>909</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>47</th>\\n\",\n       \"      <td>{u'login': u'toshiiw'}</td>\\n\",\n       \"      <td>2019-01-31 07:51:52+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-31 07:51:57+00:00</td>\\n\",\n       \"      <td>357</td>\\n\",\n       \"      <td>DNM: check if kubeconfig is sane</td>\\n\",\n       \"      <td>2019-02-01 07:07:05+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/357</td>\\n\",\n       \"      <td>3037</td>\\n\",\n       \"      <td>3037.0</td>\\n\",\n       \"      <td>3014</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>48</th>\\n\",\n       \"      <td>{u'login': u'TimZaman'}</td>\\n\",\n       \"      <td>2019-01-31 00:37:31+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-31 00:37:40+00:00</td>\\n\",\n       \"      <td>2354</td>\\n\",\n       \"      <td>Fix minikube setup script's df inference</td>\\n\",\n       \"      <td>2019-05-15 15:02:49+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/2354</td>\\n\",\n       \"      <td>3044</td>\\n\",\n       \"      <td>3044.0</td>\\n\",\n       \"      <td>534</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>49</th>\\n\",\n       \"      <td>{u'login': u'YujiOshima'}</td>\\n\",\n       \"      <td>2019-01-30 02:59:51+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-30 03:00:01+00:00</td>\\n\",\n       \"      <td>352</td>\\n\",\n       \"      <td>Manual suggest</td>\\n\",\n       \"      <td>2019-02-07 08:17:41+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/352</td>\\n\",\n       \"      <td>3066</td>\\n\",\n       \"      <td>3066.0</td>\\n\",\n       \"      <td>2869</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>50</th>\\n\",\n       \"      <td>{u'login': u'dsdinter'}</td>\\n\",\n       \"      <td>2019-01-27 18:37:42+00:00</td>\\n\",\n       \"      <td>{u'login': u'dsdinter'}</td>\\n\",\n       \"      <td>2019-05-05 23:01:29+00:00</td>\\n\",\n       \"      <td>490</td>\\n\",\n       \"      <td>[pytorch_mnist] Automate image build</td>\\n\",\n       \"      <td>2019-05-08 15:11:21+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/examples/pull/490</td>\\n\",\n       \"      <td>3122</td>\\n\",\n       \"      <td>766.0</td>\\n\",\n       \"      <td>702</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>51</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-21 07:19:10+00:00</td>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-26 01:19:56+00:00</td>\\n\",\n       \"      <td>713</td>\\n\",\n       \"      <td>SDK/Components - Refactoring: Improved contai...</td>\\n\",\n       \"      <td>2019-03-30 08:36:35+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/713</td>\\n\",\n       \"      <td>3278</td>\\n\",\n       \"      <td>3164.0</td>\\n\",\n       \"      <td>1644</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>52</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-21 07:17:53+00:00</td>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-25 21:37:51+00:00</td>\\n\",\n       \"      <td>712</td>\\n\",\n       \"      <td>SDK/Components - Only convert TaskSpec to Cont...</td>\\n\",\n       \"      <td>2019-03-30 08:38:57+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/712</td>\\n\",\n       \"      <td>3278</td>\\n\",\n       \"      <td>3167.0</td>\\n\",\n       \"      <td>1644</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>53</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-18 02:09:34+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-18 02:09:39+00:00</td>\\n\",\n       \"      <td>702</td>\\n\",\n       \"      <td>SDK/Component - Added the ComponentReference.s...</td>\\n\",\n       \"      <td>2019-03-06 21:50:37+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/702</td>\\n\",\n       \"      <td>3355</td>\\n\",\n       \"      <td>3355.0</td>\\n\",\n       \"      <td>2207</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>54</th>\\n\",\n       \"      <td>{u'login': u'govindKAG'}</td>\\n\",\n       \"      <td>2019-01-16 11:31:09+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-16 11:31:14+00:00</td>\\n\",\n       \"      <td>481</td>\\n\",\n       \"      <td>reduced number of layers</td>\\n\",\n       \"      <td>2019-03-06 17:21:10+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/examples/pull/481</td>\\n\",\n       \"      <td>3394</td>\\n\",\n       \"      <td>3394.0</td>\\n\",\n       \"      <td>2212</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>55</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-15 23:02:07+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-15 23:02:13+00:00</td>\\n\",\n       \"      <td>688</td>\\n\",\n       \"      <td>SDK/Components - Renamed fileOutputs to unconf...</td>\\n\",\n       \"      <td>2019-01-21 07:14:25+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/688</td>\\n\",\n       \"      <td>3406</td>\\n\",\n       \"      <td>3406.0</td>\\n\",\n       \"      <td>3278</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>56</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-11 19:58:00+00:00</td>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-12 00:04:05+00:00</td>\\n\",\n       \"      <td>669</td>\\n\",\n       \"      <td>SDK/Components  - Added Json Schema spec for t...</td>\\n\",\n       \"      <td>2019-05-21 23:19:57+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/669</td>\\n\",\n       \"      <td>3505</td>\\n\",\n       \"      <td>3501.0</td>\\n\",\n       \"      <td>382</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>57</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-11 03:27:40+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-11 03:27:45+00:00</td>\\n\",\n       \"      <td>668</td>\\n\",\n       \"      <td>SDK - Update minimum Python version to 3.6</td>\\n\",\n       \"      <td>2019-04-25 23:41:41+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/668</td>\\n\",\n       \"      <td>3522</td>\\n\",\n       \"      <td>3522.0</td>\\n\",\n       \"      <td>1005</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>58</th>\\n\",\n       \"      <td>{u'login': u'neuromage'}</td>\\n\",\n       \"      <td>2019-01-05 22:53:33+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-05 22:53:38+00:00</td>\\n\",\n       \"      <td>640</td>\\n\",\n       \"      <td>[WIP] Run Bazel build/tests as part of Travis CI</td>\\n\",\n       \"      <td>2019-01-11 21:40:24+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/640</td>\\n\",\n       \"      <td>3646</td>\\n\",\n       \"      <td>3646.0</td>\\n\",\n       \"      <td>3503</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>79 rows × 11 columns</p>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"                            author                 createdAt  \\\\\\n\",\n       \"68  {u'login': u'jeremiahkellick'} 2019-05-29 15:53:23+00:00   \\n\",\n       \"70   {u'login': u'ggaaooppeenngg'} 2019-05-28 04:23:09+00:00   \\n\",\n       \"74      {u'login': u'aakashbajaj'} 2019-05-24 09:47:58+00:00   \\n\",\n       \"75         {u'login': u'gyliu513'} 2019-05-24 08:09:49+00:00   \\n\",\n       \"80         {u'login': u'M00nF1sh'} 2019-05-22 23:28:30+00:00   \\n\",\n       \"81         {u'login': u'M00nF1sh'} 2019-05-22 22:32:49+00:00   \\n\",\n       \"83         {u'login': u'kkasravi'} 2019-05-18 14:47:09+00:00   \\n\",\n       \"85        {u'login': u'elikatsis'} 2019-05-16 13:49:06+00:00   \\n\",\n       \"86      {u'login': u'chenhan1218'} 2019-05-16 10:17:15+00:00   \\n\",\n       \"88     {u'login': u'ryandawsonuk'} 2019-05-16 08:29:16+00:00   \\n\",\n       \"89       {u'login': u'yanniszark'} 2019-05-15 17:43:21+00:00   \\n\",\n       \"90     {u'login': u'ryandawsonuk'} 2019-05-15 17:18:21+00:00   \\n\",\n       \"92      {u'login': u'johnugeorge'} 2019-05-14 12:53:32+00:00   \\n\",\n       \"93        {u'login': u'gaocegege'} 2019-05-13 02:13:15+00:00   \\n\",\n       \"94       {u'login': u'achalshant'} 2019-05-11 17:45:09+00:00   \\n\",\n       \"95        {u'login': u'solovyevt'} 2019-05-10 11:15:12+00:00   \\n\",\n       \"96       {u'login': u'karthikv2k'} 2019-05-10 00:54:15+00:00   \\n\",\n       \"97      {u'login': u'rileyjbauer'} 2019-05-07 17:40:05+00:00   \\n\",\n       \"98          {u'login': u'yaronha'} 2019-05-07 13:59:51+00:00   \\n\",\n       \"99          {u'login': u'Ark-kun'} 2019-05-02 21:26:09+00:00   \\n\",\n       \"0       {u'login': u'cliveseldon'} 2019-04-30 18:49:30+00:00   \\n\",\n       \"1      {u'login': u'animeshsingh'} 2019-04-30 07:04:30+00:00   \\n\",\n       \"2           {u'login': u'holdenk'} 2019-04-29 11:31:03+00:00   \\n\",\n       \"3       {u'login': u'jingzhang36'} 2019-04-25 22:16:11+00:00   \\n\",\n       \"4            {u'login': u'lluunn'} 2019-04-25 21:16:54+00:00   \\n\",\n       \"5       {u'login': u'rohithreddy'} 2019-04-23 22:23:26+00:00   \\n\",\n       \"6       {u'login': u'rileyjbauer'} 2019-04-23 21:23:26+00:00   \\n\",\n       \"7           {u'login': u'Ark-kun'} 2019-04-22 22:29:35+00:00   \\n\",\n       \"8      {u'login': u'swiftdiaries'} 2019-04-19 18:59:56+00:00   \\n\",\n       \"9        {u'login': u'wukong1992'} 2019-04-18 06:40:38+00:00   \\n\",\n       \"..                             ...                       ...   \\n\",\n       \"29           {u'login': u'zionwu'} 2019-03-13 12:20:46+00:00   \\n\",\n       \"30         {u'login': u'dreamryx'} 2019-03-13 08:49:35+00:00   \\n\",\n       \"31     {u'login': u'animeshsingh'} 2019-03-12 00:41:45+00:00   \\n\",\n       \"32      {u'login': u'avdaredevil'} 2019-03-07 09:39:43+00:00   \\n\",\n       \"33          {u'login': u'IronPan'} 2019-03-06 00:39:35+00:00   \\n\",\n       \"34          {u'login': u'Ark-kun'} 2019-03-05 21:33:50+00:00   \\n\",\n       \"35           {u'login': u'lluunn'} 2019-03-04 21:47:17+00:00   \\n\",\n       \"36          {u'login': u'toshiiw'} 2019-03-04 02:42:22+00:00   \\n\",\n       \"37          {u'login': u'Ark-kun'} 2019-03-01 23:16:42+00:00   \\n\",\n       \"38          {u'login': u'toshiiw'} 2019-02-26 08:04:33+00:00   \\n\",\n       \"39           {u'login': u'knkski'} 2019-02-19 21:27:13+00:00   \\n\",\n       \"40       {u'login': u'jayunit100'} 2019-02-15 16:59:16+00:00   \\n\",\n       \"41          {u'login': u'yehiyam'} 2019-02-07 10:33:40+00:00   \\n\",\n       \"42       {u'login': u'YujiOshima'} 2019-02-07 08:14:16+00:00   \\n\",\n       \"43          {u'login': u'Ark-kun'} 2019-02-07 07:30:11+00:00   \\n\",\n       \"44       {u'login': u'hongye-sun'} 2019-02-06 00:18:49+00:00   \\n\",\n       \"45         {u'login': u'DmitryBe'} 2019-02-01 05:22:32+00:00   \\n\",\n       \"46         {u'login': u'DmitryBe'} 2019-02-01 05:18:20+00:00   \\n\",\n       \"47          {u'login': u'toshiiw'} 2019-01-31 07:51:52+00:00   \\n\",\n       \"48         {u'login': u'TimZaman'} 2019-01-31 00:37:31+00:00   \\n\",\n       \"49       {u'login': u'YujiOshima'} 2019-01-30 02:59:51+00:00   \\n\",\n       \"50         {u'login': u'dsdinter'} 2019-01-27 18:37:42+00:00   \\n\",\n       \"51          {u'login': u'Ark-kun'} 2019-01-21 07:19:10+00:00   \\n\",\n       \"52          {u'login': u'Ark-kun'} 2019-01-21 07:17:53+00:00   \\n\",\n       \"53          {u'login': u'Ark-kun'} 2019-01-18 02:09:34+00:00   \\n\",\n       \"54        {u'login': u'govindKAG'} 2019-01-16 11:31:09+00:00   \\n\",\n       \"55          {u'login': u'Ark-kun'} 2019-01-15 23:02:07+00:00   \\n\",\n       \"56          {u'login': u'Ark-kun'} 2019-01-11 19:58:00+00:00   \\n\",\n       \"57          {u'login': u'Ark-kun'} 2019-01-11 03:27:40+00:00   \\n\",\n       \"58        {u'login': u'neuromage'} 2019-01-05 22:53:33+00:00   \\n\",\n       \"\\n\",\n       \"                         editor              lastEditedAt  number  \\\\\\n\",\n       \"68         {u'login': u'jlewi'} 2019-05-29 15:53:29+00:00     108   \\n\",\n       \"70         {u'login': u'jlewi'} 2019-05-28 04:23:14+00:00      20   \\n\",\n       \"74         {u'login': u'jlewi'} 2019-05-24 09:48:05+00:00    1384   \\n\",\n       \"75         {u'login': u'jlewi'} 2019-05-24 08:09:58+00:00     586   \\n\",\n       \"80         {u'login': u'jlewi'} 2019-05-22 23:28:36+00:00    3340   \\n\",\n       \"81      {u'login': u'M00nF1sh'} 2019-05-22 22:35:54+00:00    3337   \\n\",\n       \"83         {u'login': u'jlewi'} 2019-05-18 14:47:14+00:00    3311   \\n\",\n       \"85         {u'login': u'jlewi'} 2019-05-16 13:49:17+00:00    3294   \\n\",\n       \"86         {u'login': u'jlewi'} 2019-05-16 10:17:21+00:00    3290   \\n\",\n       \"88  {u'login': u'ryandawsonuk'} 2019-05-16 08:29:52+00:00     103   \\n\",\n       \"89         {u'login': u'jlewi'} 2019-05-15 17:43:27+00:00    3278   \\n\",\n       \"90         {u'login': u'jlewi'} 2019-05-15 17:18:32+00:00     269   \\n\",\n       \"92   {u'login': u'johnugeorge'} 2019-05-14 12:54:17+00:00     267   \\n\",\n       \"93         {u'login': u'jlewi'} 2019-05-13 02:13:20+00:00     500   \\n\",\n       \"94         {u'login': u'jlewi'} 2019-05-11 17:45:15+00:00     498   \\n\",\n       \"95         {u'login': u'jlewi'} 2019-05-10 11:15:18+00:00     695   \\n\",\n       \"96         {u'login': u'jlewi'} 2019-05-10 00:54:19+00:00     241   \\n\",\n       \"97         {u'login': u'jlewi'} 2019-05-07 17:40:13+00:00    1294   \\n\",\n       \"98         {u'login': u'jlewi'} 2019-05-07 14:00:01+00:00    1293   \\n\",\n       \"99         {u'login': u'jlewi'} 2019-05-02 21:26:20+00:00    3179   \\n\",\n       \"0          {u'login': u'jlewi'} 2019-04-30 18:49:37+00:00      36   \\n\",\n       \"1   {u'login': u'animeshsingh'} 2019-04-30 07:19:09+00:00    1264   \\n\",\n       \"2          {u'login': u'jlewi'} 2019-04-29 11:31:09+00:00    3137   \\n\",\n       \"3          {u'login': u'jlewi'} 2019-04-25 22:16:16+00:00    1237   \\n\",\n       \"4          {u'login': u'jlewi'} 2019-04-25 21:17:06+00:00    3114   \\n\",\n       \"5          {u'login': u'jlewi'} 2019-04-23 22:23:33+00:00    3089   \\n\",\n       \"6          {u'login': u'jlewi'} 2019-04-23 21:23:32+00:00    1208   \\n\",\n       \"7          {u'login': u'jlewi'} 2019-04-22 22:29:45+00:00    1200   \\n\",\n       \"8          {u'login': u'jlewi'} 2019-04-19 19:00:09+00:00    3060   \\n\",\n       \"9          {u'login': u'jlewi'} 2019-04-18 06:40:44+00:00     458   \\n\",\n       \"..                          ...                       ...     ...   \\n\",\n       \"29         {u'login': u'jlewi'} 2019-03-13 12:20:52+00:00     959   \\n\",\n       \"30         {u'login': u'jlewi'} 2019-03-13 08:49:40+00:00     430   \\n\",\n       \"31         {u'login': u'jlewi'} 2019-03-12 00:41:50+00:00      71   \\n\",\n       \"32   {u'login': u'avdaredevil'} 2019-03-07 09:47:58+00:00    2650   \\n\",\n       \"33         {u'login': u'jlewi'} 2019-03-06 00:39:42+00:00     918   \\n\",\n       \"34       {u'login': u'IronPan'} 2019-03-05 21:33:58+00:00     912   \\n\",\n       \"35         {u'login': u'jlewi'} 2019-03-04 21:47:26+00:00    2616   \\n\",\n       \"36         {u'login': u'jlewi'} 2019-03-04 02:42:27+00:00     417   \\n\",\n       \"37       {u'login': u'Ark-kun'} 2019-03-02 08:44:49+00:00     898   \\n\",\n       \"38         {u'login': u'jlewi'} 2019-02-26 08:04:38+00:00     411   \\n\",\n       \"39         {u'login': u'jlewi'} 2019-02-19 21:27:22+00:00    2508   \\n\",\n       \"40         {u'login': u'jlewi'} 2019-02-15 16:59:28+00:00     385   \\n\",\n       \"41         {u'login': u'jlewi'} 2019-02-07 10:33:49+00:00     502   \\n\",\n       \"42         {u'login': u'jlewi'} 2019-02-07 08:14:22+00:00     362   \\n\",\n       \"43       {u'login': u'Ark-kun'} 2019-05-17 01:16:28+00:00     791   \\n\",\n       \"44         {u'login': u'jlewi'} 2019-02-06 00:18:54+00:00     787   \\n\",\n       \"45         {u'login': u'jlewi'} 2019-02-01 05:22:36+00:00     766   \\n\",\n       \"46      {u'login': u'DmitryBe'} 2019-02-10 14:33:00+00:00     765   \\n\",\n       \"47         {u'login': u'jlewi'} 2019-01-31 07:51:57+00:00     357   \\n\",\n       \"48         {u'login': u'jlewi'} 2019-01-31 00:37:40+00:00    2354   \\n\",\n       \"49         {u'login': u'jlewi'} 2019-01-30 03:00:01+00:00     352   \\n\",\n       \"50      {u'login': u'dsdinter'} 2019-05-05 23:01:29+00:00     490   \\n\",\n       \"51       {u'login': u'Ark-kun'} 2019-01-26 01:19:56+00:00     713   \\n\",\n       \"52       {u'login': u'Ark-kun'} 2019-01-25 21:37:51+00:00     712   \\n\",\n       \"53         {u'login': u'jlewi'} 2019-01-18 02:09:39+00:00     702   \\n\",\n       \"54         {u'login': u'jlewi'} 2019-01-16 11:31:14+00:00     481   \\n\",\n       \"55         {u'login': u'jlewi'} 2019-01-15 23:02:13+00:00     688   \\n\",\n       \"56       {u'login': u'Ark-kun'} 2019-01-12 00:04:05+00:00     669   \\n\",\n       \"57         {u'login': u'jlewi'} 2019-01-11 03:27:45+00:00     668   \\n\",\n       \"58         {u'login': u'jlewi'} 2019-01-05 22:53:38+00:00     640   \\n\",\n       \"\\n\",\n       \"                                                title  \\\\\\n\",\n       \"68                    Add jeremiahkellick to org.yaml   \\n\",\n       \"70                               support frozen model   \\n\",\n       \"74  gcp cred bug fix for multiple credentials in s...   \\n\",\n       \"75            WIP Do not use /tmp/katib as host path.   \\n\",\n       \"80               templatize istio k8s version for aws   \\n\",\n       \"81  Update OWNERS file and make ingress configurab...   \\n\",\n       \"83                             add kkasravi to OWNERS   \\n\",\n       \"85  Add verb \\\"create\\\" for Secrets to ClusterRole \\\"...   \\n\",\n       \"86           fix #2863, postpone check kubeflow ready   \\n\",\n       \"88                                  seldon org update   \\n\",\n       \"89        basic-auth: make kflogin work with NodePort   \\n\",\n       \"90      add rd@seldon.io to member_organizations.yaml   \\n\",\n       \"92             Update github_users.json to the latest   \\n\",\n       \"93  WIP feat(suggestion): Define new API for sugge...   \\n\",\n       \"94         Decoupling DB interface from katib manager   \\n\",\n       \"95  update Getting Started / Kubfelow on Kubernete...   \\n\",\n       \"96                          PyTorch notebook examples   \\n\",\n       \"97                               Correct input height   \\n\",\n       \"98  add support for flexible config (via env var) ...   \\n\",\n       \"99         Update Pipelines to version 0.1.18 (#3121)   \\n\",\n       \"0                                          add seldon   \\n\",\n       \"1         updating components and samples owners file   \\n\",\n       \"2   [KUBEFLOW-3136] Fix OAUTH requirement in gke u...   \\n\",\n       \"3     Add a helper function to create tensorboard crd   \\n\",\n       \"4                                    WIP don't review   \\n\",\n       \"5              Add emacs package to the Jupyter Image   \\n\",\n       \"6   [WIP] Initial attempt to migrate from react-sc...   \\n\",\n       \"7   SDK - Improved test script compatibility with ...   \\n\",\n       \"8                kfctl go binary - kustomize e2e test   \\n\",\n       \"9                               support request count   \\n\",\n       \"..                                                ...   \\n\",\n       \"29                            Delete pod on lost node   \\n\",\n       \"30                  update dockerfile for power build   \\n\",\n       \"31                                    Update org.yaml   \\n\",\n       \"32  [Windows] Windows Scripts for Setting up Kubeflow   \\n\",\n       \"33                  Add test suit to upgrade pipeline   \\n\",\n       \"34  [WIP]Improved the sample Keras classifier comp...   \\n\",\n       \"35                                                WIP   \\n\",\n       \"36     Print verbose error when studyjob updates fail   \\n\",\n       \"37      Collecting coverage when running python tests   \\n\",\n       \"38                           Retry studyjobcontroller   \\n\",\n       \"39                   Update kubespawner property name   \\n\",\n       \"40                                          Vendoring   \\n\",\n       \"41                                           fix typo   \\n\",\n       \"42     DB: add studyjob table and extend worker table   \\n\",\n       \"43  SDK - Added support for raw input artifact arg...   \\n\",\n       \"44                                  Add GPU test back   \\n\",\n       \"45        Added AWS S3 support for storing artefacts.   \\n\",\n       \"46  Added configArtifactRepository method into `sd...   \\n\",\n       \"47                   DNM: check if kubeconfig is sane   \\n\",\n       \"48           Fix minikube setup script's df inference   \\n\",\n       \"49                                     Manual suggest   \\n\",\n       \"50               [pytorch_mnist] Automate image build   \\n\",\n       \"51   SDK/Components - Refactoring: Improved contai...   \\n\",\n       \"52  SDK/Components - Only convert TaskSpec to Cont...   \\n\",\n       \"53  SDK/Component - Added the ComponentReference.s...   \\n\",\n       \"54                           reduced number of layers   \\n\",\n       \"55  SDK/Components - Renamed fileOutputs to unconf...   \\n\",\n       \"56  SDK/Components  - Added Json Schema spec for t...   \\n\",\n       \"57         SDK - Update minimum Python version to 3.6   \\n\",\n       \"58   [WIP] Run Bazel build/tests as part of Travis CI   \\n\",\n       \"\\n\",\n       \"                   updatedAt  \\\\\\n\",\n       \"68 2019-05-29 16:56:10+00:00   \\n\",\n       \"70 2019-05-28 04:23:23+00:00   \\n\",\n       \"74 2019-05-24 10:07:10+00:00   \\n\",\n       \"75 2019-05-29 03:02:45+00:00   \\n\",\n       \"80 2019-05-23 18:45:23+00:00   \\n\",\n       \"81 2019-05-29 23:15:34+00:00   \\n\",\n       \"83 2019-05-18 14:47:23+00:00   \\n\",\n       \"85 2019-05-16 21:06:24+00:00   \\n\",\n       \"86 2019-05-16 19:49:23+00:00   \\n\",\n       \"88 2019-05-16 08:29:52+00:00   \\n\",\n       \"89 2019-05-18 17:53:55+00:00   \\n\",\n       \"90 2019-05-16 05:09:11+00:00   \\n\",\n       \"92 2019-05-14 12:54:17+00:00   \\n\",\n       \"93 2019-05-13 05:59:01+00:00   \\n\",\n       \"94 2019-05-27 18:16:21+00:00   \\n\",\n       \"95 2019-05-18 05:08:50+00:00   \\n\",\n       \"96 2019-05-10 01:11:21+00:00   \\n\",\n       \"97 2019-05-22 20:24:38+00:00   \\n\",\n       \"98 2019-06-05 21:38:03+00:00   \\n\",\n       \"99 2019-05-02 22:17:52+00:00   \\n\",\n       \"0  2019-05-14 15:55:27+00:00   \\n\",\n       \"1  2019-05-03 05:13:38+00:00   \\n\",\n       \"2  2019-04-29 11:31:17+00:00   \\n\",\n       \"3  2019-05-31 07:21:34+00:00   \\n\",\n       \"4  2019-04-26 23:16:24+00:00   \\n\",\n       \"5  2019-04-24 02:06:01+00:00   \\n\",\n       \"6  2019-05-03 01:52:17+00:00   \\n\",\n       \"7  2019-06-05 23:13:36+00:00   \\n\",\n       \"8  2019-06-06 01:45:36+00:00   \\n\",\n       \"9  2019-05-27 04:14:53+00:00   \\n\",\n       \"..                       ...   \\n\",\n       \"29 2019-04-11 13:30:29+00:00   \\n\",\n       \"30 2019-04-24 09:02:36+00:00   \\n\",\n       \"31 2019-03-12 00:41:59+00:00   \\n\",\n       \"32 2019-05-09 23:03:20+00:00   \\n\",\n       \"33 2019-04-24 17:19:34+00:00   \\n\",\n       \"34 2019-03-07 07:59:06+00:00   \\n\",\n       \"35 2019-06-02 22:23:26+00:00   \\n\",\n       \"36 2019-03-05 06:08:42+00:00   \\n\",\n       \"37 2019-04-25 00:56:00+00:00   \\n\",\n       \"38 2019-05-17 09:25:27+00:00   \\n\",\n       \"39 2019-04-25 05:02:36+00:00   \\n\",\n       \"40 2019-02-20 17:47:08+00:00   \\n\",\n       \"41 2019-02-26 23:12:45+00:00   \\n\",\n       \"42 2019-03-04 09:53:25+00:00   \\n\",\n       \"43 2019-05-23 01:24:26+00:00   \\n\",\n       \"44 2019-02-27 00:59:08+00:00   \\n\",\n       \"45 2019-04-27 18:19:11+00:00   \\n\",\n       \"46 2019-04-30 00:35:10+00:00   \\n\",\n       \"47 2019-02-01 07:07:05+00:00   \\n\",\n       \"48 2019-05-15 15:02:49+00:00   \\n\",\n       \"49 2019-02-07 08:17:41+00:00   \\n\",\n       \"50 2019-05-08 15:11:21+00:00   \\n\",\n       \"51 2019-03-30 08:36:35+00:00   \\n\",\n       \"52 2019-03-30 08:38:57+00:00   \\n\",\n       \"53 2019-03-06 21:50:37+00:00   \\n\",\n       \"54 2019-03-06 17:21:10+00:00   \\n\",\n       \"55 2019-01-21 07:14:25+00:00   \\n\",\n       \"56 2019-05-21 23:19:57+00:00   \\n\",\n       \"57 2019-04-25 23:41:41+00:00   \\n\",\n       \"58 2019-01-11 21:40:24+00:00   \\n\",\n       \"\\n\",\n       \"                                                  url  creationAge  \\\\\\n\",\n       \"68  https://github.com/kubeflow/internal-acls/pull...          197   \\n\",\n       \"70  https://github.com/kubeflow/batch-predict/pull/20          233   \\n\",\n       \"74    https://github.com/kubeflow/pipelines/pull/1384          323   \\n\",\n       \"75         https://github.com/kubeflow/katib/pull/586          325   \\n\",\n       \"80     https://github.com/kubeflow/kubeflow/pull/3340          358   \\n\",\n       \"81     https://github.com/kubeflow/kubeflow/pull/3337          359   \\n\",\n       \"83     https://github.com/kubeflow/kubeflow/pull/3311          462   \\n\",\n       \"85     https://github.com/kubeflow/kubeflow/pull/3294          511   \\n\",\n       \"86     https://github.com/kubeflow/kubeflow/pull/3290          515   \\n\",\n       \"88  https://github.com/kubeflow/internal-acls/pull...          517   \\n\",\n       \"89     https://github.com/kubeflow/kubeflow/pull/3278          531   \\n\",\n       \"90     https://github.com/kubeflow/community/pull/269          532   \\n\",\n       \"92     https://github.com/kubeflow/community/pull/267          560   \\n\",\n       \"93         https://github.com/kubeflow/katib/pull/500          595   \\n\",\n       \"94         https://github.com/kubeflow/katib/pull/498          627   \\n\",\n       \"95       https://github.com/kubeflow/website/pull/695          658   \\n\",\n       \"96       https://github.com/kubeflow/fairing/pull/241          668   \\n\",\n       \"97    https://github.com/kubeflow/pipelines/pull/1294          723   \\n\",\n       \"98    https://github.com/kubeflow/pipelines/pull/1293          727   \\n\",\n       \"99     https://github.com/kubeflow/kubeflow/pull/3179          840   \\n\",\n       \"0       https://github.com/kubeflow/manifests/pull/36          890   \\n\",\n       \"1     https://github.com/kubeflow/pipelines/pull/1264          902   \\n\",\n       \"2      https://github.com/kubeflow/kubeflow/pull/3137          922   \\n\",\n       \"3     https://github.com/kubeflow/pipelines/pull/1237         1007   \\n\",\n       \"4      https://github.com/kubeflow/kubeflow/pull/3114         1008   \\n\",\n       \"5      https://github.com/kubeflow/kubeflow/pull/3089         1055   \\n\",\n       \"6     https://github.com/kubeflow/pipelines/pull/1208         1056   \\n\",\n       \"7     https://github.com/kubeflow/pipelines/pull/1200         1079   \\n\",\n       \"8      https://github.com/kubeflow/kubeflow/pull/3060         1154   \\n\",\n       \"9          https://github.com/kubeflow/katib/pull/458         1190   \\n\",\n       \"..                                                ...          ...   \\n\",\n       \"29   https://github.com/kubeflow/tf-operator/pull/959         2049   \\n\",\n       \"30         https://github.com/kubeflow/katib/pull/430         2052   \\n\",\n       \"31  https://github.com/kubeflow/internal-acls/pull/71         2084   \\n\",\n       \"32     https://github.com/kubeflow/kubeflow/pull/2650         2195   \\n\",\n       \"33     https://github.com/kubeflow/pipelines/pull/918         2228   \\n\",\n       \"34     https://github.com/kubeflow/pipelines/pull/912         2232   \\n\",\n       \"35     https://github.com/kubeflow/kubeflow/pull/2616         2255   \\n\",\n       \"36         https://github.com/kubeflow/katib/pull/417         2274   \\n\",\n       \"37     https://github.com/kubeflow/pipelines/pull/898         2326   \\n\",\n       \"38         https://github.com/kubeflow/katib/pull/411         2413   \\n\",\n       \"39     https://github.com/kubeflow/kubeflow/pull/2508         2568   \\n\",\n       \"40         https://github.com/kubeflow/katib/pull/385         2668   \\n\",\n       \"41      https://github.com/kubeflow/examples/pull/502         2867   \\n\",\n       \"42         https://github.com/kubeflow/katib/pull/362         2869   \\n\",\n       \"43     https://github.com/kubeflow/pipelines/pull/791         2870   \\n\",\n       \"44     https://github.com/kubeflow/pipelines/pull/787         2901   \\n\",\n       \"45     https://github.com/kubeflow/pipelines/pull/766         3016   \\n\",\n       \"46     https://github.com/kubeflow/pipelines/pull/765         3016   \\n\",\n       \"47         https://github.com/kubeflow/katib/pull/357         3037   \\n\",\n       \"48     https://github.com/kubeflow/kubeflow/pull/2354         3044   \\n\",\n       \"49         https://github.com/kubeflow/katib/pull/352         3066   \\n\",\n       \"50      https://github.com/kubeflow/examples/pull/490         3122   \\n\",\n       \"51     https://github.com/kubeflow/pipelines/pull/713         3278   \\n\",\n       \"52     https://github.com/kubeflow/pipelines/pull/712         3278   \\n\",\n       \"53     https://github.com/kubeflow/pipelines/pull/702         3355   \\n\",\n       \"54      https://github.com/kubeflow/examples/pull/481         3394   \\n\",\n       \"55     https://github.com/kubeflow/pipelines/pull/688         3406   \\n\",\n       \"56     https://github.com/kubeflow/pipelines/pull/669         3505   \\n\",\n       \"57     https://github.com/kubeflow/pipelines/pull/668         3522   \\n\",\n       \"58     https://github.com/kubeflow/pipelines/pull/640         3646   \\n\",\n       \"\\n\",\n       \"    lastEditAge  updateAge  \\n\",\n       \"68        197.0        196  \\n\",\n       \"70        233.0        233  \\n\",\n       \"74        323.0        323  \\n\",\n       \"75        325.0        210  \\n\",\n       \"80        358.0        338  \\n\",\n       \"81        358.0        190  \\n\",\n       \"83        462.0        462  \\n\",\n       \"85        511.0        504  \\n\",\n       \"86        515.0        505  \\n\",\n       \"88        517.0        517  \\n\",\n       \"89        531.0        459  \\n\",\n       \"90        532.0        520  \\n\",\n       \"92        560.0        560  \\n\",\n       \"93        595.0        591  \\n\",\n       \"94        627.0        243  \\n\",\n       \"95        658.0        472  \\n\",\n       \"96        668.0        668  \\n\",\n       \"97        723.0        361  \\n\",\n       \"98        727.0         23  \\n\",\n       \"99        840.0        839  \\n\",\n       \"0         890.0        557  \\n\",\n       \"1         902.0        832  \\n\",\n       \"2         922.0        922  \\n\",\n       \"3        1007.0        158  \\n\",\n       \"4        1008.0        982  \\n\",\n       \"5        1055.0       1051  \\n\",\n       \"6        1056.0        835  \\n\",\n       \"7        1079.0         22  \\n\",\n       \"8        1154.0         19  \\n\",\n       \"9        1190.0        257  \\n\",\n       \"..          ...        ...  \\n\",\n       \"29       2049.0       1352  \\n\",\n       \"30       2052.0       1044  \\n\",\n       \"31       2084.0       2084  \\n\",\n       \"32       2195.0        670  \\n\",\n       \"33       2228.0       1036  \\n\",\n       \"34       2232.0       2197  \\n\",\n       \"35       2255.0         95  \\n\",\n       \"36       2274.0       2247  \\n\",\n       \"37       2316.0       1028  \\n\",\n       \"38       2413.0        492  \\n\",\n       \"39       2568.0       1024  \\n\",\n       \"40       2668.0       2547  \\n\",\n       \"41       2867.0       2398  \\n\",\n       \"42       2869.0       2267  \\n\",\n       \"43        500.0        356  \\n\",\n       \"44       2901.0       2396  \\n\",\n       \"45       3016.0        963  \\n\",\n       \"46       2791.0        909  \\n\",\n       \"47       3037.0       3014  \\n\",\n       \"48       3044.0        534  \\n\",\n       \"49       3066.0       2869  \\n\",\n       \"50        766.0        702  \\n\",\n       \"51       3164.0       1644  \\n\",\n       \"52       3167.0       1644  \\n\",\n       \"53       3355.0       2207  \\n\",\n       \"54       3394.0       2212  \\n\",\n       \"55       3406.0       3278  \\n\",\n       \"56       3501.0        382  \\n\",\n       \"57       3522.0       1005  \\n\",\n       \"58       3646.0       3503  \\n\",\n       \"\\n\",\n       \"[79 rows x 11 columns]\"\n      ]\n     },\n     \"execution_count\": 75,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"needs_attention = df[(df.creationAge > MAX_AGE) |\\n\",\n    \"                     ((df.updateAge > MAX_QUIET_TIME) & (df.lastEditAge > MAX_QUIET_TIME*1.0)) |\\n\",\n    \"                     ((df.updateAge > MAX_QUIET_TIME) &  (df.lastEditAge>df.updateAge*1.0)) |\\n\",\n    \"                     ((df.lastEditAge > MAX_QUIET_TIME*1.0) & (df.lastEditAge < df.updateAge*1.0))\\n\",\n    \"                    ]\\n\",\n    \"needs_attention\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# PRs which need authors' attentions \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 76,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>author</th>\\n\",\n       \"      <th>createdAt</th>\\n\",\n       \"      <th>editor</th>\\n\",\n       \"      <th>lastEditedAt</th>\\n\",\n       \"      <th>number</th>\\n\",\n       \"      <th>title</th>\\n\",\n       \"      <th>updatedAt</th>\\n\",\n       \"      <th>url</th>\\n\",\n       \"      <th>creationAge</th>\\n\",\n       \"      <th>lastEditAge</th>\\n\",\n       \"      <th>updateAge</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>68</th>\\n\",\n       \"      <td>{u'login': u'jeremiahkellick'}</td>\\n\",\n       \"      <td>2019-05-29 15:53:23+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-29 15:53:29+00:00</td>\\n\",\n       \"      <td>108</td>\\n\",\n       \"      <td>Add jeremiahkellick to org.yaml</td>\\n\",\n       \"      <td>2019-05-29 16:56:10+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/internal-acls/pull...</td>\\n\",\n       \"      <td>197</td>\\n\",\n       \"      <td>197.0</td>\\n\",\n       \"      <td>196</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>75</th>\\n\",\n       \"      <td>{u'login': u'gyliu513'}</td>\\n\",\n       \"      <td>2019-05-24 08:09:49+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-24 08:09:58+00:00</td>\\n\",\n       \"      <td>586</td>\\n\",\n       \"      <td>WIP Do not use /tmp/katib as host path.</td>\\n\",\n       \"      <td>2019-05-29 03:02:45+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/586</td>\\n\",\n       \"      <td>325</td>\\n\",\n       \"      <td>325.0</td>\\n\",\n       \"      <td>210</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>80</th>\\n\",\n       \"      <td>{u'login': u'M00nF1sh'}</td>\\n\",\n       \"      <td>2019-05-22 23:28:30+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-22 23:28:36+00:00</td>\\n\",\n       \"      <td>3340</td>\\n\",\n       \"      <td>templatize istio k8s version for aws</td>\\n\",\n       \"      <td>2019-05-23 18:45:23+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3340</td>\\n\",\n       \"      <td>358</td>\\n\",\n       \"      <td>358.0</td>\\n\",\n       \"      <td>338</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>81</th>\\n\",\n       \"      <td>{u'login': u'M00nF1sh'}</td>\\n\",\n       \"      <td>2019-05-22 22:32:49+00:00</td>\\n\",\n       \"      <td>{u'login': u'M00nF1sh'}</td>\\n\",\n       \"      <td>2019-05-22 22:35:54+00:00</td>\\n\",\n       \"      <td>3337</td>\\n\",\n       \"      <td>Update OWNERS file and make ingress configurab...</td>\\n\",\n       \"      <td>2019-05-29 23:15:34+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3337</td>\\n\",\n       \"      <td>359</td>\\n\",\n       \"      <td>358.0</td>\\n\",\n       \"      <td>190</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>85</th>\\n\",\n       \"      <td>{u'login': u'elikatsis'}</td>\\n\",\n       \"      <td>2019-05-16 13:49:06+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-16 13:49:17+00:00</td>\\n\",\n       \"      <td>3294</td>\\n\",\n       \"      <td>Add verb \\\"create\\\" for Secrets to ClusterRole \\\"...</td>\\n\",\n       \"      <td>2019-05-16 21:06:24+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3294</td>\\n\",\n       \"      <td>511</td>\\n\",\n       \"      <td>511.0</td>\\n\",\n       \"      <td>504</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>86</th>\\n\",\n       \"      <td>{u'login': u'chenhan1218'}</td>\\n\",\n       \"      <td>2019-05-16 10:17:15+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-16 10:17:21+00:00</td>\\n\",\n       \"      <td>3290</td>\\n\",\n       \"      <td>fix #2863, postpone check kubeflow ready</td>\\n\",\n       \"      <td>2019-05-16 19:49:23+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3290</td>\\n\",\n       \"      <td>515</td>\\n\",\n       \"      <td>515.0</td>\\n\",\n       \"      <td>505</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>89</th>\\n\",\n       \"      <td>{u'login': u'yanniszark'}</td>\\n\",\n       \"      <td>2019-05-15 17:43:21+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-15 17:43:27+00:00</td>\\n\",\n       \"      <td>3278</td>\\n\",\n       \"      <td>basic-auth: make kflogin work with NodePort</td>\\n\",\n       \"      <td>2019-05-18 17:53:55+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3278</td>\\n\",\n       \"      <td>531</td>\\n\",\n       \"      <td>531.0</td>\\n\",\n       \"      <td>459</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>90</th>\\n\",\n       \"      <td>{u'login': u'ryandawsonuk'}</td>\\n\",\n       \"      <td>2019-05-15 17:18:21+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-15 17:18:32+00:00</td>\\n\",\n       \"      <td>269</td>\\n\",\n       \"      <td>add rd@seldon.io to member_organizations.yaml</td>\\n\",\n       \"      <td>2019-05-16 05:09:11+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/community/pull/269</td>\\n\",\n       \"      <td>532</td>\\n\",\n       \"      <td>532.0</td>\\n\",\n       \"      <td>520</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>93</th>\\n\",\n       \"      <td>{u'login': u'gaocegege'}</td>\\n\",\n       \"      <td>2019-05-13 02:13:15+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-13 02:13:20+00:00</td>\\n\",\n       \"      <td>500</td>\\n\",\n       \"      <td>WIP feat(suggestion): Define new API for sugge...</td>\\n\",\n       \"      <td>2019-05-13 05:59:01+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/500</td>\\n\",\n       \"      <td>595</td>\\n\",\n       \"      <td>595.0</td>\\n\",\n       \"      <td>591</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>94</th>\\n\",\n       \"      <td>{u'login': u'achalshant'}</td>\\n\",\n       \"      <td>2019-05-11 17:45:09+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-11 17:45:15+00:00</td>\\n\",\n       \"      <td>498</td>\\n\",\n       \"      <td>Decoupling DB interface from katib manager</td>\\n\",\n       \"      <td>2019-05-27 18:16:21+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/498</td>\\n\",\n       \"      <td>627</td>\\n\",\n       \"      <td>627.0</td>\\n\",\n       \"      <td>243</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>95</th>\\n\",\n       \"      <td>{u'login': u'solovyevt'}</td>\\n\",\n       \"      <td>2019-05-10 11:15:12+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-10 11:15:18+00:00</td>\\n\",\n       \"      <td>695</td>\\n\",\n       \"      <td>update Getting Started / Kubfelow on Kubernete...</td>\\n\",\n       \"      <td>2019-05-18 05:08:50+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/website/pull/695</td>\\n\",\n       \"      <td>658</td>\\n\",\n       \"      <td>658.0</td>\\n\",\n       \"      <td>472</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>97</th>\\n\",\n       \"      <td>{u'login': u'rileyjbauer'}</td>\\n\",\n       \"      <td>2019-05-07 17:40:05+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-07 17:40:13+00:00</td>\\n\",\n       \"      <td>1294</td>\\n\",\n       \"      <td>Correct input height</td>\\n\",\n       \"      <td>2019-05-22 20:24:38+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1294</td>\\n\",\n       \"      <td>723</td>\\n\",\n       \"      <td>723.0</td>\\n\",\n       \"      <td>361</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>99</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-05-02 21:26:09+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-02 21:26:20+00:00</td>\\n\",\n       \"      <td>3179</td>\\n\",\n       \"      <td>Update Pipelines to version 0.1.18 (#3121)</td>\\n\",\n       \"      <td>2019-05-02 22:17:52+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3179</td>\\n\",\n       \"      <td>840</td>\\n\",\n       \"      <td>840.0</td>\\n\",\n       \"      <td>839</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>{u'login': u'cliveseldon'}</td>\\n\",\n       \"      <td>2019-04-30 18:49:30+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-30 18:49:37+00:00</td>\\n\",\n       \"      <td>36</td>\\n\",\n       \"      <td>add seldon</td>\\n\",\n       \"      <td>2019-05-14 15:55:27+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/manifests/pull/36</td>\\n\",\n       \"      <td>890</td>\\n\",\n       \"      <td>890.0</td>\\n\",\n       \"      <td>557</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>{u'login': u'animeshsingh'}</td>\\n\",\n       \"      <td>2019-04-30 07:04:30+00:00</td>\\n\",\n       \"      <td>{u'login': u'animeshsingh'}</td>\\n\",\n       \"      <td>2019-04-30 07:19:09+00:00</td>\\n\",\n       \"      <td>1264</td>\\n\",\n       \"      <td>updating components and samples owners file</td>\\n\",\n       \"      <td>2019-05-03 05:13:38+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1264</td>\\n\",\n       \"      <td>902</td>\\n\",\n       \"      <td>902.0</td>\\n\",\n       \"      <td>832</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>{u'login': u'lluunn'}</td>\\n\",\n       \"      <td>2019-04-25 21:16:54+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-25 21:17:06+00:00</td>\\n\",\n       \"      <td>3114</td>\\n\",\n       \"      <td>WIP don't review</td>\\n\",\n       \"      <td>2019-04-26 23:16:24+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3114</td>\\n\",\n       \"      <td>1008</td>\\n\",\n       \"      <td>1008.0</td>\\n\",\n       \"      <td>982</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>{u'login': u'rohithreddy'}</td>\\n\",\n       \"      <td>2019-04-23 22:23:26+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-23 22:23:33+00:00</td>\\n\",\n       \"      <td>3089</td>\\n\",\n       \"      <td>Add emacs package to the Jupyter Image</td>\\n\",\n       \"      <td>2019-04-24 02:06:01+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3089</td>\\n\",\n       \"      <td>1055</td>\\n\",\n       \"      <td>1055.0</td>\\n\",\n       \"      <td>1051</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>{u'login': u'rileyjbauer'}</td>\\n\",\n       \"      <td>2019-04-23 21:23:26+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-23 21:23:32+00:00</td>\\n\",\n       \"      <td>1208</td>\\n\",\n       \"      <td>[WIP] Initial attempt to migrate from react-sc...</td>\\n\",\n       \"      <td>2019-05-03 01:52:17+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1208</td>\\n\",\n       \"      <td>1056</td>\\n\",\n       \"      <td>1056.0</td>\\n\",\n       \"      <td>835</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>{u'login': u'wukong1992'}</td>\\n\",\n       \"      <td>2019-04-18 06:40:38+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-18 06:40:44+00:00</td>\\n\",\n       \"      <td>458</td>\\n\",\n       \"      <td>support request count</td>\\n\",\n       \"      <td>2019-05-27 04:14:53+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/458</td>\\n\",\n       \"      <td>1190</td>\\n\",\n       \"      <td>1190.0</td>\\n\",\n       \"      <td>257</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>{u'login': u'royxue'}</td>\\n\",\n       \"      <td>2019-04-17 09:01:29+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-17 09:01:38+00:00</td>\\n\",\n       \"      <td>3040</td>\\n\",\n       \"      <td>Add KUBEFLOW_KS_API_SPEC env variable</td>\\n\",\n       \"      <td>2019-04-18 09:21:32+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3040</td>\\n\",\n       \"      <td>1212</td>\\n\",\n       \"      <td>1212.0</td>\\n\",\n       \"      <td>1188</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>{u'login': u'stpabhi'}</td>\\n\",\n       \"      <td>2019-04-17 05:58:06+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-17 05:58:15+00:00</td>\\n\",\n       \"      <td>3039</td>\\n\",\n       \"      <td>Update profile readme according to golang prof...</td>\\n\",\n       \"      <td>2019-05-19 00:52:06+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3039</td>\\n\",\n       \"      <td>1215</td>\\n\",\n       \"      <td>1215.0</td>\\n\",\n       \"      <td>452</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>{u'login': u'mnmainguy'}</td>\\n\",\n       \"      <td>2019-04-17 00:54:15+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-17 00:54:20+00:00</td>\\n\",\n       \"      <td>543</td>\\n\",\n       \"      <td>Enhanced readme for MNIST example to include w...</td>\\n\",\n       \"      <td>2019-04-18 22:38:37+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/examples/pull/543</td>\\n\",\n       \"      <td>1220</td>\\n\",\n       \"      <td>1220.0</td>\\n\",\n       \"      <td>1174</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>{u'login': u'animeshsingh'}</td>\\n\",\n       \"      <td>2019-04-16 02:47:59+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-16 02:48:08+00:00</td>\\n\",\n       \"      <td>12</td>\\n\",\n       \"      <td>adding animeshsingh as reviewer</td>\\n\",\n       \"      <td>2019-04-17 01:44:39+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/metadata/pull/12</td>\\n\",\n       \"      <td>1242</td>\\n\",\n       \"      <td>1242.0</td>\\n\",\n       \"      <td>1219</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>{u'login': u'hamelsmu'}</td>\\n\",\n       \"      <td>2019-04-13 20:08:28+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-13 20:08:34+00:00</td>\\n\",\n       \"      <td>256</td>\\n\",\n       \"      <td>Patch 3</td>\\n\",\n       \"      <td>2019-04-13 20:50:48+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/community/pull/256</td>\\n\",\n       \"      <td>1297</td>\\n\",\n       \"      <td>1297.0</td>\\n\",\n       \"      <td>1296</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-04-11 22:46:27+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-11 22:46:32+00:00</td>\\n\",\n       \"      <td>1145</td>\\n\",\n       \"      <td>[WIP]Reduce noise in Prow tests</td>\\n\",\n       \"      <td>2019-04-23 21:04:31+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1145</td>\\n\",\n       \"      <td>1342</td>\\n\",\n       \"      <td>1342.0</td>\\n\",\n       \"      <td>1056</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>{u'login': u'mrkm4ntr'}</td>\\n\",\n       \"      <td>2019-04-10 05:34:41+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-10 05:34:46+00:00</td>\\n\",\n       \"      <td>2987</td>\\n\",\n       \"      <td>Add model status endpoint to http-proxy</td>\\n\",\n       \"      <td>2019-04-12 02:15:46+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/2987</td>\\n\",\n       \"      <td>1384</td>\\n\",\n       \"      <td>1384.0</td>\\n\",\n       \"      <td>1339</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-04-10 01:41:04+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-10 01:41:09+00:00</td>\\n\",\n       \"      <td>1125</td>\\n\",\n       \"      <td>Preserving component spec on ContainerOp</td>\\n\",\n       \"      <td>2019-05-03 20:16:12+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1125</td>\\n\",\n       \"      <td>1387</td>\\n\",\n       \"      <td>1387.0</td>\\n\",\n       \"      <td>817</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>24</th>\\n\",\n       \"      <td>{u'login': u'Akado2009'}</td>\\n\",\n       \"      <td>2019-03-26 03:28:20+00:00</td>\\n\",\n       \"      <td>{u'login': u'Akado2009'}</td>\\n\",\n       \"      <td>2019-03-27 01:08:02+00:00</td>\\n\",\n       \"      <td>438</td>\\n\",\n       \"      <td>WIP: New UI</td>\\n\",\n       \"      <td>2019-04-25 23:44:58+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/438</td>\\n\",\n       \"      <td>1746</td>\\n\",\n       \"      <td>1724.0</td>\\n\",\n       \"      <td>1005</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>27</th>\\n\",\n       \"      <td>{u'login': u'IronPan'}</td>\\n\",\n       \"      <td>2019-03-20 17:43:22+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-20 17:43:33+00:00</td>\\n\",\n       \"      <td>2746</td>\\n\",\n       \"      <td>add proxy component to ksonnet registry</td>\\n\",\n       \"      <td>2019-05-16 03:19:38+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/2746</td>\\n\",\n       \"      <td>1875</td>\\n\",\n       \"      <td>1875.0</td>\\n\",\n       \"      <td>522</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>28</th>\\n\",\n       \"      <td>{u'login': u'jdplatt'}</td>\\n\",\n       \"      <td>2019-03-16 19:59:45+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-16 19:59:51+00:00</td>\\n\",\n       \"      <td>435</td>\\n\",\n       \"      <td>Python migration</td>\\n\",\n       \"      <td>2019-05-14 08:00:44+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/435</td>\\n\",\n       \"      <td>1969</td>\\n\",\n       \"      <td>1969.0</td>\\n\",\n       \"      <td>565</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>{u'login': u'zionwu'}</td>\\n\",\n       \"      <td>2019-03-13 12:20:46+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-13 12:20:52+00:00</td>\\n\",\n       \"      <td>959</td>\\n\",\n       \"      <td>Delete pod on lost node</td>\\n\",\n       \"      <td>2019-04-11 13:30:29+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/tf-operator/pull/959</td>\\n\",\n       \"      <td>2049</td>\\n\",\n       \"      <td>2049.0</td>\\n\",\n       \"      <td>1352</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>{u'login': u'dreamryx'}</td>\\n\",\n       \"      <td>2019-03-13 08:49:35+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-13 08:49:40+00:00</td>\\n\",\n       \"      <td>430</td>\\n\",\n       \"      <td>update dockerfile for power build</td>\\n\",\n       \"      <td>2019-04-24 09:02:36+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/430</td>\\n\",\n       \"      <td>2052</td>\\n\",\n       \"      <td>2052.0</td>\\n\",\n       \"      <td>1044</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>32</th>\\n\",\n       \"      <td>{u'login': u'avdaredevil'}</td>\\n\",\n       \"      <td>2019-03-07 09:39:43+00:00</td>\\n\",\n       \"      <td>{u'login': u'avdaredevil'}</td>\\n\",\n       \"      <td>2019-03-07 09:47:58+00:00</td>\\n\",\n       \"      <td>2650</td>\\n\",\n       \"      <td>[Windows] Windows Scripts for Setting up Kubeflow</td>\\n\",\n       \"      <td>2019-05-09 23:03:20+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/2650</td>\\n\",\n       \"      <td>2195</td>\\n\",\n       \"      <td>2195.0</td>\\n\",\n       \"      <td>670</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>33</th>\\n\",\n       \"      <td>{u'login': u'IronPan'}</td>\\n\",\n       \"      <td>2019-03-06 00:39:35+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-06 00:39:42+00:00</td>\\n\",\n       \"      <td>918</td>\\n\",\n       \"      <td>Add test suit to upgrade pipeline</td>\\n\",\n       \"      <td>2019-04-24 17:19:34+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/918</td>\\n\",\n       \"      <td>2228</td>\\n\",\n       \"      <td>2228.0</td>\\n\",\n       \"      <td>1036</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>34</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-03-05 21:33:50+00:00</td>\\n\",\n       \"      <td>{u'login': u'IronPan'}</td>\\n\",\n       \"      <td>2019-03-05 21:33:58+00:00</td>\\n\",\n       \"      <td>912</td>\\n\",\n       \"      <td>[WIP]Improved the sample Keras classifier comp...</td>\\n\",\n       \"      <td>2019-03-07 07:59:06+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/912</td>\\n\",\n       \"      <td>2232</td>\\n\",\n       \"      <td>2232.0</td>\\n\",\n       \"      <td>2197</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>36</th>\\n\",\n       \"      <td>{u'login': u'toshiiw'}</td>\\n\",\n       \"      <td>2019-03-04 02:42:22+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-04 02:42:27+00:00</td>\\n\",\n       \"      <td>417</td>\\n\",\n       \"      <td>Print verbose error when studyjob updates fail</td>\\n\",\n       \"      <td>2019-03-05 06:08:42+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/417</td>\\n\",\n       \"      <td>2274</td>\\n\",\n       \"      <td>2274.0</td>\\n\",\n       \"      <td>2247</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>37</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-03-01 23:16:42+00:00</td>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-03-02 08:44:49+00:00</td>\\n\",\n       \"      <td>898</td>\\n\",\n       \"      <td>Collecting coverage when running python tests</td>\\n\",\n       \"      <td>2019-04-25 00:56:00+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/898</td>\\n\",\n       \"      <td>2326</td>\\n\",\n       \"      <td>2316.0</td>\\n\",\n       \"      <td>1028</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>38</th>\\n\",\n       \"      <td>{u'login': u'toshiiw'}</td>\\n\",\n       \"      <td>2019-02-26 08:04:33+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-26 08:04:38+00:00</td>\\n\",\n       \"      <td>411</td>\\n\",\n       \"      <td>Retry studyjobcontroller</td>\\n\",\n       \"      <td>2019-05-17 09:25:27+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/411</td>\\n\",\n       \"      <td>2413</td>\\n\",\n       \"      <td>2413.0</td>\\n\",\n       \"      <td>492</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>39</th>\\n\",\n       \"      <td>{u'login': u'knkski'}</td>\\n\",\n       \"      <td>2019-02-19 21:27:13+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-19 21:27:22+00:00</td>\\n\",\n       \"      <td>2508</td>\\n\",\n       \"      <td>Update kubespawner property name</td>\\n\",\n       \"      <td>2019-04-25 05:02:36+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/2508</td>\\n\",\n       \"      <td>2568</td>\\n\",\n       \"      <td>2568.0</td>\\n\",\n       \"      <td>1024</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>40</th>\\n\",\n       \"      <td>{u'login': u'jayunit100'}</td>\\n\",\n       \"      <td>2019-02-15 16:59:16+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-15 16:59:28+00:00</td>\\n\",\n       \"      <td>385</td>\\n\",\n       \"      <td>Vendoring</td>\\n\",\n       \"      <td>2019-02-20 17:47:08+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/385</td>\\n\",\n       \"      <td>2668</td>\\n\",\n       \"      <td>2668.0</td>\\n\",\n       \"      <td>2547</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>41</th>\\n\",\n       \"      <td>{u'login': u'yehiyam'}</td>\\n\",\n       \"      <td>2019-02-07 10:33:40+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-07 10:33:49+00:00</td>\\n\",\n       \"      <td>502</td>\\n\",\n       \"      <td>fix typo</td>\\n\",\n       \"      <td>2019-02-26 23:12:45+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/examples/pull/502</td>\\n\",\n       \"      <td>2867</td>\\n\",\n       \"      <td>2867.0</td>\\n\",\n       \"      <td>2398</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>42</th>\\n\",\n       \"      <td>{u'login': u'YujiOshima'}</td>\\n\",\n       \"      <td>2019-02-07 08:14:16+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-07 08:14:22+00:00</td>\\n\",\n       \"      <td>362</td>\\n\",\n       \"      <td>DB: add studyjob table and extend worker table</td>\\n\",\n       \"      <td>2019-03-04 09:53:25+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/362</td>\\n\",\n       \"      <td>2869</td>\\n\",\n       \"      <td>2869.0</td>\\n\",\n       \"      <td>2267</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>43</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-02-07 07:30:11+00:00</td>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-05-17 01:16:28+00:00</td>\\n\",\n       \"      <td>791</td>\\n\",\n       \"      <td>SDK - Added support for raw input artifact arg...</td>\\n\",\n       \"      <td>2019-05-23 01:24:26+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/791</td>\\n\",\n       \"      <td>2870</td>\\n\",\n       \"      <td>500.0</td>\\n\",\n       \"      <td>356</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>44</th>\\n\",\n       \"      <td>{u'login': u'hongye-sun'}</td>\\n\",\n       \"      <td>2019-02-06 00:18:49+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-06 00:18:54+00:00</td>\\n\",\n       \"      <td>787</td>\\n\",\n       \"      <td>Add GPU test back</td>\\n\",\n       \"      <td>2019-02-27 00:59:08+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/787</td>\\n\",\n       \"      <td>2901</td>\\n\",\n       \"      <td>2901.0</td>\\n\",\n       \"      <td>2396</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>45</th>\\n\",\n       \"      <td>{u'login': u'DmitryBe'}</td>\\n\",\n       \"      <td>2019-02-01 05:22:32+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-01 05:22:36+00:00</td>\\n\",\n       \"      <td>766</td>\\n\",\n       \"      <td>Added AWS S3 support for storing artefacts.</td>\\n\",\n       \"      <td>2019-04-27 18:19:11+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/766</td>\\n\",\n       \"      <td>3016</td>\\n\",\n       \"      <td>3016.0</td>\\n\",\n       \"      <td>963</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>46</th>\\n\",\n       \"      <td>{u'login': u'DmitryBe'}</td>\\n\",\n       \"      <td>2019-02-01 05:18:20+00:00</td>\\n\",\n       \"      <td>{u'login': u'DmitryBe'}</td>\\n\",\n       \"      <td>2019-02-10 14:33:00+00:00</td>\\n\",\n       \"      <td>765</td>\\n\",\n       \"      <td>Added configArtifactRepository method into `sd...</td>\\n\",\n       \"      <td>2019-04-30 00:35:10+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/765</td>\\n\",\n       \"      <td>3016</td>\\n\",\n       \"      <td>2791.0</td>\\n\",\n       \"      <td>909</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>47</th>\\n\",\n       \"      <td>{u'login': u'toshiiw'}</td>\\n\",\n       \"      <td>2019-01-31 07:51:52+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-31 07:51:57+00:00</td>\\n\",\n       \"      <td>357</td>\\n\",\n       \"      <td>DNM: check if kubeconfig is sane</td>\\n\",\n       \"      <td>2019-02-01 07:07:05+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/357</td>\\n\",\n       \"      <td>3037</td>\\n\",\n       \"      <td>3037.0</td>\\n\",\n       \"      <td>3014</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>48</th>\\n\",\n       \"      <td>{u'login': u'TimZaman'}</td>\\n\",\n       \"      <td>2019-01-31 00:37:31+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-31 00:37:40+00:00</td>\\n\",\n       \"      <td>2354</td>\\n\",\n       \"      <td>Fix minikube setup script's df inference</td>\\n\",\n       \"      <td>2019-05-15 15:02:49+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/2354</td>\\n\",\n       \"      <td>3044</td>\\n\",\n       \"      <td>3044.0</td>\\n\",\n       \"      <td>534</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>49</th>\\n\",\n       \"      <td>{u'login': u'YujiOshima'}</td>\\n\",\n       \"      <td>2019-01-30 02:59:51+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-30 03:00:01+00:00</td>\\n\",\n       \"      <td>352</td>\\n\",\n       \"      <td>Manual suggest</td>\\n\",\n       \"      <td>2019-02-07 08:17:41+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/352</td>\\n\",\n       \"      <td>3066</td>\\n\",\n       \"      <td>3066.0</td>\\n\",\n       \"      <td>2869</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>50</th>\\n\",\n       \"      <td>{u'login': u'dsdinter'}</td>\\n\",\n       \"      <td>2019-01-27 18:37:42+00:00</td>\\n\",\n       \"      <td>{u'login': u'dsdinter'}</td>\\n\",\n       \"      <td>2019-05-05 23:01:29+00:00</td>\\n\",\n       \"      <td>490</td>\\n\",\n       \"      <td>[pytorch_mnist] Automate image build</td>\\n\",\n       \"      <td>2019-05-08 15:11:21+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/examples/pull/490</td>\\n\",\n       \"      <td>3122</td>\\n\",\n       \"      <td>766.0</td>\\n\",\n       \"      <td>702</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>51</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-21 07:19:10+00:00</td>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-26 01:19:56+00:00</td>\\n\",\n       \"      <td>713</td>\\n\",\n       \"      <td>SDK/Components - Refactoring: Improved contai...</td>\\n\",\n       \"      <td>2019-03-30 08:36:35+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/713</td>\\n\",\n       \"      <td>3278</td>\\n\",\n       \"      <td>3164.0</td>\\n\",\n       \"      <td>1644</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>52</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-21 07:17:53+00:00</td>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-25 21:37:51+00:00</td>\\n\",\n       \"      <td>712</td>\\n\",\n       \"      <td>SDK/Components - Only convert TaskSpec to Cont...</td>\\n\",\n       \"      <td>2019-03-30 08:38:57+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/712</td>\\n\",\n       \"      <td>3278</td>\\n\",\n       \"      <td>3167.0</td>\\n\",\n       \"      <td>1644</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>53</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-18 02:09:34+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-18 02:09:39+00:00</td>\\n\",\n       \"      <td>702</td>\\n\",\n       \"      <td>SDK/Component - Added the ComponentReference.s...</td>\\n\",\n       \"      <td>2019-03-06 21:50:37+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/702</td>\\n\",\n       \"      <td>3355</td>\\n\",\n       \"      <td>3355.0</td>\\n\",\n       \"      <td>2207</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>54</th>\\n\",\n       \"      <td>{u'login': u'govindKAG'}</td>\\n\",\n       \"      <td>2019-01-16 11:31:09+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-16 11:31:14+00:00</td>\\n\",\n       \"      <td>481</td>\\n\",\n       \"      <td>reduced number of layers</td>\\n\",\n       \"      <td>2019-03-06 17:21:10+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/examples/pull/481</td>\\n\",\n       \"      <td>3394</td>\\n\",\n       \"      <td>3394.0</td>\\n\",\n       \"      <td>2212</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>55</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-15 23:02:07+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-15 23:02:13+00:00</td>\\n\",\n       \"      <td>688</td>\\n\",\n       \"      <td>SDK/Components - Renamed fileOutputs to unconf...</td>\\n\",\n       \"      <td>2019-01-21 07:14:25+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/688</td>\\n\",\n       \"      <td>3406</td>\\n\",\n       \"      <td>3406.0</td>\\n\",\n       \"      <td>3278</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>56</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-11 19:58:00+00:00</td>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-12 00:04:05+00:00</td>\\n\",\n       \"      <td>669</td>\\n\",\n       \"      <td>SDK/Components  - Added Json Schema spec for t...</td>\\n\",\n       \"      <td>2019-05-21 23:19:57+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/669</td>\\n\",\n       \"      <td>3505</td>\\n\",\n       \"      <td>3501.0</td>\\n\",\n       \"      <td>382</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>57</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-11 03:27:40+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-11 03:27:45+00:00</td>\\n\",\n       \"      <td>668</td>\\n\",\n       \"      <td>SDK - Update minimum Python version to 3.6</td>\\n\",\n       \"      <td>2019-04-25 23:41:41+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/668</td>\\n\",\n       \"      <td>3522</td>\\n\",\n       \"      <td>3522.0</td>\\n\",\n       \"      <td>1005</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>58</th>\\n\",\n       \"      <td>{u'login': u'neuromage'}</td>\\n\",\n       \"      <td>2019-01-05 22:53:33+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-05 22:53:38+00:00</td>\\n\",\n       \"      <td>640</td>\\n\",\n       \"      <td>[WIP] Run Bazel build/tests as part of Travis CI</td>\\n\",\n       \"      <td>2019-01-11 21:40:24+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/640</td>\\n\",\n       \"      <td>3646</td>\\n\",\n       \"      <td>3646.0</td>\\n\",\n       \"      <td>3503</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"                            author                 createdAt  \\\\\\n\",\n       \"68  {u'login': u'jeremiahkellick'} 2019-05-29 15:53:23+00:00   \\n\",\n       \"75         {u'login': u'gyliu513'} 2019-05-24 08:09:49+00:00   \\n\",\n       \"80         {u'login': u'M00nF1sh'} 2019-05-22 23:28:30+00:00   \\n\",\n       \"81         {u'login': u'M00nF1sh'} 2019-05-22 22:32:49+00:00   \\n\",\n       \"85        {u'login': u'elikatsis'} 2019-05-16 13:49:06+00:00   \\n\",\n       \"86      {u'login': u'chenhan1218'} 2019-05-16 10:17:15+00:00   \\n\",\n       \"89       {u'login': u'yanniszark'} 2019-05-15 17:43:21+00:00   \\n\",\n       \"90     {u'login': u'ryandawsonuk'} 2019-05-15 17:18:21+00:00   \\n\",\n       \"93        {u'login': u'gaocegege'} 2019-05-13 02:13:15+00:00   \\n\",\n       \"94       {u'login': u'achalshant'} 2019-05-11 17:45:09+00:00   \\n\",\n       \"95        {u'login': u'solovyevt'} 2019-05-10 11:15:12+00:00   \\n\",\n       \"97      {u'login': u'rileyjbauer'} 2019-05-07 17:40:05+00:00   \\n\",\n       \"99          {u'login': u'Ark-kun'} 2019-05-02 21:26:09+00:00   \\n\",\n       \"0       {u'login': u'cliveseldon'} 2019-04-30 18:49:30+00:00   \\n\",\n       \"1      {u'login': u'animeshsingh'} 2019-04-30 07:04:30+00:00   \\n\",\n       \"4            {u'login': u'lluunn'} 2019-04-25 21:16:54+00:00   \\n\",\n       \"5       {u'login': u'rohithreddy'} 2019-04-23 22:23:26+00:00   \\n\",\n       \"6       {u'login': u'rileyjbauer'} 2019-04-23 21:23:26+00:00   \\n\",\n       \"9        {u'login': u'wukong1992'} 2019-04-18 06:40:38+00:00   \\n\",\n       \"12           {u'login': u'royxue'} 2019-04-17 09:01:29+00:00   \\n\",\n       \"13          {u'login': u'stpabhi'} 2019-04-17 05:58:06+00:00   \\n\",\n       \"14        {u'login': u'mnmainguy'} 2019-04-17 00:54:15+00:00   \\n\",\n       \"15     {u'login': u'animeshsingh'} 2019-04-16 02:47:59+00:00   \\n\",\n       \"17         {u'login': u'hamelsmu'} 2019-04-13 20:08:28+00:00   \\n\",\n       \"18          {u'login': u'Ark-kun'} 2019-04-11 22:46:27+00:00   \\n\",\n       \"19         {u'login': u'mrkm4ntr'} 2019-04-10 05:34:41+00:00   \\n\",\n       \"20          {u'login': u'Ark-kun'} 2019-04-10 01:41:04+00:00   \\n\",\n       \"24        {u'login': u'Akado2009'} 2019-03-26 03:28:20+00:00   \\n\",\n       \"27          {u'login': u'IronPan'} 2019-03-20 17:43:22+00:00   \\n\",\n       \"28          {u'login': u'jdplatt'} 2019-03-16 19:59:45+00:00   \\n\",\n       \"29           {u'login': u'zionwu'} 2019-03-13 12:20:46+00:00   \\n\",\n       \"30         {u'login': u'dreamryx'} 2019-03-13 08:49:35+00:00   \\n\",\n       \"32      {u'login': u'avdaredevil'} 2019-03-07 09:39:43+00:00   \\n\",\n       \"33          {u'login': u'IronPan'} 2019-03-06 00:39:35+00:00   \\n\",\n       \"34          {u'login': u'Ark-kun'} 2019-03-05 21:33:50+00:00   \\n\",\n       \"36          {u'login': u'toshiiw'} 2019-03-04 02:42:22+00:00   \\n\",\n       \"37          {u'login': u'Ark-kun'} 2019-03-01 23:16:42+00:00   \\n\",\n       \"38          {u'login': u'toshiiw'} 2019-02-26 08:04:33+00:00   \\n\",\n       \"39           {u'login': u'knkski'} 2019-02-19 21:27:13+00:00   \\n\",\n       \"40       {u'login': u'jayunit100'} 2019-02-15 16:59:16+00:00   \\n\",\n       \"41          {u'login': u'yehiyam'} 2019-02-07 10:33:40+00:00   \\n\",\n       \"42       {u'login': u'YujiOshima'} 2019-02-07 08:14:16+00:00   \\n\",\n       \"43          {u'login': u'Ark-kun'} 2019-02-07 07:30:11+00:00   \\n\",\n       \"44       {u'login': u'hongye-sun'} 2019-02-06 00:18:49+00:00   \\n\",\n       \"45         {u'login': u'DmitryBe'} 2019-02-01 05:22:32+00:00   \\n\",\n       \"46         {u'login': u'DmitryBe'} 2019-02-01 05:18:20+00:00   \\n\",\n       \"47          {u'login': u'toshiiw'} 2019-01-31 07:51:52+00:00   \\n\",\n       \"48         {u'login': u'TimZaman'} 2019-01-31 00:37:31+00:00   \\n\",\n       \"49       {u'login': u'YujiOshima'} 2019-01-30 02:59:51+00:00   \\n\",\n       \"50         {u'login': u'dsdinter'} 2019-01-27 18:37:42+00:00   \\n\",\n       \"51          {u'login': u'Ark-kun'} 2019-01-21 07:19:10+00:00   \\n\",\n       \"52          {u'login': u'Ark-kun'} 2019-01-21 07:17:53+00:00   \\n\",\n       \"53          {u'login': u'Ark-kun'} 2019-01-18 02:09:34+00:00   \\n\",\n       \"54        {u'login': u'govindKAG'} 2019-01-16 11:31:09+00:00   \\n\",\n       \"55          {u'login': u'Ark-kun'} 2019-01-15 23:02:07+00:00   \\n\",\n       \"56          {u'login': u'Ark-kun'} 2019-01-11 19:58:00+00:00   \\n\",\n       \"57          {u'login': u'Ark-kun'} 2019-01-11 03:27:40+00:00   \\n\",\n       \"58        {u'login': u'neuromage'} 2019-01-05 22:53:33+00:00   \\n\",\n       \"\\n\",\n       \"                         editor              lastEditedAt  number  \\\\\\n\",\n       \"68         {u'login': u'jlewi'} 2019-05-29 15:53:29+00:00     108   \\n\",\n       \"75         {u'login': u'jlewi'} 2019-05-24 08:09:58+00:00     586   \\n\",\n       \"80         {u'login': u'jlewi'} 2019-05-22 23:28:36+00:00    3340   \\n\",\n       \"81      {u'login': u'M00nF1sh'} 2019-05-22 22:35:54+00:00    3337   \\n\",\n       \"85         {u'login': u'jlewi'} 2019-05-16 13:49:17+00:00    3294   \\n\",\n       \"86         {u'login': u'jlewi'} 2019-05-16 10:17:21+00:00    3290   \\n\",\n       \"89         {u'login': u'jlewi'} 2019-05-15 17:43:27+00:00    3278   \\n\",\n       \"90         {u'login': u'jlewi'} 2019-05-15 17:18:32+00:00     269   \\n\",\n       \"93         {u'login': u'jlewi'} 2019-05-13 02:13:20+00:00     500   \\n\",\n       \"94         {u'login': u'jlewi'} 2019-05-11 17:45:15+00:00     498   \\n\",\n       \"95         {u'login': u'jlewi'} 2019-05-10 11:15:18+00:00     695   \\n\",\n       \"97         {u'login': u'jlewi'} 2019-05-07 17:40:13+00:00    1294   \\n\",\n       \"99         {u'login': u'jlewi'} 2019-05-02 21:26:20+00:00    3179   \\n\",\n       \"0          {u'login': u'jlewi'} 2019-04-30 18:49:37+00:00      36   \\n\",\n       \"1   {u'login': u'animeshsingh'} 2019-04-30 07:19:09+00:00    1264   \\n\",\n       \"4          {u'login': u'jlewi'} 2019-04-25 21:17:06+00:00    3114   \\n\",\n       \"5          {u'login': u'jlewi'} 2019-04-23 22:23:33+00:00    3089   \\n\",\n       \"6          {u'login': u'jlewi'} 2019-04-23 21:23:32+00:00    1208   \\n\",\n       \"9          {u'login': u'jlewi'} 2019-04-18 06:40:44+00:00     458   \\n\",\n       \"12         {u'login': u'jlewi'} 2019-04-17 09:01:38+00:00    3040   \\n\",\n       \"13         {u'login': u'jlewi'} 2019-04-17 05:58:15+00:00    3039   \\n\",\n       \"14         {u'login': u'jlewi'} 2019-04-17 00:54:20+00:00     543   \\n\",\n       \"15         {u'login': u'jlewi'} 2019-04-16 02:48:08+00:00      12   \\n\",\n       \"17         {u'login': u'jlewi'} 2019-04-13 20:08:34+00:00     256   \\n\",\n       \"18         {u'login': u'jlewi'} 2019-04-11 22:46:32+00:00    1145   \\n\",\n       \"19         {u'login': u'jlewi'} 2019-04-10 05:34:46+00:00    2987   \\n\",\n       \"20         {u'login': u'jlewi'} 2019-04-10 01:41:09+00:00    1125   \\n\",\n       \"24     {u'login': u'Akado2009'} 2019-03-27 01:08:02+00:00     438   \\n\",\n       \"27         {u'login': u'jlewi'} 2019-03-20 17:43:33+00:00    2746   \\n\",\n       \"28         {u'login': u'jlewi'} 2019-03-16 19:59:51+00:00     435   \\n\",\n       \"29         {u'login': u'jlewi'} 2019-03-13 12:20:52+00:00     959   \\n\",\n       \"30         {u'login': u'jlewi'} 2019-03-13 08:49:40+00:00     430   \\n\",\n       \"32   {u'login': u'avdaredevil'} 2019-03-07 09:47:58+00:00    2650   \\n\",\n       \"33         {u'login': u'jlewi'} 2019-03-06 00:39:42+00:00     918   \\n\",\n       \"34       {u'login': u'IronPan'} 2019-03-05 21:33:58+00:00     912   \\n\",\n       \"36         {u'login': u'jlewi'} 2019-03-04 02:42:27+00:00     417   \\n\",\n       \"37       {u'login': u'Ark-kun'} 2019-03-02 08:44:49+00:00     898   \\n\",\n       \"38         {u'login': u'jlewi'} 2019-02-26 08:04:38+00:00     411   \\n\",\n       \"39         {u'login': u'jlewi'} 2019-02-19 21:27:22+00:00    2508   \\n\",\n       \"40         {u'login': u'jlewi'} 2019-02-15 16:59:28+00:00     385   \\n\",\n       \"41         {u'login': u'jlewi'} 2019-02-07 10:33:49+00:00     502   \\n\",\n       \"42         {u'login': u'jlewi'} 2019-02-07 08:14:22+00:00     362   \\n\",\n       \"43       {u'login': u'Ark-kun'} 2019-05-17 01:16:28+00:00     791   \\n\",\n       \"44         {u'login': u'jlewi'} 2019-02-06 00:18:54+00:00     787   \\n\",\n       \"45         {u'login': u'jlewi'} 2019-02-01 05:22:36+00:00     766   \\n\",\n       \"46      {u'login': u'DmitryBe'} 2019-02-10 14:33:00+00:00     765   \\n\",\n       \"47         {u'login': u'jlewi'} 2019-01-31 07:51:57+00:00     357   \\n\",\n       \"48         {u'login': u'jlewi'} 2019-01-31 00:37:40+00:00    2354   \\n\",\n       \"49         {u'login': u'jlewi'} 2019-01-30 03:00:01+00:00     352   \\n\",\n       \"50      {u'login': u'dsdinter'} 2019-05-05 23:01:29+00:00     490   \\n\",\n       \"51       {u'login': u'Ark-kun'} 2019-01-26 01:19:56+00:00     713   \\n\",\n       \"52       {u'login': u'Ark-kun'} 2019-01-25 21:37:51+00:00     712   \\n\",\n       \"53         {u'login': u'jlewi'} 2019-01-18 02:09:39+00:00     702   \\n\",\n       \"54         {u'login': u'jlewi'} 2019-01-16 11:31:14+00:00     481   \\n\",\n       \"55         {u'login': u'jlewi'} 2019-01-15 23:02:13+00:00     688   \\n\",\n       \"56       {u'login': u'Ark-kun'} 2019-01-12 00:04:05+00:00     669   \\n\",\n       \"57         {u'login': u'jlewi'} 2019-01-11 03:27:45+00:00     668   \\n\",\n       \"58         {u'login': u'jlewi'} 2019-01-05 22:53:38+00:00     640   \\n\",\n       \"\\n\",\n       \"                                                title  \\\\\\n\",\n       \"68                    Add jeremiahkellick to org.yaml   \\n\",\n       \"75            WIP Do not use /tmp/katib as host path.   \\n\",\n       \"80               templatize istio k8s version for aws   \\n\",\n       \"81  Update OWNERS file and make ingress configurab...   \\n\",\n       \"85  Add verb \\\"create\\\" for Secrets to ClusterRole \\\"...   \\n\",\n       \"86           fix #2863, postpone check kubeflow ready   \\n\",\n       \"89        basic-auth: make kflogin work with NodePort   \\n\",\n       \"90      add rd@seldon.io to member_organizations.yaml   \\n\",\n       \"93  WIP feat(suggestion): Define new API for sugge...   \\n\",\n       \"94         Decoupling DB interface from katib manager   \\n\",\n       \"95  update Getting Started / Kubfelow on Kubernete...   \\n\",\n       \"97                               Correct input height   \\n\",\n       \"99         Update Pipelines to version 0.1.18 (#3121)   \\n\",\n       \"0                                          add seldon   \\n\",\n       \"1         updating components and samples owners file   \\n\",\n       \"4                                    WIP don't review   \\n\",\n       \"5              Add emacs package to the Jupyter Image   \\n\",\n       \"6   [WIP] Initial attempt to migrate from react-sc...   \\n\",\n       \"9                               support request count   \\n\",\n       \"12              Add KUBEFLOW_KS_API_SPEC env variable   \\n\",\n       \"13  Update profile readme according to golang prof...   \\n\",\n       \"14  Enhanced readme for MNIST example to include w...   \\n\",\n       \"15                    adding animeshsingh as reviewer   \\n\",\n       \"17                                            Patch 3   \\n\",\n       \"18                    [WIP]Reduce noise in Prow tests   \\n\",\n       \"19            Add model status endpoint to http-proxy   \\n\",\n       \"20           Preserving component spec on ContainerOp   \\n\",\n       \"24                                        WIP: New UI   \\n\",\n       \"27            add proxy component to ksonnet registry   \\n\",\n       \"28                                   Python migration   \\n\",\n       \"29                            Delete pod on lost node   \\n\",\n       \"30                  update dockerfile for power build   \\n\",\n       \"32  [Windows] Windows Scripts for Setting up Kubeflow   \\n\",\n       \"33                  Add test suit to upgrade pipeline   \\n\",\n       \"34  [WIP]Improved the sample Keras classifier comp...   \\n\",\n       \"36     Print verbose error when studyjob updates fail   \\n\",\n       \"37      Collecting coverage when running python tests   \\n\",\n       \"38                           Retry studyjobcontroller   \\n\",\n       \"39                   Update kubespawner property name   \\n\",\n       \"40                                          Vendoring   \\n\",\n       \"41                                           fix typo   \\n\",\n       \"42     DB: add studyjob table and extend worker table   \\n\",\n       \"43  SDK - Added support for raw input artifact arg...   \\n\",\n       \"44                                  Add GPU test back   \\n\",\n       \"45        Added AWS S3 support for storing artefacts.   \\n\",\n       \"46  Added configArtifactRepository method into `sd...   \\n\",\n       \"47                   DNM: check if kubeconfig is sane   \\n\",\n       \"48           Fix minikube setup script's df inference   \\n\",\n       \"49                                     Manual suggest   \\n\",\n       \"50               [pytorch_mnist] Automate image build   \\n\",\n       \"51   SDK/Components - Refactoring: Improved contai...   \\n\",\n       \"52  SDK/Components - Only convert TaskSpec to Cont...   \\n\",\n       \"53  SDK/Component - Added the ComponentReference.s...   \\n\",\n       \"54                           reduced number of layers   \\n\",\n       \"55  SDK/Components - Renamed fileOutputs to unconf...   \\n\",\n       \"56  SDK/Components  - Added Json Schema spec for t...   \\n\",\n       \"57         SDK - Update minimum Python version to 3.6   \\n\",\n       \"58   [WIP] Run Bazel build/tests as part of Travis CI   \\n\",\n       \"\\n\",\n       \"                   updatedAt  \\\\\\n\",\n       \"68 2019-05-29 16:56:10+00:00   \\n\",\n       \"75 2019-05-29 03:02:45+00:00   \\n\",\n       \"80 2019-05-23 18:45:23+00:00   \\n\",\n       \"81 2019-05-29 23:15:34+00:00   \\n\",\n       \"85 2019-05-16 21:06:24+00:00   \\n\",\n       \"86 2019-05-16 19:49:23+00:00   \\n\",\n       \"89 2019-05-18 17:53:55+00:00   \\n\",\n       \"90 2019-05-16 05:09:11+00:00   \\n\",\n       \"93 2019-05-13 05:59:01+00:00   \\n\",\n       \"94 2019-05-27 18:16:21+00:00   \\n\",\n       \"95 2019-05-18 05:08:50+00:00   \\n\",\n       \"97 2019-05-22 20:24:38+00:00   \\n\",\n       \"99 2019-05-02 22:17:52+00:00   \\n\",\n       \"0  2019-05-14 15:55:27+00:00   \\n\",\n       \"1  2019-05-03 05:13:38+00:00   \\n\",\n       \"4  2019-04-26 23:16:24+00:00   \\n\",\n       \"5  2019-04-24 02:06:01+00:00   \\n\",\n       \"6  2019-05-03 01:52:17+00:00   \\n\",\n       \"9  2019-05-27 04:14:53+00:00   \\n\",\n       \"12 2019-04-18 09:21:32+00:00   \\n\",\n       \"13 2019-05-19 00:52:06+00:00   \\n\",\n       \"14 2019-04-18 22:38:37+00:00   \\n\",\n       \"15 2019-04-17 01:44:39+00:00   \\n\",\n       \"17 2019-04-13 20:50:48+00:00   \\n\",\n       \"18 2019-04-23 21:04:31+00:00   \\n\",\n       \"19 2019-04-12 02:15:46+00:00   \\n\",\n       \"20 2019-05-03 20:16:12+00:00   \\n\",\n       \"24 2019-04-25 23:44:58+00:00   \\n\",\n       \"27 2019-05-16 03:19:38+00:00   \\n\",\n       \"28 2019-05-14 08:00:44+00:00   \\n\",\n       \"29 2019-04-11 13:30:29+00:00   \\n\",\n       \"30 2019-04-24 09:02:36+00:00   \\n\",\n       \"32 2019-05-09 23:03:20+00:00   \\n\",\n       \"33 2019-04-24 17:19:34+00:00   \\n\",\n       \"34 2019-03-07 07:59:06+00:00   \\n\",\n       \"36 2019-03-05 06:08:42+00:00   \\n\",\n       \"37 2019-04-25 00:56:00+00:00   \\n\",\n       \"38 2019-05-17 09:25:27+00:00   \\n\",\n       \"39 2019-04-25 05:02:36+00:00   \\n\",\n       \"40 2019-02-20 17:47:08+00:00   \\n\",\n       \"41 2019-02-26 23:12:45+00:00   \\n\",\n       \"42 2019-03-04 09:53:25+00:00   \\n\",\n       \"43 2019-05-23 01:24:26+00:00   \\n\",\n       \"44 2019-02-27 00:59:08+00:00   \\n\",\n       \"45 2019-04-27 18:19:11+00:00   \\n\",\n       \"46 2019-04-30 00:35:10+00:00   \\n\",\n       \"47 2019-02-01 07:07:05+00:00   \\n\",\n       \"48 2019-05-15 15:02:49+00:00   \\n\",\n       \"49 2019-02-07 08:17:41+00:00   \\n\",\n       \"50 2019-05-08 15:11:21+00:00   \\n\",\n       \"51 2019-03-30 08:36:35+00:00   \\n\",\n       \"52 2019-03-30 08:38:57+00:00   \\n\",\n       \"53 2019-03-06 21:50:37+00:00   \\n\",\n       \"54 2019-03-06 17:21:10+00:00   \\n\",\n       \"55 2019-01-21 07:14:25+00:00   \\n\",\n       \"56 2019-05-21 23:19:57+00:00   \\n\",\n       \"57 2019-04-25 23:41:41+00:00   \\n\",\n       \"58 2019-01-11 21:40:24+00:00   \\n\",\n       \"\\n\",\n       \"                                                  url  creationAge  \\\\\\n\",\n       \"68  https://github.com/kubeflow/internal-acls/pull...          197   \\n\",\n       \"75         https://github.com/kubeflow/katib/pull/586          325   \\n\",\n       \"80     https://github.com/kubeflow/kubeflow/pull/3340          358   \\n\",\n       \"81     https://github.com/kubeflow/kubeflow/pull/3337          359   \\n\",\n       \"85     https://github.com/kubeflow/kubeflow/pull/3294          511   \\n\",\n       \"86     https://github.com/kubeflow/kubeflow/pull/3290          515   \\n\",\n       \"89     https://github.com/kubeflow/kubeflow/pull/3278          531   \\n\",\n       \"90     https://github.com/kubeflow/community/pull/269          532   \\n\",\n       \"93         https://github.com/kubeflow/katib/pull/500          595   \\n\",\n       \"94         https://github.com/kubeflow/katib/pull/498          627   \\n\",\n       \"95       https://github.com/kubeflow/website/pull/695          658   \\n\",\n       \"97    https://github.com/kubeflow/pipelines/pull/1294          723   \\n\",\n       \"99     https://github.com/kubeflow/kubeflow/pull/3179          840   \\n\",\n       \"0       https://github.com/kubeflow/manifests/pull/36          890   \\n\",\n       \"1     https://github.com/kubeflow/pipelines/pull/1264          902   \\n\",\n       \"4      https://github.com/kubeflow/kubeflow/pull/3114         1008   \\n\",\n       \"5      https://github.com/kubeflow/kubeflow/pull/3089         1055   \\n\",\n       \"6     https://github.com/kubeflow/pipelines/pull/1208         1056   \\n\",\n       \"9          https://github.com/kubeflow/katib/pull/458         1190   \\n\",\n       \"12     https://github.com/kubeflow/kubeflow/pull/3040         1212   \\n\",\n       \"13     https://github.com/kubeflow/kubeflow/pull/3039         1215   \\n\",\n       \"14      https://github.com/kubeflow/examples/pull/543         1220   \\n\",\n       \"15       https://github.com/kubeflow/metadata/pull/12         1242   \\n\",\n       \"17     https://github.com/kubeflow/community/pull/256         1297   \\n\",\n       \"18    https://github.com/kubeflow/pipelines/pull/1145         1342   \\n\",\n       \"19     https://github.com/kubeflow/kubeflow/pull/2987         1384   \\n\",\n       \"20    https://github.com/kubeflow/pipelines/pull/1125         1387   \\n\",\n       \"24         https://github.com/kubeflow/katib/pull/438         1746   \\n\",\n       \"27     https://github.com/kubeflow/kubeflow/pull/2746         1875   \\n\",\n       \"28         https://github.com/kubeflow/katib/pull/435         1969   \\n\",\n       \"29   https://github.com/kubeflow/tf-operator/pull/959         2049   \\n\",\n       \"30         https://github.com/kubeflow/katib/pull/430         2052   \\n\",\n       \"32     https://github.com/kubeflow/kubeflow/pull/2650         2195   \\n\",\n       \"33     https://github.com/kubeflow/pipelines/pull/918         2228   \\n\",\n       \"34     https://github.com/kubeflow/pipelines/pull/912         2232   \\n\",\n       \"36         https://github.com/kubeflow/katib/pull/417         2274   \\n\",\n       \"37     https://github.com/kubeflow/pipelines/pull/898         2326   \\n\",\n       \"38         https://github.com/kubeflow/katib/pull/411         2413   \\n\",\n       \"39     https://github.com/kubeflow/kubeflow/pull/2508         2568   \\n\",\n       \"40         https://github.com/kubeflow/katib/pull/385         2668   \\n\",\n       \"41      https://github.com/kubeflow/examples/pull/502         2867   \\n\",\n       \"42         https://github.com/kubeflow/katib/pull/362         2869   \\n\",\n       \"43     https://github.com/kubeflow/pipelines/pull/791         2870   \\n\",\n       \"44     https://github.com/kubeflow/pipelines/pull/787         2901   \\n\",\n       \"45     https://github.com/kubeflow/pipelines/pull/766         3016   \\n\",\n       \"46     https://github.com/kubeflow/pipelines/pull/765         3016   \\n\",\n       \"47         https://github.com/kubeflow/katib/pull/357         3037   \\n\",\n       \"48     https://github.com/kubeflow/kubeflow/pull/2354         3044   \\n\",\n       \"49         https://github.com/kubeflow/katib/pull/352         3066   \\n\",\n       \"50      https://github.com/kubeflow/examples/pull/490         3122   \\n\",\n       \"51     https://github.com/kubeflow/pipelines/pull/713         3278   \\n\",\n       \"52     https://github.com/kubeflow/pipelines/pull/712         3278   \\n\",\n       \"53     https://github.com/kubeflow/pipelines/pull/702         3355   \\n\",\n       \"54      https://github.com/kubeflow/examples/pull/481         3394   \\n\",\n       \"55     https://github.com/kubeflow/pipelines/pull/688         3406   \\n\",\n       \"56     https://github.com/kubeflow/pipelines/pull/669         3505   \\n\",\n       \"57     https://github.com/kubeflow/pipelines/pull/668         3522   \\n\",\n       \"58     https://github.com/kubeflow/pipelines/pull/640         3646   \\n\",\n       \"\\n\",\n       \"    lastEditAge  updateAge  \\n\",\n       \"68        197.0        196  \\n\",\n       \"75        325.0        210  \\n\",\n       \"80        358.0        338  \\n\",\n       \"81        358.0        190  \\n\",\n       \"85        511.0        504  \\n\",\n       \"86        515.0        505  \\n\",\n       \"89        531.0        459  \\n\",\n       \"90        532.0        520  \\n\",\n       \"93        595.0        591  \\n\",\n       \"94        627.0        243  \\n\",\n       \"95        658.0        472  \\n\",\n       \"97        723.0        361  \\n\",\n       \"99        840.0        839  \\n\",\n       \"0         890.0        557  \\n\",\n       \"1         902.0        832  \\n\",\n       \"4        1008.0        982  \\n\",\n       \"5        1055.0       1051  \\n\",\n       \"6        1056.0        835  \\n\",\n       \"9        1190.0        257  \\n\",\n       \"12       1212.0       1188  \\n\",\n       \"13       1215.0        452  \\n\",\n       \"14       1220.0       1174  \\n\",\n       \"15       1242.0       1219  \\n\",\n       \"17       1297.0       1296  \\n\",\n       \"18       1342.0       1056  \\n\",\n       \"19       1384.0       1339  \\n\",\n       \"20       1387.0        817  \\n\",\n       \"24       1724.0       1005  \\n\",\n       \"27       1875.0        522  \\n\",\n       \"28       1969.0        565  \\n\",\n       \"29       2049.0       1352  \\n\",\n       \"30       2052.0       1044  \\n\",\n       \"32       2195.0        670  \\n\",\n       \"33       2228.0       1036  \\n\",\n       \"34       2232.0       2197  \\n\",\n       \"36       2274.0       2247  \\n\",\n       \"37       2316.0       1028  \\n\",\n       \"38       2413.0        492  \\n\",\n       \"39       2568.0       1024  \\n\",\n       \"40       2668.0       2547  \\n\",\n       \"41       2867.0       2398  \\n\",\n       \"42       2869.0       2267  \\n\",\n       \"43        500.0        356  \\n\",\n       \"44       2901.0       2396  \\n\",\n       \"45       3016.0        963  \\n\",\n       \"46       2791.0        909  \\n\",\n       \"47       3037.0       3014  \\n\",\n       \"48       3044.0        534  \\n\",\n       \"49       3066.0       2869  \\n\",\n       \"50        766.0        702  \\n\",\n       \"51       3164.0       1644  \\n\",\n       \"52       3167.0       1644  \\n\",\n       \"53       3355.0       2207  \\n\",\n       \"54       3394.0       2212  \\n\",\n       \"55       3406.0       3278  \\n\",\n       \"56       3501.0        382  \\n\",\n       \"57       3522.0       1005  \\n\",\n       \"58       3646.0       3503  \"\n      ]\n     },\n     \"execution_count\": 76,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"needs_attention[(needs_attention.updateAge > MAX_QUIET_TIME) &  (needs_attention.lastEditAge>needs_attention.updateAge*1.0)]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# PRs which need editors' attentions \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 77,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>author</th>\\n\",\n       \"      <th>createdAt</th>\\n\",\n       \"      <th>editor</th>\\n\",\n       \"      <th>lastEditedAt</th>\\n\",\n       \"      <th>number</th>\\n\",\n       \"      <th>title</th>\\n\",\n       \"      <th>updatedAt</th>\\n\",\n       \"      <th>url</th>\\n\",\n       \"      <th>creationAge</th>\\n\",\n       \"      <th>lastEditAge</th>\\n\",\n       \"      <th>updateAge</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"Empty DataFrame\\n\",\n       \"Columns: [author, createdAt, editor, lastEditedAt, number, title, updatedAt, url, creationAge, lastEditAge, updateAge]\\n\",\n       \"Index: []\"\n      ]\n     },\n     \"execution_count\": 77,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"needs_attention[(needs_attention.lastEditAge > MAX_QUIET_TIME*1.0) &  (needs_attention.lastEditAge<needs_attention.updateAge*1.0)]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# PRs whcih have been quiet for over a week\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 78,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>author</th>\\n\",\n       \"      <th>createdAt</th>\\n\",\n       \"      <th>editor</th>\\n\",\n       \"      <th>lastEditedAt</th>\\n\",\n       \"      <th>number</th>\\n\",\n       \"      <th>title</th>\\n\",\n       \"      <th>updatedAt</th>\\n\",\n       \"      <th>url</th>\\n\",\n       \"      <th>creationAge</th>\\n\",\n       \"      <th>lastEditAge</th>\\n\",\n       \"      <th>updateAge</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>68</th>\\n\",\n       \"      <td>{u'login': u'jeremiahkellick'}</td>\\n\",\n       \"      <td>2019-05-29 15:53:23+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-29 15:53:29+00:00</td>\\n\",\n       \"      <td>108</td>\\n\",\n       \"      <td>Add jeremiahkellick to org.yaml</td>\\n\",\n       \"      <td>2019-05-29 16:56:10+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/internal-acls/pull...</td>\\n\",\n       \"      <td>197</td>\\n\",\n       \"      <td>197.0</td>\\n\",\n       \"      <td>196</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>70</th>\\n\",\n       \"      <td>{u'login': u'ggaaooppeenngg'}</td>\\n\",\n       \"      <td>2019-05-28 04:23:09+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-28 04:23:14+00:00</td>\\n\",\n       \"      <td>20</td>\\n\",\n       \"      <td>support frozen model</td>\\n\",\n       \"      <td>2019-05-28 04:23:23+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/batch-predict/pull/20</td>\\n\",\n       \"      <td>233</td>\\n\",\n       \"      <td>233.0</td>\\n\",\n       \"      <td>233</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>74</th>\\n\",\n       \"      <td>{u'login': u'aakashbajaj'}</td>\\n\",\n       \"      <td>2019-05-24 09:47:58+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-24 09:48:05+00:00</td>\\n\",\n       \"      <td>1384</td>\\n\",\n       \"      <td>gcp cred bug fix for multiple credentials in s...</td>\\n\",\n       \"      <td>2019-05-24 10:07:10+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1384</td>\\n\",\n       \"      <td>323</td>\\n\",\n       \"      <td>323.0</td>\\n\",\n       \"      <td>323</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>75</th>\\n\",\n       \"      <td>{u'login': u'gyliu513'}</td>\\n\",\n       \"      <td>2019-05-24 08:09:49+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-24 08:09:58+00:00</td>\\n\",\n       \"      <td>586</td>\\n\",\n       \"      <td>WIP Do not use /tmp/katib as host path.</td>\\n\",\n       \"      <td>2019-05-29 03:02:45+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/586</td>\\n\",\n       \"      <td>325</td>\\n\",\n       \"      <td>325.0</td>\\n\",\n       \"      <td>210</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>80</th>\\n\",\n       \"      <td>{u'login': u'M00nF1sh'}</td>\\n\",\n       \"      <td>2019-05-22 23:28:30+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-22 23:28:36+00:00</td>\\n\",\n       \"      <td>3340</td>\\n\",\n       \"      <td>templatize istio k8s version for aws</td>\\n\",\n       \"      <td>2019-05-23 18:45:23+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3340</td>\\n\",\n       \"      <td>358</td>\\n\",\n       \"      <td>358.0</td>\\n\",\n       \"      <td>338</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>81</th>\\n\",\n       \"      <td>{u'login': u'M00nF1sh'}</td>\\n\",\n       \"      <td>2019-05-22 22:32:49+00:00</td>\\n\",\n       \"      <td>{u'login': u'M00nF1sh'}</td>\\n\",\n       \"      <td>2019-05-22 22:35:54+00:00</td>\\n\",\n       \"      <td>3337</td>\\n\",\n       \"      <td>Update OWNERS file and make ingress configurab...</td>\\n\",\n       \"      <td>2019-05-29 23:15:34+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3337</td>\\n\",\n       \"      <td>359</td>\\n\",\n       \"      <td>358.0</td>\\n\",\n       \"      <td>190</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>83</th>\\n\",\n       \"      <td>{u'login': u'kkasravi'}</td>\\n\",\n       \"      <td>2019-05-18 14:47:09+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-18 14:47:14+00:00</td>\\n\",\n       \"      <td>3311</td>\\n\",\n       \"      <td>add kkasravi to OWNERS</td>\\n\",\n       \"      <td>2019-05-18 14:47:23+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3311</td>\\n\",\n       \"      <td>462</td>\\n\",\n       \"      <td>462.0</td>\\n\",\n       \"      <td>462</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>85</th>\\n\",\n       \"      <td>{u'login': u'elikatsis'}</td>\\n\",\n       \"      <td>2019-05-16 13:49:06+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-16 13:49:17+00:00</td>\\n\",\n       \"      <td>3294</td>\\n\",\n       \"      <td>Add verb \\\"create\\\" for Secrets to ClusterRole \\\"...</td>\\n\",\n       \"      <td>2019-05-16 21:06:24+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3294</td>\\n\",\n       \"      <td>511</td>\\n\",\n       \"      <td>511.0</td>\\n\",\n       \"      <td>504</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>86</th>\\n\",\n       \"      <td>{u'login': u'chenhan1218'}</td>\\n\",\n       \"      <td>2019-05-16 10:17:15+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-16 10:17:21+00:00</td>\\n\",\n       \"      <td>3290</td>\\n\",\n       \"      <td>fix #2863, postpone check kubeflow ready</td>\\n\",\n       \"      <td>2019-05-16 19:49:23+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3290</td>\\n\",\n       \"      <td>515</td>\\n\",\n       \"      <td>515.0</td>\\n\",\n       \"      <td>505</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>88</th>\\n\",\n       \"      <td>{u'login': u'ryandawsonuk'}</td>\\n\",\n       \"      <td>2019-05-16 08:29:16+00:00</td>\\n\",\n       \"      <td>{u'login': u'ryandawsonuk'}</td>\\n\",\n       \"      <td>2019-05-16 08:29:52+00:00</td>\\n\",\n       \"      <td>103</td>\\n\",\n       \"      <td>seldon org update</td>\\n\",\n       \"      <td>2019-05-16 08:29:52+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/internal-acls/pull...</td>\\n\",\n       \"      <td>517</td>\\n\",\n       \"      <td>517.0</td>\\n\",\n       \"      <td>517</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>89</th>\\n\",\n       \"      <td>{u'login': u'yanniszark'}</td>\\n\",\n       \"      <td>2019-05-15 17:43:21+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-15 17:43:27+00:00</td>\\n\",\n       \"      <td>3278</td>\\n\",\n       \"      <td>basic-auth: make kflogin work with NodePort</td>\\n\",\n       \"      <td>2019-05-18 17:53:55+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3278</td>\\n\",\n       \"      <td>531</td>\\n\",\n       \"      <td>531.0</td>\\n\",\n       \"      <td>459</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>90</th>\\n\",\n       \"      <td>{u'login': u'ryandawsonuk'}</td>\\n\",\n       \"      <td>2019-05-15 17:18:21+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-15 17:18:32+00:00</td>\\n\",\n       \"      <td>269</td>\\n\",\n       \"      <td>add rd@seldon.io to member_organizations.yaml</td>\\n\",\n       \"      <td>2019-05-16 05:09:11+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/community/pull/269</td>\\n\",\n       \"      <td>532</td>\\n\",\n       \"      <td>532.0</td>\\n\",\n       \"      <td>520</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>92</th>\\n\",\n       \"      <td>{u'login': u'johnugeorge'}</td>\\n\",\n       \"      <td>2019-05-14 12:53:32+00:00</td>\\n\",\n       \"      <td>{u'login': u'johnugeorge'}</td>\\n\",\n       \"      <td>2019-05-14 12:54:17+00:00</td>\\n\",\n       \"      <td>267</td>\\n\",\n       \"      <td>Update github_users.json to the latest</td>\\n\",\n       \"      <td>2019-05-14 12:54:17+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/community/pull/267</td>\\n\",\n       \"      <td>560</td>\\n\",\n       \"      <td>560.0</td>\\n\",\n       \"      <td>560</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>93</th>\\n\",\n       \"      <td>{u'login': u'gaocegege'}</td>\\n\",\n       \"      <td>2019-05-13 02:13:15+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-13 02:13:20+00:00</td>\\n\",\n       \"      <td>500</td>\\n\",\n       \"      <td>WIP feat(suggestion): Define new API for sugge...</td>\\n\",\n       \"      <td>2019-05-13 05:59:01+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/500</td>\\n\",\n       \"      <td>595</td>\\n\",\n       \"      <td>595.0</td>\\n\",\n       \"      <td>591</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>94</th>\\n\",\n       \"      <td>{u'login': u'achalshant'}</td>\\n\",\n       \"      <td>2019-05-11 17:45:09+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-11 17:45:15+00:00</td>\\n\",\n       \"      <td>498</td>\\n\",\n       \"      <td>Decoupling DB interface from katib manager</td>\\n\",\n       \"      <td>2019-05-27 18:16:21+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/498</td>\\n\",\n       \"      <td>627</td>\\n\",\n       \"      <td>627.0</td>\\n\",\n       \"      <td>243</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>95</th>\\n\",\n       \"      <td>{u'login': u'solovyevt'}</td>\\n\",\n       \"      <td>2019-05-10 11:15:12+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-10 11:15:18+00:00</td>\\n\",\n       \"      <td>695</td>\\n\",\n       \"      <td>update Getting Started / Kubfelow on Kubernete...</td>\\n\",\n       \"      <td>2019-05-18 05:08:50+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/website/pull/695</td>\\n\",\n       \"      <td>658</td>\\n\",\n       \"      <td>658.0</td>\\n\",\n       \"      <td>472</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>96</th>\\n\",\n       \"      <td>{u'login': u'karthikv2k'}</td>\\n\",\n       \"      <td>2019-05-10 00:54:15+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-10 00:54:19+00:00</td>\\n\",\n       \"      <td>241</td>\\n\",\n       \"      <td>PyTorch notebook examples</td>\\n\",\n       \"      <td>2019-05-10 01:11:21+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/fairing/pull/241</td>\\n\",\n       \"      <td>668</td>\\n\",\n       \"      <td>668.0</td>\\n\",\n       \"      <td>668</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>97</th>\\n\",\n       \"      <td>{u'login': u'rileyjbauer'}</td>\\n\",\n       \"      <td>2019-05-07 17:40:05+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-07 17:40:13+00:00</td>\\n\",\n       \"      <td>1294</td>\\n\",\n       \"      <td>Correct input height</td>\\n\",\n       \"      <td>2019-05-22 20:24:38+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1294</td>\\n\",\n       \"      <td>723</td>\\n\",\n       \"      <td>723.0</td>\\n\",\n       \"      <td>361</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>99</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-05-02 21:26:09+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-02 21:26:20+00:00</td>\\n\",\n       \"      <td>3179</td>\\n\",\n       \"      <td>Update Pipelines to version 0.1.18 (#3121)</td>\\n\",\n       \"      <td>2019-05-02 22:17:52+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3179</td>\\n\",\n       \"      <td>840</td>\\n\",\n       \"      <td>840.0</td>\\n\",\n       \"      <td>839</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>{u'login': u'cliveseldon'}</td>\\n\",\n       \"      <td>2019-04-30 18:49:30+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-30 18:49:37+00:00</td>\\n\",\n       \"      <td>36</td>\\n\",\n       \"      <td>add seldon</td>\\n\",\n       \"      <td>2019-05-14 15:55:27+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/manifests/pull/36</td>\\n\",\n       \"      <td>890</td>\\n\",\n       \"      <td>890.0</td>\\n\",\n       \"      <td>557</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>{u'login': u'animeshsingh'}</td>\\n\",\n       \"      <td>2019-04-30 07:04:30+00:00</td>\\n\",\n       \"      <td>{u'login': u'animeshsingh'}</td>\\n\",\n       \"      <td>2019-04-30 07:19:09+00:00</td>\\n\",\n       \"      <td>1264</td>\\n\",\n       \"      <td>updating components and samples owners file</td>\\n\",\n       \"      <td>2019-05-03 05:13:38+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1264</td>\\n\",\n       \"      <td>902</td>\\n\",\n       \"      <td>902.0</td>\\n\",\n       \"      <td>832</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>{u'login': u'holdenk'}</td>\\n\",\n       \"      <td>2019-04-29 11:31:03+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-29 11:31:09+00:00</td>\\n\",\n       \"      <td>3137</td>\\n\",\n       \"      <td>[KUBEFLOW-3136] Fix OAUTH requirement in gke u...</td>\\n\",\n       \"      <td>2019-04-29 11:31:17+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3137</td>\\n\",\n       \"      <td>922</td>\\n\",\n       \"      <td>922.0</td>\\n\",\n       \"      <td>922</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>{u'login': u'lluunn'}</td>\\n\",\n       \"      <td>2019-04-25 21:16:54+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-25 21:17:06+00:00</td>\\n\",\n       \"      <td>3114</td>\\n\",\n       \"      <td>WIP don't review</td>\\n\",\n       \"      <td>2019-04-26 23:16:24+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3114</td>\\n\",\n       \"      <td>1008</td>\\n\",\n       \"      <td>1008.0</td>\\n\",\n       \"      <td>982</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>{u'login': u'rohithreddy'}</td>\\n\",\n       \"      <td>2019-04-23 22:23:26+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-23 22:23:33+00:00</td>\\n\",\n       \"      <td>3089</td>\\n\",\n       \"      <td>Add emacs package to the Jupyter Image</td>\\n\",\n       \"      <td>2019-04-24 02:06:01+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3089</td>\\n\",\n       \"      <td>1055</td>\\n\",\n       \"      <td>1055.0</td>\\n\",\n       \"      <td>1051</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>{u'login': u'rileyjbauer'}</td>\\n\",\n       \"      <td>2019-04-23 21:23:26+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-23 21:23:32+00:00</td>\\n\",\n       \"      <td>1208</td>\\n\",\n       \"      <td>[WIP] Initial attempt to migrate from react-sc...</td>\\n\",\n       \"      <td>2019-05-03 01:52:17+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1208</td>\\n\",\n       \"      <td>1056</td>\\n\",\n       \"      <td>1056.0</td>\\n\",\n       \"      <td>835</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>{u'login': u'wukong1992'}</td>\\n\",\n       \"      <td>2019-04-18 06:40:38+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-18 06:40:44+00:00</td>\\n\",\n       \"      <td>458</td>\\n\",\n       \"      <td>support request count</td>\\n\",\n       \"      <td>2019-05-27 04:14:53+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/458</td>\\n\",\n       \"      <td>1190</td>\\n\",\n       \"      <td>1190.0</td>\\n\",\n       \"      <td>257</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>{u'login': u'TheOtherOsama'}</td>\\n\",\n       \"      <td>2019-04-17 21:15:19+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-17 21:15:24+00:00</td>\\n\",\n       \"      <td>83</td>\\n\",\n       \"      <td>Update org.yaml</td>\\n\",\n       \"      <td>2019-04-17 21:16:39+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/internal-acls/pull/83</td>\\n\",\n       \"      <td>1200</td>\\n\",\n       \"      <td>1200.0</td>\\n\",\n       \"      <td>1200</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>{u'login': u'royxue'}</td>\\n\",\n       \"      <td>2019-04-17 09:01:29+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-17 09:01:38+00:00</td>\\n\",\n       \"      <td>3040</td>\\n\",\n       \"      <td>Add KUBEFLOW_KS_API_SPEC env variable</td>\\n\",\n       \"      <td>2019-04-18 09:21:32+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3040</td>\\n\",\n       \"      <td>1212</td>\\n\",\n       \"      <td>1212.0</td>\\n\",\n       \"      <td>1188</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>{u'login': u'stpabhi'}</td>\\n\",\n       \"      <td>2019-04-17 05:58:06+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-17 05:58:15+00:00</td>\\n\",\n       \"      <td>3039</td>\\n\",\n       \"      <td>Update profile readme according to golang prof...</td>\\n\",\n       \"      <td>2019-05-19 00:52:06+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3039</td>\\n\",\n       \"      <td>1215</td>\\n\",\n       \"      <td>1215.0</td>\\n\",\n       \"      <td>452</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>{u'login': u'mnmainguy'}</td>\\n\",\n       \"      <td>2019-04-17 00:54:15+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-17 00:54:20+00:00</td>\\n\",\n       \"      <td>543</td>\\n\",\n       \"      <td>Enhanced readme for MNIST example to include w...</td>\\n\",\n       \"      <td>2019-04-18 22:38:37+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/examples/pull/543</td>\\n\",\n       \"      <td>1220</td>\\n\",\n       \"      <td>1220.0</td>\\n\",\n       \"      <td>1174</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>28</th>\\n\",\n       \"      <td>{u'login': u'jdplatt'}</td>\\n\",\n       \"      <td>2019-03-16 19:59:45+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-16 19:59:51+00:00</td>\\n\",\n       \"      <td>435</td>\\n\",\n       \"      <td>Python migration</td>\\n\",\n       \"      <td>2019-05-14 08:00:44+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/435</td>\\n\",\n       \"      <td>1969</td>\\n\",\n       \"      <td>1969.0</td>\\n\",\n       \"      <td>565</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>{u'login': u'zionwu'}</td>\\n\",\n       \"      <td>2019-03-13 12:20:46+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-13 12:20:52+00:00</td>\\n\",\n       \"      <td>959</td>\\n\",\n       \"      <td>Delete pod on lost node</td>\\n\",\n       \"      <td>2019-04-11 13:30:29+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/tf-operator/pull/959</td>\\n\",\n       \"      <td>2049</td>\\n\",\n       \"      <td>2049.0</td>\\n\",\n       \"      <td>1352</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>{u'login': u'dreamryx'}</td>\\n\",\n       \"      <td>2019-03-13 08:49:35+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-13 08:49:40+00:00</td>\\n\",\n       \"      <td>430</td>\\n\",\n       \"      <td>update dockerfile for power build</td>\\n\",\n       \"      <td>2019-04-24 09:02:36+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/430</td>\\n\",\n       \"      <td>2052</td>\\n\",\n       \"      <td>2052.0</td>\\n\",\n       \"      <td>1044</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>31</th>\\n\",\n       \"      <td>{u'login': u'animeshsingh'}</td>\\n\",\n       \"      <td>2019-03-12 00:41:45+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-12 00:41:50+00:00</td>\\n\",\n       \"      <td>71</td>\\n\",\n       \"      <td>Update org.yaml</td>\\n\",\n       \"      <td>2019-03-12 00:41:59+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/internal-acls/pull/71</td>\\n\",\n       \"      <td>2084</td>\\n\",\n       \"      <td>2084.0</td>\\n\",\n       \"      <td>2084</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>32</th>\\n\",\n       \"      <td>{u'login': u'avdaredevil'}</td>\\n\",\n       \"      <td>2019-03-07 09:39:43+00:00</td>\\n\",\n       \"      <td>{u'login': u'avdaredevil'}</td>\\n\",\n       \"      <td>2019-03-07 09:47:58+00:00</td>\\n\",\n       \"      <td>2650</td>\\n\",\n       \"      <td>[Windows] Windows Scripts for Setting up Kubeflow</td>\\n\",\n       \"      <td>2019-05-09 23:03:20+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/2650</td>\\n\",\n       \"      <td>2195</td>\\n\",\n       \"      <td>2195.0</td>\\n\",\n       \"      <td>670</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>33</th>\\n\",\n       \"      <td>{u'login': u'IronPan'}</td>\\n\",\n       \"      <td>2019-03-06 00:39:35+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-06 00:39:42+00:00</td>\\n\",\n       \"      <td>918</td>\\n\",\n       \"      <td>Add test suit to upgrade pipeline</td>\\n\",\n       \"      <td>2019-04-24 17:19:34+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/918</td>\\n\",\n       \"      <td>2228</td>\\n\",\n       \"      <td>2228.0</td>\\n\",\n       \"      <td>1036</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>34</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-03-05 21:33:50+00:00</td>\\n\",\n       \"      <td>{u'login': u'IronPan'}</td>\\n\",\n       \"      <td>2019-03-05 21:33:58+00:00</td>\\n\",\n       \"      <td>912</td>\\n\",\n       \"      <td>[WIP]Improved the sample Keras classifier comp...</td>\\n\",\n       \"      <td>2019-03-07 07:59:06+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/912</td>\\n\",\n       \"      <td>2232</td>\\n\",\n       \"      <td>2232.0</td>\\n\",\n       \"      <td>2197</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>36</th>\\n\",\n       \"      <td>{u'login': u'toshiiw'}</td>\\n\",\n       \"      <td>2019-03-04 02:42:22+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-04 02:42:27+00:00</td>\\n\",\n       \"      <td>417</td>\\n\",\n       \"      <td>Print verbose error when studyjob updates fail</td>\\n\",\n       \"      <td>2019-03-05 06:08:42+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/417</td>\\n\",\n       \"      <td>2274</td>\\n\",\n       \"      <td>2274.0</td>\\n\",\n       \"      <td>2247</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>37</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-03-01 23:16:42+00:00</td>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-03-02 08:44:49+00:00</td>\\n\",\n       \"      <td>898</td>\\n\",\n       \"      <td>Collecting coverage when running python tests</td>\\n\",\n       \"      <td>2019-04-25 00:56:00+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/898</td>\\n\",\n       \"      <td>2326</td>\\n\",\n       \"      <td>2316.0</td>\\n\",\n       \"      <td>1028</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>38</th>\\n\",\n       \"      <td>{u'login': u'toshiiw'}</td>\\n\",\n       \"      <td>2019-02-26 08:04:33+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-26 08:04:38+00:00</td>\\n\",\n       \"      <td>411</td>\\n\",\n       \"      <td>Retry studyjobcontroller</td>\\n\",\n       \"      <td>2019-05-17 09:25:27+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/411</td>\\n\",\n       \"      <td>2413</td>\\n\",\n       \"      <td>2413.0</td>\\n\",\n       \"      <td>492</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>39</th>\\n\",\n       \"      <td>{u'login': u'knkski'}</td>\\n\",\n       \"      <td>2019-02-19 21:27:13+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-19 21:27:22+00:00</td>\\n\",\n       \"      <td>2508</td>\\n\",\n       \"      <td>Update kubespawner property name</td>\\n\",\n       \"      <td>2019-04-25 05:02:36+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/2508</td>\\n\",\n       \"      <td>2568</td>\\n\",\n       \"      <td>2568.0</td>\\n\",\n       \"      <td>1024</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>40</th>\\n\",\n       \"      <td>{u'login': u'jayunit100'}</td>\\n\",\n       \"      <td>2019-02-15 16:59:16+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-15 16:59:28+00:00</td>\\n\",\n       \"      <td>385</td>\\n\",\n       \"      <td>Vendoring</td>\\n\",\n       \"      <td>2019-02-20 17:47:08+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/385</td>\\n\",\n       \"      <td>2668</td>\\n\",\n       \"      <td>2668.0</td>\\n\",\n       \"      <td>2547</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>41</th>\\n\",\n       \"      <td>{u'login': u'yehiyam'}</td>\\n\",\n       \"      <td>2019-02-07 10:33:40+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-07 10:33:49+00:00</td>\\n\",\n       \"      <td>502</td>\\n\",\n       \"      <td>fix typo</td>\\n\",\n       \"      <td>2019-02-26 23:12:45+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/examples/pull/502</td>\\n\",\n       \"      <td>2867</td>\\n\",\n       \"      <td>2867.0</td>\\n\",\n       \"      <td>2398</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>42</th>\\n\",\n       \"      <td>{u'login': u'YujiOshima'}</td>\\n\",\n       \"      <td>2019-02-07 08:14:16+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-07 08:14:22+00:00</td>\\n\",\n       \"      <td>362</td>\\n\",\n       \"      <td>DB: add studyjob table and extend worker table</td>\\n\",\n       \"      <td>2019-03-04 09:53:25+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/362</td>\\n\",\n       \"      <td>2869</td>\\n\",\n       \"      <td>2869.0</td>\\n\",\n       \"      <td>2267</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>43</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-02-07 07:30:11+00:00</td>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-05-17 01:16:28+00:00</td>\\n\",\n       \"      <td>791</td>\\n\",\n       \"      <td>SDK - Added support for raw input artifact arg...</td>\\n\",\n       \"      <td>2019-05-23 01:24:26+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/791</td>\\n\",\n       \"      <td>2870</td>\\n\",\n       \"      <td>500.0</td>\\n\",\n       \"      <td>356</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>44</th>\\n\",\n       \"      <td>{u'login': u'hongye-sun'}</td>\\n\",\n       \"      <td>2019-02-06 00:18:49+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-06 00:18:54+00:00</td>\\n\",\n       \"      <td>787</td>\\n\",\n       \"      <td>Add GPU test back</td>\\n\",\n       \"      <td>2019-02-27 00:59:08+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/787</td>\\n\",\n       \"      <td>2901</td>\\n\",\n       \"      <td>2901.0</td>\\n\",\n       \"      <td>2396</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>45</th>\\n\",\n       \"      <td>{u'login': u'DmitryBe'}</td>\\n\",\n       \"      <td>2019-02-01 05:22:32+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-01 05:22:36+00:00</td>\\n\",\n       \"      <td>766</td>\\n\",\n       \"      <td>Added AWS S3 support for storing artefacts.</td>\\n\",\n       \"      <td>2019-04-27 18:19:11+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/766</td>\\n\",\n       \"      <td>3016</td>\\n\",\n       \"      <td>3016.0</td>\\n\",\n       \"      <td>963</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>46</th>\\n\",\n       \"      <td>{u'login': u'DmitryBe'}</td>\\n\",\n       \"      <td>2019-02-01 05:18:20+00:00</td>\\n\",\n       \"      <td>{u'login': u'DmitryBe'}</td>\\n\",\n       \"      <td>2019-02-10 14:33:00+00:00</td>\\n\",\n       \"      <td>765</td>\\n\",\n       \"      <td>Added configArtifactRepository method into `sd...</td>\\n\",\n       \"      <td>2019-04-30 00:35:10+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/765</td>\\n\",\n       \"      <td>3016</td>\\n\",\n       \"      <td>2791.0</td>\\n\",\n       \"      <td>909</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>47</th>\\n\",\n       \"      <td>{u'login': u'toshiiw'}</td>\\n\",\n       \"      <td>2019-01-31 07:51:52+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-31 07:51:57+00:00</td>\\n\",\n       \"      <td>357</td>\\n\",\n       \"      <td>DNM: check if kubeconfig is sane</td>\\n\",\n       \"      <td>2019-02-01 07:07:05+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/357</td>\\n\",\n       \"      <td>3037</td>\\n\",\n       \"      <td>3037.0</td>\\n\",\n       \"      <td>3014</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>48</th>\\n\",\n       \"      <td>{u'login': u'TimZaman'}</td>\\n\",\n       \"      <td>2019-01-31 00:37:31+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-31 00:37:40+00:00</td>\\n\",\n       \"      <td>2354</td>\\n\",\n       \"      <td>Fix minikube setup script's df inference</td>\\n\",\n       \"      <td>2019-05-15 15:02:49+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/2354</td>\\n\",\n       \"      <td>3044</td>\\n\",\n       \"      <td>3044.0</td>\\n\",\n       \"      <td>534</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>49</th>\\n\",\n       \"      <td>{u'login': u'YujiOshima'}</td>\\n\",\n       \"      <td>2019-01-30 02:59:51+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-30 03:00:01+00:00</td>\\n\",\n       \"      <td>352</td>\\n\",\n       \"      <td>Manual suggest</td>\\n\",\n       \"      <td>2019-02-07 08:17:41+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/352</td>\\n\",\n       \"      <td>3066</td>\\n\",\n       \"      <td>3066.0</td>\\n\",\n       \"      <td>2869</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>50</th>\\n\",\n       \"      <td>{u'login': u'dsdinter'}</td>\\n\",\n       \"      <td>2019-01-27 18:37:42+00:00</td>\\n\",\n       \"      <td>{u'login': u'dsdinter'}</td>\\n\",\n       \"      <td>2019-05-05 23:01:29+00:00</td>\\n\",\n       \"      <td>490</td>\\n\",\n       \"      <td>[pytorch_mnist] Automate image build</td>\\n\",\n       \"      <td>2019-05-08 15:11:21+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/examples/pull/490</td>\\n\",\n       \"      <td>3122</td>\\n\",\n       \"      <td>766.0</td>\\n\",\n       \"      <td>702</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>51</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-21 07:19:10+00:00</td>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-26 01:19:56+00:00</td>\\n\",\n       \"      <td>713</td>\\n\",\n       \"      <td>SDK/Components - Refactoring: Improved contai...</td>\\n\",\n       \"      <td>2019-03-30 08:36:35+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/713</td>\\n\",\n       \"      <td>3278</td>\\n\",\n       \"      <td>3164.0</td>\\n\",\n       \"      <td>1644</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>52</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-21 07:17:53+00:00</td>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-25 21:37:51+00:00</td>\\n\",\n       \"      <td>712</td>\\n\",\n       \"      <td>SDK/Components - Only convert TaskSpec to Cont...</td>\\n\",\n       \"      <td>2019-03-30 08:38:57+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/712</td>\\n\",\n       \"      <td>3278</td>\\n\",\n       \"      <td>3167.0</td>\\n\",\n       \"      <td>1644</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>53</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-18 02:09:34+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-18 02:09:39+00:00</td>\\n\",\n       \"      <td>702</td>\\n\",\n       \"      <td>SDK/Component - Added the ComponentReference.s...</td>\\n\",\n       \"      <td>2019-03-06 21:50:37+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/702</td>\\n\",\n       \"      <td>3355</td>\\n\",\n       \"      <td>3355.0</td>\\n\",\n       \"      <td>2207</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>54</th>\\n\",\n       \"      <td>{u'login': u'govindKAG'}</td>\\n\",\n       \"      <td>2019-01-16 11:31:09+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-16 11:31:14+00:00</td>\\n\",\n       \"      <td>481</td>\\n\",\n       \"      <td>reduced number of layers</td>\\n\",\n       \"      <td>2019-03-06 17:21:10+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/examples/pull/481</td>\\n\",\n       \"      <td>3394</td>\\n\",\n       \"      <td>3394.0</td>\\n\",\n       \"      <td>2212</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>55</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-15 23:02:07+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-15 23:02:13+00:00</td>\\n\",\n       \"      <td>688</td>\\n\",\n       \"      <td>SDK/Components - Renamed fileOutputs to unconf...</td>\\n\",\n       \"      <td>2019-01-21 07:14:25+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/688</td>\\n\",\n       \"      <td>3406</td>\\n\",\n       \"      <td>3406.0</td>\\n\",\n       \"      <td>3278</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>56</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-11 19:58:00+00:00</td>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-12 00:04:05+00:00</td>\\n\",\n       \"      <td>669</td>\\n\",\n       \"      <td>SDK/Components  - Added Json Schema spec for t...</td>\\n\",\n       \"      <td>2019-05-21 23:19:57+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/669</td>\\n\",\n       \"      <td>3505</td>\\n\",\n       \"      <td>3501.0</td>\\n\",\n       \"      <td>382</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>57</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-11 03:27:40+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-11 03:27:45+00:00</td>\\n\",\n       \"      <td>668</td>\\n\",\n       \"      <td>SDK - Update minimum Python version to 3.6</td>\\n\",\n       \"      <td>2019-04-25 23:41:41+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/668</td>\\n\",\n       \"      <td>3522</td>\\n\",\n       \"      <td>3522.0</td>\\n\",\n       \"      <td>1005</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>58</th>\\n\",\n       \"      <td>{u'login': u'neuromage'}</td>\\n\",\n       \"      <td>2019-01-05 22:53:33+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-05 22:53:38+00:00</td>\\n\",\n       \"      <td>640</td>\\n\",\n       \"      <td>[WIP] Run Bazel build/tests as part of Travis CI</td>\\n\",\n       \"      <td>2019-01-11 21:40:24+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/640</td>\\n\",\n       \"      <td>3646</td>\\n\",\n       \"      <td>3646.0</td>\\n\",\n       \"      <td>3503</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>71 rows × 11 columns</p>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"                            author                 createdAt  \\\\\\n\",\n       \"68  {u'login': u'jeremiahkellick'} 2019-05-29 15:53:23+00:00   \\n\",\n       \"70   {u'login': u'ggaaooppeenngg'} 2019-05-28 04:23:09+00:00   \\n\",\n       \"74      {u'login': u'aakashbajaj'} 2019-05-24 09:47:58+00:00   \\n\",\n       \"75         {u'login': u'gyliu513'} 2019-05-24 08:09:49+00:00   \\n\",\n       \"80         {u'login': u'M00nF1sh'} 2019-05-22 23:28:30+00:00   \\n\",\n       \"81         {u'login': u'M00nF1sh'} 2019-05-22 22:32:49+00:00   \\n\",\n       \"83         {u'login': u'kkasravi'} 2019-05-18 14:47:09+00:00   \\n\",\n       \"85        {u'login': u'elikatsis'} 2019-05-16 13:49:06+00:00   \\n\",\n       \"86      {u'login': u'chenhan1218'} 2019-05-16 10:17:15+00:00   \\n\",\n       \"88     {u'login': u'ryandawsonuk'} 2019-05-16 08:29:16+00:00   \\n\",\n       \"89       {u'login': u'yanniszark'} 2019-05-15 17:43:21+00:00   \\n\",\n       \"90     {u'login': u'ryandawsonuk'} 2019-05-15 17:18:21+00:00   \\n\",\n       \"92      {u'login': u'johnugeorge'} 2019-05-14 12:53:32+00:00   \\n\",\n       \"93        {u'login': u'gaocegege'} 2019-05-13 02:13:15+00:00   \\n\",\n       \"94       {u'login': u'achalshant'} 2019-05-11 17:45:09+00:00   \\n\",\n       \"95        {u'login': u'solovyevt'} 2019-05-10 11:15:12+00:00   \\n\",\n       \"96       {u'login': u'karthikv2k'} 2019-05-10 00:54:15+00:00   \\n\",\n       \"97      {u'login': u'rileyjbauer'} 2019-05-07 17:40:05+00:00   \\n\",\n       \"99          {u'login': u'Ark-kun'} 2019-05-02 21:26:09+00:00   \\n\",\n       \"0       {u'login': u'cliveseldon'} 2019-04-30 18:49:30+00:00   \\n\",\n       \"1      {u'login': u'animeshsingh'} 2019-04-30 07:04:30+00:00   \\n\",\n       \"2           {u'login': u'holdenk'} 2019-04-29 11:31:03+00:00   \\n\",\n       \"4            {u'login': u'lluunn'} 2019-04-25 21:16:54+00:00   \\n\",\n       \"5       {u'login': u'rohithreddy'} 2019-04-23 22:23:26+00:00   \\n\",\n       \"6       {u'login': u'rileyjbauer'} 2019-04-23 21:23:26+00:00   \\n\",\n       \"9        {u'login': u'wukong1992'} 2019-04-18 06:40:38+00:00   \\n\",\n       \"11    {u'login': u'TheOtherOsama'} 2019-04-17 21:15:19+00:00   \\n\",\n       \"12           {u'login': u'royxue'} 2019-04-17 09:01:29+00:00   \\n\",\n       \"13          {u'login': u'stpabhi'} 2019-04-17 05:58:06+00:00   \\n\",\n       \"14        {u'login': u'mnmainguy'} 2019-04-17 00:54:15+00:00   \\n\",\n       \"..                             ...                       ...   \\n\",\n       \"28          {u'login': u'jdplatt'} 2019-03-16 19:59:45+00:00   \\n\",\n       \"29           {u'login': u'zionwu'} 2019-03-13 12:20:46+00:00   \\n\",\n       \"30         {u'login': u'dreamryx'} 2019-03-13 08:49:35+00:00   \\n\",\n       \"31     {u'login': u'animeshsingh'} 2019-03-12 00:41:45+00:00   \\n\",\n       \"32      {u'login': u'avdaredevil'} 2019-03-07 09:39:43+00:00   \\n\",\n       \"33          {u'login': u'IronPan'} 2019-03-06 00:39:35+00:00   \\n\",\n       \"34          {u'login': u'Ark-kun'} 2019-03-05 21:33:50+00:00   \\n\",\n       \"36          {u'login': u'toshiiw'} 2019-03-04 02:42:22+00:00   \\n\",\n       \"37          {u'login': u'Ark-kun'} 2019-03-01 23:16:42+00:00   \\n\",\n       \"38          {u'login': u'toshiiw'} 2019-02-26 08:04:33+00:00   \\n\",\n       \"39           {u'login': u'knkski'} 2019-02-19 21:27:13+00:00   \\n\",\n       \"40       {u'login': u'jayunit100'} 2019-02-15 16:59:16+00:00   \\n\",\n       \"41          {u'login': u'yehiyam'} 2019-02-07 10:33:40+00:00   \\n\",\n       \"42       {u'login': u'YujiOshima'} 2019-02-07 08:14:16+00:00   \\n\",\n       \"43          {u'login': u'Ark-kun'} 2019-02-07 07:30:11+00:00   \\n\",\n       \"44       {u'login': u'hongye-sun'} 2019-02-06 00:18:49+00:00   \\n\",\n       \"45         {u'login': u'DmitryBe'} 2019-02-01 05:22:32+00:00   \\n\",\n       \"46         {u'login': u'DmitryBe'} 2019-02-01 05:18:20+00:00   \\n\",\n       \"47          {u'login': u'toshiiw'} 2019-01-31 07:51:52+00:00   \\n\",\n       \"48         {u'login': u'TimZaman'} 2019-01-31 00:37:31+00:00   \\n\",\n       \"49       {u'login': u'YujiOshima'} 2019-01-30 02:59:51+00:00   \\n\",\n       \"50         {u'login': u'dsdinter'} 2019-01-27 18:37:42+00:00   \\n\",\n       \"51          {u'login': u'Ark-kun'} 2019-01-21 07:19:10+00:00   \\n\",\n       \"52          {u'login': u'Ark-kun'} 2019-01-21 07:17:53+00:00   \\n\",\n       \"53          {u'login': u'Ark-kun'} 2019-01-18 02:09:34+00:00   \\n\",\n       \"54        {u'login': u'govindKAG'} 2019-01-16 11:31:09+00:00   \\n\",\n       \"55          {u'login': u'Ark-kun'} 2019-01-15 23:02:07+00:00   \\n\",\n       \"56          {u'login': u'Ark-kun'} 2019-01-11 19:58:00+00:00   \\n\",\n       \"57          {u'login': u'Ark-kun'} 2019-01-11 03:27:40+00:00   \\n\",\n       \"58        {u'login': u'neuromage'} 2019-01-05 22:53:33+00:00   \\n\",\n       \"\\n\",\n       \"                         editor              lastEditedAt  number  \\\\\\n\",\n       \"68         {u'login': u'jlewi'} 2019-05-29 15:53:29+00:00     108   \\n\",\n       \"70         {u'login': u'jlewi'} 2019-05-28 04:23:14+00:00      20   \\n\",\n       \"74         {u'login': u'jlewi'} 2019-05-24 09:48:05+00:00    1384   \\n\",\n       \"75         {u'login': u'jlewi'} 2019-05-24 08:09:58+00:00     586   \\n\",\n       \"80         {u'login': u'jlewi'} 2019-05-22 23:28:36+00:00    3340   \\n\",\n       \"81      {u'login': u'M00nF1sh'} 2019-05-22 22:35:54+00:00    3337   \\n\",\n       \"83         {u'login': u'jlewi'} 2019-05-18 14:47:14+00:00    3311   \\n\",\n       \"85         {u'login': u'jlewi'} 2019-05-16 13:49:17+00:00    3294   \\n\",\n       \"86         {u'login': u'jlewi'} 2019-05-16 10:17:21+00:00    3290   \\n\",\n       \"88  {u'login': u'ryandawsonuk'} 2019-05-16 08:29:52+00:00     103   \\n\",\n       \"89         {u'login': u'jlewi'} 2019-05-15 17:43:27+00:00    3278   \\n\",\n       \"90         {u'login': u'jlewi'} 2019-05-15 17:18:32+00:00     269   \\n\",\n       \"92   {u'login': u'johnugeorge'} 2019-05-14 12:54:17+00:00     267   \\n\",\n       \"93         {u'login': u'jlewi'} 2019-05-13 02:13:20+00:00     500   \\n\",\n       \"94         {u'login': u'jlewi'} 2019-05-11 17:45:15+00:00     498   \\n\",\n       \"95         {u'login': u'jlewi'} 2019-05-10 11:15:18+00:00     695   \\n\",\n       \"96         {u'login': u'jlewi'} 2019-05-10 00:54:19+00:00     241   \\n\",\n       \"97         {u'login': u'jlewi'} 2019-05-07 17:40:13+00:00    1294   \\n\",\n       \"99         {u'login': u'jlewi'} 2019-05-02 21:26:20+00:00    3179   \\n\",\n       \"0          {u'login': u'jlewi'} 2019-04-30 18:49:37+00:00      36   \\n\",\n       \"1   {u'login': u'animeshsingh'} 2019-04-30 07:19:09+00:00    1264   \\n\",\n       \"2          {u'login': u'jlewi'} 2019-04-29 11:31:09+00:00    3137   \\n\",\n       \"4          {u'login': u'jlewi'} 2019-04-25 21:17:06+00:00    3114   \\n\",\n       \"5          {u'login': u'jlewi'} 2019-04-23 22:23:33+00:00    3089   \\n\",\n       \"6          {u'login': u'jlewi'} 2019-04-23 21:23:32+00:00    1208   \\n\",\n       \"9          {u'login': u'jlewi'} 2019-04-18 06:40:44+00:00     458   \\n\",\n       \"11         {u'login': u'jlewi'} 2019-04-17 21:15:24+00:00      83   \\n\",\n       \"12         {u'login': u'jlewi'} 2019-04-17 09:01:38+00:00    3040   \\n\",\n       \"13         {u'login': u'jlewi'} 2019-04-17 05:58:15+00:00    3039   \\n\",\n       \"14         {u'login': u'jlewi'} 2019-04-17 00:54:20+00:00     543   \\n\",\n       \"..                          ...                       ...     ...   \\n\",\n       \"28         {u'login': u'jlewi'} 2019-03-16 19:59:51+00:00     435   \\n\",\n       \"29         {u'login': u'jlewi'} 2019-03-13 12:20:52+00:00     959   \\n\",\n       \"30         {u'login': u'jlewi'} 2019-03-13 08:49:40+00:00     430   \\n\",\n       \"31         {u'login': u'jlewi'} 2019-03-12 00:41:50+00:00      71   \\n\",\n       \"32   {u'login': u'avdaredevil'} 2019-03-07 09:47:58+00:00    2650   \\n\",\n       \"33         {u'login': u'jlewi'} 2019-03-06 00:39:42+00:00     918   \\n\",\n       \"34       {u'login': u'IronPan'} 2019-03-05 21:33:58+00:00     912   \\n\",\n       \"36         {u'login': u'jlewi'} 2019-03-04 02:42:27+00:00     417   \\n\",\n       \"37       {u'login': u'Ark-kun'} 2019-03-02 08:44:49+00:00     898   \\n\",\n       \"38         {u'login': u'jlewi'} 2019-02-26 08:04:38+00:00     411   \\n\",\n       \"39         {u'login': u'jlewi'} 2019-02-19 21:27:22+00:00    2508   \\n\",\n       \"40         {u'login': u'jlewi'} 2019-02-15 16:59:28+00:00     385   \\n\",\n       \"41         {u'login': u'jlewi'} 2019-02-07 10:33:49+00:00     502   \\n\",\n       \"42         {u'login': u'jlewi'} 2019-02-07 08:14:22+00:00     362   \\n\",\n       \"43       {u'login': u'Ark-kun'} 2019-05-17 01:16:28+00:00     791   \\n\",\n       \"44         {u'login': u'jlewi'} 2019-02-06 00:18:54+00:00     787   \\n\",\n       \"45         {u'login': u'jlewi'} 2019-02-01 05:22:36+00:00     766   \\n\",\n       \"46      {u'login': u'DmitryBe'} 2019-02-10 14:33:00+00:00     765   \\n\",\n       \"47         {u'login': u'jlewi'} 2019-01-31 07:51:57+00:00     357   \\n\",\n       \"48         {u'login': u'jlewi'} 2019-01-31 00:37:40+00:00    2354   \\n\",\n       \"49         {u'login': u'jlewi'} 2019-01-30 03:00:01+00:00     352   \\n\",\n       \"50      {u'login': u'dsdinter'} 2019-05-05 23:01:29+00:00     490   \\n\",\n       \"51       {u'login': u'Ark-kun'} 2019-01-26 01:19:56+00:00     713   \\n\",\n       \"52       {u'login': u'Ark-kun'} 2019-01-25 21:37:51+00:00     712   \\n\",\n       \"53         {u'login': u'jlewi'} 2019-01-18 02:09:39+00:00     702   \\n\",\n       \"54         {u'login': u'jlewi'} 2019-01-16 11:31:14+00:00     481   \\n\",\n       \"55         {u'login': u'jlewi'} 2019-01-15 23:02:13+00:00     688   \\n\",\n       \"56       {u'login': u'Ark-kun'} 2019-01-12 00:04:05+00:00     669   \\n\",\n       \"57         {u'login': u'jlewi'} 2019-01-11 03:27:45+00:00     668   \\n\",\n       \"58         {u'login': u'jlewi'} 2019-01-05 22:53:38+00:00     640   \\n\",\n       \"\\n\",\n       \"                                                title  \\\\\\n\",\n       \"68                    Add jeremiahkellick to org.yaml   \\n\",\n       \"70                               support frozen model   \\n\",\n       \"74  gcp cred bug fix for multiple credentials in s...   \\n\",\n       \"75            WIP Do not use /tmp/katib as host path.   \\n\",\n       \"80               templatize istio k8s version for aws   \\n\",\n       \"81  Update OWNERS file and make ingress configurab...   \\n\",\n       \"83                             add kkasravi to OWNERS   \\n\",\n       \"85  Add verb \\\"create\\\" for Secrets to ClusterRole \\\"...   \\n\",\n       \"86           fix #2863, postpone check kubeflow ready   \\n\",\n       \"88                                  seldon org update   \\n\",\n       \"89        basic-auth: make kflogin work with NodePort   \\n\",\n       \"90      add rd@seldon.io to member_organizations.yaml   \\n\",\n       \"92             Update github_users.json to the latest   \\n\",\n       \"93  WIP feat(suggestion): Define new API for sugge...   \\n\",\n       \"94         Decoupling DB interface from katib manager   \\n\",\n       \"95  update Getting Started / Kubfelow on Kubernete...   \\n\",\n       \"96                          PyTorch notebook examples   \\n\",\n       \"97                               Correct input height   \\n\",\n       \"99         Update Pipelines to version 0.1.18 (#3121)   \\n\",\n       \"0                                          add seldon   \\n\",\n       \"1         updating components and samples owners file   \\n\",\n       \"2   [KUBEFLOW-3136] Fix OAUTH requirement in gke u...   \\n\",\n       \"4                                    WIP don't review   \\n\",\n       \"5              Add emacs package to the Jupyter Image   \\n\",\n       \"6   [WIP] Initial attempt to migrate from react-sc...   \\n\",\n       \"9                               support request count   \\n\",\n       \"11                                    Update org.yaml   \\n\",\n       \"12              Add KUBEFLOW_KS_API_SPEC env variable   \\n\",\n       \"13  Update profile readme according to golang prof...   \\n\",\n       \"14  Enhanced readme for MNIST example to include w...   \\n\",\n       \"..                                                ...   \\n\",\n       \"28                                   Python migration   \\n\",\n       \"29                            Delete pod on lost node   \\n\",\n       \"30                  update dockerfile for power build   \\n\",\n       \"31                                    Update org.yaml   \\n\",\n       \"32  [Windows] Windows Scripts for Setting up Kubeflow   \\n\",\n       \"33                  Add test suit to upgrade pipeline   \\n\",\n       \"34  [WIP]Improved the sample Keras classifier comp...   \\n\",\n       \"36     Print verbose error when studyjob updates fail   \\n\",\n       \"37      Collecting coverage when running python tests   \\n\",\n       \"38                           Retry studyjobcontroller   \\n\",\n       \"39                   Update kubespawner property name   \\n\",\n       \"40                                          Vendoring   \\n\",\n       \"41                                           fix typo   \\n\",\n       \"42     DB: add studyjob table and extend worker table   \\n\",\n       \"43  SDK - Added support for raw input artifact arg...   \\n\",\n       \"44                                  Add GPU test back   \\n\",\n       \"45        Added AWS S3 support for storing artefacts.   \\n\",\n       \"46  Added configArtifactRepository method into `sd...   \\n\",\n       \"47                   DNM: check if kubeconfig is sane   \\n\",\n       \"48           Fix minikube setup script's df inference   \\n\",\n       \"49                                     Manual suggest   \\n\",\n       \"50               [pytorch_mnist] Automate image build   \\n\",\n       \"51   SDK/Components - Refactoring: Improved contai...   \\n\",\n       \"52  SDK/Components - Only convert TaskSpec to Cont...   \\n\",\n       \"53  SDK/Component - Added the ComponentReference.s...   \\n\",\n       \"54                           reduced number of layers   \\n\",\n       \"55  SDK/Components - Renamed fileOutputs to unconf...   \\n\",\n       \"56  SDK/Components  - Added Json Schema spec for t...   \\n\",\n       \"57         SDK - Update minimum Python version to 3.6   \\n\",\n       \"58   [WIP] Run Bazel build/tests as part of Travis CI   \\n\",\n       \"\\n\",\n       \"                   updatedAt  \\\\\\n\",\n       \"68 2019-05-29 16:56:10+00:00   \\n\",\n       \"70 2019-05-28 04:23:23+00:00   \\n\",\n       \"74 2019-05-24 10:07:10+00:00   \\n\",\n       \"75 2019-05-29 03:02:45+00:00   \\n\",\n       \"80 2019-05-23 18:45:23+00:00   \\n\",\n       \"81 2019-05-29 23:15:34+00:00   \\n\",\n       \"83 2019-05-18 14:47:23+00:00   \\n\",\n       \"85 2019-05-16 21:06:24+00:00   \\n\",\n       \"86 2019-05-16 19:49:23+00:00   \\n\",\n       \"88 2019-05-16 08:29:52+00:00   \\n\",\n       \"89 2019-05-18 17:53:55+00:00   \\n\",\n       \"90 2019-05-16 05:09:11+00:00   \\n\",\n       \"92 2019-05-14 12:54:17+00:00   \\n\",\n       \"93 2019-05-13 05:59:01+00:00   \\n\",\n       \"94 2019-05-27 18:16:21+00:00   \\n\",\n       \"95 2019-05-18 05:08:50+00:00   \\n\",\n       \"96 2019-05-10 01:11:21+00:00   \\n\",\n       \"97 2019-05-22 20:24:38+00:00   \\n\",\n       \"99 2019-05-02 22:17:52+00:00   \\n\",\n       \"0  2019-05-14 15:55:27+00:00   \\n\",\n       \"1  2019-05-03 05:13:38+00:00   \\n\",\n       \"2  2019-04-29 11:31:17+00:00   \\n\",\n       \"4  2019-04-26 23:16:24+00:00   \\n\",\n       \"5  2019-04-24 02:06:01+00:00   \\n\",\n       \"6  2019-05-03 01:52:17+00:00   \\n\",\n       \"9  2019-05-27 04:14:53+00:00   \\n\",\n       \"11 2019-04-17 21:16:39+00:00   \\n\",\n       \"12 2019-04-18 09:21:32+00:00   \\n\",\n       \"13 2019-05-19 00:52:06+00:00   \\n\",\n       \"14 2019-04-18 22:38:37+00:00   \\n\",\n       \"..                       ...   \\n\",\n       \"28 2019-05-14 08:00:44+00:00   \\n\",\n       \"29 2019-04-11 13:30:29+00:00   \\n\",\n       \"30 2019-04-24 09:02:36+00:00   \\n\",\n       \"31 2019-03-12 00:41:59+00:00   \\n\",\n       \"32 2019-05-09 23:03:20+00:00   \\n\",\n       \"33 2019-04-24 17:19:34+00:00   \\n\",\n       \"34 2019-03-07 07:59:06+00:00   \\n\",\n       \"36 2019-03-05 06:08:42+00:00   \\n\",\n       \"37 2019-04-25 00:56:00+00:00   \\n\",\n       \"38 2019-05-17 09:25:27+00:00   \\n\",\n       \"39 2019-04-25 05:02:36+00:00   \\n\",\n       \"40 2019-02-20 17:47:08+00:00   \\n\",\n       \"41 2019-02-26 23:12:45+00:00   \\n\",\n       \"42 2019-03-04 09:53:25+00:00   \\n\",\n       \"43 2019-05-23 01:24:26+00:00   \\n\",\n       \"44 2019-02-27 00:59:08+00:00   \\n\",\n       \"45 2019-04-27 18:19:11+00:00   \\n\",\n       \"46 2019-04-30 00:35:10+00:00   \\n\",\n       \"47 2019-02-01 07:07:05+00:00   \\n\",\n       \"48 2019-05-15 15:02:49+00:00   \\n\",\n       \"49 2019-02-07 08:17:41+00:00   \\n\",\n       \"50 2019-05-08 15:11:21+00:00   \\n\",\n       \"51 2019-03-30 08:36:35+00:00   \\n\",\n       \"52 2019-03-30 08:38:57+00:00   \\n\",\n       \"53 2019-03-06 21:50:37+00:00   \\n\",\n       \"54 2019-03-06 17:21:10+00:00   \\n\",\n       \"55 2019-01-21 07:14:25+00:00   \\n\",\n       \"56 2019-05-21 23:19:57+00:00   \\n\",\n       \"57 2019-04-25 23:41:41+00:00   \\n\",\n       \"58 2019-01-11 21:40:24+00:00   \\n\",\n       \"\\n\",\n       \"                                                  url  creationAge  \\\\\\n\",\n       \"68  https://github.com/kubeflow/internal-acls/pull...          197   \\n\",\n       \"70  https://github.com/kubeflow/batch-predict/pull/20          233   \\n\",\n       \"74    https://github.com/kubeflow/pipelines/pull/1384          323   \\n\",\n       \"75         https://github.com/kubeflow/katib/pull/586          325   \\n\",\n       \"80     https://github.com/kubeflow/kubeflow/pull/3340          358   \\n\",\n       \"81     https://github.com/kubeflow/kubeflow/pull/3337          359   \\n\",\n       \"83     https://github.com/kubeflow/kubeflow/pull/3311          462   \\n\",\n       \"85     https://github.com/kubeflow/kubeflow/pull/3294          511   \\n\",\n       \"86     https://github.com/kubeflow/kubeflow/pull/3290          515   \\n\",\n       \"88  https://github.com/kubeflow/internal-acls/pull...          517   \\n\",\n       \"89     https://github.com/kubeflow/kubeflow/pull/3278          531   \\n\",\n       \"90     https://github.com/kubeflow/community/pull/269          532   \\n\",\n       \"92     https://github.com/kubeflow/community/pull/267          560   \\n\",\n       \"93         https://github.com/kubeflow/katib/pull/500          595   \\n\",\n       \"94         https://github.com/kubeflow/katib/pull/498          627   \\n\",\n       \"95       https://github.com/kubeflow/website/pull/695          658   \\n\",\n       \"96       https://github.com/kubeflow/fairing/pull/241          668   \\n\",\n       \"97    https://github.com/kubeflow/pipelines/pull/1294          723   \\n\",\n       \"99     https://github.com/kubeflow/kubeflow/pull/3179          840   \\n\",\n       \"0       https://github.com/kubeflow/manifests/pull/36          890   \\n\",\n       \"1     https://github.com/kubeflow/pipelines/pull/1264          902   \\n\",\n       \"2      https://github.com/kubeflow/kubeflow/pull/3137          922   \\n\",\n       \"4      https://github.com/kubeflow/kubeflow/pull/3114         1008   \\n\",\n       \"5      https://github.com/kubeflow/kubeflow/pull/3089         1055   \\n\",\n       \"6     https://github.com/kubeflow/pipelines/pull/1208         1056   \\n\",\n       \"9          https://github.com/kubeflow/katib/pull/458         1190   \\n\",\n       \"11  https://github.com/kubeflow/internal-acls/pull/83         1200   \\n\",\n       \"12     https://github.com/kubeflow/kubeflow/pull/3040         1212   \\n\",\n       \"13     https://github.com/kubeflow/kubeflow/pull/3039         1215   \\n\",\n       \"14      https://github.com/kubeflow/examples/pull/543         1220   \\n\",\n       \"..                                                ...          ...   \\n\",\n       \"28         https://github.com/kubeflow/katib/pull/435         1969   \\n\",\n       \"29   https://github.com/kubeflow/tf-operator/pull/959         2049   \\n\",\n       \"30         https://github.com/kubeflow/katib/pull/430         2052   \\n\",\n       \"31  https://github.com/kubeflow/internal-acls/pull/71         2084   \\n\",\n       \"32     https://github.com/kubeflow/kubeflow/pull/2650         2195   \\n\",\n       \"33     https://github.com/kubeflow/pipelines/pull/918         2228   \\n\",\n       \"34     https://github.com/kubeflow/pipelines/pull/912         2232   \\n\",\n       \"36         https://github.com/kubeflow/katib/pull/417         2274   \\n\",\n       \"37     https://github.com/kubeflow/pipelines/pull/898         2326   \\n\",\n       \"38         https://github.com/kubeflow/katib/pull/411         2413   \\n\",\n       \"39     https://github.com/kubeflow/kubeflow/pull/2508         2568   \\n\",\n       \"40         https://github.com/kubeflow/katib/pull/385         2668   \\n\",\n       \"41      https://github.com/kubeflow/examples/pull/502         2867   \\n\",\n       \"42         https://github.com/kubeflow/katib/pull/362         2869   \\n\",\n       \"43     https://github.com/kubeflow/pipelines/pull/791         2870   \\n\",\n       \"44     https://github.com/kubeflow/pipelines/pull/787         2901   \\n\",\n       \"45     https://github.com/kubeflow/pipelines/pull/766         3016   \\n\",\n       \"46     https://github.com/kubeflow/pipelines/pull/765         3016   \\n\",\n       \"47         https://github.com/kubeflow/katib/pull/357         3037   \\n\",\n       \"48     https://github.com/kubeflow/kubeflow/pull/2354         3044   \\n\",\n       \"49         https://github.com/kubeflow/katib/pull/352         3066   \\n\",\n       \"50      https://github.com/kubeflow/examples/pull/490         3122   \\n\",\n       \"51     https://github.com/kubeflow/pipelines/pull/713         3278   \\n\",\n       \"52     https://github.com/kubeflow/pipelines/pull/712         3278   \\n\",\n       \"53     https://github.com/kubeflow/pipelines/pull/702         3355   \\n\",\n       \"54      https://github.com/kubeflow/examples/pull/481         3394   \\n\",\n       \"55     https://github.com/kubeflow/pipelines/pull/688         3406   \\n\",\n       \"56     https://github.com/kubeflow/pipelines/pull/669         3505   \\n\",\n       \"57     https://github.com/kubeflow/pipelines/pull/668         3522   \\n\",\n       \"58     https://github.com/kubeflow/pipelines/pull/640         3646   \\n\",\n       \"\\n\",\n       \"    lastEditAge  updateAge  \\n\",\n       \"68        197.0        196  \\n\",\n       \"70        233.0        233  \\n\",\n       \"74        323.0        323  \\n\",\n       \"75        325.0        210  \\n\",\n       \"80        358.0        338  \\n\",\n       \"81        358.0        190  \\n\",\n       \"83        462.0        462  \\n\",\n       \"85        511.0        504  \\n\",\n       \"86        515.0        505  \\n\",\n       \"88        517.0        517  \\n\",\n       \"89        531.0        459  \\n\",\n       \"90        532.0        520  \\n\",\n       \"92        560.0        560  \\n\",\n       \"93        595.0        591  \\n\",\n       \"94        627.0        243  \\n\",\n       \"95        658.0        472  \\n\",\n       \"96        668.0        668  \\n\",\n       \"97        723.0        361  \\n\",\n       \"99        840.0        839  \\n\",\n       \"0         890.0        557  \\n\",\n       \"1         902.0        832  \\n\",\n       \"2         922.0        922  \\n\",\n       \"4        1008.0        982  \\n\",\n       \"5        1055.0       1051  \\n\",\n       \"6        1056.0        835  \\n\",\n       \"9        1190.0        257  \\n\",\n       \"11       1200.0       1200  \\n\",\n       \"12       1212.0       1188  \\n\",\n       \"13       1215.0        452  \\n\",\n       \"14       1220.0       1174  \\n\",\n       \"..          ...        ...  \\n\",\n       \"28       1969.0        565  \\n\",\n       \"29       2049.0       1352  \\n\",\n       \"30       2052.0       1044  \\n\",\n       \"31       2084.0       2084  \\n\",\n       \"32       2195.0        670  \\n\",\n       \"33       2228.0       1036  \\n\",\n       \"34       2232.0       2197  \\n\",\n       \"36       2274.0       2247  \\n\",\n       \"37       2316.0       1028  \\n\",\n       \"38       2413.0        492  \\n\",\n       \"39       2568.0       1024  \\n\",\n       \"40       2668.0       2547  \\n\",\n       \"41       2867.0       2398  \\n\",\n       \"42       2869.0       2267  \\n\",\n       \"43        500.0        356  \\n\",\n       \"44       2901.0       2396  \\n\",\n       \"45       3016.0        963  \\n\",\n       \"46       2791.0        909  \\n\",\n       \"47       3037.0       3014  \\n\",\n       \"48       3044.0        534  \\n\",\n       \"49       3066.0       2869  \\n\",\n       \"50        766.0        702  \\n\",\n       \"51       3164.0       1644  \\n\",\n       \"52       3167.0       1644  \\n\",\n       \"53       3355.0       2207  \\n\",\n       \"54       3394.0       2212  \\n\",\n       \"55       3406.0       3278  \\n\",\n       \"56       3501.0        382  \\n\",\n       \"57       3522.0       1005  \\n\",\n       \"58       3646.0       3503  \\n\",\n       \"\\n\",\n       \"[71 rows x 11 columns]\"\n      ]\n     },\n     \"execution_count\": 78,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"needs_attention[(needs_attention.lastEditAge > MAX_QUIET_TIME*1.0) &  (needs_attention.updateAge > MAX_QUIET_TIME)]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# PRs whcih have been open for over a mounth\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 80,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>author</th>\\n\",\n       \"      <th>createdAt</th>\\n\",\n       \"      <th>editor</th>\\n\",\n       \"      <th>lastEditedAt</th>\\n\",\n       \"      <th>number</th>\\n\",\n       \"      <th>title</th>\\n\",\n       \"      <th>updatedAt</th>\\n\",\n       \"      <th>url</th>\\n\",\n       \"      <th>creationAge</th>\\n\",\n       \"      <th>lastEditAge</th>\\n\",\n       \"      <th>updateAge</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>97</th>\\n\",\n       \"      <td>{u'login': u'rileyjbauer'}</td>\\n\",\n       \"      <td>2019-05-07 17:40:05+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-07 17:40:13+00:00</td>\\n\",\n       \"      <td>1294</td>\\n\",\n       \"      <td>Correct input height</td>\\n\",\n       \"      <td>2019-05-22 20:24:38+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1294</td>\\n\",\n       \"      <td>723</td>\\n\",\n       \"      <td>723.0</td>\\n\",\n       \"      <td>361</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>98</th>\\n\",\n       \"      <td>{u'login': u'yaronha'}</td>\\n\",\n       \"      <td>2019-05-07 13:59:51+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-07 14:00:01+00:00</td>\\n\",\n       \"      <td>1293</td>\\n\",\n       \"      <td>add support for flexible config (via env var) ...</td>\\n\",\n       \"      <td>2019-06-05 21:38:03+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1293</td>\\n\",\n       \"      <td>727</td>\\n\",\n       \"      <td>727.0</td>\\n\",\n       \"      <td>23</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>99</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-05-02 21:26:09+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-05-02 21:26:20+00:00</td>\\n\",\n       \"      <td>3179</td>\\n\",\n       \"      <td>Update Pipelines to version 0.1.18 (#3121)</td>\\n\",\n       \"      <td>2019-05-02 22:17:52+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3179</td>\\n\",\n       \"      <td>840</td>\\n\",\n       \"      <td>840.0</td>\\n\",\n       \"      <td>839</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>{u'login': u'cliveseldon'}</td>\\n\",\n       \"      <td>2019-04-30 18:49:30+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-30 18:49:37+00:00</td>\\n\",\n       \"      <td>36</td>\\n\",\n       \"      <td>add seldon</td>\\n\",\n       \"      <td>2019-05-14 15:55:27+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/manifests/pull/36</td>\\n\",\n       \"      <td>890</td>\\n\",\n       \"      <td>890.0</td>\\n\",\n       \"      <td>557</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>{u'login': u'animeshsingh'}</td>\\n\",\n       \"      <td>2019-04-30 07:04:30+00:00</td>\\n\",\n       \"      <td>{u'login': u'animeshsingh'}</td>\\n\",\n       \"      <td>2019-04-30 07:19:09+00:00</td>\\n\",\n       \"      <td>1264</td>\\n\",\n       \"      <td>updating components and samples owners file</td>\\n\",\n       \"      <td>2019-05-03 05:13:38+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1264</td>\\n\",\n       \"      <td>902</td>\\n\",\n       \"      <td>902.0</td>\\n\",\n       \"      <td>832</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>{u'login': u'holdenk'}</td>\\n\",\n       \"      <td>2019-04-29 11:31:03+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-29 11:31:09+00:00</td>\\n\",\n       \"      <td>3137</td>\\n\",\n       \"      <td>[KUBEFLOW-3136] Fix OAUTH requirement in gke u...</td>\\n\",\n       \"      <td>2019-04-29 11:31:17+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3137</td>\\n\",\n       \"      <td>922</td>\\n\",\n       \"      <td>922.0</td>\\n\",\n       \"      <td>922</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>{u'login': u'jingzhang36'}</td>\\n\",\n       \"      <td>2019-04-25 22:16:11+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-25 22:16:16+00:00</td>\\n\",\n       \"      <td>1237</td>\\n\",\n       \"      <td>Add a helper function to create tensorboard crd</td>\\n\",\n       \"      <td>2019-05-31 07:21:34+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1237</td>\\n\",\n       \"      <td>1007</td>\\n\",\n       \"      <td>1007.0</td>\\n\",\n       \"      <td>158</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>{u'login': u'lluunn'}</td>\\n\",\n       \"      <td>2019-04-25 21:16:54+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-25 21:17:06+00:00</td>\\n\",\n       \"      <td>3114</td>\\n\",\n       \"      <td>WIP don't review</td>\\n\",\n       \"      <td>2019-04-26 23:16:24+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3114</td>\\n\",\n       \"      <td>1008</td>\\n\",\n       \"      <td>1008.0</td>\\n\",\n       \"      <td>982</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>{u'login': u'rohithreddy'}</td>\\n\",\n       \"      <td>2019-04-23 22:23:26+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-23 22:23:33+00:00</td>\\n\",\n       \"      <td>3089</td>\\n\",\n       \"      <td>Add emacs package to the Jupyter Image</td>\\n\",\n       \"      <td>2019-04-24 02:06:01+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3089</td>\\n\",\n       \"      <td>1055</td>\\n\",\n       \"      <td>1055.0</td>\\n\",\n       \"      <td>1051</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>{u'login': u'rileyjbauer'}</td>\\n\",\n       \"      <td>2019-04-23 21:23:26+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-23 21:23:32+00:00</td>\\n\",\n       \"      <td>1208</td>\\n\",\n       \"      <td>[WIP] Initial attempt to migrate from react-sc...</td>\\n\",\n       \"      <td>2019-05-03 01:52:17+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1208</td>\\n\",\n       \"      <td>1056</td>\\n\",\n       \"      <td>1056.0</td>\\n\",\n       \"      <td>835</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-04-22 22:29:35+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-22 22:29:45+00:00</td>\\n\",\n       \"      <td>1200</td>\\n\",\n       \"      <td>SDK - Improved test script compatibility with ...</td>\\n\",\n       \"      <td>2019-06-05 23:13:36+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1200</td>\\n\",\n       \"      <td>1079</td>\\n\",\n       \"      <td>1079.0</td>\\n\",\n       \"      <td>22</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>{u'login': u'swiftdiaries'}</td>\\n\",\n       \"      <td>2019-04-19 18:59:56+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-19 19:00:09+00:00</td>\\n\",\n       \"      <td>3060</td>\\n\",\n       \"      <td>kfctl go binary - kustomize e2e test</td>\\n\",\n       \"      <td>2019-06-06 01:45:36+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3060</td>\\n\",\n       \"      <td>1154</td>\\n\",\n       \"      <td>1154.0</td>\\n\",\n       \"      <td>19</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>{u'login': u'wukong1992'}</td>\\n\",\n       \"      <td>2019-04-18 06:40:38+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-18 06:40:44+00:00</td>\\n\",\n       \"      <td>458</td>\\n\",\n       \"      <td>support request count</td>\\n\",\n       \"      <td>2019-05-27 04:14:53+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/458</td>\\n\",\n       \"      <td>1190</td>\\n\",\n       \"      <td>1190.0</td>\\n\",\n       \"      <td>257</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>{u'login': u'kunmingg'}</td>\\n\",\n       \"      <td>2019-04-18 02:27:27+00:00</td>\\n\",\n       \"      <td>{u'login': u'kunmingg'}</td>\\n\",\n       \"      <td>2019-04-26 03:43:18+00:00</td>\\n\",\n       \"      <td>3045</td>\\n\",\n       \"      <td>add kfctl to deploy app backend</td>\\n\",\n       \"      <td>2019-06-05 00:03:56+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3045</td>\\n\",\n       \"      <td>1195</td>\\n\",\n       \"      <td>1001.0</td>\\n\",\n       \"      <td>45</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>{u'login': u'TheOtherOsama'}</td>\\n\",\n       \"      <td>2019-04-17 21:15:19+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-17 21:15:24+00:00</td>\\n\",\n       \"      <td>83</td>\\n\",\n       \"      <td>Update org.yaml</td>\\n\",\n       \"      <td>2019-04-17 21:16:39+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/internal-acls/pull/83</td>\\n\",\n       \"      <td>1200</td>\\n\",\n       \"      <td>1200.0</td>\\n\",\n       \"      <td>1200</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>{u'login': u'royxue'}</td>\\n\",\n       \"      <td>2019-04-17 09:01:29+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-17 09:01:38+00:00</td>\\n\",\n       \"      <td>3040</td>\\n\",\n       \"      <td>Add KUBEFLOW_KS_API_SPEC env variable</td>\\n\",\n       \"      <td>2019-04-18 09:21:32+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3040</td>\\n\",\n       \"      <td>1212</td>\\n\",\n       \"      <td>1212.0</td>\\n\",\n       \"      <td>1188</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>{u'login': u'stpabhi'}</td>\\n\",\n       \"      <td>2019-04-17 05:58:06+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-17 05:58:15+00:00</td>\\n\",\n       \"      <td>3039</td>\\n\",\n       \"      <td>Update profile readme according to golang prof...</td>\\n\",\n       \"      <td>2019-05-19 00:52:06+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3039</td>\\n\",\n       \"      <td>1215</td>\\n\",\n       \"      <td>1215.0</td>\\n\",\n       \"      <td>452</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>{u'login': u'mnmainguy'}</td>\\n\",\n       \"      <td>2019-04-17 00:54:15+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-17 00:54:20+00:00</td>\\n\",\n       \"      <td>543</td>\\n\",\n       \"      <td>Enhanced readme for MNIST example to include w...</td>\\n\",\n       \"      <td>2019-04-18 22:38:37+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/examples/pull/543</td>\\n\",\n       \"      <td>1220</td>\\n\",\n       \"      <td>1220.0</td>\\n\",\n       \"      <td>1174</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>{u'login': u'animeshsingh'}</td>\\n\",\n       \"      <td>2019-04-16 02:47:59+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-16 02:48:08+00:00</td>\\n\",\n       \"      <td>12</td>\\n\",\n       \"      <td>adding animeshsingh as reviewer</td>\\n\",\n       \"      <td>2019-04-17 01:44:39+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/metadata/pull/12</td>\\n\",\n       \"      <td>1242</td>\\n\",\n       \"      <td>1242.0</td>\\n\",\n       \"      <td>1219</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>{u'login': u'swiftdiaries'}</td>\\n\",\n       \"      <td>2019-04-15 23:51:32+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-15 23:51:38+00:00</td>\\n\",\n       \"      <td>3026</td>\\n\",\n       \"      <td>[WIP] adds kfctl onprem</td>\\n\",\n       \"      <td>2019-04-16 00:25:06+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/3026</td>\\n\",\n       \"      <td>1245</td>\\n\",\n       \"      <td>1245.0</td>\\n\",\n       \"      <td>1245</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>{u'login': u'hamelsmu'}</td>\\n\",\n       \"      <td>2019-04-13 20:08:28+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-13 20:08:34+00:00</td>\\n\",\n       \"      <td>256</td>\\n\",\n       \"      <td>Patch 3</td>\\n\",\n       \"      <td>2019-04-13 20:50:48+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/community/pull/256</td>\\n\",\n       \"      <td>1297</td>\\n\",\n       \"      <td>1297.0</td>\\n\",\n       \"      <td>1296</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-04-11 22:46:27+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-11 22:46:32+00:00</td>\\n\",\n       \"      <td>1145</td>\\n\",\n       \"      <td>[WIP]Reduce noise in Prow tests</td>\\n\",\n       \"      <td>2019-04-23 21:04:31+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1145</td>\\n\",\n       \"      <td>1342</td>\\n\",\n       \"      <td>1342.0</td>\\n\",\n       \"      <td>1056</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>{u'login': u'mrkm4ntr'}</td>\\n\",\n       \"      <td>2019-04-10 05:34:41+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-10 05:34:46+00:00</td>\\n\",\n       \"      <td>2987</td>\\n\",\n       \"      <td>Add model status endpoint to http-proxy</td>\\n\",\n       \"      <td>2019-04-12 02:15:46+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/2987</td>\\n\",\n       \"      <td>1384</td>\\n\",\n       \"      <td>1384.0</td>\\n\",\n       \"      <td>1339</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-04-10 01:41:04+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-10 01:41:09+00:00</td>\\n\",\n       \"      <td>1125</td>\\n\",\n       \"      <td>Preserving component spec on ContainerOp</td>\\n\",\n       \"      <td>2019-05-03 20:16:12+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1125</td>\\n\",\n       \"      <td>1387</td>\\n\",\n       \"      <td>1387.0</td>\\n\",\n       \"      <td>817</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>{u'login': u'KingOnTheStar'}</td>\\n\",\n       \"      <td>2019-04-03 12:13:48+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-04-03 12:13:52+00:00</td>\\n\",\n       \"      <td>246</td>\\n\",\n       \"      <td>Add KingOnTheStar to kubeflow.member, he is wo...</td>\\n\",\n       \"      <td>2019-04-03 12:14:02+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/community/pull/246</td>\\n\",\n       \"      <td>1545</td>\\n\",\n       \"      <td>1545.0</td>\\n\",\n       \"      <td>1545</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>{u'login': u'Svendegroote91'}</td>\\n\",\n       \"      <td>2019-04-01 18:25:41+00:00</td>\\n\",\n       \"      <td>{u'login': u'Svendegroote91'}</td>\\n\",\n       \"      <td>2019-04-01 18:35:45+00:00</td>\\n\",\n       \"      <td>535</td>\\n\",\n       \"      <td>[Financial Time Series] Update example to v0.4...</td>\\n\",\n       \"      <td>2019-06-05 19:16:51+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/examples/pull/535</td>\\n\",\n       \"      <td>1587</td>\\n\",\n       \"      <td>1587.0</td>\\n\",\n       \"      <td>26</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>{u'login': u'cliveseldon'}</td>\\n\",\n       \"      <td>2019-03-29 18:06:44+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-29 18:06:48+00:00</td>\\n\",\n       \"      <td>243</td>\\n\",\n       \"      <td>Add Clive from Seldon to members.yaml</td>\\n\",\n       \"      <td>2019-03-29 18:06:57+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/community/pull/243</td>\\n\",\n       \"      <td>1659</td>\\n\",\n       \"      <td>1659.0</td>\\n\",\n       \"      <td>1659</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>24</th>\\n\",\n       \"      <td>{u'login': u'Akado2009'}</td>\\n\",\n       \"      <td>2019-03-26 03:28:20+00:00</td>\\n\",\n       \"      <td>{u'login': u'Akado2009'}</td>\\n\",\n       \"      <td>2019-03-27 01:08:02+00:00</td>\\n\",\n       \"      <td>438</td>\\n\",\n       \"      <td>WIP: New UI</td>\\n\",\n       \"      <td>2019-04-25 23:44:58+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/438</td>\\n\",\n       \"      <td>1746</td>\\n\",\n       \"      <td>1724.0</td>\\n\",\n       \"      <td>1005</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>25</th>\\n\",\n       \"      <td>{u'login': u'elviraux'}</td>\\n\",\n       \"      <td>2019-03-26 00:18:37+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-26 00:18:41+00:00</td>\\n\",\n       \"      <td>2808</td>\\n\",\n       \"      <td>[WIP] Improved kubeflow readme intro</td>\\n\",\n       \"      <td>2019-03-26 00:18:58+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/2808</td>\\n\",\n       \"      <td>1749</td>\\n\",\n       \"      <td>1749.0</td>\\n\",\n       \"      <td>1749</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>26</th>\\n\",\n       \"      <td>{u'login': u'neuromage'}</td>\\n\",\n       \"      <td>2019-03-24 20:22:24+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-24 20:22:33+00:00</td>\\n\",\n       \"      <td>1031</td>\\n\",\n       \"      <td>Use Remote Build Execution for Bazel builds.</td>\\n\",\n       \"      <td>2019-06-06 00:35:37+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/1031</td>\\n\",\n       \"      <td>1777</td>\\n\",\n       \"      <td>1777.0</td>\\n\",\n       \"      <td>21</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>{u'login': u'zionwu'}</td>\\n\",\n       \"      <td>2019-03-13 12:20:46+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-13 12:20:52+00:00</td>\\n\",\n       \"      <td>959</td>\\n\",\n       \"      <td>Delete pod on lost node</td>\\n\",\n       \"      <td>2019-04-11 13:30:29+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/tf-operator/pull/959</td>\\n\",\n       \"      <td>2049</td>\\n\",\n       \"      <td>2049.0</td>\\n\",\n       \"      <td>1352</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>{u'login': u'dreamryx'}</td>\\n\",\n       \"      <td>2019-03-13 08:49:35+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-13 08:49:40+00:00</td>\\n\",\n       \"      <td>430</td>\\n\",\n       \"      <td>update dockerfile for power build</td>\\n\",\n       \"      <td>2019-04-24 09:02:36+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/430</td>\\n\",\n       \"      <td>2052</td>\\n\",\n       \"      <td>2052.0</td>\\n\",\n       \"      <td>1044</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>31</th>\\n\",\n       \"      <td>{u'login': u'animeshsingh'}</td>\\n\",\n       \"      <td>2019-03-12 00:41:45+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-12 00:41:50+00:00</td>\\n\",\n       \"      <td>71</td>\\n\",\n       \"      <td>Update org.yaml</td>\\n\",\n       \"      <td>2019-03-12 00:41:59+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/internal-acls/pull/71</td>\\n\",\n       \"      <td>2084</td>\\n\",\n       \"      <td>2084.0</td>\\n\",\n       \"      <td>2084</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>32</th>\\n\",\n       \"      <td>{u'login': u'avdaredevil'}</td>\\n\",\n       \"      <td>2019-03-07 09:39:43+00:00</td>\\n\",\n       \"      <td>{u'login': u'avdaredevil'}</td>\\n\",\n       \"      <td>2019-03-07 09:47:58+00:00</td>\\n\",\n       \"      <td>2650</td>\\n\",\n       \"      <td>[Windows] Windows Scripts for Setting up Kubeflow</td>\\n\",\n       \"      <td>2019-05-09 23:03:20+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/2650</td>\\n\",\n       \"      <td>2195</td>\\n\",\n       \"      <td>2195.0</td>\\n\",\n       \"      <td>670</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>33</th>\\n\",\n       \"      <td>{u'login': u'IronPan'}</td>\\n\",\n       \"      <td>2019-03-06 00:39:35+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-06 00:39:42+00:00</td>\\n\",\n       \"      <td>918</td>\\n\",\n       \"      <td>Add test suit to upgrade pipeline</td>\\n\",\n       \"      <td>2019-04-24 17:19:34+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/918</td>\\n\",\n       \"      <td>2228</td>\\n\",\n       \"      <td>2228.0</td>\\n\",\n       \"      <td>1036</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>34</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-03-05 21:33:50+00:00</td>\\n\",\n       \"      <td>{u'login': u'IronPan'}</td>\\n\",\n       \"      <td>2019-03-05 21:33:58+00:00</td>\\n\",\n       \"      <td>912</td>\\n\",\n       \"      <td>[WIP]Improved the sample Keras classifier comp...</td>\\n\",\n       \"      <td>2019-03-07 07:59:06+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/912</td>\\n\",\n       \"      <td>2232</td>\\n\",\n       \"      <td>2232.0</td>\\n\",\n       \"      <td>2197</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>35</th>\\n\",\n       \"      <td>{u'login': u'lluunn'}</td>\\n\",\n       \"      <td>2019-03-04 21:47:17+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-04 21:47:26+00:00</td>\\n\",\n       \"      <td>2616</td>\\n\",\n       \"      <td>WIP</td>\\n\",\n       \"      <td>2019-06-02 22:23:26+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/2616</td>\\n\",\n       \"      <td>2255</td>\\n\",\n       \"      <td>2255.0</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>36</th>\\n\",\n       \"      <td>{u'login': u'toshiiw'}</td>\\n\",\n       \"      <td>2019-03-04 02:42:22+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-03-04 02:42:27+00:00</td>\\n\",\n       \"      <td>417</td>\\n\",\n       \"      <td>Print verbose error when studyjob updates fail</td>\\n\",\n       \"      <td>2019-03-05 06:08:42+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/417</td>\\n\",\n       \"      <td>2274</td>\\n\",\n       \"      <td>2274.0</td>\\n\",\n       \"      <td>2247</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>37</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-03-01 23:16:42+00:00</td>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-03-02 08:44:49+00:00</td>\\n\",\n       \"      <td>898</td>\\n\",\n       \"      <td>Collecting coverage when running python tests</td>\\n\",\n       \"      <td>2019-04-25 00:56:00+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/898</td>\\n\",\n       \"      <td>2326</td>\\n\",\n       \"      <td>2316.0</td>\\n\",\n       \"      <td>1028</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>38</th>\\n\",\n       \"      <td>{u'login': u'toshiiw'}</td>\\n\",\n       \"      <td>2019-02-26 08:04:33+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-26 08:04:38+00:00</td>\\n\",\n       \"      <td>411</td>\\n\",\n       \"      <td>Retry studyjobcontroller</td>\\n\",\n       \"      <td>2019-05-17 09:25:27+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/411</td>\\n\",\n       \"      <td>2413</td>\\n\",\n       \"      <td>2413.0</td>\\n\",\n       \"      <td>492</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>39</th>\\n\",\n       \"      <td>{u'login': u'knkski'}</td>\\n\",\n       \"      <td>2019-02-19 21:27:13+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-19 21:27:22+00:00</td>\\n\",\n       \"      <td>2508</td>\\n\",\n       \"      <td>Update kubespawner property name</td>\\n\",\n       \"      <td>2019-04-25 05:02:36+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/2508</td>\\n\",\n       \"      <td>2568</td>\\n\",\n       \"      <td>2568.0</td>\\n\",\n       \"      <td>1024</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>40</th>\\n\",\n       \"      <td>{u'login': u'jayunit100'}</td>\\n\",\n       \"      <td>2019-02-15 16:59:16+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-15 16:59:28+00:00</td>\\n\",\n       \"      <td>385</td>\\n\",\n       \"      <td>Vendoring</td>\\n\",\n       \"      <td>2019-02-20 17:47:08+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/385</td>\\n\",\n       \"      <td>2668</td>\\n\",\n       \"      <td>2668.0</td>\\n\",\n       \"      <td>2547</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>41</th>\\n\",\n       \"      <td>{u'login': u'yehiyam'}</td>\\n\",\n       \"      <td>2019-02-07 10:33:40+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-07 10:33:49+00:00</td>\\n\",\n       \"      <td>502</td>\\n\",\n       \"      <td>fix typo</td>\\n\",\n       \"      <td>2019-02-26 23:12:45+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/examples/pull/502</td>\\n\",\n       \"      <td>2867</td>\\n\",\n       \"      <td>2867.0</td>\\n\",\n       \"      <td>2398</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>42</th>\\n\",\n       \"      <td>{u'login': u'YujiOshima'}</td>\\n\",\n       \"      <td>2019-02-07 08:14:16+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-07 08:14:22+00:00</td>\\n\",\n       \"      <td>362</td>\\n\",\n       \"      <td>DB: add studyjob table and extend worker table</td>\\n\",\n       \"      <td>2019-03-04 09:53:25+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/362</td>\\n\",\n       \"      <td>2869</td>\\n\",\n       \"      <td>2869.0</td>\\n\",\n       \"      <td>2267</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>43</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-02-07 07:30:11+00:00</td>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-05-17 01:16:28+00:00</td>\\n\",\n       \"      <td>791</td>\\n\",\n       \"      <td>SDK - Added support for raw input artifact arg...</td>\\n\",\n       \"      <td>2019-05-23 01:24:26+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/791</td>\\n\",\n       \"      <td>2870</td>\\n\",\n       \"      <td>500.0</td>\\n\",\n       \"      <td>356</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>44</th>\\n\",\n       \"      <td>{u'login': u'hongye-sun'}</td>\\n\",\n       \"      <td>2019-02-06 00:18:49+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-06 00:18:54+00:00</td>\\n\",\n       \"      <td>787</td>\\n\",\n       \"      <td>Add GPU test back</td>\\n\",\n       \"      <td>2019-02-27 00:59:08+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/787</td>\\n\",\n       \"      <td>2901</td>\\n\",\n       \"      <td>2901.0</td>\\n\",\n       \"      <td>2396</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>45</th>\\n\",\n       \"      <td>{u'login': u'DmitryBe'}</td>\\n\",\n       \"      <td>2019-02-01 05:22:32+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-02-01 05:22:36+00:00</td>\\n\",\n       \"      <td>766</td>\\n\",\n       \"      <td>Added AWS S3 support for storing artefacts.</td>\\n\",\n       \"      <td>2019-04-27 18:19:11+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/766</td>\\n\",\n       \"      <td>3016</td>\\n\",\n       \"      <td>3016.0</td>\\n\",\n       \"      <td>963</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>46</th>\\n\",\n       \"      <td>{u'login': u'DmitryBe'}</td>\\n\",\n       \"      <td>2019-02-01 05:18:20+00:00</td>\\n\",\n       \"      <td>{u'login': u'DmitryBe'}</td>\\n\",\n       \"      <td>2019-02-10 14:33:00+00:00</td>\\n\",\n       \"      <td>765</td>\\n\",\n       \"      <td>Added configArtifactRepository method into `sd...</td>\\n\",\n       \"      <td>2019-04-30 00:35:10+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/765</td>\\n\",\n       \"      <td>3016</td>\\n\",\n       \"      <td>2791.0</td>\\n\",\n       \"      <td>909</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>47</th>\\n\",\n       \"      <td>{u'login': u'toshiiw'}</td>\\n\",\n       \"      <td>2019-01-31 07:51:52+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-31 07:51:57+00:00</td>\\n\",\n       \"      <td>357</td>\\n\",\n       \"      <td>DNM: check if kubeconfig is sane</td>\\n\",\n       \"      <td>2019-02-01 07:07:05+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/357</td>\\n\",\n       \"      <td>3037</td>\\n\",\n       \"      <td>3037.0</td>\\n\",\n       \"      <td>3014</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>48</th>\\n\",\n       \"      <td>{u'login': u'TimZaman'}</td>\\n\",\n       \"      <td>2019-01-31 00:37:31+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-31 00:37:40+00:00</td>\\n\",\n       \"      <td>2354</td>\\n\",\n       \"      <td>Fix minikube setup script's df inference</td>\\n\",\n       \"      <td>2019-05-15 15:02:49+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/kubeflow/pull/2354</td>\\n\",\n       \"      <td>3044</td>\\n\",\n       \"      <td>3044.0</td>\\n\",\n       \"      <td>534</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>49</th>\\n\",\n       \"      <td>{u'login': u'YujiOshima'}</td>\\n\",\n       \"      <td>2019-01-30 02:59:51+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-30 03:00:01+00:00</td>\\n\",\n       \"      <td>352</td>\\n\",\n       \"      <td>Manual suggest</td>\\n\",\n       \"      <td>2019-02-07 08:17:41+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/katib/pull/352</td>\\n\",\n       \"      <td>3066</td>\\n\",\n       \"      <td>3066.0</td>\\n\",\n       \"      <td>2869</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>50</th>\\n\",\n       \"      <td>{u'login': u'dsdinter'}</td>\\n\",\n       \"      <td>2019-01-27 18:37:42+00:00</td>\\n\",\n       \"      <td>{u'login': u'dsdinter'}</td>\\n\",\n       \"      <td>2019-05-05 23:01:29+00:00</td>\\n\",\n       \"      <td>490</td>\\n\",\n       \"      <td>[pytorch_mnist] Automate image build</td>\\n\",\n       \"      <td>2019-05-08 15:11:21+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/examples/pull/490</td>\\n\",\n       \"      <td>3122</td>\\n\",\n       \"      <td>766.0</td>\\n\",\n       \"      <td>702</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>51</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-21 07:19:10+00:00</td>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-26 01:19:56+00:00</td>\\n\",\n       \"      <td>713</td>\\n\",\n       \"      <td>SDK/Components - Refactoring: Improved contai...</td>\\n\",\n       \"      <td>2019-03-30 08:36:35+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/713</td>\\n\",\n       \"      <td>3278</td>\\n\",\n       \"      <td>3164.0</td>\\n\",\n       \"      <td>1644</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>52</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-21 07:17:53+00:00</td>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-25 21:37:51+00:00</td>\\n\",\n       \"      <td>712</td>\\n\",\n       \"      <td>SDK/Components - Only convert TaskSpec to Cont...</td>\\n\",\n       \"      <td>2019-03-30 08:38:57+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/712</td>\\n\",\n       \"      <td>3278</td>\\n\",\n       \"      <td>3167.0</td>\\n\",\n       \"      <td>1644</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>53</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-18 02:09:34+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-18 02:09:39+00:00</td>\\n\",\n       \"      <td>702</td>\\n\",\n       \"      <td>SDK/Component - Added the ComponentReference.s...</td>\\n\",\n       \"      <td>2019-03-06 21:50:37+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/702</td>\\n\",\n       \"      <td>3355</td>\\n\",\n       \"      <td>3355.0</td>\\n\",\n       \"      <td>2207</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>54</th>\\n\",\n       \"      <td>{u'login': u'govindKAG'}</td>\\n\",\n       \"      <td>2019-01-16 11:31:09+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-16 11:31:14+00:00</td>\\n\",\n       \"      <td>481</td>\\n\",\n       \"      <td>reduced number of layers</td>\\n\",\n       \"      <td>2019-03-06 17:21:10+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/examples/pull/481</td>\\n\",\n       \"      <td>3394</td>\\n\",\n       \"      <td>3394.0</td>\\n\",\n       \"      <td>2212</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>55</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-15 23:02:07+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-15 23:02:13+00:00</td>\\n\",\n       \"      <td>688</td>\\n\",\n       \"      <td>SDK/Components - Renamed fileOutputs to unconf...</td>\\n\",\n       \"      <td>2019-01-21 07:14:25+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/688</td>\\n\",\n       \"      <td>3406</td>\\n\",\n       \"      <td>3406.0</td>\\n\",\n       \"      <td>3278</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>56</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-11 19:58:00+00:00</td>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-12 00:04:05+00:00</td>\\n\",\n       \"      <td>669</td>\\n\",\n       \"      <td>SDK/Components  - Added Json Schema spec for t...</td>\\n\",\n       \"      <td>2019-05-21 23:19:57+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/669</td>\\n\",\n       \"      <td>3505</td>\\n\",\n       \"      <td>3501.0</td>\\n\",\n       \"      <td>382</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>57</th>\\n\",\n       \"      <td>{u'login': u'Ark-kun'}</td>\\n\",\n       \"      <td>2019-01-11 03:27:40+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-11 03:27:45+00:00</td>\\n\",\n       \"      <td>668</td>\\n\",\n       \"      <td>SDK - Update minimum Python version to 3.6</td>\\n\",\n       \"      <td>2019-04-25 23:41:41+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/668</td>\\n\",\n       \"      <td>3522</td>\\n\",\n       \"      <td>3522.0</td>\\n\",\n       \"      <td>1005</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>58</th>\\n\",\n       \"      <td>{u'login': u'neuromage'}</td>\\n\",\n       \"      <td>2019-01-05 22:53:33+00:00</td>\\n\",\n       \"      <td>{u'login': u'jlewi'}</td>\\n\",\n       \"      <td>2019-01-05 22:53:38+00:00</td>\\n\",\n       \"      <td>640</td>\\n\",\n       \"      <td>[WIP] Run Bazel build/tests as part of Travis CI</td>\\n\",\n       \"      <td>2019-01-11 21:40:24+00:00</td>\\n\",\n       \"      <td>https://github.com/kubeflow/pipelines/pull/640</td>\\n\",\n       \"      <td>3646</td>\\n\",\n       \"      <td>3646.0</td>\\n\",\n       \"      <td>3503</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>62 rows × 11 columns</p>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"                           author                 createdAt  \\\\\\n\",\n       \"97     {u'login': u'rileyjbauer'} 2019-05-07 17:40:05+00:00   \\n\",\n       \"98         {u'login': u'yaronha'} 2019-05-07 13:59:51+00:00   \\n\",\n       \"99         {u'login': u'Ark-kun'} 2019-05-02 21:26:09+00:00   \\n\",\n       \"0      {u'login': u'cliveseldon'} 2019-04-30 18:49:30+00:00   \\n\",\n       \"1     {u'login': u'animeshsingh'} 2019-04-30 07:04:30+00:00   \\n\",\n       \"2          {u'login': u'holdenk'} 2019-04-29 11:31:03+00:00   \\n\",\n       \"3      {u'login': u'jingzhang36'} 2019-04-25 22:16:11+00:00   \\n\",\n       \"4           {u'login': u'lluunn'} 2019-04-25 21:16:54+00:00   \\n\",\n       \"5      {u'login': u'rohithreddy'} 2019-04-23 22:23:26+00:00   \\n\",\n       \"6      {u'login': u'rileyjbauer'} 2019-04-23 21:23:26+00:00   \\n\",\n       \"7          {u'login': u'Ark-kun'} 2019-04-22 22:29:35+00:00   \\n\",\n       \"8     {u'login': u'swiftdiaries'} 2019-04-19 18:59:56+00:00   \\n\",\n       \"9       {u'login': u'wukong1992'} 2019-04-18 06:40:38+00:00   \\n\",\n       \"10        {u'login': u'kunmingg'} 2019-04-18 02:27:27+00:00   \\n\",\n       \"11   {u'login': u'TheOtherOsama'} 2019-04-17 21:15:19+00:00   \\n\",\n       \"12          {u'login': u'royxue'} 2019-04-17 09:01:29+00:00   \\n\",\n       \"13         {u'login': u'stpabhi'} 2019-04-17 05:58:06+00:00   \\n\",\n       \"14       {u'login': u'mnmainguy'} 2019-04-17 00:54:15+00:00   \\n\",\n       \"15    {u'login': u'animeshsingh'} 2019-04-16 02:47:59+00:00   \\n\",\n       \"16    {u'login': u'swiftdiaries'} 2019-04-15 23:51:32+00:00   \\n\",\n       \"17        {u'login': u'hamelsmu'} 2019-04-13 20:08:28+00:00   \\n\",\n       \"18         {u'login': u'Ark-kun'} 2019-04-11 22:46:27+00:00   \\n\",\n       \"19        {u'login': u'mrkm4ntr'} 2019-04-10 05:34:41+00:00   \\n\",\n       \"20         {u'login': u'Ark-kun'} 2019-04-10 01:41:04+00:00   \\n\",\n       \"21   {u'login': u'KingOnTheStar'} 2019-04-03 12:13:48+00:00   \\n\",\n       \"22  {u'login': u'Svendegroote91'} 2019-04-01 18:25:41+00:00   \\n\",\n       \"23     {u'login': u'cliveseldon'} 2019-03-29 18:06:44+00:00   \\n\",\n       \"24       {u'login': u'Akado2009'} 2019-03-26 03:28:20+00:00   \\n\",\n       \"25        {u'login': u'elviraux'} 2019-03-26 00:18:37+00:00   \\n\",\n       \"26       {u'login': u'neuromage'} 2019-03-24 20:22:24+00:00   \\n\",\n       \"..                            ...                       ...   \\n\",\n       \"29          {u'login': u'zionwu'} 2019-03-13 12:20:46+00:00   \\n\",\n       \"30        {u'login': u'dreamryx'} 2019-03-13 08:49:35+00:00   \\n\",\n       \"31    {u'login': u'animeshsingh'} 2019-03-12 00:41:45+00:00   \\n\",\n       \"32     {u'login': u'avdaredevil'} 2019-03-07 09:39:43+00:00   \\n\",\n       \"33         {u'login': u'IronPan'} 2019-03-06 00:39:35+00:00   \\n\",\n       \"34         {u'login': u'Ark-kun'} 2019-03-05 21:33:50+00:00   \\n\",\n       \"35          {u'login': u'lluunn'} 2019-03-04 21:47:17+00:00   \\n\",\n       \"36         {u'login': u'toshiiw'} 2019-03-04 02:42:22+00:00   \\n\",\n       \"37         {u'login': u'Ark-kun'} 2019-03-01 23:16:42+00:00   \\n\",\n       \"38         {u'login': u'toshiiw'} 2019-02-26 08:04:33+00:00   \\n\",\n       \"39          {u'login': u'knkski'} 2019-02-19 21:27:13+00:00   \\n\",\n       \"40      {u'login': u'jayunit100'} 2019-02-15 16:59:16+00:00   \\n\",\n       \"41         {u'login': u'yehiyam'} 2019-02-07 10:33:40+00:00   \\n\",\n       \"42      {u'login': u'YujiOshima'} 2019-02-07 08:14:16+00:00   \\n\",\n       \"43         {u'login': u'Ark-kun'} 2019-02-07 07:30:11+00:00   \\n\",\n       \"44      {u'login': u'hongye-sun'} 2019-02-06 00:18:49+00:00   \\n\",\n       \"45        {u'login': u'DmitryBe'} 2019-02-01 05:22:32+00:00   \\n\",\n       \"46        {u'login': u'DmitryBe'} 2019-02-01 05:18:20+00:00   \\n\",\n       \"47         {u'login': u'toshiiw'} 2019-01-31 07:51:52+00:00   \\n\",\n       \"48        {u'login': u'TimZaman'} 2019-01-31 00:37:31+00:00   \\n\",\n       \"49      {u'login': u'YujiOshima'} 2019-01-30 02:59:51+00:00   \\n\",\n       \"50        {u'login': u'dsdinter'} 2019-01-27 18:37:42+00:00   \\n\",\n       \"51         {u'login': u'Ark-kun'} 2019-01-21 07:19:10+00:00   \\n\",\n       \"52         {u'login': u'Ark-kun'} 2019-01-21 07:17:53+00:00   \\n\",\n       \"53         {u'login': u'Ark-kun'} 2019-01-18 02:09:34+00:00   \\n\",\n       \"54       {u'login': u'govindKAG'} 2019-01-16 11:31:09+00:00   \\n\",\n       \"55         {u'login': u'Ark-kun'} 2019-01-15 23:02:07+00:00   \\n\",\n       \"56         {u'login': u'Ark-kun'} 2019-01-11 19:58:00+00:00   \\n\",\n       \"57         {u'login': u'Ark-kun'} 2019-01-11 03:27:40+00:00   \\n\",\n       \"58       {u'login': u'neuromage'} 2019-01-05 22:53:33+00:00   \\n\",\n       \"\\n\",\n       \"                           editor              lastEditedAt  number  \\\\\\n\",\n       \"97           {u'login': u'jlewi'} 2019-05-07 17:40:13+00:00    1294   \\n\",\n       \"98           {u'login': u'jlewi'} 2019-05-07 14:00:01+00:00    1293   \\n\",\n       \"99           {u'login': u'jlewi'} 2019-05-02 21:26:20+00:00    3179   \\n\",\n       \"0            {u'login': u'jlewi'} 2019-04-30 18:49:37+00:00      36   \\n\",\n       \"1     {u'login': u'animeshsingh'} 2019-04-30 07:19:09+00:00    1264   \\n\",\n       \"2            {u'login': u'jlewi'} 2019-04-29 11:31:09+00:00    3137   \\n\",\n       \"3            {u'login': u'jlewi'} 2019-04-25 22:16:16+00:00    1237   \\n\",\n       \"4            {u'login': u'jlewi'} 2019-04-25 21:17:06+00:00    3114   \\n\",\n       \"5            {u'login': u'jlewi'} 2019-04-23 22:23:33+00:00    3089   \\n\",\n       \"6            {u'login': u'jlewi'} 2019-04-23 21:23:32+00:00    1208   \\n\",\n       \"7            {u'login': u'jlewi'} 2019-04-22 22:29:45+00:00    1200   \\n\",\n       \"8            {u'login': u'jlewi'} 2019-04-19 19:00:09+00:00    3060   \\n\",\n       \"9            {u'login': u'jlewi'} 2019-04-18 06:40:44+00:00     458   \\n\",\n       \"10        {u'login': u'kunmingg'} 2019-04-26 03:43:18+00:00    3045   \\n\",\n       \"11           {u'login': u'jlewi'} 2019-04-17 21:15:24+00:00      83   \\n\",\n       \"12           {u'login': u'jlewi'} 2019-04-17 09:01:38+00:00    3040   \\n\",\n       \"13           {u'login': u'jlewi'} 2019-04-17 05:58:15+00:00    3039   \\n\",\n       \"14           {u'login': u'jlewi'} 2019-04-17 00:54:20+00:00     543   \\n\",\n       \"15           {u'login': u'jlewi'} 2019-04-16 02:48:08+00:00      12   \\n\",\n       \"16           {u'login': u'jlewi'} 2019-04-15 23:51:38+00:00    3026   \\n\",\n       \"17           {u'login': u'jlewi'} 2019-04-13 20:08:34+00:00     256   \\n\",\n       \"18           {u'login': u'jlewi'} 2019-04-11 22:46:32+00:00    1145   \\n\",\n       \"19           {u'login': u'jlewi'} 2019-04-10 05:34:46+00:00    2987   \\n\",\n       \"20           {u'login': u'jlewi'} 2019-04-10 01:41:09+00:00    1125   \\n\",\n       \"21           {u'login': u'jlewi'} 2019-04-03 12:13:52+00:00     246   \\n\",\n       \"22  {u'login': u'Svendegroote91'} 2019-04-01 18:35:45+00:00     535   \\n\",\n       \"23           {u'login': u'jlewi'} 2019-03-29 18:06:48+00:00     243   \\n\",\n       \"24       {u'login': u'Akado2009'} 2019-03-27 01:08:02+00:00     438   \\n\",\n       \"25           {u'login': u'jlewi'} 2019-03-26 00:18:41+00:00    2808   \\n\",\n       \"26           {u'login': u'jlewi'} 2019-03-24 20:22:33+00:00    1031   \\n\",\n       \"..                            ...                       ...     ...   \\n\",\n       \"29           {u'login': u'jlewi'} 2019-03-13 12:20:52+00:00     959   \\n\",\n       \"30           {u'login': u'jlewi'} 2019-03-13 08:49:40+00:00     430   \\n\",\n       \"31           {u'login': u'jlewi'} 2019-03-12 00:41:50+00:00      71   \\n\",\n       \"32     {u'login': u'avdaredevil'} 2019-03-07 09:47:58+00:00    2650   \\n\",\n       \"33           {u'login': u'jlewi'} 2019-03-06 00:39:42+00:00     918   \\n\",\n       \"34         {u'login': u'IronPan'} 2019-03-05 21:33:58+00:00     912   \\n\",\n       \"35           {u'login': u'jlewi'} 2019-03-04 21:47:26+00:00    2616   \\n\",\n       \"36           {u'login': u'jlewi'} 2019-03-04 02:42:27+00:00     417   \\n\",\n       \"37         {u'login': u'Ark-kun'} 2019-03-02 08:44:49+00:00     898   \\n\",\n       \"38           {u'login': u'jlewi'} 2019-02-26 08:04:38+00:00     411   \\n\",\n       \"39           {u'login': u'jlewi'} 2019-02-19 21:27:22+00:00    2508   \\n\",\n       \"40           {u'login': u'jlewi'} 2019-02-15 16:59:28+00:00     385   \\n\",\n       \"41           {u'login': u'jlewi'} 2019-02-07 10:33:49+00:00     502   \\n\",\n       \"42           {u'login': u'jlewi'} 2019-02-07 08:14:22+00:00     362   \\n\",\n       \"43         {u'login': u'Ark-kun'} 2019-05-17 01:16:28+00:00     791   \\n\",\n       \"44           {u'login': u'jlewi'} 2019-02-06 00:18:54+00:00     787   \\n\",\n       \"45           {u'login': u'jlewi'} 2019-02-01 05:22:36+00:00     766   \\n\",\n       \"46        {u'login': u'DmitryBe'} 2019-02-10 14:33:00+00:00     765   \\n\",\n       \"47           {u'login': u'jlewi'} 2019-01-31 07:51:57+00:00     357   \\n\",\n       \"48           {u'login': u'jlewi'} 2019-01-31 00:37:40+00:00    2354   \\n\",\n       \"49           {u'login': u'jlewi'} 2019-01-30 03:00:01+00:00     352   \\n\",\n       \"50        {u'login': u'dsdinter'} 2019-05-05 23:01:29+00:00     490   \\n\",\n       \"51         {u'login': u'Ark-kun'} 2019-01-26 01:19:56+00:00     713   \\n\",\n       \"52         {u'login': u'Ark-kun'} 2019-01-25 21:37:51+00:00     712   \\n\",\n       \"53           {u'login': u'jlewi'} 2019-01-18 02:09:39+00:00     702   \\n\",\n       \"54           {u'login': u'jlewi'} 2019-01-16 11:31:14+00:00     481   \\n\",\n       \"55           {u'login': u'jlewi'} 2019-01-15 23:02:13+00:00     688   \\n\",\n       \"56         {u'login': u'Ark-kun'} 2019-01-12 00:04:05+00:00     669   \\n\",\n       \"57           {u'login': u'jlewi'} 2019-01-11 03:27:45+00:00     668   \\n\",\n       \"58           {u'login': u'jlewi'} 2019-01-05 22:53:38+00:00     640   \\n\",\n       \"\\n\",\n       \"                                                title  \\\\\\n\",\n       \"97                               Correct input height   \\n\",\n       \"98  add support for flexible config (via env var) ...   \\n\",\n       \"99         Update Pipelines to version 0.1.18 (#3121)   \\n\",\n       \"0                                          add seldon   \\n\",\n       \"1         updating components and samples owners file   \\n\",\n       \"2   [KUBEFLOW-3136] Fix OAUTH requirement in gke u...   \\n\",\n       \"3     Add a helper function to create tensorboard crd   \\n\",\n       \"4                                    WIP don't review   \\n\",\n       \"5              Add emacs package to the Jupyter Image   \\n\",\n       \"6   [WIP] Initial attempt to migrate from react-sc...   \\n\",\n       \"7   SDK - Improved test script compatibility with ...   \\n\",\n       \"8                kfctl go binary - kustomize e2e test   \\n\",\n       \"9                               support request count   \\n\",\n       \"10                    add kfctl to deploy app backend   \\n\",\n       \"11                                    Update org.yaml   \\n\",\n       \"12              Add KUBEFLOW_KS_API_SPEC env variable   \\n\",\n       \"13  Update profile readme according to golang prof...   \\n\",\n       \"14  Enhanced readme for MNIST example to include w...   \\n\",\n       \"15                    adding animeshsingh as reviewer   \\n\",\n       \"16                            [WIP] adds kfctl onprem   \\n\",\n       \"17                                            Patch 3   \\n\",\n       \"18                    [WIP]Reduce noise in Prow tests   \\n\",\n       \"19            Add model status endpoint to http-proxy   \\n\",\n       \"20           Preserving component spec on ContainerOp   \\n\",\n       \"21  Add KingOnTheStar to kubeflow.member, he is wo...   \\n\",\n       \"22  [Financial Time Series] Update example to v0.4...   \\n\",\n       \"23              Add Clive from Seldon to members.yaml   \\n\",\n       \"24                                        WIP: New UI   \\n\",\n       \"25              [WIP] Improved kubeflow readme intro    \\n\",\n       \"26       Use Remote Build Execution for Bazel builds.   \\n\",\n       \"..                                                ...   \\n\",\n       \"29                            Delete pod on lost node   \\n\",\n       \"30                  update dockerfile for power build   \\n\",\n       \"31                                    Update org.yaml   \\n\",\n       \"32  [Windows] Windows Scripts for Setting up Kubeflow   \\n\",\n       \"33                  Add test suit to upgrade pipeline   \\n\",\n       \"34  [WIP]Improved the sample Keras classifier comp...   \\n\",\n       \"35                                                WIP   \\n\",\n       \"36     Print verbose error when studyjob updates fail   \\n\",\n       \"37      Collecting coverage when running python tests   \\n\",\n       \"38                           Retry studyjobcontroller   \\n\",\n       \"39                   Update kubespawner property name   \\n\",\n       \"40                                          Vendoring   \\n\",\n       \"41                                           fix typo   \\n\",\n       \"42     DB: add studyjob table and extend worker table   \\n\",\n       \"43  SDK - Added support for raw input artifact arg...   \\n\",\n       \"44                                  Add GPU test back   \\n\",\n       \"45        Added AWS S3 support for storing artefacts.   \\n\",\n       \"46  Added configArtifactRepository method into `sd...   \\n\",\n       \"47                   DNM: check if kubeconfig is sane   \\n\",\n       \"48           Fix minikube setup script's df inference   \\n\",\n       \"49                                     Manual suggest   \\n\",\n       \"50               [pytorch_mnist] Automate image build   \\n\",\n       \"51   SDK/Components - Refactoring: Improved contai...   \\n\",\n       \"52  SDK/Components - Only convert TaskSpec to Cont...   \\n\",\n       \"53  SDK/Component - Added the ComponentReference.s...   \\n\",\n       \"54                           reduced number of layers   \\n\",\n       \"55  SDK/Components - Renamed fileOutputs to unconf...   \\n\",\n       \"56  SDK/Components  - Added Json Schema spec for t...   \\n\",\n       \"57         SDK - Update minimum Python version to 3.6   \\n\",\n       \"58   [WIP] Run Bazel build/tests as part of Travis CI   \\n\",\n       \"\\n\",\n       \"                   updatedAt  \\\\\\n\",\n       \"97 2019-05-22 20:24:38+00:00   \\n\",\n       \"98 2019-06-05 21:38:03+00:00   \\n\",\n       \"99 2019-05-02 22:17:52+00:00   \\n\",\n       \"0  2019-05-14 15:55:27+00:00   \\n\",\n       \"1  2019-05-03 05:13:38+00:00   \\n\",\n       \"2  2019-04-29 11:31:17+00:00   \\n\",\n       \"3  2019-05-31 07:21:34+00:00   \\n\",\n       \"4  2019-04-26 23:16:24+00:00   \\n\",\n       \"5  2019-04-24 02:06:01+00:00   \\n\",\n       \"6  2019-05-03 01:52:17+00:00   \\n\",\n       \"7  2019-06-05 23:13:36+00:00   \\n\",\n       \"8  2019-06-06 01:45:36+00:00   \\n\",\n       \"9  2019-05-27 04:14:53+00:00   \\n\",\n       \"10 2019-06-05 00:03:56+00:00   \\n\",\n       \"11 2019-04-17 21:16:39+00:00   \\n\",\n       \"12 2019-04-18 09:21:32+00:00   \\n\",\n       \"13 2019-05-19 00:52:06+00:00   \\n\",\n       \"14 2019-04-18 22:38:37+00:00   \\n\",\n       \"15 2019-04-17 01:44:39+00:00   \\n\",\n       \"16 2019-04-16 00:25:06+00:00   \\n\",\n       \"17 2019-04-13 20:50:48+00:00   \\n\",\n       \"18 2019-04-23 21:04:31+00:00   \\n\",\n       \"19 2019-04-12 02:15:46+00:00   \\n\",\n       \"20 2019-05-03 20:16:12+00:00   \\n\",\n       \"21 2019-04-03 12:14:02+00:00   \\n\",\n       \"22 2019-06-05 19:16:51+00:00   \\n\",\n       \"23 2019-03-29 18:06:57+00:00   \\n\",\n       \"24 2019-04-25 23:44:58+00:00   \\n\",\n       \"25 2019-03-26 00:18:58+00:00   \\n\",\n       \"26 2019-06-06 00:35:37+00:00   \\n\",\n       \"..                       ...   \\n\",\n       \"29 2019-04-11 13:30:29+00:00   \\n\",\n       \"30 2019-04-24 09:02:36+00:00   \\n\",\n       \"31 2019-03-12 00:41:59+00:00   \\n\",\n       \"32 2019-05-09 23:03:20+00:00   \\n\",\n       \"33 2019-04-24 17:19:34+00:00   \\n\",\n       \"34 2019-03-07 07:59:06+00:00   \\n\",\n       \"35 2019-06-02 22:23:26+00:00   \\n\",\n       \"36 2019-03-05 06:08:42+00:00   \\n\",\n       \"37 2019-04-25 00:56:00+00:00   \\n\",\n       \"38 2019-05-17 09:25:27+00:00   \\n\",\n       \"39 2019-04-25 05:02:36+00:00   \\n\",\n       \"40 2019-02-20 17:47:08+00:00   \\n\",\n       \"41 2019-02-26 23:12:45+00:00   \\n\",\n       \"42 2019-03-04 09:53:25+00:00   \\n\",\n       \"43 2019-05-23 01:24:26+00:00   \\n\",\n       \"44 2019-02-27 00:59:08+00:00   \\n\",\n       \"45 2019-04-27 18:19:11+00:00   \\n\",\n       \"46 2019-04-30 00:35:10+00:00   \\n\",\n       \"47 2019-02-01 07:07:05+00:00   \\n\",\n       \"48 2019-05-15 15:02:49+00:00   \\n\",\n       \"49 2019-02-07 08:17:41+00:00   \\n\",\n       \"50 2019-05-08 15:11:21+00:00   \\n\",\n       \"51 2019-03-30 08:36:35+00:00   \\n\",\n       \"52 2019-03-30 08:38:57+00:00   \\n\",\n       \"53 2019-03-06 21:50:37+00:00   \\n\",\n       \"54 2019-03-06 17:21:10+00:00   \\n\",\n       \"55 2019-01-21 07:14:25+00:00   \\n\",\n       \"56 2019-05-21 23:19:57+00:00   \\n\",\n       \"57 2019-04-25 23:41:41+00:00   \\n\",\n       \"58 2019-01-11 21:40:24+00:00   \\n\",\n       \"\\n\",\n       \"                                                  url  creationAge  \\\\\\n\",\n       \"97    https://github.com/kubeflow/pipelines/pull/1294          723   \\n\",\n       \"98    https://github.com/kubeflow/pipelines/pull/1293          727   \\n\",\n       \"99     https://github.com/kubeflow/kubeflow/pull/3179          840   \\n\",\n       \"0       https://github.com/kubeflow/manifests/pull/36          890   \\n\",\n       \"1     https://github.com/kubeflow/pipelines/pull/1264          902   \\n\",\n       \"2      https://github.com/kubeflow/kubeflow/pull/3137          922   \\n\",\n       \"3     https://github.com/kubeflow/pipelines/pull/1237         1007   \\n\",\n       \"4      https://github.com/kubeflow/kubeflow/pull/3114         1008   \\n\",\n       \"5      https://github.com/kubeflow/kubeflow/pull/3089         1055   \\n\",\n       \"6     https://github.com/kubeflow/pipelines/pull/1208         1056   \\n\",\n       \"7     https://github.com/kubeflow/pipelines/pull/1200         1079   \\n\",\n       \"8      https://github.com/kubeflow/kubeflow/pull/3060         1154   \\n\",\n       \"9          https://github.com/kubeflow/katib/pull/458         1190   \\n\",\n       \"10     https://github.com/kubeflow/kubeflow/pull/3045         1195   \\n\",\n       \"11  https://github.com/kubeflow/internal-acls/pull/83         1200   \\n\",\n       \"12     https://github.com/kubeflow/kubeflow/pull/3040         1212   \\n\",\n       \"13     https://github.com/kubeflow/kubeflow/pull/3039         1215   \\n\",\n       \"14      https://github.com/kubeflow/examples/pull/543         1220   \\n\",\n       \"15       https://github.com/kubeflow/metadata/pull/12         1242   \\n\",\n       \"16     https://github.com/kubeflow/kubeflow/pull/3026         1245   \\n\",\n       \"17     https://github.com/kubeflow/community/pull/256         1297   \\n\",\n       \"18    https://github.com/kubeflow/pipelines/pull/1145         1342   \\n\",\n       \"19     https://github.com/kubeflow/kubeflow/pull/2987         1384   \\n\",\n       \"20    https://github.com/kubeflow/pipelines/pull/1125         1387   \\n\",\n       \"21     https://github.com/kubeflow/community/pull/246         1545   \\n\",\n       \"22      https://github.com/kubeflow/examples/pull/535         1587   \\n\",\n       \"23     https://github.com/kubeflow/community/pull/243         1659   \\n\",\n       \"24         https://github.com/kubeflow/katib/pull/438         1746   \\n\",\n       \"25     https://github.com/kubeflow/kubeflow/pull/2808         1749   \\n\",\n       \"26    https://github.com/kubeflow/pipelines/pull/1031         1777   \\n\",\n       \"..                                                ...          ...   \\n\",\n       \"29   https://github.com/kubeflow/tf-operator/pull/959         2049   \\n\",\n       \"30         https://github.com/kubeflow/katib/pull/430         2052   \\n\",\n       \"31  https://github.com/kubeflow/internal-acls/pull/71         2084   \\n\",\n       \"32     https://github.com/kubeflow/kubeflow/pull/2650         2195   \\n\",\n       \"33     https://github.com/kubeflow/pipelines/pull/918         2228   \\n\",\n       \"34     https://github.com/kubeflow/pipelines/pull/912         2232   \\n\",\n       \"35     https://github.com/kubeflow/kubeflow/pull/2616         2255   \\n\",\n       \"36         https://github.com/kubeflow/katib/pull/417         2274   \\n\",\n       \"37     https://github.com/kubeflow/pipelines/pull/898         2326   \\n\",\n       \"38         https://github.com/kubeflow/katib/pull/411         2413   \\n\",\n       \"39     https://github.com/kubeflow/kubeflow/pull/2508         2568   \\n\",\n       \"40         https://github.com/kubeflow/katib/pull/385         2668   \\n\",\n       \"41      https://github.com/kubeflow/examples/pull/502         2867   \\n\",\n       \"42         https://github.com/kubeflow/katib/pull/362         2869   \\n\",\n       \"43     https://github.com/kubeflow/pipelines/pull/791         2870   \\n\",\n       \"44     https://github.com/kubeflow/pipelines/pull/787         2901   \\n\",\n       \"45     https://github.com/kubeflow/pipelines/pull/766         3016   \\n\",\n       \"46     https://github.com/kubeflow/pipelines/pull/765         3016   \\n\",\n       \"47         https://github.com/kubeflow/katib/pull/357         3037   \\n\",\n       \"48     https://github.com/kubeflow/kubeflow/pull/2354         3044   \\n\",\n       \"49         https://github.com/kubeflow/katib/pull/352         3066   \\n\",\n       \"50      https://github.com/kubeflow/examples/pull/490         3122   \\n\",\n       \"51     https://github.com/kubeflow/pipelines/pull/713         3278   \\n\",\n       \"52     https://github.com/kubeflow/pipelines/pull/712         3278   \\n\",\n       \"53     https://github.com/kubeflow/pipelines/pull/702         3355   \\n\",\n       \"54      https://github.com/kubeflow/examples/pull/481         3394   \\n\",\n       \"55     https://github.com/kubeflow/pipelines/pull/688         3406   \\n\",\n       \"56     https://github.com/kubeflow/pipelines/pull/669         3505   \\n\",\n       \"57     https://github.com/kubeflow/pipelines/pull/668         3522   \\n\",\n       \"58     https://github.com/kubeflow/pipelines/pull/640         3646   \\n\",\n       \"\\n\",\n       \"    lastEditAge  updateAge  \\n\",\n       \"97        723.0        361  \\n\",\n       \"98        727.0         23  \\n\",\n       \"99        840.0        839  \\n\",\n       \"0         890.0        557  \\n\",\n       \"1         902.0        832  \\n\",\n       \"2         922.0        922  \\n\",\n       \"3        1007.0        158  \\n\",\n       \"4        1008.0        982  \\n\",\n       \"5        1055.0       1051  \\n\",\n       \"6        1056.0        835  \\n\",\n       \"7        1079.0         22  \\n\",\n       \"8        1154.0         19  \\n\",\n       \"9        1190.0        257  \\n\",\n       \"10       1001.0         45  \\n\",\n       \"11       1200.0       1200  \\n\",\n       \"12       1212.0       1188  \\n\",\n       \"13       1215.0        452  \\n\",\n       \"14       1220.0       1174  \\n\",\n       \"15       1242.0       1219  \\n\",\n       \"16       1245.0       1245  \\n\",\n       \"17       1297.0       1296  \\n\",\n       \"18       1342.0       1056  \\n\",\n       \"19       1384.0       1339  \\n\",\n       \"20       1387.0        817  \\n\",\n       \"21       1545.0       1545  \\n\",\n       \"22       1587.0         26  \\n\",\n       \"23       1659.0       1659  \\n\",\n       \"24       1724.0       1005  \\n\",\n       \"25       1749.0       1749  \\n\",\n       \"26       1777.0         21  \\n\",\n       \"..          ...        ...  \\n\",\n       \"29       2049.0       1352  \\n\",\n       \"30       2052.0       1044  \\n\",\n       \"31       2084.0       2084  \\n\",\n       \"32       2195.0        670  \\n\",\n       \"33       2228.0       1036  \\n\",\n       \"34       2232.0       2197  \\n\",\n       \"35       2255.0         95  \\n\",\n       \"36       2274.0       2247  \\n\",\n       \"37       2316.0       1028  \\n\",\n       \"38       2413.0        492  \\n\",\n       \"39       2568.0       1024  \\n\",\n       \"40       2668.0       2547  \\n\",\n       \"41       2867.0       2398  \\n\",\n       \"42       2869.0       2267  \\n\",\n       \"43        500.0        356  \\n\",\n       \"44       2901.0       2396  \\n\",\n       \"45       3016.0        963  \\n\",\n       \"46       2791.0        909  \\n\",\n       \"47       3037.0       3014  \\n\",\n       \"48       3044.0        534  \\n\",\n       \"49       3066.0       2869  \\n\",\n       \"50        766.0        702  \\n\",\n       \"51       3164.0       1644  \\n\",\n       \"52       3167.0       1644  \\n\",\n       \"53       3355.0       2207  \\n\",\n       \"54       3394.0       2212  \\n\",\n       \"55       3406.0       3278  \\n\",\n       \"56       3501.0        382  \\n\",\n       \"57       3522.0       1005  \\n\",\n       \"58       3646.0       3503  \\n\",\n       \"\\n\",\n       \"[62 rows x 11 columns]\"\n      ]\n     },\n     \"execution_count\": 80,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"needs_attention[needs_attention.creationAge > MAX_AGE]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 2\",\n   \"language\": \"python\",\n   \"name\": \"python2\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 2\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython2\",\n   \"version\": \"2.7.13\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "scripts/print_companies.py",
    "content": "#!/usr/bin/python\n#\n# Print the names of all the companies listed in member organizations.yaml\nimport os\nimport yaml\nif __name__ == \"__main__\":\n  this_file = __file__\n  repo_root = os.path.abspath(os.path.join(os.path.dirname(this_file),\n                              \"..\"))\n  org_file = os.path.join(repo_root, \"member_organizations.yaml\")\n  with open(org_file) as hf:\n    members = yaml.load(hf)\n    \n  names = [m[\"name\"] for m in members]\n  names.sort()\n  \n  print(\"Number of companies={0}\".format(len(names)))\n  print(\", \".join(names))"
  },
  {
    "path": "scripts/project_stats.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Compute Project Stats\\n\",\n    \"\\n\",\n    \"* This notebook uses the GitHub [GraphQL API](https://developer.github.com/v4/) to compute the number of open and \\n\",\n    \"  closed bugs pertaining to Kubeflow GitHub Projects\\n\",\n    \"  * Stats are broken down by labels\\n\",\n    \"* Results are plotted using [plotly](https://plot.ly)\\n\",\n    \"  * Plots are currently published on plot.ly for sharing; they are publicly vieable by anyone\\n\",\n    \"  \\n\",\n    \"## Setup GitHub\\n\",\n    \"\\n\",\n    \"* You will need a GitHub personal access token in order to use the GitHub API\\n\",\n    \"* See these [instructions](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/) for creating a personal access token\\n\",\n    \"  * You will need the scopes:\\n\",\n    \"    * repo\\n\",\n    \"    * read:org    \\n\",\n    \"* Set the environment variable `GITHUB_TOKEN` to pass your token to the code\\n\",\n    \"\\n\",\n    \"## Setup Plot.ly Online\\n\",\n    \"\\n\",\n    \"* In order to use plot.ly to publish the plot you need to create a plot.ly account and get an API key\\n\",\n    \"* Follow plot.ly's [getting started guide](https://plot.ly/python/getting-started/)\\n\",\n    \"* Store your API key in `~/.plotly/.credentials `\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Use plotly cufflinks to plot data frames\\n\",\n    \"# https://plot.ly/ipython-notebooks/cufflinks/\\n\",\n    \"# instructions for offline plotting\\n\",\n    \"# https://plot.ly/python/getting-started/#initialization-for-offline-plotting\\n\",\n    \"#\\n\",\n    \"# Follow the instructions for online plotting:\\n\",\n    \"# https://plot.ly/python/getting-started/\\n\",\n    \"# You will need to setup an account\\n\",\n    \"import plotly\\n\",\n    \"import plotly.plotly as py\\n\",\n    \"import plotly.graph_objs as go\\n\",\n    \"import cufflinks as cf\\n\",\n    \"#from importlib import reload\\n\",\n    \"import itertools\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import project_stats\\n\",\n    \"#reload(project_stats)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"c = project_stats.ProjectStats(project=\\\"0.6.0\\\")\\n\",\n    \"#c = project_stats.ProjectStats(project=\\\"0.7.0\\\")\\n\",\n    \"c.main()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Make plots showing different groups of labels\\n\",\n    \"\\n\",\n    \"* Columns are multi level indexes\\n\",\n    \"* See [here](https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html) for instructions on multilevel indexes\\n\",\n    \"   * We specify a list of tuples where each tuple specifies the item to select at the corresponding level in the index\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {\n    \"scrolled\": true\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<iframe id=\\\"igraph\\\" scrolling=\\\"no\\\" style=\\\"border:none;\\\" seamless=\\\"seamless\\\" src=\\\"https://plot.ly/~jlewi/1.embed\\\" height=\\\"525px\\\" width=\\\"100%\\\"></iframe>\"\n      ],\n      \"text/plain\": [\n       \"<plotly.tools.PlotlyDisplay object>\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"counts = [\\\"open\\\", \\\"total\\\"]\\n\",\n    \"#labels = [\\\"cuj/build-train-deploy\\\", \\\"cuj/multi-user\\\", \\\"area/katib\\\"]\\n\",\n    \"labels = [\\\"priority/p0\\\", \\\"priority/p1\\\", \\\"priority/p2\\\"]\\n\",\n    \"columns = [(a,b) for (a,b) in itertools.product(counts, labels)]\\n\",\n    \"\\n\",\n    \"import datetime\\n\",\n    \"start=datetime.datetime(2019, 1, 1)\\n\",\n    \"\\n\",\n    \"i = c.stats.index > start\\n\",\n    \"#c.stats.iloc[i]\\n\",\n    \"c.stats.loc[i, columns].iplot(kind='scatter', width=5, filename='project-stats', title='{0} Issue Count'.format(c.project))\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"       label      \\n\",\n       \"open   priority/p0      7\\n\",\n       \"       priority/p1     13\\n\",\n       \"       priority/p2      7\\n\",\n       \"total  priority/p0     46\\n\",\n       \"       priority/p1    139\\n\",\n       \"       priority/p2     38\\n\",\n       \"Name: 2019-08-04 23:42:23, dtype: int64\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"c.stats.iloc[-1][columns]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead tr th {\\n\",\n       \"        text-align: left;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead tr:last-of-type th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th colspan=\\\"10\\\" halign=\\\"left\\\">open</th>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <th colspan=\\\"10\\\" halign=\\\"left\\\">total</th>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>label</th>\\n\",\n       \"      <th>addition/feature</th>\\n\",\n       \"      <th>area/0.3.0</th>\\n\",\n       \"      <th>area/0.4.0</th>\\n\",\n       \"      <th>area/0.5.0</th>\\n\",\n       \"      <th>area/1.0.0</th>\\n\",\n       \"      <th>area/bootstrap</th>\\n\",\n       \"      <th>area/build-release</th>\\n\",\n       \"      <th>area/centraldashboard</th>\\n\",\n       \"      <th>area/deployment</th>\\n\",\n       \"      <th>area/design</th>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <th>lifecycle/stale</th>\\n\",\n       \"      <th>nolabels</th>\\n\",\n       \"      <th>platform/aws</th>\\n\",\n       \"      <th>platform/gcp</th>\\n\",\n       \"      <th>platform/minikube</th>\\n\",\n       \"      <th>platform/other</th>\\n\",\n       \"      <th>priority/p0</th>\\n\",\n       \"      <th>priority/p1</th>\\n\",\n       \"      <th>priority/p2</th>\\n\",\n       \"      <th>release/v0.6</th>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>time</th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"      <th></th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-01-03 19:45:38</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>29</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>22</td>\\n\",\n       \"      <td>14</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-01-04 02:34:32</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>29</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>22</td>\\n\",\n       \"      <td>15</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-01-04 02:35:17</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>30</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>22</td>\\n\",\n       \"      <td>16</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-01-06 21:51:20</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>31</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>22</td>\\n\",\n       \"      <td>17</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-01-07 15:06:42</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>31</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>23</td>\\n\",\n       \"      <td>17</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-01-08 21:01:44</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>31</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>23</td>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-01-11 23:45:09</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>31</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-01-14 00:44:31</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>32</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>25</td>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-01-24 19:03:53</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>33</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>25</td>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-01-28 08:40:04</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>33</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>25</td>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-01-28 16:25:53</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>34</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>26</td>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-02-06 09:10:57</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>34</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>26</td>\\n\",\n       \"      <td>19</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-02-06 18:32:12</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>34</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>27</td>\\n\",\n       \"      <td>19</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-02-06 20:26:02</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>34</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>28</td>\\n\",\n       \"      <td>19</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-02-10 23:05:29</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>34</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>28</td>\\n\",\n       \"      <td>20</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-02-11 02:52:18</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>34</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>29</td>\\n\",\n       \"      <td>20</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-02-15 19:08:13</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>35</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>30</td>\\n\",\n       \"      <td>20</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-02-21 04:14:19</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>36</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>30</td>\\n\",\n       \"      <td>20</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-02-22 16:24:01</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>36</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>31</td>\\n\",\n       \"      <td>20</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-02-23 17:15:33</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>36</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>32</td>\\n\",\n       \"      <td>20</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-02-23 21:04:27</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>36</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>32</td>\\n\",\n       \"      <td>21</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-02-25 21:50:44</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>36</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>32</td>\\n\",\n       \"      <td>22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-02-27 00:39:02</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>37</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>33</td>\\n\",\n       \"      <td>22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-02-27 03:25:15</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>37</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>34</td>\\n\",\n       \"      <td>22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-02-27 13:04:28</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>34</td>\\n\",\n       \"      <td>23</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-02-27 17:17:57</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>35</td>\\n\",\n       \"      <td>23</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-02-27 17:47:04</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>36</td>\\n\",\n       \"      <td>23</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-02-27 21:06:34</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>37</td>\\n\",\n       \"      <td>23</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-02-28 23:03:24</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>39</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>37</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-02-28 23:17:02</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>40</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>10</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-22 01:57:27</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>42</td>\\n\",\n       \"      <td>136</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-22 03:06:52</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>42</td>\\n\",\n       \"      <td>136</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-22 04:52:19</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>42</td>\\n\",\n       \"      <td>136</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-22 17:21:47</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>42</td>\\n\",\n       \"      <td>136</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-22 18:30:58</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>42</td>\\n\",\n       \"      <td>136</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-22 18:59:30</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>42</td>\\n\",\n       \"      <td>136</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-22 19:13:30</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>43</td>\\n\",\n       \"      <td>136</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-23 02:05:03</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>44</td>\\n\",\n       \"      <td>136</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-23 04:13:35</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>44</td>\\n\",\n       \"      <td>136</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-23 19:13:51</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>44</td>\\n\",\n       \"      <td>136</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-23 22:06:16</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>44</td>\\n\",\n       \"      <td>136</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-23 22:16:37</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>44</td>\\n\",\n       \"      <td>136</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-24 12:44:59</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>44</td>\\n\",\n       \"      <td>136</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-24 18:15:32</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>44</td>\\n\",\n       \"      <td>136</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-24 21:45:52</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>44</td>\\n\",\n       \"      <td>136</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-25 23:40:10</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>44</td>\\n\",\n       \"      <td>137</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-26 06:10:55</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>44</td>\\n\",\n       \"      <td>138</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-26 19:20:07</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>45</td>\\n\",\n       \"      <td>138</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-26 22:10:50</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>45</td>\\n\",\n       \"      <td>138</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-27 03:10:37</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>45</td>\\n\",\n       \"      <td>138</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-28 16:49:54</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>45</td>\\n\",\n       \"      <td>138</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-28 22:59:43</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>45</td>\\n\",\n       \"      <td>138</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-29 14:25:39</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>45</td>\\n\",\n       \"      <td>139</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-31 00:33:27</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>46</td>\\n\",\n       \"      <td>139</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-07-31 21:24:15</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>46</td>\\n\",\n       \"      <td>139</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-08-01 18:30:22</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>46</td>\\n\",\n       \"      <td>139</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-08-03 15:19:37</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>46</td>\\n\",\n       \"      <td>139</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-08-03 19:29:51</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>46</td>\\n\",\n       \"      <td>139</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-08-04 22:56:38</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>46</td>\\n\",\n       \"      <td>139</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2019-08-04 23:42:23</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>46</td>\\n\",\n       \"      <td>139</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>421 rows × 106 columns</p>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"                                open                                   \\\\\\n\",\n       \"label               addition/feature area/0.3.0 area/0.4.0 area/0.5.0   \\n\",\n       \"time                                                                    \\n\",\n       \"2019-01-03 19:45:38                0          1          3          5   \\n\",\n       \"2019-01-04 02:34:32                0          1          3          5   \\n\",\n       \"2019-01-04 02:35:17                0          1          3          5   \\n\",\n       \"2019-01-06 21:51:20                0          1          3          5   \\n\",\n       \"2019-01-07 15:06:42                0          1          3          5   \\n\",\n       \"...                              ...        ...        ...        ...   \\n\",\n       \"2019-08-01 18:30:22                2          0          0          0   \\n\",\n       \"2019-08-03 15:19:37                2          0          0          0   \\n\",\n       \"2019-08-03 19:29:51                1          0          0          0   \\n\",\n       \"2019-08-04 22:56:38                0          0          0          0   \\n\",\n       \"2019-08-04 23:42:23                0          0          0          0   \\n\",\n       \"\\n\",\n       \"                                                                  \\\\\\n\",\n       \"label               area/1.0.0 area/bootstrap area/build-release   \\n\",\n       \"time                                                               \\n\",\n       \"2019-01-03 19:45:38          1              6                  1   \\n\",\n       \"2019-01-04 02:34:32          1              6                  2   \\n\",\n       \"2019-01-04 02:35:17          1              6                  3   \\n\",\n       \"2019-01-06 21:51:20          1              6                  3   \\n\",\n       \"2019-01-07 15:06:42          1              6                  3   \\n\",\n       \"...                        ...            ...                ...   \\n\",\n       \"2019-08-01 18:30:22          0              0                  0   \\n\",\n       \"2019-08-03 15:19:37          0              0                  0   \\n\",\n       \"2019-08-03 19:29:51          0              0                  0   \\n\",\n       \"2019-08-04 22:56:38          0              0                  0   \\n\",\n       \"2019-08-04 23:42:23          0              0                  0   \\n\",\n       \"\\n\",\n       \"                                                                       ...  \\\\\\n\",\n       \"label               area/centraldashboard area/deployment area/design  ...   \\n\",\n       \"time                                                                   ...   \\n\",\n       \"2019-01-03 19:45:38                     0               0           0  ...   \\n\",\n       \"2019-01-04 02:34:32                     0               0           0  ...   \\n\",\n       \"2019-01-04 02:35:17                     0               0           0  ...   \\n\",\n       \"2019-01-06 21:51:20                     0               0           0  ...   \\n\",\n       \"2019-01-07 15:06:42                     0               0           1  ...   \\n\",\n       \"...                                   ...             ...         ...  ...   \\n\",\n       \"2019-08-01 18:30:22                     1               2           0  ...   \\n\",\n       \"2019-08-03 15:19:37                     1               2           0  ...   \\n\",\n       \"2019-08-03 19:29:51                     1               2           0  ...   \\n\",\n       \"2019-08-04 22:56:38                     1               2           0  ...   \\n\",\n       \"2019-08-04 23:42:23                     1               2           0  ...   \\n\",\n       \"\\n\",\n       \"                              total                                     \\\\\\n\",\n       \"label               lifecycle/stale nolabels platform/aws platform/gcp   \\n\",\n       \"time                                                                     \\n\",\n       \"2019-01-03 19:45:38              29        0            0            8   \\n\",\n       \"2019-01-04 02:34:32              29        0            0            8   \\n\",\n       \"2019-01-04 02:35:17              30        0            0            8   \\n\",\n       \"2019-01-06 21:51:20              31        0            0            8   \\n\",\n       \"2019-01-07 15:06:42              31        0            0            8   \\n\",\n       \"...                             ...      ...          ...          ...   \\n\",\n       \"2019-08-01 18:30:22              53        2            3           24   \\n\",\n       \"2019-08-03 15:19:37              53        2            3           24   \\n\",\n       \"2019-08-03 19:29:51              53        2            3           24   \\n\",\n       \"2019-08-04 22:56:38              53        2            3           24   \\n\",\n       \"2019-08-04 23:42:23              53        2            3           24   \\n\",\n       \"\\n\",\n       \"                                                                              \\\\\\n\",\n       \"label               platform/minikube platform/other priority/p0 priority/p1   \\n\",\n       \"time                                                                           \\n\",\n       \"2019-01-03 19:45:38                 1              0           4          22   \\n\",\n       \"2019-01-04 02:34:32                 1              0           4          22   \\n\",\n       \"2019-01-04 02:35:17                 1              0           4          22   \\n\",\n       \"2019-01-06 21:51:20                 1              0           4          22   \\n\",\n       \"2019-01-07 15:06:42                 1              0           4          23   \\n\",\n       \"...                               ...            ...         ...         ...   \\n\",\n       \"2019-08-01 18:30:22                 1              1          46         139   \\n\",\n       \"2019-08-03 15:19:37                 1              1          46         139   \\n\",\n       \"2019-08-03 19:29:51                 1              1          46         139   \\n\",\n       \"2019-08-04 22:56:38                 1              1          46         139   \\n\",\n       \"2019-08-04 23:42:23                 1              1          46         139   \\n\",\n       \"\\n\",\n       \"                                              \\n\",\n       \"label               priority/p2 release/v0.6  \\n\",\n       \"time                                          \\n\",\n       \"2019-01-03 19:45:38          14            1  \\n\",\n       \"2019-01-04 02:34:32          15            1  \\n\",\n       \"2019-01-04 02:35:17          16            1  \\n\",\n       \"2019-01-06 21:51:20          17            1  \\n\",\n       \"2019-01-07 15:06:42          17            1  \\n\",\n       \"...                         ...          ...  \\n\",\n       \"2019-08-01 18:30:22          38            3  \\n\",\n       \"2019-08-03 15:19:37          38            3  \\n\",\n       \"2019-08-03 19:29:51          38            3  \\n\",\n       \"2019-08-04 22:56:38          38            3  \\n\",\n       \"2019-08-04 23:42:23          38            3  \\n\",\n       \"\\n\",\n       \"[421 rows x 106 columns]\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"import datetime\\n\",\n    \"start=datetime.datetime(2019, 1, 1)\\n\",\n    \"\\n\",\n    \"i = c.stats.index > start\\n\",\n    \"c.stats.iloc[i]\\n\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.6.6\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "scripts/project_stats.py",
    "content": "\"\"\"A script to create a plot of the number of issues in a project.\n\nUses GitHub's API v4 which uses graphql\nhttps://developer.github.com/v4/\n\nFor more instructions see the the corresponding Jupyter notebook:\nproject_stats.ipynb\n\"\"\"\nimport argparse\nimport datetime\nfrom dateutil import parser as date_parser\nimport json\nimport logging\nimport numpy as np\nimport os\nimport pandas as pd\nimport pprint\nimport requests\n\ndef run_query(query, headers): # A simple function to use requests.post to make the API call. Note the json= section.\n  request = requests.post('https://api.github.com/graphql', json={'query': query}, headers=headers)\n  if request.status_code == 200:\n    return request.json()\n  else:\n    raise Exception(\"Query failed to run by returning code of {}. {}\".format(request.status_code, query))\n\nclass ProjectStats(object):\n  def __init__(self, project):\n    self.query_template = None\n    self.project = project\n\n  def init_df(self, offset=0, size=300):\n    \"\"\"Initialize a dataframe of the specified size.\"\"\"\n    return pd.DataFrame({\n        \"time\": [datetime.datetime.now()] * size,\n        \"delta\": np.zeros(size),\n        \"label\": [\"\"] * size,\n    }, index=offset + np.arange(size))\n\n  def grow_df(self, df, offset=0, size=300):\n    return pd.concat([df, self.init_df(offset, size)])\n\n  def main(self):\n    self.fetch_data()\n    self.compute_stats()\n\n  def compute_stats(self):\n    # Compute a column to store total delta\n    total_delta = np.max(np.row_stack([self.data[\"delta\"].values,\n                                       np.zeros(self.data.shape[0])]), axis=0)\n    self.data[\"total_delta\"] = total_delta\n\n    self.stats = self.data.pivot_table(values=[\"delta\", \"total_delta\"],\n                                              index=['time'],\n                                       columns=['label'], fill_value=0,\n                                       aggfunc=np.sum)\n    self.stats = self.stats.cumsum()\n    self.stats = self.stats.rename(mapper={\"delta\": \"open\", \"total_delta\":\"total\"},\n                                   axis='columns')\n\n  def fetch_data(self):\n    logging.getLogger().setLevel(logging.INFO)\n\n    parser = argparse.ArgumentParser(\n       description=\"Find issues that need attention.\")\n\n    # Create a gitor using an access token\n    if not os.getenv(\"GITHUB_TOKEN\"):\n      logging.error(\"Environment variable GITHUB_TOKEN must be set\")\n      return\n\n    # We need to look at ProjectCard and then ProjectCard item\n    # https://developer.github.com/v4/object/projectcard/\n\n    # TODO(jlewi): Take project as an argument\n    self.query_template=\"\"\"{{\n    organization(login:\"kubeflow\") {{\n    projects(last:1 search:\"{project}\") {{\n      totalCount\n      edges {{\n        node {{\n          name\n          url\n          columns(first:1 {columns_cursor}) {{\n            totalCount\n            pageInfo {{\n              endCursor\n              hasNextPage\n            }}\n            edges {{\n              node {{\n                cards(first:100 {cards_cursor}) {{\n                  totalCount\n                  pageInfo {{\n                    endCursor\n                    hasNextPage\n                  }}\n                  edges {{\n                    node {{\n                      content {{\n                        __typename\n                        ... on Issue {{\n                          url\n                          title\n                          number\n                          createdAt\n                          closedAt\n\n                          labels(last:15) {{\n                              totalCount\n                              edges {{\n                                node {{\n                                  name\n                                }}\n                              }}\n                          }}\n                        }}\n                      }}\n                    }}\n                  }}\n                }}\n              }}\n            }}\n          }}\n        }}\n      }}\n    }}\n  }}\n  }}\n  \"\"\"\n\n    # Times at which issues were opened and closed\n    opened = []\n    closed = []\n\n    headers = {\"Authorization\": \"Bearer {0}\".format(os.getenv(\"GITHUB_TOKEN\"))}\n\n    columns_cursor = None\n    has_next_columns_page = True\n\n    issues = []\n\n    issue_numbers = []\n\n    # Create a dataframe to store the results\n    data = self.init_df()\n    num_items = 0\n\n    # We have to paginations to do\n    # Over ccolumns and over cards\n    while has_next_columns_page:\n      columns_cursor_text = \"\"\n      if columns_cursor:\n        columns_cursor_text = \"after:\\\"{0}\\\"\".format(columns_cursor)\n\n      has_next_cards_page = True\n      cards_cursor = None\n\n      while has_next_cards_page:\n        cards_cursor_text = \"\"\n\n        if cards_cursor:\n          cards_cursor_text = \"after:\\\"{0}\\\"\".format(cards_cursor)\n\n        query = self.query_template.format(project=self.project,\n                                           columns_cursor=columns_cursor_text,\n                                           cards_cursor=cards_cursor_text)\n\n        result = run_query(query, headers=headers) # Execute the query\n        projects_connections = result[\"data\"][\"organization\"][\"projects\"]\n        if projects_connections[\"totalCount\"] != 1:\n          raise ValueError(\"Total number of projects: Got {0} want 1\".format(\n                           projects_connections[\"totalCount\"]))\n        project = projects_connections[\"edges\"][0][\"node\"]\n\n        columns_connection = project[\"columns\"]\n\n        cards_connection = columns_connection[\"edges\"][0][\"node\"][\"cards\"]\n\n        cards_cursor = cards_connection[\"pageInfo\"][\"endCursor\"]\n        has_next_cards_page = cards_connection[\"pageInfo\"][\"hasNextPage\"]\n\n        # If we reached the end of cards for this column increment the columns_page\n        # cards cursor\n        if not has_next_cards_page:\n          has_next_columns_page = columns_connection[\"pageInfo\"][\"hasNextPage\"]\n          columns_cursor = columns_connection[\"pageInfo\"][\"endCursor\"]\n\n        for e in cards_connection[\"edges\"]:\n          n = e[\"node\"]\n          c = n[\"content\"]\n\n          if not c:\n            continue\n          # Cards can contain pull requests and these may not have labels\n          if not \"labels\" in c:\n            continue\n\n          labels_connections = c[\"labels\"]\n\n          if labels_connections[\"totalCount\"] > 15:\n            raise ValueError(\"Number of total labels exceeds the number \"\n                             \"fetched; need to add pagination\")\n\n          labels = labels_connections[\"edges\"]\n\n          label_names = []\n\n          for l in labels:\n            label_names.append(l[\"node\"][\"name\"])\n\n          if not label_names:\n            label_names.append(\"nolabels\")\n\n          num_entries = len(label_names) * 2\n          if num_items + num_entries  > data.shape[0]:\n            # Grow the dataframe\n            data = self.grow_df(data, offset=data.shape[0])\n\n          for f in [\"createdAt\", \"closedAt\"]:\n            if not c[f]:\n              continue\n\n            delta = 1\n            if f == \"closedAt\":\n              delta = -1\n\n            for l in label_names:\n              if delta > 0:\n                data[\"time\"].at[num_items] = date_parser.parse(c[\"createdAt\"])\n              else:\n                data[\"time\"].at[num_items] = date_parser.parse(c[\"closedAt\"])\n\n              data[\"delta\"].at[num_items] = delta\n              data[\"label\"].at[num_items] = l\n              num_items += 1\n\n    self.data = data[:num_items]\n\n\nif __name__ == \"__main__\":\n  c = ProjectStats()\n  c.main()"
  },
  {
    "path": "scripts/prs_by_company.py",
    "content": "#!/usr/bin/python\n#\n# Product a CSV file containing number of PRs produced by each company.\n# The input to the script is:\n# 1) csv file containing number of PRs for different GitHub users. this_file\n#    file is produced by exporting the data from devstats table\n#    https://devstats.kubeflow.org/d/13/developers-table?orgId=1&var-period_name=v0.2.0%20-%20now&var-metric=prs&var-period=anno_1_now\n# 2) Using gitdm to produce a json file containing users and their company.\nimport argparse\nimport csv\nimport logging\nimport json\nimport collections\n\nimport os\nimport yaml\n\n# To do some simple rectification if we see any of these words in the\n# company field we just map the company to this file\nknown_companies = [\"google\", \"red hat\", \"cisco\", \"datawire\", \"teradata\"]\n\ndef get_company_from_email(email):\n  domain = email.split(\"!\", 1)[1]\n  if domain == \"users.noreply.github.com\":\n    return \"\"\n\n  company = domain.split(\".\", 1)[0]\n  if company == \"gmail\":\n    return \"\"\n\n  return company\n\nif __name__ == \"__main__\":\n  logging.getLogger().setLevel(logging.INFO)\n  parser = argparse.ArgumentParser(\n     description=\"Create a CSV file containing # of PRs by company.\")\n\n  parser.add_argument(\n    \"--users_file\",\n    default=\"\",\n    type=str,\n    help=\"Json file containing information about committers.\")\n\n  parser.add_argument(\n    \"--prs_file\",\n    default=\"\",\n    type=str,\n    help=\"The csv file containing # of PRs for different users.\")\n\n  parser.add_argument(\n    \"--output\",\n    default=\"\",\n    type=str,\n    help=\"The file to write.\")\n\n  args = parser.parse_args()\n\n  if not args.users_file:\n    raise ValueError(\"--user_file must be specified.\")\n\n  if not args.prs_file:\n    raise ValueError(\"--prs_file must be specified.\")\n\n  if not args.output:\n    raise ValueError(\"--output must be specified.\")\n\n  with open(args.users_file) as hf:\n    users = json.load(hf)\n\n  # Build a dictionary mapping users to company\n  login_to_company = {}\n  for u in users:\n    company = u.get(\"company\")\n    login = u.get(\"login\")\n\n    if not company:\n      email = u.get(\"email\")\n      logging.info(\"Users %s company not set trying to infer from email: %s\", login, email)\n      # gitdm seems to replace @ with !\n      company = get_company_from_email(email)\n\n    if not company:\n      logging.info(\"Skipping user %s no company\", login)\n      continue\n    company = company.lower().strip()\n    company = company.strip(\"!\")\n\n    for c in known_companies:\n      if c in company:\n        logging.info(\"Mapping %s to %s\", company, c)\n        company = c\n        break\n    login_to_company[login] = company\n\n  counts = collections.Counter()\n\n  with open(args.prs_file) as hf:\n    reader = csv.reader(hf, delimiter=\";\")\n    # First line is headers\n    reader.next()\n    for row in reader:\n      login = row[1]\n      num_prs = int(row[2])\n      company = login_to_company.get(login , \"unknown\")\n      logging.info(\"User %s company %s # prs %s\", login, company, num_prs)\n\n      counts.update({company: num_prs})\n\n  logging.info(\"Writing output to %s\", args.output)\n  with open(args.output, \"w\") as hf:\n    writer = csv.writer(hf)\n    for k, v in counts.iteritems():\n      writer.writerow([k, v])\n"
  },
  {
    "path": "scripts/requirements.txt",
    "content": "altair\ngoogle-cloud-bigquery\npandas\npandas-gbq\n\n# needed by calendar_import.py\nfire\ndateutils\npyyaml\ngoogle-api-python-client\noauth2client\n"
  },
  {
    "path": "security/README.md",
    "content": "# Kubeflow Security\n\nThis folder contains information regarding the Kubeflow security.\n\n## Security Self-Assessment\n\nThe security self-assessment document is determining gaps in Kubeflow security,\nand preparing the security documentation for Kubeflow users.\n\n- [Kubeflow Security Self-Assessment](self-assessment.md).\n\n## Security Audit\n\nKubeflow participates in 3rd party security audits. You can find the audit results here:\n\n- TODO (andreyvelich): Add document once it is published.\n\n## Get Involved\n\n- **Join** the [CNCF Slack Workspace](https://www.kubeflow.org/docs/about/community/#kubeflow-slack-channels) and the [`#kubeflow-platform`](https://app.slack.com/client/T08PSQ7BQ/C073W572LA2) channel.\n- **Attend** the _Kubeflow Manifests WG_ meeting ([meeting notes](https://docs.google.com/document/d/1je_qzoJCAVXndxeJAgA8cdugvYZfsgrAi7HP_WDeUN0/edit), [community calendar](https://www.kubeflow.org/docs/about/community/#kubeflow-community-calendars)).\n\n## Work in Progress Documents\n\nWe are actively working to finalize the Policies and Procedures for the Kubeflow Security Team.\n\nSee the following documents for more information:\n\n- [DRAFT and Working Docs](https://docs.google.com/document/d/1sjWa0G2UqdsP1QROYVEl9iQR6v1x8HD7-F4TQo7lV6M/edit)\n- [Policy and Procedure Working Document](https://docs.google.com/document/d/1vw_efQyYG_zWEoL-vk9mZQX5p7fOcl3RTG6pcxMhYKI/edit)\n- [Kubernetes Security Policy](https://kubernetes.io/docs/reference/issues-security/security/) (being used as a reference)\n"
  },
  {
    "path": "security/self-assessment.md",
    "content": "# Kubeflow Security Self-Assessment\n\nThis document is a Kubeflow security self-assessment.\n\nAuthors:\n\n- Kubeflow Community\n\n# Table of Contents\n\n- [Metadata](#metadata)\n- [Security links](#security-links)\n- [Software Bill of Materials](#software-bill-of-materials)\n- [Overview](#overview)\n  - [Background](#background)\n  - [Actors](#actors)\n  - [Actions](#actions)\n  - [Goals](#goals)\n  - [Non-Goals](#non-goals)\n- [Self-assessment Use](#self-assessment-use)\n- [Security functions and features](#security-functions-and-features)\n- [Project Compliance](#project-compliance)\n- [Secure Development Practices](#secure-development-practices)\n  - [Development pipeline](#development-pipeline)\n  - [Communication Channels](#communication-channels)\n  - [Ecosystem](#ecosystem)\n- [Security issue resolution](#security-issue-resolution)\n  - [Responsible disclosure practice](#responsible-disclosure-practice)\n  - [Incident response](#incident-response)\n- [Appendix](#appendix)\n\n# Metadata\n\n<table>\n  <thead>\n    <tr>\n      <th>Name</th>\n      <th>Information</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>Assessment Stage</td>\n      <td>Incomplete</td>\n    </tr>\n    <tr>\n      <td>Software</td>\n      <td>\n        <a href=\"https://github.com/kubeflow/spark-operator\">Kubeflow Spark Operator</a>, \n        <a href=\"https://github.com/kubeflow/notebooks\">Kubeflow Notebooks</a>, \n        <a href=\"https://github.com/kubeflow/trainer\">Kubeflow Trainer</a>, \n        <a href=\"https://github.com/kubeflow/katib\">Kubeflow Katib</a>, \n        <a href=\"https://github.com/kubeflow/model-registry\">Kubeflow Model Registry</a>, \n        <a href=\"https://github.com/kubeflow/pipelines\">Kubeflow Pipelines</a>\n      </td>\n    </tr>\n    <tr>\n      <td>Security Provider?</td>\n      <td>No. Kubeflow projects are not security providers</td>\n    </tr>\n    <tr>\n      <td>Languages</td>\n      <td>Python, Go, TypeScript</td>\n    </tr>\n  </tbody>\n</table>\n\n# Security links\n\n- Kubeflow Spark Operator security policy: https://github.com/kubeflow/spark-operator/blob/master/SECURITY.md\n- Kubeflow Notebooks security policy: https://github.com/kubeflow/notebooks/blob/master/SECURITY.md\n- Kubeflow Trainer security policy: https://github.com/kubeflow/trainer/blob/master/SECURITY.md\n- Kubeflow Katib security policy: https://github.com/kubeflow/katib/blob/master/SECURITY.md\n- Kubeflow Model Registry security policy: https://github.com/kubeflow/model-registry/blob/main/SECURITY.md\n- Kubeflow Pipelines security policy: https://github.com/kubeflow/pipelines/blob/master/SECURITY.md\n\n# Software Bill of Materials\n\nThe package versions for each Kubeflow project can be found in the appropriate repositories:\n\n- Kubeflow Spark Operator\n  - Go modules: https://github.com/kubeflow/spark-operator/blob/master/go.mod\n  - FOSSA report: https://app.fossa.com/reports/b1c3b2c0-a1bf-4572-b3b2-8455729c8cf9\n- Kubeflow Notebooks\n  - Go modules: https://github.com/kubeflow/notebooks/blob/notebooks-v1/components/notebook-controller/go.mod\n  - FOSSA report: https://app.fossa.com/reports/8720a333-0c53-4a2d-a3c9-92a2435d4d7c\n- Kubeflow Trainer\n  - Go modules: https://github.com/kubeflow/trainer/blob/master/go.mod\n  - Python packages: https://github.com/kubeflow/sdk/blob/main/pyproject.toml\n  - FOSSA report: https://app.fossa.com/reports/bb8e2d41-254a-4af3-9044-e7f484c34dd1\n- Kubeflow Katib\n  - Go modules: https://github.com/kubeflow/katib/blob/master/go.mod\n  - Python packages: https://github.com/kubeflow/katib/blob/master/sdk/python/v1beta1/setup.py\n  - FOSSA report: https://app.fossa.com/reports/9762748b-b1fb-43ed-84d1-bee58e61e619\n- Kubeflow Model Registry\n  - Go modules: https://github.com/kubeflow/model-registry/blob/main/go.mod\n  - Python packages: https://github.com/kubeflow/model-registry/blob/main/clients/python/pyproject.toml\n  - FOSSA report: https://app.fossa.com/reports/0559a384-a6ce-4a37-b286-fcc47c962790\n- Kubeflow Pipelines\n  - Go modules: https://github.com/kubeflow/pipelines/blob/master/go.mod\n  - Python packages: https://github.com/kubeflow/pipelines/blob/master/sdk/python/requirements.txt\n  - FOSSA report: https://app.fossa.com/reports/295e1511-cf5e-405c-abc3-eddac2ef03ae\n\nAll Kubeflow container images can be found here: https://github.com/orgs/kubeflow/packages\n\nThe SBOMs for any released Kubeflow container image can be accessed using the following command:\n\n```\ndocker sbom ghcr.io/kubeflow/trainer/trainer-controller-manager:v2.0.0-rc.0\n```\n\n# Overview\n\n[Kubeflow](https://www.kubeflow.org/) is the foundation of tools for AI Platforms on Kubernetes.\n\nAI platform teams can build on top of Kubeflow by using each project independently or deploying the\nentire AI reference platform to meet their specific needs. The Kubeflow AI reference platform is\ncomposable, modular, portable, and scalable, backed by an ecosystem of Kubernetes-native\nprojects that cover every stage of the [AI lifecycle](https://www.kubeflow.org/docs/started/architecture/#kubeflow-projects-in-the-ai-lifecycle).\n\nWhether you’re an AI practitioner, a platform administrator, or a team of developers, Kubeflow\noffers modular, scalable, and extensible tools to support your AI use cases.\n\nPlease refer to [the official documentation](https://www.kubeflow.org/docs/) for more information.\n\n## Background\n\nBuilding AI platforms in cloud native environments poses many challenges given the uniqueness of\nAI workloads. While Kubernetes provides a robust foundation for container orchestration, it was not\noriginally designed to support AI workloads. Some of the gaps including gang-scheduling, accelerator\nmanagement, monitoring, autoscaling, managing stateful workloads, often resulting in operational\ncomplexity and inefficiencies.\n\nKubeflow projects address these challenges by creating Custom Resource Definitions (CRDs)\non top of Kubernetes to orchestrate AI workloads for Data Processing, AI Development, Model Training,\nModel Optimization, ML Pipelines and MLOps governance. Additionally, Kubeflow offers a variety of interfaces including a\nPython SDK and web UIs which allow users to focus on their models rather than the underlying\ncomplexities.\n\nKubeflow is designed to be portable, extensible, and framework-agnostic. It offers pluggable\narchitecture that allows platform engineers integrate their internal systems with Kubeflow tools.\n\nEvery Kubeflow project is designed to address specific parts of the AI lifecycle. For example, Kubeflow\nTrainer manages model training and Kubeflow Spark Operator manages data processing workloads.\n\n## Actors\n\nKubeflow consists of **six** individual projects which allow organizations to build end-to-end\nAI platforms. The following diagram shows the AI lifecycle and role of Kubeflow projects:\n\n![ai-lifecycle](images/ai-lifecycle-kubeflow.drawio.svg)\n\nThe actors for each Kubeflow project are explained in the following sections:\n\n### Kubeflow Spark Operator\n\n![spark-operator](images/spark-operator.png)\n\n- Spark Operator controller: A controller that watches for events of SparkApplication CRDs and acts on the watch events. It includes a submission runner that runs Spark submit for submissions received from the controller, and a Spark pod monitor that watches for Spark pods and sends pod status updates to the controller.\n\n- Spark Mutating Webhook: a Mutating Admission Webhook that handles customizations for Spark driver\n  and executor Pods based on the annotations on the Pods added by the controller.\n\nDetailed information can be found here in the official\n[Kubeflow Spark Operator docs](https://www.kubeflow.org/docs/components/spark-operator/overview/#architecture).\n\n### Kubeflow Notebooks\n\n- Notebook controller: controller that watches events of Notebook CRDs. Kubeflow Notebooks supports\n  three type of IDEs: JupyterLab, RStudio, and VSCode. Supported images are explained in\n  [this guide](https://www.kubeflow.org/docs/components/notebooks/container-images/#official-images).\n\n- Culling controller: controller that watches for Notebooks activity and cull resources in case of\n  idleness.\n\n- Notebook web UI: web interface that allow users to manage their Notebooks. User can leverage this\n  UI to create IDE and start model development. The web UI is integrated with Kubeflow Dashboard\n  which gives users ability to see all created Notebooks.\n\n### Kubeflow Katib\n\n![katib](images/katib.png)\n\n- Experiment controller: controller that watches events of Experiment CRDs which manage single\n  hyperparameter tuning job. User can specify several parameters in Experiment such as objective\n  to define metric that user wants to achieve, search space to define set of all hyperparameter\n  values, and search algorithm to use for optimization job (e.g. bayesian optimization )\n\n- Suggestion controller: controller that watches events of Suggestion CRDs which manage set of\n  hyperparameter values that the hyperparameter tuning process has proposed. Suggestion is\n  responsible to manage algorithm service.\n\n- Trail controller: controller that watches events of Trial CRDs which manage one iteration of\n  hyperparameter tuning process. A Trial corresponds to one worker job instance with a list of\n  parameter assignments. The list of parameter assignments corresponds to a Suggestion.\n\n- Katib webhooks: Validates and mutates CRD resources to ensure they conform to Katib standards\n  and best practices. Katib also manages admission webhook to mutate metrics collector sidecar\n  container into Trial workers.\n\n- Katib SDK: Python SDK which allows ML engineers manage their Experiments without learning YAML\n  configurations and Kubernetes APIs.\n\n- Katib web UI: web interface that allow users to manage their Experiments. User can leverage this\n  UI to create Experiment and compare results.\n\n### Kubeflow Trainer\n\n![trainer](images/trainer.svg)\n\n- TrainingRuntime controller: controller that watches events of TrainingRuntime and\n  ClusterTrainingRuntime CRDs. It is responsible to check whether runtime is unused and can be\n  deleted or updated by users.\n\n- TrainJob controller: controller that watches events of TrainJob CRDs. It is\n  responsible to orchestrate distributed training job based on TrainJob and TrainingRuntime\n  configurations. It creates additional resources like ConfigMap for MPI hostfile to ensure\n  appropriate orchestration of jobs.\n\n- Trainer webhook: Validates and mutate CRD resources to ensure they conform to Kubeflow Trainer\n  standards and best practices.\n\n- External Integrations: JobSet controller to manage orchestration of multiple jobs within single\n  workload.\n\n- Kubeflow Trainer SDK: Python SDK which allows ML engineers manage their TrainJobs without\n  learning YAML configurations and Kubernetes APIs.\n\n### Kubeflow Model Registry\n\n![model-registry](images/model-registry.png)\n\n- OpenAPI/REST Server: This component exposes a high-level REST API of the Model Registry.\n  The REST API offers end-user capabilities focused on the domain model of Model Registry, like\n  register a model, version a model, get a catalog of models, manage the deployment statutes of a model\n\n- Python SDK: Python SDK to interact with Model Registry. This tool can be used by a user to execute\n  operations such as retrieving the registered models, get model’s deployment status, model’s version etc.\n\nDetailed information can be found here in the official\n[Kubeflow Model Registry docs](https://www.kubeflow.org/docs/components/model-registry/reference/architecture/).\n\n### Kubeflow Pipelines (KFP)\n\n![pipelines](images/pipelines.png)\n\n- KFP API Server: A gRPC and HTTP API server that accepts user requests to manage their ML pipelines.\n  Users connect to the API server via REST or KFP SDK.\n\n- Pipelines SQL DB: database that contains metadata about runs and pipelines. KFP API Server writes\n  data to this DB.\n\n- Persistent Agent: controller that watches for events of Workflow and ScheduledWorkflow CRDs.\n  It reports status to the KFP API Server.\n\n- Scheduler Workflow controller: controller that watches for events of ScheduledWorkflow CRDs.\n  It creates runs for recurring runs. When a recurring run is created, the controller is in charge of\n  creating the underlying Workflow CR at the scheduled times.\n\n- ML Metadata gRPC server: gRPC server that manage data in MLMD SQL database.\n\n- External Integrations:\n\n  - Argo Workflow controller to manage orchestration of Workflow CRDs.\n  - S3-complaint object store: object store that contains artifacts that launcher pods read and\n    write to.\n  - MLMD SQL DB: database that contains metadata around artifacts, executions, and lineage. All\n    pipeline pods send and receive data from MLMD. KFP UI also communicates with this database.\n\n- Envoy Gateway: Support KFP UI -> MLMD reads via HTTP/1.0 using gRPC-web protocol.\n\n- Launcher Pod: Runs user's code that was written in KFP SDK. It uses the images specified\n  by the user and it downloads Python packages from an external pip repository (e.g. PyPI).\n\n## Actions\n\n### Kubeflow Spark Operator\n\n- Spark Application submission: Users create SparkApplication CRDs, specifying configuration for the\n  Spark Job.\n\n- Spark Operator controller automatically performs appropriate actions to orchestrate Spark jobs on\n  Kubernetes\n\n- Security and Access Control: Spark Operator leverages Kubernetes RBAC for Spark drivers and\n  executors. This allows administrators to define who can create, modify, or delete SparkApplications\n  and associated pods within the specific namespaces, enabling proper multi-tenant isolation.\n\n### Kubeflow Notebooks\n\n- Notebook creation: User access Kubeflow Notebook UI to create Notebook. Kubeflow Dashboard manages\n  authentication and authorization for user via Istio gateway.\n\n- Security and Access Control: Kubeflow Notebooks leverages Kubernetes RBAC to ensure that user can\n  manage Notebooks.\n\n### Kubeflow Katib\n\n- Experiment creation: User creates Experiment CRDs, specifying configuration for the hyperparameter\n  tuning job. User can create Experiment using: Python SDK, Kubeflow Dashboard, or `kubectl`. In\n  case of Python SDK and `kubectl`, Katib relies on Kubernetes RBAC, in case of Kubeflow Dashboard\n  user access it via Istio gateway.\n\n- Security and Access Control: Katib leverages Kubernetes RBAC to ensure that user can\n  manage Experiments.\n\n### Kubeflow Trainer\n\n- TrainJob creation: User creates TrainJob CRDs, specifying configuration for the training job.\n  User should create TrainJob using Python SDK. Python SDK relies on Kubernetes RBAC to access\n  Kubernetes cluster.\n\n- TrainingRuntime creation: User creates TrainingRuntime or ClusterTrainingRuntime CRDs, specifying\n  template configuration for the training job. User should create CRDs via `kubectl`.\n\n- Security and Access Control: Kubeflow Trainer leverages Kubernetes RBAC to ensure that user can\n  manage TrainJobs and TrainingRuntimes.\n\n### Kubeflow Model Registry\n\n- Save models: User utilizes Python client to interact with Model Registry. Also, user can use\n  Kubeflow Dashboard to manage models. In that case, user access it via Istio gateway\n\n### Kubeflow Pipelines\n\n- Create pipelines: User utilized Python client to manage ML pipelines. Also,\n  can use Kubeflow Dashboard to access KFP UI. In that case, user access it via Istio gateway\n\n- Security and Access Control: Kubeflow Pipelines leverages Kubernetes RBAC to ensure that user can\n  manage Pipelines.\n\n## Goals\n\n- **Foundation for AI Platforms on Kubernetes**: Kubeflow projects provide a standard, cloud native\n  solution to build end-to-end AI platforms on Kubernetes. The Kubeflow tools are scalable and\n  composable which gives organizations flexibility to adopt them.\n\n- **Simplify Complexity**: Abstract the Kubernetes complexity for ML users to manage and scale AI\n  workloads. Define Python-first experience for users, so they can focus on their models rather\n  than the underlying infrastructure.\n\n- **Large Scale Model Development**: Provide capability to develop, train, optimize, and deploy\n  LLMs at scale.\n\n- **Out of the Box ML Framework Support**: Support a wide range of ML frameworks like PyTorch,\n  JAX, HuggingFace, DeepSpeed, XGboost, and others to run AI workloads.\n\n- **Advanced Orchestration Patterns**: Support advanced orchestration patterns such as gang-scheduling,\n  High-Performance Computing jobs, and GPU cost optimization to run AI workloads.\n\n- **End-to-End GenAI on Kubernetes**: Provides simple APIs and interfaces for users to perform\n  end-to-end GenAI use-cases including LLM fine-tuning, RAG, LLM optimizations, LLM inference,\n  AI agent orchestration.\n\n- **Interactive AI development**: Provide interactive development environment for ML users to\n  develop and deploy AI models.\n\n## Non-Goals\n\n- Kubeflow doesn't re-invent ML frameworks and packages (e.g. PyTorch, JAX).\n- Kubeflow is not a replacement for GitOps systems like ArgoCD.\n- Kubeflow doesn't enforce a deployment method or distribution for Kubeflow projects.\n- Kubeflow does not manage the security of external dependencies or third-party plugins beyond\n  standard Kubernetes best practices.\n\n# Self-assessment Use\n\nThis self-assessment is created by the Kubeflow team to perform an internal analysis of the\nproject’s security. It is not intended to provide a security audit of Kubeflow, or function as an\nindependent assessment or attestation of Kubeflow’s security health.\n\nThis document serves to provide Kubeflow users with an initial understanding of Kubeflow’s security,\nwhere to find existing security documentation, Kubeflow plans for security, and general overview of\nKubeflow security practices, both for development of Kubeflow projects as well as security of\nKubeflow projects.\n\nThis document provides the CNCF TAG-Security with an initial understanding of Kubeflow to assist in\na joint-assessment, necessary for projects under incubation. Taken together, this document and the\njoint-assessment serve as a cornerstone for if and when Kubeflow seeks graduation and is preparing\nfor a security audit.\n\n# Security functions and features\n\n| Component                          | Applicability | Description of Importance                                                                               |\n| ---------------------------------- | ------------- | ------------------------------------------------------------------------------------------------------- |\n| Kubernetes RBAC & Network Policies | Critical      | Leverages Kubernetes RBAC and network policies to restrict access to resources and isolate workloads.   |\n| Kubeflow Web UI                    | Critical      | Leverages Istio Gateway and OAuth2 Proxy to authenticate and authorize users for Kubeflow UIs           |\n| Secure Defaults                    | Relevant      | Default configurations are designed to minimize exposure and follow Kubernetes security best practices. |\n| Monitoring & Logging               | Relevant      | Integrates with Prometheus, Grafana, and logging systems for observability and incident response.       |\n\n# Project Compliance\n\nKubeflow projects do not currently claim compliance with specific security standards\n(e.g., PCI-DSS, ISO, GDPR). The Kubeflow projects follow open source and Kubernetes security best\npractices and is following the OpenSSF Best Practices. Kubeflow projects achieve the OpenSSF badges:\n\n- Kubeflow Spark Operator: https://www.bestpractices.dev/en/projects/10524\n- Kubeflow Notebooks: https://www.bestpractices.dev/en/projects/9942\n- Kubeflow Katib: https://www.bestpractices.dev/projects/9941\n- Kubeflow Trainer: https://www.bestpractices.dev/projects/10435\n- Kubeflow Model Registry: https://www.bestpractices.dev/en/projects/9937\n- Kubeflow Pipelines: https://www.bestpractices.dev/en/projects/9938\n\n# Secure Development Practices\n\n## Development pipeline\n\n- Committers are required to agree to the Developer Certificate of Origin (DCO) for each and\n  every commit by simply stating you have a legal right to make the contribution.\n- At least one reviewer is required for a pull request to be approved.\n- Automated tests for unit, integration, and end-to-end testing.\n- Automated code quality checks and linting.\n- Publicly documented contribution and code review guidelines\n\n  - https://www.kubeflow.org/docs/about/contributing/\n  - https://github.com/kubeflow/spark-operator/blob/master/CONTRIBUTING.md\n  - https://github.com/kubeflow/notebooks/blob/main/CONTRIBUTING.md\n  - https://github.com/kubeflow/trainer/blob/master/CONTRIBUTING.md\n  - https://github.com/kubeflow/katib/blob/master/CONTRIBUTING.md\n  - https://github.com/kubeflow/pipelines/blob/master/CONTRIBUTING.md\n  - https://github.com/kubeflow/model-registry/blob/main/CONTRIBUTING.md\n\n- Tide is enabled to automatically merge the PRs after approvers add `/lgtm` and `/approve` labels.\n\n- Release process for each Kubeflow project is described in their GitHub repositories:\n\n  - https://github.com/kubeflow/spark-operator/blob/master/docs/release.md\n  - https://github.com/kubeflow/trainer/blob/master/docs/release/README.md\n  - https://github.com/kubeflow/katib/blob/master/docs/release/README.md\n  - https://github.com/kubeflow/pipelines/blob/master/RELEASE.md\n  - https://github.com/kubeflow/model-registry/blob/main/RELEASE.md\n\n## Communication Channels\n\n### Internal\n\n- Kubeflow projects have a dedicated CNCF Slack channel `kubeflow-contributors` used for developer\n  communication.\n- Kubeflow KSC has a private mailing list for maintainers and user requests: `ksc@kubeflow.org`\n\n### Inbound\n\n- Kubeflow Projects have dedicated CNCF Slack channels to communicate with users and maintainers:\n\n  - `#kubeflow-spark-operator`\n  - `#kubeflow-notebooks`\n  - `#kubeflow-trainer`\n  - `#kubeflow-katib`\n  - `#kubeflow-hub`\n  - `#kubeflow-pipelines`\n\n- Kubeflow Working Groups host weekly community meetings: https://www.kubeflow.org/docs/about/community/#list-of-available-meetings\n\n### Outbound\n\n- Kubeflow users this Slack channel for announcements: `#kubeflow-announcements`\n\n- Kubeflow has a dedicated mailing: `kubeflow-discuss@googlegroups.com`\n\n- Kubeflow also uses various social media:\n\n  - LinkedIn: https://www.linkedin.com/company/kubeflow/\n  - X: https://x.com/kubeflow\n  - BlueSky: https://bsky.app/profile/kubefloworg.bsky.social\n  - YouTube Channel: https://www.youtube.com/@Kubeflow and https://www.youtube.com/@KubeflowCommunity\n\n## Ecosystem\n\nKubeflow projects extensively use cloud native ecosystem, including Kubernetes, Argo Workflow,\nIstio, Helm, Knative, KServe, JobSet, Kueue, and other projects.\n\nMany CNCF projects have integrations with Kubeflow tools like KubeEdge and Volcano have integrations\nwith Kubeflow Trainer.\n\n# Security Issue Resolution\n\nKubeflow projects maintain security policy in their corresponding `SECURITY.md` files:\n\n- https://github.com/kubeflow/spark-operator/blob/master/SECURITY.md\n- https://github.com/kubeflow/notebooks/blob/master/SECURITY.md\n- https://github.com/kubeflow/trainer/blob/master/SECURITY.md\n- https://github.com/kubeflow/katib/blob/master/SECURITY.md\n- https://github.com/kubeflow/model-registry/blob/main/SECURITY.md\n- https://github.com/kubeflow/pipelines/blob/master/SECURITY.md\n\n## Responsible Disclosure Practice\n\nVulnerability reports are accepted via GitHub's private vulnerability reporting tool or via a\nprivate mailing list `ksc@kubeflow.org`. Maintainers collaborate with reporters to triage and\nresolve issues, and advisories are published as needed.\n\n## Incident Response\n\nUpon receiving a vulnerability report, the Kubeflow maintainers triage the issue, determine impact,\nand work to release a patch for supported versions. Users are notified via release notes,\ndocumentation, and community channels. Only a limited number of maintainers have access to\nthe reports to avoid excessive disclosure of vulnerabilities.\n\n# Appendix\n\n- _Known Issues Over Time_: Issues and vulnerabilities are tracked in GitHub Issues and Security\n  Advisories. No critical vulnerabilities are currently open.\n- _OpenSSF Best Practices_: Kubeflow projects achieved the passing level criteria and some projects\n  achieve silver and gold status. Community is currently working to achieve silver status for\n  each Kubeflow project.\n- _Case Studies_: Kubeflow is used by a lot of organizations including AstraZeneca, AWS, Bloomberg,\n  CERN, DHL, Google, IBM, NVIDIA, Nutanix, Red Hat, Toyota, and many others. The extensive list of\n  adopters for each project can be found here: https://github.com/kubeflow/community/blob/master/ADOPTERS.md\n- _Related Projects / Vendors_: Related projects including KServe, Volcano, MLFlow, Airflow. Vendors including\n  SageMaker, VertexAI, AzureML, OpenShift AI.\n- _Competitive projects_: MLFlow, Airflow, Ray.\n  Kubeflow projects differentiate by providing Kubernetes-native solution, extensible and portable.\n  That gives organizations more flexibility to integrate Kubeflow tools within AI platforms.\n"
  },
  {
    "path": "sig-feature-store/README.md",
    "content": "<!---\nThis is an autogenerated file!\n\nPlease do not edit this file directly, but instead make changes to the\nsigs.yaml file in the project root.\n\nTo understand how this file is generated, see https://github.com/kubeflow/community/blob/master/generator/README.md\n--->\n# Feature Store Special Interest Group\n\nSIG Feature Store covers the definition, management, storage, discovery, and serving of features to models.\n\nThe [charter](charter.md) defines the scope and governance of the Feature Store Special Interest Group.\n\n## Meetings\n* Monthly SIG Meeting: [Wednesdays at 18:00 PT (Pacific Time)]() (monthly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=18:00&tz=PT%20%28Pacific%20Time%29).\n  * [Meeting notes and Agenda](https://docs.google.com/document/d/1h2BMuN6V6cGFQrSRk7msmYVmZdrouLRV_EPR_tphZrU/edit#).\n\n## Leadership\n\n### Chairs\nThe Chairs of the SIG run operations and processes governing the SIG.\n\n* Kevin Stumpf (**[@kevinstumpf](https://github.com/kevinstumpf)**)\n* Oleksii Moskalenko (**[@pyalex](https://github.com/pyalex)**), Gojek\n* Willem Pienaar (**[@woop](https://github.com/woop)**), Gojek\n\n### Technical Leads\nThe Technical Leads of the SIG establish new subprojects, decommission existing\nsubprojects, and resolve cross-subproject technical issues and decisions.\n\n* Kevin Stumpf (**[@kevinstumpf](https://github.com/kevinstumpf)**)\n* Oleksii Moskalenko (**[@pyalex](https://github.com/pyalex)**), Gojek\n* Willem Pienaar (**[@woop](https://github.com/woop)**), Gojek\n\n## Contact\n- Slack: [#feast](https://kubeflow.slack.com/messages/feast)\n- [Mailing list](https://groups.google.com/forum/#!forum/kubeflow-discuss)\n- [Open Community Issues/PRs](https://github.com/kubeflow/community/labels/sig%2Farea/sig-feature-store)\n- GitHub Teams:\n    - [@kubeflow/sig-feature-store](https://github.com/orgs/kubeflow/teams/sig-feature-store) - Feature store development and roadmap\n\n[subproject-definition]: https://github.com/kubeflow/community/blob/master/governance.md#subprojects\n<!-- BEGIN CUSTOM CONTENT -->\n\n<!-- END CUSTOM CONTENT -->\n"
  },
  {
    "path": "sig-feature-store/charter.md",
    "content": "# SIG Feature Store Charter\n\nThis charter adheres to the conventions, roles and organization management outlined in [wg-governance].\n\n## Scope\n\nSIG Feature Store covers the definition, management, storage, discovery, and serving of features to models.\n\n### In scope\n\n#### Product Functionality\n\nThis SIG aims to coordinate projects and technologies necessary to enable the core functionality required to deploy and operate a feature store in Kubeflow.\n\n- Ensure that users have a registry to define and manage features and their related metadata.\n- Ensure that users have a means of data ingestion, management, and storage for the purposes of model training and online serving.\n- Ensure that users have a unified feature serving layer for both model training and online serving.\n- Ensure that users have the ability to both generate and validate feature statistics.\n- Ensure that users have operational instrumentation necessary to safely run a feature store in production.\n- Ensure that users have the documentation and tutorials necessary to both deploy, operate, and use a feature store.\n- Ensure that Kubeflow maintains a cohesive data tooling vision with respect to feature stores.\n\n#### Cross-cutting and Externally Facing Processes\n\n- Coordinating with Pipelines/KFData WG to ensure both datasets and streams can be ingested, persisted, and served.\n- Coordinating with Training WG to make sure that its possible to create training datasets using the feature store.\n- Coordinating with Serving WG to make sure that its possible to retrieve online feature data from the feature store.\n- Coordinating with Manifests WG to ensure that feature store manifests are properly deployed with Kubeflow.\n- Coordinating with release teams to ensure that the feature store functionality can be released properly.\n\n### Out of scope\n\n- Data pipelining, immutability, and lineage.\n\n## Roles and Organization Management\n\nThis SIG follows adheres to the Roles and Organization Management outlined in [wg-governance]\nand opts-in to updates and modifications to [wg-governance].\n\n### Subproject Creation\n\nSIG Technical Leads.\n\n[wg-governance]: ../wgs/wg-governance.md\n"
  },
  {
    "path": "sig-onprem/README.md",
    "content": "<!---\nThis is an autogenerated file!\n\nPlease do not edit this file directly, but instead make changes to the\nsigs.yaml file in the project root.\n\nTo understand how this file is generated, see https://github.com/kubeflow/community/blob/master/generator/README.md\n--->\n# OnPrem Special Interest Group\n\nServe as a community resource for advising with on premises installation of Kubeflow.\n\nThe [charter](charter.md) defines the scope and governance of the OnPrem Special Interest Group.\n\n## Meetings\n* SIG Onprem Community Meeting - (US East/EMEA): [Thursdays at 10:30 ET (Eastern Time)](https://us02web.zoom.us/j/87159010361?pwd=c09wTXk2dmJPNmpkTDFTb0o0cnY2Zz09) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=10:30&tz=ET%20%28Eastern%20Time%29).\n* SIG Onprem Community Meeting - (US West): [Fridays at 15:00 ET (Eastern Time)](https://us02web.zoom.us/j/87159010361?pwd=c09wTXk2dmJPNmpkTDFTb0o0cnY2Zz09) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=15:00&tz=ET%20%28Eastern%20Time%29).\n\n## Leadership\n\n### Chairs\nThe Chairs of the SIG run operations and processes governing the SIG.\n\n* Jeff Fogarty (**[@jtfogarty](https://github.com/jtfogarty)**), US Bank\n\n### Technical Leads\nThe Technical Leads of the SIG establish new subprojects, decommission existing\nsubprojects, and resolve cross-subproject technical issues and decisions.\n\n* Jeff Fogarty (**[@jtfogarty](https://github.com/jtfogarty)**), US Bank\n* Igor Mameshin (**[@mameshini](https://github.com/mameshini)**), Agile Stacks\n\n## Contact\n- Slack: [#sig-onprem](https://kubeflow.slack.com/messages/sig-onprem)\n- [Mailing list](https://groups.google.com/forum/#!forum/kubeflow-discuss)\n- [Open Community Issues/PRs](https://github.com/kubeflow/community/labels/sig%2Farea/sig-onprem)\n- GitHub Teams:\n    - [@kubeflow/sig-onprem](https://github.com/orgs/kubeflow/teams/sig-onprem) - General Discussion\n\n[subproject-definition]: https://github.com/kubeflow/community/blob/master/governance.md#subprojects\n<!-- BEGIN CUSTOM CONTENT -->\n\n<!-- END CUSTOM CONTENT -->\n"
  },
  {
    "path": "sig-onprem/charter.md",
    "content": "# SIG On Premises Charter\n\nThis charter adheres to the conventions, roles, and organization management outlined in [wg-governance].\n\n## Scope\n\nSIG On Premises \n\n### In scope\n\n#### Product Functionality\n\nThis SIG aims to develop best practices for Kubeflow deployments in on-prem environments.\n\n- Ensure that users have access to a list of validated reference designs for setting up a Kubeflow cluster.\n- Ensure that a process is defined that will enable users to contribute to reference designs.\n- Ensure that there is always at least one working and validated complete software stack. This software stack would be defined as a list of OSes and component versions that have been verified to create a working solution.\n\n\n#### Cross-cutting and Externally Facing Processes\n\n- Maintain testing infrastructure to provide a well-tested architecture for Kubeflow on-prem deployment.\n- Coordinating with other Kubeflow WG to ensure they are aware of issues in on-prem deployments where appropriate.\n- Coordinating with release teams to ensure they are aware of issues in on-prem deployments.\n- Maintaining a list of hardware stacks known to work with Kubeflow.\n- Maintaining instructions on how to verify a working stack.\n- Maintaining a template for how to run benchmarks to verify a performant stack.\n- Maintain a known-issues list\n- Coordination with application working groups to ensure project artifacts are tested across onprem technologies such as:\n  - Different CPU architectures and different accelerator architectures. \n  - Take into account different use cases, edge, and other \"non-traditional\" onprem technologies that are being developed in the field.\n\n### Out of scope\n\n- Providing fixes for every issue found for on-prem deployments.\n- Providing root-cause analysis for every issue found.\n- Maintaining manifests for Kubeflow on-prem deployments, our scope is to test the output of the WG Manifests working group on our onprem test infrastructure and then report back to other working groups. \n  - SIG On-prem does not directly maintain these manifests, we coordinate with the other working groups to help prioritize work.\n\n## Roles and Organization Management\n\nThis SIG follows adheres to the Roles and Organization Management outlined in [wg-governance]\nand opts-in to updates and modifications to [wg-governance].\n\n### Subproject Creation\n\nSIG Co-Chairs\n\n- Jeff Fogarty - Co-chair - US Bank - jeff.fogarty@usbank.com - TZ: US CST\n- Michael Tanenbaum - Co-chair - Arrikto -michael.tanenbaum@arrikto.com / michael.a.tanenbaum@gmail.com - Timezone: US EST\n- Rui Vasconcelos - Co-chair - Canonical - rui.vasconcelos@canonical.com - TZ: EU West\n\nSIG Technical Leads\n\n- Jeff Fogarty - Co-tech-lead - US Bank - jeff.fogarty@usbank.com\n- Igor Mameshin - Co-tech-lead - AgileStacks - igor@agilestacks.com - Timezone: US PST\n- Marlow Weston - Co-tech-lead - Intel - catblade@gmail.com - Timezone: US CST\n\n[wg-governance]: ../wgs/wg-governance.md"
  },
  {
    "path": "slack/OWNERS",
    "content": "approvers:\n  - mameshini\n"
  },
  {
    "path": "slack/README.md",
    "content": "# Slack Guidelines\n\nSlack is the main communication platform for Kubeflow outside of our mailing\nlists. It’s important that conversation stays on topic in each channel, and that\neveryone abides by the [Code of Conduct](https://github.com/kubeflow/community/blob/master/CODE_OF_CONDUCT.md). Community\nmembers should all expect to have a positive experience.\n\nChat is searchable and public. Do not make comments that you would not say on a\nvideo recording or in another public space. Please be courteous to others.\n\n`@here` and `@channel` should be used rarely. Members will receive notifications\nfrom these commands and we are a global project - please be kind. Note: `@all`\nis only to be used by admins.\n\nTo join the [Kubeflow Slack](https://kubeflow.slack.com), click this [Invitation to Kubeflow workspace](https://www.kubeflow.org/docs/about/community/#kubeflow-slack)\n\n## Code of Conduct\n\nThe Kubeflow [Code of Conduct](https://github.com/kubeflow/community/blob/master/CODE_OF_CONDUCT.md) applies throughout the\nproject, and includes all communication mediums.\n\n## Admins\n\n(by Slack ID)\\\n@Igor Mameshin\n\nTo connect: please reach out in the #admins channel, mention one of us in the specific channel where you have a question, or DM (Direct Message) one of us privately.\n\n### Admin expectations and guidelines\n\n- Adhere to Code of Conduct\n- Take care of spam as soon as possible, which may mean taking action by making\n  members inactive\n- Moderating and fostering a safe environment for conversations\n- Bring Code of Conduct issues to the Steering Committee\n- Create relevant channels and list Code of Conduct in new channel welcome\n  message\n- Help troubleshoot Slack issues\n- Review bot, token, and webhook requests\n- Be helpful!\n\n## Creating channels\n\nPlease submit a PR to [Slack Channels](./slack_channels.md) with the name and description for a new channel.\nYou can also contact #admins group with your request to create a new channel.\n\nChannels are dedicated to working groups, sub-projects, community topics,\nand related programs/projects.\n\nChannels are not:\n\n- company specific; e.g. a channel named for a cloud provider must be used for\n  conversation about Kubeflow-related topics on that cloud, and not proprietary\n  information of the provider.\n- private unless there is an exception: code of conduct matters, mentoring,\n  security/vulnerabilities, or steering committee.\n\nAll channels need a documented purpose. Use this space to welcome the targeted\ncommunity: promote your meetings, post agendas, etc.\n\nWe may make special accommodations where necessary.\n\n## Escalating and/or reporting a problem\n\nJoin the #admins channel or contact one of the admins via DM directly and describe the situation. If the issue can be\ndocumented, please take a screenshot to include in your message.\n\n## Bots, tokens, and webhooks\n\nBots, tokens, and webhooks are reviewed on a case-by-case basis. Expect most\nrequests will be rejected due to security, privacy, and usability concerns. Bots\nand the like tend to make a lot of noise in channels.\n\nPlease join #admins channel and have a discussion about your request before\nrequesting the access.\n\n## Admin moderation\n\nBe mindful of how you handle communication during stressful interactions.\nAdministrators act as direct representatives of the project, and need to\nmaintain a very high level of professionalism at all times. If you feel too\ninvolved in the situation to maintain impartiality or professionalism, that’s a\ngreat time to enlist the help of another admin.\n\nTry to take any situations that involve upset or angry members to DM or video\nchat. Please document these interactions for other Slack admins to review.\n\nContent will be automatically removed if it violates code of conduct or is a\nsales pitch. Admins will take a screenshot of such behavior in order to document\nthe situation. The community takes such violations extremely seriously, and they will\nbe handled swiftly.\n\n## Deactivating accounts\n\nFor reasons listed below, admins may deactivate individual Slack accounts. Due\nto Slack’s framework, it does not allow for an account to be banned or suspended\nin the traditional sense.\n[Read Slack’s policy on this.](https://get.Slack.help/hc/en-us/articles/204475027-Deactivate-a-member-s-account)\n\n- Spreading spam content in DMs or channels\n- Not adhering to the [Code of Conduct](https://github.com/kubeflow/community/blob/master/CODE_OF_CONDUCT.md) in DMs or channels\n- Overtly selling products, related or unrelated to Kubeflow\n\n## Specific channel rules\n\nIn the case that certain channels have rules or guidelines, they will be listed\nin the purpose or pinned docs of that channel.\n\n## DM (Direct Message) conversations\n\nPlease do not engage in proprietary company specific conversations in the\nKubeflow  Slack instance. This is meant for conversations related to Kubeflow open\nsource topics and community.\n\nProprietary conversations should occur in your company communication platforms.\nAs with all communication, please be mindful of appropriateness,\nprofessionalism, and applicability to the Kubeflow community.\n\n---\n\nExcept as otherwise noted, the content of this page is licensed under the\n[Creative Commons Attribution 4.0 License](https://creativecommons.org/licenses/by/4.0/),\nand code samples are licensed under the\n[Apache 2.0 License](https://www.apache.org/licenses/LICENSE-2.0).\n"
  },
  {
    "path": "slack/slack_channels.md",
    "content": "# Kubeflow Slack Channels\n\n* admins - Talk to the admins of shared resources\n*  aws - Discuss Kubeflow on AWS\n*  azure - Ask questions about everything Kubeflow on Azure\n*  benchmarking - All about kubeflow benchmarking\n*  build-cop\n*  buildcop - Discuss problems with the build test infrastructure\n*  caffe-operator\n*  cfps - Sharing CFPs to important conferences in the Kubeflow Community\n*  ciao - Kernel for Kubeflow in Jupyter Notebook\n*  cisco-kubeflow-starter-pack\n*  code-intelligence - A channel to discuss https://github.com/kubeflow/code-intelligence\n*  community - Side channel for community zoom.us conference call\n*  cuj-onprem - To discuss on prem cuj.\n*  datarobot\n*  doc-sprint - Kubeflow Doc Sprint\n*  fairing - Discussion about Fairing project\n*  feast - Feast is an end-to-end open source feature store for machine learning. – https://feast.dev/\n*  general - This channel is for workspace-wide communication and announcements. All members are in this channel.\n*  github-ml-projects - Build Examples Using Public GitHub Data\n*  gsoc - Welcome to Kubeflow GSoC! Please visit this page for instructions: https://www.kubeflow.org/docs/about/gsoc/\n*  help\n*  hyperparameter-tuning - Deprecated channel for Katib (Moved to wg-automl)\n*  installing-kubeflow\n*  issues - Use this channel for all communications as they relate to the GitHub issues posted on the Kubeflow GitHub page .\n*  jobs\n*  jupyter - jupyter integration\n*  kale - https://github.com/kubeflow-kale/kale\n*  katib - Deprecated channel for Katib (Moved to wg-automl)\n*  kdd - Discuss Kubeflow @ KDD 2019\n*  kfctl - Conversation devoted to kfctl and deployment\n*  kfp-tekton - Channel to work on KFP-Tekton integration\n*  kfserving\n*  kubecon - For Kubecon related coordination and chatter\n*  kubecon18_mlparty\n*  kubeflow-benchmarks - To discuss benchmarks\n*  kubeflow-china-chat\n*  kubeflow-consulting - Building or Implementing Kubeflow At Scale and you or your team need help? Drop a message here\n*  kubeflow-dinner\n*  kubeflow-examples - Discussion about contributions and usage of the kubeflow/examples repo\n*  kubeflow-korea-chat\n*  kubeflow-pipelines - Discussions about the Kubeflow Pipelines component (https://github.com/kubeflow/pipelines/)\n*  kubflowbot-playground - Playground for the kubeflow bot\n*  kustomize - kustomize issues pertaining to the repo manifests and the package manager in kfctl\n*  metadata - To discuss model management within kubeflow\n*  microk8s\n*  minikf - Discussion and help for miniKF, a production-ready, local Kubeflow deployment from Arrikto.\n*  ml-ops - Discussion about ML Ops best practices with Kubeflow\n*  mpi-operator - Discuss the design and implementation of mpi-operator\n*  mxnet-operator\n*  necessary-images - I want to deploy kubeflow on my service, but I am doubtful that if all the images is necessary.\n*  ocs-kubeflow\n*  openshift\n*  openshiftcommons\n*  operating-kubeflow - Channel for kf operations\n*  operator-nextgen - Discussing about the next-generation operator\n*  oscon\n*  outreach - Outreach Working Group chat\n*  platform-gcp - Discuss Kubeflow on GCP\n*  product-management - Working Group coordinating Kubeflow's release & product management\n*  pytorch-operator - Discuss the design and implementation of pytorch-operator\n*  random - A place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber you'd prefer to keep out of more focused work-related channels.\n*  release -  Active work on cutting a release scheduling\n*  sig-big-data\n*  sig-onprem - discuss on-premise deployments\n*  spark - Spark channel\n*  summit - Kubeflow contributor summit\n*  tensorboard\n*  test - ignore anything in here\n*  tf-operator - Discuss the issues and PRs of kubeflow/tf-operator repo\n*  tf-serving - discuss stuff surrounding tf-serving\n*  transfer-kubeflow-org\n*  triage\n*  website - Work on the Kubeflow docs\n*  wg-automl - AutoML Working Group discussion\n*  wg-deployment - Deployment Working Group discussion\n*  wg-manifests - Manifests Working Group discussion\n*  wg-notebooks - Notebooks Working Group discussion\n*  wg-training - Training Working Group discussion\n*  xgboost-operator\n"
  },
  {
    "path": "wg-automl/README.md",
    "content": "<!---\nThis is an autogenerated file!\n\nPlease do not edit this file directly, but instead make changes to the\nsigs.yaml file in the project root.\n\nTo understand how this file is generated, see https://github.com/kubeflow/community/blob/master/generator/README.md\n--->\n# AutoML Working Group\n\nWG AutoML is responsible for all aspects of Automated Machine Learning technologies on Kubeflow.\n\nThe [charter](charter.md) defines the scope and governance of the AutoML Working Group.\n\n## Meetings\n* Kubeflow AutoML Working Group Meeting (Asia & Europe friendly): [Wednesdays at 11:00am UTC (Coordinated Universal Time)](https://calendar.google.com/calendar/u/0/r?cid=ZDQ5bnNpZWZzbmZna2Y5MW8wdThoMmpoazRAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ) (every 4 weeks on Wednesday from the 10th of March 2021). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=11:00am&tz=UTC%20%28Coordinated%20Universal%20Time%29).\n  * [Meeting notes and Agenda](https://docs.google.com/document/d/1MChKfzrKAeFRtYqypFbMXL6ZIc_OgijjkvbqmwRV-64).\n* Kubeflow AutoML Working Group Meeting (US friendly): [Wednesdays at 5:00pm UTC (Coordinated Universal Time)](https://calendar.google.com/calendar/u/0/r?cid=ZDQ5bnNpZWZzbmZna2Y5MW8wdThoMmpoazRAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ) (every 4 weeks on Wednesday from the 24th of March 2021). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=5:00pm&tz=UTC%20%28Coordinated%20Universal%20Time%29).\n  * [Meeting notes and Agenda](https://docs.google.com/document/d/1MChKfzrKAeFRtYqypFbMXL6ZIc_OgijjkvbqmwRV-64).\n\n## Organizers\n\n* Andrey Velichkevich (**[@andreyvelich](https://github.com/andreyvelich)**), Apple\n* Ce Gao (**[@gaocegege](https://github.com/gaocegege)**), Caicloud\n* Johnu George (**[@johnugeorge](https://github.com/johnugeorge)**), Nutanix\n\n## Contact\n- Slack: [#wg-automl](https://kubeflow.slack.com/messages/wg-automl)\n- [Mailing list](https://groups.google.com/forum/#!forum/kubeflow-discuss)\n- [Open Community Issues/PRs](https://github.com/kubeflow/community/labels/wg%2Farea/wg-automl)\n- GitHub Teams:\n    - [@kubeflow/wg-automl-leads](https://github.com/orgs/kubeflow/teams/wg-automl-leads) - AutoML WG Tech Leads\n<!-- BEGIN CUSTOM CONTENT -->\n\n<!-- END CUSTOM CONTENT -->\n"
  },
  {
    "path": "wg-automl/charter.md",
    "content": "# WG AutoML Charter\n\nThis charter adheres to the conventions, roles and organization management outlined in [wg-governance].\n\n## Scope\n\nWG AutoML is responsible for all aspects of Automated Machine Learning technologies on Kubeflow.\nThe WG covers researching, developing and operating various targets of ML automation for Kubeflow.\n\n### In scope\n\n#### Code, Binaries and Services\n\n- APIs and tools used for running AutoML experiments (e.g. Experiment, Suggestion, Trial CRD/Controller).\n- Web UI to enhance user experience with AutoML techniques.\n- Database manager to analyse and store experiments metrics.\n- Documentation for detailed description of using AutoML in Kubeflow.\n\n#### Cross-cutting and Externally Facing Processes\n\n- Coordinating with Training WG to make sure that all distributed training jobs can be used in AutoML experiments.\n- Coordinating with Manifests WG to ensure that AutoML manifests are properly deployed with Kubeflow.\n- Coordinating with Central Dashboard WG to correct integration with AutoML UI.\n- Coordinating with release teams to ensure that the AutoML features can be released properly.\n\n### Out of scope\n\n- APIs used for running Training Jobs (Trials) (this is related to Training WG).\n\n## Roles and Organization Management\n\nThis WG follows adheres to the Roles and Organization Management outlined in [wg-governance]\nand opts-in to updates and modifications to [wg-governance].\n\n### Subproject Creation\n\nWG Technical Leads.\n\n[wg-governance]: ../wgs/wg-governance.md\n"
  },
  {
    "path": "wg-data/README.md",
    "content": "<!---\nThis is an autogenerated file!\n\nPlease do not edit this file directly, but instead make changes to the\nsigs.yaml file in the project root.\n\nTo understand how this file is generated, see https://github.com/kubeflow/community/blob/master/generator/README.md\n--->\n# Data Working Group\n\nThe WG \"Data\" is focused on enhancing the support for data/metadata-related tasks within Kubeflow, with a specific focus on the Spark Operator and Model Registry. The group aims to simplify and improve data processing between various stages of ML lifecycle. For example, from Data Preparation to model training and fine-tuning. The group also aims to facilitate the ML model's metadata management, while ensuring seamless integration with other Kubeflow components. The goal of Spark on Kubernetes Operator is to simplify the capability of running Apache Spark on Kubernetes. It automates deployment and simplifies lifecycle management of Spark Jobs on Kubernetes. The goal of Model Registry is gather, analyze, and develop model registry requirements of Kubeflow community users.\n\nThe [charter](charter.md) defines the scope and governance of the Data Working Group.\n\n## Meetings\n* KF Model Registry community meeting (US/EMEA): [Mondays at 7:00PM-8:00PM Europe/Madrid]() (biweely - every other Monday of the month). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=7:00PM-8:00PM&tz=Europe%2FMadrid).\n  * [Meeting notes and Agenda](https://docs.google.com/document/d/1DmMhcae081SItH19gSqBpFtPfbkr9dFhSMCgs-JKzNo/edit?usp=sharing).\n* Kubeflow Spark Operator Meeting: [Fridays at 8:00AM-9:00AM ]() (biweely - every other Friday of the month). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=8:00AM-9:00AM&tz=).\n  * [Meeting notes and Agenda](https://bit.ly/3VGzP4n).\n\n## Organizers\n\n* Yi Chen (**[@ChenYi015](https://github.com/ChenYi015)**), Alibaba Cloud\n* Andrey Velichkevich (**[@andreyvelich](https://github.com/andreyvelich)**), Apple\n* Ramesh Reddy (**[@rareddy](https://github.com/rareddy)**), Red Hat\n\n## Contact\n- Slack: [#https://www.kubeflow.org/docs/about/community/#slack-channels](https://kubeflow.slack.com/messages/https://www.kubeflow.org/docs/about/community/#slack-channels)\n- [Mailing list](https://groups.google.com/forum/#!forum/kubeflow-discuss)\n- [Open Community Issues/PRs](https://github.com/kubeflow/community/labels/wg%2Farea/wg-data)\n- GitHub Teams:\n    - [@kubeflow/wg-data-leads](https://github.com/orgs/kubeflow/teams/wg-data-leads) - Team of Data Working Group leads\n<!-- BEGIN CUSTOM CONTENT -->\n\n<!-- END CUSTOM CONTENT -->\n"
  },
  {
    "path": "wg-data/charter.md",
    "content": "# WG Data Charter\n\nThis charter adheres to the conventions, roles, and organisation management outlined in [wg-governance] for the Working Group \"Data\".\n\n## Scope\n\nThe WG \"Data\" is focused on enhancing the support for data/metadata-related tasks within Kubeflow, with a specific focus on the [Spark Operator](https://github.com/kubeflow/community/pull/672) and [Model Registry](https://github.com/kubeflow/kubeflow/issues/7396).\nThe group aims to simplify and improve data processing between various stages of ML lifecycle. For example, from Data Preparation to model training and fine-tuning.\nThe group also aims to facilitate the ML model's metadata management, while ensuring seamless integration with other Kubeflow components.\n\nAn additional goal of the group is to offer a common ground for data/metadata-related topics in the MLOps orbit that didn't have a more specific working group yet, so they can \"incubate as one\", coherent effort.\n\nFor example: Data Preparation, Feature Store, and Model Registry have been recently discussed in the Kubeflow community while not mature enough yet to have their own working group, they can be nurtured together as part of this WG.\n\n### In scope\n\n#### Code, Binaries, and Other relevant assets\n\n- Onboarding and maintenance of the Spark operator for scalable and distributed data processing.\n[See also](https://github.com/kubeflow/spark-operator)\n- Continued development of the Model Registry to manage and version machine learning models efficiently.\n[See also](https://github.com/kubeflow/hub)\n  - Model Registry REST server\n  - Model Registry Python client\n  - deployment Manifests\n  - BFF for Model Registry\n  - UI front-end for Model Registry\n- SDKs and REST APIs for interacting with Kubeflow APIs related to data processing and ML models metadata management.\n- CI/CD pipelines for Kubeflow subproject repositories in the scope of this WG.\n- Documentation, in the forms of Kubeflow website sections and as necessary in each repository.\n\n#### Cross-cutting and Externally Facing Processes\n\n- Ensuring seamless integration of these WG subprojects with the rest of the Kubeflow platform. For example:\n  - Coordinating with WG Pipelines for integrations of Model Registry with KFP.\n  - Coordinating with WG Serving for integrations of Model Registry with KServe and ModelMesh.\n- Coordinating with release teams to ensure that the capabilities and subprojects in scope of this WG can be released properly.\n- Offer mentorship to support contributors working on data-centric projects that want to integrate with Kubeflow.\n\n### Out of scope\n\n- APIs and components related to:\n  - ML exploration and experimentation (covered in Notebooks/Pipelines),\n  - ML training (covered in Training),\n  - serving ML models for inference (covered in Serving)\n- Anything else not explicitly outlined in the scope of this WG.\n\n## Roles and Organization Management\n\nThis WG adheres to the Roles and Organization Management outlined in [wg-governance] and opts-in to updates and modifications to [wg-governance].\n\n### Additional responsibilities of Chairs\n\n- Coordinating and facilitating discussions on Data-related topics in scope of the WG, within the WG itself and the Kubeflow community.\n- Ensuring alignment with overall Kubeflow goals and objectives in the context of data processing and ML model metadata's management.\n\n### Additional responsibilities of Tech Leads\n\n- Providing technical guidance and mentorship to contributors working on Spark operator, Model Registry, and the projects in scope of this WG.\n- Overseeing the technical direction of the subprojects and ensuring consistency with Kubeflow's vision for data processing and metadata management.\n\n### Deviations from [wg-governance]\n\nThis WG follows the outlined roles and governance in [wg-governance].\n\n### Subproject Creation\n\nWG Technical Leads\n\n[wg-governance]: ../wgs/wg-governance.md\n"
  },
  {
    "path": "wg-deployment/README.md",
    "content": "<!---\nThis is an autogenerated file!\n\nPlease do not edit this file directly, but instead make changes to the\nsigs.yaml file in the project root.\n\nTo understand how this file is generated, see https://github.com/kubeflow/community/blob/master/generator/README.md\n--->\n# Deployment Working Group\n\nWG Deployment covers developing, maintaining artifacts to deploy and operate Kubeflow.\n\nThe [charter](charter.md) defines the scope and governance of the Deployment Working Group.\n\n## Meetings\n* Regular WG Meeting (Pacific PM): [Wednesdays at 17:30 PT (Pacific Time)]() (biweekly - every other Wednesday). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=17:30&tz=PT%20%28Pacific%20Time%29).\n  * [Meeting notes and Agenda](http://bit.ly/kf-meeting-notes).\n\n## Organizers\n\n* Yao Xiao (**[@PatrickXYS](https://github.com/PatrickXYS)**), AWS\n* Animesh Singh (**[@animeshsingh](https://github.com/animeshsingh)**), IBM\n* Igor Mameshin (**[@mameshini](https://github.com/mameshini)**), Agile Stacks\n* Vaclav Pavlin (**[@vpavlin](https://github.com/vpavlin)**), Red Hat\n* Yannis Zarkadas (**[@yanniszark](https://github.com/yanniszark)**), Arrikto\n\n## Contact\n- Slack: [#wg-deployment](https://kubeflow.slack.com/messages/wg-deployment)\n- [Mailing list](https://groups.google.com/forum/#!forum/kubeflow-discuss)\n- [Open Community Issues/PRs](https://github.com/kubeflow/community/labels/wg%2Farea/wg-deployment)\n- GitHub Teams:\n    - [@kubeflow/wg-deployment-bugs](https://github.com/orgs/kubeflow/teams/wg-deployment-bugs) - Bug Triage and Troubleshooting\n    - [@kubeflow/wg-deployment-misc](https://github.com/orgs/kubeflow/teams/wg-deployment-misc) - General Discussion\n    - [@kubeflow/wg-deployment-reviews](https://github.com/orgs/kubeflow/teams/wg-deployment-reviews) - Changes and Reviews\n<!-- BEGIN CUSTOM CONTENT -->\n\n<!-- END CUSTOM CONTENT -->\n"
  },
  {
    "path": "wg-deployment/charter.md",
    "content": "# WG Deployment Charter\n\nThis charter adheres to the conventions, roles and organization management outlined in [wg-governance].\n\n## Scope\n\nWG Deployment is responsible for tools to deploy apps from the catalog (e.g kfctl).\n\n### In scope\n\n#### Responsibilities\n\n- Provide tooling to deploy Kubeflow applications from the catalog.\n\n#### Code, Binaries and Services\n\n- kfctl (including operator)\n\n### Out of scope\n\n- Maintaining or bug fixes to the individual applications catalogs or the applications.\n- Maintain or fix bugs in the platform specific distributions (KFDefs, kpt functions).\n- Defining or maintaining a Kubeflow distribution\n- Deciding which applications or versions of applications should be included in KF distributions\n\n## Roles and Organization Management\n\nThis WG adheres to the Roles and Organization Management outlined in [wg-governance]\nand opts-in to updates and modifications to [wg-governance].\n\n\n[wg-governance]: ../wgs/wg-governance.md\n[wg-subprojects]: https://github.com/kubeflow/community/blob/master/wg-deployment/README.md#subprojects\n[Kubeflow Charter README]: https://github.com/Kubeflow/community/blob/master/committee-steering/governance/README.md\n"
  },
  {
    "path": "wg-list.md",
    "content": "<!---\nThis is an autogenerated file!\n\nPlease do not edit this file directly, but instead make changes to the\nsigs.yaml file in the project root.\n\nTo understand how this file is generated, see https://github.com/kubeflow/community/blob/master/generator/README.md\n--->\n# Working Groups\n\nMost community activity is organized into Working Groups (WGs), and WGs may also sponsor Special\nInterest Groups (SIGs) on topics they are invested in.\n\nWGs follow these [guidelines](wgs/wg-governance.md) although each of these groups may operate a little differently\ndepending on their needs and workflow.\n\nEach group's material is in its subdirectory in this project.\n\nWhen the need arises, a [new WG can be created](wgs/wg-lifecycle.md)\n\n### Working Group List\n\n| Name | Label | Chairs | Contact | Meetings |\n|------|-------|--------|---------|----------|\n|[AutoML](wg-automl/README.md)|area/wg-automl|* [Andrey Velichkevich](https://github.com/andreyvelich), Apple<br>* [Ce Gao](https://github.com/gaocegege), Caicloud<br>* [Johnu George](https://github.com/johnugeorge), Nutanix<br>|* [Slack](https://kubeflow.slack.com/messages/wg-automl)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubeflow-discuss)|* Kubeflow AutoML Working Group Meeting (Asia & Europe friendly): [Wednesdays at 11:00am UTC (Coordinated Universal Time) (every 4 weeks on Wednesday from the 10th of March 2021)](https://calendar.google.com/calendar/u/0/r?cid=ZDQ5bnNpZWZzbmZna2Y5MW8wdThoMmpoazRAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ)<br>* Kubeflow AutoML Working Group Meeting (US friendly): [Wednesdays at 5:00pm UTC (Coordinated Universal Time) (every 4 weeks on Wednesday from the 24th of March 2021)](https://calendar.google.com/calendar/u/0/r?cid=ZDQ5bnNpZWZzbmZna2Y5MW8wdThoMmpoazRAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ)<br>\n|[Data](wg-data/README.md)|area/wg-data|* [Yi Chen](https://github.com/ChenYi015), Alibaba Cloud<br>* [Andrey Velichkevich](https://github.com/andreyvelich), Apple<br>* [Ramesh Reddy](https://github.com/rareddy), Red Hat<br>|* [Slack](https://kubeflow.slack.com/messages/https://www.kubeflow.org/docs/about/community/#slack-channels)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubeflow-discuss)|* KF Model Registry community meeting (US/EMEA): [Mondays at 7:00PM-8:00PM Europe/Madrid (biweely - every other Monday of the month)]()<br>* Kubeflow Spark Operator Meeting: [Fridays at 8:00AM-9:00AM  (biweely - every other Friday of the month)]()<br>\n|[Deployment](wg-deployment/README.md)|area/wg-deployment|* [Yao Xiao](https://github.com/PatrickXYS), AWS<br>* [Animesh Singh](https://github.com/animeshsingh), IBM<br>* [Igor Mameshin](https://github.com/mameshini), Agile Stacks<br>* [Vaclav Pavlin](https://github.com/vpavlin), Red Hat<br>* [Yannis Zarkadas](https://github.com/yanniszark), Arrikto<br>|* [Slack](https://kubeflow.slack.com/messages/wg-deployment)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubeflow-discuss)|* Regular WG Meeting (Pacific PM): [Wednesdays at 17:30 PT (Pacific Time) (biweekly - every other Wednesday)]()<br>\n|[Manifests](wg-manifests/README.md)|area/wg-manifests|* [Julius von Kohout](https://github.com/juliusvonkohout), DHL<br>* [Kimonas Sotirchos](https://github.com/kimwnasptd), Canonical<br>|* [Slack](https://kubeflow.slack.com/messages/wg-manifests)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubeflow-discuss)|* Regular WG Meeting (Pacific AM): [Thursdays at 08:00 PT (Pacific Time) (biweekly - every other Thursday)]()<br>\n|[ML Experience](wg-ml-experience/README.md)|area/wg-ml-experience|* [Stefano Fioravanzo](https://github.com/StefanoFioravanzo), Canonical<br>* [Andrey Velichkevich](https://github.com/andreyvelich), Apple<br>* [Eder Ignatowicz](https://github.com/ederign), Red Hat<br>|* [Slack](https://kubeflow.slack.com/messages/https://cloud-native.slack.com/archives/C073W572LA2)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubeflow-discuss)|\n|[Notebooks](wg-notebooks/README.md)|area/wg-notebooks|* [Stefano Fioravanzo](https://github.com/StefanoFioravanzo), Canonical<br>* [Ilias Katsakioris](https://github.com/elikatsis), Arrikto<br>* [Kimonas Sotirchos](https://github.com/kimwnasptd), Canonical<br>* [Mathew Wicks](https://github.com/thesuperzapper)<br>* [Yannis Zarkadas](https://github.com/yanniszark), Arrikto<br>|* [Slack](https://kubeflow.slack.com/messages/wg-notebooks)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubeflow-discuss)|* Regular Notebooks Meeting (Australia & Europe friendly): [Thursdays at 11:00 pm PT (Pacific Time) (weekly)]()<br>\n|[Pipelines](wg-pipelines/README.md)|area/wg-pipelines|* [Humair Khan](https://github.com/HumairAK), Red Hat<br>* [Chen Sun](https://github.com/chensun), Google<br>* [Alexander Perlman](https://github.com/droctothorpe), Capital One<br>* [James Wu](https://github.com/james-jwu), Google<br>* [Matthew Prahl](https://github.com/mprahl), Red Hat<br>* [Michael Zazula](https://github.com/zazulam), Capital One<br>|* [Slack](https://kubeflow.slack.com/messages/)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubeflow-discuss)|\n|[Serving](wg-serving/README.md)|area/wg-serving|* [Animesh Singh](https://github.com/animeshsingh), IBM<br>* [Clive Cox](https://github.com/cliveseldon), Seldon<br>* [Ellis Tarn](https://github.com/ellistarn), AWS<br>* [Rakesh Kalekar](https://github.com/rakelkar), Microsoft<br>* [Dan Sun](https://github.com/yuzisun), Bloomberg<br>|* [Slack](https://kubeflow.slack.com/messages/kfserving)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubeflow-discuss)|* Regular WG Meeting: [Wednesdays at 09:00 PT (Pacific Time) (biweekly)]()<br>\n|[Training](wg-training/README.md)|area/wg-training|* [Ce Gao](https://github.com/gaocegege), Caicloud<br>* [Johnu George](https://github.com/johnugeorge), Nutanix<br>* [Yuan Tang](https://github.com/terrytangyuan), Red Hat<br>|* [Slack](https://kubeflow.slack.com/messages/wg-training)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubeflow-discuss)|* Regular WG Meeting (Asia & Europe friendly): [Wednesdays at 03:00 PT (Pacific Time) (monthly - first Wednesday every month)]()<br>* Regular WG Meeting (US friendly): [Wednesdays at 10:00 PT (Pacific Time) (monthly - third Wednesday every month)]()<br>\n\n### Special Interest Group List\n\n| Name | Label | Chairs | Contact | Meetings |\n|------|-------|--------|---------|----------|\n|[Feature Store](sig-feature-store/README.md)|area/sig-feature-store|* [Kevin Stumpf](https://github.com/kevinstumpf)<br>* [Oleksii Moskalenko](https://github.com/pyalex), Gojek<br>* [Willem Pienaar](https://github.com/woop), Gojek<br>|* [Slack](https://kubeflow.slack.com/messages/feast)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubeflow-discuss)|* Monthly SIG Meeting: [Wednesdays at 18:00 PT (Pacific Time) (monthly)]()<br>\n|[OnPrem](sig-onprem/README.md)|area/sig-onprem|* [Jeff Fogarty](https://github.com/jtfogarty), US Bank<br>|* [Slack](https://kubeflow.slack.com/messages/sig-onprem)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubeflow-discuss)|* SIG Onprem Community Meeting - (US East/EMEA): [Thursdays at 10:30 ET (Eastern Time) (biweekly)](https://us02web.zoom.us/j/87159010361?pwd=c09wTXk2dmJPNmpkTDFTb0o0cnY2Zz09)<br>* SIG Onprem Community Meeting - (US West): [Fridays at 15:00 ET (Eastern Time) (biweekly)](https://us02web.zoom.us/j/87159010361?pwd=c09wTXk2dmJPNmpkTDFTb0o0cnY2Zz09)<br>\n<!-- BEGIN CUSTOM CONTENT -->\n\n<!-- END CUSTOM CONTENT -->\n"
  },
  {
    "path": "wg-manifests/README.md",
    "content": "<!---\nThis is an autogenerated file!\n\nPlease do not edit this file directly, but instead make changes to the\nsigs.yaml file in the project root.\n\nTo understand how this file is generated, see https://github.com/kubeflow/community/blob/master/generator/README.md\n--->\n# Manifests Working Group\n\nWG Manifests maintains a centralized repository of manifests.\n\nThe [charter](charter.md) defines the scope and governance of the Manifests Working Group.\n\n## Meetings\n* Regular WG Meeting (Pacific AM): [Thursdays at 08:00 PT (Pacific Time)]() (biweekly - every other Thursday). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=08:00&tz=PT%20%28Pacific%20Time%29).\n  * [Meeting notes and Agenda](https://bit.ly/kf-wg-manifests-notes).\n\n## Organizers\n\n* Julius von Kohout (**[@juliusvonkohout](https://github.com/juliusvonkohout)**), DHL\n* Kimonas Sotirchos (**[@kimwnasptd](https://github.com/kimwnasptd)**), Canonical\n\n## Contact\n- Slack: [#wg-manifests](https://kubeflow.slack.com/messages/wg-manifests)\n- [Mailing list](https://groups.google.com/forum/#!forum/kubeflow-discuss)\n- [Open Community Issues/PRs](https://github.com/kubeflow/community/labels/wg%2Farea/wg-manifests)\n- GitHub Teams:\n    - [@kubeflow/wg-manifests-leads](https://github.com/orgs/kubeflow/teams/wg-manifests-leads) - Tech leads of wg-manifests\n<!-- BEGIN CUSTOM CONTENT -->\nThe development happens here https://github.com/kubeflow/manifests.\n<!-- END CUSTOM CONTENT -->\n"
  },
  {
    "path": "wg-manifests/charter.md",
    "content": "# WG Platform Charter\n\n\nThis charter adheres to the conventions, roles and organization management\noutlined in [wg-governance].\n\n## Scope\n\n- Automatically synchronize the application and dependencies manifests to then elaborately combine (configure) them for a full platform experience.\n- Prioritize and provide a consistent, tested, and end-to-end multi-tenant experience is the most important task of the platform/manifests WG.\n- Maintain an extensive testing suite in order to cover scenarios that our community members and users expect from a Platform designed for AI/ML orchestration.\n- Provide documentation that covers (but is not limited to) installation, extension, security, and architecture decisions in order to enable users to run an ML Platform on Kubernetes (whatever form that may take).\n- Ensure that individuals can leverage our integrated platform and manifests in order to create an opinionated distribution that satisfies their individual requirements. Users may also choose to install individual components without the benefits of the platform.\n\n### In scope\n\n#### Code, Binaries and Services\n\n- Enable users / distributions to install, extend and maintain Kubeflow as a end-to-end multi-tenant platform for multiple users\n- This includes dependencies, security efforts and exemplary integration with popular tools and frameworks.\n- Users can also install individual components without the benefits of the platform, but then they could also just directly fetch them from the WG releases.\n- Synchronize the manifests between working groups and make sure via integration tests that the components work end-to-end together as multi-tenant platform\n- Release tested releases of the Kubeflow platform for downstream consumption\n- We try to be compatible with the popular Kubernetes clusters (Kind, Rancher, AKS, EKS, GKE, ...)\n- We provide hints and experimental examples how a user / distribution could integrate non-default external authentication (e.g. companies Identity Provider) and popular non-default services on his own\n- We in general document the installation of Kubeflow as a platform and or individual components including common problems and architectural overviews.\n- There is the evolving and not exhaustive list of dependencies for a proper multi-tenant platform installation: Istio, KNative, Dex, Oauth2-proxy, Cert-Manager, ...\n- There is the evolving and not exhaustive list of applications:  KFP, Trainer, Dashboard, Workspaces / Noteboks, Kserve, Spark, ...\n\n## Cross-cutting and Externally Facing Processes\n\n### With Application Owners\n\n- Aid the application owner in creating manifests (Helm, Kustomize) for his application\n- Aid the application owner regarding security best practices\n- Communicate with the application owner regarding releases and versioning\n\n### With Users / Distribution Owners\n- Distributions are opinionated derivatives of Kubeflow platform/manifests, for example replacing all databases with closed source managed databases from AWS, GKE, Azure, ...\n- A distribution can be created by an arbitrary amount of users / companies in private or in public by deriving from Kubeflow platform/manifests, see the definition above\n- Coordinate with \"distribution owners\" / users to take part in the testing of Kubeflow releases.\n\n### Out of scope\n\n- We do not enforce a specific deployment tool (e.g., ArgoCD, Flux)\n- The default installation shall not contain deep integration with external cloud services or closed source solutions, instead we aim for Kubernetes-native solutions and light authentication and authorization integration with external IDPs\n\n## Roles and Organization Management\n\nThis WG adheres to the Roles and Organization Management outlined in\n[wg-governance] and opts-in to updates and modifications to [wg-governance].\n\nThe positions of the chairs and technical leads are granted to the organizations and companies participating in the workgroup governance. If an individual leaves the organization to which that position was designated - the organization will have the right to appoint others to these roles.\n\nKubeflow's [governance model](https://github.com/kubeflow/community/blob/master/wgs/wg-governance.md)\nincludes a plethora of different leadership roles.\nThis section aims to provide a clear description of what these roles mean for\nthis repository, as well as set expectations from people with these roles and requirements\nfor people to be promoted in a role.\n\nA Working Group lead is considered someone that has either the role of\n**Subproject Owner**, **Tech Lead** or **Chair**. These roles were defined by trying\nto provide different responsibility levels for repository owners. For the Platform WG\nwe would like to start by treating *approvers* in the root [OWNERS](https://github.com/kubeflow/manifests/blob/master/OWNERS),\nas Subproject Owners, Tech Leads and Chairs. This is done to ensure we have a\nsimple enough model to start that people can understand and get used to. So for\nthe Manifests WG we only have Manifests WG Leads, which are the root approvers.\n\nThe following sections will aim to define the requirements for someone to become\na reviewer and an approver in the root OWNERS file (Platform WG Lead).\n\n### Platform/Manifests WG Lead Requirements\n\nThe requirements for someone to be a Lead come from the processes and work required\nto be done in this repository. The main goal with having multiple Leads is to ensure\nthat in case there's an absence of one of the Leads the rest will be able to ensure\nthe established processes and the health of the repository will be preserved.\n\nWith the above the main pillars of work and responsibilities that we have seen for\nthis repository throughout the years are the following:\n1. Being involved with the release team, since the [release process](https://github.com/kubeflow/community/tree/master/releases) is tightly intertwined with the manifests/platform repository\n2. Testing methodologies (GitHub Actions)\n3. Processes regarding the [experimental](https://github.com/kubeflow/manifests/blob/master/experimental) components\n4. [Platform manifests](https://github.com/kubeflow/manifests/tree/master/common) maintained directly by Manifests/Platform WG (Istio, Knative, Cert Manager etc.)\n5. Community and health of the project\n\nRoot approvers, or Manifests/Platform WG Leads, are expected to have expertise and be able\nto drive all the above areas. Root reviewers on the other hand are expected to\nhave knowledge in all the above and have as a goal to grow into the approvers\nrole by helping with reviews throughout the project.\n\n#### Root Reviewer requirements\n\n* Primary reviewer for at least 2 PRs in `/common`\n* Primary reviewer for at least 1 PR in `/tests`\n* Primary reviewer for at least 1 PR in `/experimental`\n\n#### Root Approver requirements\n\nThe goal of the requirements is to quantify the main pillars that we documented\nabove. The high level reasoning is that approvers should have lead efforts and\nhave expertise in the different processes and artefacts maintained in this repository\nas well as be invested in the community of the WG.\n\n* Needs to be a root reviewer\n* Has been a WG liaison for a KF release\n* Has at least 3 substantial PRs merged for `/common`\n    * I.e. updating the versions of Istio, Dex or Knative\n    * I.e. update manifests to work with newer versions of kustomize\n* Has at least 2 substantial PRs merged for `/tests`\n* Has at least 1 substantial PR merged for `/proposals`\n* Has been an active participant in issues and PRs for at least 3 months\n* Has attended at least 50% of Platform/Manifests WG meetings\n* Is endorsed by existing root reviewers\n\n[wg-governance]: ../wg-governance.md\n[wg-subprojects]: https://github.com/Kubeflow/community/blob/master/wg-YOURWG/README.md#subprojects\n[Kubeflow Charter README]: https://github.com/Kubeflow/community/blob/master/committee-steering/governance/README.md\n"
  },
  {
    "path": "wg-ml-experience/README.md",
    "content": "<!---\nThis is an autogenerated file!\n\nPlease do not edit this file directly, but instead make changes to the\nsigs.yaml file in the project root.\n\nTo understand how this file is generated, see https://github.com/kubeflow/community/blob/master/generator/README.md\n--->\n# ML Experience Working Group\n\nThe ML Experience Working Group focuses on developing, maintaining, and improving tools and  extensions that support data science and machine learning practitioners workflows within Kubeflow. The group is dedicated to delivering a high-level, seamless experience integrated with the IDE of choice across multiple Kubeflow components.\n\nThe [charter](charter.md) defines the scope and governance of the ML Experience Working Group.\n\n\n\n## Organizers\n\n* Stefano Fioravanzo (**[@StefanoFioravanzo](https://github.com/StefanoFioravanzo)**), Canonical\n* Andrey Velichkevich (**[@andreyvelich](https://github.com/andreyvelich)**), Apple\n* Eder Ignatowicz (**[@ederign](https://github.com/ederign)**), Red Hat\n\n## Contact\n- Slack: [#https://cloud-native.slack.com/archives/C073W572LA2](https://kubeflow.slack.com/messages/https://cloud-native.slack.com/archives/C073W572LA2)\n- [Mailing list](https://groups.google.com/forum/#!forum/kubeflow-discuss)\n- [Open Community Issues/PRs](https://github.com/kubeflow/community/labels/wg%2Farea/wg-ml-experience)\n- GitHub Teams:\n    - [@kubeflow/wg-ml-experience-leads](https://github.com/orgs/kubeflow/teams/wg-ml-experience-leads) - Team of ML Experience Group leads\n<!-- BEGIN CUSTOM CONTENT -->\n\n<!-- END CUSTOM CONTENT -->\n"
  },
  {
    "path": "wg-ml-experience/charter.md",
    "content": "# WG ML Experience\n\nThis charter adheres to the conventions, roles, and organisation management outlined in [wg-governance] for the Working Group \"ML Experience\".\n\n## Scope\n\nThe ML Experience Working Group focuses on developing, maintaining, and improving tools and extensions that support data science and machine learning practitioners experiences within Kubeflow. The group is dedicated to delivering a high-level, seamless experience integrated with the IDE of choice across multiple Kubeflow components.\n \n### In scope\n \n#### Code, Binaries, and Other relevant assets\n\n1. Development of Kubeflow JupyterLab extensions that provide simple abstractions and UX to interact with the most common Kubeflow components (e.g., pipelines, hyperparameter tuning) and shorten the time to value for practitioners comfortable with Jupyter. These extensions will focus on the most used Kubeflow components, such as:\n    - Pipelines;\n    - Kubeflow Trainer\n    - Kubeflow Katib\n    - Model Registry;\n    - Model Serving (KServe);\n    - Feast.\n\n2. Promote the reusability of UI components from other Kubeflow UIs into the IDE (e.g., rendering a pipeline graph inside the JupyterLab environment) by establishing a shared contract between the IDE WG and the wider Kubeflow community. \n\n3. Develop a Python SDK to simplify operationalization across Kubeflow components and provide a “one-stop-shop” for practitioners who want easy access to Kubeflow services. The SDK also provides the groundwork for the IDE extension automation and workflows.\n    - Create a single installation and configuration layer for users interacting programmatically with the Kubeflow ecosystem via SDKs.\n    - The “common” SDK is not meant to replace individual components’ SDKs but rather to offer a unified access layer to simplify dependency management and shared configuration (like authorization).\n\n#### Guiding Principles\n\n- Synergy among Kubeflow Working Groups: Collaborate with other WG to promote reusability of UI components from other Kubeflow UIs to create a single UX between Jupyter IDE and Kubeflow Central Dashboard;\n- Collaboration with other open-source IDE projects (like Jupyter and VSCode) to promote the creation and reusability of open standards for AI/ML tools (protocols, communication exchange, file formats, etc.) and plugins. The aim of this group is to actively participate in the development of these standards to include Kubeflow in a broader ecosystem or interoperable tools. \n\n#### Cross-cutting and Externally Facing Processes\n\n- Collaboration with other Kubeflow WGs, including WG Notebooks, WG Pipelines, WG Training, WG AutoML, WG Data, and WG Serving, ensures that IDE tools are interoperable across different stages of the ML lifecycle.\n- Coordination with the release teams to align updates in IDE tools with broader Kubeflow release schedules.\n\n\n### Out of scope\n\n- Building and maintaining Notebook/Workspaces images (this falls under the WG Notebooks).\n\n## Roles and Organization Management\n\nThis WG adheres to the Roles and Organization Management outlined in [wg-governance] and opts-in to updates and modifications to [wg-governance].\n\n### Additional responsibilities of Chairs\n\n- Coordinating and facilitating discussions on ML experience topics in scope of the WG, within the WG itself and the Kubeflow community.\n- Ensuring alignment with overall Kubeflow goals and objectives in the context of user experience to data scientists and machine learning practitioners on Kubeflow.\n\n### Additional responsibilities of Tech Leads\n\n- Providing technical guidance and mentorship to contributors working on Kubeflow JupyterLab extensions, SDK, and the projects in scope of this WG.\n- Overseeing the technical direction of the subprojects and ensuring consistency with Kubeflow's vision for Kubeflow ML Experience.\n\n### Deviations from [wg-governance]\n\nThis WG follows the outlined roles and governance in [wg-governance].\n\n### Subproject Creation\n\nWG Technical Leads\n\n[wg-governance]: ../wgs/wg-governance.md"
  },
  {
    "path": "wg-notebooks/README.md",
    "content": "<!---\nThis is an autogenerated file!\n\nPlease do not edit this file directly, but instead make changes to the\nsigs.yaml file in the project root.\n\nTo understand how this file is generated, see https://github.com/kubeflow/community/blob/master/generator/README.md\n--->\n# Notebooks Working Group\n\nWG Notebooks is responsible for the user experience around Notebooks and their integrations with Kubeflow.\n\nThe [charter](charter.md) defines the scope and governance of the Notebooks Working Group.\n\n## Meetings\n* Regular Notebooks Meeting (Australia & Europe friendly): [Thursdays at 11:00 pm PT (Pacific Time)]() (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=11:00 pm&tz=PT%20%28Pacific%20Time%29).\n  * [Meeting notes and Agenda](https://arrik.to/kf-wg-notebooks-notes).\n\n## Organizers\n\n* Stefano Fioravanzo (**[@StefanoFioravanzo](https://github.com/StefanoFioravanzo)**), Canonical\n* Ilias Katsakioris (**[@elikatsis](https://github.com/elikatsis)**), Arrikto\n* Kimonas Sotirchos (**[@kimwnasptd](https://github.com/kimwnasptd)**), Canonical\n* Mathew Wicks (**[@thesuperzapper](https://github.com/thesuperzapper)**)\n* Yannis Zarkadas (**[@yanniszark](https://github.com/yanniszark)**), Arrikto\n\n## Contact\n- Slack: [#wg-notebooks](https://kubeflow.slack.com/messages/wg-notebooks)\n- [Mailing list](https://groups.google.com/forum/#!forum/kubeflow-discuss)\n- [Open Community Issues/PRs](https://github.com/kubeflow/community/labels/wg%2Farea/wg-notebooks)\n- GitHub Teams:\n    - [@kubeflow/wg-notebooks-leads](https://github.com/orgs/kubeflow/teams/wg-notebooks-leads) - Tech leads of wg-notebooks\n<!-- BEGIN CUSTOM CONTENT -->\n\n<!-- END CUSTOM CONTENT -->\n"
  },
  {
    "path": "wg-notebooks/charter.md",
    "content": "# WG Notebooks Charter\n\nThis charter adheres to the conventions, roles and organization management outlined in [wg-governance].\n\n## Scope\n\nWG Notebooks is responsible for the user experience around Notebooks and their integrations with Kubeflow. The WG covers launching and managing Notebooks on Kubeflow as well as workflows that Notebook extensions enable.\n\n### In scope\n\n#### Code, Web apps, Controllers and Services\n\n- APIs and tools used for launching Notebooks (e.g. Notebooks CRD/Controller).\n- Web UI to manage and connect to Notebook instances (e.g. Notebook Manager UI)\n- SDKs and integrations from inside the Notebooks (e.g. Git inside Notebooks)\n- Documentation for detailed description of using Notebooks in Kubeflow.\n- Notebook images that will be working out of the box with Kubeflow.\n- Code for Central Dashboard, the UI that ties Kubeflow applications together.\n- Code for the PodDefaults controller and its integrations with the Notebook\n  Manager UI. In the future, we may consider continuing development of the\n  controller out of Kubeflow, as it's not specific to ML.\n- Maintenance of the following deprecated components, until dependant\n  applications have moved off of them:\n    - Profile Controller\n    - KFAM\n\n#### Cross-cutting and Externally Facing Processes\n\n- Coordinating with Manifests WG to ensure that Notebooks manifests are properly deployed with Kubeflow.\n- Coordinating with Central Dashboard WG to ensure the integration with the Notebook Manager UI is up-to-date.\n- Coordinating with Training and AutoML WG to ensure that corresponding SDK is properly working in Kubeflow Notebooks\n- Ensuring that Kubeflow's Notebook images are continuously built and released.\n- Ensuring that the Notebook Manager UI images are continuously built and released.\n- Ensuring that the Notebook Controller images are continuously built and released.\n- Communicate the following APIs to WGs that want to integrate their web apps\n  with them:\n    - The PodDefault API to integrate closely with the Notebooks UI.\n    - The CentralDashboard API to get the selected namespace from Javascript.\n\n### Out of scope\n\n- Developing and maintaining libraries allowing users to utilize other (non-)Kubeflow components (e.g. AutoML Experiments, Pipelines DSL, Fairing)\n\n## Roles and Organization Management\n\nThis WG adheres to the Roles and Organization Management outlined in [wg-governance]\nand opts-in to updates and modifications to [wg-governance].\n\n### Subproject Creation\n\nWG Technical Leads.\n\n[wg-governance]: ../wg-governance.md\n"
  },
  {
    "path": "wg-pipelines/README.md",
    "content": "<!---\nThis is an autogenerated file!\n\nPlease do not edit this file directly, but instead make changes to the\nsigs.yaml file in the project root.\n\nTo understand how this file is generated, see https://github.com/kubeflow/community/blob/master/generator/README.md\n--->\n# Pipelines Working Group\n\nThe goal of the Kubeflow Pipelines project is to build a Kubernetes optimized stack for creating and deploying ML Pipelines and enabling a rich ecosystem of pipelines components and tools. ML Pipelines project has the goal of enabling simple and reliable productionalization of autonomous ML workflows, advancing the standards of ML Engineering and making them available to a large community of users across various Kubernetes deployment options.\n\nThe [charter](charter.md) defines the scope and governance of the Pipelines Working Group.\n\n\n\n## Organizers\n\n* Humair Khan (**[@HumairAK](https://github.com/HumairAK)**), Red Hat\n* Chen Sun (**[@chensun](https://github.com/chensun)**), Google\n* Alexander Perlman (**[@droctothorpe](https://github.com/droctothorpe)**), Capital One\n* James Wu (**[@james-jwu](https://github.com/james-jwu)**), Google\n* Matthew Prahl (**[@mprahl](https://github.com/mprahl)**), Red Hat\n* Michael Zazula (**[@zazulam](https://github.com/zazulam)**), Capital One\n\n## Contact\n- Slack: [#](https://kubeflow.slack.com/messages/)\n- [Mailing list](https://groups.google.com/forum/#!forum/kubeflow-discuss)\n- [Open Community Issues/PRs](https://github.com/kubeflow/community/labels/wg%2Farea/wg-pipelines)\n- GitHub Teams:\n    - [@kubeflow/wg-pipeline-leads](https://github.com/orgs/kubeflow/teams/wg-pipeline-leads) - Team of Pipeline Working Group leads\n<!-- BEGIN CUSTOM CONTENT -->\n\n<!-- END CUSTOM CONTENT -->\n"
  },
  {
    "path": "wg-pipelines/charter.md",
    "content": "# ML Pipelines Charter\n\nThis charter adheres to the conventions, roles and organization management outlined in [wg-governance].\n\n## Scope\n\nThe goal of the Kubeflow Pipelines project is to build a Kubernetes optimized stack for creating and deploying ML Pipelines and enabling a rich ecosystem of pipelines components and tools. ML Pipelines project has the goal of enabling simple and reliable productionalization of autonomous ML workflows, advancing the standards of ML Engineering and making them available to a large community of users across various Kubernetes deployment options.\n\n\n### In scope\n\n#### Code, Binaries and Services\n\n##### Backend Servers\n- ML Pipelines user facing APIs \n- Storage abstraction and integration components for pipelines\n- Pipelines Orchestration Engine\nIncludes Argo and Tekton based forks, as well as new versions of orchestrators\n- Metadata Store that tracks pipeline artifacts, their lineage and dependencies as well as the ML Metadata Service exposing the Metadata APIs, and the Metadata collection agent\n- Pipeline job scheduling controller, and continuous pipeline execution services\n\n##### FE and UI\n- Pipelines Templates UI\n- Experiment tracking and run exploration UI\n- Metadata Tracking and Lineage Exploration UI\n- Metadata metric visualization \n\n##### Tools\n- Authoring SDK for components and pipelines\n- Tools for pipeline creation and deployment\n- CLI for interacting with Pipelines API\n\n##### Deployment\n- Deployment scripts and tools for deploying ML Pipeline service components on Kubernetes engines of various cloud providers and on-prem deployments\n\n##### Pipeline Content\n- Cloud specific integration components\n- HW and SW vendor specific components\n- Pipeline examples for different ML use cases\n\n##### Documentation\n- Concepts documentation \n- Cloud provider specific documentation\n- Documentation for the SDK and REST API\n- Documentation for the sample components and pipelines \n\n\n#### Dependencies\n\nML Pipeline projects may have dependencies on the following projects managed by other KF work groups:\n- KF User Profiles Controller\n  - Used by multi-user feature in fullset Kubeflow deployement\n- KF Central UI Console\n  - Used by fullset Kubeflow deployment\n- Notebook and KF integration of Notebooks\n  - Used by fullset Kubeflow deployment\n- TF Job and other training controllers\n  - Used by user's codes, e.x. certain pipeline component (one node in DAG) uses TF Job for training.\n- Katib\n  - Used by user's codes, e.x. certain pipeline component (one node in DAG) uses Katib for HP tuning etc.\n \n#### Initial set of subprojects governed by ML Pipelines WG\n\n>github.com/kubeflow/pipelines\n- KFP Backend (mainline), incl. all backend servers\n- KFP UI\n- KFP SDK/DSL/CLI, including samples\n- Components and pipelines content in KF repo\n\n>github.com/kubeflow/kfp-tekton\n- KFP Tekton Backend (fork, with long term intent of merging in mainstream pipelines repo)\n\n>github.com/kubeflow/metadata\n- Metadata Backend, API and UI \n\n\n#### Cross-cutting and Externally Facing Processes\n\n##### ML Pipelines WG defines the following processes for the included projects:\n\n- Community meetings\n- Release and validation processes \n- Issue triaging and prioritization (focusing on decision making process)\n- Feature and roadmap planning\n- Integration process with other external projects\n- Extensibility points and extension development by the community. (e.g pipeline components, system extensions such as schedulers, metadata stores, etc)\n\n\n## Roles and Organization Management\n\nThis WG adheres to the Roles and Organization Management outlined in [wg-governance] and opts-in to updates and modifications to wg-governance.\n\nThe positions of the Chairs and TLs are granted to the organizations and companies participating in the workgroup governance. If an individual leaves the organization to which that position was designated - the organization will have the right to appoint others to these roles.\n\n\n### Subproject Creation\n\nNew [wg-subprojects] need to be reviewed and approved by the WG Leads.\n\n\n[wg-governance]: ../wgs/wg-governance.md\n[wg-subprojects]: https://github.com/Kubeflow/community/blob/master/wgs/wg-pipelines/README.md#subprojects\n"
  },
  {
    "path": "wg-serving/README.md",
    "content": "<!---\nThis is an autogenerated file!\n\nPlease do not edit this file directly, but instead make changes to the\nsigs.yaml file in the project root.\n\nTo understand how this file is generated, see https://github.com/kubeflow/community/blob/master/generator/README.md\n--->\n# Serving Working Group\n\nWG Serving covers developing, deploying, and operating serving jobs on Kubeflow.\n\nThe [charter](charter.md) defines the scope and governance of the Serving Working Group.\n\n## Meetings\n* Regular WG Meeting: [Wednesdays at 09:00 PT (Pacific Time)]() (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=09:00&tz=PT%20%28Pacific%20Time%29).\n  * [Meeting notes and Agenda](https://docs.google.com/document/d/1KZUURwr9MnHXqHA08TFbfVbM8EAJSJjmaMhnvstvi-k/edit).\n\n## Organizers\n\n* Animesh Singh (**[@animeshsingh](https://github.com/animeshsingh)**), IBM\n* Clive Cox (**[@cliveseldon](https://github.com/cliveseldon)**), Seldon\n* Ellis Tarn (**[@ellistarn](https://github.com/ellistarn)**), AWS\n* Rakesh Kalekar (**[@rakelkar](https://github.com/rakelkar)**), Microsoft\n* Dan Sun (**[@yuzisun](https://github.com/yuzisun)**), Bloomberg\n\n## Contact\n- Slack: [#kfserving](https://kubeflow.slack.com/messages/kfserving)\n- [Mailing list](https://groups.google.com/forum/#!forum/kubeflow-discuss)\n- [Open Community Issues/PRs](https://github.com/kubeflow/community/labels/wg%2Farea/wg-serving)\n- GitHub Teams:\n    - [@kubeflow/wg-serving](https://github.com/orgs/kubeflow/teams/wg-serving) - KFServing Development and roadmap\n<!-- BEGIN CUSTOM CONTENT -->\n\n<!-- END CUSTOM CONTENT -->\n"
  },
  {
    "path": "wg-serving/charter.md",
    "content": "# WG Serving Charter\n\nThis charter adheres to the conventions, roles and organization management outlined in [wg-governance].\n\n## Scope\n\nWG Serving covers deploying models in production on Kubeflow. The scope of the problems we are trying to cover are\n\n- Cost: Is the model over or under scaled? Are resources being used efficiently?\n- Monitoring: Are the endpoints healthy? What is the performance profile and request trace? \n- Rollouts: Is this rollout safe? How do I roll back? Can I test a change without swapping traffic?\n- Protocol Standards: How do I make a prediction? GRPC? HTTP? Kafka?\n- Frameworks: How do I serve on Tensorflow? XGBoost? Scikit Learn? Pytorch? Custom Code? \n- Features: How do I explain the predictions? What about detecting outliers and skew? Bias detection? Adversarial Detection\n- Batch: How do I handle batch predictions? \n- Data Plane: How do I leverage standardized Data Plane protocol so that I can move my model across MLServing platforms?\n- Custom Processors: How do I wire up custom pre and post processing\n\n### In scope\n\n#### Code, Binaries and Services\n\n- APIs: For deploying models with multiple runtimes pre-integrated (TFServing, Nvidia Triton (GPU optimization), ONNX Runtime, SKLearn, PyTorch, XGBoost, Custom models)\n- Serverless ML Inference and Autoscaling: Scale to zero (with no incoming traffic) and Request queue based autoscaling \n- Canary and Pinned rollouts: Control traffic percentage and direction, pinned rollouts\n- Pluggable pre-processor/post-processor via Transformer: Gives capabilities to plug in pre-processing/post-processing implementation, control routing and placement (e.g. pre-processor on CPU, predictor on GPU)\n- Pluggable analysis algorithms: Explainability, Drift Detection, Anomaly Detection, Adversarial Detection enabled by Payload Logging (built using CloudEvents standardized eventing protocol), Multi-armed bandits\n- Batch Predictions: Batch prediction support for ML frameworks (TensorFlow, PyTorch, ...)\n- Monitoring: Integration with existing monitoring stack around Knative/Istio ecosystem: Kiali (Service placements, traffic and graphs), Jaeger (request tracing), Grafana/Prometheus plug-ins for Knative)\n- Multiple clients: kubectl, Python SDK, Kubeflow Pipelines SDK\n- Data Plane: Standardized Data Plane V2 protocol for prediction/explainability\n- Multi Model Serving: Serving multiple models per custom KFService instance\n- Ensembles: For composable inference graphs and support for chaining multiple models together\n- Multiple protocols: streaming, gRPC Support for Model Servers\n- Feature Store Integration: Integrate with feature store like Feast\n\n#### Cross-cutting and Externally Facing Processes\n\n- Kubeflow Pipelines Integration: Coordinating with WG Pipeline to make sure models can be deployed and rolled out with pipelines\n- Kubeflow Integration: Coordinating with Kubeflow release teams to ensure that the serving features can be released properly (e.g. integration and testing Istio versions supported by Kubeflow community, providing kustomization manifests etc.)\n- Cloud Providers: Coordinating with various cloud providers to ensure KFServing can be deployed and operated at their end.\n- Model Serving Platforms: Explore integration opportunities with other model serving platforms like Seldon, BentoML etc.\n\n### Out of scope\n\n- APIs used for running distributed training, hyper parameter optimization, neural architecture search, feature store etc.\n\n## Roles and Organization Management\n\nThis WG follows adheres to the Roles and Organization Management outlined in [wg-governance]\nand opts-in to updates and modifications to [wg-governance].\n\n### Subproject Creation\n\nWG Technical Leads\n\n[wg-governance]: ../wgs/wg-governance.md\n"
  },
  {
    "path": "wg-training/README.md",
    "content": "<!---\nThis is an autogenerated file!\n\nPlease do not edit this file directly, but instead make changes to the\nsigs.yaml file in the project root.\n\nTo understand how this file is generated, see https://github.com/kubeflow/community/blob/master/generator/README.md\n--->\n# Training Working Group\n\nWG Training covers developing, deploying, and operating training jobs on Kubeflow.\n\nThe [charter](charter.md) defines the scope and governance of the Training Working Group.\n\n## Meetings\n* Regular WG Meeting (Asia & Europe friendly): [Wednesdays at 03:00 PT (Pacific Time)]() (monthly - first Wednesday every month). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=03:00&tz=PT%20%28Pacific%20Time%29).\n  * [Meeting notes and Agenda](https://docs.google.com/document/d/1K0Qfr0zTuARtAg7ETg9hsMZPh0MT2QUxqGAYvM1Vpec/edit).\n* Regular WG Meeting (US friendly): [Wednesdays at 10:00 PT (Pacific Time)]() (monthly - third Wednesday every month). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=10:00&tz=PT%20%28Pacific%20Time%29).\n  * [Meeting notes and Agenda](https://docs.google.com/document/d/1K0Qfr0zTuARtAg7ETg9hsMZPh0MT2QUxqGAYvM1Vpec/edit).\n\n## Organizers\n\n* Ce Gao (**[@gaocegege](https://github.com/gaocegege)**), Caicloud\n* Johnu George (**[@johnugeorge](https://github.com/johnugeorge)**), Nutanix\n* Yuan Tang (**[@terrytangyuan](https://github.com/terrytangyuan)**), Red Hat\n\n## Contact\n- Slack: [#wg-training](https://kubeflow.slack.com/messages/wg-training)\n- [Mailing list](https://groups.google.com/forum/#!forum/kubeflow-discuss)\n- [Open Community Issues/PRs](https://github.com/kubeflow/community/labels/wg%2Farea/wg-training)\n- GitHub Teams:\n    - [@kubeflow/wg-training-bugs](https://github.com/orgs/kubeflow/teams/wg-training-bugs) - Bug Triage and Troubleshooting\n    - [@kubeflow/wg-training-machinery-misc](https://github.com/orgs/kubeflow/teams/wg-training-machinery-misc) - General Discussion\n    - [@kubeflow/wg-training-reviews](https://github.com/orgs/kubeflow/teams/wg-training-reviews) - API Changes and Reviews (API Machinery APIs, NOT all APIs)\n<!-- BEGIN CUSTOM CONTENT -->\n\n<!-- END CUSTOM CONTENT -->\n"
  },
  {
    "path": "wg-training/charter.md",
    "content": "# WG Training Charter\n\nThis charter adheres to the conventions, roles and organization management outlined in [wg-governance].\n\n## Scope\n\nWG Training covers developing, deploying, and operating training jobs on Kubeflow.\n\n### In scope\n\n#### Code, Binaries and Services\n\n- APIs used for running distributed training jobs (e.g., TFJob API)\n- Tools and documentation to aid in ecosystem tool interoperability around distributed training jobs (e.g., TFJob CRD/Controller)\n\n#### Cross-cutting and Externally Facing Processes\n\n- Coordinating with WG Pipeline to make sure distributed training jobs can interact well with pipelines\n- Coordinating with release teams to ensure that the distributed training features can be released properly\n- Coordinating with WG AutoML to integrate with AutoML systems (e.g. Katib)\n\n### Out of scope\n\n- APIs used for running inference/serving tasks (this falls under the purview of WG Serving).\n\n## Roles and Organization Management\n\nThis WG follows adheres to the Roles and Organization Management outlined in [wg-governance]\nand opts-in to updates and modifications to [wg-governance].\n\n### Subproject Creation\n\nWG Technical Leads\n\n[wg-governance]: ../wgs/wg-governance.md\n"
  },
  {
    "path": "wgs/community-membership.md",
    "content": "# Community membership\n\n**Note:** This document is in progress\n\nThis doc outlines the various responsibilities of contributor roles in\nKubernetes.  The Kubernetes project is subdivided into subprojects under WGs.\nResponsibilities for most roles are scoped to these subprojects.\n\n| Role | Responsibilities | Requirements | Defined by |\n| -----| ---------------- | ------------ | -------|\n| member | active contributor in the community | sponsored by 2 reviewers.  multiple contributions to the project. | Kubernetes GitHub org member. |\n| reviewer | review contributions from other members | history of review and authorship in a subproject | [OWNERS] file reviewer entry. |\n| approver | approve accepting contributions | highly experienced and active reviewer + contributor to a subproject | [OWNERS] file approver entry|\n| subproject owner | set direction and priorities for a subproject | demonstrated responsibility and excellent technical judgement for the subproject | [wgs.yaml] subproject [OWNERS] file *owners* entry |\n\n## New contributors\n\n[New contributors] should be welcomed to the community by existing members,\nhelped with PR workflow, and directed to relevant documentation and\ncommunication channels.\n\n## Established community members\n\nEstablished community members are expected to demonstrate their adherence to the\nprinciples in this document, familiarity with project organization, roles,\npolicies, procedures, conventions, etc., and technical and/or writing ability.\nRole-specific expectations, responsibilities, and requirements are enumerated\nbelow.\n\n## Member\n\nMembers are continuously active contributors in the community.  They can have\nissues and PRs assigned to them, participate in WGs through GitHub teams, and\npre-submit tests are automatically run for their PRs. Members are expected to\nremain active contributors to the community.\n\n**Defined by:** Member of the Kubeflow GitHub organization\n\n### Requirements\n\n- Enabled [two-factor authentication] on their GitHub account\n- Have made multiple contributions to the project or community.  Contribution may include, but is not limited to:\n    - Authoring or reviewing PRs on GitHub\n    - Filing or commenting on issues on GitHub\n    - Contributing to SIG, subproject, or community discussions (e.g. meetings, Slack, email discussion\n      forums, Stack Overflow)\n- Subscribed to [Kubeflow-dev@googlegroups.com]\n- Have read the [contributor guide]\n- Actively contributing to 1 or more subprojects.\n- Sponsored by 2 reviewers. **Note the following requirements for sponsors**:\n    - Sponsors must have close interactions with the prospective member - e.g. code/design/proposal review, coordinating\n      on issues, etc.\n    - Sponsors must be reviewers or approvers in at least 1 OWNERS file either in any repo in the [Kubeflow org],          \n- **[Open an issue][membership request] against the Kubeflow/internal-acls repo**\n   - Ensure your sponsors are @mentioned on the issue\n   - Complete every item on the checklist ([preview the current version of the template][membership template])\n   - Make sure that the list of contributions included is representative of your work on the project.\n- Have your sponsoring reviewers reply confirmation of sponsorship: `+1`\n- Once your sponsors have responded, your request will be reviewed by the [Kubeflow GitHub Admin team]. Any missing information will be requested.\n\n\n### Responsibilities and privileges\n\n- Responsive to issues and PRs assigned to them\n- Responsive to mentions of WG teams they are members of\n- Active owner of code they have contributed (unless ownership is explicitly transferred)\n  - Code is well tested\n  - Tests consistently pass\n  - Addresses bugs or issues discovered after code is accepted\n- Members can do `/lgtm` on open PRs.\n- They can be assigned to issues and PRs, and people can ask members for reviews with a `/cc @username`.\n- Tests can be run against their PRs automatically. No `/ok-to-test` needed.\n- Members can do `/ok-to-test` for PRs that have a `needs-ok-to-test` label, and use commands like `/close` to close PRs as well.\n\n**Note:** members who frequently contribute code are expected to proactively\nperform code reviews and work towards becoming a primary *reviewer* for the\nsubproject that they are active in.\n\n## Reviewer\n\nReviewers are able to review code for quality and correctness on some part of a\nsubproject. They are knowledgeable about both the codebase and software\nengineering principles.\n\n**Defined by:** *reviewers* entry in an OWNERS file in a repo owned by the\nKubeflow project.\n\nReviewer status is scoped to a part of the codebase.\n\n**Note:** Acceptance of code contributions requires at least one approver in\naddition to the assigned reviewers.\n\n### Requirements\n\nThe following apply to the part of codebase for which one would be a reviewer in\nan [OWNERS] file (for repos using the bot).\n\n- member for at least 3 months\n- Primary reviewer for at least 5 PRs to the codebase\n- Reviewed or merged at least 20 substantial PRs to the codebase\n- Knowledgeable about the codebase\n- Sponsored by a subproject approver\n  - With no objections from other approvers\n  - Done through PR to update the OWNERS file\n- May either self-nominate, be nominated by an approver in this subproject, or be nominated by a robot\n\n### Responsibilities and privileges\n\nThe following apply to the part of codebase for which one would be a reviewer in\nan [OWNERS] file (for repos using the bot).\n\n- Tests are automatically run for PullRequests from members of the Kubeflow GitHub organization\n- Code reviewer status may be a precondition to accepting large code contributions\n- Responsible for project quality control via [code reviews]\n  - Focus on code quality and correctness, including testing and factoring\n  - May also review for more holistic issues, but not a requirement\n- Expected to be responsive to review requests\n- Assigned PRs to review related to subproject of expertise\n- Assigned test bugs related to subproject of expertise\n- Granted \"read access\" to Kubeflow repo\n- May get a badge on PR and issue comments\n\n## Approver\n\nCode approvers are able to both review and approve code contributions.  While\ncode review is focused on code quality and correctness, approval is focused on\nholistic acceptance of a contribution including: backwards / forwards\ncompatibility, adhering to API and flag conventions, subtle performance and\ncorrectness issues, interactions with other parts of the system, etc.\n\n**Defined by:** *approvers* entry in an OWNERS file in a repo owned by the\nKubeflow project.\n\nApprover status is scoped to a part of the codebase.\n\n### Requirements\n\nThe following apply to the part of codebase for which one would be an approver\nin an [OWNERS] file (for repos using the bot).\n\n- Reviewer of the codebase for at least 3 months\n- Primary reviewer for at least 10 substantial PRs to the codebase\n- Reviewed or merged at least 30 PRs to the codebase\n- Nominated by a subproject owner\n  - With no objections from other subproject owners\n  - Done through PR to update the top-level OWNERS file\n\n### Responsibilities and privileges\n\nThe following apply to the part of codebase for which one would be an approver\nin an [OWNERS] file (for repos using the bot).\n\n- Approver status may be a precondition to accepting large code contributions\n- Demonstrate sound technical judgement\n- Responsible for project quality control via [code reviews]\n  - Focus on holistic acceptance of contribution such as dependencies with other features, backwards / forwards\n    compatibility, API and flag definitions, etc\n- Expected to be responsive to review requests as per [community expectations]\n- Mentor contributors and reviewers\n- May approve code contributions for acceptance\n\n## Subproject Owner\n\n**Note:** This is a generalized high-level description of the role, and the\nspecifics of the subproject owner role's responsibilities and related\nprocesses *MUST* be defined for individual WGs or subprojects.\n\nSubproject Owners are the technical authority for a subproject in the Kubeflow\nproject.  They *MUST* have demonstrated both good judgement and responsibility\ntowards the health of that subproject.  Subproject Owners *MUST* set technical\ndirection and make or approve design decisions for their subproject - either\ndirectly or through delegation of these responsibilities.\n\n**Defined by:** *owners* entry in subproject [OWNERS] files as defined by [sigs.yaml]  *subproject.owners*\n\n### Requirements\n\nThe process for becoming an subproject Owner should be defined in the SIG\ncharter of the SIG owning the subproject.  Unlike the roles outlined above, the\nOwners of a subproject are typically limited to a relatively small group of\ndecision makers and updated as fits the needs of the subproject.\n\nThe following apply to the subproject for which one would be an owner.\n\n- Deep understanding of the technical goals and direction of the subproject\n- Deep understanding of the technical domain of the subproject\n- Sustained contributions to design and direction by doing all of:\n  - Authoring and reviewing proposals\n  - Initiating, contributing and resolving discussions (emails, GitHub issues, meetings)\n  - Identifying subtle or complex issues in designs and implementation PRs\n- Directly contributed to the subproject through implementation and / or review\n\n### Responsibilities and privileges\n\nThe following apply to the subproject for which one would be an owner.\n\n- Make and approve technical design decisions for the subproject.\n- Set technical direction and priorities for the subproject.\n- Define milestones and releases.\n- Mentor and guide approvers, reviewers, and contributors to the subproject.\n- Ensure continued health of subproject\n  - Adequate test coverage to confidently release\n  - Tests are passing reliably (i.e. not flaky) and are fixed when they fail\n- Ensure a healthy process for discussion and decision making is in place.\n- Work with other subproject owners to maintain the project's overall health and success holistically\n\n\n\n[code reviews]: https://github.com/kubernetes/community/blob/master//contributors/guide/expectations.md#code-review\n[community expectations]: https://github.com/kubernetes/community/blob/master/contributors/guide/expectations.md\n[contributor guide]: https://www.kubeflow.org/docs/about/contributing/\n[Kubeflow org]: https://github.com/kubeflow\n[membership request]: https://github.com/kubeflow/internal-acls/issues/new?template=join_org.md&title=REQUEST%3A%20New%20membership%20for%20%3Cyour-GH-handle%3E\n[membership template]: https://github.com/kubeflow/internal-acls/blob/master/.github/ISSUE_TEMPLATE/join_org.md\n[New contributors]: https://www.kubeflow.org/docs/about/contributing/\n[OWNERS]: https://github.com/kubernetes/community/blob/master/contributors/guide/owners.md\n[wgs.yaml]: templates/wgs.yaml\n[two-factor authentication]: https://help.github.com/articles/about-two-factor-authentication"
  },
  {
    "path": "wgs/overview.md",
    "content": "# Kubeflow Working Group Governance Proposal\n\n## Objective ## \n\n1. Define the processes for forming and governing Kubeflow working groups.\n1. Push technical and project decision making down to WGs\n1. Push operational responsibilities(releases, testing, etc...) down to WGs\n\n## Background ##\n\nIn 2019 the Kubeflow community approved the [Kubeflow Governance Model]. \nA major pillar of KF's governance model is working groups that own subprojects.\nAt the time, formation of WGs and the precise processes by which WGs would operate\nwas delayed until KF was large enough to warrant WGs.\n\nKF has now reached a size where forming WGs is critical to sustaining and growing\nthe community.\n\nThis proposal aims to formalize the governance of WGs. The proposal\nis based on how Kubernetes SIGs operate. In particular, the following\ndocs were used as starting points and then adopted to fit Kubeflow:\n\nOriginal(Kubernetes) | Kubeflow |\n--- | --- |\n[Lifecycle of SIGs and Working Groups](https://github.com/kubernetes/community/blob/master/sig-wg-lifecycle.md) | [Lifecycle](wg-lifcyle.md)\n[SIG Governance](https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md) | [WG Governance](wg-governance.md)\n[SIG Charter Guide](https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md) | [WG Charter Guide](wg-charter.md)\n[SIG Governance Requirements](https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance-requirements.md) | [WG Governance Requirements](wg-governance-requirements.md)\n[SIG Charter Template](https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-charter-template.md) | [WG Charter Template](templates/wg-charter-template.md)\n[Community membership](https://github.com/kubernetes/community/blob/master/community-membership.md) | [Community membership](community-membership.md)\n\n## References\n\n* [Kubeflow Governance Model](https://bit.ly/kf-governance)\n* [KF WG Nominations](https://bit.ly/kubeflow-nominations)\n\n[Kubeflow Governance Model]: https://bit.ly/kf-governance\n[KF WG Nominations]: https://bit.ly/kubeflow-nominations\n"
  },
  {
    "path": "wgs/templates/wg-charter-template.md",
    "content": "# WG YOURWG Charter\n\nThis charter adheres to the conventions, roles and organization management outlined in [wg-governance].\n\n## Scope\n\nInclude a 2-3 sentence summary of what work WG TODO does. Imagine trying to\nexplain your work to a colleague who is familiar with Kubeflow but not\nnecessarily all of the internals.\n\n### In scope\n\n#### Code, Binaries and Services\n\n- list of what qualifies a piece of code, binary or service\n- as falling into the scope of this WG\n- e.g. *clis for working with Kubeflow APIs*, \n- *CI for Kubeflow repos*, etc\n- **This is NOT** a list of specific code locations,\n- or projects those go in [WG Subprojects][wg-subprojects]\n\n#### Cross-cutting and Externally Facing Processes\n\n- list of the non-internal processes\n- that are owned by this WG\n- e.g. qualifying and cutting a Kubeflow release,\n- organizing mentorship programs, etc\n\n### Out of scope\n\nOutline of things that could be confused as falling into this WG but don't or don't right now.\n\n## Roles and Organization Management\n\nThis WG adheres to the Roles and Organization Management outlined in [wg-governance]\nand opts-in to updates and modifications to [wg-governance].\n\n### Additional responsibilities of Chairs\n\n- list of any additional responsibilities\n- of Chairs\n\n### Additional responsibilities of Tech Leads\n\n- list of any additional responsibilities\n- of Tech Leads\n\n### Deviations from [wg-governance]\n\n- list of other ways this WG's roles and governance differ from\n- the outline\n- **If the WG doesn't have either Chairs or Tech Leads specify that here.**\n\n### Subproject Creation\n\nPick one:\n\n1. WG Technical Leads\n2. Federation of Subprojects\n\n[wg-governance]: ../wg-governance.md\n[wg-subprojects]: https://github.com/Kubeflow/community/blob/master/wg-YOURWG/README.md#subprojects\n[Kubeflow Charter README]: https://github.com/Kubeflow/community/blob/master/committee-steering/governance/README.md"
  },
  {
    "path": "wgs/wg-charter.md",
    "content": "# WG Charter Guide\n\nAll Kubeflow WGs must define a charter defining the scope and governance of the WG.\n\n- The scope must define what areas the WG is responsible for directing and maintaining.\n- The governance must outline the responsibilities within the WG as well as the roles\n  owning those responsibilities.\n\n## Steps to create a WG charter\n\n1. Copy [the template](templates/wg-charter-template.md) into a new file under community/wg-*YOURWG*/charter.md ([sig-architecture example])\n2. Read the [Recommendations and requirements] so you have context for the template\n3. Fill out the template for your WG\n4. Update [wgs.yaml](templates/wgs.yaml) with the individuals holding the roles as defined in the template.\n5. Add subprojects owned by your WG in the [wgs.yaml](templates/wgs.yaml)\n5. Create a pull request with a draft of your charter.md and wgs.yaml changes.  Communicate it within your WG\n   and get feedback as needed.\n6. Send the WG Charter out for review to steering@kubeflow.org.  Include the subject \"WG Charter Proposal: YOURWG\"\n   and a link to the PR in the body.   \n7. Typically expect feedback within a week of sending your draft.  Expect longer time if it falls over an\n   event such as KubeCon/CloudNativeCon or holidays.  Make any necessary changes.\n8. Once accepted, the steering committee will ratify the PR by merging it.\n\n## Steps to update an existing WG charter\n\n- For significant changes, or any changes that could impact other WGs, such as the scope, create a\n  PR and send it to the steering committee for review with the subject: \"WG Charter Update: YOURWG\"\n- For minor updates to that only impact issues or areas within the scope of the WG the WG Chairs should\n  facilitate the change.\n\n## WG Charter approval process\n\nWhen introducing a WG charter or modification of a charter the following process should be used.\nAs part of this we will define roles for the [OARP] process (Owners, Approvers, Reviewers, Participants)\n\n- Identify a small set of Owners from the WG to drive the changes.\n  Most typically this will be the WG chairs.\n- Work with the rest of the WG in question (Reviewers) to craft the changes.\n  Make sure to keep the WG in the loop as discussions progress with the Steering Committee (next step).\n  Including the WG mailing list in communications with the steering committee would work for this.\n- Work with the steering committee (Approvers) to gain approval.\n  This can simply be submitting a PR and sending mail to [steering@kubeflow.org].\n  If more substantial changes are desired it is advisable to socialize those before drafting a PR.\n    - The steering committee will be looking to ensure the scope of the WG as represented in the charter is reasonable (and within the scope of Kubeflow) and that processes are fair.\n- For large changes alert the rest of the Kubeflow community (Participants) as the scope of the changes becomes clear.\n  Sending mail to [kubeflow-discuss@googlegroups.com] and/or announcing at the community meeting are a good ways to do this.\n\nIf there are questions about this process please reach out to the steering committee at [steering@kubeflow.org].\n\n## How to use the templates\n\nWG should use [the template](templates/wg-charter-template.md) as a starting point. This document links to the recommended [WG Governance][wg-governance] but WGs may optionally record deviations from these defaults in their charter.\n\n\n## Goals\n\nThe primary goal of the charters is to define the scope of the WG within Kubeflow and how the WG leaders exercise ownership of these areas by taking care of their responsibilities. A majority of the effort should be spent on these concerns.\n\n\n[OARP]: https://stumblingabout.com/tag/oarp/\n[Recommendations and requirements]: wg-governance-requirements.md\n[wg-governance]: wg-governance.md\n[Short Template]: /templates/wg-charter-template.md\n[wgs.yaml]: /templates/wgs.yaml\n[sig-architecture example]: ../../sig-architecture/charter.md\n[steering@kubeflow.org]: mailto:steering@kubeflow.org\n[kubeflow-discuss@googlegroups.com]: mailto:kubeflow-discuss@googlegroups.com\n"
  },
  {
    "path": "wgs/wg-foo/OWNERS",
    "content": "# See the OWNERS docs at https://go.k8s.io/owners\nreviewers:\n  - wg-foo-leads\napprovers:\n  - wg-foo-leads\n"
  },
  {
    "path": "wgs/wg-governance-requirements.md",
    "content": "# WG Governance Requirements\n\n## Goals\n\nThis document outlines the recommendations and requirements for defining WG and subproject governance.\n\nThis doc uses [rfc2119](https://www.ietf.org/rfc/rfc2119.txt) to indicate keyword requirement levels.\nSub elements of a list inherit the requirements of the parent by default unless overridden.\n\n## Checklist\n\nFollowing is the checklist of items that should be considered as part of defining governance for\nany subarea of the Kubeflow project.\n\n### Roles\n\n- *MUST* enumerate any roles within the WG and the responsibilities of each\n- *MUST* define process for changing the membership of roles\n  - When and how new members are chosen / added to each role\n  - When and how existing members are retired from each role\n- *SHOULD* define restrictions / requirements for membership of roles\n- *MAY* define target staffing numbers of roles\n\n### Organizational management\n\n- *MUST* define when and how collaboration between members of the WG is organized\n  - *SHOULD* define how periodic video conference meetings are arranged and run\n  - *SHOULD* define how conference / summit sessions are arranged\n  - *MAY* define periodic office hours on slack or video conference\n\n- *MAY* define process for new community members to contribute to the area\n  - e.g. read a contributing guide, show up at WG meeting, message the google group\n\n- *MUST* define how subprojects are managed\n  - When and how new subprojects are created\n  - Subprojects *MUST* define roles (and membership) within subprojects\n\n### Project management\n\nThe following checklist applies to both WGs and subprojects of WGs as appropriate:\n\n- *MUST* define how milestones / releases are set\n  - How target dates for milestones / releases are proposed and accepted\n  - What priorities are targeted for milestones\n  - The process for publishing a release\n\n- *SHOULD* define how priorities / commitments are managed\n  - How priorities are determined\n  - How priorities are staffed\n\n### Technical processes\n\nAll technical assets *MUST* be owned by exactly 1 WG subproject.  The following checklist applies to subprojects:\n\n- *MUST* define how technical decisions are communicated and made within the WG or project\n  - Process for proposal, where and how it is published and discussed, when and how a decision is made\n    (e.g. [KEP] process)\n  - Who are the decision makers on proposals (e.g. anyone in the world can block, just reviewers on the PR,\n    just approvers in OWNERs, etc)\n  - How disagreements are resolved within the area (e.g. discussion, fallback on voting, escalation, etc)\n  - How and when disagreements may be escalated\n  - *SHOULD* define expectations and recommendations for proposal process (e.g. escalate if not progress towards\n    resolution in 2 weeks)\n  - *SHOULD* define a level of commitment for decisions that have gone through the formal process\n    (e.g. when is a decision revisited or reversed)\n\n- *MUST* define how technical assets of project remain healthy and can be released\n  - Publicly published signals used to determine if code is in a healthy and releasable state\n  - Commitment and process to *only* release when signals say code is releasable\n  - Commitment and process to ensure assets are in a releasable state for milestones / releases\n    coordinated across multiple areas / subprojects (e.g. the Kubeflow OSS release)\n  - *SHOULD* define target metrics for health signal (e.g. broken tests fixed within N days)\n  - *SHOULD* define process for meeting target metrics (e.g. all tests run as presubmit, build cop, etc)\n\n[lazy-consensus]: http://en.osswiki.info/concepts/lazy_consensus\n[super-majority]: https://en.wikipedia.org/wiki/Supermajority#Two-thirds_vote\n[warnocks-dilemma]: http://communitymgt.wikia.com/wiki/Warnock%27s_Dilemma\n[slo]: https://en.wikipedia.org/wiki/Service_level_objective\n[steering-committee]: steering@kubeflow.org\n[business-operations]: http://www.businessdictionary.com/definition/business-operation.html\n[KEP]: https://github.com/kubeflow/community/blob/master/proposals/TEMPLATE.md"
  },
  {
    "path": "wgs/wg-governance.md",
    "content": "# Working Group(WG) Roles and Organizational Governance\n\nThis charter adheres to the conventions described in the [Kubeflow Charter doc](wg-charter.md).\nIt will be updated as needed to meet the current needs of the Kubeflow project.\n\nIn order to standardize Working Group efforts, create maximum\ntransparency, and route contributors to the appropriate WG, WGs should follow\nthese guidelines:\n\n- Create a charter and have it approved according to the [WG charter process]\n- Meet regularly, at least for 30 minutes every 3 weeks, except November and\nDecember\n- Keep up-to-date meeting notes, linked from the WG's page in the community\nrepo\n- Record meetings and make them publicly available in Drive\n- Report activity with the community via the kubeflow-discuss mailing list at\nleast once a quarter. Whichever format the WG uses should _always_ be reported\nto the kubeflow-discuss mailing list as this is the list the community depends on\nfor WG updates.    \n- Participate in release planning meetings and retrospectives, and burndown\nmeetings, as needed\n- Ensure related work happens in a project-owned github org and repository, with\n code and tests explicitly owned and supported by the WG, including issue\n triage, PR reviews, test-failure response, bug fixes, etc.\n- Use the [forums provided] as the primary means of working, communicating, and\ncollaborating, as opposed to private emails and meetings  \n- Ensure contributing instructions (CONTRIBUTING.md) are defined in the WGs\nfolder located in the kubeflow/community repo if the groups contributor steps\nand experience are different or more in-depth than the documentation listed in\nthe general [contributor guide].  \n- Help and sponsor special interest groups(SIGs) that the WG is interested in investing in  \n- Track and identify all WG features in the current release\n\nThe process for setting up a Working Group (WG) is listed in the\n[wg-lifecycle] document.\n\n## Roles\n\n### Notes on Roles\n\nWithin this section \"Lead\" refers to someone who is a member of the union\n of a Chair, Tech Lead or Subproject Owner role. There is no one lead to any\n Kubeflow community group. Leads have specific decision making power over some\n part of a group and thus additional accountability. Each role is detailed below.  \n\n- Initial roles are defined at the founding of the WG or Subproject as part\nof the acceptance of that WG or Subproject.\n\n#### Activity Expectations  \n\n- Leads *SHOULD* remain active and responsive in their Roles.\n- Leads taking an extended leave of 1 or more months *SHOULD* coordinate with other leads to ensure the role is adequately staffed during the leave.\n- Leads going on leave for 1-3 months *MAY* work with other Leads to identify a temporary replacement.\n- Leads of a role *SHOULD* remove any other leads or roles that have not communicated a leave of absence and either cannot be reached for more than 1 month or are not fulfilling their documented responsibilities for more than 1 month.\n  - This may be done through a [super-majority] vote of Leads. If there are not enough *active* Leads, then a [super-majority] vote between Chairs, Tech Leads and Subproject Owners may decide the removal of the Lead.\n\n#### Requirements\n\n- Leads *MUST* be at least a [\"member\" on our contributor ladder] to\nbe eligible to hold a leadership role within a WG.\n- WG *MAY* prefer various levels of domain knowledge depending on the\nrole. This should be documented.  \n- People management interests - there's a lot of us!\n\n#### Escalations\n\n- Lead membership disagreements *MAY* be escalated to the WG Chairs. WG Chair\nmembership disagreements may be escalated to the Steering Committee.\n\n#### On-boarding and Off-boarding Leads\n\n- Leads *MAY* decide to step down at anytime and propose a replacement.  Use\nlazy consensus amongst other Leads with fallback on majority vote to accept\nproposal.  The candidate *SHOULD* be supported by a majority of WG contributors\n or the Subproject contributors (as applicable).\n- Leads *MAY* select additional leads through a [super-majority] vote\namongst leads. This *SHOULD* be supported by a majority of WG contributors or\nSubproject contributors (as applicable).\n\n### Chair\n\n- Number: 2-3\n- Membership tracked in [wg.yaml]  \n  - If no tech lead role is present, Chair assumes responsibilities from [#tech-lead] section.\n  \n  In addition, run operations and processes governing the WG:\n\n- *SHOULD* define how priorities and commitments are managed and delegate to other leads as needed\n- *SHOULD* drive charter changes (including creation) to get community buy-in but *MAY* delegate content creation to WG contributors\n- *SHOULD* identify, track, and maintain the WGs enhancements for current\n  release and serve as point of contact for the release team, but *MAY* delegate\n   to another Lead to fulfill these responsibilities\n  - *MAY* delegate the creation of a WG roadmap to other Leads\n  - *MUST* organize a main group meeting and make sure [wg.yaml] is up to date\n  including subprojects and their meeting information but *SHOULD* delegate the\n  need for subproject meetings to subproject owners  \n  - *SHOULD* facilitate meetings but *MAY* delegate to other Leads or future\n  chairs/chairs in training\n  - *MUST* ensure there is a maintained CONTRIBUTING.md document in the\n  appropriate WG folder if the contributor experience or on-boarding knowledge\n  is different than in the general [contributor guide]. *MAY* delegate to\n  contributors to create or update.\n  - *MUST* ensure meetings are recorded and made available\n  - *MUST* report activity with the community via kubeflow-discuss mailing list at least\n  once a quarter (slides, video from kubecon, etc)\n  - *MUST* coordinate sponsored SIG updates to the WG and the wider\n  community  \n- *MUST* coordinate communication and be a connector with other community\n groups like WGs and the Steering Committee but *MAY* delegate the actual\n communication and creation of content to other contributors where\n appropriate  \n- *MUST* provide quarterly updates through our community channels: twice a year\nto Kubeflow-discuss@googlegroups.com mailing list and twice a year presenting at\nthe weekly community meeting  \n\n### Tech Lead\n\n- *Optional Role*: WG Technical Leads\n  - Establish new subprojects\n  - Decommission existing subprojects\n  - Resolve X-Subproject technical issues and decisions\n  - Number: 2-3\n  - Membership tracked in [wg.yaml]\n\n### Subproject Owner\n\n- Subproject Owners\n  - Scoped to a subproject defined in [wg.yaml]\n  - Seed leads and contributors established at subproject founding\n  - *SHOULD* be an escalation point for technical discussions and decisions in\n  the subproject\n  - *SHOULD* set milestone priorities or delegate this responsibility\n  - Number: 2-3\n  - Membership tracked in [wg.yaml]\n\n### All Leads\n\n- *SHOULD* maintain health of at least one subproject or the health of the WG\n- *SHOULD* show sustained contributions to at least one subproject or to the\n  WG\n- *SHOULD* hold some documented role or responsibility in the WG and / or at\n  least one subproject\n    (e.g. reviewer, approver, etc)\n- *MAY* build new functionality for subprojects\n- *MAY* participate in decision making for the subprojects they hold roles in\n- Includes all reviewers and approvers in [OWNERS] files for subprojects\n\n\n#### Subproject Creation\n\n---\n\nOption 1: by WG Technical Leads\n\n- Subprojects may be created by Kubeflow proposal and accepted by [lazy-consensus] with fallback on majority vote of\n  WG Technical Leads.  The result *SHOULD* be supported by the majority of WG Leads.\n  - Proposal *MUST* establish subproject owners\n  - [wg.yaml] *MUST* be updated to include subproject information and [OWNERS] files with subproject owners\n  - Where subprojects processes differ from the WG governance, they must document how\n    - e.g. if subprojects release separately - they must document how release and planning is performed\n\nOption 2: by Federation of Subprojects\n\n- Subprojects may be created by Kubeflow proposal and accepted by [lazy-consensus] with fallback on majority vote of\n  subproject owners in the WG.  The result *SHOULD* be supported by the majority of leads.\n  - Kubeflow proposal *MUST* establish subproject owners\n  - [wg.yaml] *MUST* be updated to include subproject information and [OWNERS] files with subproject owners\n  - Where subprojects processes differ from the WG governance, they must document how\n    - e.g. if subprojects release separately - they must document how release and planning is performed\n\n---\n\n- Subprojects must define how releases are performed and milestones are set.  Example:\n\n> - Release milestones\n>   - Follows the Kubeflow/Kubeflow release milestones and schedule\n>   - Priorities for upcoming release are discussed during the WG meeting following the preceding release and shared through a PR. Priorities are finalized before feature freeze.\n> - Code and artifacts are published as part of the Kubeflow/Kubeflow release\n\n### Technical processes\n\nSubprojects of the WG *MUST* use the following processes unless explicitly following alternatives\nthey have defined.\n\n- Proposing and making decisions\n  - Proposals sent as [KEP] PRs and published to googlegroup as announcement\n  - Follow [KEP] decision making process\n\n- Test health\n  - Canonical health of code.\n  - Consistently broken tests automatically send an alert to their google group.\n  - WG contributors are responsible for responding to broken tests alert. PRs that break tests should be rolled back if not fixed within 24 hours (business hours).\n  - Test dashboard checked and reviewed at start of each WG meeting.  Owners assigned for any broken tests and followed up during the next WG meeting.\n\nIssues impacting multiple subprojects in the WG should be resolved by either:\n\n- Option 1: WG Technical Leads\n- Option 2: Federation of Subproject Owners\n\n### WG Retirement\n\n- In the event that the WG is unable to regularly establish consistent quorum\n  or otherwise fulfill its Organizational Management responsibilities\n  - after 3 or more months it *SHOULD* be retired\n  - after 6 or more months it *MUST* be retired\n\n[k/enhancements]: https://github.com/kubeflow/community/tree/master/proposals\n[forums provided]: https://www.kubeflow.org/docs/about/community/#community-discussions\n[lazy-consensus]: http://en.osswiki.info/concepts/lazy_consensus\n[super-majority]: https://en.wikipedia.org/wiki/Supermajority#Two-thirds_vote\n[KEP]: https://github.com/kubeflow/community/blob/master/proposals/TEMPLATE.md\n[wgs.yaml]: templates/wgs.yaml\n[WG Charter process]: wg-charter.md\n[Kubeflow Charter README]: /wg-charter.md\n[wg-lifecycle]: wg-lifecycle.md\n[\"member\" on our contributor ladder]: https://docs.google.com/document/d/1HKB662Ju6URVdzw0Neq9OFnxM6RMXFu4Dd04q9E3kGk/edit#heading=h.5p9yntdhi7yr\n[contributor guide]: https://www.kubeflow.org/docs/about/contributing/\n[Google group]: https://groups.google.com/forum/#!forum/kubeflow-discuss\n[dashboard]: https://k8s-testgrid.appspot.com/sig-big-data\n"
  },
  {
    "path": "wgs/wg-lifecycle.md",
    "content": "## SUMMARY:\n\nThis document covers everything you need to know about the creation and retirement (“lifecycle”) of a working group within Kubeflow. General project governance information can be found in the [governance doc].\nOut of scope for this document: [subproject] creation.\n\n[Creation]\n[Retirement]\n\n## [Creation]\n### Prerequisites for a WG\n- [ ] Read [wg-governance.md]\n- [ ] Ensure all WG Chairs, Technical Leads, and other leadership roles are [community members]\n- [ ] Send an email to <kubeflow-discuss@googlegroups.com> to scope the WG and get provisional approval.\n- [ ] Look at the checklist below for processes and tips that you will need to do while this is going on. It's best to collect this information upfront so you have a smoother process to launch\n- [ ] Follow the [WG charter process](wg-charter.md) to propose and obtain approval for a charter\n- [ ] Announce new WG on kubeflow-discuss@googlegroups.com\n\n### [GitHub]\n\n- Submit a PR that:\n      \n   * adds rows to [wgs.yaml]\n   * run `make WHAT=wg-foo` to autogenerate docs\n\n- You’ll need:\n  - WG Name\n  - Directory URL\n  - Mission Statement\n  - Chair Information\n  - Meeting Information\n  - Contact Methods\n  - Any WG Stakeholders\n  - Any Subproject Stakeholders\n- Add WG-related docs like charter.md, schedules, roadmaps, etc. to your new kubeflow/community/wg-foo directory once the above PR is merged.\n- File a [kubeflow/testing] Issue  and PR for a label; read about our [GitHub management] services\n\n### Communicate:\n\nWGs are responsible for setting up and administering the following communication channels\n- Mailing lists \n      \n  * foo@googlegroups.com\n  * foo-leads@googlegroups.com\n\n- Calendar for WG related meetings\n- Video conferencing (zoom, meet, etc...) \n- Hosting for meeting notes, recordings etc...\n- Slack channels (if desired)\n\n### Engage:\n...as a chair/tech lead with other chairs/tech leads\n- Subscribe to the kubeflow-wg-leads@googlegroups.com group\n- Join the #chairs-and-techleads slack channel\n\n...with the community as part of [wg-governance.md]\n- Get on the Kubeflow community meeting agenda to provide WG updates\n- Create a shared calendar and schedule your weekly/biweekly/triweekly weeks [update meetings]\n- This calendar creation process will allow all of your leads to edit SIG/WG Meetings. This is important as we all change jobs, email addresses, and take breaks from the project. Shared calendars will also provide consistency with contributors looking for your subproject meetings, office hours, and anything else that the SIG/WGs contributors should know about.\n\n## [Retirement]\n\n(merging or disbandment)\n\nSometimes it might be necessary to sunset a SIG or Working Group. SIGs/WGs may also merge with an existing SIG/WG if deemed appropriate, and would save project overhead in the long run. SIGs in particular are more ephemeral than WGs, so this process should be followed when the SIG has accomplished its mission.\n\n### Prerequisites for WG Retirement\n- [ ] Have completed the mission of the WG or have another reason as outlined in [wg-governance.md]\n\n### Steps:\n- [ ] Send an email to kubeflow-discuss@googlegroups.com alerting the community of your intentions to disband or merge. [example]\n- [ ] Archive the member and lead/chair mailing lists/[GoogleGroups]\n- [ ] Delete your shared WG calendar\n- [ ] Move the existing WG directory into the archive in `kubeflow/community`\n- [ ] GitHub archiving/removing/other transactions:\n   - [ ] Move all appropriate github repositories to an appropriate archive or a repo outside of the Kubeflow org\n   - [ ] Each subproject a WG owns must transfer ownership to a new WG, outside the project, or be retired\n   - [ ] File an issue with kubeflow/org if there are multiple repos\n   - [ ] Retire or transfer any test-infra jobs or testgrid dashboards, if applicable, owned by the WG.\n   - [ ] Migrate/Remove/Deprecate any SIG/WG labels in labels.yaml\n   - [ ] Remove or rename any GitHub teams that refer to the WG\n   - [ ] Update wgs.yaml to remove or rename\n\n\n[community members]: community-membership.md\n[governance doc]: https://bit.ly/kf-governance\n[subproject]: /governance.md#subprojects\n[Creation]: #Creation\n[Retirement]: #Retirement\n[GitHub]: #GitHub\n[wg-governance.md]: wg-governance.md\n[WG charter process]: wg-charter\n[wgs.yaml]: /templates/wgs.yaml\n[generator doc]: https://github.com/kubeflow/community/tree/master/generator\n[GitHub management]: https://github.com/kubeflow/community/blob/master/how-to/github_admin.md\n[code of conduct]: https://github.com/kubeflow/community/blob/master/CODE_OF_CONDUCT.md\n[GoogleGroups]: https://github.com/kubeflow/community/blob/master/how-to/kubeflow_assets.md#mailing-list\n[slack-guidelines.md]: https://github.com/kubeflow/community/blob/master/how-to/kubeflow_assets.md#slack\n[zoom-guidelines.md]: https://github.com/kubeflow/community/blob/master/how-to/kubeflow_assets.md#zoom\n"
  },
  {
    "path": "wgs.yaml",
    "content": "sigs:\n- dir: sig-feature-store\n  name: Feature Store\n  mission_statement: >\n    SIG Feature Store covers the definition, management, storage, discovery, and serving\n    of features to models.\n\n  charter_link: charter.md\n  label: area/sig-feature-store\n  leadership:\n    chairs:\n    - github: kevinstumpf\n      name: Kevin Stumpf\n    - github: pyalex\n      name: Oleksii Moskalenko\n      company: Gojek\n    - github: woop\n      name: Willem Pienaar\n      company: Gojek\n    tech_leads:\n    - github: kevinstumpf\n      name: Kevin Stumpf\n    - github: pyalex\n      name: Oleksii Moskalenko\n      company: Gojek\n    - github: woop\n      name: Willem Pienaar\n      company: Gojek\n  meetings:\n  - description: Monthly SIG Meeting\n    day: Wednesday\n    time: \"18:00\"\n    tz: PT (Pacific Time)\n    frequency: monthly\n    archive_url: https://docs.google.com/document/d/1h2BMuN6V6cGFQrSRk7msmYVmZdrouLRV_EPR_tphZrU/edit#\n  contact:\n    slack: feast\n    mailing_list: https://groups.google.com/forum/#!forum/kubeflow-discuss\n    teams:\n    - name: sig-feature-store\n      description: Feature store development and roadmap\n- dir: sig-onprem\n  name: OnPrem\n  mission_statement: >\n    Serve as a community resource for advising with on premises installation of Kubeflow.\n\n  charter_link: charter.md\n  label: area/sig-onprem\n  leadership:\n    chairs:\n    - github: jtfogarty\n      name: Jeff Fogarty\n      company: US Bank\n    tech_leads:\n    - github: jtfogarty\n      name: Jeff Fogarty\n      company: US Bank\n    - github: mameshini\n      name: Igor Mameshin\n      company: Agile Stacks\n  meetings:\n  - description: SIG Onprem Community Meeting - (US East/EMEA)\n    day: Thursday\n    time: \"10:30\"\n    tz: ET (Eastern Time)\n    frequency: biweekly\n    url: https://us02web.zoom.us/j/87159010361?pwd=c09wTXk2dmJPNmpkTDFTb0o0cnY2Zz09\n  - description: SIG Onprem Community Meeting - (US West)\n    day: Friday\n    time: \"15:00\"\n    tz: ET (Eastern Time)\n    frequency: biweekly\n    url: https://us02web.zoom.us/j/87159010361?pwd=c09wTXk2dmJPNmpkTDFTb0o0cnY2Zz09\n  contact:\n    slack: sig-onprem\n    mailing_list: https://groups.google.com/forum/#!forum/kubeflow-discuss\n    teams:\n    - name: sig-onprem\n      description: General Discussion\nworkinggroups:\n- dir: wg-automl\n  name: AutoML\n  mission_statement: >\n    WG AutoML is responsible for all aspects of Automated Machine Learning technologies\n    on Kubeflow.\n\n  charter_link: charter.md\n  label: area/wg-automl\n  leadership:\n    chairs:\n    - github: andreyvelich\n      name: Andrey Velichkevich\n      company: Apple\n    - github: gaocegege\n      name: Ce Gao\n      company: Caicloud\n    - github: johnugeorge\n      name: Johnu George\n      company: Nutanix\n    tech_leads:\n    - github: andreyvelich\n      name: Andrey Velichkevich\n      company: Apple\n    - github: gaocegege\n      name: Ce Gao\n      company: Caicloud\n    - github: johnugeorge\n      name: Johnu George\n      company: Nutanix\n  meetings:\n  - description: Kubeflow AutoML Working Group Meeting (Asia & Europe friendly)\n    day: Wednesday\n    time: 11:00am\n    tz: UTC (Coordinated Universal Time)\n    frequency: every 4 weeks on Wednesday from the 10th of March 2021\n    url: https://calendar.google.com/calendar/u/0/r?cid=ZDQ5bnNpZWZzbmZna2Y5MW8wdThoMmpoazRAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ\n    archive_url: https://docs.google.com/document/d/1MChKfzrKAeFRtYqypFbMXL6ZIc_OgijjkvbqmwRV-64\n  - description: Kubeflow AutoML Working Group Meeting (US friendly)\n    day: Wednesday\n    time: 5:00pm\n    tz: UTC (Coordinated Universal Time)\n    frequency: every 4 weeks on Wednesday from the 24th of March 2021\n    url: https://calendar.google.com/calendar/u/0/r?cid=ZDQ5bnNpZWZzbmZna2Y5MW8wdThoMmpoazRAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ\n    archive_url: https://docs.google.com/document/d/1MChKfzrKAeFRtYqypFbMXL6ZIc_OgijjkvbqmwRV-64\n  contact:\n    slack: wg-automl\n    mailing_list: https://groups.google.com/forum/#!forum/kubeflow-discuss\n    teams:\n    - name: wg-automl-leads\n      description: AutoML WG Tech Leads\n  subprojects:\n  - name: katib\n    owners:\n    - https://raw.githubusercontent.com/kubeflow/katib/master/OWNERS\n- dir: wg-data\n  name: Data\n  mission_statement: >\n    The WG \"Data\" is focused on enhancing the support for data/metadata-related tasks\n    within Kubeflow, with a specific focus on the Spark Operator and Model Registry.\n    The group aims to simplify and improve data processing between various stages\n    of ML lifecycle. For example, from Data Preparation to model training and fine-tuning.\n    The group also aims to facilitate the ML model's metadata management, while ensuring\n    seamless integration with other Kubeflow components. The goal of Spark on Kubernetes\n    Operator is to simplify the capability of running Apache Spark on Kubernetes.\n    It automates deployment and simplifies lifecycle management of Spark Jobs on Kubernetes.\n    The goal of Model Registry is gather, analyze, and develop model registry requirements\n    of Kubeflow community users.\n\n  charter_link: charter.md\n  label: area/wg-data\n  leadership:\n    chairs:\n    - github: ChenYi015\n      name: Yi Chen\n      company: Alibaba Cloud\n    - github: andreyvelich\n      name: Andrey Velichkevich\n      company: Apple\n    - github: rareddy\n      name: Ramesh Reddy\n      company: Red Hat\n    tech_leads:\n    - github: ChenYi015\n      name: Yi Chen\n      company: Alibaba Cloud\n    - github: andreyvelich\n      name: Andrey Velichkevich\n      company: Apple\n    - github: franciscojavierarceo\n      name: Francisco Javier Arceo\n      company: Red Hat\n    - github: tarilabs\n      name: Matteo Mortari\n      company: Red Hat\n  meetings:\n  - description: KF Model Registry community meeting (US/EMEA)\n    day: Monday\n    time: 7:00PM-8:00PM\n    tz: Europe/Madrid\n    frequency: biweely - every other Monday of the month\n    archive_url: https://docs.google.com/document/d/1DmMhcae081SItH19gSqBpFtPfbkr9dFhSMCgs-JKzNo/edit?usp=sharing\n  - description: Kubeflow Spark Operator Meeting\n    day: Friday\n    time: 8:00AM-9:00AM\n    tz: \"\"\n    frequency: biweely - every other Friday of the month\n    archive_url: https://bit.ly/3VGzP4n\n  contact:\n    slack: https://www.kubeflow.org/docs/about/community/#slack-channels\n    mailing_list: https://groups.google.com/forum/#!forum/kubeflow-discuss\n    teams:\n    - name: wg-data-leads\n      description: Team of Data Working Group leads\n  subprojects:\n  - name: hub\n    owners:\n    - https://raw.githubusercontent.com/kubeflow/hub/main/OWNERS\n  - name: spark-operator\n    owners:\n    - https://raw.githubusercontent.com/kubeflow/spark-operator/blob/master/OWNERS\n- dir: wg-deployment\n  name: Deployment\n  mission_statement: >\n    WG Deployment covers developing, maintaining artifacts to deploy and operate Kubeflow.\n\n  charter_link: charter.md\n  label: area/wg-deployment\n  leadership:\n    chairs:\n    - github: PatrickXYS\n      name: Yao Xiao\n      company: AWS\n    - github: animeshsingh\n      name: Animesh Singh\n      company: IBM\n    - github: mameshini\n      name: Igor Mameshin\n      company: Agile Stacks\n    - github: vpavlin\n      name: Vaclav Pavlin\n      company: Red Hat\n    - github: yanniszark\n      name: Yannis Zarkadas\n      company: Arrikto\n    tech_leads:\n    - github: PatrickXYS\n      name: Yao Xiao\n      company: AWS\n    - github: animeshsingh\n      name: Animesh Singh\n      company: IBM\n    - github: mameshini\n      name: Igor Mameshin\n      company: Agile Stacks\n    - github: vpavlin\n      name: Vaclav Pavlin\n      company: Red Hat\n    - github: yanniszark\n      name: Yannis Zarkadas\n      company: Arrikto\n  meetings:\n  - description: Regular WG Meeting (Pacific PM)\n    day: Wednesday\n    time: \"17:30\"\n    tz: PT (Pacific Time)\n    frequency: biweekly - every other Wednesday\n    archive_url: http://bit.ly/kf-meeting-notes\n  contact:\n    slack: wg-deployment\n    mailing_list: https://groups.google.com/forum/#!forum/kubeflow-discuss\n    teams:\n    - name: wg-deployment-bugs\n      description: Bug Triage and Troubleshooting\n    - name: wg-deployment-misc\n      description: General Discussion\n    - name: wg-deployment-reviews\n      description: Changes and Reviews\n  subprojects:\n  - name: kfctl\n    owners:\n    - https://raw.githubusercontent.com/kubeflow/kfctl/master/OWNERS\n- dir: wg-manifests\n  name: Manifests\n  mission_statement: >\n    WG Manifests maintains a centralized repository of manifests.\n\n  charter_link: charter.md\n  label: area/wg-manifests\n  leadership:\n    chairs:\n    - github: juliusvonkohout\n      name: Julius von Kohout\n      company: DHL\n    - github: kimwnasptd\n      name: Kimonas Sotirchos\n      company: Canonical\n    tech_leads:\n    - github: juliusvonkohout\n      name: Julius von Kohout\n      company: DHL\n    - github: kimwnasptd\n      name: Kimonas Sotirchos\n      company: Canonical\n  meetings:\n  - description: Regular WG Meeting (Pacific AM)\n    day: Thursday\n    time: \"08:00\"\n    tz: PT (Pacific Time)\n    frequency: biweekly - every other Thursday\n    archive_url: https://bit.ly/kf-wg-manifests-notes\n  contact:\n    slack: wg-manifests\n    mailing_list: https://groups.google.com/forum/#!forum/kubeflow-discuss\n    teams:\n    - name: wg-manifests-leads\n      description: Tech leads of wg-manifests\n  subprojects:\n  - name: manifests\n    owners:\n    - https://raw.githubusercontent.com/kubeflow/manifests/master/OWNERS\n- dir: wg-ml-experience\n  name: ML Experience\n  mission_statement: >\n    The ML Experience Working Group focuses on developing, maintaining, and improving\n    tools and  extensions that support data science and machine learning practitioners\n    workflows within Kubeflow. The group is dedicated to delivering a high-level,\n    seamless experience integrated with the IDE of choice across multiple Kubeflow\n    components.\n\n  charter_link: charter.md\n  label: area/wg-ml-experience\n  leadership:\n    chairs:\n    - github: StefanoFioravanzo\n      name: Stefano Fioravanzo\n      company: Canonical\n    - github: andreyvelich\n      name: Andrey Velichkevich\n      company: Apple\n    - github: ederign\n      name: Eder Ignatowicz\n      company: Red Hat\n    tech_leads:\n    - github: StefanoFioravanzo\n      name: Stefano Fioravanzo\n      company: Canonical\n    - github: andreyvelich\n      name: Andrey Velichkevich\n      company: Apple\n    - github: ederign\n      name: Eder Ignatowicz\n      company: Red Hat\n  meetings: []\n  contact:\n    slack: https://cloud-native.slack.com/archives/C073W572LA2\n    mailing_list: https://groups.google.com/forum/#!forum/kubeflow-discuss\n    teams:\n    - name: wg-ml-experience-leads\n      description: Team of ML Experience Group leads\n- dir: wg-notebooks\n  name: Notebooks\n  mission_statement: >\n    WG Notebooks is responsible for the user experience around Notebooks and their\n    integrations with Kubeflow.\n\n  charter_link: charter.md\n  label: area/wg-notebooks\n  leadership:\n    chairs:\n    - github: StefanoFioravanzo\n      name: Stefano Fioravanzo\n      company: Canonical\n    - github: elikatsis\n      name: Ilias Katsakioris\n      company: Arrikto\n    - github: kimwnasptd\n      name: Kimonas Sotirchos\n      company: Canonical\n    - github: thesuperzapper\n      name: Mathew Wicks\n    - github: yanniszark\n      name: Yannis Zarkadas\n      company: Arrikto\n    tech_leads:\n    - github: StefanoFioravanzo\n      name: Stefano Fioravanzo\n      company: Canonical\n    - github: elikatsis\n      name: Ilias Katsakioris\n      company: Arrikto\n    - github: kimwnasptd\n      name: Kimonas Sotirchos\n      company: Canonical\n    - github: thesuperzapper\n      name: Mathew Wicks\n    - github: yanniszark\n      name: Yannis Zarkadas\n      company: Arrikto\n  meetings:\n  - description: Regular Notebooks Meeting (Australia & Europe friendly)\n    day: Thursday\n    time: 11:00 pm\n    tz: PT (Pacific Time)\n    frequency: weekly\n    archive_url: https://arrik.to/kf-wg-notebooks-notes\n  contact:\n    slack: wg-notebooks\n    mailing_list: https://groups.google.com/forum/#!forum/kubeflow-discuss\n    teams:\n    - name: wg-notebooks-leads\n      description: Tech leads of wg-notebooks\n  subprojects:\n  - name: central-dashboard\n    owners:\n    - https://github.com/kubeflow/kubeflow/blob/master/components/centraldashboard/OWNERS\n  - name: crud-web-apps\n    owners:\n    - https://raw.githubusercontent.com/kubeflow/kubeflow/master/components/crud-web-apps/OWNERS\n  - name: jupyter-web-app\n    owners:\n    - https://raw.githubusercontent.com/kubeflow/kubeflow/master/components/jupyter-web-app/OWNERS\n  - name: kfam\n    owners:\n    - https://github.com/kubeflow/kubeflow/blob/master/components/access-management/OWNERS\n  - name: notebook-images\n    owners:\n    - https://raw.githubusercontent.com/kubeflow/kubeflow/master/components/tensorflow-notebook-image/OWNERS\n  - name: notebooks-controller\n    owners:\n    - https://raw.githubusercontent.com/kubeflow/kubeflow/master/components/notebook-controller/OWNERS\n  - name: poddefaults-webhook\n    owners:\n    - https://github.com/kubeflow/kubeflow/blob/master/components/admission-webhook/OWNERS\n  - name: profile-controller\n    owners:\n    - https://github.com/kubeflow/kubeflow/blob/master/components/profile-controller/OWNERS\n- dir: wg-pipelines\n  name: Pipelines\n  mission_statement: >\n    The goal of the Kubeflow Pipelines project is to build a Kubernetes optimized\n    stack for creating and deploying ML Pipelines and enabling a rich ecosystem of\n    pipelines components and tools. ML Pipelines project has the goal of enabling\n    simple and reliable productionalization of autonomous ML workflows, advancing\n    the standards of ML Engineering and making them available to a large community\n    of users across various Kubernetes deployment options.\n\n  charter_link: charter.md\n  label: area/wg-pipelines\n  leadership:\n    chairs:\n    - github: HumairAK\n      name: Humair Khan\n      company: Red Hat\n    - github: chensun\n      name: Chen Sun\n      company: Google\n    - github: droctothorpe\n      name: Alexander Perlman\n      company: Capital One\n    - github: james-jwu\n      name: James Wu\n      company: Google\n    - github: mprahl\n      name: Matthew Prahl\n      company: Red Hat\n    - github: zazulam\n      name: Michael Zazula\n      company: Capital One\n  meetings: []\n  contact:\n    mailing_list: https://groups.google.com/forum/#!forum/kubeflow-discuss\n    teams:\n    - name: wg-pipeline-leads\n      description: Team of Pipeline Working Group leads\n  subprojects:\n  - name: kfp-tekton\n    owners:\n    - https://raw.githubusercontent.com/kubeflow/kfp-tekton/master/OWNERS\n  - name: metadata\n    owners:\n    - https://raw.githubusercontent.com/kubeflow/metadata/master/OWNERS\n  - name: pipelines\n    owners:\n    - https://raw.githubusercontent.com/kubeflow/pipelines/master/OWNERS\n- dir: wg-serving\n  name: Serving\n  mission_statement: >\n    WG Serving covers developing, deploying, and operating serving jobs on Kubeflow.\n\n  charter_link: charter.md\n  label: area/wg-serving\n  leadership:\n    chairs:\n    - github: animeshsingh\n      name: Animesh Singh\n      company: IBM\n    - github: cliveseldon\n      name: Clive Cox\n      company: Seldon\n    - github: ellistarn\n      name: Ellis Tarn\n      company: AWS\n    - github: rakelkar\n      name: Rakesh Kalekar\n      company: Microsoft\n    - github: yuzisun\n      name: Dan Sun\n      company: Bloomberg\n    tech_leads:\n    - github: animeshsingh\n      name: Animesh Singh\n      company: IBM\n    - github: cliveseldon\n      name: Clive Cox\n      company: Seldon\n    - github: ellistarn\n      name: Ellis Tarn\n      company: AWS\n    - github: iamlovingit\n      name: Qingshan Chen\n      company: Inspur\n    - github: yuzisun\n      name: Dan Sun\n      company: Bloomberg\n  meetings:\n  - description: Regular WG Meeting\n    day: Wednesday\n    time: \"09:00\"\n    tz: PT (Pacific Time)\n    frequency: biweekly\n    archive_url: https://docs.google.com/document/d/1KZUURwr9MnHXqHA08TFbfVbM8EAJSJjmaMhnvstvi-k/edit\n  contact:\n    slack: kfserving\n    mailing_list: https://groups.google.com/forum/#!forum/kubeflow-discuss\n    teams:\n    - name: wg-serving\n      description: KFServing Development and roadmap\n  subprojects:\n  - name: kfserving\n    owners:\n    - https://github.com/kubeflow/kfserving/blob/master/OWNERS\n- dir: wg-training\n  name: Training\n  mission_statement: >\n    WG Training covers developing, deploying, and operating training jobs on Kubeflow.\n\n  charter_link: charter.md\n  label: area/wg-training\n  leadership:\n    chairs:\n    - github: gaocegege\n      name: Ce Gao\n      company: Caicloud\n    - github: johnugeorge\n      name: Johnu George\n      company: Nutanix\n    - github: terrytangyuan\n      name: Yuan Tang\n      company: Red Hat\n    tech_leads:\n    - github: Jeffwan\n      name: Jiaxin Shan\n      company: ByteDance\n    - github: andreyvelich\n      name: Andrey Velichkevich\n      company: Apple\n    - github: gaocegege\n      name: Ce Gao\n      company: Caicloud\n    - github: johnugeorge\n      name: Johnu George\n      company: Nutanix\n    - github: tenzen-y\n      name: Yuki Iwai\n      company: CyberAgent, Inc.\n    - github: terrytangyuan\n      name: Yuan Tang\n      company: Red Hat\n  meetings:\n  - description: Regular WG Meeting (Asia & Europe friendly)\n    day: Wednesday\n    time: \"03:00\"\n    tz: PT (Pacific Time)\n    frequency: monthly - first Wednesday every month\n    archive_url: https://docs.google.com/document/d/1K0Qfr0zTuARtAg7ETg9hsMZPh0MT2QUxqGAYvM1Vpec/edit\n  - description: Regular WG Meeting (US friendly)\n    day: Wednesday\n    time: \"10:00\"\n    tz: PT (Pacific Time)\n    frequency: monthly - third Wednesday every month\n    archive_url: https://docs.google.com/document/d/1K0Qfr0zTuARtAg7ETg9hsMZPh0MT2QUxqGAYvM1Vpec/edit\n  contact:\n    slack: wg-training\n    mailing_list: https://groups.google.com/forum/#!forum/kubeflow-discuss\n    teams:\n    - name: wg-training-bugs\n      description: Bug Triage and Troubleshooting\n    - name: wg-training-machinery-misc\n      description: General Discussion\n    - name: wg-training-reviews\n      description: API Changes and Reviews (API Machinery APIs, NOT all APIs)\n  subprojects:\n  - name: caffe2-operator\n    owners:\n    - https://raw.githubusercontent.com/kubeflow/caffe2-operator/master/OWNERS\n  - name: chainer-operator\n    owners:\n    - https://raw.githubusercontent.com/kubeflow/chainer-operator/master/OWNERS\n  - name: common\n    owners:\n    - https://raw.githubusercontent.com/kubeflow/common/master/OWNERS\n  - name: fate-operator\n    owners:\n    - https://raw.githubusercontent.com/kubeflow/fate-operator/master/OWNERS\n  - name: mpi-operator\n    owners:\n    - https://raw.githubusercontent.com/kubeflow/mpi-operator/master/OWNERS\n  - name: mxnet-operator\n    owners:\n    - https://raw.githubusercontent.com/kubeflow/mxnet-operator/master/OWNERS\n  - name: pytorch-operator\n    owners:\n    - https://raw.githubusercontent.com/kubeflow/pytorch-operator/master/OWNERS\n  - name: tf-operator\n    owners:\n    - https://raw.githubusercontent.com/kubeflow/tf-operator/master/OWNERS\n  - name: xgboost-operator\n    owners:\n    - https://raw.githubusercontent.com/kubeflow/xgboost-operator/master/OWNERS\nusergroups: []\ncommittees: []\n"
  }
]